mirror of
https://github.com/monstra-cms/monstra.git
synced 2025-07-10 08:06:45 +02:00
184 lines
6.3 KiB
JavaScript
184 lines
6.3 KiB
JavaScript
if (typeof $.monstra == 'undefined') $.monstra = {};
|
|
|
|
function glibOnloadHandle(){$.monstra.ganalytics.libOnloadHandle();}
|
|
|
|
$.monstra.ganalytics = {
|
|
|
|
conf: {
|
|
clientId: '',
|
|
apiKey: '',
|
|
viewId: '',
|
|
authScopes: 'https://www.googleapis.com/auth/analytics.readonly'
|
|
},
|
|
|
|
_gaAreas: '#authOk,#authFail,#gaSettings,#gaLoading,#reauthError,#gaHelpLink',
|
|
_startDate: moment().subtract('days', 29),
|
|
_endDate: moment(),
|
|
|
|
init: function(data){
|
|
$.extend(this.conf, data);
|
|
$('.gaSettingsLink').click(function(){
|
|
$.monstra.ganalytics.show('#gaSettings,#gaHelpLink');
|
|
$('.gaSettingsLink').hide();
|
|
});
|
|
},
|
|
|
|
initDateRangePicker: function(){
|
|
$('#reportRange').daterangepicker({
|
|
ranges: {
|
|
'Today': [moment(), moment()],
|
|
'Yesterday': [moment().subtract('days', 1), moment().subtract('days', 1)],
|
|
'Last 7 Days': [moment().subtract('days', 6), moment()],
|
|
'Last 30 Days': [moment().subtract('days', 29), moment()],
|
|
'This Month': [moment().startOf('month'), moment().endOf('month')],
|
|
'Last Month': [moment().subtract('month', 1).startOf('month'), moment().subtract('month', 1).endOf('month')]
|
|
},
|
|
startDate: $.monstra.ganalytics._startDate,
|
|
endDate: $.monstra.ganalytics._endDate
|
|
},function(start, end) {
|
|
$.monstra.ganalytics.getAnalyticsInfo(start._d, end._d);
|
|
}
|
|
);
|
|
$.monstra.ganalytics.getAnalyticsInfo($.monstra.ganalytics._startDate._d, $.monstra.ganalytics._endDate._d);
|
|
},
|
|
|
|
libOnloadHandle: function(){
|
|
if ($.monstra.ganalytics.conf.clientId == ''
|
|
|| $.monstra.ganalytics.conf.apiKey == ''
|
|
|| $.monstra.ganalytics.conf.viewId == ''
|
|
) {
|
|
$.monstra.ganalytics.show('#gaSettings,#gaHelpLink');
|
|
$('.gaSettingsLink').hide();
|
|
return false;
|
|
}
|
|
gapi.client.setApiKey(this.conf.apiKey);
|
|
window.setTimeout(function(){
|
|
$.monstra.ganalytics.checkAuth(true);
|
|
},1);
|
|
},
|
|
|
|
checkAuth: function(immediate){
|
|
gapi.auth.authorize({
|
|
client_id: $.monstra.ganalytics.conf.clientId,
|
|
scope: $.monstra.ganalytics.conf.authScopes,
|
|
immediate: immediate
|
|
}, $.monstra.ganalytics.handleAuthResult);
|
|
return immediate;
|
|
},
|
|
|
|
handleAuthResult: function(authResult){
|
|
if (authResult && !authResult.error) {
|
|
$.monstra.ganalytics.show('#authOk');
|
|
$.monstra.ganalytics.initDateRangePicker();
|
|
} else {
|
|
$.monstra.ganalytics.show('#authFail');
|
|
if (authResult && typeof authResult.error != 'undefined') {
|
|
$.monstra.ganalytics.showError(authResult.error.message);
|
|
}
|
|
|
|
$('#authorizeButton').on('click', function(e){
|
|
$.monstra.ganalytics.checkAuth(false);
|
|
});
|
|
}
|
|
},
|
|
|
|
getAnalyticsInfo: function(startDate, endDate) {
|
|
gapi.client.load('analytics', 'v3', function(){
|
|
gapi.client.analytics.data.ga.get({
|
|
'ids': 'ga:'+ $.monstra.ganalytics.conf.viewId,
|
|
'start-date': $.monstra.ganalytics.formatDate(startDate),
|
|
'end-date': $.monstra.ganalytics.formatDate(endDate),
|
|
'metrics': 'ga:visits,ga:pageviews,ga:visitors',
|
|
'dimensions': 'ga:date'
|
|
}).execute($.monstra.ganalytics.gaReportingResults);
|
|
});
|
|
},
|
|
|
|
gaReportingResults: function(res){
|
|
if (typeof res.error != 'undefined' && typeof res.error.message != 'undefined') {
|
|
$.monstra.ganalytics.showError(res.error.message, res.error.code);
|
|
return;
|
|
}
|
|
|
|
// build chart data
|
|
var dataArr = [['Date', 'Visits']];
|
|
for (r in res.rows) {
|
|
var tmpr = [];
|
|
for (h in res.columnHeaders) {
|
|
if (res.columnHeaders[h].name == 'ga:visits') {
|
|
tmpr[1] = parseInt(res.rows[r][h]);
|
|
} else if (res.columnHeaders[h].name == 'ga:date') {
|
|
var parsed = res.rows[r][h].match(/([0-9]{4})([0-9]{2})([0-9]{2})/)
|
|
tmpr[0] = parsed[1] +'-'+ parsed[2] +'-'+ parsed[3];
|
|
}
|
|
|
|
if (res.rows.length == (parseInt(r)+1)) {
|
|
switch(res.columnHeaders[h].name) {
|
|
case 'ga:visits': $.monstra.ganalytics.setVisits(res.rows[r][h]); break;
|
|
case 'ga:pageviews': $.monstra.ganalytics.setPageviews(res.rows[r][h]); break;
|
|
case 'ga:visitors': $.monstra.ganalytics.setVisitors(res.rows[r][h]); break;
|
|
}
|
|
}
|
|
}
|
|
dataArr.push(tmpr);
|
|
}
|
|
|
|
var data = google.visualization.arrayToDataTable(dataArr);
|
|
|
|
var options = {
|
|
title: 'Visits',
|
|
hAxis: {title: 'Date', titleTextStyle: {color: '#333'}},
|
|
vAxis: {minValue: 0}
|
|
};
|
|
|
|
var chart = new google.visualization.AreaChart(document.getElementById('gaChart'));
|
|
chart.draw(data, options);
|
|
|
|
},
|
|
|
|
formatDate: function(dateObj){
|
|
var m = dateObj.getMonth()+1;
|
|
var d = dateObj.getDate();
|
|
m = m > 9 ? m : '0'+m;
|
|
d = d > 9 ? d : '0'+d;
|
|
return dateObj.getFullYear() +'-'+ m +'-'+ d;
|
|
},
|
|
|
|
show: function(selector){
|
|
$('.gaSettingsLink').show();
|
|
$('#gaAlerts').html('');
|
|
$($.monstra.ganalytics._gaAreas).addClass('hide');
|
|
$(selector).removeClass('hide').show();
|
|
},
|
|
|
|
showError: function(msg, errCode){
|
|
if (typeof errCode !== 'undefined' && errCode == 403) {
|
|
$.monstra.ganalytics.show('#reauthError,#gaHelpLink');
|
|
} else {
|
|
$.monstra.ganalytics.show('#gaHelpLink');
|
|
}
|
|
$('#gaAlerts').html(msg);
|
|
$('#authOk').addClass('hide');
|
|
},
|
|
|
|
setVisits: function(val){
|
|
$('#gaVisits').html(val);
|
|
},
|
|
|
|
setVisitors: function(val){
|
|
$('#gaVisitors').html(val);
|
|
},
|
|
|
|
setPageviews: function(val){
|
|
$('#gaPageviews').html(val);
|
|
}
|
|
};
|
|
|
|
$(document).ready(function(){
|
|
$val_gaInitData = $('#gaInitData').val();
|
|
if ($val_gaInitData !== undefined) {
|
|
$.monstra.ganalytics.init($.parseJSON($val_gaInitData));
|
|
}
|
|
});
|
|
|