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.
274 lines
7.0 KiB
274 lines
7.0 KiB
###
|
|
# LemonLDAP::NG Notifications Explorer client
|
|
###
|
|
|
|
scheme = [
|
|
(v) ->
|
|
"groupBy=substr(uid,1)"
|
|
(v) ->
|
|
"uid=#{v}*&groupBy=uid"
|
|
(v) ->
|
|
"uid=#{v}"
|
|
]
|
|
|
|
# Session menu
|
|
menu =
|
|
actives: [
|
|
title: 'markAsDone'
|
|
icon: 'eye-close'
|
|
]
|
|
done: [
|
|
title: 'deleteNotification'
|
|
icon: 'trash'
|
|
]
|
|
new: [
|
|
title: 'save'
|
|
icon: 'save'
|
|
]
|
|
home: []
|
|
|
|
# AngularJS application
|
|
llapp = angular.module 'llngNotificationsExplorer', [ 'ui.tree', 'ui.bootstrap', 'llApp' ]
|
|
|
|
# Main controller
|
|
llapp.controller 'NotificationsExplorerCtrl', [ '$scope', '$translator', '$location', '$q', '$http', '$uibModal', ($scope, $translator, $location, $q, $http, $uibModal) ->
|
|
$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
|
|
|
|
# Import translation functions
|
|
$scope.translateP = $translator.translateP
|
|
$scope.translate = $translator.translate
|
|
$scope.translateTitle = (node) ->
|
|
$translator.translateField node, 'title'
|
|
|
|
# Handler menu items
|
|
$scope.menuClick = (button) ->
|
|
if button.popup
|
|
window.open button.popup
|
|
else
|
|
button.action or= button.title
|
|
switch typeof button.action
|
|
when 'function'
|
|
button.action $scope.currentNode, $scope
|
|
when 'string'
|
|
$scope[button.action]()
|
|
else
|
|
console.log typeof button.action
|
|
$scope.showM = false
|
|
|
|
# Notification management
|
|
$scope.markAsDone = ->
|
|
$scope.waiting = true
|
|
$http.put("#{scriptname}notifications/#{$scope.type}/#{$scope.currentNotification.uid}_#{$scope.currentNotification.reference}", {done:1}).then (response) ->
|
|
$scope.currentNotification = null
|
|
$scope.currentScope.remove()
|
|
$scope.message =
|
|
title: 'notificationDeleted'
|
|
$scope.showModal "alert.html"
|
|
$scope.waiting = false
|
|
, (response) ->
|
|
$scope.message =
|
|
title: 'notificationNotDeleted'
|
|
message: response.statusText
|
|
$scope.showModal "alert.html"
|
|
$scope.waiting = false
|
|
|
|
$scope.deleteNotification = ->
|
|
$scope.waiting = true
|
|
$http['delete']("#{scriptname}notifications/#{$scope.type}/#{$scope.currentNotification.uid}_#{$scope.currentNotification.reference}_#{$scope.currentNotification.done}").then (response) ->
|
|
$scope.currentNotification = null
|
|
$scope.currentScope.remove()
|
|
$scope.message =
|
|
title: 'notificationPurged'
|
|
$scope.showModal "alert.html"
|
|
$scope.waiting = false
|
|
, (response) ->
|
|
$scope.message =
|
|
title: 'notificationNotPurged'
|
|
message: response.statusText
|
|
$scope.showModal "alert.html"
|
|
$scope.waiting = false
|
|
|
|
$scope.stoggle = (scope) ->
|
|
node = scope.$modelValue
|
|
if node.nodes.length == 0
|
|
$scope.updateTree node.value, node.nodes, node.level, node.query
|
|
scope.toggle()
|
|
|
|
$scope.notifDate = (s) ->
|
|
if s?
|
|
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 = (lang) ->
|
|
$scope.lang = lang
|
|
$scope.form = 'white'
|
|
$scope.init()
|
|
$scope.showM = false
|
|
|
|
$scope.$on '$locationChangeSuccess', (event, next, current) ->
|
|
n = next.match /#\/(\w+)/
|
|
$scope.type = if n? then n[1] else 'actives'
|
|
if $scope.type == 'new'
|
|
$scope.displayCreateForm()
|
|
else
|
|
$scope.showForm = false
|
|
$scope.init()
|
|
|
|
autoId = 0
|
|
$scope.updateTree = (value, node, level, currentQuery) ->
|
|
$scope.waiting = true
|
|
query = scheme[level] value, currentQuery
|
|
$http.get("#{scriptname}notifications/#{$scope.type}?#{query}").then (response) ->
|
|
data = response.data
|
|
if data.result
|
|
for n in data.values
|
|
autoId++
|
|
n.id = "node#{autoId}"
|
|
if level <scheme.length - 1
|
|
n.nodes = []
|
|
n.level = level + 1
|
|
n.query = query
|
|
node.push n
|
|
$scope.waiting = false
|
|
, (resp) ->
|
|
$scope.waiting = false
|
|
|
|
$scope.displayNotification = (scope) ->
|
|
$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 (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
|
|
$scope.waiting = false
|
|
, (resp) ->
|
|
$scope.waiting = false
|
|
$scope.showT = false
|
|
|
|
# Modal launcher
|
|
$scope.showModal = (tpl, init) ->
|
|
modalInstance = $uibModal.open
|
|
templateUrl: tpl
|
|
controller: 'ModalInstanceCtrl'
|
|
size: 'lg'
|
|
resolve:
|
|
elem: ->
|
|
(s) ->
|
|
$scope[s]
|
|
set: ->
|
|
(f,s) ->
|
|
$scope[f] = s
|
|
init: ->
|
|
init
|
|
d = $q.defer()
|
|
modalInstance.result.then (msgok) ->
|
|
$scope.message =
|
|
title: ''
|
|
message: ''
|
|
d.resolve msgok
|
|
, (msgnok) ->
|
|
$scope.message =
|
|
title: ''
|
|
message: ''
|
|
d.reject msgnok
|
|
|
|
$scope.save = ->
|
|
if $scope.form.uid and $scope.form.reference and $scope.form.xml and $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
|
|
$http.post('notifications/actives', $scope.formPost).then (response) ->
|
|
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"
|
|
$scope.waiting = false
|
|
, (response) ->
|
|
$scope.message =
|
|
title: 'notificationNotCreated'
|
|
message: response.statusText
|
|
$scope.showModal "alert.html"
|
|
$scope.waiting = false
|
|
else
|
|
$scope.message =
|
|
title: 'incompleteForm'
|
|
$scope.showModal "alert.html"
|
|
|
|
$scope.init = ->
|
|
$scope.waiting = true
|
|
$scope.data = []
|
|
$q.all [
|
|
$translator.init $scope.lang
|
|
$scope.updateTree '', $scope.data, 0
|
|
]
|
|
.then ->
|
|
$scope.waiting = false
|
|
, (resp) ->
|
|
$scope.waiting = false
|
|
|
|
$scope.displayCreateForm = ->
|
|
$scope.waiting = true
|
|
$translator.init($scope.lang).then ->
|
|
$scope.currentNotification = null
|
|
$scope.showForm = true
|
|
$scope.data = []
|
|
$scope.waiting = false
|
|
$scope.form.date = new Date()
|
|
|
|
c = $location.path().match /^\/(\w+)/
|
|
$scope.type = if c then c[1] else 'actives'
|
|
|
|
# Datepicker
|
|
$scope.popupopen = ->
|
|
$scope.popup.opened = true
|
|
|
|
$scope.popup =
|
|
opened: false
|
|
|
|
# Date conversion
|
|
dateToString = (dt) ->
|
|
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}"
|
|
]
|
|
|