185 lines
5.7 KiB
JavaScript
185 lines
5.7 KiB
JavaScript
/**
|
|
* Model for Multisites Dashboard aka All Websites Dashboard.
|
|
*/
|
|
(function () {
|
|
angular.module('piwikApp').factory('multisitesDashboardModel', multisitesDashboardModel);
|
|
|
|
multisitesDashboardModel.$inject = ['piwikApi', '$filter', '$timeout'];
|
|
|
|
function multisitesDashboardModel(piwikApi, $filter, $timeout) {
|
|
|
|
var refreshPromise = null;
|
|
|
|
// those sites are going to be displayed
|
|
var model = {
|
|
sites : [],
|
|
isLoading : false,
|
|
pageSize : 25,
|
|
currentPage : 0,
|
|
totalVisits : '?',
|
|
totalPageviews : '?',
|
|
totalActions : '?',
|
|
totalRevenue : '?',
|
|
searchTerm : '',
|
|
lastVisits : '?',
|
|
lastVisitsDate : '?',
|
|
numberOfSites : 0,
|
|
loadingMessage: _pk_translate('MultiSites_LoadingWebsites'),
|
|
updateWebsitesList: updateWebsitesList,
|
|
getNumberOfFilteredSites: getNumberOfFilteredSites,
|
|
getNumberOfPages: getNumberOfPages,
|
|
getPaginationLowerBound: getPaginationLowerBound,
|
|
getPaginationUpperBound: getPaginationUpperBound,
|
|
previousPage: previousPage,
|
|
nextPage: nextPage,
|
|
searchSite: searchSite,
|
|
sortBy: sortBy,
|
|
reverse: true,
|
|
sortColumn: 'nb_visits',
|
|
fetchAllSites: fetchAllSites,
|
|
refreshInterval: 0
|
|
};
|
|
|
|
return model;
|
|
|
|
function cancelRefereshInterval()
|
|
{
|
|
if (refreshPromise) {
|
|
$timeout.cancel(refreshPromise);
|
|
refreshPromise = null;
|
|
};
|
|
}
|
|
|
|
function onError () {
|
|
model.errorLoadingSites = true;
|
|
model.sites = [];
|
|
}
|
|
|
|
function updateWebsitesList(report) {
|
|
if (!report) {
|
|
onError();
|
|
return;
|
|
}
|
|
|
|
var allSites = report.sites;
|
|
angular.forEach(allSites, function (site, index) {
|
|
site.visits_evolution = parseInt(site.visits_evolution, 10);
|
|
site.pageviews_evolution = parseInt(site.pageviews_evolution, 10);
|
|
site.revenue_evolution = parseInt(site.revenue_evolution, 10);
|
|
});
|
|
|
|
model.totalVisits = report.totals.nb_visits;
|
|
model.totalPageviews = report.totals.nb_pageviews;
|
|
model.totalActions = report.totals.nb_actions;
|
|
model.totalRevenue = report.totals.revenue;
|
|
model.lastVisits = report.totals.nb_visits_lastdate;
|
|
model.sites = allSites;
|
|
model.numberOfSites = report.numSites;
|
|
model.lastVisitsDate = report.lastDate;
|
|
}
|
|
|
|
function getNumberOfFilteredSites () {
|
|
return model.numberOfSites;
|
|
}
|
|
|
|
function getNumberOfPages() {
|
|
return Math.ceil(getNumberOfFilteredSites() / model.pageSize - 1);
|
|
}
|
|
|
|
function getCurrentPagingOffset() {
|
|
return Math.ceil(model.currentPage * model.pageSize);
|
|
}
|
|
|
|
function getPaginationLowerBound() {
|
|
return getCurrentPagingOffset() + 1;
|
|
}
|
|
|
|
function getPaginationUpperBound() {
|
|
var end = getCurrentPagingOffset() + parseInt(model.pageSize, 10);
|
|
var max = getNumberOfFilteredSites();
|
|
if (end > max) {
|
|
end = max;
|
|
}
|
|
return parseInt(end, 10);
|
|
}
|
|
|
|
function previousPage() {
|
|
model.currentPage = model.currentPage - 1;
|
|
fetchAllSites();
|
|
}
|
|
|
|
function sortBy(metric) {
|
|
if (model.sortColumn == metric) {
|
|
model.reverse = !model.reverse;
|
|
}
|
|
|
|
model.sortColumn = metric;
|
|
fetchAllSites();
|
|
};
|
|
|
|
function previousPage() {
|
|
model.currentPage = model.currentPage - 1;
|
|
fetchAllSites();
|
|
}
|
|
|
|
function nextPage() {
|
|
model.currentPage = model.currentPage + 1;
|
|
fetchAllSites();
|
|
}
|
|
|
|
function searchSite (term) {
|
|
model.searchTerm = term;
|
|
model.currentPage = 0;
|
|
fetchAllSites();
|
|
}
|
|
|
|
function fetchAllSites() {
|
|
|
|
if (model.isLoading) {
|
|
piwikApi.abort();
|
|
cancelRefereshInterval();
|
|
}
|
|
|
|
model.isLoading = true;
|
|
model.errorLoadingSites = false;
|
|
|
|
var params = {
|
|
module: 'MultiSites',
|
|
action: 'getAllWithGroups',
|
|
hideMetricsDoc: '1',
|
|
filter_sort_order: 'asc',
|
|
filter_limit: model.pageSize,
|
|
filter_offset: getCurrentPagingOffset(),
|
|
showColumns: 'label,nb_visits,nb_pageviews,visits_evolution,pageviews_evolution,revenue_evolution,nb_actions,revenue'
|
|
};
|
|
|
|
if (model.searchTerm) {
|
|
params.pattern = model.searchTerm;
|
|
}
|
|
|
|
if (model.sortColumn) {
|
|
params.filter_sort_column = model.sortColumn;
|
|
}
|
|
|
|
if (model.reverse) {
|
|
params.filter_sort_order = 'desc';
|
|
}
|
|
|
|
return piwikApi.fetch(params).then(function (response) {
|
|
updateWebsitesList(response);
|
|
}, onError).finally(function () {
|
|
model.isLoading = false;
|
|
|
|
if (model.refreshInterval && model.refreshInterval > 0) {
|
|
cancelRefereshInterval();
|
|
|
|
refreshPromise = $timeout(function () {
|
|
refreshPromise = null;
|
|
fetchAllSites(model.refreshInterval);
|
|
}, model.refreshInterval * 1000);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
})();
|