You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
338 lines
10 KiB
338 lines
10 KiB
// Generated by CoffeeScript 1.10.0
|
|
|
|
/*
|
|
* LemonLDAP::NG Notifications Explorer client
|
|
*/
|
|
|
|
(function() {
|
|
var llapp, menu, scheme;
|
|
|
|
scheme = [
|
|
function(v) {
|
|
return "groupBy=substr(uid,1)";
|
|
}, function(v) {
|
|
return "uid=" + v + "*&groupBy=uid";
|
|
}, function(v) {
|
|
return "uid=" + v;
|
|
}
|
|
];
|
|
|
|
menu = {
|
|
actives: [
|
|
{
|
|
title: 'markAsDone',
|
|
icon: 'eye-close'
|
|
}
|
|
],
|
|
done: [
|
|
{
|
|
title: 'deleteNotification',
|
|
icon: 'trash'
|
|
}
|
|
],
|
|
"new": [
|
|
{
|
|
title: 'save',
|
|
icon: 'save'
|
|
}
|
|
],
|
|
home: []
|
|
};
|
|
|
|
llapp = angular.module('llngNotificationsExplorer', ['ui.tree', 'ui.bootstrap', 'llApp']);
|
|
|
|
llapp.controller('NotificationsExplorerCtrl', [
|
|
'$scope', '$translator', '$location', '$q', '$http', '$uibModal', function($scope, $translator, $location, $q, $http, $uibModal) {
|
|
var autoId, c, dateToString;
|
|
$scope.links = links;
|
|
$scope.menulinks = menulinks;
|
|
$scope.staticPrefix = staticPrefix;
|
|
$scope.scriptname = scriptname;
|
|
$scope.formPrefix = formPrefix;
|
|
$scope.availableLanguages = availableLanguages;
|
|
$scope.waiting = true;
|
|
$scope.showM = false;
|
|
$scope.showT = true;
|
|
$scope.showForm = false;
|
|
$scope.data = [];
|
|
$scope.form = {};
|
|
$scope.formPost = {};
|
|
$scope.currentScope = null;
|
|
$scope.currentNotification = null;
|
|
$scope.menu = menu;
|
|
$scope.translateP = $translator.translateP;
|
|
$scope.translate = $translator.translate;
|
|
$scope.translateTitle = function(node) {
|
|
return $translator.translateField(node, 'title');
|
|
};
|
|
$scope.menuClick = function(button) {
|
|
if (button.popup) {
|
|
window.open(button.popup);
|
|
} else {
|
|
button.action || (button.action = button.title);
|
|
switch (typeof button.action) {
|
|
case 'function':
|
|
button.action($scope.currentNode, $scope);
|
|
break;
|
|
case 'string':
|
|
$scope[button.action]();
|
|
break;
|
|
default:
|
|
console.log(typeof button.action);
|
|
}
|
|
}
|
|
return $scope.showM = false;
|
|
};
|
|
$scope.markAsDone = function() {
|
|
$scope.waiting = true;
|
|
return $http.put(scriptname + "notifications/" + $scope.type + "/" + $scope.currentNotification.uid + "_" + $scope.currentNotification.reference, {
|
|
done: 1
|
|
}).then(function(response) {
|
|
$scope.currentNotification = null;
|
|
$scope.currentScope.remove();
|
|
$scope.message = {
|
|
title: 'notificationDeleted'
|
|
};
|
|
$scope.showModal("alert.html");
|
|
return $scope.waiting = false;
|
|
}, function(response) {
|
|
$scope.message = {
|
|
title: 'notificationNotDeleted',
|
|
message: response.statusText
|
|
};
|
|
$scope.showModal("alert.html");
|
|
return $scope.waiting = false;
|
|
});
|
|
};
|
|
$scope.deleteNotification = function() {
|
|
$scope.waiting = true;
|
|
return $http['delete'](scriptname + "notifications/" + $scope.type + "/" + $scope.currentNotification.uid + "_" + $scope.currentNotification.reference + "_" + $scope.currentNotification.done).then(function(response) {
|
|
$scope.currentNotification = null;
|
|
$scope.currentScope.remove();
|
|
$scope.message = {
|
|
title: 'notificationPurged'
|
|
};
|
|
$scope.showModal("alert.html");
|
|
return $scope.waiting = false;
|
|
}, function(response) {
|
|
$scope.message = {
|
|
title: 'notificationNotPurged',
|
|
message: response.statusText
|
|
};
|
|
$scope.showModal("alert.html");
|
|
return $scope.waiting = false;
|
|
});
|
|
};
|
|
$scope.stoggle = function(scope) {
|
|
var node;
|
|
node = scope.$modelValue;
|
|
if (node.nodes.length === 0) {
|
|
$scope.updateTree(node.value, node.nodes, node.level, node.query);
|
|
return scope.toggle();
|
|
}
|
|
};
|
|
$scope.notifDate = function(s) {
|
|
var d;
|
|
if (s != null) {
|
|
if (s.match(/(\d{4})-(\d{2})-(\d{2})/)) {
|
|
s = s.substr(0, 4) + s.substr(5, 2) + s.substr(8, 2);
|
|
}
|
|
d = new Date(s.substr(0, 4), s.substr(4, 2) - 1, s.substr(6, 2));
|
|
return d.toLocaleDateString();
|
|
}
|
|
return '';
|
|
};
|
|
$scope.getLanguage = function(lang) {
|
|
$scope.lang = lang;
|
|
$scope.form = 'white';
|
|
$scope.init();
|
|
return $scope.showM = false;
|
|
};
|
|
$scope.$on('$locationChangeSuccess', function(event, next, current) {
|
|
var n;
|
|
n = next.match(/#\/(\w+)/);
|
|
$scope.type = n != null ? n[1] : 'actives';
|
|
if ($scope.type === 'new') {
|
|
return $scope.displayCreateForm();
|
|
} else {
|
|
$scope.showForm = false;
|
|
return $scope.init();
|
|
}
|
|
});
|
|
autoId = 0;
|
|
$scope.updateTree = function(value, node, level, currentQuery) {
|
|
var query;
|
|
$scope.waiting = true;
|
|
query = scheme[level](value, currentQuery);
|
|
return $http.get(scriptname + "notifications/" + $scope.type + "?" + query).then(function(response) {
|
|
var data, i, len, n, ref;
|
|
data = response.data;
|
|
if (data.result) {
|
|
ref = data.values;
|
|
for (i = 0, len = ref.length; i < len; i++) {
|
|
n = ref[i];
|
|
autoId++;
|
|
n.id = "node" + autoId;
|
|
if (level < scheme.length - 1) {
|
|
n.nodes = [];
|
|
n.level = level + 1;
|
|
n.query = query;
|
|
}
|
|
node.push(n);
|
|
}
|
|
}
|
|
return $scope.waiting = false;
|
|
}, function(resp) {
|
|
return $scope.waiting = false;
|
|
});
|
|
};
|
|
$scope.displayNotification = function(scope) {
|
|
var node, notificationId;
|
|
$scope.waiting = true;
|
|
$scope.currentScope = scope;
|
|
node = scope.$modelValue;
|
|
notificationId = node.notification;
|
|
if ($scope.type === 'actives') {
|
|
notificationId = node.uid + "_" + node.reference;
|
|
}
|
|
$http.get(scriptname + "notifications/" + $scope.type + "/" + notificationId).then(function(response) {
|
|
$scope.currentNotification = {
|
|
uid: node.uid,
|
|
reference: node.reference,
|
|
condition: node.condition
|
|
};
|
|
if ($scope.type === 'actives') {
|
|
$scope.currentNotification.notifications = response.data.notifications;
|
|
} else {
|
|
$scope.currentNotification.done = response.data.done;
|
|
}
|
|
return $scope.waiting = false;
|
|
}, function(resp) {
|
|
return $scope.waiting = false;
|
|
});
|
|
return $scope.showT = false;
|
|
};
|
|
$scope.showModal = function(tpl, init) {
|
|
var d, modalInstance;
|
|
modalInstance = $uibModal.open({
|
|
templateUrl: tpl,
|
|
controller: 'ModalInstanceCtrl',
|
|
size: 'lg',
|
|
resolve: {
|
|
elem: function() {
|
|
return function(s) {
|
|
return $scope[s];
|
|
};
|
|
},
|
|
set: function() {
|
|
return function(f, s) {
|
|
return $scope[f] = s;
|
|
};
|
|
},
|
|
init: function() {
|
|
return init;
|
|
}
|
|
}
|
|
});
|
|
d = $q.defer();
|
|
return modalInstance.result.then(function(msgok) {
|
|
$scope.message = {
|
|
title: '',
|
|
message: ''
|
|
};
|
|
return d.resolve(msgok);
|
|
}, function(msgnok) {
|
|
$scope.message = {
|
|
title: '',
|
|
message: ''
|
|
};
|
|
return d.reject(msgnok);
|
|
});
|
|
};
|
|
$scope.save = function() {
|
|
if ($scope.form.uid && $scope.form.reference && $scope.form.xml && $scope.form.date) {
|
|
$scope.waiting = true;
|
|
$scope.formPost.uid = $scope.form.uid;
|
|
$scope.formPost.date = dateToString($scope.form.date);
|
|
$scope.formPost.reference = $scope.form.reference;
|
|
$scope.formPost.condition = $scope.form.condition;
|
|
$scope.formPost.xml = $scope.form.xml;
|
|
return $http.post('notifications/actives', $scope.formPost).then(function(response) {
|
|
var data;
|
|
data = response.data;
|
|
$scope.form = {};
|
|
if (data.result === 1) {
|
|
$scope.message = {
|
|
title: 'notificationCreated'
|
|
};
|
|
} else {
|
|
$scope.message = {
|
|
title: 'notificationNotCreated',
|
|
message: data.error
|
|
};
|
|
}
|
|
$scope.showModal("alert.html");
|
|
return $scope.waiting = false;
|
|
}, function(response) {
|
|
$scope.message = {
|
|
title: 'notificationNotCreated',
|
|
message: response.statusText
|
|
};
|
|
$scope.showModal("alert.html");
|
|
return $scope.waiting = false;
|
|
});
|
|
} else {
|
|
$scope.message = {
|
|
title: 'incompleteForm'
|
|
};
|
|
return $scope.showModal("alert.html");
|
|
}
|
|
};
|
|
$scope.init = function() {
|
|
$scope.waiting = true;
|
|
$scope.data = [];
|
|
$q.all([$translator.init($scope.lang), $scope.updateTree('', $scope.data, 0)]).then(function() {
|
|
return $scope.waiting = false;
|
|
}, function(resp) {
|
|
return $scope.waiting = false;
|
|
});
|
|
$scope.activeModule = "notifications";
|
|
return $scope.myStyle = {
|
|
color: '#ffb84d'
|
|
};
|
|
};
|
|
$scope.displayCreateForm = function() {
|
|
$scope.waiting = true;
|
|
return $translator.init($scope.lang).then(function() {
|
|
$scope.currentNotification = null;
|
|
$scope.showForm = true;
|
|
$scope.data = [];
|
|
$scope.waiting = false;
|
|
return $scope.form.date = new Date();
|
|
});
|
|
};
|
|
c = $location.path().match(/^\/(\w+)/);
|
|
$scope.type = c ? c[1] : 'actives';
|
|
$scope.popupopen = function() {
|
|
return $scope.popup.opened = true;
|
|
};
|
|
$scope.popup = {
|
|
opened: false
|
|
};
|
|
return dateToString = function(dt) {
|
|
var day, month, year;
|
|
year = dt.getFullYear();
|
|
month = dt.getMonth() + 1;
|
|
if (month < 10) {
|
|
month = "0" + month;
|
|
}
|
|
day = dt.getDate();
|
|
if (day < 10) {
|
|
day = "0" + day;
|
|
}
|
|
return year + "-" + month + "-" + day;
|
|
};
|
|
}
|
|
]);
|
|
|
|
}).call(this);
|
|
|