Author: echatellier Date: 2014-06-12 16:59:17 +0200 (Thu, 12 Jun 2014) New Revision: 199 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/199 Log: Correction de la gestion des droits. Ajout de prototype utilisataires indexOfByTopiaId, containsByTopiaId Modified: trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js trunk/faxtomail-ui-web/src/main/webapp/js/faxtomail.js Modified: trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp 2014-06-12 13:40:31 UTC (rev 198) +++ trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp 2014-06-12 14:59:17 UTC (rev 199) @@ -88,7 +88,7 @@ </div> <div class="form-group"> - Actions autorisées lorsque la demande n'a pas d'état d'attente et est <strong>invalide</strong> : + Actions autorisées lorsque la demande n'a pas d'état d'attente est <strong>invalide</strong> : <label class="checkbox" ng-repeat="(mailAction,label) in mailActions"> <input type="checkbox" ng-checked="configuration.invalidFormDisabledActions.indexOf(mailAction) == -1" ng-click="changeInvalidAction(mailAction)"> {{label}} @@ -556,7 +556,7 @@ Hériter des états d'attente déclarés sur les dossiers parent : </label> <label class="checkbox" ng-repeat="etatAttente in etatAttentes" ng-if="selectedMailFolder.$parent && !selectedMailFolder.useCurrentLevelEtatAttente"> - <input type="checkbox" ng-checked="parentScopeValues.etatAttentes.indexOf(etatAttente) != -1" + <input type="checkbox" ng-checked="parentScopeValues.etatAttentes.containsByTopiaId(etatAttente)" disabled> {{etatAttente.label}} </label> <label> @@ -565,7 +565,7 @@ Définir des états d'attente pour ce dossier : </label> <label class="checkbox" ng-repeat="etatAttente in etatAttentes" ng-if="selectedMailFolder.useCurrentLevelEtatAttente || !selectedMailFolder.$parent"> - <input type="checkbox" ng-checked="selectedMailFolder.etatAttentes.indexOf(etatAttente) != -1" + <input type="checkbox" ng-checked="selectedMailFolder.etatAttentes.containsByTopiaId(etatAttente)" ng-click="changeFolderEtatAttente(etatAttente)"> {{etatAttente.label}} </label> </div> @@ -661,9 +661,9 @@ <span class="fa fa-users"></span> {{group.fullPath}} </td> <td> - <label><input type="checkbox" ng-checked="parentScopeValues.readRightGroups.indexOf(group) != -1" disabled> Lecture</label> - <label><input type="checkbox" ng-checked="parentScopeValues.writeRightGroups.indexOf(group) != -1" disabled> Écriture</label> - <label><input type="checkbox" ng-checked="parentScopeValues.moveRightGroups.indexOf(group) != -1" disabled> Déplacement</label> + <label><input type="checkbox" ng-checked="parentScopeValues.readRightGroups.containsByTopiaId(group)" disabled> Lecture</label> + <label><input type="checkbox" ng-checked="parentScopeValues.writeRightGroups.containsByTopiaId(group)" disabled> Écriture</label> + <label><input type="checkbox" ng-checked="parentScopeValues.moveRightGroups.containsByTopiaId(group)" disabled> Déplacement</label> </td> </tr> <tr ng-repeat="user in parentScopeValues.rightUsers" class="parentInfos"> @@ -671,9 +671,9 @@ <span class="fa fa-user"></span> {{user.firstName}} {{user.lastName}} </td> <td> - <label><input type="checkbox" ng-checked="parentScopeValues.readRightUsers.indexOf(user) != -1" disabled> Lecture</label> - <label><input type="checkbox" ng-checked="parentScopeValues.writeRightUsers.indexOf(user) != -1" disabled> Écriture</label> - <label><input type="checkbox" ng-checked="parentScopeValues.moveRightUsers.indexOf(user) != -1" disabled> Déplacement</label> + <label><input type="checkbox" ng-checked="parentScopeValues.readRightUsers.containsByTopiaId(user)" disabled> Lecture</label> + <label><input type="checkbox" ng-checked="parentScopeValues.writeRightUsers.containsByTopiaId(user)" disabled> Écriture</label> + <label><input type="checkbox" ng-checked="parentScopeValues.moveRightUsers.containsByTopiaId(user)" disabled> Déplacement</label> </td> </tr> </tbody> @@ -681,50 +681,50 @@ <tr ng-repeat="group in selectedMailFolder.rightGroups"> <td> <span class="fa fa-users"></span> {{group.fullPath}} - <a class="pull-right btn btn-danger btn-xs pull-right" ng-click="removeWriteRightGroup($index)"> + <a class="pull-right btn btn-danger btn-xs pull-right" ng-click="removeRightGroup($index, group)"> <span class="glyphicon glyphicon-remove"></span> </a> </td> <td> <label><input type="checkbox" ng-model="readRightGroup" - ng-checked="selectedMailFolder.readRightGroups.indexOf(group) != -1" - ng-disabled="parentScopeValues.readRightGroups.indexOf(group) != -1" + ng-checked="selectedMailFolder.readRightGroups.containsByTopiaId(group)" + ng-disabled="parentScopeValues.readRightGroups.containsByTopiaId(group)" ng-change="changeReadRightGroup(group)"> Lecture</label> <label><input type="checkbox" ng-model="writeRightGroup" - ng-checked="selectedMailFolder.writeRightGroups.indexOf(group) != -1" - ng-disabled="parentScopeValues.writeRightGroups.indexOf(group) != -1" + ng-checked="selectedMailFolder.writeRightGroups.containsByTopiaId(group)" + ng-disabled="parentScopeValues.writeRightGroups.containsByTopiaId(group)" ng-change="changeWriteRightGroup(group)"> Écriture</label> <label><input type="checkbox" ng-model="moveRightGroup" - ng-checked="selectedMailFolder.moveRightGroups.indexOf(group) != -1" - ng-disabled="parentScopeValues.moveRightGroups.indexOf(group) != -1" + ng-checked="selectedMailFolder.moveRightGroups.containsByTopiaId(group)" + ng-disabled="parentScopeValues.moveRightGroups.containsByTopiaId(group)" ng-change="changeMoveRightGroup(group)"> Déplacement</label> </td> </tr> <tr ng-repeat="user in selectedMailFolder.rightUsers"> <td> <span class="fa fa-user"></span> {{user.firstName}} {{user.lastName}} - <a class="pull-right btn btn-danger btn-xs pull-right" ng-click="removeWriteRightUser($index)"> + <a class="pull-right btn btn-danger btn-xs pull-right" ng-click="removeRightUser($index, user)"> <span class="glyphicon glyphicon-remove"></span> </a> </td> <td> <label><input type="checkbox" ng-model="readRightUser" - ng-checked="selectedMailFolder.readRightUsers.indexOf(user) != -1" - ng-disabled="parentScopeValues.readRightUsers.indexOf(user) != -1" + ng-checked="selectedMailFolder.readRightUsers.containsByTopiaId(user)" + ng-disabled="parentScopeValues.readRightUsers.containsByTopiaId(user)" ng-change="changeReadRightUser(user)"> Lecture</label> <label><input type="checkbox" ng-model="writeRightUser" - ng-checked="selectedMailFolder.writeRightUsers.indexOf(user) != -1" - ng-disabled="parentScopeValues.writeRightUsers.indexOf(user) != -1" + ng-checked="selectedMailFolder.writeRightUsers.containsByTopiaId(user)" + ng-disabled="parentScopeValues.writeRightUsers.containsByTopiaId(user)" ng-change="changeWriteRightUser(user)"> Écriture</label> <label><input type="checkbox" ng-model="moveRightUser" - ng-checked="selectedMailFolder.moveRightUsers.indexOf(user) != -1" - ng-disabled="parentScopeValues.moveRightUsers.indexOf(user) != -1" + ng-checked="selectedMailFolder.moveRightUsers.containsByTopiaId(user)" + ng-disabled="parentScopeValues.moveRightUsers.containsByTopiaId(user)" ng-change="changeMoveRightUser(user)"> Déplacement</label> </td> </tr> Modified: trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js 2014-06-12 13:40:31 UTC (rev 198) +++ trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js 2014-06-12 14:59:17 UTC (rev 199) @@ -103,6 +103,11 @@ ConfigurationModule.controller('ConfigurationMiscController', ['$scope', '$window', 'ConfigurationData', function($scope, $window, ConfigurationData) { + // initialisation de la configuration + if ($scope.configuration.invalidFormDisabledActions) { + $scope.configuration.invalidFormDisabledActions = []; + } + // selection/deselection d'une action $scope.changeInvalidAction = function(action) { var index = $scope.configuration.invalidFormDisabledActions.indexOf(action); @@ -362,19 +367,6 @@ }); }); - // change instance (for indexOf() to work) - if ($scope.selectedMailFolder.etatAttentes) { - var newArray = []; - angular.forEach($scope.selectedMailFolder.etatAttentes, function(folderEtatAttente) { - angular.forEach($scope.etatAttentes, function(etatAttente) { - if (etatAttente.topiaId == folderEtatAttente.topiaId) { - newArray.push(etatAttente); - } - }); - }); - $scope.selectedMailFolder.etatAttentes = newArray; - } - // right $scope.selectedMailFolder.rightUsers = []; $scope.selectedMailFolder.rightGroups = []; @@ -666,7 +658,7 @@ // selection/deselection d'un état d'attente possible pour ce dossier $scope.changeFolderEtatAttente = function(etatAttente) { - var index = $scope.selectedMailFolder.etatAttentes.indexOf(etatAttente); + var index = $scope.selectedMailFolder.etatAttentes.indexOfByTopiaId(etatAttente); if (index != -1) { $scope.selectedMailFolder.etatAttentes.splice(index, 1); } else { @@ -674,7 +666,7 @@ } }; - // initialise la liste des actions possibles avec celle des niveaux supérieurs + // initialise la liste des colonnes sélectionnées avec celle des niveaux supérieurs $scope.initFolderColumns = function() { if ($scope.selectedMailFolder.useCurrentLevelTableColumns) { if ($scope.parentScopeValues.folderTableColumns) { @@ -697,13 +689,27 @@ // add user write right $scope.addRightUser = function() { $scope.selectedMailFolder.rightUsers.push($scope.newRightUser); - delete $scope.newWriteRightUser; + delete $scope.newRightUser; }; // remove user write right - $scope.removeRightUser = function(index) { + $scope.removeRightUser = function(index, user) { if ($window.confirm("Êtes-vous sur de vouloir supprimer les droits de cet utilisateur ?")) { $scope.selectedMailFolder.rightUsers.splice(index, 1); + + // suppression des droits réels + var index = $scope.selectedMailFolder.readRightUsers.indexOfByTopiaId(user); + if (index != -1) { + $scope.selectedMailFolder.readRightUsers.splice(index, 1); + } + var index = $scope.selectedMailFolder.writeRightUsers.indexOfByTopiaId(user); + if (index != -1) { + $scope.selectedMailFolder.writeRightUsers.splice(index, 1); + } + var index = $scope.selectedMailFolder.moveRightUsers.indexOfByTopiaId(user); + if (index != -1) { + $scope.selectedMailFolder.moveRightUsers.splice(index, 1); + } } }; @@ -714,55 +720,74 @@ }; // remove group write right - $scope.removeWriteRightGroup = function(index) { + $scope.removeRightGroup = function(index, group) { if ($window.confirm("Êtes-vous sur de vouloir supprimer les droits de ce groupe ?")) { $scope.selectedMailFolder.rightGroups.splice(index, 1); + + // suppression des droits réels + var index = $scope.selectedMailFolder.readRightGroups.indexOfByTopiaId(group); + if (index != -1) { + $scope.selectedMailFolder.readRightGroups.splice(index, 1); + } + index = $scope.selectedMailFolder.writeRightGroups.indexOfByTopiaId(group); + if (index != -1) { + $scope.selectedMailFolder.writeRightGroups.splice(index, 1); + } + index = $scope.selectedMailFolder.moveRightGroups.indexOfByTopiaId(group); + if (index != -1) { + $scope.selectedMailFolder.moveRightGroups.splice(index, 1); + } } }; - // + // change le droit de lecture du groupe $scope.changeReadRightGroup = function(group) { - var index = $scope.selectedMailFolder.readRightGroups.indexOf(group); + var index = $scope.selectedMailFolder.readRightGroups.indexOfByTopiaId(group); if (index != -1) { $scope.selectedMailFolder.readRightGroups.splice(index, 1); } else { $scope.selectedMailFolder.readRightGroups.push(group); } }; + // change le droit d'écriture du groupe $scope.changeWriteRightGroup = function(group) { - var index = $scope.selectedMailFolder.writeRightGroups.indexOf(group); + var index = $scope.selectedMailFolder.writeRightGroups.indexOfByTopiaId(group); if (index != -1) { $scope.selectedMailFolder.writeRightGroups.splice(index, 1); } else { $scope.selectedMailFolder.writeRightGroups.push(group); } }; + // change le droit de déplacement du groupe $scope.changeMoveRightGroup = function(group) { - var index = $scope.selectedMailFolder.moveRightGroups.indexOf(group); + var index = $scope.selectedMailFolder.moveRightGroups.indexOfByTopiaId(group); if (index != -1) { $scope.selectedMailFolder.moveRightGroups.splice(index, 1); } else { $scope.selectedMailFolder.moveRightGroups.push(group); } }; + // change le droit de lecture d'un utilisateur $scope.changeReadRightUser = function(user) { - var index = $scope.selectedMailFolder.readRightUsers.indexOf(user); + var index = $scope.selectedMailFolder.readRightUsers.indexOfByTopiaId(user); if (index != -1) { $scope.selectedMailFolder.readRightUsers.splice(index, 1); } else { $scope.selectedMailFolder.readRightUsers.push(user); } }; + // change le droit d'écriture d'un utilisateur $scope.changeWriteRightUser = function(user) { - var index = $scope.selectedMailFolder.writeRightUsers.indexOf(user); + var index = $scope.selectedMailFolder.writeRightUsers.indexOfByTopiaId(user); if (index != -1) { $scope.selectedMailFolder.writeRightUsers.splice(index, 1); } else { $scope.selectedMailFolder.writeRightUsers.push(user); } }; + // change le droit de déplacement d'un utilisateur $scope.changeMoveRightUser = function(user) { - var index = $scope.selectedMailFolder.moveRightUsers.indexOf(user); + var index = $scope.selectedMailFolder.moveRightUsers.indexOfByTopiaId(user); if (index != -1) { $scope.selectedMailFolder.moveRightUsers.splice(index, 1); } else { @@ -784,7 +809,7 @@ //{Object} New accout empty filter $scope.newFilter = {}; - // replace filter instance with mailFolder filter instance to use same objects + // replace filter instance with mailFolder filter instance to use same objects (filled with fullPathInfo) var updateMetaFilter = function() { angular.forEach($scope.mailFilters, function(filter) { // root folder @@ -807,6 +832,7 @@ console.log("Udpate MetaFilter"); $scope.rootFolderMailFilters = {}; updateMetaFilter(); + console.log($scope.rootFolderMailFilters); }); // option de la configuration 'sortable' @@ -823,6 +849,9 @@ // add new filter action $scope.addNewFilter = function(rootMailFolder) { $scope.mailFilters.push($scope.newFilter); + if (!$scope.rootFolderMailFilters.hasOwnProperty(rootMailFolder.topiaId)) { + $scope.rootFolderMailFilters[rootMailFolder.topiaId] = []; + } $scope.rootFolderMailFilters[rootMailFolder.topiaId].push($scope.newFilter); // clear form $scope.newFilter = {}; Modified: trunk/faxtomail-ui-web/src/main/webapp/js/faxtomail.js =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/js/faxtomail.js 2014-06-12 13:40:31 UTC (rev 198) +++ trunk/faxtomail-ui-web/src/main/webapp/js/faxtomail.js 2014-06-12 14:59:17 UTC (rev 199) @@ -37,5 +37,30 @@ return _p8() + _p8(true) + _p8(true) + _p8(); } +console.log("abc" === "abc");// true +console.log("abc" === new String("abc")); // false +console.log(new String("abc") === new String("abc")); // false + +/** + * Même fonction que indexOf mais qui compare par topiaId au lieu des références. + */ +Array.prototype.indexOfByTopiaId = function(obj) { + var i = this.length; + while (i--) { + if (this[i].topiaId == obj.topiaId) { + return i; + } + } + return -1; +}; + +/** + * Method contains par topiaId. + */ +Array.prototype.containsByTopiaId = function(obj) { + return this.indexOfByTopiaId(obj) != -1; +}; + + /** Mail faxtomail application module. */ var FaxToMailModule = angular.module('FaxToMail', ['ui.bootstrap']);