Newer
Older
Thomas Steur
a validé
/*!
* Piwik - Web Analytics
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
angular.module('piwikApp.service').factory('piwikApi', function ($http, $q, $rootScope, piwik, $window) {
Thomas Steur
a validé
var url = 'index.php';
var format = 'json';
var getParams = {};
var postParams = {};
Thomas Steur
a validé
var piwikApi = {};
/**
* Adds params to the request.
* If params are given more then once, the latest given value is used for the request
*
* @param {object} params
* @return {void}
*/
Thomas Steur
a validé
function addParams (params) {
Thomas Steur
a validé
if (typeof params == 'string') {
Thomas Steur
a validé
params = piwik.broadcast.getValuesFromUrl(params);
Thomas Steur
a validé
}
for (var key in params) {
Thomas Steur
a validé
getParams[key] = params[key];
Thomas Steur
a validé
}
};
function reset () {
getParams = {};
postParams = {};
}
Thomas Steur
a validé
/**
* Send the request
Thomas Steur
a validé
* @return $promise
Thomas Steur
a validé
*/
Thomas Steur
a validé
var deferred = requestHandle = $q.defer();
Thomas Steur
a validé
var onError = function (message) {
deferred.reject(message);
Thomas Steur
a validé
};
Thomas Steur
a validé
if (response && response.result == 'error') {
if (response.message) {
onError(response.message);
var UI = require('piwik/UI');
var notification = new UI.Notification();
notification.show(response.message, {
context: 'error',
type: 'toast',
id: 'ajaxHelper'
});
notification.scrollToNotification();
} else {
onError(null);
}
} else {
deferred.resolve(response);
}
Thomas Steur
a validé
};
var headers = {
'Content-Type': 'application/x-www-form-urlencoded',
// ie 8,9,10 caches ajax requests, prevent this
'cache-control': 'no-cache'
};
Thomas Steur
a validé
var ajaxCall = {
method: 'POST',
url: url,
responseType: format,
params: _mixinDefaultGetParams(getParams),
Thomas Steur
a validé
data: $.param(getPostParams(postParams)),
Thomas Steur
a validé
timeout: deferred.promise,
Thomas Steur
a validé
};
$http(ajaxCall).success(onSuccess).error(onError);
return deferred.promise;
};
/**
Thomas Steur
a validé
* Get the parameters to send as POST
Thomas Steur
a validé
*
* @param {object} params parameter object
* @return {object}
* @private
*/
Thomas Steur
a validé
function getPostParams () {
return {
Thomas Steur
a validé
token_auth: piwik.token_auth
};
};
/**
* Mixin the default parameters to send as GET
*
* @param {object} getParamsToMixin parameter object
* @return {object}
* @private
*/
function _mixinDefaultGetParams (getParamsToMixin) {
var defaultParams = {
Thomas Steur
a validé
idSite: piwik.idSite || piwik.broadcast.getValueFromUrl('idSite'),
period: piwik.period || piwik.broadcast.getValueFromUrl('period'),
segment: piwik.broadcast.getValueFromHash('segment', $window.location.href.split('#')[1])
Thomas Steur
a validé
};
// never append token_auth to url
if (getParamsToMixin.token_auth) {
getParamsToMixin.token_auth = null;
delete getParamsToMixin.token_auth;
}
for (var key in defaultParams) {
if (!getParamsToMixin[key] && !postParams[key] && defaultParams[key]) {
getParamsToMixin[key] = defaultParams[key];
}
}
// handle default date & period if not already set
if (!getParamsToMixin.date && !postParams.date) {
Thomas Steur
a validé
getParamsToMixin.date = piwik.currentDateString || piwik.broadcast.getValueFromUrl('date');
Thomas Steur
a validé
if (getParamsToMixin.period == 'range' && piwik.currentDateString) {
getParamsToMixin.date = piwik.startDateString + ',' + getParamsToMixin.date;
}
}
return getParamsToMixin;
};
if (requestHandle) {
requestHandle.resolve();
requestHandle = null;
}
};
Thomas Steur
a validé
/**
* Perform a reading API request.
Thomas Steur
a validé
* @param getParams
*/
piwikApi.fetch = function (getParams) {
getParams.module = 'API';
getParams.format = 'JSON';
Thomas Steur
a validé
addParams(getParams, 'GET');
Thomas Steur
a validé
var promise = send();
reset();
return promise;
};
piwikApi.post = function (getParams, _postParams_) {
if (_postParams_) {
postParams = _postParams_;
}
return this.fetch(getParams);
Thomas Steur
a validé
};
return piwikApi;
});