--- /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)
+*/
+EntSavoie.Forum.EditMessage = 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.index = this.index || 0;
+ this.parentMessageId = this.parentMessageId || 0;
+ this.wait = null;
+ this.messageCitation = null;
+
+ // on definit les champs d edition
+ this.messageNameField = this.messageNameField || new Ext.form.TextField({
+ fieldLabel: this.i18n.Forum.EditMessage.messageNameField.fieldLabel,
+ //maxLength: 70,
+ allowBlank: false,
+ width: 495,
+ labelStyle: 'padding: 0 0 0 0'
+ });
+
+
+ this.messageCitationField = this.messageCitationField || new Ext.Panel({
+ cls: 'messageCitationPanel',
+ height: 200,
+ width: 495,
+ border: false,
+ autoScroll: true,
+ fieldLabel: this.i18n.Forum.EditMessage.messageCitationField.fieldLabel
+ });
+
+ this.messageBodyField = this.messageBodyField || new Ext.ux.form.CKEditor({
+ CKConfig: {
+ extraPlugins : 'cartablefilechooser',
+ toolbar: [
+ ['Source','-','Cut','Copy','Paste','PasteText','PasteFromWord','-','FontSize','Bold','Italic','Underline','Strike','TextColor','BGColor'], ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'], ['Link','Unlink'/*,'Anchor'*/], [/*'SpellChecker',*/ 'Scayt'],
+ ['cartablefilechooser']
+ ],
+ removePlugins : 'elementspath',
+ skin: 'moono-lisa',
+ resize_enabled: false,
+ enterMode: 2,
+ scayt_autoStartup : true,
+ scayt_sLang : "fr_FR",
+ height: 200,
+ width: 495,
+ language: this.language || "fr",
+ allowedContent: true,
+ //scope: this
+ scope: {renderURLAjax: this.renderURLAjax, actionURLAjax: this.actionURLAjax,
+ onImageChoosedWithJQueryUploaderCKEditor: this.onImageChoosedWithJQueryUploaderCKEditor.createDelegate(this),
+ onImgChoosedCKEditor: this.onImgChoosedCKEditor.createDelegate(this)}
+ },
+ fieldLabel:this.i18n.Forum.EditMessage.messageBodyField.fieldLabel
+ });
+
+ // on definit les controles
+ this.replyBtn = this.replyBtn || new Ext.Button({
+ text: this.i18n.Forum.EditMessage.replyBtn.text,
+ handler: this.onReply,
+ scope: this
+ });
+
+ this.editBtn = this.editBtn || new Ext.Button({
+ text: this.i18n.Forum.EditMessage.editBtn.text,
+ handler: this.onEdit,
+ scope: this
+ });
+
+ this.cancelBtn = this.cancelBtn || new Ext.Button({
+ text: this.i18n.Forum.EditMessage.cancelBtn.text,
+ handler: this.onCancel,
+ scope: this
+ });
+
+ // Pieces jointes
+ this.attachFileChooserAdvanced = this.attachFileChooserAdvanced || new EntSavoie.AttachFileChooserAdvanced({
+ attachFile_gridWidth: 485,
+ actionURLAjax: this.actionURLAjax,
+ renderURLAjax: this.renderURLAjax,
+ btnStyle: "margin-right: 5px",
+ bodyCssClass: 'panelAttachChooserStyle'
+ });
+
+ this.anonymeMessageRG = this.anonymeMessageRG || new Ext.form.RadioGroup({
+ itemCls: 'item',
+ anchor: "100%",
+ column: 2,
+ items: [
+ {boxLabel: "Anonyme", name: 'anonymMessage', inputValue: true, checked: true},
+ {boxLabel: "Authentifiée", name: 'anonymMessage', inputValue: false, style: "margin-left: 30px;"}
+ ]
+ });
+
+ this.pseudoField = this.pseudoField || new Ext.form.TextField({
+ fieldLabel: "Pseudonyme",
+ allowBlank: false,
+ anchor: "50%",
+ labelStyle: 'margin-left: 5px;'
+ });
+
+ this.anonymeFieldset = this.anonymeFieldset || new Ext.form.FieldSet({
+ anchor: "100%",
+ checkboxToggle:false,
+ title: "Répondre de manière",
+ autoHeight:true,
+ style: "margin-top: 10px;",
+ padding: 0,
+ labelWidth: 1,
+ items: [
+ this.anonymeMessageRG,
+ {
+ border: false,
+ layout: 'form',
+ bodyStyle:{"background-color": "#DFE8F6"},
+ items: [this.pseudoField]
+ }
+ ]
+ });
+
+ EntSavoie.Forum.EditMessage.superclass.constructor.call(this, {
+ cls: "forum-portlet",
+ title: this.i18n.Forum.EditMessage.title,
+ modal: true,
+ width: 640,
+ //height: 420,
+ height: 570,
+ layout: 'form',
+ labelWidth: 80,
+ closable: true,
+ closeAction: 'hide',
+ autoScroll: true,
+ padding: 10,
+ items: [
+ this.messageNameField,
+ this.messageCitationField,
+ this.messageBodyField,
+ this.attachFileChooserAdvanced,
+ this.anonymeFieldset
+ ],
+ buttons: [
+ this.replyBtn,
+ this.editBtn,
+ this.cancelBtn
+ ]
+ });
+
+ this.anonymeMessageRG.on("change", this.onChangeAnonymeMessageRG, this);
+
+};
+
+Ext.extend(EntSavoie.Forum.EditMessage, Ext.Window, {
+ initComponent: function () {
+ EntSavoie.Forum.EditMessage.superclass.initComponent.call(this);
+ },
+
+ /**
+ * Fenetre de reponse a un fil de discussion
+ */
+ showAddMessageWindow: function(){
+ this.show();
+ this.setTitle(this.i18n.Forum.EditMessage.showAddMessageWindow.title);
+ this.editBtn.hide();
+ this.replyBtn.show();
+ this.messageCitationField.hide();
+ this.messageCitation = null;
+ this.messageCitationField.removeAll(true);
+ this.messageCitationField.add( { border: false, html : ""} );
+ this.messageCitationField.doLayout();
+ this.messageNameField.setValue("");
+ this.messageBodyField.reset();
+ this.parentMessageId = this.gridMessage.threadRecord.get("rootMessageId");
+ // Pieces jointes
+ this.attachFileChooserAdvanced.attachFile_grid.show();
+ this.attachFileChooserAdvanced.attachFile_store.removeAll();
+ if(this.gridMessage.threadRecord.get("anonymous")){
+ this.anonymeFieldset.show();
+ this.setHeight(600);
+ if(anonymous){
+ this.anonymeMessageRG.items.items[0].setValue(true);
+ this.pseudoField.enable();
+ } else {
+ this.anonymeMessageRG.items.items[1].setValue(true);
+ this.pseudoField.disable();
+ }
+ this.pseudoField.setValue(pseudo);
+ } else {
+ this.anonymeFieldset.hide();
+ this.setHeight(510);
+ this.anonymeMessageRG.items.items[1].setValue(true);
+ this.pseudoField.setValue("");
+ }
+ },
+
+ /**
+ * Fenetre de reponse avec citation
+ */
+ showReplyWithCitWindow: function(record, rowIndex){
+ this.show();
+ this.setTitle(this.i18n.Forum.EditMessage.showReplyWithCitWindow.title + record.get("subject"));
+ this.editBtn.hide();
+ this.replyBtn.show();
+
+ this.messageCitationField.hide();
+ this.messageNameField.setValue(this.i18n.Forum.EditMessage.showReplyWithCitWindow.messageNameField + record.get("subject"));
+ this.messageCitationField.removeAll(true);
+ this.messageCitation = record.get("citation") + "<b>" + record.get("creator") + " : </b> <br /> ''" + record.get("body")+"''";
+ var citationTmp = '<div class="citationMessage" style="border: solid 1px black">' + this.messageCitation + '</div>';
+ this.messageCitationField.add( { border: false, html : citationTmp} );
+
+ this.messageCitationField.doLayout();
+ this.messageBodyField.reset();
+ this.parentMessageId = record.get("id");
+ this.index = rowIndex;
+ this.extend = record.get("extend");
+ // Pieces jointes
+ this.attachFileChooserAdvanced.attachFile_grid.show();
+ this.attachFileChooserAdvanced.attachFile_store.removeAll();
+
+ if(this.gridMessage.threadRecord.get("anonymous")){
+ this.anonymeFieldset.show();
+ this.setHeight(600);
+ if(anonymous){
+ this.anonymeMessageRG.items.items[0].setValue(true);
+ this.pseudoField.enable();
+ } else {
+ this.anonymeMessageRG.items.items[1].setValue(true);
+ this.pseudoField.disable();
+ }
+ this.pseudoField.setValue(pseudo);
+ } else {
+ this.anonymeFieldset.hide();
+ this.setHeight(510);
+ this.anonymeMessageRG.items.items[1].setValue(true);
+ this.pseudoField.setValue("");
+ }
+ },
+
+ /**
+ * Ajout d'un message
+ */
+ onReply: function(btn) {
+ if (!this.messageNameField.isValid()) {
+ return false;
+ }
+ // pieces jointes
+ var pjArray = new Array();
+ for (i=0; i<this.attachFileChooserAdvanced.attachFile_store.getCount(); i++) {
+ var pjRec = this.attachFileChooserAdvanced.attachFile_store.getAt(i);
+ pjArray.push(pjRec.get("id"));
+ }
+
+ if(!this.wait){
+ this.wait = new Ext.LoadMask(this.getId(), {msg:this.i18n.Forum.EditMessage.onReply.wait});
+ }
+ this.wait.show();
+
+ Ext.Ajax.request({
+ url: this.actionURLAjax,
+ params: {
+ cmd: "reply",
+ messageName: this.messageNameField.getValue(),
+ messageBody: this.messageBodyField.getValue(),
+ messageCitation: this.messageCitation,
+ attachFiles: Ext.util.JSON.encode(pjArray),
+ groupId: this.gridMessage.threadRecord.get("groupId"),
+ threadId: this.gridMessage.threadRecord.get("id"),
+ parentMessageId: this.parentMessageId,
+ index: this.index,
+ extend: this.extend,
+ anonymous: this.anonymeMessageRG.items.items[0].getValue(),
+ pseudo: this.pseudoField.getValue()
+ },
+ scope: this,
+ success: this.onSuccessAddMessage,
+ failure: this.onFailureAddMessage
+ });
+ },
+
+ onSuccessAddMessage: function(response, options) {
+ this.hide();
+ // Traitement des messages
+ var backObj = Ext.decode(response.responseText);
+ if (!backObj.success) {
+ this.wait.hide();
+ Ext.MessageBox.alert(this.i18n.Forum.EditMessage.onSuccessAddMessage.alert[0], this.i18n.Forum.EditMessage.onSuccessAddMessage.alert[1], function(btn){}, this);
+ } else {
+ this.wait.hide();
+ // Actualisation de la grid
+ // Ajout du nouveau record
+ var record = new this.gridMessage.messageStore.recordType({id: backObj.id,
+ type: backObj.type,
+ creator: backObj.creator,
+ createdDate: backObj.createdDate,
+ subject: backObj.subject,
+ body: backObj.body,
+ messageRoot: backObj.messageRoot,
+ nbUserPublications: backObj.nbUserPublications,
+ hasCitation: backObj.hasCitation,
+ citation: backObj.citation,
+ tabulation: backObj.tabulation,
+ schoolName: backObj.schoolName,
+ profil: backObj.profil,
+ attachements: backObj.attachements,
+ extend: backObj.extend,
+ hideExtend:backObj.hideExtend,
+ hideEditMessage:backObj.hideEditMessage,
+ hideDeleteMessage:backObj.hideDeleteMessage,
+ hideManagePermissions:backObj.hideManagePermissions,
+ hideReplyWithCit: backObj.hideReplyWithCit,
+ groupId:backObj.groupId,
+ anonymous: backObj.anonymous,
+ pseudo: backObj.pseudo}, backObj.id);
+ //Ajout du nouveau record dans la grid liste des reponses
+ var recordResponse = new this.gridMessage.responseStore.recordType({id: backObj.id,
+ subject: backObj.subject,
+ creator: backObj.creator,
+ createdDate: backObj.createdDate,
+ tabulation: backObj.tabulation,
+ rowIndexResponse: backObj.indexResponse,
+ extend: backObj.extend,
+ hideExtend:backObj.hideExtend,
+ anonymous: backObj.anonymous,
+ pseudo: backObj.pseudo}, backObj.id);
+
+ pseudo = backObj.pseudo;
+ anonymous = backObj.anonymous;
+
+ //Si le message est une réponse à un des messages on l'insere juste après
+ if (backObj.index != -1) {
+ this.gridMessage.messageStore.insert(backObj.index,record);
+ }
+ if (backObj.indexResponse != -1) {
+ this.gridMessage.responseStore.insert(backObj.indexResponse,recordResponse);
+ }
+ if (this.parentMessageId != this.gridMessage.threadRecord.get("rootMessageId")) {
+ var recordParent = this.gridMessage.messageStore.getById(this.parentMessageId);
+ if (recordParent.get("hideExtend")) {
+ recordParent.set("hideExtend" , false);
+ }
+ var recordParentResponse = this.gridMessage.responseStore.getById(this.parentMessageId);
+ if (recordParentResponse.get("hideExtend")) {
+ recordParentResponse.set("hideExtend" , false);
+ }
+ }
+
+ if(!this.mainInstance.standalone){
+ this.mainInstance.mainContainer.refreshGrids(true);
+ }
+
+ // Actualisation de la pagingToolbar
+ this.gridMessage.messageStore.totalLength++;
+
+ Ext.slideMsg.msg(this.i18n.Forum.EditMessage.onSuccessAddMessage.slideMsg[0], this.i18n.Forum.EditMessage.onSuccessAddMessage.slideMsg[1]);
+ }
+ },
+
+ onFailureAddMessage: function(response, options) {
+ this.wait.hide();
+ Ext.MessageBox.alert(this.i18n.Forum.EditMessage.onFailureAddMessage.alert[0], this.i18n.Forum.EditMessage.onFailureAddMessage.alert[0], function(btn){}, this);
+ },
+
+ /**
+ * Fenetre d'edition d'un message
+ */
+ showEditMessageWindow: function(record){
+ this.show();
+ this.setTitle(this.i18n.Forum.EditMessage.showEditMessageWindow.title + record.get("subject"));
+ this.editBtn.show();
+ this.replyBtn.hide();
+ this.setHeight(510);
+ if (record.get("hasCitation")) {
+ this.messageCitationField.hide();
+ this.messageCitationField.removeAll(true);
+ this.messageCitation = record.get("citation");
+ var citationTmp = '<div class="citationMessage">' + this.messageCitation + '</div>';
+ this.messageCitationField.add( { border: false, html : citationTmp } );
+ this.messageCitationField.doLayout();
+ } else {
+ this.messageCitationField.removeAll(true);
+ this.messageCitation = null;
+ this.messageCitationField.add( { border: false, html : ""} );
+ this.messageCitationField.doLayout();
+ this.messageCitationField.hide();
+ }
+ this.messageNameField.setValue(record.get("subject"));
+ this.messageBodyField.setValue(record.get("body"));
+ this.currentMessageId = record.get("id");
+
+ // Pieces Jointes
+ this.attachFileChooserAdvanced.attachFile_store.removeAll();
+
+ var attachFiles = this.getAttachFiles(record.get("attachements"));
+
+ this.attachFileChooserAdvanced.attachFile_grid.show();
+ // Si il y a des pieces jointes
+ if (attachFiles.length>0) {
+
+ for (i=0; i<attachFiles.length; i++) {
+ this.attachFileChooserAdvanced.attachFile_store.add(attachFiles[i]);
+ }
+ }
+
+ this.anonymeFieldset.hide();
+ },
+
+
+ /**
+ * Obtention des pièces jointes
+ */
+ getAttachFiles: function(attachFile) {
+ var results = new Array();
+ var fileArray = Ext.decode(attachFile);
+
+ // Creation d'un tableeau contenant les pièces jointes du message courant
+ for (i=0; i<fileArray.length; i++) {
+ var file = fileArray[i];
+ results.push( new this.attachFileChooserAdvanced.attachFileRecordCreator({
+ id: file.fileId,
+ name: file.fileName,
+ type: "Fichier",
+ isNew: false,
+ isSignet: file.isSignet
+ }) );
+ }
+
+ return results;
+ },
+
+
+ onEdit: function(btn) {
+ if (!this.messageNameField.isValid()) {
+ return false;
+ }
+ this.wait = new Ext.LoadMask(this.id, {msg: "<b>Edition du message en cours.</b> <br/> Veuillez patienter ..."});
+ this.wait.show();
+ // pieces jointes
+ var pjArray = new Array();
+ var existingPjArray = new Array();
+ for (i=0; i<this.attachFileChooserAdvanced.attachFile_store.getCount(); i++) {
+ var pjRec = this.attachFileChooserAdvanced.attachFile_store.getAt(i);
+ if (!pjRec.get("isNew")) {
+ existingPjArray.push(pjRec.get("id"));
+ }
+ else {
+ pjArray.push(pjRec.get("id"));
+ }
+ }
+ Ext.Ajax.request({
+ url: this.actionURLAjax,
+ params: {
+ cmd: "editMessage",
+ messageId: this.currentMessageId,
+ messageName: this.messageNameField.getValue(),
+ messageBody: this.messageBodyField.getValue(),
+ messageCitation: this.messageCitation,
+ threadId: this.gridMessage.threadRecord.get("id"),
+ attachFiles: Ext.util.JSON.encode(pjArray),
+ existingAttachFiles: Ext.util.JSON.encode(existingPjArray),
+ editThread: false
+ },
+ scope: this,
+ success: this.onSuccessEditMessage,
+ failure: this.onFailureEditMessage
+ });
+ },
+
+ onSuccessEditMessage: function(response, options) {
+ this.wait.hide();
+ this.hide();
+ // Traitement des messages
+ var backObj = Ext.decode(response.responseText);
+ if (!backObj.success) {
+ Ext.MessageBox.alert(this.i18n.Forum.EditMessage.onSuccessEditMessage.alert[0], this.i18n.Forum.EditMessage.onSuccessEditMessage.alert[1], function(btn){}, this);
+ } else {
+ // Actualisation de la grid
+ var record = this.gridMessage.messageStore.getById(backObj.id);
+ record.set("subject", backObj.subject);
+ record.set("body", backObj.body);
+ record.set("attachements", backObj.attachements);
+
+ //Actualistaion de la grid liste des messages
+ if (!backObj.hideMessage) {
+ var recordResponse = this.gridMessage.responseStore.getById(backObj.id);
+ recordResponse.set("subject", backObj.subject);
+ }
+
+ if (backObj.rootMessage) {
+ this.gridMessage.setTitle(this.i18n.Forum.EditMessage.onSuccessEditMessage.gridMessage.title + backObj.subject);
+ }
+
+ if(!this.mainInstance.standalone){
+ this.mainInstance.mainContainer.refreshGrids(false);
+ }
+
+ Ext.slideMsg.msg(this.i18n.Forum.EditMessage.onSuccessEditMessage.slideMsg[0], this.i18n.Forum.EditMessage.onSuccessEditMessage.slideMsg[1] + backObj.subject);
+
+ }
+ },
+
+ onFailureEditMessage: function(response, options) {
+ this.wait.hide();
+ Ext.MessageBox.alert(this.i18n.Forum.EditMessage.onFailureEditMessage.alert[0], this.i18n.Forum.EditMessage.onFailureEditMessage.alert[1], function(btn){}, this);
+ },
+
+
+ onCancel: function(btn) {
+ this.hide();
+ },
+
+ /*
+ * Ajout d'image sur le CKEditor
+ */
+ onImgChoosedCKEditor: function(idFile) {
+ this.wait = new Ext.LoadMask(Ext.getBody(), {msg: "<b>Opération en cours.</b> <br/> Veuillez patienter ..."});
+ this.wait.show();
+
+ Ext.Ajax.request({
+ url:this.actionURLAjax,
+ params:{
+ cmd: "pictureChoosedCKEditor",
+ idFile: idFile
+ },
+ success: this.onSuccessPictureChoosedCKEditor,
+ failure: this.onFailurePictureChoosedCKEditor,
+ scope: this
+ });
+ },
+
+ onSuccessPictureChoosedCKEditor:function(response, options) {
+ this.wait.hide();
+ var backObj = Ext.decode(response.responseText);
+ if (!backObj.success) {
+ Ext.MessageBox.alert("Attention", "En raison d'un dysfonctionnement réseau l'opération demandée n'a pas pu être effectuée", function(btn){}, this);
+ }else{
+ var ck = CKEDITOR.instances[this.messageBodyField.id];
+ ck.insertHtml("<img src='data:image/" + backObj.extension + ";base64," + backObj.fileBase64 + " '/>");
+ }
+ },
+
+ onFailurePictureChoosedCKEditor:function(response, options) {
+ this.wait.hide();
+ Ext.MessageBox.alert("Attention", "En raison d'un dysfonctionnement réseau l'opération demandée n'a pas pu être effectuée", function(btn){}, this);
+ },
+
+ onImageChoosedWithJQueryUploaderCKEditor: function(backObj){
+ var ck = CKEDITOR.instances[this.messageBodyField.id];
+ ck.insertHtml("<img src='data:image/" + backObj.extension + ";base64," + backObj.fileBase64 + " '/>");
+ },
+
+ onChangeAnonymeMessageRG: function(rg, checked){
+ if(this.anonymeMessageRG.items.items[0].getValue()){
+ this.pseudoField.enable();
+ } else {
+ this.pseudoField.disable();
+ }
+ }
+
+});