This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository faxtomail. See https://gitlab.nuiton.org/codelutin/faxtomail.git commit 5884cf962469fb2664986b131f65d96ddee34326 Author: Kevin Morin <morin@codelutin.com> Date: Mon Apr 18 09:35:34 2016 +0200 config des signatures dans l'admin (refs #8258) --- .../web/action/admin/ConfigurationAction.java | 16 +++- .../faxtomail/web/job/MailFilterJob.java | 3 +- .../WEB-INF/content/admin/configuration-input.jsp | 64 ++++++++++++- .../src/main/webapp/js/configuration.js | 103 +++++++++++++++++++++ 4 files changed, 182 insertions(+), 4 deletions(-) diff --git a/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ConfigurationAction.java b/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ConfigurationAction.java index d1f96b5..8e203b7 100644 --- a/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ConfigurationAction.java +++ b/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ConfigurationAction.java @@ -36,6 +36,7 @@ import com.franciaflex.faxtomail.persistence.entities.MailField; import com.franciaflex.faxtomail.persistence.entities.MailFilter; import com.franciaflex.faxtomail.persistence.entities.MailFolder; import com.franciaflex.faxtomail.persistence.entities.Range; +import com.franciaflex.faxtomail.persistence.entities.SigningForDomain; import com.franciaflex.faxtomail.persistence.entities.Stamp; import com.franciaflex.faxtomail.persistence.entities.WaitingState; import com.franciaflex.faxtomail.services.service.ConfigurationService; @@ -107,6 +108,8 @@ public class ConfigurationAction extends FaxToMailActionSupport implements Prepa protected List<BrandsForDomain> brandsForDomains; + protected List<SigningForDomain> signingForDomains; + @Override public void prepare() throws Exception { // check authorization @@ -131,6 +134,7 @@ public class ConfigurationAction extends FaxToMailActionSupport implements Prepa users = userService.getAllActiveUsers(); groups = userService.getAllActiveUserGroups(); brandsForDomains = configurationService.getAllBrandsForDomains(); + signingForDomains = configurationService.getAllSigningsForDomains(); return INPUT; } @@ -147,7 +151,8 @@ public class ConfigurationAction extends FaxToMailActionSupport implements Prepa mailFolders, mailFilters, emailAccounts, - brandsForDomains); + brandsForDomains, + signingForDomains); return result; } @@ -251,6 +256,15 @@ public class ConfigurationAction extends FaxToMailActionSupport implements Prepa this.brandsForDomains = getGson().fromJson(json, type); } + public List<SigningForDomain> getSigningForDomains() { + return signingForDomains; + } + + public void setSigningForDomainsJson(String json) { + Type type = new TypeToken<List<SigningForDomain>>() {}.getType(); + this.signingForDomains = getGson().fromJson(json, type); + } + public List<FaxToMailUser> getUsers() { return users; } diff --git a/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java b/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java index 5ebd6b6..0c5ba9d 100644 --- a/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java +++ b/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/job/MailFilterJob.java @@ -328,8 +328,7 @@ public class MailFilterJob extends AbstractFaxToMailJob { } String company = filterFolder.getCompany(); - String domain = email.getRecipient().substring(email.getRecipient().lastIndexOf("@") + 1); - List<String> brands = configurationService.getBrandsForDomain(domain); + List<String> brands = configurationService.getBrandsForEmailAddress(email.getRecipient()); Address[] addresses = message.getFrom(); if (addresses != null && addresses.length > 0) { diff --git a/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp b/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp index 7b31e82..f54f55e 100644 --- a/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp +++ b/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp @@ -52,6 +52,7 @@ 'mailFilters': <s:property value="toJson(mailFilters)" escapeHtml="false"/>, 'emailAccounts': <s:property value="toJson(emailAccounts)" escapeHtml="false"/>, 'brandsForDomains': <s:property value="toJson(brandsForDomains)" escapeHtml="false"/>, + 'signings': <s:property value="toJson(signingForDomains)" escapeHtml="false"/>, // referentiels 'users': <s:property value="toJson(users)" escapeHtml="false"/>, 'groups': <s:property value="toJson(groups)" escapeHtml="false"/>, @@ -82,6 +83,7 @@ <li><a href="#tabs-search" data-toggle="tab">Recherche</a></li> <li><a href="#tabs-mailaccounts" data-toggle="tab">Comptes mail</a></li> <li><a href="#tabs-brandsForDomain" data-toggle="tab">Noms de domaine / Marques</a></li> + <li><a href="#tabs-signings" data-toggle="tab">Signatures</a></li> <li><a href="#tabs-chefgroup" data-toggle="tab">Chef de groupe</a></li> </ul> @@ -238,7 +240,7 @@ <div class="row"> <div class="col-md-4"> - <h3>Tampon <input type="button" class="btn btn-success btn-xs pull-right" value="Nouveau" ng-click="newStamp()" /></h3> + <h3>Tampons <input type="button" class="btn btn-success btn-xs pull-right" value="Nouveau" ng-click="newStamp()" /></h3> <table class="table table-hover"> <tbody> <tr ng-repeat="stamp in stamps" @@ -1365,6 +1367,66 @@ </div> </div> + <div id="tabs-signings" class="tab-pane" ng-controller="ConfigurationSigningsController"> + <input type="hidden" name="signingForDomainsJson" value="{{signings}}" /> + + <div class="row"> + <div class="col-md-4"> + <h3>Signatures <input type="button" class="btn btn-success btn-xs pull-right" value="Nouveau" ng-click="newSigning()" /></h3> + <table class="table table-hover"> + <tbody> + <tr ng-repeat="signing in signings" + ng-class="{'info' : signing == selectedSigning}" + ng-click="editSigning(signing)"> + <td> + {{signing.domainName}} + <a class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="deleteSigning(signing, $index)" + tooltip="Supprimer cette signature"> + <span class="glyphicon glyphicon-remove"></span></a> + </td> + </tr> + </tbody> + </table> + </div> + + <div class="col-md-8" ng-show="selectedSigning"> + + <h3>Édition de la signature du domaine {{selectedSigning.domainName}}</h3> + + <div class="form-group"> + <label><input type="radio" ng-model="selectedSigning.isImageType" ng-value="true"/> + Image :</label> + + <div ng-show="selectedSigning.isImageType"> + + <input type="file" accept="image/*" id="signingImage" + class="form-control" + onchange="angular.element(this).scope().imageChanged(this)"/> + + <output> + <img id="signingPreview"/> + </output> + + </div> + + </div> + + <div class="form-group"> + <label><input type="radio" ng-model="selectedSigning.isImageType" ng-value="false" /> Texte :</label> + <textarea name="text" class="form-control" + ng-model="selectedSigning.text" ng-show="!selectedSigning.isImageType"> + </textarea> + </div> + + </div> + + <div class="col-md-8" ng-show="!selectedSigning"> + <em>Sélectionnez une signature.</em> + </div> + </div> + + </div> + <div id="tabs-chefgroup" class="tab-pane" ng-controller="ConfigurationChefGroupController"> <div class="row"> diff --git a/faxtomail-ui-web/src/main/webapp/js/configuration.js b/faxtomail-ui-web/src/main/webapp/js/configuration.js index 98f84a1..c21df34 100644 --- a/faxtomail-ui-web/src/main/webapp/js/configuration.js +++ b/faxtomail-ui-web/src/main/webapp/js/configuration.js @@ -45,6 +45,8 @@ ConfigurationModule.controller('ConfigurationController', ['$scope', 'Configurat $scope.demandTypes = ConfigurationData.demandTypes; //{Array} les tampons $scope.stamps = ConfigurationData.stamps; + //{Array} les signatures + $scope.signings = ConfigurationData.signings; //{Array} mail folders $scope.mailFolders = ConfigurationData.mailFolders; // {Map} Mail folder usage @@ -1365,6 +1367,9 @@ ConfigurationModule.controller('ConfigurationBrandsForDomainController', ['$scop if ($scope.brandsForDomains.indexOfBy('domainName', $scope.newBrandsForDomain) != -1) { $window.alert("Ce nom de domaine est déjà configuré !"); + } else if ($scope.newBrandsForDomain.domainName.indexOf("@") != -1) { + $window.alert("Le nom de domaine ne doit pas contenir le symbole @ !"); + } else { var newBrandsForDomain = $scope.newBrandsForDomain; newBrandsForDomain.brandsJson = newBrandsForDomain.brands.toString(); @@ -1384,6 +1389,104 @@ ConfigurationModule.controller('ConfigurationBrandsForDomainController', ['$scop }]); /** + * Signings tab controller. + */ +ConfigurationModule.controller('ConfigurationSigningsController', ['$scope', '$window', 'ConfigurationData', + function($scope, $window, ConfigurationData) { + //{Object} signature selectionné + $scope.selectedSigning; + + for (var i = 0 ; i < $scope.signings.length ; i++) { + var signing = $scope.signings[i]; + signing.isImageType = signing.image != null; + signing.oldImage = signing.image; + signing.oldText = signing.text; + } + + $scope.$watch("selectedSigning.isImageType", function(newValue) { + if (newValue) { + $scope.selectedSigning.text = null; + $scope.selectedSigning.image = $scope.selectedSigning.oldImage; + + } else { + $scope.selectedSigning.image = null; + $scope.selectedSigning.text = $scope.selectedSigning.oldText; + } + }); + + // edition d'une signature + $scope.editSigning = function(signing) { + + $scope.selectedSigning = signing; + + $('#signingImage').val(null); + $('#signingPreview').attr('src', signing.image ? signing.image : null); + + }; + + // ajout d'une nouvelle signature + $scope.newSigning = function() { + var domainName = $window.prompt("Nom de domaine pour la nouvelle signature"); + // check if correct domain + if (domainName) { + // auto select new etat + var newSigning = { + topiaId : "new_" + guid(), + domainName: domainName + }; + + // check if already exists + if ($scope.signings.indexOfBy('domainName', newSigning) != -1) { + $window.alert("Ce nom de domaine est déjà configuré !"); + + } else if (domainName.indexOf("@") != -1) { + $window.alert("Le nom de domaine ne doit pas contenir le symbole @ !"); + + } else { + $scope.signings.push(newSigning); + + // auto select + $scope.editSigning(newSigning); + } + } + }; + + // suppression d'un tampon + $scope.deleteSigning = function(signing, index) { + if ($window.confirm("Êtes-vous sûr de vouloir supprimer cette signature ?")) { + $scope.signings.splice(index, 1); + $scope.selectedSigning = null; + } + }; + + $scope.imageChanged = function(input) { + var f = input.files[0]; // FileList object + + // Only process image files. + if (!f.type.match('image.*')) { + $window.alert("Erreur lors du chargement de l'image"); + $('#signingPreview').attr('src', null); + } + + var reader = new FileReader(); + + // Closure to capture the file information. + reader.onloadend = function() { + + $scope.$apply(function() { + $scope.selectedSigning.image = reader.result; + $scope.selectedSigning.oldImage = reader.result; + }); + $('#signingPreview').attr('src', reader.result); + }; + + // Read in the image file as a data URL. + reader.readAsDataURL(f); + } + +}]); + +/** * Chef de groupe controller. */ ConfigurationModule.controller('ConfigurationChefGroupController', ['$scope', '$window', 'ConfigurationData', -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.