You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
636 lines
27 KiB
636 lines
27 KiB
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
|
|
|
class GAnalytics_model extends CI_Model {
|
|
|
|
private $__analytics;
|
|
private $__def_ga_config;
|
|
private $__rep_data_cat;
|
|
protected $__db;
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
|
|
$force_get_data_from_prod = false;
|
|
if (ENVIRONMENT == "production" || $force_get_data_from_prod) {
|
|
$KEY_FILE_LOCATION = APPPATH . 'config/google-api-cred/ateliers-prod.json';
|
|
$view_id = GA_VIEW_ID_ALL;
|
|
// dimension for connected user
|
|
$connected_user_dim = 'dimension2';
|
|
} else {
|
|
$KEY_FILE_LOCATION = APPPATH . 'config/google-api-cred/ateliers-dev.json';
|
|
$view_id = GA_VIEW_ID_ALL;
|
|
// dimension for connected user
|
|
$connected_user_dim = 'dimension2';
|
|
}
|
|
|
|
// Create and configure a new client object.
|
|
$client = new Google_Client();
|
|
$client->setApplicationName("ateliers");
|
|
$client->setAuthConfig($KEY_FILE_LOCATION);
|
|
$client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
|
|
$this->__analytics = new Google_Service_AnalyticsReporting($client);
|
|
|
|
$this->__def_ga_config = array(
|
|
'view_id' => "$view_id",
|
|
'start' => "30daysAgo",
|
|
'end' => "today",
|
|
'pageSize' => 1000000000,
|
|
// depends on what index you put this custom dimension
|
|
'connectedUserDimension' => 'ga:'.$connected_user_dim,
|
|
);
|
|
|
|
$this->__rep_data_cat = array(
|
|
// "total_per_user_type_and_date_rep" => array(
|
|
// "mets" => array(
|
|
// 'users', 'sessions','sessionDuration','pageViews','uniquePageviews'
|
|
// ),
|
|
// "dims" => array('date'),
|
|
// ),
|
|
"session_pageviews_bouncerate" => array(
|
|
"mets" => array(
|
|
'sessions','sessionDuration','pageViews','uniquePageviews', 'bounceRate'
|
|
),
|
|
"dims" => array('userType', 'date'),
|
|
),
|
|
"visitors" => array(
|
|
"mets" => array('users'),
|
|
"dims" => array('browser', 'date', 'deviceCategory', 'userType'),
|
|
),
|
|
// "bounce_rate" => array(
|
|
// "mets" => array('bounceRate'),
|
|
// "dims" => array('date'),
|
|
// ),
|
|
"connected_users" => array(
|
|
"mets" => array('users', 'sessions','sessionDuration','pageViews','uniquePageviews', 'bounceRate'),
|
|
"dims" => array('date', $connected_user_dim),
|
|
),
|
|
"events" => array(
|
|
"mets" => array('totalEvents'),
|
|
"dims" => array('eventAction', 'eventCategory', 'eventLabel', 'date', 'userType'),
|
|
),
|
|
"sources" => array(
|
|
"dims" => array('source','sourceMedium','date', 'channelGrouping'),
|
|
),
|
|
// "event_page_views" => array(
|
|
// "mets" => array('totalEvents', 'eventValue'),
|
|
// "dims" => array('eventAction', 'eventCategory', 'eventLabel', 'date'),
|
|
// ),
|
|
);
|
|
}
|
|
|
|
private function setCategory($report_category)
|
|
{
|
|
$category = array();
|
|
switch ($report_category) {
|
|
case 'all_garep':
|
|
$category = $this->__rep_data_cat;
|
|
break;
|
|
|
|
default:
|
|
$category = array($this->__rep_data_cat[$report_category]);
|
|
break;
|
|
}
|
|
return $category;
|
|
}
|
|
private function set_ga_date($date){
|
|
$d = DateTime::createFromFormat('Y-m-d', $date);
|
|
$is_date = $d && $d->format('Y-m-d') === $date;
|
|
$days = '-0';
|
|
if (!$is_date) {
|
|
$n_date = strtolower($date);
|
|
switch ($n_date) {
|
|
case 'today':
|
|
$days = '-0';
|
|
break;
|
|
case 'yesterday':
|
|
$days = '-1';
|
|
break;
|
|
case '7daysago':
|
|
$days = '-7';
|
|
break;
|
|
case '30daysago':
|
|
$days = '-30';
|
|
break;
|
|
}
|
|
return date('Y-m-d', strtotime("$days days"));
|
|
} else {
|
|
return $date;
|
|
}
|
|
}
|
|
|
|
public function getStoreGAData($db, $start ='', $end ='', $pageSize ='', $order ='', $report_category = 'all_garep')
|
|
{
|
|
// set the database connection
|
|
$this->__db = $db;
|
|
|
|
$category_met_dims = $this->setCategory($report_category);
|
|
|
|
// Create the DateRange object.
|
|
$dateRange = new Google_Service_AnalyticsReporting_DateRange();
|
|
|
|
$dateRange->setStartDate(
|
|
empty($start)?$this->__def_ga_config['start']:$start
|
|
);
|
|
$dateRange->setEndDate(
|
|
empty($end)?$this->__def_ga_config['end']:$end
|
|
);
|
|
|
|
// get categories
|
|
foreach ($category_met_dims as $category => $met_dims) {
|
|
$ga_mets = array();
|
|
$ga_dims = array();
|
|
// get and initialize metrics
|
|
if (isset($met_dims['mets'])) {
|
|
for ($i=0; $i < count($met_dims['mets']) ; $i++) {
|
|
// Create the Metrics object.
|
|
$ga_mets[$i] = new Google_Service_AnalyticsReporting_Metric();
|
|
$ga_mets[$i]->setExpression("ga:{$met_dims['mets'][$i]}");
|
|
$ga_mets[$i]->setAlias("{$met_dims['mets'][$i]}");
|
|
}
|
|
}
|
|
// create the dimension objects
|
|
for ($i=0; $i < count($met_dims['dims']) ; $i++) {
|
|
// Create the Metrics object.
|
|
$ga_dims[$i] = new Google_Service_AnalyticsReporting_Dimension();
|
|
$ga_dims[$i]->setName("ga:{$met_dims['dims'][$i]}");
|
|
}
|
|
// Create the ReportRequest object.
|
|
$request = new Google_Service_AnalyticsReporting_ReportRequest();
|
|
$request->setViewId($this->__def_ga_config['view_id']);
|
|
$request->setDateRanges($dateRange);
|
|
$request->setDimensions($ga_dims);
|
|
$request->setMetrics($ga_mets);
|
|
$request->setPageSize(
|
|
empty($pageSize)?$this->__def_ga_config['pageSize']:$pageSize
|
|
);
|
|
|
|
$body = new Google_Service_AnalyticsReporting_GetReportsRequest();
|
|
$body->setReportRequests( array( $request) );
|
|
// $this->printResults($this->__analytics->reports->batchGet( $body ));
|
|
$this->storeResults($category, $this->__analytics->reports->batchGet( $body ));
|
|
}
|
|
}
|
|
|
|
private function storeResults($category, $reports){
|
|
for ( $reportIndex = 0; $reportIndex < count( $reports ); $reportIndex++ ) {
|
|
$report = $reports[ $reportIndex ];
|
|
$header = $report->getColumnHeader();
|
|
$dimensionHeaders = $header->getDimensions();
|
|
$metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries();
|
|
$rows = $report->getData()->getRows();
|
|
$query_data = array();
|
|
|
|
$visitor_for_current_date_inserted = 0;
|
|
for ( $rowIndex = 0; $rowIndex < count($rows); $rowIndex++) {
|
|
$rep_data = array();
|
|
$row = $rows[ $rowIndex ];
|
|
$dimensions = $row->getDimensions();
|
|
$metrics = $row->getMetrics();
|
|
for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) {
|
|
if (
|
|
$dimensionHeaders[$i] == 'ga:userType' ||
|
|
$dimensionHeaders[$i] == $this->__def_ga_config['connectedUserDimension']
|
|
) {
|
|
switch ($dimensions[$i]) {
|
|
case 'New Visitor':
|
|
$user = 1;
|
|
break;
|
|
case 'Returning Visitor':
|
|
$user = 2;
|
|
break;
|
|
case 'Total users':
|
|
$user = 0;
|
|
break;
|
|
|
|
default:
|
|
// 3 means connected users
|
|
$user = 3;
|
|
break;
|
|
}
|
|
$rep_data['dims'][$dimensionHeaders[$i]] = $user;
|
|
} else {
|
|
$rep_data['dims'][$dimensionHeaders[$i]] = ($dimensions[$i]);
|
|
}
|
|
// print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n");
|
|
}
|
|
|
|
for ($j = 0; $j < count($metrics); $j++) {
|
|
$values = $metrics[$j]->getValues();
|
|
for ($k = 0; $k < count($values); $k++) {
|
|
$entry = $metricHeaders[$k];
|
|
$rep_data['mets'][$entry->getName()] = ($values[$k]);
|
|
// print($entry->getName() . ": " . $values[$k] . "\n");
|
|
}
|
|
}
|
|
// echo "$category";
|
|
// echo var_dump($rep_data).'<hr />';
|
|
$this->__db->trans_start();
|
|
$ga_queries = array();
|
|
$date = $rep_data['dims']['ga:date'];
|
|
$q = 0;
|
|
if (isset($rep_data['dims']['ga:userType'])) {
|
|
$utype = $rep_data['dims']['ga:userType'];
|
|
}
|
|
if (isset($rep_data['dims'][$this->__def_ga_config['connectedUserDimension']])) {
|
|
$utype = $rep_data['dims'][$this->__def_ga_config['connectedUserDimension']];
|
|
}
|
|
switch ($category) {
|
|
case 'session_pageviews_bouncerate':
|
|
// insert users report data
|
|
// $ga_queries[$q++] = "INSERT INTO ga_visitors(vis_rdata, vis_rdate, user_type) VALUES(
|
|
// {$rep_data['mets']['users']},
|
|
// '$date', $utype
|
|
// ) ON DUPLICATE KEY UPDATE vis_rdata = {$rep_data['mets']['users']}";
|
|
|
|
// insert sessions report data
|
|
$query_data[$q] = array(
|
|
$rep_data['mets']['sessions'],
|
|
$date,
|
|
0,
|
|
$utype,
|
|
$rep_data['mets']['sessions']
|
|
);
|
|
$ga_queries[$q++] = "INSERT IGNORE INTO ga_sessions(sess_rdata, sess_rdate, sess_rtype, user_type) VALUES(
|
|
?, ?, ?, ?
|
|
) ON DUPLICATE KEY UPDATE sess_rdata = ?";
|
|
|
|
// insert sessions duration report data
|
|
$query_data[$q] = array(
|
|
$rep_data['mets']['sessionDuration'],
|
|
$date,
|
|
1,
|
|
$utype,
|
|
$rep_data['mets']['sessionDuration']
|
|
);
|
|
$ga_queries[$q++] = "INSERT IGNORE INTO ga_sessions(sess_rdata, sess_rdate, sess_rtype, user_type) VALUES(
|
|
?, ?, ?, ?
|
|
) ON DUPLICATE KEY UPDATE sess_rdata = ?";
|
|
|
|
// pageviews report data
|
|
$query_data[$q] = array(
|
|
$rep_data['mets']['pageViews'],
|
|
$date,
|
|
0,
|
|
$utype,
|
|
$rep_data['mets']['pageViews']
|
|
);
|
|
$ga_queries[$q++] = "INSERT IGNORE INTO ga_pageviews(pv_rdata, pv_rdate, pv_rtype, user_type) VALUES(
|
|
?, ?, ?, ?
|
|
) ON DUPLICATE KEY UPDATE pv_rdata = ?";
|
|
|
|
// unique pageviews report data
|
|
$query_data[$q] = array(
|
|
$rep_data['mets']['uniquePageviews'],
|
|
$date,
|
|
1,
|
|
$utype,
|
|
$rep_data['mets']['uniquePageviews']
|
|
);
|
|
$ga_queries[$q++] = "INSERT IGNORE INTO ga_pageviews(pv_rdata, pv_rdate, pv_rtype, user_type) VALUES(
|
|
?, ?, ?, ?
|
|
) ON DUPLICATE KEY UPDATE pv_rdata = ?";
|
|
|
|
// insert bounce rate data
|
|
$query_data[$q] = array(
|
|
$rep_data['mets']['bounceRate'],
|
|
$date,
|
|
$utype,
|
|
$rep_data['mets']['bounceRate']
|
|
);
|
|
$ga_queries[$q++] = "INSERT INTO ga_bounce_rate(bcr_rdata, bcr_rdate, user_type) VALUES(
|
|
?, ?, ?
|
|
) ON DUPLICATE KEY UPDATE bcr_rdata = ?";
|
|
break;
|
|
|
|
case 'visitors':
|
|
// insert visitors report data
|
|
$query_data[$q] = array(
|
|
$rep_data['mets']['users'],
|
|
$date, $utype, $rep_data['dims']['ga:browser'],
|
|
$rep_data['dims']['ga:deviceCategory'],
|
|
$rep_data['mets']['users']
|
|
);
|
|
$ga_queries[$q++] = "INSERT INTO ga_visitors(vis_rdata, vis_rdate, user_type, br_rtype, dv_rtype) VALUES(
|
|
?, ?, ?, ?, ?
|
|
) ON DUPLICATE KEY UPDATE vis_rdata = ?";
|
|
break;
|
|
|
|
case 'connected_users':
|
|
// for connected users
|
|
// insert sessions data
|
|
$query_data[$q] = array(
|
|
$rep_data['mets']['sessions'],
|
|
$date, 0, $utype,
|
|
$rep_data['mets']['sessions'],
|
|
);
|
|
$ga_queries[$q++] = "INSERT IGNORE INTO ga_sessions(sess_rdata, sess_rdate, sess_rtype, user_type) VALUES(
|
|
?, ?, ?, ?
|
|
) ON DUPLICATE KEY UPDATE sess_rdata = ?";
|
|
|
|
// insert sessions duration report data
|
|
$query_data[$q] = array(
|
|
$rep_data['mets']['sessionDuration'],
|
|
$date,
|
|
1,
|
|
$utype,
|
|
$rep_data['mets']['sessionDuration']
|
|
);
|
|
$ga_queries[$q++] = "INSERT IGNORE INTO ga_sessions(sess_rdata, sess_rdate, sess_rtype, user_type) VALUES(
|
|
?, ?, ?, ?
|
|
) ON DUPLICATE KEY UPDATE sess_rdata = ?";
|
|
|
|
// pageviews report data
|
|
$query_data[$q] = array(
|
|
$rep_data['mets']['pageViews'],
|
|
$date,
|
|
0,
|
|
$utype,
|
|
$rep_data['mets']['pageViews']
|
|
);
|
|
$ga_queries[$q++] = "INSERT IGNORE INTO ga_pageviews(pv_rdata, pv_rdate, pv_rtype, user_type) VALUES(
|
|
?, ?, ?, ?
|
|
) ON DUPLICATE KEY UPDATE pv_rdata = ?";
|
|
|
|
// unique pageviews report data
|
|
$query_data[$q] = array(
|
|
$rep_data['mets']['uniquePageviews'],
|
|
$date,
|
|
1,
|
|
$utype,
|
|
$rep_data['mets']['uniquePageviews']
|
|
);
|
|
$ga_queries[$q++] = "INSERT IGNORE INTO ga_pageviews(pv_rdata, pv_rdate, pv_rtype, user_type) VALUES(
|
|
?, ?, ?, ?
|
|
) ON DUPLICATE KEY UPDATE pv_rdata = ?";
|
|
|
|
// insert bounce rate data
|
|
$query_data[$q] = array(
|
|
$rep_data['mets']['bounceRate'],
|
|
$date,
|
|
$utype,
|
|
$rep_data['mets']['bounceRate']
|
|
);
|
|
$ga_queries[$q++] = "INSERT INTO ga_bounce_rate(bcr_rdata, bcr_rdate, user_type) VALUES(
|
|
?, ?, ?
|
|
) ON DUPLICATE KEY UPDATE bcr_rdata = ?";
|
|
break;
|
|
|
|
case 'events':
|
|
// insert visitors report data
|
|
$insert_data = true;
|
|
if (
|
|
($rep_data['dims']['ga:eventCategory'] == 'fo_filter' &&
|
|
(
|
|
!is_numeric($rep_data['dims']['ga:eventAction']) ||
|
|
!in_array($rep_data['dims']['ga:eventLabel'], array('filter-city', 'filter-type', 'filter-month'))
|
|
))
|
|
) {
|
|
$insert_data = false;
|
|
}
|
|
if (
|
|
($rep_data['dims']['ga:eventCategory'] == 'event_page_views' &&
|
|
(
|
|
!is_numeric($rep_data['dims']['ga:eventLabel']) ||
|
|
!in_array($rep_data['dims']['ga:eventAction'], array('Connected'
|
|
// , 'Returning', 'New'
|
|
)) ||
|
|
empty($rep_data['dims']['ga:eventLabel'])
|
|
))
|
|
) {
|
|
$insert_data = false;
|
|
}
|
|
|
|
if ($insert_data) {
|
|
if (
|
|
$rep_data['dims']['ga:eventCategory'] == 'EventPageview' ||
|
|
$rep_data['dims']['ga:eventCategory'] == 'event_page_views'
|
|
) {
|
|
switch ($rep_data['dims']['ga:eventAction']) {
|
|
case 'Connected':
|
|
$utype = 3;
|
|
break;
|
|
// case 'New':
|
|
// $ut = 1;
|
|
// break;
|
|
// case 'Returning':
|
|
// $ut = 2;
|
|
// break;
|
|
// case 'Total':
|
|
// $ut = 0;
|
|
// break;
|
|
|
|
default:
|
|
// 3 means connected users
|
|
// $ut = 3;
|
|
break;
|
|
}
|
|
$rep_data['dims']['ga:eventLabel'] = str_replace('Event ID : (','',$rep_data['dims']['ga:eventLabel']);
|
|
$rep_data['dims']['ga:eventLabel'] = (int)(str_replace(')','',$rep_data['dims']['ga:eventLabel']));
|
|
$query_data[$q] = array(
|
|
$rep_data['mets']['totalEvents'],
|
|
$rep_data['dims']['ga:eventLabel'],
|
|
$date, 0, $utype,
|
|
$rep_data['mets']['totalEvents'],
|
|
);
|
|
|
|
$ga_queries[$q++] = "INSERT INTO ga_events_view(ev_rdata, ev_eventid, ev_rdate, ev_rtype, user_type) VALUES(
|
|
?, ?, ?, ?, ?
|
|
) ON DUPLICATE KEY UPDATE ev_rdata = ?";
|
|
} else {
|
|
$query_data[$q] = array(
|
|
$rep_data['mets']['totalEvents'],
|
|
$rep_data['dims']['ga:eventAction'],
|
|
$rep_data['dims']['ga:eventLabel'],
|
|
$rep_data['dims']['ga:eventCategory'],
|
|
$date,
|
|
$utype,
|
|
$rep_data['mets']['totalEvents']
|
|
);
|
|
|
|
$ga_queries[$q++] = "INSERT INTO ga_events(gev_rdata, gev_raction, gev_rdatalabel, gev_rcategory ,gev_rdate, user_type) VALUES(
|
|
?, ?, ?, ?, ?, ?
|
|
) ON DUPLICATE KEY UPDATE gev_rdata = ?";
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'sources':
|
|
// insert visitors report data
|
|
$query_data[$q] = array(
|
|
$rep_data['mets']['ga:visits'],
|
|
$rep_data['dims']['ga:source'],
|
|
$rep_data['dims']['ga:sourceMedium'],
|
|
$rep_data['dims']['ga:channelGrouping'],
|
|
$date,
|
|
$rep_data['mets']['ga:visits']
|
|
);
|
|
$ga_queries[$q++] = "INSERT INTO ga_source_mediums(gsm_rdata, gsm_rsource, gsm_rsourcem, gsm_rchannelgroup, gsm_rdate) VALUES(
|
|
?, ?, ?, ?, ?
|
|
) ON DUPLICATE KEY UPDATE gsm_rdata = ?";
|
|
break;
|
|
default:
|
|
// code...
|
|
break;
|
|
}
|
|
|
|
foreach ($ga_queries as $key => $value) {
|
|
$successful = $this->__db->query($value, $query_data[$key]);
|
|
if (!$successful) {
|
|
// $this->__db->rollback();
|
|
// return false;
|
|
}
|
|
}
|
|
$this->__db->trans_complete();
|
|
}
|
|
}
|
|
}
|
|
|
|
public function getStoreConnectedUsers($start = '', $end ='')
|
|
{
|
|
$start = $this->set_ga_date($start);
|
|
$end = $this->set_ga_date($end);
|
|
$this->__db->trans_start();
|
|
|
|
$query = "INSERT IGNORE INTO ga_visitors(vis_rdata, br_rtype, dv_rtype, vis_rdate, user_type)
|
|
SELECT COUNT(DISTINCT CASE
|
|
WHEN ul.user_id IS NULL THEN 0
|
|
ELSE ul.user_id
|
|
END) AS vis_rdata,
|
|
(CASE
|
|
WHEN ul.user_agent IS NULL THEN 'Others'
|
|
-- REGEXP_REPLACE is only available in mysql version 8, upgrading mysql version is advisable before using this function on preprod or prod
|
|
-- ELSE trim(REGEXP_REPLACE(ul.user_agent,'[0-9.]+',''))
|
|
ELSE ul.user_agent
|
|
END) AS br_rtype,
|
|
(CASE
|
|
WHEN ul.device IS NULL THEN 'Others'
|
|
ELSE ul.device
|
|
END) AS dv_rtype ,
|
|
DATE_FORMAT(ul.date_time, '%Y-%m-%d') vis_rdate, 3
|
|
|
|
FROM user_login_history ul
|
|
INNER JOIN user u USING(user_id)
|
|
WHERE ul.description = 'LOGIN'
|
|
AND u.role_id = 3 AND
|
|
DATE_FORMAT(ul.date_time, '%Y-%m-%d') >= '$start' AND DATE_FORMAT(ul.date_time, '%Y-%m-%d') <= '$end'
|
|
GROUP BY DATE_FORMAT(ul.date_time, '%Y-%m-%d'), ul.user_agent, ul.device
|
|
|
|
ON DUPLICATE KEY UPDATE vis_rdata = vis_rdata";
|
|
|
|
if ($this->__db->query($query)) {
|
|
$this->__db->trans_complete();
|
|
}
|
|
$this->setMissingUserTypeValueToZero();
|
|
}
|
|
|
|
private function setMissingUserTypeValueToZero()
|
|
{
|
|
$user_types = array(
|
|
// "all" => 0,
|
|
"new" => 1,
|
|
"known" => 2, //or returning, old
|
|
"connected" => 3
|
|
);
|
|
$queries = array();
|
|
$q = 0;
|
|
// prepare queries for each user type
|
|
|
|
foreach ($user_types as $key => $utype) {
|
|
// visitors
|
|
$queries[$q++] = "INSERT IGNORE INTO ga_visitors(vis_rdate, vis_rdata, br_rtype, dv_rtype, user_type)
|
|
SELECT DISTINCT vis_rdate, 0, 'UNDEFINED', 'UNDEFINED', $utype
|
|
FROM ga_visitors gv WHERE vis_rdate NOT IN (
|
|
SELECT vis_rdate FROM ga_visitors WHERE user_type = $utype AND vis_rdata > 0
|
|
)
|
|
ON DUPLICATE KEY UPDATE vis_rdata = 0";
|
|
|
|
// sessions
|
|
$queries[$q++] = "INSERT IGNORE INTO ga_sessions(sess_rdate, sess_rdata, sess_rtype, user_type)
|
|
SELECT DISTINCT sess_rdate, 0, 0, $utype
|
|
FROM ga_sessions WHERE sess_rdate NOT IN (
|
|
SELECT sess_rdate FROM ga_sessions WHERE user_type = $utype AND sess_rdata > 0
|
|
)
|
|
ON DUPLICATE KEY UPDATE sess_rdata = 0";
|
|
|
|
// sessions duration
|
|
$queries[$q++] = "INSERT IGNORE INTO ga_sessions(sess_rdate, sess_rdata, sess_rtype, user_type)
|
|
SELECT DISTINCT sess_rdate, 0, 1, $utype
|
|
FROM ga_sessions WHERE sess_rdate NOT IN (
|
|
SELECT sess_rdate FROM ga_sessions WHERE user_type = $utype AND sess_rdata > 0
|
|
)
|
|
ON DUPLICATE KEY UPDATE sess_rdata = 0";
|
|
|
|
// pageviews
|
|
$queries[$q++] = "INSERT IGNORE INTO ga_pageviews(pv_rdate, pv_rdata, pv_rtype, user_type)
|
|
SELECT DISTINCT pv_rdate, 0, 0, $utype
|
|
FROM ga_pageviews WHERE pv_rdate NOT IN (
|
|
SELECT pv_rdate FROM ga_pageviews WHERE user_type = $utype AND pv_rdata > 0
|
|
)
|
|
ON DUPLICATE KEY UPDATE pv_rdata = 0";
|
|
|
|
// unique pageviews
|
|
$queries[$q++] = "INSERT IGNORE INTO ga_pageviews(pv_rdate, pv_rdata, pv_rtype, user_type)
|
|
SELECT DISTINCT pv_rdate, 0, 1, $utype
|
|
FROM ga_pageviews WHERE pv_rdate NOT IN (
|
|
SELECT pv_rdate FROM ga_pageviews WHERE user_type = $utype AND pv_rdata > 0
|
|
)
|
|
ON DUPLICATE KEY UPDATE pv_rdata = 0";
|
|
|
|
// event views
|
|
$queries[$q++] = "INSERT IGNORE INTO ga_events_view(ev_rdate, ev_rdata, ev_rtype, user_type, ev_eventid)
|
|
SELECT DISTINCT ev_rdate, 0, 0, $utype, 0
|
|
FROM ga_events_view WHERE ev_rdate NOT IN (
|
|
SELECT ev_rdate FROM ga_events_view WHERE user_type = $utype AND ev_rdata > 0
|
|
)
|
|
ON DUPLICATE KEY UPDATE ev_rdata = 0";
|
|
|
|
// bounce rate
|
|
$queries[$q++] = "INSERT IGNORE INTO ga_bounce_rate(bcr_rdate, bcr_rdata, user_type)
|
|
SELECT DISTINCT bcr_rdate, 0, $utype
|
|
FROM ga_bounce_rate WHERE bcr_rdate NOT IN (
|
|
SELECT bcr_rdate FROM ga_bounce_rate WHERE user_type = $utype AND bcr_rdata > 0
|
|
)
|
|
ON DUPLICATE KEY UPDATE bcr_rdata = 0";
|
|
}
|
|
// execute the queries
|
|
$this->__db->trans_start();
|
|
foreach ($queries as $key => $query) {
|
|
$this->__db->query($query);
|
|
if (!$this->__db->query($query)) {
|
|
$this->__db->rollback();
|
|
break;
|
|
}
|
|
}
|
|
$this->__db->trans_complete();
|
|
}
|
|
private function printResults($reports) {
|
|
echo var_dump($reports);
|
|
for ( $reportIndex = 0; $reportIndex < count( $reports ); $reportIndex++ ) {
|
|
$report = $reports[ $reportIndex ];
|
|
$header = $report->getColumnHeader();
|
|
$dimensionHeaders = $header->getDimensions();
|
|
$metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries();
|
|
$rows = $report->getData()->getRows();
|
|
|
|
for ( $rowIndex = 0; $rowIndex < count($rows); $rowIndex++) {
|
|
$row = $rows[ $rowIndex ];
|
|
$dimensions = $row->getDimensions();
|
|
$metrics = $row->getMetrics();
|
|
for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) {
|
|
print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "<br />");
|
|
}
|
|
|
|
for ($j = 0; $j < count($metrics); $j++) {
|
|
$values = $metrics[$j]->getValues();
|
|
for ($k = 0; $k < count($values); $k++) {
|
|
$entry = $metricHeaders[$k];
|
|
print($entry->getName() . ": " . $values[$k] . "<br />");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
?>
|