diff --git a/.gitignore b/.gitignore index bc1306d1..2646d521 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /data/ /php/conf/localConf.ini +/php/conf/local.*.ini diff --git a/error_type.php b/error_type.php index 952a8040..ccb71fc7 100644 --- a/error_type.php +++ b/error_type.php @@ -2,8 +2,7 @@ session_start(); error_reporting(E_ALL); -require_once "./php/AccountManager.php"; -require_once "./php/ToolsError.php"; +require_once __DIR__.'/php/loader.php'; $am = AccountManager::getInstance(); $am->isLogged(); diff --git a/index.php b/index.php index fa9a30e3..8093163b 100755 --- a/index.php +++ b/index.php @@ -1,8 +1,9 @@ setProject($_project); @@ -59,9 +56,6 @@ $patchID = trim($_REQUEST['patchID'], '/ '); $_project = $_REQUEST['project']; - require_once dirname(__FILE__) . '/php/ProjectManager.php'; - require_once dirname(__FILE__) . '/php/RepositoryManager.php'; - // Set the project ProjectManager::getInstance()->setProject($_project); diff --git a/install/doc-editor.sql b/install/doc-editor.sql index c2eab486..c2e9996f 100644 --- a/install/doc-editor.sql +++ b/install/doc-editor.sql @@ -83,8 +83,8 @@ CREATE TABLE IF NOT EXISTS `files` ( `xmlid` varchar(255) DEFAULT NULL, `path` varchar(255) NOT NULL, `name` varchar(255) NOT NULL, - `revision` int(11) unsigned DEFAULT NULL, - `en_revision` int(11) unsigned DEFAULT NULL, + `revision` VARCHAR(255) DEFAULT NULL, + `en_revision` VARCHAR(255) DEFAULT NULL, `reviewed` varchar(20) DEFAULT NULL, `reviewed_maintainer` text, `size` int(11) unsigned DEFAULT NULL, @@ -202,8 +202,8 @@ CREATE TABLE IF NOT EXISTS `work` ( `lang` varchar(10) NOT NULL, `path` varchar(255) NOT NULL, `name` varchar(255) NOT NULL, - `revision` int(11) NOT NULL, - `en_revision` int(11) NOT NULL, + `revision` VARCHAR(255) NOT NULL, + `en_revision` VARCHAR(255) NOT NULL, `reviewed` varchar(50) NOT NULL, `maintainer` varchar(255) NOT NULL, `reviewed_maintainer` varchar(255) NOT NULL, diff --git a/install/firstRun.php b/install/firstRun.php index 6c2499df..0e9bb69b 100644 --- a/install/firstRun.php +++ b/install/firstRun.php @@ -2,11 +2,12 @@ error_reporting(E_ALL); set_time_limit(0); -require_once '../php/html.templates.php'; -require_once '../php/ProjectManager.php'; -require_once '../php/RepositoryManager.php'; -require_once '../php/TranslationStatistic.php'; -require_once '../php/TranslatorStatistic.php'; + +chdir(dirname(__FILE__)); + +require_once __DIR__.'/../php/loader.php'; +require_once __DIR__.'/../php/html.templates.php'; + $isCLI = (PHP_SAPI == 'cli'); diff --git a/install/migration.php b/install/migration.php index 375aa579..9e34310f 100644 --- a/install/migration.php +++ b/install/migration.php @@ -2,10 +2,7 @@ error_reporting(E_ALL); set_time_limit(0); -require_once '../php/ProjectManager.php'; -require_once '../php/DBConnection.php'; -require_once '../php/RepositoryManager.php'; -require_once '../php/AccountManager.php'; +require_once __DIR__.'/../php/loader.php'; $am = AccountManager::getInstance(); $rm = RepositoryManager::getInstance(); diff --git a/js/locale/ar.js b/js/locale/ar.js index 1a9b1df0..e4388f8b 100644 --- a/js/locale/ar.js +++ b/js/locale/ar.js @@ -553,10 +553,6 @@ var i18n = new Array(); i18n["check in progress..."] = "جاري الفحص..."; -// In file: ../../js/ui/task/UpdateSingleFolderTask.js - i18n["Please, wait until update this folder..."] = "يرجى الانتظار حتى يتم تحديث المجلد..."; - - // In file: ../../js/ui/task/SaveTransFileTask.js i18n["Saving data..."] = "حفظ البيانات..."; i18n["Document saved"] = "تم حفظ الوثيقة"; diff --git a/js/locale/fr.js b/js/locale/fr.js index d1b8713e..5dd7169d 100644 --- a/js/locale/fr.js +++ b/js/locale/fr.js @@ -571,8 +571,6 @@ var i18n = new Array(); i18n["Retrying in {0} second(s)."] = "Nouvelle tentative de connexion dans {0} seconde(s)."; -// In file: ../../js/ui/task/UpdateSingleFolderTask.js - i18n["Please, wait until update this folder..."] = "Merci de patienter pendant la mise à jour de ce dossier..."; // In file: ../../js/ui/task/SaveTransFileTask.js diff --git a/js/main-all-debug.js b/js/main-all-debug.js index de9889f6..e9be7fa9 100644 --- a/js/main-all-debug.js +++ b/js/main-all-debug.js @@ -11806,130 +11806,6 @@ ui.task.UpdateConfTask = function(config) } } }); -};Ext.namespace('ui','ui.task','ui.task._UpdateSingleFolderTask'); - -ui.task._UpdateSingleFolderTask.getUpdateFolderResponse = function(node) -{ - XHR({ - params : { - task: 'getUpdateFolderResponse' - }, - success : function(r) - { - var o = Ext.util.JSON.decode(r.responseText); - ui.task._UpdateSingleFolderTask.afterUpdate(o, node); - } - }); -} - -ui.task._UpdateSingleFolderTask.poll = new Ext.util.DelayedTask(function() -{ - var node = arguments[0], - u = node.attributes.id.split('/'), - FirstFolder, t = new Array(); - - u.shift(); - FirstFolder = u[0]; - - t.push(node); - - XHR({ - params : { - task : 'checkLockFile', - lockFile : 'project_' + PhDOE.project + '_' + FirstFolder + '_lock_update_folder' - }, - success : function() - { - ui.task._UpdateSingleFolderTask.poll.delay(5000, null, this, t); - }, - failure : function(response) - { - var o = Ext.util.JSON.decode(response.responseText); - - if (o && o.success === false) { - new ui.task._UpdateSingleFolderTask.getUpdateFolderResponse(node); - - } else { - ui.task._UpdateSingleFolderTask.poll.delay(5000, null, this, t); - } - } - }); -}); - -ui.task._UpdateSingleFolderTask.afterUpdate = function(o, node) -{ - Ext.getBody().unmask(); - - // Re-enable TaskPing - ui.task.PingTask.getInstance().delay(30000); - - // TODO: we must handle the response here - var r = Ext.util.JSON.decode(o.result); - - // We reload and highlight the modified node - node.reload(function() { - - Ext.iterate(r.newFiles, function(prop, val){ - node.findChild('text', prop).getUI().addClass('treeFileUpdated'); - }); - - }, this); - - // Reload all store - PhDOE.reloadAllStore(); - -}; - -ui.task._UpdateSingleFolderTask.update = function(node) -{ - var t = new Array(); - t.push(node); - - Ext.getBody().mask( - ' ' + - _('Please, wait until update this folder...') - ); - - // We need to stop ping test during this process - ui.task.PingTask.getInstance().cancel(); - - XHR({ - params : { - task : 'updateFolder', - path : node.id - }, - success : function(r) - { - var o = Ext.util.JSON.decode(r.responseText); - ui.task._UpdateSingleFolderTask.afterUpdate(o, node); - }, - failure : function(r) - { - var o = Ext.util.JSON.decode(r.responseText); - - if (o && o.success === false) { - // Re-enable TaskPing - ui.task.PingTask.getInstance().delay(30000); - Ext.getBody().unmask(); - PhDOE.winForbidden(); - } else { - // take over 30sec (max Keep-Alive time) - // poll every XX secondes if the update is finish - ui.task._UpdateSingleFolderTask.poll.delay(5000, null, this, t); - } - } - }); -}; - -ui.task.UpdateSingleFolderTask = function(node) -{ - // If the user is anonymous, we don't update anything - if (PhDOE.user.isAnonymous) { - Ext.getCmp('winVCSCommit').close(); - PhDOE.winForbidden(); - return; - } - ui.task._UpdateSingleFolderTask.update(node); };Ext.namespace('ui','ui.task','ui.task._VCSCommitTask'); ui.task._VCSCommitTask.getCommitResponse = function() @@ -22397,17 +22273,6 @@ Ext.extend(ui.cmp._RepositoryTree.menu.folder, Ext.menu.Menu, { } } }, '-', { - text: _('Update this folder'), - iconCls: 'iconFilesNeedUpdate', - scope: this, - handler: function(){ - // We start by expand this node. - this.node.expand(); - - //... and fire the update processus - new ui.task.UpdateSingleFolderTask(this.node); - } - }, { text: _('Add a new folder'), iconCls: 'iconFolderNew', hidden: (this.node.id === '/' || diff --git a/js/main-all.js b/js/main-all.js index 33536669..b456e883 100644 --- a/js/main-all.js +++ b/js/main-all.js @@ -96,4 +96,4 @@ Ext.ux.tree.TreeGridLoader=Ext.extend(Ext.tree.TreeLoader,{createNode:function(c * licensing@extjs.com * http://www.extjs.com/license */ -Ext.ux.tree.TreeGrid=Ext.extend(Ext.tree.TreePanel,{rootVisible:false,useArrows:true,lines:false,borderWidth:Ext.isBorderBox?0:2,cls:"x-treegrid",columnResize:true,enableSort:true,reserveScrollOffset:true,enableHdMenu:true,columnsText:"Columns",initComponent:function(){if(!this.root){this.root=new Ext.tree.AsyncTreeNode({text:"Root"})}var d=this.loader;if(!d){d=new Ext.ux.tree.TreeGridLoader({dataUrl:this.dataUrl,requestMethod:this.requestMethod,store:this.store})}else{if(Ext.isObject(d)&&!d.load){d=new Ext.ux.tree.TreeGridLoader(d)}else{if(d){d.createNode=function(c){if(!c.uiProvider){c.uiProvider=Ext.ux.tree.TreeGridNodeUI}return Ext.tree.TreeLoader.prototype.createNode.call(this,c)}}}}this.loader=d;Ext.ux.tree.TreeGrid.superclass.initComponent.call(this);this.initColumns();if(this.enableSort){this.treeGridSorter=new Ext.ux.tree.TreeGridSorter(this,this.enableSort)}if(this.columnResize){this.colResizer=new Ext.tree.ColumnResizer(this.columnResize);this.colResizer.init(this)}var e=this.columns;if(!this.internalTpl){this.internalTpl=new Ext.XTemplate('
','
','
','','','','","","
','
',this.enableHdMenu?'':"",'{header}',"
","
","
","
",'
','
',"
")}if(!this.colgroupTpl){this.colgroupTpl=new Ext.XTemplate('')}},initColumns:function(){var g=this.columns,d=g.length,f=[],e,h;for(e=0;e10)){this.setScrollOffset(c)}else{var f=this;setTimeout(function(){f.setScrollOffset(g.offsetWidth-g.clientWidth>10?c:0)},10)}}},updateColumnWidths:function(){var m=this.columns,p=m.length,d=this.outerCt.query("colgroup"),o=d.length,l,h,f,e;for(f=0;f0&&this.columns[c]){this.setColumnVisible(c,!d.checked)}}return true},setColumnVisible:function(c,d){this.columns[c].hidden=!d;this.updateColumnWidths()},scrollToTop:function(){this.innerBody.dom.scrollTop=0;this.innerBody.dom.scrollLeft=0},syncScroll:function(){this.syncHeaderScroll();var c=this.innerBody.dom;this.fireEvent("bodyscroll",c.scrollLeft,c.scrollTop)},syncHeaderScroll:function(){var c=this.innerBody.dom;this.innerHd.dom.scrollLeft=c.scrollLeft;this.innerHd.dom.scrollLeft=c.scrollLeft},registerNode:function(c){Ext.ux.tree.TreeGrid.superclass.registerNode.call(this,c);if(!c.uiProvider&&!c.isRoot&&!c.ui.isTreeGridNodeUI){c.ui=new Ext.ux.tree.TreeGridNodeUI(c)}}});Ext.reg("treegrid",Ext.ux.tree.TreeGrid);Ext.override(Ext.ux.tree.TreeGrid,{onResize:function(d,f){Ext.ux.tree.TreeGrid.superclass.onResize.apply(this,arguments);var j=this.innerBody.dom;var k=this.innerHd.dom;if(!j){return}if(Ext.isNumber(f)){j.style.height=this.body.getHeight(true)-24+"px"}if(Ext.isNumber(d)){if(Ext.isIE&&!(Ext.isStrict&&Ext.isIE8)){var e=this.body.getWidth(true)+"px";j.style.width=e;k.style.width=e}var c=Ext.num(this.scrollOffset,Ext.getScrollBarWidth());if(this.reserveScrollOffset||((j.offsetWidth-j.clientWidth)>10)){this.setScrollOffset(c)}else{var g=this;setTimeout(function(){g.setScrollOffset(j.offsetWidth-j.clientWidth>10?c:0)},10)}}}});Ext.ux.DblClickCloseTabs=Ext.extend(Object,{init:function(c){this.panel=c;c.initEvents=c.initEvents.createSequence(this.initEvents,this)},initEvents:function(){this.panel.mon(this.panel.strip,{dblclick:this.onDblClick.createDelegate(this,[this.panel],0)});delete this.panel},onDblClick:function(c,d){if(c.getActiveTab().closable){c.remove(c.getActiveTab())}}});Ext.preg("dblclickclosetabs",Ext.ux.DblClickCloseTabs);Ext.util.md5=function(u,c,q,m){c=(typeof c==="undefined"?false:c);q=(typeof q==="undefined"?false:q);m=(typeof m==="undefined"?8:m);function k(r,w){var v=((r&65535)+(w&65535)),s=((r>>16)+(w>>16)+(v>>16));return(s<<16)|(v&65535)}function p(r,s){return(r<>>(32-s))}function f(A,w,v,r,z,y){return k(p(k(k(w,A),k(r,y)),z),v)}function l(w,v,B,A,r,z,y){return f((v&B)|((~v)&A),w,v,r,z,y)}function e(w,v,B,A,r,z,y){return f((v&A)|(B&(~A)),w,v,r,z,y)}function o(w,v,B,A,r,z,y){return f(v^B^A,w,v,r,z,y)}function j(w,v,B,A,r,z,y){return f(B^(v|(~A)),w,v,r,z,y)}function h(E,z){var D=1732584193,C=-271733879,B=-1732584194,A=271733878,v,y,w,s,r;E[z>>5]|=128<<((z)%32);E[(((z+64)>>>9)<<4)+14]=z;for(v=0;v>5]|=(w.charCodeAt(s/m)&r)<<(s%32)}return v}function g(v){var w="",r=((1<>5]>>>(s%32))&r)}return w}function t(v){var s=((q)?"0123456789ABCDEF":"0123456789abcdef"),w="",r;for(r=0;r>2]>>((r%4)*8+4))&15)+s.charAt((v[r>>2]>>((r%4)*8))&15)}return w}return(c?g(h(d(u),u.length*m)):t(h(d(u),u.length*m)))};Ext.ux.CodeMirror=Ext.extend(Ext.BoxComponent,{lineWrapping:false,previousLine:false,readOnly:false,originalContent:false,documentDurty:false,mode:(this.parser||"xml"),theme:(this.theme==="undefined")?"default":this.theme,initComponent:function(){this.initialized=false;Ext.ux.CodeMirror.superclass.initComponent.apply(this,arguments);this.theme=(Ext.isDefined(this.theme))?this.theme:"default";switch(this.mode){case"html":case"htm":this.mode="text/html";break;case"css":this.mode="text/css";break;case"php":this.mode="application/x-httpd-php";break;case"xml":case"ent":this.mode={name:"xml",alignCDATA:true};break;case"bat":this.mode="text/x-clojure";break;case"README":this.mode="text/x-rst";break;default:this.mode={name:"xmlpure"};break}this.addEvents("initialize");this.addEvents("codemodified");this.addEvents("coderestored");this.addEvents("cursormove");this.addEvents("scroll");this.ownerCt.on("resize",function(f,e,d){this.fireEvent("resize",this,e,d)},this);this.on({resize:function(e,d,c){this.resize(d,c)},afterrender:function(){var c=this;c.codeEditor=new CodeMirror(Ext.get(c.id),{theme:c.theme,readOnly:c.readOnly,mode:c.mode,lineNumbers:true,matchBrackets:true,lineWrapping:c.lineWrapping,indentUnit:1,tabMode:"indent",value:"",onScroll:function(){c.fireEvent("scroll",c.el.child(".CodeMirror-scroll").dom.scrollTop)},onKeyEvent:function(g,d){if(d.ctrlKey&&d.keyCode==83){d.preventDefault();c.onSave()}var f=g.getCursor();c.fireEvent("cursormove",f.line,f.ch)},onCursorActivity:function(e){var d=e.getCursor();if(c.previousLine!==false){e.setLineClass(c.previousLine,null)}c.previousLine=e.setLineClass(d.line,"cm2-activeline");c.fireEvent("cursormove",d.line,d.ch)},onChange:function(d){c.manageCodeChange()}});c.initialized=true;c.fireEvent("initialize",true)}})},focus:function(){if(this.initialized){return this.codeEditor.focus()}return this.initialConfig.value},getCursor:function(){return this.codeEditor.getCursor()},getLine:function(c){return this.codeEditor.getLine(c)},getValue:function(){if(this.initialized){return this.codeEditor.getValue()}return this.initialConfig.value},insertLine:function(d,e){var c=this.codeEditor.getLine(d);this.codeEditor.setLine(d,c+"\n"+e)},manageCodeChange:function(){var c=this.originalContent,d=this.getValue();btnUndo=Ext.getCmp(this.id+"-btn-undo");if(c){if(c===d){if(this.documentDurty===true){this.fireEvent("coderestored");this.documentDurty=false}}else{if(btnUndo){btnUndo.enable()}if(this.documentDurty===false){this.fireEvent("codemodified");this.documentDurty=true}}}},onSave:function(){var c=Ext.getCmp(this.id+"-btn-save");if(!c.disabled){c.handler.call(c.scope||c,c)}},redo:function(c,d){this.codeEditor.redo();Ext.getCmp(this.id+"-btn-undo").enable();if(this.codeEditor.historySize().redo==0){Ext.getCmp(this.id+"-btn-redo").disable()}},resize:function(f,c){var e=this.el,d=e.child(".CodeMirror-scroll");d.setHeight(c-89)},removeLine:function(c){return this.codeEditor.removeLine(c)},reIndentAll:function(){var d=this.codeEditor.lineCount(),c;for(c=0;c','',"{cells}","
","");this.rowTpl.disableFormats=true}this.rowTpl.compile();if(!this.cellTpl){this.cellTpl=new Ext.Template('','
{value}
',"");this.cellTpl.disableFormats=true}this.cellTpl.compile()},calculate:function(e,o){var g={},m=o.config,h,d,k,f,c,l,p;for(h=0,l=m.length;h '+_("Loading..."));var e=document.createElement("iframe"),f=function(g){d.unmask()};e.id=this.id;e.name=this.id;e.src=this.url;e.frameBorder=0;this.el=d.appendChild(e);if(Ext.isIE){document.frames[this.url].name=this.id}e[Ext.isIE?"onreadystatechange":"onload"]=f.createDelegate(e)}});Ext.ux.FixedMultiSelectionModel=Ext.extend(Ext.tree.MultiSelectionModel,{normalClick:false,init:function(c){this.tree=c;c.getTreeEl().on("keydown",this.onKeyDown,this);c.on("dblclick",this.onDoubleClick,this);c.on("click",this.onNodeClick,this)},onDrag:function(){this.normalClick=false},onNodeClick:function(c,d){if(d.shiftKey){d.preventDefault()}if(!this.tree.dragZone||!this.tree.dragZone.isMultiSelect){this.onMouseDown(c,d);this.onMouseUp(c,d)}},onMouseDown:function(c,d){if(c.isSelected()){if(d.ctrlKey){this.unselect(c);this.normalClick=false;return}this.normalClick=!d.shiftKey}else{this.select(c,d,d.ctrlKey);this.normalClick=false}},onMouseUp:function(c,d){if(this.normalClick){this.select(c,d,d.ctrlKey);this.normalClick=false}},onDoubleClick:function(){this.normalClick=false},compareNodeOrder:document.compareDocumentPosition?function(d,c){return 3-(d.ui.elNode.compareDocumentPosition(c.ui.elNode)&6)}:(typeof document.documentElement.sourceIndex!=="undefined"?function(d,c){return d.ui.elNode.sourceIndex-c.ui.elNode.sourceIndex}:function(f,e){if(f==e){return 0}var d=document.createRange();d.selectNode(a.ui.elNode);d.collapse(true);var c=document.createRange();c.selectNode(b.ui.elNode);c.collapse(true);return d.compareBoundaryPoints(Range.START_TO_END,c)}),sortSelNodes:function(){if(this.selNodes.length>1){if(!this.selNodes[0].ui.elNode){return}this.selNodes.sort(this.compareNodeOrder)}},selectNode:function(d,c){if(!this.isSelected(d)){this.selNodes.push(d);this.selMap[d.id]=d;d.ui.onSelectedChange(true)}},select:function(d,h,m){if(d instanceof Array){for(var j=0;j0){this.lastSelNode=this.lastSelNode||this.selNodes[0];var k=this.compareNodeOrder(this.lastSelNode,d)>0;this.clearSelections(true);var o=true;var f=false;var l=this.lastSelNode;do{for(var g=l;g!=null;g=(k?g.previousSibling:g.nextSibling)){f=f||(k&&(g==d||g.contains(d)));if(g.isExpanded()){g.cascade(function(c){if(o!=f){this.selectNode(c)}o=(o&&c!=d);return true},this)}else{this.selectNode(g);o=(g!=d)}if(!o){break}}if(!o){break}while((l=l.parentNode)!=null){if(k){this.selectNode(l)}o=(o&&l!=d);if(k&&l.previousSibling){l=l.previousSibling;break}if(!k&&l.nextSibling){l=l.nextSibling;break}}if(!o){break}}while(l!=null);this.selectNode(d);this.sortSelNodes();this.fireEvent("selectionchange",this,this.selNodes,d);h.preventDefault();return d}else{if(m!==true){this.clearSelections(true)}}if(this.isSelected(d)){if(m===true){this.unselect(d);if(this.lastSelNode===d){this.lastSelNode=this.selNodes[0]}return d}this.lastSelNode=d;return d}this.selectNode(d);this.sortSelNodes();this.lastSelNode=d;this.fireEvent("selectionchange",this,this.selNodes,this.lastSelNode);return d},getUniqueSelectedNodes:function(){var d=[];for(var f=0;f=0;f--){if(this.selNodes[f].isAncestor(d)){Ext.ux.FixedMultiSelectionModel.superclass.unselect.call(this,this.selNodes[f])}}}return Ext.ux.FixedMultiSelectionModel.superclass.unselect.call(this,d)},selectPrevious:function(e){var c=this.selNodes[0];if(!c){return null}var f=c.previousSibling;if(f){if(!f.isExpanded()||f.childNodes.length<1){return this.select(f,null,e)}else{var d=f.lastChild;while(d&&d.isExpanded()&&d.childNodes.length>0){d=d.lastChild}return this.select(d,null,e)}}else{if(c.parentNode&&(this.tree.rootVisible||!c.parentNode.isRoot)){return this.select(c.parentNode,null,e)}}return null},selectNext:function(e){var d=this.selNodes[this.selNodes.length-1];if(!d){return null}if(d.firstChild&&d.isExpanded()){return this.select(d.firstChild,null,e)}else{if(d.nextSibling){return this.select(d.nextSibling,null,e)}else{if(d.parentNode){var c=null;d.parentNode.bubble(function(){if(this.nextSibling){c=this.getOwnerTree().selModel.select(this.nextSibling,null,e);return false}});return c}}}return null},onKeyDown:function(f){var d=this.selNode||this.lastSelNode;var g=this;if(!d){return}var c=f.getKey();switch(c){case f.DOWN:f.stopEvent();this.selectNext(f.shiftKey||f.ctrlKey);break;case f.UP:f.stopEvent();this.selectPrevious(f.shiftKey||f.ctrlKey);break;case f.RIGHT:f.preventDefault();if(d.hasChildNodes()){if(!d.isExpanded()){d.expand()}else{if(d.firstChild){this.select(d.firstChild,f,f.shiftKey||f.ctrlKey)}}}break;case f.LEFT:f.preventDefault();if(d.hasChildNodes()&&d.isExpanded()){d.collapse()}else{if(d.parentNode&&(this.tree.rootVisible||d.parentNode!=this.tree.getRootNode())){this.select(d.parentNode,f,f.shiftKey||f.ctrlKey)}}break}}});Ext.ux.MultiSelectTreeDragZone=Ext.extend(Ext.tree.TreeDragZone,{isMultiSelect:true,onBeforeDrag:function(d,f){if(d.nodes&&d.nodes.length>0){for(var g=0;g0){var w=Ext.query(h[k].ui.indentNode.nodeName+".x-tree-node-indent",v);for(var s=0,t=w.length;s=r&&k<(r+c)&&this.isValidDropPoint(g,"above",o,j,h)){return"above"}else{if(!f&&(m||k>=l-c&&k<=l)&&this.isValidDropPoint(g,"below",o,j,h)){return"below"}}}return m?false:"append"},onNodeOver:function(d,k,j,h){var m=this.getDropPoint(j,d,k,h);var f=d.node;if(!this.expandProcId&&m=="append"&&f.hasChildNodes()&&!d.node.isExpanded()){this.queueExpand(f)}else{if(m!="append"){this.cancelExpand()}}var g=this.dropNotAllowed;if(m){var c=d.ddel;var l;if(m=="above"){g=d.node.isFirst()?"x-tree-drop-ok-above":"x-tree-drop-ok-between";l="x-tree-drag-insert-above"}else{if(m=="below"){g=d.node.isLast()?"x-tree-drop-ok-below":"x-tree-drop-ok-between";l="x-tree-drag-insert-below"}else{g="x-tree-drop-ok-append";l="x-tree-drag-append"}}if(this.lastInsertClass!=l){Ext.fly(c).replaceClass(this.lastInsertClass,l);this.lastInsertClass=l}}return g},onNodeDrop:function(f,m,h,g){var l=this.getDropPoint(h,f,m,g);var j=f.node;j.ui.startDrop();if(l===false){j.ui.endDrop();return false}var k=g.node||(m.getTreeNode?m.getTreeNode(g,j,l,h):null);var d={tree:this.tree,target:j,data:g,point:l,source:m,rawEvent:h,dropNode:k,cancel:!k,dropStatus:false};var c=this.tree.fireEvent("beforenodedrop",d);if(c===false||d.cancel===true||!d.dropNode){j.ui.endDrop();return d.dropStatus}j=d.target;if(l=="append"&&!j.isExpanded()){j.expand(false,null,function(){this.completeDrop(d)}.createDelegate(this))}else{this.completeDrop(d)}return true},afterRepair:function(f){if(f&&Ext.enableFx){var e=f.nodes?f.nodes:[f.node];for(var g=0,d=e.length;g-1){this.pos++}Ext.ux.NotificationMgr.positions.push(this.pos);this.setSize(200,100);this.el.alignTo(document,"br-br",[-20,-20-((this.getSize().height+10)*this.pos)]);this.el.slideIn("b",{duration:1,callback:this.afterShow,scope:this})},animHide:function(){Ext.ux.NotificationMgr.positions.remove(this.pos);this.el.shadow.hide();this.el.ghost("b",{duration:1,remove:false,callback:function(){Ext.ux.NotificationMgr.positions.remove(this.pos);this.destroy()}.createDelegate(this)})},focus:Ext.emptyFn});Ext.ns("Ext.ux");Ext.ux.PanelCollapsedTitle=(function(){var c="x-panel-header-rotated";var e=!!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1");var d=function(){var k=((this.region=="east")||(this.region=="west"));var l="overflow: visible; padding: 0; border: none; background: none;";if(k&&e){this.collapsedHeader=this.ownerCt.layout[this.region].getCollapsedEl().createChild({tag:"div",style:"height: 100%; overflow: hidden;"});var j="http://www.w3.org/2000/svg";var h=document.createElementNS(j,"svg");this.collapsedHeader.dom.appendChild(h);h.setAttribute("width","100%");h.setAttribute("height","100%");var m=document.createElementNS(j,"text");m.setAttribute("x",6);m.setAttribute("y",1);m.setAttribute("transform","rotate(90 6 1)");m.setAttribute("class","x-panel-header "+c);h.appendChild(m);this.collapsedHeaderText=document.createTextNode(this.title);m.appendChild(this.collapsedHeaderText);var g=Ext.fly(m).getStyle("color");m.setAttribute("style",l+";fill: "+g+";")}else{var f="position: relative;";if(k){f+="white-space: nowrap; writing-mode: tb-rl; top: 1px; left: 3px;"}else{f+="top: 2px;";l+="padding-left: 4px; margin-right: 18px;"}this.collapsedHeader=this.ownerCt.layout[this.region].getCollapsedEl().createChild({tag:"div",style:l,cls:"x-panel-header "+c,html:''+this.title+""});this.collapsedHeaderText=this.collapsedHeader.first()}if(this.collapsedIconCls){this.setCollapsedIconClass(this.collapsedIconCls)}};this.init=function(g){if(g.collapsible){var f=((g.region=="east")||(g.region=="west"));g.setTitle=Ext.Panel.prototype.setTitle.createSequence(function(h){if(this.rendered&&this.collapsedHeaderText){if(this.collapsedHeaderText.dom){this.collapsedHeaderText.dom.innerHTML=h}else{if(this.collapsedHeaderText.replaceData){this.collapsedHeaderText.nodeValue=h}}}});g.setCollapsedIconClass=function(j){var h=this.collapsedIconCls;this.collapsedIconCls=j;if(this.rendered&&this.collapsedHeader){var l=this.collapsedHeader,k=l.child("img.x-panel-inline-icon");if(k){if(this.collapsedIconCls){Ext.fly(k).replaceClass(h,this.collapsedIconCls)}else{Ext.fly(k).remove()}}else{if(this.collapsedIconCls){Ext.DomHelper.insertBefore(l.dom.firstChild,{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-panel-inline-icon "+this.collapsedIconCls,style:f?"display: block; margin: 1px 2px;":"margin-top: 2px; margin-right: 4px"})}}}};g.on("render",function(){if(this.ownerCt.rendered&&this.ownerCt.layout.hasLayout){d.call(g)}else{this.ownerCt.on("afterlayout",d,g,{single:true})}},g)}};return this})();Ext.ux.SlidingTabPanel=Ext.extend(Ext.TabPanel,{initTab:function(d,c){Ext.ux.SlidingTabPanel.superclass.initTab.call(this,d,c);this.addEvents({startDrag:true,endDrag:true});var e=this.getTemplateArgs(d);if(!this.slidingTabsID){this.slidingTabsID=Ext.id()}new Ext.ux.DDSlidingTab(e,this.slidingTabsID,{tabpanel:this})}});Ext.ux.DDSlidingTab=Ext.extend(Ext.dd.DDProxy,{constructor:function(){Ext.ux.DDSlidingTab.superclass.constructor.apply(this,arguments);this.setYConstraint(0,0,0);this.tabpanel=this.config.tabpanel;this.slideDuration=this.tabpanel.slideDuration;if(!this.slideDuration){this.slideDuration=0.1}},handleMouseDown:function(f,d){if(this.primaryButtonOnly&&f.button!=0){return}if(this.isLocked()){return}this.DDM.refreshCache(this.groups);var c=new Ext.lib.Point(Ext.lib.Event.getPageX(f),Ext.lib.Event.getPageY(f));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(c,this)){}else{if(this.clickValidator(f)){this.setStartPosition();this.b4MouseDown(f);this.onMouseDown(f);this.DDM.handleMouseDown(f,this)}}},startDrag:function(c,k){this.tabpanel.fireEvent("startDrag",this.tabpanel,this.tabpanel.getActiveTab());Ext.dd.DDM.useCache=false;Ext.dd.DDM.mode=1;this.proxyWrapper=Ext.get(this.getDragEl());this.proxyWrapper.update();this.proxyWrapper.applyStyles("z-index:1001;border:0 none;");this.proxyWrapper.addClass("tab-proxy");this.stripWrap=this.proxyWrapper.insertHtml("afterBegin",'
',true);this.dragEl=this.stripWrap.insertHtml("afterBegin","
",true);this.tab=Ext.get(this.getEl());this.tab.applyStyles("visibility:hidden;");this.dragEl.insertHtml("afterBegin",this.tab.dom.innerHTML,false);this.dragEl.dom.className=this.tab.dom.className;var j=this.tabpanel.el.getWidth();var g=this.tabpanel.el.getX();var h=this.tab.getX();var d=this.tab.getWidth();var f=h-g;var e=g+j-h-d;this.resetConstraints();this.setXConstraint(f,e)},onDragOver:function(f,j){f.stopEvent();var g=Ext.get(j[0].id);var l=g.getWidth();var k=g.getX();var h=k+(l/2);var d=this.tab.getX();var m=this.proxyWrapper.getX();var c=this.proxyWrapper.getWidth();if(mh)){if(g.next()!=this.tab){g.applyStyles("visibility:hidden;");this.tab.insertAfter(g);this.targetProxy=this.createSliderProxy(k,g);if(!this.targetProxy.hasActiveFx()){this.animateSliderProxy(g,this.targetProxy,d)}}}if(m>k&&(m',true);e.stripWrapper=e.insertHtml("afterBegin",'
',true);e.dragEl=e.stripWrapper.insertHtml("afterBegin","
",true);e.dragEl.update(f.dom.innerHTML);e.dragEl.dom.className=f.dom.className;var c=parseInt(f.getTop(false));e.setTop(c);return e},onDragDrop:function(d,c){d.stopEvent()},endDrag:function(c){var d=this.tab.getX();this.proxyWrapper.applyStyles("visibility:visible;");this.proxyWrapper.shift({x:d,easing:"easeOut",duration:this.slideDuration,callback:function(){this.proxyWrapper.applyStyles("visibility:hidden;");this.tab.applyStyles("visibility:visible;");this.stripWrap.remove();this.dragEl.remove();if(!this.targetProxy){return}this.targetProxy.stripWrapper.remove();this.targetProxy.dragEl.remove()},scope:this});Ext.dd.DDM.useCache=true;this.reorderTab();this.tabpanel.fireEvent("endDrag",this.tabpanel,this.tabpanel.getActiveTab())},reorderTab:function(){var e=this.tabpanel.header.child("ul").dom.children,c=[],f=[];for(var d=0;d{0})"),text:String.format(_("Notes ({0})"),"-"),initComponent:function(){Ext.ux.UserNotes.superclass.initComponent.apply(this);Ext.apply(this,{iconCls:"iconUserNotes",id:this.fid+"-userNotes",menu:new Ext.menu.Menu({showSeparator:false,allowOtherMenus:true,plain:true,autoHeight:true,forceLayout:true,enableScrolling:false,items:[{xtype:"grid",loadMask:true,width:500,height:200,contextMenuFrom:false,contextMenuRowIndex:false,sm:new Ext.grid.RowSelectionModel({singleSelect:true}),winNotes:new Ext.Window({scope:this,title:_("Add a new note"),iconCls:"iconUserNotes",closeAction:"hide",width:600,height:300,layout:"form",hideLabel:true,modal:true,items:[{xtype:"htmleditor",hideLabel:true,enableLinks:false,anchor:"100%"}],listeners:{show:function(c){c.items.items[0].setValue("")}},buttons:[{text:_("Add"),handler:function(){var e=this.ownerCt.ownerCt.scope,f=this.ownerCt.ownerCt;e.menu.show(e.el);var d=this.ownerCt.ownerCt.items.items[0].getValue();var c=e.file;XHR({scope:this,params:{task:"addUserNote",file:c,note:d},success:function(){f.hide();e.menu.items.items[0].store.reload();PhDOE.notify("info",_("Note added"),_("The note was added successfully !"))},failure:function(){PhDOE.winForbidden()}})}},{text:_("Cancel"),handler:function(){var c=this.ownerCt.ownerCt.scope;c.menu.show(c.el);this.ownerCt.ownerCt.hide()}}]}),contextMenu:new Ext.menu.Menu({scope:this,listeners:{show:function(c){if(this.scope.menu.items.items[0].contextMenuFrom==="containercontextmenu"){this.items.items[2].disable()}else{var d=this.scope.menu.items.items[0];var e=d.store.getAt(d.contextMenuRowIndex).data.user;if(PhDOE.userLogin==e){this.items.items[2].enable()}else{this.items.items[2].disable()}}if(PhDOE.userLogin=="anonymous"){this.items.items[0].disable();this.items.items[2].disable()}}},items:[{text:_("Add a new note"),iconCls:"iconUserNotes",handler:function(){var c=this.ownerCt.scope.menu.items.items[0];c.winNotes.show()}},"-",{text:_("Delete this note"),iconCls:"iconDelete",handler:function(){var d=this.ownerCt.scope.menu.items.items[0],c=d.store.getAt(d.contextMenuRowIndex).data.id;XHR({scope:this,params:{task:"delUserNote",noteID:c},success:function(e){var f=Ext.util.JSON.decode(e.responseText);d.store.reload();if(f.result){PhDOE.notify("info",_("Note deleted"),_("The note was deleted successfully !"))}},failure:function(){PhDOE.winForbidden()}})}},"-",{text:_("Reload data"),iconCls:"iconRefresh",handler:function(){var c=this.ownerCt.scope.menu.items.items[0];c.store.reload()}}]}),store:new Ext.data.Store({autoLoad:true,proxy:new Ext.data.HttpProxy({url:"./do/getUserNotes"}),baseParams:{file:this.file},reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"user"},{name:"note"},{name:"date",type:"date",dateFormat:"Y-m-d H:i:s"}]}),sortInfo:{field:"date",direction:"DESC"},listeners:{scope:this,datachanged:function(d){var c=d.getCount();this.setText(String.format(this.originalTitle,c))}}}),listeners:{scope:this,rowclick:function(c){if(!c.contextMenu.hidden){c.contextMenu.hide()}},containercontextmenu:function(d,f){f.stopEvent();d.getSelectionModel().clearSelections();d.contextMenuFrom="containercontextmenu";d.contextMenu.showAt(f.getXY());this.menu.show(this.el);var c=this.menu.el.zindex+2000;d.contextMenu.el.setStyle("z-index",c)},rowcontextmenu:function(d,g,f){f.stopEvent();d.getSelectionModel().selectRow(g);d.contextMenuFrom="rowcontextmenu";d.contextMenuRowIndex=g;d.contextMenu.showAt(f.getXY());this.menu.show(this.el);var c=this.menu.el.zindex+2000;d.contextMenu.el.setStyle("z-index",c)}},colModel:new Ext.grid.ColumnModel({defaults:{sortable:true},columns:[{id:"user",header:_("By"),sortable:true,dataIndex:"user"},{header:_("Date"),dataIndex:"date",renderer:Ext.util.Format.dateRenderer(_("Y-m-d, H:i"))}]}),autoExpandColumn:"user",viewConfig:{forceFit:true,deferEmptyText:false,emptyText:'
'+_("No user notes")+"

"+_("Right click to add a new note")+"
",enableRowBody:true,getRowClass:function(c,e,d){d.body='

'+c.data.note+"

";return"x-grid3-row-expanded"}}}]})})}});Ext.reg("usernotes",Ext.ux.UserNotes);Ext.namespace("ui","ui.task");ui.task.ChangeFileOwner=function(c){Ext.apply(this,c);var d=Ext.MessageBox.wait(_("Saving data..."));XHR({scope:this,params:{task:"setFileOwner",fileIdDB:this.fileIdDB,newOwnerID:this.newOwnerID},success:function(e){var f=Ext.util.JSON.decode(e.responseText);ui.cmp.WorkTreeGrid.getInstance().getRootNode().reload(function(){ui.cmp.PatchesTreeGrid.getInstance().getRootNode().reload()});ui.cmp.PortletInfo.getInstance().store.reload();d.hide();if(Ext.isDefined(this.fromType)&&this.fromType==="tab"){Ext.getCmp("main-panel").remove(this.from.curTab)}this.from.close();PhDOE.notify("info",_("Owner changed"),_("The owner for this file have been changed successfully !"))},failure:function(e){var f=Ext.util.JSON.decode(e.responseText);d.hide();PhDOE.winForbidden(f.type);if(Ext.isDefined(this.fromType)&&this.fromType==="tab"){Ext.getCmp("main-panel").remove(this.from.curTab)}this.from.close()}})};Ext.namespace("ui","ui.task","ui.task._CheckBuildTask");ui.task._CheckBuildTask.display=function(){XHR({params:{task:"getLogFile",file:"project_"+PhDOE.project+"_log_check_build_"+PhDOE.user.lang},success:function(c){var d=Ext.util.JSON.decode(c.responseText);Ext.getBody().unmask();ui.task.PingTask.getInstance().delay(30000);if(Ext.getCmp("main-panel").findById("check_build_panel_"+PhDOE.user.lang)){Ext.getCmp("main-panel").remove("check_build_panel_"+PhDOE.user.lang)}Ext.getCmp("main-panel").add({xtype:"panel",id:"check_build_panel_"+PhDOE.user.lang,title:String.format(_("Check build result for {0}"),Ext.util.Format.uppercase(PhDOE.user.lang)),tabTip:String.format(_("Check build result for the documentation {0}"),Ext.util.Format.uppercase(PhDOE.user.lang)),closable:true,autoScroll:true,iconCls:"iconCheckBuild",html:'
'+d.mess+"
"});Ext.getCmp("main-panel").setActiveTab("check_build_panel_"+PhDOE.user.lang)}})};ui.task._CheckBuildTask.poll=new Ext.util.DelayedTask(function(){XHR({params:{task:"checkLockFile",lockFile:"project_"+PhDOE.project+"_lock_check_build_"+PhDOE.user.lang},success:function(){ui.task._CheckBuildTask.poll.delay(5000)},failure:function(c){var d=Ext.util.JSON.decode(c.responseText);if(d&&d.success===false){new ui.task._CheckBuildTask.display()}else{ui.task._CheckBuildTask.poll.delay(5000)}}})});ui.task.CheckBuildTask=function(){Ext.getBody().mask(' '+_("Please, wait until the build is checked..."));ui.task.PingTask.getInstance().cancel();XHR({params:{task:"checkBuild",xmlDetails:Ext.getCmp("option-xml-details").checked},success:function(){new ui.task._CheckBuildTask.display()},failure:function(c){var d=Ext.util.JSON.decode(c.responseText);if(d&&d.success===false){ui.task.PingTask.getInstance().delay(30000);Ext.getBody().unmask();PhDOE.winForbidden(d.type)}else{ui.task._CheckBuildTask.poll.delay(5000)}}})};Ext.namespace("ui","ui.task","ui.task._CheckEntitiesTask");ui.task._CheckEntitiesTask.display=function(){BtnViewResult=Ext.getCmp("btn-check-entities-view-last-result");Ext.getBody().unmask();ui.task.PingTask.getInstance().delay(30000);if(Ext.getCmp("main-panel").findById("tab-check-entities")){Ext.getCmp("main-panel").remove("tab-check-entities")}BtnViewResult.handler.call(BtnViewResult.scope||BtnViewResult,BtnViewResult)};ui.task._CheckEntitiesTask.poll=new Ext.util.DelayedTask(function(){XHR({params:{task:"checkLockFile",lockFile:"project_"+PhDOE.project+"_lock_check_entities"},success:function(){ui.task._CheckEntitiesTask.poll.delay(5000)},failure:function(c){var d=Ext.util.JSON.decode(c.responseText);if(d&&d.success===false){new ui.task._CheckEntitiesTask.display()}else{ui.task._CheckEntitiesTask.poll.delay(5000)}}})});ui.task.CheckEntitiesTask=function(){Ext.getBody().mask(' '+_("Please, wait until entities are checked..."));ui.task.PingTask.getInstance().cancel();XHR({params:{task:"checkEntities"},success:function(){new ui.task._CheckEntitiesTask.display()},failure:function(c){var d=Ext.util.JSON.decode(c.responseText);if(d&&d.success===false){ui.task.PingTask.getInstance().delay(30000);Ext.getBody().unmask();PhDOE.winForbidden()}else{ui.task._CheckEntitiesTask.poll.delay(5000)}}})};Ext.namespace("ui","ui.task");ui.task.CheckFileTask=function(c){Ext.apply(this,c);ui.task.PingTask.getInstance().cancel();Ext.getBody().mask(' '+_("Checking for error. Please, wait..."));XHR({scope:this,params:{task:"checkFileError",FilePath:this.fpath,FileName:this.fname,FileLang:this.lang,FileContent:Ext.getCmp(this.prefix+"-"+this.ftype+"-FILE-"+this.fid).getValue()},failure:function(){ui.task.PingTask.getInstance().delay(30000);Ext.getBody().unmask();Ext.MessageBox.alert(_("Error"),_("An error occured while checking this file for errors. Please, try again."))},success:function(d){ui.task.PingTask.getInstance().delay(30000);Ext.getBody().unmask();var e=Ext.util.JSON.decode(d.responseText);if(e.error&&e.error_first!=="-No error-"){Ext.getCmp("main-panel").add({id:"FE-help-"+this.fid,title:"Error in "+this.fname,iconCls:"iconFilesError",closable:true,autoScroll:true,autoLoad:"./error?dir="+this.fpath+"&file="+this.fname});Ext.getCmp("main-panel").setActiveTab("FE-help-"+this.fid)}else{Ext.MessageBox.show({title:_("Check for errors"),msg:_("There is no error."),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.INFO})}new ui.task.SaveFileTask({prefix:this.prefix,ftype:this.ftype,fid:this.fid,fpath:this.fpath,fname:this.fname,lang:this.lang,storeRecord:this.storeRecord});if(this.prefix==="FE"){Ext.getCmp("FE-error-desc-"+this.fid).body.updateManager.refresh()}ui.cmp.ErrorFileGrid.getInstance().store.reload()}})};Ext.namespace("ui","ui.task");ui.task.CheckXml=function(d){Ext.apply(this,d);var c=this.prefix+"-"+this.ftype,e=Ext.MessageBox.wait(_("XML check. Please, wait..."));XHR({scope:this,params:{task:"checkXml",fileContent:Ext.getCmp(this.idPrefix+"-FILE-"+this.fid).getValue()},success:function(f){var g=Ext.util.JSON.decode(f.responseText);e.hide();if(g.errors!=="no_error"){new ui.cmp.CheckXmlWin({errors:g.errors})}else{PhDOE.notify("info",_("XML check"),_("There is no error."))}},failure:function(f){var g=Ext.util.JSON.decode(f.responseText);e.hide()}})};Ext.namespace("ui","ui.task");ui.task.ClearLocalChangeTask=function(d){Ext.apply(this,d);var c=this.ftype,e=this.fpath,f=this.fname;goClear=function(){Ext.getBody().mask(' '+_("Please, wait..."));var g=["FNT","FNU","FE","FNR","FNIEN","AF"];for(var h=0;hYou need confirm."),function(g){if(g==="yes"){goClear()}},this)}};Ext.namespace("ui","ui.task");ui.task.DeletePatchTask=function(c){Ext.apply(this,c);Ext.getBody().mask(' '+_("Please, wait..."));XHR({scope:this,params:{task:"deletePatch",patchID:this.patchID},success:function(){Ext.getBody().unmask();ui.cmp.PatchesTreeGrid.getInstance().deletePatch(this.patchID);PhDOE.notify("info",_("Patch deleted"),_("The patch have been deleted !"))},failure:function(d){var e=Ext.util.JSON.decode(d.responseText);Ext.getBody().unmask();if(e.err){PhDOE.winForbidden(e.err)}else{PhDOE.winForbidden()}}})};Ext.namespace("ui","ui.task");ui.task.GetFileInfoByXmlID=function(c){Ext.apply(this,c);XHR({scope:this,params:{task:"getFileInfoByXmlID",xmlID:this.xmlID},success:function(d){var e=Ext.util.JSON.decode(d.responseText);ui.cmp.RepositoryTree.getInstance().openFile("byPath",e.lang+e.path,e.name)}})};Ext.namespace("ui","ui.task");ui.task.GetFileTask=function(d){Ext.apply(this,d);var c=this.prefix+"-"+this.ftype,f=(this.original)?true:false,e=(this.ftype==="GGTRANS")?true:false,g=(this.ftype==="NEW")?this.skeleton:false;Ext.get(c+"-PANEL-"+this.fid).mask(' '+_("Loading..."));XHR({scope:this,params:{task:"getFile",FilePath:this.fpath,FileName:this.fname,readOriginal:f,ggTranslate:e,skeleton:g},success:function(h){var k=Ext.util.JSON.decode(h.responseText),y="http://"+window.location.host+":"+window.location.port+window.location.pathname+"?perm=/"+this.fpath.split("/")[0]+"/"+k.xmlid.split("|")[0]+".php&project="+PhDOE.project,s='permlink ',j=Ext.getCmp(c+"-PANEL-"+this.fid),w=Ext.get(c+"-PANEL-"+this.fid),v=Ext.getCmp(c+"-FILE-"+this.fid),q=(k.fileModified)?Ext.util.JSON.decode(k.fileModified):false,t,u;w.unmask();if(this.prefix==="PP"||this.ftype==="TRANS"||this.prefix==="FNIEN"){j.permlink=""}else{if(this.ftype==="GGTRANS"){j.setTitle(j.originTitle);j.setIconClass("iconGoogle")}else{j.permlink=(k.xmlid!=="NULL")?s:"";j.setTitle(j.permlink+j.originTitle)}}v.setValue(k.content);if(this.ftype==="GGTRANS"){v.reIndentAll()}if(k.warn_tab&&!this.freadOnly){Ext.MessageBox.show({title:_("Warning"),msg:String.format(_("The file {0} contains some tab characters.
The editor have replace it with space characters."),this.fpath+this.fname),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.WARNING});v.manageCodeChange()}if(k.warn_encoding&&!this.freadOnly){Ext.MessageBox.show({title:_("Warning"),msg:String.format(_("The editor have modified automatically the file {0} into UTF-8 encoding."),this.fpath+this.fname),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.WARNING});v.setLine(1,'');Ext.getCmp(c+"-FILE-"+this.fid+"-btn-save").enable()}if(this.prefix==="FNT"||this.prefix==="FNIEN"){t="fileModified"}if(this.prefix==="FNU"){t=(this.ftype==="LANG")?"fileModifiedLang":"fileModifiedEN"}if(this.prefix==="FE"){t=(this.ftype==="LANG")?"fileModifiedLang":"fileModifiedEN"}if(this.prefix==="FNR"){t=(this.ftype==="LANG")?"fileModifiedLang":"fileModifiedEN"}if(k.fileModified&&this.prefix!=="AF"&&!f){this.storeRecord.set(t,k.fileModified);this.storeRecord.commit()}if(this.prefix==="AF"){this.storeRecord.data={};this.storeRecord.data.fileModified=false;if(k.fileModified){this.storeRecord.data.fileModified=k.fileModified}}if(k.fileModified&&!f&&((!PhDOE.user.isAnonymous&&q.user!==PhDOE.user.login)||(PhDOE.user.isAnonymous&&q.anonymousIdent!==PhDOE.user.anonymousIdent))){if(q.isAnonymous&&!PhDOE.user.isAnonymous&&q.fromModule==="workInProgress"){Ext.MessageBox.show({title:_("Information"),msg:String.format(_("File modified by {0} (anonymous user) but you are an authenticated user, so you can modify it."),q.user),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.INFO})}else{if(q.isAnonymous&&!PhDOE.user.isAnonymous&&q.fromModule==="PatchesForReview"){new ui.cmp.AnonymousPatchWin({fidDB:q.fidDB,fid:this.fid,prefix:this.prefix,ftype:q.ftype,fpath:this.fpath,fname:this.fname,curTab:Ext.getCmp(this.prefix+"-"+this.fid)})}else{if(!this.freadOnly){Ext.getCmp(c+"-FILE-"+this.fid+"-grp-save").disable();Ext.getCmp(c+"-FILE-"+this.fid+"-grp-undoRedo").disable();Ext.getCmp(c+"-FILE-"+this.fid+"-grp-tools").disable()}u=Ext.MessageBox.show({title:_("Information"),msg:String.format(_("File modified by {0}."),q.user),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.INFO});u.getDialog().mask.resize(w.getSize().width,w.getSize().height);u.getDialog().mask.alignTo(w.dom,"tl")}}}else{if(c=="FNT-TRANS"){var x=new RegExp("");v.insertLine(1,"");v.insertLine(2,"");if(!Ext.isEmpty(v.getLine(4))){v.insertLine(3,"")}v.manageCodeChange()}}}},callback:function(){var h=Ext.getCmp(this.prefix+"-"+this.fid);if(this.prefix==="FNT"){if(this.ftype==="TRANS"){h.panTRANSLoaded=true}if(this.ftype==="GGTRANS"||this.ftype==="EN"){h.panTRANSSecondLoaded=true}}if(this.prefix==="FNU"){if(this.ftype==="LANG"){h.panLANGLoaded=true}if(this.ftype==="EN"){h.panENLoaded=true}}if(this.prefix==="FE"){if(this.ftype==="LANG"){h.panLANGLoaded=true}if(this.ftype==="EN"){h.panENLoaded=true}}if(this.prefix==="FNR"){if(this.ftype==="LANG"){h.panLANGLoaded=true}if(this.ftype==="EN"){h.panENLoaded=true}}if(this.prefix==="FNIEN"){h.panLANGLoaded=true}if(this.prefix==="AF"){h.panLoaded=true}Ext.getCmp("main-panel").fireEvent("tabLoaded",this.prefix,this.fid)}})};Ext.namespace("ui","ui.task");ui.task.GetGGTranslation=function(c){Ext.apply(this,c);Ext.get("GGTranslate-result").dom.innerHTML="";Ext.getCmp("GGTranslate-btn").disable();Ext.getCmp("GGTranslate-btn").setText(_("Please, wait..."));XHR({scope:this,params:{task:"getGGTranslation",str:this.str},success:function(d){var e=Ext.util.JSON.decode(d.responseText);Ext.get("GGTranslate-result").dom.innerHTML=Ext.util.Format.htmlEncode(e.translation);Ext.getCmp("GGTranslate-btn").setText(_("Translate !"));Ext.getCmp("GGTranslate-btn").enable()}})};Ext.namespace("ui","ui.task");ui.task.LoadConfigTask=function(c){Ext.apply(this,c);XHR({params:{task:"getConf"},success:function(d){var e=Ext.decode(d.responseText);PhDOE.user.login=e.mess.userLogin;PhDOE.user.userID=e.mess.userID;PhDOE.user.lang=e.mess.userLang;PhDOE.user.authService=e.mess.authService;PhDOE.user.authServiceID=e.mess.authServiceID;PhDOE.user.isAnonymous=e.mess.userIsAnonymous;PhDOE.user.isGlobalAdmin=e.mess.userIsGlobalAdmin;PhDOE.user.isLangAdmin=e.mess.userIsLangAdmin;PhDOE.user.conf=e.mess.userConf;PhDOE.user.anonymousIdent=e.mess.userAnonymousIdent;PhDOE.project=e.mess.project;PhDOE.app.conf=e.mess.appConf;if(e.mess.topicInfo&&e.mess.topicInfo.lang){PhDOE.topic.lang.author=e.mess.topicInfo.lang.author;PhDOE.topic.lang.content=e.mess.topicInfo.lang.content;PhDOE.topic.lang.topicDate=Date.parseDate(e.mess.topicInfo.lang.topicDate,"Y-m-d H:i:s");PhDOE.topic.lang.topicDate=PhDOE.topic.lang.topicDate.format(_("Y-m-d, H:i"))}if(e.mess.topicInfo&&e.mess.topicInfo.global){PhDOE.topic.global.author=e.mess.topicInfo.global.author;PhDOE.topic.global.content=e.mess.topicInfo.global.content;PhDOE.topic.global.topicDate=Date.parseDate(e.mess.topicInfo.global.topicDate,"Y-m-d H:i:s");PhDOE.topic.global.topicDate=PhDOE.topic.global.topicDate.format(_("Y-m-d, H:i"))}Ext.get("appTheme").dom.href=PhDOE.user.conf.main.theme;PhDOE.drawInterface()}})};Ext.namespace("ui","ui.task");ui.task.MarkDeleteTask=function(c){Ext.apply(this,c);Ext.MessageBox.confirm(_("Confirm"),_("This action will mark this file as need deleted.

You need commit this change to take it effect.

Please, confirm this action."),function(d){if(d==="yes"){Ext.getBody().mask(' '+_("Please, wait..."));XHR({scope:this,params:{task:"markAsNeedDelete",FilePath:PhDOE.user.lang+this.fpath,FileName:this.fname},success:function(e){var f=Ext.util.JSON.decode(e.responseText);Ext.getBody().unmask();ui.cmp.WorkTreeGrid.getInstance().addRecord(f.id,PhDOE.user.lang+this.fpath,this.fname,"delete");this.storeRecord.set("fileModified",'{"user":"'+PhDOE.user.login+'", "anonymousIdent":"'+PhDOE.user.anonymousIdent+'"}')}})}},this)};Ext.namespace("ui","ui.task");ui.task.MoveToPatch=function(c){Ext.apply(this,c);var d=[];Ext.each(this.nodesToAdd,function(e){d.push(e.attributes.idDB)});Ext.getBody().mask(' '+_("Please, wait..."));XHR({scope:this,params:{task:"moveToPatch",patchID:this.patchID,filesID:d.join(",")},success:function(){Ext.getBody().unmask();ui.cmp.PatchesTreeGrid.getInstance().addToPatch(this.patchID,this.patchName,this.nodesToAdd,this.patchDescription,this.patchEmail);if(this.nodesToAdd){Ext.each(this.nodesToAdd,function(e){ui.cmp.WorkTreeGrid.getInstance().delRecord(e.attributes.idDB)})}},failure:function(e){var f=Ext.util.JSON.decode(e.responseText);Ext.getBody().unmask();Ext.MessageBox.alert("Error",f.err)}})};Ext.namespace("ui","ui.task");ui.task.MoveToWork=function(c){Ext.apply(this,c);var d=[];Ext.each(this.nodesToAdd,function(e){d.push(e.attributes.idDB)});Ext.getBody().mask(' '+_("Please, wait..."));XHR({scope:this,params:{task:"moveToWork",filesID:d.join(",")},success:function(){Ext.getBody().unmask();ui.cmp.WorkTreeGrid.getInstance().addToWork(this.nodesToAdd);if(this.nodesToAdd){Ext.each(this.nodesToAdd,function(e){ui.cmp.PatchesTreeGrid.getInstance().delRecord(e.attributes.idDB)})}},failure:function(e){var f=Ext.util.JSON.decode(e.responseText);Ext.getBody().unmask();Ext.MessageBox.alert("Error",f.err)}})};Ext.namespace("ui","ui.task","ui.task._PingTask");ui.task.PingTask=function(){this.task=new Ext.util.DelayedTask(function(){XHR({scope:this,params:{task:"ping"},success:function(d){var e=Ext.util.JSON.decode(d.responseText),c;if(e.ping!=="pong"){this.onPingFailed()}else{if(PhDOE.user.lang!=="en"){c=false;if(ui.cmp.PendingTranslateGrid.getInstance().store.getTotalCount()!==e.totalData.NbPendingTranslate){ui.cmp.PendingTranslateGrid.getInstance().store.reload();c=true}if(ui.cmp.StaleFileGrid.getInstance().store.getTotalCount()!==e.totalData.NbPendingUpdate){ui.cmp.StaleFileGrid.getInstance().store.reload();c=true}if(ui.cmp.ErrorFileGrid.getInstance().store.getTotalCount()!==e.totalData.NbFilesError){ui.cmp.ErrorFileGrid.getInstance().store.reload();c=true}if(ui.cmp.PendingReviewGrid.getInstance().store.getTotalCount()!==e.totalData.NbPendingReview){ui.cmp.PendingReviewGrid.getInstance().store.reload();c=true}if(ui.cmp.NotInENGrid.getInstance().store.getTotalCount()!==e.totalData.NbNotInEn){ui.cmp.NotInENGrid.getInstance().store.reload();c=true}if(c){ui.cmp.PortletSummary.getInstance().store.reload()}}if(e.totalData.lastInfoDate!==PhDOE.lastInfoDate){ui.cmp.PortletInfo.getInstance().store.reload()}if(e.totalData.topicInfo){e.totalData.topicInfo.topicDate=Date.parseDate(e.totalData.topicInfo.topicDate,"Y-m-d H:i:s");e.totalData.topicInfo.topicDate=e.totalData.topicInfo.topicDate.format(_("Y-m-d, H:i"));if(e.totalData.topicInfo.topicDate!=PhDOE.topic.topicDate){PhDOE.topic.author=e.totalData.topicInfo.author;PhDOE.topic.content=e.totalData.topicInfo.content;PhDOE.topic.topicDate=e.totalData.topicInfo.topicDate;PhDOE.setTopic()}}}},failure:function(){this.onPingFailed()}});this.task.delay(30000)},this)};ui.task.PingTask.prototype.delay=function(d,f,e,c){this.task.delay(d,f,e,c)};ui.task.PingTask.prototype.cancel=function(){this.task.cancel()};ui.task.PingTask.prototype.onPingFailed=function(){this.cancel();var d=new Ext.ux.Notification({iconCls:"iconError",title:_("Connection lost"),html:String.format(_("Retrying in {0} second(s)."),"30"),autoDestroy:false});d.show(document);this.delay(30000);var e=29;var c=new Ext.util.DelayedTask(function(){if(e>0){d.setMessage(String.format(_("Retrying in {0} second(s)."),e));e-=1;c.delay(1000)}else{if(e==0){d.animHide()}}});c.delay(1000)};ui.task._PingTask.instance=null;ui.task.PingTask.getInstance=function(){if(!ui.task._PingTask.instance){ui.task._PingTask.instance=new ui.task.PingTask()}return ui.task._PingTask.instance};Ext.namespace("ui","ui.task");ui.task.SaveFileTask=function(d){Ext.apply(this,d);var c=this.prefix+"-"+this.ftype,e=Ext.MessageBox.wait(_("Saving data...")),f=Ext.getCmp(this.prefix+"-"+this.ftype+"-FILE-"+this.fid).getValue();XHR({scope:this,params:{task:"saveFile",filePath:this.fpath,fileName:this.fname,fileLang:this.lang,fileContent:f},success:function(h){var j=Ext.util.JSON.decode(h.responseText);if(this.prefix==="FNU"){if(this.ftype==="EN"){this.storeRecord.set("en_revision",j.revision);this.storeRecord.set("fileModifiedEN",'{"user":"'+PhDOE.user.login+'", "anonymousIdent":"'+PhDOE.user.anonymousIdent+'"}')}else{this.storeRecord.set("revision",j.en_revision);this.storeRecord.set("fileModifiedLang",'{"user":"'+PhDOE.user.login+'", "anonymousIdent":"'+PhDOE.user.anonymousIdent+'"}');this.storeRecord.set("maintainer",j.maintainer)}this.storeRecord.commit()}if(this.prefix==="FE"){if(this.ftype==="EN"){this.storeRecord.set("fileModifiedEN",'{"user":"'+PhDOE.user.login+'", "anonymousIdent":"'+PhDOE.user.anonymousIdent+'"}');this.storeRecord.commit()}else{this.storeRecord.set("maintainer",j.maintainer);this.storeRecord.set("fileModifiedLang",'{"user":"'+PhDOE.user.login+'", "anonymousIdent":"'+PhDOE.user.anonymousIdent+'"}');this.storeRecord.commit()}}if(this.prefix==="FNR"){if(this.ftype==="EN"){this.storeRecord.set("reviewed",j.reviewed);this.storeRecord.set("fileModifiedEN",'{"user":"'+PhDOE.user.login+'", "anonymousIdent":"'+PhDOE.user.anonymousIdent+'"}');this.storeRecord.commit()}else{this.storeRecord.set("reviewed",j.reviewed);this.storeRecord.set("maintainer",j.reviewed_maintainer);this.storeRecord.set("fileModifiedLang",'{"user":"'+PhDOE.user.login+'", "anonymousIdent":"'+PhDOE.user.anonymousIdent+'"}');this.storeRecord.commit()}}if(this.prefix==="AF"){this.storeRecord.getUI().addClass("fileModifiedByMe")}Ext.getCmp(this.prefix+"-"+this.ftype+"-FILE-"+this.fid).setOriginalContent(f);ui.cmp.WorkTreeGrid.getInstance().delRecord(j.id);ui.cmp.PatchesTreeGrid.getInstance().delRecord(j.id);ui.cmp.WorkTreeGrid.getInstance().addRecord(j.id,this.lang+this.fpath,this.fname,"update");Ext.getCmp(c+"-FILE-"+this.fid+"-btn-save").disable();Ext.getCmp(c+"-FILE-"+this.fid).isModified=false;Ext.getCmp(c+"-PANEL-"+this.fid).setTitle(Ext.getCmp(c+"-PANEL-"+this.fid).permlink+Ext.getCmp(c+"-PANEL-"+this.fid).originTitle);var g;if(this.lang==="en"){g=Ext.getCmp(this.prefix+"-LANG-FILE-"+this.fid)}else{g=Ext.getCmp(this.prefix+"-EN-FILE-"+this.fid)}if(this.ftype==="ALL"||!g.isModified){Ext.getCmp(this.prefix+"-"+this.fid).setTitle(Ext.getCmp(this.prefix+"-"+this.fid).originTitle)}e.hide();PhDOE.notify("info",_("Document saved"),String.format(_("Document

{0}

was saved successfully !"),this.lang+this.fpath+this.fname))},failure:function(g){var h=Ext.util.JSON.decode(g.responseText);e.hide();if(h.XmlError&&h.XmlError!="no_error"){Ext.MessageBox.alert(_("XML Errors"),_("There is somes XML's errors.

You must fix it before saving this file.

Valid this window to show this errors."),function(){new ui.cmp.CheckXmlWin({errors:h.XmlError})})}if(h.type){PhDOE.winForbidden(h.type)}}})};Ext.namespace("ui","ui.task");ui.task.SaveTransFileTask=function(d){Ext.apply(this,d);var c=this.prefix+"-"+this.ftype,e=Ext.MessageBox.wait(_("Saving data...")),f=Ext.getCmp(this.prefix+"-"+this.ftype+"-FILE-"+this.fid).getValue();XHR({scope:this,params:{task:"saveFile",type:"trans",filePath:this.fpath,fileName:this.fname,fileLang:this.lang,fileContent:f},success:function(g){var h=Ext.util.JSON.decode(g.responseText);if(this.ftype!="NEW"){this.storeRecord.set("fileModified",'{"user":"'+PhDOE.user.login+'", "anonymousIdent":"'+PhDOE.user.anonymousIdent+'"}');this.storeRecord.commit()}else{this.storeRecord.data.node.reload()}Ext.getCmp(this.prefix+"-"+this.ftype+"-FILE-"+this.fid).setOriginalContent(f);ui.cmp.WorkTreeGrid.getInstance().addRecord(h.id,this.lang+this.fpath,this.fname,"new");Ext.getCmp(c+"-FILE-"+this.fid+"-btn-save").disable();Ext.getCmp(c+"-FILE-"+this.fid).isModified=false;Ext.getCmp(c+"-PANEL-"+this.fid).setTitle(Ext.getCmp(c+"-PANEL-"+this.fid).originTitle);Ext.getCmp(this.prefix+"-"+this.fid).setTitle(Ext.getCmp(this.prefix+"-"+this.fid).originTitle);e.hide();PhDOE.notify("info",_("Document saved"),String.format(_("Document

{0}

was saved successfully !"),this.lang+this.fpath+this.fname))},failure:function(g){var h=Ext.util.JSON.decode(g.responseText);e.hide();if(h.XmlError&&h.XmlError!="no_error"){Ext.MessageBox.alert(_("XML Errors"),_("There is somes XML's errors.

You must fix it before saving this file.

Valid this window to show this errors."),function(){new ui.cmp.CheckXmlWin({errors:h.XmlError})})}if(h.type){PhDOE.winForbidden(h.type)}}})};Ext.namespace("ui","ui.task");ui.task.SetFileProgressTask=function(c){Ext.apply(this,c);XHR({scope:this,params:{task:"SetFileProgress",idDB:this.idDB,progress:this.progress},failure:function(d){var e=Ext.util.JSON.decode(d.responseText),f;if(e.err){if(e.err=="file_dont_exist_in_workInProgress"){f=_("The file you want to change the estimated progress don't exist into the database.")}if(e.err=="file_isnt_owned_by_current_user"){f=_("The file you want to change the estimated progress isn't own by you.
You only can modify this information for yours files.")}}if(f){PhDOE.notify("error",_("Error"),f)}}})};Ext.namespace("ui","ui.task");ui.task.setTopicTask=function(c){Ext.apply(this,c);var d=this.isLang;XHR({scope:this,params:{task:"setTopic",content:this.content,lang:d?"lang":"global"},success:function(f){var g=Ext.util.JSON.decode(f.responseText),e=PhDOE.topic[d?"lang":"global"];e.author=g.author;e.content=g.content;e.topicDate=Date.parseDate(g.topicDate,"Y-m-d H:i:s");e.topicDate=e.topicDate.format(_("Y-m-d, H:i"));PhDOE.setTopic(d)}})};Ext.namespace("ui","ui.task","ui.task._SystemUpdateTask");ui.task._SystemUpdateTask.refresh_ui=function(){Ext.get("wizard-step-3").replaceClass("wizard-step-before","wizard-step-working");PhDOE.reloadAllStore();Ext.get("wizard-step-3").replaceClass("wizard-step-working","wizard-step-done");Ext.getCmp("btn-start-refresh").setIconClass("iconFinishRefresh");Ext.getCmp("btn-start-refresh").setText(_("Finish !"));Ext.getCmp("btn-start-refresh").setHandler(function(){Ext.getCmp("sys-update-win").close()});Ext.getCmp("btn-start-refresh").enable();ui.task.PingTask.getInstance().delay(30000);Ext.getCmp("sys-update-win").tools.close.setVisible(true)};ui.task._SystemUpdateTask.poll_apply_tool=new Ext.util.DelayedTask(function(){XHR({params:{task:"checkLockFile",lockFile:"project_"+PhDOE.project+"_lock_apply_tools"},success:function(){ui.task._SystemUpdateTask.poll_apply_tool.delay(5000)},failure:function(c){var d=Ext.util.JSON.decode(c.responseText);if(d&&d.success===false){Ext.get("wizard-step-2").replaceClass("wizard-step-working","wizard-step-done");new ui.task._SystemUpdateTask.refresh_ui()}else{ui.task._SystemUpdateTask.poll_apply_tool.delay(5000)}}})});ui.task._SystemUpdateTask.apply_tool=function(){Ext.get("wizard-step-2").replaceClass("wizard-step-before","wizard-step-working");XHR({params:{task:"applyTools"},success:function(){Ext.get("wizard-step-2").replaceClass("wizard-step-working","wizard-step-done");new ui.task._SystemUpdateTask.refresh_ui()},failure:function(){ui.task._SystemUpdateTask.poll_apply_tool.delay(5000)}})};ui.task._SystemUpdateTask.vcs_poll=new Ext.util.DelayedTask(function(){XHR({params:{task:"checkLockFile",lockFile:"project_"+PhDOE.project+"_lock_update_repository"},success:function(){ui.task._SystemUpdateTask.vcs_poll.delay(5000)},failure:function(c){var d=Ext.util.JSON.decode(c.responseText);if(d&&d.success===false){Ext.get("wizard-step-1").replaceClass("wizard-step-working","wizard-step-done");Ext.get("wizard-step-1.1").replaceClass("wizard-show","wizard-wait");new ui.task._SystemUpdateTask.apply_tool()}else{ui.task._SystemUpdateTask.vcs_poll.delay(5000)}}})});ui.task.SystemUpdateTask=function(){ui.task.PingTask.getInstance().cancel();Ext.get("wizard-step-1").replaceClass("wizard-step-before","wizard-step-working");Ext.get("wizard-step-1.1").replaceClass("wizard-wait","wizard-show");XHR({params:{task:"updateRepository"},success:function(){Ext.get("wizard-step-1").replaceClass("wizard-step-working","wizard-step-done");Ext.get("wizard-step-1.1").replaceClass("wizard-show","wizard-wait");new ui.task._SystemUpdateTask.apply_tool()},failure:function(c){var d=Ext.util.JSON.decode(c.responseText);if(d&&d.success===false){Ext.getCmp("sys-update-win").close();PhDOE.winForbidden(d.type)}else{ui.task._SystemUpdateTask.vcs_poll.delay(5000)}}})};Ext.namespace("ui","ui.task");ui.task.UpdateConfTask=function(c){Ext.apply(this,c);XHR({scope:this,params:{task:"confUpdate",module:this.module,itemName:this.itemName,value:this.value},success:function(){PhDOE.user.conf[this.module][this.itemName]=this.value;if(this.module=="newFile"&&this.itemName=="nbDisplay"){ui.cmp.PendingTranslateGrid.getInstance().store.reload()}if(this.module=="needUpdate"&&this.itemName=="nbDisplay"){ui.cmp.StaleFileGrid.getInstance().store.reload()}if(this.module=="error"&&(this.itemName=="skipNbLiteralTag"||this.itemName=="nbDisplay")){ui.cmp.ErrorFileGrid.getInstance().store.reload()}if(this.module=="reviewed"&&this.itemName=="nbDisplay"){ui.cmp.PendingReviewGrid.getInstance().store.reload()}if(this.module=="main"&&this.itemName=="displayENWork"){ui.cmp.WorkTreeGrid.getInstance().getRootNode().reload(function(){ui.cmp.PatchesTreeGrid.getInstance().getRootNode().reload()})}if(this.notify!==false){PhDOE.notify("info",_("Option saved"),_("Option has been saved successfully !"))}}})};Ext.namespace("ui","ui.task","ui.task._UpdateSingleFolderTask");ui.task._UpdateSingleFolderTask.getUpdateFolderResponse=function(c){XHR({params:{task:"getUpdateFolderResponse"},success:function(d){var e=Ext.util.JSON.decode(d.responseText);ui.task._UpdateSingleFolderTask.afterUpdate(e,c)}})};ui.task._UpdateSingleFolderTask.poll=new Ext.util.DelayedTask(function(){var f=arguments[0],d=f.attributes.id.split("/"),c,e=new Array();d.shift();c=d[0];e.push(f);XHR({params:{task:"checkLockFile",lockFile:"project_"+PhDOE.project+"_"+c+"_lock_update_folder"},success:function(){ui.task._UpdateSingleFolderTask.poll.delay(5000,null,this,e)},failure:function(g){var h=Ext.util.JSON.decode(g.responseText);if(h&&h.success===false){new ui.task._UpdateSingleFolderTask.getUpdateFolderResponse(f)}else{ui.task._UpdateSingleFolderTask.poll.delay(5000,null,this,e)}}})});ui.task._UpdateSingleFolderTask.afterUpdate=function(e,d){Ext.getBody().unmask();ui.task.PingTask.getInstance().delay(30000);var c=Ext.util.JSON.decode(e.result);d.reload(function(){Ext.iterate(c.newFiles,function(g,f){d.findChild("text",g).getUI().addClass("treeFileUpdated")})},this);PhDOE.reloadAllStore()};ui.task._UpdateSingleFolderTask.update=function(d){var c=new Array();c.push(d);Ext.getBody().mask(' '+_("Please, wait until update this folder..."));ui.task.PingTask.getInstance().cancel();XHR({params:{task:"updateFolder",path:d.id},success:function(e){var f=Ext.util.JSON.decode(e.responseText);ui.task._UpdateSingleFolderTask.afterUpdate(f,d)},failure:function(e){var f=Ext.util.JSON.decode(e.responseText);if(f&&f.success===false){ui.task.PingTask.getInstance().delay(30000);Ext.getBody().unmask();PhDOE.winForbidden()}else{ui.task._UpdateSingleFolderTask.poll.delay(5000,null,this,c)}}})};ui.task.UpdateSingleFolderTask=function(c){if(PhDOE.user.isAnonymous){Ext.getCmp("winVCSCommit").close();PhDOE.winForbidden();return}ui.task._UpdateSingleFolderTask.update(c)};Ext.namespace("ui","ui.task","ui.task._VCSCommitTask");ui.task._VCSCommitTask.getCommitResponse=function(){XHR({params:{task:"getCommitResponse"},success:function(c){var d=Ext.util.JSON.decode(c.responseText);ui.task._VCSCommitTask.afterCommit(d.mess)}})};ui.task._VCSCommitTask.poll=new Ext.util.DelayedTask(function(){XHR({params:{task:"checkLockFile",lockFile:"project_"+PhDOE.project+"_lock_"+PhDOE.user.login+"_commit"},success:function(){ui.task._VCSCommitTask.poll.delay(5000)},failure:function(c){var d=Ext.util.JSON.decode(c.responseText);if(d&&d.success===false){new ui.task._VCSCommitTask.getCommitResponse()}else{ui.task._VCSCommitTask.poll.delay(5000)}}})});ui.task._VCSCommitTask.afterCommit=function(c){Ext.getBody().unmask();ui.task.PingTask.getInstance().delay(30000);new Ext.Window({title:_("Status"),width:450,height:350,resizable:false,modal:true,autoScroll:true,bodyStyle:"background-color: white; padding: 5px;",html:c.join("
"),buttons:[{text:_("Close"),handler:function(){this.ownerCt.ownerCt.close()}}]}).show();PhDOE.reloadAllStore()};ui.task._VCSCommitTask.commit=function(h,g){Ext.getBody().mask(' '+_("Please, wait until commit..."));var c=[],f,e,d;for(d=0;d0){for(h=0;h"}Ext.MessageBox.show({title:"Warning",icon:Ext.MessageBox.INFO,buttons:Ext.MessageBox.YESNOCANCEL,msg:(l.length>1)?String.format(_("There are {0} files to close before commit.

{1}

Would you like me to close them for you ?"),l.length,m):String.format(_("There is {0} file to close before commit.

{1}

Would you like me to close it for you ?"),l.length,m),fn:function(u){if(u==="yes"){for(var t=0;t'+PhDOE.app.name+'
'+PhDOE.app.name+" Copyright © 2008-2012 The PHP Group
"+_("Author:")+' Yannick Torrès '+_('and others')+"
"},{title:_("Help and support"),bodyStyle:"padding:15px",html:'
'},{title:_("Credits"),bodyStyle:"padding:15px",html:'
"},{title:_("License"),autoLoad:{url:"./LICENSE"}}]}});ui.cmp.About.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._AnonymousPatchWin");ui.cmp._AnonymousPatchWin.form=Ext.extend(Ext.FormPanel,{frame:true,labelWidth:5,bodyStyle:"padding:5px 5px 0",defaultType:"radio",initComponent:function(c){Ext.apply(this,{items:[{xtype:"displayfield",value:_("File: ")+this.fpath+this.fname+"

"+_('You have opened a modified file from the "Patch for review" module.
This file has been modified by an anonymous user.

Please choose one of the following actions:')},{boxLabel:_("Continue to modify this file"),name:"choice",inputValue:"continue",checked:true,listeners:{afterrender:function(){new Ext.ToolTip({title:_("Continue to modify this file"),target:"x-form-el-"+this.id,anchor:"right",html:"
"+_("This action will open this file for modification. Once your modification finish, just save it and this file will be own by you."),width:250,autoHide:true})}}},{boxLabel:_("Reject this patch"),name:"choice",inputValue:"reject",listeners:{afterrender:function(){new Ext.ToolTip({title:_("Reject this patch"),target:"x-form-el-"+this.id,anchor:"right",html:"
"+_("This action will close this file, and clear the local change. This file will return into his original version, as it is on VCS server."),width:250,autoHide:true})}}},{boxLabel:_("Validate this patch"),name:"choice",inputValue:"validate",listeners:{afterrender:function(){new Ext.ToolTip({title:_("Validate this patch"),target:"x-form-el-"+this.id,anchor:"right",html:"
"+_("This action changes the owner of the modification and register it under your name. The file will appear under your name and you can then commit it."),width:250,autoHide:true})}}}]});ui.cmp._AnonymousPatchWin.form.superclass.initComponent.call(this)}});ui.cmp.AnonymousPatchWin=Ext.extend(Ext.Window,{id:"anonymous-patch-win",title:_("Anonymous patch manager"),iconCls:"iconPatch",width:450,height:250,layout:"fit",resizable:false,modal:true,autoScroll:true,closable:false,closeAction:"close",buttons:[{text:_("Next"),iconCls:"iconArrowRight",handler:function(){var d=this.ownerCt.ownerCt,c=d.items.items[0].getForm().getValues().choice;switch(c){case"continue":d.close();break;case"reject":ui.task.ClearLocalChangeTask({ftype:d.ftype,fpath:d.fpath,fname:d.fname,noConfirm:true});break;case"validate":ui.task.ChangeFileOwner({fileIdDB:d.fidDB,newOwnerID:PhDOE.user.userID,from:d,fromType:"tab"});break}}}],initComponent:function(){Ext.apply(this,{items:[new ui.cmp._AnonymousPatchWin.form({fpath:this.fpath,fname:this.fname})]});ui.cmp.AnonymousPatchWin.superclass.initComponent.call(this);this.show()}});Ext.namespace("ui","ui.cmp","ui.cmp._BuildStatus");ui.cmp._BuildStatus.display=function(c){Ext.apply(this,c);if(Ext.getCmp("main-panel").findById("last_failed_build_"+this.lang)){Ext.getCmp("main-panel").remove("last_failed_build_"+this.lang)}Ext.getCmp("main-panel").add({xtype:"panel",id:"last_failed_build_"+this.lang,title:String.format(_("Last failed build for {0}"),Ext.util.Format.uppercase(this.lang)),tabTip:String.format(_("Last failed build for the documentation {0}"),Ext.util.Format.uppercase(this.lang)),closable:true,autoScroll:true,iconCls:"iconCheckBuild",html:'
'});Ext.getCmp("main-panel").setActiveTab("last_failed_build_"+this.lang);Ext.getCmp("main-panel").el.mask(_("Please, wait..."));XHR({scope:this,params:{task:"getFailedBuildData",idFailedBuild:this.idFailedBuild},success:function(d){var e=Ext.decode(d.responseText),f=e.mess.join("
");if(e.state==="truncate"){Ext.get("check-build-content").dom.innerHTML=f+'
'+_("This log is too large and have been truncated. Use the following button to download the full content of it.")+'
';new Ext.Button({scope:this,text:_("Download the full content of this log"),renderTo:"check-build-content-download-btn",style:{margin:"auto"},handler:function(){window.location.href="./do/downloadFailedBuildLog?idFailedBuild="+this.idFailedBuild+"&csrfToken="+csrfToken}})}else{Ext.get("check-build-content").dom.innerHTML=f}Ext.getCmp("main-panel").el.unmask()}})};ui.cmp._BuildStatus.ds=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getFailedBuild"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"lang"},{name:"date",type:"date",dateFormat:"Y-m-d H:i:s"}]})});ui.cmp._BuildStatus.ds.setDefaultSort("date","desc");ui.cmp._BuildStatus.rendererLanguage=function(d){var c={cs:"cz",sr:"rs",sv:"se"};return'
'+d+"
"};ui.cmp._BuildStatus.columns=[{id:"date",header:_("Date"),sortable:true,dataIndex:"date",renderer:Ext.util.Format.dateRenderer(_("Y-m-d, H:i"))},{header:_("Language"),width:45,sortable:true,dataIndex:"lang",renderer:ui.cmp._BuildStatus.rendererLanguage}];ui.cmp._BuildStatus.menu=Ext.extend(Ext.menu.Menu,{setRowIndex:function(c){this.rowIndex=c},initComponent:function(){Ext.apply(this,{items:[{scope:this,text:""+_("View in a new Tab")+"",iconCls:"iconOpenInTab",handler:function(){this.grid.fireEvent("rowdblclick",this.grid,this.rowIndex,this.event)}}]});ui.cmp._BuildStatus.menu.superclass.initComponent.call(this)}});ui.cmp.BuildStatus=Ext.extend(Ext.grid.GridPanel,{loadMask:true,bodyBorder:false,autoExpandColumn:"date",store:ui.cmp._BuildStatus.ds,columns:ui.cmp._BuildStatus.columns,view:new Ext.grid.GridView({forceFit:true}),listeners:{render:function(){this.store.load.defer(20,this.store)}},onRowdblclick:function(c,g,f){var d=this.store.getAt(g);new ui.cmp._BuildStatus.display({idFailedBuild:d.id,lang:d.data.lang})},onRowContextMenu:function(c,f,d){if(!this.menu){this.menu=new ui.cmp._BuildStatus.menu({grid:c,rowIdx:"",event:d})}d.stopEvent();this.getSelectionModel().selectRow(f);this.menu.setRowIndex(f);this.menu.showAt(d.getXY())},initComponent:function(c){ui.cmp.BuildStatus.superclass.initComponent.call(this);Ext.apply(this,c);this.on("rowdblclick",this.onRowdblclick,this);this.on("rowcontextmenu",this.onRowContextMenu,this)}});Ext.namespace("ui","ui.cmp","ui.cmp._ChangeFileOwner");ui.cmp._ChangeFileOwner.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getVCSUsers"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",fields:[{name:"userID"},{name:"authService"},{name:"userName"}]}),sortInfo:{field:"authService",direction:"ASC"}});ui.cmp.ChangeFileOwner=Ext.extend(Ext.Window,{title:_("Change file's owner"),iconCls:"iconSwitchLang",width:550,height:255,layout:"form",resizable:false,modal:true,autoScroll:true,closeAction:"close",padding:10,buttons:[{text:_("Save"),handler:function(){var d=this.ownerCt.ownerCt,c=d.items.items[1].items.items[0].getValue();new ui.task.ChangeFileOwner({fileIdDB:d.fileIdDB,newOwnerID:c,from:d})}},{text:_("Close"),handler:function(){var c=this.ownerCt.ownerCt;c.close()}}],initComponent:function(){var c=this;Ext.apply(this,{defaults:{labelWidth:120},items:[{xtype:"fieldset",title:_("Information"),iconCls:"iconInfo",width:515,items:[{xtype:"displayfield",fieldLabel:_("File"),value:this.fileFolder+this.fileName},{xtype:"displayfield",fieldLabel:_("Current owner"),value:this.currentOwner}]},{xtype:"fieldset",title:_("Action"),iconCls:"iconSwitchLang",width:515,items:[{xtype:"combo",name:"newOwner",fieldLabel:_("New owner"),editable:false,store:ui.cmp._ChangeFileOwner.store,triggerAction:"all",valueField:"userID",tpl:new Ext.XTemplate('
',"{authService} - {userName}","
"),displayField:"userName",listeners:{afterrender:function(d){d.store.load({callback:function(){d.setValue(PhDOE.user.userID)}})}}}]}]});ui.cmp.ChangeFileOwner.superclass.initComponent.call(this);this.show()}});Ext.namespace("ui","ui.cmp");ui.cmp.Chat=Ext.extend(Ext.Window,{id:"win-chat",iconCls:"iconChat",layout:"fit",width:800,height:600,modal:true,plain:true,bodyStyle:"color:#000",closeAction:"hide",initComponent:function(){var c=PhDOE.user.login;if(PhDOE.user.isAnonymous){c="an%3F%3F%3F"}Ext.apply(this,{title:_("Chat with us on IRC !"),items:[new Ext.ux.IFrameComponent({id:"frame-win-chat",url:"https://widget.mibbit.com/?settings=8eec4034df2eb666b0600bdfe151529a&server=irc.umich.edu&channel=%23php.doc&nick=poe_"+c})]});ui.cmp.Chat.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp");ui.cmp.CheckBuildPrompt=Ext.extend(Ext.Window,{title:_("Check build"),iconCls:"iconCheckBuild",layout:"form",width:350,height:200,resizable:false,modal:true,bodyStyle:"padding:5px 5px 0",labelAlign:"top",buttons:[{id:"win-check-build-btn-submit",text:_("Go !"),handler:function(){new ui.task.CheckBuildTask();this.ownerCt.ownerCt.close()}}],initComponent:function(){Ext.apply(this,{items:[{xtype:"panel",modal:false,baseCls:"x-plain",bodyStyle:"padding:5px 5px 0",html:_("You're about to check the build via this command:")+"

/usr/bin/php configure.php --with-lang="+PhDOE.user.lang+'
"},{xtype:"checkbox",id:"option-xml-details",name:"option-xml-details",checked:false,hideLabel:true,boxLabel:_("Enable detailed XML error messages"),listeners:{check:function(e,d){Ext.get("option-xml-details-span").dom.style.visibility=(d)?"visible":"hidden";Ext.get("option-xml-details-div").dom.style.visibility=(d)?"visible":"hidden"}}}]});ui.cmp.CheckBuildPrompt.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._CheckDoc");ui.cmp._CheckDoc.ds=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getCheckDocData"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"path"},{name:"extension"},{name:"check_oldstyle",type:"int"},{name:"check_undoc",type:"int"},{name:"check_roleerror",type:"int"},{name:"check_badorder",type:"int"},{name:"check_noseealso",type:"int"},{name:"check_noreturnvalues",type:"int"},{name:"check_noparameters",type:"int"},{name:"check_noexamples",type:"int"},{name:"check_noerrors",type:"int"}]})});ui.cmp._CheckDoc.ds.setDefaultSort("extension","asc");ui.cmp._CheckDoc.renderer=function(d,c){if(d>0){c.css="check_doc_cell";c.attr="ext:qtip=\" "+_("Double-click the cell to open the file selection")+'"';return d}else{return}};ui.cmp._CheckDoc.columns=[new Ext.grid.RowNumberer(),{id:"extension",header:_("Extension"),sortable:true,dataIndex:"extension"},{header:_("Not documented"),width:45,sortable:true,dataIndex:"check_undoc",renderer:ui.cmp._CheckDoc.renderer},{header:_("Old style"),width:45,sortable:true,dataIndex:"check_oldstyle",renderer:ui.cmp._CheckDoc.renderer},{header:_("Bad refsect1 order"),width:45,sortable:true,dataIndex:"check_badorder",renderer:ui.cmp._CheckDoc.renderer},{header:_("No parameters"),width:45,sortable:true,dataIndex:"check_noparameters",renderer:ui.cmp._CheckDoc.renderer},{header:_("No return values"),width:45,sortable:true,dataIndex:"check_noreturnvalues",renderer:ui.cmp._CheckDoc.renderer},{header:_("No examples"),width:45,sortable:true,dataIndex:"check_noexamples",renderer:ui.cmp._CheckDoc.renderer},{header:_("No errors section"),width:45,sortable:true,dataIndex:"check_noerrors",renderer:ui.cmp._CheckDoc.renderer},{header:_("No see also"),width:45,sortable:true,dataIndex:"check_noseealso",renderer:ui.cmp._CheckDoc.renderer},{header:_("Refsect1 role error"),width:45,sortable:true,dataIndex:"check_roleerror",renderer:ui.cmp._CheckDoc.renderer}];ui.cmp._CheckDoc.fs=new Ext.data.SimpleStore({fields:[{name:"id"},{name:"file"}]});ui.cmp._CheckDoc.FileGrid=Ext.extend(Ext.grid.GridPanel,{id:"check-doc-file-grid",store:ui.cmp._CheckDoc.fs,loadMask:true,bodyBorder:false,autoExpandColumn:"file",sm:new Ext.grid.RowSelectionModel({}),columns:[new Ext.grid.RowNumberer(),{id:"file",header:_("Files"),sortable:true,dataIndex:"file"}],onRowClick:function(){Ext.getCmp("check-doc-btn-open-selected-files").enable()},onRowContextMenu:function(c,f,d){d.stopEvent();c.getSelectionModel().selectRow(f)},onRowDblClick:function(c,d){ui.cmp.RepositoryTree.getInstance().openFile("byPath","en"+c.fpath,c.store.getAt(d).data.file);Ext.getCmp("check-doc-file-win").close()},initComponent:function(c){ui.cmp._CheckDoc.FileGrid.superclass.initComponent.call(this);Ext.apply(this,c);this.on("rowcontextmenu",this.onRowContextMenu,this);this.on("rowdblclick",this.onRowDblClick,this);this.on("rowclick",this.onRowClick,this)}});ui.cmp._CheckDoc.FileWin=Ext.extend(Ext.Window,{id:"check-doc-file-win",title:_("Files"),width:450,height:350,labelWidth:50,resizable:false,modal:true,autoScroll:true,layout:"fit",iconCls:"iconFiles",buttons:[{text:_("Open all files"),handler:function(){var e=Ext.getCmp("check-doc-file-win"),c=ui.cmp._CheckDoc.fs,d;PhDOE.AFfilePendingOpen=[];for(d=0;d"+_("Open in a new Tab")+"",iconCls:"iconOpenInTab",handler:function(){this.openTab(this.ctxRowIndex);this.menu.hide()}}]})}this.getSelectionModel().selectRow(f);d.stopEvent();if(this.ctxRowIndex){this.ctxRowIndex=null}this.ctxRowIndex=f;this.menu.showAt(d.getXY())},initComponent:function(c){this.tbar=[{xtype:"label",text:_("Status: ")},{xtype:"combo",typeAhead:true,triggerAction:"all",lazyRender:true,mode:"local",store:new Ext.data.ArrayStore({id:0,fields:["myId","displayText"],data:[["all",_("All status")],["FTP_CONNECT","FTP_CONNECT"],["FTP_LOGIN","FTP_LOGIN"],["FTP_NO_FILE","FTP_NO_FILE"],["HTTP_CONNECT","HTTP_CONNECT"],["HTTP_INTERNAL_ERROR","HTTP_INTERNAL_ERROR"],["HTTP_NOT_FOUND","HTTP_NOT_FOUND"],["HTTP_MOVED","HTTP_MOVED"],["HTTP_WRONG_HEADER","HTTP_WRONG_HEADER"],["SUCCESS","SUCCESS"],["UNKNOWN_HOST","UNKNOWN_HOST"]]}),value:"all",valueField:"myId",displayField:"displayText",editable:false,listeners:{select:function(f,d){var e=d.id;if(e==="all"){Ext.getCmp("check-entities-grid").store.clearFilter()}else{Ext.getCmp("check-entities-grid").store.filter("result",d.id)}}}}];ui.cmp.CheckEntities.superclass.initComponent.call(this);Ext.apply(this,c);this.on("rowcontextmenu",this.onContextClick,this);this.on("rowdblclick",this.onRowdblclick,this)}});Ext.namespace("ui","ui.cmp");ui.cmp.CheckEntitiesPrompt=Ext.extend(Ext.Window,{title:_("Check entities"),iconCls:"iconRun",id:"win-check-entities",layout:"fit",width:250,height:140,resizable:false,modal:true,bodyStyle:"padding:5px 5px 0; text-align: center;",labelAlign:"top",closeAction:"hide",buttons:[{id:"win-check-entities-btn",text:_("Go !"),handler:function(){new ui.task.CheckEntitiesTask();Ext.getCmp("win-check-entities").hide()}}],initComponent:function(){Ext.apply(this,{items:[{xtype:"panel",modal:false,baseCls:"x-plain",bodyStyle:"padding:5px 5px 0",html:_("You're about to check all entities.

This action takes time.")}]});ui.cmp.CheckEntitiesPrompt.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp");ui.cmp.CheckXmlWin=Ext.extend(Ext.Window,{title:_("XML Errors"),iconCls:"iconXml",width:650,height:350,layout:"fit",resizable:false,modal:true,autoScroll:true,closeAction:"close",buttons:[{text:_("Close"),handler:function(){this.ownerCt.ownerCt.close()}}],store:new Ext.data.JsonStore({root:"Items",totalProperty:"nbItems",fields:[{name:"line"},{name:"libel"}]}),addErrorsInStore:function(){var c=Ext.data.Record.create({name:"line"},{name:"libel"});this.store.removeAll();for(i=0;i"+Ext.util.Format.htmlEncode(this.errors[i].ctx1)}))}this.store.sort("line","desc")},initComponent:function(){Ext.apply(this,{items:[{xtype:"grid",store:this.store,loadMask:true,autoExpandColumn:"libel_id",colModel:new Ext.grid.ColumnModel([{header:_("Line"),dataIndex:"line",sortable:true},{id:"libel_id",header:_("Libel"),dataIndex:"libel"}]),sm:new Ext.grid.RowSelectionModel({singleSelect:true})}]});ui.cmp.CheckXmlWin.superclass.initComponent.call(this);this.addErrorsInStore();this.show()}});Ext.namespace("ui","ui.cmp","ui.cmp._CommitLogManager");ui.cmp._CommitLogManager.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getCommitLogMessage"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"text"}]})});ui.cmp._CommitLogManager.editor=new Ext.ux.grid.RowEditor({saveText:_("Update"),cancelText:_("Cancel"),listeners:{afteredit:function(e,d,c){XHR({params:{task:"saveLogMessage",messID:c.data.id,mess:c.data.text},success:function(){c.commit();PhDOE.notify("info",_("Message updated"),_("Log Message was updated successfully !"))},failure:function(){PhDOE.winForbidden()}})}}});ui.cmp._CommitLogManager.cm=new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(),{id:"log_msg",header:_("Log message"),dataIndex:"text",editor:{xtype:"textarea"},renderer:function(c){return c.split("\n").join("
")}}]);ui.cmp._CommitLogManager.sm=new Ext.grid.RowSelectionModel({singleSelect:true});ui.cmp._CommitLogManager.menu=Ext.extend(Ext.menu.Menu,{setRowIdx:function(c){this.rowIdx=c},initComponent:function(){Ext.apply(this,{items:[{scope:this,text:_("Delete this Log Message"),iconCls:"iconTrash",handler:function(){XHR({scope:this,params:{task:"deleteLogMessage",messID:ui.cmp._CommitLogManager.store.getAt(this.rowIdx).data.id},success:function(){ui.cmp._CommitLogManager.store.remove(ui.cmp._CommitLogManager.store.getAt(this.rowIdx));PhDOE.notify("info",_("Message deleted"),_("Log Message was deleted successfully !"))},failure:function(){PhDOE.winForbidden()}})}}]});ui.cmp._CommitLogManager.menu.superclass.initComponent.call(this)}});ui.cmp._CommitLogManager.grid=Ext.extend(Ext.grid.GridPanel,{loadMask:true,autoExpandColumn:"log_msg",cm:ui.cmp._CommitLogManager.cm,sm:ui.cmp._CommitLogManager.sm,store:ui.cmp._CommitLogManager.store,plugins:[ui.cmp._CommitLogManager.editor],viewConfig:{emptyText:'
'+_("No log message currently")+"
"},listeners:{render:function(c){c.store.load()}},onRowContextMenu:function(c,f,d){d.stopEvent();this.getSelectionModel().selectRow(f);if(!this.menu){this.menu=new ui.cmp._CommitLogManager.menu()}this.menu.setRowIdx(f);this.menu.showAt(d.getXY())},initComponent:function(c){ui.cmp._CommitLogManager.grid.superclass.initComponent.call(this);Ext.apply(this,c);this.on("rowcontextmenu",this.onRowContextMenu,this)}});ui.cmp.CommitLogManager=Ext.extend(Ext.Window,{id:"commit-log-win",title:_("Manage Log Message"),iconCls:"iconWinManageLog",width:650,height:350,layout:"fit",resizable:false,modal:true,autoScroll:true,closeAction:"hide",store:ui.cmp._CommitLogManager.store,buttons:[{text:_("Close"),handler:function(){Ext.getCmp("commit-log-win").hide()}}],initComponent:function(){Ext.apply(this,{items:[new ui.cmp._CommitLogManager.grid()]});ui.cmp.CommitLogManager.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._CommitPrompt");ui.cmp._CommitPrompt.store=new Ext.data.GroupingStore({reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"path"},{name:"name"},{name:"by"},{name:"date",type:"date",dateFormat:"Y-m-d H:i:s"},{name:"type"}]}),sortInfo:{field:"name",direction:"ASC"},groupField:"path"});ui.cmp._CommitPrompt.columns=[new Ext.grid.CheckboxSelectionModel(),{id:"name",header:_("Files"),sortable:true,dataIndex:"name"},{header:_("Modified by"),width:45,sortable:true,dataIndex:"by"},{header:_("Date"),width:45,sortable:true,dataIndex:"date",renderer:Ext.util.Format.dateRenderer(_("Y-m-d, H:i"))},{header:_("Path"),dataIndex:"path",hidden:true}];ui.cmp._CommitPrompt.view=new Ext.grid.GroupingView({forceFit:true,groupTextTpl:'{[values.rs[0].data["path"]]} ({[values.rs.length]} {[values.rs.length > 1 ? "'+_("Files")+'" : "'+_("File")+'"]})'});ui.cmp._CommitPrompt.grid=Ext.extend(Ext.grid.GridPanel,{id:"commit-grid-panel",loadMask:true,autoExpandColumn:"name",height:180,columns:ui.cmp._CommitPrompt.columns,view:ui.cmp._CommitPrompt.view,enableDragDrop:true,sm:new Ext.grid.CheckboxSelectionModel(),listeners:{viewready:function(){this.selModel.selectAll()}},initComponent:function(){Ext.apply(this,{store:ui.cmp._CommitPrompt.store});ui.cmp._CommitPrompt.grid.superclass.initComponent.call(this)}});ui.cmp.CommitPrompt=Ext.extend(Ext.Window,{id:"winVCSCommit",layout:"form",title:_("VCS commit"),iconCls:"iconPendingCommit",closable:false,width:600,height:480,resizable:false,modal:true,bodyStyle:"padding:5px 5px 0",labelAlign:"top",patchID:false,defaultMessage:false,tools:[{id:"gear",qtip:_("Configure this tools"),handler:function(){if(!Ext.getCmp("commit-log-win")){new ui.cmp.CommitLogManager()}Ext.getCmp("commit-log-win").show(this.id)}}],listeners:{show:function(){var c=new Ext.util.DelayedTask(function(){Ext.getCmp("form-commit-message-log").focus()});c.delay(200)}},initComponent:function(){var c;ui.cmp._CommitPrompt.store.removeAll();for(c=0;c
{[values.text.split("\n").join("
")]}
',valueField:"id",displayField:"text",listEmptyText:'
'+_("No log message currently")+"
",listeners:{select:function(e,d){Ext.getCmp("form-commit-message-log").setValue(d.data.text)}}},{xtype:"textarea",id:"form-commit-message-log",name:"first3",fieldLabel:_("Log message"),anchor:"100%",height:150,value:(this.defaultMessage)?this.defaultMessage:""}]});ui.cmp.CommitPrompt.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._DictionaryGrid");ui.cmp._DictionaryGrid.store=Ext.extend(Ext.data.Store,{proxy:new Ext.data.HttpProxy({url:"./do/getDictionaryWords"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"valueEn"},{name:"valueLang"},{name:"lastUser",hideField:true},{name:"lastDate",type:"date",dateFormat:"Y-m-d H:i:s",hideField:true}]}),sortInfo:{field:"valueEn",direction:"ASC"},listeners:{load:function(){if(!PhDOE.user.isAnonymous){Ext.getCmp(this.fid+"-btn-new-word").enable()}}},initComponent:function(c){Ext.apply(this,c);ui.cmp._DictionaryGrid.store.superclass.initComponent.call(this)}});ui.cmp._DictionaryGrid.editor=Ext.extend(Ext.ux.grid.RowEditor,{saveText:_("Update"),cancelText:_("Cancel"),listeners:{afteredit:function(e,d,c,f){XHR({params:{task:"manageDictionaryWord",wordId:c.data.id,valueEn:c.data.valueEn,valueLang:c.data.valueLang},success:function(g){var h=Ext.util.JSON.decode(g.responseText);c.set("lastUser",PhDOE.user.login);c.set("lastDate",Date.parseDate(h.dateUpdate,"Y-m-d H:i:s"));c.commit();PhDOE.notify("info",_("Word in dictionary added/updated"),_("The word have been added/updated successfully !"))},failure:function(){PhDOE.winForbidden()}})},canceledit:function(c){if(c.record.data.id==="new"){c.record.store.remove(c.record)}}}});ui.cmp._DictionaryGrid.sm=Ext.extend(Ext.grid.RowSelectionModel,{singleSelect:true});ui.cmp._DictionaryGrid.viewConfig={forceFit:true,emptyText:'
'+_("You must manually load this data.
Use the refresh button !")+"
",deferEmptyText:false};ui.cmp._DictionaryGrid.menu=Ext.extend(Ext.menu.Menu,{setRowIdx:function(c){this.rowIdx=c},initComponent:function(){Ext.apply(this,{items:[{scope:this,text:_("Delete this word"),iconCls:"iconTrash",disabled:(PhDOE.user.isAnonymous),handler:function(){XHR({scope:this,params:{task:"delDictionaryWord",wordId:this.grid.store.getAt(this.rowIdx).data.id},success:function(){this.grid.store.remove(this.grid.store.getAt(this.rowIdx));PhDOE.notify("info",_("Word deleted"),_("The word was deleted successfully !"))},failure:function(){PhDOE.winForbidden()}})}}]});ui.cmp._DictionaryGrid.menu.superclass.initComponent.call(this)}});ui.cmp._DictionaryGrid.grid=Ext.extend(Ext.grid.GridPanel,{onRowContextMenu:function(c,f,d){d.stopEvent();this.getSelectionModel().selectRow(f);if(!this.menu){this.menu=new ui.cmp._DictionaryGrid.menu({grid:c})}this.menu.setRowIdx(f);this.menu.showAt(d.getXY())},initComponent:function(){Ext.apply(this,{region:"center",split:true,loadMask:true,autoScroll:true,bodyBorder:false,border:false,autoExpandColumn:this.dataType,columns:[{id:"id",header:_("En word"),sortable:true,dataIndex:"valueEn",editor:{xtype:"textfield"}},{header:String.format(_("{0} word"),PhDOE.user.lang.ucFirst()),sortable:true,dataIndex:"valueLang",editor:{xtype:"textfield"}},{header:_("Last User Update"),sortable:true,dataIndex:"lastUser",editor:{xtype:"displayfield",hideField:true}},{header:_("Last Date Update"),sortable:true,dataIndex:"lastDate",editor:{xtype:"displayfield",hideField:true},renderer:Ext.util.Format.dateRenderer(_("Y-m-d, H:i"))}],viewConfig:ui.cmp._DictionaryGrid.viewConfig,sm:new ui.cmp._DictionaryGrid.sm(),store:new ui.cmp._DictionaryGrid.store({fid:this.fid}),plugins:[new ui.cmp._DictionaryGrid.editor()],tbar:[{scope:this,tooltip:_("Load/Refresh"),iconCls:"iconRefresh",handler:function(){this.store.reload()}},"->",{scope:this,id:this.fid+"-btn-new-word",disabled:true,text:_("Add a new word"),iconCls:"iconNewWord",handler:function(){var c=Ext.data.Record.create([{name:"id"},{name:"valueEn"},{name:"valueLang"},{name:"lastUser"},{name:"lastDate"}]),d=new Date(),f=new c({id:"new",valueEn:"",valueLang:"",lastUser:PhDOE.user.login,lastDate:d});this.plugins[0].stopEditing();this.store.insert(0,f);this.getView().refresh();this.getSelectionModel().selectRow(0);this.plugins[0].startEditing(0)}}]});ui.cmp._DictionaryGrid.grid.superclass.initComponent.call(this);this.on("rowcontextmenu",this.onRowContextMenu,this)}});ui.cmp.DictionaryGrid=Ext.extend(Ext.Panel,{initComponent:function(){Ext.apply(this,{layout:"border",border:false,items:[new ui.cmp._DictionaryGrid.grid({dataType:this.dataType,prefix:this.prefix,fid:this.fid,ftype:this.ftype,loadStore:this.loadStore})]});ui.cmp.DictionaryGrid.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._EditorConf","ui.cmp._EditorCmd2Conf");ui.cmp._EditorConf.tplMenu=new Ext.XTemplate('','","");ui.cmp._EditorConf.tplMenu.compile();ui.cmp._EditorConf.menuDefEn=[["1","card1",_("Main")],["4","card4",_('Module "Files with error"')],["6","card6",_('Module "All files"')]];ui.cmp._EditorConf.menuDefNonEn=[["1","card1",_("Main")],["2","card2",_('Module "Files need translate"')],["3","card3",_('Module "Files need update"')],["4","card4",_('Module "Files with error"')],["5","card5",_('Module "Files need reviewed"')],["6","card6",_('Module "All files"')]];ui.cmp._EditorConf.menuStore=new Ext.data.SimpleStore({id:0,fields:[{name:"id"},{name:"card"},{name:"label"}]});ui.cmp._EditorConf.viewMenu=Ext.extend(Ext.DataView,{id:"conf-menu-view",tpl:ui.cmp._EditorConf.tplMenu,singleSelect:true,overClass:"x-view-over",itemSelector:"div.menu-wrap",store:ui.cmp._EditorConf.menuStore,listeners:{selectionchange:function(c){var d=c.getSelectedRecords();Ext.getCmp("confCard").layout.setActiveItem("conf-card-"+d[0].data.id)}}});ui.cmp._EditorCmd2Conf.themeStore=new Ext.data.SimpleStore({fields:["themeFile",{name:"themeName",type:"string"}],data:[[false,_("No theme")],["default",_("Default theme")],["cobalt",_("Cobalt")],["eclipse",_("Eclipse")],["elegant",_("Elegant")],["monokai",_("Monokai")],["neat",_("Neat")],["night",_("Night")],["rubyblue",_("RubyBlue")]]});ui.cmp._EditorConf.themeStore=new Ext.data.SimpleStore({fields:["themeFile",{name:"themeName",type:"string"}],data:[["themes/ExtJsThemes/black/css/xtheme-black.css",_("Black")],["themes/empty.css",_("Default")],["themes/ExtJsThemes/darkgray/css/xtheme-darkgray.css",_("DarkGray")],["js/ExtJs/resources/css/xtheme-gray.css",_("Gray")],["themes/ExtJsThemes/gray-extend/css/xtheme-gray-extend.css",_("Gray Extend")],["themes/ExtJsThemes/indigo/css/xtheme-indigo.css",_("Indigo")],["themes/ExtJsThemes/midnight/css/xtheme-midnight.css",_("Midnight")],["themes/ExtJsThemes/olive/css/xtheme-olive.css",_("Olive")],["themes/ExtJsThemes/purple/css/xtheme-purple.css",_("Purple")],["themes/ExtJsThemes/silverCherry/css/xtheme-silverCherry.css",_("SilverCherry")],["themes/ExtJsThemes/ubuntu_human/css/xtheme-human.css",_("Ubuntu Human")]]});ui.cmp._EditorConf.uiLangStore=new Ext.data.SimpleStore({fields:["uiLang",{name:"uiLangName",type:"string"}],data:[["default",_("Default language, if available")],["en",_("English")],["fr",_("French")],["ru",_("Russian")],["es",_("Spanish")],["ar",_("Arabic")]]});ui.cmp._EditorConf.CommitChange=new Ext.util.DelayedTask(function(){new ui.task.UpdateConfTask({module:this.module,itemName:this.itemName,value:this.getValue()})});ui.cmp._EditorConf.card1=Ext.extend(Ext.TabPanel,{id:"conf-card-1",autoScroll:true,activeTab:0,defaults:{bodyStyle:"padding: 5px;",autoHeight:true,autoScroll:true},initComponent:function(){Ext.apply(this,{items:[{title:_("User Interface"),iconCls:"iconUI",labelAlign:"top",layout:"form",items:[{xtype:"fieldset",title:_("Main menu"),iconCls:"iconMenu",items:[{xtype:"spinnerfield",width:60,name:"PhDOE.user.conf.main.mainMenuWidth",module:"main",itemName:"mainMenuWidth",value:PhDOE.user.conf.main.mainMenuWidth||300,fieldLabel:_("Main menu width"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){var c=Ext.getCmp("main-menu-panel"),d=this.getValue();PhDOE.user.conf.main.mainMenuWidth=d;c.setWidth(d);c.ownerCt.doLayout();ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){var c=Ext.getCmp("main-menu-panel"),d=this.getValue();PhDOE.user.conf.main.mainMenuWidth=d;c.setWidth(d);c.ownerCt.doLayout();ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}}]},{xtype:"fieldset",iconCls:"iconThemes",title:_("Appearance"),items:[{xtype:"combo",fieldLabel:_("Choose a theme"),id:"conf-combo-theme",valueField:"themeFile",displayField:"themeName",triggerAction:"all",mode:"local",forceSelection:true,editable:false,value:PhDOE.user.conf.main.theme,store:ui.cmp._EditorConf.themeStore,listeners:{render:function(){Ext.getCmp("conf-combo-theme").store.sort("themeName")},select:function(e){var d=e.getValue();Ext.get("appTheme").dom.href=d;new ui.task.UpdateConfTask({module:"main",itemName:"theme",value:d})}}},{xtype:"combo",fieldLabel:_("Force an UI language"),id:"conf-combo-ui-lang",valueField:"uiLang",displayField:"uiLangName",triggerAction:"all",mode:"local",forceSelection:true,editable:false,value:PhDOE.user.conf.main.uiLang||"default",store:ui.cmp._EditorConf.uiLangStore,listeners:{select:function(e){var d=e.getValue();new ui.task.UpdateConfTask({module:"main",itemName:"uiLang",value:d})}}}]},{xtype:"fieldset",title:_("On save file"),iconCls:"iconSaveFile",autoHeight:true,defaults:{hideLabel:true},defaultType:"radio",items:[{autoHeight:true,name:"PhDOE.user.conf.main.onSaveFile",module:"main",itemName:"onSaveFile",checked:(PhDOE.user.conf.main.onSaveFile==="ask-me")?true:false,boxLabel:_("Ask me if I want to check for error before saving the file"),inputValue:"ask-me",listeners:{check:function(c){if(c.checked){new ui.task.UpdateConfTask({module:"main",itemName:"onSaveFile",value:c.getRawValue()})}}}},{autoHeight:true,name:"PhDOE.user.conf.main.onSaveFile",module:"main",itemName:"onSaveFile",checked:(PhDOE.user.conf.main.onSaveFile==="always")?true:false,boxLabel:_("Always check for error before saving the file"),inputValue:"always",listeners:{check:function(c){if(c.checked){new ui.task.UpdateConfTask({module:"main",itemName:"onSaveFile",value:c.getRawValue()})}}}},{autoHeight:true,name:"PhDOE.user.conf.main.onSaveFile",module:"main",itemName:"onSaveFile",checked:(PhDOE.user.conf.main.onSaveFile==="never")?true:false,boxLabel:_("Never check for error before saving the file"),inputValue:"never",listeners:{check:function(c){if(c.checked){new ui.task.UpdateConfTask({module:"main",itemName:"onSaveFile",value:c.getRawValue()})}}}}]},{xtype:"checkbox",name:"PhDOE.user.conf.main.displayENWork",checked:PhDOE.user.conf.main.displayENWork,boxLabel:_('Display EN work in "Work in progress" & "Patches for review" modules'),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"main",itemName:"displayENWork",value:c.getValue()})}}}]},{title:_("External Data"),iconCls:"iconExternalData",items:[{xtype:"fieldset",title:_("About mails"),iconCls:"iconMailing",defaults:{hideLabel:true},defaultType:"checkbox",items:[{autoHeight:true,name:"PhDOE.user.conf.main.loadMailsAtStartUp",checked:PhDOE.user.conf.main.loadMailsAtStartUp,boxLabel:_("Load mail at startUp"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"main",itemName:"loadMailsAtStartUp",value:c.getValue()})}}}]},{xtype:"fieldset",title:_("About bugs"),iconCls:"iconBugs",defaults:{hideLabel:true},defaultType:"checkbox",items:[{autoHeight:true,name:"PhDOE.user.conf.main.loadBugsAtStartUp",checked:PhDOE.user.conf.main.loadBugsAtStartUp,boxLabel:_("Load bugs at startUp"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"main",itemName:"loadBugsAtStartUp",value:c.getValue()})}}}]}]},{title:_("Editor"),iconCls:"iconEditor",items:[{xtype:"fieldset",title:_("Editor theme"),iconCls:"iconThemes",items:[{xtype:"combo",fieldLabel:_("Choose a theme"),id:"conf-combo-cm2-theme",valueField:"themeFile",displayField:"themeName",triggerAction:"all",mode:"local",forceSelection:true,editable:false,value:(PhDOE.user.conf.main.editorTheme||"default"),store:ui.cmp._EditorCmd2Conf.themeStore,listeners:{select:function(e){var d=e.getValue();new ui.task.UpdateConfTask({module:"main",itemName:"editorTheme",value:d})}}}]}]}]});ui.cmp._EditorConf.card1.superclass.initComponent.call(this)}});ui.cmp._EditorConf.card2=Ext.extend(Ext.TabPanel,{id:"conf-card-2",autoScroll:true,activeTab:0,defaults:{bodyStyle:"padding: 5px;",autoHeight:true,autoScroll:true},initComponent:function(){Ext.apply(this,{items:[{title:_("Menu"),iconCls:"iconMenu",items:[{xtype:"fieldset",title:_("Nb files to display"),iconCls:"iconFilesToDisplay",defaults:{hideLabel:true},items:[{xtype:"spinnerfield",width:60,name:"PhDOE.user.conf.newFile.nbDisplay",module:"newFile",itemName:"nbDisplay",value:PhDOE.user.conf.newFile.nbDisplay||0,boxLabel:_("files to display"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}},{xtype:"displayfield",value:_("0 means no limit"),style:{fontStyle:"italic"}}]}]},{title:_("User Interface"),iconCls:"iconUI",items:[{xtype:"fieldset",title:_("ScrollBars"),iconCls:"iconScrollBar",defaults:{hideLabel:true},defaultType:"checkbox",items:[{name:"PhDOE.user.conf.newFile.syncScrollbars",checked:PhDOE.user.conf.newFile.syncScrollbars,boxLabel:_("Synchronize scroll bars"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"newFile",itemName:"syncScrollbars",value:c.getValue()})}}}]},{xtype:"fieldset",title:_("Tools"),iconCls:"iconConf",defaults:{hideLabel:true},defaultType:"checkbox",items:[{xtype:"fieldset",checkboxToggle:true,collapsed:!PhDOE.user.conf.newFile.toolsPanelDisplay,title:_("Start with the panel open"),listeners:{collapse:function(){new ui.task.UpdateConfTask({module:"newFile",itemName:"toolsPanelDisplay",value:false})},expand:function(){new ui.task.UpdateConfTask({module:"newFile",itemName:"toolsPanelDisplay",value:true})}},items:[{xtype:"spinnerfield",width:60,name:"newFile.toolsPanelWidth",module:"newFile",itemName:"toolsPanelWidth",value:PhDOE.user.conf.newFile.toolsPanelWidth||375,fieldLabel:_("Panel width"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}}]}]},{xtype:"fieldset",title:_("Right panel"),iconCls:"iconUI",defaults:{hideLabel:true},defaultType:"radio",items:[{name:"PhDOE.user.conf.newFile.secondPanel",boxLabel:_("Display the original file"),inputValue:"originalFile",checked:(PhDOE.user.conf.newFile.secondPanel==="originalFile")?true:false,listeners:{check:function(c){if(c.checked){new ui.task.UpdateConfTask({module:"newFile",itemName:"secondPanel",value:c.getRawValue()})}}}},{name:"PhDOE.user.conf.newFile.secondPanel",boxLabel:_("Do not display a right panel"),inputValue:"none",checked:(!Ext.isDefined(PhDOE.user.conf.newFile.secondPanel)||PhDOE.user.conf.newFile.secondPanel==="none")?true:false,listeners:{check:function(c){if(c.checked){new ui.task.UpdateConfTask({module:"newFile",itemName:"secondPanel",value:c.getRawValue()})}}}}]}]}]});ui.cmp._EditorConf.card2.superclass.initComponent.call(this)}});ui.cmp._EditorConf.card3=Ext.extend(Ext.TabPanel,{id:"conf-card-3",autoScroll:true,activeTab:0,defaults:{bodyStyle:"padding: 5px;",autoHeight:true,autoScroll:true},initComponent:function(){Ext.apply(this,{items:[{title:_("Menu"),iconCls:"iconMenu",items:[{xtype:"fieldset",title:_("Nb files to display"),iconCls:"iconFilesToDisplay",defaults:{hideLabel:true},defaultType:"spinnerfield",items:[{width:60,name:"PhDOE.user.conf.needUpdate.nbDisplay",module:"needUpdate",itemName:"nbDisplay",value:PhDOE.user.conf.needUpdate.nbDisplay||0,boxLabel:_("files to display"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}},{xtype:"displayfield",value:_("0 means no limit"),style:{fontStyle:"italic"}}]}]},{title:_("User Interface"),iconCls:"iconUI",items:[{xtype:"fieldset",title:_("ScrollBars"),iconCls:"iconScrollBar",defaults:{hideLabel:true},defaultType:"checkbox",items:[{name:"needUpdate.syncScrollbars",checked:PhDOE.user.conf.needUpdate.syncScrollbars,boxLabel:_("Synchronize scroll bars"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"syncScrollbars",value:c.getValue()})}}}]},{xtype:"fieldset",title:_("Tools"),iconCls:"iconConf",defaults:{hideLabel:true},defaultType:"checkbox",items:[{name:"needUpdate.toolsPanelLogLoad",checked:PhDOE.user.conf.needUpdate.toolsPanelLogLoad,boxLabel:_("Automatically load the log when displaying the file"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"toolsPanelLogLoad",value:c.getValue()})}}},{xtype:"fieldset",checkboxToggle:true,collapsed:!PhDOE.user.conf.needUpdate.toolsPanelDisplay,title:_("Start with the panel open"),listeners:{collapse:function(){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"toolsPanelDisplay",value:false})},expand:function(){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"toolsPanelDisplay",value:true})}},items:[{xtype:"spinnerfield",width:60,name:"needUpdate.toolsPanelWidth",module:"needUpdate",itemName:"toolsPanelWidth",value:PhDOE.user.conf.needUpdate.toolsPanelWidth||375,fieldLabel:_("Panel width"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}}]}]},{xtype:"fieldset",title:_("Diff view"),iconCls:"iconDiffView",defaults:{hideLabel:true},defaultType:"radio",items:[{xtype:"fieldset",checkboxToggle:true,collapsed:!PhDOE.user.conf.needUpdate.diffPanelDisplay,title:_("Start with the panel open"),listeners:{collapse:function(){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"diffPanelDisplay",value:false})},expand:function(){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"diffPanelDisplay",value:true})}},items:[{xtype:"spinnerfield",width:60,name:"needUpdate.diffPanelHeight",module:"needUpdate",itemName:"diffPanelHeight",value:PhDOE.user.conf.needUpdate.diffPanelHeight||150,fieldLabel:_("Panel height"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}}]},{name:"needUpdate.diffMethod",checked:(PhDOE.user.conf.needUpdate.diffMethod==="using-viewvc")?true:false,boxLabel:_("Using ViewVc from php web site"),inputValue:"using-viewvc",listeners:{check:function(c){if(c.checked){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"diffMethod",value:c.getRawValue()})}}}},{name:"needUpdate.diffMethod",checked:(PhDOE.user.conf.needUpdate.diffMethod==="using-exec")?true:false,boxLabel:_("Using diff -u command line"),inputValue:"using-exec",listeners:{check:function(c){if(c.checked){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"diffMethod",value:c.getRawValue()})}}}}]}]}]});ui.cmp._EditorConf.card3.superclass.initComponent.call(this)}});ui.cmp._EditorConf.card4=Ext.extend(Ext.TabPanel,{id:"conf-card-4",autoScroll:true,activeTab:0,defaults:{bodyStyle:"padding: 5px;",autoHeight:true,autoScroll:true},initComponent:function(){Ext.apply(this,{items:[{title:_("Menu"),iconCls:"iconMenu",items:[{xtype:"fieldset",title:_("Nb files to display"),iconCls:"iconFilesToDisplay",defaults:{hideLabel:true},defaultType:"spinnerfield",items:[{width:60,name:"PhDOE.user.conf.error.nbDisplay",module:"error",itemName:"nbDisplay",value:PhDOE.user.conf.error.nbDisplay||0,boxLabel:_("files to display"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}},{xtype:"displayfield",value:_("0 means no limit"),style:{fontStyle:"italic"}}]},{hidden:(PhDOE.user.lang==="en"),xtype:"fieldset",title:_("Error type"),iconCls:"iconFilesError",defaults:{hideLabel:true},defaultType:"checkbox",items:[{name:"error.skipNbLiteralTag",checked:PhDOE.user.conf.error.skipNbLiteralTag,boxLabel:_("Skip nbLiteralTag error"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"error",itemName:"skipNbLiteralTag",value:c.getValue()})}}}]}]},{title:_("User Interface"),iconCls:"iconUI",items:[{xtype:"fieldset",title:_("ScrollBars"),iconCls:"iconScrollBar",defaults:{hideLabel:true},defaultType:"checkbox",items:[{name:"error.syncScrollbars",checked:PhDOE.user.conf.error.syncScrollbars,boxLabel:_("Synchronize scroll bars"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"error",itemName:"syncScrollbars",value:c.getValue()})}}}]},{xtype:"fieldset",title:_("Tools"),iconCls:"iconConf",defaults:{hideLabel:true},defaultType:"checkbox",items:[{name:"error.toolsPanelLogLoad",checked:PhDOE.user.conf.error.toolsPanelLogLoad,boxLabel:_("Automatically load the log when displaying the file"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"error",itemName:"toolsPanelLogLoad",value:c.getValue()})}}},{name:"error.toolsPanelEntitiesLoad",checked:PhDOE.user.conf.error.toolsPanelEntitiesLoad,boxLabel:_("Automatically load entities data when displaying the file"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"error",itemName:"toolsPanelEntitiesLoad",value:c.getValue()})}}},{name:"error.toolsPanelAcronymsLoad",checked:PhDOE.user.conf.error.toolsPanelAcronymsLoad,boxLabel:_("Automatically load acronyms data when displaying the file"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"error",itemName:"toolsPanelAcronymsLoad",value:c.getValue()})}}},{xtype:"fieldset",checkboxToggle:true,collapsed:!PhDOE.user.conf.error.toolsPanelDisplay,title:_("Start with the panel open"),listeners:{collapse:function(){new ui.task.UpdateConfTask({module:"error",itemName:"toolsPanelDisplay",value:false})},expand:function(){new ui.task.UpdateConfTask({module:"error",itemName:"toolsPanelDisplay",value:true})}},items:[{xtype:"spinnerfield",width:60,name:"error.toolsPanelWidth",module:"error",itemName:"toolsPanelWidth",value:PhDOE.user.conf.error.toolsPanelWidth||375,fieldLabel:_("Panel width"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}}]}]},{xtype:"fieldset",title:_("Error description"),iconCls:"iconFilesError",defaults:{hideLabel:true},defaultType:"radio",items:[{xtype:"fieldset",checkboxToggle:true,collapsed:!PhDOE.user.conf.error.descPanelDisplay,title:_("Start with the panel open"),listeners:{collapse:function(){new ui.task.UpdateConfTask({module:"error",itemName:"descPanelDisplay",value:false})},expand:function(){new ui.task.UpdateConfTask({module:"error",itemName:"descPanelDisplay",value:true})}},items:[{xtype:"spinnerfield",width:60,name:"error.descPanelHeight",module:"error",itemName:"descPanelHeight",value:PhDOE.user.conf.error.descPanelHeight||150,fieldLabel:_("Panel height"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}}]}]}]}]});ui.cmp._EditorConf.card4.superclass.initComponent.call(this)}});ui.cmp._EditorConf.card5=Ext.extend(Ext.TabPanel,{id:"conf-card-5",autoScroll:true,activeTab:0,defaults:{bodyStyle:"padding: 5px;",autoHeight:true,autoScroll:true},initComponent:function(){Ext.apply(this,{items:[{title:_("Menu"),iconCls:"iconMenu",items:[{xtype:"fieldset",title:_("Nb files to display"),iconCls:"iconFilesToDisplay",defaults:{hideLabel:true},defaultType:"spinnerfield",items:[{width:60,name:"reviewed.nbDisplay",module:"reviewed",itemName:"nbDisplay",value:PhDOE.user.conf.reviewed.nbDisplay||0,boxLabel:_("files to display"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}},{xtype:"displayfield",value:_("0 means no limit"),style:{fontStyle:"italic"}}]}]},{title:_("User Interface"),iconCls:"iconUI",items:[{xtype:"fieldset",title:_("ScrollBars"),iconCls:"iconScrollBar",defaults:{hideLabel:true},defaultType:"checkbox",items:[{name:"reviewed.syncScrollbars",checked:PhDOE.user.conf.reviewed.syncScrollbars,boxLabel:_("Synchronize scroll bars"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"reviewed",itemName:"syncScrollbars",value:c.getValue()})}}}]},{xtype:"fieldset",title:_("Tools"),iconCls:"iconConf",defaults:{hideLabel:true},defaultType:"checkbox",items:[{name:"reviewed.toolsPanelLogLoad",checked:PhDOE.user.conf.reviewed.toolsPanelLogLoad,boxLabel:_("Automatically load the log when displaying the file"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"reviewed",itemName:"toolsPanelLogLoad",value:c.getValue()})}}},{xtype:"fieldset",checkboxToggle:true,collapsed:!PhDOE.user.conf.reviewed.toolsPanelDisplay,title:_("Start with the panel open"),listeners:{collapse:function(){new ui.task.UpdateConfTask({module:"reviewed",itemName:"toolsPanelDisplay",value:false})},expand:function(){new ui.task.UpdateConfTask({module:"reviewed",itemName:"toolsPanelDisplay",value:true})}},items:[{xtype:"spinnerfield",width:60,name:"reviewed.toolsPanelWidth",module:"reviewed",itemName:"toolsPanelWidth",value:PhDOE.user.conf.reviewed.toolsPanelWidth||375,fieldLabel:_("Panel width"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}}]}]}]}]});ui.cmp._EditorConf.card5.superclass.initComponent.call(this)}});ui.cmp._EditorConf.card6=Ext.extend(Ext.TabPanel,{id:"conf-card-6",autoScroll:true,activeTab:0,defaults:{bodyStyle:"padding: 5px;",autoHeight:true,autoScroll:true},initComponent:function(){Ext.apply(this,{items:[{title:_("User Interface"),iconCls:"iconUI",items:[{xtype:"fieldset",title:_("Tools"),iconCls:"iconConf",defaults:{hideLabel:true},defaultType:"checkbox",items:[{name:"allFiles.toolsPanelLogLoad",checked:PhDOE.user.conf.allFiles.toolsPanelLogLoad,boxLabel:_("Automatically load the log when displaying the file"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"allFiles",itemName:"toolsPanelLogLoad",value:c.getValue()})}}},{name:"allFiles.toolsPanelEntitiesLoad",checked:PhDOE.user.conf.allFiles.toolsPanelEntitiesLoad,boxLabel:_("Automatically load entities data when displaying the file"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"allFiles",itemName:"toolsPanelEntitiesLoad",value:c.getValue()})}}},{name:"allFiles.toolsPanelAcronymsLoad",checked:PhDOE.user.conf.allFiles.toolsPanelAcronymsLoad,boxLabel:_("Automatically load acronyms data when displaying the file"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"allFiles",itemName:"toolsPanelAcronymsLoad",value:c.getValue()})}}},{xtype:"fieldset",checkboxToggle:true,collapsed:!PhDOE.user.conf.allFiles.toolsPanelDisplay,title:_("Start with the panel open"),listeners:{collapse:function(){new ui.task.UpdateConfTask({module:"allFiles",itemName:"toolsPanelDisplay",value:false})},expand:function(){new ui.task.UpdateConfTask({module:"allFiles",itemName:"toolsPanelDisplay",value:true})}},items:[{xtype:"spinnerfield",width:60,name:"allFiles.toolsPanelWidth",module:"allFiles",itemName:"toolsPanelWidth",value:PhDOE.user.conf.allFiles.toolsPanelWidth||375,fieldLabel:_("Panel width"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}}]}]}]}]});ui.cmp._EditorConf.card6.superclass.initComponent.call(this)}});ui.cmp.EditorConf=Ext.extend(Ext.Window,{id:"win-conf",layout:"border",width:700,height:470,iconCls:"iconConf",title:_("Configuration"),modal:true,plain:true,bodyBorder:false,closeAction:"hide",buttons:[{text:_("Close"),handler:function(){Ext.getCmp("win-conf").hide()}}],listeners:{show:function(){var c=Ext.getCmp("conf-menu-view");c.select(c.getNode(0))}},initComponent:function(){if(PhDOE.user.lang==="en"){ui.cmp._EditorConf.menuStore.loadData(ui.cmp._EditorConf.menuDefEn)}else{ui.cmp._EditorConf.menuStore.loadData(ui.cmp._EditorConf.menuDefNonEn)}Ext.apply(this,{items:[{id:"confMenu",region:"west",border:false,width:190,autoScroll:true,items:[new ui.cmp._EditorConf.viewMenu()]},{id:"confCard",region:"center",border:false,layout:"card",width:375,frame:true,activeItem:0,bbar:new Ext.ux.StatusBar({defaultText:_("All changes take effect immediately"),defaultIconCls:"confStatusBar"}),items:[new ui.cmp._EditorConf.card1(),new ui.cmp._EditorConf.card2(),new ui.cmp._EditorConf.card3(),new ui.cmp._EditorConf.card4(),new ui.cmp._EditorConf.card5(),new ui.cmp._EditorConf.card6()]}]});ui.cmp.EditorConf.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._EmailPrompt");ui.cmp.EmailPrompt=Ext.extend(Ext.Window,{title:_("Send an email"),width:500,height:300,minWidth:300,minHeight:200,layout:"fit",plain:true,bodyStyle:"padding:5px;",buttonAlign:"center",iconCls:"iconSendEmail",closeAction:"hide",buttons:[{text:_("Send"),handler:function(){var d=this.ownerCt.ownerCt,c=d.findByType("form").shift().getForm().getValues();XHR({params:{task:"sendEmail",to:c.to,subject:c.subject,msg:c.msg},success:function(){d.hide();Ext.Msg.alert(_("Status"),String.format(_("Email sent to {0} with success!"),d.name.ucFirst()),Ext.emptyFn)},failure:function(){PhDOE.winForbidden()}})}},{text:_("Cancel"),handler:function(){this.ownerCt.ownerCt.hide()}}],setData:function(d,c){this.name=d;this.email=c;this.items.items[0].items.items[0].setValue('"'+this.name.ucFirst()+'" <'+this.email+">");this.items.items[0].items.items[1].setValue("");this.items.items[0].items.items[2].setValue("")},initComponent:function(){Ext.apply(this,{items:new Ext.form.FormPanel({baseCls:"x-plain",labelWidth:55,defaultType:"textfield",items:[{name:"to",fieldLabel:_("Send To"),readOnly:true,anchor:"100%",value:""},{name:"subject",fieldLabel:_("Subject"),anchor:"100%"},{name:"msg",xtype:"textarea",hideLabel:true,anchor:"100% -53"}]})});ui.cmp.EmailPrompt.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._EntitiesAcronymsPanel");ui.cmp._EntitiesAcronymsPanel.grid=Ext.extend(Ext.grid.GridPanel,{onRowClick:function(c){var d=c.getSelectionModel().getSelected().data;Ext.getCmp(this.dataType+"-details-"+this.fid).update(d.value)},onRowDblClick:function(d){var f=d.getSelectionModel().getSelected().data,e=Ext.getCmp(this.prefix+"-"+this.ftype+"-FILE-"+this.fid),c=Ext.util.JSON.decode(e.getCursorPosition()),g=(this.dataType==="entities")?"&"+f.items+";":""+f.items+"";e.insertIntoLine(c.line,c.caracter,g)},initComponent:function(){var c;if(this.dataType==="entities"){c="./do/getEntities"}else{if(this.dataType==="acronyms"){c="./do/getAcronyms"}}Ext.apply(this,{region:"center",split:true,loadMask:true,autoScroll:true,bodyBorder:false,border:false,autoExpandColumn:this.dataType,columns:[{id:"items",header:_("Items"),sortable:true,dataIndex:"items"},{header:_("From"),sortable:true,dataIndex:"from",width:50}],viewConfig:{forceFit:true,emptyText:'
'+_("You must manually load this data.
Use the refresh button !")+"

"+_("(You can change this behavior by setting an option in the configuration window)")+"
",deferEmptyText:false},sm:new Ext.grid.RowSelectionModel({singleSelect:true}),store:new Ext.data.Store({autoLoad:this.loadStore,proxy:new Ext.data.HttpProxy({url:c}),listeners:{scope:this,load:function(){if(this.dataType==="entities"){Ext.getCmp(this.prefix+"-"+this.fid).panEntities=true}else{if(this.dataType==="acronyms"){Ext.getCmp(this.prefix+"-"+this.fid).panAcronyms=true}}Ext.getCmp("main-panel").fireEvent("tabLoaded",this.prefix,this.fid)}},reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"from"},{name:"items"},{name:"value"}]})}),tbar:[{scope:this,tooltip:_("Load/Refresh"),iconCls:"iconRefresh",handler:function(){this.store.reload()}},_("Filter: ")," ",new Ext.form.TwinTriggerField({width:180,hideTrigger1:true,enableKeyEvents:true,validateOnBlur:false,validationEvent:false,trigger1Class:"x-form-clear-trigger",trigger2Class:"x-form-search-trigger",listeners:{specialkey:function(d,g){if(g.getKey()===g.ENTER){this.onTrigger2Click()}}},onTrigger1Click:function(){this.setValue("");this.triggers[0].hide();this.setSize(180,10);this.ownerCt.ownerCt.store.clearFilter()},onTrigger2Click:function(){var d=this.getValue(),e;if(d===""||d.length<3){this.markInvalid(_("Your filter must contain at least 3 characters"));return}this.clearInvalid();this.triggers[0].show();this.setSize(180,10);e=new RegExp(d,"i");this.ownerCt.ownerCt.store.filterBy(function(f){if(e.test(f.data.from)||e.test(f.data.items)||e.test(f.data.value)){return true}else{return false}},this)}})]});ui.cmp._EntitiesAcronymsPanel.grid.superclass.initComponent.call(this);this.on("rowclick",this.onRowClick,this);this.on("rowdblclick",this.onRowDblClick,this)}});ui.cmp.EntitiesAcronymsPanel=Ext.extend(Ext.Panel,{initComponent:function(){var c;if(this.dataType==="entities"){c=_("Click on a row to display the content of the entitie.
Double-click on it to insert it at the cursor position.")}else{if(this.dataType==="acronyms"){c=_("Click on a row to display the content of the acronym.
Double-click on it to insert it at the cursor position.")}}Ext.apply(this,{layout:"border",border:false,items:[new ui.cmp._EntitiesAcronymsPanel.grid({dataType:this.dataType,prefix:this.prefix,fid:this.fid,ftype:this.ftype,loadStore:this.loadStore}),{xtype:"panel",id:this.dataType+"-details-"+this.fid,region:"south",split:true,height:100,autoScroll:true,bodyBorder:false,bodyCssClass:this.dataType+"-details",html:c}]});ui.cmp.EntitiesAcronymsPanel.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._ErrorFileGrid");ui.cmp._ErrorFileGrid.store=new Ext.data.GroupingStore({proxy:new Ext.data.HttpProxy({url:"./do/getFilesError"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"path"},{name:"name"},{name:"maintainer"},{name:"type"},{name:"value_en"},{name:"value_lang"},{name:"fileModifiedEN"},{name:"fileModifiedLang"}]}),sortInfo:{field:"path",direction:"ASC"},groupField:"path",listeners:{datachanged:function(e){var c=e.getCount(),d=false;if(!PhDOE.user.isAnonymous){e.each(function(f){if(f.data.maintainer==PhDOE.user.login){d++}},this)}Ext.getDom("acc-error-nb").innerHTML=c+(d?(" - "+String.format(_("{0} mine"),d)):"")}}});ui.cmp._ErrorFileGrid.columns=[{id:"name",header:_("Files"),sortable:true,dataIndex:"name",renderer:function(c,f,d){var h="",g,e;if(d.data.fileModifiedEN){g=Ext.util.JSON.decode(d.data.fileModifiedEN);if(g.user===PhDOE.user.login&&g.anonymousIdent===PhDOE.user.anonymousIdent){h=_("File EN modified by me")+"
"}else{h=String.format(_("File EN modified by {0}"),g.user)+"
"}}if(d.data.fileModifiedLang){e=Ext.util.JSON.decode(d.data.fileModifiedLang);if(e.user===PhDOE.user.login&&e.anonymousIdent===PhDOE.user.anonymousIdent){h+=String.format(_("File {0} modified by me"),PhDOE.user.lang.ucFirst())}else{h+=String.format(_("File {0} modified by {1}"),PhDOE.user.lang.ucFirst(),e.user)}}if(h!==""){return""+c+""}else{return c}}},{header:_("Type"),width:45,sortable:true,dataIndex:"type"},{header:_("Maintainer"),width:45,sortable:true,dataIndex:"maintainer"},{header:_("Path"),dataIndex:"path",hidden:true}];ui.cmp._ErrorFileGrid.view=new Ext.grid.GroupingView({emptyText:'
'+_("No Files")+"
",deferEmptyText:false,forceFit:true,startCollapsed:true,groupTextTpl:'{[values.rs[0].data.path]} ({[values.rs.length]} {[values.rs.length > 1 ? "'+_("Files")+'" : "'+_("File")+'"]})',getRowClass:function(c){if(c.data.fileModifiedEN||c.data.fileModifiedLang){var e=Ext.util.JSON.decode(c.data.fileModifiedEN),d=Ext.util.JSON.decode(c.data.fileModifiedLang);return((e.user===PhDOE.user.login&&e.anonymousIdent===PhDOE.user.anonymousIdent)||(d.user===PhDOE.user.login&&d.anonymousIdent===PhDOE.user.anonymousIdent))?"fileModifiedByMe":"fileModifiedByAnother"}return false}});ui.cmp._ErrorFileGrid.menu=function(c){Ext.apply(this,c);this.init();ui.cmp._ErrorFileGrid.menu.superclass.constructor.call(this)};Ext.extend(ui.cmp._ErrorFileGrid.menu,Ext.menu.Menu,{init:function(){Ext.apply(this,{items:[{scope:this,text:""+_("Edit in a new tab")+"",iconCls:"iconFilesError",handler:function(){this.grid.fireEvent("rowdblclick",this.grid,this.rowIdx,this.event)}},{scope:this,hidden:this.hideDiffMenu,text:_("View diff..."),iconCls:"iconViewDiff",menu:new Ext.menu.Menu({items:[{scope:this,hidden:(this.grid.store.getAt(this.rowIdx).data.fileModifiedEN===false),text:String.format(_("... of the {0} file"),"EN"),handler:function(){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",FileName:this.fname,FilePath:"en"+this.fpath})}},{scope:this,hidden:(this.grid.store.getAt(this.rowIdx).data.fileModifiedLang===false),text:String.format(_("... of the {0} file"),PhDOE.user.lang.ucFirst()),handler:function(){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",FileName:this.fname,FilePath:PhDOE.user.lang+this.fpath})}}]})},"-",{text:_("About error type"),iconCls:"iconHelp",handler:function(){if(!Ext.getCmp("main-panel").findById("FE-help")){Ext.getCmp("main-panel").add({id:"FE-help",title:_("About error type"),iconCls:"iconHelp",closable:true,autoScroll:true,autoLoad:"./error"})}Ext.getCmp("main-panel").setActiveTab("FE-help")}}]})}});ui.cmp.ErrorFileGrid=Ext.extend(Ext.grid.GridPanel,{loadMask:true,border:false,autoExpandColumn:"name",enableDragDrop:true,ddGroup:"mainPanelDDGroup",view:ui.cmp._ErrorFileGrid.view,columns:ui.cmp._ErrorFileGrid.columns,listeners:{render:function(c){c.view.refresh()}},onRowContextMenu:function(d,j,h){h.stopEvent();var g=d.store.getAt(j).data,f=g.path,c=g.name;d.getSelectionModel().selectRow(j);new ui.cmp._ErrorFileGrid.menu({hideDiffMenu:(g.fileModifiedEN===false&&g.fileModifiedLang===false),grid:d,event:h,rowIdx:j,lang:PhDOE.user.lang,fpath:f,fname:c}).showAt(h.getXY())},onRowDblClick:function(c,f,d){this.openFile(c.store.getAt(f).data.id)},openFile:function(j){var g=this.store.getById(j),f=g.data.path,c=g.data.name,h=Ext.util.md5("FE-"+PhDOE.user.lang+f+c),d=[],k,e;if(!Ext.getCmp("main-panel").findById("FE-"+h)){d=[];this.store.each(function(l){if(l.data.path===f&&l.data.name===c&&!d[l.data.type]){d.push(l.data.type)}});k=(PhDOE.user.lang==="en")?[new ui.cmp.VCSLogGrid({layout:"fit",title:String.format(_("{0} Log"),PhDOE.user.lang.ucFirst()),prefix:"FE-LANG",fid:h,fpath:PhDOE.user.lang+f,fname:c,loadStore:PhDOE.user.conf.error.toolsPanelLogLoad})]:[new ui.cmp.VCSLogGrid({layout:"fit",title:String.format(_("{0} Log"),PhDOE.user.lang.ucFirst()),prefix:"FE-LANG",fid:h,fpath:PhDOE.user.lang+f,fname:c,loadStore:PhDOE.user.conf.error.toolsPanelLogLoad}),new ui.cmp.VCSLogGrid({layout:"fit",title:String.format(_("{0} Log"),"En"),prefix:"FE-EN",fid:h,fpath:"en"+f,fname:c,loadStore:PhDOE.user.conf.error.toolsPanelLogLoad})];e=(PhDOE.user.lang==="en")?[new ui.cmp.FilePanel({id:"FE-LANG-PANEL-"+h,region:"center",title:String.format(_("{0} File: "),PhDOE.user.lang)+f+c,prefix:"FE",ftype:"LANG",spellCheck:PhDOE.user.conf.error.enableSpellCheckLang,spellCheckConf:{module:"error",itemName:"enableSpellCheckLang"},fid:h,fpath:f,fname:c,lang:PhDOE.user.lang,parser:"xml",storeRecord:g,syncScrollCB:false,syncScroll:false})]:[new ui.cmp.FilePanel({id:"FE-LANG-PANEL-"+h,region:"center",title:String.format(_("{0} File: "),PhDOE.user.lang.ucFirst())+f+c,prefix:"FE",ftype:"LANG",spellCheck:PhDOE.user.conf.error.enableSpellCheckLang,spellCheckConf:{module:"error",itemName:"enableSpellCheckLang"},fid:h,fpath:f,fname:c,lang:PhDOE.user.lang,parser:"xml",storeRecord:g,syncScrollCB:true,syncScroll:true,syncScrollConf:{module:"error",itemName:"syncScrollbars"}}),new ui.cmp.FilePanel({id:"FE-EN-PANEL-"+h,region:"east",title:_("en File: ")+f+c,prefix:"FE",ftype:"EN",original:true,readOnly:true,openInNewTabBtn:true,fid:h,fpath:f,fname:c,lang:"en",parser:"xml",storeRecord:g,syncScroll:true,syncScrollConf:{module:"error",itemName:"syncScrollbars"}})];Ext.getCmp("main-panel").add({id:"FE-"+h,title:c,layout:"border",iconCls:"iconTabError",closable:true,tabLoaded:false,panVCSLang:!PhDOE.user.conf.errorDisplayLog,panVCSEn:(PhDOE.user.lang==="en")?true:!PhDOE.user.conf.errorDisplayLog,panLANGLoaded:false,panENLoaded:(PhDOE.user.lang==="en")?true:false,originTitle:c,defaults:{split:true},tabTip:String.format(_("File with error : in {0}"),f),listeners:{resize:function(l){(PhDOE.user.lang!=="en")?Ext.getCmp("FE-EN-PANEL-"+h).setWidth(l.getWidth()/2):""}},items:[{xtype:"panel",id:"FE-error-desc-"+h,region:"north",layout:"fit",title:_("Error description"),iconCls:"iconFilesError",collapsedIconCls:"iconFilesError",plugins:[Ext.ux.PanelCollapsedTitle],height:PhDOE.user.conf.error.descPanelHeight||150,collapsible:true,collapsed:!PhDOE.user.conf.error.descPanelDisplay,autoScroll:true,autoLoad:"./error?dir="+f+"&file="+c,listeners:{collapse:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"error",itemName:"descPanelDisplay",value:false})}},expand:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"error",itemName:"descPanelDisplay",value:true})}},resize:function(o,l,m){if(this.ownerCt.tabLoaded&&m&&m>50&&m!=PhDOE.user.conf.error.descPanelHeight){new ui.task.UpdateConfTask({module:"error",itemName:"descPanelHeight",value:m})}}}},{region:"west",xtype:"panel",title:_("Tools"),iconCls:"iconConf",collapsedIconCls:"iconConf",plugins:[Ext.ux.PanelCollapsedTitle],collapsible:true,collapsed:!PhDOE.user.conf.error.toolsPanelDisplay,layout:"fit",bodyBorder:false,width:PhDOE.user.conf.error.toolsPanelWidth||375,listeners:{collapse:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"error",itemName:"toolsPanelDisplay",value:false})}},expand:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"error",itemName:"toolsPanelDisplay",value:true})}},resize:function(l,m){if(this.ownerCt.tabLoaded&&m&&m!=PhDOE.user.conf.error.toolsPanelWidth){new ui.task.UpdateConfTask({module:"error",itemName:"toolsPanelWidth",value:m})}}},items:{xtype:"tabpanel",activeTab:0,tabPosition:"bottom",enableTabScroll:true,defaults:{autoScroll:true},items:[k,new ui.cmp.DictionaryGrid({layout:"fit",title:_("Dictionary"),prefix:"FE",fid:h}),{title:_("Entities"),layout:"fit",items:[new ui.cmp.EntitiesAcronymsPanel({dataType:"entities",prefix:"FE",ftype:"LANG",fid:h,loadStore:PhDOE.user.conf.error.toolsPanelEntitiesLoad})]},{title:_("Acronyms"),layout:"fit",items:[new ui.cmp.EntitiesAcronymsPanel({dataType:"acronyms",prefix:"FE",ftype:"LANG",fid:h,loadStore:PhDOE.user.conf.error.toolsPanelAcronymsLoad})]}]}},e]})}Ext.getCmp("main-panel").setActiveTab("FE-"+h)},initComponent:function(){Ext.apply(this,{store:ui.cmp._ErrorFileGrid.store,tbar:[_("Filter: ")," ",new Ext.form.TwinTriggerField({id:"FE-filter",width:180,hideTrigger1:true,enableKeyEvents:true,validateOnBlur:false,validationEvent:false,trigger1Class:"x-form-clear-trigger",trigger2Class:"x-form-search-trigger",listeners:{keypress:function(c,d){if(d.getKey()===d.ENTER){this.onTrigger2Click()}}},onTrigger1Click:function(){this.setValue("");this.triggers[0].hide();this.setSize(180,10);ui.cmp._ErrorFileGrid.instance.store.clearFilter()},onTrigger2Click:function(){var c=this.getValue(),d;if(c===""||c.length<3){this.markInvalid(_("Your filter must contain at least 3 characters"));return}this.clearInvalid();this.triggers[0].show();this.setSize(180,10);d=new RegExp(c,"i");ui.cmp._ErrorFileGrid.instance.store.filterBy(function(e){if(d.test(e.data.path)||d.test(e.data.name)||d.test(e.data.maintainer)||d.test(e.data.type)){return true}else{return false}},this)}})]});ui.cmp.ErrorFileGrid.superclass.initComponent.call(this);this.on("rowcontextmenu",this.onRowContextMenu,this);this.on("rowdblclick",this.onRowDblClick,this);if(PhDOE.user.lang==="en"){this.getColumnModel().setHidden(2,true)}}});ui.cmp._ErrorFileGrid.instance=null;ui.cmp.ErrorFileGrid.getInstance=function(c){if(!ui.cmp._ErrorFileGrid.instance){if(!c){c={}}ui.cmp._ErrorFileGrid.instance=new ui.cmp.ErrorFileGrid(c)}return ui.cmp._ErrorFileGrid.instance};Ext.namespace("ui","ui.cmp");ui.cmp.ExecDiff=Ext.extend(Ext.Panel,{layout:"fit",title:_("Diff From VCS"),iconCls:"iconDiffView",collapsedIconCls:"iconDiffView",autoScroll:true,plugins:[Ext.ux.PanelCollapsedTitle],onRender:function(d,c){ui.cmp.ExecDiff.superclass.onRender.call(this,d,c);this.el.mask(' '+_("Loading..."));XHR({scope:this,params:{task:"getDiff",DiffType:"vcs",FilePath:"en"+this.fpath,FileName:this.fname,Rev1:this.rev1,Rev2:this.rev2},success:function(e){var f=Ext.util.JSON.decode(e.responseText);Ext.get(this.prefix+"-diff-"+this.fid).dom.innerHTML=f.content;this.el.unmask()},callback:function(){Ext.getCmp(this.prefix+"-"+this.fid).panDiffLoaded=true;Ext.getCmp("main-panel").fireEvent("tabLoaded",this.prefix,this.fid)}})},initComponent:function(){Ext.apply(this,{html:'
'});ui.cmp.ExecDiff.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._FilePanel");Ext.namespace("ui.cmp._FilePanel.tbar.menu");Ext.namespace("ui.cmp._FilePanel.tbar.items");ui.cmp._FilePanel.tbar.items.undoRedo=function(c){Ext.apply(this,c);this.init();ui.cmp._FilePanel.tbar.items.undoRedo.superclass.constructor.call(this)};Ext.extend(ui.cmp._FilePanel.tbar.items.undoRedo,Ext.ButtonGroup,{init:function(){Ext.apply(this,{id:this.id_prefix+"-FILE-"+this.fid+"-grp-undoRedo",items:[{id:this.id_prefix+"-FILE-"+this.fid+"-btn-undo",scope:this,tooltip:_("Undo"),disabled:true,iconCls:"iconUndo",handler:function(){Ext.getCmp(this.id_prefix+"-FILE-"+this.fid).undo()}},{id:this.id_prefix+"-FILE-"+this.fid+"-btn-redo",scope:this,tooltip:_("Redo"),disabled:true,iconCls:"iconRedo",handler:function(){Ext.getCmp(this.id_prefix+"-FILE-"+this.fid).redo()}}]})}});ui.cmp._FilePanel.tbar.items.usernotes=function(c){Ext.apply(this,c);this.init();ui.cmp._FilePanel.tbar.items.usernotes.superclass.constructor.call(this)};Ext.extend(ui.cmp._FilePanel.tbar.items.usernotes,Ext.ButtonGroup,{init:function(){Ext.apply(this,{items:[{xtype:"usernotes",file:this.file,fid:Ext.id()}]})}});ui.cmp._FilePanel.tbar.items.common=function(c){Ext.apply(this,c);this.init();ui.cmp._FilePanel.tbar.items.common.superclass.constructor.call(this)};Ext.extend(ui.cmp._FilePanel.tbar.items.common,Ext.ButtonGroup,{init:function(){Ext.apply(this,{items:[{scope:this,tooltip:_("Close Tab"),iconCls:"iconClose",handler:function(){Ext.getCmp("main-panel").remove(this.prefix+"-"+this.fid)}},{id:this.prefix+"-"+this.fid+"-btn-tabLeft-"+this.ftype,scope:this,tooltip:_("Go to previous tab"),iconCls:"iconArrowLeft",handler:this.goToPreviousTab},{id:this.prefix+"-"+this.fid+"-btn-tabRight-"+this.ftype,scope:this,tooltip:_("Go to next tab"),disabled:true,iconCls:"iconArrowRight",handler:this.goToNextTab}]})}});ui.cmp._FilePanel.tbar.menu.lang=function(c){Ext.apply(this,c);this.init();ui.cmp._FilePanel.tbar.menu.lang.superclass.constructor.call(this)};Ext.extend(ui.cmp._FilePanel.tbar.menu.lang,Ext.Toolbar.Button,{text:_("MarkUp"),iconCls:"iconInsertCode",init:function(){Ext.apply(this,{menu:new Ext.menu.Menu({items:[{scope:this,text:_("Reviewed tag"),handler:function(){Ext.getCmp(this.comp_id).insertLine(2,"");Ext.getCmp(this.comp_id).focus()}},{scope:this,text:_("Revcheck tag"),handler:function(){Ext.getCmp(this.comp_id).insertLine(1,"");Ext.getCmp(this.comp_id).focus()}}]})})}});ui.cmp._FilePanel.tbar.menu.en=function(c){Ext.apply(this,c);this.init();ui.cmp._FilePanel.tbar.menu.en.superclass.constructor.call(this)};Ext.extend(ui.cmp._FilePanel.tbar.menu.en,Ext.Toolbar.Button,{text:_("MarkUp"),iconCls:"iconInsertCode",init:function(){Ext.apply(this,{menu:new Ext.menu.Menu({items:[{scope:this,text:_("Description section"),handler:function(){var c=Ext.getCmp(this.comp_id).getCursor();Ext.getCmp(this.comp_id).insertLine(c.line,[' \r\n ',"&reftitle.description;\r\n ","\r\n ","\r\n ","thereturned typefunc_name\r\n ","\r\n ","param1typefirstparameter\r\n ","\r\n ",'intsecondparameter\r\n ',"\r\n ","\r\n ","\r\n ","\r\n ","The function description goes here.\r\n ","\r\n ",""].join(""));Ext.getCmp(this.comp_id).focus()}},{scope:this,text:_("Parameters section"),handler:function(){var c=Ext.getCmp(this.comp_id).getCursor();Ext.getCmp(this.comp_id).insertLine(c.line,['\r\n\r\n',"&reftitle.parameters;\r\n","\r\n","\r\n","\r\n","firstparameter\r\n","\r\n","\r\n","Its description\r\n","\r\n","\r\n","\r\n","\r\n","\r\n","secondparameter\r\n","\r\n","\r\n","\r\n","Its description\r\n","\r\n","\r\n","\r\n","\r\n","\r\n",""].join(""));Ext.getCmp(this.comp_id).focus()}},{scope:this,text:_("Return section"),handler:function(){var c=Ext.getCmp(this.comp_id).getCursor();Ext.getCmp(this.comp_id).insertLine(c.line,['\r\n\r\n',"&reftitle.returnvalues;\r\n","\r\n","What this function returns, first on success, then failure.\r\n","If simply true on success and false on failure, just use &return.success; here.\r\n","\r\n",""].join(""));Ext.getCmp(this.comp_id).focus()}},{scope:this,text:_("Error section"),handler:function(){var c=Ext.getCmp(this.comp_id).getCursor();Ext.getCmp(this.comp_id).insertLine(c.line,['\r\n\r\n',"&reftitle.errors;\r\n","\r\n","When does this function issue E_* level errors, and/or throw exceptions.\r\n","\r\n","\r\n"].join(""));Ext.getCmp(this.comp_id).focus()}},{scope:this,text:_("Unicode section"),handler:function(){var c=Ext.getCmp(this.comp_id).getCursor();Ext.getCmp(this.comp_id).insertLine(c.line,['\r\n\r\n',"&reftitle.unicode;\r\n","\r\n","Information specific to unicode, from the PHP 6 changes.\r\n","\r\n",""].join(""));Ext.getCmp(this.comp_id).focus()}},{scope:this,text:_("Changelog section"),handler:function(){var c=Ext.getCmp(this.comp_id).getCursor();Ext.getCmp(this.comp_id).insertLine(c.line,['\r\n\r\n',"&reftitle.changelog;\r\n","\r\n","\r\n",'\r\n',"\r\n","\r\n","&Version;\r\n","&Description;\r\n","\r\n","\r\n","\r\n","\r\n","Enter the version of change here\r\n","\r\n","Describe the change\r\n","\r\n","\r\n","\r\n","\r\n","\r\n","\r\n",""].join(""));Ext.getCmp(this.comp_id).focus()}},{scope:this,text:_("Examples section"),handler:function(){var c=Ext.getCmp(this.comp_id).getCursor();Ext.getCmp(this.comp_id).insertLine(c.line,['\r\n\r\n',"&reftitle.examples;\r\n","\r\n",'\r\n',"<function>function-name</function> example\r\n","\r\n","Any text that describes the purpose of the example, or what\r\n","goes on in the example should be here. (Inside the tag, not out).\r\n","\r\n",'\r\n',"\r\n","]]>\r\n","\r\n","&example.outputs.similar;\r\n","\r\n","\r\n","\r\n","\r\n","\r\n",""].join(""));Ext.getCmp(this.comp_id).focus()}},{scope:this,text:_("Notes section"),handler:function(){var c=Ext.getCmp(this.comp_id).getCursor();Ext.getCmp(this.comp_id).insertLine(c.line,['\r\n\r\n',"&reftitle.notes;\r\n","\r\n","\r\n","Any notes that don't fit anywhere else should go here.\r\n","90% of the time, notes, warnings or cautions are better placed in the\r\n","parameters section. Consider that before using this section!\r\n","\r\n","\r\n","¬e.language-construct;\r\n","¬e.not-bin-safe;\r\n","¬e.registerglobals;\r\n",""].join(""));Ext.getCmp(this.comp_id).focus()}},{scope:this,text:_("SeeAlso section"),handler:function(){var c=Ext.getCmp(this.comp_id).getCursor();Ext.getCmp(this.comp_id).insertLine(c.line,['\r\n\r\n',"&reftitle.seealso;\r\n","\r\n","\r\n","somefunc\r\n","another_func\r\n",'The something appendix\r\n',"\r\n","\r\n",""].join(""));Ext.getCmp(this.comp_id).focus()}}]})})}});ui.cmp._FilePanel.tbar.items.reindentTags=function(c){Ext.apply(this,c);this.init();ui.cmp._FilePanel.tbar.items.reindentTags.superclass.constructor.call(this)};Ext.extend(ui.cmp._FilePanel.tbar.items.reindentTags,Ext.ButtonGroup,{init:function(){Ext.apply(this,{id:this.id_prefix+"-FILE-"+this.fid+"-grp-tools",items:[{scope:this,tooltip:_("Check XML with XmlLint"),iconCls:"iconXml",handler:function(c){new ui.task.CheckXml({idPrefix:this.id_prefix,fid:this.fid})}},(this.lang==="en")?new ui.cmp._FilePanel.tbar.menu.en({comp_id:this.id_prefix+"-FILE-"+this.fid}):new ui.cmp._FilePanel.tbar.menu.lang({comp_id:this.id_prefix+"-FILE-"+this.fid}),{scope:this,text:_("Editor option"),iconCls:"iconConf",menu:[{scope:this,text:_("Re-indent all this file"),iconCls:"iconIndent",handler:function(){Ext.getCmp(this.id_prefix+"-FILE-"+this.fid).reIndentAll()}},{scope:this,text:_("Enable line wrapping"),checked:((PhDOE.user.conf.main.lineWrapping===true)?true:false),checkHandler:function(d,c){var e=(c)?true:false;Ext.getCmp(this.id_prefix+"-FILE-"+this.fid).setOption("lineWrapping",e);new ui.task.UpdateConfTask({module:"main",itemName:"lineWrapping",value:c,notify:false})}},{scope:this,text:_("Choose a Theme"),iconCls:"iconThemes",onThemeChange:function(){var c=Ext.getCmp(this.ownerCt.ownerCt.ownerCt.id_prefix+"-FILE-"+this.ownerCt.ownerCt.ownerCt.fid);Ext.each(this.menu.items.items,function(d){if(d.checked===true){c.switchTheme(d.themeName);new ui.task.UpdateConfTask({module:"main",itemName:"editorTheme",value:d.themeName,notify:false})}})},menu:{items:[{text:_("No theme"),themeName:false,checked:(PhDOE.user.conf.main.editorTheme===false),group:"cmd2-theme",checkHandler:function(){this.ownerCt.ownerCt.onThemeChange()}},{text:_("Default theme"),themeName:"default",checked:(PhDOE.user.conf.main.editorTheme==="default"||PhDOE.user.conf.main.editorTheme==="undefined"),group:"cmd2-theme",checkHandler:function(){this.ownerCt.ownerCt.onThemeChange()}},{text:_("Cobalt"),themeName:"cobalt",checked:(PhDOE.user.conf.main.editorTheme==="cobalt"),group:"cmd2-theme",checkHandler:function(){this.ownerCt.ownerCt.onThemeChange()}},{text:_("Eclipse"),themeName:"eclipse",checked:(PhDOE.user.conf.main.editorTheme==="eclipse"),group:"cmd2-theme",checkHandler:function(){this.ownerCt.ownerCt.onThemeChange()}},{text:_("Elegant"),themeName:"elegant",checked:(PhDOE.user.conf.main.editorTheme==="elegant"),group:"cmd2-theme",checkHandler:function(){this.ownerCt.ownerCt.onThemeChange()}},{text:_("Monokai"),themeName:"monokai",checked:(PhDOE.user.conf.main.editorTheme==="monokai"),group:"cmd2-theme",checkHandler:function(){this.ownerCt.ownerCt.onThemeChange()}},{text:_("Neat"),themeName:"neat",checked:(PhDOE.user.conf.main.editorTheme==="neat"),group:"cmd2-theme",checkHandler:function(){this.ownerCt.ownerCt.onThemeChange()}},{text:_("Night"),themeName:"night",checked:(PhDOE.user.conf.main.editorTheme==="night"),group:"cmd2-theme",checkHandler:function(){this.ownerCt.ownerCt.onThemeChange()}},{text:_("RubyBlue"),themeName:"rubyblue",checked:(PhDOE.user.conf.main.editorTheme==="rubyblue"),group:"cmd2-theme",checkHandler:function(){this.ownerCt.ownerCt.onThemeChange()}}]}}]}]})}});ui.cmp.FilePanel=Ext.extend(Ext.form.FormPanel,{activeScroll:false,goToPreviousTab:function(){var c=this.prefix+"-"+this.fid,e=Ext.getCmp("main-panel").layout.container.items.items,g,f,d;for(d=0;d','',_("Line: "),'-','  ',_("Col: "),'-',"  "].join(""))}}}]:[{xtype:"panel",height:22,baseCls:"",bodyStyle:"padding-top:5px;",html:['
','',_("Line: "),'-','  ',_("Col: "),'-',"
  "].join("")}];if(!this.readOnly){this.tbar=[new ui.cmp._FilePanel.tbar.items.common({prefix:this.prefix,fid:this.fid,ftype:this.ftype,goToPreviousTab:this.goToPreviousTab,goToNextTab:this.goToNextTab}),{xtype:"buttongroup",id:c+"-FILE-"+this.fid+"-grp-save",items:[{id:c+"-FILE-"+this.fid+"-btn-save",scope:this,tooltip:_("Save this file (CTRL+s)"),iconCls:"iconSaveFile",disabled:true,handler:function(){if(this.prefix==="AF"){new ui.task.SaveFileTask({prefix:this.prefix,ftype:this.ftype,fid:this.fid,fpath:this.fpath,fname:this.fname,lang:this.lang,storeRecord:this.storeRecord});return}if(this.prefix==="FNT"){new ui.task.SaveTransFileTask({prefix:this.prefix,ftype:this.ftype,fid:this.fid,fpath:this.fpath,fname:this.fname,lang:this.lang,storeRecord:this.storeRecord});return}if(!PhDOE.user.conf.main.onSaveFile){PhDOE.user.conf.main.onSaveFile="ask-me"}switch(PhDOE.user.conf.main.onSaveFile){case"always":new ui.task.CheckFileTask({prefix:this.prefix,ftype:this.ftype,fid:this.fid,fpath:this.fpath,fname:this.fname,lang:this.lang,storeRecord:this.storeRecord});break;case"never":new ui.task.SaveFileTask({prefix:this.prefix,ftype:this.ftype,fid:this.fid,fpath:this.fpath,fname:this.fname,lang:this.lang,storeRecord:this.storeRecord});break;case"ask-me":Ext.MessageBox.show({title:_("Confirm"),msg:_("Do you want to check for errors before saving?"),icon:Ext.MessageBox.INFO,buttons:Ext.MessageBox.YESNOCANCEL,scope:this,fn:function(d){if(d==="no"){new ui.task.SaveFileTask({prefix:this.prefix,ftype:this.ftype,fid:this.fid,fpath:this.fpath,fname:this.fname,lang:this.lang,storeRecord:this.storeRecord})}else{if(d==="yes"){new ui.task.CheckFileTask({prefix:this.prefix,ftype:this.ftype,fid:this.fid,fpath:this.fpath,fname:this.fname,lang:this.lang,storeRecord:this.storeRecord})}}}});break}}}]},new ui.cmp._FilePanel.tbar.items.undoRedo({id_prefix:c,fid:this.fid}),new ui.cmp._FilePanel.tbar.items.reindentTags({id_prefix:c,fid:this.fid,lang:this.lang}),{scope:this,iconCls:"iconZoom",tooltip:_("Expand in a popup"),handler:function(d){var e=new Ext.Window({title:this.originTitle,bodyStyle:"background-color:white",maximized:true,animateTarget:d.el,items:[{xtype:"codemirror",id:c+"-FILE-"+this.fid+"maximized",readOnly:false,lineWrapping:PhDOE.user.conf.main.lineWrapping,theme:PhDOE.user.conf.main.editorTheme,parser:this.parser,isModified:false,listeners:{scope:this,initialize:function(){var h=Ext.getCmp(c+"-FILE-"+this.fid+"maximized"),f=Ext.getCmp(c+"-FILE-"+this.fid).getValue();h.setValue(f);var g=new Ext.util.DelayedTask(function(){if(e.rendered){h.resize(false,e.getInnerHeight()+89)}else{g.delay(500)}});g.delay(500)}}}],listeners:{scope:this,beforeclose:function(g){var f=g.items.items[0].getValue();Ext.getCmp(c+"-FILE-"+this.fid).setValue(f)}}});e.show()}},{scope:this,iconCls:"iconView",hidden:!(this.lang==="en"&&this.fname.substr(-3)==="xml"),tooltip:_("Preview in a popup"),handler:function(){var d=Ext.getCmp(c+"-FILE-"+this.fid).isModified;if(d){Ext.Msg.alert(_("Information"),_("You must save your file in order to preview the result."),function(e){if(e=="ok"){new ui.cmp.PreviewFile({path:this.lang+this.fpath+this.fname})}},this)}else{new ui.cmp.PreviewFile({path:this.lang+this.fpath+this.fname})}}},"->",new ui.cmp._FilePanel.tbar.items.usernotes({fid:this.fid,file:this.lang+this.fpath+this.fname})]}else{this.tbar=[new ui.cmp._FilePanel.tbar.items.common({prefix:this.prefix,fid:this.fid,ftype:this.ftype,goToPreviousTab:this.goToPreviousTab,goToNextTab:this.goToNextTab}),{xtype:"buttongroup",hidden:(this.openInNewTabBtn!==true),scope:this,items:[{tooltip:_("Open for editing in a new Tab"),iconCls:"iconEditInNewTab",scope:this,handler:function(){ui.cmp.RepositoryTree.getInstance().openFile("byPath",this.lang+this.fpath,this.fname)}}]},"->",((this.ftype!=="GGTRANS")?new ui.cmp._FilePanel.tbar.items.usernotes({fid:this.fid,file:this.lang+this.fpath+this.fname}):"")]}Ext.apply(this,{title:this.title,cls:"code-mirror-panel",originTitle:this.title,items:[{xtype:"codemirror",id:c+"-FILE-"+this.fid,readOnly:this.readOnly,lineWrapping:PhDOE.user.conf.main.lineWrapping,theme:PhDOE.user.conf.main.editorTheme,parser:this.parser,isModified:false,listeners:{scope:this,initialize:function(){var e,d;if(this.isTrans){if(this.storeRecord.data.fileModified){e=this.lang+this.fpath;d=this.fname}else{e="en"+this.fpath;d=this.fname}}else{e=this.lang+this.fpath;d=this.fname}new ui.task.GetFileTask({prefix:this.prefix,ftype:this.ftype,original:this.original,fid:this.fid,fpath:e,freadOnly:this.readOnly,fname:d,skeleton:this.skeleton,storeRecord:this.storeRecord})},coderestored:function(){if(this.readOnly){return}if(Ext.getCmp(c+"-FILE-"+this.fid).isModified){Ext.getCmp(c+"-PANEL-"+this.fid).setTitle(Ext.getCmp(c+"-PANEL-"+this.fid).permlink+Ext.getCmp(c+"-PANEL-"+this.fid).originTitle);if((this.ftype==="LANG"&&PhDOE.user.lang!=="en")||this.ftype==="EN"){if((this.ftype==="EN"&&!Ext.getCmp(this.prefix+"-LANG-FILE-"+this.fid).isModified)||(this.ftype==="LANG"&&!Ext.getCmp(this.prefix+"-EN-FILE-"+this.fid).isModified)){Ext.getCmp(this.prefix+"-"+this.fid).setTitle(Ext.getCmp(this.prefix+"-"+this.fid).originTitle)}}else{Ext.getCmp(this.prefix+"-"+this.fid).setTitle(Ext.getCmp(this.prefix+"-"+this.fid).originTitle)}Ext.getCmp(c+"-FILE-"+this.fid+"-btn-save").disable();Ext.getCmp(c+"-FILE-"+this.fid).isModified=false}},codemodified:function(){if(this.readOnly){return}if(Ext.getCmp(c+"-FILE-"+this.fid+"-grp-save").disabled){return}var e=Ext.getCmp(c+"-FILE-"+this.fid),d=Ext.getCmp(c+"-PANEL-"+this.fid);if(!e.isModified){d.setTitle(d.permlink+d.originTitle+' ['+_("modified")+"]");Ext.getCmp(this.prefix+"-"+this.fid).setTitle(Ext.getCmp(this.prefix+"-"+this.fid).originTitle+' *');Ext.getCmp(c+"-FILE-"+this.fid+"-btn-save").enable();Ext.getCmp(c+"-FILE-"+this.fid+"-btn-undo").enable();e.isModified=true}},cursormove:function(d,e){Ext.get(c+"-status-line-"+this.fid).dom.innerHTML=d;Ext.get(c+"-status-col-"+this.fid).dom.innerHTML=e},scroll:function(g){var e,f,d;if(this.syncScroll&&PhDOE.user.conf[this.syncScrollConf.module][this.syncScrollConf.itemName]){switch(this.ftype){case"EN":if(this.prefix=="FNT"){e=this.prefix+"-TRANS"}else{e=this.prefix+"-LANG"}break;case"LANG":e=this.prefix+"-EN";break;case"TRANS":if(PhDOE.user.conf.newFile.secondPanel=="google"){e=this.prefix+"-GGTRANS"}if(PhDOE.user.conf.newFile.secondPanel=="originalFile"){e=this.prefix+"-EN"}break;case"GGTRANS":e=this.prefix+"-TRANS";break}f=Ext.getCmp(e+"-PANEL-"+this.fid);d=Ext.getCmp(e+"-FILE-"+this.fid);if(f.activeScroll===false){this.activeScroll=true;d.scrollTo(g)}else{f.activeScroll=false}}}}}]});ui.cmp.FilePanel.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp");ui.cmp.GoogleTranslationPanel=Ext.extend(Ext.FormPanel,{border:false,labelAlign:"top",bodyStyle:"padding:5px",autoScroll:true,getTranslation:function(c){new ui.task.GetGGTranslation({str:c})},initComponent:function(){Ext.apply(this,{items:[{xtype:"textarea",anchor:"90%",fieldLabel:String.format(_("String to translate (en => {0})"),PhDOE.user.lang),name:"GGTranslate-string",id:"GGTranslate-string",allowBlank:false},{scope:this,xtype:"button",text:_("Translate !"),id:"GGTranslate-btn",handler:function(){this.getTranslation(Ext.getCmp("GGTranslate-string").getValue())}},{xtype:"panel",anchor:"100%",border:false,bodyStyle:"padding:5px",html:'
'}]});ui.cmp.GoogleTranslationPanel.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._MainMenu");ui.cmp.MainMenu=function(c){Ext.apply(this,c);this.init();ui.cmp.MainMenu.superclass.constructor.call(this)};ui.cmp._MainMenu.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getAvailableLanguage"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"code",fields:[{name:"code"},{name:"iconCls"},{name:"name"}]})});ui.cmp._MainMenu.store.on("load",function(c){Ext.getDom("Info-Language").innerHTML=Ext.getDom("Topic-Language").innerHTML=c.getById(PhDOE.user.lang).data.name;c.each(function(d){var e=new Ext.menu.Item({text:d.data.name+" ("+d.data.code+")",iconCls:"mainMenuLang flags "+d.data.iconCls,disabled:(d.data.code===PhDOE.user.lang),handler:function(){XHR({params:{task:"switchLang",lang:d.data.code},success:function(){window.location.reload()}})}});Ext.getCmp("MenuLang-ct").add(e)})},this);Ext.extend(ui.cmp.MainMenu,Ext.menu.Menu,{id:"mainMenu",init:function(){var c=new Ext.menu.Menu({id:"MenuLang-ct"});Ext.apply(this,{items:[{text:_("Refresh all data"),disabled:(!PhDOE.user.isGlobalAdmin),iconCls:"iconRefresh",handler:function(){Ext.getBody().mask(' '+_("Verify if there is an update in progress. Please, wait..."));XHR({params:{task:"checkLockFile",lockFiles:"project_"+PhDOE.project+"_lock_update_repository|project_"+PhDOE.project+"_lock_apply_tools"},success:function(){Ext.getBody().unmask();Ext.MessageBox.show({title:_("Status"),msg:_("There is currently an update in progress.
You can't perform an update now."),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.INFO})},failure:function(){Ext.getBody().unmask();new ui.cmp.SystemUpdatePrompt().show(Ext.get("acc-need-update"))}})}},{text:_("Build tools"),handler:function(){return false},menu:new Ext.menu.Menu({items:[{text:_("Check build"),disabled:(!PhDOE.user.isGlobalAdmin&&!PhDOE.user.isLangAdmin),iconCls:"iconCheckBuild",handler:function(){Ext.getBody().mask(' '+_("Verify if there is a check in progress. Please, wait..."));XHR({params:{task:"checkLockFile",lockFile:"project_"+PhDOE.project+"_lock_check_build_"+PhDOE.user.lang},success:function(){Ext.getBody().unmask();Ext.MessageBox.show({title:_("Status"),msg:_("There is currently a check in progress for this language.
You can't perform a new check now."),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.INFO})},failure:function(){Ext.getBody().unmask();new ui.cmp.CheckBuildPrompt().show(Ext.get("acc-need-update"))}})}},{text:_("Show last failed build"),iconCls:"iconBuildStatus",handler:function(){var d=Ext.getCmp("tab-build-status");if(!d){Ext.getCmp("main-panel").add({id:"tab-build-status",title:_("Last failed build"),iconCls:"iconBuildStatus",layout:"fit",closable:true,items:[new ui.cmp.BuildStatus()]})}Ext.getCmp("main-panel").setActiveTab("tab-build-status")}}]})},{text:_("EN tools"),handler:function(){return false},menu:new Ext.menu.Menu({items:[{text:_("Script check entities"),iconCls:"iconCheckEntities",handler:function(){return false},menu:new Ext.menu.Menu({items:[{text:_("View the last result"),id:"btn-check-entities-view-last-result",iconCls:"iconTabView",handler:function(){var d=Ext.getCmp("tab-check-entities");if(!d){Ext.getCmp("main-panel").add({id:"tab-check-entities",title:_("Check entities"),iconCls:"iconCheckEntities",layout:"fit",closable:true,items:[new ui.cmp.CheckEntities()]})}Ext.getCmp("main-panel").setActiveTab("tab-check-entities")}},{text:_("Run this script"),iconCls:"iconRun",disabled:(PhDOE.user.isAnonymous),handler:function(){Ext.getBody().mask(' '+_("Verify if there is an entities check in progress. Please, wait..."));XHR({params:{task:"checkLockFile",lockFile:"project_"+PhDOE.project+"_lock_check_entities"},success:function(){Ext.getBody().unmask();Ext.MessageBox.show({title:_("Status"),msg:_("There is currently a check in progress for the entities.
You can't perform a new check now."),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.INFO})},failure:function(){Ext.getBody().unmask();if(!Ext.getCmp("win-check-entities")){new ui.cmp.CheckEntitiesPrompt()}Ext.getCmp("win-check-entities").show(Ext.get("mainMenu"))}})}}]})},{text:_("Script check document"),iconCls:"iconCheckDoc",handler:function(){var d=Ext.getCmp("tab-check-doc");if(!d){Ext.getCmp("main-panel").add({id:"tab-check-doc",title:"Check Doc",iconCls:"iconCheckDoc",layout:"fit",closable:true,items:[new ui.cmp.CheckDoc()]})}Ext.getCmp("main-panel").setActiveTab("tab-check-doc")}}]})},"-",{text:_("Configure"),iconCls:"iconConf",tooltip:"Configure this tool",id:"winconf-btn",handler:function(){if(!Ext.getCmp("win-conf")){new ui.cmp.EditorConf()}Ext.getCmp("win-conf").show(Ext.get("mainMenu"))}},"-",{id:"menuLang",iconCls:"iconSwitchLang",text:_("Switch to language..."),handler:function(){return false},menu:c},{text:_("Erase my personal data"),iconCls:"iconErasePersonalData",disabled:(PhDOE.user.isAnonymous),handler:function(){Ext.MessageBox.confirm(_("Confirm"),_("This action will erase your personal data. All content about this account will be deleted definitively. Are you sure you want to do that ?"),function(d){if(d==="yes"){Ext.getBody().mask(' '+_("Please, wait..."));XHR({params:{task:"erasePersonalData"},success:function(){Ext.getBody().unmask();Ext.MessageBox.show({title:_("Thanks !"),msg:_("Thank you for using this application !"),icon:Ext.MessageBox.INFO,buttons:Ext.MessageBox.OK,fn:function(){window.location.href="./do/logout?csrfToken="+csrfToken}})},failure:function(){Ext.getBody().unmask();PhDOE.winForbidden()}})}})}},{text:_("Log out"),iconCls:"iconLogOut",handler:function(){Ext.MessageBox.confirm(_("Confirm"),_("Are you sure you want to logout?"),function(d){if(d==="yes"){window.location.href="./do/logout?csrfToken="+csrfToken}})}},"-",{id:"tab-report-bug-btn",text:_("Report bugs"),iconCls:"iconBugs",handler:function(){if(!Ext.getCmp("main-panel").findById("tab-report-bug")){Ext.getCmp("main-panel").add({id:"tab-report-bug",xtype:"panel",title:_("Report bugs"),iconCls:"iconBugs",closable:true,layout:"fit",items:[new Ext.ux.IFrameComponent({id:"frame-tab-report-bug",url:"http://bugs.php.net/"})]});Ext.getCmp("main-panel").setActiveTab("tab-report-bug")}else{Ext.getCmp("main-panel").setActiveTab("tab-report-bug")}}},{id:"tab-documentation-btn",text:_("Documentation"),iconCls:"iconBook",handler:function(){if(!Ext.getCmp("main-panel").findById("tab-documentation")){Ext.getCmp("main-panel").add({id:"tab-documentation",xtype:"panel",title:_("Documentation"),iconCls:"iconBook",closable:true,layout:"fit",items:[new Ext.ux.IFrameComponent({id:"frame-tab-documentation",url:"https://wiki.php.net/doc/editor/"})]});Ext.getCmp("main-panel").setActiveTab("tab-documentation")}else{Ext.getCmp("main-panel").setActiveTab("tab-documentation")}}},{id:"tab-chat-btn",text:_("Chat with us on IRC !"),iconCls:"iconChat",handler:function(){if(!Ext.getCmp("main-panel").findById("tab-chat")){var d=PhDOE.user.login;if(PhDOE.user.isAnonymous){d="an%3F%3F%3F"}Ext.getCmp("main-panel").add({id:"tab-chat",xtype:"panel",title:_("Chat"),iconCls:"iconChat",closable:true,layout:"fit",items:[new Ext.ux.IFrameComponent({id:"frame-tab-chat",url:"https://widget.mibbit.com/?settings=8eec4034df2eb666b0600bdfe151529a&server=irc.umich.edu&channel=%23php.doc&nick=poe_"+d})]})}Ext.getCmp("main-panel").setActiveTab("tab-chat")}},"-",{id:"winabout-btn",text:_("About"),iconCls:"iconHelp",handler:function(){new ui.cmp.About().show(Ext.get("winabout-btn"))}}]})}});Ext.namespace("ui","ui.cmp","ui.cmp.MainPanel");ui.cmp.MainPanel=Ext.extend(Ext.ux.SlidingTabPanel,{activeTab:0,enableTabScroll:true,plugins:["tabclosemenu","dblclickclosetabs"],initComponent:function(c){Ext.apply(this,c);ui.cmp.MainPanel.superclass.initComponent.call(this);this.addEvents({tabLoaded:true});this.on("beforeremove",this.onBeforeRemove,this);this.on("tabchange",this.onTabChange,this);this.on("endDrag",this.onTabChange,this);this.on("tabLoaded",this.onTabLoaded,this)},onTabLoaded:function(d,e){var c=Ext.getCmp(d+"-"+e);if(d==="FNT"){if(c.panTRANSLoaded&&c.panTRANSSecondLoaded){c.tabLoaded=true;c.panTRANSLoaded=c.panTRANSSecondLoaded=false;if(PhDOE.FNTfilePendingOpen[0]){ui.cmp.PendingTranslateGrid.getInstance().openFile(PhDOE.FNTfilePendingOpen[0].id);PhDOE.FNTfilePendingOpen.shift()}}}if(d==="FNU"){if(c.panLANGLoaded&&c.panENLoaded&&c.panDiffLoaded&&c.panVCSLang&&c.panVCSEn){c.tabLoaded=true;c.panLANGLoaded=c.panENLoaded=c.panDiffLoaded=c.panVCSLang=c.panVCSEn=false;if(PhDOE.FNUfilePendingOpen[0]){ui.cmp.StaleFileGrid.getInstance().openFile(PhDOE.FNUfilePendingOpen[0].id);PhDOE.FNUfilePendingOpen.shift()}}}if(d==="FE"){if(c.panLANGLoaded&&c.panENLoaded&&c.panVCSLang&&c.panVCSEn){c.tabLoaded=true;c.panLANGLoaded=c.panENLoaded=c.panVCSLang=c.panVCSEn=false;if(PhDOE.FEfilePendingOpen[0]){ui.cmp.ErrorFileGrid.getInstance().openFile(PhDOE.FEfilePendingOpen[0].id);PhDOE.FEfilePendingOpen.shift()}}}if(d==="FNR"){if(c.panLANGLoaded&&c.panENLoaded&&c.panVCSLang&&c.panVCSEn){c.tabLoaded=true;c.panLANGLoaded=c.panENLoaded=c.panVCSLang=c.panVCSEn=false;if(PhDOE.FNRfilePendingOpen[0]){ui.cmp.PendingReviewGrid.getInstance().openFile(PhDOE.FNRfilePendingOpen[0].id);PhDOE.FNRfilePendingOpen.shift()}}}if(d==="FNIEN"){if(c.panLANGLoaded){c.tabLoaded=true;c.panLANGLoaded=false;if(PhDOE.FNIENfilePendingOpen[0]){ui.cmp.NotInENGrid.getInstance().openFile(PhDOE.FNIENfilePendingOpen[0].id);PhDOE.FNIENfilePendingOpen.shift()}}}if(d==="AF"){if(c.panLoaded&&c.panVCS&&c.panEntities&&c.panAcronyms){c.tabLoaded=true;c.panLoaded=c.panVCS=false;if(PhDOE.AFfilePendingOpen[0]){ui.cmp.RepositoryTree.getInstance().openFile((PhDOE.AFfilePendingOpen[0].nodeID)?"byId":"byPath",(PhDOE.AFfilePendingOpen[0].nodeID)?PhDOE.AFfilePendingOpen[0].nodeID:PhDOE.AFfilePendingOpen[0].fpath,(PhDOE.AFfilePendingOpen[0].nodeID)?false:PhDOE.AFfilePendingOpen[0].fname);PhDOE.AFfilePendingOpen.shift()}}}if(d==="PP"){if(c.panPatchLoaded&&c.panOriginLoaded&&c.panVCS&&c.panPatchContent){c.tabLoaded=true;c.panPatchLoaded=c.panOriginLoaded=c.panVCS=c.panPatchContent=false;if(PhDOE.PPfilePendingOpen[0]){ui.cmp.PendingPatchGrid.getInstance().openFile(PhDOE.PPfilePendingOpen[0].id);PhDOE.PPfilePendingOpen.shift()}}}},onTabChange:function(d,g){if(Ext.getCmp(g.id+"-btn-tabRight-LANG")||Ext.getCmp(g.id+"-btn-tabRight-EN")||Ext.getCmp(g.id+"-btn-tabRight-ALL")||Ext.getCmp(g.id+"-btn-tabRight-NotInEN")||Ext.getCmp(g.id+"-btn-tabRight-PATCH")||Ext.getCmp(g.id+"-btn-tabRight-TRANS")||Ext.getCmp(g.id+"-btn-tabRight-NEW")){var c=g.id,f=Ext.getCmp("main-panel").layout.container.items.items,h,e;for(e=0;eDo you really want to close?"),buttons:Ext.Msg.YESNO,icon:Ext.Msg.QUESTION,fn:function(j,k){if(j==="yes"){f.un("beforeremove",this.onBeforeRemove,this);f.remove(g);f.addListener("beforeremove",this.onBeforeRemove,this)}}});return false}else{return true}}else{return true}},openDiffTab:function(d){var f=d.DiffType,k=d.currentOwner||"",h=d.fileIdDB||"",j=d.FileName||"",e=d.FilePath||"",p=d.patchID||"",o=d.patchName||"",g,l=Ext.util.md5(o+p+e+j),q,c,m;if(p!=""){q=String.format(_("Diff for patch: {0}"),o);g="./do/downloadPatch?patchID="+p+"&csrfToken="+csrfToken;c=_("Download the unified diff as a patch")}else{q=String.format(_("Diff for file: {0}"),e+j);g="./do/downloadPatch?FilePath="+e+"&FileName="+j+"&csrfToken="+csrfToken;c=_("Download the diff as a patch")}if(!Ext.getCmp("main-panel").findById("diff_panel_"+l)){m=[{xtype:"buttongroup",items:[{xtype:"button",iconCls:"iconEdit",tooltip:_("Edit in a new tab"),handler:function(){ui.cmp.RepositoryTree.getInstance().openFile("byPath",e,j)}},{xtype:"button",iconCls:"iconDownloadDiff",tooltip:c,handler:function(){window.location.href=g}}]},((PhDOE.user.isGlobalAdmin||PhDOE.user.isLangAdmin)?{xtype:"buttongroup",items:[{xtype:"button",iconCls:"iconPageDelete",tooltip:_("Clear this change"),handler:function(){new ui.task.ClearLocalChangeTask({ftype:"update",fpath:e,fname:j});Ext.getCmp("main-panel").remove("diff_panel_"+l)}},{xtype:"button",iconCls:"iconSwitchLang",tooltip:_("Change file's owner"),handler:function(){new ui.cmp.ChangeFileOwner({fileIdDB:h,fileFolder:e,fileName:j,currentOwner:k})}}]}:"")];Ext.getCmp("main-panel").add({xtype:"panel",id:"diff_panel_"+l,title:_("Diff"),tabTip:q,closable:true,autoScroll:true,iconCls:"iconTabLink",html:'
',tbar:m});Ext.getCmp("main-panel").setActiveTab("diff_panel_"+l);Ext.get("diff_panel_"+l).mask(''+_("Please, wait..."));XHR({params:{task:"getDiff",DiffType:f,FilePath:e,FileName:j,patchID:p},success:function(s){var u=Ext.util.JSON.decode(s.responseText),t="";if(p==""){t='

'+_("Direct link to this patch")+" ; "+_("File: ")+e+j+"

"}else{t='

'+_("Direct link to this patch")+" ; "+_("Patch Name: ")+o+"

"}u.content=t+u.content;Ext.get("diff_content_"+l).dom.innerHTML=u.content;Ext.get("diff_panel_"+l).unmask()}})}else{Ext.getCmp("main-panel").setActiveTab("diff_panel_"+l)}}});Ext.reg("mainpanel",ui.cmp.MainPanel);Ext.namespace("ui","ui.cmp");ui.cmp.ManagePatchPrompt=Ext.extend(Ext.Window,{title:"",width:450,height:260,minWidth:450,minHeight:300,layout:"fit",plain:true,bodyStyle:"padding:5px;",buttonAlign:"center",iconCls:"iconPatch",closeAction:"hide",nodesToAdd:false,patchName:"",patchDescription:"",patchEmail:"",patchID:false,initComponent:function(){Ext.apply(this,{buttons:[{text:(this.patchID)?_("Save"):_("Create"),handler:function(){var d=this.ownerCt.ownerCt,c=d.findByType("form").shift().getForm().getValues();XHR({params:{task:"managePatch",name:c.name,description:c.description,email:c.email,patchID:d.patchID},success:function(e){var f=Ext.util.JSON.decode(e.responseText);d.hide();if(d.patchID){ui.cmp.PatchesTreeGrid.getInstance().modPatchName({newPatchName:c.name,newPatchDescription:c.description,newPatchEmail:c.email,patchID:d.patchID})}if(d.nodesToAdd){ui.task.MoveToPatch({patchID:f.patchID,patchName:c.name,patchDescription:c.description,patchEmail:c.email,nodesToAdd:d.nodesToAdd})}}})}},{text:_("Cancel"),handler:function(){this.ownerCt.ownerCt.hide()}}],items:[{xtype:"form",baseCls:"x-plain",labelWidth:110,defaultType:"textfield",labelAlign:"top",items:[{name:"name",fieldLabel:_("Patch name"),anchor:"100%",value:this.patchName},{name:"description",xtype:"textarea",fieldLabel:_("Patch description"),tooltipText:_("This description will be the default during the validation of the patch by a valid user."),anchor:"100%",value:this.patchDescription},{name:"email",fieldLabel:_("Email"),tooltipText:_("If provided, an email will be send to you to inform that the patch is commited."),anchor:"100%",value:this.patchEmail}]}]});ui.cmp.ManagePatchPrompt.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._NotInENGrid");ui.cmp._NotInENGrid.store=new Ext.data.GroupingStore({proxy:new Ext.data.HttpProxy({url:"./do/getFilesNotInEn"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"path"},{name:"name"},{name:"fileModified"}]}),sortInfo:{field:"path",direction:"ASC"},groupField:"path",listeners:{datachanged:function(c){Ext.getDom("acc-notInEn-nb").innerHTML=c.getCount()}}});ui.cmp._NotInENGrid.columns=[{id:"name",header:_("Files"),sortable:true,dataIndex:"name",renderer:function(d,c,e){if(e.data.fileModified){var f=Ext.util.JSON.decode(e.data.fileModified);if(f.user===PhDOE.user.login&&f.anonymousIdent===PhDOE.user.anonymousIdent){return""+d+""}else{return""+d+""}}else{return d}}},{header:_("Path"),dataIndex:"path",hidden:true}];ui.cmp._NotInENGrid.view=new Ext.grid.GroupingView({forceFit:true,startCollapsed:true,groupTextTpl:'{[values.rs[0].data["path"]]} ({[values.rs.length]} {[values.rs.length > 1 ? "'+_("Files")+'" : "'+_("File")+'"]})',deferEmptyText:false,emptyText:'
'+_("No Files")+"
",getRowClass:function(c){if(c.data.fileModified){var d=Ext.util.JSON.decode(c.data.fileModified);return(d.user===PhDOE.user.login&&d.anonymousIdent===PhDOE.user.anonymousIdent)?"fileModifiedByMe":"fileModifiedByAnother"}return false}});ui.cmp._NotInENGrid.menu=function(c){Ext.apply(this,c);this.init();ui.cmp._NotInENGrid.menu.superclass.constructor.call(this)};Ext.extend(ui.cmp._NotInENGrid.menu,Ext.menu.Menu,{init:function(){Ext.apply(this,{items:[{scope:this,text:""+_("View in a new tab")+"",iconCls:"iconView",handler:function(){this.grid.fireEvent("rowdblclick",this.grid,this.rowIdx,this.event)}},{scope:this,text:_("Remove this file"),hidden:(this.grid.store.getAt(this.rowIdx).data.fileModified),iconCls:"iconTrash",handler:function(){var e=this.grid.store.getAt(this.rowIdx),d=e.data.path,c=e.data.name;new ui.task.MarkDeleteTask({fpath:d,fname:c,storeRecord:e})}}]})}});ui.cmp.NotInENGrid=Ext.extend(Ext.grid.GridPanel,{loadMask:true,border:false,autoExpandColumn:"name",enableDragDrop:true,ddGroup:"mainPanelDDGroup",view:ui.cmp._NotInENGrid.view,columns:ui.cmp._NotInENGrid.columns,onRowContextMenu:function(c,f,d){d.stopEvent();c.getSelectionModel().selectRow(f);new ui.cmp._NotInENGrid.menu({grid:c,rowIdx:f,event:d}).showAt(d.getXY())},onRowDblClick:function(c,f,d){this.openFile(c.store.getAt(f).data.id)},openFile:function(g){var e=this.store.getById(g),d=e.data.path,c=e.data.name,f=Ext.util.md5("FNIEN-"+PhDOE.user.lang+d+c);if(!Ext.getCmp("main-panel").findById("FNIEN-"+f)){Ext.getCmp("main-panel").add({id:"FNIEN-"+f,layout:"border",title:c,originTitle:c,iconCls:"iconTabView",closable:true,tabLoaded:false,panLANGLoaded:false,defaults:{split:true},tabTip:String.format(_("Not In EN: in {0}"),d),items:[new ui.cmp.FilePanel({id:"FNIEN-NotInEN-PANEL-"+f,region:"center",title:_("File: ")+d+c,prefix:"FNIEN",ftype:"NotInEN",fid:f,fpath:d,fname:c,original:true,readOnly:true,lang:PhDOE.user.lang,parser:"xml",storeRecord:e,syncScroll:false})]})}Ext.getCmp("main-panel").setActiveTab("FNIEN-"+f)},initComponent:function(){Ext.apply(this,{store:ui.cmp._NotInENGrid.store});ui.cmp.NotInENGrid.superclass.initComponent.call(this);this.on("rowcontextmenu",this.onRowContextMenu,this);this.on("rowdblclick",this.onRowDblClick,this)}});ui.cmp._NotInENGrid.instance=null;ui.cmp.NotInENGrid.getInstance=function(c){if(!ui.cmp._NotInENGrid.instance){if(!c){c={}}ui.cmp._NotInENGrid.instance=new ui.cmp.NotInENGrid(c)}return ui.cmp._NotInENGrid.instance};Ext.namespace("ui","ui.cmp","ui.cmp._PatchesTreeGrid","ui.cmp._PatchesTreeGrid.menu");ui.cmp._PatchesTreeGrid.menu.users=function(c){Ext.apply(this,c);this.init();ui.cmp._PatchesTreeGrid.menu.users.superclass.constructor.call(this)};Ext.extend(ui.cmp._PatchesTreeGrid.menu.users,Ext.menu.Menu,{init:function(){var c=[];this.node.cascade(function(d){if(d.attributes.type!=="folder"&&d.attributes.type!=="patch"&&d.attributes.type!=="user"){c.push(d)}},this);Ext.apply(this,{items:[{scope:this,text:String.format(_("Send an email to {0}"),""+this.node.attributes.task+""),iconCls:"iconSendEmail",hidden:(this.node.attributes.task===PhDOE.user.login||this.node.attributes.email==="false"),handler:function(){var d=new ui.cmp.EmailPrompt();d.setData(this.node.attributes.task,this.node.attributes.email);d.show(this.node.el)}},{text:_("Back all files to work in progress module"),hidden:(this.node.attributes.task!==PhDOE.user.login),disabled:Ext.isEmpty(c),iconCls:"iconWorkInProgress",handler:function(){ui.task.MoveToWork({nodesToAdd:c})}},{xtype:"menuseparator",hidden:(this.node.attributes.task!==PhDOE.user.login||PhDOE.user.isAnonymous)},((this.node.attributes.task===PhDOE.user.login&&!PhDOE.user.isAnonymous)?new ui.cmp._WorkTreeGrid.menu.commit({module:"patches",from:"user",node:false,folderNode:false,patchNode:false,userNode:this.node}):"")]})}});ui.cmp._PatchesTreeGrid.menu.patches=function(c){Ext.apply(this,c);this.init();ui.cmp._PatchesTreeGrid.menu.patches.superclass.constructor.call(this)};Ext.extend(ui.cmp._PatchesTreeGrid.menu.patches,Ext.menu.Menu,{init:function(){var d=this.node,f=[],c=d.parentNode.attributes.task,e=d.parentNode.attributes.isAnonymous;this.node.cascade(function(g){if(g.attributes.type!=="folder"&&g.attributes.type!=="patch"&&g.attributes.type!=="user"){f.push(g)}},this);Ext.apply(this,{items:[{text:_("Edit the description of this patch"),iconCls:"iconPendingPatch",hidden:(c!==PhDOE.user.login),handler:function(){var g=new ui.cmp.ManagePatchPrompt({title:_("Modify this patch description"),patchName:d.attributes.task,patchDescription:d.attributes.patchDescription,patchEmail:d.attributes.patchEmail,patchID:d.attributes.idDB});g.show(this.el)}},{text:_("Delete this patch"),iconCls:"iconTrash",hidden:(c!==PhDOE.user.login),handler:function(){ui.task.DeletePatchTask({patchID:d.attributes.idDB})}},{xtype:"menuseparator",hidden:!((!PhDOE.user.isAnonymous&&c===PhDOE.user.login)||!PhDOE.user.isGlobalAdmin)},{text:_("Back all this patch to work in progress module"),iconCls:"iconWorkInProgress",hidden:(c!==PhDOE.user.login),disabled:Ext.isEmpty(f),handler:function(){ui.task.MoveToWork({nodesToAdd:f})}},{xtype:"menuseparator",hidden:(c!==PhDOE.user.login)},{text:_("View unified diff"),iconCls:"iconViewDiff",handler:function(){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",patchID:d.attributes.idDB,patchName:d.attributes.task})}},{text:_("Download the unified diff as a patch"),iconCls:"iconDownloadDiff",handler:function(){window.location.href="./do/downloadPatch?patchID="+d.attributes.idDB+"&csrfToken="+csrfToken}},{xtype:"menuseparator"},((e&&!PhDOE.user.isAnonymous)?new ui.cmp._WorkTreeGrid.menu.commit({module:"patches",from:"anonymousPatch",node:false,folderNode:false,patchNode:this.node,userNode:this.node.parentNode}):""),((!PhDOE.user.isAnonymous&&c===PhDOE.user.login)?new ui.cmp._WorkTreeGrid.menu.commit({module:"patches",from:"patch",node:false,folderNode:false,patchNode:this.node,userNode:this.node.parentNode}):""),((PhDOE.user.isGlobalAdmin&&c!==PhDOE.user.login)?new ui.cmp._WorkTreeGrid.menu.admin({from:"patch",node:this.node}):"")]})}});ui.cmp._PatchesTreeGrid.menu.folders=function(c){Ext.apply(this,c);this.init();ui.cmp._PatchesTreeGrid.menu.folders.superclass.constructor.call(this)};Ext.extend(ui.cmp._PatchesTreeGrid.menu.folders,Ext.menu.Menu,{init:function(){var c=[];if(this.node.parentNode.parentNode.attributes.task!==PhDOE.user.login){return false}this.node.cascade(function(d){if(d.attributes.type!=="folder"&&d.attributes.type!=="patch"&&d.attributes.type!=="user"){c.push(d)}},this);Ext.apply(this,{items:[{text:_("Back all this folder to work in progress module"),iconCls:"iconWorkInProgress",handler:function(){ui.task.MoveToWork({nodesToAdd:c})}},{xtype:"menuseparator",hidden:(PhDOE.user.isAnonymous)},((!PhDOE.user.isAnonymous)?new ui.cmp._WorkTreeGrid.menu.commit({module:"patches",from:"folder",node:false,folderNode:this.node,patchNode:this.node.parentNode,userNode:this.node.parentNode.parentNode}):"")]})}});ui.cmp._PatchesTreeGrid.menu.files=function(c){Ext.apply(this,c);this.init();ui.cmp._PatchesTreeGrid.menu.files.superclass.constructor.call(this)};Ext.extend(ui.cmp._PatchesTreeGrid.menu.files,Ext.menu.Menu,{init:function(){var h=this.node,m=h.attributes.type,g,c=h.parentNode.attributes.task,f=h.attributes.task,k=h.ownerTree,l=h.attributes.idDB,d=[],e=this.node.parentNode.parentNode.parentNode.attributes.task,j;j=h.parentNode.attributes.task.split("/");g=j[0];this.node.cascade(function(o){if(o.attributes.type!=="folder"&&o.attributes.type!=="patch"&&o.attributes.type!=="user"){d.push(o)}},this);Ext.apply(this,{items:[{text:""+((m==="delete")?_("View in a new tab"):_("Edit in a new tab"))+"",iconCls:"iconEdit",handler:function(){ui.cmp.WorkTreeGrid.getInstance().openFile(h)}},{text:_("Back this file to work in progress module"),hidden:(e!==PhDOE.user.login),iconCls:"iconWorkInProgress",handler:function(){ui.task.MoveToWork({nodesToAdd:d})}},"-",{text:_("View diff"),iconCls:"iconViewDiff",handler:function(){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",FileName:f,FilePath:c,currentOwner:e,fileIdDB:h.attributes.idDB})}},{text:_("Download the diff as a patch"),iconCls:"iconDownloadDiff",handler:function(){window.location.href="./do/downloadPatch?FilePath="+c+"&FileName="+f+"&csrfToken="+csrfToken}},{xtype:"menuseparator",hidden:(m==="delete"||m==="new"||e!==PhDOE.user.login)},{text:((m==="delete")?_("Cancel this deletion"):_("Clear this change")),hidden:(e!==PhDOE.user.login),iconCls:"iconPageDelete",handler:function(){new ui.task.ClearLocalChangeTask({ftype:m,fpath:c,fname:f})}},{xtype:"menuseparator",hidden:(PhDOE.user.isAnonymous||e!==PhDOE.user.login)},((e===PhDOE.user.login&&!PhDOE.user.isAnonymous)?new ui.cmp._WorkTreeGrid.menu.commit({module:"patches",from:"file",node:this.node,folderNode:this.node.parentNode,patchNode:this.node.parentNode.parentNode,userNode:this.node.parentNode.parentNode.parentNode}):""),{xtype:"menuseparator",hidden:(!PhDOE.user.isGlobalAdmin&&!(PhDOE.user.lang===g&&PhDOE.user.isLangAdmin))},((PhDOE.user.isGlobalAdmin||(PhDOE.user.lang===g&&PhDOE.user.isLangAdmin))?new ui.cmp._WorkTreeGrid.menu.admin({fileLang:g,from:"file",node:this.node,folderNode:this.node.parentNode,userNode:this.node.parentNode.parentNode.parentNode}):"")]})}});ui.cmp.PatchesTreeGrid=Ext.extend(Ext.ux.tree.TreeGrid,{onContextMenu:function(f,g){g.stopEvent();var d=f.attributes.type,c;switch(d){case"user":f.select();c=new ui.cmp._PatchesTreeGrid.menu.users({node:f});break;case"folder":f.select();c=new ui.cmp._PatchesTreeGrid.menu.folders({node:f});break;case"patch":f.select();c=new ui.cmp._PatchesTreeGrid.menu.patches({node:f});break;default:f.select();c=new ui.cmp._PatchesTreeGrid.menu.files({node:f});break}c.showAt(g.getXY())},modPatchName:function(c){var d=this.getRootNode(),e=d.findChild("idDB",c.patchID,true);e.setText(c.newPatchName);e.attributes.patchDescription=c.newPatchDescription;e.attributes.patchEmail=c.newPatchEmail;e.attributes.task=c.newPatchName},initComponent:function(){Ext.apply(this,{animate:true,useArrows:true,autoScroll:true,border:false,containerScroll:true,selModel:new Ext.tree.MultiSelectionModel(),columns:[{header:_("Users"),dataIndex:"task",uiProvider:{editable:true,qtip:"help"},tpl:new Ext.XTemplate("{task:this.formatUserName}",{formatUserName:function(c,d){if(d.type==="user"){if(d.userID){d.qtip=_("userID: ")+d.userID}return c}if(d.type==="patch"){if(d.creationDate){d.qtip=_("Creation date: ")+Date.parseDate(d.creationDate,"Y-m-d H:i:s").format(_("Y-m-d, H:i"))}return c}return c}})},{header:_("Last modified"),width:120,dataIndex:"last_modified",align:"center",tpl:new Ext.XTemplate("{last_modified:this.formatDate}",{formatDate:function(c,d){if(d.type!=="user"&&d.type!=="folder"&&d.type!=="patch"){return Date.parseDate(c,"Y-m-d H:i:s").format(_("Y-m-d, H:i"))}else{return""}}})}],loader:{dataUrl:"./do/getWork",baseParams:{module:"PatchesForReview"}}});ui.cmp.PatchesTreeGrid.superclass.initComponent.call(this);this.on("contextmenu",this.onContextMenu,this);this.on("resize",this.resizeCmp,this);this.on("dblclick",ui.cmp.WorkTreeGrid.getInstance().openFile,this);this.getRootNode().on("beforechildrenrendered",function(){this.updateFilesCounter.defer(200,this)},this)},resizeCmp:function(g,f,d,e){this.columns[0].width=e-(this.columns[1].width+5);this.updateColumnWidths()},deletePatch:function(q){var e=this.getRootNode(),o,c,d,f,r=[],p,m,h,g;for(p=0;p"}else{h=String.format(_("File EN modified by {0}"),g.user)+"
"}}if(e.data.fileModifiedLang){f=Ext.util.JSON.decode(e.data.fileModifiedLang);if(f.user===PhDOE.user.login&&f.anonymousIdent===PhDOE.user.anonymousIdent){h+=String.format(_("File {0} modified by me"),PhDOE.user.lang.ucFirst())}else{h+=String.format(_("File {0} modified by {1}"),PhDOE.user.lang.ucFirst(),f.user)}}if(h!==""){return""+d+""}else{return d}}},{header:_("Reviewed"),width:45,sortable:true,dataIndex:"reviewed"},{header:_("Reviewer"),width:45,sortable:true,dataIndex:"maintainer"},{header:_("Path"),dataIndex:"path",hidden:true}];ui.cmp._PendingReviewGrid.view=new Ext.grid.GroupingView({forceFit:true,startCollapsed:true,groupTextTpl:'{[values.rs[0].data["path"]]} ({[values.rs.length]} {[values.rs.length > 1 ? "'+_("Files")+'" : "'+_("File")+'"]})',getRowClass:function(c){if(c.data.fileModifiedEN||c.data.fileModifiedLang){var e=Ext.util.JSON.decode(c.data.fileModifiedEN),d=Ext.util.JSON.decode(c.data.fileModifiedLang);return((e.user===PhDOE.user.login&&e.anonymousIdent===PhDOE.user.anonymousIdent)||(d.user===PhDOE.user.login&&d.anonymousIdent===PhDOE.user.anonymousIdent))?"fileModifiedByMe":"fileModifiedByAnother"}return false},deferEmptyText:false,emptyText:'
'+_("No Files")+"
"});Ext.namespace("ui.cmp._PendingReviewGrid.menu");ui.cmp._PendingReviewGrid.menu.group=function(c){Ext.apply(this,c);this.init();ui.cmp._PendingReviewGrid.menu.group.superclass.constructor.call(this)};Ext.extend(ui.cmp._PendingReviewGrid.menu.group,Ext.menu.Item,{iconCls:"iconViewDiff",init:function(){Ext.apply(this,{text:String.format(_("Open all files about {0} extension"),this.gname.ucFirst()),handler:function(){Ext.getBody().mask(' '+String.format(_("Open all files about {0} extension"),this.gname.ucFirst())+". "+_("Please, wait..."));XHR({params:{task:"getAllFilesAboutExtension",ExtName:this.gname},success:function(d){var e=Ext.util.JSON.decode(d.responseText),c;PhDOE.AFfilePendingOpen=[];for(c=0;c"+_("Edit in a new tab")+"",iconCls:"iconFilesNeedReviewed",scope:this,handler:function(){this.grid.fireEvent("rowdblclick",this.grid,this.rowIdx,this.event)}},{scope:this,hidden:this.hideDiffMenu,text:_("View diff..."),iconCls:"iconViewDiff",menu:new Ext.menu.Menu({items:[{scope:this,hidden:(this.grid.store.getAt(this.rowIdx).data.fileModifiedEN===false),text:String.format(_("... of the {0} file"),"EN"),handler:function(){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",FileName:this.fname,FilePath:"en"+this.fpath})}},{scope:this,hidden:(this.grid.store.getAt(this.rowIdx).data.fileModifiedLang===false),text:String.format(_("... of the {0} file"),PhDOE.user.lang.ucFirst()),handler:function(){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",FileName:this.fname,FilePath:PhDOE.user.lang+this.fpath})}}]})},new Ext.menu.Separator({hidden:this.hideGroup}),new ui.cmp._PendingReviewGrid.menu.group({gname:this.gname,hidden:this.hideGroup})]})}});ui.cmp.PendingReviewGrid=Ext.extend(Ext.grid.GridPanel,{loadMask:true,border:false,autoExpandColumn:"name",enableDragDrop:true,ddGroup:"mainPanelDDGroup",columns:ui.cmp._PendingReviewGrid.columns,view:ui.cmp._PendingReviewGrid.view,onRowContextMenu:function(d,k,h){h.stopEvent();var g=d.store.getAt(k),f=g.data.path,c=g.data.name,j=f.split("/");d.getSelectionModel().selectRow(k);new ui.cmp._PendingReviewGrid.menu.main({grid:d,rowIdx:k,event:h,fpath:f,fname:c,hideDiffMenu:(g.data.fileModifiedEN===false&&g.data.fileModifiedLang===false),hideGroup:(j[1]!=="reference"),gname:(j[2])?j[2]:""}).showAt(h.getXY())},onRowDblClick:function(c,f,d){this.openFile(c.store.getAt(f).data.id)},openFile:function(g){var e=this.store.getById(g),d=e.data.path,c=e.data.name,f=Ext.util.md5("FNR-"+PhDOE.user.lang+d+c);if(!Ext.getCmp("main-panel").findById("FNR-"+f)){Ext.getCmp("main-panel").add({id:"FNR-"+f,title:c,layout:"border",iconCls:"iconTabNeedReviewed",closable:true,tabLoaded:false,panVCSLang:!PhDOE.user.conf.reviewed.toolsPanelLogLoad,panVCSEn:!PhDOE.user.conf.reviewed.toolsPanelLogLoad,panLANGLoaded:false,panENLoaded:false,originTitle:c,defaults:{split:true},tabTip:String.format(_("Need Reviewed in: {0}"),d),listeners:{resize:function(h){Ext.getCmp("FNR-EN-PANEL-"+f).setWidth(h.getWidth()/2)}},items:[{region:"west",xtype:"panel",title:_("Tools"),iconCls:"iconConf",collapsedIconCls:"iconConf",plugins:[Ext.ux.PanelCollapsedTitle],collapsible:true,collapsed:!PhDOE.user.conf.reviewed.toolsPanelDisplay,layout:"fit",bodyBorder:false,width:PhDOE.user.conf.reviewed.toolsPanelWidth||375,listeners:{collapse:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"reviewed",itemName:"toolsPanelDisplay",value:false,notify:false})}},expand:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"reviewed",itemName:"toolsPanelDisplay",value:true,notify:false})}},resize:function(h,j){if(this.ownerCt.tabLoaded&&j&&j!=PhDOE.user.conf.reviewed.toolsPanelWidth){new ui.task.UpdateConfTask({module:"reviewed",itemName:"toolsPanelWidth",value:j,notify:false})}}},items:{xtype:"tabpanel",activeTab:0,tabPosition:"bottom",enableTabScroll:true,defaults:{autoScroll:true},items:[new ui.cmp.VCSLogGrid({layout:"fit",title:String.format(_("{0} Log"),PhDOE.user.lang.ucFirst()),prefix:"FNR-LANG",fid:f,fpath:PhDOE.user.lang+d,fname:c,loadStore:PhDOE.user.conf.reviewed.toolsPanelLogLoad}),new ui.cmp.VCSLogGrid({layout:"fit",title:String.format(_("{0} Log"),"En"),prefix:"FNR-EN",fid:f,fpath:"en"+d,fname:c,loadStore:PhDOE.user.conf.reviewed.toolsPanelLogLoad}),new ui.cmp.DictionaryGrid({layout:"fit",title:_("Dictionary"),prefix:"FNR",fid:f})]}},new ui.cmp.FilePanel({id:"FNR-LANG-PANEL-"+f,region:"center",title:String.format(_("{0} File: "),PhDOE.user.lang.ucFirst())+d+c,prefix:"FNR",ftype:"LANG",spellCheck:PhDOE.user.conf.reviewed.enableSpellCheckLang,spellCheckConf:{module:"reviewed",itemName:"enableSpellCheckLang"},fid:f,fpath:d,fname:c,lang:PhDOE.user.lang,parser:"xml",storeRecord:e,syncScrollCB:true,syncScroll:true,syncScrollConf:{module:"reviewed",itemName:"syncScrollbars"}}),new ui.cmp.FilePanel({id:"FNR-EN-PANEL-"+f,region:"east",title:_("en File: ")+d+c,prefix:"FNR",ftype:"EN",original:true,readOnly:true,openInNewTabBtn:true,fid:f,fpath:d,fname:c,lang:"en",parser:"xml",storeRecord:e,syncScroll:true,syncScrollConf:{module:"reviewed",itemName:"syncScrollbars"}})]})}Ext.getCmp("main-panel").setActiveTab("FNR-"+f)},initComponent:function(){Ext.apply(this,{store:ui.cmp._PendingReviewGrid.store,tbar:[_("Filter: ")," ",new Ext.form.TwinTriggerField({id:"FNR-filter",width:180,hideTrigger1:true,enableKeyEvents:true,validateOnBlur:false,validationEvent:false,trigger1Class:"x-form-clear-trigger",trigger2Class:"x-form-search-trigger",listeners:{keypress:function(d,c){if(c.getKey()===c.ENTER){this.onTrigger2Click()}}},onTrigger1Click:function(){this.setValue("");this.triggers[0].hide();this.setSize(180,10);ui.cmp._PendingReviewGrid.instance.store.clearFilter()},onTrigger2Click:function(){var c=this.getValue(),d;if(c===""||c.length<3){this.markInvalid(_("Your filter must contain at least 3 characters"));return}this.clearInvalid();this.triggers[0].show();this.setSize(180,10);d=new RegExp(c,"i");ui.cmp._PendingReviewGrid.instance.store.filterBy(function(e){if(d.test(e.data.path)||d.test(e.data.name)||d.test(e.data.reviewed)||d.test(e.data.maintainer)){return true}else{return false}},this)}})]});ui.cmp.PendingReviewGrid.superclass.initComponent.call(this);this.on("rowcontextmenu",this.onRowContextMenu,this);this.on("rowdblclick",this.onRowDblClick,this)}});ui.cmp._PendingReviewGrid.instance=null;ui.cmp.PendingReviewGrid.getInstance=function(c){if(!ui.cmp._PendingReviewGrid.instance){if(!c){c={}}ui.cmp._PendingReviewGrid.instance=new ui.cmp.PendingReviewGrid(c)}return ui.cmp._PendingReviewGrid.instance};Ext.namespace("ui","ui.cmp","ui.cmp._PendingTranslateGrid");ui.cmp._PendingTranslateGrid.store=new Ext.data.GroupingStore({proxy:new Ext.data.HttpProxy({url:"./do/getFilesNeedTranslate"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"path"},{name:"name"},{name:"fileModified"}]}),sortInfo:{field:"name",direction:"ASC"},groupField:"path",listeners:{datachanged:function(c){Ext.getDom("acc-need-translate-nb").innerHTML=c.getCount()}}});ui.cmp._PendingTranslateGrid.view=new Ext.grid.GroupingView({forceFit:true,startCollapsed:true,groupTextTpl:'{[values.rs[0].data["path"]]} ({[values.rs.length]} {[values.rs.length > 1 ? "'+_("Files")+'" : "'+_("File")+'"]})',deferEmptyText:false,getRowClass:function(c){if(c.data.fileModified){var d=Ext.util.JSON.decode(c.data.fileModified);return(d.user===PhDOE.user.login&&d.anonymousIdent===PhDOE.user.anonymousIdent)?"fileModifiedByMe":"fileModifiedByAnother"}return false},emptyText:'
'+_("No Files")+"
"});ui.cmp._PendingTranslateGrid.columns=[{id:"name",header:_("Files"),sortable:true,dataIndex:"name",renderer:function(c,f,d){if(d.data.fileModified){var e=Ext.util.JSON.decode(d.data.fileModified);if(e.user===PhDOE.user.login&&e.anonymousIdent===PhDOE.user.anonymousIdent){return""+c+""}else{return""+c+""}}else{return c}}},{header:_("Path"),dataIndex:"path",hidden:true}];ui.cmp._PendingTranslateGrid.menu=function(c){Ext.apply(this,c);this.init();ui.cmp._StaleFileGrid.menu.superclass.constructor.call(this)};Ext.extend(ui.cmp._PendingTranslateGrid.menu,Ext.menu.Menu,{init:function(){Ext.apply(this,{items:[{scope:this,text:""+_("Edit in a new tab")+"",iconCls:"iconTabNeedTranslate",handler:function(){this.grid.fireEvent("rowdblclick",this.grid,this.rowIdx,this.event)}}]})}});ui.cmp.PendingTranslateGrid=Ext.extend(Ext.grid.GridPanel,{view:ui.cmp._PendingTranslateGrid.view,loadMask:true,autoExpandColumn:"name",enableDragDrop:true,ddGroup:"mainPanelDDGroup",border:false,onRowContextMenu:function(c,f,d){d.stopEvent();c.getSelectionModel().selectRow(f);new ui.cmp._PendingTranslateGrid.menu({grid:c,event:d,rowIdx:f}).showAt(d.getXY())},onRowDblClick:function(c,d){this.openFile(c.store.getAt(d).data.id)},openFile:function(g){var e=this.store.getById(g),d=e.data.path,c=e.data.name,f=Ext.util.md5("FNT-"+PhDOE.user.lang+d+c),h;if(!Ext.getCmp("main-panel").findById("FNT-"+f)){if(PhDOE.user.conf.newFile.secondPanel=="google"||PhDOE.user.conf.newFile.secondPanel=="originalFile"){h=true}else{h=false}Ext.getCmp("main-panel").add({id:"FNT-"+f,layout:"border",title:c,originTitle:c,iconCls:"iconTabNeedTranslate",closable:true,tabLoaded:false,panTRANSLoaded:false,panTRANSSecondLoaded:!h,defaults:{split:true},tabTip:String.format(_("Need translate: in {0}"),d),listeners:{resize:function(j){if(PhDOE.user.conf.newFile.secondPanel=="google"){Ext.getCmp("FNT-GGTRANS-PANEL-"+f).setWidth(j.getWidth()/2)}if(PhDOE.user.conf.newFile.secondPanel=="originalFile"){Ext.getCmp("FNT-EN-PANEL-"+f).setWidth(j.getWidth()/2)}}},items:[{region:"west",xtype:"panel",title:_("Tools"),iconCls:"iconConf",collapsedIconCls:"iconConf",plugins:[Ext.ux.PanelCollapsedTitle],collapsible:true,collapsed:!PhDOE.user.conf.newFile.toolsPanelDisplay,layout:"fit",bodyBorder:false,width:PhDOE.user.conf.newFile.toolsPanelWidth||375,listeners:{collapse:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"newFile",itemName:"toolsPanelDisplay",value:false,notify:false})}},expand:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"newFile",itemName:"toolsPanelDisplay",value:true,notify:false})}},resize:function(j,k){if(this.ownerCt.tabLoaded&&k&&k!=PhDOE.user.conf.newFile.toolsPanelWidth){new ui.task.UpdateConfTask({module:"newFile",itemName:"toolsPanelWidth",value:k,notify:false})}}},items:{xtype:"tabpanel",activeTab:0,tabPosition:"bottom",defaults:{autoScroll:true},items:[new ui.cmp.DictionaryGrid({layout:"fit",title:_("Dictionary"),prefix:"FNT",fid:f})]}},new ui.cmp.FilePanel({id:"FNT-TRANS-PANEL-"+f,region:"center",title:_("New file: ")+PhDOE.user.lang+d+c,isTrans:true,prefix:"FNT",ftype:"TRANS",spellCheck:PhDOE.user.conf.newFile.enableSpellCheck,spellCheckConf:{module:"newFile",itemName:"enableSpellCheck"},fid:f,fpath:d,fname:c,lang:PhDOE.user.lang,parser:"xml",storeRecord:e,syncScrollCB:h,syncScroll:h,syncScrollConf:{module:"newFile",itemName:"syncScrollbars"}}),((PhDOE.user.conf.newFile.secondPanel=="google")?new ui.cmp.FilePanel({id:"FNT-GGTRANS-PANEL-"+f,region:"east",title:_("Automatic translation: ")+PhDOE.user.lang+d+c,isTrans:true,prefix:"FNT",ftype:"GGTRANS",fid:f,fpath:d,fname:c,readOnly:true,lang:PhDOE.user.lang,parser:"xml",storeRecord:e,syncScroll:true,syncScrollConf:{module:"newFile",itemName:"syncScrollbars"}}):false),((PhDOE.user.conf.newFile.secondPanel=="originalFile")?new ui.cmp.FilePanel({id:"FNT-EN-PANEL-"+f,region:"east",title:_("File: ")+"en"+d+c,prefix:"FNT",ftype:"EN",fid:f,fpath:d,fname:c,original:true,readOnly:true,lang:"en",parser:"xml",storeRecord:e,syncScroll:true,syncScrollConf:{module:"newFile",itemName:"syncScrollbars"}}):false)]})}Ext.getCmp("main-panel").setActiveTab("FNT-"+f)},initComponent:function(){Ext.apply(this,{columns:ui.cmp._PendingTranslateGrid.columns,store:ui.cmp._PendingTranslateGrid.store,tbar:[_("Filter: ")," ",new Ext.form.TwinTriggerField({id:"FNT-filter",width:180,hideTrigger1:true,enableKeyEvents:true,validateOnBlur:false,validationEvent:false,trigger1Class:"x-form-clear-trigger",trigger2Class:"x-form-search-trigger",listeners:{keypress:function(d,c){if(c.getKey()===c.ENTER){this.onTrigger2Click()}}},onTrigger1Click:function(){this.setValue("");this.triggers[0].hide();this.setSize(180,10);ui.cmp._PendingTranslateGrid.instance.store.clearFilter()},onTrigger2Click:function(){var c=this.getValue(),d;if(c===""||c.length<3){this.markInvalid(_("Your filter must contain at least 3 characters"));return}this.clearInvalid();this.triggers[0].show();this.setSize(180,10);d=new RegExp(c,"i");ui.cmp._PendingTranslateGrid.instance.store.filterBy(function(e){if(d.test(e.data.path)||d.test(e.data.name)){return true}else{return false}},this)}})]});ui.cmp.PendingTranslateGrid.superclass.initComponent.call(this);this.on("rowcontextmenu",this.onRowContextMenu,this);this.on("rowdblclick",this.onRowDblClick,this)}});ui.cmp._PendingTranslateGrid.instance=null;ui.cmp.PendingTranslateGrid.getInstance=function(c){if(!ui.cmp._PendingTranslateGrid.instance){if(!c){c={}}ui.cmp._PendingTranslateGrid.instance=new ui.cmp.PendingTranslateGrid(c)}return ui.cmp._PendingTranslateGrid.instance};Ext.namespace("ui","ui.cmp","ui.cmp._PortletBugs");ui.cmp._PortletBugs.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getOpenBugs"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"title"},{name:"link"},{name:"description"},{name:"xmlID"}]})});ui.cmp._PortletBugs.gridFormatTitle=function(c){return String.format('
{0}
',c)};ui.cmp._PortletBugs.gridColumns=[{id:"GridBugTitle",header:_("Title"),sortable:true,dataIndex:"title",renderer:ui.cmp._PortletBugs.gridFormatTitle}];ui.cmp._PortletBugs.gridView=new Ext.grid.GridView({forceFit:true,emptyText:'
'+_("You must manually load this data.
Use the refresh button !")+"
",deferEmptyText:false,enableRowBody:true,showPreview:false,getRowClass:function(c,e,d){if(this.showPreview){d.body="

"+c.data.description+"

";return"x-grid3-row-expanded"}return"x-grid3-row-collapsed"}});ui.cmp._PortletBugs.grid=Ext.extend(Ext.grid.GridPanel,{loadMask:true,autoScroll:true,height:250,autoExpandColumn:"GridBugTitle",id:"PortletBugs-grid-id",store:ui.cmp._PortletBugs.store,columns:ui.cmp._PortletBugs.gridColumns,view:ui.cmp._PortletBugs.gridView,sm:new Ext.grid.RowSelectionModel({singleSelect:true}),onRowDblClick:function(e,g){var c=e.store.getAt(g).data.id,d=e.store.getAt(g).data.link,f=e.store.getAt(g).data.title;if(!Ext.getCmp("main-panel").findById("bugs-"+c)){Ext.getCmp("main-panel").add({id:"bugs-"+c,xtype:"panel",title:Ext.util.Format.substr(f,0,20)+"...",tabTip:f,iconCls:"iconBugs",closable:true,layout:"fit",items:[new Ext.ux.IFrameComponent({id:"frame-bugs-"+c,url:d})]})}Ext.getCmp("main-panel").setActiveTab("bugs-"+c)},openRelatedFile:function(c){new ui.task.GetFileInfoByXmlID({xmlID:c})},onContextClick:function(c,f,d){if(!this.menu){this.menu=new Ext.menu.Menu({id:"submenu-bugs",items:[{scope:this,text:""+_("Open in a new Tab")+"",iconCls:"iconOpenInTab",handler:function(){this.fireEvent("rowdblclick",c,this.ctxIndex,d);this.menu.hide()}},"-",{scope:this,text:_("Refresh this grid"),iconCls:"iconRefresh",handler:function(){this.ctxIndex=null;ui.cmp._PortletBugs.reloadData()}},{scope:this,text:_("Open the related file"),iconCls:"iconAllFiles",id:"bugs-open-related-file",handler:function(){this.openRelatedFile(this.ctxXmlID)}}]})}this.getSelectionModel().selectRow(f);d.stopEvent();if(this.ctxIndex){this.ctxIndex=null}if(this.ctxXmlID){this.ctxXmlID=null}this.ctxIndex=f;this.ctxXmlID=c.store.getAt(this.ctxIndex).data.xmlID;this.menu.showAt(d.getXY());if(!this.ctxXmlID){Ext.getCmp("bugs-open-related-file").disable()}else{Ext.getCmp("bugs-open-related-file").enable()}},togglePreview:function(c){this.view.showPreview=c;this.view.refresh()},initComponent:function(c){this.tbar=[{text:_("Summary"),pressed:false,enableToggle:true,iconCls:"iconSummary",scope:this,toggleHandler:function(d,e){this.togglePreview(e)}}];ui.cmp._PortletBugs.grid.superclass.initComponent.call(this);Ext.apply(this,c);this.on("rowcontextmenu",this.onContextClick,this);this.on("rowdblclick",this.onRowDblClick,this)}});ui.cmp._PortletBugs.reloadData=function(){ui.cmp._PortletBugs.store.reload({callback:function(c,e,d){if(!d){Ext.getCmp("PortletBugs-grid-id").getView().mainBody.update('
'+_("Error when loading open bugs from Php.net !")+"
");Ext.get("PortletBugs-grid-defaultMess-id").highlight()}else{if(ui.cmp._PortletBugs.store.getTotalCount()===0){Ext.getCmp("PortletBugs-grid-id").getView().mainBody.update('
'+_("No open bugs")+"
");Ext.get("PortletBugs-grid-defaultMess-id").highlight()}}}})};ui.cmp.PortletBugs=Ext.extend(Ext.ux.Portlet,{title:"",iconCls:"iconBugs",layout:"fit",store:ui.cmp._PortletBugs.store,reloadData:ui.cmp._PortletBugs.reloadData,tools:[{id:"refresh",qtip:_("Refresh this grid"),handler:function(){ui.cmp._PortletBugs.reloadData()}}],listeners:{expand:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletBugsCollapsed",value:false,notify:false})}},collapse:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletBugsCollapsed",value:true,notify:false})}},afterrender:function(c){if(PhDOE.user.conf.portletBugsCollapsed){c.collapse()}else{c.expand()}}},initComponent:function(c){this.id="portletBugs";this.title=String.format(_("Open bugs for {0}"),"doc-"+this.lang);Ext.apply(this,c);ui.cmp.PortletBugs.superclass.initComponent.apply(this);this.add(new ui.cmp._PortletBugs.grid())}});ui.cmp._PortletBugs.instance=null;ui.cmp.PortletBugs.getInstance=function(c){if(!ui.cmp._PortletBugs.instance){if(!c){c={}}ui.cmp._PortletBugs.instance=new ui.cmp.PortletBugs(c)}return ui.cmp._PortletBugs.instance};Ext.namespace("ui","ui.cmp","ui.cmp._PortletInfo");ui.cmp._PortletInfo.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getInfos"}),baseParams:{start:0,limit:10},reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"field"},{name:"value"},{name:"date",type:"date",dateFormat:"Y-m-d H:i:s"},{name:"elapsedTime"}]}),listeners:{load:function(c){var e=c.data.items[0].data.date;PhDOE.lastInfoDate=e.format("Y-m-d H:i:s")}}});ui.cmp._PortletInfo.store.setDefaultSort("date","desc");ui.cmp._PortletInfo.typeRenderer=function(l,j,g){var d,c,m,o,e,k,h,f;switch(l){case"updateData":d=g.data.value.user;return String.format(_("{0} updated app's data"),d);break;case"changeFilesOwner":d=g.data.value.user;return String.format(_("{0} changed file's owner"),d);break;case"checkEntities":d=g.data.value.user;return String.format(_("{0} check all entitites"),d);break;case"logout":d=g.data.value.user;return String.format(_("{0} logged out"),d);break;case"login":d=g.data.value.user;c=g.data.value.lang;authService=g.data.value.authService;f="";if(authService=="google"){f=' '}else{if(authService=="facebook"){f=' '}}return f+String.format(_("{0} is logged in using the {1} language"),d,c.ucFirst());break;case"commitFolders":d=g.data.value.user;c=g.data.value.lang;m=g.data.value.nbFolders;return String.format(_("{0} committed {1} new folder(s) in the {2} language"),d,m,c.ucFirst());break;case"commitFiles":d=g.data.value.user;c=g.data.value.lang;o=g.data.value.nbFilesCreate;e=g.data.value.nbFilesDelete;k=g.data.value.nbFilesUpdate;h=o+e+k;return String.format(_("{0} committed {1} file(s) ({2} new, {3} update, {4} delete) in the language {5}"),d,h,o,k,e,c.ucFirst());break}};ui.cmp._PortletInfo.gridColumns=[new Ext.grid.RowNumberer(),{id:"Type",header:_("Type"),width:180,sortable:true,dataIndex:"field",renderer:ui.cmp._PortletInfo.typeRenderer},{header:_("Since"),width:110,sortable:false,dataIndex:"elapsedTime",renderer:function(d,c,e){if(!d){d=_("Less than one second")}else{d=String.format(_("{0} "+d.units),d.value)}return""+d+""}},{header:_("Date"),width:110,sortable:true,dataIndex:"date",hidden:true,renderer:Ext.util.Format.dateRenderer(_("Y-m-d, H:i"))}];ui.cmp._PortletInfo.grid=Ext.extend(Ext.grid.GridPanel,{autoExpandColumn:"Type",loadMask:true,autoScroll:true,autoHeight:true,store:ui.cmp._PortletInfo.store,columns:ui.cmp._PortletInfo.gridColumns,view:ui.cmp._PortletInfo.gridView,initComponent:function(){Ext.apply(this,{bbar:new Ext.PagingToolbar({pageSize:10,store:this.store,displayInfo:true})});ui.cmp._PortletInfo.grid.superclass.initComponent.call(this);this.on("rowdblclick",this.onRowdblclick,this)}});ui.cmp.PortletInfo=Ext.extend(Ext.ux.Portlet,{title:_("Information"),iconCls:"iconInfo",layout:"fit",store:ui.cmp._PortletInfo.store,tools:[{id:"refresh",qtip:_("Refresh this grid"),handler:function(){ui.cmp._PortletInfo.store.reload()}}],listeners:{expand:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletInfoCollapsed",value:false,notify:false})}},collapse:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletInfoCollapsed",value:true,notify:false})}},afterrender:function(c){if(PhDOE.user.conf.portletInfoCollapsed){c.collapse()}else{c.expand()}}},initComponent:function(c){this.id="portletInfo";Ext.apply(this,c);ui.cmp.PortletInfo.superclass.initComponent.apply(this);this.add(new ui.cmp._PortletInfo.grid())}});ui.cmp._PortletInfo.instance=null;ui.cmp.PortletInfo.getInstance=function(c){if(!ui.cmp._PortletInfo.instance){if(!c){c={}}ui.cmp._PortletInfo.instance=new ui.cmp.PortletInfo(c)}return ui.cmp._PortletInfo.instance};Ext.namespace("ui","ui.cmp","ui.cmp._PortletLocalMail");ui.cmp._PortletLocalMail.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getLastNews"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"title"},{name:"link"},{name:"description"},{name:"pubDate",type:"date",dateFormat:"Y/m/d H:i:s"}]})});ui.cmp._PortletLocalMail.store.setDefaultSort("pubDate","desc");ui.cmp._PortletLocalMail.columns=[new Ext.grid.RowNumberer(),{id:"GridMailingTitle",header:_("Title"),sortable:true,dataIndex:"title"},{header:_("By"),width:100,sortable:true,dataIndex:"description"},{header:_("Date"),width:100,sortable:true,dataIndex:"pubDate",renderer:Ext.util.Format.dateRenderer(_("Y-m-d, H:i"))}];ui.cmp._PortletLocalMail.grid=Ext.extend(Ext.grid.GridPanel,{loadMask:true,autoScroll:true,height:250,autoExpandColumn:"GridMailingTitle",id:"PortletLocalMail-grid-id",store:ui.cmp._PortletLocalMail.store,columns:ui.cmp._PortletLocalMail.columns,sm:new Ext.grid.RowSelectionModel({singleSelect:true}),view:new Ext.grid.GridView({forceFit:true,enableRowBody:true,ignoreAdd:true,emptyText:'
'+_("You must manually load this data.
Use the refresh button !")+"
",deferEmptyText:false}),onRowDblClick:function(d,g){var c=d.store.getAt(g).data.pubDate,f=d.store.getAt(g).data.link,e=d.store.getAt(g).data.title;if(!Ext.getCmp("main-panel").findById("mail-"+c)){Ext.getCmp("main-panel").add({xtype:"panel",id:"mail-"+c,title:Ext.util.Format.substr(e,0,20)+"...",tabTip:e,iconCls:"iconMailing",closable:true,layout:"fit",items:[new Ext.ux.IFrameComponent({id:"frame-mail-"+c,url:f})]})}Ext.getCmp("main-panel").setActiveTab("mail-"+c)},onContextClick:function(c,f,d){if(!this.menu){this.menu=new Ext.menu.Menu({id:"submenu-mail",items:[{scope:this,text:""+_("Open in a new Tab")+"",iconCls:"iconOpenInTab",handler:function(){this.fireEvent("rowdblclick",c,this.ctxIndex,d);this.menu.hide()}},"-",{scope:this,text:_("Refresh this grid"),iconCls:"iconRefresh",handler:function(){this.ctxIndex=null;ui.cmp._PortletLocalMail.reloadData()}}]})}this.getSelectionModel().selectRow(f);d.stopEvent();if(this.ctxIndex){this.ctxIndex=null}this.ctxIndex=f;this.menu.showAt(d.getXY())},initComponent:function(c){ui.cmp._PortletLocalMail.grid.superclass.initComponent.call(this);Ext.apply(this,c);this.on("rowcontextmenu",this.onContextClick,this);this.on("rowdblclick",this.onRowDblClick,this)}});ui.cmp._PortletLocalMail.reloadData=function(){ui.cmp._PortletLocalMail.store.reload({callback:function(d,e,c){if(!c){Ext.getCmp("PortletLocalMail-grid-id").getView().mainBody.update('
'+_("Error when loading mails from this mailing list !")+"
");Ext.get("PortletLocalMail-grid-defaultMess-id").highlight()}}})};ui.cmp.PortletLocalMail=Ext.extend(Ext.ux.Portlet,{title:"",iconCls:"iconMailing",layout:"fit",store:ui.cmp._PortletLocalMail.store,reloadData:ui.cmp._PortletLocalMail.reloadData,tools:[{id:"refresh",qtip:_("Refresh this grid"),handler:function(){ui.cmp._PortletLocalMail.reloadData()}}],listeners:{expand:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletLocalMailCollapsed",value:false,notify:false})}},collapse:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletLocalMailCollapsed",value:true,notify:false})}},afterrender:function(c){if(PhDOE.user.conf.portletLocalMailCollapsed){c.collapse()}else{c.expand()}}},initComponent:function(c){this.id="portletLocalMail";Ext.apply(this,c);ui.cmp.PortletLocalMail.superclass.initComponent.apply(this);this.title=String.format(_("Mail from {0}"),"doc-"+this.lang);this.add(new ui.cmp._PortletLocalMail.grid())}});ui.cmp._PortletLocalMail.instance=null;ui.cmp.PortletLocalMail.getInstance=function(c){if(!ui.cmp._PortletLocalMail.instance){if(!c){c={}}ui.cmp._PortletLocalMail.instance=new ui.cmp.PortletLocalMail(c)}return ui.cmp._PortletLocalMail.instance};Ext.namespace("ui","ui.cmp","ui.cmp._PortletSummary");ui.cmp._PortletSummary.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getSummaryInfo"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"libel"},{name:"nbFiles"},{name:"percentFiles"},{name:"sizeFiles"},{name:"percentSize"}]}),listeners:{load:function(){this.each(function(c){switch(c.id){case 1:c.set("libel",_("Up to date files"));break;case 2:c.set("libel",_("Stale files"));break;case 3:c.set("libel",_("Files available for translation"));break;case 4:c.set("libel",_("Total"));break;default:c.set("libel","");break}c.commit()})}}});ui.cmp._PortletSummary.gridColumns=[new Ext.grid.RowNumberer(),{id:"StatusType",header:_("File status type"),width:180,sortable:true,dataIndex:"libel"},{header:_("Number of files"),width:110,sortable:true,dataIndex:"nbFiles"},{header:_("Percent of files"),width:110,sortable:true,dataIndex:"percentFiles"},{header:_("Size of files (kB)"),width:110,sortable:true,dataIndex:"sizeFiles"},{header:_("Percent of size"),width:110,sortable:true,dataIndex:"percentSize"}];ui.cmp._PortletSummary.gridView=new Ext.grid.GridView({getRowClass:function(c){switch(c.data.id){case 1:return"summary_1";case 2:return"summary_2";case 3:return"summary_3";case 4:return"summary_4";default:return""}}});ui.cmp._PortletSummary.grid=Ext.extend(Ext.grid.GridPanel,{loadMask:true,autoScroll:true,autoHeight:true,store:ui.cmp._PortletSummary.store,columns:ui.cmp._PortletSummary.gridColumns,view:ui.cmp._PortletSummary.gridView,onRowdblclick:function(c,e){var d=c.store.getAt(e).data.id;if(d===2){Ext.getCmp("acc-need-update").expand()}if(d===3){Ext.getCmp("acc-need-translate").expand()}},initComponent:function(c){ui.cmp._PortletSummary.grid.superclass.initComponent.call(this);Ext.apply(this,c);this.on("rowdblclick",this.onRowdblclick,this)}});ui.cmp.PortletSummary=Ext.extend(Ext.ux.Portlet,{title:_("Summary"),iconCls:"",layout:"fit",store:ui.cmp._PortletSummary.store,tools:[{id:"refresh",qtip:_("Refresh this grid"),handler:function(){ui.cmp._PortletSummary.store.reload()}}],listeners:{expand:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletSummaryCollapsed",value:false,notify:false})}},collapse:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletSummaryCollapsed",value:true,notify:false})}}},initComponent:function(c){this.id="portletSummary";Ext.apply(this,c);ui.cmp.PortletSummary.superclass.initComponent.apply(this);this.add(new ui.cmp._PortletSummary.grid())},afterRender:function(){ui.cmp.PortletSummary.superclass.afterRender.call(this);var c={cs:"cz",sr:"rs",sv:"se"};this.header.insertFirst({tag:"div",id:Ext.id(),style:"float: left; margin-right: 2px;",cls:"flags flag-"+(c[this.lang]||this.lang)},"first");if(PhDOE.user.conf.portletSummaryCollapsed){this.collapse()}else{this.expand()}}});ui.cmp._PortletSummary.instance=null;ui.cmp.PortletSummary.getInstance=function(c){if(!ui.cmp._PortletSummary.instance){if(!c){c={}}ui.cmp._PortletSummary.instance=new ui.cmp.PortletSummary(c)}return ui.cmp._PortletSummary.instance};Ext.namespace("ui","ui.cmp","ui.cmp._PortletTranslationGraph");function renderLibel(c){return _(c)}ui.cmp._PortletTranslationGraph.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getGraphLang"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"libel",convert:renderLibel},{name:"total"}]})});ui.cmp._PortletTranslationGraph.chart=Ext.extend(Ext.chart.PieChart,{height:400,url:"js/ExtJs/resources/charts.swf",dataField:"total",categoryField:"libel",store:ui.cmp._PortletTranslationGraph.store,series:[{style:{colors:["#68D888","#FF6347","#EEE8AA"]}}],extraStyle:{legend:{display:"bottom",padding:5,font:{family:"Tahoma",size:13}}},initComponent:function(c){ui.cmp._PortletTranslationGraph.chart.superclass.initComponent.call(this);Ext.apply(this,c)}});ui.cmp.PortletTranslationGraph=Ext.extend(Ext.ux.Portlet,{title:_("Graphics"),iconCls:"iconGraphic",layout:"fit",store:ui.cmp._PortletTranslationGraph.store,tools:[{id:"refresh",qtip:_("Refresh this graph"),handler:function(){ui.cmp._PortletTranslationGraph.store.reload()}}],initComponent:function(c){this.id="portletTranslationGraph";Ext.apply(this,c);ui.cmp.PortletTranslationGraph.superclass.initComponent.apply(this);this.add(new ui.cmp._PortletTranslationGraph.chart())}});ui.cmp._PortletTranslationGraph.instance=null;ui.cmp.PortletTranslationGraph.getInstance=function(c){if(!ui.cmp._PortletTranslationGraph.instance){if(!c){c={}}ui.cmp._PortletTranslationGraph.instance=new ui.cmp.PortletTranslationGraph(c)}return ui.cmp._PortletTranslationGraph.instance};Ext.namespace("ui","ui.cmp","ui.cmp._PortletTranslationsGraph");ui.cmp._PortletTranslationsGraph.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getGraphLangs"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"libel",type:"string"},{name:"fullLibel",type:"string"},{name:"total",type:"int"},{name:"percent",type:"float"}]})});ui.cmp._PortletTranslationsGraph.chart=Ext.extend(Ext.chart.ColumnChart,{height:400,url:"js/ExtJs/resources/charts.swf",xField:"libel",tipRenderer:function(d,c){return _("Lang:")+" "+c.data.fullLibel+"\r"+_("Total:")+" "+c.data.total+" "+_("files")+" ("+c.data.percent+"%)"},series:[{type:"column",displayName:"Total",yField:"total",style:{image:"themes/img/bar.gif",mode:"stretch",color:10075112}}],store:ui.cmp._PortletTranslationsGraph.store,initComponent:function(c){ui.cmp._PortletTranslationsGraph.chart.superclass.initComponent.call(this);Ext.apply(this,c)}});ui.cmp.PortletTranslationsGraph=Ext.extend(Ext.ux.Portlet,{title:_("Graphics for all languages"),iconCls:"iconGraphic",layout:"fit",store:ui.cmp._PortletTranslationsGraph.store,tools:[{id:"refresh",qtip:_("Refresh this graph"),handler:function(){ui.cmp._PortletTranslationsGraph.store.reload()}}],initComponent:function(c){this.id="portletTranslationsGraph";Ext.apply(this,c);ui.cmp.PortletTranslationsGraph.superclass.initComponent.apply(this);this.add(new ui.cmp._PortletTranslationsGraph.chart())}});ui.cmp._PortletTranslationsGraph.instance=null;ui.cmp.PortletTranslationsGraph.getInstance=function(c){if(!ui.cmp._PortletTranslationsGraph.instance){if(!c){c={}}ui.cmp._PortletTranslationsGraph.instance=new ui.cmp.PortletTranslationsGraph(c)}return ui.cmp._PortletTranslationsGraph.instance};Ext.namespace("ui","ui.cmp","ui.cmp._PortletTranslator","ui.cmp._PortletReviewer");ui.cmp._PortletTranslator.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getTranslatorInfo"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"name"},{name:"email",mapping:"mail"},{name:"nick"},{name:"vcs"},{name:"uptodate",type:"int"},{name:"stale",type:"int"},{name:"sum",type:"int"}]}),listeners:{load:function(){var d=this.getCount(),c=d*20;ui.cmp.PortletTranslator.getInstance().setHeight(c+124);ui.cmp.PortletTranslator.getInstance().doLayout()}}});ui.cmp._PortletTranslator.store.setDefaultSort("nick","asc");ui.cmp._PortletReviewer.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getReviewerInfo"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"name"},{name:"email",mapping:"mail"},{name:"nick"},{name:"vcs"},{name:"reviewedUptodate",type:"int"},{name:"reviewedStale",type:"int"},{name:"reviewedSum",type:"int"}]})});ui.cmp._PortletReviewer.store.setDefaultSort("nick","asc");ui.cmp._PortletTranslator.translatorSumRenderer=function(c){if(c){c=(c===0||c>1)?c:1;return String.format("("+_("{0} Translators")+")",c)}else{return false}};ui.cmp._PortletReviewer.translatorSumRenderer=function(c){if(c){c=(c===0||c>1)?c:1;return String.format("("+_("{0} Reviewers")+")",c)}else{return _("No reviewer")}};ui.cmp._PortletTranslator.uptodateRenderer=function(c){if(c==="0"){return false}else{return''+c+""}};ui.cmp._PortletReviewer.uptodateRenderer=function(c){if(c==="0"){return false}else{return''+c+""}};ui.cmp._PortletTranslator.staleRenderer=function(c){if(c==="0"){return false}else{return''+c+""}};ui.cmp._PortletReviewer.staleRenderer=function(c){if(c==="0"){return false}else{return''+c+""}};ui.cmp._PortletTranslator.sumRenderer=function(c){return(c==="0")?"":c};ui.cmp._PortletReviewer.sumRenderer=function(c){return(c==="0")?"":c};ui.cmp._PortletTranslator.gridColumns=[new Ext.grid.RowNumberer(),{id:"GridTransName",header:_("Name"),sortable:true,dataIndex:"name",summaryType:"count",summaryRenderer:ui.cmp._PortletTranslator.translatorSumRenderer},{header:_("Email"),width:110,sortable:true,dataIndex:"email"},{header:_("Nick"),width:70,sortable:true,dataIndex:"nick"},{header:_("VCS"),width:45,sortable:true,dataIndex:"vcs"},{header:_("UptoDate"),width:60,sortable:true,renderer:ui.cmp._PortletTranslator.uptodateRenderer,dataIndex:"uptodate",summaryType:"sum"},{header:_("Stale"),width:90,sortable:true,renderer:ui.cmp._PortletTranslator.staleRenderer,dataIndex:"stale",summaryType:"sum"},{header:_("Sum"),width:50,sortable:true,renderer:ui.cmp._PortletTranslator.sumRenderer,dataIndex:"sum",summaryType:"sum"}];ui.cmp._PortletReviewer.gridColumns=[new Ext.grid.RowNumberer(),{id:"GridTransName",header:_("Name"),sortable:true,dataIndex:"name",summaryType:"count",summaryRenderer:ui.cmp._PortletReviewer.translatorSumRenderer},{header:_("Email"),width:110,sortable:true,dataIndex:"email"},{header:_("Nick"),width:70,sortable:true,dataIndex:"nick"},{header:_("VCS"),width:45,sortable:true,dataIndex:"vcs"},{header:_("Reviewed"),width:60,sortable:true,renderer:ui.cmp._PortletReviewer.uptodateRenderer,dataIndex:"reviewedUptodate",summaryType:"sum"},{header:_("Must be reviewed"),width:90,sortable:true,renderer:ui.cmp._PortletReviewer.staleRenderer,dataIndex:"reviewedStale",summaryType:"sum"},{header:_("Sum"),width:50,sortable:true,renderer:ui.cmp._PortletReviewer.sumRenderer,dataIndex:"reviewedSum",summaryType:"sum"}];ui.cmp._PortletTranslator.grid=Ext.extend(Ext.grid.GridPanel,{title:_("Translators"),loadMask:true,autoScroll:true,autoHeight:true,plugins:[new Ext.ux.grid.GridSummary()],store:ui.cmp._PortletTranslator.store,columns:ui.cmp._PortletTranslator.gridColumns,autoExpandColumn:"GridTransName",sm:new Ext.grid.RowSelectionModel({singleSelect:true}),lang:this.lang,EmailPrompt:new ui.cmp.EmailPrompt(),onRowDblClick:function(d,e){this.getSelectionModel().selectRow(e);if(this.ctxTranslatorName){this.ctxTranslatorEmail=null;this.ctxTranslatorName=null}this.ctxTranslatorEmail=this.store.getAt(e).data.email;this.ctxTranslatorName=this.store.getAt(e).data.name;var c=this.store.getAt(e).data.nick;if(c==="nobody"){return}this.EmailPrompt.setData(this.ctxTranslatorName,this.ctxTranslatorEmail);this.EmailPrompt.show("lastUpdateTime")},onContextClick:function(d,g,f){if(!this.menu){this.menu=new Ext.menu.Menu({id:"submenu-translators",items:[{scope:this,text:"",iconCls:"iconSendEmail",handler:function(){this.EmailPrompt.setData(this.ctxTranslatorName,this.ctxTranslatorEmail);this.EmailPrompt.show("lastUpdateTime")}},"-",{scope:this,text:String.format(_("Send an email to the {0}"),String.format(PhDOE.app.conf.projectMailList,this.lang)),iconCls:"iconSendEmail",handler:function(){this.EmailPrompt.setData("Php Doc Team "+this.lang,String.format(PhDOE.app.conf.projectMailList,this.lang));this.EmailPrompt.show("lastUpdateTime")}}]})}this.getSelectionModel().selectRow(g);f.stopEvent();if(this.ctxTranslatorName){this.ctxTranslatorName=null;this.ctxTranslatorEmail=null}this.ctxTranslatorName=this.store.getAt(g).data.name;this.ctxTranslatorEmail=this.store.getAt(g).data.email;var c=this.store.getAt(g).data.nick;if(c==="nobody"){return}this.menu.items.items[0].setText(""+String.format(_("Send an email to {0}"),this.ctxTranslatorName)+"");this.menu.showAt(f.getXY())},initComponent:function(c){ui.cmp._PortletTranslator.grid.superclass.initComponent.call(this);Ext.apply(this,c);this.on("rowcontextmenu",this.onContextClick,this);this.on("rowdblclick",this.onRowDblClick,this)}});ui.cmp._PortletReviewer.grid=Ext.extend(Ext.grid.GridPanel,{title:_("Reviewers"),loadMask:true,autoScroll:true,autoHeight:true,plugins:[new Ext.ux.grid.GridSummary()],store:ui.cmp._PortletReviewer.store,columns:ui.cmp._PortletReviewer.gridColumns,autoExpandColumn:"GridTransName",sm:new Ext.grid.RowSelectionModel({singleSelect:true}),lang:this.lang,EmailPrompt:new ui.cmp.EmailPrompt(),onRowDblClick:function(d,e){this.getSelectionModel().selectRow(e);if(this.ctxTranslatorName){this.ctxTranslatorEmail=null;this.ctxTranslatorName=null}this.ctxTranslatorEmail=this.store.getAt(e).data.email;this.ctxTranslatorName=this.store.getAt(e).data.name;var c=this.store.getAt(e).data.nick;if(c==="nobody"){return}this.EmailPrompt.setData(this.ctxTranslatorName,this.ctxTranslatorEmail);this.EmailPrompt.show("lastUpdateTime")},onContextClick:function(d,g,f){if(!this.menu){this.menu=new Ext.menu.Menu({id:"submenu-translators",items:[{scope:this,text:"",iconCls:"iconSendEmail",handler:function(){this.EmailPrompt.setData(this.ctxTranslatorName,this.ctxTranslatorEmail);this.EmailPrompt.show("lastUpdateTime")}},"-",{scope:this,text:String.format(_("Send an email to the {0}"),String.format(PhDOE.app.conf.projectMailList,this.lang)),iconCls:"iconSendEmail",handler:function(){this.EmailPrompt.setData("Php Doc Team "+this.lang,String.format(PhDOE.app.conf.projectMailList,this.lang));this.EmailPrompt.show("lastUpdateTime")}}]})}this.getSelectionModel().selectRow(g);f.stopEvent();if(this.ctxTranslatorName){this.ctxTranslatorName=null;this.ctxTranslatorEmail=null}this.ctxTranslatorName=this.store.getAt(g).data.name;this.ctxTranslatorEmail=this.store.getAt(g).data.email;var c=this.store.getAt(g).data.nick;if(c==="nobody"){return}this.menu.items.items[0].setText(""+String.format(_("Send an email to {0}"),this.ctxTranslatorName)+"");this.menu.showAt(f.getXY())},initComponent:function(c){ui.cmp._PortletReviewer.grid.superclass.initComponent.call(this);Ext.apply(this,c);this.on("rowcontextmenu",this.onContextClick,this);this.on("rowdblclick",this.onRowDblClick,this)}});ui.cmp.PortletTranslator=Ext.extend(Ext.ux.Portlet,{title:_("Translators & Reviewer"),iconCls:"iconTranslator",layout:"fit",storeTranslator:ui.cmp._PortletTranslator.store,storeReviewer:ui.cmp._PortletReviewer.store,tools:[{id:"refresh",qtip:_("Refresh this grid"),handler:function(){ui.cmp._PortletTranslator.store.reload({callback:function(){ui.cmp._PortletReviewer.store.reload()}})}}],listeners:{expand:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletTranslatorCollapsed",value:false,notify:false})}},collapse:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletTranslatorCollapsed",value:true,notify:false})}},afterrender:function(c){if(PhDOE.user.conf.portletTranslatorCollapsed){c.collapse()}else{c.expand()}}},initComponent:function(c){this.id="portletTranslator";Ext.apply(this,c);ui.cmp.PortletTranslator.superclass.initComponent.apply(this);this.add({xtype:"tabpanel",activeTab:0,border:false,height:200,tabPosition:"bottom",autoScroll:true,items:[new ui.cmp._PortletTranslator.grid({lang:this.lang}),new ui.cmp._PortletReviewer.grid({lang:this.lang})]})}});ui.cmp._PortletTranslator.instance=null;ui.cmp.PortletTranslator.getInstance=function(c){if(!ui.cmp._PortletTranslator.instance){if(!c){c={}}ui.cmp._PortletTranslator.instance=new ui.cmp.PortletTranslator(c)}return ui.cmp._PortletTranslator.instance};Ext.namespace("ui","ui.cmp");ui.cmp.PreviewFile=Ext.extend(Ext.Window,{id:"winPreviewFile",layout:"fit",title:_("Preview"),iconCls:"iconView",closable:true,closeAction:"close",maximized:true,modal:true,buttons:[{text:_("Close"),handler:function(){this.ownerCt.ownerCt.close()}}],initComponent:function(){var c=this;ui.cmp.PreviewFile.superclass.initComponent.call(this);XHR({params:{task:"previewFile",path:this.path},success:function(d){var f=Ext.util.JSON.decode(d.responseText),e;f.url=f.url+"?"+Math.random();e=new Ext.ux.IFrameComponent({id:"frame-previewFile",url:f.url});c.add(e);c.show()},failure:function(){}})}});Ext.namespace("ui","ui.cmp","ui.cmp._RepositoryTree");ui.cmp._RepositoryTree.root={nodeType:"async",id:"/",text:_("Repository"),draggable:false};ui.cmp._RepositoryTree.loader=new Ext.tree.TreeLoader({dataUrl:"./do/getAllFiles"});ui.cmp._RepositoryTree.winAddNewFile=Ext.extend(Ext.Window,{title:_("Add a new file"),iconCls:"iconFilesNeedTranslate",id:"win-add-new-file",layout:"form",width:350,height:170,resizable:false,modal:true,bodyStyle:"padding:5px 5px 0",labelWidth:150,buttons:[{id:"win-add-new-file-btn",text:_("Open the editor"),disabled:true,handler:function(){var d=Ext.getCmp("win-add-new-file"),f=d.node.id,c=d.items.items[1].getValue(),e=d.items.items[2].getValue();if(d.node.findChild("id",f+"/"+c)){PhDOE.winForbidden("file_already_exist");return true}d.openFile(f+"/",c,e);d.close();return true}}],openFile:function(e,c,j){var h=Ext.util.md5("FNT-"+e+c),g={data:{fileModified:false,node:this.node}},d=e.split("/"),f;d.shift();f=d[0];d.shift();d.pop();e="/"+d.join("/")+"/";if(e==="//"){e="/"}h=Ext.util.md5("FNT-"+e+c);if(!Ext.getCmp("main-panel").findById("FNT-"+h)){Ext.getCmp("main-panel").add({id:"FNT-"+h,layout:"border",title:c,originTitle:c,iconCls:"iconTabNeedTranslate",closable:true,tabLoaded:false,panTRANSLoaded:false,panGGTRANSLoaded:true,defaults:{split:true},tabTip:String.format(_("New file: in {0}"),f+e),items:[new ui.cmp.FilePanel({id:"FNT-NEW-PANEL-"+h,region:"center",title:_("New file: ")+f+e+c,isTrans:true,prefix:"FNT",ftype:"NEW",fid:h,fpath:e,fname:c,lang:f,parser:"xml",storeRecord:g,syncScrollCB:false,syncScroll:false,skeleton:j})]})}Ext.getCmp("main-panel").setActiveTab("FNT-"+h)},initComponent:function(){Ext.apply(this,{items:[{xtype:"displayfield",fieldLabel:_("Parent Folder"),value:this.node.id},{xtype:"textfield",fieldLabel:_("Name for the new file"),name:"newFolderName",listeners:{valid:function(){Ext.getCmp("win-add-new-file-btn").enable()},invalid:function(){Ext.getCmp("win-add-new-file-btn").disable()}}},{xtype:"combo",triggerAction:"all",width:160,editable:false,store:new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getSkeletonsNames"}),reader:new Ext.data.JsonReader({root:"Items",idProperty:"name",fields:[{name:"name"},{name:"path"}]})}),listeners:{select:function(f,d,e){if(f.ownerCt.items.items[1].getValue()===""){f.ownerCt.items.items[1].setValue(d.data.name)}}},valueField:"path",displayField:"name",fieldLabel:_("Chose a skeleton")}]});ui.cmp._RepositoryTree.winAddNewFile.superclass.initComponent.call(this)}});ui.cmp._RepositoryTree.winAddNewFolder=Ext.extend(Ext.Window,{title:_("Add a new folder"),iconCls:"iconFolderNew",id:"win-add-new-folder",layout:"form",width:350,height:200,resizable:false,modal:true,bodyStyle:"padding:5px 5px 0",labelWidth:150,buttons:[{id:"win-add-new-folder-btn",text:"Add",disabled:true,handler:function(){var c=Ext.getCmp("win-add-new-folder"),e=c.node.id,d=c.items.items[1].getValue();XHR({params:{task:"addNewFolder",parentFolder:e,newFolderName:d},success:function(){Ext.getCmp("win-add-new-folder").close();c.node.reload();PhDOE.notify("info",_("Folder created"),String.format(_("Folder

{0}

was created sucessfully under {1} !"),d,e))},failure:function(f){var g=Ext.util.JSON.decode(f.responseText);if(g.type){PhDOE.winForbidden(g.type)}else{PhDOE.winForbidden()}}})}}],initComponent:function(){Ext.apply(this,{items:[{xtype:"displayfield",fieldLabel:_("Parent Folder"),value:this.node.id},{xtype:"textfield",fieldLabel:_("Name for the new folder"),name:"newFolderName",vtype:"alphanum",listeners:{valid:function(){Ext.getCmp("win-add-new-folder-btn").enable()},invalid:function(){Ext.getCmp("win-add-new-folder-btn").disable()}}},{xtype:"box",html:_("Info: This new folder won't be commited until a new file will be commited into it. If you don't commit any new file into it until 8 days, it will be automatically deleted.")}]});ui.cmp._RepositoryTree.winAddNewFolder.superclass.initComponent.call(this)}});Ext.namespace("ui.cmp._RepositoryTree.menu");ui.cmp._RepositoryTree.menu.folder=function(c){Ext.apply(this,c);this.init();ui.cmp._RepositoryTree.menu.folder.superclass.constructor.call(this)};Ext.extend(ui.cmp._RepositoryTree.menu.folder,Ext.menu.Menu,{init:function(){Ext.apply(this,{items:[{text:(this.node.isExpanded())?""+_("Collapse")+"":""+_("Expand")+"",iconCls:"iconFolderClose",scope:this,handler:function(){if(this.node.isExpanded()){this.node.collapse()}else{this.node.expand()}}},"-",{text:_("Update this folder"),iconCls:"iconFilesNeedUpdate",scope:this,handler:function(){this.node.expand();new ui.task.UpdateSingleFolderTask(this.node)}},{text:_("Add a new folder"),iconCls:"iconFolderNew",hidden:(this.node.id==="/"||(Ext.util.Format.substr(this.node.id,0,3)!=="/en"&&Ext.util.Format.substr(this.node.id,0,9)!=="/doc-base")),scope:this,handler:function(){this.node.expand();var c=new ui.cmp._RepositoryTree.winAddNewFolder({node:this.node});c.show(this.node.ui.getEl())}},{text:_("Add a new file"),iconCls:"iconFilesNeedTranslate",hidden:(this.node.id==="/"||(Ext.util.Format.substr(this.node.id,0,3)!=="/en"&&Ext.util.Format.substr(this.node.id,0,9)!=="/doc-base")),scope:this,handler:function(){this.node.expand();var c=new ui.cmp._RepositoryTree.winAddNewFile({node:this.node});c.show(this.node.ui.getEl())}}]})}});ui.cmp._RepositoryTree.menu.file=function(c){Ext.apply(this,c);this.init();ui.cmp._RepositoryTree.menu.file.superclass.constructor.call(this)};Ext.extend(ui.cmp._RepositoryTree.menu.file,Ext.menu.Menu,{init:function(){var c=this.node.attributes.text,d=this.node.attributes.id.split("/"),f,e;d.shift();f=d[0];d.shift();d.pop();e=d.join("/")+"/";Ext.apply(this,{items:[{text:""+_("Edit in a new tab")+"",iconCls:"iconTabNeedReviewed",scope:this,handler:function(){ui.cmp._RepositoryTree.instance.fireEvent("dblclick",this.node)}},{hidden:(this.node.attributes.from==="search"||PhDOE.user.lang==="en"),text:(f==="en")?String.format(_("Open the same file in {0}"),Ext.util.Format.uppercase(PhDOE.user.lang)):String.format(_("Open the same file in {0}"),"EN"),iconCls:"iconTabNeedReviewed",scope:this,handler:function(){if(f==="en"){ui.cmp._RepositoryTree.instance.openFile("byPath",PhDOE.user.lang+"/"+e,c)}else{ui.cmp._RepositoryTree.instance.openFile("byPath","en/"+e,c)}}}]})}});ui.cmp.RepositoryTree=Ext.extend(Ext.ux.MultiSelectTreePanel,{animate:true,enableDD:true,ddGroup:"mainPanelDDGroup",useArrows:true,autoScroll:true,border:false,containerScroll:true,root:ui.cmp._RepositoryTree.root,loader:ui.cmp._RepositoryTree.loader,onContextMenu:function(c,d){d.stopEvent();c.select();if(c.attributes.type==="folder"||c.isRoot){new ui.cmp._RepositoryTree.menu.folder({node:c}).showAt(d.getXY())}else{if(c.attributes.type==="file"){new ui.cmp._RepositoryTree.menu.file({node:c}).showAt(d.getXY())}}},onDblClick:function(c){if(c.attributes.type==="file"){this.openFile("byId",c.attributes.id,false)}},openFile:function(r,m,g){if(r==="byPath"){Ext.getCmp("acc-all-files").expand();var f=m,j=g,u=f.split("/"),l=function(w){w.ensureVisible();if(u[0]&&u[0]!==""){for(var t=0;t0)?"/"+u.join("/")+"/":"/";p=Ext.util.md5("AF-"+h+c+e);if(!Ext.getCmp("main-panel").findById("AF-"+p)){if(s!=="html"){d=s}else{d="xml"}if(s==="gif"||s==="png"||s==="jpg"){o={};q={id:"AF-ALL-FILE-"+p,xtype:"panel",region:"center",layout:"fit",bodyStyle:"padding:5px 5px 0",html:''}}else{o={xtype:"panel",region:"west",title:_("Tools"),iconCls:"iconConf",collapsedIconCls:"iconConf",plugins:[Ext.ux.PanelCollapsedTitle],layout:"fit",bodyBorder:false,split:true,collapsible:true,collapsed:!PhDOE.user.conf.allFiles.toolsPanelDisplay,width:PhDOE.user.conf.allFiles.toolsPanelWidth||375,listeners:{collapse:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"allFiles",itemName:"toolsPanelDisplay",value:false,notify:false})}},expand:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"allFiles",itemName:"toolsPanelDisplay",value:true,notify:false})}},resize:function(t,v){if(this.ownerCt.tabLoaded&&v&&v!=PhDOE.user.conf.allFiles.toolsPanelWidth){new ui.task.UpdateConfTask({module:"allFiles",itemName:"toolsPanelWidth",value:v,notify:false})}}},items:{xtype:"tabpanel",activeTab:0,defaults:{autoScroll:true},items:[{title:_("Log"),layout:"fit",items:[new ui.cmp.VCSLogGrid({prefix:"AF",fid:p,fpath:h+c,fname:e,loadStore:PhDOE.user.conf.allFiles.toolsPanelLogLoad})]},{title:_("Entities"),layout:"fit",items:[new ui.cmp.EntitiesAcronymsPanel({dataType:"entities",prefix:"AF",ftype:"ALL",fid:p,loadStore:PhDOE.user.conf.allFiles.toolsPanelEntitiesLoad})]},{title:_("Acronyms"),layout:"fit",items:[new ui.cmp.EntitiesAcronymsPanel({dataType:"acronyms",prefix:"AF",ftype:"ALL",fid:p,loadStore:PhDOE.user.conf.allFiles.toolsPanelAcronymsLoad})]}]}};q=new ui.cmp.FilePanel({id:"AF-ALL-PANEL-"+p,region:"center",title:_("File: ")+h+c+e,prefix:"AF",ftype:"ALL",spellCheck:PhDOE.user.conf.allFiles.enableSpellCheck,spellCheckConf:{module:"allFiles",itemName:"enableSpellCheck"},fid:p,fpath:c,fname:e,lang:h,parser:d,storeRecord:k,syncScrollCB:false,syncScroll:false})}Ext.getCmp("main-panel").add({id:"AF-"+p,layout:"border",title:e,originTitle:e,closable:true,tabLoaded:false,panEntities:!PhDOE.user.conf.allFiles.toolsPanelEntitiesLoad,panAcronyms:!PhDOE.user.conf.allFiles.toolsPanelAcronymsLoad,panVCS:!PhDOE.user.conf.allFiles.toolsPanelLogLoad,panLoaded:false,tabTip:String.format(_("in {0}"),c),iconCls:"iconAllFiles",items:[q,o]})}Ext.getCmp("main-panel").setActiveTab("AF-"+p)}},initComponent:function(){Ext.apply(this,{tbar:[_("Search: ")," ",new Ext.form.TwinTriggerField({id:"AF-search",validationEvent:false,validateOnBlur:false,trigger1Class:"x-form-clear-trigger",trigger2Class:"x-form-search-trigger",hideTrigger1:true,width:180,enableKeyEvents:true,listeners:{keypress:function(d,c){if(c.getKey()===c.ENTER){this.onTrigger2Click()}}},onTrigger1Click:function(){var c=ui.cmp._RepositoryTree.instance;this.setValue("");this.triggers[0].hide();this.setSize(180,10);c.root.setText(_("Repository"));delete c.loader.baseParams.search;c.root.reload()},onTrigger2Click:function(){var c=ui.cmp._RepositoryTree.instance,d=this.getValue();if(d===""||d.length<3){this.markInvalid(_("Your search must contain at least 3 characters"));return}this.clearInvalid();this.triggers[0].show();this.setSize(180,10);c.loader.baseParams.search=d;c.root.reload(function(){c.root.setText(String.format(_("Search result: {0}"),c.root.childNodes.length))})}})]});ui.cmp.RepositoryTree.superclass.initComponent.call(this);this.on("contextmenu",this.onContextMenu,this);this.on("dblclick",this.onDblClick,this);new Ext.tree.TreeSorter(this,{folderSort:true})}});ui.cmp._RepositoryTree.instance=null;ui.cmp.RepositoryTree.getInstance=function(c){if(!ui.cmp._RepositoryTree.instance){if(!c){c={}}ui.cmp._RepositoryTree.instance=new ui.cmp.RepositoryTree(c)}return ui.cmp._RepositoryTree.instance};Ext.namespace("ui","ui.cmp","ui.cmp._StaleFileGrid");ui.cmp._StaleFileGrid.store=new Ext.data.GroupingStore({proxy:new Ext.data.HttpProxy({url:"./do/getFilesNeedUpdate"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"path"},{name:"name"},{name:"revision"},{name:"original_revision"},{name:"en_revision"},{name:"maintainer"},{name:"fileModifiedEN"},{name:"fileModifiedLang"}]}),sortInfo:{field:"name",direction:"ASC"},groupField:"path",listeners:{datachanged:function(e){var c=e.getCount(),d=false;if(!PhDOE.user.isAnonymous){e.each(function(f){if(f.data.maintainer==PhDOE.user.login){d++}},this)}if(d){Ext.getDom("acc-need-update-nb").innerHTML=c+" - "+String.format(_("{0} mine"),d)}else{Ext.getDom("acc-need-update-nb").innerHTML=c}}}});ui.cmp._StaleFileGrid.view=new Ext.grid.GroupingView({forceFit:true,startCollapsed:true,groupTextTpl:'{[values.rs[0].data["path"]]} ({[values.rs.length]} {[values.rs.length > 1 ? "'+_("Files")+'" : "'+_("File")+'"]})',deferEmptyText:false,getRowClass:function(c){if(c.data.fileModifiedEN||c.data.fileModifiedLang){var e=Ext.util.JSON.decode(c.data.fileModifiedEN),d=Ext.util.JSON.decode(c.data.fileModifiedLang);return((e.user===PhDOE.user.login&&e.anonymousIdent===PhDOE.user.anonymousIdent)||(d.user===PhDOE.user.login&&d.anonymousIdent===PhDOE.user.anonymousIdent))?"fileModifiedByMe":"fileModifiedByAnother"}return false},emptyText:'
'+_("No Files")+"
"});ui.cmp._StaleFileGrid.columns=[{id:"name",header:_("Files"),sortable:true,dataIndex:"name",renderer:function(c,f,d){var h="",g,e;if(d.data.fileModifiedEN){g=Ext.util.JSON.decode(d.data.fileModifiedEN);if(g.user===PhDOE.user.login&&g.anonymousIdent===PhDOE.user.anonymousIdent){h=_("File EN modified by me")+"
"}else{h=String.format(_("File EN modified by {0}"),g.user)+"
"}}if(d.data.fileModifiedLang){e=Ext.util.JSON.decode(d.data.fileModifiedLang);if(e.user===PhDOE.user.login&&e.anonymousIdent===PhDOE.user.anonymousIdent){h+=String.format(_("File {0} modified by me"),PhDOE.user.lang.ucFirst())}else{h+=String.format(_("File {0} modified by {1}"),PhDOE.user.lang.ucFirst(),e.user)}}if(h!==""){return""+c+""}else{return c}}},{header:_("EN revision"),width:45,sortable:true,dataIndex:"en_revision"},{header:"",width:45,sortable:true,dataIndex:"revision"},{header:_("Maintainer"),width:45,sortable:true,dataIndex:"maintainer"},{header:_("Path"),dataIndex:"path",hidden:true}];ui.cmp._StaleFileGrid.menu=function(c){Ext.apply(this,c);this.init();ui.cmp._StaleFileGrid.menu.superclass.constructor.call(this)};Ext.extend(ui.cmp._StaleFileGrid.menu,Ext.menu.Menu,{init:function(){Ext.apply(this,{items:[{scope:this,text:""+_("Edit in a new tab")+"",iconCls:"iconTabNeedUpdate",handler:function(){this.grid.fireEvent("rowdblclick",this.grid,this.rowIdx,this.event)}},{scope:this,hidden:this.hideDiffMenu,text:_("View diff..."),iconCls:"iconViewDiff",menu:new Ext.menu.Menu({items:[{scope:this,hidden:(this.grid.store.getAt(this.rowIdx).data.fileModifiedEN===false),text:String.format(_("... of the {0} file"),"EN"),handler:function(){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",FileName:this.fname,FilePath:"en"+this.fpath})}},{scope:this,hidden:(this.grid.store.getAt(this.rowIdx).data.fileModifiedLang===false),text:String.format(_("... of the {0} file"),PhDOE.user.lang.ucFirst()),handler:function(){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",FileName:this.fname,FilePath:PhDOE.user.lang+this.fpath})}}]})}]})}});ui.cmp.StaleFileGrid=Ext.extend(Ext.grid.GridPanel,{view:ui.cmp._StaleFileGrid.view,loadMask:true,autoExpandColumn:"name",border:false,enableDragDrop:true,ddGroup:"mainPanelDDGroup",onRowContextMenu:function(d,j,h){h.stopEvent();var g=this.store.getAt(j).data,f=g.path,c=g.name;this.getSelectionModel().selectRow(j);new ui.cmp._StaleFileGrid.menu({hideDiffMenu:(g.fileModifiedEN===false&&g.fileModifiedLang===false),grid:this,event:h,rowIdx:j,lang:PhDOE.user.lang,fpath:f,fname:c}).showAt(h.getXY())},onRowDblClick:function(c,d){this.openFile(this.store.getAt(d).data.id)},openFile:function(e){var g=this.store.getById(e),c=g.data.path,d=g.data.name,j=g.data.en_revision,h=g.data.revision,l=g.data.original_revision,f=Ext.util.md5("FNU-"+PhDOE.user.lang+c+d),k="";if(!Ext.getCmp("main-panel").findById("FNU-"+f)){if(PhDOE.user.conf.needUpdate.diffMethod==="using-viewvc"){k=ui.cmp.ViewVCDiff}else{if(PhDOE.user.conf.needUpdate.diffMethod==="using-exec"){k=ui.cmp.ExecDiff}}Ext.getCmp("main-panel").add({id:"FNU-"+f,layout:"border",title:d,originTitle:d,iconCls:"iconTabNeedUpdate",closable:true,tabLoaded:false,panVCSLang:!PhDOE.user.conf.needUpdate.toolsPanelLogLoad,panVCSEn:!PhDOE.user.conf.needUpdate.toolsPanelLogLoad,panDiffLoaded:(PhDOE.user.conf.needUpdate.diffMethod==="using-viewvc"),panLANGLoaded:false,panENLoaded:false,defaults:{split:true},tabTip:String.format(_("Need Update: in {0}"),c),listeners:{resize:function(m){Ext.getCmp("FNU-EN-PANEL-"+f).setWidth(m.getWidth()/2)}},items:[new k({region:"north",collapsible:true,height:PhDOE.user.conf.needUpdate.diffPanelHeight||150,prefix:"FNU",collapsed:!PhDOE.user.conf.needUpdate.diffPanelDisplay,fid:f,fpath:c,fname:d,rev1:(l)?l:h,rev2:j,listeners:{collapse:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"diffPanelDisplay",value:false,notify:false})}},expand:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"diffPanelDisplay",value:true,notify:false})}},resize:function(p,m,o){if(this.ownerCt.tabLoaded&&o&&o>50&&o!=PhDOE.user.conf.needUpdate.diffPanelHeight){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"diffPanelHeight",value:o,notify:false})}}}}),{region:"west",xtype:"panel",title:_("Tools"),iconCls:"iconConf",collapsedIconCls:"iconConf",collapsible:true,collapsed:!PhDOE.user.conf.needUpdate.toolsPanelDisplay,layout:"fit",bodyBorder:false,plugins:[Ext.ux.PanelCollapsedTitle],width:PhDOE.user.conf.needUpdate.toolsPanelWidth||375,listeners:{collapse:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"toolsPanelDisplay",value:false,notify:false})}},expand:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"toolsPanelDisplay",value:true,notify:false})}},resize:function(m,o){if(this.ownerCt.tabLoaded&&o&&o!=PhDOE.user.conf.needUpdate.toolsPanelWidth){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"toolsPanelWidth",value:o,notify:false})}}},items:{xtype:"tabpanel",activeTab:0,tabPosition:"bottom",enableTabScroll:true,defaults:{autoScroll:true},items:[new ui.cmp.VCSLogGrid({layout:"fit",title:String.format(_("{0} Log"),PhDOE.user.lang.ucFirst()),prefix:"FNU-LANG",fid:f,fpath:PhDOE.user.lang+c,fname:d,loadStore:PhDOE.user.conf.needUpdate.toolsPanelLogLoad}),new ui.cmp.VCSLogGrid({layout:"fit",title:String.format(_("{0} Log"),"En"),prefix:"FNU-EN",fid:f,fpath:"en"+c,fname:d,loadStore:PhDOE.user.conf.needUpdate.toolsPanelLogLoad}),new ui.cmp.DictionaryGrid({layout:"fit",title:_("Dictionary"),prefix:"FNU",fid:f})]}},new ui.cmp.FilePanel({id:"FNU-LANG-PANEL-"+f,region:"center",title:String.format(_("{0} File: "),PhDOE.user.lang)+c+d,prefix:"FNU",ftype:"LANG",spellCheck:PhDOE.user.conf.needUpdate.enableSpellCheckLang,spellCheckConf:{module:"needUpdate",itemName:"enableSpellCheckLang"},fid:f,fpath:c,fname:d,lang:PhDOE.user.lang,parser:"xml",storeRecord:g,syncScrollCB:true,syncScroll:true,syncScrollConf:{module:"needUpdate",itemName:"syncScrollbars"}}),new ui.cmp.FilePanel({id:"FNU-EN-PANEL-"+f,region:"east",title:_("en File: ")+c+d,prefix:"FNU",ftype:"EN",original:true,readOnly:true,openInNewTabBtn:true,fid:f,fpath:c,fname:d,lang:"en",parser:"xml",storeRecord:g,syncScroll:true,syncScrollConf:{module:"needUpdate",itemName:"syncScrollbars"}})]})}Ext.getCmp("main-panel").setActiveTab("FNU-"+f)},initComponent:function(){ui.cmp._StaleFileGrid.columns[2].header=String.format(_("{0} revision"),Ext.util.Format.uppercase(PhDOE.user.lang));Ext.apply(this,{columns:ui.cmp._StaleFileGrid.columns,store:ui.cmp._StaleFileGrid.store,tbar:[_("Filter: ")," ",new Ext.form.TwinTriggerField({id:"FNU-filter",width:180,hideTrigger1:true,enableKeyEvents:true,validateOnBlur:false,validationEvent:false,trigger1Class:"x-form-clear-trigger",trigger2Class:"x-form-search-trigger",listeners:{specialkey:function(d,c){if(c.getKey()===c.ENTER){this.onTrigger2Click()}}},onTrigger1Click:function(){this.setValue("");this.triggers[0].hide();this.setSize(180,10);ui.cmp._StaleFileGrid.instance.store.clearFilter()},onTrigger2Click:function(){var c=this.getValue(),d;if(c===""||c.length<3){this.markInvalid(_("Your filter must contain at least 3 characters"));return}this.clearInvalid();this.triggers[0].show();this.setSize(180,10);d=new RegExp(c,"i");ui.cmp._StaleFileGrid.instance.store.filterBy(function(e){if(d.test(e.data.path)||d.test(e.data.name)||d.test(e.data.revision)||d.test(e.data.en_revision)||d.test(e.data.maintainer)){return true}else{return false}},this)}})]});ui.cmp.StaleFileGrid.superclass.initComponent.call(this);this.on("rowcontextmenu",this.onRowContextMenu,this);this.on("rowdblclick",this.onRowDblClick,this)}});ui.cmp._StaleFileGrid.instance=null;ui.cmp.StaleFileGrid.getInstance=function(c){if(!ui.cmp._StaleFileGrid.instance){if(!c){c={}}ui.cmp._StaleFileGrid.instance=new ui.cmp.StaleFileGrid(c)}return ui.cmp._StaleFileGrid.instance};Ext.namespace("ui","ui.cmp");ui.cmp.SystemUpdatePrompt=Ext.extend(Ext.Window,{id:"sys-update-win",title:_("Refresh all data"),layout:"form",width:300,height:200,resizable:false,modal:true,bodyStyle:"padding:15px 15px 0",iconCls:"iconRefresh",html:['
',_("Update all files from VCS"),"
",'
',_("This may take time. Thank you for your patience..."),"
",'
',_("Apply all tools"),"
",'
',_("Reload data"),"
"].join(""),buttons:[{id:"btn-start-refresh",text:_("Start"),iconCls:"iconStartRefresh",handler:function(){Ext.getCmp("btn-start-refresh").disable();this.ownerCt.ownerCt.tools.close.setVisible(false);new ui.task.SystemUpdateTask()}}]});Ext.namespace("ui","ui.cmp","ui.cmp._VCSLogGrid");ui.cmp._VCSLogGrid.store=Ext.extend(Ext.data.Store,{reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"revision"},{name:"date",type:"date",dateFormat:"Y/m/d H:i:s"},{name:"author"},{name:"content"}]})});ui.cmp._VCSLogGrid.sm=Ext.extend(Ext.grid.CheckboxSelectionModel,{singleSelect:false,header:"",width:22,listeners:{beforerowselect:function(d){var c=d.getCount();if(c===2){return false}return true},rowselect:function(d){var c=d.getCount();if(c===2){Ext.getCmp(d.prefix+"-PANEL-btn-log-"+d.fid).enable();Ext.get(d.prefix+"-PANEL-btn-log-"+d.fid).frame("3F8538")}else{Ext.getCmp(d.prefix+"-PANEL-btn-log-"+d.fid).disable()}},rowdeselect:function(d){var c=d.getCount();if(c===2){Ext.getCmp(d.prefix+"-PANEL-btn-log-"+d.fid).enable();Ext.get(d.prefix+"-PANEL-btn-log-"+d.fid).frame("3F8538")}else{Ext.getCmp(d.prefix+"-PANEL-btn-log-"+d.fid).disable()}}}});ui.cmp._VCSLogGrid.columns=[{id:"id",header:_("Rev."),width:40,sortable:false,dataIndex:"revision"},{header:_("Content"),width:130,sortable:true,dataIndex:"content"},{header:_("By"),width:50,sortable:true,dataIndex:"author"},{header:_("Date"),width:85,sortable:true,dataIndex:"date",renderer:Ext.util.Format.dateRenderer(_("Y-m-d, H:i"))}];ui.cmp.VCSLogGrid=Ext.extend(Ext.grid.GridPanel,{loadMask:true,autoScroll:true,bodyBorder:false,border:false,autoExpandColumn:"content",initComponent:function(){var f=new ui.cmp._VCSLogGrid.sm({fid:this.fid,prefix:this.prefix}),c=new ui.cmp._VCSLogGrid.store({autoLoad:this.loadStore,proxy:new Ext.data.HttpProxy({url:"./do/getLog"}),baseParams:{Path:this.fpath,File:this.fname},listeners:{scope:this,load:function(h,g){if(this.prefix==="FNU-EN"){Ext.getCmp("FNU-"+this.fid).panVCSEn=true;Ext.getCmp("main-panel").fireEvent("tabLoaded","FNU",this.fid)}if(this.prefix==="FNU-LANG"){Ext.getCmp("FNU-"+this.fid).panVCSLang=true;Ext.getCmp("main-panel").fireEvent("tabLoaded","FNU",this.fid)}if(this.prefix==="FE-EN"){Ext.getCmp("FE-"+this.fid).panVCSEn=true;Ext.getCmp("main-panel").fireEvent("tabLoaded","FE",this.fid)}if(this.prefix==="FE-LANG"){Ext.getCmp("FE-"+this.fid).panVCSLang=true;Ext.getCmp("main-panel").fireEvent("tabLoaded","FE",this.fid)}if(this.prefix==="FNR-EN"){Ext.getCmp("FNR-"+this.fid).panVCSEn=true;Ext.getCmp("main-panel").fireEvent("tabLoaded","FNR",this.fid)}if(this.prefix==="FNR-LANG"){Ext.getCmp("FNR-"+this.fid).panVCSLang=true;Ext.getCmp("main-panel").fireEvent("tabLoaded","FNR",this.fid)}if(this.prefix==="AF"){Ext.getCmp("AF-"+this.fid).panVCS=true;Ext.getCmp("main-panel").fireEvent("tabLoaded","AF",this.fid)}if(this.prefix==="PP"){Ext.getCmp("PP-"+this.fid).panVCS=true;Ext.getCmp("main-panel").fireEvent("tabLoaded","PP",this.fid)}}}}),e=[],d;e.push(f);for(d=0;d'+_("You must manually load this data.
Use the refresh button !")+"

"+_("(You can change this behavior by setting an option in the configuration window)")+"",deferEmptyText:false}),tbar:[{scope:this,id:this.prefix+"-PANEL-btn-refreshlog-"+this.fid,tooltip:_("Load/Refresh revisions"),iconCls:"iconRefresh",handler:function(){this.store.reload()}},{scope:this,id:this.prefix+"-PANEL-btn-log-"+this.fid,tooltip:_("View the diff"),iconCls:"iconViewDiff",disabled:true,handler:function(){var j=this.getSelectionModel().getSelections(),h=j[0].data.revision,g=j[1].data.revision;Ext.getBody().mask(' '+_("Finding the diff. Please, wait..."));XHR({params:{task:"getDiff",DiffType:"vcs",FilePath:this.fpath,FileName:this.fname,Rev1:h,Rev2:g},success:function(l){var m=Ext.util.JSON.decode(l.responseText),k;Ext.getBody().unmask();k=new Ext.Window({title:String.format(_("Diff between {0} & {1}"),h,g),width:650,height:350,resizable:false,modal:true,autoScroll:true,bodyStyle:"background-color: white; padding: 5px;",html:'
'+m.content+"
",buttons:[{text:_("Close"),handler:function(){k.close()}}]});k.show()}})}}]});ui.cmp.VCSLogGrid.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp");ui.cmp.ViewVCDiff=Ext.extend(Ext.Panel,{layout:"fit",title:_("Diff From VCS"),iconCls:"iconDiffView",collapsedIconCls:"iconDiffView",plugins:[Ext.ux.PanelCollapsedTitle],initComponent:function(){Ext.apply(this,{items:{id:this.prefix+"-diff-"+this.fid,xtype:"panel",layout:"fit",items:[new Ext.ux.IFrameComponent({id:"frame-"+this.prefix+"-diff-"+this.fid,url:String.format(PhDOE.app.conf.viewVcUrl,this.fpath+this.fname,this.rev1,this.rev2)})]}});ui.cmp.ViewVCDiff.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._WorkTreeGrid","ui.cmp._WorkTreeGrid.menu");ui.cmp._WorkTreeGrid.SetProgress=new Ext.util.DelayedTask(function(){new ui.task.SetFileProgressTask({idDB:this.node.attributes.idDB,progress:this.node.attributes.progress})});ui.cmp._WorkTreeGrid.menu.admin=function(c){Ext.apply(this,c);this.init();ui.cmp._WorkTreeGrid.menu.admin.superclass.constructor.call(this)};Ext.extend(ui.cmp._WorkTreeGrid.menu.admin,Ext.menu.Item,{init:function(){var c;switch(this.from){case"file":c=[{scope:this,iconCls:"iconSwitchLang",text:_("Change file's owner"),handler:function(){new ui.cmp.ChangeFileOwner({fileIdDB:this.node.attributes.idDB,fileFolder:this.folderNode.attributes.task,fileName:this.node.attributes.task,currentOwner:this.userNode.attributes.task})}},{scope:this,iconCls:"iconPageDelete",text:((this.node.attributes.type==="delete")?_("Cancel this deletion"):_("Clear this change")),handler:function(){new ui.task.ClearLocalChangeTask({ftype:this.node.attributes.type,fpath:this.folderNode.attributes.task,fname:this.node.attributes.task})}}];break;case"patch":c=[{scope:this,iconCls:"iconTrash",text:_("Delete this patch"),handler:function(){ui.task.DeletePatchTask({patchID:this.node.attributes.idDB})}}];break}Ext.apply(this,{text:_("Administrator menu"),iconCls:"iconAdmin",handler:function(){return false},menu:new Ext.menu.Menu({items:c})})}});ui.cmp._WorkTreeGrid.menu.commit=function(c){Ext.apply(this,c);this.init();ui.cmp._WorkTreeGrid.menu.commit.superclass.constructor.call(this)};Ext.extend(ui.cmp._WorkTreeGrid.menu.commit,Ext.menu.Item,{init:function(){Ext.apply(this,{text:_("Commit..."),iconCls:"iconCommitFileVcs",disabled:(PhDOE.user.isAnonymous),handler:function(){return false},menu:new Ext.menu.Menu({items:[{scope:this,text:_("...this file"),hidden:(this.from==="user"||this.from==="folder"||this.from==="patch"||this.from==="anonymousPatch"),iconCls:"iconCommitFileVcs",handler:function(){var c=[{fid:Ext.util.md5(this.folderNode.attributes.task+this.node.attributes.task),fpath:this.folderNode.attributes.task,fname:this.node.attributes.task,fdbid:this.node.attributes.idDB,ftype:this.node.attributes.type,fdate:Date.parseDate(this.node.attributes.last_modified,"Y-m-d H:i:s"),fby:this.userNode.attributes.task}];new ui.cmp.CommitPrompt({files:c}).show()}},{scope:this,text:_("...all files from this folder"),hidden:(this.from==="user"||this.from==="patch"||this.from==="anonymousPatch"),iconCls:"iconCommitFileVcs",handler:function(){var c=[];this.folderNode.cascade(function(d){if(d.attributes.type!=="folder"&&d.attributes.type!=="user"){c.push({fid:Ext.util.md5(this.folderNode.attributes.task+d.attributes.task),fpath:this.folderNode.attributes.task,fname:d.attributes.task,fdbid:d.attributes.idDB,ftype:d.attributes.type,fdate:Date.parseDate(d.attributes.last_modified,"Y-m-d H:i:s"),fby:this.userNode.attributes.task})}},this);new ui.cmp.CommitPrompt({files:c}).show()}},{scope:this,text:_("...all files from this patch"),hidden:(this.module!=="patches"||this.from==="user"),iconCls:"iconCommitFileVcs",handler:function(){var e=[],c="",d=false;if(this.from==="anonymousPatch"){c=this.patchNode.attributes.patchDescription+"\n\n-- \nProvided by "+this.patchNode.parentNode.attributes.task+" ("+this.patchNode.attributes.patchEmail+")";d=this.patchNode.attributes.idDB}this.patchNode.cascade(function(f){if(f.attributes.type!=="folder"&&f.attributes.type!=="user"&&f.attributes.type!=="patch"){e.push({fid:Ext.util.md5(f.parentNode.attributes.task+f.attributes.task),fpath:f.parentNode.attributes.task,fname:f.attributes.task,fdbid:f.attributes.idDB,ftype:f.attributes.type,fdate:Date.parseDate(f.attributes.last_modified,"Y-m-d H:i:s"),fby:this.userNode.attributes.task})}},this);new ui.cmp.CommitPrompt({files:e,defaultMessage:c,patchID:d}).show()}},{scope:this,text:_("...all files modified by me"),hidden:(this.from==="anonymousPatch"),iconCls:"iconCommitFileVcs",handler:function(){var c=[];this.userNode.cascade(function(d){if(d.attributes.type!=="folder"&&d.attributes.type!=="user"&&d.attributes.type!=="patch"){c.push({fid:Ext.util.md5(d.parentNode.attributes.task+d.attributes.task),fpath:d.parentNode.attributes.task,fname:d.attributes.task,fdbid:d.attributes.idDB,ftype:d.attributes.type,fdate:Date.parseDate(d.attributes.last_modified,"Y-m-d H:i:s"),fby:this.userNode.attributes.task})}},this);new ui.cmp.CommitPrompt({files:c}).show()}}]})})}});ui.cmp._WorkTreeGrid.menu.usersPatch=function(d){Ext.apply(this,d);var f=Ext.getCmp(this.menuID),e,c;if(!f.itemRendered){f.removeAll();f.doLayout();c=ui.cmp.PatchesTreeGrid.getInstance().getUserPatchesList();if(c){Ext.each(c,function(g){e=new Ext.menu.Item({id:Ext.id(),text:g.attributes.task,handler:function(){ui.task.MoveToPatch({patchID:g.attributes.idDB,patchName:g.attributes.task,nodesToAdd:f.nodesToAdd})}});f.add(e)},this)}else{e=new Ext.menu.Item({disabled:true,text:_("You have no patch currently. You must create one.")});f.add(e)}e=new Ext.menu.Item({text:_("Create a new patch"),iconCls:"iconAdd",handler:function(){var g=new ui.cmp.ManagePatchPrompt({title:_("Create a new patch"),nodesToAdd:f.nodesToAdd});g.show(this.el)}});f.add("-",e);f.doLayout();f.itemRendered=true}};ui.cmp._WorkTreeGrid.menu.users=function(c){Ext.apply(this,c);this.init();ui.cmp._WorkTreeGrid.menu.users.superclass.constructor.call(this)};Ext.extend(ui.cmp._WorkTreeGrid.menu.users,Ext.menu.Menu,{listeners:{show:function(){if(this.node.attributes.task===PhDOE.user.login){ui.cmp._WorkTreeGrid.menu.usersPatch({menuID:"usersPatchesMenu"})}}},init:function(){var d=[],c;this.node.cascade(function(e){if(e.attributes.type!=="user"&&e.attributes.type!=="folder"){d.push(e)}},this);c=(this.node.attributes.task===PhDOE.user.login)?[{text:_("Submit all files for review in patch:"),iconCls:"iconPendingPatch",handler:function(){return false},menu:new Ext.menu.Menu({id:"usersPatchesMenu",itemRendered:false,nodesToAdd:d})},{xtype:"menuseparator",hidden:(PhDOE.user.isAnonymous)},((!PhDOE.user.isAnonymous)?new ui.cmp._WorkTreeGrid.menu.commit({from:"user",node:false,folderNode:false,userNode:this.node}):"")]:[{scope:this,text:String.format(_("Send an email to {0}"),""+this.node.attributes.task+""),iconCls:"iconSendEmail",hidden:(this.node.attributes.email==="false"),handler:function(){var e=new ui.cmp.EmailPrompt();e.setData(this.node.attributes.task,this.node.attributes.email);e.show(this.node.el)}}];Ext.apply(this,{items:c})}});ui.cmp._WorkTreeGrid.menu.folders=function(c){Ext.apply(this,c);this.init();ui.cmp._WorkTreeGrid.menu.folders.superclass.constructor.call(this)};Ext.extend(ui.cmp._WorkTreeGrid.menu.folders,Ext.menu.Menu,{listeners:{show:function(){if(this.node.parentNode.attributes.task===PhDOE.user.login){ui.cmp._WorkTreeGrid.menu.usersPatch({menuID:"foldersPatchesMenu"})}}},init:function(){var c=[];if(this.node.parentNode.attributes.task!==PhDOE.user.login){return false}this.node.cascade(function(d){if(d.attributes.type!=="folder"){c.push(d)}},this);Ext.apply(this,{items:[{text:_("Submit all files in this directory in patch:"),iconCls:"iconPendingPatch",handler:function(){return false},menu:new Ext.menu.Menu({id:"foldersPatchesMenu",itemRendered:false,nodesToAdd:c})},{xtype:"menuseparator",hidden:(PhDOE.user.isAnonymous)},((!PhDOE.user.isAnonymous)?new ui.cmp._WorkTreeGrid.menu.commit({from:"folder",node:false,folderNode:this.node,userNode:this.node.parentNode}):"")]})}});ui.cmp._WorkTreeGrid.menu.files=function(c){Ext.apply(this,c);this.init();ui.cmp._WorkTreeGrid.menu.files.superclass.constructor.call(this)};Ext.extend(ui.cmp._WorkTreeGrid.menu.files,Ext.menu.Menu,{listeners:{show:function(){if(this.node.parentNode.parentNode.attributes.task===PhDOE.user.login){ui.cmp._WorkTreeGrid.menu.usersPatch({menuID:"filePatchesMenu"})}}},init:function(){var h=this.node,l=h.attributes.type,g,c=h.parentNode.attributes.task,e=h.attributes.task,k=h.ownerTree,f=h.parentNode.parentNode.attributes.task,d=[],j;j=h.parentNode.attributes.task.split("/");g=j[0];d.push(this.node);Ext.apply(this,{items:[{text:""+((l==="delete")?_("View in a new tab"):_("Edit in a new tab"))+"",iconCls:"iconEdit",handler:function(){k.openFile(h)}},{text:_("Submit as patch for review in:"),iconCls:"iconPendingPatch",hidden:(f!==PhDOE.user.login),handler:function(){return false},menu:new Ext.menu.Menu({id:"filePatchesMenu",itemRendered:false,nodesToAdd:d})},{text:_("Set the progress..."),iconCls:"iconProgress",hidden:(l==="delete"||f!==PhDOE.user.login),menu:{xtype:"menu",showSeparator:false,items:[{xtype:"slider",width:200,value:this.node.attributes.progress,increment:10,minValue:0,maxValue:100,plugins:new Ext.slider.Tip({getText:function(m){return String.format(""+_("{0}% complete")+"",m.value)}}),refreshNodeColumns:function(o){var x=o.getOwnerTree(),u=o.attributes,s=x.columns,m=o.ui.getEl().firstChild,y=m.childNodes,p,r,w,q;for(p=1,q=s.length;p1){for(var d=0;d1){f=new Ext.menu.Menu({listeners:{show:function(){ui.cmp._WorkTreeGrid.menu.usersPatch({menuID:"globalPatchesMenu"})}},items:[{text:_("Submit all this files for review in patch:"),iconCls:"iconPendingPatch",handler:function(){return false},menu:new Ext.menu.Menu({id:"globalPatchesMenu",itemRendered:false,nodesToAdd:l})}]});f.showAt(k.getXY());return}g=j.attributes.type;switch(g){case"user":j.select();f=new ui.cmp._WorkTreeGrid.menu.users({node:j});break;case"folder":j.select();f=new ui.cmp._WorkTreeGrid.menu.folders({node:j});break;default:j.select();f=new ui.cmp._WorkTreeGrid.menu.files({node:j});break}f.showAt(k.getXY())},initComponent:function(){function c(d,e){e.css+=" x-grid3-progresscol";return String.format('
{2}
',this.getStyle(d),(d/this.ceiling)*100,this.getText(d))}Ext.apply(this,{animate:true,useArrows:true,autoScroll:true,border:false,containerScroll:true,defaults:{autoScroll:true},selModel:new Ext.tree.MultiSelectionModel(),columns:[{header:_("Users"),dataIndex:"task",tpl:new Ext.XTemplate("{task:this.formatUserName}",{formatUserName:function(d,e){if(e.userID){e.qtip=_("userID: ")+e.userID}return d}})},{header:_("Last modified"),width:120,dataIndex:"last_modified",align:"center",tpl:new Ext.XTemplate("{last_modified:this.formatDate}",{formatDate:function(d,e){if(e.type!=="user"&&e.type!=="folder"){return Date.parseDate(d,"Y-m-d H:i:s").format(_("Y-m-d, H:i"))}else{return""}}})},{header:_("Estimated progress"),dataIndex:"progress",width:100,align:"center",tpl:new Ext.XTemplate("{progress:this.formatProgress}",{formatProgress:function(f,h){if(Ext.util.Format.substr(h,0,4)==="out:"){var g=h.split(":");f=g[1]}if(!f&&f!==0){return""}function e(k){var j=(k<(100/2))?"x-progress-text-back":"x-progress-text-front"+(Ext.isIE6?"-ie6":""),l;l=String.format('
{2}
',j,Ext.id(),k+"%");return(k<(100/1.05))?l.substring(0,l.length-6):l.substr(6)}function d(j){if(j<=100&&j>(100*0.67)){return"-green"}if(j<(100*0.67)&&j>(100*0.33)){return"-orange"}if(j<(100*0.33)){return"-red"}return""}return String.format('
{2}
',d(f),(f/100)*100,e(f))}})}],loader:{dataUrl:"./do/getWork",baseParams:{module:"workInProgress"}}});ui.cmp.WorkTreeGrid.superclass.initComponent.call(this);this.on("contextmenu",this.onContextMenu,this);this.on("resize",this.resizeCmp,this);this.on("dblclick",this.openFile,this);this.getRootNode().on("beforechildrenrendered",function(){this.updateFilesCounter.defer(200,this)},this)},resizeCmp:function(g,f,d,e){this.columns[0].width=e-(this.columns[1].width+this.columns[2].width+5);this.updateColumnWidths()},delRecord:function(m){var d=this.getRootNode(),g,e,k,c,l,f;for(g=0;gPlease delete these characters or change the header of the XML file in UTF-8 ; i.e.:

<?xml version="1.0" encoding="utf-8"?>
');break;case"tabs_found":d=_("Error");e=_('It seems that you have inserted some tabs caracters into this files. Please, replace each one by one space.
Tip: You can use the "Re-indent all this file" button to replace all tabs by spaces.');break;case"folder_already_exist":d=_("Error");e=_("This folder already exist in the current folder.");break;case"file_already_exist":d=_("Error");e=_("This file already exist in the current folder.");break;case"save_you_cant_modify_it":d=_("Error");e=_("You can't modify this file as it was modify by another user. Contact an administrator if you want to be able to modify it.");break;case"file_isnt_owned_by_current_user":d=_("Error");e=_("The file you want to clear local change isn't own by you.
You can only do this action for yours files.");break;case"file_localchange_didnt_exist":d=_("Error");e=_("The file you want to clear local change isn't exist as work in progress.");break;case"changeFilesOwnerNotAdmin":d=_("Error");e=_("You can't change file's owner. You must be a global administrator or an administrator for this lang.");break;case"patch_delete_dont_exist":d=_("Error");e=_("The patch you want to delete didn't exist.");break;case"patch_delete_isnt_own_by_current_user":d=_("Error");e=_("The patch you want to delete isn't own by you. Only the user how create it or a global administrator can delete it.");break;case"action_only_global_admin":d=_("Error");e=_("This action is available only to global administrator.");break;case"action_only_admin":d=_("Error");e=_("This action is available only to global administrator or to administrator for this lang.");break}Ext.MessageBox.alert(d,e)},runDirectAccess:function(){if(directAccess){if(directAccess.link=="perm"){ui.cmp.RepositoryTree.getInstance().openFile("byPath",directAccess.lang+directAccess.path,directAccess.name)}if(directAccess.link=="patch"){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",FilePath:directAccess.path,FileName:directAccess.name})}if(directAccess.link=="patchID"){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",patchID:directAccess.patchID,patchName:directAccess.patchName})}}},afterLoadAllStore:function(){this.app.loaded=true;this.runDirectAccess();if(this.user.conf.main.loadMailsAtStartUp){ui.cmp.PortletLocalMail.getInstance().reloadData()}if(this.user.conf.main.loadBugsAtStartUp){ui.cmp.PortletBugs.getInstance().reloadData()}PhDOE.setTopic();PhDOE.setTopic(true)},loadAllStore:function(){var e=new Ext.ProgressBar({width:300,renderTo:"loading-progressBar"}),c=[],d;if(PhDOE.user.lang!=="en"){c=[ui.cmp._MainMenu.store,ui.cmp.StaleFileGrid.getInstance().store,ui.cmp.ErrorFileGrid.getInstance().store,ui.cmp.PendingReviewGrid.getInstance().store,ui.cmp.NotInENGrid.getInstance().store,ui.cmp.PortletSummary.getInstance().store,ui.cmp.PortletTranslationGraph.getInstance().store,ui.cmp.PortletTranslationsGraph.getInstance().store,ui.cmp.PortletTranslator.getInstance().storeTranslator,ui.cmp.PortletTranslator.getInstance().storeReviewer,ui.cmp.PendingTranslateGrid.getInstance().store,ui.cmp.PortletInfo.getInstance().store]}else{c=[ui.cmp._MainMenu.store,ui.cmp.PortletTranslationsGraph.getInstance().store,ui.cmp.ErrorFileGrid.getInstance().store,ui.cmp.PortletInfo.getInstance().store]}d=function(f){e.updateProgress((f+1)/c.length,(f+1)+" of "+c.length+"...");c[f].load({callback:function(){f++;if(f  '+this.app.name+"",autoHeight:true,border:false,margins:"0 0 5 0"},{region:"west",id:"main-menu-panel",layout:"accordion",collapsible:true,collapseMode:"mini",animate:true,split:true,width:PhDOE.user.conf.main.mainMenuWidth||300,header:false,listeners:{resize:function(j,o){if(o&&o!=PhDOE.user.conf.main.mainMenuWidth){var m=new ui.task.UpdateConfTask({module:"main",itemName:"mainMenuWidth",value:o,notify:false})}}},tbar:[{text:_("Main menu"),iconCls:"MainMenu",menu:new ui.cmp.MainMenu()}],items:[{id:"acc-need-translate",title:_("Files need translate")+' (0)',layout:"fit",border:false,iconCls:"iconFilesNeedTranslate",hidden:(PhDOE.user.lang==="en"),items:[ui.cmp.PendingTranslateGrid.getInstance()],collapsed:true,listeners:{expand:function(j){Ext.getCmp("FNT-filter").wrap.setWidth(180);Ext.getCmp("FNT-filter").syncSize()}}},{id:"acc-need-update",title:_("Files need update")+' (0)',layout:"fit",border:false,iconCls:"iconFilesNeedUpdate",hidden:(PhDOE.user.lang==="en"),items:[ui.cmp.StaleFileGrid.getInstance()],collapsed:true,listeners:{expand:function(j){Ext.getCmp("FNU-filter").wrap.setWidth(180);Ext.getCmp("FNU-filter").syncSize()}}},{id:"acc-error",title:(PhDOE.user.lang==="en")?"Number of failures to meet 'strict standards' (0)":_("Error in current translation")+' (0)',layout:"fit",border:false,iconCls:"iconFilesError",items:[ui.cmp.ErrorFileGrid.getInstance()],collapsed:true,listeners:{expand:function(j){Ext.getCmp("FE-filter").wrap.setWidth(180);Ext.getCmp("FE-filter").syncSize()}}},{id:"acc-need-reviewed",title:_("Files need reviewed")+' (0)',layout:"fit",border:false,iconCls:"iconFilesNeedReviewed",hidden:(PhDOE.user.lang==="en"),items:[ui.cmp.PendingReviewGrid.getInstance()],collapsed:true,listeners:{expand:function(j){Ext.getCmp("FNR-filter").wrap.setWidth(180);Ext.getCmp("FNR-filter").syncSize()}}},{id:"acc-notInEn",title:_("Not in EN tree")+' (0)',layout:"fit",border:false,iconCls:"iconNotInEn",hidden:(PhDOE.user.lang==="en"),items:[ui.cmp.NotInENGrid.getInstance()],collapsed:true},{id:"acc-all-files",title:_("All files"),layout:"fit",border:false,iconCls:"iconAllFiles",items:[ui.cmp.RepositoryTree.getInstance()],collapsed:true,listeners:{expand:function(j){Ext.getCmp("AF-search").wrap.setWidth(180);Ext.getCmp("AF-search").syncSize()}}},{id:"acc-work-in-progress",title:_("Work in progress")+' (0)',layout:"fit",border:false,iconCls:"iconWorkInProgress",items:[ui.cmp.WorkTreeGrid.getInstance()],collapsed:true,tools:[{id:"refresh",qtip:_("Refresh"),handler:function(){ui.cmp.WorkTreeGrid.getInstance().getRootNode().reload()}}]},{id:"acc-patches",tools:[{id:"refresh",qtip:_("Refresh"),handler:function(){ui.cmp.PatchesTreeGrid.getInstance().getRootNode().reload()}},{id:"gear",hidden:(this.user.isAnonymous),qtip:_("Open the Log Message Manager"),handler:function(){if(!Ext.getCmp("commit-log-win")){var j=new ui.cmp.CommitLogManager()}Ext.getCmp("commit-log-win").show("acc-patches")}}],title:_("Patches for review")+' (0)',layout:"fit",border:false,iconCls:"iconPatch",items:[ui.cmp.PatchesTreeGrid.getInstance()],collapsed:true}]},{xtype:"mainpanel",id:"main-panel",region:"center",items:[{xtype:"panel",id:"MainInfoTabPanel",title:_("Home"),baseCls:"MainInfoTabPanel",autoScroll:true,plain:true,items:[{xtype:"container",layout:"column",border:false,items:[{xtype:"container",columnWidth:0.5,html:'

'+_("Connected as")+' , '+_("Project: ")+''+PhDOE.project+", "+_("Language: ")+' -

',listeners:{afterrender:function(m){var j="",p="",o;o=Ext.get("loginLibel");if(PhDOE.user.isGlobalAdmin||PhDOE.user.isLangAdmin){o.addClass("userAdmin");p=' '+PhDOE.user.login}else{if(PhDOE.user.authService=="VCS"){p=' '+PhDOE.user.login}else{if(PhDOE.user.authService=="google"){p=' '+PhDOE.user.login}else{if(PhDOE.user.authService=="facebook"){p=' '+PhDOE.user.login}}}}o.dom.innerHTML=p;content=_("Connected using")+" "+PhDOE.user.authService+"
";content+=(PhDOE.user.isGlobalAdmin)?_("You are a global Administrator")+"
":"";content+=(PhDOE.user.isLangAdmin)?_("You are an administrator for this language")+"
":"";new Ext.ToolTip({target:"loginLibel",anchor:"top",html:content})}}},{xtype:"container",columnWidth:0.5,html:'

'+_("Topic:")+'

-

-

-'+_("Topic:")+'

-

-
',listeners:{afterrender:function(m){if(PhDOE.user.isAnonymous){return}var j=function(q){var o="topic-info-content"+(q?"-lang":""),p=Ext.get(o).dom.innerHTML;Ext.get(o).dom.innerHTML="";new Ext.FormPanel({renderTo:o,layout:"anchor",border:false,items:[{xtype:"htmleditor",value:p,anchor:"100%"}],buttonAlign:"center",buttons:[{text:_("Save"),handler:function(){PhDOE.saveTopic(this.ownerCt.ownerCt.items.items[0].getValue(),q)}},{text:_("Cancel"),handler:function(){PhDOE.setTopic(q)}}]})};Ext.get("topic-info-container").on("dblclick",function(){j()});Ext.get("topic-info-container-lang").on("dblclick",function(){j(true)})}}}]},{xtype:"portal",border:false,items:[{columnWidth:0.5,style:"padding:10px 5px 10px 5px",items:d},{columnWidth:0.5,style:"padding:10px 5px 10px 5px",items:g}],listeners:{drop:function(o){var m,q=[],s=[],t;for(var r=0;r','
','
','','','','","","
','
',this.enableHdMenu?'':"",'{header}',"
","
","
","
",'
','
',"
")}if(!this.colgroupTpl){this.colgroupTpl=new Ext.XTemplate('')}},initColumns:function(){var g=this.columns,d=g.length,f=[],e,h;for(e=0;e10)){this.setScrollOffset(c)}else{var f=this;setTimeout(function(){f.setScrollOffset(g.offsetWidth-g.clientWidth>10?c:0)},10)}}},updateColumnWidths:function(){var m=this.columns,p=m.length,d=this.outerCt.query("colgroup"),o=d.length,l,h,f,e;for(f=0;f0&&this.columns[c]){this.setColumnVisible(c,!d.checked)}}return true},setColumnVisible:function(c,d){this.columns[c].hidden=!d;this.updateColumnWidths()},scrollToTop:function(){this.innerBody.dom.scrollTop=0;this.innerBody.dom.scrollLeft=0},syncScroll:function(){this.syncHeaderScroll();var c=this.innerBody.dom;this.fireEvent("bodyscroll",c.scrollLeft,c.scrollTop)},syncHeaderScroll:function(){var c=this.innerBody.dom;this.innerHd.dom.scrollLeft=c.scrollLeft;this.innerHd.dom.scrollLeft=c.scrollLeft},registerNode:function(c){Ext.ux.tree.TreeGrid.superclass.registerNode.call(this,c);if(!c.uiProvider&&!c.isRoot&&!c.ui.isTreeGridNodeUI){c.ui=new Ext.ux.tree.TreeGridNodeUI(c)}}});Ext.reg("treegrid",Ext.ux.tree.TreeGrid);Ext.override(Ext.ux.tree.TreeGrid,{onResize:function(d,f){Ext.ux.tree.TreeGrid.superclass.onResize.apply(this,arguments);var j=this.innerBody.dom;var k=this.innerHd.dom;if(!j){return}if(Ext.isNumber(f)){j.style.height=this.body.getHeight(true)-24+"px"}if(Ext.isNumber(d)){if(Ext.isIE&&!(Ext.isStrict&&Ext.isIE8)){var e=this.body.getWidth(true)+"px";j.style.width=e;k.style.width=e}var c=Ext.num(this.scrollOffset,Ext.getScrollBarWidth());if(this.reserveScrollOffset||((j.offsetWidth-j.clientWidth)>10)){this.setScrollOffset(c)}else{var g=this;setTimeout(function(){g.setScrollOffset(j.offsetWidth-j.clientWidth>10?c:0)},10)}}}});Ext.ux.DblClickCloseTabs=Ext.extend(Object,{init:function(c){this.panel=c;c.initEvents=c.initEvents.createSequence(this.initEvents,this)},initEvents:function(){this.panel.mon(this.panel.strip,{dblclick:this.onDblClick.createDelegate(this,[this.panel],0)});delete this.panel},onDblClick:function(c,d){if(c.getActiveTab().closable){c.remove(c.getActiveTab())}}});Ext.preg("dblclickclosetabs",Ext.ux.DblClickCloseTabs);Ext.util.md5=function(u,c,q,m){c=(typeof c==="undefined"?false:c);q=(typeof q==="undefined"?false:q);m=(typeof m==="undefined"?8:m);function k(r,w){var v=((r&65535)+(w&65535)),s=((r>>16)+(w>>16)+(v>>16));return(s<<16)|(v&65535)}function p(r,s){return(r<>>(32-s))}function f(A,w,v,r,z,y){return k(p(k(k(w,A),k(r,y)),z),v)}function l(w,v,B,A,r,z,y){return f((v&B)|((~v)&A),w,v,r,z,y)}function e(w,v,B,A,r,z,y){return f((v&A)|(B&(~A)),w,v,r,z,y)}function o(w,v,B,A,r,z,y){return f(v^B^A,w,v,r,z,y)}function j(w,v,B,A,r,z,y){return f(B^(v|(~A)),w,v,r,z,y)}function h(E,z){var D=1732584193,C=-271733879,B=-1732584194,A=271733878,v,y,w,s,r;E[z>>5]|=128<<((z)%32);E[(((z+64)>>>9)<<4)+14]=z;for(v=0;v>5]|=(w.charCodeAt(s/m)&r)<<(s%32)}return v}function g(v){var w="",r=((1<>5]>>>(s%32))&r)}return w}function t(v){var s=((q)?"0123456789ABCDEF":"0123456789abcdef"),w="",r;for(r=0;r>2]>>((r%4)*8+4))&15)+s.charAt((v[r>>2]>>((r%4)*8))&15)}return w}return(c?g(h(d(u),u.length*m)):t(h(d(u),u.length*m)))};Ext.ux.CodeMirror=Ext.extend(Ext.BoxComponent,{lineWrapping:false,previousLine:false,readOnly:false,originalContent:false,documentDurty:false,mode:(this.parser||"xml"),theme:(this.theme==="undefined")?"default":this.theme,initComponent:function(){this.initialized=false;Ext.ux.CodeMirror.superclass.initComponent.apply(this,arguments);this.theme=(Ext.isDefined(this.theme))?this.theme:"default";switch(this.mode){case"html":case"htm":this.mode="text/html";break;case"css":this.mode="text/css";break;case"php":this.mode="application/x-httpd-php";break;case"xml":case"ent":this.mode={name:"xml",alignCDATA:true};break;case"bat":this.mode="text/x-clojure";break;case"README":this.mode="text/x-rst";break;default:this.mode={name:"xmlpure"};break}this.addEvents("initialize");this.addEvents("codemodified");this.addEvents("coderestored");this.addEvents("cursormove");this.addEvents("scroll");this.ownerCt.on("resize",function(f,e,d){this.fireEvent("resize",this,e,d)},this);this.on({resize:function(e,d,c){this.resize(d,c)},afterrender:function(){var c=this;c.codeEditor=new CodeMirror(Ext.get(c.id),{theme:c.theme,readOnly:c.readOnly,mode:c.mode,lineNumbers:true,matchBrackets:true,lineWrapping:c.lineWrapping,indentUnit:1,tabMode:"indent",value:"",onScroll:function(){c.fireEvent("scroll",c.el.child(".CodeMirror-scroll").dom.scrollTop)},onKeyEvent:function(g,d){if(d.ctrlKey&&d.keyCode==83){d.preventDefault();c.onSave()}var f=g.getCursor();c.fireEvent("cursormove",f.line,f.ch)},onCursorActivity:function(e){var d=e.getCursor();if(c.previousLine!==false){e.setLineClass(c.previousLine,null)}c.previousLine=e.setLineClass(d.line,"cm2-activeline");c.fireEvent("cursormove",d.line,d.ch)},onChange:function(d){c.manageCodeChange()}});c.initialized=true;c.fireEvent("initialize",true)}})},focus:function(){if(this.initialized){return this.codeEditor.focus()}return this.initialConfig.value},getCursor:function(){return this.codeEditor.getCursor()},getLine:function(c){return this.codeEditor.getLine(c)},getValue:function(){if(this.initialized){return this.codeEditor.getValue()}return this.initialConfig.value},insertLine:function(d,e){var c=this.codeEditor.getLine(d);this.codeEditor.setLine(d,c+"\n"+e)},manageCodeChange:function(){var c=this.originalContent,d=this.getValue();btnUndo=Ext.getCmp(this.id+"-btn-undo");if(c){if(c===d){if(this.documentDurty===true){this.fireEvent("coderestored");this.documentDurty=false}}else{if(btnUndo){btnUndo.enable()}if(this.documentDurty===false){this.fireEvent("codemodified");this.documentDurty=true}}}},onSave:function(){var c=Ext.getCmp(this.id+"-btn-save");if(!c.disabled){c.handler.call(c.scope||c,c)}},redo:function(c,d){this.codeEditor.redo();Ext.getCmp(this.id+"-btn-undo").enable();if(this.codeEditor.historySize().redo==0){Ext.getCmp(this.id+"-btn-redo").disable()}},resize:function(f,c){var e=this.el,d=e.child(".CodeMirror-scroll");d.setHeight(c-89)},removeLine:function(c){return this.codeEditor.removeLine(c)},reIndentAll:function(){var d=this.codeEditor.lineCount(),c;for(c=0;c','',"{cells}","
","");this.rowTpl.disableFormats=true}this.rowTpl.compile();if(!this.cellTpl){this.cellTpl=new Ext.Template('','
{value}
',"");this.cellTpl.disableFormats=true}this.cellTpl.compile()},calculate:function(e,o){var g={},m=o.config,h,d,k,f,c,l,p;for(h=0,l=m.length;h '+_("Loading..."));var e=document.createElement("iframe"),f=function(g){d.unmask()};e.id=this.id;e.name=this.id;e.src=this.url;e.frameBorder=0;this.el=d.appendChild(e);if(Ext.isIE){document.frames[this.url].name=this.id}e[Ext.isIE?"onreadystatechange":"onload"]=f.createDelegate(e)}});Ext.ux.FixedMultiSelectionModel=Ext.extend(Ext.tree.MultiSelectionModel,{normalClick:false,init:function(c){this.tree=c;c.getTreeEl().on("keydown",this.onKeyDown,this);c.on("dblclick",this.onDoubleClick,this);c.on("click",this.onNodeClick,this)},onDrag:function(){this.normalClick=false},onNodeClick:function(c,d){if(d.shiftKey){d.preventDefault()}if(!this.tree.dragZone||!this.tree.dragZone.isMultiSelect){this.onMouseDown(c,d);this.onMouseUp(c,d)}},onMouseDown:function(c,d){if(c.isSelected()){if(d.ctrlKey){this.unselect(c);this.normalClick=false;return}this.normalClick=!d.shiftKey}else{this.select(c,d,d.ctrlKey);this.normalClick=false}},onMouseUp:function(c,d){if(this.normalClick){this.select(c,d,d.ctrlKey);this.normalClick=false}},onDoubleClick:function(){this.normalClick=false},compareNodeOrder:document.compareDocumentPosition?function(d,c){return 3-(d.ui.elNode.compareDocumentPosition(c.ui.elNode)&6)}:(typeof document.documentElement.sourceIndex!=="undefined"?function(d,c){return d.ui.elNode.sourceIndex-c.ui.elNode.sourceIndex}:function(f,e){if(f==e){return 0}var d=document.createRange();d.selectNode(a.ui.elNode);d.collapse(true);var c=document.createRange();c.selectNode(b.ui.elNode);c.collapse(true);return d.compareBoundaryPoints(Range.START_TO_END,c)}),sortSelNodes:function(){if(this.selNodes.length>1){if(!this.selNodes[0].ui.elNode){return}this.selNodes.sort(this.compareNodeOrder)}},selectNode:function(d,c){if(!this.isSelected(d)){this.selNodes.push(d);this.selMap[d.id]=d;d.ui.onSelectedChange(true)}},select:function(d,h,m){if(d instanceof Array){for(var j=0;j0){this.lastSelNode=this.lastSelNode||this.selNodes[0];var k=this.compareNodeOrder(this.lastSelNode,d)>0;this.clearSelections(true);var o=true;var f=false;var l=this.lastSelNode;do{for(var g=l;g!=null;g=(k?g.previousSibling:g.nextSibling)){f=f||(k&&(g==d||g.contains(d)));if(g.isExpanded()){g.cascade(function(c){if(o!=f){this.selectNode(c)}o=(o&&c!=d);return true},this)}else{this.selectNode(g);o=(g!=d)}if(!o){break}}if(!o){break}while((l=l.parentNode)!=null){if(k){this.selectNode(l)}o=(o&&l!=d);if(k&&l.previousSibling){l=l.previousSibling;break}if(!k&&l.nextSibling){l=l.nextSibling;break}}if(!o){break}}while(l!=null);this.selectNode(d);this.sortSelNodes();this.fireEvent("selectionchange",this,this.selNodes,d);h.preventDefault();return d}else{if(m!==true){this.clearSelections(true)}}if(this.isSelected(d)){if(m===true){this.unselect(d);if(this.lastSelNode===d){this.lastSelNode=this.selNodes[0]}return d}this.lastSelNode=d;return d}this.selectNode(d);this.sortSelNodes();this.lastSelNode=d;this.fireEvent("selectionchange",this,this.selNodes,this.lastSelNode);return d},getUniqueSelectedNodes:function(){var d=[];for(var f=0;f=0;f--){if(this.selNodes[f].isAncestor(d)){Ext.ux.FixedMultiSelectionModel.superclass.unselect.call(this,this.selNodes[f])}}}return Ext.ux.FixedMultiSelectionModel.superclass.unselect.call(this,d)},selectPrevious:function(e){var c=this.selNodes[0];if(!c){return null}var f=c.previousSibling;if(f){if(!f.isExpanded()||f.childNodes.length<1){return this.select(f,null,e)}else{var d=f.lastChild;while(d&&d.isExpanded()&&d.childNodes.length>0){d=d.lastChild}return this.select(d,null,e)}}else{if(c.parentNode&&(this.tree.rootVisible||!c.parentNode.isRoot)){return this.select(c.parentNode,null,e)}}return null},selectNext:function(e){var d=this.selNodes[this.selNodes.length-1];if(!d){return null}if(d.firstChild&&d.isExpanded()){return this.select(d.firstChild,null,e)}else{if(d.nextSibling){return this.select(d.nextSibling,null,e)}else{if(d.parentNode){var c=null;d.parentNode.bubble(function(){if(this.nextSibling){c=this.getOwnerTree().selModel.select(this.nextSibling,null,e);return false}});return c}}}return null},onKeyDown:function(f){var d=this.selNode||this.lastSelNode;var g=this;if(!d){return}var c=f.getKey();switch(c){case f.DOWN:f.stopEvent();this.selectNext(f.shiftKey||f.ctrlKey);break;case f.UP:f.stopEvent();this.selectPrevious(f.shiftKey||f.ctrlKey);break;case f.RIGHT:f.preventDefault();if(d.hasChildNodes()){if(!d.isExpanded()){d.expand()}else{if(d.firstChild){this.select(d.firstChild,f,f.shiftKey||f.ctrlKey)}}}break;case f.LEFT:f.preventDefault();if(d.hasChildNodes()&&d.isExpanded()){d.collapse()}else{if(d.parentNode&&(this.tree.rootVisible||d.parentNode!=this.tree.getRootNode())){this.select(d.parentNode,f,f.shiftKey||f.ctrlKey)}}break}}});Ext.ux.MultiSelectTreeDragZone=Ext.extend(Ext.tree.TreeDragZone,{isMultiSelect:true,onBeforeDrag:function(d,f){if(d.nodes&&d.nodes.length>0){for(var g=0;g0){var w=Ext.query(h[k].ui.indentNode.nodeName+".x-tree-node-indent",v);for(var s=0,t=w.length;s=r&&k<(r+c)&&this.isValidDropPoint(g,"above",o,j,h)){return"above"}else{if(!f&&(m||k>=l-c&&k<=l)&&this.isValidDropPoint(g,"below",o,j,h)){return"below"}}}return m?false:"append"},onNodeOver:function(d,k,j,h){var m=this.getDropPoint(j,d,k,h);var f=d.node;if(!this.expandProcId&&m=="append"&&f.hasChildNodes()&&!d.node.isExpanded()){this.queueExpand(f)}else{if(m!="append"){this.cancelExpand()}}var g=this.dropNotAllowed;if(m){var c=d.ddel;var l;if(m=="above"){g=d.node.isFirst()?"x-tree-drop-ok-above":"x-tree-drop-ok-between";l="x-tree-drag-insert-above"}else{if(m=="below"){g=d.node.isLast()?"x-tree-drop-ok-below":"x-tree-drop-ok-between";l="x-tree-drag-insert-below"}else{g="x-tree-drop-ok-append";l="x-tree-drag-append"}}if(this.lastInsertClass!=l){Ext.fly(c).replaceClass(this.lastInsertClass,l);this.lastInsertClass=l}}return g},onNodeDrop:function(f,m,h,g){var l=this.getDropPoint(h,f,m,g);var j=f.node;j.ui.startDrop();if(l===false){j.ui.endDrop();return false}var k=g.node||(m.getTreeNode?m.getTreeNode(g,j,l,h):null);var d={tree:this.tree,target:j,data:g,point:l,source:m,rawEvent:h,dropNode:k,cancel:!k,dropStatus:false};var c=this.tree.fireEvent("beforenodedrop",d);if(c===false||d.cancel===true||!d.dropNode){j.ui.endDrop();return d.dropStatus}j=d.target;if(l=="append"&&!j.isExpanded()){j.expand(false,null,function(){this.completeDrop(d)}.createDelegate(this))}else{this.completeDrop(d)}return true},afterRepair:function(f){if(f&&Ext.enableFx){var e=f.nodes?f.nodes:[f.node];for(var g=0,d=e.length;g-1){this.pos++}Ext.ux.NotificationMgr.positions.push(this.pos);this.setSize(200,100);this.el.alignTo(document,"br-br",[-20,-20-((this.getSize().height+10)*this.pos)]);this.el.slideIn("b",{duration:1,callback:this.afterShow,scope:this})},animHide:function(){Ext.ux.NotificationMgr.positions.remove(this.pos);this.el.shadow.hide();this.el.ghost("b",{duration:1,remove:false,callback:function(){Ext.ux.NotificationMgr.positions.remove(this.pos);this.destroy()}.createDelegate(this)})},focus:Ext.emptyFn});Ext.ns("Ext.ux");Ext.ux.PanelCollapsedTitle=(function(){var c="x-panel-header-rotated";var e=!!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1");var d=function(){var k=((this.region=="east")||(this.region=="west"));var l="overflow: visible; padding: 0; border: none; background: none;";if(k&&e){this.collapsedHeader=this.ownerCt.layout[this.region].getCollapsedEl().createChild({tag:"div",style:"height: 100%; overflow: hidden;"});var j="http://www.w3.org/2000/svg";var h=document.createElementNS(j,"svg");this.collapsedHeader.dom.appendChild(h);h.setAttribute("width","100%");h.setAttribute("height","100%");var m=document.createElementNS(j,"text");m.setAttribute("x",6);m.setAttribute("y",1);m.setAttribute("transform","rotate(90 6 1)");m.setAttribute("class","x-panel-header "+c);h.appendChild(m);this.collapsedHeaderText=document.createTextNode(this.title);m.appendChild(this.collapsedHeaderText);var g=Ext.fly(m).getStyle("color");m.setAttribute("style",l+";fill: "+g+";")}else{var f="position: relative;";if(k){f+="white-space: nowrap; writing-mode: tb-rl; top: 1px; left: 3px;"}else{f+="top: 2px;";l+="padding-left: 4px; margin-right: 18px;"}this.collapsedHeader=this.ownerCt.layout[this.region].getCollapsedEl().createChild({tag:"div",style:l,cls:"x-panel-header "+c,html:''+this.title+""});this.collapsedHeaderText=this.collapsedHeader.first()}if(this.collapsedIconCls){this.setCollapsedIconClass(this.collapsedIconCls)}};this.init=function(g){if(g.collapsible){var f=((g.region=="east")||(g.region=="west"));g.setTitle=Ext.Panel.prototype.setTitle.createSequence(function(h){if(this.rendered&&this.collapsedHeaderText){if(this.collapsedHeaderText.dom){this.collapsedHeaderText.dom.innerHTML=h}else{if(this.collapsedHeaderText.replaceData){this.collapsedHeaderText.nodeValue=h}}}});g.setCollapsedIconClass=function(j){var h=this.collapsedIconCls;this.collapsedIconCls=j;if(this.rendered&&this.collapsedHeader){var l=this.collapsedHeader,k=l.child("img.x-panel-inline-icon");if(k){if(this.collapsedIconCls){Ext.fly(k).replaceClass(h,this.collapsedIconCls)}else{Ext.fly(k).remove()}}else{if(this.collapsedIconCls){Ext.DomHelper.insertBefore(l.dom.firstChild,{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-panel-inline-icon "+this.collapsedIconCls,style:f?"display: block; margin: 1px 2px;":"margin-top: 2px; margin-right: 4px"})}}}};g.on("render",function(){if(this.ownerCt.rendered&&this.ownerCt.layout.hasLayout){d.call(g)}else{this.ownerCt.on("afterlayout",d,g,{single:true})}},g)}};return this})();Ext.ux.SlidingTabPanel=Ext.extend(Ext.TabPanel,{initTab:function(d,c){Ext.ux.SlidingTabPanel.superclass.initTab.call(this,d,c);this.addEvents({startDrag:true,endDrag:true});var e=this.getTemplateArgs(d);if(!this.slidingTabsID){this.slidingTabsID=Ext.id()}new Ext.ux.DDSlidingTab(e,this.slidingTabsID,{tabpanel:this})}});Ext.ux.DDSlidingTab=Ext.extend(Ext.dd.DDProxy,{constructor:function(){Ext.ux.DDSlidingTab.superclass.constructor.apply(this,arguments);this.setYConstraint(0,0,0);this.tabpanel=this.config.tabpanel;this.slideDuration=this.tabpanel.slideDuration;if(!this.slideDuration){this.slideDuration=0.1}},handleMouseDown:function(f,d){if(this.primaryButtonOnly&&f.button!=0){return}if(this.isLocked()){return}this.DDM.refreshCache(this.groups);var c=new Ext.lib.Point(Ext.lib.Event.getPageX(f),Ext.lib.Event.getPageY(f));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(c,this)){}else{if(this.clickValidator(f)){this.setStartPosition();this.b4MouseDown(f);this.onMouseDown(f);this.DDM.handleMouseDown(f,this)}}},startDrag:function(c,k){this.tabpanel.fireEvent("startDrag",this.tabpanel,this.tabpanel.getActiveTab());Ext.dd.DDM.useCache=false;Ext.dd.DDM.mode=1;this.proxyWrapper=Ext.get(this.getDragEl());this.proxyWrapper.update();this.proxyWrapper.applyStyles("z-index:1001;border:0 none;");this.proxyWrapper.addClass("tab-proxy");this.stripWrap=this.proxyWrapper.insertHtml("afterBegin",'
',true);this.dragEl=this.stripWrap.insertHtml("afterBegin","
",true);this.tab=Ext.get(this.getEl());this.tab.applyStyles("visibility:hidden;");this.dragEl.insertHtml("afterBegin",this.tab.dom.innerHTML,false);this.dragEl.dom.className=this.tab.dom.className;var j=this.tabpanel.el.getWidth();var g=this.tabpanel.el.getX();var h=this.tab.getX();var d=this.tab.getWidth();var f=h-g;var e=g+j-h-d;this.resetConstraints();this.setXConstraint(f,e)},onDragOver:function(f,j){f.stopEvent();var g=Ext.get(j[0].id);var l=g.getWidth();var k=g.getX();var h=k+(l/2);var d=this.tab.getX();var m=this.proxyWrapper.getX();var c=this.proxyWrapper.getWidth();if(mh)){if(g.next()!=this.tab){g.applyStyles("visibility:hidden;");this.tab.insertAfter(g);this.targetProxy=this.createSliderProxy(k,g);if(!this.targetProxy.hasActiveFx()){this.animateSliderProxy(g,this.targetProxy,d)}}}if(m>k&&(m',true);e.stripWrapper=e.insertHtml("afterBegin",'
',true);e.dragEl=e.stripWrapper.insertHtml("afterBegin","
",true);e.dragEl.update(f.dom.innerHTML);e.dragEl.dom.className=f.dom.className;var c=parseInt(f.getTop(false));e.setTop(c);return e},onDragDrop:function(d,c){d.stopEvent()},endDrag:function(c){var d=this.tab.getX();this.proxyWrapper.applyStyles("visibility:visible;");this.proxyWrapper.shift({x:d,easing:"easeOut",duration:this.slideDuration,callback:function(){this.proxyWrapper.applyStyles("visibility:hidden;");this.tab.applyStyles("visibility:visible;");this.stripWrap.remove();this.dragEl.remove();if(!this.targetProxy){return}this.targetProxy.stripWrapper.remove();this.targetProxy.dragEl.remove()},scope:this});Ext.dd.DDM.useCache=true;this.reorderTab();this.tabpanel.fireEvent("endDrag",this.tabpanel,this.tabpanel.getActiveTab())},reorderTab:function(){var e=this.tabpanel.header.child("ul").dom.children,c=[],f=[];for(var d=0;d{0})"),text:String.format(_("Notes ({0})"),"-"),initComponent:function(){Ext.ux.UserNotes.superclass.initComponent.apply(this);Ext.apply(this,{iconCls:"iconUserNotes",id:this.fid+"-userNotes",menu:new Ext.menu.Menu({showSeparator:false,allowOtherMenus:true,plain:true,autoHeight:true,forceLayout:true,enableScrolling:false,items:[{xtype:"grid",loadMask:true,width:500,height:200,contextMenuFrom:false,contextMenuRowIndex:false,sm:new Ext.grid.RowSelectionModel({singleSelect:true}),winNotes:new Ext.Window({scope:this,title:_("Add a new note"),iconCls:"iconUserNotes",closeAction:"hide",width:600,height:300,layout:"form",hideLabel:true,modal:true,items:[{xtype:"htmleditor",hideLabel:true,enableLinks:false,anchor:"100%"}],listeners:{show:function(c){c.items.items[0].setValue("")}},buttons:[{text:_("Add"),handler:function(){var e=this.ownerCt.ownerCt.scope,f=this.ownerCt.ownerCt;e.menu.show(e.el);var d=this.ownerCt.ownerCt.items.items[0].getValue();var c=e.file;XHR({scope:this,params:{task:"addUserNote",file:c,note:d},success:function(){f.hide();e.menu.items.items[0].store.reload();PhDOE.notify("info",_("Note added"),_("The note was added successfully !"))},failure:function(){PhDOE.winForbidden()}})}},{text:_("Cancel"),handler:function(){var c=this.ownerCt.ownerCt.scope;c.menu.show(c.el);this.ownerCt.ownerCt.hide()}}]}),contextMenu:new Ext.menu.Menu({scope:this,listeners:{show:function(c){if(this.scope.menu.items.items[0].contextMenuFrom==="containercontextmenu"){this.items.items[2].disable()}else{var d=this.scope.menu.items.items[0];var e=d.store.getAt(d.contextMenuRowIndex).data.user;if(PhDOE.userLogin==e){this.items.items[2].enable()}else{this.items.items[2].disable()}}if(PhDOE.userLogin=="anonymous"){this.items.items[0].disable();this.items.items[2].disable()}}},items:[{text:_("Add a new note"),iconCls:"iconUserNotes",handler:function(){var c=this.ownerCt.scope.menu.items.items[0];c.winNotes.show()}},"-",{text:_("Delete this note"),iconCls:"iconDelete",handler:function(){var d=this.ownerCt.scope.menu.items.items[0],c=d.store.getAt(d.contextMenuRowIndex).data.id;XHR({scope:this,params:{task:"delUserNote",noteID:c},success:function(e){var f=Ext.util.JSON.decode(e.responseText);d.store.reload();if(f.result){PhDOE.notify("info",_("Note deleted"),_("The note was deleted successfully !"))}},failure:function(){PhDOE.winForbidden()}})}},"-",{text:_("Reload data"),iconCls:"iconRefresh",handler:function(){var c=this.ownerCt.scope.menu.items.items[0];c.store.reload()}}]}),store:new Ext.data.Store({autoLoad:true,proxy:new Ext.data.HttpProxy({url:"./do/getUserNotes"}),baseParams:{file:this.file},reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"user"},{name:"note"},{name:"date",type:"date",dateFormat:"Y-m-d H:i:s"}]}),sortInfo:{field:"date",direction:"DESC"},listeners:{scope:this,datachanged:function(d){var c=d.getCount();this.setText(String.format(this.originalTitle,c))}}}),listeners:{scope:this,rowclick:function(c){if(!c.contextMenu.hidden){c.contextMenu.hide()}},containercontextmenu:function(d,f){f.stopEvent();d.getSelectionModel().clearSelections();d.contextMenuFrom="containercontextmenu";d.contextMenu.showAt(f.getXY());this.menu.show(this.el);var c=this.menu.el.zindex+2000;d.contextMenu.el.setStyle("z-index",c)},rowcontextmenu:function(d,g,f){f.stopEvent();d.getSelectionModel().selectRow(g);d.contextMenuFrom="rowcontextmenu";d.contextMenuRowIndex=g;d.contextMenu.showAt(f.getXY());this.menu.show(this.el);var c=this.menu.el.zindex+2000;d.contextMenu.el.setStyle("z-index",c)}},colModel:new Ext.grid.ColumnModel({defaults:{sortable:true},columns:[{id:"user",header:_("By"),sortable:true,dataIndex:"user"},{header:_("Date"),dataIndex:"date",renderer:Ext.util.Format.dateRenderer(_("Y-m-d, H:i"))}]}),autoExpandColumn:"user",viewConfig:{forceFit:true,deferEmptyText:false,emptyText:'
'+_("No user notes")+"

"+_("Right click to add a new note")+"
",enableRowBody:true,getRowClass:function(c,e,d){d.body='

'+c.data.note+"

";return"x-grid3-row-expanded"}}}]})})}});Ext.reg("usernotes",Ext.ux.UserNotes);Ext.namespace("ui","ui.task");ui.task.ChangeFileOwner=function(c){Ext.apply(this,c);var d=Ext.MessageBox.wait(_("Saving data..."));XHR({scope:this,params:{task:"setFileOwner",fileIdDB:this.fileIdDB,newOwnerID:this.newOwnerID},success:function(e){var f=Ext.util.JSON.decode(e.responseText);ui.cmp.WorkTreeGrid.getInstance().getRootNode().reload(function(){ui.cmp.PatchesTreeGrid.getInstance().getRootNode().reload()});ui.cmp.PortletInfo.getInstance().store.reload();d.hide();if(Ext.isDefined(this.fromType)&&this.fromType==="tab"){Ext.getCmp("main-panel").remove(this.from.curTab)}this.from.close();PhDOE.notify("info",_("Owner changed"),_("The owner for this file have been changed successfully !"))},failure:function(e){var f=Ext.util.JSON.decode(e.responseText);d.hide();PhDOE.winForbidden(f.type);if(Ext.isDefined(this.fromType)&&this.fromType==="tab"){Ext.getCmp("main-panel").remove(this.from.curTab)}this.from.close()}})};Ext.namespace("ui","ui.task","ui.task._CheckBuildTask");ui.task._CheckBuildTask.display=function(){XHR({params:{task:"getLogFile",file:"project_"+PhDOE.project+"_log_check_build_"+PhDOE.user.lang},success:function(c){var d=Ext.util.JSON.decode(c.responseText);Ext.getBody().unmask();ui.task.PingTask.getInstance().delay(30000);if(Ext.getCmp("main-panel").findById("check_build_panel_"+PhDOE.user.lang)){Ext.getCmp("main-panel").remove("check_build_panel_"+PhDOE.user.lang)}Ext.getCmp("main-panel").add({xtype:"panel",id:"check_build_panel_"+PhDOE.user.lang,title:String.format(_("Check build result for {0}"),Ext.util.Format.uppercase(PhDOE.user.lang)),tabTip:String.format(_("Check build result for the documentation {0}"),Ext.util.Format.uppercase(PhDOE.user.lang)),closable:true,autoScroll:true,iconCls:"iconCheckBuild",html:'
'+d.mess+"
"});Ext.getCmp("main-panel").setActiveTab("check_build_panel_"+PhDOE.user.lang)}})};ui.task._CheckBuildTask.poll=new Ext.util.DelayedTask(function(){XHR({params:{task:"checkLockFile",lockFile:"project_"+PhDOE.project+"_lock_check_build_"+PhDOE.user.lang},success:function(){ui.task._CheckBuildTask.poll.delay(5000)},failure:function(c){var d=Ext.util.JSON.decode(c.responseText);if(d&&d.success===false){new ui.task._CheckBuildTask.display()}else{ui.task._CheckBuildTask.poll.delay(5000)}}})});ui.task.CheckBuildTask=function(){Ext.getBody().mask(' '+_("Please, wait until the build is checked..."));ui.task.PingTask.getInstance().cancel();XHR({params:{task:"checkBuild",xmlDetails:Ext.getCmp("option-xml-details").checked},success:function(){new ui.task._CheckBuildTask.display()},failure:function(c){var d=Ext.util.JSON.decode(c.responseText);if(d&&d.success===false){ui.task.PingTask.getInstance().delay(30000);Ext.getBody().unmask();PhDOE.winForbidden(d.type)}else{ui.task._CheckBuildTask.poll.delay(5000)}}})};Ext.namespace("ui","ui.task","ui.task._CheckEntitiesTask");ui.task._CheckEntitiesTask.display=function(){BtnViewResult=Ext.getCmp("btn-check-entities-view-last-result");Ext.getBody().unmask();ui.task.PingTask.getInstance().delay(30000);if(Ext.getCmp("main-panel").findById("tab-check-entities")){Ext.getCmp("main-panel").remove("tab-check-entities")}BtnViewResult.handler.call(BtnViewResult.scope||BtnViewResult,BtnViewResult)};ui.task._CheckEntitiesTask.poll=new Ext.util.DelayedTask(function(){XHR({params:{task:"checkLockFile",lockFile:"project_"+PhDOE.project+"_lock_check_entities"},success:function(){ui.task._CheckEntitiesTask.poll.delay(5000)},failure:function(c){var d=Ext.util.JSON.decode(c.responseText);if(d&&d.success===false){new ui.task._CheckEntitiesTask.display()}else{ui.task._CheckEntitiesTask.poll.delay(5000)}}})});ui.task.CheckEntitiesTask=function(){Ext.getBody().mask(' '+_("Please, wait until entities are checked..."));ui.task.PingTask.getInstance().cancel();XHR({params:{task:"checkEntities"},success:function(){new ui.task._CheckEntitiesTask.display()},failure:function(c){var d=Ext.util.JSON.decode(c.responseText);if(d&&d.success===false){ui.task.PingTask.getInstance().delay(30000);Ext.getBody().unmask();PhDOE.winForbidden()}else{ui.task._CheckEntitiesTask.poll.delay(5000)}}})};Ext.namespace("ui","ui.task");ui.task.CheckFileTask=function(c){Ext.apply(this,c);ui.task.PingTask.getInstance().cancel();Ext.getBody().mask(' '+_("Checking for error. Please, wait..."));XHR({scope:this,params:{task:"checkFileError",FilePath:this.fpath,FileName:this.fname,FileLang:this.lang,FileContent:Ext.getCmp(this.prefix+"-"+this.ftype+"-FILE-"+this.fid).getValue()},failure:function(){ui.task.PingTask.getInstance().delay(30000);Ext.getBody().unmask();Ext.MessageBox.alert(_("Error"),_("An error occured while checking this file for errors. Please, try again."))},success:function(d){ui.task.PingTask.getInstance().delay(30000);Ext.getBody().unmask();var e=Ext.util.JSON.decode(d.responseText);if(e.error&&e.error_first!=="-No error-"){Ext.getCmp("main-panel").add({id:"FE-help-"+this.fid,title:"Error in "+this.fname,iconCls:"iconFilesError",closable:true,autoScroll:true,autoLoad:"./error?dir="+this.fpath+"&file="+this.fname});Ext.getCmp("main-panel").setActiveTab("FE-help-"+this.fid)}else{Ext.MessageBox.show({title:_("Check for errors"),msg:_("There is no error."),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.INFO})}new ui.task.SaveFileTask({prefix:this.prefix,ftype:this.ftype,fid:this.fid,fpath:this.fpath,fname:this.fname,lang:this.lang,storeRecord:this.storeRecord});if(this.prefix==="FE"){Ext.getCmp("FE-error-desc-"+this.fid).body.updateManager.refresh()}ui.cmp.ErrorFileGrid.getInstance().store.reload()}})};Ext.namespace("ui","ui.task");ui.task.CheckXml=function(d){Ext.apply(this,d);var c=this.prefix+"-"+this.ftype,e=Ext.MessageBox.wait(_("XML check. Please, wait..."));XHR({scope:this,params:{task:"checkXml",fileContent:Ext.getCmp(this.idPrefix+"-FILE-"+this.fid).getValue()},success:function(f){var g=Ext.util.JSON.decode(f.responseText);e.hide();if(g.errors!=="no_error"){new ui.cmp.CheckXmlWin({errors:g.errors})}else{PhDOE.notify("info",_("XML check"),_("There is no error."))}},failure:function(f){var g=Ext.util.JSON.decode(f.responseText);e.hide()}})};Ext.namespace("ui","ui.task");ui.task.ClearLocalChangeTask=function(d){Ext.apply(this,d);var c=this.ftype,e=this.fpath,f=this.fname;goClear=function(){Ext.getBody().mask(' '+_("Please, wait..."));var g=["FNT","FNU","FE","FNR","FNIEN","AF"];for(var h=0;hYou need confirm."),function(g){if(g==="yes"){goClear()}},this)}};Ext.namespace("ui","ui.task");ui.task.DeletePatchTask=function(c){Ext.apply(this,c);Ext.getBody().mask(' '+_("Please, wait..."));XHR({scope:this,params:{task:"deletePatch",patchID:this.patchID},success:function(){Ext.getBody().unmask();ui.cmp.PatchesTreeGrid.getInstance().deletePatch(this.patchID);PhDOE.notify("info",_("Patch deleted"),_("The patch have been deleted !"))},failure:function(d){var e=Ext.util.JSON.decode(d.responseText);Ext.getBody().unmask();if(e.err){PhDOE.winForbidden(e.err)}else{PhDOE.winForbidden()}}})};Ext.namespace("ui","ui.task");ui.task.GetFileInfoByXmlID=function(c){Ext.apply(this,c);XHR({scope:this,params:{task:"getFileInfoByXmlID",xmlID:this.xmlID},success:function(d){var e=Ext.util.JSON.decode(d.responseText);ui.cmp.RepositoryTree.getInstance().openFile("byPath",e.lang+e.path,e.name)}})};Ext.namespace("ui","ui.task");ui.task.GetFileTask=function(d){Ext.apply(this,d);var c=this.prefix+"-"+this.ftype,f=(this.original)?true:false,e=(this.ftype==="GGTRANS")?true:false,g=(this.ftype==="NEW")?this.skeleton:false;Ext.get(c+"-PANEL-"+this.fid).mask(' '+_("Loading..."));XHR({scope:this,params:{task:"getFile",FilePath:this.fpath,FileName:this.fname,readOriginal:f,ggTranslate:e,skeleton:g},success:function(h){var k=Ext.util.JSON.decode(h.responseText),y="http://"+window.location.host+":"+window.location.port+window.location.pathname+"?perm=/"+this.fpath.split("/")[0]+"/"+k.xmlid.split("|")[0]+".php&project="+PhDOE.project,s='permlink ',j=Ext.getCmp(c+"-PANEL-"+this.fid),w=Ext.get(c+"-PANEL-"+this.fid),v=Ext.getCmp(c+"-FILE-"+this.fid),q=(k.fileModified)?Ext.util.JSON.decode(k.fileModified):false,t,u;w.unmask();if(this.prefix==="PP"||this.ftype==="TRANS"||this.prefix==="FNIEN"){j.permlink=""}else{if(this.ftype==="GGTRANS"){j.setTitle(j.originTitle);j.setIconClass("iconGoogle")}else{j.permlink=(k.xmlid!=="NULL")?s:"";j.setTitle(j.permlink+j.originTitle)}}v.setValue(k.content);if(this.ftype==="GGTRANS"){v.reIndentAll()}if(k.warn_tab&&!this.freadOnly){Ext.MessageBox.show({title:_("Warning"),msg:String.format(_("The file {0} contains some tab characters.
The editor have replace it with space characters."),this.fpath+this.fname),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.WARNING});v.manageCodeChange()}if(k.warn_encoding&&!this.freadOnly){Ext.MessageBox.show({title:_("Warning"),msg:String.format(_("The editor have modified automatically the file {0} into UTF-8 encoding."),this.fpath+this.fname),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.WARNING});v.setLine(1,'');Ext.getCmp(c+"-FILE-"+this.fid+"-btn-save").enable()}if(this.prefix==="FNT"||this.prefix==="FNIEN"){t="fileModified"}if(this.prefix==="FNU"){t=(this.ftype==="LANG")?"fileModifiedLang":"fileModifiedEN"}if(this.prefix==="FE"){t=(this.ftype==="LANG")?"fileModifiedLang":"fileModifiedEN"}if(this.prefix==="FNR"){t=(this.ftype==="LANG")?"fileModifiedLang":"fileModifiedEN"}if(k.fileModified&&this.prefix!=="AF"&&!f){this.storeRecord.set(t,k.fileModified);this.storeRecord.commit()}if(this.prefix==="AF"){this.storeRecord.data={};this.storeRecord.data.fileModified=false;if(k.fileModified){this.storeRecord.data.fileModified=k.fileModified}}if(k.fileModified&&!f&&((!PhDOE.user.isAnonymous&&q.user!==PhDOE.user.login)||(PhDOE.user.isAnonymous&&q.anonymousIdent!==PhDOE.user.anonymousIdent))){if(q.isAnonymous&&!PhDOE.user.isAnonymous&&q.fromModule==="workInProgress"){Ext.MessageBox.show({title:_("Information"),msg:String.format(_("File modified by {0} (anonymous user) but you are an authenticated user, so you can modify it."),q.user),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.INFO})}else{if(q.isAnonymous&&!PhDOE.user.isAnonymous&&q.fromModule==="PatchesForReview"){new ui.cmp.AnonymousPatchWin({fidDB:q.fidDB,fid:this.fid,prefix:this.prefix,ftype:q.ftype,fpath:this.fpath,fname:this.fname,curTab:Ext.getCmp(this.prefix+"-"+this.fid)})}else{if(!this.freadOnly){Ext.getCmp(c+"-FILE-"+this.fid+"-grp-save").disable();Ext.getCmp(c+"-FILE-"+this.fid+"-grp-undoRedo").disable();Ext.getCmp(c+"-FILE-"+this.fid+"-grp-tools").disable()}u=Ext.MessageBox.show({title:_("Information"),msg:String.format(_("File modified by {0}."),q.user),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.INFO});u.getDialog().mask.resize(w.getSize().width,w.getSize().height);u.getDialog().mask.alignTo(w.dom,"tl")}}}else{if(c=="FNT-TRANS"){var x=new RegExp("");v.insertLine(1,"");v.insertLine(2,"");if(!Ext.isEmpty(v.getLine(4))){v.insertLine(3,"")}v.manageCodeChange()}}}},callback:function(){var h=Ext.getCmp(this.prefix+"-"+this.fid);if(this.prefix==="FNT"){if(this.ftype==="TRANS"){h.panTRANSLoaded=true}if(this.ftype==="GGTRANS"||this.ftype==="EN"){h.panTRANSSecondLoaded=true}}if(this.prefix==="FNU"){if(this.ftype==="LANG"){h.panLANGLoaded=true}if(this.ftype==="EN"){h.panENLoaded=true}}if(this.prefix==="FE"){if(this.ftype==="LANG"){h.panLANGLoaded=true}if(this.ftype==="EN"){h.panENLoaded=true}}if(this.prefix==="FNR"){if(this.ftype==="LANG"){h.panLANGLoaded=true}if(this.ftype==="EN"){h.panENLoaded=true}}if(this.prefix==="FNIEN"){h.panLANGLoaded=true}if(this.prefix==="AF"){h.panLoaded=true}Ext.getCmp("main-panel").fireEvent("tabLoaded",this.prefix,this.fid)}})};Ext.namespace("ui","ui.task");ui.task.GetGGTranslation=function(c){Ext.apply(this,c);Ext.get("GGTranslate-result").dom.innerHTML="";Ext.getCmp("GGTranslate-btn").disable();Ext.getCmp("GGTranslate-btn").setText(_("Please, wait..."));XHR({scope:this,params:{task:"getGGTranslation",str:this.str},success:function(d){var e=Ext.util.JSON.decode(d.responseText);Ext.get("GGTranslate-result").dom.innerHTML=Ext.util.Format.htmlEncode(e.translation);Ext.getCmp("GGTranslate-btn").setText(_("Translate !"));Ext.getCmp("GGTranslate-btn").enable()}})};Ext.namespace("ui","ui.task");ui.task.LoadConfigTask=function(c){Ext.apply(this,c);XHR({params:{task:"getConf"},success:function(d){var e=Ext.decode(d.responseText);PhDOE.user.login=e.mess.userLogin;PhDOE.user.userID=e.mess.userID;PhDOE.user.lang=e.mess.userLang;PhDOE.user.authService=e.mess.authService;PhDOE.user.authServiceID=e.mess.authServiceID;PhDOE.user.isAnonymous=e.mess.userIsAnonymous;PhDOE.user.isGlobalAdmin=e.mess.userIsGlobalAdmin;PhDOE.user.isLangAdmin=e.mess.userIsLangAdmin;PhDOE.user.conf=e.mess.userConf;PhDOE.user.anonymousIdent=e.mess.userAnonymousIdent;PhDOE.project=e.mess.project;PhDOE.app.conf=e.mess.appConf;if(e.mess.topicInfo&&e.mess.topicInfo.lang){PhDOE.topic.lang.author=e.mess.topicInfo.lang.author;PhDOE.topic.lang.content=e.mess.topicInfo.lang.content;PhDOE.topic.lang.topicDate=Date.parseDate(e.mess.topicInfo.lang.topicDate,"Y-m-d H:i:s");PhDOE.topic.lang.topicDate=PhDOE.topic.lang.topicDate.format(_("Y-m-d, H:i"))}if(e.mess.topicInfo&&e.mess.topicInfo.global){PhDOE.topic.global.author=e.mess.topicInfo.global.author;PhDOE.topic.global.content=e.mess.topicInfo.global.content;PhDOE.topic.global.topicDate=Date.parseDate(e.mess.topicInfo.global.topicDate,"Y-m-d H:i:s");PhDOE.topic.global.topicDate=PhDOE.topic.global.topicDate.format(_("Y-m-d, H:i"))}Ext.get("appTheme").dom.href=PhDOE.user.conf.main.theme;PhDOE.drawInterface()}})};Ext.namespace("ui","ui.task");ui.task.MarkDeleteTask=function(c){Ext.apply(this,c);Ext.MessageBox.confirm(_("Confirm"),_("This action will mark this file as need deleted.

You need commit this change to take it effect.

Please, confirm this action."),function(d){if(d==="yes"){Ext.getBody().mask(' '+_("Please, wait..."));XHR({scope:this,params:{task:"markAsNeedDelete",FilePath:PhDOE.user.lang+this.fpath,FileName:this.fname},success:function(e){var f=Ext.util.JSON.decode(e.responseText);Ext.getBody().unmask();ui.cmp.WorkTreeGrid.getInstance().addRecord(f.id,PhDOE.user.lang+this.fpath,this.fname,"delete");this.storeRecord.set("fileModified",'{"user":"'+PhDOE.user.login+'", "anonymousIdent":"'+PhDOE.user.anonymousIdent+'"}')}})}},this)};Ext.namespace("ui","ui.task");ui.task.MoveToPatch=function(c){Ext.apply(this,c);var d=[];Ext.each(this.nodesToAdd,function(e){d.push(e.attributes.idDB)});Ext.getBody().mask(' '+_("Please, wait..."));XHR({scope:this,params:{task:"moveToPatch",patchID:this.patchID,filesID:d.join(",")},success:function(){Ext.getBody().unmask();ui.cmp.PatchesTreeGrid.getInstance().addToPatch(this.patchID,this.patchName,this.nodesToAdd,this.patchDescription,this.patchEmail);if(this.nodesToAdd){Ext.each(this.nodesToAdd,function(e){ui.cmp.WorkTreeGrid.getInstance().delRecord(e.attributes.idDB)})}},failure:function(e){var f=Ext.util.JSON.decode(e.responseText);Ext.getBody().unmask();Ext.MessageBox.alert("Error",f.err)}})};Ext.namespace("ui","ui.task");ui.task.MoveToWork=function(c){Ext.apply(this,c);var d=[];Ext.each(this.nodesToAdd,function(e){d.push(e.attributes.idDB)});Ext.getBody().mask(' '+_("Please, wait..."));XHR({scope:this,params:{task:"moveToWork",filesID:d.join(",")},success:function(){Ext.getBody().unmask();ui.cmp.WorkTreeGrid.getInstance().addToWork(this.nodesToAdd);if(this.nodesToAdd){Ext.each(this.nodesToAdd,function(e){ui.cmp.PatchesTreeGrid.getInstance().delRecord(e.attributes.idDB)})}},failure:function(e){var f=Ext.util.JSON.decode(e.responseText);Ext.getBody().unmask();Ext.MessageBox.alert("Error",f.err)}})};Ext.namespace("ui","ui.task","ui.task._PingTask");ui.task.PingTask=function(){this.task=new Ext.util.DelayedTask(function(){XHR({scope:this,params:{task:"ping"},success:function(d){var e=Ext.util.JSON.decode(d.responseText),c;if(e.ping!=="pong"){this.onPingFailed()}else{if(PhDOE.user.lang!=="en"){c=false;if(ui.cmp.PendingTranslateGrid.getInstance().store.getTotalCount()!==e.totalData.NbPendingTranslate){ui.cmp.PendingTranslateGrid.getInstance().store.reload();c=true}if(ui.cmp.StaleFileGrid.getInstance().store.getTotalCount()!==e.totalData.NbPendingUpdate){ui.cmp.StaleFileGrid.getInstance().store.reload();c=true}if(ui.cmp.ErrorFileGrid.getInstance().store.getTotalCount()!==e.totalData.NbFilesError){ui.cmp.ErrorFileGrid.getInstance().store.reload();c=true}if(ui.cmp.PendingReviewGrid.getInstance().store.getTotalCount()!==e.totalData.NbPendingReview){ui.cmp.PendingReviewGrid.getInstance().store.reload();c=true}if(ui.cmp.NotInENGrid.getInstance().store.getTotalCount()!==e.totalData.NbNotInEn){ui.cmp.NotInENGrid.getInstance().store.reload();c=true}if(c){ui.cmp.PortletSummary.getInstance().store.reload()}}if(e.totalData.lastInfoDate!==PhDOE.lastInfoDate){ui.cmp.PortletInfo.getInstance().store.reload()}if(e.totalData.topicInfo){e.totalData.topicInfo.topicDate=Date.parseDate(e.totalData.topicInfo.topicDate,"Y-m-d H:i:s");e.totalData.topicInfo.topicDate=e.totalData.topicInfo.topicDate.format(_("Y-m-d, H:i"));if(e.totalData.topicInfo.topicDate!=PhDOE.topic.topicDate){PhDOE.topic.author=e.totalData.topicInfo.author;PhDOE.topic.content=e.totalData.topicInfo.content;PhDOE.topic.topicDate=e.totalData.topicInfo.topicDate;PhDOE.setTopic()}}}},failure:function(){this.onPingFailed()}});this.task.delay(30000)},this)};ui.task.PingTask.prototype.delay=function(d,f,e,c){this.task.delay(d,f,e,c)};ui.task.PingTask.prototype.cancel=function(){this.task.cancel()};ui.task.PingTask.prototype.onPingFailed=function(){this.cancel();var d=new Ext.ux.Notification({iconCls:"iconError",title:_("Connection lost"),html:String.format(_("Retrying in {0} second(s)."),"30"),autoDestroy:false});d.show(document);this.delay(30000);var e=29;var c=new Ext.util.DelayedTask(function(){if(e>0){d.setMessage(String.format(_("Retrying in {0} second(s)."),e));e-=1;c.delay(1000)}else{if(e==0){d.animHide()}}});c.delay(1000)};ui.task._PingTask.instance=null;ui.task.PingTask.getInstance=function(){if(!ui.task._PingTask.instance){ui.task._PingTask.instance=new ui.task.PingTask()}return ui.task._PingTask.instance};Ext.namespace("ui","ui.task");ui.task.SaveFileTask=function(d){Ext.apply(this,d);var c=this.prefix+"-"+this.ftype,e=Ext.MessageBox.wait(_("Saving data...")),f=Ext.getCmp(this.prefix+"-"+this.ftype+"-FILE-"+this.fid).getValue();XHR({scope:this,params:{task:"saveFile",filePath:this.fpath,fileName:this.fname,fileLang:this.lang,fileContent:f},success:function(h){var j=Ext.util.JSON.decode(h.responseText);if(this.prefix==="FNU"){if(this.ftype==="EN"){this.storeRecord.set("en_revision",j.revision);this.storeRecord.set("fileModifiedEN",'{"user":"'+PhDOE.user.login+'", "anonymousIdent":"'+PhDOE.user.anonymousIdent+'"}')}else{this.storeRecord.set("revision",j.en_revision);this.storeRecord.set("fileModifiedLang",'{"user":"'+PhDOE.user.login+'", "anonymousIdent":"'+PhDOE.user.anonymousIdent+'"}');this.storeRecord.set("maintainer",j.maintainer)}this.storeRecord.commit()}if(this.prefix==="FE"){if(this.ftype==="EN"){this.storeRecord.set("fileModifiedEN",'{"user":"'+PhDOE.user.login+'", "anonymousIdent":"'+PhDOE.user.anonymousIdent+'"}');this.storeRecord.commit()}else{this.storeRecord.set("maintainer",j.maintainer);this.storeRecord.set("fileModifiedLang",'{"user":"'+PhDOE.user.login+'", "anonymousIdent":"'+PhDOE.user.anonymousIdent+'"}');this.storeRecord.commit()}}if(this.prefix==="FNR"){if(this.ftype==="EN"){this.storeRecord.set("reviewed",j.reviewed);this.storeRecord.set("fileModifiedEN",'{"user":"'+PhDOE.user.login+'", "anonymousIdent":"'+PhDOE.user.anonymousIdent+'"}');this.storeRecord.commit()}else{this.storeRecord.set("reviewed",j.reviewed);this.storeRecord.set("maintainer",j.reviewed_maintainer);this.storeRecord.set("fileModifiedLang",'{"user":"'+PhDOE.user.login+'", "anonymousIdent":"'+PhDOE.user.anonymousIdent+'"}');this.storeRecord.commit()}}if(this.prefix==="AF"){this.storeRecord.getUI().addClass("fileModifiedByMe")}Ext.getCmp(this.prefix+"-"+this.ftype+"-FILE-"+this.fid).setOriginalContent(f);ui.cmp.WorkTreeGrid.getInstance().delRecord(j.id);ui.cmp.PatchesTreeGrid.getInstance().delRecord(j.id);ui.cmp.WorkTreeGrid.getInstance().addRecord(j.id,this.lang+this.fpath,this.fname,"update");Ext.getCmp(c+"-FILE-"+this.fid+"-btn-save").disable();Ext.getCmp(c+"-FILE-"+this.fid).isModified=false;Ext.getCmp(c+"-PANEL-"+this.fid).setTitle(Ext.getCmp(c+"-PANEL-"+this.fid).permlink+Ext.getCmp(c+"-PANEL-"+this.fid).originTitle);var g;if(this.lang==="en"){g=Ext.getCmp(this.prefix+"-LANG-FILE-"+this.fid)}else{g=Ext.getCmp(this.prefix+"-EN-FILE-"+this.fid)}if(this.ftype==="ALL"||!g.isModified){Ext.getCmp(this.prefix+"-"+this.fid).setTitle(Ext.getCmp(this.prefix+"-"+this.fid).originTitle)}e.hide();PhDOE.notify("info",_("Document saved"),String.format(_("Document

{0}

was saved successfully !"),this.lang+this.fpath+this.fname))},failure:function(g){var h=Ext.util.JSON.decode(g.responseText);e.hide();if(h.XmlError&&h.XmlError!="no_error"){Ext.MessageBox.alert(_("XML Errors"),_("There is somes XML's errors.

You must fix it before saving this file.

Valid this window to show this errors."),function(){new ui.cmp.CheckXmlWin({errors:h.XmlError})})}if(h.type){PhDOE.winForbidden(h.type)}}})};Ext.namespace("ui","ui.task");ui.task.SaveTransFileTask=function(d){Ext.apply(this,d);var c=this.prefix+"-"+this.ftype,e=Ext.MessageBox.wait(_("Saving data...")),f=Ext.getCmp(this.prefix+"-"+this.ftype+"-FILE-"+this.fid).getValue();XHR({scope:this,params:{task:"saveFile",type:"trans",filePath:this.fpath,fileName:this.fname,fileLang:this.lang,fileContent:f},success:function(g){var h=Ext.util.JSON.decode(g.responseText);if(this.ftype!="NEW"){this.storeRecord.set("fileModified",'{"user":"'+PhDOE.user.login+'", "anonymousIdent":"'+PhDOE.user.anonymousIdent+'"}');this.storeRecord.commit()}else{this.storeRecord.data.node.reload()}Ext.getCmp(this.prefix+"-"+this.ftype+"-FILE-"+this.fid).setOriginalContent(f);ui.cmp.WorkTreeGrid.getInstance().addRecord(h.id,this.lang+this.fpath,this.fname,"new");Ext.getCmp(c+"-FILE-"+this.fid+"-btn-save").disable();Ext.getCmp(c+"-FILE-"+this.fid).isModified=false;Ext.getCmp(c+"-PANEL-"+this.fid).setTitle(Ext.getCmp(c+"-PANEL-"+this.fid).originTitle);Ext.getCmp(this.prefix+"-"+this.fid).setTitle(Ext.getCmp(this.prefix+"-"+this.fid).originTitle);e.hide();PhDOE.notify("info",_("Document saved"),String.format(_("Document

{0}

was saved successfully !"),this.lang+this.fpath+this.fname))},failure:function(g){var h=Ext.util.JSON.decode(g.responseText);e.hide();if(h.XmlError&&h.XmlError!="no_error"){Ext.MessageBox.alert(_("XML Errors"),_("There is somes XML's errors.

You must fix it before saving this file.

Valid this window to show this errors."),function(){new ui.cmp.CheckXmlWin({errors:h.XmlError})})}if(h.type){PhDOE.winForbidden(h.type)}}})};Ext.namespace("ui","ui.task");ui.task.SetFileProgressTask=function(c){Ext.apply(this,c);XHR({scope:this,params:{task:"SetFileProgress",idDB:this.idDB,progress:this.progress},failure:function(d){var e=Ext.util.JSON.decode(d.responseText),f;if(e.err){if(e.err=="file_dont_exist_in_workInProgress"){f=_("The file you want to change the estimated progress don't exist into the database.")}if(e.err=="file_isnt_owned_by_current_user"){f=_("The file you want to change the estimated progress isn't own by you.
You only can modify this information for yours files.")}}if(f){PhDOE.notify("error",_("Error"),f)}}})};Ext.namespace("ui","ui.task");ui.task.setTopicTask=function(c){Ext.apply(this,c);var d=this.isLang;XHR({scope:this,params:{task:"setTopic",content:this.content,lang:d?"lang":"global"},success:function(f){var g=Ext.util.JSON.decode(f.responseText),e=PhDOE.topic[d?"lang":"global"];e.author=g.author;e.content=g.content;e.topicDate=Date.parseDate(g.topicDate,"Y-m-d H:i:s");e.topicDate=e.topicDate.format(_("Y-m-d, H:i"));PhDOE.setTopic(d)}})};Ext.namespace("ui","ui.task","ui.task._SystemUpdateTask");ui.task._SystemUpdateTask.refresh_ui=function(){Ext.get("wizard-step-3").replaceClass("wizard-step-before","wizard-step-working");PhDOE.reloadAllStore();Ext.get("wizard-step-3").replaceClass("wizard-step-working","wizard-step-done");Ext.getCmp("btn-start-refresh").setIconClass("iconFinishRefresh");Ext.getCmp("btn-start-refresh").setText(_("Finish !"));Ext.getCmp("btn-start-refresh").setHandler(function(){Ext.getCmp("sys-update-win").close()});Ext.getCmp("btn-start-refresh").enable();ui.task.PingTask.getInstance().delay(30000);Ext.getCmp("sys-update-win").tools.close.setVisible(true)};ui.task._SystemUpdateTask.poll_apply_tool=new Ext.util.DelayedTask(function(){XHR({params:{task:"checkLockFile",lockFile:"project_"+PhDOE.project+"_lock_apply_tools"},success:function(){ui.task._SystemUpdateTask.poll_apply_tool.delay(5000)},failure:function(c){var d=Ext.util.JSON.decode(c.responseText);if(d&&d.success===false){Ext.get("wizard-step-2").replaceClass("wizard-step-working","wizard-step-done");new ui.task._SystemUpdateTask.refresh_ui()}else{ui.task._SystemUpdateTask.poll_apply_tool.delay(5000)}}})});ui.task._SystemUpdateTask.apply_tool=function(){Ext.get("wizard-step-2").replaceClass("wizard-step-before","wizard-step-working");XHR({params:{task:"applyTools"},success:function(){Ext.get("wizard-step-2").replaceClass("wizard-step-working","wizard-step-done");new ui.task._SystemUpdateTask.refresh_ui()},failure:function(){ui.task._SystemUpdateTask.poll_apply_tool.delay(5000)}})};ui.task._SystemUpdateTask.vcs_poll=new Ext.util.DelayedTask(function(){XHR({params:{task:"checkLockFile",lockFile:"project_"+PhDOE.project+"_lock_update_repository"},success:function(){ui.task._SystemUpdateTask.vcs_poll.delay(5000)},failure:function(c){var d=Ext.util.JSON.decode(c.responseText);if(d&&d.success===false){Ext.get("wizard-step-1").replaceClass("wizard-step-working","wizard-step-done");Ext.get("wizard-step-1.1").replaceClass("wizard-show","wizard-wait");new ui.task._SystemUpdateTask.apply_tool()}else{ui.task._SystemUpdateTask.vcs_poll.delay(5000)}}})});ui.task.SystemUpdateTask=function(){ui.task.PingTask.getInstance().cancel();Ext.get("wizard-step-1").replaceClass("wizard-step-before","wizard-step-working");Ext.get("wizard-step-1.1").replaceClass("wizard-wait","wizard-show");XHR({params:{task:"updateRepository"},success:function(){Ext.get("wizard-step-1").replaceClass("wizard-step-working","wizard-step-done");Ext.get("wizard-step-1.1").replaceClass("wizard-show","wizard-wait");new ui.task._SystemUpdateTask.apply_tool()},failure:function(c){var d=Ext.util.JSON.decode(c.responseText);if(d&&d.success===false){Ext.getCmp("sys-update-win").close();PhDOE.winForbidden(d.type)}else{ui.task._SystemUpdateTask.vcs_poll.delay(5000)}}})};Ext.namespace("ui","ui.task");ui.task.UpdateConfTask=function(c){Ext.apply(this,c);XHR({scope:this,params:{task:"confUpdate",module:this.module,itemName:this.itemName,value:this.value},success:function(){PhDOE.user.conf[this.module][this.itemName]=this.value;if(this.module=="newFile"&&this.itemName=="nbDisplay"){ui.cmp.PendingTranslateGrid.getInstance().store.reload()}if(this.module=="needUpdate"&&this.itemName=="nbDisplay"){ui.cmp.StaleFileGrid.getInstance().store.reload()}if(this.module=="error"&&(this.itemName=="skipNbLiteralTag"||this.itemName=="nbDisplay")){ui.cmp.ErrorFileGrid.getInstance().store.reload()}if(this.module=="reviewed"&&this.itemName=="nbDisplay"){ui.cmp.PendingReviewGrid.getInstance().store.reload()}if(this.module=="main"&&this.itemName=="displayENWork"){ui.cmp.WorkTreeGrid.getInstance().getRootNode().reload(function(){ui.cmp.PatchesTreeGrid.getInstance().getRootNode().reload()})}if(this.notify!==false){PhDOE.notify("info",_("Option saved"),_("Option has been saved successfully !"))}}})};Ext.namespace("ui","ui.task","ui.task._VCSCommitTask");ui.task._VCSCommitTask.getCommitResponse=function(){XHR({params:{task:"getCommitResponse"},success:function(c){var d=Ext.util.JSON.decode(c.responseText);ui.task._VCSCommitTask.afterCommit(d.mess)}})};ui.task._VCSCommitTask.poll=new Ext.util.DelayedTask(function(){XHR({params:{task:"checkLockFile",lockFile:"project_"+PhDOE.project+"_lock_"+PhDOE.user.login+"_commit"},success:function(){ui.task._VCSCommitTask.poll.delay(5000)},failure:function(c){var d=Ext.util.JSON.decode(c.responseText);if(d&&d.success===false){new ui.task._VCSCommitTask.getCommitResponse()}else{ui.task._VCSCommitTask.poll.delay(5000)}}})});ui.task._VCSCommitTask.afterCommit=function(c){Ext.getBody().unmask();ui.task.PingTask.getInstance().delay(30000);new Ext.Window({title:_("Status"),width:450,height:350,resizable:false,modal:true,autoScroll:true,bodyStyle:"background-color: white; padding: 5px;",html:c.join("
"),buttons:[{text:_("Close"),handler:function(){this.ownerCt.ownerCt.close()}}]}).show();PhDOE.reloadAllStore()};ui.task._VCSCommitTask.commit=function(h,g){Ext.getBody().mask(' '+_("Please, wait until commit..."));var c=[],f,e,d;for(d=0;d0){for(h=0;h"}Ext.MessageBox.show({title:"Warning",icon:Ext.MessageBox.INFO,buttons:Ext.MessageBox.YESNOCANCEL,msg:(l.length>1)?String.format(_("There are {0} files to close before commit.

{1}

Would you like me to close them for you ?"),l.length,m):String.format(_("There is {0} file to close before commit.

{1}

Would you like me to close it for you ?"),l.length,m),fn:function(u){if(u==="yes"){for(var t=0;t'+PhDOE.app.name+'
'+PhDOE.app.name+" Copyright © 2008-2012 The PHP Group
"+_("Author:")+' Yannick Torrès '+_('and others')+"
"},{title:_("Help and support"),bodyStyle:"padding:15px",html:'
'},{title:_("Credits"),bodyStyle:"padding:15px",html:'
"},{title:_("License"),autoLoad:{url:"./LICENSE"}}]}});ui.cmp.About.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._AnonymousPatchWin");ui.cmp._AnonymousPatchWin.form=Ext.extend(Ext.FormPanel,{frame:true,labelWidth:5,bodyStyle:"padding:5px 5px 0",defaultType:"radio",initComponent:function(c){Ext.apply(this,{items:[{xtype:"displayfield",value:_("File: ")+this.fpath+this.fname+"

"+_('You have opened a modified file from the "Patch for review" module.
This file has been modified by an anonymous user.

Please choose one of the following actions:')},{boxLabel:_("Continue to modify this file"),name:"choice",inputValue:"continue",checked:true,listeners:{afterrender:function(){new Ext.ToolTip({title:_("Continue to modify this file"),target:"x-form-el-"+this.id,anchor:"right",html:"
"+_("This action will open this file for modification. Once your modification finish, just save it and this file will be own by you."),width:250,autoHide:true})}}},{boxLabel:_("Reject this patch"),name:"choice",inputValue:"reject",listeners:{afterrender:function(){new Ext.ToolTip({title:_("Reject this patch"),target:"x-form-el-"+this.id,anchor:"right",html:"
"+_("This action will close this file, and clear the local change. This file will return into his original version, as it is on VCS server."),width:250,autoHide:true})}}},{boxLabel:_("Validate this patch"),name:"choice",inputValue:"validate",listeners:{afterrender:function(){new Ext.ToolTip({title:_("Validate this patch"),target:"x-form-el-"+this.id,anchor:"right",html:"
"+_("This action changes the owner of the modification and register it under your name. The file will appear under your name and you can then commit it."),width:250,autoHide:true})}}}]});ui.cmp._AnonymousPatchWin.form.superclass.initComponent.call(this)}});ui.cmp.AnonymousPatchWin=Ext.extend(Ext.Window,{id:"anonymous-patch-win",title:_("Anonymous patch manager"),iconCls:"iconPatch",width:450,height:250,layout:"fit",resizable:false,modal:true,autoScroll:true,closable:false,closeAction:"close",buttons:[{text:_("Next"),iconCls:"iconArrowRight",handler:function(){var d=this.ownerCt.ownerCt,c=d.items.items[0].getForm().getValues().choice;switch(c){case"continue":d.close();break;case"reject":ui.task.ClearLocalChangeTask({ftype:d.ftype,fpath:d.fpath,fname:d.fname,noConfirm:true});break;case"validate":ui.task.ChangeFileOwner({fileIdDB:d.fidDB,newOwnerID:PhDOE.user.userID,from:d,fromType:"tab"});break}}}],initComponent:function(){Ext.apply(this,{items:[new ui.cmp._AnonymousPatchWin.form({fpath:this.fpath,fname:this.fname})]});ui.cmp.AnonymousPatchWin.superclass.initComponent.call(this);this.show()}});Ext.namespace("ui","ui.cmp","ui.cmp._BuildStatus");ui.cmp._BuildStatus.display=function(c){Ext.apply(this,c);if(Ext.getCmp("main-panel").findById("last_failed_build_"+this.lang)){Ext.getCmp("main-panel").remove("last_failed_build_"+this.lang)}Ext.getCmp("main-panel").add({xtype:"panel",id:"last_failed_build_"+this.lang,title:String.format(_("Last failed build for {0}"),Ext.util.Format.uppercase(this.lang)),tabTip:String.format(_("Last failed build for the documentation {0}"),Ext.util.Format.uppercase(this.lang)),closable:true,autoScroll:true,iconCls:"iconCheckBuild",html:'
'});Ext.getCmp("main-panel").setActiveTab("last_failed_build_"+this.lang);Ext.getCmp("main-panel").el.mask(_("Please, wait..."));XHR({scope:this,params:{task:"getFailedBuildData",idFailedBuild:this.idFailedBuild},success:function(d){var e=Ext.decode(d.responseText),f=e.mess.join("
");if(e.state==="truncate"){Ext.get("check-build-content").dom.innerHTML=f+'
'+_("This log is too large and have been truncated. Use the following button to download the full content of it.")+'
';new Ext.Button({scope:this,text:_("Download the full content of this log"),renderTo:"check-build-content-download-btn",style:{margin:"auto"},handler:function(){window.location.href="./do/downloadFailedBuildLog?idFailedBuild="+this.idFailedBuild+"&csrfToken="+csrfToken}})}else{Ext.get("check-build-content").dom.innerHTML=f}Ext.getCmp("main-panel").el.unmask()}})};ui.cmp._BuildStatus.ds=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getFailedBuild"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"lang"},{name:"date",type:"date",dateFormat:"Y-m-d H:i:s"}]})});ui.cmp._BuildStatus.ds.setDefaultSort("date","desc");ui.cmp._BuildStatus.rendererLanguage=function(d){var c={cs:"cz",sr:"rs",sv:"se"};return'
'+d+"
"};ui.cmp._BuildStatus.columns=[{id:"date",header:_("Date"),sortable:true,dataIndex:"date",renderer:Ext.util.Format.dateRenderer(_("Y-m-d, H:i"))},{header:_("Language"),width:45,sortable:true,dataIndex:"lang",renderer:ui.cmp._BuildStatus.rendererLanguage}];ui.cmp._BuildStatus.menu=Ext.extend(Ext.menu.Menu,{setRowIndex:function(c){this.rowIndex=c},initComponent:function(){Ext.apply(this,{items:[{scope:this,text:""+_("View in a new Tab")+"",iconCls:"iconOpenInTab",handler:function(){this.grid.fireEvent("rowdblclick",this.grid,this.rowIndex,this.event)}}]});ui.cmp._BuildStatus.menu.superclass.initComponent.call(this)}});ui.cmp.BuildStatus=Ext.extend(Ext.grid.GridPanel,{loadMask:true,bodyBorder:false,autoExpandColumn:"date",store:ui.cmp._BuildStatus.ds,columns:ui.cmp._BuildStatus.columns,view:new Ext.grid.GridView({forceFit:true}),listeners:{render:function(){this.store.load.defer(20,this.store)}},onRowdblclick:function(c,g,f){var d=this.store.getAt(g);new ui.cmp._BuildStatus.display({idFailedBuild:d.id,lang:d.data.lang})},onRowContextMenu:function(c,f,d){if(!this.menu){this.menu=new ui.cmp._BuildStatus.menu({grid:c,rowIdx:"",event:d})}d.stopEvent();this.getSelectionModel().selectRow(f);this.menu.setRowIndex(f);this.menu.showAt(d.getXY())},initComponent:function(c){ui.cmp.BuildStatus.superclass.initComponent.call(this);Ext.apply(this,c);this.on("rowdblclick",this.onRowdblclick,this);this.on("rowcontextmenu",this.onRowContextMenu,this)}});Ext.namespace("ui","ui.cmp","ui.cmp._ChangeFileOwner");ui.cmp._ChangeFileOwner.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getVCSUsers"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",fields:[{name:"userID"},{name:"authService"},{name:"userName"}]}),sortInfo:{field:"authService",direction:"ASC"}});ui.cmp.ChangeFileOwner=Ext.extend(Ext.Window,{title:_("Change file's owner"),iconCls:"iconSwitchLang",width:550,height:255,layout:"form",resizable:false,modal:true,autoScroll:true,closeAction:"close",padding:10,buttons:[{text:_("Save"),handler:function(){var d=this.ownerCt.ownerCt,c=d.items.items[1].items.items[0].getValue();new ui.task.ChangeFileOwner({fileIdDB:d.fileIdDB,newOwnerID:c,from:d})}},{text:_("Close"),handler:function(){var c=this.ownerCt.ownerCt;c.close()}}],initComponent:function(){var c=this;Ext.apply(this,{defaults:{labelWidth:120},items:[{xtype:"fieldset",title:_("Information"),iconCls:"iconInfo",width:515,items:[{xtype:"displayfield",fieldLabel:_("File"),value:this.fileFolder+this.fileName},{xtype:"displayfield",fieldLabel:_("Current owner"),value:this.currentOwner}]},{xtype:"fieldset",title:_("Action"),iconCls:"iconSwitchLang",width:515,items:[{xtype:"combo",name:"newOwner",fieldLabel:_("New owner"),editable:false,store:ui.cmp._ChangeFileOwner.store,triggerAction:"all",valueField:"userID",tpl:new Ext.XTemplate('
',"{authService} - {userName}","
"),displayField:"userName",listeners:{afterrender:function(d){d.store.load({callback:function(){d.setValue(PhDOE.user.userID)}})}}}]}]});ui.cmp.ChangeFileOwner.superclass.initComponent.call(this);this.show()}});Ext.namespace("ui","ui.cmp");ui.cmp.Chat=Ext.extend(Ext.Window,{id:"win-chat",iconCls:"iconChat",layout:"fit",width:800,height:600,modal:true,plain:true,bodyStyle:"color:#000",closeAction:"hide",initComponent:function(){var c=PhDOE.user.login;if(PhDOE.user.isAnonymous){c="an%3F%3F%3F"}Ext.apply(this,{title:_("Chat with us on IRC !"),items:[new Ext.ux.IFrameComponent({id:"frame-win-chat",url:"https://widget.mibbit.com/?settings=8eec4034df2eb666b0600bdfe151529a&server=irc.umich.edu&channel=%23php.doc&nick=poe_"+c})]});ui.cmp.Chat.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp");ui.cmp.CheckBuildPrompt=Ext.extend(Ext.Window,{title:_("Check build"),iconCls:"iconCheckBuild",layout:"form",width:350,height:200,resizable:false,modal:true,bodyStyle:"padding:5px 5px 0",labelAlign:"top",buttons:[{id:"win-check-build-btn-submit",text:_("Go !"),handler:function(){new ui.task.CheckBuildTask();this.ownerCt.ownerCt.close()}}],initComponent:function(){Ext.apply(this,{items:[{xtype:"panel",modal:false,baseCls:"x-plain",bodyStyle:"padding:5px 5px 0",html:_("You're about to check the build via this command:")+"

/usr/bin/php configure.php --with-lang="+PhDOE.user.lang+'
"},{xtype:"checkbox",id:"option-xml-details",name:"option-xml-details",checked:false,hideLabel:true,boxLabel:_("Enable detailed XML error messages"),listeners:{check:function(e,d){Ext.get("option-xml-details-span").dom.style.visibility=(d)?"visible":"hidden";Ext.get("option-xml-details-div").dom.style.visibility=(d)?"visible":"hidden"}}}]});ui.cmp.CheckBuildPrompt.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._CheckDoc");ui.cmp._CheckDoc.ds=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getCheckDocData"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"path"},{name:"extension"},{name:"check_oldstyle",type:"int"},{name:"check_undoc",type:"int"},{name:"check_roleerror",type:"int"},{name:"check_badorder",type:"int"},{name:"check_noseealso",type:"int"},{name:"check_noreturnvalues",type:"int"},{name:"check_noparameters",type:"int"},{name:"check_noexamples",type:"int"},{name:"check_noerrors",type:"int"}]})});ui.cmp._CheckDoc.ds.setDefaultSort("extension","asc");ui.cmp._CheckDoc.renderer=function(d,c){if(d>0){c.css="check_doc_cell";c.attr="ext:qtip=\" "+_("Double-click the cell to open the file selection")+'"';return d}else{return}};ui.cmp._CheckDoc.columns=[new Ext.grid.RowNumberer(),{id:"extension",header:_("Extension"),sortable:true,dataIndex:"extension"},{header:_("Not documented"),width:45,sortable:true,dataIndex:"check_undoc",renderer:ui.cmp._CheckDoc.renderer},{header:_("Old style"),width:45,sortable:true,dataIndex:"check_oldstyle",renderer:ui.cmp._CheckDoc.renderer},{header:_("Bad refsect1 order"),width:45,sortable:true,dataIndex:"check_badorder",renderer:ui.cmp._CheckDoc.renderer},{header:_("No parameters"),width:45,sortable:true,dataIndex:"check_noparameters",renderer:ui.cmp._CheckDoc.renderer},{header:_("No return values"),width:45,sortable:true,dataIndex:"check_noreturnvalues",renderer:ui.cmp._CheckDoc.renderer},{header:_("No examples"),width:45,sortable:true,dataIndex:"check_noexamples",renderer:ui.cmp._CheckDoc.renderer},{header:_("No errors section"),width:45,sortable:true,dataIndex:"check_noerrors",renderer:ui.cmp._CheckDoc.renderer},{header:_("No see also"),width:45,sortable:true,dataIndex:"check_noseealso",renderer:ui.cmp._CheckDoc.renderer},{header:_("Refsect1 role error"),width:45,sortable:true,dataIndex:"check_roleerror",renderer:ui.cmp._CheckDoc.renderer}];ui.cmp._CheckDoc.fs=new Ext.data.SimpleStore({fields:[{name:"id"},{name:"file"}]});ui.cmp._CheckDoc.FileGrid=Ext.extend(Ext.grid.GridPanel,{id:"check-doc-file-grid",store:ui.cmp._CheckDoc.fs,loadMask:true,bodyBorder:false,autoExpandColumn:"file",sm:new Ext.grid.RowSelectionModel({}),columns:[new Ext.grid.RowNumberer(),{id:"file",header:_("Files"),sortable:true,dataIndex:"file"}],onRowClick:function(){Ext.getCmp("check-doc-btn-open-selected-files").enable()},onRowContextMenu:function(c,f,d){d.stopEvent();c.getSelectionModel().selectRow(f)},onRowDblClick:function(c,d){ui.cmp.RepositoryTree.getInstance().openFile("byPath","en"+c.fpath,c.store.getAt(d).data.file);Ext.getCmp("check-doc-file-win").close()},initComponent:function(c){ui.cmp._CheckDoc.FileGrid.superclass.initComponent.call(this);Ext.apply(this,c);this.on("rowcontextmenu",this.onRowContextMenu,this);this.on("rowdblclick",this.onRowDblClick,this);this.on("rowclick",this.onRowClick,this)}});ui.cmp._CheckDoc.FileWin=Ext.extend(Ext.Window,{id:"check-doc-file-win",title:_("Files"),width:450,height:350,labelWidth:50,resizable:false,modal:true,autoScroll:true,layout:"fit",iconCls:"iconFiles",buttons:[{text:_("Open all files"),handler:function(){var e=Ext.getCmp("check-doc-file-win"),c=ui.cmp._CheckDoc.fs,d;PhDOE.AFfilePendingOpen=[];for(d=0;d"+_("Open in a new Tab")+"",iconCls:"iconOpenInTab",handler:function(){this.openTab(this.ctxRowIndex);this.menu.hide()}}]})}this.getSelectionModel().selectRow(f);d.stopEvent();if(this.ctxRowIndex){this.ctxRowIndex=null}this.ctxRowIndex=f;this.menu.showAt(d.getXY())},initComponent:function(c){this.tbar=[{xtype:"label",text:_("Status: ")},{xtype:"combo",typeAhead:true,triggerAction:"all",lazyRender:true,mode:"local",store:new Ext.data.ArrayStore({id:0,fields:["myId","displayText"],data:[["all",_("All status")],["FTP_CONNECT","FTP_CONNECT"],["FTP_LOGIN","FTP_LOGIN"],["FTP_NO_FILE","FTP_NO_FILE"],["HTTP_CONNECT","HTTP_CONNECT"],["HTTP_INTERNAL_ERROR","HTTP_INTERNAL_ERROR"],["HTTP_NOT_FOUND","HTTP_NOT_FOUND"],["HTTP_MOVED","HTTP_MOVED"],["HTTP_WRONG_HEADER","HTTP_WRONG_HEADER"],["SUCCESS","SUCCESS"],["UNKNOWN_HOST","UNKNOWN_HOST"]]}),value:"all",valueField:"myId",displayField:"displayText",editable:false,listeners:{select:function(f,d){var e=d.id;if(e==="all"){Ext.getCmp("check-entities-grid").store.clearFilter()}else{Ext.getCmp("check-entities-grid").store.filter("result",d.id)}}}}];ui.cmp.CheckEntities.superclass.initComponent.call(this);Ext.apply(this,c);this.on("rowcontextmenu",this.onContextClick,this);this.on("rowdblclick",this.onRowdblclick,this)}});Ext.namespace("ui","ui.cmp");ui.cmp.CheckEntitiesPrompt=Ext.extend(Ext.Window,{title:_("Check entities"),iconCls:"iconRun",id:"win-check-entities",layout:"fit",width:250,height:140,resizable:false,modal:true,bodyStyle:"padding:5px 5px 0; text-align: center;",labelAlign:"top",closeAction:"hide",buttons:[{id:"win-check-entities-btn",text:_("Go !"),handler:function(){new ui.task.CheckEntitiesTask();Ext.getCmp("win-check-entities").hide()}}],initComponent:function(){Ext.apply(this,{items:[{xtype:"panel",modal:false,baseCls:"x-plain",bodyStyle:"padding:5px 5px 0",html:_("You're about to check all entities.

This action takes time.")}]});ui.cmp.CheckEntitiesPrompt.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp");ui.cmp.CheckXmlWin=Ext.extend(Ext.Window,{title:_("XML Errors"),iconCls:"iconXml",width:650,height:350,layout:"fit",resizable:false,modal:true,autoScroll:true,closeAction:"close",buttons:[{text:_("Close"),handler:function(){this.ownerCt.ownerCt.close()}}],store:new Ext.data.JsonStore({root:"Items",totalProperty:"nbItems",fields:[{name:"line"},{name:"libel"}]}),addErrorsInStore:function(){var c=Ext.data.Record.create({name:"line"},{name:"libel"});this.store.removeAll();for(i=0;i"+Ext.util.Format.htmlEncode(this.errors[i].ctx1)}))}this.store.sort("line","desc")},initComponent:function(){Ext.apply(this,{items:[{xtype:"grid",store:this.store,loadMask:true,autoExpandColumn:"libel_id",colModel:new Ext.grid.ColumnModel([{header:_("Line"),dataIndex:"line",sortable:true},{id:"libel_id",header:_("Libel"),dataIndex:"libel"}]),sm:new Ext.grid.RowSelectionModel({singleSelect:true})}]});ui.cmp.CheckXmlWin.superclass.initComponent.call(this);this.addErrorsInStore();this.show()}});Ext.namespace("ui","ui.cmp","ui.cmp._CommitLogManager");ui.cmp._CommitLogManager.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getCommitLogMessage"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"text"}]})});ui.cmp._CommitLogManager.editor=new Ext.ux.grid.RowEditor({saveText:_("Update"),cancelText:_("Cancel"),listeners:{afteredit:function(e,d,c){XHR({params:{task:"saveLogMessage",messID:c.data.id,mess:c.data.text},success:function(){c.commit();PhDOE.notify("info",_("Message updated"),_("Log Message was updated successfully !"))},failure:function(){PhDOE.winForbidden()}})}}});ui.cmp._CommitLogManager.cm=new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(),{id:"log_msg",header:_("Log message"),dataIndex:"text",editor:{xtype:"textarea"},renderer:function(c){return c.split("\n").join("
")}}]);ui.cmp._CommitLogManager.sm=new Ext.grid.RowSelectionModel({singleSelect:true});ui.cmp._CommitLogManager.menu=Ext.extend(Ext.menu.Menu,{setRowIdx:function(c){this.rowIdx=c},initComponent:function(){Ext.apply(this,{items:[{scope:this,text:_("Delete this Log Message"),iconCls:"iconTrash",handler:function(){XHR({scope:this,params:{task:"deleteLogMessage",messID:ui.cmp._CommitLogManager.store.getAt(this.rowIdx).data.id},success:function(){ui.cmp._CommitLogManager.store.remove(ui.cmp._CommitLogManager.store.getAt(this.rowIdx));PhDOE.notify("info",_("Message deleted"),_("Log Message was deleted successfully !"))},failure:function(){PhDOE.winForbidden()}})}}]});ui.cmp._CommitLogManager.menu.superclass.initComponent.call(this)}});ui.cmp._CommitLogManager.grid=Ext.extend(Ext.grid.GridPanel,{loadMask:true,autoExpandColumn:"log_msg",cm:ui.cmp._CommitLogManager.cm,sm:ui.cmp._CommitLogManager.sm,store:ui.cmp._CommitLogManager.store,plugins:[ui.cmp._CommitLogManager.editor],viewConfig:{emptyText:'
'+_("No log message currently")+"
"},listeners:{render:function(c){c.store.load()}},onRowContextMenu:function(c,f,d){d.stopEvent();this.getSelectionModel().selectRow(f);if(!this.menu){this.menu=new ui.cmp._CommitLogManager.menu()}this.menu.setRowIdx(f);this.menu.showAt(d.getXY())},initComponent:function(c){ui.cmp._CommitLogManager.grid.superclass.initComponent.call(this);Ext.apply(this,c);this.on("rowcontextmenu",this.onRowContextMenu,this)}});ui.cmp.CommitLogManager=Ext.extend(Ext.Window,{id:"commit-log-win",title:_("Manage Log Message"),iconCls:"iconWinManageLog",width:650,height:350,layout:"fit",resizable:false,modal:true,autoScroll:true,closeAction:"hide",store:ui.cmp._CommitLogManager.store,buttons:[{text:_("Close"),handler:function(){Ext.getCmp("commit-log-win").hide()}}],initComponent:function(){Ext.apply(this,{items:[new ui.cmp._CommitLogManager.grid()]});ui.cmp.CommitLogManager.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._CommitPrompt");ui.cmp._CommitPrompt.store=new Ext.data.GroupingStore({reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"path"},{name:"name"},{name:"by"},{name:"date",type:"date",dateFormat:"Y-m-d H:i:s"},{name:"type"}]}),sortInfo:{field:"name",direction:"ASC"},groupField:"path"});ui.cmp._CommitPrompt.columns=[new Ext.grid.CheckboxSelectionModel(),{id:"name",header:_("Files"),sortable:true,dataIndex:"name"},{header:_("Modified by"),width:45,sortable:true,dataIndex:"by"},{header:_("Date"),width:45,sortable:true,dataIndex:"date",renderer:Ext.util.Format.dateRenderer(_("Y-m-d, H:i"))},{header:_("Path"),dataIndex:"path",hidden:true}];ui.cmp._CommitPrompt.view=new Ext.grid.GroupingView({forceFit:true,groupTextTpl:'{[values.rs[0].data["path"]]} ({[values.rs.length]} {[values.rs.length > 1 ? "'+_("Files")+'" : "'+_("File")+'"]})'});ui.cmp._CommitPrompt.grid=Ext.extend(Ext.grid.GridPanel,{id:"commit-grid-panel",loadMask:true,autoExpandColumn:"name",height:180,columns:ui.cmp._CommitPrompt.columns,view:ui.cmp._CommitPrompt.view,enableDragDrop:true,sm:new Ext.grid.CheckboxSelectionModel(),listeners:{viewready:function(){this.selModel.selectAll()}},initComponent:function(){Ext.apply(this,{store:ui.cmp._CommitPrompt.store});ui.cmp._CommitPrompt.grid.superclass.initComponent.call(this)}});ui.cmp.CommitPrompt=Ext.extend(Ext.Window,{id:"winVCSCommit",layout:"form",title:_("VCS commit"),iconCls:"iconPendingCommit",closable:false,width:600,height:480,resizable:false,modal:true,bodyStyle:"padding:5px 5px 0",labelAlign:"top",patchID:false,defaultMessage:false,tools:[{id:"gear",qtip:_("Configure this tools"),handler:function(){if(!Ext.getCmp("commit-log-win")){new ui.cmp.CommitLogManager()}Ext.getCmp("commit-log-win").show(this.id)}}],listeners:{show:function(){var c=new Ext.util.DelayedTask(function(){Ext.getCmp("form-commit-message-log").focus()});c.delay(200)}},initComponent:function(){var c;ui.cmp._CommitPrompt.store.removeAll();for(c=0;c
{[values.text.split("\n").join("
")]}
',valueField:"id",displayField:"text",listEmptyText:'
'+_("No log message currently")+"
",listeners:{select:function(e,d){Ext.getCmp("form-commit-message-log").setValue(d.data.text)}}},{xtype:"textarea",id:"form-commit-message-log",name:"first3",fieldLabel:_("Log message"),anchor:"100%",height:150,value:(this.defaultMessage)?this.defaultMessage:""}]});ui.cmp.CommitPrompt.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._DictionaryGrid");ui.cmp._DictionaryGrid.store=Ext.extend(Ext.data.Store,{proxy:new Ext.data.HttpProxy({url:"./do/getDictionaryWords"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"valueEn"},{name:"valueLang"},{name:"lastUser",hideField:true},{name:"lastDate",type:"date",dateFormat:"Y-m-d H:i:s",hideField:true}]}),sortInfo:{field:"valueEn",direction:"ASC"},listeners:{load:function(){if(!PhDOE.user.isAnonymous){Ext.getCmp(this.fid+"-btn-new-word").enable()}}},initComponent:function(c){Ext.apply(this,c);ui.cmp._DictionaryGrid.store.superclass.initComponent.call(this)}});ui.cmp._DictionaryGrid.editor=Ext.extend(Ext.ux.grid.RowEditor,{saveText:_("Update"),cancelText:_("Cancel"),listeners:{afteredit:function(e,d,c,f){XHR({params:{task:"manageDictionaryWord",wordId:c.data.id,valueEn:c.data.valueEn,valueLang:c.data.valueLang},success:function(g){var h=Ext.util.JSON.decode(g.responseText);c.set("lastUser",PhDOE.user.login);c.set("lastDate",Date.parseDate(h.dateUpdate,"Y-m-d H:i:s"));c.commit();PhDOE.notify("info",_("Word in dictionary added/updated"),_("The word have been added/updated successfully !"))},failure:function(){PhDOE.winForbidden()}})},canceledit:function(c){if(c.record.data.id==="new"){c.record.store.remove(c.record)}}}});ui.cmp._DictionaryGrid.sm=Ext.extend(Ext.grid.RowSelectionModel,{singleSelect:true});ui.cmp._DictionaryGrid.viewConfig={forceFit:true,emptyText:'
'+_("You must manually load this data.
Use the refresh button !")+"
",deferEmptyText:false};ui.cmp._DictionaryGrid.menu=Ext.extend(Ext.menu.Menu,{setRowIdx:function(c){this.rowIdx=c},initComponent:function(){Ext.apply(this,{items:[{scope:this,text:_("Delete this word"),iconCls:"iconTrash",disabled:(PhDOE.user.isAnonymous),handler:function(){XHR({scope:this,params:{task:"delDictionaryWord",wordId:this.grid.store.getAt(this.rowIdx).data.id},success:function(){this.grid.store.remove(this.grid.store.getAt(this.rowIdx));PhDOE.notify("info",_("Word deleted"),_("The word was deleted successfully !"))},failure:function(){PhDOE.winForbidden()}})}}]});ui.cmp._DictionaryGrid.menu.superclass.initComponent.call(this)}});ui.cmp._DictionaryGrid.grid=Ext.extend(Ext.grid.GridPanel,{onRowContextMenu:function(c,f,d){d.stopEvent();this.getSelectionModel().selectRow(f);if(!this.menu){this.menu=new ui.cmp._DictionaryGrid.menu({grid:c})}this.menu.setRowIdx(f);this.menu.showAt(d.getXY())},initComponent:function(){Ext.apply(this,{region:"center",split:true,loadMask:true,autoScroll:true,bodyBorder:false,border:false,autoExpandColumn:this.dataType,columns:[{id:"id",header:_("En word"),sortable:true,dataIndex:"valueEn",editor:{xtype:"textfield"}},{header:String.format(_("{0} word"),PhDOE.user.lang.ucFirst()),sortable:true,dataIndex:"valueLang",editor:{xtype:"textfield"}},{header:_("Last User Update"),sortable:true,dataIndex:"lastUser",editor:{xtype:"displayfield",hideField:true}},{header:_("Last Date Update"),sortable:true,dataIndex:"lastDate",editor:{xtype:"displayfield",hideField:true},renderer:Ext.util.Format.dateRenderer(_("Y-m-d, H:i"))}],viewConfig:ui.cmp._DictionaryGrid.viewConfig,sm:new ui.cmp._DictionaryGrid.sm(),store:new ui.cmp._DictionaryGrid.store({fid:this.fid}),plugins:[new ui.cmp._DictionaryGrid.editor()],tbar:[{scope:this,tooltip:_("Load/Refresh"),iconCls:"iconRefresh",handler:function(){this.store.reload()}},"->",{scope:this,id:this.fid+"-btn-new-word",disabled:true,text:_("Add a new word"),iconCls:"iconNewWord",handler:function(){var c=Ext.data.Record.create([{name:"id"},{name:"valueEn"},{name:"valueLang"},{name:"lastUser"},{name:"lastDate"}]),d=new Date(),f=new c({id:"new",valueEn:"",valueLang:"",lastUser:PhDOE.user.login,lastDate:d});this.plugins[0].stopEditing();this.store.insert(0,f);this.getView().refresh();this.getSelectionModel().selectRow(0);this.plugins[0].startEditing(0)}}]});ui.cmp._DictionaryGrid.grid.superclass.initComponent.call(this);this.on("rowcontextmenu",this.onRowContextMenu,this)}});ui.cmp.DictionaryGrid=Ext.extend(Ext.Panel,{initComponent:function(){Ext.apply(this,{layout:"border",border:false,items:[new ui.cmp._DictionaryGrid.grid({dataType:this.dataType,prefix:this.prefix,fid:this.fid,ftype:this.ftype,loadStore:this.loadStore})]});ui.cmp.DictionaryGrid.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._EditorConf","ui.cmp._EditorCmd2Conf");ui.cmp._EditorConf.tplMenu=new Ext.XTemplate('','","");ui.cmp._EditorConf.tplMenu.compile();ui.cmp._EditorConf.menuDefEn=[["1","card1",_("Main")],["4","card4",_('Module "Files with error"')],["6","card6",_('Module "All files"')]];ui.cmp._EditorConf.menuDefNonEn=[["1","card1",_("Main")],["2","card2",_('Module "Files need translate"')],["3","card3",_('Module "Files need update"')],["4","card4",_('Module "Files with error"')],["5","card5",_('Module "Files need reviewed"')],["6","card6",_('Module "All files"')]];ui.cmp._EditorConf.menuStore=new Ext.data.SimpleStore({id:0,fields:[{name:"id"},{name:"card"},{name:"label"}]});ui.cmp._EditorConf.viewMenu=Ext.extend(Ext.DataView,{id:"conf-menu-view",tpl:ui.cmp._EditorConf.tplMenu,singleSelect:true,overClass:"x-view-over",itemSelector:"div.menu-wrap",store:ui.cmp._EditorConf.menuStore,listeners:{selectionchange:function(c){var d=c.getSelectedRecords();Ext.getCmp("confCard").layout.setActiveItem("conf-card-"+d[0].data.id)}}});ui.cmp._EditorCmd2Conf.themeStore=new Ext.data.SimpleStore({fields:["themeFile",{name:"themeName",type:"string"}],data:[[false,_("No theme")],["default",_("Default theme")],["cobalt",_("Cobalt")],["eclipse",_("Eclipse")],["elegant",_("Elegant")],["monokai",_("Monokai")],["neat",_("Neat")],["night",_("Night")],["rubyblue",_("RubyBlue")]]});ui.cmp._EditorConf.themeStore=new Ext.data.SimpleStore({fields:["themeFile",{name:"themeName",type:"string"}],data:[["themes/ExtJsThemes/black/css/xtheme-black.css",_("Black")],["themes/empty.css",_("Default")],["themes/ExtJsThemes/darkgray/css/xtheme-darkgray.css",_("DarkGray")],["js/ExtJs/resources/css/xtheme-gray.css",_("Gray")],["themes/ExtJsThemes/gray-extend/css/xtheme-gray-extend.css",_("Gray Extend")],["themes/ExtJsThemes/indigo/css/xtheme-indigo.css",_("Indigo")],["themes/ExtJsThemes/midnight/css/xtheme-midnight.css",_("Midnight")],["themes/ExtJsThemes/olive/css/xtheme-olive.css",_("Olive")],["themes/ExtJsThemes/purple/css/xtheme-purple.css",_("Purple")],["themes/ExtJsThemes/silverCherry/css/xtheme-silverCherry.css",_("SilverCherry")],["themes/ExtJsThemes/ubuntu_human/css/xtheme-human.css",_("Ubuntu Human")]]});ui.cmp._EditorConf.uiLangStore=new Ext.data.SimpleStore({fields:["uiLang",{name:"uiLangName",type:"string"}],data:[["default",_("Default language, if available")],["en",_("English")],["fr",_("French")],["ru",_("Russian")],["es",_("Spanish")],["ar",_("Arabic")]]});ui.cmp._EditorConf.CommitChange=new Ext.util.DelayedTask(function(){new ui.task.UpdateConfTask({module:this.module,itemName:this.itemName,value:this.getValue()})});ui.cmp._EditorConf.card1=Ext.extend(Ext.TabPanel,{id:"conf-card-1",autoScroll:true,activeTab:0,defaults:{bodyStyle:"padding: 5px;",autoHeight:true,autoScroll:true},initComponent:function(){Ext.apply(this,{items:[{title:_("User Interface"),iconCls:"iconUI",labelAlign:"top",layout:"form",items:[{xtype:"fieldset",title:_("Main menu"),iconCls:"iconMenu",items:[{xtype:"spinnerfield",width:60,name:"PhDOE.user.conf.main.mainMenuWidth",module:"main",itemName:"mainMenuWidth",value:PhDOE.user.conf.main.mainMenuWidth||300,fieldLabel:_("Main menu width"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){var c=Ext.getCmp("main-menu-panel"),d=this.getValue();PhDOE.user.conf.main.mainMenuWidth=d;c.setWidth(d);c.ownerCt.doLayout();ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){var c=Ext.getCmp("main-menu-panel"),d=this.getValue();PhDOE.user.conf.main.mainMenuWidth=d;c.setWidth(d);c.ownerCt.doLayout();ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}}]},{xtype:"fieldset",iconCls:"iconThemes",title:_("Appearance"),items:[{xtype:"combo",fieldLabel:_("Choose a theme"),id:"conf-combo-theme",valueField:"themeFile",displayField:"themeName",triggerAction:"all",mode:"local",forceSelection:true,editable:false,value:PhDOE.user.conf.main.theme,store:ui.cmp._EditorConf.themeStore,listeners:{render:function(){Ext.getCmp("conf-combo-theme").store.sort("themeName")},select:function(e){var d=e.getValue();Ext.get("appTheme").dom.href=d;new ui.task.UpdateConfTask({module:"main",itemName:"theme",value:d})}}},{xtype:"combo",fieldLabel:_("Force an UI language"),id:"conf-combo-ui-lang",valueField:"uiLang",displayField:"uiLangName",triggerAction:"all",mode:"local",forceSelection:true,editable:false,value:PhDOE.user.conf.main.uiLang||"default",store:ui.cmp._EditorConf.uiLangStore,listeners:{select:function(e){var d=e.getValue();new ui.task.UpdateConfTask({module:"main",itemName:"uiLang",value:d})}}}]},{xtype:"fieldset",title:_("On save file"),iconCls:"iconSaveFile",autoHeight:true,defaults:{hideLabel:true},defaultType:"radio",items:[{autoHeight:true,name:"PhDOE.user.conf.main.onSaveFile",module:"main",itemName:"onSaveFile",checked:(PhDOE.user.conf.main.onSaveFile==="ask-me")?true:false,boxLabel:_("Ask me if I want to check for error before saving the file"),inputValue:"ask-me",listeners:{check:function(c){if(c.checked){new ui.task.UpdateConfTask({module:"main",itemName:"onSaveFile",value:c.getRawValue()})}}}},{autoHeight:true,name:"PhDOE.user.conf.main.onSaveFile",module:"main",itemName:"onSaveFile",checked:(PhDOE.user.conf.main.onSaveFile==="always")?true:false,boxLabel:_("Always check for error before saving the file"),inputValue:"always",listeners:{check:function(c){if(c.checked){new ui.task.UpdateConfTask({module:"main",itemName:"onSaveFile",value:c.getRawValue()})}}}},{autoHeight:true,name:"PhDOE.user.conf.main.onSaveFile",module:"main",itemName:"onSaveFile",checked:(PhDOE.user.conf.main.onSaveFile==="never")?true:false,boxLabel:_("Never check for error before saving the file"),inputValue:"never",listeners:{check:function(c){if(c.checked){new ui.task.UpdateConfTask({module:"main",itemName:"onSaveFile",value:c.getRawValue()})}}}}]},{xtype:"checkbox",name:"PhDOE.user.conf.main.displayENWork",checked:PhDOE.user.conf.main.displayENWork,boxLabel:_('Display EN work in "Work in progress" & "Patches for review" modules'),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"main",itemName:"displayENWork",value:c.getValue()})}}}]},{title:_("External Data"),iconCls:"iconExternalData",items:[{xtype:"fieldset",title:_("About mails"),iconCls:"iconMailing",defaults:{hideLabel:true},defaultType:"checkbox",items:[{autoHeight:true,name:"PhDOE.user.conf.main.loadMailsAtStartUp",checked:PhDOE.user.conf.main.loadMailsAtStartUp,boxLabel:_("Load mail at startUp"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"main",itemName:"loadMailsAtStartUp",value:c.getValue()})}}}]},{xtype:"fieldset",title:_("About bugs"),iconCls:"iconBugs",defaults:{hideLabel:true},defaultType:"checkbox",items:[{autoHeight:true,name:"PhDOE.user.conf.main.loadBugsAtStartUp",checked:PhDOE.user.conf.main.loadBugsAtStartUp,boxLabel:_("Load bugs at startUp"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"main",itemName:"loadBugsAtStartUp",value:c.getValue()})}}}]}]},{title:_("Editor"),iconCls:"iconEditor",items:[{xtype:"fieldset",title:_("Editor theme"),iconCls:"iconThemes",items:[{xtype:"combo",fieldLabel:_("Choose a theme"),id:"conf-combo-cm2-theme",valueField:"themeFile",displayField:"themeName",triggerAction:"all",mode:"local",forceSelection:true,editable:false,value:(PhDOE.user.conf.main.editorTheme||"default"),store:ui.cmp._EditorCmd2Conf.themeStore,listeners:{select:function(e){var d=e.getValue();new ui.task.UpdateConfTask({module:"main",itemName:"editorTheme",value:d})}}}]}]}]});ui.cmp._EditorConf.card1.superclass.initComponent.call(this)}});ui.cmp._EditorConf.card2=Ext.extend(Ext.TabPanel,{id:"conf-card-2",autoScroll:true,activeTab:0,defaults:{bodyStyle:"padding: 5px;",autoHeight:true,autoScroll:true},initComponent:function(){Ext.apply(this,{items:[{title:_("Menu"),iconCls:"iconMenu",items:[{xtype:"fieldset",title:_("Nb files to display"),iconCls:"iconFilesToDisplay",defaults:{hideLabel:true},items:[{xtype:"spinnerfield",width:60,name:"PhDOE.user.conf.newFile.nbDisplay",module:"newFile",itemName:"nbDisplay",value:PhDOE.user.conf.newFile.nbDisplay||0,boxLabel:_("files to display"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}},{xtype:"displayfield",value:_("0 means no limit"),style:{fontStyle:"italic"}}]}]},{title:_("User Interface"),iconCls:"iconUI",items:[{xtype:"fieldset",title:_("ScrollBars"),iconCls:"iconScrollBar",defaults:{hideLabel:true},defaultType:"checkbox",items:[{name:"PhDOE.user.conf.newFile.syncScrollbars",checked:PhDOE.user.conf.newFile.syncScrollbars,boxLabel:_("Synchronize scroll bars"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"newFile",itemName:"syncScrollbars",value:c.getValue()})}}}]},{xtype:"fieldset",title:_("Tools"),iconCls:"iconConf",defaults:{hideLabel:true},defaultType:"checkbox",items:[{xtype:"fieldset",checkboxToggle:true,collapsed:!PhDOE.user.conf.newFile.toolsPanelDisplay,title:_("Start with the panel open"),listeners:{collapse:function(){new ui.task.UpdateConfTask({module:"newFile",itemName:"toolsPanelDisplay",value:false})},expand:function(){new ui.task.UpdateConfTask({module:"newFile",itemName:"toolsPanelDisplay",value:true})}},items:[{xtype:"spinnerfield",width:60,name:"newFile.toolsPanelWidth",module:"newFile",itemName:"toolsPanelWidth",value:PhDOE.user.conf.newFile.toolsPanelWidth||375,fieldLabel:_("Panel width"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}}]}]},{xtype:"fieldset",title:_("Right panel"),iconCls:"iconUI",defaults:{hideLabel:true},defaultType:"radio",items:[{name:"PhDOE.user.conf.newFile.secondPanel",boxLabel:_("Display the original file"),inputValue:"originalFile",checked:(PhDOE.user.conf.newFile.secondPanel==="originalFile")?true:false,listeners:{check:function(c){if(c.checked){new ui.task.UpdateConfTask({module:"newFile",itemName:"secondPanel",value:c.getRawValue()})}}}},{name:"PhDOE.user.conf.newFile.secondPanel",boxLabel:_("Do not display a right panel"),inputValue:"none",checked:(!Ext.isDefined(PhDOE.user.conf.newFile.secondPanel)||PhDOE.user.conf.newFile.secondPanel==="none")?true:false,listeners:{check:function(c){if(c.checked){new ui.task.UpdateConfTask({module:"newFile",itemName:"secondPanel",value:c.getRawValue()})}}}}]}]}]});ui.cmp._EditorConf.card2.superclass.initComponent.call(this)}});ui.cmp._EditorConf.card3=Ext.extend(Ext.TabPanel,{id:"conf-card-3",autoScroll:true,activeTab:0,defaults:{bodyStyle:"padding: 5px;",autoHeight:true,autoScroll:true},initComponent:function(){Ext.apply(this,{items:[{title:_("Menu"),iconCls:"iconMenu",items:[{xtype:"fieldset",title:_("Nb files to display"),iconCls:"iconFilesToDisplay",defaults:{hideLabel:true},defaultType:"spinnerfield",items:[{width:60,name:"PhDOE.user.conf.needUpdate.nbDisplay",module:"needUpdate",itemName:"nbDisplay",value:PhDOE.user.conf.needUpdate.nbDisplay||0,boxLabel:_("files to display"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}},{xtype:"displayfield",value:_("0 means no limit"),style:{fontStyle:"italic"}}]}]},{title:_("User Interface"),iconCls:"iconUI",items:[{xtype:"fieldset",title:_("ScrollBars"),iconCls:"iconScrollBar",defaults:{hideLabel:true},defaultType:"checkbox",items:[{name:"needUpdate.syncScrollbars",checked:PhDOE.user.conf.needUpdate.syncScrollbars,boxLabel:_("Synchronize scroll bars"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"syncScrollbars",value:c.getValue()})}}}]},{xtype:"fieldset",title:_("Tools"),iconCls:"iconConf",defaults:{hideLabel:true},defaultType:"checkbox",items:[{name:"needUpdate.toolsPanelLogLoad",checked:PhDOE.user.conf.needUpdate.toolsPanelLogLoad,boxLabel:_("Automatically load the log when displaying the file"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"toolsPanelLogLoad",value:c.getValue()})}}},{xtype:"fieldset",checkboxToggle:true,collapsed:!PhDOE.user.conf.needUpdate.toolsPanelDisplay,title:_("Start with the panel open"),listeners:{collapse:function(){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"toolsPanelDisplay",value:false})},expand:function(){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"toolsPanelDisplay",value:true})}},items:[{xtype:"spinnerfield",width:60,name:"needUpdate.toolsPanelWidth",module:"needUpdate",itemName:"toolsPanelWidth",value:PhDOE.user.conf.needUpdate.toolsPanelWidth||375,fieldLabel:_("Panel width"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}}]}]},{xtype:"fieldset",title:_("Diff view"),iconCls:"iconDiffView",defaults:{hideLabel:true},defaultType:"radio",items:[{xtype:"fieldset",checkboxToggle:true,collapsed:!PhDOE.user.conf.needUpdate.diffPanelDisplay,title:_("Start with the panel open"),listeners:{collapse:function(){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"diffPanelDisplay",value:false})},expand:function(){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"diffPanelDisplay",value:true})}},items:[{xtype:"spinnerfield",width:60,name:"needUpdate.diffPanelHeight",module:"needUpdate",itemName:"diffPanelHeight",value:PhDOE.user.conf.needUpdate.diffPanelHeight||150,fieldLabel:_("Panel height"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}}]},{name:"needUpdate.diffMethod",checked:(PhDOE.user.conf.needUpdate.diffMethod==="using-viewvc")?true:false,boxLabel:_("Using ViewVc from php web site"),inputValue:"using-viewvc",listeners:{check:function(c){if(c.checked){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"diffMethod",value:c.getRawValue()})}}}},{name:"needUpdate.diffMethod",checked:(PhDOE.user.conf.needUpdate.diffMethod==="using-exec")?true:false,boxLabel:_("Using diff -u command line"),inputValue:"using-exec",listeners:{check:function(c){if(c.checked){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"diffMethod",value:c.getRawValue()})}}}}]}]}]});ui.cmp._EditorConf.card3.superclass.initComponent.call(this)}});ui.cmp._EditorConf.card4=Ext.extend(Ext.TabPanel,{id:"conf-card-4",autoScroll:true,activeTab:0,defaults:{bodyStyle:"padding: 5px;",autoHeight:true,autoScroll:true},initComponent:function(){Ext.apply(this,{items:[{title:_("Menu"),iconCls:"iconMenu",items:[{xtype:"fieldset",title:_("Nb files to display"),iconCls:"iconFilesToDisplay",defaults:{hideLabel:true},defaultType:"spinnerfield",items:[{width:60,name:"PhDOE.user.conf.error.nbDisplay",module:"error",itemName:"nbDisplay",value:PhDOE.user.conf.error.nbDisplay||0,boxLabel:_("files to display"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}},{xtype:"displayfield",value:_("0 means no limit"),style:{fontStyle:"italic"}}]},{hidden:(PhDOE.user.lang==="en"),xtype:"fieldset",title:_("Error type"),iconCls:"iconFilesError",defaults:{hideLabel:true},defaultType:"checkbox",items:[{name:"error.skipNbLiteralTag",checked:PhDOE.user.conf.error.skipNbLiteralTag,boxLabel:_("Skip nbLiteralTag error"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"error",itemName:"skipNbLiteralTag",value:c.getValue()})}}}]}]},{title:_("User Interface"),iconCls:"iconUI",items:[{xtype:"fieldset",title:_("ScrollBars"),iconCls:"iconScrollBar",defaults:{hideLabel:true},defaultType:"checkbox",items:[{name:"error.syncScrollbars",checked:PhDOE.user.conf.error.syncScrollbars,boxLabel:_("Synchronize scroll bars"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"error",itemName:"syncScrollbars",value:c.getValue()})}}}]},{xtype:"fieldset",title:_("Tools"),iconCls:"iconConf",defaults:{hideLabel:true},defaultType:"checkbox",items:[{name:"error.toolsPanelLogLoad",checked:PhDOE.user.conf.error.toolsPanelLogLoad,boxLabel:_("Automatically load the log when displaying the file"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"error",itemName:"toolsPanelLogLoad",value:c.getValue()})}}},{name:"error.toolsPanelEntitiesLoad",checked:PhDOE.user.conf.error.toolsPanelEntitiesLoad,boxLabel:_("Automatically load entities data when displaying the file"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"error",itemName:"toolsPanelEntitiesLoad",value:c.getValue()})}}},{name:"error.toolsPanelAcronymsLoad",checked:PhDOE.user.conf.error.toolsPanelAcronymsLoad,boxLabel:_("Automatically load acronyms data when displaying the file"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"error",itemName:"toolsPanelAcronymsLoad",value:c.getValue()})}}},{xtype:"fieldset",checkboxToggle:true,collapsed:!PhDOE.user.conf.error.toolsPanelDisplay,title:_("Start with the panel open"),listeners:{collapse:function(){new ui.task.UpdateConfTask({module:"error",itemName:"toolsPanelDisplay",value:false})},expand:function(){new ui.task.UpdateConfTask({module:"error",itemName:"toolsPanelDisplay",value:true})}},items:[{xtype:"spinnerfield",width:60,name:"error.toolsPanelWidth",module:"error",itemName:"toolsPanelWidth",value:PhDOE.user.conf.error.toolsPanelWidth||375,fieldLabel:_("Panel width"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}}]}]},{xtype:"fieldset",title:_("Error description"),iconCls:"iconFilesError",defaults:{hideLabel:true},defaultType:"radio",items:[{xtype:"fieldset",checkboxToggle:true,collapsed:!PhDOE.user.conf.error.descPanelDisplay,title:_("Start with the panel open"),listeners:{collapse:function(){new ui.task.UpdateConfTask({module:"error",itemName:"descPanelDisplay",value:false})},expand:function(){new ui.task.UpdateConfTask({module:"error",itemName:"descPanelDisplay",value:true})}},items:[{xtype:"spinnerfield",width:60,name:"error.descPanelHeight",module:"error",itemName:"descPanelHeight",value:PhDOE.user.conf.error.descPanelHeight||150,fieldLabel:_("Panel height"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}}]}]}]}]});ui.cmp._EditorConf.card4.superclass.initComponent.call(this)}});ui.cmp._EditorConf.card5=Ext.extend(Ext.TabPanel,{id:"conf-card-5",autoScroll:true,activeTab:0,defaults:{bodyStyle:"padding: 5px;",autoHeight:true,autoScroll:true},initComponent:function(){Ext.apply(this,{items:[{title:_("Menu"),iconCls:"iconMenu",items:[{xtype:"fieldset",title:_("Nb files to display"),iconCls:"iconFilesToDisplay",defaults:{hideLabel:true},defaultType:"spinnerfield",items:[{width:60,name:"reviewed.nbDisplay",module:"reviewed",itemName:"nbDisplay",value:PhDOE.user.conf.reviewed.nbDisplay||0,boxLabel:_("files to display"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}},{xtype:"displayfield",value:_("0 means no limit"),style:{fontStyle:"italic"}}]}]},{title:_("User Interface"),iconCls:"iconUI",items:[{xtype:"fieldset",title:_("ScrollBars"),iconCls:"iconScrollBar",defaults:{hideLabel:true},defaultType:"checkbox",items:[{name:"reviewed.syncScrollbars",checked:PhDOE.user.conf.reviewed.syncScrollbars,boxLabel:_("Synchronize scroll bars"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"reviewed",itemName:"syncScrollbars",value:c.getValue()})}}}]},{xtype:"fieldset",title:_("Tools"),iconCls:"iconConf",defaults:{hideLabel:true},defaultType:"checkbox",items:[{name:"reviewed.toolsPanelLogLoad",checked:PhDOE.user.conf.reviewed.toolsPanelLogLoad,boxLabel:_("Automatically load the log when displaying the file"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"reviewed",itemName:"toolsPanelLogLoad",value:c.getValue()})}}},{xtype:"fieldset",checkboxToggle:true,collapsed:!PhDOE.user.conf.reviewed.toolsPanelDisplay,title:_("Start with the panel open"),listeners:{collapse:function(){new ui.task.UpdateConfTask({module:"reviewed",itemName:"toolsPanelDisplay",value:false})},expand:function(){new ui.task.UpdateConfTask({module:"reviewed",itemName:"toolsPanelDisplay",value:true})}},items:[{xtype:"spinnerfield",width:60,name:"reviewed.toolsPanelWidth",module:"reviewed",itemName:"toolsPanelWidth",value:PhDOE.user.conf.reviewed.toolsPanelWidth||375,fieldLabel:_("Panel width"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}}]}]}]}]});ui.cmp._EditorConf.card5.superclass.initComponent.call(this)}});ui.cmp._EditorConf.card6=Ext.extend(Ext.TabPanel,{id:"conf-card-6",autoScroll:true,activeTab:0,defaults:{bodyStyle:"padding: 5px;",autoHeight:true,autoScroll:true},initComponent:function(){Ext.apply(this,{items:[{title:_("User Interface"),iconCls:"iconUI",items:[{xtype:"fieldset",title:_("Tools"),iconCls:"iconConf",defaults:{hideLabel:true},defaultType:"checkbox",items:[{name:"allFiles.toolsPanelLogLoad",checked:PhDOE.user.conf.allFiles.toolsPanelLogLoad,boxLabel:_("Automatically load the log when displaying the file"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"allFiles",itemName:"toolsPanelLogLoad",value:c.getValue()})}}},{name:"allFiles.toolsPanelEntitiesLoad",checked:PhDOE.user.conf.allFiles.toolsPanelEntitiesLoad,boxLabel:_("Automatically load entities data when displaying the file"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"allFiles",itemName:"toolsPanelEntitiesLoad",value:c.getValue()})}}},{name:"allFiles.toolsPanelAcronymsLoad",checked:PhDOE.user.conf.allFiles.toolsPanelAcronymsLoad,boxLabel:_("Automatically load acronyms data when displaying the file"),listeners:{check:function(c){new ui.task.UpdateConfTask({module:"allFiles",itemName:"toolsPanelAcronymsLoad",value:c.getValue()})}}},{xtype:"fieldset",checkboxToggle:true,collapsed:!PhDOE.user.conf.allFiles.toolsPanelDisplay,title:_("Start with the panel open"),listeners:{collapse:function(){new ui.task.UpdateConfTask({module:"allFiles",itemName:"toolsPanelDisplay",value:false})},expand:function(){new ui.task.UpdateConfTask({module:"allFiles",itemName:"toolsPanelDisplay",value:true})}},items:[{xtype:"spinnerfield",width:60,name:"allFiles.toolsPanelWidth",module:"allFiles",itemName:"toolsPanelWidth",value:PhDOE.user.conf.allFiles.toolsPanelWidth||375,fieldLabel:_("Panel width"),minValue:0,maxValue:10000,accelerate:true,enableKeyEvents:true,listeners:{keyup:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)},spin:function(){ui.cmp._EditorConf.CommitChange.delay(1000,null,this)}}}]}]}]}]});ui.cmp._EditorConf.card6.superclass.initComponent.call(this)}});ui.cmp.EditorConf=Ext.extend(Ext.Window,{id:"win-conf",layout:"border",width:700,height:470,iconCls:"iconConf",title:_("Configuration"),modal:true,plain:true,bodyBorder:false,closeAction:"hide",buttons:[{text:_("Close"),handler:function(){Ext.getCmp("win-conf").hide()}}],listeners:{show:function(){var c=Ext.getCmp("conf-menu-view");c.select(c.getNode(0))}},initComponent:function(){if(PhDOE.user.lang==="en"){ui.cmp._EditorConf.menuStore.loadData(ui.cmp._EditorConf.menuDefEn)}else{ui.cmp._EditorConf.menuStore.loadData(ui.cmp._EditorConf.menuDefNonEn)}Ext.apply(this,{items:[{id:"confMenu",region:"west",border:false,width:190,autoScroll:true,items:[new ui.cmp._EditorConf.viewMenu()]},{id:"confCard",region:"center",border:false,layout:"card",width:375,frame:true,activeItem:0,bbar:new Ext.ux.StatusBar({defaultText:_("All changes take effect immediately"),defaultIconCls:"confStatusBar"}),items:[new ui.cmp._EditorConf.card1(),new ui.cmp._EditorConf.card2(),new ui.cmp._EditorConf.card3(),new ui.cmp._EditorConf.card4(),new ui.cmp._EditorConf.card5(),new ui.cmp._EditorConf.card6()]}]});ui.cmp.EditorConf.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._EmailPrompt");ui.cmp.EmailPrompt=Ext.extend(Ext.Window,{title:_("Send an email"),width:500,height:300,minWidth:300,minHeight:200,layout:"fit",plain:true,bodyStyle:"padding:5px;",buttonAlign:"center",iconCls:"iconSendEmail",closeAction:"hide",buttons:[{text:_("Send"),handler:function(){var d=this.ownerCt.ownerCt,c=d.findByType("form").shift().getForm().getValues();XHR({params:{task:"sendEmail",to:c.to,subject:c.subject,msg:c.msg},success:function(){d.hide();Ext.Msg.alert(_("Status"),String.format(_("Email sent to {0} with success!"),d.name.ucFirst()),Ext.emptyFn)},failure:function(){PhDOE.winForbidden()}})}},{text:_("Cancel"),handler:function(){this.ownerCt.ownerCt.hide()}}],setData:function(d,c){this.name=d;this.email=c;this.items.items[0].items.items[0].setValue('"'+this.name.ucFirst()+'" <'+this.email+">");this.items.items[0].items.items[1].setValue("");this.items.items[0].items.items[2].setValue("")},initComponent:function(){Ext.apply(this,{items:new Ext.form.FormPanel({baseCls:"x-plain",labelWidth:55,defaultType:"textfield",items:[{name:"to",fieldLabel:_("Send To"),readOnly:true,anchor:"100%",value:""},{name:"subject",fieldLabel:_("Subject"),anchor:"100%"},{name:"msg",xtype:"textarea",hideLabel:true,anchor:"100% -53"}]})});ui.cmp.EmailPrompt.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._EntitiesAcronymsPanel");ui.cmp._EntitiesAcronymsPanel.grid=Ext.extend(Ext.grid.GridPanel,{onRowClick:function(c){var d=c.getSelectionModel().getSelected().data;Ext.getCmp(this.dataType+"-details-"+this.fid).update(d.value)},onRowDblClick:function(d){var f=d.getSelectionModel().getSelected().data,e=Ext.getCmp(this.prefix+"-"+this.ftype+"-FILE-"+this.fid),c=Ext.util.JSON.decode(e.getCursorPosition()),g=(this.dataType==="entities")?"&"+f.items+";":""+f.items+"";e.insertIntoLine(c.line,c.caracter,g)},initComponent:function(){var c;if(this.dataType==="entities"){c="./do/getEntities"}else{if(this.dataType==="acronyms"){c="./do/getAcronyms"}}Ext.apply(this,{region:"center",split:true,loadMask:true,autoScroll:true,bodyBorder:false,border:false,autoExpandColumn:this.dataType,columns:[{id:"items",header:_("Items"),sortable:true,dataIndex:"items"},{header:_("From"),sortable:true,dataIndex:"from",width:50}],viewConfig:{forceFit:true,emptyText:'
'+_("You must manually load this data.
Use the refresh button !")+"

"+_("(You can change this behavior by setting an option in the configuration window)")+"
",deferEmptyText:false},sm:new Ext.grid.RowSelectionModel({singleSelect:true}),store:new Ext.data.Store({autoLoad:this.loadStore,proxy:new Ext.data.HttpProxy({url:c}),listeners:{scope:this,load:function(){if(this.dataType==="entities"){Ext.getCmp(this.prefix+"-"+this.fid).panEntities=true}else{if(this.dataType==="acronyms"){Ext.getCmp(this.prefix+"-"+this.fid).panAcronyms=true}}Ext.getCmp("main-panel").fireEvent("tabLoaded",this.prefix,this.fid)}},reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"from"},{name:"items"},{name:"value"}]})}),tbar:[{scope:this,tooltip:_("Load/Refresh"),iconCls:"iconRefresh",handler:function(){this.store.reload()}},_("Filter: ")," ",new Ext.form.TwinTriggerField({width:180,hideTrigger1:true,enableKeyEvents:true,validateOnBlur:false,validationEvent:false,trigger1Class:"x-form-clear-trigger",trigger2Class:"x-form-search-trigger",listeners:{specialkey:function(d,g){if(g.getKey()===g.ENTER){this.onTrigger2Click()}}},onTrigger1Click:function(){this.setValue("");this.triggers[0].hide();this.setSize(180,10);this.ownerCt.ownerCt.store.clearFilter()},onTrigger2Click:function(){var d=this.getValue(),e;if(d===""||d.length<3){this.markInvalid(_("Your filter must contain at least 3 characters"));return}this.clearInvalid();this.triggers[0].show();this.setSize(180,10);e=new RegExp(d,"i");this.ownerCt.ownerCt.store.filterBy(function(f){if(e.test(f.data.from)||e.test(f.data.items)||e.test(f.data.value)){return true}else{return false}},this)}})]});ui.cmp._EntitiesAcronymsPanel.grid.superclass.initComponent.call(this);this.on("rowclick",this.onRowClick,this);this.on("rowdblclick",this.onRowDblClick,this)}});ui.cmp.EntitiesAcronymsPanel=Ext.extend(Ext.Panel,{initComponent:function(){var c;if(this.dataType==="entities"){c=_("Click on a row to display the content of the entitie.
Double-click on it to insert it at the cursor position.")}else{if(this.dataType==="acronyms"){c=_("Click on a row to display the content of the acronym.
Double-click on it to insert it at the cursor position.")}}Ext.apply(this,{layout:"border",border:false,items:[new ui.cmp._EntitiesAcronymsPanel.grid({dataType:this.dataType,prefix:this.prefix,fid:this.fid,ftype:this.ftype,loadStore:this.loadStore}),{xtype:"panel",id:this.dataType+"-details-"+this.fid,region:"south",split:true,height:100,autoScroll:true,bodyBorder:false,bodyCssClass:this.dataType+"-details",html:c}]});ui.cmp.EntitiesAcronymsPanel.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._ErrorFileGrid");ui.cmp._ErrorFileGrid.store=new Ext.data.GroupingStore({proxy:new Ext.data.HttpProxy({url:"./do/getFilesError"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"path"},{name:"name"},{name:"maintainer"},{name:"type"},{name:"value_en"},{name:"value_lang"},{name:"fileModifiedEN"},{name:"fileModifiedLang"}]}),sortInfo:{field:"path",direction:"ASC"},groupField:"path",listeners:{datachanged:function(e){var c=e.getCount(),d=false;if(!PhDOE.user.isAnonymous){e.each(function(f){if(f.data.maintainer==PhDOE.user.login){d++}},this)}Ext.getDom("acc-error-nb").innerHTML=c+(d?(" - "+String.format(_("{0} mine"),d)):"")}}});ui.cmp._ErrorFileGrid.columns=[{id:"name",header:_("Files"),sortable:true,dataIndex:"name",renderer:function(c,f,d){var h="",g,e;if(d.data.fileModifiedEN){g=Ext.util.JSON.decode(d.data.fileModifiedEN);if(g.user===PhDOE.user.login&&g.anonymousIdent===PhDOE.user.anonymousIdent){h=_("File EN modified by me")+"
"}else{h=String.format(_("File EN modified by {0}"),g.user)+"
"}}if(d.data.fileModifiedLang){e=Ext.util.JSON.decode(d.data.fileModifiedLang);if(e.user===PhDOE.user.login&&e.anonymousIdent===PhDOE.user.anonymousIdent){h+=String.format(_("File {0} modified by me"),PhDOE.user.lang.ucFirst())}else{h+=String.format(_("File {0} modified by {1}"),PhDOE.user.lang.ucFirst(),e.user)}}if(h!==""){return""+c+""}else{return c}}},{header:_("Type"),width:45,sortable:true,dataIndex:"type"},{header:_("Maintainer"),width:45,sortable:true,dataIndex:"maintainer"},{header:_("Path"),dataIndex:"path",hidden:true}];ui.cmp._ErrorFileGrid.view=new Ext.grid.GroupingView({emptyText:'
'+_("No Files")+"
",deferEmptyText:false,forceFit:true,startCollapsed:true,groupTextTpl:'{[values.rs[0].data.path]} ({[values.rs.length]} {[values.rs.length > 1 ? "'+_("Files")+'" : "'+_("File")+'"]})',getRowClass:function(c){if(c.data.fileModifiedEN||c.data.fileModifiedLang){var e=Ext.util.JSON.decode(c.data.fileModifiedEN),d=Ext.util.JSON.decode(c.data.fileModifiedLang);return((e.user===PhDOE.user.login&&e.anonymousIdent===PhDOE.user.anonymousIdent)||(d.user===PhDOE.user.login&&d.anonymousIdent===PhDOE.user.anonymousIdent))?"fileModifiedByMe":"fileModifiedByAnother"}return false}});ui.cmp._ErrorFileGrid.menu=function(c){Ext.apply(this,c);this.init();ui.cmp._ErrorFileGrid.menu.superclass.constructor.call(this)};Ext.extend(ui.cmp._ErrorFileGrid.menu,Ext.menu.Menu,{init:function(){Ext.apply(this,{items:[{scope:this,text:""+_("Edit in a new tab")+"",iconCls:"iconFilesError",handler:function(){this.grid.fireEvent("rowdblclick",this.grid,this.rowIdx,this.event)}},{scope:this,hidden:this.hideDiffMenu,text:_("View diff..."),iconCls:"iconViewDiff",menu:new Ext.menu.Menu({items:[{scope:this,hidden:(this.grid.store.getAt(this.rowIdx).data.fileModifiedEN===false),text:String.format(_("... of the {0} file"),"EN"),handler:function(){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",FileName:this.fname,FilePath:"en"+this.fpath})}},{scope:this,hidden:(this.grid.store.getAt(this.rowIdx).data.fileModifiedLang===false),text:String.format(_("... of the {0} file"),PhDOE.user.lang.ucFirst()),handler:function(){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",FileName:this.fname,FilePath:PhDOE.user.lang+this.fpath})}}]})},"-",{text:_("About error type"),iconCls:"iconHelp",handler:function(){if(!Ext.getCmp("main-panel").findById("FE-help")){Ext.getCmp("main-panel").add({id:"FE-help",title:_("About error type"),iconCls:"iconHelp",closable:true,autoScroll:true,autoLoad:"./error"})}Ext.getCmp("main-panel").setActiveTab("FE-help")}}]})}});ui.cmp.ErrorFileGrid=Ext.extend(Ext.grid.GridPanel,{loadMask:true,border:false,autoExpandColumn:"name",enableDragDrop:true,ddGroup:"mainPanelDDGroup",view:ui.cmp._ErrorFileGrid.view,columns:ui.cmp._ErrorFileGrid.columns,listeners:{render:function(c){c.view.refresh()}},onRowContextMenu:function(d,j,h){h.stopEvent();var g=d.store.getAt(j).data,f=g.path,c=g.name;d.getSelectionModel().selectRow(j);new ui.cmp._ErrorFileGrid.menu({hideDiffMenu:(g.fileModifiedEN===false&&g.fileModifiedLang===false),grid:d,event:h,rowIdx:j,lang:PhDOE.user.lang,fpath:f,fname:c}).showAt(h.getXY())},onRowDblClick:function(c,f,d){this.openFile(c.store.getAt(f).data.id)},openFile:function(j){var g=this.store.getById(j),f=g.data.path,c=g.data.name,h=Ext.util.md5("FE-"+PhDOE.user.lang+f+c),d=[],k,e;if(!Ext.getCmp("main-panel").findById("FE-"+h)){d=[];this.store.each(function(l){if(l.data.path===f&&l.data.name===c&&!d[l.data.type]){d.push(l.data.type)}});k=(PhDOE.user.lang==="en")?[new ui.cmp.VCSLogGrid({layout:"fit",title:String.format(_("{0} Log"),PhDOE.user.lang.ucFirst()),prefix:"FE-LANG",fid:h,fpath:PhDOE.user.lang+f,fname:c,loadStore:PhDOE.user.conf.error.toolsPanelLogLoad})]:[new ui.cmp.VCSLogGrid({layout:"fit",title:String.format(_("{0} Log"),PhDOE.user.lang.ucFirst()),prefix:"FE-LANG",fid:h,fpath:PhDOE.user.lang+f,fname:c,loadStore:PhDOE.user.conf.error.toolsPanelLogLoad}),new ui.cmp.VCSLogGrid({layout:"fit",title:String.format(_("{0} Log"),"En"),prefix:"FE-EN",fid:h,fpath:"en"+f,fname:c,loadStore:PhDOE.user.conf.error.toolsPanelLogLoad})];e=(PhDOE.user.lang==="en")?[new ui.cmp.FilePanel({id:"FE-LANG-PANEL-"+h,region:"center",title:String.format(_("{0} File: "),PhDOE.user.lang)+f+c,prefix:"FE",ftype:"LANG",spellCheck:PhDOE.user.conf.error.enableSpellCheckLang,spellCheckConf:{module:"error",itemName:"enableSpellCheckLang"},fid:h,fpath:f,fname:c,lang:PhDOE.user.lang,parser:"xml",storeRecord:g,syncScrollCB:false,syncScroll:false})]:[new ui.cmp.FilePanel({id:"FE-LANG-PANEL-"+h,region:"center",title:String.format(_("{0} File: "),PhDOE.user.lang.ucFirst())+f+c,prefix:"FE",ftype:"LANG",spellCheck:PhDOE.user.conf.error.enableSpellCheckLang,spellCheckConf:{module:"error",itemName:"enableSpellCheckLang"},fid:h,fpath:f,fname:c,lang:PhDOE.user.lang,parser:"xml",storeRecord:g,syncScrollCB:true,syncScroll:true,syncScrollConf:{module:"error",itemName:"syncScrollbars"}}),new ui.cmp.FilePanel({id:"FE-EN-PANEL-"+h,region:"east",title:_("en File: ")+f+c,prefix:"FE",ftype:"EN",original:true,readOnly:true,openInNewTabBtn:true,fid:h,fpath:f,fname:c,lang:"en",parser:"xml",storeRecord:g,syncScroll:true,syncScrollConf:{module:"error",itemName:"syncScrollbars"}})];Ext.getCmp("main-panel").add({id:"FE-"+h,title:c,layout:"border",iconCls:"iconTabError",closable:true,tabLoaded:false,panVCSLang:!PhDOE.user.conf.errorDisplayLog,panVCSEn:(PhDOE.user.lang==="en")?true:!PhDOE.user.conf.errorDisplayLog,panLANGLoaded:false,panENLoaded:(PhDOE.user.lang==="en")?true:false,originTitle:c,defaults:{split:true},tabTip:String.format(_("File with error : in {0}"),f),listeners:{resize:function(l){(PhDOE.user.lang!=="en")?Ext.getCmp("FE-EN-PANEL-"+h).setWidth(l.getWidth()/2):""}},items:[{xtype:"panel",id:"FE-error-desc-"+h,region:"north",layout:"fit",title:_("Error description"),iconCls:"iconFilesError",collapsedIconCls:"iconFilesError",plugins:[Ext.ux.PanelCollapsedTitle],height:PhDOE.user.conf.error.descPanelHeight||150,collapsible:true,collapsed:!PhDOE.user.conf.error.descPanelDisplay,autoScroll:true,autoLoad:"./error?dir="+f+"&file="+c,listeners:{collapse:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"error",itemName:"descPanelDisplay",value:false})}},expand:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"error",itemName:"descPanelDisplay",value:true})}},resize:function(o,l,m){if(this.ownerCt.tabLoaded&&m&&m>50&&m!=PhDOE.user.conf.error.descPanelHeight){new ui.task.UpdateConfTask({module:"error",itemName:"descPanelHeight",value:m})}}}},{region:"west",xtype:"panel",title:_("Tools"),iconCls:"iconConf",collapsedIconCls:"iconConf",plugins:[Ext.ux.PanelCollapsedTitle],collapsible:true,collapsed:!PhDOE.user.conf.error.toolsPanelDisplay,layout:"fit",bodyBorder:false,width:PhDOE.user.conf.error.toolsPanelWidth||375,listeners:{collapse:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"error",itemName:"toolsPanelDisplay",value:false})}},expand:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"error",itemName:"toolsPanelDisplay",value:true})}},resize:function(l,m){if(this.ownerCt.tabLoaded&&m&&m!=PhDOE.user.conf.error.toolsPanelWidth){new ui.task.UpdateConfTask({module:"error",itemName:"toolsPanelWidth",value:m})}}},items:{xtype:"tabpanel",activeTab:0,tabPosition:"bottom",enableTabScroll:true,defaults:{autoScroll:true},items:[k,new ui.cmp.DictionaryGrid({layout:"fit",title:_("Dictionary"),prefix:"FE",fid:h}),{title:_("Entities"),layout:"fit",items:[new ui.cmp.EntitiesAcronymsPanel({dataType:"entities",prefix:"FE",ftype:"LANG",fid:h,loadStore:PhDOE.user.conf.error.toolsPanelEntitiesLoad})]},{title:_("Acronyms"),layout:"fit",items:[new ui.cmp.EntitiesAcronymsPanel({dataType:"acronyms",prefix:"FE",ftype:"LANG",fid:h,loadStore:PhDOE.user.conf.error.toolsPanelAcronymsLoad})]}]}},e]})}Ext.getCmp("main-panel").setActiveTab("FE-"+h)},initComponent:function(){Ext.apply(this,{store:ui.cmp._ErrorFileGrid.store,tbar:[_("Filter: ")," ",new Ext.form.TwinTriggerField({id:"FE-filter",width:180,hideTrigger1:true,enableKeyEvents:true,validateOnBlur:false,validationEvent:false,trigger1Class:"x-form-clear-trigger",trigger2Class:"x-form-search-trigger",listeners:{keypress:function(c,d){if(d.getKey()===d.ENTER){this.onTrigger2Click()}}},onTrigger1Click:function(){this.setValue("");this.triggers[0].hide();this.setSize(180,10);ui.cmp._ErrorFileGrid.instance.store.clearFilter()},onTrigger2Click:function(){var c=this.getValue(),d;if(c===""||c.length<3){this.markInvalid(_("Your filter must contain at least 3 characters"));return}this.clearInvalid();this.triggers[0].show();this.setSize(180,10);d=new RegExp(c,"i");ui.cmp._ErrorFileGrid.instance.store.filterBy(function(e){if(d.test(e.data.path)||d.test(e.data.name)||d.test(e.data.maintainer)||d.test(e.data.type)){return true}else{return false}},this)}})]});ui.cmp.ErrorFileGrid.superclass.initComponent.call(this);this.on("rowcontextmenu",this.onRowContextMenu,this);this.on("rowdblclick",this.onRowDblClick,this);if(PhDOE.user.lang==="en"){this.getColumnModel().setHidden(2,true)}}});ui.cmp._ErrorFileGrid.instance=null;ui.cmp.ErrorFileGrid.getInstance=function(c){if(!ui.cmp._ErrorFileGrid.instance){if(!c){c={}}ui.cmp._ErrorFileGrid.instance=new ui.cmp.ErrorFileGrid(c)}return ui.cmp._ErrorFileGrid.instance};Ext.namespace("ui","ui.cmp");ui.cmp.ExecDiff=Ext.extend(Ext.Panel,{layout:"fit",title:_("Diff From VCS"),iconCls:"iconDiffView",collapsedIconCls:"iconDiffView",autoScroll:true,plugins:[Ext.ux.PanelCollapsedTitle],onRender:function(d,c){ui.cmp.ExecDiff.superclass.onRender.call(this,d,c);this.el.mask(' '+_("Loading..."));XHR({scope:this,params:{task:"getDiff",DiffType:"vcs",FilePath:"en"+this.fpath,FileName:this.fname,Rev1:this.rev1,Rev2:this.rev2},success:function(e){var f=Ext.util.JSON.decode(e.responseText);Ext.get(this.prefix+"-diff-"+this.fid).dom.innerHTML=f.content;this.el.unmask()},callback:function(){Ext.getCmp(this.prefix+"-"+this.fid).panDiffLoaded=true;Ext.getCmp("main-panel").fireEvent("tabLoaded",this.prefix,this.fid)}})},initComponent:function(){Ext.apply(this,{html:'
'});ui.cmp.ExecDiff.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._FilePanel");Ext.namespace("ui.cmp._FilePanel.tbar.menu");Ext.namespace("ui.cmp._FilePanel.tbar.items");ui.cmp._FilePanel.tbar.items.undoRedo=function(c){Ext.apply(this,c);this.init();ui.cmp._FilePanel.tbar.items.undoRedo.superclass.constructor.call(this)};Ext.extend(ui.cmp._FilePanel.tbar.items.undoRedo,Ext.ButtonGroup,{init:function(){Ext.apply(this,{id:this.id_prefix+"-FILE-"+this.fid+"-grp-undoRedo",items:[{id:this.id_prefix+"-FILE-"+this.fid+"-btn-undo",scope:this,tooltip:_("Undo"),disabled:true,iconCls:"iconUndo",handler:function(){Ext.getCmp(this.id_prefix+"-FILE-"+this.fid).undo()}},{id:this.id_prefix+"-FILE-"+this.fid+"-btn-redo",scope:this,tooltip:_("Redo"),disabled:true,iconCls:"iconRedo",handler:function(){Ext.getCmp(this.id_prefix+"-FILE-"+this.fid).redo()}}]})}});ui.cmp._FilePanel.tbar.items.usernotes=function(c){Ext.apply(this,c);this.init();ui.cmp._FilePanel.tbar.items.usernotes.superclass.constructor.call(this)};Ext.extend(ui.cmp._FilePanel.tbar.items.usernotes,Ext.ButtonGroup,{init:function(){Ext.apply(this,{items:[{xtype:"usernotes",file:this.file,fid:Ext.id()}]})}});ui.cmp._FilePanel.tbar.items.common=function(c){Ext.apply(this,c);this.init();ui.cmp._FilePanel.tbar.items.common.superclass.constructor.call(this)};Ext.extend(ui.cmp._FilePanel.tbar.items.common,Ext.ButtonGroup,{init:function(){Ext.apply(this,{items:[{scope:this,tooltip:_("Close Tab"),iconCls:"iconClose",handler:function(){Ext.getCmp("main-panel").remove(this.prefix+"-"+this.fid)}},{id:this.prefix+"-"+this.fid+"-btn-tabLeft-"+this.ftype,scope:this,tooltip:_("Go to previous tab"),iconCls:"iconArrowLeft",handler:this.goToPreviousTab},{id:this.prefix+"-"+this.fid+"-btn-tabRight-"+this.ftype,scope:this,tooltip:_("Go to next tab"),disabled:true,iconCls:"iconArrowRight",handler:this.goToNextTab}]})}});ui.cmp._FilePanel.tbar.menu.lang=function(c){Ext.apply(this,c);this.init();ui.cmp._FilePanel.tbar.menu.lang.superclass.constructor.call(this)};Ext.extend(ui.cmp._FilePanel.tbar.menu.lang,Ext.Toolbar.Button,{text:_("MarkUp"),iconCls:"iconInsertCode",init:function(){Ext.apply(this,{menu:new Ext.menu.Menu({items:[{scope:this,text:_("Reviewed tag"),handler:function(){Ext.getCmp(this.comp_id).insertLine(2,"");Ext.getCmp(this.comp_id).focus()}},{scope:this,text:_("Revcheck tag"),handler:function(){Ext.getCmp(this.comp_id).insertLine(1,"");Ext.getCmp(this.comp_id).focus()}}]})})}});ui.cmp._FilePanel.tbar.menu.en=function(c){Ext.apply(this,c);this.init();ui.cmp._FilePanel.tbar.menu.en.superclass.constructor.call(this)};Ext.extend(ui.cmp._FilePanel.tbar.menu.en,Ext.Toolbar.Button,{text:_("MarkUp"),iconCls:"iconInsertCode",init:function(){Ext.apply(this,{menu:new Ext.menu.Menu({items:[{scope:this,text:_("Description section"),handler:function(){var c=Ext.getCmp(this.comp_id).getCursor();Ext.getCmp(this.comp_id).insertLine(c.line,[' \r\n ',"&reftitle.description;\r\n ","\r\n ","\r\n ","thereturned typefunc_name\r\n ","\r\n ","param1typefirstparameter\r\n ","\r\n ",'intsecondparameter\r\n ',"\r\n ","\r\n ","\r\n ","\r\n ","The function description goes here.\r\n ","\r\n ",""].join(""));Ext.getCmp(this.comp_id).focus()}},{scope:this,text:_("Parameters section"),handler:function(){var c=Ext.getCmp(this.comp_id).getCursor();Ext.getCmp(this.comp_id).insertLine(c.line,['\r\n\r\n',"&reftitle.parameters;\r\n","\r\n","\r\n","\r\n","firstparameter\r\n","\r\n","\r\n","Its description\r\n","\r\n","\r\n","\r\n","\r\n","\r\n","secondparameter\r\n","\r\n","\r\n","\r\n","Its description\r\n","\r\n","\r\n","\r\n","\r\n","\r\n",""].join(""));Ext.getCmp(this.comp_id).focus()}},{scope:this,text:_("Return section"),handler:function(){var c=Ext.getCmp(this.comp_id).getCursor();Ext.getCmp(this.comp_id).insertLine(c.line,['\r\n\r\n',"&reftitle.returnvalues;\r\n","\r\n","What this function returns, first on success, then failure.\r\n","If simply true on success and false on failure, just use &return.success; here.\r\n","\r\n",""].join(""));Ext.getCmp(this.comp_id).focus()}},{scope:this,text:_("Error section"),handler:function(){var c=Ext.getCmp(this.comp_id).getCursor();Ext.getCmp(this.comp_id).insertLine(c.line,['\r\n\r\n',"&reftitle.errors;\r\n","\r\n","When does this function issue E_* level errors, and/or throw exceptions.\r\n","\r\n","\r\n"].join(""));Ext.getCmp(this.comp_id).focus()}},{scope:this,text:_("Unicode section"),handler:function(){var c=Ext.getCmp(this.comp_id).getCursor();Ext.getCmp(this.comp_id).insertLine(c.line,['\r\n\r\n',"&reftitle.unicode;\r\n","\r\n","Information specific to unicode, from the PHP 6 changes.\r\n","\r\n",""].join(""));Ext.getCmp(this.comp_id).focus()}},{scope:this,text:_("Changelog section"),handler:function(){var c=Ext.getCmp(this.comp_id).getCursor();Ext.getCmp(this.comp_id).insertLine(c.line,['\r\n\r\n',"&reftitle.changelog;\r\n","\r\n","\r\n",'\r\n',"\r\n","\r\n","&Version;\r\n","&Description;\r\n","\r\n","\r\n","\r\n","\r\n","Enter the version of change here\r\n","\r\n","Describe the change\r\n","\r\n","\r\n","\r\n","\r\n","\r\n","\r\n",""].join(""));Ext.getCmp(this.comp_id).focus()}},{scope:this,text:_("Examples section"),handler:function(){var c=Ext.getCmp(this.comp_id).getCursor();Ext.getCmp(this.comp_id).insertLine(c.line,['\r\n\r\n',"&reftitle.examples;\r\n","\r\n",'\r\n',"<function>function-name</function> example\r\n","\r\n","Any text that describes the purpose of the example, or what\r\n","goes on in the example should be here. (Inside the tag, not out).\r\n","\r\n",'\r\n',"\r\n","]]>\r\n","\r\n","&example.outputs.similar;\r\n","\r\n","\r\n","\r\n","\r\n","\r\n",""].join(""));Ext.getCmp(this.comp_id).focus()}},{scope:this,text:_("Notes section"),handler:function(){var c=Ext.getCmp(this.comp_id).getCursor();Ext.getCmp(this.comp_id).insertLine(c.line,['\r\n\r\n',"&reftitle.notes;\r\n","\r\n","\r\n","Any notes that don't fit anywhere else should go here.\r\n","90% of the time, notes, warnings or cautions are better placed in the\r\n","parameters section. Consider that before using this section!\r\n","\r\n","\r\n","¬e.language-construct;\r\n","¬e.not-bin-safe;\r\n","¬e.registerglobals;\r\n",""].join(""));Ext.getCmp(this.comp_id).focus()}},{scope:this,text:_("SeeAlso section"),handler:function(){var c=Ext.getCmp(this.comp_id).getCursor();Ext.getCmp(this.comp_id).insertLine(c.line,['\r\n\r\n',"&reftitle.seealso;\r\n","\r\n","\r\n","somefunc\r\n","another_func\r\n",'The something appendix\r\n',"\r\n","\r\n",""].join(""));Ext.getCmp(this.comp_id).focus()}}]})})}});ui.cmp._FilePanel.tbar.items.reindentTags=function(c){Ext.apply(this,c);this.init();ui.cmp._FilePanel.tbar.items.reindentTags.superclass.constructor.call(this)};Ext.extend(ui.cmp._FilePanel.tbar.items.reindentTags,Ext.ButtonGroup,{init:function(){Ext.apply(this,{id:this.id_prefix+"-FILE-"+this.fid+"-grp-tools",items:[{scope:this,tooltip:_("Check XML with XmlLint"),iconCls:"iconXml",handler:function(c){new ui.task.CheckXml({idPrefix:this.id_prefix,fid:this.fid})}},(this.lang==="en")?new ui.cmp._FilePanel.tbar.menu.en({comp_id:this.id_prefix+"-FILE-"+this.fid}):new ui.cmp._FilePanel.tbar.menu.lang({comp_id:this.id_prefix+"-FILE-"+this.fid}),{scope:this,text:_("Editor option"),iconCls:"iconConf",menu:[{scope:this,text:_("Re-indent all this file"),iconCls:"iconIndent",handler:function(){Ext.getCmp(this.id_prefix+"-FILE-"+this.fid).reIndentAll()}},{scope:this,text:_("Enable line wrapping"),checked:((PhDOE.user.conf.main.lineWrapping===true)?true:false),checkHandler:function(d,c){var e=(c)?true:false;Ext.getCmp(this.id_prefix+"-FILE-"+this.fid).setOption("lineWrapping",e);new ui.task.UpdateConfTask({module:"main",itemName:"lineWrapping",value:c,notify:false})}},{scope:this,text:_("Choose a Theme"),iconCls:"iconThemes",onThemeChange:function(){var c=Ext.getCmp(this.ownerCt.ownerCt.ownerCt.id_prefix+"-FILE-"+this.ownerCt.ownerCt.ownerCt.fid);Ext.each(this.menu.items.items,function(d){if(d.checked===true){c.switchTheme(d.themeName);new ui.task.UpdateConfTask({module:"main",itemName:"editorTheme",value:d.themeName,notify:false})}})},menu:{items:[{text:_("No theme"),themeName:false,checked:(PhDOE.user.conf.main.editorTheme===false),group:"cmd2-theme",checkHandler:function(){this.ownerCt.ownerCt.onThemeChange()}},{text:_("Default theme"),themeName:"default",checked:(PhDOE.user.conf.main.editorTheme==="default"||PhDOE.user.conf.main.editorTheme==="undefined"),group:"cmd2-theme",checkHandler:function(){this.ownerCt.ownerCt.onThemeChange()}},{text:_("Cobalt"),themeName:"cobalt",checked:(PhDOE.user.conf.main.editorTheme==="cobalt"),group:"cmd2-theme",checkHandler:function(){this.ownerCt.ownerCt.onThemeChange()}},{text:_("Eclipse"),themeName:"eclipse",checked:(PhDOE.user.conf.main.editorTheme==="eclipse"),group:"cmd2-theme",checkHandler:function(){this.ownerCt.ownerCt.onThemeChange()}},{text:_("Elegant"),themeName:"elegant",checked:(PhDOE.user.conf.main.editorTheme==="elegant"),group:"cmd2-theme",checkHandler:function(){this.ownerCt.ownerCt.onThemeChange()}},{text:_("Monokai"),themeName:"monokai",checked:(PhDOE.user.conf.main.editorTheme==="monokai"),group:"cmd2-theme",checkHandler:function(){this.ownerCt.ownerCt.onThemeChange()}},{text:_("Neat"),themeName:"neat",checked:(PhDOE.user.conf.main.editorTheme==="neat"),group:"cmd2-theme",checkHandler:function(){this.ownerCt.ownerCt.onThemeChange()}},{text:_("Night"),themeName:"night",checked:(PhDOE.user.conf.main.editorTheme==="night"),group:"cmd2-theme",checkHandler:function(){this.ownerCt.ownerCt.onThemeChange()}},{text:_("RubyBlue"),themeName:"rubyblue",checked:(PhDOE.user.conf.main.editorTheme==="rubyblue"),group:"cmd2-theme",checkHandler:function(){this.ownerCt.ownerCt.onThemeChange()}}]}}]}]})}});ui.cmp.FilePanel=Ext.extend(Ext.form.FormPanel,{activeScroll:false,goToPreviousTab:function(){var c=this.prefix+"-"+this.fid,e=Ext.getCmp("main-panel").layout.container.items.items,g,f,d;for(d=0;d','',_("Line: "),'-','  ',_("Col: "),'-',"  "].join(""))}}}]:[{xtype:"panel",height:22,baseCls:"",bodyStyle:"padding-top:5px;",html:['
','',_("Line: "),'-','  ',_("Col: "),'-',"
  "].join("")}];if(!this.readOnly){this.tbar=[new ui.cmp._FilePanel.tbar.items.common({prefix:this.prefix,fid:this.fid,ftype:this.ftype,goToPreviousTab:this.goToPreviousTab,goToNextTab:this.goToNextTab}),{xtype:"buttongroup",id:c+"-FILE-"+this.fid+"-grp-save",items:[{id:c+"-FILE-"+this.fid+"-btn-save",scope:this,tooltip:_("Save this file (CTRL+s)"),iconCls:"iconSaveFile",disabled:true,handler:function(){if(this.prefix==="AF"){new ui.task.SaveFileTask({prefix:this.prefix,ftype:this.ftype,fid:this.fid,fpath:this.fpath,fname:this.fname,lang:this.lang,storeRecord:this.storeRecord});return}if(this.prefix==="FNT"){new ui.task.SaveTransFileTask({prefix:this.prefix,ftype:this.ftype,fid:this.fid,fpath:this.fpath,fname:this.fname,lang:this.lang,storeRecord:this.storeRecord});return}if(!PhDOE.user.conf.main.onSaveFile){PhDOE.user.conf.main.onSaveFile="ask-me"}switch(PhDOE.user.conf.main.onSaveFile){case"always":new ui.task.CheckFileTask({prefix:this.prefix,ftype:this.ftype,fid:this.fid,fpath:this.fpath,fname:this.fname,lang:this.lang,storeRecord:this.storeRecord});break;case"never":new ui.task.SaveFileTask({prefix:this.prefix,ftype:this.ftype,fid:this.fid,fpath:this.fpath,fname:this.fname,lang:this.lang,storeRecord:this.storeRecord});break;case"ask-me":Ext.MessageBox.show({title:_("Confirm"),msg:_("Do you want to check for errors before saving?"),icon:Ext.MessageBox.INFO,buttons:Ext.MessageBox.YESNOCANCEL,scope:this,fn:function(d){if(d==="no"){new ui.task.SaveFileTask({prefix:this.prefix,ftype:this.ftype,fid:this.fid,fpath:this.fpath,fname:this.fname,lang:this.lang,storeRecord:this.storeRecord})}else{if(d==="yes"){new ui.task.CheckFileTask({prefix:this.prefix,ftype:this.ftype,fid:this.fid,fpath:this.fpath,fname:this.fname,lang:this.lang,storeRecord:this.storeRecord})}}}});break}}}]},new ui.cmp._FilePanel.tbar.items.undoRedo({id_prefix:c,fid:this.fid}),new ui.cmp._FilePanel.tbar.items.reindentTags({id_prefix:c,fid:this.fid,lang:this.lang}),{scope:this,iconCls:"iconZoom",tooltip:_("Expand in a popup"),handler:function(d){var e=new Ext.Window({title:this.originTitle,bodyStyle:"background-color:white",maximized:true,animateTarget:d.el,items:[{xtype:"codemirror",id:c+"-FILE-"+this.fid+"maximized",readOnly:false,lineWrapping:PhDOE.user.conf.main.lineWrapping,theme:PhDOE.user.conf.main.editorTheme,parser:this.parser,isModified:false,listeners:{scope:this,initialize:function(){var h=Ext.getCmp(c+"-FILE-"+this.fid+"maximized"),f=Ext.getCmp(c+"-FILE-"+this.fid).getValue();h.setValue(f);var g=new Ext.util.DelayedTask(function(){if(e.rendered){h.resize(false,e.getInnerHeight()+89)}else{g.delay(500)}});g.delay(500)}}}],listeners:{scope:this,beforeclose:function(g){var f=g.items.items[0].getValue();Ext.getCmp(c+"-FILE-"+this.fid).setValue(f)}}});e.show()}},{scope:this,iconCls:"iconView",hidden:!(this.lang==="en"&&this.fname.substr(-3)==="xml"),tooltip:_("Preview in a popup"),handler:function(){var d=Ext.getCmp(c+"-FILE-"+this.fid).isModified;if(d){Ext.Msg.alert(_("Information"),_("You must save your file in order to preview the result."),function(e){if(e=="ok"){new ui.cmp.PreviewFile({path:this.lang+this.fpath+this.fname})}},this)}else{new ui.cmp.PreviewFile({path:this.lang+this.fpath+this.fname})}}},"->",new ui.cmp._FilePanel.tbar.items.usernotes({fid:this.fid,file:this.lang+this.fpath+this.fname})]}else{this.tbar=[new ui.cmp._FilePanel.tbar.items.common({prefix:this.prefix,fid:this.fid,ftype:this.ftype,goToPreviousTab:this.goToPreviousTab,goToNextTab:this.goToNextTab}),{xtype:"buttongroup",hidden:(this.openInNewTabBtn!==true),scope:this,items:[{tooltip:_("Open for editing in a new Tab"),iconCls:"iconEditInNewTab",scope:this,handler:function(){ui.cmp.RepositoryTree.getInstance().openFile("byPath",this.lang+this.fpath,this.fname)}}]},"->",((this.ftype!=="GGTRANS")?new ui.cmp._FilePanel.tbar.items.usernotes({fid:this.fid,file:this.lang+this.fpath+this.fname}):"")]}Ext.apply(this,{title:this.title,cls:"code-mirror-panel",originTitle:this.title,items:[{xtype:"codemirror",id:c+"-FILE-"+this.fid,readOnly:this.readOnly,lineWrapping:PhDOE.user.conf.main.lineWrapping,theme:PhDOE.user.conf.main.editorTheme,parser:this.parser,isModified:false,listeners:{scope:this,initialize:function(){var e,d;if(this.isTrans){if(this.storeRecord.data.fileModified){e=this.lang+this.fpath;d=this.fname}else{e="en"+this.fpath;d=this.fname}}else{e=this.lang+this.fpath;d=this.fname}new ui.task.GetFileTask({prefix:this.prefix,ftype:this.ftype,original:this.original,fid:this.fid,fpath:e,freadOnly:this.readOnly,fname:d,skeleton:this.skeleton,storeRecord:this.storeRecord})},coderestored:function(){if(this.readOnly){return}if(Ext.getCmp(c+"-FILE-"+this.fid).isModified){Ext.getCmp(c+"-PANEL-"+this.fid).setTitle(Ext.getCmp(c+"-PANEL-"+this.fid).permlink+Ext.getCmp(c+"-PANEL-"+this.fid).originTitle);if((this.ftype==="LANG"&&PhDOE.user.lang!=="en")||this.ftype==="EN"){if((this.ftype==="EN"&&!Ext.getCmp(this.prefix+"-LANG-FILE-"+this.fid).isModified)||(this.ftype==="LANG"&&!Ext.getCmp(this.prefix+"-EN-FILE-"+this.fid).isModified)){Ext.getCmp(this.prefix+"-"+this.fid).setTitle(Ext.getCmp(this.prefix+"-"+this.fid).originTitle)}}else{Ext.getCmp(this.prefix+"-"+this.fid).setTitle(Ext.getCmp(this.prefix+"-"+this.fid).originTitle)}Ext.getCmp(c+"-FILE-"+this.fid+"-btn-save").disable();Ext.getCmp(c+"-FILE-"+this.fid).isModified=false}},codemodified:function(){if(this.readOnly){return}if(Ext.getCmp(c+"-FILE-"+this.fid+"-grp-save").disabled){return}var e=Ext.getCmp(c+"-FILE-"+this.fid),d=Ext.getCmp(c+"-PANEL-"+this.fid);if(!e.isModified){d.setTitle(d.permlink+d.originTitle+' ['+_("modified")+"]");Ext.getCmp(this.prefix+"-"+this.fid).setTitle(Ext.getCmp(this.prefix+"-"+this.fid).originTitle+' *');Ext.getCmp(c+"-FILE-"+this.fid+"-btn-save").enable();Ext.getCmp(c+"-FILE-"+this.fid+"-btn-undo").enable();e.isModified=true}},cursormove:function(d,e){Ext.get(c+"-status-line-"+this.fid).dom.innerHTML=d;Ext.get(c+"-status-col-"+this.fid).dom.innerHTML=e},scroll:function(g){var e,f,d;if(this.syncScroll&&PhDOE.user.conf[this.syncScrollConf.module][this.syncScrollConf.itemName]){switch(this.ftype){case"EN":if(this.prefix=="FNT"){e=this.prefix+"-TRANS"}else{e=this.prefix+"-LANG"}break;case"LANG":e=this.prefix+"-EN";break;case"TRANS":if(PhDOE.user.conf.newFile.secondPanel=="google"){e=this.prefix+"-GGTRANS"}if(PhDOE.user.conf.newFile.secondPanel=="originalFile"){e=this.prefix+"-EN"}break;case"GGTRANS":e=this.prefix+"-TRANS";break}f=Ext.getCmp(e+"-PANEL-"+this.fid);d=Ext.getCmp(e+"-FILE-"+this.fid);if(f.activeScroll===false){this.activeScroll=true;d.scrollTo(g)}else{f.activeScroll=false}}}}}]});ui.cmp.FilePanel.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp");ui.cmp.GoogleTranslationPanel=Ext.extend(Ext.FormPanel,{border:false,labelAlign:"top",bodyStyle:"padding:5px",autoScroll:true,getTranslation:function(c){new ui.task.GetGGTranslation({str:c})},initComponent:function(){Ext.apply(this,{items:[{xtype:"textarea",anchor:"90%",fieldLabel:String.format(_("String to translate (en => {0})"),PhDOE.user.lang),name:"GGTranslate-string",id:"GGTranslate-string",allowBlank:false},{scope:this,xtype:"button",text:_("Translate !"),id:"GGTranslate-btn",handler:function(){this.getTranslation(Ext.getCmp("GGTranslate-string").getValue())}},{xtype:"panel",anchor:"100%",border:false,bodyStyle:"padding:5px",html:'
'}]});ui.cmp.GoogleTranslationPanel.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._MainMenu");ui.cmp.MainMenu=function(c){Ext.apply(this,c);this.init();ui.cmp.MainMenu.superclass.constructor.call(this)};ui.cmp._MainMenu.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getAvailableLanguage"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"code",fields:[{name:"code"},{name:"iconCls"},{name:"name"}]})});ui.cmp._MainMenu.store.on("load",function(c){Ext.getDom("Info-Language").innerHTML=Ext.getDom("Topic-Language").innerHTML=c.getById(PhDOE.user.lang).data.name;c.each(function(d){var e=new Ext.menu.Item({text:d.data.name+" ("+d.data.code+")",iconCls:"mainMenuLang flags "+d.data.iconCls,disabled:(d.data.code===PhDOE.user.lang),handler:function(){XHR({params:{task:"switchLang",lang:d.data.code},success:function(){window.location.reload()}})}});Ext.getCmp("MenuLang-ct").add(e)})},this);Ext.extend(ui.cmp.MainMenu,Ext.menu.Menu,{id:"mainMenu",init:function(){var c=new Ext.menu.Menu({id:"MenuLang-ct"});Ext.apply(this,{items:[{text:_("Refresh all data"),disabled:(!PhDOE.user.isGlobalAdmin),iconCls:"iconRefresh",handler:function(){Ext.getBody().mask(' '+_("Verify if there is an update in progress. Please, wait..."));XHR({params:{task:"checkLockFile",lockFiles:"project_"+PhDOE.project+"_lock_update_repository|project_"+PhDOE.project+"_lock_apply_tools"},success:function(){Ext.getBody().unmask();Ext.MessageBox.show({title:_("Status"),msg:_("There is currently an update in progress.
You can't perform an update now."),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.INFO})},failure:function(){Ext.getBody().unmask();new ui.cmp.SystemUpdatePrompt().show(Ext.get("acc-need-update"))}})}},{text:_("Build tools"),handler:function(){return false},menu:new Ext.menu.Menu({items:[{text:_("Check build"),disabled:(!PhDOE.user.isGlobalAdmin&&!PhDOE.user.isLangAdmin),iconCls:"iconCheckBuild",handler:function(){Ext.getBody().mask(' '+_("Verify if there is a check in progress. Please, wait..."));XHR({params:{task:"checkLockFile",lockFile:"project_"+PhDOE.project+"_lock_check_build_"+PhDOE.user.lang},success:function(){Ext.getBody().unmask();Ext.MessageBox.show({title:_("Status"),msg:_("There is currently a check in progress for this language.
You can't perform a new check now."),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.INFO})},failure:function(){Ext.getBody().unmask();new ui.cmp.CheckBuildPrompt().show(Ext.get("acc-need-update"))}})}},{text:_("Show last failed build"),iconCls:"iconBuildStatus",handler:function(){var d=Ext.getCmp("tab-build-status");if(!d){Ext.getCmp("main-panel").add({id:"tab-build-status",title:_("Last failed build"),iconCls:"iconBuildStatus",layout:"fit",closable:true,items:[new ui.cmp.BuildStatus()]})}Ext.getCmp("main-panel").setActiveTab("tab-build-status")}}]})},{text:_("EN tools"),handler:function(){return false},menu:new Ext.menu.Menu({items:[{text:_("Script check entities"),iconCls:"iconCheckEntities",handler:function(){return false},menu:new Ext.menu.Menu({items:[{text:_("View the last result"),id:"btn-check-entities-view-last-result",iconCls:"iconTabView",handler:function(){var d=Ext.getCmp("tab-check-entities");if(!d){Ext.getCmp("main-panel").add({id:"tab-check-entities",title:_("Check entities"),iconCls:"iconCheckEntities",layout:"fit",closable:true,items:[new ui.cmp.CheckEntities()]})}Ext.getCmp("main-panel").setActiveTab("tab-check-entities")}},{text:_("Run this script"),iconCls:"iconRun",disabled:(PhDOE.user.isAnonymous),handler:function(){Ext.getBody().mask(' '+_("Verify if there is an entities check in progress. Please, wait..."));XHR({params:{task:"checkLockFile",lockFile:"project_"+PhDOE.project+"_lock_check_entities"},success:function(){Ext.getBody().unmask();Ext.MessageBox.show({title:_("Status"),msg:_("There is currently a check in progress for the entities.
You can't perform a new check now."),buttons:Ext.MessageBox.OK,icon:Ext.MessageBox.INFO})},failure:function(){Ext.getBody().unmask();if(!Ext.getCmp("win-check-entities")){new ui.cmp.CheckEntitiesPrompt()}Ext.getCmp("win-check-entities").show(Ext.get("mainMenu"))}})}}]})},{text:_("Script check document"),iconCls:"iconCheckDoc",handler:function(){var d=Ext.getCmp("tab-check-doc");if(!d){Ext.getCmp("main-panel").add({id:"tab-check-doc",title:"Check Doc",iconCls:"iconCheckDoc",layout:"fit",closable:true,items:[new ui.cmp.CheckDoc()]})}Ext.getCmp("main-panel").setActiveTab("tab-check-doc")}}]})},"-",{text:_("Configure"),iconCls:"iconConf",tooltip:"Configure this tool",id:"winconf-btn",handler:function(){if(!Ext.getCmp("win-conf")){new ui.cmp.EditorConf()}Ext.getCmp("win-conf").show(Ext.get("mainMenu"))}},"-",{id:"menuLang",iconCls:"iconSwitchLang",text:_("Switch to language..."),handler:function(){return false},menu:c},{text:_("Erase my personal data"),iconCls:"iconErasePersonalData",disabled:(PhDOE.user.isAnonymous),handler:function(){Ext.MessageBox.confirm(_("Confirm"),_("This action will erase your personal data. All content about this account will be deleted definitively. Are you sure you want to do that ?"),function(d){if(d==="yes"){Ext.getBody().mask(' '+_("Please, wait..."));XHR({params:{task:"erasePersonalData"},success:function(){Ext.getBody().unmask();Ext.MessageBox.show({title:_("Thanks !"),msg:_("Thank you for using this application !"),icon:Ext.MessageBox.INFO,buttons:Ext.MessageBox.OK,fn:function(){window.location.href="./do/logout?csrfToken="+csrfToken}})},failure:function(){Ext.getBody().unmask();PhDOE.winForbidden()}})}})}},{text:_("Log out"),iconCls:"iconLogOut",handler:function(){Ext.MessageBox.confirm(_("Confirm"),_("Are you sure you want to logout?"),function(d){if(d==="yes"){window.location.href="./do/logout?csrfToken="+csrfToken}})}},"-",{id:"tab-report-bug-btn",text:_("Report bugs"),iconCls:"iconBugs",handler:function(){if(!Ext.getCmp("main-panel").findById("tab-report-bug")){Ext.getCmp("main-panel").add({id:"tab-report-bug",xtype:"panel",title:_("Report bugs"),iconCls:"iconBugs",closable:true,layout:"fit",items:[new Ext.ux.IFrameComponent({id:"frame-tab-report-bug",url:"http://bugs.php.net/"})]});Ext.getCmp("main-panel").setActiveTab("tab-report-bug")}else{Ext.getCmp("main-panel").setActiveTab("tab-report-bug")}}},{id:"tab-documentation-btn",text:_("Documentation"),iconCls:"iconBook",handler:function(){if(!Ext.getCmp("main-panel").findById("tab-documentation")){Ext.getCmp("main-panel").add({id:"tab-documentation",xtype:"panel",title:_("Documentation"),iconCls:"iconBook",closable:true,layout:"fit",items:[new Ext.ux.IFrameComponent({id:"frame-tab-documentation",url:"https://wiki.php.net/doc/editor/"})]});Ext.getCmp("main-panel").setActiveTab("tab-documentation")}else{Ext.getCmp("main-panel").setActiveTab("tab-documentation")}}},{id:"tab-chat-btn",text:_("Chat with us on IRC !"),iconCls:"iconChat",handler:function(){if(!Ext.getCmp("main-panel").findById("tab-chat")){var d=PhDOE.user.login;if(PhDOE.user.isAnonymous){d="an%3F%3F%3F"}Ext.getCmp("main-panel").add({id:"tab-chat",xtype:"panel",title:_("Chat"),iconCls:"iconChat",closable:true,layout:"fit",items:[new Ext.ux.IFrameComponent({id:"frame-tab-chat",url:"https://widget.mibbit.com/?settings=8eec4034df2eb666b0600bdfe151529a&server=irc.umich.edu&channel=%23php.doc&nick=poe_"+d})]})}Ext.getCmp("main-panel").setActiveTab("tab-chat")}},"-",{id:"winabout-btn",text:_("About"),iconCls:"iconHelp",handler:function(){new ui.cmp.About().show(Ext.get("winabout-btn"))}}]})}});Ext.namespace("ui","ui.cmp","ui.cmp.MainPanel");ui.cmp.MainPanel=Ext.extend(Ext.ux.SlidingTabPanel,{activeTab:0,enableTabScroll:true,plugins:["tabclosemenu","dblclickclosetabs"],initComponent:function(c){Ext.apply(this,c);ui.cmp.MainPanel.superclass.initComponent.call(this);this.addEvents({tabLoaded:true});this.on("beforeremove",this.onBeforeRemove,this);this.on("tabchange",this.onTabChange,this);this.on("endDrag",this.onTabChange,this);this.on("tabLoaded",this.onTabLoaded,this)},onTabLoaded:function(d,e){var c=Ext.getCmp(d+"-"+e);if(d==="FNT"){if(c.panTRANSLoaded&&c.panTRANSSecondLoaded){c.tabLoaded=true;c.panTRANSLoaded=c.panTRANSSecondLoaded=false;if(PhDOE.FNTfilePendingOpen[0]){ui.cmp.PendingTranslateGrid.getInstance().openFile(PhDOE.FNTfilePendingOpen[0].id);PhDOE.FNTfilePendingOpen.shift()}}}if(d==="FNU"){if(c.panLANGLoaded&&c.panENLoaded&&c.panDiffLoaded&&c.panVCSLang&&c.panVCSEn){c.tabLoaded=true;c.panLANGLoaded=c.panENLoaded=c.panDiffLoaded=c.panVCSLang=c.panVCSEn=false;if(PhDOE.FNUfilePendingOpen[0]){ui.cmp.StaleFileGrid.getInstance().openFile(PhDOE.FNUfilePendingOpen[0].id);PhDOE.FNUfilePendingOpen.shift()}}}if(d==="FE"){if(c.panLANGLoaded&&c.panENLoaded&&c.panVCSLang&&c.panVCSEn){c.tabLoaded=true;c.panLANGLoaded=c.panENLoaded=c.panVCSLang=c.panVCSEn=false;if(PhDOE.FEfilePendingOpen[0]){ui.cmp.ErrorFileGrid.getInstance().openFile(PhDOE.FEfilePendingOpen[0].id);PhDOE.FEfilePendingOpen.shift()}}}if(d==="FNR"){if(c.panLANGLoaded&&c.panENLoaded&&c.panVCSLang&&c.panVCSEn){c.tabLoaded=true;c.panLANGLoaded=c.panENLoaded=c.panVCSLang=c.panVCSEn=false;if(PhDOE.FNRfilePendingOpen[0]){ui.cmp.PendingReviewGrid.getInstance().openFile(PhDOE.FNRfilePendingOpen[0].id);PhDOE.FNRfilePendingOpen.shift()}}}if(d==="FNIEN"){if(c.panLANGLoaded){c.tabLoaded=true;c.panLANGLoaded=false;if(PhDOE.FNIENfilePendingOpen[0]){ui.cmp.NotInENGrid.getInstance().openFile(PhDOE.FNIENfilePendingOpen[0].id);PhDOE.FNIENfilePendingOpen.shift()}}}if(d==="AF"){if(c.panLoaded&&c.panVCS&&c.panEntities&&c.panAcronyms){c.tabLoaded=true;c.panLoaded=c.panVCS=false;if(PhDOE.AFfilePendingOpen[0]){ui.cmp.RepositoryTree.getInstance().openFile((PhDOE.AFfilePendingOpen[0].nodeID)?"byId":"byPath",(PhDOE.AFfilePendingOpen[0].nodeID)?PhDOE.AFfilePendingOpen[0].nodeID:PhDOE.AFfilePendingOpen[0].fpath,(PhDOE.AFfilePendingOpen[0].nodeID)?false:PhDOE.AFfilePendingOpen[0].fname);PhDOE.AFfilePendingOpen.shift()}}}if(d==="PP"){if(c.panPatchLoaded&&c.panOriginLoaded&&c.panVCS&&c.panPatchContent){c.tabLoaded=true;c.panPatchLoaded=c.panOriginLoaded=c.panVCS=c.panPatchContent=false;if(PhDOE.PPfilePendingOpen[0]){ui.cmp.PendingPatchGrid.getInstance().openFile(PhDOE.PPfilePendingOpen[0].id);PhDOE.PPfilePendingOpen.shift()}}}},onTabChange:function(d,g){if(Ext.getCmp(g.id+"-btn-tabRight-LANG")||Ext.getCmp(g.id+"-btn-tabRight-EN")||Ext.getCmp(g.id+"-btn-tabRight-ALL")||Ext.getCmp(g.id+"-btn-tabRight-NotInEN")||Ext.getCmp(g.id+"-btn-tabRight-PATCH")||Ext.getCmp(g.id+"-btn-tabRight-TRANS")||Ext.getCmp(g.id+"-btn-tabRight-NEW")){var c=g.id,f=Ext.getCmp("main-panel").layout.container.items.items,h,e;for(e=0;eDo you really want to close?"),buttons:Ext.Msg.YESNO,icon:Ext.Msg.QUESTION,fn:function(j,k){if(j==="yes"){f.un("beforeremove",this.onBeforeRemove,this);f.remove(g);f.addListener("beforeremove",this.onBeforeRemove,this)}}});return false}else{return true}}else{return true}},openDiffTab:function(d){var f=d.DiffType,k=d.currentOwner||"",h=d.fileIdDB||"",j=d.FileName||"",e=d.FilePath||"",p=d.patchID||"",o=d.patchName||"",g,l=Ext.util.md5(o+p+e+j),q,c,m;if(p!=""){q=String.format(_("Diff for patch: {0}"),o);g="./do/downloadPatch?patchID="+p+"&csrfToken="+csrfToken;c=_("Download the unified diff as a patch")}else{q=String.format(_("Diff for file: {0}"),e+j);g="./do/downloadPatch?FilePath="+e+"&FileName="+j+"&csrfToken="+csrfToken;c=_("Download the diff as a patch")}if(!Ext.getCmp("main-panel").findById("diff_panel_"+l)){m=[{xtype:"buttongroup",items:[{xtype:"button",iconCls:"iconEdit",tooltip:_("Edit in a new tab"),handler:function(){ui.cmp.RepositoryTree.getInstance().openFile("byPath",e,j)}},{xtype:"button",iconCls:"iconDownloadDiff",tooltip:c,handler:function(){window.location.href=g}}]},((PhDOE.user.isGlobalAdmin||PhDOE.user.isLangAdmin)?{xtype:"buttongroup",items:[{xtype:"button",iconCls:"iconPageDelete",tooltip:_("Clear this change"),handler:function(){new ui.task.ClearLocalChangeTask({ftype:"update",fpath:e,fname:j});Ext.getCmp("main-panel").remove("diff_panel_"+l)}},{xtype:"button",iconCls:"iconSwitchLang",tooltip:_("Change file's owner"),handler:function(){new ui.cmp.ChangeFileOwner({fileIdDB:h,fileFolder:e,fileName:j,currentOwner:k})}}]}:"")];Ext.getCmp("main-panel").add({xtype:"panel",id:"diff_panel_"+l,title:_("Diff"),tabTip:q,closable:true,autoScroll:true,iconCls:"iconTabLink",html:'
',tbar:m});Ext.getCmp("main-panel").setActiveTab("diff_panel_"+l);Ext.get("diff_panel_"+l).mask(''+_("Please, wait..."));XHR({params:{task:"getDiff",DiffType:f,FilePath:e,FileName:j,patchID:p},success:function(s){var u=Ext.util.JSON.decode(s.responseText),t="";if(p==""){t='

'+_("Direct link to this patch")+" ; "+_("File: ")+e+j+"

"}else{t='

'+_("Direct link to this patch")+" ; "+_("Patch Name: ")+o+"

"}u.content=t+u.content;Ext.get("diff_content_"+l).dom.innerHTML=u.content;Ext.get("diff_panel_"+l).unmask()}})}else{Ext.getCmp("main-panel").setActiveTab("diff_panel_"+l)}}});Ext.reg("mainpanel",ui.cmp.MainPanel);Ext.namespace("ui","ui.cmp");ui.cmp.ManagePatchPrompt=Ext.extend(Ext.Window,{title:"",width:450,height:260,minWidth:450,minHeight:300,layout:"fit",plain:true,bodyStyle:"padding:5px;",buttonAlign:"center",iconCls:"iconPatch",closeAction:"hide",nodesToAdd:false,patchName:"",patchDescription:"",patchEmail:"",patchID:false,initComponent:function(){Ext.apply(this,{buttons:[{text:(this.patchID)?_("Save"):_("Create"),handler:function(){var d=this.ownerCt.ownerCt,c=d.findByType("form").shift().getForm().getValues();XHR({params:{task:"managePatch",name:c.name,description:c.description,email:c.email,patchID:d.patchID},success:function(e){var f=Ext.util.JSON.decode(e.responseText);d.hide();if(d.patchID){ui.cmp.PatchesTreeGrid.getInstance().modPatchName({newPatchName:c.name,newPatchDescription:c.description,newPatchEmail:c.email,patchID:d.patchID})}if(d.nodesToAdd){ui.task.MoveToPatch({patchID:f.patchID,patchName:c.name,patchDescription:c.description,patchEmail:c.email,nodesToAdd:d.nodesToAdd})}}})}},{text:_("Cancel"),handler:function(){this.ownerCt.ownerCt.hide()}}],items:[{xtype:"form",baseCls:"x-plain",labelWidth:110,defaultType:"textfield",labelAlign:"top",items:[{name:"name",fieldLabel:_("Patch name"),anchor:"100%",value:this.patchName},{name:"description",xtype:"textarea",fieldLabel:_("Patch description"),tooltipText:_("This description will be the default during the validation of the patch by a valid user."),anchor:"100%",value:this.patchDescription},{name:"email",fieldLabel:_("Email"),tooltipText:_("If provided, an email will be send to you to inform that the patch is commited."),anchor:"100%",value:this.patchEmail}]}]});ui.cmp.ManagePatchPrompt.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._NotInENGrid");ui.cmp._NotInENGrid.store=new Ext.data.GroupingStore({proxy:new Ext.data.HttpProxy({url:"./do/getFilesNotInEn"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"path"},{name:"name"},{name:"fileModified"}]}),sortInfo:{field:"path",direction:"ASC"},groupField:"path",listeners:{datachanged:function(c){Ext.getDom("acc-notInEn-nb").innerHTML=c.getCount()}}});ui.cmp._NotInENGrid.columns=[{id:"name",header:_("Files"),sortable:true,dataIndex:"name",renderer:function(d,c,e){if(e.data.fileModified){var f=Ext.util.JSON.decode(e.data.fileModified);if(f.user===PhDOE.user.login&&f.anonymousIdent===PhDOE.user.anonymousIdent){return""+d+""}else{return""+d+""}}else{return d}}},{header:_("Path"),dataIndex:"path",hidden:true}];ui.cmp._NotInENGrid.view=new Ext.grid.GroupingView({forceFit:true,startCollapsed:true,groupTextTpl:'{[values.rs[0].data["path"]]} ({[values.rs.length]} {[values.rs.length > 1 ? "'+_("Files")+'" : "'+_("File")+'"]})',deferEmptyText:false,emptyText:'
'+_("No Files")+"
",getRowClass:function(c){if(c.data.fileModified){var d=Ext.util.JSON.decode(c.data.fileModified);return(d.user===PhDOE.user.login&&d.anonymousIdent===PhDOE.user.anonymousIdent)?"fileModifiedByMe":"fileModifiedByAnother"}return false}});ui.cmp._NotInENGrid.menu=function(c){Ext.apply(this,c);this.init();ui.cmp._NotInENGrid.menu.superclass.constructor.call(this)};Ext.extend(ui.cmp._NotInENGrid.menu,Ext.menu.Menu,{init:function(){Ext.apply(this,{items:[{scope:this,text:""+_("View in a new tab")+"",iconCls:"iconView",handler:function(){this.grid.fireEvent("rowdblclick",this.grid,this.rowIdx,this.event)}},{scope:this,text:_("Remove this file"),hidden:(this.grid.store.getAt(this.rowIdx).data.fileModified),iconCls:"iconTrash",handler:function(){var e=this.grid.store.getAt(this.rowIdx),d=e.data.path,c=e.data.name;new ui.task.MarkDeleteTask({fpath:d,fname:c,storeRecord:e})}}]})}});ui.cmp.NotInENGrid=Ext.extend(Ext.grid.GridPanel,{loadMask:true,border:false,autoExpandColumn:"name",enableDragDrop:true,ddGroup:"mainPanelDDGroup",view:ui.cmp._NotInENGrid.view,columns:ui.cmp._NotInENGrid.columns,onRowContextMenu:function(c,f,d){d.stopEvent();c.getSelectionModel().selectRow(f);new ui.cmp._NotInENGrid.menu({grid:c,rowIdx:f,event:d}).showAt(d.getXY())},onRowDblClick:function(c,f,d){this.openFile(c.store.getAt(f).data.id)},openFile:function(g){var e=this.store.getById(g),d=e.data.path,c=e.data.name,f=Ext.util.md5("FNIEN-"+PhDOE.user.lang+d+c);if(!Ext.getCmp("main-panel").findById("FNIEN-"+f)){Ext.getCmp("main-panel").add({id:"FNIEN-"+f,layout:"border",title:c,originTitle:c,iconCls:"iconTabView",closable:true,tabLoaded:false,panLANGLoaded:false,defaults:{split:true},tabTip:String.format(_("Not In EN: in {0}"),d),items:[new ui.cmp.FilePanel({id:"FNIEN-NotInEN-PANEL-"+f,region:"center",title:_("File: ")+d+c,prefix:"FNIEN",ftype:"NotInEN",fid:f,fpath:d,fname:c,original:true,readOnly:true,lang:PhDOE.user.lang,parser:"xml",storeRecord:e,syncScroll:false})]})}Ext.getCmp("main-panel").setActiveTab("FNIEN-"+f)},initComponent:function(){Ext.apply(this,{store:ui.cmp._NotInENGrid.store});ui.cmp.NotInENGrid.superclass.initComponent.call(this);this.on("rowcontextmenu",this.onRowContextMenu,this);this.on("rowdblclick",this.onRowDblClick,this)}});ui.cmp._NotInENGrid.instance=null;ui.cmp.NotInENGrid.getInstance=function(c){if(!ui.cmp._NotInENGrid.instance){if(!c){c={}}ui.cmp._NotInENGrid.instance=new ui.cmp.NotInENGrid(c)}return ui.cmp._NotInENGrid.instance};Ext.namespace("ui","ui.cmp","ui.cmp._PatchesTreeGrid","ui.cmp._PatchesTreeGrid.menu");ui.cmp._PatchesTreeGrid.menu.users=function(c){Ext.apply(this,c);this.init();ui.cmp._PatchesTreeGrid.menu.users.superclass.constructor.call(this)};Ext.extend(ui.cmp._PatchesTreeGrid.menu.users,Ext.menu.Menu,{init:function(){var c=[];this.node.cascade(function(d){if(d.attributes.type!=="folder"&&d.attributes.type!=="patch"&&d.attributes.type!=="user"){c.push(d)}},this);Ext.apply(this,{items:[{scope:this,text:String.format(_("Send an email to {0}"),""+this.node.attributes.task+""),iconCls:"iconSendEmail",hidden:(this.node.attributes.task===PhDOE.user.login||this.node.attributes.email==="false"),handler:function(){var d=new ui.cmp.EmailPrompt();d.setData(this.node.attributes.task,this.node.attributes.email);d.show(this.node.el)}},{text:_("Back all files to work in progress module"),hidden:(this.node.attributes.task!==PhDOE.user.login),disabled:Ext.isEmpty(c),iconCls:"iconWorkInProgress",handler:function(){ui.task.MoveToWork({nodesToAdd:c})}},{xtype:"menuseparator",hidden:(this.node.attributes.task!==PhDOE.user.login||PhDOE.user.isAnonymous)},((this.node.attributes.task===PhDOE.user.login&&!PhDOE.user.isAnonymous)?new ui.cmp._WorkTreeGrid.menu.commit({module:"patches",from:"user",node:false,folderNode:false,patchNode:false,userNode:this.node}):"")]})}});ui.cmp._PatchesTreeGrid.menu.patches=function(c){Ext.apply(this,c);this.init();ui.cmp._PatchesTreeGrid.menu.patches.superclass.constructor.call(this)};Ext.extend(ui.cmp._PatchesTreeGrid.menu.patches,Ext.menu.Menu,{init:function(){var d=this.node,f=[],c=d.parentNode.attributes.task,e=d.parentNode.attributes.isAnonymous;this.node.cascade(function(g){if(g.attributes.type!=="folder"&&g.attributes.type!=="patch"&&g.attributes.type!=="user"){f.push(g)}},this);Ext.apply(this,{items:[{text:_("Edit the description of this patch"),iconCls:"iconPendingPatch",hidden:(c!==PhDOE.user.login),handler:function(){var g=new ui.cmp.ManagePatchPrompt({title:_("Modify this patch description"),patchName:d.attributes.task,patchDescription:d.attributes.patchDescription,patchEmail:d.attributes.patchEmail,patchID:d.attributes.idDB});g.show(this.el)}},{text:_("Delete this patch"),iconCls:"iconTrash",hidden:(c!==PhDOE.user.login),handler:function(){ui.task.DeletePatchTask({patchID:d.attributes.idDB})}},{xtype:"menuseparator",hidden:!((!PhDOE.user.isAnonymous&&c===PhDOE.user.login)||!PhDOE.user.isGlobalAdmin)},{text:_("Back all this patch to work in progress module"),iconCls:"iconWorkInProgress",hidden:(c!==PhDOE.user.login),disabled:Ext.isEmpty(f),handler:function(){ui.task.MoveToWork({nodesToAdd:f})}},{xtype:"menuseparator",hidden:(c!==PhDOE.user.login)},{text:_("View unified diff"),iconCls:"iconViewDiff",handler:function(){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",patchID:d.attributes.idDB,patchName:d.attributes.task})}},{text:_("Download the unified diff as a patch"),iconCls:"iconDownloadDiff",handler:function(){window.location.href="./do/downloadPatch?patchID="+d.attributes.idDB+"&csrfToken="+csrfToken}},{xtype:"menuseparator"},((e&&!PhDOE.user.isAnonymous)?new ui.cmp._WorkTreeGrid.menu.commit({module:"patches",from:"anonymousPatch",node:false,folderNode:false,patchNode:this.node,userNode:this.node.parentNode}):""),((!PhDOE.user.isAnonymous&&c===PhDOE.user.login)?new ui.cmp._WorkTreeGrid.menu.commit({module:"patches",from:"patch",node:false,folderNode:false,patchNode:this.node,userNode:this.node.parentNode}):""),((PhDOE.user.isGlobalAdmin&&c!==PhDOE.user.login)?new ui.cmp._WorkTreeGrid.menu.admin({from:"patch",node:this.node}):"")]})}});ui.cmp._PatchesTreeGrid.menu.folders=function(c){Ext.apply(this,c);this.init();ui.cmp._PatchesTreeGrid.menu.folders.superclass.constructor.call(this)};Ext.extend(ui.cmp._PatchesTreeGrid.menu.folders,Ext.menu.Menu,{init:function(){var c=[];if(this.node.parentNode.parentNode.attributes.task!==PhDOE.user.login){return false}this.node.cascade(function(d){if(d.attributes.type!=="folder"&&d.attributes.type!=="patch"&&d.attributes.type!=="user"){c.push(d)}},this);Ext.apply(this,{items:[{text:_("Back all this folder to work in progress module"),iconCls:"iconWorkInProgress",handler:function(){ui.task.MoveToWork({nodesToAdd:c})}},{xtype:"menuseparator",hidden:(PhDOE.user.isAnonymous)},((!PhDOE.user.isAnonymous)?new ui.cmp._WorkTreeGrid.menu.commit({module:"patches",from:"folder",node:false,folderNode:this.node,patchNode:this.node.parentNode,userNode:this.node.parentNode.parentNode}):"")]})}});ui.cmp._PatchesTreeGrid.menu.files=function(c){Ext.apply(this,c);this.init();ui.cmp._PatchesTreeGrid.menu.files.superclass.constructor.call(this)};Ext.extend(ui.cmp._PatchesTreeGrid.menu.files,Ext.menu.Menu,{init:function(){var h=this.node,m=h.attributes.type,g,c=h.parentNode.attributes.task,f=h.attributes.task,k=h.ownerTree,l=h.attributes.idDB,d=[],e=this.node.parentNode.parentNode.parentNode.attributes.task,j;j=h.parentNode.attributes.task.split("/");g=j[0];this.node.cascade(function(o){if(o.attributes.type!=="folder"&&o.attributes.type!=="patch"&&o.attributes.type!=="user"){d.push(o)}},this);Ext.apply(this,{items:[{text:""+((m==="delete")?_("View in a new tab"):_("Edit in a new tab"))+"",iconCls:"iconEdit",handler:function(){ui.cmp.WorkTreeGrid.getInstance().openFile(h)}},{text:_("Back this file to work in progress module"),hidden:(e!==PhDOE.user.login),iconCls:"iconWorkInProgress",handler:function(){ui.task.MoveToWork({nodesToAdd:d})}},"-",{text:_("View diff"),iconCls:"iconViewDiff",handler:function(){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",FileName:f,FilePath:c,currentOwner:e,fileIdDB:h.attributes.idDB})}},{text:_("Download the diff as a patch"),iconCls:"iconDownloadDiff",handler:function(){window.location.href="./do/downloadPatch?FilePath="+c+"&FileName="+f+"&csrfToken="+csrfToken}},{xtype:"menuseparator",hidden:(m==="delete"||m==="new"||e!==PhDOE.user.login)},{text:((m==="delete")?_("Cancel this deletion"):_("Clear this change")),hidden:(e!==PhDOE.user.login),iconCls:"iconPageDelete",handler:function(){new ui.task.ClearLocalChangeTask({ftype:m,fpath:c,fname:f})}},{xtype:"menuseparator",hidden:(PhDOE.user.isAnonymous||e!==PhDOE.user.login)},((e===PhDOE.user.login&&!PhDOE.user.isAnonymous)?new ui.cmp._WorkTreeGrid.menu.commit({module:"patches",from:"file",node:this.node,folderNode:this.node.parentNode,patchNode:this.node.parentNode.parentNode,userNode:this.node.parentNode.parentNode.parentNode}):""),{xtype:"menuseparator",hidden:(!PhDOE.user.isGlobalAdmin&&!(PhDOE.user.lang===g&&PhDOE.user.isLangAdmin))},((PhDOE.user.isGlobalAdmin||(PhDOE.user.lang===g&&PhDOE.user.isLangAdmin))?new ui.cmp._WorkTreeGrid.menu.admin({fileLang:g,from:"file",node:this.node,folderNode:this.node.parentNode,userNode:this.node.parentNode.parentNode.parentNode}):"")]})}});ui.cmp.PatchesTreeGrid=Ext.extend(Ext.ux.tree.TreeGrid,{onContextMenu:function(f,g){g.stopEvent();var d=f.attributes.type,c;switch(d){case"user":f.select();c=new ui.cmp._PatchesTreeGrid.menu.users({node:f});break;case"folder":f.select();c=new ui.cmp._PatchesTreeGrid.menu.folders({node:f});break;case"patch":f.select();c=new ui.cmp._PatchesTreeGrid.menu.patches({node:f});break;default:f.select();c=new ui.cmp._PatchesTreeGrid.menu.files({node:f});break}c.showAt(g.getXY())},modPatchName:function(c){var d=this.getRootNode(),e=d.findChild("idDB",c.patchID,true);e.setText(c.newPatchName);e.attributes.patchDescription=c.newPatchDescription;e.attributes.patchEmail=c.newPatchEmail;e.attributes.task=c.newPatchName},initComponent:function(){Ext.apply(this,{animate:true,useArrows:true,autoScroll:true,border:false,containerScroll:true,selModel:new Ext.tree.MultiSelectionModel(),columns:[{header:_("Users"),dataIndex:"task",uiProvider:{editable:true,qtip:"help"},tpl:new Ext.XTemplate("{task:this.formatUserName}",{formatUserName:function(c,d){if(d.type==="user"){if(d.userID){d.qtip=_("userID: ")+d.userID}return c}if(d.type==="patch"){if(d.creationDate){d.qtip=_("Creation date: ")+Date.parseDate(d.creationDate,"Y-m-d H:i:s").format(_("Y-m-d, H:i"))}return c}return c}})},{header:_("Last modified"),width:120,dataIndex:"last_modified",align:"center",tpl:new Ext.XTemplate("{last_modified:this.formatDate}",{formatDate:function(c,d){if(d.type!=="user"&&d.type!=="folder"&&d.type!=="patch"){return Date.parseDate(c,"Y-m-d H:i:s").format(_("Y-m-d, H:i"))}else{return""}}})}],loader:{dataUrl:"./do/getWork",baseParams:{module:"PatchesForReview"}}});ui.cmp.PatchesTreeGrid.superclass.initComponent.call(this);this.on("contextmenu",this.onContextMenu,this);this.on("resize",this.resizeCmp,this);this.on("dblclick",ui.cmp.WorkTreeGrid.getInstance().openFile,this);this.getRootNode().on("beforechildrenrendered",function(){this.updateFilesCounter.defer(200,this)},this)},resizeCmp:function(g,f,d,e){this.columns[0].width=e-(this.columns[1].width+5);this.updateColumnWidths()},deletePatch:function(q){var e=this.getRootNode(),o,c,d,f,r=[],p,m,h,g;for(p=0;p"}else{h=String.format(_("File EN modified by {0}"),g.user)+"
"}}if(e.data.fileModifiedLang){f=Ext.util.JSON.decode(e.data.fileModifiedLang);if(f.user===PhDOE.user.login&&f.anonymousIdent===PhDOE.user.anonymousIdent){h+=String.format(_("File {0} modified by me"),PhDOE.user.lang.ucFirst())}else{h+=String.format(_("File {0} modified by {1}"),PhDOE.user.lang.ucFirst(),f.user)}}if(h!==""){return""+d+""}else{return d}}},{header:_("Reviewed"),width:45,sortable:true,dataIndex:"reviewed"},{header:_("Reviewer"),width:45,sortable:true,dataIndex:"maintainer"},{header:_("Path"),dataIndex:"path",hidden:true}];ui.cmp._PendingReviewGrid.view=new Ext.grid.GroupingView({forceFit:true,startCollapsed:true,groupTextTpl:'{[values.rs[0].data["path"]]} ({[values.rs.length]} {[values.rs.length > 1 ? "'+_("Files")+'" : "'+_("File")+'"]})',getRowClass:function(c){if(c.data.fileModifiedEN||c.data.fileModifiedLang){var e=Ext.util.JSON.decode(c.data.fileModifiedEN),d=Ext.util.JSON.decode(c.data.fileModifiedLang);return((e.user===PhDOE.user.login&&e.anonymousIdent===PhDOE.user.anonymousIdent)||(d.user===PhDOE.user.login&&d.anonymousIdent===PhDOE.user.anonymousIdent))?"fileModifiedByMe":"fileModifiedByAnother"}return false},deferEmptyText:false,emptyText:'
'+_("No Files")+"
"});Ext.namespace("ui.cmp._PendingReviewGrid.menu");ui.cmp._PendingReviewGrid.menu.group=function(c){Ext.apply(this,c);this.init();ui.cmp._PendingReviewGrid.menu.group.superclass.constructor.call(this)};Ext.extend(ui.cmp._PendingReviewGrid.menu.group,Ext.menu.Item,{iconCls:"iconViewDiff",init:function(){Ext.apply(this,{text:String.format(_("Open all files about {0} extension"),this.gname.ucFirst()),handler:function(){Ext.getBody().mask(' '+String.format(_("Open all files about {0} extension"),this.gname.ucFirst())+". "+_("Please, wait..."));XHR({params:{task:"getAllFilesAboutExtension",ExtName:this.gname},success:function(d){var e=Ext.util.JSON.decode(d.responseText),c;PhDOE.AFfilePendingOpen=[];for(c=0;c"+_("Edit in a new tab")+"",iconCls:"iconFilesNeedReviewed",scope:this,handler:function(){this.grid.fireEvent("rowdblclick",this.grid,this.rowIdx,this.event)}},{scope:this,hidden:this.hideDiffMenu,text:_("View diff..."),iconCls:"iconViewDiff",menu:new Ext.menu.Menu({items:[{scope:this,hidden:(this.grid.store.getAt(this.rowIdx).data.fileModifiedEN===false),text:String.format(_("... of the {0} file"),"EN"),handler:function(){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",FileName:this.fname,FilePath:"en"+this.fpath})}},{scope:this,hidden:(this.grid.store.getAt(this.rowIdx).data.fileModifiedLang===false),text:String.format(_("... of the {0} file"),PhDOE.user.lang.ucFirst()),handler:function(){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",FileName:this.fname,FilePath:PhDOE.user.lang+this.fpath})}}]})},new Ext.menu.Separator({hidden:this.hideGroup}),new ui.cmp._PendingReviewGrid.menu.group({gname:this.gname,hidden:this.hideGroup})]})}});ui.cmp.PendingReviewGrid=Ext.extend(Ext.grid.GridPanel,{loadMask:true,border:false,autoExpandColumn:"name",enableDragDrop:true,ddGroup:"mainPanelDDGroup",columns:ui.cmp._PendingReviewGrid.columns,view:ui.cmp._PendingReviewGrid.view,onRowContextMenu:function(d,k,h){h.stopEvent();var g=d.store.getAt(k),f=g.data.path,c=g.data.name,j=f.split("/");d.getSelectionModel().selectRow(k);new ui.cmp._PendingReviewGrid.menu.main({grid:d,rowIdx:k,event:h,fpath:f,fname:c,hideDiffMenu:(g.data.fileModifiedEN===false&&g.data.fileModifiedLang===false),hideGroup:(j[1]!=="reference"),gname:(j[2])?j[2]:""}).showAt(h.getXY())},onRowDblClick:function(c,f,d){this.openFile(c.store.getAt(f).data.id)},openFile:function(g){var e=this.store.getById(g),d=e.data.path,c=e.data.name,f=Ext.util.md5("FNR-"+PhDOE.user.lang+d+c);if(!Ext.getCmp("main-panel").findById("FNR-"+f)){Ext.getCmp("main-panel").add({id:"FNR-"+f,title:c,layout:"border",iconCls:"iconTabNeedReviewed",closable:true,tabLoaded:false,panVCSLang:!PhDOE.user.conf.reviewed.toolsPanelLogLoad,panVCSEn:!PhDOE.user.conf.reviewed.toolsPanelLogLoad,panLANGLoaded:false,panENLoaded:false,originTitle:c,defaults:{split:true},tabTip:String.format(_("Need Reviewed in: {0}"),d),listeners:{resize:function(h){Ext.getCmp("FNR-EN-PANEL-"+f).setWidth(h.getWidth()/2)}},items:[{region:"west",xtype:"panel",title:_("Tools"),iconCls:"iconConf",collapsedIconCls:"iconConf",plugins:[Ext.ux.PanelCollapsedTitle],collapsible:true,collapsed:!PhDOE.user.conf.reviewed.toolsPanelDisplay,layout:"fit",bodyBorder:false,width:PhDOE.user.conf.reviewed.toolsPanelWidth||375,listeners:{collapse:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"reviewed",itemName:"toolsPanelDisplay",value:false,notify:false})}},expand:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"reviewed",itemName:"toolsPanelDisplay",value:true,notify:false})}},resize:function(h,j){if(this.ownerCt.tabLoaded&&j&&j!=PhDOE.user.conf.reviewed.toolsPanelWidth){new ui.task.UpdateConfTask({module:"reviewed",itemName:"toolsPanelWidth",value:j,notify:false})}}},items:{xtype:"tabpanel",activeTab:0,tabPosition:"bottom",enableTabScroll:true,defaults:{autoScroll:true},items:[new ui.cmp.VCSLogGrid({layout:"fit",title:String.format(_("{0} Log"),PhDOE.user.lang.ucFirst()),prefix:"FNR-LANG",fid:f,fpath:PhDOE.user.lang+d,fname:c,loadStore:PhDOE.user.conf.reviewed.toolsPanelLogLoad}),new ui.cmp.VCSLogGrid({layout:"fit",title:String.format(_("{0} Log"),"En"),prefix:"FNR-EN",fid:f,fpath:"en"+d,fname:c,loadStore:PhDOE.user.conf.reviewed.toolsPanelLogLoad}),new ui.cmp.DictionaryGrid({layout:"fit",title:_("Dictionary"),prefix:"FNR",fid:f})]}},new ui.cmp.FilePanel({id:"FNR-LANG-PANEL-"+f,region:"center",title:String.format(_("{0} File: "),PhDOE.user.lang.ucFirst())+d+c,prefix:"FNR",ftype:"LANG",spellCheck:PhDOE.user.conf.reviewed.enableSpellCheckLang,spellCheckConf:{module:"reviewed",itemName:"enableSpellCheckLang"},fid:f,fpath:d,fname:c,lang:PhDOE.user.lang,parser:"xml",storeRecord:e,syncScrollCB:true,syncScroll:true,syncScrollConf:{module:"reviewed",itemName:"syncScrollbars"}}),new ui.cmp.FilePanel({id:"FNR-EN-PANEL-"+f,region:"east",title:_("en File: ")+d+c,prefix:"FNR",ftype:"EN",original:true,readOnly:true,openInNewTabBtn:true,fid:f,fpath:d,fname:c,lang:"en",parser:"xml",storeRecord:e,syncScroll:true,syncScrollConf:{module:"reviewed",itemName:"syncScrollbars"}})]})}Ext.getCmp("main-panel").setActiveTab("FNR-"+f)},initComponent:function(){Ext.apply(this,{store:ui.cmp._PendingReviewGrid.store,tbar:[_("Filter: ")," ",new Ext.form.TwinTriggerField({id:"FNR-filter",width:180,hideTrigger1:true,enableKeyEvents:true,validateOnBlur:false,validationEvent:false,trigger1Class:"x-form-clear-trigger",trigger2Class:"x-form-search-trigger",listeners:{keypress:function(d,c){if(c.getKey()===c.ENTER){this.onTrigger2Click()}}},onTrigger1Click:function(){this.setValue("");this.triggers[0].hide();this.setSize(180,10);ui.cmp._PendingReviewGrid.instance.store.clearFilter()},onTrigger2Click:function(){var c=this.getValue(),d;if(c===""||c.length<3){this.markInvalid(_("Your filter must contain at least 3 characters"));return}this.clearInvalid();this.triggers[0].show();this.setSize(180,10);d=new RegExp(c,"i");ui.cmp._PendingReviewGrid.instance.store.filterBy(function(e){if(d.test(e.data.path)||d.test(e.data.name)||d.test(e.data.reviewed)||d.test(e.data.maintainer)){return true}else{return false}},this)}})]});ui.cmp.PendingReviewGrid.superclass.initComponent.call(this);this.on("rowcontextmenu",this.onRowContextMenu,this);this.on("rowdblclick",this.onRowDblClick,this)}});ui.cmp._PendingReviewGrid.instance=null;ui.cmp.PendingReviewGrid.getInstance=function(c){if(!ui.cmp._PendingReviewGrid.instance){if(!c){c={}}ui.cmp._PendingReviewGrid.instance=new ui.cmp.PendingReviewGrid(c)}return ui.cmp._PendingReviewGrid.instance};Ext.namespace("ui","ui.cmp","ui.cmp._PendingTranslateGrid");ui.cmp._PendingTranslateGrid.store=new Ext.data.GroupingStore({proxy:new Ext.data.HttpProxy({url:"./do/getFilesNeedTranslate"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"path"},{name:"name"},{name:"fileModified"}]}),sortInfo:{field:"name",direction:"ASC"},groupField:"path",listeners:{datachanged:function(c){Ext.getDom("acc-need-translate-nb").innerHTML=c.getCount()}}});ui.cmp._PendingTranslateGrid.view=new Ext.grid.GroupingView({forceFit:true,startCollapsed:true,groupTextTpl:'{[values.rs[0].data["path"]]} ({[values.rs.length]} {[values.rs.length > 1 ? "'+_("Files")+'" : "'+_("File")+'"]})',deferEmptyText:false,getRowClass:function(c){if(c.data.fileModified){var d=Ext.util.JSON.decode(c.data.fileModified);return(d.user===PhDOE.user.login&&d.anonymousIdent===PhDOE.user.anonymousIdent)?"fileModifiedByMe":"fileModifiedByAnother"}return false},emptyText:'
'+_("No Files")+"
"});ui.cmp._PendingTranslateGrid.columns=[{id:"name",header:_("Files"),sortable:true,dataIndex:"name",renderer:function(c,f,d){if(d.data.fileModified){var e=Ext.util.JSON.decode(d.data.fileModified);if(e.user===PhDOE.user.login&&e.anonymousIdent===PhDOE.user.anonymousIdent){return""+c+""}else{return""+c+""}}else{return c}}},{header:_("Path"),dataIndex:"path",hidden:true}];ui.cmp._PendingTranslateGrid.menu=function(c){Ext.apply(this,c);this.init();ui.cmp._StaleFileGrid.menu.superclass.constructor.call(this)};Ext.extend(ui.cmp._PendingTranslateGrid.menu,Ext.menu.Menu,{init:function(){Ext.apply(this,{items:[{scope:this,text:""+_("Edit in a new tab")+"",iconCls:"iconTabNeedTranslate",handler:function(){this.grid.fireEvent("rowdblclick",this.grid,this.rowIdx,this.event)}}]})}});ui.cmp.PendingTranslateGrid=Ext.extend(Ext.grid.GridPanel,{view:ui.cmp._PendingTranslateGrid.view,loadMask:true,autoExpandColumn:"name",enableDragDrop:true,ddGroup:"mainPanelDDGroup",border:false,onRowContextMenu:function(c,f,d){d.stopEvent();c.getSelectionModel().selectRow(f);new ui.cmp._PendingTranslateGrid.menu({grid:c,event:d,rowIdx:f}).showAt(d.getXY())},onRowDblClick:function(c,d){this.openFile(c.store.getAt(d).data.id)},openFile:function(g){var e=this.store.getById(g),d=e.data.path,c=e.data.name,f=Ext.util.md5("FNT-"+PhDOE.user.lang+d+c),h;if(!Ext.getCmp("main-panel").findById("FNT-"+f)){if(PhDOE.user.conf.newFile.secondPanel=="google"||PhDOE.user.conf.newFile.secondPanel=="originalFile"){h=true}else{h=false}Ext.getCmp("main-panel").add({id:"FNT-"+f,layout:"border",title:c,originTitle:c,iconCls:"iconTabNeedTranslate",closable:true,tabLoaded:false,panTRANSLoaded:false,panTRANSSecondLoaded:!h,defaults:{split:true},tabTip:String.format(_("Need translate: in {0}"),d),listeners:{resize:function(j){if(PhDOE.user.conf.newFile.secondPanel=="google"){Ext.getCmp("FNT-GGTRANS-PANEL-"+f).setWidth(j.getWidth()/2)}if(PhDOE.user.conf.newFile.secondPanel=="originalFile"){Ext.getCmp("FNT-EN-PANEL-"+f).setWidth(j.getWidth()/2)}}},items:[{region:"west",xtype:"panel",title:_("Tools"),iconCls:"iconConf",collapsedIconCls:"iconConf",plugins:[Ext.ux.PanelCollapsedTitle],collapsible:true,collapsed:!PhDOE.user.conf.newFile.toolsPanelDisplay,layout:"fit",bodyBorder:false,width:PhDOE.user.conf.newFile.toolsPanelWidth||375,listeners:{collapse:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"newFile",itemName:"toolsPanelDisplay",value:false,notify:false})}},expand:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"newFile",itemName:"toolsPanelDisplay",value:true,notify:false})}},resize:function(j,k){if(this.ownerCt.tabLoaded&&k&&k!=PhDOE.user.conf.newFile.toolsPanelWidth){new ui.task.UpdateConfTask({module:"newFile",itemName:"toolsPanelWidth",value:k,notify:false})}}},items:{xtype:"tabpanel",activeTab:0,tabPosition:"bottom",defaults:{autoScroll:true},items:[new ui.cmp.DictionaryGrid({layout:"fit",title:_("Dictionary"),prefix:"FNT",fid:f})]}},new ui.cmp.FilePanel({id:"FNT-TRANS-PANEL-"+f,region:"center",title:_("New file: ")+PhDOE.user.lang+d+c,isTrans:true,prefix:"FNT",ftype:"TRANS",spellCheck:PhDOE.user.conf.newFile.enableSpellCheck,spellCheckConf:{module:"newFile",itemName:"enableSpellCheck"},fid:f,fpath:d,fname:c,lang:PhDOE.user.lang,parser:"xml",storeRecord:e,syncScrollCB:h,syncScroll:h,syncScrollConf:{module:"newFile",itemName:"syncScrollbars"}}),((PhDOE.user.conf.newFile.secondPanel=="google")?new ui.cmp.FilePanel({id:"FNT-GGTRANS-PANEL-"+f,region:"east",title:_("Automatic translation: ")+PhDOE.user.lang+d+c,isTrans:true,prefix:"FNT",ftype:"GGTRANS",fid:f,fpath:d,fname:c,readOnly:true,lang:PhDOE.user.lang,parser:"xml",storeRecord:e,syncScroll:true,syncScrollConf:{module:"newFile",itemName:"syncScrollbars"}}):false),((PhDOE.user.conf.newFile.secondPanel=="originalFile")?new ui.cmp.FilePanel({id:"FNT-EN-PANEL-"+f,region:"east",title:_("File: ")+"en"+d+c,prefix:"FNT",ftype:"EN",fid:f,fpath:d,fname:c,original:true,readOnly:true,lang:"en",parser:"xml",storeRecord:e,syncScroll:true,syncScrollConf:{module:"newFile",itemName:"syncScrollbars"}}):false)]})}Ext.getCmp("main-panel").setActiveTab("FNT-"+f)},initComponent:function(){Ext.apply(this,{columns:ui.cmp._PendingTranslateGrid.columns,store:ui.cmp._PendingTranslateGrid.store,tbar:[_("Filter: ")," ",new Ext.form.TwinTriggerField({id:"FNT-filter",width:180,hideTrigger1:true,enableKeyEvents:true,validateOnBlur:false,validationEvent:false,trigger1Class:"x-form-clear-trigger",trigger2Class:"x-form-search-trigger",listeners:{keypress:function(d,c){if(c.getKey()===c.ENTER){this.onTrigger2Click()}}},onTrigger1Click:function(){this.setValue("");this.triggers[0].hide();this.setSize(180,10);ui.cmp._PendingTranslateGrid.instance.store.clearFilter()},onTrigger2Click:function(){var c=this.getValue(),d;if(c===""||c.length<3){this.markInvalid(_("Your filter must contain at least 3 characters"));return}this.clearInvalid();this.triggers[0].show();this.setSize(180,10);d=new RegExp(c,"i");ui.cmp._PendingTranslateGrid.instance.store.filterBy(function(e){if(d.test(e.data.path)||d.test(e.data.name)){return true}else{return false}},this)}})]});ui.cmp.PendingTranslateGrid.superclass.initComponent.call(this);this.on("rowcontextmenu",this.onRowContextMenu,this);this.on("rowdblclick",this.onRowDblClick,this)}});ui.cmp._PendingTranslateGrid.instance=null;ui.cmp.PendingTranslateGrid.getInstance=function(c){if(!ui.cmp._PendingTranslateGrid.instance){if(!c){c={}}ui.cmp._PendingTranslateGrid.instance=new ui.cmp.PendingTranslateGrid(c)}return ui.cmp._PendingTranslateGrid.instance};Ext.namespace("ui","ui.cmp","ui.cmp._PortletBugs");ui.cmp._PortletBugs.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getOpenBugs"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"title"},{name:"link"},{name:"description"},{name:"xmlID"}]})});ui.cmp._PortletBugs.gridFormatTitle=function(c){return String.format('
{0}
',c)};ui.cmp._PortletBugs.gridColumns=[{id:"GridBugTitle",header:_("Title"),sortable:true,dataIndex:"title",renderer:ui.cmp._PortletBugs.gridFormatTitle}];ui.cmp._PortletBugs.gridView=new Ext.grid.GridView({forceFit:true,emptyText:'
'+_("You must manually load this data.
Use the refresh button !")+"
",deferEmptyText:false,enableRowBody:true,showPreview:false,getRowClass:function(c,e,d){if(this.showPreview){d.body="

"+c.data.description+"

";return"x-grid3-row-expanded"}return"x-grid3-row-collapsed"}});ui.cmp._PortletBugs.grid=Ext.extend(Ext.grid.GridPanel,{loadMask:true,autoScroll:true,height:250,autoExpandColumn:"GridBugTitle",id:"PortletBugs-grid-id",store:ui.cmp._PortletBugs.store,columns:ui.cmp._PortletBugs.gridColumns,view:ui.cmp._PortletBugs.gridView,sm:new Ext.grid.RowSelectionModel({singleSelect:true}),onRowDblClick:function(e,g){var c=e.store.getAt(g).data.id,d=e.store.getAt(g).data.link,f=e.store.getAt(g).data.title;if(!Ext.getCmp("main-panel").findById("bugs-"+c)){Ext.getCmp("main-panel").add({id:"bugs-"+c,xtype:"panel",title:Ext.util.Format.substr(f,0,20)+"...",tabTip:f,iconCls:"iconBugs",closable:true,layout:"fit",items:[new Ext.ux.IFrameComponent({id:"frame-bugs-"+c,url:d})]})}Ext.getCmp("main-panel").setActiveTab("bugs-"+c)},openRelatedFile:function(c){new ui.task.GetFileInfoByXmlID({xmlID:c})},onContextClick:function(c,f,d){if(!this.menu){this.menu=new Ext.menu.Menu({id:"submenu-bugs",items:[{scope:this,text:""+_("Open in a new Tab")+"",iconCls:"iconOpenInTab",handler:function(){this.fireEvent("rowdblclick",c,this.ctxIndex,d);this.menu.hide()}},"-",{scope:this,text:_("Refresh this grid"),iconCls:"iconRefresh",handler:function(){this.ctxIndex=null;ui.cmp._PortletBugs.reloadData()}},{scope:this,text:_("Open the related file"),iconCls:"iconAllFiles",id:"bugs-open-related-file",handler:function(){this.openRelatedFile(this.ctxXmlID)}}]})}this.getSelectionModel().selectRow(f);d.stopEvent();if(this.ctxIndex){this.ctxIndex=null}if(this.ctxXmlID){this.ctxXmlID=null}this.ctxIndex=f;this.ctxXmlID=c.store.getAt(this.ctxIndex).data.xmlID;this.menu.showAt(d.getXY());if(!this.ctxXmlID){Ext.getCmp("bugs-open-related-file").disable()}else{Ext.getCmp("bugs-open-related-file").enable()}},togglePreview:function(c){this.view.showPreview=c;this.view.refresh()},initComponent:function(c){this.tbar=[{text:_("Summary"),pressed:false,enableToggle:true,iconCls:"iconSummary",scope:this,toggleHandler:function(d,e){this.togglePreview(e)}}];ui.cmp._PortletBugs.grid.superclass.initComponent.call(this);Ext.apply(this,c);this.on("rowcontextmenu",this.onContextClick,this);this.on("rowdblclick",this.onRowDblClick,this)}});ui.cmp._PortletBugs.reloadData=function(){ui.cmp._PortletBugs.store.reload({callback:function(c,e,d){if(!d){Ext.getCmp("PortletBugs-grid-id").getView().mainBody.update('
'+_("Error when loading open bugs from Php.net !")+"
");Ext.get("PortletBugs-grid-defaultMess-id").highlight()}else{if(ui.cmp._PortletBugs.store.getTotalCount()===0){Ext.getCmp("PortletBugs-grid-id").getView().mainBody.update('
'+_("No open bugs")+"
");Ext.get("PortletBugs-grid-defaultMess-id").highlight()}}}})};ui.cmp.PortletBugs=Ext.extend(Ext.ux.Portlet,{title:"",iconCls:"iconBugs",layout:"fit",store:ui.cmp._PortletBugs.store,reloadData:ui.cmp._PortletBugs.reloadData,tools:[{id:"refresh",qtip:_("Refresh this grid"),handler:function(){ui.cmp._PortletBugs.reloadData()}}],listeners:{expand:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletBugsCollapsed",value:false,notify:false})}},collapse:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletBugsCollapsed",value:true,notify:false})}},afterrender:function(c){if(PhDOE.user.conf.portletBugsCollapsed){c.collapse()}else{c.expand()}}},initComponent:function(c){this.id="portletBugs";this.title=String.format(_("Open bugs for {0}"),"doc-"+this.lang);Ext.apply(this,c);ui.cmp.PortletBugs.superclass.initComponent.apply(this);this.add(new ui.cmp._PortletBugs.grid())}});ui.cmp._PortletBugs.instance=null;ui.cmp.PortletBugs.getInstance=function(c){if(!ui.cmp._PortletBugs.instance){if(!c){c={}}ui.cmp._PortletBugs.instance=new ui.cmp.PortletBugs(c)}return ui.cmp._PortletBugs.instance};Ext.namespace("ui","ui.cmp","ui.cmp._PortletInfo");ui.cmp._PortletInfo.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getInfos"}),baseParams:{start:0,limit:10},reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"field"},{name:"value"},{name:"date",type:"date",dateFormat:"Y-m-d H:i:s"},{name:"elapsedTime"}]}),listeners:{load:function(c){var e=c.data.items[0].data.date;PhDOE.lastInfoDate=e.format("Y-m-d H:i:s")}}});ui.cmp._PortletInfo.store.setDefaultSort("date","desc");ui.cmp._PortletInfo.typeRenderer=function(l,j,g){var d,c,m,o,e,k,h,f;switch(l){case"updateData":d=g.data.value.user;return String.format(_("{0} updated app's data"),d);break;case"changeFilesOwner":d=g.data.value.user;return String.format(_("{0} changed file's owner"),d);break;case"checkEntities":d=g.data.value.user;return String.format(_("{0} check all entitites"),d);break;case"logout":d=g.data.value.user;return String.format(_("{0} logged out"),d);break;case"login":d=g.data.value.user;c=g.data.value.lang;authService=g.data.value.authService;f="";if(authService=="google"){f=' '}else{if(authService=="facebook"){f=' '}}return f+String.format(_("{0} is logged in using the {1} language"),d,c.ucFirst());break;case"commitFolders":d=g.data.value.user;c=g.data.value.lang;m=g.data.value.nbFolders;return String.format(_("{0} committed {1} new folder(s) in the {2} language"),d,m,c.ucFirst());break;case"commitFiles":d=g.data.value.user;c=g.data.value.lang;o=g.data.value.nbFilesCreate;e=g.data.value.nbFilesDelete;k=g.data.value.nbFilesUpdate;h=o+e+k;return String.format(_("{0} committed {1} file(s) ({2} new, {3} update, {4} delete) in the language {5}"),d,h,o,k,e,c.ucFirst());break}};ui.cmp._PortletInfo.gridColumns=[new Ext.grid.RowNumberer(),{id:"Type",header:_("Type"),width:180,sortable:true,dataIndex:"field",renderer:ui.cmp._PortletInfo.typeRenderer},{header:_("Since"),width:110,sortable:false,dataIndex:"elapsedTime",renderer:function(d,c,e){if(!d){d=_("Less than one second")}else{d=String.format(_("{0} "+d.units),d.value)}return""+d+""}},{header:_("Date"),width:110,sortable:true,dataIndex:"date",hidden:true,renderer:Ext.util.Format.dateRenderer(_("Y-m-d, H:i"))}];ui.cmp._PortletInfo.grid=Ext.extend(Ext.grid.GridPanel,{autoExpandColumn:"Type",loadMask:true,autoScroll:true,autoHeight:true,store:ui.cmp._PortletInfo.store,columns:ui.cmp._PortletInfo.gridColumns,view:ui.cmp._PortletInfo.gridView,initComponent:function(){Ext.apply(this,{bbar:new Ext.PagingToolbar({pageSize:10,store:this.store,displayInfo:true})});ui.cmp._PortletInfo.grid.superclass.initComponent.call(this);this.on("rowdblclick",this.onRowdblclick,this)}});ui.cmp.PortletInfo=Ext.extend(Ext.ux.Portlet,{title:_("Information"),iconCls:"iconInfo",layout:"fit",store:ui.cmp._PortletInfo.store,tools:[{id:"refresh",qtip:_("Refresh this grid"),handler:function(){ui.cmp._PortletInfo.store.reload()}}],listeners:{expand:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletInfoCollapsed",value:false,notify:false})}},collapse:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletInfoCollapsed",value:true,notify:false})}},afterrender:function(c){if(PhDOE.user.conf.portletInfoCollapsed){c.collapse()}else{c.expand()}}},initComponent:function(c){this.id="portletInfo";Ext.apply(this,c);ui.cmp.PortletInfo.superclass.initComponent.apply(this);this.add(new ui.cmp._PortletInfo.grid())}});ui.cmp._PortletInfo.instance=null;ui.cmp.PortletInfo.getInstance=function(c){if(!ui.cmp._PortletInfo.instance){if(!c){c={}}ui.cmp._PortletInfo.instance=new ui.cmp.PortletInfo(c)}return ui.cmp._PortletInfo.instance};Ext.namespace("ui","ui.cmp","ui.cmp._PortletLocalMail");ui.cmp._PortletLocalMail.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getLastNews"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"title"},{name:"link"},{name:"description"},{name:"pubDate",type:"date",dateFormat:"Y/m/d H:i:s"}]})});ui.cmp._PortletLocalMail.store.setDefaultSort("pubDate","desc");ui.cmp._PortletLocalMail.columns=[new Ext.grid.RowNumberer(),{id:"GridMailingTitle",header:_("Title"),sortable:true,dataIndex:"title"},{header:_("By"),width:100,sortable:true,dataIndex:"description"},{header:_("Date"),width:100,sortable:true,dataIndex:"pubDate",renderer:Ext.util.Format.dateRenderer(_("Y-m-d, H:i"))}];ui.cmp._PortletLocalMail.grid=Ext.extend(Ext.grid.GridPanel,{loadMask:true,autoScroll:true,height:250,autoExpandColumn:"GridMailingTitle",id:"PortletLocalMail-grid-id",store:ui.cmp._PortletLocalMail.store,columns:ui.cmp._PortletLocalMail.columns,sm:new Ext.grid.RowSelectionModel({singleSelect:true}),view:new Ext.grid.GridView({forceFit:true,enableRowBody:true,ignoreAdd:true,emptyText:'
'+_("You must manually load this data.
Use the refresh button !")+"
",deferEmptyText:false}),onRowDblClick:function(d,g){var c=d.store.getAt(g).data.pubDate,f=d.store.getAt(g).data.link,e=d.store.getAt(g).data.title;if(!Ext.getCmp("main-panel").findById("mail-"+c)){Ext.getCmp("main-panel").add({xtype:"panel",id:"mail-"+c,title:Ext.util.Format.substr(e,0,20)+"...",tabTip:e,iconCls:"iconMailing",closable:true,layout:"fit",items:[new Ext.ux.IFrameComponent({id:"frame-mail-"+c,url:f})]})}Ext.getCmp("main-panel").setActiveTab("mail-"+c)},onContextClick:function(c,f,d){if(!this.menu){this.menu=new Ext.menu.Menu({id:"submenu-mail",items:[{scope:this,text:""+_("Open in a new Tab")+"",iconCls:"iconOpenInTab",handler:function(){this.fireEvent("rowdblclick",c,this.ctxIndex,d);this.menu.hide()}},"-",{scope:this,text:_("Refresh this grid"),iconCls:"iconRefresh",handler:function(){this.ctxIndex=null;ui.cmp._PortletLocalMail.reloadData()}}]})}this.getSelectionModel().selectRow(f);d.stopEvent();if(this.ctxIndex){this.ctxIndex=null}this.ctxIndex=f;this.menu.showAt(d.getXY())},initComponent:function(c){ui.cmp._PortletLocalMail.grid.superclass.initComponent.call(this);Ext.apply(this,c);this.on("rowcontextmenu",this.onContextClick,this);this.on("rowdblclick",this.onRowDblClick,this)}});ui.cmp._PortletLocalMail.reloadData=function(){ui.cmp._PortletLocalMail.store.reload({callback:function(d,e,c){if(!c){Ext.getCmp("PortletLocalMail-grid-id").getView().mainBody.update('
'+_("Error when loading mails from this mailing list !")+"
");Ext.get("PortletLocalMail-grid-defaultMess-id").highlight()}}})};ui.cmp.PortletLocalMail=Ext.extend(Ext.ux.Portlet,{title:"",iconCls:"iconMailing",layout:"fit",store:ui.cmp._PortletLocalMail.store,reloadData:ui.cmp._PortletLocalMail.reloadData,tools:[{id:"refresh",qtip:_("Refresh this grid"),handler:function(){ui.cmp._PortletLocalMail.reloadData()}}],listeners:{expand:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletLocalMailCollapsed",value:false,notify:false})}},collapse:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletLocalMailCollapsed",value:true,notify:false})}},afterrender:function(c){if(PhDOE.user.conf.portletLocalMailCollapsed){c.collapse()}else{c.expand()}}},initComponent:function(c){this.id="portletLocalMail";Ext.apply(this,c);ui.cmp.PortletLocalMail.superclass.initComponent.apply(this);this.title=String.format(_("Mail from {0}"),"doc-"+this.lang);this.add(new ui.cmp._PortletLocalMail.grid())}});ui.cmp._PortletLocalMail.instance=null;ui.cmp.PortletLocalMail.getInstance=function(c){if(!ui.cmp._PortletLocalMail.instance){if(!c){c={}}ui.cmp._PortletLocalMail.instance=new ui.cmp.PortletLocalMail(c)}return ui.cmp._PortletLocalMail.instance};Ext.namespace("ui","ui.cmp","ui.cmp._PortletSummary");ui.cmp._PortletSummary.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getSummaryInfo"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"libel"},{name:"nbFiles"},{name:"percentFiles"},{name:"sizeFiles"},{name:"percentSize"}]}),listeners:{load:function(){this.each(function(c){switch(c.id){case 1:c.set("libel",_("Up to date files"));break;case 2:c.set("libel",_("Stale files"));break;case 3:c.set("libel",_("Files available for translation"));break;case 4:c.set("libel",_("Total"));break;default:c.set("libel","");break}c.commit()})}}});ui.cmp._PortletSummary.gridColumns=[new Ext.grid.RowNumberer(),{id:"StatusType",header:_("File status type"),width:180,sortable:true,dataIndex:"libel"},{header:_("Number of files"),width:110,sortable:true,dataIndex:"nbFiles"},{header:_("Percent of files"),width:110,sortable:true,dataIndex:"percentFiles"},{header:_("Size of files (kB)"),width:110,sortable:true,dataIndex:"sizeFiles"},{header:_("Percent of size"),width:110,sortable:true,dataIndex:"percentSize"}];ui.cmp._PortletSummary.gridView=new Ext.grid.GridView({getRowClass:function(c){switch(c.data.id){case 1:return"summary_1";case 2:return"summary_2";case 3:return"summary_3";case 4:return"summary_4";default:return""}}});ui.cmp._PortletSummary.grid=Ext.extend(Ext.grid.GridPanel,{loadMask:true,autoScroll:true,autoHeight:true,store:ui.cmp._PortletSummary.store,columns:ui.cmp._PortletSummary.gridColumns,view:ui.cmp._PortletSummary.gridView,onRowdblclick:function(c,e){var d=c.store.getAt(e).data.id;if(d===2){Ext.getCmp("acc-need-update").expand()}if(d===3){Ext.getCmp("acc-need-translate").expand()}},initComponent:function(c){ui.cmp._PortletSummary.grid.superclass.initComponent.call(this);Ext.apply(this,c);this.on("rowdblclick",this.onRowdblclick,this)}});ui.cmp.PortletSummary=Ext.extend(Ext.ux.Portlet,{title:_("Summary"),iconCls:"",layout:"fit",store:ui.cmp._PortletSummary.store,tools:[{id:"refresh",qtip:_("Refresh this grid"),handler:function(){ui.cmp._PortletSummary.store.reload()}}],listeners:{expand:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletSummaryCollapsed",value:false,notify:false})}},collapse:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletSummaryCollapsed",value:true,notify:false})}}},initComponent:function(c){this.id="portletSummary";Ext.apply(this,c);ui.cmp.PortletSummary.superclass.initComponent.apply(this);this.add(new ui.cmp._PortletSummary.grid())},afterRender:function(){ui.cmp.PortletSummary.superclass.afterRender.call(this);var c={cs:"cz",sr:"rs",sv:"se"};this.header.insertFirst({tag:"div",id:Ext.id(),style:"float: left; margin-right: 2px;",cls:"flags flag-"+(c[this.lang]||this.lang)},"first");if(PhDOE.user.conf.portletSummaryCollapsed){this.collapse()}else{this.expand()}}});ui.cmp._PortletSummary.instance=null;ui.cmp.PortletSummary.getInstance=function(c){if(!ui.cmp._PortletSummary.instance){if(!c){c={}}ui.cmp._PortletSummary.instance=new ui.cmp.PortletSummary(c)}return ui.cmp._PortletSummary.instance};Ext.namespace("ui","ui.cmp","ui.cmp._PortletTranslationGraph");function renderLibel(c){return _(c)}ui.cmp._PortletTranslationGraph.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getGraphLang"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"libel",convert:renderLibel},{name:"total"}]})});ui.cmp._PortletTranslationGraph.chart=Ext.extend(Ext.chart.PieChart,{height:400,url:"js/ExtJs/resources/charts.swf",dataField:"total",categoryField:"libel",store:ui.cmp._PortletTranslationGraph.store,series:[{style:{colors:["#68D888","#FF6347","#EEE8AA"]}}],extraStyle:{legend:{display:"bottom",padding:5,font:{family:"Tahoma",size:13}}},initComponent:function(c){ui.cmp._PortletTranslationGraph.chart.superclass.initComponent.call(this);Ext.apply(this,c)}});ui.cmp.PortletTranslationGraph=Ext.extend(Ext.ux.Portlet,{title:_("Graphics"),iconCls:"iconGraphic",layout:"fit",store:ui.cmp._PortletTranslationGraph.store,tools:[{id:"refresh",qtip:_("Refresh this graph"),handler:function(){ui.cmp._PortletTranslationGraph.store.reload()}}],initComponent:function(c){this.id="portletTranslationGraph";Ext.apply(this,c);ui.cmp.PortletTranslationGraph.superclass.initComponent.apply(this);this.add(new ui.cmp._PortletTranslationGraph.chart())}});ui.cmp._PortletTranslationGraph.instance=null;ui.cmp.PortletTranslationGraph.getInstance=function(c){if(!ui.cmp._PortletTranslationGraph.instance){if(!c){c={}}ui.cmp._PortletTranslationGraph.instance=new ui.cmp.PortletTranslationGraph(c)}return ui.cmp._PortletTranslationGraph.instance};Ext.namespace("ui","ui.cmp","ui.cmp._PortletTranslationsGraph");ui.cmp._PortletTranslationsGraph.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getGraphLangs"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"libel",type:"string"},{name:"fullLibel",type:"string"},{name:"total",type:"int"},{name:"percent",type:"float"}]})});ui.cmp._PortletTranslationsGraph.chart=Ext.extend(Ext.chart.ColumnChart,{height:400,url:"js/ExtJs/resources/charts.swf",xField:"libel",tipRenderer:function(d,c){return _("Lang:")+" "+c.data.fullLibel+"\r"+_("Total:")+" "+c.data.total+" "+_("files")+" ("+c.data.percent+"%)"},series:[{type:"column",displayName:"Total",yField:"total",style:{image:"themes/img/bar.gif",mode:"stretch",color:10075112}}],store:ui.cmp._PortletTranslationsGraph.store,initComponent:function(c){ui.cmp._PortletTranslationsGraph.chart.superclass.initComponent.call(this);Ext.apply(this,c)}});ui.cmp.PortletTranslationsGraph=Ext.extend(Ext.ux.Portlet,{title:_("Graphics for all languages"),iconCls:"iconGraphic",layout:"fit",store:ui.cmp._PortletTranslationsGraph.store,tools:[{id:"refresh",qtip:_("Refresh this graph"),handler:function(){ui.cmp._PortletTranslationsGraph.store.reload()}}],initComponent:function(c){this.id="portletTranslationsGraph";Ext.apply(this,c);ui.cmp.PortletTranslationsGraph.superclass.initComponent.apply(this);this.add(new ui.cmp._PortletTranslationsGraph.chart())}});ui.cmp._PortletTranslationsGraph.instance=null;ui.cmp.PortletTranslationsGraph.getInstance=function(c){if(!ui.cmp._PortletTranslationsGraph.instance){if(!c){c={}}ui.cmp._PortletTranslationsGraph.instance=new ui.cmp.PortletTranslationsGraph(c)}return ui.cmp._PortletTranslationsGraph.instance};Ext.namespace("ui","ui.cmp","ui.cmp._PortletTranslator","ui.cmp._PortletReviewer");ui.cmp._PortletTranslator.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getTranslatorInfo"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"name"},{name:"email",mapping:"mail"},{name:"nick"},{name:"vcs"},{name:"uptodate",type:"int"},{name:"stale",type:"int"},{name:"sum",type:"int"}]}),listeners:{load:function(){var d=this.getCount(),c=d*20;ui.cmp.PortletTranslator.getInstance().setHeight(c+124);ui.cmp.PortletTranslator.getInstance().doLayout()}}});ui.cmp._PortletTranslator.store.setDefaultSort("nick","asc");ui.cmp._PortletReviewer.store=new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getReviewerInfo"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"name"},{name:"email",mapping:"mail"},{name:"nick"},{name:"vcs"},{name:"reviewedUptodate",type:"int"},{name:"reviewedStale",type:"int"},{name:"reviewedSum",type:"int"}]})});ui.cmp._PortletReviewer.store.setDefaultSort("nick","asc");ui.cmp._PortletTranslator.translatorSumRenderer=function(c){if(c){c=(c===0||c>1)?c:1;return String.format("("+_("{0} Translators")+")",c)}else{return false}};ui.cmp._PortletReviewer.translatorSumRenderer=function(c){if(c){c=(c===0||c>1)?c:1;return String.format("("+_("{0} Reviewers")+")",c)}else{return _("No reviewer")}};ui.cmp._PortletTranslator.uptodateRenderer=function(c){if(c==="0"){return false}else{return''+c+""}};ui.cmp._PortletReviewer.uptodateRenderer=function(c){if(c==="0"){return false}else{return''+c+""}};ui.cmp._PortletTranslator.staleRenderer=function(c){if(c==="0"){return false}else{return''+c+""}};ui.cmp._PortletReviewer.staleRenderer=function(c){if(c==="0"){return false}else{return''+c+""}};ui.cmp._PortletTranslator.sumRenderer=function(c){return(c==="0")?"":c};ui.cmp._PortletReviewer.sumRenderer=function(c){return(c==="0")?"":c};ui.cmp._PortletTranslator.gridColumns=[new Ext.grid.RowNumberer(),{id:"GridTransName",header:_("Name"),sortable:true,dataIndex:"name",summaryType:"count",summaryRenderer:ui.cmp._PortletTranslator.translatorSumRenderer},{header:_("Email"),width:110,sortable:true,dataIndex:"email"},{header:_("Nick"),width:70,sortable:true,dataIndex:"nick"},{header:_("VCS"),width:45,sortable:true,dataIndex:"vcs"},{header:_("UptoDate"),width:60,sortable:true,renderer:ui.cmp._PortletTranslator.uptodateRenderer,dataIndex:"uptodate",summaryType:"sum"},{header:_("Stale"),width:90,sortable:true,renderer:ui.cmp._PortletTranslator.staleRenderer,dataIndex:"stale",summaryType:"sum"},{header:_("Sum"),width:50,sortable:true,renderer:ui.cmp._PortletTranslator.sumRenderer,dataIndex:"sum",summaryType:"sum"}];ui.cmp._PortletReviewer.gridColumns=[new Ext.grid.RowNumberer(),{id:"GridTransName",header:_("Name"),sortable:true,dataIndex:"name",summaryType:"count",summaryRenderer:ui.cmp._PortletReviewer.translatorSumRenderer},{header:_("Email"),width:110,sortable:true,dataIndex:"email"},{header:_("Nick"),width:70,sortable:true,dataIndex:"nick"},{header:_("VCS"),width:45,sortable:true,dataIndex:"vcs"},{header:_("Reviewed"),width:60,sortable:true,renderer:ui.cmp._PortletReviewer.uptodateRenderer,dataIndex:"reviewedUptodate",summaryType:"sum"},{header:_("Must be reviewed"),width:90,sortable:true,renderer:ui.cmp._PortletReviewer.staleRenderer,dataIndex:"reviewedStale",summaryType:"sum"},{header:_("Sum"),width:50,sortable:true,renderer:ui.cmp._PortletReviewer.sumRenderer,dataIndex:"reviewedSum",summaryType:"sum"}];ui.cmp._PortletTranslator.grid=Ext.extend(Ext.grid.GridPanel,{title:_("Translators"),loadMask:true,autoScroll:true,autoHeight:true,plugins:[new Ext.ux.grid.GridSummary()],store:ui.cmp._PortletTranslator.store,columns:ui.cmp._PortletTranslator.gridColumns,autoExpandColumn:"GridTransName",sm:new Ext.grid.RowSelectionModel({singleSelect:true}),lang:this.lang,EmailPrompt:new ui.cmp.EmailPrompt(),onRowDblClick:function(d,e){this.getSelectionModel().selectRow(e);if(this.ctxTranslatorName){this.ctxTranslatorEmail=null;this.ctxTranslatorName=null}this.ctxTranslatorEmail=this.store.getAt(e).data.email;this.ctxTranslatorName=this.store.getAt(e).data.name;var c=this.store.getAt(e).data.nick;if(c==="nobody"){return}this.EmailPrompt.setData(this.ctxTranslatorName,this.ctxTranslatorEmail);this.EmailPrompt.show("lastUpdateTime")},onContextClick:function(d,g,f){if(!this.menu){this.menu=new Ext.menu.Menu({id:"submenu-translators",items:[{scope:this,text:"",iconCls:"iconSendEmail",handler:function(){this.EmailPrompt.setData(this.ctxTranslatorName,this.ctxTranslatorEmail);this.EmailPrompt.show("lastUpdateTime")}},"-",{scope:this,text:String.format(_("Send an email to the {0}"),String.format(PhDOE.app.conf.projectMailList,this.lang)),iconCls:"iconSendEmail",handler:function(){this.EmailPrompt.setData("Php Doc Team "+this.lang,String.format(PhDOE.app.conf.projectMailList,this.lang));this.EmailPrompt.show("lastUpdateTime")}}]})}this.getSelectionModel().selectRow(g);f.stopEvent();if(this.ctxTranslatorName){this.ctxTranslatorName=null;this.ctxTranslatorEmail=null}this.ctxTranslatorName=this.store.getAt(g).data.name;this.ctxTranslatorEmail=this.store.getAt(g).data.email;var c=this.store.getAt(g).data.nick;if(c==="nobody"){return}this.menu.items.items[0].setText(""+String.format(_("Send an email to {0}"),this.ctxTranslatorName)+"");this.menu.showAt(f.getXY())},initComponent:function(c){ui.cmp._PortletTranslator.grid.superclass.initComponent.call(this);Ext.apply(this,c);this.on("rowcontextmenu",this.onContextClick,this);this.on("rowdblclick",this.onRowDblClick,this)}});ui.cmp._PortletReviewer.grid=Ext.extend(Ext.grid.GridPanel,{title:_("Reviewers"),loadMask:true,autoScroll:true,autoHeight:true,plugins:[new Ext.ux.grid.GridSummary()],store:ui.cmp._PortletReviewer.store,columns:ui.cmp._PortletReviewer.gridColumns,autoExpandColumn:"GridTransName",sm:new Ext.grid.RowSelectionModel({singleSelect:true}),lang:this.lang,EmailPrompt:new ui.cmp.EmailPrompt(),onRowDblClick:function(d,e){this.getSelectionModel().selectRow(e);if(this.ctxTranslatorName){this.ctxTranslatorEmail=null;this.ctxTranslatorName=null}this.ctxTranslatorEmail=this.store.getAt(e).data.email;this.ctxTranslatorName=this.store.getAt(e).data.name;var c=this.store.getAt(e).data.nick;if(c==="nobody"){return}this.EmailPrompt.setData(this.ctxTranslatorName,this.ctxTranslatorEmail);this.EmailPrompt.show("lastUpdateTime")},onContextClick:function(d,g,f){if(!this.menu){this.menu=new Ext.menu.Menu({id:"submenu-translators",items:[{scope:this,text:"",iconCls:"iconSendEmail",handler:function(){this.EmailPrompt.setData(this.ctxTranslatorName,this.ctxTranslatorEmail);this.EmailPrompt.show("lastUpdateTime")}},"-",{scope:this,text:String.format(_("Send an email to the {0}"),String.format(PhDOE.app.conf.projectMailList,this.lang)),iconCls:"iconSendEmail",handler:function(){this.EmailPrompt.setData("Php Doc Team "+this.lang,String.format(PhDOE.app.conf.projectMailList,this.lang));this.EmailPrompt.show("lastUpdateTime")}}]})}this.getSelectionModel().selectRow(g);f.stopEvent();if(this.ctxTranslatorName){this.ctxTranslatorName=null;this.ctxTranslatorEmail=null}this.ctxTranslatorName=this.store.getAt(g).data.name;this.ctxTranslatorEmail=this.store.getAt(g).data.email;var c=this.store.getAt(g).data.nick;if(c==="nobody"){return}this.menu.items.items[0].setText(""+String.format(_("Send an email to {0}"),this.ctxTranslatorName)+"");this.menu.showAt(f.getXY())},initComponent:function(c){ui.cmp._PortletReviewer.grid.superclass.initComponent.call(this);Ext.apply(this,c);this.on("rowcontextmenu",this.onContextClick,this);this.on("rowdblclick",this.onRowDblClick,this)}});ui.cmp.PortletTranslator=Ext.extend(Ext.ux.Portlet,{title:_("Translators & Reviewer"),iconCls:"iconTranslator",layout:"fit",storeTranslator:ui.cmp._PortletTranslator.store,storeReviewer:ui.cmp._PortletReviewer.store,tools:[{id:"refresh",qtip:_("Refresh this grid"),handler:function(){ui.cmp._PortletTranslator.store.reload({callback:function(){ui.cmp._PortletReviewer.store.reload()}})}}],listeners:{expand:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletTranslatorCollapsed",value:false,notify:false})}},collapse:function(){if(PhDOE.app.loaded){new ui.task.UpdateConfTask({item:"portletTranslatorCollapsed",value:true,notify:false})}},afterrender:function(c){if(PhDOE.user.conf.portletTranslatorCollapsed){c.collapse()}else{c.expand()}}},initComponent:function(c){this.id="portletTranslator";Ext.apply(this,c);ui.cmp.PortletTranslator.superclass.initComponent.apply(this);this.add({xtype:"tabpanel",activeTab:0,border:false,height:200,tabPosition:"bottom",autoScroll:true,items:[new ui.cmp._PortletTranslator.grid({lang:this.lang}),new ui.cmp._PortletReviewer.grid({lang:this.lang})]})}});ui.cmp._PortletTranslator.instance=null;ui.cmp.PortletTranslator.getInstance=function(c){if(!ui.cmp._PortletTranslator.instance){if(!c){c={}}ui.cmp._PortletTranslator.instance=new ui.cmp.PortletTranslator(c)}return ui.cmp._PortletTranslator.instance};Ext.namespace("ui","ui.cmp");ui.cmp.PreviewFile=Ext.extend(Ext.Window,{id:"winPreviewFile",layout:"fit",title:_("Preview"),iconCls:"iconView",closable:true,closeAction:"close",maximized:true,modal:true,buttons:[{text:_("Close"),handler:function(){this.ownerCt.ownerCt.close()}}],initComponent:function(){var c=this;ui.cmp.PreviewFile.superclass.initComponent.call(this);XHR({params:{task:"previewFile",path:this.path},success:function(d){var f=Ext.util.JSON.decode(d.responseText),e;f.url=f.url+"?"+Math.random();e=new Ext.ux.IFrameComponent({id:"frame-previewFile",url:f.url});c.add(e);c.show()},failure:function(){}})}});Ext.namespace("ui","ui.cmp","ui.cmp._RepositoryTree");ui.cmp._RepositoryTree.root={nodeType:"async",id:"/",text:_("Repository"),draggable:false};ui.cmp._RepositoryTree.loader=new Ext.tree.TreeLoader({dataUrl:"./do/getAllFiles"});ui.cmp._RepositoryTree.winAddNewFile=Ext.extend(Ext.Window,{title:_("Add a new file"),iconCls:"iconFilesNeedTranslate",id:"win-add-new-file",layout:"form",width:350,height:170,resizable:false,modal:true,bodyStyle:"padding:5px 5px 0",labelWidth:150,buttons:[{id:"win-add-new-file-btn",text:_("Open the editor"),disabled:true,handler:function(){var d=Ext.getCmp("win-add-new-file"),f=d.node.id,c=d.items.items[1].getValue(),e=d.items.items[2].getValue();if(d.node.findChild("id",f+"/"+c)){PhDOE.winForbidden("file_already_exist");return true}d.openFile(f+"/",c,e);d.close();return true}}],openFile:function(e,c,j){var h=Ext.util.md5("FNT-"+e+c),g={data:{fileModified:false,node:this.node}},d=e.split("/"),f;d.shift();f=d[0];d.shift();d.pop();e="/"+d.join("/")+"/";if(e==="//"){e="/"}h=Ext.util.md5("FNT-"+e+c);if(!Ext.getCmp("main-panel").findById("FNT-"+h)){Ext.getCmp("main-panel").add({id:"FNT-"+h,layout:"border",title:c,originTitle:c,iconCls:"iconTabNeedTranslate",closable:true,tabLoaded:false,panTRANSLoaded:false,panGGTRANSLoaded:true,defaults:{split:true},tabTip:String.format(_("New file: in {0}"),f+e),items:[new ui.cmp.FilePanel({id:"FNT-NEW-PANEL-"+h,region:"center",title:_("New file: ")+f+e+c,isTrans:true,prefix:"FNT",ftype:"NEW",fid:h,fpath:e,fname:c,lang:f,parser:"xml",storeRecord:g,syncScrollCB:false,syncScroll:false,skeleton:j})]})}Ext.getCmp("main-panel").setActiveTab("FNT-"+h)},initComponent:function(){Ext.apply(this,{items:[{xtype:"displayfield",fieldLabel:_("Parent Folder"),value:this.node.id},{xtype:"textfield",fieldLabel:_("Name for the new file"),name:"newFolderName",listeners:{valid:function(){Ext.getCmp("win-add-new-file-btn").enable()},invalid:function(){Ext.getCmp("win-add-new-file-btn").disable()}}},{xtype:"combo",triggerAction:"all",width:160,editable:false,store:new Ext.data.Store({proxy:new Ext.data.HttpProxy({url:"./do/getSkeletonsNames"}),reader:new Ext.data.JsonReader({root:"Items",idProperty:"name",fields:[{name:"name"},{name:"path"}]})}),listeners:{select:function(f,d,e){if(f.ownerCt.items.items[1].getValue()===""){f.ownerCt.items.items[1].setValue(d.data.name)}}},valueField:"path",displayField:"name",fieldLabel:_("Chose a skeleton")}]});ui.cmp._RepositoryTree.winAddNewFile.superclass.initComponent.call(this)}});ui.cmp._RepositoryTree.winAddNewFolder=Ext.extend(Ext.Window,{title:_("Add a new folder"),iconCls:"iconFolderNew",id:"win-add-new-folder",layout:"form",width:350,height:200,resizable:false,modal:true,bodyStyle:"padding:5px 5px 0",labelWidth:150,buttons:[{id:"win-add-new-folder-btn",text:"Add",disabled:true,handler:function(){var c=Ext.getCmp("win-add-new-folder"),e=c.node.id,d=c.items.items[1].getValue();XHR({params:{task:"addNewFolder",parentFolder:e,newFolderName:d},success:function(){Ext.getCmp("win-add-new-folder").close();c.node.reload();PhDOE.notify("info",_("Folder created"),String.format(_("Folder

{0}

was created sucessfully under {1} !"),d,e))},failure:function(f){var g=Ext.util.JSON.decode(f.responseText);if(g.type){PhDOE.winForbidden(g.type)}else{PhDOE.winForbidden()}}})}}],initComponent:function(){Ext.apply(this,{items:[{xtype:"displayfield",fieldLabel:_("Parent Folder"),value:this.node.id},{xtype:"textfield",fieldLabel:_("Name for the new folder"),name:"newFolderName",vtype:"alphanum",listeners:{valid:function(){Ext.getCmp("win-add-new-folder-btn").enable()},invalid:function(){Ext.getCmp("win-add-new-folder-btn").disable()}}},{xtype:"box",html:_("Info: This new folder won't be commited until a new file will be commited into it. If you don't commit any new file into it until 8 days, it will be automatically deleted.")}]});ui.cmp._RepositoryTree.winAddNewFolder.superclass.initComponent.call(this)}});Ext.namespace("ui.cmp._RepositoryTree.menu");ui.cmp._RepositoryTree.menu.folder=function(c){Ext.apply(this,c);this.init();ui.cmp._RepositoryTree.menu.folder.superclass.constructor.call(this)};Ext.extend(ui.cmp._RepositoryTree.menu.folder,Ext.menu.Menu,{init:function(){Ext.apply(this,{items:[{text:(this.node.isExpanded())?""+_("Collapse")+"":""+_("Expand")+"",iconCls:"iconFolderClose",scope:this,handler:function(){if(this.node.isExpanded()){this.node.collapse()}else{this.node.expand()}}},"-",{text:_("Add a new folder"),iconCls:"iconFolderNew",hidden:(this.node.id==="/"||(Ext.util.Format.substr(this.node.id,0,3)!=="/en"&&Ext.util.Format.substr(this.node.id,0,9)!=="/doc-base")),scope:this,handler:function(){this.node.expand();var c=new ui.cmp._RepositoryTree.winAddNewFolder({node:this.node});c.show(this.node.ui.getEl())}},{text:_("Add a new file"),iconCls:"iconFilesNeedTranslate",hidden:(this.node.id==="/"||(Ext.util.Format.substr(this.node.id,0,3)!=="/en"&&Ext.util.Format.substr(this.node.id,0,9)!=="/doc-base")),scope:this,handler:function(){this.node.expand();var c=new ui.cmp._RepositoryTree.winAddNewFile({node:this.node});c.show(this.node.ui.getEl())}}]})}});ui.cmp._RepositoryTree.menu.file=function(c){Ext.apply(this,c);this.init();ui.cmp._RepositoryTree.menu.file.superclass.constructor.call(this)};Ext.extend(ui.cmp._RepositoryTree.menu.file,Ext.menu.Menu,{init:function(){var c=this.node.attributes.text,d=this.node.attributes.id.split("/"),f,e;d.shift();f=d[0];d.shift();d.pop();e=d.join("/")+"/";Ext.apply(this,{items:[{text:""+_("Edit in a new tab")+"",iconCls:"iconTabNeedReviewed",scope:this,handler:function(){ui.cmp._RepositoryTree.instance.fireEvent("dblclick",this.node)}},{hidden:(this.node.attributes.from==="search"||PhDOE.user.lang==="en"),text:(f==="en")?String.format(_("Open the same file in {0}"),Ext.util.Format.uppercase(PhDOE.user.lang)):String.format(_("Open the same file in {0}"),"EN"),iconCls:"iconTabNeedReviewed",scope:this,handler:function(){if(f==="en"){ui.cmp._RepositoryTree.instance.openFile("byPath",PhDOE.user.lang+"/"+e,c)}else{ui.cmp._RepositoryTree.instance.openFile("byPath","en/"+e,c)}}}]})}});ui.cmp.RepositoryTree=Ext.extend(Ext.ux.MultiSelectTreePanel,{animate:true,enableDD:true,ddGroup:"mainPanelDDGroup",useArrows:true,autoScroll:true,border:false,containerScroll:true,root:ui.cmp._RepositoryTree.root,loader:ui.cmp._RepositoryTree.loader,onContextMenu:function(c,d){d.stopEvent();c.select();if(c.attributes.type==="folder"||c.isRoot){new ui.cmp._RepositoryTree.menu.folder({node:c}).showAt(d.getXY())}else{if(c.attributes.type==="file"){new ui.cmp._RepositoryTree.menu.file({node:c}).showAt(d.getXY())}}},onDblClick:function(c){if(c.attributes.type==="file"){this.openFile("byId",c.attributes.id,false)}},openFile:function(r,m,g){if(r==="byPath"){Ext.getCmp("acc-all-files").expand();var f=m,j=g,u=f.split("/"),l=function(w){w.ensureVisible();if(u[0]&&u[0]!==""){for(var t=0;t0)?"/"+u.join("/")+"/":"/";p=Ext.util.md5("AF-"+h+c+e);if(!Ext.getCmp("main-panel").findById("AF-"+p)){if(s!=="html"){d=s}else{d="xml"}if(s==="gif"||s==="png"||s==="jpg"){o={};q={id:"AF-ALL-FILE-"+p,xtype:"panel",region:"center",layout:"fit",bodyStyle:"padding:5px 5px 0",html:''}}else{o={xtype:"panel",region:"west",title:_("Tools"),iconCls:"iconConf",collapsedIconCls:"iconConf",plugins:[Ext.ux.PanelCollapsedTitle],layout:"fit",bodyBorder:false,split:true,collapsible:true,collapsed:!PhDOE.user.conf.allFiles.toolsPanelDisplay,width:PhDOE.user.conf.allFiles.toolsPanelWidth||375,listeners:{collapse:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"allFiles",itemName:"toolsPanelDisplay",value:false,notify:false})}},expand:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"allFiles",itemName:"toolsPanelDisplay",value:true,notify:false})}},resize:function(t,v){if(this.ownerCt.tabLoaded&&v&&v!=PhDOE.user.conf.allFiles.toolsPanelWidth){new ui.task.UpdateConfTask({module:"allFiles",itemName:"toolsPanelWidth",value:v,notify:false})}}},items:{xtype:"tabpanel",activeTab:0,defaults:{autoScroll:true},items:[{title:_("Log"),layout:"fit",items:[new ui.cmp.VCSLogGrid({prefix:"AF",fid:p,fpath:h+c,fname:e,loadStore:PhDOE.user.conf.allFiles.toolsPanelLogLoad})]},{title:_("Entities"),layout:"fit",items:[new ui.cmp.EntitiesAcronymsPanel({dataType:"entities",prefix:"AF",ftype:"ALL",fid:p,loadStore:PhDOE.user.conf.allFiles.toolsPanelEntitiesLoad})]},{title:_("Acronyms"),layout:"fit",items:[new ui.cmp.EntitiesAcronymsPanel({dataType:"acronyms",prefix:"AF",ftype:"ALL",fid:p,loadStore:PhDOE.user.conf.allFiles.toolsPanelAcronymsLoad})]}]}};q=new ui.cmp.FilePanel({id:"AF-ALL-PANEL-"+p,region:"center",title:_("File: ")+h+c+e,prefix:"AF",ftype:"ALL",spellCheck:PhDOE.user.conf.allFiles.enableSpellCheck,spellCheckConf:{module:"allFiles",itemName:"enableSpellCheck"},fid:p,fpath:c,fname:e,lang:h,parser:d,storeRecord:k,syncScrollCB:false,syncScroll:false})}Ext.getCmp("main-panel").add({id:"AF-"+p,layout:"border",title:e,originTitle:e,closable:true,tabLoaded:false,panEntities:!PhDOE.user.conf.allFiles.toolsPanelEntitiesLoad,panAcronyms:!PhDOE.user.conf.allFiles.toolsPanelAcronymsLoad,panVCS:!PhDOE.user.conf.allFiles.toolsPanelLogLoad,panLoaded:false,tabTip:String.format(_("in {0}"),c),iconCls:"iconAllFiles",items:[q,o]})}Ext.getCmp("main-panel").setActiveTab("AF-"+p)}},initComponent:function(){Ext.apply(this,{tbar:[_("Search: ")," ",new Ext.form.TwinTriggerField({id:"AF-search",validationEvent:false,validateOnBlur:false,trigger1Class:"x-form-clear-trigger",trigger2Class:"x-form-search-trigger",hideTrigger1:true,width:180,enableKeyEvents:true,listeners:{keypress:function(d,c){if(c.getKey()===c.ENTER){this.onTrigger2Click()}}},onTrigger1Click:function(){var c=ui.cmp._RepositoryTree.instance;this.setValue("");this.triggers[0].hide();this.setSize(180,10);c.root.setText(_("Repository"));delete c.loader.baseParams.search;c.root.reload()},onTrigger2Click:function(){var c=ui.cmp._RepositoryTree.instance,d=this.getValue();if(d===""||d.length<3){this.markInvalid(_("Your search must contain at least 3 characters"));return}this.clearInvalid();this.triggers[0].show();this.setSize(180,10);c.loader.baseParams.search=d;c.root.reload(function(){c.root.setText(String.format(_("Search result: {0}"),c.root.childNodes.length))})}})]});ui.cmp.RepositoryTree.superclass.initComponent.call(this);this.on("contextmenu",this.onContextMenu,this);this.on("dblclick",this.onDblClick,this);new Ext.tree.TreeSorter(this,{folderSort:true})}});ui.cmp._RepositoryTree.instance=null;ui.cmp.RepositoryTree.getInstance=function(c){if(!ui.cmp._RepositoryTree.instance){if(!c){c={}}ui.cmp._RepositoryTree.instance=new ui.cmp.RepositoryTree(c)}return ui.cmp._RepositoryTree.instance};Ext.namespace("ui","ui.cmp","ui.cmp._StaleFileGrid");ui.cmp._StaleFileGrid.store=new Ext.data.GroupingStore({proxy:new Ext.data.HttpProxy({url:"./do/getFilesNeedUpdate"}),reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"path"},{name:"name"},{name:"revision"},{name:"original_revision"},{name:"en_revision"},{name:"maintainer"},{name:"fileModifiedEN"},{name:"fileModifiedLang"}]}),sortInfo:{field:"name",direction:"ASC"},groupField:"path",listeners:{datachanged:function(e){var c=e.getCount(),d=false;if(!PhDOE.user.isAnonymous){e.each(function(f){if(f.data.maintainer==PhDOE.user.login){d++}},this)}if(d){Ext.getDom("acc-need-update-nb").innerHTML=c+" - "+String.format(_("{0} mine"),d)}else{Ext.getDom("acc-need-update-nb").innerHTML=c}}}});ui.cmp._StaleFileGrid.view=new Ext.grid.GroupingView({forceFit:true,startCollapsed:true,groupTextTpl:'{[values.rs[0].data["path"]]} ({[values.rs.length]} {[values.rs.length > 1 ? "'+_("Files")+'" : "'+_("File")+'"]})',deferEmptyText:false,getRowClass:function(c){if(c.data.fileModifiedEN||c.data.fileModifiedLang){var e=Ext.util.JSON.decode(c.data.fileModifiedEN),d=Ext.util.JSON.decode(c.data.fileModifiedLang);return((e.user===PhDOE.user.login&&e.anonymousIdent===PhDOE.user.anonymousIdent)||(d.user===PhDOE.user.login&&d.anonymousIdent===PhDOE.user.anonymousIdent))?"fileModifiedByMe":"fileModifiedByAnother"}return false},emptyText:'
'+_("No Files")+"
"});ui.cmp._StaleFileGrid.columns=[{id:"name",header:_("Files"),sortable:true,dataIndex:"name",renderer:function(c,f,d){var h="",g,e;if(d.data.fileModifiedEN){g=Ext.util.JSON.decode(d.data.fileModifiedEN);if(g.user===PhDOE.user.login&&g.anonymousIdent===PhDOE.user.anonymousIdent){h=_("File EN modified by me")+"
"}else{h=String.format(_("File EN modified by {0}"),g.user)+"
"}}if(d.data.fileModifiedLang){e=Ext.util.JSON.decode(d.data.fileModifiedLang);if(e.user===PhDOE.user.login&&e.anonymousIdent===PhDOE.user.anonymousIdent){h+=String.format(_("File {0} modified by me"),PhDOE.user.lang.ucFirst())}else{h+=String.format(_("File {0} modified by {1}"),PhDOE.user.lang.ucFirst(),e.user)}}if(h!==""){return""+c+""}else{return c}}},{header:_("EN revision"),width:45,sortable:true,dataIndex:"en_revision"},{header:"",width:45,sortable:true,dataIndex:"revision"},{header:_("Maintainer"),width:45,sortable:true,dataIndex:"maintainer"},{header:_("Path"),dataIndex:"path",hidden:true}];ui.cmp._StaleFileGrid.menu=function(c){Ext.apply(this,c);this.init();ui.cmp._StaleFileGrid.menu.superclass.constructor.call(this)};Ext.extend(ui.cmp._StaleFileGrid.menu,Ext.menu.Menu,{init:function(){Ext.apply(this,{items:[{scope:this,text:""+_("Edit in a new tab")+"",iconCls:"iconTabNeedUpdate",handler:function(){this.grid.fireEvent("rowdblclick",this.grid,this.rowIdx,this.event)}},{scope:this,hidden:this.hideDiffMenu,text:_("View diff..."),iconCls:"iconViewDiff",menu:new Ext.menu.Menu({items:[{scope:this,hidden:(this.grid.store.getAt(this.rowIdx).data.fileModifiedEN===false),text:String.format(_("... of the {0} file"),"EN"),handler:function(){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",FileName:this.fname,FilePath:"en"+this.fpath})}},{scope:this,hidden:(this.grid.store.getAt(this.rowIdx).data.fileModifiedLang===false),text:String.format(_("... of the {0} file"),PhDOE.user.lang.ucFirst()),handler:function(){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",FileName:this.fname,FilePath:PhDOE.user.lang+this.fpath})}}]})}]})}});ui.cmp.StaleFileGrid=Ext.extend(Ext.grid.GridPanel,{view:ui.cmp._StaleFileGrid.view,loadMask:true,autoExpandColumn:"name",border:false,enableDragDrop:true,ddGroup:"mainPanelDDGroup",onRowContextMenu:function(d,j,h){h.stopEvent();var g=this.store.getAt(j).data,f=g.path,c=g.name;this.getSelectionModel().selectRow(j);new ui.cmp._StaleFileGrid.menu({hideDiffMenu:(g.fileModifiedEN===false&&g.fileModifiedLang===false),grid:this,event:h,rowIdx:j,lang:PhDOE.user.lang,fpath:f,fname:c}).showAt(h.getXY())},onRowDblClick:function(c,d){this.openFile(this.store.getAt(d).data.id)},openFile:function(e){var g=this.store.getById(e),c=g.data.path,d=g.data.name,j=g.data.en_revision,h=g.data.revision,l=g.data.original_revision,f=Ext.util.md5("FNU-"+PhDOE.user.lang+c+d),k="";if(!Ext.getCmp("main-panel").findById("FNU-"+f)){if(PhDOE.user.conf.needUpdate.diffMethod==="using-viewvc"){k=ui.cmp.ViewVCDiff}else{if(PhDOE.user.conf.needUpdate.diffMethod==="using-exec"){k=ui.cmp.ExecDiff}}Ext.getCmp("main-panel").add({id:"FNU-"+f,layout:"border",title:d,originTitle:d,iconCls:"iconTabNeedUpdate",closable:true,tabLoaded:false,panVCSLang:!PhDOE.user.conf.needUpdate.toolsPanelLogLoad,panVCSEn:!PhDOE.user.conf.needUpdate.toolsPanelLogLoad,panDiffLoaded:(PhDOE.user.conf.needUpdate.diffMethod==="using-viewvc"),panLANGLoaded:false,panENLoaded:false,defaults:{split:true},tabTip:String.format(_("Need Update: in {0}"),c),listeners:{resize:function(m){Ext.getCmp("FNU-EN-PANEL-"+f).setWidth(m.getWidth()/2)}},items:[new k({region:"north",collapsible:true,height:PhDOE.user.conf.needUpdate.diffPanelHeight||150,prefix:"FNU",collapsed:!PhDOE.user.conf.needUpdate.diffPanelDisplay,fid:f,fpath:c,fname:d,rev1:(l)?l:h,rev2:j,listeners:{collapse:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"diffPanelDisplay",value:false,notify:false})}},expand:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"diffPanelDisplay",value:true,notify:false})}},resize:function(p,m,o){if(this.ownerCt.tabLoaded&&o&&o>50&&o!=PhDOE.user.conf.needUpdate.diffPanelHeight){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"diffPanelHeight",value:o,notify:false})}}}}),{region:"west",xtype:"panel",title:_("Tools"),iconCls:"iconConf",collapsedIconCls:"iconConf",collapsible:true,collapsed:!PhDOE.user.conf.needUpdate.toolsPanelDisplay,layout:"fit",bodyBorder:false,plugins:[Ext.ux.PanelCollapsedTitle],width:PhDOE.user.conf.needUpdate.toolsPanelWidth||375,listeners:{collapse:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"toolsPanelDisplay",value:false,notify:false})}},expand:function(){if(this.ownerCt.tabLoaded){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"toolsPanelDisplay",value:true,notify:false})}},resize:function(m,o){if(this.ownerCt.tabLoaded&&o&&o!=PhDOE.user.conf.needUpdate.toolsPanelWidth){new ui.task.UpdateConfTask({module:"needUpdate",itemName:"toolsPanelWidth",value:o,notify:false})}}},items:{xtype:"tabpanel",activeTab:0,tabPosition:"bottom",enableTabScroll:true,defaults:{autoScroll:true},items:[new ui.cmp.VCSLogGrid({layout:"fit",title:String.format(_("{0} Log"),PhDOE.user.lang.ucFirst()),prefix:"FNU-LANG",fid:f,fpath:PhDOE.user.lang+c,fname:d,loadStore:PhDOE.user.conf.needUpdate.toolsPanelLogLoad}),new ui.cmp.VCSLogGrid({layout:"fit",title:String.format(_("{0} Log"),"En"),prefix:"FNU-EN",fid:f,fpath:"en"+c,fname:d,loadStore:PhDOE.user.conf.needUpdate.toolsPanelLogLoad}),new ui.cmp.DictionaryGrid({layout:"fit",title:_("Dictionary"),prefix:"FNU",fid:f})]}},new ui.cmp.FilePanel({id:"FNU-LANG-PANEL-"+f,region:"center",title:String.format(_("{0} File: "),PhDOE.user.lang)+c+d,prefix:"FNU",ftype:"LANG",spellCheck:PhDOE.user.conf.needUpdate.enableSpellCheckLang,spellCheckConf:{module:"needUpdate",itemName:"enableSpellCheckLang"},fid:f,fpath:c,fname:d,lang:PhDOE.user.lang,parser:"xml",storeRecord:g,syncScrollCB:true,syncScroll:true,syncScrollConf:{module:"needUpdate",itemName:"syncScrollbars"}}),new ui.cmp.FilePanel({id:"FNU-EN-PANEL-"+f,region:"east",title:_("en File: ")+c+d,prefix:"FNU",ftype:"EN",original:true,readOnly:true,openInNewTabBtn:true,fid:f,fpath:c,fname:d,lang:"en",parser:"xml",storeRecord:g,syncScroll:true,syncScrollConf:{module:"needUpdate",itemName:"syncScrollbars"}})]})}Ext.getCmp("main-panel").setActiveTab("FNU-"+f)},initComponent:function(){ui.cmp._StaleFileGrid.columns[2].header=String.format(_("{0} revision"),Ext.util.Format.uppercase(PhDOE.user.lang));Ext.apply(this,{columns:ui.cmp._StaleFileGrid.columns,store:ui.cmp._StaleFileGrid.store,tbar:[_("Filter: ")," ",new Ext.form.TwinTriggerField({id:"FNU-filter",width:180,hideTrigger1:true,enableKeyEvents:true,validateOnBlur:false,validationEvent:false,trigger1Class:"x-form-clear-trigger",trigger2Class:"x-form-search-trigger",listeners:{specialkey:function(d,c){if(c.getKey()===c.ENTER){this.onTrigger2Click()}}},onTrigger1Click:function(){this.setValue("");this.triggers[0].hide();this.setSize(180,10);ui.cmp._StaleFileGrid.instance.store.clearFilter()},onTrigger2Click:function(){var c=this.getValue(),d;if(c===""||c.length<3){this.markInvalid(_("Your filter must contain at least 3 characters"));return}this.clearInvalid();this.triggers[0].show();this.setSize(180,10);d=new RegExp(c,"i");ui.cmp._StaleFileGrid.instance.store.filterBy(function(e){if(d.test(e.data.path)||d.test(e.data.name)||d.test(e.data.revision)||d.test(e.data.en_revision)||d.test(e.data.maintainer)){return true}else{return false}},this)}})]});ui.cmp.StaleFileGrid.superclass.initComponent.call(this);this.on("rowcontextmenu",this.onRowContextMenu,this);this.on("rowdblclick",this.onRowDblClick,this)}});ui.cmp._StaleFileGrid.instance=null;ui.cmp.StaleFileGrid.getInstance=function(c){if(!ui.cmp._StaleFileGrid.instance){if(!c){c={}}ui.cmp._StaleFileGrid.instance=new ui.cmp.StaleFileGrid(c)}return ui.cmp._StaleFileGrid.instance};Ext.namespace("ui","ui.cmp");ui.cmp.SystemUpdatePrompt=Ext.extend(Ext.Window,{id:"sys-update-win",title:_("Refresh all data"),layout:"form",width:300,height:200,resizable:false,modal:true,bodyStyle:"padding:15px 15px 0",iconCls:"iconRefresh",html:['
',_("Update all files from VCS"),"
",'
',_("This may take time. Thank you for your patience..."),"
",'
',_("Apply all tools"),"
",'
',_("Reload data"),"
"].join(""),buttons:[{id:"btn-start-refresh",text:_("Start"),iconCls:"iconStartRefresh",handler:function(){Ext.getCmp("btn-start-refresh").disable();this.ownerCt.ownerCt.tools.close.setVisible(false);new ui.task.SystemUpdateTask()}}]});Ext.namespace("ui","ui.cmp","ui.cmp._VCSLogGrid");ui.cmp._VCSLogGrid.store=Ext.extend(Ext.data.Store,{reader:new Ext.data.JsonReader({root:"Items",totalProperty:"nbItems",idProperty:"id",fields:[{name:"id"},{name:"revision"},{name:"date",type:"date",dateFormat:"Y/m/d H:i:s"},{name:"author"},{name:"content"}]})});ui.cmp._VCSLogGrid.sm=Ext.extend(Ext.grid.CheckboxSelectionModel,{singleSelect:false,header:"",width:22,listeners:{beforerowselect:function(d){var c=d.getCount();if(c===2){return false}return true},rowselect:function(d){var c=d.getCount();if(c===2){Ext.getCmp(d.prefix+"-PANEL-btn-log-"+d.fid).enable();Ext.get(d.prefix+"-PANEL-btn-log-"+d.fid).frame("3F8538")}else{Ext.getCmp(d.prefix+"-PANEL-btn-log-"+d.fid).disable()}},rowdeselect:function(d){var c=d.getCount();if(c===2){Ext.getCmp(d.prefix+"-PANEL-btn-log-"+d.fid).enable();Ext.get(d.prefix+"-PANEL-btn-log-"+d.fid).frame("3F8538")}else{Ext.getCmp(d.prefix+"-PANEL-btn-log-"+d.fid).disable()}}}});ui.cmp._VCSLogGrid.columns=[{id:"id",header:_("Rev."),width:40,sortable:false,dataIndex:"revision"},{header:_("Content"),width:130,sortable:true,dataIndex:"content"},{header:_("By"),width:50,sortable:true,dataIndex:"author"},{header:_("Date"),width:85,sortable:true,dataIndex:"date",renderer:Ext.util.Format.dateRenderer(_("Y-m-d, H:i"))}];ui.cmp.VCSLogGrid=Ext.extend(Ext.grid.GridPanel,{loadMask:true,autoScroll:true,bodyBorder:false,border:false,autoExpandColumn:"content",initComponent:function(){var f=new ui.cmp._VCSLogGrid.sm({fid:this.fid,prefix:this.prefix}),c=new ui.cmp._VCSLogGrid.store({autoLoad:this.loadStore,proxy:new Ext.data.HttpProxy({url:"./do/getLog"}),baseParams:{Path:this.fpath,File:this.fname},listeners:{scope:this,load:function(h,g){if(this.prefix==="FNU-EN"){Ext.getCmp("FNU-"+this.fid).panVCSEn=true;Ext.getCmp("main-panel").fireEvent("tabLoaded","FNU",this.fid)}if(this.prefix==="FNU-LANG"){Ext.getCmp("FNU-"+this.fid).panVCSLang=true;Ext.getCmp("main-panel").fireEvent("tabLoaded","FNU",this.fid)}if(this.prefix==="FE-EN"){Ext.getCmp("FE-"+this.fid).panVCSEn=true;Ext.getCmp("main-panel").fireEvent("tabLoaded","FE",this.fid)}if(this.prefix==="FE-LANG"){Ext.getCmp("FE-"+this.fid).panVCSLang=true;Ext.getCmp("main-panel").fireEvent("tabLoaded","FE",this.fid)}if(this.prefix==="FNR-EN"){Ext.getCmp("FNR-"+this.fid).panVCSEn=true;Ext.getCmp("main-panel").fireEvent("tabLoaded","FNR",this.fid)}if(this.prefix==="FNR-LANG"){Ext.getCmp("FNR-"+this.fid).panVCSLang=true;Ext.getCmp("main-panel").fireEvent("tabLoaded","FNR",this.fid)}if(this.prefix==="AF"){Ext.getCmp("AF-"+this.fid).panVCS=true;Ext.getCmp("main-panel").fireEvent("tabLoaded","AF",this.fid)}if(this.prefix==="PP"){Ext.getCmp("PP-"+this.fid).panVCS=true;Ext.getCmp("main-panel").fireEvent("tabLoaded","PP",this.fid)}}}}),e=[],d;e.push(f);for(d=0;d'+_("You must manually load this data.
Use the refresh button !")+"

"+_("(You can change this behavior by setting an option in the configuration window)")+"",deferEmptyText:false}),tbar:[{scope:this,id:this.prefix+"-PANEL-btn-refreshlog-"+this.fid,tooltip:_("Load/Refresh revisions"),iconCls:"iconRefresh",handler:function(){this.store.reload()}},{scope:this,id:this.prefix+"-PANEL-btn-log-"+this.fid,tooltip:_("View the diff"),iconCls:"iconViewDiff",disabled:true,handler:function(){var j=this.getSelectionModel().getSelections(),h=j[0].data.revision,g=j[1].data.revision;Ext.getBody().mask(' '+_("Finding the diff. Please, wait..."));XHR({params:{task:"getDiff",DiffType:"vcs",FilePath:this.fpath,FileName:this.fname,Rev1:h,Rev2:g},success:function(l){var m=Ext.util.JSON.decode(l.responseText),k;Ext.getBody().unmask();k=new Ext.Window({title:String.format(_("Diff between {0} & {1}"),h,g),width:650,height:350,resizable:false,modal:true,autoScroll:true,bodyStyle:"background-color: white; padding: 5px;",html:'
'+m.content+"
",buttons:[{text:_("Close"),handler:function(){k.close()}}]});k.show()}})}}]});ui.cmp.VCSLogGrid.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp");ui.cmp.ViewVCDiff=Ext.extend(Ext.Panel,{layout:"fit",title:_("Diff From VCS"),iconCls:"iconDiffView",collapsedIconCls:"iconDiffView",plugins:[Ext.ux.PanelCollapsedTitle],initComponent:function(){Ext.apply(this,{items:{id:this.prefix+"-diff-"+this.fid,xtype:"panel",layout:"fit",items:[new Ext.ux.IFrameComponent({id:"frame-"+this.prefix+"-diff-"+this.fid,url:String.format(PhDOE.app.conf.viewVcUrl,this.fpath+this.fname,this.rev1,this.rev2)})]}});ui.cmp.ViewVCDiff.superclass.initComponent.call(this)}});Ext.namespace("ui","ui.cmp","ui.cmp._WorkTreeGrid","ui.cmp._WorkTreeGrid.menu");ui.cmp._WorkTreeGrid.SetProgress=new Ext.util.DelayedTask(function(){new ui.task.SetFileProgressTask({idDB:this.node.attributes.idDB,progress:this.node.attributes.progress})});ui.cmp._WorkTreeGrid.menu.admin=function(c){Ext.apply(this,c);this.init();ui.cmp._WorkTreeGrid.menu.admin.superclass.constructor.call(this)};Ext.extend(ui.cmp._WorkTreeGrid.menu.admin,Ext.menu.Item,{init:function(){var c;switch(this.from){case"file":c=[{scope:this,iconCls:"iconSwitchLang",text:_("Change file's owner"),handler:function(){new ui.cmp.ChangeFileOwner({fileIdDB:this.node.attributes.idDB,fileFolder:this.folderNode.attributes.task,fileName:this.node.attributes.task,currentOwner:this.userNode.attributes.task})}},{scope:this,iconCls:"iconPageDelete",text:((this.node.attributes.type==="delete")?_("Cancel this deletion"):_("Clear this change")),handler:function(){new ui.task.ClearLocalChangeTask({ftype:this.node.attributes.type,fpath:this.folderNode.attributes.task,fname:this.node.attributes.task})}}];break;case"patch":c=[{scope:this,iconCls:"iconTrash",text:_("Delete this patch"),handler:function(){ui.task.DeletePatchTask({patchID:this.node.attributes.idDB})}}];break}Ext.apply(this,{text:_("Administrator menu"),iconCls:"iconAdmin",handler:function(){return false},menu:new Ext.menu.Menu({items:c})})}});ui.cmp._WorkTreeGrid.menu.commit=function(c){Ext.apply(this,c);this.init();ui.cmp._WorkTreeGrid.menu.commit.superclass.constructor.call(this)};Ext.extend(ui.cmp._WorkTreeGrid.menu.commit,Ext.menu.Item,{init:function(){Ext.apply(this,{text:_("Commit..."),iconCls:"iconCommitFileVcs",disabled:(PhDOE.user.isAnonymous),handler:function(){return false},menu:new Ext.menu.Menu({items:[{scope:this,text:_("...this file"),hidden:(this.from==="user"||this.from==="folder"||this.from==="patch"||this.from==="anonymousPatch"),iconCls:"iconCommitFileVcs",handler:function(){var c=[{fid:Ext.util.md5(this.folderNode.attributes.task+this.node.attributes.task),fpath:this.folderNode.attributes.task,fname:this.node.attributes.task,fdbid:this.node.attributes.idDB,ftype:this.node.attributes.type,fdate:Date.parseDate(this.node.attributes.last_modified,"Y-m-d H:i:s"),fby:this.userNode.attributes.task}];new ui.cmp.CommitPrompt({files:c}).show()}},{scope:this,text:_("...all files from this folder"),hidden:(this.from==="user"||this.from==="patch"||this.from==="anonymousPatch"),iconCls:"iconCommitFileVcs",handler:function(){var c=[];this.folderNode.cascade(function(d){if(d.attributes.type!=="folder"&&d.attributes.type!=="user"){c.push({fid:Ext.util.md5(this.folderNode.attributes.task+d.attributes.task),fpath:this.folderNode.attributes.task,fname:d.attributes.task,fdbid:d.attributes.idDB,ftype:d.attributes.type,fdate:Date.parseDate(d.attributes.last_modified,"Y-m-d H:i:s"),fby:this.userNode.attributes.task})}},this);new ui.cmp.CommitPrompt({files:c}).show()}},{scope:this,text:_("...all files from this patch"),hidden:(this.module!=="patches"||this.from==="user"),iconCls:"iconCommitFileVcs",handler:function(){var e=[],c="",d=false;if(this.from==="anonymousPatch"){c=this.patchNode.attributes.patchDescription+"\n\n-- \nProvided by "+this.patchNode.parentNode.attributes.task+" ("+this.patchNode.attributes.patchEmail+")";d=this.patchNode.attributes.idDB}this.patchNode.cascade(function(f){if(f.attributes.type!=="folder"&&f.attributes.type!=="user"&&f.attributes.type!=="patch"){e.push({fid:Ext.util.md5(f.parentNode.attributes.task+f.attributes.task),fpath:f.parentNode.attributes.task,fname:f.attributes.task,fdbid:f.attributes.idDB,ftype:f.attributes.type,fdate:Date.parseDate(f.attributes.last_modified,"Y-m-d H:i:s"),fby:this.userNode.attributes.task})}},this);new ui.cmp.CommitPrompt({files:e,defaultMessage:c,patchID:d}).show()}},{scope:this,text:_("...all files modified by me"),hidden:(this.from==="anonymousPatch"),iconCls:"iconCommitFileVcs",handler:function(){var c=[];this.userNode.cascade(function(d){if(d.attributes.type!=="folder"&&d.attributes.type!=="user"&&d.attributes.type!=="patch"){c.push({fid:Ext.util.md5(d.parentNode.attributes.task+d.attributes.task),fpath:d.parentNode.attributes.task,fname:d.attributes.task,fdbid:d.attributes.idDB,ftype:d.attributes.type,fdate:Date.parseDate(d.attributes.last_modified,"Y-m-d H:i:s"),fby:this.userNode.attributes.task})}},this);new ui.cmp.CommitPrompt({files:c}).show()}}]})})}});ui.cmp._WorkTreeGrid.menu.usersPatch=function(d){Ext.apply(this,d);var f=Ext.getCmp(this.menuID),e,c;if(!f.itemRendered){f.removeAll();f.doLayout();c=ui.cmp.PatchesTreeGrid.getInstance().getUserPatchesList();if(c){Ext.each(c,function(g){e=new Ext.menu.Item({id:Ext.id(),text:g.attributes.task,handler:function(){ui.task.MoveToPatch({patchID:g.attributes.idDB,patchName:g.attributes.task,nodesToAdd:f.nodesToAdd})}});f.add(e)},this)}else{e=new Ext.menu.Item({disabled:true,text:_("You have no patch currently. You must create one.")});f.add(e)}e=new Ext.menu.Item({text:_("Create a new patch"),iconCls:"iconAdd",handler:function(){var g=new ui.cmp.ManagePatchPrompt({title:_("Create a new patch"),nodesToAdd:f.nodesToAdd});g.show(this.el)}});f.add("-",e);f.doLayout();f.itemRendered=true}};ui.cmp._WorkTreeGrid.menu.users=function(c){Ext.apply(this,c);this.init();ui.cmp._WorkTreeGrid.menu.users.superclass.constructor.call(this)};Ext.extend(ui.cmp._WorkTreeGrid.menu.users,Ext.menu.Menu,{listeners:{show:function(){if(this.node.attributes.task===PhDOE.user.login){ui.cmp._WorkTreeGrid.menu.usersPatch({menuID:"usersPatchesMenu"})}}},init:function(){var d=[],c;this.node.cascade(function(e){if(e.attributes.type!=="user"&&e.attributes.type!=="folder"){d.push(e)}},this);c=(this.node.attributes.task===PhDOE.user.login)?[{text:_("Submit all files for review in patch:"),iconCls:"iconPendingPatch",handler:function(){return false},menu:new Ext.menu.Menu({id:"usersPatchesMenu",itemRendered:false,nodesToAdd:d})},{xtype:"menuseparator",hidden:(PhDOE.user.isAnonymous)},((!PhDOE.user.isAnonymous)?new ui.cmp._WorkTreeGrid.menu.commit({from:"user",node:false,folderNode:false,userNode:this.node}):"")]:[{scope:this,text:String.format(_("Send an email to {0}"),""+this.node.attributes.task+""),iconCls:"iconSendEmail",hidden:(this.node.attributes.email==="false"),handler:function(){var e=new ui.cmp.EmailPrompt();e.setData(this.node.attributes.task,this.node.attributes.email);e.show(this.node.el)}}];Ext.apply(this,{items:c})}});ui.cmp._WorkTreeGrid.menu.folders=function(c){Ext.apply(this,c);this.init();ui.cmp._WorkTreeGrid.menu.folders.superclass.constructor.call(this)};Ext.extend(ui.cmp._WorkTreeGrid.menu.folders,Ext.menu.Menu,{listeners:{show:function(){if(this.node.parentNode.attributes.task===PhDOE.user.login){ui.cmp._WorkTreeGrid.menu.usersPatch({menuID:"foldersPatchesMenu"})}}},init:function(){var c=[];if(this.node.parentNode.attributes.task!==PhDOE.user.login){return false}this.node.cascade(function(d){if(d.attributes.type!=="folder"){c.push(d)}},this);Ext.apply(this,{items:[{text:_("Submit all files in this directory in patch:"),iconCls:"iconPendingPatch",handler:function(){return false},menu:new Ext.menu.Menu({id:"foldersPatchesMenu",itemRendered:false,nodesToAdd:c})},{xtype:"menuseparator",hidden:(PhDOE.user.isAnonymous)},((!PhDOE.user.isAnonymous)?new ui.cmp._WorkTreeGrid.menu.commit({from:"folder",node:false,folderNode:this.node,userNode:this.node.parentNode}):"")]})}});ui.cmp._WorkTreeGrid.menu.files=function(c){Ext.apply(this,c);this.init();ui.cmp._WorkTreeGrid.menu.files.superclass.constructor.call(this)};Ext.extend(ui.cmp._WorkTreeGrid.menu.files,Ext.menu.Menu,{listeners:{show:function(){if(this.node.parentNode.parentNode.attributes.task===PhDOE.user.login){ui.cmp._WorkTreeGrid.menu.usersPatch({menuID:"filePatchesMenu"})}}},init:function(){var h=this.node,l=h.attributes.type,g,c=h.parentNode.attributes.task,e=h.attributes.task,k=h.ownerTree,f=h.parentNode.parentNode.attributes.task,d=[],j;j=h.parentNode.attributes.task.split("/");g=j[0];d.push(this.node);Ext.apply(this,{items:[{text:""+((l==="delete")?_("View in a new tab"):_("Edit in a new tab"))+"",iconCls:"iconEdit",handler:function(){k.openFile(h)}},{text:_("Submit as patch for review in:"),iconCls:"iconPendingPatch",hidden:(f!==PhDOE.user.login),handler:function(){return false},menu:new Ext.menu.Menu({id:"filePatchesMenu",itemRendered:false,nodesToAdd:d})},{text:_("Set the progress..."),iconCls:"iconProgress",hidden:(l==="delete"||f!==PhDOE.user.login),menu:{xtype:"menu",showSeparator:false,items:[{xtype:"slider",width:200,value:this.node.attributes.progress,increment:10,minValue:0,maxValue:100,plugins:new Ext.slider.Tip({getText:function(m){return String.format(""+_("{0}% complete")+"",m.value)}}),refreshNodeColumns:function(o){var x=o.getOwnerTree(),u=o.attributes,s=x.columns,m=o.ui.getEl().firstChild,y=m.childNodes,p,r,w,q;for(p=1,q=s.length;p1){for(var d=0;d1){f=new Ext.menu.Menu({listeners:{show:function(){ui.cmp._WorkTreeGrid.menu.usersPatch({menuID:"globalPatchesMenu"})}},items:[{text:_("Submit all this files for review in patch:"),iconCls:"iconPendingPatch",handler:function(){return false},menu:new Ext.menu.Menu({id:"globalPatchesMenu",itemRendered:false,nodesToAdd:l})}]});f.showAt(k.getXY());return}g=j.attributes.type;switch(g){case"user":j.select();f=new ui.cmp._WorkTreeGrid.menu.users({node:j});break;case"folder":j.select();f=new ui.cmp._WorkTreeGrid.menu.folders({node:j});break;default:j.select();f=new ui.cmp._WorkTreeGrid.menu.files({node:j});break}f.showAt(k.getXY())},initComponent:function(){function c(d,e){e.css+=" x-grid3-progresscol";return String.format('
{2}
',this.getStyle(d),(d/this.ceiling)*100,this.getText(d))}Ext.apply(this,{animate:true,useArrows:true,autoScroll:true,border:false,containerScroll:true,defaults:{autoScroll:true},selModel:new Ext.tree.MultiSelectionModel(),columns:[{header:_("Users"),dataIndex:"task",tpl:new Ext.XTemplate("{task:this.formatUserName}",{formatUserName:function(d,e){if(e.userID){e.qtip=_("userID: ")+e.userID}return d}})},{header:_("Last modified"),width:120,dataIndex:"last_modified",align:"center",tpl:new Ext.XTemplate("{last_modified:this.formatDate}",{formatDate:function(d,e){if(e.type!=="user"&&e.type!=="folder"){return Date.parseDate(d,"Y-m-d H:i:s").format(_("Y-m-d, H:i"))}else{return""}}})},{header:_("Estimated progress"),dataIndex:"progress",width:100,align:"center",tpl:new Ext.XTemplate("{progress:this.formatProgress}",{formatProgress:function(f,h){if(Ext.util.Format.substr(h,0,4)==="out:"){var g=h.split(":");f=g[1]}if(!f&&f!==0){return""}function e(k){var j=(k<(100/2))?"x-progress-text-back":"x-progress-text-front"+(Ext.isIE6?"-ie6":""),l;l=String.format('
{2}
',j,Ext.id(),k+"%");return(k<(100/1.05))?l.substring(0,l.length-6):l.substr(6)}function d(j){if(j<=100&&j>(100*0.67)){return"-green"}if(j<(100*0.67)&&j>(100*0.33)){return"-orange"}if(j<(100*0.33)){return"-red"}return""}return String.format('
{2}
',d(f),(f/100)*100,e(f))}})}],loader:{dataUrl:"./do/getWork",baseParams:{module:"workInProgress"}}});ui.cmp.WorkTreeGrid.superclass.initComponent.call(this);this.on("contextmenu",this.onContextMenu,this);this.on("resize",this.resizeCmp,this);this.on("dblclick",this.openFile,this);this.getRootNode().on("beforechildrenrendered",function(){this.updateFilesCounter.defer(200,this)},this)},resizeCmp:function(g,f,d,e){this.columns[0].width=e-(this.columns[1].width+this.columns[2].width+5);this.updateColumnWidths()},delRecord:function(m){var d=this.getRootNode(),g,e,k,c,l,f;for(g=0;gPlease delete these characters or change the header of the XML file in UTF-8 ; i.e.:

<?xml version="1.0" encoding="utf-8"?>
');break;case"tabs_found":d=_("Error");e=_('It seems that you have inserted some tabs caracters into this files. Please, replace each one by one space.
Tip: You can use the "Re-indent all this file" button to replace all tabs by spaces.');break;case"folder_already_exist":d=_("Error");e=_("This folder already exist in the current folder.");break;case"file_already_exist":d=_("Error");e=_("This file already exist in the current folder.");break;case"save_you_cant_modify_it":d=_("Error");e=_("You can't modify this file as it was modify by another user. Contact an administrator if you want to be able to modify it.");break;case"file_isnt_owned_by_current_user":d=_("Error");e=_("The file you want to clear local change isn't own by you.
You can only do this action for yours files.");break;case"file_localchange_didnt_exist":d=_("Error");e=_("The file you want to clear local change isn't exist as work in progress.");break;case"changeFilesOwnerNotAdmin":d=_("Error");e=_("You can't change file's owner. You must be a global administrator or an administrator for this lang.");break;case"patch_delete_dont_exist":d=_("Error");e=_("The patch you want to delete didn't exist.");break;case"patch_delete_isnt_own_by_current_user":d=_("Error");e=_("The patch you want to delete isn't own by you. Only the user how create it or a global administrator can delete it.");break;case"action_only_global_admin":d=_("Error");e=_("This action is available only to global administrator.");break;case"action_only_admin":d=_("Error");e=_("This action is available only to global administrator or to administrator for this lang.");break}Ext.MessageBox.alert(d,e)},runDirectAccess:function(){if(directAccess){if(directAccess.link=="perm"){ui.cmp.RepositoryTree.getInstance().openFile("byPath",directAccess.lang+directAccess.path,directAccess.name)}if(directAccess.link=="patch"){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",FilePath:directAccess.path,FileName:directAccess.name})}if(directAccess.link=="patchID"){Ext.getCmp("main-panel").openDiffTab({DiffType:"file",patchID:directAccess.patchID,patchName:directAccess.patchName})}}},afterLoadAllStore:function(){this.app.loaded=true;this.runDirectAccess();if(this.user.conf.main.loadMailsAtStartUp){ui.cmp.PortletLocalMail.getInstance().reloadData()}if(this.user.conf.main.loadBugsAtStartUp){ui.cmp.PortletBugs.getInstance().reloadData()}PhDOE.setTopic();PhDOE.setTopic(true)},loadAllStore:function(){var e=new Ext.ProgressBar({width:300,renderTo:"loading-progressBar"}),c=[],d;if(PhDOE.user.lang!=="en"){c=[ui.cmp._MainMenu.store,ui.cmp.StaleFileGrid.getInstance().store,ui.cmp.ErrorFileGrid.getInstance().store,ui.cmp.PendingReviewGrid.getInstance().store,ui.cmp.NotInENGrid.getInstance().store,ui.cmp.PortletSummary.getInstance().store,ui.cmp.PortletTranslationGraph.getInstance().store,ui.cmp.PortletTranslationsGraph.getInstance().store,ui.cmp.PortletTranslator.getInstance().storeTranslator,ui.cmp.PortletTranslator.getInstance().storeReviewer,ui.cmp.PendingTranslateGrid.getInstance().store,ui.cmp.PortletInfo.getInstance().store]}else{c=[ui.cmp._MainMenu.store,ui.cmp.PortletTranslationsGraph.getInstance().store,ui.cmp.ErrorFileGrid.getInstance().store,ui.cmp.PortletInfo.getInstance().store]}d=function(f){e.updateProgress((f+1)/c.length,(f+1)+" of "+c.length+"...");c[f].load({callback:function(){f++;if(f  '+this.app.name+"",autoHeight:true,border:false,margins:"0 0 5 0"},{region:"west",id:"main-menu-panel",layout:"accordion",collapsible:true,collapseMode:"mini",animate:true,split:true,width:PhDOE.user.conf.main.mainMenuWidth||300,header:false,listeners:{resize:function(j,o){if(o&&o!=PhDOE.user.conf.main.mainMenuWidth){var m=new ui.task.UpdateConfTask({module:"main",itemName:"mainMenuWidth",value:o,notify:false})}}},tbar:[{text:_("Main menu"),iconCls:"MainMenu",menu:new ui.cmp.MainMenu()}],items:[{id:"acc-need-translate",title:_("Files need translate")+' (0)',layout:"fit",border:false,iconCls:"iconFilesNeedTranslate",hidden:(PhDOE.user.lang==="en"),items:[ui.cmp.PendingTranslateGrid.getInstance()],collapsed:true,listeners:{expand:function(j){Ext.getCmp("FNT-filter").wrap.setWidth(180);Ext.getCmp("FNT-filter").syncSize()}}},{id:"acc-need-update",title:_("Files need update")+' (0)',layout:"fit",border:false,iconCls:"iconFilesNeedUpdate",hidden:(PhDOE.user.lang==="en"),items:[ui.cmp.StaleFileGrid.getInstance()],collapsed:true,listeners:{expand:function(j){Ext.getCmp("FNU-filter").wrap.setWidth(180);Ext.getCmp("FNU-filter").syncSize()}}},{id:"acc-error",title:(PhDOE.user.lang==="en")?"Number of failures to meet 'strict standards' (0)":_("Error in current translation")+' (0)',layout:"fit",border:false,iconCls:"iconFilesError",items:[ui.cmp.ErrorFileGrid.getInstance()],collapsed:true,listeners:{expand:function(j){Ext.getCmp("FE-filter").wrap.setWidth(180);Ext.getCmp("FE-filter").syncSize()}}},{id:"acc-need-reviewed",title:_("Files need reviewed")+' (0)',layout:"fit",border:false,iconCls:"iconFilesNeedReviewed",hidden:(PhDOE.user.lang==="en"),items:[ui.cmp.PendingReviewGrid.getInstance()],collapsed:true,listeners:{expand:function(j){Ext.getCmp("FNR-filter").wrap.setWidth(180);Ext.getCmp("FNR-filter").syncSize()}}},{id:"acc-notInEn",title:_("Not in EN tree")+' (0)',layout:"fit",border:false,iconCls:"iconNotInEn",hidden:(PhDOE.user.lang==="en"),items:[ui.cmp.NotInENGrid.getInstance()],collapsed:true},{id:"acc-all-files",title:_("All files"),layout:"fit",border:false,iconCls:"iconAllFiles",items:[ui.cmp.RepositoryTree.getInstance()],collapsed:true,listeners:{expand:function(j){Ext.getCmp("AF-search").wrap.setWidth(180);Ext.getCmp("AF-search").syncSize()}}},{id:"acc-work-in-progress",title:_("Work in progress")+' (0)',layout:"fit",border:false,iconCls:"iconWorkInProgress",items:[ui.cmp.WorkTreeGrid.getInstance()],collapsed:true,tools:[{id:"refresh",qtip:_("Refresh"),handler:function(){ui.cmp.WorkTreeGrid.getInstance().getRootNode().reload()}}]},{id:"acc-patches",tools:[{id:"refresh",qtip:_("Refresh"),handler:function(){ui.cmp.PatchesTreeGrid.getInstance().getRootNode().reload()}},{id:"gear",hidden:(this.user.isAnonymous),qtip:_("Open the Log Message Manager"),handler:function(){if(!Ext.getCmp("commit-log-win")){var j=new ui.cmp.CommitLogManager()}Ext.getCmp("commit-log-win").show("acc-patches")}}],title:_("Patches for review")+' (0)',layout:"fit",border:false,iconCls:"iconPatch",items:[ui.cmp.PatchesTreeGrid.getInstance()],collapsed:true}]},{xtype:"mainpanel",id:"main-panel",region:"center",items:[{xtype:"panel",id:"MainInfoTabPanel",title:_("Home"),baseCls:"MainInfoTabPanel",autoScroll:true,plain:true,items:[{xtype:"container",layout:"column",border:false,items:[{xtype:"container",columnWidth:0.5,html:'

'+_("Connected as")+' , '+_("Project: ")+''+PhDOE.project+", "+_("Language: ")+' -

',listeners:{afterrender:function(m){var j="",p="",o;o=Ext.get("loginLibel");if(PhDOE.user.isGlobalAdmin||PhDOE.user.isLangAdmin){o.addClass("userAdmin");p=' '+PhDOE.user.login}else{if(PhDOE.user.authService=="VCS"){p=' '+PhDOE.user.login}else{if(PhDOE.user.authService=="google"){p=' '+PhDOE.user.login}else{if(PhDOE.user.authService=="facebook"){p=' '+PhDOE.user.login}}}}o.dom.innerHTML=p;content=_("Connected using")+" "+PhDOE.user.authService+"
";content+=(PhDOE.user.isGlobalAdmin)?_("You are a global Administrator")+"
":"";content+=(PhDOE.user.isLangAdmin)?_("You are an administrator for this language")+"
":"";new Ext.ToolTip({target:"loginLibel",anchor:"top",html:content})}}},{xtype:"container",columnWidth:0.5,html:'

'+_("Topic:")+'

-

-

-'+_("Topic:")+'

-

-
',listeners:{afterrender:function(m){if(PhDOE.user.isAnonymous){return}var j=function(q){var o="topic-info-content"+(q?"-lang":""),p=Ext.get(o).dom.innerHTML;Ext.get(o).dom.innerHTML="";new Ext.FormPanel({renderTo:o,layout:"anchor",border:false,items:[{xtype:"htmleditor",value:p,anchor:"100%"}],buttonAlign:"center",buttons:[{text:_("Save"),handler:function(){PhDOE.saveTopic(this.ownerCt.ownerCt.items.items[0].getValue(),q)}},{text:_("Cancel"),handler:function(){PhDOE.setTopic(q)}}]})};Ext.get("topic-info-container").on("dblclick",function(){j()});Ext.get("topic-info-container-lang").on("dblclick",function(){j(true)})}}}]},{xtype:"portal",border:false,items:[{columnWidth:0.5,style:"padding:10px 5px 10px 5px",items:d},{columnWidth:0.5,style:"padding:10px 5px 10px 5px",items:g}],listeners:{drop:function(o){var m,q=[],s=[],t;for(var r=0;r ' + - _('Please, wait until update this folder...') - ); - - // We need to stop ping test during this process - ui.task.PingTask.getInstance().cancel(); - - XHR({ - params : { - task : 'updateFolder', - path : node.id - }, - success : function(r) - { - var o = Ext.util.JSON.decode(r.responseText); - ui.task._UpdateSingleFolderTask.afterUpdate(o, node); - }, - failure : function(r) - { - var o = Ext.util.JSON.decode(r.responseText); - - if (o && o.success === false) { - // Re-enable TaskPing - ui.task.PingTask.getInstance().delay(30000); - Ext.getBody().unmask(); - PhDOE.winForbidden(); - } else { - // take over 30sec (max Keep-Alive time) - // poll every XX secondes if the update is finish - ui.task._UpdateSingleFolderTask.poll.delay(5000, null, this, t); - } - } - }); -}; - -ui.task.UpdateSingleFolderTask = function(node) -{ - // If the user is anonymous, we don't update anything - if (PhDOE.user.isAnonymous) { - Ext.getCmp('winVCSCommit').close(); - PhDOE.winForbidden(); - return; - } - ui.task._UpdateSingleFolderTask.update(node); -}; \ No newline at end of file diff --git a/php/AccountManager.php b/php/AccountManager.php index b74c063b..ebae9537 100644 --- a/php/AccountManager.php +++ b/php/AccountManager.php @@ -4,10 +4,6 @@ * */ -require_once dirname(__FILE__) . '/VCSFactory.php'; -require_once dirname(__FILE__) . '/DBConnection.php'; -require_once dirname(__FILE__) . '/ProjectManager.php'; - class AccountManager { private static $instance; @@ -178,14 +174,11 @@ public function isLogged() * @param $lang The language we want to access. * @return An associated array. */ - public function login($project, $vcsLogin, $vcsPasswd, $email, $lang='en', $authService='VCS', $authServiceID) + public function login($project, $vcsLogin, $vcsPasswd, $email, $lang='en', $authService='VCS', $authServiceID = null) { // Var to return into ExtJs $return = array(); - // Var return from VCS auth system - $AuthReturn = false; - // We manage the project if( ProjectManager::getInstance()->setProject($project) ) { $this->project = strtoupper($project); @@ -310,10 +303,6 @@ public function login($project, $vcsLogin, $vcsPasswd, $email, $lang='en', $auth // We try to authenticate this user to master php server. $AuthReturn = VCSFactory::getInstance()->masterPhpAuthenticate($vcsLogin, $vcsPasswd); $return['authMethod'] = 'masterPhp'; - } else { - // We try to authenticate this user to VCS server. - $AuthReturn = VCSFactory::getInstance()->svnAuthenticate($vcsLogin, $vcsPasswd); - $return['authMethod'] = 'svnServer'; } diff --git a/php/Conf.php b/php/Config.php old mode 100644 new mode 100755 similarity index 79% rename from php/Conf.php rename to php/Config.php index e598f74c..2970136a --- a/php/Conf.php +++ b/php/Config.php @@ -40,9 +40,9 @@ public function buildConf() $this->conf['GLOBAL_CONFIGURATION']['data.path'] = realpath(dirname(__FILE__).'/../'.$this->conf['GLOBAL_CONFIGURATION']['data.path']).'/'; // Second, we load all config project file - $d = dir($p); - while (false !== ($entry = $d->read())) { - if( is_file($p.$entry) && ( $entry != 'conf.ini' && $entry != 'localConf.ini' ) ) { + foreach (glob($p."project.*.ini") as $entry) { + $entry = basename($entry); + if( is_file($p.$entry)) { // Get the name of the project directly into the filename $t = explode(".", $entry); @@ -50,7 +50,19 @@ public function buildConf() $this->conf[strtoupper($t[1])] = parse_ini_file($p.$entry); } } - $d->close(); + + // End, we load all local config project file + foreach (glob($p."local.*.ini") as $entry) { + $entry = basename($entry); + if( is_file($p.$entry)) { + + // Get the name of the project directly into the filename + $t = explode(".", $entry); + + $this->conf[strtoupper($t[1])] = array_merge( $this->conf[strtoupper($t[1])], parse_ini_file($p.$entry) ); + } + } + // Third, we find all marks to be replace by a var from global_configuration array or current project while( list($project, $value) = each($this->conf) ) { diff --git a/php/CvsClient.php b/php/CvsClient.php index 45bc69a7..10557095 100644 --- a/php/CvsClient.php +++ b/php/CvsClient.php @@ -1,6 +1,5 @@ command = $command; + + // We validate and escape certain types of input. + $this->args = array(); + foreach ($args as $key => $val) + { + if (is_bool($val) || is_float($val) || is_int($val) || is_null($val)) + $this->args[$key] = $val; + else if (is_string($val)) + $this->args[$key] = escapeshellarg($val); + else if (is_object($val)) + $this->args[$key] = escapeshellarg($val->__toString()); + else + trigger_error('Argument with unexpected type used to construct ExecStatement. It has been omitted from the command string.', E_USER_WARNING); + } + } + + public function getCommand() + { + return $this->command; + } + + public function getArgs() + { + return $this->args; + } + + public function __toString() + { + return vsprintf($this->getCommand(), $this->getArgs()); + } +} +?> \ No newline at end of file diff --git a/php/ExtJsController.php b/php/ExtJsController.php index d7d1c4ff..0fe558cb 100644 --- a/php/ExtJsController.php +++ b/php/ExtJsController.php @@ -5,25 +5,6 @@ * @todo Add inline documentation for each controller task */ -require_once dirname(__FILE__) . '/AccountManager.php'; -require_once dirname(__FILE__) . '/BugReader.php'; -require_once dirname(__FILE__) . '/DictionaryManager.php'; -require_once dirname(__FILE__) . '/EntitiesAcronymsFetcher.php'; -require_once dirname(__FILE__) . '/File.php'; -require_once dirname(__FILE__) . '/GTranslate.php'; -require_once dirname(__FILE__) . '/JsonResponseBuilder.php'; -require_once dirname(__FILE__) . '/LogManager.php'; -require_once dirname(__FILE__) . '/LockFile.php'; -require_once dirname(__FILE__) . '/NewsReader.php'; -require_once dirname(__FILE__) . '/PreviewFile.php'; -require_once dirname(__FILE__) . '/ProjectManager.php'; -require_once dirname(__FILE__) . '/RepositoryFetcher.php'; -require_once dirname(__FILE__) . '/RepositoryManager.php'; -require_once dirname(__FILE__) . '/ToolsXmllint.php'; -require_once dirname(__FILE__) . '/TranslationStatistic.php'; -require_once dirname(__FILE__) . '/TranslatorStatistic.php'; -require_once dirname(__FILE__) . '/UserNotes.php'; -require_once dirname(__FILE__) . '/VCSFactory.php'; /** * Ext JS controller class @@ -1170,43 +1151,6 @@ public function getAcronyms() ); } - /** - * Update a single folder recursively - */ - public function updateFolder() - { - $am = AccountManager::getInstance(); - if (!$am->isLogged()) { - return JsonResponseBuilder::failure(); - } - - $rm = RepositoryManager::getInstance(); - $path = $this->getRequestVariable('path'); - - $r = $rm->updateFolder($path); - - return JsonResponseBuilder::success( - array( - 'result' => $r - ) - ); - } - - /** - * Get the response after an update single folder - */ - function getUpdateFolderResponse() - { - if (!AccountManager::getInstance()->isLogged()) { - return JsonResponseBuilder::failure(); - } - - return JsonResponseBuilder::success( - array( - 'result' => json_encode($_SESSION['updateFolder']) - ) - ); - } /** * Get Entities to be display into a grid into the "All files modules" @@ -1252,19 +1196,19 @@ public function getDiff() $Rev1 = $this->getRequestVariable('Rev1'); $Rev2 = $this->getRequestVariable('Rev2'); - // Ensure Rev2 is always a value greater than Rev1 - if( $Rev2 < $Rev1 ) - { - $tmp = $Rev2; - $Rev2 = $Rev1; - $Rev1 = $tmp; - } +// // Ensure Rev2 is always a value greater than Rev1 +// if( $Rev2 < $Rev1 ) +// { +// $tmp = $Rev2; +// $Rev2 = $Rev1; +// $Rev1 = $tmp; +// } $r = VCSFactory::getInstance()->diff( $FileFullPath, $FileName, $Rev1, $Rev2 - ); + ); } elseif( $DiffType == 'file') { diff --git a/php/File.php b/php/File.php index a46c0bc0..4e65a8f1 100644 --- a/php/File.php +++ b/php/File.php @@ -1,10 +1,5 @@ /', $content, $match); + preg_match('//', $content, $match); if (!empty($match)) { $info['rev'] = $match[1]; } // Rev tag $match = array(); - preg_match('//U', $content, $match); + preg_match('//U', $content, $match); if (!empty($match)) { $info['en-rev'] = ($match[1] == 'n/a') ? 0 : $match[1]; $info['maintainer'] = $match[4]; diff --git a/php/GTranslate.php b/php/GTranslate.php index 65e09db2..94b30e63 100644 --- a/php/GTranslate.php +++ b/php/GTranslate.php @@ -1,6 +1,5 @@ update_time + (24*60*60)) > time() ) { + $this->updateKarmaList(); + $data = RepositoryFetcher::getStaticValue('karma_list', ''); + } + + return $data->data; + } + + private function updateKarmaList() + { + $am = AccountManager::getInstance(); + $appConf = $am->appConf; + $project = $am->project; + + $file = @file($appConf[$project]['vcs.karma.file']); + + $line_avail = array(); + $user = array(); + + // We cleanUp the content of this file + for( $i=0; $i < count($file); $i++) { + if( substr($file[$i], 0, 6) == 'avail|') { + $line_avail[] = $file[$i]; + + $t = explode("|", $file[$i]); + $users = trim($t[1]); + $karmas = ( isset($t[2]) ) ? trim($t[2]) : 'ALL'; + + $users = explode(",", $users); + $karmas = explode(",", $karmas); + + for( $j=0; $j < count($users); $j++ ) { + if( isset($user[$users[$j]]) ) { + + $user[$users[$j]]['karma'] = array_merge( $karmas, $user[$users[$j]]['karma'] ); + + } else { + + $user[$users[$j]]['karma'] = $karmas; + } + } + + } + } + + // We store this value into DB as json string to retrieve it later + $to_store = array( + "update_time" => time(), + "data" => $user + ); + RepositoryManager::setStaticValue('karma_list', '', json_encode($to_store)); + + } + + // Return true if the $user have the right karma for $module + public function checkKarma($user, $lang) + { + $userList = $this->getKarmaList(); + + $userList = (array) $userList; + + if( isset($userList[$user]) ) { + + $userList[$user] = (array) $userList[$user]; + + $karma = $userList[$user]['karma']; + + // Must have ALL, phpdoc or phpdoc/$lang + if( in_array("ALL", $karma) || in_array("phpdoc", $karma) || in_array("phpdoc/$lang", $karma) ) { + return true; + } else { + return 'You haven\'t good Karma for the chosen language. Your Current karma is : '.implode(", ", $karma); + } + + } + return 'You haven\'t any karma !'; + + } + + public function masterPhpAuthenticate($username, $password) + { + + $post = http_build_query( + array( + "token" => getenv("TOKEN"), + "username" => $username, + "password" => $password + ) + ); + + $opts = array( + "method" => "POST", + "header" => "Content-type: application/x-www-form-urlencoded", + "content" => $post, + ); + + $ctx = stream_context_create(array("http" => $opts)); + + $s = file_get_contents("https://master.php.net/fetch/cvsauth.php", false, $ctx); + + $a = @unserialize($s); + if (!is_array($a)) { + return 'master.php.net seems to be down !'; + } + if (isset($a["errno"])) { + if( $a["errno"] == 0 ) { return 'git login failed'; } + if( $a["errno"] == 1 ) { return 'Bad login'; } + if( $a["errno"] == 2 ) { return 'Bad password'; } + } + + return true; + } + + /** + + * + * @return An associative array{ 'err': git clone return code, 'output': git clone output contained in an array } + * + */ + public function checkout() + { + $am = AccountManager::getInstance(); + $appConf = $am->appConf; + $project = $am->project; + + $server = $appConf[$project]['vcs.server']; + $module = $appConf[$project]['vcs.module']; + + + $commands = array( + new ExecStatement('mkdir %s', array($appConf['GLOBAL_CONFIGURATION']['data.path'].$module)), + new ExecStatement('cd %s', array($appConf['GLOBAL_CONFIGURATION']['data.path'].$module)), + new ExecStatement('git init'), + new ExecStatement('git remote add origin %s', array($server)), + new ExecStatement('git config branch.master.remote origin'), + new ExecStatement('git config branch.master.merge refs/heads/master'), + new ExecStatement('git config user.name %s', array('Online Doc')), + new ExecStatement('git config user.email %s', array('phd@php.net')), + new ExecStatement('git config filter.rcs-keywords.clean %s', array('.git_filters/rcs-keywords.php.clean')), + new ExecStatement('git config filter.rcs-keywords.smudge %s', array('.git_filters/rcs-keywords.php.smudge %f')), + new ExecStatement('git pull 2>&1') + ); + + $err = 1; + $trial_threshold = 3; + $output = array(); + for ($trial = 0; $err != 0 && $trial < $trial_threshold; ++$trial) { + array_push($output, "git clone trial #$trial\n"); + SaferExec::execMulti($commands, $output, $err); // if no err, err = 0 + if ($err == 0) array_push($output, "Success.\n"); + } + + return array('err' => $err, 'output' => $output); + } + + public function fastUpdate() + { + $am = AccountManager::getInstance(); + $appConf = $am->appConf; + $project = $am->project; + + $commands = array( + new ExecStatement('cd %s', array($appConf[$project]['vcs.path'])), + // we separate pull on fetch and merge, because rcs-keywords work wrong with pull + new ExecStatement('git fetch'), + new ExecStatement('git merge origin/master 2>&1') + ); + + $err = 1; + $trial_threshold = 3; + $output = array(); + for ($trial = 0; $err != 0 && $trial < $trial_threshold; ++$trial) { + SaferExec::execMulti($commands, $output, $err); // if no err, err = 0 + } + + if ($err == 0) { + $revisions = ''; + foreach ($output as $string) { + //Updating eccb880..aafe899 + if (preg_match('/^Updating\s([a-f0-9]+\.\.[a-f0-9]+)$/', $string, $matches)) { + $revisions = $matches[1]; + break; + } + } + if (!$revisions) return false; + + $commands = array( + new ExecStatement('cd %s', array($appConf[$project]['vcs.path'])), + new ExecStatement('git whatchanged %s 2>&1', array($revisions)) + ); + $err = 1; + $trial_threshold = 3; + $output = array(); + for ($trial = 0; $err != 0 && $trial < $trial_threshold; ++$trial) { + SaferExec::execMulti($commands, $output, $err); // if no err, err = 0 + } + if ($err == 0) { + + $delete_stack = $update_stack = $create_stack = array(); + // :100755 000000 e64f1c9... 0000000... D PHPDoE_git_test/en/test.xml + foreach ($output as $string) { + if (preg_match('/^:\d+\s+\d+\s+[a-f0-9]+\.\.\.\s+[a-f0-9]+\.\.\.\s+([DMA])\s+(.*)$/', $string, $matches)) { + if ($matches[1] == 'A') { + $create_stack[] = $matches[2]; + } else if ($matches[1] == 'M') { + $update_stack[] = $matches[2]; + } else { + $delete_stack[] = $matches[2]; + } + } + } + + return array( + 'create' => $create_stack, + 'update' => $update_stack, + 'delete' => $delete_stack + ); + } else { + errlog(json_encode($output)); + return false; + } + } else { + errlog(json_encode($output)); + return false; + } + + + } + + /** + * pull . under DOC_EDITOR_VCS_PATH + * @return True if it does not report any error, false otherwise. + */ + public function update() + { + $am = AccountManager::getInstance(); + $appConf = $am->appConf; + $project = $am->project; + + $commands = array( + new ExecStatement('cd %s', array($appConf[$project]['vcs.path'])), + // we separate pull on fetch and merge, because rcs-keywords work wrong with pull + new ExecStatement('git fetch'), + new ExecStatement('git merge origin/master 2>&1') + ); + + $err = 1; + $trial_threshold = 3; + $output = array(); + for ($trial = 0; $err != 0 && $trial < $trial_threshold; ++$trial) { + array_push($output, "git pull trial #$trial\n"); + SaferExec::execMulti($commands, $output, $err); // if no err, err = 0 + if ($err == 0) array_push($output, "Success.\n"); + } + + if ($err == 0) { + return true; + } else { + errlog(json_encode($output)); + return false; + } + } + + /** + * Get git log of a specified file. + * + * @param $path The path of the file. + * @param $file The name of the file. + * @return An array containing all git log information. + */ + public function log($path, $file) + { + $am = AccountManager::getInstance(); + $appConf = $am->appConf; + $project = $am->project; + + $commands = array( + new ExecStatement('cd %s', array($appConf[$project]['vcs.path'].$path)), + new ExecStatement('git log --format="%%H | %%at | %%an | %%s" -- %s', array($file)) + ); + + $trial_threshold = 3; + while ($trial_threshold-- > 0) { + $output = array(); + SaferExec::execMulti($commands, $output); + if (strlen(trim(implode('', $output))) != 0) break; + } + + $part = $output; + + $final = array(); + for ($i=1; $i < count($part)-1; $i++ ) { + + $o = array(); + + $o['id'] = $i; + $o['raw'] = $part[$i]; + + $contents = trim($part[$i]); + $info = explode(' | ', $contents, 4); + + $o['revision'] = $info[0]; + $o['author'] = $info[2]; + $o['date'] = date('Y/m/d',$info[1]); + + $o['content'] = $info[3]; + + $final[] = $o; + } + + return $final; + } + + /** + * Execute git diff on specific file + * + * @param $path Path to file + * @param $file Filename + * @param $rev1 Diff revision 1 + * @param $rev2 Diff revision 2 + * @return Array of stdout of git diff + */ + public function diff($path, $file, $rev1, $rev2) + { + if ($rev1 == 0) return ''; + $am = AccountManager::getInstance(); + $appConf = $am->appConf; + $project = $am->project; + + $commands = array( + new ExecStatement('cd %s', array($appConf[$project]['vcs.path'].$path)), + new ExecStatement('git diff %s %s -- %s', array($rev1, $rev2, $file)) + ); + + $trial_threshold = 3; + while ($trial_threshold-- > 0) { + $output = array(); + SaferExec::execMulti($commands, $output); + if (strlen(trim(implode('', $output))) != 0) break; + } + + return $output; + } + + public function createCommitLogFile($log) + { + $path = tempnam(sys_get_temp_dir(), 'Doc_Editor_Commit_Log_Message'); + + $handle = fopen($path, "w"); + fwrite($handle, $log); + fclose($handle); + + return $path; + } + + public function deleteCommitLogFile($path) + { + @unlink($path); + } + + public function commitFolders($foldersPath) + { + + return Array(); + } + + /** + * Executes git commit + * + * @param $log Commit log + * @param $create Array of files to be created + * @param $update Array of files to be updated + * @param $delete Array of files to be deleted + * @return Associative array{ 'err': git ci return code, 'output': git ci output contained in an array } + */ + public function commit($log, $create=false, $update=false, $delete=false) + { + $am = AccountManager::getInstance(); + + $appConf = $am->appConf; + $project = $am->project; + $vcsLang = $am->vcsLang; + $vcsLogin = $am->vcsLogin; + $vcsEmail = $am->email; + // Info we must store into DB + $info = array(); + + $pathLogFile = $this->createCommitLogFile($log); + + $create_stack = array(); + for ($i = 0; $create && $i < count($create); $i++) { + $p_to = $create[$i]->full_path; + $p_from = $create[$i]->full_new_path; + $create_stack[] = $p_to; + + // Pre-commit : rename *-new/foo.xml to actual file + @copy($p_from, $p_to); + } + + $update_stack = array(); + for ($i = 0; $update && $i < count($update); $i++) { + $p_to = $update[$i]->full_path; + $p_from = $update[$i]->full_new_path; + $update_stack[] = $p_to; + + // Pre-commit : rename *-new/foo.xml to actual file + @copy($p_from, $p_to); + } + + $delete_stack = array(); + for ($i = 0; $delete && $i < count($delete); $i++) { + $delete_stack[] = $delete[$i]->full_path; + } + + $info['nbFilesCreate'] = count($create_stack); + $info['nbFilesDelete'] = count($delete_stack); + $info['nbFilesUpdate'] = count($update_stack); + + $commands = array( + new ExecStatement('cd %s', array($appConf[$project]['vcs.path'])) + ); + + if ($info['nbFilesDelete']) + { + $commands[] = new ExecStatement('git rm' . str_repeat(' %s', $info['nbFilesDelete']), $delete_stack); + } + if ( $info['nbFilesCreate']) + { + $commands[] = new ExecStatement('git add' . str_repeat(' %s', $info['nbFilesCreate']), $create_stack); + } + if ($info['nbFilesUpdate']) + { + $commands[] = new ExecStatement('git add' . str_repeat(' %s', $info['nbFilesUpdate']), $update_stack); + } + + $args = array_merge( + array($pathLogFile, $vcsLogin.( $vcsEmail ? ' <'.$vcsEmail.'>' : '')), + $update_stack, + $delete_stack, + $create_stack + ); + + $commands[] = new ExecStatement('git commit -F %s --author=%s --' . str_repeat(' %s', $info['nbFilesCreate'] + $info['nbFilesUpdate'] + $info['nbFilesDelete']).' 2>&1', $args); + + $err = 1; + $trial_threshold = 3; + $output = array(); + for ($trial = 0; $err != 0 && $trial < $trial_threshold; ++$trial) { + array_push($output, "git commit trial #$trial\n"); + SaferExec::execMulti($commands, $output, $err); // if no err, err = 0 + if ($err == 0) array_push($output, "Success.\n"); + } + + + // Delete tmp logMessage file + $this->deleteCommitLogFile($pathLogFile); + + + + if ($err == 0) { + + // push changes to server + $err = 1; + $trial_threshold = 3; + $temp_output = array(); + $commands = array( + new ExecStatement('cd %s', array($appConf[$project]['vcs.path'])), + new ExecStatement('git push 2>&1') + ); + for ($trial = 0; $err != 0 && $trial < $trial_threshold; ++$trial) { + array_push($output, "git push trial #$trial\n"); + SaferExec::execMulti($commands, $temp_output, $err); // if no err, err = 0 + if ($err == 0) array_push($output, "Success.\n"); + } + + + + // adding revision + $err = 1; + $trial_threshold = 3; + $temp_output = array(); + $commands = array( + new ExecStatement('cd %s', array($appConf[$project]['vcs.path'])) + ); + if ( $info['nbFilesCreate']) + { + $commands[] = new ExecStatement('rm' . str_repeat(' %s', $info['nbFilesCreate']), $create_stack); + $commands[] = new ExecStatement('git checkout --' . str_repeat(' %s', $info['nbFilesCreate']), $create_stack); + } + if ($info['nbFilesUpdate']) + { + $commands[] = new ExecStatement('rm' . str_repeat(' %s', $info['nbFilesUpdate']), $update_stack); + $commands[] = new ExecStatement('git checkout --' . str_repeat(' %s', $info['nbFilesUpdate']), $update_stack); + } + for ($trial = 0; $err != 0 && $trial < $trial_threshold; ++$trial) { + SaferExec::execMulti($commands, $temp_output, $err); // if no err, err = 0 + } + + // We stock this info into DB + $info['user'] = $vcsLogin; + $info['lang'] = $vcsLang; + RepositoryManager::getInstance()->setStaticValue('info', 'commitFiles', json_encode($info), true); + } else { + $this->revert($create, $update, $delete); + errlog(json_encode($output)); + } + + return array('err' => $err, 'output' => $output); + } + + public function revert($create=false, $update=false, $delete=false) + { + $am = AccountManager::getInstance(); + + $appConf = $am->appConf; + $project = $am->project; + + $create_stack = array(); + for ($i = 0; $create && $i < count($create); $i++) { + $create_stack[] = $create[$i]->full_path; + } + + $update_stack = array(); + for ($i = 0; $update && $i < count($update); $i++) { + $update_stack[] = $update[$i]->full_path; + } + + $delete_stack = array(); + for ($i = 0; $delete && $i < count($delete); $i++) { + $delete_stack[] = $delete[$i]->full_path; + } + + $commands = array( + new ExecStatement('cd %s', array($appConf[$project]['vcs.path'])), + new ExecStatement('git checkout --' . str_repeat(' %s', count($create_stack) + count($update_stack) + count($delete_stack)) . ' 2>&1', array_merge($create_stack, $update_stack, $delete_stack)) + ); + + $err = 1; + $trial_threshold = 3; + $output = array(); + for ($trial = 0; $err != 0 && $trial < $trial_threshold; ++$trial) { + array_push($output, "git revert trial #$trial\n"); + SaferExec::execMulti($commands, $output, $err); // if no err, err = 0 + if ($err == 0) array_push($output, "Success.\n"); + } + + return array('err' => $err, 'output' => $output); + } +} + +?> diff --git a/php/LogManager.php b/php/LogManager.php index d3ce00e9..10d3bd10 100644 --- a/php/LogManager.php +++ b/php/LogManager.php @@ -1,6 +1,5 @@ $original_revision, "en_revision" => $new_en_revision, "maintainer" => $new_maintainer, - "fileModifiedEN" => ( $isModifiedEN ) ? '{"user":"'.$isModifiedEN["user"].'", "anonymousIdent":"'.$isModifiedEN["anonymousIdent"].'"}' : false, + "fileModifiedEN" => false, "fileModifiedLang" => ( $isModifiedLang ) ? '{"user":"'.$isModifiedLang["user"].'", "anonymousIdent":"'.$isModifiedLang["anonymousIdent"].'"}' : false ); } else { @@ -387,7 +384,7 @@ public function getPendingReview() $temp['reviewed'] = $new_reviewed; $temp['maintainer'] = $new_maintainer; - $temp['fileModifiedEN'] = ( $isModifiedEN ) ? '{"user":"'.$isModifiedEN["user"].'", "anonymousIdent":"'.$isModifiedEN["anonymousIdent"].'"}' : false; + $temp['fileModifiedEN'] = false; $temp['fileModifiedLang'] = ( $isModifiedLang ) ? '{"user":"'.$isModifiedLang["user"].'", "anonymousIdent":"'.$isModifiedLang["anonymousIdent"].'"}' : false; } else { $temp['reviewed'] = $a->reviewed; diff --git a/php/RepositoryManager.php b/php/RepositoryManager.php index 2df1a1ca..443e56b3 100644 --- a/php/RepositoryManager.php +++ b/php/RepositoryManager.php @@ -1,14 +1,5 @@ lock()) { // exec the checkout $rtn = VCSFactory::getInstance()->checkout(); @@ -173,126 +165,7 @@ public function cleanUpBeforeCheckBuild() } - /** - * Update a single folder of the repository to sync our local copy. - */ - public function updateFolder($path) - { - $rf = RepositoryFetcher::getInstance(); - $am = AccountManager::getInstance(); - $project = $am->project; - - // We reset the session var - unset($_SESSION['updateFolder']['newFolders']); - unset($_SESSION['updateFolder']['newFiles']); - - // We search for the first folder ; can be en/ LANG/ or doc-base/ for example - $t = explode("/", $path); - $firstFolder = $t[1]; - - array_shift($t); - array_shift($t); - - $pathWithoutLang = '/' . implode("/", $t).'/'; - - // If we are in the root folder, we have //. We must consider this case. - if( $pathWithoutLang == '//' ) { $pathWithoutLang = '/'; } - - if( $firstFolder == "" ) { - $firstFolder = 'root'; - } - - $lock = new LockFile('project_' . $project . '_' . $firstFolder . '_lock_update_folder'); - - if ($lock->lock()) { - - if( $this->isValidLanguage($firstFolder) ) { - - // This is only for EN and LANG. For others, we don't make any version's comparaison. - // We start be get files & folders in this folder to compare it after the update - $actual = $rf->getFilesByDirectory($path); - $actualFiles = $actualFolders = array(); - for( $i=0; $i < count($actual); $i++ ) { - // We get files and folders - if( $actual[$i]['type'] === 'folder' ) { - $actualFolders[$actual[$i]['text']] = array( "name"=> $actual[$i]['text'] ); - } else { - $actualFiles[$actual[$i]['text']] = array( "name"=> $actual[$i]['text'], "version"=> "" ); - } - } - - // We get versions for this files - while( list($k, $v) = each($actualFiles) ) { - - $file = new File($firstFolder, $pathWithoutLang.$k); - $info = $file->getInfo(); - $actualFiles[$k]['version'] = $info['rev']; - - } - - } - - // We update the repository recursively - VCSFactory::getInstance()->updateSingleFolder($path); - - if( $this->isValidLanguage($firstFolder) ) { - // We throw the revCheck on this folder only if the langue is valide - $this->applyRevCheck($pathWithoutLang, 'update', $firstFolder); - - // We get files under this folder to make comparaison after the update - $now = $rf->getFilesByDirectory($path); - $nowFiles = $nowFolders = array(); - - for( $i=0; $i < count($now); $i++ ) { - // We get all folders & files - if( $now[$i]['type'] === 'folder' ) { - $nowFolders[$now[$i]['text']] = array( "name"=> $now[$i]['text'] ); - } else { - $nowFiles[$now[$i]['text']] = array( "name"=> $now[$i]['text'], "version"=> "" ); - } - } - - // We get versions of this files - while( list($k, $v) = each($nowFiles) ) - { - $file = new File($firstFolder, $pathWithoutLang.$k); - $info = $file->getInfo(); - $nowFiles[$k]['version'] = $info['rev']; - } - - //~ debug(json_encode($nowFiles)); - //~ debug(json_encode($actualFiles)); - - // We search for differences - reset($nowFiles); reset($nowFolders); - while( list($k, $v) = each($nowFiles) ) { - // If the file exist before, and at the same version, we delete it from $nowFiles - if( isset($actualFiles[$k] ) && $actualFiles[$k]['version'] == $v['version'] ) { - unset($nowFiles[$k]); - } - } - while( list($k, $v) = each($nowFolders) ) { - // If the folder exist before, we delete it from $nowFolders - if( isset($actualFolders[$k] ) ) { - unset($nowFolders[$k]); - } - } - - // $nowFolders contains only new folders who don't exist before the update - // and $nowFiles, new files who don't exist before the update or who the version have changed - - // We store this result in session to allow get it if this processus take more than 30 seconds (max execution time) - $_SESSION['updateFolder']['newFolders'] = $nowFolders; - $_SESSION['updateFolder']['newFiles'] = $nowFiles; - } - - } - - $lock->release(); - - return json_encode($_SESSION['updateFolder']); - } /** @@ -823,6 +696,46 @@ public function addPendingDelete($file) ); } + // not tested + public function fastUpdate() + { + if ($changed_files = VCSFactory::getInstance()->fastUpdate()) { + + foreach (array_merge($changed_files['create'], $changed_files['update']) as $path) { + $path = explode('/', $path, 2); + $file = new File($path[0], $path[1]); + + + $tmp = Array($file); + $this->delWork($tmp); + + // We must now insert information into the app for this file + $this->addFileInfo($tmp); + } + foreach ($changed_files['update'] as $path) { + $path = explode('/', $path, 2); + $file = new File($path[0], $path[1]); + + // Delete from work table + $tmp = Array($file); + $this->delWork($tmp); + + // We must now update information into the app for this file + $this->updateFileInfo($tmp); + } + foreach ($changed_files['delete'] as $path) { + $path = explode('/', $path, 2); + $file = new File($path[0], $path[1]); + + // Delete this new file from the fileSystem + @unlink($file->full_new_path); + + // Delete from work table + $this->delWork(array($file)); + } + } + } + /** * Update the VCS for each file we try to commit before start the commit processus. * As it, we ensure all VCS conflict. @@ -833,135 +746,59 @@ public function addPendingDelete($file) */ public function beforeCommitChanges($files, $type) { - $am = AccountManager::getInstance(); - $appConf = $am->appConf; - $project = $am->project; - $stack = Array(); - switch($type) { - - case 'new' : - - // For new files, we must ensure that this file is steel non exist into the repository before commit it. - for( $i=0; $i < count($files); $i++ ) { - - VCSFactory::getInstance()->updateSingleFile($files[$i]); - - if( $files[$i]->exist() ) { - - // This file exist in the repository ! We can't commit it as a new file now. - // We must update this file into the app, and suppress it from this commit process - - // Delete this new file from the fileSystem -//~ @unlink($files[$i]->full_path.'.new'); - - // Delete from work table - $tmp = Array($files[$i]); - - // exclude from commit - $this->delWork($tmp); - - // We must now update information into the app for this new file - $this->updateFileInfo($tmp); - - } else { - // This file still not exist in current respository, we can commit it - $stack[] = $files[$i]; - } - - } - - break; - - case 'update' : - - // For update files, we must ensure that this file haven't been modified since last big update - for( $i=0; $i < count($files); $i++ ) { - - // We get the filemtime for this file to compare with the filemtime after the update. - $oldTime = filemtime($files[$i]->full_path); - - VCSFactory::getInstance()->updateSingleFile($files[$i]); - - if( $files[$i]->exist() ) { - - // If this file haven't been deleted since last update - $newTime = filemtime($files[$i]->full_path); - + if ($files) { + switch($type) { - if( $newTime != $oldTime ) { + case 'new' : - // This file have been modified since last update. - // We can't commit our change, otherwise this file will be marked as conflict - // We just update the info for this file and skip it from this commit - - $tmp = array($files[$i]); - - // exclude from commit - $this->delWork($tmp); - - // We must now update information into the app for this file - $this->updateFileInfo($tmp); - - } else { - - // This file haven't been modified since last update. - // We can continue the commit processus for it + // For new files, we must ensure that this file is steel non exist into the repository before commit it. + for( $i=0; $i < count($files); $i++ ) { + if( !$files[$i]->exist() ) { + // This file still not exist in current respository, we can commit it $stack[] = $files[$i]; - } - - } else { - - // Here, we try to update a file which have been deleted since last update - // We delete our .new, and remove all reference for it from the DB - - // Delete this new file from the fileSystem - @unlink($files[$i]->full_new_path); - - // Delete from work table - $this->delWork(array($files[$i])); - } - } - - break; - - case 'delete' : + break; - // For deleted files, we must ensure that this file is steel exist into the repository before commit it. - for( $i=0; $i < count($files); $i++ ) { + case 'update' : - VCSFactory::getInstance()->updateSingleFile($files[$i]); + // For update files, we must ensure that this file haven't been modified since last big update + for( $i=0; $i < count($files); $i++ ) { - if( $files[$i]->exist() ) { - - // This file still exists in current respository, we can commit it for delete - $stack[] = $files[$i]; + // We get the filemtime for this file to compare with the filemtime after the update. + $oldTime = filemtime($files[$i]->full_path); + if( $files[$i]->exist() ) { + // If this file haven't been deleted since last update + $newTime = filemtime($files[$i]->full_path); + if( $newTime == $oldTime ) { + // This file haven't been modified since last update. + // We can continue the commit processus for it + $stack[] = $files[$i]; + } + } - } else { + } - // This file don't exist in the repository ! We can't commit it as a deleted file now. - // We must update this file into the app, and suppress it from this commit process + break; - // Delete from work table - $tmp = array($files[$i]); + case 'delete' : - // exclude from commit - $this->delWork($tmp); + // For deleted files, we must ensure that this file is steel exist into the repository before commit it. + for( $i=0; $i < count($files); $i++ ) { - // Remove this files from db - $this->delFiles($tmp); + if( $files[$i]->exist() ) { + // This file still exists in current respository, we can commit it for delete + $stack[] = $files[$i]; + } } - } - - break; - + break; + } } return $stack; @@ -1140,7 +977,8 @@ public function commitChanges($ids, $log) } } - // Before commit, we need to update this file to find if there haven't been modified since last update process + // Before commit, we need to update all files and find if there haven't been modified since last update process + $this->fastUpdate(); $create_stack = $this->beforeCommitChanges($create_stack, 'new'); $update_stack = $this->beforeCommitChanges($update_stack, 'update'); $delete_stack = $this->beforeCommitChanges($delete_stack, 'delete'); @@ -1277,8 +1115,6 @@ public function clearLocalChange($type, $file) $am = AccountManager::getInstance(); $appConf = $am->appConf; $project = $am->project; - $vcsLogin = $am->vcsLogin; - $anonymousIdent = $am->anonymousIdent; $lang = $file->lang; $path = $file->path; @@ -1588,7 +1424,169 @@ public function updateFileInfo($files) } } } + public function addFileInfo($files) + { + + $am = AccountManager::getInstance(); + foreach ($files as $file) { + + $info = $file->getInfo(); + $size = intval(filesize($file->full_path) / 1024); + $date = filemtime($file->full_path); + + if ($file->lang == 'en') { // en file + // update EN file info + $s = 'INSERT INTO `files` + SET + `xmlid` = "%s", + `revision` = "%s", + `size` = "%s", + `mdate` = "%s", + `project` = "%s", + `lang` = "%s", + `path` = "%s", + `name` = "%s"'; + $params = array( + $info['xmlid'], $info['rev'], $size, $date, $am->project, $file->lang, $file->path, $file->name + ); + $this->conn->query($s, $params); + + // update LANG file info + $s = 'UPDATE `files` + SET + `en_revision` = "%s" + WHERE + `project` = "%s" AND + `lang` != "%s" AND + `path` = "%s" AND + `name` = "%s"'; + $params = array( + $info['rev'], $am->project, $file->lang, $file->path, $file->name + ); + $this->conn->query($s, $params); + + } else { // lang file + + // If this file don't exist in EN, we should skip all this proces + $en = new File('en', $file->path.$file->name); + + if( $en->exist() ) { + + $enInfo = $en->getInfo(); + + $sizeEN = intval(filesize($en->full_path) / 1024); + $dateEN = filemtime($en->full_path); + + $size_diff = $sizeEN - $size; + $date_diff = (intval((time() - $dateEN) / 86400)) + - (intval((time() - $date) / 86400)); + + // update LANG file info + $s = 'INSERT INTO `files` + SET + `xmlid` = "%s", + `revision` = "%s", + `en_revision`= "%s", + `reviewed` = "%s", + `reviewed_maintainer` = "%s", + `size` = "%s", + `mdate` = "%s", + `maintainer` = "%s", + `status` = "%s", + `size_diff` = "%s", + `mdate_diff` = "%s", + `project` = "%s", + `lang` = "%s", + `path` = "%s", + `name` = "%s"'; + $params = array( + $info['xmlid'], + $info['en-rev'], + $enInfo['rev'], + trim($info['reviewed']), + trim($info['reviewed_maintainer']), + $size, + $date, + trim($info['maintainer']), + trim($info['status']), + $size_diff, + $date_diff, + $am->project, + $file->lang, + $file->path, + $file->name + ); + $this->conn->query($s, $params); + + // Run the errorTools under this file + $tmpFile[0]['en_content'] = $en->read(true); + $tmpFile[0]['lang_content'] = $file->read(true); + $tmpFile[0]['lang'] = $file->lang; + $tmpFile[0]['path'] = $file->path; + $tmpFile[0]['name'] = $file->name; + $tmpFile[0]['maintainer'] = $info['maintainer']; + + $errorTools = new ToolsError(); + $errorTools->updateFilesError($tmpFile); + + } else // This file exist only in LANG version, like translation.xml, for example + { + + // update LANG file info + $s = 'INSERT INTO `files` + SET + `xmlid` = "%s", + `revision` = "%s", + `en_revision`= "%s", + `reviewed` = "%s", + `reviewed_maintainer` = "%s", + `size` = "%s", + `mdate` = "%s", + `maintainer` = "%s", + `status` = "%s", + `size_diff` = "%s", + `mdate_diff` = "%s", + `project` = "%s", + `lang` = "%s", + `path` = "%s", + `name` = "%s"'; + $params = array( + $info['xmlid'], + $info['en-rev'], + 0, + trim($info['reviewed']), + trim($info['reviewed_maintainer']), + $size, + $date, + trim($info['maintainer']), + trim($info['status']), + 0, + 0, + $am->project, + $file->lang, + $file->path, + $file->name + ); + $this->conn->query($s, $params); + + // Run the errorTools under this file + // If the EN file don't exist, it's because we have a file witch only exist into LANG, for example, translator.xml + // We fake the EN with the LANG content to fake the errorTools ;) + $tmpFile[0]['en_content'] = $file->read(true); + $tmpFile[0]['lang_content'] = $file->read(true); + $tmpFile[0]['lang'] = $file->lang; + $tmpFile[0]['path'] = $file->path; + $tmpFile[0]['name'] = $file->name; + $tmpFile[0]['maintainer'] = $info['maintainer']; + + $errorTools = new ToolsError(); + $errorTools->updateFilesError($tmpFile); + + } + } + } + } /** * Read the translation's file which hold informations about all translators * and put it into database. diff --git a/php/SaferExec.php b/php/SaferExec.php index efd7bb5f..2329f981 100644 --- a/php/SaferExec.php +++ b/php/SaferExec.php @@ -35,51 +35,4 @@ public static function execMulti(array $command_array, &$output = array(), &$ret } } -class ExecStatement -{ - private $command; - private $args; - - /** - * Represents a shell command to be executed. - * - * The first parameter, $command, should be a format string (eg: the kind of string you pass to printf). - * The directives in that string should correspond to the arguments passed as part of the second parameter, the $args array. - * - * The assumptions about security made here only holds when $command is a static string. If $command is - * even partly derived from user input, any assumptions made about safety and security no longer hold. - */ - public function __construct($command, array $args = array()) - { - $this->command = $command; - - // We validate and escape certain types of input. - $this->args = array(); - foreach ($args as $key => $val) - { - if (is_bool($val) || is_float($val) || is_int($val) || is_null($val)) - $this->args[$key] = $val; - else if (is_string($val)) - $this->args[$key] = escapeshellarg($val); - else if (is_object($val)) - $this->args[$key] = escapeshellarg($val->__toString()); - else - trigger_error('Argument with unexpected type used to construct ExecStatement. It has been omitted from the command string.', E_USER_WARNING); - } - } - public function getCommand() - { - return $this->command; - } - - public function getArgs() - { - return $this->args; - } - - public function __toString() - { - return vsprintf($this->getCommand(), $this->getArgs()); - } -} diff --git a/php/SvnClient.php b/php/SvnClient.php index 2ca71692..2dd6cc9d 100644 --- a/php/SvnClient.php +++ b/php/SvnClient.php @@ -1,6 +1,5 @@ conn->query($s, $params); - + $result = array(); while( $r = $res->fetch_array() ) { $result[$r['lang']]['total'] = $r['total']; $result[$r['lang']]['total_size'] = $r['total_size']; @@ -93,7 +89,7 @@ public function getTransFileCount($lang='all') `files` WHERE `revision` = `en_revision` AND - `revision` != 0 AND + `revision` != "0" AND `project` = "%s" GROUP BY `lang`'; $params = array($project); @@ -107,7 +103,7 @@ public function getTransFileCount($lang='all') WHERE `lang` = "%s" AND `revision` = `en_revision` AND - `revision` != 0 AND + `revision` != "0" AND `project` = "%s"'; $params = array($lang, $project); } @@ -273,7 +269,7 @@ public function computeSummary($lang='all') $summary[0]['nbFiles'] = ( isset($uptodate[$lang]['total']) ) ? $uptodate[$lang]['total'] : 0; $summary[0]['percentFiles'] = ( isset($uptodate[$lang]['total']) ) ? round(($uptodate[$lang]['total']*100)/$nbFiles[$lang]['total'], 2) : 0; $summary[0]['sizeFiles'] = ( !isset($uptodate[$lang]['total_size']) ) ? 0 : $uptodate[$lang]['total_size']; - $summary[0]['percentSize'] = (!isset($uptodate[$lang]['total_size'])) ? 0 : round(($uptodate[$lang]['total_size']*100)/$nbFiles[$lang]['total_size'], 2); + $summary[0]['percentSize'] = (!isset($uptodate[$lang]['total_size']) || $uptodate[$lang]['total_size'] == 0 ) ? 0 : round(($uptodate[$lang]['total_size']*100)/$nbFiles[$lang]['total_size'], 2); $summary[1]['id'] = 2; $summary[1]['libel'] = 'Stale files'; diff --git a/php/TranslatorStatistic.php b/php/TranslatorStatistic.php index 6a155925..cf3de00d 100644 --- a/php/TranslatorStatistic.php +++ b/php/TranslatorStatistic.php @@ -1,8 +1,5 @@ appConf; if (!isset(self::$instance)) { + $appConf = AccountManager::getInstance()->appConf; switch ($appConf['GLOBAL_CONFIGURATION']['vcs.type']) { + case 'git': + self::$instance = GitClient::getInstance(); + break; case 'cvs': - require_once dirname(__FILE__) . '/CvsClient.php'; self::$instance = CvsClient::getInstance(); break; case 'svn': - require_once dirname(__FILE__) . '/SvnClient.php'; self::$instance = SvnClient::getInstance(); break; } diff --git a/php/conf/project.php.ini b/php/conf/project.php.ini index f661983a..e7b019c9 100644 --- a/php/conf/project.php.ini +++ b/php/conf/project.php.ini @@ -17,15 +17,13 @@ project.langadmin.de = "nikic" project.langadmin.ar = "visualmind" project.langadmin.pt_BR = "klaussilveira" -vcs.server.host = "svn.php.net" -vcs.server.repos = "repository/" -vcs.server.path = "repository/phpdoc/modules/doc-all/" -vcs.server.port = 443 +; need to change this in local.php.ini +vcs.server = "https://specialLogin:specialPass@git.php.net/push/playground.git/" vcs.anon.login = vcs.anon.passwd = -vcs.module = "phpdoc-all" +vcs.module = "phpdoc" vcs.karma.file = "https://svn.php.net/viewvc/SVNROOT/global_avail?view=co" vcs.path = "{GLOBAL_CONFIGURATION['data.path']}{PHP['vcs.module']}/" diff --git a/php/controller.php b/php/controller.php index e9190c6c..003bc6d2 100755 --- a/php/controller.php +++ b/php/controller.php @@ -7,8 +7,7 @@ error_reporting(E_ALL); set_time_limit(0); -require_once "./ExtJsController.php"; -require_once "./JsonResponseBuilder.php"; +require_once __DIR__.'/loader.php'; $controller = new ExtJsController(array_merge($_GET, $_POST)); diff --git a/php/loader.php b/php/loader.php new file mode 100755 index 00000000..439c71f0 --- /dev/null +++ b/php/loader.php @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/php/utility.php b/php/utility.php index 76e7eabe..35208f86 100644 --- a/php/utility.php +++ b/php/utility.php @@ -1,6 +1,5 @@