Newer
Older
angular.module('piwikApp').factory('multisitesDashboardModel', function (piwikApi, $filter, $timeout) {
var model = {};
model.sites = [];
model.allSites = [];
model.isLoading = false;
model.pageSize = 5;
model.currentPage = 0;
model.totalVisits = 0;
model.totalActions = 0;
model.prettyDate = '';
model.updateWebsitesList = function (processedReport) {
model.allSites = processedReport.reportData;
model.totalVisits = processedReport.reportTotal.nb_visits;
model.totalActions = processedReport.reportTotal.nb_actions;
model.prettyDate = processedReport.prettyDate;
if (processedReport.reportMetadata) {
angular.forEach(model.allSites, function (site, index) {
site.idsite = processedReport.reportMetadata[index].idsite;
});
}
if (!model.allSites || !model.allSites.length) {
return;
}
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
};
model.getNumberOfFilteredSites = function () {
return model.sites.length;
}
model.getNumberOfFilteredSites = function () {
return model.sites.length;
}
model.getNumberOfPages = function () {
return model.sites.length / model.pageSize - 1;
}
model.getCurrentPagingOffsetStart = function() {
return Math.ceil(model.currentPage * model.pageSize);
}
model.getCurrentPagingOffsetEnd = function() {
var end = model.getCurrentPagingOffsetStart() + parseInt(model.pageSize, 10);
if (end > model.allSites.length) {
end = model.allSites.length
}
return parseInt(end, 10);
}
model.previousPage = function () {
model.currentPage = model.currentPage - 1
};
model.nextPage = function () {
model.currentPage = model.currentPage + 1
};
model.numberOfPages = function () {
return Math.ceil(model.allSites.length / model.pageSize);
};
model.searchSite = function (term) {
model.currentPage = 0;
model.sites = $filter('filter')(model.allSites, term);
}
model.fetchAllSites = function (refreshInterval) {
if (model.isLoading) {
piwikApi.abort();
}
model.isLoading = true;
return piwikApi.fetch({
method: 'API.getProcessedReport',
apiModule: 'MultiSites',
apiAction: 'getAll',
hideMetricsDoc: '1',
filter_limit: '-1',
showColumns: 'label,nb_visits,nb_pageviews,visits_evolution,pageviews_evolution,revenue_evolution,nb_actions,revenue',
enhanced: 1
}).then(function (response) {
model.updateWebsitesList(response);
}).finally(function () {
model.isLoading = false;
if (refreshInterval && refreshInterval > 0) {
$timeout(function () {
model.fetchAllSites(refreshInterval)
}, refreshInterval * 1000);
}
});
};
return model;
});