diff --git a/framework/src/Maveriks/WebApplication.php b/framework/src/Maveriks/WebApplication.php index 7e7f60667..accc6b8f3 100644 --- a/framework/src/Maveriks/WebApplication.php +++ b/framework/src/Maveriks/WebApplication.php @@ -290,7 +290,7 @@ class WebApplication } // Setting current workspace to Api class - Services\Api::setWorkspace(SYS_SYS); + Services\Api::setWorkspace(config("system.workspace")); $cacheDir = defined("PATH_WORKSPACE") ? PATH_WORKSPACE : (defined("PATH_C") ? PATH_C : sys_get_temp_dir()); $sysConfig = System::getSystemConfiguration(); @@ -387,7 +387,7 @@ class WebApplication } } - Services\OAuth2\Server::setWorkspace(SYS_SYS); + Services\OAuth2\Server::setWorkspace(config("system.workspace")); $this->rest->addAPIClass('\ProcessMaker\\Services\\OAuth2\\Server', 'oauth2'); return $uri; @@ -498,15 +498,16 @@ class WebApplication } define("SYS_SYS", $workspace); + config(["system.workspace" => $workspace]); - if (!file_exists(PATH_DB . SYS_SYS . PATH_SEP . "db.php")) { + if (!file_exists(PATH_DB . config("system.workspace") . PATH_SEP . "db.php")) { $rest = new \Maveriks\Extension\Restler(); $rest->setMessage(new RestException(Api::STAT_APP_EXCEPTION, \G::LoadTranslation("ID_NOT_WORKSPACE"))); exit(0); } - $arraySystemConfiguration = System::getSystemConfiguration('', '', SYS_SYS); + $arraySystemConfiguration = System::getSystemConfiguration('', '', config("system.workspace")); //Do not change any of these settings directly, use env.ini instead ini_set('display_errors', $arraySystemConfiguration['display_errors']); @@ -524,11 +525,11 @@ class WebApplication define('SYS_SKIN', $arraySystemConfiguration['default_skin']); define('DISABLE_DOWNLOAD_DOCUMENTS_SESSION_VALIDATION', $arraySystemConfiguration['disable_download_documents_session_validation']); - require_once(PATH_DB . SYS_SYS . "/db.php"); + require_once(PATH_DB . config("system.workspace") . "/db.php"); // defining constant for workspace shared directory - $this->workspaceDir = PATH_DB . SYS_SYS . PATH_SEP; - $this->workspaceCacheDir = PATH_DB . SYS_SYS . PATH_SEP . "cache" . PATH_SEP; + $this->workspaceDir = PATH_DB . config("system.workspace") . PATH_SEP; + $this->workspaceCacheDir = PATH_DB . config("system.workspace") . PATH_SEP . "cache" . PATH_SEP; define("PATH_WORKSPACE", $this->workspaceDir); // including workspace shared classes -> particularlly for pmTables @@ -539,7 +540,7 @@ class WebApplication define("PATH_SMARTY_C", PATH_C . "smarty" . PATH_SEP . "c"); define("PATH_SMARTY_CACHE", PATH_C . "smarty" . PATH_SEP . "cache"); - define("PATH_DATA_SITE", PATH_DATA . "sites/" . SYS_SYS . "/"); + define("PATH_DATA_SITE", PATH_DATA . "sites/" . config("system.workspace") . "/"); define("PATH_DOCUMENT", PATH_DATA_SITE . "files/"); define("PATH_DATA_MAILTEMPLATES", PATH_DATA_SITE . "mailTemplates/"); define("PATH_DATA_PUBLIC", PATH_DATA_SITE . "public/"); diff --git a/gulliver/bin/tasks/pakeGulliver.php b/gulliver/bin/tasks/pakeGulliver.php index 804529e07..18e3600b1 100644 --- a/gulliver/bin/tasks/pakeGulliver.php +++ b/gulliver/bin/tasks/pakeGulliver.php @@ -2230,7 +2230,9 @@ function run_update_plugin_attributes($task, $args) //Set variables $pluginName = $args[0]; // virtual SYS_SYS for cache - define('SYS_SYS', uniqid()); + $sys_sys = uniqid(); + define('SYS_SYS', $sys_sys); + config(["system.workspace" => $sys_sys]); foreach (PmSystem::listWorkspaces() as $value) { \ProcessMaker\Util\Cnn::connect($value->name); //Update plugin attributes diff --git a/gulliver/includes/inc.ajax.php b/gulliver/includes/inc.ajax.php index 84a828a0c..e45099ece 100644 --- a/gulliver/includes/inc.ajax.php +++ b/gulliver/includes/inc.ajax.php @@ -107,5 +107,5 @@ } function ajax_LoadJavaScript( $phpMethod, $phpFile ) { - print ' LoadPopJavaScript ( "/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/tools/loadJavaScript.html?method=' .$phpMethod . '&file=' . $phpFile . "\");\n"; + print ' LoadPopJavaScript ( "/sys' . config("system.workspace") . '/' . SYS_LANG . '/' . SYS_SKIN . '/tools/loadJavaScript.html?method=' .$phpMethod . '&file=' . $phpFile . "\");\n"; } diff --git a/gulliver/js/ext/min/ext-all.js b/gulliver/js/ext/min/ext-all.js index dc465ea52..30f7b1123 100644 --- a/gulliver/js/ext/min/ext-all.js +++ b/gulliver/js/ext/min/ext-all.js @@ -16,10 +16,8 @@ this.notify=function(title,msg,type,time) this.getBrowser=function() {var browsersList=new Array("opera","msie","firefox","chrome","safari");var browserMeta=navigator.userAgent.toLowerCase();var name='Unknown';var version='';var screen={width:Ext.getBody().getViewSize().width,height:Ext.getBody().getViewSize().height};var so=Ext.isLinux?'Linux':(Ext.isWindows?'Windows':(Ext.isMac?'Mac OS':'Unknown'));for(var i=0;i"+v+""},align:"right"},{width:valueColumnWidth,dataIndex:"value"},{hidden:true,dataIndex:"section"}],autoHeight:true,columnLines:true,trackMouseOver:false,disableSelection:true,view:new Ext.grid.GroupingView({forceFit:true,headersDisabled:true,groupTextTpl:'{group}'}),loadMask:true});} -this.cookie={create:function(name,value,days){if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));var expires="; expires="+date.toGMTString();}else var expires="";document.cookie=name+"="+value+expires+"; path=/";},read:function(name){var nameEQ=name+"=";var ca=document.cookie.split(';');for(var i=0;i"+v+"";},align:"right"},{width:valueColumnWidth,dataIndex:"value",renderer:function(v){return""+v+"";}},{hidden:true,dataIndex:"section"}],autoHeight:true,columnLines:true,trackMouseOver:false,disableSelection:true,view:new Ext.grid.GroupingView({forceFit:true,headersDisabled:true,groupTextTpl:'{group}'}),loadMask:true});};this.cookie={create:function(name,value,days){if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));var expires="; expires="+date.toGMTString();}else var expires="";document.cookie=name+"="+value+expires+"; path=/";},read:function(name){var nameEQ=name+"=";var ca=document.cookie.split(';');for(var i=0;i','
','

',t,'

',s,'
','
',''].join('');} return{msg:function(title,format,type,time){if(!msgCt){msgCt=Ext.DomHelper.insertFirst(document.body,{id:'msg-div',style:'position:absolute'},true);} diff --git a/gulliver/js/ext/pmos-common.js b/gulliver/js/ext/pmos-common.js index 4df92a014..d4e4dc1e0 100644 --- a/gulliver/js/ext/pmos-common.js +++ b/gulliver/js/ext/pmos-common.js @@ -93,13 +93,12 @@ PMExtJSCommon = function() { return {name:name, version:version, screen: screen} } - this.createInfoPanel = function(url, params, columnsSize) - { + this.createInfoPanel = function (url, params, columnsSize) { var labelColumnWidth = 170; var valueColumnWidth = 350; params = params || {}; - if(typeof columnsSize != 'undefined') { + if (typeof columnsSize !== 'undefined') { labelColumnWidth = columnsSize[0] || labelColumnWidth; valueColumnWidth = columnsSize[1] || valueColumnWidth; } @@ -112,39 +111,44 @@ PMExtJSCommon = function() { method : 'POST' }), baseParams: params, - reader : new Ext.data.JsonReader({ - fields : [{name : 'label'}, {name : 'value'}, {name : 'section'}] + reader: new Ext.data.JsonReader({ + fields: [{name: 'label'}, {name: 'value'}, {name: 'section'}] }), groupField: 'section' }), - columns : [ + columns: [ { - width : labelColumnWidth, - dataIndex : "label", - renderer: function(v){return ""+v+""}, + width: labelColumnWidth, + dataIndex: "label", + renderer: function (v) { + return "" + v + ""; + }, align: "right" }, { - width : valueColumnWidth, - dataIndex : "value" + width: valueColumnWidth, + dataIndex: "value", + renderer: function (v) { + return "" + v + ""; + } }, { hidden: true, dataIndex : "section" } ], - autoHeight : true, + autoHeight: true, columnLines: true, - trackMouseOver:false, - disableSelection:true, + trackMouseOver: false, + disableSelection: true, view: new Ext.grid.GroupingView({ - forceFit:true, - headersDisabled : true, + forceFit: true, + headersDisabled: true, groupTextTpl: '{group}' }), loadMask: true }); - } + }; this.cookie = { create: function(name, value, days) { diff --git a/gulliver/js/maborak/core/maborak.js b/gulliver/js/maborak/core/maborak.js index ed51edd17..586df72bb 100644 --- a/gulliver/js/maborak/core/maborak.js +++ b/gulliver/js/maborak/core/maborak.js @@ -1596,7 +1596,8 @@ length=100;if(length>400) length=400;var x=e.clientX+10+xOffset;var y=e.clientY+5+yOffset;if(x+length>w){x=x-length-20;} pmtooltip.style.display='block';pmtooltip.innerHTML=tooltipTxt;pmtooltip.style.left=x+'px';pmtooltip.style.top=y+'px';pmtooltip.style.width=length+'px';pmtooltipShadow.style.display='block';pmtooltipShadow.style.left=(x+pmshadowSize)+'px';pmtooltipShadow.style.top=(y+pmshadowSize)+'px';pmtooltipShadow.style.width=pmtooltip.offsetWidth+'px';pmtooltipShadow.style.height=pmtooltip.offsetHeight+'px';} function hideTooltip(){pmtooltip.style.display='none';pmtooltipShadow.style.display='none';} -(function(win){var whiteSpaceRe=/^\s*|\s*$/g,undef,isRegExpBroken='B'.replace(/A(.)|B/,'$1')==='$1';var tinymce={majorVersion:'3',minorVersion:'5.7',releaseDate:'2012-09-20',_init:function(){var t=this,d=document,na=navigator,ua=na.userAgent,i,nl,n,base,p,v;t.isOpera=win.opera&&opera.buildNumber;t.isWebKit=/WebKit/.test(ua);t.isIE=!t.isWebKit&&!t.isOpera&&(/MSIE/gi).test(ua)&&(/Explorer/gi).test(na.appName);t.isIE6=t.isIE&&/MSIE [56]/.test(ua);t.isIE7=t.isIE&&/MSIE [7]/.test(ua);t.isIE8=t.isIE&&/MSIE [8]/.test(ua);t.isIE9=t.isIE&&/MSIE [9]/.test(ua);t.isGecko=!t.isWebKit&&/Gecko/.test(ua);t.isMac=ua.indexOf('Mac')!=-1;t.isAir=/adobeair/i.test(ua);t.isIDevice=/(iPad|iPhone)/.test(ua);t.isIOS5=t.isIDevice&&ua.match(/AppleWebKit\/(\d*)/)[1]>=534;if(win.tinyMCEPreInit){t.suffix=tinyMCEPreInit.suffix;t.baseURL=tinyMCEPreInit.base;t.query=tinyMCEPreInit.query;return;} +(function(win){var whiteSpaceRe=/^\s*|\s*$/g,undef,isRegExpBroken='B'.replace(/A(.)|B/,'$1')==='$1';var tinymce={majorVersion:'3',minorVersion:'5.12',releaseDate:'2016-10-31',_init:function(){var t=this,d=document,na=navigator,ua=na.userAgent,i,nl,n,base,p,v;t.isIE11=ua.indexOf('Trident/')!=-1&&(ua.indexOf('rv:')!=-1||na.appName.indexOf('Netscape')!=-1);t.isOpera=win.opera&&opera.buildNumber;t.isWebKit=/WebKit/.test(ua);t.isIE=!t.isWebKit&&!t.isOpera&&(/MSIE/gi).test(ua)&&(/Explorer/gi).test(na.appName)||t.isIE11;t.isIE6=t.isIE&&/MSIE [56]/.test(ua);t.isIE7=t.isIE&&/MSIE [7]/.test(ua);t.isIE8=t.isIE&&/MSIE [8]/.test(ua);t.isIE9=t.isIE&&/MSIE [9]/.test(ua);t.isGecko=!t.isWebKit&&!t.isIE11&&/Gecko/.test(ua);t.isMac=ua.indexOf('Mac')!=-1;t.isAir=/adobeair/i.test(ua);t.isIDevice=/(iPad|iPhone)/.test(ua);t.isIOS5=t.isIDevice&&ua.match(/AppleWebKit\/(\d*)/)[1]>=534;t.isIE12=(document.msElementsFromPoint&&!t.isIE&&!t.isIE11);if(t.isIE12){t.isIE11=true;t.isWebKit=false;} +if(win.tinyMCEPreInit){t.suffix=tinyMCEPreInit.suffix;t.baseURL=tinyMCEPreInit.base;t.query=tinyMCEPreInit.query;return;} t.suffix='';nl=d.getElementsByTagName('base');for(i=0;i7){return;} setEditorCommandState('RespectVisibilityInDesign',true);editor.contentStyles.push('.mceHideBrInPre pre br {display: none}');dom.addClass(editor.getBody(),'mceHideBrInPre');parser.addNodeFilter('pre',function(nodes,name){var i=nodes.length,brNodes,j,brElm,sibling;while(i--){brNodes=nodes[i].getAll('br');j=brNodes.length;while(j--){brElm=brNodes[j];sibling=brElm.prev;if(sibling&&sibling.type===3&&sibling.value.charAt(sibling.value-1)!='\n'){sibling.value+='\n';}else{brElm.parent.insert(new tinymce.html.Node('#text',3),brElm,true).value='\n';}}}});serializer.addNodeFilter('pre',function(nodes,name){var i=nodes.length,brNodes,j,brElm,sibling;while(i--){brNodes=nodes[i].getAll('br');j=brNodes.length;while(j--){brElm=brNodes[j];sibling=brElm.prev;if(sibling&&sibling.type==3){sibling.value=sibling.value.replace(/\r?\n$/,'');}}}});} function removePreSerializedStylesWhenSelectingControls(){dom.bind(editor.getBody(),'mouseup',function(e){var value,node=selection.getNode();if(node.nodeName=='IMG'){if(value=dom.getStyle(node,'width')){dom.setAttrib(node,'width',value.replace(/[^0-9%]+/g,''));dom.setStyle(node,'width','');} if(value=dom.getStyle(node,'height')){dom.setAttrib(node,'height',value.replace(/[^0-9%]+/g,''));dom.setStyle(node,'height','');}}});} -function keepInlineElementOnDeleteBackspace(){editor.onKeyDown.add(function(editor,e){var isDelete,rng,container,offset,brElm,sibling,collapsed;isDelete=e.keyCode==DELETE;if(!isDefaultPrevented(e)&&(isDelete||e.keyCode==BACKSPACE)&&!VK.modifierPressed(e)){rng=selection.getRng();container=rng.startContainer;offset=rng.startOffset;collapsed=rng.collapsed;if(container.nodeType==3&&container.nodeValue.length>0&&((offset===0&&!collapsed)||(collapsed&&offset===(isDelete?0:1)))){nonEmptyElements=editor.schema.getNonEmptyElements();e.preventDefault();brElm=dom.create('br',{id:'__tmp'});container.parentNode.insertBefore(brElm,container);editor.getDoc().execCommand(isDelete?'ForwardDelete':'Delete',false,null);container=selection.getRng().startContainer;sibling=container.previousSibling;if(sibling&&sibling.nodeType==1&&!dom.isBlock(sibling)&&dom.isEmpty(sibling)&&!nonEmptyElements[sibling.nodeName.toLowerCase()]){dom.remove(sibling);} +function keepInlineElementOnDeleteBackspace(){editor.onKeyDown.add(function(editor,e){var isDelete,rng,container,offset,brElm,sibling,collapsed;isDelete=e.keyCode==DELETE;if(!isDefaultPrevented(e)&&(isDelete||e.keyCode==BACKSPACE)&&!VK.modifierPressed(e)){rng=selection.getRng();container=rng.startContainer;offset=rng.startOffset;collapsed=rng.collapsed;if(container.nodeType==3&&container.nodeValue.length>0&&((offset===0&&!collapsed)||(collapsed&&offset===(isDelete?0:1)))){sibling=container.previousSibling;if(sibling&&sibling.nodeName=="IMG"){return;} +nonEmptyElements=editor.schema.getNonEmptyElements();e.preventDefault();brElm=dom.create('br',{id:'__tmp'});container.parentNode.insertBefore(brElm,container);editor.getDoc().execCommand(isDelete?'ForwardDelete':'Delete',false,null);container=selection.getRng().startContainer;sibling=container.previousSibling;if(sibling&&sibling.nodeType==1&&!dom.isBlock(sibling)&&dom.isEmpty(sibling)&&!nonEmptyElements[sibling.nodeName.toLowerCase()]){dom.remove(sibling);} dom.remove('__tmp');}}});} function removeBlockQuoteOnBackSpace(){editor.onKeyDown.add(function(editor,e){var rng,container,offset,root,parent;if(isDefaultPrevented(e)||e.keyCode!=VK.BACKSPACE){return;} rng=selection.getRng();container=rng.startContainer;offset=rng.startOffset;root=dom.getRoot();parent=container;if(!rng.collapsed||offset!==0){return;} while(parent&&parent.parentNode&&parent.parentNode.firstChild==parent&&parent.parentNode!=root){parent=parent.parentNode;} -if(parent.tagName==='BLOCKQUOTE'){editor.formatter.toggle('blockquote',null,parent);rng=dom.createRng();rng.setStart(container,0);rng.setEnd(container,0);selection.setRng(rng);}});};function setGeckoEditingOptions(){function setOpts(){editor._refreshContentEditable();setEditorCommandState("StyleWithCSS",false);setEditorCommandState("enableInlineTableEditing",false);if(!settings.object_resizing){setEditorCommandState("enableObjectResizing",false);}};if(!settings.readonly){editor.onBeforeExecCommand.add(setOpts);editor.onMouseDown.add(setOpts);}};function addBrAfterLastLinks(){function fixLinks(editor,o){tinymce.each(dom.select('a'),function(node){var parentNode=node.parentNode,root=dom.getRoot();if(parentNode.lastChild===node){while(parentNode&&!dom.isBlock(parentNode)){if(parentNode.parentNode.lastChild!==parentNode||parentNode===root){return;} +if(parent.tagName==='BLOCKQUOTE'){editor.formatter.toggle('blockquote',null,parent);rng=dom.createRng();rng.setStart(container,0);rng.setEnd(container,0);selection.setRng(rng);}});};function setGeckoEditingOptions(){function setOpts(){editor._refreshContentEditable();setEditorCommandState("StyleWithCSS",false);setEditorCommandState("enableInlineTableEditing",false);if(!settings.object_resizing){setEditorCommandState("enableObjectResizing",false);}};if(!settings.readonly){editor.onBeforeExecCommand.add(setOpts);editor.onMouseDown.add(setOpts);}};function addBrAfterLastLinks(){function fixLinks(editor,o){each(dom.select('a'),function(node){var parentNode=node.parentNode,root=dom.getRoot();if(parentNode.lastChild===node){while(parentNode&&!dom.isBlock(parentNode)){if(parentNode.parentNode.lastChild!==parentNode||parentNode===root){return;} parentNode=parentNode.parentNode;} dom.add(parentNode,'br',{'data-mce-bogus':1});}});};editor.onExecCommand.add(function(editor,cmd){if(cmd==='CreateLink'){fixLinks(editor);}});editor.onSetContent.add(selection.onSetContent.add(fixLinks));};function setDefaultBlockType(){if(settings.forced_root_block){editor.onInit.add(function(){setEditorCommandState('DefaultParagraphSeparator',settings.forced_root_block);});}} -function removeGhostSelection(){function repaint(sender,args){if(!sender||!args.initial){editor.execCommand('mceRepaint');}};editor.onUndo.add(repaint);editor.onRedo.add(repaint);editor.onSetContent.add(repaint);};function deleteControlItemOnBackSpace(){editor.onKeyDown.add(function(editor,e){var rng;if(!isDefaultPrevented(e)&&e.keyCode==BACKSPACE){rng=editor.getDoc().selection.createRange();if(rng&&rng.item){e.preventDefault();editor.undoManager.beforeChange();dom.remove(rng.item(0));editor.undoManager.add();}}});};function renderEmptyBlocksFix(){var emptyBlocksCSS;if(getDocumentMode()>=10){emptyBlocksCSS='';tinymce.each('p div h1 h2 h3 h4 h5 h6'.split(' '),function(name,i){emptyBlocksCSS+=(i>0?',':'')+name+':empty';});editor.contentStyles.push(emptyBlocksCSS+'{padding-right: 1px !important}');}};function fakeImageResize(){var selectedElmX,selectedElmY,selectedElm,selectedElmGhost,selectedHandle,startX,startY,startW,startH,ratio,resizeHandles,width,height,rootDocument=document,editableDoc=editor.getDoc();if(!settings.object_resizing||settings.webkit_fake_resize===false){return;} +function removeGhostSelection(){function repaint(sender,args){if(!sender||!args.initial){editor.execCommand('mceRepaint');}};editor.onUndo.add(repaint);editor.onRedo.add(repaint);editor.onSetContent.add(repaint);};function deleteControlItemOnBackSpace(){editor.onKeyDown.add(function(editor,e){var rng;if(!isDefaultPrevented(e)&&e.keyCode==BACKSPACE){rng=editor.getDoc().selection.createRange();if(rng&&rng.item){e.preventDefault();editor.undoManager.beforeChange();dom.remove(rng.item(0));editor.undoManager.add();}}});};function renderEmptyBlocksFix(){var emptyBlocksCSS;if(getDocumentMode()>=10){emptyBlocksCSS='';each('p div h1 h2 h3 h4 h5 h6'.split(' '),function(name,i){emptyBlocksCSS+=(i>0?',':'')+name+':empty';});editor.contentStyles.push(emptyBlocksCSS+'{padding-right: 1px !important}');}};function fakeImageResize(){var selectedElmX,selectedElmY,selectedElm,selectedElmGhost,selectedHandle,startX,startY,startW,startH,ratio,resizeHandles,width,height,rootDocument=document,editableDoc=editor.getDoc();if(!settings.object_resizing||settings.webkit_fake_resize===false){return;} setEditorCommandState("enableObjectResizing",false);resizeHandles={n:[.5,0,0,-1],e:[1,.5,1,0],s:[.5,1,0,1],w:[0,.5,-1,0],nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};function resizeElement(e){var deltaX,deltaY;deltaX=e.screenX-startX;deltaY=e.screenY-startY;width=deltaX*selectedHandle[2]+startW;height=deltaY*selectedHandle[3]+startH;width=width<5?5:width;height=height<5?5:height;if(VK.modifierPressed(e)||(selectedElm.nodeName=="IMG"&&selectedHandle[2]*selectedHandle[3]!==0)){width=Math.round(height/ratio);height=Math.round(width*ratio);} dom.setStyles(selectedElmGhost,{width:width,height:height});if(selectedHandle[2]<0&&selectedElmGhost.clientWidth<=width){dom.setStyle(selectedElmGhost,'left',selectedElmX+(startW-width));} if(selectedHandle[3]<0&&selectedElmGhost.clientHeight<=height){dom.setStyle(selectedElmGhost,'top',selectedElmY+(startH-height));}} @@ -1757,16 +1762,19 @@ function endResize(){function setSizeProp(name,value){if(value){if(selectedElm.s setSizeProp('width',width);setSizeProp('height',height);dom.unbind(editableDoc,'mousemove',resizeElement);dom.unbind(editableDoc,'mouseup',endResize);if(rootDocument!=editableDoc){dom.unbind(rootDocument,'mousemove',resizeElement);dom.unbind(rootDocument,'mouseup',endResize);} dom.remove(selectedElmGhost);showResizeRect(selectedElm);} function showResizeRect(targetElm){var position,targetWidth,targetHeight;hideResizeRect();position=dom.getPos(targetElm);selectedElmX=position.x;selectedElmY=position.y;targetWidth=targetElm.offsetWidth;targetHeight=targetElm.offsetHeight;if(selectedElm!=targetElm){selectedElm=targetElm;width=height=0;} -tinymce.each(resizeHandles,function(handle,name){var handleElm;handleElm=dom.get('mceResizeHandle'+name);if(!handleElm){handleElm=dom.add(editableDoc.documentElement,'div',{id:'mceResizeHandle'+name,'class':'mceResizeHandle',style:'cursor:'+name+'-resize; margin:0; padding:0'});dom.bind(handleElm,'mousedown',function(e){e.preventDefault();endResize();startX=e.screenX;startY=e.screenY;startW=selectedElm.clientWidth;startH=selectedElm.clientHeight;ratio=startH/startW;selectedHandle=handle;selectedElmGhost=selectedElm.cloneNode(true);dom.addClass(selectedElmGhost,'mceClonedResizable');dom.setStyles(selectedElmGhost,{left:selectedElmX,top:selectedElmY,margin:0});editableDoc.documentElement.appendChild(selectedElmGhost);dom.bind(editableDoc,'mousemove',resizeElement);dom.bind(editableDoc,'mouseup',endResize);if(rootDocument!=editableDoc){dom.bind(rootDocument,'mousemove',resizeElement);dom.bind(rootDocument,'mouseup',endResize);}});}else{dom.show(handleElm);} +each(resizeHandles,function(handle,name){var handleElm;handleElm=dom.get('mceResizeHandle'+name);if(!handleElm){handleElm=dom.add(editableDoc.documentElement,'div',{id:'mceResizeHandle'+name,'class':'mceResizeHandle',style:'cursor:'+name+'-resize; margin:0; padding:0'});dom.bind(handleElm,'mousedown',function(e){e.preventDefault();endResize();startX=e.screenX;startY=e.screenY;startW=selectedElm.clientWidth;startH=selectedElm.clientHeight;ratio=startH/startW;selectedHandle=handle;selectedElmGhost=selectedElm.cloneNode(true);dom.addClass(selectedElmGhost,'mceClonedResizable');dom.setStyles(selectedElmGhost,{left:selectedElmX,top:selectedElmY,margin:0});editableDoc.documentElement.appendChild(selectedElmGhost);dom.bind(editableDoc,'mousemove',resizeElement);dom.bind(editableDoc,'mouseup',endResize);if(rootDocument!=editableDoc){dom.bind(rootDocument,'mousemove',resizeElement);dom.bind(rootDocument,'mouseup',endResize);}});}else{dom.show(handleElm);} dom.setStyles(handleElm,{left:(targetWidth*handle[0]+selectedElmX)-(handleElm.offsetWidth/2),top:(targetHeight*handle[1]+selectedElmY)-(handleElm.offsetHeight/2)});});if(!tinymce.isOpera&&selectedElm.nodeName=="IMG"){selectedElm.setAttribute('data-mce-selected','1');}} function hideResizeRect(){if(selectedElm){selectedElm.removeAttribute('data-mce-selected');} for(var name in resizeHandles){dom.hide('mceResizeHandle'+name);}} -editor.contentStyles.push('.mceResizeHandle {'+'position: absolute;'+'border: 1px solid black;'+'background: #FFF;'+'width: 5px;'+'height: 5px;'+'z-index: 10000'+'}'+'.mceResizeHandle:hover {'+'background: #000'+'}'+'img[data-mce-selected] {'+'outline: 1px solid black'+'}'+'img.mceClonedResizable, table.mceClonedResizable {'+'position: absolute;'+'outline: 1px dashed black;'+'opacity: .5;'+'z-index: 10000'+'}');function updateResizeRect(){var controlElm=dom.getParent(selection.getNode(),'table,img');tinymce.each(dom.select('img[data-mce-selected]'),function(img){img.removeAttribute('data-mce-selected');});if(controlElm){showResizeRect(controlElm);}else{hideResizeRect();}} +editor.contentStyles.push('.mceResizeHandle {'+'position: absolute;'+'border: 1px solid black;'+'background: #FFF;'+'width: 5px;'+'height: 5px;'+'z-index: 10000'+'}'+'.mceResizeHandle:hover {'+'background: #000'+'}'+'img[data-mce-selected] {'+'outline: 1px solid black'+'}'+'img.mceClonedResizable, table.mceClonedResizable {'+'position: absolute;'+'outline: 1px dashed black;'+'opacity: .5;'+'z-index: 10000'+'}');function updateResizeRect(){var controlElm=dom.getParent(selection.getNode(),'table,img');each(dom.select('img[data-mce-selected]'),function(img){img.removeAttribute('data-mce-selected');});if(controlElm){showResizeRect(controlElm);}else{hideResizeRect();}} editor.onNodeChange.add(updateResizeRect);dom.bind(editableDoc,'selectionchange',updateResizeRect);editor.serializer.addAttributeFilter('data-mce-selected',function(nodes,name){var i=nodes.length;while(i--){nodes[i].attr(name,null);}});} function keepNoScriptContents(){if(getDocumentMode()<9){parser.addNodeFilter('noscript',function(nodes){var i=nodes.length,node,textNode;while(i--){node=nodes[i];textNode=node.firstChild;if(textNode){node.attr('data-mce-innertext',textNode.value);}}});serializer.addNodeFilter('noscript',function(nodes){var i=nodes.length,node,textNode,value;while(i--){node=nodes[i];textNode=nodes[i].firstChild;if(textNode){textNode.value=tinymce.html.Entities.decode(textNode.value);}else{value=node.attributes.map['data-mce-innertext'];if(value){node.attr('data-mce-innertext',null);textNode=new tinymce.html.Node('#text',3);textNode.value=value;textNode.raw=true;node.append(textNode);}}}});}} +function bodyHeight(){editor.contentStyles.push('body {min-height: 100px}');editor.onClick.add(function(ed,e){if(e.target.nodeName=='HTML'){editor.execCommand('SelectAll');editor.selection.collapse(true);editor.nodeChanged();}});} +function fixControlSelection(){editor.onInit.add(function(){var selectedRng;editor.getBody().addEventListener('mscontrolselect',function(e){setTimeout(function(){if(editor.selection.getNode()!=e.target){selectedRng=editor.selection.getRng();selection.fakeRng=editor.dom.createRng();selection.fakeRng.setStartBefore(e.target);selection.fakeRng.setEndAfter(e.target);}},0);},false);editor.getDoc().addEventListener('selectionchange',function(e){if(selectedRng&&!tinymce.dom.RangeUtils.compareRanges(editor.selection.getRng(),selectedRng)){selection.fakeRng=selectedRng=null;}},false);});} disableBackspaceIntoATable();removeBlockQuoteOnBackSpace();emptyEditorWhenDeleting();if(tinymce.isWebKit){keepInlineElementOnDeleteBackspace();cleanupStylesWhenDeleting();inputMethodFocus();selectControlElements();setDefaultBlockType();if(tinymce.isIDevice){selectionChangeNodeChanged();}else{fakeImageResize();selectAll();}} -if(tinymce.isIE){removeHrOnBackspace();ensureBodyHasRoleApplication();addNewLinesBeforeBrInPre();removePreSerializedStylesWhenSelectingControls();deleteControlItemOnBackSpace();renderEmptyBlocksFix();keepNoScriptContents();} -if(tinymce.isGecko){removeHrOnBackspace();focusBody();removeStylesWhenDeletingAccrossBlockElements();setGeckoEditingOptions();addBrAfterLastLinks();removeGhostSelection();} +if(tinymce.isIE&&!tinymce.isIE11){removeHrOnBackspace();ensureBodyHasRoleApplication();addNewLinesBeforeBrInPre();removePreSerializedStylesWhenSelectingControls();deleteControlItemOnBackSpace();renderEmptyBlocksFix();keepNoScriptContents();} +if(tinymce.isIE11){bodyHeight();fixControlSelection();} +if(tinymce.isGecko&&!tinymce.isIE11){removeHrOnBackspace();focusBody();removeStylesWhenDeletingAccrossBlockElements();setGeckoEditingOptions();addBrAfterLastLinks();removeGhostSelection();} if(tinymce.isOpera){fakeImageResize();}};(function(tinymce){var namedEntities,baseEntities,reverseEntities,attrsCharsRegExp=/[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,textCharsRegExp=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,rawCharsRegExp=/[<>&\"\']/g,entityRegExp=/&(#x|#)?([\w]+);/g,asciiMap={128:"\u20AC",130:"\u201A",131:"\u0192",132:"\u201E",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02C6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017D",145:"\u2018",146:"\u2019",147:"\u201C",148:"\u201D",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02DC",153:"\u2122",154:"\u0161",155:"\u203A",156:"\u0153",158:"\u017E",159:"\u0178"};baseEntities={'\"':'"',"'":''','<':'<','>':'>','&':'&'};reverseEntities={'<':'<','>':'>','&':'&','"':'"',''':"'"};function nativeDecode(text){var elm;elm=document.createElement("div");elm.innerHTML=text;return elm.textContent||elm.innerText||text;};function buildEntitiesLookup(items,radix){var i,chr,entity,lookup={};if(items){items=items.split(',');radix=radix||10;for(i=0;i1) return'&#'+(((chr.charCodeAt(0)-0xD800)*0x400)+(chr.charCodeAt(1)-0xDC00)+0x10000)+';';return baseEntities[chr]||'&#'+chr.charCodeAt(0)+';';});},encodeNamed:function(text,attr,entities){entities=entities||namedEntities;return text.replace(attr?attrsCharsRegExp:textCharsRegExp,function(chr){return baseEntities[chr]||entities[chr]||chr;});},getEncodeFunc:function(name,entities){var Entities=tinymce.html.Entities;entities=buildEntitiesLookup(entities)||namedEntities;function encodeNamedAndNumeric(text,attr){return text.replace(attr?attrsCharsRegExp:textCharsRegExp,function(chr){return baseEntities[chr]||entities[chr]||'&#'+chr.charCodeAt(0)+';'||chr;});};function encodeCustomNamed(text,attr){return Entities.encodeNamed(text,attr,entities);};name=tinymce.makeMap(name.replace(/\+/g,','));if(name.named&&name.numeric) @@ -1776,7 +1784,8 @@ if(name.numeric) return Entities.encodeNumeric;return Entities.encodeRaw;},decode:function(text){return text.replace(entityRegExp,function(all,numeric,value){if(numeric){value=parseInt(value,numeric.length===2?16:10);if(value>0xFFFF){value-=0x10000;return String.fromCharCode(0xD800+(value>>10),0xDC00+(value&0x3FF));}else return asciiMap[value]||String.fromCharCode(value);} return reverseEntities[all]||namedEntities[all]||nativeDecode(all);});}};})(tinymce);tinymce.html.Styles=function(settings,schema){var rgbRegExp=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,urlOrStrRegExp=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,styleRegExp=/\s*([^:]+):\s*([^;]+);?/g,trimRightRegExp=/\s+$/,urlColorRegExp=/rgb/,undef,i,encodingLookup={},encodingItems;settings=settings||{};encodingItems='\\" \\\' \\; \\: ; : \uFEFF'.split(' ');for(i=0;i1?val:'0'+val;};return'#'+hex(r)+hex(g)+hex(b);};return{toHex:function(color){return color.replace(rgbRegExp,toHex);},parse:function(css){var styles={},matches,name,value,isEncoded,urlConverter=settings.url_converter,urlConverterScope=settings.url_converter_scope||this;function compress(prefix,suffix){var top,right,bottom,left;top=styles[prefix+'-top'+suffix];if(!top) +function toHex(match,r,g,b){function hex(val){val=parseInt(val).toString(16);return val.length>1?val:'0'+val;};return'#'+hex(r)+hex(g)+hex(b);};return{toHex:function(color){return color.replace(rgbRegExp,toHex);},parse:function(css){var styles={},matches,name,value,isEncoded,urlConverter=settings.url_converter,urlConverterScope=settings.url_converter_scope||this;function compress(prefix,suffix){var top,right,bottom,left;if(styles['border-image']==='none'){delete styles['border-image'];} +top=styles[prefix+'-top'+suffix];if(!top) return;right=styles[prefix+'-right'+suffix];if(top!=right) return;bottom=styles[prefix+'-bottom'+suffix];if(right!=bottom) return;left=styles[prefix+'-left'+suffix];if(bottom!=left) @@ -1805,8 +1814,8 @@ replace(data).replace(/#/g,'#text').replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,fun return html5;};function getHTML4(){var html4=mapCache.html4;if(!html4){html4=mapCache.html4=unpack({Z:'H|K|N|O|P',Y:'X|form|R|Q',ZG:'E|span|width|align|char|charoff|valign',X:'p|T|div|U|W|isindex|fieldset|table',ZF:'E|align|char|charoff|valign',W:'pre|hr|blockquote|address|center|noframes',ZE:'abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height',ZD:'[E][S]',U:'ul|ol|dl|menu|dir',ZC:'p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q',T:'h1|h2|h3|h4|h5|h6',ZB:'X|S|Q',S:'R|P',ZA:'a|G|J|M|O|P',R:'a|H|K|N|O',Q:'noscript|P',P:'ins|del|script',O:'input|select|textarea|label|button',N:'M|L',M:'em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym',L:'sub|sup',K:'J|I',J:'tt|i|b|u|s|strike',I:'big|small|font|basefont',H:'G|F',G:'br|span|bdo',F:'object|applet|img|map|iframe',E:'A|B|C',D:'accesskey|tabindex|onfocus|onblur',C:'onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup',B:'lang|xml:lang|dir',A:'id|class|style|title'},'script[id|charset|type|language|src|defer|xml:space][]'+'style[B|id|type|media|title|xml:space][]'+'object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]'+'param[id|name|value|valuetype|type][]'+'p[E|align][#|S]'+'a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]'+'br[A|clear][]'+'span[E][#|S]'+'bdo[A|C|B][#|S]'+'applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]'+'h1[E|align][#|S]'+'img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]'+'map[B|C|A|name][X|form|Q|area]'+'h2[E|align][#|S]'+'iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]'+'h3[E|align][#|S]'+'tt[E][#|S]'+'i[E][#|S]'+'b[E][#|S]'+'u[E][#|S]'+'s[E][#|S]'+'strike[E][#|S]'+'big[E][#|S]'+'small[E][#|S]'+'font[A|B|size|color|face][#|S]'+'basefont[id|size|color|face][]'+'em[E][#|S]'+'strong[E][#|S]'+'dfn[E][#|S]'+'code[E][#|S]'+'q[E|cite][#|S]'+'samp[E][#|S]'+'kbd[E][#|S]'+'var[E][#|S]'+'cite[E][#|S]'+'abbr[E][#|S]'+'acronym[E][#|S]'+'sub[E][#|S]'+'sup[E][#|S]'+'input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]'+'select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]'+'optgroup[E|disabled|label][option]'+'option[E|selected|disabled|label|value][]'+'textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]'+'label[E|for|accesskey|onfocus|onblur][#|S]'+'button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]'+'h4[E|align][#|S]'+'ins[E|cite|datetime][#|Y]'+'h5[E|align][#|S]'+'del[E|cite|datetime][#|Y]'+'h6[E|align][#|S]'+'div[E|align][#|Y]'+'ul[E|type|compact][li]'+'li[E|type|value][#|Y]'+'ol[E|type|compact|start][li]'+'dl[E|compact][dt|dd]'+'dt[E][#|S]'+'dd[E][#|Y]'+'menu[E|compact][li]'+'dir[E|compact][li]'+'pre[E|width|xml:space][#|ZA]'+'hr[E|align|noshade|size|width][]'+'blockquote[E|cite][#|Y]'+'address[E][#|S|p]'+'center[E][#|Y]'+'noframes[E][#|Y]'+'isindex[A|B|prompt][]'+'fieldset[E][#|legend|Y]'+'legend[E|accesskey|align][#|S]'+'table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]'+'caption[E|align][#|S]'+'col[ZG][]'+'colgroup[ZG][col]'+'thead[ZF][tr]'+'tr[ZF|bgcolor][th|td]'+'th[E|ZE][#|Y]'+'form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]'+'noscript[E][#|Y]'+'td[E|ZE][#|Y]'+'tfoot[ZF][tr]'+'tbody[ZF][tr]'+'area[E|D|shape|coords|href|nohref|alt|target][]'+'base[id|href|target][]'+'body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]');} return html4;};tinymce.html.Schema=function(settings){var self=this,elements={},children={},patternElements=[],validStyles,schemaItems;var whiteSpaceElementsMap,selfClosingElementsMap,shortEndedElementsMap,boolAttrMap,blockElementsMap,nonEmptyElementsMap,customElementsMap={};function createLookupTable(option,default_value,extend){var value=settings[option];if(!value){value=mapCache[option];if(!value){value=makeMap(default_value,' ',makeMap(default_value.toUpperCase(),' '));value=tinymce.extend(value,extend);mapCache[option]=value;}}else{value=makeMap(value,',',makeMap(value.toUpperCase(),' '));} return value;};settings=settings||{};schemaItems=settings.schema=="html5"?getHTML5():getHTML4();if(settings.verify_html===false) -settings.valid_elements='*[*]';settings.valid_children='+body[style],+form[style],+div[style],+td[style],+table[style],+tbody[style],+tr[style],+span[style],+p[style]';if(settings.valid_styles){validStyles={};each(settings.valid_styles,function(value,key){validStyles[key]=tinymce.explode(value);});} -whiteSpaceElementsMap=createLookupTable('whitespace_elements','pre script noscript style textarea');selfClosingElementsMap=createLookupTable('self_closing_elements','colgroup dd dt li option p td tfoot th thead tr');shortEndedElementsMap=createLookupTable('short_ended_elements','area base basefont br col frame hr img input isindex link meta param embed source wbr');boolAttrMap=createLookupTable('boolean_attributes','checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls');nonEmptyElementsMap=createLookupTable('non_empty_elements','td th iframe video audio object',shortEndedElementsMap);textBlockElementsMap=createLookupTable('text_block_elements','h1 h2 h3 h4 h5 h6 p div address pre form '+'blockquote center dir fieldset header footer article section hgroup aside nav figure');blockElementsMap=createLookupTable('block_elements','hr table tbody thead tfoot '+'th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup',textBlockElementsMap);function patternToRegExp(str){return new RegExp('^'+str.replace(/([?+*])/g,'.$1')+'$');};function addValidElements(valid_elements){var ei,el,ai,al,yl,matches,element,attr,attrData,elementName,attrName,attrType,attributes,attributesOrder,prefix,outputName,globalAttributes,globalAttributesOrder,transElement,key,childKey,value,elementRuleRegExp=/^([#+\-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,attrRuleRegExp=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,hasPatternsRegExp=/[*?+]/;if(valid_elements){valid_elements=split(valid_elements);if(elements['@']){globalAttributes=elements['@'].attributes;globalAttributesOrder=elements['@'].attributesOrder;} +settings.valid_elements='*[*]';if(settings.valid_styles){validStyles={};each(settings.valid_styles,function(value,key){validStyles[key]=tinymce.explode(value);});} +whiteSpaceElementsMap=createLookupTable('whitespace_elements','pre script noscript style textarea');selfClosingElementsMap=createLookupTable('self_closing_elements','colgroup dd dt li option p td tfoot th thead tr');shortEndedElementsMap=createLookupTable('short_ended_elements','area base basefont br col frame hr img input isindex link meta param embed source wbr');boolAttrMap=createLookupTable('boolean_attributes','checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls');nonEmptyElementsMap=createLookupTable('non_empty_elements','td th iframe video audio object script',shortEndedElementsMap);textBlockElementsMap=createLookupTable('text_block_elements','h1 h2 h3 h4 h5 h6 p div address pre form '+'blockquote center dir fieldset header footer article section hgroup aside nav figure');blockElementsMap=createLookupTable('block_elements','hr table tbody thead tfoot '+'th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup',textBlockElementsMap);function patternToRegExp(str){return new RegExp('^'+str.replace(/([?+*])/g,'.$1')+'$');};function addValidElements(valid_elements){var ei,el,ai,al,yl,matches,element,attr,attrData,elementName,attrName,attrType,attributes,attributesOrder,prefix,outputName,globalAttributes,globalAttributesOrder,transElement,key,childKey,value,elementRuleRegExp=/^([#+\-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,attrRuleRegExp=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,hasPatternsRegExp=/[*?+]/;if(valid_elements){valid_elements=split(valid_elements);if(elements['@']){globalAttributes=elements['@'].attributes;globalAttributesOrder=elements['@'].attributesOrder;} for(ei=0,el=valid_elements.length;ei=0){for(i=stack.length-1;i>=pos;i--){name=stack[i];if(name.valid) self.end(name.name);} -stack.length=pos;}};function parseAttribute(match,name,value,val2,val3){var attrRule,i;name=name.toLowerCase();value=name in fillAttrsMap?name:decode(value||val2||val3||'');if(validate&&!isInternalElement&&name.indexOf('data-mce-')!==0){attrRule=validAttributesMap[name];if(!attrRule&&validAttributePatterns){i=validAttributePatterns.length;while(i--){attrRule=validAttributePatterns[i];if(attrRule.pattern.test(name)) +stack.length=pos;}};function parseAttribute(match,name,value,val2,val3){var attrRule,i;name=name.toLowerCase();value=name in fillAttrsMap?name:decode(value||val2||val3||'');if(validate&&!isInternalElement&&name.indexOf('data-')!==0){attrRule=validAttributesMap[name];if(!attrRule&&validAttributePatterns){i=validAttributePatterns.length;while(i--){attrRule=validAttributePatterns[i];if(attrRule.pattern.test(name)) break;} if(i===-1) attrRule=null;} @@ -1956,23 +1965,26 @@ list.push(newNode);else matchedAttributes[attrName]=[newNode];}} if(blockElements[name]) removeWhitespaceBefore(newNode);if(!empty) -node=newNode;if(!isInWhiteSpacePreservedElement&&whiteSpaceElements[name]){isInWhiteSpacePreservedElement=true;}}},end:function(name){var textNode,elementRule,text,sibling,tempNode;elementRule=validate?schema.getElementRule(name):{};if(elementRule){if(blockElements[name]){if(!isInWhiteSpacePreservedElement){textNode=node.firstChild;if(textNode&&textNode.type===3){text=textNode.value.replace(startWhiteSpaceRegExp,'');if(text.length>0){textNode.value=text;textNode=textNode.next;}else{sibling=textNode.next;textNode.remove();textNode=sibling;} -while(textNode&&textNode.type===3){text=textNode.value;sibling=textNode.next;if(text.length===0||isAllWhiteSpaceRegExp.test(text)){textNode.remove();textNode=sibling;} -textNode=sibling;}} -textNode=node.lastChild;if(textNode&&textNode.type===3){text=textNode.value.replace(endWhiteSpaceRegExp,'');if(text.length>0){textNode.value=text;textNode=textNode.prev;}else{sibling=textNode.prev;textNode.remove();textNode=sibling;} -while(textNode&&textNode.type===3){text=textNode.value;sibling=textNode.prev;if(text.length===0||isAllWhiteSpaceRegExp.test(text)){textNode.remove();textNode=sibling;} -textNode=sibling;}}}} +node=newNode;if(!isInWhiteSpacePreservedElement&&whiteSpaceElements[name]){isInWhiteSpacePreservedElement=true;}}},end:function(name){var textNode,elementRule,text,sibling,tempNode;elementRule=validate?schema.getElementRule(name):{};if(elementRule){if(blockElements[name]){if(!isInWhiteSpacePreservedElement){textNode=node.firstChild;if(textNode&&textNode.type===3){text=textNode.value.replace(startWhiteSpaceRegExp,'');if(text.length>0){textNode.value=text;textNode=textNode.next;}else{sibling=textNode.next;textNode.remove();textNode=sibling;while(textNode&&textNode.type===3){text=textNode.value;sibling=textNode.next;if(text.length===0||isAllWhiteSpaceRegExp.test(text)){textNode.remove();textNode=sibling;} +textNode=sibling;}}} +textNode=node.lastChild;if(textNode&&textNode.type===3){text=textNode.value.replace(endWhiteSpaceRegExp,'');if(text.length>0){textNode.value=text;textNode=textNode.prev;}else{sibling=textNode.prev;textNode.remove();textNode=sibling;while(textNode&&textNode.type===3){text=textNode.value;sibling=textNode.prev;if(text.length===0||isAllWhiteSpaceRegExp.test(text)){textNode.remove();textNode=sibling;} +textNode=sibling;}}}}} if(isInWhiteSpacePreservedElement&&whiteSpaceElements[name]){isInWhiteSpacePreservedElement=false;} if(elementRule.removeEmpty||elementRule.paddEmpty){if(node.isEmpty(nonEmptyElements)){if(elementRule.paddEmpty) -node.empty().append(new Node('#text','3')).value='\u00a0';else{if(!node.attributes.map.name&&!node.attributes.map.id){tempNode=node.parent;node.empty().remove();node=tempNode;return;}}}} +node.empty().append(new Node('#text','3')).value='\u00a0';else{if(!node.attributes.map.name&&!node.attributes.map.id){tempNode=node.parent;if(blockElements[node.name]){node.empty().remove();}else{node.unwrap();} +node=tempNode;return;}}}} node=node.parent;}}},schema);rootNode=node=new Node(args.context||settings.root_name,11);parser.parse(html);if(validate&&invalidChildren.length){if(!args.context) fixInvalidChildren(invalidChildren);else args.invalid=true;} if(rootBlockName&&rootNode.name=='body') -addRootBlocks();if(!args.invalid){for(name in matchedNodes){list=nodeFilters[name];nodes=matchedNodes[name];fi=nodes.length;while(fi--){if(name!='toStr'&&name!='concatMaborak'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'){if(!nodes[fi].parent){nodes.splice(fi,1);}}} -for(i=0,l=list.length;i0){value=html[html.length-1];if(value.length>0&&value!=='\n') html.push('\n');} -html.push('<',name);if(attrs){for(i=0,l=attrs.length;i=0){attr.value=attr.value.substring(0,attr.value.indexOf(list[iList]));}} -html.push(' ',attr.name,'="',encode(attr.value,true),'"');}} +html.push('<',name);if(attrs){for(i=0,l=attrs.length;i0){value=html[html.length-1];if(value.length>0&&value!=='\n') @@ -2001,8 +2012,8 @@ writer.end(name);}}else handler(node);} if(node.type==1&&!settings.inner) walk(node);else -handlers[11](node);return writer.getContent();};}})(tinymce);tinymce.dom={};(function(namespace,expando){var w3cEventModel=!!document.addEventListener;function addEvent(target,name,callback,capture){if(target.addEventListener){if(name!='toStr'&&name!='concatMaborak'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){target.addEventListener(name,callback,capture||false);}}else if(target.attachEvent){if(name!='toStr'&&name!='concatMaborak'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){target.attachEvent('on'+name,callback);}}} -function removeEvent(target,name,callback,capture){if(target.removeEventListener){if(name!='toStr'&&name!='concatMaborak'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){target.removeEventListener(name,callback,capture||false);}}else if(target.detachEvent){if(name!='toStr'&&name!='concatMaborak'&&name!='get_by_key'&&name!='expand'&&name!='setParent'&&name!='isset_key'&&name!='toJSONString'&&name!='isObject'&&name!='isArray'&&name!='isObjectStrict'){target.detachEvent('on'+name,callback);}}} +handlers[11](node);return writer.getContent();};}})(tinymce);tinymce.dom={};(function(namespace,expando){var w3cEventModel=!!document.addEventListener;function addEvent(target,name,callback,capture){if(target.addEventListener){target.addEventListener(name,callback,capture||false);}else if(target.attachEvent){target.attachEvent('on'+name,callback);}} +function removeEvent(target,name,callback,capture){if(target.removeEventListener){target.removeEventListener(name,callback,capture||false);}else if(target.detachEvent){target.detachEvent('on'+name,callback);}} function fix(original_event,data){var name,event=data||{};function returnFalse(){return false;} function returnTrue(){return true;} for(name in original_event){if(name!=="layerX"&&name!=="layerY"){event[name]=original_event[name];}} @@ -2055,8 +2066,9 @@ namespace.EventUtils=EventUtils;namespace.Event=new EventUtils(function(id){retu return node[start_name];if(node!=root_node){sibling=node[sibling_name];if(sibling) return sibling;for(parent=node.parentNode;parent&&parent!=root_node;parent=parent.parentNode){sibling=parent[sibling_name];if(sibling) return sibling;}}}};this.current=function(){return node;};this.next=function(shallow){return(node=findSibling(node,'firstChild','nextSibling',shallow));};this.prev=function(shallow){return(node=findSibling(node,'lastChild','previousSibling',shallow));};};(function(tinymce){var each=tinymce.each,is=tinymce.is,isWebKit=tinymce.isWebKit,isIE=tinymce.isIE,Entities=tinymce.html.Entities,simpleSelectorRe=/^([a-z0-9],?)+$/i,whiteSpaceRegExp=/^[ \t\r\n]*$/;tinymce.create('tinymce.dom.DOMUtils',{doc:null,root:null,files:null,pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},DOMUtils:function(d,s){var t=this,globalStyle,name,blockElementsMap;t.doc=d;t.win=window;t.files={};t.cssFlicker=false;t.counter=0;t.stdMode=!tinymce.isIE||d.documentMode>=8;t.boxModel=!tinymce.isIE||d.compatMode=="CSS1Compat"||t.stdMode;t.hasOuterHTML="outerHTML"in d.createElement("a");t.settings=s=tinymce.extend({keep_values:false,hex_colors:1},s);t.schema=s.schema;t.styles=new tinymce.html.Styles({url_converter:s.url_converter,url_converter_scope:s.url_converter_scope},s.schema);if(tinymce.isIE6){try{d.execCommand('BackgroundImageCache',false,true);}catch(e){t.cssFlicker=true;}} -t.fixDoc(d);t.events=s.ownEvents?new tinymce.dom.EventUtils(s.proxy):tinymce.dom.Event;tinymce.addUnload(t.destroy,t);blockElementsMap=s.schema?s.schema.getBlockElements():{};t.isBlock=function(node){var type=node.nodeType;if(type) -return!!(type===1&&blockElementsMap[node.nodeName]);return!!blockElementsMap[node];};},fixDoc:function(doc){var settings=this.settings,name;if(isIE&&settings.schema){('abbr article aside audio canvas '+'details figcaption figure footer '+'header hgroup mark menu meter nav '+'output progress section summary '+'time video').replace(/\w+/g,function(name){doc.createElement(name);});for(name in settings.schema.getCustomElements()){doc.createElement(name);}}},clone:function(node,deep){var self=this,clone,doc;if(!isIE||node.nodeType!==1||deep){return node.cloneNode(deep);} +t.fixDoc(d);t.events=s.ownEvents?new tinymce.dom.EventUtils(s.proxy):tinymce.dom.Event;tinymce.addUnload(t.destroy,t);blockElementsMap=s.schema?s.schema.getBlockElements():{};t.isBlock=function(node){if(!node){return false;} +var type=node.nodeType;if(type) +return!!(type===1&&blockElementsMap[node.nodeName]);return!!blockElementsMap[node];};},fixDoc:function(doc){var settings=this.settings,name;if(isIE&&!tinymce.isIE11&&settings.schema){('abbr article aside audio canvas '+'details figcaption figure footer '+'header hgroup mark menu meter nav '+'output progress section summary '+'time video').replace(/\w+/g,function(name){doc.createElement(name);});for(name in settings.schema.getCustomElements()){doc.createElement(name);}}},clone:function(node,deep){var self=this,clone,doc;if(!isIE||tinymce.isIE11||node.nodeType!==1||deep){return node.cloneNode(deep);} doc=self.doc;if(!deep){clone=doc.createElement(node.nodeName);each(self.getAttribs(node),function(attr){self.setAttrib(clone,attr.nodeName,self.getAttrib(node,attr.nodeName));});return clone;} return clone.firstChild;},getRoot:function(){var t=this,s=t.settings;return(s&&t.get(s.root_element))||t.doc.body;},getViewPort:function(w){var d,b;w=!w?this.win:w;d=w.document;b=this.boxModel?d.documentElement:d.body;return{x:w.pageXOffset||b.scrollLeft,y:w.pageYOffset||b.scrollTop,w:w.innerWidth||b.clientWidth,h:w.innerHeight||b.clientHeight};},getRect:function(e){var p,t=this,sr;e=t.get(e);p=t.getPos(e);sr=t.getSize(e);return{x:p.x,y:p.y,w:sr.w,h:sr.h};},getSize:function(e){var t=this,w,h;e=t.get(e);w=t.getStyle(e,'width');h=t.getStyle(e,'height');if(w.indexOf('px')===-1) w=0;if(h.indexOf('px')===-1) @@ -2084,9 +2096,9 @@ return null;if(keep_children){while(child=node.firstChild){if(!tinymce.isIE||chi parent.insertBefore(child,node);else node.removeChild(child);}} return parent.removeChild(node);});},setStyle:function(n,na,v){var t=this;return t.run(n,function(e){var s,i;s=e.style;na=na.replace(/-(\D)/g,function(a,b){return b.toUpperCase();});if(t.pixelStyles.test(na)&&(tinymce.is(v,'number')||/^[\-0-9\.]+$/.test(v))) -v+='px';switch(na){case'opacity':if(isIE){s.filter=v===''?'':"alpha(opacity="+(v*100)+")";if(!n.currentStyle||!n.currentStyle.hasLayout) +v+='px';switch(na){case'opacity':if(isIE&&!tinymce.isIE11){s.filter=v===''?'':"alpha(opacity="+(v*100)+")";if(!n.currentStyle||!n.currentStyle.hasLayout) s.display='inline-block';} -s[na]=s['-moz-opacity']=s['-khtml-opacity']=v||'';break;case'float':isIE?s.styleFloat=v:s.cssFloat=v;break;default:s[na]=v||'';} +s[na]=s['-moz-opacity']=s['-khtml-opacity']=v||'';break;case'float':(isIE&&!tinymce.isIE11)?s.styleFloat=v:s.cssFloat=v;break;default:s[na]=v||'';} if(t.settings.update_styles) t.setAttrib(e,'data-mce-style');});},getStyle:function(n,na,c){n=this.get(n);if(!n) return;if(this.doc.defaultView&&c){na=na.replace(/[A-Z]/g,function(a){return'-'+a;});try{return this.doc.defaultView.getComputedStyle(n,null).getPropertyValue(na);}catch(ex){return null;}} @@ -2130,7 +2142,7 @@ r=n.parentNode;while(r&&r!=ro&&r.nodeType){x-=r.scrollLeft||0;y-=r.scrollTop||0; return{x:x,y:y};},parseStyle:function(st){return this.styles.parse(st);},serializeStyle:function(o,name){return this.styles.serialize(o,name);},addStyle:function(cssText){var doc=this.doc,head;styleElm=doc.getElementById('mceDefaultStyles');if(!styleElm){styleElm=doc.createElement('style'),styleElm.id='mceDefaultStyles';styleElm.type='text/css';head=doc.getElementsByTagName('head')[0];if(head.firstChild){head.insertBefore(styleElm,head.firstChild);}else{head.appendChild(styleElm);}} if(styleElm.styleSheet){styleElm.styleSheet.cssText+=cssText;}else{styleElm.appendChild(doc.createTextNode(cssText));}},loadCSS:function(u){var t=this,d=t.doc,head;if(!u) u='';head=d.getElementsByTagName('head')[0];each(u.split(','),function(u){var link;if(t.files[u]) -return;t.files[u]=true;link=t.create('link',{rel:'stylesheet',href:tinymce._addVer(u)});if(isIE&&d.documentMode&&d.recalc){link.onload=function(){if(d.recalc) +return;t.files[u]=true;link=t.create('link',{rel:'stylesheet',href:tinymce._addVer(u)});if(isIE&&!tinymce.isIE11&&d.documentMode&&d.recalc){link.onload=function(){if(d.recalc) d.recalc();link.onload=null;};} head.appendChild(link);});},addClass:function(e,c){return this.run(e,function(e){var o;if(!c) return 0;if(this.hasClass(e,c)) @@ -2161,7 +2173,8 @@ return s;},getClasses:function(){var t=this,cl=[],i,lo={},f=t.settings.class_fil return t.classes;function addClasses(s){each(s.imports,function(r){addClasses(r);});each(s.cssRules||s.rules,function(r){switch(r.type||1){case 1:if(r.selectorText){each(r.selectorText.split(','),function(v){v=v.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(v)||!/\.[\w\-]+$/.test(v)) return;ov=v;v=tinymce._replace(/.*\.([a-z0-9_\-]+).*/i,'$1',v);if(f&&!(v=f(v,ov))) return;if(!lo[v]){cl.push({'class':v});lo[v]=1;}});} -break;case 3:addClasses(r.styleSheet);break;}});};try{each(t.doc.styleSheets,addClasses);}catch(ex){} +break;case 3:try{addClasses(r.styleSheet);}catch(ex){} +break;}});};try{each(t.doc.styleSheets,addClasses);}catch(ex){} if(cl.length>0) t.classes=cl;return cl;},run:function(e,f,s){var t=this,o;if(t.doc&&typeof(e)==='string') e=t.get(e);if(!e) @@ -2347,13 +2360,13 @@ return results;};Sizzle.uniqueSort=function(results){if(sortOrder){hasDuplicate= return results;};Sizzle.matches=function(expr,set){return Sizzle(expr,null,null,set);};Sizzle.matchesSelector=function(node,expr){return Sizzle(expr,null,null,[node]).length>0;};Sizzle.find=function(expr,context,isXML){var set,i,len,match,type,left;if(!expr){return[];} for(i=0,len=Expr.order.length;i'+chr+'');if(!collapsed){rng2.collapse(false);rng.moveToElementText(rng2.parentElement());if(rng.compareEndPoints('StartToEnd',rng2)===0) +if(type){rng=t.getRng();if(rng.setStart){rng={startContainer:rng.startContainer,startOffset:rng.startOffset,endContainer:rng.endContainer,endOffset:rng.endOffset};} +return{rng:rng};} +rng=t.getRng();id=dom.uniqueId();collapsed=tinyMCE.activeEditor.selection.isCollapsed();styles='overflow:hidden;line-height:0px';if(rng.duplicate||rng.item){if(!rng.item){rng2=rng.duplicate();try{rng.collapse();rng.pasteHTML(''+chr+'');if(!collapsed){rng2.collapse(false);rng.moveToElementText(rng2.parentElement());if(rng.compareEndPoints('StartToEnd',rng2)===0) rng2.move('character',-1);rng2.pasteHTML(''+chr+'');}}catch(ex){return null;}}else{element=rng.item(0);name=element.nodeName;return{name:name,index:findIndex(name,element)};}}else{element=t.getNode();name=element.nodeName;if(name=='IMG') return{name:name,index:findIndex(name,element)};rng2=normalizeTableCellSelection(rng.cloneRange());if(!collapsed){rng2.collapse(false);rng2.insertNode(dom.create('span',{'data-mce-type':"bookmark",id:id+'_end',style:styles},chr));} rng=normalizeTableCellSelection(rng);rng.collapse(true);rng.insertNode(dom.create('span',{'data-mce-type':"bookmark",id:id+'_start',style:styles},chr));} -t.moveToBookmark({id:id,keep:1});return{id:id};},moveToBookmark:function(bookmark){var t=this,dom=t.dom,marker1,marker2,rng,root,startContainer,endContainer,startOffset,endOffset;function setEndPoint(start){var point=bookmark[start?'start':'end'],i,node,offset,children;if(point){offset=point[0];for(node=root,i=point.length-1;i>=1;i--){children=node.childNodes;if(point[i]>children.length-1) +t.moveToBookmark({id:id,keep:1});return{id:id};},moveToBookmark:function(bookmark){var t=this,dom=t.dom,marker1,marker2,rng,rng2,root,startContainer,endContainer,startOffset,endOffset;function setEndPoint(start){var point=bookmark[start?'start':'end'],i,node,offset,children;if(point){offset=point[0];for(node=root,i=point.length-1;i>=1;i--){children=node.childNodes;if(point[i]>children.length-1) return;node=children[point[i]];} if(node.nodeType===3) offset=Math.min(point[0],node.nodeValue.length);if(node.nodeType===1) @@ -2482,8 +2496,9 @@ if(!keep){prev=marker.previousSibling;next=marker.nextSibling;each(tinymce.grep( node.nodeValue=node.nodeValue.replace(/\uFEFF/g,'');});while(marker=dom.get(bookmark.id+'_'+suffix)) dom.remove(marker,1);if(prev&&next&&prev.nodeType==next.nodeType&&prev.nodeType==3&&!tinymce.isOpera){idx=prev.nodeValue.length;prev.appendData(next.nodeValue);dom.remove(next);if(suffix=='start'){startContainer=endContainer=prev;startOffset=endOffset=idx;}else{endContainer=prev;endOffset=idx;}}}}};function addBogus(node){if(dom.isBlock(node)&&!node.innerHTML&&!isIE) node.innerHTML='
';return node;};if(bookmark){if(bookmark.start){rng=dom.createRng();root=dom.getRoot();if(t.tridentSel) -return t.tridentSel.moveToBookmark(bookmark);if(setEndPoint(true)&&setEndPoint()){t.setRng(rng);}}else if(bookmark.id){restoreEndPoint('start');restoreEndPoint('end');if(startContainer){rng=dom.createRng();rng.setStart(addBogus(startContainer),startOffset);rng.setEnd(addBogus(endContainer),endOffset);t.setRng(rng);}}else if(bookmark.name){t.select(dom.select(bookmark.name)[bookmark.index]);}else if(bookmark.rng) -t.setRng(bookmark.rng);}},select:function(node,content){var t=this,dom=t.dom,rng=dom.createRng(),idx;function setPoint(node,start){var walker=new TreeWalker(node,node);do{if(node.nodeType==3&&tinymce.trim(node.nodeValue).length!==0){if(start) +return t.tridentSel.moveToBookmark(bookmark);if(setEndPoint(true)&&setEndPoint()){t.setRng(rng);}}else if(bookmark.id){restoreEndPoint('start');restoreEndPoint('end');if(startContainer){rng=dom.createRng();rng.setStart(addBogus(startContainer),startOffset);rng.setEnd(addBogus(endContainer),endOffset);t.setRng(rng);}}else if(bookmark.name){t.select(dom.select(bookmark.name)[bookmark.index]);}else if(bookmark.rng){rng=bookmark.rng;if(rng.startContainer){rng2=t.dom.createRng();try{rng2.setStart(rng.startContainer,rng.startOffset);rng2.setEnd(rng.endContainer,rng.endOffset);}catch(e){} +rng=rng2;} +t.setRng(rng);}}},select:function(node,content){var t=this,dom=t.dom,rng=dom.createRng(),idx;function setPoint(node,start){var walker=new TreeWalker(node,node);do{if(node.nodeType==3&&tinymce.trim(node.nodeValue).length!==0){if(start) rng.setStart(node,0);else rng.setEnd(node,node.nodeValue.length);return;} if(node.nodeName=='BR'){if(start) @@ -2493,9 +2508,10 @@ t.setRng(rng);} return node;},isCollapsed:function(){var t=this,r=t.getRng(),s=t.getSel();if(!r||r.item) return false;if(r.compareEndPoints) return r.compareEndPoints('StartToEnd',r)===0;return!s||r.collapsed;},collapse:function(to_start){var self=this,rng=self.getRng(),node;if(rng.item){node=rng.item(0);rng=self.win.document.body.createTextRange();rng.moveToElementText(node);} -rng.collapse(!!to_start);self.setRng(rng);},getSel:function(){var t=this,w=this.win;return w.getSelection?w.getSelection():w.document.selection;},getRng:function(w3c){var self=this,selection,rng,elm,doc=self.win.document;if(w3c&&self.tridentSel){return self.tridentSel.getRangeAt(0);} +rng.collapse(!!to_start);self.setRng(rng);},getSel:function(){var t=this,w=this.win;return w.getSelection?w.getSelection():w.document.selection;},getRng:function(w3c){var self=this,selection,rng,elm,doc=self.win.document;if(self.fakeRng){return self.fakeRng;} +if(w3c&&self.tridentSel){return self.tridentSel.getRangeAt(0);} try{if(selection=self.getSel()){rng=selection.rangeCount>0?selection.getRangeAt(0):(selection.createRange?selection.createRange():doc.createRange());}}catch(ex){} -if(tinymce.isIE&&rng&&rng.setStart&&doc.selection.createRange().item){elm=doc.selection.createRange().item(0);rng=doc.createRange();rng.setStartBefore(elm);rng.setEndAfter(elm);} +if(tinymce.isIE&&!tinymce.isIE11&&rng&&rng.setStart&&doc.selection.createRange().item){elm=doc.selection.createRange().item(0);rng=doc.createRange();rng.setStartBefore(elm);rng.setEndAfter(elm);} if(!rng){rng=doc.createRange?doc.createRange():doc.body.createTextRange();} if(rng.setStart&&rng.startContainer.nodeType===9&&rng.collapsed){elm=self.dom.getRoot();rng.setStart(elm,0);rng.setEnd(elm,0);} if(self.selectedRange&&self.explicitRange){if(rng.compareBoundaryPoints(rng.START_TO_START,self.selectedRange)===0&&rng.compareBoundaryPoints(rng.END_TO_END,self.selectedRange)===0){rng=self.explicitRange;}else{self.selectedRange=null;self.explicitRange=null;}} @@ -2535,7 +2551,7 @@ normalizeEndPoint();if(normalized){if(collapsed){rng.collapse(true);} self.setRng(rng,self.isForward());}},selectorChanged:function(selector,callback){var self=this,currentSelectors;if(!self.selectorChangedData){self.selectorChangedData={};currentSelectors={};self.editor.onNodeChange.addToTop(function(ed,cm,node){var dom=self.dom,parents=dom.getParents(node,null,dom.getRoot()),matchedSelectors={};each(self.selectorChangedData,function(callbacks,selector){each(parents,function(node){if(dom.is(node,selector)){if(!currentSelectors[selector]){each(callbacks,function(callback){callback(true,{node:node,selector:selector,parents:parents});});currentSelectors[selector]=callbacks;} matchedSelectors[selector]=callbacks;return false;}});});each(currentSelectors,function(callbacks,selector){if(!matchedSelectors[selector]){delete currentSelectors[selector];each(callbacks,function(callback){callback(false,{node:node,selector:selector,parents:parents});});}});});} if(!self.selectorChangedData[selector]){self.selectorChangedData[selector]=[];} -self.selectorChangedData[selector].push(callback);return self;},destroy:function(manual){var self=this;self.win=null;if(!manual) +self.selectorChangedData[selector].push(callback);return self;},scrollIntoView:function(elm){var y,viewPort,self=this,dom=self.dom;viewPort=dom.getViewPort(self.editor.getWin());y=dom.getPos(elm).y;if(yviewPort.y+viewPort.h){self.editor.getWin().scrollTo(0,y0) pointRng.setEndPoint('StartToStart',startRng);else @@ -2564,7 +2580,7 @@ onPostProcess.dispatch(self,args);if(oldDoc) dom.doc=oldDoc;args.node=null;return args.content;},addRules:function(rules){schema.addValidElements(rules);},setRules:function(rules){schema.setValidElements(rules);}};};})(tinymce);(function(tinymce){tinymce.dom.ScriptLoader=function(settings){var QUEUED=0,LOADING=1,LOADED=2,states={},queue=[],scriptLoadedCallbacks={},queueLoadedCallbacks=[],loading=0,undef;function loadScript(url,callback){var t=this,dom=tinymce.DOM,elm,uri,loc,id;function done(){dom.remove(id);if(elm) elm.onreadystatechange=elm.onload=elm=null;callback();};function error(){if(typeof(console)!=="undefined"&&console.log) console.log("Failed to load: "+url);};id=dom.uniqueId();if(tinymce.isIE6){uri=new tinymce.util.URI(url);loc=location;if(uri.host==loc.hostname&&uri.port==loc.port&&(uri.protocol+':')==loc.protocol&&uri.protocol.toLowerCase()!='file'){tinymce.util.XHR.send({url:tinymce._addVer(uri.getURI()),success:function(content){var script=dom.create('script',{type:'text/javascript'});script.text=content;document.getElementsByTagName('head')[0].appendChild(script);dom.remove(script);done();},error:error});return;}} -elm=document.createElement('script');elm.id=id;elm.type='text/javascript';elm.src=tinymce._addVer(url);if(!tinymce.isIE) +elm=document.createElement('script');elm.id=id;elm.type='text/javascript';elm.src=tinymce._addVer(url);if(!tinymce.isIE||tinymce.isIE11) elm.onload=done;elm.onerror=error;if(!tinymce.isOpera){elm.onreadystatechange=function(){var state=elm.readyState;if(state=='complete'||state=='loaded') done();};} (document.getElementsByTagName('head')[0]||document.body).appendChild(elm);};this.isDone=function(url){return states[url]==LOADED;};this.markDone=function(url){states[url]=LOADED;};this.add=this.load=function(url,callback,scope){var item,state=states[url];if(state==undef){queue.push(url);states[url]=QUEUED;} @@ -2595,7 +2611,7 @@ return false;};})(tinymce);(function(tinymce){var Event=tinymce.dom.Event,each=t return;each(items,function(item,index){if(item.id===focussedId){idx=index;return false;}});idx+=dir;if(idx<0){idx=items.length-1;}else if(idx>=items.length){idx=0;} newFocus=items[idx];dom.setAttrib(focussedId,'tabindex','-1');dom.setAttrib(newFocus.id,'tabindex','0');dom.get(newFocus.id).focus();if(settings.actOnFocus){settings.onAction(newFocus.id);} if(evt) -Event.cancel(evt);};rootKeydown=function(evt){var DOM_VK_LEFT=37,DOM_VK_RIGHT=39,DOM_VK_UP=38,DOM_VK_DOWN=40,DOM_VK_ESCAPE=27,DOM_VK_ENTER=14,DOM_VK_RETURN=13,DOM_VK_SPACE=32;switch(evt.keyCode){case DOM_VK_LEFT:if(enableLeftRight)t.moveFocus(-1);break;case DOM_VK_RIGHT:if(enableLeftRight)t.moveFocus(1);break;case DOM_VK_UP:if(enableUpDown)t.moveFocus(-1);break;case DOM_VK_DOWN:if(enableUpDown)t.moveFocus(1);break;case DOM_VK_ESCAPE:if(settings.onCancel){settings.onCancel();Event.cancel(evt);} +Event.cancel(evt);};rootKeydown=function(evt){var DOM_VK_LEFT=37,DOM_VK_RIGHT=39,DOM_VK_UP=38,DOM_VK_DOWN=40,DOM_VK_ESCAPE=27,DOM_VK_ENTER=14,DOM_VK_RETURN=13,DOM_VK_SPACE=32;switch(evt.keyCode){case DOM_VK_LEFT:if(enableLeftRight)t.moveFocus(-1);Event.cancel(evt);break;case DOM_VK_RIGHT:if(enableLeftRight)t.moveFocus(1);Event.cancel(evt);break;case DOM_VK_UP:if(enableUpDown)t.moveFocus(-1);Event.cancel(evt);break;case DOM_VK_DOWN:if(enableUpDown)t.moveFocus(1);Event.cancel(evt);break;case DOM_VK_ESCAPE:if(settings.onCancel){settings.onCancel();Event.cancel(evt);} break;case DOM_VK_ENTER:case DOM_VK_RETURN:case DOM_VK_SPACE:if(settings.onAction){settings.onAction(focussedId);Event.cancel(evt);} break;}};each(items,function(item,idx){var tabindex,elm;if(!item.id){item.id=dom.uniqueId('_mce_item_');} elm=dom.get(item.id);if(excludeFromTabOrder){dom.bind(elm,'blur',itemBlurred);tabindex='-1';}else{tabindex=(idx===0?'0':'-1');} @@ -2654,8 +2670,7 @@ DOM.removeClass(n,'mceLast');DOM.addClass(ro,'mceLast');}});})(tinymce);(functio h+=''+DOM.encode(s.title)+''+(l?''+l+'':'');else h+=''+(l?''+l+'':'');h+='';h+='';return h;},postRender:function(){var t=this,s=t.settings,imgBookmark;if(tinymce.isIE&&t.editor){tinymce.dom.Event.add(t.id,'mousedown',function(e){var nodeName=t.editor.selection.getNode().nodeName;imgBookmark=nodeName==='IMG'?t.editor.selection.getBookmark():null;});} tinymce.dom.Event.add(t.id,'click',function(e){if(!t.isDisabled()){if(tinymce.isIE&&t.editor&&imgBookmark!==null){t.editor.selection.moveToBookmark(imgBookmark);} -return s.onclick.call(s.scope,e);}});tinymce.dom.Event.add(t.id,'keyup',function(e){if(!t.isDisabled()&&e.keyCode==tinymce.VK.SPACEBAR) -return s.onclick.call(s.scope,e);});}});})(tinymce);(function(tinymce){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,Dispatcher=tinymce.util.Dispatcher,undef;tinymce.create('tinymce.ui.ListBox:tinymce.ui.Control',{ListBox:function(id,s,ed){var t=this;t.parent(id,s,ed);t.items=[];t.onChange=new Dispatcher(t);t.onPostRender=new Dispatcher(t);t.onAdd=new Dispatcher(t);t.onRenderMenu=new tinymce.util.Dispatcher(this);t.classPrefix='mceListBox';t.marked={};},select:function(va){var t=this,fv,f;t.marked={};if(va==undef) +return s.onclick.call(s.scope,e);}});tinymce.dom.Event.add(t.id,'keydown',function(e){if(!t.isDisabled()&&e.keyCode==tinymce.VK.SPACEBAR){tinymce.dom.Event.cancel(e);return s.onclick.call(s.scope,e);}});}});})(tinymce);(function(tinymce){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,Dispatcher=tinymce.util.Dispatcher,undef;tinymce.create('tinymce.ui.ListBox:tinymce.ui.Control',{ListBox:function(id,s,ed){var t=this;t.parent(id,s,ed);t.items=[];t.onChange=new Dispatcher(t);t.onPostRender=new Dispatcher(t);t.onAdd=new Dispatcher(t);t.onRenderMenu=new tinymce.util.Dispatcher(this);t.classPrefix='mceListBox';t.marked={};},select:function(va){var t=this,fv,f;t.marked={};if(va==undef) return t.selectByIndex(-1);if(va&&typeof(va)=="function") f=va;else{f=function(v){return v==va;};} if(va!=t.selectedValue){each(t.items,function(o,i){if(f(o.value)){fv=1;t.selectByIndex(i);return false;}});if(!fv) @@ -2678,8 +2693,7 @@ f=va;else{f=function(v){return v==va;};} if(va!=t.selectedValue){each(t.items,function(o,i){if(f(o.value)){fv=1;t.selectByIndex(i);return false;}});if(!fv) t.selectByIndex(-1);}},selectByIndex:function(idx){DOM.get(this.id).selectedIndex=idx+1;this.selectedValue=this.items[idx]?this.items[idx].value:null;},add:function(n,v,a){var o,t=this;a=a||{};a.value=v;if(t.isRendered()) DOM.add(DOM.get(this.id),'option',a,n);o={title:n,value:v,attribs:a};t.items.push(o);t.onAdd.dispatch(t,o);},getLength:function(){return this.items.length;},renderHTML:function(){var h,t=this;h=DOM.createHTML('option',{value:''},'-- '+t.settings.title+' --');each(t.items,function(it){h+=DOM.createHTML('option',{value:it.value},it.title);});h=DOM.createHTML('select',{id:t.id,'class':'mceNativeListBox','aria-labelledby':t.id+'_aria'},h);h+=DOM.createHTML('span',{id:t.id+'_aria','style':'display: none'},t.settings.title);return h;},postRender:function(){var t=this,ch,changeListenerAdded=true;t.rendered=true;function onChange(e){var v=t.items[e.target.selectedIndex-1];if(v&&(v=v.value)){t.onChange.dispatch(t,v);if(t.settings.onselect) -t.settings.onselect(v);}};Event.add(t.id,'change',onChange);Event.add(t.id,'keydown',function(e){var bf;Event.remove(t.id,'change',ch);changeListenerAdded=false;bf=Event.add(t.id,'blur',function(){if(changeListenerAdded)return;changeListenerAdded=true;Event.add(t.id,'change',onChange);Event.remove(t.id,'blur',bf);});if(tinymce.isWebKit&&(e.keyCode==37||e.keyCode==39)){return Event.prevent(e);} -if(e.keyCode==13||e.keyCode==32){onChange(e);return Event.cancel(e);}});t.onPostRender.dispatch(t,DOM.get(t.id));}});})(tinymce);(function(tinymce){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each;tinymce.create('tinymce.ui.MenuButton:tinymce.ui.Button',{MenuButton:function(id,s,ed){this.parent(id,s,ed);this.onRenderMenu=new tinymce.util.Dispatcher(this);s.menu_container=s.menu_container||DOM.doc.body;},showMenu:function(){var t=this,p1,p2,e=DOM.get(t.id),m;if(t.isDisabled()) +t.settings.onselect(v);}};Event.add(t.id,'change',onChange);Event.add(t.id,'keydown',function(e){var bf,DOM_VK_LEFT=37,DOM_VK_RIGHT=39,DOM_VK_UP=38,DOM_VK_DOWN=40,DOM_VK_RETURN=13,DOM_VK_SPACE=32;Event.remove(t.id,'change',ch);changeListenerAdded=false;bf=Event.add(t.id,'blur',function(){if(changeListenerAdded)return;changeListenerAdded=true;Event.add(t.id,'change',onChange);Event.remove(t.id,'blur',bf);});if(e.keyCode==DOM_VK_RETURN||e.keyCode==DOM_VK_SPACE){onChange(e);return Event.cancel(e);}else if(e.keyCode==DOM_VK_DOWN||e.keyCode==DOM_VK_UP){e.stopImmediatePropagation();}});t.onPostRender.dispatch(t,DOM.get(t.id));}});})(tinymce);(function(tinymce){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each;tinymce.create('tinymce.ui.MenuButton:tinymce.ui.Button',{MenuButton:function(id,s,ed){this.parent(id,s,ed);this.onRenderMenu=new tinymce.util.Dispatcher(this);s.menu_container=s.menu_container||DOM.doc.body;},showMenu:function(){var t=this,p1,p2,e=DOM.get(t.id),m;if(t.isDisabled()) return;if(!t.isMenuRendered){t.renderMenu();t.isMenuRendered=true;} if(t.isMenuVisible) return t.hideMenu();p1=DOM.getPos(t.settings.menu_container);p2=DOM.getPos(e);m=t.menu;m.settings.offset_x=p2.x;m.settings.offset_y=p2.y;m.settings.vp_offset_x=p2.x;m.settings.vp_offset_y=p2.y;m.settings.keyboard_focus=t._focused;m.showMenu(0,e.firstChild.clientHeight);Event.add(DOM.doc,'mousedown',t.hideMenu,t);t.setState('Selected',1);t.isMenuVisible=1;},renderMenu:function(){var t=this,m;m=t.settings.control_manager.createDropMenu(t.id+'_menu',{menu_line:1,'class':this.classPrefix+'Menu',icons:t.settings.icons});m.onHideMenu.add(function(){t.hideMenu();t.focus();});t.onRenderMenu.dispatch(t,m);t.menu=m;},hideMenu:function(e){var t=this;if(e&&e.type=="mousedown"&&DOM.getParent(e.target,function(e){return e.id===t.id||e.id===t.id+'_open';})) @@ -2739,7 +2753,7 @@ return undef;return this.editors[id];},getInstanceById:function(id){return this. return null;delete editors[editor.id];for(i=0;i':'',visual:TRUE,font_size_style_values:'xx-small,x-small,small,medium,large,x-large,xx-large',font_size_legacy_values:'xx-small,small,medium,large,x-large,xx-large,300%',apply_source_formatting:TRUE,directionality:'ltr',forced_root_block:'p',hidden_input:TRUE,padd_empty_editor:TRUE,render_ui:TRUE,indentation:'30px',fix_table_elements:TRUE,inline_styles:TRUE,convert_fonts_to_spans:TRUE,indent:'simple',indent_before:'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist',indent_after:'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist',validate:TRUE,entity_encoding:'named',url_converter:self.convertURL,url_converter_scope:self,ie7_compat:TRUE},settings);self.id=self.editorId=id;self.isNotDirty=false;self.plugins={};self.documentBaseURI=new tinymce.util.URI(settings.document_base_url||tinymce.documentBaseURL,{base_uri:tinyMCE.baseURI});self.baseURI=tinymce.baseURI;self.contentCSS=[];self.contentStyles=[];self.setupEvents();self.execCommands={};self.queryStateCommands={};self.queryValueCommands={};self.execCallback('setup',self);},render:function(nst){var t=this,s=t.settings,id=t.id,sl=tinymce.ScriptLoader;if(!Event.domLoaded){Event.add(window,'ready',function(){t.render();});return;} -tinyMCE.settings=s;if(!t.getElement()) -return;if(tinymce.isIDevice&&!tinymce.isIOS5) -return;if(!/TEXTAREA|INPUT/i.test(t.getElement().nodeName)&&s.hidden_input&&DOM.getParent(id,'form')) -DOM.insertAfter(DOM.create('input',{type:'hidden',name:id}),id);if(!s.content_editable){t.orgVisibility=t.getElement().style.visibility;t.getElement().style.visibility='hidden';} -if(tinymce.WindowManager) -t.windowManager=new tinymce.WindowManager(t);if(s.encoding=='xml'){t.onGetContent.add(function(ed,o){if(o.save) -o.content=DOM.encode(o.content);});} +tinyMCE.settings=s;if(!t.getElement()){return;} +if(tinymce.isIDevice&&!tinymce.isIOS5){return;} +if(!/TEXTAREA|INPUT/i.test(t.getElement().nodeName)&&s.hidden_input&&DOM.getParent(id,'form')){DOM.insertAfter(DOM.create('input',{type:'hidden',name:id}),id);} +if(!s.content_editable){t.orgVisibility=t.getElement().style.visibility;t.getElement().style.visibility='hidden';} +if(tinymce.WindowManager){t.windowManager=new tinymce.WindowManager(t);} +if(s.encoding=='xml'){t.onGetContent.add(function(ed,o){if(o.save){o.content=DOM.encode(o.content);}});} if(s.add_form_submit_trigger){t.onSubmit.addToTop(function(){if(t.initialized){t.save();t.isNotDirty=1;}});} -if(s.add_unload_trigger){t._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(t.initialized&&!t.destroyed&&!t.isHidden()) -t.save({format:'raw',no_events:true});});} -tinymce.addUnload(t.destroy,t);if(s.submit_patch){t.onBeforeRenderUI.add(function(){var n=t.getElement().form;if(!n) -return;if(n._mceOldSubmit) -return;if(!n.submit.nodeType&&!n.submit.length){t.formElement=n;n._mceOldSubmit=n.submit;n.submit=function(){tinymce.triggerSave();t.isNotDirty=1;return t.formElement._mceOldSubmit(t.formElement);};} +if(s.add_unload_trigger){t._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(t.initialized&&!t.destroyed&&!t.isHidden()){t.save({format:'raw',no_events:true});}});} +tinymce.addUnload(t.destroy,t);if(s.submit_patch){t.onBeforeRenderUI.add(function(){var n=t.getElement().form;if(!n){return;} +if(n._mceOldSubmit){return;} +if(!n.submit.nodeType&&!n.submit.length){t.formElement=n;n._mceOldSubmit=n.submit;n.submit=function(){tinymce.triggerSave();t.isNotDirty=1;return t.formElement._mceOldSubmit(t.formElement);};} n=null;});} -function loadScripts(){if(s.language&&s.language_load!==false) -sl.add(tinymce.baseURL+'/langs/'+s.language+'.js');if(s.theme&&typeof s.theme!="function"&&s.theme.charAt(0)!='-'&&!ThemeManager.urls[s.theme]) -ThemeManager.load(s.theme,'themes/'+s.theme+'/editor_template'+tinymce.suffix+'.js');each(explode(s.plugins),function(p){if(p&&!PluginManager.urls[p]){if(p.charAt(0)=='-'){p=p.substr(1,p.length);var dependencies=PluginManager.dependencies(p);each(dependencies,function(dep){var defaultSettings={prefix:'plugins/',resource:dep,suffix:'/editor_plugin'+tinymce.suffix+'.js'};dep=PluginManager.createUrl(defaultSettings,dep);PluginManager.load(dep.resource,dep);});}else{if(p=='safari'){return;} -PluginManager.load(p,{prefix:'plugins/',resource:p,suffix:'/editor_plugin'+tinymce.suffix+'.js'});}}});sl.loadQueue(function(){if(!t.removed) -t.init();});};loadScripts();},init:function(){var n,t=this,s=t.settings,w,h,mh,e=t.getElement(),o,ti,u,bi,bc,re,i,initializedPlugins=[];tinymce.add(t);s.aria_label=s.aria_label||DOM.getAttrib(e,'aria-label',t.getLang('aria.rich_text_area'));if(s.theme){if(typeof s.theme!="function"){s.theme=s.theme.replace(/-/,'');o=ThemeManager.get(s.theme);t.theme=new o();if(t.theme.init) -t.theme.init(t,ThemeManager.urls[s.theme]||tinymce.documentBaseURL.replace(/\/$/,''));}else{t.theme=s.theme;}} +function loadScripts(){if(s.language&&s.language_load!==false){sl.add(tinymce.baseURL+'/langs/'+s.language+'.js');} +if(s.theme&&typeof s.theme!="function"&&s.theme.charAt(0)!='-'&&!ThemeManager.urls[s.theme]){ThemeManager.load(s.theme,'themes/'+s.theme+'/editor_template'+tinymce.suffix+'.js');} +each(explode(s.plugins),function(p){if(p&&!PluginManager.urls[p]){if(p.charAt(0)=='-'){p=p.substr(1,p.length);var dependencies=PluginManager.dependencies(p);each(dependencies,function(dep){var defaultSettings={prefix:'plugins/',resource:dep,suffix:'/editor_plugin'+tinymce.suffix+'.js'};dep=PluginManager.createUrl(defaultSettings,dep);PluginManager.load(dep.resource,dep);});}else{if(p=='safari'){return;} +PluginManager.load(p,{prefix:'plugins/',resource:p,suffix:'/editor_plugin'+tinymce.suffix+'.js'});}}});sl.loadQueue(function(){if(!t.removed){t.init();}});} +loadScripts();},init:function(){var n,t=this,s=t.settings,w,h,mh,e=t.getElement(),o,ti,u,bi,bc,re,i,initializedPlugins=[];tinymce.add(t);s.aria_label=s.aria_label||DOM.getAttrib(e,'aria-label',t.getLang('aria.rich_text_area'));if(s.theme){if(typeof s.theme!="function"){s.theme=s.theme.replace(/-/,'');o=ThemeManager.get(s.theme);t.theme=new o();if(t.theme.init){t.theme.init(t,ThemeManager.urls[s.theme]||tinymce.documentBaseURL.replace(/\/$/,''));}}else{t.theme=s.theme;}} function initPlugin(p){var c=PluginManager.get(p),u=PluginManager.urls[p]||tinymce.documentBaseURL.replace(/\/$/,''),po;if(c&&tinymce.inArray(initializedPlugins,p)===-1){each(PluginManager.dependencies(p),function(dep){initPlugin(dep);});po=new c(t,u);t.plugins[p]=po;if(po.init){po.init(t,u);initializedPlugins.push(p);}}} -each(explode(s.plugins.replace(/\-/g,'')),initPlugin);if(s.popup_css!==false){if(s.popup_css) -s.popup_css=t.documentBaseURI.toAbsolute(s.popup_css);else -s.popup_css=t.baseURI.toAbsolute("themes/"+s.theme+"/skins/"+s.skin+"/dialog.css");} -if(s.popup_css_add) -s.popup_css+=','+t.documentBaseURI.toAbsolute(s.popup_css_add);t.controlManager=new tinymce.ControlManager(t);t.onBeforeRenderUI.dispatch(t,t.controlManager);if(s.render_ui&&t.theme){t.orgDisplay=e.style.display;if(typeof s.theme!="function"){w=s.width||e.style.width||e.offsetWidth;h=s.height||e.style.height||e.offsetHeight;mh=s.min_height||100;re=/^[0-9\.]+(|px)$/i;if(re.test(''+w)) -w=Math.max(parseInt(w,10)+(o.deltaWidth||0),100);if(re.test(''+h)) -h=Math.max(parseInt(h,10)+(o.deltaHeight||0),mh);o=t.theme.renderUI({targetNode:e,width:w,height:h,deltaWidth:s.delta_width,deltaHeight:s.delta_height});DOM.setStyles(o.sizeContainer||o.editorContainer,{width:w,height:h});h=(o.iframeHeight||h)+(typeof(h)=='number'?(o.deltaHeight||0):'');if(h';if(s.document_base_url!=tinymce.documentBaseURL) -t.iframeHTML+='';if(s.ie7_compat) -t.iframeHTML+='';else -t.iframeHTML+='';t.iframeHTML+='';for(i=0;i';} +if(document.domain&&location.hostname!=document.domain){tinymce.relaxedDomain=document.domain;} +t.iframeHTML=s.doctype+'';if(s.document_base_url!=tinymce.documentBaseURL){t.iframeHTML+='';} +if(tinymce.isIE8){if(s.ie7_compat){t.iframeHTML+='';}else{t.iframeHTML+='';}} +t.iframeHTML+='';for(i=0;i';} t.contentCSS=[];bi=s.body_id||'tinymce';if(bi.indexOf('=')!=-1){bi=t.getParam('body_id','','hash');bi=bi[t.id]||bi;} bc=s.body_class||'';if(bc.indexOf('=')!=-1){bc=t.getParam('body_class','','hash');bc=bc[t.id]||'';} -t.iframeHTML+='
NOT LOADED';if(tinymce.relaxedDomain&&(isIE||(tinymce.isOpera&&parseFloat(opera.version())<11))){u='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+t.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody();})()';} +t.iframeHTML+='
';if(tinymce.relaxedDomain&&(isIE||(tinymce.isOpera&&parseFloat(opera.version())<11))){u='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+t.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody();})()';} n=DOM.add(o.iframeContainer,'iframe',{id:t.id+"_ifr",src:u||'javascript:""',frameBorder:'0',allowTransparency:"true",title:s.aria_label,style:{width:'100%',height:h,display:'block'}});t.contentAreaContainer=o.iframeContainer;if(o.editorContainer){DOM.get(o.editorContainer).style.display=t.orgDisplay;} -e.style.visibility=t.orgVisibility;DOM.get(t.id).style.display='none';DOM.setAttrib(t.id,'aria-hidden',true);if(!tinymce.relaxedDomain||!u) -t.initContentBody();e=n=o=null;},initContentBody:function(){var self=this,settings=self.settings,targetElm=DOM.get(self.id),doc=self.getDoc(),html,body,contentCssText;if((!isIE||!tinymce.relaxedDomain)&&!settings.content_editable){doc.open();doc.write(self.iframeHTML);doc.close();if(tinymce.relaxedDomain) -doc.domain=tinymce.relaxedDomain;} +e.style.visibility=t.orgVisibility;DOM.get(t.id).style.display='none';DOM.setAttrib(t.id,'aria-hidden',true);if(!tinymce.relaxedDomain||!u){t.initContentBody();} +e=n=o=null;},initContentBody:function(){var self=this,settings=self.settings,targetElm=DOM.get(self.id),doc=self.getDoc(),html,body,contentCssText;if((!isIE||!tinymce.relaxedDomain)&&!settings.content_editable){doc.open();doc.write(self.iframeHTML);doc.close();if(tinymce.relaxedDomain){doc.domain=tinymce.relaxedDomain;}} if(settings.content_editable){DOM.addClass(targetElm,'mceContentBody');self.contentDocument=doc=settings.content_document||document;self.contentWindow=settings.content_window||window;self.bodyElement=targetElm;settings.content_document=settings.content_window=null;} -body=self.getBody();body.disabled=true;if(!settings.readonly) -body.contentEditable=self.getParam('content_editable_state',true);body.disabled=false;self.schema=new tinymce.html.Schema(settings);self.dom=new tinymce.dom.DOMUtils(doc,{keep_values:true,url_converter:self.convertURL,url_converter_scope:self,hex_colors:settings.force_hex_style_colors,class_filter:settings.class_filter,update_styles:true,root_element:settings.content_editable?self.id:null,schema:self.schema});self.parser=new tinymce.html.DomParser(settings,self.schema);self.parser.addAttributeFilter('src,href,style',function(nodes,name){var i=nodes.length,node,dom=self.dom,value,internalName;while(i--){node=nodes[i];value=node.attr(name);internalName='data-mce-'+name;if(!node.attributes.map[internalName]){if(name==="style") -node.attr(internalName,dom.serializeStyle(dom.parseStyle(value),node.name));else -node.attr(internalName,self.convertURL(value,name,node.name));}}});self.parser.addNodeFilter('script',function(nodes,name){var i=nodes.length,node;while(i--){node=nodes[i];node.attr('type','mce-'+(node.attr('type')||'text/javascript'));}});self.parser.addNodeFilter('#cdata',function(nodes,name){var i=nodes.length,node;while(i--){node=nodes[i];node.type=8;node.name='#comment';node.value='[CDATA['+node.value+']]';}});self.parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div',function(nodes,name){var i=nodes.length,node,nonEmptyElements=self.schema.getNonEmptyElements();while(i--){node=nodes[i];if(node.isEmpty(nonEmptyElements)) -node.empty().append(new tinymce.html.Node('br',1)).shortEnded=true;}});self.serializer=new tinymce.dom.Serializer(settings,self.dom,self.schema);self.selection=new tinymce.dom.Selection(self.dom,self.getWin(),self.serializer,self);self.formatter=new tinymce.Formatter(self);self.undoManager=new tinymce.UndoManager(self);self.forceBlocks=new tinymce.ForceBlocks(self);self.enterKey=new tinymce.EnterKey(self);self.editorCommands=new tinymce.EditorCommands(self);self.onExecCommand.add(function(editor,command){if(!/^(FontName|FontSize)$/.test(command)) -self.nodeChanged();});self.serializer.onPreProcess.add(function(se,o){return self.onPreProcess.dispatch(self,o,se);});self.serializer.onPostProcess.add(function(se,o){return self.onPostProcess.dispatch(self,o,se);});self.onPreInit.dispatch(self);if(!settings.browser_spellcheck&&!settings.gecko_spellcheck) -doc.body.spellcheck=false;if(!settings.readonly){self.bindNativeEvents();} -self.controlManager.onPostRender.dispatch(self,self.controlManager);self.onPostRender.dispatch(self);self.quirks=tinymce.util.Quirks(self);if(settings.directionality) -body.dir=settings.directionality;if(settings.nowrap) -body.style.whiteSpace="nowrap";if(settings.protect){self.onBeforeSetContent.add(function(ed,o){each(settings.protect,function(pattern){o.content=o.content.replace(pattern,function(str){return'';});});});} +body=self.getBody();body.disabled=true;if(!settings.readonly){body.contentEditable=self.getParam('content_editable_state',true);} +body.disabled=false;self.schema=new tinymce.html.Schema(settings);self.dom=new tinymce.dom.DOMUtils(doc,{keep_values:true,url_converter:self.convertURL,url_converter_scope:self,hex_colors:settings.force_hex_style_colors,class_filter:settings.class_filter,update_styles:true,root_element:settings.content_editable?self.id:null,schema:self.schema});self.parser=new tinymce.html.DomParser(settings,self.schema);self.parser.addAttributeFilter('src,href,style',function(nodes,name){var i=nodes.length,node,dom=self.dom,value,internalName;while(i--){node=nodes[i];value=node.attr(name);internalName='data-mce-'+name;if(!node.attributes.map[internalName]){if(name==="style"){node.attr(internalName,dom.serializeStyle(dom.parseStyle(value),node.name));}else{node.attr(internalName,self.convertURL(value,name,node.name));}}}});self.parser.addNodeFilter('script',function(nodes,name){var i=nodes.length,node;while(i--){node=nodes[i];node.attr('type','mce-'+(node.attr('type')||'text/javascript'));}});self.parser.addNodeFilter('#cdata',function(nodes,name){var i=nodes.length,node;while(i--){node=nodes[i];node.type=8;node.name='#comment';node.value='[CDATA['+node.value+']]';}});self.parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div',function(nodes,name){var i=nodes.length,node,nonEmptyElements=self.schema.getNonEmptyElements();while(i--){node=nodes[i];if(node.isEmpty(nonEmptyElements)){node.empty().append(new tinymce.html.Node('br',1)).shortEnded=true;}}});self.serializer=new tinymce.dom.Serializer(settings,self.dom,self.schema);self.selection=new tinymce.dom.Selection(self.dom,self.getWin(),self.serializer,self);self.formatter=new tinymce.Formatter(self);self.undoManager=new tinymce.UndoManager(self);self.forceBlocks=new tinymce.ForceBlocks(self);self.enterKey=new tinymce.EnterKey(self);self.editorCommands=new tinymce.EditorCommands(self);self.onExecCommand.add(function(editor,command){if(!/^(FontName|FontSize)$/.test(command)){self.nodeChanged();}});self.serializer.onPreProcess.add(function(se,o){return self.onPreProcess.dispatch(self,o,se);});self.serializer.onPostProcess.add(function(se,o){return self.onPostProcess.dispatch(self,o,se);});self.onPreInit.dispatch(self);if(!settings.browser_spellcheck&&!settings.gecko_spellcheck){doc.body.spellcheck=false;} +if(!settings.readonly){self.bindNativeEvents();} +self.controlManager.onPostRender.dispatch(self,self.controlManager);self.onPostRender.dispatch(self);self.quirks=tinymce.util.Quirks(self);if(settings.directionality){body.dir=settings.directionality;} +if(settings.nowrap){body.style.whiteSpace="nowrap";} +if(settings.protect){self.onBeforeSetContent.add(function(ed,o){each(settings.protect,function(pattern){o.content=o.content.replace(pattern,function(str){return'';});});});} self.onSetContent.add(function(){self.addVisual(self.getBody());});if(settings.padd_empty_editor){self.onPostProcess.add(function(ed,o){o.content=o.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
[\r\n]*)$/,'');});} self.load({initial:true,format:'html'});self.startContent=self.getContent({format:'raw'});self.initialized=true;self.onInit.dispatch(self);self.execCallback('setupcontent_callback',self.id,body,doc);self.execCallback('init_instance_callback',self);self.focus(true);self.nodeChanged({initial:true});if(self.contentStyles.length>0){contentCssText='';each(self.contentStyles,function(style){contentCssText+=style+"\r\n";});self.dom.addStyle(contentCssText);} each(self.contentCSS,function(url){self.dom.loadCSS(url);});if(settings.auto_focus){setTimeout(function(){var ed=tinymce.get(settings.auto_focus);ed.selection.select(ed.getBody(),1);ed.selection.collapse(1);ed.getBody().focus();ed.getWin().focus();},100);} -targetElm=doc=body=null;},focus:function(skip_focus){var oed,self=this,selection=self.selection,contentEditable=self.settings.content_editable,ieRng,controlElm,doc=self.getDoc(),body;if(!skip_focus){if(self.lastIERng){selection.setRng(self.lastIERng);} +targetElm=doc=body=null;},focus:function(skip_focus){var oed,self=this,selection=self.selection,contentEditable=self.settings.content_editable,ieRng,controlElm,doc=self.getDoc(),body;if(!skip_focus){if(self.bookmark){selection.moveToBookmark(self.bookmark);self.bookmark=null;} ieRng=selection.getRng();if(ieRng.item){controlElm=ieRng.item(0);} self._refreshContentEditable();if(!contentEditable){self.getWin().focus();} -if(tinymce.isGecko||contentEditable){body=self.getBody();if(body.setActive){body.setActive();}else{body.focus();} +if(tinymce.isGecko||contentEditable){body=self.getBody();if(body.setActive&&!tinymce.isIE11){body.setActive();}else{body.focus();} if(contentEditable){selection.normalize();}} if(controlElm&&controlElm.ownerDocument==doc){ieRng=doc.body.createControlRange();ieRng.addElement(controlElm);ieRng.select();}} -if(tinymce.activeEditor!=self){if((oed=tinymce.activeEditor)!=null) -oed.onDeactivate.dispatch(oed,self);self.onActivate.dispatch(self,oed);} -tinymce._setActive(self);},execCallback:function(n){var t=this,f=t.settings[n],s;if(!f) -return;if(t.callbackLookup&&(s=t.callbackLookup[n])){f=s.func;s=s.scope;} +if(tinymce.activeEditor!=self){if((oed=tinymce.activeEditor)!=null){oed.onDeactivate.dispatch(oed,self);} +self.onActivate.dispatch(self,oed);} +tinymce._setActive(self);},execCallback:function(n){var t=this,f=t.settings[n],s;if(!f){return;} +if(t.callbackLookup&&(s=t.callbackLookup[n])){f=s.func;s=s.scope;} if(is(f,'string')){s=f.replace(/\.\w+$/,'');s=s?tinymce.resolve(s):0;f=tinymce.resolve(f);t.callbackLookup=t.callbackLookup||{};t.callbackLookup[n]={func:f,scope:s};} -return f.apply(s||t,Array.prototype.slice.call(arguments,1));},translate:function(s){var c=this.settings.language||'en',i18n=tinymce.i18n;if(!s) -return'';return i18n[c+'.'+s]||s.replace(/\{\#([^\}]+)\}/g,function(a,b){return i18n[c+'.'+b]||'{#'+b+'}';});},getLang:function(n,dv){return tinymce.i18n[(this.settings.language||'en')+'.'+n]||(is(dv)?dv:'{#'+n+'}');},getParam:function(n,dv,ty){var tr=tinymce.trim,v=is(this.settings[n])?this.settings[n]:dv,o;if(ty==='hash'){o={};if(is(v,'string')){each(v.indexOf('=')>0?v.split(/[;,](?![^=;,]*(?:[;,]|$))/):v.split(','),function(v){v=v.split('=');if(v.length>1) -o[tr(v[0])]=tr(v[1]);else -o[tr(v[0])]=tr(v);});}else -o=v;return o;} -return v;},nodeChanged:function(o){var self=this,selection=self.selection,node;if(self.initialized){o=o||{};node=selection.getStart()||self.getBody();node=isIE&&node.ownerDocument!=self.getDoc()?self.getBody():node;o.parents=[];self.dom.getParent(node,function(node){if(node.nodeName=='BODY') -return true;o.parents.push(node);});self.onNodeChange.dispatch(self,o?o.controlManager||self.controlManager:self.controlManager,node,selection.isCollapsed(),o);}},addButton:function(name,settings){var self=this;self.buttons=self.buttons||{};self.buttons[name]=settings;},addCommand:function(name,callback,scope){this.execCommands[name]={func:callback,scope:scope||this};},addQueryStateHandler:function(name,callback,scope){this.queryStateCommands[name]={func:callback,scope:scope||this};},addQueryValueHandler:function(name,callback,scope){this.queryValueCommands[name]={func:callback,scope:scope||this};},addShortcut:function(pa,desc,cmd_func,sc){var t=this,c;if(t.settings.custom_shortcuts===false) -return false;t.shortcuts=t.shortcuts||{};if(is(cmd_func,'string')){c=cmd_func;cmd_func=function(){t.execCommand(c,false,null);};} +return f.apply(s||t,Array.prototype.slice.call(arguments,1));},translate:function(s){var c=this.settings.language||'en',i18n=tinymce.i18n;if(!s){return'';} +return i18n[c+'.'+s]||s.replace(/\{\#([^\}]+)\}/g,function(a,b){return i18n[c+'.'+b]||'{#'+b+'}';});},getLang:function(n,dv){return tinymce.i18n[(this.settings.language||'en')+'.'+n]||(is(dv)?dv:'{#'+n+'}');},getParam:function(n,dv,ty){var tr=tinymce.trim,v=is(this.settings[n])?this.settings[n]:dv,o;if(ty==='hash'){o={};if(is(v,'string')){each(v.indexOf('=')>0?v.split(/[;,](?![^=;,]*(?:[;,]|$))/):v.split(','),function(v){v=v.split('=');if(v.length>1){o[tr(v[0])]=tr(v[1]);}else{o[tr(v[0])]=tr(v);}});}else{o=v;} +return o;} +return v;},nodeChanged:function(o){var self=this,selection=self.selection,node;if(!self.initialized){return;} +o=o||{};node=selection.getStart()||self.getBody();node=isIE&&node.ownerDocument!=self.getDoc()?self.getBody():node;o.parents=[];self.dom.getParent(node,function(node){if(node.nodeName=='BODY'){return true;} +o.parents.push(node);});self.onNodeChange.dispatch(self,o?o.controlManager||self.controlManager:self.controlManager,node,selection.isCollapsed(),o);},addButton:function(name,settings){var self=this;self.buttons=self.buttons||{};self.buttons[name]=settings;},addCommand:function(name,callback,scope){this.execCommands[name]={func:callback,scope:scope||this};},addQueryStateHandler:function(name,callback,scope){this.queryStateCommands[name]={func:callback,scope:scope||this};},addQueryValueHandler:function(name,callback,scope){this.queryValueCommands[name]={func:callback,scope:scope||this};},addShortcut:function(pa,desc,cmd_func,sc){var t=this,c;if(t.settings.custom_shortcuts===false){return false;} +t.shortcuts=t.shortcuts||{};if(is(cmd_func,'string')){c=cmd_func;cmd_func=function(){t.execCommand(c,false,null);};} if(is(cmd_func,'object')){c=cmd_func;cmd_func=function(){t.execCommand(c[0],c[1],c[2]);};} -each(explode(pa),function(pa){var o={func:cmd_func,scope:sc||this,desc:t.translate(desc),alt:false,ctrl:false,shift:false};each(explode(pa,'+'),function(v){switch(v){case'alt':case'ctrl':case'shift':o[v]=true;break;default:o.charCode=v.charCodeAt(0);o.keyCode=v.toUpperCase().charCodeAt(0);}});t.shortcuts[(o.ctrl?'ctrl':'')+','+(o.alt?'alt':'')+','+(o.shift?'shift':'')+','+o.keyCode]=o;});return true;},execCommand:function(cmd,ui,val,a){var t=this,s=0,o,st;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(cmd)&&(!a||!a.skip_focus)) -t.focus();a=extend({},a);t.onBeforeExecCommand.dispatch(t,cmd,ui,val,a);if(a.terminate) -return false;if(t.execCallback('execcommand_callback',t.id,t.selection.getNode(),cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;} +each(explode(pa),function(pa){var o={func:cmd_func,scope:sc||this,desc:t.translate(desc),alt:false,ctrl:false,shift:false};each(explode(pa,'+'),function(v){switch(v){case'alt':case'ctrl':case'shift':o[v]=true;break;default:o.charCode=v.charCodeAt(0);o.keyCode=v.toUpperCase().charCodeAt(0);}});t.shortcuts[(o.ctrl?'ctrl':'')+','+(o.alt?'alt':'')+','+(o.shift?'shift':'')+','+o.keyCode]=o;});return true;},execCommand:function(cmd,ui,val,a){var t=this,s=0,o,st;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(cmd)&&(!a||!a.skip_focus)){t.focus();} +a=extend({},a);t.onBeforeExecCommand.dispatch(t,cmd,ui,val,a);if(a.terminate){return false;} +if(t.execCallback('execcommand_callback',t.id,t.selection.getNode(),cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;} if(o=t.execCommands[cmd]){st=o.func.call(o.scope,ui,val);if(st!==true){t.onExecCommand.dispatch(t,cmd,ui,val,a);return st;}} -each(t.plugins,function(p){if(p.execCommand&&p.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);s=1;return false;}});if(s) -return true;if(t.theme&&t.theme.execCommand&&t.theme.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;} +each(t.plugins,function(p){if(p.execCommand&&p.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);s=1;return false;}});if(s){return true;} +if(t.theme&&t.theme.execCommand&&t.theme.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;} if(t.editorCommands.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;} -t.getDoc().execCommand(cmd,ui,val);t.onExecCommand.dispatch(t,cmd,ui,val,a);},queryCommandState:function(cmd){var t=this,o,s;if(t._isHidden()) -return;if(o=t.queryStateCommands[cmd]){s=o.func.call(o.scope);if(s!==true) -return s;} -o=t.editorCommands.queryCommandState(cmd);if(o!==-1) -return o;try{return this.getDoc().queryCommandState(cmd);}catch(ex){}},queryCommandValue:function(c){var t=this,o,s;if(t._isHidden()) -return;if(o=t.queryValueCommands[c]){s=o.func.call(o.scope);if(s!==true) -return s;} -o=t.editorCommands.queryCommandValue(c);if(is(o)) -return o;try{return this.getDoc().queryCommandValue(c);}catch(ex){}},show:function(){var self=this;DOM.show(self.getContainer());DOM.hide(self.id);self.load();},hide:function(){var self=this,doc=self.getDoc();if(isIE&&doc) -doc.execCommand('SelectAll');self.save();setTimeout(function(){DOM.hide(self.getContainer());},1);DOM.setStyle(self.id,'display',self.orgDisplay);},isHidden:function(){return!DOM.isHidden(this.id);},setProgressState:function(b,ti,o){this.onSetProgressState.dispatch(this,b,ti,o);return b;},load:function(o){var t=this,e=t.getElement(),h;if(e){o=o||{};o.load=true;h=t.setContent(is(e.value)?e.value:e.innerHTML,o);o.element=e;if(!o.no_events) -t.onLoadContent.dispatch(t,o);o.element=e=null;return h;}},save:function(o){var t=this,e=t.getElement(),h,f;if(!e||!t.initialized) -return;o=o||{};o.save=true;o.element=e;h=o.content=t.getContent(o);if(!o.no_events) -t.onSaveContent.dispatch(t,o);h=o.content;if(!/TEXTAREA|INPUT/i.test(e.nodeName)){e.innerHTML=h;if(f=DOM.getParent(t.id,'form')){each(f.elements,function(e){if(e.name==t.id){e.value=h;return false;}});}}else -e.value=h;o.element=e=null;return h;},setContent:function(content,args){var self=this,rootNode,body=self.getBody(),forcedRootBlockName;args=args||{};args.format=args.format||'html';args.set=true;args.content=content;if(!args.no_events) -self.onBeforeSetContent.dispatch(self,args);content=args.content;if(!tinymce.isIE&&(content.length===0||/^\s+$/.test(content))){forcedRootBlockName=self.settings.forced_root_block;if(forcedRootBlockName) -content='<'+forcedRootBlockName+'>
';else -content='
';body.innerHTML=content;self.selection.select(body,true);self.selection.collapse(true);return;} +t.getDoc().execCommand(cmd,ui,val);t.onExecCommand.dispatch(t,cmd,ui,val,a);},queryCommandState:function(cmd){var t=this,o,s;if(t._isHidden()){return;} +if(o=t.queryStateCommands[cmd]){s=o.func.call(o.scope);if(s!==true){return s;}} +o=t.editorCommands.queryCommandState(cmd);if(o!==-1){return o;} +try{return this.getDoc().queryCommandState(cmd);}catch(ex){}},queryCommandValue:function(c){var t=this,o,s;if(t._isHidden()){return;} +if(o=t.queryValueCommands[c]){s=o.func.call(o.scope);if(s!==true){return s;}} +o=t.editorCommands.queryCommandValue(c);if(is(o)){return o;} +try{return this.getDoc().queryCommandValue(c);}catch(ex){}},show:function(){var self=this;DOM.show(self.getContainer());DOM.hide(self.id);self.load();},hide:function(){var self=this,doc=self.getDoc();if(isIE&&doc){doc.execCommand('SelectAll');} +self.save();DOM.hide(self.getContainer());DOM.setStyle(self.id,'display',self.orgDisplay);},isHidden:function(){return!DOM.isHidden(this.id);},setProgressState:function(b,ti,o){this.onSetProgressState.dispatch(this,b,ti,o);return b;},load:function(o){var t=this,e=t.getElement(),h;if(e){o=o||{};o.load=true;h=t.setContent(is(e.value)?e.value:e.innerHTML,o);o.element=e;if(!o.no_events){t.onLoadContent.dispatch(t,o);} +o.element=e=null;return h;}},save:function(o){var t=this,e=t.getElement(),h,f;if(!e||!t.initialized){return;} +o=o||{};o.save=true;o.element=e;h=o.content=t.getContent(o);if(!o.no_events){t.onSaveContent.dispatch(t,o);} +h=o.content;if(!/TEXTAREA|INPUT/i.test(e.nodeName)){e.innerHTML=h;if(f=DOM.getParent(t.id,'form')){each(f.elements,function(e){if(e.name==t.id){e.value=h;return false;}});}}else{e.value=h;} +o.element=e=null;return h;},setContent:function(content,args){var self=this,body=self.getBody(),forcedRootBlockName;args=args||{};args.format=args.format||'html';args.set=true;args.content=content;if(!args.no_events){self.onBeforeSetContent.dispatch(self,args);} +content=args.content;if(content.length===0||/^\s+$/.test(content)){forcedRootBlockName=self.settings.forced_root_block;if(forcedRootBlockName&&self.schema.isValidChild(body.nodeName.toLowerCase(),forcedRootBlockName.toLowerCase())){if(isIE){content='<'+forcedRootBlockName+'>';}else{content='<'+forcedRootBlockName+'>
';}}else if(!isIE){content='
';} +body.innerHTML=content;self.selection.select(body,true);self.selection.collapse(true);return;} if(args.format!=='raw'){content=new tinymce.html.Serializer({},self.schema).serialize(self.parser.parse(content));} -args.content=tinymce.trim(content);self.dom.setHTML(body,args.content);if(!args.no_events) -self.onSetContent.dispatch(self,args);if(!self.settings.content_editable||document.activeElement===self.getBody()){self.selection.normalize();} -return args.content;},getContent:function(args){var self=this,content,body=self.getBody();args=args||{};args.format=args.format||'html';args.get=true;args.getInner=true;if(!args.no_events) -self.onBeforeGetContent.dispatch(self,args);if(args.format=='raw') -content=body.innerHTML;else if(args.format=='text') -content=body.innerText||body.textContent;else -content=self.serializer.serialize(body,args);if(args.format!='text'){args.content=tinymce.trim(content);}else{args.content=content;} -if(!args.no_events) -self.onGetContent.dispatch(self,args);return args.content;},isDirty:function(){var self=this;return tinymce.trim(self.startContent)!=tinymce.trim(self.getContent({format:'raw',no_events:1}))&&!self.isNotDirty;},getContainer:function(){var self=this;if(!self.container) -self.container=DOM.get(self.editorContainer||self.id+'_parent');return self.container;},getContentAreaContainer:function(){return this.contentAreaContainer;},getElement:function(){return DOM.get(this.settings.content_element||this.id);},getWin:function(){var self=this,elm;if(!self.contentWindow){elm=DOM.get(self.id+"_ifr");if(elm) -self.contentWindow=elm.contentWindow;} -return self.contentWindow;},getDoc:function(){var self=this,win;if(!self.contentDocument){win=self.getWin();if(win) -self.contentDocument=win.document;} +args.content=tinymce.trim(content);self.dom.setHTML(body,args.content);if(!args.no_events){self.onSetContent.dispatch(self,args);} +if(!self.settings.content_editable||document.activeElement===self.getBody()){self.selection.normalize();} +return args.content;},getContent:function(args){var self=this,content,body=self.getBody();args=args||{};args.format=args.format||'html';args.get=true;args.getInner=true;if(!args.no_events){self.onBeforeGetContent.dispatch(self,args);} +if(args.format=='raw'){content=body.innerHTML;}else if(args.format=='text'){content=body.innerText||body.textContent;}else{content=self.serializer.serialize(body,args);} +if(args.format!='text'){args.content=tinymce.trim(content);}else{args.content=content;} +if(!args.no_events){self.onGetContent.dispatch(self,args);} +return args.content;},isDirty:function(){var self=this;return tinymce.trim(self.startContent)!==tinymce.trim(self.getContent({format:'raw'}))&&!self.isNotDirty;},getContainer:function(){var self=this;if(!self.container){self.container=DOM.get(self.editorContainer||self.id+'_parent');} +return self.container;},getContentAreaContainer:function(){return this.contentAreaContainer;},getElement:function(){return DOM.get(this.settings.content_element||this.id);},getWin:function(){var self=this,elm;if(!self.contentWindow){elm=DOM.get(self.id+"_ifr");if(elm){self.contentWindow=elm.contentWindow;}} +return self.contentWindow;},getDoc:function(){var self=this,win;if(!self.contentDocument){win=self.getWin();if(win){self.contentDocument=win.document;}} return self.contentDocument;},getBody:function(){return this.bodyElement||this.getDoc().body;},convertURL:function(url,name,elm){var self=this,settings=self.settings;if(settings.urlconverter_callback) -return self.execCallback('urlconverter_callback',url,elm,true,name);if(!settings.convert_urls||(elm&&elm.nodeName=='LINK')||url.indexOf('file:')===0) -return url;if(settings.relative_urls) -return self.documentBaseURI.toRelative(url);url=self.documentBaseURI.toAbsolute(url,settings.remove_script_host);return url;},addVisual:function(elm){var self=this,settings=self.settings,dom=self.dom,cls;elm=elm||self.getBody();if(!is(self.hasVisual)) -self.hasVisual=settings.visual;each(dom.select('table,a',elm),function(elm){var value;switch(elm.nodeName){case'TABLE':cls=settings.visual_table_class||'mceItemTable';value=dom.getAttrib(elm,'border');if(!value||value=='0'){if(self.hasVisual) -dom.addClass(elm,cls);else -dom.removeClass(elm,cls);} -return;case'A':if(!dom.getAttrib(elm,'href',false)){value=dom.getAttrib(elm,'name')||elm.id;cls='mceItemAnchor';if(value){if(self.hasVisual) -dom.addClass(elm,cls);else -dom.removeClass(elm,cls);}} -return;}});self.onVisualAid.dispatch(self,elm,self.hasVisual);},remove:function(){var self=this,elm=self.getContainer();if(!self.removed){self.removed=1;self.hide();if(!self.settings.content_editable){Event.unbind(self.getWin());Event.unbind(self.getDoc());} -Event.unbind(self.getBody());Event.clear(elm);self.execCallback('remove_instance_callback',self);self.onRemove.dispatch(self);self.onExecCommand.listeners=[];tinymce.remove(self);DOM.remove(elm);}},destroy:function(s){var t=this;if(t.destroyed) -return;if(isGecko){Event.unbind(t.getDoc());Event.unbind(t.getWin());Event.unbind(t.getBody());} -if(!s){tinymce.removeUnload(t.destroy);tinyMCE.onBeforeUnload.remove(t._beforeUnload);if(t.theme&&t.theme.destroy) -t.theme.destroy();t.controlManager.destroy();t.selection.destroy();t.dom.destroy();} +return self.execCallback('urlconverter_callback',url,elm,true,name);if(!settings.convert_urls||(elm&&elm.nodeName=='LINK')||url.indexOf('file:')===0){return url;} +if(settings.relative_urls){return self.documentBaseURI.toRelative(url);} +url=self.documentBaseURI.toAbsolute(url,settings.remove_script_host);return url;},addVisual:function(elm){var self=this,settings=self.settings,dom=self.dom,cls;elm=elm||self.getBody();if(!is(self.hasVisual)) +self.hasVisual=settings.visual;each(dom.select('table,a',elm),function(elm){var value;switch(elm.nodeName){case'TABLE':cls=settings.visual_table_class||'mceItemTable';value=dom.getAttrib(elm,'border');if(!value||value=='0'){if(self.hasVisual){dom.addClass(elm,cls);}else{dom.removeClass(elm,cls);}} +return;case'A':if(!dom.getAttrib(elm,'href',false)){value=dom.getAttrib(elm,'name')||elm.id;cls='mceItemAnchor';if(value){if(self.hasVisual){dom.addClass(elm,cls);}else{dom.removeClass(elm,cls);}}} +return;}});self.onVisualAid.dispatch(self,elm,self.hasVisual);},remove:function(){var self=this,elm=self.getContainer(),doc=self.getDoc();if(!self.removed){self.removed=1;if(isIE&&doc){doc.execCommand('SelectAll');} +self.save();DOM.setStyle(self.id,'display',self.orgDisplay);if(!self.settings.content_editable){Event.unbind(self.getWin());Event.unbind(self.getDoc());} +Event.unbind(self.getBody());Event.clear(elm);self.execCallback('remove_instance_callback',self);self.onRemove.dispatch(self);self.onExecCommand.listeners=[];tinymce.remove(self);DOM.remove(elm);}},destroy:function(s){var t=this;if(t.destroyed){return;} +if(isGecko){Event.unbind(t.getDoc());Event.unbind(t.getWin());Event.unbind(t.getBody());} +if(!s){tinymce.removeUnload(t.destroy);tinyMCE.onBeforeUnload.remove(t._beforeUnload);if(t.theme&&t.theme.destroy){t.theme.destroy();} +t.controlManager.destroy();t.selection.destroy();t.dom.destroy();} if(t.formElement){t.formElement.submit=t.formElement._mceOldSubmit;t.formElement._mceOldSubmit=null;} -t.contentAreaContainer=t.formElement=t.container=t.settings.content_element=t.bodyElement=t.contentDocument=t.contentWindow=null;if(t.selection) -t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null;t.destroyed=1;},_refreshContentEditable:function(){var self=this,body,parent;if(self._isHidden()){body=self.getBody();parent=body.parentNode;parent.removeChild(body);parent.appendChild(body);body.focus();}},_isHidden:function(){var s;if(!isGecko) -return 0;s=this.selection.getSel();return(!s||!s.rangeCount||s.rangeCount===0);}});})(tinymce);(function(tinymce){var each=tinymce.each;tinymce.Editor.prototype.setupEvents=function(){var self=this,settings=self.settings;each(['onPreInit','onBeforeRenderUI','onPostRender','onLoad','onInit','onRemove','onActivate','onDeactivate','onClick','onEvent','onMouseUp','onMouseDown','onDblClick','onKeyDown','onKeyUp','onKeyPress','onContextMenu','onSubmit','onReset','onPaste','onPreProcess','onPostProcess','onBeforeSetContent','onBeforeGetContent','onSetContent','onGetContent','onLoadContent','onSaveContent','onNodeChange','onChange','onBeforeExecCommand','onExecCommand','onUndo','onRedo','onVisualAid','onSetProgressState','onSetAttrib'],function(name){self[name]=new tinymce.util.Dispatcher(self);});if(settings.cleanup_callback){self.onBeforeSetContent.add(function(ed,o){o.content=ed.execCallback('cleanup_callback','insert_to_editor',o.content,o);});self.onPreProcess.add(function(ed,o){if(o.set) +t.contentAreaContainer=t.formElement=t.container=t.settings.content_element=t.bodyElement=t.contentDocument=t.contentWindow=null;if(t.selection){t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null;} +t.destroyed=1;},_refreshContentEditable:function(){var self=this,body,parent;if(self._isHidden()){body=self.getBody();parent=body.parentNode;parent.removeChild(body);parent.appendChild(body);body.focus();}},_isHidden:function(){var s;if(!isGecko){return 0;} +s=this.selection.getSel();return(!s||!s.rangeCount||s.rangeCount===0);}});})(tinymce);(function(tinymce){var each=tinymce.each;tinymce.Editor.prototype.setupEvents=function(){var self=this,settings=self.settings;each(['onPreInit','onBeforeRenderUI','onPostRender','onLoad','onInit','onRemove','onActivate','onDeactivate','onClick','onEvent','onMouseUp','onMouseDown','onDblClick','onKeyDown','onKeyUp','onKeyPress','onContextMenu','onSubmit','onReset','onPaste','onPreProcess','onPostProcess','onBeforeSetContent','onBeforeGetContent','onSetContent','onGetContent','onLoadContent','onSaveContent','onNodeChange','onChange','onBeforeExecCommand','onExecCommand','onUndo','onRedo','onVisualAid','onSetProgressState','onSetAttrib'],function(name){self[name]=new tinymce.util.Dispatcher(self);});if(settings.cleanup_callback){self.onBeforeSetContent.add(function(ed,o){o.content=ed.execCallback('cleanup_callback','insert_to_editor',o.content,o);});self.onPreProcess.add(function(ed,o){if(o.set) ed.execCallback('cleanup_callback','insert_to_editor_dom',o.node,o);if(o.get) ed.execCallback('cleanup_callback','get_from_editor_dom',o.node,o);});self.onPostProcess.add(function(ed,o){if(o.set) o.content=ed.execCallback('cleanup_callback','insert_to_editor',o.content,o);if(o.get) @@ -2944,7 +2935,7 @@ return queryCommandState('InsertUnorderedList')||queryCommandState('InsertOrdere value=parent.style.fontSize;else value=parent.style.fontFamily.replace(/, /g,',').replace(/[\'\"]/g,'').toLowerCase();} return value;}},'value');addCommands({Undo:function(){editor.undoManager.undo();},Redo:function(){editor.undoManager.redo();}});};})(tinymce);(function(tinymce){var Dispatcher=tinymce.util.Dispatcher;tinymce.UndoManager=function(editor){var self,index=0,data=[],beforeBookmark,onAdd,onUndo,onRedo;function getContent(){return tinymce.trim(editor.getContent({format:'raw',no_events:1}).replace(/]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\/span>/g,''));};function addNonTypingUndoLevel(){self.typing=false;self.add();};onBeforeAdd=new Dispatcher(self);onAdd=new Dispatcher(self);onUndo=new Dispatcher(self);onRedo=new Dispatcher(self);onAdd.add(function(undoman,level){if(undoman.hasUndo()) -return editor.onChange.dispatch(editor,level,undoman);});onUndo.add(function(undoman,level){return editor.onUndo.dispatch(editor,level,undoman);});onRedo.add(function(undoman,level){return editor.onRedo.dispatch(editor,level,undoman);});editor.onInit.add(function(){self.add();});editor.onBeforeExecCommand.add(function(ed,cmd,ui,val,args){if(cmd!='Undo'&&cmd!='Redo'&&cmd!='mceRepaint'&&(!args||!args.skip_undo)){self.beforeChange();}});editor.onExecCommand.add(function(ed,cmd,ui,val,args){if(cmd!='Undo'&&cmd!='Redo'&&cmd!='mceRepaint'&&(!args||!args.skip_undo)){self.add();}});editor.onSaveContent.add(addNonTypingUndoLevel);editor.dom.bind(editor.dom.getRoot(),'dragend',addNonTypingUndoLevel);editor.dom.bind(editor.getDoc(),tinymce.isGecko?'blur':'focusout',function(e){if(!editor.removed&&self.typing){addNonTypingUndoLevel();}});editor.onKeyUp.add(function(editor,e){var keyCode=e.keyCode;if((keyCode>=33&&keyCode<=36)||(keyCode>=37&&keyCode<=40)||keyCode==45||keyCode==13||e.ctrlKey){addNonTypingUndoLevel();}});editor.onKeyDown.add(function(editor,e){var keyCode=e.keyCode;if((keyCode>=33&&keyCode<=36)||(keyCode>=37&&keyCode<=40)||keyCode==45){if(self.typing){addNonTypingUndoLevel();} +return editor.onChange.dispatch(editor,level,undoman);});onUndo.add(function(undoman,level){return editor.onUndo.dispatch(editor,level,undoman);});onRedo.add(function(undoman,level){return editor.onRedo.dispatch(editor,level,undoman);});editor.onInit.add(function(){self.add();});editor.onBeforeExecCommand.add(function(ed,cmd,ui,val,args){if(cmd!='Undo'&&cmd!='Redo'&&cmd!='mceRepaint'&&(!args||!args.skip_undo)){self.beforeChange();}});editor.onExecCommand.add(function(ed,cmd,ui,val,args){if(cmd!='Undo'&&cmd!='Redo'&&cmd!='mceRepaint'&&(!args||!args.skip_undo)){self.add();}});editor.onSaveContent.add(addNonTypingUndoLevel);editor.dom.bind(editor.dom.getRoot(),'dragend',addNonTypingUndoLevel);editor.dom.bind(editor.getBody(),'focusout',function(e){if(!editor.removed&&self.typing){addNonTypingUndoLevel();}});editor.onKeyUp.add(function(editor,e){var keyCode=e.keyCode;if((keyCode>=33&&keyCode<=36)||(keyCode>=37&&keyCode<=40)||keyCode==45||keyCode==13||e.ctrlKey){addNonTypingUndoLevel();}});editor.onKeyDown.add(function(editor,e){var keyCode=e.keyCode;if((keyCode>=33&&keyCode<=36)||(keyCode>=37&&keyCode<=40)||keyCode==45){if(self.typing){addNonTypingUndoLevel();} return;} if((keyCode<16||keyCode>20)&&keyCode!=224&&keyCode!=91&&!self.typing){self.beforeChange();self.typing=true;self.add();}});editor.onMouseDown.add(function(editor,e){if(self.typing){addNonTypingUndoLevel();}});editor.addShortcut('ctrl+z','undo_desc','Undo');editor.addShortcut('ctrl+y','redo_desc','Redo');self={data:data,typing:false,onBeforeAdd:onBeforeAdd,onAdd:onAdd,onUndo:onUndo,onRedo:onRedo,beforeChange:function(){beforeBookmark=editor.selection.getBookmark(2,true);},add:function(level){var i,settings=editor.settings,lastLevel;level=level||{};level.content=getContent();self.onBeforeAdd.dispatch(self,level);lastLevel=data[index];if(lastLevel&&lastLevel.content==level.content) return null;if(data[index]) @@ -3002,196 +2993,230 @@ f+=(f?',':'')+k+'='+v;}});t.features=s;t.params=p;t.onOpen.dispatch(t,s,p);u=s.u w=window.open(u,s.name,f);}catch(ex){} if(!w) alert(t.editor.getLang('popup_blocked'));},close:function(w){w.close();this.onClose.dispatch(this);},createInstance:function(cl,a,b,c,d,e){var f=tinymce.resolve(cl);return new f(a,b,c,d,e);},confirm:function(t,cb,s,w){w=w||window;cb.call(s||this,w.confirm(this._decode(this.editor.getLang(t,t))));},alert:function(tx,cb,s,w){var t=this;w=w||window;w.alert(t._decode(t.editor.getLang(tx,tx)));if(cb) -cb.call(s||t);},resizeBy:function(dw,dh,win){win.resizeBy(dw,dh);},_decode:function(s){return tinymce.DOM.decode(s).replace(/\\n/g,'\n');}});}(tinymce));(function(tinymce){tinymce.Formatter=function(ed){var formats={},each=tinymce.each,dom=ed.dom,selection=ed.selection,TreeWalker=tinymce.dom.TreeWalker,rangeUtils=new tinymce.dom.RangeUtils(dom),isValid=ed.schema.isValidChild,isArray=tinymce.isArray,isBlock=dom.isBlock,forcedRootBlock=ed.settings.forced_root_block,nodeIndex=dom.nodeIndex,INVISIBLE_CHAR='\uFEFF',MCE_ATTR_RE=/^(src|href|style)$/,FALSE=false,TRUE=true,formatChangeData,undef,getContentEditable=dom.getContentEditable;function isTextBlock(name){return!!ed.schema.getTextBlocks()[name.toLowerCase()];} -function getParents(node,selector){return dom.getParents(node,selector,dom.getRoot());};function isCaretNode(node){return node.nodeType===1&&node.id==='_mce_caret';};function defaultFormats(){register({alignleft:[{selector:'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li',styles:{textAlign:'left'},defaultBlock:'div'},{selector:'img,table',collapsed:false,styles:{'float':'left'}}],aligncenter:[{selector:'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li',styles:{textAlign:'center'},defaultBlock:'div'},{selector:'img',collapsed:false,styles:{display:'block',marginLeft:'auto',marginRight:'auto'}},{selector:'table',collapsed:false,styles:{marginLeft:'auto',marginRight:'auto'}}],alignright:[{selector:'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li',styles:{textAlign:'right'},defaultBlock:'div'},{selector:'img,table',collapsed:false,styles:{'float':'right'}}],alignfull:[{selector:'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li',styles:{textAlign:'justify'},defaultBlock:'div'}],bold:[{inline:'strong',remove:'all'},{inline:'span',styles:{fontWeight:'bold'}},{inline:'b',remove:'all'}],italic:[{inline:'em',remove:'all'},{inline:'span',styles:{fontStyle:'italic'}},{inline:'i',remove:'all'}],underline:[{inline:'span',styles:{textDecoration:'underline'},exact:true},{inline:'u',remove:'all'}],strikethrough:[{inline:'span',styles:{textDecoration:'line-through'},exact:true},{inline:'strike',remove:'all'}],forecolor:{inline:'span',styles:{color:'%value'},wrap_links:false},hilitecolor:{inline:'span',styles:{backgroundColor:'%value'},wrap_links:false},fontname:{inline:'span',styles:{fontFamily:'%value'}},fontsize:{inline:'span',styles:{fontSize:'%value'}},fontsize_class:{inline:'span',attributes:{'class':'%value'}},blockquote:{block:'blockquote',wrapper:1,remove:'all'},subscript:{inline:'sub'},superscript:{inline:'sup'},link:{inline:'a',selector:'a',remove:'all',split:true,deep:true,onmatch:function(node){return true;},onformat:function(elm,fmt,vars){each(vars,function(value,key){dom.setAttrib(elm,key,value);});}},removeformat:[{selector:'b,strong,em,i,font,u,strike',remove:'all',split:true,expand:false,block_expand:true,deep:true},{selector:'span',attributes:['style','class'],remove:'empty',split:true,expand:false,deep:true},{selector:'*',attributes:['style','class'],split:false,expand:false,deep:true}]});each('p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp'.split(/\s/),function(name){register(name,{block:name,remove:'all'});});register(ed.settings.formats);};function addKeyboardShortcuts(){ed.addShortcut('ctrl+b','bold_desc','Bold');ed.addShortcut('ctrl+i','italic_desc','Italic');ed.addShortcut('ctrl+u','underline_desc','Underline');for(var i=1;i<=6;i++){ed.addShortcut('ctrl+'+i,'',['FormatBlock',false,'h'+i]);} -ed.addShortcut('ctrl+7','',['FormatBlock',false,'p']);ed.addShortcut('ctrl+8','',['FormatBlock',false,'div']);ed.addShortcut('ctrl+9','',['FormatBlock',false,'address']);};function get(name){return name?formats[name]:formats;};function register(name,format){if(name){if(typeof(name)!=='string'){each(name,function(format,name){register(name,format);});}else{format=format.length?format:[format];each(format,function(format){if(format.deep===undef) -format.deep=!format.selector;if(format.split===undef) -format.split=!format.selector||format.inline;if(format.remove===undef&&format.selector&&!format.inline) -format.remove='none';if(format.selector&&format.inline){format.mixed=true;format.block_expand=true;} -if(typeof(format.classes)==='string') -format.classes=format.classes.split(/\s+/);});formats[name]=format;}}};var getTextDecoration=function(node){var decoration;ed.dom.getParent(node,function(n){decoration=ed.dom.getStyle(n,'text-decoration');return decoration&&decoration!=='none';});return decoration;};var processUnderlineAndColor=function(node){var textDecoration;if(node.nodeType===1&&node.parentNode&&node.parentNode.nodeType===1){textDecoration=getTextDecoration(node.parentNode);if(ed.dom.getStyle(node,'color')&&textDecoration){ed.dom.setStyle(node,'text-decoration',textDecoration);}else if(ed.dom.getStyle(node,'textdecoration')===textDecoration){ed.dom.setStyle(node,'text-decoration',null);}}};function apply(name,vars,node){var formatList=get(name),format=formatList[0],bookmark,rng,i,isCollapsed=selection.isCollapsed();function setElementFormat(elm,fmt){fmt=fmt||format;if(elm){if(fmt.onformat){fmt.onformat(elm,fmt,vars,node);} -each(fmt.styles,function(value,name){dom.setStyle(elm,name,replaceVars(value,vars));});each(fmt.attributes,function(value,name){dom.setAttrib(elm,name,replaceVars(value,vars));});each(fmt.classes,function(value){value=replaceVars(value,vars);if(!dom.hasClass(elm,value)) -dom.addClass(elm,value);});}};function adjustSelectionToVisibleSelection(){function findSelectionEnd(start,end){var walker=new TreeWalker(end);for(node=walker.current();node;node=walker.prev()){if(node.childNodes.length>1||node==start||node.tagName=='BR'){return node;}}};var rng=ed.selection.getRng();var start=rng.startContainer;var end=rng.endContainer;if(start!=end&&rng.endOffset===0){var newEnd=findSelectionEnd(start,end);var endOffset=newEnd.nodeType==3?newEnd.length:newEnd.childNodes.length;rng.setEnd(newEnd,endOffset);} +cb.call(s||t);},resizeBy:function(dw,dh,win){win.resizeBy(dw,dh);},_decode:function(s){return tinymce.DOM.decode(s).replace(/\\n/g,'\n');}});}(tinymce));(function(tinymce){tinymce.Formatter=function(ed){var formats={},each=tinymce.each,dom=ed.dom,selection=ed.selection,TreeWalker=tinymce.dom.TreeWalker,rangeUtils=new tinymce.dom.RangeUtils(dom),isValidChild=ed.schema.isValidChild,isBlock=dom.isBlock,forcedRootBlock=ed.settings.forced_root_block,nodeIndex=dom.nodeIndex,INVISIBLE_CHAR='\uFEFF',MCE_ATTR_RE=/^(src|href|style)$/,FALSE=false,TRUE=true,formatChangeData,undef,getContentEditable=dom.getContentEditable;function isTextBlock(name){if(name.nodeType){name=name.nodeName;} +return!!ed.schema.getTextBlockElements()[name.toLowerCase()];} +function getParents(node,selector){return dom.getParents(node,selector,dom.getRoot());} +function isCaretNode(node){return node.nodeType===1&&node.id==='_mce_caret';} +function defaultFormats(){register({alignleft:[{selector:'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li',styles:{textAlign:'left'},defaultBlock:'div'},{selector:'img,table',collapsed:false,styles:{'float':'left'}}],aligncenter:[{selector:'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li',styles:{textAlign:'center'},defaultBlock:'div'},{selector:'img',collapsed:false,styles:{display:'block',marginLeft:'auto',marginRight:'auto'}},{selector:'table',collapsed:false,styles:{marginLeft:'auto',marginRight:'auto'}}],alignright:[{selector:'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li',styles:{textAlign:'right'},defaultBlock:'div'},{selector:'img,table',collapsed:false,styles:{'float':'right'}}],alignfull:[{selector:'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li',styles:{textAlign:'justify'},defaultBlock:'div'}],bold:[{inline:'strong',remove:'all'},{inline:'span',styles:{fontWeight:'bold'}},{inline:'b',remove:'all'}],italic:[{inline:'em',remove:'all'},{inline:'span',styles:{fontStyle:'italic'}},{inline:'i',remove:'all'}],underline:[{inline:'span',styles:{textDecoration:'underline'},exact:true},{inline:'u',remove:'all'}],strikethrough:[{inline:'span',styles:{textDecoration:'line-through'},exact:true},{inline:'strike',remove:'all'}],forecolor:{inline:'span',styles:{color:'%value'},wrap_links:false},hilitecolor:{inline:'span',styles:{backgroundColor:'%value'},wrap_links:false},fontname:{inline:'span',styles:{fontFamily:'%value'}},fontsize:{inline:'span',styles:{fontSize:'%value'}},fontsize_class:{inline:'span',attributes:{'class':'%value'}},blockquote:{block:'blockquote',wrapper:1,remove:'all'},subscript:{inline:'sub'},superscript:{inline:'sup'},link:{inline:'a',selector:'a',remove:'all',split:true,deep:true,onmatch:function(){return true;},onformat:function(elm,fmt,vars){each(vars,function(value,key){dom.setAttrib(elm,key,value);});}},removeformat:[{selector:'b,strong,em,i,font,u,strike',remove:'all',split:true,expand:false,block_expand:true,deep:true},{selector:'span',attributes:['style','class'],remove:'empty',split:true,expand:false,deep:true},{selector:'*',attributes:['style','class'],split:false,expand:false,deep:true}]});each('p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp'.split(/\s/),function(name){register(name,{block:name,remove:'all'});});register(ed.settings.formats);} +function addKeyboardShortcuts(){ed.addShortcut('ctrl+b','bold_desc','Bold');ed.addShortcut('ctrl+i','italic_desc','Italic');ed.addShortcut('ctrl+u','underline_desc','Underline');for(var i=1;i<=6;i++){ed.addShortcut('ctrl+'+i,'',['FormatBlock',false,'h'+i]);} +ed.addShortcut('ctrl+7','',['FormatBlock',false,'p']);ed.addShortcut('ctrl+8','',['FormatBlock',false,'div']);ed.addShortcut('ctrl+9','',['FormatBlock',false,'address']);} +function get(name){return name?formats[name]:formats;} +function register(name,format){if(name){if(typeof(name)!=='string'){each(name,function(format,name){register(name,format);});}else{format=format.length?format:[format];each(format,function(format){if(format.deep===undef){format.deep=!format.selector;} +if(format.split===undef){format.split=!format.selector||format.inline;} +if(format.remove===undef&&format.selector&&!format.inline){format.remove='none';} +if(format.selector&&format.inline){format.mixed=true;format.block_expand=true;} +if(typeof(format.classes)==='string'){format.classes=format.classes.split(/\s+/);}});formats[name]=format;}}} +var getTextDecoration=function(node){var decoration;ed.dom.getParent(node,function(n){decoration=ed.dom.getStyle(n,'text-decoration');return decoration&&decoration!=='none';});return decoration;};var processUnderlineAndColor=function(node){var textDecoration;if(node.nodeType===1&&node.parentNode&&node.parentNode.nodeType===1){textDecoration=getTextDecoration(node.parentNode);if(ed.dom.getStyle(node,'color')&&textDecoration){ed.dom.setStyle(node,'text-decoration',textDecoration);}else if(ed.dom.getStyle(node,'textdecoration')===textDecoration){ed.dom.setStyle(node,'text-decoration',null);}}};function apply(name,vars,node){var formatList=get(name),format=formatList[0],bookmark,rng,isCollapsed=selection.isCollapsed();function setElementFormat(elm,fmt){fmt=fmt||format;if(elm){if(fmt.onformat){fmt.onformat(elm,fmt,vars,node);} +each(fmt.styles,function(value,name){dom.setStyle(elm,name,replaceVars(value,vars));});each(fmt.attributes,function(value,name){dom.setAttrib(elm,name,replaceVars(value,vars));});each(fmt.classes,function(value){value=replaceVars(value,vars);if(!dom.hasClass(elm,value)){dom.addClass(elm,value);}});}} +function adjustSelectionToVisibleSelection(){function findSelectionEnd(start,end){var walker=new TreeWalker(end);for(node=walker.current();node;node=walker.prev()){if(node.childNodes.length>1||node==start||node.tagName=='BR'){return node;}}} +var rng=ed.selection.getRng();var start=rng.startContainer;var end=rng.endContainer;if(start!=end&&rng.endOffset===0){var newEnd=findSelectionEnd(start,end);var endOffset=newEnd.nodeType==3?newEnd.length:newEnd.childNodes.length;rng.setEnd(newEnd,endOffset);} return rng;} -function applyStyleToList(node,bookmark,wrapElm,newWrappers,process){var nodes=[],listIndex=-1,list,startIndex=-1,endIndex=-1,currentWrapElm;each(node.childNodes,function(n,index){if(n.nodeName==="UL"||n.nodeName==="OL"){listIndex=index;list=n;return false;}});each(node.childNodes,function(n,index){if(n.nodeName==="SPAN"&&dom.getAttrib(n,"data-mce-type")=="bookmark"){if(n.id==bookmark.id+"_start"){startIndex=index;}else if(n.id==bookmark.id+"_end"){endIndex=index;}}});if(listIndex<=0||(startIndexlistIndex)){each(tinymce.grep(node.childNodes),process);return 0;}else{currentWrapElm=dom.clone(wrapElm,FALSE);each(tinymce.grep(node.childNodes),function(n,index){if((startIndexlistIndex&&index>listIndex)){nodes.push(n);n.parentNode.removeChild(n);}});if(startIndexlistIndex){node.insertBefore(currentWrapElm,list.nextSibling);} -newWrappers.push(currentWrapElm);each(nodes,function(node){currentWrapElm.appendChild(node);});return currentWrapElm;}};function applyRngStyle(rng,bookmark,node_specific){var newWrappers=[],wrapName,wrapElm,contentEditable=true;wrapName=format.inline||format.block;wrapElm=dom.create(wrapName);setElementFormat(wrapElm);rangeUtils.walk(rng,function(nodes){var currentWrapElm;function process(node){var nodeName,parentName,found,hasContentEditableState,lastContentEditable;lastContentEditable=contentEditable;nodeName=node.nodeName.toLowerCase();parentName=node.parentNode.nodeName.toLowerCase();if(node.nodeType===1&&getContentEditable(node)){lastContentEditable=contentEditable;contentEditable=getContentEditable(node)==="true";hasContentEditableState=true;} -if(isEq(nodeName,'br')){currentWrapElm=0;if(format.block) -dom.remove(node);return;} +function findNestedList(node){var listIndex=-1;var list;each(node.childNodes,function(n,index){if(n.nodeName==="UL"||n.nodeName==="OL"){listIndex=index;list=n;return false;}});return{listIndex:listIndex,list:list};} +function getBookmarkIndex(node,bookmark){var startIndex=-1;var endIndex=-1;each(node.childNodes,function(n,index){if(n.nodeName==="SPAN"&&dom.getAttrib(n,"data-mce-type")=="bookmark"){if(n.id==bookmark.id+"_start"){startIndex=index;}else if(n.id==bookmark.id+"_end"){endIndex=index;}}});return{startIndex:startIndex,endIndex:endIndex};} +function applyRngStyle(rng,bookmark,node_specific){var newWrappers=[],wrapName,wrapElm,contentEditable=true;wrapName=format.inline||format.block;wrapElm=dom.create(wrapName);setElementFormat(wrapElm);rangeUtils.walk(rng,function(nodes){var currentWrapElm;function process(node){var nodeName,parentName,found,hasContentEditableState,lastContentEditable;lastContentEditable=contentEditable;nodeName=node.nodeName.toLowerCase();parentName=node.parentNode.nodeName.toLowerCase();if(node.nodeType===1&&getContentEditable(node)){lastContentEditable=contentEditable;contentEditable=getContentEditable(node)==="true";hasContentEditableState=true;} +if(isEq(nodeName,'br')){currentWrapElm=0;if(format.block){dom.remove(node);} +return;} if(format.wrapper&&matchNode(node,name,vars)){currentWrapElm=0;return;} if(contentEditable&&!hasContentEditableState&&format.block&&!format.wrapper&&isTextBlock(nodeName)){node=dom.rename(node,wrapName);setElementFormat(node);newWrappers.push(node);currentWrapElm=0;return;} if(format.selector){each(formatList,function(format){if('collapsed'in format&&format.collapsed!==isCollapsed){return;} if(dom.is(node,format.selector)&&!isCaretNode(node)){setElementFormat(node,format);found=true;}});if(!format.inline||found){currentWrapElm=0;return;}} -if(contentEditable&&!hasContentEditableState&&isValid(wrapName,nodeName)&&isValid(parentName,wrapName)&&!(!node_specific&&node.nodeType===3&&node.nodeValue.length===1&&node.nodeValue.charCodeAt(0)===65279)&&!isCaretNode(node)){if(!currentWrapElm){currentWrapElm=dom.clone(wrapElm,FALSE);node.parentNode.insertBefore(currentWrapElm,node);newWrappers.push(currentWrapElm);} -currentWrapElm.appendChild(node);}else if(nodeName=='li'&&bookmark){currentWrapElm=applyStyleToList(node,bookmark,wrapElm,newWrappers,process);}else{currentWrapElm=0;each(tinymce.grep(node.childNodes),process);if(hasContentEditableState){contentEditable=lastContentEditable;} -currentWrapElm=0;}};each(nodes,process);});if(format.wrap_links===false){each(newWrappers,function(node){function process(node){var i,currentWrapElm,children;if(node.nodeName==='A'){currentWrapElm=dom.clone(wrapElm,FALSE);newWrappers.push(currentWrapElm);children=tinymce.grep(node.childNodes);for(i=0;i1||!isBlock(node))&&childCount===0){dom.remove(node,1);return;} -if(format.inline||format.wrapper){if(!format.exact&&childCount===1) -node=mergeStyles(node);each(formatList,function(format){each(dom.select(format.inline,node),function(child){var parent;if(format.wrap_links===false){parent=child.parentNode;do{if(parent.nodeName==='A') -return;}while(parent=parent.parentNode);} +function isZWNBS(node){return node.nodeType===3&&node.nodeValue.length===1&&node.nodeValue.charCodeAt(0)===65279;} +if(contentEditable&&!hasContentEditableState&&isValidChild(wrapName,nodeName)&&isValidChild(parentName,wrapName)&&!(!node_specific&&isZWNBS(node))&&!isCaretNode(node)&&(!format.inline||!isBlock(node))){if(!currentWrapElm){currentWrapElm=dom.clone(wrapElm,FALSE);node.parentNode.insertBefore(currentWrapElm,node);newWrappers.push(currentWrapElm);} +currentWrapElm.appendChild(node);}else{currentWrapElm=0;each(tinymce.grep(node.childNodes),process);if(hasContentEditableState){contentEditable=lastContentEditable;} +currentWrapElm=0;}} +each(nodes,process);});if(format.wrap_links===false){each(newWrappers,function(node){function process(node){var i,currentWrapElm,children;if(node.nodeName==='A'){currentWrapElm=dom.clone(wrapElm,FALSE);newWrappers.push(currentWrapElm);children=tinymce.grep(node.childNodes);for(i=0;i1||!isBlock(node))&&childCount===0){dom.remove(node,1);return;} +if(format.inline||format.wrapper){if(!format.exact&&childCount===1){node=mergeStyles(node);} +each(formatList,function(format){each(dom.select(format.inline,node),function(child){var parent;if(format.wrap_links===false){parent=child.parentNode;do{if(parent.nodeName==='A'){return;} +parent=parent.parentNode;}while(parent);} removeFormat(format,vars,child,format.exact?child:null);});});if(matchNode(node.parentNode,name,vars)){dom.remove(node,1);node=0;return TRUE;} if(format.merge_with_parents){dom.getParent(node.parentNode,function(parent){if(matchNode(parent,name,vars)){dom.remove(node,1);node=0;return TRUE;}});} -if(node&&format.merge_siblings!==false){node=mergeSiblings(getNonWhiteSpaceSibling(node),node);node=mergeSiblings(node,getNonWhiteSpaceSibling(node,TRUE));}}});};if(format){if(node){if(node.nodeType){rng=dom.createRng();rng.setStartBefore(node);rng.setEndAfter(node);applyRngStyle(expandRng(rng,formatList),null,true);}else{applyRngStyle(node,null,true);}}else{if(!isCollapsed||!format.inline||dom.select('td.mceSelected,th.mceSelected').length){var curSelNode=ed.selection.getNode();if(!forcedRootBlock&&formatList[0].defaultBlock&&!dom.getParent(curSelNode,dom.isBlock)){apply(formatList[0].defaultBlock);} +if(node&&format.merge_siblings!==false){node=mergeSiblings(getNonWhiteSpaceSibling(node),node);node=mergeSiblings(node,getNonWhiteSpaceSibling(node,TRUE));}}});} +if(format){if(node){if(node.nodeType){rng=dom.createRng();rng.setStartBefore(node);rng.setEndAfter(node);applyRngStyle(expandRng(rng,formatList),null,true);}else{applyRngStyle(node,null,true);}}else{if(!isCollapsed||!format.inline||dom.select('td.mceSelected,th.mceSelected').length){var curSelNode=ed.selection.getNode();if(!forcedRootBlock&&formatList[0].defaultBlock&&!dom.getParent(curSelNode,dom.isBlock)){apply(formatList[0].defaultBlock);} ed.selection.setRng(adjustSelectionToVisibleSelection());bookmark=selection.getBookmark();applyRngStyle(expandRng(selection.getRng(TRUE),formatList),bookmark);if(format.styles&&(format.styles.color||format.styles.textDecoration)){tinymce.walk(curSelNode,processUnderlineAndColor,'childNodes');processUnderlineAndColor(curSelNode);} -selection.moveToBookmark(bookmark);moveStart(selection.getRng(TRUE));ed.nodeChanged();}else -performCaretAction('apply',name,vars);}}};function remove(name,vars,node){var formatList=get(name),format=formatList[0],bookmark,i,rng,contentEditable=true;function process(node){var children,i,l,localContentEditable,lastContentEditable,hasContentEditableState;if(node.nodeType===1&&getContentEditable(node)){lastContentEditable=contentEditable;contentEditable=getContentEditable(node)==="true";hasContentEditableState=true;} -children=tinymce.grep(node.childNodes);if(contentEditable&&!hasContentEditableState){for(i=0,l=formatList.length;i=0;x--){selector=formatList[x].selector;if(!selector) -return TRUE;for(i=parents.length-1;i>=0;i--){if(dom.is(parents[i],selector)) -return TRUE;}}} -return FALSE;};function formatChanged(formats,callback,similar){var currentFormats;if(!formatChangeData){formatChangeData={};currentFormats={};ed.onNodeChange.addToTop(function(ed,cm,node){var parents=getParents(node),matchedFormats={};each(formatChangeData,function(callbacks,format){each(parents,function(node){if(matchNode(node,format,{},callbacks.similar)){if(!currentFormats[format]){each(callbacks,function(callback){callback(true,{node:node,format:format,parents:parents});});currentFormats[format]=callbacks;} +ed.nodeChanged();}else{performCaretAction('remove',name,vars);}} +function toggle(name,vars,node){var fmt=get(name);if(match(name,vars,node)&&(!('toggle'in fmt[0])||fmt[0].toggle)){remove(name,vars,node);}else{apply(name,vars,node);}} +function matchNode(node,name,vars,similar){var formatList=get(name),format,i,classes;function matchItems(node,format,item_name){var key,value,items=format[item_name],i;if(format.onmatch){return format.onmatch(node,format,item_name);} +if(items){if(items.length===undef){for(key in items){if(items.hasOwnProperty(key)){if(item_name==='attributes'){value=dom.getAttrib(node,key);}else{value=getStyle(node,key);} +if(similar&&!value&&!format.exact){return;} +if((!similar||format.exact)&&!isEq(value,replaceVars(items[key],vars))){return;}}}}else{for(i=0;i=0;x--){selector=formatList[x].selector;if(!selector){return TRUE;} +for(i=parents.length-1;i>=0;i--){if(dom.is(parents[i],selector)){return TRUE;}}}} +return FALSE;} +function formatChanged(formats,callback,similar){var currentFormats;if(!formatChangeData){formatChangeData={};currentFormats={};ed.onNodeChange.addToTop(function(ed,cm,node){var parents=getParents(node),matchedFormats={};each(formatChangeData,function(callbacks,format){each(parents,function(node){if(matchNode(node,format,{},callbacks.similar)){if(!currentFormats[format]){each(callbacks,function(callback){callback(true,{node:node,format:format,parents:parents});});currentFormats[format]=callbacks;} matchedFormats[format]=callbacks;return false;}});});each(currentFormats,function(callbacks,format){if(!matchedFormats[format]){delete currentFormats[format];each(callbacks,function(callback){callback(false,{node:node,format:format,parents:parents});});}});});} each(formats.split(','),function(format){if(!formatChangeData[format]){formatChangeData[format]=[];formatChangeData[format].similar=similar;} -formatChangeData[format].push(callback);});return this;};tinymce.extend(this,{get:get,register:register,apply:apply,remove:remove,toggle:toggle,match:match,matchAll:matchAll,matchNode:matchNode,canApply:canApply,formatChanged:formatChanged});defaultFormats();addKeyboardShortcuts();function matchName(node,format){if(isEq(node,format.inline)) -return TRUE;if(isEq(node,format.block)) -return TRUE;if(format.selector) -return dom.is(node,format.selector);};function isEq(str1,str2){str1=str1||'';str2=str2||'';str1=''+(str1.nodeName||str1);str2=''+(str2.nodeName||str2);return str1.toLowerCase()==str2.toLowerCase();};function getStyle(node,name){var styleVal=dom.getStyle(node,name);if(name=='color'||name=='backgroundColor') -styleVal=dom.toHex(styleVal);if(name=='fontWeight'&&styleVal==700) -styleVal='bold';return''+styleVal;};function replaceVars(value,vars){if(typeof(value)!="string") -value=value(vars);else if(vars){value=value.replace(/%(\w+)/g,function(str,name){return vars[name]||str;});} -return value;};function isWhiteSpaceNode(node){return node&&node.nodeType===3&&/^([\t \r\n]+|)$/.test(node.nodeValue);};function wrap(node,name,attrs){var wrapper=dom.create(name,attrs);node.parentNode.insertBefore(wrapper,node);wrapper.appendChild(node);return wrapper;};function expandRng(rng,format,remove){var sibling,lastIdx,leaf,endPoint,startContainer=rng.startContainer,startOffset=rng.startOffset,endContainer=rng.endContainer,endOffset=rng.endOffset;function findParentContainer(start){var container,parent,child,sibling,siblingName,root;container=parent=start?startContainer:endContainer;siblingName=start?'previousSibling':'nextSibling';root=dom.getRoot();function isBogusBr(node){return node.nodeName=="BR"&&node.getAttribute('data-mce-bogus')&&!node.nextSibling;};if(container.nodeType==3&&!isWhiteSpaceNode(container)){if(start?startOffset>0:endOffset0:endOffsetlastIdx?lastIdx:startOffset];if(startContainer.nodeType==3) -startOffset=0;} -if(endContainer.nodeType==1&&endContainer.hasChildNodes()){lastIdx=endContainer.childNodes.length-1;endContainer=endContainer.childNodes[endOffset>lastIdx?lastIdx:endOffset-1];if(endContainer.nodeType==3) -endOffset=endContainer.nodeValue.length;} +if(startContainer.nodeType==1&&startContainer.hasChildNodes()){lastIdx=startContainer.childNodes.length-1;startContainer=startContainer.childNodes[startOffset>lastIdx?lastIdx:startOffset];if(startContainer&&startContainer.nodeType==3){startOffset=0;}} +if(endContainer.nodeType==1&&endContainer.hasChildNodes()){lastIdx=endContainer.childNodes.length-1;endContainer=endContainer.childNodes[endOffset>lastIdx?lastIdx:endOffset-1];if(endContainer&&endContainer.nodeType==3){endOffset=endContainer.nodeValue.length;}} function findParentContentEditable(node){var parent=node;while(parent){if(parent.nodeType===1&&getContentEditable(parent)){return getContentEditable(parent)==="false"?parent:node;} parent=parent.parentNode;} -return node;};function findWordEndPoint(container,offset,start){var walker,node,pos,lastTextNode;function findSpace(node,offset){var pos,pos2,str=node.nodeValue;if(typeof(offset)=="undefined"){offset=start?str.length:0;} +return node;} +function findWordEndPoint(container,offset,start){var walker,node,pos,lastTextNode;function findSpace(node,offset){var pos,pos2,str=node.nodeValue;if(typeof(offset)=="undefined"){offset=start?str.length:0;} if(start){pos=str.lastIndexOf(' ',offset);pos2=str.lastIndexOf('\u00a0',offset);pos=pos>pos2?pos:pos2;if(pos!==-1&&!remove){pos++;}}else{pos=str.indexOf(' ',offset);pos2=str.indexOf('\u00a0',offset);pos=pos!==-1&&(pos2===-1||pos0&&leaf.node.nodeType===3&&leaf.node.nodeValue.charAt(leaf.offset-1)===' '){if(leaf.offset>1){endContainer=leaf.node;endContainer.splitText(leaf.offset-1);}}}} +leaf=findLeaf(endContainer,endOffset);if(leaf.node){while(leaf.node&&leaf.offset===0&&leaf.node.previousSibling){leaf=findLeaf(leaf.node.previousSibling);} +if(leaf.node&&leaf.offset>0&&leaf.node.nodeType===3&&leaf.node.nodeValue.charAt(leaf.offset-1)===' '){if(leaf.offset>1){endContainer=leaf.node;endContainer.splitText(leaf.offset-1);}}}} if(format[0].inline||format[0].block_expand){if(!format[0].inline||(startContainer.nodeType!=3||startOffset===0)){startContainer=findParentContainer(true);} if(!format[0].inline||(endContainer.nodeType!=3||endOffset===endContainer.nodeValue.length)){endContainer=findParentContainer();}} if(format[0].selector&&format[0].expand!==FALSE&&!format[0].inline){startContainer=findSelectorEndPoint(startContainer,'previousSibling');endContainer=findSelectorEndPoint(endContainer,'nextSibling');} -if(format[0].block||format[0].selector){startContainer=findBlockEndPoint(startContainer,'previousSibling');endContainer=findBlockEndPoint(endContainer,'nextSibling');if(format[0].block){if(!isBlock(startContainer)) -startContainer=findParentContainer(true);if(!isBlock(endContainer)) -endContainer=findParentContainer();}} +if(format[0].block||format[0].selector){startContainer=findBlockEndPoint(startContainer,'previousSibling');endContainer=findBlockEndPoint(endContainer,'nextSibling');if(format[0].block){if(!isBlock(startContainer)){startContainer=findParentContainer(true);} +if(!isBlock(endContainer)){endContainer=findParentContainer();}}} if(startContainer.nodeType==1){startOffset=nodeIndex(startContainer);startContainer=startContainer.parentNode;} if(endContainer.nodeType==1){endOffset=nodeIndex(endContainer)+1;endContainer=endContainer.parentNode;} return{startContainer:startContainer,startOffset:startOffset,endContainer:endContainer,endOffset:endOffset};} -function removeFormat(format,vars,node,compare_node){var i,attrs,stylesModified;if(!matchName(node,format)) -return FALSE;if(format.remove!='all'){each(format.styles,function(value,name){value=replaceVars(value,vars);if(typeof(name)==='number'){name=value;compare_node=0;} -if(!compare_node||isEq(getStyle(compare_node,name),value)) -dom.setStyle(node,name,'');stylesModified=1;});if(stylesModified&&dom.getAttrib(node,'style')==''){node.removeAttribute('style');node.removeAttribute('data-mce-style');} +function removeFormat(format,vars,node,compare_node){var i,attrs,stylesModified;if(!matchName(node,format)){return FALSE;} +if(format.remove!='all'){each(format.styles,function(value,name){value=replaceVars(value,vars);if(typeof(name)==='number'){name=value;compare_node=0;} +if(!compare_node||isEq(getStyle(compare_node,name),value)){dom.setStyle(node,name,'');} +stylesModified=1;});if(stylesModified&&dom.getAttrib(node,'style')===''){node.removeAttribute('style');node.removeAttribute('data-mce-style');} each(format.attributes,function(value,name){var valueOut;value=replaceVars(value,vars);if(typeof(name)==='number'){name=value;compare_node=0;} -if(!compare_node||isEq(dom.getAttrib(compare_node,name),value)){if(name=='class'){value=dom.getAttrib(node,name);if(value){valueOut='';each(value.split(/\s+/),function(cls){if(/mce\w+/.test(cls)) -valueOut+=(valueOut?' ':'')+cls;});if(valueOut){dom.setAttrib(node,name,valueOut);return;}}} -if(name=="class") -node.removeAttribute('className');if(MCE_ATTR_RE.test(name)) -node.removeAttribute('data-mce-'+name);node.removeAttribute(name);}});each(format.classes,function(value){value=replaceVars(value,vars);if(!compare_node||dom.hasClass(compare_node,value)) -dom.removeClass(node,value);});attrs=dom.getAttribs(node);for(i=0;ilastIdx?lastIdx:offset];} +return next;} +function getContainer(rng,start){var container,offset,lastIdx;container=rng[start?'startContainer':'endContainer'];offset=rng[start?'startOffset':'endOffset'];if(container.nodeType==1){lastIdx=container.childNodes.length-1;if(!start&&offset){offset--;} +container=container.childNodes[offset>lastIdx?lastIdx:offset];} if(container.nodeType===3&&start&&offset>=container.nodeValue.length){container=new TreeWalker(container,ed.getBody()).next()||container;} if(container.nodeType===3&&!start&&offset===0){container=new TreeWalker(container,ed.getBody()).prev()||container;} -return container;};function performCaretAction(type,name,vars){var caretContainerId='_mce_caret',debug=ed.settings.caret_debug;function createCaretContainer(fill){var caretContainer=dom.create('span',{id:caretContainerId,'data-mce-bogus':true,style:debug?'color:red':''});if(fill){caretContainer.appendChild(ed.getDoc().createTextNode(INVISIBLE_CHAR));} -return caretContainer;};function isCaretContainerEmpty(node,nodes){while(node){if((node.nodeType===3&&node.nodeValue!==INVISIBLE_CHAR)||node.childNodes.length>1){return false;} +return container;} +function performCaretAction(type,name,vars){var caretContainerId='_mce_caret',debug=ed.settings.caret_debug;function createCaretContainer(fill){var caretContainer=dom.create('span',{id:caretContainerId,'data-mce-bogus':true,style:debug?'color:red':''});if(fill){caretContainer.appendChild(ed.getDoc().createTextNode(INVISIBLE_CHAR));} +return caretContainer;} +function isCaretContainerEmpty(node,nodes){while(node){if((node.nodeType===3&&node.nodeValue!==INVISIBLE_CHAR)||node.childNodes.length>1){return false;} if(nodes&&node.nodeType===1){nodes.push(node);} node=node.firstChild;} -return true;};function getParentCaretContainer(node){while(node){if(node.id===caretContainerId){return node;} -node=node.parentNode;}};function findFirstTextNode(node){var walker;if(node){walker=new TreeWalker(node,node);for(node=walker.current();node;node=walker.next()){if(node.nodeType===3){return node;}}}};function removeCaretContainer(node,move_caret){var child,rng;if(!node){node=getParentCaretContainer(selection.getStart());if(!node){while(node=dom.get(caretContainerId)){removeCaretContainer(node,false);}}}else{rng=selection.getRng(true);if(isCaretContainerEmpty(node)){if(move_caret!==false){rng.setStartBefore(node);rng.setEndBefore(node);} +return true;} +function getParentCaretContainer(node){while(node){if(node.id===caretContainerId){return node;} +node=node.parentNode;}} +function findFirstTextNode(node){var walker;if(node){walker=new TreeWalker(node,node);for(node=walker.current();node;node=walker.next()){if(node.nodeType===3){return node;}}}} +function removeCaretContainer(node,move_caret){var child,rng;if(!node){node=getParentCaretContainer(selection.getStart());if(!node){while(node=dom.get(caretContainerId)){removeCaretContainer(node,false);}}}else{rng=selection.getRng(true);if(isCaretContainerEmpty(node)){if(move_caret!==false){rng.setStartBefore(node);rng.setEndBefore(node);} dom.remove(node);}else{child=findFirstTextNode(node);if(child.nodeValue.charAt(0)===INVISIBLE_CHAR){child=child.deleteData(0,1);} dom.remove(node,1);} -selection.setRng(rng);}};function applyCaretFormat(){var rng,caretContainer,textNode,offset,bookmark,container,text;rng=selection.getRng(true);offset=rng.startOffset;container=rng.startContainer;text=container.nodeValue;caretContainer=getParentCaretContainer(selection.getStart());if(caretContainer){textNode=findFirstTextNode(caretContainer);} -if(text&&offset>0&&offset0&&offset=0;i--){node.appendChild(dom.clone(parents[i],false));node=node.firstChild;} -node.appendChild(dom.doc.createTextNode(INVISIBLE_CHAR));node=node.firstChild;dom.insertAfter(caretContainer,formatNode);selection.setCursorLocation(node,1);}};function unmarkBogusCaretParents(){var i,caretContainer,node;caretContainer=getParentCaretContainer(selection.getStart());if(caretContainer&&!dom.isEmpty(caretContainer)){tinymce.walk(caretContainer,function(node){if(node.nodeType==1&&node.id!==caretContainerId&&!dom.isEmpty(node)){dom.setAttrib(node,'data-mce-bogus',null);}},'childNodes');}};if(!self._hasCaretEvents){ed.onBeforeGetContent.addToTop(function(){var nodes=[],i;if(isCaretContainerEmpty(getParentCaretContainer(selection.getStart()),nodes)){i=nodes.length;while(i--){dom.setAttrib(nodes[i],'data-mce-bogus','1');}}});tinymce.each('onMouseUp onKeyUp'.split(' '),function(name){ed[name].addToTop(function(){removeCaretContainer();unmarkBogusCaretParents();});});ed.onKeyDown.addToTop(function(ed,e){var keyCode=e.keyCode;if(keyCode==8||keyCode==37||keyCode==39){removeCaretContainer(getParentCaretContainer(selection.getStart()));} -unmarkBogusCaretParents();});selection.onSetContent.add(unmarkBogusCaretParents);self._hasCaretEvents=true;} -if(type=="apply"){applyCaretFormat();}else{removeCaretFormat();}};function moveStart(rng){var container=rng.startContainer,offset=rng.startOffset,isAtEndOfText,walker,node,nodes,tmpNode;if(container.nodeType==3&&offset>=container.nodeValue.length){offset=nodeIndex(container);container=container.parentNode;isAtEndOfText=true;} -if(container.nodeType==1){nodes=container.childNodes;container=nodes[Math.min(offset,nodes.length-1)];walker=new TreeWalker(container,dom.getParent(container,dom.isBlock));if(offset>nodes.length-1||isAtEndOfText) -walker.next();for(node=walker.current();node;node=walker.next()){if(node.nodeType==3&&!isWhiteSpaceNode(node)){tmpNode=dom.create('a',null,INVISIBLE_CHAR);node.parentNode.insertBefore(tmpNode,node);rng.setStart(node,0);selection.setRng(rng);dom.remove(tmpNode);return;}}}};};})(tinymce);tinymce.onAddEditor.add(function(tinymce,ed){var filters,fontSizes,dom,settings=ed.settings;function replaceWithSpan(node,styles){tinymce.each(styles,function(value,name){if(value) -dom.setStyle(node,name,value);});dom.rename(node,'span');};function convert(editor,params){dom=editor.dom;if(settings.convert_fonts_to_spans){tinymce.each(dom.select('font,u,strike',params.node),function(node){filters[node.nodeName.toLowerCase()](ed.dom,node);});}};if(settings.inline_styles){fontSizes=tinymce.explode(settings.font_size_legacy_values);filters={font:function(dom,node){replaceWithSpan(node,{backgroundColor:node.style.backgroundColor,color:node.color,fontFamily:node.face,fontSize:fontSizes[parseInt(node.size,10)-1]});},u:function(dom,node){replaceWithSpan(node,{textDecoration:'underline'});},strike:function(dom,node){replaceWithSpan(node,{textDecoration:'line-through'});}};ed.onPreProcess.add(convert);ed.onSetContent.add(convert);ed.onInit.add(function(){ed.selection.onSetContent.add(convert);});}});(function(tinymce){var TreeWalker=tinymce.dom.TreeWalker;tinymce.EnterKey=function(editor){var dom=editor.dom,selection=editor.selection,settings=editor.settings,undoManager=editor.undoManager,nonEmptyElementsMap=editor.schema.getNonEmptyElements();function handleEnterKey(evt){var rng=selection.getRng(true),tmpRng,editableRoot,container,offset,parentBlock,documentMode,shiftKey,newBlock,fragment,containerBlock,parentBlockName,containerBlockName,newBlockName,isAfterLastNodeInContainer;function canSplitBlock(node){return node&&dom.isBlock(node)&&!/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName)&&!/^(fixed|absolute)/i.test(node.style.position)&&dom.getContentEditable(node)!=="true";};function renderBlockOnIE(block){var oldRng;if(tinymce.isIE&&dom.isBlock(block)){oldRng=selection.getRng();block.appendChild(dom.create('span',null,'\u00a0'));selection.select(block);block.lastChild.outerHTML='';selection.setRng(oldRng);}};function trimInlineElementsOnLeftSideOfBlock(block){var node=block,firstChilds=[],i;while(node=node.firstChild){if(dom.isBlock(node)){return;} +node.appendChild(dom.doc.createTextNode(INVISIBLE_CHAR));node=node.firstChild;var block=dom.getParent(formatNode,isTextBlock);if(block&&dom.isEmpty(block)){formatNode.parentNode.replaceChild(caretContainer,formatNode);}else{dom.insertAfter(caretContainer,formatNode);} +selection.setCursorLocation(node,1);if(dom.isEmpty(formatNode)){dom.remove(formatNode);}}} +function unmarkBogusCaretParents(){var caretContainer;caretContainer=getParentCaretContainer(selection.getStart());if(caretContainer&&!dom.isEmpty(caretContainer)){tinymce.walk(caretContainer,function(node){if(node.nodeType==1&&node.id!==caretContainerId&&!dom.isEmpty(node)){dom.setAttrib(node,'data-mce-bogus',null);}},'childNodes');}} +if(!ed._hasCaretEvents){ed.onBeforeGetContent.addToTop(function(){var nodes=[],i;if(isCaretContainerEmpty(getParentCaretContainer(selection.getStart()),nodes)){i=nodes.length;while(i--){dom.setAttrib(nodes[i],'data-mce-bogus','1');}}});tinymce.each('onMouseUp onKeyUp'.split(' '),function(name){ed[name].addToTop(function(){removeCaretContainer();unmarkBogusCaretParents();});});ed.onKeyDown.addToTop(function(ed,e){var keyCode=e.keyCode;if(keyCode==8||keyCode==37||keyCode==39){removeCaretContainer(getParentCaretContainer(selection.getStart()));} +unmarkBogusCaretParents();});selection.onSetContent.add(unmarkBogusCaretParents);ed._hasCaretEvents=true;} +if(type=="apply"){applyCaretFormat();}else{removeCaretFormat();}} +function moveStart(rng){var container=rng.startContainer,offset=rng.startOffset,isAtEndOfText,walker,node,nodes,tmpNode;if(container.nodeType==3&&offset>=container.nodeValue.length){offset=nodeIndex(container);container=container.parentNode;isAtEndOfText=true;} +if(container.nodeType==1){nodes=container.childNodes;container=nodes[Math.min(offset,nodes.length-1)];walker=new TreeWalker(container,dom.getParent(container,dom.isBlock));if(offset>nodes.length-1||isAtEndOfText){walker.next();} +for(node=walker.current();node;node=walker.next()){if(node.nodeType==3&&!isWhiteSpaceNode(node)){tmpNode=dom.create('a',null,INVISIBLE_CHAR);node.parentNode.insertBefore(tmpNode,node);rng.setStart(node,0);selection.setRng(rng);dom.remove(tmpNode);return;}}}}};})(tinymce);tinymce.onAddEditor.add(function(tinymce,ed){var filters,fontSizes,dom,settings=ed.settings;function replaceWithSpan(node,styles){tinymce.each(styles,function(value,name){if(value) +dom.setStyle(node,name,value);});dom.rename(node,'span');};function convert(editor,params){dom=editor.dom;if(settings.convert_fonts_to_spans){tinymce.each(dom.select('font,u,strike',params.node),function(node){filters[node.nodeName.toLowerCase()](ed.dom,node);});}};if(settings.inline_styles){fontSizes=tinymce.explode(settings.font_size_legacy_values);filters={font:function(dom,node){replaceWithSpan(node,{backgroundColor:node.style.backgroundColor,color:node.color,fontFamily:node.face,fontSize:fontSizes[parseInt(node.size,10)-1]});},u:function(dom,node){replaceWithSpan(node,{textDecoration:'underline'});},strike:function(dom,node){replaceWithSpan(node,{textDecoration:'line-through'});}};ed.onPreProcess.add(convert);ed.onSetContent.add(convert);ed.onInit.add(function(){ed.selection.onSetContent.add(convert);});}});(function(tinymce){var TreeWalker=tinymce.dom.TreeWalker;tinymce.EnterKey=function(editor){var dom=editor.dom,selection=editor.selection,settings=editor.settings,undoManager=editor.undoManager,nonEmptyElementsMap=editor.schema.getNonEmptyElements();function handleEnterKey(evt){var rng=selection.getRng(true),tmpRng,editableRoot,container,offset,parentBlock,documentMode,shiftKey,newBlock,fragment,containerBlock,parentBlockName,containerBlockName,newBlockName,isAfterLastNodeInContainer;function canSplitBlock(node){return node&&dom.isBlock(node)&&!/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName)&&!/^(fixed|absolute)/i.test(node.style.position)&&dom.getContentEditable(node)!=="true";};function renderBlockOnIE(block){var oldRng;if(tinymce.isIE&&!tinymce.isIE11&&dom.isBlock(block)){oldRng=selection.getRng();block.appendChild(dom.create('span',null,'\u00a0'));selection.select(block);block.lastChild.outerHTML='';selection.setRng(oldRng);}};function trimInlineElementsOnLeftSideOfBlock(block){var node=block,firstChilds=[],i;while(node=node.firstChild){if(dom.isBlock(node)){return;} if(node.nodeType==1&&!nonEmptyElementsMap[node.nodeName.toLowerCase()]){firstChilds.push(node);}} i=firstChilds.length;while(i--){node=firstChilds[i];if(!node.hasChildNodes()||(node.firstChild==node.lastChild&&node.firstChild.nodeValue==='')){dom.remove(node);}else{if(node.nodeName=="A"&&(node.innerText||node.textContent)===' '){dom.remove(node);}}}};function moveToCaretPosition(root){var walker,node,rng,y,viewPort,lastNode=root,tempElm;rng=dom.createRng();if(root.hasChildNodes()){walker=new TreeWalker(root,root);while(node=walker.current()){if(node.nodeType==3){rng.setStart(node,0);rng.setEnd(node,0);break;} if(nonEmptyElementsMap[node.nodeName.toLowerCase()]){rng.setStartBefore(node);rng.setEndBefore(node);break;} @@ -3200,7 +3225,7 @@ if(!node){rng.setStart(lastNode,0);rng.setEnd(lastNode,0);}}else{if(root.nodeNam rng.setStartBefore(root);rng.setEndBefore(root);}else{rng.setStartAfter(root);rng.setEndAfter(root);}}else{rng.setStart(root,0);rng.setEnd(root,0);}} selection.setRng(rng);dom.remove(tempElm);viewPort=dom.getViewPort(editor.getWin());y=dom.getPos(root).y;if(yviewPort.y+viewPort.h){editor.getWin().scrollTo(0,y0:offset=container.nodeValue.length){if(!tinymce.isIE&&!hasRightSideBr()){brElm=dom.create('br');rng.insertNode(brElm);rng.setStartAfter(brElm);rng.setEndAfter(brElm);extraBr=true;}} -brElm=dom.create('br');rng.insertNode(brElm);if(tinymce.isIE&&parentBlockName=='PRE'&&(!documentMode||documentMode<8)){brElm.parentNode.insertBefore(dom.doc.createTextNode('\r'),brElm);} -if(!extraBr){rng.setStartAfter(brElm);rng.setEndAfter(brElm);}else{rng.setStartBefore(brElm);rng.setEndBefore(brElm);} +dom.remove(parentBlock);moveToCaretPosition(newBlock);undoManager.add();};function hasRightSideContent(){var walker=new TreeWalker(container,parentBlock),node;while(node=walker.next()){if(nonEmptyElementsMap[node.nodeName.toLowerCase()]||node.length>0){return true;}}} +function insertBr(){var brElm,extraBr,marker;if(container&&container.nodeType==3&&offset>=container.nodeValue.length){if((!tinymce.isIE||tinymce.isIE11)&&!hasRightSideContent()){brElm=dom.create('br');rng.insertNode(brElm);rng.setStartAfter(brElm);rng.setEndAfter(brElm);extraBr=true;}} +brElm=dom.create('br');rng.insertNode(brElm);if((tinymce.isIE&&!tinymce.isIE11)&&parentBlockName=='PRE'&&(!documentMode||documentMode<8)){brElm.parentNode.insertBefore(dom.doc.createTextNode('\r'),brElm);} +marker=dom.create('span',{},' ');brElm.parentNode.insertBefore(marker,brElm);selection.scrollIntoView(marker);dom.remove(marker);if(!extraBr){rng.setStartAfter(brElm);rng.setEndAfter(brElm);}else{rng.setStartBefore(brElm);rng.setEndBefore(brElm);} selection.setRng(rng);undoManager.add();};function trimLeadingLineBreaks(node){do{if(node.nodeType===3){node.nodeValue=node.nodeValue.replace(/^[\r\n]+/,'');} node=node.firstChild;}while(node);};function getEditableRoot(node){var root=dom.getRoot(),parent,editableRoot;parent=node;while(parent!==root&&dom.getContentEditable(parent)!=="false"){if(dom.getContentEditable(parent)==="true"){editableRoot=parent;} parent=parent.parentNode;} -return parent!==root?editableRoot:root;};function addBrToBlockIfNeeded(block){var lastChild;if(!tinymce.isIE){block.normalize();lastChild=block.lastChild;if(!lastChild||(/^(left|right)$/gi.test(dom.getStyle(lastChild,'float',true)))){dom.add(block,'br');}}};if(!rng.collapsed){editor.execCommand('Delete');return;} +return parent!==root?editableRoot:root;};function addBrToBlockIfNeeded(block){var lastChild;if(!tinymce.isIE||tinymce.isIE11){block.normalize();lastChild=block.lastChild;if(!lastChild||(/^(left|right)$/gi.test(dom.getStyle(lastChild,'float',true)))){dom.add(block,'br');}}};if(!rng.collapsed){editor.execCommand('Delete');return;} if(evt.isDefaultPrevented()){return;} container=rng.startContainer;offset=rng.startOffset;newBlockName=(settings.force_p_newlines?'p':'')||settings.forced_root_block;newBlockName=newBlockName?newBlockName.toUpperCase():'';documentMode=dom.doc.documentMode;shiftKey=evt.shiftKey;if(container.nodeType==1&&container.hasChildNodes()){isAfterLastNodeInContainer=offset>container.childNodes.length-1;container=container.childNodes[Math.min(offset,container.childNodes.length-1)]||container;if(isAfterLastNodeInContainer&&container.nodeType==3){offset=container.nodeValue.length;}else{offset=0;}} editableRoot=getEditableRoot(container);if(!editableRoot){return;} diff --git a/gulliver/js/tinymce/changelog.txt b/gulliver/js/tinymce/changelog.txt index 7ca4eab5c..2b59b0f12 100644 --- a/gulliver/js/tinymce/changelog.txt +++ b/gulliver/js/tinymce/changelog.txt @@ -1,4 +1,52 @@ +Version 3.5.12 (2016-10-31) + Added new option table_style_by_css for the table plugin to set table styling with css rather than table attributes. + Added new option theme_advanced_default_font_size allows you to specify a default font size for the body. + Added new option theme_advanced_default_font_family allows you to specify a default font family for the body. + Fixed bug where params tags for width and height were being stripped from object tags in the media plugin. + Fixed font families in order to provide appropriate web-safe fonts. +Version 3.5.11 (2014-05-08) + Added new option noneditable_prevent_delete to the non-editable plugin to prevent deletion of non-editable text. + Added functionality to the media plugin to handle objects without source attributes correctly. + Fixed bug in paste plugin word import with lists that have strikethrough on numbers. + Fixed bug in word count plugin where characters with diacritical marks were split as seperate words. + Fixed bug in IE 11 where the selection of images would fail when they where at the end of blocks. + Fixed bug where input method would produce new lines when inserting contents to an empty editor. + Fixed bug in non-editable plugin where backspace deletes too much text. + Fixed bug where formatting a nested list would break the list moving list items. + Fixed bug where the caret were not appended as child of the body but as sibling. + Fixed bug where nested lists did not get the style updated. + Fixed bug where the isDirty method would report a false positive when a plugin modifies the initial content. + Fixed bug where empty tag doesn't preserve inner whitespace. +Version 3.5.10 (2013-10-24) + Fixed bug where dialogs using inlinepopups plugin would display incorrectly sometimes + Fixed bug in paste plugin word import that was removing type from lists + Fixed bug where IE 11 wouldn't be properly detected if IE 10 emulation was enabled. +Version 3.5.9 (2013-10-10) + Added IE 11 compatibility. IE 11 is treated as Gecko but it has still many IE bugs. + Fixed bug where importing CSS classes would fail if it contained @import rules to remote domain on Gecko. + Fixed bug in spelling plugin where misspelt words are not always marked. + Fixed bug where script tag was removed when nested inside a div or p. + Fixed full screen plugin state migration from original editor. + Fixed edgecase on up/down arrow keys scrolling with native lists. + Fixed bug where space can scroll webpage when using keyboard to access toolbar buttons. + Fixed bug where up/down arrow keys scroll entire webpage when using keyboard nav in menu ui. + Fixed bug where applying ins/del as inline elements would apply them as blocks. + Fixed bug where backspace on a space after an image would produce a BR on WebKit. + Fixed bug where it wasn't possible to change block type of text blocks. +Version 3.5.8 (2012-11-20) + Fixed bug where html5 data attributes where stripped from contents. + Fixed bug where toolbar was annouced multiple times with JAWS on Firefox. + Fixed bug where the editor view whouldn't scroll to BR elements when using shift+enter or br enter mode. + Fixed bug where a JS error would be thrown when trying to paste table rows then the rows clipboard was empty. + Fixed bug with auto detection logic for youtube urls in the media plugin. + Fixed bug where the formatter would throw errors if you used the jQuery version of TinyMCE and the latest jQuery. + Fixed bug where the latest WebKit versions would produce span elements when deleting text between blocks. + Fixed bug where the autolink plugin would produce DOM exceptions when pressing shift+enter inside a block element. + Fixed bug where toggling of blockquotes when using br enter mode would produce an exception. + Fixed bug where focusing out of the body of the editor wouldn't properly add an undo level. + Fixed issue with warning message being displayed on IE 9+ about the meta header fix for IE 8. Version 3.5.7 (2012-09-20) + Changed table row properties dialog to not update multiple rows when row type is header or footer. Fixed bug in hyperlink dialog for IE9 where links with no target attr set had target value of -- Changing toolbars to have a toolbar role for FF keyboard navigation works correctly. Fixed bug where applying formatting to an empty block element would produce redundant spans. @@ -157,7 +205,7 @@ Version 3.5b1 (2012-03-08) Added new types and selector options to make it easier to create editor instances with different configs. Added new preview of formatting options in various listboxes. Added new preview_styles option that enables control over what gets previewed. - Fixed bug where content css would be loaded twice into iframe. + Fixed bug where content css would be loaded twice into iframe. Fixed bug where start elements with only whitespace in the attribute part wouldn't be correctly parsed. Fixed bug where the advlink dialog would produce an error about the addSelectAccessibility function not being defined. Fixed bug where the caret would be placed at an incorrect position if span was removed by the invalid_elements setting. @@ -165,7 +213,7 @@ Version 3.5b1 (2012-03-08) Version 3.4.9 (2012-02-23) Added settings to wordcount plugin to configure update rate and checking wordcount on backspace and delete using wordcount_update_rate and wordcount_update_on_delete. Fixed bug in Webkit and IE where deleting empty paragraphs would remove entire editor contents. - Fixed bug where pressing enter on end of list item with a heading would create a new item with heading. + Fixed bug where pressing enter on end of list item with a heading would create a new item with heading. Fixed edit css style dialog text-decoration none checkbox so it disables other text-decoration options when enabled. Fixed bug in Gecko where undo wasn't added when focus was lost. Fixed bug in Gecko where shift-enter in table cell ending with BR doesn't move caret to new line. @@ -192,8 +240,8 @@ Version 3.4.8 (2012-02-02) Added spacebar onclick handler to toolbar buttons to ensure that the accessibility behaviour works correctly. Fixed bug where a stranded bullet point would get created in WebKit. Fixed bug where selecting text in a blockquote and pressing backspace toggles the style. - Fixed bug where pressing enter from a heading in IE, the resulting P tag below it shares the style property. - Fix white space in between spans from being deleted. + Fixed bug where pressing enter from a heading in IE, the resulting P tag below it shares the style property. + Fix white space in between spans from being deleted. Fixed bug where scrollbars where visible in the character map dialog on Gecko. Fixed issue with missing translation for one of the emoticons. Fixed bug where dots in id:s where causing problems. Patch provided by Abhishek Dev. diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/license.txt b/gulliver/js/tinymce/jscripts/tiny_mce/license.txt index 60d6d4c8f..5a2534299 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/license.txt +++ b/gulliver/js/tinymce/jscripts/tiny_mce/license.txt @@ -20,7 +20,7 @@ free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether +can use it too, but we suggest you first think carefuly about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin.js index d1c3502ac..71d86bbec 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin.js @@ -1 +1 @@ -(function(){tinymce.create("tinymce.plugins.AutolinkPlugin",{init:function(a,b){var c=this;a.onKeyDown.addToTop(function(d,f){if(f.keyCode==13){return c.handleEnter(d)}});if(tinyMCE.isIE){return}a.onKeyPress.add(function(d,f){if(f.which==41){return c.handleEclipse(d)}});a.onKeyUp.add(function(d,f){if(f.keyCode==32){return c.handleSpacebar(d)}})},handleEclipse:function(a){this.parseCurrentLine(a,-1,"(",true)},handleSpacebar:function(a){this.parseCurrentLine(a,0,"",true)},handleEnter:function(a){this.parseCurrentLine(a,-1,"",false)},parseCurrentLine:function(i,d,b,g){var a,f,c,n,k,m,h,e,j;a=i.selection.getRng(true).cloneRange();if(a.startOffset<5){e=a.endContainer.previousSibling;if(e==null){if(a.endContainer.firstChild==null||a.endContainer.firstChild.nextSibling==null){return}e=a.endContainer.firstChild.nextSibling}j=e.length;a.setStart(e,j);a.setEnd(e,j);if(a.endOffset<5){return}f=a.endOffset;n=e}else{n=a.endContainer;if(n.nodeType!=3&&n.firstChild){while(n.nodeType!=3&&n.firstChild){n=n.firstChild}if(n.nodeType==3){a.setStart(n,0);a.setEnd(n,n.nodeValue.length)}}if(a.endOffset==1){f=2}else{f=a.endOffset-1-d}}c=f;do{a.setStart(n,f-2);a.setEnd(n,f-1);f-=1}while(a.toString()!=" "&&a.toString()!=""&&a.toString().charCodeAt(0)!=160&&(f-2)>=0&&a.toString()!=b);if(a.toString()==b||a.toString().charCodeAt(0)==160){a.setStart(n,f);a.setEnd(n,c);f+=1}else{if(a.startOffset==0){a.setStart(n,0);a.setEnd(n,c)}else{a.setStart(n,f);a.setEnd(n,c)}}var m=a.toString();if(m.charAt(m.length-1)=="."){a.setEnd(n,c-1)}m=a.toString();h=m.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+-]+@)(.+)$/i);if(h){if(h[1]=="www."){h[1]="http://www."}else{if(/@$/.test(h[1])&&!/^mailto:/.test(h[1])){h[1]="mailto:"+h[1]}}k=i.selection.getBookmark();i.selection.setRng(a);tinyMCE.execCommand("createlink",false,h[1]+h[2]);i.selection.moveToBookmark(k);i.nodeChanged();if(tinyMCE.isWebKit){i.selection.collapse(false);var l=Math.min(n.length,c+1);a.setStart(n,l);a.setEnd(n,l);i.selection.setRng(a)}}},getInfo:function(){return{longname:"Autolink",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autolink",tinymce.plugins.AutolinkPlugin)})(); \ No newline at end of file +(function(){tinymce.create("tinymce.plugins.AutolinkPlugin",{init:function(a,b){var c=this;a.onKeyDown.addToTop(function(d,f){if(f.keyCode==13){return c.handleEnter(d)}});if(tinyMCE.isIE){return}a.onKeyPress.add(function(d,f){if(f.which==41){return c.handleEclipse(d)}});a.onKeyUp.add(function(d,f){if(f.keyCode==32){return c.handleSpacebar(d)}})},handleEclipse:function(a){this.parseCurrentLine(a,-1,"(",true)},handleSpacebar:function(a){this.parseCurrentLine(a,0,"",true)},handleEnter:function(a){this.parseCurrentLine(a,-1,"",false)},parseCurrentLine:function(i,d,b,g){var a,f,c,n,k,m,h,e,j;a=i.selection.getRng(true).cloneRange();if(a.startOffset<5){e=a.endContainer.previousSibling;if(e==null){if(a.endContainer.firstChild==null||a.endContainer.firstChild.nextSibling==null){return}e=a.endContainer.firstChild.nextSibling}j=e.length;a.setStart(e,j);a.setEnd(e,j);if(a.endOffset<5){return}f=a.endOffset;n=e}else{n=a.endContainer;if(n.nodeType!=3&&n.firstChild){while(n.nodeType!=3&&n.firstChild){n=n.firstChild}if(n.nodeType==3){a.setStart(n,0);a.setEnd(n,n.nodeValue.length)}}if(a.endOffset==1){f=2}else{f=a.endOffset-1-d}}c=f;do{a.setStart(n,f>=2?f-2:0);a.setEnd(n,f>=1?f-1:0);f-=1}while(a.toString()!=" "&&a.toString()!=""&&a.toString().charCodeAt(0)!=160&&(f-2)>=0&&a.toString()!=b);if(a.toString()==b||a.toString().charCodeAt(0)==160){a.setStart(n,f);a.setEnd(n,c);f+=1}else{if(a.startOffset==0){a.setStart(n,0);a.setEnd(n,c)}else{a.setStart(n,f);a.setEnd(n,c)}}var m=a.toString();if(m.charAt(m.length-1)=="."){a.setEnd(n,c-1)}m=a.toString();h=m.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+-]+@)(.+)$/i);if(h){if(h[1]=="www."){h[1]="http://www."}else{if(/@$/.test(h[1])&&!/^mailto:/.test(h[1])){h[1]="mailto:"+h[1]}}k=i.selection.getBookmark();i.selection.setRng(a);tinyMCE.execCommand("createlink",false,h[1]+h[2]);i.selection.moveToBookmark(k);i.nodeChanged();if(tinyMCE.isWebKit){i.selection.collapse(false);var l=Math.min(n.length,c+1);a.setStart(n,l);a.setEnd(n,l);i.selection.setRng(a)}}},getInfo:function(){return{longname:"Autolink",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autolink",tinymce.plugins.AutolinkPlugin)})(); \ No newline at end of file diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js index c05fbbc09..5b61f7a20 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js @@ -107,8 +107,8 @@ do { // Move the selection one character backwards. - r.setStart(endContainer, end - 2); - r.setEnd(endContainer, end - 1); + r.setStart(endContainer, end >= 2 ? end - 2 : 0); + r.setEnd(endContainer, end >= 1 ? end - 1 : 0); end -= 1; // Loop until one of the following is found: a blank space,  , delimeter, (end-2) >= 0 diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js index 9a0e7da15..0a259471d 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js @@ -49,7 +49,7 @@ }, /** - * Creates control instances based in the incomming name. This method is normally not + * Creates control instances based in the incoming name. This method is normally not * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons * but you sometimes need to create more complex controls like listboxes, split buttons etc then this * method can be used to create those. diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js index dcf76024d..0dfd2cae4 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js @@ -1 +1 @@ -(function(){var b=tinymce.each,a=tinymce.html.Node;tinymce.create("tinymce.plugins.FullPagePlugin",{init:function(c,d){var e=this;e.editor=c;c.addCommand("mceFullPageProperties",function(){c.windowManager.open({file:d+"/fullpage.htm",width:430+parseInt(c.getLang("fullpage.delta_width",0)),height:495+parseInt(c.getLang("fullpage.delta_height",0)),inline:1},{plugin_url:d,data:e._htmlToData()})});c.addButton("fullpage",{title:"fullpage.desc",cmd:"mceFullPageProperties"});c.onBeforeSetContent.add(e._setContent,e);c.onGetContent.add(e._getContent,e)},getInfo:function(){return{longname:"Fullpage",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_htmlToData:function(){var f=this._parseHeader(),h={},c,i,g,e=this.editor;function d(l,j){var k=l.attr(j);return k||""}h.fontface=e.getParam("fullpage_default_fontface","");h.fontsize=e.getParam("fullpage_default_fontsize","");i=f.firstChild;if(i.type==7){h.xml_pi=true;g=/encoding="([^"]+)"/.exec(i.value);if(g){h.docencoding=g[1]}}i=f.getAll("#doctype")[0];if(i){h.doctype=""}i=f.getAll("title")[0];if(i&&i.firstChild){h.metatitle=i.firstChild.value}b(f.getAll("meta"),function(m){var k=m.attr("name"),j=m.attr("http-equiv"),l;if(k){h["meta"+k.toLowerCase()]=m.attr("content")}else{if(j=="Content-Type"){l=/charset\s*=\s*(.*)\s*/gi.exec(m.attr("content"));if(l){h.docencoding=l[1]}}}});i=f.getAll("html")[0];if(i){h.langcode=d(i,"lang")||d(i,"xml:lang")}i=f.getAll("link")[0];if(i&&i.attr("rel")=="stylesheet"){h.stylesheet=i.attr("href")}i=f.getAll("body")[0];if(i){h.langdir=d(i,"dir");h.style=d(i,"style");h.visited_color=d(i,"vlink");h.link_color=d(i,"link");h.active_color=d(i,"alink")}return h},_dataToHtml:function(g){var f,d,h,j,k,e=this.editor.dom;function c(n,l,m){n.attr(l,m?m:undefined)}function i(l){if(d.firstChild){d.insert(l,d.firstChild)}else{d.append(l)}}f=this._parseHeader();d=f.getAll("head")[0];if(!d){j=f.getAll("html")[0];d=new a("head",1);if(j.firstChild){j.insert(d,j.firstChild,true)}else{j.append(d)}}j=f.firstChild;if(g.xml_pi){k='version="1.0"';if(g.docencoding){k+=' encoding="'+g.docencoding+'"'}if(j.type!=7){j=new a("xml",7);f.insert(j,f.firstChild,true)}j.value=k}else{if(j&&j.type==7){j.remove()}}j=f.getAll("#doctype")[0];if(g.doctype){if(!j){j=new a("#doctype",10);if(g.xml_pi){f.insert(j,f.firstChild)}else{i(j)}}j.value=g.doctype.substring(9,g.doctype.length-1)}else{if(j){j.remove()}}j=f.getAll("title")[0];if(g.metatitle){if(!j){j=new a("title",1);j.append(new a("#text",3)).value=g.metatitle;i(j)}}if(g.docencoding){j=null;b(f.getAll("meta"),function(l){if(l.attr("http-equiv")=="Content-Type"){j=l}});if(!j){j=new a("meta",1);j.attr("http-equiv","Content-Type");j.shortEnded=true;i(j)}j.attr("content","text/html; charset="+g.docencoding)}b("keywords,description,author,copyright,robots".split(","),function(m){var l=f.getAll("meta"),n,p,o=g["meta"+m];for(n=0;n"))},_parseHeader:function(){return new tinymce.html.DomParser({validate:false,root_name:"#document"}).parse(this.head)},_setContent:function(g,d){var m=this,i,c,h=d.content,f,l="",e=m.editor.dom,j;function k(n){return n.replace(/<\/?[A-Z]+/g,function(o){return o.toLowerCase()})}if(d.format=="raw"&&m.head){return}if(d.source_view&&g.getParam("fullpage_hide_in_source_view")){return}h=h.replace(/<(\/?)BODY/gi,"<$1body");i=h.indexOf("",i);m.head=k(h.substring(0,i+1));c=h.indexOf("\n"}f=m._parseHeader();b(f.getAll("style"),function(n){if(n.firstChild){l+=n.firstChild.value}});j=f.getAll("body")[0];if(j){e.setAttribs(m.editor.getBody(),{style:j.attr("style")||"",dir:j.attr("dir")||"",vLink:j.attr("vlink")||"",link:j.attr("link")||"",aLink:j.attr("alink")||""})}e.remove("fullpage_styles");if(l){e.add(m.editor.getDoc().getElementsByTagName("head")[0],"style",{id:"fullpage_styles"},l);j=e.get("fullpage_styles");if(j.styleSheet){j.styleSheet.cssText=l}}},_getDefaultHeader:function(){var f="",c=this.editor,e,d="";if(c.getParam("fullpage_default_xml_pi")){f+='\n'}f+=c.getParam("fullpage_default_doctype",'');f+="\n\n\n";if(e=c.getParam("fullpage_default_title")){f+=""+e+"\n"}if(e=c.getParam("fullpage_default_encoding")){f+='\n'}if(e=c.getParam("fullpage_default_font_family")){d+="font-family: "+e+";"}if(e=c.getParam("fullpage_default_font_size")){d+="font-size: "+e+";"}if(e=c.getParam("fullpage_default_text_color")){d+="color: "+e+";"}f+="\n\n";return f},_getContent:function(d,e){var c=this;if(!e.source_view||!d.getParam("fullpage_hide_in_source_view")){e.content=tinymce.trim(c.head)+"\n"+tinymce.trim(e.content)+"\n"+tinymce.trim(c.foot)}}});tinymce.PluginManager.add("fullpage",tinymce.plugins.FullPagePlugin)})(); \ No newline at end of file +(function(){var b=tinymce.each,a=tinymce.html.Node;tinymce.create("tinymce.plugins.FullPagePlugin",{init:function(c,d){var e=this;e.editor=c;c.addCommand("mceFullPageProperties",function(){c.windowManager.open({file:d+"/fullpage.htm",width:430+parseInt(c.getLang("fullpage.delta_width",0)),height:495+parseInt(c.getLang("fullpage.delta_height",0)),inline:1},{plugin_url:d,data:e._htmlToData()})});c.addButton("fullpage",{title:"fullpage.desc",cmd:"mceFullPageProperties"});c.onBeforeSetContent.add(e._setContent,e);c.onGetContent.add(e._getContent,e)},getInfo:function(){return{longname:"Fullpage",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_htmlToData:function(){var e=this._parseHeader(),g={},h,f,d=this.editor;function c(k,i){var j=k.attr(i);return j||""}g.fontface=d.getParam("fullpage_default_fontface","");g.fontsize=d.getParam("fullpage_default_fontsize","");h=e.firstChild;if(h.type==7){g.xml_pi=true;f=/encoding="([^"]+)"/.exec(h.value);if(f){g.docencoding=f[1]}}h=e.getAll("#doctype")[0];if(h){g.doctype=""}h=e.getAll("title")[0];if(h&&h.firstChild){g.metatitle=h.firstChild.value}b(e.getAll("meta"),function(l){var j=l.attr("name"),i=l.attr("http-equiv"),k;if(j){g["meta"+j.toLowerCase()]=l.attr("content")}else{if(i=="Content-Type"){k=/charset\s*=\s*(.*)\s*/gi.exec(l.attr("content"));if(k){g.docencoding=k[1]}}}});h=e.getAll("html")[0];if(h){g.langcode=c(h,"lang")||c(h,"xml:lang")}h=e.getAll("link")[0];if(h&&h.attr("rel")=="stylesheet"){g.stylesheet=h.attr("href")}h=e.getAll("body")[0];if(h){g.langdir=c(h,"dir");g.style=c(h,"style");g.visited_color=c(h,"vlink");g.link_color=c(h,"link");g.active_color=c(h,"alink")}return g},_dataToHtml:function(g){var f,d,h,j,k,e=this.editor.dom;function c(n,l,m){n.attr(l,m?m:undefined)}function i(l){if(d.firstChild){d.insert(l,d.firstChild)}else{d.append(l)}}f=this._parseHeader();d=f.getAll("head")[0];if(!d){j=f.getAll("html")[0];d=new a("head",1);if(j.firstChild){j.insert(d,j.firstChild,true)}else{j.append(d)}}j=f.firstChild;if(g.xml_pi){k='version="1.0"';if(g.docencoding){k+=' encoding="'+g.docencoding+'"'}if(j.type!=7){j=new a("xml",7);f.insert(j,f.firstChild,true)}j.value=k}else{if(j&&j.type==7){j.remove()}}j=f.getAll("#doctype")[0];if(g.doctype){if(!j){j=new a("#doctype",10);if(g.xml_pi){f.insert(j,f.firstChild)}else{i(j)}}j.value=g.doctype.substring(9,g.doctype.length-1)}else{if(j){j.remove()}}j=f.getAll("title")[0];if(g.metatitle){if(!j){j=new a("title",1);j.append(new a("#text",3)).value=g.metatitle;i(j)}}if(g.docencoding){j=null;b(f.getAll("meta"),function(l){if(l.attr("http-equiv")=="Content-Type"){j=l}});if(!j){j=new a("meta",1);j.attr("http-equiv","Content-Type");j.shortEnded=true;i(j)}j.attr("content","text/html; charset="+g.docencoding)}b("keywords,description,author,copyright,robots".split(","),function(m){var l=f.getAll("meta"),n,p,o=g["meta"+m];for(n=0;n"))},_parseHeader:function(){return new tinymce.html.DomParser({validate:false,root_name:"#document"}).parse(this.head)},_setContent:function(g,d){var m=this,i,c,h=d.content,f,l="",e=m.editor.dom,j;function k(n){return n.replace(/<\/?[A-Z]+/g,function(o){return o.toLowerCase()})}if(d.format=="raw"&&m.head){return}if(d.source_view&&g.getParam("fullpage_hide_in_source_view")){return}h=h.replace(/<(\/?)BODY/gi,"<$1body");i=h.indexOf("",i);m.head=k(h.substring(0,i+1));c=h.indexOf("\n"}f=m._parseHeader();b(f.getAll("style"),function(n){if(n.firstChild){l+=n.firstChild.value}});j=f.getAll("body")[0];if(j){e.setAttribs(m.editor.getBody(),{style:j.attr("style")||"",dir:j.attr("dir")||"",vLink:j.attr("vlink")||"",link:j.attr("link")||"",aLink:j.attr("alink")||""})}e.remove("fullpage_styles");if(l){e.add(m.editor.getDoc().getElementsByTagName("head")[0],"style",{id:"fullpage_styles"},l);j=e.get("fullpage_styles");if(j.styleSheet){j.styleSheet.cssText=l}}},_getDefaultHeader:function(){var f="",c=this.editor,e,d="";if(c.getParam("fullpage_default_xml_pi")){f+='\n'}f+=c.getParam("fullpage_default_doctype",'');f+="\n\n\n";if(e=c.getParam("fullpage_default_title")){f+=""+e+"\n"}if(e=c.getParam("fullpage_default_encoding")){f+='\n'}if(e=c.getParam("fullpage_default_font_family")){d+="font-family: "+e+";"}if(e=c.getParam("fullpage_default_font_size")){d+="font-size: "+e+";"}if(e=c.getParam("fullpage_default_text_color")){d+="color: "+e+";"}f+="\n\n";return f},_getContent:function(d,e){var c=this;if(!e.source_view||!d.getParam("fullpage_hide_in_source_view")){e.content=tinymce.trim(c.head)+"\n"+tinymce.trim(e.content)+"\n"+tinymce.trim(c.foot)}}});tinymce.PluginManager.add("fullpage",tinymce.plugins.FullPagePlugin)})(); \ No newline at end of file diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js index 23de7c5a1..7663a14ac 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js @@ -50,13 +50,13 @@ // Private plugin internal methods _htmlToData : function() { - var headerFragment = this._parseHeader(), data = {}, nodes, elm, matches, editor = this.editor; + var headerFragment = this._parseHeader(), data = {}, elm, matches, editor = this.editor; function getAttr(elm, name) { var value = elm.attr(name); return value || ''; - }; + } // Default some values data.fontface = editor.getParam("fullpage_default_fontface", ""); @@ -67,14 +67,16 @@ if (elm.type == 7) { data.xml_pi = true; matches = /encoding="([^"]+)"/.exec(elm.value); - if (matches) + if (matches) { data.docencoding = matches[1]; + } } // Parse doctype elm = headerFragment.getAll('#doctype')[0]; - if (elm) + if (elm) { data.doctype = '"; + } // Parse title element elm = headerFragment.getAll('title')[0]; @@ -86,25 +88,28 @@ each(headerFragment.getAll('meta'), function(meta) { var name = meta.attr('name'), httpEquiv = meta.attr('http-equiv'), matches; - if (name) + if (name) { data['meta' + name.toLowerCase()] = meta.attr('content'); - else if (httpEquiv == "Content-Type") { + } else if (httpEquiv == "Content-Type") { matches = /charset\s*=\s*(.*)\s*/gi.exec(meta.attr('content')); - if (matches) + if (matches) { data.docencoding = matches[1]; + } } }); // Parse html attribs elm = headerFragment.getAll('html')[0]; - if (elm) + if (elm) { data.langcode = getAttr(elm, 'lang') || getAttr(elm, 'xml:lang'); + } // Parse stylesheet elm = headerFragment.getAll('link')[0]; - if (elm && elm.attr('rel') == 'stylesheet') + if (elm && elm.attr('rel') == 'stylesheet') { data.stylesheet = elm.attr('href'); + } // Parse body parts elm = headerFragment.getAll('body')[0]; @@ -124,14 +129,15 @@ function setAttr(elm, name, value) { elm.attr(name, value ? value : undefined); - }; + } function addHeadNode(node) { - if (headElement.firstChild) + if (headElement.firstChild) { headElement.insert(node, headElement.firstChild); - else + } else { headElement.append(node); - }; + } + } headerFragment = this._parseHeader(); headElement = headerFragment.getAll('head')[0]; @@ -139,10 +145,11 @@ elm = headerFragment.getAll('html')[0]; headElement = new Node('head', 1); - if (elm.firstChild) + if (elm.firstChild) { elm.insert(headElement, elm.firstChild, true); - else + } else { elm.append(headElement); + } } // Add/update/remove XML-PI @@ -150,8 +157,9 @@ if (data.xml_pi) { value = 'version="1.0"'; - if (data.docencoding) + if (data.docencoding) { value += ' encoding="' + data.docencoding + '"'; + } if (elm.type != 7) { elm = new Node('xml', 7); @@ -159,8 +167,9 @@ } elm.value = value; - } else if (elm && elm.type == 7) + } else if (elm && elm.type == 7) { elm.remove(); + } // Add/update/remove doctype elm = headerFragment.getAll('#doctype')[0]; @@ -168,15 +177,17 @@ if (!elm) { elm = new Node('#doctype', 10); - if (data.xml_pi) + if (data.xml_pi) { headerFragment.insert(elm, headerFragment.firstChild); - else + } else { addHeadNode(elm); + } } elm.value = data.doctype.substring(9, data.doctype.length - 1); - } else if (elm) + } else if (elm) { elm.remove(); + } // Add/update/remove title elm = headerFragment.getAll('title')[0]; @@ -192,8 +203,9 @@ if (data.docencoding) { elm = null; each(headerFragment.getAll('meta'), function(meta) { - if (meta.attr('http-equiv') == 'Content-Type') + if (meta.attr('http-equiv') == 'Content-Type') { elm = meta; + } }); if (!elm) { @@ -214,10 +226,11 @@ meta = nodes[i]; if (meta.attr('name') == name) { - if (value) + if (value) { meta.attr('content', value); - else + } else { meta.remove(); + } return; } @@ -236,10 +249,11 @@ // Add/update/delete link elm = headerFragment.getAll('link')[0]; if (elm && elm.attr('rel') == 'stylesheet') { - if (data.stylesheet) + if (data.stylesheet) { elm.attr('href', data.stylesheet); - else + } else { elm.remove(); + } } else if (data.stylesheet) { elm = new Node('link', 1); elm.attr({ @@ -304,15 +318,17 @@ function low(s) { return s.replace(/<\/?[A-Z]+/g, function(a) { return a.toLowerCase(); - }) - }; + }); + } // Ignore raw updated if we already have a head, this will fix issues with undo/redo keeping the head/foot separate - if (o.format == 'raw' && self.head) + if (o.format == 'raw' && self.head) { return; + } - if (o.source_view && ed.getParam('fullpage_hide_in_source_view')) + if (o.source_view && ed.getParam('fullpage_hide_in_source_view')) { return; + } // Parse out head, body and footer content = content.replace(/<(\/?)BODY/gi, '<$1body'); @@ -323,8 +339,9 @@ self.head = low(content.substring(0, startPos + 1)); endPos = content.indexOf('\n'; + } header += editor.getParam('fullpage_default_doctype', ''); header += '\n\n\n'; - if (value = editor.getParam('fullpage_default_title')) + if (value = editor.getParam('fullpage_default_title')) { header += '' + value + '\n'; + } - if (value = editor.getParam('fullpage_default_encoding')) + if (value = editor.getParam('fullpage_default_encoding')) { header += '\n'; + } - if (value = editor.getParam('fullpage_default_font_family')) + if (value = editor.getParam('fullpage_default_font_family')) { styles += 'font-family: ' + value + ';'; + } - if (value = editor.getParam('fullpage_default_font_size')) + if (value = editor.getParam('fullpage_default_font_size')) { styles += 'font-size: ' + value + ';'; + } - if (value = editor.getParam('fullpage_default_text_color')) + if (value = editor.getParam('fullpage_default_text_color')) { styles += 'color: ' + value + ';'; + } header += '\n\n'; @@ -395,8 +420,9 @@ _getContent : function(ed, o) { var self = this; - if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view')) + if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view')) { o.content = tinymce.trim(self.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(self.foot); + } } }); diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js index 3f672ad3b..435a046e3 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js @@ -11,7 +11,7 @@ (function() { tinyMCEPopup.requireLangPack(); - var defaultDocTypes = + var defaultDocTypes = 'XHTML 1.0 Transitional=,' + 'XHTML 1.0 Frameset=,' + 'XHTML 1.0 Strict=,' + @@ -20,7 +20,7 @@ 'HTML 4.01 Strict=,' + 'HTML 4.01 Frameset='; - var defaultEncodings = + var defaultEncodings = 'Western european (iso-8859-1)=iso-8859-1,' + 'Central European (iso-8859-2)=iso-8859-2,' + 'Unicode (UTF-8)=utf-8,' + @@ -31,7 +31,7 @@ 'Korean (iso-2022-kr)=iso-2022-kr,' + 'ASCII (us-ascii)=us-ascii'; - var defaultFontNames = 'Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,times new roman,times,serif;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times,serif;Verdana=verdana,arial,helvetica,sans-serif;Impact=impact;WingDings=wingdings'; + var defaultFontNames = 'Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,times new roman,times,serif;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times,serif;Verdana=verdana,arial,helvetica,sans-serif;Impact=impact,sans-serif;WingDings=wingdings'; var defaultFontSizes = '10px,11px,12px,13px,14px,15px,16px'; function setVal(id, value) { @@ -40,26 +40,29 @@ if (elm) { value = value || ''; - if (elm.nodeName == "SELECT") + if (elm.nodeName == "SELECT") { selectByValue(document.forms[0], id, value); - else if (elm.type == "checkbox") + } else if (elm.type == "checkbox") { elm.checked = !!value; - else + } else { elm.value = value; + } } - }; + } function getVal(id) { var elm = document.getElementById(id); - if (elm.nodeName == "SELECT") + if (elm.nodeName == "SELECT") { return elm.options[elm.selectedIndex].value; + } - if (elm.type == "checkbox") + if (elm.type == "checkbox") { return elm.checked; + } return elm.value; - }; + } window.FullPageDialog = { changedStyle : function() { @@ -69,10 +72,11 @@ setVal('fontsize', styles['font-size']); setVal('textcolor', styles['color']); - if (val = styles['background-image']) + if (val = styles['background-image']) { setVal('bgimage', val.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1")); - else + } else { setVal('bgimage', ''); + } setVal('bgcolor', styles['background-color']); @@ -91,17 +95,21 @@ styles['margin-left'] = val[3] || val[0] || ''; } - if (val = styles['margin-top']) + if (val = styles['margin-top']) { setVal('topmargin', val.replace(/px/, '')); + } - if (val = styles['margin-right']) + if (val = styles['margin-right']) { setVal('rightmargin', val.replace(/px/, '')); + } - if (val = styles['margin-bottom']) + if (val = styles['margin-bottom']) { setVal('bottommargin', val.replace(/px/, '')); + } - if (val = styles['margin-left']) + if (val = styles['margin-left']) { setVal('leftmargin', val.replace(/px/, '')); + } updateColor('bgcolor_pick', 'bgcolor'); updateColor('textcolor_pick', 'textcolor'); @@ -109,7 +117,7 @@ changedStyleProp : function() { var val, dom = tinyMCEPopup.editor.dom, styles = dom.parseStyle(getVal('style')); - + styles['font-face'] = getVal('fontface'); styles['font-size'] = getVal('fontsize'); styles['color'] = getVal('textcolor'); @@ -146,7 +154,7 @@ setVal('style', dom.serializeStyle(dom.parseStyle(dom.serializeStyle(styles)))); this.changedStyle(); }, - + update : function() { var data = {}; @@ -158,7 +166,7 @@ tinyMCEPopup.close(); } }; - + function init() { var form = document.forms[0], i, item, list, editor = tinyMCEPopup.editor; diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js index a2eb03483..1aa8cc443 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js @@ -1 +1 @@ -(function(){var a=tinymce.DOM;tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(d,e){var f=this,g={},c,b;f.editor=d;d.addCommand("mceFullScreen",function(){var i,j=a.doc.documentElement;if(d.getParam("fullscreen_is_enabled")){if(d.getParam("fullscreen_new_window")){closeFullscreen()}else{a.win.setTimeout(function(){tinymce.dom.Event.remove(a.win,"resize",f.resizeFunc);tinyMCE.get(d.getParam("fullscreen_editor_id")).setContent(d.getContent());tinyMCE.remove(d);a.remove("mce_fullscreen_container");j.style.overflow=d.getParam("fullscreen_html_overflow");a.setStyle(a.doc.body,"overflow",d.getParam("fullscreen_overflow"));a.win.scrollTo(d.getParam("fullscreen_scrollx"),d.getParam("fullscreen_scrolly"));tinyMCE.settings=tinyMCE.oldSettings},10)}return}if(d.getParam("fullscreen_new_window")){i=a.win.open(e+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{i.resizeTo(screen.availWidth,screen.availHeight)}catch(h){}}else{tinyMCE.oldSettings=tinyMCE.settings;g.fullscreen_overflow=a.getStyle(a.doc.body,"overflow",1)||"auto";g.fullscreen_html_overflow=a.getStyle(j,"overflow",1);c=a.getViewPort();g.fullscreen_scrollx=c.x;g.fullscreen_scrolly=c.y;if(tinymce.isOpera&&g.fullscreen_overflow=="visible"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&g.fullscreen_overflow=="scroll"){g.fullscreen_overflow="auto"}if(tinymce.isIE&&(g.fullscreen_html_overflow=="visible"||g.fullscreen_html_overflow=="scroll")){g.fullscreen_html_overflow="auto"}if(g.fullscreen_overflow=="0px"){g.fullscreen_overflow=""}a.setStyle(a.doc.body,"overflow","hidden");j.style.overflow="hidden";c=a.getViewPort();a.win.scrollTo(0,0);if(tinymce.isIE){c.h-=1}if(tinymce.isIE6||document.compatMode=="BackCompat"){b="absolute;top:"+c.y}else{b="fixed;top:0"}n=a.add(a.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+b+";left:0;width:"+c.w+"px;height:"+c.h+"px;z-index:200000;"});a.add(n,"div",{id:"mce_fullscreen"});tinymce.each(d.settings,function(k,l){g[l]=k});g.id="mce_fullscreen";g.width=n.clientWidth;g.height=n.clientHeight-15;g.fullscreen_is_enabled=true;g.fullscreen_editor_id=d.id;g.theme_advanced_resizing=false;g.save_onsavecallback=function(){d.setContent(tinyMCE.get(g.id).getContent());d.execCommand("mceSave")};tinymce.each(d.getParam("fullscreen_settings"),function(m,l){g[l]=m});if(g.theme_advanced_toolbar_location==="external"){g.theme_advanced_toolbar_location="top"}f.fullscreenEditor=new tinymce.Editor("mce_fullscreen",g);f.fullscreenEditor.onInit.add(function(){f.fullscreenEditor.setContent(d.getContent());f.fullscreenEditor.focus()});f.fullscreenEditor.render();f.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");f.fullscreenElement.update();f.resizeFunc=tinymce.dom.Event.add(a.win,"resize",function(){var o=tinymce.DOM.getViewPort(),l=f.fullscreenEditor,k,m;k=l.dom.getSize(l.getContainer().getElementsByTagName("table")[0]);m=l.dom.getSize(l.getContainer().getElementsByTagName("iframe")[0]);l.theme.resizeTo(o.w-k.w+m.w,o.h-k.h+m.h)})}});d.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});d.onNodeChange.add(function(i,h){h.setActive("fullscreen",i.getParam("fullscreen_is_enabled"))})},getInfo:function(){return{longname:"Fullscreen",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("fullscreen",tinymce.plugins.FullScreenPlugin)})(); \ No newline at end of file +(function(){var b=tinymce.DOM;var a=function(d,f,e){var c=function(g){var i=d.controlManager.get(g);var h=f.controlManager.get(g);if(i&&h){h.displayColor(i.value)}};c("forecolor");c("backcolor");f.setContent(d.getContent({format:"raw"}),{format:"raw"});f.selection.moveToBookmark(e);if(d.plugins.spellchecker&&f.plugins.spellchecker){f.plugins.spellchecker.setLanguage(d.plugins.spellchecker.selectedLang)}};tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(i,c){var l=this,m={},k=b.doc.documentElement,d,o,h,g,f,e,j;i.addCommand("mceFullScreen",function(){var q,r;if(i.getParam("fullscreen_is_enabled")){if(i.getParam("fullscreen_new_window")){closeFullscreen()}else{b.win.setTimeout(function(){var t=i;var s=tinyMCE.get(t.getParam("fullscreen_editor_id"));s.plugins.fullscreen.saveState(t);tinyMCE.remove(t)},10)}return}if(i.getParam("fullscreen_new_window")){l.fullscreenSettings={bookmark:i.selection.getBookmark()};q=b.win.open(c+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{q.resizeTo(screen.availWidth,screen.availHeight)}catch(p){}}else{o=b.getStyle(b.doc.body,"overflow",1)||"auto";h=b.getStyle(k,"overflow",1);d=b.getViewPort();g=d.x;f=d.y;if(tinymce.isOpera&&o=="visible"){o="auto"}if(tinymce.isIE&&o=="scroll"){o="auto"}if(tinymce.isIE&&(h=="visible"||h=="scroll")){h="auto"}if(o=="0px"){o=""}b.setStyle(b.doc.body,"overflow","hidden");k.style.overflow="hidden";d=b.getViewPort();b.win.scrollTo(0,0);if(tinymce.isIE){d.h-=1}if(tinymce.isIE6||document.compatMode=="BackCompat"){e="absolute;top:"+d.y}else{e="fixed;top:0"}n=b.add(b.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+e+";left:0;width:"+d.w+"px;height:"+d.h+"px;z-index:200000;"});b.add(n,"div",{id:"mce_fullscreen"});tinymce.each(i.settings,function(s,t){m[t]=s});m.id="mce_fullscreen";m.width=n.clientWidth;m.height=n.clientHeight-15;m.fullscreen_is_enabled=true;m.fullscreen_editor_id=i.id;m.theme_advanced_resizing=false;m.save_onsavecallback=function(){i.setContent(tinyMCE.get(m.id).getContent());i.execCommand("mceSave")};tinymce.each(i.getParam("fullscreen_settings"),function(t,s){m[s]=t});l.fullscreenSettings={bookmark:i.selection.getBookmark(),fullscreen_overflow:o,fullscreen_html_overflow:h,fullscreen_scrollx:g,fullscreen_scrolly:f};if(m.theme_advanced_toolbar_location==="external"){m.theme_advanced_toolbar_location="top"}tinyMCE.oldSettings=tinyMCE.settings;l.fullscreenEditor=new tinymce.Editor("mce_fullscreen",m);l.fullscreenEditor.onInit.add(function(){l.loadState(l.fullscreenEditor)});l.fullscreenEditor.render();l.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");l.fullscreenElement.update();l.resizeFunc=tinymce.dom.Event.add(b.win,"resize",function(){var v=tinymce.DOM.getViewPort(),t=l.fullscreenEditor,s,u;s=t.dom.getSize(t.getContainer().getElementsByTagName("table")[0]);u=t.dom.getSize(t.getContainer().getElementsByTagName("iframe")[0]);t.theme.resizeTo(v.w-s.w+u.w,v.h-s.h+u.h)})}});i.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});i.onNodeChange.add(function(q,p){p.setActive("fullscreen",q.getParam("fullscreen_is_enabled"))});l.loadState=function(p){if(!(p&&l.fullscreenSettings)){throw"No fullscreen editor to load to"}a(i,p,l.fullscreenSettings.bookmark);p.focus()};l.saveState=function(q){if(!(q&&l.fullscreenSettings)){throw"No fullscreen editor to restore from"}var p=l.fullscreenSettings;a(q,i,q.selection.getBookmark());if(!i.getParam("fullscreen_new_window")){tinymce.dom.Event.remove(b.win,"resize",l.resizeFunc);delete l.resizeFunc;b.remove("mce_fullscreen_container");b.doc.documentElement.style.overflow=p.fullscreen_html_overflow;b.setStyle(b.doc.body,"overflow",p.fullscreen_overflow);b.win.scrollTo(p.fullscreen_scrollx,p.fullscreen_scrolly)}tinyMCE.settings=tinyMCE.oldSettings;delete tinyMCE.oldSettings;delete l.fullscreenEditor;delete l.fullscreenElement;delete l.fullscreenSettings;b.win.setTimeout(function(){i.selection.moveToBookmark(j);i.focus()},10)}},getInfo:function(){return{longname:"Fullscreen",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("fullscreen",tinymce.plugins.FullScreenPlugin)})(); \ No newline at end of file diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js index 524b487aa..bec886f74 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js @@ -11,29 +11,48 @@ (function() { var DOM = tinymce.DOM; + // State Transfer function + var transferState = function(oldEditor, newEditor, bookmark) { + var transferColorButtonState = function(swapme) { + var c = oldEditor.controlManager.get(swapme); + var newC = newEditor.controlManager.get(swapme); + + if (c && newC) { + newC.displayColor(c.value); + } + + }; + + transferColorButtonState('forecolor'); + transferColorButtonState('backcolor'); + newEditor.setContent(oldEditor.getContent({format : 'raw'}), {format : 'raw'}); + newEditor.selection.moveToBookmark(bookmark); + + if (oldEditor.plugins.spellchecker && newEditor.plugins.spellchecker) { + newEditor.plugins.spellchecker.setLanguage(oldEditor.plugins.spellchecker.selectedLang); + } + }; + tinymce.create('tinymce.plugins.FullScreenPlugin', { init : function(ed, url) { - var t = this, s = {}, vp, posCss; - - t.editor = ed; + var t = this, s = {}, de = DOM.doc.documentElement, vp, fullscreen_overflow, fullscreen_html_overflow, fullscreen_scrollx, fullscreen_scrolly, posCss, bookmark; // Register commands ed.addCommand('mceFullScreen', function() { - var win, de = DOM.doc.documentElement; + var win, oed; if (ed.getParam('fullscreen_is_enabled')) { if (ed.getParam('fullscreen_new_window')) - closeFullscreen(); // Call to close in new window + closeFullscreen(); // Call to close in fullscreen.htm else { DOM.win.setTimeout(function() { - tinymce.dom.Event.remove(DOM.win, 'resize', t.resizeFunc); - tinyMCE.get(ed.getParam('fullscreen_editor_id')).setContent(ed.getContent()); - tinyMCE.remove(ed); - DOM.remove('mce_fullscreen_container'); - de.style.overflow = ed.getParam('fullscreen_html_overflow'); - DOM.setStyle(DOM.doc.body, 'overflow', ed.getParam('fullscreen_overflow')); - DOM.win.scrollTo(ed.getParam('fullscreen_scrollx'), ed.getParam('fullscreen_scrolly')); - tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings + var fullscreenEditor = ed; + + // find the editor that opened this one, execute restore function there + var originalEditor = tinyMCE.get(fullscreenEditor.getParam('fullscreen_editor_id')); + originalEditor.plugins.fullscreen.saveState(fullscreenEditor); + + tinyMCE.remove(fullscreenEditor); }, 10); } @@ -41,6 +60,9 @@ } if (ed.getParam('fullscreen_new_window')) { + t.fullscreenSettings = { + bookmark: ed.selection.getBookmark() + }; win = DOM.win.open(url + "/fullscreen.htm", "mceFullScreenPopup", "fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width=" + screen.availWidth + ",height=" + screen.availHeight); try { win.resizeTo(screen.availWidth, screen.availHeight); @@ -48,27 +70,26 @@ // Ignore } } else { - tinyMCE.oldSettings = tinyMCE.settings; // Store old settings - s.fullscreen_overflow = DOM.getStyle(DOM.doc.body, 'overflow', 1) || 'auto'; - s.fullscreen_html_overflow = DOM.getStyle(de, 'overflow', 1); + fullscreen_overflow = DOM.getStyle(DOM.doc.body, 'overflow', 1) || 'auto'; + fullscreen_html_overflow = DOM.getStyle(de, 'overflow', 1); vp = DOM.getViewPort(); - s.fullscreen_scrollx = vp.x; - s.fullscreen_scrolly = vp.y; + fullscreen_scrollx = vp.x; + fullscreen_scrolly = vp.y; // Fixes an Opera bug where the scrollbars doesn't reappear - if (tinymce.isOpera && s.fullscreen_overflow == 'visible') - s.fullscreen_overflow = 'auto'; + if (tinymce.isOpera && fullscreen_overflow == 'visible') + fullscreen_overflow = 'auto'; // Fixes an IE bug where horizontal scrollbars would appear - if (tinymce.isIE && s.fullscreen_overflow == 'scroll') - s.fullscreen_overflow = 'auto'; + if (tinymce.isIE && fullscreen_overflow == 'scroll') + fullscreen_overflow = 'auto'; // Fixes an IE bug where the scrollbars doesn't reappear - if (tinymce.isIE && (s.fullscreen_html_overflow == 'visible' || s.fullscreen_html_overflow == 'scroll')) - s.fullscreen_html_overflow = 'auto'; + if (tinymce.isIE && (fullscreen_html_overflow == 'visible' || fullscreen_html_overflow == 'scroll')) + fullscreen_html_overflow = 'auto'; - if (s.fullscreen_overflow == '0px') - s.fullscreen_overflow = ''; + if (fullscreen_overflow == '0px') + fullscreen_overflow = ''; DOM.setStyle(DOM.doc.body, 'overflow', 'hidden'); de.style.overflow = 'hidden'; //Fix for IE6/7 @@ -108,13 +129,21 @@ s[k] = v; }); + t.fullscreenSettings = { + bookmark: ed.selection.getBookmark(), + fullscreen_overflow: fullscreen_overflow, + fullscreen_html_overflow: fullscreen_html_overflow, + fullscreen_scrollx: fullscreen_scrollx, + fullscreen_scrolly: fullscreen_scrolly + }; + if (s.theme_advanced_toolbar_location === 'external') s.theme_advanced_toolbar_location = 'top'; + tinyMCE.oldSettings = tinyMCE.settings; // Store old settings, the Editor constructor overwrites them t.fullscreenEditor = new tinymce.Editor('mce_fullscreen', s); t.fullscreenEditor.onInit.add(function() { - t.fullscreenEditor.setContent(ed.getContent()); - t.fullscreenEditor.focus(); + t.loadState(t.fullscreenEditor); }); t.fullscreenEditor.render(); @@ -141,6 +170,52 @@ ed.onNodeChange.add(function(ed, cm) { cm.setActive('fullscreen', ed.getParam('fullscreen_is_enabled')); }); + + // fullscreenEditor is a param here because in window mode we don't create it + t.loadState = function(fullscreenEditor) { + if (!(fullscreenEditor && t.fullscreenSettings)) { + throw "No fullscreen editor to load to"; + } + + transferState(ed, fullscreenEditor, t.fullscreenSettings.bookmark); + fullscreenEditor.focus(); + + }; + + // fullscreenEditor is a param here because in window mode we don't create it + t.saveState = function(fullscreenEditor) { + if (!(fullscreenEditor && t.fullscreenSettings)) { + throw "No fullscreen editor to restore from"; + } + var settings = t.fullscreenSettings; + + transferState(fullscreenEditor, ed, fullscreenEditor.selection.getBookmark()); + + // cleanup only required if window mode isn't used + if (!ed.getParam('fullscreen_new_window')) { + tinymce.dom.Event.remove(DOM.win, 'resize', t.resizeFunc); + delete t.resizeFunc; + + DOM.remove('mce_fullscreen_container'); + + DOM.doc.documentElement.style.overflow = settings.fullscreen_html_overflow; + DOM.setStyle(DOM.doc.body, 'overflow', settings.fullscreen_overflow); + DOM.win.scrollTo(settings.fullscreen_scrollx, settings.fullscreen_scrolly); + } + tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings + + // clear variables + delete tinyMCE.oldSettings; + delete t.fullscreenEditor; + delete t.fullscreenElement; + delete t.fullscreenSettings; + + // allow the fullscreen editor to be removed before restoring focus and selection + DOM.win.setTimeout(function() { + ed.selection.moveToBookmark(bookmark); + ed.focus(); + }, 10); + }; }, getInfo : function() { diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm index ffe528e41..baf028b79 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm @@ -46,7 +46,7 @@ settings['strict_loading_mode'] = true; settings.save_onsavecallback = function() { - window.opener.tinyMCE.get(oeID).setContent(tinyMCE.get('fullscreenarea').getContent({format : 'raw'}), {format : 'raw'}); + moveContent(); window.opener.tinyMCE.get(oeID).execCommand('mceSave'); window.close(); }; @@ -56,11 +56,15 @@ } function moveContent() { - window.opener.tinyMCE.get(oeID).setContent(tinyMCE.activeEditor.getContent()); + // find the original editor, execute restore state in it's plugin instance + window.opener.tinyMCE.get(oeID).plugins.fullscreen.saveState(tinyMCE.activeEditor); + + // prevent moveContent from being called twice - e.g. if the unloadHandler runs after moveContent() + tinymce.dom.Event.remove(window, "beforeunload", unloadHandler); } function closeFullscreen() { - moveContent(); + // moveContent() will be called by the unload handler window.close(); } @@ -78,17 +82,20 @@ function render() { var e = document.getElementById('fullscreenarea'), vp, ed, ow, oh, dom = tinymce.DOM; - e.value = window.opener.tinyMCE.get(oeID).getContent(); - vp = dom.getViewPort(); settings.width = vp.w; settings.height = vp.h - 15; - tinymce.dom.Event.add(window, 'resize', function() { - var vp = dom.getViewPort(); + settings.oninit = function() { + var ed = tinyMCE.activeEditor; + window.opener.tinyMCE.get(oeID).plugins.fullscreen.loadState(ed); - tinyMCE.activeEditor.theme.resizeTo(vp.w, vp.h); - }); + tinymce.dom.Event.add(window, 'resize', function() { + var vp = dom.getViewPort(); + + tinyMCE.activeEditor.theme.resizeTo(vp.w, vp.h); + }); + } tinyMCE.init(settings); } diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js index 8bb96f9cb..2d71a2e17 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js @@ -1 +1 @@ -(function(){var d=tinymce.DOM,b=tinymce.dom.Element,a=tinymce.dom.Event,e=tinymce.each,c=tinymce.is;tinymce.create("tinymce.plugins.InlinePopups",{init:function(f,g){f.onBeforeRenderUI.add(function(){f.windowManager=new tinymce.InlineWindowManager(f);d.loadCSS(g+"/skins/"+(f.settings.inlinepopups_skin||"clearlooks2")+"/window.css")})},getInfo:function(){return{longname:"InlinePopups",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.create("tinymce.InlineWindowManager:tinymce.WindowManager",{InlineWindowManager:function(f){var g=this;g.parent(f);g.zIndex=300000;g.count=0;g.windows={}},open:function(s,j){var z=this,i,k="",r=z.editor,g=0,v=0,h,m,o,q,l,x,y,n;s=s||{};j=j||{};if(!s.inline){return z.parent(s,j)}n=z._frontWindow();if(n&&d.get(n.id+"_ifr")){n.focussedElement=d.get(n.id+"_ifr").contentWindow.document.activeElement}if(!s.type){z.bookmark=r.selection.getBookmark(1)}i=d.uniqueId();h=d.getViewPort();s.width=parseInt(s.width||320);s.height=parseInt(s.height||240)+(tinymce.isIE?8:0);s.min_width=parseInt(s.min_width||150);s.min_height=parseInt(s.min_height||100);s.max_width=parseInt(s.max_width||2000);s.max_height=parseInt(s.max_height||2000);s.left=s.left||Math.round(Math.max(h.x,h.x+(h.w/2)-(s.width/2)));s.top=s.top||Math.round(Math.max(h.y,h.y+(h.h/2)-(s.height/2)));s.movable=s.resizable=true;j.mce_width=s.width;j.mce_height=s.height;j.mce_inline=true;j.mce_window_id=i;j.mce_auto_focus=s.auto_focus;z.features=s;z.params=j;z.onOpen.dispatch(z,s,j);if(s.type){k+=" mceModal";if(s.type){k+=" mce"+s.type.substring(0,1).toUpperCase()+s.type.substring(1)}s.resizable=false}if(s.statusbar){k+=" mceStatusbar"}if(s.resizable){k+=" mceResizable"}if(s.minimizable){k+=" mceMinimizable"}if(s.maximizable){k+=" mceMaximizable"}if(s.movable){k+=" mceMovable"}z._addAll(d.doc.body,["div",{id:i,role:"dialog","aria-labelledby":s.type?i+"_content":i+"_title","class":(r.settings.inlinepopups_skin||"clearlooks2")+(tinymce.isIE&&window.getSelection?" ie9":""),style:"width:100px;height:100px"},["div",{id:i+"_wrapper","class":"mceWrapper"+k},["div",{id:i+"_top","class":"mceTop"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_title"},s.title||""]],["div",{id:i+"_middle","class":"mceMiddle"},["div",{id:i+"_left","class":"mceLeft",tabindex:"0"}],["span",{id:i+"_content"}],["div",{id:i+"_right","class":"mceRight",tabindex:"0"}]],["div",{id:i+"_bottom","class":"mceBottom"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_status"},"Content"]],["a",{"class":"mceMove",tabindex:"-1",href:"javascript:;"}],["a",{"class":"mceMin",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMax",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMed",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceClose",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{id:i+"_resize_n","class":"mceResize mceResizeN",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_s","class":"mceResize mceResizeS",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_w","class":"mceResize mceResizeW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_e","class":"mceResize mceResizeE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_nw","class":"mceResize mceResizeNW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_ne","class":"mceResize mceResizeNE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_sw","class":"mceResize mceResizeSW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_se","class":"mceResize mceResizeSE",tabindex:"-1",href:"javascript:;"}]]]);d.setStyles(i,{top:-10000,left:-10000});if(tinymce.isGecko){d.setStyle(i,"overflow","auto")}if(!s.type){g+=d.get(i+"_left").clientWidth;g+=d.get(i+"_right").clientWidth;v+=d.get(i+"_top").clientHeight;v+=d.get(i+"_bottom").clientHeight}d.setStyles(i,{top:s.top,left:s.left,width:s.width+g,height:s.height+v});y=s.url||s.file;if(y){if(tinymce.relaxedDomain){y+=(y.indexOf("?")==-1?"?":"&")+"mce_rdomain="+tinymce.relaxedDomain}y=tinymce._addVer(y)}if(!s.type){d.add(i+"_content","iframe",{id:i+"_ifr",src:'javascript:""',frameBorder:0,style:"border:0;width:10px;height:10px"});d.setStyles(i+"_ifr",{width:s.width,height:s.height});d.setAttrib(i+"_ifr","src",y)}else{d.add(i+"_wrapper","a",{id:i+"_ok","class":"mceButton mceOk",href:"javascript:;",onmousedown:"return false;"},"Ok");if(s.type=="confirm"){d.add(i+"_wrapper","a",{"class":"mceButton mceCancel",href:"javascript:;",onmousedown:"return false;"},"Cancel")}d.add(i+"_middle","div",{"class":"mceIcon"});d.setHTML(i+"_content",s.content.replace("\n","
"));a.add(i,"keyup",function(f){var p=27;if(f.keyCode===p){s.button_func(false);return a.cancel(f)}});a.add(i,"keydown",function(f){var t,p=9;if(f.keyCode===p){t=d.select("a.mceCancel",i+"_wrapper")[0];if(t&&t!==f.target){t.focus()}else{d.get(i+"_ok").focus()}return a.cancel(f)}})}o=a.add(i,"mousedown",function(t){var u=t.target,f,p;f=z.windows[i];z.focus(i);if(u.nodeName=="A"||u.nodeName=="a"){if(u.className=="mceClose"){z.close(null,i);return a.cancel(t)}else{if(u.className=="mceMax"){f.oldPos=f.element.getXY();f.oldSize=f.element.getSize();p=d.getViewPort();p.w-=2;p.h-=2;f.element.moveTo(p.x,p.y);f.element.resizeTo(p.w,p.h);d.setStyles(i+"_ifr",{width:p.w-f.deltaWidth,height:p.h-f.deltaHeight});d.addClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMed"){f.element.moveTo(f.oldPos.x,f.oldPos.y);f.element.resizeTo(f.oldSize.w,f.oldSize.h);f.iframeElement.resizeTo(f.oldSize.w-f.deltaWidth,f.oldSize.h-f.deltaHeight);d.removeClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMove"){return z._startDrag(i,t,u.className)}else{if(d.hasClass(u,"mceResize")){return z._startDrag(i,t,u.className.substring(13))}}}}}}});q=a.add(i,"click",function(f){var p=f.target;z.focus(i);if(p.nodeName=="A"||p.nodeName=="a"){switch(p.className){case"mceClose":z.close(null,i);return a.cancel(f);case"mceButton mceOk":case"mceButton mceCancel":s.button_func(p.className=="mceButton mceOk");return a.cancel(f)}}});a.add([i+"_left",i+"_right"],"focus",function(p){var t=d.get(i+"_ifr");if(t){var f=t.contentWindow.document.body;var u=d.select(":input:enabled,*[tabindex=0]",f);if(p.target.id===(i+"_left")){u[u.length-1].focus()}else{u[0].focus()}}else{d.get(i+"_ok").focus()}});x=z.windows[i]={id:i,mousedown_func:o,click_func:q,element:new b(i,{blocker:1,container:r.getContainer()}),iframeElement:new b(i+"_ifr"),features:s,deltaWidth:g,deltaHeight:v};x.iframeElement.on("focus",function(){z.focus(i)});if(z.count==0&&z.editor.getParam("dialog_type","modal")=="modal"){d.add(d.doc.body,"div",{id:"mceModalBlocker","class":(z.editor.settings.inlinepopups_skin||"clearlooks2")+"_modalBlocker",style:{zIndex:z.zIndex-1}});d.show("mceModalBlocker");d.setAttrib(d.doc.body,"aria-hidden","true")}else{d.setStyle("mceModalBlocker","z-index",z.zIndex-1)}if(tinymce.isIE6||/Firefox\/2\./.test(navigator.userAgent)||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceModalBlocker",{position:"absolute",left:h.x,top:h.y,width:h.w-2,height:h.h-2})}d.setAttrib(i,"aria-hidden","false");z.focus(i);z._fixIELayout(i,1);if(d.get(i+"_ok")){d.get(i+"_ok").focus()}z.count++;return x},focus:function(h){var g=this,f;if(f=g.windows[h]){f.zIndex=this.zIndex++;f.element.setStyle("zIndex",f.zIndex);f.element.update();h=h+"_wrapper";d.removeClass(g.lastId,"mceFocus");d.addClass(h,"mceFocus");g.lastId=h;if(f.focussedElement){f.focussedElement.focus()}else{if(d.get(h+"_ok")){d.get(f.id+"_ok").focus()}else{if(d.get(f.id+"_ifr")){d.get(f.id+"_ifr").focus()}}}}},_addAll:function(k,h){var g,l,f=this,j=tinymce.DOM;if(c(h,"string")){k.appendChild(j.doc.createTextNode(h))}else{if(h.length){k=k.appendChild(j.create(h[0],h[1]));for(g=2;gf){g=h;f=h.zIndex}});return g},setTitle:function(f,g){var h;f=this._findId(f);if(h=d.get(f+"_title")){h.innerHTML=d.encode(g)}},alert:function(g,f,j){var i=this,h;h=i.open({title:i,type:"alert",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},confirm:function(g,f,j){var i=this,h;h=i.open({title:i,type:"confirm",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},_findId:function(f){var g=this;if(typeof(f)=="string"){return f}e(g.windows,function(h){var i=d.get(h.id+"_ifr");if(i&&f==i.contentWindow){f=h.id;return false}});return f},_fixIELayout:function(i,h){var f,g;if(!tinymce.isIE6){return}e(["n","s","w","e","nw","ne","sw","se"],function(j){var k=d.get(i+"_resize_"+j);d.setStyles(k,{width:h?k.clientWidth:"",height:h?k.clientHeight:"",cursor:d.getStyle(k,"cursor",1)});d.setStyle(i+"_bottom","bottom","-1px");k=0});if(f=this.windows[i]){f.element.hide();f.element.show();e(d.select("div,a",i),function(k,j){if(k.currentStyle.backgroundImage!="none"){g=new Image();g.src=k.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/,"$1")}});d.get(i).style.filter=""}}});tinymce.PluginManager.add("inlinepopups",tinymce.plugins.InlinePopups)})(); \ No newline at end of file +(function(){var d=tinymce.DOM,b=tinymce.dom.Element,a=tinymce.dom.Event,e=tinymce.each,c=tinymce.is;tinymce.create("tinymce.plugins.InlinePopups",{init:function(f,g){f.onBeforeRenderUI.add(function(){f.windowManager=new tinymce.InlineWindowManager(f);d.loadCSS(g+"/skins/"+(f.settings.inlinepopups_skin||"clearlooks2")+"/window.css")})},getInfo:function(){return{longname:"InlinePopups",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.create("tinymce.InlineWindowManager:tinymce.WindowManager",{InlineWindowManager:function(f){var g=this;g.parent(f);g.zIndex=300000;g.count=0;g.windows={}},open:function(s,j){var z=this,i,k="",r=z.editor,g=0,v=0,h,m,o,q,l,x,y,n;s=s||{};j=j||{};if(!s.inline){return z.parent(s,j)}n=z._frontWindow();if(n&&d.get(n.id+"_ifr")){n.focussedElement=d.get(n.id+"_ifr").contentWindow.document.activeElement}if(!s.type){z.bookmark=r.selection.getBookmark(1)}i=d.uniqueId("mce_inlinepopups_");h=d.getViewPort();s.width=parseInt(s.width||320);s.height=parseInt(s.height||240)+(tinymce.isIE?8:0);s.min_width=parseInt(s.min_width||150);s.min_height=parseInt(s.min_height||100);s.max_width=parseInt(s.max_width||2000);s.max_height=parseInt(s.max_height||2000);s.left=s.left||Math.round(Math.max(h.x,h.x+(h.w/2)-(s.width/2)));s.top=s.top||Math.round(Math.max(h.y,h.y+(h.h/2)-(s.height/2)));s.movable=s.resizable=true;j.mce_width=s.width;j.mce_height=s.height;j.mce_inline=true;j.mce_window_id=i;j.mce_auto_focus=s.auto_focus;z.features=s;z.params=j;z.onOpen.dispatch(z,s,j);if(s.type){k+=" mceModal";if(s.type){k+=" mce"+s.type.substring(0,1).toUpperCase()+s.type.substring(1)}s.resizable=false}if(s.statusbar){k+=" mceStatusbar"}if(s.resizable){k+=" mceResizable"}if(s.minimizable){k+=" mceMinimizable"}if(s.maximizable){k+=" mceMaximizable"}if(s.movable){k+=" mceMovable"}z._addAll(d.doc.body,["div",{id:i,role:"dialog","aria-labelledby":s.type?i+"_content":i+"_title","class":(r.settings.inlinepopups_skin||"clearlooks2")+(tinymce.isIE&&window.getSelection?" ie9":""),style:"width:100px;height:100px"},["div",{id:i+"_wrapper","class":"mceWrapper"+k},["div",{id:i+"_top","class":"mceTop"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_title"},s.title||""]],["div",{id:i+"_middle","class":"mceMiddle"},["div",{id:i+"_left","class":"mceLeft",tabindex:"0"}],["span",{id:i+"_content"}],["div",{id:i+"_right","class":"mceRight",tabindex:"0"}]],["div",{id:i+"_bottom","class":"mceBottom"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_status"},"Content"]],["a",{"class":"mceMove",tabindex:"-1",href:"javascript:;"}],["a",{"class":"mceMin",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMax",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMed",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceClose",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{id:i+"_resize_n","class":"mceResize mceResizeN",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_s","class":"mceResize mceResizeS",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_w","class":"mceResize mceResizeW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_e","class":"mceResize mceResizeE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_nw","class":"mceResize mceResizeNW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_ne","class":"mceResize mceResizeNE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_sw","class":"mceResize mceResizeSW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_se","class":"mceResize mceResizeSE",tabindex:"-1",href:"javascript:;"}]]]);d.setStyles(i,{top:-10000,left:-10000});if(tinymce.isGecko){d.setStyle(i,"overflow","auto")}if(!s.type){g+=d.get(i+"_left").clientWidth;g+=d.get(i+"_right").clientWidth;v+=d.get(i+"_top").clientHeight;v+=d.get(i+"_bottom").clientHeight}d.setStyles(i,{top:s.top,left:s.left,width:s.width+g,height:s.height+v});y=s.url||s.file;if(y){if(tinymce.relaxedDomain){y+=(y.indexOf("?")==-1?"?":"&")+"mce_rdomain="+tinymce.relaxedDomain}y=tinymce._addVer(y)}if(!s.type){d.add(i+"_content","iframe",{id:i+"_ifr",src:'javascript:""',frameBorder:0,style:"border:0;width:10px;height:10px"});d.setStyles(i+"_ifr",{width:s.width,height:s.height});d.setAttrib(i+"_ifr","src",y)}else{d.add(i+"_wrapper","a",{id:i+"_ok","class":"mceButton mceOk",href:"javascript:;",onmousedown:"return false;"},"Ok");if(s.type=="confirm"){d.add(i+"_wrapper","a",{"class":"mceButton mceCancel",href:"javascript:;",onmousedown:"return false;"},"Cancel")}d.add(i+"_middle","div",{"class":"mceIcon"});d.setHTML(i+"_content",s.content.replace("\n","
"));a.add(i,"keyup",function(f){var p=27;if(f.keyCode===p){s.button_func(false);return a.cancel(f)}});a.add(i,"keydown",function(f){var t,p=9;if(f.keyCode===p){t=d.select("a.mceCancel",i+"_wrapper")[0];if(t&&t!==f.target){t.focus()}else{d.get(i+"_ok").focus()}return a.cancel(f)}})}o=a.add(i,"mousedown",function(t){var u=t.target,f,p;f=z.windows[i];z.focus(i);if(u.nodeName=="A"||u.nodeName=="a"){if(u.className=="mceClose"){z.close(null,i);return a.cancel(t)}else{if(u.className=="mceMax"){f.oldPos=f.element.getXY();f.oldSize=f.element.getSize();p=d.getViewPort();p.w-=2;p.h-=2;f.element.moveTo(p.x,p.y);f.element.resizeTo(p.w,p.h);d.setStyles(i+"_ifr",{width:p.w-f.deltaWidth,height:p.h-f.deltaHeight});d.addClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMed"){f.element.moveTo(f.oldPos.x,f.oldPos.y);f.element.resizeTo(f.oldSize.w,f.oldSize.h);f.iframeElement.resizeTo(f.oldSize.w-f.deltaWidth,f.oldSize.h-f.deltaHeight);d.removeClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMove"){return z._startDrag(i,t,u.className)}else{if(d.hasClass(u,"mceResize")){return z._startDrag(i,t,u.className.substring(13))}}}}}}});q=a.add(i,"click",function(f){var p=f.target;z.focus(i);if(p.nodeName=="A"||p.nodeName=="a"){switch(p.className){case"mceClose":z.close(null,i);return a.cancel(f);case"mceButton mceOk":case"mceButton mceCancel":s.button_func(p.className=="mceButton mceOk");return a.cancel(f)}}});a.add([i+"_left",i+"_right"],"focus",function(p){var t=d.get(i+"_ifr");if(t){var f=t.contentWindow.document.body;var u=d.select(":input:enabled,*[tabindex=0]",f);if(p.target.id===(i+"_left")){u[u.length-1].focus()}else{u[0].focus()}}else{d.get(i+"_ok").focus()}});x=z.windows[i]={id:i,mousedown_func:o,click_func:q,element:new b(i,{blocker:1,container:r.getContainer()}),iframeElement:new b(i+"_ifr"),features:s,deltaWidth:g,deltaHeight:v};x.iframeElement.on("focus",function(){z.focus(i)});if(z.count==0&&z.editor.getParam("dialog_type","modal")=="modal"){d.add(d.doc.body,"div",{id:"mceModalBlocker","class":(z.editor.settings.inlinepopups_skin||"clearlooks2")+"_modalBlocker",style:{zIndex:z.zIndex-1}});d.show("mceModalBlocker");d.setAttrib(d.doc.body,"aria-hidden","true")}else{d.setStyle("mceModalBlocker","z-index",z.zIndex-1)}if(tinymce.isIE6||/Firefox\/2\./.test(navigator.userAgent)||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceModalBlocker",{position:"absolute",left:h.x,top:h.y,width:h.w-2,height:h.h-2})}d.setAttrib(i,"aria-hidden","false");z.focus(i);z._fixIELayout(i,1);if(d.get(i+"_ok")){d.get(i+"_ok").focus()}z.count++;return x},focus:function(h){var g=this,f;if(f=g.windows[h]){f.zIndex=this.zIndex++;f.element.setStyle("zIndex",f.zIndex);f.element.update();h=h+"_wrapper";d.removeClass(g.lastId,"mceFocus");d.addClass(h,"mceFocus");g.lastId=h;if(f.focussedElement){f.focussedElement.focus()}else{if(d.get(h+"_ok")){d.get(f.id+"_ok").focus()}else{if(d.get(f.id+"_ifr")){d.get(f.id+"_ifr").focus()}}}}},_addAll:function(k,h){var g,l,f=this,j=tinymce.DOM;if(c(h,"string")){k.appendChild(j.doc.createTextNode(h))}else{if(h.length){k=k.appendChild(j.create(h[0],h[1]));for(g=2;gf){g=h;f=h.zIndex}});return g},setTitle:function(f,g){var h;f=this._findId(f);if(h=d.get(f+"_title")){h.innerHTML=d.encode(g)}},alert:function(g,f,j){var i=this,h;h=i.open({title:i,type:"alert",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},confirm:function(g,f,j){var i=this,h;h=i.open({title:i,type:"confirm",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},_findId:function(f){var g=this;if(typeof(f)=="string"){return f}e(g.windows,function(h){var i=d.get(h.id+"_ifr");if(i&&f==i.contentWindow){f=h.id;return false}});return f},_fixIELayout:function(i,h){var f,g;if(!tinymce.isIE6){return}e(["n","s","w","e","nw","ne","sw","se"],function(j){var k=d.get(i+"_resize_"+j);d.setStyles(k,{width:h?k.clientWidth:"",height:h?k.clientHeight:"",cursor:d.getStyle(k,"cursor",1)});d.setStyle(i+"_bottom","bottom","-1px");k=0});if(f=this.windows[i]){f.element.hide();f.element.show();e(d.select("div,a",i),function(k,j){if(k.currentStyle.backgroundImage!="none"){g=new Image();g.src=k.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/,"$1")}});d.get(i).style.filter=""}}});tinymce.PluginManager.add("inlinepopups",tinymce.plugins.InlinePopups)})(); \ No newline at end of file diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js index 67123ca31..da6ee2493 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js @@ -55,12 +55,12 @@ if (parentWindow && DOM.get(parentWindow.id + '_ifr')) { parentWindow.focussedElement = DOM.get(parentWindow.id + '_ifr').contentWindow.document.activeElement; } - + // Only store selection if the type is a normal window if (!f.type) t.bookmark = ed.selection.getBookmark(1); - id = DOM.uniqueId(); + id = DOM.uniqueId("mce_inlinepopups_"); // Use a prefix so this can't conflict with other ids vp = DOM.getViewPort(); f.width = parseInt(f.width || 320); f.height = parseInt(f.height || 240) + (tinymce.isIE ? 8 : 0); @@ -111,17 +111,17 @@ opt += ' mceMovable'; // Create DOM objects - t._addAll(DOM.doc.body, - ['div', {id : id, role : 'dialog', 'aria-labelledby': f.type ? id + '_content' : id + '_title', 'class' : (ed.settings.inlinepopups_skin || 'clearlooks2') + (tinymce.isIE && window.getSelection ? ' ie9' : ''), style : 'width:100px;height:100px'}, + t._addAll(DOM.doc.body, + ['div', {id : id, role : 'dialog', 'aria-labelledby': f.type ? id + '_content' : id + '_title', 'class' : (ed.settings.inlinepopups_skin || 'clearlooks2') + (tinymce.isIE && window.getSelection ? ' ie9' : ''), style : 'width:100px;height:100px'}, ['div', {id : id + '_wrapper', 'class' : 'mceWrapper' + opt}, - ['div', {id : id + '_top', 'class' : 'mceTop'}, + ['div', {id : id + '_top', 'class' : 'mceTop'}, ['div', {'class' : 'mceLeft'}], ['div', {'class' : 'mceCenter'}], ['div', {'class' : 'mceRight'}], ['span', {id : id + '_title'}, f.title || ''] ], - ['div', {id : id + '_middle', 'class' : 'mceMiddle'}, + ['div', {id : id + '_middle', 'class' : 'mceMiddle'}, ['div', {id : id + '_left', 'class' : 'mceLeft', tabindex : '0'}], ['span', {id : id + '_content'}], ['div', {id : id + '_right', 'class' : 'mceRight', tabindex : '0'}] @@ -188,7 +188,7 @@ DOM.add(id + '_middle', 'div', {'class' : 'mceIcon'}); DOM.setHTML(id + '_content', f.content.replace('\n', '
')); - + Event.add(id, 'keyup', function(evt) { var VK_ESCAPE = 27; if (evt.keyCode === VK_ESCAPE) { @@ -268,7 +268,7 @@ } } }); - + // Make sure the tab order loops within the dialog. Event.add([id + '_left', id + '_right'], 'focus', function(evt) { var iframe = DOM.get(id + '_ifr'); @@ -284,7 +284,7 @@ DOM.get(id + '_ok').focus(); } }); - + // Add window w = t.windows[id] = { id : id, @@ -341,7 +341,7 @@ DOM.removeClass(t.lastId, 'mceFocus'); DOM.addClass(id, 'mceFocus'); t.lastId = id; - + if (w.focussedElement) { w.focussedElement.focus(); } else if (DOM.get(id + '_ok')) { @@ -486,7 +486,7 @@ dw = v; } - + if (dh < (v = w.features.min_height - sz.h)) { if (dy !== 0) dy += dh - v; @@ -505,7 +505,7 @@ if (dx + dy !== 0) { if (sx + dx < 0) dx = 0; - + if (sy + dy < 0) dy = 0; @@ -567,7 +567,7 @@ t.focus(fw.id); } }, - + // Find front most window _frontWindow : function() { var fw, ix = 0; diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js index 9ac42e0d2..778d838e5 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js @@ -1 +1 @@ -(function(){var b=tinymce.explode("id,name,width,height,style,align,class,hspace,vspace,bgcolor,type"),a=tinymce.makeMap(b.join(",")),f=tinymce.html.Node,d,i,h=tinymce.util.JSON,g;d=[["Flash","d27cdb6e-ae6d-11cf-96b8-444553540000","application/x-shockwave-flash","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],["ShockWave","166b1bca-3f9c-11cf-8075-444553540000","application/x-director","http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"],["WindowsMedia","6bf52a52-394a-11d3-b153-00c04f79faa6,22d6f312-b0f6-11d0-94ab-0080c74c7e95,05589fa1-c356-11ce-bf01-00aa0055595a","application/x-mplayer2","http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"],["QuickTime","02bf25d5-8c17-4b23-bc80-d3488abddc6b","video/quicktime","http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"],["RealMedia","cfcdaa03-8be4-11cf-b84b-0020afbbccfa","audio/x-pn-realaudio-plugin","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],["Java","8ad9c840-044e-11d1-b3e9-00805f499d93","application/x-java-applet","http://java.sun.com/products/plugin/autodl/jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0"],["Silverlight","dfeaf541-f3e1-4c24-acac-99c30715084a","application/x-silverlight-2"],["Iframe"],["Video"],["EmbeddedAudio"],["Audio"]];function e(j){return typeof(j)=="string"?j.replace(/[^0-9%]/g,""):j}function c(m){var l,j,k;if(m&&!m.splice){j=[];for(k=0;true;k++){if(m[k]){j[k]=m[k]}else{break}}return j}return m}tinymce.create("tinymce.plugins.MediaPlugin",{init:function(n,j){var r=this,l={},m,p,q,k;function o(s){return s&&s.nodeName==="IMG"&&n.dom.hasClass(s,"mceItemMedia")}r.editor=n;r.url=j;i="";for(m=0;m0){O+=(O?"&":"")+P+"="+escape(Q)}});if(O.length){G.params.flashvars=O}L=p.getParam("flash_video_player_params",{allowfullscreen:true,allowscriptaccess:true});tinymce.each(L,function(Q,P){G.params[P]=""+Q})}}G=z.attr("data-mce-json");if(!G){return}G=h.parse(G);q=this.getType(z.attr("class"));B=z.attr("data-mce-style");if(!B){B=z.attr("style");if(B){B=p.dom.serializeStyle(p.dom.parseStyle(B,"img"))}}G.width=z.attr("width")||G.width;G.height=z.attr("height")||G.height;if(q.name==="Iframe"){x=new f("iframe",1);tinymce.each(b,function(n){var J=z.attr(n);if(n=="class"&&J){J=J.replace(/mceItem.+ ?/g,"")}if(J&&J.length>0){x.attr(n,J)}});for(I in G.params){x.attr(I,G.params[I])}x.attr({style:B,src:G.params.src});z.replace(x);return}if(this.editor.settings.media_use_script){x=new f("script",1).attr("type","text/javascript");y=new f("#text",3);y.value="write"+q.name+"("+h.serialize(tinymce.extend(G.params,{width:z.attr("width"),height:z.attr("height")}))+");";x.append(y);z.replace(x);return}if(q.name==="Video"&&G.video.sources[0]){C=new f("video",1).attr(tinymce.extend({id:z.attr("id"),width:e(z.attr("width")),height:e(z.attr("height")),style:B},G.video.attrs));if(G.video.attrs){l=G.video.attrs.poster}k=G.video.sources=c(G.video.sources);for(A=0;A0){N+=(N?"&":"")+O+"="+escape(P)}});if(N.length){F.params.flashvars=N}K=q.getParam("flash_video_player_params",{allowfullscreen:true,allowscriptaccess:true});tinymce.each(K,function(P,O){F.params[O]=""+P})}}function x(K,J,I,L){G=new h("object",1).attr({id:K.attr("id"),width:f(K.attr("width")),height:f(K.attr("height")),style:J});tinymce.each(I,function(N){var O=L[N];if(N=="class"&&O){O=O.replace(/mceItem.+ ?/g,"")}if(O&&N!="type"){G.attr(N,O)}});for(var n in L.params){var M;M=new h("param",1);M.shortEnded=true;y=L.params[n];if(n==="src"&&r.name==="WindowsMedia"){n="url"}M.attr({name:n,value:y});G.append(M)}if(L.object_html){y=new h("#text",3);y.raw=true;y.value=L.object_html;G.append(y)}if(D){D.append(G)}return G}F=z.attr("data-mce-json");if(!F){return}F=i.parse(F);r=this.getType(z.attr("class"));C=z.attr("data-mce-style");if(!C){C=z.attr("style");if(C){C=q.dom.serializeStyle(q.dom.parseStyle(C,"img"))}}F.width=z.attr("width")||F.width;F.height=z.attr("height")||F.height;if(r.name==="Iframe"){A=new h("iframe",1);tinymce.each(d,function(n){var I=z.attr(n);if(n=="class"&&I){I=I.replace(/mceItem.+ ?/g,"")}if(I&&I.length>0){A.attr(n,I)}});for(H in F.params){A.attr(H,F.params[H])}A.attr({style:C,src:F.params.src});z.replace(A);return}if(this.editor.settings.media_use_script){A=new h("script",1).attr("type","text/javascript");y=new h("#text",3);y.value="write"+r.name+"("+i.serialize(tinymce.extend(F.params,{width:z.attr("width"),height:z.attr("height")}))+");";A.append(y);z.replace(A);return}if(r.name==="Video"&&F.video.sources[0]){D=new h("video",1).attr(tinymce.extend({id:z.attr("id"),width:f(z.attr("width")),height:f(z.attr("height")),style:C},F.video.attrs));if(F.video.attrs){m=F.video.attrs.poster}l=F.video.sources=e(F.video.sources);for(B=0;B 0) + if (value.length > 0) { flashVarsOutput += (flashVarsOutput ? '&' : '') + name + '=' + escape(value); + } }); - if (flashVarsOutput.length) + if (flashVarsOutput.length) { data.params.flashvars = flashVarsOutput; + } params = editor.getParam('flash_video_player_params', { allowfullscreen: true, @@ -373,11 +390,62 @@ data.params[name] = "" + value; }); } - }; + } + + function createObject (node, style, rootAttributes, data) { + object = new Node('object', 1).attr({ + id : node.attr('id'), + width: normalizeSize(node.attr('width')), + height: normalizeSize(node.attr('height')), + style : style + }); + + tinymce.each(rootAttributes, function(name) { + var value = data[name]; + + if (name == 'class' && value) { + value = value.replace(/mceItem.+ ?/g, ''); + } + + if (value && name != 'type') { + object.attr(name, value); + } + }); + + for (var name in data.params) { + var param; + param = new Node('param', 1); + param.shortEnded = true; + value = data.params[name]; + + // Windows media needs to use url instead of src for the media URL + if (name === 'src' && typeItem.name === 'WindowsMedia') { + name = 'url'; + } + + param.attr({name: name, value: value}); + object.append(param); + } + + if (data.object_html) { + value = new Node('#text', 3); + value.raw = true; + value.value = data.object_html; + object.append(value); + } + + // Append object to video element if it exists + if (video) { + video.append(object); + } + + return object; + } data = node.attr('data-mce-json'); - if (!data) + if (!data) { return; + } data = JSON.parse(data); typeItem = this.getType(node.attr('class')); @@ -386,8 +454,9 @@ if (!style) { style = node.attr('style'); - if (style) + if (style) { style = editor.dom.serializeStyle(editor.dom.parseStyle(style, 'img')); + } } // Use node width/height to override the data width/height when the placeholder is resized @@ -401,15 +470,18 @@ tinymce.each(rootAttributes, function(name) { var value = node.attr(name); - if (name == 'class' && value) + if (name == 'class' && value) { value = value.replace(/mceItem.+ ?/g, ''); + } - if (value && value.length > 0) + if (value && value.length > 0) { replacement.attr(name, value); + } }); - for (name in data.params) + for (name in data.params) { replacement.attr(name, data.params[name]); + } replacement.attr({ style: style, @@ -448,13 +520,15 @@ }, data.video.attrs)); // Get poster source and use that for flash fallback - if (data.video.attrs) + if (data.video.attrs) { posterSrc = data.video.attrs.poster; + } sources = data.video.sources = toArray(data.video.sources); for (i = 0; i < sources.length; i++) { - if (/\.mp4$/.test(sources[i].src)) + if (/\.mp4$/.test(sources[i].src)) { mp4Source = sources[i].src; + } } if (!sources[0].type) { @@ -472,8 +546,9 @@ if (mp4Source) { addPlayer(mp4Source, posterSrc); typeItem = self.getType('flash'); - } else + } else { data.params.src = ''; + } } // Add HTML5 audio element @@ -487,8 +562,9 @@ }, data.video.attrs)); // Get poster source and use that for flash fallback - if (data.video.attrs) + if (data.video.attrs) { posterSrc = data.video.attrs.poster; + } sources = data.video.sources = toArray(data.video.sources); if (!sources[0].type) { @@ -516,12 +592,14 @@ type: node.attr('type') }); - for (name in data.params) + for (name in data.params) { embed.attr(name, data.params[name]); + } tinymce.each(rootAttributes, function(name) { - if (data[name] && name != 'type') + if (data[name] && name != 'type') { embed.attr(name, data[name]); + } }); data.params.src = ''; @@ -530,44 +608,16 @@ // Do we have a params src then we can generate object if (data.params.src) { // Is flv movie add player for it - if (/\.flv$/i.test(data.params.src)) + if (/\.flv$/i.test(data.params.src)) { addPlayer(data.params.src, ''); - - if (args && args.force_absolute) - data.params.src = editor.documentBaseURI.toAbsolute(data.params.src); - - // Create new object element - object = new Node('object', 1).attr({ - id : node.attr('id'), - width: normalizeSize(node.attr('width')), - height: normalizeSize(node.attr('height')), - style : style - }); - - tinymce.each(rootAttributes, function(name) { - var value = data[name]; - - if (name == 'class' && value) - value = value.replace(/mceItem.+ ?/g, ''); - - if (value && name != 'type') - object.attr(name, value); - }); - - // Add params - for (name in data.params) { - param = new Node('param', 1); - param.shortEnded = true; - value = data.params[name]; - - // Windows media needs to use url instead of src for the media URL - if (name === 'src' && typeItem.name === 'WindowsMedia') - name = 'url'; - - param.attr({name: name, value: value}); - object.append(param); } + if (args && args.force_absolute) { + data.params.src = editor.documentBaseURI.toAbsolute(data.params.src); + } + + object = createObject(node, style, rootAttributes, data, video); + // Setup add type and classid if strict is disabled if (this.editor.getParam('media_strict', true)) { object.attr({ @@ -575,10 +625,12 @@ type: typeItem.mimes[0] }); } else { - object.attr({ - classid: "clsid:" + typeItem.clsids[0], - codebase: typeItem.codebase - }); + if(typeItem.clsids[0]) { + object.attr({ + classid: "clsid:" + typeItem.clsids[0], + codebase: typeItem.codebase + }); + } embed = new Node('embed', 1); embed.shortEnded = true; @@ -590,28 +642,22 @@ type: typeItem.mimes[0] }); - for (name in data.params) + for (name in data.params) { embed.attr(name, data.params[name]); + } tinymce.each(rootAttributes, function(name) { - if (data[name] && name != 'type') + if (data[name] && name != 'type') { embed.attr(name, data[name]); + } }); - object.append(embed); } - // Insert raw HTML - if (data.object_html) { - value = new Node('#text', 3); - value.raw = true; - value.value = data.object_html; - object.append(value); - } - - // Append object to video element if it exists - if (video) - video.append(object); + } else if (typeItem.name === 'Object') { + // Remove data.params.src since not in the original object + delete data.params.src; + object = createObject(node, style, rootAttributes, data, video); } if (video) { @@ -635,10 +681,11 @@ } var n = video || audio || object || embed; - if (n) + if (n) { node.replace(n); - else + } else { node.remove(); + } }, /** @@ -662,7 +709,7 @@ inner: true, validate: false }).serialize(node); - }; + } function lookupAttribute(o, attr) { return lookup[(o.attr(attr) || '').toLowerCase()]; @@ -674,16 +721,19 @@ } // If node isn't in document - if (!node.parent) + if (!node.parent) { return; + } // Handle media scripts - if (node.name === 'script') { - if (node.firstChild) + if (node.name === 'script') { + if (node.firstChild) { matches = scriptRegExp.exec(node.firstChild.value); + } - if (!matches) + if (!matches) { return; + } type = matches[1]; data = {video : {}, params : JSON.parse(matches[2])}; @@ -716,12 +766,14 @@ // Get all video attributes attrs = data.video.attrs; - for (name in video.attributes.map) + for (name in video.attributes.map) { attrs[name] = video.attributes.map[name]; + } source = node.attr('src'); - if (source) + if (source) { data.video.sources.push({src : urlConverter.call(urlConverterScope, source, 'src', node.name)}); + } // Get all sources sources = video.getAll("source"); @@ -736,8 +788,9 @@ } // Convert the poster URL - if (attrs.poster) + if (attrs.poster) { attrs.poster = urlConverter.call(urlConverterScope, attrs.poster, 'poster', node.name); + } } // Object element @@ -747,8 +800,9 @@ } // Embed element - if (node.name === 'embed') + if (node.name === 'embed') { embed = node; + } // Iframe element if (node.name === 'iframe') { @@ -758,8 +812,6 @@ if (object) { // Get width/height - width = width || object.attr('width'); - height = height || object.attr('height'); style = style || object.attr('style'); id = id || object.attr('id'); hspace = hspace || object.attr('hspace'); @@ -767,17 +819,23 @@ align = align || object.attr('align'); bgcolor = bgcolor || object.attr('bgcolor'); data.name = object.attr('name'); + data["class"] = object.attr('class'); // Get all object params params = object.getAll("param"); + for (i = 0; i < params.length; i++) { param = params[i]; name = param.remove().attr('name'); - if (!excludedAttrs[name]) + if (!subExcludedAttrs[name]) { data.params[name] = param.attr('value'); + } } + width = width || object.attr('width') || data.params.width; + height = height || object.attr('height') || data.params.height; + data.params.src = data.params.src || object.attr('data'); } @@ -794,9 +852,11 @@ // Get all embed attributes for (name in embed.attributes.map) { - if (!excludedAttrs[name] && !data.params[name]) + if (!excludedAttrs[name] && !data.params[name]) { data.params[name] = embed.attributes.map[name]; + } } + } if (iframe) { @@ -816,8 +876,9 @@ // Get all iframe attributes for (name in iframe.attributes.map) { - if (!excludedAttrs[name] && !data.params[name]) + if (!excludedAttrs[name] && !data.params[name]) { data.params[name] = iframe.attributes.map[name]; + } } } @@ -828,22 +889,25 @@ } // Convert the URL to relative/absolute depending on configuration - if (data.params.src) + if (data.params.src) { data.params.src = urlConverter.call(urlConverterScope, data.params.src, 'src', 'object'); - - if (video) { - if (node.name === 'video') - type = lookup.video.name; - else if (node.name === 'audio') - type = lookup.audio.name; } - if (object && !type) - type = (lookupAttribute(object, 'clsid') || lookupAttribute(object, 'classid') || lookupAttribute(object, 'type') || {}).name; + if (video) { + if (node.name === 'video') { + type = lookup.video.name; + } else if (node.name === 'audio') { + type = lookup.audio.name; + } + } - if (embed && !type) + if (embed && !type) { type = (lookupAttribute(embed, 'type') || lookupExtension(data.params.src) || {}).name; + } + if (object && !type) { + type = (lookupAttribute(object, 'clsid') || lookupAttribute(object, 'classid') || lookupAttribute(object, 'type') || {name: 'Object'}).name; + } // for embedded audio we preserve the original specified type if (embed && type == 'EmbeddedAudio') { data.params.type = embed.attr('type'); @@ -852,24 +916,25 @@ // Replace the video/object/embed element with a placeholder image containing the data node.replace(img); - // Remove embed - if (embed) + if (embed) { embed.remove(); + } // Serialize the inner HTML of the object element if (object) { html = getInnerHTML(object.remove()); - - if (html) + if (html) { data.object_html = html; + } } // Serialize the inner HTML of the video element if (video) { html = getInnerHTML(video.remove()); - if (html) + if (html) { data.video_html = html; + } } data.hspace = hspace; diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/media/js/media.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/media/js/media.js index f6a081a63..89cea2a41 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/media/js/media.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/media/js/media.js @@ -295,30 +295,40 @@ } else { src = getVal("src"); - // YouTube *NEW* - if (src.match(/youtu.be\/[a-z1-9.-_]+/)) { + // YouTube Embed + if (src.match(/youtube\.com\/embed\/\w+/)) { data.width = 425; data.height = 350; data.params.frameborder = '0'; data.type = 'iframe'; - src = 'http://www.youtube.com/embed/' + src.match(/youtu.be\/([a-z1-9.-_]+)/)[1]; setVal('src', src); setVal('media_type', data.type); - } + } else { + // YouTube *NEW* + if (src.match(/youtu\.be\/[a-z1-9.-_]+/)) { + data.width = 425; + data.height = 350; + data.params.frameborder = '0'; + data.type = 'iframe'; + src = 'http://www.youtube.com/embed/' + src.match(/youtu.be\/([a-z1-9.-_]+)/)[1]; + setVal('src', src); + setVal('media_type', data.type); + } - // YouTube - if (src.match(/youtube.com(.+)v=([^&]+)/)) { - data.width = 425; - data.height = 350; - data.params.frameborder = '0'; - data.type = 'iframe'; - src = 'http://www.youtube.com/embed/' + src.match(/v=([^&]+)/)[1]; - setVal('src', src); - setVal('media_type', data.type); + // YouTube + if (src.match(/youtube\.com(.+)v=([^&]+)/)) { + data.width = 425; + data.height = 350; + data.params.frameborder = '0'; + data.type = 'iframe'; + src = 'http://www.youtube.com/embed/' + src.match(/v=([^&]+)/)[1]; + setVal('src', src); + setVal('media_type', data.type); + } } // Google video - if (src.match(/video.google.com(.+)docid=([^&]+)/)) { + if (src.match(/video\.google\.com(.+)docid=([^&]+)/)) { data.width = 425; data.height = 326; data.type = 'flash'; @@ -328,7 +338,7 @@ } // Vimeo - if (src.match(/vimeo.com\/([0-9]+)/)) { + if (src.match(/vimeo\.com\/([0-9]+)/)) { data.width = 425; data.height = 350; data.params.frameborder = '0'; @@ -339,7 +349,7 @@ } // stream.cz - if (src.match(/stream.cz\/((?!object).)*\/([0-9]+)/)) { + if (src.match(/stream\.cz\/((?!object).)*\/([0-9]+)/)) { data.width = 425; data.height = 350; data.params.frameborder = '0'; @@ -350,7 +360,7 @@ } // Google maps - if (src.match(/maps.google.([a-z]{2,3})\/maps\/(.+)msid=(.+)/)) { + if (src.match(/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/)) { data.width = 425; data.height = 350; data.params.frameborder = '0'; diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js index da411ebc0..9da0e2bd4 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js @@ -1 +1 @@ -(function(){var c=tinymce.dom.TreeWalker;var a="contenteditable",d="data-mce-"+a;var e=tinymce.VK;function b(n){var j=n.dom,p=n.selection,r,o="mce_noneditablecaret",r="\uFEFF";function m(t){var s;if(t.nodeType===1){s=t.getAttribute(d);if(s&&s!=="inherit"){return s}s=t.contentEditable;if(s!=="inherit"){return s}}return null}function g(s){var t;while(s){t=m(s);if(t){return t==="false"?s:null}s=s.parentNode}}function l(s){while(s){if(s.id===o){return s}s=s.parentNode}}function k(s){var t;if(s){t=new c(s,s);for(s=t.current();s;s=t.next()){if(s.nodeType===3){return s}}}}function f(v,u){var s,t;if(m(v)==="false"){if(j.isBlock(v)){p.select(v);return}}t=j.createRng();if(m(v)==="true"){if(!v.firstChild){v.appendChild(n.getDoc().createTextNode("\u00a0"))}v=v.firstChild;u=true}s=j.create("span",{id:o,"data-mce-bogus":true},r);if(u){v.parentNode.insertBefore(s,v)}else{j.insertAfter(s,v)}t.setStart(s.firstChild,1);t.collapse(true);p.setRng(t);return s}function i(s){var v,t,u;if(s){rng=p.getRng(true);rng.setStartBefore(s);rng.setEndBefore(s);v=k(s);if(v&&v.nodeValue.charAt(0)==r){v=v.deleteData(0,1)}j.remove(s,true);p.setRng(rng)}else{t=l(p.getStart());while((s=j.get(o))&&s!==u){if(t!==s){v=k(s);if(v&&v.nodeValue.charAt(0)==r){v=v.deleteData(0,1)}j.remove(s,true)}u=s}}}function q(){var s,w,u,t,v;function x(B,D){var A,F,E,C,z;A=t.startContainer;F=t.startOffset;if(A.nodeType==3){z=A.nodeValue.length;if((F>0&&F0?F-1:F;A=A.childNodes[G];if(A.hasChildNodes()){A=A.firstChild}}else{return !D?B:null}}E=new c(A,B);while(C=E[D?"prev":"next"]()){if(C.nodeType===3&&C.nodeValue.length>0){return}else{if(m(C)==="true"){return C}}}return B}i();u=p.isCollapsed();s=g(p.getStart());w=g(p.getEnd());if(s||w){t=p.getRng(true);if(u){s=s||w;var y=p.getStart();if(v=x(s,true)){f(v,true)}else{if(v=x(s,false)){f(v,false)}else{p.select(s)}}}else{t=p.getRng(true);if(s){t.setStartBefore(s)}if(w){t.setEndAfter(w)}p.setRng(t)}}}function h(z,B){var F=B.keyCode,x,C,D,v;function u(H,G){while(H=H[G?"previousSibling":"nextSibling"]){if(H.nodeType!==3||H.nodeValue.length>0){return H}}}function y(G,H){p.select(G);p.collapse(H)}function t(K){var J,I,M,H;function G(O){var N=I;while(N){if(N===O){return}N=N.parentNode}j.remove(O);q()}function L(){var O,P,N=z.schema.getNonEmptyElements();P=new tinymce.dom.TreeWalker(I,z.getBody());while(O=(K?P.prev():P.next())){if(N[O.nodeName.toLowerCase()]){break}if(O.nodeType===3&&tinymce.trim(O.nodeValue).length>0){break}if(m(O)==="false"){G(O);return true}}if(g(O)){return true}return false}if(p.isCollapsed()){J=p.getRng(true);I=J.startContainer;M=J.startOffset;I=l(I)||I;if(H=g(I)){G(H);return false}if(I.nodeType==3&&(K?M>0:M124)&&F!=e.DELETE&&F!=e.BACKSPACE){if((tinymce.isMac?B.metaKey:B.ctrlKey)&&(F==67||F==88||F==86)){return}B.preventDefault();if(F==e.LEFT||F==e.RIGHT){var w=F==e.LEFT;if(z.dom.isBlock(x)){var A=w?x.previousSibling:x.nextSibling;var s=new c(A,A);var E=w?s.prev():s.next();y(E,!w)}else{y(x,w)}}}else{if(F==e.LEFT||F==e.RIGHT||F==e.BACKSPACE||F==e.DELETE){C=l(D);if(C){if(F==e.LEFT||F==e.BACKSPACE){x=u(C,true);if(x&&m(x)==="false"){B.preventDefault();if(F==e.LEFT){y(x,true)}else{j.remove(x);return}}else{i(C)}}if(F==e.RIGHT||F==e.DELETE){x=u(C);if(x&&m(x)==="false"){B.preventDefault();if(F==e.RIGHT){y(x,false)}else{j.remove(x);return}}else{i(C)}}}if((F==e.BACKSPACE||F==e.DELETE)&&!t(F==e.BACKSPACE)){B.preventDefault();return false}}}}n.onMouseDown.addToTop(function(s,u){var t=s.selection.getNode();if(m(t)==="false"&&t==u.target){q()}});n.onMouseUp.addToTop(q);n.onKeyDown.addToTop(h);n.onKeyUp.addToTop(q)}tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(i,k){var h,g,j;function f(m,n){var o=j.length,p=n.content,l=tinymce.trim(g);if(n.format=="raw"){return}while(o--){p=p.replace(j[o],function(s){var r=arguments,q=r[r.length-2];if(q>0&&p.charAt(q-1)=='"'){return s}return''+m.dom.encode(typeof(r[1])==="string"?r[1]:r[0])+""})}n.content=p}h=" "+tinymce.trim(i.getParam("noneditable_editable_class","mceEditable"))+" ";g=" "+tinymce.trim(i.getParam("noneditable_noneditable_class","mceNonEditable"))+" ";j=i.getParam("noneditable_regexp");if(j&&!j.length){j=[j]}i.onPreInit.add(function(){b(i);if(j){i.selection.onBeforeSetContent.add(f);i.onBeforeSetContent.add(f)}i.parser.addAttributeFilter("class",function(l){var m=l.length,n,o;while(m--){o=l[m];n=" "+o.attr("class")+" ";if(n.indexOf(h)!==-1){o.attr(d,"true")}else{if(n.indexOf(g)!==-1){o.attr(d,"false")}}}});i.serializer.addAttributeFilter(d,function(l,m){var n=l.length,o;while(n--){o=l[n];if(j&&o.attr("data-mce-content")){o.name="#text";o.type=3;o.raw=true;o.value=o.attr("data-mce-content")}else{o.attr(a,null);o.attr(d,null)}}});i.parser.addAttributeFilter(a,function(l,m){var n=l.length,o;while(n--){o=l[n];o.attr(d,o.attr(a));o.attr(a,null)}})})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})(); \ No newline at end of file +(function(){var h=tinymce.dom.TreeWalker;var d="contenteditable",c="data-mce-"+d;var i=tinymce.VK;var e,j,b;function g(t){var p=t.dom,v=t.selection,u="mce_noneditablecaret",x="\uFEFF",m=t.getParam("noneditable_prevent_delete");function s(z){var y;if(z.nodeType===1){y=z.getAttribute(c);if(y&&y!=="inherit"){return y}y=z.contentEditable;if(y!=="inherit"){return y}}return null}function l(y){var z;while(y){z=s(y);if(z){return z==="false"?y:null}y=y.parentNode}}function r(y){while(y){if(y.id===u){return y}y=y.parentNode}}function q(y){var z;if(y){z=new h(y,y);for(y=z.current();y;y=z.next()){if(y.nodeType===3){return y}}}}function k(B,A){var y,z;if(s(B)==="false"){if(p.isBlock(B)){v.select(B);return}}z=p.createRng();if(s(B)==="true"){if(!B.firstChild){B.appendChild(t.getDoc().createTextNode("\u00a0"))}B=B.firstChild;A=true}y=p.create("span",{id:u,"data-mce-bogus":true},x);if(A){B.parentNode.insertBefore(y,B)}else{p.insertAfter(y,B)}z.setStart(y.firstChild,1);z.collapse(true);v.setRng(z);return y}function o(y){var C,A,B,z;if(y){z=v.getRng(true);z.setStartBefore(y);z.setEndBefore(y);C=q(y);if(C&&C.nodeValue.charAt(0)==x){C=C.deleteData(0,1)}p.remove(y,true);v.setRng(z)}else{A=r(v.getStart());while((y=p.get(u))&&y!==B){if(A!==y){C=q(y);if(C&&C.nodeValue.charAt(0)==x){C=C.deleteData(0,1)}p.remove(y,true)}B=y}}}function w(){var y,C,A,z,B;function D(G,I){var F,K,J,H,E;F=z.startContainer;K=z.startOffset;if(F.nodeType==3){E=F.nodeValue.length;if((K>0&&K0?K-1:K;F=F.childNodes[L];if(F.hasChildNodes()){F=F.firstChild}}else{return !I?G:null}}J=new h(F,G);while(H=J[I?"prev":"next"]()){if(H.nodeType===3&&H.nodeValue.length>0){return}else{if(s(H)==="true"){return H}}}return G}o();A=v.isCollapsed();y=l(v.getStart());C=l(v.getEnd());if(y||C){z=v.getRng(true);if(A){y=y||C;if(D(y,true)){B=D(y,true);k(B,true)}else{if(D(y,false)){B=D(y,false);k(B,false)}else{v.select(y)}}}else{z=v.getRng(true);if(y){z.setStartBefore(y)}if(C){z.setEndAfter(C)}v.setRng(z)}}}function n(D,Q){var G=Q.keyCode,S,J,y,F,A,I=false,z;function B(U,T){while(U=U[T?"previousSibling":"nextSibling"]){if(U.nodeType!==3||U.nodeValue.length>0){return U}}}function K(T,U){v.select(T);v.collapse(U)}function P(X){var W,V,Z,U;function T(ab){var aa=V;while(aa){if(aa===ab){return}aa=aa.parentNode}p.remove(ab);w()}function Y(){var ab,ac,aa=D.schema.getNonEmptyElements();ac=new tinymce.dom.TreeWalker(V,D.getBody());while(ab=(X?ac.prev():ac.next())){if(aa[ab.nodeName.toLowerCase()]){break}if(ab.nodeType===3&&tinymce.trim(ab.nodeValue).length>0){break}if(s(ab)==="false"){if(!m){T(ab)}return true}}if(l(ab)){return true}return false}W=v.getRng(true);V=W.startContainer;Z=W.startOffset;V=r(V)||V;if(v.isCollapsed()){if(U=l(V)){T(U);return false}if(V.nodeType==3&&(X?Z>0:Z124)&&G!=i.DELETE&&G!=i.BACKSPACE){if((tinymce.isMac?Q.metaKey:Q.ctrlKey)&&(G==67||G==88||G==86)){return}Q.preventDefault();if(G==i.LEFT||G==i.RIGHT){var C=G==i.LEFT;if(D.dom.isBlock(S)){var H=C?S.previousSibling:S.nextSibling;var N=new h(H,H);var L=C?N.prev():N.next();K(L,!C)}else{K(S,C)}}}else{if(G==i.LEFT||G==i.RIGHT||G==i.BACKSPACE||G==i.DELETE){J=r(y);if(J){O(G,J,Q)}if((G==i.BACKSPACE||G==i.DELETE)&&!P(G==i.BACKSPACE)){Q.preventDefault();return false}if(m&&I){var R=confirm(D.getLang("noneditable.confirm_delete"));if(!R){Q.preventDefault();return false}}}}}t.onMouseUp.addToTop(w);t.onMouseDown.addToTop(w);t.onKeyDown.addToTop(n);t.onKeyUp.addToTop(w)}function a(k){return" "+tinymce.trim(k.getParam("noneditable_editable_class","mceEditable"))+" "}function f(k){return" "+tinymce.trim(k.getParam("noneditable_noneditable_class","mceNonEditable"))+" "}tinymce.PluginManager.requireLangPack("noneditable");tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(l){function k(n,o){var p=b.length,q=o.content,m=tinymce.trim(j);if(o.format=="raw"){return}while(p--){q=q.replace(b[p],function(t){var s=arguments,r=s[s.length-2];if(r>0&&q.charAt(r-1)=='"'){return t}return''+n.dom.encode(typeof(s[1])==="string"?s[1]:s[0])+""})}o.content=q}e=a(l);j=f(l);b=l.getParam("noneditable_regexp");if(b&&!b.length){b=[b]}l.onPreInit.add(function(){g(l);if(b){l.selection.onBeforeSetContent.add(k);l.onBeforeSetContent.add(k)}l.parser.addAttributeFilter("class",function(m){var n=m.length,o,p;while(n--){p=m[n];o=" "+p.attr("class")+" ";if(o.indexOf(e)!==-1){p.attr(c,"true")}else{if(o.indexOf(j)!==-1){p.attr(c,"false")}}}});l.serializer.addAttributeFilter(c,function(m){var n=m.length,o;while(n--){o=m[n];if(b&&o.attr("data-mce-content")){o.name="#text";o.type=3;o.raw=true;o.value=o.attr("data-mce-content")}else{o.attr(d,null);o.attr(c,null)}}});l.parser.addAttributeFilter(d,function(m){var n=m.length,o;while(n--){o=m[n];o.attr(c,o.attr(d));o.attr(d,null)}})})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})(); \ No newline at end of file diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js index a18bcd786..d561b7d1a 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js @@ -12,9 +12,12 @@ var TreeWalker = tinymce.dom.TreeWalker; var externalName = 'contenteditable', internalName = 'data-mce-' + externalName; var VK = tinymce.VK; + var editClass, nonEditClass, nonEditableRegExps; function handleContentEditableSelection(ed) { - var dom = ed.dom, selection = ed.selection, invisibleChar, caretContainerId = 'mce_noneditablecaret', invisibleChar = '\uFEFF'; + var dom = ed.dom, selection = ed.selection, caretContainerId = 'mce_noneditablecaret', invisibleChar = '\uFEFF', + nondeletable = ed.getParam('noneditable_prevent_delete'); + // Returns the content editable state of a node "true/false" or null function getContentEditable(node) { @@ -119,7 +122,7 @@ // Removes any caret container except the one we might be in function removeCaretContainer(caretContainer) { - var child, currentCaretContainer, lastContainer; + var child, currentCaretContainer, lastContainer, rng; if (caretContainer) { rng = selection.getRng(true); @@ -213,11 +216,13 @@ // If it's a caret selection then look left/right to see if we need to move the caret out side or expand if (isCollapsed) { nonEditableStart = nonEditableStart || nonEditableEnd; - var start = selection.getStart(); - if (element = hasSideContent(nonEditableStart, true)) { + + if (hasSideContent(nonEditableStart, true)) { + element = hasSideContent(nonEditableStart, true); // We have no contents to the left of the caret then insert a caret container before the noneditable element insertCaretContainerOrExpandToBlock(element, true); - } else if (element = hasSideContent(nonEditableStart, false)) { + } else if (hasSideContent(nonEditableStart, false)) { + element = hasSideContent(nonEditableStart, false); // We have no contents to the right of the caret then insert a caret container after the noneditable element insertCaretContainerOrExpandToBlock(element, false); } else { @@ -243,7 +248,8 @@ }; function handleKey(ed, e) { - var keyCode = e.keyCode, nonEditableParent, caretContainer, startElement, endElement; + var keyCode = e.keyCode, nonEditableParent, caretContainer, startElement, endElement, htmlSelection, + selectionContainsNonEditable = false, selectedRegion; function getNonEmptyTextNodeSibling(node, prev) { while (node = node[prev ? 'previousSibling' : 'nextSibling']) { @@ -293,7 +299,9 @@ // Found non editable node if (getContentEditable(node) === "false") { - removeNodeIfNotParent(node); + if (!nondeletable) + removeNodeIfNotParent(node); + return true; } } @@ -306,12 +314,12 @@ return false; } - if (selection.isCollapsed()) { - rng = selection.getRng(true); - container = rng.startContainer; - offset = rng.startOffset; - container = getParentCaretContainer(container) || container; + rng = selection.getRng(true); + container = rng.startContainer; + offset = rng.startOffset; + container = getParentCaretContainer(container) || container; + if (selection.isCollapsed()) { // Is in noneditable parent if (nonEditableParent = getNonEditableParent(container)) { removeNodeIfNotParent(nonEditableParent); @@ -334,14 +342,79 @@ } } + // Is in noneditable parent + if (getNonEditableParent(container)) { + nonEditableParent = getNonEditableParent(container); + removeNodeIfNotParent(nonEditableParent); + return false; + } + return true; + } + + /** + * handleDirectionalStroke handles when the user presses a button within a caret container, and + * make sure the direction of the cursor or of the deletion is within the + * user expectations. + * + * @param {string} keyCode is the current keycode + * @param {object} caretContainer is the caretContainer + * @param {string} side left (backspace and left arrow) or right (delete and right arrow) + * @param {object} e is the currenlty handled event + * @return {null} + */ + function handleDirectionalStroke(keyCode, caretContainer, e) { + var nonEditableParent; + var side = (keyCode === VK.LEFT) || (keyCode === VK.BACKSPACE) ? 'left' : 'right'; + var arrow = side === 'left' ? VK.LEFT : VK.RIGHT; + var action = side === 'left' ? VK.BACKSPACE : VK.DELETE; + var next = side === 'left' ? true : false; + var caret = selection.getRng(true); + + + if (keyCode === arrow || keyCode === action) { + nonEditableParent = getNonEmptyTextNodeSibling(caretContainer, next); + + if (nonEditableParent && getContentEditable(nonEditableParent) === "false") { + + if (keyCode === arrow) { + positionCaretOnElement(nonEditableParent, next); + } + + if (keyCode === action && (caretContainer.innerHTML === invisibleChar || !tinymce.trim(caretContainer.innerText || caretContainer.textContent)) ) { + e.preventDefault(); + positionCaretOnElement(nonEditableParent, next); + if (!nondeletable) { + dom.remove(nonEditableParent); + return; + } + } + + } else if (!nondeletable) { + removeCaretContainer(caretContainer); + } + + } } - startElement = selection.getStart() + + startElement = selection.getStart(); endElement = selection.getEnd(); // Disable all key presses in contentEditable=false except delete or backspace nonEditableParent = getNonEditableParent(startElement) || getNonEditableParent(endElement); + + if (nondeletable && !selection.isCollapsed()) { + var rng = selection.getRng(true); + var rngContents = rng.cloneContents(); + + var selectionContainsNonEditable = false; + tinymce.walk(rngContents, function(n) { + selectionContainsNonEditable = getContentEditable(n) === 'false'; + return !selectionContainsNonEditable; + }, 'childNodes'); + } + if (nonEditableParent && (keyCode < 112 || keyCode > 124) && keyCode != VK.DELETE && keyCode != VK.BACKSPACE) { // Is Ctrl+c, Ctrl+v or Ctrl+x then use default browser behavior if ((tinymce.isMac ? e.metaKey : e.ctrlKey) && (keyCode == 67 || keyCode == 88 || keyCode == 86)) { @@ -368,68 +441,42 @@ if (keyCode == VK.LEFT || keyCode == VK.RIGHT || keyCode == VK.BACKSPACE || keyCode == VK.DELETE) { caretContainer = getParentCaretContainer(startElement); if (caretContainer) { - // Arrow left or backspace - if (keyCode == VK.LEFT || keyCode == VK.BACKSPACE) { - nonEditableParent = getNonEmptyTextNodeSibling(caretContainer, true); - - if (nonEditableParent && getContentEditable(nonEditableParent) === "false") { - e.preventDefault(); - - if (keyCode == VK.LEFT) { - positionCaretOnElement(nonEditableParent, true); - } else { - dom.remove(nonEditableParent); - return; - } - } else { - removeCaretContainer(caretContainer); - } - } - - // Arrow right or delete - if (keyCode == VK.RIGHT || keyCode == VK.DELETE) { - nonEditableParent = getNonEmptyTextNodeSibling(caretContainer); - - if (nonEditableParent && getContentEditable(nonEditableParent) === "false") { - e.preventDefault(); - - if (keyCode == VK.RIGHT) { - positionCaretOnElement(nonEditableParent, false); - } else { - dom.remove(nonEditableParent); - return; - } - } else { - removeCaretContainer(caretContainer); - } - } + handleDirectionalStroke(keyCode, caretContainer, e); } if ((keyCode == VK.BACKSPACE || keyCode == VK.DELETE) && !canDelete(keyCode == VK.BACKSPACE)) { e.preventDefault(); return false; } + + if (nondeletable && selectionContainsNonEditable) { + var confirmDeleting = confirm(ed.getLang("noneditable.confirm_delete")); + if (!confirmDeleting) { + e.preventDefault(); + return false; + } + } } } - }; - - ed.onMouseDown.addToTop(function(ed, e) { - var node = ed.selection.getNode(); - - if (getContentEditable(node) === "false" && node == e.target) { - // Expand selection on mouse down we can't block the default event since it's used for drag/drop - moveSelection(); - } - }); - + } + ed.onMouseUp.addToTop(moveSelection); + ed.onMouseDown.addToTop(moveSelection); ed.onKeyDown.addToTop(handleKey); ed.onKeyUp.addToTop(moveSelection); }; + function getEditClass(ed) { + return " " + tinymce.trim(ed.getParam("noneditable_editable_class", "mceEditable")) + " "; + } + function getNonEditClass(ed) { + return " " + tinymce.trim(ed.getParam("noneditable_noneditable_class", "mceNonEditable")) + " "; + } + + tinymce.PluginManager.requireLangPack('noneditable'); + tinymce.create('tinymce.plugins.NonEditablePlugin', { - init : function(ed, url) { - var editClass, nonEditClass, nonEditableRegExps; + init : function(ed) { // Converts configured regexps to noneditable span items function convertRegExpsToNonEditable(ed, args) { @@ -454,10 +501,10 @@ } args.content = content; - }; + } - editClass = " " + tinymce.trim(ed.getParam("noneditable_editable_class", "mceEditable")) + " "; - nonEditClass = " " + tinymce.trim(ed.getParam("noneditable_noneditable_class", "mceNonEditable")) + " "; + editClass = getEditClass(ed); + nonEditClass = getNonEditClass(ed); // Setup noneditable regexps array nonEditableRegExps = ed.getParam("noneditable_regexp"); @@ -490,7 +537,7 @@ }); // Remove internal name - ed.serializer.addAttributeFilter(internalName, function(nodes, name) { + ed.serializer.addAttributeFilter(internalName, function(nodes) { var i = nodes.length, node; while (i--) { @@ -509,7 +556,7 @@ }); // Convert external name into internal name - ed.parser.addAttributeFilter(externalName, function(nodes, name) { + ed.parser.addAttributeFilter(externalName, function(nodes) { var i = nodes.length, node; while (i--) { diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/noneditable/langs/en.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/noneditable/langs/en.js new file mode 100644 index 000000000..0e9c65475 --- /dev/null +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/noneditable/langs/en.js @@ -0,0 +1 @@ +tinyMCE.addI18n('en.noneditable',{ confirm_delete : 'The selection contains non-editable text. Are you sure you want to continue?' }); \ No newline at end of file diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js index 0ab05ebbb..5d0626188 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js @@ -1 +1 @@ -(function(){var c=tinymce.each,a={paste_auto_cleanup_on_paste:true,paste_enable_default_filters:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_max_consecutive_linebreaks:2,paste_text_use_dialog:false,paste_text_sticky:false,paste_text_sticky_default:false,paste_text_notifyalways:false,paste_text_linebreaktype:"combined",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(d,e){return d.getParam(e,a[e])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(d,e){var f=this;f.editor=d;f.url=e;f.onPreProcess=new tinymce.util.Dispatcher(f);f.onPostProcess=new tinymce.util.Dispatcher(f);f.onPreProcess.add(f._preProcess);f.onPostProcess.add(f._postProcess);f.onPreProcess.add(function(i,j){d.execCallback("paste_preprocess",i,j)});f.onPostProcess.add(function(i,j){d.execCallback("paste_postprocess",i,j)});d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){return false}});d.pasteAsPlainText=b(d,"paste_text_sticky_default");function h(l,j){var k=d.dom,i;f.onPreProcess.dispatch(f,l);l.node=k.create("div",0,l.content);if(tinymce.isGecko){i=d.selection.getRng(true);if(i.startContainer==i.endContainer&&i.startContainer.nodeType==3){if(l.node.childNodes.length===1&&/^(p|h[1-6]|pre)$/i.test(l.node.firstChild.nodeName)&&l.content.indexOf("__MCE_ITEM__")===-1){k.remove(l.node.firstChild,true)}}}f.onPostProcess.dispatch(f,l);l.content=d.serializer.serialize(l.node,{getInner:1,forced_root_block:""});if((!j)&&(d.pasteAsPlainText)){f._insertPlainText(l.content);if(!b(d,"paste_text_sticky")){d.pasteAsPlainText=false;d.controlManager.setActive("pastetext",false)}}else{f._insert(l.content)}}d.addCommand("mceInsertClipboardContent",function(i,j){h(j,true)});if(!b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(j,i){var k=tinymce.util.Cookie;d.pasteAsPlainText=!d.pasteAsPlainText;d.controlManager.setActive("pastetext",d.pasteAsPlainText);if((d.pasteAsPlainText)&&(!k.get("tinymcePasteText"))){if(b(d,"paste_text_sticky")){d.windowManager.alert(d.translate("paste.plaintext_mode_sticky"))}else{d.windowManager.alert(d.translate("paste.plaintext_mode"))}if(!b(d,"paste_text_notifyalways")){k.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}d.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});d.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function g(s){var l,p,j,t,k=d.selection,o=d.dom,q=d.getBody(),i,r;if(s.clipboardData||o.doc.dataTransfer){r=(s.clipboardData||o.doc.dataTransfer).getData("Text");if(d.pasteAsPlainText){s.preventDefault();h({content:o.encode(r).replace(/\r?\n/g,"
")});return}}if(o.get("_mcePaste")){return}l=o.add(q,"div",{id:"_mcePaste","class":"mcePaste","data-mce-bogus":"1"},"\uFEFF\uFEFF");if(q!=d.getDoc().body){i=o.getPos(d.selection.getStart(),q).y}else{i=q.scrollTop+o.getViewPort(d.getWin()).y}o.setStyles(l,{position:"absolute",left:tinymce.isGecko?-40:0,top:i-25,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){t=k.getRng();j=o.doc.body.createTextRange();j.moveToElementText(l);j.execCommand("Paste");o.remove(l);if(l.innerHTML==="\uFEFF\uFEFF"){d.execCommand("mcePasteWord");s.preventDefault();return}k.setRng(t);k.setContent("");setTimeout(function(){h({content:l.innerHTML})},0);return tinymce.dom.Event.cancel(s)}else{function m(n){n.preventDefault()}o.bind(d.getDoc(),"mousedown",m);o.bind(d.getDoc(),"keydown",m);p=d.selection.getRng();l=l.firstChild;j=d.getDoc().createRange();j.setStart(l,0);j.setEnd(l,2);k.setRng(j);window.setTimeout(function(){var u="",n;if(!o.select("div.mcePaste > div.mcePaste").length){n=o.select("div.mcePaste");c(n,function(w){var v=w.firstChild;if(v&&v.nodeName=="DIV"&&v.style.marginTop&&v.style.backgroundColor){o.remove(v,1)}c(o.select("span.Apple-style-span",w),function(x){o.remove(x,1)});c(o.select("br[data-mce-bogus]",w),function(x){o.remove(x)});if(w.parentNode.className!="mcePaste"){u+=w.innerHTML}})}else{u="

"+o.encode(r).replace(/\r?\n\r?\n/g,"

").replace(/\r?\n/g,"
")+"

"}c(o.select("div.mcePaste"),function(v){o.remove(v)});if(p){k.setRng(p)}h({content:u});o.unbind(d.getDoc(),"mousedown",m);o.unbind(d.getDoc(),"keydown",m)},0)}}if(b(d,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){g(j)}})}else{d.onPaste.addToTop(function(i,j){return g(j)})}}d.onInit.add(function(){d.controlManager.setActive("pastetext",d.pasteAsPlainText);if(b(d,"paste_block_drop")){d.dom.bind(d.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(i){i.preventDefault();i.stopPropagation();return false})}});f._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(g,e){var k=this.editor,j=e.content,p=tinymce.grep,n=tinymce.explode,f=tinymce.trim,l,i;function d(h){c(h,function(o){if(o.constructor==RegExp){j=j.replace(o,"")}else{j=j.replace(o[0],o[1])}})}if(k.settings.paste_enable_default_filters==false){return}if(tinymce.isIE&&document.documentMode>=9&&/<(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)/.test(e.content)){d([[/(?:
 [\s\r\n]+|
)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:
 [\s\r\n]+|
)*/g,"$1"]]);d([[/

/g,"

"],[/
/g," "],[/

/g,"
"]])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*( )+/gi,/( |]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/

]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"

$1

")}if(b(k,"paste_convert_middot_lists")){d([[//gi,"$&__MCE_ITEM__"],[/(]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([//gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\u00a0"]]);do{l=j.length;j=j.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(l!=j.length);if(b(k,"paste_retain_style_properties").replace(/^none$/i,"").length==0){j=j.replace(/<\/?span[^>]*>/gi,"")}else{d([[/([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(t,h,r){var u=[],o=0,q=n(f(r).replace(/"/gi,"'"),";");c(q,function(s){var w,y,z=n(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":u[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":u[o++]="text-align:"+y;return;case"vert-align":u[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":u[o++]="color:"+y;return;case"mso-background":case"mso-highlight":u[o++]="background:"+y;return;case"mso-default-height":u[o++]="min-height:"+x(y);return;case"mso-default-width":u[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":u[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){u[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){u[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}u[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+u.join(";")+'"'}else{return h}}]])}}if(b(k,"paste_convert_headers_to_strong")){d([[/]*>/gi,"

"],[/<\/h[1-6][^>]*>/gi,"

"]])}d([[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi,""]]);i=b(k,"paste_strip_class_attributes");if(i!=="none"){function m(q,o){if(i==="all"){return""}var h=p(n(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(r){return(/^(?!mso)/i.test(r))});return h.length?' class="'+h.join(" ")+'"':""}j=j.replace(/ class="([^"]+)"/gi,m);j=j.replace(/ class=([\-\w]+)/gi,m)}if(b(k,"paste_remove_spans")){j=j.replace(/<\/?span[^>]*>/gi,"")}e.content=j},_postProcess:function(g,i){var f=this,e=f.editor,h=e.dom,d;if(e.settings.paste_enable_default_filters==false){return}if(i.wordContent){c(h.select("a",i.node),function(j){if(!j.href||j.href.indexOf("#_Toc")!=-1){h.remove(j,1)}});if(b(e,"paste_convert_middot_lists")){f._convertLists(g,i)}d=b(e,"paste_retain_style_properties");if((tinymce.is(d,"string"))&&(d!=="all")&&(d!=="*")){d=tinymce.explode(d.replace(/^none$/i,""));c(h.select("*",i.node),function(m){var n={},k=0,l,o,j;if(d){for(l=0;l0){h.setStyles(m,n)}else{if(m.nodeName=="SPAN"&&!m.className){h.remove(m,true)}}})}}if(b(e,"paste_remove_styles")||(b(e,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(h.select("*[style]",i.node),function(j){j.removeAttribute("style");j.removeAttribute("data-mce-style")})}else{if(tinymce.isWebKit){c(h.select("*",i.node),function(j){j.removeAttribute("data-mce-style")})}}},_convertLists:function(g,e){var i=g.editor.dom,h,l,d=-1,f,m=[],k,j;c(i.select("p",e.node),function(t){var q,u="",s,r,n,o;for(q=t.firstChild;q&&q.nodeType==3;q=q.nextSibling){u+=q.nodeValue}u=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/ /g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(u)){s="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(u)){s="ol"}if(s){f=parseFloat(t.style.marginLeft||0);if(f>d){m.push(f)}if(!h||s!=k){h=i.create(s);i.insertAfter(h,t)}else{if(f>d){h=l.appendChild(i.create(s))}else{if(f]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.( |\u00a0)*\s*/.test(p)){i.remove(v)}}});r=t.innerHTML;if(s=="ul"){r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*( |\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.( |\u00a0)+\s*/,"")}l=h.appendChild(i.create("li",0,r));i.remove(t);d=f;k=s}else{h=d=0}});j=e.node.innerHTML;if(j.indexOf("__MCE_ITEM__")!=-1){e.node.innerHTML=j.replace(/__MCE_ITEM__/g,"")}},_insert:function(f,d){var e=this.editor,g=e.selection.getRng();if(!e.selection.isCollapsed()&&g.startContainer!=g.endContainer){e.getDoc().execCommand("Delete",false,null)}e.execCommand("mceInsertContent",false,f,{skip_undo:d})},_insertPlainText:function(j){var h=this.editor,f=b(h,"paste_text_linebreaktype"),k=b(h,"paste_text_replacements"),g=tinymce.is;function e(m){c(m,function(n){if(n.constructor==RegExp){j=j.replace(n,"")}else{j=j.replace(n[0],n[1])}})}if((typeof(j)==="string")&&(j.length>0)){if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(j)){e([/[\n\r]+/g])}else{e([/\r+/g])}e([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/ /gi," "],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"]]);var d=Number(b(h,"paste_max_consecutive_linebreaks"));if(d>-1){var l=new RegExp("\n{"+(d+1)+",}","g");var i="";while(i.length"]])}else{if(f=="p"){e([[/\n+/g,"

"],[/^(.*<\/p>)(

)$/,"

$1"]])}else{e([[/\n\n/g,"

"],[/^(.*<\/p>)(

)$/,"

$1"],[/\n/g,"
"]])}}}h.execCommand("mceInsertContent",false,j)}},_legacySupport:function(){var e=this,d=e.editor;d.addCommand("mcePasteWord",function(){d.windowManager.open({file:e.url+"/pasteword.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})});if(b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(){d.windowManager.open({file:e.url+"/pastetext.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})})}d.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})(); \ No newline at end of file +(function(){var c=tinymce.each,a={paste_auto_cleanup_on_paste:true,paste_enable_default_filters:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_max_consecutive_linebreaks:2,paste_text_use_dialog:false,paste_text_sticky:false,paste_text_sticky_default:false,paste_text_notifyalways:false,paste_text_linebreaktype:"combined",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(d,e){return d.getParam(e,a[e])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(d,e){var f=this;f.editor=d;f.url=e;f.onPreProcess=new tinymce.util.Dispatcher(f);f.onPostProcess=new tinymce.util.Dispatcher(f);f.onPreProcess.add(f._preProcess);f.onPostProcess.add(f._postProcess);f.onPreProcess.add(function(i,j){d.execCallback("paste_preprocess",i,j)});f.onPostProcess.add(function(i,j){d.execCallback("paste_postprocess",i,j)});d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){return false}});d.pasteAsPlainText=b(d,"paste_text_sticky_default");function h(l,j){var k=d.dom,i;f.onPreProcess.dispatch(f,l);l.node=k.create("div",0,l.content);if(tinymce.isGecko){i=d.selection.getRng(true);if(i.startContainer==i.endContainer&&i.startContainer.nodeType==3){if(l.node.childNodes.length===1&&/^(p|h[1-6]|pre)$/i.test(l.node.firstChild.nodeName)&&l.content.indexOf("__MCE_ITEM__")===-1){k.remove(l.node.firstChild,true)}}}f.onPostProcess.dispatch(f,l);l.content=d.serializer.serialize(l.node,{getInner:1,forced_root_block:""});if((!j)&&(d.pasteAsPlainText)){f._insertPlainText(l.content);if(!b(d,"paste_text_sticky")){d.pasteAsPlainText=false;d.controlManager.setActive("pastetext",false)}}else{f._insert(l.content)}}d.addCommand("mceInsertClipboardContent",function(i,j){h(j,true)});if(!b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(j,i){var k=tinymce.util.Cookie;d.pasteAsPlainText=!d.pasteAsPlainText;d.controlManager.setActive("pastetext",d.pasteAsPlainText);if((d.pasteAsPlainText)&&(!k.get("tinymcePasteText"))){if(b(d,"paste_text_sticky")){d.windowManager.alert(d.translate("paste.plaintext_mode_sticky"))}else{d.windowManager.alert(d.translate("paste.plaintext_mode"))}if(!b(d,"paste_text_notifyalways")){k.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}d.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});d.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function g(s){var l,p,j,t,k=d.selection,o=d.dom,q=d.getBody(),i,r;if(s.clipboardData||o.doc.dataTransfer){r=(s.clipboardData||o.doc.dataTransfer).getData("Text");if(d.pasteAsPlainText){s.preventDefault();h({content:o.encode(r).replace(/\r?\n/g,"
")});return}}if(o.get("_mcePaste")){return}l=o.add(q,"div",{id:"_mcePaste","class":"mcePaste","data-mce-bogus":"1"},"\uFEFF\uFEFF");if(q!=d.getDoc().body){i=o.getPos(d.selection.getStart(),q).y}else{i=q.scrollTop+o.getViewPort(d.getWin()).y}o.setStyles(l,{position:"absolute",left:tinymce.isGecko?-40:0,top:i-25,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){t=k.getRng();j=o.doc.body.createTextRange();j.moveToElementText(l);j.execCommand("Paste");o.remove(l);if(l.innerHTML==="\uFEFF\uFEFF"){d.execCommand("mcePasteWord");s.preventDefault();return}k.setRng(t);k.setContent("");setTimeout(function(){h({content:l.innerHTML})},0);return tinymce.dom.Event.cancel(s)}else{function m(n){n.preventDefault()}o.bind(d.getDoc(),"mousedown",m);o.bind(d.getDoc(),"keydown",m);p=d.selection.getRng();l=l.firstChild;j=d.getDoc().createRange();j.setStart(l,0);j.setEnd(l,2);k.setRng(j);window.setTimeout(function(){var u="",n;if(!o.select("div.mcePaste > div.mcePaste").length){n=o.select("div.mcePaste");c(n,function(w){var v=w.firstChild;if(v&&v.nodeName=="DIV"&&v.style.marginTop&&v.style.backgroundColor){o.remove(v,1)}c(o.select("span.Apple-style-span",w),function(x){o.remove(x,1)});c(o.select("br[data-mce-bogus]",w),function(x){o.remove(x)});if(w.parentNode.className!="mcePaste"){u+=w.innerHTML}})}else{u="

"+o.encode(r).replace(/\r?\n\r?\n/g,"

").replace(/\r?\n/g,"
")+"

"}c(o.select("div.mcePaste"),function(v){o.remove(v)});if(p){k.setRng(p)}h({content:u});o.unbind(d.getDoc(),"mousedown",m);o.unbind(d.getDoc(),"keydown",m)},0)}}if(b(d,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){g(j)}})}else{d.onPaste.addToTop(function(i,j){return g(j)})}}d.onInit.add(function(){d.controlManager.setActive("pastetext",d.pasteAsPlainText);if(b(d,"paste_block_drop")){d.dom.bind(d.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(i){i.preventDefault();i.stopPropagation();return false})}});f._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(g,e){var k=this.editor,j=e.content,p=tinymce.grep,n=tinymce.explode,f=tinymce.trim,l,i;function d(h){c(h,function(o){if(o.constructor==RegExp){j=j.replace(o,"")}else{j=j.replace(o[0],o[1])}})}if(k.settings.paste_enable_default_filters==false){return}if(tinymce.isIE&&document.documentMode>=9&&/<(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)/.test(e.content)){d([[/(?:
 [\s\r\n]+|
)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:
 [\s\r\n]+|
)*/g,"$1"]]);d([[/

/g,"

"],[/
/g," "],[/

/g,"
"]])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*( )+/gi,/( |]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/

]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"

$1

")}if(b(k,"paste_convert_middot_lists")){d([[//gi,"$&__MCE_ITEM__"],[/(]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([//gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\u00a0"]]);do{l=j.length;j=j.replace(/(]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1");j=j.replace(/(<(ol|ul)[^>]*\s)(?:id|name|language|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(l!=j.length);if(b(k,"paste_retain_style_properties").replace(/^none$/i,"").length==0){j=j.replace(/<\/?span[^>]*>/gi,"")}else{d([[/([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(t,h,r){var u=[],o=0,q=n(f(r).replace(/"/gi,"'"),";");c(q,function(s){var w,y,z=n(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":u[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":u[o++]="text-align:"+y;return;case"vert-align":u[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":u[o++]="color:"+y;return;case"mso-background":case"mso-highlight":u[o++]="background:"+y;return;case"mso-default-height":u[o++]="min-height:"+x(y);return;case"mso-default-width":u[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":u[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){u[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){u[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}u[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+u.join(";")+'"'}else{return h}}]])}}if(b(k,"paste_convert_headers_to_strong")){d([[/]*>/gi,"

"],[/<\/h[1-6][^>]*>/gi,"

"]])}d([[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi,""]]);i=b(k,"paste_strip_class_attributes");if(i!=="none"){function m(q,o){if(i==="all"){return""}var h=p(n(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(r){return(/^(?!mso)/i.test(r))});return h.length?' class="'+h.join(" ")+'"':""}j=j.replace(/ class="([^"]+)"/gi,m);j=j.replace(/ class=([\-\w]+)/gi,m)}if(b(k,"paste_remove_spans")){j=j.replace(/<\/?span[^>]*>/gi,"")}e.content=j},_postProcess:function(g,i){var f=this,e=f.editor,h=e.dom,d;if(e.settings.paste_enable_default_filters==false){return}if(i.wordContent){c(h.select("a",i.node),function(j){if(!j.href||j.href.indexOf("#_Toc")!=-1){h.remove(j,1)}});if(b(e,"paste_convert_middot_lists")){f._convertLists(g,i)}d=b(e,"paste_retain_style_properties");if((tinymce.is(d,"string"))&&(d!=="all")&&(d!=="*")){d=tinymce.explode(d.replace(/^none$/i,""));c(h.select("*",i.node),function(m){var n={},k=0,l,o,j;if(d){for(l=0;l0){h.setStyles(m,n)}else{if(m.nodeName=="SPAN"&&!m.className){h.remove(m,true)}}})}}if(b(e,"paste_remove_styles")||(b(e,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(h.select("*[style]",i.node),function(j){j.removeAttribute("style");j.removeAttribute("data-mce-style")})}else{if(tinymce.isWebKit){c(h.select("*",i.node),function(j){j.removeAttribute("data-mce-style")})}}},_convertLists:function(g,e){var i=g.editor.dom,h,l,d=-1,f,m=[],k,j;c(i.select("p",e.node),function(t){var q,u="",s,r,n,o;for(q=t.firstChild;q&&q.nodeType==3;q=q.nextSibling){u+=q.nodeValue}u=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/ /g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(u)){s="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(u)){s="ol"}if(s){f=parseFloat(t.style.marginLeft||0);if(f>d){m.push(f)}if(!h||s!=k){h=i.create(s);i.insertAfter(h,t)}else{if(f>d){h=l.appendChild(i.create(s))}else{if(f]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.( |\u00a0)*\s*/.test(p)){i.remove(v)}}});r=t.innerHTML;if(s=="ul"){r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*( |\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*[\w|'<'|'>']+\.( |\u00a0)+\s*/,"")}l=h.appendChild(i.create("li",0,r));i.remove(t);d=f;k=s}else{h=d=0}});j=e.node.innerHTML;if(j.indexOf("__MCE_ITEM__")!=-1){e.node.innerHTML=j.replace(/__MCE_ITEM__/g,"")}},_insert:function(f,d){var e=this.editor,g=e.selection.getRng();if(!e.selection.isCollapsed()&&g.startContainer!=g.endContainer){e.getDoc().execCommand("Delete",false,null)}e.execCommand("mceInsertContent",false,f,{skip_undo:d})},_insertPlainText:function(j){var h=this.editor,f=b(h,"paste_text_linebreaktype"),k=b(h,"paste_text_replacements"),g=tinymce.is;function e(m){c(m,function(n){if(n.constructor==RegExp){j=j.replace(n,"")}else{j=j.replace(n[0],n[1])}})}if((typeof(j)==="string")&&(j.length>0)){if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(j)){e([/[\n\r]+/g])}else{e([/\r+/g])}e([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/ /gi," "],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"]]);var d=Number(b(h,"paste_max_consecutive_linebreaks"));if(d>-1){var l=new RegExp("\n{"+(d+1)+",}","g");var i="";while(i.length"]])}else{if(f=="p"){e([[/\n+/g,"

"],[/^(.*<\/p>)(

)$/,"

$1"]])}else{e([[/\n\n/g,"

"],[/^(.*<\/p>)(

)$/,"

$1"],[/\n/g,"
"]])}}}h.execCommand("mceInsertContent",false,j)}},_legacySupport:function(){var e=this,d=e.editor;d.addCommand("mcePasteWord",function(){d.windowManager.open({file:e.url+"/pasteword.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})});if(b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(){d.windowManager.open({file:e.url+"/pastetext.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})})}d.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})(); \ No newline at end of file diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js index 0154eceb5..370b08281 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js @@ -291,7 +291,7 @@ } } - // Check if we should use the new auto process method + // Check if we should use the new auto process method if (getParam(ed, "paste_auto_cleanup_on_paste")) { // Is it's Opera or older FF use key handler if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) { @@ -354,7 +354,7 @@ h = h.replace(v[0], v[1]); }); } - + if (ed.settings.paste_enable_default_filters == false) { return; } @@ -413,7 +413,9 @@ // If JavaScript had a RegExp look-behind, we could have integrated this with the last process() array and got rid of the loop. But alas, it does not, so we cannot. do { len = h.length; - h = h.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1"); + // Don't remove the type attribute for lists so that non-default list types display correctly. + h = h.replace(/(]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1"); + h = h.replace(/(<(ol|ul)[^>]*\s)(?:id|name|language|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1"); } while (len != h.length); // Remove all spans if no styles is to be retained @@ -589,7 +591,7 @@ if (ed.settings.paste_enable_default_filters == false) { return; } - + if (o.wordContent) { // Remove named anchors or TOC links each(dom.select('a', o.node), function(a) { @@ -717,7 +719,7 @@ if (type == 'ul') html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*( |\u00a0)+\s*/, ''); else - html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.( |\u00a0)+\s*/, ''); + html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*[\w|'<'|'>']+\.( |\u00a0)+\s*/, '');; // Create li and add paragraph data into the new li li = listElm.appendChild(dom.create('li', 0, html)); diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js index 80284b9f3..d8522f0ed 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js @@ -14,6 +14,7 @@ var SearchReplaceDialog = { mcTabs.onChange.add(function(tab_id, panel_id) { t.switchMode(tab_id.substring(0, tab_id.indexOf('_'))); }); + }, switchMode : function(m) { @@ -39,6 +40,10 @@ var SearchReplaceDialog = { searchNext : function(a) { var ed = tinyMCEPopup.editor, se = ed.selection, r = se.getRng(), f, m = this.lastMode, s, b, fl = 0, w = ed.getWin(), wm = ed.windowManager, fo = 0; + function createTextRange() { + return ed.getDoc().selection ? ed.getDoc().selection.createRange() : ed.getDoc().body.createTextRange(); + } + // Get input f = document.forms[0]; s = f[m + '_panel_searchstring'].value; @@ -47,7 +52,7 @@ var SearchReplaceDialog = { rs = f['replace_panel_replacestring'].value; if (tinymce.isIE) { - r = ed.getDoc().selection.createRange(); + r = createTextRange(); } if (s == '') @@ -77,7 +82,7 @@ var SearchReplaceDialog = { if (tinymce.isIE) { ed.focus(); - r = ed.getDoc().selection.createRange(); + r = createTextRange(); while (r.findText(s, b ? -1 : 1, fl)) { r.scrollIntoView(); @@ -87,6 +92,10 @@ var SearchReplaceDialog = { if (b) { r.moveEnd("character", -(rs.length)); // Otherwise will loop forever + } else { + // to avoid looping for ever in MSIE 9/10 when just + // changing the case + r.moveStart("character", rs.length); } } @@ -121,7 +130,7 @@ var SearchReplaceDialog = { if (tinymce.isIE) { ed.focus(); - r = ed.getDoc().selection.createRange(); + r = createTextRange(); if (r.findText(s, b ? -1 : 1, fl)) { r.scrollIntoView(); diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js index 48549c923..6b57241a9 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js @@ -1 +1 @@ -(function(){var a=tinymce.util.JSONRequest,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.SpellcheckerPlugin",{getInfo:function(){return{longname:"Spellchecker",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker",version:tinymce.majorVersion+"."+tinymce.minorVersion}},init:function(e,f){var g=this,d;g.url=f;g.editor=e;g.rpcUrl=e.getParam("spellchecker_rpc_url","{backend}");if(g.rpcUrl=="{backend}"){if(tinymce.isIE){return}g.hasSupport=true;e.onContextMenu.addToTop(function(h,i){if(g.active){return false}})}e.addCommand("mceSpellCheck",function(){if(g.rpcUrl=="{backend}"){g.editor.getBody().spellcheck=g.active=!g.active;return}if(!g.active){e.setProgressState(1);g._sendRPC("checkWords",[g.selectedLang,g._getWords()],function(h){if(h.length>0){g.active=1;g._markWords(h);e.setProgressState(0);e.nodeChanged()}else{e.setProgressState(0);if(e.getParam("spellchecker_report_no_misspellings",true)){e.windowManager.alert("spellchecker.no_mpell")}}})}else{g._done()}});if(e.settings.content_css!==false){e.contentCSS.push(f+"/css/content.css")}e.onClick.add(g._showMenu,g);e.onContextMenu.add(g._showMenu,g);e.onBeforeGetContent.add(function(){if(g.active){g._removeWords()}});e.onNodeChange.add(function(i,h){h.setActive("spellchecker",g.active)});e.onSetContent.add(function(){g._done()});e.onBeforeGetContent.add(function(){g._done()});e.onBeforeExecCommand.add(function(h,i){if(i=="mceFullScreen"){g._done()}});g.languages={};c(e.getParam("spellchecker_languages","+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv","hash"),function(i,h){if(h.indexOf("+")===0){h=h.substring(1);g.selectedLang=i}g.languages[h]=i})},createControl:function(h,d){var f=this,g,e=f.editor;if(h=="spellchecker"){if(f.rpcUrl=="{backend}"){if(f.hasSupport){g=d.createButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f})}return g}g=d.createSplitButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f});g.onRenderMenu.add(function(j,i){i.add({title:"spellchecker.langs","class":"mceMenuItemTitle"}).setDisabled(1);c(f.languages,function(n,m){var p={icon:1},l;p.onclick=function(){if(n==f.selectedLang){return}l.setSelected(1);f.selectedItem.setSelected(0);f.selectedItem=l;f.selectedLang=n};p.title=m;l=i.add(p);l.setSelected(n==f.selectedLang);if(n==f.selectedLang){f.selectedItem=l}})});return g}},_walk:function(i,g){var h=this.editor.getDoc(),e;if(h.createTreeWalker){e=h.createTreeWalker(i,NodeFilter.SHOW_TEXT,null,false);while((i=e.nextNode())!=null){g.call(this,i)}}else{tinymce.walk(i,g,"childNodes")}},_getSeparators:function(){var e="",d,f=this.editor.getParam("spellchecker_word_separator_chars",'\\s!"#$%&()*+,-./:;<=>?@[]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');for(d=0;d$2");while((s=p.indexOf(""))!=-1){o=p.substring(0,s);if(o.length){r=j.createTextNode(g.decode(o));q.appendChild(r)}p=p.substring(s+10);s=p.indexOf("");o=p.substring(0,s);p=p.substring(s+11);q.appendChild(g.create("span",{"class":"mceItemHiddenSpellWord"},o))}if(p.length){r=j.createTextNode(g.decode(p));q.appendChild(r)}}else{q.innerHTML=p.replace(f,'$1$2')}g.replace(q,t)}});i.setRng(d)},_showMenu:function(h,j){var i=this,h=i.editor,d=i._menu,l,k=h.dom,g=k.getViewPort(h.getWin()),f=j.target;j=0;if(!d){d=h.controlManager.createDropMenu("spellcheckermenu",{"class":"mceNoIcons"});i._menu=d}if(k.hasClass(f,"mceItemHiddenSpellWord")){d.removeAll();d.add({title:"spellchecker.wait","class":"mceMenuItemTitle"}).setDisabled(1);i._sendRPC("getSuggestions",[i.selectedLang,k.decode(f.innerHTML)],function(m){var e;d.removeAll();if(m.length>0){d.add({title:"spellchecker.sug","class":"mceMenuItemTitle"}).setDisabled(1);c(m,function(n){d.add({title:n,onclick:function(){k.replace(h.getDoc().createTextNode(n),f);i._checkDone()}})});d.addSeparator()}else{d.add({title:"spellchecker.no_sug","class":"mceMenuItemTitle"}).setDisabled(1)}if(h.getParam("show_ignore_words",true)){e=i.editor.getParam("spellchecker_enable_ignore_rpc","");d.add({title:"spellchecker.ignore_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});d.add({title:"spellchecker.ignore_words",onclick:function(){var n=f.innerHTML;i._removeWords(k.decode(n));i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWords",[i.selectedLang,n],function(o){h.setProgressState(0)})}}})}if(i.editor.getParam("spellchecker_enable_learn_rpc")){d.add({title:"spellchecker.learn_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();h.setProgressState(1);i._sendRPC("learnWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}})}d.update()});l=b.getPos(h.getContentAreaContainer());d.settings.offset_x=l.x;d.settings.offset_y=l.y;h.selection.select(f);l=k.getPos(f);d.showMenu(l.x,l.y+f.offsetHeight-g.y);return tinymce.dom.Event.cancel(j)}else{d.hideMenu()}},_checkDone:function(){var e=this,d=e.editor,g=d.dom,f;c(g.select("span"),function(h){if(h&&g.hasClass(h,"mceItemHiddenSpellWord")){f=true;return false}});if(!f){e._done()}},_done:function(){var d=this,e=d.active;if(d.active){d.active=0;d._removeWords();if(d._menu){d._menu.hideMenu()}if(e){d.editor.nodeChanged()}}},_sendRPC:function(e,g,d){var f=this;a.sendRPC({url:f.rpcUrl,method:e,params:g,success:d,error:function(i,h){f.editor.setProgressState(0);f.editor.windowManager.alert(i.errstr||("Error response: "+h.responseText))}})}});tinymce.PluginManager.add("spellchecker",tinymce.plugins.SpellcheckerPlugin)})(); \ No newline at end of file +(function(){var a=tinymce.util.JSONRequest,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.SpellcheckerPlugin",{getInfo:function(){return{longname:"Spellchecker",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker",version:tinymce.majorVersion+"."+tinymce.minorVersion}},init:function(e,f){var g=this,d;g.url=f;g.editor=e;g.rpcUrl=e.getParam("spellchecker_rpc_url","{backend}");if(g.rpcUrl=="{backend}"){if(tinymce.isIE){return}g.hasSupport=true;e.onContextMenu.addToTop(function(h,i){if(g.active){return false}})}e.addCommand("mceSpellCheck",function(){if(g.rpcUrl=="{backend}"){g.editor.getBody().spellcheck=g.active=!g.active;return}if(!g.active){e.setProgressState(1);g._sendRPC("checkWords",[g.selectedLang,g._getWords()],function(h){if(h.length>0){g.active=1;g._markWords(h);e.setProgressState(0);e.nodeChanged()}else{e.setProgressState(0);if(e.getParam("spellchecker_report_no_misspellings",true)){e.windowManager.alert("spellchecker.no_mpell")}}})}else{g._done()}});if(e.settings.content_css!==false){e.contentCSS.push(f+"/css/content.css")}e.onClick.add(g._showMenu,g);e.onContextMenu.add(g._showMenu,g);e.onBeforeGetContent.add(function(){if(g.active){g._removeWords()}});e.onNodeChange.add(function(i,h){h.setActive("spellchecker",g.active)});e.onSetContent.add(function(){g._done()});e.onBeforeGetContent.add(function(){g._done()});e.onBeforeExecCommand.add(function(h,i){if(i=="mceFullScreen"){g._done()}});g.languages={};c(e.getParam("spellchecker_languages","+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv","hash"),function(i,h){if(h.indexOf("+")===0){h=h.substring(1);g.selectedLang=i}g.languages[h]=i})},createControl:function(h,d){var f=this,g,e=f.editor;if(h=="spellchecker"){if(f.rpcUrl=="{backend}"){if(f.hasSupport){g=d.createButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f})}return g}g=d.createSplitButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f});g.onRenderMenu.add(function(j,i){i.add({title:"spellchecker.langs","class":"mceMenuItemTitle"}).setDisabled(1);f.menuItems={};c(f.languages,function(n,m){var p={icon:1},l;p.onclick=function(){if(n==f.selectedLang){return}f._updateMenu(l);f.selectedLang=n};p.title=m;l=i.add(p);l.setSelected(n==f.selectedLang);f.menuItems[n]=l;if(n==f.selectedLang){f.selectedItem=l}})});return g}},setLanguage:function(e){var d=this;if(e==d.selectedLang){return}if(tinymce.grep(d.languages,function(f){return f===e}).length===0){throw"Unknown language: "+e}d.selectedLang=e;if(d.menuItems){d._updateMenu(d.menuItems[e])}if(d.active){d._done()}},_updateMenu:function(d){d.setSelected(1);this.selectedItem.setSelected(0);this.selectedItem=d},_walk:function(i,g){var h=this.editor.getDoc(),e;if(h.createTreeWalker){e=h.createTreeWalker(i,NodeFilter.SHOW_TEXT,null,false);while((i=e.nextNode())!=null){g.call(this,i)}}else{tinymce.walk(i,g,"childNodes")}},_getSeparators:function(){var e="",d,f=this.editor.getParam("spellchecker_word_separator_chars",'\\s!"#$%&()*+,-./:;<=>?@[]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');for(d=0;d$2");while((s=p.indexOf(""))!=-1){o=p.substring(0,s);if(o.length){r=j.createTextNode(g.decode(o));q.appendChild(r)}p=p.substring(s+10);s=p.indexOf("");o=p.substring(0,s);p=p.substring(s+11);q.appendChild(g.create("span",{"class":"mceItemHiddenSpellWord"},o))}if(p.length){r=j.createTextNode(g.decode(p));q.appendChild(r)}}else{q.innerHTML=p.replace(f,'$1$2')}g.replace(q,t)}});i.setRng(d)},_showMenu:function(h,j){var i=this,h=i.editor,d=i._menu,l,k=h.dom,g=k.getViewPort(h.getWin()),f=j.target;j=0;if(!d){d=h.controlManager.createDropMenu("spellcheckermenu",{"class":"mceNoIcons"});i._menu=d}if(k.hasClass(f,"mceItemHiddenSpellWord")){d.removeAll();d.add({title:"spellchecker.wait","class":"mceMenuItemTitle"}).setDisabled(1);i._sendRPC("getSuggestions",[i.selectedLang,k.decode(f.innerHTML)],function(m){var e;d.removeAll();if(m.length>0){d.add({title:"spellchecker.sug","class":"mceMenuItemTitle"}).setDisabled(1);c(m,function(n){d.add({title:n,onclick:function(){k.replace(h.getDoc().createTextNode(n),f);i._checkDone()}})});d.addSeparator()}else{d.add({title:"spellchecker.no_sug","class":"mceMenuItemTitle"}).setDisabled(1)}if(h.getParam("show_ignore_words",true)){e=i.editor.getParam("spellchecker_enable_ignore_rpc","");d.add({title:"spellchecker.ignore_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});d.add({title:"spellchecker.ignore_words",onclick:function(){var n=f.innerHTML;i._removeWords(k.decode(n));i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWords",[i.selectedLang,n],function(o){h.setProgressState(0)})}}})}if(i.editor.getParam("spellchecker_enable_learn_rpc")){d.add({title:"spellchecker.learn_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();h.setProgressState(1);i._sendRPC("learnWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}})}d.update()});l=b.getPos(h.getContentAreaContainer());d.settings.offset_x=l.x;d.settings.offset_y=l.y;h.selection.select(f);l=k.getPos(f);d.showMenu(l.x,l.y+f.offsetHeight-g.y);return tinymce.dom.Event.cancel(j)}else{d.hideMenu()}},_checkDone:function(){var e=this,d=e.editor,g=d.dom,f;c(g.select("span"),function(h){if(h&&g.hasClass(h,"mceItemHiddenSpellWord")){f=true;return false}});if(!f){e._done()}},_done:function(){var d=this,e=d.active;if(d.active){d.active=0;d._removeWords();if(d._menu){d._menu.hideMenu()}if(e){d.editor.nodeChanged()}}},_sendRPC:function(e,g,d){var f=this;a.sendRPC({url:f.rpcUrl,method:e,params:g,success:d,error:function(i,h){f.editor.setProgressState(0);f.editor.windowManager.alert(i.errstr||("Error response: "+h.responseText))}})}});tinymce.PluginManager.add("spellchecker",tinymce.plugins.SpellcheckerPlugin)})(); \ No newline at end of file diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js index 86fdfceb4..5751b0e52 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js @@ -126,6 +126,7 @@ c.onRenderMenu.add(function(c, m) { m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1); + t.menuItems = {}; each(t.languages, function(v, k) { var o = {icon : 1}, mi; @@ -133,27 +134,60 @@ if (v == t.selectedLang) { return; } - mi.setSelected(1); - t.selectedItem.setSelected(0); - t.selectedItem = mi; + t._updateMenu(mi); t.selectedLang = v; }; o.title = k; mi = m.add(o); mi.setSelected(v == t.selectedLang); - + t.menuItems[v] = mi; if (v == t.selectedLang) t.selectedItem = mi; - }) + }); }); + + return c; } }, + setLanguage: function(lang) { + var t = this; + + if (lang == t.selectedLang) { + // allowed + return; + } + + if (tinymce.grep(t.languages, function(v) { return v === lang; }).length === 0) { + throw "Unknown language: " + lang; + } + + t.selectedLang = lang; + + // if the menu has been shown, update it as well + if (t.menuItems) { + t._updateMenu(t.menuItems[lang]); + } + + if (t.active) { + // clear error in the old language. + t._done(); + + // Don't immediately block the UI to check spelling in the new language, this is an API not a user action. + } + }, + // Internal functions + _updateMenu: function(mi) { + mi.setSelected(1); + this.selectedItem.setSelected(0); + this.selectedItem = mi; + }, + _walk : function(n, f) { var d = this.editor.getDoc(), w; @@ -235,6 +269,7 @@ each(nl, function(n) { var node, elem, txt, pos, v = n.nodeValue; + rx.lastIndex = 0; if (rx.test(v)) { // Encode the content v = dom.encode(v); diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/cell.htm b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/cell.htm index a72a8d697..1be54542b 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/cell.htm +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/cell.htm @@ -35,7 +35,7 @@ - + - @@ -95,8 +94,8 @@ - - + + @@ -105,25 +104,25 @@ - + + - + + - + + - + + - + +
- + + + -
-
@@ -131,11 +130,11 @@
 
-
@@ -143,11 +142,11 @@
 
-
@@ -155,7 +154,7 @@
 
-
diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/css/cell.css b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/css/cell.css index 2786f5cb4..a067ecdfe 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/css/cell.css +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/css/cell.css @@ -10,7 +10,6 @@ #action { margin-bottom: 3px; - margin-up: 3px; } #class { diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/css/row.css b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/css/row.css index 85b350ed8..1f7755daf 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/css/row.css +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/css/row.css @@ -10,7 +10,6 @@ #action { margin-bottom: 3px; - margin-up: 3px; } #rowtype,#align,#valign,#class,#height { diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js index c4c3264e0..dbdadd184 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js @@ -1 +1 @@ -(function(d){var e=d.each;function c(g,h){var j=h.ownerDocument,f=j.createRange(),k;f.setStartBefore(h);f.setEnd(g.endContainer,g.endOffset);k=j.createElement("body");k.appendChild(f.cloneContents());return k.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length==0}function a(g,f){return parseInt(g.getAttribute(f)||1)}function b(H,G,K){var g,L,D,o;t();o=G.getParent(K.getStart(),"th,td");if(o){L=F(o);D=I();o=z(L.x,L.y)}function A(N,M){N=N.cloneNode(M);N.removeAttribute("id");return N}function t(){var M=0;g=[];e(["thead","tbody","tfoot"],function(N){var O=G.select("> "+N+" tr",H);e(O,function(P,Q){Q+=M;e(G.select("> td, > th",P),function(W,R){var S,T,U,V;if(g[Q]){while(g[Q][R]){R++}}U=a(W,"rowspan");V=a(W,"colspan");for(T=Q;T'}return false}},"childNodes");M=A(M,false);s(M,"rowSpan",1);s(M,"colSpan",1);if(N){M.appendChild(N)}else{if(!d.isIE){M.innerHTML='
'}}return M}function q(){var M=G.createRng();e(G.select("tr",H),function(N){if(N.cells.length==0){G.remove(N)}});if(G.select("tr",H).length==0){M.setStartAfter(H);M.setEndAfter(H);K.setRng(M);G.remove(H);return}e(G.select("thead,tbody,tfoot",H),function(N){if(N.rows.length==0){G.remove(N)}});t();row=g[Math.min(g.length-1,L.y)];if(row){K.select(row[Math.min(row.length-1,L.x)].elm,true);K.collapse(true)}}function u(S,Q,U,R){var P,N,M,O,T;P=g[Q][S].elm.parentNode;for(M=1;M<=U;M++){P=G.getNext(P,"tr");if(P){for(N=S;N>=0;N--){T=g[Q+M][N].elm;if(T.parentNode==P){for(O=1;O<=R;O++){G.insertAfter(f(T),T)}break}}if(N==-1){for(O=1;O<=R;O++){P.insertBefore(f(P.cells[0]),P.cells[0])}}}}}function C(){e(g,function(M,N){e(M,function(P,O){var S,R,T,Q;if(j(P)){P=P.elm;S=a(P,"colspan");R=a(P,"rowspan");if(S>1||R>1){s(P,"rowSpan",1);s(P,"colSpan",1);for(Q=0;Q1){s(S,"rowSpan",O+1);continue}}else{if(M>0&&g[M-1][R]){V=g[M-1][R].elm;O=a(V,"rowSpan");if(O>1){s(V,"rowSpan",O+1);continue}}}N=f(S);s(N,"colSpan",S.colSpan);U.appendChild(N);P=S}}if(U.hasChildNodes()){if(!Q){G.insertAfter(U,T)}else{T.parentNode.insertBefore(U,T)}}}function h(N){var O,M;e(g,function(P,Q){e(P,function(S,R){if(j(S)){O=R;if(N){return false}}});if(N){return !O}});e(g,function(S,T){var P,Q,R;if(!S[O]){return}P=S[O].elm;if(P!=M){R=a(P,"colspan");Q=a(P,"rowspan");if(R==1){if(!N){G.insertAfter(f(P),P);u(O,T,Q-1,R)}else{P.parentNode.insertBefore(f(P),P);u(O,T,Q-1,R)}}else{s(P,"colSpan",P.colSpan+1)}M=P}})}function n(){var M=[];e(g,function(N,O){e(N,function(Q,P){if(j(Q)&&d.inArray(M,P)===-1){e(g,function(T){var R=T[P].elm,S;S=a(R,"colSpan");if(S>1){s(R,"colSpan",S-1)}else{G.remove(R)}});M.push(P)}})});q()}function m(){var N;function M(Q){var P,R,O;P=G.getNext(Q,"tr");e(Q.cells,function(S){var T=a(S,"rowSpan");if(T>1){s(S,"rowSpan",T-1);R=F(S);u(R.x,R.y,1,1)}});R=F(Q.cells[0]);e(g[R.y],function(S){var T;S=S.elm;if(S!=O){T=a(S,"rowSpan");if(T<=1){G.remove(S)}else{s(S,"rowSpan",T-1)}O=S}})}N=k();e(N.reverse(),function(O){M(O)});q()}function E(){var M=k();G.remove(M);q();return M}function J(){var M=k();e(M,function(O,N){M[N]=A(O,true)});return M}function B(O,N){var P=k(),M=P[N?0:P.length-1],Q=M.cells.length;e(g,function(S){var R;Q=0;e(S,function(U,T){if(U.real){Q+=U.colspan}if(U.elm.parentNode==M){R=1}});if(R){return false}});if(!N){O.reverse()}e(O,function(T){var S=T.cells.length,R;for(i=0;iN){N=R}if(Q>M){M=Q}if(S.real){U=S.colspan-1;T=S.rowspan-1;if(U){if(R+U>N){N=R+U}}if(T){if(Q+T>M){M=Q+T}}}}})});return{x:N,y:M}}function v(S){var P,O,U,T,N,M,Q,R;D=F(S);if(L&&D){P=Math.min(L.x,D.x);O=Math.min(L.y,D.y);U=Math.max(L.x,D.x);T=Math.max(L.y,D.y);N=U;M=T;for(y=O;y<=M;y++){S=g[y][P];if(!S.real){if(P-(S.colspan-1)N){N=x+Q}}if(R){if(y+R>M){M=y+R}}}}}G.removeClass(G.select("td.mceSelected,th.mceSelected"),"mceSelected");for(y=O;y<=M;y++){for(x=P;x<=N;x++){if(g[y][x]){G.addClass(g[y][x].elm,"mceSelected")}}}}}d.extend(this,{deleteTable:r,split:C,merge:p,insertRow:l,insertCol:h,deleteCols:n,deleteRows:m,cutRows:E,copyRows:J,pasteRows:B,getPos:F,setStartCell:w,setEndCell:v})}d.create("tinymce.plugins.TablePlugin",{init:function(g,h){var f,m,j=true;function l(p){var o=g.selection,n=g.dom.getParent(p||o.getNode(),"table");if(n){return new b(n,g.dom,o)}}function k(){g.getBody().style.webkitUserSelect="";if(j){g.dom.removeClass(g.dom.select("td.mceSelected,th.mceSelected"),"mceSelected");j=false}}e([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(n){g.addButton(n[0],{title:n[1],cmd:n[2],ui:n[3]})});if(!d.isIE){g.onClick.add(function(n,o){o=o.target;if(o.nodeName==="TABLE"){n.selection.select(o);n.nodeChanged()}})}g.onPreProcess.add(function(o,p){var n,q,r,t=o.dom,s;n=t.select("table",p.node);q=n.length;while(q--){r=n[q];t.setAttrib(r,"data-mce-style","");if((s=t.getAttrib(r,"width"))){t.setStyle(r,"width",s);t.setAttrib(r,"width","")}if((s=t.getAttrib(r,"height"))){t.setStyle(r,"height",s);t.setAttrib(r,"height","")}}});g.onNodeChange.add(function(q,o,s){var r;s=q.selection.getStart();r=q.dom.getParent(s,"td,th,caption");o.setActive("table",s.nodeName==="TABLE"||!!r);if(r&&r.nodeName==="CAPTION"){r=0}o.setDisabled("delete_table",!r);o.setDisabled("delete_col",!r);o.setDisabled("delete_table",!r);o.setDisabled("delete_row",!r);o.setDisabled("col_after",!r);o.setDisabled("col_before",!r);o.setDisabled("row_after",!r);o.setDisabled("row_before",!r);o.setDisabled("row_props",!r);o.setDisabled("cell_props",!r);o.setDisabled("split_cells",!r);o.setDisabled("merge_cells",!r)});g.onInit.add(function(r){var p,t,q=r.dom,u;f=r.windowManager;r.onMouseDown.add(function(w,z){if(z.button!=2){k();t=q.getParent(z.target,"td,th");p=q.getParent(t,"table")}});q.bind(r.getDoc(),"mouseover",function(C){var A,z,B=C.target;if(t&&(u||B!=t)&&(B.nodeName=="TD"||B.nodeName=="TH")){z=q.getParent(B,"table");if(z==p){if(!u){u=l(z);u.setStartCell(t);r.getBody().style.webkitUserSelect="none"}u.setEndCell(B);j=true}A=r.selection.getSel();try{if(A.removeAllRanges){A.removeAllRanges()}else{A.empty()}}catch(w){}C.preventDefault()}});r.onMouseUp.add(function(F,G){var z,B=F.selection,H,I=B.getSel(),w,C,A,E;if(t){if(u){F.getBody().style.webkitUserSelect=""}function D(J,L){var K=new d.dom.TreeWalker(J,J);do{if(J.nodeType==3&&d.trim(J.nodeValue).length!=0){if(L){z.setStart(J,0)}else{z.setEnd(J,J.nodeValue.length)}return}if(J.nodeName=="BR"){if(L){z.setStartBefore(J)}else{z.setEndBefore(J)}return}}while(J=(L?K.next():K.prev()))}H=q.select("td.mceSelected,th.mceSelected");if(H.length>0){z=q.createRng();C=H[0];E=H[H.length-1];z.setStartBefore(C);z.setEndAfter(C);D(C,1);w=new d.dom.TreeWalker(C,q.getParent(H[0],"table"));do{if(C.nodeName=="TD"||C.nodeName=="TH"){if(!q.hasClass(C,"mceSelected")){break}A=C}}while(C=w.next());D(A);B.setRng(z)}F.nodeChanged();t=u=p=null}});r.onKeyUp.add(function(w,z){k()});r.onKeyDown.add(function(w,z){n(w)});r.onMouseDown.add(function(w,z){if(z.button!=2){n(w)}});function o(D,z,A,F){var B=3,G=D.dom.getParent(z.startContainer,"TABLE"),C,w,E;if(G){C=G.parentNode}w=z.startContainer.nodeType==B&&z.startOffset==0&&z.endOffset==0&&F&&(A.nodeName=="TR"||A==C);E=(A.nodeName=="TD"||A.nodeName=="TH")&&!F;return w||E}function n(A){if(!d.isWebKit){return}var z=A.selection.getRng();var C=A.selection.getNode();var B=A.dom.getParent(z.startContainer,"TD,TH");if(!o(A,z,C,B)){return}if(!B){B=C}var w=B.lastChild;while(w.lastChild){w=w.lastChild}z.setEnd(w,w.nodeValue.length);A.selection.setRng(z)}r.plugins.table.fixTableCellSelection=n;if(r&&r.plugins.contextmenu){r.plugins.contextmenu.onContextMenu.add(function(A,w,C){var D,B=r.selection,z=B.getNode()||r.getBody();if(r.dom.getParent(C,"td")||r.dom.getParent(C,"th")||r.dom.select("td.mceSelected,th.mceSelected").length){w.removeAll();if(z.nodeName=="A"&&!r.dom.getAttrib(z,"name")){w.add({title:"advanced.link_desc",icon:"link",cmd:r.plugins.advlink?"mceAdvLink":"mceLink",ui:true});w.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});w.addSeparator()}if(z.nodeName=="IMG"&&z.className.indexOf("mceItem")==-1){w.add({title:"advanced.image_desc",icon:"image",cmd:r.plugins.advimage?"mceAdvImage":"mceImage",ui:true});w.addSeparator()}w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});w.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});w.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});w.addSeparator();D=w.addMenu({title:"table.cell"});D.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});D.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});D.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});D=w.addMenu({title:"table.row"});D.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});D.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});D.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});D.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});D.addSeparator();D.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});D.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});D.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!m);D.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!m);D=w.addMenu({title:"table.col"});D.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});D.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});D.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(d.isWebKit){function v(C,N){var L=d.VK;var Q=N.keyCode;function O(Y,U,S){var T=Y?"previousSibling":"nextSibling";var Z=C.dom.getParent(U,"tr");var X=Z[T];if(X){z(C,U,X,Y);d.dom.Event.cancel(S);return true}else{var aa=C.dom.getParent(Z,"table");var W=Z.parentNode;var R=W.nodeName.toLowerCase();if(R==="tbody"||R===(Y?"tfoot":"thead")){var V=w(Y,aa,W,"tbody");if(V!==null){return K(Y,V,U,S)}}return M(Y,Z,T,aa,S)}}function w(V,T,U,X){var S=C.dom.select(">"+X,T);var R=S.indexOf(U);if(V&&R===0||!V&&R===S.length-1){return B(V,T)}else{if(R===-1){var W=U.tagName.toLowerCase()==="thead"?0:S.length-1;return S[W]}else{return S[R+(V?-1:1)]}}}function B(U,T){var S=U?"thead":"tfoot";var R=C.dom.select(">"+S,T);return R.length!==0?R[0]:null}function K(V,T,S,U){var R=J(T,V);R&&z(C,S,R,V);d.dom.Event.cancel(U);return true}function M(Y,U,R,X,W){var S=X[R];if(S){F(S);return true}else{var V=C.dom.getParent(X,"td,th");if(V){return O(Y,V,W)}else{var T=J(U,!Y);F(T);return d.dom.Event.cancel(W)}}}function J(S,R){var T=S&&S[R?"lastChild":"firstChild"];return T&&T.nodeName==="BR"?C.dom.getParent(T,"td,th"):T}function F(R){C.selection.setCursorLocation(R,0)}function A(){return Q==L.UP||Q==L.DOWN}function D(R){var T=R.selection.getNode();var S=R.dom.getParent(T,"tr");return S!==null}function P(S){var R=0;var T=S;while(T.previousSibling){T=T.previousSibling;R=R+a(T,"colspan")}return R}function E(T,R){var U=0;var S=0;e(T.children,function(V,W){U=U+a(V,"colspan");S=W;if(U>R){return false}});return S}function z(T,W,Y,V){var X=P(T.dom.getParent(W,"td,th"));var S=E(Y,X);var R=Y.childNodes[S];var U=J(R,V);F(U||R)}function H(R){var T=C.selection.getNode();var U=C.dom.getParent(T,"td,th");var S=C.dom.getParent(R,"td,th");return U&&U!==S&&I(U,S)}function I(S,R){return C.dom.getParent(S,"TABLE")===C.dom.getParent(R,"TABLE")}if(A()&&D(C)){var G=C.selection.getNode();setTimeout(function(){if(H(G)){O(!N.shiftKey&&Q===L.UP,G,N)}},0)}}r.onKeyDown.add(v)}function s(){var w;for(w=r.getBody().lastChild;w&&w.nodeType==3&&!w.nodeValue.length;w=w.previousSibling){}if(w&&w.nodeName=="TABLE"){if(r.settings.forced_root_block){r.dom.add(r.getBody(),r.settings.forced_root_block,null,d.isIE?" ":'
')}else{r.dom.add(r.getBody(),"br",{"data-mce-bogus":"1"})}}}if(d.isGecko){r.onKeyDown.add(function(z,B){var w,A,C=z.dom;if(B.keyCode==37||B.keyCode==38){w=z.selection.getRng();A=C.getParent(w.startContainer,"table");if(A&&z.getBody().firstChild==A){if(c(w,A)){w=C.createRng();w.setStartBefore(A);w.setEndBefore(A);z.selection.setRng(w);B.preventDefault()}}}})}r.onKeyUp.add(s);r.onSetContent.add(s);r.onVisualAid.add(s);r.onPreProcess.add(function(w,A){var z=A.node.lastChild;if(z&&(z.nodeName=="BR"||(z.childNodes.length==1&&(z.firstChild.nodeName=="BR"||z.firstChild.nodeValue=="\u00a0")))&&z.previousSibling&&z.previousSibling.nodeName=="TABLE"){w.dom.remove(z)}});s();r.startContent=r.getContent({format:"raw"})});e({mceTableSplitCells:function(n){n.split()},mceTableMergeCells:function(o){var p,q,n;n=g.dom.getParent(g.selection.getNode(),"th,td");if(n){p=n.rowSpan;q=n.colSpan}if(!g.dom.select("td.mceSelected,th.mceSelected").length){f.open({url:h+"/merge_cells.htm",width:240+parseInt(g.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(g.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:p,cols:q,onaction:function(r){o.merge(n,r.cols,r.rows)},plugin_url:h})}else{o.merge()}},mceTableInsertRowBefore:function(n){n.insertRow(true)},mceTableInsertRowAfter:function(n){n.insertRow()},mceTableInsertColBefore:function(n){n.insertCol(true)},mceTableInsertColAfter:function(n){n.insertCol()},mceTableDeleteCol:function(n){n.deleteCols()},mceTableDeleteRow:function(n){n.deleteRows()},mceTableCutRow:function(n){m=n.cutRows()},mceTableCopyRow:function(n){m=n.copyRows()},mceTablePasteRowBefore:function(n){n.pasteRows(m,true)},mceTablePasteRowAfter:function(n){n.pasteRows(m)},mceTableDelete:function(n){n.deleteTable()}},function(o,n){g.addCommand(n,function(){var p=l();if(p){o(p);g.execCommand("mceRepaint");k()}})});e({mceInsertTable:function(n){f.open({url:h+"/table.htm",width:400+parseInt(g.getLang("table.table_delta_width",0)),height:320+parseInt(g.getLang("table.table_delta_height",0)),inline:1},{plugin_url:h,action:n?n.action:0})},mceTableRowProps:function(){f.open({url:h+"/row.htm",width:400+parseInt(g.getLang("table.rowprops_delta_width",0)),height:295+parseInt(g.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:h})},mceTableCellProps:function(){f.open({url:h+"/cell.htm",width:400+parseInt(g.getLang("table.cellprops_delta_width",0)),height:295+parseInt(g.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:h})}},function(o,n){g.addCommand(n,function(p,q){o(q)})})}});d.PluginManager.add("table",d.plugins.TablePlugin)})(tinymce); \ No newline at end of file +(function(d){var e=d.each;function c(g,h){var i=h.ownerDocument,f=i.createRange(),j;f.setStartBefore(h);f.setEnd(g.endContainer,g.endOffset);j=i.createElement("body");j.appendChild(f.cloneContents());return j.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length===0}function a(g,f){return parseInt(g.getAttribute(f)||1,10)}function b(E,D,H){var g,I,A,n;function x(K,J){K=K.cloneNode(J);K.removeAttribute("id");return K}function s(){var J=0;g=[];e(["thead","tbody","tfoot"],function(K){var L=D.select("> "+K+" tr",E);e(L,function(M,N){N+=J;e(D.select("> td, > th",M),function(T,O){var P,Q,R,S;if(g[N]){while(g[N][O]){O++}}R=a(T,"rowspan");S=a(T,"colspan");for(Q=N;Q'}return false}},"childNodes");J=x(J,false);r(J,"rowSpan",1);r(J,"colSpan",1);if(K){J.appendChild(K)}else{if(!d.isIE||d.isIE11){J.innerHTML='
'}}return J}function p(){var J=D.createRng(),K;e(D.select("tr",E),function(L){if(L.cells.length===0){D.remove(L)}});if(D.select("tr",E).length===0){J.setStartAfter(E);J.setEndAfter(E);H.setRng(J);D.remove(E);return}e(D.select("thead,tbody,tfoot",E),function(L){if(L.rows.length===0){D.remove(L)}});s();K=g[Math.min(g.length-1,I.y)];if(K){H.select(K[Math.min(K.length-1,I.x)].elm,true);H.collapse(true)}}function t(P,N,R,O){var M,K,J,L,Q;M=g[N][P].elm.parentNode;for(J=1;J<=R;J++){M=D.getNext(M,"tr");if(M){for(K=P;K>=0;K--){Q=g[N+J][K].elm;if(Q.parentNode==M){for(L=1;L<=O;L++){D.insertAfter(f(Q),Q)}break}}if(K==-1){for(L=1;L<=O;L++){M.insertBefore(f(M.cells[0]),M.cells[0])}}}}}function z(){e(g,function(J,K){e(J,function(M,L){var P,O,N;if(i(M)){M=M.elm;P=a(M,"colspan");O=a(M,"rowspan");if(P>1||O>1){r(M,"rowSpan",1);r(M,"colSpan",1);for(N=0;N1){r(P,"rowSpan",L+1);continue}}else{if(J>0&&g[J-1][O]){S=g[J-1][O].elm;L=a(S,"rowSpan");if(L>1){r(S,"rowSpan",L+1);continue}}}K=f(P);r(K,"colSpan",P.colSpan);R.appendChild(K);M=P}}if(R.hasChildNodes()){if(!N){D.insertAfter(R,Q)}else{Q.parentNode.insertBefore(R,Q)}}}function h(K){var L,J;e(g,function(M){e(M,function(O,N){if(i(O)){L=N;if(K){return false}}});if(K){return !L}});e(g,function(P,Q){var M,N,O;if(!P[L]){return}M=P[L].elm;if(M!=J){O=a(M,"colspan");N=a(M,"rowspan");if(O==1){if(!K){D.insertAfter(f(M),M);t(L,Q,N-1,O)}else{M.parentNode.insertBefore(f(M),M);t(L,Q,N-1,O)}}else{r(M,"colSpan",M.colSpan+1)}J=M}})}function m(){var J=[];e(g,function(K){e(K,function(M,L){if(i(M)&&d.inArray(J,L)===-1){e(g,function(P){var N=P[L].elm,O;O=a(N,"colSpan");if(O>1){r(N,"colSpan",O-1)}else{D.remove(N)}});J.push(L)}})});p()}function l(){var K;function J(M){var N,L;e(M.cells,function(O){var P=a(O,"rowSpan");if(P>1){r(O,"rowSpan",P-1);N=C(O);t(N.x,N.y,1,1)}});N=C(M.cells[0]);e(g[N.y],function(O){var P;O=O.elm;if(O!=L){P=a(O,"rowSpan");if(P<=1){D.remove(O)}else{r(O,"rowSpan",P-1)}L=O}})}K=j();e(K.reverse(),function(L){J(L)});p()}function B(){var J=j();D.remove(J);p();return J}function G(){var J=j();e(J,function(L,K){J[K]=x(L,true)});return J}function y(L,K){if(!L){return}var M=j(),J=M[K?0:M.length-1],N=J.cells.length;e(g,function(P){var O;N=0;e(P,function(Q){if(Q.real){N+=Q.colspan}if(Q.elm.parentNode==J){O=1}});if(O){return false}});if(!K){L.reverse()}e(L,function(R){var Q=R.cells.length,O,P;for(P=0;PK){K=N}if(M>J){J=M}if(O.real){Q=O.colspan-1;P=O.rowspan-1;if(Q){if(N+Q>K){K=N+Q}}if(P){if(M+P>J){J=M+P}}}}})});return{x:K,y:J}}function u(R){var M,L,T,S,K,J,N,O,P,Q;A=C(R);if(I&&A){M=Math.min(I.x,A.x);L=Math.min(I.y,A.y);T=Math.max(I.x,A.x);S=Math.max(I.y,A.y);K=T;J=S;for(P=L;P<=J;P++){R=g[P][M];if(!R.real){if(M-(R.colspan-1)K){K=Q+N}}if(O){if(P+O>J){J=P+O}}}}}D.removeClass(D.select("td.mceSelected,th.mceSelected"),"mceSelected");for(P=L;P<=J;P++){for(Q=M;Q<=K;Q++){if(g[P][Q]){D.addClass(g[P][Q].elm,"mceSelected")}}}}}s();n=D.getParent(H.getStart(),"th,td");if(n){I=C(n);A=F();n=w(I.x,I.y)}d.extend(this,{deleteTable:q,split:z,merge:o,insertRow:k,insertCol:h,deleteCols:m,deleteRows:l,cutRows:B,copyRows:G,pasteRows:y,getPos:C,setStartCell:v,setEndCell:u})}d.create("tinymce.plugins.TablePlugin",{init:function(g,h){var f,l,i=true;function k(o){var n=g.selection,m=g.dom.getParent(o||n.getNode(),"table");if(m){return new b(m,g.dom,n)}}function j(){g.getBody().style.webkitUserSelect="";if(i){g.dom.removeClass(g.dom.select("td.mceSelected,th.mceSelected"),"mceSelected");i=false}}e([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(m){g.addButton(m[0],{title:m[1],cmd:m[2],ui:m[3]})});if(!d.isIE){g.onClick.add(function(m,n){n=n.target;if(n.nodeName==="TABLE"){m.selection.select(n);m.nodeChanged()}})}g.onPreProcess.add(function(n,o){var m,p,q,s=n.dom,r;m=s.select("table",o.node);p=m.length;while(p--){q=m[p];s.setAttrib(q,"data-mce-style","");if((r=s.getAttrib(q,"width"))){s.setStyle(q,"width",r);s.setAttrib(q,"width","")}if((r=s.getAttrib(q,"height"))){s.setStyle(q,"height",r);s.setAttrib(q,"height","")}}});g.onNodeChange.add(function(o,m,r){var q;r=o.selection.getStart();q=o.dom.getParent(r,"td,th,caption");m.setActive("table",r.nodeName==="TABLE"||!!q);if(q&&q.nodeName==="CAPTION"){q=0}m.setDisabled("delete_table",!q);m.setDisabled("delete_col",!q);m.setDisabled("delete_table",!q);m.setDisabled("delete_row",!q);m.setDisabled("col_after",!q);m.setDisabled("col_before",!q);m.setDisabled("row_after",!q);m.setDisabled("row_before",!q);m.setDisabled("row_props",!q);m.setDisabled("cell_props",!q);m.setDisabled("split_cells",!q);m.setDisabled("merge_cells",!q)});g.onInit.add(function(q){var o,s,p=q.dom,t;f=q.windowManager;q.onMouseDown.add(function(v,w){if(w.button!=2){j();s=p.getParent(w.target,"td,th");o=p.getParent(s,"table")}});p.bind(q.getDoc(),"mouseover",function(z){var x,w,y=z.target;if(s&&(t||y!=s)&&(y.nodeName=="TD"||y.nodeName=="TH")){w=p.getParent(y,"table");if(w==o){if(!t){t=k(w);t.setStartCell(s);q.getBody().style.webkitUserSelect="none"}t.setEndCell(y);i=true}x=q.selection.getSel();try{if(x.removeAllRanges){x.removeAllRanges()}else{x.empty()}}catch(v){}z.preventDefault()}});q.onMouseUp.add(function(y){var w,B=y.selection,v,C,A,z;function x(D,F){var E=new d.dom.TreeWalker(D,D);do{if(D.nodeType==3&&d.trim(D.nodeValue).length!==0){if(F){w.setStart(D,0)}else{w.setEnd(D,D.nodeValue.length)}return}if(D.nodeName=="BR"){if(F){w.setStartBefore(D)}else{w.setEndBefore(D)}return}D=(F?E.next():E.prev())}while(D)}if(s){if(t){y.getBody().style.webkitUserSelect=""}v=p.select("td.mceSelected,th.mceSelected");if(v.length>0){w=p.createRng();A=v[0];w.setStartBefore(A);w.setEndAfter(A);x(A,1);C=new d.dom.TreeWalker(A,p.getParent(v[0],"table"));do{if(A.nodeName=="TD"||A.nodeName=="TH"){if(!p.hasClass(A,"mceSelected")){break}z=A}A=C.next()}while(A);x(z);B.setRng(w)}y.nodeChanged();s=t=o=null}});q.onKeyUp.add(function(){j()});q.onKeyDown.add(function(v){m(v)});q.onMouseDown.add(function(v,w){if(w.button!=2){m(v)}});function n(A,w,x,C){var y=3,D=A.dom.getParent(w.startContainer,"TABLE"),z,v,B;if(D){z=D.parentNode}v=w.startContainer.nodeType==y&&w.startOffset===0&&w.endOffset===0&&C&&(x.nodeName==="TR"||x===z);B=(x.nodeName==="TD"||x.nodeName==="TH")&&!C;return v||B}function m(x){if(!d.isWebKit){return}var w=x.selection.getRng();var z=x.selection.getNode();var y=x.dom.getParent(w.startContainer,"TD,TH");if(!n(x,w,z,y)){return}if(!y){y=z}var v=y.lastChild;while(v.lastChild){v=v.lastChild}w.setEnd(v,v.nodeValue.length);x.selection.setRng(w)}q.plugins.table.fixTableCellSelection=m;if(q&&q.plugins.contextmenu){q.plugins.contextmenu.onContextMenu.add(function(x,v,z){var A,y=q.selection,w=y.getNode()||q.getBody();if(q.dom.getParent(z,"td")||q.dom.getParent(z,"th")||q.dom.select("td.mceSelected,th.mceSelected").length){v.removeAll();if(w.nodeName=="A"&&!q.dom.getAttrib(w,"name")){v.add({title:"advanced.link_desc",icon:"link",cmd:q.plugins.advlink?"mceAdvLink":"mceLink",ui:true});v.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});v.addSeparator()}if(w.nodeName=="IMG"&&w.className.indexOf("mceItem")==-1){v.add({title:"advanced.image_desc",icon:"image",cmd:q.plugins.advimage?"mceAdvImage":"mceImage",ui:true});v.addSeparator()}v.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});v.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});v.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});v.addSeparator();A=v.addMenu({title:"table.cell"});A.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});A.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});A.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});A=v.addMenu({title:"table.row"});A.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});A.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});A.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});A.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});A.addSeparator();A.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});A.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});A.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!l);A.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!l);A=v.addMenu({title:"table.col"});A.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});A.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});A.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{v.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}function u(z,K){var I=d.VK;var N=K.keyCode;function L(V,R,P){var Q=V?"previousSibling":"nextSibling";var W=z.dom.getParent(R,"tr");var U=W[Q];if(U){w(z,R,U,V);d.dom.Event.cancel(P);return true}else{var X=z.dom.getParent(W,"table");var T=W.parentNode;var O=T.nodeName.toLowerCase();if(O==="tbody"||O===(V?"tfoot":"thead")){var S=v(V,X,T,"tbody");if(S!==null){return H(V,S,R,P)}}return J(V,W,Q,X,P)}}function v(S,Q,R,U){var P=z.dom.select(">"+U,Q);var O=P.indexOf(R);if(S&&O===0||!S&&O===P.length-1){return y(S,Q)}else{if(O===-1){var T=R.tagName.toLowerCase()==="thead"?0:P.length-1;return P[T]}else{return P[O+(S?-1:1)]}}}function y(R,Q){var P=R?"thead":"tfoot";var O=z.dom.select(">"+P,Q);return O.length!==0?O[0]:null}function H(S,Q,P,R){var O=G(Q,S);if(O){w(z,P,O,S)}d.dom.Event.cancel(R);return true}function J(V,R,O,U,T){var P=U[O];if(P){C(P);return true}else{var S=z.dom.getParent(U,"td,th");if(S){return L(V,S,T)}else{var Q=G(R,!V);C(Q);return d.dom.Event.cancel(T)}}}function G(P,O){var Q=P&&P[O?"lastChild":"firstChild"];return Q&&Q.nodeName==="BR"?z.dom.getParent(Q,"td,th"):Q}function C(O){z.selection.setCursorLocation(O,0)}function x(){return N==I.UP||N==I.DOWN}function A(O){var Q=O.selection.getNode();var P=O.dom.getParent(Q,"tr");return P!==null}function M(P){var O=0;var Q=P;while(Q.previousSibling){Q=Q.previousSibling;O=O+a(Q,"colspan")}return O}function B(Q,O){var R=0;var P=0;e(Q.children,function(S,T){R=R+a(S,"colspan");P=T;if(R>O){return false}});return P}function w(Q,T,V,S){var U=M(Q.dom.getParent(T,"td,th"));var P=B(V,U);var O=V.childNodes[P];var R=G(O,S);C(R||O)}function E(O){var Q=z.selection.getNode();var R=z.dom.getParent(Q,"td,th");var P=z.dom.getParent(O,"td,th");return R&&R!==P&&F(R,P)}function F(P,O){return z.dom.getParent(P,"TABLE")===z.dom.getParent(O,"TABLE")}if(x()&&A(z)){var D=z.selection.getNode();setTimeout(function(){if(E(D)){L(!K.shiftKey&&N===I.UP,D,K)}},0)}}if(d.isWebKit){q.onKeyDown.add(u)}function r(){var v;v=q.getBody().lastChild;while(v&&v.nodeType==3&&!v.nodeValue.length){v=v.previousSibling}if(v&&v.nodeName==="TABLE"){if(q.settings.forced_root_block){q.dom.add(q.getBody(),q.settings.forced_root_block,null,d.isIE&&!d.isIE11?" ":'
')}else{q.dom.add(q.getBody(),"br",{"data-mce-bogus":"1"})}}}if(d.isGecko){q.onKeyDown.add(function(w,y){var v,x,z=w.dom;if(y.keyCode==37||y.keyCode==38){v=w.selection.getRng();x=z.getParent(v.startContainer,"table");if(x&&w.getBody().firstChild==x){if(c(v,x)){v=z.createRng();v.setStartBefore(x);v.setEndBefore(x);w.selection.setRng(v);y.preventDefault()}}}})}q.onKeyUp.add(r);q.onSetContent.add(r);q.onVisualAid.add(r);q.onPreProcess.add(function(v,x){var w=x.node.lastChild;if(w&&(w.nodeName=="BR"||(w.childNodes.length==1&&(w.firstChild.nodeName=="BR"||w.firstChild.nodeValue=="\u00a0")))&&w.previousSibling&&w.previousSibling.nodeName=="TABLE"){v.dom.remove(w)}});r();q.startContent=q.getContent({format:"raw"})});e({mceTableSplitCells:function(m){m.split()},mceTableMergeCells:function(n){var o,p,m;m=g.dom.getParent(g.selection.getNode(),"th,td");if(m){o=m.rowSpan;p=m.colSpan}if(!g.dom.select("td.mceSelected,th.mceSelected").length){f.open({url:h+"/merge_cells.htm",width:240+parseInt(g.getLang("table.merge_cells_delta_width",0),10),height:110+parseInt(g.getLang("table.merge_cells_delta_height",0),10),inline:1},{rows:o,cols:p,onaction:function(q){n.merge(m,q.cols,q.rows)},plugin_url:h})}else{n.merge()}},mceTableInsertRowBefore:function(m){m.insertRow(true)},mceTableInsertRowAfter:function(m){m.insertRow()},mceTableInsertColBefore:function(m){m.insertCol(true)},mceTableInsertColAfter:function(m){m.insertCol()},mceTableDeleteCol:function(m){m.deleteCols()},mceTableDeleteRow:function(m){m.deleteRows()},mceTableCutRow:function(m){l=m.cutRows()},mceTableCopyRow:function(m){l=m.copyRows()},mceTablePasteRowBefore:function(m){m.pasteRows(l,true)},mceTablePasteRowAfter:function(m){m.pasteRows(l)},mceTableDelete:function(m){m.deleteTable()}},function(n,m){g.addCommand(m,function(){var o=k();if(o){n(o);g.execCommand("mceRepaint");j()}})});e({mceInsertTable:function(m){f.open({url:h+"/table.htm",width:400+parseInt(g.getLang("table.table_delta_width",0),10),height:320+parseInt(g.getLang("table.table_delta_height",0),10),inline:1},{plugin_url:h,action:m?m.action:0})},mceTableRowProps:function(){f.open({url:h+"/row.htm",width:400+parseInt(g.getLang("table.rowprops_delta_width",0),10),height:295+parseInt(g.getLang("table.rowprops_delta_height",0),10),inline:1},{plugin_url:h})},mceTableCellProps:function(){f.open({url:h+"/cell.htm",width:400+parseInt(g.getLang("table.cellprops_delta_width",0),10),height:295+parseInt(g.getLang("table.cellprops_delta_height",0),10),inline:1},{plugin_url:h})}},function(n,m){g.addCommand(m,function(o,p){n(p)})})}});d.PluginManager.add("table",d.plugins.TablePlugin)})(tinymce); \ No newline at end of file diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js index dc20b3868..dc6a53a6e 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js @@ -7,7 +7,7 @@ * License: http://tinymce.moxiecode.com/license * Contributing: http://tinymce.moxiecode.com/contributing */ - +/* jshint loopfunc: true */ (function(tinymce) { var each = tinymce.each; @@ -22,11 +22,11 @@ elm.appendChild(rng2.cloneContents()); // Check for text characters of other elements that should be treated as content - return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length == 0; - }; + return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length === 0; + } function getSpanVal(td, name) { - return parseInt(td.getAttribute(name) || 1); + return parseInt(td.getAttribute(name) || 1, 10); } /** @@ -35,14 +35,6 @@ function TableGrid(table, dom, selection) { var grid, startPos, endPos, selectedCell; - buildGrid(); - selectedCell = dom.getParent(selection.getStart(), 'th,td'); - if (selectedCell) { - startPos = getPos(selectedCell); - endPos = findEndPos(); - selectedCell = getCell(startPos.x, startPos.y); - } - function cloneNode(node, children) { node = node.cloneNode(children); node.removeAttribute('id'); @@ -66,8 +58,9 @@ // Skip over existing cells produced by rowspan if (grid[y]) { - while (grid[y][x]) + while (grid[y][x]) { x++; + } } // Get col/rowspan from cell @@ -76,8 +69,9 @@ // Fill out rowspan/colspan right and down for (y2 = y; y2 < y + rowspan; y2++) { - if (!grid[y2]) + if (!grid[y2]) { grid[y2] = []; + } for (x2 = x; x2 < x + colspan; x2++) { grid[y2][x2] = { @@ -94,30 +88,32 @@ startY += rows.length; }); - }; + } function getCell(x, y) { var row; row = grid[y]; - if (row) + if (row) { return row[x]; - }; + } + } function setSpanVal(td, name, val) { if (td) { - val = parseInt(val); + val = parseInt(val, 10); - if (val === 1) + if (val === 1) { td.removeAttribute(name, 1); - else + } else { td.setAttribute(name, val, 1); + } } } function isCellSelected(cell) { return cell && (dom.hasClass(cell.elm, 'mceSelected') || cell == selectedCell); - }; + } function getSelectedRows() { var rows = []; @@ -132,7 +128,7 @@ }); return rows; - }; + } function deleteTable() { var rng = dom.createRng(); @@ -143,7 +139,7 @@ selection.setRng(rng); dom.remove(table); - }; + } function cloneCell(cell) { var formatNode; @@ -156,17 +152,19 @@ each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) { node = cloneNode(node, false); - if (!formatNode) + if (!formatNode) { formatNode = curNode = node; - else if (curNode) + } else if (curNode) { curNode.appendChild(node); + } curNode = node; }); // Add something to the inner node - if (curNode) - curNode.innerHTML = tinymce.isIE ? ' ' : '
'; + if (curNode) { + curNode.innerHTML = tinymce.isIE && !tinymce.isIE11 ? ' ' : '
'; + } return false; } @@ -179,24 +177,26 @@ if (formatNode) { cell.appendChild(formatNode); } else { - if (!tinymce.isIE) + if (!tinymce.isIE || tinymce.isIE11) { cell.innerHTML = '
'; + } } return cell; - }; + } function cleanup() { - var rng = dom.createRng(); + var rng = dom.createRng(), row; // Empty rows each(dom.select('tr', table), function(tr) { - if (tr.cells.length == 0) + if (tr.cells.length === 0) { dom.remove(tr); + } }); // Empty table - if (dom.select('tr', table).length == 0) { + if (dom.select('tr', table).length === 0) { rng.setStartAfter(table); rng.setEndAfter(table); selection.setRng(rng); @@ -206,8 +206,9 @@ // Empty header/body/footer each(dom.select('thead,tbody,tfoot', table), function(part) { - if (part.rows.length == 0) + if (part.rows.length === 0) { dom.remove(part); + } }); // Restore selection to start position if it still exists @@ -219,7 +220,7 @@ selection.select(row[Math.min(row.length - 1, startPos.x)].elm, true); selection.collapse(true); } - }; + } function fillLeftDown(x, y, rows, cols) { var tr, x2, r, c, cell; @@ -235,8 +236,9 @@ if (cell.parentNode == tr) { // Append clones after - for (c = 1; c <= cols; c++) + for (c = 1; c <= cols; c++) { dom.insertAfter(cloneCell(cell), cell); + } break; } @@ -244,17 +246,18 @@ if (x2 == -1) { // Insert nodes before first cell - for (c = 1; c <= cols; c++) + for (c = 1; c <= cols; c++) { tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]); + } } } } - }; + } function split() { each(grid, function(row, y) { each(row, function(cell, x) { - var colSpan, rowSpan, newCell, i; + var colSpan, rowSpan, i; if (isCellSelected(cell)) { cell = cell.elm; @@ -266,18 +269,19 @@ setSpanVal(cell, 'colSpan', 1); // Insert cells right - for (i = 0; i < colSpan - 1; i++) + for (i = 0; i < colSpan - 1; i++) { dom.insertAfter(cloneCell(cell), cell); + } fillLeftDown(x, y, rowSpan - 1, colSpan); } } }); }); - }; + } function merge(cell, cols, rows) { - var startX, startY, endX, endY, x, y, startCell, endCell, cell, children, count; + var startX, startY, endX, endY, x, y, startCell, endCell, children, count, pos; // Use specified cell and cols/rows if (cell) { @@ -327,8 +331,9 @@ // Remove other cells and add it's contents to the start cell for (y = startY; y <= endY; y++) { for (x = startX; x <= endX; x++) { - if (!grid[y] || !grid[y][x]) + if (!grid[y] || !grid[y][x]) { continue; + } cell = grid[y][x].elm; @@ -344,11 +349,12 @@ children = tinymce.grep(startCell.childNodes); count = 0; each(children, function(node) { - if (node.nodeName == 'BR' && dom.getAttrib(node, 'data-mce-bogus') && count++ < children.length - 1) + if (node.nodeName == 'BR' && dom.getAttrib(node, 'data-mce-bogus') && count++ < children.length - 1) { startCell.removeChild(node); + } }); } - + // Remove cell dom.remove(cell); } @@ -358,33 +364,36 @@ // Remove empty rows etc and restore caret location cleanup(); } - }; + } function insertRow(before) { var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell, rowSpan; // Find first/last row each(grid, function(row, y) { - each(row, function(cell, x) { + each(row, function(cell) { if (isCellSelected(cell)) { cell = cell.elm; rowElm = cell.parentNode; newRow = cloneNode(rowElm, false); posY = y; - if (before) + if (before) { return false; + } } }); - if (before) + if (before) { return !posY; + } }); for (x = 0; x < grid[0].length; x++) { // Cell not found could be because of an invalid table structure - if (!grid[posY][x]) + if (!grid[posY][x]) { continue; + } cell = grid[posY][x].elm; @@ -418,36 +427,40 @@ } if (newRow.hasChildNodes()) { - if (!before) + if (!before) { dom.insertAfter(newRow, rowElm); - else + } else { rowElm.parentNode.insertBefore(newRow, rowElm); + } } - }; + } function insertCol(before) { var posX, lastCell; // Find first/last column - each(grid, function(row, y) { + each(grid, function(row) { each(row, function(cell, x) { if (isCellSelected(cell)) { posX = x; - if (before) + if (before) { return false; + } } }); - if (before) + if (before) { return !posX; + } }); each(grid, function(row, y) { var cell, rowSpan, colSpan; - if (!row[posX]) + if (!row[posX]) { return; + } cell = row[posX].elm; if (cell != lastCell) { @@ -462,19 +475,20 @@ cell.parentNode.insertBefore(cloneCell(cell), cell); fillLeftDown(posX, y, rowSpan - 1, colSpan); } - } else + } else { setSpanVal(cell, 'colSpan', cell.colSpan + 1); + } lastCell = cell; } }); - }; + } function deleteCols() { var cols = []; // Get selected column indexes - each(grid, function(row, y) { + each(grid, function(row) { each(row, function(cell, x) { if (isCellSelected(cell) && tinymce.inArray(cols, x) === -1) { each(grid, function(row) { @@ -482,10 +496,11 @@ colSpan = getSpanVal(cell, 'colSpan'); - if (colSpan > 1) + if (colSpan > 1) { setSpanVal(cell, 'colSpan', colSpan - 1); - else + } else { dom.remove(cell); + } }); cols.push(x); @@ -494,15 +509,15 @@ }); cleanup(); - }; + } function deleteRows() { var rows; function deleteRow(tr) { - var nextTr, pos, lastCell; + var pos, lastCell; - nextTr = dom.getNext(tr, 'tr'); + // nextTr = dom.getNext(tr, 'tr'); // Move down row spanned cells each(tr.cells, function(cell) { @@ -525,15 +540,16 @@ if (cell != lastCell) { rowSpan = getSpanVal(cell, 'rowSpan'); - if (rowSpan <= 1) + if (rowSpan <= 1) { dom.remove(cell); - else + } else { setSpanVal(cell, 'rowSpan', rowSpan - 1); + } lastCell = cell; } }); - }; + } // Get selected rows and move selection out of scope rows = getSelectedRows(); @@ -544,7 +560,7 @@ }); cleanup(); - }; + } function cutRows() { var rows = getSelectedRows(); @@ -553,7 +569,7 @@ cleanup(); return rows; - }; + } function copyRows() { var rows = getSelectedRows(); @@ -563,9 +579,14 @@ }); return rows; - }; + } function pasteRows(rows, before) { + // If we don't have any rows in the clipboard, return immediately + if (!rows) { + return; + } + var selectedRows = getSelectedRows(), targetRow = selectedRows[before ? 0 : selectedRows.length - 1], targetCellCount = targetRow.cells.length; @@ -575,23 +596,27 @@ var match; targetCellCount = 0; - each(row, function(cell, x) { - if (cell.real) + each(row, function(cell) { + if (cell.real) { targetCellCount += cell.colspan; + } - if (cell.elm.parentNode == targetRow) + if (cell.elm.parentNode == targetRow) { match = 1; + } }); - if (match) + if (match) { return false; + } }); - if (!before) + if (!before) { rows.reverse(); + } each(rows, function(row) { - var cellCount = row.cells.length, cell; + var cellCount = row.cells.length, cell, i; // Remove col/rowspans for (i = 0; i < cellCount; i++) { @@ -601,23 +626,26 @@ } // Needs more cells - for (i = cellCount; i < targetCellCount; i++) + for (i = cellCount; i < targetCellCount; i++) { row.appendChild(cloneCell(row.cells[cellCount - 1])); + } // Needs less cells - for (i = targetCellCount; i < cellCount; i++) + for (i = targetCellCount; i < cellCount; i++) { dom.remove(row.cells[i]); + } // Add before/after - if (before) + if (before) { targetRow.parentNode.insertBefore(row, targetRow); - else + } else { dom.insertAfter(row, targetRow); + } }); // Remove current selection dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); - }; + } function getPos(target) { var pos; @@ -634,14 +662,14 @@ }); return pos; - }; + } function setStartCell(cell) { startPos = getPos(cell); - }; + } function findEndPos() { - var pos, maxX, maxY; + var maxX, maxY; maxX = maxY = 0; @@ -652,24 +680,28 @@ if (isCellSelected(cell)) { cell = grid[y][x]; - if (x > maxX) + if (x > maxX) { maxX = x; + } - if (y > maxY) + if (y > maxY) { maxY = y; + } if (cell.real) { colSpan = cell.colspan - 1; rowSpan = cell.rowspan - 1; if (colSpan) { - if (x + colSpan > maxX) + if (x + colSpan > maxX) { maxX = x + colSpan; + } } if (rowSpan) { - if (y + rowSpan > maxY) + if (y + rowSpan > maxY) { maxY = y + rowSpan; + } } } } @@ -677,10 +709,10 @@ }); return {x : maxX, y : maxY}; - }; + } function setEndCell(cell) { - var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan; + var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan, y, x; endPos = getPos(cell); @@ -700,8 +732,9 @@ cell = grid[y][startX]; if (!cell.real) { - if (startX - (cell.colspan - 1) < startX) + if (startX - (cell.colspan - 1) < startX) { startX -= cell.colspan - 1; + } } } @@ -710,8 +743,9 @@ cell = grid[startY][x]; if (!cell.real) { - if (startY - (cell.rowspan - 1) < startY) + if (startY - (cell.rowspan - 1) < startY) { startY -= cell.rowspan - 1; + } } } @@ -725,13 +759,15 @@ rowSpan = cell.rowspan - 1; if (colSpan) { - if (x + colSpan > maxX) + if (x + colSpan > maxX) { maxX = x + colSpan; + } } if (rowSpan) { - if (y + rowSpan > maxY) + if (y + rowSpan > maxY) { maxY = y + rowSpan; + } } } } @@ -743,12 +779,21 @@ // Add new selection for (y = startY; y <= maxY; y++) { for (x = startX; x <= maxX; x++) { - if (grid[y][x]) + if (grid[y][x]) { dom.addClass(grid[y][x].elm, 'mceSelected'); + } } } } - }; + } + + buildGrid(); + selectedCell = dom.getParent(selection.getStart(), 'th,td'); + if (selectedCell) { + startPos = getPos(selectedCell); + endPos = findEndPos(); + selectedCell = getCell(startPos.x, startPos.y); + } // Expose to public tinymce.extend(this, { @@ -766,7 +811,7 @@ setStartCell : setStartCell, setEndCell : setEndCell }); - }; + } tinymce.create('tinymce.plugins.TablePlugin', { init : function(ed, url) { @@ -775,9 +820,10 @@ function createTableGrid(node) { var selection = ed.selection, tblElm = ed.dom.getParent(node || selection.getNode(), 'table'); - if (tblElm) + if (tblElm) { return new TableGrid(tblElm, ed.dom, selection); - }; + } + } function cleanup() { // Restore selection possibilities @@ -787,7 +833,7 @@ ed.dom.removeClass(ed.dom.select('td.mceSelected,th.mceSelected'), 'mceSelected'); hasCellSelection = false; } - }; + } // Register buttons each([ @@ -849,8 +895,9 @@ cm.setActive('table', n.nodeName === 'TABLE' || !!p); // Disable table tools if we are in caption - if (p && p.nodeName === 'CAPTION') + if (p && p.nodeName === 'CAPTION') { p = 0; + } cm.setDisabled('delete_table', !p); cm.setDisabled('delete_col', !p); @@ -902,10 +949,11 @@ sel = ed.selection.getSel(); try { - if (sel.removeAllRanges) + if (sel.removeAllRanges) { sel.removeAllRanges(); - else + } else { sel.empty(); + } } catch (ex) { // IE9 might throw errors here } @@ -914,38 +962,41 @@ } }); - ed.onMouseUp.add(function(ed, e) { - var rng, sel = ed.selection, selectedCells, nativeSel = sel.getSel(), walker, node, lastNode, endNode; + ed.onMouseUp.add(function(ed) { + var rng, sel = ed.selection, selectedCells, walker, node, lastNode; + function setPoint(node, start) { + var walker = new tinymce.dom.TreeWalker(node, node); + + do { + // Text node + if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length !== 0) { + if (start) { + rng.setStart(node, 0); + } else { + rng.setEnd(node, node.nodeValue.length); + } + + return; + } + + // BR element + if (node.nodeName == 'BR') { + if (start) { + rng.setStartBefore(node); + } else { + rng.setEndBefore(node); + } + + return; + } + node = (start ? walker.next() : walker.prev()); + } while (node); + } // Move selection to startCell if (startCell) { - if (tableGrid) + if (tableGrid) { ed.getBody().style.webkitUserSelect = ''; - - function setPoint(node, start) { - var walker = new tinymce.dom.TreeWalker(node, node); - - do { - // Text node - if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) { - if (start) - rng.setStart(node, 0); - else - rng.setEnd(node, node.nodeValue.length); - - return; - } - - // BR element - if (node.nodeName == 'BR') { - if (start) - rng.setStartBefore(node); - else - rng.setEndBefore(node); - - return; - } - } while (node = (start ? walker.next() : walker.prev())); } // Try to expand text selection as much as we can only Gecko supports cell selection @@ -953,7 +1004,7 @@ if (selectedCells.length > 0) { rng = dom.createRng(); node = selectedCells[0]; - endNode = selectedCells[selectedCells.length - 1]; + // endNode = selectedCells[selectedCells.length - 1]; rng.setStartBefore(node); rng.setEndAfter(node); @@ -962,12 +1013,14 @@ do { if (node.nodeName == 'TD' || node.nodeName == 'TH') { - if (!dom.hasClass(node, 'mceSelected')) + if (!dom.hasClass(node, 'mceSelected')) { break; + } lastNode = node; } - } while (node = walker.next()); + node = walker.next(); + } while (node); setPoint(lastNode); @@ -979,63 +1032,68 @@ } }); - ed.onKeyUp.add(function(ed, e) { + ed.onKeyUp.add(function() { cleanup(); }); - ed.onKeyDown.add(function (ed, e) { + ed.onKeyDown.add(function(ed) { fixTableCellSelection(ed); }); - ed.onMouseDown.add(function (ed, e) { + ed.onMouseDown.add(function(ed, e) { if (e.button != 2) { fixTableCellSelection(ed); } }); function tableCellSelected(ed, rng, n, currentCell) { // The decision of when a table cell is selected is somewhat involved. The fact that this code is - // required is actually a pointer to the root cause of this bug. A cell is selected when the start + // required is actually a pointer to the root cause of this bug. A cell is selected when the start // and end offsets are 0, the start container is a text, and the selection node is either a TR (most cases) // or the parent of the table (in the case of the selection containing the last cell of a table). - var TEXT_NODE = 3, table = ed.dom.getParent(rng.startContainer, 'TABLE'), - tableParent, allOfCellSelected, tableCellSelection; - if (table) - tableParent = table.parentNode; - allOfCellSelected =rng.startContainer.nodeType == TEXT_NODE && - rng.startOffset == 0 && - rng.endOffset == 0 && - currentCell && - (n.nodeName=="TR" || n==tableParent); - tableCellSelection = (n.nodeName=="TD"||n.nodeName=="TH")&& !currentCell; - return allOfCellSelected || tableCellSelection; + var TEXT_NODE = 3, table = ed.dom.getParent(rng.startContainer, 'TABLE'), + tableParent, allOfCellSelected, tableCellSelection; + if (table) { + tableParent = table.parentNode; + } + allOfCellSelected = rng.startContainer.nodeType == TEXT_NODE && + rng.startOffset === 0 && + rng.endOffset === 0 && + currentCell && + (n.nodeName === "TR" || n === tableParent); + tableCellSelection = (n.nodeName === "TD" || n.nodeName === "TH") && !currentCell; + return allOfCellSelected || tableCellSelection; // return false; } - + // this nasty hack is here to work around some WebKit selection bugs. function fixTableCellSelection(ed) { - if (!tinymce.isWebKit) + if (!tinymce.isWebKit) { return; + } var rng = ed.selection.getRng(); var n = ed.selection.getNode(); var currentCell = ed.dom.getParent(rng.startContainer, 'TD,TH'); - - if (!tableCellSelected(ed, rng, n, currentCell)) + + if (!tableCellSelected(ed, rng, n, currentCell)) { return; - if (!currentCell) { - currentCell=n; - } - + } + + if (!currentCell) { + currentCell = n; + } + // Get the very last node inside the table cell var end = currentCell.lastChild; - while (end.lastChild) + while (end.lastChild) { end = end.lastChild; - + } + // Select the entire table cell. Nothing outside of the table cell should be selected. rng.setEnd(end, end.nodeValue.length); ed.selection.setRng(rng); } - ed.plugins.table.fixTableCellSelection=fixTableCellSelection; + ed.plugins.table.fixTableCellSelection = fixTableCellSelection; // Add context menu if (ed && ed.plugins.contextmenu) { @@ -1084,154 +1142,157 @@ sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'}); sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'}); sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'}); - } else + } else { m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable'}); + } }); } // Fix to allow navigating up and down in a table in WebKit browsers. - if (tinymce.isWebKit) { - function moveSelection(ed, e) { - var VK = tinymce.VK; - var key = e.keyCode; + function moveSelection(ed, e) { + var VK = tinymce.VK; + var key = e.keyCode; - function handle(upBool, sourceNode, event) { - var siblingDirection = upBool ? 'previousSibling' : 'nextSibling'; - var currentRow = ed.dom.getParent(sourceNode, 'tr'); - var siblingRow = currentRow[siblingDirection]; + function handle(upBool, sourceNode, event) { + var siblingDirection = upBool ? 'previousSibling' : 'nextSibling'; + var currentRow = ed.dom.getParent(sourceNode, 'tr'); + var siblingRow = currentRow[siblingDirection]; - if (siblingRow) { - moveCursorToRow(ed, sourceNode, siblingRow, upBool); - tinymce.dom.Event.cancel(event); - return true; - } else { - var tableNode = ed.dom.getParent(currentRow, 'table'); - var middleNode = currentRow.parentNode; - var parentNodeName = middleNode.nodeName.toLowerCase(); - if (parentNodeName === 'tbody' || parentNodeName === (upBool ? 'tfoot' : 'thead')) { - var targetParent = getTargetParent(upBool, tableNode, middleNode, 'tbody'); - if (targetParent !== null) { - return moveToRowInTarget(upBool, targetParent, sourceNode, event); - } - } - return escapeTable(upBool, currentRow, siblingDirection, tableNode, event); - } - } - - function getTargetParent(upBool, topNode, secondNode, nodeName) { - var tbodies = ed.dom.select('>' + nodeName, topNode); - var position = tbodies.indexOf(secondNode); - if (upBool && position === 0 || !upBool && position === tbodies.length - 1) { - return getFirstHeadOrFoot(upBool, topNode); - } else if (position === -1) { - var topOrBottom = secondNode.tagName.toLowerCase() === 'thead' ? 0 : tbodies.length - 1; - return tbodies[topOrBottom]; - } else { - return tbodies[position + (upBool ? -1 : 1)]; - } - } - - function getFirstHeadOrFoot(upBool, parent) { - var tagName = upBool ? 'thead' : 'tfoot'; - var headOrFoot = ed.dom.select('>' + tagName, parent); - return headOrFoot.length !== 0 ? headOrFoot[0] : null; - } - - function moveToRowInTarget(upBool, targetParent, sourceNode, event) { - var targetRow = getChildForDirection(targetParent, upBool); - targetRow && moveCursorToRow(ed, sourceNode, targetRow, upBool); + if (siblingRow) { + moveCursorToRow(ed, sourceNode, siblingRow, upBool); tinymce.dom.Event.cancel(event); return true; - } - - function escapeTable(upBool, currentRow, siblingDirection, table, event) { - var tableSibling = table[siblingDirection]; - if (tableSibling) { - moveCursorToStartOfElement(tableSibling); - return true; - } else { - var parentCell = ed.dom.getParent(table, 'td,th'); - if (parentCell) { - return handle(upBool, parentCell, event); - } else { - var backUpSibling = getChildForDirection(currentRow, !upBool); - moveCursorToStartOfElement(backUpSibling); - return tinymce.dom.Event.cancel(event); + } else { + var tableNode = ed.dom.getParent(currentRow, 'table'); + var middleNode = currentRow.parentNode; + var parentNodeName = middleNode.nodeName.toLowerCase(); + if (parentNodeName === 'tbody' || parentNodeName === (upBool ? 'tfoot' : 'thead')) { + var targetParent = getTargetParent(upBool, tableNode, middleNode, 'tbody'); + if (targetParent !== null) { + return moveToRowInTarget(upBool, targetParent, sourceNode, event); } } - } - - function getChildForDirection(parent, up) { - var child = parent && parent[up ? 'lastChild' : 'firstChild']; - // BR is not a valid table child to return in this case we return the table cell - return child && child.nodeName === 'BR' ? ed.dom.getParent(child, 'td,th') : child; - } - - function moveCursorToStartOfElement(n) { - ed.selection.setCursorLocation(n, 0); - } - - function isVerticalMovement() { - return key == VK.UP || key == VK.DOWN; - } - - function isInTable(ed) { - var node = ed.selection.getNode(); - var currentRow = ed.dom.getParent(node, 'tr'); - return currentRow !== null; - } - - function columnIndex(column) { - var colIndex = 0; - var c = column; - while (c.previousSibling) { - c = c.previousSibling; - colIndex = colIndex + getSpanVal(c, "colspan"); - } - return colIndex; - } - - function findColumn(rowElement, columnIndex) { - var c = 0; - var r = 0; - each(rowElement.children, function(cell, i) { - c = c + getSpanVal(cell, "colspan"); - r = i; - if (c > columnIndex) - return false; - }); - return r; - } - - function moveCursorToRow(ed, node, row, upBool) { - var srcColumnIndex = columnIndex(ed.dom.getParent(node, 'td,th')); - var tgtColumnIndex = findColumn(row, srcColumnIndex); - var tgtNode = row.childNodes[tgtColumnIndex]; - var rowCellTarget = getChildForDirection(tgtNode, upBool); - moveCursorToStartOfElement(rowCellTarget || tgtNode); - } - - function shouldFixCaret(preBrowserNode) { - var newNode = ed.selection.getNode(); - var newParent = ed.dom.getParent(newNode, 'td,th'); - var oldParent = ed.dom.getParent(preBrowserNode, 'td,th'); - return newParent && newParent !== oldParent && checkSameParentTable(newParent, oldParent) - } - - function checkSameParentTable(nodeOne, NodeTwo) { - return ed.dom.getParent(nodeOne, 'TABLE') === ed.dom.getParent(NodeTwo, 'TABLE'); - } - - if (isVerticalMovement() && isInTable(ed)) { - var preBrowserNode = ed.selection.getNode(); - setTimeout(function() { - if (shouldFixCaret(preBrowserNode)) { - handle(!e.shiftKey && key === VK.UP, preBrowserNode, e); - } - }, 0); + return escapeTable(upBool, currentRow, siblingDirection, tableNode, event); } } + function getTargetParent(upBool, topNode, secondNode, nodeName) { + var tbodies = ed.dom.select('>' + nodeName, topNode); + var position = tbodies.indexOf(secondNode); + if (upBool && position === 0 || !upBool && position === tbodies.length - 1) { + return getFirstHeadOrFoot(upBool, topNode); + } else if (position === -1) { + var topOrBottom = secondNode.tagName.toLowerCase() === 'thead' ? 0 : tbodies.length - 1; + return tbodies[topOrBottom]; + } else { + return tbodies[position + (upBool ? -1 : 1)]; + } + } + + function getFirstHeadOrFoot(upBool, parent) { + var tagName = upBool ? 'thead' : 'tfoot'; + var headOrFoot = ed.dom.select('>' + tagName, parent); + return headOrFoot.length !== 0 ? headOrFoot[0] : null; + } + + function moveToRowInTarget(upBool, targetParent, sourceNode, event) { + var targetRow = getChildForDirection(targetParent, upBool); + if (targetRow) { + moveCursorToRow(ed, sourceNode, targetRow, upBool); + } + tinymce.dom.Event.cancel(event); + return true; + } + + function escapeTable(upBool, currentRow, siblingDirection, table, event) { + var tableSibling = table[siblingDirection]; + if (tableSibling) { + moveCursorToStartOfElement(tableSibling); + return true; + } else { + var parentCell = ed.dom.getParent(table, 'td,th'); + if (parentCell) { + return handle(upBool, parentCell, event); + } else { + var backUpSibling = getChildForDirection(currentRow, !upBool); + moveCursorToStartOfElement(backUpSibling); + return tinymce.dom.Event.cancel(event); + } + } + } + + function getChildForDirection(parent, up) { + var child = parent && parent[up ? 'lastChild' : 'firstChild']; + // BR is not a valid table child to return in this case we return the table cell + return child && child.nodeName === 'BR' ? ed.dom.getParent(child, 'td,th') : child; + } + + function moveCursorToStartOfElement(n) { + ed.selection.setCursorLocation(n, 0); + } + + function isVerticalMovement() { + return key == VK.UP || key == VK.DOWN; + } + + function isInTable(ed) { + var node = ed.selection.getNode(); + var currentRow = ed.dom.getParent(node, 'tr'); + return currentRow !== null; + } + + function columnIndex(column) { + var colIndex = 0; + var c = column; + while (c.previousSibling) { + c = c.previousSibling; + colIndex = colIndex + getSpanVal(c, "colspan"); + } + return colIndex; + } + + function findColumn(rowElement, columnIndex) { + var c = 0; + var r = 0; + each(rowElement.children, function(cell, i) { + c = c + getSpanVal(cell, "colspan"); + r = i; + if (c > columnIndex) { + return false; + } + }); + return r; + } + + function moveCursorToRow(ed, node, row, upBool) { + var srcColumnIndex = columnIndex(ed.dom.getParent(node, 'td,th')); + var tgtColumnIndex = findColumn(row, srcColumnIndex); + var tgtNode = row.childNodes[tgtColumnIndex]; + var rowCellTarget = getChildForDirection(tgtNode, upBool); + moveCursorToStartOfElement(rowCellTarget || tgtNode); + } + + function shouldFixCaret(preBrowserNode) { + var newNode = ed.selection.getNode(); + var newParent = ed.dom.getParent(newNode, 'td,th'); + var oldParent = ed.dom.getParent(preBrowserNode, 'td,th'); + return newParent && newParent !== oldParent && checkSameParentTable(newParent, oldParent); + } + + function checkSameParentTable(nodeOne, NodeTwo) { + return ed.dom.getParent(nodeOne, 'TABLE') === ed.dom.getParent(NodeTwo, 'TABLE'); + } + + if (isVerticalMovement() && isInTable(ed)) { + var preBrowserNode = ed.selection.getNode(); + setTimeout(function() { + if (shouldFixCaret(preBrowserNode)) { + handle(!e.shiftKey && key === VK.UP, preBrowserNode, e); + } + }, 0); + } + } + if (tinymce.isWebKit) { ed.onKeyDown.add(moveSelection); } @@ -1241,15 +1302,19 @@ var last; // Skip empty text nodes form the end - for (last = ed.getBody().lastChild; last && last.nodeType == 3 && !last.nodeValue.length; last = last.previousSibling) ; - - if (last && last.nodeName == 'TABLE') { - if (ed.settings.forced_root_block) - ed.dom.add(ed.getBody(), ed.settings.forced_root_block, null, tinymce.isIE ? ' ' : '
'); - else - ed.dom.add(ed.getBody(), 'br', {'data-mce-bogus': '1'}); + last = ed.getBody().lastChild; + while (last && last.nodeType == 3 && !last.nodeValue.length) { + last = last.previousSibling; } - }; + + if (last && last.nodeName === 'TABLE') { + if (ed.settings.forced_root_block) { + ed.dom.add(ed.getBody(), ed.settings.forced_root_block, null, tinymce.isIE && !tinymce.isIE11 ? ' ' : '
'); + } else { + ed.dom.add(ed.getBody(), 'br', {'data-mce-bogus': '1'}); + } + } + } // Fixes an bug where it's impossible to place the caret before a table in Gecko // this fix solves it by detecting when the caret is at the beginning of such a table @@ -1291,7 +1356,6 @@ } }); - /** * Fixes bug in Gecko where shift-enter in table cell does not place caret on new line * @@ -1334,8 +1398,8 @@ if (!ed.dom.select('td.mceSelected,th.mceSelected').length) { winMan.open({ url : url + '/merge_cells.htm', - width : 240 + parseInt(ed.getLang('table.merge_cells_delta_width', 0)), - height : 110 + parseInt(ed.getLang('table.merge_cells_delta_height', 0)), + width : 240 + parseInt(ed.getLang('table.merge_cells_delta_width', 0), 10), + height : 110 + parseInt(ed.getLang('table.merge_cells_delta_height', 0), 10), inline : 1 }, { rows : rowSpan, @@ -1345,8 +1409,9 @@ }, plugin_url : url }); - } else + } else { grid.merge(); + } }, mceTableInsertRowBefore : function(grid) { @@ -1409,8 +1474,8 @@ mceInsertTable : function(val) { winMan.open({ url : url + '/table.htm', - width : 400 + parseInt(ed.getLang('table.table_delta_width', 0)), - height : 320 + parseInt(ed.getLang('table.table_delta_height', 0)), + width : 400 + parseInt(ed.getLang('table.table_delta_width', 0), 10), + height : 320 + parseInt(ed.getLang('table.table_delta_height', 0), 10), inline : 1 }, { plugin_url : url, @@ -1421,8 +1486,8 @@ mceTableRowProps : function() { winMan.open({ url : url + '/row.htm', - width : 400 + parseInt(ed.getLang('table.rowprops_delta_width', 0)), - height : 295 + parseInt(ed.getLang('table.rowprops_delta_height', 0)), + width : 400 + parseInt(ed.getLang('table.rowprops_delta_width', 0), 10), + height : 295 + parseInt(ed.getLang('table.rowprops_delta_height', 0), 10), inline : 1 }, { plugin_url : url @@ -1432,8 +1497,8 @@ mceTableCellProps : function() { winMan.open({ url : url + '/cell.htm', - width : 400 + parseInt(ed.getLang('table.cellprops_delta_width', 0)), - height : 295 + parseInt(ed.getLang('table.cellprops_delta_height', 0)), + width : 400 + parseInt(ed.getLang('table.cellprops_delta_width', 0), 10), + height : 295 + parseInt(ed.getLang('table.cellprops_delta_height', 0), 10), inline : 1 }, { plugin_url : url diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js index 02ecf22c8..d68dc07a9 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js @@ -17,8 +17,8 @@ function init() { // Get table cell data var celltype = tdElm.nodeName.toLowerCase(); - var align = ed.dom.getAttrib(tdElm, 'align'); - var valign = ed.dom.getAttrib(tdElm, 'valign'); + var align = ed.dom.getAttrib(tdElm, 'align') || getStyle(tdElm, 'text-align'); + var valign = ed.dom.getAttrib(tdElm, 'valign') || getStyle(tdElm, 'vertical-align'); var width = trimSize(getStyle(tdElm, 'width', 'width')); var height = trimSize(getStyle(tdElm, 'height', 'height')); var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor')); @@ -201,8 +201,6 @@ function updateCell(td, skip_id) { if (!skip_id) dom.setAttrib(td, 'id', formObj.id.value); - dom.setAttrib(td, 'align', formObj.align.value); - dom.setAttrib(td, 'vAlign', formObj.valign.value); dom.setAttrib(td, 'lang', formObj.lang.value); dom.setAttrib(td, 'dir', getSelectValue(formObj, 'dir')); dom.setAttrib(td, 'style', ed.dom.serializeStyle(ed.dom.parseStyle(formObj.style.value))); @@ -210,6 +208,8 @@ function updateCell(td, skip_id) { dom.setAttrib(td, 'class', getSelectValue(formObj, 'class')); // Clear deprecated attributes + ed.dom.setAttrib(td, 'align', ''); + ed.dom.setAttrib(td, 'vAlign', ''); ed.dom.setAttrib(td, 'width', ''); ed.dom.setAttrib(td, 'height', ''); ed.dom.setAttrib(td, 'bgColor', ''); @@ -219,13 +219,9 @@ function updateCell(td, skip_id) { // Set styles td.style.width = getCSSSize(formObj.width.value); td.style.height = getCSSSize(formObj.height.value); - if (formObj.bordercolor.value != "") { - td.style.borderColor = formObj.bordercolor.value; - td.style.borderStyle = td.style.borderStyle == "" ? "solid" : td.style.borderStyle; - td.style.borderWidth = td.style.borderWidth == "" ? "1px" : td.style.borderWidth; - } else - td.style.borderColor = ''; - + td.style.textAlign = formObj.align.value; + td.style.verticalAlign = formObj.valign.value; + td.style.borderColor = formObj.bordercolor.value; td.style.backgroundColor = formObj.bgcolor.value; if (formObj.backgroundimage.value != "") @@ -314,6 +310,12 @@ function changedStyle() { formObj.bordercolor.value = st['border-color']; updateColor('bordercolor_pick','bordercolor'); } + + if (st['text-align']) + formObj.align.value = st['text-align']; + + if (st['vertical-align']) + formObj.valign.value = st['vertical-align']; } tinyMCEPopup.onInit.add(init); diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/js/row.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/js/row.js index a13d69592..0c678de46 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/js/row.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/js/row.js @@ -25,6 +25,7 @@ function init() { var dir = dom.getAttrib(trElm, 'dir'); selectByValue(formObj, 'rowtype', rowtype); + setActionforRowType(formObj, rowtype); // Any cells selected if (dom.select('td.mceSelected,th.mceSelected', trElm).length == 0) { @@ -234,4 +235,20 @@ function changedColor() { formObj.style.value = dom.serializeStyle(st); } +function changedRowType() { + var formObj = document.forms[0]; + var rowtype = getSelectValue(formObj, 'rowtype'); + + setActionforRowType(formObj, rowtype); + +} + +function setActionforRowType(formObj, rowtype) { + if (rowtype === "tbody") { + formObj.action.disabled = false; + } else { + selectByValue(formObj, 'action', "row"); + formObj.action.disabled = true; + } +} tinyMCEPopup.onInit.add(init); diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/js/table.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/js/table.js index 1db243b63..545d720c1 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/js/table.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/js/table.js @@ -8,6 +8,7 @@ function insertTable() { var cols = 2, rows = 2, border = 0, cellpadding = -1, cellspacing = -1, align, width, height, className, caption, frame, rules; var html = '', capEl, elm; var cellLimit, rowLimit, colLimit; + var cellStyles, newCellStyles, parsedStyles; tinyMCEPopup.restoreSelection(); @@ -21,9 +22,9 @@ function insertTable() { // Get form data cols = formObj.elements['cols'].value; rows = formObj.elements['rows'].value; - border = formObj.elements['border'].value != "" ? formObj.elements['border'].value : 0; - cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : ""; - cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : ""; + border = formObj.elements['border'].value !== "" ? formObj.elements['border'].value : ""; + cellpadding = formObj.elements['cellpadding'].value !== "" ? formObj.elements['cellpadding'].value : ""; + cellspacing = formObj.elements['cellspacing'].value !== "" ? formObj.elements['cellspacing'].value : ""; align = getSelectValue(formObj, "align"); frame = getSelectValue(formObj, "tframe"); rules = getSelectValue(formObj, "rules"); @@ -58,20 +59,6 @@ function insertTable() { // Update table if (action == "update") { - dom.setAttrib(elm, 'cellPadding', cellpadding, true); - dom.setAttrib(elm, 'cellSpacing', cellspacing, true); - - if (!isCssSize(border)) { - dom.setAttrib(elm, 'border', border); - } else { - dom.setAttrib(elm, 'border', ''); - } - - if (border == '') { - dom.setStyle(elm, 'border-width', ''); - dom.setStyle(elm, 'border', ''); - dom.setAttrib(elm, 'border', ''); - } dom.setAttrib(elm, 'align', align); dom.setAttrib(elm, 'frame', frame); @@ -91,7 +78,7 @@ function insertTable() { if (!capEl && caption) { capEl = elm.ownerDocument.createElement('caption'); - if (!tinymce.isIE) + if (!tinymce.isIE || tinymce.isIE11) capEl.innerHTML = '
'; elm.insertBefore(capEl, elm.firstChild); @@ -128,12 +115,54 @@ function insertTable() { elm.style.width = getCSSSize(width); }*/ - if (bordercolor != "") { - elm.style.borderColor = bordercolor; - elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle; - elm.style.borderWidth = cssSize(border); - } else - elm.style.borderColor = ''; + if (!inst.settings.table_style_by_css) { + dom.setAttrib(elm, 'cellPadding', nonCssSize(cellpadding), true); + } else { + dom.setAttrib(elm, 'cellPadding', ''); + } + + if (cellspacing !== "") { + elm.style.borderSpacing = cssSize(cellspacing); + } else { + elm.style.borderSpacing = ""; + } + + if (!inst.settings.table_style_by_css && !isCssSize(border)) { + dom.setAttrib(elm, 'border', border); + } else if (inst.settings.table_style_by_css || (border !== '' && isCssSize(border))) { + dom.setAttrib(elm, 'border', ''); + } + + if (border === "") { + dom.setStyle(elm, 'border-width', ''); + dom.setStyle(elm, 'border', ''); + dom.setAttrib(elm, 'border', ''); + } + + elm.style.borderColor = bordercolor; + + if (inst.settings.table_style_by_css) { + + parsedStyles = dom.parseStyle(style); + + if (parsedStyles.border) { + styleTDTH(elm, "border", parsedStyles.border); + } + if (border !== "") { + styleTDTH(elm, "border-width", cssSize(border)); + } else { + styleTDTH(elm, "border-width", ''); + } + if (cellpadding !== "") { + styleTDTH(elm, "padding", cssSize(cellpadding)); + } else { + styleTDTH(elm, "padding", ''); + } + + styleTDTH(elm, "border-color", bordercolor); + + styleTDTH(elm, "border-style", elm.style.borderStyle); + } elm.style.backgroundColor = bgcolor; elm.style.height = getCSSSize(height); @@ -158,12 +187,14 @@ function insertTable() { html += '
'; else - html += ''; + html += ''; } html += ""; @@ -242,19 +304,19 @@ function insertTable() { } else inst.execCommand('mceInsertContent', false, html); - tinymce.each(dom.select('table[data-mce-new]'), function(node) { + tinymce.each(dom.select('table[data-mce-new]'), function(node) { var tdorth = dom.select('td,th', node); - + // Fixes a bug in IE where the caret cannot be placed after the table if the table is at the end of the document - if (tinymce.isIE && node.nextSibling == null) { + if (tinymce.isIE && !tinymce.isIE11 && node.nextSibling == null) { if (inst.settings.forced_root_block) dom.insertAfter(dom.create(inst.settings.forced_root_block), node); else dom.insertAfter(dom.create('br', {'data-mce-bogus': '1'}), node); - } + } try { - // IE9 might fail to do this selection + // IE9 might fail to do this selection inst.selection.setCursorLocation(tdorth[0], 0); } catch (ex) { // Ignore @@ -269,6 +331,42 @@ function insertTable() { tinyMCEPopup.close(); } +function styleTDTH (elm, name, value) { + if (elm.tagName === "TD" || elm.tagName === "TH") { + dom.setStyle(elm, name, value); + } else { + if (elm.children) { + for (var i = 0; i < elm.children.length; i++) { + styleTDTH(elm.children[i], name, value); + } + } + } +} + +function getTDTHOverallStyle (elm, name) { + var cells = dom.select("td,th", elm), firstChildStyle; + + function checkChildren(firstChildStyle, elms) { + + for (var i = 0; i < elms.length; i++) { + var currentStyle = dom.getStyle(elms[i], name); + if (typeof firstChildStyle === "undefined") { + firstChildStyle = currentStyle; + } + if (firstChildStyle != currentStyle) { + return ""; + } + } + + return firstChildStyle; + + } + + firstChildStyle = checkChildren(firstChildStyle, cells); + + return firstChildStyle; +} + function makeAttrib(attrib, value) { var formObj = document.forms[0]; var valueElm = formObj.elements[attrib]; @@ -300,9 +398,9 @@ function init() { document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor'); document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor'); - var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', ''); + var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', ''), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', ''); var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = ""; - var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules = "", frame = ""; + var id = "", summary = "", style = "", dir = "", lang = "", background = "", rules = "", frame = ""; var inst = tinyMCEPopup.editor, dom = inst.dom; var formObj = document.forms[0]; var elm = dom.getParent(inst.selection.getNode(), "table"); @@ -323,7 +421,7 @@ function init() { if (elm && action != "insert") { var rowsAr = elm.rows; - var cols = 0; + cols = 0; for (var i=0; i cols) cols = rowsAr[i].cells.length; @@ -333,8 +431,8 @@ function init() { st = dom.parseStyle(dom.getAttrib(elm, "style")); border = trimSize(getStyle(elm, 'border', 'borderWidth')); - cellpadding = dom.getAttrib(elm, 'cellpadding', ""); - cellspacing = dom.getAttrib(elm, 'cellspacing', ""); + cellpadding = dom.getAttrib(elm, 'cellpadding', '') || getTDTHOverallStyle(elm, 'padding'); + cellspacing = dom.getAttrib(elm, 'cellspacing', '') || trimSize(getStyle(elm, 'border-spacing')); width = trimSize(getStyle(elm, 'width', 'width')); height = trimSize(getStyle(elm, 'height', 'height')); bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor')); @@ -429,6 +527,11 @@ function cssSize(value, def) { return value; } +function nonCssSize(value) { + var parsedInt = parseInt(value, 10) || ""; + return parsedInt.toString(); +} + function changedBackgroundImage() { var formObj = document.forms[0]; var st = dom.parseStyle(formObj.style.value); @@ -443,7 +546,7 @@ function changedBorder() { var st = dom.parseStyle(formObj.style.value); // Update border width if the element has a color - if (formObj.border.value != "" && (isCssSize(formObj.border.value) || formObj.bordercolor.value != "")) + if (formObj.border.value !== "" && (tinyMCEPopup.editor.settings.table_style_by_css || isCssSize(formObj.border.value))) st['border-width'] = cssSize(formObj.border.value); else { if (!formObj.border.value) { @@ -455,19 +558,26 @@ function changedBorder() { formObj.style.value = dom.serializeStyle(st); } +function changedCellSpacing() { + var formObj = document.forms[0]; + var st = dom.parseStyle(formObj.style.value); + + if (formObj.cellspacing.value !== "") + st['border-spacing'] = cssSize(formObj.cellspacing.value); + else { + st['border-spacing'] = ''; + } + + formObj.style.value = dom.serializeStyle(st); +} + function changedColor() { var formObj = document.forms[0]; var st = dom.parseStyle(formObj.style.value); st['background-color'] = formObj.bgcolor.value; - if (formObj.bordercolor.value != "") { - st['border-color'] = formObj.bordercolor.value; - - // Add border-width if it's missing - if (!st['border-width']) - st['border-width'] = cssSize(formObj.border.value, 1); - } + st['border-color'] = formObj.bordercolor.value; formObj.style.value = dom.serializeStyle(st); } diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/row.htm b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/row.htm index 1885401f6..6ebef2842 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/row.htm +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/row.htm @@ -28,7 +28,7 @@ - @@ -83,8 +83,8 @@ - - + + @@ -93,25 +93,25 @@ - + + - + + - + + - + +
- + + + -
-
@@ -119,11 +119,11 @@
 
-
@@ -133,7 +133,7 @@
-
diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/table.htm b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/table.htm index b92fa741e..1cedbf130 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/table.htm +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/table/table.htm @@ -33,9 +33,9 @@ - + - + @@ -62,8 +62,8 @@ - - + + @@ -75,13 +75,13 @@ - - + + - - + + @@ -90,14 +90,14 @@ - + + - + + - + + - + + - + + - + + - + +
-
@@ -105,54 +105,54 @@
 
-
- - - - - - - - - + + + + + + + + -
- + -
- + + + -
@@ -160,11 +160,11 @@
 
-
@@ -172,7 +172,7 @@
 
-
diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js index 42ece2092..070fe5902 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js @@ -1 +1 @@ -(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(c,d){var e=this,f=0,g=tinymce.VK;e.countre=c.getParam("wordcount_countregex",/[\w\u2019\'-]+/g);e.cleanre=c.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);e.update_rate=c.getParam("wordcount_update_rate",2000);e.update_on_delete=c.getParam("wordcount_update_on_delete",false);e.id=c.id+"-word-count";c.onPostRender.add(function(i,h){var j,k;k=i.getParam("wordcount_target_id");if(!k){j=tinymce.DOM.get(i.id+"_path_row");if(j){tinymce.DOM.add(j.parentNode,"div",{style:"float: right"},i.getLang("wordcount.words","Words: ")+'0')}}else{tinymce.DOM.add(k,"span",{},'0')}});c.onInit.add(function(h){h.selection.onSetContent.add(function(){e._count(h)});e._count(h)});c.onSetContent.add(function(h){e._count(h)});function b(h){return h!==f&&(h===g.ENTER||f===g.SPACEBAR||a(f))}function a(h){return h===g.DELETE||h===g.BACKSPACE}c.onKeyUp.add(function(h,i){if(b(i.keyCode)||e.update_on_delete&&a(i.keyCode)){e._count(h)}f=i.keyCode})},_getCount:function(c){var a=0;var b=c.getContent({format:"raw"});if(b){b=b.replace(/\.\.\./g," ");b=b.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," ");b=b.replace(/(\w+)(&.+?;)+(\w+)/,"$1$3").replace(/&.+?;/g," ");b=b.replace(this.cleanre,"");var d=b.match(this.countre);if(d){a=d.length}}return a},_count:function(a){var b=this;if(b.block){return}b.block=1;setTimeout(function(){if(!a.destroyed){var c=b._getCount(a);tinymce.DOM.setHTML(b.id,c.toString());setTimeout(function(){b.block=0},b.update_rate)}},1)},getInfo:function(){return{longname:"Word Count plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("wordcount",tinymce.plugins.WordCount)})(); \ No newline at end of file +(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(c,d){var e=this,f=0,g=tinymce.VK;e.countre=c.getParam("wordcount_countregex",/[\w\u2019\u00co-\u00ff^\uc397^u00f7\'-]+/g);e.cleanre=c.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);e.update_rate=c.getParam("wordcount_update_rate",2000);e.update_on_delete=c.getParam("wordcount_update_on_delete",false);e.id=c.id+"-word-count";c.onPostRender.add(function(i,h){var j,k;k=i.getParam("wordcount_target_id");if(!k){j=tinymce.DOM.get(i.id+"_path_row");if(j){tinymce.DOM.add(j.parentNode,"div",{style:"float: right"},i.getLang("wordcount.words","Words: ")+'0')}}else{tinymce.DOM.add(k,"span",{},'0')}});c.onInit.add(function(h){h.selection.onSetContent.add(function(){e._count(h)});e._count(h)});c.onSetContent.add(function(h){e._count(h)});function b(h){return h!==f&&(h===g.ENTER||f===g.SPACEBAR||a(f))}function a(h){return h===g.DELETE||h===g.BACKSPACE}c.onKeyUp.add(function(h,i){if(b(i.keyCode)||e.update_on_delete&&a(i.keyCode)){e._count(h)}f=i.keyCode})},_getCount:function(c){var a=0;var b=c.getContent({format:"raw"});if(b){b=b.replace(/\.\.\./g," ");b=b.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," ");b=b.replace(/(\w+)(&.+?;)+(\w+)/,"$1$3").replace(/&.+?;/g," ");b=b.replace(this.cleanre,"");var d=b.match(this.countre);if(d){a=d.length}}return a},_count:function(a){var b=this;if(b.block){return}b.block=1;setTimeout(function(){if(!a.destroyed){var c=b._getCount(a);tinymce.DOM.setHTML(b.id,c.toString());setTimeout(function(){b.block=0},b.update_rate)}},1)},getInfo:function(){return{longname:"Word Count plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("wordcount",tinymce.plugins.WordCount)})(); \ No newline at end of file diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js index 34b265553..8556772cb 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js @@ -18,7 +18,7 @@ init : function(ed, url) { var t = this, last = 0, VK = tinymce.VK; - t.countre = ed.getParam('wordcount_countregex', /[\w\u2019\'-]+/g); // u2019 == ’ + t.countre = ed.getParam('wordcount_countregex', /[\w\u2019\u00co-\u00ff^\uc397^u00f7\'-]+/g); // u2019 == ’ u00c0-u00ff extended latin chars with diacritical marks. exclude uc397 multiplication & u00f7 division t.cleanre = ed.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g); t.update_rate = ed.getParam('wordcount_update_rate', 2000); t.update_on_delete = ed.getParam('wordcount_update_on_delete', false); diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js index cbae1c885..16c17134f 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js @@ -1 +1 @@ -(function(h){var i=h.DOM,g=h.dom.Event,c=h.extend,f=h.each,a=h.util.Cookie,e,d=h.explode;function b(p,m){var k,l,o=p.dom,j="",n,r;previewStyles=p.settings.preview_styles;if(previewStyles===false){return""}if(!previewStyles){previewStyles="font-family font-size font-weight text-decoration text-transform color background-color"}function q(s){return s.replace(/%(\w+)/g,"")}k=m.block||m.inline||"span";l=o.create(k);f(m.styles,function(t,s){t=q(t);if(t){o.setStyle(l,s,t)}});f(m.attributes,function(t,s){t=q(t);if(t){o.setAttrib(l,s,t)}});f(m.classes,function(s){s=q(s);if(!o.hasClass(l,s)){o.addClass(l,s)}});o.setStyles(l,{position:"absolute",left:-65535});p.getBody().appendChild(l);n=o.getStyle(p.getBody(),"fontSize",true);n=/px$/.test(n)?parseInt(n,10):0;f(previewStyles.split(" "),function(s){var t=o.getStyle(l,s,true);if(s=="background-color"&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(t)){t=o.getStyle(p.getBody(),s,true);if(o.toHex(t).toLowerCase()=="#ffffff"){return}}if(s=="font-size"){if(/em|%$/.test(t)){if(n===0){return}t=parseFloat(t,10)/(/%$/.test(t)?100:1);t=(t*n)+"px"}}j+=s+":"+t+";"});o.remove(l);return j}h.ThemeManager.requireLangPack("advanced");h.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],controls:{bold:["bold_desc","Bold"],italic:["italic_desc","Italic"],underline:["underline_desc","Underline"],strikethrough:["striketrough_desc","Strikethrough"],justifyleft:["justifyleft_desc","JustifyLeft"],justifycenter:["justifycenter_desc","JustifyCenter"],justifyright:["justifyright_desc","JustifyRight"],justifyfull:["justifyfull_desc","JustifyFull"],bullist:["bullist_desc","InsertUnorderedList"],numlist:["numlist_desc","InsertOrderedList"],outdent:["outdent_desc","Outdent"],indent:["indent_desc","Indent"],cut:["cut_desc","Cut"],copy:["copy_desc","Copy"],paste:["paste_desc","Paste"],undo:["undo_desc","Undo"],redo:["redo_desc","Redo"],link:["link_desc","mceLink"],unlink:["unlink_desc","unlink"],image:["image_desc","mceImage"],cleanup:["cleanup_desc","mceCleanup"],help:["help_desc","mceHelp"],code:["code_desc","mceCodeEditor"],hr:["hr_desc","InsertHorizontalRule"],removeformat:["removeformat_desc","RemoveFormat"],sub:["sub_desc","subscript"],sup:["sup_desc","superscript"],forecolor:["forecolor_desc","ForeColor"],forecolorpicker:["forecolor_desc","mceForeColor"],backcolor:["backcolor_desc","HiliteColor"],backcolorpicker:["backcolor_desc","mceBackColor"],charmap:["charmap_desc","mceCharMap"],visualaid:["visualaid_desc","mceToggleVisualAid"],anchor:["anchor_desc","mceInsertAnchor"],newdocument:["newdocument_desc","mceNewDocument"],blockquote:["blockquote_desc","mceBlockQuote"]},stateControls:["bold","italic","underline","strikethrough","bullist","numlist","justifyleft","justifycenter","justifyright","justifyfull","sub","sup","blockquote"],init:function(k,l){var m=this,n,j,p;m.editor=k;m.url=l;m.onResolveName=new h.util.Dispatcher(this);n=k.settings;k.forcedHighContrastMode=k.settings.detect_highcontrast&&m._isHighContrast();k.settings.skin=k.forcedHighContrastMode?"highcontrast":k.settings.skin;if(!n.theme_advanced_buttons1){n=c({theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap"},n)}m.settings=n=c({theme_advanced_path:true,theme_advanced_toolbar_location:"top",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"left",theme_advanced_statusbar_location:"bottom",theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",theme_advanced_font_selector:"span",theme_advanced_show_current_color:0,readonly:k.settings.readonly},n);if(!n.font_size_style_values){n.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(h.is(n.theme_advanced_font_sizes,"string")){n.font_size_style_values=h.explode(n.font_size_style_values);n.font_size_classes=h.explode(n.font_size_classes||"");p={};k.settings.theme_advanced_font_sizes=n.theme_advanced_font_sizes;f(k.getParam("theme_advanced_font_sizes","","hash"),function(r,q){var o;if(q==r&&r>=1&&r<=7){q=r+" ("+m.sizes[r-1]+"pt)";o=n.font_size_classes[r-1];r=n.font_size_style_values[r-1]||(m.sizes[r-1]+"pt")}if(/^\s*\./.test(r)){o=r.replace(/\./g,"")}p[q]=o?{"class":o}:{fontSize:r}});n.theme_advanced_font_sizes=p}if((j=n.theme_advanced_path_location)&&j!="none"){n.theme_advanced_statusbar_location=n.theme_advanced_path_location}if(n.theme_advanced_statusbar_location=="none"){n.theme_advanced_statusbar_location=0}if(k.settings.content_css!==false){k.contentCSS.push(k.baseURI.toAbsolute(l+"/skins/"+k.settings.skin+"/content.css"))}k.onInit.add(function(){if(!k.settings.readonly){k.onNodeChange.add(m._nodeChanged,m);k.onKeyUp.add(m._updateUndoStatus,m);k.onMouseUp.add(m._updateUndoStatus,m);k.dom.bind(k.dom.getRoot(),"dragend",function(){m._updateUndoStatus(k)})}});k.onSetProgressState.add(function(r,o,s){var t,u=r.id,q;if(o){m.progressTimer=setTimeout(function(){t=r.getContainer();t=t.insertBefore(i.create("DIV",{style:"position:relative"}),t.firstChild);q=i.get(r.id+"_tbl");i.add(t,"div",{id:u+"_blocker","class":"mceBlocker",style:{width:q.clientWidth+2,height:q.clientHeight+2}});i.add(t,"div",{id:u+"_progress","class":"mceProgress",style:{left:q.clientWidth/2,top:q.clientHeight/2}})},s||0)}else{i.remove(u+"_blocker");i.remove(u+"_progress");clearTimeout(m.progressTimer)}});i.loadCSS(n.editor_css?k.documentBaseURI.toAbsolute(n.editor_css):l+"/skins/"+k.settings.skin+"/ui.css");if(n.skin_variant){i.loadCSS(l+"/skins/"+k.settings.skin+"/ui_"+n.skin_variant+".css")}},_isHighContrast:function(){var j,k=i.add(i.getRoot(),"div",{style:"background-color: rgb(171,239,86);"});j=(i.getStyle(k,"background-color",true)+"").toLowerCase().replace(/ /g,"");i.remove(k);return j!="rgb(171,239,86)"&&j!="#abef56"},createControl:function(m,j){var k,l;if(l=j.createControl(m)){return l}switch(m){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu()}if((k=this.controls[m])){return j.createButton(m,{title:"advanced."+k[0],cmd:k[1],ui:k[2],value:k[3]})}},execCommand:function(l,k,m){var j=this["_"+l];if(j){j.call(this,k,m);return true}return false},_importClasses:function(l){var j=this.editor,k=j.controlManager.get("styleselect");if(k.getLength()==0){f(j.dom.getClasses(),function(q,m){var p="style_"+m,n;n={inline:"span",attributes:{"class":q["class"]},selector:"*"};j.formatter.register(p,n);k.add(q["class"],p,{style:function(){return b(j,n)}})})}},_createStyleSelect:function(o){var l=this,j=l.editor,k=j.controlManager,m;m=k.createListBox("styleselect",{title:"advanced.style_select",onselect:function(q){var r,n=[],p;f(m.items,function(s){n.push(s.value)});j.focus();j.undoManager.add();r=j.formatter.matchAll(n);h.each(r,function(s){if(!q||s==q){if(s){j.formatter.remove(s)}p=true}});if(!p){j.formatter.apply(q)}j.undoManager.add();j.nodeChanged();return false}});j.onPreInit.add(function(){var p=0,n=j.getParam("style_formats");if(n){f(n,function(q){var r,s=0;f(q,function(){s++});if(s>1){r=q.name=q.name||"style_"+(p++);j.formatter.register(r,q);m.add(q.title,r,{style:function(){return b(j,q)}})}else{m.add(q.title)}})}else{f(j.getParam("theme_advanced_styles","","hash"),function(t,s){var r,q;if(t){r="style_"+(p++);q={inline:"span",classes:t,selector:"*"};j.formatter.register(r,q);m.add(l.editor.translate(s),r,{style:function(){return b(j,q)}})}})}});if(m.getLength()==0){m.onPostRender.add(function(p,q){if(!m.NativeListBox){g.add(q.id+"_text","focus",l._importClasses,l);g.add(q.id+"_text","mousedown",l._importClasses,l);g.add(q.id+"_open","focus",l._importClasses,l);g.add(q.id+"_open","mousedown",l._importClasses,l)}else{g.add(q.id,"focus",l._importClasses,l)}})}return m},_createFontSelect:function(){var l,k=this,j=k.editor;l=j.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(m){var n=l.items[l.selectedIndex];if(!m&&n){j.execCommand("FontName",false,n.value);return}j.execCommand("FontName",false,m);l.select(function(o){return m==o});if(n&&n.value==m){l.select(null)}return false}});if(l){f(j.getParam("theme_advanced_fonts",k.settings.theme_advanced_fonts,"hash"),function(n,m){l.add(j.translate(m),n,{style:n.indexOf("dings")==-1?"font-family:"+n:""})})}return l},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(o){var p=n.items[n.selectedIndex];if(!o&&p){p=p.value;if(p["class"]){k.formatter.toggle("fontsize_class",{value:p["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,p.fontSize)}return}if(o["class"]){k.focus();k.undoManager.add();k.formatter.toggle("fontsize_class",{value:o["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,o.fontSize)}n.select(function(q){return o==q});if(p&&(p.value.fontSize==o.fontSize||p.value["class"]&&p.value["class"]==o["class"])){n.select(null)}return false}});if(n){f(m.settings.theme_advanced_font_sizes,function(p,o){var q=p.fontSize;if(q>=1&&q<=7){q=m.sizes[parseInt(q)-1]+"pt"}n.add(o,p,{style:"font-size:"+q,"class":"mceFontSize"+(l++)+(" "+(p["class"]||""))})})}return n},_createBlockFormats:function(){var l,j={p:"advanced.paragraph",address:"advanced.address",pre:"advanced.pre",h1:"advanced.h1",h2:"advanced.h2",h3:"advanced.h3",h4:"advanced.h4",h5:"advanced.h5",h6:"advanced.h6",div:"advanced.div",blockquote:"advanced.blockquote",code:"advanced.code",dt:"advanced.dt",dd:"advanced.dd",samp:"advanced.samp"},k=this;l=k.editor.controlManager.createListBox("formatselect",{title:"advanced.block",onselect:function(m){k.editor.execCommand("FormatBlock",false,m);return false}});if(l){f(k.editor.getParam("theme_advanced_blockformats",k.settings.theme_advanced_blockformats,"hash"),function(n,m){l.add(k.editor.translate(m!=n?m:j[n]),n,{"class":"mce_formatPreview mce_"+n,style:function(){return b(k.editor,{block:n})}})})}return l},_createForeColorMenu:function(){var n,k=this,l=k.settings,m={},j;if(l.theme_advanced_more_colors){m.more_colors_func=function(){k._mceColorPicker(0,{color:n.value,func:function(o){n.setColor(o)}})}}if(j=l.theme_advanced_text_colors){m.colors=j}if(l.theme_advanced_default_foreground_color){m.default_color=l.theme_advanced_default_foreground_color}m.title="advanced.forecolor_desc";m.cmd="ForeColor";m.scope=this;n=k.editor.controlManager.createColorSplitButton("forecolor",m);return n},_createBackColorMenu:function(){var n,k=this,l=k.settings,m={},j;if(l.theme_advanced_more_colors){m.more_colors_func=function(){k._mceColorPicker(0,{color:n.value,func:function(o){n.setColor(o)}})}}if(j=l.theme_advanced_background_colors){m.colors=j}if(l.theme_advanced_default_background_color){m.default_color=l.theme_advanced_default_background_color}m.title="advanced.backcolor_desc";m.cmd="HiliteColor";m.scope=this;n=k.editor.controlManager.createColorSplitButton("backcolor",m);return n},renderUI:function(l){var q,m,r,w=this,u=w.editor,x=w.settings,v,k,j;if(u.settings){u.settings.aria_label=x.aria_label+u.getLang("advanced.help_shortcut")}q=k=i.create("span",{role:"application","aria-labelledby":u.id+"_voice",id:u.id+"_parent","class":"mceEditor "+u.settings.skin+"Skin"+(x.skin_variant?" "+u.settings.skin+"Skin"+w._ufirst(x.skin_variant):"")+(u.settings.directionality=="rtl"?" mceRtl":"")});i.add(q,"span",{"class":"mceVoiceLabel",style:"display:none;",id:u.id+"_voice"},x.aria_label);if(!i.boxModel){q=i.add(q,"div",{"class":"mceOldBoxModel"})}q=v=i.add(q,"table",{role:"presentation",id:u.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});q=r=i.add(q,"tbody");switch((x.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":m=w._rowLayout(x,r,l);break;case"customlayout":m=u.execCallback("theme_advanced_custom_layout",x,r,l,k);break;default:m=w._simpleLayout(x,r,l,k)}q=l.targetNode;j=v.rows;i.addClass(j[0],"mceFirst");i.addClass(j[j.length-1],"mceLast");f(i.select("tr",r),function(o){i.addClass(o.firstChild,"mceFirst");i.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(i.get(x.theme_advanced_toolbar_container)){i.get(x.theme_advanced_toolbar_container).appendChild(k)}else{i.insertAfter(k,q)}g.add(u.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){w._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return false}});if(!u.getParam("accessibility_focus")){g.add(i.add(k,"a",{href:"#"},""),"focus",function(){tinyMCE.get(u.id).focus()})}if(x.theme_advanced_toolbar_location=="external"){l.deltaHeight=0}w.deltaHeight=l.deltaHeight;l.targetNode=null;u.onKeyDown.add(function(p,n){var s=121,o=122;if(n.altKey){if(n.keyCode===s){if(h.isWebKit){window.focus()}w.toolbarGroup.focus();return g.cancel(n)}else{if(n.keyCode===o){i.get(p.id+"_path_row").focus();return g.cancel(n)}}}});u.addShortcut("alt+0","","mceShortcuts",w);return{iframeContainer:m,editorContainer:u.id+"_parent",sizeContainer:v,deltaHeight:l.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:h.majorVersion+"."+h.minorVersion}},resizeBy:function(j,k){var l=i.get(this.editor.id+"_ifr");this.resizeTo(l.clientWidth+j,l.clientHeight+k)},resizeTo:function(j,n,l){var k=this.editor,m=this.settings,o=i.get(k.id+"_tbl"),p=i.get(k.id+"_ifr");j=Math.max(m.theme_advanced_resizing_min_width||100,j);n=Math.max(m.theme_advanced_resizing_min_height||100,n);j=Math.min(m.theme_advanced_resizing_max_width||65535,j);n=Math.min(m.theme_advanced_resizing_max_height||65535,n);i.setStyle(o,"height","");i.setStyle(p,"height",n);if(m.theme_advanced_resize_horizontal){i.setStyle(o,"width","");i.setStyle(p,"width",j);if(j"));i.setHTML(l,r.join(""))},_addStatusBar:function(p,k){var l,w=this,q=w.editor,x=w.settings,j,u,v,m;l=i.add(p,"tr");l=m=i.add(l,"td",{"class":"mceStatusbar"});l=i.add(l,"div",{id:q.id+"_path_row",role:"group","aria-labelledby":q.id+"_path_voice"});if(x.theme_advanced_path){i.add(l,"span",{id:q.id+"_path_voice"},q.translate("advanced.path"));i.add(l,"span",{},": ")}else{i.add(l,"span",{}," ")}if(x.theme_advanced_resizing){i.add(m,"a",{id:q.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize",tabIndex:"-1"});if(x.theme_advanced_resizing_use_cookie){q.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+q.id+"_size"),r=i.get(q.id+"_tbl");if(!n){return}w.resizeTo(n.cw,n.ch)})}q.onPostRender.add(function(){g.add(q.id+"_resize","click",function(n){n.preventDefault()});g.add(q.id+"_resize","mousedown",function(E){var t,r,s,o,D,A,B,G,n,F,y;function z(H){H.preventDefault();n=B+(H.screenX-D);F=G+(H.screenY-A);w.resizeTo(n,F)}function C(H){g.remove(i.doc,"mousemove",t);g.remove(q.getDoc(),"mousemove",r);g.remove(i.doc,"mouseup",s);g.remove(q.getDoc(),"mouseup",o);n=B+(H.screenX-D);F=G+(H.screenY-A);w.resizeTo(n,F,true);q.nodeChanged()}E.preventDefault();D=E.screenX;A=E.screenY;y=i.get(w.editor.id+"_ifr");B=n=y.clientWidth;G=F=y.clientHeight;t=g.add(i.doc,"mousemove",z);r=g.add(q.getDoc(),"mousemove",z);s=g.add(i.doc,"mouseup",C);o=g.add(q.getDoc(),"mouseup",C)})})}k.deltaHeight-=21;l=p=null},_updateUndoStatus:function(k){var j=k.controlManager,l=k.undoManager;j.setDisabled("undo",!l.hasUndo()&&!l.typing);j.setDisabled("redo",!l.hasRedo())},_nodeChanged:function(o,u,E,r,F){var z=this,D,G=0,y,H,A=z.settings,x,l,w,C,m,k,j;h.each(z.stateControls,function(n){u.setActive(n,o.queryCommandState(z.controls[n][1]))});function q(p){var s,n=F.parents,t=p;if(typeof(p)=="string"){t=function(v){return v.nodeName==p}}for(s=0;s0){H.mark(p)}})}if(H=u.get("formatselect")){D=q(o.dom.isBlock);if(D){H.select(D.nodeName.toLowerCase())}}q(function(p){if(p.nodeName==="SPAN"){if(!x&&p.className){x=p.className}}if(o.dom.is(p,A.theme_advanced_font_selector)){if(!l&&p.style.fontSize){l=p.style.fontSize}if(!w&&p.style.fontFamily){w=p.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}if(!C&&p.style.color){C=p.style.color}if(!m&&p.style.backgroundColor){m=p.style.backgroundColor}}return false});if(H=u.get("fontselect")){H.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==w})}if(H=u.get("fontsizeselect")){if(A.theme_advanced_runtime_fontsize&&!l&&!x){l=o.dom.getStyle(E,"fontSize",true)}H.select(function(n){if(n.fontSize&&n.fontSize===l){return true}if(n["class"]&&n["class"]===x){return true}})}if(A.theme_advanced_show_current_color){function B(p,n){if(H=u.get(p)){if(!n){n=H.settings.default_color}if(n!==H.value){H.displayColor(n)}}}B("forecolor",C);B("backcolor",m)}if(A.theme_advanced_show_current_color){function B(p,n){if(H=u.get(p)){if(!n){n=H.settings.default_color}if(n!==H.value){H.displayColor(n)}}}B("forecolor",C);B("backcolor",m)}if(A.theme_advanced_path&&A.theme_advanced_statusbar_location){D=i.get(o.id+"_path")||i.add(o.id+"_path_row","span",{id:o.id+"_path"});if(z.statusKeyboardNavigation){z.statusKeyboardNavigation.destroy();z.statusKeyboardNavigation=null}i.setHTML(D,"");q(function(I){var p=I.nodeName.toLowerCase(),s,v,t="";if(I.nodeType!=1||p==="br"||I.getAttribute("data-mce-bogus")||i.hasClass(I,"mceItemHidden")||i.hasClass(I,"mceItemRemoved")){return}if(h.isIE&&I.scopeName!=="HTML"&&I.scopeName){p=I.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(y=i.getAttrib(I,"src")){t+="src: "+y+" "}break;case"a":if(y=i.getAttrib(I,"name")){t+="name: "+y+" ";p+="#"+y}if(y=i.getAttrib(I,"href")){t+="href: "+y+" "}break;case"font":if(y=i.getAttrib(I,"face")){t+="font: "+y+" "}if(y=i.getAttrib(I,"size")){t+="size: "+y+" "}if(y=i.getAttrib(I,"color")){t+="color: "+y+" "}break;case"span":if(y=i.getAttrib(I,"style")){t+="style: "+y+" "}break}if(y=i.getAttrib(I,"id")){t+="id: "+y+" "}if(y=I.className){y=y.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g,"");if(y){t+="class: "+y+" ";if(o.dom.isBlock(I)||p=="img"||p=="span"){p+="."+y}}}p=p.replace(/(html:)/g,"");p={name:p,node:I,title:t};z.onResolveName.dispatch(z,p);t=p.title;p=p.name;v=i.create("a",{href:"javascript:;",role:"button",onmousedown:"return false;",title:t,"class":"mcePath_"+(G++)},p);if(D.hasChildNodes()){D.insertBefore(i.create("span",{"aria-hidden":"true"},"\u00a0\u00bb "),D.firstChild);D.insertBefore(v,D.firstChild)}else{D.appendChild(v)}},o.getBody());if(i.select("a",D).length>0){z.statusKeyboardNavigation=new h.ui.KeyboardNavigation({root:o.id+"_path_row",items:i.select("a",D),excludeFromTabOrder:true,onCancel:function(){o.focus()}},i)}}},_sel:function(j){this.editor.execCommand("mceSelectNodeDepth",false,j)},_mceInsertAnchor:function(l,k){var j=this.editor;j.windowManager.open({url:this.url+"/anchor.htm",width:320+parseInt(j.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(j.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var j=this.editor;j.windowManager.open({url:this.url+"/charmap.htm",width:550+parseInt(j.getLang("advanced.charmap_delta_width",0)),height:265+parseInt(j.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var j=this.editor;j.windowManager.open({url:this.url+"/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceShortcuts:function(){var j=this.editor;j.windowManager.open({url:this.url+"/shortcuts.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(l,k){var j=this.editor;k=k||{};j.windowManager.open({url:this.url+"/color_picker.htm",width:375+parseInt(j.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(j.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:k.color,func:k.func,theme_url:this.url})},_mceCodeEditor:function(k,l){var j=this.editor;j.windowManager.open({url:this.url+"/source_editor.htm",width:parseInt(j.getParam("theme_advanced_source_editor_width",720)),height:parseInt(j.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(k,l){var j=this.editor;if(j.dom.getAttrib(j.selection.getNode(),"class","").indexOf("mceItem")!=-1){return}j.windowManager.open({url:this.url+"/image.htm",width:355+parseInt(j.getLang("advanced.image_delta_width",0)),height:275+parseInt(j.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(k,l){var j=this.editor;j.windowManager.open({url:this.url+"/link.htm",width:310+parseInt(j.getLang("advanced.link_delta_width",0)),height:200+parseInt(j.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var j=this.editor;j.windowManager.confirm("advanced.newdocument",function(k){if(k){j.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var j=this;this._mceColorPicker(0,{color:j.fgColor,func:function(k){j.fgColor=k;j.editor.execCommand("ForeColor",false,k)}})},_mceBackColor:function(){var j=this;this._mceColorPicker(0,{color:j.bgColor,func:function(k){j.bgColor=k;j.editor.execCommand("HiliteColor",false,k)}})},_ufirst:function(j){return j.substring(0,1).toUpperCase()+j.substring(1)}});h.ThemeManager.add("advanced",h.themes.AdvancedTheme)}(tinymce)); \ No newline at end of file +(function(i){var k=i.DOM,h=i.dom.Event,c=i.extend,f=i.each,a=i.util.Cookie,e,d=i.explode;var g=function(m,n){var o=n.theme_advanced_default_font_size;var l=n.theme_advanced_default_font_family;if(o){m.style.fontSize=o}if(l){m.style.fontFamily=l}};var j=function(m){var n=m.theme_advanced_default_font_size;var l=m.theme_advanced_default_font_family;return !!(n||l)};function b(r,o){var m,n,q=r.dom,l="",p,t;previewStyles=r.settings.preview_styles;if(previewStyles===false){return""}if(!previewStyles){previewStyles="font-family font-size font-weight text-decoration text-transform color background-color"}function s(u){return u.replace(/%(\w+)/g,"")}m=o.block||o.inline||"span";n=q.create(m);f(o.styles,function(v,u){v=s(v);if(v){q.setStyle(n,u,v)}});f(o.attributes,function(v,u){v=s(v);if(v){q.setAttrib(n,u,v)}});f(o.classes,function(u){u=s(u);if(!q.hasClass(n,u)){q.addClass(n,u)}});q.setStyles(n,{position:"absolute",left:-65535});r.getBody().appendChild(n);p=q.getStyle(r.getBody(),"fontSize",true);p=/px$/.test(p)?parseInt(p,10):0;f(previewStyles.split(" "),function(u){var v=q.getStyle(n,u,true);if(u=="background-color"&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(v)){v=q.getStyle(r.getBody(),u,true);if(q.toHex(v).toLowerCase()=="#ffffff"){return}}if(u=="font-size"){if(/em|%$/.test(v)){if(p===0){return}v=parseFloat(v,10)/(/%$/.test(v)?100:1);v=(v*p)+"px"}}l+=u+":"+v+";"});q.remove(n);return l}i.ThemeManager.requireLangPack("advanced");i.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],controls:{bold:["bold_desc","Bold"],italic:["italic_desc","Italic"],underline:["underline_desc","Underline"],strikethrough:["striketrough_desc","Strikethrough"],justifyleft:["justifyleft_desc","JustifyLeft"],justifycenter:["justifycenter_desc","JustifyCenter"],justifyright:["justifyright_desc","JustifyRight"],justifyfull:["justifyfull_desc","JustifyFull"],bullist:["bullist_desc","InsertUnorderedList"],numlist:["numlist_desc","InsertOrderedList"],outdent:["outdent_desc","Outdent"],indent:["indent_desc","Indent"],cut:["cut_desc","Cut"],copy:["copy_desc","Copy"],paste:["paste_desc","Paste"],undo:["undo_desc","Undo"],redo:["redo_desc","Redo"],link:["link_desc","mceLink"],unlink:["unlink_desc","unlink"],image:["image_desc","mceImage"],cleanup:["cleanup_desc","mceCleanup"],help:["help_desc","mceHelp"],code:["code_desc","mceCodeEditor"],hr:["hr_desc","InsertHorizontalRule"],removeformat:["removeformat_desc","RemoveFormat"],sub:["sub_desc","subscript"],sup:["sup_desc","superscript"],forecolor:["forecolor_desc","ForeColor"],forecolorpicker:["forecolor_desc","mceForeColor"],backcolor:["backcolor_desc","HiliteColor"],backcolorpicker:["backcolor_desc","mceBackColor"],charmap:["charmap_desc","mceCharMap"],visualaid:["visualaid_desc","mceToggleVisualAid"],anchor:["anchor_desc","mceInsertAnchor"],newdocument:["newdocument_desc","mceNewDocument"],blockquote:["blockquote_desc","mceBlockQuote"]},stateControls:["bold","italic","underline","strikethrough","bullist","numlist","justifyleft","justifycenter","justifyright","justifyfull","sub","sup","blockquote"],init:function(m,n){var p=this,q,l,r;p.editor=m;p.url=n;p.onResolveName=new i.util.Dispatcher(this);q=m.settings;m.forcedHighContrastMode=m.settings.detect_highcontrast&&p._isHighContrast();m.settings.skin=m.forcedHighContrastMode?"highcontrast":m.settings.skin;if(!q.theme_advanced_buttons1){q=c({theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap"},q)}p.settings=q=c({theme_advanced_path:true,theme_advanced_toolbar_location:"top",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"left",theme_advanced_statusbar_location:"bottom",theme_advanced_fonts:"Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",theme_advanced_font_selector:"span",theme_advanced_show_current_color:0,readonly:m.settings.readonly},q);if(!q.font_size_style_values){q.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(i.is(q.theme_advanced_font_sizes,"string")){q.font_size_style_values=i.explode(q.font_size_style_values);q.font_size_classes=i.explode(q.font_size_classes||"");r={};m.settings.theme_advanced_font_sizes=q.theme_advanced_font_sizes;f(m.getParam("theme_advanced_font_sizes","","hash"),function(t,s){var o;if(s==t&&t>=1&&t<=7){s=t+" ("+p.sizes[t-1]+"pt)";o=q.font_size_classes[t-1];t=q.font_size_style_values[t-1]||(p.sizes[t-1]+"pt")}if(/^\s*\./.test(t)){o=t.replace(/\./g,"")}r[s]=o?{"class":o}:{fontSize:t}});q.theme_advanced_font_sizes=r}if((l=q.theme_advanced_path_location)&&l!="none"){q.theme_advanced_statusbar_location=q.theme_advanced_path_location}if(q.theme_advanced_statusbar_location=="none"){q.theme_advanced_statusbar_location=0}if(m.settings.content_css!==false){m.contentCSS.push(m.baseURI.toAbsolute(n+"/skins/"+m.settings.skin+"/content.css"))}m.onInit.add(function(){if(!m.settings.readonly){m.onNodeChange.add(p._nodeChanged,p);m.onKeyUp.add(p._updateUndoStatus,p);m.onMouseUp.add(p._updateUndoStatus,p);m.dom.bind(m.dom.getRoot(),"dragend",function(){p._updateUndoStatus(m)})}g(m.getBody(),m.settings)});m.onSetProgressState.add(function(t,o,u){var v,w=t.id,s;if(o){p.progressTimer=setTimeout(function(){v=t.getContainer();v=v.insertBefore(k.create("DIV",{style:"position:relative"}),v.firstChild);s=k.get(t.id+"_tbl");k.add(v,"div",{id:w+"_blocker","class":"mceBlocker",style:{width:s.clientWidth+2,height:s.clientHeight+2}});k.add(v,"div",{id:w+"_progress","class":"mceProgress",style:{left:s.clientWidth/2,top:s.clientHeight/2}})},u||0)}else{k.remove(w+"_blocker");k.remove(w+"_progress");clearTimeout(p.progressTimer)}});k.loadCSS(q.editor_css?m.documentBaseURI.toAbsolute(q.editor_css):n+"/skins/"+m.settings.skin+"/ui.css");if(q.skin_variant){k.loadCSS(n+"/skins/"+m.settings.skin+"/ui_"+q.skin_variant+".css")}},_isHighContrast:function(){var l,m=k.add(k.getRoot(),"div",{style:"background-color: rgb(171,239,86);"});l=(k.getStyle(m,"background-color",true)+"").toLowerCase().replace(/ /g,"");k.remove(m);return l!="rgb(171,239,86)"&&l!="#abef56"},createControl:function(p,l){var m,o;if(o=l.createControl(p)){return o}switch(p){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu()}if((m=this.controls[p])){return l.createButton(p,{title:"advanced."+m[0],cmd:m[1],ui:m[2],value:m[3]})}},execCommand:function(n,m,o){var l=this["_"+n];if(l){l.call(this,m,o);return true}return false},_importClasses:function(n){var l=this.editor,m=l.controlManager.get("styleselect");if(m.getLength()==0){f(l.dom.getClasses(),function(s,p){var r="style_"+p,q;q={inline:"span",attributes:{"class":s["class"]},selector:"*"};l.formatter.register(r,q);m.add(s["class"],r,{style:function(){return b(l,q)}})})}},_createStyleSelect:function(q){var o=this,l=o.editor,m=l.controlManager,p;p=m.createListBox("styleselect",{title:"advanced.style_select",onselect:function(s){var t,n=[],r;f(p.items,function(u){n.push(u.value)});l.focus();l.undoManager.add();t=l.formatter.matchAll(n);i.each(t,function(u){if(!s||u==s){if(u){l.formatter.remove(u)}r=true}});if(!r){l.formatter.apply(s)}l.undoManager.add();l.nodeChanged();return false}});l.onPreInit.add(function(){var r=0,n=l.getParam("style_formats");if(n){f(n,function(s){var t,u=0;f(s,function(){u++});if(u>1){t=s.name=s.name||"style_"+(r++);l.formatter.register(t,s);p.add(s.title,t,{style:function(){return b(l,s)}})}else{p.add(s.title)}})}else{f(l.getParam("theme_advanced_styles","","hash"),function(v,u){var t,s;if(v){t="style_"+(r++);s={inline:"span",classes:v,selector:"*"};l.formatter.register(t,s);p.add(o.editor.translate(u),t,{style:function(){return b(l,s)}})}})}});if(p.getLength()==0){p.onPostRender.add(function(r,s){if(!p.NativeListBox){h.add(s.id+"_text","focus",o._importClasses,o);h.add(s.id+"_text","mousedown",o._importClasses,o);h.add(s.id+"_open","focus",o._importClasses,o);h.add(s.id+"_open","mousedown",o._importClasses,o)}else{h.add(s.id,"focus",o._importClasses,o)}})}return p},_createFontSelect:function(){var n,m=this,l=m.editor;n=l.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(o){var p=n.items[n.selectedIndex];if(!o&&p){l.execCommand("FontName",false,p.value);return}l.execCommand("FontName",false,o);n.select(function(q){return o==q});if(p&&p.value==o){n.select(null)}return false}});if(n){f(l.getParam("theme_advanced_fonts",m.settings.theme_advanced_fonts,"hash"),function(p,o){n.add(l.translate(o),p,{style:p.indexOf("dings")==-1?"font-family:"+p:""})})}return n},_createFontSizeSelect:function(){var o=this,m=o.editor,p,n=0,l=[];p=m.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(q){var r=p.items[p.selectedIndex];if(!q&&r){r=r.value;if(r["class"]){m.formatter.toggle("fontsize_class",{value:r["class"]});m.undoManager.add();m.nodeChanged()}else{m.execCommand("FontSize",false,r.fontSize)}return}if(q["class"]){m.focus();m.undoManager.add();m.formatter.toggle("fontsize_class",{value:q["class"]});m.undoManager.add();m.nodeChanged()}else{m.execCommand("FontSize",false,q.fontSize)}p.select(function(s){return q==s});if(r&&(r.value.fontSize==q.fontSize||r.value["class"]&&r.value["class"]==q["class"])){p.select(null)}return false}});if(p){f(o.settings.theme_advanced_font_sizes,function(r,q){var s=r.fontSize;if(s>=1&&s<=7){s=o.sizes[parseInt(s)-1]+"pt"}p.add(q,r,{style:"font-size:"+s,"class":"mceFontSize"+(n++)+(" "+(r["class"]||""))})})}return p},_createBlockFormats:function(){var n,l={p:"advanced.paragraph",address:"advanced.address",pre:"advanced.pre",h1:"advanced.h1",h2:"advanced.h2",h3:"advanced.h3",h4:"advanced.h4",h5:"advanced.h5",h6:"advanced.h6",div:"advanced.div",blockquote:"advanced.blockquote",code:"advanced.code",dt:"advanced.dt",dd:"advanced.dd",samp:"advanced.samp"},m=this;n=m.editor.controlManager.createListBox("formatselect",{title:"advanced.block",onselect:function(o){m.editor.execCommand("FormatBlock",false,o);return false}});if(n){f(m.editor.getParam("theme_advanced_blockformats",m.settings.theme_advanced_blockformats,"hash"),function(p,o){n.add(m.editor.translate(o!=p?o:l[p]),p,{"class":"mce_formatPreview mce_"+p,style:function(){return b(m.editor,{block:p})}})})}return n},_createForeColorMenu:function(){var q,m=this,n=m.settings,p={},l;if(n.theme_advanced_more_colors){p.more_colors_func=function(){m._mceColorPicker(0,{color:q.value,func:function(o){q.setColor(o)}})}}if(l=n.theme_advanced_text_colors){p.colors=l}if(n.theme_advanced_default_foreground_color){p.default_color=n.theme_advanced_default_foreground_color}p.title="advanced.forecolor_desc";p.cmd="ForeColor";p.scope=this;q=m.editor.controlManager.createColorSplitButton("forecolor",p);return q},_createBackColorMenu:function(){var q,m=this,n=m.settings,p={},l;if(n.theme_advanced_more_colors){p.more_colors_func=function(){m._mceColorPicker(0,{color:q.value,func:function(o){q.setColor(o)}})}}if(l=n.theme_advanced_background_colors){p.colors=l}if(n.theme_advanced_default_background_color){p.default_color=n.theme_advanced_default_background_color}p.title="advanced.backcolor_desc";p.cmd="HiliteColor";p.scope=this;q=m.editor.controlManager.createColorSplitButton("backcolor",p);return q},renderUI:function(q){var u,r,v,y=this,w=y.editor,z=y.settings,x,m,l;if(w.settings){w.settings.aria_label=z.aria_label+w.getLang("advanced.help_shortcut")}u=m=k.create("span",{role:"application","aria-labelledby":w.id+"_voice",id:w.id+"_parent","class":"mceEditor "+w.settings.skin+"Skin"+(z.skin_variant?" "+w.settings.skin+"Skin"+y._ufirst(z.skin_variant):"")+(w.settings.directionality=="rtl"?" mceRtl":"")});k.add(u,"span",{"class":"mceVoiceLabel",style:"display:none;",id:w.id+"_voice"},z.aria_label);if(!k.boxModel){u=k.add(u,"div",{"class":"mceOldBoxModel"})}u=x=k.add(u,"table",{role:"presentation",id:w.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});u=v=k.add(u,"tbody");switch((z.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":r=y._rowLayout(z,v,q);break;case"customlayout":r=w.execCallback("theme_advanced_custom_layout",z,v,q,m);break;default:r=y._simpleLayout(z,v,q,m)}u=q.targetNode;l=x.rows;k.addClass(l[0],"mceFirst");k.addClass(l[l.length-1],"mceLast");f(k.select("tr",v),function(o){k.addClass(o.firstChild,"mceFirst");k.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(k.get(z.theme_advanced_toolbar_container)){k.get(z.theme_advanced_toolbar_container).appendChild(m)}else{k.insertAfter(m,u)}h.add(w.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){y._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return false}});if(!w.getParam("accessibility_focus")){h.add(k.add(m,"a",{href:"#"},""),"focus",function(){tinyMCE.get(w.id).focus()})}if(z.theme_advanced_toolbar_location=="external"){q.deltaHeight=0}y.deltaHeight=q.deltaHeight;q.targetNode=null;w.onKeyDown.add(function(p,n){var s=121,o=122;if(n.altKey){if(n.keyCode===s){if(i.isWebKit){window.focus()}y.toolbarGroup.focus();return h.cancel(n)}else{if(n.keyCode===o){k.get(p.id+"_path_row").focus();return h.cancel(n)}}}});w.addShortcut("alt+0","","mceShortcuts",y);return{iframeContainer:r,editorContainer:w.id+"_parent",sizeContainer:x,deltaHeight:q.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:i.majorVersion+"."+i.minorVersion}},resizeBy:function(l,m){var n=k.get(this.editor.id+"_ifr");this.resizeTo(n.clientWidth+l,n.clientHeight+m)},resizeTo:function(l,p,n){var m=this.editor,o=this.settings,q=k.get(m.id+"_tbl"),r=k.get(m.id+"_ifr");l=Math.max(o.theme_advanced_resizing_min_width||100,l);p=Math.max(o.theme_advanced_resizing_min_height||100,p);l=Math.min(o.theme_advanced_resizing_max_width||65535,l);p=Math.min(o.theme_advanced_resizing_max_height||65535,p);k.setStyle(q,"height","");k.setStyle(r,"height",p);if(o.theme_advanced_resize_horizontal){k.setStyle(q,"width","");k.setStyle(r,"width",l);if(l"));k.setHTML(p,w.join(""))},_addStatusBar:function(u,m){var p,y=this,v=y.editor,z=y.settings,l,w,x,q;p=k.add(u,"tr");p=q=k.add(p,"td",{"class":"mceStatusbar"});p=k.add(p,"div",{id:v.id+"_path_row",role:"group","aria-labelledby":v.id+"_path_voice"});if(z.theme_advanced_path){k.add(p,"span",{id:v.id+"_path_voice"},v.translate("advanced.path"));k.add(p,"span",{},": ")}else{k.add(p,"span",{}," ")}if(z.theme_advanced_resizing){k.add(q,"a",{id:v.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize",tabIndex:"-1"});if(z.theme_advanced_resizing_use_cookie){v.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+v.id+"_size"),r=k.get(v.id+"_tbl");if(!n){return}y.resizeTo(n.cw,n.ch)})}v.onPostRender.add(function(){h.add(v.id+"_resize","click",function(n){n.preventDefault()});h.add(v.id+"_resize","mousedown",function(G){var t,r,s,o,F,C,D,I,n,H,A;function B(J){J.preventDefault();n=D+(J.screenX-F);H=I+(J.screenY-C);y.resizeTo(n,H)}function E(J){h.remove(k.doc,"mousemove",t);h.remove(v.getDoc(),"mousemove",r);h.remove(k.doc,"mouseup",s);h.remove(v.getDoc(),"mouseup",o);n=D+(J.screenX-F);H=I+(J.screenY-C);y.resizeTo(n,H,true);v.nodeChanged()}G.preventDefault();F=G.screenX;C=G.screenY;A=k.get(y.editor.id+"_ifr");D=n=A.clientWidth;I=H=A.clientHeight;t=h.add(k.doc,"mousemove",B);r=h.add(v.getDoc(),"mousemove",B);s=h.add(k.doc,"mouseup",E);o=h.add(v.getDoc(),"mouseup",E)})})}m.deltaHeight-=21;p=u=null},_updateUndoStatus:function(m){var l=m.controlManager,n=m.undoManager;l.setDisabled("undo",!n.hasUndo()&&!n.typing);l.setDisabled("redo",!n.hasRedo())},_nodeChanged:function(u,z,I,y,J){var D=this,H,K=0,C,L,E=D.settings,B,q,A,G,r,o,m;i.each(D.stateControls,function(n){z.setActive(n,u.queryCommandState(D.controls[n][1]))});var x=function(t,n){var p,t,s=n;if(typeof(n)=="string"){s=function(v){return v.nodeName==n}}for(p=0;p0){L.mark(p)}})}if(L=z.get("formatselect")){H=w(u.dom.isBlock);if(H){L.select(H.nodeName.toLowerCase())}}l(function(s){var p;if(s.nodeName==="SPAN"){if(!B&&s.className){B=s.className}}p=u.dom.is(s,E.theme_advanced_font_selector);if(p||j(u.settings)){if(!q&&s.style.fontSize){q=s.style.fontSize}if(!A&&s.style.fontFamily){A=s.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}if(!G&&s.style.color){G=s.style.color}if(!r&&s.style.backgroundColor){r=s.style.backgroundColor}}return false});if(L=z.get("fontselect")){L.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==A})}if(L=z.get("fontsizeselect")){if(E.theme_advanced_runtime_fontsize&&!q&&!B){q=u.dom.getStyle(I,"fontSize",true)}L.select(function(n){if(n.fontSize&&n.fontSize===q){return true}if(n["class"]&&n["class"]===B){return true}})}if(E.theme_advanced_show_current_color){function F(p,n){if(L=z.get(p)){if(!n){n=L.settings.default_color}if(n!==L.value){L.displayColor(n)}}}F("forecolor",G);F("backcolor",r)}if(E.theme_advanced_show_current_color){function F(p,n){if(L=z.get(p)){if(!n){n=L.settings.default_color}if(n!==L.value){L.displayColor(n)}}}F("forecolor",G);F("backcolor",r)}if(E.theme_advanced_path&&E.theme_advanced_statusbar_location){H=k.get(u.id+"_path")||k.add(u.id+"_path_row","span",{id:u.id+"_path"});if(D.statusKeyboardNavigation){D.statusKeyboardNavigation.destroy();D.statusKeyboardNavigation=null}k.setHTML(H,"");w(function(M){var p=M.nodeName.toLowerCase(),s,v,t="";if(M.nodeType!=1||p==="br"||M.getAttribute("data-mce-bogus")||k.hasClass(M,"mceItemHidden")||k.hasClass(M,"mceItemRemoved")){return}if(i.isIE&&M.scopeName!=="HTML"&&M.scopeName){p=M.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(C=k.getAttrib(M,"src")){t+="src: "+C+" "}break;case"a":if(C=k.getAttrib(M,"name")){t+="name: "+C+" ";p+="#"+C}if(C=k.getAttrib(M,"href")){t+="href: "+C+" "}break;case"font":if(C=k.getAttrib(M,"face")){t+="font: "+C+" "}if(C=k.getAttrib(M,"size")){t+="size: "+C+" "}if(C=k.getAttrib(M,"color")){t+="color: "+C+" "}break;case"span":if(C=k.getAttrib(M,"style")){t+="style: "+C+" "}break}if(C=k.getAttrib(M,"id")){t+="id: "+C+" "}if(C=M.className){C=C.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g,"");if(C){t+="class: "+C+" ";if(u.dom.isBlock(M)||p=="img"||p=="span"){p+="."+C}}}p=p.replace(/(html:)/g,"");p={name:p,node:M,title:t};D.onResolveName.dispatch(D,p);t=p.title;p=p.name;v=k.create("a",{href:"javascript:;",role:"button",onmousedown:"return false;",title:t,"class":"mcePath_"+(K++)},p);if(H.hasChildNodes()){H.insertBefore(k.create("span",{"aria-hidden":"true"},"\u00a0\u00bb "),H.firstChild);H.insertBefore(v,H.firstChild)}else{H.appendChild(v)}},u.getBody());if(k.select("a",H).length>0){D.statusKeyboardNavigation=new i.ui.KeyboardNavigation({root:u.id+"_path_row",items:k.select("a",H),excludeFromTabOrder:true,onCancel:function(){u.focus()}},k)}}},_sel:function(l){this.editor.execCommand("mceSelectNodeDepth",false,l)},_mceInsertAnchor:function(n,m){var l=this.editor;l.windowManager.open({url:this.url+"/anchor.htm",width:320+parseInt(l.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(l.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var l=this.editor;l.windowManager.open({url:this.url+"/charmap.htm",width:550+parseInt(l.getLang("advanced.charmap_delta_width",0)),height:265+parseInt(l.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var l=this.editor;l.windowManager.open({url:this.url+"/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceShortcuts:function(){var l=this.editor;l.windowManager.open({url:this.url+"/shortcuts.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(n,m){var l=this.editor;m=m||{};l.windowManager.open({url:this.url+"/color_picker.htm",width:375+parseInt(l.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(l.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:m.color,func:m.func,theme_url:this.url})},_mceCodeEditor:function(m,n){var l=this.editor;l.windowManager.open({url:this.url+"/source_editor.htm",width:parseInt(l.getParam("theme_advanced_source_editor_width",720)),height:parseInt(l.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(m,n){var l=this.editor;if(l.dom.getAttrib(l.selection.getNode(),"class","").indexOf("mceItem")!=-1){return}l.windowManager.open({url:this.url+"/image.htm",width:355+parseInt(l.getLang("advanced.image_delta_width",0)),height:275+parseInt(l.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(m,n){var l=this.editor;l.windowManager.open({url:this.url+"/link.htm",width:310+parseInt(l.getLang("advanced.link_delta_width",0)),height:200+parseInt(l.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var l=this.editor;l.windowManager.confirm("advanced.newdocument",function(m){if(m){l.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var l=this;this._mceColorPicker(0,{color:l.fgColor,func:function(m){l.fgColor=m;l.editor.execCommand("ForeColor",false,m)}})},_mceBackColor:function(){var l=this;this._mceColorPicker(0,{color:l.bgColor,func:function(m){l.bgColor=m;l.editor.execCommand("HiliteColor",false,m)}})},_ufirst:function(l){return l.substring(0,1).toUpperCase()+l.substring(1)}});i.ThemeManager.add("advanced",i.themes.AdvancedTheme)}(tinymce)); \ No newline at end of file diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js index 12deb49c4..f5f49cd66 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js @@ -11,6 +11,25 @@ (function(tinymce) { var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, each = tinymce.each, Cookie = tinymce.util.Cookie, lastExtID, explode = tinymce.explode; + var applyDefaultFont = function (body, settings) { + var fontSize = settings.theme_advanced_default_font_size; + var fontFamily = settings.theme_advanced_default_font_family; + + if (fontSize) { + body.style.fontSize = fontSize; + } + + if (fontFamily) { + body.style.fontFamily = fontFamily; + } + }; + + var hasDefaultFontSizeOrFamily = function (settings) { + var fontSize = settings.theme_advanced_default_font_size; + var fontFamily = settings.theme_advanced_default_font_family; + return !!(fontSize || fontFamily); + }; + // Generates a preview for a format function getPreviewCss(ed, fmt) { var name, previewElm, dom = ed.dom, previewCss = '', parentFontSize, previewStylesName; @@ -175,7 +194,7 @@ theme_advanced_blockformats : "p,address,pre,h1,h2,h3,h4,h5,h6", theme_advanced_toolbar_align : "left", theme_advanced_statusbar_location : "bottom", - theme_advanced_fonts : "Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats", + theme_advanced_fonts : "Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats", theme_advanced_more_colors : 1, theme_advanced_row_height : 23, theme_advanced_resize_horizontal : 1, @@ -234,6 +253,8 @@ t._updateUndoStatus(ed); }); } + + applyDefaultFont(ed.getBody(), ed.settings); }); ed.onSetProgressState.add(function(ed, b, ti) { @@ -956,7 +977,7 @@ a = s.theme_advanced_toolbar_align.toLowerCase(); a = 'mce' + t._ufirst(a); - n = DOM.add(DOM.add(c, 'tr', {role: 'toolbar'}), 'td', {'class' : 'mceToolbar ' + a, "role":"toolbar"}); + n = DOM.add(DOM.add(c, 'tr', {role: 'presentation'}), 'td', {'class' : 'mceToolbar ' + a, "role":"toolbar"}); // Create toolbar and add the controls for (i=1; (v = s['theme_advanced_buttons' + i]); i++) { @@ -1079,8 +1100,8 @@ cm.setActive(c, ed.queryCommandState(t.controls[c][1])); }); - function getParent(name) { - var i, parents = ob.parents, func = name; + var getElement = function (elements, name) { + var i, elements, func = name; if (typeof(name) == 'string') { func = function(node) { @@ -1088,12 +1109,20 @@ }; } - for (i = 0; i < parents.length; i++) { - if (func(parents[i])) - return parents[i]; + for (i = 0; i < elements.length; i++) { + if (func(elements[i])) + return elements[i]; } }; + function getParent(name) { + return getElement(ob.parents, name); + }; + + function getParentIncBody(name) { + return getElement([].concat(ob.parents).concat([ed.getBody()]), name); + }; + cm.setActive('visualaid', ed.hasVisual); t._updateUndoStatus(ed); cm.setDisabled('outdent', !ed.queryCommandState('Outdent')); @@ -1142,13 +1171,16 @@ } // Find out current fontSize, fontFamily and fontClass - getParent(function(n) { + getParentIncBody(function(n) { + var matchesSelector; + if (n.nodeName === 'SPAN') { if (!cl && n.className) cl = n.className; } - if (ed.dom.is(n, s.theme_advanced_font_selector)) { + matchesSelector = ed.dom.is(n, s.theme_advanced_font_selector); + if (matchesSelector || hasDefaultFontSizeOrFamily(ed.settings)) { if (!fz && n.style.fontSize) fz = n.style.fontSize; diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js index 4bfb8f6b2..dd5e366fa 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js @@ -73,6 +73,6 @@ function resizeInputs() { if (el) { el.style.width = (vp.w - 20) + 'px'; - el.style.height = (vp.h - 70) + 'px'; + el.style.height = (vp.h - 65) + 'px'; } } diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css index 2fd94a1f9..757e09024 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css +++ b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css @@ -45,6 +45,7 @@ font[face=mceinline] {font-family:inherit !important} .mceItemRealMedia {background-image:url(../../img/realmedia.gif)} .mceItemVideo {background-image:url(../../img/video.gif)} .mceItemAudio {background-image:url(../../img/video.gif)} +.mceItemObject {background-image:url(../../img/video.gif)} .mceItemEmbeddedAudio {background-image:url(../../img/video.gif)} .mceItemIframe {background-image:url(../../img/iframe.gif)} .mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../../img/pagebreak.gif) no-repeat center top;} diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css index 93e2f596c..879786fc1 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css +++ b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css @@ -116,4 +116,3 @@ h3 {font-size:14px;} #colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;} #colorpicker #colornamecontainer {margin-top:5px;} #colorpicker #picker_panel fieldset {margin:auto;width:325px;} -#prev {margin:0; border:1px solid #000; width:428px; height:150px; overflow:auto;} diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialogTinyBpmn.css b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialogTinyBpmn.css index d8f579c06..dedaeeb3c 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialogTinyBpmn.css +++ b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialogTinyBpmn.css @@ -140,7 +140,7 @@ td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #A /* Panels */ .panel_wrapper div.panel {display:none;} -.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;} +.panel_wrapper div.current {display:block; width:100%; height:220px; overflow:visible;} .panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;} /* Columns */ diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css index 713d1a01e..6d9fc8dd6 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +++ b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css @@ -104,4 +104,3 @@ h3 {font-size:14px;} #colorpicker #namedcolors {width:150px;} #colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;} #colorpicker #colornamecontainer {margin-top:5px;} -#prev {margin:0; border:1px solid #000; width:428px; height:150px; overflow:auto;} diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css index e68166280..a1a8f9bd3 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css +++ b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css @@ -1,12 +1,12 @@ body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;} body {background:#FFF;} body.mceForceColors {background:#FFF; color:#000;} -h1 {font-size: 1em} -h2 {font-size: 1em} -h3 {font-size: 1em} +h1 {font-size: 2em} +h2 {font-size: 1.5em} +h3 {font-size: 1.17em} h4 {font-size: 1em} -h5 {font-size: 3em} -h6 {font-size: 7em} +h5 {font-size: .83em} +h6 {font-size: .75em} .mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;} a.mceItemAnchor {display:inline-block; width:11px !important; height:11px !important; background:url(../default/img/items.gif) no-repeat 0 0;} span.mceItemNbsp {background: #DDD} diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css index 93d06a7be..a54db98df 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +++ b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css @@ -116,4 +116,3 @@ h3 {font-size:14px;} #colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;} #colorpicker #colornamecontainer {margin-top:5px;} #colorpicker #picker_panel fieldset {margin:auto;width:325px;} -#prev {margin:0; border:1px solid #000; width:428px; height:150px; overflow:auto;} diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css index 6f63fd352..a31022371 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +++ b/gulliver/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css @@ -1,7 +1,7 @@ /* Reset */ .o2k7Skin table, .o2k7Skin tbody, .o2k7Skin a, .o2k7Skin img, .o2k7Skin tr, .o2k7Skin div, .o2k7Skin td, .o2k7Skin iframe, .o2k7Skin span, .o2k7Skin *, .o2k7Skin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left} .o2k7Skin a:hover, .o2k7Skin a:link, .o2k7Skin a:visited, .o2k7Skin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000} -.o2k7Skin table td {vertical-align:top; background-color: white;} +.o2k7Skin table td {vertical-align:middle} /* Containers */ .o2k7Skin table {background:transparent} @@ -15,7 +15,6 @@ /* Layout */ .o2k7Skin table.mceLayout {border:0; border-left:1px solid #ABC6DD; border-right:1px solid #ABC6DD} -.o2k7Skin table.mceLayout tr.mceLast {height:1px !important} .o2k7Skin table.mceLayout tr.mceFirst td {border-top:1px solid #ABC6DD} .o2k7Skin table.mceLayout tr.mceLast td {border-bottom:1px solid #ABC6DD} .o2k7Skin table.mceToolbar, .o2k7Skin tr.mceFirst .mceToolbar tr td, .o2k7Skin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0} @@ -221,8 +220,3 @@ .o2k7Skin span.mce_restoredraft {background-position:-20px -40px} .o2k7Skin span.mce_spellchecker {background-position:-540px -20px} .o2k7Skin span.mce_visualblocks {background-position: -40px -40px} - - -a.mce_pmSimpleUploader, a.mce_pmVariablePicker, a.mce_pmGrids { border: 1px solid #BBBBBB; border-width: 1px 0 1px 0; background: #EEEEEE !important;} -a.mce_pmSimpleUploader:hover, a.mce_pmVariablePicker:hover, a.mce_pmGrids:hover {background: #FFDB6F !important;} -a.mce_pmSimpleUploader img, a.mce_pmVariablePicker img, a.mce_pmGrids img {margin: 0.25em 0 0 0.25em !important; width: 14px !important; height: 14px !important;} diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/tiny_mce.js b/gulliver/js/tinymce/jscripts/tiny_mce/tiny_mce.js index 60760a741..37f4d2f12 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/tiny_mce.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/tiny_mce.js @@ -1,22 +1 @@ -(function(e){ - var a=/^\s*|\s*$/g,b,d="B".replace(/A(.)|B/,"$1")==="$1"; - var c={majorVersion:"3",minorVersion:"5.7",releaseDate:"2012-09-20",_init:function(){ - var s=this,q=document,o=navigator,g=o.userAgent,m,f,l,k,j,r; - s.isOpera=e.opera&&opera.buildNumber; - s.isWebKit=/WebKit/.test(g); - s.isIE=!s.isWebKit&&!s.isOpera&&(/MSIE/gi).test(g)&&(/Explorer/gi).test(o.appName); - s.isIE6=s.isIE&&/MSIE [56]/.test(g); - s.isIE7=s.isIE&&/MSIE [7]/.test(g); - s.isIE8=s.isIE&&/MSIE [8]/.test(g); - s.isIE9=s.isIE&&/MSIE [9]/.test(g); - s.isGecko=!s.isWebKit&&/Gecko/.test(g); - s.isMac=g.indexOf("Mac")!=-1; - s.isAir=/adobeair/i.test(g); - s.isIDevice=/(iPad|iPhone)/.test(g); - s.isIOS5=s.isIDevice&&g.match(/AppleWebKit\/(\d*)/)[1]>=534; - if(e.tinyMCEPreInit){ - s.suffix=tinyMCEPreInit.suffix; - s.baseURL=tinyMCEPreInit.base; - s.query=tinyMCEPreInit.query; - return - }s.suffix="";f=q.getElementsByTagName("base");for(m=0;m0?b:[f.scope]);if(e===false){break}}a.inDispatch=false;return e}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,i,d,c,h;e=tinymce.trim(e);g=f.settings=g||{};if(/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^[\w\-]*:?\/\//.test(e)){h=g.base_uri?g.base_uri.path:new tinymce.util.URI(location.href).directory;e=((g.base_uri&&g.base_uri.protocol)||"http")+"://mce_host"+f.toAbsPath(h,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});c=g.base_uri;if(c){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host==="mce_host"){f.port=c.port}if(!f.host||f.host==="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var d=this,f;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:d});if((b.host!="mce_host"&&d.host!=b.host&&b.host)||d.port!=b.port||d.protocol!=b.protocol){return b.getURI()}var c=d.getURI(),e=b.getURI();if(c==e||(c.charAt(c.length-1)=="/"&&c.substr(0,c.length-1)==e)){return c}f=d.toRelPath(d.path,b.path);if(b.query){f+="?"+b.query}if(b.anchor){f+="#"+b.anchor}return f},toAbsolute:function(b,c){b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host&&this.protocol==b.protocol?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length=g.length||g[e]!=c[e]){f=e+1;break}}}if(f===1){return h}for(e=0,b=g.length-(f-1);e=0;c--){if(f[c].length===0||f[c]==="."){continue}if(f[c]===".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!==0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(c,e,d){var b=new Date();b.setTime(b.getTime()-1000);this.set(c,"",b,e,d)}})})();(function(){function serialize(o,quote){var i,v,t,name;quote=quote||'"';if(o==null){return"null"}t=typeof o;if(t=="string"){v="\bb\tt\nn\ff\rr\"\"''\\\\";return quote+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(a,b){if(quote==='"'&&a==="'"){return a}i=v.indexOf(b);if(i+1){return"\\"+v.charAt(i+1)}a=b.charCodeAt().toString(16);return"\\u"+"0000".substring(a.length)+a})+quote}if(t=="object"){if(o.hasOwnProperty&&Object.prototype.toString.call(o)==="[object Array]"){for(i=0,v="[";i0?",":"")+serialize(o[i],quote)}return v+"]"}v="{";for(name in o){if(o.hasOwnProperty(name)){v+=typeof o[name]!="function"?(v.length>1?","+quote:quote)+name+quote+":"+serialize(o[name],quote):""}}return v+"}"}return""+o}tinymce.util.JSON={serialize:serialize,parse:function(s){try{return eval("("+s+")")}catch(ex){}}}})();tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){if(e){e.call(f.error_scope||f.scope,h,g)}};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(a){a.VK={BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(b){return b.shiftKey||b.ctrlKey||b.altKey},metaKeyPressed:function(b){return a.isMac?b.metaKey:b.ctrlKey&&!b.altKey}}})(tinymce);tinymce.util.Quirks=function(e){var n=tinymce.VK,x=n.BACKSPACE,y=n.DELETE,q=e.dom,I=e.selection,v=e.settings,c=e.parser,u=e.serializer;function d(M,L){try{e.getDoc().execCommand(M,false,L)}catch(K){}}function C(){var K=e.getDoc().documentMode;return K?K:6}function H(K){return K.isDefaultPrevented()}function k(){function K(N){var L,P,M,O;L=I.getRng();P=q.getParent(L.startContainer,q.isBlock);if(N){P=q.getNext(P,q.isBlock)}if(P){M=P.firstChild;while(M&&M.nodeType==3&&M.nodeValue.length===0){M=M.nextSibling}if(M&&M.nodeName==="SPAN"){O=M.cloneNode(false)}}e.getDoc().execCommand(N?"ForwardDelete":"Delete",false,null);P=q.getParent(L.startContainer,q.isBlock);tinymce.each(q.select("span.Apple-style-span,font.Apple-style-span",P),function(Q){var R=I.getBookmark();if(O){q.replace(O.cloneNode(false),Q,true)}else{q.remove(Q,true)}I.moveToBookmark(R)})}e.onKeyDown.add(function(L,N){var M;M=N.keyCode==y;if(!H(N)&&(M||N.keyCode==x)&&!n.modifierPressed(N)){N.preventDefault();K(M)}});e.addCommand("Delete",function(){K()})}function J(){function K(N){var M=q.create("body");var O=N.cloneContents();M.appendChild(O);return I.serializer.serialize(M,{format:"html"})}function L(M){var O=K(M);var P=q.createRng();P.selectNode(e.getBody());var N=K(P);return O===N}e.onKeyDown.add(function(N,P){var O=P.keyCode,M;if(!H(P)&&(O==y||O==x)){M=N.selection.isCollapsed();if(M&&!q.isEmpty(N.getBody())){return}if(tinymce.isIE&&!M){return}if(!M&&!L(N.selection.getRng())){return}N.setContent("");N.selection.setCursorLocation(N.getBody(),0);N.nodeChanged()}})}function A(){e.onKeyDown.add(function(K,L){if(!H(L)&&L.keyCode==65&&n.metaKeyPressed(L)){L.preventDefault();K.execCommand("SelectAll")}})}function B(){if(!e.settings.content_editable){q.bind(e.getDoc(),"focusin",function(K){I.setRng(I.getRng())});q.bind(e.getDoc(),"mousedown",function(K){if(K.target==e.getDoc().documentElement){e.getWin().focus();I.setRng(I.getRng())}})}}function o(){e.onKeyDown.add(function(K,N){if(!H(N)&&N.keyCode===x){if(I.isCollapsed()&&I.getRng(true).startOffset===0){var M=I.getNode();var L=M.previousSibling;if(L&&L.nodeName&&L.nodeName.toLowerCase()==="hr"){q.remove(L);tinymce.dom.Event.cancel(N)}}}})}function b(){if(!Range.prototype.getClientRects){e.onMouseDown.add(function(L,M){if(!H(M)&&M.target.nodeName==="HTML"){var K=L.getBody();K.blur();setTimeout(function(){K.focus()},0)}})}}function F(){e.onClick.add(function(K,L){L=L.target;if(/^(IMG|HR)$/.test(L.nodeName)){I.getSel().setBaseAndExtent(L,0,L,1)}if(L.nodeName=="A"&&q.hasClass(L,"mceItemAnchor")){I.select(L)}K.nodeChanged()})}function E(){function L(){var N=q.getAttribs(I.getStart().cloneNode(false));return function(){var O=I.getStart();if(O!==e.getBody()){q.setAttrib(O,"style",null);tinymce.each(N,function(P){O.setAttributeNode(P.cloneNode(true))})}}}function K(){return !I.isCollapsed()&&q.getParent(I.getStart(),q.isBlock)!=q.getParent(I.getEnd(),q.isBlock)}function M(N,O){O.preventDefault();return false}e.onKeyPress.add(function(N,P){var O;if(!H(P)&&(P.keyCode==8||P.keyCode==46)&&K()){O=L();N.getDoc().execCommand("delete",false,null);O();P.preventDefault();return false}});q.bind(e.getDoc(),"cut",function(O){var N;if(!H(O)&&K()){N=L();e.onKeyUp.addToTop(M);setTimeout(function(){N();e.onKeyUp.remove(M)},0)}})}function l(){var L,K;q.bind(e.getDoc(),"selectionchange",function(){if(K){clearTimeout(K);K=0}K=window.setTimeout(function(){var M=I.getRng();if(!L||!tinymce.dom.RangeUtils.compareRanges(M,L)){e.nodeChanged();L=M}},50)})}function G(){document.body.setAttribute("role","application")}function D(){e.onKeyDown.add(function(K,M){if(!H(M)&&M.keyCode===x){if(I.isCollapsed()&&I.getRng(true).startOffset===0){var L=I.getNode().previousSibling;if(L&&L.nodeName&&L.nodeName.toLowerCase()==="table"){return tinymce.dom.Event.cancel(M)}}}})}function i(){if(C()>7){return}d("RespectVisibilityInDesign",true);e.contentStyles.push(".mceHideBrInPre pre br {display: none}");q.addClass(e.getBody(),"mceHideBrInPre");c.addNodeFilter("pre",function(K,M){var N=K.length,P,L,Q,O;while(N--){P=K[N].getAll("br");L=P.length;while(L--){Q=P[L];O=Q.prev;if(O&&O.type===3&&O.value.charAt(O.value-1)!="\n"){O.value+="\n"}else{Q.parent.insert(new tinymce.html.Node("#text",3),Q,true).value="\n"}}}});u.addNodeFilter("pre",function(K,M){var N=K.length,P,L,Q,O;while(N--){P=K[N].getAll("br");L=P.length;while(L--){Q=P[L];O=Q.prev;if(O&&O.type==3){O.value=O.value.replace(/\r?\n$/,"")}}}})}function g(){q.bind(e.getBody(),"mouseup",function(M){var L,K=I.getNode();if(K.nodeName=="IMG"){if(L=q.getStyle(K,"width")){q.setAttrib(K,"width",L.replace(/[^0-9%]+/g,""));q.setStyle(K,"width","")}if(L=q.getStyle(K,"height")){q.setAttrib(K,"height",L.replace(/[^0-9%]+/g,""));q.setStyle(K,"height","")}}})}function s(){e.onKeyDown.add(function(Q,R){var P,K,L,N,O,S,M;P=R.keyCode==y;if(!H(R)&&(P||R.keyCode==x)&&!n.modifierPressed(R)){K=I.getRng();L=K.startContainer;N=K.startOffset;M=K.collapsed;if(L.nodeType==3&&L.nodeValue.length>0&&((N===0&&!M)||(M&&N===(P?0:1)))){nonEmptyElements=Q.schema.getNonEmptyElements();R.preventDefault();O=q.create("br",{id:"__tmp"});L.parentNode.insertBefore(O,L);Q.getDoc().execCommand(P?"ForwardDelete":"Delete",false,null);L=I.getRng().startContainer;S=L.previousSibling;if(S&&S.nodeType==1&&!q.isBlock(S)&&q.isEmpty(S)&&!nonEmptyElements[S.nodeName.toLowerCase()]){q.remove(S)}q.remove("__tmp")}}})}function f(){e.onKeyDown.add(function(O,P){var M,L,Q,K,N;if(H(P)||P.keyCode!=n.BACKSPACE){return}M=I.getRng();L=M.startContainer;Q=M.startOffset;K=q.getRoot();N=L;if(!M.collapsed||Q!==0){return}while(N&&N.parentNode&&N.parentNode.firstChild==N&&N.parentNode!=K){N=N.parentNode}if(N.tagName==="BLOCKQUOTE"){O.formatter.toggle("blockquote",null,N);M=q.createRng();M.setStart(L,0);M.setEnd(L,0);I.setRng(M)}})}function m(){function K(){e._refreshContentEditable();d("StyleWithCSS",false);d("enableInlineTableEditing",false);if(!v.object_resizing){d("enableObjectResizing",false)}}if(!v.readonly){e.onBeforeExecCommand.add(K);e.onMouseDown.add(K)}}function p(){function K(L,M){tinymce.each(q.select("a"),function(P){var N=P.parentNode,O=q.getRoot();if(N.lastChild===P){while(N&&!q.isBlock(N)){if(N.parentNode.lastChild!==N||N===O){return}N=N.parentNode}q.add(N,"br",{"data-mce-bogus":1})}})}e.onExecCommand.add(function(L,M){if(M==="CreateLink"){K(L)}});e.onSetContent.add(I.onSetContent.add(K))}function z(){if(v.forced_root_block){e.onInit.add(function(){d("DefaultParagraphSeparator",v.forced_root_block)})}}function a(){function K(M,L){if(!M||!L.initial){e.execCommand("mceRepaint")}}e.onUndo.add(K);e.onRedo.add(K);e.onSetContent.add(K)}function r(){e.onKeyDown.add(function(L,M){var K;if(!H(M)&&M.keyCode==x){K=L.getDoc().selection.createRange();if(K&&K.item){M.preventDefault();L.undoManager.beforeChange();q.remove(K.item(0));L.undoManager.add()}}})}function j(){var K;if(C()>=10){K="";tinymce.each("p div h1 h2 h3 h4 h5 h6".split(" "),function(L,M){K+=(M>0?",":"")+L+":empty"});e.contentStyles.push(K+"{padding-right: 1px !important}")}}function h(){var M,L,ac,K,X,aa,Y,ab,N,O,Z,V,U,W=document,S=e.getDoc();if(!v.object_resizing||v.webkit_fake_resize===false){return}d("enableObjectResizing",false);Z={n:[0.5,0,0,-1],e:[1,0.5,1,0],s:[0.5,1,0,1],w:[0,0.5,-1,0],nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};function Q(ag){var af,ae;af=ag.screenX-aa;ae=ag.screenY-Y;V=af*X[2]+ab;U=ae*X[3]+N;V=V<5?5:V;U=U<5?5:U;if(n.modifierPressed(ag)||(ac.nodeName=="IMG"&&X[2]*X[3]!==0)){V=Math.round(U/O);U=Math.round(V*O)}q.setStyles(K,{width:V,height:U});if(X[2]<0&&K.clientWidth<=V){q.setStyle(K,"left",M+(ab-V))}if(X[3]<0&&K.clientHeight<=U){q.setStyle(K,"top",L+(N-U))}}function ad(){function ae(af,ag){if(ag){if(ac.style[af]||!e.schema.isValid(ac.nodeName.toLowerCase(),af)){q.setStyle(ac,af,ag)}else{q.setAttrib(ac,af,ag)}}}ae("width",V);ae("height",U);q.unbind(S,"mousemove",Q);q.unbind(S,"mouseup",ad);if(W!=S){q.unbind(W,"mousemove",Q);q.unbind(W,"mouseup",ad)}q.remove(K);P(ac)}function P(ah){var af,ag,ae;R();af=q.getPos(ah);M=af.x;L=af.y;ag=ah.offsetWidth;ae=ah.offsetHeight;if(ac!=ah){ac=ah;V=U=0}tinymce.each(Z,function(ak,ai){var aj;aj=q.get("mceResizeHandle"+ai);if(!aj){aj=q.add(S.documentElement,"div",{id:"mceResizeHandle"+ai,"class":"mceResizeHandle",style:"cursor:"+ai+"-resize; margin:0; padding:0"});q.bind(aj,"mousedown",function(al){al.preventDefault();ad();aa=al.screenX;Y=al.screenY;ab=ac.clientWidth;N=ac.clientHeight;O=N/ab;X=ak;K=ac.cloneNode(true);q.addClass(K,"mceClonedResizable");q.setStyles(K,{left:M,top:L,margin:0});S.documentElement.appendChild(K);q.bind(S,"mousemove",Q);q.bind(S,"mouseup",ad);if(W!=S){q.bind(W,"mousemove",Q);q.bind(W,"mouseup",ad)}})}else{q.show(aj)}q.setStyles(aj,{left:(ag*ak[0]+M)-(aj.offsetWidth/2),top:(ae*ak[1]+L)-(aj.offsetHeight/2)})});if(!tinymce.isOpera&&ac.nodeName=="IMG"){ac.setAttribute("data-mce-selected","1")}}function R(){if(ac){ac.removeAttribute("data-mce-selected")}for(var ae in Z){q.hide("mceResizeHandle"+ae)}}e.contentStyles.push(".mceResizeHandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}.mceResizeHandle:hover {background: #000}img[data-mce-selected] {outline: 1px solid black}img.mceClonedResizable, table.mceClonedResizable {position: absolute;outline: 1px dashed black;opacity: .5;z-index: 10000}");function T(){var ae=q.getParent(I.getNode(),"table,img");tinymce.each(q.select("img[data-mce-selected]"),function(af){af.removeAttribute("data-mce-selected")});if(ae){P(ae)}else{R()}}e.onNodeChange.add(T);q.bind(S,"selectionchange",T);e.serializer.addAttributeFilter("data-mce-selected",function(ae,af){var ag=ae.length;while(ag--){ae[ag].attr(af,null)}})}function t(){if(C()<9){c.addNodeFilter("noscript",function(K){var L=K.length,M,N;while(L--){M=K[L];N=M.firstChild;if(N){M.attr("data-mce-innertext",N.value)}}});u.addNodeFilter("noscript",function(K){var L=K.length,M,O,N;while(L--){M=K[L];O=K[L].firstChild;if(O){O.value=tinymce.html.Entities.decode(O.value)}else{N=M.attributes.map["data-mce-innertext"];if(N){M.attr("data-mce-innertext",null);O=new tinymce.html.Node("#text",3);O.value=N;O.raw=true;M.append(O)}}}})}}D();f();J();if(tinymce.isWebKit){s();k();B();F();z();if(tinymce.isIDevice){l()}else{h();A()}}if(tinymce.isIE){o();G();i();g();r();j();t()}if(tinymce.isGecko){o();b();E();m();p();a()}if(tinymce.isOpera){h()}};(function(j){var a,g,d,k=/[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,b=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=/[<>&\"\']/g,c=/&(#x|#)?([\w]+);/g,i={128:"\u20AC",130:"\u201A",131:"\u0192",132:"\u201E",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02C6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017D",145:"\u2018",146:"\u2019",147:"\u201C",148:"\u201D",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02DC",153:"\u2122",154:"\u0161",155:"\u203A",156:"\u0153",158:"\u017E",159:"\u0178"};g={'"':""","'":"'","<":"<",">":">","&":"&"};d={"<":"<",">":">","&":"&",""":'"',"'":"'"};function h(l){var m;m=document.createElement("div");m.innerHTML=l;return m.textContent||m.innerText||l}function e(m,p){var n,o,l,q={};if(m){m=m.split(",");p=p||10;for(n=0;n1){return"&#"+(((n.charCodeAt(0)-55296)*1024)+(n.charCodeAt(1)-56320)+65536)+";"}return g[n]||"&#"+n.charCodeAt(0)+";"})},encodeNamed:function(n,l,m){m=m||a;return n.replace(l?k:b,function(o){return g[o]||m[o]||o})},getEncodeFunc:function(l,o){var p=j.html.Entities;o=e(o)||a;function m(r,q){return r.replace(q?k:b,function(s){return g[s]||o[s]||"&#"+s.charCodeAt(0)+";"||s})}function n(r,q){return p.encodeNamed(r,q,o)}l=j.makeMap(l.replace(/\+/g,","));if(l.named&&l.numeric){return m}if(l.named){if(o){return n}return p.encodeNamed}if(l.numeric){return p.encodeNumeric}return p.encodeRaw},decode:function(l){return l.replace(c,function(n,m,o){if(m){o=parseInt(o,m.length===2?16:10);if(o>65535){o-=65536;return String.fromCharCode(55296+(o>>10),56320+(o&1023))}else{return i[o]||String.fromCharCode(o)}}return d[n]||a[n]||h(n)})}}})(tinymce);tinymce.html.Styles=function(d,f){var k=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,h=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,b=/\s*([^:]+):\s*([^;]+);?/g,l=/\s+$/,m=/rgb/,e,g,a={},j;d=d||{};j="\\\" \\' \\; \\: ; : \uFEFF".split(" ");for(g=0;g1?r:"0"+r}return"#"+o(q)+o(p)+o(i)}return{toHex:function(i){return i.replace(k,c)},parse:function(s){var z={},q,n,x,r,v=d.url_converter,y=d.url_converter_scope||this;function p(D,G){var F,C,B,E;F=z[D+"-top"+G];if(!F){return}C=z[D+"-right"+G];if(F!=C){return}B=z[D+"-bottom"+G];if(C!=B){return}E=z[D+"-left"+G];if(B!=E){return}z[D+G]=E;delete z[D+"-top"+G];delete z[D+"-right"+G];delete z[D+"-bottom"+G];delete z[D+"-left"+G]}function u(C){var D=z[C],B;if(!D||D.indexOf(" ")<0){return}D=D.split(" ");B=D.length;while(B--){if(D[B]!==D[0]){return false}}z[C]=D[0];return true}function A(D,C,B,E){if(!u(C)){return}if(!u(B)){return}if(!u(E)){return}z[D]=z[C]+" "+z[B]+" "+z[E];delete z[C];delete z[B];delete z[E]}function t(B){r=true;return a[B]}function i(C,B){if(r){C=C.replace(/\uFEFF[0-9]/g,function(D){return a[D]})}if(!B){C=C.replace(/\\([\'\";:])/g,"$1")}return C}function o(C,B,F,E,G,D){G=G||D;if(G){G=i(G);return"'"+G.replace(/\'/g,"\\'")+"'"}B=i(B||F||E);if(v){B=v.call(y,B,"style")}return"url('"+B.replace(/\'/g,"\\'")+"')"}if(s){s=s.replace(/\\[\"\';:\uFEFF]/g,t).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(B){return B.replace(/[;:]/g,t)});while(q=b.exec(s)){n=q[1].replace(l,"").toLowerCase();x=q[2].replace(l,"");if(n&&x.length>0){if(n==="font-weight"&&x==="700"){x="bold"}else{if(n==="color"||n==="background-color"){x=x.toLowerCase()}}x=x.replace(k,c);x=x.replace(h,o);z[n]=r?i(x,true):x}b.lastIndex=q.index+q[0].length}p("border","");p("border","-width");p("border","-color");p("border","-style");p("padding","");p("margin","");A("border","border-width","border-style","border-color");if(z.border==="medium none"){delete z.border}}return z},serialize:function(p,r){var o="",n,q;function i(t){var x,u,s,v;x=f.styles[t];if(x){for(u=0,s=x.length;u0){o+=(o.length>0?" ":"")+t+": "+v+";"}}}}if(r&&f&&f.styles){i("*");i(r)}else{for(n in p){q=p[n];if(q!==e&&q.length>0){o+=(o.length>0?" ":"")+n+": "+q+";"}}}return o}}};(function(f){var a={},e=f.makeMap,g=f.each;function d(j,i){return j.split(i||",")}function h(m,l){var j,k={};function i(n){return n.replace(/[A-Z]+/g,function(o){return i(m[o])})}for(j in m){if(m.hasOwnProperty(j)){m[j]=i(m[j])}}i(l).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,function(q,o,n,p){n=d(n,"|");k[o]={attributes:e(n),attributesOrder:n,children:e(p,"|",{"#comment":{}})}});return k}function b(){var i=a.html5;if(!i){i=a.html5=h({A:"id|accesskey|class|dir|draggable|item|hidden|itemprop|role|spellcheck|style|subject|title|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"#|a|abbr|area|audio|b|bdo|br|button|canvas|cite|code|command|datalist|del|dfn|em|embed|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|meta|meter|noscript|object|output|progress|q|ruby|samp|script|select|small|span|strong|sub|sup|svg|textarea|time|var|video|wbr",C:"#|a|abbr|area|address|article|aside|audio|b|bdo|blockquote|br|button|canvas|cite|code|command|datalist|del|details|dfn|dialog|div|dl|em|embed|fieldset|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|menu|meta|meter|nav|noscript|ol|object|output|p|pre|progress|q|ruby|samp|script|section|select|small|span|strong|style|sub|sup|svg|table|textarea|time|ul|var|video"},"html[A|manifest][body|head]head[A][base|command|link|meta|noscript|script|style|title]title[A][#]base[A|href|target][]link[A|href|rel|media|type|sizes][]meta[A|http-equiv|name|content|charset][]style[A|type|media|scoped][#]script[A|charset|type|src|defer|async][#]noscript[A][C]body[A][C]section[A][C]nav[A][C]article[A][C]aside[A][C]h1[A][B]h2[A][B]h3[A][B]h4[A][B]h5[A][B]h6[A][B]hgroup[A][h1|h2|h3|h4|h5|h6]header[A][C]footer[A][C]address[A][C]p[A][B]br[A][]pre[A][B]dialog[A][dd|dt]blockquote[A|cite][C]ol[A|start|reversed][li]ul[A][li]li[A|value][C]dl[A][dd|dt]dt[A][B]dd[A][C]a[A|href|target|ping|rel|media|type][B]em[A][B]strong[A][B]small[A][B]cite[A][B]q[A|cite][B]dfn[A][B]abbr[A][B]code[A][B]var[A][B]samp[A][B]kbd[A][B]sub[A][B]sup[A][B]i[A][B]b[A][B]mark[A][B]progress[A|value|max][B]meter[A|value|min|max|low|high|optimum][B]time[A|datetime][B]ruby[A][B|rt|rp]rt[A][B]rp[A][B]bdo[A][B]span[A][B]ins[A|cite|datetime][B]del[A|cite|datetime][B]figure[A][C|legend|figcaption]figcaption[A][C]img[A|alt|src|height|width|usemap|ismap][]iframe[A|name|src|height|width|sandbox|seamless][]embed[A|src|height|width|type][]object[A|data|type|height|width|usemap|name|form|classid][param]param[A|name|value][]details[A|open][C|legend]command[A|type|label|icon|disabled|checked|radiogroup][]menu[A|type|label][C|li]legend[A][C|B]div[A][C]source[A|src|type|media][]audio[A|src|autobuffer|autoplay|loop|controls][source]video[A|src|autobuffer|autoplay|loop|controls|width|height|poster][source]hr[A][]form[A|accept-charset|action|autocomplete|enctype|method|name|novalidate|target][C]fieldset[A|disabled|form|name][C|legend]label[A|form|for][B]input[A|type|accept|alt|autocomplete|autofocus|checked|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|height|list|max|maxlength|min|multiple|pattern|placeholder|readonly|required|size|src|step|width|files|value|name][]button[A|autofocus|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|name|value|type][B]select[A|autofocus|disabled|form|multiple|name|size][option|optgroup]datalist[A][B|option]optgroup[A|disabled|label][option]option[A|disabled|selected|label|value][]textarea[A|autofocus|disabled|form|maxlength|name|placeholder|readonly|required|rows|cols|wrap][]keygen[A|autofocus|challenge|disabled|form|keytype|name][]output[A|for|form|name][B]canvas[A|width|height][]map[A|name][B|C]area[A|shape|coords|href|alt|target|media|rel|ping|type][]mathml[A][]svg[A][]table[A|border][caption|colgroup|thead|tfoot|tbody|tr]caption[A][C]colgroup[A|span][col]col[A|span][]thead[A][tr]tfoot[A][tr]tbody[A][tr]tr[A][th|td]th[A|headers|rowspan|colspan|scope][B]td[A|headers|rowspan|colspan][C]wbr[A][]")}return i}function c(){var i=a.html4;if(!i){i=a.html4=h({Z:"H|K|N|O|P",Y:"X|form|R|Q",ZG:"E|span|width|align|char|charoff|valign",X:"p|T|div|U|W|isindex|fieldset|table",ZF:"E|align|char|charoff|valign",W:"pre|hr|blockquote|address|center|noframes",ZE:"abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height",ZD:"[E][S]",U:"ul|ol|dl|menu|dir",ZC:"p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",T:"h1|h2|h3|h4|h5|h6",ZB:"X|S|Q",S:"R|P",ZA:"a|G|J|M|O|P",R:"a|H|K|N|O",Q:"noscript|P",P:"ins|del|script",O:"input|select|textarea|label|button",N:"M|L",M:"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",L:"sub|sup",K:"J|I",J:"tt|i|b|u|s|strike",I:"big|small|font|basefont",H:"G|F",G:"br|span|bdo",F:"object|applet|img|map|iframe",E:"A|B|C",D:"accesskey|tabindex|onfocus|onblur",C:"onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"lang|xml:lang|dir",A:"id|class|style|title"},"script[id|charset|type|language|src|defer|xml:space][]style[B|id|type|media|title|xml:space][]object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]param[id|name|value|valuetype|type][]p[E|align][#|S]a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]br[A|clear][]span[E][#|S]bdo[A|C|B][#|S]applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]h1[E|align][#|S]img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]map[B|C|A|name][X|form|Q|area]h2[E|align][#|S]iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]h3[E|align][#|S]tt[E][#|S]i[E][#|S]b[E][#|S]u[E][#|S]s[E][#|S]strike[E][#|S]big[E][#|S]small[E][#|S]font[A|B|size|color|face][#|S]basefont[id|size|color|face][]em[E][#|S]strong[E][#|S]dfn[E][#|S]code[E][#|S]q[E|cite][#|S]samp[E][#|S]kbd[E][#|S]var[E][#|S]cite[E][#|S]abbr[E][#|S]acronym[E][#|S]sub[E][#|S]sup[E][#|S]input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]optgroup[E|disabled|label][option]option[E|selected|disabled|label|value][]textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]label[E|for|accesskey|onfocus|onblur][#|S]button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[E|align][#|S]ins[E|cite|datetime][#|Y]h5[E|align][#|S]del[E|cite|datetime][#|Y]h6[E|align][#|S]div[E|align][#|Y]ul[E|type|compact][li]li[E|type|value][#|Y]ol[E|type|compact|start][li]dl[E|compact][dt|dd]dt[E][#|S]dd[E][#|Y]menu[E|compact][li]dir[E|compact][li]pre[E|width|xml:space][#|ZA]hr[E|align|noshade|size|width][]blockquote[E|cite][#|Y]address[E][#|S|p]center[E][#|Y]noframes[E][#|Y]isindex[A|B|prompt][]fieldset[E][#|legend|Y]legend[E|accesskey|align][#|S]table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]caption[E|align][#|S]col[ZG][]colgroup[ZG][col]thead[ZF][tr]tr[ZF|bgcolor][th|td]th[E|ZE][#|Y]form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]noscript[E][#|Y]td[E|ZE][#|Y]tfoot[ZF][tr]tbody[ZF][tr]area[E|D|shape|coords|href|nohref|alt|target][]base[id|href|target][]body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]")}return i}f.html.Schema=function(A){var u=this,s={},k={},j=[],D,y;var o,q,z,r,v,n,p={};function m(F,E,H){var G=A[F];if(!G){G=a[F];if(!G){G=e(E," ",e(E.toUpperCase()," "));G=f.extend(G,H);a[F]=G}}else{G=e(G,",",e(G.toUpperCase()," "))}return G}A=A||{};y=A.schema=="html5"?b():c();if(A.verify_html===false){A.valid_elements="*[*]"}if(A.valid_styles){D={};g(A.valid_styles,function(F,E){D[E]=f.explode(F)})}o=m("whitespace_elements","pre script noscript style textarea");q=m("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr");z=m("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr");r=m("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls");n=m("non_empty_elements","td th iframe video audio object",z);textBlockElementsMap=m("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure");v=m("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup",textBlockElementsMap);function i(E){return new RegExp("^"+E.replace(/([?+*])/g,".$1")+"$")}function C(L){var K,G,Z,V,aa,F,I,U,X,Q,Y,ac,O,J,W,E,S,H,ab,ad,P,T,N=/^([#+\-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,R=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,M=/[*?+]/;if(L){L=d(L);if(s["@"]){S=s["@"].attributes;H=s["@"].attributesOrder}for(K=0,G=L.length;K=0){for(U=A.length-1;U>=V;U--){T=A[U];if(T.valid){n.end(T.name)}}A.length=V}}function p(U,T,Y,X,W){var Z,V;T=T.toLowerCase();Y=T in H?T:j(Y||X||W||"");if(v&&!z&&T.indexOf("data-mce-")!==0){Z=P[T];if(!Z&&F){V=F.length;while(V--){Z=F[V];if(Z.pattern.test(T)){break}}if(V===-1){Z=null}}if(!Z){return}if(Z.validValues&&!(Y in Z.validValues)){return}}N.map[T]=Y;N.push({name:T,value:Y})}l=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g");D=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g;K={script:/<\/script[^>]*>/gi,style:/<\/style[^>]*>/gi,noscript:/<\/noscript[^>]*>/gi};M=e.getShortEndedElements();J=c.self_closing_elements||e.getSelfClosingElements();H=e.getBoolAttrs();v=c.validate;s=c.remove_internals;y=c.fix_self_closing;q=a.isIE;o=/^:/;while(g=l.exec(E)){if(G0&&A[A.length-1].name===I){u(I)}if(!v||(m=e.getElementRule(I))){k=true;if(v){P=m.attributes;F=m.attributePatterns}if(R=g[8]){z=R.indexOf("data-mce-type")!==-1;if(z&&s){k=false}N=[];N.map={};R.replace(D,p)}else{N=[];N.map={}}if(v&&!z){S=m.attributesRequired;L=m.attributesDefault;f=m.attributesForced;if(f){Q=f.length;while(Q--){t=f[Q];r=t.name;h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}if(L){Q=L.length;while(Q--){t=L[Q];r=t.name;if(!(r in N.map)){h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}}if(S){Q=S.length;while(Q--){if(S[Q] in N.map){break}}if(Q===-1){k=false}}if(N.map["data-mce-bogus"]){k=false}}if(k){n.start(I,N,O)}}else{k=false}if(B=K[I]){B.lastIndex=G=g.index+g[0].length;if(g=B.exec(E)){if(k){C=E.substr(G,g.index-G)}G=g.index+g[0].length}else{C=E.substr(G);G=E.length}if(k&&C.length>0){n.text(C,true)}if(k){n.end(I)}l.lastIndex=G;continue}if(!O){if(!R||R.indexOf("/")!=R.length-1){A.push({name:I,valid:k})}else{if(k){n.end(I)}}}}else{if(I=g[1]){n.comment(I)}else{if(I=g[2]){n.cdata(I)}else{if(I=g[3]){n.doctype(I)}else{if(I=g[4]){n.pi(I,g[5])}}}}}}G=g.index+g[0].length}if(G=0;Q--){I=A[Q];if(I.valid){n.end(I.name)}}}}})(tinymce);(function(d){var c=/^[ \t\r\n]*$/,e={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};function a(k,l,j){var i,h,f=j?"lastChild":"firstChild",g=j?"prev":"next";if(k[f]){return k[f]}if(k!==l){i=k[g];if(i){return i}for(h=k.parent;h&&h!==l;h=h.parent){i=h[g];if(i){return i}}}}function b(f,g){this.name=f;this.type=g;if(g===1){this.attributes=[];this.attributes.map={}}}d.extend(b.prototype,{replace:function(g){var f=this;if(g.parent){g.remove()}f.insert(g,f);f.remove();return f},attr:function(h,l){var f=this,g,j,k;if(typeof h!=="string"){for(j in h){f.attr(j,h[j])}return f}if(g=f.attributes){if(l!==k){if(l===null){if(h in g.map){delete g.map[h];j=g.length;while(j--){if(g[j].name===h){g=g.splice(j,1);return f}}}return f}if(h in g.map){j=g.length;while(j--){if(g[j].name===h){g[j].value=l;break}}}else{g.push({name:h,value:l})}g.map[h]=l;return f}else{return g.map[h]}}},clone:function(){var g=this,n=new b(g.name,g.type),h,f,m,j,k;if(m=g.attributes){k=[];k.map={};for(h=0,f=m.length;h1){x.reverse();A=o=f.filterNode(x[0].clone());for(u=0;u0){Q.value=l;Q=Q.prev}else{O=Q.prev;Q.remove();Q=O}}}function H(O){var P,l={};for(P in O){if(P!=="li"&&P!="p"){l[P]=O[P]}}return l}n=new b.html.SaxParser({validate:z,self_closing_elements:H(h.getSelfClosingElements()),cdata:function(l){B.append(K("#cdata",4)).value=l},text:function(P,l){var O;if(!L){P=P.replace(k," ");if(B.lastChild&&o[B.lastChild.name]){P=P.replace(E,"")}}if(P.length!==0){O=K("#text",3);O.raw=!!l;B.append(O).value=P}},comment:function(l){B.append(K("#comment",8)).value=l},pi:function(l,O){B.append(K(l,7)).value=O;I(B)},doctype:function(O){var l;l=B.append(K("#doctype",10));l.value=O;I(B)},start:function(l,W,P){var U,R,Q,O,S,X,V,T;Q=z?h.getElementRule(l):{};if(Q){U=K(Q.outputName||l,1);U.attributes=W;U.shortEnded=P;B.append(U);T=p[B.name];if(T&&p[U.name]&&!T[U.name]){M.push(U)}R=d.length;while(R--){S=d[R].name;if(S in W.map){F=c[S];if(F){F.push(U)}else{c[S]=[U]}}}if(o[l]){I(U)}if(!P){B=U}if(!L&&s[l]){L=true}}},end:function(l){var S,P,R,O,Q;P=z?h.getElementRule(l):{};if(P){if(o[l]){if(!L){S=B.firstChild;if(S&&S.type===3){R=S.value.replace(E,"");if(R.length>0){S.value=R;S=S.next}else{O=S.next;S.remove();S=O}while(S&&S.type===3){R=S.value;O=S.next;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}S=B.lastChild;if(S&&S.type===3){R=S.value.replace(t,"");if(R.length>0){S.value=R;S=S.prev}else{O=S.prev;S.remove();S=O}while(S&&S.type===3){R=S.value;O=S.prev;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}}}if(L&&s[l]){L=false}if(P.removeEmpty||P.paddEmpty){if(B.isEmpty(u)){if(P.paddEmpty){B.empty().append(new a("#text","3")).value="\u00a0"}else{if(!B.attributes.map.name&&!B.attributes.map.id){Q=B.parent;B.empty().remove();B=Q;return}}}}B=B.parent}}},h);J=B=new a(m.context||g.root_name,11);n.parse(v);if(z&&M.length){if(!m.context){j(M)}else{m.invalid=true}}if(q&&J.name=="body"){G()}if(!m.invalid){for(N in i){F=e[N];A=i[N];x=A.length;while(x--){if(!A[x].parent){A.splice(x,1)}}for(D=0,C=F.length;D0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}c.push("<",m);if(k){for(n=0,j=k.length;n0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}},end:function(h){var i;c.push("");if(a&&d[h]&&c.length>0){i=c[c.length-1];if(i.length>0&&i!=="\n"){c.push("\n")}}},text:function(i,h){if(i.length>0){c[c.length]=h?i:f(i)}},cdata:function(h){c.push("")},comment:function(h){c.push("")},pi:function(h,i){if(i){c.push("")}else{c.push("")}if(a){c.push("\n")}},doctype:function(h){c.push("",a?"\n":"")},reset:function(){c.length=0},getContent:function(){return c.join("").replace(/\n$/,"")}}};(function(a){a.html.Serializer=function(c,d){var b=this,e=new a.html.Writer(c);c=c||{};c.validate="validate" in c?c.validate:true;b.schema=d=d||new a.html.Schema();b.writer=e;b.serialize=function(h){var g,i;i=c.validate;g={3:function(k,j){e.text(k.value,k.raw)},8:function(j){e.comment(j.value)},7:function(j){e.pi(j.name,j.value)},10:function(j){e.doctype(j.value)},4:function(j){e.cdata(j.value)},11:function(j){if((j=j.firstChild)){do{f(j)}while(j=j.next)}}};e.reset();function f(k){var t=g[k.type],j,o,s,r,p,u,n,m,q;if(!t){j=k.name;o=k.shortEnded;s=k.attributes;if(i&&s&&s.length>1){u=[];u.map={};q=d.getElementRule(k.name);for(n=0,m=q.attributesOrder.length;n=8;k.boxModel=!e.isIE||o.compatMode=="CSS1Compat"||k.stdMode;k.hasOuterHTML="outerHTML" in o.createElement("a");k.settings=l=e.extend({keep_values:false,hex_colors:1},l);k.schema=l.schema;k.styles=new e.html.Styles({url_converter:l.url_converter,url_converter_scope:l.url_converter_scope},l.schema);if(e.isIE6){try{o.execCommand("BackgroundImageCache",false,true)}catch(m){k.cssFlicker=true}}k.fixDoc(o);k.events=l.ownEvents?new e.dom.EventUtils(l.proxy):e.dom.Event;e.addUnload(k.destroy,k);n=l.schema?l.schema.getBlockElements():{};k.isBlock=function(q){var p=q.nodeType;if(p){return !!(p===1&&n[q.nodeName])}return !!n[q]}},fixDoc:function(k){var j=this.settings,i;if(b&&j.schema){("abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video").replace(/\w+/g,function(l){k.createElement(l)});for(i in j.schema.getCustomElements()){k.createElement(i)}}},clone:function(k,i){var j=this,m,l;if(!b||k.nodeType!==1||i){return k.cloneNode(i)}l=j.doc;if(!i){m=l.createElement(k.nodeName);g(j.getAttribs(k),function(n){j.setAttrib(m,n.nodeName,j.getAttrib(k,n.nodeName))});return m}return m.firstChild},getRoot:function(){var i=this,j=i.settings;return(j&&i.get(j.root_element))||i.doc.body},getViewPort:function(j){var k,i;j=!j?this.win:j;k=j.document;i=this.boxModel?k.documentElement:k.body;return{x:j.pageXOffset||i.scrollLeft,y:j.pageYOffset||i.scrollTop,w:j.innerWidth||i.clientWidth,h:j.innerHeight||i.clientHeight}},getRect:function(l){var k,i=this,j;l=i.get(l);k=i.getPos(l);j=i.getSize(l);return{x:k.x,y:k.y,w:j.w,h:j.h}},getSize:function(l){var j=this,i,k;l=j.get(l);i=j.getStyle(l,"width");k=j.getStyle(l,"height");if(i.indexOf("px")===-1){i=0}if(k.indexOf("px")===-1){k=0}return{w:parseInt(i,10)||l.offsetWidth||l.clientWidth,h:parseInt(k,10)||l.offsetHeight||l.clientHeight}},getParent:function(k,j,i){return this.getParents(k,j,i,false)},getParents:function(s,m,k,q){var j=this,i,l=j.settings,p=[];s=j.get(s);q=q===undefined;if(l.strict_root){k=k||j.getRoot()}if(d(m,"string")){i=m;if(m==="*"){m=function(o){return o.nodeType==1}}else{m=function(o){return j.is(o,i)}}}while(s){if(s==k||!s.nodeType||s.nodeType===9){break}if(!m||m(s)){if(q){p.push(s)}else{return s}}s=s.parentNode}return q?p:null},get:function(i){var j;if(i&&this.doc&&typeof(i)=="string"){j=i;i=this.doc.getElementById(i);if(i&&i.id!==j){return this.doc.getElementsByName(j)[1]}}return i},getNext:function(j,i){return this._findSib(j,i,"nextSibling")},getPrev:function(j,i){return this._findSib(j,i,"previousSibling")},select:function(k,j){var i=this;return e.dom.Sizzle(k,i.get(j)||i.get(i.settings.root_element)||i.doc,[])},is:function(l,j){var k;if(l.length===undefined){if(j==="*"){return l.nodeType==1}if(c.test(j)){j=j.toLowerCase().split(/,/);l=l.nodeName.toLowerCase();for(k=j.length-1;k>=0;k--){if(j[k]==l){return true}}return false}}return e.dom.Sizzle.matches(j,l.nodeType?[l]:l).length>0},add:function(l,o,i,k,m){var j=this;return this.run(l,function(r){var q,n;q=d(o,"string")?j.doc.createElement(o):o;j.setAttribs(q,i);if(k){if(k.nodeType){q.appendChild(k)}else{j.setHTML(q,k)}}return !m?r.appendChild(q):q})},create:function(k,i,j){return this.add(this.doc.createElement(k),k,i,j,1)},createHTML:function(q,i,m){var p="",l=this,j;p+="<"+q;for(j in i){if(i.hasOwnProperty(j)){p+=" "+j+'="'+l.encode(i[j])+'"'}}if(typeof(m)!="undefined"){return p+">"+m+""}return p+" />"},remove:function(i,j){return this.run(i,function(l){var m,k=l.parentNode;if(!k){return null}if(j){while(m=l.firstChild){if(!e.isIE||m.nodeType!==3||m.nodeValue){k.insertBefore(m,l)}else{l.removeChild(m)}}}return k.removeChild(l)})},setStyle:function(l,i,j){var k=this;return k.run(l,function(o){var n,m;n=o.style;i=i.replace(/-(\D)/g,function(q,p){return p.toUpperCase()});if(k.pixelStyles.test(i)&&(e.is(j,"number")||/^[\-0-9\.]+$/.test(j))){j+="px"}switch(i){case"opacity":if(b){n.filter=j===""?"":"alpha(opacity="+(j*100)+")";if(!l.currentStyle||!l.currentStyle.hasLayout){n.display="inline-block"}}n[i]=n["-moz-opacity"]=n["-khtml-opacity"]=j||"";break;case"float":b?n.styleFloat=j:n.cssFloat=j;break;default:n[i]=j||""}if(k.settings.update_styles){k.setAttrib(o,"data-mce-style")}})},getStyle:function(l,i,k){l=this.get(l);if(!l){return}if(this.doc.defaultView&&k){i=i.replace(/[A-Z]/g,function(m){return"-"+m});try{return this.doc.defaultView.getComputedStyle(l,null).getPropertyValue(i)}catch(j){return null}}i=i.replace(/-(\D)/g,function(n,m){return m.toUpperCase()});if(i=="float"){i=b?"styleFloat":"cssFloat"}if(l.currentStyle&&k){return l.currentStyle[i]}return l.style?l.style[i]:undefined},setStyles:function(l,m){var j=this,k=j.settings,i;i=k.update_styles;k.update_styles=0;g(m,function(o,p){j.setStyle(l,p,o)});k.update_styles=i;if(k.update_styles){j.setAttrib(l,k.cssText)}},removeAllAttribs:function(i){return this.run(i,function(l){var k,j=l.attributes;for(k=j.length-1;k>=0;k--){l.removeAttributeNode(j.item(k))}})},setAttrib:function(k,l,i){var j=this;if(!k||!l){return}if(j.settings.strict){l=l.toLowerCase()}return this.run(k,function(p){var o=j.settings;var m=p.getAttribute(l);if(i!==null){switch(l){case"style":if(!d(i,"string")){g(i,function(q,r){j.setStyle(p,r,q)});return}if(o.keep_values){if(i&&!j._isRes(i)){p.setAttribute("data-mce-style",i,2)}else{p.removeAttribute("data-mce-style",2)}}p.style.cssText=i;break;case"class":p.className=i||"";break;case"src":case"href":if(o.keep_values){if(o.url_converter){i=o.url_converter.call(o.url_converter_scope||j,i,l,p)}j.setAttrib(p,"data-mce-"+l,i,2)}break;case"shape":p.setAttribute("data-mce-style",i);break}}if(d(i)&&i!==null&&i.length!==0){p.setAttribute(l,""+i,2)}else{p.removeAttribute(l,2)}if(tinyMCE.activeEditor&&m!=i){var n=tinyMCE.activeEditor;n.onSetAttrib.dispatch(n,p,l,i)}})},setAttribs:function(j,k){var i=this;return this.run(j,function(l){g(k,function(m,o){i.setAttrib(l,o,m)})})},getAttrib:function(m,o,k){var i,j=this,l;m=j.get(m);if(!m||m.nodeType!==1){return k===l?false:k}if(!d(k)){k=""}if(/^(src|href|style|coords|shape)$/.test(o)){i=m.getAttribute("data-mce-"+o);if(i){return i}}if(b&&j.props[o]){i=m[j.props[o]];i=i&&i.nodeValue?i.nodeValue:i}if(!i){i=m.getAttribute(o,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(o)){if(m[j.props[o]]===true&&i===""){return o}return i?o:""}if(m.nodeName==="FORM"&&m.getAttributeNode(o)){return m.getAttributeNode(o).nodeValue}if(o==="style"){i=i||m.style.cssText;if(i){i=j.serializeStyle(j.parseStyle(i),m.nodeName);if(j.settings.keep_values&&!j._isRes(i)){m.setAttribute("data-mce-style",i)}}}if(f&&o==="class"&&i){i=i.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(b){switch(o){case"rowspan":case"colspan":if(i===1){i=""}break;case"size":if(i==="+0"||i===20||i===0){i=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(i===0){i=""}break;case"hspace":if(i===-1){i=""}break;case"maxlength":case"tabindex":if(i===32768||i===2147483647||i==="32768"){i=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(i===65535){return o}return k;case"shape":i=i.toLowerCase();break;default:if(o.indexOf("on")===0&&i){i=e._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+i)}}}return(i!==l&&i!==null&&i!=="")?""+i:k},getPos:function(q,l){var j=this,i=0,p=0,m,o=j.doc,k;q=j.get(q);l=l||o.body;if(q){if(q.getBoundingClientRect){q=q.getBoundingClientRect();m=j.boxModel?o.documentElement:o.body;i=q.left+(o.documentElement.scrollLeft||o.body.scrollLeft)-m.clientTop;p=q.top+(o.documentElement.scrollTop||o.body.scrollTop)-m.clientLeft;return{x:i,y:p}}k=q;while(k&&k!=l&&k.nodeType){i+=k.offsetLeft||0;p+=k.offsetTop||0;k=k.offsetParent}k=q.parentNode;while(k&&k!=l&&k.nodeType){i-=k.scrollLeft||0;p-=k.scrollTop||0;k=k.parentNode}}return{x:i,y:p}},parseStyle:function(i){return this.styles.parse(i)},serializeStyle:function(j,i){return this.styles.serialize(j,i)},addStyle:function(j){var k=this.doc,i;styleElm=k.getElementById("mceDefaultStyles");if(!styleElm){styleElm=k.createElement("style"),styleElm.id="mceDefaultStyles";styleElm.type="text/css";i=k.getElementsByTagName("head")[0];if(i.firstChild){i.insertBefore(styleElm,i.firstChild)}else{i.appendChild(styleElm)}}if(styleElm.styleSheet){styleElm.styleSheet.cssText+=j}else{styleElm.appendChild(k.createTextNode(j))}},loadCSS:function(i){var k=this,l=k.doc,j;if(!i){i=""}j=l.getElementsByTagName("head")[0];g(i.split(","),function(m){var n;if(k.files[m]){return}k.files[m]=true;n=k.create("link",{rel:"stylesheet",href:e._addVer(m)});if(b&&l.documentMode&&l.recalc){n.onload=function(){if(l.recalc){l.recalc()}n.onload=null}}j.appendChild(n)})},addClass:function(i,j){return this.run(i,function(k){var l;if(!j){return 0}if(this.hasClass(k,j)){return k.className}l=this.removeClass(k,j);return k.className=(l!=""?(l+" "):"")+j})},removeClass:function(k,l){var i=this,j;return i.run(k,function(n){var m;if(i.hasClass(n,l)){if(!j){j=new RegExp("(^|\\s+)"+l+"(\\s+|$)","g")}m=n.className.replace(j," ");m=e.trim(m!=" "?m:"");n.className=m;if(!m){n.removeAttribute("class");n.removeAttribute("className")}return m}return n.className})},hasClass:function(j,i){j=this.get(j);if(!j||!i){return false}return(" "+j.className+" ").indexOf(" "+i+" ")!==-1},show:function(i){return this.setStyle(i,"display","block")},hide:function(i){return this.setStyle(i,"display","none")},isHidden:function(i){i=this.get(i);return !i||i.style.display=="none"||this.getStyle(i,"display")=="none"},uniqueId:function(i){return(!i?"mce_":i)+(this.counter++)},setHTML:function(k,j){var i=this;return i.run(k,function(m){if(b){while(m.firstChild){m.removeChild(m.firstChild)}try{m.innerHTML="
"+j;m.removeChild(m.firstChild)}catch(l){var n=i.create("div");n.innerHTML="
"+j;g(e.grep(n.childNodes),function(p,o){if(o&&m.canHaveHTML){m.appendChild(p)}})}}else{m.innerHTML=j}return j})},getOuterHTML:function(k){var j,i=this;k=i.get(k);if(!k){return null}if(k.nodeType===1&&i.hasOuterHTML){return k.outerHTML}j=(k.ownerDocument||i.doc).createElement("body");j.appendChild(k.cloneNode(true));return j.innerHTML},setOuterHTML:function(l,j,m){var i=this;function k(p,o,r){var s,q;q=r.createElement("body");q.innerHTML=o;s=q.lastChild;while(s){i.insertAfter(s.cloneNode(true),p);s=s.previousSibling}i.remove(p)}return this.run(l,function(o){o=i.get(o);if(o.nodeType==1){m=m||o.ownerDocument||i.doc;if(b){try{if(b&&o.nodeType==1){o.outerHTML=j}else{k(o,j,m)}}catch(n){k(o,j,m)}}else{k(o,j,m)}}})},decode:h.decode,encode:h.encodeAllRaw,insertAfter:function(i,j){j=this.get(j);return this.run(i,function(l){var k,m;k=j.parentNode;m=j.nextSibling;if(m){k.insertBefore(l,m)}else{k.appendChild(l)}return l})},replace:function(m,l,i){var j=this;if(d(l,"array")){m=m.cloneNode(true)}return j.run(l,function(k){if(i){g(e.grep(k.childNodes),function(n){m.appendChild(n)})}return k.parentNode.replaceChild(m,k)})},rename:function(l,i){var k=this,j;if(l.nodeName!=i.toUpperCase()){j=k.create(i);g(k.getAttribs(l),function(m){k.setAttrib(j,m.nodeName,k.getAttrib(l,m.nodeName))});k.replace(j,l,1)}return j||l},findCommonAncestor:function(k,i){var l=k,j;while(l){j=i;while(j&&l!=j){j=j.parentNode}if(l==j){break}l=l.parentNode}if(!l&&k.ownerDocument){return k.ownerDocument.documentElement}return l},toHex:function(i){var k=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(i);function j(l){l=parseInt(l,10).toString(16);return l.length>1?l:"0"+l}if(k){i="#"+j(k[1])+j(k[2])+j(k[3]);return i}return i},getClasses:function(){var n=this,j=[],m,o={},p=n.settings.class_filter,l;if(n.classes){return n.classes}function q(i){g(i.imports,function(s){q(s)});g(i.cssRules||i.rules,function(s){switch(s.type||1){case 1:if(s.selectorText){g(s.selectorText.split(","),function(r){r=r.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(r)||!/\.[\w\-]+$/.test(r)){return}l=r;r=e._replace(/.*\.([a-z0-9_\-]+).*/i,"$1",r);if(p&&!(r=p(r,l))){return}if(!o[r]){j.push({"class":r});o[r]=1}})}break;case 3:q(s.styleSheet);break}})}try{g(n.doc.styleSheets,q)}catch(k){}if(j.length>0){n.classes=j}return j},run:function(l,k,j){var i=this,m;if(i.doc&&typeof(l)==="string"){l=i.get(l)}if(!l){return false}j=j||this;if(!l.nodeType&&(l.length||l.length===0)){m=[];g(l,function(o,n){if(o){if(typeof(o)=="string"){o=i.doc.getElementById(o)}m.push(k.call(j,o,n))}});return m}return k.call(j,l)},getAttribs:function(j){var i;j=this.get(j);if(!j){return[]}if(b){i=[];if(j.nodeName=="OBJECT"){return j.attributes}if(j.nodeName==="OPTION"&&this.getAttrib(j,"selected")){i.push({specified:1,nodeName:"selected"})}j.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(k){i.push({specified:1,nodeName:k})});return i}return j.attributes},isEmpty:function(m,k){var r=this,o,n,q,j,l,p=0;m=m.firstChild;if(m){j=new e.dom.TreeWalker(m,m.parentNode);k=k||r.schema?r.schema.getNonEmptyElements():null;do{q=m.nodeType;if(q===1){if(m.getAttribute("data-mce-bogus")){continue}l=m.nodeName.toLowerCase();if(k&&k[l]){if(l==="br"){p++;continue}return false}n=r.getAttribs(m);o=m.attributes.length;while(o--){l=m.attributes[o].nodeName;if(l==="name"||l==="data-mce-bookmark"){return false}}}if(q==8){return false}if((q===3&&!a.test(m.nodeValue))){return false}}while(m=j.next())}return p<=1},destroy:function(j){var i=this;i.win=i.doc=i.root=i.events=i.frag=null;if(!j){e.removeUnload(i.destroy)}},createRng:function(){var i=this.doc;return i.createRange?i.createRange():new e.dom.Range(this)},nodeIndex:function(m,n){var i=0,k,l,j;if(m){for(k=m.nodeType,m=m.previousSibling,l=m;m;m=m.previousSibling){j=m.nodeType;if(n&&j==3){if(j==k||!m.nodeValue.length){continue}}i++;k=j}}return i},split:function(m,l,p){var q=this,i=q.createRng(),n,k,o;function j(v){var t,s=v.childNodes,u=v.nodeType;function x(A){var z=A.previousSibling&&A.previousSibling.nodeName=="SPAN";var y=A.nextSibling&&A.nextSibling.nodeName=="SPAN";return z&&y}if(u==1&&v.getAttribute("data-mce-type")=="bookmark"){return}for(t=s.length-1;t>=0;t--){j(s[t])}if(u!=9){if(u==3&&v.nodeValue.length>0){var r=e.trim(v.nodeValue).length;if(!q.isBlock(v.parentNode)||r>0||r===0&&x(v)){return}}else{if(u==1){s=v.childNodes;if(s.length==1&&s[0]&&s[0].nodeType==1&&s[0].getAttribute("data-mce-type")=="bookmark"){v.parentNode.insertBefore(s[0],v)}if(s.length||/^(br|hr|input|img)$/i.test(v.nodeName)){return}}}q.remove(v)}return v}if(m&&l){i.setStart(m.parentNode,q.nodeIndex(m));i.setEnd(l.parentNode,q.nodeIndex(l));n=i.extractContents();i=q.createRng();i.setStart(l.parentNode,q.nodeIndex(l)+1);i.setEnd(m.parentNode,q.nodeIndex(m)+1);k=i.extractContents();o=m.parentNode;o.insertBefore(j(n),m);if(p){o.replaceChild(p,l)}else{o.insertBefore(l,m)}o.insertBefore(j(k),m);q.remove(m);return p||l}},bind:function(l,i,k,j){return this.events.add(l,i,k,j||this)},unbind:function(k,i,j){return this.events.remove(k,i,j)},fire:function(k,j,i){return this.events.fire(k,j,i)},getContentEditable:function(j){var i;if(j.nodeType!=1){return null}i=j.getAttribute("data-mce-contenteditable");if(i&&i!=="inherit"){return i}return j.contentEditable!=="inherit"?j.contentEditable:null},_findSib:function(l,i,j){var k=this,m=i;if(l){if(d(m,"string")){m=function(n){return k.is(n,i)}}for(l=l[j];l;l=l[j]){if(m(l)){return l}}}return null},_isRes:function(i){return/^(top|left|bottom|right|width|height)/i.test(i)||/;\s*(top|left|bottom|right|width|height)/i.test(i)}});e.DOM=new e.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var O=this,e=c.doc,U=0,F=1,j=2,E=true,S=false,W="startOffset",h="startContainer",Q="endContainer",A="endOffset",k=tinymce.extend,n=c.nodeIndex;k(O,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:E,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:J,setEndBefore:K,setEndAfter:u,collapse:B,selectNode:y,selectNodeContents:G,compareBoundaryPoints:v,deleteContents:p,extractContents:I,cloneContents:d,insertNode:D,surroundContents:N,cloneRange:L,toStringIE:T});function x(){return e.createDocumentFragment()}function q(X,t){C(E,X,t)}function s(X,t){C(S,X,t)}function g(t){q(t.parentNode,n(t))}function J(t){q(t.parentNode,n(t)+1)}function K(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function B(t){if(t){O[Q]=O[h];O[A]=O[W]}else{O[h]=O[Q];O[W]=O[A]}O.collapsed=E}function y(t){g(t);u(t)}function G(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(aa,t){var ad=O[h],Y=O[W],ac=O[Q],X=O[A],ab=t.startContainer,af=t.startOffset,Z=t.endContainer,ae=t.endOffset;if(aa===0){return H(ad,Y,ab,af)}if(aa===1){return H(ac,X,ab,af)}if(aa===2){return H(ac,X,Z,ae)}if(aa===3){return H(ad,Y,Z,ae)}}function p(){l(j)}function I(){return l(U)}function d(){return l(F)}function D(aa){var X=this[h],t=this[W],Z,Y;if((X.nodeType===3||X.nodeType===4)&&X.nodeValue){if(!t){X.parentNode.insertBefore(aa,X)}else{if(t>=X.nodeValue.length){c.insertAfter(aa,X)}else{Z=X.splitText(t);X.parentNode.insertBefore(aa,Z)}}}else{if(X.childNodes.length>0){Y=X.childNodes[t]}if(Y){X.insertBefore(aa,Y)}else{X.appendChild(aa)}}}function N(X){var t=O.extractContents();O.insertNode(X);X.appendChild(t);O.selectNode(X)}function L(){return k(new b(c),{startContainer:O[h],startOffset:O[W],endContainer:O[Q],endOffset:O[A],collapsed:O.collapsed,commonAncestorContainer:O.commonAncestorContainer})}function P(t,X){var Y;if(t.nodeType==3){return t}if(X<0){return t}Y=t.firstChild;while(Y&&X>0){--X;Y=Y.nextSibling}if(Y){return Y}return t}function m(){return(O[h]==O[Q]&&O[W]==O[A])}function H(Z,ab,X,aa){var ac,Y,t,ad,af,ae;if(Z==X){if(ab==aa){return 0}if(ab0){O.collapse(X)}}else{O.collapse(X)}O.collapsed=m();O.commonAncestorContainer=c.findCommonAncestor(O[h],O[Q])}function l(ad){var ac,Z=0,af=0,X,ab,Y,aa,t,ae;if(O[h]==O[Q]){return f(ad)}for(ac=O[Q],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[h]){return r(ac,ad)}++Z}for(ac=O[h],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[Q]){return V(ac,ad)}++af}ab=af-Z;Y=O[h];while(ab>0){Y=Y.parentNode;ab--}aa=O[Q];while(ab<0){aa=aa.parentNode;ab++}for(t=Y.parentNode,ae=aa.parentNode;t!=ae;t=t.parentNode,ae=ae.parentNode){Y=t;aa=ae}return o(Y,aa,ad)}function f(ac){var ae,af,t,Y,Z,ad,aa,X,ab;if(ac!=j){ae=x()}if(O[W]==O[A]){return ae}if(O[h].nodeType==3){af=O[h].nodeValue;t=af.substring(O[W],O[A]);if(ac!=F){Y=O[h];X=O[W];ab=O[A]-O[W];if(X===0&&ab>=Y.nodeValue.length-1){Y.parentNode.removeChild(Y)}else{Y.deleteData(X,ab)}O.collapse(E)}if(ac==j){return}if(t.length>0){ae.appendChild(e.createTextNode(t))}return ae}Y=P(O[h],O[W]);Z=O[A]-O[W];while(Y&&Z>0){ad=Y.nextSibling;aa=z(Y,ac);if(ae){ae.appendChild(aa)}--Z;Y=ad}if(ac!=F){O.collapse(E)}return ae}function r(ad,aa){var ac,ab,X,t,Z,Y;if(aa!=j){ac=x()}ab=i(ad,aa);if(ac){ac.appendChild(ab)}X=n(ad);t=X-O[W];if(t<=0){if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}ab=ad.previousSibling;while(t>0){Z=ab.previousSibling;Y=z(ab,aa);if(ac){ac.insertBefore(Y,ac.firstChild)}--t;ab=Z}if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}function V(ab,aa){var ad,X,ac,t,Z,Y;if(aa!=j){ad=x()}ac=R(ab,aa);if(ad){ad.appendChild(ac)}X=n(ab);++X;t=O[A]-X;ac=ab.nextSibling;while(ac&&t>0){Z=ac.nextSibling;Y=z(ac,aa);if(ad){ad.appendChild(Y)}--t;ac=Z}if(aa!=F){O.setStartAfter(ab);O.collapse(E)}return ad}function o(ab,t,ae){var Y,ag,aa,ac,ad,X,af,Z;if(ae!=j){ag=x()}Y=R(ab,ae);if(ag){ag.appendChild(Y)}aa=ab.parentNode;ac=n(ab);ad=n(t);++ac;X=ad-ac;af=ab.nextSibling;while(X>0){Z=af.nextSibling;Y=z(af,ae);if(ag){ag.appendChild(Y)}af=Z;--X}Y=i(t,ae);if(ag){ag.appendChild(Y)}if(ae!=F){O.setStartAfter(ab);O.collapse(E)}return ag}function i(ac,ad){var Y=P(O[Q],O[A]-1),ae,ab,aa,t,X,Z=Y!=O[Q];if(Y==ac){return M(Y,Z,S,ad)}ae=Y.parentNode;ab=M(ae,S,S,ad);while(ae){while(Y){aa=Y.previousSibling;t=M(Y,Z,S,ad);if(ad!=j){ab.insertBefore(t,ab.firstChild)}Z=E;Y=aa}if(ae==ac){return ab}Y=ae.previousSibling;ae=ae.parentNode;X=M(ae,S,S,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function R(ac,ad){var Z=P(O[h],O[W]),aa=Z!=O[h],ae,ab,Y,t,X;if(Z==ac){return M(Z,aa,E,ad)}ae=Z.parentNode;ab=M(ae,S,E,ad);while(ae){while(Z){Y=Z.nextSibling;t=M(Z,aa,E,ad);if(ad!=j){ab.appendChild(t)}aa=E;Z=Y}if(ae==ac){return ab}Z=ae.nextSibling;ae=ae.parentNode;X=M(ae,S,E,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function M(t,aa,ad,ae){var Z,Y,ab,X,ac;if(aa){return z(t,ae)}if(t.nodeType==3){Z=t.nodeValue;if(ad){X=O[W];Y=Z.substring(X);ab=Z.substring(0,X)}else{X=O[A];Y=Z.substring(0,X);ab=Z.substring(X)}if(ae!=F){t.nodeValue=ab}if(ae==j){return}ac=c.clone(t,S);ac.nodeValue=Y;return ac}if(ae==j){return}return c.clone(t,S)}function z(X,t){if(t!=j){return t==F?c.clone(X,E):X}X.parentNode.removeChild(X)}function T(){return c.create("body",null,d()).outerText}return O}a.Range=b;b.prototype.toString=function(){return this.toStringIE()}})(tinymce.dom);(function(){function a(d){var b=this,h=d.dom,c=true,f=false;function e(i,j){var k,t=0,q,n,m,l,o,r,p=-1,s;k=i.duplicate();k.collapse(j);s=k.parentElement();if(s.ownerDocument!==d.dom.doc){return}while(s.contentEditable==="false"){s=s.parentNode}if(!s.hasChildNodes()){return{node:s,inside:1}}m=s.children;q=m.length-1;while(t<=q){r=Math.floor((t+q)/2);l=m[r];k.moveToElementText(l);p=k.compareEndPoints(j?"StartToStart":"EndToEnd",i);if(p>0){q=r-1}else{if(p<0){t=r+1}else{return{node:l}}}}if(p<0){if(!l){k.moveToElementText(s);k.collapse(true);l=s;n=true}else{k.collapse(false)}o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",1)===0||s!=k.parentElement()){break}o++}}else{k.collapse(true);o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",-1)===0||s!=k.parentElement()){break}o++}}return{node:l,position:p,offset:o,inside:n}}function g(){var i=d.getRng(),r=h.createRng(),l,k,p,q,m,j;l=i.item?i.item(0):i.parentElement();if(l.ownerDocument!=h.doc){return r}k=d.isCollapsed();if(i.item){r.setStart(l.parentNode,h.nodeIndex(l));r.setEnd(r.startContainer,r.startOffset+1);return r}function o(A){var u=e(i,A),s,y,z=0,x,v,t;s=u.node;y=u.offset;if(u.inside&&!s.hasChildNodes()){r[A?"setStart":"setEnd"](s,0);return}if(y===v){r[A?"setStartBefore":"setEndAfter"](s);return}if(u.position<0){x=u.inside?s.firstChild:s.nextSibling;if(!x){r[A?"setStartAfter":"setEndAfter"](s);return}if(!y){if(x.nodeType==3){r[A?"setStart":"setEnd"](x,0)}else{r[A?"setStartBefore":"setEndBefore"](x)}return}while(x){t=x.nodeValue;z+=t.length;if(z>=y){s=x;z-=y;z=t.length-z;break}x=x.nextSibling}}else{x=s.previousSibling;if(!x){return r[A?"setStartBefore":"setEndBefore"](s)}if(!y){if(s.nodeType==3){r[A?"setStart":"setEnd"](x,s.nodeValue.length)}else{r[A?"setStartAfter":"setEndAfter"](x)}return}while(x){z+=x.nodeValue.length;if(z>=y){s=x;z-=y;break}x=x.previousSibling}}r[A?"setStart":"setEnd"](s,z)}try{o(true);if(!k){o()}}catch(n){if(n.number==-2147024809){m=b.getBookmark(2);p=i.duplicate();p.collapse(true);l=p.parentElement();if(!k){p=i.duplicate();p.collapse(false);q=p.parentElement();q.innerHTML=q.innerHTML}l.innerHTML=l.innerHTML;b.moveToBookmark(m);i=d.getRng();o(true);if(!k){o()}}else{throw n}}return r}this.getBookmark=function(m){var j=d.getRng(),o,i,l={};function n(u){var t,p,s,r,q=[];t=u.parentNode;p=h.getRoot().parentNode;while(t!=p&&t.nodeType!==9){s=t.children;r=s.length;while(r--){if(u===s[r]){q.push(r);break}}u=t;t=t.parentNode}return q}function k(q){var p;p=e(j,q);if(p){return{position:p.position,offset:p.offset,indexes:n(p.node),inside:p.inside}}}if(m===2){if(!j.item){l.start=k(true);if(!d.isCollapsed()){l.end=k()}}else{l.start={ctrl:true,indexes:n(j.item(0))}}}return l};this.moveToBookmark=function(k){var j,i=h.doc.body;function m(o){var r,q,n,p;r=h.getRoot();for(q=o.length-1;q>=0;q--){p=r.children;n=o[q];if(n<=p.length-1){r=p[n]}}return r}function l(r){var n=k[r?"start":"end"],q,p,o;if(n){q=n.position>0;p=i.createTextRange();p.moveToElementText(m(n.indexes));offset=n.offset;if(offset!==o){p.collapse(n.inside||q);p.moveStart("character",q?-offset:offset)}else{p.collapse(r)}j.setEndPoint(r?"StartToStart":"EndToStart",p);if(r){j.collapse(true)}}}if(k.start){if(k.start.ctrl){j=i.createControlRange();j.addElement(m(k.start.indexes));j.select()}else{j=i.createTextRange();l(true);l();j.select()}}};this.addRange=function(i){var n,l,k,p,v,q,t,s=d.dom.doc,m=s.body,r,u;function j(C){var y,B,x,A,z;x=h.create("a");y=C?k:v;B=C?p:q;A=n.duplicate();if(y==s||y==s.documentElement){y=m;B=0}if(y.nodeType==3){y.parentNode.insertBefore(x,y);A.moveToElementText(x);A.moveStart("character",B);h.remove(x);n.setEndPoint(C?"StartToStart":"EndToEnd",A)}else{z=y.childNodes;if(z.length){if(B>=z.length){h.insertAfter(x,z[z.length-1])}else{y.insertBefore(x,z[B])}A.moveToElementText(x)}else{if(y.canHaveHTML){y.innerHTML="\uFEFF";x=y.firstChild;A.moveToElementText(x);A.collapse(f)}}n.setEndPoint(C?"StartToStart":"EndToEnd",A);h.remove(x)}}k=i.startContainer;p=i.startOffset;v=i.endContainer;q=i.endOffset;n=m.createTextRange();if(k==v&&k.nodeType==1){if(p==q&&!k.hasChildNodes()){if(k.canHaveHTML){t=k.previousSibling;if(t&&!t.hasChildNodes()&&h.isBlock(t)){t.innerHTML="\uFEFF"}else{t=null}k.innerHTML="\uFEFF\uFEFF";n.moveToElementText(k.lastChild);n.select();h.doc.selection.clear();k.innerHTML="";if(t){t.innerHTML=""}return}else{p=h.nodeIndex(k);k=k.parentNode}}if(p==q-1){try{u=k.childNodes[p];l=m.createControlRange();l.addElement(u);l.select();r=d.getRng();if(r.item&&u===r.item(0)){return}}catch(o){}}}j(true);j();n.select()};this.getRangeAt=g}tinymce.dom.TridentSelection=a})();(function(){var n=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i="sizcache",o=0,r=Object.prototype.toString,h=false,g=true,q=/\\/g,u=/\r\n/g,x=/\W/;[0,0].sort(function(){g=false;return 0});var d=function(C,e,F,G){F=F||[];e=e||document;var I=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!C||typeof C!=="string"){return F}var z,K,N,y,J,M,L,E,B=true,A=d.isXML(e),D=[],H=C;do{n.exec("");z=n.exec(H);if(z){H=z[3];D.push(z[1]);if(z[2]){y=z[3];break}}}while(z);if(D.length>1&&j.exec(C)){if(D.length===2&&k.relative[D[0]]){K=s(D[0]+D[1],e,G)}else{K=k.relative[D[0]]?[e]:d(D.shift(),e);while(D.length){C=D.shift();if(k.relative[C]){C+=D.shift()}K=s(C,K,G)}}}else{if(!G&&D.length>1&&e.nodeType===9&&!A&&k.match.ID.test(D[0])&&!k.match.ID.test(D[D.length-1])){J=d.find(D.shift(),e,A);e=J.expr?d.filter(J.expr,J.set)[0]:J.set[0]}if(e){J=G?{expr:D.pop(),set:l(G)}:d.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&e.parentNode?e.parentNode:e,A);K=J.expr?d.filter(J.expr,J.set):J.set;if(D.length>0){N=l(K)}else{B=false}while(D.length){M=D.pop();L=M;if(!k.relative[M]){M=""}else{L=D.pop()}if(L==null){L=e}k.relative[M](N,L,A)}}else{N=D=[]}}if(!N){N=K}if(!N){d.error(M||C)}if(r.call(N)==="[object Array]"){if(!B){F.push.apply(F,N)}else{if(e&&e.nodeType===1){for(E=0;N[E]!=null;E++){if(N[E]&&(N[E]===true||N[E].nodeType===1&&d.contains(e,N[E]))){F.push(K[E])}}}else{for(E=0;N[E]!=null;E++){if(N[E]&&N[E].nodeType===1){F.push(K[E])}}}}}else{l(N,F)}if(y){d(y,I,F,G);d.uniqueSort(F)}return F};d.uniqueSort=function(y){if(p){h=g;y.sort(p);if(h){for(var e=1;e0};d.find=function(E,e,F){var D,z,B,A,C,y;if(!E){return[]}for(z=0,B=k.order.length;z":function(D,y){var C,B=typeof y==="string",z=0,e=D.length;if(B&&!x.test(y)){y=y.toLowerCase();for(;z=0)){if(!z){e.push(C)}}else{if(z){y[B]=false}}}}return false},ID:function(e){return e[1].replace(q,"")},TAG:function(y,e){return y[1].replace(q,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){d.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var y=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(y[1]+(y[2]||1))-0;e[3]=y[3]-0}else{if(e[2]){d.error(e[0])}}e[0]=o++;return e},ATTR:function(B,y,z,e,C,D){var A=B[1]=B[1].replace(q,"");if(!D&&k.attrMap[A]){B[1]=k.attrMap[A]}B[4]=(B[4]||B[5]||"").replace(q,"");if(B[2]==="~="){B[4]=" "+B[4]+" "}return B},PSEUDO:function(B,y,z,e,C){if(B[1]==="not"){if((n.exec(B[3])||"").length>1||/^\w/.test(B[3])){B[3]=d(B[3],null,null,y)}else{var A=d.filter(B[3],y,z,true^C);if(!z){e.push.apply(e,A)}return false}}else{if(k.match.POS.test(B[0])||k.match.CHILD.test(B[0])){return true}}return B},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(z,y,e){return !!d(e[3],z).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(z){var e=z.getAttribute("type"),y=z.type;return z.nodeName.toLowerCase()==="input"&&"text"===y&&(e===y||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===y.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===y.type},button:function(y){var e=y.nodeName.toLowerCase();return e==="input"&&"button"===y.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(y,e){return e===0},last:function(z,y,e,A){return y===A.length-1},even:function(y,e){return e%2===0},odd:function(y,e){return e%2===1},lt:function(z,y,e){return ye[3]-0},nth:function(z,y,e){return e[3]-0===y},eq:function(z,y,e){return e[3]-0===y}},filter:{PSEUDO:function(z,E,D,F){var e=E[1],y=k.filters[e];if(y){return y(z,D,E,F)}else{if(e==="contains"){return(z.textContent||z.innerText||b([z])||"").indexOf(E[3])>=0}else{if(e==="not"){var A=E[3];for(var C=0,B=A.length;C=0)}}},ID:function(y,e){return y.nodeType===1&&y.getAttribute("id")===e},TAG:function(y,e){return(e==="*"&&y.nodeType===1)||!!y.nodeName&&y.nodeName.toLowerCase()===e},CLASS:function(y,e){return(" "+(y.className||y.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(C,A){var z=A[1],e=d.attr?d.attr(C,z):k.attrHandle[z]?k.attrHandle[z](C):C[z]!=null?C[z]:C.getAttribute(z),D=e+"",B=A[2],y=A[4];return e==null?B==="!=":!B&&d.attr?e!=null:B==="="?D===y:B==="*="?D.indexOf(y)>=0:B==="~="?(" "+D+" ").indexOf(y)>=0:!y?D&&e!==false:B==="!="?D!==y:B==="^="?D.indexOf(y)===0:B==="$="?D.substr(D.length-y.length)===y:B==="|="?D===y||D.substr(0,y.length+1)===y+"-":false},POS:function(B,y,z,C){var e=y[2],A=k.setFilters[e];if(A){return A(B,z,y,C)}}}};var j=k.match.POS,c=function(y,e){return"\\"+(e-0+1)};for(var f in k.match){k.match[f]=new RegExp(k.match[f].source+(/(?![^\[]*\])(?![^\(]*\))/.source));k.leftMatch[f]=new RegExp(/(^(?:.|\r|\n)*?)/.source+k.match[f].source.replace(/\\(\d+)/g,c))}k.match.globalPOS=j;var l=function(y,e){y=Array.prototype.slice.call(y,0);if(e){e.push.apply(e,y);return e}return y};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(v){l=function(B,A){var z=0,y=A||[];if(r.call(B)==="[object Array]"){Array.prototype.push.apply(y,B)}else{if(typeof B.length==="number"){for(var e=B.length;z";e.insertBefore(y,e.firstChild);if(document.getElementById(z)){k.find.ID=function(B,C,D){if(typeof C.getElementById!=="undefined"&&!D){var A=C.getElementById(B[1]);return A?A.id===B[1]||typeof A.getAttributeNode!=="undefined"&&A.getAttributeNode("id").nodeValue===B[1]?[A]:undefined:[]}};k.filter.ID=function(C,A){var B=typeof C.getAttributeNode!=="undefined"&&C.getAttributeNode("id");return C.nodeType===1&&B&&B.nodeValue===A}}e.removeChild(y);e=y=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){k.find.TAG=function(y,C){var B=C.getElementsByTagName(y[1]);if(y[1]==="*"){var A=[];for(var z=0;B[z];z++){if(B[z].nodeType===1){A.push(B[z])}}B=A}return B}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){k.attrHandle.href=function(y){return y.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=d,A=document.createElement("div"),z="__sizzle__";A.innerHTML="

";if(A.querySelectorAll&&A.querySelectorAll(".TEST").length===0){return}d=function(L,C,G,K){C=C||document;if(!K&&!d.isXML(C)){var J=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(L);if(J&&(C.nodeType===1||C.nodeType===9)){if(J[1]){return l(C.getElementsByTagName(L),G)}else{if(J[2]&&k.find.CLASS&&C.getElementsByClassName){return l(C.getElementsByClassName(J[2]),G)}}}if(C.nodeType===9){if(L==="body"&&C.body){return l([C.body],G)}else{if(J&&J[3]){var F=C.getElementById(J[3]);if(F&&F.parentNode){if(F.id===J[3]){return l([F],G)}}else{return l([],G)}}}try{return l(C.querySelectorAll(L),G)}catch(H){}}else{if(C.nodeType===1&&C.nodeName.toLowerCase()!=="object"){var D=C,E=C.getAttribute("id"),B=E||z,N=C.parentNode,M=/^\s*[+~]/.test(L);if(!E){C.setAttribute("id",B)}else{B=B.replace(/'/g,"\\$&")}if(M&&N){C=C.parentNode}try{if(!M||N){return l(C.querySelectorAll("[id='"+B+"'] "+L),G)}}catch(I){}finally{if(!E){D.removeAttribute("id")}}}}}return e(L,C,G,K)};for(var y in e){d[y]=e[y]}A=null})()}(function(){var e=document.documentElement,z=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(z){var B=!z.call(document.createElement("div"),"div"),y=false;try{z.call(document.documentElement,"[test!='']:sizzle")}catch(A){y=true}d.matchesSelector=function(D,F){F=F.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!d.isXML(D)){try{if(y||!k.match.PSEUDO.test(F)&&!/!=/.test(F)){var C=z.call(D,F);if(C||!B||D.document&&D.document.nodeType!==11){return C}}}catch(E){}}return d(F,null,null,[D]).length>0}}})();(function(){var e=document.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}k.order.splice(1,0,"CLASS");k.find.CLASS=function(y,z,A){if(typeof z.getElementsByClassName!=="undefined"&&!A){return z.getElementsByClassName(y[1])}};e=null})();function a(y,D,C,G,E,F){for(var A=0,z=G.length;A0){B=e;break}}}e=e[y]}G[A]=B}}}if(document.documentElement.contains){d.contains=function(y,e){return y!==e&&(y.contains?y.contains(e):true)}}else{if(document.documentElement.compareDocumentPosition){d.contains=function(y,e){return !!(y.compareDocumentPosition(e)&16)}}else{d.contains=function(){return false}}}d.isXML=function(e){var y=(e?e.ownerDocument||e:0).documentElement;return y?y.nodeName!=="HTML":false};var s=function(z,e,D){var C,E=[],B="",F=e.nodeType?[e]:e;while((C=k.match.PSEUDO.exec(z))){B+=C[0];z=z.replace(k.match.PSEUDO,"")}z=k.relative[z]?z+"*":z;for(var A=0,y=F.length;A"+(i.item?i.item(0).outerHTML:i.htmlText);m.removeChild(m.firstChild)}else{m.innerHTML=i.toString()}}if(/^\s/.test(m.innerHTML)){j=" "}if(/\s+$/.test(m.innerHTML)){l=" "}h.getInner=true;h.content=g.isCollapsed()?"":j+g.serializer.serialize(m,h)+l;g.onGetContent.dispatch(g,h);return h.content},setContent:function(h,j){var o=this,g=o.getRng(),k,l=o.win.document,n,m;j=j||{format:"html"};j.set=true;h=j.content=h;if(!j.no_events){o.onBeforeSetContent.dispatch(o,j)}h=j.content;if(g.insertNode){h+='_';if(g.startContainer==l&&g.endContainer==l){l.body.innerHTML=h}else{g.deleteContents();if(l.body.childNodes.length===0){l.body.innerHTML=h}else{if(g.createContextualFragment){g.insertNode(g.createContextualFragment(h))}else{n=l.createDocumentFragment();m=l.createElement("div");n.appendChild(m);m.outerHTML=h;g.insertNode(n)}}}k=o.dom.get("__caret");g=l.createRange();g.setStartBefore(k);g.setEndBefore(k);o.setRng(g);o.dom.remove("__caret");try{o.setRng(g)}catch(i){}}else{if(g.item){l.execCommand("Delete",false,null);g=o.getRng()}if(/^\s+/.test(h)){g.pasteHTML('_'+h);o.dom.remove("__mce_tmp")}else{g.pasteHTML(h)}}if(!j.no_events){o.onSetContent.dispatch(o,j)}},getStart:function(){var i=this,h=i.getRng(),j,g,l,k;if(h.duplicate||h.item){if(h.item){return h.item(0)}l=h.duplicate();l.collapse(1);j=l.parentElement();if(j.ownerDocument!==i.dom.doc){j=i.dom.getRoot()}g=k=h.parentElement();while(k=k.parentNode){if(k==j){j=g;break}}return j}else{j=h.startContainer;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[Math.min(j.childNodes.length-1,h.startOffset)]}if(j&&j.nodeType==3){return j.parentNode}return j}},getEnd:function(){var h=this,g=h.getRng(),j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}g=g.duplicate();g.collapse(0);j=g.parentElement();if(j.ownerDocument!==h.dom.doc){j=h.dom.getRoot()}if(j&&j.nodeName=="BODY"){return j.lastChild||j}return j}else{j=g.endContainer;i=g.endOffset;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[i>0?i-1:i]}if(j&&j.nodeType==3){return j.parentNode}return j}},getBookmark:function(s,v){var y=this,n=y.dom,h,k,j,o,i,p,q,m="\uFEFF",x;function g(z,A){var t=0;e(n.select(z),function(C,B){if(C==A){t=B}});return t}function u(t){function z(E){var A,D,C,B=E?"start":"end";A=t[B+"Container"];D=t[B+"Offset"];if(A.nodeType==1&&A.nodeName=="TR"){C=A.childNodes;A=C[Math.min(E?D:D-1,C.length-1)];if(A){D=E?0:A.childNodes.length;t["set"+(E?"Start":"End")](A,D)}}}z(true);z();return t}function l(){var z=y.getRng(true),t=n.getRoot(),A={};function B(E,J){var D=E[J?"startContainer":"endContainer"],I=E[J?"startOffset":"endOffset"],C=[],F,H,G=0;if(D.nodeType==3){if(v){for(F=D.previousSibling;F&&F.nodeType==3;F=F.previousSibling){I+=F.nodeValue.length}}C.push(I)}else{H=D.childNodes;if(I>=H.length&&H.length){G=1;I=Math.max(0,H.length-1)}C.push(y.dom.nodeIndex(H[I],v)+G)}for(;D&&D!=t;D=D.parentNode){C.push(y.dom.nodeIndex(D,v))}return C}A.start=B(z,true);if(!y.isCollapsed()){A.end=B(z)}return A}if(s==2){if(y.tridentSel){return y.tridentSel.getBookmark(s)}return l()}if(s){return{rng:y.getRng()}}h=y.getRng();j=n.uniqueId();o=tinyMCE.activeEditor.selection.isCollapsed();x="overflow:hidden;line-height:0px";if(h.duplicate||h.item){if(!h.item){k=h.duplicate();try{h.collapse();h.pasteHTML(''+m+"");if(!o){k.collapse(false);h.moveToElementText(k.parentElement());if(h.compareEndPoints("StartToEnd",k)===0){k.move("character",-1)}k.pasteHTML(''+m+"")}}catch(r){return null}}else{p=h.item(0);i=p.nodeName;return{name:i,index:g(i,p)}}}else{p=y.getNode();i=p.nodeName;if(i=="IMG"){return{name:i,index:g(i,p)}}k=u(h.cloneRange());if(!o){k.collapse(false);k.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_end",style:x},m))}h=u(h);h.collapse(true);h.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_start",style:x},m))}y.moveToBookmark({id:j,keep:1});return{id:j}},moveToBookmark:function(o){var s=this,m=s.dom,j,i,g,r,k,u,p,q;function h(A){var t=o[A?"start":"end"],x,y,z,v;if(t){z=t[0];for(y=r,x=t.length-1;x>=1;x--){v=y.childNodes;if(t[x]>v.length-1){return}y=v[t[x]]}if(y.nodeType===3){z=Math.min(t[0],y.nodeValue.length)}if(y.nodeType===1){z=Math.min(t[0],y.childNodes.length)}if(A){g.setStart(y,z)}else{g.setEnd(y,z)}}return true}function l(B){var v=m.get(o.id+"_"+B),A,t,y,z,x=o.keep;if(v){A=v.parentNode;if(B=="start"){if(!x){t=m.nodeIndex(v)}else{A=v.firstChild;t=1}k=u=A;p=q=t}else{if(!x){t=m.nodeIndex(v)}else{A=v.firstChild;t=1}u=A;q=t}if(!x){z=v.previousSibling;y=v.nextSibling;e(d.grep(v.childNodes),function(C){if(C.nodeType==3){C.nodeValue=C.nodeValue.replace(/\uFEFF/g,"")}});while(v=m.get(o.id+"_"+B)){m.remove(v,1)}if(z&&y&&z.nodeType==y.nodeType&&z.nodeType==3&&!d.isOpera){t=z.nodeValue.length;z.appendData(y.nodeValue);m.remove(y);if(B=="start"){k=u=z;p=q=t}else{u=z;q=t}}}}}function n(t){if(m.isBlock(t)&&!t.innerHTML&&!b){t.innerHTML='
'}return t}if(o){if(o.start){g=m.createRng();r=m.getRoot();if(s.tridentSel){return s.tridentSel.moveToBookmark(o)}if(h(true)&&h()){s.setRng(g)}}else{if(o.id){l("start");l("end");if(k){g=m.createRng();g.setStart(n(k),p);g.setEnd(n(u),q);s.setRng(g)}}else{if(o.name){s.select(m.select(o.name)[o.index])}else{if(o.rng){s.setRng(o.rng)}}}}}},select:function(l,k){var j=this,m=j.dom,h=m.createRng(),g;function i(n,p){var o=new a(n,n);do{if(n.nodeType==3&&d.trim(n.nodeValue).length!==0){if(p){h.setStart(n,0)}else{h.setEnd(n,n.nodeValue.length)}return}if(n.nodeName=="BR"){if(p){h.setStartBefore(n)}else{h.setEndBefore(n)}return}}while(n=(p?o.next():o.prev()))}if(l){g=m.nodeIndex(l);h.setStart(l.parentNode,g);h.setEnd(l.parentNode,g+1);if(k){i(l,1);i(l)}j.setRng(h)}return l},isCollapsed:function(){var g=this,i=g.getRng(),h=g.getSel();if(!i||i.item){return false}if(i.compareEndPoints){return i.compareEndPoints("StartToEnd",i)===0}return !h||i.collapsed},collapse:function(g){var i=this,h=i.getRng(),j;if(h.item){j=h.item(0);h=i.win.document.body.createTextRange();h.moveToElementText(j)}h.collapse(!!g);i.setRng(h)},getSel:function(){var h=this,g=this.win;return g.getSelection?g.getSelection():g.document.selection},getRng:function(m){var h=this,j,g,l,k=h.win.document;if(m&&h.tridentSel){return h.tridentSel.getRangeAt(0)}try{if(j=h.getSel()){g=j.rangeCount>0?j.getRangeAt(0):(j.createRange?j.createRange():k.createRange())}}catch(i){}if(d.isIE&&g&&g.setStart&&k.selection.createRange().item){l=k.selection.createRange().item(0);g=k.createRange();g.setStartBefore(l);g.setEndAfter(l)}if(!g){g=k.createRange?k.createRange():k.body.createTextRange()}if(g.setStart&&g.startContainer.nodeType===9&&g.collapsed){l=h.dom.getRoot();g.setStart(l,0);g.setEnd(l,0)}if(h.selectedRange&&h.explicitRange){if(g.compareBoundaryPoints(g.START_TO_START,h.selectedRange)===0&&g.compareBoundaryPoints(g.END_TO_END,h.selectedRange)===0){g=h.explicitRange}else{h.selectedRange=null;h.explicitRange=null}}return g},setRng:function(k,g){var j,i=this;if(!i.tridentSel){j=i.getSel();if(j){i.explicitRange=k;try{j.removeAllRanges()}catch(h){}j.addRange(k);if(g===false&&j.extend){j.collapse(k.endContainer,k.endOffset);j.extend(k.startContainer,k.startOffset)}i.selectedRange=j.rangeCount>0?j.getRangeAt(0):null}}else{if(k.cloneRange){try{i.tridentSel.addRange(k);return}catch(h){}}try{k.select()}catch(h){}}},setNode:function(h){var g=this;g.setContent(g.dom.getOuterHTML(h));return h},getNode:function(){var i=this,h=i.getRng(),j=i.getSel(),m,l=h.startContainer,g=h.endContainer;function k(q,o){var p=q;while(q&&q.nodeType===3&&q.length===0){q=o?q.nextSibling:q.previousSibling}return q||p}if(!h){return i.dom.getRoot()}if(h.setStart){m=h.commonAncestorContainer;if(!h.collapsed){if(h.startContainer==h.endContainer){if(h.endOffset-h.startOffset<2){if(h.startContainer.hasChildNodes()){m=h.startContainer.childNodes[h.startOffset]}}}if(l.nodeType===3&&g.nodeType===3){if(l.length===h.startOffset){l=k(l.nextSibling,true)}else{l=l.parentNode}if(h.endOffset===0){g=k(g.previousSibling,false)}else{g=g.parentNode}if(l&&l===g){return l}}}if(m&&m.nodeType==3){return m.parentNode}return m}return h.item?h.item(0):h.parentElement()},getSelectedBlocks:function(p,h){var o=this,k=o.dom,m,l,i,j=[];m=k.getParent(p||o.getStart(),k.isBlock);l=k.getParent(h||o.getEnd(),k.isBlock);if(m){j.push(m)}if(m&&l&&m!=l){i=m;var g=new a(m,k.getRoot());while((i=g.next())&&i!=l){if(k.isBlock(i)){j.push(i)}}}if(l&&m!=l){j.push(l)}return j},isForward:function(){var i=this.dom,g=this.getSel(),j,h;if(!g||g.anchorNode==null||g.focusNode==null){return true}j=i.createRng();j.setStart(g.anchorNode,g.anchorOffset);j.collapse(true);h=i.createRng();h.setStart(g.focusNode,g.focusOffset);h.collapse(true);return j.compareBoundaryPoints(j.START_TO_START,h)<=0},normalize:function(){var h=this,g,m,l,j,i;function k(p){var o,r,n,s=h.dom,u=s.getRoot(),q,t,v;function y(z,A){var B=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(z=B[A?"prev":"next"]()){if(z.nodeName==="BR"){return true}}}function x(B,z){var C,A;z=z||o;C=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(q=C[B?"prev":"next"]()){if(q.nodeType===3&&q.nodeValue.length>0){o=q;r=B?q.nodeValue.length:0;m=true;return}if(s.isBlock(q)||t[q.nodeName.toLowerCase()]){return}A=q}if(l&&A){o=A;m=true;r=0}}o=g[(p?"start":"end")+"Container"];r=g[(p?"start":"end")+"Offset"];t=s.schema.getNonEmptyElements();if(o.nodeType===9){o=s.getRoot();r=0}if(o===u){if(p){q=o.childNodes[r>0?r-1:0];if(q){v=q.nodeName.toLowerCase();if(t[q.nodeName]||q.nodeName=="TABLE"){return}}}if(o.hasChildNodes()){o=o.childNodes[Math.min(!p&&r>0?r-1:r,o.childNodes.length-1)];r=0;if(o.hasChildNodes()&&!/TABLE/.test(o.nodeName)){q=o;n=new a(o,u);do{if(q.nodeType===3&&q.nodeValue.length>0){r=p?0:q.nodeValue.length;o=q;m=true;break}if(t[q.nodeName.toLowerCase()]){r=s.nodeIndex(q);o=q.parentNode;if(q.nodeName=="IMG"&&!p){r++}m=true;break}}while(q=(p?n.next():n.prev()))}}}if(l){if(o.nodeType===3&&r===0){x(true)}if(o.nodeType===1){q=o.childNodes[r];if(q&&q.nodeName==="BR"&&!y(q)&&!y(q,true)){x(true,o.childNodes[r])}}}if(p&&!l&&o.nodeType===3&&r===o.nodeValue.length){x(false)}if(m){g["set"+(p?"Start":"End")](o,r)}}if(d.isIE){return}g=h.getRng();l=g.collapsed;k(true);if(!l){k()}if(m){if(l){g.collapse(true)}h.setRng(g,h.isForward())}},selectorChanged:function(g,j){var h=this,i;if(!h.selectorChangedData){h.selectorChangedData={};i={};h.editor.onNodeChange.addToTop(function(l,k,o){var p=h.dom,m=p.getParents(o,null,p.getRoot()),n={};e(h.selectorChangedData,function(r,q){e(m,function(s){if(p.is(s,q)){if(!i[q]){e(r,function(t){t(true,{node:s,selector:q,parents:m})});i[q]=r}n[q]=r;return false}})});e(i,function(r,q){if(!n[q]){delete i[q];e(r,function(s){s(false,{node:o,selector:q,parents:m})})}})})}if(!h.selectorChangedData[g]){h.selectorChangedData[g]=[]}h.selectorChangedData[g].push(j);return h},destroy:function(h){var g=this;g.win=null;if(!h){d.removeUnload(g.destroy)}},_fixIESelection:function(){var h=this.dom,n=h.doc,i=n.body,k,o,g;function j(p,s){var q=i.createTextRange();try{q.moveToPoint(p,s)}catch(r){q=null}return q}function m(q){var p;if(q.button){p=j(q.x,q.y);if(p){if(p.compareEndPoints("StartToStart",o)>0){p.setEndPoint("StartToStart",o)}else{p.setEndPoint("EndToEnd",o)}p.select()}}else{l()}}function l(){var p=n.selection.createRange();if(o&&!p.item&&p.compareEndPoints("StartToEnd",p)===0){o.select()}h.unbind(n,"mouseup",l);h.unbind(n,"mousemove",m);o=k=0}n.documentElement.unselectable=true;h.bind(n,["mousedown","contextmenu"],function(p){if(p.target.nodeName==="HTML"){if(k){l()}g=n.documentElement;if(g.scrollHeight>g.clientHeight){return}k=1;o=j(p.x,p.y);if(o){h.bind(n,"mouseup",l);h.bind(n,"mousemove",m);h.win.focus();o.select()}}})}})})(tinymce);(function(a){a.dom.Serializer=function(e,i,f){var h,b,d=a.isIE,g=a.each,c;if(!e.apply_source_formatting){e.indent=false}i=i||a.DOM;f=f||new a.html.Schema(e);e.entity_encoding=e.entity_encoding||"named";e.remove_trailing_brs="remove_trailing_brs" in e?e.remove_trailing_brs:true;h=new a.util.Dispatcher(self);b=new a.util.Dispatcher(self);c=new a.html.DomParser(e,f);c.addAttributeFilter("src,href,style",function(k,j){var o=k.length,l,q,n="data-mce-"+j,p=e.url_converter,r=e.url_converter_scope,m;while(o--){l=k[o];q=l.attributes.map[n];if(q!==m){l.attr(j,q.length>0?q:null);l.attr(n,null)}else{q=l.attributes.map[j];if(j==="style"){q=i.serializeStyle(i.parseStyle(q),l.name)}else{if(p){q=p.call(r,q,j,l.name)}}l.attr(j,q.length>0?q:null)}}});c.addAttributeFilter("class",function(j,k){var l=j.length,m,n;while(l--){m=j[l];n=m.attr("class").replace(/(?:^|\s)mce(Item\w+|Selected)(?!\S)/g,"");m.attr("class",n.length>0?n:null)}});c.addAttributeFilter("data-mce-type",function(j,l,k){var m=j.length,n;while(m--){n=j[m];if(n.attributes.map["data-mce-type"]==="bookmark"&&!k.cleanup){n.remove()}}});c.addAttributeFilter("data-mce-expando",function(j,l,k){var m=j.length;while(m--){j[m].attr(l,null)}});c.addNodeFilter("noscript",function(j){var k=j.length,l;while(k--){l=j[k].firstChild;if(l){l.value=a.html.Entities.decode(l.value)}}});c.addNodeFilter("script,style",function(k,l){var m=k.length,n,o;function j(p){return p.replace(/()/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}while(m--){n=k[m];o=n.firstChild?n.firstChild.value:"";if(l==="script"){n.attr("type",(n.attr("type")||"text/javascript").replace(/^mce\-/,""));if(o.length>0){n.firstChild.value="// "}}else{if(o.length>0){n.firstChild.value=""}}}});c.addNodeFilter("#comment",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.value.indexOf("[CDATA[")===0){m.name="#cdata";m.type=4;m.value=m.value.replace(/^\[CDATA\[|\]\]$/g,"")}else{if(m.value.indexOf("mce:protected ")===0){m.name="#text";m.type=3;m.raw=true;m.value=unescape(m.value).substr(14)}}}});c.addNodeFilter("xml:namespace,input",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.type===7){m.remove()}else{if(m.type===1){if(k==="input"&&!("type" in m.attributes.map)){m.attr("type","text")}}}}});if(e.fix_list_elements){c.addNodeFilter("ul,ol",function(k,l){var m=k.length,n,j;while(m--){n=k[m];j=n.parent;if(j.name==="ul"||j.name==="ol"){if(n.prev&&n.prev.name==="li"){n.prev.append(n)}}}})}c.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style",function(j,k){var l=j.length;while(l--){j[l].attr(k,null)}});return{schema:f,addNodeFilter:c.addNodeFilter,addAttributeFilter:c.addAttributeFilter,onPreProcess:h,onPostProcess:b,serialize:function(o,m){var l,p,k,j,n;if(d&&i.select("script,style,select,map").length>0){n=o.innerHTML;o=o.cloneNode(false);i.setHTML(o,n)}else{o=o.cloneNode(true)}l=o.ownerDocument.implementation;if(l.createHTMLDocument){p=l.createHTMLDocument("");g(o.nodeName=="BODY"?o.childNodes:[o],function(q){p.body.appendChild(p.importNode(q,true))});if(o.nodeName!="BODY"){o=p.body.firstChild}else{o=p.body}k=i.doc;i.doc=p}m=m||{};m.format=m.format||"html";if(!m.no_events){m.node=o;h.dispatch(self,m)}j=new a.html.Serializer(e,f);m.content=j.serialize(c.parse(a.trim(m.getInner?o.innerHTML:i.getOuterHTML(o)),m));if(!m.cleanup){m.content=m.content.replace(/\uFEFF/g,"")}if(!m.no_events){b.dispatch(self,m)}if(k){i.doc=k}m.node=null;return m.content},addRules:function(j){f.addValidElements(j)},setRules:function(j){f.setValidElements(j)}}}})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],e={},d=[],g=0,f;function b(m,v){var x=this,q=a.DOM,s,o,r,n;function p(){q.remove(n);if(s){s.onreadystatechange=s.onload=s=null}v()}function u(){if(typeof(console)!=="undefined"&&console.log){console.log("Failed to load: "+m)}}n=q.uniqueId();if(a.isIE6){o=new a.util.URI(m);r=location;if(o.host==r.hostname&&o.port==r.port&&(o.protocol+":")==r.protocol&&o.protocol.toLowerCase()!="file"){a.util.XHR.send({url:a._addVer(o.getURI()),success:function(y){var t=q.create("script",{type:"text/javascript"});t.text=y;document.getElementsByTagName("head")[0].appendChild(t);q.remove(t);p()},error:u});return}}s=document.createElement("script");s.id=n;s.type="text/javascript";s.src=a._addVer(m);if(!a.isIE){s.onload=p}s.onerror=u;if(!a.isOpera){s.onreadystatechange=function(){var t=s.readyState;if(t=="complete"||t=="loaded"){p()}}}(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}this.isDone=function(m){return l[m]==i};this.markDone=function(m){l[m]=i};this.add=this.load=function(m,q,n){var o,p=l[m];if(p==f){j.push(m);l[m]=c}if(q){if(!e[m]){e[m]=[]}e[m].push({func:q,scope:n||this})}};this.loadQueue=function(n,m){this.loadScripts(j,n,m)};this.loadScripts=function(m,q,p){var o;function n(r){a.each(e[r],function(s){s.func.call(s.scope)});e[r]=f}d.push({func:q,scope:p||this});o=function(){var r=a.grep(m);m.length=0;a.each(r,function(s){if(l[s]==i){n(s);return}if(l[s]!=k){l[s]=k;g++;b(s,function(){l[s]=i;g--;n(s);o()})}});if(!g){a.each(d,function(s){s.func.call(s.scope)});d.length=0}};o()}};a.ScriptLoader=new a.dom.ScriptLoader()})(tinymce);(function(a){a.dom.RangeUtils=function(c){var b="\uFEFF";this.walk=function(d,s){var i=d.startContainer,l=d.startOffset,t=d.endContainer,m=d.endOffset,j,g,o,h,r,q,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(u){s([u])});return}function f(u){var v;v=u[0];if(v.nodeType===3&&v===i&&l>=v.nodeValue.length){u.splice(0,1)}v=u[u.length-1];if(m===0&&u.length>0&&v===t&&v.nodeType===3){u.splice(u.length-1,1)}return u}function p(x,v,u){var y=[];for(;x&&x!=u;x=x[v]){y.push(x)}return y}function n(v,u){do{if(v.parentNode==u){return v}v=v.parentNode}while(v)}function k(x,v,y){var u=y?"nextSibling":"previousSibling";for(h=x,r=h.parentNode;h&&h!=v;h=r){r=h.parentNode;q=p(h==x?h:h[u],u);if(q.length){if(!y){q.reverse()}s(f(q))}}}if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[l]}if(t.nodeType==1&&t.hasChildNodes()){t=t.childNodes[Math.min(m-1,t.childNodes.length-1)]}if(i==t){return s(f([i]))}j=c.findCommonAncestor(i,t);for(h=i;h;h=h.parentNode){if(h===t){return k(i,j,true)}if(h===j){break}}for(h=t;h;h=h.parentNode){if(h===i){return k(t,j)}if(h===j){break}}g=n(i,j)||i;o=n(t,j)||t;k(i,g,true);q=p(g==i?g:g.nextSibling,"nextSibling",o==t?o.nextSibling:o);if(q.length){s(f(q))}k(t,o)};this.split=function(e){var h=e.startContainer,d=e.startOffset,i=e.endContainer,g=e.endOffset;function f(j,k){return j.splitText(k)}if(h==i&&h.nodeType==3){if(d>0&&dd){g=g-d;h=i=f(i,g).previousSibling;g=i.nodeValue.length;d=0}else{g=0}}}else{if(h.nodeType==3&&d>0&&d0&&g=m.length){r=0}}t=m[r];f.setAttrib(g,"tabindex","-1");f.setAttrib(t.id,"tabindex","0");f.get(t.id).focus();if(e.actOnFocus){e.onAction(t.id)}if(s){a.cancel(s)}};p=function(z){var v=37,u=39,y=38,A=40,r=27,t=14,s=13,x=32;switch(z.keyCode){case v:if(i){q.moveFocus(-1)}break;case u:if(i){q.moveFocus(1)}break;case y:if(o){q.moveFocus(-1)}break;case A:if(o){q.moveFocus(1)}break;case r:if(e.onCancel){e.onCancel();a.cancel(z)}break;case t:case s:case x:if(e.onAction){e.onAction(g);a.cancel(z)}break}};c(m,function(t,r){var s,u;if(!t.id){t.id=f.uniqueId("_mce_item_")}u=f.get(t.id);if(l){f.bind(u,"blur",h);s="-1"}else{s=(r===0?"0":"-1")}u.setAttribute("tabindex",s);f.bind(u,"focus",k)});if(m[0]){g=m[0].id}f.setAttrib(n,"tabindex","-1");var j=f.get(n);f.bind(j,"focus",d);f.bind(j,"keydown",p)}})})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(f,e,d){this.id=f;this.settings=e=e||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=e.scope||this;this.disabled=0;this.active=0;this.editor=d},setAriaProperty:function(f,e){var d=b.get(this.id+"_aria")||b.get(this.id);if(d){b.setAttrib(d,"aria-"+f,!!e)}},focus:function(){b.get(this.id).focus()},setDisabled:function(d){if(d!=this.disabled){this.setAriaProperty("disabled",d);this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d;this.setAriaProperty("pressed",d)}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(c,b,a){this.parent(c,b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator";this.setDisabled(true)},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix,role:"separator","aria-orientation":"vertical",tabindex:"-1"})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.setAriaProperty("checked",!!f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;j.keyboard_focus=i.keyboard_focus;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},focus:function(){var g=this;if(g.keyboardNav){g.keyboardNav.focus()}},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.offsetWidth,j.max_width):g.offsetWidth;k=j.max_height?Math.min(g.offsetHeight,j.max_height):g.offsetHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeightv){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return false}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(x){var h,t,s;x=x.target;if(x&&(x=c.getParent(x,"tr"))){h=z.items[x.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(x&&c.hasClass(x,m+"ItemSub")){t=c.getRect(x);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}a.add(o,"keydown",z._keyHandler,z);z.onShowMenu.dispatch(z);if(A.keyboard_focus){z._setupKeyboardNav()}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(h,"mouseover",g.mouseOverFunc);a.remove(c.select("a",h),"focus",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);a.remove(h,"keydown",g._keyHandler);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{role:"listbox",id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000;outline:0"});if(i.settings.parent){c.setAttrib(g,"aria-parent","menu_"+i.settings.parent.id)}k=c.add(g,"div",{role:"presentation",id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{role:"presentation",id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_setupKeyboardNav:function(){var i,h,g=this;i=c.get("menu_"+g.id);h=c.select("a[role=option]","menu_"+g.id);h.splice(0,0,i);g.keyboardNav=new e.ui.KeyboardNavigation({root:"menu_"+g.id,items:h,onCancel:function(){g.hideMenu()},enableUpDown:true});i.focus()},_keyHandler:function(g){var h=this,i;switch(g.keyCode){case 37:if(h.settings.parent){h.hideMenu();h.settings.parent.focus();a.cancel(g)}break;case 39:if(h.mouseOverFunc){h.mouseOverFunc(g)}break}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,q.titleItem?"th":"td");i=p=c.add(i,"a",{id:h.id+"_aria",role:q.titleItem?"presentation":"option",href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});if(q.parent){c.setAttrib(p,"aria-haspopup","true");c.setAttrib(p,"aria-owns","menu_"+h.id)}c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){if(typeof h.settings.style=="function"){h.settings.style=h.settings.style()}c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(e,d,c){this.parent(e,d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='';if(e.image&&!(this.editor&&this.editor.forcedHighContrastMode)){d+=''+a.encode(e.title)+''+(c?''+c+"":"")}else{d+=''+(c?''+c+"":"")}d+='";d+="";return d},postRender:function(){var d=this,e=d.settings,c;if(b.isIE&&d.editor){b.dom.Event.add(d.id,"mousedown",function(f){var g=d.editor.selection.getNode().nodeName;c=g==="IMG"?d.editor.selection.getBookmark():null})}b.dom.Event.add(d.id,"click",function(f){if(!d.isDisabled()){if(b.isIE&&d.editor&&c!==null){d.editor.selection.moveToBookmark(c)}return e.onclick.call(e.scope,f)}});b.dom.Event.add(d.id,"keyup",function(f){if(!d.isDisabled()&&f.keyCode==b.VK.SPACEBAR){return e.onclick.call(e.scope,f)}})}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(j,i,g){var h=this;h.parent(j,i,g);h.items=[];h.onChange=new a(h);h.onPostRender=new a(h);h.onAdd=new a(h);h.onRenderMenu=new e.util.Dispatcher(this);h.classPrefix="mceListBox";h.marked={}},select:function(h){var g=this,j,i;g.marked={};if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){var i=this,j,k,h;i.marked={};if(g!=i.selectedIndex){j=d.get(i.id+"_text");h=d.get(i.id+"_voiceDesc");k=i.items[g];if(k){i.selectedValue=k.value;i.selectedIndex=g;d.setHTML(j,d.encode(k.title));d.setHTML(h,i.settings.title+" - "+k.title);d.removeClass(j,"mceTitle");d.setAttrib(i.id,"aria-valuenow",k.title)}else{d.setHTML(j,d.encode(i.settings.title));d.setHTML(h,d.encode(i.settings.title));d.addClass(j,"mceTitle");i.selectedValue=i.selectedIndex=null;d.setAttrib(i.id,"aria-valuenow",i.settings.title)}j=0}},mark:function(g){this.marked[g]=true},add:function(j,g,i){var h=this;i=i||{};i=e.extend(i,{title:j,value:g});h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var j="",g=this,i=g.settings,k=g.classPrefix;j='';j+="";j+="";j+="";return j},showMenu:function(){var h=this,j,i=d.get(this.id),g;if(h.isDisabled()||h.items.length===0){return}if(h.menu&&h.menu.isMenuVisible){return h.hideMenu()}if(!h.isMenuRendered){h.renderMenu();h.isMenuRendered=true}j=d.getPos(i);g=h.menu;g.settings.offset_x=j.x;g.settings.offset_y=j.y;g.settings.keyboard_focus=!e.isOpera;f(h.items,function(k){if(g.items[k.id]){g.items[k.id].setSelected(0)}});f(h.items,function(k){if(g.items[k.id]&&h.marked[k.value]){g.items[k.id].setSelected(1)}if(k.value===h.selectedValue){g.items[k.id].setSelected(1)}});g.showMenu(0,i.clientHeight);b.add(d.doc,"mousedown",h.hideMenu,h);d.addClass(h.id,h.classPrefix+"Selected")},hideMenu:function(h){var g=this;if(g.menu&&g.menu.isMenuVisible){d.removeClass(g.id,g.classPrefix+"Selected");if(h&&h.type=="mousedown"&&(h.target.id==g.id+"_text"||h.target.id==g.id+"_open")){return}if(!h||!d.getParent(h.target,".mceMenu")){d.removeClass(g.id,g.classPrefix+"Selected");b.remove(d.doc,"mousedown",g.hideMenu,g);g.menu.hideMenu()}}},renderMenu:function(){var h=this,g;g=h.settings.control_manager.createDropMenu(h.id+"_menu",{menu_line:1,"class":h.classPrefix+"Menu mceNoIcons",max_width:250,max_height:150});g.onHideMenu.add(function(){h.hideMenu();h.focus()});g.add({title:h.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}});f(h.items,function(i){if(i.value===c){g.add({title:i.title,role:"option","class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}})}else{i.id=d.uniqueId();i.role="option";i.onclick=function(){if(h.settings.onselect(i.value)!==false){h.select(i.value)}};g.add(i)}});h.onRenderMenu.dispatch(h,g);h.menu=g},postRender:function(){var g=this,h=g.classPrefix;b.add(g.id,"click",g.showMenu,g);b.add(g.id,"keydown",function(i){if(i.keyCode==32){g.showMenu(i);b.cancel(i)}});b.add(g.id,"focus",function(){if(!g._focused){g.keyDownHandler=b.add(g.id,"keydown",function(i){if(i.keyCode==40){g.showMenu();b.cancel(i)}});g.keyPressHandler=b.add(g.id,"keypress",function(j){var i;if(j.keyCode==13){i=g.selectedValue;g.selectedValue=null;b.cancel(j);g.settings.onselect(i)}})}g._focused=1});b.add(g.id,"blur",function(){b.remove(g.id,"keydown",g.keyDownHandler);b.remove(g.id,"keypress",g.keyPressHandler);g._focused=0});if(e.isIE6||!d.boxModel){b.add(g.id,"mouseover",function(){if(!d.hasClass(g.id,h+"Disabled")){d.addClass(g.id,h+"Hover")}});b.add(g.id,"mouseout",function(){if(!d.hasClass(g.id,h+"Disabled")){d.removeClass(g.id,h+"Hover")}})}g.onPostRender.dispatch(g,d.get(g.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(h,g){this.parent(h,g);this.classPrefix="mceNativeListBox"},setDisabled:function(g){d.get(this.id).disabled=g;this.setAriaProperty("disabled",g)},isDisabled:function(){return d.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){d.get(this.id).selectedIndex=g+1;this.selectedValue=this.items[g]?this.items[g].value:null},add:function(k,h,g){var j,i=this;g=g||{};g.value=h;if(i.isRendered()){d.add(d.get(this.id),"option",g,k)}j={title:k,value:h,attribs:g};i.items.push(j);i.onAdd.dispatch(i,j)},getLength:function(){return this.items.length},renderHTML:function(){var i,g=this;i=d.createHTML("option",{value:""},"-- "+g.settings.title+" --");f(g.items,function(h){i+=d.createHTML("option",{value:h.value},h.title)});i=d.createHTML("select",{id:g.id,"class":"mceNativeListBox","aria-labelledby":g.id+"_aria"},i);i+=d.createHTML("span",{id:g.id+"_aria",style:"display: none"},g.settings.title);return i},postRender:function(){var h=this,i,j=true;h.rendered=true;function g(l){var k=h.items[l.target.selectedIndex-1];if(k&&(k=k.value)){h.onChange.dispatch(h,k);if(h.settings.onselect){h.settings.onselect(k)}}}b.add(h.id,"change",g);b.add(h.id,"keydown",function(l){var k;b.remove(h.id,"change",i);j=false;k=b.add(h.id,"blur",function(){if(j){return}j=true;b.add(h.id,"change",g);b.remove(h.id,"blur",k)});if(e.isWebKit&&(l.keyCode==37||l.keyCode==39)){return b.prevent(l)}if(l.keyCode==13||l.keyCode==32){g(l);return b.cancel(l)}});h.onPostRender.dispatch(h,d.get(h.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(g,f,e){this.parent(g,f,e);this.onRenderMenu=new c.util.Dispatcher(this);f.menu_container=f.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.firstChild.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(function(){f.hideMenu();f.focus()});f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(g,f,e){this.parent(g,f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="";if(g.image){e=b.createHTML("img ",{src:g.image,role:"presentation","class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}e+=b.createHTML("span",{"class":"mceVoiceLabel mceIconOnly",id:f.id+"_voice",style:"display:none;"},g.title);i+=""+b.createHTML("a",{role:"button",id:f.id+"_action",tabindex:"-1",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"";e=b.createHTML("span",{"class":"mceOpen "+g["class"]},'');i+=""+b.createHTML("a",{role:"button",id:f.id+"_open",tabindex:"-1",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"";i+="";i=b.createHTML("table",{role:"presentation","class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",title:g.title},i);return b.createHTML("div",{id:f.id,role:"button",tabindex:"0","aria-labelledby":f.id+"_voice","aria-haspopup":"true"},i)},postRender:function(){var e=this,g=e.settings,f;if(g.onclick){f=function(h){if(!e.isDisabled()){g.onclick(e.value);a.cancel(h)}};a.add(e.id+"_action","click",f);a.add(e.id,["click","keydown"],function(h){var k=32,m=14,i=13,j=38,l=40;if((h.keyCode===32||h.keyCode===13||h.keyCode===14)&&!h.altKey&&!h.ctrlKey&&!h.metaKey){f();a.cancel(h)}else{if(h.type==="click"||h.keyCode===l){e.showMenu();a.cancel(h)}}})}a.add(e.id+"_open","click",function(h){e.showMenu();a.cancel(h)});a.add([e.id,e.id+"_open"],"focus",function(){e._focused=1});a.add([e.id,e.id+"_open"],"blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open");a.clear(this.id)}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(i,h,f){var g=this;g.parent(i,h,f);g.settings=h=d.extend({colors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",grid_width:8,default_color:"#888888"},g.settings);g.onShowMenu=new d.util.Dispatcher(g);g.onHideMenu=new d.util.Dispatcher(g);g.value=h.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.firstChild.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.keyboardNav=new d.ui.KeyboardNavigation({root:f.id+"_menu",items:c.select("a",f.id+"_menu"),onCancel:function(){f.hideMenu();f.focus()}});f.keyboardNav.focus();f.isMenuVisible=1},hideMenu:function(g){var f=this;if(f.isMenuVisible){if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.isMenuVisible=0;f.onHideMenu.dispatch();f.keyboardNav.destroy()}},renderMenu:function(){var p=this,h,k=0,q=p.settings,g,j,l,o,f;o=c.add(q.menu_container,"div",{role:"listbox",id:p.id+"_menu","class":q.menu_class+" "+q["class"],style:"position:absolute;left:0;top:-1000px;"});h=c.add(o,"div",{"class":q["class"]+" mceSplitButtonMenu"});c.add(h,"span",{"class":"mceMenuLine"});g=c.add(h,"table",{role:"presentation","class":"mceColorSplitMenu"});j=c.add(g,"tbody");k=0;e(b(q.colors,"array")?q.colors:q.colors.split(","),function(m){m=m.replace(/^#/,"");if(!k--){l=c.add(j,"tr");k=q.grid_width-1}g=c.add(l,"td");var i={href:"javascript:;",style:{backgroundColor:"#"+m},title:p.editor.getLang("colors."+m,m),"data-mce-color":"#"+m};if(!d.isIE){i.role="option"}g=c.add(g,"a",i);if(p.editor.forcedHighContrastMode){g=c.add(g,"canvas",{width:16,height:16,"aria-hidden":"true"});if(g.getContext&&(f=g.getContext("2d"))){f.fillStyle="#"+m;f.fillRect(0,0,16,16)}else{c.remove(g)}}});if(q.more_colors_func){g=c.add(j,"tr");g=c.add(g,"td",{colspan:q.grid_width,"class":"mceMoreColors"});g=c.add(g,"a",{role:"option",id:p.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},q.more_colors_title);a.add(g,"click",function(i){q.more_colors_func.call(q.more_colors_scope||this);return a.cancel(i)})}c.addClass(h,"mceColorSplitMenu");a.add(p.id+"_menu","mousedown",function(i){return a.cancel(i)});a.add(p.id+"_menu","click",function(i){var m;i=c.getParent(i.target,"a",j);if(i&&i.nodeName.toLowerCase()=="a"&&(m=i.getAttribute("data-mce-color"))){p.setColor(m)}return false});return o},setColor:function(f){this.displayColor(f);this.hideMenu();this.settings.onselect(f)},displayColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){var f=this;f.parent();a.clear(f.id+"_menu");a.clear(f.id+"_more");c.remove(f.id+"_menu");if(f.keyboardNav){f.keyboardNav.destroy()}}})})(tinymce);(function(b){var d=b.DOM,c=b.each,a=b.dom.Event;b.create("tinymce.ui.ToolbarGroup:tinymce.ui.Container",{renderHTML:function(){var f=this,i=[],e=f.controls,j=b.each,g=f.settings;i.push('
');i.push("");i.push('");j(e,function(h){i.push(h.renderHTML())});i.push("");i.push("
");return i.join("")},focus:function(){var e=this;d.get(e.id).focus()},postRender:function(){var f=this,e=[];c(f.controls,function(g){c(g.controls,function(h){if(h.id){e.push(h)}})});f.keyNav=new b.ui.KeyboardNavigation({root:f.id,items:e,onCancel:function(){if(b.isWebKit){d.get(f.editor.id+"_ifr").focus()}f.editor.focus()},excludeFromTabOrder:!f.settings.tab_focus_toolbar})},destroy:function(){var e=this;e.parent();e.keyNav.destroy();a.clear(e.id)}})})(tinymce);(function(a){var c=a.DOM,b=a.each;a.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var m=this,f="",j,k,n=m.settings,e,d,g,l;l=m.controls;for(e=0;e"))}if(d&&k.ListBox){if(d.Button||d.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarEnd"},c.createHTML("span",null,""))}}if(c.stdMode){f+=''+k.renderHTML()+""}else{f+=""+k.renderHTML()+""}if(g&&k.ListBox){if(g.Button||g.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarStart"},c.createHTML("span",null,""))}}}j="mceToolbarEnd";if(k.Button){j+=" mceToolbarEndButton"}else{if(k.SplitButton){j+=" mceToolbarEndSplitButton"}else{if(k.ListBox){j+=" mceToolbarEndListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,""));return c.createHTML("table",{id:m.id,"class":"mceToolbar"+(n["class"]?" "+n["class"]:""),cellpadding:"0",cellspacing:"0",align:m.settings.align||"",role:"presentation",tabindex:"-1"},""+f+"")}})})(tinymce);(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{AddOnManager:function(){var d=this;d.items=[];d.urls={};d.lookup={};d.onAdd=new a(d)},get:function(d){if(this.lookup[d]){return this.lookup[d].instance}else{return undefined}},dependencies:function(e){var d;if(this.lookup[e]){d=this.lookup[e].dependencies}return d||[]},requireLangPack:function(e){var d=b.settings;if(d&&d.language&&d.language_load!==false){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(f,e,d){this.items.push(e);this.lookup[f]={instance:e,dependencies:d};this.onAdd.dispatch(this,f,e);return e},createUrl:function(d,e){if(typeof e==="object"){return e}else{return{prefix:d.prefix,resource:e,suffix:d.suffix}}},addComponents:function(f,d){var e=this.urls[f];b.each(d,function(g){b.ScriptLoader.add(e+"/"+g)})},load:function(j,f,d,h){var g=this,e=f;function i(){var k=g.dependencies(j);b.each(k,function(m){var l=g.createUrl(f,m);g.load(l.resource,l,undefined,undefined)});if(d){if(h){d.call(h)}else{d.call(b.ScriptLoader)}}}if(g.urls[j]){return}if(typeof f==="object"){e=f.prefix+f.resource+f.suffix}if(e.indexOf("/")!==0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}g.urls[j]=e.substring(0,e.lastIndexOf("/"));if(g.lookup[j]){i()}else{b.ScriptLoader.add(e,i,h)}}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(x){var v=this,o,n=j.ScriptLoader,u,l=[],r;function q(t){var s=t.id;if(!s){s=t.name;if(s&&!k.get(s)){s=t.name}else{s=k.uniqueId()}t.setAttribute("id",s)}return s}function m(z,A,t){var y=z[A];if(!y){return}if(j.is(y,"string")){t=y.replace(/\.\w+$/,"");t=t?j.resolve(t):0;y=j.resolve(y)}return y.apply(t||this,Array.prototype.slice.call(arguments,2))}function p(t,s){return s.constructor===RegExp?s.test(t.className):k.hasClass(t,s)}v.settings=x;i.bind(window,"ready",function(){var s,t;m(x,"onpageload");switch(x.mode){case"exact":s=x.elements||"";if(s.length>0){g(e(s),function(y){if(k.get(y)){r=new j.Editor(y,x);l.push(r);r.render(1)}else{g(document.forms,function(z){g(z.elements,function(A){if(A.name===y){y="mce_editor_"+c++;k.setAttrib(A,"id",y);r=new j.Editor(y,x);l.push(r);r.render(1)}})})}})}break;case"textareas":case"specific_textareas":g(k.select("textarea"),function(y){if(x.editor_deselector&&p(y,x.editor_deselector)){return}if(!x.editor_selector||p(y,x.editor_selector)){r=new j.Editor(q(y),x);l.push(r);r.render(1)}});break;default:if(x.types){g(x.types,function(y){g(k.select(y.selector),function(A){var z=new j.Editor(q(A),j.extend({},x,y));l.push(z);z.render(1)})})}else{if(x.selector){g(k.select(x.selector),function(z){var y=new j.Editor(q(z),x);l.push(y);y.render(1)})}}}if(x.oninit){s=t=0;g(l,function(y){t++;if(!y.initialized){y.onInit.add(function(){s++;if(s==t){m(x,"oninit")}})}else{s++}if(s==t){m(x,"oninit")}})}})},get:function(l){if(l===a){return this.editors}if(!this.editors.hasOwnProperty(l)){return a}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l':"",visual:n,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",apply_source_formatting:n,directionality:"ltr",forced_root_block:"p",hidden_input:n,padd_empty_editor:n,render_ui:n,indentation:"30px",fix_table_elements:n,inline_styles:n,convert_fonts_to_spans:n,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:n,entity_encoding:"named",url_converter:m.convertURL,url_converter_scope:m,ie7_compat:n},o);m.id=m.editorId=p;m.isNotDirty=false;m.plugins={};m.documentBaseURI=new k.util.URI(o.document_base_url||k.documentBaseURL,{base_uri:tinyMCE.baseURI});m.baseURI=k.baseURI;m.contentCSS=[];m.contentStyles=[];m.setupEvents();m.execCommands={};m.queryStateCommands={};m.queryValueCommands={};m.execCallback("setup",m)},render:function(o){var p=this,q=p.settings,r=p.id,m=k.ScriptLoader;if(!j.domLoaded){j.add(window,"ready",function(){p.render()});return}tinyMCE.settings=q;if(!p.getElement()){return}if(k.isIDevice&&!k.isIOS5){return}if(!/TEXTAREA|INPUT/i.test(p.getElement().nodeName)&&q.hidden_input&&l.getParent(r,"form")){l.insertAfter(l.create("input",{type:"hidden",name:r}),r)}if(!q.content_editable){p.orgVisibility=p.getElement().style.visibility;p.getElement().style.visibility="hidden"}if(k.WindowManager){p.windowManager=new k.WindowManager(p)}if(q.encoding=="xml"){p.onGetContent.add(function(s,t){if(t.save){t.content=l.encode(t.content)}})}if(q.add_form_submit_trigger){p.onSubmit.addToTop(function(){if(p.initialized){p.save();p.isNotDirty=1}})}if(q.add_unload_trigger){p._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(p.initialized&&!p.destroyed&&!p.isHidden()){p.save({format:"raw",no_events:true})}})}k.addUnload(p.destroy,p);if(q.submit_patch){p.onBeforeRenderUI.add(function(){var s=p.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){p.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){k.triggerSave();p.isNotDirty=1;return p.formElement._mceOldSubmit(p.formElement)}}s=null})}function n(){if(q.language&&q.language_load!==false){m.add(k.baseURL+"/langs/"+q.language+".js")}if(q.theme&&typeof q.theme!="function"&&q.theme.charAt(0)!="-"&&!h.urls[q.theme]){h.load(q.theme,"themes/"+q.theme+"/editor_template"+k.suffix+".js")}i(g(q.plugins),function(t){if(t&&!c.urls[t]){if(t.charAt(0)=="-"){t=t.substr(1,t.length);var s=c.dependencies(t);i(s,function(v){var u={prefix:"plugins/",resource:v,suffix:"/editor_plugin"+k.suffix+".js"};v=c.createUrl(u,v);c.load(v.resource,v)})}else{if(t=="safari"){return}c.load(t,{prefix:"plugins/",resource:t,suffix:"/editor_plugin"+k.suffix+".js"})}}});m.loadQueue(function(){if(!p.removed){p.init()}})}n()},init:function(){var q,G=this,H=G.settings,D,y,z,C=G.getElement(),p,m,E,v,B,F,x,r=[];k.add(G);H.aria_label=H.aria_label||l.getAttrib(C,"aria-label",G.getLang("aria.rich_text_area"));if(H.theme){if(typeof H.theme!="function"){H.theme=H.theme.replace(/-/,"");p=h.get(H.theme);G.theme=new p();if(G.theme.init){G.theme.init(G,h.urls[H.theme]||k.documentBaseURL.replace(/\/$/,""))}}else{G.theme=H.theme}}function A(s){var t=c.get(s),o=c.urls[s]||k.documentBaseURL.replace(/\/$/,""),n;if(t&&k.inArray(r,s)===-1){i(c.dependencies(s),function(u){A(u)});n=new t(G,o);G.plugins[s]=n;if(n.init){n.init(G,o);r.push(s)}}}i(g(H.plugins.replace(/\-/g,"")),A);if(H.popup_css!==false){if(H.popup_css){H.popup_css=G.documentBaseURI.toAbsolute(H.popup_css)}else{H.popup_css=G.baseURI.toAbsolute("themes/"+H.theme+"/skins/"+H.skin+"/dialog.css")}}if(H.popup_css_add){H.popup_css+=","+G.documentBaseURI.toAbsolute(H.popup_css_add)}G.controlManager=new k.ControlManager(G);G.onBeforeRenderUI.dispatch(G,G.controlManager);if(H.render_ui&&G.theme){G.orgDisplay=C.style.display;if(typeof H.theme!="function"){D=H.width||C.style.width||C.offsetWidth;y=H.height||C.style.height||C.offsetHeight;z=H.min_height||100;F=/^[0-9\.]+(|px)$/i;if(F.test(""+D)){D=Math.max(parseInt(D,10)+(p.deltaWidth||0),100)}if(F.test(""+y)){y=Math.max(parseInt(y,10)+(p.deltaHeight||0),z)}p=G.theme.renderUI({targetNode:C,width:D,height:y,deltaWidth:H.delta_width,deltaHeight:H.delta_height});l.setStyles(p.sizeContainer||p.editorContainer,{width:D,height:y});y=(p.iframeHeight||y)+(typeof(y)=="number"?(p.deltaHeight||0):"");if(y';if(H.document_base_url!=k.documentBaseURL){G.iframeHTML+=''}if(H.ie7_compat){G.iframeHTML+=''}else{G.iframeHTML+=''}G.iframeHTML+='';for(x=0;x'}G.contentCSS=[];v=H.body_id||"tinymce";if(v.indexOf("=")!=-1){v=G.getParam("body_id","","hash");v=v[G.id]||v}B=H.body_class||"";if(B.indexOf("=")!=-1){B=G.getParam("body_class","","hash");B=B[G.id]||""}G.iframeHTML+='
";if(k.relaxedDomain&&(b||(k.isOpera&&parseFloat(opera.version())<11))){E='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+G.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody();})()'}q=l.add(p.iframeContainer,"iframe",{id:G.id+"_ifr",src:E||'javascript:""',frameBorder:"0",allowTransparency:"true",title:H.aria_label,style:{width:"100%",height:y,display:"block"}});G.contentAreaContainer=p.iframeContainer;if(p.editorContainer){l.get(p.editorContainer).style.display=G.orgDisplay}C.style.visibility=G.orgVisibility;l.get(G.id).style.display="none";l.setAttrib(G.id,"aria-hidden",true);if(!k.relaxedDomain||!E){G.initContentBody()}C=q=p=null},initContentBody:function(){var n=this,p=n.settings,q=l.get(n.id),r=n.getDoc(),o,m,s;if((!b||!k.relaxedDomain)&&!p.content_editable){r.open();r.write(n.iframeHTML);r.close();if(k.relaxedDomain){r.domain=k.relaxedDomain}}if(p.content_editable){l.addClass(q,"mceContentBody");n.contentDocument=r=p.content_document||document;n.contentWindow=p.content_window||window;n.bodyElement=q;p.content_document=p.content_window=null}m=n.getBody();m.disabled=true;if(!p.readonly){m.contentEditable=n.getParam("content_editable_state",true)}m.disabled=false;n.schema=new k.html.Schema(p);n.dom=new k.dom.DOMUtils(r,{keep_values:true,url_converter:n.convertURL,url_converter_scope:n,hex_colors:p.force_hex_style_colors,class_filter:p.class_filter,update_styles:true,root_element:p.content_editable?n.id:null,schema:n.schema});n.parser=new k.html.DomParser(p,n.schema);n.parser.addAttributeFilter("src,href,style",function(t,u){var v=t.length,y,A=n.dom,z,x;while(v--){y=t[v];z=y.attr(u);x="data-mce-"+u;if(!y.attributes.map[x]){if(u==="style"){y.attr(x,A.serializeStyle(A.parseStyle(z),y.name))}else{y.attr(x,n.convertURL(z,u,y.name))}}}});n.parser.addNodeFilter("script",function(t,u){var v=t.length,x;while(v--){x=t[v];x.attr("type","mce-"+(x.attr("type")||"text/javascript"))}});n.parser.addNodeFilter("#cdata",function(t,u){var v=t.length,x;while(v--){x=t[v];x.type=8;x.name="#comment";x.value="[CDATA["+x.value+"]]"}});n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(u,v){var x=u.length,y,t=n.schema.getNonEmptyElements();while(x--){y=u[x];if(y.isEmpty(t)){y.empty().append(new k.html.Node("br",1)).shortEnded=true}}});n.serializer=new k.dom.Serializer(p,n.dom,n.schema);n.selection=new k.dom.Selection(n.dom,n.getWin(),n.serializer,n);n.formatter=new k.Formatter(n);n.undoManager=new k.UndoManager(n);n.forceBlocks=new k.ForceBlocks(n);n.enterKey=new k.EnterKey(n);n.editorCommands=new k.EditorCommands(n);n.onExecCommand.add(function(t,u){if(!/^(FontName|FontSize)$/.test(u)){n.nodeChanged()}});n.serializer.onPreProcess.add(function(t,u){return n.onPreProcess.dispatch(n,u,t)});n.serializer.onPostProcess.add(function(t,u){return n.onPostProcess.dispatch(n,u,t)});n.onPreInit.dispatch(n);if(!p.browser_spellcheck&&!p.gecko_spellcheck){r.body.spellcheck=false}if(!p.readonly){n.bindNativeEvents()}n.controlManager.onPostRender.dispatch(n,n.controlManager);n.onPostRender.dispatch(n);n.quirks=k.util.Quirks(n);if(p.directionality){m.dir=p.directionality}if(p.nowrap){m.style.whiteSpace="nowrap"}if(p.protect){n.onBeforeSetContent.add(function(t,u){i(p.protect,function(v){u.content=u.content.replace(v,function(x){return""})})})}n.onSetContent.add(function(){n.addVisual(n.getBody())});if(p.padd_empty_editor){n.onPostProcess.add(function(t,u){u.content=u.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
[\r\n]*)$/,"")})}n.load({initial:true,format:"html"});n.startContent=n.getContent({format:"raw"});n.initialized=true;n.onInit.dispatch(n);n.execCallback("setupcontent_callback",n.id,m,r);n.execCallback("init_instance_callback",n);n.focus(true);n.nodeChanged({initial:true});if(n.contentStyles.length>0){s="";i(n.contentStyles,function(t){s+=t+"\r\n"});n.dom.addStyle(s)}i(n.contentCSS,function(t){n.dom.loadCSS(t)});if(p.auto_focus){setTimeout(function(){var t=k.get(p.auto_focus);t.selection.select(t.getBody(),1);t.selection.collapse(1);t.getBody().focus();t.getWin().focus()},100)}q=r=m=null},focus:function(p){var o,u=this,t=u.selection,q=u.settings.content_editable,n,r,s=u.getDoc(),m;if(!p){if(u.lastIERng){t.setRng(u.lastIERng)}n=t.getRng();if(n.item){r=n.item(0)}u._refreshContentEditable();if(!q){u.getWin().focus()}if(k.isGecko||q){m=u.getBody();if(m.setActive){m.setActive()}else{m.focus()}if(q){t.normalize()}}if(r&&r.ownerDocument==s){n=s.body.createControlRange();n.addElement(r);n.select()}}if(k.activeEditor!=u){if((o=k.activeEditor)!=null){o.onDeactivate.dispatch(o,u)}u.onActivate.dispatch(u,o)}k._setActive(u)},execCallback:function(q){var m=this,p=m.settings[q],o;if(!p){return}if(m.callbackLookup&&(o=m.callbackLookup[q])){p=o.func;o=o.scope}if(d(p,"string")){o=p.replace(/\.\w+$/,"");o=o?k.resolve(o):0;p=k.resolve(p);m.callbackLookup=m.callbackLookup||{};m.callbackLookup[q]={func:p,scope:o}}return p.apply(o||m,Array.prototype.slice.call(arguments,1))},translate:function(m){var o=this.settings.language||"en",n=k.i18n;if(!m){return""}return n[o+"."+m]||m.replace(/\{\#([^\}]+)\}/g,function(q,p){return n[o+"."+p]||"{#"+p+"}"})},getLang:function(o,m){return k.i18n[(this.settings.language||"en")+"."+o]||(d(m)?m:"{#"+o+"}")},getParam:function(t,q,m){var r=k.trim,p=d(this.settings[t])?this.settings[t]:q,s;if(m==="hash"){s={};if(d(p,"string")){i(p.indexOf("=")>0?p.split(/[;,](?![^=;,]*(?:[;,]|$))/):p.split(","),function(n){n=n.split("=");if(n.length>1){s[r(n[0])]=r(n[1])}else{s[r(n[0])]=r(n)}})}else{s=p}return s}return p},nodeChanged:function(q){var m=this,n=m.selection,p;if(m.initialized){q=q||{};p=n.getStart()||m.getBody();p=b&&p.ownerDocument!=m.getDoc()?m.getBody():p;q.parents=[];m.dom.getParent(p,function(o){if(o.nodeName=="BODY"){return true}q.parents.push(o)});m.onNodeChange.dispatch(m,q?q.controlManager||m.controlManager:m.controlManager,p,n.isCollapsed(),q)}},addButton:function(n,o){var m=this;m.buttons=m.buttons||{};m.buttons[n]=o},addCommand:function(m,o,n){this.execCommands[m]={func:o,scope:n||this}},addQueryStateHandler:function(m,o,n){this.queryStateCommands[m]={func:o,scope:n||this}},addQueryValueHandler:function(m,o,n){this.queryValueCommands[m]={func:o,scope:n||this}},addShortcut:function(o,q,m,p){var n=this,r;if(n.settings.custom_shortcuts===false){return false}n.shortcuts=n.shortcuts||{};if(d(m,"string")){r=m;m=function(){n.execCommand(r,false,null)}}if(d(m,"object")){r=m;m=function(){n.execCommand(r[0],r[1],r[2])}}i(g(o),function(s){var t={func:m,scope:p||this,desc:n.translate(q),alt:false,ctrl:false,shift:false};i(g(s,"+"),function(u){switch(u){case"alt":case"ctrl":case"shift":t[u]=true;break;default:t.charCode=u.charCodeAt(0);t.keyCode=u.toUpperCase().charCodeAt(0)}});n.shortcuts[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t});return true},execCommand:function(u,r,x,m){var p=this,q=0,v,n;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(u)&&(!m||!m.skip_focus)){p.focus()}m=f({},m);p.onBeforeExecCommand.dispatch(p,u,r,x,m);if(m.terminate){return false}if(p.execCallback("execcommand_callback",p.id,p.selection.getNode(),u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(v=p.execCommands[u]){n=v.func.call(v.scope,r,x);if(n!==true){p.onExecCommand.dispatch(p,u,r,x,m);return n}}i(p.plugins,function(o){if(o.execCommand&&o.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);q=1;return false}});if(q){return true}if(p.theme&&p.theme.execCommand&&p.theme.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(p.editorCommands.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}p.getDoc().execCommand(u,r,x);p.onExecCommand.dispatch(p,u,r,x,m)},queryCommandState:function(q){var n=this,r,p;if(n._isHidden()){return}if(r=n.queryStateCommands[q]){p=r.func.call(r.scope);if(p!==true){return p}}r=n.editorCommands.queryCommandState(q);if(r!==-1){return r}try{return this.getDoc().queryCommandState(q)}catch(m){}},queryCommandValue:function(r){var n=this,q,p;if(n._isHidden()){return}if(q=n.queryValueCommands[r]){p=q.func.call(q.scope);if(p!==true){return p}}q=n.editorCommands.queryCommandValue(r);if(d(q)){return q}try{return this.getDoc().queryCommandValue(r)}catch(m){}},show:function(){var m=this;l.show(m.getContainer());l.hide(m.id);m.load()},hide:function(){var m=this,n=m.getDoc();if(b&&n){n.execCommand("SelectAll")}m.save();setTimeout(function(){l.hide(m.getContainer())},1);l.setStyle(m.id,"display",m.orgDisplay)},isHidden:function(){return !l.isHidden(this.id)},setProgressState:function(m,n,p){this.onSetProgressState.dispatch(this,m,n,p);return m},load:function(q){var m=this,p=m.getElement(),n;if(p){q=q||{};q.load=true;n=m.setContent(d(p.value)?p.value:p.innerHTML,q);q.element=p;if(!q.no_events){m.onLoadContent.dispatch(m,q)}q.element=p=null;return n}},save:function(r){var m=this,q=m.getElement(),n,p;if(!q||!m.initialized){return}r=r||{};r.save=true;r.element=q;n=r.content=m.getContent(r);if(!r.no_events){m.onSaveContent.dispatch(m,r)}n=r.content;if(!/TEXTAREA|INPUT/i.test(q.nodeName)){q.innerHTML=n;if(p=l.getParent(m.id,"form")){i(p.elements,function(o){if(o.name==m.id){o.value=n;return false}})}}else{q.value=n}r.element=q=null;return n},setContent:function(r,p){var o=this,n,m=o.getBody(),q;p=p||{};p.format=p.format||"html";p.set=true;p.content=r;if(!p.no_events){o.onBeforeSetContent.dispatch(o,p)}r=p.content;if(!k.isIE&&(r.length===0||/^\s+$/.test(r))){q=o.settings.forced_root_block;if(q){r="<"+q+'>
"}else{r='
'}m.innerHTML=r;o.selection.select(m,true);o.selection.collapse(true);return}if(p.format!=="raw"){r=new k.html.Serializer({},o.schema).serialize(o.parser.parse(r))}p.content=k.trim(r);o.dom.setHTML(m,p.content);if(!p.no_events){o.onSetContent.dispatch(o,p)}if(!o.settings.content_editable||document.activeElement===o.getBody()){o.selection.normalize()}return p.content},getContent:function(o){var n=this,p,m=n.getBody();o=o||{};o.format=o.format||"html";o.get=true;o.getInner=true;if(!o.no_events){n.onBeforeGetContent.dispatch(n,o)}if(o.format=="raw"){p=m.innerHTML}else{if(o.format=="text"){p=m.innerText||m.textContent}else{p=n.serializer.serialize(m,o)}}if(o.format!="text"){o.content=k.trim(p)}else{o.content=p}if(!o.no_events){n.onGetContent.dispatch(n,o)}return o.content},isDirty:function(){var m=this;return k.trim(m.startContent)!=k.trim(m.getContent({format:"raw",no_events:1}))&&!m.isNotDirty},getContainer:function(){var m=this;if(!m.container){m.container=l.get(m.editorContainer||m.id+"_parent")}return m.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return l.get(this.settings.content_element||this.id)},getWin:function(){var m=this,n;if(!m.contentWindow){n=l.get(m.id+"_ifr");if(n){m.contentWindow=n.contentWindow}}return m.contentWindow},getDoc:function(){var m=this,n;if(!m.contentDocument){n=m.getWin();if(n){m.contentDocument=n.document}}return m.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(o,n,q){var m=this,p=m.settings;if(p.urlconverter_callback){return m.execCallback("urlconverter_callback",o,q,true,n)}if(!p.convert_urls||(q&&q.nodeName=="LINK")||o.indexOf("file:")===0){return o}if(p.relative_urls){return m.documentBaseURI.toRelative(o)}o=m.documentBaseURI.toAbsolute(o,p.remove_script_host);return o},addVisual:function(q){var n=this,o=n.settings,p=n.dom,m;q=q||n.getBody();if(!d(n.hasVisual)){n.hasVisual=o.visual}i(p.select("table,a",q),function(s){var r;switch(s.nodeName){case"TABLE":m=o.visual_table_class||"mceItemTable";r=p.getAttrib(s,"border");if(!r||r=="0"){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}return;case"A":if(!p.getAttrib(s,"href",false)){r=p.getAttrib(s,"name")||s.id;m="mceItemAnchor";if(r){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}}return}});n.onVisualAid.dispatch(n,q,n.hasVisual)},remove:function(){var m=this,n=m.getContainer();if(!m.removed){m.removed=1;m.hide();if(!m.settings.content_editable){j.unbind(m.getWin());j.unbind(m.getDoc())}j.unbind(m.getBody());j.clear(n);m.execCallback("remove_instance_callback",m);m.onRemove.dispatch(m);m.onExecCommand.listeners=[];k.remove(m);l.remove(n)}},destroy:function(n){var m=this;if(m.destroyed){return}if(a){j.unbind(m.getDoc());j.unbind(m.getWin());j.unbind(m.getBody())}if(!n){k.removeUnload(m.destroy);tinyMCE.onBeforeUnload.remove(m._beforeUnload);if(m.theme&&m.theme.destroy){m.theme.destroy()}m.controlManager.destroy();m.selection.destroy();m.dom.destroy()}if(m.formElement){m.formElement.submit=m.formElement._mceOldSubmit;m.formElement._mceOldSubmit=null}m.contentAreaContainer=m.formElement=m.container=m.settings.content_element=m.bodyElement=m.contentDocument=m.contentWindow=null;if(m.selection){m.selection=m.selection.win=m.selection.dom=m.selection.dom.doc=null}m.destroyed=1},_refreshContentEditable:function(){var n=this,m,o;if(n._isHidden()){m=n.getBody();o=m.parentNode;o.removeChild(m);o.appendChild(m);m.focus()}},_isHidden:function(){var m;if(!a){return 0}m=this.selection.getSel();return(!m||!m.rangeCount||m.rangeCount===0)}})})(tinymce);(function(a){var b=a.each;a.Editor.prototype.setupEvents=function(){var c=this,d=c.settings;b(["onPreInit","onBeforeRenderUI","onPostRender","onLoad","onInit","onRemove","onActivate","onDeactivate","onClick","onEvent","onMouseUp","onMouseDown","onDblClick","onKeyDown","onKeyUp","onKeyPress","onContextMenu","onSubmit","onReset","onPaste","onPreProcess","onPostProcess","onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent","onLoadContent","onSaveContent","onNodeChange","onChange","onBeforeExecCommand","onExecCommand","onUndo","onRedo","onVisualAid","onSetProgressState","onSetAttrib"],function(e){c[e]=new a.util.Dispatcher(c)});if(d.cleanup_callback){c.onBeforeSetContent.add(function(e,f){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)});c.onPreProcess.add(function(e,f){if(f.set){e.execCallback("cleanup_callback","insert_to_editor_dom",f.node,f)}if(f.get){e.execCallback("cleanup_callback","get_from_editor_dom",f.node,f)}});c.onPostProcess.add(function(e,f){if(f.set){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)}if(f.get){f.content=e.execCallback("cleanup_callback","get_from_editor",f.content,f)}})}if(d.save_callback){c.onGetContent.add(function(e,f){if(f.save){f.content=e.execCallback("save_callback",e.id,f.content,e.getBody())}})}if(d.handle_event_callback){c.onEvent.add(function(f,g,h){if(c.execCallback("handle_event_callback",g,f,h)===false){g.preventDefault();g.stopPropagation()}})}if(d.handle_node_change_callback){c.onNodeChange.add(function(f,e,g){f.execCallback("handle_node_change_callback",f.id,g,-1,-1,true,f.selection.isCollapsed())})}if(d.save_callback){c.onSaveContent.add(function(e,g){var f=e.execCallback("save_callback",e.id,g.content,e.getBody());if(f){g.content=f}})}if(d.onchange_callback){c.onChange.add(function(f,e){f.execCallback("onchange_callback",f,e)})}};a.Editor.prototype.bindNativeEvents=function(){var l=this,f,d=l.settings,e=l.dom,h;h={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function c(i,m){var n=i.type;if(l.removed){return}if(l.onEvent.dispatch(l,i,m)!==false){l[h[i.fakeType||i.type]].dispatch(l,i,m)}}function j(i){l.focus(true)}function k(i,m){if(m.keyCode!=65||!a.VK.metaKeyPressed(m)){l.selection.normalize()}l.nodeChanged()}b(h,function(m,n){var i=d.content_editable?l.getBody():l.getDoc();switch(n){case"contextmenu":e.bind(i,n,c);break;case"paste":e.bind(l.getBody(),n,c);break;case"submit":case"reset":e.bind(l.getElement().form||a.DOM.getParent(l.id,"form"),n,c);break;default:e.bind(i,n,c)}});e.bind(d.content_editable?l.getBody():(a.isGecko?l.getDoc():l.getWin()),"focus",function(i){l.focus(true)});if(d.content_editable&&a.isOpera){e.bind(l.getBody(),"click",j);e.bind(l.getBody(),"keydown",j)}l.onMouseUp.add(k);l.onKeyUp.add(function(i,n){var m=n.keyCode;if((m>=33&&m<=36)||(m>=37&&m<=40)||m==13||m==45||m==46||m==8||(a.isMac&&(m==91||m==93))||n.ctrlKey){k(i,n)}});l.onReset.add(function(){l.setContent(l.startContent,{format:"raw"})});function g(m,i){if(m.altKey||m.ctrlKey||m.metaKey){b(l.shortcuts,function(n){var o=a.isMac?m.metaKey:m.ctrlKey;if(n.ctrl!=o||n.alt!=m.altKey||n.shift!=m.shiftKey){return}if(m.keyCode==n.keyCode||(m.charCode&&m.charCode==n.charCode)){m.preventDefault();if(i){n.func.call(n.scope)}return true}})}}l.onKeyUp.add(function(i,m){g(m)});l.onKeyPress.add(function(i,m){g(m)});l.onKeyDown.add(function(i,m){g(m,true)});if(a.isOpera){l.onClick.add(function(i,m){m.preventDefault()})}}})(tinymce);(function(d){var e=d.each,b,a=true,c=false;d.EditorCommands=function(n){var m=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,q=n.formatter,o;function r(z,y,x){var v;z=z.toLowerCase();if(v=j.exec[z]){v(z,y,x);return a}return c}function l(x){var v;x=x.toLowerCase();if(v=j.state[x]){return v(x)}return -1}function h(x){var v;x=x.toLowerCase();if(v=j.value[x]){return v(x)}return c}function u(v,x){x=x||"exec";e(v,function(z,y){e(y.toLowerCase().split(","),function(A){j[x][A]=z})})}d.extend(this,{execCommand:r,queryCommandState:l,queryCommandValue:h,addCommands:u});function f(y,x,v){if(x===b){x=c}if(v===b){v=null}return n.getDoc().execCommand(y,x,v)}function t(v){return q.match(v)}function s(v,x){q.toggle(v,x?{value:x}:b)}function i(v){o=p.getBookmark(v)}function g(){p.moveToBookmark(o)}u({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(z){var y=n.getDoc(),v;try{f(z)}catch(x){v=a}if(v||!y.queryCommandSupported(z)){if(d.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(A){if(A){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(v){if(p.isCollapsed()){p.select(p.getNode())}f(v);p.collapse(c)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){var x=v.substring(7);e("left,center,right,full".split(","),function(y){if(x!=y){q.remove("align"+y)}});s("align"+x);r("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(y){var v,x;f(y);v=m.getParent(p.getNode(),"ol,ul");if(v){x=v.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(x.nodeName)){i();m.split(x,v);g()}}},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){s(v)},"ForeColor,HiliteColor,FontName":function(y,x,v){s(y,v)},FontSize:function(z,y,x){var v,A;if(x>=1&&x<=7){A=d.explode(k.font_size_style_values);v=d.explode(k.font_size_classes);if(v){x=v[x-1]||x}else{x=A[x-1]||x}}s(z,x)},RemoveFormat:function(v){q.remove(v)},mceBlockQuote:function(v){s("blockquote")},FormatBlock:function(y,x,v){return s(v||"p")},mceCleanup:function(){var v=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(v)},mceRemoveNode:function(z,y,x){var v=x||p.getNode();if(v!=n.getBody()){i();n.dom.remove(v,a);g()}},mceSelectNodeDepth:function(z,y,x){var v=0;m.getParent(p.getNode(),function(A){if(A.nodeType==1&&v++==x){p.select(A);return c}},n.getBody())},mceSelectNode:function(y,x,v){p.select(v)},mceInsertContent:function(B,I,K){var y,J,E,z,F,G,D,C,L,x,A,M,v,H;y=n.parser;J=new d.html.Serializer({},n.schema);v='\uFEFF';G={content:K,format:"html"};p.onBeforeSetContent.dispatch(p,G);K=G.content;if(K.indexOf("{$caret}")==-1){K+="{$caret}"}K=K.replace(/\{\$caret\}/,v);if(!p.isCollapsed()){n.getDoc().execCommand("Delete",false,null)}E=p.getNode();G={context:E.nodeName.toLowerCase()};F=y.parse(K,G);A=F.lastChild;if(A.attr("id")=="mce_marker"){D=A;for(A=A.prev;A;A=A.walk(true)){if(A.type==3||!m.isBlock(A.name)){A.parent.insert(D,A,A.name==="br");break}}}if(!G.invalid){K=J.serialize(F);A=E.firstChild;M=E.lastChild;if(!A||(A===M&&A.nodeName==="BR")){m.setHTML(E,K)}else{p.setContent(K)}}else{p.setContent(v);E=p.getNode();z=n.getBody();if(E.nodeType==9){E=A=z}else{A=E}while(A!==z){E=A;A=A.parentNode}K=E==z?z.innerHTML:m.getOuterHTML(E);K=J.serialize(y.parse(K.replace(//i,function(){return J.serialize(F)})));if(E==z){m.setHTML(z,K)}else{m.setOuterHTML(E,K)}}D=m.get("mce_marker");C=m.getRect(D);L=m.getViewPort(n.getWin());if((C.y+C.h>L.y+L.h||C.yL.x+L.w||C.x")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(y,x,v){n.execCommand("mceInsertContent",false,v.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(z,y,x){var v;if(typeof(x)=="string"){x={href:x}}v=m.getParent(p.getNode(),"a");x.href=x.href.replace(" ","%20");if(!v||!x.href){q.remove("link")}if(x.href){q.apply("link",x,v)}},selectAll:function(){var x=m.getRoot(),v=m.createRng();if(p.getRng().setStart){v.setStart(x,0);v.setEnd(x,x.childNodes.length);p.setRng(v)}else{f("SelectAll")}}});u({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(z){var x="align"+z.substring(7);var v=p.isCollapsed()?[m.getParent(p.getNode(),m.isBlock)]:p.getSelectedBlocks();var y=d.map(v,function(A){return !!q.matchNode(A,x)});return d.inArray(y,a)!==-1},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){return t(v)},mceBlockQuote:function(){return t("blockquote")},Outdent:function(){var v;if(k.inline_styles){if((v=m.getParent(p.getStart(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}if((v=m.getParent(p.getEnd(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}}return l("InsertUnorderedList")||l("InsertOrderedList")||(!k.inline_styles&&!!m.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(x){var v=m.getParent(p.getNode(),"ul,ol");return v&&(x==="insertunorderedlist"&&v.tagName==="UL"||x==="insertorderedlist"&&v.tagName==="OL")}},"state");u({"FontSize,FontName":function(y){var x=0,v;if(v=m.getParent(p.getNode(),"span")){if(y=="fontsize"){x=v.style.fontSize}else{x=v.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return x}},"value");u({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(h){var l,i=0,e=[],g,k,j,f;function c(){return b.trim(h.getContent({format:"raw",no_events:1}).replace(/]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\/span>/g,""))}function d(){l.typing=false;l.add()}onBeforeAdd=new a(l);k=new a(l);j=new a(l);f=new a(l);k.add(function(m,n){if(m.hasUndo()){return h.onChange.dispatch(h,n,m)}});j.add(function(m,n){return h.onUndo.dispatch(h,n,m)});f.add(function(m,n){return h.onRedo.dispatch(h,n,m)});h.onInit.add(function(){l.add()});h.onBeforeExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.beforeChange()}});h.onExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.add()}});h.onSaveContent.add(d);h.dom.bind(h.dom.getRoot(),"dragend",d);h.dom.bind(h.getDoc(),b.isGecko?"blur":"focusout",function(m){if(!h.removed&&l.typing){d()}});h.onKeyUp.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45||n==13||o.ctrlKey){d()}});h.onKeyDown.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45){if(l.typing){d()}return}if((n<16||n>20)&&n!=224&&n!=91&&!l.typing){l.beforeChange();l.typing=true;l.add()}});h.onMouseDown.add(function(m,n){if(l.typing){d()}});h.addShortcut("ctrl+z","undo_desc","Undo");h.addShortcut("ctrl+y","redo_desc","Redo");l={data:e,typing:false,onBeforeAdd:onBeforeAdd,onAdd:k,onUndo:j,onRedo:f,beforeChange:function(){g=h.selection.getBookmark(2,true)},add:function(p){var m,n=h.settings,o;p=p||{};p.content=c();l.onBeforeAdd.dispatch(l,p);o=e[i];if(o&&o.content==p.content){return null}if(e[i]){e[i].beforeBookmark=g}if(n.custom_undo_redo_levels){if(e.length>n.custom_undo_redo_levels){for(m=0;m0){n=e[--i];h.setContent(n.content,{format:"raw"});h.selection.moveToBookmark(n.beforeBookmark);l.onUndo.dispatch(l,n)}return n},redo:function(){var m;if(i0||this.typing},hasRedo:function(){return i0){g.moveEnd("character",q)}g.select()}catch(n){}}}c.nodeChanged()}}if(b.forced_root_block){c.onKeyUp.add(f);c.onNodeChange.add(f)}};(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(j){var o,k,g,h=this,m=h.editor,n,f;if(!h.controlFactories){h.controlFactories=[];d(m.plugins,function(i){if(i.createControl){h.controlFactories.push(i)}})}n=h.controlFactories;for(k=0,g=n.length;k1||ag==ay||ag.tagName=="BR"){return ag}}}var aq=aa.selection.getRng();var av=aq.startContainer;var ap=aq.endContainer;if(av!=ap&&aq.endOffset===0){var au=ar(av,ap);var at=au.nodeType==3?au.length:au.childNodes.length;aq.setEnd(au,at)}return aq}function ad(at,ay,aw,av,aq){var ap=[],ar=-1,ax,aA=-1,au=-1,az;T(at.childNodes,function(aC,aB){if(aC.nodeName==="UL"||aC.nodeName==="OL"){ar=aB;ax=aC;return false}});T(at.childNodes,function(aC,aB){if(aC.nodeName==="SPAN"&&c.getAttrib(aC,"data-mce-type")=="bookmark"){if(aC.id==ay.id+"_start"){aA=aB}else{if(aC.id==ay.id+"_end"){au=aB}}}});if(ar<=0||(aAar)){T(a.grep(at.childNodes),aq);return 0}else{az=c.clone(aw,X);T(a.grep(at.childNodes),function(aC,aB){if((aAar&&aB>ar)){ap.push(aC);aC.parentNode.removeChild(aC)}});if(aAar){at.insertBefore(az,ax.nextSibling)}}av.push(az);T(ap,function(aB){az.appendChild(aB)});return az}}function an(aq,at,aw){var ap=[],av,ar,au=true;av=am.inline||am.block;ar=c.create(av);ab(ar);N.walk(aq,function(ax){var ay;function az(aA){var aF,aD,aB,aC,aE;aE=au;aF=aA.nodeName.toLowerCase();aD=aA.parentNode.nodeName.toLowerCase();if(aA.nodeType===1&&x(aA)){aE=au;au=x(aA)==="true";aC=true}if(g(aF,"br")){ay=0;if(am.block){c.remove(aA)}return}if(am.wrapper&&y(aA,ae,al)){ay=0;return}if(au&&!aC&&am.block&&!am.wrapper&&I(aF)){aA=c.rename(aA,av);ab(aA);ap.push(aA);ay=0;return}if(am.selector){T(ah,function(aG){if("collapsed" in aG&&aG.collapsed!==ai){return}if(c.is(aA,aG.selector)&&!b(aA)){ab(aA,aG);aB=true}});if(!am.inline||aB){ay=0;return}}if(au&&!aC&&d(av,aF)&&d(aD,av)&&!(!aw&&aA.nodeType===3&&aA.nodeValue.length===1&&aA.nodeValue.charCodeAt(0)===65279)&&!b(aA)){if(!ay){ay=c.clone(ar,X);aA.parentNode.insertBefore(ay,aA);ap.push(ay)}ay.appendChild(aA)}else{if(aF=="li"&&at){ay=ad(aA,at,ar,ap,az)}else{ay=0;T(a.grep(aA.childNodes),az);if(aC){au=aE}ay=0}}}T(ax,az)});if(am.wrap_links===false){T(ap,function(ax){function ay(aC){var aB,aA,az;if(aC.nodeName==="A"){aA=c.clone(ar,X);ap.push(aA);az=a.grep(aC.childNodes);for(aB=0;aB1||!H(az))&&ax===0){c.remove(az,1);return}if(am.inline||am.wrapper){if(!am.exact&&ax===1){az=ay(az)}T(ah,function(aB){T(c.select(aB.inline,az),function(aD){var aC;if(aB.wrap_links===false){aC=aD.parentNode;do{if(aC.nodeName==="A"){return}}while(aC=aC.parentNode)}Z(aB,al,aD,aB.exact?aD:null)})});if(y(az.parentNode,ae,al)){c.remove(az,1);az=0;return C}if(am.merge_with_parents){c.getParent(az.parentNode,function(aB){if(y(aB,ae,al)){c.remove(az,1);az=0;return C}})}if(az&&am.merge_siblings!==false){az=u(E(az),az);az=u(az,E(az,C))}}})}if(am){if(ag){if(ag.nodeType){ac=c.createRng();ac.setStartBefore(ag);ac.setEndAfter(ag);an(p(ac,ah),null,true)}else{an(ag,null,true)}}else{if(!ai||!am.inline||c.select("td.mceSelected,th.mceSelected").length){var ao=aa.selection.getNode();if(!m&&ah[0].defaultBlock&&!c.getParent(ao,c.isBlock)){Y(ah[0].defaultBlock)}aa.selection.setRng(af());ak=r.getBookmark();an(p(r.getRng(C),ah),ak);if(am.styles&&(am.styles.color||am.styles.textDecoration)){a.walk(ao,L,"childNodes");L(ao)}r.moveToBookmark(ak);R(r.getRng(C));aa.nodeChanged()}else{U("apply",ae,al)}}}}function B(ad,am,af){var ag=V(ad),ao=ag[0],ak,aj,ac,al=true;function ae(av){var au,at,ar,aq,ax,aw;if(av.nodeType===1&&x(av)){ax=al;al=x(av)==="true";aw=true}au=a.grep(av.childNodes);if(al&&!aw){for(at=0,ar=ag.length;at=0;ac--){ab=ah[ac].selector;if(!ab){return C}for(ag=ad.length-1;ag>=0;ag--){if(c.is(ad[ag],ab)){return C}}}}return X}function J(ab,ae,ac){var ad;if(!P){P={};ad={};aa.onNodeChange.addToTop(function(ag,af,ai){var ah=n(ai),aj={};T(P,function(ak,al){T(ah,function(am){if(y(am,al,{},ak.similar)){if(!ad[al]){T(ak,function(an){an(true,{node:am,format:al,parents:ah})});ad[al]=ak}aj[al]=ak;return false}})});T(ad,function(ak,al){if(!aj[al]){delete ad[al];T(ak,function(am){am(false,{node:ai,format:al,parents:ah})})}})})}T(ab.split(","),function(af){if(!P[af]){P[af]=[];P[af].similar=ac}P[af].push(ae)});return this}a.extend(this,{get:V,register:l,apply:Y,remove:B,toggle:F,match:k,matchAll:v,matchNode:y,canApply:z,formatChanged:J});j();W();function h(ab,ac){if(g(ab,ac.inline)){return C}if(g(ab,ac.block)){return C}if(ac.selector){return c.is(ab,ac.selector)}}function g(ac,ab){ac=ac||"";ab=ab||"";ac=""+(ac.nodeName||ac);ab=""+(ab.nodeName||ab);return ac.toLowerCase()==ab.toLowerCase()}function O(ac,ab){var ad=c.getStyle(ac,ab);if(ab=="color"||ab=="backgroundColor"){ad=c.toHex(ad)}if(ab=="fontWeight"&&ad==700){ad="bold"}return""+ad}function q(ab,ac){if(typeof(ab)!="string"){ab=ab(ac)}else{if(ac){ab=ab.replace(/%(\w+)/g,function(ae,ad){return ac[ad]||ae})}}return ab}function f(ab){return ab&&ab.nodeType===3&&/^([\t \r\n]+|)$/.test(ab.nodeValue)}function S(ad,ac,ab){var ae=c.create(ac,ab);ad.parentNode.insertBefore(ae,ad);ae.appendChild(ad);return ae}function p(ab,am,ae){var ap,an,ah,al,ad=ab.startContainer,ai=ab.startOffset,ar=ab.endContainer,ak=ab.endOffset;function ao(aA){var au,ax,az,aw,av,at;au=ax=aA?ad:ar;av=aA?"previousSibling":"nextSibling";at=c.getRoot();function ay(aB){return aB.nodeName=="BR"&&aB.getAttribute("data-mce-bogus")&&!aB.nextSibling}if(au.nodeType==3&&!f(au)){if(aA?ai>0:akan?an:ai];if(ad.nodeType==3){ai=0}}if(ar.nodeType==1&&ar.hasChildNodes()){an=ar.childNodes.length-1;ar=ar.childNodes[ak>an?an:ak-1];if(ar.nodeType==3){ak=ar.nodeValue.length}}function aq(au){var at=au;while(at){if(at.nodeType===1&&x(at)){return x(at)==="false"?at:au}at=at.parentNode}return au}function aj(au,ay,aA){var ax,av,az,at;function aw(aC,aE){var aF,aB,aD=aC.nodeValue;if(typeof(aE)=="undefined"){aE=aA?aD.length:0}if(aA){aF=aD.lastIndexOf(" ",aE);aB=aD.lastIndexOf("\u00a0",aE);aF=aF>aB?aF:aB;if(aF!==-1&&!ae){aF++}}else{aF=aD.indexOf(" ",aE);aB=aD.indexOf("\u00a0",aE);aF=aF!==-1&&(aB===-1||aF0&&ah.node.nodeType===3&&ah.node.nodeValue.charAt(ah.offset-1)===" "){if(ah.offset>1){ar=ah.node;ar.splitText(ah.offset-1)}}}}if(am[0].inline||am[0].block_expand){if(!am[0].inline||(ad.nodeType!=3||ai===0)){ad=ao(true)}if(!am[0].inline||(ar.nodeType!=3||ak===ar.nodeValue.length)){ar=ao()}}if(am[0].selector&&am[0].expand!==X&&!am[0].inline){ad=af(ad,"previousSibling");ar=af(ar,"nextSibling")}if(am[0].block||am[0].selector){ad=ac(ad,"previousSibling");ar=ac(ar,"nextSibling");if(am[0].block){if(!H(ad)){ad=ao(true)}if(!H(ar)){ar=ao()}}}if(ad.nodeType==1){ai=s(ad);ad=ad.parentNode}if(ar.nodeType==1){ak=s(ar)+1;ar=ar.parentNode}return{startContainer:ad,startOffset:ai,endContainer:ar,endOffset:ak}}function Z(ah,ag,ae,ab){var ad,ac,af;if(!h(ae,ah)){return X}if(ah.remove!="all"){T(ah.styles,function(aj,ai){aj=q(aj,ag);if(typeof(ai)==="number"){ai=aj;ab=0}if(!ab||g(O(ab,ai),aj)){c.setStyle(ae,ai,"")}af=1});if(af&&c.getAttrib(ae,"style")==""){ae.removeAttribute("style");ae.removeAttribute("data-mce-style")}T(ah.attributes,function(ak,ai){var aj;ak=q(ak,ag);if(typeof(ai)==="number"){ai=ak;ab=0}if(!ab||g(c.getAttrib(ab,ai),ak)){if(ai=="class"){ak=c.getAttrib(ae,ai);if(ak){aj="";T(ak.split(/\s+/),function(al){if(/mce\w+/.test(al)){aj+=(aj?" ":"")+al}});if(aj){c.setAttrib(ae,ai,aj);return}}}if(ai=="class"){ae.removeAttribute("className")}if(e.test(ai)){ae.removeAttribute("data-mce-"+ai)}ae.removeAttribute(ai)}});T(ah.classes,function(ai){ai=q(ai,ag);if(!ab||c.hasClass(ab,ai)){c.removeClass(ae,ai)}});ac=c.getAttribs(ae);for(ad=0;adad?ad:af]}if(ab.nodeType===3&&ag&&af>=ab.nodeValue.length){ab=new t(ab,aa.getBody()).next()||ab}if(ab.nodeType===3&&!ag&&af===0){ab=new t(ab,aa.getBody()).prev()||ab}return ab}function U(ak,ab,ai){var al="_mce_caret",ac=aa.settings.caret_debug;function ad(ap){var ao=c.create("span",{id:al,"data-mce-bogus":true,style:ac?"color:red":""});if(ap){ao.appendChild(aa.getDoc().createTextNode(G))}return ao}function aj(ap,ao){while(ap){if((ap.nodeType===3&&ap.nodeValue!==G)||ap.childNodes.length>1){return false}if(ao&&ap.nodeType===1){ao.push(ap)}ap=ap.firstChild}return true}function ag(ao){while(ao){if(ao.id===al){return ao}ao=ao.parentNode}}function af(ao){var ap;if(ao){ap=new t(ao,ao);for(ao=ap.current();ao;ao=ap.next()){if(ao.nodeType===3){return ao}}}}function ae(aq,ap){var ar,ao;if(!aq){aq=ag(r.getStart());if(!aq){while(aq=c.get(al)){ae(aq,false)}}}else{ao=r.getRng(true);if(aj(aq)){if(ap!==false){ao.setStartBefore(aq);ao.setEndBefore(aq)}c.remove(aq)}else{ar=af(aq);if(ar.nodeValue.charAt(0)===G){ar=ar.deleteData(0,1)}c.remove(aq,1)}r.setRng(ao)}}function ah(){var aq,ao,av,au,ar,ap,at;aq=r.getRng(true);au=aq.startOffset;ap=aq.startContainer;at=ap.nodeValue;ao=ag(r.getStart());if(ao){av=af(ao)}if(at&&au>0&&au=0;at--){aq.appendChild(c.clone(ax[at],false));aq=aq.firstChild}aq.appendChild(c.doc.createTextNode(G));aq=aq.firstChild;c.insertAfter(aw,ay);r.setCursorLocation(aq,1)}}function an(){var ap,ao,aq;ao=ag(r.getStart());if(ao&&!c.isEmpty(ao)){a.walk(ao,function(ar){if(ar.nodeType==1&&ar.id!==al&&!c.isEmpty(ar)){c.setAttrib(ar,"data-mce-bogus",null)}},"childNodes")}}if(!self._hasCaretEvents){aa.onBeforeGetContent.addToTop(function(){var ao=[],ap;if(aj(ag(r.getStart()),ao)){ap=ao.length;while(ap--){c.setAttrib(ao[ap],"data-mce-bogus","1")}}});a.each("onMouseUp onKeyUp".split(" "),function(ao){aa[ao].addToTop(function(){ae();an()})});aa.onKeyDown.addToTop(function(ao,aq){var ap=aq.keyCode;if(ap==8||ap==37||ap==39){ae(ag(r.getStart()))}an()});r.onSetContent.add(an);self._hasCaretEvents=true}if(ak=="apply"){ah()}else{am()}}function R(ac){var ab=ac.startContainer,ai=ac.startOffset,ae,ah,ag,ad,af;if(ab.nodeType==3&&ai>=ab.nodeValue.length){ai=s(ab);ab=ab.parentNode;ae=true}if(ab.nodeType==1){ad=ab.childNodes;ab=ad[Math.min(ai,ad.length-1)];ah=new t(ab,c.getParent(ab,c.isBlock));if(ai>ad.length-1||ae){ah.next()}for(ag=ah.current();ag;ag=ah.next()){if(ag.nodeType==3&&!f(ag)){af=c.create("a",null,G);ag.parentNode.insertBefore(af,ag);ac.setStart(ag,0);r.setRng(ac);c.remove(af);return}}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;function b(j,i){e.each(i,function(l,k){if(l){g.setStyle(j,k,l)}});g.rename(j,"span")}function f(i,j){g=i.dom;if(c.convert_fonts_to_spans){e.each(g.select("font,u,strike",j.node),function(k){d[k.nodeName.toLowerCase()](a.dom,k)})}}if(c.inline_styles){h=e.explode(c.font_size_legacy_values);d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size,10)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};a.onPreProcess.add(f);a.onSetContent.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}});(function(b){var a=b.dom.TreeWalker;b.EnterKey=function(f){var i=f.dom,e=f.selection,d=f.settings,h=f.undoManager,c=f.schema.getNonEmptyElements();function g(A){var v=e.getRng(true),G,j,z,u,p,M,B,o,k,n,t,J,x,C;function E(N){return N&&i.isBlock(N)&&!/^(TD|TH|CAPTION|FORM)$/.test(N.nodeName)&&!/^(fixed|absolute)/i.test(N.style.position)&&i.getContentEditable(N)!=="true"}function F(O){var N;if(b.isIE&&i.isBlock(O)){N=e.getRng();O.appendChild(i.create("span",null,"\u00a0"));e.select(O);O.lastChild.outerHTML="";e.setRng(N)}}function y(P){var O=P,Q=[],N;while(O=O.firstChild){if(i.isBlock(O)){return}if(O.nodeType==1&&!c[O.nodeName.toLowerCase()]){Q.push(O)}}N=Q.length;while(N--){O=Q[N];if(!O.hasChildNodes()||(O.firstChild==O.lastChild&&O.firstChild.nodeValue==="")){i.remove(O)}else{if(O.nodeName=="A"&&(O.innerText||O.textContent)===" "){i.remove(O)}}}}function m(O){var T,R,N,U,S,Q=O,P;N=i.createRng();if(O.hasChildNodes()){T=new a(O,O);while(R=T.current()){if(R.nodeType==3){N.setStart(R,0);N.setEnd(R,0);break}if(c[R.nodeName.toLowerCase()]){N.setStartBefore(R);N.setEndBefore(R);break}Q=R;R=T.next()}if(!R){N.setStart(Q,0);N.setEnd(Q,0)}}else{if(O.nodeName=="BR"){if(O.nextSibling&&i.isBlock(O.nextSibling)){if(!M||M<9){P=i.create("br");O.parentNode.insertBefore(P,O)}N.setStartBefore(O);N.setEndBefore(O)}else{N.setStartAfter(O);N.setEndAfter(O)}}else{N.setStart(O,0);N.setEnd(O,0)}}e.setRng(N);i.remove(P);S=i.getViewPort(f.getWin());U=i.getPos(O).y;if(US.y+S.h){f.getWin().scrollTo(0,U'}return R}function q(Q){var P,O,N;if(z.nodeType==3&&(Q?u>0:u=z.nodeValue.length){if(!b.isIE&&!D()){O=i.create("br");v.insertNode(O);v.setStartAfter(O);v.setEndAfter(O);N=true}}O=i.create("br");v.insertNode(O);if(b.isIE&&t=="PRE"&&(!M||M<8)){O.parentNode.insertBefore(i.doc.createTextNode("\r"),O)}if(!N){v.setStartAfter(O);v.setEndAfter(O)}else{v.setStartBefore(O);v.setEndBefore(O)}e.setRng(v);h.add()}function s(N){do{if(N.nodeType===3){N.nodeValue=N.nodeValue.replace(/^[\r\n]+/,"")}N=N.firstChild}while(N)}function K(P){var N=i.getRoot(),O,Q;O=P;while(O!==N&&i.getContentEditable(O)!=="false"){if(i.getContentEditable(O)==="true"){Q=O}O=O.parentNode}return O!==N?Q:N}function I(O){var N;if(!b.isIE){O.normalize();N=O.lastChild;if(!N||(/^(left|right)$/gi.test(i.getStyle(N,"float",true)))){i.add(O,"br")}}}if(!v.collapsed){f.execCommand("Delete");return}if(A.isDefaultPrevented()){return}z=v.startContainer;u=v.startOffset;x=(d.force_p_newlines?"p":"")||d.forced_root_block;x=x?x.toUpperCase():"";M=i.doc.documentMode;B=A.shiftKey;if(z.nodeType==1&&z.hasChildNodes()){C=u>z.childNodes.length-1;z=z.childNodes[Math.min(u,z.childNodes.length-1)]||z;if(C&&z.nodeType==3){u=z.nodeValue.length}else{u=0}}j=K(z);if(!j){return}h.beforeChange();if(!i.isBlock(j)&&j!=i.getRoot()){if(!x||B){L()}return}if((x&&!B)||(!x&&B)){z=l(z,u)}p=i.getParent(z,i.isBlock);n=p?i.getParent(p.parentNode,i.isBlock):null;t=p?p.nodeName.toUpperCase():"";J=n?n.nodeName.toUpperCase():"";if(J=="LI"&&!A.ctrlKey){p=n;t=J}if(t=="LI"){if(!x&&B){L();return}if(i.isEmpty(p)){if(/^(UL|OL|LI)$/.test(n.parentNode.nodeName)){return false}H();return}}if(t=="PRE"&&d.br_in_pre!==false){if(!B){L();return}}else{if((!x&&!B&&t!="LI")||(x&&B)){L();return}}x=x||"P";if(q()){if(/^(H[1-6]|PRE)$/.test(t)&&J!="HGROUP"){o=r(x)}else{o=r()}if(d.end_container_on_empty_block&&E(n)&&i.isEmpty(p)){o=i.split(n,p)}else{i.insertAfter(o,p)}m(o)}else{if(q(true)){o=p.parentNode.insertBefore(r(),p);F(o)}else{G=v.cloneRange();G.setEndAfter(p);k=G.extractContents();s(k);o=k.firstChild;i.insertAfter(k,p);y(o);I(p);m(o)}}i.setAttrib(o,"id","");h.add()}f.onKeyDown.add(function(k,j){if(j.keyCode==13){if(g(j)!==false){j.preventDefault()}}})}})(tinymce); \ No newline at end of file +(function(e){var a=/^\s*|\s*$/g,b,d="B".replace(/A(.)|B/,"$1")==="$1";var c={majorVersion:"3",minorVersion:"5.12",releaseDate:"2016-10-31",_init:function(){var s=this,q=document,o=navigator,g=o.userAgent,m,f,l,k,j,r;s.isIE11=g.indexOf("Trident/")!=-1&&(g.indexOf("rv:")!=-1||o.appName.indexOf("Netscape")!=-1);s.isOpera=e.opera&&opera.buildNumber;s.isWebKit=/WebKit/.test(g);s.isIE=!s.isWebKit&&!s.isOpera&&(/MSIE/gi).test(g)&&(/Explorer/gi).test(o.appName)||s.isIE11;s.isIE6=s.isIE&&/MSIE [56]/.test(g);s.isIE7=s.isIE&&/MSIE [7]/.test(g);s.isIE8=s.isIE&&/MSIE [8]/.test(g);s.isIE9=s.isIE&&/MSIE [9]/.test(g);s.isGecko=!s.isWebKit&&!s.isIE11&&/Gecko/.test(g);s.isMac=g.indexOf("Mac")!=-1;s.isAir=/adobeair/i.test(g);s.isIDevice=/(iPad|iPhone)/.test(g);s.isIOS5=s.isIDevice&&g.match(/AppleWebKit\/(\d*)/)[1]>=534;s.isIE12=(document.msElementsFromPoint&&!s.isIE&&!s.isIE11);if(s.isIE12){s.isIE11=true;s.isWebKit=false}if(e.tinyMCEPreInit){s.suffix=tinyMCEPreInit.suffix;s.baseURL=tinyMCEPreInit.base;s.query=tinyMCEPreInit.query;return}s.suffix="";f=q.getElementsByTagName("base");for(m=0;m0?b:[f.scope]);if(e===false){break}}a.inDispatch=false;return e}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,i,d,c,h;e=tinymce.trim(e);g=f.settings=g||{};if(/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^[\w\-]*:?\/\//.test(e)){h=g.base_uri?g.base_uri.path:new tinymce.util.URI(location.href).directory;e=((g.base_uri&&g.base_uri.protocol)||"http")+"://mce_host"+f.toAbsPath(h,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});c=g.base_uri;if(c){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host==="mce_host"){f.port=c.port}if(!f.host||f.host==="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var d=this,f;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:d});if((b.host!="mce_host"&&d.host!=b.host&&b.host)||d.port!=b.port||d.protocol!=b.protocol){return b.getURI()}var c=d.getURI(),e=b.getURI();if(c==e||(c.charAt(c.length-1)=="/"&&c.substr(0,c.length-1)==e)){return c}f=d.toRelPath(d.path,b.path);if(b.query){f+="?"+b.query}if(b.anchor){f+="#"+b.anchor}return f},toAbsolute:function(b,c){b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host&&this.protocol==b.protocol?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length=g.length||g[e]!=c[e]){f=e+1;break}}}if(f===1){return h}for(e=0,b=g.length-(f-1);e=0;c--){if(f[c].length===0||f[c]==="."){continue}if(f[c]===".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!==0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(c,e,d){var b=new Date();b.setTime(b.getTime()-1000);this.set(c,"",b,e,d)}})})();(function(){function serialize(o,quote){var i,v,t,name;quote=quote||'"';if(o==null){return"null"}t=typeof o;if(t=="string"){v="\bb\tt\nn\ff\rr\"\"''\\\\";return quote+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(a,b){if(quote==='"'&&a==="'"){return a}i=v.indexOf(b);if(i+1){return"\\"+v.charAt(i+1)}a=b.charCodeAt().toString(16);return"\\u"+"0000".substring(a.length)+a})+quote}if(t=="object"){if(o.hasOwnProperty&&Object.prototype.toString.call(o)==="[object Array]"){for(i=0,v="[";i0?",":"")+serialize(o[i],quote)}return v+"]"}v="{";for(name in o){if(o.hasOwnProperty(name)){v+=typeof o[name]!="function"?(v.length>1?","+quote:quote)+name+quote+":"+serialize(o[name],quote):""}}return v+"}"}return""+o}tinymce.util.JSON={serialize:serialize,parse:function(s){try{return eval("("+s+")")}catch(ex){}}}})();tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){if(e){e.call(f.error_scope||f.scope,h,g)}};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(a){a.VK={BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(b){return b.shiftKey||b.ctrlKey||b.altKey},metaKeyPressed:function(b){return a.isMac?b.metaKey:b.ctrlKey&&!b.altKey}}})(tinymce);tinymce.util.Quirks=function(a){var j=tinymce.VK,f=j.BACKSPACE,l=j.DELETE,e=a.dom,n=a.selection,J=a.settings,y=a.parser,q=a.serializer,G=tinymce.each;function C(P,O){try{a.getDoc().execCommand(P,false,O)}catch(N){}}function p(){var N=a.getDoc().documentMode;return N?N:6}function B(N){return N.isDefaultPrevented()}function L(){function N(T){var P,R,O,U,Q,S,V;function W(){if(Q.nodeType==3){if(T&&S==Q.length){return true}if(!T&&S===0){return true}}}P=n.getRng();var X=[P.startContainer,P.startOffset,P.endContainer,P.endOffset];if(!P.collapsed){T=true}Q=P[(T?"start":"end")+"Container"];S=P[(T?"start":"end")+"Offset"];if(Q.nodeType==3){R=e.getParent(P.startContainer,e.isBlock);if(T){R=e.getNext(R,e.isBlock)}if(R&&(W()||!P.collapsed)){O=e.create("em",{id:"__mceDel"});G(tinymce.grep(R.childNodes),function(Y){O.appendChild(Y)});R.appendChild(O)}}P=e.createRng();P.setStart(X[0],X[1]);P.setEnd(X[2],X[3]);n.setRng(P);a.getDoc().execCommand(T?"ForwardDelete":"Delete",false,null);if(O){U=n.getBookmark();while(V=e.get("__mceDel")){e.remove(V,true)}n.moveToBookmark(U)}}a.onKeyDown.add(function(O,Q){var P;P=Q.keyCode==l;if(!B(Q)&&(P||Q.keyCode==f)&&!j.modifierPressed(Q)){Q.preventDefault();N(P)}});a.addCommand("Delete",function(){N()})}function s(){function N(Q){var P=e.create("body");var R=Q.cloneContents();P.appendChild(R);return n.serializer.serialize(P,{format:"html"})}function O(P){var R=N(P);var S=e.createRng();S.selectNode(a.getBody());var Q=N(S);return R===Q}a.onKeyDown.add(function(Q,S){var R=S.keyCode,P;if(!B(S)&&(R==l||R==f)){P=Q.selection.isCollapsed();if(P&&!e.isEmpty(Q.getBody())){return}if(tinymce.isIE&&!P){return}if(!P&&!O(Q.selection.getRng())){return}Q.setContent("");Q.selection.setCursorLocation(Q.getBody(),0);Q.nodeChanged()}})}function K(){a.onKeyDown.add(function(N,O){if(!B(O)&&O.keyCode==65&&j.metaKeyPressed(O)){O.preventDefault();N.execCommand("SelectAll")}})}function M(){if(!a.settings.content_editable){e.bind(a.getDoc(),"focusin",function(N){n.setRng(n.getRng())});e.bind(a.getDoc(),"mousedown",function(N){if(N.target==a.getDoc().documentElement){a.getWin().focus();n.setRng(n.getRng())}})}}function D(){a.onKeyDown.add(function(N,Q){if(!B(Q)&&Q.keyCode===f){if(n.isCollapsed()&&n.getRng(true).startOffset===0){var P=n.getNode();var O=P.previousSibling;if(O&&O.nodeName&&O.nodeName.toLowerCase()==="hr"){e.remove(O);tinymce.dom.Event.cancel(Q)}}}})}function A(){if(!Range.prototype.getClientRects){a.onMouseDown.add(function(O,P){if(!B(P)&&P.target.nodeName==="HTML"){var N=O.getBody();N.blur();setTimeout(function(){N.focus()},0)}})}}function h(){a.onClick.add(function(N,O){O=O.target;if(/^(IMG|HR)$/.test(O.nodeName)){n.getSel().setBaseAndExtent(O,0,O,1)}if(O.nodeName=="A"&&e.hasClass(O,"mceItemAnchor")){n.select(O)}N.nodeChanged()})}function c(){function O(){var Q=e.getAttribs(n.getStart().cloneNode(false));return function(){var R=n.getStart();if(R!==a.getBody()){e.setAttrib(R,"style",null);G(Q,function(S){R.setAttributeNode(S.cloneNode(true))})}}}function N(){return !n.isCollapsed()&&e.getParent(n.getStart(),e.isBlock)!=e.getParent(n.getEnd(),e.isBlock)}function P(Q,R){R.preventDefault();return false}a.onKeyPress.add(function(Q,S){var R;if(!B(S)&&(S.keyCode==8||S.keyCode==46)&&N()){R=O();Q.getDoc().execCommand("delete",false,null);R();S.preventDefault();return false}});e.bind(a.getDoc(),"cut",function(R){var Q;if(!B(R)&&N()){Q=O();a.onKeyUp.addToTop(P);setTimeout(function(){Q();a.onKeyUp.remove(P)},0)}})}function b(){var O,N;e.bind(a.getDoc(),"selectionchange",function(){if(N){clearTimeout(N);N=0}N=window.setTimeout(function(){var P=n.getRng();if(!O||!tinymce.dom.RangeUtils.compareRanges(P,O)){a.nodeChanged();O=P}},50)})}function z(){document.body.setAttribute("role","application")}function v(){a.onKeyDown.add(function(N,P){if(!B(P)&&P.keyCode===f){if(n.isCollapsed()&&n.getRng(true).startOffset===0){var O=n.getNode().previousSibling;if(O&&O.nodeName&&O.nodeName.toLowerCase()==="table"){return tinymce.dom.Event.cancel(P)}}}})}function E(){if(p()>7){return}C("RespectVisibilityInDesign",true);a.contentStyles.push(".mceHideBrInPre pre br {display: none}");e.addClass(a.getBody(),"mceHideBrInPre");y.addNodeFilter("pre",function(N,P){var Q=N.length,S,O,T,R;while(Q--){S=N[Q].getAll("br");O=S.length;while(O--){T=S[O];R=T.prev;if(R&&R.type===3&&R.value.charAt(R.value-1)!="\n"){R.value+="\n"}else{T.parent.insert(new tinymce.html.Node("#text",3),T,true).value="\n"}}}});q.addNodeFilter("pre",function(N,P){var Q=N.length,S,O,T,R;while(Q--){S=N[Q].getAll("br");O=S.length;while(O--){T=S[O];R=T.prev;if(R&&R.type==3){R.value=R.value.replace(/\r?\n$/,"")}}}})}function g(){e.bind(a.getBody(),"mouseup",function(P){var O,N=n.getNode();if(N.nodeName=="IMG"){if(O=e.getStyle(N,"width")){e.setAttrib(N,"width",O.replace(/[^0-9%]+/g,""));e.setStyle(N,"width","")}if(O=e.getStyle(N,"height")){e.setAttrib(N,"height",O.replace(/[^0-9%]+/g,""));e.setStyle(N,"height","")}}})}function d(){a.onKeyDown.add(function(T,U){var S,N,O,Q,R,V,P;S=U.keyCode==l;if(!B(U)&&(S||U.keyCode==f)&&!j.modifierPressed(U)){N=n.getRng();O=N.startContainer;Q=N.startOffset;P=N.collapsed;if(O.nodeType==3&&O.nodeValue.length>0&&((Q===0&&!P)||(P&&Q===(S?0:1)))){V=O.previousSibling;if(V&&V.nodeName=="IMG"){return}nonEmptyElements=T.schema.getNonEmptyElements();U.preventDefault();R=e.create("br",{id:"__tmp"});O.parentNode.insertBefore(R,O);T.getDoc().execCommand(S?"ForwardDelete":"Delete",false,null);O=n.getRng().startContainer;V=O.previousSibling;if(V&&V.nodeType==1&&!e.isBlock(V)&&e.isEmpty(V)&&!nonEmptyElements[V.nodeName.toLowerCase()]){e.remove(V)}e.remove("__tmp")}}})}function I(){a.onKeyDown.add(function(R,S){var P,O,T,N,Q;if(B(S)||S.keyCode!=j.BACKSPACE){return}P=n.getRng();O=P.startContainer;T=P.startOffset;N=e.getRoot();Q=O;if(!P.collapsed||T!==0){return}while(Q&&Q.parentNode&&Q.parentNode.firstChild==Q&&Q.parentNode!=N){Q=Q.parentNode}if(Q.tagName==="BLOCKQUOTE"){R.formatter.toggle("blockquote",null,Q);P=e.createRng();P.setStart(O,0);P.setEnd(O,0);n.setRng(P)}})}function H(){function N(){a._refreshContentEditable();C("StyleWithCSS",false);C("enableInlineTableEditing",false);if(!J.object_resizing){C("enableObjectResizing",false)}}if(!J.readonly){a.onBeforeExecCommand.add(N);a.onMouseDown.add(N)}}function u(){function N(O,P){G(e.select("a"),function(S){var Q=S.parentNode,R=e.getRoot();if(Q.lastChild===S){while(Q&&!e.isBlock(Q)){if(Q.parentNode.lastChild!==Q||Q===R){return}Q=Q.parentNode}e.add(Q,"br",{"data-mce-bogus":1})}})}a.onExecCommand.add(function(O,P){if(P==="CreateLink"){N(O)}});a.onSetContent.add(n.onSetContent.add(N))}function o(){if(J.forced_root_block){a.onInit.add(function(){C("DefaultParagraphSeparator",J.forced_root_block)})}}function r(){function N(P,O){if(!P||!O.initial){a.execCommand("mceRepaint")}}a.onUndo.add(N);a.onRedo.add(N);a.onSetContent.add(N)}function i(){a.onKeyDown.add(function(O,P){var N;if(!B(P)&&P.keyCode==f){N=O.getDoc().selection.createRange();if(N&&N.item){P.preventDefault();O.undoManager.beforeChange();e.remove(N.item(0));O.undoManager.add()}}})}function t(){var N;if(p()>=10){N="";G("p div h1 h2 h3 h4 h5 h6".split(" "),function(O,P){N+=(P>0?",":"")+O+":empty"});a.contentStyles.push(N+"{padding-right: 1px !important}")}}function x(){var P,O,af,N,aa,ad,ab,ae,Q,R,ac,Y,X,Z=document,V=a.getDoc();if(!J.object_resizing||J.webkit_fake_resize===false){return}C("enableObjectResizing",false);ac={n:[0.5,0,0,-1],e:[1,0.5,1,0],s:[0.5,1,0,1],w:[0,0.5,-1,0],nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};function T(aj){var ai,ah;ai=aj.screenX-ad;ah=aj.screenY-ab;Y=ai*aa[2]+ae;X=ah*aa[3]+Q;Y=Y<5?5:Y;X=X<5?5:X;if(j.modifierPressed(aj)||(af.nodeName=="IMG"&&aa[2]*aa[3]!==0)){Y=Math.round(X/R);X=Math.round(Y*R)}e.setStyles(N,{width:Y,height:X});if(aa[2]<0&&N.clientWidth<=Y){e.setStyle(N,"left",P+(ae-Y))}if(aa[3]<0&&N.clientHeight<=X){e.setStyle(N,"top",O+(Q-X))}}function ag(){function ah(ai,aj){if(aj){if(af.style[ai]||!a.schema.isValid(af.nodeName.toLowerCase(),ai)){e.setStyle(af,ai,aj)}else{e.setAttrib(af,ai,aj)}}}ah("width",Y);ah("height",X);e.unbind(V,"mousemove",T);e.unbind(V,"mouseup",ag);if(Z!=V){e.unbind(Z,"mousemove",T);e.unbind(Z,"mouseup",ag)}e.remove(N);S(af)}function S(ak){var ai,aj,ah;U();ai=e.getPos(ak);P=ai.x;O=ai.y;aj=ak.offsetWidth;ah=ak.offsetHeight;if(af!=ak){af=ak;Y=X=0}G(ac,function(an,al){var am;am=e.get("mceResizeHandle"+al);if(!am){am=e.add(V.documentElement,"div",{id:"mceResizeHandle"+al,"class":"mceResizeHandle",style:"cursor:"+al+"-resize; margin:0; padding:0"});e.bind(am,"mousedown",function(ao){ao.preventDefault();ag();ad=ao.screenX;ab=ao.screenY;ae=af.clientWidth;Q=af.clientHeight;R=Q/ae;aa=an;N=af.cloneNode(true);e.addClass(N,"mceClonedResizable");e.setStyles(N,{left:P,top:O,margin:0});V.documentElement.appendChild(N);e.bind(V,"mousemove",T);e.bind(V,"mouseup",ag);if(Z!=V){e.bind(Z,"mousemove",T);e.bind(Z,"mouseup",ag)}})}else{e.show(am)}e.setStyles(am,{left:(aj*an[0]+P)-(am.offsetWidth/2),top:(ah*an[1]+O)-(am.offsetHeight/2)})});if(!tinymce.isOpera&&af.nodeName=="IMG"){af.setAttribute("data-mce-selected","1")}}function U(){if(af){af.removeAttribute("data-mce-selected")}for(var ah in ac){e.hide("mceResizeHandle"+ah)}}a.contentStyles.push(".mceResizeHandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}.mceResizeHandle:hover {background: #000}img[data-mce-selected] {outline: 1px solid black}img.mceClonedResizable, table.mceClonedResizable {position: absolute;outline: 1px dashed black;opacity: .5;z-index: 10000}");function W(){var ah=e.getParent(n.getNode(),"table,img");G(e.select("img[data-mce-selected]"),function(ai){ai.removeAttribute("data-mce-selected")});if(ah){S(ah)}else{U()}}a.onNodeChange.add(W);e.bind(V,"selectionchange",W);a.serializer.addAttributeFilter("data-mce-selected",function(ah,ai){var aj=ah.length;while(aj--){ah[aj].attr(ai,null)}})}function F(){if(p()<9){y.addNodeFilter("noscript",function(N){var O=N.length,P,Q;while(O--){P=N[O];Q=P.firstChild;if(Q){P.attr("data-mce-innertext",Q.value)}}});q.addNodeFilter("noscript",function(N){var O=N.length,P,R,Q;while(O--){P=N[O];R=N[O].firstChild;if(R){R.value=tinymce.html.Entities.decode(R.value)}else{Q=P.attributes.map["data-mce-innertext"];if(Q){P.attr("data-mce-innertext",null);R=new tinymce.html.Node("#text",3);R.value=Q;R.raw=true;P.append(R)}}}})}}function m(){a.contentStyles.push("body {min-height: 100px}");a.onClick.add(function(N,O){if(O.target.nodeName=="HTML"){a.execCommand("SelectAll");a.selection.collapse(true);a.nodeChanged()}})}function k(){a.onInit.add(function(){var N;a.getBody().addEventListener("mscontrolselect",function(O){setTimeout(function(){if(a.selection.getNode()!=O.target){N=a.selection.getRng();n.fakeRng=a.dom.createRng();n.fakeRng.setStartBefore(O.target);n.fakeRng.setEndAfter(O.target)}},0)},false);a.getDoc().addEventListener("selectionchange",function(O){if(N&&!tinymce.dom.RangeUtils.compareRanges(a.selection.getRng(),N)){n.fakeRng=N=null}},false)})}v();I();s();if(tinymce.isWebKit){d();L();M();h();o();if(tinymce.isIDevice){b()}else{x();K()}}if(tinymce.isIE&&!tinymce.isIE11){D();z();E();g();i();t();F()}if(tinymce.isIE11){m();k()}if(tinymce.isGecko&&!tinymce.isIE11){D();A();c();H();u();r()}if(tinymce.isOpera){x()}};(function(j){var a,g,d,k=/[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,b=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=/[<>&\"\']/g,c=/&(#x|#)?([\w]+);/g,i={128:"\u20AC",130:"\u201A",131:"\u0192",132:"\u201E",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02C6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017D",145:"\u2018",146:"\u2019",147:"\u201C",148:"\u201D",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02DC",153:"\u2122",154:"\u0161",155:"\u203A",156:"\u0153",158:"\u017E",159:"\u0178"};g={'"':""","'":"'","<":"<",">":">","&":"&"};d={"<":"<",">":">","&":"&",""":'"',"'":"'"};function h(l){var m;m=document.createElement("div");m.innerHTML=l;return m.textContent||m.innerText||l}function e(m,p){var n,o,l,q={};if(m){m=m.split(",");p=p||10;for(n=0;n1){return"&#"+(((n.charCodeAt(0)-55296)*1024)+(n.charCodeAt(1)-56320)+65536)+";"}return g[n]||"&#"+n.charCodeAt(0)+";"})},encodeNamed:function(n,l,m){m=m||a;return n.replace(l?k:b,function(o){return g[o]||m[o]||o})},getEncodeFunc:function(l,o){var p=j.html.Entities;o=e(o)||a;function m(r,q){return r.replace(q?k:b,function(s){return g[s]||o[s]||"&#"+s.charCodeAt(0)+";"||s})}function n(r,q){return p.encodeNamed(r,q,o)}l=j.makeMap(l.replace(/\+/g,","));if(l.named&&l.numeric){return m}if(l.named){if(o){return n}return p.encodeNamed}if(l.numeric){return p.encodeNumeric}return p.encodeRaw},decode:function(l){return l.replace(c,function(n,m,o){if(m){o=parseInt(o,m.length===2?16:10);if(o>65535){o-=65536;return String.fromCharCode(55296+(o>>10),56320+(o&1023))}else{return i[o]||String.fromCharCode(o)}}return d[n]||a[n]||h(n)})}}})(tinymce);tinymce.html.Styles=function(d,f){var k=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,h=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,b=/\s*([^:]+):\s*([^;]+);?/g,l=/\s+$/,m=/rgb/,e,g,a={},j;d=d||{};j="\\\" \\' \\; \\: ; : \uFEFF".split(" ");for(g=0;g1?r:"0"+r}return"#"+o(q)+o(p)+o(i)}return{toHex:function(i){return i.replace(k,c)},parse:function(s){var z={},q,n,x,r,v=d.url_converter,y=d.url_converter_scope||this;function p(D,G){var F,C,B,E;if(z["border-image"]==="none"){delete z["border-image"]}F=z[D+"-top"+G];if(!F){return}C=z[D+"-right"+G];if(F!=C){return}B=z[D+"-bottom"+G];if(C!=B){return}E=z[D+"-left"+G];if(B!=E){return}z[D+G]=E;delete z[D+"-top"+G];delete z[D+"-right"+G];delete z[D+"-bottom"+G];delete z[D+"-left"+G]}function u(C){var D=z[C],B;if(!D||D.indexOf(" ")<0){return}D=D.split(" ");B=D.length;while(B--){if(D[B]!==D[0]){return false}}z[C]=D[0];return true}function A(D,C,B,E){if(!u(C)){return}if(!u(B)){return}if(!u(E)){return}z[D]=z[C]+" "+z[B]+" "+z[E];delete z[C];delete z[B];delete z[E]}function t(B){r=true;return a[B]}function i(C,B){if(r){C=C.replace(/\uFEFF[0-9]/g,function(D){return a[D]})}if(!B){C=C.replace(/\\([\'\";:])/g,"$1")}return C}function o(C,B,F,E,G,D){G=G||D;if(G){G=i(G);return"'"+G.replace(/\'/g,"\\'")+"'"}B=i(B||F||E);if(v){B=v.call(y,B,"style")}return"url('"+B.replace(/\'/g,"\\'")+"')"}if(s){s=s.replace(/\\[\"\';:\uFEFF]/g,t).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(B){return B.replace(/[;:]/g,t)});while(q=b.exec(s)){n=q[1].replace(l,"").toLowerCase();x=q[2].replace(l,"");if(n&&x.length>0){if(n==="font-weight"&&x==="700"){x="bold"}else{if(n==="color"||n==="background-color"){x=x.toLowerCase()}}x=x.replace(k,c);x=x.replace(h,o);z[n]=r?i(x,true):x}b.lastIndex=q.index+q[0].length}p("border","");p("border","-width");p("border","-color");p("border","-style");p("padding","");p("margin","");A("border","border-width","border-style","border-color");if(z.border==="medium none"){delete z.border}}return z},serialize:function(p,r){var o="",n,q;function i(t){var x,u,s,v;x=f.styles[t];if(x){for(u=0,s=x.length;u0){o+=(o.length>0?" ":"")+t+": "+v+";"}}}}if(r&&f&&f.styles){i("*");i(r)}else{for(n in p){q=p[n];if(q!==e&&q.length>0){o+=(o.length>0?" ":"")+n+": "+q+";"}}}return o}}};(function(f){var a={},e=f.makeMap,g=f.each;function d(j,i){return j.split(i||",")}function h(m,l){var j,k={};function i(n){return n.replace(/[A-Z]+/g,function(o){return i(m[o])})}for(j in m){if(m.hasOwnProperty(j)){m[j]=i(m[j])}}i(l).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,function(q,o,n,p){n=d(n,"|");k[o]={attributes:e(n),attributesOrder:n,children:e(p,"|",{"#comment":{}})}});return k}function b(){var i=a.html5;if(!i){i=a.html5=h({A:"id|accesskey|class|dir|draggable|item|hidden|itemprop|role|spellcheck|style|subject|title|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"#|a|abbr|area|audio|b|bdo|br|button|canvas|cite|code|command|datalist|del|dfn|em|embed|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|meta|meter|noscript|object|output|progress|q|ruby|samp|script|select|small|span|strong|sub|sup|svg|textarea|time|var|video|wbr",C:"#|a|abbr|area|address|article|aside|audio|b|bdo|blockquote|br|button|canvas|cite|code|command|datalist|del|details|dfn|dialog|div|dl|em|embed|fieldset|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|menu|meta|meter|nav|noscript|ol|object|output|p|pre|progress|q|ruby|samp|script|section|select|small|span|strong|style|sub|sup|svg|table|textarea|time|ul|var|video"},"html[A|manifest][body|head]head[A][base|command|link|meta|noscript|script|style|title]title[A][#]base[A|href|target][]link[A|href|rel|media|type|sizes][]meta[A|http-equiv|name|content|charset][]style[A|type|media|scoped][#]script[A|charset|type|src|defer|async][#]noscript[A][C]body[A][C]section[A][C]nav[A][C]article[A][C]aside[A][C]h1[A][B]h2[A][B]h3[A][B]h4[A][B]h5[A][B]h6[A][B]hgroup[A][h1|h2|h3|h4|h5|h6]header[A][C]footer[A][C]address[A][C]p[A][B]br[A][]pre[A][B]dialog[A][dd|dt]blockquote[A|cite][C]ol[A|start|reversed][li]ul[A][li]li[A|value][C]dl[A][dd|dt]dt[A][B]dd[A][C]a[A|href|target|ping|rel|media|type][B]em[A][B]strong[A][B]small[A][B]cite[A][B]q[A|cite][B]dfn[A][B]abbr[A][B]code[A][B]var[A][B]samp[A][B]kbd[A][B]sub[A][B]sup[A][B]i[A][B]b[A][B]mark[A][B]progress[A|value|max][B]meter[A|value|min|max|low|high|optimum][B]time[A|datetime][B]ruby[A][B|rt|rp]rt[A][B]rp[A][B]bdo[A][B]span[A][B]ins[A|cite|datetime][B]del[A|cite|datetime][B]figure[A][C|legend|figcaption]figcaption[A][C]img[A|alt|src|height|width|usemap|ismap][]iframe[A|name|src|height|width|sandbox|seamless][]embed[A|src|height|width|type][]object[A|data|type|height|width|usemap|name|form|classid][param]param[A|name|value][]details[A|open][C|legend]command[A|type|label|icon|disabled|checked|radiogroup][]menu[A|type|label][C|li]legend[A][C|B]div[A][C]source[A|src|type|media][]audio[A|src|autobuffer|autoplay|loop|controls][source]video[A|src|autobuffer|autoplay|loop|controls|width|height|poster][source]hr[A][]form[A|accept-charset|action|autocomplete|enctype|method|name|novalidate|target][C]fieldset[A|disabled|form|name][C|legend]label[A|form|for][B]input[A|type|accept|alt|autocomplete|autofocus|checked|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|height|list|max|maxlength|min|multiple|pattern|placeholder|readonly|required|size|src|step|width|files|value|name][]button[A|autofocus|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|name|value|type][B]select[A|autofocus|disabled|form|multiple|name|size][option|optgroup]datalist[A][B|option]optgroup[A|disabled|label][option]option[A|disabled|selected|label|value][]textarea[A|autofocus|disabled|form|maxlength|name|placeholder|readonly|required|rows|cols|wrap][]keygen[A|autofocus|challenge|disabled|form|keytype|name][]output[A|for|form|name][B]canvas[A|width|height][]map[A|name][B|C]area[A|shape|coords|href|alt|target|media|rel|ping|type][]mathml[A][]svg[A][]table[A|border][caption|colgroup|thead|tfoot|tbody|tr]caption[A][C]colgroup[A|span][col]col[A|span][]thead[A][tr]tfoot[A][tr]tbody[A][tr]tr[A][th|td]th[A|headers|rowspan|colspan|scope][B]td[A|headers|rowspan|colspan][C]wbr[A][]")}return i}function c(){var i=a.html4;if(!i){i=a.html4=h({Z:"H|K|N|O|P",Y:"X|form|R|Q",ZG:"E|span|width|align|char|charoff|valign",X:"p|T|div|U|W|isindex|fieldset|table",ZF:"E|align|char|charoff|valign",W:"pre|hr|blockquote|address|center|noframes",ZE:"abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height",ZD:"[E][S]",U:"ul|ol|dl|menu|dir",ZC:"p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",T:"h1|h2|h3|h4|h5|h6",ZB:"X|S|Q",S:"R|P",ZA:"a|G|J|M|O|P",R:"a|H|K|N|O",Q:"noscript|P",P:"ins|del|script",O:"input|select|textarea|label|button",N:"M|L",M:"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",L:"sub|sup",K:"J|I",J:"tt|i|b|u|s|strike",I:"big|small|font|basefont",H:"G|F",G:"br|span|bdo",F:"object|applet|img|map|iframe",E:"A|B|C",D:"accesskey|tabindex|onfocus|onblur",C:"onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"lang|xml:lang|dir",A:"id|class|style|title"},"script[id|charset|type|language|src|defer|xml:space][]style[B|id|type|media|title|xml:space][]object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]param[id|name|value|valuetype|type][]p[E|align][#|S]a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]br[A|clear][]span[E][#|S]bdo[A|C|B][#|S]applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]h1[E|align][#|S]img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]map[B|C|A|name][X|form|Q|area]h2[E|align][#|S]iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]h3[E|align][#|S]tt[E][#|S]i[E][#|S]b[E][#|S]u[E][#|S]s[E][#|S]strike[E][#|S]big[E][#|S]small[E][#|S]font[A|B|size|color|face][#|S]basefont[id|size|color|face][]em[E][#|S]strong[E][#|S]dfn[E][#|S]code[E][#|S]q[E|cite][#|S]samp[E][#|S]kbd[E][#|S]var[E][#|S]cite[E][#|S]abbr[E][#|S]acronym[E][#|S]sub[E][#|S]sup[E][#|S]input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]optgroup[E|disabled|label][option]option[E|selected|disabled|label|value][]textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]label[E|for|accesskey|onfocus|onblur][#|S]button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[E|align][#|S]ins[E|cite|datetime][#|Y]h5[E|align][#|S]del[E|cite|datetime][#|Y]h6[E|align][#|S]div[E|align][#|Y]ul[E|type|compact][li]li[E|type|value][#|Y]ol[E|type|compact|start][li]dl[E|compact][dt|dd]dt[E][#|S]dd[E][#|Y]menu[E|compact][li]dir[E|compact][li]pre[E|width|xml:space][#|ZA]hr[E|align|noshade|size|width][]blockquote[E|cite][#|Y]address[E][#|S|p]center[E][#|Y]noframes[E][#|Y]isindex[A|B|prompt][]fieldset[E][#|legend|Y]legend[E|accesskey|align][#|S]table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]caption[E|align][#|S]col[ZG][]colgroup[ZG][col]thead[ZF][tr]tr[ZF|bgcolor][th|td]th[E|ZE][#|Y]form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]noscript[E][#|Y]td[E|ZE][#|Y]tfoot[ZF][tr]tbody[ZF][tr]area[E|D|shape|coords|href|nohref|alt|target][]base[id|href|target][]body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]")}return i}f.html.Schema=function(A){var u=this,s={},k={},j=[],D,y;var o,q,z,r,v,n,p={};function m(F,E,H){var G=A[F];if(!G){G=a[F];if(!G){G=e(E," ",e(E.toUpperCase()," "));G=f.extend(G,H);a[F]=G}}else{G=e(G,",",e(G.toUpperCase()," "))}return G}A=A||{};y=A.schema=="html5"?b():c();if(A.verify_html===false){A.valid_elements="*[*]"}if(A.valid_styles){D={};g(A.valid_styles,function(F,E){D[E]=f.explode(F)})}o=m("whitespace_elements","pre script noscript style textarea");q=m("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr");z=m("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr");r=m("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls");n=m("non_empty_elements","td th iframe video audio object script",z);textBlockElementsMap=m("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure");v=m("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup",textBlockElementsMap);function i(E){return new RegExp("^"+E.replace(/([?+*])/g,".$1")+"$")}function C(L){var K,G,Z,V,aa,F,I,U,X,Q,Y,ac,O,J,W,E,S,H,ab,ad,P,T,N=/^([#+\-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,R=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,M=/[*?+]/;if(L){L=d(L);if(s["@"]){S=s["@"].attributes;H=s["@"].attributesOrder}for(K=0,G=L.length;K=0){for(U=A.length-1;U>=V;U--){T=A[U];if(T.valid){n.end(T.name)}}A.length=V}}function p(U,T,Y,X,W){var Z,V;T=T.toLowerCase();Y=T in H?T:j(Y||X||W||"");if(v&&!z&&T.indexOf("data-")!==0){Z=P[T];if(!Z&&F){V=F.length;while(V--){Z=F[V];if(Z.pattern.test(T)){break}}if(V===-1){Z=null}}if(!Z){return}if(Z.validValues&&!(Y in Z.validValues)){return}}N.map[T]=Y;N.push({name:T,value:Y})}l=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g");D=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g;K={script:/<\/script[^>]*>/gi,style:/<\/style[^>]*>/gi,noscript:/<\/noscript[^>]*>/gi};M=e.getShortEndedElements();J=c.self_closing_elements||e.getSelfClosingElements();H=e.getBoolAttrs();v=c.validate;s=c.remove_internals;y=c.fix_self_closing;q=a.isIE;o=/^:/;while(g=l.exec(E)){if(G0&&A[A.length-1].name===I){u(I)}if(!v||(m=e.getElementRule(I))){k=true;if(v){P=m.attributes;F=m.attributePatterns}if(R=g[8]){z=R.indexOf("data-mce-type")!==-1;if(z&&s){k=false}N=[];N.map={};R.replace(D,p)}else{N=[];N.map={}}if(v&&!z){S=m.attributesRequired;L=m.attributesDefault;f=m.attributesForced;if(f){Q=f.length;while(Q--){t=f[Q];r=t.name;h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}if(L){Q=L.length;while(Q--){t=L[Q];r=t.name;if(!(r in N.map)){h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}}if(S){Q=S.length;while(Q--){if(S[Q] in N.map){break}}if(Q===-1){k=false}}if(N.map["data-mce-bogus"]){k=false}}if(k){n.start(I,N,O)}}else{k=false}if(B=K[I]){B.lastIndex=G=g.index+g[0].length;if(g=B.exec(E)){if(k){C=E.substr(G,g.index-G)}G=g.index+g[0].length}else{C=E.substr(G);G=E.length}if(k&&C.length>0){n.text(C,true)}if(k){n.end(I)}l.lastIndex=G;continue}if(!O){if(!R||R.indexOf("/")!=R.length-1){A.push({name:I,valid:k})}else{if(k){n.end(I)}}}}else{if(I=g[1]){n.comment(I)}else{if(I=g[2]){n.cdata(I)}else{if(I=g[3]){n.doctype(I)}else{if(I=g[4]){n.pi(I,g[5])}}}}}}G=g.index+g[0].length}if(G=0;Q--){I=A[Q];if(I.valid){n.end(I.name)}}}}})(tinymce);(function(d){var c=/^[ \t\r\n]*$/,e={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};function a(k,l,j){var i,h,f=j?"lastChild":"firstChild",g=j?"prev":"next";if(k[f]){return k[f]}if(k!==l){i=k[g];if(i){return i}for(h=k.parent;h&&h!==l;h=h.parent){i=h[g];if(i){return i}}}}function b(f,g){this.name=f;this.type=g;if(g===1){this.attributes=[];this.attributes.map={}}}d.extend(b.prototype,{replace:function(g){var f=this;if(g.parent){g.remove()}f.insert(g,f);f.remove();return f},attr:function(h,l){var f=this,g,j,k;if(typeof h!=="string"){for(j in h){f.attr(j,h[j])}return f}if(g=f.attributes){if(l!==k){if(l===null){if(h in g.map){delete g.map[h];j=g.length;while(j--){if(g[j].name===h){g=g.splice(j,1);return f}}}return f}if(h in g.map){j=g.length;while(j--){if(g[j].name===h){g[j].value=l;break}}}else{g.push({name:h,value:l})}g.map[h]=l;return f}else{return g.map[h]}}},clone:function(){var g=this,n=new b(g.name,g.type),h,f,m,j,k;if(m=g.attributes){k=[];k.map={};for(h=0,f=m.length;h1){x.reverse();A=o=f.filterNode(x[0].clone());for(u=0;u0){Q.value=l;Q=Q.prev}else{O=Q.prev;Q.remove();Q=O}}}function H(O){var P,l={};for(P in O){if(P!=="li"&&P!="p"){l[P]=O[P]}}return l}n=new b.html.SaxParser({validate:z,self_closing_elements:H(h.getSelfClosingElements()),cdata:function(l){B.append(K("#cdata",4)).value=l},text:function(P,l){var O;if(!L){P=P.replace(k," ");if(B.lastChild&&o[B.lastChild.name]){P=P.replace(E,"")}}if(P.length!==0){O=K("#text",3);O.raw=!!l;B.append(O).value=P}},comment:function(l){B.append(K("#comment",8)).value=l},pi:function(l,O){B.append(K(l,7)).value=O;I(B)},doctype:function(O){var l;l=B.append(K("#doctype",10));l.value=O;I(B)},start:function(l,W,P){var U,R,Q,O,S,X,V,T;Q=z?h.getElementRule(l):{};if(Q){U=K(Q.outputName||l,1);U.attributes=W;U.shortEnded=P;B.append(U);T=p[B.name];if(T&&p[U.name]&&!T[U.name]){M.push(U)}R=d.length;while(R--){S=d[R].name;if(S in W.map){F=c[S];if(F){F.push(U)}else{c[S]=[U]}}}if(o[l]){I(U)}if(!P){B=U}if(!L&&s[l]){L=true}}},end:function(l){var S,P,R,O,Q;P=z?h.getElementRule(l):{};if(P){if(o[l]){if(!L){S=B.firstChild;if(S&&S.type===3){R=S.value.replace(E,"");if(R.length>0){S.value=R;S=S.next}else{O=S.next;S.remove();S=O;while(S&&S.type===3){R=S.value;O=S.next;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}}S=B.lastChild;if(S&&S.type===3){R=S.value.replace(t,"");if(R.length>0){S.value=R;S=S.prev}else{O=S.prev;S.remove();S=O;while(S&&S.type===3){R=S.value;O=S.prev;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}}}}if(L&&s[l]){L=false}if(P.removeEmpty||P.paddEmpty){if(B.isEmpty(u)){if(P.paddEmpty){B.empty().append(new a("#text","3")).value="\u00a0"}else{if(!B.attributes.map.name&&!B.attributes.map.id){Q=B.parent;if(o[B.name]){B.empty().remove()}else{B.unwrap()}B=Q;return}}}}B=B.parent}}},h);J=B=new a(m.context||g.root_name,11);n.parse(v);if(z&&M.length){if(!m.context){j(M)}else{m.invalid=true}}if(q&&J.name=="body"){G()}if(!m.invalid){for(N in i){F=e[N];A=i[N];x=A.length;while(x--){if(!A[x].parent){A.splice(x,1)}}for(D=0,C=F.length;D0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}c.push("<",m);if(k){for(n=0,j=k.length;n0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}},end:function(h){var i;c.push("");if(a&&d[h]&&c.length>0){i=c[c.length-1];if(i.length>0&&i!=="\n"){c.push("\n")}}},text:function(i,h){if(i.length>0){c[c.length]=h?i:f(i)}},cdata:function(h){c.push("")},comment:function(h){c.push("")},pi:function(h,i){if(i){c.push("")}else{c.push("")}if(a){c.push("\n")}},doctype:function(h){c.push("",a?"\n":"")},reset:function(){c.length=0},getContent:function(){return c.join("").replace(/\n$/,"")}}};(function(a){a.html.Serializer=function(c,d){var b=this,e=new a.html.Writer(c);c=c||{};c.validate="validate" in c?c.validate:true;b.schema=d=d||new a.html.Schema();b.writer=e;b.serialize=function(h){var g,i;i=c.validate;g={3:function(k,j){e.text(k.value,k.raw)},8:function(j){e.comment(j.value)},7:function(j){e.pi(j.name,j.value)},10:function(j){e.doctype(j.value)},4:function(j){e.cdata(j.value)},11:function(j){if((j=j.firstChild)){do{f(j)}while(j=j.next)}}};e.reset();function f(k){var t=g[k.type],j,o,s,r,p,u,n,m,q;if(!t){j=k.name;o=k.shortEnded;s=k.attributes;if(i&&s&&s.length>1){u=[];u.map={};q=d.getElementRule(k.name);for(n=0,m=q.attributesOrder.length;n=8;k.boxModel=!e.isIE||o.compatMode=="CSS1Compat"||k.stdMode;k.hasOuterHTML="outerHTML" in o.createElement("a");k.settings=l=e.extend({keep_values:false,hex_colors:1},l);k.schema=l.schema;k.styles=new e.html.Styles({url_converter:l.url_converter,url_converter_scope:l.url_converter_scope},l.schema);if(e.isIE6){try{o.execCommand("BackgroundImageCache",false,true)}catch(m){k.cssFlicker=true}}k.fixDoc(o);k.events=l.ownEvents?new e.dom.EventUtils(l.proxy):e.dom.Event;e.addUnload(k.destroy,k);n=l.schema?l.schema.getBlockElements():{};k.isBlock=function(q){if(!q){return false}var p=q.nodeType;if(p){return !!(p===1&&n[q.nodeName])}return !!n[q]}},fixDoc:function(k){var j=this.settings,i;if(b&&!e.isIE11&&j.schema){("abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video").replace(/\w+/g,function(l){k.createElement(l)});for(i in j.schema.getCustomElements()){k.createElement(i)}}},clone:function(k,i){var j=this,m,l;if(!b||e.isIE11||k.nodeType!==1||i){return k.cloneNode(i)}l=j.doc;if(!i){m=l.createElement(k.nodeName);g(j.getAttribs(k),function(n){j.setAttrib(m,n.nodeName,j.getAttrib(k,n.nodeName))});return m}return m.firstChild},getRoot:function(){var i=this,j=i.settings;return(j&&i.get(j.root_element))||i.doc.body},getViewPort:function(j){var k,i;j=!j?this.win:j;k=j.document;i=this.boxModel?k.documentElement:k.body;return{x:j.pageXOffset||i.scrollLeft,y:j.pageYOffset||i.scrollTop,w:j.innerWidth||i.clientWidth,h:j.innerHeight||i.clientHeight}},getRect:function(l){var k,i=this,j;l=i.get(l);k=i.getPos(l);j=i.getSize(l);return{x:k.x,y:k.y,w:j.w,h:j.h}},getSize:function(l){var j=this,i,k;l=j.get(l);i=j.getStyle(l,"width");k=j.getStyle(l,"height");if(i.indexOf("px")===-1){i=0}if(k.indexOf("px")===-1){k=0}return{w:parseInt(i,10)||l.offsetWidth||l.clientWidth,h:parseInt(k,10)||l.offsetHeight||l.clientHeight}},getParent:function(k,j,i){return this.getParents(k,j,i,false)},getParents:function(s,m,k,q){var j=this,i,l=j.settings,p=[];s=j.get(s);q=q===undefined;if(l.strict_root){k=k||j.getRoot()}if(d(m,"string")){i=m;if(m==="*"){m=function(o){return o.nodeType==1}}else{m=function(o){return j.is(o,i)}}}while(s){if(s==k||!s.nodeType||s.nodeType===9){break}if(!m||m(s)){if(q){p.push(s)}else{return s}}s=s.parentNode}return q?p:null},get:function(i){var j;if(i&&this.doc&&typeof(i)=="string"){j=i;i=this.doc.getElementById(i);if(i&&i.id!==j){return this.doc.getElementsByName(j)[1]}}return i},getNext:function(j,i){return this._findSib(j,i,"nextSibling")},getPrev:function(j,i){return this._findSib(j,i,"previousSibling")},select:function(k,j){var i=this;return e.dom.Sizzle(k,i.get(j)||i.get(i.settings.root_element)||i.doc,[])},is:function(l,j){var k;if(l.length===undefined){if(j==="*"){return l.nodeType==1}if(c.test(j)){j=j.toLowerCase().split(/,/);l=l.nodeName.toLowerCase();for(k=j.length-1;k>=0;k--){if(j[k]==l){return true}}return false}}return e.dom.Sizzle.matches(j,l.nodeType?[l]:l).length>0},add:function(l,o,i,k,m){var j=this;return this.run(l,function(r){var q,n;q=d(o,"string")?j.doc.createElement(o):o;j.setAttribs(q,i);if(k){if(k.nodeType){q.appendChild(k)}else{j.setHTML(q,k)}}return !m?r.appendChild(q):q})},create:function(k,i,j){return this.add(this.doc.createElement(k),k,i,j,1)},createHTML:function(q,i,m){var p="",l=this,j;p+="<"+q;for(j in i){if(i.hasOwnProperty(j)){p+=" "+j+'="'+l.encode(i[j])+'"'}}if(typeof(m)!="undefined"){return p+">"+m+""}return p+" />"},remove:function(i,j){return this.run(i,function(l){var m,k=l.parentNode;if(!k){return null}if(j){while(m=l.firstChild){if(!e.isIE||m.nodeType!==3||m.nodeValue){k.insertBefore(m,l)}else{l.removeChild(m)}}}return k.removeChild(l)})},setStyle:function(l,i,j){var k=this;return k.run(l,function(o){var n,m;n=o.style;i=i.replace(/-(\D)/g,function(q,p){return p.toUpperCase()});if(k.pixelStyles.test(i)&&(e.is(j,"number")||/^[\-0-9\.]+$/.test(j))){j+="px"}switch(i){case"opacity":if(b&&!e.isIE11){n.filter=j===""?"":"alpha(opacity="+(j*100)+")";if(!l.currentStyle||!l.currentStyle.hasLayout){n.display="inline-block"}}n[i]=n["-moz-opacity"]=n["-khtml-opacity"]=j||"";break;case"float":(b&&!e.isIE11)?n.styleFloat=j:n.cssFloat=j;break;default:n[i]=j||""}if(k.settings.update_styles){k.setAttrib(o,"data-mce-style")}})},getStyle:function(l,i,k){l=this.get(l);if(!l){return}if(this.doc.defaultView&&k){i=i.replace(/[A-Z]/g,function(m){return"-"+m});try{return this.doc.defaultView.getComputedStyle(l,null).getPropertyValue(i)}catch(j){return null}}i=i.replace(/-(\D)/g,function(n,m){return m.toUpperCase()});if(i=="float"){i=b?"styleFloat":"cssFloat"}if(l.currentStyle&&k){return l.currentStyle[i]}return l.style?l.style[i]:undefined},setStyles:function(l,m){var j=this,k=j.settings,i;i=k.update_styles;k.update_styles=0;g(m,function(o,p){j.setStyle(l,p,o)});k.update_styles=i;if(k.update_styles){j.setAttrib(l,k.cssText)}},removeAllAttribs:function(i){return this.run(i,function(l){var k,j=l.attributes;for(k=j.length-1;k>=0;k--){l.removeAttributeNode(j.item(k))}})},setAttrib:function(k,l,i){var j=this;if(!k||!l){return}if(j.settings.strict){l=l.toLowerCase()}return this.run(k,function(p){var o=j.settings;var m=p.getAttribute(l);if(i!==null){switch(l){case"style":if(!d(i,"string")){g(i,function(q,r){j.setStyle(p,r,q)});return}if(o.keep_values){if(i&&!j._isRes(i)){p.setAttribute("data-mce-style",i,2)}else{p.removeAttribute("data-mce-style",2)}}p.style.cssText=i;break;case"class":p.className=i||"";break;case"src":case"href":if(o.keep_values){if(o.url_converter){i=o.url_converter.call(o.url_converter_scope||j,i,l,p)}j.setAttrib(p,"data-mce-"+l,i,2)}break;case"shape":p.setAttribute("data-mce-style",i);break}}if(d(i)&&i!==null&&i.length!==0){p.setAttribute(l,""+i,2)}else{p.removeAttribute(l,2)}if(tinyMCE.activeEditor&&m!=i){var n=tinyMCE.activeEditor;n.onSetAttrib.dispatch(n,p,l,i)}})},setAttribs:function(j,k){var i=this;return this.run(j,function(l){g(k,function(m,o){i.setAttrib(l,o,m)})})},getAttrib:function(m,o,k){var i,j=this,l;m=j.get(m);if(!m||m.nodeType!==1){return k===l?false:k}if(!d(k)){k=""}if(/^(src|href|style|coords|shape)$/.test(o)){i=m.getAttribute("data-mce-"+o);if(i){return i}}if(b&&j.props[o]){i=m[j.props[o]];i=i&&i.nodeValue?i.nodeValue:i}if(!i){i=m.getAttribute(o,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(o)){if(m[j.props[o]]===true&&i===""){return o}return i?o:""}if(m.nodeName==="FORM"&&m.getAttributeNode(o)){return m.getAttributeNode(o).nodeValue}if(o==="style"){i=i||m.style.cssText;if(i){i=j.serializeStyle(j.parseStyle(i),m.nodeName);if(j.settings.keep_values&&!j._isRes(i)){m.setAttribute("data-mce-style",i)}}}if(f&&o==="class"&&i){i=i.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(b){switch(o){case"rowspan":case"colspan":if(i===1){i=""}break;case"size":if(i==="+0"||i===20||i===0){i=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(i===0){i=""}break;case"hspace":if(i===-1){i=""}break;case"maxlength":case"tabindex":if(i===32768||i===2147483647||i==="32768"){i=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(i===65535){return o}return k;case"shape":i=i.toLowerCase();break;default:if(o.indexOf("on")===0&&i){i=e._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+i)}}}return(i!==l&&i!==null&&i!=="")?""+i:k},getPos:function(q,l){var j=this,i=0,p=0,m,o=j.doc,k;q=j.get(q);l=l||o.body;if(q){if(q.getBoundingClientRect){q=q.getBoundingClientRect();m=j.boxModel?o.documentElement:o.body;i=q.left+(o.documentElement.scrollLeft||o.body.scrollLeft)-m.clientTop;p=q.top+(o.documentElement.scrollTop||o.body.scrollTop)-m.clientLeft;return{x:i,y:p}}k=q;while(k&&k!=l&&k.nodeType){i+=k.offsetLeft||0;p+=k.offsetTop||0;k=k.offsetParent}k=q.parentNode;while(k&&k!=l&&k.nodeType){i-=k.scrollLeft||0;p-=k.scrollTop||0;k=k.parentNode}}return{x:i,y:p}},parseStyle:function(i){return this.styles.parse(i)},serializeStyle:function(j,i){return this.styles.serialize(j,i)},addStyle:function(j){var k=this.doc,i;styleElm=k.getElementById("mceDefaultStyles");if(!styleElm){styleElm=k.createElement("style"),styleElm.id="mceDefaultStyles";styleElm.type="text/css";i=k.getElementsByTagName("head")[0];if(i.firstChild){i.insertBefore(styleElm,i.firstChild)}else{i.appendChild(styleElm)}}if(styleElm.styleSheet){styleElm.styleSheet.cssText+=j}else{styleElm.appendChild(k.createTextNode(j))}},loadCSS:function(i){var k=this,l=k.doc,j;if(!i){i=""}j=l.getElementsByTagName("head")[0];g(i.split(","),function(m){var n;if(k.files[m]){return}k.files[m]=true;n=k.create("link",{rel:"stylesheet",href:e._addVer(m)});if(b&&!e.isIE11&&l.documentMode&&l.recalc){n.onload=function(){if(l.recalc){l.recalc()}n.onload=null}}j.appendChild(n)})},addClass:function(i,j){return this.run(i,function(k){var l;if(!j){return 0}if(this.hasClass(k,j)){return k.className}l=this.removeClass(k,j);return k.className=(l!=""?(l+" "):"")+j})},removeClass:function(k,l){var i=this,j;return i.run(k,function(n){var m;if(i.hasClass(n,l)){if(!j){j=new RegExp("(^|\\s+)"+l+"(\\s+|$)","g")}m=n.className.replace(j," ");m=e.trim(m!=" "?m:"");n.className=m;if(!m){n.removeAttribute("class");n.removeAttribute("className")}return m}return n.className})},hasClass:function(j,i){j=this.get(j);if(!j||!i){return false}return(" "+j.className+" ").indexOf(" "+i+" ")!==-1},show:function(i){return this.setStyle(i,"display","block")},hide:function(i){return this.setStyle(i,"display","none")},isHidden:function(i){i=this.get(i);return !i||i.style.display=="none"||this.getStyle(i,"display")=="none"},uniqueId:function(i){return(!i?"mce_":i)+(this.counter++)},setHTML:function(k,j){var i=this;return i.run(k,function(m){if(b){while(m.firstChild){m.removeChild(m.firstChild)}try{m.innerHTML="
"+j;m.removeChild(m.firstChild)}catch(l){var n=i.create("div");n.innerHTML="
"+j;g(e.grep(n.childNodes),function(p,o){if(o&&m.canHaveHTML){m.appendChild(p)}})}}else{m.innerHTML=j}return j})},getOuterHTML:function(k){var j,i=this;k=i.get(k);if(!k){return null}if(k.nodeType===1&&i.hasOuterHTML){return k.outerHTML}j=(k.ownerDocument||i.doc).createElement("body");j.appendChild(k.cloneNode(true));return j.innerHTML},setOuterHTML:function(l,j,m){var i=this;function k(p,o,r){var s,q;q=r.createElement("body");q.innerHTML=o;s=q.lastChild;while(s){i.insertAfter(s.cloneNode(true),p);s=s.previousSibling}i.remove(p)}return this.run(l,function(o){o=i.get(o);if(o.nodeType==1){m=m||o.ownerDocument||i.doc;if(b){try{if(b&&o.nodeType==1){o.outerHTML=j}else{k(o,j,m)}}catch(n){k(o,j,m)}}else{k(o,j,m)}}})},decode:h.decode,encode:h.encodeAllRaw,insertAfter:function(i,j){j=this.get(j);return this.run(i,function(l){var k,m;k=j.parentNode;m=j.nextSibling;if(m){k.insertBefore(l,m)}else{k.appendChild(l)}return l})},replace:function(m,l,i){var j=this;if(d(l,"array")){m=m.cloneNode(true)}return j.run(l,function(k){if(i){g(e.grep(k.childNodes),function(n){m.appendChild(n)})}return k.parentNode.replaceChild(m,k)})},rename:function(l,i){var k=this,j;if(l.nodeName!=i.toUpperCase()){j=k.create(i);g(k.getAttribs(l),function(m){k.setAttrib(j,m.nodeName,k.getAttrib(l,m.nodeName))});k.replace(j,l,1)}return j||l},findCommonAncestor:function(k,i){var l=k,j;while(l){j=i;while(j&&l!=j){j=j.parentNode}if(l==j){break}l=l.parentNode}if(!l&&k.ownerDocument){return k.ownerDocument.documentElement}return l},toHex:function(i){var k=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(i);function j(l){l=parseInt(l,10).toString(16);return l.length>1?l:"0"+l}if(k){i="#"+j(k[1])+j(k[2])+j(k[3]);return i}return i},getClasses:function(){var n=this,j=[],m,o={},p=n.settings.class_filter,l;if(n.classes){return n.classes}function q(i){g(i.imports,function(s){q(s)});g(i.cssRules||i.rules,function(t){switch(t.type||1){case 1:if(t.selectorText){g(t.selectorText.split(","),function(r){r=r.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(r)||!/\.[\w\-]+$/.test(r)){return}l=r;r=e._replace(/.*\.([a-z0-9_\-]+).*/i,"$1",r);if(p&&!(r=p(r,l))){return}if(!o[r]){j.push({"class":r});o[r]=1}})}break;case 3:try{q(t.styleSheet)}catch(s){}break}})}try{g(n.doc.styleSheets,q)}catch(k){}if(j.length>0){n.classes=j}return j},run:function(l,k,j){var i=this,m;if(i.doc&&typeof(l)==="string"){l=i.get(l)}if(!l){return false}j=j||this;if(!l.nodeType&&(l.length||l.length===0)){m=[];g(l,function(o,n){if(o){if(typeof(o)=="string"){o=i.doc.getElementById(o)}m.push(k.call(j,o,n))}});return m}return k.call(j,l)},getAttribs:function(j){var i;j=this.get(j);if(!j){return[]}if(b){i=[];if(j.nodeName=="OBJECT"){return j.attributes}if(j.nodeName==="OPTION"&&this.getAttrib(j,"selected")){i.push({specified:1,nodeName:"selected"})}j.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(k){i.push({specified:1,nodeName:k})});return i}return j.attributes},isEmpty:function(m,k){var r=this,o,n,q,j,l,p=0;m=m.firstChild;if(m){j=new e.dom.TreeWalker(m,m.parentNode);k=k||r.schema?r.schema.getNonEmptyElements():null;do{q=m.nodeType;if(q===1){if(m.getAttribute("data-mce-bogus")){continue}l=m.nodeName.toLowerCase();if(k&&k[l]){if(l==="br"){p++;continue}return false}n=r.getAttribs(m);o=m.attributes.length;while(o--){l=m.attributes[o].nodeName;if(l==="name"||l==="data-mce-bookmark"){return false}}}if(q==8){return false}if((q===3&&!a.test(m.nodeValue))){return false}}while(m=j.next())}return p<=1},destroy:function(j){var i=this;i.win=i.doc=i.root=i.events=i.frag=null;if(!j){e.removeUnload(i.destroy)}},createRng:function(){var i=this.doc;return i.createRange?i.createRange():new e.dom.Range(this)},nodeIndex:function(m,n){var i=0,k,l,j;if(m){for(k=m.nodeType,m=m.previousSibling,l=m;m;m=m.previousSibling){j=m.nodeType;if(n&&j==3){if(j==k||!m.nodeValue.length){continue}}i++;k=j}}return i},split:function(m,l,p){var q=this,i=q.createRng(),n,k,o;function j(v){var t,s=v.childNodes,u=v.nodeType;function x(A){var z=A.previousSibling&&A.previousSibling.nodeName=="SPAN";var y=A.nextSibling&&A.nextSibling.nodeName=="SPAN";return z&&y}if(u==1&&v.getAttribute("data-mce-type")=="bookmark"){return}for(t=s.length-1;t>=0;t--){j(s[t])}if(u!=9){if(u==3&&v.nodeValue.length>0){var r=e.trim(v.nodeValue).length;if(!q.isBlock(v.parentNode)||r>0||r===0&&x(v)){return}}else{if(u==1){s=v.childNodes;if(s.length==1&&s[0]&&s[0].nodeType==1&&s[0].getAttribute("data-mce-type")=="bookmark"){v.parentNode.insertBefore(s[0],v)}if(s.length||/^(br|hr|input|img)$/i.test(v.nodeName)){return}}}q.remove(v)}return v}if(m&&l){i.setStart(m.parentNode,q.nodeIndex(m));i.setEnd(l.parentNode,q.nodeIndex(l));n=i.extractContents();i=q.createRng();i.setStart(l.parentNode,q.nodeIndex(l)+1);i.setEnd(m.parentNode,q.nodeIndex(m)+1);k=i.extractContents();o=m.parentNode;o.insertBefore(j(n),m);if(p){o.replaceChild(p,l)}else{o.insertBefore(l,m)}o.insertBefore(j(k),m);q.remove(m);return p||l}},bind:function(l,i,k,j){return this.events.add(l,i,k,j||this)},unbind:function(k,i,j){return this.events.remove(k,i,j)},fire:function(k,j,i){return this.events.fire(k,j,i)},getContentEditable:function(j){var i;if(j.nodeType!=1){return null}i=j.getAttribute("data-mce-contenteditable");if(i&&i!=="inherit"){return i}return j.contentEditable!=="inherit"?j.contentEditable:null},_findSib:function(l,i,j){var k=this,m=i;if(l){if(d(m,"string")){m=function(n){return k.is(n,i)}}for(l=l[j];l;l=l[j]){if(m(l)){return l}}}return null},_isRes:function(i){return/^(top|left|bottom|right|width|height)/i.test(i)||/;\s*(top|left|bottom|right|width|height)/i.test(i)}});e.DOM=new e.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var O=this,e=c.doc,U=0,F=1,j=2,E=true,S=false,W="startOffset",h="startContainer",Q="endContainer",A="endOffset",k=tinymce.extend,n=c.nodeIndex;k(O,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:E,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:J,setEndBefore:K,setEndAfter:u,collapse:B,selectNode:y,selectNodeContents:G,compareBoundaryPoints:v,deleteContents:p,extractContents:I,cloneContents:d,insertNode:D,surroundContents:N,cloneRange:L,toStringIE:T});function x(){return e.createDocumentFragment()}function q(X,t){C(E,X,t)}function s(X,t){C(S,X,t)}function g(t){q(t.parentNode,n(t))}function J(t){q(t.parentNode,n(t)+1)}function K(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function B(t){if(t){O[Q]=O[h];O[A]=O[W]}else{O[h]=O[Q];O[W]=O[A]}O.collapsed=E}function y(t){g(t);u(t)}function G(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(aa,t){var ad=O[h],Y=O[W],ac=O[Q],X=O[A],ab=t.startContainer,af=t.startOffset,Z=t.endContainer,ae=t.endOffset;if(aa===0){return H(ad,Y,ab,af)}if(aa===1){return H(ac,X,ab,af)}if(aa===2){return H(ac,X,Z,ae)}if(aa===3){return H(ad,Y,Z,ae)}}function p(){l(j)}function I(){return l(U)}function d(){return l(F)}function D(aa){var X=this[h],t=this[W],Z,Y;if((X.nodeType===3||X.nodeType===4)&&X.nodeValue){if(!t){X.parentNode.insertBefore(aa,X)}else{if(t>=X.nodeValue.length){c.insertAfter(aa,X)}else{Z=X.splitText(t);X.parentNode.insertBefore(aa,Z)}}}else{if(X.childNodes.length>0){Y=X.childNodes[t]}if(Y){X.insertBefore(aa,Y)}else{X.appendChild(aa)}}}function N(X){var t=O.extractContents();O.insertNode(X);X.appendChild(t);O.selectNode(X)}function L(){return k(new b(c),{startContainer:O[h],startOffset:O[W],endContainer:O[Q],endOffset:O[A],collapsed:O.collapsed,commonAncestorContainer:O.commonAncestorContainer})}function P(t,X){var Y;if(t.nodeType==3){return t}if(X<0){return t}Y=t.firstChild;while(Y&&X>0){--X;Y=Y.nextSibling}if(Y){return Y}return t}function m(){return(O[h]==O[Q]&&O[W]==O[A])}function H(Z,ab,X,aa){var ac,Y,t,ad,af,ae;if(Z==X){if(ab==aa){return 0}if(ab0){O.collapse(X)}}else{O.collapse(X)}O.collapsed=m();O.commonAncestorContainer=c.findCommonAncestor(O[h],O[Q])}function l(ad){var ac,Z=0,af=0,X,ab,Y,aa,t,ae;if(O[h]==O[Q]){return f(ad)}for(ac=O[Q],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[h]){return r(ac,ad)}++Z}for(ac=O[h],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[Q]){return V(ac,ad)}++af}ab=af-Z;Y=O[h];while(ab>0){Y=Y.parentNode;ab--}aa=O[Q];while(ab<0){aa=aa.parentNode;ab++}for(t=Y.parentNode,ae=aa.parentNode;t!=ae;t=t.parentNode,ae=ae.parentNode){Y=t;aa=ae}return o(Y,aa,ad)}function f(ac){var ae,af,t,Y,Z,ad,aa,X,ab;if(ac!=j){ae=x()}if(O[W]==O[A]){return ae}if(O[h].nodeType==3){af=O[h].nodeValue;t=af.substring(O[W],O[A]);if(ac!=F){Y=O[h];X=O[W];ab=O[A]-O[W];if(X===0&&ab>=Y.nodeValue.length-1){Y.parentNode.removeChild(Y)}else{Y.deleteData(X,ab)}O.collapse(E)}if(ac==j){return}if(t.length>0){ae.appendChild(e.createTextNode(t))}return ae}Y=P(O[h],O[W]);Z=O[A]-O[W];while(Y&&Z>0){ad=Y.nextSibling;aa=z(Y,ac);if(ae){ae.appendChild(aa)}--Z;Y=ad}if(ac!=F){O.collapse(E)}return ae}function r(ad,aa){var ac,ab,X,t,Z,Y;if(aa!=j){ac=x()}ab=i(ad,aa);if(ac){ac.appendChild(ab)}X=n(ad);t=X-O[W];if(t<=0){if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}ab=ad.previousSibling;while(t>0){Z=ab.previousSibling;Y=z(ab,aa);if(ac){ac.insertBefore(Y,ac.firstChild)}--t;ab=Z}if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}function V(ab,aa){var ad,X,ac,t,Z,Y;if(aa!=j){ad=x()}ac=R(ab,aa);if(ad){ad.appendChild(ac)}X=n(ab);++X;t=O[A]-X;ac=ab.nextSibling;while(ac&&t>0){Z=ac.nextSibling;Y=z(ac,aa);if(ad){ad.appendChild(Y)}--t;ac=Z}if(aa!=F){O.setStartAfter(ab);O.collapse(E)}return ad}function o(ab,t,ae){var Y,ag,aa,ac,ad,X,af,Z;if(ae!=j){ag=x()}Y=R(ab,ae);if(ag){ag.appendChild(Y)}aa=ab.parentNode;ac=n(ab);ad=n(t);++ac;X=ad-ac;af=ab.nextSibling;while(X>0){Z=af.nextSibling;Y=z(af,ae);if(ag){ag.appendChild(Y)}af=Z;--X}Y=i(t,ae);if(ag){ag.appendChild(Y)}if(ae!=F){O.setStartAfter(ab);O.collapse(E)}return ag}function i(ac,ad){var Y=P(O[Q],O[A]-1),ae,ab,aa,t,X,Z=Y!=O[Q];if(Y==ac){return M(Y,Z,S,ad)}ae=Y.parentNode;ab=M(ae,S,S,ad);while(ae){while(Y){aa=Y.previousSibling;t=M(Y,Z,S,ad);if(ad!=j){ab.insertBefore(t,ab.firstChild)}Z=E;Y=aa}if(ae==ac){return ab}Y=ae.previousSibling;ae=ae.parentNode;X=M(ae,S,S,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function R(ac,ad){var Z=P(O[h],O[W]),aa=Z!=O[h],ae,ab,Y,t,X;if(Z==ac){return M(Z,aa,E,ad)}ae=Z.parentNode;ab=M(ae,S,E,ad);while(ae){while(Z){Y=Z.nextSibling;t=M(Z,aa,E,ad);if(ad!=j){ab.appendChild(t)}aa=E;Z=Y}if(ae==ac){return ab}Z=ae.nextSibling;ae=ae.parentNode;X=M(ae,S,E,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function M(t,aa,ad,ae){var Z,Y,ab,X,ac;if(aa){return z(t,ae)}if(t.nodeType==3){Z=t.nodeValue;if(ad){X=O[W];Y=Z.substring(X);ab=Z.substring(0,X)}else{X=O[A];Y=Z.substring(0,X);ab=Z.substring(X)}if(ae!=F){t.nodeValue=ab}if(ae==j){return}ac=c.clone(t,S);ac.nodeValue=Y;return ac}if(ae==j){return}return c.clone(t,S)}function z(X,t){if(t!=j){return t==F?c.clone(X,E):X}X.parentNode.removeChild(X)}function T(){return c.create("body",null,d()).outerText}return O}a.Range=b;b.prototype.toString=function(){return this.toStringIE()}})(tinymce.dom);(function(){function a(d){var b=this,h=d.dom,c=true,f=false;function e(i,j){var k,t=0,q,n,m,l,o,r,p=-1,s;k=i.duplicate();k.collapse(j);s=k.parentElement();if(s.ownerDocument!==d.dom.doc){return}while(s.contentEditable==="false"){s=s.parentNode}if(!s.hasChildNodes()){return{node:s,inside:1}}m=s.children;q=m.length-1;while(t<=q){r=Math.floor((t+q)/2);l=m[r];k.moveToElementText(l);p=k.compareEndPoints(j?"StartToStart":"EndToEnd",i);if(p>0){q=r-1}else{if(p<0){t=r+1}else{return{node:l}}}}if(p<0){if(!l){k.moveToElementText(s);k.collapse(true);l=s;n=true}else{k.collapse(false)}o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",1)===0||s!=k.parentElement()){break}o++}}else{k.collapse(true);o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",-1)===0||s!=k.parentElement()){break}o++}}return{node:l,position:p,offset:o,inside:n}}function g(){var i=d.getRng(),r=h.createRng(),l,k,p,q,m,j;l=i.item?i.item(0):i.parentElement();if(l.ownerDocument!=h.doc){return r}k=d.isCollapsed();if(i.item){r.setStart(l.parentNode,h.nodeIndex(l));r.setEnd(r.startContainer,r.startOffset+1);return r}function o(A){var u=e(i,A),s,y,z=0,x,v,t;s=u.node;y=u.offset;if(u.inside&&!s.hasChildNodes()){r[A?"setStart":"setEnd"](s,0);return}if(y===v){r[A?"setStartBefore":"setEndAfter"](s);return}if(u.position<0){x=u.inside?s.firstChild:s.nextSibling;if(!x){r[A?"setStartAfter":"setEndAfter"](s);return}if(!y){if(x.nodeType==3){r[A?"setStart":"setEnd"](x,0)}else{r[A?"setStartBefore":"setEndBefore"](x)}return}while(x){t=x.nodeValue;z+=t.length;if(z>=y){s=x;z-=y;z=t.length-z;break}x=x.nextSibling}}else{x=s.previousSibling;if(!x){return r[A?"setStartBefore":"setEndBefore"](s)}if(!y){if(s.nodeType==3){r[A?"setStart":"setEnd"](x,s.nodeValue.length)}else{r[A?"setStartAfter":"setEndAfter"](x)}return}while(x){z+=x.nodeValue.length;if(z>=y){s=x;z-=y;break}x=x.previousSibling}}r[A?"setStart":"setEnd"](s,z)}try{o(true);if(!k){o()}}catch(n){if(n.number==-2147024809){m=b.getBookmark(2);p=i.duplicate();p.collapse(true);l=p.parentElement();if(!k){p=i.duplicate();p.collapse(false);q=p.parentElement();q.innerHTML=q.innerHTML}l.innerHTML=l.innerHTML;b.moveToBookmark(m);i=d.getRng();o(true);if(!k){o()}}else{throw n}}return r}this.getBookmark=function(m){var j=d.getRng(),o,i,l={};function n(u){var t,p,s,r,q=[];t=u.parentNode;p=h.getRoot().parentNode;while(t!=p&&t.nodeType!==9){s=t.children;r=s.length;while(r--){if(u===s[r]){q.push(r);break}}u=t;t=t.parentNode}return q}function k(q){var p;p=e(j,q);if(p){return{position:p.position,offset:p.offset,indexes:n(p.node),inside:p.inside}}}if(m===2){if(!j.item){l.start=k(true);if(!d.isCollapsed()){l.end=k()}}else{l.start={ctrl:true,indexes:n(j.item(0))}}}return l};this.moveToBookmark=function(k){var j,i=h.doc.body;function m(o){var r,q,n,p;r=h.getRoot();for(q=o.length-1;q>=0;q--){p=r.children;n=o[q];if(n<=p.length-1){r=p[n]}}return r}function l(r){var n=k[r?"start":"end"],q,p,o;if(n){q=n.position>0;p=i.createTextRange();p.moveToElementText(m(n.indexes));offset=n.offset;if(offset!==o){p.collapse(n.inside||q);p.moveStart("character",q?-offset:offset)}else{p.collapse(r)}j.setEndPoint(r?"StartToStart":"EndToStart",p);if(r){j.collapse(true)}}}if(k.start){if(k.start.ctrl){j=i.createControlRange();j.addElement(m(k.start.indexes));j.select()}else{j=i.createTextRange();l(true);l();j.select()}}};this.addRange=function(i){var n,l,k,p,v,q,t,s=d.dom.doc,m=s.body,r,u;function j(C){var y,B,x,A,z;x=h.create("a");y=C?k:v;B=C?p:q;A=n.duplicate();if(y==s||y==s.documentElement){y=m;B=0}if(y.nodeType==3){y.parentNode.insertBefore(x,y);A.moveToElementText(x);A.moveStart("character",B);h.remove(x);n.setEndPoint(C?"StartToStart":"EndToEnd",A)}else{z=y.childNodes;if(z.length){if(B>=z.length){h.insertAfter(x,z[z.length-1])}else{y.insertBefore(x,z[B])}A.moveToElementText(x)}else{if(y.canHaveHTML){y.innerHTML="\uFEFF";x=y.firstChild;A.moveToElementText(x);A.collapse(f)}}n.setEndPoint(C?"StartToStart":"EndToEnd",A);h.remove(x)}}k=i.startContainer;p=i.startOffset;v=i.endContainer;q=i.endOffset;n=m.createTextRange();if(k==v&&k.nodeType==1){if(p==q&&!k.hasChildNodes()){if(k.canHaveHTML){t=k.previousSibling;if(t&&!t.hasChildNodes()&&h.isBlock(t)){t.innerHTML="\uFEFF"}else{t=null}k.innerHTML="\uFEFF\uFEFF";n.moveToElementText(k.lastChild);n.select();h.doc.selection.clear();k.innerHTML="";if(t){t.innerHTML=""}return}else{p=h.nodeIndex(k);k=k.parentNode}}if(p==q-1){try{u=k.childNodes[p];l=m.createControlRange();l.addElement(u);l.select();r=d.getRng();if(r.item&&u===r.item(0)){return}}catch(o){}}}j(true);j();n.select()};this.getRangeAt=g}tinymce.dom.TridentSelection=a})();(function(){var n=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i="sizcache",o=0,r=Object.prototype.toString,h=false,g=true,q=/\\/g,u=/\r\n/g,x=/\W/;[0,0].sort(function(){g=false;return 0});var d=function(C,e,F,G){F=F||[];e=e||document;var I=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!C||typeof C!=="string"){return F}var z,K,N,y,J,M,L,E,B=true,A=d.isXML(e),D=[],H=C;do{n.exec("");z=n.exec(H);if(z){H=z[3];D.push(z[1]);if(z[2]){y=z[3];break}}}while(z);if(D.length>1&&j.exec(C)){if(D.length===2&&k.relative[D[0]]){K=s(D[0]+D[1],e,G)}else{K=k.relative[D[0]]?[e]:d(D.shift(),e);while(D.length){C=D.shift();if(k.relative[C]){C+=D.shift()}K=s(C,K,G)}}}else{if(!G&&D.length>1&&e.nodeType===9&&!A&&k.match.ID.test(D[0])&&!k.match.ID.test(D[D.length-1])){J=d.find(D.shift(),e,A);e=J.expr?d.filter(J.expr,J.set)[0]:J.set[0]}if(e){J=G?{expr:D.pop(),set:l(G)}:d.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&e.parentNode?e.parentNode:e,A);K=J.expr?d.filter(J.expr,J.set):J.set;if(D.length>0){N=l(K)}else{B=false}while(D.length){M=D.pop();L=M;if(!k.relative[M]){M=""}else{L=D.pop()}if(L==null){L=e}k.relative[M](N,L,A)}}else{N=D=[]}}if(!N){N=K}if(!N){d.error(M||C)}if(r.call(N)==="[object Array]"){if(!B){F.push.apply(F,N)}else{if(e&&e.nodeType===1){for(E=0;N[E]!=null;E++){if(N[E]&&(N[E]===true||N[E].nodeType===1&&d.contains(e,N[E]))){F.push(K[E])}}}else{for(E=0;N[E]!=null;E++){if(N[E]&&N[E].nodeType===1){F.push(K[E])}}}}}else{l(N,F)}if(y){d(y,I,F,G);d.uniqueSort(F)}return F};d.uniqueSort=function(y){if(p){h=g;y.sort(p);if(h){for(var e=1;e0};d.find=function(E,e,F){var D,z,B,A,C,y;if(!E){return[]}for(z=0,B=k.order.length;z":function(D,y){var C,B=typeof y==="string",z=0,e=D.length;if(B&&!x.test(y)){y=y.toLowerCase();for(;z=0)){if(!z){e.push(C)}}else{if(z){y[B]=false}}}}return false},ID:function(e){return e[1].replace(q,"")},TAG:function(y,e){return y[1].replace(q,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){d.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var y=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(y[1]+(y[2]||1))-0;e[3]=y[3]-0}else{if(e[2]){d.error(e[0])}}e[0]=o++;return e},ATTR:function(B,y,z,e,C,D){var A=B[1]=B[1].replace(q,"");if(!D&&k.attrMap[A]){B[1]=k.attrMap[A]}B[4]=(B[4]||B[5]||"").replace(q,"");if(B[2]==="~="){B[4]=" "+B[4]+" "}return B},PSEUDO:function(B,y,z,e,C){if(B[1]==="not"){if((n.exec(B[3])||"").length>1||/^\w/.test(B[3])){B[3]=d(B[3],null,null,y)}else{var A=d.filter(B[3],y,z,true^C);if(!z){e.push.apply(e,A)}return false}}else{if(k.match.POS.test(B[0])||k.match.CHILD.test(B[0])){return true}}return B},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(z,y,e){return !!d(e[3],z).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(z){var e=z.getAttribute("type"),y=z.type;return z.nodeName.toLowerCase()==="input"&&"text"===y&&(e===y||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===y.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===y.type},button:function(y){var e=y.nodeName.toLowerCase();return e==="input"&&"button"===y.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(y,e){return e===0},last:function(z,y,e,A){return y===A.length-1},even:function(y,e){return e%2===0},odd:function(y,e){return e%2===1},lt:function(z,y,e){return ye[3]-0},nth:function(z,y,e){return e[3]-0===y},eq:function(z,y,e){return e[3]-0===y}},filter:{PSEUDO:function(z,E,D,F){var e=E[1],y=k.filters[e];if(y){return y(z,D,E,F)}else{if(e==="contains"){return(z.textContent||z.innerText||b([z])||"").indexOf(E[3])>=0}else{if(e==="not"){var A=E[3];for(var C=0,B=A.length;C=0)}}},ID:function(y,e){return y.nodeType===1&&y.getAttribute("id")===e},TAG:function(y,e){return(e==="*"&&y.nodeType===1)||!!y.nodeName&&y.nodeName.toLowerCase()===e},CLASS:function(y,e){return(" "+(y.className||y.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(C,A){var z=A[1],e=d.attr?d.attr(C,z):k.attrHandle[z]?k.attrHandle[z](C):C[z]!=null?C[z]:C.getAttribute(z),D=e+"",B=A[2],y=A[4];return e==null?B==="!=":!B&&d.attr?e!=null:B==="="?D===y:B==="*="?D.indexOf(y)>=0:B==="~="?(" "+D+" ").indexOf(y)>=0:!y?D&&e!==false:B==="!="?D!==y:B==="^="?D.indexOf(y)===0:B==="$="?D.substr(D.length-y.length)===y:B==="|="?D===y||D.substr(0,y.length+1)===y+"-":false},POS:function(B,y,z,C){var e=y[2],A=k.setFilters[e];if(A){return A(B,z,y,C)}}}};var j=k.match.POS,c=function(y,e){return"\\"+(e-0+1)};for(var f in k.match){k.match[f]=new RegExp(k.match[f].source+(/(?![^\[]*\])(?![^\(]*\))/.source));k.leftMatch[f]=new RegExp(/(^(?:.|\r|\n)*?)/.source+k.match[f].source.replace(/\\(\d+)/g,c))}k.match.globalPOS=j;var l=function(y,e){y=Array.prototype.slice.call(y,0);if(e){e.push.apply(e,y);return e}return y};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(v){l=function(B,A){var z=0,y=A||[];if(r.call(B)==="[object Array]"){Array.prototype.push.apply(y,B)}else{if(typeof B.length==="number"){for(var e=B.length;z";e.insertBefore(y,e.firstChild);if(document.getElementById(z)){k.find.ID=function(B,C,D){if(typeof C.getElementById!=="undefined"&&!D){var A=C.getElementById(B[1]);return A?A.id===B[1]||typeof A.getAttributeNode!=="undefined"&&A.getAttributeNode("id").nodeValue===B[1]?[A]:undefined:[]}};k.filter.ID=function(C,A){var B=typeof C.getAttributeNode!=="undefined"&&C.getAttributeNode("id");return C.nodeType===1&&B&&B.nodeValue===A}}e.removeChild(y);e=y=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){k.find.TAG=function(y,C){var B=C.getElementsByTagName(y[1]);if(y[1]==="*"){var A=[];for(var z=0;B[z];z++){if(B[z].nodeType===1){A.push(B[z])}}B=A}return B}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){k.attrHandle.href=function(y){return y.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=d,A=document.createElement("div"),z="__sizzle__";A.innerHTML="

";if(A.querySelectorAll&&A.querySelectorAll(".TEST").length===0){return}d=function(L,C,G,K){C=C||document;if(!K&&!d.isXML(C)){var J=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(L);if(J&&(C.nodeType===1||C.nodeType===9)){if(J[1]){return l(C.getElementsByTagName(L),G)}else{if(J[2]&&k.find.CLASS&&C.getElementsByClassName){return l(C.getElementsByClassName(J[2]),G)}}}if(C.nodeType===9){if(L==="body"&&C.body){return l([C.body],G)}else{if(J&&J[3]){var F=C.getElementById(J[3]);if(F&&F.parentNode){if(F.id===J[3]){return l([F],G)}}else{return l([],G)}}}try{return l(C.querySelectorAll(L),G)}catch(H){}}else{if(C.nodeType===1&&C.nodeName.toLowerCase()!=="object"){var D=C,E=C.getAttribute("id"),B=E||z,N=C.parentNode,M=/^\s*[+~]/.test(L);if(!E){C.setAttribute("id",B)}else{B=B.replace(/'/g,"\\$&")}if(M&&N){C=C.parentNode}try{if(!M||N){return l(C.querySelectorAll("[id='"+B+"'] "+L),G)}}catch(I){}finally{if(!E){D.removeAttribute("id")}}}}}return e(L,C,G,K)};for(var y in e){d[y]=e[y]}A=null})()}(function(){var e=document.documentElement,z=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(z){var B=!z.call(document.createElement("div"),"div"),y=false;try{z.call(document.documentElement,"[test!='']:sizzle")}catch(A){y=true}d.matchesSelector=function(D,F){F=F.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!d.isXML(D)){try{if(y||!k.match.PSEUDO.test(F)&&!/!=/.test(F)){var C=z.call(D,F);if(C||!B||D.document&&D.document.nodeType!==11){return C}}}catch(E){}}return d(F,null,null,[D]).length>0}}})();(function(){var e=document.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}k.order.splice(1,0,"CLASS");k.find.CLASS=function(y,z,A){if(typeof z.getElementsByClassName!=="undefined"&&!A){return z.getElementsByClassName(y[1])}};e=null})();function a(y,D,C,G,E,F){for(var A=0,z=G.length;A0){B=e;break}}}e=e[y]}G[A]=B}}}if(document.documentElement.contains){d.contains=function(y,e){return y!==e&&(y.contains?y.contains(e):true)}}else{if(document.documentElement.compareDocumentPosition){d.contains=function(y,e){return !!(y.compareDocumentPosition(e)&16)}}else{d.contains=function(){return false}}}d.isXML=function(e){var y=(e?e.ownerDocument||e:0).documentElement;return y?y.nodeName!=="HTML":false};var s=function(z,e,D){var C,E=[],B="",F=e.nodeType?[e]:e;while((C=k.match.PSEUDO.exec(z))){B+=C[0];z=z.replace(k.match.PSEUDO,"")}z=k.relative[z]?z+"*":z;for(var A=0,y=F.length;A"+(i.item?i.item(0).outerHTML:i.htmlText);m.removeChild(m.firstChild)}else{m.innerHTML=i.toString()}}if(/^\s/.test(m.innerHTML)){j=" "}if(/\s+$/.test(m.innerHTML)){l=" "}h.getInner=true;h.content=g.isCollapsed()?"":j+g.serializer.serialize(m,h)+l;g.onGetContent.dispatch(g,h);return h.content},setContent:function(h,j){var o=this,g=o.getRng(),k,l=o.win.document,n,m;j=j||{format:"html"};j.set=true;h=j.content=h;if(!j.no_events){o.onBeforeSetContent.dispatch(o,j)}h=j.content;if(g.insertNode){h+='_';if(g.startContainer==l&&g.endContainer==l){l.body.innerHTML=h}else{g.deleteContents();if(l.body.childNodes.length===0){l.body.innerHTML=h}else{if(g.createContextualFragment){g.insertNode(g.createContextualFragment(h))}else{n=l.createDocumentFragment();m=l.createElement("div");n.appendChild(m);m.outerHTML=h;g.insertNode(n)}}}k=o.dom.get("__caret");g=l.createRange();g.setStartBefore(k);g.setEndBefore(k);o.setRng(g);o.dom.remove("__caret");try{o.setRng(g)}catch(i){}}else{if(g.item){l.execCommand("Delete",false,null);g=o.getRng()}if(/^\s+/.test(h)){g.pasteHTML('_'+h);o.dom.remove("__mce_tmp")}else{g.pasteHTML(h)}}if(!j.no_events){o.onSetContent.dispatch(o,j)}},getStart:function(){var i=this,h=i.getRng(),j,g,l,k;if(h.duplicate||h.item){if(h.item){return h.item(0)}l=h.duplicate();l.collapse(1);j=l.parentElement();if(j.ownerDocument!==i.dom.doc){j=i.dom.getRoot()}g=k=h.parentElement();while(k=k.parentNode){if(k==j){j=g;break}}return j}else{j=h.startContainer;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[Math.min(j.childNodes.length-1,h.startOffset)]}if(j&&j.nodeType==3){return j.parentNode}return j}},getEnd:function(){var h=this,g=h.getRng(),j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}g=g.duplicate();g.collapse(0);j=g.parentElement();if(j.ownerDocument!==h.dom.doc){j=h.dom.getRoot()}if(j&&j.nodeName=="BODY"){return j.lastChild||j}return j}else{j=g.endContainer;i=g.endOffset;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[i>0?i-1:i]}if(j&&j.nodeType==3){return j.parentNode}return j}},getBookmark:function(s,v){var y=this,n=y.dom,h,k,j,o,i,p,q,m="\uFEFF",x;function g(z,A){var t=0;e(n.select(z),function(C,B){if(C==A){t=B}});return t}function u(t){function z(E){var A,D,C,B=E?"start":"end";A=t[B+"Container"];D=t[B+"Offset"];if(A.nodeType==1&&A.nodeName=="TR"){C=A.childNodes;A=C[Math.min(E?D:D-1,C.length-1)];if(A){D=E?0:A.childNodes.length;t["set"+(E?"Start":"End")](A,D)}}}z(true);z();return t}function l(){var z=y.getRng(true),t=n.getRoot(),A={};function B(E,J){var D=E[J?"startContainer":"endContainer"],I=E[J?"startOffset":"endOffset"],C=[],F,H,G=0;if(D.nodeType==3){if(v){for(F=D.previousSibling;F&&F.nodeType==3;F=F.previousSibling){I+=F.nodeValue.length}}C.push(I)}else{H=D.childNodes;if(I>=H.length&&H.length){G=1;I=Math.max(0,H.length-1)}C.push(y.dom.nodeIndex(H[I],v)+G)}for(;D&&D!=t;D=D.parentNode){C.push(y.dom.nodeIndex(D,v))}return C}A.start=B(z,true);if(!y.isCollapsed()){A.end=B(z)}return A}if(s==2){if(y.tridentSel){return y.tridentSel.getBookmark(s)}return l()}if(s){h=y.getRng();if(h.setStart){h={startContainer:h.startContainer,startOffset:h.startOffset,endContainer:h.endContainer,endOffset:h.endOffset}}return{rng:h}}h=y.getRng();j=n.uniqueId();o=tinyMCE.activeEditor.selection.isCollapsed();x="overflow:hidden;line-height:0px";if(h.duplicate||h.item){if(!h.item){k=h.duplicate();try{h.collapse();h.pasteHTML(''+m+"");if(!o){k.collapse(false);h.moveToElementText(k.parentElement());if(h.compareEndPoints("StartToEnd",k)===0){k.move("character",-1)}k.pasteHTML(''+m+"")}}catch(r){return null}}else{p=h.item(0);i=p.nodeName;return{name:i,index:g(i,p)}}}else{p=y.getNode();i=p.nodeName;if(i=="IMG"){return{name:i,index:g(i,p)}}k=u(h.cloneRange());if(!o){k.collapse(false);k.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_end",style:x},m))}h=u(h);h.collapse(true);h.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_start",style:x},m))}y.moveToBookmark({id:j,keep:1});return{id:j}},moveToBookmark:function(q){var v=this,n=v.dom,l,j,g,i,u,k,x,r,s;function h(C){var t=q[C?"start":"end"],z,A,B,y;if(t){B=t[0];for(A=u,z=t.length-1;z>=1;z--){y=A.childNodes;if(t[z]>y.length-1){return}A=y[t[z]]}if(A.nodeType===3){B=Math.min(t[0],A.nodeValue.length)}if(A.nodeType===1){B=Math.min(t[0],A.childNodes.length)}if(C){g.setStart(A,B)}else{g.setEnd(A,B)}}return true}function m(D){var y=n.get(q.id+"_"+D),C,t,A,B,z=q.keep;if(y){C=y.parentNode;if(D=="start"){if(!z){t=n.nodeIndex(y)}else{C=y.firstChild;t=1}k=x=C;r=s=t}else{if(!z){t=n.nodeIndex(y)}else{C=y.firstChild;t=1}x=C;s=t}if(!z){B=y.previousSibling;A=y.nextSibling;e(d.grep(y.childNodes),function(E){if(E.nodeType==3){E.nodeValue=E.nodeValue.replace(/\uFEFF/g,"")}});while(y=n.get(q.id+"_"+D)){n.remove(y,1)}if(B&&A&&B.nodeType==A.nodeType&&B.nodeType==3&&!d.isOpera){t=B.nodeValue.length;B.appendData(A.nodeValue);n.remove(A);if(D=="start"){k=x=B;r=s=t}else{x=B;s=t}}}}}function o(t){if(n.isBlock(t)&&!t.innerHTML&&!b){t.innerHTML='
'}return t}if(q){if(q.start){g=n.createRng();u=n.getRoot();if(v.tridentSel){return v.tridentSel.moveToBookmark(q)}if(h(true)&&h()){v.setRng(g)}}else{if(q.id){m("start");m("end");if(k){g=n.createRng();g.setStart(o(k),r);g.setEnd(o(x),s);v.setRng(g)}}else{if(q.name){v.select(n.select(q.name)[q.index])}else{if(q.rng){g=q.rng;if(g.startContainer){i=v.dom.createRng();try{i.setStart(g.startContainer,g.startOffset);i.setEnd(g.endContainer,g.endOffset)}catch(p){}g=i}v.setRng(g)}}}}}},select:function(l,k){var j=this,m=j.dom,h=m.createRng(),g;function i(n,p){var o=new a(n,n);do{if(n.nodeType==3&&d.trim(n.nodeValue).length!==0){if(p){h.setStart(n,0)}else{h.setEnd(n,n.nodeValue.length)}return}if(n.nodeName=="BR"){if(p){h.setStartBefore(n)}else{h.setEndBefore(n)}return}}while(n=(p?o.next():o.prev()))}if(l){g=m.nodeIndex(l);h.setStart(l.parentNode,g);h.setEnd(l.parentNode,g+1);if(k){i(l,1);i(l)}j.setRng(h)}return l},isCollapsed:function(){var g=this,i=g.getRng(),h=g.getSel();if(!i||i.item){return false}if(i.compareEndPoints){return i.compareEndPoints("StartToEnd",i)===0}return !h||i.collapsed},collapse:function(g){var i=this,h=i.getRng(),j;if(h.item){j=h.item(0);h=i.win.document.body.createTextRange();h.moveToElementText(j)}h.collapse(!!g);i.setRng(h)},getSel:function(){var h=this,g=this.win;return g.getSelection?g.getSelection():g.document.selection},getRng:function(m){var h=this,j,g,l,k=h.win.document;if(h.fakeRng){return h.fakeRng}if(m&&h.tridentSel){return h.tridentSel.getRangeAt(0)}try{if(j=h.getSel()){g=j.rangeCount>0?j.getRangeAt(0):(j.createRange?j.createRange():k.createRange())}}catch(i){}if(d.isIE&&!d.isIE11&&g&&g.setStart&&k.selection.createRange().item){l=k.selection.createRange().item(0);g=k.createRange();g.setStartBefore(l);g.setEndAfter(l)}if(!g){g=k.createRange?k.createRange():k.body.createTextRange()}if(g.setStart&&g.startContainer.nodeType===9&&g.collapsed){l=h.dom.getRoot();g.setStart(l,0);g.setEnd(l,0)}if(h.selectedRange&&h.explicitRange){if(g.compareBoundaryPoints(g.START_TO_START,h.selectedRange)===0&&g.compareBoundaryPoints(g.END_TO_END,h.selectedRange)===0){g=h.explicitRange}else{h.selectedRange=null;h.explicitRange=null}}return g},setRng:function(k,g){var j,i=this;if(!i.tridentSel){j=i.getSel();if(j){i.explicitRange=k;try{j.removeAllRanges()}catch(h){}j.addRange(k);if(g===false&&j.extend){j.collapse(k.endContainer,k.endOffset);j.extend(k.startContainer,k.startOffset)}i.selectedRange=j.rangeCount>0?j.getRangeAt(0):null}}else{if(k.cloneRange){try{i.tridentSel.addRange(k);return}catch(h){}}try{k.select()}catch(h){}}},setNode:function(h){var g=this;g.setContent(g.dom.getOuterHTML(h));return h},getNode:function(){var i=this,h=i.getRng(),j=i.getSel(),m,l=h.startContainer,g=h.endContainer;function k(q,o){var p=q;while(q&&q.nodeType===3&&q.length===0){q=o?q.nextSibling:q.previousSibling}return q||p}if(!h){return i.dom.getRoot()}if(h.setStart){m=h.commonAncestorContainer;if(!h.collapsed){if(h.startContainer==h.endContainer){if(h.endOffset-h.startOffset<2){if(h.startContainer.hasChildNodes()){m=h.startContainer.childNodes[h.startOffset]}}}if(l.nodeType===3&&g.nodeType===3){if(l.length===h.startOffset){l=k(l.nextSibling,true)}else{l=l.parentNode}if(h.endOffset===0){g=k(g.previousSibling,false)}else{g=g.parentNode}if(l&&l===g){return l}}}if(m&&m.nodeType==3){return m.parentNode}return m}return h.item?h.item(0):h.parentElement()},getSelectedBlocks:function(p,h){var o=this,k=o.dom,m,l,i,j=[];m=k.getParent(p||o.getStart(),k.isBlock);l=k.getParent(h||o.getEnd(),k.isBlock);if(m){j.push(m)}if(m&&l&&m!=l){i=m;var g=new a(m,k.getRoot());while((i=g.next())&&i!=l){if(k.isBlock(i)){j.push(i)}}}if(l&&m!=l){j.push(l)}return j},isForward:function(){var i=this.dom,g=this.getSel(),j,h;if(!g||g.anchorNode==null||g.focusNode==null){return true}j=i.createRng();j.setStart(g.anchorNode,g.anchorOffset);j.collapse(true);h=i.createRng();h.setStart(g.focusNode,g.focusOffset);h.collapse(true);return j.compareBoundaryPoints(j.START_TO_START,h)<=0},normalize:function(){var h=this,g,m,l,j,i;function k(p){var o,r,n,s=h.dom,u=s.getRoot(),q,t,v;function y(z,A){var B=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(z=B[A?"prev":"next"]()){if(z.nodeName==="BR"){return true}}}function x(B,z){var C,A;z=z||o;C=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(q=C[B?"prev":"next"]()){if(q.nodeType===3&&q.nodeValue.length>0){o=q;r=B?q.nodeValue.length:0;m=true;return}if(s.isBlock(q)||t[q.nodeName.toLowerCase()]){return}A=q}if(l&&A){o=A;m=true;r=0}}o=g[(p?"start":"end")+"Container"];r=g[(p?"start":"end")+"Offset"];t=s.schema.getNonEmptyElements();if(o.nodeType===9){o=s.getRoot();r=0}if(o===u){if(p){q=o.childNodes[r>0?r-1:0];if(q){v=q.nodeName.toLowerCase();if(t[q.nodeName]||q.nodeName=="TABLE"){return}}}if(o.hasChildNodes()){o=o.childNodes[Math.min(!p&&r>0?r-1:r,o.childNodes.length-1)];r=0;if(o.hasChildNodes()&&!/TABLE/.test(o.nodeName)){q=o;n=new a(o,u);do{if(q.nodeType===3&&q.nodeValue.length>0){r=p?0:q.nodeValue.length;o=q;m=true;break}if(t[q.nodeName.toLowerCase()]){r=s.nodeIndex(q);o=q.parentNode;if(q.nodeName=="IMG"&&!p){r++}m=true;break}}while(q=(p?n.next():n.prev()))}}}if(l){if(o.nodeType===3&&r===0){x(true)}if(o.nodeType===1){q=o.childNodes[r];if(q&&q.nodeName==="BR"&&!y(q)&&!y(q,true)){x(true,o.childNodes[r])}}}if(p&&!l&&o.nodeType===3&&r===o.nodeValue.length){x(false)}if(m){g["set"+(p?"Start":"End")](o,r)}}if(d.isIE){return}g=h.getRng();l=g.collapsed;k(true);if(!l){k()}if(m){if(l){g.collapse(true)}h.setRng(g,h.isForward())}},selectorChanged:function(g,j){var h=this,i;if(!h.selectorChangedData){h.selectorChangedData={};i={};h.editor.onNodeChange.addToTop(function(l,k,o){var p=h.dom,m=p.getParents(o,null,p.getRoot()),n={};e(h.selectorChangedData,function(r,q){e(m,function(s){if(p.is(s,q)){if(!i[q]){e(r,function(t){t(true,{node:s,selector:q,parents:m})});i[q]=r}n[q]=r;return false}})});e(i,function(r,q){if(!n[q]){delete i[q];e(r,function(s){s(false,{node:o,selector:q,parents:m})})}})})}if(!h.selectorChangedData[g]){h.selectorChangedData[g]=[]}h.selectorChangedData[g].push(j);return h},scrollIntoView:function(k){var j,h,g=this,i=g.dom;h=i.getViewPort(g.editor.getWin());j=i.getPos(k).y;if(jh.y+h.h){g.editor.getWin().scrollTo(0,j0){p.setEndPoint("StartToStart",o)}else{p.setEndPoint("EndToEnd",o)}p.select()}}else{l()}}function l(){var p=n.selection.createRange();if(o&&!p.item&&p.compareEndPoints("StartToEnd",p)===0){o.select()}h.unbind(n,"mouseup",l);h.unbind(n,"mousemove",m);o=k=0}n.documentElement.unselectable=true;h.bind(n,["mousedown","contextmenu"],function(p){if(p.target.nodeName==="HTML"){if(k){l()}g=n.documentElement;if(g.scrollHeight>g.clientHeight){return}k=1;o=j(p.x,p.y);if(o){h.bind(n,"mouseup",l);h.bind(n,"mousemove",m);h.win.focus();o.select()}}})}})})(tinymce);(function(a){a.dom.Serializer=function(e,i,f){var h,b,d=a.isIE,g=a.each,c;if(!e.apply_source_formatting){e.indent=false}i=i||a.DOM;f=f||new a.html.Schema(e);e.entity_encoding=e.entity_encoding||"named";e.remove_trailing_brs="remove_trailing_brs" in e?e.remove_trailing_brs:true;h=new a.util.Dispatcher(self);b=new a.util.Dispatcher(self);c=new a.html.DomParser(e,f);c.addAttributeFilter("src,href,style",function(k,j){var o=k.length,l,q,n="data-mce-"+j,p=e.url_converter,r=e.url_converter_scope,m;while(o--){l=k[o];q=l.attributes.map[n];if(q!==m){l.attr(j,q.length>0?q:null);l.attr(n,null)}else{q=l.attributes.map[j];if(j==="style"){q=i.serializeStyle(i.parseStyle(q),l.name)}else{if(p){q=p.call(r,q,j,l.name)}}l.attr(j,q.length>0?q:null)}}});c.addAttributeFilter("class",function(j,k){var l=j.length,m,n;while(l--){m=j[l];n=m.attr("class").replace(/(?:^|\s)mce(Item\w+|Selected)(?!\S)/g,"");m.attr("class",n.length>0?n:null)}});c.addAttributeFilter("data-mce-type",function(j,l,k){var m=j.length,n;while(m--){n=j[m];if(n.attributes.map["data-mce-type"]==="bookmark"&&!k.cleanup){n.remove()}}});c.addAttributeFilter("data-mce-expando",function(j,l,k){var m=j.length;while(m--){j[m].attr(l,null)}});c.addNodeFilter("noscript",function(j){var k=j.length,l;while(k--){l=j[k].firstChild;if(l){l.value=a.html.Entities.decode(l.value)}}});c.addNodeFilter("script,style",function(k,l){var m=k.length,n,o;function j(p){return p.replace(/()/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}while(m--){n=k[m];o=n.firstChild?n.firstChild.value:"";if(l==="script"){n.attr("type",(n.attr("type")||"text/javascript").replace(/^mce\-/,""));if(o.length>0){n.firstChild.value="// "}}else{if(o.length>0){n.firstChild.value=""}}}});c.addNodeFilter("#comment",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.value.indexOf("[CDATA[")===0){m.name="#cdata";m.type=4;m.value=m.value.replace(/^\[CDATA\[|\]\]$/g,"")}else{if(m.value.indexOf("mce:protected ")===0){m.name="#text";m.type=3;m.raw=true;m.value=unescape(m.value).substr(14)}}}});c.addNodeFilter("xml:namespace,input",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.type===7){m.remove()}else{if(m.type===1){if(k==="input"&&!("type" in m.attributes.map)){m.attr("type","text")}}}}});if(e.fix_list_elements){c.addNodeFilter("ul,ol",function(k,l){var m=k.length,n,j;while(m--){n=k[m];j=n.parent;if(j.name==="ul"||j.name==="ol"){if(n.prev&&n.prev.name==="li"){n.prev.append(n)}}}})}c.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style",function(j,k){var l=j.length;while(l--){j[l].attr(k,null)}});return{schema:f,addNodeFilter:c.addNodeFilter,addAttributeFilter:c.addAttributeFilter,onPreProcess:h,onPostProcess:b,serialize:function(o,m){var l,p,k,j,n;if(d&&i.select("script,style,select,map").length>0){n=o.innerHTML;o=o.cloneNode(false);i.setHTML(o,n)}else{o=o.cloneNode(true)}l=o.ownerDocument.implementation;if(l.createHTMLDocument){p=l.createHTMLDocument("");g(o.nodeName=="BODY"?o.childNodes:[o],function(q){p.body.appendChild(p.importNode(q,true))});if(o.nodeName!="BODY"){o=p.body.firstChild}else{o=p.body}k=i.doc;i.doc=p}m=m||{};m.format=m.format||"html";if(!m.no_events){m.node=o;h.dispatch(self,m)}j=new a.html.Serializer(e,f);m.content=j.serialize(c.parse(a.trim(m.getInner?o.innerHTML:i.getOuterHTML(o)),m));if(!m.cleanup){m.content=m.content.replace(/\uFEFF/g,"")}if(!m.no_events){b.dispatch(self,m)}if(k){i.doc=k}m.node=null;return m.content},addRules:function(j){f.addValidElements(j)},setRules:function(j){f.setValidElements(j)}}}})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],e={},d=[],g=0,f;function b(m,v){var x=this,q=a.DOM,s,o,r,n;function p(){q.remove(n);if(s){s.onreadystatechange=s.onload=s=null}v()}function u(){if(typeof(console)!=="undefined"&&console.log){console.log("Failed to load: "+m)}}n=q.uniqueId();if(a.isIE6){o=new a.util.URI(m);r=location;if(o.host==r.hostname&&o.port==r.port&&(o.protocol+":")==r.protocol&&o.protocol.toLowerCase()!="file"){a.util.XHR.send({url:a._addVer(o.getURI()),success:function(y){var t=q.create("script",{type:"text/javascript"});t.text=y;document.getElementsByTagName("head")[0].appendChild(t);q.remove(t);p()},error:u});return}}s=document.createElement("script");s.id=n;s.type="text/javascript";s.src=a._addVer(m);if(!a.isIE||a.isIE11){s.onload=p}s.onerror=u;if(!a.isOpera){s.onreadystatechange=function(){var t=s.readyState;if(t=="complete"||t=="loaded"){p()}}}(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}this.isDone=function(m){return l[m]==i};this.markDone=function(m){l[m]=i};this.add=this.load=function(m,q,n){var o,p=l[m];if(p==f){j.push(m);l[m]=c}if(q){if(!e[m]){e[m]=[]}e[m].push({func:q,scope:n||this})}};this.loadQueue=function(n,m){this.loadScripts(j,n,m)};this.loadScripts=function(m,q,p){var o;function n(r){a.each(e[r],function(s){s.func.call(s.scope)});e[r]=f}d.push({func:q,scope:p||this});o=function(){var r=a.grep(m);m.length=0;a.each(r,function(s){if(l[s]==i){n(s);return}if(l[s]!=k){l[s]=k;g++;b(s,function(){l[s]=i;g--;n(s);o()})}});if(!g){a.each(d,function(s){s.func.call(s.scope)});d.length=0}};o()}};a.ScriptLoader=new a.dom.ScriptLoader()})(tinymce);(function(a){a.dom.RangeUtils=function(c){var b="\uFEFF";this.walk=function(d,s){var i=d.startContainer,l=d.startOffset,t=d.endContainer,m=d.endOffset,j,g,o,h,r,q,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(u){s([u])});return}function f(u){var v;v=u[0];if(v.nodeType===3&&v===i&&l>=v.nodeValue.length){u.splice(0,1)}v=u[u.length-1];if(m===0&&u.length>0&&v===t&&v.nodeType===3){u.splice(u.length-1,1)}return u}function p(x,v,u){var y=[];for(;x&&x!=u;x=x[v]){y.push(x)}return y}function n(v,u){do{if(v.parentNode==u){return v}v=v.parentNode}while(v)}function k(x,v,y){var u=y?"nextSibling":"previousSibling";for(h=x,r=h.parentNode;h&&h!=v;h=r){r=h.parentNode;q=p(h==x?h:h[u],u);if(q.length){if(!y){q.reverse()}s(f(q))}}}if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[l]}if(t.nodeType==1&&t.hasChildNodes()){t=t.childNodes[Math.min(m-1,t.childNodes.length-1)]}if(i==t){return s(f([i]))}j=c.findCommonAncestor(i,t);for(h=i;h;h=h.parentNode){if(h===t){return k(i,j,true)}if(h===j){break}}for(h=t;h;h=h.parentNode){if(h===i){return k(t,j)}if(h===j){break}}g=n(i,j)||i;o=n(t,j)||t;k(i,g,true);q=p(g==i?g:g.nextSibling,"nextSibling",o==t?o.nextSibling:o);if(q.length){s(f(q))}k(t,o)};this.split=function(e){var h=e.startContainer,d=e.startOffset,i=e.endContainer,g=e.endOffset;function f(j,k){return j.splitText(k)}if(h==i&&h.nodeType==3){if(d>0&&dd){g=g-d;h=i=f(i,g).previousSibling;g=i.nodeValue.length;d=0}else{g=0}}}else{if(h.nodeType==3&&d>0&&d0&&g=m.length){r=0}}t=m[r];f.setAttrib(g,"tabindex","-1");f.setAttrib(t.id,"tabindex","0");f.get(t.id).focus();if(e.actOnFocus){e.onAction(t.id)}if(s){a.cancel(s)}};p=function(z){var v=37,u=39,y=38,A=40,r=27,t=14,s=13,x=32;switch(z.keyCode){case v:if(i){q.moveFocus(-1)}a.cancel(z);break;case u:if(i){q.moveFocus(1)}a.cancel(z);break;case y:if(o){q.moveFocus(-1)}a.cancel(z);break;case A:if(o){q.moveFocus(1)}a.cancel(z);break;case r:if(e.onCancel){e.onCancel();a.cancel(z)}break;case t:case s:case x:if(e.onAction){e.onAction(g);a.cancel(z)}break}};c(m,function(t,r){var s,u;if(!t.id){t.id=f.uniqueId("_mce_item_")}u=f.get(t.id);if(l){f.bind(u,"blur",h);s="-1"}else{s=(r===0?"0":"-1")}u.setAttribute("tabindex",s);f.bind(u,"focus",k)});if(m[0]){g=m[0].id}f.setAttrib(n,"tabindex","-1");var j=f.get(n);f.bind(j,"focus",d);f.bind(j,"keydown",p)}})})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(f,e,d){this.id=f;this.settings=e=e||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=e.scope||this;this.disabled=0;this.active=0;this.editor=d},setAriaProperty:function(f,e){var d=b.get(this.id+"_aria")||b.get(this.id);if(d){b.setAttrib(d,"aria-"+f,!!e)}},focus:function(){b.get(this.id).focus()},setDisabled:function(d){if(d!=this.disabled){this.setAriaProperty("disabled",d);this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d;this.setAriaProperty("pressed",d)}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(c,b,a){this.parent(c,b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator";this.setDisabled(true)},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix,role:"separator","aria-orientation":"vertical",tabindex:"-1"})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.setAriaProperty("checked",!!f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;j.keyboard_focus=i.keyboard_focus;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},focus:function(){var g=this;if(g.keyboardNav){g.keyboardNav.focus()}},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.offsetWidth,j.max_width):g.offsetWidth;k=j.max_height?Math.min(g.offsetHeight,j.max_height):g.offsetHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeightv){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return false}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(x){var h,t,s;x=x.target;if(x&&(x=c.getParent(x,"tr"))){h=z.items[x.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(x&&c.hasClass(x,m+"ItemSub")){t=c.getRect(x);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}a.add(o,"keydown",z._keyHandler,z);z.onShowMenu.dispatch(z);if(A.keyboard_focus){z._setupKeyboardNav()}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(h,"mouseover",g.mouseOverFunc);a.remove(c.select("a",h),"focus",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);a.remove(h,"keydown",g._keyHandler);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{role:"listbox",id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000;outline:0"});if(i.settings.parent){c.setAttrib(g,"aria-parent","menu_"+i.settings.parent.id)}k=c.add(g,"div",{role:"presentation",id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{role:"presentation",id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_setupKeyboardNav:function(){var i,h,g=this;i=c.get("menu_"+g.id);h=c.select("a[role=option]","menu_"+g.id);h.splice(0,0,i);g.keyboardNav=new e.ui.KeyboardNavigation({root:"menu_"+g.id,items:h,onCancel:function(){g.hideMenu()},enableUpDown:true});i.focus()},_keyHandler:function(g){var h=this,i;switch(g.keyCode){case 37:if(h.settings.parent){h.hideMenu();h.settings.parent.focus();a.cancel(g)}break;case 39:if(h.mouseOverFunc){h.mouseOverFunc(g)}break}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,q.titleItem?"th":"td");i=p=c.add(i,"a",{id:h.id+"_aria",role:q.titleItem?"presentation":"option",href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});if(q.parent){c.setAttrib(p,"aria-haspopup","true");c.setAttrib(p,"aria-owns","menu_"+h.id)}c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){if(typeof h.settings.style=="function"){h.settings.style=h.settings.style()}c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(e,d,c){this.parent(e,d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='';if(e.image&&!(this.editor&&this.editor.forcedHighContrastMode)){d+=''+a.encode(e.title)+''+(c?''+c+"":"")}else{d+=''+(c?''+c+"":"")}d+='";d+="";return d},postRender:function(){var d=this,e=d.settings,c;if(b.isIE&&d.editor){b.dom.Event.add(d.id,"mousedown",function(f){var g=d.editor.selection.getNode().nodeName;c=g==="IMG"?d.editor.selection.getBookmark():null})}b.dom.Event.add(d.id,"click",function(f){if(!d.isDisabled()){if(b.isIE&&d.editor&&c!==null){d.editor.selection.moveToBookmark(c)}return e.onclick.call(e.scope,f)}});b.dom.Event.add(d.id,"keydown",function(f){if(!d.isDisabled()&&f.keyCode==b.VK.SPACEBAR){b.dom.Event.cancel(f);return e.onclick.call(e.scope,f)}})}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(j,i,g){var h=this;h.parent(j,i,g);h.items=[];h.onChange=new a(h);h.onPostRender=new a(h);h.onAdd=new a(h);h.onRenderMenu=new e.util.Dispatcher(this);h.classPrefix="mceListBox";h.marked={}},select:function(h){var g=this,j,i;g.marked={};if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){var i=this,j,k,h;i.marked={};if(g!=i.selectedIndex){j=d.get(i.id+"_text");h=d.get(i.id+"_voiceDesc");k=i.items[g];if(k){i.selectedValue=k.value;i.selectedIndex=g;d.setHTML(j,d.encode(k.title));d.setHTML(h,i.settings.title+" - "+k.title);d.removeClass(j,"mceTitle");d.setAttrib(i.id,"aria-valuenow",k.title)}else{d.setHTML(j,d.encode(i.settings.title));d.setHTML(h,d.encode(i.settings.title));d.addClass(j,"mceTitle");i.selectedValue=i.selectedIndex=null;d.setAttrib(i.id,"aria-valuenow",i.settings.title)}j=0}},mark:function(g){this.marked[g]=true},add:function(j,g,i){var h=this;i=i||{};i=e.extend(i,{title:j,value:g});h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var j="",g=this,i=g.settings,k=g.classPrefix;j='';j+="";j+="";j+="";return j},showMenu:function(){var h=this,j,i=d.get(this.id),g;if(h.isDisabled()||h.items.length===0){return}if(h.menu&&h.menu.isMenuVisible){return h.hideMenu()}if(!h.isMenuRendered){h.renderMenu();h.isMenuRendered=true}j=d.getPos(i);g=h.menu;g.settings.offset_x=j.x;g.settings.offset_y=j.y;g.settings.keyboard_focus=!e.isOpera;f(h.items,function(k){if(g.items[k.id]){g.items[k.id].setSelected(0)}});f(h.items,function(k){if(g.items[k.id]&&h.marked[k.value]){g.items[k.id].setSelected(1)}if(k.value===h.selectedValue){g.items[k.id].setSelected(1)}});g.showMenu(0,i.clientHeight);b.add(d.doc,"mousedown",h.hideMenu,h);d.addClass(h.id,h.classPrefix+"Selected")},hideMenu:function(h){var g=this;if(g.menu&&g.menu.isMenuVisible){d.removeClass(g.id,g.classPrefix+"Selected");if(h&&h.type=="mousedown"&&(h.target.id==g.id+"_text"||h.target.id==g.id+"_open")){return}if(!h||!d.getParent(h.target,".mceMenu")){d.removeClass(g.id,g.classPrefix+"Selected");b.remove(d.doc,"mousedown",g.hideMenu,g);g.menu.hideMenu()}}},renderMenu:function(){var h=this,g;g=h.settings.control_manager.createDropMenu(h.id+"_menu",{menu_line:1,"class":h.classPrefix+"Menu mceNoIcons",max_width:250,max_height:150});g.onHideMenu.add(function(){h.hideMenu();h.focus()});g.add({title:h.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}});f(h.items,function(i){if(i.value===c){g.add({title:i.title,role:"option","class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}})}else{i.id=d.uniqueId();i.role="option";i.onclick=function(){if(h.settings.onselect(i.value)!==false){h.select(i.value)}};g.add(i)}});h.onRenderMenu.dispatch(h,g);h.menu=g},postRender:function(){var g=this,h=g.classPrefix;b.add(g.id,"click",g.showMenu,g);b.add(g.id,"keydown",function(i){if(i.keyCode==32){g.showMenu(i);b.cancel(i)}});b.add(g.id,"focus",function(){if(!g._focused){g.keyDownHandler=b.add(g.id,"keydown",function(i){if(i.keyCode==40){g.showMenu();b.cancel(i)}});g.keyPressHandler=b.add(g.id,"keypress",function(j){var i;if(j.keyCode==13){i=g.selectedValue;g.selectedValue=null;b.cancel(j);g.settings.onselect(i)}})}g._focused=1});b.add(g.id,"blur",function(){b.remove(g.id,"keydown",g.keyDownHandler);b.remove(g.id,"keypress",g.keyPressHandler);g._focused=0});if(e.isIE6||!d.boxModel){b.add(g.id,"mouseover",function(){if(!d.hasClass(g.id,h+"Disabled")){d.addClass(g.id,h+"Hover")}});b.add(g.id,"mouseout",function(){if(!d.hasClass(g.id,h+"Disabled")){d.removeClass(g.id,h+"Hover")}})}g.onPostRender.dispatch(g,d.get(g.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(h,g){this.parent(h,g);this.classPrefix="mceNativeListBox"},setDisabled:function(g){d.get(this.id).disabled=g;this.setAriaProperty("disabled",g)},isDisabled:function(){return d.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){d.get(this.id).selectedIndex=g+1;this.selectedValue=this.items[g]?this.items[g].value:null},add:function(k,h,g){var j,i=this;g=g||{};g.value=h;if(i.isRendered()){d.add(d.get(this.id),"option",g,k)}j={title:k,value:h,attribs:g};i.items.push(j);i.onAdd.dispatch(i,j)},getLength:function(){return this.items.length},renderHTML:function(){var i,g=this;i=d.createHTML("option",{value:""},"-- "+g.settings.title+" --");f(g.items,function(h){i+=d.createHTML("option",{value:h.value},h.title)});i=d.createHTML("select",{id:g.id,"class":"mceNativeListBox","aria-labelledby":g.id+"_aria"},i);i+=d.createHTML("span",{id:g.id+"_aria",style:"display: none"},g.settings.title);return i},postRender:function(){var h=this,i,j=true;h.rendered=true;function g(l){var k=h.items[l.target.selectedIndex-1];if(k&&(k=k.value)){h.onChange.dispatch(h,k);if(h.settings.onselect){h.settings.onselect(k)}}}b.add(h.id,"change",g);b.add(h.id,"keydown",function(q){var n,p=37,m=39,l=38,r=40,k=13,o=32;b.remove(h.id,"change",i);j=false;n=b.add(h.id,"blur",function(){if(j){return}j=true;b.add(h.id,"change",g);b.remove(h.id,"blur",n)});if(q.keyCode==k||q.keyCode==o){g(q);return b.cancel(q)}else{if(q.keyCode==r||q.keyCode==l){q.stopImmediatePropagation()}}});h.onPostRender.dispatch(h,d.get(h.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(g,f,e){this.parent(g,f,e);this.onRenderMenu=new c.util.Dispatcher(this);f.menu_container=f.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.firstChild.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(function(){f.hideMenu();f.focus()});f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(g,f,e){this.parent(g,f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="";if(g.image){e=b.createHTML("img ",{src:g.image,role:"presentation","class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}e+=b.createHTML("span",{"class":"mceVoiceLabel mceIconOnly",id:f.id+"_voice",style:"display:none;"},g.title);i+=""+b.createHTML("a",{role:"button",id:f.id+"_action",tabindex:"-1",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"";e=b.createHTML("span",{"class":"mceOpen "+g["class"]},'');i+=""+b.createHTML("a",{role:"button",id:f.id+"_open",tabindex:"-1",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"";i+="";i=b.createHTML("table",{role:"presentation","class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",title:g.title},i);return b.createHTML("div",{id:f.id,role:"button",tabindex:"0","aria-labelledby":f.id+"_voice","aria-haspopup":"true"},i)},postRender:function(){var e=this,g=e.settings,f;if(g.onclick){f=function(h){if(!e.isDisabled()){g.onclick(e.value);a.cancel(h)}};a.add(e.id+"_action","click",f);a.add(e.id,["click","keydown"],function(h){var k=32,m=14,i=13,j=38,l=40;if((h.keyCode===32||h.keyCode===13||h.keyCode===14)&&!h.altKey&&!h.ctrlKey&&!h.metaKey){f();a.cancel(h)}else{if(h.type==="click"||h.keyCode===l){e.showMenu();a.cancel(h)}}})}a.add(e.id+"_open","click",function(h){e.showMenu();a.cancel(h)});a.add([e.id,e.id+"_open"],"focus",function(){e._focused=1});a.add([e.id,e.id+"_open"],"blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open");a.clear(this.id)}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(i,h,f){var g=this;g.parent(i,h,f);g.settings=h=d.extend({colors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",grid_width:8,default_color:"#888888"},g.settings);g.onShowMenu=new d.util.Dispatcher(g);g.onHideMenu=new d.util.Dispatcher(g);g.value=h.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.firstChild.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.keyboardNav=new d.ui.KeyboardNavigation({root:f.id+"_menu",items:c.select("a",f.id+"_menu"),onCancel:function(){f.hideMenu();f.focus()}});f.keyboardNav.focus();f.isMenuVisible=1},hideMenu:function(g){var f=this;if(f.isMenuVisible){if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.isMenuVisible=0;f.onHideMenu.dispatch();f.keyboardNav.destroy()}},renderMenu:function(){var p=this,h,k=0,q=p.settings,g,j,l,o,f;o=c.add(q.menu_container,"div",{role:"listbox",id:p.id+"_menu","class":q.menu_class+" "+q["class"],style:"position:absolute;left:0;top:-1000px;"});h=c.add(o,"div",{"class":q["class"]+" mceSplitButtonMenu"});c.add(h,"span",{"class":"mceMenuLine"});g=c.add(h,"table",{role:"presentation","class":"mceColorSplitMenu"});j=c.add(g,"tbody");k=0;e(b(q.colors,"array")?q.colors:q.colors.split(","),function(m){m=m.replace(/^#/,"");if(!k--){l=c.add(j,"tr");k=q.grid_width-1}g=c.add(l,"td");var i={href:"javascript:;",style:{backgroundColor:"#"+m},title:p.editor.getLang("colors."+m,m),"data-mce-color":"#"+m};if(!d.isIE){i.role="option"}g=c.add(g,"a",i);if(p.editor.forcedHighContrastMode){g=c.add(g,"canvas",{width:16,height:16,"aria-hidden":"true"});if(g.getContext&&(f=g.getContext("2d"))){f.fillStyle="#"+m;f.fillRect(0,0,16,16)}else{c.remove(g)}}});if(q.more_colors_func){g=c.add(j,"tr");g=c.add(g,"td",{colspan:q.grid_width,"class":"mceMoreColors"});g=c.add(g,"a",{role:"option",id:p.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},q.more_colors_title);a.add(g,"click",function(i){q.more_colors_func.call(q.more_colors_scope||this);return a.cancel(i)})}c.addClass(h,"mceColorSplitMenu");a.add(p.id+"_menu","mousedown",function(i){return a.cancel(i)});a.add(p.id+"_menu","click",function(i){var m;i=c.getParent(i.target,"a",j);if(i&&i.nodeName.toLowerCase()=="a"&&(m=i.getAttribute("data-mce-color"))){p.setColor(m)}return false});return o},setColor:function(f){this.displayColor(f);this.hideMenu();this.settings.onselect(f)},displayColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){var f=this;f.parent();a.clear(f.id+"_menu");a.clear(f.id+"_more");c.remove(f.id+"_menu");if(f.keyboardNav){f.keyboardNav.destroy()}}})})(tinymce);(function(b){var d=b.DOM,c=b.each,a=b.dom.Event;b.create("tinymce.ui.ToolbarGroup:tinymce.ui.Container",{renderHTML:function(){var f=this,i=[],e=f.controls,j=b.each,g=f.settings;i.push('
');i.push("");i.push('");j(e,function(h){i.push(h.renderHTML())});i.push("");i.push("
");return i.join("")},focus:function(){var e=this;d.get(e.id).focus()},postRender:function(){var f=this,e=[];c(f.controls,function(g){c(g.controls,function(h){if(h.id){e.push(h)}})});f.keyNav=new b.ui.KeyboardNavigation({root:f.id,items:e,onCancel:function(){if(b.isWebKit){d.get(f.editor.id+"_ifr").focus()}f.editor.focus()},excludeFromTabOrder:!f.settings.tab_focus_toolbar})},destroy:function(){var e=this;e.parent();e.keyNav.destroy();a.clear(e.id)}})})(tinymce);(function(a){var c=a.DOM,b=a.each;a.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var m=this,f="",j,k,n=m.settings,e,d,g,l;l=m.controls;for(e=0;e"))}if(d&&k.ListBox){if(d.Button||d.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarEnd"},c.createHTML("span",null,""))}}if(c.stdMode){f+=''+k.renderHTML()+""}else{f+=""+k.renderHTML()+""}if(g&&k.ListBox){if(g.Button||g.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarStart"},c.createHTML("span",null,""))}}}j="mceToolbarEnd";if(k.Button){j+=" mceToolbarEndButton"}else{if(k.SplitButton){j+=" mceToolbarEndSplitButton"}else{if(k.ListBox){j+=" mceToolbarEndListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,""));return c.createHTML("table",{id:m.id,"class":"mceToolbar"+(n["class"]?" "+n["class"]:""),cellpadding:"0",cellspacing:"0",align:m.settings.align||"",role:"presentation",tabindex:"-1"},""+f+"")}})})(tinymce);(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{AddOnManager:function(){var d=this;d.items=[];d.urls={};d.lookup={};d.onAdd=new a(d)},get:function(d){if(this.lookup[d]){return this.lookup[d].instance}else{return undefined}},dependencies:function(e){var d;if(this.lookup[e]){d=this.lookup[e].dependencies}return d||[]},requireLangPack:function(e){var d=b.settings;if(d&&d.language&&d.language_load!==false){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(f,e,d){this.items.push(e);this.lookup[f]={instance:e,dependencies:d};this.onAdd.dispatch(this,f,e);return e},createUrl:function(d,e){if(typeof e==="object"){return e}else{return{prefix:d.prefix,resource:e,suffix:d.suffix}}},addComponents:function(f,d){var e=this.urls[f];b.each(d,function(g){b.ScriptLoader.add(e+"/"+g)})},load:function(j,f,d,h){var g=this,e=f;function i(){var k=g.dependencies(j);b.each(k,function(m){var l=g.createUrl(f,m);g.load(l.resource,l,undefined,undefined)});if(d){if(h){d.call(h)}else{d.call(b.ScriptLoader)}}}if(g.urls[j]){return}if(typeof f==="object"){e=f.prefix+f.resource+f.suffix}if(e.indexOf("/")!==0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}g.urls[j]=e.substring(0,e.lastIndexOf("/"));if(g.lookup[j]){i()}else{b.ScriptLoader.add(e,i,h)}}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(x){var v=this,o,n=j.ScriptLoader,u,l=[],r;function q(t){var s=t.id;if(!s){s=t.name;if(s&&!k.get(s)){s=t.name}else{s=k.uniqueId()}t.setAttribute("id",s)}return s}function m(z,A,t){var y=z[A];if(!y){return}if(j.is(y,"string")){t=y.replace(/\.\w+$/,"");t=t?j.resolve(t):0;y=j.resolve(y)}return y.apply(t||this,Array.prototype.slice.call(arguments,2))}function p(t,s){return s.constructor===RegExp?s.test(t.className):k.hasClass(t,s)}v.settings=x;i.bind(window,"ready",function(){var s,t;m(x,"onpageload");switch(x.mode){case"exact":s=x.elements||"";if(s.length>0){g(e(s),function(y){if(k.get(y)){r=new j.Editor(y,x);l.push(r);r.render(1)}else{g(document.forms,function(z){g(z.elements,function(A){if(A.name===y){y="mce_editor_"+c++;k.setAttrib(A,"id",y);r=new j.Editor(y,x);l.push(r);r.render(1)}})})}})}break;case"textareas":case"specific_textareas":g(k.select("textarea"),function(y){if(x.editor_deselector&&p(y,x.editor_deselector)){return}if(!x.editor_selector||p(y,x.editor_selector)){r=new j.Editor(q(y),x);l.push(r);r.render(1)}});break;default:if(x.types){g(x.types,function(y){g(k.select(y.selector),function(A){var z=new j.Editor(q(A),j.extend({},x,y));l.push(z);z.render(1)})})}else{if(x.selector){g(k.select(x.selector),function(z){var y=new j.Editor(q(z),x);l.push(y);y.render(1)})}}}if(x.oninit){s=t=0;g(l,function(y){t++;if(!y.initialized){y.onInit.add(function(){s++;if(s==t){m(x,"oninit")}})}else{s++}if(s==t){m(x,"oninit")}})}})},get:function(l){if(l===a){return this.editors}if(!this.editors.hasOwnProperty(l)){return a}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l':"",visual:n,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",apply_source_formatting:n,directionality:"ltr",forced_root_block:"p",hidden_input:n,padd_empty_editor:n,render_ui:n,indentation:"30px",fix_table_elements:n,inline_styles:n,convert_fonts_to_spans:n,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:n,entity_encoding:"named",url_converter:m.convertURL,url_converter_scope:m,ie7_compat:n},o);m.id=m.editorId=p;m.isNotDirty=false;m.plugins={};m.documentBaseURI=new k.util.URI(o.document_base_url||k.documentBaseURL,{base_uri:tinyMCE.baseURI});m.baseURI=k.baseURI;m.contentCSS=[];m.contentStyles=[];m.setupEvents();m.execCommands={};m.queryStateCommands={};m.queryValueCommands={};m.execCallback("setup",m)},render:function(o){var p=this,q=p.settings,r=p.id,m=k.ScriptLoader;if(!j.domLoaded){j.add(window,"ready",function(){p.render()});return}tinyMCE.settings=q;if(!p.getElement()){return}if(k.isIDevice&&!k.isIOS5){return}if(!/TEXTAREA|INPUT/i.test(p.getElement().nodeName)&&q.hidden_input&&l.getParent(r,"form")){l.insertAfter(l.create("input",{type:"hidden",name:r}),r)}if(!q.content_editable){p.orgVisibility=p.getElement().style.visibility;p.getElement().style.visibility="hidden"}if(k.WindowManager){p.windowManager=new k.WindowManager(p)}if(q.encoding=="xml"){p.onGetContent.add(function(s,t){if(t.save){t.content=l.encode(t.content)}})}if(q.add_form_submit_trigger){p.onSubmit.addToTop(function(){if(p.initialized){p.save();p.isNotDirty=1}})}if(q.add_unload_trigger){p._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(p.initialized&&!p.destroyed&&!p.isHidden()){p.save({format:"raw",no_events:true})}})}k.addUnload(p.destroy,p);if(q.submit_patch){p.onBeforeRenderUI.add(function(){var s=p.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){p.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){k.triggerSave();p.isNotDirty=1;return p.formElement._mceOldSubmit(p.formElement)}}s=null})}function n(){if(q.language&&q.language_load!==false){m.add(k.baseURL+"/langs/"+q.language+".js")}if(q.theme&&typeof q.theme!="function"&&q.theme.charAt(0)!="-"&&!h.urls[q.theme]){h.load(q.theme,"themes/"+q.theme+"/editor_template"+k.suffix+".js")}i(g(q.plugins),function(t){if(t&&!c.urls[t]){if(t.charAt(0)=="-"){t=t.substr(1,t.length);var s=c.dependencies(t);i(s,function(v){var u={prefix:"plugins/",resource:v,suffix:"/editor_plugin"+k.suffix+".js"};v=c.createUrl(u,v);c.load(v.resource,v)})}else{if(t=="safari"){return}c.load(t,{prefix:"plugins/",resource:t,suffix:"/editor_plugin"+k.suffix+".js"})}}});m.loadQueue(function(){if(!p.removed){p.init()}})}n()},init:function(){var q,G=this,H=G.settings,D,y,z,C=G.getElement(),p,m,E,v,B,F,x,r=[];k.add(G);H.aria_label=H.aria_label||l.getAttrib(C,"aria-label",G.getLang("aria.rich_text_area"));if(H.theme){if(typeof H.theme!="function"){H.theme=H.theme.replace(/-/,"");p=h.get(H.theme);G.theme=new p();if(G.theme.init){G.theme.init(G,h.urls[H.theme]||k.documentBaseURL.replace(/\/$/,""))}}else{G.theme=H.theme}}function A(s){var t=c.get(s),o=c.urls[s]||k.documentBaseURL.replace(/\/$/,""),n;if(t&&k.inArray(r,s)===-1){i(c.dependencies(s),function(u){A(u)});n=new t(G,o);G.plugins[s]=n;if(n.init){n.init(G,o);r.push(s)}}}i(g(H.plugins.replace(/\-/g,"")),A);if(H.popup_css!==false){if(H.popup_css){H.popup_css=G.documentBaseURI.toAbsolute(H.popup_css)}else{H.popup_css=G.baseURI.toAbsolute("themes/"+H.theme+"/skins/"+H.skin+"/dialog.css")}}if(H.popup_css_add){H.popup_css+=","+G.documentBaseURI.toAbsolute(H.popup_css_add)}G.controlManager=new k.ControlManager(G);G.onBeforeRenderUI.dispatch(G,G.controlManager);if(H.render_ui&&G.theme){G.orgDisplay=C.style.display;if(typeof H.theme!="function"){D=H.width||C.style.width||C.offsetWidth;y=H.height||C.style.height||C.offsetHeight;z=H.min_height||100;F=/^[0-9\.]+(|px)$/i;if(F.test(""+D)){D=Math.max(parseInt(D,10)+(p.deltaWidth||0),100)}if(F.test(""+y)){y=Math.max(parseInt(y,10)+(p.deltaHeight||0),z)}p=G.theme.renderUI({targetNode:C,width:D,height:y,deltaWidth:H.delta_width,deltaHeight:H.delta_height});l.setStyles(p.sizeContainer||p.editorContainer,{width:D,height:y});y=(p.iframeHeight||y)+(typeof(y)=="number"?(p.deltaHeight||0):"");if(y';if(H.document_base_url!=k.documentBaseURL){G.iframeHTML+=''}if(k.isIE8){if(H.ie7_compat){G.iframeHTML+=''}else{G.iframeHTML+=''}}G.iframeHTML+='';for(x=0;x'}G.contentCSS=[];v=H.body_id||"tinymce";if(v.indexOf("=")!=-1){v=G.getParam("body_id","","hash");v=v[G.id]||v}B=H.body_class||"";if(B.indexOf("=")!=-1){B=G.getParam("body_class","","hash");B=B[G.id]||""}G.iframeHTML+='
";if(k.relaxedDomain&&(b||(k.isOpera&&parseFloat(opera.version())<11))){E='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+G.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody();})()'}q=l.add(p.iframeContainer,"iframe",{id:G.id+"_ifr",src:E||'javascript:""',frameBorder:"0",allowTransparency:"true",title:H.aria_label,style:{width:"100%",height:y,display:"block"}});G.contentAreaContainer=p.iframeContainer;if(p.editorContainer){l.get(p.editorContainer).style.display=G.orgDisplay}C.style.visibility=G.orgVisibility;l.get(G.id).style.display="none";l.setAttrib(G.id,"aria-hidden",true);if(!k.relaxedDomain||!E){G.initContentBody()}C=q=p=null},initContentBody:function(){var n=this,p=n.settings,q=l.get(n.id),r=n.getDoc(),o,m,s;if((!b||!k.relaxedDomain)&&!p.content_editable){r.open();r.write(n.iframeHTML);r.close();if(k.relaxedDomain){r.domain=k.relaxedDomain}}if(p.content_editable){l.addClass(q,"mceContentBody");n.contentDocument=r=p.content_document||document;n.contentWindow=p.content_window||window;n.bodyElement=q;p.content_document=p.content_window=null}m=n.getBody();m.disabled=true;if(!p.readonly){m.contentEditable=n.getParam("content_editable_state",true)}m.disabled=false;n.schema=new k.html.Schema(p);n.dom=new k.dom.DOMUtils(r,{keep_values:true,url_converter:n.convertURL,url_converter_scope:n,hex_colors:p.force_hex_style_colors,class_filter:p.class_filter,update_styles:true,root_element:p.content_editable?n.id:null,schema:n.schema});n.parser=new k.html.DomParser(p,n.schema);n.parser.addAttributeFilter("src,href,style",function(t,u){var v=t.length,y,A=n.dom,z,x;while(v--){y=t[v];z=y.attr(u);x="data-mce-"+u;if(!y.attributes.map[x]){if(u==="style"){y.attr(x,A.serializeStyle(A.parseStyle(z),y.name))}else{y.attr(x,n.convertURL(z,u,y.name))}}}});n.parser.addNodeFilter("script",function(t,u){var v=t.length,x;while(v--){x=t[v];x.attr("type","mce-"+(x.attr("type")||"text/javascript"))}});n.parser.addNodeFilter("#cdata",function(t,u){var v=t.length,x;while(v--){x=t[v];x.type=8;x.name="#comment";x.value="[CDATA["+x.value+"]]"}});n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(u,v){var x=u.length,y,t=n.schema.getNonEmptyElements();while(x--){y=u[x];if(y.isEmpty(t)){y.empty().append(new k.html.Node("br",1)).shortEnded=true}}});n.serializer=new k.dom.Serializer(p,n.dom,n.schema);n.selection=new k.dom.Selection(n.dom,n.getWin(),n.serializer,n);n.formatter=new k.Formatter(n);n.undoManager=new k.UndoManager(n);n.forceBlocks=new k.ForceBlocks(n);n.enterKey=new k.EnterKey(n);n.editorCommands=new k.EditorCommands(n);n.onExecCommand.add(function(t,u){if(!/^(FontName|FontSize)$/.test(u)){n.nodeChanged()}});n.serializer.onPreProcess.add(function(t,u){return n.onPreProcess.dispatch(n,u,t)});n.serializer.onPostProcess.add(function(t,u){return n.onPostProcess.dispatch(n,u,t)});n.onPreInit.dispatch(n);if(!p.browser_spellcheck&&!p.gecko_spellcheck){r.body.spellcheck=false}if(!p.readonly){n.bindNativeEvents()}n.controlManager.onPostRender.dispatch(n,n.controlManager);n.onPostRender.dispatch(n);n.quirks=k.util.Quirks(n);if(p.directionality){m.dir=p.directionality}if(p.nowrap){m.style.whiteSpace="nowrap"}if(p.protect){n.onBeforeSetContent.add(function(t,u){i(p.protect,function(v){u.content=u.content.replace(v,function(x){return""})})})}n.onSetContent.add(function(){n.addVisual(n.getBody())});if(p.padd_empty_editor){n.onPostProcess.add(function(t,u){u.content=u.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
[\r\n]*)$/,"")})}n.load({initial:true,format:"html"});n.startContent=n.getContent({format:"raw"});n.initialized=true;n.onInit.dispatch(n);n.execCallback("setupcontent_callback",n.id,m,r);n.execCallback("init_instance_callback",n);n.focus(true);n.nodeChanged({initial:true});if(n.contentStyles.length>0){s="";i(n.contentStyles,function(t){s+=t+"\r\n"});n.dom.addStyle(s)}i(n.contentCSS,function(t){n.dom.loadCSS(t)});if(p.auto_focus){setTimeout(function(){var t=k.get(p.auto_focus);t.selection.select(t.getBody(),1);t.selection.collapse(1);t.getBody().focus();t.getWin().focus()},100)}q=r=m=null},focus:function(p){var o,u=this,t=u.selection,q=u.settings.content_editable,n,r,s=u.getDoc(),m;if(!p){if(u.bookmark){t.moveToBookmark(u.bookmark);u.bookmark=null}n=t.getRng();if(n.item){r=n.item(0)}u._refreshContentEditable();if(!q){u.getWin().focus()}if(k.isGecko||q){m=u.getBody();if(m.setActive&&!k.isIE11){m.setActive()}else{m.focus()}if(q){t.normalize()}}if(r&&r.ownerDocument==s){n=s.body.createControlRange();n.addElement(r);n.select()}}if(k.activeEditor!=u){if((o=k.activeEditor)!=null){o.onDeactivate.dispatch(o,u)}u.onActivate.dispatch(u,o)}k._setActive(u)},execCallback:function(q){var m=this,p=m.settings[q],o;if(!p){return}if(m.callbackLookup&&(o=m.callbackLookup[q])){p=o.func;o=o.scope}if(d(p,"string")){o=p.replace(/\.\w+$/,"");o=o?k.resolve(o):0;p=k.resolve(p);m.callbackLookup=m.callbackLookup||{};m.callbackLookup[q]={func:p,scope:o}}return p.apply(o||m,Array.prototype.slice.call(arguments,1))},translate:function(m){var o=this.settings.language||"en",n=k.i18n;if(!m){return""}return n[o+"."+m]||m.replace(/\{\#([^\}]+)\}/g,function(q,p){return n[o+"."+p]||"{#"+p+"}"})},getLang:function(o,m){return k.i18n[(this.settings.language||"en")+"."+o]||(d(m)?m:"{#"+o+"}")},getParam:function(t,q,m){var r=k.trim,p=d(this.settings[t])?this.settings[t]:q,s;if(m==="hash"){s={};if(d(p,"string")){i(p.indexOf("=")>0?p.split(/[;,](?![^=;,]*(?:[;,]|$))/):p.split(","),function(n){n=n.split("=");if(n.length>1){s[r(n[0])]=r(n[1])}else{s[r(n[0])]=r(n)}})}else{s=p}return s}return p},nodeChanged:function(q){var m=this,n=m.selection,p;if(!m.initialized){return}q=q||{};p=n.getStart()||m.getBody();p=b&&p.ownerDocument!=m.getDoc()?m.getBody():p;q.parents=[];m.dom.getParent(p,function(o){if(o.nodeName=="BODY"){return true}q.parents.push(o)});m.onNodeChange.dispatch(m,q?q.controlManager||m.controlManager:m.controlManager,p,n.isCollapsed(),q)},addButton:function(n,o){var m=this;m.buttons=m.buttons||{};m.buttons[n]=o},addCommand:function(m,o,n){this.execCommands[m]={func:o,scope:n||this}},addQueryStateHandler:function(m,o,n){this.queryStateCommands[m]={func:o,scope:n||this}},addQueryValueHandler:function(m,o,n){this.queryValueCommands[m]={func:o,scope:n||this}},addShortcut:function(o,q,m,p){var n=this,r;if(n.settings.custom_shortcuts===false){return false}n.shortcuts=n.shortcuts||{};if(d(m,"string")){r=m;m=function(){n.execCommand(r,false,null)}}if(d(m,"object")){r=m;m=function(){n.execCommand(r[0],r[1],r[2])}}i(g(o),function(s){var t={func:m,scope:p||this,desc:n.translate(q),alt:false,ctrl:false,shift:false};i(g(s,"+"),function(u){switch(u){case"alt":case"ctrl":case"shift":t[u]=true;break;default:t.charCode=u.charCodeAt(0);t.keyCode=u.toUpperCase().charCodeAt(0)}});n.shortcuts[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t});return true},execCommand:function(u,r,x,m){var p=this,q=0,v,n;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(u)&&(!m||!m.skip_focus)){p.focus()}m=f({},m);p.onBeforeExecCommand.dispatch(p,u,r,x,m);if(m.terminate){return false}if(p.execCallback("execcommand_callback",p.id,p.selection.getNode(),u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(v=p.execCommands[u]){n=v.func.call(v.scope,r,x);if(n!==true){p.onExecCommand.dispatch(p,u,r,x,m);return n}}i(p.plugins,function(o){if(o.execCommand&&o.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);q=1;return false}});if(q){return true}if(p.theme&&p.theme.execCommand&&p.theme.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(p.editorCommands.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}p.getDoc().execCommand(u,r,x);p.onExecCommand.dispatch(p,u,r,x,m)},queryCommandState:function(q){var n=this,r,p;if(n._isHidden()){return}if(r=n.queryStateCommands[q]){p=r.func.call(r.scope);if(p!==true){return p}}r=n.editorCommands.queryCommandState(q);if(r!==-1){return r}try{return this.getDoc().queryCommandState(q)}catch(m){}},queryCommandValue:function(r){var n=this,q,p;if(n._isHidden()){return}if(q=n.queryValueCommands[r]){p=q.func.call(q.scope);if(p!==true){return p}}q=n.editorCommands.queryCommandValue(r);if(d(q)){return q}try{return this.getDoc().queryCommandValue(r)}catch(m){}},show:function(){var m=this;l.show(m.getContainer());l.hide(m.id);m.load()},hide:function(){var m=this,n=m.getDoc();if(b&&n){n.execCommand("SelectAll")}m.save();l.hide(m.getContainer());l.setStyle(m.id,"display",m.orgDisplay)},isHidden:function(){return !l.isHidden(this.id)},setProgressState:function(m,n,p){this.onSetProgressState.dispatch(this,m,n,p);return m},load:function(q){var m=this,p=m.getElement(),n;if(p){q=q||{};q.load=true;n=m.setContent(d(p.value)?p.value:p.innerHTML,q);q.element=p;if(!q.no_events){m.onLoadContent.dispatch(m,q)}q.element=p=null;return n}},save:function(r){var m=this,q=m.getElement(),n,p;if(!q||!m.initialized){return}r=r||{};r.save=true;r.element=q;n=r.content=m.getContent(r);if(!r.no_events){m.onSaveContent.dispatch(m,r)}n=r.content;if(!/TEXTAREA|INPUT/i.test(q.nodeName)){q.innerHTML=n;if(p=l.getParent(m.id,"form")){i(p.elements,function(o){if(o.name==m.id){o.value=n;return false}})}}else{q.value=n}r.element=q=null;return n},setContent:function(q,o){var n=this,m=n.getBody(),p;o=o||{};o.format=o.format||"html";o.set=true;o.content=q;if(!o.no_events){n.onBeforeSetContent.dispatch(n,o)}q=o.content;if(q.length===0||/^\s+$/.test(q)){p=n.settings.forced_root_block;if(p&&n.schema.isValidChild(m.nodeName.toLowerCase(),p.toLowerCase())){if(b){q="<"+p+">"}else{q="<"+p+'>
"}}else{if(!b){q='
'}}m.innerHTML=q;n.selection.select(m,true);n.selection.collapse(true);return}if(o.format!=="raw"){q=new k.html.Serializer({},n.schema).serialize(n.parser.parse(q))}o.content=k.trim(q);n.dom.setHTML(m,o.content);if(!o.no_events){n.onSetContent.dispatch(n,o)}if(!n.settings.content_editable||document.activeElement===n.getBody()){n.selection.normalize()}return o.content},getContent:function(o){var n=this,p,m=n.getBody();o=o||{};o.format=o.format||"html";o.get=true;o.getInner=true;if(!o.no_events){n.onBeforeGetContent.dispatch(n,o)}if(o.format=="raw"){p=m.innerHTML}else{if(o.format=="text"){p=m.innerText||m.textContent}else{p=n.serializer.serialize(m,o)}}if(o.format!="text"){o.content=k.trim(p)}else{o.content=p}if(!o.no_events){n.onGetContent.dispatch(n,o)}return o.content},isDirty:function(){var m=this;return k.trim(m.startContent)!==k.trim(m.getContent({format:"raw"}))&&!m.isNotDirty},getContainer:function(){var m=this;if(!m.container){m.container=l.get(m.editorContainer||m.id+"_parent")}return m.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return l.get(this.settings.content_element||this.id)},getWin:function(){var m=this,n;if(!m.contentWindow){n=l.get(m.id+"_ifr");if(n){m.contentWindow=n.contentWindow}}return m.contentWindow},getDoc:function(){var m=this,n;if(!m.contentDocument){n=m.getWin();if(n){m.contentDocument=n.document}}return m.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(o,n,q){var m=this,p=m.settings;if(p.urlconverter_callback){return m.execCallback("urlconverter_callback",o,q,true,n)}if(!p.convert_urls||(q&&q.nodeName=="LINK")||o.indexOf("file:")===0){return o}if(p.relative_urls){return m.documentBaseURI.toRelative(o)}o=m.documentBaseURI.toAbsolute(o,p.remove_script_host);return o},addVisual:function(q){var n=this,o=n.settings,p=n.dom,m;q=q||n.getBody();if(!d(n.hasVisual)){n.hasVisual=o.visual}i(p.select("table,a",q),function(s){var r;switch(s.nodeName){case"TABLE":m=o.visual_table_class||"mceItemTable";r=p.getAttrib(s,"border");if(!r||r=="0"){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}return;case"A":if(!p.getAttrib(s,"href",false)){r=p.getAttrib(s,"name")||s.id;m="mceItemAnchor";if(r){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}}return}});n.onVisualAid.dispatch(n,q,n.hasVisual)},remove:function(){var m=this,o=m.getContainer(),n=m.getDoc();if(!m.removed){m.removed=1;if(b&&n){n.execCommand("SelectAll")}m.save();l.setStyle(m.id,"display",m.orgDisplay);if(!m.settings.content_editable){j.unbind(m.getWin());j.unbind(m.getDoc())}j.unbind(m.getBody());j.clear(o);m.execCallback("remove_instance_callback",m);m.onRemove.dispatch(m);m.onExecCommand.listeners=[];k.remove(m);l.remove(o)}},destroy:function(n){var m=this;if(m.destroyed){return}if(a){j.unbind(m.getDoc());j.unbind(m.getWin());j.unbind(m.getBody())}if(!n){k.removeUnload(m.destroy);tinyMCE.onBeforeUnload.remove(m._beforeUnload);if(m.theme&&m.theme.destroy){m.theme.destroy()}m.controlManager.destroy();m.selection.destroy();m.dom.destroy()}if(m.formElement){m.formElement.submit=m.formElement._mceOldSubmit;m.formElement._mceOldSubmit=null}m.contentAreaContainer=m.formElement=m.container=m.settings.content_element=m.bodyElement=m.contentDocument=m.contentWindow=null;if(m.selection){m.selection=m.selection.win=m.selection.dom=m.selection.dom.doc=null}m.destroyed=1},_refreshContentEditable:function(){var n=this,m,o;if(n._isHidden()){m=n.getBody();o=m.parentNode;o.removeChild(m);o.appendChild(m);m.focus()}},_isHidden:function(){var m;if(!a){return 0}m=this.selection.getSel();return(!m||!m.rangeCount||m.rangeCount===0)}})})(tinymce);(function(a){var b=a.each;a.Editor.prototype.setupEvents=function(){var c=this,d=c.settings;b(["onPreInit","onBeforeRenderUI","onPostRender","onLoad","onInit","onRemove","onActivate","onDeactivate","onClick","onEvent","onMouseUp","onMouseDown","onDblClick","onKeyDown","onKeyUp","onKeyPress","onContextMenu","onSubmit","onReset","onPaste","onPreProcess","onPostProcess","onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent","onLoadContent","onSaveContent","onNodeChange","onChange","onBeforeExecCommand","onExecCommand","onUndo","onRedo","onVisualAid","onSetProgressState","onSetAttrib"],function(e){c[e]=new a.util.Dispatcher(c)});if(d.cleanup_callback){c.onBeforeSetContent.add(function(e,f){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)});c.onPreProcess.add(function(e,f){if(f.set){e.execCallback("cleanup_callback","insert_to_editor_dom",f.node,f)}if(f.get){e.execCallback("cleanup_callback","get_from_editor_dom",f.node,f)}});c.onPostProcess.add(function(e,f){if(f.set){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)}if(f.get){f.content=e.execCallback("cleanup_callback","get_from_editor",f.content,f)}})}if(d.save_callback){c.onGetContent.add(function(e,f){if(f.save){f.content=e.execCallback("save_callback",e.id,f.content,e.getBody())}})}if(d.handle_event_callback){c.onEvent.add(function(f,g,h){if(c.execCallback("handle_event_callback",g,f,h)===false){g.preventDefault();g.stopPropagation()}})}if(d.handle_node_change_callback){c.onNodeChange.add(function(f,e,g){f.execCallback("handle_node_change_callback",f.id,g,-1,-1,true,f.selection.isCollapsed())})}if(d.save_callback){c.onSaveContent.add(function(e,g){var f=e.execCallback("save_callback",e.id,g.content,e.getBody());if(f){g.content=f}})}if(d.onchange_callback){c.onChange.add(function(f,e){f.execCallback("onchange_callback",f,e)})}};a.Editor.prototype.bindNativeEvents=function(){var l=this,f,d=l.settings,e=l.dom,h;h={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function c(i,m){var n=i.type;if(l.removed){return}if(l.onEvent.dispatch(l,i,m)!==false){l[h[i.fakeType||i.type]].dispatch(l,i,m)}}function j(i){l.focus(true)}function k(i,m){if(m.keyCode!=65||!a.VK.metaKeyPressed(m)){l.selection.normalize()}l.nodeChanged()}b(h,function(m,n){var i=d.content_editable?l.getBody():l.getDoc();switch(n){case"contextmenu":e.bind(i,n,c);break;case"paste":e.bind(l.getBody(),n,c);break;case"submit":case"reset":e.bind(l.getElement().form||a.DOM.getParent(l.id,"form"),n,c);break;default:e.bind(i,n,c)}});e.bind(d.content_editable?l.getBody():(a.isGecko?l.getDoc():l.getWin()),"focus",function(i){l.focus(true)});if(d.content_editable&&a.isOpera){e.bind(l.getBody(),"click",j);e.bind(l.getBody(),"keydown",j)}l.onMouseUp.add(k);l.onKeyUp.add(function(i,n){var m=n.keyCode;if((m>=33&&m<=36)||(m>=37&&m<=40)||m==13||m==45||m==46||m==8||(a.isMac&&(m==91||m==93))||n.ctrlKey){k(i,n)}});l.onReset.add(function(){l.setContent(l.startContent,{format:"raw"})});function g(m,i){if(m.altKey||m.ctrlKey||m.metaKey){b(l.shortcuts,function(n){var o=a.isMac?m.metaKey:m.ctrlKey;if(n.ctrl!=o||n.alt!=m.altKey||n.shift!=m.shiftKey){return}if(m.keyCode==n.keyCode||(m.charCode&&m.charCode==n.charCode)){m.preventDefault();if(i){n.func.call(n.scope)}return true}})}}l.onKeyUp.add(function(i,m){g(m)});l.onKeyPress.add(function(i,m){g(m)});l.onKeyDown.add(function(i,m){g(m,true)});if(a.isOpera){l.onClick.add(function(i,m){m.preventDefault()})}}})(tinymce);(function(d){var e=d.each,b,a=true,c=false;d.EditorCommands=function(n){var m=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,q=n.formatter,o;function r(z,y,x){var v;z=z.toLowerCase();if(v=j.exec[z]){v(z,y,x);return a}return c}function l(x){var v;x=x.toLowerCase();if(v=j.state[x]){return v(x)}return -1}function h(x){var v;x=x.toLowerCase();if(v=j.value[x]){return v(x)}return c}function u(v,x){x=x||"exec";e(v,function(z,y){e(y.toLowerCase().split(","),function(A){j[x][A]=z})})}d.extend(this,{execCommand:r,queryCommandState:l,queryCommandValue:h,addCommands:u});function f(y,x,v){if(x===b){x=c}if(v===b){v=null}return n.getDoc().execCommand(y,x,v)}function t(v){return q.match(v)}function s(v,x){q.toggle(v,x?{value:x}:b)}function i(v){o=p.getBookmark(v)}function g(){p.moveToBookmark(o)}u({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(z){var y=n.getDoc(),v;try{f(z)}catch(x){v=a}if(v||!y.queryCommandSupported(z)){if(d.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(A){if(A){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(v){if(p.isCollapsed()){p.select(p.getNode())}f(v);p.collapse(c)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){var x=v.substring(7);e("left,center,right,full".split(","),function(y){if(x!=y){q.remove("align"+y)}});s("align"+x);r("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(y){var v,x;f(y);v=m.getParent(p.getNode(),"ol,ul");if(v){x=v.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(x.nodeName)){i();m.split(x,v);g()}}},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){s(v)},"ForeColor,HiliteColor,FontName":function(y,x,v){s(y,v)},FontSize:function(z,y,x){var v,A;if(x>=1&&x<=7){A=d.explode(k.font_size_style_values);v=d.explode(k.font_size_classes);if(v){x=v[x-1]||x}else{x=A[x-1]||x}}s(z,x)},RemoveFormat:function(v){q.remove(v)},mceBlockQuote:function(v){s("blockquote")},FormatBlock:function(y,x,v){return s(v||"p")},mceCleanup:function(){var v=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(v)},mceRemoveNode:function(z,y,x){var v=x||p.getNode();if(v!=n.getBody()){i();n.dom.remove(v,a);g()}},mceSelectNodeDepth:function(z,y,x){var v=0;m.getParent(p.getNode(),function(A){if(A.nodeType==1&&v++==x){p.select(A);return c}},n.getBody())},mceSelectNode:function(y,x,v){p.select(v)},mceInsertContent:function(B,I,K){var y,J,E,z,F,G,D,C,L,x,A,M,v,H;y=n.parser;J=new d.html.Serializer({},n.schema);v='\uFEFF';G={content:K,format:"html"};p.onBeforeSetContent.dispatch(p,G);K=G.content;if(K.indexOf("{$caret}")==-1){K+="{$caret}"}K=K.replace(/\{\$caret\}/,v);if(!p.isCollapsed()){n.getDoc().execCommand("Delete",false,null)}E=p.getNode();G={context:E.nodeName.toLowerCase()};F=y.parse(K,G);A=F.lastChild;if(A.attr("id")=="mce_marker"){D=A;for(A=A.prev;A;A=A.walk(true)){if(A.type==3||!m.isBlock(A.name)){A.parent.insert(D,A,A.name==="br");break}}}if(!G.invalid){K=J.serialize(F);A=E.firstChild;M=E.lastChild;if(!A||(A===M&&A.nodeName==="BR")){m.setHTML(E,K)}else{p.setContent(K)}}else{p.setContent(v);E=p.getNode();z=n.getBody();if(E.nodeType==9){E=A=z}else{A=E}while(A!==z){E=A;A=A.parentNode}K=E==z?z.innerHTML:m.getOuterHTML(E);K=J.serialize(y.parse(K.replace(//i,function(){return J.serialize(F)})));if(E==z){m.setHTML(z,K)}else{m.setOuterHTML(E,K)}}D=m.get("mce_marker");C=m.getRect(D);L=m.getViewPort(n.getWin());if((C.y+C.h>L.y+L.h||C.yL.x+L.w||C.x")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(y,x,v){n.execCommand("mceInsertContent",false,v.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(z,y,x){var v;if(typeof(x)=="string"){x={href:x}}v=m.getParent(p.getNode(),"a");x.href=x.href.replace(" ","%20");if(!v||!x.href){q.remove("link")}if(x.href){q.apply("link",x,v)}},selectAll:function(){var x=m.getRoot(),v=m.createRng();if(p.getRng().setStart){v.setStart(x,0);v.setEnd(x,x.childNodes.length);p.setRng(v)}else{f("SelectAll")}}});u({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(z){var x="align"+z.substring(7);var v=p.isCollapsed()?[m.getParent(p.getNode(),m.isBlock)]:p.getSelectedBlocks();var y=d.map(v,function(A){return !!q.matchNode(A,x)});return d.inArray(y,a)!==-1},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){return t(v)},mceBlockQuote:function(){return t("blockquote")},Outdent:function(){var v;if(k.inline_styles){if((v=m.getParent(p.getStart(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}if((v=m.getParent(p.getEnd(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}}return l("InsertUnorderedList")||l("InsertOrderedList")||(!k.inline_styles&&!!m.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(x){var v=m.getParent(p.getNode(),"ul,ol");return v&&(x==="insertunorderedlist"&&v.tagName==="UL"||x==="insertorderedlist"&&v.tagName==="OL")}},"state");u({"FontSize,FontName":function(y){var x=0,v;if(v=m.getParent(p.getNode(),"span")){if(y=="fontsize"){x=v.style.fontSize}else{x=v.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return x}},"value");u({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(h){var l,i=0,e=[],g,k,j,f;function c(){return b.trim(h.getContent({format:"raw",no_events:1}).replace(/]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\/span>/g,""))}function d(){l.typing=false;l.add()}onBeforeAdd=new a(l);k=new a(l);j=new a(l);f=new a(l);k.add(function(m,n){if(m.hasUndo()){return h.onChange.dispatch(h,n,m)}});j.add(function(m,n){return h.onUndo.dispatch(h,n,m)});f.add(function(m,n){return h.onRedo.dispatch(h,n,m)});h.onInit.add(function(){l.add()});h.onBeforeExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.beforeChange()}});h.onExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.add()}});h.onSaveContent.add(d);h.dom.bind(h.dom.getRoot(),"dragend",d);h.dom.bind(h.getBody(),"focusout",function(m){if(!h.removed&&l.typing){d()}});h.onKeyUp.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45||n==13||o.ctrlKey){d()}});h.onKeyDown.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45){if(l.typing){d()}return}if((n<16||n>20)&&n!=224&&n!=91&&!l.typing){l.beforeChange();l.typing=true;l.add()}});h.onMouseDown.add(function(m,n){if(l.typing){d()}});h.addShortcut("ctrl+z","undo_desc","Undo");h.addShortcut("ctrl+y","redo_desc","Redo");l={data:e,typing:false,onBeforeAdd:onBeforeAdd,onAdd:k,onUndo:j,onRedo:f,beforeChange:function(){g=h.selection.getBookmark(2,true)},add:function(p){var m,n=h.settings,o;p=p||{};p.content=c();l.onBeforeAdd.dispatch(l,p);o=e[i];if(o&&o.content==p.content){return null}if(e[i]){e[i].beforeBookmark=g}if(n.custom_undo_redo_levels){if(e.length>n.custom_undo_redo_levels){for(m=0;m0){n=e[--i];h.setContent(n.content,{format:"raw"});h.selection.moveToBookmark(n.beforeBookmark);l.onUndo.dispatch(l,n)}return n},redo:function(){var m;if(i0||this.typing},hasRedo:function(){return i0){g.moveEnd("character",q)}g.select()}catch(n){}}}c.nodeChanged()}}if(b.forced_root_block){c.onKeyUp.add(f);c.onNodeChange.add(f)}};(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(j){var o,k,g,h=this,m=h.editor,n,f;if(!h.controlFactories){h.controlFactories=[];d(m.plugins,function(i){if(i.createControl){h.controlFactories.push(i)}})}n=h.controlFactories;for(k=0,g=n.length;k1||ae==ax||ae.tagName=="BR"){return ae}}}var ap=Z.selection.getRng();var au=ap.startContainer;var ao=ap.endContainer;if(au!=ao&&ap.endOffset===0){var at=aq(au,ao);var ar=at.nodeType==3?at.length:at.childNodes.length;ap.setEnd(at,ar)}return ap}function ah(ao){var aq=-1;var ap;S(ao.childNodes,function(at,ar){if(at.nodeName==="UL"||at.nodeName==="OL"){aq=ar;ap=at;return false}});return{listIndex:aq,list:ap}}function al(ap,ao){var ar=-1;var aq=-1;S(ap.childNodes,function(au,at){if(au.nodeName==="SPAN"&&c.getAttrib(au,"data-mce-type")=="bookmark"){if(au.id==ao.id+"_start"){ar=at}else{if(au.id==ao.id+"_end"){aq=at}}}});return{startIndex:ar,endIndex:aq}}function am(ap,ar,av){var ao=[],au,aq,at=true;au=ak.inline||ak.block;aq=c.create(au);aa(aq);M.walk(ap,function(aw){var ax;function ay(aA){var aF,aD,aB,aC,aE;aE=at;aF=aA.nodeName.toLowerCase();aD=aA.parentNode.nodeName.toLowerCase();if(aA.nodeType===1&&x(aA)){aE=at;at=x(aA)==="true";aC=true}if(f(aF,"br")){ax=0;if(ak.block){c.remove(aA)}return}if(ak.wrapper&&y(aA,ac,aj)){ax=0;return}if(at&&!aC&&ak.block&&!ak.wrapper&&H(aF)){aA=c.rename(aA,au);aa(aA);ao.push(aA);ax=0;return}if(ak.selector){S(af,function(aG){if("collapsed" in aG&&aG.collapsed!==ag){return}if(c.is(aA,aG.selector)&&!b(aA)){aa(aA,aG);aB=true}});if(!ak.inline||aB){ax=0;return}}function az(aG){return aG.nodeType===3&&aG.nodeValue.length===1&&aG.nodeValue.charCodeAt(0)===65279}if(at&&!aC&&k(au,aF)&&k(aD,au)&&!(!av&&az(aA))&&!b(aA)&&(!ak.inline||!G(aA))){if(!ax){ax=c.clone(aq,W);aA.parentNode.insertBefore(ax,aA);ao.push(ax)}ax.appendChild(aA)}else{ax=0;S(a.grep(aA.childNodes),ay);if(aC){at=aE}ax=0}}S(aw,ay)});if(ak.wrap_links===false){S(ao,function(aw){function ax(aB){var aA,az,ay;if(aB.nodeName==="A"){az=c.clone(aq,W);ao.push(az);ay=a.grep(aB.childNodes);for(aA=0;aA1||!G(ay))&&aw===0){c.remove(ay,1);return}if(ak.inline||ak.wrapper){if(!ak.exact&&aw===1){ay=ax(ay)}S(af,function(aA){S(c.select(aA.inline,ay),function(aC){var aB;if(aA.wrap_links===false){aB=aC.parentNode;do{if(aB.nodeName==="A"){return}aB=aB.parentNode}while(aB)}Y(aA,aj,aC,aA.exact?aC:null)})});if(y(ay.parentNode,ac,aj)){c.remove(ay,1);ay=0;return B}if(ak.merge_with_parents){c.getParent(ay.parentNode,function(aA){if(y(aA,ac,aj)){c.remove(ay,1);ay=0;return B}})}if(ay&&ak.merge_siblings!==false){ay=u(D(ay),ay);ay=u(ay,D(ay,B))}}})}if(ak){if(ae){if(ae.nodeType){ab=c.createRng();ab.setStartBefore(ae);ab.setEndAfter(ae);am(p(ab,af),null,true)}else{am(ae,null,true)}}else{if(!ag||!ak.inline||c.select("td.mceSelected,th.mceSelected").length){var an=Z.selection.getNode();if(!m&&af[0].defaultBlock&&!c.getParent(an,c.isBlock)){X(af[0].defaultBlock)}Z.selection.setRng(ad());ai=r.getBookmark();am(p(r.getRng(B),af),ai);if(ak.styles&&(ak.styles.color||ak.styles.textDecoration)){a.walk(an,K,"childNodes");K(an)}r.moveToBookmark(ai);Q(r.getRng(B));Z.nodeChanged()}else{T("apply",ac,aj)}}}}function A(ac,aj,ae){var af=U(ac),am=af[0],ai,ab,ak=true;function ad(ar){var aq,ap,ao,au,at;if(ar.nodeType===3){return}if(ar.nodeType===1&&x(ar)){au=ak;ak=x(ar)==="true";at=true}aq=a.grep(ar.childNodes);if(ak&&!at){for(ap=0,ao=af.length;ap=0;ab--){aa=ag[ab].selector;if(!aa){return B}for(af=ac.length-1;af>=0;af--){if(c.is(ac[af],aa)){return B}}}}return W}function I(aa,ad,ab){var ac;if(!O){O={};ac={};Z.onNodeChange.addToTop(function(af,ae,ah){var ag=n(ah),ai={};S(O,function(aj,ak){S(ag,function(al){if(y(al,ak,{},aj.similar)){if(!ac[ak]){S(aj,function(am){am(true,{node:al,format:ak,parents:ag})});ac[ak]=aj}ai[ak]=aj;return false}})});S(ac,function(aj,ak){if(!ai[ak]){delete ac[ak];S(aj,function(al){al(false,{node:ah,format:ak,parents:ag})})}})})}S(aa.split(","),function(ae){if(!O[ae]){O[ae]=[];O[ae].similar=ab}O[ae].push(ad)});return this}a.extend(this,{get:U,register:l,apply:X,remove:A,toggle:E,match:j,matchAll:v,matchNode:y,canApply:z,formatChanged:I});i();V();function g(aa,ab){if(f(aa,ab.inline)){return B}if(f(aa,ab.block)){return B}if(ab.selector){return c.is(aa,ab.selector)}}function f(ab,aa){ab=ab||"";aa=aa||"";ab=""+(ab.nodeName||ab);aa=""+(aa.nodeName||aa);return ab.toLowerCase()==aa.toLowerCase()}function N(ab,aa){var ac=c.getStyle(ab,aa);if(aa=="color"||aa=="backgroundColor"){ac=c.toHex(ac)}if(aa=="fontWeight"&&ac==700){ac="bold"}return""+ac}function q(aa,ab){if(typeof(aa)!="string"){aa=aa(ab)}else{if(ab){aa=aa.replace(/%(\w+)/g,function(ad,ac){return ab[ac]||ad})}}return aa}function e(aa){return aa&&aa.nodeType===3&&/^([\t \r\n]+|)$/.test(aa.nodeValue)}function R(ac,ab,aa){var ad=c.create(ab,aa);ac.parentNode.insertBefore(ad,ac);ad.appendChild(ac);return ad}function p(aa,al,ad){var am,ag,ak,ac=aa.startContainer,ah=aa.startOffset,ap=aa.endContainer,aj=aa.endOffset;function an(ax){var ar,av,au,at,aq;ar=av=ax?ac:ap;at=ax?"previousSibling":"nextSibling";aq=c.getRoot();function aw(ay){return ay.nodeName=="BR"&&ay.getAttribute("data-mce-bogus")&&!ay.nextSibling}if(ar.nodeType==3&&!e(ar)){if(ax?ah>0:ajam?am:ah];if(ac&&ac.nodeType==3){ah=0}}if(ap.nodeType==1&&ap.hasChildNodes()){am=ap.childNodes.length-1;ap=ap.childNodes[aj>am?am:aj-1];if(ap&&ap.nodeType==3){aj=ap.nodeValue.length}}function ao(ar){var aq=ar;while(aq){if(aq.nodeType===1&&x(aq)){return x(aq)==="false"?aq:ar}aq=aq.parentNode}return ar}function ai(ar,aw,ay){var av,at,ax,aq;function au(aA,aC){var aD,az,aB=aA.nodeValue;if(typeof(aC)=="undefined"){aC=ay?aB.length:0}if(ay){aD=aB.lastIndexOf(" ",aC);az=aB.lastIndexOf("\u00a0",aC);aD=aD>az?aD:az;if(aD!==-1&&!ad){aD++}}else{aD=aB.indexOf(" ",aC);az=aB.indexOf("\u00a0",aC);aD=aD!==-1&&(az===-1||aD0&&ag.node.nodeType===3&&ag.node.nodeValue.charAt(ag.offset-1)===" "){if(ag.offset>1){ap=ag.node;ap.splitText(ag.offset-1)}}}}if(al[0].inline||al[0].block_expand){if(!al[0].inline||(ac.nodeType!=3||ah===0)){ac=an(true)}if(!al[0].inline||(ap.nodeType!=3||aj===ap.nodeValue.length)){ap=an()}}if(al[0].selector&&al[0].expand!==W&&!al[0].inline){ac=ae(ac,"previousSibling");ap=ae(ap,"nextSibling")}if(al[0].block||al[0].selector){ac=ab(ac,"previousSibling");ap=ab(ap,"nextSibling");if(al[0].block){if(!G(ac)){ac=an(true)}if(!G(ap)){ap=an()}}}if(ac.nodeType==1){ah=s(ac);ac=ac.parentNode}if(ap.nodeType==1){aj=s(ap)+1;ap=ap.parentNode}return{startContainer:ac,startOffset:ah,endContainer:ap,endOffset:aj}}function Y(ag,af,ad,aa){var ac,ab,ae;if(!g(ad,ag)){return W}if(ag.remove!="all"){S(ag.styles,function(ai,ah){ai=q(ai,af);if(typeof(ah)==="number"){ah=ai;aa=0}if(!aa||f(N(aa,ah),ai)){c.setStyle(ad,ah,"")}ae=1});if(ae&&c.getAttrib(ad,"style")===""){ad.removeAttribute("style");ad.removeAttribute("data-mce-style")}S(ag.attributes,function(aj,ah){var ai;aj=q(aj,af);if(typeof(ah)==="number"){ah=aj;aa=0}if(!aa||f(c.getAttrib(aa,ah),aj)){if(ah=="class"){aj=c.getAttrib(ad,ah);if(aj){ai="";S(aj.split(/\s+/),function(ak){if(/mce\w+/.test(ak)){ai+=(ai?" ":"")+ak}});if(ai){c.setAttrib(ad,ah,ai);return}}}if(ah=="class"){ad.removeAttribute("className")}if(d.test(ah)){ad.removeAttribute("data-mce-"+ah)}ad.removeAttribute(ah)}});S(ag.classes,function(ah){ah=q(ah,af);if(!aa||c.hasClass(aa,ah)){c.removeClass(ad,ah)}});ab=c.getAttribs(ad);for(ac=0;acac?ac:ad]}if(aa.nodeType===3&&ae&&ad>=aa.nodeValue.length){aa=new t(aa,Z.getBody()).next()||aa}if(aa.nodeType===3&&!ae&&ad===0){aa=new t(aa,Z.getBody()).prev()||aa}return aa}function T(ak,aa,ai){var am="_mce_caret",ab=Z.settings.caret_debug;function ac(aq){var ap=c.create("span",{id:am,"data-mce-bogus":true,style:ab?"color:red":""});if(aq){ap.appendChild(Z.getDoc().createTextNode(F))}return ap}function aj(aq,ap){while(aq){if((aq.nodeType===3&&aq.nodeValue!==F)||aq.childNodes.length>1){return false}if(ap&&aq.nodeType===1){ap.push(aq)}aq=aq.firstChild}return true}function af(ap){while(ap){if(ap.id===am){return ap}ap=ap.parentNode}}function ae(ap){var aq;if(ap){aq=new t(ap,ap);for(ap=aq.current();ap;ap=aq.next()){if(ap.nodeType===3){return ap}}}}function ad(ar,aq){var at,ap;if(!ar){ar=af(r.getStart());if(!ar){while(ar=c.get(am)){ad(ar,false)}}}else{ap=r.getRng(true);if(aj(ar)){if(aq!==false){ap.setStartBefore(ar);ap.setEndBefore(ar)}c.remove(ar)}else{at=ae(ar);if(at.nodeValue.charAt(0)===F){at=at.deleteData(0,1)}c.remove(ar,1)}r.setRng(ap)}}function al(aq){var ap=aq.nodeName.toLowerCase();switch(ap){case"html","#document":return false;case"body":return true;default:return al(aq.parentNode)}}function ag(ap){return al(ap.startContainer)||al(ap.endContainer)}function ah(){var ar,ap,aw,av,at,aq,au;ar=r.getRng(true);av=ar.startOffset;aq=ar.startContainer;au=aq.nodeValue;ap=af(r.getStart());if(ap){aw=ae(ap)}if(au&&av>0&&av=0;av--){ar.appendChild(c.clone(az[av],false));ar=ar.firstChild}ar.appendChild(c.doc.createTextNode(F));ar=ar.firstChild;var at=c.getParent(aA,H);if(at&&c.isEmpty(at)){aA.parentNode.replaceChild(ay,aA)}else{c.insertAfter(ay,aA)}r.setCursorLocation(ar,1);if(c.isEmpty(aA)){c.remove(aA)}}}function ao(){var ap;ap=af(r.getStart());if(ap&&!c.isEmpty(ap)){a.walk(ap,function(aq){if(aq.nodeType==1&&aq.id!==am&&!c.isEmpty(aq)){c.setAttrib(aq,"data-mce-bogus",null)}},"childNodes")}}if(!Z._hasCaretEvents){Z.onBeforeGetContent.addToTop(function(){var ap=[],aq;if(aj(af(r.getStart()),ap)){aq=ap.length;while(aq--){c.setAttrib(ap[aq],"data-mce-bogus","1")}}});a.each("onMouseUp onKeyUp".split(" "),function(ap){Z[ap].addToTop(function(){ad();ao()})});Z.onKeyDown.addToTop(function(ap,ar){var aq=ar.keyCode;if(aq==8||aq==37||aq==39){ad(af(r.getStart()))}ao()});r.onSetContent.add(ao);Z._hasCaretEvents=true}if(ak=="apply"){ah()}else{an()}}function Q(ab){var aa=ab.startContainer,ah=ab.startOffset,ad,ag,af,ac,ae;if(aa.nodeType==3&&ah>=aa.nodeValue.length){ah=s(aa);aa=aa.parentNode;ad=true}if(aa.nodeType==1){ac=aa.childNodes;aa=ac[Math.min(ah,ac.length-1)];ag=new t(aa,c.getParent(aa,c.isBlock));if(ah>ac.length-1||ad){ag.next()}for(af=ag.current();af;af=ag.next()){if(af.nodeType==3&&!e(af)){ae=c.create("a",null,F);af.parentNode.insertBefore(ae,af);ab.setStart(af,0);r.setRng(ab);c.remove(ae);return}}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;function b(j,i){e.each(i,function(l,k){if(l){g.setStyle(j,k,l)}});g.rename(j,"span")}function f(i,j){g=i.dom;if(c.convert_fonts_to_spans){e.each(g.select("font,u,strike",j.node),function(k){d[k.nodeName.toLowerCase()](a.dom,k)})}}if(c.inline_styles){h=e.explode(c.font_size_legacy_values);d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size,10)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};a.onPreProcess.add(f);a.onSetContent.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}});(function(b){var a=b.dom.TreeWalker;b.EnterKey=function(f){var i=f.dom,e=f.selection,d=f.settings,h=f.undoManager,c=f.schema.getNonEmptyElements();function g(B){var v=e.getRng(true),G,j,A,u,p,M,C,o,k,n,t,J,x,D;function E(N){return N&&i.isBlock(N)&&!/^(TD|TH|CAPTION|FORM)$/.test(N.nodeName)&&!/^(fixed|absolute)/i.test(N.style.position)&&i.getContentEditable(N)!=="true"}function F(O){var N;if(b.isIE&&!b.isIE11&&i.isBlock(O)){N=e.getRng();O.appendChild(i.create("span",null,"\u00a0"));e.select(O);O.lastChild.outerHTML="";e.setRng(N)}}function z(P){var O=P,Q=[],N;while(O=O.firstChild){if(i.isBlock(O)){return}if(O.nodeType==1&&!c[O.nodeName.toLowerCase()]){Q.push(O)}}N=Q.length;while(N--){O=Q[N];if(!O.hasChildNodes()||(O.firstChild==O.lastChild&&O.firstChild.nodeValue==="")){i.remove(O)}else{if(O.nodeName=="A"&&(O.innerText||O.textContent)===" "){i.remove(O)}}}}function m(O){var T,R,N,U,S,Q=O,P;N=i.createRng();if(O.hasChildNodes()){T=new a(O,O);while(R=T.current()){if(R.nodeType==3){N.setStart(R,0);N.setEnd(R,0);break}if(c[R.nodeName.toLowerCase()]){N.setStartBefore(R);N.setEndBefore(R);break}Q=R;R=T.next()}if(!R){N.setStart(Q,0);N.setEnd(Q,0)}}else{if(O.nodeName=="BR"){if(O.nextSibling&&i.isBlock(O.nextSibling)){if(!M||M<9){P=i.create("br");O.parentNode.insertBefore(P,O)}N.setStartBefore(O);N.setEndBefore(O)}else{N.setStartAfter(O);N.setEndAfter(O)}}else{N.setStart(O,0);N.setEnd(O,0)}}e.setRng(N);i.remove(P);S=i.getViewPort(f.getWin());U=i.getPos(O).y;if(US.y+S.h){f.getWin().scrollTo(0,U'}return R}function q(Q){var P,O,N;if(A.nodeType==3&&(Q?u>0:u0){return true}}}function L(){var P,O,N;if(A&&A.nodeType==3&&u>=A.nodeValue.length){if((!b.isIE||b.isIE11)&&!y()){P=i.create("br");v.insertNode(P);v.setStartAfter(P);v.setEndAfter(P);O=true}}P=i.create("br");v.insertNode(P);if((b.isIE&&!b.isIE11)&&t=="PRE"&&(!M||M<8)){P.parentNode.insertBefore(i.doc.createTextNode("\r"),P)}N=i.create("span",{}," ");P.parentNode.insertBefore(N,P);e.scrollIntoView(N);i.remove(N);if(!O){v.setStartAfter(P);v.setEndAfter(P)}else{v.setStartBefore(P);v.setEndBefore(P)}e.setRng(v);h.add()}function s(N){do{if(N.nodeType===3){N.nodeValue=N.nodeValue.replace(/^[\r\n]+/,"")}N=N.firstChild}while(N)}function K(P){var N=i.getRoot(),O,Q;O=P;while(O!==N&&i.getContentEditable(O)!=="false"){if(i.getContentEditable(O)==="true"){Q=O}O=O.parentNode}return O!==N?Q:N}function I(O){var N;if(!b.isIE||b.isIE11){O.normalize();N=O.lastChild;if(!N||(/^(left|right)$/gi.test(i.getStyle(N,"float",true)))){i.add(O,"br")}}}if(!v.collapsed){f.execCommand("Delete");return}if(B.isDefaultPrevented()){return}A=v.startContainer;u=v.startOffset;x=(d.force_p_newlines?"p":"")||d.forced_root_block;x=x?x.toUpperCase():"";M=i.doc.documentMode;C=B.shiftKey;if(A.nodeType==1&&A.hasChildNodes()){D=u>A.childNodes.length-1;A=A.childNodes[Math.min(u,A.childNodes.length-1)]||A;if(D&&A.nodeType==3){u=A.nodeValue.length}else{u=0}}j=K(A);if(!j){return}h.beforeChange();if(!i.isBlock(j)&&j!=i.getRoot()){if(!x||C){L()}return}if((x&&!C)||(!x&&C)){A=l(A,u)}p=i.getParent(A,i.isBlock);n=p?i.getParent(p.parentNode,i.isBlock):null;t=p?p.nodeName.toUpperCase():"";J=n?n.nodeName.toUpperCase():"";if(J=="LI"&&!B.ctrlKey){p=n;t=J}if(t=="LI"){if(!x&&C){L();return}if(i.isEmpty(p)){if(/^(UL|OL|LI)$/.test(n.parentNode.nodeName)){return false}H();return}}if(t=="PRE"&&d.br_in_pre!==false){if(!C){L();return}}else{if((!x&&!C&&t!="LI")||(x&&C)){L();return}}x=x||"P";if(q()){if(/^(H[1-6]|PRE)$/.test(t)&&J!="HGROUP"){o=r(x)}else{o=r()}if(d.end_container_on_empty_block&&E(n)&&i.isEmpty(p)){o=i.split(n,p)}else{i.insertAfter(o,p)}m(o)}else{if(q(true)){o=p.parentNode.insertBefore(r(),p);F(o)}else{G=v.cloneRange();G.setEndAfter(p);k=G.extractContents();s(k);o=k.firstChild;i.insertAfter(k,p);z(o);I(p);m(o)}}i.setAttrib(o,"id","");h.add()}f.onKeyDown.add(function(k,j){if(j.keyCode==13){if(g(j)!==false){j.preventDefault()}}})}})(tinymce); \ No newline at end of file diff --git a/gulliver/js/tinymce/jscripts/tiny_mce/tiny_mce_popup.js b/gulliver/js/tinymce/jscripts/tiny_mce/tiny_mce_popup.js index bb8e58c88..0808f8f9b 100644 --- a/gulliver/js/tinymce/jscripts/tiny_mce/tiny_mce_popup.js +++ b/gulliver/js/tinymce/jscripts/tiny_mce/tiny_mce_popup.js @@ -2,4 +2,4 @@ // Uncomment and change this document.domain value if you are loading the script cross subdomains // document.domain = 'moxiecode.com'; -var tinymce=null,tinyMCEPopup,tinyMCE;tinyMCEPopup={init:function(){var b=this,a,c;a=b.getWin();tinymce=a.tinymce;tinyMCE=a.tinyMCE;b.editor=tinymce.EditorManager.activeEditor;b.params=b.editor.windowManager.params;b.features=b.editor.windowManager.features;b.dom=b.editor.windowManager.createInstance("tinymce.dom.DOMUtils",document,{ownEvents:true,proxy:tinyMCEPopup._eventProxy});b.dom.bind(window,"ready",b._onDOMLoaded,b);if(b.features.popup_css!==false){b.dom.loadCSS(b.features.popup_css||b.editor.settings.popup_css)}b.listeners=[];b.onInit={add:function(e,d){b.listeners.push({func:e,scope:d})}};b.isWindow=!b.getWindowArg("mce_inline");b.id=b.getWindowArg("mce_window_id");b.editor.windowManager.onOpen.dispatch(b.editor.windowManager,window)},getWin:function(){return(!window.frameElement&&window.dialogArguments)||opener||parent||top},getWindowArg:function(c,b){var a=this.params[c];return tinymce.is(a)?a:b},getParam:function(b,a){return this.editor.getParam(b,a)},getLang:function(b,a){return this.editor.getLang(b,a)},execCommand:function(d,c,e,b){b=b||{};b.skip_focus=1;this.restoreSelection();return this.editor.execCommand(d,c,e,b)},resizeToInnerSize:function(){var a=this;setTimeout(function(){var b=a.dom.getViewPort(window);a.editor.windowManager.resizeBy(a.getWindowArg("mce_width")-b.w,a.getWindowArg("mce_height")-b.h,a.id||window)},10)},executeOnLoad:function(s){this.onInit.add(function(){eval(s)})},storeSelection:function(){this.editor.windowManager.bookmark=tinyMCEPopup.editor.selection.getBookmark(1)},restoreSelection:function(){var a=tinyMCEPopup;if(!a.isWindow&&tinymce.isIE){a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark)}},requireLangPack:function(){var b=this,a=b.getWindowArg("plugin_url")||b.getWindowArg("theme_url");if(a&&b.editor.settings.language&&b.features.translate_i18n!==false&&b.editor.settings.language_load!==false){a+="/langs/"+b.editor.settings.language+"_dlg.js";if(!tinymce.ScriptLoader.isDone(a)){document.write(' - $value) { + if (($appMessageArray[$index]['APP_MSG_SHOW_MESSAGE'] == 1 && $respMess != 'BLOCK') && + ($appMessageArray[$index]['DEL_INDEX'] == 0 || in_array($appMessageArray[$index]['DEL_INDEX'], $delIndex))) { + $appMessageArray[$index]['ID_MESSAGE'] = $appMessageArray[$index]['APP_UID'] . '_' . $appMessageArray[$index]['APP_MSG_UID']; + if ($respMess == 'BLOCK' || $respMess == '') { + $appMessageArray[$index]['APP_MSG_BODY'] = ''; + } + $process[] = array_merge($appMessageArray[$index], ['MSGS_HISTORY' => $respMess]); + $totalCount++; + } + } - $_POST["APP_UID"] = $_REQUEST["APP_UID"]; - $_POST['APP_MSG_UID'] = $_REQUEST["APP_MSG_UID"]; + $process = array_splice($process, $_REQUEST['start'], $_REQUEST['limit']); - $G_PUBLISH = new Publisher(); - $oCase = new Cases(); + $response = new stdclass(); + $response->data = $process; + $response->totalCount = $totalCount; - $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'cases/cases_MessagesView', '', $oCase->getHistoryMessagesTrackerView( $_POST['APP_UID'], $_POST['APP_MSG_UID'] ) ); + if (!empty($process)) { + if (!isset($response->data[0])) { + $response->data[0] = array('APP_MSG_TYPE' => ''); + } - ?> - - getHistoryMessagesTrackerView( $_POST['APP_UID'], $_POST['APP_MSG_UID'] ); + $G_PUBLISH->AddContent('xmlform', 'xmlform', 'cases/cases_MessagesView', '', $case->getHistoryMessagesTrackerView($_POST['APP_UID'], $_POST['APP_MSG_UID'])); + ?> + + getHistoryMessagesTrackerView($_POST['APP_UID'], $_POST['APP_MSG_UID']); - $oSpool->setConfig($aSetup); - $oSpool->create( array ('msg_uid' => $data['MSG_UID'],'app_uid' => $data['APP_UID'],'del_index' => $data['DEL_INDEX'],'app_msg_type' => $data['APP_MSG_TYPE'],'app_msg_subject' => $data['APP_MSG_SUBJECT'],'app_msg_from' => $data['APP_MSG_FROM'],'app_msg_to' => $data['APP_MSG_TO'],'app_msg_body' => $data['APP_MSG_BODY'],'app_msg_cc' => $data['APP_MSG_CC'],'app_msg_bcc' => $data['APP_MSG_BCC'],'app_msg_attach' => $data['APP_MSG_ATTACH'],'app_msg_template' => $data['APP_MSG_TEMPLATE'],'app_msg_status' => 'pending' - ) ); - $oSpool->sendMail(); + $spool = new SpoolRun(); - } catch (Exception $e) { - - $errorMessage = $e->getMessage(); - } - - echo $errorMessage; + $spool->setConfig(System::getEmailConfiguration()); + $spool->create([ + 'msg_uid' => $data['MSG_UID'], + 'app_uid' => $data['APP_UID'], + 'del_index' => $data['DEL_INDEX'], + 'app_msg_type' => $data['APP_MSG_TYPE'], + 'app_msg_subject' => $data['APP_MSG_SUBJECT'], + 'app_msg_from' => $data['APP_MSG_FROM'], + 'app_msg_to' => $data['APP_MSG_TO'], + 'app_msg_body' => $data['APP_MSG_BODY'], + 'app_msg_cc' => $data['APP_MSG_CC'], + 'app_msg_bcc' => $data['APP_MSG_BCC'], + 'app_msg_attach' => $data['APP_MSG_ATTACH'], + 'app_msg_template' => $data['APP_MSG_TEMPLATE'], + 'app_msg_status' => 'pending' + ]); + $spool->sendMail(); + } catch (Exception $error) { + $message = $error->getMessage(); + } + echo $message; + break; } - diff --git a/workflow/engine/methods/cases/casesConsolidatedListExtJs.php b/workflow/engine/methods/cases/casesConsolidatedListExtJs.php index 58d21dfa9..3a9cd1309 100644 --- a/workflow/engine/methods/cases/casesConsolidatedListExtJs.php +++ b/workflow/engine/methods/cases/casesConsolidatedListExtJs.php @@ -71,7 +71,7 @@ while ($rsSql->next()) { } if (count($arrayTabItem) > 0) { - $urlProxy = System::getHttpServerHostnameRequestsFrontEnd() . '/api/1.0/' . SYS_SYS . '/consolidated/'; + $urlProxy = System::getHttpServerHostnameRequestsFrontEnd() . '/api/1.0/' . config("system.workspace") . '/consolidated/'; $clientId = 'x-pm-local-client'; $client = getClientCredentials($clientId); $authCode = getAuthorizationCode($client); diff --git a/workflow/engine/methods/cases/casesListExtJs.php b/workflow/engine/methods/cases/casesListExtJs.php index 962779261..6fd980d3b 100644 --- a/workflow/engine/methods/cases/casesListExtJs.php +++ b/workflow/engine/methods/cases/casesListExtJs.php @@ -176,9 +176,9 @@ if ($licensedFeatures->verifyfeature('r19Vm5DK1UrT09MenlLYjZxejlhNUZ1b1NhV0JHWjB if (isset($_COOKIE['dashboardListInbox'])) { $oHeadPublisher->assign('valueFilterStatus', $_COOKIE['dashboardListInbox']); if (PHP_VERSION < 5.2) { - setcookie("dashboardListInbox", '', time() + (24 * 60 * 60), "/sys" . SYS_SYS, "; HttpOnly"); + setcookie("dashboardListInbox", '', time() + (24 * 60 * 60), "/sys" . config("system.workspace"), "; HttpOnly"); } else { - setcookie("dashboardListInbox", '', time() + (24 * 60 * 60), "/sys" . SYS_SYS, null, false, true); + setcookie("dashboardListInbox", '', time() + (24 * 60 * 60), "/sys" . config("system.workspace"), null, false, true); } } } diff --git a/workflow/engine/methods/cases/casesList_Ajax.php b/workflow/engine/methods/cases/casesList_Ajax.php index 1eb7234fb..2d0f27905 100644 --- a/workflow/engine/methods/cases/casesList_Ajax.php +++ b/workflow/engine/methods/cases/casesList_Ajax.php @@ -6,28 +6,6 @@ if (!isset($_SESSION['USER_LOGGED'])) { print G::json_encode($response); die(); } -/** - * casesList_Ajax.php - * - * ProcessMaker Open Source Edition - * Copyright (C) 2004 - 2008 Colosa Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - */ $actionAjax = isset($_REQUEST['actionAjax']) ? $_REQUEST['actionAjax'] : null; @@ -39,13 +17,14 @@ function filterUserListArray($users = array(), $filter = '') $filteredUsers[] = $user; } } + return $filteredUsers; } //Load the suggest list of users if ($actionAjax == "userValues") { - $action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : null; - $query = isset( $_REQUEST['query'] ) ? $_REQUEST['query'] : null; + $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : null; + $query = isset($_REQUEST['query']) ? $_REQUEST['query'] : null; $conf = new Configurations(); $confEnvSetting = $conf->getFormats(); @@ -69,8 +48,8 @@ if ($actionAjax == "userValues") { if (!is_null($query)) { $filters = $cUsers->getNewCriterion(UsersPeer::USR_FIRSTNAME, '%' . $query . '%', Criteria::LIKE)->addOr( $cUsers->getNewCriterion(UsersPeer::USR_LASTNAME, '%' . $query . '%', Criteria::LIKE)->addOr( - $cUsers->getNewCriterion(UsersPeer::USR_USERNAME, '%' . $query . '%', Criteria::LIKE))); - $cUsers->addOr($filters); + $cUsers->getNewCriterion(UsersPeer::USR_USERNAME, '%' . $query . '%', Criteria::LIKE))); + $cUsers->addOr($filters); } $cUsers->setLimit(20); $cUsers->addAscendingOrderByColumn(UsersPeer::TABLE_NAME . "." . $conf->userNameFormatGetFirstFieldByUsersTable()); @@ -79,7 +58,8 @@ if ($actionAjax == "userValues") { while ($oDataset->next()) { $row = $oDataset->getRow(); - $usrFullName = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $row["USR_USERNAME"], $row["USR_FIRSTNAME"], $row["USR_LASTNAME"]); + $usrFullName = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $row["USR_USERNAME"], + $row["USR_FIRSTNAME"], $row["USR_LASTNAME"]); if ($action === 'search') { //Only for the advanced search we used the USR_ID column $users[] = array("USR_UID" => $row["USR_ID"], "USR_FULLNAME" => $usrFullName); @@ -87,6 +67,7 @@ if ($actionAjax == "userValues") { $users[] = array("USR_UID" => $row["USR_UID"], "USR_FULLNAME" => $usrFullName); } } + return print G::json_encode($users); } @@ -126,18 +107,18 @@ if ($actionAjax == "processListExtJs") { $cProcess->addAnd($filters); } - if ($action==='to_revise') { - $oAppCache = new AppCacheView(); - $aProcesses = $oAppCache->getProUidSupervisor($_SESSION['USER_LOGGED']); - $cProcess->add(ProcessPeer::PRO_UID, $aProcesses, Criteria::IN); + if ($action === 'to_revise') { + $processUser = new ProcessUser(); + $listProcess = $processUser->getProUidSupervisor($_SESSION['USER_LOGGED']); + $cProcess->add(ProcessPeer::PRO_UID, $listProcess, Criteria::IN); } - if ($action==='to_reassign') { + if ($action === 'to_reassign') { if ($RBAC->userCanAccess('PM_REASSIGNCASE') == 1) { } elseif ($RBAC->userCanAccess('PM_REASSIGNCASE_SUPERVISOR') == 1) { - $oAppCache = new AppCacheView(); - $aProcesses = $oAppCache->getProUidSupervisor($_SESSION['USER_LOGGED']); - $cProcess->add(ProcessPeer::PRO_UID, $aProcesses, Criteria::IN); + $processUser = new ProcessUser(); + $listProcess = $processUser->getProUidSupervisor($_SESSION['USER_LOGGED']); + $cProcess->add(ProcessPeer::PRO_UID, $listProcess, Criteria::IN); } } @@ -153,6 +134,7 @@ if ($actionAjax == "processListExtJs") { } $processes[] = $aRow; } + return print G::json_encode($processes); } @@ -161,7 +143,7 @@ if ($actionAjax == "verifySession") { $response = new stdclass(); $response->message = G::LoadTranslation('ID_LOGIN_AGAIN'); $response->lostSession = true; - print G::json_encode( $response ); + print G::json_encode($response); die(); } else { $response = new stdclass(); @@ -174,32 +156,33 @@ if ($actionAjax == "verifySession") { } elseif ($RBAC->userCanAccess('PM_REASSIGNCASE_SUPERVISOR') == 1) { $response->reassigncase = true; $response->message = G::LoadTranslation('ID_NOT_ABLE_REASSIGN'); - $oAppCache = new AppCacheView(); - $aProcesses = $oAppCache->getProUidSupervisor($_SESSION['USER_LOGGED']); - $response->processeslist = G::json_encode( $aProcesses ); + $processUser = new ProcessUser(); + $listProcess = $processUser->getProUidSupervisor($_SESSION['USER_LOGGED']); + $response->processeslist = G::json_encode($listProcess); } - print G::json_encode( $response ); + print G::json_encode($response); die(); } } if ($actionAjax == "getUsersToReassign") { - $taskUid = $_POST['taskUid']; - $search = $_POST['search']; + $taskUid = $_POST['taskUid']; + $search = $_POST['search']; $pageSize = $_POST['pageSize']; - $sortField = (isset($_POST['sort']))? $_POST['sort'] : ''; - $sortDir = (isset($_POST['dir']))? $_POST['dir'] : ''; - $start = (isset($_POST['start']))? $_POST['start'] : 0; - $limit = (isset($_POST['limit']))? $_POST['limit'] : $pageSize; + $sortField = (isset($_POST['sort'])) ? $_POST['sort'] : ''; + $sortDir = (isset($_POST['dir'])) ? $_POST['dir'] : ''; + $start = (isset($_POST['start'])) ? $_POST['start'] : 0; + $limit = (isset($_POST['limit'])) ? $_POST['limit'] : $pageSize; $response = []; try { $case = new \ProcessMaker\BusinessModel\Cases(); - $result = $case->getUsersToReassign($_SESSION['USER_LOGGED'], $taskUid, ['filter' => $search], $sortField, $sortDir, $start, $limit); + $result = $case->getUsersToReassign($_SESSION['USER_LOGGED'], $taskUid, ['filter' => $search], $sortField, + $sortDir, $start, $limit); $response['status'] = 'OK'; $response['success'] = true; @@ -232,9 +215,9 @@ if ($actionAjax == 'reassignCase') { //Current users of OPEN DEL_INDEX thread $aCurUser = $oAppDel->getCurrentUsers($APP_UID, $DEL_INDEX); $flagReassign = true; - if(!empty($aCurUser)){ + if (!empty($aCurUser)) { foreach ($aCurUser as $key => $value) { - if($value === $TO_USR_UID){ + if ($value === $TO_USR_UID) { $flagReassign = false; } } @@ -244,7 +227,7 @@ if ($actionAjax == 'reassignCase') { } //If the currentUser is diferent to nextUser, create the thread - if($flagReassign){ + if ($flagReassign) { $cases->reassignCase($_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['USER_LOGGED'], $TO_USR_UID); } @@ -258,11 +241,12 @@ if ($actionAjax == 'reassignCase') { // Save the note reassign reason if (isset($_POST['NOTE_REASON']) && $_POST['NOTE_REASON'] !== '') { - require_once ("classes/model/AppNotes.php"); + require_once("classes/model/AppNotes.php"); $appNotes = new AppNotes(); $noteContent = addslashes($_POST['NOTE_REASON']); - $notifyReassign = $_POST['NOTIFY_REASSIGN'] === 'true' ? true: false; - $res = $appNotes->postNewNote($_SESSION['APPLICATION'], $_SESSION['USER_LOGGED'], $noteContent, $notifyReassign); + $notifyReassign = $_POST['NOTIFY_REASSIGN'] === 'true' ? true : false; + $res = $appNotes->postNewNote($_SESSION['APPLICATION'], $_SESSION['USER_LOGGED'], $noteContent, + $notifyReassign); } } catch (Exception $e) { $result->status = 1; @@ -294,10 +278,12 @@ if ($actionAjax == 'showHistoryMessage') { leimnud.browser = {}; leimnud.browser.isIphone = ""; leimnud.iphone = {}; - leimnud.iphone.make = function(){ + leimnud.iphone.make = function() { }; + function ajax_function(ajax_server, funcion, parameters, method) { } + //! AddContent('xmlform', 'xmlform', 'cases/cases_MessagesView', '', $oCase->getHistoryMessagesTrackerView($_POST['APP_UID'], $_POST['APP_MSG_UID'])); + $G_PUBLISH->AddContent('xmlform', 'xmlform', 'cases/cases_MessagesView', '', + $oCase->getHistoryMessagesTrackerView($_POST['APP_UID'], $_POST['APP_MSG_UID'])); ?> @@ -320,7 +307,7 @@ if ($actionAjax == 'showHistoryMessage') { - function loadForm_id;?>(parametro1){ + function loadForm_id;?>(parametro1) { } > 16) + (y >> 16) + (lsw >> 16); @@ -505,6 +494,7 @@ if ($actionAjax == 'showDynaformListHistory') { leimnud.iphone = {}; leimnud.iphone.make = function () { }; + function ajax_function(ajax_server, funcion, parameters, method) { } @@ -534,6 +524,7 @@ if ($actionAjax == 'showDynaformListHistory') { showDynaformHistoryGlobal.tablename = ''; showDynaformHistoryGlobal.dynDate = ''; showDynaformHistoryGlobal.dynTitle = ''; + function showDynaformHistory(dynUID, tablename, dynDate, dynTitle) { showDynaformHistoryGlobal.dynUID = dynUID; showDynaformHistoryGlobal.tablename = tablename; @@ -591,8 +582,10 @@ if ($actionAjax == 'dynaformChangeLogViewHistory') { leimnud.iphone = {}; leimnud.iphone.make = function () { }; + function ajax_function(ajax_server, funcion, parameters, method) { } + //! AddContent('dynaform', 'xmlform', $_SESSION['PROCESS'] . '/' . $_POST['DYN_UID'], '', - $Fields['APP_DATA'], + $Fields['APP_DATA'], '', '', 'view'); ?> diff --git a/workflow/engine/methods/cases/cases_Resume.php b/workflow/engine/methods/cases/cases_Resume.php index 4c83a50cc..f985b671e 100644 --- a/workflow/engine/methods/cases/cases_Resume.php +++ b/workflow/engine/methods/cases/cases_Resume.php @@ -161,6 +161,8 @@ if ($Fields['APP_STATUS'] != 'COMPLETED') { if (isset($row['USR_UID']) && !empty($row['USR_UID'])) { $aUser = $objUser->loadDetails ($row['USR_UID']); $FieldsPar['CURRENT_USER'] = $aUser['USR_FULLNAME']; + } else { + $FieldsPar['CURRENT_USER'] = ''; } $FieldsPar['DEL_DELEGATE_DATE'] = $row['DEL_DELEGATE_DATE']; $FieldsPar['DEL_INIT_DATE'] = $row['DEL_INIT_DATE']; diff --git a/workflow/engine/methods/cases/cases_SaveDataSupervisor.php b/workflow/engine/methods/cases/cases_SaveDataSupervisor.php index 70a6487df..e12d94aa1 100644 --- a/workflow/engine/methods/cases/cases_SaveDataSupervisor.php +++ b/workflow/engine/methods/cases/cases_SaveDataSupervisor.php @@ -142,8 +142,8 @@ if (isset( $_FILES["form"]["name"] ) && count( $_FILES["form"]["name"] ) > 0) { if($res->status == 0){ $message = $res->message; G::SendMessageText( $message, "ERROR" ); - $backUrlObj = explode( "sys" . SYS_SYS, $_SERVER['HTTP_REFERER'] ); - G::header( "location: " . "/sys" . SYS_SYS . $backUrlObj[1] ); + $backUrlObj = explode( "sys" . config("system.workspace"), $_SERVER['HTTP_REFERER'] ); + G::header( "location: " . "/sys" . config("system.workspace") . $backUrlObj[1] ); die(); } @@ -156,8 +156,8 @@ if (isset( $_FILES["form"]["name"] ) && count( $_FILES["form"]["name"] ) > 0) { if ($inpDocMaxFilesize > 0 && $fileSizeByField > 0) { if ($fileSizeByField > $inpDocMaxFilesize) { G::SendMessageText(G::LoadTranslation("ID_SIZE_VERY_LARGE_PERMITTED"), "ERROR"); - $arrayAux1 = explode("sys" . SYS_SYS, $_SERVER["HTTP_REFERER"]); - G::header("location: /sys" . SYS_SYS . $arrayAux1[1]); + $arrayAux1 = explode("sys" . config("system.workspace"), $_SERVER["HTTP_REFERER"]); + G::header("location: /sys" . config("system.workspace") . $arrayAux1[1]); exit(0); } } diff --git a/workflow/engine/methods/cases/cases_SaveDocument.php b/workflow/engine/methods/cases/cases_SaveDocument.php index ae948fc46..02c544479 100644 --- a/workflow/engine/methods/cases/cases_SaveDocument.php +++ b/workflow/engine/methods/cases/cases_SaveDocument.php @@ -54,8 +54,8 @@ if ((isset( $_FILES['form'] )) && ($_FILES['form']['error']['APP_DOC_FILENAME'] break; } G::SendMessageText( $message, "ERROR" ); - $backUrlObj = explode( "sys" . SYS_SYS, $_SERVER['HTTP_REFERER'] ); - G::header( "location: " . "/sys" . SYS_SYS . $backUrlObj[1] ); + $backUrlObj = explode( "sys" . config("system.workspace"), $_SERVER['HTTP_REFERER'] ); + G::header( "location: " . "/sys" . config("system.workspace") . $backUrlObj[1] ); die(); } @@ -106,8 +106,8 @@ if(isset($_FILES["form"]["name"]["APP_DOC_FILENAME"]) && isset($_FILES["form"][" if($res->status == 0){ $message = $res->message; G::SendMessageText( $message, "ERROR" ); - $backUrlObj = explode( "sys" . SYS_SYS, $_SERVER['HTTP_REFERER'] ); - G::header( "location: " . "/sys" . SYS_SYS . $backUrlObj[1] ); + $backUrlObj = explode( "sys" . config("system.workspace"), $_SERVER['HTTP_REFERER'] ); + G::header( "location: " . "/sys" . config("system.workspace") . $backUrlObj[1] ); die(); } @@ -134,8 +134,8 @@ if (isset($_FILES) && isset($_FILES["form"]) && count($_FILES["form"]) > 0) { } catch (Exception $e) { G::SendMessageText($e->getMessage(), "ERROR"); - $arrayAux = explode("sys" . SYS_SYS, $_SERVER["HTTP_REFERER"]); - G::header("location: /sys" . SYS_SYS . $arrayAux[1]); + $arrayAux = explode("sys" . config("system.workspace"), $_SERVER["HTTP_REFERER"]); + G::header("location: /sys" . config("system.workspace") . $arrayAux[1]); exit(0); } } diff --git a/workflow/engine/methods/cases/cases_SchedulerValidateUser.php b/workflow/engine/methods/cases/cases_SchedulerValidateUser.php index 752c4ff38..3edaa6f64 100644 --- a/workflow/engine/methods/cases/cases_SchedulerValidateUser.php +++ b/workflow/engine/methods/cases/cases_SchedulerValidateUser.php @@ -40,7 +40,7 @@ if (G::is_https()) { $http = 'http://'; } -$endpoint = $http . $_SERVER['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/wsdl2'; +$endpoint = $http . $_SERVER['HTTP_HOST'] . '/sys' . config("system.workspace") . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/wsdl2'; $client = new SoapClient($endpoint, $streamContext); $user = $sWS_USER; diff --git a/workflow/engine/methods/cases/cases_ShowDocument.php b/workflow/engine/methods/cases/cases_ShowDocument.php index 702135e6b..178d52697 100644 --- a/workflow/engine/methods/cases/cases_ShowDocument.php +++ b/workflow/engine/methods/cases/cases_ShowDocument.php @@ -109,8 +109,8 @@ if (! $sw_file_exists) { print G::json_encode( $res ); } else { G::SendMessageText( $error_message, "ERROR" ); - $backUrlObj = explode( "sys" . SYS_SYS, $_SERVER['HTTP_REFERER'] ); - G::header( "location: " . "/sys" . SYS_SYS . $backUrlObj[1] ); + $backUrlObj = explode( "sys" . config("system.workspace"), $_SERVER['HTTP_REFERER'] ); + G::header( "location: " . "/sys" . config("system.workspace") . $backUrlObj[1] ); die(); } diff --git a/workflow/engine/methods/cases/cases_ShowOutputDocument.php b/workflow/engine/methods/cases/cases_ShowOutputDocument.php index 27f8d0e2f..b786e3814 100644 --- a/workflow/engine/methods/cases/cases_ShowOutputDocument.php +++ b/workflow/engine/methods/cases/cases_ShowOutputDocument.php @@ -122,8 +122,8 @@ if (!$sw_file_exists) { print G::json_encode( $res ); } else { G::SendMessageText( $error_message, "ERROR" ); - $backUrlObj = explode( "sys" . SYS_SYS, $_SERVER['HTTP_REFERER'] ); - G::header( "location: " . "/sys" . SYS_SYS . $backUrlObj[1] ); + $backUrlObj = explode( "sys" . config("system.workspace"), $_SERVER['HTTP_REFERER'] ); + G::header( "location: " . "/sys" . config("system.workspace") . $backUrlObj[1] ); die(); } @@ -159,7 +159,7 @@ if (!$sw_file_exists) { } /*----------------------------------********---------------------------------*/ if (!$downloadStatus) { - G::streamFile( $realPath, $download, $nameFile); //download + G::streamFile( $realPath, $download, G::inflect($nameFile)); //download } } } diff --git a/workflow/engine/methods/cases/cases_Step.php b/workflow/engine/methods/cases/cases_Step.php index 6cbda3d5d..c6a8c0db6 100644 --- a/workflow/engine/methods/cases/cases_Step.php +++ b/workflow/engine/methods/cases/cases_Step.php @@ -1,6 +1,8 @@ getStepMode(); $FieldsPmDynaform["PRO_SHOW_MESSAGE"] = $noShowTitle; $FieldsPmDynaform["TRIGGER_DEBUG"] = $_SESSION['TRIGGER_DEBUG']['ISSET']; - $a = new PmDynaform(\ProcessMaker\Util\DateTime::convertUtcToTimeZone($FieldsPmDynaform)); + $a = new PmDynaform(DateTime::convertUtcToTimeZone($FieldsPmDynaform)); if ($a->isResponsive()) { $a->printEdit(); } else { if(array_key_exists('gmail',$_GET) && $_GET['gmail'] == 1){ - $G_PUBLISH->AddContent('dynaform', 'xmlform', $_SESSION['PROCESS'] . '/' . $_GET['UID'], '', \ProcessMaker\Util\DateTime::convertUtcToTimeZone($Fields['APP_DATA']), 'cases_SaveData?UID=' . $_GET['UID'] . '&APP_UID=' . $_SESSION['APPLICATION'] . '&gmail=1', '', (strtolower($oStep->getStepMode()) != 'edit' ? strtolower($oStep->getStepMode()) : '')); + $G_PUBLISH->AddContent('dynaform', 'xmlform', $_SESSION['PROCESS'] . '/' . $_GET['UID'], '', DateTime::convertUtcToTimeZone($Fields['APP_DATA']), 'cases_SaveData?UID=' . $_GET['UID'] . '&APP_UID=' . $_SESSION['APPLICATION'] . '&gmail=1', '', (strtolower($oStep->getStepMode()) != 'edit' ? strtolower($oStep->getStepMode()) : '')); }else{ - $G_PUBLISH->AddContent('dynaform', 'xmlform', $_SESSION['PROCESS'] . '/' . $_GET['UID'], '', \ProcessMaker\Util\DateTime::convertUtcToTimeZone($Fields['APP_DATA']), 'cases_SaveData?UID=' . $_GET['UID'] . '&APP_UID=' . $_SESSION['APPLICATION'], '', (strtolower($oStep->getStepMode()) != 'edit' ? strtolower($oStep->getStepMode()) : '')); + $G_PUBLISH->AddContent('dynaform', 'xmlform', $_SESSION['PROCESS'] . '/' . $_GET['UID'], '', DateTime::convertUtcToTimeZone($Fields['APP_DATA']), 'cases_SaveData?UID=' . $_GET['UID'] . '&APP_UID=' . $_SESSION['APPLICATION'], '', (strtolower($oStep->getStepMode()) != 'edit' ? strtolower($oStep->getStepMode()) : '')); } } break; @@ -710,6 +712,7 @@ try { $oAppDocument = new AppDocument(); $lastVersion = $oAppDocument->getLastAppDocVersion( $_GET['DOC'], $_SESSION['APPLICATION'] ); $aFields = $oAppDocument->load( $_GET['DOC'], $lastVersion ); + $aFields['APP_DOC_CREATE_DATE'] = DateTime::convertUtcToTimeZone($aFields['APP_DOC_CREATE_DATE']); $listing = false; $oPluginRegistry = PluginRegistry::loadSingleton(); if ($oPluginRegistry->existsTrigger( PM_CASE_DOCUMENT_LIST )) { diff --git a/workflow/engine/methods/cases/main_init.php b/workflow/engine/methods/cases/main_init.php index f401a5239..812390384 100644 --- a/workflow/engine/methods/cases/main_init.php +++ b/workflow/engine/methods/cases/main_init.php @@ -29,7 +29,7 @@ $oHeadPublisher->addExtJsScript( "cases/main", false ); //Adding a javascript fi $oHeadPublisher->addContent( "cases/main" ); //Adding a html file .html. $keyMem = "USER_PREFERENCES" . $_SESSION["USER_LOGGED"]; -$memcache = &PMmemcached::getSingleton( SYS_SYS ); +$memcache = &PMmemcached::getSingleton( config("system.workspace") ); if (($arrayConfig = $memcache->get( $keyMem )) === false) { $conf->loadConfig( $x, "USER_PREFERENCES", "", "", $_SESSION["USER_LOGGED"], "" ); diff --git a/workflow/engine/methods/cases/open.php b/workflow/engine/methods/cases/open.php index ab2b7259c..178854640 100644 --- a/workflow/engine/methods/cases/open.php +++ b/workflow/engine/methods/cases/open.php @@ -29,7 +29,7 @@ */ $tBarGmail = false; -if(isset( $_GET['gmail']) && $_GET['gmail'] == 1){ +if (isset($_GET['gmail']) && $_GET['gmail'] == 1) { $_SESSION['gmail'] = 1; $tBarGmail = true; } @@ -42,7 +42,7 @@ if (!isset($_GET['APP_UID']) && !isset($_GET['APP_NUMBER']) && !isset($_GET['DEL if (!isset($_GET['APP_UID']) && isset($_GET['APP_NUMBER'])) { $oCase = new Cases(); $appUid = $oCase->getApplicationUIDByNumber(htmlspecialchars($_GET['APP_NUMBER'])); - if (is_null( $appUid )) { + if (is_null($appUid)) { throw new Exception(G::LoadTranslation('ID_CASE_DOES_NOT_EXISTS')); } } else { @@ -52,7 +52,7 @@ if (!isset($_GET['APP_UID']) && isset($_GET['APP_NUMBER'])) { if (!isset($_GET['DEL_INDEX'])) { $oCase = new Cases(); $delIndex = $oCase->getCurrentDelegation($appUid, $_SESSION['USER_LOGGED']); - if (is_null( $delIndex )) { + if (is_null($delIndex)) { throw new Exception(G::LoadTranslation('ID_CASE_IS_CURRENTLY_WITH_ANOTHER_USER')); } $_GET['DEL_INDEX'] = $delIndex; @@ -65,7 +65,7 @@ $tasUid = (isset($_GET['TAS_UID'])) ? $tasUid = htmlspecialchars($_GET['TAS_UID' $oCase = new Cases(); $conf = new Configurations(); -$oHeadPublisher = & headPublisher::getSingleton(); +$oHeadPublisher = &headPublisher::getSingleton(); $urlToRedirectAfterPause = 'casesListExtJs'; @@ -75,34 +75,34 @@ if ($licensedFeatures->verifyfeature('7qhYmF1eDJWcEdwcUZpT0k4S0xTRStvdz09')) { $pmGoogle = new PmGoogleApi(); if (array_key_exists('gmail', $_SESSION) && $_SESSION['gmail'] == 1 && $pmGoogle->getServiceGmailStatus()) { $_SESSION['gmail'] = 0; - $urlToRedirectAfterPause = '/sys'. $_SESSION['WORKSPACE'] .'/en/neoclassic/cases/cases_Open?APP_UID='.$_SESSION['APPLICATION'].'&DEL_INDEX='.$_SESSION['INDEX'].'&action=sent'; + $urlToRedirectAfterPause = '/sys' . $_SESSION['WORKSPACE'] . '/en/neoclassic/cases/cases_Open?APP_UID=' . $_SESSION['APPLICATION'] . '&DEL_INDEX=' . $_SESSION['INDEX'] . '&action=sent'; } } /*----------------------------------********---------------------------------*/ -$oHeadPublisher->assign( 'urlToRedirectAfterPause', $urlToRedirectAfterPause ); +$oHeadPublisher->assign('urlToRedirectAfterPause', $urlToRedirectAfterPause); -$oHeadPublisher->addExtJsScript( 'app/main', true ); -$oHeadPublisher->addExtJsScript( 'cases/open', true ); -$oHeadPublisher->assign( 'FORMATS', $conf->getFormats() ); +$oHeadPublisher->addExtJsScript('app/main', true); +$oHeadPublisher->addExtJsScript('cases/open', true); +$oHeadPublisher->assign('FORMATS', $conf->getFormats()); $uri = ''; foreach ($_GET as $k => $v) { $uri .= ($uri == '') ? "$k=$v" : "&$k=$v"; } -if( isset($_GET['action']) && ($_GET['action'] == 'jump') ) { +if (isset($_GET['action']) && ($_GET['action'] == 'jump')) { $oNewCase = new \ProcessMaker\BusinessModel\Cases(); //We need to get the last index OPEN or CLOSED (by Paused cases) //Set true because we need to check if the case is paused $delIndex = $oNewCase->getOneLastThread($appUid, true); - $case = $oCase->loadCase( $appUid, $delIndex, $_GET['action']); + $case = $oCase->loadCase($appUid, $delIndex, $_GET['action']); } else { - $case = $oCase->loadCase( $appUid, $delIndex ); + $case = $oCase->loadCase($appUid, $delIndex); } -if(isset($_GET['actionFromList']) && ($_GET['actionFromList'] === 'to_revise') ){ +if (isset($_GET['actionFromList']) && ($_GET['actionFromList'] === 'to_revise')) { $oSupervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor(); $caseCanBeReview = $oSupervisor->reviewCaseStatusForSupervisor($appUid, $delIndex); //Check if the case has the correct status for update the information from supervisor/review @@ -112,9 +112,9 @@ if(isset($_GET['actionFromList']) && ($_GET['actionFromList'] === 'to_revise') ) } else { //The supervisor can edit the information, the case are in TO_DO $script = 'cases_OpenToRevise?APP_UID=' . $appUid . '&DEL_INDEX=' . $delIndex . '&TAS_UID=' . $tasUid; - $oHeadPublisher->assign( 'treeToReviseTitle', G::loadtranslation( 'ID_STEP_LIST' ) ); + $oHeadPublisher->assign('treeToReviseTitle', G::loadtranslation('ID_STEP_LIST')); $casesPanelUrl = 'casesToReviseTreeContent?APP_UID=' . $appUid . '&DEL_INDEX=' . $delIndex; - $oHeadPublisher->assign( 'casesPanelUrl', $casesPanelUrl ); //translations + $oHeadPublisher->assign('casesPanelUrl', $casesPanelUrl); //translations echo "
"; } } else { @@ -133,24 +133,24 @@ while ($ds->next()) { $bpmnProjects[] = $row['PRJ_UID']; } $oStep = new Step(); -$oStep = $oStep->loadByProcessTaskPosition( $case['PRO_UID'], $case['TAS_UID'], 1 ); -$oHeadPublisher->assign( 'uri', $script . $uri ); -$oHeadPublisher->assign( '_APP_NUM', '#: ' . $case['APP_NUMBER'] ); -$oHeadPublisher->assign( '_PROJECT_TYPE', in_array($case['PRO_UID'], $bpmnProjects) ? 'bpmn' : 'classic' ); -$oHeadPublisher->assign( '_PRO_UID', $case['PRO_UID']); -$oHeadPublisher->assign( '_APP_UID', $appUid); -$oHeadPublisher->assign( '_ENV_CURRENT_DATE', $conf->getSystemDate( date( 'Y-m-d' ) ) ); -$oHeadPublisher->assign( '_ENV_CURRENT_DATE_NO_FORMAT', date( 'Y-m-d-h-i-A' ) ); -$oHeadPublisher->assign( 'idfirstform', is_null( $oStep ) ? '' : $oStep->getStepUidObj() ); -$oHeadPublisher->assign( 'appStatus', $case['APP_STATUS'] ); -$oHeadPublisher->assign( 'tbarGmail', $tBarGmail); +$oStep = $oStep->loadByProcessTaskPosition($case['PRO_UID'], $case['TAS_UID'], 1); +$oHeadPublisher->assign('uri', $script . $uri); +$oHeadPublisher->assign('_APP_NUM', '#: ' . $case['APP_NUMBER']); +$oHeadPublisher->assign('_PROJECT_TYPE', in_array($case['PRO_UID'], $bpmnProjects) ? 'bpmn' : 'classic'); +$oHeadPublisher->assign('_PRO_UID', $case['PRO_UID']); +$oHeadPublisher->assign('_APP_UID', $appUid); +$oHeadPublisher->assign('_ENV_CURRENT_DATE', $conf->getSystemDate(date('Y-m-d'))); +$oHeadPublisher->assign('_ENV_CURRENT_DATE_NO_FORMAT', date('Y-m-d-h-i-A')); +$oHeadPublisher->assign('idfirstform', is_null($oStep) ? '-1' : $oStep->getStepUidObj()); +$oHeadPublisher->assign('appStatus', $case['APP_STATUS']); +$oHeadPublisher->assign('tbarGmail', $tBarGmail); -if(!isset($_SESSION['APPLICATION']) || !isset($_SESSION['TASK']) || !isset($_SESSION['INDEX'])) { +if (!isset($_SESSION['APPLICATION']) || !isset($_SESSION['TASK']) || !isset($_SESSION['INDEX'])) { $_SESSION['PROCESS'] = $case['PRO_UID']; $_SESSION['APPLICATION'] = $case['APP_UID']; $_SESSION['TASK'] = $case['TAS_UID']; $_SESSION['INDEX'] = $case['DEL_INDEX']; } $_SESSION['actionCaseOptions'] = (isset($_REQUEST['action'])) ? $_REQUEST['action'] : ''; -G::RenderPage( 'publish', 'extJs' ); +G::RenderPage('publish', 'extJs'); diff --git a/workflow/engine/methods/cases/proxyNewCasesList.php b/workflow/engine/methods/cases/proxyNewCasesList.php index ae559eceb..1ae54a63a 100644 --- a/workflow/engine/methods/cases/proxyNewCasesList.php +++ b/workflow/engine/methods/cases/proxyNewCasesList.php @@ -30,6 +30,9 @@ try { $filters['sort'] = G::toUpper($filters['sort']); $openApplicationUid = (isset($_REQUEST['openApplicationUid']) && $_REQUEST['openApplicationUid'] != '') ? $_REQUEST['openApplicationUid'] : null; + global $RBAC; + $RBAC->allows(basename(__FILE__), $filters['action']); + //Define user when is reassign if ($filters['action'] == 'to_reassign') { if ($filters['user'] == '' ) { @@ -90,8 +93,11 @@ try { $filters['limit'] = (int)$filters['limit']; $filters['limit'] = abs($filters['limit']); + $conf = new Configurations(); + $formats = $conf->getFormats(); + $list->setUserDisplayFormat($formats['format']); + if ($filters['limit'] == 0) { - $conf = new Configurations(); $generalConfCasesList = $conf->getConfiguration('ENVIRONMENT_SETTINGS', ''); if (isset($generalConfCasesList['casesListRowNumber'])) { $filters['limit'] = (int)$generalConfCasesList['casesListRowNumber']; @@ -101,10 +107,11 @@ try { } else { $filters['limit'] = (int)$filters['limit']; } - + switch ($filters['sort']) { case 'APP_CURRENT_USER': - $filters['sort'] = 'DEL_CURRENT_USR_LASTNAME'; + //This value is format according to the userDisplayFormat, for this reason we will sent the UID + $filters['sort'] = 'USR_UID'; break; case 'DEL_TASK_DUE_DATE': $filters['sort'] = 'DEL_DUE_DATE'; @@ -113,7 +120,8 @@ try { $filters['sort'] = 'DEL_DELEGATE_DATE'; break; case 'APP_DEL_PREVIOUS_USER': - $filters['sort'] = 'DEL_DUE_DATE'; + //This value is format according to the userDisplayFormat, for this reason we will sent the UID + $filters['sort'] = 'DEL_PREVIOUS_USR_UID'; break; case 'DEL_CURRENT_TAS_TITLE': $filters['sort'] = 'APP_TAS_TITLE'; diff --git a/workflow/engine/methods/controls/varsAjax.php b/workflow/engine/methods/controls/varsAjax.php index e83f1d71f..906363903 100644 --- a/workflow/engine/methods/controls/varsAjax.php +++ b/workflow/engine/methods/controls/varsAjax.php @@ -35,7 +35,7 @@ $_REQUEST['sSymbol']= isset($_REQUEST["sSymbol"])?$_REQUEST["sSymbol"]:''; $_SERVER["QUERY_STRING"] = $filter->xssFilterHard($_SERVER["QUERY_STRING"]); -$html = 'Upload Variable'; +$html = '' . G::LoadTranslation('ID_SELECT_VARIABLE') . ''; $html .= '
'; $html .= '
'; $html .= ''; diff --git a/workflow/engine/methods/enterprise/addonsStore.php b/workflow/engine/methods/enterprise/addonsStore.php index b078b4d23..62b412c9c 100644 --- a/workflow/engine/methods/enterprise/addonsStore.php +++ b/workflow/engine/methods/enterprise/addonsStore.php @@ -9,7 +9,7 @@ $oHeadPublisher = &headPublisher::getSingleton(); if (isset($licenseManager->date) && is_array($licenseManager->date)) { $conf = new Configurations(); - if ( defined('SYS_SYS') && $conf->exists("ENVIRONMENT_SETTINGS")) { + if (!empty(config("system.workspace")) && $conf->exists("ENVIRONMENT_SETTINGS")) { $licenseManager->date['START'] = date("Y-m-d H:i:s", strtotime($licenseManager->date['HUMAN']['START'])); $licenseManager->date['END'] = date("Y-m-d H:i:s", strtotime($licenseManager->date['HUMAN']['END'])); $licenseManager->date['START'] = $conf->getSystemDate($licenseManager->date['START']); @@ -63,7 +63,7 @@ $oHeadPublisher->assign("supportStartDate", (isset($licenseManager->supportStart $oHeadPublisher->assign("supportEndDate", (isset($licenseManager->supportEndDate))? $licenseManager->supportEndDate : ''); $oHeadPublisher->assign("PROCESSMAKER_VERSION", System::getVersion()); -$oHeadPublisher->assign("PROCESSMAKER_URL", "/sys" . SYS_SYS . "/" . SYS_LANG . "/" . SYS_SKIN ); +$oHeadPublisher->assign("PROCESSMAKER_URL", "/sys" . config("system.workspace") . "/" . SYS_LANG . "/" . SYS_SKIN ); $oHeadPublisher->assign("SYS_SKIN", SYS_SKIN); $oHeadPublisher->assign("URL_PART_LOGIN", ((substr(SYS_SKIN, 0, 2) == "ux" && SYS_SKIN != "uxs")? "main/login" : "login/login")); $oHeadPublisher->assign("URL_PART_SETUP", EnterpriseUtils::getUrlPartSetup()); diff --git a/workflow/engine/methods/enterprise/addonsStoreAction.php b/workflow/engine/methods/enterprise/addonsStoreAction.php index 36a95c0e7..0172149e2 100644 --- a/workflow/engine/methods/enterprise/addonsStoreAction.php +++ b/workflow/engine/methods/enterprise/addonsStoreAction.php @@ -160,7 +160,7 @@ try { } /////// - $workspace = SYS_SYS; + $workspace = config("system.workspace"); $dbAdapter = DB_ADAPTER; $addon->setAddonState("download-start"); diff --git a/workflow/engine/methods/enterprise/enterprise.php b/workflow/engine/methods/enterprise/enterprise.php index 824b58bdc..7487de8d4 100644 --- a/workflow/engine/methods/enterprise/enterprise.php +++ b/workflow/engine/methods/enterprise/enterprise.php @@ -8,7 +8,7 @@ if (!defined("PATH_PM_ENTERPRISE")) { } if (!defined("PATH_DATA_SITE")) { - define("PATH_DATA_SITE", PATH_DATA . "sites/" . SYS_SYS . "/"); + define("PATH_DATA_SITE", PATH_DATA . "sites/" . config("system.workspace") . "/"); } set_include_path(PATH_PM_ENTERPRISE . PATH_SEPARATOR . get_include_path()); @@ -78,12 +78,10 @@ class enterprisePlugin extends PMPlugin unset($_SESSION["__EE_SW_PMLICENSEMANAGER__"]); /////// - $js = "window.open(\"/sys" . SYS_SYS . "/" . SYS_LANG . "/" . SYS_SKIN . "/setup/main?s=PLUGINS\", \"_top\", \"\");"; + $js = "window.open(\"/sys" . config("system.workspace") . "/" . SYS_LANG . "/" . SYS_SKIN . "/setup/main?s=PLUGINS\", \"_top\", \"\");"; if (substr(SYS_SKIN, 0, 2) == "ux" && SYS_SKIN != "uxs") { - //$js = "parent.window.location.href = \"/sys" . SYS_SYS . "/" . SYS_LANG . "/" . SYS_SKIN . "/setup/main_init?s=PLUGINS\";"; - //$js = "window.location.href = \"/sys" . SYS_SYS . "/" . SYS_LANG . "/" . SYS_SKIN . "/setup/pluginsImport\";"; - $js = "window.open(\"/sys" . SYS_SYS . "/" . SYS_LANG . "/" . SYS_SKIN . "/main\", \"_top\", \"\");"; + $js = "window.open(\"/sys" . config("system.workspace") . "/" . SYS_LANG . "/" . SYS_SKIN . "/main\", \"_top\", \"\");"; } /////// diff --git a/workflow/engine/methods/enterprise/processMakerAjax.php b/workflow/engine/methods/enterprise/processMakerAjax.php index e034d2ae6..d68088a97 100644 --- a/workflow/engine/methods/enterprise/processMakerAjax.php +++ b/workflow/engine/methods/enterprise/processMakerAjax.php @@ -63,7 +63,7 @@ function install($file) $context = stream_context_create($option); /////// - $fileData = @fopen(EnterpriseUtils::getUrlServerName() . "/sys" . SYS_SYS . "/" . SYS_LANG . "/" . SYS_SKIN . "/enterprise/services/processMakerUpgrade", "rb", false, $context); + $fileData = @fopen(EnterpriseUtils::getUrlServerName() . "/sys" . config("system.workspace") . "/" . SYS_LANG . "/" . SYS_SKIN . "/enterprise/services/processMakerUpgrade", "rb", false, $context); if ($fileData === false) { throw (new Exception("Could not open services url.")); diff --git a/workflow/engine/methods/login/authentication.php b/workflow/engine/methods/login/authentication.php index 906825422..2ca7b693b 100644 --- a/workflow/engine/methods/login/authentication.php +++ b/workflow/engine/methods/login/authentication.php @@ -146,7 +146,7 @@ try { $errLabel = G::LoadTranslation('ID_ACCOUNT') . ' "' . $usr . '" ' . G::LoadTranslation('ID_ACCOUNT_DISABLED_CONTACT_ADMIN'); } //Log failed authentications - $message = "| Many failed authentication attempts for USER: " . $usr . " | IP: " . G::getIpAddress() . " | WS: " . SYS_SYS; + $message = "| Many failed authentication attempts for USER: " . $usr . " | IP: " . G::getIpAddress() . " | WS: " . config("system.workspace"); $message .= " | BROWSER: " . $_SERVER['HTTP_USER_AGENT']; G::log($message, PATH_DATA, 'loginFailed.log'); @@ -171,7 +171,7 @@ try { } if (!isset( $_SESSION['WORKSPACE'] ) ) { - $_SESSION['WORKSPACE'] = SYS_SYS; + $_SESSION['WORKSPACE'] = config("system.workspace"); } //Execute the SSO Script from plugin @@ -246,7 +246,7 @@ try { $userTimeZone = $user->getUsrTimeZone(); if (trim($userTimeZone) == '') { - $arraySystemConfiguration = System::getSystemConfiguration('', '', SYS_SYS); + $arraySystemConfiguration = System::getSystemConfiguration('', '', config("system.workspace")); $userTimeZone = $arraySystemConfiguration['time_zone']; } @@ -407,7 +407,7 @@ try { die; } - $configS = System::getSystemConfiguration('', '', SYS_SYS); + $configS = System::getSystemConfiguration('', '', config("system.workspace")); $activeSession = isset($configS['session_block']) ? !(int)$configS['session_block']:true; if ($activeSession){ setcookie("PM-TabPrimary", 101010010, time() + (24 * 60 * 60), '/'); diff --git a/workflow/engine/methods/login/authenticationSso.php b/workflow/engine/methods/login/authenticationSso.php index efb6935a5..9ca668a9b 100644 --- a/workflow/engine/methods/login/authenticationSso.php +++ b/workflow/engine/methods/login/authenticationSso.php @@ -20,7 +20,7 @@ try { } header( - 'Location: /sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . + 'Location: /sys' . config("system.workspace") . '/' . SYS_LANG . '/' . SYS_SKIN . '/login/login' . (($u != '')? '?u=' . $u : '') ); @@ -40,7 +40,7 @@ try { } /*----------------------------------********---------------------------------*/ - $arraySystemConfiguration = System::getSystemConfiguration('', '', SYS_SYS); + $arraySystemConfiguration = System::getSystemConfiguration('', '', config("system.workspace")); //Set User Time Zone $user = UsersPeer::retrieveByPK($userUid); diff --git a/workflow/engine/methods/login/login.php b/workflow/engine/methods/login/login.php index 8faa2997c..58abe4dc6 100644 --- a/workflow/engine/methods/login/login.php +++ b/workflow/engine/methods/login/login.php @@ -188,9 +188,9 @@ session_start(); session_regenerate_id(); if (PHP_VERSION < 5.2) { - setcookie("workspaceSkin", SYS_SKIN, time() + (24 * 60 * 60), "/sys" . SYS_SYS, "; HttpOnly"); + setcookie("workspaceSkin", SYS_SKIN, time() + (24 * 60 * 60), "/sys" . config("system.workspace"), "; HttpOnly"); } else { - setcookie("workspaceSkin", SYS_SKIN, time() + (24 * 60 * 60), "/sys" . SYS_SYS, null, false, true); + setcookie("workspaceSkin", SYS_SKIN, time() + (24 * 60 * 60), "/sys" . config("system.workspace"), null, false, true); } if (strlen($msg) > 0) { @@ -361,7 +361,7 @@ $flagForgotPassword = isset($oConf->aConfig['login_enableForgotPassword']) setcookie('PM-Warning', trim(G::LoadTranslation('ID_BLOCKER_MSG'), '*'), time() + (24 * 60 * 60), SYS_URI); -$configS = System::getSystemConfiguration('', '', SYS_SYS); +$configS = System::getSystemConfiguration('', '', config("system.workspace")); $activeSession = isset($configS['session_block']) ? !(int)$configS['session_block'] : true; if ($activeSession) { setcookie("PM-TabPrimary", 101010010, time() + (24 * 60 * 60), '/'); diff --git a/workflow/engine/methods/login/retrivePassword.php b/workflow/engine/methods/login/retrivePassword.php index 842bc42f9..89b281e94 100644 --- a/workflow/engine/methods/login/retrivePassword.php +++ b/workflow/engine/methods/login/retrivePassword.php @@ -9,11 +9,12 @@ $rbacUser = new RbacUsers(); $user = new Users(); $data['USR_USERNAME'] = strip_tags($data['USR_USERNAME']); $userData = $rbacUser->getByUsername($data['USR_USERNAME']); +$userExists = $userData === false ? false : true; -if ($userData['USR_EMAIL'] != '' && $userData['USR_EMAIL'] === $data['USR_EMAIL'] && ($userData['USR_AUTH_TYPE'] === '' || $userData['USR_AUTH_TYPE'] == 'MYSQL') ) { +if ($userExists === true && $userData['USR_EMAIL'] != '' && $userData['USR_EMAIL'] === $data['USR_EMAIL'] && ($userData['USR_AUTH_TYPE'] === '' || $userData['USR_AUTH_TYPE'] == 'MYSQL')) { $aSetup = System::getEmailConfiguration(); if (count($aSetup) == 0 || !isset($aSetup['MESS_ENGINE'])) { - G::SendTemporalMessage ('ID_EMAIL_ENGINE_IS_NOT_ENABLED', "warning"); + G::SendTemporalMessage('ID_EMAIL_ENGINE_IS_NOT_ENABLED', "warning"); G::header('location: forgotPassword'); die; } @@ -28,17 +29,16 @@ if ($userData['USR_EMAIL'] != '' && $userData['USR_EMAIL'] === $data['USR_EMAIL' $aUserPropertyData['USR_LOGGED_NEXT_TIME'] = 1; $oUserProperty = $oUserProperty->update($aUserPropertyData); } - /* **Save after sending the mail - $rbacUser->update($aData); - $user->update($aData); - */ + if (!isset($sFrom)) { + $sFrom = ''; + } $sFrom = G::buildFrom($aSetup, $sFrom); - $sSubject = G::LoadTranslation('ID_RESET_PASSWORD').' - ProcessMaker' ; + $sSubject = G::LoadTranslation('ID_RESET_PASSWORD') . ' - ProcessMaker'; $msg = '

ProcessMaker Forgot password Service

'; - $msg .='

'.G::LoadTranslation('ID_YOUR_USERMANE_IS').' : '.$userData['USR_USERNAME'].'

'; - $msg .='

'.G::LoadTranslation('ID_YOUR_PASSWORD_IS').' : '.$newPass.'

'; + $msg .= '

' . G::LoadTranslation('ID_YOUR_USERMANE_IS') . ' : ' . $userData['USR_USERNAME'] . '

'; + $msg .= '

' . G::LoadTranslation('ID_YOUR_PASSWORD_IS') . ' : ' . $newPass . '

'; switch ($aSetup['MESS_ENGINE']) { case 'MAIL': $engine = G::LoadTranslation('ID_MESS_ENGINE_TYPE_1'); @@ -53,10 +53,10 @@ if ($userData['USR_EMAIL'] != '' && $userData['USR_EMAIL'] === $data['USR_EMAIL' $sBody = "
- +
$msg
-

This Business Process is powered by ProcessMaker ver. ".System::getVersion().".
+

This Business Process is powered by ProcessMaker ver. " . System::getVersion() . ".
www.processmaker.com
"; @@ -64,20 +64,20 @@ if ($userData['USR_EMAIL'] != '' && $userData['USR_EMAIL'] === $data['USR_EMAIL' $oSpool->setConfig($aSetup); $oSpool->create(array( - 'msg_uid' => '', - 'app_uid' => '', - 'del_index' => 0, - 'app_msg_type' => 'TEST', - 'app_msg_subject' => $sSubject, - 'app_msg_from' => $sFrom, - 'app_msg_to' => $data['USR_EMAIL'], - 'app_msg_body' => $sBody, - 'app_msg_cc' => '', - 'app_msg_bcc' => '', - 'app_msg_attach' => '', + 'msg_uid' => '', + 'app_uid' => '', + 'del_index' => 0, + 'app_msg_type' => 'TEST', + 'app_msg_subject' => $sSubject, + 'app_msg_from' => $sFrom, + 'app_msg_to' => $data['USR_EMAIL'], + 'app_msg_body' => $sBody, + 'app_msg_cc' => '', + 'app_msg_bcc' => '', + 'app_msg_attach' => '', 'app_msg_template' => '', - 'app_msg_status' => 'pending', - 'app_msg_attach'=>'' + 'app_msg_status' => 'pending', + 'app_msg_attach' => '' )); try { @@ -94,12 +94,11 @@ if ($userData['USR_EMAIL'] != '' && $userData['USR_EMAIL'] === $data['USR_EMAIL' G::SendTemporalMessage($e->getMessage(), "warning", 'string'); } } else { - if ($userData['USR_AUTH_TYPE'] === '' || $userData['USR_AUTH_TYPE'] === 'MYSQL') { - $msg = G::LoadTranslation('ID_USER') . ' ' . htmlentities($data['USR_USERNAME'], ENT_QUOTES, 'UTF-8') . ' '. G::LoadTranslation('ID_IS_NOT_REGISTERED'); - } else { + $msg = G::LoadTranslation('ID_THE_USERNAME_EMAIL_IS_INCORRECT'); + if ($userData !== false && $userData['USR_AUTH_TYPE'] !== '' && $userData['USR_EMAIL'] === $data['USR_EMAIL']) { $msg = G::LoadTranslation('ID_USER_NOT_FUNCTIONALITY'); } - G::SendTemporalMessage ($msg, "warning", 'string'); + G::SendTemporalMessage($msg, "warning", 'string'); G::header('location: forgotPassword'); } diff --git a/workflow/engine/methods/mails/emailList.php b/workflow/engine/methods/mails/emailList.php index a7957d8a8..e3c4e2ef6 100644 --- a/workflow/engine/methods/mails/emailList.php +++ b/workflow/engine/methods/mails/emailList.php @@ -1,30 +1,8 @@ . - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - */ - global $RBAC; use ProcessMaker\Plugins\PluginRegistry; +use ProcessMaker\BusinessModel\Process as BmProcess; $resultRbac = $RBAC->requirePermissions('PM_SETUP_ADVANCE', 'PM_SETUP_LOGS'); if (!$resultRbac) { @@ -53,7 +31,8 @@ $status = array( $pluginRegistry = PluginRegistry::loadSingleton(); $flagER = $pluginRegistry->isEnable('externalRegistration') ? 1 : 0; -$processes = getProcessArray($userUid); +$process = new BmProcess(); +$processes = $process->getProcessList(); $G_PUBLISH = new Publisher(); @@ -65,32 +44,5 @@ $oHeadPublisher->assign('statusValues', $status); $oHeadPublisher->assign('processValues', $processes); $oHeadPublisher->assign('flagER', $flagER); -function getProcessArray($userUid) { - global $oAppCache; - require_once("classes/model/AppCacheView.php"); - - $processes = array(); - $processes[] = array('', G::LoadTranslation('ID_ALL_PROCESS')); - - $cProcess = new Criteria('workflow'); - $cProcess->clearSelectColumns(); - $cProcess->addSelectColumn(AppCacheViewPeer::PRO_UID); - $cProcess->addSelectColumn(AppCacheViewPeer::APP_PRO_TITLE); - $cProcess->setDistinct(AppCacheViewPeer::PRO_UID); - - $cProcess->addAscendingOrderByColumn(AppCacheViewPeer::APP_PRO_TITLE); - - $oDataset = AppCacheViewPeer::doSelectRS($cProcess); - $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $oDataset->next(); - - while ($aRow = $oDataset->getRow()) { - $processes[] = array($aRow['PRO_UID'], $aRow['APP_PRO_TITLE']); - $oDataset->next(); - } - - return $processes; -} - G::RenderPage( 'publish', 'extJs' ); diff --git a/workflow/engine/methods/mails/emailsAjax.php b/workflow/engine/methods/mails/emailsAjax.php index 62bdcd467..8643248d4 100644 --- a/workflow/engine/methods/mails/emailsAjax.php +++ b/workflow/engine/methods/mails/emailsAjax.php @@ -30,82 +30,14 @@ switch ($req) { $dateTo = isset($_POST["dateTo"]) ? substr($_POST["dateTo"], 0, 10) : ""; $filterBy = (isset($_REQUEST['filterBy'])) ? $_REQUEST['filterBy'] : 'ALL'; - $response = new stdclass(); - $response->status = 'OK'; - - $delimiter = DBAdapter::getStringDelimiter(); - - $criteria = new Criteria(); - $criteria->addJoin(AppMessagePeer::APP_UID, ApplicationPeer::APP_UID, Criteria::LEFT_JOIN); - - if ($emailStatus != '') { - $criteria->add(AppMessagePeer::APP_MSG_STATUS, $emailStatus); - } - if ($proUid != '') { - $criteria->add(ApplicationPeer::PRO_UID, $proUid); - } - + //Review the External Registration $arrayType = []; - $pluginRegistry = PluginRegistry::loadSingleton(); $flagEr = $pluginRegistry->isEnable('externalRegistration') ? 1 : 0; - if ($flagEr == 0) { $arrayType[] = 'EXTERNAL_REGISTRATION'; } - switch ($filterBy) { - case 'CASES': - $criteria->add(AppMessagePeer::APP_MSG_TYPE, ['TEST', 'EXTERNAL_REGISTRATION'], Criteria::NOT_IN); - break; - case 'TEST': - $criteria->add(AppMessagePeer::APP_MSG_TYPE, 'TEST', Criteria::EQUAL); - break; - case 'EXTERNAL-REGISTRATION': - $criteria->add(AppMessagePeer::APP_MSG_TYPE, 'EXTERNAL_REGISTRATION', Criteria::EQUAL); - break; - default: - if (!empty($arrayType)) { - $criteria->add(AppMessagePeer::APP_MSG_TYPE, $arrayType, Criteria::NOT_IN); - } - break; - } - - if ($dateFrom != "") { - if ($dateTo != "") { - if ($dateFrom == $dateTo) { - $dateSame = $dateFrom; - $dateFrom = $dateSame . " 00:00:00"; - $dateTo = $dateSame . " 23:59:59"; - } else { - $dateFrom = $dateFrom . " 00:00:00"; - $dateTo = $dateTo . " 23:59:59"; - } - - $criteria->add($criteria->getNewCriterion(AppMessagePeer::APP_MSG_DATE, $dateFrom, Criteria::GREATER_EQUAL)->addAnd($criteria->getNewCriterion(AppMessagePeer::APP_MSG_DATE, $dateTo, Criteria::LESS_EQUAL))); - } else { - $dateFrom = $dateFrom . " 00:00:00"; - $criteria->add(AppMessagePeer::APP_MSG_DATE, $dateFrom, Criteria::GREATER_EQUAL); - } - } elseif ($dateTo != "") { - $dateTo = $dateTo . " 23:59:59"; - $criteria->add(AppMessagePeer::APP_MSG_DATE, $dateTo, Criteria::LESS_EQUAL); - } - - //Number records total - $criteriaCount = clone $criteria; - - $criteriaCount->clearSelectColumns(); - $criteriaCount->addSelectColumn('COUNT(' . AppMessagePeer::APP_MSG_UID . ') AS NUM_REC'); - - $rsCriteriaCount = AppMessagePeer::doSelectRS($criteriaCount); - $rsCriteriaCount->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - $resultCount = $rsCriteriaCount->next(); - $rowCount = $rsCriteriaCount->getRow(); - - $totalCount = (int)($rowCount['NUM_REC']); - $criteria = new Criteria(); $criteria->addSelectColumn(AppMessagePeer::APP_MSG_UID); $criteria->addSelectColumn(AppMessagePeer::APP_UID); @@ -113,7 +45,6 @@ switch ($req) { $criteria->addSelectColumn(AppMessagePeer::APP_MSG_TYPE); $criteria->addSelectColumn(AppMessagePeer::APP_MSG_SUBJECT); $criteria->addSelectColumn(AppMessagePeer::APP_MSG_FROM); - $criteria->addSelectColumn(AppMessagePeer::APP_MSG_TO); $criteria->addSelectColumn(AppMessagePeer::APP_MSG_BODY); $criteria->addSelectColumn(AppMessagePeer::APP_MSG_STATUS); @@ -121,18 +52,24 @@ switch ($req) { $criteria->addSelectColumn(AppMessagePeer::APP_MSG_SEND_DATE); $criteria->addSelectColumn(AppMessagePeer::APP_MSG_SHOW_MESSAGE); $criteria->addSelectColumn(AppMessagePeer::APP_MSG_ERROR); - $criteria->addSelectColumn(ApplicationPeer::PRO_UID); + $criteria->addSelectColumn(ApplicationPeer::APP_TITLE); $criteria->addSelectColumn(ApplicationPeer::APP_NUMBER); $criteria->addSelectColumn(ProcessPeer::PRO_TITLE); + $criteria->addSelectColumn(TaskPeer::TAS_TITLE); + $criteria->addJoin(AppMessagePeer::APP_UID, ApplicationPeer::APP_UID, Criteria::LEFT_JOIN); + $criteria->addJoin(ApplicationPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN); + $criteria->addJoin(AppMessagePeer::TAS_ID, TaskPeer::TAS_ID, Criteria::LEFT_JOIN); - if ($emailStatus != '') { + //Status can be: All, Participated, Pending + if (!empty($emailStatus)) { $criteria->add(AppMessagePeer::APP_MSG_STATUS, $emailStatus); } - if ($proUid != '') { + //Process uid + if (!empty($proUid)) { $criteria->add(ApplicationPeer::PRO_UID, $proUid); } - + //Filter by can be: All, Cases, Test switch ($filterBy) { case 'CASES': $criteria->add(AppMessagePeer::APP_MSG_TYPE, ['TEST', 'EXTERNAL_REGISTRATION'], Criteria::NOT_IN); @@ -149,29 +86,30 @@ switch ($req) { } break; } - - if ($dateFrom != "") { - if ($dateTo != "") { - if ($dateFrom == $dateTo) { - $dateSame = $dateFrom; - $dateFrom = $dateSame . " 00:00:00"; - $dateTo = $dateSame . " 23:59:59"; - } else { - $dateFrom = $dateFrom . " 00:00:00"; - $dateTo = $dateTo . " 23:59:59"; - } - - $criteria->add($criteria->getNewCriterion(AppMessagePeer::APP_MSG_DATE, $dateFrom, Criteria::GREATER_EQUAL)->addAnd($criteria->getNewCriterion(AppMessagePeer::APP_MSG_DATE, $dateTo, Criteria::LESS_EQUAL))); - } else { - $dateFrom = $dateFrom . " 00:00:00"; + //Date from and to + if (!empty($dateFrom) && !empty($dateTo)) { + $criteria->add($criteria->getNewCriterion(AppMessagePeer::APP_MSG_DATE, $dateFrom, Criteria::GREATER_EQUAL)->addAnd($criteria->getNewCriterion(AppMessagePeer::APP_MSG_DATE, $dateTo, Criteria::LESS_EQUAL))); + } else { + if (!empty($dateFrom)) { $criteria->add(AppMessagePeer::APP_MSG_DATE, $dateFrom, Criteria::GREATER_EQUAL); } - } elseif ($dateTo != "") { - $dateTo = $dateTo . " 23:59:59"; - $criteria->add(AppMessagePeer::APP_MSG_DATE, $dateTo, Criteria::LESS_EQUAL); + if (!empty($dateTo)) { + $dateTo = $dateTo . " 23:59:59"; + $criteria->add(AppMessagePeer::APP_MSG_DATE, $dateTo, Criteria::LESS_EQUAL); + } } - if ($sort != '') { + //Number records total + $criteriaCount = clone $criteria; + $criteriaCount->clearSelectColumns(); + $criteriaCount->addSelectColumn('COUNT(' . AppMessagePeer::APP_MSG_UID . ') AS NUM_REC'); + $rsCriteriaCount = AppMessagePeer::doSelectRS($criteriaCount); + $rsCriteriaCount->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $resultCount = $rsCriteriaCount->next(); + $rowCount = $rsCriteriaCount->getRow(); + $totalCount = (int)($rowCount['NUM_REC']); + + if (!empty($sort)) { if (!in_array($sort, AppMessagePeer::getFieldNames(BasePeer::TYPE_FIELDNAME))) { throw new Exception(G::LoadTranslation('ID_INVALID_VALUE_FOR', array('$sort'))); } @@ -183,15 +121,11 @@ switch ($req) { } else { $oCriteria->addDescendingOrderByColumn(AppMessagePeer::APP_MSG_SEND_DATE); } - if ($limit != '') { + if (!empty($limit)) { $criteria->setLimit($limit); $criteria->setOffset($start); } - $criteria->addJoin(AppMessagePeer::APP_UID, ApplicationPeer::APP_UID); - $criteria->addJoin(ApplicationPeer::PRO_UID, ProcessPeer::PRO_UID); - - $result = AppMessagePeer::doSelectRS($criteria); $result->setFetchmode(ResultSet::FETCHMODE_ASSOC); $data = Array(); @@ -209,48 +143,15 @@ switch ($req) { if ($row['DEL_INDEX'] != 0) { $index = $row['DEL_INDEX']; } - - $criteria = new Criteria(); - - $criteria->addSelectColumn(AppCacheViewPeer::APP_TITLE); - $criteria->addSelectColumn(AppCacheViewPeer::APP_TAS_TITLE); - $criteria->add(AppCacheViewPeer::APP_UID, $row['APP_UID'], Criteria::EQUAL); - $criteria->add(AppCacheViewPeer::DEL_INDEX, $index, Criteria::EQUAL); - - $resultCacheView = AppCacheViewPeer::doSelectRS($criteria); - $resultCacheView->setFetchmode(ResultSet::FETCHMODE_ASSOC); - - $row['APP_TITLE'] = '-'; - - while ($resultCacheView->next()) { - $rowCacheView = $resultCacheView->getRow(); - $row['APP_TITLE'] = $rowCacheView['APP_TITLE']; - $row['TAS_TITLE'] = $rowCacheView['APP_TAS_TITLE']; - } - if ($row['DEL_INDEX'] == 0) { $row['TAS_TITLE'] = $tasTitleDefault; } break; - case 'TEST': - $row['PRO_UID'] = ''; - $row['APP_NUMBER'] = ''; - $row['PRO_TITLE'] = ''; - $row['APP_TITLE'] = ''; - $row['TAS_TITLE'] = ''; - break; - case 'EXTERNAL-REGISTRATION': - $row['PRO_UID'] = ''; - $row['APP_NUMBER'] = ''; - $row['PRO_TITLE'] = ''; - $row['APP_TITLE'] = ''; - $row['TAS_TITLE'] = ''; - break; } $data[] = $row; } - $response = array(); + $response = []; $response['totalCount'] = $totalCount; $response['data'] = $data; die(G::json_encode($response)); diff --git a/workflow/engine/methods/oauth2/grant.php b/workflow/engine/methods/oauth2/grant.php index 6d2ab8547..0fa32f861 100644 --- a/workflow/engine/methods/oauth2/grant.php +++ b/workflow/engine/methods/oauth2/grant.php @@ -9,7 +9,7 @@ if (! empty($_GET['error'])) { $http = G::is_https() ? 'https' : 'http'; $host = $_SERVER['SERVER_NAME'] . ($_SERVER['SERVER_PORT'] != '80' ? ':' . $_SERVER['SERVER_PORT'] : ''); -$endpoint = sprintf('%s://%s/%s/oauth2/token', $http, $host, SYS_SYS); +$endpoint = sprintf('%s://%s/%s/oauth2/token', $http, $host, config("system.workspace")); $code = empty($_GET['code']) ? 'NN' : $_GET['code']; $clientId = 'x-pm-local-client'; diff --git a/workflow/engine/methods/processes/consolidated.php b/workflow/engine/methods/processes/consolidated.php index 82d1692bb..ac7840550 100644 --- a/workflow/engine/methods/processes/consolidated.php +++ b/workflow/engine/methods/processes/consolidated.php @@ -19,7 +19,7 @@ class AdditionalTablesConsolidated extends AdditionalTables $sClassName = $this->getPHPName($sTableName); } - $sPath = PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP; + $sPath = PATH_DB . config("system.workspace") . PATH_SEP . 'classes' . PATH_SEP; if (!file_exists($sPath)) { G::mk_dir($sPath); G::mk_dir($sPath . 'map'); @@ -626,7 +626,7 @@ class ajax_con extends WebResource $oAdditionalTables->createPropelClasses($tableName, $sClassName, $aFieldsClases, $sTasUid); } else { - $sPath = PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP; + $sPath = PATH_DB . config("system.workspace") . PATH_SEP . 'classes' . PATH_SEP; @unlink($sPath . $sClassName . '.php'); @unlink($sPath . $sClassName . 'Peer.php'); @unlink($sPath . PATH_SEP . 'map' . PATH_SEP . $sClassName . 'MapBuilder.php'); diff --git a/workflow/engine/methods/processes/mainInit.php b/workflow/engine/methods/processes/mainInit.php index ef7697246..2253624e4 100644 --- a/workflow/engine/methods/processes/mainInit.php +++ b/workflow/engine/methods/processes/mainInit.php @@ -92,7 +92,7 @@ $oHeadPublisher->assign("arrayContextMenuOptionPlugin", $arrayContextMenuOptionP $oHeadPublisher->assign('extJsViewState', $oHeadPublisher->getExtJsViewState()); $designer = new Designer(); -$oHeadPublisher->assign('SYS_SYS', SYS_SYS); +$oHeadPublisher->assign('SYS_SYS', config("system.workspace")); $oHeadPublisher->assign('SYS_LANG', SYS_LANG); $oHeadPublisher->assign('SYS_SKIN', SYS_SKIN); $oHeadPublisher->assign('HTTP_SERVER_HOSTNAME', System::getHttpServerHostnameRequestsFrontEnd()); diff --git a/workflow/engine/methods/processes/processesList.php b/workflow/engine/methods/processes/processesList.php index fc441d0e8..347120732 100644 --- a/workflow/engine/methods/processes/processesList.php +++ b/workflow/engine/methods/processes/processesList.php @@ -33,8 +33,6 @@ $oProcess = new Process(); $oProcess->dir = $dir; $oProcess->sort = $sort; -//$memcache = & PMmemcached::getSingleton( SYS_SYS ); - $memkey = 'no memcache'; $memcacheUsed = 'not used'; $totalCount = 0; diff --git a/workflow/engine/methods/processes/processes_Ajax.php b/workflow/engine/methods/processes/processes_Ajax.php index d7bb2c1ef..15d991765 100644 --- a/workflow/engine/methods/processes/processes_Ajax.php +++ b/workflow/engine/methods/processes/processes_Ajax.php @@ -189,13 +189,13 @@ try { $filter = new InputFilter(); $form = $_REQUEST; - $filePath = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "public" . PATH_SEP . $form['PRO_UID'] . PATH_SEP . $form['FILENAME']; + $filePath = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP . "public" . PATH_SEP . $form['PRO_UID'] . PATH_SEP . $form['FILENAME']; if (file_exists($filePath)) { unlink($filter->validateInput($filePath, 'path')); $webEntry = new \ProcessMaker\BusinessModel\WebEntry(); $webEntry->deleteClassic($form['PRO_UID'], $filePath); } - $filePath = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "public" . PATH_SEP . $form['PRO_UID'] . PATH_SEP . str_replace(".php", "Post", $form['FILENAME']) . ".php"; + $filePath = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP . "public" . PATH_SEP . $form['PRO_UID'] . PATH_SEP . str_replace(".php", "Post", $form['FILENAME']) . ".php"; if (file_exists($filePath)) { unlink($filter->validateInput($filePath, 'path')); } @@ -900,8 +900,8 @@ try { $resultArray = array(); $proUid = isset($_REQUEST['PRO_UID']) ? $_REQUEST['PRO_UID'] : ''; $dynUid = isset($_REQUEST['DYN_UID']) ? $_REQUEST['DYN_UID'] : ''; - if (is_file(PATH_DATA . '/sites/' . SYS_SYS . '/xmlForms/' . $proUid . '/' . $dynUid . '.xml') && filesize(PATH_DATA . '/sites/' . SYS_SYS . '/xmlForms/' . $proUid . '/' . $dynUid . '.xml') > 0) { - $dyn = new DynaformHandler(PATH_DATA . '/sites/' . SYS_SYS . '/xmlForms/' . $proUid . '/' . $dynUid . '.xml'); + if (is_file(PATH_DATA . '/sites/' . config("system.workspace") . '/xmlForms/' . $proUid . '/' . $dynUid . '.xml') && filesize(PATH_DATA . '/sites/' . config("system.workspace") . '/xmlForms/' . $proUid . '/' . $dynUid . '.xml') > 0) { + $dyn = new DynaformHandler(PATH_DATA . '/sites/' . config("system.workspace") . '/xmlForms/' . $proUid . '/' . $dynUid . '.xml'); $dynaformFields[] = $dyn->getFields(); } foreach ($dynaformFields as $aDynFormFields) { diff --git a/workflow/engine/methods/processes/processes_DownloadFile.php b/workflow/engine/methods/processes/processes_DownloadFile.php index fee9c9c9b..68305d1c1 100644 --- a/workflow/engine/methods/processes/processes_DownloadFile.php +++ b/workflow/engine/methods/processes/processes_DownloadFile.php @@ -6,7 +6,7 @@ if (!isset($_GET["file_hash"])) { } $httpStream = new \ProcessMaker\Util\IO\HttpStream(); -$outputDir = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP; +$outputDir = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP; $fileName = urldecode(base64_decode($_GET["file_hash"])); $processFile = $outputDir . $fileName; diff --git a/workflow/engine/methods/processes/processes_Export.php b/workflow/engine/methods/processes/processes_Export.php index 99c248bfc..f4fd9a6c3 100644 --- a/workflow/engine/methods/processes/processes_Export.php +++ b/workflow/engine/methods/processes/processes_Export.php @@ -24,7 +24,7 @@ use ProcessMaker\Util\Common; $response = new StdClass(); -$outputDir = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP; +$outputDir = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP; try { if(empty($_GET)){ diff --git a/workflow/engine/methods/processes/processes_GetFile.php b/workflow/engine/methods/processes/processes_GetFile.php index 7698c3d75..685519820 100644 --- a/workflow/engine/methods/processes/processes_GetFile.php +++ b/workflow/engine/methods/processes/processes_GetFile.php @@ -29,4 +29,4 @@ $file .= $extension; if (file_exists($directory . $file)) { G::streamFile($directory . $file, true); -} \ No newline at end of file +} diff --git a/workflow/engine/methods/processes/processes_Import_Ajax.php b/workflow/engine/methods/processes/processes_Import_Ajax.php index 4b8609776..d4e7d84a1 100644 --- a/workflow/engine/methods/processes/processes_Import_Ajax.php +++ b/workflow/engine/methods/processes/processes_Import_Ajax.php @@ -70,7 +70,7 @@ if (PMLicensedFeatures::getSingleton()->verifyfeature("B0oWlBLY3hHdWY0YUNpZEtFQm if (!empty($arrayTrigger)) { - $cs = new CodeScanner(SYS_SYS); + $cs = new CodeScanner(config("system.workspace")); $strFoundDisabledCode = ""; diff --git a/workflow/engine/methods/processes/processes_webEntryGenerate.php b/workflow/engine/methods/processes/processes_webEntryGenerate.php index 1767fcf2f..7bce76c1b 100644 --- a/workflow/engine/methods/processes/processes_webEntryGenerate.php +++ b/workflow/engine/methods/processes/processes_webEntryGenerate.php @@ -68,8 +68,8 @@ try { $pluginTpl = PATH_CORE . 'templates' . PATH_SEP . 'processes' . PATH_SEP . 'webentryPost.tpl'; $template = new TemplatePower( $pluginTpl ); $template->prepare(); - $template->assign( 'wsdlUrl', $http . $_SERVER['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/wsdl2' ); - $template->assign( 'wsUploadUrl', $http . $_SERVER['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/upload' ); + $template->assign( 'wsdlUrl', $http . $_SERVER['HTTP_HOST'] . '/sys' . config("system.workspace") . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/wsdl2' ); + $template->assign( 'wsUploadUrl', $http . $_SERVER['HTTP_HOST'] . '/sys' . config("system.workspace") . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/upload' ); $template->assign( 'processUid', $sPRO_UID ); $template->assign( 'dynaformUid', $sDYNAFORM ); $template->assign( 'taskUid', $sTASKS ); @@ -88,7 +88,7 @@ try { $template->assign( 'dynaform', $dynTitle ); $template->assign( 'timestamp', date( 'l jS \of F Y h:i:s A' ) ); - $template->assign( 'ws', SYS_SYS ); + $template->assign( 'ws', config("system.workspace") ); $template->assign( 'version', System::getVersion() ); $fileName = $pathProcess . $dynTitle . 'Post.php'; @@ -134,13 +134,13 @@ try { $aDataEvent['EVN_CONDITIONS'] = $sWS_USER; $output = $oEvent->update( $aDataEvent ); //Show link - $link = $http . $_SERVER['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/' . $sPRO_UID . '/' . $dynTitle . '.php'; + $link = $http . $_SERVER['HTTP_HOST'] . '/sys' . config("system.workspace") . '/' . SYS_LANG . '/' . SYS_SKIN . '/' . $sPRO_UID . '/' . $dynTitle . '.php'; print $link; //print "\n $link "; } else { $G_FORM = new Form( $sPRO_UID . '/' . $sDYNAFORM, PATH_DYNAFORM, SYS_LANG, false ); - $G_FORM->action = $http . $_SERVER['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/cases_StartExternal.php'; + $G_FORM->action = $http . $_SERVER['HTTP_HOST'] . '/sys' . config("system.workspace") . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/cases_StartExternal.php'; $scriptCode = ''; $scriptCode = $G_FORM->render( PATH_CORE . 'templates/' . 'xmlform' . '.html', $scriptCode ); @@ -158,7 +158,7 @@ try { $template->assign("URL_MABORAK_JS", G::browserCacheFilesUrl("/js/maborak/core/maborak.js")); $template->assign("URL_TRANSLATION_ENV_JS", G::browserCacheFilesUrl("/jscore/labels/" . SYS_LANG . ".js")); $template->assign("siteUrl", $http . $_SERVER["HTTP_HOST"]); - $template->assign("sysSys", SYS_SYS); + $template->assign("sysSys", config("system.workspace")); $template->assign("sysLang", SYS_LANG); $template->assign("sysSkin", SYS_SKIN); $template->assign("processUid", $sPRO_UID); diff --git a/workflow/engine/methods/processes/processes_webEntryValidate.php b/workflow/engine/methods/processes/processes_webEntryValidate.php index bffe4fa91..5f8df8d22 100644 --- a/workflow/engine/methods/processes/processes_webEntryValidate.php +++ b/workflow/engine/methods/processes/processes_webEntryValidate.php @@ -29,7 +29,7 @@ if (G::is_https()) { $http = 'http://'; } -$endpoint = $http . $_SERVER['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/wsdl2'; +$endpoint = $http . $_SERVER['HTTP_HOST'] . '/sys' . config("system.workspace") . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/wsdl2'; $client = new SoapClient( $endpoint, $streamContext ); $user = $sWS_USER; diff --git a/workflow/engine/methods/processes/webEntry_Val_Assig.php b/workflow/engine/methods/processes/webEntry_Val_Assig.php index a5230d349..c1b0ec0ea 100644 --- a/workflow/engine/methods/processes/webEntry_Val_Assig.php +++ b/workflow/engine/methods/processes/webEntry_Val_Assig.php @@ -14,7 +14,7 @@ if (G::is_https()) else $http = 'http://'; -$endpoint = $http . $_SERVER['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/wsdl2'; +$endpoint = $http . $_SERVER['HTTP_HOST'] . '/sys' . config("system.workspace") . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/wsdl2'; @$client = new SoapClient( $endpoint ); $oTask = new Task(); diff --git a/workflow/engine/methods/services/ActionsByEmail.php b/workflow/engine/methods/services/ActionsByEmail.php index 0b74dd7f2..2b45ca043 100644 --- a/workflow/engine/methods/services/ActionsByEmail.php +++ b/workflow/engine/methods/services/ActionsByEmail.php @@ -29,11 +29,11 @@ if (isset($_GET['BROWSER_TIME_ZONE_OFFSET'])) { throw new Exception('The parameter DEL_INDEX is empty.'); } - $_REQUEST['APP_UID'] = G::decrypt(urldecode(utf8_encode($_REQUEST['APP_UID'])), URL_KEY); - $_REQUEST['DEL_INDEX'] = G::decrypt(urldecode(utf8_encode($_REQUEST['DEL_INDEX'])), URL_KEY); - $_REQUEST['FIELD'] = G::decrypt(urldecode(utf8_encode($_REQUEST['FIELD'])), URL_KEY); - $_REQUEST['VALUE'] = G::decrypt(urldecode(utf8_encode($_REQUEST['VALUE'])), URL_KEY); - $_REQUEST['ABER'] = G::decrypt(urldecode(utf8_encode($_REQUEST['ABER'])), URL_KEY); + $_REQUEST['APP_UID'] = G::decrypt(urldecode(utf8_encode($_REQUEST['APP_UID'])), URL_KEY, true); + $_REQUEST['DEL_INDEX'] = G::decrypt(urldecode(utf8_encode($_REQUEST['DEL_INDEX'])), URL_KEY, true); + $_REQUEST['FIELD'] = G::decrypt(urldecode(utf8_encode($_REQUEST['FIELD'])), URL_KEY, true); + $_REQUEST['VALUE'] = G::decrypt(urldecode(utf8_encode($_REQUEST['VALUE'])), URL_KEY, true); + $_REQUEST['ABER'] = G::decrypt(urldecode(utf8_encode($_REQUEST['ABER'])), URL_KEY, true); $case = new Cases(); $actionsByEmail = new \ProcessMaker\BusinessModel\ActionsByEmail(); diff --git a/workflow/engine/methods/services/ldapadvanced.php b/workflow/engine/methods/services/ldapadvanced.php index a37594dd4..7275e82f5 100644 --- a/workflow/engine/methods/services/ldapadvanced.php +++ b/workflow/engine/methods/services/ldapadvanced.php @@ -60,363 +60,314 @@ class ldapadvancedClassCron $aDepartments = $plugin->getDepartments(""); $aGroups = $plugin->getGroups(); - //$arrayDepartmentUserAd = array(); //(D) Update Users - //$arrayGroupUserAd = array(); //(G) Update Users - - //echo "\n"; - $plugin->frontEndShow("START"); $plugin->debugLog("START"); foreach ($arrayAuthenticationSource as $value) { $arrayAuthenticationSourceData = $value; + try { + $plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$arrayAuthenticationSourceData ---->\n" . print_r($arrayAuthenticationSourceData, true)); - $plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$arrayAuthenticationSourceData ---->\n" . print_r($arrayAuthenticationSourceData, true)); + $plugin->sAuthSource = $arrayAuthenticationSourceData["AUTH_SOURCE_UID"]; + $plugin->ldapcnn = null; - $plugin->sAuthSource = $arrayAuthenticationSourceData["AUTH_SOURCE_UID"]; - $plugin->ldapcnn = null; + $plugin->setArrayDepartmentUserSynchronizedChecked(array()); + $plugin->setArrayUserUpdateChecked(array()); - $plugin->setArrayDepartmentUserSynchronizedChecked(array()); - $plugin->setArrayUserUpdateChecked(array()); + //Get all User (USR_UID, USR_USERNAME, USR_AUTH_USER_DN) registered in RBAC with this Authentication Source + $plugin->setArrayAuthenticationSourceUsers($arrayAuthenticationSourceData["AUTH_SOURCE_UID"]); //INITIALIZE DATA - //Get all User (USR_UID, USR_USERNAME, USR_AUTH_USER_DN) registered in RBAC with this Authentication Source - $plugin->setArrayAuthenticationSourceUsers($arrayAuthenticationSourceData["AUTH_SOURCE_UID"]); //INITIALIZE DATA + $plugin->frontEndShow("TEXT", "Authentication Source: " . $arrayAuthenticationSourceData["AUTH_SOURCE_NAME"]); - $plugin->frontEndShow("TEXT", "Authentication Source: " . $arrayAuthenticationSourceData["AUTH_SOURCE_NAME"]); + $plugin->log(null, "Executing cron for Authentication Source: " . $arrayAuthenticationSourceData["AUTH_SOURCE_NAME"]); - $plugin->log(null, "Executing cron for Authentication Source: " . $arrayAuthenticationSourceData["AUTH_SOURCE_NAME"]); + //Get all departments from Ldap/ActiveDirectory and build a hierarchy using dn (ou->ou parent) + $aLdapDepts = $plugin->searchDepartments(); - //Get all departments from Ldap/ActiveDirectory and build a hierarchy using dn (ou->ou parent) - $aLdapDepts = $plugin->searchDepartments(); + //Obtain all departments from PM with a valid department in LDAP/ActiveDirectory + $aRegisteredDepts = $plugin->getRegisteredDepartments($aLdapDepts, $aDepartments); - //Obtain all departments from PM with a valid department in LDAP/ActiveDirectory - $aRegisteredDepts = $plugin->getRegisteredDepartments($aLdapDepts, $aDepartments); + $plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$aRegisteredDepts ---->\n" . print_r($aRegisteredDepts, true)); - $plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$aRegisteredDepts ---->\n" . print_r($aRegisteredDepts, true)); + //Get all group from Ldap/ActiveDirectory + $aLdapGroups = $plugin->searchGroups(); - //Get all group from Ldap/ActiveDirectory - $aLdapGroups = $plugin->searchGroups(); + //Obtain all groups from PM with a valid group in LDAP/ActiveDirectory + $aRegisteredGroups = $plugin->getRegisteredGroups($aLdapGroups, $aGroups); - //Obtain all groups from PM with a valid group in LDAP/ActiveDirectory - $aRegisteredGroups = $plugin->getRegisteredGroups($aLdapGroups, $aGroups); + $plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$aRegisteredGroups ---->\n" . print_r($aRegisteredGroups, true)); - $plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$aRegisteredGroups ---->\n" . print_r($aRegisteredGroups, true)); + //Get all users from Removed OU + $this->usersRemovedOu = $plugin->getUsersFromRemovedOu($arrayAuthenticationSourceData); + $plugin->deactiveArrayOfUsers($this->usersRemovedOu); - //Get all users from Removed OU - $this->usersRemovedOu = $plugin->getUsersFromRemovedOu($arrayAuthenticationSourceData); - $plugin->deactiveArrayOfUsers($this->usersRemovedOu); + //Variables + $this->deletedRemoved = count($this->usersRemovedOu); + $this->deletedRemovedUsers = ""; - //Variables - $this->deletedRemoved = count($this->usersRemovedOu); - $this->deletedRemovedUsers = ""; + $this->dAlready = 0; + $this->dMoved = 0; + $this->dImpossible = 0; + $this->dCreated = 0; + $this->dRemoved = 0; + $this->dAlreadyUsers = ""; + $this->dMovedUsers = ""; + $this->dImpossibleUsers = ""; + $this->dCreatedUsers = ""; + $this->dRemovedUsers = ""; - $this->dAlready = 0; - $this->dMoved = 0; - $this->dImpossible = 0; - $this->dCreated = 0; - $this->dRemoved = 0; - $this->dAlreadyUsers = ""; - $this->dMovedUsers = ""; - $this->dImpossibleUsers = ""; - $this->dCreatedUsers = ""; - $this->dRemovedUsers = ""; + $this->gAlready = 0; + $this->gMoved = 0; + $this->gImpossible = 0; + $this->gCreated = 0; + $this->gRemoved = 0; + $this->gAlreadyUsers = ""; + $this->gMovedUsers = ""; + $this->gImpossibleUsers = ""; + $this->gCreatedUsers = ""; + $this->gRemovedUsers = ""; - $this->gAlready = 0; - $this->gMoved = 0; - $this->gImpossible = 0; - $this->gCreated = 0; - $this->gRemoved = 0; - $this->gAlreadyUsers = ""; - $this->gMovedUsers = ""; - $this->gImpossibleUsers = ""; - $this->gCreatedUsers = ""; - $this->gRemovedUsers = ""; + //Department - Synchronize Users + $numDepartments = count($aRegisteredDepts); + $count = 0; - //Department - Synchronize Users - $numDepartments = count($aRegisteredDepts); - $count = 0; + $plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$numDepartments ----> $numDepartments"); - $plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$numDepartments ----> $numDepartments"); - - foreach ($aRegisteredDepts as $registeredDept) { - $count++; - - //(D) Update Users - //if (!isset($arrayDepartmentUserAd[$registeredDept["DEP_UID"]])) { - // $arrayDepartmentUserAd[$registeredDept["DEP_UID"]] = array(); //Current users in department based in Active Directory - //} - // - //$arrayAux = $this->departmentSynchronizeUsers($plugin, $numDepartments, $count, $registeredDept); - //$arrayAux = array_merge($arrayDepartmentUserAd[$registeredDept["DEP_UID"]], $arrayAux); - // - //$arrayDepartmentUserAd[$registeredDept["DEP_UID"]] = array_unique($arrayAux); - - $arrayAux = $this->departmentSynchronizeUsers($plugin, $numDepartments, $count, $registeredDept); - } - - //Department - Print log - $logResults = sprintf( - "- Departments -> Existing users: %d, moved: %d, impossible: %d, created: %d, removed: %d", - $this->dAlready, - $this->dMoved, - $this->dImpossible, - $this->dCreated, - $this->dRemoved - ); - - $plugin->frontEndShow("TEXT", $logResults); - - $plugin->log(null, $logResults); - - //Group - Synchronize Users - $numGroups = count($aRegisteredGroups); - $count = 0; - - $plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$numGroups ----> $numGroups"); - - foreach ($aRegisteredGroups as $registeredGroup) { - $count++; - - //(G) Update Users - //if (!isset($arrayGroupUserAd[$registeredGroup["GRP_UID"]])) { - // $arrayGroupUserAd[$registeredGroup["GRP_UID"]] = array(); //Current users in group based in Active Directory - //} - // - //$arrayAux = $this->groupSynchronizeUsers($plugin, $numGroups, $count, $registeredGroup); - //$arrayAux = array_merge($arrayGroupUserAd[$registeredGroup["GRP_UID"]], $arrayAux); - // - //$arrayGroupUserAd[$registeredGroup["GRP_UID"]] = array_unique($arrayAux); - - $arrayAux = $this->groupSynchronizeUsers($plugin, $numGroups, $count, $registeredGroup); - } - - //Group - Print log - $logResults = sprintf( - "- Groups -> Existing users: %d, moved: %d, impossible: %d, created: %d, removed: %d", - $this->gAlready, - $this->gMoved, - $this->gImpossible, - $this->gCreated, - $this->gRemoved - ); - - $plugin->frontEndShow("TEXT", $logResults); - - $plugin->log(null, $logResults); - - //Manager - $plugin->clearManager($this->managersToClear); - - if (isset($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"])) { - if (is_array($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"])) { - foreach ($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"] as $departmentUID) { - // Delete manager assignments - $criteriaSet = new Criteria("workflow"); - $criteriaSet->add(UsersPeer::USR_REPORTS_TO, ""); - $criteriaWhere = new Criteria("workflow"); - $criteriaWhere->add(UsersPeer::DEP_UID, $departmentUID); - $criteriaWhere->add(UsersPeer::USR_REPORTS_TO, "", Criteria::NOT_EQUAL); - $this->deletedManager = BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow")); - // Delete department assignments - $criteriaSet = new Criteria("workflow"); - $criteriaSet->add(UsersPeer::DEP_UID, ""); - $criteriaWhere = new Criteria("workflow"); - $criteriaWhere->add(UsersPeer::DEP_UID, $departmentUID); - $this->dMoved += UsersPeer::doCount($criteriaWhere); - BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow")); - } + foreach ($aRegisteredDepts as $registeredDept) { + $count++; + $arrayAux = $this->departmentSynchronizeUsers($plugin, $numDepartments, $count, $registeredDept); } - unset($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"]); + //Department - Print log + $logResults = sprintf( + "- Departments -> Existing users: %d, moved: %d, impossible: %d, created: %d, removed: %d", + $this->dAlready, + $this->dMoved, + $this->dImpossible, + $this->dCreated, + $this->dRemoved + ); - $rbac = &RBAC::getSingleton(); - $rbac->authSourcesObj->update($arrayAuthenticationSourceData); - } + $plugin->frontEndShow("TEXT", $logResults); - if (isset($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"])) { - if (is_array($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"])) { - foreach ($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"] as $groupUID) { - // Delete manager assignments - $groupsInstance = new Groups(); - $criteria = $groupsInstance->getUsersGroupCriteria($groupUID); - $dataset = UsersPeer::doSelectRS($criteria); - $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $dataset->next(); - $users = array(); + $plugin->log(null, $logResults); - while ($row = $dataset->getRow()) { - $users[] = $row["USR_UID"]; + //Group - Synchronize Users + $numGroups = count($aRegisteredGroups); + $count = 0; + + $plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$numGroups ----> $numGroups"); + + foreach ($aRegisteredGroups as $registeredGroup) { + $count++; + $arrayAux = $this->groupSynchronizeUsers($plugin, $numGroups, $count, $registeredGroup); + } + + //Group - Print log + $logResults = sprintf( + "- Groups -> Existing users: %d, moved: %d, impossible: %d, created: %d, removed: %d", + $this->gAlready, + $this->gMoved, + $this->gImpossible, + $this->gCreated, + $this->gRemoved + ); + + $plugin->frontEndShow("TEXT", $logResults); + + $plugin->log(null, $logResults); + + //Manager + $plugin->clearManager($this->managersToClear); + + if (isset($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"])) { + if (is_array($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"])) { + foreach ($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"] as $departmentUID) { + // Delete manager assignments + $criteriaSet = new Criteria("workflow"); + $criteriaSet->add(UsersPeer::USR_REPORTS_TO, ""); + $criteriaWhere = new Criteria("workflow"); + $criteriaWhere->add(UsersPeer::DEP_UID, $departmentUID); + $criteriaWhere->add(UsersPeer::USR_REPORTS_TO, "", Criteria::NOT_EQUAL); + $this->deletedManager = BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow")); + // Delete department assignments + $criteriaSet = new Criteria("workflow"); + $criteriaSet->add(UsersPeer::DEP_UID, ""); + $criteriaWhere = new Criteria("workflow"); + $criteriaWhere->add(UsersPeer::DEP_UID, $departmentUID); + $this->dMoved += UsersPeer::doCount($criteriaWhere); + BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow")); + } + } + + unset($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"]); + + $rbac = &RBAC::getSingleton(); + $rbac->authSourcesObj->update($arrayAuthenticationSourceData); + } + + if (isset($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"])) { + if (is_array($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"])) { + foreach ($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"] as $groupUID) { + // Delete manager assignments + $groupsInstance = new Groups(); + $criteria = $groupsInstance->getUsersGroupCriteria($groupUID); + $dataset = UsersPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataset->next(); - } + $users = array(); - $criteriaSet = new Criteria("workflow"); - $criteriaSet->add(UsersPeer::USR_REPORTS_TO, ""); - $criteriaWhere = new Criteria("workflow"); - $criteriaWhere->add(UsersPeer::USR_UID, $users, Criteria::IN); - $criteriaWhere->add(UsersPeer::USR_REPORTS_TO, "", Criteria::NOT_EQUAL); - $this->deletedManager = BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow")); - - // Delete group assignments - $criteria = new Criteria("workflow"); - $criteria->add(GroupUserPeer::GRP_UID, $groupUID); - $this->gMoved += GroupUserPeer::doCount($criteria); - BasePeer::doDelete($criteria, Propel::getConnection("workflow")); - } - } - - unset($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"]); - - $rbac = &RBAC::getSingleton(); - $rbac->authSourcesObj->update($arrayAuthenticationSourceData); - } - - // Delete the managers that not exists in PM - $criteria = new Criteria("rbac"); - $criteria->addSelectColumn(RbacUsersPeer::USR_AUTH_USER_DN); - $criteria->add(RbacUsersPeer::USR_AUTH_USER_DN, "", Criteria::NOT_EQUAL); - $dataset = RbacUsersPeer::doSelectRS($criteria); - $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $dataset->next(); - $existingUsers = array(); - - while ($row = $dataset->getRow()) { - $existingUsers[] = $row["USR_AUTH_USER_DN"]; - $dataset->next(); - } - - foreach ($this->managersHierarchy as $managerDN => $subordinates) { - if (!in_array($managerDN, $existingUsers)) { - unset($this->managersHierarchy[$managerDN]); - } - } - - // Get the managers assigments counters - $plugin->synchronizeManagers($this->managersHierarchy); - - $deletedManagersAssignments = self::array_diff_assoc_recursive($this->oldManagersHierarchy, $this->managersHierarchy); - $newManagersAssignments = self::array_diff_assoc_recursive($this->managersHierarchy, $this->oldManagersHierarchy); - $deletedManagers = array(); - $newManagers = array(); - $movedManagers = array(); - - if (is_array($deletedManagersAssignments)) { - foreach ($deletedManagersAssignments as $dn1 => $subordinates1) { - foreach ($subordinates1 as $subordinate) { - if (!in_array($subordinate, $deletedManagers)) { - $deletedManagers[] = $subordinate; - } - - foreach ($newManagersAssignments as $dn2 => $subordinates2) { - if (isset($subordinates2[$subordinate])) { - $movedManagers[] = $subordinate; + while ($row = $dataset->getRow()) { + $users[] = $row["USR_UID"]; + $dataset->next(); } + + $criteriaSet = new Criteria("workflow"); + $criteriaSet->add(UsersPeer::USR_REPORTS_TO, ""); + $criteriaWhere = new Criteria("workflow"); + $criteriaWhere->add(UsersPeer::USR_UID, $users, Criteria::IN); + $criteriaWhere->add(UsersPeer::USR_REPORTS_TO, "", Criteria::NOT_EQUAL); + $this->deletedManager = BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow")); + + // Delete group assignments + $criteria = new Criteria("workflow"); + $criteria->add(GroupUserPeer::GRP_UID, $groupUID); + $this->gMoved += GroupUserPeer::doCount($criteria); + BasePeer::doDelete($criteria, Propel::getConnection("workflow")); } } + + unset($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"]); + + $rbac = &RBAC::getSingleton(); + $rbac->authSourcesObj->update($arrayAuthenticationSourceData); } - } - if (is_array($newManagersAssignments)) { - foreach ($newManagersAssignments as $dn1 => $subordinates1) { - foreach ($subordinates1 as $subordinate) { - if (!in_array($subordinate, $newManagers)) { - $newManagers[] = $subordinate; - } + // Delete the managers that not exists in PM + $criteria = new Criteria("rbac"); + $criteria->addSelectColumn(RbacUsersPeer::USR_AUTH_USER_DN); + $criteria->add(RbacUsersPeer::USR_AUTH_USER_DN, "", Criteria::NOT_EQUAL); + $dataset = RbacUsersPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $dataset->next(); + $existingUsers = array(); - foreach ($deletedManagersAssignments as $dn2 => $subordinates2) { - if (isset($subordinates2[$subordinate])) { - if (!in_array($subordinate, $movedManagers)) { + while ($row = $dataset->getRow()) { + $existingUsers[] = $row["USR_AUTH_USER_DN"]; + $dataset->next(); + } + + foreach ($this->managersHierarchy as $managerDN => $subordinates) { + if (!in_array($managerDN, $existingUsers)) { + unset($this->managersHierarchy[$managerDN]); + } + } + + // Get the managers assigments counters + $plugin->synchronizeManagers($this->managersHierarchy); + + $deletedManagersAssignments = self::array_diff_assoc_recursive($this->oldManagersHierarchy, $this->managersHierarchy); + $newManagersAssignments = self::array_diff_assoc_recursive($this->managersHierarchy, $this->oldManagersHierarchy); + $deletedManagers = array(); + $newManagers = array(); + $movedManagers = array(); + + if (is_array($deletedManagersAssignments)) { + foreach ($deletedManagersAssignments as $dn1 => $subordinates1) { + foreach ($subordinates1 as $subordinate) { + if (!in_array($subordinate, $deletedManagers)) { + $deletedManagers[] = $subordinate; + } + + foreach ($newManagersAssignments as $dn2 => $subordinates2) { + if (isset($subordinates2[$subordinate])) { $movedManagers[] = $subordinate; } } } } } + + if (is_array($newManagersAssignments)) { + foreach ($newManagersAssignments as $dn1 => $subordinates1) { + foreach ($subordinates1 as $subordinate) { + if (!in_array($subordinate, $newManagers)) { + $newManagers[] = $subordinate; + } + + foreach ($deletedManagersAssignments as $dn2 => $subordinates2) { + if (isset($subordinates2[$subordinate])) { + if (!in_array($subordinate, $movedManagers)) { + $movedManagers[] = $subordinate; + } + } + } + } + } + } + + //Print and log the users's information + //Deleted/Removed Users + $logResults = sprintf("- Deleted/Removed Users: %d", $this->deletedRemoved); + + $plugin->frontEndShow("TEXT", $logResults); + + $plugin->log(null, $logResults); + + if ($this->deletedRemoved > 0) { + $plugin->log(null, "Deleted/Removed Users: "); + $plugin->log(null, $this->deletedRemovedUsers); + } + + if ($this->dAlready + $this->gAlready > 0) { + $plugin->log(null, "Existing Users: "); + $plugin->log(null, $this->dAlreadyUsers . " " . $this->gAlreadyUsers); + } + + if ($this->dMoved + $this->gMoved > 0) { + $plugin->log(null, "Moved Users: "); + $plugin->log(null, $this->dMovedUsers . " " . $this->gMovedUsers); + } + + if ($this->dImpossible + $this->gImpossible > 0) { + $plugin->log(null, "Impossible Users: "); + $plugin->log(null, $this->dImpossibleUsers . " " . $this->gImpossibleUsers); + } + + if ($this->dCreated + $this->gCreated > 0) { + $plugin->log(null, "Created Users: "); + $plugin->log(null, $this->dCreatedUsers . " " . $this->gCreatedUsers); + } + + if ($this->dRemoved + $this->gRemoved > 0) { + $plugin->log(null, "Removed Users: "); + $plugin->log(null, $this->dRemovedUsers . " " . $this->gRemovedUsers); + } + + //Print and log the managers assignments"s information + $logResults = sprintf( + "- Managers assignments: created %d, moved %d, removed %d", + count($newManagers) - count($movedManagers), + count($movedManagers), + count($deletedManagers) - count($movedManagers) + $this->deletedManager + ); + + $plugin->frontEndShow("TEXT", $logResults); + + $plugin->log(null, $logResults); + + //Update Users data based on the LDAP Server + $plugin->usersUpdateData($arrayAuthenticationSourceData["AUTH_SOURCE_UID"]); + } catch (Exception $e) { + $context = Bootstrap::getDefaultContextLog(); + $context["action"] = "ldapSynchronize"; + $context["authSource"] = $arrayAuthenticationSourceData; + Bootstrap::registerMonolog("ldapSynchronize", 400, $e->getMessage(), $context, $context["workspace"], "processmaker.log"); } - - //Print and log the users's information - //Deleted/Removed Users - $logResults = sprintf("- Deleted/Removed Users: %d", $this->deletedRemoved); - - $plugin->frontEndShow("TEXT", $logResults); - - $plugin->log(null, $logResults); - - if ($this->deletedRemoved > 0) { - $plugin->log(null, "Deleted/Removed Users: "); - $plugin->log(null, $this->deletedRemovedUsers); - } - - if ($this->dAlready + $this->gAlready > 0) { - $plugin->log(null, "Existing Users: "); - $plugin->log(null, $this->dAlreadyUsers . " " . $this->gAlreadyUsers); - } - - if ($this->dMoved + $this->gMoved > 0) { - $plugin->log(null, "Moved Users: "); - $plugin->log(null, $this->dMovedUsers . " " . $this->gMovedUsers); - } - - if ($this->dImpossible + $this->gImpossible > 0) { - $plugin->log(null, "Impossible Users: "); - $plugin->log(null, $this->dImpossibleUsers . " " . $this->gImpossibleUsers); - } - - if ($this->dCreated + $this->gCreated > 0) { - $plugin->log(null, "Created Users: "); - $plugin->log(null, $this->dCreatedUsers . " " . $this->gCreatedUsers); - } - - if ($this->dRemoved + $this->gRemoved > 0) { - $plugin->log(null, "Removed Users: "); - $plugin->log(null, $this->dRemovedUsers . " " . $this->gRemovedUsers); - } - - //Print and log the managers assignments"s information - $logResults = sprintf( - "- Managers assignments: created %d, moved %d, removed %d", - count($newManagers) - count($movedManagers), - count($movedManagers), - count($deletedManagers) - count($movedManagers) + $this->deletedManager - ); - - $plugin->frontEndShow("TEXT", $logResults); - - $plugin->log(null, $logResults); - - //Update Users data based on the LDAP Server - $plugin->usersUpdateData($arrayAuthenticationSourceData["AUTH_SOURCE_UID"]); } $plugin->frontEndShow("END"); - - //(D) Update Users - ////Department //Upgrade users in departments - //foreach ($arrayDepartmentUserAd as $departmentUid => $arrayUserAd) { - // $plugin->setArrayDepartmentUsers($departmentUid); //INITIALIZE DATA - // - // $arrayAux = array_diff(array_keys($plugin->arrayDepartmentUsersByUid), $arrayUserAd); - // - // $this->departmentRemoveUsers($departmentUid, $arrayAux); - //} - - //(G) Update Users - ////Group //Upgrade users in groups - //foreach ($arrayGroupUserAd as $groupUid => $arrayUserAd) { - // $plugin->setArrayGroupUsers($groupUid); //INITIALIZE DATA - // - // $arrayAux = array_diff(array_keys($plugin->arrayGroupUsersByUid), $arrayUserAd); - // - // $this->groupRemoveUsers($groupUid, $arrayAux); - //} - - //// Developed by Gary and Ronald - //$usersInfo = $plugin->ASUpdateInfo(''); - //if (isset($usersInfo) && $usersInfo > 0) { - // $this->dMoved = $usersInfo; - //} - //// End Developed by Gary and Ronald - $plugin->debugLog("END"); } diff --git a/workflow/engine/methods/services/webdav.php b/workflow/engine/methods/services/webdav.php index b833a51bc..a98a04e6e 100644 --- a/workflow/engine/methods/services/webdav.php +++ b/workflow/engine/methods/services/webdav.php @@ -37,7 +37,7 @@ function AuthenticationBasicHTTP ($realm) return false; } -$realm = 'ProcessMaker Filesystem for Workspace ' . SYS_SYS; +$realm = 'ProcessMaker Filesystem for Workspace ' . config("system.workspace"); # Choice an authentification type Digest or Basic //AuthenticationDigestHTTP($realm, $users, $phpcgi); diff --git a/workflow/engine/methods/services/wsdl2.php b/workflow/engine/methods/services/wsdl2.php index 5062aedef..db14b1b91 100644 --- a/workflow/engine/methods/services/wsdl2.php +++ b/workflow/engine/methods/services/wsdl2.php @@ -6,7 +6,7 @@ $content = file_get_contents($filewsdl); $http = G::is_https() ? 'https' : 'http'; $port = $_SERVER['SERVER_PORT'] === '80' ? '' : ':' . $_SERVER['SERVER_PORT']; $lang = defined('SYS_LANG') ? SYS_LANG : 'en'; -$endpoint = $http . '://' . $_SERVER['SERVER_NAME'] . $port . '/sys' . SYS_SYS . '/' . $lang . '/neoclassic/services/soap2'; +$endpoint = $http . '://' . $_SERVER['SERVER_NAME'] . $port . '/sys' . config("system.workspace") . '/' . $lang . '/neoclassic/services/soap2'; $content = str_replace("___SOAP_ADDRESS___", $endpoint, $content); diff --git a/workflow/engine/methods/setup/auditLogAjax.php b/workflow/engine/methods/setup/auditLogAjax.php index 236db9265..c344e7277 100644 --- a/workflow/engine/methods/setup/auditLogAjax.php +++ b/workflow/engine/methods/setup/auditLogAjax.php @@ -110,7 +110,7 @@ $response = array (); switch ($option) { case "LST": $pageSize = $_REQUEST["pageSize"]; - $workspace = SYS_SYS; + $workspace = config("system.workspace"); $action = $_REQUEST["action"]; $description = $_REQUEST["description"]; $dateFrom = $_REQUEST["dateFrom"]; diff --git a/workflow/engine/methods/setup/cronAjax.php b/workflow/engine/methods/setup/cronAjax.php index 623f2355f..a0dcc40a1 100644 --- a/workflow/engine/methods/setup/cronAjax.php +++ b/workflow/engine/methods/setup/cronAjax.php @@ -116,7 +116,7 @@ $response = array (); switch ($option) { case "LST": $pageSize = $_REQUEST["pageSize"]; - $workspace = SYS_SYS; + $workspace = config("system.workspace"); $status = $_REQUEST["status"]; $dateFrom = $_REQUEST["dateFrom"]; $dateTo = $_REQUEST["dateTo"]; diff --git a/workflow/engine/methods/setup/languages_Import.php b/workflow/engine/methods/setup/languages_Import.php index fdda4812b..ce808315b 100644 --- a/workflow/engine/methods/setup/languages_Import.php +++ b/workflow/engine/methods/setup/languages_Import.php @@ -1,60 +1,41 @@ . - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - */ + require_once "classes/model/Language.php"; global $RBAC; -$access = $RBAC->userCanAccess( 'PM_SETUP_ADVANCE' ); +$access = $RBAC->userCanAccess('PM_SETUP_ADVANCE'); if ($access != 1) { switch ($access) { case - 1: - G::SendTemporalMessage( 'ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels' ); + G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels'); break; case - 2: - G::SendTemporalMessage( 'ID_USER_HAVENT_RIGHTS_SYSTEM', 'error', 'labels' ); + G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_SYSTEM', 'error', 'labels'); break; default: - G::SendTemporalMessage( 'ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels' ); + G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels'); break; } - G::header( 'location: ../login/login' ); - exit( 0 ); + G::header('location: ../login/login'); + exit(0); } $result = new stdClass(); try { //if the xmlform path is writeable - if (! is_writable( PATH_XMLFORM )) - throw new Exception( G::LoadTranslation( 'IMPORT_LANGUAGE_ERR_NO_WRITABLE' ) ); + if (!is_writable(PATH_XMLFORM)) { + throw new Exception(G::LoadTranslation('IMPORT_LANGUAGE_ERR_NO_WRITABLE')); + } - //if all xml files within the xmlform directory are writeable - if (! G::is_rwritable( PATH_XMLFORM )) - throw new Exception( G::LoadTranslation( 'IMPORT_LANGUAGE_ERR_NO_WRITABLE2' ) ); + //if all xml files within the xmlform directory are writeable + if (!G::is_rwritable(PATH_XMLFORM)) { + throw new Exception(G::LoadTranslation('IMPORT_LANGUAGE_ERR_NO_WRITABLE2')); + } - $sMaxExecutionTime = ini_get( 'max_execution_time' ); - ini_set( 'max_execution_time', '0' ); + $sMaxExecutionTime = ini_get('max_execution_time'); + ini_set('max_execution_time', '0'); $filter = new InputFilter(); @@ -62,56 +43,51 @@ try { $languageFilename = $_FILES['form']['name']['LANGUAGE_FILENAME']; $languageFile = $filter->xssFilterHard($languageFile, 'path'); $languageFilename = $filter->xssFilterHard($languageFilename, 'path'); - if (substr_compare( $languageFilename, ".gz", - 3, 3, true ) == 0) { - $zp = gzopen( $languageFile, "r" ); - $languageFile = tempnam( __FILE__, '' ); - $handle = fopen( $languageFile, "w" ); - while (! gzeof( $zp )) { - $data = gzread( $zp, 1024 ); - fwrite( $handle, $data ); + if (substr_compare($languageFilename, ".gz", - 3, 3, true) == 0) { + $zp = gzopen($languageFile, "r"); + $languageFile = tempnam(__FILE__, ''); + $handle = fopen($languageFile, "w"); + while (!gzeof($zp)) { + $data = gzread($zp, 1024); + fwrite($handle, $data); } - gzclose( $zp ); - fclose( $handle ); + gzclose($zp); + fclose($handle); } $language = new Language(); - $configuration = new Configurations(); - $importResults = $language->import( $languageFile ); + $importResults = $language->import($languageFile); - $renegerateContent = new WorkspaceTools( SYS_SYS ); - $messs = $renegerateContent->upgradeContent(); - - $result->msg = G::LoadTranslation( 'IMPORT_LANGUAGE_SUCCESS' ) . "\n"; + $result->success = true; + $result->msg = G::LoadTranslation('IMPORT_LANGUAGE_SUCCESS') . "\n"; $result->msg .= G::LoadTranslation("ID_FILE_NUM_RECORD") . $importResults->recordsCount . "\n"; $result->msg .= G::LoadTranslation("ID_SUCCESS_RECORD") . $importResults->recordsCountSuccess . "\n"; $result->msg .= G::LoadTranslation("ID_FAILED_RECORD") . ($importResults->recordsCount - $importResults->recordsCountSuccess) . "\n"; if ($importResults->errMsg != '') { - $result->msg .= G::LoadTranslation("ID_ERROR_REGISTERED"). " \n" . $importResults->errMsg . "\n"; + $result->msg .= G::LoadTranslation("ID_ERROR_REGISTERED") . " \n" . $importResults->errMsg . "\n"; } - //$result->msg = htmlentities($result->msg); - $result->success = true; - //saving metadata - $configuration->aConfig = Array ('headers' => $importResults->headers,'language' => $importResults->lang,'import-date' => date( 'Y-m-d H:i:s' ),'user' => '','version' => '1.0' - ); - $configuration->saveConfig( 'LANGUAGE_META', $importResults->lang ); + $configuration = new Configurations(); + $configuration->aConfig = Array('headers' => $importResults->headers, 'language' => $importResults->lang, 'import-date' => date('Y-m-d H:i:s'), 'user' => '', 'version' => '1.0'); + $configuration->saveConfig('LANGUAGE_META', $importResults->lang); + + $renegerateContent = new WorkspaceTools(config("system.workspace")); + $messs = $renegerateContent->upgradeContent(); $dir = PATH_CORE . 'content' . PATH_SEP . 'translations' . PATH_SEP; - if (! is_writable( $dir )) { - throw new Exception( G::LoadTranslation( 'ID_TRANSLATIONS_FOLDER_PERMISSIONS' ) ); + if (!is_writable($dir)) { + throw new Exception(G::LoadTranslation('ID_TRANSLATIONS_FOLDER_PERMISSIONS')); } G::uploadFile($languageFile, $dir, $languageFilename, 0777); - ini_set( 'max_execution_time', $sMaxExecutionTime ); - + ini_set('max_execution_time', $sMaxExecutionTime); } catch (Exception $oError) { - $result->msg = $oError->getMessage(); - //print_r($oError->getTrace()); $result->success = false; - //G::SendTemporalMessage($oError->getMessage(), 'error', 'string'); - //G::header('location: languages_ImportForm'); + $result->msg = $oError->getMessage(); } -echo G::json_encode( $result ); + +ob_clean(); +echo G::json_encode($result); diff --git a/workflow/engine/methods/setup/loginSettingsAjax.php b/workflow/engine/methods/setup/loginSettingsAjax.php index 96bbd1319..e30e75498 100644 --- a/workflow/engine/methods/setup/loginSettingsAjax.php +++ b/workflow/engine/methods/setup/loginSettingsAjax.php @@ -19,7 +19,7 @@ switch ($request) { print (G::json_encode( $result )) ; break; case 'saveSettings': - $memcache = & PMmemcached::getSingleton( defined( 'SYS_SYS' ) ? SYS_SYS : '' ); + $memcache = & PMmemcached::getSingleton( !empty(config("system.workspace")) ? config("system.workspace") : '' ); $conf = new Configurations(); $conf->loadConfig( $obj, 'ENVIRONMENT_SETTINGS', '' ); diff --git a/workflow/engine/methods/setup/pluginsChange.php b/workflow/engine/methods/setup/pluginsChange.php index df188b24f..fae89fef1 100644 --- a/workflow/engine/methods/setup/pluginsChange.php +++ b/workflow/engine/methods/setup/pluginsChange.php @@ -56,7 +56,7 @@ if ($handle = opendir(PATH_PLUGINS)) { ) { //Check disabled code - $cs = new CodeScanner(SYS_SYS); + $cs = new CodeScanner(config("system.workspace")); $arrayFoundDisabledCode = array_merge( $cs->checkDisabledCode("FILE", PATH_PLUGINS . $pluginName . ".php"), diff --git a/workflow/engine/methods/setup/pluginsImportFile.php b/workflow/engine/methods/setup/pluginsImportFile.php index 51f29c8ef..6a194a737 100644 --- a/workflow/engine/methods/setup/pluginsImportFile.php +++ b/workflow/engine/methods/setup/pluginsImportFile.php @@ -251,7 +251,7 @@ try { if (PMLicensedFeatures::getSingleton()->verifyfeature("B0oWlBLY3hHdWY0YUNpZEtFQm5CeTJhQlIwN3IxMEkwaG4=")) { //Check disabled code - $cs = new CodeScanner(SYS_SYS); + $cs = new CodeScanner(config("system.workspace")); $arrayFoundDisabledCode = array_merge($cs->checkDisabledCode("FILE", $path . $pluginFile), $cs->checkDisabledCode("PATH", $path . $sClassName)); diff --git a/workflow/engine/methods/setup/pluginsList.php b/workflow/engine/methods/setup/pluginsList.php index 2da7e3ad7..7890039cd 100644 --- a/workflow/engine/methods/setup/pluginsList.php +++ b/workflow/engine/methods/setup/pluginsList.php @@ -24,5 +24,5 @@ */ $RBAC->requirePermissions('PM_SETUP_ADVANCE'); -$items = \PMPlugin::getListPluginsManager(SYS_SYS); +$items = \PMPlugin::getListPluginsManager(config("system.workspace")); echo G::json_encode($items); diff --git a/workflow/engine/methods/setup/pluginsMain.php b/workflow/engine/methods/setup/pluginsMain.php index 8848fb917..8d43fd7e7 100644 --- a/workflow/engine/methods/setup/pluginsMain.php +++ b/workflow/engine/methods/setup/pluginsMain.php @@ -30,7 +30,7 @@ $RBAC->requirePermissions( 'PM_SETUP' ); $headPublisher = & headPublisher::getSingleton(); $headPublisher->addExtJsScript( 'setup/pluginsMain', false ); -$headPublisher->assign( "PROCESSMAKER_URL", "/sys" . SYS_SYS . "/" . SYS_LANG . "/" . SYS_SKIN ); +$headPublisher->assign( "PROCESSMAKER_URL", "/sys" . config("system.workspace") . "/" . SYS_LANG . "/" . SYS_SKIN ); $headPublisher->assign( "SYS_SKIN", SYS_SKIN ); $oPluginRegistry = PluginRegistry::loadSingleton(); diff --git a/workflow/engine/methods/setup/replacementLogo.php b/workflow/engine/methods/setup/replacementLogo.php index 82b94d3a2..ac15b9d6d 100644 --- a/workflow/engine/methods/setup/replacementLogo.php +++ b/workflow/engine/methods/setup/replacementLogo.php @@ -63,7 +63,7 @@ try { //ini_set('display_errors','1'); $snameLogo = changeNamelogo( $snameLogo ); $oConf = new Configurations(); - $aConf = Array ('WORKSPACE_LOGO_NAME' => SYS_SYS,'DEFAULT_LOGO_NAME' => $snameLogo + $aConf = Array ('WORKSPACE_LOGO_NAME' => config("system.workspace"),'DEFAULT_LOGO_NAME' => $snameLogo ); $oConf->aConfig = $aConf; diff --git a/workflow/engine/methods/setup/skin_Ajax.php b/workflow/engine/methods/setup/skin_Ajax.php index 9e893680b..d939fac45 100644 --- a/workflow/engine/methods/setup/skin_Ajax.php +++ b/workflow/engine/methods/setup/skin_Ajax.php @@ -162,7 +162,7 @@ function newSkin ($baseSkin = 'classic') $xmlConfiguration = file_get_contents( $configFileOriginal ); - $workspace = ($_REQUEST['workspace'] == 'global') ? '' : SYS_SYS; + $workspace = ($_REQUEST['workspace'] == 'global') ? '' : config("system.workspace"); $xmlConfigurationObj = G::xmlParser($xmlConfiguration); $skinInformationArray = $xmlConfigurationObj->result["skinConfiguration"]["__CONTENT__"]["information"]["__CONTENT__"]; @@ -282,7 +282,7 @@ function importSkin () $configFileFinal = PATH_CUSTOM_SKINS . $skinName . PATH_SEP . 'config.xml'; $xmlConfiguration = file_get_contents( $configFileOriginal ); - $workspace = ($_REQUEST['workspace'] == 'global') ? '' : SYS_SYS; + $workspace = ($_REQUEST['workspace'] == 'global') ? '' : config("system.workspace"); $xmlConfigurationObj = G::xmlParser($xmlConfiguration); $skinInformationArray = $xmlConfigurationObj->result["skinConfiguration"]["__CONTENT__"]["information"]["__CONTENT__"]; diff --git a/workflow/engine/methods/setup/skinsList.php b/workflow/engine/methods/setup/skinsList.php index 4bde6da13..eba70dcf1 100644 --- a/workflow/engine/methods/setup/skinsList.php +++ b/workflow/engine/methods/setup/skinsList.php @@ -44,7 +44,7 @@ $oHeadPublisher->addExtJsScript( 'setup/skinList', false ); //adding a javascrip $oHeadPublisher->addContent( 'setup/skinList' ); //adding a html file .html. $oHeadPublisher->assign( 'CONFIG', $Config ); $oHeadPublisher->assign( 'SYS_SKIN', SYS_SKIN ); -$oHeadPublisher->assign( 'SYS_SYS', "sys".SYS_SYS ); +$oHeadPublisher->assign( 'SYS_SYS', "sys".config("system.workspace") ); $oHeadPublisher->assign( 'FORMATS', $c->getFormats() ); diff --git a/workflow/engine/methods/setup/webServicesAjax.php b/workflow/engine/methods/setup/webServicesAjax.php index 788e6518c..a4d0f2802 100644 --- a/workflow/engine/methods/setup/webServicesAjax.php +++ b/workflow/engine/methods/setup/webServicesAjax.php @@ -66,7 +66,7 @@ switch ($_POST['action']) { if (! isset( $_SESSION['END_POINT'] )) { $aFields['WS_HOST'] = $_SERVER['HTTP_HOST']; - $aFields['WS_WORKSPACE'] = SYS_SYS; + $aFields['WS_WORKSPACE'] = config("system.workspace"); } else { if (strpos( $_SESSION['END_POINT'], 'https' ) !== false) { preg_match( '@^(?:https://)?([^/]+)@i', $_SESSION['END_POINT'], $coincidencias ); @@ -94,15 +94,14 @@ switch ($_POST['action']) { $_SESSION['_DBArray'] = $_DBArray; if (! isset( $_SESSION['END_POINT'] )) { - //$wsdl = 'http://'.$_SERVER['HTTP_HOST'].'/sys'.SYS_SYS. '/'. SYS_LANG .'/classic/services/wsdl'; $wsdl = 'http://' . $_SERVER['HTTP_HOST']; - $workspace = SYS_SYS; + $workspace = config("system.workspace"); } else { $wsdl = $_SESSION['END_POINT']; $workspace = $_SESSION['WS_WORKSPACE']; } - $defaultEndpoint = 'http://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/classic/services/wsdl2'; + $defaultEndpoint = 'http://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'] . '/sys' . config("system.workspace") . '/' . SYS_LANG . '/classic/services/wsdl2'; $wsdl = isset( $_SESSION['END_POINT'] ) ? $_SESSION['END_POINT'] : $defaultEndpoint; @@ -144,7 +143,7 @@ try { if (isset( $_POST["epr"] )) { $_SESSION['END_POINT'] = $_POST["epr"]; } - $defaultEndpoint = 'http://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/classic/services/wsdl2'; + $defaultEndpoint = 'http://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'] . '/sys' . config("system.workspace") . '/' . SYS_LANG . '/classic/services/wsdl2'; $endpoint = isset( $_SESSION['END_POINT'] ) ? $_SESSION['END_POINT'] : $defaultEndpoint; @@ -616,7 +615,7 @@ try { $caseNumber = $oCases->getAppNumber(); // generating the path for the template msj - $templateFile = PATH_DB . SYS_SYS . PATH_SEP . 'mailTemplates' . PATH_SEP . $proUid . PATH_SEP . 'tempTemplate.hml'; + $templateFile = PATH_DB . config("system.workspace") . PATH_SEP . 'mailTemplates' . PATH_SEP . $proUid . PATH_SEP . 'tempTemplate.hml'; // generating the file adding the msj variable $messageBody = "message for case: " . $caseNumber . "
" . $message; file_put_contents( $templateFile, $messageBody ); @@ -1461,7 +1460,7 @@ try { function sendFile ($FILENAME, $USR_UID, $APP_UID, $DEL_INDEX = 1, $DOC_UID = null, $title = null, $comment = null) { - $defaultEndpoint = 'http://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/classic/services/upload'; + $defaultEndpoint = 'http://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'] . '/sys' . config("system.workspace") . '/' . SYS_LANG . '/classic/services/upload'; $upload = isset( $_SESSION['END_POINT'] ) ? $_SESSION['END_POINT'] : $defaultEndpoint; $DOC_UID = ($DOC_UID != null) ? $DOC_UID : - 1; diff --git a/workflow/engine/methods/setup/webServicesSetup.php b/workflow/engine/methods/setup/webServicesSetup.php index 71d2df3df..fc6b05036 100644 --- a/workflow/engine/methods/setup/webServicesSetup.php +++ b/workflow/engine/methods/setup/webServicesSetup.php @@ -29,7 +29,7 @@ $ses = new DBSession( $dbc ); if (! isset( $_SESSION['END_POINT'] )) { $aFields['WS_HOST'] = $_SERVER['HTTP_HOST']; - $aFields['WS_WORKSPACE'] = SYS_SYS; + $aFields['WS_WORKSPACE'] = config("system.workspace"); } else { if (strpos( $_SESSION['END_POINT'], 'https' ) !== false) { preg_match( '@^(?:https://)?([^/]+)@i', $_SESSION['END_POINT'], $coincidencias ); diff --git a/workflow/engine/methods/tools/ajaxListener.php b/workflow/engine/methods/tools/ajaxListener.php index 8aa881dbc..f0fc1aa37 100644 --- a/workflow/engine/methods/tools/ajaxListener.php +++ b/workflow/engine/methods/tools/ajaxListener.php @@ -1,41 +1,24 @@ . - * - * For more information, contact Colosa Inc, 2566 Le Jeune Rd., - * Coral Gables, FL, 33134, USA, or email info@colosa.com. - */ -/** - * - * @author Erik Amaru Ortiz - * @date Jan 10th, 2010 - */ - $action = $_REQUEST['action']; unset($_REQUEST['action']); + +global $RBAC; +$RBAC->allows(basename(dirname(__FILE__)) . PATH_SEP . basename(__FILE__), $action); + $ajax = new Ajax(); $ajax->$action($_REQUEST); class Ajax { + /** + * Get the list related to the translation + * + * @param array $params + * + * @return void + */ public function getList($params) { $search = isset($params['search']) ? $params['search'] : null; @@ -46,6 +29,11 @@ class Ajax echo G::json_encode($result); } + /** + * Save translation + * + * @return void + */ public function save() { try { @@ -53,6 +41,7 @@ class Ajax $label = preg_replace("[\n|\r|\n\r]", ' ', $_POST['label']); $res = Translation::addTranslation('LABEL', $id, 'en', $label); + $result = new stdClass(); if ($res['codError'] < 0) { $result->success = false; $result->msg = $res['message']; @@ -67,10 +56,16 @@ class Ajax print G::json_encode($result); } + /** + * Delete translation + * + * @return void + */ public function delete() { $ids = explode(',', $_POST['IDS']); $category = 'LABEL'; + $result = new stdClass(); try { foreach ($ids as $id) { @@ -89,8 +84,14 @@ class Ajax print G::json_encode($result); } + /** + * Rebuild translation + * + * @return void + */ public function rebuild() { + $result = new stdClass(); try { $t = new Translation(); $result = Translation::generateFileTranslation('en'); diff --git a/workflow/engine/methods/tracker/tracker_ShowDocument.php b/workflow/engine/methods/tracker/tracker_ShowDocument.php index 8837cdd5b..b1a532ca1 100644 --- a/workflow/engine/methods/tracker/tracker_ShowDocument.php +++ b/workflow/engine/methods/tracker/tracker_ShowDocument.php @@ -65,8 +65,8 @@ if (! $sw_file_exists) { print G::json_encode( $res ); } else { G::SendMessageText( $error_message, "ERROR" ); - $backUrlObj = explode( "sys" . SYS_SYS, $_SERVER['HTTP_REFERER'] ); - G::header( "location: " . "/sys" . SYS_SYS . $backUrlObj[1] ); + $backUrlObj = explode( "sys" . config("system.workspace"), $_SERVER['HTTP_REFERER'] ); + G::header( "location: " . "/sys" . config("system.workspace") . $backUrlObj[1] ); die(); } diff --git a/workflow/engine/methods/tracker/tracker_ShowOutputDocument.php b/workflow/engine/methods/tracker/tracker_ShowOutputDocument.php index 4aba2f5bd..c3dc3bdd3 100644 --- a/workflow/engine/methods/tracker/tracker_ShowOutputDocument.php +++ b/workflow/engine/methods/tracker/tracker_ShowOutputDocument.php @@ -68,8 +68,8 @@ if (! $sw_file_exists) { print G::json_encode( $res ); } else { G::SendMessageText( $error_message, "ERROR" ); - $backUrlObj = explode( "sys" . SYS_SYS, $_SERVER['HTTP_REFERER'] ); - G::header( "location: " . "/sys" . SYS_SYS . $backUrlObj[1] ); + $backUrlObj = explode( "sys" . config("system.workspace"), $_SERVER['HTTP_REFERER'] ); + G::header( "location: " . "/sys" . config("system.workspace") . $backUrlObj[1] ); die(); } diff --git a/workflow/engine/methods/triggers/triggers_Save.php b/workflow/engine/methods/triggers/triggers_Save.php index 7f23af6c5..a08dbbfa4 100644 --- a/workflow/engine/methods/triggers/triggers_Save.php +++ b/workflow/engine/methods/triggers/triggers_Save.php @@ -61,7 +61,7 @@ if (isset( $sfunction ) && $sfunction == 'lookforNameTrigger') { ) { //Check disabled code - $cs = new CodeScanner(SYS_SYS); + $cs = new CodeScanner(config("system.workspace")); $arrayFoundDisabledCode = $cs->checkDisabledCode("SOURCE", $value["TRI_WEBBOT"]); diff --git a/workflow/engine/methods/users/usersEdit.php b/workflow/engine/methods/users/usersEdit.php index badb3fa5e..991d67410 100644 --- a/workflow/engine/methods/users/usersEdit.php +++ b/workflow/engine/methods/users/usersEdit.php @@ -40,7 +40,7 @@ if ($licensedFeatures->verifyfeature('w2LL3o4NFNiaDRXcFFCYVpJS3Jsall5dmh0ZWtBTkd } /*----------------------------------********---------------------------------*/ -$arraySystemConfiguration = System::getSystemConfiguration('', '', SYS_SYS); +$arraySystemConfiguration = System::getSystemConfiguration('', '', config("system.workspace")); $oHeadPublisher = & headPublisher::getSingleton(); $oHeadPublisher->addExtJsScript( 'users/users', true ); //adding a javascript file .js diff --git a/workflow/engine/methods/users/usersInit.php b/workflow/engine/methods/users/usersInit.php index 208d1197c..5d2cb136f 100644 --- a/workflow/engine/methods/users/usersInit.php +++ b/workflow/engine/methods/users/usersInit.php @@ -48,7 +48,7 @@ if ($licensedFeatures->verifyfeature('w2LL3o4NFNiaDRXcFFCYVpJS3Jsall5dmh0ZWtBTkd } /*----------------------------------********---------------------------------*/ -$arraySystemConfiguration = System::getSystemConfiguration('', '', SYS_SYS); +$arraySystemConfiguration = System::getSystemConfiguration('', '', config("system.workspace")); $oHeadPublisher = & headPublisher::getSingleton(); $oHeadPublisher->addExtJsScript( 'users/users', true ); //adding a javascript file .js diff --git a/workflow/engine/methods/users/usersNew.php b/workflow/engine/methods/users/usersNew.php index b73bf00d3..ed48f5cea 100644 --- a/workflow/engine/methods/users/usersNew.php +++ b/workflow/engine/methods/users/usersNew.php @@ -38,7 +38,7 @@ if ($licensedFeatures->verifyfeature('w2LL3o4NFNiaDRXcFFCYVpJS3Jsall5dmh0ZWtBTkd } /*----------------------------------********---------------------------------*/ -$arraySystemConfiguration = System::getSystemConfiguration('', '', SYS_SYS); +$arraySystemConfiguration = System::getSystemConfiguration('', '', config("system.workspace")); $oHeadPublisher = & headPublisher::getSingleton(); $oHeadPublisher->addExtJsScript( 'users/users', true ); //adding a javascript file .js diff --git a/workflow/engine/plugins/openFlash.php b/workflow/engine/plugins/openFlash.php deleted file mode 100644 index e91fd3302..000000000 --- a/workflow/engine/plugins/openFlash.php +++ /dev/null @@ -1,35 +0,0 @@ -sFriendlyName = 'openFlash Plugin'; - $this->sDescription = 'Charts Plugin, with this plugin you can see many differents charts using interactive flash charts for ProcessMaker'; - $this->sPluginFolder = 'openFlash'; - $this->sSetupPage = 'setupPage'; - $this->aWorkspaces = array ( ); - $this->aWorkspaces = array ( 'dev'); - $this->iVersion = 0.45; - return $res; - } - - function setup() - { - $this->registerDashboard(); - } - - function install() - { - - } - } - - $oPluginRegistry =& PMPluginRegistry::getSingleton(); - $oPluginRegistry->registerPlugin('openFlash', __FILE__); - - - - - diff --git a/workflow/engine/plugins/openFlash/chart-data.php b/workflow/engine/plugins/openFlash/chart-data.php deleted file mode 100644 index a0dbb6a22..000000000 --- a/workflow/engine/plugins/openFlash/chart-data.php +++ /dev/null @@ -1,14 +0,0 @@ -{$chartType}(); - die; - } - diff --git a/workflow/engine/plugins/openFlash/chart.php b/workflow/engine/plugins/openFlash/chart.php deleted file mode 100644 index 78d8c1975..000000000 --- a/workflow/engine/plugins/openFlash/chart.php +++ /dev/null @@ -1,11 +0,0 @@ -sPluginFolder . PATH_SEP . 'config' . PATH_SEP . 'setup.conf'; - if ( !file_exists( dirname($fileConf) ) ) - throw ( new Exception ("The directory " . dirname($fileConf) . " doesn't exist." ) ); - - if ( file_exists ( $fileConf ) && !is_writable( $fileConf ) ) - throw ( new Exception ("The file $fileConf doesn't exist or this file is not writable." ) ); - - if ( file_exists ( $fileConf ) ) { - $content = file_get_contents ( $fileConf); - $fields = unserialize ($content); - } - else - $fields = array(); - return $fields; - } - - function updateFieldsForPageSetup ( $oData) { - $content = serialize ($oData['form']); - $fileConf = PATH_PLUGINS . $this->sPluginFolder . PATH_SEP . 'config' . PATH_SEP . 'setup.conf'; - if ( !is_writable( dirname($fileConf) ) ) - throw ( new Exception ("The directory " . dirname($fileConf) . " doesn't exist or this directory is not writable." ) ); - - if ( file_exists ( $fileConf ) && !is_writable( $fileConf ) ) - throw ( new Exception ("The file $fileConf doesn't exist or this file is not writable." ) ); - - file_put_contents ( $fileConf, $content); - return true; - } - - function setup() { - } - - function getChart( $chartName ) { - $this->readConfig(); - $prePath = '/sys' . SYS_SYS . '/' . SYS_LANG . '/blank/'; - $obj = new StdClass(); - $obj->title = 'Standard ProcessMaker Reports'; - $obj->height = 220; - $obj->open->url = $prePath . 'openFlash/chart?chart=' . $chartName . "&u="; - return $obj; - } - - //here we are defining the available charts, the dashboard setup will call this function to know the charts - function getAvailableCharts( ) { - return array ( - 'CasesByStatus', - 'CasesByStatusPie', - 'CasesByProcess', - 'CasesByProcessPie' - ); - } - - /* definition of all charts */ - /* that definition comes in two parts : - /* 1. the getXX () function to get the data from the databases - /* 2. the XX () function to draw the graph - */ - - /** chart getCasesByStatus ***/ - /** to show the Cases grouped by Status*/ - function getCasesByStatus ( ) { - $dataSet = array(); - - $c = new Criteria('workflow'); - $c->clearSelectColumns(); - $c->addSelectColumn ( ApplicationPeer::APP_STATUS ); - $c->addSelectColumn ( 'COUNT(*) AS CANT') ; - $c->addGroupByColumn(ApplicationPeer::APP_STATUS); - $rs = ApplicationPeer::doSelectRS( $c ); - $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - $label[] = $row['APP_STATUS']; - $data[] = (int)$row['CANT']; - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['data'] = $data; - $dataSet['label'] = $label; - - $max = 1; - foreach ( $dataSet['data'] as $k => $val ) if ( $val > $max ) $max = $val; - $aux = intval($max / 6 ) * 6 + 6; - $dataSet['max'] = $aux; - return $dataSet; - } - - function CasesByStatus( ) { - $dataSet = $this->getCasesByStatus(); - $data = $dataSet['data']; - //$series2 = $dataSet['series2']; - $g = new graph(); - $g->title( ' Cases by Status ', '{font-size: 14px;}' ); - $bar_red = new bar_3d( 50, '#3334AD' ); - $bar_red->key( 'cases', 10 ); - $bar_red->data = $data; - - $g->data_sets[] = $bar_red; - - $g->set_x_axis_3d( 12 ); - $g->x_axis_colour( '#909090', '#ADB5C7' ); - $g->y_axis_colour( '#909090', '#ADB5C7' ); - $g->set_x_labels( $dataSet['label'] ); - - $g->set_y_max( $dataSet['max'] ); - $g->y_label_steps( 6 ); - //$g->set_y_legend( 'Posts', 12, '#736AFF' ); - echo $g->render(); - } - - function CasesByStatusPie ( ) { - $g->bg_colour = '#FFFFFF'; - $dataSet = $this->getCasesByStatus(); - $data = $dataSet['data']; - $g = new graph(); - $g->pie(80,'#505050','{font-size: 12px; color: #404040;'); - $g->pie_values( $data, $dataSet['label'] ); - $g->pie_slice_colours( array('#d01f3c','#356aa0','#C79810','#D54C78') ); - $g->set_tool_tip( '#val# #x_label#' ); - $g->title( 'Cases by Status', '{font-size:18px; color: #d01f3c}' ); - echo $g->render(); - } - - /** chart CasesByProcess ***/ - /** to show the cases grouped by Process */ - function getCasesByProcess ( ) { - $dataSet = array(); - $processObj = new Process; - - $c = new Criteria('workflow'); - $c->clearSelectColumns(); - $c->addSelectColumn ( ApplicationPeer::PRO_UID ); - $c->addSelectColumn ( 'COUNT(*) AS CANT') ; - //$c->addJoin( ProcessPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN); - $c->addGroupByColumn(ApplicationPeer::PRO_UID); - $rs = ApplicationPeer::doSelectRS( $c ); - $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - $processObj->load ( $row['PRO_UID'] ); - $label[] = $processObj->getProTitle(); - $labelPie[] = substr ( $processObj->getProTitle(),0,16 ); - $data[] = (int)$row['CANT']; - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['data'] = $data; - $dataSet['label'] = $label; - $dataSet['labelPie'] = $labelPie; - - $max = 1; - foreach ( $dataSet['data'] as $k => $val ) if ( $val > $max ) $max = $val; - $aux = intval($max / 6 ) * 6 + 6; - $dataSet['max'] = $aux; - return $dataSet; - } - - function CasesByProcess( ) { - $dataSet = $this->getCasesByProcess(); - $data = $dataSet['data']; - //$series2 = $dataSet['series2']; - $g = new graph(); - $g->title( ' Cases by Process ', '{font-size: 14px;}' ); - $bar_red = new bar_3d( 50, '#3334AD' ); - $bar_red->key( 'cases', 10 ); - $bar_red->data = $data; - - $g->data_sets[] = $bar_red; - - $g->set_x_axis_3d( 12 ); - $g->x_axis_colour( '#909090', '#ADB5C7' ); - $g->y_axis_colour( '#909090', '#ADB5C7' ); - $g->set_x_labels( $dataSet['label'] ); - - $g->set_y_max( $dataSet['max'] ); - $g->y_label_steps( 6 ); - echo $g->render(); - } - - function CasesByProcessPie ( ) { - $g->bg_colour = '#FFFFFF'; - $dataSet = $this->getCasesByProcess(); - $data = $dataSet['data']; - $g = new graph(); - $g->pie(80,'#505050','{font-size: 12px; color: #404040;'); - $g->pie_values( $data, $dataSet['labelPie'] ); - $g->pie_slice_colours( array('#d01f3c','#356aa0','#C79810','#D54C78') ); - $g->set_tool_tip( '#val# #x_label#' ); - $g->title( 'Cases by Process', '{font-size:16px; color: #d01f3c}' ); - echo $g->render(); - } -/* - function getForumWeek ( ) { - $databases = PATH_PLUGINS . "/openFlash/config/databases.php"; - Propel::init( $databases ); - - $dataSet = array(); - $processObj = new Process; - $past2months = mktime(0, 0, 0, date("m") -2 , date("d"), date("Y")); - - $con = Propel::getConnection('forum'); - $sql = "select week(FROM_UNIXTIME(post_time )) as week ,count(*) as cant from phpbb_posts where post_time > $past2months group by week " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - $label[] = date ( 'M d', mktime(0, 0, 0, 1 , $row['week']*7, date("Y")) ); - $data[] = $row['cant']; - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['data'] = $data; - $dataSet['label'] = $label; - return $dataSet; - } - - function ForumWeek ( ) { - $dataSet = $this->getForumWeek(); - $data = $dataSet['data']; - $max = 1; - foreach ( $dataSet['data'] as $k => $val ) if ( $val > $max ) $max = $val; - $g = new graph(); - $g->title( ' Posts by Week ', '{font-size: 16px;}' ); - $bar_red = new bar_3d( 50, '#3334AD' ); - $bar_red->key( 'week', 10 ); - $bar_red->data = $data; - - $g->data_sets[] = $bar_red; - - $g->set_x_axis_3d( 12 ); - $g->x_axis_colour( '#909090', '#ADB5C7' ); - $g->y_axis_colour( '#909090', '#ADB5C7' ); - $g->set_x_labels( $dataSet['label'] ); - - $g->set_y_max( $max ); - $g->y_label_steps( 5 ); - $g->set_y_legend( 'Posts', 12, '#736AFF' ); - echo $g->render(); - } - - /** chart PostByUser ***/ - /** to show the last 7 days grouped by user * / - function getPostByUser ( ) { - $databases = PATH_PLUGINS . "/openFlash/config/databases.php"; - Propel::init( $databases ); - - $dataSet = array(); - $con = Propel::getConnection('forum'); - - $past7days = mktime(0, 0, 0, date("m") , date("d")-7, date("Y")); - $sql = "select username, count(*) as cant from phpbb_posts left join phpbb_users on ( poster_id = user_id ) where post_time > $past7days group by username " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - $label[] = $row['username']; - $data[] = $row['cant']; - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['data'] = $data; - //$dataSet['data'] = $data; - $dataSet['label'] = $label; - return $dataSet; - } - - function PostByUser ( ) { - $dataSet = $this->getPostByUser(); - $data = $dataSet['data']; - $g = new graph(); - $g->title( ' Posts by User last week '. date("Y-m-d"), '{font-size: 16px;}' ); - $max = 1; - foreach ( $dataSet['data'] as $k => $val ) if ( $val > $max ) $max = $val; - $max = intval($max / 4 ) * 4 + 4; - - $bar_red = new bar_3d( 50, '#356aa0' ); - $bar_red->key( 'posts', 10 ); - $bar_red->data = $data; - - $bar_blue = new bar_3d( 75, '#D54C78' ); - $bar_blue->key( 'completed', 10 ); - $bar_blue->data = $data; - - $g->data_sets[] = $bar_red; - //$g->data_sets[] = $bar_blue; - - $g->set_x_axis_3d( 12 ); - $g->x_axis_colour( '#909090', '#ADB5C7' ); - $g->y_axis_colour( '#909090', '#ADB5C7' ); - $g->set_x_labels( $dataSet['label'] ); - - $g->set_y_max( $max ); - $g->y_label_steps( 4 ); - $g->set_y_legend( 'Processmaker', 12, '#736AFF' ); - echo $g->render(); - } - - /** chart BugsByStatus ***/ - /** to show the bugs by status resolved, open, closed * / - function getBugsByStatus ( ) { - $databases = PATH_PLUGINS . "/openFlash/config/databases.php"; - Propel::init( $databases ); - - $dataSet = array(); - $con = Propel::getConnection('bugs'); - - //open - $sql = "SELECT count(*) as cant FROM mantis_bug_table where project_id = 31 and status in (20,30,40,50) " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - $label[] = 'open'; - $data[] = $row['cant']; - - //resolved - $sql = "SELECT count(*) as cant FROM mantis_bug_table where project_id = 31 and status = 80" ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - $label[] = 'resolved'; - $data[] = $row['cant']; - - //closed - $sql = "SELECT count(*) as cant FROM mantis_bug_table where project_id = 31 and status = 90" ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - $label[] = 'closed'; - $data[] = $row['cant']; - - $dataSet['data'] = $data; - $dataSet['label'] = $label; - return $dataSet; - } - - function BugsByStatus ( ) { - $dataSet = $this->getBugsByStatus(); - $data = $dataSet['data']; - $g = new graph(); - $g->title( ' Posts by User last week '. date("Y-m-d"), '{font-size: 16px;}' ); - - $g->pie(70,'#505050','{font-size: 12px; color: #404040;'); - $g->pie_values( $data, $dataSet['label'] ); - $g->pie_slice_colours( array('#d01f3c','#356aa0','#C79810') ); - $g->set_tool_tip( '#val# #x_label#' ); - $g->title( 'Bugs by Status', '{font-size:18px; color: #d01f3c}' ); - echo $g->render(); - } - - /** chart BugsOpenByUser ***/ - /** to show the bugs in OPEN status by user * / - function getBugsOpenByUser ( ) { - $databases = PATH_PLUGINS . "/openFlash/config/databases.php"; - Propel::init( $databases ); - - $dataSet = array(); - $con = Propel::getConnection('bugs'); - - $sql = "SELECT username, count(*) as cant FROM mantis_bug_table left join mantis_user_table on ( mantis_user_table.id = handler_id) where project_id = 31 and status in (20,30,40,50) group by username " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - $label[] = $row['username']; - $data[] = $row['cant']; - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['data'] = $data; - $dataSet['label'] = $label; - return $dataSet; - } - - function BugsOpenByUser ( ) { - $g->bg_colour = '#EFFFEF'; - $dataSet = $this->getBugsOpenByUser(); - $data = $dataSet['data']; - $g = new graph(); - $g->pie(80,'#505050','{font-size: 12px; color: #404040;'); - $g->pie_values( $data, $dataSet['label'] ); - $g->pie_slice_colours( array('#d01f3c','#356aa0','#C79810','#D54C78') ); - $g->set_tool_tip( '#val# #x_label#' ); - $g->title( 'Open Bugs by User', '{font-size:18px; color: #d01f3c}' ); - echo $g->render(); - } - -/*******/ - - - - - - - - -} diff --git a/workflow/engine/plugins/openFlash/open-flash-chart.php b/workflow/engine/plugins/openFlash/open-flash-chart.php deleted file mode 100644 index b1cd90627..000000000 --- a/workflow/engine/plugins/openFlash/open-flash-chart.php +++ /dev/null @@ -1,1769 +0,0 @@ -data_sets = array(); - - - $this->data = array(); - $this->links = array(); - $this->width = 250; - $this->height = 200; - $this->js_path = '/images/'; - $this->swf_path = ''; - $this->x_labels = array(); - $this->y_min = ''; - $this->y_max = ''; - $this->x_min = ''; - $this->x_max = ''; - $this->y_steps = ''; - $this->title = ''; - $this->title_style = ''; - $this->occurence = 0; - - $this->x_offset = ''; - - $this->x_tick_size = -1; - - $this->y2_max = ''; - $this->y2_min = ''; - - // GRID styles: - $this->x_axis_colour = ''; - $this->x_axis_3d = ''; - $this->x_grid_colour = ''; - $this->x_axis_steps = 1; - $this->y_axis_colour = ''; - $this->y_grid_colour = ''; - $this->y2_axis_colour = ''; - - // AXIS LABEL styles: - $this->x_label_style = ''; - $this->y_label_style = ''; - $this->y_label_style_right = ''; - - - // AXIS LEGEND styles: - $this->x_legend = ''; - $this->x_legend_size = 20; - $this->x_legend_colour = '#000000'; - - $this->y_legend = ''; - $this->y_legend_right = ''; - //$this->y_legend_size = 20; - //$this->y_legend_colour = '#000000'; - - $this->lines = array(); - $this->line_default['type'] = 'line'; - $this->line_default['values'] = '3,#87421F'; - $this->js_line_default = 'so.addVariable("line","3,#87421F");'; - - $this->bg_colour = ''; - $this->bg_image = ''; - - $this->inner_bg_colour = ''; - $this->inner_bg_colour_2 = ''; - $this->inner_bg_angle = ''; - - // PIE chart ------------ - $this->pie = ''; - $this->pie_values = ''; - $this->pie_colours = ''; - $this->pie_labels = ''; - - $this->tool_tip = ''; - - // which data lines are attached to the - // right Y axis? - $this->y2_lines = array(); - - // Number formatting: - $this->y_format=''; - $this->num_decimals=''; - $this->is_fixed_num_decimals_forced=''; - $this->is_decimal_separator_comma=''; - $this->is_thousand_separator_disabled=''; - - $this->output_type = ''; - - // - // set some default value incase the user forgets - // to set them, so at least they see *something* - // even is it is only the axis and some ticks - // - $this->set_y_min( 0 ); - $this->set_y_max( 20 ); - $this->set_x_axis_steps( 1 ); - $this->y_label_steps( 5 ); - } - - /** - * Set the unique_id to use for the flash object id. - */ - function set_unique_id() - { - $this->unique_id = uniqid(rand(), true); - } - - /** - * Get the flash object ID for the last rendered object. - */ - function get_unique_id() - { - return ($this->unique_id); - } - - /** - * Set the base path for the swfobject.js - * - * @param base_path a string argument. - * The path to the swfobject.js file - */ - function set_js_path($path) - { - $this->js_path = $path; - } - - /** - * Set the base path for the open-flash-chart.swf - * - * @param path a string argument. - * The path to the open-flash-chart.swf file - */ - function set_swf_path($path) - { - $this->swf_path = $path; - } - - /** - * Set the type of output data. - * - * @param type a string argument. - * The type of data. Currently only type is js, or nothing. - */ - function set_output_type($type) - { - $this->output_type = $type; - } - - /** - * returns the next line label for multiple lines. - */ - function next_line() - { - $line_num = ''; - if( count( $this->lines ) > 0 ) - $line_num = '_'. (count( $this->lines )+1); - - return $line_num; - } - - // escape commas (,) - function esc( $text ) - { - // we replace the comma so it is not URL escaped - // if it is, flash just thinks it is a comma - // which is no good if we are splitting the - // string on commas. - $tmp = str_replace( ',', '#comma#', $text ); - //$tmp = utf8_encode( $tmp ); - // now we urlescape all dodgy characters (like & % $ etc..) - return urlencode( $tmp ); - } - - /** - * Format the text to the type of output. - */ - function format_output($function,$values) - { - if($this->output_type == 'js') - { - $tmp = 'so.addVariable("'. $function .'","'. $values . '");'; - } - else - { - $tmp = '&'. $function .'='. $values .'&'; - } - - return $tmp; - } - - /** - * Set the text and style of the title. - * - * @param title a string argument. - * The text of the title. - * @param style a string. - * CSS styling of the title. - */ - function set_title( $title, $style='' ) - { - $this->title = $this->esc( $title ); - if( strlen( $style ) > 0 ) - $this->title_style = $style; - } - - /** - * Set the width of the chart. - * - * @param width an int argument. - * The width of the chart frame. - */ - function set_width( $width ) - { - $this->width = $width; - } - - /** - * Set the height of the chart. - * - * @param height an int argument. - * The height of the chart frame. - */ - function set_height( $height ) - { - $this->height = $height; - } - - /** - * Set the base path of the swfobject. - * - * @param base a string argument. - * The base path of the swfobject. - */ - function set_base( $base='/images/' ) - { - $this->base = $base; - } - - // Number formatting: - function set_y_format( $val ) - { - $this->y_format = $val; - } - - function set_num_decimals( $val ) - { - $this->num_decimals = $val; - } - - function set_is_fixed_num_decimals_forced( $val ) - { - $this->is_fixed_num_decimals_forced = $val?'true':'false'; - } - - function set_is_decimal_separator_comma( $val ) - { - $this->is_decimal_separator_comma = $val?'true':'false'; - } - - function set_is_thousand_separator_disabled( $val ) - { - $this->is_thousand_separator_disabled = $val?'true':'false'; - } - - /** - * Set the data for the chart - * @param a an array argument. - * An array of the data to add to the chart. - */ - function set_data( $a ) - { - $this->data[] = implode(',',$a); - } - - // UGH, these evil functions are making me fell ill - function set_links( $links ) - { - // TO DO escape commas: - $this->links[] = implode(',',$links); - } - - // $val is a boolean - function set_x_offset( $val ) - { - $this->x_offset = $val?'true':'false'; - } - - /** - * Set the tooltip to be displayed on each chart item.\n - * \n - * Replaceable tokens that can be used in the string include: \n - * #val# - The actual value of whatever the mouse is over. \n - * #key# - The key string. \n - * \
- New line. \n - * #x_label# - The X label string. \n - * #x_legend# - The X axis legend text. \n - * Default string is: "#x_label#
#val#" \n - * - * @param tip a string argument. - * A formatted string to show as the tooltip. - */ - function set_tool_tip( $tip ) - { - $this->tool_tip = $this->esc( $tip ); - } - - /** - * Set the x axis labels - * - * @param a an array argument. - * An array of the x axis labels. - */ - function set_x_labels( $a ) - { - $tmp = array(); - foreach( $a as $item ) - $tmp[] = $this->esc( $item ); - $this->x_labels = $tmp; - } - - /** - * Set the look and feel of the x axis labels - * - * @param font_size an int argument. - * The font size. - * @param colour a string argument. - * The hex colour value. - * @param orientation an int argument. - * The orientation of the x-axis text. - * 0 - Horizontal - * 1 - Vertical - * 2 - 45 degrees - * @param step an int argument. - * Show the label on every $step label. - * @param grid_colour a string argument. - */ - function set_x_label_style( $size, $colour='', $orientation=0, $step=-1, $grid_colour='' ) - { - $this->x_label_style = $size; - - if( strlen( $colour ) > 0 ) - $this->x_label_style .= ','. $colour; - - if( $orientation > -1 ) - $this->x_label_style .= ','. $orientation; - - if( $step > 0 ) - $this->x_label_style .= ','. $step; - - if( strlen( $grid_colour ) > 0 ) - $this->x_label_style .= ','. $grid_colour; - } - - /** - * Set the background colour. - * @param colour a string argument. - * The hex colour value. - */ - function set_bg_colour( $colour ) - { - $this->bg_colour = $colour; - } - - /** - * Set a background image. - * @param url a string argument. - * The location of the image. - * @param x a string argument. - * The x location of the image. 'Right', 'Left', 'Center' - * @param y a string argument. - * The y location of the image. 'Top', 'Bottom', 'Middle' - */ - function set_bg_image( $url, $x='center', $y='center' ) - { - $this->bg_image = $url; - $this->bg_image_x = $x; - $this->bg_image_y = $y; - } - - /** - * Attach a set of data (a line, area or bar chart) to the right Y axis. - * @param data_number an int argument. - * The numbered order the data was attached using set_data. - */ - function attach_to_y_right_axis( $data_number ) - { - $this->y2_lines[] = $data_number; - } - - /** - * Set the background colour of the grid portion of the chart. - * @param col a string argument. - * The hex colour value of the background. - * @param col2 a string argument. - * The hex colour value of the second colour if you want a gradient. - * @param angle an int argument. - * The angle in degrees to make the gradient. - */ - function set_inner_background( $col, $col2='', $angle=-1 ) - { - $this->inner_bg_colour = $col; - - if( strlen($col2) > 0 ) - $this->inner_bg_colour_2 = $col2; - - if( $angle != -1 ) - $this->inner_bg_angle = $angle; - } - - /** - * Internal function to build the y label style for y and y2 - */ - function _set_y_label_style( $size, $colour ) - { - $tmp = $size; - - if( strlen( $colour ) > 0 ) - $tmp .= ','. $colour; - return $tmp; - } - - /** - * Set the look and feel of the y axis labels - * - * @param font_size an int argument. - * The font size. - * @param colour a string argument. - * The hex colour value. - */ - function set_y_label_style( $size, $colour='' ) - { - $this->y_label_style = $this->_set_y_label_style( $size, $colour ); - } - - /** - * Set the look and feel of the right y axis labels - * - * @param font_size an int argument. - * The font size. - * @param colour a string argument. - * The hex colour value. - */ - function set_y_right_label_style( $size, $colour='' ) - { - $this->y_label_style_right = $this->_set_y_label_style( $size, $colour ); - } - - function set_x_max( $max ) - { - $this->x_max = floatval( $max ); - } - - function set_x_min( $min ) - { - $this->x_min = floatval( $min ); - } - - /** - * Set the maximum value of the y axis. - * - * @param max an float argument. - * The maximum value. - */ - function set_y_max( $max ) - { - $this->y_max = floatval( $max ); - } - - /** - * Set the minimum value of the y axis. - * - * @param min an float argument. - * The minimum value. - */ - function set_y_min( $min ) - { - $this->y_min = floatval( $min ); - } - - /** - * Set the maximum value of the right y axis. - * - * @param max an float argument. - * The maximum value. - */ - function set_y_right_max( $max ) - { - $this->y2_max = floatval($max); - } - - /** - * Set the minimum value of the right y axis. - * - * @param min an float argument. - * The minimum value. - */ - function set_y_right_min( $min ) - { - $this->y2_min = floatval($min); - } - - /** - * Show the y label on every $step label. - * - * @param val an int argument. - * Show the label on every $step label. - */ - function y_label_steps( $val ) - { - $this->y_steps = intval( $val ); - } - - function title( $title, $style='' ) - { - $this->title = $this->esc( $title ); - if( strlen( $style ) > 0 ) - $this->title_style = $style; - } - - /** - * Set the parameters of the x legend. - * - * @param text a string argument. - * The text of the x legend. - * @param font_size an int argument. - * The font size of the x legend text. - * @param colour a string argument - * The hex value of the font colour. - */ - function set_x_legend( $text, $size=-1, $colour='' ) - { - $this->x_legend = $this->esc( $text ); - if( $size > -1 ) - $this->x_legend_size = $size; - - if( strlen( $colour )>0 ) - $this->x_legend_colour = $colour; - } - - /** - * Set the size of the x label ticks. - * - * @param size an int argument. - * The size of the ticks in pixels. - */ - function set_x_tick_size( $size ) - { - if( $size > 0 ) - $this->x_tick_size = $size; - } - - /** - * Set how often you would like to show a tick on the x axis. - * - * @param steps an int argument. - * Show a tick ever $steps. - */ - function set_x_axis_steps( $steps ) - { - if ( $steps > 0 ) - $this->x_axis_steps = $steps; - } - - /** - * Set the depth in pixels of the 3D X axis slab. - * - * @param size an int argument. - * The depth in pixels of the 3D X axis. - */ - function set_x_axis_3d( $size ) - { - if( $size > 0 ) - $this->x_axis_3d = intval($size); - } - - /** - * The private method of building the y legend output. - */ - function _set_y_legend( $text, $size, $colour ) - { - $tmp = $text; - - if( $size > -1 ) - $tmp .= ','. $size; - - if( strlen( $colour )>0 ) - $tmp .= ','. $colour; - - return $tmp; - } - - /** - * Set the parameters of the y legend. - * - * @param text a string argument. - * The text of the y legend. - * @param font_size an int argument. - * The font size of the y legend text. - * @param colour a string argument - * The hex colour value of the font colour. - */ - function set_y_legend( $text, $size=-1, $colour='' ) - { - $this->y_legend = $this->_set_y_legend( $text, $size, $colour ); - } - - /** - * Set the parameters of the right y legend. - * - * @param text a string argument. - * The text of the right y legend. - * @param font_size an int argument. - * The font size of the right y legend text. - * @param colour a string argument - * The hex value of the font colour. - */ - function set_y_right_legend( $text, $size=-1, $colour='' ) - { - $this->y_legend_right = $this->_set_y_legend( $text, $size, $colour ); - } - - /** - * Set the colour of the x axis line and grid. - * - * @param axis a string argument. - * The hex colour value of the x axis line. - * @param grid a string argument. - * The hex colour value of the x axis grid. - */ - function x_axis_colour( $axis, $grid='' ) - { - $this->x_axis_colour = $axis; - $this->x_grid_colour = $grid; - } - - /** - * Set the colour of the y axis line and grid. - * - * @param axis a string argument. - * The hex colour value of the y axis line. - * @param grid a string argument. - * The hex colour value of the y axis grid. - */ - function y_axis_colour( $axis, $grid='' ) - { - $this->y_axis_colour = $axis; - - if( strlen( $grid ) > 0 ) - $this->y_grid_colour = $grid; - } - - /** - * Set the colour of the right y axis line. - * - * @param colour a string argument. - * The hex colour value of the right y axis line. - */ - function y_right_axis_colour( $colour ) - { - $this->y2_axis_colour = $colour; - } - - /** - * Draw a line without markers on values. - * - * @param width an int argument. - * The width of the line in pixels. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label - * @param circles an int argument - * Need to find out. - */ - function line( $width, $colour='', $text='', $size=-1, $circles=-1 ) - { - $type = 'line'. $this->next_line(); - - $description = ''; - if( $width > 0 ) - { - $description .= $width; - $description .= ','. $colour; - } - - if( strlen( $text ) > 0 ) - { - $description.= ','. $text; - $description .= ','. $size; - } - - if( $circles > 0 ) - $description .= ','. $circles; - - $this->lines[$type] = $description; - } - - /** - * Draw a line with solid dot markers on values. - * - * @param width an int argument. - * The width of the line in pixels. - * @param dot_size an int argument. - * Size in pixels of the dot. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function line_dot( $width, $dot_size, $colour, $text='', $font_size='' ) - { - $type = 'line_dot'. $this->next_line(); - - $description = "$width,$colour,$text"; - - if( strlen( $font_size ) > 0 ) - $description .= ",$font_size,$dot_size"; - - $this->lines[$type] = $description; - } - - /** - * Draw a line with hollow dot markers on values. - * - * @param width an int argument. - * The width of the line in pixels. - * @param dot_size an int argument. - * Size in pixels of the dot. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function line_hollow( $width, $dot_size, $colour, $text='', $font_size='' ) - { - $type = 'line_hollow'. $this->next_line(); - - $description = "$width,$colour,$text"; - - if( strlen( $font_size ) > 0 ) - $description .= ",$font_size,$dot_size"; - - $this->lines[$type] = $description; - } - - /** - * Draw an area chart. - * - * @param width an int argument. - * The width of the line in pixels. - * @param dot_size an int argument. - * Size in pixels of the dot. - * @param colour a string argument. - * The hex colour value of the line. - * @param alpha an int argument. - * The percentage of transparency of the fill colour. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - * @param fill_colour a string argument. - * The hex colour value of the fill colour. - */ - function area_hollow( $width, $dot_size, $colour, $alpha, $text='', $font_size='', $fill_colour='' ) - { - $type = 'area_hollow'. $this->next_line(); - - $description = "$width,$dot_size,$colour,$alpha"; - - if( strlen( $text ) > 0 ) - $description .= ",$text,$font_size"; - - if( strlen( $fill_colour ) > 0 ) - $description .= ','. $fill_colour; - - $this->lines[$type] = $description; - } - - /** - * Draw a bar chart. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar( $alpha, $colour='', $text='', $size=-1 ) - { - $type = 'bar'. $this->next_line(); - - $description = $alpha .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - /** - * Draw a bar chart with an outline. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param colour_outline a strng argument. - * The hex colour value of the outline. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_filled( $alpha, $colour, $colour_outline, $text='', $size=-1 ) - { - $type = 'filled_bar'. $this->next_line(); - - $description = "$alpha,$colour,$colour_outline,$text,$size"; - - $this->lines[$type] = $description; - } - - function bar_sketch( $alpha, $offset, $colour, $colour_outline, $text='', $size=-1 ) - { - $type = 'bar_sketch'. $this->next_line(); - - $description = "$alpha,$offset,$colour,$colour_outline,$text,$size"; - - $this->lines[$type] = $description; - } - - /** - * Draw a 3D bar chart. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_3D( $alpha, $colour='', $text='', $size=-1 ) - { - $type = 'bar_3d'. $this->next_line(); - - $description = $alpha .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - /** - * Draw a 3D bar chart that looks like glass. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param outline_colour a string argument. - * The hex colour value of the outline. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_glass( $alpha, $colour, $outline_colour, $text='', $size=-1 ) - { - $type = 'bar_glass'. $this->next_line(); - - $description = $alpha .','. $colour .','. $outline_colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - /** - * Draw a faded bar chart. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_fade( $alpha, $colour='', $text='', $size=-1 ) - { - $type = 'bar_fade'. $this->next_line(); - - $description = $alpha .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - function candle( $data, $alpha, $line_width, $colour, $text='', $size=-1 ) - { - $type = 'candle'. $this->next_line(); - - $description = $alpha .','. $line_width .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - - $a = array(); - foreach( $data as $can ) - $a[] = $can->toString(); - - $this->data[] = implode(',',$a); - } - - function hlc( $data, $alpha, $line_width, $colour, $text='', $size=-1 ) - { - $type = 'hlc'. $this->next_line(); - - $description = $alpha .','. $line_width .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - - $a = array(); - foreach( $data as $can ) - $a[] = $can->toString(); - - $this->data[] = implode(',',$a); - } - - function scatter( $data, $line_width, $colour, $text='', $size=-1 ) - { - $type = 'scatter'. $this->next_line(); - - $description = $line_width .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - - $a = array(); - foreach( $data as $can ) - $a[] = $can->toString(); - - $this->data[] = implode(',',$a); - } - - - // - // Patch by, Jeremy Miller (14th Nov, 2007) - // - /** - * Draw a pie chart. - * - * @param alpha an int argument. - * The percentage of transparency of the pie colour. - * @param $style a string argument. - * CSS style string - * @param label_colour a string argument. - * The hex colour value of the label. - * @param gradient a boolean argument. - * Use a gradient true or false. - * @param border_size an int argument. - * Size of the border in pixels. - */ - function pie( $alpha, $line_colour, $style, $gradient = true, $border_size = false ) - { - $this->pie = $alpha.','.$line_colour.','.$style; - if( !$gradient ) - { - $this->pie .= ','.!$gradient; - } - if ($border_size) - { - if ($gradient === false) - { - $this->pie .= ','; - } - $this->pie .= ','.$border_size; - } - } - - /** - * Set the values of the pie chart. - * - * @param values an array argument. - * An array of the values for the pie chart. - * @param labels an array argument. - * An array of the labels for the pie pieces. - * @param links an array argument. - * An array of the links to the pie pieces. - */ - function pie_values( $values, $labels=array(), $links=array() ) - { - $this->pie_values = implode(',',$values); - $this->pie_labels = implode(',',$labels); - $this->pie_links = implode(",",$links); - } - - /** - * Set the pie slice colours. - * - * @param colours an array argument. - * The hex colour values of the pie pieces. - */ - function pie_slice_colours( $colours ) - { - $this->pie_colours = implode(',',$colours); - } - - - /** - * Render the output. - */ - function render() - { - $tmp = array(); - - //echo headers_sent() ?'yes':'no'; - if( !headers_sent() ) - header('content-type: text; charset: utf-8'); - - if($this->output_type == 'js') - { - $this->set_unique_id(); - - $tmp[] = '
'; - $tmp[] = ''; - $tmp[] = ''; - } - - return implode("\r\n",$tmp); - } -} - -class line -{ - var $line_width; - var $colour; - var $_key; - var $key; - var $key_size; - // hold the data - var $data; - // extra tool tip info: - var $tips; - - function line( $line_width, $colour ) - { - $this->var = 'line'; - - $this->line_width = $line_width; - $this->colour = $colour; - $this->data = array(); - $this->links = array(); - $this->tips = array(); - $this->_key = false; - } - - - function key( $key, $size ) - { - $this->_key = true; - $this->key = graph::esc( $key ); - $this->key_size = $size; - } - - function add( $data ) - { - $this->data[] = $data; - } - - function add_link( $data, $link ) - { - $this->data[] = $data; - $this->links[] = graph::esc( $link ); - } - - function add_data_tip( $data, $tip ) - { - $this->data[] = $data; - $this->tips[] = graph::esc( $tip ); - } - - function add_data_link_tip( $data, $link, $tip ) - { - $this->data[] = $data; - $this->links[] = graph::esc( $link ); - $this->tips[] = graph::esc( $tip ); - } - - // return the variables for this chart - function _get_variable_list() - { - $values = array(); - $values[] = $this->line_width; - $values[] = $this->colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } - - function toString( $output_type, $set_num ) - { - $values = implode( ',', $this->_get_variable_list() ); - - $tmp = array(); - - if( $output_type == 'js' ) - { - $tmp[] = 'so.addVariable("'. $this->var.$set_num .'","'. $values . '");'; - - $tmp[] = 'so.addVariable("values'. $set_num .'","'. implode( ',', $this->data ) .'");'; - - if( count( $this->links ) > 0 ) - $tmp[] = 'so.addVariable("links'. $set_num .'","'. implode( ',', $this->links ) .'");'; - - if( count( $this->tips ) > 0 ) - $tmp[] = 'so.addVariable("tool_tips_set'. $set_num .'","'. implode( ',', $this->tips ) .'");'; - - } - else - { - $tmp[] = '&'. $this->var. $set_num .'='. $values .'&'; - $tmp[] = '&values'. $set_num .'='. implode( ',', $this->data ) .'&'; - - if( count( $this->links ) > 0 ) - $tmp[] = '&links'. $set_num .'='. implode( ',', $this->links ) .'&'; - - if( count( $this->tips ) > 0 ) - $tmp[] = '&tool_tips_set'. $set_num .'='. implode( ',', $this->tips ) .'&'; - } - - return implode( "\r\n", $tmp ); - } -} - -class line_hollow extends line -{ - var $dot_size; - - function line_hollow( $line_width, $dot_size, $colour ) - { - parent::line( $line_width, $colour ); - $this->var = 'line_hollow'; - $this->dot_size = $dot_size; - } - - // return the variables for this chart - function _get_variable_list() - { - $values = array(); - $values[] = $this->line_width; - $values[] = $this->colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - else - { - $values[] = ''; - $values[] = ''; - } - $values[] = $this->dot_size; - - return $values; - } -} - -class line_dot extends line_hollow -{ - function line_dot( $line_width, $dot_size, $colour ) - { - parent::line_dot( $line_width, $colour ); - $this->var = 'line_dot'; - } -} - -class bar -{ - var $colour; - var $alpha; - var $data; - var $links; - var $_key; - var $key; - var $key_size; - var $var; - // extra tool tip info: - var $tips; - - function bar( $alpha, $colour ) - { - $this->var = 'bar'; - - $this->alpha = $alpha; - $this->colour = $colour; - $this->data = array(); - $this->links = array(); - $this->tips = array(); - $this->_key = false; - } - - function key( $key, $size ) - { - $this->_key = true; - $this->key = graph::esc( $key ); - $this->key_size = $size; - } - - function add( $data ) - { - $this->data[] = $data; - } - - function add_link( $data, $link ) - { - $this->data[] = $data; - $this->links[] = graph::esc( $link ); - } - - function add_data_tip( $data, $tip ) - { - $this->data[] = $data; - $this->tips[] = graph::esc( $tip ); - } - - // return the variables for this - // bar chart - function _get_variable_list() - { - $values = array(); - $values[] = $this->alpha; - $values[] = $this->colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } - - function toString( $output_type, $set_num ) - { - $values = implode( ',', $this->_get_variable_list() ); - - $tmp = array(); - - if( $output_type == 'js' ) - { - $tmp[] = 'so.addVariable("'. $this->var.$set_num .'","'. $values . '");'; - - $tmp[] = 'so.addVariable("values'. $set_num .'","'. implode( ',', $this->data ) .'");'; - - if( count( $this->links ) > 0 ) - $tmp[] = 'so.addVariable("links'. $set_num .'","'. implode( ',', $this->links ) .'");'; - - if( count( $this->tips ) > 0 ) - $tmp[] = 'so.addVariable("tool_tips_set'. $set_num .'","'. implode( ',', $this->tips ) .'");'; - - } - else - { - $tmp[] = '&'. $this->var. $set_num .'='. $values .'&'; - $tmp[] = '&values'. $set_num .'='. implode( ',', $this->data ) .'&'; - - if( count( $this->links ) > 0 ) - $tmp[] = '&links'. $set_num .'='. implode( ',', $this->links ) .'&'; - - if( count( $this->tips ) > 0 ) - $tmp[] = '&tool_tips_set'. $set_num .'='. implode( ',', $this->tips ) .'&'; - } - - return implode( "\r\n", $tmp ); - } - -} - -class bar_3d extends bar -{ - function bar_3d( $alpha, $colour ) - { - parent::bar( $alpha, $colour ); - $this->var = 'bar_3d'; - } -} - -class bar_fade extends bar -{ - function bar_fade( $alpha, $colour ) - { - parent::bar( $alpha, $colour ); - $this->var = 'bar_fade'; - } -} - -class bar_outline extends bar -{ - var $outline_colour; - - function bar_outline( $alpha, $colour, $outline_colour ) - { - parent::bar( $alpha, $colour ); - $this->var = 'filled_bar'; - $this->outline_colour = $outline_colour; - } - - // override the base method - function _get_variable_list() - { - $values = array(); - $values[] = $this->alpha; - $values[] = $this->colour; - $values[] = $this->outline_colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } -} - -class bar_glass extends bar_outline -{ - function bar_glass( $alpha, $colour, $outline_colour ) - { - parent::bar_outline( $alpha, $colour, $outline_colour ); - $this->var = 'bar_glass'; - } -} - -// -// this has an outline colour and a 'jiggle' parameter -// called offset -// -class bar_sketch extends bar_outline -{ - var $offset; - - function bar_sketch( $alpha, $offset, $colour, $outline_colour ) - { - parent::bar_outline( $alpha, $colour, $outline_colour ); - $this->var = 'bar_sketch'; - $this->offset = $offset; - } - - // override the base method - function _get_variable_list() - { - $values = array(); - $values[] = $this->alpha; - $values[] = $this->offset; - $values[] = $this->colour; - $values[] = $this->outline_colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } -} - -class candle -{ - var $out; - - function candle( $high, $open, $close, $low ) - { - $this->out = array(); - $this->out[] = $high; - $this->out[] = $open; - $this->out[] = $close; - $this->out[] = $low; - } - - function toString() - { - return '['. implode( ',', $this->out ) .']'; - } -} - -class hlc -{ - var $out; - - function hlc( $high, $low, $close ) - { - $this->out = array(); - $this->out[] = $high; - $this->out[] = $low; - $this->out[] = $close; - } - - function toString() - { - return '['. implode( ',', $this->out ) .']'; - } -} - -class point -{ - var $out; - - function point( $x, $y, $size_px ) - { - $this->out = array(); - $this->out[] = $x; - $this->out[] = $y; - $this->out[] = $size_px; - } - - function toString() - { - return '['. implode( ',', $this->out ) .']'; - } -} - - -function open_flash_chart_object_str( $width, $height, $url, $use_swfobject=true, $base='' ) -{ - // - // return the HTML as a string - // - return _ofc( $width, $height, $url, $use_swfobject, $base ); -} - -function open_flash_chart_object( $width, $height, $url, $use_swfobject=true, $base='' ) -{ - // - // stream the HTML into the page - // - echo _ofc( $width, $height, $url, $use_swfobject, $base ); -} - -function _ofc( $width, $height, $url, $use_swfobject, $base ) -{ - // - // I think we may use swfobject for all browsers, - // not JUST for IE... - // - //$ie = strstr(getenv('HTTP_USER_AGENT'), 'MSIE'); - - // - // escape the & and stuff: - // - $url = urlencode($url); - - // - // output buffer - // - $out = array(); - - // - // check for http or https: - // - if (isset ($_SERVER['HTTPS'])) - { - if (strtoupper ($_SERVER['HTTPS']) == 'ON') - { - $protocol = 'https'; - } - else - { - $protocol = 'http'; - } - } - else - { - $protocol = 'http'; - } - - // - // if there are more than one charts on the - // page, give each a different ID - // - global $open_flash_chart_seqno; - $obj_id = 'chart'; - $div_name = 'flashcontent'; - - //$out[] = ''; - - if( !isset( $open_flash_chart_seqno ) ) - { - $open_flash_chart_seqno = 1; - $out[] = ''; - } - else - { - $open_flash_chart_seqno++; - $obj_id .= '_'. $open_flash_chart_seqno; - $div_name .= '_'. $open_flash_chart_seqno; - } - - if( $use_swfobject ) - { - // Using library for auto-enabling Flash object on IE, disabled-Javascript proof - $out[] = '
'; - $out[] = ''; - $out[] = ''; - } - - return implode("\n",$out); -} - -$x = open_flash_chart_object( 300,300,"/images/open-flash-chart.swf", true); - -?> - - - -
- - diff --git a/workflow/engine/plugins/openFlash/open_flash_chart_object.php b/workflow/engine/plugins/openFlash/open_flash_chart_object.php deleted file mode 100644 index 5cf831634..000000000 --- a/workflow/engine/plugins/openFlash/open_flash_chart_object.php +++ /dev/null @@ -1,109 +0,0 @@ -'; - - if( !isset( $open_flash_chart_seqno ) ) - { - $open_flash_chart_seqno = 1; - $out[] = ''; - } - else - { - $open_flash_chart_seqno++; - $obj_id .= '_'. $open_flash_chart_seqno; - $div_name .= '_'. $open_flash_chart_seqno; - } - - if( $use_swfobject ) - { - // Using library for auto-enabling Flash object on IE, disabled-Javascript proof - $out[] = '
'; - $out[] = ''; - $out[] = ''; - } - - return implode("\n",$out); -} -?> \ No newline at end of file diff --git a/workflow/engine/plugins/openFlash/public_html/open-flash-chart.swf b/workflow/engine/plugins/openFlash/public_html/open-flash-chart.swf deleted file mode 100644 index 85b590a28..000000000 Binary files a/workflow/engine/plugins/openFlash/public_html/open-flash-chart.swf and /dev/null differ diff --git a/workflow/engine/plugins/openFlash/public_html/swfobject.js b/workflow/engine/plugins/openFlash/public_html/swfobject.js deleted file mode 100644 index 02ca073dc..000000000 --- a/workflow/engine/plugins/openFlash/public_html/swfobject.js +++ /dev/null @@ -1,233 +0,0 @@ -/** - * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/ - * - * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License: - * http://www.opensource.org/licenses/mit-license.php - * - */ -if(typeof deconcept == "undefined") var deconcept = new Object(); -if(typeof deconcept.util == "undefined") deconcept.util = new Object(); -if(typeof deconcept.SWFObjectUtil == "undefined") deconcept.SWFObjectUtil = new Object(); -deconcept.SWFObject = function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey) { - if (!document.getElementById) { return; } - this.DETECT_KEY = detectKey ? detectKey : 'detectflash'; - this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY); - this.params = new Object(); - this.variables = new Object(); - this.attributes = new Array(); - if(swf) { this.setAttribute('swf', swf); } - if(id) { this.setAttribute('id', id); } - if(w) { this.setAttribute('width', w); } - if(h) { this.setAttribute('height', h); } - if(ver) { this.setAttribute('version', new deconcept.PlayerVersion(ver.toString().split("."))); } - this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion(); - if (!window.opera && document.all && this.installedVer.major > 7) { - // only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE - deconcept.SWFObject.doPrepUnload = true; - } - if(c) { this.addParam('bgcolor', c); } - var q = quality ? quality : 'high'; - this.addParam('quality', q); - this.setAttribute('useExpressInstall', false); - this.setAttribute('doExpressInstall', false); - var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location; - this.setAttribute('xiRedirectUrl', xir); - this.setAttribute('redirectUrl', ''); - if(redirectUrl) { this.setAttribute('redirectUrl', redirectUrl); } -} -deconcept.SWFObject.prototype = { - useExpressInstall: function(path) { - this.xiSWFPath = !path ? "expressinstall.swf" : path; - this.setAttribute('useExpressInstall', true); - }, - setAttribute: function(name, value){ - this.attributes[name] = value; - }, - getAttribute: function(name){ - return this.attributes[name]; - }, - addParam: function(name, value){ - this.params[name] = value; - }, - getParams: function(){ - return this.params; - }, - addVariable: function(name, value){ - this.variables[name] = value; - }, - getVariable: function(name){ - return this.variables[name]; - }, - getVariables: function(){ - return this.variables; - }, - getVariablePairs: function(){ - var variablePairs = new Array(); - var key; - var variables = this.getVariables(); - for(key in variables){ - variablePairs[variablePairs.length] = key +"="+ variables[key]; - } - return variablePairs; - }, - getSWFHTML: function() { - var swfNode = ""; - if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture - if (this.getAttribute("doExpressInstall")) { - this.addVariable("MMplayerType", "PlugIn"); - this.setAttribute('swf', this.xiSWFPath); - } - swfNode = ' 0){ swfNode += 'flashvars="'+ pairs +'"'; } - swfNode += '/>'; - } else { // PC IE - if (this.getAttribute("doExpressInstall")) { - this.addVariable("MMplayerType", "ActiveX"); - this.setAttribute('swf', this.xiSWFPath); - } - swfNode = ''; - swfNode += ''; - var params = this.getParams(); - for(var key in params) { - swfNode += ''; - } - var pairs = this.getVariablePairs().join("&"); - if(pairs.length > 0) {swfNode += '';} - swfNode += ""; - } - return swfNode; - }, - write: function(elementId){ - if(this.getAttribute('useExpressInstall')) { - // check to see if we need to do an express install - var expressInstallReqVer = new deconcept.PlayerVersion([6,0,65]); - if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) { - this.setAttribute('doExpressInstall', true); - this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl'))); - document.title = document.title.slice(0, 47) + " - Flash Player Installation"; - this.addVariable("MMdoctitle", document.title); - } - } - if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version'))){ - var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId; - n.innerHTML = this.getSWFHTML(); - return true; - }else{ - if(this.getAttribute('redirectUrl') != "") { - document.location.replace(this.getAttribute('redirectUrl')); - } - } - return false; - } -} - -/* ---- detection functions ---- */ -deconcept.SWFObjectUtil.getPlayerVersion = function(){ - var PlayerVersion = new deconcept.PlayerVersion([0,0,0]); - if(navigator.plugins && navigator.mimeTypes.length){ - var x = navigator.plugins["Shockwave Flash"]; - if(x && x.description) { - PlayerVersion = new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split(".")); - } - }else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0){ // if Windows CE - var axo = 1; - var counter = 3; - while(axo) { - try { - counter++; - axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter); -// document.write("player v: "+ counter); - PlayerVersion = new deconcept.PlayerVersion([counter,0,0]); - } catch (e) { - axo = null; - } - } - } else { // Win IE (non mobile) - // do minor version lookup in IE, but avoid fp6 crashing issues - // see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/ - try{ - var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); - }catch(e){ - try { - var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); - PlayerVersion = new deconcept.PlayerVersion([6,0,21]); - axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code) - } catch(e) { - if (PlayerVersion.major == 6) { - return PlayerVersion; - } - } - try { - axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); - } catch(e) {} - } - if (axo != null) { - PlayerVersion = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(",")); - } - } - return PlayerVersion; -} -deconcept.PlayerVersion = function(arrVersion){ - this.major = arrVersion[0] != null ? parseInt(arrVersion[0]) : 0; - this.minor = arrVersion[1] != null ? parseInt(arrVersion[1]) : 0; - this.rev = arrVersion[2] != null ? parseInt(arrVersion[2]) : 0; -} -deconcept.PlayerVersion.prototype.versionIsValid = function(fv){ - if(this.major < fv.major) return false; - if(this.major > fv.major) return true; - if(this.minor < fv.minor) return false; - if(this.minor > fv.minor) return true; - if(this.rev < fv.rev) return false; - return true; -} -/* ---- get value of query string param ---- */ -deconcept.util = { - getRequestParameter: function(param) { - var q = document.location.search || document.location.hash; - if (param == null) { return q; } - if(q) { - var pairs = q.substring(1).split("&"); - for (var i=0; i < pairs.length; i++) { - if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) { - return pairs[i].substring((pairs[i].indexOf("=")+1)); - } - } - } - return ""; - } -} -/* fix for video streaming bug */ -deconcept.SWFObjectUtil.cleanupSWFs = function() { - var objects = document.getElementsByTagName("OBJECT"); - for (var i = objects.length - 1; i >= 0; i--) { - objects[i].style.display = 'none'; - for (var x in objects[i]) { - if (typeof objects[i][x] == 'function') { - objects[i][x] = function(){}; - } - } - } -} -// fixes bug in some fp9 versions see http://blog.deconcept.com/2006/07/28/swfobject-143-released/ -if (deconcept.SWFObject.doPrepUnload) { - if (!deconcept.unloadSet) { - deconcept.SWFObjectUtil.prepUnload = function() { - __flash_unloadHandler = function(){}; - __flash_savedUnloadHandler = function(){}; - window.attachEvent("onunload", deconcept.SWFObjectUtil.cleanupSWFs); - } - window.attachEvent("onbeforeunload", deconcept.SWFObjectUtil.prepUnload); - deconcept.unloadSet = true; - } -} -/* add document.getElementById if needed (mobile IE < 5) */ -if (!document.getElementById && document.all) { document.getElementById = function(id) { return document.all[id]; }} - -/* add some aliases for ease of use/backwards compatibility */ -var getQueryParamValue = deconcept.util.getRequestParameter; -var FlashObject = deconcept.SWFObject; // for legacy support -var SWFObject = deconcept.SWFObject; diff --git a/workflow/engine/plugins/openFlash/setupPage.xml b/workflow/engine/plugins/openFlash/setupPage.xml deleted file mode 100644 index a5a5000c1..000000000 --- a/workflow/engine/plugins/openFlash/setupPage.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - <en>Open Flash Charts Plugin</en> - - - - Open Charts Plugin, with this plugin you can see many differents charts using interative flash charts - - - - - Save - - \ No newline at end of file diff --git a/workflow/engine/plugins/pmosCommunity.php b/workflow/engine/plugins/pmosCommunity.php deleted file mode 100644 index c45f5b14c..000000000 --- a/workflow/engine/plugins/pmosCommunity.php +++ /dev/null @@ -1,35 +0,0 @@ -sFriendlyName = 'PMOS Community Plugin'; - $this->sDescription = 'Community Charts Plugin, with this plugin you can see many differents charts related to ProcessMaker Open Source Community'; - $this->sPluginFolder = 'pmosCommunity'; - $this->sSetupPage = 'setupPage'; - $this->iVersion = 0.45; - $this->aWorkspaces = array ( 'os' ); - return $res; - } - - function setup() - { - //$this->registerTrigger( 10000, 'createCaseFolder' ); - $this->registerDashboard(); - } - - function install() - { - - } - } - - $oPluginRegistry =& PMPluginRegistry::getSingleton(); - $oPluginRegistry->registerPlugin('pmosCommunity', __FILE__); - - - - - diff --git a/workflow/engine/plugins/pmosCommunity/chart-data.php b/workflow/engine/plugins/pmosCommunity/chart-data.php deleted file mode 100644 index 033686972..000000000 --- a/workflow/engine/plugins/pmosCommunity/chart-data.php +++ /dev/null @@ -1,14 +0,0 @@ -{$chartType}(); - die; - } - diff --git a/workflow/engine/plugins/pmosCommunity/chart.php b/workflow/engine/plugins/pmosCommunity/chart.php deleted file mode 100644 index 691953f8c..000000000 --- a/workflow/engine/plugins/pmosCommunity/chart.php +++ /dev/null @@ -1,11 +0,0 @@ -sPluginFolder . PATH_SEP . 'config' . PATH_SEP . 'setup.conf'; - if ( !file_exists( dirname($fileConf) ) ) - throw ( new Exception ("The directory " . dirname($fileConf) . " doesn't exist." ) ); - - if ( file_exists ( $fileConf ) && !is_writable( $fileConf ) ) - throw ( new Exception ("The file $fileConf doesn't exist or this file is not writable." ) ); - - if ( file_exists ( $fileConf ) ) { - $content = file_get_contents ( $fileConf); - $fields = unserialize ($content); - } - else - $fields = array(); - return $fields; - } - - function updateFieldsForPageSetup ( $oData) { - $content = serialize ($oData['form']); - $fileConf = PATH_PLUGINS . $this->sPluginFolder . PATH_SEP . 'config' . PATH_SEP . 'setup.conf'; - if ( !is_writable( dirname($fileConf) ) ) - throw ( new Exception ("The directory " . dirname($fileConf) . " doesn't exist or this directory is not writable." ) ); - - if ( file_exists ( $fileConf ) && !is_writable( $fileConf ) ) - throw ( new Exception ("The file $fileConf doesn't exist or this file is not writable." ) ); - - file_put_contents ( $fileConf, $content); - return true; - } - - function setup() { - } - - function getChart( $chartName ) { - $this->readConfig(); - $prePath = '/sys' . SYS_SYS . '/' . SYS_LANG . '/blank/'; - $obj = new StdClass(); - switch ($chartName) { - case 'PostByForum': - $obj->title = 'Community ProcessMaker Forum - Per Forum'; - break; - case 'ForumWeek': - $obj->title = 'Community ProcessMaker Forum - Per Week'; - break; - case 'PostByUser': - $obj->title = 'Community ProcessMaker Forum - Per User'; - break; - case 'BugsOpenByUser': - $obj->title = 'Community ProcessMaker Forum - Per Post Author'; - break; - case 'BugsByStatus': - $obj->title = 'Community ProcessMaker Forum - Bugs'; - break; - } - $obj->height = 220; - $obj->image = $prePath . 'pmosCommunity/drawChart?chart=' . $chartName . "&u="; - return $obj; - } - - //here we are defining the available charts, the dashboard setup will call this function to know the charts - function getAvailableCharts( ) { - return array ( - 'PostByForum', - 'ForumWeek', - 'PostByUser', - 'BugsOpenByUser', - 'BugsByStatus' - ); - } - - /* definition of all charts */ - /* that definition comes in two parts : - /* 1. the getXX () function to get the data from the databases - /* 2. the XX () function to draw the graph - */ - - /** chart PostByForum ***/ - /** to show the last 2 months post grouped by forum and for topic */ - function getPostByForum ( ) { - $dataSet = array(); - $past1months = mktime(0, 0, 0, date("m") -1 , date("d"), date("Y")); - - $databases = PATH_PLUGINS . 'pmosCommunity' . PATH_SEP . 'config' . PATH_SEP . 'databases.php'; - Propel::init( $databases ); - - $con = Propel::getConnection('forum'); - $sql = "select forum_name, count(*) as cant from phpbb_posts left join phpbb_forums on ( phpbb_posts.forum_id = phpbb_forums.forum_id ) where post_time > $past1months group by forum_name " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - if ( strlen ( trim ($row['forum_name']) ) > 0 ) { - $label[] = $row['forum_name']; - $data[] = $row['cant']; - } - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['data'] = $data; - $dataSet['label'] = $label; - - $sql = "select forum_name, count( distinct( topic_id)) as cant from phpbb_posts left join phpbb_forums on ( phpbb_posts.forum_id = phpbb_forums.forum_id ) where post_time > $past1months group by forum_name " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - if ( strlen ( trim ($row['forum_name']) ) > 0 ) { - //$label[] = $row['forum_name']; - $series2[] = $row['cant']; - } - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['series2'] = $series2; - - $max = 1; - foreach ( $dataSet['data'] as $k => $val ) if ( $val > $max ) $max = $val; - $aux = intval($max / 6 ) * 6 + 6; - $dataSet['max'] = $aux; - - return $dataSet; - } - - function PostByForum( ) { - - $chart = new VerticalBarChart(430, 220); - - $dataSet = $this->getPostByForum(); - $dataPostSet = new XYDataSet(); - $dataTopicSet = new XYDataSet(); - foreach ( $dataSet['label'] as $key => $label ) { - $dataPostSet->addPoint(new Point( $label, $dataSet['data'][$key] )) ; - $dataTopicSet->addPoint(new Point( $label, $dataSet['series2'][$key] )) ; - } - - $multidataSet = new XYSeriesDataSet(); - $multidataSet->addSerie("Posts", $dataPostSet); - $multidataSet->addSerie("Topics", $dataTopicSet); - - $chart->setDataSet($multidataSet); - $chart->setTitle( "Posts by Forum ( last month ) " ); - $chart->render(); - } - - function PostByForumFlash( ) { - $dataSet = $this->getPostByForum(); - $data = $dataSet['data']; - $series2 = $dataSet['series2']; - $g = new graph(); - $g->title( ' Posts by Forum ( last month )', '{font-size: 16px;}' ); - $bar_red = new bar_3d( 50, '#3334AD' ); - $bar_red->key( 'posts', 10 ); - $bar_red->data = $data; - - $bar_blue = new bar_3d( 75, '#D54C78' ); - $bar_blue->key( 'topics', 11 ); - $bar_blue->data = $series2; - - $g->data_sets[] = $bar_red; - $g->data_sets[] = $bar_blue; - - $g->set_x_axis_3d( 12 ); - $g->x_axis_colour( '#909090', '#ADB5C7' ); - $g->y_axis_colour( '#909090', '#ADB5C7' ); - $g->set_x_labels( $dataSet['label'] ); - - $g->set_y_max( $dataSet['max'] ); - $g->y_label_steps( 6 ); - //$g->set_y_legend( 'Posts', 12, '#736AFF' ); - echo $g->render(); - } - - /** chart ForumWeek ***/ - /** to show the last 2 months post grouped by week */ - function getForumWeek ( ) { - $databases = PATH_PLUGINS . 'pmosCommunity' . PATH_SEP . 'config' . PATH_SEP . 'databases.php'; - Propel::init( $databases ); - - $dataSet = array(); - $processObj = new Process; - $past2months = mktime(0, 0, 0, date("m") -2 , date("d"), date("Y")); - - $con = Propel::getConnection('forum'); - $sql = "select week(FROM_UNIXTIME(post_time )) as week ,count(*) as cant from phpbb_posts where post_time > $past2months group by week " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - $label[] = date ( 'M d', mktime(0, 0, 0, 1 , $row['week']*7, date("Y")) ); - $data[] = $row['cant']; - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['data'] = $data; - $dataSet['label'] = $label; - return $dataSet; - } - - function ForumWeek( ) { - - $chart = new VerticalBarChart(430, 220); - - $dataSet = $this->getForumWeek(); - $dataPostSet = new XYDataSet(); - $dataTopicSet = new XYDataSet(); - foreach ( $dataSet['label'] as $key => $label ) { - $dataPostSet->addPoint(new Point( $label, $dataSet['data'][$key] )) ; - } - - $chart->setDataSet($dataPostSet); - $chart->setTitle( " Posts by Week " ); - $chart->render(); - } - - function ForumWeekFlash ( ) { - $dataSet = $this->getForumWeek(); - $data = $dataSet['data']; - $max = 1; - foreach ( $dataSet['data'] as $k => $val ) if ( $val > $max ) $max = $val; - $g = new graph(); - $g->title( ' Posts by Week ', '{font-size: 16px;}' ); - $bar_red = new bar_3d( 50, '#3334AD' ); - $bar_red->key( 'week', 10 ); - $bar_red->data = $data; - - $g->data_sets[] = $bar_red; - - $g->set_x_axis_3d( 12 ); - $g->x_axis_colour( '#909090', '#ADB5C7' ); - $g->y_axis_colour( '#909090', '#ADB5C7' ); - $g->set_x_labels( $dataSet['label'] ); - - $g->set_y_max( $max ); - $g->y_label_steps( 5 ); - $g->set_y_legend( 'Posts', 12, '#736AFF' ); - echo $g->render(); - } - - /** chart PostByUser ***/ - /** to show the last 7 days grouped by user */ - function getPostByUser ( ) { - $databases = PATH_PLUGINS . 'pmosCommunity' . PATH_SEP . 'config' . PATH_SEP . 'databases.php'; - Propel::init( $databases ); - - $dataSet = array(); - $con = Propel::getConnection('forum'); - - $past7days = mktime(0, 0, 0, date("m") , date("d")-7, date("Y")); - $sql = "select username, count(*) as cant from phpbb_posts left join phpbb_users on ( poster_id = user_id ) where post_time > $past7days group by username " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - $label[] = $row['username']; - $data[] = $row['cant']; - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['data'] = $data; - //$dataSet['data'] = $data; - $dataSet['label'] = $label; - return $dataSet; - } - - function PostByUser ( ) { - - $chart = new VerticalBarChart(430, 220); - - $dataSet = $this->getPostByUser(); - $dataPostSet = new XYDataSet(); - $dataTopicSet = new XYDataSet(); - foreach ( $dataSet['label'] as $key => $label ) { - $dataPostSet->addPoint(new Point( $label, $dataSet['data'][$key] )) ; - } - - $chart->setDataSet($dataPostSet); - //$chart->setTitle( " Posts by User" ); - $chart->render(); - } - - function PostByUserFlash ( ) { - $dataSet = $this->getPostByUser(); - $data = $dataSet['data']; - $g = new graph(); - $g->title( ' Posts by User last week '. date("Y-m-d"), '{font-size: 16px;}' ); - $max = 1; - foreach ( $dataSet['data'] as $k => $val ) if ( $val > $max ) $max = $val; - $max = intval($max / 4 ) * 4 + 4; - - $bar_red = new bar_3d( 50, '#356aa0' ); - $bar_red->key( 'posts', 10 ); - $bar_red->data = $data; - - $bar_blue = new bar_3d( 75, '#D54C78' ); - $bar_blue->key( 'completed', 10 ); - $bar_blue->data = $data; - - $g->data_sets[] = $bar_red; - //$g->data_sets[] = $bar_blue; - - $g->set_x_axis_3d( 12 ); - $g->x_axis_colour( '#909090', '#ADB5C7' ); - $g->y_axis_colour( '#909090', '#ADB5C7' ); - $g->set_x_labels( $dataSet['label'] ); - - $g->set_y_max( $max ); - $g->y_label_steps( 4 ); - $g->set_y_legend( 'Processmaker', 12, '#736AFF' ); - echo $g->render(); - } - - /** chart BugsByStatus ***/ - /** to show the bugs by status resolved, open, closed */ - function getBugsByStatus ( ) { - $databases = PATH_PLUGINS . 'pmosCommunity' . PATH_SEP . 'config' . PATH_SEP . 'databases.php'; - Propel::init( $databases ); - - $dataSet = array(); - $con = Propel::getConnection('bugs'); - - //open - $sql = "SELECT count(*) as cant FROM mantis_bug_table where project_id = 31 and status in (20,30,40,50) " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - $label[] = 'open'; - $data[] = $row['cant']; - - //resolved - $sql = "SELECT count(*) as cant FROM mantis_bug_table where project_id = 31 and status = 80" ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - $label[] = 'resolved'; - $data[] = $row['cant']; - - //closed - $sql = "SELECT count(*) as cant FROM mantis_bug_table where project_id = 31 and status = 90" ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - $label[] = 'closed'; - $data[] = $row['cant']; - - $dataSet['data'] = $data; - $dataSet['label'] = $label; - return $dataSet; - } - - function BugsByStatus ( ) { - - $chart = new VerticalBarChart(430, 220); - - $dataSet = $this->getBugsByStatus(); - $dataPostSet = new XYDataSet(); - $dataTopicSet = new XYDataSet(); - foreach ( $dataSet['label'] as $key => $label ) { - $dataPostSet->addPoint(new Point( $label, $dataSet['data'][$key] )) ; - } - - $chart->setDataSet($dataPostSet); - //$chart->setTitle( " Posts by User" ); - $chart->render(); - } - - function BugsByStatusFlash ( ) { - $dataSet = $this->getBugsByStatus(); - $data = $dataSet['data']; - $g = new graph(); - $g->title( ' Posts by User last week '. date("Y-m-d"), '{font-size: 16px;}' ); - - $g->pie(70,'#505050','{font-size: 12px; color: #404040;'); - $g->pie_values( $data, $dataSet['label'] ); - $g->pie_slice_colours( array('#d01f3c','#356aa0','#C79810') ); - $g->set_tool_tip( '#val# #x_label#' ); - $g->title( 'Bugs by Status', '{font-size:18px; color: #d01f3c}' ); - echo $g->render(); - } - - /** chart BugsOpenByUser ***/ - /** to show the bugs in OPEN status by user */ - function getBugsOpenByUser ( ) { - $databases = PATH_PLUGINS . 'pmosCommunity' . PATH_SEP . 'config' . PATH_SEP . 'databases.php'; - Propel::init( $databases ); - - $dataSet = array(); - $con = Propel::getConnection('bugs'); - - $sql = "SELECT username, count(*) as cant FROM mantis_bug_table left join mantis_user_table on ( mantis_user_table.id = handler_id) where project_id = 31 and status in (20,30,40,50) group by username " ; - $stmt = $con->createStatement(); - $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_ASSOC); - $rs->next(); - $row = $rs->getRow(); - while ( is_array ( $row ) ) { - $label[] = $row['username']; - $data[] = $row['cant']; - $rs->next(); - $row = $rs->getRow(); - } - $dataSet['data'] = $data; - $dataSet['label'] = $label; - return $dataSet; - } - - function BugsOpenByUser ( ) { - - $chart = new VerticalBarChart(430, 220); - - $dataSet = $this->getBugsOpenByUser(); - $dataPostSet = new XYDataSet(); - $dataTopicSet = new XYDataSet(); - foreach ( $dataSet['label'] as $key => $label ) { - $dataPostSet->addPoint(new Point( $label, $dataSet['data'][$key] )) ; - } - - $chart->setDataSet($dataPostSet); - //$chart->setTitle( " Posts by User" ); - $chart->render(); - - } - - function BugsOpenByUserFlash ( ) { - $dataSet = $this->getBugsOpenByUser(); - $data = $dataSet['data']; - $g = new graph(); - $g->bg_colour = '#EFFFEF'; - $g->title( ' Posts by User last week '. date("Y-m-d"), '{font-size: 16px;}' ); - - $g->pie(70,'#505050','{font-size: 12px; color: #404040;'); - $g->pie_values( $data, $dataSet['label'] ); - $g->pie_slice_colours( array('#d01f3c','#356aa0','#C79810') ); - $g->set_tool_tip( '#val# #x_label#' ); - $g->title( 'Bugs by Status', '{font-size:18px; color: #d01f3c}' ); - echo $g->render(); - /* - $dataSet = $this->getBugsOpenByUser(); - $data = $dataSet['data']; - $g = new graph(); - $g->pie(80,'#505050','{font-size: 12px; color: #404040;'); - $g->pie_values( $data, $dataSet['label'] ); - $g->pie_slice_colours( array('#d01f3c','#356aa0','#C79810','#D54C78') ); - $g->set_tool_tip( '#val# #x_label#' ); - $g->title( 'Open Bugs by User', '{font-size:18px; color: #d01f3c}' ); - echo $g->render();*/ - } - -} diff --git a/workflow/engine/plugins/pmosCommunity/config/databases.php b/workflow/engine/plugins/pmosCommunity/config/databases.php deleted file mode 100644 index 091d2768a..000000000 --- a/workflow/engine/plugins/pmosCommunity/config/databases.php +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/workflow/engine/plugins/pmosCommunity/config/setup.conf b/workflow/engine/plugins/pmosCommunity/config/setup.conf deleted file mode 100644 index 70cf5bfbf..000000000 --- a/workflow/engine/plugins/pmosCommunity/config/setup.conf +++ /dev/null @@ -1 +0,0 @@ -a:1:{s:6:"ACCEPT";s:4:"Save";} \ No newline at end of file diff --git a/workflow/engine/plugins/pmosCommunity/drawChart.php b/workflow/engine/plugins/pmosCommunity/drawChart.php deleted file mode 100644 index 48500961f..000000000 --- a/workflow/engine/plugins/pmosCommunity/drawChart.php +++ /dev/null @@ -1,14 +0,0 @@ -{$chartType}(); - die; - } - \ No newline at end of file diff --git a/workflow/engine/plugins/pmosCommunity/open-flash-chart.php b/workflow/engine/plugins/pmosCommunity/open-flash-chart.php deleted file mode 100644 index b1cd90627..000000000 --- a/workflow/engine/plugins/pmosCommunity/open-flash-chart.php +++ /dev/null @@ -1,1769 +0,0 @@ -data_sets = array(); - - - $this->data = array(); - $this->links = array(); - $this->width = 250; - $this->height = 200; - $this->js_path = '/images/'; - $this->swf_path = ''; - $this->x_labels = array(); - $this->y_min = ''; - $this->y_max = ''; - $this->x_min = ''; - $this->x_max = ''; - $this->y_steps = ''; - $this->title = ''; - $this->title_style = ''; - $this->occurence = 0; - - $this->x_offset = ''; - - $this->x_tick_size = -1; - - $this->y2_max = ''; - $this->y2_min = ''; - - // GRID styles: - $this->x_axis_colour = ''; - $this->x_axis_3d = ''; - $this->x_grid_colour = ''; - $this->x_axis_steps = 1; - $this->y_axis_colour = ''; - $this->y_grid_colour = ''; - $this->y2_axis_colour = ''; - - // AXIS LABEL styles: - $this->x_label_style = ''; - $this->y_label_style = ''; - $this->y_label_style_right = ''; - - - // AXIS LEGEND styles: - $this->x_legend = ''; - $this->x_legend_size = 20; - $this->x_legend_colour = '#000000'; - - $this->y_legend = ''; - $this->y_legend_right = ''; - //$this->y_legend_size = 20; - //$this->y_legend_colour = '#000000'; - - $this->lines = array(); - $this->line_default['type'] = 'line'; - $this->line_default['values'] = '3,#87421F'; - $this->js_line_default = 'so.addVariable("line","3,#87421F");'; - - $this->bg_colour = ''; - $this->bg_image = ''; - - $this->inner_bg_colour = ''; - $this->inner_bg_colour_2 = ''; - $this->inner_bg_angle = ''; - - // PIE chart ------------ - $this->pie = ''; - $this->pie_values = ''; - $this->pie_colours = ''; - $this->pie_labels = ''; - - $this->tool_tip = ''; - - // which data lines are attached to the - // right Y axis? - $this->y2_lines = array(); - - // Number formatting: - $this->y_format=''; - $this->num_decimals=''; - $this->is_fixed_num_decimals_forced=''; - $this->is_decimal_separator_comma=''; - $this->is_thousand_separator_disabled=''; - - $this->output_type = ''; - - // - // set some default value incase the user forgets - // to set them, so at least they see *something* - // even is it is only the axis and some ticks - // - $this->set_y_min( 0 ); - $this->set_y_max( 20 ); - $this->set_x_axis_steps( 1 ); - $this->y_label_steps( 5 ); - } - - /** - * Set the unique_id to use for the flash object id. - */ - function set_unique_id() - { - $this->unique_id = uniqid(rand(), true); - } - - /** - * Get the flash object ID for the last rendered object. - */ - function get_unique_id() - { - return ($this->unique_id); - } - - /** - * Set the base path for the swfobject.js - * - * @param base_path a string argument. - * The path to the swfobject.js file - */ - function set_js_path($path) - { - $this->js_path = $path; - } - - /** - * Set the base path for the open-flash-chart.swf - * - * @param path a string argument. - * The path to the open-flash-chart.swf file - */ - function set_swf_path($path) - { - $this->swf_path = $path; - } - - /** - * Set the type of output data. - * - * @param type a string argument. - * The type of data. Currently only type is js, or nothing. - */ - function set_output_type($type) - { - $this->output_type = $type; - } - - /** - * returns the next line label for multiple lines. - */ - function next_line() - { - $line_num = ''; - if( count( $this->lines ) > 0 ) - $line_num = '_'. (count( $this->lines )+1); - - return $line_num; - } - - // escape commas (,) - function esc( $text ) - { - // we replace the comma so it is not URL escaped - // if it is, flash just thinks it is a comma - // which is no good if we are splitting the - // string on commas. - $tmp = str_replace( ',', '#comma#', $text ); - //$tmp = utf8_encode( $tmp ); - // now we urlescape all dodgy characters (like & % $ etc..) - return urlencode( $tmp ); - } - - /** - * Format the text to the type of output. - */ - function format_output($function,$values) - { - if($this->output_type == 'js') - { - $tmp = 'so.addVariable("'. $function .'","'. $values . '");'; - } - else - { - $tmp = '&'. $function .'='. $values .'&'; - } - - return $tmp; - } - - /** - * Set the text and style of the title. - * - * @param title a string argument. - * The text of the title. - * @param style a string. - * CSS styling of the title. - */ - function set_title( $title, $style='' ) - { - $this->title = $this->esc( $title ); - if( strlen( $style ) > 0 ) - $this->title_style = $style; - } - - /** - * Set the width of the chart. - * - * @param width an int argument. - * The width of the chart frame. - */ - function set_width( $width ) - { - $this->width = $width; - } - - /** - * Set the height of the chart. - * - * @param height an int argument. - * The height of the chart frame. - */ - function set_height( $height ) - { - $this->height = $height; - } - - /** - * Set the base path of the swfobject. - * - * @param base a string argument. - * The base path of the swfobject. - */ - function set_base( $base='/images/' ) - { - $this->base = $base; - } - - // Number formatting: - function set_y_format( $val ) - { - $this->y_format = $val; - } - - function set_num_decimals( $val ) - { - $this->num_decimals = $val; - } - - function set_is_fixed_num_decimals_forced( $val ) - { - $this->is_fixed_num_decimals_forced = $val?'true':'false'; - } - - function set_is_decimal_separator_comma( $val ) - { - $this->is_decimal_separator_comma = $val?'true':'false'; - } - - function set_is_thousand_separator_disabled( $val ) - { - $this->is_thousand_separator_disabled = $val?'true':'false'; - } - - /** - * Set the data for the chart - * @param a an array argument. - * An array of the data to add to the chart. - */ - function set_data( $a ) - { - $this->data[] = implode(',',$a); - } - - // UGH, these evil functions are making me fell ill - function set_links( $links ) - { - // TO DO escape commas: - $this->links[] = implode(',',$links); - } - - // $val is a boolean - function set_x_offset( $val ) - { - $this->x_offset = $val?'true':'false'; - } - - /** - * Set the tooltip to be displayed on each chart item.\n - * \n - * Replaceable tokens that can be used in the string include: \n - * #val# - The actual value of whatever the mouse is over. \n - * #key# - The key string. \n - * \
- New line. \n - * #x_label# - The X label string. \n - * #x_legend# - The X axis legend text. \n - * Default string is: "#x_label#
#val#" \n - * - * @param tip a string argument. - * A formatted string to show as the tooltip. - */ - function set_tool_tip( $tip ) - { - $this->tool_tip = $this->esc( $tip ); - } - - /** - * Set the x axis labels - * - * @param a an array argument. - * An array of the x axis labels. - */ - function set_x_labels( $a ) - { - $tmp = array(); - foreach( $a as $item ) - $tmp[] = $this->esc( $item ); - $this->x_labels = $tmp; - } - - /** - * Set the look and feel of the x axis labels - * - * @param font_size an int argument. - * The font size. - * @param colour a string argument. - * The hex colour value. - * @param orientation an int argument. - * The orientation of the x-axis text. - * 0 - Horizontal - * 1 - Vertical - * 2 - 45 degrees - * @param step an int argument. - * Show the label on every $step label. - * @param grid_colour a string argument. - */ - function set_x_label_style( $size, $colour='', $orientation=0, $step=-1, $grid_colour='' ) - { - $this->x_label_style = $size; - - if( strlen( $colour ) > 0 ) - $this->x_label_style .= ','. $colour; - - if( $orientation > -1 ) - $this->x_label_style .= ','. $orientation; - - if( $step > 0 ) - $this->x_label_style .= ','. $step; - - if( strlen( $grid_colour ) > 0 ) - $this->x_label_style .= ','. $grid_colour; - } - - /** - * Set the background colour. - * @param colour a string argument. - * The hex colour value. - */ - function set_bg_colour( $colour ) - { - $this->bg_colour = $colour; - } - - /** - * Set a background image. - * @param url a string argument. - * The location of the image. - * @param x a string argument. - * The x location of the image. 'Right', 'Left', 'Center' - * @param y a string argument. - * The y location of the image. 'Top', 'Bottom', 'Middle' - */ - function set_bg_image( $url, $x='center', $y='center' ) - { - $this->bg_image = $url; - $this->bg_image_x = $x; - $this->bg_image_y = $y; - } - - /** - * Attach a set of data (a line, area or bar chart) to the right Y axis. - * @param data_number an int argument. - * The numbered order the data was attached using set_data. - */ - function attach_to_y_right_axis( $data_number ) - { - $this->y2_lines[] = $data_number; - } - - /** - * Set the background colour of the grid portion of the chart. - * @param col a string argument. - * The hex colour value of the background. - * @param col2 a string argument. - * The hex colour value of the second colour if you want a gradient. - * @param angle an int argument. - * The angle in degrees to make the gradient. - */ - function set_inner_background( $col, $col2='', $angle=-1 ) - { - $this->inner_bg_colour = $col; - - if( strlen($col2) > 0 ) - $this->inner_bg_colour_2 = $col2; - - if( $angle != -1 ) - $this->inner_bg_angle = $angle; - } - - /** - * Internal function to build the y label style for y and y2 - */ - function _set_y_label_style( $size, $colour ) - { - $tmp = $size; - - if( strlen( $colour ) > 0 ) - $tmp .= ','. $colour; - return $tmp; - } - - /** - * Set the look and feel of the y axis labels - * - * @param font_size an int argument. - * The font size. - * @param colour a string argument. - * The hex colour value. - */ - function set_y_label_style( $size, $colour='' ) - { - $this->y_label_style = $this->_set_y_label_style( $size, $colour ); - } - - /** - * Set the look and feel of the right y axis labels - * - * @param font_size an int argument. - * The font size. - * @param colour a string argument. - * The hex colour value. - */ - function set_y_right_label_style( $size, $colour='' ) - { - $this->y_label_style_right = $this->_set_y_label_style( $size, $colour ); - } - - function set_x_max( $max ) - { - $this->x_max = floatval( $max ); - } - - function set_x_min( $min ) - { - $this->x_min = floatval( $min ); - } - - /** - * Set the maximum value of the y axis. - * - * @param max an float argument. - * The maximum value. - */ - function set_y_max( $max ) - { - $this->y_max = floatval( $max ); - } - - /** - * Set the minimum value of the y axis. - * - * @param min an float argument. - * The minimum value. - */ - function set_y_min( $min ) - { - $this->y_min = floatval( $min ); - } - - /** - * Set the maximum value of the right y axis. - * - * @param max an float argument. - * The maximum value. - */ - function set_y_right_max( $max ) - { - $this->y2_max = floatval($max); - } - - /** - * Set the minimum value of the right y axis. - * - * @param min an float argument. - * The minimum value. - */ - function set_y_right_min( $min ) - { - $this->y2_min = floatval($min); - } - - /** - * Show the y label on every $step label. - * - * @param val an int argument. - * Show the label on every $step label. - */ - function y_label_steps( $val ) - { - $this->y_steps = intval( $val ); - } - - function title( $title, $style='' ) - { - $this->title = $this->esc( $title ); - if( strlen( $style ) > 0 ) - $this->title_style = $style; - } - - /** - * Set the parameters of the x legend. - * - * @param text a string argument. - * The text of the x legend. - * @param font_size an int argument. - * The font size of the x legend text. - * @param colour a string argument - * The hex value of the font colour. - */ - function set_x_legend( $text, $size=-1, $colour='' ) - { - $this->x_legend = $this->esc( $text ); - if( $size > -1 ) - $this->x_legend_size = $size; - - if( strlen( $colour )>0 ) - $this->x_legend_colour = $colour; - } - - /** - * Set the size of the x label ticks. - * - * @param size an int argument. - * The size of the ticks in pixels. - */ - function set_x_tick_size( $size ) - { - if( $size > 0 ) - $this->x_tick_size = $size; - } - - /** - * Set how often you would like to show a tick on the x axis. - * - * @param steps an int argument. - * Show a tick ever $steps. - */ - function set_x_axis_steps( $steps ) - { - if ( $steps > 0 ) - $this->x_axis_steps = $steps; - } - - /** - * Set the depth in pixels of the 3D X axis slab. - * - * @param size an int argument. - * The depth in pixels of the 3D X axis. - */ - function set_x_axis_3d( $size ) - { - if( $size > 0 ) - $this->x_axis_3d = intval($size); - } - - /** - * The private method of building the y legend output. - */ - function _set_y_legend( $text, $size, $colour ) - { - $tmp = $text; - - if( $size > -1 ) - $tmp .= ','. $size; - - if( strlen( $colour )>0 ) - $tmp .= ','. $colour; - - return $tmp; - } - - /** - * Set the parameters of the y legend. - * - * @param text a string argument. - * The text of the y legend. - * @param font_size an int argument. - * The font size of the y legend text. - * @param colour a string argument - * The hex colour value of the font colour. - */ - function set_y_legend( $text, $size=-1, $colour='' ) - { - $this->y_legend = $this->_set_y_legend( $text, $size, $colour ); - } - - /** - * Set the parameters of the right y legend. - * - * @param text a string argument. - * The text of the right y legend. - * @param font_size an int argument. - * The font size of the right y legend text. - * @param colour a string argument - * The hex value of the font colour. - */ - function set_y_right_legend( $text, $size=-1, $colour='' ) - { - $this->y_legend_right = $this->_set_y_legend( $text, $size, $colour ); - } - - /** - * Set the colour of the x axis line and grid. - * - * @param axis a string argument. - * The hex colour value of the x axis line. - * @param grid a string argument. - * The hex colour value of the x axis grid. - */ - function x_axis_colour( $axis, $grid='' ) - { - $this->x_axis_colour = $axis; - $this->x_grid_colour = $grid; - } - - /** - * Set the colour of the y axis line and grid. - * - * @param axis a string argument. - * The hex colour value of the y axis line. - * @param grid a string argument. - * The hex colour value of the y axis grid. - */ - function y_axis_colour( $axis, $grid='' ) - { - $this->y_axis_colour = $axis; - - if( strlen( $grid ) > 0 ) - $this->y_grid_colour = $grid; - } - - /** - * Set the colour of the right y axis line. - * - * @param colour a string argument. - * The hex colour value of the right y axis line. - */ - function y_right_axis_colour( $colour ) - { - $this->y2_axis_colour = $colour; - } - - /** - * Draw a line without markers on values. - * - * @param width an int argument. - * The width of the line in pixels. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label - * @param circles an int argument - * Need to find out. - */ - function line( $width, $colour='', $text='', $size=-1, $circles=-1 ) - { - $type = 'line'. $this->next_line(); - - $description = ''; - if( $width > 0 ) - { - $description .= $width; - $description .= ','. $colour; - } - - if( strlen( $text ) > 0 ) - { - $description.= ','. $text; - $description .= ','. $size; - } - - if( $circles > 0 ) - $description .= ','. $circles; - - $this->lines[$type] = $description; - } - - /** - * Draw a line with solid dot markers on values. - * - * @param width an int argument. - * The width of the line in pixels. - * @param dot_size an int argument. - * Size in pixels of the dot. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function line_dot( $width, $dot_size, $colour, $text='', $font_size='' ) - { - $type = 'line_dot'. $this->next_line(); - - $description = "$width,$colour,$text"; - - if( strlen( $font_size ) > 0 ) - $description .= ",$font_size,$dot_size"; - - $this->lines[$type] = $description; - } - - /** - * Draw a line with hollow dot markers on values. - * - * @param width an int argument. - * The width of the line in pixels. - * @param dot_size an int argument. - * Size in pixels of the dot. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function line_hollow( $width, $dot_size, $colour, $text='', $font_size='' ) - { - $type = 'line_hollow'. $this->next_line(); - - $description = "$width,$colour,$text"; - - if( strlen( $font_size ) > 0 ) - $description .= ",$font_size,$dot_size"; - - $this->lines[$type] = $description; - } - - /** - * Draw an area chart. - * - * @param width an int argument. - * The width of the line in pixels. - * @param dot_size an int argument. - * Size in pixels of the dot. - * @param colour a string argument. - * The hex colour value of the line. - * @param alpha an int argument. - * The percentage of transparency of the fill colour. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - * @param fill_colour a string argument. - * The hex colour value of the fill colour. - */ - function area_hollow( $width, $dot_size, $colour, $alpha, $text='', $font_size='', $fill_colour='' ) - { - $type = 'area_hollow'. $this->next_line(); - - $description = "$width,$dot_size,$colour,$alpha"; - - if( strlen( $text ) > 0 ) - $description .= ",$text,$font_size"; - - if( strlen( $fill_colour ) > 0 ) - $description .= ','. $fill_colour; - - $this->lines[$type] = $description; - } - - /** - * Draw a bar chart. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar( $alpha, $colour='', $text='', $size=-1 ) - { - $type = 'bar'. $this->next_line(); - - $description = $alpha .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - /** - * Draw a bar chart with an outline. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param colour_outline a strng argument. - * The hex colour value of the outline. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_filled( $alpha, $colour, $colour_outline, $text='', $size=-1 ) - { - $type = 'filled_bar'. $this->next_line(); - - $description = "$alpha,$colour,$colour_outline,$text,$size"; - - $this->lines[$type] = $description; - } - - function bar_sketch( $alpha, $offset, $colour, $colour_outline, $text='', $size=-1 ) - { - $type = 'bar_sketch'. $this->next_line(); - - $description = "$alpha,$offset,$colour,$colour_outline,$text,$size"; - - $this->lines[$type] = $description; - } - - /** - * Draw a 3D bar chart. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_3D( $alpha, $colour='', $text='', $size=-1 ) - { - $type = 'bar_3d'. $this->next_line(); - - $description = $alpha .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - /** - * Draw a 3D bar chart that looks like glass. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param outline_colour a string argument. - * The hex colour value of the outline. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_glass( $alpha, $colour, $outline_colour, $text='', $size=-1 ) - { - $type = 'bar_glass'. $this->next_line(); - - $description = $alpha .','. $colour .','. $outline_colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - /** - * Draw a faded bar chart. - * - * @param alpha an int argument. - * The percentage of transparency of the bar colour. - * @param colour a string argument. - * The hex colour value of the line. - * @param text a string argument. - * The label of the line. - * @param font_size an int argument. - * Font size of the label. - */ - function bar_fade( $alpha, $colour='', $text='', $size=-1 ) - { - $type = 'bar_fade'. $this->next_line(); - - $description = $alpha .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - } - - function candle( $data, $alpha, $line_width, $colour, $text='', $size=-1 ) - { - $type = 'candle'. $this->next_line(); - - $description = $alpha .','. $line_width .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - - $a = array(); - foreach( $data as $can ) - $a[] = $can->toString(); - - $this->data[] = implode(',',$a); - } - - function hlc( $data, $alpha, $line_width, $colour, $text='', $size=-1 ) - { - $type = 'hlc'. $this->next_line(); - - $description = $alpha .','. $line_width .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - - $a = array(); - foreach( $data as $can ) - $a[] = $can->toString(); - - $this->data[] = implode(',',$a); - } - - function scatter( $data, $line_width, $colour, $text='', $size=-1 ) - { - $type = 'scatter'. $this->next_line(); - - $description = $line_width .','. $colour .','. $text .','. $size; - - $this->lines[$type] = $description; - - $a = array(); - foreach( $data as $can ) - $a[] = $can->toString(); - - $this->data[] = implode(',',$a); - } - - - // - // Patch by, Jeremy Miller (14th Nov, 2007) - // - /** - * Draw a pie chart. - * - * @param alpha an int argument. - * The percentage of transparency of the pie colour. - * @param $style a string argument. - * CSS style string - * @param label_colour a string argument. - * The hex colour value of the label. - * @param gradient a boolean argument. - * Use a gradient true or false. - * @param border_size an int argument. - * Size of the border in pixels. - */ - function pie( $alpha, $line_colour, $style, $gradient = true, $border_size = false ) - { - $this->pie = $alpha.','.$line_colour.','.$style; - if( !$gradient ) - { - $this->pie .= ','.!$gradient; - } - if ($border_size) - { - if ($gradient === false) - { - $this->pie .= ','; - } - $this->pie .= ','.$border_size; - } - } - - /** - * Set the values of the pie chart. - * - * @param values an array argument. - * An array of the values for the pie chart. - * @param labels an array argument. - * An array of the labels for the pie pieces. - * @param links an array argument. - * An array of the links to the pie pieces. - */ - function pie_values( $values, $labels=array(), $links=array() ) - { - $this->pie_values = implode(',',$values); - $this->pie_labels = implode(',',$labels); - $this->pie_links = implode(",",$links); - } - - /** - * Set the pie slice colours. - * - * @param colours an array argument. - * The hex colour values of the pie pieces. - */ - function pie_slice_colours( $colours ) - { - $this->pie_colours = implode(',',$colours); - } - - - /** - * Render the output. - */ - function render() - { - $tmp = array(); - - //echo headers_sent() ?'yes':'no'; - if( !headers_sent() ) - header('content-type: text; charset: utf-8'); - - if($this->output_type == 'js') - { - $this->set_unique_id(); - - $tmp[] = '
'; - $tmp[] = ''; - $tmp[] = ''; - } - - return implode("\r\n",$tmp); - } -} - -class line -{ - var $line_width; - var $colour; - var $_key; - var $key; - var $key_size; - // hold the data - var $data; - // extra tool tip info: - var $tips; - - function line( $line_width, $colour ) - { - $this->var = 'line'; - - $this->line_width = $line_width; - $this->colour = $colour; - $this->data = array(); - $this->links = array(); - $this->tips = array(); - $this->_key = false; - } - - - function key( $key, $size ) - { - $this->_key = true; - $this->key = graph::esc( $key ); - $this->key_size = $size; - } - - function add( $data ) - { - $this->data[] = $data; - } - - function add_link( $data, $link ) - { - $this->data[] = $data; - $this->links[] = graph::esc( $link ); - } - - function add_data_tip( $data, $tip ) - { - $this->data[] = $data; - $this->tips[] = graph::esc( $tip ); - } - - function add_data_link_tip( $data, $link, $tip ) - { - $this->data[] = $data; - $this->links[] = graph::esc( $link ); - $this->tips[] = graph::esc( $tip ); - } - - // return the variables for this chart - function _get_variable_list() - { - $values = array(); - $values[] = $this->line_width; - $values[] = $this->colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } - - function toString( $output_type, $set_num ) - { - $values = implode( ',', $this->_get_variable_list() ); - - $tmp = array(); - - if( $output_type == 'js' ) - { - $tmp[] = 'so.addVariable("'. $this->var.$set_num .'","'. $values . '");'; - - $tmp[] = 'so.addVariable("values'. $set_num .'","'. implode( ',', $this->data ) .'");'; - - if( count( $this->links ) > 0 ) - $tmp[] = 'so.addVariable("links'. $set_num .'","'. implode( ',', $this->links ) .'");'; - - if( count( $this->tips ) > 0 ) - $tmp[] = 'so.addVariable("tool_tips_set'. $set_num .'","'. implode( ',', $this->tips ) .'");'; - - } - else - { - $tmp[] = '&'. $this->var. $set_num .'='. $values .'&'; - $tmp[] = '&values'. $set_num .'='. implode( ',', $this->data ) .'&'; - - if( count( $this->links ) > 0 ) - $tmp[] = '&links'. $set_num .'='. implode( ',', $this->links ) .'&'; - - if( count( $this->tips ) > 0 ) - $tmp[] = '&tool_tips_set'. $set_num .'='. implode( ',', $this->tips ) .'&'; - } - - return implode( "\r\n", $tmp ); - } -} - -class line_hollow extends line -{ - var $dot_size; - - function line_hollow( $line_width, $dot_size, $colour ) - { - parent::line( $line_width, $colour ); - $this->var = 'line_hollow'; - $this->dot_size = $dot_size; - } - - // return the variables for this chart - function _get_variable_list() - { - $values = array(); - $values[] = $this->line_width; - $values[] = $this->colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - else - { - $values[] = ''; - $values[] = ''; - } - $values[] = $this->dot_size; - - return $values; - } -} - -class line_dot extends line_hollow -{ - function line_dot( $line_width, $dot_size, $colour ) - { - parent::line_dot( $line_width, $colour ); - $this->var = 'line_dot'; - } -} - -class bar -{ - var $colour; - var $alpha; - var $data; - var $links; - var $_key; - var $key; - var $key_size; - var $var; - // extra tool tip info: - var $tips; - - function bar( $alpha, $colour ) - { - $this->var = 'bar'; - - $this->alpha = $alpha; - $this->colour = $colour; - $this->data = array(); - $this->links = array(); - $this->tips = array(); - $this->_key = false; - } - - function key( $key, $size ) - { - $this->_key = true; - $this->key = graph::esc( $key ); - $this->key_size = $size; - } - - function add( $data ) - { - $this->data[] = $data; - } - - function add_link( $data, $link ) - { - $this->data[] = $data; - $this->links[] = graph::esc( $link ); - } - - function add_data_tip( $data, $tip ) - { - $this->data[] = $data; - $this->tips[] = graph::esc( $tip ); - } - - // return the variables for this - // bar chart - function _get_variable_list() - { - $values = array(); - $values[] = $this->alpha; - $values[] = $this->colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } - - function toString( $output_type, $set_num ) - { - $values = implode( ',', $this->_get_variable_list() ); - - $tmp = array(); - - if( $output_type == 'js' ) - { - $tmp[] = 'so.addVariable("'. $this->var.$set_num .'","'. $values . '");'; - - $tmp[] = 'so.addVariable("values'. $set_num .'","'. implode( ',', $this->data ) .'");'; - - if( count( $this->links ) > 0 ) - $tmp[] = 'so.addVariable("links'. $set_num .'","'. implode( ',', $this->links ) .'");'; - - if( count( $this->tips ) > 0 ) - $tmp[] = 'so.addVariable("tool_tips_set'. $set_num .'","'. implode( ',', $this->tips ) .'");'; - - } - else - { - $tmp[] = '&'. $this->var. $set_num .'='. $values .'&'; - $tmp[] = '&values'. $set_num .'='. implode( ',', $this->data ) .'&'; - - if( count( $this->links ) > 0 ) - $tmp[] = '&links'. $set_num .'='. implode( ',', $this->links ) .'&'; - - if( count( $this->tips ) > 0 ) - $tmp[] = '&tool_tips_set'. $set_num .'='. implode( ',', $this->tips ) .'&'; - } - - return implode( "\r\n", $tmp ); - } - -} - -class bar_3d extends bar -{ - function bar_3d( $alpha, $colour ) - { - parent::bar( $alpha, $colour ); - $this->var = 'bar_3d'; - } -} - -class bar_fade extends bar -{ - function bar_fade( $alpha, $colour ) - { - parent::bar( $alpha, $colour ); - $this->var = 'bar_fade'; - } -} - -class bar_outline extends bar -{ - var $outline_colour; - - function bar_outline( $alpha, $colour, $outline_colour ) - { - parent::bar( $alpha, $colour ); - $this->var = 'filled_bar'; - $this->outline_colour = $outline_colour; - } - - // override the base method - function _get_variable_list() - { - $values = array(); - $values[] = $this->alpha; - $values[] = $this->colour; - $values[] = $this->outline_colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } -} - -class bar_glass extends bar_outline -{ - function bar_glass( $alpha, $colour, $outline_colour ) - { - parent::bar_outline( $alpha, $colour, $outline_colour ); - $this->var = 'bar_glass'; - } -} - -// -// this has an outline colour and a 'jiggle' parameter -// called offset -// -class bar_sketch extends bar_outline -{ - var $offset; - - function bar_sketch( $alpha, $offset, $colour, $outline_colour ) - { - parent::bar_outline( $alpha, $colour, $outline_colour ); - $this->var = 'bar_sketch'; - $this->offset = $offset; - } - - // override the base method - function _get_variable_list() - { - $values = array(); - $values[] = $this->alpha; - $values[] = $this->offset; - $values[] = $this->colour; - $values[] = $this->outline_colour; - - if( $this->_key ) - { - $values[] = $this->key; - $values[] = $this->key_size; - } - - return $values; - } -} - -class candle -{ - var $out; - - function candle( $high, $open, $close, $low ) - { - $this->out = array(); - $this->out[] = $high; - $this->out[] = $open; - $this->out[] = $close; - $this->out[] = $low; - } - - function toString() - { - return '['. implode( ',', $this->out ) .']'; - } -} - -class hlc -{ - var $out; - - function hlc( $high, $low, $close ) - { - $this->out = array(); - $this->out[] = $high; - $this->out[] = $low; - $this->out[] = $close; - } - - function toString() - { - return '['. implode( ',', $this->out ) .']'; - } -} - -class point -{ - var $out; - - function point( $x, $y, $size_px ) - { - $this->out = array(); - $this->out[] = $x; - $this->out[] = $y; - $this->out[] = $size_px; - } - - function toString() - { - return '['. implode( ',', $this->out ) .']'; - } -} - - -function open_flash_chart_object_str( $width, $height, $url, $use_swfobject=true, $base='' ) -{ - // - // return the HTML as a string - // - return _ofc( $width, $height, $url, $use_swfobject, $base ); -} - -function open_flash_chart_object( $width, $height, $url, $use_swfobject=true, $base='' ) -{ - // - // stream the HTML into the page - // - echo _ofc( $width, $height, $url, $use_swfobject, $base ); -} - -function _ofc( $width, $height, $url, $use_swfobject, $base ) -{ - // - // I think we may use swfobject for all browsers, - // not JUST for IE... - // - //$ie = strstr(getenv('HTTP_USER_AGENT'), 'MSIE'); - - // - // escape the & and stuff: - // - $url = urlencode($url); - - // - // output buffer - // - $out = array(); - - // - // check for http or https: - // - if (isset ($_SERVER['HTTPS'])) - { - if (strtoupper ($_SERVER['HTTPS']) == 'ON') - { - $protocol = 'https'; - } - else - { - $protocol = 'http'; - } - } - else - { - $protocol = 'http'; - } - - // - // if there are more than one charts on the - // page, give each a different ID - // - global $open_flash_chart_seqno; - $obj_id = 'chart'; - $div_name = 'flashcontent'; - - //$out[] = ''; - - if( !isset( $open_flash_chart_seqno ) ) - { - $open_flash_chart_seqno = 1; - $out[] = ''; - } - else - { - $open_flash_chart_seqno++; - $obj_id .= '_'. $open_flash_chart_seqno; - $div_name .= '_'. $open_flash_chart_seqno; - } - - if( $use_swfobject ) - { - // Using library for auto-enabling Flash object on IE, disabled-Javascript proof - $out[] = '
'; - $out[] = ''; - $out[] = ''; - } - - return implode("\n",$out); -} - -$x = open_flash_chart_object( 300,300,"/images/open-flash-chart.swf", true); - -?> - - - -
- - diff --git a/workflow/engine/plugins/pmosCommunity/open_flash_chart_object.php b/workflow/engine/plugins/pmosCommunity/open_flash_chart_object.php deleted file mode 100644 index 5cf831634..000000000 --- a/workflow/engine/plugins/pmosCommunity/open_flash_chart_object.php +++ /dev/null @@ -1,109 +0,0 @@ -'; - - if( !isset( $open_flash_chart_seqno ) ) - { - $open_flash_chart_seqno = 1; - $out[] = ''; - } - else - { - $open_flash_chart_seqno++; - $obj_id .= '_'. $open_flash_chart_seqno; - $div_name .= '_'. $open_flash_chart_seqno; - } - - if( $use_swfobject ) - { - // Using library for auto-enabling Flash object on IE, disabled-Javascript proof - $out[] = '
'; - $out[] = ''; - $out[] = ''; - } - - return implode("\n",$out); -} -?> \ No newline at end of file diff --git a/workflow/engine/plugins/pmosCommunity/public_html/open-flash-chart.swf b/workflow/engine/plugins/pmosCommunity/public_html/open-flash-chart.swf deleted file mode 100644 index 85b590a28..000000000 Binary files a/workflow/engine/plugins/pmosCommunity/public_html/open-flash-chart.swf and /dev/null differ diff --git a/workflow/engine/plugins/pmosCommunity/public_html/swfobject.js b/workflow/engine/plugins/pmosCommunity/public_html/swfobject.js deleted file mode 100644 index 02ca073dc..000000000 --- a/workflow/engine/plugins/pmosCommunity/public_html/swfobject.js +++ /dev/null @@ -1,233 +0,0 @@ -/** - * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/ - * - * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License: - * http://www.opensource.org/licenses/mit-license.php - * - */ -if(typeof deconcept == "undefined") var deconcept = new Object(); -if(typeof deconcept.util == "undefined") deconcept.util = new Object(); -if(typeof deconcept.SWFObjectUtil == "undefined") deconcept.SWFObjectUtil = new Object(); -deconcept.SWFObject = function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey) { - if (!document.getElementById) { return; } - this.DETECT_KEY = detectKey ? detectKey : 'detectflash'; - this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY); - this.params = new Object(); - this.variables = new Object(); - this.attributes = new Array(); - if(swf) { this.setAttribute('swf', swf); } - if(id) { this.setAttribute('id', id); } - if(w) { this.setAttribute('width', w); } - if(h) { this.setAttribute('height', h); } - if(ver) { this.setAttribute('version', new deconcept.PlayerVersion(ver.toString().split("."))); } - this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion(); - if (!window.opera && document.all && this.installedVer.major > 7) { - // only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE - deconcept.SWFObject.doPrepUnload = true; - } - if(c) { this.addParam('bgcolor', c); } - var q = quality ? quality : 'high'; - this.addParam('quality', q); - this.setAttribute('useExpressInstall', false); - this.setAttribute('doExpressInstall', false); - var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location; - this.setAttribute('xiRedirectUrl', xir); - this.setAttribute('redirectUrl', ''); - if(redirectUrl) { this.setAttribute('redirectUrl', redirectUrl); } -} -deconcept.SWFObject.prototype = { - useExpressInstall: function(path) { - this.xiSWFPath = !path ? "expressinstall.swf" : path; - this.setAttribute('useExpressInstall', true); - }, - setAttribute: function(name, value){ - this.attributes[name] = value; - }, - getAttribute: function(name){ - return this.attributes[name]; - }, - addParam: function(name, value){ - this.params[name] = value; - }, - getParams: function(){ - return this.params; - }, - addVariable: function(name, value){ - this.variables[name] = value; - }, - getVariable: function(name){ - return this.variables[name]; - }, - getVariables: function(){ - return this.variables; - }, - getVariablePairs: function(){ - var variablePairs = new Array(); - var key; - var variables = this.getVariables(); - for(key in variables){ - variablePairs[variablePairs.length] = key +"="+ variables[key]; - } - return variablePairs; - }, - getSWFHTML: function() { - var swfNode = ""; - if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture - if (this.getAttribute("doExpressInstall")) { - this.addVariable("MMplayerType", "PlugIn"); - this.setAttribute('swf', this.xiSWFPath); - } - swfNode = ' 0){ swfNode += 'flashvars="'+ pairs +'"'; } - swfNode += '/>'; - } else { // PC IE - if (this.getAttribute("doExpressInstall")) { - this.addVariable("MMplayerType", "ActiveX"); - this.setAttribute('swf', this.xiSWFPath); - } - swfNode = ''; - swfNode += ''; - var params = this.getParams(); - for(var key in params) { - swfNode += ''; - } - var pairs = this.getVariablePairs().join("&"); - if(pairs.length > 0) {swfNode += '';} - swfNode += ""; - } - return swfNode; - }, - write: function(elementId){ - if(this.getAttribute('useExpressInstall')) { - // check to see if we need to do an express install - var expressInstallReqVer = new deconcept.PlayerVersion([6,0,65]); - if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) { - this.setAttribute('doExpressInstall', true); - this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl'))); - document.title = document.title.slice(0, 47) + " - Flash Player Installation"; - this.addVariable("MMdoctitle", document.title); - } - } - if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version'))){ - var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId; - n.innerHTML = this.getSWFHTML(); - return true; - }else{ - if(this.getAttribute('redirectUrl') != "") { - document.location.replace(this.getAttribute('redirectUrl')); - } - } - return false; - } -} - -/* ---- detection functions ---- */ -deconcept.SWFObjectUtil.getPlayerVersion = function(){ - var PlayerVersion = new deconcept.PlayerVersion([0,0,0]); - if(navigator.plugins && navigator.mimeTypes.length){ - var x = navigator.plugins["Shockwave Flash"]; - if(x && x.description) { - PlayerVersion = new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split(".")); - } - }else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0){ // if Windows CE - var axo = 1; - var counter = 3; - while(axo) { - try { - counter++; - axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter); -// document.write("player v: "+ counter); - PlayerVersion = new deconcept.PlayerVersion([counter,0,0]); - } catch (e) { - axo = null; - } - } - } else { // Win IE (non mobile) - // do minor version lookup in IE, but avoid fp6 crashing issues - // see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/ - try{ - var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); - }catch(e){ - try { - var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); - PlayerVersion = new deconcept.PlayerVersion([6,0,21]); - axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code) - } catch(e) { - if (PlayerVersion.major == 6) { - return PlayerVersion; - } - } - try { - axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); - } catch(e) {} - } - if (axo != null) { - PlayerVersion = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(",")); - } - } - return PlayerVersion; -} -deconcept.PlayerVersion = function(arrVersion){ - this.major = arrVersion[0] != null ? parseInt(arrVersion[0]) : 0; - this.minor = arrVersion[1] != null ? parseInt(arrVersion[1]) : 0; - this.rev = arrVersion[2] != null ? parseInt(arrVersion[2]) : 0; -} -deconcept.PlayerVersion.prototype.versionIsValid = function(fv){ - if(this.major < fv.major) return false; - if(this.major > fv.major) return true; - if(this.minor < fv.minor) return false; - if(this.minor > fv.minor) return true; - if(this.rev < fv.rev) return false; - return true; -} -/* ---- get value of query string param ---- */ -deconcept.util = { - getRequestParameter: function(param) { - var q = document.location.search || document.location.hash; - if (param == null) { return q; } - if(q) { - var pairs = q.substring(1).split("&"); - for (var i=0; i < pairs.length; i++) { - if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) { - return pairs[i].substring((pairs[i].indexOf("=")+1)); - } - } - } - return ""; - } -} -/* fix for video streaming bug */ -deconcept.SWFObjectUtil.cleanupSWFs = function() { - var objects = document.getElementsByTagName("OBJECT"); - for (var i = objects.length - 1; i >= 0; i--) { - objects[i].style.display = 'none'; - for (var x in objects[i]) { - if (typeof objects[i][x] == 'function') { - objects[i][x] = function(){}; - } - } - } -} -// fixes bug in some fp9 versions see http://blog.deconcept.com/2006/07/28/swfobject-143-released/ -if (deconcept.SWFObject.doPrepUnload) { - if (!deconcept.unloadSet) { - deconcept.SWFObjectUtil.prepUnload = function() { - __flash_unloadHandler = function(){}; - __flash_savedUnloadHandler = function(){}; - window.attachEvent("onunload", deconcept.SWFObjectUtil.cleanupSWFs); - } - window.attachEvent("onbeforeunload", deconcept.SWFObjectUtil.prepUnload); - deconcept.unloadSet = true; - } -} -/* add document.getElementById if needed (mobile IE < 5) */ -if (!document.getElementById && document.all) { document.getElementById = function(id) { return document.all[id]; }} - -/* add some aliases for ease of use/backwards compatibility */ -var getQueryParamValue = deconcept.util.getRequestParameter; -var FlashObject = deconcept.SWFObject; // for legacy support -var SWFObject = deconcept.SWFObject; diff --git a/workflow/engine/plugins/pmosCommunity/setupPage.xml b/workflow/engine/plugins/pmosCommunity/setupPage.xml deleted file mode 100644 index 3cf13ba37..000000000 --- a/workflow/engine/plugins/pmosCommunity/setupPage.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - <en>ProcessMaker Open Source Plugin</en> - - - - ProcessMaker Open Source Plugin, with this plugin you can see many differents charts related to the ProcessMaker Community web sites - - - - - Save - - \ No newline at end of file diff --git a/workflow/engine/skinEngine/base/baseCss/ext-all-notheme.css b/workflow/engine/skinEngine/base/baseCss/ext-all-notheme.css index a76ba2dd0..70e8375f0 100644 --- a/workflow/engine/skinEngine/base/baseCss/ext-all-notheme.css +++ b/workflow/engine/skinEngine/base/baseCss/ext-all-notheme.css @@ -2093,6 +2093,14 @@ div.x-toolbar-no-items { position:relative; overflow:hidden; } +/* enable select text*/ +.selectText { + -webkit-user-select: text; + -khtml-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; +} .x-grid-panel .x-panel-body { overflow:hidden !important; diff --git a/workflow/engine/skinEngine/neoclassic/css/rtl.css b/workflow/engine/skinEngine/neoclassic/css/rtl.css index dfec40d7b..fc927e70d 100644 --- a/workflow/engine/skinEngine/neoclassic/css/rtl.css +++ b/workflow/engine/skinEngine/neoclassic/css/rtl.css @@ -672,3 +672,6 @@ td.x-date-mp-sep { .ext-ie .x-menu-item-checked .x-menu-group-item .x-menu-item-icon { right: 0x !important; } +span:after, font:after { + content: "\200E‎"; +} diff --git a/workflow/engine/skinEngine/simplified/templates/appListSearch.html b/workflow/engine/skinEngine/simplified/templates/appListSearch.html index 4a758d247..5ac2a8ef2 100644 --- a/workflow/engine/skinEngine/simplified/templates/appListSearch.html +++ b/workflow/engine/skinEngine/simplified/templates/appListSearch.html @@ -219,7 +219,7 @@ '' + '

'+r.USR_FIRSTNAME+' '+r.USR_LASTNAME+' ('+r.USR_USERNAME+')

' + '

'+r.NOTE_CONTENT+'
' + - '
{translate label="ID_POSTED_AT"} '+r.NOTE_DATE+'
' + + '
{/literal}{translate label="ID_POSTED_AT"}{literal} ' + r.NOTE_DATE + '
' + '
'; content.append(s); diff --git a/workflow/engine/skinEngine/skinEngine.php b/workflow/engine/skinEngine/skinEngine.php index a774506ed..a299596fe 100644 --- a/workflow/engine/skinEngine/skinEngine.php +++ b/workflow/engine/skinEngine/skinEngine.php @@ -344,7 +344,7 @@ class SkinEngine } $smarty->assign('username', - (isset($_SESSION['USR_USERNAME']) ? '(' . $_SESSION['USR_USERNAME'] . ' ' . G::LoadTranslation('ID_IN') . ' ' . SYS_SYS . ')' : '')); + (isset($_SESSION['USR_USERNAME']) ? '(' . $_SESSION['USR_USERNAME'] . ' ' . G::LoadTranslation('ID_IN') . ' ' . config("system.workspace") . ')' : '')); $smarty->assign('header', $header); $smarty->force_compile = $this->forceTemplateCompile; @@ -380,7 +380,7 @@ class SkinEngine $header = ''; if (isset($oHeadPublisher)) { - $oHeadPublisher->title = isset($_SESSION['USR_USERNAME']) ? '(' . $_SESSION['USR_USERNAME'] . ' ' . G::LoadTranslation('ID_IN') . ' ' . SYS_SYS . ')' : ''; + $oHeadPublisher->title = isset($_SESSION['USR_USERNAME']) ? '(' . $_SESSION['USR_USERNAME'] . ' ' . G::LoadTranslation('ID_IN') . ' ' . config("system.workspace") . ')' : ''; $header = $oHeadPublisher->printHeader(); $header .= $oHeadPublisher->getExtJsStylesheets($this->cssFileName); } @@ -438,7 +438,7 @@ class SkinEngine $smarty->assign('rolename', isset($_SESSION['USR_ROLENAME']) ? $_SESSION['USR_ROLENAME'] . '' : ''); $smarty->assign('pipe', isset($_SESSION['USR_USERNAME']) ? ' | ' : ''); $smarty->assign('logout', G::LoadTranslation('ID_LOGOUT')); - $smarty->assign('workspace', defined('SYS_SYS') ? SYS_SYS : ''); + $smarty->assign('workspace', !empty(config("system.workspace")) ? config("system.workspace") : ''); $uws = (isset($_SESSION['USR_ROLENAME']) && $_SESSION['USR_ROLENAME'] != '') ? strtolower(G::LoadTranslation('ID_WORKSPACE_USING')) : G::LoadTranslation('ID_WORKSPACE_USING'); $smarty->assign('workspace_label', $uws); @@ -450,8 +450,8 @@ class SkinEngine $smarty->assign('user', $name); } - if (defined('SYS_SYS')) { - $logout = '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/login/login'; + if (!empty(config("system.workspace"))) { + $logout = '/sys' . config("system.workspace") . '/' . SYS_LANG . '/' . SYS_SKIN . '/login/login'; } else { $logout = '/sys/' . SYS_LANG . '/' . SYS_SKIN . '/login/login'; } @@ -496,7 +496,7 @@ class SkinEngine $header = ''; if (isset($oHeadPublisher)) { - $oHeadPublisher->title = isset($_SESSION['USR_USERNAME']) ? '(' . $_SESSION['USR_USERNAME'] . ' ' . G::LoadTranslation('ID_IN') . ' ' . SYS_SYS . ')' : ''; + $oHeadPublisher->title = isset($_SESSION['USR_USERNAME']) ? '(' . $_SESSION['USR_USERNAME'] . ' ' . G::LoadTranslation('ID_IN') . ' ' . config("system.workspace") . ')' : ''; $header = $oHeadPublisher->printHeader(); } @@ -697,8 +697,8 @@ class SkinEngine } if (isset($oHeadPublisher)) { - if (defined('SYS_SYS')) { - $oHeadPublisher->title = isset($_SESSION['USR_USERNAME']) ? '(' . $_SESSION['USR_USERNAME'] . ' ' . G::LoadTranslation('ID_IN') . ' ' . SYS_SYS . ')' : ''; + if (!empty(config("system.workspace"))) { + $oHeadPublisher->title = isset($_SESSION['USR_USERNAME']) ? '(' . $_SESSION['USR_USERNAME'] . ' ' . G::LoadTranslation('ID_IN') . ' ' . config("system.workspace") . ')' : ''; } $header = $enableJsScript ? $oHeadPublisher->printHeader() : ''; $header .= $oHeadPublisher->getExtJsStylesheets($this->cssFileName); @@ -768,7 +768,7 @@ class SkinEngine $smarty->assign('rolename', isset($_SESSION['USR_ROLENAME']) ? $_SESSION['USR_ROLENAME'] . '' : ''); $smarty->assign('pipe', isset($_SESSION['USR_USERNAME']) ? ' | ' : ''); $smarty->assign('logout', G::LoadTranslation('ID_LOGOUT')); - $smarty->assign('workspace', defined('SYS_SYS') ? SYS_SYS : ''); + $smarty->assign('workspace', !empty(config("system.workspace")) ? config("system.workspace") : ''); $uws = (isset($_SESSION['USR_ROLENAME']) && $_SESSION['USR_ROLENAME'] != '') ? strtolower(G::LoadTranslation('ID_WORKSPACE_USING')) : G::LoadTranslation('ID_WORKSPACE_USING'); $smarty->assign('workspace_label', $uws); @@ -780,7 +780,7 @@ class SkinEngine $smarty->assign('user', $name); } - if (defined('SYS_SYS')) { + if (!empty(config("system.workspace"))) { $pmLicenseManagerO = &PmLicenseManager::getSingleton(); $expireIn = $pmLicenseManagerO->getExpireIn(); $expireInLabel = $pmLicenseManagerO->getExpireInLabel(); @@ -796,8 +796,8 @@ class SkinEngine } } - if (defined('SYS_SYS')) { - $logout = "/sys" . SYS_SYS . "/" . SYS_LANG . "/" . SYS_SKIN . ((SYS_COLLECTION != "tracker") ? "/login/login" : "/tracker/login"); + if (!empty(config("system.workspace"))) { + $logout = "/sys" . config("system.workspace") . "/" . SYS_LANG . "/" . SYS_SKIN . ((SYS_COLLECTION != "tracker") ? "/login/login" : "/tracker/login"); } else { $logout = '/sys/' . SYS_LANG . '/' . SYS_SKIN . '/login/login'; } @@ -809,7 +809,7 @@ class SkinEngine $oLogoR = new ReplacementLogo(); - if (defined("SYS_SYS")) { + if (!empty(config("system.workspace"))) { $aFotoSelect = $oLogoR->getNameLogo((isset($_SESSION['USER_LOGGED'])) ? $_SESSION['USER_LOGGED'] : ''); if (is_array($aFotoSelect)) { @@ -817,11 +817,11 @@ class SkinEngine $sWspaceSelect = trim($aFotoSelect['WORKSPACE_LOGO_NAME']); } } - if (class_exists('ProcessMaker\Plugins\PluginRegistry') && defined("SYS_SYS")) { + if (class_exists('ProcessMaker\Plugins\PluginRegistry') && !empty(config("system.workspace"))) { $oPluginRegistry = PluginRegistry::loadSingleton(); - if (isset($sFotoSelect) && $sFotoSelect != '' && !(strcmp($sWspaceSelect, SYS_SYS))) { + if (isset($sFotoSelect) && $sFotoSelect != '' && !(strcmp($sWspaceSelect, config("system.workspace")))) { $sCompanyLogo = $oPluginRegistry->getCompanyLogo($sFotoSelect); - $sCompanyLogo = "/sys" . SYS_SYS . "/" . SYS_LANG . "/" . SYS_SKIN . "/setup/showLogoFile.php?id=" . base64_encode($sCompanyLogo); + $sCompanyLogo = "/sys" . config("system.workspace") . "/" . SYS_LANG . "/" . SYS_SKIN . "/setup/showLogoFile.php?id=" . base64_encode($sCompanyLogo); } else { $sCompanyLogo = $oPluginRegistry->getCompanyLogo('/images/processmaker.logo.jpg'); } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php index fb0c7b3dd..b2086b1e1 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ActionsByEmail.php @@ -2,10 +2,26 @@ namespace ProcessMaker\BusinessModel; +use AbeConfiguration; +use AbeConfigurationPeer; +use AbeRequests; +use AbeRequestsPeer; +use AbeResponsesPeer; +use ApplicationPeer; +use AppDelegationPeer; +use Criteria; +use Exception; +use G; +use Publisher; use ProcessMaker\Core\System; use ProcessMaker\Plugins\PluginRegistry; use PmDynaform; +use PMLicensedFeatures; +use ResultSet; use SpoolRun; +use stdClass; +use UsersPeer; +use TaskPeer; /** * Description of ActionsByEmailService @@ -16,14 +32,14 @@ class ActionsByEmail public function saveConfiguration($params) { - if (\PMLicensedFeatures + if (PMLicensedFeatures ::getSingleton() ->verifyfeature('zLhSk5TeEQrNFI2RXFEVktyUGpnczV1WEJNWVp6cjYxbTU3R29mVXVZNWhZQT0=')) { $feature = $params['ActionsByEmail']; switch ($feature['type']) { case 'configuration': require_once 'classes/model/AbeConfiguration.php'; - $abeConfigurationInstance = new \AbeConfiguration(); + $abeConfigurationInstance = new AbeConfiguration(); if (isset($feature['fields']['ABE_CASE_NOTE_IN_RESPONSE'])) { $arrayAux = json_decode($feature['fields']['ABE_CASE_NOTE_IN_RESPONSE']); @@ -48,7 +64,7 @@ class ActionsByEmail public function loadConfiguration($params) { if ($params['type'] != 'activity' - || !\PMLicensedFeatures + || !PMLicensedFeatures ::getSingleton() ->verifyfeature('zLhSk5TeEQrNFI2RXFEVktyUGpnczV1WEJNWVp6cjYxbTU3R29mVXVZNWhZQT0=')) { @@ -56,11 +72,11 @@ class ActionsByEmail } require_once 'classes/model/AbeConfiguration.php'; - $criteria = new \Criteria(); - $criteria->add(\AbeConfigurationPeer::PRO_UID, $params['PRO_UID']); - $criteria->add(\AbeConfigurationPeer::TAS_UID, $params['TAS_UID']); - $result = \AbeConfigurationPeer::doSelectRS($criteria); - $result->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $criteria = new Criteria(); + $criteria->add(AbeConfigurationPeer::PRO_UID, $params['PRO_UID']); + $criteria->add(AbeConfigurationPeer::TAS_UID, $params['TAS_UID']); + $result = AbeConfigurationPeer::doSelectRS($criteria); + $result->setFetchmode(ResultSet::FETCHMODE_ASSOC); $result->next(); $configuration = array(); if ($configuration = $result->getRow()) { @@ -92,7 +108,7 @@ class ActionsByEmail } if ($arrayData['TEMPLATE'] == '') { - throw new Exception(\G::LoadTranslation('ID_TEMPLATE_PARAMETER_EMPTY')); + throw new Exception(G::LoadTranslation('ID_TEMPLATE_PARAMETER_EMPTY')); } $data = array( @@ -104,10 +120,10 @@ class ActionsByEmail global $G_PUBLISH; - $G_PUBLISH = new \Publisher(); + $G_PUBLISH = new Publisher(); $G_PUBLISH->AddContent('xmlform', 'xmlform', 'actionsByEmail/actionsByEmail_FileEdit', '', $data); - \G::RenderPage('publish', 'raw'); + G::RenderPage('publish', 'raw'); die(); } @@ -123,7 +139,7 @@ class ActionsByEmail } if ($arrayData['TEMPLATE'] == '') { - throw new Exception(\G::LoadTranslation('ID_TEMPLATE_PARAMETER_EMPTY')); + throw new Exception(G::LoadTranslation('ID_TEMPLATE_PARAMETER_EMPTY')); } $templateFile = fopen(PATH_DATA_MAILTEMPLATES . $arrayData['PRO_UID'] . PATH_SEP . $arrayData['TEMPLATE'], 'w'); @@ -145,8 +161,9 @@ class ActionsByEmail $arrayData['PRO_UID'] = ''; } - $response->emailFields = array(); - $response->actionFields = array(); + $response = new stdClass(); + $response->emailFields = []; + $response->actionFields = []; if ($arrayData['PRO_UID'] != '' && $arrayData['DYN_UID']) { $dynaform = new Form($arrayData['PRO_UID'] . PATH_SEP . $arrayData['DYN_UID'], PATH_DYNAFORM, SYS_LANG, false); @@ -212,30 +229,31 @@ class ActionsByEmail } if ($arrayData['PRO_UID'] == '') { - throw new Exception(\G::LoadTranslation('ID_PRO_UID_PARAMETER_IS_EMPTY')); + throw new Exception(G::LoadTranslation('ID_PRO_UID_PARAMETER_IS_EMPTY')); } if ($arrayData['TAS_UID'] == '') { - throw new Exception(\G::LoadTranslation('ID_TAS_UID_PARAMETER_IS_EMPTY')); + throw new Exception(G::LoadTranslation('ID_TAS_UID_PARAMETER_IS_EMPTY')); } - $abeConfigurationInstance = new \AbeConfiguration(); + $abeConfigurationInstance = new AbeConfiguration(); + $response = new stdClass(); if ($arrayData['ABE_TYPE'] != '') { if ($arrayData['DYN_UID'] == '') { - throw new Exception(\G::LoadTranslation('ID_DYN_UID_PARAMETER_IS_EMPTY')); + throw new Exception(G::LoadTranslation('ID_DYN_UID_PARAMETER_IS_EMPTY')); } try { $response->ABE_UID = $abeConfigurationInstance->createOrUpdate($arrayData); - } catch (\Exception $error) { + } catch (Exception $error) { throw $error; } } else { try { $abeConfigurationInstance->deleteByTasUid($arrayData['TAS_UID']); $response->ABE_UID = ''; - } catch (\Exception $error) { + } catch (Exception $error) { throw $error; } } @@ -246,51 +264,51 @@ class ActionsByEmail public function loadActionByEmail(array $arrayData) { - $criteria = new \Criteria(); + $criteria = new Criteria(); $criteria->addSelectColumn('COUNT(*)'); - $criteria->addJoin(\AbeConfigurationPeer::ABE_UID, \AbeRequestsPeer::ABE_UID); - $criteria->addJoin(\AppDelegationPeer::APP_UID, \AbeRequestsPeer::APP_UID); - $criteria->addJoin(\AppDelegationPeer::DEL_INDEX, \AbeRequestsPeer::DEL_INDEX); - $result = \AbeConfigurationPeer::doSelectRS($criteria); - $result->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $criteria->addJoin(AbeConfigurationPeer::ABE_UID, AbeRequestsPeer::ABE_UID); + $criteria->addJoin(AppDelegationPeer::APP_UID, AbeRequestsPeer::APP_UID); + $criteria->addJoin(AppDelegationPeer::DEL_INDEX, AbeRequestsPeer::DEL_INDEX); + $result = AbeConfigurationPeer::doSelectRS($criteria); + $result->setFetchmode(ResultSet::FETCHMODE_ASSOC); $result->next(); $totalCount = $result->getRow(); $totalCount = $totalCount['COUNT(*)']; - $criteria = new \Criteria(); - $criteria->addSelectColumn(\AbeConfigurationPeer::ABE_UID); - $criteria->addSelectColumn(\AbeConfigurationPeer::PRO_UID); - $criteria->addSelectColumn(\AbeConfigurationPeer::TAS_UID); - $criteria->addSelectColumn(\AbeConfigurationPeer::ABE_UPDATE_DATE); - $criteria->addSelectColumn(\AbeConfigurationPeer::ABE_TEMPLATE); - $criteria->addSelectColumn(\AbeConfigurationPeer::ABE_ACTION_FIELD); - $criteria->addSelectColumn(\AbeConfigurationPeer::DYN_UID); + $criteria = new Criteria(); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_UID); + $criteria->addSelectColumn(AbeConfigurationPeer::PRO_UID); + $criteria->addSelectColumn(AbeConfigurationPeer::TAS_UID); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_UPDATE_DATE); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_TEMPLATE); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_ACTION_FIELD); + $criteria->addSelectColumn(AbeConfigurationPeer::DYN_UID); - $criteria->addSelectColumn(\AbeRequestsPeer::ABE_REQ_UID); - $criteria->addSelectColumn(\AbeRequestsPeer::APP_UID); - $criteria->addSelectColumn(\AbeRequestsPeer::DEL_INDEX); - $criteria->addSelectColumn(\AbeRequestsPeer::ABE_REQ_SENT_TO); - $criteria->addSelectColumn(\AbeRequestsPeer::ABE_REQ_STATUS); - $criteria->addSelectColumn(\AbeRequestsPeer::ABE_REQ_SUBJECT); - $criteria->addSelectColumn(\AbeRequestsPeer::ABE_REQ_ANSWERED); - $criteria->addSelectColumn(\AbeRequestsPeer::ABE_REQ_BODY); - $criteria->addSelectColumn(\AbeRequestsPeer::ABE_REQ_DATE); + $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_UID); + $criteria->addSelectColumn(AbeRequestsPeer::APP_UID); + $criteria->addSelectColumn(AbeRequestsPeer::DEL_INDEX); + $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_SENT_TO); + $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_STATUS); + $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_SUBJECT); + $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_ANSWERED); + $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_BODY); + $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_DATE); - $criteria->addSelectColumn(\ApplicationPeer::APP_NUMBER); + $criteria->addSelectColumn(ApplicationPeer::APP_NUMBER); - $criteria->addSelectColumn(\AppDelegationPeer::DEL_PREVIOUS); + $criteria->addSelectColumn(AppDelegationPeer::DEL_PREVIOUS); - $criteria->addJoin(\AbeConfigurationPeer::ABE_UID, \AbeRequestsPeer::ABE_UID); - $criteria->addJoin(\ApplicationPeer::APP_UID, \AbeRequestsPeer::APP_UID); + $criteria->addJoin(AbeConfigurationPeer::ABE_UID, AbeRequestsPeer::ABE_UID); + $criteria->addJoin(ApplicationPeer::APP_UID, AbeRequestsPeer::APP_UID); - $criteria->addJoin(\AppDelegationPeer::APP_UID, \AbeRequestsPeer::APP_UID); - $criteria->addJoin(\AppDelegationPeer::DEL_INDEX, \AbeRequestsPeer::DEL_INDEX); - $criteria->addDescendingOrderByColumn(\AbeRequestsPeer::ABE_REQ_DATE); + $criteria->addJoin(AppDelegationPeer::APP_UID, AbeRequestsPeer::APP_UID); + $criteria->addJoin(AppDelegationPeer::DEL_INDEX, AbeRequestsPeer::DEL_INDEX); + $criteria->addDescendingOrderByColumn(AbeRequestsPeer::ABE_REQ_DATE); $criteria->setLimit($arrayData['limit']); $criteria->setOffset($arrayData['start']); - $result = \AbeConfigurationPeer::doSelectRS($criteria); - $result->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $result = AbeConfigurationPeer::doSelectRS($criteria); + $result->setFetchmode(ResultSet::FETCHMODE_ASSOC); $data = Array(); $arrayPro = Array(); $arrayTAS = Array(); @@ -298,18 +316,18 @@ class ActionsByEmail while ($result->next()) { $data[] = $result->getRow(); - $criteriaRes = new \Criteria(); + $criteriaRes = new Criteria(); - $criteriaRes->addSelectColumn(\AbeResponsesPeer::ABE_RES_UID); - $criteriaRes->addSelectColumn(\AbeResponsesPeer::ABE_RES_CLIENT_IP); - $criteriaRes->addSelectColumn(\AbeResponsesPeer::ABE_RES_DATA); - $criteriaRes->addSelectColumn(\AbeResponsesPeer::ABE_RES_STATUS); - $criteriaRes->addSelectColumn(\AbeResponsesPeer::ABE_RES_MESSAGE); + $criteriaRes->addSelectColumn(AbeResponsesPeer::ABE_RES_UID); + $criteriaRes->addSelectColumn(AbeResponsesPeer::ABE_RES_CLIENT_IP); + $criteriaRes->addSelectColumn(AbeResponsesPeer::ABE_RES_DATA); + $criteriaRes->addSelectColumn(AbeResponsesPeer::ABE_RES_STATUS); + $criteriaRes->addSelectColumn(AbeResponsesPeer::ABE_RES_MESSAGE); - $criteriaRes->add(\AbeResponsesPeer::ABE_REQ_UID, $data[$index]['ABE_REQ_UID']); + $criteriaRes->add(AbeResponsesPeer::ABE_REQ_UID, $data[$index]['ABE_REQ_UID']); - $resultRes = \AbeResponsesPeer::doSelectRS($criteriaRes); - $resultRes->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $resultRes = AbeResponsesPeer::doSelectRS($criteriaRes); + $resultRes->setFetchmode(ResultSet::FETCHMODE_ASSOC); $resultRes->next(); $dataRes = Array(); @@ -327,17 +345,17 @@ class ActionsByEmail $data[$index]['ABE_RES_MESSAGE'] = ''; } - $criteriaRes = new \Criteria(); + $criteriaRes = new Criteria(); - $criteriaRes->addSelectColumn(\AppDelegationPeer::USR_UID); - $criteriaRes->addSelectColumn(\UsersPeer::USR_FIRSTNAME); - $criteriaRes->addSelectColumn(\UsersPeer::USR_LASTNAME); + $criteriaRes->addSelectColumn(AppDelegationPeer::USR_UID); + $criteriaRes->addSelectColumn(UsersPeer::USR_FIRSTNAME); + $criteriaRes->addSelectColumn(UsersPeer::USR_LASTNAME); - $criteria->addJoin(\AppDelegationPeer::APP_UID, $data[$index]['APP_UID']); - $criteria->addJoin(\AppDelegationPeer::DEL_INDEX, $data[$index]['DEL_PREVIOUS']); - $criteria->addJoin(\AppDelegationPeer::USR_UID, \UsersPeer::USR_UID); - $resultRes = \AppDelegationPeer::doSelectRS($criteriaRes); - $resultRes->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $criteria->addJoin(AppDelegationPeer::APP_UID, $data[$index]['APP_UID']); + $criteria->addJoin(AppDelegationPeer::DEL_INDEX, $data[$index]['DEL_PREVIOUS']); + $criteria->addJoin(AppDelegationPeer::USR_UID, UsersPeer::USR_UID); + $resultRes = AppDelegationPeer::doSelectRS($criteriaRes); + $resultRes->setFetchmode(ResultSet::FETCHMODE_ASSOC); $resultRes->next(); if ($dataRes = $resultRes->getRow()) { @@ -370,31 +388,31 @@ class ActionsByEmail $arrayData['REQ_UID'] = ''; } - $criteria = new \Criteria(); - $criteria->addSelectColumn(\AbeConfigurationPeer::ABE_UID); - $criteria->addSelectColumn(\AbeConfigurationPeer::PRO_UID); - $criteria->addSelectColumn(\AbeConfigurationPeer::TAS_UID); - - $criteria->addSelectColumn(\AbeRequestsPeer::ABE_REQ_UID); - $criteria->addSelectColumn(\AbeRequestsPeer::APP_UID); - $criteria->addSelectColumn(\AbeRequestsPeer::DEL_INDEX); - $criteria->addSelectColumn(\AbeRequestsPeer::ABE_REQ_SENT_TO); - $criteria->addSelectColumn(\AbeRequestsPeer::ABE_REQ_SUBJECT); - $criteria->addSelectColumn(\AbeRequestsPeer::ABE_REQ_BODY); - $criteria->addSelectColumn(\AbeRequestsPeer::ABE_REQ_ANSWERED); - $criteria->addSelectColumn(\AbeRequestsPeer::ABE_REQ_STATUS); - - $criteria->addSelectColumn(\AppDelegationPeer::DEL_FINISH_DATE); - - $criteria->add(\AbeRequestsPeer::ABE_REQ_UID, $arrayData['REQ_UID']); - $criteria->addJoin(\AbeRequestsPeer::ABE_UID, \AbeConfigurationPeer::ABE_UID); - $criteria->addJoin(\AppDelegationPeer::APP_UID, \AbeRequestsPeer::APP_UID); - $criteria->addJoin(\AppDelegationPeer::DEL_INDEX, \AbeRequestsPeer::DEL_INDEX); - $resultRes = \AbeRequestsPeer::doSelectRS($criteria); - $resultRes->setFetchmode(\ResultSet::FETCHMODE_ASSOC); - + $criteria = new Criteria(); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_UID); + $criteria->addSelectColumn(AbeConfigurationPeer::PRO_UID); + $criteria->addSelectColumn(AbeConfigurationPeer::TAS_UID); + $criteria->addSelectColumn(TaskPeer::TAS_ID); + $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_UID); + $criteria->addSelectColumn(AbeRequestsPeer::APP_UID); + $criteria->addSelectColumn(AbeRequestsPeer::DEL_INDEX); + $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_SENT_TO); + $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_SUBJECT); + $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_BODY); + $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_ANSWERED); + $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_STATUS); + $criteria->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE); + $criteria->addSelectColumn(AppDelegationPeer::APP_NUMBER); + $criteria->addJoin(AbeConfigurationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN); + $criteria->addJoin(AbeConfigurationPeer::ABE_UID, AbeRequestsPeer::ABE_UID, Criteria::LEFT_JOIN); + $conditions[] = [AbeRequestsPeer::APP_UID, AppDelegationPeer::APP_UID]; + $conditions[] = [AbeRequestsPeer::DEL_INDEX, AppDelegationPeer::DEL_INDEX]; + $criteria->addJoinMC($conditions, Criteria::LEFT_JOIN); + $criteria->add(AbeRequestsPeer::ABE_REQ_UID, $arrayData['REQ_UID']); + $resultRes = AbeRequestsPeer::doSelectRS($criteria); + $resultRes->setFetchmode(ResultSet::FETCHMODE_ASSOC); $resultRes->next(); - $dataRes = Array(); + $dataRes = []; if ($dataRes = $resultRes->getRow()) { if (is_null($dataRes['DEL_FINISH_DATE'])) { @@ -402,7 +420,7 @@ class ActionsByEmail $emailServer = new \ProcessMaker\BusinessModel\EmailServer(); $criteria = $emailServer->getEmailServerCriteria(); $rsCriteria = \EmailServerPeer::doSelectRS($criteria); - $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); if ($rsCriteria->next()) { $row = $rsCriteria->getRow(); @@ -414,7 +432,7 @@ class ActionsByEmail $spool = new SpoolRun(); $spool->setConfig($aSetup); - $spool->create(array( + $spool->create([ 'msg_uid' => '', 'app_uid' => $dataRes['APP_UID'], 'del_index' => $dataRes['DEL_INDEX'], @@ -427,29 +445,30 @@ class ActionsByEmail 'app_msg_bcc' => '', 'app_msg_attach' => '', 'app_msg_template' => '', - 'app_msg_status' => 'pending' - )); + 'app_msg_status' => 'pending', + "tas_id" => $dataRes['TAS_ID'], + "app_number" => isset($dataRes['APP_NUMBER']) ? $dataRes['APP_NUMBER'] : '' + ]); if ($spool->sendMail()) { $dataRes['ABE_REQ_STATUS'] = 'SENT'; - - $message = \G::LoadTranslation('ID_EMAIL_RESENT_TO') . ': '. $dataRes['ABE_REQ_SENT_TO']; + $message = G::LoadTranslation('ID_EMAIL_RESENT_TO') . ': ' . $dataRes['ABE_REQ_SENT_TO']; } else { $dataRes['ABE_REQ_STATUS'] = 'ERROR'; - $message = \G::LoadTranslation('ID_THERE_PROBLEM_SENDING_EMAIL') . ': '. $dataRes['ABE_REQ_SENT_TO'] . ', ' . G::LoadTranslation('ID_PLEASE_TRY_LATER'); + $message = G::LoadTranslation('ID_THERE_PROBLEM_SENDING_EMAIL') . ': ' . $dataRes['ABE_REQ_SENT_TO'] . ', ' . G::LoadTranslation('ID_PLEASE_TRY_LATER'); } try { - $abeRequestsInstance = new \AbeRequests(); + $abeRequestsInstance = new AbeRequests(); $abeRequestsInstance->createOrUpdate($dataRes); - } catch (\Exception $error) { + } catch (Exception $error) { throw $error; } } else { - $message = \G::LoadTranslation('ID_UNABLE_TO_SEND_EMAIL'); + $message = G::LoadTranslation('ID_UNABLE_TO_SEND_EMAIL'); } } else { - $message = \G::LoadTranslation('ID_UNEXPECTED_ERROR_OCCURRED_PLEASE'); + $message = G::LoadTranslation('ID_UNEXPECTED_ERROR_OCCURRED_PLEASE'); } //Return @@ -469,29 +488,29 @@ class ActionsByEmail $arrayData['REQ_UID'] = ''; } - $criteria = new \Criteria(); - $criteria->addSelectColumn(\AbeConfigurationPeer::ABE_UID); - $criteria->addSelectColumn(\AbeConfigurationPeer::PRO_UID); - $criteria->addSelectColumn(\AbeConfigurationPeer::TAS_UID); - $criteria->addSelectColumn(\AbeConfigurationPeer::DYN_UID); - $criteria->addSelectColumn(\AbeConfigurationPeer::ABE_ACTION_FIELD); + $criteria = new Criteria(); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_UID); + $criteria->addSelectColumn(AbeConfigurationPeer::PRO_UID); + $criteria->addSelectColumn(AbeConfigurationPeer::TAS_UID); + $criteria->addSelectColumn(AbeConfigurationPeer::DYN_UID); + $criteria->addSelectColumn(AbeConfigurationPeer::ABE_ACTION_FIELD); - $criteria->addSelectColumn(\AbeRequestsPeer::ABE_REQ_UID); - $criteria->addSelectColumn(\AbeRequestsPeer::APP_UID); - $criteria->addSelectColumn(\AbeRequestsPeer::DEL_INDEX); + $criteria->addSelectColumn(AbeRequestsPeer::ABE_REQ_UID); + $criteria->addSelectColumn(AbeRequestsPeer::APP_UID); + $criteria->addSelectColumn(AbeRequestsPeer::DEL_INDEX); - $criteria->addSelectColumn(\AbeResponsesPeer::ABE_RES_UID); - $criteria->addSelectColumn(\AbeResponsesPeer::ABE_RES_DATA); + $criteria->addSelectColumn(AbeResponsesPeer::ABE_RES_UID); + $criteria->addSelectColumn(AbeResponsesPeer::ABE_RES_DATA); - $criteria->add(\AbeRequestsPeer::ABE_REQ_UID, $arrayData['REQ_UID']); - $criteria->addJoin(\AbeRequestsPeer::ABE_UID, \AbeConfigurationPeer::ABE_UID); - $criteria->addJoin(\AbeResponsesPeer::ABE_REQ_UID, \AbeRequestsPeer::ABE_REQ_UID); - $resultRes = \AbeRequestsPeer::doSelectRS($criteria); - $resultRes->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $criteria->add(AbeRequestsPeer::ABE_REQ_UID, $arrayData['REQ_UID']); + $criteria->addJoin(AbeRequestsPeer::ABE_UID, AbeConfigurationPeer::ABE_UID); + $criteria->addJoin(AbeResponsesPeer::ABE_REQ_UID, AbeRequestsPeer::ABE_REQ_UID); + $resultRes = AbeRequestsPeer::doSelectRS($criteria); + $resultRes->setFetchmode(ResultSet::FETCHMODE_ASSOC); $resultRes->next(); $dataRes = Array(); - $message = \G::LoadTranslation('ID_USER_NOT_RESPONDED_REQUEST'); + $message = G::LoadTranslation('ID_USER_NOT_RESPONDED_REQUEST'); if ($dataRes = $resultRes->getRow()) { $_SESSION['CURRENT_DYN_UID'] = trim($dataRes['DYN_UID']); @@ -572,12 +591,12 @@ class ActionsByEmail $configuration['CURRENT_DYNAFORM'] = trim($dataRes['DYN_UID']); $configuration['PRO_UID'] = trim($dataRes['PRO_UID']); - $criteriaD = new \Criteria(); + $criteriaD = new Criteria(); $criteriaD->addSelectColumn(\DynaformPeer::DYN_CONTENT); $criteriaD->addSelectColumn(\DynaformPeer::PRO_UID); $criteriaD->add(\DynaformPeer::DYN_UID, trim($dataRes['DYN_UID'])); $resultD = \DynaformPeer::doSelectRS($criteriaD); - $resultD->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $resultD->setFetchmode(ResultSet::FETCHMODE_ASSOC); $resultD->next(); $configuration = $resultD->getRow(); @@ -587,7 +606,7 @@ class ActionsByEmail if ($dataRes['ABE_RES_DATA'] !== '') { $value = unserialize($dataRes['ABE_RES_DATA']); $actionField = str_replace(array('@@','@#','@=','@%','@?','@$'), '', $dataRes['ABE_ACTION_FIELD']); - $variables = \G::json_decode($configuration['DYN_CONTENT'], true); + $variables = G::json_decode($configuration['DYN_CONTENT'], true); if (is_array($value)) { if(isset($variables['items'][0]['items'])) { $fields = $variables['items'][0]['items']; @@ -654,13 +673,13 @@ class ActionsByEmail ); //Verify login - $criteria = new \Criteria('workflow'); + $criteria = new Criteria('workflow'); - $criteria->add(\AbeConfigurationPeer::PRO_UID, $arrayAppDelegationData['PRO_UID'], \Criteria::EQUAL); - $criteria->add(\AbeConfigurationPeer::TAS_UID, $arrayAppDelegationData['TAS_UID'], \Criteria::EQUAL); + $criteria->add(AbeConfigurationPeer::PRO_UID, $arrayAppDelegationData['PRO_UID'], Criteria::EQUAL); + $criteria->add(AbeConfigurationPeer::TAS_UID, $arrayAppDelegationData['TAS_UID'], Criteria::EQUAL); - $rsCriteria = \AbeConfigurationPeer::doSelectRS($criteria); - $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria = AbeConfigurationPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); if ($rsCriteria->next()) { $record = $rsCriteria->getRow(); @@ -671,7 +690,7 @@ class ActionsByEmail if (!isset($_SESSION['USER_LOGGED'])) { /*----------------------------------********---------------------------------*/ //SSO - if (\PMLicensedFeatures::getSingleton()->verifyfeature('x4TTzlISnp2K2tnSTJoMC8rTDRMTjlhMCtZeXV0QnNCLzU=')) { + if (PMLicensedFeatures::getSingleton()->verifyfeature('x4TTzlISnp2K2tnSTJoMC8rTDRMTjlhMCtZeXV0QnNCLzU=')) { $sso = new \PmSsoClass(); @@ -716,7 +735,7 @@ class ActionsByEmail $flagLogin = true; } else { if ($_SESSION['USER_LOGGED'] != $arrayAppDelegationData['USR_UID']) { - \G::SendTemporalMessage('ID_CASE_ASSIGNED_ANOTHER_USER', 'error', 'label'); + G::SendTemporalMessage('ID_CASE_ASSIGNED_ANOTHER_USER', 'error', 'label'); $flagLogin = true; } @@ -724,7 +743,7 @@ class ActionsByEmail if ($flagLogin) { header( - 'Location: /sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . + 'Location: /sys' . config("system.workspace") . '/' . SYS_LANG . '/' . SYS_SKIN . '/login/login?u=' . urlencode($_SERVER['REQUEST_URI']) ); @@ -732,7 +751,7 @@ class ActionsByEmail } } } - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php index a6ebcf7c9..ca7a33919 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases.php @@ -1,17 +1,57 @@ formatFieldNameInUppercase)? strtoupper($fieldName) : strtolower($fieldName); + return ($this->formatFieldNameInUppercase) ? strtoupper($fieldName) : strtolower($fieldName); } catch (Exception $e) { throw $e; } @@ -53,14 +93,14 @@ class Cases /** * Throw the exception "The Case doesn't exist" * - * @param string $applicationUid Unique id of Case + * @param string $applicationUid Unique id of Case * @param string $fieldNameForException Field name for the exception * * @return void */ private function throwExceptionCaseDoesNotExist($applicationUid, $fieldNameForException) { - throw new Exception(\G::LoadTranslation( + throw new Exception(G::LoadTranslation( 'ID_CASE_DOES_NOT_EXIST2', [$fieldNameForException, $applicationUid] )); } @@ -68,8 +108,8 @@ class Cases /** * Verify if does not exist the Case in table APPLICATION * - * @param string $applicationUid Unique id of Case - * @param string $delIndex Delegation index + * @param string $applicationUid Unique id of Case + * @param string $delIndex Delegation index * @param string $fieldNameForException Field name for the exception * * return void Throw exception if does not exist the Case in table APPLICATION @@ -77,12 +117,12 @@ class Cases public function throwExceptionIfNotExistsCase($applicationUid, $delIndex, $fieldNameForException) { try { - $obj = \ApplicationPeer::retrieveByPK($applicationUid); + $obj = ApplicationPeer::retrieveByPK($applicationUid); $flag = is_null($obj); if (!$flag && $delIndex > 0) { - $obj = \AppDelegationPeer::retrieveByPK($applicationUid, $delIndex); + $obj = AppDelegationPeer::retrieveByPK($applicationUid, $delIndex); $flag = is_null($obj); } @@ -98,9 +138,9 @@ class Cases /** * Get Application record * - * @param string $applicationUid Unique id of Case - * @param array $arrayVariableNameForException Variable name for exception - * @param bool $throwException Flag to throw the exception if the main parameters are invalid or do not exist + * @param string $applicationUid Unique id of Case + * @param array $arrayVariableNameForException Variable name for exception + * @param bool $throwException Flag to throw the exception if the main parameters are invalid or do not exist * (TRUE: throw the exception; FALSE: returns FALSE) * * @return array Returns an array with Application record, ThrowTheException/FALSE otherwise @@ -111,7 +151,7 @@ class Cases $throwException = true ) { try { - $obj = \ApplicationPeer::retrieveByPK($applicationUid); + $obj = ApplicationPeer::retrieveByPK($applicationUid); if (is_null($obj)) { if ($throwException) { @@ -124,7 +164,7 @@ class Cases } //Return - return $obj->toArray(\BasePeer::TYPE_FIELDNAME); + return $obj->toArray(BasePeer::TYPE_FIELDNAME); } catch (Exception $e) { throw $e; } @@ -133,10 +173,10 @@ class Cases /** * Get AppDelegation record * - * @param string $applicationUid Unique id of Case - * @param int $delIndex Delegation index - * @param array $arrayVariableNameForException Variable name for exception - * @param bool $throwException Flag to throw the exception if the main parameters are invalid or do not exist + * @param string $applicationUid Unique id of Case + * @param int $delIndex Delegation index + * @param array $arrayVariableNameForException Variable name for exception + * @param bool $throwException Flag to throw the exception if the main parameters are invalid or do not exist * (TRUE: throw the exception; FALSE: returns FALSE) * * @return array Returns an array with AppDelegation record, ThrowTheException/FALSE otherwise @@ -148,11 +188,11 @@ class Cases $throwException = true ) { try { - $obj = \AppDelegationPeer::retrieveByPK($applicationUid, $delIndex); + $obj = AppDelegationPeer::retrieveByPK($applicationUid, $delIndex); if (is_null($obj)) { if ($throwException) { - throw new Exception(\G::LoadTranslation( + throw new Exception(G::LoadTranslation( 'ID_CASE_DEL_INDEX_DOES_NOT_EXIST', [ $arrayVariableNameForException['$applicationUid'], @@ -167,7 +207,7 @@ class Cases } //Return - return $obj->toArray(\BasePeer::TYPE_FIELDNAME); + return $obj->toArray(BasePeer::TYPE_FIELDNAME); } catch (Exception $e) { throw $e; } @@ -176,8 +216,8 @@ class Cases /** * Get list counters * - * @param string $userUid Unique id of User - * @param array $arrayType Type lists + * @param string $userUid Unique id of User + * @param array $arrayType Type lists * * @return array Return the list counters */ @@ -188,7 +228,7 @@ class Cases $solrConf = System::solrEnv(); if ($solrConf !== false) { - $ApplicationSolrIndex = new \AppSolr( + $ApplicationSolrIndex = new AppSolr( $solrConf['solr_enabled'], $solrConf['solr_host'], $solrConf['solr_instance'] @@ -199,7 +239,7 @@ class Cases } } - $appCacheView = new \AppCacheView(); + $appCacheView = new AppCacheView(); if ($solrEnabled) { $arrayListCounter = array_merge( @@ -227,7 +267,7 @@ class Cases * /light/unassigned * * @access public - * @param array $dataList, Data for list + * @param array $dataList , Data for list * @return array $response */ public function getList($dataList = array()) @@ -239,48 +279,48 @@ class Cases //We need to use the USR_UID for the cases in the list $userUid = isset($dataList["userUid"]) ? $dataList["userUid"] : $dataList["userId"]; - $callback = isset( $dataList["callback"] ) ? $dataList["callback"] : "stcCallback1001"; - $dir = isset( $dataList["dir"] ) ? $dataList["dir"] : "DESC"; - $sort = isset( $dataList["sort"] ) ? $dataList["sort"] : "APPLICATION.APP_NUMBER"; + $callback = isset($dataList["callback"]) ? $dataList["callback"] : "stcCallback1001"; + $dir = isset($dataList["dir"]) ? $dataList["dir"] : "DESC"; + $sort = isset($dataList["sort"]) ? $dataList["sort"] : "APPLICATION.APP_NUMBER"; if ($sort === 'APP_CACHE_VIEW.APP_NUMBER') { $sort = "APPLICATION.APP_NUMBER"; } - $start = isset( $dataList["start"] ) ? $dataList["start"] : "0"; - $limit = isset( $dataList["limit"] ) ? $dataList["limit"] : ""; - $filter = isset( $dataList["filter"] ) ? $dataList["filter"] : ""; - $process = isset( $dataList["process"] ) ? $dataList["process"] : ""; - $category = isset( $dataList["category"] ) ? $dataList["category"] : ""; - $status = isset( $dataList["status"] ) ? strtoupper( $dataList["status"] ) : ""; - $search = isset( $dataList["search"] ) ? $dataList["search"] : ""; - $action = isset( $dataList["action"] ) ? $dataList["action"] : "todo"; - $paged = isset( $dataList["paged"] ) ? $dataList["paged"] : true; + $start = isset($dataList["start"]) ? $dataList["start"] : "0"; + $limit = isset($dataList["limit"]) ? $dataList["limit"] : ""; + $filter = isset($dataList["filter"]) ? $dataList["filter"] : ""; + $process = isset($dataList["process"]) ? $dataList["process"] : ""; + $category = isset($dataList["category"]) ? $dataList["category"] : ""; + $status = isset($dataList["status"]) ? strtoupper($dataList["status"]) : ""; + $search = isset($dataList["search"]) ? $dataList["search"] : ""; + $action = isset($dataList["action"]) ? $dataList["action"] : "todo"; + $paged = isset($dataList["paged"]) ? $dataList["paged"] : true; $type = "extjs"; - $dateFrom = (!empty( $dataList["dateFrom"] )) ? substr( $dataList["dateFrom"], 0, 10 ) : ""; - $dateTo = (!empty( $dataList["dateTo"] )) ? substr( $dataList["dateTo"], 0, 10 ) : ""; - $newerThan = (!empty($dataList['newerThan']))? $dataList['newerThan'] : ''; - $oldestThan = (!empty($dataList['oldestthan']))? $dataList['oldestthan'] : ''; + $dateFrom = (!empty($dataList["dateFrom"])) ? substr($dataList["dateFrom"], 0, 10) : ""; + $dateTo = (!empty($dataList["dateTo"])) ? substr($dataList["dateTo"], 0, 10) : ""; + $newerThan = (!empty($dataList['newerThan'])) ? $dataList['newerThan'] : ''; + $oldestThan = (!empty($dataList['oldestthan'])) ? $dataList['oldestthan'] : ''; $apps = new Applications(); $response = $apps->getAll( - $userUid, - $start, - $limit, - $action, - $filter, - $search, - $process, - $status, - $type, - $dateFrom, - $dateTo, - $callback, - $dir, - (strpos($sort, ".") !== false)? $sort : "APP_CACHE_VIEW." . $sort, - $category, - true, - $paged, - $newerThan, - $oldestThan + $userUid, + $start, + $limit, + $action, + $filter, + $search, + $process, + $status, + $type, + $dateFrom, + $dateTo, + $callback, + $dir, + (strpos($sort, ".") !== false) ? $sort : "APP_CACHE_VIEW." . $sort, + $category, + true, + $paged, + $newerThan, + $oldestThan ); if (!empty($response['data'])) { foreach ($response['data'] as &$value) { @@ -290,7 +330,7 @@ class Cases if ($paged) { $response['total'] = $response['totalCount']; - $response['start'] = $start+1; + $response['start'] = $start + 1; $response['limit'] = $limit; $response['sort'] = G::toLower($sort); $response['dir'] = G::toLower($dir); @@ -300,13 +340,15 @@ class Cases } else { $response = $response['data']; } + return $response; } + /** * Search cases and get list of cases * * @access public - * @param array $dataList, Data for list + * @param array $dataList , Data for list * @return array $response */ public function getCasesSearch($dataList = array()) @@ -318,21 +360,21 @@ class Cases //We need to user the USR_ID for performance $userId = $dataList["userId"]; - $dir = isset( $dataList["dir"] ) ? $dataList["dir"] : "DESC"; - $sort = isset( $dataList["sort"] ) ? $dataList["sort"] : "APPLICATION.APP_NUMBER"; + $dir = isset($dataList["dir"]) ? $dataList["dir"] : "DESC"; + $sort = isset($dataList["sort"]) ? $dataList["sort"] : "APPLICATION.APP_NUMBER"; if ($sort === 'APP_CACHE_VIEW.APP_NUMBER') { $sort = "APPLICATION.APP_NUMBER"; } - $start = isset( $dataList["start"] ) ? $dataList["start"] : "0"; - $limit = isset( $dataList["limit"] ) ? $dataList["limit"] : ""; - $process = isset( $dataList["process"] ) ? $dataList["process"] : ""; - $category = isset( $dataList["category"] ) ? $dataList["category"] : ""; - $status = isset( $dataList["status"] ) ? strtoupper( $dataList["status"] ) : ""; - $user = isset( $dataList["user"] ) ? $dataList["user"] : ""; - $search = isset( $dataList["search"] ) ? $dataList["search"] : ""; - $dateFrom = (!empty( $dataList["dateFrom"] )) ? substr( $dataList["dateFrom"], 0, 10 ) : ""; - $dateTo = (!empty( $dataList["dateTo"] )) ? substr( $dataList["dateTo"], 0, 10 ) : ""; - $filterStatus = isset( $dataList["filterStatus"] ) ? strtoupper( $dataList["filterStatus"] ) : ""; + $start = isset($dataList["start"]) ? $dataList["start"] : "0"; + $limit = isset($dataList["limit"]) ? $dataList["limit"] : ""; + $process = isset($dataList["process"]) ? $dataList["process"] : ""; + $category = isset($dataList["category"]) ? $dataList["category"] : ""; + $status = isset($dataList["status"]) ? strtoupper($dataList["status"]) : ""; + $user = isset($dataList["user"]) ? $dataList["user"] : ""; + $search = isset($dataList["search"]) ? $dataList["search"] : ""; + $dateFrom = (!empty($dataList["dateFrom"])) ? substr($dataList["dateFrom"], 0, 10) : ""; + $dateTo = (!empty($dataList["dateTo"])) ? substr($dataList["dateTo"], 0, 10) : ""; + $filterStatus = isset($dataList["filterStatus"]) ? strtoupper($dataList["filterStatus"]) : ""; $apps = new Applications(); $response = $apps->searchAll( @@ -350,7 +392,7 @@ class Cases ); $response['total'] = 0; - $response['start'] = $start+1; + $response['start'] = $start + 1; $response['limit'] = $limit; $response['sort'] = G::toLower($sort); $response['dir'] = G::toLower($dir); @@ -378,7 +420,7 @@ class Cases try { $solrEnabled = 0; if (($solrEnv = System::solrEnv()) !== false) { - $appSolr = new \AppSolr( + $appSolr = new AppSolr( $solrEnv["solr_enabled"], $solrEnv["solr_host"], $solrEnv["solr_instance"] @@ -396,29 +438,29 @@ class Cases $columsToInclude = array("APP_UID"); $solrSearchText = null; //Todo - $solrSearchText = $solrSearchText . (($solrSearchText != null)? " OR " : null) . "(APP_STATUS:TO_DO AND APP_ASSIGNED_USERS:" . $userUid . ")"; + $solrSearchText = $solrSearchText . (($solrSearchText != null) ? " OR " : null) . "(APP_STATUS:TO_DO AND APP_ASSIGNED_USERS:" . $userUid . ")"; $delegationIndexes[] = "APP_ASSIGNED_USER_DEL_INDEX_" . $userUid . "_txt"; //Draft - $solrSearchText = $solrSearchText . (($solrSearchText != null)? " OR " : null) . "(APP_STATUS:DRAFT AND APP_DRAFT_USER:" . $userUid . ")"; + $solrSearchText = $solrSearchText . (($solrSearchText != null) ? " OR " : null) . "(APP_STATUS:DRAFT AND APP_DRAFT_USER:" . $userUid . ")"; //Index is allways 1 $solrSearchText = "($solrSearchText)"; //Add del_index dynamic fields to list of resulting columns $columsToIncludeFinal = array_merge($columsToInclude, $delegationIndexes); - $solrRequestData = \EntitySolrRequestData::createForRequestPagination( + $solrRequestData = EntitySolrRequestData::createForRequestPagination( array( - "workspace" => $solrEnv["solr_instance"], + "workspace" => $solrEnv["solr_instance"], "startAfter" => 0, - "pageSize" => 1000, + "pageSize" => 1000, "searchText" => $solrSearchText, "numSortingCols" => 1, "sortCols" => array("APP_NUMBER"), - "sortDir" => array(strtolower("DESC")), - "includeCols" => $columsToIncludeFinal, + "sortDir" => array(strtolower("DESC")), + "includeCols" => $columsToIncludeFinal, "resultFormat" => "json" ) ); //Use search index to return list of cases - $searchIndex = new \BpmnEngineServicesSearchIndex($appSolr->isSolrEnabled(), $solrEnv["solr_host"]); + $searchIndex = new BpmnEngineServicesSearchIndex($appSolr->isSolrEnabled(), $solrEnv["solr_host"]); //Execute query $solrQueryResult = $searchIndex->getDataTablePaginatedList($solrRequestData); //Get the missing data from database @@ -482,7 +524,7 @@ class Cases $array['app_create_date'] = $array['createDate']; $array['app_update_date'] = $array['updateDate']; $array['current_task'] = $array['currentUsers']; - for ($i = 0; $i<=count($array['current_task'])-1; $i++) { + for ($i = 0; $i <= count($array['current_task']) - 1; $i++) { $current_task = $array['current_task'][$i]; $current_task['usr_uid'] = $current_task['userId']; $current_task['usr_name'] = trim($current_task['userName']); @@ -519,16 +561,19 @@ class Cases $oResponse = json_decode(json_encode($array), false); $oResponse->current_task = $current_task; } + //Return return $oResponse; } } - } catch (\InvalidIndexSearchTextException $e) { + } catch (InvalidIndexSearchTextException $e) { $arrayData = array(); - $arrayData[] = array ("app_uid" => $e->getMessage(), - "app_name" => $e->getMessage(), - "del_index" => $e->getMessage(), - "pro_uid" => $e->getMessage()); + $arrayData[] = array( + "app_uid" => $e->getMessage(), + "app_name" => $e->getMessage(), + "del_index" => $e->getMessage(), + "pro_uid" => $e->getMessage() + ); throw (new Exception($arrayData)); } } else { @@ -553,7 +598,7 @@ class Cases $aCurrent_task = array(); - for ($i = 0; $i<=count($array['current_task'])-1; $i++) { + for ($i = 0; $i <= count($array['current_task']) - 1; $i++) { $current_task = $array['current_task'][$i]; $current_task['usr_uid'] = $current_task['userId']; $current_task['usr_name'] = trim($current_task['userName']); @@ -592,6 +637,7 @@ class Cases $current_task = json_decode(json_encode($aCurrent_task), false); $oResponse = json_decode(json_encode($array), false); $oResponse->current_task = $current_task; + //Return return $oResponse; } @@ -614,48 +660,51 @@ class Cases //Verify data $this->throwExceptionIfNotExistsCase($applicationUid, 0, $this->getFieldNameByFormatFieldName("APP_UID")); - $criteria = new \Criteria("workflow"); + $criteria = new Criteria("workflow"); - $criteria->addSelectColumn(\ApplicationPeer::APP_UID); + $criteria->addSelectColumn(ApplicationPeer::APP_UID); - $criteria->add(\ApplicationPeer::APP_UID, $applicationUid, \Criteria::EQUAL); - $criteria->add(\ApplicationPeer::APP_STATUS, "COMPLETED", \Criteria::EQUAL); + $criteria->add(ApplicationPeer::APP_UID, $applicationUid, Criteria::EQUAL); + $criteria->add(ApplicationPeer::APP_STATUS, "COMPLETED", Criteria::EQUAL); - $rsCriteria = \ApplicationPeer::doSelectRS($criteria); + $rsCriteria = ApplicationPeer::doSelectRS($criteria); if ($rsCriteria->next()) { - throw new Exception(\G::LoadTranslation("ID_CASE_NO_CURRENT_TASKS_BECAUSE_CASE_ITS_COMPLETED", array($this->getFieldNameByFormatFieldName("APP_UID"), $applicationUid))); + throw new Exception(G::LoadTranslation("ID_CASE_NO_CURRENT_TASKS_BECAUSE_CASE_ITS_COMPLETED", + array($this->getFieldNameByFormatFieldName("APP_UID"), $applicationUid))); } //Get data $result = array(); - $oCriteria = new \Criteria( 'workflow' ); - $del = \DBAdapter::getStringDelimiter(); - $oCriteria->addSelectColumn(\AppDelegationPeer::DEL_INDEX); - $oCriteria->addSelectColumn(\AppDelegationPeer::TAS_UID); - $oCriteria->addSelectColumn(\AppDelegationPeer::DEL_INIT_DATE); - $oCriteria->addSelectColumn(\AppDelegationPeer::DEL_TASK_DUE_DATE); - $oCriteria->addSelectColumn(\TaskPeer::TAS_TITLE); - $oCriteria->addJoin(\AppDelegationPeer::TAS_UID, \TaskPeer::TAS_UID); - $oCriteria->add( \AppDelegationPeer::APP_UID, $applicationUid ); - $oCriteria->add( \AppDelegationPeer::USR_UID, $userUid ); - $oCriteria->add( \AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN' ); - $oCriteria->add( \AppDelegationPeer::DEL_FINISH_DATE, null, \Criteria::ISNULL ); - $oDataset = \AppDelegationPeer::doSelectRS( $oCriteria ); - $oDataset->setFetchmode( \ResultSet::FETCHMODE_ASSOC ); + $oCriteria = new Criteria('workflow'); + $del = DBAdapter::getStringDelimiter(); + $oCriteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); + $oCriteria->addSelectColumn(AppDelegationPeer::TAS_UID); + $oCriteria->addSelectColumn(AppDelegationPeer::DEL_INIT_DATE); + $oCriteria->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE); + $oCriteria->addSelectColumn(TaskPeer::TAS_TITLE); + $oCriteria->addJoin(AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID); + $oCriteria->add(AppDelegationPeer::APP_UID, $applicationUid); + $oCriteria->add(AppDelegationPeer::USR_UID, $userUid); + $oCriteria->add(AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN'); + $oCriteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); + $oDataset = AppDelegationPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); while ($aRow = $oDataset->getRow()) { - $result = array ('tas_uid' => $aRow['TAS_UID'], - 'tas_title' => $aRow['TAS_TITLE'], - 'del_index' => $aRow['DEL_INDEX'], - "del_init_date" => $aRow["DEL_INIT_DATE"] . "", - "del_task_due_date" => $aRow["DEL_TASK_DUE_DATE"]); + $result = array( + 'tas_uid' => $aRow['TAS_UID'], + 'tas_title' => $aRow['TAS_TITLE'], + 'del_index' => $aRow['DEL_INDEX'], + "del_init_date" => $aRow["DEL_INIT_DATE"] . "", + "del_task_due_date" => $aRow["DEL_TASK_DUE_DATE"] + ); $oDataset->next(); } //Return if (empty($result)) { - throw new Exception(\G::LoadTranslation("ID_CASES_INCORRECT_INFORMATION", array($applicationUid))); + throw new Exception(G::LoadTranslation("ID_CASES_INCORRECT_INFORMATION", array($applicationUid))); } else { return $result; } @@ -683,9 +732,9 @@ class Cases $variables = array_shift($variables); } Validator::proUid($processUid, '$pro_uid'); - $oTask = new \Task(); - if (! $oTask->taskExists($taskUid)) { - throw new Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('tas_uid'))); + $oTask = new ModelTask(); + if (!$oTask->taskExists($taskUid)) { + throw new Exception(G::LoadTranslation("ID_INVALID_VALUE_FOR", array('tas_uid'))); } $fields = $ws->newCase($processUid, $userUid, $taskUid, $variables); $array = json_decode(json_encode($fields), true); @@ -701,6 +750,7 @@ class Cases unset($array['caseNumber']); } $oResponse = json_decode(json_encode($array), false); + //Return return $oResponse; } catch (Exception $e) { @@ -729,17 +779,17 @@ class Cases $variables = array(array()); } Validator::proUid($processUid, '$pro_uid'); - $user = new \Users(); - if (! $user->userExists( $userUid )) { - throw new Exception(\G::LoadTranslation("ID_INVALID_VALUE_FOR", array('usr_uid'))); + $user = new ModelUsers(); + if (!$user->userExists($userUid)) { + throw new Exception(G::LoadTranslation("ID_INVALID_VALUE_FOR", array('usr_uid'))); } $fields = $ws->newCaseImpersonate($processUid, $userUid, $variables, $taskUid); $array = json_decode(json_encode($fields), true); if ($array ["status_code"] != 0) { if ($array ["status_code"] == 12) { - throw (new Exception(\G::loadTranslation('ID_NO_STARTING_TASK') . '. tas_uid.')); + throw (new Exception(G::loadTranslation('ID_NO_STARTING_TASK') . '. tas_uid.')); } elseif ($array ["status_code"] == 13) { - throw (new Exception(\G::loadTranslation('ID_MULTIPLE_STARTING_TASKS') . '. tas_uid.')); + throw (new Exception(G::loadTranslation('ID_MULTIPLE_STARTING_TASKS') . '. tas_uid.')); } throw (new Exception($array ["message"])); } else { @@ -752,6 +802,7 @@ class Cases unset($array['caseNumber']); } $oResponse = json_decode(json_encode($array), false); + //Return return $oResponse; } catch (Exception $e) { @@ -789,7 +840,7 @@ class Cases unset($array['timestamp']); } } else { - throw new Exception(\G::LoadTranslation("ID_CASES_INCORRECT_INFORMATION", array($applicationUid))); + throw new Exception(G::LoadTranslation("ID_CASES_INCORRECT_INFORMATION", array($applicationUid))); } } catch (Exception $e) { throw $e; @@ -800,9 +851,9 @@ class Cases * Put cancel case * * @access public - * @param string $app_uid, Uid for case - * @param string $usr_uid, Uid for user - * @param string $del_index, Index for case + * @param string $app_uid , Uid for case + * @param string $usr_uid , Uid for user + * @param string $del_index , Index for case * @return array * * @author Brayan Pereyra (Cochalo) @@ -821,32 +872,31 @@ class Cases } Validator::isInteger($del_index, '$del_index'); - $case = new \Cases(); + $case = new ClassesCases(); $fields = $case->loadCase($app_uid); if ($fields['APP_STATUS'] == 'CANCELLED') { - throw (new Exception(\G::LoadTranslation("ID_CASE_ALREADY_CANCELED", array($app_uid)))); + throw (new Exception(G::LoadTranslation("ID_CASE_ALREADY_CANCELED", array($app_uid)))); } - $appCacheView = new \AppCacheView(); + $processUser = new ProcessUser(); + $arrayProcess = $processUser->getProUidSupervisor($usr_uid); - $arrayProcess = $appCacheView->getProUidSupervisor($usr_uid); + $criteria = new Criteria("workflow"); - $criteria = new \Criteria("workflow"); - - $criteria->addSelectColumn(\AppDelegationPeer::APP_UID); - $criteria->add(\AppDelegationPeer::APP_UID, $app_uid, \Criteria::EQUAL); - $criteria->add(\AppDelegationPeer::DEL_INDEX, $del_index, \Criteria::EQUAL); + $criteria->addSelectColumn(AppDelegationPeer::APP_UID); + $criteria->add(AppDelegationPeer::APP_UID, $app_uid, Criteria::EQUAL); + $criteria->add(AppDelegationPeer::DEL_INDEX, $del_index, Criteria::EQUAL); $criteria->add( - $criteria->getNewCriterion(\AppDelegationPeer::USR_UID, $usr_uid, \Criteria::EQUAL)->addOr( - $criteria->getNewCriterion(\AppDelegationPeer::PRO_UID, $arrayProcess, \Criteria::IN)) + $criteria->getNewCriterion(AppDelegationPeer::USR_UID, $usr_uid, Criteria::EQUAL)->addOr( + $criteria->getNewCriterion(AppDelegationPeer::PRO_UID, $arrayProcess, Criteria::IN)) ); - $rsCriteria = \AppDelegationPeer::doSelectRS($criteria); + $rsCriteria = AppDelegationPeer::doSelectRS($criteria); if (!$rsCriteria->next()) { - throw (new Exception(\G::LoadTranslation("ID_CASE_USER_INVALID_CANCEL_CASE", array($usr_uid)))); + throw (new Exception(G::LoadTranslation("ID_CASE_USER_INVALID_CANCEL_CASE", array($usr_uid)))); } - $case->cancelCase( $app_uid, $del_index, $usr_uid ); + $case->cancelCase($app_uid, $del_index, $usr_uid); } /** @@ -856,7 +906,7 @@ class Cases * @param string $app_uid , Uid for case * @param string $usr_uid , Uid for user * @param bool|string $del_index , Index for case - * @param null|string $unpaused_date, Date for unpaused + * @param null|string $unpaused_date , Date for unpaused * @return array * * @author Brayan Pereyra (Cochalo) @@ -876,45 +926,44 @@ class Cases Validator::isInteger($del_index, '$del_index'); - $case = new \Cases(); + $case = new ClassesCases(); $fields = $case->loadCase($app_uid); if ($fields['APP_STATUS'] == 'CANCELLED') { - throw (new Exception(\G::LoadTranslation("ID_CASE_IS_CANCELED", array($app_uid)))); + throw (new Exception(G::LoadTranslation("ID_CASE_IS_CANCELED", array($app_uid)))); } - $oDelay = new \AppDelay(); + $oDelay = new AppDelay(); if ($oDelay->isPaused($app_uid, $del_index)) { - throw (new Exception(\G::LoadTranslation("ID_CASE_PAUSED", array($app_uid)))); + throw (new Exception(G::LoadTranslation("ID_CASE_PAUSED", array($app_uid)))); } - $appCacheView = new \AppCacheView(); + $processUser = new ProcessUser(); + $arrayProcess = $processUser->getProUidSupervisor($usr_uid); - $arrayProcess = $appCacheView->getProUidSupervisor($usr_uid); + $criteria = new Criteria("workflow"); - $criteria = new \Criteria("workflow"); - - $criteria->addSelectColumn(\AppDelegationPeer::APP_UID); - $criteria->add(\AppDelegationPeer::APP_UID, $app_uid, \Criteria::EQUAL); - $criteria->add(\AppDelegationPeer::DEL_INDEX, $del_index, \Criteria::EQUAL); + $criteria->addSelectColumn(AppDelegationPeer::APP_UID); + $criteria->add(AppDelegationPeer::APP_UID, $app_uid, Criteria::EQUAL); + $criteria->add(AppDelegationPeer::DEL_INDEX, $del_index, Criteria::EQUAL); $criteria->add( - $criteria->getNewCriterion(\AppDelegationPeer::USR_UID, $usr_uid, \Criteria::EQUAL)->addOr( - $criteria->getNewCriterion(\AppDelegationPeer::PRO_UID, $arrayProcess, \Criteria::IN)) + $criteria->getNewCriterion(AppDelegationPeer::USR_UID, $usr_uid, Criteria::EQUAL)->addOr( + $criteria->getNewCriterion(AppDelegationPeer::PRO_UID, $arrayProcess, Criteria::IN)) ); - $criteria->add(\AppDelegationPeer::DEL_THREAD_STATUS, "OPEN", \Criteria::EQUAL); - $criteria->add(\AppDelegationPeer::DEL_FINISH_DATE, null, \Criteria::ISNULL); + $criteria->add(AppDelegationPeer::DEL_THREAD_STATUS, "OPEN", Criteria::EQUAL); + $criteria->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); - $rsCriteria = \AppDelegationPeer::doSelectRS($criteria); + $rsCriteria = AppDelegationPeer::doSelectRS($criteria); if (!$rsCriteria->next()) { - throw (new Exception(\G::LoadTranslation("ID_CASE_USER_INVALID_PAUSED_CASE", array($usr_uid)))); + throw (new Exception(G::LoadTranslation("ID_CASE_USER_INVALID_PAUSED_CASE", array($usr_uid)))); } if ($unpaused_date != null) { Validator::isDate($unpaused_date, 'Y-m-d', '$unpaused_date'); } - $case->pauseCase( $app_uid, $del_index, $usr_uid, $unpaused_date ); + $case->pauseCase($app_uid, $del_index, $usr_uid, $unpaused_date); } /** @@ -941,43 +990,42 @@ class Cases } Validator::isInteger($del_index, '$del_index'); - $oDelay = new \AppDelay(); + $oDelay = new AppDelay(); if (!$oDelay->isPaused($app_uid, $del_index)) { - throw (new Exception(\G::LoadTranslation("ID_CASE_NOT_PAUSED", array($app_uid)))); + throw (new Exception(G::LoadTranslation("ID_CASE_NOT_PAUSED", array($app_uid)))); } - $appCacheView = new \AppCacheView(); + $processUser = new ProcessUser(); + $arrayProcess = $processUser->getProUidSupervisor($usr_uid); - $arrayProcess = $appCacheView->getProUidSupervisor($usr_uid); - - $criteria = new \Criteria("workflow"); - $criteria->addSelectColumn(\AppDelegationPeer::APP_UID); - $criteria->add(\AppDelegationPeer::APP_UID, $app_uid, \Criteria::EQUAL); - $criteria->add(\AppDelegationPeer::DEL_INDEX, $del_index, \Criteria::EQUAL); + $criteria = new Criteria("workflow"); + $criteria->addSelectColumn(AppDelegationPeer::APP_UID); + $criteria->add(AppDelegationPeer::APP_UID, $app_uid, Criteria::EQUAL); + $criteria->add(AppDelegationPeer::DEL_INDEX, $del_index, Criteria::EQUAL); $criteria->add( - $criteria->getNewCriterion(\AppDelegationPeer::USR_UID, $usr_uid, \Criteria::EQUAL)->addOr( - $criteria->getNewCriterion(\AppDelegationPeer::PRO_UID, $arrayProcess, \Criteria::IN)) + $criteria->getNewCriterion(AppDelegationPeer::USR_UID, $usr_uid, Criteria::EQUAL)->addOr( + $criteria->getNewCriterion(AppDelegationPeer::PRO_UID, $arrayProcess, Criteria::IN)) ); - $rsCriteria = \AppDelegationPeer::doSelectRS($criteria); + $rsCriteria = AppDelegationPeer::doSelectRS($criteria); if (!$rsCriteria->next()) { - throw (new Exception(\G::LoadTranslation("ID_CASE_USER_INVALID_UNPAUSE_CASE", array($usr_uid)))); + throw (new Exception(G::LoadTranslation("ID_CASE_USER_INVALID_UNPAUSE_CASE", array($usr_uid)))); } - $case = new \Cases(); - $case->unpauseCase( $app_uid, $del_index, $usr_uid ); + $case = new ClassesCases(); + $case->unpauseCase($app_uid, $del_index, $usr_uid); } /** * Put execute trigger case * * @access public - * @param string $appUid, Uid for case - * @param string $triUid, Uid for trigger - * @param string $userUid, Uid for user - * @param bool|string $delIndex, Index for case + * @param string $appUid , Uid for case + * @param string $triUid , Uid for trigger + * @param string $userUid , Uid for user + * @param bool|string $delIndex , Index for case * * @return array * @throws Exception @@ -1004,7 +1052,7 @@ class Cases global $RBAC; if (!method_exists($RBAC, 'initRBAC')) { - $RBAC = RBAC::getSingleton( PATH_DATA, session_id() ); + $RBAC = RBAC::getSingleton(PATH_DATA, session_id()); $RBAC->sSystem = 'PROCESSMAKER'; } @@ -1020,8 +1068,8 @@ class Cases * Delete case * * @access public - * @param string $app_uid, Uid for case - * @param string $usr_uid, Uid user + * @param string $app_uid , Uid for case + * @param string $usr_uid , Uid user * @return array * * @author Brayan Pereyra (Cochalo) @@ -1032,24 +1080,24 @@ class Cases Validator::isString($app_uid, '$app_uid'); Validator::appUid($app_uid, '$app_uid'); - $criteria = new \Criteria(); - $criteria->addSelectColumn( \ApplicationPeer::APP_STATUS ); - $criteria->addSelectColumn( \ApplicationPeer::APP_INIT_USER ); - $criteria->add( \ApplicationPeer::APP_UID, $app_uid, \Criteria::EQUAL ); - $dataset = \ApplicationPeer::doSelectRS($criteria); - $dataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $criteria = new Criteria(); + $criteria->addSelectColumn(ApplicationPeer::APP_STATUS); + $criteria->addSelectColumn(ApplicationPeer::APP_INIT_USER); + $criteria->add(ApplicationPeer::APP_UID, $app_uid, Criteria::EQUAL); + $dataset = ApplicationPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataset->next(); $aRow = $dataset->getRow(); if ($aRow['APP_STATUS'] != 'DRAFT') { - throw (new Exception(\G::LoadTranslation("ID_DELETE_CASE_NO_STATUS"))); + throw (new Exception(G::LoadTranslation("ID_DELETE_CASE_NO_STATUS"))); } if ($aRow['APP_INIT_USER'] != $usr_uid) { - throw (new Exception(\G::LoadTranslation("ID_DELETE_CASE_NO_OWNER"))); + throw (new Exception(G::LoadTranslation("ID_DELETE_CASE_NO_OWNER"))); } - $case = new \Cases(); - $case->removeCase( $app_uid ); + $case = new ClassesCases(); + $case->removeCase($app_uid); } /** @@ -1068,15 +1116,16 @@ class Cases if (!$delIndex) { $delIndex = AppDelegation::getCurrentIndex($applicationUid); //Check if the next task is a subprocess SYNCHRONOUS with a thread Open - $subAppData = new \SubApplication(); + $subAppData = new SubApplication(); $caseSubprocessPending = $subAppData->isSubProcessWithCasePending($applicationUid, $delIndex); if ($caseSubprocessPending) { - throw (new Exception(\G::LoadTranslation("ID_CASE_ALREADY_DERIVATED"))); + throw (new Exception(G::LoadTranslation("ID_CASE_ALREADY_DERIVATED"))); } } $ws = new WsBase(); - $fields = $ws->derivateCase($userUid, $applicationUid, $delIndex, $bExecuteTriggersBeforeAssignment = false); + $fields = $ws->derivateCase($userUid, $applicationUid, $delIndex, + $bExecuteTriggersBeforeAssignment = false); $array = json_decode(json_encode($fields), true); if ($array ["status_code"] != 0) { throw (new Exception($array ["message"])); @@ -1102,10 +1151,10 @@ class Cases public function getAllUploadedDocumentsCriteria($sProcessUID, $sApplicationUID, $sTasKUID, $sUserUID) { - $conf = new \Configurations(); + $conf = new Configurations(); $confEnvSetting = $conf->getFormats(); - $cases = new \cases(); + $cases = new ClassesCases(); $listing = false; $oPluginRegistry = PluginRegistry::loadSingleton(); @@ -1145,43 +1194,44 @@ class Cases } } $aDelete = $cases->getAllObjectsFrom($sProcessUID, $sApplicationUID, $sTasKUID, $sUserUID, 'DELETE'); - $oAppDocument = new \AppDocument(); - $oCriteria = new \Criteria('workflow'); - $oCriteria->add(\AppDocumentPeer::APP_UID, $sApplicationUID); - $oCriteria->add(\AppDocumentPeer::APP_DOC_TYPE, array('INPUT'), \Criteria::IN); - $oCriteria->add(\AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), \Criteria::IN); + $oAppDocument = new AppDocument(); + $oCriteria = new Criteria('workflow'); + $oCriteria->add(AppDocumentPeer::APP_UID, $sApplicationUID); + $oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, array('INPUT'), Criteria::IN); + $oCriteria->add(AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), Criteria::IN); //$oCriteria->add(AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['INPUT_DOCUMENTS'], Criteria::IN); $oCriteria->add( $oCriteria->getNewCriterion( - \AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['INPUT_DOCUMENTS'], \Criteria::IN)-> - addOr($oCriteria->getNewCriterion(\AppDocumentPeer::USR_UID, array($sUserUID, '-1'), \Criteria::IN)) + AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['INPUT_DOCUMENTS'], Criteria::IN)-> + addOr($oCriteria->getNewCriterion(AppDocumentPeer::USR_UID, array($sUserUID, '-1'), Criteria::IN)) ); $aConditions = array(); - $aConditions[] = array(\AppDocumentPeer::APP_UID, \AppDelegationPeer::APP_UID); - $aConditions[] = array(\AppDocumentPeer::DEL_INDEX, \AppDelegationPeer::DEL_INDEX); - $oCriteria->addJoinMC($aConditions, \Criteria::LEFT_JOIN); - $oCriteria->add(\AppDelegationPeer::PRO_UID, $sProcessUID); - $oCriteria->addAscendingOrderByColumn(\AppDocumentPeer::APP_DOC_INDEX); - $oDataset = \AppDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $aConditions[] = array(AppDocumentPeer::APP_UID, AppDelegationPeer::APP_UID); + $aConditions[] = array(AppDocumentPeer::DEL_INDEX, AppDelegationPeer::DEL_INDEX); + $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); + $oCriteria->add(AppDelegationPeer::PRO_UID, $sProcessUID); + $oCriteria->addAscendingOrderByColumn(AppDocumentPeer::APP_DOC_INDEX); + $oDataset = AppDocumentPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $aInputDocuments = array(); $aInputDocuments[] = array( 'APP_DOC_UID' => 'char', 'DOC_UID' => 'char', 'APP_DOC_COMMENT' => 'char', - 'APP_DOC_FILENAME' => 'char', 'APP_DOC_INDEX' => 'integer' + 'APP_DOC_FILENAME' => 'char', + 'APP_DOC_INDEX' => 'integer' ); - $oUser = new \Users(); + $oUser = new ModelUsers(); while ($aRow = $oDataset->getRow()) { - $oCriteria2 = new \Criteria('workflow'); - $oCriteria2->add(\AppDelegationPeer::APP_UID, $sApplicationUID); - $oCriteria2->add(\AppDelegationPeer::DEL_INDEX, $aRow['DEL_INDEX']); - $oDataset2 = \AppDelegationPeer::doSelectRS($oCriteria2); - $oDataset2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $oCriteria2 = new Criteria('workflow'); + $oCriteria2->add(AppDelegationPeer::APP_UID, $sApplicationUID); + $oCriteria2->add(AppDelegationPeer::DEL_INDEX, $aRow['DEL_INDEX']); + $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria2); + $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset2->next(); $aRow2 = $oDataset2->getRow(); - $oTask = new \Task(); + $oTask = new ModelTask(); if ($oTask->taskExists($aRow2['TAS_UID'])) { $aTask = $oTask->load($aRow2['TAS_UID']); } else { @@ -1194,7 +1244,8 @@ class Cases try { $aAux1 = $oUser->load($aAux['USR_UID']); - $sUser = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $aAux1["USR_USERNAME"], $aAux1["USR_FIRSTNAME"], $aAux1["USR_LASTNAME"]); + $sUser = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $aAux1["USR_USERNAME"], + $aAux1["USR_FIRSTNAME"], $aAux1["USR_LASTNAME"]); } catch (Exception $oException) { $sUser = '***'; } @@ -1218,17 +1269,17 @@ class Cases $aFields['TITLE'] = $aFields['APP_DOC_COMMENT']; } //$aFields['POSITION'] = $_SESSION['STEP_POSITION']; - $aFields['CONFIRM'] = \G::LoadTranslation('ID_CONFIRM_DELETE_ELEMENT'); + $aFields['CONFIRM'] = G::LoadTranslation('ID_CONFIRM_DELETE_ELEMENT'); if (in_array($aRow['APP_DOC_UID'], $aDelete['INPUT_DOCUMENTS'])) { - $aFields['ID_DELETE'] = \G::LoadTranslation('ID_DELETE'); + $aFields['ID_DELETE'] = G::LoadTranslation('ID_DELETE'); } - $aFields['DOWNLOAD_LABEL'] = \G::LoadTranslation('ID_DOWNLOAD'); + $aFields['DOWNLOAD_LABEL'] = G::LoadTranslation('ID_DOWNLOAD'); $aFields['DOWNLOAD_LINK'] = "cases/cases_ShowDocument?a=" . $aRow['APP_DOC_UID'] . "&v=" . $aRow['DOC_VERSION']; $aFields['DOC_VERSION'] = $aRow['DOC_VERSION']; if (is_array($listing)) { foreach ($listing as $folderitem) { if ($folderitem->filename == $aRow['APP_DOC_UID']) { - $aFields['DOWNLOAD_LABEL'] = \G::LoadTranslation('ID_GET_EXTERNAL_FILE'); + $aFields['DOWNLOAD_LABEL'] = G::LoadTranslation('ID_GET_EXTERNAL_FILE'); $aFields['DOWNLOAD_LINK'] = $folderitem->downloadScript; continue; } @@ -1240,34 +1291,34 @@ class Cases } $oDataset->next(); } - $oAppDocument = new \AppDocument(); - $oCriteria = new \Criteria('workflow'); - $oCriteria->add(\AppDocumentPeer::APP_UID, $sApplicationUID); - $oCriteria->add(\AppDocumentPeer::APP_DOC_TYPE, array('ATTACHED'), \Criteria::IN); - $oCriteria->add(\AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), \Criteria::IN); + $oAppDocument = new AppDocument(); + $oCriteria = new Criteria('workflow'); + $oCriteria->add(AppDocumentPeer::APP_UID, $sApplicationUID); + $oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, array('ATTACHED'), Criteria::IN); + $oCriteria->add(AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), Criteria::IN); $oCriteria->add( $oCriteria->getNewCriterion( - \AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['INPUT_DOCUMENTS'], \Criteria::IN + AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['INPUT_DOCUMENTS'], Criteria::IN )-> - addOr($oCriteria->getNewCriterion(\AppDocumentPeer::USR_UID, array($sUserUID, '-1'), \Criteria::IN))); + addOr($oCriteria->getNewCriterion(AppDocumentPeer::USR_UID, array($sUserUID, '-1'), Criteria::IN))); $aConditions = array(); - $aConditions[] = array(\AppDocumentPeer::APP_UID, \AppDelegationPeer::APP_UID); - $aConditions[] = array(\AppDocumentPeer::DEL_INDEX, \AppDelegationPeer::DEL_INDEX); - $oCriteria->addJoinMC($aConditions, \Criteria::LEFT_JOIN); - $oCriteria->add(\AppDelegationPeer::PRO_UID, $sProcessUID); - $oCriteria->addAscendingOrderByColumn(\AppDocumentPeer::APP_DOC_INDEX); - $oDataset = \AppDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $aConditions[] = array(AppDocumentPeer::APP_UID, AppDelegationPeer::APP_UID); + $aConditions[] = array(AppDocumentPeer::DEL_INDEX, AppDelegationPeer::DEL_INDEX); + $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); + $oCriteria->add(AppDelegationPeer::PRO_UID, $sProcessUID); + $oCriteria->addAscendingOrderByColumn(AppDocumentPeer::APP_DOC_INDEX); + $oDataset = AppDocumentPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); while ($aRow = $oDataset->getRow()) { - $oCriteria2 = new \Criteria('workflow'); - $oCriteria2->add(\AppDelegationPeer::APP_UID, $sApplicationUID); - $oCriteria2->add(\AppDelegationPeer::DEL_INDEX, $aRow['DEL_INDEX']); - $oDataset2 = \AppDelegationPeer::doSelectRS($oCriteria2); - $oDataset2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $oCriteria2 = new Criteria('workflow'); + $oCriteria2->add(AppDelegationPeer::APP_UID, $sApplicationUID); + $oCriteria2->add(AppDelegationPeer::DEL_INDEX, $aRow['DEL_INDEX']); + $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria2); + $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset2->next(); $aRow2 = $oDataset2->getRow(); - $oTask = new \Task(); + $oTask = new ModelTask(); if ($oTask->taskExists($aRow2['TAS_UID'])) { $aTask = $oTask->load($aRow2['TAS_UID']); } else { @@ -1278,7 +1329,8 @@ class Cases try { $aAux1 = $oUser->load($aAux['USR_UID']); - $sUser = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $aAux1["USR_USERNAME"], $aAux1["USR_FIRSTNAME"], $aAux1["USR_LASTNAME"]); + $sUser = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $aAux1["USR_USERNAME"], + $aAux1["USR_FIRSTNAME"], $aAux1["USR_LASTNAME"]); } catch (Exception $oException) { $sUser = '***'; } @@ -1313,26 +1365,27 @@ class Cases $oDataset->next(); } // Get input documents added/modified by a supervisor - Begin - $oAppDocument = new \AppDocument(); - $oCriteria = new \Criteria('workflow'); - $oCriteria->add(\AppDocumentPeer::APP_UID, $sApplicationUID); - $oCriteria->add(\AppDocumentPeer::APP_DOC_TYPE, array('INPUT'), \Criteria::IN); - $oCriteria->add(\AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), \Criteria::IN); - $oCriteria->add(\AppDocumentPeer::DEL_INDEX, 100000); - $oCriteria->addJoin(\AppDocumentPeer::APP_UID, \ApplicationPeer::APP_UID, \Criteria::LEFT_JOIN); - $oCriteria->add(\ApplicationPeer::PRO_UID, $sProcessUID); - $oCriteria->addAscendingOrderByColumn(\AppDocumentPeer::APP_DOC_INDEX); - $oDataset = \AppDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $oAppDocument = new AppDocument(); + $oCriteria = new Criteria('workflow'); + $oCriteria->add(AppDocumentPeer::APP_UID, $sApplicationUID); + $oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, array('INPUT'), Criteria::IN); + $oCriteria->add(AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), Criteria::IN); + $oCriteria->add(AppDocumentPeer::DEL_INDEX, 100000); + $oCriteria->addJoin(AppDocumentPeer::APP_UID, ApplicationPeer::APP_UID, Criteria::LEFT_JOIN); + $oCriteria->add(ApplicationPeer::PRO_UID, $sProcessUID); + $oCriteria->addAscendingOrderByColumn(AppDocumentPeer::APP_DOC_INDEX); + $oDataset = AppDocumentPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); - $oUser = new \Users(); + $oUser = new ModelUsers(); while ($aRow = $oDataset->getRow()) { $aTask = array('TAS_TITLE' => '[ ' . G::LoadTranslation('ID_SUPERVISOR') . ' ]'); $aAux = $oAppDocument->load($aRow['APP_DOC_UID'], $aRow['DOC_VERSION']); $lastVersion = $oAppDocument->getLastAppDocVersion($aRow['APP_DOC_UID'], $sApplicationUID); try { $aAux1 = $oUser->load($aAux['USR_UID']); - $sUser = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $aAux1["USR_USERNAME"], $aAux1["USR_FIRSTNAME"], $aAux1["USR_LASTNAME"]); + $sUser = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $aAux1["USR_USERNAME"], + $aAux1["USR_FIRSTNAME"], $aAux1["USR_LASTNAME"]); } catch (Exception $oException) { $sUser = '***'; } @@ -1353,17 +1406,17 @@ class Cases $aFields['TITLE'] = $aFields['APP_DOC_COMMENT']; } //$aFields['POSITION'] = $_SESSION['STEP_POSITION']; - $aFields['CONFIRM'] = \G::LoadTranslation('ID_CONFIRM_DELETE_ELEMENT'); + $aFields['CONFIRM'] = G::LoadTranslation('ID_CONFIRM_DELETE_ELEMENT'); if (in_array($aRow['APP_DOC_UID'], $aDelete['INPUT_DOCUMENTS'])) { - $aFields['ID_DELETE'] = \G::LoadTranslation('ID_DELETE'); + $aFields['ID_DELETE'] = G::LoadTranslation('ID_DELETE'); } - $aFields['DOWNLOAD_LABEL'] = \G::LoadTranslation('ID_DOWNLOAD'); + $aFields['DOWNLOAD_LABEL'] = G::LoadTranslation('ID_DOWNLOAD'); $aFields['DOWNLOAD_LINK'] = "cases_ShowDocument?a=" . $aRow['APP_DOC_UID'] . "&v=" . $aRow['DOC_VERSION']; $aFields['DOC_VERSION'] = $aRow['DOC_VERSION']; if (is_array($listing)) { foreach ($listing as $folderitem) { if ($folderitem->filename == $aRow['APP_DOC_UID']) { - $aFields['DOWNLOAD_LABEL'] = \G::LoadTranslation('ID_GET_EXTERNAL_FILE'); + $aFields['DOWNLOAD_LABEL'] = G::LoadTranslation('ID_GET_EXTERNAL_FILE'); $aFields['DOWNLOAD_LINK'] = $folderitem->downloadScript; continue; } @@ -1380,9 +1433,10 @@ class Cases global $_DBArray; $_DBArray['inputDocuments'] = $aInputDocuments; - $oCriteria = new \Criteria('dbarray'); + $oCriteria = new Criteria('dbarray'); $oCriteria->setDBArrayTable('inputDocuments'); $oCriteria->addDescendingOrderByColumn('CREATE_DATE'); + return $oCriteria; } @@ -1399,10 +1453,10 @@ class Cases public function getAllGeneratedDocumentsCriteria($sProcessUID, $sApplicationUID, $sTasKUID, $sUserUID) { - $conf = new \Configurations(); + $conf = new Configurations(); $confEnvSetting = $conf->getFormats(); - $cases = new \cases(); + $cases = new ClassesCases(); $listing = false; $oPluginRegistry = PluginRegistry::loadSingleton(); @@ -1414,7 +1468,11 @@ class Cases } $aObjectPermissions = $cases->getAllObjects($sProcessUID, $sApplicationUID, $sTasKUID, $sUserUID); if (!is_array($aObjectPermissions)) { - $aObjectPermissions = array('DYNAFORMS' => array(-1),'INPUT_DOCUMENTS' => array(-1),'OUTPUT_DOCUMENTS' => array(-1)); + $aObjectPermissions = array( + 'DYNAFORMS' => array(-1), + 'INPUT_DOCUMENTS' => array(-1), + 'OUTPUT_DOCUMENTS' => array(-1) + ); } if (!isset($aObjectPermissions['DYNAFORMS'])) { $aObjectPermissions['DYNAFORMS'] = array(-1); @@ -1438,24 +1496,25 @@ class Cases } } $aDelete = $cases->getAllObjectsFrom($sProcessUID, $sApplicationUID, $sTasKUID, $sUserUID, 'DELETE'); - $oAppDocument = new \AppDocument(); - $oCriteria = new \Criteria('workflow'); - $oCriteria->add(\AppDocumentPeer::APP_UID, $sApplicationUID); - $oCriteria->add(\AppDocumentPeer::APP_DOC_TYPE, 'OUTPUT'); - $oCriteria->add(\AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), \Criteria::IN); + $oAppDocument = new AppDocument(); + $oCriteria = new Criteria('workflow'); + $oCriteria->add(AppDocumentPeer::APP_UID, $sApplicationUID); + $oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, 'OUTPUT'); + $oCriteria->add(AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), Criteria::IN); //$oCriteria->add(AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['OUTPUT_DOCUMENTS'], Criteria::IN); $oCriteria->add( $oCriteria->getNewCriterion( - \AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['OUTPUT_DOCUMENTS'], \Criteria::IN)->addOr($oCriteria->getNewCriterion(\AppDocumentPeer::USR_UID, $sUserUID, \Criteria::EQUAL)) + AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['OUTPUT_DOCUMENTS'], + Criteria::IN)->addOr($oCriteria->getNewCriterion(AppDocumentPeer::USR_UID, $sUserUID, Criteria::EQUAL)) ); $aConditions = array(); - $aConditions[] = array(\AppDocumentPeer::APP_UID, \AppDelegationPeer::APP_UID); - $aConditions[] = array(\AppDocumentPeer::DEL_INDEX, \AppDelegationPeer::DEL_INDEX); - $oCriteria->addJoinMC($aConditions, \Criteria::LEFT_JOIN); - $oCriteria->add(\AppDelegationPeer::PRO_UID, $sProcessUID); - $oCriteria->addAscendingOrderByColumn(\AppDocumentPeer::APP_DOC_INDEX); - $oDataset = \AppDocumentPeer::doSelectRS($oCriteria); - $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $aConditions[] = array(AppDocumentPeer::APP_UID, AppDelegationPeer::APP_UID); + $aConditions[] = array(AppDocumentPeer::DEL_INDEX, AppDelegationPeer::DEL_INDEX); + $oCriteria->addJoinMC($aConditions, Criteria::LEFT_JOIN); + $oCriteria->add(AppDelegationPeer::PRO_UID, $sProcessUID); + $oCriteria->addAscendingOrderByColumn(AppDocumentPeer::APP_DOC_INDEX); + $oDataset = AppDocumentPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $aOutputDocuments = array(); $aOutputDocuments[] = array( @@ -1465,16 +1524,16 @@ class Cases 'APP_DOC_FILENAME' => 'char', 'APP_DOC_INDEX' => 'integer' ); - $oUser = new \Users(); + $oUser = new ModelUsers(); while ($aRow = $oDataset->getRow()) { - $oCriteria2 = new \Criteria('workflow'); - $oCriteria2->add(\AppDelegationPeer::APP_UID, $sApplicationUID); - $oCriteria2->add(\AppDelegationPeer::DEL_INDEX, $aRow['DEL_INDEX']); - $oDataset2 = \AppDelegationPeer::doSelectRS($oCriteria2); - $oDataset2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $oCriteria2 = new Criteria('workflow'); + $oCriteria2->add(AppDelegationPeer::APP_UID, $sApplicationUID); + $oCriteria2->add(AppDelegationPeer::DEL_INDEX, $aRow['DEL_INDEX']); + $oDataset2 = AppDelegationPeer::doSelectRS($oCriteria2); + $oDataset2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset2->next(); $aRow2 = $oDataset2->getRow(); - $oTask = new \Task(); + $oTask = new ModelTask(); if ($oTask->taskExists($aRow2['TAS_UID'])) { $aTask = $oTask->load($aRow2['TAS_UID']); } else { @@ -1500,7 +1559,7 @@ class Cases if (is_array($listing)) { foreach ($listing as $folderitem) { if (($folderitem->filename == $aRow['APP_DOC_UID']) && ($folderitem->type == "PDF")) { - $filePdfLabel = \G::LoadTranslation('ID_GET_EXTERNAL_FILE') . " .pdf"; + $filePdfLabel = G::LoadTranslation('ID_GET_EXTERNAL_FILE') . " .pdf"; $filePdf = $folderitem->downloadScript; continue; } @@ -1516,7 +1575,7 @@ class Cases if (is_array($listing)) { foreach ($listing as $folderitem) { if (($folderitem->filename == $aRow['APP_DOC_UID']) && ($folderitem->type == "DOC")) { - $fileDocLabel = \G::LoadTranslation('ID_GET_EXTERNAL_FILE') . " .doc"; + $fileDocLabel = G::LoadTranslation('ID_GET_EXTERNAL_FILE') . " .doc"; $fileDoc = $folderitem->downloadScript; continue; } @@ -1543,7 +1602,7 @@ class Cases if (is_array($listing)) { foreach ($listing as $folderitem) { if (($folderitem->filename == $aRow['APP_DOC_UID']) && ($folderitem->type == "PDF")) { - $filePdfLabel = \G::LoadTranslation('ID_GET_EXTERNAL_FILE') . " .pdf"; + $filePdfLabel = G::LoadTranslation('ID_GET_EXTERNAL_FILE') . " .pdf"; $filePdf = $folderitem->downloadScript; continue; } @@ -1553,7 +1612,8 @@ class Cases } try { $aAux1 = $oUser->load($aAux['USR_UID']); - $sUser = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $aAux1["USR_USERNAME"], $aAux1["USR_FIRSTNAME"], $aAux1["USR_LASTNAME"]); + $sUser = $conf->usersNameFormatBySetParameters($confEnvSetting["format"], $aAux1["USR_USERNAME"], + $aAux1["USR_FIRSTNAME"], $aAux1["USR_LASTNAME"]); } catch (Exception $oException) { $sUser = '(USER DELETED)'; } @@ -1594,10 +1654,10 @@ class Cases $aFields['TITLE'] = $aFields['APP_DOC_COMMENT']; } //$aFields['POSITION'] = $_SESSION['STEP_POSITION']; - $aFields['CONFIRM'] = \G::LoadTranslation('ID_CONFIRM_DELETE_ELEMENT'); + $aFields['CONFIRM'] = G::LoadTranslation('ID_CONFIRM_DELETE_ELEMENT'); if (in_array($aRow['APP_DOC_UID'], $aObjectPermissions['OUTPUT_DOCUMENTS'])) { if (in_array($aRow['APP_DOC_UID'], $aDelete['OUTPUT_DOCUMENTS'])) { - $aFields['ID_DELETE'] = \G::LoadTranslation('ID_DELETE'); + $aFields['ID_DELETE'] = G::LoadTranslation('ID_DELETE'); } } $aOutputDocuments[] = $aFields; @@ -1607,9 +1667,10 @@ class Cases global $_DBArray; $_DBArray['outputDocuments'] = $aOutputDocuments; - $oCriteria = new \Criteria('dbarray'); + $oCriteria = new Criteria('dbarray'); $oCriteria->setDBArrayTable('outputDocuments'); $oCriteria->addDescendingOrderByColumn('CREATE_DATE'); + return $oCriteria; } @@ -1635,63 +1696,89 @@ class Cases } foreach ($appData as $key => $val) { if (in_array($key, $field, true) != false) { - $caseVariable[$key] = $appData[$key]; + $caseVariable[$key] = $this->getFieldValue($field, $appData[$key]); if (isset($appData[$key . '_label'])) { $caseVariable[$key . '_label'] = $appData[$key . '_label']; } } } } else { - $caseVariableAux = $this->__getFieldsAndValuesByDynaFormAndAppData($field, $appData, $caseVariable); + $caseVariableAux = $this->__getFieldsAndValuesByDynaFormAndAppData($field, $appData, + $caseVariable); $caseVariable = array_merge($caseVariable, $caseVariableAux); } } } } + return $caseVariable; } catch (Exception $e) { throw $e; } } + /** + * Return the field value to be used in the front-end client. + * + * @param type $field + * @param type $value + * @return type + */ + private function getFieldValue($field, $value) + { + switch ($field['type']) { + case 'file': + return $field['data']['app_doc_uid']; + default: + return $value; + } + } + /** * Get Case Variables * * @access public - * @param string $app_uid, Uid for case - * @param string $usr_uid, Uid for user - * @param string $dynaFormUid, Uid for dynaform + * @param string $app_uid , Uid for case + * @param string $usr_uid , Uid for user + * @param string $dynaFormUid , Uid for dynaform * @return array * * @author Brayan Pereyra (Cochalo) * @copyright Colosa - Bolivia */ - public function getCaseVariables($app_uid, $usr_uid, $dynaFormUid = null, $pro_uid = null, $act_uid = null, $app_index = null) - { + public function getCaseVariables( + $app_uid, + $usr_uid, + $dynaFormUid = null, + $pro_uid = null, + $act_uid = null, + $app_index = null + ) { Validator::isString($app_uid, '$app_uid'); Validator::appUid($app_uid, '$app_uid'); Validator::isString($usr_uid, '$usr_uid'); Validator::usrUid($usr_uid, '$usr_uid'); - $case = new \Cases(); + $case = new ClassesCases(); $fields = $case->loadCase($app_uid); $arrayCaseVariable = []; if (!is_null($dynaFormUid)) { - + $data = []; + $data["APP_DATA"] = $fields['APP_DATA']; $data["CURRENT_DYNAFORM"] = $dynaFormUid; $pmDynaForm = new PmDynaform($data); $arrayDynaFormData = $pmDynaForm->getDynaform(); - $arrayDynContent = \G::json_decode($arrayDynaFormData['DYN_CONTENT']); + $arrayDynContent = G::json_decode($arrayDynaFormData['DYN_CONTENT']); $pmDynaForm->jsonr($arrayDynContent); - $arrayDynContent = \G::json_decode(\G::json_encode($arrayDynContent), true); + $arrayDynContent = G::json_decode(G::json_encode($arrayDynContent), true); $arrayAppData = $fields['APP_DATA']; $arrayCaseVariable = $this->__getFieldsAndValuesByDynaFormAndAppData( - $arrayDynContent['items'][0], $arrayAppData, $arrayCaseVariable + $arrayDynContent['items'][0], $arrayAppData, $arrayCaseVariable ); } else { $arrayCaseVariable = $fields['APP_DATA']; @@ -1699,20 +1786,20 @@ class Cases //Get historyDate for Dynaform if (!is_null($pro_uid) && !is_null($act_uid) && !is_null($app_index)) { - $oCriteriaAppHistory = new \Criteria("workflow"); - $oCriteriaAppHistory->addSelectColumn(\AppHistoryPeer::HISTORY_DATE); - $oCriteriaAppHistory->add(\AppHistoryPeer::APP_UID, $app_uid, \Criteria::EQUAL); - $oCriteriaAppHistory->add(\AppHistoryPeer::DEL_INDEX, $app_index, \Criteria::EQUAL); - $oCriteriaAppHistory->add(\AppHistoryPeer::PRO_UID, $pro_uid, \Criteria::EQUAL); - $oCriteriaAppHistory->add(\AppHistoryPeer::TAS_UID, $act_uid, \Criteria::EQUAL); - $oCriteriaAppHistory->add(\AppHistoryPeer::USR_UID, $usr_uid, \Criteria::EQUAL); + $oCriteriaAppHistory = new Criteria("workflow"); + $oCriteriaAppHistory->addSelectColumn(AppHistoryPeer::HISTORY_DATE); + $oCriteriaAppHistory->add(AppHistoryPeer::APP_UID, $app_uid, Criteria::EQUAL); + $oCriteriaAppHistory->add(AppHistoryPeer::DEL_INDEX, $app_index, Criteria::EQUAL); + $oCriteriaAppHistory->add(AppHistoryPeer::PRO_UID, $pro_uid, Criteria::EQUAL); + $oCriteriaAppHistory->add(AppHistoryPeer::TAS_UID, $act_uid, Criteria::EQUAL); + $oCriteriaAppHistory->add(AppHistoryPeer::USR_UID, $usr_uid, Criteria::EQUAL); if (!is_null($dynaFormUid)) { - $oCriteriaAppHistory->add(\AppHistoryPeer::DYN_UID, $dynaFormUid, \Criteria::EQUAL); + $oCriteriaAppHistory->add(AppHistoryPeer::DYN_UID, $dynaFormUid, Criteria::EQUAL); } $oCriteriaAppHistory->addDescendingOrderByColumn('HISTORY_DATE'); $oCriteriaAppHistory->setLimit(1); - $oDataset = \AppDocumentPeer::doSelectRS($oCriteriaAppHistory); - $oDataset->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $oDataset = AppDocumentPeer::doSelectRS($oCriteriaAppHistory); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); if ($aRow = $oDataset->getRow()) { $dateHistory['SYS_VAR_UPDATE_DATE'] = $aRow['HISTORY_DATE']; @@ -1721,6 +1808,7 @@ class Cases } $arrayCaseVariable = array_merge($arrayCaseVariable, $dateHistory); } + return $arrayCaseVariable; } @@ -1728,16 +1816,16 @@ class Cases * Put Set Case Variables * * @access public - * @param string $app_uid, Uid for case - * @param array $app_data, Data for case variables - * @param string $dyn_uid, Uid for dynaform - * @param string $del_index, Index for case - * @param string $usr_uid, Uid for user + * @param string $app_uid , Uid for case + * @param array $app_data , Data for case variables + * @param string $dyn_uid , Uid for dynaform + * @param string $del_index , Index for case + * @param string $usr_uid , Uid for user * * @author Brayan Pereyra (Cochalo) * @copyright Colosa - Bolivia */ - public function setCaseVariables($app_uid, $app_data, $dyn_uid = null, $usr_uid ,$del_index = 0) + public function setCaseVariables($app_uid, $app_data, $dyn_uid = null, $usr_uid, $del_index = 0) { Validator::isString($app_uid, '$app_uid'); Validator::appUid($app_uid, '$app_uid'); @@ -1748,27 +1836,27 @@ class Cases $arrayResult = $this->getStatusInfo($app_uid); if ($arrayResult["APP_STATUS"] == "CANCELLED") { - throw new Exception(\G::LoadTranslation("ID_CASE_CANCELLED", array($app_uid))); + throw new Exception(G::LoadTranslation("ID_CASE_CANCELLED", array($app_uid))); } if ($arrayResult["APP_STATUS"] == "COMPLETED") { - throw new Exception(\G::LoadTranslation("ID_CASE_IS_COMPLETED", array($app_uid))); + throw new Exception(G::LoadTranslation("ID_CASE_IS_COMPLETED", array($app_uid))); } - $appCacheView = new \AppCacheView(); - $isProcessSupervisor = $appCacheView->getProUidSupervisor($usr_uid); - $criteria = new \Criteria("workflow"); - $criteria->addSelectColumn(\AppDelegationPeer::APP_UID); - $criteria->add(\AppDelegationPeer::APP_UID, $app_uid, \Criteria::EQUAL); - $criteria->add(\AppDelegationPeer::USR_UID, $usr_uid, \Criteria::EQUAL); + $processUser = new ProcessUser(); + $listProcess = $processUser->getProUidSupervisor($usr_uid); + $criteria = new Criteria("workflow"); + $criteria->addSelectColumn(AppDelegationPeer::APP_UID); + $criteria->add(AppDelegationPeer::APP_UID, $app_uid, Criteria::EQUAL); + $criteria->add(AppDelegationPeer::USR_UID, $usr_uid, Criteria::EQUAL); $criteria->add( - $criteria->getNewCriterion(\AppDelegationPeer::USR_UID, $usr_uid, \Criteria::EQUAL)->addOr( - $criteria->getNewCriterion(\AppDelegationPeer::PRO_UID, $isProcessSupervisor, \Criteria::IN)) + $criteria->getNewCriterion(AppDelegationPeer::USR_UID, $usr_uid, Criteria::EQUAL)->addOr( + $criteria->getNewCriterion(AppDelegationPeer::PRO_UID, $listProcess, Criteria::IN)) ); - $rsCriteria = \AppDelegationPeer::doSelectRS($criteria); + $rsCriteria = AppDelegationPeer::doSelectRS($criteria); if (!$rsCriteria->next()) { - throw (new Exception(\G::LoadTranslation("ID_NO_PERMISSION_NO_PARTICIPATED", array($usr_uid)))); + throw (new Exception(G::LoadTranslation("ID_NO_PERMISSION_NO_PARTICIPATED", array($usr_uid)))); } $_SESSION['APPLICATION'] = $app_uid; @@ -1784,7 +1872,7 @@ class Cases unset($app_data['__VARIABLE_DOCUMENT_DELETE__']); } - $case = new \Cases(); + $case = new ClassesCases(); $fields = $case->loadCase($app_uid, $del_index); $_POST['form'] = $app_data; @@ -1792,7 +1880,7 @@ class Cases $oDynaform = \DynaformPeer::retrieveByPK($dyn_uid); if ($oDynaform->getDynVersion() < 2) { - $oForm = new \Form ( $fields['PRO_UID'] . "/" . $dyn_uid, PATH_DYNAFORM ); + $oForm = new \Form ($fields['PRO_UID'] . "/" . $dyn_uid, PATH_DYNAFORM); $oForm->validatePost(); } } @@ -1821,7 +1909,7 @@ class Cases * Get Case Notes * * @access public - * @param string $app_uid, Uid for case + * @param string $app_uid , Uid for case * @return array * * @author Brayan Pereyra (Cochalo) @@ -1836,33 +1924,33 @@ class Cases Validator::isArray($data_get, '$data_get'); Validator::isArray($data_get, '$data_get'); - $start = isset( $data_get["start"] ) ? $data_get["start"] : "0"; - $limit = isset( $data_get["limit"] ) ? $data_get["limit"] : ""; - $sort = isset( $data_get["sort"] ) ? $data_get["sort"] : "APP_NOTES.NOTE_DATE"; - $dir = isset( $data_get["dir"] ) ? $data_get["dir"] : "DESC"; - $user = isset( $data_get["user"] ) ? $data_get["user"] : ""; - $dateFrom = (!empty( $data_get["dateFrom"] )) ? substr( $data_get["dateFrom"], 0, 10 ) : ""; - $dateTo = (!empty( $data_get["dateTo"] )) ? substr( $data_get["dateTo"], 0, 10 ) : ""; - $search = isset( $data_get["search"] ) ? $data_get["search"] : ""; - $paged = isset( $data_get["paged"] ) ? $data_get["paged"] : true; + $start = isset($data_get["start"]) ? $data_get["start"] : "0"; + $limit = isset($data_get["limit"]) ? $data_get["limit"] : ""; + $sort = isset($data_get["sort"]) ? $data_get["sort"] : "APP_NOTES.NOTE_DATE"; + $dir = isset($data_get["dir"]) ? $data_get["dir"] : "DESC"; + $user = isset($data_get["user"]) ? $data_get["user"] : ""; + $dateFrom = (!empty($data_get["dateFrom"])) ? substr($data_get["dateFrom"], 0, 10) : ""; + $dateTo = (!empty($data_get["dateTo"])) ? substr($data_get["dateTo"], 0, 10) : ""; + $search = isset($data_get["search"]) ? $data_get["search"] : ""; + $paged = isset($data_get["paged"]) ? $data_get["paged"] : true; - $case = new \Cases(); + $case = new ClassesCases(); $caseLoad = $case->loadCase($app_uid); - $pro_uid = $caseLoad['PRO_UID']; - $tas_uid = AppDelegation::getCurrentTask($app_uid); - $respView = $case->getAllObjectsFrom( $pro_uid, $app_uid, $tas_uid, $usr_uid, 'VIEW' ); - $respBlock = $case->getAllObjectsFrom( $pro_uid, $app_uid, $tas_uid, $usr_uid, 'BLOCK' ); + $pro_uid = $caseLoad['PRO_UID']; + $tas_uid = AppDelegation::getCurrentTask($app_uid); + $respView = $case->getAllObjectsFrom($pro_uid, $app_uid, $tas_uid, $usr_uid, 'VIEW'); + $respBlock = $case->getAllObjectsFrom($pro_uid, $app_uid, $tas_uid, $usr_uid, 'BLOCK'); if ($respView['CASES_NOTES'] == 0 && $respBlock['CASES_NOTES'] == 0) { - throw (new Exception(\G::LoadTranslation("ID_CASES_NOTES_NO_PERMISSIONS"))); + throw (new Exception(G::LoadTranslation("ID_CASES_NOTES_NO_PERMISSIONS"))); } if ($sort != 'APP_NOTE.NOTE_DATE') { $sort = G::toUpper($sort); - $columnsAppCacheView = \AppNotesPeer::getFieldNames(\BasePeer::TYPE_FIELDNAME); + $columnsAppCacheView = AppNotesPeer::getFieldNames(BasePeer::TYPE_FIELDNAME); if (!(in_array($sort, $columnsAppCacheView))) { $sort = 'APP_NOTES.NOTE_DATE'; } else { - $sort = 'APP_NOTES.'.$sort; + $sort = 'APP_NOTES.' . $sort; } } if ((int)$start == 1 || (int)$start == 0) { @@ -1914,6 +2002,7 @@ class Cases $con++; } } + return $response; } @@ -1921,8 +2010,8 @@ class Cases * Save new case note * * @access public - * @param string $app_uid, Uid for case - * @param array $app_data, Data for case variables + * @param string $app_uid , Uid for case + * @param array $app_data , Data for case variables * * @author Brayan Pereyra (Cochalo) * @copyright Colosa - Bolivia @@ -1937,19 +2026,19 @@ class Cases Validator::isString($note_content, '$note_content'); if (strlen($note_content) > 500) { - throw (new Exception(\G::LoadTranslation("ID_INVALID_MAX_PERMITTED", array($note_content,'500')))); + throw (new Exception(G::LoadTranslation("ID_INVALID_MAX_PERMITTED", array($note_content, '500')))); } Validator::isBoolean($send_mail, '$send_mail'); - $case = new \Cases(); + $case = new ClassesCases(); $caseLoad = $case->loadCase($app_uid); - $pro_uid = $caseLoad['PRO_UID']; - $tas_uid = AppDelegation::getCurrentTask($app_uid); - $respView = $case->getAllObjectsFrom( $pro_uid, $app_uid, $tas_uid, $usr_uid, 'VIEW' ); - $respBlock = $case->getAllObjectsFrom( $pro_uid, $app_uid, $tas_uid, $usr_uid, 'BLOCK' ); + $pro_uid = $caseLoad['PRO_UID']; + $tas_uid = AppDelegation::getCurrentTask($app_uid); + $respView = $case->getAllObjectsFrom($pro_uid, $app_uid, $tas_uid, $usr_uid, 'VIEW'); + $respBlock = $case->getAllObjectsFrom($pro_uid, $app_uid, $tas_uid, $usr_uid, 'BLOCK'); if ($respView['CASES_NOTES'] == 0 && $respBlock['CASES_NOTES'] == 0) { - throw (new Exception(\G::LoadTranslation("ID_CASES_NOTES_NO_PERMISSIONS"))); + throw (new Exception(G::LoadTranslation("ID_CASES_NOTES_NO_PERMISSIONS"))); } $note_content = addslashes($note_content); @@ -1968,17 +2057,17 @@ class Cases { try { return array( - $this->getFieldNameByFormatFieldName("TAS_UID") => $record["TAS_UID"], - $this->getFieldNameByFormatFieldName("TAS_TITLE") => $record["TAS_TITLE"] . "", + $this->getFieldNameByFormatFieldName("TAS_UID") => $record["TAS_UID"], + $this->getFieldNameByFormatFieldName("TAS_TITLE") => $record["TAS_TITLE"] . "", $this->getFieldNameByFormatFieldName("TAS_DESCRIPTION") => $record["TAS_DESCRIPTION"] . "", - $this->getFieldNameByFormatFieldName("TAS_START") => ($record["TAS_START"] == "TRUE")? 1 : 0, - $this->getFieldNameByFormatFieldName("TAS_TYPE") => $record["TAS_TYPE"], - $this->getFieldNameByFormatFieldName("TAS_DERIVATION") => $record["TAS_DERIVATION"], + $this->getFieldNameByFormatFieldName("TAS_START") => ($record["TAS_START"] == "TRUE") ? 1 : 0, + $this->getFieldNameByFormatFieldName("TAS_TYPE") => $record["TAS_TYPE"], + $this->getFieldNameByFormatFieldName("TAS_DERIVATION") => $record["TAS_DERIVATION"], $this->getFieldNameByFormatFieldName("TAS_ASSIGN_TYPE") => $record["TAS_ASSIGN_TYPE"], - $this->getFieldNameByFormatFieldName("USR_UID") => $record["USR_UID"] . "", - $this->getFieldNameByFormatFieldName("USR_USERNAME") => $record["USR_USERNAME"] . "", - $this->getFieldNameByFormatFieldName("USR_FIRSTNAME") => $record["USR_FIRSTNAME"] . "", - $this->getFieldNameByFormatFieldName("USR_LASTNAME") => $record["USR_LASTNAME"] . "" + $this->getFieldNameByFormatFieldName("USR_UID") => $record["USR_UID"] . "", + $this->getFieldNameByFormatFieldName("USR_USERNAME") => $record["USR_USERNAME"] . "", + $this->getFieldNameByFormatFieldName("USR_FIRSTNAME") => $record["USR_FIRSTNAME"] . "", + $this->getFieldNameByFormatFieldName("USR_LASTNAME") => $record["USR_LASTNAME"] . "" ); } catch (Exception $e) { throw $e; @@ -2005,7 +2094,7 @@ class Cases //Set variables $process = new \Process(); $application = new \Application(); - $conf = new \Configurations(); + $conf = new Configurations(); $arrayApplicationData = $application->Load($applicationUid); $processUid = $arrayApplicationData["PRO_UID"]; @@ -2016,28 +2105,28 @@ class Cases //Get data //SQL - $delimiter = \DBAdapter::getStringDelimiter(); + $delimiter = DBAdapter::getStringDelimiter(); - $criteria = new \Criteria("workflow"); + $criteria = new Criteria("workflow"); - $criteria->addSelectColumn(\TaskPeer::TAS_UID); - $criteria->addSelectColumn(\TaskPeer::TAS_TITLE); - $criteria->addSelectColumn(\TaskPeer::TAS_DESCRIPTION); - $criteria->addSelectColumn(\TaskPeer::TAS_START); - $criteria->addSelectColumn(\TaskPeer::TAS_TYPE); - $criteria->addSelectColumn(\TaskPeer::TAS_DERIVATION); - $criteria->addSelectColumn(\TaskPeer::TAS_ASSIGN_TYPE); - $criteria->addSelectColumn(\UsersPeer::USR_UID); - $criteria->addSelectColumn(\UsersPeer::USR_USERNAME); - $criteria->addSelectColumn(\UsersPeer::USR_FIRSTNAME); - $criteria->addSelectColumn(\UsersPeer::USR_LASTNAME); + $criteria->addSelectColumn(TaskPeer::TAS_UID); + $criteria->addSelectColumn(TaskPeer::TAS_TITLE); + $criteria->addSelectColumn(TaskPeer::TAS_DESCRIPTION); + $criteria->addSelectColumn(TaskPeer::TAS_START); + $criteria->addSelectColumn(TaskPeer::TAS_TYPE); + $criteria->addSelectColumn(TaskPeer::TAS_DERIVATION); + $criteria->addSelectColumn(TaskPeer::TAS_ASSIGN_TYPE); + $criteria->addSelectColumn(UsersPeer::USR_UID); + $criteria->addSelectColumn(UsersPeer::USR_USERNAME); + $criteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); + $criteria->addSelectColumn(UsersPeer::USR_LASTNAME); - $criteria->addJoin(\TaskPeer::TAS_LAST_ASSIGNED, \UsersPeer::USR_UID, \Criteria::LEFT_JOIN); + $criteria->addJoin(TaskPeer::TAS_LAST_ASSIGNED, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - $criteria->add(\TaskPeer::PRO_UID, $processUid, \Criteria::EQUAL); + $criteria->add(TaskPeer::PRO_UID, $processUid, Criteria::EQUAL); - $rsCriteria = \TaskPeer::doSelectRS($criteria); - $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria = TaskPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); @@ -2046,23 +2135,23 @@ class Cases if ($row["TAS_TYPE"] == "NORMAL") { if (($row["TAS_TITLE"] . "" == "")) { //There is no Label in Current SYS_LANG language so try to find in English - by default - $task = new \Task(); + $task = new ModelTask(); $task->setTasUid($row["TAS_UID"]); $row["TAS_TITLE"] = $task->getTasTitle(); } } else { - $criteria2 = new \Criteria("workflow"); + $criteria2 = new Criteria("workflow"); - $criteria2->addSelectColumn(\SubProcessPeer::PRO_UID); - $criteria2->addSelectColumn(\TaskPeer::TAS_TITLE); - $criteria2->addSelectColumn(\TaskPeer::TAS_DESCRIPTION); - $criteria2->addJoin(\SubProcessPeer::TAS_PARENT, \TaskPeer::TAS_UID, \Criteria::LEFT_JOIN); - $criteria2->add(\SubProcessPeer::PRO_PARENT, $processUid); - $criteria2->add(\SubProcessPeer::TAS_PARENT, $row["TAS_UID"]); + $criteria2->addSelectColumn(SubProcessPeer::PRO_UID); + $criteria2->addSelectColumn(TaskPeer::TAS_TITLE); + $criteria2->addSelectColumn(TaskPeer::TAS_DESCRIPTION); + $criteria2->addJoin(SubProcessPeer::TAS_PARENT, TaskPeer::TAS_UID, Criteria::LEFT_JOIN); + $criteria2->add(SubProcessPeer::PRO_PARENT, $processUid); + $criteria2->add(SubProcessPeer::TAS_PARENT, $row["TAS_UID"]); - $rsCriteria2 = \SubProcessPeer::doSelectRS($criteria2); - $rsCriteria2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria2 = SubProcessPeer::doSelectRS($criteria2); + $rsCriteria2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rsCriteria2->next(); @@ -2078,18 +2167,18 @@ class Cases $routeType = ""; $arrayRoute = array(); - $criteria2 = new \Criteria("workflow"); + $criteria2 = new Criteria("workflow"); - $criteria2->addAsColumn("ROU_NUMBER", \RoutePeer::ROU_CASE); - $criteria2->addSelectColumn(\RoutePeer::ROU_TYPE); - $criteria2->addSelectColumn(\RoutePeer::ROU_CONDITION); - $criteria2->addAsColumn("TAS_UID", \RoutePeer::ROU_NEXT_TASK); - $criteria2->add(\RoutePeer::PRO_UID, $processUid, \Criteria::EQUAL); - $criteria2->add(\RoutePeer::TAS_UID, $row["TAS_UID"], \Criteria::EQUAL); + $criteria2->addAsColumn("ROU_NUMBER", RoutePeer::ROU_CASE); + $criteria2->addSelectColumn(RoutePeer::ROU_TYPE); + $criteria2->addSelectColumn(RoutePeer::ROU_CONDITION); + $criteria2->addAsColumn("TAS_UID", RoutePeer::ROU_NEXT_TASK); + $criteria2->add(RoutePeer::PRO_UID, $processUid, Criteria::EQUAL); + $criteria2->add(RoutePeer::TAS_UID, $row["TAS_UID"], Criteria::EQUAL); $criteria2->addAscendingOrderByColumn("ROU_NUMBER"); - $rsCriteria2 = \RoutePeer::doSelectRS($criteria2); - $rsCriteria2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria2 = RoutePeer::doSelectRS($criteria2); + $rsCriteria2->setFetchmode(ResultSet::FETCHMODE_ASSOC); while ($rsCriteria2->next()) { $row2 = $rsCriteria2->getRow(); @@ -2097,42 +2186,51 @@ class Cases $routeType = $row2["ROU_TYPE"]; $arrayRoute[] = array( - $this->getFieldNameByFormatFieldName("ROU_NUMBER") => (int)($row2["ROU_NUMBER"]), + $this->getFieldNameByFormatFieldName("ROU_NUMBER") => (int)($row2["ROU_NUMBER"]), $this->getFieldNameByFormatFieldName("ROU_CONDITION") => $row2["ROU_CONDITION"] . "", - $this->getFieldNameByFormatFieldName("TAS_UID") => $row2["TAS_UID"] + $this->getFieldNameByFormatFieldName("TAS_UID") => $row2["TAS_UID"] ); } //Delegations $arrayAppDelegation = array(); - $criteria2 = new \Criteria("workflow"); + $criteria2 = new Criteria("workflow"); - $criteria2->addSelectColumn(\AppDelegationPeer::DEL_INDEX); - $criteria2->addSelectColumn(\AppDelegationPeer::DEL_INIT_DATE); - $criteria2->addSelectColumn(\AppDelegationPeer::DEL_TASK_DUE_DATE); - $criteria2->addSelectColumn(\AppDelegationPeer::DEL_FINISH_DATE); - $criteria2->addSelectColumn(\UsersPeer::USR_UID); - $criteria2->addSelectColumn(\UsersPeer::USR_USERNAME); - $criteria2->addSelectColumn(\UsersPeer::USR_FIRSTNAME); - $criteria2->addSelectColumn(\UsersPeer::USR_LASTNAME); + $criteria2->addSelectColumn(AppDelegationPeer::DEL_INDEX); + $criteria2->addSelectColumn(AppDelegationPeer::DEL_INIT_DATE); + $criteria2->addSelectColumn(AppDelegationPeer::DEL_TASK_DUE_DATE); + $criteria2->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE); + $criteria2->addSelectColumn(UsersPeer::USR_UID); + $criteria2->addSelectColumn(UsersPeer::USR_USERNAME); + $criteria2->addSelectColumn(UsersPeer::USR_FIRSTNAME); + $criteria2->addSelectColumn(UsersPeer::USR_LASTNAME); - $criteria2->addJoin(\AppDelegationPeer::USR_UID, \UsersPeer::USR_UID, \Criteria::LEFT_JOIN); + $criteria2->addJoin(AppDelegationPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); - $criteria2->add(\AppDelegationPeer::APP_UID, $applicationUid, \Criteria::EQUAL); - $criteria2->add(\AppDelegationPeer::TAS_UID, $row["TAS_UID"], \Criteria::EQUAL); - $criteria2->addAscendingOrderByColumn(\AppDelegationPeer::DEL_INDEX); + $criteria2->add(AppDelegationPeer::APP_UID, $applicationUid, Criteria::EQUAL); + $criteria2->add(AppDelegationPeer::TAS_UID, $row["TAS_UID"], Criteria::EQUAL); + $criteria2->addAscendingOrderByColumn(AppDelegationPeer::DEL_INDEX); - $rsCriteria2 = \AppDelegationPeer::doSelectRS($criteria2); - $rsCriteria2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria2 = AppDelegationPeer::doSelectRS($criteria2); + $rsCriteria2->setFetchmode(ResultSet::FETCHMODE_ASSOC); while ($rsCriteria2->next()) { $row2 = $rsCriteria2->getRow(); $arrayAppDelegationDate = array( - "DEL_INIT_DATE" => array("date" => $row2["DEL_INIT_DATE"], "dateFormated" => \G::LoadTranslation("ID_CASE_NOT_YET_STARTED")), - "DEL_TASK_DUE_DATE" => array("date" => $row2["DEL_TASK_DUE_DATE"], "dateFormated" => \G::LoadTranslation("ID_CASE_NOT_YET_STARTED")), - "DEL_FINISH_DATE" => array("date" => $row2["DEL_FINISH_DATE"], "dateFormated" => \G::LoadTranslation("ID_NOT_FINISHED")) + "DEL_INIT_DATE" => array( + "date" => $row2["DEL_INIT_DATE"], + "dateFormated" => G::LoadTranslation("ID_CASE_NOT_YET_STARTED") + ), + "DEL_TASK_DUE_DATE" => array( + "date" => $row2["DEL_TASK_DUE_DATE"], + "dateFormated" => G::LoadTranslation("ID_CASE_NOT_YET_STARTED") + ), + "DEL_FINISH_DATE" => array( + "date" => $row2["DEL_FINISH_DATE"], + "dateFormated" => G::LoadTranslation("ID_NOT_FINISHED") + ) ); foreach ($arrayAppDelegationDate as $key => $value) { @@ -2144,7 +2242,7 @@ class Cases } } - $appDelegationDuration = \G::LoadTranslation("ID_NOT_FINISHED"); + $appDelegationDuration = G::LoadTranslation("ID_NOT_FINISHED"); if (!empty($row2["DEL_FINISH_DATE"]) && !empty($row2["DEL_INIT_DATE"])) { $t = strtotime($row2["DEL_FINISH_DATE"]) - strtotime($row2["DEL_INIT_DATE"]); @@ -2156,21 +2254,21 @@ class Cases $h = (int)($h); $m = (int)($m); - $appDelegationDuration = $h . " " . (($h == 1)? \G::LoadTranslation("ID_HOUR") : \G::LoadTranslation("ID_HOURS")); - $appDelegationDuration = $appDelegationDuration . " " . $m . " " . (($m == 1)? \G::LoadTranslation("ID_MINUTE") : \G::LoadTranslation("ID_MINUTES")); - $appDelegationDuration = $appDelegationDuration . " " . $s . " " . (($s == 1)? \G::LoadTranslation("ID_SECOND") : \G::LoadTranslation("ID_SECONDS")); + $appDelegationDuration = $h . " " . (($h == 1) ? G::LoadTranslation("ID_HOUR") : G::LoadTranslation("ID_HOURS")); + $appDelegationDuration = $appDelegationDuration . " " . $m . " " . (($m == 1) ? G::LoadTranslation("ID_MINUTE") : G::LoadTranslation("ID_MINUTES")); + $appDelegationDuration = $appDelegationDuration . " " . $s . " " . (($s == 1) ? G::LoadTranslation("ID_SECOND") : G::LoadTranslation("ID_SECONDS")); } $arrayAppDelegation[] = array( - $this->getFieldNameByFormatFieldName("DEL_INDEX") => (int)($row2["DEL_INDEX"]), - $this->getFieldNameByFormatFieldName("DEL_INIT_DATE") => $arrayAppDelegationDate["DEL_INIT_DATE"]["dateFormated"], + $this->getFieldNameByFormatFieldName("DEL_INDEX") => (int)($row2["DEL_INDEX"]), + $this->getFieldNameByFormatFieldName("DEL_INIT_DATE") => $arrayAppDelegationDate["DEL_INIT_DATE"]["dateFormated"], $this->getFieldNameByFormatFieldName("DEL_TASK_DUE_DATE") => $arrayAppDelegationDate["DEL_TASK_DUE_DATE"]["dateFormated"], - $this->getFieldNameByFormatFieldName("DEL_FINISH_DATE") => $arrayAppDelegationDate["DEL_FINISH_DATE"]["dateFormated"], - $this->getFieldNameByFormatFieldName("DEL_DURATION") => $appDelegationDuration, - $this->getFieldNameByFormatFieldName("USR_UID") => $row2["USR_UID"], - $this->getFieldNameByFormatFieldName("USR_USERNAME") => $row2["USR_USERNAME"] . "", - $this->getFieldNameByFormatFieldName("USR_FIRSTNAME") => $row2["USR_FIRSTNAME"] . "", - $this->getFieldNameByFormatFieldName("USR_LASTNAME") => $row2["USR_LASTNAME"] . "" + $this->getFieldNameByFormatFieldName("DEL_FINISH_DATE") => $arrayAppDelegationDate["DEL_FINISH_DATE"]["dateFormated"], + $this->getFieldNameByFormatFieldName("DEL_DURATION") => $appDelegationDuration, + $this->getFieldNameByFormatFieldName("USR_UID") => $row2["USR_UID"], + $this->getFieldNameByFormatFieldName("USR_USERNAME") => $row2["USR_USERNAME"] . "", + $this->getFieldNameByFormatFieldName("USR_FIRSTNAME") => $row2["USR_FIRSTNAME"] . "", + $this->getFieldNameByFormatFieldName("USR_LASTNAME") => $row2["USR_LASTNAME"] . "" ); } @@ -2178,30 +2276,30 @@ class Cases $status = ""; //$criteria2 - $criteria2 = new \Criteria("workflow"); + $criteria2 = new Criteria("workflow"); - $criteria2->addAsColumn("CANT", "COUNT(" . \AppDelegationPeer::APP_UID . ")"); - $criteria2->addAsColumn("FINISH", "MIN(" . \AppDelegationPeer::DEL_FINISH_DATE . ")"); - $criteria2->add(\AppDelegationPeer::APP_UID, $applicationUid, \Criteria::EQUAL); - $criteria2->add(\AppDelegationPeer::TAS_UID, $row["TAS_UID"], \Criteria::EQUAL); + $criteria2->addAsColumn("CANT", "COUNT(" . AppDelegationPeer::APP_UID . ")"); + $criteria2->addAsColumn("FINISH", "MIN(" . AppDelegationPeer::DEL_FINISH_DATE . ")"); + $criteria2->add(AppDelegationPeer::APP_UID, $applicationUid, Criteria::EQUAL); + $criteria2->add(AppDelegationPeer::TAS_UID, $row["TAS_UID"], Criteria::EQUAL); - $rsCriteria2 = \AppDelegationPeer::doSelectRS($criteria2); - $rsCriteria2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria2 = AppDelegationPeer::doSelectRS($criteria2); + $rsCriteria2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rsCriteria2->next(); $row2 = $rsCriteria2->getRow(); //$criteria3 - $criteria3 = new \Criteria("workflow"); + $criteria3 = new Criteria("workflow"); - $criteria3->addSelectColumn(\AppDelegationPeer::DEL_FINISH_DATE); - $criteria3->add(\AppDelegationPeer::APP_UID, $applicationUid, \Criteria::EQUAL); - $criteria3->add(\AppDelegationPeer::TAS_UID, $row["TAS_UID"], \Criteria::EQUAL); - $criteria3->add(\AppDelegationPeer::DEL_FINISH_DATE, null, \Criteria::ISNULL); + $criteria3->addSelectColumn(AppDelegationPeer::DEL_FINISH_DATE); + $criteria3->add(AppDelegationPeer::APP_UID, $applicationUid, Criteria::EQUAL); + $criteria3->add(AppDelegationPeer::TAS_UID, $row["TAS_UID"], Criteria::EQUAL); + $criteria3->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); - $rsCriteria3 = \AppDelegationPeer::doSelectRS($criteria3); - $rsCriteria3->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria3 = AppDelegationPeer::doSelectRS($criteria3); + $rsCriteria3->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rsCriteria3->next(); @@ -2270,11 +2368,10 @@ class Cases Validator::appUid($app_uid, '$app_uid'); Validator::isInteger($del_index, '$del_index'); - $oCase = new \Cases(); + $oCase = new ClassesCases(); $aField = $oCase->loadCase($app_uid, $del_index); - $tas_uid = $aField["TAS_UID"]; + $tas_uid = $aField["TAS_UID"]; - $task = new \Tasks(); $aField["APP_DATA"] = $oCase->executeTriggers($tas_uid, $obj_type, $obj_uid, "AFTER", $aField["APP_DATA"]); $aField = $oCase->updateCase($app_uid, $aField); } @@ -2283,7 +2380,7 @@ class Cases * Get Steps evaluate * * @access public - * @param string $app_uid, Uid for case + * @param string $app_uid , Uid for case * @param int $del_index , Index for case * @return array * @@ -2295,10 +2392,10 @@ class Cases Validator::appUid($app_uid, '$app_uid'); Validator::isInteger($del_index, '$del_index'); - $oCase = new \Cases(); + $oCase = new ClassesCases(); $aCaseField = $oCase->loadCase($app_uid, $del_index); - $tas_uid = $aCaseField["TAS_UID"]; - $pro_uid = $aCaseField["PRO_UID"]; + $tas_uid = $aCaseField["TAS_UID"]; + $pro_uid = $aCaseField["PRO_UID"]; $oApplication = new Applications(); $aField = $oApplication->getSteps($app_uid, $del_index, $tas_uid, $pro_uid); @@ -2314,7 +2411,11 @@ class Cases if ($rsCriteria->next()) { $record = $rsCriteria->getRow(); - $arrayData = ['APP_STATUS' => $record['APP_STATUS'], 'DEL_INDEX' => [], 'PRO_UID' => $record['PRO_UID']]; + $arrayData = [ + 'APP_STATUS' => $record['APP_STATUS'], + 'DEL_INDEX' => [], + 'PRO_UID' => $record['PRO_UID'] + ]; $arrayData['DEL_INDEX'][] = $record['DEL_INDEX']; while ($rsCriteria->next()) { @@ -2335,8 +2436,8 @@ class Cases * Get status info Case * * @param string $applicationUid Unique id of Case - * @param int $delIndex Delegation index - * @param string $userUid Unique id of User + * @param int $delIndex Delegation index + * @param string $userUid Unique id of User * * @return array Return an array with status info Case, array empty otherwise */ @@ -2344,36 +2445,37 @@ class Cases { try { //Verify data - $this->throwExceptionIfNotExistsCase($applicationUid, $delIndex, $this->getFieldNameByFormatFieldName("APP_UID")); + $this->throwExceptionIfNotExistsCase($applicationUid, $delIndex, + $this->getFieldNameByFormatFieldName("APP_UID")); //Get data //Status is PAUSED - $delimiter = \DBAdapter::getStringDelimiter(); + $delimiter = DBAdapter::getStringDelimiter(); - $criteria = new \Criteria("workflow"); + $criteria = new Criteria("workflow"); $criteria->setDistinct(); $criteria->addSelectColumn($delimiter . 'PAUSED' . $delimiter . ' AS APP_STATUS'); - $criteria->addSelectColumn(\AppDelayPeer::APP_DEL_INDEX . " AS DEL_INDEX"); - $criteria->addSelectColumn(\AppDelayPeer::PRO_UID); + $criteria->addSelectColumn(AppDelayPeer::APP_DEL_INDEX . " AS DEL_INDEX"); + $criteria->addSelectColumn(AppDelayPeer::PRO_UID); - $criteria->add(\AppDelayPeer::APP_UID, $applicationUid, \Criteria::EQUAL); - $criteria->add(\AppDelayPeer::APP_TYPE, "PAUSE", \Criteria::EQUAL); + $criteria->add(AppDelayPeer::APP_UID, $applicationUid, Criteria::EQUAL); + $criteria->add(AppDelayPeer::APP_TYPE, "PAUSE", Criteria::EQUAL); $criteria->add( - $criteria->getNewCriterion(\AppDelayPeer::APP_DISABLE_ACTION_USER, null, \Criteria::ISNULL)->addOr( - $criteria->getNewCriterion(\AppDelayPeer::APP_DISABLE_ACTION_USER, 0, \Criteria::EQUAL)) + $criteria->getNewCriterion(AppDelayPeer::APP_DISABLE_ACTION_USER, null, Criteria::ISNULL)->addOr( + $criteria->getNewCriterion(AppDelayPeer::APP_DISABLE_ACTION_USER, 0, Criteria::EQUAL)) ); if ($delIndex != 0) { - $criteria->add(\AppDelayPeer::APP_DEL_INDEX, $delIndex, \Criteria::EQUAL); + $criteria->add(AppDelayPeer::APP_DEL_INDEX, $delIndex, Criteria::EQUAL); } if ($userUid != "") { - $criteria->add(\AppDelayPeer::APP_DELEGATION_USER, $userUid, \Criteria::EQUAL); + $criteria->add(AppDelayPeer::APP_DELEGATION_USER, $userUid, Criteria::EQUAL); } - $rsCriteria = \AppDelayPeer::doSelectRS($criteria); - $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria = AppDelayPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); $arrayData = $this->__getStatusInfoDataByRsCriteria($rsCriteria); @@ -2383,30 +2485,30 @@ class Cases //Status is UNASSIGNED if ($userUid != '') { - $appCacheView = new \AppCacheView(); + $appCacheView = new AppCacheView(); $criteria = $appCacheView->getUnassignedListCriteria($userUid); } else { - $criteria = new \Criteria('workflow'); + $criteria = new Criteria('workflow'); - $criteria->add(\AppCacheViewPeer::DEL_FINISH_DATE, null, \Criteria::ISNULL); - $criteria->add(\AppCacheViewPeer::USR_UID, '', \Criteria::EQUAL); + $criteria->add(AppCacheViewPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); + $criteria->add(AppCacheViewPeer::USR_UID, '', Criteria::EQUAL); } $criteria->setDistinct(); $criteria->clearSelectColumns(); $criteria->addSelectColumn($delimiter . 'UNASSIGNED' . $delimiter . ' AS APP_STATUS'); - $criteria->addSelectColumn(\AppCacheViewPeer::DEL_INDEX); - $criteria->addSelectColumn(\AppCacheViewPeer::PRO_UID); + $criteria->addSelectColumn(AppCacheViewPeer::DEL_INDEX); + $criteria->addSelectColumn(AppCacheViewPeer::PRO_UID); - $criteria->add(\AppCacheViewPeer::APP_UID, $applicationUid, \Criteria::EQUAL); + $criteria->add(AppCacheViewPeer::APP_UID, $applicationUid, Criteria::EQUAL); if ($delIndex != 0) { - $criteria->add(\AppCacheViewPeer::DEL_INDEX, $delIndex, \Criteria::EQUAL); + $criteria->add(AppCacheViewPeer::DEL_INDEX, $delIndex, Criteria::EQUAL); } - $rsCriteria = \AppCacheViewPeer::doSelectRS($criteria); - $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria = AppCacheViewPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); $arrayData = $this->__getStatusInfoDataByRsCriteria($rsCriteria); @@ -2415,40 +2517,44 @@ class Cases } //Status is TO_DO, DRAFT - $criteria = new \Criteria("workflow"); + $criteria = new Criteria("workflow"); $criteria->setDistinct(); - $criteria->addSelectColumn(\ApplicationPeer::APP_STATUS); - $criteria->addSelectColumn(\ApplicationPeer::PRO_UID); - $criteria->addSelectColumn(\AppDelegationPeer::DEL_INDEX); + $criteria->addSelectColumn(ApplicationPeer::APP_STATUS); + $criteria->addSelectColumn(ApplicationPeer::PRO_UID); + $criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); $arrayCondition = array(); - $arrayCondition[] = array(\ApplicationPeer::APP_UID, \AppDelegationPeer::APP_UID, \Criteria::EQUAL); - $arrayCondition[] = array(\ApplicationPeer::APP_UID, \AppThreadPeer::APP_UID, \Criteria::EQUAL); - $arrayCondition[] = array(\ApplicationPeer::APP_UID, $delimiter . $applicationUid . $delimiter, \Criteria::EQUAL); - $criteria->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN); + $arrayCondition[] = array(ApplicationPeer::APP_UID, AppDelegationPeer::APP_UID, Criteria::EQUAL); + $arrayCondition[] = array(ApplicationPeer::APP_UID, AppThreadPeer::APP_UID, Criteria::EQUAL); + $arrayCondition[] = array( + ApplicationPeer::APP_UID, + $delimiter . $applicationUid . $delimiter, + Criteria::EQUAL + ); + $criteria->addJoinMC($arrayCondition, Criteria::LEFT_JOIN); $criteria->add( - $criteria->getNewCriterion(\ApplicationPeer::APP_STATUS, "TO_DO", \Criteria::EQUAL)->addAnd( - $criteria->getNewCriterion(\AppDelegationPeer::DEL_FINISH_DATE, null, \Criteria::ISNULL))->addAnd( - $criteria->getNewCriterion(\AppDelegationPeer::DEL_THREAD_STATUS, "OPEN"))->addAnd( - $criteria->getNewCriterion(\AppThreadPeer::APP_THREAD_STATUS, "OPEN")) + $criteria->getNewCriterion(ApplicationPeer::APP_STATUS, "TO_DO", Criteria::EQUAL)->addAnd( + $criteria->getNewCriterion(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL))->addAnd( + $criteria->getNewCriterion(AppDelegationPeer::DEL_THREAD_STATUS, "OPEN"))->addAnd( + $criteria->getNewCriterion(AppThreadPeer::APP_THREAD_STATUS, "OPEN")) )->addOr( - $criteria->getNewCriterion(\ApplicationPeer::APP_STATUS, "DRAFT", \Criteria::EQUAL)->addAnd( - $criteria->getNewCriterion(\AppDelegationPeer::DEL_THREAD_STATUS, "OPEN"))->addAnd( - $criteria->getNewCriterion(\AppThreadPeer::APP_THREAD_STATUS, "OPEN")) + $criteria->getNewCriterion(ApplicationPeer::APP_STATUS, "DRAFT", Criteria::EQUAL)->addAnd( + $criteria->getNewCriterion(AppDelegationPeer::DEL_THREAD_STATUS, "OPEN"))->addAnd( + $criteria->getNewCriterion(AppThreadPeer::APP_THREAD_STATUS, "OPEN")) ); if ($delIndex != 0) { - $criteria->add(\AppDelegationPeer::DEL_INDEX, $delIndex, \Criteria::EQUAL); + $criteria->add(AppDelegationPeer::DEL_INDEX, $delIndex, Criteria::EQUAL); } if ($userUid != "") { - $criteria->add(\AppDelegationPeer::USR_UID, $userUid, \Criteria::EQUAL); + $criteria->add(AppDelegationPeer::USR_UID, $userUid, Criteria::EQUAL); } - $rsCriteria = \ApplicationPeer::doSelectRS($criteria); - $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria = ApplicationPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); $arrayData = $this->__getStatusInfoDataByRsCriteria($rsCriteria); @@ -2457,34 +2563,38 @@ class Cases } //Status is CANCELLED, COMPLETED - $criteria = new \Criteria("workflow"); + $criteria = new Criteria("workflow"); - $criteria->addSelectColumn(\ApplicationPeer::APP_STATUS); - $criteria->addSelectColumn(\ApplicationPeer::PRO_UID); - $criteria->addSelectColumn(\AppDelegationPeer::DEL_INDEX); + $criteria->addSelectColumn(ApplicationPeer::APP_STATUS); + $criteria->addSelectColumn(ApplicationPeer::PRO_UID); + $criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); $arrayCondition = array(); - $arrayCondition[] = array(\ApplicationPeer::APP_UID, \AppDelegationPeer::APP_UID, \Criteria::EQUAL); - $arrayCondition[] = array(\ApplicationPeer::APP_UID, $delimiter . $applicationUid . $delimiter, \Criteria::EQUAL); - $criteria->addJoinMC($arrayCondition, \Criteria::LEFT_JOIN); + $arrayCondition[] = array(ApplicationPeer::APP_UID, AppDelegationPeer::APP_UID, Criteria::EQUAL); + $arrayCondition[] = array( + ApplicationPeer::APP_UID, + $delimiter . $applicationUid . $delimiter, + Criteria::EQUAL + ); + $criteria->addJoinMC($arrayCondition, Criteria::LEFT_JOIN); if ($delIndex != 0) { - $criteria->add(\AppDelegationPeer::DEL_INDEX, $delIndex, \Criteria::EQUAL); + $criteria->add(AppDelegationPeer::DEL_INDEX, $delIndex, Criteria::EQUAL); } if ($userUid != "") { - $criteria->add(\AppDelegationPeer::USR_UID, $userUid, \Criteria::EQUAL); + $criteria->add(AppDelegationPeer::USR_UID, $userUid, Criteria::EQUAL); } $criteria2 = clone $criteria; $criteria2->setDistinct(); - $criteria2->add(\ApplicationPeer::APP_STATUS, ['CANCELLED', 'COMPLETED'], \Criteria::IN); - $criteria2->add(\AppDelegationPeer::DEL_LAST_INDEX, 1, \Criteria::EQUAL); + $criteria2->add(ApplicationPeer::APP_STATUS, ['CANCELLED', 'COMPLETED'], Criteria::IN); + $criteria2->add(AppDelegationPeer::DEL_LAST_INDEX, 1, Criteria::EQUAL); - $rsCriteria2 = \ApplicationPeer::doSelectRS($criteria2); - $rsCriteria2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria2 = ApplicationPeer::doSelectRS($criteria2); + $rsCriteria2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $arrayData = $this->__getStatusInfoDataByRsCriteria($rsCriteria2); @@ -2498,12 +2608,12 @@ class Cases $criteria2->setDistinct(); $criteria2->clearSelectColumns(); $criteria2->addSelectColumn($delimiter . 'PARTICIPATED' . $delimiter . ' AS APP_STATUS'); - $criteria2->addSelectColumn(\AppDelegationPeer::DEL_INDEX); - $criteria2->addSelectColumn(\ApplicationPeer::APP_UID); - $criteria2->addSelectColumn(\ApplicationPeer::PRO_UID); + $criteria2->addSelectColumn(AppDelegationPeer::DEL_INDEX); + $criteria2->addSelectColumn(ApplicationPeer::APP_UID); + $criteria2->addSelectColumn(ApplicationPeer::PRO_UID); - $rsCriteria2 = \ApplicationPeer::doSelectRS($criteria2); - $rsCriteria2->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria2 = ApplicationPeer::doSelectRS($criteria2); + $rsCriteria2->setFetchmode(ResultSet::FETCHMODE_ASSOC); $arrayData = $this->__getStatusInfoDataByRsCriteria($rsCriteria2); @@ -2531,7 +2641,7 @@ class Cases try { Validator::usrUid($usrUid, '$usr_uid'); - $case = new \Cases(); + $case = new ClassesCases(); $response = $case->getProcessListStartCase($usrUid, $typeView); return $response; @@ -2553,27 +2663,27 @@ class Cases try { Validator::usrUid($usrUid, '$usr_uid'); - $user = new \Users(); + $user = new ModelUsers(); $fields = $user->load($usrUid); $bookmark = empty($fields['USR_BOOKMARK_START_CASES']) ? array() : unserialize($fields['USR_BOOKMARK_START_CASES']); //Getting group id and adding the user id - $group = new \Groups(); + $group = new Groups(); $groups = $group->getActiveGroupsForAnUser($usrUid); $groups[] = $usrUid; - $c = new \Criteria(); + $c = new Criteria(); $c->clearSelectColumns(); - $c->addSelectColumn(\TaskPeer::TAS_UID); - $c->addSelectColumn(\TaskPeer::TAS_TITLE); - $c->addSelectColumn(\TaskPeer::PRO_UID); - $c->addSelectColumn(\ProcessPeer::PRO_TITLE); - $c->addJoin(\TaskPeer::PRO_UID, \ProcessPeer::PRO_UID, \Criteria::LEFT_JOIN); - $c->addJoin(\TaskPeer::TAS_UID, \TaskUserPeer::TAS_UID, \Criteria::LEFT_JOIN); - $c->add(\ProcessPeer::PRO_STATUS, 'ACTIVE'); - $c->add(\TaskPeer::TAS_START, 'TRUE'); - $c->add(\TaskUserPeer::USR_UID, $groups, \Criteria::IN); - $c->add(\TaskPeer::TAS_UID, $bookmark, \Criteria::IN); + $c->addSelectColumn(TaskPeer::TAS_UID); + $c->addSelectColumn(TaskPeer::TAS_TITLE); + $c->addSelectColumn(TaskPeer::PRO_UID); + $c->addSelectColumn(ProcessPeer::PRO_TITLE); + $c->addJoin(TaskPeer::PRO_UID, ProcessPeer::PRO_UID, Criteria::LEFT_JOIN); + $c->addJoin(TaskPeer::TAS_UID, TaskUserPeer::TAS_UID, Criteria::LEFT_JOIN); + $c->add(ProcessPeer::PRO_STATUS, 'ACTIVE'); + $c->add(TaskPeer::TAS_START, 'TRUE'); + $c->add(TaskUserPeer::USR_UID, $groups, Criteria::IN); + $c->add(TaskPeer::TAS_UID, $bookmark, Criteria::IN); if ($typeView == 'category') { $c->addAsColumn('PRO_CATEGORY', 'PCS.PRO_CATEGORY'); @@ -2581,16 +2691,16 @@ class Cases $c->addAlias('PCS', 'PROCESS'); $c->addAlias('PCSCAT', 'PROCESS_CATEGORY'); $aConditions = array(); - $aConditions[] = array(\TaskPeer::PRO_UID, 'PCS.PRO_UID'); - $c->addJoinMC( $aConditions, \Criteria::LEFT_JOIN ); + $aConditions[] = array(TaskPeer::PRO_UID, 'PCS.PRO_UID'); + $c->addJoinMC($aConditions, Criteria::LEFT_JOIN); $aConditions = array(); $aConditions[] = array('PCS.PRO_CATEGORY', 'PCSCAT.CATEGORY_UID'); - $c->addJoinMC( $aConditions, \Criteria::LEFT_JOIN ); + $c->addJoinMC($aConditions, Criteria::LEFT_JOIN); } $c->setDistinct(); - $rs = \TaskPeer::doSelectRS($c); + $rs = TaskPeer::doSelectRS($c); - $rs->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); $processList = array(); while ($rs->next()) { $row = $rs->getRow(); @@ -2625,143 +2735,158 @@ class Cases /** * Get Users to reassign * - * @param string $userUid Unique id of User (User logged) - * @param string $taskUid Unique id of Task - * @param array $arrayFilterData Data of the filters - * @param string $sortField Field name to sort - * @param string $sortDir Direction of sorting (ASC, DESC) - * @param int $start Start - * @param int $limit Limit + * @param string $userUid Unique id of User (User logged) + * @param string $taskUid Unique id of Task + * @param array $arrayFilterData Data of the filters + * @param string $sortField Field name to sort + * @param string $sortDir Direction of sorting (ASC, DESC) + * @param int $start Start + * @param int $limit Limit * * @return array Return Users to reassign */ - public function getUsersToReassign($userUid, $taskUid, $arrayFilterData = null, $sortField = null, $sortDir = null, $start = null, $limit = null) - { + public function getUsersToReassign( + $userUid, + $taskUid, + $arrayFilterData = null, + $sortField = null, + $sortDir = null, + $start = null, + $limit = null + ) { try { $arrayUser = []; $numRecTotal = 0; //Set variables - $task = \TaskPeer::retrieveByPK($taskUid); + $task = TaskPeer::retrieveByPK($taskUid); $processUid = $task->getProUid(); - $user = new \ProcessMaker\BusinessModel\User(); - $task = new \Tasks(); - $group = new \Groups(); + $user = new BmUser(); + $task = new ClassesTasks(); + $group = new Groups(); //Set variables $filterName = 'filter'; if (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData['filter'])) { $arrayAux = [ - '' => 'filter', - 'LEFT' => 'lfilter', + '' => 'filter', + 'LEFT' => 'lfilter', 'RIGHT' => 'rfilter' ]; - $filterName = $arrayAux[(isset($arrayFilterData['filterOption']))? $arrayFilterData['filterOption'] : '']; + $filterName = $arrayAux[(isset($arrayFilterData['filterOption'])) ? $arrayFilterData['filterOption'] : '']; } //Get data if (!is_null($limit) && $limit . '' == '0') { //Return return [ - 'total' => $numRecTotal, - 'start' => (int)((!is_null($start))? $start : 0), - 'limit' => (int)((!is_null($limit))? $limit : 0), - $filterName => (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData['filter']))? $arrayFilterData['filter'] : '', - 'data' => $arrayUser + 'total' => $numRecTotal, + 'start' => (int)((!is_null($start)) ? $start : 0), + 'limit' => (int)((!is_null($limit)) ? $limit : 0), + $filterName => (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData['filter'])) ? $arrayFilterData['filter'] : '', + 'data' => $arrayUser ]; } //Set variables - $processSupervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor(); + $processSupervisor = new BmProcessSupervisor(); - $arrayResult = $processSupervisor->getProcessSupervisors($processUid, 'ASSIGNED', null, null, null, 'group'); + $arrayResult = $processSupervisor->getProcessSupervisors($processUid, 'ASSIGNED', null, null, null, + 'group'); $arrayGroupUid = array_merge( - array_map(function ($value) { return $value['GRP_UID']; }, $task->getGroupsOfTask($taskUid, 1)), //Groups - array_map(function ($value) { return $value['GRP_UID']; }, $task->getGroupsOfTask($taskUid, 2)), //AdHoc Groups - array_map(function ($value) { return $value['grp_uid']; }, $arrayResult['data']) //ProcessSupervisor Groups + array_map(function ($value) { + return $value['GRP_UID']; + }, $task->getGroupsOfTask($taskUid, 1)), //Groups + array_map(function ($value) { + return $value['GRP_UID']; + }, $task->getGroupsOfTask($taskUid, 2)), //AdHoc Groups + array_map(function ($value) { + return $value['grp_uid']; + }, $arrayResult['data']) //ProcessSupervisor Groups ); $sqlTaskUser = ' - SELECT ' . \TaskUserPeer::USR_UID . ' - FROM ' . \TaskUserPeer::TABLE_NAME . ' - WHERE ' . \TaskUserPeer::TAS_UID . ' = \'%s\' AND - ' . \TaskUserPeer::TU_TYPE . ' IN (1, 2) AND - ' . \TaskUserPeer::TU_RELATION . ' = 1 + SELECT ' . TaskUserPeer::USR_UID . ' + FROM ' . TaskUserPeer::TABLE_NAME . ' + WHERE ' . TaskUserPeer::TAS_UID . ' = \'%s\' AND + ' . TaskUserPeer::TU_TYPE . ' IN (1, 2) AND + ' . TaskUserPeer::TU_RELATION . ' = 1 '; $sqlGroupUser = ' - SELECT ' . \GroupUserPeer::USR_UID . ' - FROM ' . \GroupUserPeer::TABLE_NAME . ' - WHERE ' . \GroupUserPeer::GRP_UID . ' IN (%s) + SELECT ' . GroupUserPeer::USR_UID . ' + FROM ' . GroupUserPeer::TABLE_NAME . ' + WHERE ' . GroupUserPeer::GRP_UID . ' IN (%s) '; $sqlProcessSupervisor = ' - SELECT ' . \ProcessUserPeer::USR_UID . ' - FROM ' . \ProcessUserPeer::TABLE_NAME . ' - WHERE ' . \ProcessUserPeer::PRO_UID . ' = \'%s\' AND - ' . \ProcessUserPeer::PU_TYPE . ' = \'%s\' + SELECT ' . ProcessUserPeer::USR_UID . ' + FROM ' . ProcessUserPeer::TABLE_NAME . ' + WHERE ' . ProcessUserPeer::PRO_UID . ' = \'%s\' AND + ' . ProcessUserPeer::PU_TYPE . ' = \'%s\' '; $sqlUserToReassign = '(' . sprintf($sqlTaskUser, $taskUid) . ')'; if (!empty($arrayGroupUid)) { - $sqlUserToReassign .= ' UNION (' . sprintf($sqlGroupUser, '\'' . implode('\', \'', $arrayGroupUid) . '\'') . ')'; + $sqlUserToReassign .= ' UNION (' . sprintf($sqlGroupUser, + '\'' . implode('\', \'', $arrayGroupUid) . '\'') . ')'; } $sqlUserToReassign .= ' UNION (' . sprintf($sqlProcessSupervisor, $processUid, 'SUPERVISOR') . ')'; //Query - $criteria = new \Criteria('workflow'); + $criteria = new Criteria('workflow'); - $criteria->addSelectColumn(\UsersPeer::USR_UID); - $criteria->addSelectColumn(\UsersPeer::USR_USERNAME); - $criteria->addSelectColumn(\UsersPeer::USR_FIRSTNAME); - $criteria->addSelectColumn(\UsersPeer::USR_LASTNAME); + $criteria->addSelectColumn(UsersPeer::USR_UID); + $criteria->addSelectColumn(UsersPeer::USR_USERNAME); + $criteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); + $criteria->addSelectColumn(UsersPeer::USR_LASTNAME); $criteria->addAlias('USER_TO_REASSIGN', '(' . $sqlUserToReassign . ')'); - $criteria->addJoin(\UsersPeer::USR_UID, 'USER_TO_REASSIGN.USR_UID', \Criteria::INNER_JOIN); + $criteria->addJoin(UsersPeer::USR_UID, 'USER_TO_REASSIGN.USR_UID', Criteria::INNER_JOIN); if (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData['filter']) && trim($arrayFilterData['filter']) != '') { $arraySearch = [ - '' => '%' . $arrayFilterData['filter'] . '%', - 'LEFT' => $arrayFilterData['filter'] . '%', + '' => '%' . $arrayFilterData['filter'] . '%', + 'LEFT' => $arrayFilterData['filter'] . '%', 'RIGHT' => '%' . $arrayFilterData['filter'] ]; - $search = $arraySearch[(isset($arrayFilterData['filterOption']))? $arrayFilterData['filterOption'] : '']; + $search = $arraySearch[(isset($arrayFilterData['filterOption'])) ? $arrayFilterData['filterOption'] : '']; $criteria->add( - $criteria->getNewCriterion(\UsersPeer::USR_USERNAME, $search, \Criteria::LIKE)->addOr( - $criteria->getNewCriterion(\UsersPeer::USR_FIRSTNAME, $search, \Criteria::LIKE))->addOr( - $criteria->getNewCriterion(\UsersPeer::USR_LASTNAME, $search, \Criteria::LIKE)) + $criteria->getNewCriterion(UsersPeer::USR_USERNAME, $search, Criteria::LIKE)->addOr( + $criteria->getNewCriterion(UsersPeer::USR_FIRSTNAME, $search, Criteria::LIKE))->addOr( + $criteria->getNewCriterion(UsersPeer::USR_LASTNAME, $search, Criteria::LIKE)) ); } - $criteria->add(\UsersPeer::USR_STATUS, 'ACTIVE', \Criteria::EQUAL); + $criteria->add(UsersPeer::USR_STATUS, 'ACTIVE', Criteria::EQUAL); if (!$user->checkPermission($userUid, 'PM_SUPERVISOR')) { - $criteria->add(\UsersPeer::USR_UID, $userUid, \Criteria::NOT_EQUAL); + $criteria->add(UsersPeer::USR_UID, $userUid, Criteria::NOT_EQUAL); } //Number records total - $numRecTotal = \UsersPeer::doCount($criteria); + $numRecTotal = UsersPeer::doCount($criteria); //Query - $conf = new \Configurations(); - $sortFieldDefault = \UsersPeer::TABLE_NAME . '.' . $conf->userNameFormatGetFirstFieldByUsersTable(); + $conf = new Configurations(); + $sortFieldDefault = UsersPeer::TABLE_NAME . '.' . $conf->userNameFormatGetFirstFieldByUsersTable(); if (!is_null($sortField) && trim($sortField) != '') { $sortField = strtoupper($sortField); - if (in_array(\UsersPeer::TABLE_NAME . '.' . $sortField, $criteria->getSelectColumns())) { - $sortField = \UsersPeer::TABLE_NAME . '.' . $sortField; + if (in_array(UsersPeer::TABLE_NAME . '.' . $sortField, $criteria->getSelectColumns())) { + $sortField = UsersPeer::TABLE_NAME . '.' . $sortField; } else { $sortField = $sortFieldDefault; } @@ -2783,8 +2908,8 @@ class Cases $criteria->setLimit((int)($limit)); } - $rsCriteria = \UsersPeer::doSelectRS($criteria); - $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $rsCriteria = UsersPeer::doSelectRS($criteria); + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); @@ -2794,11 +2919,11 @@ class Cases //Return return [ - 'total' => $numRecTotal, - 'start' => (int)((!is_null($start))? $start : 0), - 'limit' => (int)((!is_null($limit))? $limit : 0), - $filterName => (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData['filter']))? $arrayFilterData['filter'] : '', - 'data' => $arrayUser + 'total' => $numRecTotal, + 'start' => (int)((!is_null($start)) ? $start : 0), + 'limit' => (int)((!is_null($limit)) ? $limit : 0), + $filterName => (!is_null($arrayFilterData) && is_array($arrayFilterData) && isset($arrayFilterData['filter'])) ? $arrayFilterData['filter'] : '', + 'data' => $arrayUser ]; } catch (Exception $e) { throw $e; @@ -2825,12 +2950,13 @@ class Cases } $dataResponse = $data; $casesToReassign = $data['cases']; - $oCases = new \Cases(); + $oCases = new ClassesCases(); foreach ($casesToReassign as $key => $val) { - $appDelegation = \AppDelegationPeer::retrieveByPK($val['APP_UID'], $val['DEL_INDEX']); + $appDelegation = AppDelegationPeer::retrieveByPK($val['APP_UID'], $val['DEL_INDEX']); $existDelegation = $this->validateReassignData($appDelegation, $val, $data, 'DELEGATION_NOT_EXISTS'); if ($existDelegation) { - $existDelegation = $this->validateReassignData($appDelegation, $val, $data, 'USER_NOT_ASSIGNED_TO_TASK'); + $existDelegation = $this->validateReassignData($appDelegation, $val, $data, + 'USER_NOT_ASSIGNED_TO_TASK'); if ($existDelegation) { $usrUid = ''; if (array_key_exists('USR_UID', $val)) { @@ -2839,16 +2965,19 @@ class Cases } } if ($usrUid == '') { - $fields = $appDelegation->toArray(\BasePeer::TYPE_FIELDNAME); + $fields = $appDelegation->toArray(BasePeer::TYPE_FIELDNAME); $usrUid = $fields['USR_UID']; } //Will be not able reassign a case when is paused - $flagPaused = $this->validateReassignData($appDelegation, $val, $data, 'ID_REASSIGNMENT_PAUSED_ERROR'); + $flagPaused = $this->validateReassignData($appDelegation, $val, $data, + 'ID_REASSIGNMENT_PAUSED_ERROR'); //Current users of OPEN DEL_INDEX thread - $flagSameUser = $this->validateReassignData($appDelegation, $val, $data, 'REASSIGNMENT_TO_THE_SAME_USER'); + $flagSameUser = $this->validateReassignData($appDelegation, $val, $data, + 'REASSIGNMENT_TO_THE_SAME_USER'); //reassign case if ($flagPaused && $flagSameUser) { - $reassigned = $oCases->reassignCase($val['APP_UID'], $val['DEL_INDEX'], $usrUid, $data['usr_uid_target']); + $reassigned = $oCases->reassignCase($val['APP_UID'], $val['DEL_INDEX'], $usrUid, + $data['usr_uid_target']); $result = $reassigned ? 1 : 0; $this->messageResponse = [ 'APP_UID' => $val['APP_UID'], @@ -2862,6 +2991,7 @@ class Cases $dataResponse['cases'][$key] = $this->messageResponse; } unset($dataResponse['usr_uid_target']); + return G::json_encode($dataResponse); } @@ -2888,8 +3018,8 @@ class Cases } break; case 'USER_NOT_ASSIGNED_TO_TASK': - $task = new \ProcessMaker\BusinessModel\Task(); - $supervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor(); + $task = new BmTask(); + $supervisor = new BmProcessSupervisor(); $taskUid = $appDelegation->getTasUid(); $flagBoolean = $task->checkUserOrGroupAssignedTask($taskUid, $data['usr_uid_target']); $flagps = $supervisor->isUserProcessSupervisor($appDelegation->getProUid(), $data['usr_uid_target']); @@ -2905,12 +3035,12 @@ class Cases } break; case 'ID_REASSIGNMENT_PAUSED_ERROR': - if (\AppDelay::isPaused($value['APP_UID'], $value['DEL_INDEX'])) { + if (AppDelay::isPaused($value['APP_UID'], $value['DEL_INDEX'])) { $this->messageResponse = [ 'APP_UID' => $value['APP_UID'], 'DEL_INDEX' => $value['DEL_INDEX'], 'RESULT' => 0, - 'STATUS' => \G::LoadTranslation('ID_REASSIGNMENT_PAUSED_ERROR') + 'STATUS' => G::LoadTranslation('ID_REASSIGNMENT_PAUSED_ERROR') ]; $return = false; } @@ -2935,12 +3065,13 @@ class Cases 'APP_UID' => $value['APP_UID'], 'DEL_INDEX' => $value['DEL_INDEX'], 'RESULT' => 0, - 'STATUS' => \G::LoadTranslation('ID_REASSIGNMENT_ERROR') + 'STATUS' => G::LoadTranslation('ID_REASSIGNMENT_ERROR') ]; $return = false; } break; } + return $return; } @@ -2954,85 +3085,78 @@ class Cases */ public function caseAlreadyRouted($app_uid, $del_index, $usr_uid = '') { - $c = new \Criteria('workflow'); - $c->add(\AppDelegationPeer::APP_UID, $app_uid); - $c->add(\AppDelegationPeer::DEL_INDEX, $del_index); + $c = new Criteria('workflow'); + $c->add(AppDelegationPeer::APP_UID, $app_uid); + $c->add(AppDelegationPeer::DEL_INDEX, $del_index); if (!empty($usr_uid)) { - $c->add(\AppDelegationPeer::USR_UID, $usr_uid); + $c->add(AppDelegationPeer::USR_UID, $usr_uid); } - $c->add(\AppDelegationPeer::DEL_FINISH_DATE, null, \Criteria::ISNULL); - return !(boolean) \AppDelegationPeer::doCount($c); + $c->add(AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNULL); + + return !(boolean)AppDelegationPeer::doCount($c); } + /** + * This function review if the user has processPermissions or the user is supervisor + * + * @param string $userUid + * @param string $applicationUid + * @param string $dynaformUid + * + * @return boolean + */ public function checkUserHasPermissionsOrSupervisor($userUid, $applicationUid, $dynaformUid) { $arrayApplicationData = $this->getApplicationRecordByPk($applicationUid, [], false); - //Check whether the process supervisor - $supervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor(); - $userAccess = $supervisor->isUserProcessSupervisor($arrayApplicationData['PRO_UID'], $userUid); - if (!empty($dynaformUid)) { - //Check if have objects assigned (Supervisor) - $cases = new \Cases(); - $resultDynaForm = $cases->getAllDynaformsStepsToRevise($applicationUid); - $flagSupervisors = false; - while ($resultDynaForm->next()) { - $row = $resultDynaForm->getRow(); - if ($row["STEP_UID_OBJ"] = $dynaformUid) { - $flagSupervisors = true; - break; - } - } - //Check if have permissions VIEW - $case = new \Cases(); - $arrayAllObjectsFrom = $case->getAllObjectsFrom($arrayApplicationData['PRO_UID'], $applicationUid, '', $userUid, 'VIEW', 0); - $flagPermissionsVIEW = false; - if (array_key_exists('DYNAFORMS', $arrayAllObjectsFrom) && - !empty($arrayAllObjectsFrom['DYNAFORMS']) - ) { - foreach ($arrayAllObjectsFrom['DYNAFORMS'] as $value) { - if ($value == $dynaformUid) { - $flagPermissionsVIEW = true; - } - } - } - //Check if have permissions BLOCK - $arrayAllObjectsFrom = $case->getAllObjectsFrom($arrayApplicationData['PRO_UID'], $applicationUid, '', $userUid, 'BLOCK', 0); - $flagPermissionsBLOCK = false; - if (array_key_exists('DYNAFORMS', $arrayAllObjectsFrom) && - !empty($arrayAllObjectsFrom['DYNAFORMS']) - ) { - foreach ($arrayAllObjectsFrom['DYNAFORMS'] as $value) { - if ($value == $dynaformUid) { - $flagPermissionsBLOCK = true; - } - } - } - //check case Tracker - $flagCaseTracker = $case->getAllObjectsTrackerDynaform($arrayApplicationData['PRO_UID'], $dynaformUid); - return ($flagSupervisors && $userAccess) || $flagPermissionsVIEW || $flagPermissionsBLOCK || $flagCaseTracker; - } else { - $arrayResult = $this->getStatusInfo($applicationUid, 0, $userUid); - $flagParticipated = false; - if ($arrayResult || $userAccess) { - $flagParticipated = true; - } - return $flagParticipated; - } + //Get all access for the user, we no consider the permissions + $userCanAccess = $this->userAuthorization( + $userUid, + $arrayApplicationData['PRO_UID'], + $applicationUid, + [], + [], + true + ); + + //We need to get all the object permission consider the BLOCK + $case = new ClassesCases(); + $allObjectPermissions = $case->getAllObjects($arrayApplicationData['PRO_UID'], $applicationUid, '', $userUid); + + //Check case tracker + $flagCaseTracker = $case->getAllObjectsTrackerDynaform($arrayApplicationData['PRO_UID'], $dynaformUid); + + //Review if the user has participated in the case + //Review if the user is supervisor in the case and if had assign the objectSupervisor + //Review if the user has process permission SUMMARY FORM + //Review if the user has process permission DYNAFORM for the specific form + //Review if the form is configured for case tracker + return ( + $userCanAccess['participated'] + || ($userCanAccess['supervisor'] && in_array($dynaformUid, $userCanAccess['objectSupervisor'])) + || $allObjectPermissions['SUMMARY_FORM'] + || in_array($dynaformUid, $allObjectPermissions['DYNAFORMS']) + || $flagCaseTracker + ); } /** * Delete MultipleFile in Case data * - * @param array $arrayApplicationData Case data - * @param string $variable1 Variable1 - * @param string $variable2 Variable2 - * @param string $type Type (NORMAL, GRID) - * @param array $arrayDocumentToDelete Document to delete + * @param array $arrayApplicationData Case data + * @param string $variable1 Variable1 + * @param string $variable2 Variable2 + * @param string $type Type (NORMAL, GRID) + * @param array $arrayDocumentToDelete Document to delete * * @return array Returns array with Case data updated */ - private function __applicationDataDeleteMultipleFile(array $arrayApplicationData, $variable1, $variable2, $type, array $arrayDocumentToDelete) - { + private function __applicationDataDeleteMultipleFile( + array $arrayApplicationData, + $variable1, + $variable2, + $type, + array $arrayDocumentToDelete + ) { if (array_key_exists($variable1, $arrayApplicationData) && is_array($arrayApplicationData[$variable1]) && !empty($arrayApplicationData[$variable1]) ) { @@ -3088,15 +3212,15 @@ class Cases /** * Delete MultipleFile * - * @param string $applicationUid Unique id of Case - * @param array $arrayVariableDocumentToDelete Variable with Documents to delete + * @param string $applicationUid Unique id of Case + * @param array $arrayVariableDocumentToDelete Variable with Documents to delete * * @return void */ public function deleteMultipleFile($applicationUid, array $arrayVariableDocumentToDelete) { - $case = new \Cases(); - $appDocument = new \AppDocument(); + $case = new ClassesCases(); + $appDocument = new AppDocument(); $arrayApplicationData = $this->getApplicationRecordByPk($applicationUid, [], false); $arrayApplicationData['APP_DATA'] = $case->unserializeData($arrayApplicationData['APP_DATA']); @@ -3163,7 +3287,7 @@ class Cases //The observations suggested by 'pull request' approver are applied (please see pull request). foreach ($arrayVariableDocumentToDelete as $key => $value) { if (isset($value['appDocUid'])) { - $appDocument->remove($value['appDocUid'], (int) (isset($value['version']) ? $value['version'] : 1)); + $appDocument->remove($value['appDocUid'], (int)(isset($value['version']) ? $value['version'] : 1)); if (is_string($arrayApplicationData['APP_DATA'][$key])) { try { $files = G::json_decode($arrayApplicationData['APP_DATA'][$key]); @@ -3174,7 +3298,7 @@ class Cases } $arrayApplicationData['APP_DATA'][$key] = G::json_encode($files); } catch (Exception $e) { - Bootstrap::registerMonolog('DeleteFile', 400, $e->getMessage(), $value, SYS_SYS, 'processmaker.log'); + Bootstrap::registerMonolog('DeleteFile', 400, $e->getMessage(), $value, config("system.workspace"), 'processmaker.log'); } } $flagDelete = true; @@ -3187,28 +3311,42 @@ class Cases } /** - * Get Permissions, Participate, Access + * Get Permissions, Participate, Access, Objects supervisor * * @param string $usrUid * @param string $proUid * @param string $appUid - * @param array $rolesPermissions - * @param array $objectPermissions - * @return array Returns array with all access + * @param array $rolesPermissions, the roles that we need to review + * @param array $objectPermissions, the permissions that we need to review + * @param boolean $objectSupervisor, if we need to get all the objects supervisor + * @return array */ - public function userAuthorization($usrUid, $proUid, $appUid, $rolesPermissions = array(), $objectPermissions = array()) { - $arrayAccess = array(); + public function userAuthorization( + $usrUid, + $proUid, + $appUid, + $rolesPermissions = [], + $objectPermissions = [], + $objectSupervisor = false + ) { + $arrayAccess = []; //User has participated - $oParticipated = new \ListParticipatedLast(); - $aParticipated = $oParticipated->loadList($usrUid, array(), null, $appUid); - $arrayAccess['participated'] = (count($aParticipated) == 0) ? false : true; + $participated = new ListParticipatedLast(); + $listParticipated = $participated->loadList($usrUid, [], null, $appUid); + $arrayAccess['participated'] = (count($listParticipated) == 0) ? false : true; //User is supervisor - $supervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor(); + $supervisor = new BmProcessSupervisor(); $isSupervisor = $supervisor->isUserProcessSupervisor($proUid, $usrUid); $arrayAccess['supervisor'] = ($isSupervisor) ? true : false; + //If the user is supervisor we will to return the object assigned + if ($isSupervisor && $objectSupervisor) { + $ps = new BmProcessSupervisor(); + $arrayAccess['objectSupervisor'] = $ps->getObjectSupervisor($proUid); + } + //Roles Permissions if (count($rolesPermissions) > 0) { global $RBAC; @@ -3219,9 +3357,9 @@ class Cases //Object Permissions if (count($objectPermissions) > 0) { - $oCase = new \Cases(); + $case = new ClassesCases(); foreach ($objectPermissions as $key => $value) { - $resPermission = $oCase->getAllObjectsFrom($proUid, $appUid, '', $usrUid, $value); + $resPermission = $case->getAllObjectsFrom($proUid, $appUid, '', $usrUid, $value); if (isset($resPermission[$key])) { $arrayAccess['objectPermissions'][$key] = $resPermission[$key]; } @@ -3244,26 +3382,49 @@ class Cases $appData = array_change_key_case($appData, CASE_UPPER); $dataVariable = array_change_key_case($dataVariable, CASE_UPPER); - if (!isset($dataVariable['APPLICATION']) || empty($dataVariable['APPLICATION'])) { - $dataVariable['APPLICATION'] = (isset($dataVariable['APP_UID']) && $dataVariable['APP_UID'] != '') ? $dataVariable['APP_UID'] : $appData['APPLICATION']; + $result = []; + //we get the appData parameters + if (!empty($appData['APPLICATION'])) { + $result['APPLICATION'] = $appData['APPLICATION']; } - if (!isset($dataVariable['PROCESS']) || empty($dataVariable['PROCESS'])) { - $dataVariable['PROCESS'] = (isset($dataVariable['PRO_UID']) && $dataVariable['PRO_UID'] != '') ? $dataVariable['PRO_UID'] : $appData['PROCESS']; + if (!empty($appData['PROCESS'])) { + $result['PROCESS'] = $appData['PROCESS']; } - if (isset($appData['TASK']) && !empty($appData['TASK'])) { - $dataVariable['TASK'] = $appData['TASK']; + if (!empty($appData['TASK'])) { + $result['TASK'] = $appData['TASK']; } - if (isset($appData['INDEX']) && !empty($appData['INDEX'])) { - $dataVariable['INDEX'] = $appData['INDEX']; - } - $dataVariable['USER_LOGGED'] = \ProcessMaker\Services\OAuth2\Server::getUserId(); - if (isset($dataVariable['USER_LOGGED']) && !empty($dataVariable['USER_LOGGED'])) { - $oUserLogged = new \Users(); - $oUserLogged->load($dataVariable['USER_LOGGED']); - $dataVariable['USR_USERNAME'] = $oUserLogged->getUsrUsername(); + if (!empty($appData['INDEX'])) { + $result['INDEX'] = $appData['INDEX']; } - return $dataVariable; + //we try to get the missing elements + if (!empty($dataVariable['APP_UID']) && empty($result['APPLICATION'])) { + $result['APPLICATION'] = $dataVariable['APP_UID']; + } + if (!empty($dataVariable['PRO_UID']) && empty($result['PROCESS'])) { + $result['PROCESS'] = $dataVariable['PRO_UID']; + } + + $result['USER_LOGGED'] = ''; + $result['USR_USERNAME'] = ''; + global $RBAC; + if (isset($RBAC) && isset($RBAC->aUserInfo)) { + $result['USER_LOGGED'] = isset($RBAC->aUserInfo['USER_INFO']['USR_UID']) ? $RBAC->aUserInfo['USER_INFO']['USR_UID'] : ''; + $result['USR_USERNAME'] = isset($RBAC->aUserInfo['USER_INFO']['USR_USERNAME']) ? $RBAC->aUserInfo['USER_INFO']['USR_USERNAME'] : ''; + } + if (empty($result['USER_LOGGED'])) { + $result['USER_LOGGED'] = Server::getUserId(); + if (!empty($result['USER_LOGGED'])) { + $oUserLogged = new ModelUsers(); + $oUserLogged->load($result['USER_LOGGED']); + $result['USR_USERNAME'] = $oUserLogged->getUsrUsername(); + } + } + + //the parameter dataVariable may contain additional elements + $result = array_merge($dataVariable, $result); + + return $result; } /** @@ -3279,18 +3440,19 @@ class Cases */ public function getLastParticipatedByUser($appUid, $userUid, $threadStatus = '') { - $criteria = new \Criteria('workflow'); - $criteria->addSelectColumn(\AppDelegationPeer::DEL_INDEX); - $criteria->addSelectColumn(\AppDelegationPeer::DEL_THREAD_STATUS); - $criteria->add(\AppDelegationPeer::APP_UID, $appUid, \Criteria::EQUAL); - $criteria->add(\AppDelegationPeer::USR_UID, $userUid, \Criteria::EQUAL); + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); + $criteria->addSelectColumn(AppDelegationPeer::DEL_THREAD_STATUS); + $criteria->add(AppDelegationPeer::APP_UID, $appUid, Criteria::EQUAL); + $criteria->add(AppDelegationPeer::USR_UID, $userUid, Criteria::EQUAL); if (!empty($threadStatus)) { - $criteria->add(\AppDelegationPeer::DEL_THREAD_STATUS, $threadStatus, \Criteria::EQUAL); + $criteria->add(AppDelegationPeer::DEL_THREAD_STATUS, $threadStatus, Criteria::EQUAL); } - $dataSet = \AppDelegationPeer::doSelectRS($criteria); - $dataSet->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $dataSet = AppDelegationPeer::doSelectRS($criteria); + $dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataSet->next(); $row = $dataSet->getRow(); + return isset($row['DEL_INDEX']) ? $row['DEL_INDEX'] : 0; } @@ -3307,68 +3469,79 @@ class Cases */ public function getOneLastThread($appUid, $checkCaseIsPaused = false) { - $criteria = new \Criteria('workflow'); - $criteria->addSelectColumn(\AppDelegationPeer::DEL_INDEX); - $criteria->addSelectColumn(\AppDelegationPeer::DEL_THREAD_STATUS); - $criteria->add(\AppDelegationPeer::APP_UID, $appUid, \Criteria::EQUAL); - $dataSet = \AppDelegationPeer::doSelectRS($criteria); - $dataSet->setFetchmode(\ResultSet::FETCHMODE_ASSOC); + $criteria = new Criteria('workflow'); + $criteria->addSelectColumn(AppDelegationPeer::DEL_INDEX); + $criteria->addSelectColumn(AppDelegationPeer::DEL_THREAD_STATUS); + $criteria->add(AppDelegationPeer::APP_UID, $appUid, Criteria::EQUAL); + $dataSet = AppDelegationPeer::doSelectRS($criteria); + $dataSet->setFetchmode(ResultSet::FETCHMODE_ASSOC); $dataSet->next(); $row = $dataSet->getRow(); $delIndex = 0; while (is_array($row)) { $delIndex = $row['DEL_INDEX']; - if ($checkCaseIsPaused && \AppDelay::isPaused($appUid, $delIndex)) { + if ($checkCaseIsPaused && AppDelay::isPaused($appUid, $delIndex)) { return $delIndex; } $dataSet->next(); $row = $dataSet->getRow(); } + return $delIndex; } + /** * This function will be return the criteria for the search filter * * We considered in the search criteria the custom cases list, * the titles related to: caseTitle taskTitle processTitle and * the case number - * @param Criteria $criteria, must be contain the initial criteria for search - * @param string $listPeer, name of the list class - * @param string $search, the parameter for search in the table - * @param string $additionalClassName, name of the className of pmtable - * @param array $additionalColumns, columns related to the custom cases list + * @param Criteria $criteria , must be contain the initial criteria for search + * @param string $listPeer , name of the list class + * @param string $search , the parameter for search in the table + * @param string $additionalClassName , name of the className of pmtable + * @param array $additionalColumns , columns related to the custom cases list * @throws PropelException */ - public function getSearchCriteriaListCases(&$criteria, $listPeer ,$search, $additionalClassName = '', $additionalColumns = array() ) - { + public function getSearchCriteriaListCases( + &$criteria, + $listPeer, + $search, + $additionalClassName = '', + $additionalColumns = array() + ) { $oTmpCriteria = ''; //If we have additional tables configured in the custom cases list, prepare the variables for search if (count($additionalColumns) > 0) { require_once(PATH_DATA_SITE . 'classes' . PATH_SEP . $additionalClassName . '.php'); - $oNewCriteria = new \Criteria("workflow"); - $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", \Criteria::LIKE); + $oNewCriteria = new Criteria("workflow"); + $oTmpCriteria = $oNewCriteria->getNewCriterion(current($additionalColumns), "%" . $search . "%", + Criteria::LIKE); //We prepare the query related to the custom cases list foreach (array_slice($additionalColumns, 1) as $value) { - $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", \Criteria::LIKE)->addOr($oTmpCriteria); + $oTmpCriteria = $oNewCriteria->getNewCriterion($value, "%" . $search . "%", + Criteria::LIKE)->addOr($oTmpCriteria); } } if (!empty($oTmpCriteria)) { $criteria->add( - $criteria->getNewCriterion($listPeer::APP_TITLE, '%' . $search . '%', \Criteria::LIKE)->addOr( - $criteria->getNewCriterion($listPeer::APP_TAS_TITLE, '%' . $search . '%', \Criteria::LIKE)->addOr( - $criteria->getNewCriterion($listPeer::APP_PRO_TITLE, '%' . $search . '%', \Criteria::LIKE)->addOr( - $criteria->getNewCriterion($listPeer::APP_NUMBER, $search, \Criteria::EQUAL)->addOr( - $oTmpCriteria - )))) + $criteria->getNewCriterion($listPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion($listPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion($listPeer::APP_PRO_TITLE, '%' . $search . '%', + Criteria::LIKE)->addOr( + $criteria->getNewCriterion($listPeer::APP_NUMBER, $search, Criteria::EQUAL)->addOr( + $oTmpCriteria + )))) ); } else { $criteria->add( - $criteria->getNewCriterion($listPeer::APP_TITLE, '%' . $search . '%', \Criteria::LIKE)->addOr( - $criteria->getNewCriterion($listPeer::APP_TAS_TITLE, '%' . $search . '%', \Criteria::LIKE)->addOr( - $criteria->getNewCriterion($listPeer::APP_PRO_TITLE, '%' . $search . '%', \Criteria::LIKE)->addOr( - $criteria->getNewCriterion($listPeer::APP_NUMBER, $search, \Criteria::EQUAL)))) + $criteria->getNewCriterion($listPeer::APP_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion($listPeer::APP_TAS_TITLE, '%' . $search . '%', Criteria::LIKE)->addOr( + $criteria->getNewCriterion($listPeer::APP_PRO_TITLE, '%' . $search . '%', + Criteria::LIKE)->addOr( + $criteria->getNewCriterion($listPeer::APP_NUMBER, $search, Criteria::EQUAL)))) ); } } @@ -3383,17 +3556,38 @@ class Cases * @param string $defaultSort, name of column by sort default * @param string $additionalClassName, name of the className of pmTable * @param array $additionalColumns, columns related to the custom cases list with the format TABLE_NAME.COLUMN_NAME - * @return string $tableName + * @param string $userDisplayFormat, user information display format + * + * @return string|array could be an string $tableName, could be an array $columnSort */ - public function getSortColumn($listPeer, $field, $sort, $defaultSort, $additionalClassName = '', $additionalColumns = array()) - { + public function getSortColumn( + $listPeer, + $field, + $sort, + $defaultSort, + $additionalClassName = '', + $additionalColumns = array(), + $userDisplayFormat = '' + ) { $columnSort = $defaultSort; $tableName = ''; //We will check if the column by sort is a LIST table $columnsList = $listPeer::getFieldNames($field); if (in_array($sort, $columnsList)) { - $columnSort = $listPeer::TABLE_NAME . '.' . $sort; + switch ($sort) { + case 'DEL_PREVIOUS_USR_UID': + $columnSort = $this->buildOrderFieldFormatted($columnsList, $userDisplayFormat, 'DEL_PREVIOUS_'); + break; + case 'USR_UID': + $columnSort = $this->buildOrderFieldFormatted($columnsList, $userDisplayFormat, 'DEL_CURRENT_'); + if (empty($columnSort)) { + $columnSort = $this->buildOrderFieldFormatted($columnsList, $userDisplayFormat, '', false); + } + break; + default: + $columnSort = $listPeer::TABLE_NAME . '.' . $sort; + } } else { //We will sort by CUSTOM CASE LIST table if (count($additionalColumns) > 0) { @@ -3410,4 +3604,101 @@ class Cases return $columnSort; } + + /** + * When we order columns related to the user information we need to use the userDisplayFormat + * + * @param array $columnsList, the list of columns in the table + * @param string $format, the user display format + * @param string $prefix, the initial name of the columns related to the USR_FIRSTNAME USR_LASTNAME USR_USERNAME + * + * @return array $columnSort, columns by apply the sql command ORDER BY + */ + public function buildOrderFieldFormatted($columnsList, $format, $prefix = 'DEL_PREVIOUS_', $validate = true) + { + $columnSort = []; + + if (!$validate || (in_array($prefix . 'USR_FIRSTNAME', $columnsList) && + in_array($prefix . 'USR_LASTNAME', $columnsList) && + in_array($prefix . 'USR_USERNAME', $columnsList)) + ) { + switch ($format) { + case '@firstName @lastName': + array_push($columnSort, $prefix . 'USR_FIRSTNAME'); + array_push($columnSort, $prefix . 'USR_LASTNAME'); + break; + case '@firstName @lastName (@userName)': + array_push($columnSort, $prefix . 'USR_FIRSTNAME'); + array_push($columnSort, $prefix . 'USR_LASTNAME'); + array_push($columnSort, $prefix . 'USR_USERNAME'); + break; + case '@userName': + array_push($columnSort, $prefix . 'USR_USERNAME'); + break; + case '@userName (@firstName @lastName)': + array_push($columnSort, $prefix . 'USR_USERNAME'); + array_push($columnSort, $prefix . 'USR_FIRSTNAME'); + array_push($columnSort, $prefix . 'USR_LASTNAME'); + break; + case '@lastName, @firstName': + array_push($columnSort, $prefix . 'USR_LASTNAME'); + array_push($columnSort, $prefix . 'USR_FIRSTNAME'); + break; + case '@lastName @firstName': + array_push($columnSort, $prefix . 'USR_LASTNAME'); + array_push($columnSort, $prefix . 'USR_FIRSTNAME'); + break; + case '@lastName, @firstName (@userName)': + array_push($columnSort, $prefix . 'USR_LASTNAME'); + array_push($columnSort, $prefix . 'USR_FIRSTNAME'); + array_push($columnSort, $prefix . 'USR_USERNAME'); + break; + default: + array_push($columnSort, $prefix . 'USR_USERNAME'); + break; + } + } + + return $columnSort; + } + + /** This function verify if the user is a supervisor + * If we send the formUid we will to review if has the object form assigned + * + * @param string $usrUid, Uid related to the user + * @param string $appUid, Uid related to the case + * @param string $formUid, Uid related to the dynaform + * @param string $proUid, Uid related to the process + * + * @return boolean + */ + public function isSupervisorFromForm($usrUid, $appUid, $formUid, $proUid = '') + { + + //We will to search the proUid related to the appUid + if (empty($proUid)) { + $arrayApplicationData = $this->getApplicationRecordByPk($appUid, [], false); + $proUid = $arrayApplicationData['PRO_UID']; + } + + $supervisor = new BmProcessSupervisor(); + $isSupervisor = $supervisor->isUserProcessSupervisor($proUid, $usrUid); + + //We will check if the supervisor has the object form assigned + if ($isSupervisor) { + $cases = new ClassesCases(); + $resultDynaForm = $cases->getAllDynaformsStepsToRevise($appUid); + $isSupervisor = false; + while ($resultDynaForm->next()) { + $row = $resultDynaForm->getRow(); + //Review if the supervisor has the form assigned + if ($row["STEP_UID_OBJ"] === $formUid) { + $isSupervisor = true; + break; + } + } + } + + return $isSupervisor; + } } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php index 853095c30..ebc9fc2d9 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Cases/InputDocument.php @@ -802,8 +802,8 @@ class InputDocument break; } G::SendMessageText( $message, "ERROR" ); - $backUrlObj = explode( "sys" . SYS_SYS, $_SERVER['HTTP_REFERER'] ); - G::header( "location: " . "/sys" . SYS_SYS . $backUrlObj[1] ); + $backUrlObj = explode( "sys" . config("system.workspace"), $_SERVER['HTTP_REFERER'] ); + G::header( "location: " . "/sys" . config("system.workspace") . $backUrlObj[1] ); die(); } @@ -855,9 +855,9 @@ class InputDocument if ($msg != '') { if ($runningWorkflow) { G::SendMessageText($msg, 'ERROR'); - $backUrlObj = explode('sys' . SYS_SYS, $_SERVER['HTTP_REFERER']); + $backUrlObj = explode('sys' . config("system.workspace"), $_SERVER['HTTP_REFERER']); - G::header('location: ' . '/sys' . SYS_SYS . $backUrlObj[1]); + G::header('location: ' . '/sys' . config("system.workspace") . $backUrlObj[1]); exit(0); } else { throw new Exception($msg); @@ -1005,8 +1005,8 @@ class InputDocument } $message = $res->message; G::SendMessageText($message, "ERROR"); - $backUrlObj = explode("sys" . SYS_SYS, $_SERVER['HTTP_REFERER']); - G::header("location: " . "/sys" . SYS_SYS . $backUrlObj[1]); + $backUrlObj = explode("sys" . config("system.workspace"), $_SERVER['HTTP_REFERER']); + G::header("location: " . "/sys" . config("system.workspace") . $backUrlObj[1]); die(); } @@ -1019,8 +1019,8 @@ class InputDocument if ($inpDocMaxFilesize > 0 && $fileSizeByField > 0) { if ($fileSizeByField > $inpDocMaxFilesize) { G::SendMessageText(G::LoadTranslation("ID_SIZE_VERY_LARGE_PERMITTED"), "ERROR"); - $arrayAux1 = explode("sys" . SYS_SYS, $_SERVER["HTTP_REFERER"]); - G::header("location: /sys" . SYS_SYS . $arrayAux1[1]); + $arrayAux1 = explode("sys" . config("system.workspace"), $_SERVER["HTTP_REFERER"]); + G::header("location: /sys" . config("system.workspace") . $arrayAux1[1]); exit(0); } } @@ -1035,8 +1035,8 @@ class InputDocument $message = G::LoadTranslation('THE_UPLOAD_OF_PHP_FILES_WAS_DISABLED'); Bootstrap::registerMonologPhpUploadExecution('phpUpload', 550, $message, 'processmaker.log'); G::SendMessageText($message, "ERROR"); - $backUrlObj = explode("sys" . SYS_SYS, $_SERVER['HTTP_REFERER']); - G::header("location: " . "/sys" . SYS_SYS . $backUrlObj[1]); + $backUrlObj = explode("sys" . config("system.workspace"), $_SERVER['HTTP_REFERER']); + G::header("location: " . "/sys" . config("system.workspace") . $backUrlObj[1]); die(); } @@ -1140,4 +1140,40 @@ class InputDocument throw $e; } } + + /** + * This function get all the supervisor's documents + * When the DEL_INDEX = 100000 + * + * @param string $appUid, uid related to the case + * @param array $docType, can be INPUT, ATTACHED, OUTPUT + * @param array $docStatus, can be ACTIVE, DELETED + * + * @return array $documents + * @throws Exception + */ + public function getSupervisorDocuments($appUid, $docType = ['INPUT'], $docStatus = ['ACTIVE']) + { + try { + $criteria = new Criteria('workflow'); + $criteria->add(AppDocumentPeer::APP_UID, $appUid); + $criteria->add(AppDocumentPeer::APP_DOC_TYPE, $docType, Criteria::IN); + $criteria->add(AppDocumentPeer::APP_DOC_STATUS, $docStatus, Criteria::IN); + $criteria->add(AppDocumentPeer::DEL_INDEX, 100000); + $criteria->addJoin(AppDocumentPeer::APP_UID, ApplicationPeer::APP_UID, Criteria::LEFT_JOIN); + $dataset = AppDocumentPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $dataset->next(); + $documents = []; + while ($row = $dataset->getRow()) { + $documents[] = $row; + $dataset->next(); + } + + return $documents; + } catch (Exception $e) { + throw $e; + } + + } } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php b/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php index e756b4e76..45b7b5713 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Consolidated.php @@ -297,7 +297,7 @@ class Consolidated $className = $tableName; if (!class_exists($className)) { - require_once(PATH_DB . SYS_SYS . PATH_SEP . "classes" . PATH_SEP . $className . ".php"); + require_once(PATH_DB . config("system.workspace") . PATH_SEP . "classes" . PATH_SEP . $className . ".php"); } $oCriteria = new Criteria("workflow"); @@ -1056,7 +1056,7 @@ class Consolidated } } - @unlink(PATH_C . "ws" . PATH_SEP . SYS_SYS . PATH_SEP . "xmlform" . PATH_SEP . $pro_uid . PATH_SEP . $dyn_uid . "." . SYS_LANG); + @unlink(PATH_C . "ws" . PATH_SEP . config("system.workspace") . PATH_SEP . "xmlform" . PATH_SEP . $pro_uid . PATH_SEP . $dyn_uid . "." . SYS_LANG); $array ['columnModel'] = $caseColumns; diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/EmailEvent.php b/workflow/engine/src/ProcessMaker/BusinessModel/EmailEvent.php index 50fa3d84a..83645136d 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/EmailEvent.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/EmailEvent.php @@ -1,6 +1,8 @@ existsEvent($prj_uid, $evn_uid)) { - throw new \Exception(\G::LoadTranslation("ID_EMAIL_EVENT_DEFINITION_DOES_NOT_EXIST")); + throw new \Exception(G::LoadTranslation("ID_EMAIL_EVENT_DEFINITION_DOES_NOT_EXIST")); } $arrayData = $this->existsEvent($prj_uid, $evn_uid); $this->delete($prj_uid, $arrayData[0]); @@ -387,7 +389,7 @@ class EmailEvent public function verifyIfEmailEventExists($emailEventUid) { if (!$this->exists($emailEventUid)) { - throw new \Exception(\G::LoadTranslation("ID_EMAIL_EVENT_DEFINITION_DOES_NOT_EXIST", array("Email Event Uid", $emailEventUid))); + throw new \Exception(G::LoadTranslation("ID_EMAIL_EVENT_DEFINITION_DOES_NOT_EXIST", array("Email Event Uid", $emailEventUid))); } } @@ -430,7 +432,7 @@ class EmailEvent public function sendEmail($appUID, $prj_uid, $eventUid, $arrayApplicationData) { if (!$this->existsEvent($prj_uid, $eventUid)) { - throw new \Exception(\G::LoadTranslation("ID_EMAIL_EVENT_DEFINITION_DOES_NOT_EXIST")); + throw new \Exception(G::LoadTranslation("ID_EMAIL_EVENT_DEFINITION_DOES_NOT_EXIST")); } $arrayData = $this->existsEvent($prj_uid, $eventUid); if (sizeof($arrayData)) { @@ -471,11 +473,11 @@ class EmailEvent } if (!empty($emailTo)) { $subject = $arrayData[5]; - $subject = \G::replaceDataField($arrayData[5], $arrayApplicationData['APP_DATA']); - \PMFSendMessage($appUID, $configEmailData['MESS_ACCOUNT'], $emailTo, '', '', $subject, + $subject = G::replaceDataField($arrayData[5], $arrayApplicationData['APP_DATA']); + PMFSendMessage($appUID, G::buildFrom($configEmailData), $emailTo, '', '', $subject, $contentFile['prf_filename'], array(), array(), true, 0, $configEmailData); } else { - \Bootstrap::registerMonolog('EmailEventMailError', 200, \G::LoadTranslation('ID_EMAIL_EVENT_CONFIGURATION_EMAIL', array($eventUid, $prj_uid)), ['eventUid' => $eventUid, 'prj_uid' => $prj_uid], SYS_SYS, 'processmaker.log'); + \Bootstrap::registerMonolog('EmailEventMailError', 200, G::LoadTranslation('ID_EMAIL_EVENT_CONFIGURATION_EMAIL', array($eventUid, $prj_uid)), ['eventUid' => $eventUid, 'prj_uid' => $prj_uid], config("system.workspace"), 'processmaker.log'); } } } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php b/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php index 309562b79..c4412f906 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/EmailServer.php @@ -63,7 +63,7 @@ class EmailServer $currentUser = $RBAC->aUserInfo['USER_INFO']; $info = array( 'ip' => G::getIpAddress(), - 'workspace' => (defined("SYS_SYS")) ? SYS_SYS : "Workspace undefined", + 'workspace' => (!empty(config("system.workspace"))) ? config("system.workspace") : "Undefined Workspace", 'usrUid' => $currentUser['USR_UID'] ); $this->setContextLog($info); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php b/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php index 1d8ad5880..1da6ec877 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/FilesManager.php @@ -2,6 +2,10 @@ namespace ProcessMaker\BusinessModel; use \G; +use Criteria; +use ProcessFilesPeer; +use ProcessPeer; +use TaskPeer; class FilesManager { @@ -397,26 +401,27 @@ class FilesManager * * @param string $path * @param string $fileName the name of template + * @throws Exception * - * return array + * @return array */ public function getFileManagerUid($path, $fileName = '') { try { if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { - $path = str_replace("/", DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR, $path); + $path = str_replace("/", DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR, $path); } - $path = explode(DIRECTORY_SEPARATOR,$path); - $baseName = $path[count($path)-2]."\\\\".$path[count($path)-1]; - $baseName2 = $path[count($path)-2]."/".$path[count($path)-1]; - $criteria = new \Criteria("workflow"); - $criteria->addSelectColumn(\ProcessFilesPeer::PRF_UID); - $criteria->addSelectColumn(\ProcessPeer::PRO_DERIVATION_SCREEN_TPL); - $criteria->addSelectColumn(\TaskPeer::TAS_DERIVATION_SCREEN_TPL); - $criteria->addJoin(\ProcessFilesPeer::PRO_UID, \ProcessPeer::PRO_UID); - $criteria->addJoin(\ProcessPeer::PRO_UID, \TaskPeer::PRO_UID); - $criteria->add( $criteria->getNewCriterion( \ProcessFilesPeer::PRF_PATH, '%' . $baseName . '%', \Criteria::LIKE )->addOr( $criteria->getNewCriterion( \ProcessFilesPeer::PRF_PATH, '%' . $baseName2 . '%', \Criteria::LIKE ))); - $rsCriteria = \ProcessFilesPeer::doSelectRS($criteria); + $path = explode(DIRECTORY_SEPARATOR, $path); + $baseName = $path[count($path) - 2] . "\\\\" . $path[count($path) - 1]; + $baseName2 = $path[count($path) - 2] . "/" . $path[count($path) - 1]; + $criteria = new Criteria("workflow"); + $criteria->addSelectColumn(ProcessFilesPeer::PRF_UID); + $criteria->addSelectColumn(ProcessPeer::PRO_DERIVATION_SCREEN_TPL); + $criteria->addSelectColumn(TaskPeer::TAS_DERIVATION_SCREEN_TPL); + $criteria->addJoin(ProcessFilesPeer::PRO_UID, ProcessPeer::PRO_UID); + $criteria->addJoin(ProcessPeer::PRO_UID, TaskPeer::PRO_UID, Criteria::LEFT_JOIN); + $criteria->add($criteria->getNewCriterion(ProcessFilesPeer::PRF_PATH, '%' . $baseName . '%', Criteria::LIKE)->addOr($criteria->getNewCriterion(ProcessFilesPeer::PRF_PATH, '%' . $baseName2 . '%', Criteria::LIKE))); + $rsCriteria = ProcessFilesPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(\ResultSet::FETCHMODE_ASSOC); $row = array(); while ($rsCriteria->next()) { @@ -430,7 +435,7 @@ class FilesManager } } return $row; - } catch (\Exception $e) { + } catch (Exception $e) { throw $e; } } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Light.php b/workflow/engine/src/ProcessMaker/BusinessModel/Light.php index 9a0025743..0ae439238 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Light.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Light.php @@ -328,7 +328,7 @@ class Light //Log Bootstrap::registerMonolog('MobileCreateCase', 200, "Create case", - ['application_uid' => $aData['APPLICATION'], 'usr_uid' => $userId], SYS_SYS, 'processmaker.log'); + ['application_uid' => $aData['APPLICATION'], 'usr_uid' => $userId], config("system.workspace"), 'processmaker.log'); } catch (Exception $e) { $response['status'] = 'failure'; $response['message'] = $e->getMessage(); @@ -399,7 +399,7 @@ class Light $_SESSION["PROCESS"] = $prj_uid; $_SESSION["TASK"] = $act_uid; $_SESSION["USER_LOGGED"] = $usr_uid; - $_SESSION["USR_USERNAME"] = $userData['firstName']; + $_SESSION["USR_USERNAME"] = $userData['userName']; $_SESSION["INDEX"] = $Fields["DEL_INDEX"] = $del_index !== null ? $del_index : \AppDelegation::getCurrentIndex($cas_uid); $Fields['APP_DATA'] = array_merge($Fields['APP_DATA'], G::getSystemConstants()); $triggers = $oCase->loadTriggers($act_uid, 'DYNAFORM', $step_uid_obj, strtoupper($type)); @@ -574,7 +574,7 @@ class Light //Log Bootstrap::registerMonolog('MobileRouteCase', 200, 'Route case', - ['application_uid' => $applicationUid, 'usr_uid' => $userUid], SYS_SYS, 'processmaker.log'); + ['application_uid' => $applicationUid, 'usr_uid' => $userUid], config("system.workspace"), 'processmaker.log'); } catch (Exception $e) { throw $e; } @@ -807,7 +807,7 @@ class Light session_start(); session_regenerate_id(); - setcookie("workspaceSkin", SYS_SKIN, time() + (24 * 60 * 60), "/sys" . SYS_SYS, null, false, true); + setcookie("workspaceSkin", SYS_SKIN, time() + (24 * 60 * 60), "/sys" . config("system.workspace"), null, false, true); if (strlen($msg) > 0) { $_SESSION['G_MESSAGE'] = $msg; @@ -1236,7 +1236,7 @@ class Light public function getUsersToReassign($usr_uid, $task_uid) { - $memcache = PMmemcached::getSingleton(SYS_SYS); + $memcache = PMmemcached::getSingleton(config("system.workspace")); $RBAC = RBAC::getSingleton(PATH_DATA, session_id()); $RBAC->sSystem = 'PROCESSMAKER'; $RBAC->initRBAC(); @@ -1323,7 +1323,7 @@ class Light */ public function getConfiguration($params) { - $sysConf = Bootstrap::getSystemConfiguration('', '', SYS_SYS); + $sysConf = Bootstrap::getSystemConfiguration('', '', config("system.workspace")); $multiTimeZone = false; //Set Time Zone /*----------------------------------********---------------------------------*/ diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Light/NotificationDevice.php b/workflow/engine/src/ProcessMaker/BusinessModel/Light/NotificationDevice.php index ec282273e..4d0d8d99f 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Light/NotificationDevice.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Light/NotificationDevice.php @@ -12,7 +12,7 @@ class NotificationDevice public function checkMobileNotifications() { - $conf = System::getSystemConfiguration('', '', SYS_SYS); + $conf = System::getSystemConfiguration('', '', config("system.workspace")); $activeNotifications = true; if (isset($conf['mobileNotifications'])) { $activeNotifications = $conf['mobileNotifications'] == 1 ? true : false; diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/MessageApplication.php b/workflow/engine/src/ProcessMaker/BusinessModel/MessageApplication.php index de2e7614d..05d7b2931 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/MessageApplication.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/MessageApplication.php @@ -371,7 +371,7 @@ class MessageApplication $ws = new \WsBase(); $case = new \Cases(); $common = new \ProcessMaker\Util\Common(); - $sysSys = (defined("SYS_SYS"))? SYS_SYS : "Undefined"; + $sysSys = (!empty(config("system.workspace")))? config("system.workspace") : "Undefined"; $common->setFrontEnd($frontEnd); @@ -683,7 +683,7 @@ class MessageApplication ) { try { - \Bootstrap::registerMonolog('MessageEventCron', $level, $message, $aContext, SYS_SYS, 'processmaker.log'); + \Bootstrap::registerMonolog('MessageEventCron', $level, $message, $aContext, config("system.workspace"), 'processmaker.log'); } catch (\Exception $e) { throw $e; } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/FileHandler.php b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/FileHandler.php index bf4f9f757..de190c44c 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/FileHandler.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/FileHandler.php @@ -45,7 +45,7 @@ class FileHandler { $workflowFile = array(); $workspaceTargetDir = ($target === 'PUBLIC') ? 'public' : 'mailTemplates'; - $workspaceDir = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP; + $workspaceDir = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP; $templatesDir = $workspaceDir . $workspaceTargetDir . PATH_SEP . $prj_uid; $templatesFiles = Util\Common::rglob("$templatesDir/*", 0, true); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/FilesMigrator.php b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/FilesMigrator.php index f8f283a2a..5c348fb34 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/FilesMigrator.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/FilesMigrator.php @@ -44,7 +44,7 @@ class FilesMigrator implements Importable, Exportable } $aPath = $data['PATH']; foreach ($aPath as $target => $files) { - $basePath = PATH_DATA . 'sites' . PATH_SEP . SYS_SYS . PATH_SEP . 'public' . PATH_SEP; + $basePath = PATH_DATA . 'sites' . PATH_SEP . config("system.workspace") . PATH_SEP . 'public' . PATH_SEP; if (strtoupper($target) === 'PUBLIC') { foreach ($files as $file) { $filename = $basePath . ((isset($file["file_path"])) ? $file["file_path"] : $file["filepath"]); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php index c3b670abc..33b8d785d 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/GranularExporter.php @@ -65,7 +65,7 @@ class GranularExporter $projectData = $bpmnProject->getProject(); $this->prjName = $projectData['PRJ_NAME']; $getProjectName = $this->publisher->truncateName($projectData['PRJ_NAME'], false); - $outputDir = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP; + $outputDir = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP; $version = Common::getLastVersionSpecialCharacters($outputDir, $getProjectName, "pmx2") + 1; $outputFilename = $outputDir . sprintf("%s-%s.%s", str_replace(" ", "_", $getProjectName), $version, "pmx2"); @@ -143,7 +143,7 @@ class GranularExporter "export_server_os" => PHP_OS , "export_server_php_version" => PHP_VERSION_ID, ); - $data["metadata"]["workspace"] = defined("SYS_SYS") ? SYS_SYS : "Unknown"; + $data["metadata"]["workspace"] = !empty(config("system.workspace")) ? config("system.workspace") : "Unknown"; $data["metadata"]["name"] = $projectData['PRJ_NAME']; $data["metadata"]["uid"] = $projectData['PRJ_UID']; $data["metadata"]["export_version"] = $version; diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/TemplatesMigrator.php b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/TemplatesMigrator.php index 0231d6bdb..81971a218 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/TemplatesMigrator.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Migrator/TemplatesMigrator.php @@ -44,7 +44,7 @@ class TemplatesMigrator implements Importable, Exportable } $aPath = $data['PATH']; foreach ($aPath as $target => $files) { - $basePath = PATH_DATA . 'sites' . PATH_SEP . SYS_SYS . PATH_SEP . 'mailTemplates' . PATH_SEP; + $basePath = PATH_DATA . 'sites' . PATH_SEP . config("system.workspace") . PATH_SEP . 'mailTemplates' . PATH_SEP; if (strtoupper($target) === 'TEMPLATE') { foreach ($files as $file) { $filename = $basePath . ((isset($file["file_path"])) ? $file["file_path"] : $file["filepath"]); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Process.php b/workflow/engine/src/ProcessMaker/BusinessModel/Process.php index 429661919..8a24d95b7 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Process.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Process.php @@ -4,6 +4,8 @@ namespace ProcessMaker\BusinessModel; use G; use Criteria; use DynaformHandler; +use ProcessPeer; +use ResultSet; class Process { @@ -964,7 +966,7 @@ class Process $process = new \Process(); - $memcache = &\PMmemcached::getSingleton(SYS_SYS); + $memcache = &\PMmemcached::getSingleton(config("system.workspace")); $memkey = "no memcache"; $memcacheUsed = "not used"; @@ -1775,8 +1777,8 @@ class Process $aInvalidTypes = array("title", "subtitle", "file", "button", "reset", "submit", "javascript"); $aMultipleSelectionFields = array("listbox", "checkgroup", "grid"); - if (is_file( PATH_DATA . '/sites/'. SYS_SYS .'/xmlForms/'. $proUid .'/'.$dynUid. '.xml' ) && filesize( PATH_DATA . '/sites/'. SYS_SYS .'/xmlForms/'. $proUid .'/'. $dynUid .'.xml' ) > 0) { - $dyn = new DynaformHandler( PATH_DATA . '/sites/'. SYS_SYS .'/xmlForms/' .$proUid. '/' . $dynUid .'.xml' ); + if (is_file( PATH_DATA . '/sites/'. config("system.workspace") .'/xmlForms/'. $proUid .'/'.$dynUid. '.xml' ) && filesize( PATH_DATA . '/sites/'. config("system.workspace") .'/xmlForms/'. $proUid .'/'. $dynUid .'.xml' ) > 0) { + $dyn = new DynaformHandler( PATH_DATA . '/sites/'. config("system.workspace") .'/xmlForms/' .$proUid. '/' . $dynUid .'.xml' ); $dynaformFields[] = $dyn->getFields(); $fields = $dyn->getFields(); @@ -1837,4 +1839,43 @@ class Process } + /** + * We will get the process list + * will be return the "PRO_ID" value for the processes, otherwise, return the "PRO_UID" value + * + * @param string $search + * @param boolean $useProId, we can define if we use the PRO ID instead of PRO_UID + * + * @return array + */ + public function getProcessList($search = '', $useProId = false) + { + $processes = []; + $processes[] = ["", G::LoadTranslation("ID_ALL_PROCESS")]; + + $process = new Criteria("workflow"); + $process->clearSelectColumns(); + $process->addSelectColumn(ProcessPeer::PRO_ID); + $process->addSelectColumn(ProcessPeer::PRO_UID); + $process->addSelectColumn(ProcessPeer::PRO_TITLE); + $process->add(ProcessPeer::PRO_STATUS, "ACTIVE"); + if (!empty($search)) { + $process->add(ProcessPeer::PRO_TITLE, "%$search%", Criteria::LIKE); + } + $dataset = ProcessPeer::doSelectRS($process); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $dataset->next(); + while ($row = $dataset->getRow()) { + if ($useProId) { + $processes[] = [$row["PRO_ID"], $row["PRO_TITLE"]]; + } else { + $processes[] = [$row['PRO_UID'], $row['PRO_TITLE']]; + } + + $dataset->next(); + } + + return $processes; + } + } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ProcessPermissions.php b/workflow/engine/src/ProcessMaker/BusinessModel/ProcessPermissions.php index d66b6e197..862907bd8 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ProcessPermissions.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ProcessPermissions.php @@ -5,6 +5,7 @@ use Behat\Behat\Exception\Exception; use \G; use \Criteria; use \ObjectPermissionPeer; +use \Exception as StandardException; /** * @author Brayan Pereyra (Cochalo) @@ -224,6 +225,9 @@ class ProcessPermissions if ($opUid != '') { $opUid = $this->validateOpUid($opUid); } + if (empty($data['USR_UID']) || (isset($data['USR_UID']) && $data['USR_UID'] === "null")) { + throw (new StandardException(G::LoadTranslation("ID_SELECT_USER_OR_GROUP"))); + } if ($data['OP_USER_RELATION'] == "1") { $this->validateUsrUid($data['USR_UID']); } else { diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php b/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php index 34d80989c..5546a9fd6 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ProcessSupervisor.php @@ -1,7 +1,14 @@ addSelectColumn(StepSupervisorPeer::STEP_UID); + $criteria->addSelectColumn(StepSupervisorPeer::PRO_UID); + $criteria->addSelectColumn(StepSupervisorPeer::STEP_TYPE_OBJ); + $criteria->addSelectColumn(StepSupervisorPeer::STEP_UID_OBJ); + $criteria->addSelectColumn(StepSupervisorPeer::STEP_POSITION); + $criteria->add(StepSupervisorPeer::PRO_UID, $proUid); + if (!empty($typeObject)) { + $criteria->add(StepSupervisorPeer::STEP_TYPE_OBJ, $typeObject, Criteria::IN); + } + $dataset = StepSupervisorPeer::doSelectRS($criteria); + $dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $dataset->next(); + while ($row = $dataset->getRow()) { + $result[] = $row['STEP_UID_OBJ']; + $dataset->next(); + } + return $result; + } catch (Exception $e) { + throw $e; + } + } } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/ProjectUser.php b/workflow/engine/src/ProcessMaker/BusinessModel/ProjectUser.php index 624882cb9..0c191b9ed 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/ProjectUser.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/ProjectUser.php @@ -227,7 +227,7 @@ class ProjectUser } else { $http = 'http://'; } - $endpoint = $http . $_SERVER['HTTP_HOST'] . '/sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/wsdl2'; + $endpoint = $http . $_SERVER['HTTP_HOST'] . '/sys' . config("system.workspace") . '/' . SYS_LANG . '/' . SYS_SKIN . '/services/wsdl2'; @$client = new \SoapClient( $endpoint ); $user = $sWS_USER; $pass = $sWS_PASS; @@ -325,7 +325,7 @@ class ProjectUser try { $http = (\G::is_https())? "https://" : "http://"; - $client = new \SoapClient($http . $_SERVER["HTTP_HOST"] . "/sys" . SYS_SYS . "/" . SYS_LANG . "/" . SYS_SKIN . "/services/wsdl2"); + $client = new \SoapClient($http . $_SERVER["HTTP_HOST"] . "/sys" . config("system.workspace") . "/" . SYS_LANG . "/" . SYS_SKIN . "/services/wsdl2"); $params = array( "userid" => $username, diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Skins.php b/workflow/engine/src/ProcessMaker/BusinessModel/Skins.php index a49bf9134..6ec0bc8aa 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Skins.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Skins.php @@ -99,7 +99,7 @@ class Skins $xmlConfiguration = file_get_contents($configFileOriginal); - $workspace = ($skinWorkspace == 'global') ? '' : SYS_SYS; + $workspace = ($skinWorkspace == 'global') ? '' : config("system.workspace"); $xmlConfigurationObj = G::xmlParser($xmlConfiguration); $skinInformationArray = $xmlConfigurationObj->result["skinConfiguration"]["__CONTENT__"]["information"]["__CONTENT__"]; diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Table.php b/workflow/engine/src/ProcessMaker/BusinessModel/Table.php index 5b40de2cf..0219b47c7 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Table.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Table.php @@ -592,7 +592,7 @@ class Table } $className = $table['ADD_TAB_CLASS_NAME']; $classPeerName = $className . 'Peer'; - $sPath = PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP; + $sPath = PATH_DB . config("system.workspace") . PATH_SEP . 'classes' . PATH_SEP; if (! file_exists( $sPath . $className . '.php' )) { throw new \Exception( 'Update:: ' . G::loadTranslation( 'ID_PMTABLE_CLASS_DOESNT_EXIST', $className ) ); } @@ -684,7 +684,7 @@ class Table } $className = $table['ADD_TAB_CLASS_NAME']; $classPeerName = $className . 'Peer'; - $sPath = PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP; + $sPath = PATH_DB . config("system.workspace") . PATH_SEP . 'classes' . PATH_SEP; if (! file_exists( $sPath . $className . '.php' )) { throw new \Exception( 'Update:: ' . G::loadTranslation( 'ID_PMTABLE_CLASS_DOESNT_EXIST', $className ) ); } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/TimerEvent.php b/workflow/engine/src/ProcessMaker/BusinessModel/TimerEvent.php index 3c840a7bb..3496b1268 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/TimerEvent.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/TimerEvent.php @@ -1151,7 +1151,7 @@ class TimerEvent private function log($action, $value = "", $status = "action") { try { - $workspace = (defined("SYS_SYS"))? SYS_SYS : "Wokspace Undefined"; + $workspace = (!empty(config("system.workspace")))? config("system.workspace") : "Undefined Workspace"; $ipClient = \G::getIpAddress(); $actionTimer = "timereventcron: "; @@ -1192,7 +1192,7 @@ class TimerEvent ) { try { - \Bootstrap::registerMonolog('TimerEventCron', $level, $message, $aContext, SYS_SYS, 'processmaker.log'); + \Bootstrap::registerMonolog('TimerEventCron', $level, $message, $aContext, config("system.workspace"), 'processmaker.log'); } catch (\Exception $e) { throw $e; } @@ -1214,7 +1214,7 @@ class TimerEvent $ws = new \WsBase(); $case = new \Cases(); $common = new \ProcessMaker\Util\Common(); - $sysSys = (defined("SYS_SYS"))? SYS_SYS : "Undefined"; + $sysSys = (!empty(config("system.workspace")))? config("system.workspace") : "Undefined"; $common->setFrontEnd($frontEnd); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Trigger.php b/workflow/engine/src/ProcessMaker/BusinessModel/Trigger.php index 8222defc9..1f54743fb 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Trigger.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Trigger.php @@ -171,7 +171,7 @@ class Trigger ) { //Check disabled code - $cs = new \CodeScanner(SYS_SYS); + $cs = new \CodeScanner(config("system.workspace")); $arrayFoundDisabledCode = $cs->checkDisabledCode("SOURCE", $dataTrigger["TRI_WEBBOT"]); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/User.php b/workflow/engine/src/ProcessMaker/BusinessModel/User.php index 320963294..90a3ce24c 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/User.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/User.php @@ -22,9 +22,11 @@ use IsoLocationPeer; use IsoSubdivisionPeer; use ListParticipatedLast; use PMmemcached; +use ProcessMaker\BusinessModel\ProcessSupervisor as BmProcessSupervisor; use ProcessMaker\Plugins\PluginRegistry; use ProcessMaker\Util\DateTime; use ProcessMaker\Util\System; +use ProcessUser; use Propel; use RBAC; use RbacUsers; @@ -735,7 +737,7 @@ class User $aUserProperty = $userProperty->loadOrCreateIfNotExists($userUid, array("USR_PASSWORD_HISTORY" => serialize(array(Bootstrap::hashPassword($arrayData["USR_PASSWORD"]))))); $memKey = "rbacSession" . session_id(); - $memcache = &PMmemcached::getSingleton(defined("SYS_SYS") ? SYS_SYS : ""); + $memcache = &PMmemcached::getSingleton(!empty(config("system.workspace")) ? config("system.workspace") : ""); if (($rbac->aUserInfo = $memcache->get($memKey)) == false) { $rbac->loadUserRolePermission("PROCESSMAKER", $userUidLogged); @@ -1713,4 +1715,53 @@ class User return $dataUsers; } + + /** + * This function get the list of process that the user can reassign + * If the user has the permission PM_REASSIGNCASE can reassign any process + * If the user has the permission PM_REASSIGNCASE_SUPERVISOR can reassign only their processes + * + * @param array $listPermissions + * + * @return mixed array|null where: + * Array empty if he can reassign any process + * List of processes that he can reassign + * Will be return null if can not reassign + */ + public function getProcessToReassign($listPermissions = []) + { + global $RBAC; + $processes = []; + if (in_array('PM_REASSIGNCASE', $listPermissions) && $RBAC->userCanAccess('PM_REASSIGNCASE') === 1){ + //The user can reassign any process + return $processes; + } elseif (in_array('PM_REASSIGNCASE_SUPERVISOR', $listPermissions) && $RBAC->userCanAccess('PM_REASSIGNCASE_SUPERVISOR') === 1){ + $userLogged = $RBAC->aUserInfo['USER_INFO']['USR_UID']; + $processUser = new ProcessUser(); + $processes = $processUser->getProUidSupervisor($userLogged); + //The user can reassign only their processes + return $processes; + } else { + return null; + } + } + + /** + * This function review if the user can reassign cases + * + * @param string $usrUid + * @param string $proUid + * + * @return boolean + */ + public function userCanReassign($usrUid, $proUid) + { + if ($this->checkPermission($usrUid, 'PM_REASSIGNCASE')) { + return true; + } elseif ($this->checkPermission($usrUid, 'PM_REASSIGNCASE_SUPERVISOR')) { + $processSupervisor = new BmProcessSupervisor(); + $isSupervisor = $processSupervisor->isUserProcessSupervisor($proUid, $usrUid); + return $isSupervisor; + } + } } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php b/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php index abc80d5ef..ce7ab42a6 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/Variable.php @@ -5,6 +5,7 @@ use G; use Exception; use AdditionalTables; use PmDynaform; +use ProcessMaker\BusinessModel\Cases; class Variable { @@ -773,11 +774,14 @@ class Variable unset($params["limit"]); //Get appData and system variables + $paramsWithoutAppData = $params; + $globalVariables = []; if ($appUid !== null) { $case = new \Cases(); $fields = $case->loadCase($appUid, $delIndex); $appData = $fields["APP_DATA"]; - $appData = array_merge($appData, \ProcessMaker\BusinessModel\Cases::getGlobalVariables($appData)); + $globalVariables = Cases::getGlobalVariables($appData); + $appData = array_merge($appData, $globalVariables); $params = array_merge($appData, $params); } @@ -795,6 +799,14 @@ class Variable $field->queryFilter = $filter; $field->queryStart = $start; $field->queryLimit = $limit; + //Grids only access the global variables of 'ProcessMaker', other variables are removed. + //The property 'columnWidth' is only present in the controls of a grid, + //in the current change there is no specific property that indicates + //if the control is in the grid. + if (isset($field->columnWidth)) { + $pmDynaform->fields["APP_DATA"] = $globalVariables; + $field->queryInputData = $paramsWithoutAppData; + } //Populate control data $pmDynaform->jsonr($field); diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/WebEntry.php b/workflow/engine/src/ProcessMaker/BusinessModel/WebEntry.php index 0b536b63c..2421ddd95 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/WebEntry.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/WebEntry.php @@ -43,7 +43,7 @@ class WebEntry { $this->pathDataPublic = defined("PATH_DATA_PUBLIC") ? PATH_DATA_PUBLIC : \G::$pathDataPublic; $this->httpHost = isset($_SERVER["HTTP_HOST"]) ? $_SERVER["HTTP_HOST"] : \G::$httpHost; - $this->sysSys = defined("SYS_SYS") ? SYS_SYS : \G::$sysSys; + $this->sysSys = !empty(config("system.workspace")) ? config("system.workspace") : \G::$sysSys; $this->sysSkin = defined("SYS_SKIN") ? SYS_SKIN : \G::$sysSkin; try { foreach ($this->arrayFieldDefinition as $key => $value) { @@ -851,7 +851,7 @@ class WebEntry try { if ((!isset($record['WE_LINK_GENERATION']) || $record['WE_LINK_GENERATION']==='DEFAULT') && $record["WE_METHOD"] == "WS") { $http = (\G::is_https())? "https://" : "http://"; - $url = $http . $_SERVER["HTTP_HOST"] . "/sys" . SYS_SYS . "/" . SYS_LANG . "/" . SYS_SKIN . "/" . $record["PRO_UID"]; + $url = $http . $_SERVER["HTTP_HOST"] . "/sys" . config("system.workspace") . "/" . SYS_LANG . "/" . SYS_SKIN . "/" . $record["PRO_UID"]; $record["WE_DATA"] = $url . "/" . $record["WE_DATA"]; } diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEvent.php b/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEvent.php index e14d84124..e34cca01e 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEvent.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/WebEntryEvent.php @@ -1381,13 +1381,13 @@ class WebEntryEvent strpos($domain, 'https://') === 0; $url = ($hasProtocol ? '' : $http) . $domain . - "/sys" . SYS_SYS . "/" . + "/sys" . config("system.workspace") . "/" . $weLinkLanguage . "/" . $weLinkSkin . "/" . $prj_uid; return $url . "/" . $weData; } else { - $url = $http . $_SERVER["HTTP_HOST"] . "/sys" . SYS_SYS . "/" . SYS_LANG . "/" . SYS_SKIN . "/" . $prj_uid; + $url = $http . $_SERVER["HTTP_HOST"] . "/sys" . config("system.workspace") . "/" . SYS_LANG . "/" . SYS_SKIN . "/" . $prj_uid; return $url . "/" . $weData; } diff --git a/workflow/engine/src/ProcessMaker/Core/System.php b/workflow/engine/src/ProcessMaker/Core/System.php index 1cee76cae..6c5dde774 100644 --- a/workflow/engine/src/ProcessMaker/Core/System.php +++ b/workflow/engine/src/ProcessMaker/Core/System.php @@ -1053,14 +1053,24 @@ class System } $res['SKIN_CREATEDATE'] = (isset($res['SKIN_CREATEDATE'])) ? $res['SKIN_CREATEDATE'] : ''; $res['SKIN_MODIFIEDDATE'] = (isset($res['SKIN_MODIFIEDDATE'])) ? $res['SKIN_MODIFIEDDATE'] : ''; - $res['SKIN_WORKSPACE'] = (isset($res['SKIN_WORKSPACE'])) ? (($res['SKIN_WORKSPACE'] != '') ? $res['SKIN_WORKSPACE'] : $global) : $global; + + $res['SKIN_TYPE_GLOBAL'] = false; + if (isset($res['SKIN_WORKSPACE'])) { + if ($res['SKIN_WORKSPACE'] === '') { + $res['SKIN_WORKSPACE'] = $global; + $res['SKIN_TYPE_GLOBAL'] = true; + } + } else { + $res['SKIN_WORKSPACE'] = $global; + $res['SKIN_TYPE_GLOBAL'] = true; + } $swWS = true; if ($res['SKIN_WORKSPACE'] != $global) { $workspace = explode("|", $res['SKIN_WORKSPACE']); $swWS = false; foreach ($workspace as $key => $value) { - if ($value == SYS_SYS) { + if ($value == config("system.workspace")) { $swWS = true; break; } diff --git a/workflow/engine/src/ProcessMaker/Exporter/Exporter.php b/workflow/engine/src/ProcessMaker/Exporter/Exporter.php index 22a5a6a46..a22613946 100644 --- a/workflow/engine/src/ProcessMaker/Exporter/Exporter.php +++ b/workflow/engine/src/ProcessMaker/Exporter/Exporter.php @@ -92,7 +92,7 @@ abstract class Exporter $data = array(); $data["metadata"] = $this->getMetadata(); - $data["metadata"]["workspace"] = defined("SYS_SYS") ? SYS_SYS : "Unknown"; + $data["metadata"]["workspace"] = !empty(config("system.workspace")) ? config("system.workspace") : "Unknown"; $data["metadata"]["name"] = $this->getProjectName(); $data["metadata"]["uid"] = $this->getProjectUid(); diff --git a/workflow/engine/src/ProcessMaker/Importer/Importer.php b/workflow/engine/src/ProcessMaker/Importer/Importer.php index fecb7e164..cf98c2e0e 100644 --- a/workflow/engine/src/ProcessMaker/Importer/Importer.php +++ b/workflow/engine/src/ProcessMaker/Importer/Importer.php @@ -771,7 +771,7 @@ abstract class Importer $exporter = new \ProcessMaker\Exporter\XmlExporter($prj_uid); $getProjectName = $exporter->truncateName($exporter->getProjectName(), false); - $outputDir = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP; + $outputDir = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP; $version = Common::getLastVersionSpecialCharacters($outputDir, $getProjectName, "pmx") + 1; $outputFilename = $outputDir . sprintf("%s-%s.%s", str_replace(" ", "_", $getProjectName), $version, "pmx"); diff --git a/workflow/engine/src/ProcessMaker/Plugins/PluginRegistry.php b/workflow/engine/src/ProcessMaker/Plugins/PluginRegistry.php index dc3cce7f2..1dd08cfd0 100644 --- a/workflow/engine/src/ProcessMaker/Plugins/PluginRegistry.php +++ b/workflow/engine/src/ProcessMaker/Plugins/PluginRegistry.php @@ -45,8 +45,7 @@ class PluginRegistry use PluginStructure; use Attributes; use Init; - - const NAME_CACHE = SYS_SYS . __CLASS__; + /** * Instance of de object PluginRegistry * @var PluginRegistry $instance @@ -75,9 +74,9 @@ class PluginRegistry public static function loadSingleton() { if (self::$instance === null) { - if (is_null($object = Cache::get(self::NAME_CACHE))) { + if (is_null($object = Cache::get(config("system.workspace") . __CLASS__))) { $object = new PluginRegistry(); - Cache::put(self::NAME_CACHE, $object, config('app.cache_lifetime')); + Cache::put(config("system.workspace") . __CLASS__, $object, config('app.cache_lifetime')); } self::$instance = $object; } @@ -204,7 +203,7 @@ class PluginRegistry $fieldPlugin = PluginsRegistry::loadOrCreateIfNotExists(md5($plugin['PLUGIN_NAMESPACE']), $plugin); PluginsRegistry::update($fieldPlugin); } - Cache::pull(self::NAME_CACHE); + Cache::pull(config("system.workspace") . __CLASS__); } /** diff --git a/workflow/engine/src/ProcessMaker/Project/Bpmn.php b/workflow/engine/src/ProcessMaker/Project/Bpmn.php index 7807860cc..977af64cf 100644 --- a/workflow/engine/src/ProcessMaker/Project/Bpmn.php +++ b/workflow/engine/src/ProcessMaker/Project/Bpmn.php @@ -138,7 +138,7 @@ class Bpmn extends Handler //Define the variables for the logging $info = array( 'ip' => G::getIpAddress(), - 'workspace' => (defined("SYS_SYS"))? SYS_SYS : "Workspace undefined" + 'workspace' => (!empty(config("system.workspace")))? config("system.workspace") : "Undefined Workspace" ); $this->setContextLog($info); } diff --git a/workflow/engine/src/ProcessMaker/Project/Workflow.php b/workflow/engine/src/ProcessMaker/Project/Workflow.php index fce9a0965..1ac050db3 100644 --- a/workflow/engine/src/ProcessMaker/Project/Workflow.php +++ b/workflow/engine/src/ProcessMaker/Project/Workflow.php @@ -1123,10 +1123,10 @@ class Workflow extends Handler $basePath = PATH_DYNAFORM; break; case "PUBLIC": - $basePath = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "public" . PATH_SEP; + $basePath = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP . "public" . PATH_SEP; break; case "TEMPLATES": - $basePath = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "mailTemplates" . PATH_SEP; + $basePath = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP . "mailTemplates" . PATH_SEP; break; default: $basePath = ""; @@ -1213,7 +1213,7 @@ class Workflow extends Handler //Get templates and public files $workspaceTargetDirs = array("TEMPLATES" => "mailTemplates", "PUBLIC" => "public"); - $workspaceDir = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP; + $workspaceDir = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP; foreach ($workspaceTargetDirs as $target => $workspaceTargetDir) { $templatesDir = $workspaceDir . $workspaceTargetDir . PATH_SEP . $processUid; diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Cases.php b/workflow/engine/src/ProcessMaker/Services/Api/Cases.php index cb203b6d1..88eee5761 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Cases.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Cases.php @@ -1,11 +1,20 @@ parameters[$arrayArgs['app_index']]; $userUid = $this->getUserId(); //Check if the user has the case - $appDelegation = new \AppDelegation(); + $appDelegation = new AppDelegation(); $aCurUser = $appDelegation->getCurrentUsers($applicationUid, $delIndex); if (!empty($aCurUser)) { foreach ($aCurUser as $key => $value) { @@ -52,32 +61,46 @@ class Cases extends Api } } //Check if the user has Permissions - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); return $oCases->checkUserHasPermissionsOrSupervisor($userUid, $applicationUid, $dynaformUid); break; + case 'doPutCaseVariables': + $applicationUid = $this->parameters[$arrayArgs['app_uid']]; + $dynaformUid = $this->parameters[$arrayArgs['dyn_uid']]; + $delIndex = $this->parameters[$arrayArgs['del_index']]; + $userUid = $this->getUserId(); + + //Check if the user has the case currently + $appDelegation = new AppDelegation(); + $currentUser = $appDelegation->getCurrentUsers($applicationUid, $delIndex); + foreach ($currentUser as $key => $value) { + if ($value === $userUid) { + return true; + } + } + + //Check if the user is a supervisor + //Unlike GET, it is not enough to have the processPermission for update the variables + $cases = new BmCases(); + $isSupervisor = $cases->isSupervisorFromForm($userUid, $applicationUid, $dynaformUid); + return $isSupervisor; + break; case 'doPostReassign': $arrayParameters = $this->parameters[0]['cases']; $usrUid = $this->getUserId(); //Check if the user is supervisor process - $case = new \ProcessMaker\BusinessModel\Cases(); - $user = new \ProcessMaker\BusinessModel\User(); - + $case = new BmCases(); + $user = new BmUser(); $count = 0; - foreach ($arrayParameters as $value) { $arrayApplicationData = $case->getApplicationRecordByPk($value['APP_UID'], [], false); if (!empty($arrayApplicationData)) { - if (!$user->checkPermission($usrUid, 'PM_REASSIGNCASE')) { - if ($user->checkPermission($usrUid, 'PM_REASSIGNCASE_SUPERVISOR')) { - $supervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor(); - $flagps = $supervisor->isUserProcessSupervisor($arrayApplicationData['PRO_UID'], $usrUid); - if (!$flagps) { - $count = $count + 1; - } - - } + $canReassign = $user->userCanReassign($usrUid, $arrayApplicationData['PRO_UID']); + if (!$canReassign) { + //We count when the user is not supervisor to the process + $count = $count + 1; } } } @@ -86,24 +109,33 @@ class Cases extends Api return true; } break; + case 'doPutReassignCase': + $appUid = $this->parameters[$arrayArgs['app_uid']]; + $usrUid = $this->getUserId(); + $case = new BmCases(); + $user = new BmUser(); + $arrayApplicationData = $case->getApplicationRecordByPk($appUid, [], false); + + return $user->userCanReassign($usrUid, $arrayApplicationData['PRO_UID']); + break; case "doGetCaseInfo" : $appUid = $this->parameters[$arrayArgs['app_uid']]; $usrUid = $this->getUserId(); //Check if the user is supervisor process - $case = new \ProcessMaker\BusinessModel\Cases(); - $user = new \ProcessMaker\BusinessModel\User(); + $case = new BmCases(); + $user = new BmUser(); $arrayApplicationData = $case->getApplicationRecordByPk($appUid, [], false); if (!empty($arrayApplicationData)) { - $criteria = new \Criteria("workflow"); - $criteria->addSelectColumn(\AppDelegationPeer::APP_UID); - $criteria->add(\AppDelegationPeer::APP_UID, $appUid); - $criteria->add(\AppDelegationPeer::USR_UID, $usrUid); + $criteria = new Criteria("workflow"); + $criteria->addSelectColumn(AppDelegationPeer::APP_UID); + $criteria->add(AppDelegationPeer::APP_UID, $appUid); + $criteria->add(AppDelegationPeer::USR_UID, $usrUid); $criteria->setLimit(1); - $rsCriteria = \AppDelegationPeer::doSelectRS($criteria); + $rsCriteria = AppDelegationPeer::doSelectRS($criteria); if ($rsCriteria->next()) { return true; } else { - $supervisor = new \ProcessMaker\BusinessModel\ProcessSupervisor(); + $supervisor = new BmProcessSupervisor(); $flagps = $supervisor->isUserProcessSupervisor($arrayApplicationData['PRO_UID'], $usrUid); return $flagps; } @@ -131,7 +163,7 @@ class Cases extends Api } return false; - } catch (\Exception $e) { + } catch (Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } @@ -147,9 +179,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET */ @@ -174,11 +204,11 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -194,9 +224,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /paged */ @@ -221,10 +249,10 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -240,9 +268,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /draft */ @@ -267,10 +293,10 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -286,9 +312,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /draft/paged */ @@ -313,10 +337,10 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -332,9 +356,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /participated */ @@ -359,10 +381,10 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -378,9 +400,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /participated/paged */ @@ -405,10 +425,10 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -424,9 +444,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /unassigned */ @@ -451,10 +469,10 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -470,9 +488,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /unassigned/paged */ @@ -497,10 +513,10 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -516,9 +532,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /paused */ @@ -543,10 +557,10 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -562,9 +576,7 @@ class Cases extends Api * @param string $pro_uid {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /paused/paged */ @@ -589,10 +601,10 @@ class Cases extends Api $dataList['category'] = $cat_uid; $dataList['process'] = $pro_uid; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -612,9 +624,7 @@ class Cases extends Api * @param string $date_to {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /advanced-search */ @@ -647,10 +657,10 @@ class Cases extends Api $dataList['dateFrom'] = $date_from; $dataList['dateTo'] = $date_to; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -670,9 +680,7 @@ class Cases extends Api * @param string $date_to {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /advanced-search/paged */ @@ -705,10 +713,10 @@ class Cases extends Api $dataList['dateFrom'] = $date_from; $dataList['dateTo'] = $date_to; $dataList['search'] = $search; - $oCases = new \ProcessMaker\BusinessModel\Cases(); + $oCases = new BmCases(); $response = $oCases->getList($dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -719,17 +727,19 @@ class Cases extends Api * @url GET /:app_uid * * @param string $app_uid {@min 32}{@max 32} + * @return array + * @throws Exception */ public function doGetCaseInfo($app_uid) { try { - $case = new \ProcessMaker\BusinessModel\Cases(); + $case = new BmCases(); $case->setFormatFieldNameInUppercase(false); $caseInfo = $case->getCaseInfo($app_uid, $this->getUserId()); $caseInfo = DateTime::convertUtcToIso8601($caseInfo, $this->arrayFieldIso8601); return $caseInfo; - } catch (\Exception $e) { + } catch (Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } @@ -742,7 +752,7 @@ class Cases extends Api public function doGetTaskCase($app_uid) { try { - $case = new \ProcessMaker\BusinessModel\Cases(); + $case = new BmCases(); $case->setFormatFieldNameInUppercase(false); $arrayData = $case->getTaskCase($app_uid, $this->getUserId()); @@ -750,7 +760,7 @@ class Cases extends Api $response = $arrayData; return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -776,10 +786,10 @@ class Cases extends Api { try { $userUid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $oData = $cases->addCase($pro_uid, $tas_uid, $userUid, $variables); return $oData; - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -809,10 +819,10 @@ class Cases extends Api public function doPostCaseImpersonate($pro_uid, $usr_uid, $tas_uid, $variables = null) { try { - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $oData = $cases->addCaseImpersonate($pro_uid, $usr_uid, $tas_uid, $variables); return $oData; - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -830,15 +840,15 @@ class Cases extends Api * @throws RestException * * @access protected - * @class AccessControl {@permission PM_REASSIGNCASE,PM_REASSIGNCASE_SUPERVISOR} + * @class AccessControl {@className \ProcessMaker\Services\Api\Cases} */ public function doPutReassignCase($app_uid, $usr_uid_source, $usr_uid_target, $del_index = null) { try { $userUid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $cases->updateReassignCase($app_uid, $userUid, $del_index, $usr_uid_source, $usr_uid_target); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -860,9 +870,9 @@ class Cases extends Api { try { $userUid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $cases->updateRouteCase($app_uid, $userUid, $del_index); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -883,9 +893,9 @@ class Cases extends Api { try { $userUid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $cases->putCancelCase($cas_uid, $userUid); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -907,13 +917,13 @@ class Cases extends Api { try { $userUid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); if ($unpaused_date == null) { $cases->putPauseCase($cas_uid, $userUid); } else { $cases->putPauseCase($cas_uid, $userUid, false, $unpaused_date); } - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -934,9 +944,9 @@ class Cases extends Api { try { $userUid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $cases->putUnpauseCase($cas_uid, $userUid); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -958,9 +968,9 @@ class Cases extends Api { try { $userUid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $cases->putExecuteTriggerCase($cas_uid, $tri_uid, $userUid); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -971,6 +981,8 @@ class Cases extends Api * * @access protected * @class AccessControl {@permission PM_CASES} + * @param string $cas_uid {@min 1}{@max 32} + * @throws Exception * * @param string $cas_uid {@min 1}{@max 32} */ @@ -978,9 +990,9 @@ class Cases extends Api { try { $usr_uid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $cases->deleteCase($cas_uid, $usr_uid); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -1004,10 +1016,10 @@ class Cases extends Api { try { $usr_uid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $response = $cases->getCaseVariables($app_uid, $usr_uid, $dyn_uid, $pro_uid, $act_uid, $app_index); return DateTime::convertUtcToIso8601($response); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -1031,10 +1043,10 @@ class Cases extends Api { try { $usr_uid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $request_data = \ProcessMaker\Util\DateTime::convertDataToUtc($request_data); $cases->setCaseVariables($app_uid, $request_data, $dyn_uid, $usr_uid, $del_index); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -1052,9 +1064,7 @@ class Cases extends Api * @param string $date_to {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /:app_uid/notes */ @@ -1082,10 +1092,10 @@ class Cases extends Api $dataList['search'] = $search; $usr_uid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $response = $cases->getCaseNotes($app_uid, $usr_uid, $dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -1102,9 +1112,7 @@ class Cases extends Api * @param string $date_to {@from path} * @param string $search {@from path} * @return array - * - * @author Brayan Pereyra (Cochalo) - * @copyright Colosa - Bolivia + * @throws Exception * * @url GET /:app_uid/notes/paged */ @@ -1130,28 +1138,28 @@ class Cases extends Api $dataList['search'] = $search; $usr_uid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $response = $cases->getCaseNotes($app_uid, $usr_uid, $dataList); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } /** - * Create a new case note for a given case. Note that only users who are - * currently assigned to work on the case or have Process Permissions to + * Create a new case note for a given case. Note that only users who are + * currently assigned to work on the case or have Process Permissions to * access case notes may create a case note. * * @url POST /:app_uid/note - * + * * @param string $app_uid {@min 1}{@max 32} * @param string $note_content {@min 1}{@max 500} * @param int $send_mail {@choice 1,0} - * + * * @return void - * @throws RestException - * + * @throws RestException + * * @access protected * @class AccessControl {@permission PM_CASES} */ @@ -1159,10 +1167,10 @@ class Cases extends Api { try { $usr_uid = $this->getUserId(); - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $send_mail = ($send_mail == 0) ? false : true; $cases->saveCaseNote($app_uid, $usr_uid, $note_content, $send_mail); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -1175,13 +1183,13 @@ class Cases extends Api public function doGetTasks($app_uid) { try { - $case = new \ProcessMaker\BusinessModel\Cases(); + $case = new BmCases(); $case->setFormatFieldNameInUppercase(false); $response = $case->getTasks($app_uid); return DateTime::convertUtcToIso8601($response, $this->arrayFieldIso8601); - } catch (\Exception $e) { + } catch (Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } @@ -1204,9 +1212,9 @@ class Cases extends Api public function doPutExecuteTriggers($app_uid, $del_index, $obj_type, $obj_uid) { try { - $cases = new \ProcessMaker\BusinessModel\Cases(); + $cases = new BmCases(); $cases->putExecuteTriggers($app_uid, $del_index, $obj_type, $obj_uid); - } catch (\Exception $e) { + } catch (Exception $e) { throw (new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage())); } } @@ -1221,13 +1229,13 @@ class Cases extends Api public function doGetSteps($app_uid, $del_index) { try { - $case = new \ProcessMaker\BusinessModel\Cases(); + $case = new BmCases(); $case->setFormatFieldNameInUppercase(false); $response = $case->getSteps($app_uid, $del_index); return $response; - } catch (\Exception $e) { + } catch (Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } @@ -1239,6 +1247,7 @@ class Cases extends Api * * @param string $type_view {@from path} * @return array + * @throws Exception * */ public function doGetCasesListStarCase( @@ -1246,12 +1255,12 @@ class Cases extends Api ) { try { $usr_uid = $this->getUserId(); - $case = new \ProcessMaker\BusinessModel\Cases(); + $case = new BmCases(); $response = $case->getCasesListStarCase($usr_uid, $type_view); return $response; - } catch (\Exception $e) { + } catch (Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } @@ -1263,6 +1272,7 @@ class Cases extends Api * * @param string $type_view {@from path} * @return array + * @throws Exception * */ public function doGetCasesListBookmarkStarCase( @@ -1270,12 +1280,12 @@ class Cases extends Api ) { try { $usr_uid = $this->getUserId(); - $case = new \ProcessMaker\BusinessModel\Cases(); + $case = new BmCases(); $response = $case->getCasesListBookmarkStarCase($usr_uid, $type_view); return $response; - } catch (\Exception $e) { + } catch (Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } @@ -1283,14 +1293,14 @@ class Cases extends Api /** * Mark a task process as a bookmark - * + * * @url POST /bookmark/:tas_uid - * + * * @param string $tas_uid {@min 32}{@max 32} - * + * * @return void - * @throws RestException - * + * @throws RestException + * * @access protected * @class AccessControl {@permission PM_CASES} */ @@ -1298,9 +1308,9 @@ class Cases extends Api { try { $userLoggedUid = $this->getUserId(); - $user = new \ProcessMaker\BusinessModel\User(); + $user = new BmUser(); $user->updateBookmark($userLoggedUid, $tas_uid, 'INSERT'); - } catch (\Exception $e) { + } catch (Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } @@ -1310,15 +1320,16 @@ class Cases extends Api * @url DELETE /bookmark/:tas_uid * * @param string $tas_uid {@min 32}{@max 32} + * @throws Exception * */ public function doDeleteBookmarkStartCase($tas_uid) { try { $userLoggedUid = $this->getUserId(); - $user = new \ProcessMaker\BusinessModel\User(); + $user = new BmUser(); $user->updateBookmark($userLoggedUid, $tas_uid, 'DELETE'); - } catch (\Exception $e) { + } catch (Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } @@ -1331,15 +1342,16 @@ class Cases extends Api * @class AccessControl {@className \ProcessMaker\Services\Api\Cases} * * @param array $request_data + * @throws Exception * */ public function doPostReassign($request_data) { try { - $case = new \ProcessMaker\BusinessModel\Cases(); + $case = new BmCases(); $response = $case->doPostReassign($request_data); return $response; - } catch (\Exception $e) { + } catch (Exception $e) { throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Light.php b/workflow/engine/src/ProcessMaker/Services/Api/Light.php index 05c7edb3f..f1ead8885 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Light.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Light.php @@ -1832,11 +1832,9 @@ class Light extends Api try { //Check if the user is a supervisor or have permissions $usr_uid = $this->getUserId(); - $cases = new BusinessModelCases(); - $hasAccess = $cases->checkUserHasPermissionsOrSupervisor($usr_uid, $app_uid, $dyn_uid); //When the user is a supervisor del_index is 0 - if ($del_index <= 0 && !$hasAccess) { + if ($del_index < 0) { throw (new Exception(G::LoadTranslation('ID_INVALID_VALUE_EXPECTING_POSITIVE_INTEGER', array('del_index')), Api::STAT_APP_EXCEPTION)); } @@ -1844,6 +1842,7 @@ class Light extends Api throw (new Exception(G::LoadTranslation('ID_CAN_NOT_BE_NULL', array('del_index')), Api::STAT_APP_EXCEPTION)); } + $cases = new BusinessModelCases(); if ($del_index > 0) { if ($cases->caseAlreadyRouted($app_uid, $del_index, $usr_uid)) { throw (new Exception(G::LoadTranslation('ID_CASE_ALREADY_DERIVATED'), Api::STAT_APP_EXCEPTION)); diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project.php b/workflow/engine/src/ProcessMaker/Services/Api/Project.php index 10e54bf4c..85c99abe4 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project.php @@ -178,7 +178,7 @@ class Project extends Api $objects = \G::json_decode($objects); $granularExporter = new GranularExporter($prj_uid); $outputFilename = $granularExporter->export($objects); - $outputFilename = PATH_DATA . 'sites' . PATH_SEP . SYS_SYS . PATH_SEP . 'files' . PATH_SEP . 'output' . + $outputFilename = PATH_DATA . 'sites' . PATH_SEP . config("system.workspace") . PATH_SEP . 'files' . PATH_SEP . 'output' . PATH_SEP . $outputFilename; $httpStream = new HttpStream(); $fileExtension = pathinfo($outputFilename, PATHINFO_EXTENSION); @@ -199,7 +199,7 @@ class Project extends Api $exporter = new \ProcessMaker\Exporter\XmlExporter($prj_uid); $getProjectName = $exporter->truncateName($exporter->getProjectName(), false); - $outputDir = PATH_DATA . "sites" . PATH_SEP . SYS_SYS . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP; + $outputDir = PATH_DATA . "sites" . PATH_SEP . config("system.workspace") . PATH_SEP . "files" . PATH_SEP . "output" . PATH_SEP; $version = Common::getLastVersionSpecialCharacters($outputDir, $getProjectName, "pmx") + 1; $outputFilename = $outputDir . sprintf("%s-%s.%s", str_replace(" ", "_", $getProjectName), $version, "pmx"); diff --git a/workflow/engine/src/ProcessMaker/Services/Api/Project/ProcessPermissions.php b/workflow/engine/src/ProcessMaker/Services/Api/Project/ProcessPermissions.php index 79c276f85..0bd76d30b 100644 --- a/workflow/engine/src/ProcessMaker/Services/Api/Project/ProcessPermissions.php +++ b/workflow/engine/src/ProcessMaker/Services/Api/Project/ProcessPermissions.php @@ -59,45 +59,21 @@ class ProcessPermissions extends Api /** * Creates a new Process Permission for a project. - * + * * @url POST /:prj_uid/process-permission/ * @status 201 - * + * * @param string $prj_uid {@min 1} {@max 32} * @param array $request_data - * @param string $usr_uid {@from body} {@min 1} {@max 32} - * @param string $op_user_relation {@from body} {@choice 1,2} - * @param string $op_case_status {@from body} {@choice ALL,DRAFT,TO_DO,PAUSED,COMPLETED} - * @param string $op_participate {@from body} {@choice 0,1} - * @param string $op_obj_type {@from body} {@choice ANY,DYNAFORM,ATTACHMENT,INPUT,OUTPUT,CASES_NOTES,MSGS_HISTORY,SUMMARY_FORM} - * @param string $op_action {@from body} {@choice VIEW,BLOCK,DELETE,RESEND} - * @param string $tas_uid {@from body} - * @param string $op_task_source {@from body} - * @param string $dynaforms {@from body} - * @param string $inputs {@from body} - * @param string $outputs {@from body} - * + * * @return array * @throws RestException - * + * * @access protected * @class AccessControl {@permission PM_FACTORY} */ - public function doPostProcessPermission( - $prj_uid, - $request_data, - $usr_uid, - $op_user_relation, - $op_case_status, - $op_participate, - $op_obj_type, - $op_action, - $tas_uid = '', - $op_task_source = '', - $dynaforms = '', - $inputs = '', - $outputs = '' - ) { + public function doPostProcessPermission($prj_uid, $request_data) + { try { $hiddenFields = array('task_target', 'group_user', 'task_source', 'object_type', 'object', 'participated', 'action' diff --git a/workflow/engine/src/ProcessMaker/Services/OAuth2/Server.php b/workflow/engine/src/ProcessMaker/Services/OAuth2/Server.php index efc47648a..9269c4dc2 100644 --- a/workflow/engine/src/ProcessMaker/Services/OAuth2/Server.php +++ b/workflow/engine/src/ProcessMaker/Services/OAuth2/Server.php @@ -144,8 +144,8 @@ class Server implements iAuthenticate $host = $_SERVER['SERVER_NAME'] . ($_SERVER['SERVER_PORT'] != '80' ? ':' . $_SERVER['SERVER_PORT'] : ''); $host = $http .'://'. $host; - $applicationsLink = sprintf('%s/%s/oauth2/apps', $host, SYS_SYS); - $authorizationLink = sprintf('%s/%s/oauth2/authorize?response_type=code&client_id=[the-client-id]&scope=*', $host, SYS_SYS); + $applicationsLink = sprintf('%s/%s/oauth2/apps', $host, config("system.workspace")); + $authorizationLink = sprintf('%s/%s/oauth2/authorize?response_type=code&client_id=[the-client-id]&scope=*', $host, config("system.workspace")); $view = new \Maveriks\Pattern\Mvc\SmartyView(PATH_CORE . "templates/oauth2/index.html"); $view->assign('host', $host); @@ -180,7 +180,7 @@ class Server implements iAuthenticate $host = $http . '://' . $_SERVER['SERVER_NAME'] . ($_SERVER['SERVER_PORT'] != '80' ? ':' . $_SERVER['SERVER_PORT'] : ''); $redirect = urlencode($host.'/'.self::$workspace.$_SERVER['REQUEST_URI']); - $loginLink = sprintf('%s/sys%s/%s/%s/login/login?u=%s', $host, SYS_SYS, SYS_LANG, SYS_SKIN, $redirect); + $loginLink = sprintf('%s/sys%s/%s/%s/login/login?u=%s', $host, config("system.workspace"), SYS_LANG, SYS_SKIN, $redirect); header('location: ' . $loginLink); die; } @@ -214,7 +214,7 @@ class Server implements iAuthenticate $view = new \Maveriks\Pattern\Mvc\SmartyView(PATH_CORE . "templates/oauth2/authorize.html"); $view->assign('user', $user); $view->assign('client', $client); - $view->assign('postUri', '/' . SYS_SYS . '/oauth2/authorize?' . $_SERVER['QUERY_STRING']); + $view->assign('postUri', '/' . config("system.workspace") . '/oauth2/authorize?' . $_SERVER['QUERY_STRING']); $view->render(); exit(); } @@ -364,7 +364,7 @@ class Server implements iAuthenticate $userTimeZone = $user->getUsrTimeZone(); if (trim($userTimeZone) == '') { - $arraySystemConfiguration = System::getSystemConfiguration('', '', SYS_SYS); + $arraySystemConfiguration = System::getSystemConfiguration('', '', config("system.workspace")); $userTimeZone = $arraySystemConfiguration['time_zone']; } diff --git a/workflow/engine/src/ProcessMaker/Util/FixReferencePath.php b/workflow/engine/src/ProcessMaker/Util/FixReferencePath.php index 94a2f8d3a..ce4614e5d 100644 --- a/workflow/engine/src/ProcessMaker/Util/FixReferencePath.php +++ b/workflow/engine/src/ProcessMaker/Util/FixReferencePath.php @@ -200,7 +200,7 @@ class FixReferencePath */ public function regeneratePropelClasses($repTabName, $className, $fields, $guid) { - $sourcePath = PATH_DB . SYS_SYS . PATH_SEP . 'classes' . PATH_SEP; + $sourcePath = PATH_DB . config("system.workspace") . PATH_SEP . 'classes' . PATH_SEP; @unlink($sourcePath . $className . '.php'); @unlink($sourcePath . $className . 'Peer.php'); diff --git a/workflow/engine/src/ProcessMaker/Util/System.php b/workflow/engine/src/ProcessMaker/Util/System.php index 2ce9e4dcc..dad2188b3 100644 --- a/workflow/engine/src/ProcessMaker/Util/System.php +++ b/workflow/engine/src/ProcessMaker/Util/System.php @@ -27,7 +27,7 @@ class System public static function getTimeZone() { try { - $arraySystemConfiguration = PmSystem::getSystemConfiguration('', '', SYS_SYS); + $arraySystemConfiguration = PmSystem::getSystemConfiguration('', '', config("system.workspace")); //Return return $arraySystemConfiguration['time_zone']; diff --git a/workflow/engine/src/ProcessMaker/Util/helpers.php b/workflow/engine/src/ProcessMaker/Util/helpers.php index cccfbb9ad..29f0d5b81 100644 --- a/workflow/engine/src/ProcessMaker/Util/helpers.php +++ b/workflow/engine/src/ProcessMaker/Util/helpers.php @@ -255,8 +255,8 @@ function getVarsGrid($proUid, $dynUid) $dynaformFields = array(); - if (is_file(PATH_DATA . '/sites/' . SYS_SYS . '/xmlForms/' . $proUid . '/' . $dynUid . '.xml') && filesize(PATH_DATA . '/sites/' . SYS_SYS . '/xmlForms/' . $proUid . '/' . $dynUid . '.xml') > 0) { - $dyn = new dynaFormHandler(PATH_DATA . '/sites/' . SYS_SYS . '/xmlForms/' . $proUid . '/' . $dynUid . '.xml'); + if (is_file(PATH_DATA . '/sites/' . config("system.workspace") . '/xmlForms/' . $proUid . '/' . $dynUid . '.xml') && filesize(PATH_DATA . '/sites/' . config("system.workspace") . '/xmlForms/' . $proUid . '/' . $dynUid . '.xml') > 0) { + $dyn = new dynaFormHandler(PATH_DATA . '/sites/' . config("system.workspace") . '/xmlForms/' . $proUid . '/' . $dynUid . '.xml'); $dynaformFields[] = $dyn->getFields(); } diff --git a/workflow/engine/templates/admin/pmLogo.js b/workflow/engine/templates/admin/pmLogo.js index fe349cec2..acc07a616 100644 --- a/workflow/engine/templates/admin/pmLogo.js +++ b/workflow/engine/templates/admin/pmLogo.js @@ -1,330 +1,348 @@ -Ext.onReady(function() { - var store = new Ext.data.JsonStore({ - proxy : new Ext.data.HttpProxy({ - url : '../adminProxy/getListImage', method: 'POST' - }), - root : 'images', - fields : [ - 'name', 'url', - {name : 'size', type : 'float'}, - {name : 'lastmod', type : 'date', dateFormat: 'timestamp'}, - 'thumb_url' - ] - }); - store.load(); +Ext.onReady(function () { + var store = new Ext.data.JsonStore({ + proxy: new Ext.data.HttpProxy({ + url: '../adminProxy/getListImage', method: 'POST' + }), + root: 'images', + fields: [ + 'name', 'url', + {name: 'size', type: 'float'}, + {name: 'lastmod', type: 'date', dateFormat: 'timestamp'}, + 'thumb_url' + ] + }); + store.load(); - var tpl = new Ext.XTemplate( - '
    ', + var tpl = new Ext.XTemplate( + '
      ', '', - '
    • ', - '
      ', - '', - '
      ', - '
    • ', - '{shortName}', + '
    • ', + '
      ', + '', + '
      ', + '
    • ', + '{shortName}', '
      ', '
      ', - '
    ' - ); - var tplDetail = new Ext.XTemplate( - '
    ', - '', - '
    ', - 'Image Name:', - '{name}', - 'view original
    ', - '
    ', - '
    ' - ); - var tbar = new Ext.Toolbar(); - tbar.add({ - text : _('ID_APPLY'), - icon : '/images/ext/default/accept.png', - id : 'tbarAply', - disabled: true, - handler : function() { - var records = datav.getSelectedRecords(); - if (records.length != 0) { - if(records.length == 1) { + '
' + ); + var tplDetail = new Ext.XTemplate( + '
', + '', + '
', + 'Image Name:', + '{name}', + 'view original
', + '
', + '
' + ); + var tbar = new Ext.Toolbar(); + tbar.add({ + text: _('ID_APPLY'), + icon: '/images/ext/default/accept.png', + id: 'tbarAply', + disabled: true, + handler: function () { + var records = datav.getSelectedRecords(); + if (records.length != 0) { + if (records.length == 1) { - var myMask = new Ext.LoadMask(Ext.getBody(), {msg:_('ID_LOADING')}); - myMask.show(); + var myMask = new Ext.LoadMask(Ext.getBody(), {msg: _('ID_LOADING')}); + myMask.show(); - var imageName = records[0].data.name; - Ext.Ajax.request({ - url : '../adminProxy/replacementLogo', - method : 'post', - params : {nameFunction: 'replacementLogo', NAMELOGO:imageName}, - success : function() { - if (typeof parent.parent.Ext != 'undefined') { - parent.parent.location.href = '../main?st=admin'; - } - else { - window.parent.window.parent.location.href = window.parent.window.parent.window.location.href - } - } - }); - } - else { - PMExt.notify( _('ID_NOTICE'), _('ID_YOU_ARE_NOT_CAN_SELECT_PHOTO')); - } - } - else { - PMExt.notify( _('ID_NOTICE'), _('ID_SELECT_AN_IMAGE')); - } - } - }); - - tbar.add({ - text : _('ID_DELETE'), - icon : '/images/delete-16x16.gif', - id : 'tbarDelete', - disabled: true, - handler : function() { - var records = datav.getSelectedRecords(); - var isCurrentLogo = false; - if (records.length != 0) { - if (records.length == 1) { - var imgName = ''; - for (var i = 0; i < records.length; i++) { - imgName = imgName + records[i].data.name + ';'; - } - Ext.Ajax.request({ - url : '../adminProxy/isCurrentLogo', - method : 'post', - params : { selectLogo : imgName }, - success : function(response) { - store.load(); - oResponse = Ext.decode( response.responseText ); - if (oResponse.success == true) { - Ext.Msg.alert(_('ID_LOGO'), _('ID_SELECTED_IMAGE_IS_LOGO')); - isCurrentLogo = true; - } + var imageName = records[0].data.name; + Ext.Ajax.request({ + url: '../adminProxy/replacementLogo', + method: 'post', + params: {nameFunction: 'replacementLogo', NAMELOGO: imageName}, + success: function () { + if (typeof parent.parent.Ext != 'undefined') { + parent.parent.location.href = '../main?st=admin'; + } + else { + window.parent.window.parent.location.href = window.parent.window.parent.window.location.href + } + } + }); + } + else { + PMExt.notify(_('ID_NOTICE'), _('ID_YOU_ARE_NOT_CAN_SELECT_PHOTO')); + } } - }); - if(isCurrentLogo == false) { - Ext.Msg.show({ - title : _('ID_LOGO'), - msg : _('ID_DELETE_SELECTED_LOGO'), - buttons: Ext.Msg.YESNO, - fn : function(btn) { - if(btn == 'yes') { - Ext.Ajax.request({ - url : '../adminProxy/deleteImage', - method : 'post', - params : {images : imgName}, - success : function(response) { - store.load(); - oResponse = Ext.decode( response.responseText ); - if (oResponse.success == true) { - PMExt.notify( _('ID_NOTICE'), _('ID_SELECTED_IMAGE_DELETED')); - } - else { - PMExt.notify( _('ID_NOTICE'), _('ID_SELECTED_IMAGE_IS_LOGO')); - } - } - }); + else { + PMExt.notify(_('ID_NOTICE'), _('ID_SELECT_AN_IMAGE')); + } + } + }); - } - }, - animEl : 'elId', - icon : Ext.MessageBox.QUESTION + tbar.add({ + text: _('ID_DELETE'), + icon: '/images/delete-16x16.gif', + id: 'tbarDelete', + disabled: true, + handler: function () { + var records = datav.getSelectedRecords(); + var isCurrentLogo = false; + if (records.length != 0) { + if (records.length == 1) { + var imgName = ''; + for (var i = 0; i < records.length; i++) { + imgName = imgName + records[i].data.name + ';'; + } + Ext.Ajax.request({ + url: '../adminProxy/isCurrentLogo', + method: 'post', + params: {selectLogo: imgName}, + success: function (response) { + store.load(); + oResponse = Ext.decode(response.responseText); + if (oResponse.success == true) { + Ext.Msg.alert(_('ID_LOGO'), _('ID_SELECTED_IMAGE_IS_LOGO')); + isCurrentLogo = true; + } + } + }); + if (isCurrentLogo == false) { + Ext.Msg.show({ + title: _('ID_LOGO'), + msg: _('ID_DELETE_SELECTED_LOGO'), + buttons: Ext.Msg.YESNO, + fn: function (btn) { + if (btn == 'yes') { + Ext.Ajax.request({ + url: '../adminProxy/deleteImage', + method: 'post', + params: {images: imgName}, + success: function (response) { + store.load(); + oResponse = Ext.decode(response.responseText); + if (oResponse.success == true) { + PMExt.notify(_('ID_NOTICE'), _('ID_SELECTED_IMAGE_DELETED')); + } + else { + PMExt.notify(_('ID_NOTICE'), _('ID_SELECTED_IMAGE_IS_LOGO')); + } + } + }); + + } + }, + animEl: 'elId', + icon: Ext.MessageBox.QUESTION + }); + } + } + else { + PMExt.notify(_('ID_NOTICE'), _('ID_YOU_ARE_NOT_CAN_SELECT_PHOTO')); + } + } + else { + PMExt.notify(_('ID_NOTICE'), _('ID_SELECT_AN_IMAGE')); + } + } + }); + + tbar.add({ + text: _('ID_RESTORE_DEFAULT'), + icon: '/images/icon-pmlogo-15x15.png', + handler: function () { + var records = datav.getSelectedRecords(); + var myMask = new Ext.LoadMask(Ext.getBody(), {msg: _('ID_LOADING')}); + myMask.show(); + var imageName = 'name'; + Ext.Ajax.request({ + url: '../adminProxy/replacementLogo', + method: 'post', + params: {nameFunction: 'restoreLogo', NAMELOGO: imageName}, + success: function () { + if (typeof parent.parent.Ext != 'undefined') { + parent.parent.location.href = '../main?st=admin'; + } + else { + window.parent.window.parent.location.href = window.parent.window.parent.window.location.href + } + } }); - } } - else { - PMExt.notify( _('ID_NOTICE'), _('ID_YOU_ARE_NOT_CAN_SELECT_PHOTO')); + }); + + tbar.add('-', { + text: _('ID_UPLOAD'), + iconCls: 'silk-add', + icon: '/images/import.gif', + handler: function () { + uploadWin.show(); } - } - else { - PMExt.notify( _('ID_NOTICE'), _('ID_SELECT_AN_IMAGE')); - } - } - }); + }) - tbar.add({ - text : _('ID_RESTORE_DEFAULT'), - icon : '/images/icon-pmlogo-15x15.png', - handler : function() { - var records = datav.getSelectedRecords(); - var myMask = new Ext.LoadMask(Ext.getBody(), {msg : _('ID_LOADING')}); - myMask.show(); - var imageName = 'name'; - Ext.Ajax.request({ - url : '../adminProxy/replacementLogo', - method : 'post', - params : {nameFunction: 'restoreLogo', NAMELOGO:imageName}, - success : function() { - if (typeof parent.parent.Ext != 'undefined') { - parent.parent.location.href = '../main?st=admin'; - } - else { - window.parent.window.parent.location.href = window.parent.window.parent.window.location.href - } - } - }); - } - }); + var datav = new Ext.DataView({ + autoScroll: true, + store: store, + tpl: tpl, + autoHeight: false, + height: 800, + multiSelect: true, + autoScroll: true, + overClass: 'x-view-over', + itemSelector: 'div.thumb-wrap', + emptyText: _('ID_NO_IMAGES_TO_DISPLAY'), - tbar.add('-', { - text : _('ID_UPLOAD'), - iconCls : 'silk-add', - icon : '/images/import.gif', - handler : function(){ - uploadWin.show(); - } - }) + listeners: { + selectionchange: { + fn: function (dv, nodes) { + var l = nodes.length; + var s = l != 1 ? 's' : ''; + panelLeft.setTitle(_('PHOTO_GALLERY') + '(' + l + ' ' + _('ID_IMAGE') + s + ' ' + _('ID_SELECTED') + ')'); + if (nodes.length > 0) { + Ext.getCmp('tbarAply').enable(); + Ext.getCmp('tbarDelete').enable(); + } + else { + Ext.getCmp('tbarAply').disable(); + Ext.getCmp('tbarDelete').disable(); + } - var datav = new Ext.DataView({ - autoScroll : true, - store : store, - tpl : tpl, - autoHeight : false, - height : 800, - multiSelect : true, - autoScroll: true, - overClass : 'x-view-over', - itemSelector: 'div.thumb-wrap', - emptyText : _('ID_NO_IMAGES_TO_DISPLAY'), - - listeners : { - selectionchange : { - fn : function(dv,nodes){ - var l = nodes.length; - var s = l != 1 ? 's' : ''; - panelLeft.setTitle(_('PHOTO_GALLERY') + '(' + l + ' ' + _('ID_IMAGE') + s + ' ' + _('ID_SELECTED') + ')'); - if (nodes.length > 0) { - Ext.getCmp('tbarAply').enable(); - Ext.getCmp('tbarDelete').enable(); - } - else { - Ext.getCmp('tbarAply').disable(); - Ext.getCmp('tbarDelete').disable(); - } - - } - } + } + } // , // click : { // fn : function() { // } // } - } - }) - - var panelLeft = new Ext.Panel({ - region : 'center', - id : 'images-view', - frame : true, - width : 520, - autoHeight : true, - layout : 'auto', - title : _('PHOTO_GALLERY') + '(0 ' + _('ID_IMAGES_SELECTED') + ')', - items : [tbar, datav] - }); - - - var panelRightTop = new Ext.FormPanel({ - title : _('ID_UPLOAD_IMAGE'), - width : 270, - labelAlign : 'right', - fileUpload : true, - frame : true, - defaults : { - anchor : '90%', - allowBlank : false, - msgTarget : 'side' - }, - items: - [ - { - xtype : 'fileuploadfield', - emptyText : '', - fieldLabel : _('ID_IMAGE'), - buttonText : _('ID_SELECT_FILE'), - name : 'img' - } - ], - buttons : - [ - { - text : _('ID_UPLOAD'), - handler : function() { - panelRightTop.getForm().submit({ - url : '../adminProxy/uploadImage', - waitMsg : _('ID_LOADING'), - waitTitle : " ", - success : function(form, o) { - obj = Ext.util.JSON.decode(o.response.responseText); - if ((obj.failed == '' || obj.failed == '0') && obj.uploaded != '0') { - PMExt.notify(_('ID_SUCCESS'), _('ID_YOUR_IMAGE_HAS_BEEN_SUCCESSFULLY')); - } - else { - var messageError = ""; - if (obj.failed == "1") { - //| 1-> Fail in the type of the image - messageError = _('ID_ERROR_UPLOADING_IMAGE_TYPE'); - } - else if(obj.failed == "2") { - //| 2-> Fail in the size of the image - messageError = _('ID_UPLOADING_IMAGE_WRONG_SIZE'); - } - else if(obj.failed == "3") { - //| 3-> fail in de mime of the image - messageError = _('ID_ERROR_UPLOADING_IMAGE_TYPE'); - } - - PMExt.notify(_('ID_SUCCESS'), messageError); - } - panelRightTop.getForm().reset(); - store.load(); - uploadWin.hide(); - } - }); } - }, - { - text : _('ID_CANCEL'), - handler : function() { - uploadWin.hide(); - } - } - ] - }); + }) - uploadWin = new Ext.Window({ - title : '', - id : 'uploadWin', - layout : 'fit', - width : 420, - height : 140, - modal : false, - autoScroll : true, - closeAction : 'hide', - maximizable : false, - resizable : false, - draggable : false, - items : [panelRightTop] - }); + var panelLeft = new Ext.Panel({ + region: 'center', + id: 'images-view', + frame: true, + width: 520, + autoHeight: true, + layout: 'auto', + title: _('PHOTO_GALLERY') + '(0 ' + _('ID_IMAGES_SELECTED') + ')', + items: [tbar, datav] + }); - var panelRightBottom = new Ext.Panel({ - region : 'east', - title : _('IMAGE_DETAIL'), - frame : true, - width : 200, - height : 255, - split : true, - collapsible : true, - collapseMode : 'mini', - margins : '0 0 0 0', - id : 'panelDetail', - tpl : tplDetail - }); - var viewport = new Ext.Viewport({ - layout : 'border', - autoScroll : false, - items : [ panelLeft ] - }); + var panelRightTop = new Ext.FormPanel({ + title: _('ID_UPLOAD_IMAGE'), + width: 270, + labelAlign: 'right', + fileUpload: true, + frame: true, + defaults: { + anchor: '90%', + allowBlank: false, + msgTarget: 'side' + }, + items: + [ + { + xtype: 'fileuploadfield', + emptyText: '', + fieldLabel: _('ID_IMAGE'), + buttonText: _('ID_SELECT_FILE'), + name: 'img', + validator: function (filePath) { + var flag, btn; + btn = Ext.getCmp('btnUpload'); + btn.disable(); + + filePath = filePath.replace(/^\s|\s$/g, ""); //trims string + if (filePath.match(/([^\/\\]+)\.(gif|png|jpg|jpeg|pjpeg|x-png)$/i)) { + flag = true; + btn.enable(); + } else { + messageError = _('ID_ERROR_UPLOADING_IMAGE_TYPE'); + PMExt.notify(_('ID_ERROR'), messageError); + flag = false; + } + return flag; + } + } + ], + buttons: + [ + { + text: _('ID_UPLOAD'), + id: 'btnUpload', + disabled: true, + handler: function () { + panelRightTop.getForm().submit({ + url: '../adminProxy/uploadImage', + waitMsg: _('ID_LOADING'), + waitTitle: " ", + success: function (form, o) { + obj = Ext.util.JSON.decode(o.response.responseText); + if ((obj.failed == '' || obj.failed == '0') && obj.uploaded != '0') { + PMExt.notify(_('ID_SUCCESS'), _('ID_YOUR_IMAGE_HAS_BEEN_SUCCESSFULLY')); + } + else { + var messageError = ""; + if (obj.failed == "1") { + //| 1-> Fail in the type of the image + messageError = _('ID_ERROR_UPLOADING_IMAGE_TYPE'); + } + else if (obj.failed == "2") { + //| 2-> Fail in the size of the image + messageError = _('ID_UPLOADING_IMAGE_WRONG_SIZE'); + } + else if (obj.failed == "3") { + //| 3-> fail in de mime of the image + messageError = _('ID_ERROR_UPLOADING_IMAGE_TYPE'); + } + + PMExt.notify(_('ID_SUCCESS'), messageError); + } + panelRightTop.getForm().reset(); + store.load(); + uploadWin.hide(); + } + }); + } + }, + { + text: _('ID_CANCEL'), + handler: function () { + uploadWin.hide(); + } + } + ] + }); + + uploadWin = new Ext.Window({ + title: '', + id: 'uploadWin', + layout: 'fit', + width: 420, + height: 140, + modal: false, + autoScroll: true, + closeAction: 'hide', + maximizable: false, + resizable: false, + draggable: false, + items: [panelRightTop] + }); + + var panelRightBottom = new Ext.Panel({ + region: 'east', + title: _('IMAGE_DETAIL'), + frame: true, + width: 200, + height: 255, + split: true, + collapsible: true, + collapseMode: 'mini', + margins: '0 0 0 0', + id: 'panelDetail', + tpl: tplDetail + }); + + var viewport = new Ext.Viewport({ + layout: 'border', + autoScroll: false, + items: [panelLeft] + }); }); diff --git a/workflow/engine/templates/cases/casesList.js b/workflow/engine/templates/cases/casesList.js index 196e1f615..22e822bdd 100644 --- a/workflow/engine/templates/cases/casesList.js +++ b/workflow/engine/templates/cases/casesList.js @@ -490,13 +490,14 @@ function redirect(href){ Ext.onReady ( function() { setExtStateManagerSetProvider('casesGrid', action); - var ids = ''; - var filterProcess = ''; - var filterCategory = ''; - var filterUser = ''; - var caseIdToDelete = ''; - var caseIdToUnpause = ''; - var caseIndexToUnpause = ''; + var ids = '', + filterProcess = '', + filterCategory = '', + filterUser = '', + caseIdToDelete = '', + caseIdToUnpause = '', + caseIndexToUnpause = '', + searchProcessId = ''; try { parent._action = action; } @@ -1016,15 +1017,46 @@ Ext.onReady ( function() { scope: this, 'select': function() { filterProcess = suggestProcess.value; - if ( action == 'search' ){ + if (action === 'search') { storeCases.setBaseParam('dateFrom', dateFrom.getValue()); storeCases.setBaseParam('dateTo', dateTo.getValue()); } storeCases.setBaseParam('process', filterProcess); + }, + 'blur': function () { + var param = suggestProcess.getValue() !== '' ? + processStore.getTotalCount() === 0 ? + "null" : + searchProcessId(suggestProcess.getValue(), processStore): + suggestProcess.getValue() ; + + storeCases.setBaseParam('process', param); } } }); + /** + * Search the PRO_UID in processStore with the value. + * @param value + * @param processStore + * @returns {string} + */ + searchProcessId = function (value, processStore) { + var i, + totalProcessStore = processStore.getTotalCount(); + try { + for (i = 0; i < totalProcessStore; i += 1) { + if (processStore.data.items[i].data.PRO_TITLE === value || + processStore.data.items[i].data.PRO_UID === value) { + return processStore.data.items[i].data.PRO_UID; + } + } + return "null"; + } catch (e) { + // Nothing to do + } + }; + var resetProcessButton = { text:'X', ctCls:"pm_search_x_button_des", diff --git a/workflow/engine/templates/cases/pmdynaform.html b/workflow/engine/templates/cases/pmdynaform.html index aa199753e..fd91d6578 100644 --- a/workflow/engine/templates/cases/pmdynaform.html +++ b/workflow/engine/templates/cases/pmdynaform.html @@ -12,9 +12,9 @@ + - diff --git a/workflow/engine/templates/departments/departmentList.js b/workflow/engine/templates/departments/departmentList.js index a1e21b5ea..38323fceb 100644 --- a/workflow/engine/templates/departments/departmentList.js +++ b/workflow/engine/templates/departments/departmentList.js @@ -255,6 +255,89 @@ Ext.onReady(function() { root: rootNode }); + /** + * Executes the Ajax request + * @param {String} url, Ajax service name + * @param {Object} data, contains the action and the data to be updated. + * @param {Function} succesCallback + * @param {Function} failureCallback + */ + executeRequest = function (url, data, succesCallback, failureCallback) { + Ext.Ajax.request({ + url: url, + params: data, + success: function(r,o) { + if (succesCallback) { + succesCallback(r, o); + } + }, + failure: function (r, o) { + if (failureCallback) { + failureCallback(r, o); + } + } + }); + }; + + /** + * beforenodedrop event Handler . + * Prepares the data to be sent by Ajax update service. + * Calls to updateDepartmentHandler method. + * @param {Object} dropEvent beforenodedrop event object. + */ + beforenodedropHandler = function (dropEvent) { + var data = { + uid: dropEvent.dropNode.attributes.DEP_UID, + parent: dropEvent.target.attributes.DEP_UID, + name: dropEvent.dropNode.attributes.DEP_TITLE, + status: dropEvent.dropNode.attributes.DEP_STATUS, + manager: dropEvent.dropNode.attributes.DEP_MANAGER, + action: 'updateDepartment' + } + updateDepartmentHandler(data, dropEvent); + }; + + /** + * Updates the department data. + * Verify that the name of a subdepartment is not repeated + * @param {Object} data the data to be updated. + * @param {Object} dropEvent beforenodedrop event object. + */ + updateDepartmentHandler = function (data, dropEvent) { + data['action'] = 'checkDepartmentName'; + executeRequest( + 'departments_Ajax', + data, + function (r, o) { + var res_ok = eval(r.responseText); + if (res_ok) { + data['action'] = 'updateDepartment'; + executeRequest( + 'departments_Ajax', + data, + function (r, o) { + dropEvent.dropNode.attributes.DEP_PARENT = dropEvent.target.attributes.DEP_UID; + PMExt.notify(_('ID_DEPARTMENTS'), _('ID_DEPARTMENT_SUCCESS_UPDATE')); + }, + function (r, o) { + treePanel.getRootNode().reload(); + DoNothing(); + } + ); + } else { + PMExt.error(_('ID_DEPARTMENTS'), _('ID_DEPARTMENT_EXISTS')); + treePanel.getRootNode().reload(); + } + }, + function (r, o) { + DoNothing(); + } + ); + } + + // Activate the event beforenodedrop (TreeGrid extjs event) + treePanel.on('beforenodedrop', beforenodedropHandler); + treePanel.on('contextmenu', treeContextHandler); viewport = new Ext.Viewport({ diff --git a/workflow/engine/templates/home/appList.html b/workflow/engine/templates/home/appList.html index f5552928b..dbf895de4 100644 --- a/workflow/engine/templates/home/appList.html +++ b/workflow/engine/templates/home/appList.html @@ -126,7 +126,7 @@ '' + '

'+r.USR_FIRSTNAME+' '+r.USR_LASTNAME+' ('+r.USR_USERNAME+')

' + '

'+r.NOTE_CONTENT+'
' + - '
{translate label="ID_POSTED_AT"} '+r.NOTE_DATE+'
' + + '
{/literal}{translate label="ID_POSTED_AT"}{literal} ' + r.NOTE_DATE + '
' + ''; content.append(s); diff --git a/workflow/engine/templates/home/appListSearch.html b/workflow/engine/templates/home/appListSearch.html index ecb61fb7f..ef94792d1 100644 --- a/workflow/engine/templates/home/appListSearch.html +++ b/workflow/engine/templates/home/appListSearch.html @@ -219,7 +219,7 @@ '' + '

'+r.USR_FIRSTNAME+' '+r.USR_LASTNAME+' ('+r.USR_USERNAME+')

' + '

'+r.NOTE_CONTENT+'
' + - '
{translate label="ID_POSTED_AT"} '+r.NOTE_DATE+'
' + + '
{/literal}{translate label="ID_POSTED_AT"}{literal} ' + r.NOTE_DATE + '
' + ''; content.append(s); diff --git a/workflow/engine/templates/pmTables/edit.js b/workflow/engine/templates/pmTables/edit.js index ad56a8bcc..7e1d70bf8 100644 --- a/workflow/engine/templates/pmTables/edit.js +++ b/workflow/engine/templates/pmTables/edit.js @@ -814,18 +814,23 @@ Ext.onReady(function(){ loadTableRowsFromArray(TABLE.FIELDS); } - if (dataNumRows > 0) { - var tpl = new Ext.Template( - '' + var newEl, + tpl = new Ext.Template( + '' ); - var newEl = tpl.insertFirst(document.getElementById('assignedGrid')); - - Ext.fly('hideWarning').on('click', function() { - Ext.fly(newEl).slideOut('t',{remove:true}); + Ext.getCmp("chkKeepData").on('check', function () { + if (dataNumRows > 0 && Ext.getCmp("chkKeepData").checked === false) { + newEl = tpl.insertFirst(document.getElementById('assignedGrid')); + Ext.fly('hideWarning').on('click', function() { + Ext.fly(newEl).slideOut('t', {useDisplay:true}); + }); + Ext.fly(newEl).slideIn(); + } else if (Ext.getCmp("chkKeepData").checked === true) { + Ext.fly(newEl).slideOut('t', {useDisplay:true}); + } }); - Ext.fly(newEl).slideIn(); - } }); diff --git a/workflow/engine/templates/pmTables/editReport.js b/workflow/engine/templates/pmTables/editReport.js index ea249268e..d9818702f 100644 --- a/workflow/engine/templates/pmTables/editReport.js +++ b/workflow/engine/templates/pmTables/editReport.js @@ -1,11 +1,6 @@ -/** - * Report tables New/Edit - * @author Erik A. O. - */ - //grids define var availableGrid; -var selCombo=''; +var selCombo = ''; var assignedGrid; var editor; // row editor for assignedGrid @@ -18,263 +13,262 @@ var removeButton; var removeAllButton; var tmp1 = new Array(); var pageSize = 50; -var mainMask = new Ext.LoadMask(Ext.getBody(), {msg: _('ID_PLEASE_WAIT') }); +var mainMask = new Ext.LoadMask(Ext.getBody(), {msg: _('ID_PLEASE_WAIT')}); var bbarpaging; //main -Ext.onReady(function(){ - mainMask = new Ext.LoadMask(Ext.getBody(), {msg: _('ID_PLEASE_WAIT') }); - var fm = Ext.form; - var fieldsCount = 0; +Ext.onReady(function () { + mainMask = new Ext.LoadMask(Ext.getBody(), {msg: _('ID_PLEASE_WAIT')}); + var fm = Ext.form; + var fieldsCount = 0; - // store for available fields grid - storeA = new Ext.data.GroupingStore( { - proxy : new Ext.data.HttpProxy({ - url: '../pmTablesProxy/getDynafields' - }), - reader : new Ext.data.JsonReader( { - root: 'rows', - totalProperty: 'count', - fields : [ - {name : 'FIELD_UID'}, - {name : 'FIELD_VALIDATE'}, - {name : 'FIELD_NAME'}, - {name : '_index'}, - {name : '_isset'} - ] - }), - listeners: { - beforeload: function (store, options) - { - var p = {PRO_UID: (PRO_UID !== false)? PRO_UID : Ext.getCmp("PROCESS").getValue()}; + // store for available fields grid + storeA = new Ext.data.GroupingStore({ + proxy: new Ext.data.HttpProxy({ + url: '../pmTablesProxy/getDynafields' + }), + reader: new Ext.data.JsonReader({ + root: 'rows', + totalProperty: 'count', + fields: [ + {name: 'FIELD_UID'}, + {name: 'FIELD_VALIDATE'}, + {name: 'FIELD_NAME'}, + {name: '_index'}, + {name: '_isset'} + ] + }), + listeners: { + beforeload: function (store, options) + { + var p = {PRO_UID: (PRO_UID !== false) ? PRO_UID : Ext.getCmp("PROCESS").getValue()}; - if (Ext.getCmp("REP_TAB_TYPE").getValue() == "GRID" && Ext.getCmp("REP_TAB_GRID").getValue() != "") { - p.TYPE = "GRID"; - p.GRID_UID = Ext.getCmp("REP_TAB_GRID").getValue(); + if (Ext.getCmp("REP_TAB_TYPE").getValue() == "GRID" && Ext.getCmp("REP_TAB_GRID").getValue() != "") { + p.TYPE = "GRID"; + p.GRID_UID = Ext.getCmp("REP_TAB_GRID").getValue(); + } + + if (Ext.getCmp("searchTxt").getValue() != "") { + p.textFilter = Ext.getCmp("searchTxt").getValue(); + } + + this.baseParams = p; + }, + load: function () { + Ext.getCmp('availableGrid').store.sort(); + storeA.setBaseParam('PRO_UID', (PRO_UID !== false ? PRO_UID : Ext.getCmp('PROCESS').getValue())); + mainMask.hide(); + assignedGrid._setTitle(); } - - if (Ext.getCmp("searchTxt").getValue() != "") { - p.textFilter = Ext.getCmp("searchTxt").getValue(); - } - - this.baseParams = p; }, - load: function() { - Ext.getCmp('availableGrid').store.sort(); - storeA.setBaseParam('PRO_UID', (PRO_UID !== false? PRO_UID : Ext.getCmp('PROCESS').getValue())); - mainMask.hide(); - assignedGrid._setTitle(); - } - }, - baseParams: { - PRO_UID: '' - }, - remoteSort: false - }); + baseParams: { + PRO_UID: '' + }, + remoteSort: false + }); - storeA.setDefaultSort('FIELD_NAME', 'asc'); + storeA.setDefaultSort('FIELD_NAME', 'asc'); - //column model for available fields grid - cmodelA = new Ext.grid.ColumnModel({ - defaults: { - width: 55, - sortable: true - }, - columns: [ - { - id:'FIELD_UID', - dataIndex: 'FIELD_UID', - hidden:true, - hideable:false - }, { - dataIndex:'FIELD_VALIDATE', - hidden:true, - hideable:false - } - , { - dataIndex:'_index', - hidden:true, - hideable:false - }, { - dataIndex:'_isset', - hidden:true, - hideable:false - }, { - header : _("ID_DYNAFORM_FIELDS"), - dataIndex : 'FIELD_NAME', - sortable : true, - align:'left' - } - ] - }); - //selection model for available fields grid - smodelA = new Ext.grid.RowSelectionModel({ - selectSingle: false, - listeners:{ - selectionchange: function(sm){ - switch(sm.getCount()){ - case 0: Ext.getCmp('assignButton').disable(); break; - default: Ext.getCmp('assignButton').enable(); break; - } - } - } - }); - - - storePageSize = new Ext.data.SimpleStore({ - fields: ['size'], - data: [['20'],['30'],['40'],['50'],['100']], - autoLoad: true - }); - - comboPageSize = new Ext.form.ComboBox({ - typeAhead : false, - mode : 'local', - triggerAction : 'all', - store: storePageSize, - valueField: 'size', - displayField: 'size', - width: 50, - editable: false, - listeners:{ - select: function(c,d,i){ - //UpdatePageConfig(d.data['size']); - bbarpaging.pageSize = parseInt(d.data['size']); - bbarpaging.moveFirst(); - } - } - }); - - comboPageSize.setValue(pageSize); - - bbarpaging = new Ext.PagingToolbar({ - id: 'editReportBbarpaging', - pageSize: pageSize, - store: storeA, - displayInfo: true, - displayMsg: '{0} - {1} ' + _('ID_DISPLAY_OF') + ' {2}', - emptyMsg: _('ID_NO_RECORDS')/*, - items: ['-',_('ID_PAGE_SIZE')+':',comboPageSize]*/ - }); - - //grid for table columns grid - availableGrid = new Ext.grid.GridPanel({ - layout : 'fit', - region : 'center', - id : 'availableGrid', - ddGroup : 'assignedGridDDGroup', - enableDragDrop : true, - stripeRows : true, - autoWidth : true, - stripeRows : true, - height : 100, - width : 290, - stateful : true, - stateId : 'gridEditReport', - enableHdMenu : false, - columnLines : false, - viewConfig : {forceFit:true}, - cm : cmodelA, - sm : smodelA, - store : storeA, - //loadMask: {message:'Loading...'}, - listeners : { - rowdblclick: AssignFieldsAction - }, - tbar: [ - { - xtype: 'textfield', - id: 'searchTxt', - ctCls:'pm_search_text_field', - allowBlank: true, - width: 220, - emptyText: _('ID_EMPTY_SEARCH'), - listeners: { - specialkey: function(f,e){ - if (e.getKey() == e.ENTER) { - filterAvFields(); - } + //column model for available fields grid + cmodelA = new Ext.grid.ColumnModel({ + defaults: { + width: 55, + sortable: true + }, + columns: [ + { + id: 'FIELD_UID', + dataIndex: 'FIELD_UID', + hidden: true, + hideable: false + }, { + dataIndex: 'FIELD_VALIDATE', + hidden: true, + hideable: false + } + , { + dataIndex: '_index', + hidden: true, + hideable: false + }, { + dataIndex: '_isset', + hidden: true, + hideable: false + }, { + header: _("ID_DYNAFORM_FIELDS"), + dataIndex: 'FIELD_NAME', + sortable: true, + align: 'left' + } + ] + }); + //selection model for available fields grid + smodelA = new Ext.grid.RowSelectionModel({ + selectSingle: false, + listeners: { + selectionchange: function (sm) { + switch (sm.getCount()) { + case 0: + Ext.getCmp('assignButton').disable(); + break; + default: + Ext.getCmp('assignButton').enable(); + break; + } } - } - }, - { - id: 'availableGridButtonClear', - text: 'X', - ctCls:'pm_search_x_button', - handler: function(){ - Ext.getCmp('searchTxt').setValue(''); - filterAvFields(); } - }, { - id: 'availableGridButtonSearch', - text: _('ID_FILTER'), - handler: function(){ - filterAvFields(); + }); + + + storePageSize = new Ext.data.SimpleStore({ + fields: ['size'], + data: [['20'], ['30'], ['40'], ['50'], ['100']], + autoLoad: true + }); + + comboPageSize = new Ext.form.ComboBox({ + typeAhead: false, + mode: 'local', + triggerAction: 'all', + store: storePageSize, + valueField: 'size', + displayField: 'size', + width: 50, + editable: false, + listeners: { + select: function (c, d, i) { + bbarpaging.pageSize = parseInt(d.data['size']); + bbarpaging.moveFirst(); + } } - } - ], - bbar: bbarpaging - }); + }); - var filterAvFields = function() { - //availableGrid.store.load({params: {textFilter: Ext.getCmp('searchTxt').getValue()}}); - //storeA.setParam('textFilter', Ext.getCmp('searchTxt').getValue()); - storeA.reload({params: {textFilter: Ext.getCmp('searchTxt').getValue(), start: bbarpaging.cursor, limit: pageSize}}); - } + comboPageSize.setValue(pageSize); - //selecion model for table columns grid - sm = new Ext.grid.RowSelectionModel({ - selectSingle: false, - listeners:{ - rowselect: function(sm) { - validateFieldSizeAutoincrement(assignedGrid.getSelectionModel().getSelected().get('field_type'), false); - }, - selectionchange: function(sm){ - switch(sm.getCount()){ - case 0: - Ext.getCmp('removeButton').disable(); - Ext.getCmp('removeColumn').disable(); - break; - case 1: - var record = Ext.getCmp('assignedGrid').getSelectionModel().getSelected(); - Ext.getCmp('removeButton').enable(); + bbarpaging = new Ext.PagingToolbar({ + id: 'editReportBbarpaging', + pageSize: pageSize, + store: storeA, + displayInfo: true, + displayMsg: '{0} - {1} ' + _('ID_DISPLAY_OF') + ' {2}', + emptyMsg: _('ID_NO_RECORDS') + }); - if (record.data.field_dyn == '' && record.data.field_name != 'APP_UID' && record.data.field_name != 'APP_NUMBER' && record.data.field_name != 'ROW') { - Ext.getCmp('removeColumn').enable(); - } - break; - default: - Ext.getCmp('removeButton').enable(); - Ext.getCmp('removeColumn').disable(); - break; - } - } - } - }); - //check column for table columns grid - var checkColumn = new Ext.grid.CheckColumn({ - header: 'Filter', - dataIndex: 'FIELD_FILTER', - id: 'FIELD_FILTER', - width: 55 - }); - - var sizeField = new fm.NumberField({ - name: 'sizeEdit', - id: 'sizeEdit', - allowBlank: true, - allowDecimals: false, - allowNegative: false, - disabled: true, - nanText: 'This field should content a number', - minValue: 1, - maxValue: 99, - minLength: 0, - listeners:{ - render:function(){ - validateFieldSizeAutoincrement(assignedGrid.getSelectionModel().getSelected().get('field_type'), false); + //grid for table columns grid + availableGrid = new Ext.grid.GridPanel({ + layout: 'fit', + region: 'center', + id: 'availableGrid', + ddGroup: 'assignedGridDDGroup', + enableDragDrop: true, + stripeRows: true, + autoWidth: true, + stripeRows: true, + height: 100, + width: 290, + stateful: true, + stateId: 'gridEditReport', + enableHdMenu: false, + columnLines: false, + viewConfig: {forceFit: true}, + cm: cmodelA, + sm: smodelA, + store: storeA, + listeners: { + rowdblclick: AssignFieldsAction + }, + tbar: [ + { + xtype: 'textfield', + id: 'searchTxt', + ctCls: 'pm_search_text_field', + allowBlank: true, + width: 220, + emptyText: _('ID_EMPTY_SEARCH'), + listeners: { + specialkey: function (f, e) { + if (e.getKey() == e.ENTER) { + filterAvFields(); } - } - }); + } + } + }, + { + id: 'availableGridButtonClear', + text: 'X', + ctCls: 'pm_search_x_button', + handler: function () { + Ext.getCmp('searchTxt').setValue(''); + filterAvFields(); + } + }, { + id: 'availableGridButtonSearch', + text: _('ID_FILTER'), + handler: function () { + filterAvFields(); + } + } + ], + bbar: bbarpaging + }); + + var filterAvFields = function () { + storeA.reload({params: {textFilter: Ext.getCmp('searchTxt').getValue(), start: bbarpaging.cursor, limit: pageSize}}); + } + + //selecion model for table columns grid + sm = new Ext.grid.RowSelectionModel({ + selectSingle: false, + listeners: { + rowselect: function (sm) { + validateFieldSizeAutoincrement(assignedGrid.getSelectionModel().getSelected().get('field_type'), false); + }, + selectionchange: function (sm) { + switch (sm.getCount()) { + case 0: + Ext.getCmp('removeButton').disable(); + Ext.getCmp('removeColumn').disable(); + break; + case 1: + var record = Ext.getCmp('assignedGrid').getSelectionModel().getSelected(); + Ext.getCmp('removeButton').enable(); + + if (record.data.field_dyn == '' && record.data.field_name != 'APP_UID' && record.data.field_name != 'APP_NUMBER' && record.data.field_name != 'ROW') { + Ext.getCmp('removeColumn').enable(); + } + break; + default: + Ext.getCmp('removeButton').enable(); + Ext.getCmp('removeColumn').disable(); + break; + } + } + } + }); + //check column for table columns grid + var checkColumn = new Ext.grid.CheckColumn({ + header: 'Filter', + dataIndex: 'FIELD_FILTER', + id: 'FIELD_FILTER', + width: 55 + }); + + var sizeField = new fm.NumberField({ + name: 'sizeEdit', + id: 'sizeEdit', + allowBlank: true, + allowDecimals: false, + allowNegative: false, + disabled: true, + nanText: 'This field should content a number', + minValue: 1, + maxValue: 99, + minLength: 0, + listeners: { + render: function () { + validateFieldSizeAutoincrement(assignedGrid.getSelectionModel().getSelected().get('field_type'), false); + } + } + }); //columns for table columns grid @@ -283,41 +277,41 @@ Ext.onReady(function(){ id: 'uid', dataIndex: 'uid', hidden: true, - hideable:false + hideable: false }, { dataIndex: '_index', hidden: true, - hideable:false + hideable: false }, { dataIndex: '_isset', hidden: true, - hideable:false + hideable: false }, { id: 'field_uid', dataIndex: 'field_uid', hidden: true, - hideable:false + hideable: false }, { id: 'field_key', dataIndex: 'field_key', hidden: true, - hideable:false + hideable: false }, { id: 'field_index', dataIndex: 'field_index', hidden: true, - hideable:false + hideable: false }, { id: 'field_null', dataIndex: 'field_null', hidden: true, - hideable:false + hideable: false }, { id: 'field_dyn', @@ -326,8 +320,8 @@ Ext.onReady(function(){ width: 220, // use shorthand alias defined above editor: { - xtype: 'displayfield', - style: 'font-size:11px; padding-left:7px' + xtype: 'displayfield', + style: 'font-size:11px; padding-left:7px' } }, { id: 'field_name', @@ -335,22 +329,22 @@ Ext.onReady(function(){ dataIndex: 'field_name', width: 220, editor: { - xtype: 'textfield', - allowBlank: true, - listeners:{ - change: function(f,e){ - this.setValue(this.getValue().toUpperCase()); + xtype: 'textfield', + allowBlank: true, + listeners: { + change: function (f, e) { + this.setValue(this.getValue().toUpperCase()); + } } - } } }, { id: 'field_label', header: _("ID_FIELD_LABEL"), dataIndex: 'field_label', width: 220, - editor:{ - xtype: 'textfield', - allowBlank: true + editor: { + xtype: 'textfield', + allowBlank: true } }, { id: 'field_type', @@ -363,13 +357,12 @@ Ext.onReady(function(){ editable: false, lazyRender: true, mode: 'local', - displayField:'type', - valueField:'type_id', + displayField: 'type', + valueField: 'type_id', store: new Ext.data.SimpleStore({ fields: ['type_id', 'type'], - //data : [['VARCHAR',_("ID_VARCHAR")],['TEXT',_("ID_TEXT")],['DATE',_("ID_DATE")],['INT',_("ID_INT")],['FLOAT',_("ID_FLOAT")]], data: columnsTypes, - sortInfo: {field:'type_id', direction:'ASC'} + sortInfo: {field: 'type_id', direction: 'ASC'} }), listeners: { beforerender: function (combo) @@ -384,20 +377,20 @@ Ext.onReady(function(){ combo.setValue(combo.store.getAt(0).get(combo.valueField)); } }, - 'select': function(combo, row, index) { - if (cm && cm instanceof Ext.grid.ColumnModel) { - var valueCombo = combo.getValue(); - var changeValue = !(valueCombo === assignedGrid.getSelectionModel().getSelected().get('field_type')); - validateFieldSizeAutoincrement(valueCombo, changeValue); - var fieldTypeValue = combo.getValue(); - var fieldIndex = Ext.getCmp("field_index"); - var fieldInc = Ext.getCmp("field_incre"); - var sizeEdit = Ext.getCmp("sizeEdit"); + 'select': function (combo, row, index) { + if (cm && cm instanceof Ext.grid.ColumnModel) { + var valueCombo = combo.getValue(); + var changeValue = !(valueCombo === assignedGrid.getSelectionModel().getSelected().get('field_type')); + validateFieldSizeAutoincrement(valueCombo, changeValue); + var fieldTypeValue = combo.getValue(); + var fieldIndex = Ext.getCmp("field_index"); + var fieldInc = Ext.getCmp("field_incre"); + var sizeEdit = Ext.getCmp("sizeEdit"); - editorFieldsEnableDisable(fieldTypeValue, fieldIndex, fieldInc, sizeEdit); + editorFieldsEnableDisable(fieldTypeValue, fieldIndex, fieldInc, sizeEdit); - flagShowMessageError = 1; - } + flagShowMessageError = 1; + } }//select } }) @@ -410,19 +403,19 @@ Ext.onReady(function(){ editor: sizeField }, { - xtype: 'booleancolumn', - header: _('ID_AUTO_INCREMENT'), - dataIndex: 'field_autoincrement', - align: 'center', - width: 100, - trueText: _('ID_YES'), - falseText: _('ID_NO'), - editor: { - xtype: 'checkbox', - id: 'field_incre', - disabled: true, - inputValue: 'always' - } + xtype: 'booleancolumn', + header: _('ID_AUTO_INCREMENT'), + dataIndex: 'field_autoincrement', + align: 'center', + width: 100, + trueText: _('ID_YES'), + falseText: _('ID_NO'), + editor: { + xtype: 'checkbox', + id: 'field_incre', + disabled: true, + inputValue: 'always' + } } /*----------------------------------********---------------------------------*/ , { @@ -441,870 +434,849 @@ Ext.onReady(function(){ } } /*----------------------------------********---------------------------------*/ - ]; + ]; -function validateFieldSizeAutoincrement(valueType, defaultValue) { - if (Ext.getCmp("sizeEdit").getEl()) { + function validateFieldSizeAutoincrement(valueType, defaultValue) { + if (Ext.getCmp("sizeEdit").getEl()) { - if (valueType === 'INTEGER' || valueType === 'BIGINT' || valueType === 'SMALLINT' || valueType === 'TINYINT') { - Ext.getCmp("sizeEdit").enable(); - Ext.getCmp("sizeEdit").setMaxValue(99); - Ext.getCmp("sizeEdit").getEl().dom.maxLength = 2; - if (defaultValue) { - Ext.getCmp("sizeEdit").setValue(''); + if (valueType === 'INTEGER' || valueType === 'BIGINT' || valueType === 'SMALLINT' || valueType === 'TINYINT') { + Ext.getCmp("sizeEdit").enable(); + Ext.getCmp("sizeEdit").setMaxValue(99); + Ext.getCmp("sizeEdit").getEl().dom.maxLength = 2; + if (defaultValue) { + Ext.getCmp("sizeEdit").setValue(''); + } + + Ext.getCmp("field_incre").enable(); + if (defaultValue) { + Ext.getCmp("field_incre").setValue(false); + } } - Ext.getCmp("field_incre").enable(); - if (defaultValue) { + if (valueType === 'CHAR' || valueType === 'VARCHAR' || valueType === 'LONGVARCHAR') { + Ext.getCmp("sizeEdit").enable(); + Ext.getCmp("sizeEdit").setMaxValue(((valueType === 'CHAR') ? 255 : 999)); + Ext.getCmp("sizeEdit").getEl().dom.maxLength = 3; + if (defaultValue) { + Ext.getCmp("sizeEdit").setValue(''); + } + + Ext.getCmp("field_incre").disable(); + Ext.getCmp("field_incre").setValue(false); + } + + if (valueType === 'BOOLEAN' || valueType === 'DATE' || valueType === 'DATETIME' || valueType === 'TIME' || valueType === 'DECIMAL' || valueType === 'DOUBLE' || valueType === 'FLOAT' || valueType === 'REAL') { + Ext.getCmp("sizeEdit").disable(); + Ext.getCmp("sizeEdit").setValue(''); + + Ext.getCmp("field_incre").disable(); Ext.getCmp("field_incre").setValue(false); } } - - if (valueType === 'CHAR' || valueType === 'VARCHAR' || valueType === 'LONGVARCHAR') { - Ext.getCmp("sizeEdit").enable(); - Ext.getCmp("sizeEdit").setMaxValue(((valueType === 'CHAR') ? 255 : 999)); - Ext.getCmp("sizeEdit").getEl().dom.maxLength = 3; - if (defaultValue) { - Ext.getCmp("sizeEdit").setValue(''); - } - - Ext.getCmp("field_incre").disable(); - Ext.getCmp("field_incre").setValue(false); - } - - if (valueType === 'BOOLEAN' || valueType === 'DATE' || valueType === 'DATETIME' || valueType === 'TIME' || valueType === 'DECIMAL' || valueType === 'DOUBLE' || valueType === 'FLOAT' || valueType === 'REAL') { - Ext.getCmp("sizeEdit").disable(); - Ext.getCmp("sizeEdit").setValue(''); - - Ext.getCmp("field_incre").disable(); - Ext.getCmp("field_incre").setValue(false); - } } -} - //if permissions plugin is enabled - if (TABLE !== false && TABLE.ADD_TAB_TAG == 'plugin@simplereport') { - cmColumns.push({ - xtype: 'booleancolumn', - header: 'Filter', - dataIndex: 'field_filter', - align: 'center', - width: 50, - trueText: _('ID_YES'), - falseText: _('ID_NO'), - editor: { - xtype: 'checkbox' - } - }) - } + //if permissions plugin is enabled + if (TABLE !== false && TABLE.ADD_TAB_TAG == 'plugin@simplereport') { + cmColumns.push({ + xtype: 'booleancolumn', + header: 'Filter', + dataIndex: 'field_filter', + align: 'center', + width: 50, + trueText: _('ID_YES'), + falseText: _('ID_NO'), + editor: { + xtype: 'checkbox' + } + }) + } - //column model for table columns grid - var cm = new Ext.grid.ColumnModel({ - // specify any defaults for each column - defaults: { - resizable: false, - sortable: true // columns are not sortable by default - }, - columns:cmColumns - }); - //store for table columns grid - store = new Ext.data.ArrayStore({ - fields: [ - {name: 'uid', type: 'string'}, - {name: '_index'}, - {name: '_isset'}, - {name: 'field_uid', type: 'string'}, - {name: 'field_key', type: 'string'}, - {name: 'field_index', type: 'string'}, - {name: 'field_name', type: 'string'}, - {name: 'field_label', type: 'string'}, - {name: 'field_type'}, - {name: 'field_size', type: 'float'}, - {name: 'field_null', type: 'float'}, - {name: 'field_autoincrement', type: 'float'}, - {name: 'field_filter', type: 'string'} - ] - }); - //row editor for table columns grid - var flagShowMessageError = 1; + //column model for table columns grid + var cm = new Ext.grid.ColumnModel({ + // specify any defaults for each column + defaults: { + resizable: false, + sortable: true // columns are not sortable by default + }, + columns: cmColumns + }); + //store for table columns grid + store = new Ext.data.ArrayStore({ + fields: [ + {name: 'uid', type: 'string'}, + {name: '_index'}, + {name: '_isset'}, + {name: 'field_uid', type: 'string'}, + {name: 'field_key', type: 'string'}, + {name: 'field_index', type: 'string'}, + {name: 'field_name', type: 'string'}, + {name: 'field_label', type: 'string'}, + {name: 'field_type'}, + {name: 'field_size', type: 'float'}, + {name: 'field_null', type: 'float'}, + {name: 'field_autoincrement', type: 'float'}, + {name: 'field_filter', type: 'string'} + ] + }); + //row editor for table columns grid + var flagShowMessageError = 1; - editor = new Ext.ux.grid.RowEditor({ - saveText: _("ID_UPDATE"), + editor = new Ext.ux.grid.RowEditor({ + saveText: _("ID_UPDATE"), - isValid: function() - { - var valid = true; - this.items.each(function(f) { - if(!f.isValid(true)){ - valid = false; + isValid: function () + { + var valid = true; + this.items.each(function (f) { + if (!f.isValid(true)) { + valid = false; - if (valid) { - flagShowMessageError = 1; + if (valid) { + flagShowMessageError = 1; + } + return false; } + }); + + if (valid) { + flagShowMessageError = 1; + } + return valid; + }, + showTooltip: function (msg) + { + if (flagShowMessageError == 1) { + Ext.msgBoxSlider.msgTopCenter("error", _("ID_ERROR"), msg, 3); + flagShowMessageError = 0; + } + }, + + listeners: { + canceledit: function (grid, obj) { + if (grid.record.data.field_label == '' && grid.record.data.field_name == '') { + store.remove(grid.record); + } + + flagShowMessageError = 1; + } + } + }); + + editor.on({ + afteredit: function (roweditor, changes, record, rowIndex) { + }, + beforeedit: function (roweditor, rowIndex) { + row = assignedGrid.getSelectionModel().getSelected(); + if (row.get('field_name') == 'APP_UID' || row.get('field_name') == 'APP_NUMBER' || row.get('field_name') == 'ROW') { + editor.stopEditing(); return false; } - }); + setTimeout( + function () + { + var fieldTypeValue = row.get('field_type'); + var fieldIndex = Ext.getCmp("field_index"); + var fieldInc = Ext.getCmp("field_incre"); + var sizeEdit = Ext.getCmp("sizeEdit"); - if (valid) { - flagShowMessageError = 1; + editorFieldsEnableDisable(fieldTypeValue, fieldIndex, fieldInc, sizeEdit); + }, + 250 + ); } - return valid; - }, - showTooltip: function (msg) - { - if (flagShowMessageError == 1) { - Ext.msgBoxSlider.msgTopCenter("error", _("ID_ERROR"), msg, 3); - flagShowMessageError = 0; - } - }, + }); - listeners: { - canceledit: function(grid,obj){ - if ( grid.record.data.field_label == '' && grid.record.data.field_name == '') { - store.remove(grid.record); - } - - flagShowMessageError = 1; - } - } - }); - - editor.on({ - afteredit: function(roweditor, changes, record, rowIndex) { - // - }, - beforeedit: function(roweditor, rowIndex) { - row = assignedGrid.getSelectionModel().getSelected(); - if (row.get('field_name') == 'APP_UID' || row.get('field_name') == 'APP_NUMBER' || row.get('field_name') == 'ROW') { - editor.stopEditing(); - return false; - } - setTimeout( - function () + //table columns grid + assignedGrid = new Ext.grid.GridPanel({ + title: _('ID_NEW_REPORT_TABLE'), + region: 'center', + id: 'assignedGrid', + ddGroup: 'availableGridDDGroup', + enableDragDrop: true, + viewConfig: {forceFit: true}, + cm: cm, + sm: sm, + store: store, + plugins: [editor, checkColumn], + loadMask: {message: _('ID_LOADING_GRID')}, + tbar: [ { - var fieldTypeValue = row.get('field_type'); - var fieldIndex = Ext.getCmp("field_index"); - var fieldInc = Ext.getCmp("field_incre"); - var sizeEdit = Ext.getCmp("sizeEdit"); - - editorFieldsEnableDisable(fieldTypeValue, fieldIndex, fieldInc, sizeEdit); - }, - 250 - ); - } - }); - - //table columns grid - assignedGrid = new Ext.grid.GridPanel({ - title : _('ID_NEW_REPORT_TABLE'), - region : 'center', - id : 'assignedGrid', - ddGroup : 'availableGridDDGroup', - enableDragDrop : true, - viewConfig : {forceFit: true}, - cm : cm, - sm : sm, - store : store, - plugins : [editor, checkColumn], - loadMask: {message: _('ID_LOADING_GRID')}, - tbar : [ - { - id: 'assignedGridAddField', - icon: '/images/add-row-after.png', - text: _("ID_ADD_FIELD"), - handler: addColumn - }, { - id: 'removeColumn', - icon: '/images/delete-row.png', - text: _("ID_REMOVE_FIELD"), - disabled: true, - handler: removeColumn - } - ], - listeners: { - render: function(grid) { - var ddrow = new Ext.dd.DropTarget(grid.getView().mainBody, { - ddGroup: 'availableGridDDGroup', - copy: false, - notifyDrop: function(dd, e, data) { - var ds = grid.store; - var sm = grid.getSelectionModel(); - var rows = sm.getSelections(); - if (dd.getDragData(e)) { - var cindex = dd.getDragData(e).rowIndex; - //skipping primary keys, we can't reorder - if (store.data.items[cindex].data.field_key) - return; - - if (typeof(cindex) != "undefined") { - for(var i = 0; i < rows.length; i++) { - //skipping primary keys, we can't reorder - if (rows[i].data.field_key ) - continue; - - var srcIndex = ds.indexOfId(rows[i].id); - ds.remove(ds.getById(rows[i].id)); - if (i > 0 && cindex < srcIndex) { - cindex++; - } - ds.insert(cindex, rows[i]); - } - sm.selectRecords(rows); - } + id: 'assignedGridAddField', + icon: '/images/add-row-after.png', + text: _("ID_ADD_FIELD"), + handler: addColumn + }, { + id: 'removeColumn', + icon: '/images/delete-row.png', + text: _("ID_REMOVE_FIELD"), + disabled: true, + handler: removeColumn } - } - }); - } - }, - _setTitle: function() { - this.setTitle(_('ID_REPORT_TABLE') + ': ' + Ext.getCmp('REP_TAB_NAME').getValue() + ' ('+store.getCount()+' ' + _('ID_COLUMNS') + ')'); - } - }); - - // (vertical) selection buttons - buttonsPanel = new Ext.Panel({ - id: 'buttonsPanelVertical', - width : 40, - layout : { - type:'vbox', - padding:'0', - pack:'center', - align:'center' - }, - defaults:{margins:'0 0 35 0'}, - items:[ - { xtype:'button',text: '>', - handler: AssignFieldsAction, - id: 'assignButton', disabled: true - }, - { xtype:'button',text: '<', - handler: RemoveFieldsAction, - id: 'removeButton', disabled: true - }, - { xtype:'button',text: '>>', - handler: AssignAllFieldsAction, - id: 'assignButtonAll', disabled: false}, - { xtype:'button',text: '<<', - handler: RemoveAllFieldsAction, - id: 'removeButtonAll', disabled: false - } - ] - - }); - - - FieldsPanel = new Ext.Panel({ - //title: _('ID_FIELDS'), - region : 'center', - //autoWidth : true, - width: 150, - layout : 'hbox', - defaults : { flex : 1 }, //auto stretch - layoutConfig : { align : 'stretch' }, - items : [availableGrid,buttonsPanel,assignedGrid], - viewConfig : {forceFit:true} - - }); - - searchTextA = new Ext.form.TextField ({ - id: 'searchTextA', - ctCls:'pm_search_text_field', - allowBlank: true, - width: 110, - emptyText: _('ID_EMPTY_SEARCH'), + ], listeners: { - specialkey: function(f,e){ - if (e.getKey() == e.ENTER) { - DoSearchA(); - } - } - } - }); + render: function (grid) { + var ddrow = new Ext.dd.DropTarget(grid.getView().mainBody, { + ddGroup: 'availableGridDDGroup', + copy: false, + notifyDrop: function (dd, e, data) { + var ds = grid.store; + var sm = grid.getSelectionModel(); + var rows = sm.getSelections(); + if (dd.getDragData(e)) { + var cindex = dd.getDragData(e).rowIndex; + //skipping primary keys, we can't reorder + if (store.data.items[cindex].data.field_key) + return; - searchTextP = new Ext.form.TextField ({ - id: 'searchTextP', - ctCls:'pm_search_text_field', - allowBlank: true, - width: 110, - emptyText: _('ID_EMPTY_SEARCH'), - listeners: { - specialkey: function(f,e){ - if (e.getKey() == e.ENTER) { - DoSearchP(); - } - } - } - }); + if (typeof (cindex) != "undefined") { + for (var i = 0; i < rows.length; i++) { + //skipping primary keys, we can't reorder + if (rows[i].data.field_key) { + continue; + } - var types = new Ext.data.ArrayStore({ - storeId: "types", - autoDestroy: true, - - fields: ["REP_TAB_TYPE", "type"], - data : [['NORMAL',_("ID_GLOBAL")],['GRID',_("ID_GRID")]] - }); - - comboReport = new Ext.form.ComboBox({ - id : 'REP_TAB_TYPE', - name: 'type', - fieldLabel: 'Type', - hiddenName : 'REP_TAB_TYPE', - mode: 'local', - store: types, - displayField:'type', - valueField:'REP_TAB_TYPE', - width: 120, - typeAhead: true, - triggerAction: 'all', - editable:false, - lazyRender: true, - value: typeof TABLE.ADD_TAB_TYPE != 'undefined'? TABLE.ADD_TAB_TYPE : 'NORMAL', - listeners: { - select: function(combo,record,index){ - if (this.getValue()=='NORMAL') { - Ext.getCmp('REP_TAB_GRID').setVisible(false); - loadFieldNormal(); - } else { - Ext.getCmp('availableGrid').store.removeAll(); - Ext.getCmp('REP_TAB_GRID').setVisible(true); - Ext.getCmp('REP_TAB_GRID').setValue(''); - gridsListStore.reload({params:{PRO_UID : PRO_UID !== false ? PRO_UID : Ext.getCmp('PROCESS').getValue()}}); - } - } - } - }); - - - dbConnectionsStore = new Ext.data.Store({ - //autoLoad: true, - proxy : new Ext.data.HttpProxy({ - url: '../pmTablesProxy/getDbConnectionsList', - method : 'POST' - }), - baseParams : { - PRO_UID : '' - }, - reader : new Ext.data.JsonReader( { - fields : [{name : 'DBS_UID'}, {name : 'DBS_NAME'}] - }), - listeners: { - load: function() { - if (TABLE !== false) { // is editing - defaultValue = TABLE.DBS_UID; - comboDbConnections.setDisabled(true); - } - else { - defaultValue = 'workflow'; - } - - // set current editing process combobox - var i = this.findExact('DBS_UID', defaultValue, 0); - if (i > -1){ - comboDbConnections.setValue(this.getAt(i).data.DBS_UID); - comboDbConnections.setRawValue(this.getAt(i).data.DBS_NAME); - } - else { - // DB COnnection deleted - Ext.Msg.alert( _('ID_ERROR'), _('ID_DB_CONNECTION_NOT_EXIST') ); - } - } - } - }); - - comboDbConnections = new Ext.form.ComboBox({ - id: 'REP_TAB_CONNECTION', - fieldLabel : _("ID_DB_CONNECTION"), - hiddenName : 'DBS_UID', - store : dbConnectionsStore, - //value: 'rp', - valueField : 'DBS_UID', - displayField : 'DBS_NAME', - triggerAction : 'all', - editable : false, - mode:'local' - }); - - gridsListStore = new Ext.data.Store({ - //autoLoad: true, - proxy : new Ext.data.HttpProxy({ - url: '../pmTablesProxy/getDynafields', - method : 'POST' - }), - baseParams : { - PRO_UID : '', - TYPE: 'GRID' - }, - reader : new Ext.data.JsonReader( { - //root : 'processFields', - fields : [{name : 'FIELD_UID'}, {name : 'FIELD_NAME'}] - }), - listeners: { - load: function(){ - if (TABLE !== false) { - var i = this.findExact('FIELD_UID', TABLE.ADD_TAB_GRID, 0); - if (i > -1){ - comboGridsList.setValue(this.getAt(i).data.FIELD_UID); - comboGridsList.setRawValue(this.getAt(i).data.FIELD_NAME); - comboGridsList.setDisabled(true); - - var available = Ext.getCmp('availableGrid'); - available.store.load({ - params: { - action: "getDynafields", - PRO_UID: PRO_UID !== false ? PRO_UID : Ext.getCmp('PROCESS').getValue(), - TYPE: 'GRID', - GRID_UID: Ext.getCmp('REP_TAB_GRID').getValue(), - start: 0, - limit: pageSize - } - }); - } else { - Ext.Msg.alert( _('ID_ERROR'), _('ID_GRID_NO_EXIST') ); - } - } - } - } - }); - - comboGridsList = new Ext.form.ComboBox({ - id: 'REP_TAB_GRID', - fieldLabel : 'Grid', - hiddenName : 'FIELD_UID', - store : gridsListStore, - emptyText: _("ID_SELECT_GRID"), - //hidden:true, - //hideLabel: true, - //value: 'rp', - valueField : 'FIELD_UID', - displayField : 'FIELD_NAME', - triggerAction : 'all', - width: 200, - editable : false, - mode:'local', - listeners:{ - afterrender: function(){ - //Ext.getCmp('REP_TAB_GRID').setVisible(false); - //loadFieldNormal(); - }, - select: function(combo,record,index){ - - //Ext.getCmp('REP_TAB_TYPE').setVisible(true); - // Ext.getCmp('REP_TAB_GRID').setVisible(true); - loadFieldsGrids(); - - } - } - }); - - processStore = new Ext.data.Store( { - autoLoad: true, - proxy : new Ext.data.HttpProxy({ - url: '../pmTablesProxy/getProcessList', - method : 'POST' - }), - baseParams : { - action: 'getProcessList' - }, - reader : new Ext.data.JsonReader( { - fields: [{name: "PRO_UID"}, {name: "PRO_TITLE"}, {name: "PRO_DESCRIPTION"}] - }), - listeners: { - load: function() { - if (TABLE !== false) { // is editing - // set current editing process combobox - var i = this.findExact('PRO_UID', TABLE.PRO_UID, 0); - if (i > -1){ - processComboBox.setValue(this.getAt(i).data.PRO_UID); - processComboBox.setRawValue(this.getAt(i).data.PRO_TITLE); - processComboBox.setDisabled(true); - } else { - // Process deleted - Ext.Msg.alert( _('ID_ERROR'), _('ID_PROCESS_NO_EXIST') ); - } - // setting table attributes for current editing process - Ext.getCmp('REP_TAB_NAME').setValue(TABLE.ADD_TAB_NAME); - Ext.getCmp('REP_TAB_NAME').setDisabled(false); - Ext.getCmp('REP_TAB_DSC').setValue(TABLE.ADD_TAB_DESCRIPTION); - - // grid - comboReport.setDisabled(true); - if (TABLE.ADD_TAB_TYPE == 'GRID') { - Ext.getCmp('REP_TAB_GRID').setVisible(true); - gridsListStore.reload({params:{PRO_UID : Ext.getCmp('PROCESS').getValue()}}); - } - // db connections - comboDbConnections.getStore().reload({params:{PRO_UID : Ext.getCmp('PROCESS').getValue()}}); - - // loading available fields - //loadAvFieldsFromArray(avFieldsList); - //if (TABLE.ADD_TAB_TYPE == 'GRID') - //loadFieldsGrids(); - //else - if (TABLE.ADD_TAB_TYPE == 'NORMAL') - loadFieldNormal(); - - // loading table fields - loadTableRowsFromArray(TABLE.FIELDS); - } - } - } - }); - - processComboBox = new Ext.form.ComboBox({ - id: 'PROCESS', - fieldLabel : _("ID_CASESLIST_APP_PRO_TITLE"), - hiddenName : 'PRO_UID', - store : processStore, - emptyText: _("ID_EMPTY_PROCESSES"), - valueField : 'PRO_UID', - displayField : 'PRO_TITLE', - - //width: 180, - editable : true, - typeAhead: true, - mode: 'local', - autocomplete: true, - triggerAction: 'all', - forceSelection: true, - - listeners:{ - select: function(){ - var dataStoreAux = types.getRange(0); - comboReport.setValue(dataStoreAux[0].data.REP_TAB_TYPE); - comboGridsList.setVisible(false); - - comboDbConnections.getStore().reload({params: {PRO_UID: Ext.getCmp("PROCESS").getValue()}}); - if (Ext.getCmp('REP_TAB_TYPE').getValue() == 'GRID') { - gridsListStore.reload({params:{PRO_UID : Ext.getCmp('PROCESS').getValue()}}); - } else { - loadFieldNormal(); - } - } - } - }); - - var items = new Array(); - if (PRO_UID === false) - items.push(processComboBox); - - items.push({ - id: 'REP_TAB_NAME', - fieldLabel: _("ID_TABLE_NAME") + ' ('+_("ID_AUTO_PREFIX") + ' "PMT_")', - xtype:'textfield', - emptyText: _("ID_SET_A_TABLE_NAME"), - width: 250, - autoCreate: {tag: "input", type: "text", autocomplete: "off", maxlength: sizeTableName }, - stripCharsRe: /(\W+)/g, - listeners:{ - change: function(){ - this.setValue(this.getValue().toUpperCase()); - assignedGrid._setTitle(); - } - } - }); - items.push({ - id: 'REP_TAB_DSC', - fieldLabel: _("ID_DESCRIPTION"), - xtype:'textarea', - emptyText: _("ID_SET_TABLE_DESCRIPTION"), - width: 250, - height: 40, - allowBlank: true - }); - items.push({ - xtype: 'hidden', - name: 'REP_TAB_GRID', - value: 'GridComments-463650787492db06640c904001904930' - }); - items.push({ - xtype: 'compositefield', - fieldLabel: _("ID_TYPE"), - msgTarget : 'side', - anchor : '-20', - defaults : {flex: 1 }, - items: [comboReport, comboGridsList] - }); - items.push(comboDbConnections); - - - var frmDetailsConfig = { - id:'frmDetails', - region: 'north', - labelWidth: 180, - labelAlign:'right', - title: ADD_TAB_UID ? _('ID_REPORT_TABLE') : _('ID_NEW_REPORT_TABLE'), - bodyStyle:'padding:10px', - waitMsgTarget : true, - frame: true, - height: _plugin_permissions !== false ? 224 : 200, - defaults: { - allowBlank: false, - msgTarget: 'side', - align:'center' - }, - items: items - } - - var frmDetails = new Ext.FormPanel(frmDetailsConfig); - - southPanel = new Ext.FormPanel({ - region: 'south', - buttons:[ { - id: 'southPanelCreateUpdate', - text: TABLE === false ? _("ID_CREATE") : _("ID_UPDATE"), - handler: function() - { - if (TABLE === false) { - createReportTable(); - } else { - var oldRepTabName = TABLE.ADD_TAB_NAME; - var newRepTabName = Ext.getCmp("REP_TAB_NAME").getValue().trim(); - - if (newRepTabName != "") { - if (oldRepTabName != newRepTabName) { - Ext.MessageBox.show({ - title: _("ID_CONFIRM"), - msg: _("ID_RT_RENAME_NAME_TABLE"), - icon: Ext.MessageBox.QUESTION, - buttons: { - yes: _("ID_RT_CONTINUE_TABLE_RENAME"), - no: _("ID_RT_NOT_CHANGE_NAME") - }, - fn: function (buttonId, text, opt) - { - if (buttonId == "yes") { - createReportTable(); + var srcIndex = ds.indexOfId(rows[i].id); + ds.remove(ds.getById(rows[i].id)); + if (i > 0 && cindex < srcIndex) { + cindex++; + } + ds.insert(cindex, rows[i]); } + sm.selectRecords(rows); + } + } + } + }); + } + }, + _setTitle: function () { + this.setTitle(_('ID_REPORT_TABLE') + ': ' + Ext.getCmp('REP_TAB_NAME').getValue() + ' (' + store.getCount() + ' ' + _('ID_COLUMNS') + ')'); + } + }); + + // (vertical) selection buttons + buttonsPanel = new Ext.Panel({ + id: 'buttonsPanelVertical', + width: 40, + layout: { + type: 'vbox', + padding: '0', + pack: 'center', + align: 'center' + }, + defaults: {margins: '0 0 35 0'}, + items: [ + {xtype: 'button', text: '>', + handler: AssignFieldsAction, + id: 'assignButton', disabled: true + }, + {xtype: 'button', text: '<', + handler: RemoveFieldsAction, + id: 'removeButton', disabled: true + }, + {xtype: 'button', text: '>>', + handler: AssignAllFieldsAction, + id: 'assignButtonAll', disabled: false}, + {xtype: 'button', text: '<<', + handler: RemoveAllFieldsAction, + id: 'removeButtonAll', disabled: false + } + ] + + }); + + + FieldsPanel = new Ext.Panel({ + region: 'center', + width: 150, + layout: 'hbox', + defaults: {flex: 1}, //auto stretch + layoutConfig: {align: 'stretch'}, + items: [availableGrid, buttonsPanel, assignedGrid], + viewConfig: {forceFit: true} + + }); + + searchTextA = new Ext.form.TextField({ + id: 'searchTextA', + ctCls: 'pm_search_text_field', + allowBlank: true, + width: 110, + emptyText: _('ID_EMPTY_SEARCH'), + listeners: { + specialkey: function (f, e) { + if (e.getKey() == e.ENTER) { + DoSearchA(); + } + } + } + }); + + searchTextP = new Ext.form.TextField({ + id: 'searchTextP', + ctCls: 'pm_search_text_field', + allowBlank: true, + width: 110, + emptyText: _('ID_EMPTY_SEARCH'), + listeners: { + specialkey: function (f, e) { + if (e.getKey() == e.ENTER) { + DoSearchP(); + } + } + } + }); + + var types = new Ext.data.ArrayStore({ + storeId: "types", + autoDestroy: true, + + fields: ["REP_TAB_TYPE", "type"], + data: [['NORMAL', _("ID_GLOBAL")], ['GRID', _("ID_GRID")]] + }); + + comboReport = new Ext.form.ComboBox({ + id: 'REP_TAB_TYPE', + name: 'type', + fieldLabel: 'Type', + hiddenName: 'REP_TAB_TYPE', + mode: 'local', + store: types, + displayField: 'type', + valueField: 'REP_TAB_TYPE', + width: 120, + typeAhead: true, + triggerAction: 'all', + editable: false, + lazyRender: true, + value: typeof TABLE.ADD_TAB_TYPE != 'undefined' ? TABLE.ADD_TAB_TYPE : 'NORMAL', + listeners: { + select: function (combo, record, index) { + if (this.getValue() == 'NORMAL') { + Ext.getCmp('REP_TAB_GRID').setVisible(false); + loadFieldNormal(); + } else { + Ext.getCmp('availableGrid').store.removeAll(); + Ext.getCmp('REP_TAB_GRID').setVisible(true); + Ext.getCmp('REP_TAB_GRID').setValue(''); + gridsListStore.reload({params: {PRO_UID: PRO_UID !== false ? PRO_UID : Ext.getCmp('PROCESS').getValue()}}); + } + } + } + }); + + + dbConnectionsStore = new Ext.data.Store({ + proxy: new Ext.data.HttpProxy({ + url: '../pmTablesProxy/getDbConnectionsList', + method: 'POST' + }), + baseParams: { + PRO_UID: '' + }, + reader: new Ext.data.JsonReader({ + fields: [{name: 'DBS_UID'}, {name: 'DBS_NAME'}] + }), + listeners: { + load: function () { + if (TABLE !== false) { // is editing + defaultValue = TABLE.DBS_UID; + comboDbConnections.setDisabled(true); + } else { + defaultValue = 'workflow'; + } + + // set current editing process combobox + var i = this.findExact('DBS_UID', defaultValue, 0); + if (i > -1) { + comboDbConnections.setValue(this.getAt(i).data.DBS_UID); + comboDbConnections.setRawValue(this.getAt(i).data.DBS_NAME); + } else { + // DB COnnection deleted + Ext.Msg.alert(_('ID_ERROR'), _('ID_DB_CONNECTION_NOT_EXIST')); + } + } + } + }); + + comboDbConnections = new Ext.form.ComboBox({ + id: 'REP_TAB_CONNECTION', + fieldLabel: _("ID_DB_CONNECTION"), + hiddenName: 'DBS_UID', + store: dbConnectionsStore, + valueField: 'DBS_UID', + displayField: 'DBS_NAME', + triggerAction: 'all', + editable: false, + mode: 'local' + }); + + gridsListStore = new Ext.data.Store({ + proxy: new Ext.data.HttpProxy({ + url: '../pmTablesProxy/getDynafields', + method: 'POST' + }), + baseParams: { + PRO_UID: '', + TYPE: 'GRID' + }, + reader: new Ext.data.JsonReader({ + fields: [{name: 'FIELD_UID'}, {name: 'FIELD_NAME'}] + }), + listeners: { + load: function () { + if (TABLE !== false) { + var i = this.findExact('FIELD_UID', TABLE.ADD_TAB_GRID, 0); + if (i > -1) { + comboGridsList.setValue(this.getAt(i).data.FIELD_UID); + comboGridsList.setRawValue(this.getAt(i).data.FIELD_NAME); + comboGridsList.setDisabled(true); + + var available = Ext.getCmp('availableGrid'); + available.store.load({ + params: { + action: "getDynafields", + PRO_UID: PRO_UID !== false ? PRO_UID : Ext.getCmp('PROCESS').getValue(), + TYPE: 'GRID', + GRID_UID: Ext.getCmp('REP_TAB_GRID').getValue(), + start: 0, + limit: pageSize } }); } else { - createReportTable(); + Ext.Msg.alert(_('ID_ERROR'), _('ID_GRID_NO_EXIST')); } - } else { - PMExt.error( - _("ID_ERROR"), - _("ID_TABLE_NAME_IS_REQUIRED"), - function() - { - Ext.getCmp("REP_TAB_NAME").focus(); - } - ); } } } - }, { - id: 'southPanelCancel', - text:_("ID_CANCEL"), - handler: function() { - proParam = (typeof('flagProcessmap') != 'undefined' && flagProcessmap == 1) ? (PRO_UID !== false ? '?flagProcessmap=1&PRO_UID='+PRO_UID : '') : ''; - location.href = '../pmTables' + proParam; //history.back(); + }); + + comboGridsList = new Ext.form.ComboBox({ + id: 'REP_TAB_GRID', + fieldLabel: 'Grid', + hiddenName: 'FIELD_UID', + store: gridsListStore, + emptyText: _("ID_SELECT_GRID"), + valueField: 'FIELD_UID', + displayField: 'FIELD_NAME', + triggerAction: 'all', + width: 200, + editable: false, + mode: 'local', + listeners: { + afterrender: function () { + }, + select: function (combo, record, index) { + loadFieldsGrids(); + + } } - }] - }); + }); - var viewport = new Ext.Viewport({ - layout: 'border', - autoScroll: false, - items:[frmDetails, FieldsPanel, southPanel] - }); + processStore = new Ext.data.Store({ + autoLoad: true, + proxy: new Ext.data.HttpProxy({ + url: '../pmTablesProxy/getProcessList', + method: 'POST' + }), + baseParams: { + action: 'getProcessList' + }, + reader: new Ext.data.JsonReader({ + fields: [{name: "PRO_UID"}, {name: "PRO_TITLE"}, {name: "PRO_DESCRIPTION"}] + }), + listeners: { + load: function () { + if (TABLE !== false) { // is editing + // set current editing process combobox + var i = this.findExact('PRO_UID', TABLE.PRO_UID, 0); + if (i > -1) { + processComboBox.setValue(this.getAt(i).data.PRO_UID); + processComboBox.setRawValue(this.getAt(i).data.PRO_TITLE); + processComboBox.setDisabled(true); + } else { + // Process deleted + Ext.Msg.alert(_('ID_ERROR'), _('ID_PROCESS_NO_EXIST')); + } + // setting table attributes for current editing process + Ext.getCmp('REP_TAB_NAME').setValue(TABLE.ADD_TAB_NAME); + Ext.getCmp('REP_TAB_NAME').setDisabled(false); + Ext.getCmp('REP_TAB_DSC').setValue(TABLE.ADD_TAB_DESCRIPTION); - /*** Editing routines ***/ - if (TABLE !== false) { - if(TABLE.ADD_TAB_TYPE != 'GRID') - Ext.getCmp('REP_TAB_GRID').hide(); - } else { - Ext.getCmp('REP_TAB_GRID').hide(); - } + // grid + comboReport.setDisabled(true); + if (TABLE.ADD_TAB_TYPE == 'GRID') { + Ext.getCmp('REP_TAB_GRID').setVisible(true); + gridsListStore.reload({params: {PRO_UID: Ext.getCmp('PROCESS').getValue()}}); + } + // db connections + comboDbConnections.getStore().reload({params: {PRO_UID: Ext.getCmp('PROCESS').getValue()}}); - if (PRO_UID !== false) { - comboDbConnections.getStore().reload({params:{PRO_UID : PRO_UID}}); - if (Ext.getCmp('REP_TAB_TYPE').getValue() == 'GRID') { - gridsListStore.reload({params:{PRO_UID : PRO_UID}}); + // loading available fields + if (TABLE.ADD_TAB_TYPE == 'NORMAL') + loadFieldNormal(); + + // loading table fields + loadTableRowsFromArray(TABLE.FIELDS); + } + } + } + }); + + processComboBox = new Ext.form.ComboBox({ + id: 'PROCESS', + fieldLabel: _("ID_CASESLIST_APP_PRO_TITLE"), + hiddenName: 'PRO_UID', + store: processStore, + emptyText: _("ID_EMPTY_PROCESSES"), + valueField: 'PRO_UID', + displayField: 'PRO_TITLE', + editable: true, + typeAhead: true, + mode: 'local', + autocomplete: true, + triggerAction: 'all', + forceSelection: true, + + listeners: { + select: function () { + var dataStoreAux = types.getRange(0); + comboReport.setValue(dataStoreAux[0].data.REP_TAB_TYPE); + comboGridsList.setVisible(false); + PRO_UID = Ext.getCmp('PROCESS').getValue().trim(); + comboDbConnections.getStore().reload({params: {PRO_UID: PRO_UID}}); + if (Ext.getCmp('REP_TAB_TYPE').getValue() == 'GRID') { + gridsListStore.reload({params: {PRO_UID: PRO_UID}}); + } else { + loadFieldNormal(); + } + } + } + }); + + var items = new Array(); + if (PRO_UID === false) { + items.push(processComboBox); } - if (TABLE === false) { - if(TABLE.ADD_TAB_TYPE != 'GRID') - loadFieldNormal(); - } - } + items.push({ + id: 'REP_TAB_NAME', + fieldLabel: _("ID_TABLE_NAME") + ' (' + _("ID_AUTO_PREFIX") + ' "PMT_")', + xtype: 'textfield', + emptyText: _("ID_SET_A_TABLE_NAME"), + width: 250, + autoCreate: {tag: "input", type: "text", autocomplete: "off", maxlength: sizeTableName}, + stripCharsRe: /(\W+)/g, + listeners: { + change: function () { + this.setValue(this.getValue().toUpperCase()); + assignedGrid._setTitle(); + } + } + }); + items.push({ + id: 'REP_TAB_DSC', + fieldLabel: _("ID_DESCRIPTION"), + xtype: 'textarea', + emptyText: _("ID_SET_TABLE_DESCRIPTION"), + width: 250, + height: 40, + allowBlank: true + }); + items.push({ + xtype: 'hidden', + name: 'REP_TAB_GRID', + value: 'GridComments-463650787492db06640c904001904930' + }); + items.push({ + xtype: 'compositefield', + fieldLabel: _("ID_TYPE"), + msgTarget: 'side', + anchor: '-20', + defaults: {flex: 1}, + items: [comboReport, comboGridsList] + }); + items.push(comboDbConnections); - DDLoadFields(); + + var frmDetailsConfig = { + id: 'frmDetails', + region: 'north', + labelWidth: 180, + labelAlign: 'right', + title: ADD_TAB_UID ? _('ID_REPORT_TABLE') : _('ID_NEW_REPORT_TABLE'), + bodyStyle: 'padding:10px', + waitMsgTarget: true, + frame: true, + defaults: { + allowBlank: false, + msgTarget: 'side', + align: 'center' + }, + listeners: { + afterRender: function () { + this.setHeight('auto'); + } + }, + items: items + }; + + var frmDetails = new Ext.FormPanel(frmDetailsConfig); + + southPanel = new Ext.FormPanel({ + region: 'south', + buttons: [{ + id: 'southPanelCreateUpdate', + text: TABLE === false ? _("ID_CREATE") : _("ID_UPDATE"), + handler: function () + { + if (TABLE === false) { + createReportTable(); + } else { + var oldRepTabName = TABLE.ADD_TAB_NAME; + var newRepTabName = Ext.getCmp("REP_TAB_NAME").getValue().trim(); + + if (newRepTabName != "") { + if (oldRepTabName != newRepTabName) { + Ext.MessageBox.show({ + title: _("ID_CONFIRM"), + msg: _("ID_RT_RENAME_NAME_TABLE"), + icon: Ext.MessageBox.QUESTION, + buttons: { + yes: _("ID_RT_CONTINUE_TABLE_RENAME"), + no: _("ID_RT_NOT_CHANGE_NAME") + }, + fn: function (buttonId, text, opt) + { + if (buttonId == "yes") { + createReportTable(); + } + } + }); + } else { + createReportTable(); + } + } else { + PMExt.error( + _("ID_ERROR"), + _("ID_TABLE_NAME_IS_REQUIRED"), + function () + { + Ext.getCmp("REP_TAB_NAME").focus(); + } + ); + } + } + } + }, { + id: 'southPanelCancel', + text: _("ID_CANCEL"), + handler: function () { + proParam = (typeof ('flagProcessmap') != 'undefined' && flagProcessmap == 1) ? (PRO_UID !== false ? '?flagProcessmap=1&PRO_UID=' + PRO_UID : '') : ''; + location.href = '../pmTables' + proParam; + } + }] + }); + + var viewport = new Ext.Viewport({ + layout: 'border', + autoScroll: false, + items: [frmDetails, FieldsPanel, southPanel] + }); + + /*** Editing routines ***/ + if (TABLE !== false) { + if (TABLE.ADD_TAB_TYPE != 'GRID') { + Ext.getCmp('REP_TAB_GRID').hide(); + } + } else { + Ext.getCmp('REP_TAB_GRID').hide(); + } + + if (PRO_UID !== false) { + comboDbConnections.getStore().reload({params: {PRO_UID: PRO_UID}}); + if (Ext.getCmp('REP_TAB_TYPE').getValue() == 'GRID') { + gridsListStore.reload({params: {PRO_UID: PRO_UID}}); + } + + if (TABLE === false) { + if (TABLE.ADD_TAB_TYPE != 'GRID') { + loadFieldNormal(); + } + } + } + + DDLoadFields(); }); - - - - -////////////////////////////////////////////////////////////////////////////////////////// - function createReportTable() { - var tableName = Ext.getCmp('REP_TAB_NAME').getValue().trim(); - var tableDescription = Ext.getCmp('REP_TAB_DSC').getValue().trim(); + var tableName = Ext.getCmp('REP_TAB_NAME').getValue().trim(); + var tableDescription = Ext.getCmp('REP_TAB_DSC').getValue().trim(); - //validate table name - if(Ext.getCmp('REP_TAB_NAME').getValue().trim() == '') { - Ext.getCmp('REP_TAB_NAME').focus(); - PMExt.error(_('ID_ERROR'), _('ID_TABLE_NAME_IS_REQUIRED'), function(){ - Ext.getCmp('REP_TAB_NAME').focus(); - }); - return false; - } + //validate table name + if (Ext.getCmp('REP_TAB_NAME').getValue().trim() == '') { + Ext.getCmp('REP_TAB_NAME').focus(); + PMExt.error(_('ID_ERROR'), _('ID_TABLE_NAME_IS_REQUIRED'), function () { + Ext.getCmp('REP_TAB_NAME').focus(); + }); + return false; + } //validate process - PRO_UID = (PRO_UID !== false) ? PRO_UID : ((Ext.getCmp('PROCESS').getValue().trim() != '') ? Ext.getCmp('PROCESS').getValue().trim() : ''); - if(PRO_UID == '') { + PRO_UID = (PRO_UID !== false && PRO_UID !== "") ? PRO_UID : ((Ext.getCmp('PROCESS').getValue().trim() != '') ? Ext.getCmp('PROCESS').getValue().trim() : ''); + if (PRO_UID == '') { Ext.getCmp('PROCESS').focus(); - PMExt.error(_('ID_ERROR'), _('ID_PROCESS_IS_REQUIRED'), function(){ + PMExt.error(_('ID_ERROR'), _('ID_PROCESS_IS_REQUIRED'), function () { Ext.getCmp('PROCESS').focus(); }); return false; } - // validate table name length - if(tableName.length < 4) { - PMExt.error(_('ID_ERROR'), _('ID_TABLE_NAME_TOO_SHORT'), function(){ - Ext.getCmp('REP_TAB_NAME').focus(); - }); - return false; - } - - var allRows = assignedGrid.getStore(); - var columns = new Array(); - - var hasSomePrimaryKey = false; - - //validate columns count - if(allRows.getCount() == 0) { - PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT7')); - return false; - } - var fieldsNames = new Array(); - // Reserved Words - var reservedWords = new Array('DESC'); - - for (var r=0; r < allRows.getCount(); r++) { - row = allRows.getAt(r); - - if (in_array(row.data['field_name'], fieldsNames)) { - PMExt.error(_('ID_ERROR'),_('ID_PMTABLES_ALERT1') + ' ' + row.data['field_name']+''); - return false; - } - - for (j=0; j < reservedWords.length; j++) { - if (row.data['field_name'] == reservedWords[j]) { - PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_RESERVED_FIELDNAME_WARNING', reservedWords[j])); + // validate table name length + if (tableName.length < 4) { + PMExt.error(_('ID_ERROR'), _('ID_TABLE_NAME_TOO_SHORT'), function () { + Ext.getCmp('REP_TAB_NAME').focus(); + }); return false; - } } - // validate that fieldname is not empty - if(row.data['field_name'].trim() == '') { - PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT2')); - return false; + var allRows = assignedGrid.getStore(); + var columns = new Array(); + + var hasSomePrimaryKey = false; + + //validate columns count + if (allRows.getCount() == 0) { + PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT7')); + return false; } + var fieldsNames = new Array(); + // Reserved Words + var reservedWords = new Array('DESC'); - if(row.data['field_label'].trim() == '') { - PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT3')); - return false; - } + for (var r = 0; r < allRows.getCount(); r++) { + row = allRows.getAt(r); - // validate field size for varchar & int column types - if ((row.data['field_type'] == 'VARCHAR' || row.data['field_type'] == 'INTEGER') && row.data['field_size'] == '') { - PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT5')+' '+row.data['field_name']+' ('+row.data['field_type']+').'); - return false; - } - - if (row.data['field_index']) { - hasSomeIndex = true; - } else { - hasSomeIndex = false; - } - - if (row.data['field_key']) { - hasSomePrimaryKey = true; - } - - columns.push(row.data); - } - - Ext.Msg.show({ - title : '', - msg : TABLE !== false ? _('ID_UPDATING_TABLE') : _('ID_CREATING_TABLE'), - wait:true, - waitConfig: {interval:500} - }); - - Ext.Ajax.request({ - url: '../pmTablesProxy/save', - params: { - REP_TAB_UID : TABLE !== false ? TABLE.ADD_TAB_UID : '', - PRO_UID : PRO_UID !== false? PRO_UID : Ext.getCmp('PROCESS').getValue(), - REP_TAB_NAME : TABLE !== false ? tableName : 'PMT_' + tableName, - REP_TAB_DSC : tableDescription, - REP_TAB_CONNECTION : Ext.getCmp('REP_TAB_CONNECTION').getValue(), - REP_TAB_TYPE : Ext.getCmp('REP_TAB_TYPE').getValue(), - REP_TAB_GRID : Ext.getCmp('REP_TAB_TYPE').getValue()=='GRID'? Ext.getCmp('REP_TAB_GRID').getValue(): '', - columns : Ext.util.JSON.encode(columns) - }, - success: function(resp){ - result = Ext.util.JSON.decode(resp.responseText); - Ext.MessageBox.hide(); - - if (result.success) { - proParam = (typeof('flagProcessmap') != 'undefined' && flagProcessmap == 1) ? (PRO_UID !== false ? '?flagProcessmap=1&PRO_UID='+PRO_UID : '') : ''; - location.href = '../pmTables' + proParam; //history.back(); - } else { - PMExt.error(_('ID_ERROR'), result.type +': '+result.msg); - if (window.console && window.console.firebug) { - window.console.log(result.msg); - window.console.log(result.trace); + if (in_array(row.data['field_name'], fieldsNames)) { + PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT1') + ' ' + row.data['field_name'] + ''); + return false; } - } - }, - failure: function(obj, resp){ - Ext.Msg.alert( _('ID_ERROR'), resp.result.msg); + + for (j = 0; j < reservedWords.length; j++) { + if (row.data['field_name'] == reservedWords[j]) { + PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_RESERVED_FIELDNAME_WARNING', reservedWords[j])); + return false; + } + } + + // validate that fieldname is not empty + if (row.data['field_name'].trim() == '') { + PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT2')); + return false; + } + + if (row.data['field_label'].trim() == '') { + PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT3')); + return false; + } + + // validate field size for varchar & int column types + if ((row.data['field_type'] == 'VARCHAR' || row.data['field_type'] == 'INTEGER') && row.data['field_size'] == '') { + PMExt.error(_('ID_ERROR'), _('ID_PMTABLES_ALERT5') + ' ' + row.data['field_name'] + ' (' + row.data['field_type'] + ').'); + return false; + } + + if (row.data['field_index']) { + hasSomeIndex = true; + } else { + hasSomeIndex = false; + } + + if (row.data['field_key']) { + hasSomePrimaryKey = true; + } + + columns.push(row.data); } - }); + + Ext.Msg.show({ + title: '', + msg: TABLE !== false ? _('ID_UPDATING_TABLE') : _('ID_CREATING_TABLE'), + wait: true, + waitConfig: {interval: 500} + }); + + Ext.Ajax.request({ + url: '../pmTablesProxy/save', + params: { + REP_TAB_UID: TABLE !== false ? TABLE.ADD_TAB_UID : '', + PRO_UID: PRO_UID !== false ? PRO_UID : Ext.getCmp('PROCESS').getValue(), + REP_TAB_NAME: TABLE !== false ? tableName : 'PMT_' + tableName, + REP_TAB_DSC: tableDescription, + REP_TAB_CONNECTION: Ext.getCmp('REP_TAB_CONNECTION').getValue(), + REP_TAB_TYPE: Ext.getCmp('REP_TAB_TYPE').getValue(), + REP_TAB_GRID: Ext.getCmp('REP_TAB_TYPE').getValue() == 'GRID' ? Ext.getCmp('REP_TAB_GRID').getValue() : '', + columns: Ext.util.JSON.encode(columns) + }, + success: function (resp) { + result = Ext.util.JSON.decode(resp.responseText); + Ext.MessageBox.hide(); + + if (result.success) { + proParam = (typeof ('flagProcessmap') != 'undefined' && flagProcessmap == 1) ? (PRO_UID !== false ? '?flagProcessmap=1&PRO_UID=' + PRO_UID : '') : ''; + location.href = '../pmTables' + proParam; + } else { + PMExt.error(_('ID_ERROR'), result.type + ': ' + result.msg); + if (window.console && window.console.firebug) { + window.console.log(result.msg); + window.console.log(result.trace); + } + } + }, + failure: function (obj, resp) { + Ext.Msg.alert(_('ID_ERROR'), resp.result.msg); + } + }); } //end createReportTable //add custon column for assignedGrid function addColumn() { - if (!verifyTableLimit()) { - return false; - } + if (!verifyTableLimit()) { + return false; + } - var PMRow = assignedGrid.getStore().recordType; - var row = new PMRow({ - uid : '', - field_uid : '', - field_dyn : '', - field_name : '', - field_label : '', - field_type : '', - field_size : '', - field_key : 0, - field_index : 0, - field_null : 1 - }); - var len = assignedGrid.getStore().data.length; + var PMRow = assignedGrid.getStore().recordType; + var row = new PMRow({ + uid: '', + field_uid: '', + field_dyn: '', + field_name: '', + field_label: '', + field_type: '', + field_size: '', + field_key: 0, + field_index: 0, + field_null: 1 + }); + var len = assignedGrid.getStore().data.length; - editor.stopEditing(); - store.insert(len, row); - assignedGrid.getView().refresh(); - assignedGrid.getSelectionModel().selectRow(len); - editor.startEditing(len); + editor.stopEditing(); + store.insert(len, row); + assignedGrid.getView().refresh(); + assignedGrid.getSelectionModel().selectRow(len); + editor.startEditing(len); } function removeColumn() { - PMExt.confirm(_('ID_CONFIRM'), _('ID_CONFIRM_REMOVE_FIELD'), function(){ - var records = Ext.getCmp('assignedGrid').getSelectionModel().getSelections(); - Ext.each(records, Ext.getCmp('assignedGrid').store.remove, Ext.getCmp('assignedGrid').store); - }); + PMExt.confirm(_('ID_CONFIRM'), _('ID_CONFIRM_REMOVE_FIELD'), function () { + var records = Ext.getCmp('assignedGrid').getSelectionModel().getSelections(); + Ext.each(records, Ext.getCmp('assignedGrid').store.remove, Ext.getCmp('assignedGrid').store); + }); } function editorFieldsEnableDisable(fieldTypeValue, fieldIndex, fieldInc, sizeEdit) @@ -1325,11 +1297,11 @@ function editorFieldsEnableDisable(fieldTypeValue, fieldIndex, fieldInc, sizeEdi //Numbers if (fieldTypeValue == "INTEGER" || fieldTypeValue == "BIGINT") { - //Enable All + //Enable All } if (fieldTypeValue == "TINYINT" || fieldTypeValue == "SMALLINT") { - swSize = 0; + swSize = 0; } if (fieldTypeValue == "DECIMAL" || fieldTypeValue == "FLOAT") { @@ -1339,10 +1311,10 @@ function editorFieldsEnableDisable(fieldTypeValue, fieldIndex, fieldInc, sizeEdi } if (fieldTypeValue == "DOUBLE" || fieldTypeValue == "REAL") { - swSize = 0; - swPK = 0; - swAI = 0; - swI = 0; + swSize = 0; + swPK = 0; + swAI = 0; + swI = 0; } //String @@ -1364,14 +1336,14 @@ function editorFieldsEnableDisable(fieldTypeValue, fieldIndex, fieldInc, sizeEdi swAI = 0; swI = 0; } -/*----------------------------------********---------------------------------*/ + /*----------------------------------********---------------------------------*/ if (swI == 1) { fieldIndex.enable(); } else { fieldIndex.disable(); fieldIndex.setValue(false); } -/*----------------------------------********---------------------------------*/ + /*----------------------------------********---------------------------------*/ if (swAI == 1) { fieldInc.enable(); } else { @@ -1394,382 +1366,381 @@ function editorFieldsEnableDisable(fieldTypeValue, fieldIndex, fieldInc, sizeEdi sizeEdit.setValue(""); } } -////ASSIGNBUTON FUNCTIONALITY -AssignFieldsAction = function(){ - records = Ext.getCmp('availableGrid').getSelectionModel().getSelections(); - setReportFields(records); +//ASSIGNBUTON FUNCTIONALITY +AssignFieldsAction = function () { + records = Ext.getCmp('availableGrid').getSelectionModel().getSelections(); + setReportFields(records); }; //RemoveButton Functionality -RemoveFieldsAction = function(){ - records = Ext.getCmp('assignedGrid').getSelectionModel().getSelections(); - //remove from source grid - unsetReportFields(records); +RemoveFieldsAction = function () { + records = Ext.getCmp('assignedGrid').getSelectionModel().getSelections(); + //remove from source grid + unsetReportFields(records); }; //AssignALLButton Functionality -AssignAllFieldsAction = function(){ - var avStore = Ext.getCmp('availableGrid').getStore(); - var records = new Array(); +AssignAllFieldsAction = function () { + var avStore = Ext.getCmp('availableGrid').getStore(); + var records = new Array(); - if (avStore.getCount() > 0){ - for (i=0; i < avStore.getCount(); i++){ - records[i] = avStore.getAt(i); + if (avStore.getCount() > 0) { + for (i = 0; i < avStore.getCount(); i++) { + records[i] = avStore.getAt(i); + } + setReportFields(records); } - setReportFields(records); - } }; //RevomeALLButton Functionality -RemoveAllFieldsAction = function(){ +RemoveAllFieldsAction = function () { - if (store.getCount() > 100) { - PMExt.info(_('ID_NOTICE'), _('ID_ACTION_DISABLED_TO_LOW_PERFORMANCE_1') + _('ID_ACTION_DISABLED_TO_LOW_PERFORMANCE_2') ); - return ; - } - - var allRows = Ext.getCmp('assignedGrid').getStore(); - var records = new Array(); - if (allRows.getCount() > 0) { - for (var i=0; i < allRows.getCount(); i++){ - records[i] = allRows.getAt(i); + if (store.getCount() > 100) { + PMExt.info(_('ID_NOTICE'), _('ID_ACTION_DISABLED_TO_LOW_PERFORMANCE_1') + _('ID_ACTION_DISABLED_TO_LOW_PERFORMANCE_2')); + return; + } + + var allRows = Ext.getCmp('assignedGrid').getStore(); + var records = new Array(); + if (allRows.getCount() > 0) { + for (var i = 0; i < allRows.getCount(); i++) { + records[i] = allRows.getAt(i); + } + //remove from source grid + unsetReportFields(records); } - //remove from source grid - unsetReportFields(records); - } }; //INITIAL FIELDS GRIDS -loadFieldNormal = function(){ - Ext.getCmp('availableGrid').store.removeAll(); - Ext.getCmp('availableGrid').store.load({ - params: { - action: "getDynafields", - PRO_UID: PRO_UID !== false ? PRO_UID : Ext.getCmp('PROCESS').getValue(), - start: 0, - limit: pageSize, - loadField: 1 +loadFieldNormal = function () { + Ext.getCmp('availableGrid').store.removeAll(); + Ext.getCmp('availableGrid').store.load({ + params: { + action: "getDynafields", + PRO_UID: PRO_UID !== false ? PRO_UID : Ext.getCmp('PROCESS').getValue(), + start: 0, + limit: pageSize, + loadField: 1 + } + }); + var assignedGridGotData = Ext.getCmp('assignedGrid').getStore().getCount() > 0; + if (assignedGridGotData) { + Ext.MessageBox.confirm(_('ID_CONFIRM'), _('ID_CONFIRM_ASSIGNED_GRID'), function (button) { + if (button == 'yes') { + Ext.getCmp('assignedGrid').store.removeAll(); + } + }); } - }); - var assignedGridGotData = Ext.getCmp('assignedGrid').getStore().getCount() > 0; - if(assignedGridGotData) { - Ext.MessageBox.confirm(_('ID_CONFIRM'), _('ID_CONFIRM_ASSIGNED_GRID'), function(button) { - if(button=='yes'){ - Ext.getCmp('assignedGrid').store.removeAll(); - } - }); - } }; -loadFieldsGrids = function(){ - var available = Ext.getCmp('availableGrid'); - available.store.removeAll(); +loadFieldsGrids = function () { + var available = Ext.getCmp('availableGrid'); + available.store.removeAll(); - available.store.load({ - params: { - action: "getDynafields", - PRO_UID: PRO_UID !== false ? PRO_UID : Ext.getCmp('PROCESS').getValue(), - TYPE: 'GRID', - GRID_UID: Ext.getCmp('REP_TAB_GRID').getValue(), - start: 0, - limit: pageSize, - loadField: 1 - } - }); + available.store.load({ + params: { + action: "getDynafields", + PRO_UID: PRO_UID !== false ? PRO_UID : Ext.getCmp('PROCESS').getValue(), + TYPE: 'GRID', + GRID_UID: Ext.getCmp('REP_TAB_GRID').getValue(), + start: 0, + limit: pageSize, + loadField: 1 + } + }); - var assigned = Ext.getCmp('assignedGrid'); - assigned.store.removeAll(); + var assigned = Ext.getCmp('assignedGrid'); + assigned.store.removeAll(); }; //REFRESH FIELDS GRIDS -RefreshFields = function(){ - var available = Ext.getCmp('availableGrid'); - available.store.load({params: {"action":"deleteFieldsReportTables", "PRO_UID":PRO_UID }}); - var assigned = Ext.getCmp('assignedGrid'); - assigned.store.load({params: {"action":"assignedFieldsReportTables", "PRO_UID":PRO_UID }}); +RefreshFields = function () { + var available = Ext.getCmp('availableGrid'); + available.store.load({params: {"action": "deleteFieldsReportTables", "PRO_UID": PRO_UID}}); + var assigned = Ext.getCmp('assignedGrid'); + assigned.store.load({params: {"action": "assignedFieldsReportTables", "PRO_UID": PRO_UID}}); }; //FAILURE AJAX FUNCTION -FailureFields = function(){ - Ext.Msg.alert(_('ID_GROUPS'), _('ID_MSG_AJAX_FAILURE')); +FailureFields = function () { + Ext.Msg.alert(_('ID_GROUPS'), _('ID_MSG_AJAX_FAILURE')); }; // drag & drop handler -var DDLoadFields = function(){ - var availableGridDropTargetEl = availableGrid.getView().scroller.dom; - var availableGridDropTarget = new Ext.dd.DropTarget(availableGridDropTargetEl, { - ddGroup : 'availableGridDDGroup', - notifyDrop : function(ddSource, e, data){ - var records = ddSource.dragData.selections; - unsetReportFields(records); - return true; - } - }); +var DDLoadFields = function () { + var availableGridDropTargetEl = availableGrid.getView().scroller.dom; + var availableGridDropTarget = new Ext.dd.DropTarget(availableGridDropTargetEl, { + ddGroup: 'availableGridDDGroup', + notifyDrop: function (ddSource, e, data) { + var records = ddSource.dragData.selections; + unsetReportFields(records); + return true; + } + }); - //droptarget on grid forassignment - var assignedGridDropTargetEl = assignedGrid.getView().scroller.dom; - var assignedGridDropTarget = new Ext.dd.DropTarget(assignedGridDropTargetEl, { - ddGroup : 'assignedGridDDGroup', - notifyDrop : function(ddSource, e, data){ - //add on target grid - setReportFields(ddSource.dragData.selections) - return true; - } - }); - //sw_func_groups = true; + //droptarget on grid forassignment + var assignedGridDropTargetEl = assignedGrid.getView().scroller.dom; + var assignedGridDropTarget = new Ext.dd.DropTarget(assignedGridDropTargetEl, { + ddGroup: 'assignedGridDDGroup', + notifyDrop: function (ddSource, e, data) { + //add on target grid + setReportFields(ddSource.dragData.selections) + return true; + } + }); }; function setReportFields(records) { - mainMask.show(); + mainMask.show(); - var PMRow = assignedGrid.getStore().recordType; - var indexes = new Array(); + var PMRow = assignedGrid.getStore().recordType; + var indexes = new Array(); - for (i=0; i < records.length; i++) { - if (!verifyTableLimit()) { - return false; + for (i = 0; i < records.length; i++) { + if (!verifyTableLimit()) { + return false; + } + + var meta = mapPMFieldType(records[i].data['FIELD_UID']); + var typeField = meta.type; + var sizeField = meta.size; + if (records[i].data['FIELD_VALIDATE'].toUpperCase() == 'REAL') { + typeField = 'DOUBLE'; + sizeField = ''; + } + if (records[i].data['FIELD_VALIDATE'].toUpperCase() == 'INT') { + typeField = 'INTEGER'; + } + var row = new PMRow({ + uid: '', + _index: records[i].data['_index'] !== '' ? records[i].data['_index'] : records[i].data['FIELD_DYN'], + field_uid: records[i].data['FIELD_UID'], + field_dyn: records[i].data['FIELD_NAME'], + field_name: records[i].data['FIELD_NAME'].toUpperCase(), + field_label: records[i].data['FIELD_NAME'].toUpperCase(), + field_type: typeField, + field_size: sizeField, + field_key: 0, + field_index: 0, + field_null: 1, + field_filter: 0, + field_autoincrement: 0 + }); + + store.add(row); + indexes.push(records[i].data['_index']); } - var meta = mapPMFieldType(records[i].data['FIELD_UID']); - var typeField = meta.type; - var sizeField = meta.size; - if (records[i].data['FIELD_VALIDATE'].toUpperCase() == 'REAL') { - typeField = 'DOUBLE'; - sizeField = ''; + //remove from source grid + Ext.each(records, availableGrid.store.remove, availableGrid.store); + + if (indexes.length == 0) { + mainMask.hide(); + return; } - if (records[i].data['FIELD_VALIDATE'].toUpperCase() == 'INT') { - typeField = 'INTEGER'; - } - var row = new PMRow({ - uid : '', - _index : records[i].data['_index'] !== '' ? records[i].data['_index'] : records[i].data['FIELD_DYN'], - field_uid : records[i].data['FIELD_UID'], - field_dyn : records[i].data['FIELD_NAME'], - field_name : records[i].data['FIELD_NAME'].toUpperCase(), - field_label : records[i].data['FIELD_NAME'].toUpperCase(), - field_type : typeField, - field_size : sizeField, - field_key : 0, - field_index : 0, - field_null : 1, - field_filter : 0, - field_autoincrement : 0 + + //update on server + Ext.Ajax.request({ + url: '../pmTablesProxy/updateAvDynafields', + params: { + PRO_UID: PRO_UID !== false ? PRO_UID : Ext.getCmp('PROCESS').getValue(), + indexes: indexes.join(','), + isset: false + }, + success: function (resp) { + result = Ext.util.JSON.decode(resp.responseText); + + availableGrid.store.lastOptions.params.loadField = 0; + availableGrid.store.reload(); + } }); - - store.add(row); - indexes.push(records[i].data['_index']); - } - - //remove from source grid - Ext.each(records, availableGrid.store.remove, availableGrid.store); - - if (indexes.length == 0) { - mainMask.hide(); - return; - } - - //update on server - Ext.Ajax.request({ - url: '../pmTablesProxy/updateAvDynafields', - params: { - PRO_UID : PRO_UID !== false? PRO_UID : Ext.getCmp('PROCESS').getValue(), - indexes : indexes.join(','), - isset : false - }, - success: function(resp){ - result = Ext.util.JSON.decode(resp.responseText); - - availableGrid.store.lastOptions.params.loadField = 0; - availableGrid.store.reload(); - } - }); } function unsetReportFields(records) { - mainMask.show(); + mainMask.show(); - var PMRow = availableGrid.getStore().recordType; - var indexes = new Array(); - var recordsUsrDef = new Array(); - var fieldName = ''; + var PMRow = availableGrid.getStore().recordType; + var indexes = new Array(); + var recordsUsrDef = new Array(); + var fieldName = ''; - for (i=0; i < records.length; i++) { - if (records[i].data['field_dyn'] != '') { - var row = new PMRow({ - FIELD_UID: records[i].data['field_uid'], - FIELD_NAME: records[i].data['field_dyn'] - }); - availableGrid.getStore().add(row); - ix = records[i].data['_index'] != '' ? records[i].data['_index'] : records[i].data['field_dyn'] - indexes.push(ix); - } else { - if ( records[i].data['field_name'] == 'APP_UID' - || records[i].data['field_name'] == 'APP_NUMBER' - || records[i].data['field_name'] == 'ROW') - { - records[i] = null; - } - else { - if (records[i].data['field_dyn'] == '' || records[i].data['field_dyn'] == null) { - if (fieldName.length > 0) { - fieldName += ', ' - } - fieldName += records[i].data['field_name']; - recordsUsrDef.push(records[i]); - records[i] = null; + for (i = 0; i < records.length; i++) { + if (records[i].data['field_dyn'] != '') { + var row = new PMRow({ + FIELD_UID: records[i].data['field_uid'], + FIELD_NAME: records[i].data['field_dyn'] + }); + availableGrid.getStore().add(row); + ix = records[i].data['_index'] != '' ? records[i].data['_index'] : records[i].data['field_dyn'] + indexes.push(ix); + } else { + if (records[i].data['field_name'] == 'APP_UID' + || records[i].data['field_name'] == 'APP_NUMBER' + || records[i].data['field_name'] == 'ROW') + { + records[i] = null; + } else { + if (records[i].data['field_dyn'] == '' || records[i].data['field_dyn'] == null) { + if (fieldName.length > 0) { + fieldName += ', ' + } + fieldName += records[i].data['field_name']; + recordsUsrDef.push(records[i]); + records[i] = null; + } + } } - } } - } - Ext.each(records, assignedGrid.store.remove, assignedGrid.store); + Ext.each(records, assignedGrid.store.remove, assignedGrid.store); - if (recordsUsrDef.length > 0 ) { - PMExt.confirm(_('ID_CONFIRM'), _('ID_CONFIRM_REMOVE_FIELDS') + ' ' + fieldName + '?', function(){ - Ext.each(recordsUsrDef, assignedGrid.store.remove, assignedGrid.store); + if (recordsUsrDef.length > 0) { + PMExt.confirm(_('ID_CONFIRM'), _('ID_CONFIRM_REMOVE_FIELDS') + ' ' + fieldName + '?', function () { + Ext.each(recordsUsrDef, assignedGrid.store.remove, assignedGrid.store); + }); + } + + if (indexes.length == 0) { + mainMask.hide(); + return; + } + + //update on server + Ext.Ajax.request({ + url: '../pmTablesProxy/updateAvDynafields', + params: { + PRO_UID: PRO_UID !== false ? PRO_UID : Ext.getCmp('PROCESS').getValue(), + indexes: indexes.join(','), + isset: true + }, + success: function (resp) { + result = Ext.util.JSON.decode(resp.responseText); + + availableGrid.store.lastOptions.params.loadField = 0; + availableGrid.store.reload(); + } }); - } - - if (indexes.length == 0) { - mainMask.hide(); - return; - } - - //update on server - Ext.Ajax.request({ - url: '../pmTablesProxy/updateAvDynafields', - params: { - PRO_UID : PRO_UID !== false? PRO_UID : Ext.getCmp('PROCESS').getValue(), - indexes : indexes.join(','), - isset : true - }, - success: function(resp){ - result = Ext.util.JSON.decode(resp.responseText); - - availableGrid.store.lastOptions.params.loadField = 0; - availableGrid.store.reload(); - } - }); } - function loadTableRowsFromArray(records) { - var PMRow = assignedGrid.getStore().recordType; - if (records.length == 0) return; + var PMRow = assignedGrid.getStore().recordType; + if (records.length == 0) + return; - for (i=0;i= 255 ) { - mainMask.hide(); - PMExt.info(_('ID_NOTICE'), _('ID_MAX_LIMIT_COLUMNS_FOR_DATABASE') ); - assignedGrid._setTitle(); - return false; - } - return true; + if (store.getCount() >= 255) { + mainMask.hide(); + PMExt.info(_('ID_NOTICE'), _('ID_MAX_LIMIT_COLUMNS_FOR_DATABASE')); + assignedGrid._setTitle(); + return false; + } + return true; } function in_array(needle, haystack) { - for(var i in haystack) { - if(haystack[i] == needle) return true; - } - return false; + for (var i in haystack) { + if (haystack[i] == needle) { + return true; + } + } + return false; } diff --git a/workflow/engine/templates/processes/main.js b/workflow/engine/templates/processes/main.js index 07f5a895f..11fffc19d 100644 --- a/workflow/engine/templates/processes/main.js +++ b/workflow/engine/templates/processes/main.js @@ -40,12 +40,9 @@ var supportedProcessTypes = { fn = fn.replace(/\s/g, "_"); fn = fn.replace(/\-/g, "_"); fn = fn + "DesignerGridRowDblClick"; - - // Todo We should remove eval functions as they are NSFW - eval("var flag = typeof(" + fn + ") == \"function\";"); - - if (flag) { - eval(fn + "(rowSelected.data);"); + fn = window[fn]; + if (typeof fn === "function") { + fn(rowSelected.data); } else { disabledProcessTypeMessage(); } @@ -322,7 +319,8 @@ Ext.onReady(function(){ newTypeProcess = { xtype: "tbsplit", text: _("ID_NEW"), - iconCls: "button_menu_ext ss_sprite ss_add", + iconCls: "button_menu_ext", + icon: "/images/add_18.png", menu: arrayMenuNewOption, listeners: { "click": function (obj, e) @@ -344,7 +342,8 @@ Ext.onReady(function(){ } newTypeProcess = { text: _("ID_NEW"), - iconCls: "button_menu_ext ss_sprite ss_add", + iconCls: "button_menu_ext", + icon: "/images/add_18.png", handler: handler }; } @@ -480,8 +479,8 @@ Ext.onReady(function(){ '-' ,{ text: _('ID_EDIT'), - iconCls: 'button_menu_ext ss_sprite ss_pencil', - //icon: '/images/edit.gif', + iconCls: 'button_menu_ext', + icon: '/images/pencil.png', handler: editProcess },/*{ text: 'Edit (New Editor)', @@ -497,7 +496,8 @@ Ext.onReady(function(){ disabled:true },{ text: _('ID_DELETE'), - iconCls: "button_menu_ext ss_sprite ss_cross", + iconCls: "button_menu_ext", + icon: "/images/delete_16.png", handler:deleteProcess },{ xtype: 'tbseparator' @@ -513,7 +513,8 @@ Ext.onReady(function(){ },{ id: 'deleteCasesId', text: _('ID_DELETE_CASES'), - iconCls: "button_menu_ext ss_sprite ss_cross", + iconCls: "button_menu_ext", + icon: "/images/delete_16.png", handler: deleteCases, hidden: true },{ @@ -702,7 +703,8 @@ Ext.onReady(function(){ var arrayContextMenuOption = [ { text: _("ID_EDIT"), - iconCls: "button_menu_ext ss_sprite ss_pencil", + iconCls: "button_menu_ext", + icon: "/images/pencil.png", handler: editProcess }, { @@ -718,7 +720,8 @@ Ext.onReady(function(){ }, { text: _("ID_DELETE"), - iconCls: "button_menu_ext ss_sprite ss_cross", + iconCls: "button_menu_ext", + icon: "/images/delete_16.png", handler: deleteProcess }, menuExportOption, diff --git a/workflow/engine/templates/reportTables/edit.js b/workflow/engine/templates/reportTables/edit.js index 85c11acf7..006e46c6b 100644 --- a/workflow/engine/templates/reportTables/edit.js +++ b/workflow/engine/templates/reportTables/edit.js @@ -1191,43 +1191,44 @@ function loadAvFieldsFromArray(records) function mapPMFieldType(id) { - var meta = id.split('-'); + var meta = id.split('-'); - switch(meta[1]) { - case 'text': - case 'password': - case 'dropdown': - case 'yesno': - case 'checkbox': - case 'radiogroup': - case 'hidden': - typeField='VARCHAR'; - sizeField='32'; - break; - case 'currency': - typeField='INT'; - sizeField='11'; - break; - case 'percentage': - typeField='FLOAT'; - sizeField='11'; - break; - case 'date': - typeField='DATE'; - sizeField=''; - break; - case 'textarea': - typeField='TEXT'; - sizeField=''; - break; + switch (meta[1]) { + case 'text': + case 'password': + case 'dropdown': + case 'yesno': + case 'checkbox': + case 'radio': + case 'radiogroup': + case 'hidden': + typeField = 'VARCHAR'; + sizeField = '255'; + break; + case 'currency': + typeField = 'INT'; + sizeField = '11'; + break; + case 'percentage': + typeField = 'FLOAT'; + sizeField = '11'; + break; + case 'date': + typeField = 'DATE'; + sizeField = ''; + break; + case 'textarea': + typeField = 'VARCHAR'; + sizeField = '255'; + break; - default: - typeField='TEXT'; - sizeField=''; - break; - } + default: + typeField = 'VARCHAR'; + sizeField = '255'; + break; + } - return {type:typeField, size:sizeField}; + return {type: typeField, size: sizeField}; } Ext.override(Ext.form.TextField, { diff --git a/workflow/engine/templates/setup/newSite.js b/workflow/engine/templates/setup/newSite.js index 8d08c7164..3a251f5e4 100644 --- a/workflow/engine/templates/setup/newSite.js +++ b/workflow/engine/templates/setup/newSite.js @@ -6,8 +6,10 @@ Ext.Ajax.timeout = 300000; Ext.onReady(function(){ + var fieldNameWS, + wspaceAdmWS; - var fieldNameWS=new Ext.form.TextField({ + fieldNameWS=new Ext.form.TextField({ id: 'NW_TITLE', fieldLabel: _('ID_NAME'), xtype:'textfield', @@ -82,45 +84,64 @@ Ext.onReady(function(){ ] }); - wspaceAdmWS = new Ext.form.FieldSet({ - title: _('ID_WORKSPACE_ADMINISTRATOR'), - items: [ - { - id: 'NW_USERNAME', - fieldLabel: _('ID_USERNAME'), - xtype:'textfield', - value:'admin', - width: 200, - allowBlank: false - }, - { - id: 'NW_PASSWORD', - fieldLabel: _('ID_PASSWORD_ADMIN'), - xtype:'textfield', - inputType:'password', - value:'admin', - width: 200, - allowBlank: false, - validator: function (v) { - v = v.trim(); - return !/^\s+$/.test(v); - } - }, - { - id: 'NW_PASSWORD2', - fieldLabel: _('ID_PASSWORD_ADMIN_RETYPE'), - xtype:'textfield', - inputType:'password', - value:'admin', - width: 200, - allowBlank: false, - validator: function (v) { - v = v.trim(); - return !/^\s+$/.test(v); - } - } - ] - }); + wspaceAdmWS = new Ext.form.FieldSet({ + title: _('ID_WORKSPACE_ADMINISTRATOR'), + items: [ + { + id: 'NW_USERNAME', + fieldLabel: _('ID_USERNAME'), + xtype: 'textfield', + value: 'admin', + width: 200, + allowBlank: false + }, + { + id: 'NW_PASSWORD', + fieldLabel: _('ID_PASSWORD_ADMIN'), + xtype: 'textfield', + inputType: 'password', + value: 'admin', + width: 200, + allowBlank: false, + validator: function (v) { + v = v.trim(); + return !/^\s+$/.test(v); + }, + enableKeyEvents: true, + listeners: { + keyup: function () { + validationPassword(); + } + } + }, + { + id: 'NW_PASSWORD2', + fieldLabel: _('ID_PASSWORD_ADMIN_RETYPE'), + xtype: 'textfield', + inputType: 'password', + value: 'admin', + width: 200, + allowBlank: false, + validator: function (v) { + v = v.trim(); + return !/^\s+$/.test(v); + }, + enableKeyEvents: true, + listeners: { + keyup: function () { + validationPassword(); + } + } + }, + { + xtype: 'label', + fieldLabel: ' ', + id:'passwordConfirm', + width: 200, + labelSeparator: '' + } + ] + }); formNewSite = new Ext.FormPanel({ @@ -167,40 +188,49 @@ Ext.onReady(function(){ formNewSite.getForm().reset(); Ext.getCmp('_idTest').enable(); } - function TestSite(){ - formNewSite.getForm().submit({ - url: '../newSiteProxy/testingNW', - params: { - action : 'test' - }, - waitMsg : _('ID_NEW_SITE_TESTING'), - waitTitle : " ", - success: function(f,a){ - nwTitle =formNewSite.getForm().findField('NW_TITLE').getValue(); - aoDbWf =formNewSite.getForm().findField('AO_DB_WF').getValue(); - aoDbRb =aoDbWf; - aoDbRp =aoDbWf; - nwUsername =formNewSite.getForm().findField('NW_USERNAME').getValue(); - nwPassword = formNewSite.getForm().findField('NW_PASSWORD').getValue().trim(); - nwPassword2 = formNewSite.getForm().findField('NW_PASSWORD2').getValue().trim(); - aoDbDrop=formNewSite.getForm().findField('AO_DB_DROP').getValue(); - createNW(nwTitle, aoDbWf, aoDbRb, aoDbRp, nwUsername, nwPassword, nwPassword2); - }, - failure: function(f,a){ - if (a.failureType === Ext.form.Action.CONNECT_FAILURE){ - Ext.Msg.alert(_('ID_FAILURE'), _('ID_SERVER_REPORTED') + ':' + a.response.status+' '+a.response.statusText); - } - if (a.failureType === Ext.form.Action.SERVER_INVALID){ - var text = JSON.parse(a.response.responseText); - if (typeof(text.message) != 'undefined') { - Ext.Msg.alert(_('ID_ERROR'), _('ID_MYSQL_ERROR', text.message)); - } else { - Ext.Msg.alert(_('ID_WARNING'), _('NEW_SITE_NOT_AVAILABLE')); - } - } - } - }); - } + +/** + * Test for create new Site. + * @constructor + */ + function TestSite() { + if (validationPassword()) { + formNewSite.getForm().submit({ + url: '../newSiteProxy/testingNW', + params: { + action: 'test' + }, + waitMsg: _('ID_NEW_SITE_TESTING'), + waitTitle: " ", + success: function (f, a) { + nwTitle = formNewSite.getForm().findField('NW_TITLE').getValue(); + aoDbWf = formNewSite.getForm().findField('AO_DB_WF').getValue(); + aoDbRb = aoDbWf; + aoDbRp = aoDbWf; + nwUsername = formNewSite.getForm().findField('NW_USERNAME').getValue(); + nwPassword = formNewSite.getForm().findField('NW_PASSWORD').getValue().trim(); + nwPassword2 = formNewSite.getForm().findField('NW_PASSWORD2').getValue().trim(); + aoDbDrop = formNewSite.getForm().findField('AO_DB_DROP').getValue(); + createNW(nwTitle, aoDbWf, aoDbRb, aoDbRp, nwUsername, nwPassword, nwPassword2); + }, + failure: function (f, a) { + if (a.failureType === Ext.form.Action.CONNECT_FAILURE) { + Ext.Msg.alert(_('ID_FAILURE'), _('ID_SERVER_REPORTED') + ':' + a.response.status + ' ' + a.response.statusText); + } + if (a.failureType === Ext.form.Action.SERVER_INVALID) { + var text = JSON.parse(a.response.responseText); + if (typeof(text.message) !== 'undefined') { + Ext.Msg.alert(_('ID_ERROR'), _('ID_MYSQL_ERROR', text.message)); + } else { + Ext.Msg.alert(_('ID_WARNING'), _('NEW_SITE_NOT_AVAILABLE')); + } + } + } + }); + } else { + Ext.Msg.alert( _('ID_ERROR'), _('ID_PASSWORDS_DONT_MATCH')); + } +} function createNW(nwTitle, aoDbWf, aoDbRb, aoDbRp, nwUsername, nwPassword, nwPassword2){ PMExt.confirm(_('ID_CONFIRM'), _('NEW_SITE_CONFIRM_TO_CREATE'), function(){ @@ -246,3 +276,25 @@ Ext.onReady(function(){ }); }); } + +/** + * Validation if the field password and the field re-write password are similar. + * @returns {boolean} + */ +function validationPassword () { + var spanErrorConfirm, + imageErrorConfirm, + labelErrorConfirm; + if (Ext.getCmp('NW_PASSWORD').getValue() !== Ext.getCmp('NW_PASSWORD2').getValue()) { + spanErrorConfirm = ''; + imageErrorConfirm = ''; + labelErrorConfirm = _('ID_PASSWORDS_DONT_MATCH'); + + Ext.getCmp('passwordConfirm').setText(spanErrorConfirm + imageErrorConfirm + labelErrorConfirm + '', false); + Ext.getCmp('passwordConfirm').setVisible(true); + return false; + } else { + Ext.getCmp('passwordConfirm').setVisible(false); + return true; + } +} \ No newline at end of file diff --git a/workflow/engine/templates/setup/webServicesTree.php b/workflow/engine/templates/setup/webServicesTree.php index f9ae5e77b..6f2c78d69 100644 --- a/workflow/engine/templates/setup/webServicesTree.php +++ b/workflow/engine/templates/setup/webServicesTree.php @@ -38,16 +38,15 @@ if (isset ( $_GET ['x'] )) { } } else { if (! isset ( $_SESSION ['END_POINT'] )) { - //$wsdl = 'http://'.$_SERVER['HTTP_HOST'].'/sys'.SYS_SYS.'/en/classic/services/wsdl'; $wsdl = 'http://' . $_SERVER ['HTTP_HOST']; - $workspace = SYS_SYS; + $workspace = config("system.workspace"); } else { $wsdl = $_SESSION ['END_POINT']; $workspace = $_SESSION ['WS_WORKSPACE']; } } -$defaultEndpoint = 'http://' . $_SERVER ['SERVER_NAME'] . ':' . $_SERVER ['SERVER_PORT'] . '/sys' . SYS_SYS . '/en/classic/services/wsdl2'; +$defaultEndpoint = 'http://' . $_SERVER ['SERVER_NAME'] . ':' . $_SERVER ['SERVER_PORT'] . '/sys' . config("system.workspace") . '/en/classic/services/wsdl2'; $wsdl = isset ( $_SESSION ['END_POINT'] ) ? $_SESSION ['END_POINT'] : $defaultEndpoint; diff --git a/workflow/public_html/bootstrap.php b/workflow/public_html/bootstrap.php index 5cff62984..b4f01fca5 100644 --- a/workflow/public_html/bootstrap.php +++ b/workflow/public_html/bootstrap.php @@ -332,7 +332,7 @@ use ProcessMaker\Plugins\PluginRegistry; define ( 'SYS_SYS' , SYS_TEMP ); // defining constant for workspace shared directory - define ( 'PATH_WORKSPACE' , PATH_DB . SYS_SYS . PATH_SEP ); + define ( 'PATH_WORKSPACE' , PATH_DB . config("system.workspace") . PATH_SEP ); // including workspace shared classes -> particularlly for pmTables set_include_path(get_include_path() . PATH_SEPARATOR . PATH_WORKSPACE); } @@ -382,7 +382,7 @@ use ProcessMaker\Plugins\PluginRegistry; } // PM Paths DATA - define('PATH_DATA_SITE', PATH_DATA . 'sites/' . SYS_SYS . '/'); + define('PATH_DATA_SITE', PATH_DATA . 'sites/' . config("system.workspace") . '/'); define('PATH_DOCUMENT', PATH_DATA_SITE . 'files/'); define('PATH_DATA_MAILTEMPLATES', PATH_DATA_SITE . 'mailTemplates/'); define('PATH_DATA_PUBLIC', PATH_DATA_SITE . 'public/'); @@ -394,7 +394,7 @@ use ProcessMaker\Plugins\PluginRegistry; define('SERVER_PORT', $_SERVER ['SERVER_PORT']); // create memcached singleton - $memcache = & PMmemcached::getSingleton(SYS_SYS); + $memcache = & PMmemcached::getSingleton(config("system.workspace")); // verify configuration for rest service if ($isRestRequest) { @@ -439,7 +439,7 @@ use ProcessMaker\Plugins\PluginRegistry; // unified log file for all databases $logFile = PATH_DATA . 'log' . PATH_SEP . 'propel.log'; - $logger = Log::singleton('file', $logFile, 'wf ' . SYS_SYS, null, PEAR_LOG_INFO); + $logger = Log::singleton('file', $logFile, 'wf ' . config("system.workspace"), null, PEAR_LOG_INFO); Propel::setLogger($logger); // log file for workflow database $con = Propel::getConnection('workflow'); @@ -573,13 +573,13 @@ use ProcessMaker\Plugins\PluginRegistry; } //redirect to login, if user changed the workspace in the URL - if (! $avoidChangedWorkspaceValidation && isset($_SESSION['WORKSPACE']) && $_SESSION['WORKSPACE'] != SYS_SYS) { - $_SESSION['WORKSPACE'] = SYS_SYS; + if (! $avoidChangedWorkspaceValidation && isset($_SESSION['WORKSPACE']) && $_SESSION['WORKSPACE'] != config("system.workspace")) { + $_SESSION['WORKSPACE'] = config("system.workspace"); G::SendTemporalMessage ('ID_USER_HAVENT_RIGHTS_SYSTEM', "error"); // verify if the current skin is a 'ux' variant $urlPart = substr(SYS_SKIN, 0, 2) == 'ux' && SYS_SKIN != 'uxs' ? '/main/login' : '/login/login'; - header('Location: /sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . $urlPart); + header('Location: /sys' . config("system.workspace") . '/' . SYS_LANG . '/' . SYS_SKIN . $urlPart); die; } diff --git a/workflow/public_html/images/add_18.png b/workflow/public_html/images/add_18.png new file mode 100644 index 000000000..a02d0cbab Binary files /dev/null and b/workflow/public_html/images/add_18.png differ diff --git a/workflow/public_html/images/delete_16.png b/workflow/public_html/images/delete_16.png new file mode 100644 index 000000000..7525f1994 Binary files /dev/null and b/workflow/public_html/images/delete_16.png differ diff --git a/workflow/public_html/images/pencil.png b/workflow/public_html/images/pencil.png new file mode 100644 index 000000000..681b11830 Binary files /dev/null and b/workflow/public_html/images/pencil.png differ diff --git a/workflow/public_html/sysGeneric.php b/workflow/public_html/sysGeneric.php index b08a6ec96..44582be96 100644 --- a/workflow/public_html/sysGeneric.php +++ b/workflow/public_html/sysGeneric.php @@ -39,8 +39,8 @@ function transactionLog($transactionName){ //Custom parameters - if(defined("SYS_SYS")){ - newrelic_add_custom_parameter ("workspace", SYS_SYS); + if(!empty(config("system.workspace"))){ + newrelic_add_custom_parameter ("workspace", config("system.workspace")); } if(defined("SYS_LANG")){ newrelic_add_custom_parameter ("lang", SYS_LANG); @@ -65,8 +65,8 @@ function transactionLog($transactionName){ } //Show correct transaction name - if(defined("SYS_SYS")){ - newrelic_set_appname ("PM-".SYS_SYS.";$baseName"); + if(!empty(config("system.workspace"))){ + newrelic_set_appname ("PM-".config("system.workspace").";$baseName"); } if(defined("PATH_CORE")){ $transactionName=str_replace(PATH_CORE,"",$transactionName); @@ -519,6 +519,12 @@ $oHeadPublisher = & headPublisher::getSingleton(); if (! defined( 'PATH_DATA' ) || ! file_exists( PATH_DATA )) { // new installer, extjs based define( 'PATH_DATA', PATH_C ); + + //important to start laravel classes + app()->useStoragePath(realpath(PATH_DATA)); + app()->make(Kernel::class)->bootstrap(); + restore_error_handler(); + //NewRelic Snippet - By JHL transactionLog(PATH_CONTROLLERS . 'InstallerModule.php'); $pathFile = PATH_CONTROLLERS . 'InstallerModule.php'; @@ -583,9 +589,10 @@ if (defined( 'SYS_TEMP' ) && SYS_TEMP != '') { if (file_exists( $pathFile )) { require_once ($pathFile); define( 'SYS_SYS', SYS_TEMP ); + config(["system.workspace" => SYS_TEMP]); // defining constant for workspace shared directory - define( 'PATH_WORKSPACE', PATH_DB . SYS_SYS . PATH_SEP ); + define( 'PATH_WORKSPACE', PATH_DB . config("system.workspace") . PATH_SEP ); // including workspace shared classes -> particularlly for pmTables set_include_path( get_include_path() . PATH_SEPARATOR . PATH_WORKSPACE ); } else { @@ -636,7 +643,7 @@ if (defined( 'SYS_TEMP' ) && SYS_TEMP != '') { } // PM Paths DATA -define( 'PATH_DATA_SITE', PATH_DATA . 'sites/' . SYS_SYS . '/' ); +define( 'PATH_DATA_SITE', PATH_DATA . 'sites/' . config("system.workspace") . '/' ); define( 'PATH_DOCUMENT', PATH_DATA_SITE . 'files/' ); define( 'PATH_DATA_MAILTEMPLATES', PATH_DATA_SITE . 'mailTemplates/' ); define( 'PATH_DATA_PUBLIC', PATH_DATA_SITE . 'public/' ); @@ -650,7 +657,7 @@ define( 'SERVER_PORT', $_SERVER['SERVER_PORT'] ); // create memcached singleton -$memcache = & PMmemcached::getSingleton( SYS_SYS ); +$memcache = & PMmemcached::getSingleton( config("system.workspace") ); // load Plugins base class @@ -669,7 +676,7 @@ if (defined( 'DEBUG_SQL_LOG' ) && DEBUG_SQL_LOG) { // unified log file for all databases $logFile = PATH_DATA . 'log' . PATH_SEP . 'propel.log'; - $logger = Log::singleton( 'file', $logFile, 'wf ' . SYS_SYS, null, PEAR_LOG_INFO ); + $logger = Log::singleton( 'file', $logFile, 'wf ' . config("system.workspace"), null, PEAR_LOG_INFO ); Propel::setLogger( $logger ); // log file for workflow database $con = Propel::getConnection( 'workflow' ); @@ -887,13 +894,13 @@ if (substr( SYS_COLLECTION, 0, 8 ) === 'gulliver') { } //redirect to login, if user changed the workspace in the URL -if (! $avoidChangedWorkspaceValidation && isset( $_SESSION['WORKSPACE'] ) && $_SESSION['WORKSPACE'] != SYS_SYS) { - $_SESSION['WORKSPACE'] = SYS_SYS; +if (! $avoidChangedWorkspaceValidation && isset( $_SESSION['WORKSPACE'] ) && $_SESSION['WORKSPACE'] != config("system.workspace")) { + $_SESSION['WORKSPACE'] = config("system.workspace"); Bootstrap::SendTemporalMessage( 'ID_USER_HAVENT_RIGHTS_SYSTEM', "error" ); // verify if the current skin is a 'ux' variant $urlPart = substr( SYS_SKIN, 0, 2 ) == 'ux' && SYS_SKIN != 'uxs' ? '/main/login' : '/login/login'; - header( 'Location: /sys' . SYS_SYS . '/' . SYS_LANG . '/' . SYS_SKIN . $urlPart ); + header( 'Location: /sys' . config("system.workspace") . '/' . SYS_LANG . '/' . SYS_SKIN . $urlPart ); die(); }