--- /dev/null
+/*
+Copyright (c) Igor Barma, Alexandre Desoubeaux, Christian Martel, Eric Brun, Mathieu Amblard, Gwenael Gevet, Pierre Guillot, 2012
+ * Copyright Alexandre Desoubeaux, Christian Martel, Cedric Lecarpentier, Alexandre Lefevre, Marc Salvat 2014-2016
+ * Copyright Alexandre Desoubeaux, Christian Martel, Cedric Lecarpentier, Marc Salvat, Marc Suarez, Harifetra Ramamonjy 2017
+For licensing, see README.txt or http://www.pentilanero.com (Cecill-C or AGPL or LGPL)
+*/
+Ext.ns("EntSavoie.Cartable");
+EntSavoie.Cartable.TreeGroupEntity = function (config) {
+ Ext.apply(this, config);
+
+ // Ajoute le texte des erreurs
+ Ext.QuickTips.init();
+ // turn on validation errors beside the field globally
+ Ext.form.Field.prototype.msgTarget = 'side';
+
+ this.wait = this.wait || null;
+
+ // Définition des composants graphiques
+ this.treeLoader = this.treeLoader || new Ext.tree.TreeLoader({
+ dataUrl: this.renderURLAjax+'&jspPage=%2Fajax%2FlistGroupEntitiesForTree.jsp'
+ });
+
+ this.treeGroupEntityPanel = this.treeGroupEntityPanel || new Ext.tree.TreePanel({
+ treeId: "treeGroupEntityPanel",
+ border: false,
+ useArrows: true,
+ autoScroll: true,
+ animate: true,
+ containerScroll: true,
+ enableDrop: true,
+ enableDrag: true,
+ ddGroup: 'changeFolderDD',
+ ddAppendOnly: true,
+ loader: this.treeLoader,
+ rootVisible: false,
+ root: {
+ nodeType: 'async',
+ text: this.i18n.Cartable.TreeGroupEntity.treeGroupEntityPanel.root.text, // Texte du noeud
+ draggable: false, // Désactiver le Drag and drop sur ce noeud
+ id: "groupEntities", // Id du rootNodePah
+ leaf: false,
+ iconCls: 'folder',
+ expanded: true
+ }
+ });
+
+ this.treeSorter = this.treeSorter || new Ext.tree.TreeSorter(this.treeGroupEntityPanel, {
+ folderSort : false,
+ dir : "asc",
+ caseSensitive: true,
+ sortType: function(node) {
+ return node.text;
+ }
+ });
+
+ EntSavoie.Cartable.TreeGroupEntity.superclass.constructor.call(this, {
+ border: false,
+ layout: "fit",
+ style: 'border-left: solid 1px #99BBE8',
+ items: [this.treeGroupEntityPanel]
+ });
+
+ // Définition des listeners
+ this.treeGroupEntityPanel.on("beforenodedrop", this.onBeforeNodeDrop, this);
+ this.treeGroupEntityPanel.on("nodedragover", this.onNodeDragoverGrpTreePanel, this);
+
+};
+
+Ext.extend(EntSavoie.Cartable.TreeGroupEntity, Ext.Panel, {
+ initComponent: function () {
+ EntSavoie.Cartable.TreeGroupEntity.superclass.initComponent.call(this);
+ },
+
+
+ /**
+ * Methode permettant d'envoyer dans le cartable les elements selectionnes dans le casier
+ */
+ sendEltsToGrpCart: function(eltRecords, targetFolderId) {
+ if (eltRecords) {
+ var storeEntity = this.mainContainer.viewContainer.entityStore;
+ // Id du dossier cible
+
+ var fileIdArray = new Array();
+ var folderIdArray = new Array();
+
+ var targetNode = this.treeGroupEntityPanel.getNodeById(targetFolderId);
+
+ for (i = 0; i < eltRecords.length; i++) {
+ var entityId = eltRecords[i].data['id'];
+ var record = this.mainContainer.viewContainer.entityStore.getById(entityId);
+
+ if (record.get("type")=="Fichier") {
+ fileIdArray.push(record.get("id"));
+ }
+ // Si c'est un dossier actualisation du tree
+ if (record.get("type")=="Dossier") {
+ folderIdArray.push(record.get("id"));
+ }
+ }
+
+ this.mainContainer.viewContainer.operationProgress.show();
+
+ Ext.Ajax.request({
+ url: this.actionURLAjax,
+ params: {
+ cmd: 'copyGrpEntity',
+ targetFolderId: targetFolderId,
+ folderIdArray: Ext.encode(folderIdArray),
+ fileIdArray: Ext.encode(fileIdArray)
+ },
+ scope: this,
+ success: this.onSuccessCopyGrpEntity,
+ failure: this.onFailureCopyGrpEntity
+ });
+ }
+ },
+
+
+ /**
+ * Drop d'un ou plusieurs elements sur un dossier du cartable
+ */
+ onBeforeNodeDrop: function(e) {
+
+ if(!this.beforeNodeDropIsAlreadyFire){
+
+ // Id du dossier cible
+ var targetFolderId = e.target.id;
+
+ if (e.data.selections) {
+
+ this.beforeNodeDropIsAlreadyFire = true;
+
+ var storeEntity = this.mainContainer.viewContainer.entityStore;
+
+ var fileIdArray = new Array();
+ var folderIdArray = new Array();
+
+ var targetNode = this.treeGroupEntityPanel.getNodeById(targetFolderId);
+
+ for (i = 0; i < e.data.selections.length; i++) {
+ var entityId = e.data.selections[i].data['id'];
+ var record = this.mainContainer.viewContainer.entityStore.getById(entityId);
+
+ if (record.get("type")=="Fichier") {
+ fileIdArray.push(record.get("id"));
+ }
+ // Si c'est un dossier actualisation du tree
+ if (record.get("type")=="Dossier") {
+ folderIdArray.push(record.get("id"));
+ }
+ }
+
+ this.mainContainer.viewContainer.operationProgress.show();
+
+ Ext.Ajax.request({
+ url: this.actionURLAjax,
+ params: {
+ cmd: 'copyGrpEntity',
+ targetFolderId: targetFolderId,
+ folderIdArray: Ext.encode(folderIdArray),
+ fileIdArray: Ext.encode(fileIdArray)
+ },
+ scope: this,
+ success: this.onSuccessCopyGrpEntity,
+ failure: this.onFailureCopyGrpEntity
+ });
+ } else if(e.source.tree && e.tree) {
+ //Si on fait une copie entre 2 arbres différents
+ if (e.source.tree.id != e.tree.id) {
+
+ this.beforeNodeDropIsAlreadyFire = true;
+
+ var node = e.dropNode;
+ var nodeCopy = new Ext.tree.TreeNode({id: "copyNode" + node.id, text: node.text, leaf: false, iconCls: 'folder'});
+ e.target.appendChild(nodeCopy);
+ e.dropStatus = true;
+
+ this.copyFromTree(targetFolderId, node);
+
+ return false;
+ }
+ }
+ } else {
+ return false;
+ }
+ },
+
+
+ onSuccessCopyGrpEntity: function(response, options) {
+ this.beforeNodeDropIsAlreadyFire = false;
+ this.mainContainer.viewContainer.operationProgress.hide();
+ // Traitement des messages
+ var backObj = Ext.decode(response.responseText);
+ if (!backObj.success) {
+ Ext.MessageBox.alert(this.i18n.Cartable.TreeGroupEntity.onSuccessCopyGrpEntity.alert.title, this.i18n.Cartable.TreeGroupEntity.onSuccessCopyGrpEntity.alert.msg, function(btn){});
+ }
+ else if (backObj.portal_message){
+ Ext.Msg.show({
+ title: this.i18n.Cartable.TreeGroupEntity.onSuccessCopyGrpEntity.Msg.title
+ ,msg:backObj.portal_message
+ ,modal:true
+ ,icon:Ext.Msg.INFO
+ ,buttons:Ext.Msg.OK
+ ,minWidth:350
+ ,scope: this
+ ,fn: function(btn){if(this.mainContainer.viewContainer.gridEntity.isVisible()){this.mainContainer.viewContainer.gridEntity.setFocusOnGrid();}}
+ });
+ }
+
+
+ if (backObj.foldersReturn) {
+ var targetNode = this.treeGroupEntityPanel.getNodeById(backObj.targetFolderId);
+ for(var i = 0, len = backObj.foldersReturn.length; i < len; i++) {
+ var folderReturn = backObj.foldersReturn[i];
+ try {
+ // on met a jour l'arbre du cartable
+ // Ajout du dossier au nouvel emplacement
+ var newNode = new Ext.tree.TreeNode({id: folderReturn.id, text: folderReturn.title, leaf: false, iconCls: 'folder'});
+ targetNode.appendChild(newNode);
+ targetNode.sort(function(a, b) {if(a.text < b.text){return -1;} else if(a.text == b.text){return 0;} else {return 1;}});
+ this.treeGroupEntityPanel.getLoader().load(newNode);
+ } catch(except){}
+ }
+ }
+
+ if (backObj.filesReturn) {
+ var targetNode = this.treeGroupEntityPanel.getNodeById(backObj.targetFolderId);
+ for(var i = 0, len = backObj.filesReturn.length; i < len; i++) {
+ var filesReturn = backObj.filesReturn[i];
+ try {
+ // on met a jour l'arbre du cartable
+ // Ajout du dossier au nouvel emplacement
+ var newNode = new Ext.tree.TreeNode({id: filesReturn.id, text: filesReturn.title, leaf: true, iconCls: filesReturn.iconCls});
+ targetNode.appendChild(newNode);
+ targetNode.sort(function(a, b) {if(a.text < b.text){return -1;} else if(a.text == b.text){return 0;} else {return 1;}});
+ } catch(except){}
+ }
+ }
+ if (!backObj.success) {
+ Ext.slideMsg.msg(this.i18n.Cartable.TreeGroupEntity.onSuccessCopyGrpEntity.slideMsg.title, this.i18n.Cartable.TreeGroupEntity.onSuccessCopyGrpEntity.slideMsg.msg);
+ }
+ },
+
+ onFailureCopyGrpEntity: function(response, options) {
+ this.mainContainer.viewContainer.operationProgress.hide();
+ this.beforeNodeDropIsAlreadyFire = false;
+ Ext.MessageBox.alert(this.i18n.Cartable.TreeGroupEntity.onFailureCopyGrpEntity.alert.title, this.i18n.Cartable.TreeGroupEntity.onFailureCopyGrpEntity.alert.msg, function(btn){});
+ },
+
+ copyFromTree: function(targetId, node){
+
+ if(!this.wait){
+ this.wait = new Ext.LoadMask(Ext.getBody(), {msg: this.i18n.Cartable.TreeGroupEntity.wait.msg});
+ }
+ this.wait.show();
+
+ Ext.Ajax.request({
+ url: this.actionURLAjax,
+ params: {
+ cmd: "copyFromTree",
+ folderId: targetId,
+ entityId: node.id,
+ isFile: node.leaf
+ },
+ scope: this,
+ success: this.onSuccessCopyFromTree,
+ failure: this.onFailureCopyFromTree
+ });
+ },
+
+ onSuccessCopyFromTree: function(response, options) {
+ this.beforeNodeDropIsAlreadyFire = false;
+ // Traitement des messages
+ var backObj = Ext.decode(response.responseText);
+ if (!backObj.success) {
+ this.wait.hide();
+ if(backObj.hasPermissions){
+ Ext.MessageBox.alert(this.i18n.Cartable.TreeGroupEntity.copyFromTree.alert.title, this.i18n.Cartable.TreeGroupEntity.copyFromTree.alert.msg, function(btn){});
+ }
+ else{
+ Ext.MessageBox.alert(this.i18n.Cartable.TreeGroupEntity.copyFromTree.alert.title, backObj.permissionMessage, function(btn){});
+ }
+ } else {
+
+ // Actualisation de la grid
+ if(this.mainContainer.viewContainer.folderId == backObj.targetFolderId){
+ var record = new this.mainContainer.viewContainer.entityStore.recordType({
+ id: backObj.id,
+ title: backObj.title,
+ name: backObj.name,
+ type: backObj.type,
+ version: backObj.version,
+ creator: backObj.creator,
+ typeEntity: backObj.typeEntity,
+ size: backObj.size,
+ date: backObj.date,
+ contentType: backObj.contentType,
+ pathMain: backObj.pathMain,
+ plid: backObj.plid,
+ comment: backObj.comment,
+ isNew: false,
+ senderName: backObj.senderName,
+ senderId: backObj.senderId,
+ hideIconViewer: backObj.hideIconViewer,
+ hideIconDownload: backObj.hideIconDownload,
+ hideIconUnzip: backObj.hideIconUnzip,
+ hideIconZip: backObj.hideIconZip,
+ hideIconPermissions: backObj.hideIconPermissions,
+ hideIconComment: backObj.hideIconComment,
+ hideEditFile: backObj.hideEditFile,
+ urlImg: backObj.urlImg,
+ fileExtension: backObj.fileExtension,
+ isSignet: false,
+ urlSignet: null,
+ urlWebdav: backObj.urlWebdav,
+ lock: backObj.lock}, backObj.id);
+
+ // on ajoute l element ds la grille
+ this.mainContainer.viewContainer.entityStore.addSorted(record);
+ }
+
+ var copyNode = this.treeGroupEntityPanel.getNodeById("copyNode" + backObj.oldNodeId);
+ //On met à jour l'identifiant du nouveau dossier créé
+ copyNode.setId(backObj.id);
+ copyNode.setText(backObj.title);
+ copyNode.parentNode.sort(function(a, b) {if(a.text < b.text){return -1;} else if(a.text == b.text){return 0;} else {return 1;}});
+ if(backObj.typeEntity == "Dossier"){
+ this.treeGroupEntityPanel.getLoader().load(copyNode);
+ }
+
+ this.wait.hide();
+
+ }
+ },
+
+ onFailureCopyFromTree: function(response, options) {
+ this.wait.hide();
+ this.beforeNodeDropIsAlreadyFire = false;
+ Ext.MessageBox.alert(this.i18n.Cartable.TreeGroupEntity.copyFromTree.alert.title, this.i18n.Cartable.TreeGroupEntity.copyFromTree.alert.msg, function(btn){});
+ },
+
+ /**
+ * Déplacement d'un dossier dans le TreePanel
+ */
+ onNodeDragoverGrpTreePanel: function(dragOverEvent) {
+ if(dragOverEvent.source.tree && dragOverEvent.source.tree.id == dragOverEvent.tree.id){
+ dragOverEvent.cancel = true;
+ }
+ if(!dragOverEvent.target.attributes.hasPermission){
+ dragOverEvent.cancel = true;
+ }
+ }
+});