(function(angular, $, _) {
angular.module('statuspage').controller('statuspageStatusPage',
function($scope, crmApi, crmStatus, statusData) {
$scope.ts = CRM.ts();
$scope.help = CRM.help;
$scope.formatDate = CRM.utils.formatDate;
$scope.statuses = statusData.values;
// Refresh the list. Optionally execute api calls first.
function refresh(apiCalls, title) {
title = title || 'Untitled operation';
apiCalls = (apiCalls || []).concat([['System', 'check', {sequential: 1}]]);
$('#crm-status-list').block();
crmApi(apiCalls, true)
.then(function(results) {
$scope.statuses = results[results.length - 1].values;
results.forEach(function(result) {
if (result.is_error) {
var error_message = ts(result.error_message);
if (typeof(result.debug_information) !== 'undefined') {
error_message += '
' +
'' + ts('Debug information') + ':
' +
result.debug_information + '
';
}
CRM.alert(error_message, ts('Operation failed: ' + title), 'error');
}
});
$('#crm-status-list').unblock();
});
}
// updates a status preference and refreshes status data
$scope.setPref = function(status, until, visible) {
refresh([
['StatusPreference', 'create', {
name: status.name,
ignore_severity: visible ? 0 : status.severity,
hush_until: until
}]
], 'Set preference');
};
$scope.countVisible = function(visibility) {
return _.filter($scope.statuses, function(s) {
return s.is_visible == visibility && s.severity_id >= 2;
}).length;
};
$scope.doAction = function(action) {
function run() {
switch (action.type) {
case 'href':
window.location = CRM.url(action.params.path, action.params.query, action.params.mode);
break;
case 'api3':
refresh([action.params], action.title);
break;
}
}
if (action.confirm) {
CRM.confirm({
title: action.title,
message: action.confirm
}).on('crmConfirm:yes', run);
} else {
run();
}
};
});
})(angular, CRM.$, CRM._);