From 779a87e0469dd70fe2e8823d92433c3dc0903f3d Mon Sep 17 00:00:00 2001 From: Hugo Loza Date: Fri, 17 Dec 2010 22:30:02 +0000 Subject: [PATCH] Documents at 65%. Display folders and documents, no pagination yet.. Posible to create Folders and upload external files. Working on Download, search --- .../ext/ux.locationbar/Ext.ux.LocationBar.js | 438 +++ gulliver/js/ext/ux.statusbar/ext-statusbar.js | 80 + .../ux.treefilterx/Ext.ux.tree.TreeFilterX.js | 159 + workflow/engine/classes/model/AppFolder.php | 132 +- workflow/engine/classes/model/Users.php | 18 + workflow/engine/menus/cases.php | 2 +- .../methods/appFolder/appFolderAjax.php | 1271 ++++++-- .../engine/methods/cases/casesStartPage.php | 8 + .../engine/templates/cases/casesStartPage.js | 2887 +++++++++++------ workflow/public_html/images/documents/_.gif | Bin 0 -> 43 bytes .../public_html/images/documents/_accept.png | Bin 0 -> 1777 bytes .../public_html/images/documents/_admin.gif | Bin 0 -> 639 bytes .../public_html/images/documents/_archive.png | Bin 0 -> 1126 bytes .../images/documents/_arrowdown.gif | Bin 0 -> 70 bytes .../public_html/images/documents/_arrowup.gif | Bin 0 -> 70 bytes .../images/documents/_bookmark_add.png | Bin 0 -> 665 bytes .../public_html/images/documents/_cancel.png | Bin 0 -> 1133 bytes .../public_html/images/documents/_chmod.png | Bin 0 -> 774 bytes .../public_html/images/documents/_down.png | Bin 0 -> 912 bytes .../public_html/images/documents/_edit.png | Bin 0 -> 1077 bytes .../images/documents/_editcopy.png | Bin 0 -> 730 bytes .../images/documents/_editdelete.png | Bin 0 -> 860 bytes .../public_html/images/documents/_extract.gif | Bin 0 -> 1080 bytes .../public_html/images/documents/_extract.png | Bin 0 -> 1569 bytes .../images/documents/_filefind.png | Bin 0 -> 813 bytes .../public_html/images/documents/_filenew.png | Bin 0 -> 805 bytes .../images/documents/_folder_new.png | Bin 0 -> 718 bytes .../public_html/images/documents/_fonts.png | Bin 0 -> 892 bytes .../public_html/images/documents/_help.png | Bin 0 -> 1187 bytes .../public_html/images/documents/_home.gif | Bin 0 -> 1141 bytes .../public_html/images/documents/_home.png | Bin 0 -> 618 bytes .../images/documents/_indicator.gif | Bin 0 -> 1553 bytes .../images/documents/_log_error.png | Bin 0 -> 1360 bytes .../public_html/images/documents/_logout.png | Bin 0 -> 995 bytes .../images/documents/_messagebox_warning.png | Bin 0 -> 1356 bytes .../public_html/images/documents/_move.png | Bin 0 -> 1056 bytes .../public_html/images/documents/_reload.png | Bin 0 -> 1068 bytes .../public_html/images/documents/_remove.png | Bin 0 -> 752 bytes .../public_html/images/documents/_rename.gif | Bin 0 -> 409 bytes .../public_html/images/documents/_rename_.gif | Bin 0 -> 1022 bytes .../public_html/images/documents/_save.png | Bin 0 -> 898 bytes workflow/public_html/images/documents/_up.png | Bin 0 -> 906 bytes .../public_html/images/documents/_view.png | Bin 0 -> 916 bytes .../images/documents/extension/avi.png | Bin 0 -> 1069 bytes .../images/documents/extension/bmp.png | Bin 0 -> 824 bytes .../images/documents/extension/bz2.png | Bin 0 -> 1050 bytes .../images/documents/extension/c.png | Bin 0 -> 817 bytes .../images/documents/extension/cc.png | Bin 0 -> 817 bytes .../images/documents/extension/cgi.png | Bin 0 -> 987 bytes .../images/documents/extension/class.png | Bin 0 -> 806 bytes .../images/documents/extension/cpp.png | Bin 0 -> 817 bytes .../images/documents/extension/css.png | Bin 0 -> 941 bytes .../images/documents/extension/cxx.png | Bin 0 -> 817 bytes .../images/documents/extension/dhtml.png | Bin 0 -> 951 bytes .../images/documents/extension/doc.png | Bin 0 -> 943 bytes .../images/documents/extension/document.png | Bin 0 -> 948 bytes .../images/documents/extension/docx.png | Bin 0 -> 943 bytes .../images/documents/extension/exe.png | Bin 0 -> 987 bytes .../images/documents/extension/folder.png | Bin 0 -> 558 bytes .../images/documents/extension/fon.png | Bin 0 -> 892 bytes .../images/documents/extension/gif.png | Bin 0 -> 824 bytes .../images/documents/extension/gz.png | Bin 0 -> 1126 bytes .../images/documents/extension/h.png | Bin 0 -> 776 bytes .../images/documents/extension/hpp.png | Bin 0 -> 776 bytes .../images/documents/extension/htm.png | Bin 0 -> 951 bytes .../images/documents/extension/html.png | Bin 0 -> 951 bytes .../images/documents/extension/inc.png | Bin 0 -> 980 bytes .../images/documents/extension/jar.png | Bin 0 -> 1169 bytes .../images/documents/extension/java.png | Bin 0 -> 806 bytes .../images/documents/extension/jpeg.png | Bin 0 -> 824 bytes .../images/documents/extension/jpg.png | Bin 0 -> 824 bytes .../images/documents/extension/js.png | Bin 0 -> 262 bytes .../images/documents/extension/m3u.png | Bin 0 -> 1040 bytes .../images/documents/extension/midi.png | Bin 0 -> 779 bytes .../images/documents/extension/mov.png | Bin 0 -> 1069 bytes .../images/documents/extension/mp3.png | Bin 0 -> 1040 bytes .../images/documents/extension/mpeg.png | Bin 0 -> 1069 bytes .../images/documents/extension/mpg.png | Bin 0 -> 1069 bytes .../images/documents/extension/pdf.png | Bin 0 -> 857 bytes .../images/documents/extension/php.png | Bin 0 -> 997 bytes .../images/documents/extension/php3.png | Bin 0 -> 997 bytes .../images/documents/extension/php4.png | Bin 0 -> 997 bytes .../images/documents/extension/php5.png | Bin 0 -> 997 bytes .../images/documents/extension/phtml.png | Bin 0 -> 997 bytes .../images/documents/extension/pl.png | Bin 0 -> 669 bytes .../images/documents/extension/pls.png | Bin 0 -> 1040 bytes .../images/documents/extension/png.png | Bin 0 -> 824 bytes .../images/documents/extension/py.png | Bin 0 -> 865 bytes .../images/documents/extension/ra.png | Bin 0 -> 924 bytes .../images/documents/extension/ram.png | Bin 0 -> 924 bytes .../images/documents/extension/rar.png | Bin 0 -> 1050 bytes .../images/documents/extension/rm.png | Bin 0 -> 924 bytes .../images/documents/extension/sh.png | Bin 0 -> 977 bytes .../images/documents/extension/shtml.png | Bin 0 -> 951 bytes .../images/documents/extension/sql.png | Bin 0 -> 977 bytes .../images/documents/extension/swf.png | Bin 0 -> 1035 bytes .../images/documents/extension/tar.png | Bin 0 -> 1050 bytes .../images/documents/extension/tbz.png | Bin 0 -> 1050 bytes .../images/documents/extension/tgz.png | Bin 0 -> 1126 bytes .../images/documents/extension/txt.gif | Bin 0 -> 1195 bytes .../images/documents/extension/txt.png | Bin 0 -> 734 bytes .../images/documents/extension/wav.png | Bin 0 -> 1040 bytes .../images/documents/extension/xhtml.png | Bin 0 -> 951 bytes .../images/documents/extension/xls.png | Bin 0 -> 1016 bytes .../images/documents/extension/xlsx.png | Bin 0 -> 1016 bytes .../images/documents/extension/xml.png | Bin 0 -> 593 bytes .../images/documents/extension/zip.png | Bin 0 -> 1050 bytes .../images/documents/systeminfo.gif | Bin 0 -> 1224 bytes .../images/default/locationbar/btn-arrow.gif | Bin 0 -> 973 bytes .../default/locationbar/location_back.png | Bin 0 -> 345 bytes .../default/locationbar/location_folder.png | Bin 0 -> 537 bytes .../default/locationbar/location_forward.png | Bin 0 -> 349 bytes .../default/locationbar/location_reload.png | Bin 0 -> 685 bytes .../default/locationbar/tb-btn-sprite.gif | Bin 0 -> 1127 bytes .../ext/images/gray/locationbar/btn-arrow.gif | Bin 0 -> 973 bytes .../images/gray/locationbar/location_back.png | Bin 0 -> 345 bytes .../gray/locationbar/location_folder.png | Bin 0 -> 537 bytes .../gray/locationbar/location_forward.png | Bin 0 -> 349 bytes .../gray/locationbar/location_reload.png | Bin 0 -> 685 bytes .../images/gray/locationbar/tb-btn-sprite.gif | Bin 0 -> 1127 bytes .../skins/ext/pmos-xtheme-gray.css | 38 + 121 files changed, 3746 insertions(+), 1287 deletions(-) create mode 100755 gulliver/js/ext/ux.locationbar/Ext.ux.LocationBar.js create mode 100755 gulliver/js/ext/ux.statusbar/ext-statusbar.js create mode 100755 gulliver/js/ext/ux.treefilterx/Ext.ux.tree.TreeFilterX.js create mode 100755 workflow/public_html/images/documents/_.gif create mode 100755 workflow/public_html/images/documents/_accept.png create mode 100755 workflow/public_html/images/documents/_admin.gif create mode 100755 workflow/public_html/images/documents/_archive.png create mode 100755 workflow/public_html/images/documents/_arrowdown.gif create mode 100755 workflow/public_html/images/documents/_arrowup.gif create mode 100755 workflow/public_html/images/documents/_bookmark_add.png create mode 100755 workflow/public_html/images/documents/_cancel.png create mode 100755 workflow/public_html/images/documents/_chmod.png create mode 100755 workflow/public_html/images/documents/_down.png create mode 100755 workflow/public_html/images/documents/_edit.png create mode 100755 workflow/public_html/images/documents/_editcopy.png create mode 100755 workflow/public_html/images/documents/_editdelete.png create mode 100755 workflow/public_html/images/documents/_extract.gif create mode 100755 workflow/public_html/images/documents/_extract.png create mode 100755 workflow/public_html/images/documents/_filefind.png create mode 100755 workflow/public_html/images/documents/_filenew.png create mode 100755 workflow/public_html/images/documents/_folder_new.png create mode 100755 workflow/public_html/images/documents/_fonts.png create mode 100755 workflow/public_html/images/documents/_help.png create mode 100755 workflow/public_html/images/documents/_home.gif create mode 100755 workflow/public_html/images/documents/_home.png create mode 100755 workflow/public_html/images/documents/_indicator.gif create mode 100755 workflow/public_html/images/documents/_log_error.png create mode 100755 workflow/public_html/images/documents/_logout.png create mode 100755 workflow/public_html/images/documents/_messagebox_warning.png create mode 100755 workflow/public_html/images/documents/_move.png create mode 100755 workflow/public_html/images/documents/_reload.png create mode 100755 workflow/public_html/images/documents/_remove.png create mode 100755 workflow/public_html/images/documents/_rename.gif create mode 100755 workflow/public_html/images/documents/_rename_.gif create mode 100755 workflow/public_html/images/documents/_save.png create mode 100755 workflow/public_html/images/documents/_up.png create mode 100755 workflow/public_html/images/documents/_view.png create mode 100755 workflow/public_html/images/documents/extension/avi.png create mode 100755 workflow/public_html/images/documents/extension/bmp.png create mode 100755 workflow/public_html/images/documents/extension/bz2.png create mode 100755 workflow/public_html/images/documents/extension/c.png create mode 100755 workflow/public_html/images/documents/extension/cc.png create mode 100755 workflow/public_html/images/documents/extension/cgi.png create mode 100755 workflow/public_html/images/documents/extension/class.png create mode 100755 workflow/public_html/images/documents/extension/cpp.png create mode 100755 workflow/public_html/images/documents/extension/css.png create mode 100755 workflow/public_html/images/documents/extension/cxx.png create mode 100755 workflow/public_html/images/documents/extension/dhtml.png create mode 100755 workflow/public_html/images/documents/extension/doc.png create mode 100755 workflow/public_html/images/documents/extension/document.png create mode 100755 workflow/public_html/images/documents/extension/docx.png create mode 100755 workflow/public_html/images/documents/extension/exe.png create mode 100755 workflow/public_html/images/documents/extension/folder.png create mode 100755 workflow/public_html/images/documents/extension/fon.png create mode 100755 workflow/public_html/images/documents/extension/gif.png create mode 100755 workflow/public_html/images/documents/extension/gz.png create mode 100755 workflow/public_html/images/documents/extension/h.png create mode 100755 workflow/public_html/images/documents/extension/hpp.png create mode 100755 workflow/public_html/images/documents/extension/htm.png create mode 100755 workflow/public_html/images/documents/extension/html.png create mode 100755 workflow/public_html/images/documents/extension/inc.png create mode 100755 workflow/public_html/images/documents/extension/jar.png create mode 100755 workflow/public_html/images/documents/extension/java.png create mode 100755 workflow/public_html/images/documents/extension/jpeg.png create mode 100755 workflow/public_html/images/documents/extension/jpg.png create mode 100755 workflow/public_html/images/documents/extension/js.png create mode 100755 workflow/public_html/images/documents/extension/m3u.png create mode 100755 workflow/public_html/images/documents/extension/midi.png create mode 100755 workflow/public_html/images/documents/extension/mov.png create mode 100755 workflow/public_html/images/documents/extension/mp3.png create mode 100755 workflow/public_html/images/documents/extension/mpeg.png create mode 100755 workflow/public_html/images/documents/extension/mpg.png create mode 100755 workflow/public_html/images/documents/extension/pdf.png create mode 100755 workflow/public_html/images/documents/extension/php.png create mode 100755 workflow/public_html/images/documents/extension/php3.png create mode 100755 workflow/public_html/images/documents/extension/php4.png create mode 100755 workflow/public_html/images/documents/extension/php5.png create mode 100755 workflow/public_html/images/documents/extension/phtml.png create mode 100755 workflow/public_html/images/documents/extension/pl.png create mode 100755 workflow/public_html/images/documents/extension/pls.png create mode 100755 workflow/public_html/images/documents/extension/png.png create mode 100755 workflow/public_html/images/documents/extension/py.png create mode 100755 workflow/public_html/images/documents/extension/ra.png create mode 100755 workflow/public_html/images/documents/extension/ram.png create mode 100755 workflow/public_html/images/documents/extension/rar.png create mode 100755 workflow/public_html/images/documents/extension/rm.png create mode 100755 workflow/public_html/images/documents/extension/sh.png create mode 100755 workflow/public_html/images/documents/extension/shtml.png create mode 100755 workflow/public_html/images/documents/extension/sql.png create mode 100755 workflow/public_html/images/documents/extension/swf.png create mode 100755 workflow/public_html/images/documents/extension/tar.png create mode 100755 workflow/public_html/images/documents/extension/tbz.png create mode 100755 workflow/public_html/images/documents/extension/tgz.png create mode 100755 workflow/public_html/images/documents/extension/txt.gif create mode 100755 workflow/public_html/images/documents/extension/txt.png create mode 100755 workflow/public_html/images/documents/extension/wav.png create mode 100755 workflow/public_html/images/documents/extension/xhtml.png create mode 100755 workflow/public_html/images/documents/extension/xls.png create mode 100755 workflow/public_html/images/documents/extension/xlsx.png create mode 100755 workflow/public_html/images/documents/extension/xml.png create mode 100755 workflow/public_html/images/documents/extension/zip.png create mode 100755 workflow/public_html/images/documents/systeminfo.gif create mode 100755 workflow/public_html/skins/ext/images/default/locationbar/btn-arrow.gif create mode 100755 workflow/public_html/skins/ext/images/default/locationbar/location_back.png create mode 100755 workflow/public_html/skins/ext/images/default/locationbar/location_folder.png create mode 100755 workflow/public_html/skins/ext/images/default/locationbar/location_forward.png create mode 100755 workflow/public_html/skins/ext/images/default/locationbar/location_reload.png create mode 100755 workflow/public_html/skins/ext/images/default/locationbar/tb-btn-sprite.gif create mode 100755 workflow/public_html/skins/ext/images/gray/locationbar/btn-arrow.gif create mode 100755 workflow/public_html/skins/ext/images/gray/locationbar/location_back.png create mode 100755 workflow/public_html/skins/ext/images/gray/locationbar/location_folder.png create mode 100755 workflow/public_html/skins/ext/images/gray/locationbar/location_forward.png create mode 100755 workflow/public_html/skins/ext/images/gray/locationbar/location_reload.png create mode 100755 workflow/public_html/skins/ext/images/gray/locationbar/tb-btn-sprite.gif diff --git a/gulliver/js/ext/ux.locationbar/Ext.ux.LocationBar.js b/gulliver/js/ext/ux.locationbar/Ext.ux.LocationBar.js new file mode 100755 index 000000000..2cfd71b56 --- /dev/null +++ b/gulliver/js/ext/ux.locationbar/Ext.ux.LocationBar.js @@ -0,0 +1,438 @@ +/* + * Copyright 2008, brainbits GmbH All rights reserved. + * Author: Stephan Wentz. swentz[at]brainbits.net + * + * http://www.brainbits.net/ + */ + +/** + * LocationBar class + * Version: 0.1 + * @class Ext.ux.Locationbar + * @extends Ext.Toolbar + * Locationbar class. + * @constructor + * Creates a new LocationBar + * @param {Object/Array} config A config object or an array of buttons to add + */ +Ext.ux.LocationBar = Ext.extend(Ext.Toolbar, { + + /** + * @cfg {Number} maxItem Maximum number of items the Locationbar takes before the first items are removed (defaults to 15). + * Set to 0 for unlimited items. + */ + maxItems: 15, + + /** + * @cfg {String} emptyText The that is shown if no history is available (defaults to 'No node selected.'). + */ + emptyText: 'No node selected.', + + /** + * @cfg {Boolean} noReload If set to true the reload button will not be visible (defaults to false). + */ + noReload: false, + + /** + * @cfg {Function} selectHandler The function to + * call when clicked. Arguments passed are: + */ + selectHandler: null, + + /** + * @cfg {Function} reloadHandler The function to + * call when clicked. Arguments passed are: + */ + reloadHandler: null, + + /** + * @cfg {String} locationItems Initial items (defaults to []). + */ + locationItems: [], + + /** + * @cfg {String} folderIconCls Iconclass for folder icons. + */ + folderIconCls: 'x-locationbar-folder-icon', + + /** + * @cfg {String} folderIconCls Iconclass for the backward icon. + */ + backwardIconCls: 'x-locationbar-back-icon', + + /** + * @cfg {String} folderIconCls Iconclass for the forward icon. + */ + forwardIconCls: 'x-locationbar-forward-icon', + + /** + * @cfg {String} folderIconCls Iconclass for the reload icon. + */ + reloadIconCls: 'x-locationbar-reload-icon', + + /** + * @cfg {Ext.tree.TreePanel} tree The treePanel this Locationbar is associated with. + */ + tree: null, + + // private + historyItemNodes: {}, + + // private + historyItems: [], + + // private + currentItem: false, + + // private + historyNext: true, + + // private + initComponent: function() { + //console.log("initComponent location bar"); + if(this.tree) { + //console.log("tree exists"); + //console.debug(this.tree); + //console.log("adding listener LOAD"); + this.tree.getLoader().addListener('load',function(tl,node,resp){ + //console.log("tree get loader LOAD -> "+node); + if(node){ + node.loaded=true; + this.setNode(node); + } + },this); + //console.log("complete listener LOAD"); + //console.log("adding listenr SELECTIONCHANGE"); + this.tree.getSelectionModel().addListener('selectionchange', function(sm, node) { + //console.log("tree get loader SELECTION CHANGE"); + if( node && node.id ) { + //console.log("changing to dir (form location bar) "+node.id); + chDir( node.id, true ); + } + if (node.isLeaf()==false && node.childNodes.length==0){ + //console.log(node.isLeaf(),node.childNodes.length) + this.nodeJustLoaded=node; + //this.tree.getLoader().load(node); + //this.loadNode(node); + }else{ + this.setNode(node); + } + }, this); + //console.log("complete add listener SELECTIONCHANGE"); + + } + + //this.addListener('render', this.repaint, this); + + // Ext.ux.LocationBar.superclass.initComponent.call(this); + }, + + // private + autoCreate: { + cls:'x-toolbar x-small-editor x-locationbar', + html:'
' + }, + + // private + onRender: function(ct, position) { + Ext.ux.LocationBar.superclass.onRender.call(this, ct, position); + + this.repaint(); + }, + + // private + onClick: function(node) { + if (this.selectHandler) { + this.selectHandler(node); + } else { + if(node.parentNode) { + node.parentNode.expand(false,true); + node.ensureVisible(); + } + node.select(); + } + }, + + // private + onReload: function(node) { + if (this.reloadHandler) { + this.reloadHandler(node); + } else if(node.reload) { + node.reload(); + } + }, + + /** + * Clears all items from the LocationBar. + */ + clear: function() { + this.locationItems = []; + + this.repaint; + }, + + /** + * Sets the current Treenode + * If a tree was provided as a config to this LocationBar, this should + * be called automatically. + * @param {Ext.ux.TreeNode} node The currently selected TreeNode + */ + setNode: function(node) { + var path = []; + var pNode = node; + var i; + do { + var conf = { + text: pNode.attributes.text, + node: pNode, + handler: this.onClick.createDelegate(this, [pNode], false) + }; + if (pNode.childNodes.length) { + var childs = []; + + for (i = 0; i < pNode.childNodes.length; i++) { + + childs[i] = { + text: pNode.childNodes[i].attributes.text, + node: pNode.childNodes[i], + iconCls: this.folderIconCls, + handler: this.onClick.createDelegate(this, [pNode.childNodes[i]], false) + }; + } + conf.xtype = 'tbsplit'; + conf.menu = childs; + } + conf.fullPath = pNode.getPath('text').substr(1); + path.unshift(conf); + } while (pNode.parentNode && (pNode = pNode.parentNode) && pNode.id != 'root'); + + this.locationItems = []; + + for(i=0; i maxItems, remove last + if(this.maxItems && this.locationItems.length > this.maxItems) { + this.locationItems.pop(); + } + + // put new item at the end + this.locationItems.push(item); + }, + + // private + repaint: function() { + if (this.items && this.items.length) { + var _doLayout = true; + this.items.each(function(item){ + this.items.remove(item); + item.destroy(); + }, this.items); + } else { + var _doLayout = false; + } + try { + this.items.each(function(item){ + this.items.remove(item); + item.destroy(); + }, this.items); + } catch(e) {} + // back button + this.add({ + cls: 'x-btn-icon', + iconCls: this.backwardIconCls, + handler: function() { + this.historyNext = this.historyItems.pop(); + var itemKey = this.historyItems.pop(); + var item = this.historyItemNodes[itemKey]; + this.onClick(item.node); + }, + scope: this, + disabled: this.historyItems.length > 1 ? false : true + }); + + // forward button + // TODO: disabled, FUBAR + this.add({ + cls: 'x-btn-icon', + iconCls: this.forwardIconCls, + handler: function() { + var node = this.historyNext.node; + this.historyNext = false; + this.onClick(node); + }, + scope: this, + disabled: true //this.historyNext ? false : true + }); + + this.add(' ','-',' '); + + if (this.locationItems.length) { + // folder icon + this.add({ + cls: 'x-btn-icon', + iconCls: this.folderIconCls, + ctCls: 'x-locationbar-location x-locationbar-location-first', + disabled: true + }); + + var text; + for (var i = 0; i < this.locationItems.length; i++) { + var locationItem = this.locationItems[i]; + + var item = {}; + + if (typeof locationItem == 'object') { + item = locationItem; + } + else { + item.text = locationItem; + } + + if(!item.text) { + item.text = 'n/a'; + } + + item.handler = this.onClick.createDelegate(this, [locationItem.node], false); + + item.ctCls = 'x-locationbar-location'; + + this.add(item); + } + + // spacer + this.addItem( + { + cls: 'x-locationbar-location x-locationbar-location-last', + xtype: 'tbfill' + }); + + menu = []; + for(var i=this.historyItems.length-2; i>=0; i--) { + menu.push({ + text: this.historyItemNodes[this.historyItems[i]].fullPath, + iconCls: this.folderIconCls, + node: this.historyItemNodes[this.historyItems[i]].node, + handler: function(item) { + this.onClick(item.node); + }, + scope: this + }); + } + this.add({ + cls: 'x-btn-icon', + ctCls: 'x-locationbar-location x-locationbar-location-last', + menuAlign: 'tr-br?', + menu: menu + }); + if(!this.noReload) { + this.add(' '); + // reload button + this.add({ + cls: 'x-btn-icon', + iconCls: this.reloadIconCls, + handler: function() { + this.onReload(this.currentItem.node); + }, + scope: this + }); + } + this.add(' '); + } else { + this.add({ + cls: 'x-btn-icon', + iconCls: this.folderIconCls, + ctCls: 'x-locationbar-location x-locationbar-location-first', + disabled: true + }); + + if(this.emptyText) { + this.add({ + xtype: 'lbtext', + text: this.emptyText + }); + } + + this.addItem(new Ext.ux.LocationBar.Fill()); + + this.add({ + cls: 'x-btn-icon', + ctCls: 'x-locationbar-location x-locationbar-location-last', + menuAlign: 'tr-br?', + disabled: true + }); + this.add(' '); + this.add({ + cls: 'x-btn-icon', + iconCls: this.reloadIconCls, + disabled: true + }); + this.add(' '); + } + if (_doLayout === true) { + this.doLayout(); + } + + } +}); + +Ext.reg('locationbar', Ext.ux.LocationBar); + +Ext.ux.Fill = Ext.extend(Ext.Toolbar.Spacer, { + // private + render : function(td){ + + td.style.width = '100%'; + Ext.fly(td).addClass('x-locationbar-location'); + Ext.ux.Fill.superclass.render.call(this, td); + } +}); +Ext.reg('tbfill', Ext.ux.Fill); + +Ext.ux.LocationBar.Fill = Ext.extend(Ext.Toolbar.Fill, { + // private + render : function(td){ + td.className = 'x-locationbar-location'; + + // insert a   + var data = document.createTextNode('\u00a0'); + this.el.appendChild(data); + + Ext.ux.LocationBar.Fill.superclass.render.call(this, td); + } +}); +Ext.reg('lbfill', Ext.ux.LocationBar.Fill); + +Ext.ux.LocationBar.TextItem = Ext.extend(Ext.Toolbar.TextItem, { + // private + render : function(td){ + td.className = 'x-locationbar-location'; + + Ext.ux.LocationBar.Fill.superclass.render.call(this, td); + } +}); +Ext.reg('lbtext', Ext.ux.LocationBar.TextItem); diff --git a/gulliver/js/ext/ux.statusbar/ext-statusbar.js b/gulliver/js/ext/ux.statusbar/ext-statusbar.js new file mode 100755 index 000000000..195bcd5b9 --- /dev/null +++ b/gulliver/js/ext/ux.statusbar/ext-statusbar.js @@ -0,0 +1,80 @@ +Ext.namespace('Ext.ux'); + +Ext.ux.StatusBar = Ext.extend(Ext.Toolbar, { + textId: '', + defaultText: '', + autoClear: 5000, + task: null, + initComponent: function() { + this.textId = Ext.id(); + this.defaultText = this.initialConfig.defaultText || ''; + var text = this.initialConfig.text || this.defaultText; + + var config = { + items: [ + ''+text+'', // status text + '->' // make it greedy + ] + }; + if (this.initialConfig.items) { + config.items = config.items.concat(this.initialConfig.items); + delete this.initialConfig.items; + } + Ext.apply(this, Ext.apply(this.initialConfig, config)); + Ext.ux.StatusBar.superclass.initComponent.apply(this, arguments); + this.task = new Ext.util.DelayedTask(function() { + var el = Ext.get(this.textId); + var defaultText = this.defaultText; + el.fadeOut({ + callback: function() { + el.update(defaultText); + el.show(); + }, + duration: 1 + }); + }, this); + }, + onRender: function() { + Ext.ux.StatusBar.superclass.onRender.apply(this, arguments); + }, + setText: function(text) { + var el = Ext.get(this.textId); + el.update(text); + }, + setStatus: function(config) { + var defaults = { + clear: { + wait: this.autoClear, + anim: true, + useDefaults: true + } + }; + + if (config.clear === true) { + delete config.clear; + } + if (!Ext.isArray(config)) { + config = { + text: config.text || '' + } + } + Ext.apply(config, defaults); + var el = Ext.get(this.textId); + el.update(config.text); + var clear = config.clear; + var defaultText = this.defaultText; + if (clear.wait) { + this.task.delay(clear.wait); + } + else { + this.task.cancel(); + } + }, + clearStatus: function() { + this.setText(this.defaultText); + this.task.cancel(); + }, + showBusy: function(msg) { + // stub for now + } +}); \ No newline at end of file diff --git a/gulliver/js/ext/ux.treefilterx/Ext.ux.tree.TreeFilterX.js b/gulliver/js/ext/ux.treefilterx/Ext.ux.tree.TreeFilterX.js new file mode 100755 index 000000000..343d2dbeb --- /dev/null +++ b/gulliver/js/ext/ux.treefilterx/Ext.ux.tree.TreeFilterX.js @@ -0,0 +1,159 @@ +// vim: ts=4:sw=4:nu:fdc=4:nospell +/* global Ext */ +/** + * @class Ext.ux.tree.TreeFilterX + * @extends Ext.tree.TreeFilter + * + *

+ * Shows also parents of matching nodes as opposed to default TreeFilter. In + * other words this filter works "deep way". + *

+ * + * @author Ing. Jozef Sakáloš + * @version 1.0 + * @date 17. December 2008 + * @revision $Id: Ext.ux.tree.TreeFilterX.js 589 2009-02-21 23:30:18Z jozo $ + * @see http://extjs.com/forum/showthread.php?p=252709 + * + * @license Ext.ux.tree.CheckTreePanel is licensed under the terms of the Open + * Source LGPL 3.0 license. Commercial use is permitted to the extent + * that the code/component(s) do NOT become part of another Open Source + * or Commercially licensed development library or toolkit without + * explicit permission. + * + *

+ * License details: http://www.gnu.org/licenses/lgpl.html + *

+ * + * @forum 55489 + * @demo http://remotetree.extjs.eu + * + * @donate
+ *
+ */ + +Ext.ns('Ext.ux.tree'); + +/** + * Creates new TreeFilterX + * + * @constructor + * @param {Ext.tree.TreePanel} + * tree The tree panel to attach this filter to + * @param {Object} + * config A config object of this filter + */ +Ext.ux.tree.TreeFilterX = Ext.extend(Ext.tree.TreeFilter, { + /** + * @cfg {Boolean} expandOnFilter Deeply expands startNode before filtering + * (defaults to true) + */ + expandOnFilter : true + + // {{{ + /** + * Filter the data by a specific attribute. + * + * @param {String/RegExp} + * value Either string that the attribute value should start with + * or a RegExp to test against the attribute + * @param {String} + * attr (optional) The attribute passed in your node's attributes + * collection. Defaults to "text". + * @param {TreeNode} + * startNode (optional) The node to start the filter at. + */ + , + filter : function(value, attr, startNode) { + + // expand start node + if (false !== this.expandOnFilter) { + startNode = startNode || this.tree.root; + var animate = this.tree.animate; + this.tree.animate = false; + startNode.expand(true, false, function() { + + // call parent after expand + Ext.ux.tree.TreeFilterX.superclass.filter.call(this, value, + attr, startNode); + + }.createDelegate(this)); + this.tree.animate = animate; + } else { + // call parent + Ext.ux.tree.TreeFilterX.superclass.filter.apply(this, arguments); + } + + } // eo function filter + // }}} + // {{{ + /** + * Filter by a function. The passed function will be called with each node + * in the tree (or from the startNode). If the function returns true, the + * node is kept otherwise it is filtered. If a node is filtered, its + * children are also filtered. Shows parents of matching nodes. + * + * @param {Function} + * fn The filter function + * @param {Object} + * scope (optional) The scope of the function (defaults to the + * current node) + */ + , + filterBy : function(fn, scope, startNode) { + startNode = startNode || this.tree.root; + if (this.autoClear) { + this.clear(); + } + var af = this.filtered, rv = this.reverse; + + var f = function(n) { + if (n === startNode) { + return true; + } + if (af[n.id]) { + return false; + } + var m = fn.call(scope || n, n); + if (!m || rv) { + af[n.id] = n; + n.ui.hide(); + return true; + } else { + n.ui.show(); + var p = n.parentNode; + while (p && p !== this.root) { + p.ui.show(); + p = p.parentNode; + } + return true; + } + return true; + }; + startNode.cascade(f); + + if (this.remove) { + for ( var id in af) { + if (typeof id != "function") { + var n = af[id]; + if (n && n.parentNode) { + n.parentNode.removeChild(n); + } + } + } + } + } // eo function filterBy + // }}} + +}); // eo extend + +// eof \ No newline at end of file diff --git a/workflow/engine/classes/model/AppFolder.php b/workflow/engine/classes/model/AppFolder.php index 4d3a85fa4..1211f1106 100644 --- a/workflow/engine/classes/model/AppFolder.php +++ b/workflow/engine/classes/model/AppFolder.php @@ -24,7 +24,12 @@ class AppFolder extends BaseAppFolder { * @param strin(32) $folderParent * @return Ambigous <>|number */ - function createFolder($folderName, $folderParent = "/") { + function createFolder($folderName, $folderParent = "/", $action="createifnotexists") { + $validActions=array("createifnotexists","create","update"); + if(!in_array($action,$validActions)) $action="createifnotexists"; + //Clean Folder and Parent names (delete spaces...) + $folderName=trim($folderName); + $folderParent=trim($folderParent); //Try to Load the folder (Foldername+FolderParent) $oCriteria = new Criteria ( 'workflow' ); $oCriteria->add ( AppFolderPeer::FOLDER_NAME, $folderName ); @@ -32,11 +37,13 @@ class AppFolder extends BaseAppFolder { $oDataset = AppFolderPeer::doSelectRS ( $oCriteria ); $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); $oDataset->next (); - if ($aRow = $oDataset->getRow ()) { //Folder exist, then return the ID - return ($aRow ['FOLDER_UID']); - } else { //Folder doesn't exist. Create and return the ID - - + if ($aRow = $oDataset->getRow ()) {//Folder exist, then return the ID + $response['success']=false; + $response['message']=$response['error']="Can't create folder
A folder with same name already exists.
$folderParent$folderName"; + $response['folderUID']=$aRow ['FOLDER_UID']; + //return ($aRow ['FOLDER_UID']); + return ($response); + } else {//Folder doesn't exist. Create and return the ID $folderUID = G::GenerateUniqueID (); $tr = new AppFolder ( ); $tr->setFolderUid ( $folderUID ); @@ -47,7 +54,11 @@ class AppFolder extends BaseAppFolder { if ($tr->validate ()) { // we save it, since we get no validation errors, or do whatever else you like. $res = $tr->save (); - return $folderUID; + $response['success']=true; + $response['message']=$response['error']="Folder successfully created.
$folderParent$folderName"; + $response['folderUID']=$folderUID; + return ($response); + //return $folderUID; } else { // Something went wrong. We can now get the validationFailures and handle them. $msg = ''; @@ -55,7 +66,10 @@ class AppFolder extends BaseAppFolder { foreach ( $validationFailuresArray as $objValidationFailure ) { $msg .= $objValidationFailure->getMessage () . "
"; } - krumo ( $msg ); + $response['success']=false; + + $response['message']=$response['error']="Can't create folder \n A \n ".$msg; + return ($response); } } } @@ -64,45 +78,46 @@ class AppFolder extends BaseAppFolder { * @param strin(32) $sessionID * @return string Last Folder ID generated */ - function createFromPath($folderPath, $sessionID = "") { + function createFromPath($folderPath, $sessionID = "") { if ($sessionID == "") - $sessionID = $_SESSION ['APPLICATION']; - //Get current Application Fields + $sessionID = $_SESSION ['APPLICATION']; + //Get current Application Fields $oApplication = new Application ( ); - + $appFields = $oApplication->Load ( $sessionID ); - + $folderPathParsed = G::replaceDataField ( $folderPath, $appFields ); $folderPathParsed = G::replaceDataField ( $folderPath, unserialize ( $appFields ['APP_DATA'] ) ); - + $folderPathParsedArray = explode ( "/", $folderPathParsed ); - + $folderRoot = "/"; //Always starting from Root foreach ( $folderPathParsedArray as $folderName ) { if (trim ( $folderName ) != "") { - $folderRoot = $this->createFolder ( $folderName, $folderRoot ); + $response = $this->createFolder ( $folderName, $folderRoot ); + $folderRoot=$response['folderUID']; } } return $folderRoot != "/" ? $folderRoot : ""; } - + /** - * @param string $fileTags + * @param string $fileTags * @param string(32) $sessionID Application ID * @return string */ function parseTags($fileTags, $sessionID = "") { - + if ($sessionID == "") - $sessionID = $_SESSION ['APPLICATION']; - //Get current Application Fields + $sessionID = $_SESSION ['APPLICATION']; + //Get current Application Fields $oApplication = new Application ( ); - + $appFields = $oApplication->Load ( $sessionID ); - + $fileTagsParsed = G::replaceDataField ( $fileTags, $appFields ); $fileTagsParsed = G::replaceDataField ( $fileTags, unserialize ( $appFields ['APP_DATA'] ) ); - + return $fileTagsParsed; } /** @@ -112,17 +127,17 @@ class AppFolder extends BaseAppFolder { function getFolderList($folderID) { $Criteria = new Criteria ( 'workflow' ); $Criteria->clearSelectColumns ()->clearOrderByColumns (); - + $Criteria->addSelectColumn ( AppFolderPeer::FOLDER_UID ); $Criteria->addSelectColumn ( AppFolderPeer::FOLDER_PARENT_UID ); $Criteria->addSelectColumn ( AppFolderPeer::FOLDER_NAME ); $Criteria->addSelectColumn ( AppFolderPeer::FOLDER_CREATE_DATE ); $Criteria->addSelectColumn ( AppFolderPeer::FOLDER_UPDATE_DATE ); - + $Criteria->add ( appFolderPeer::FOLDER_PARENT_UID, $folderID, CRITERIA::EQUAL ); - + $Criteria->addAscendingOrderByColumn ( AppFolderPeer::FOLDER_NAME ); - + $rs = appFolderPeer::doSelectRS ( $Criteria ); $rs->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); $rs->next (); @@ -157,32 +172,32 @@ class AppFolder extends BaseAppFolder { return $fields; } function getFolderStructure($folderId) { - + $folderObj = $this->load ( $folderId ); $folderArray [$folderObj ['FOLDER_UID']] = array ("NAME" => $folderObj ['FOLDER_NAME'], "PARENT" => $folderObj ['FOLDER_PARENT_UID'] ); $folderArray ['PATH_ARRAY'] [] = $folderObj ['FOLDER_NAME']; - + while ( $folderObj ['FOLDER_PARENT_UID'] != "" ) { $folderObj = $this->load ( $folderObj ['FOLDER_PARENT_UID'] ); $folderArray [$folderObj ['FOLDER_UID']] = array ("NAME" => $folderObj ['FOLDER_NAME'], "PARENT" => $folderObj ['FOLDER_PARENT_UID'] ); $folderArray ['PATH_ARRAY'] [] = $folderObj ['FOLDER_NAME']; } - + $folderArray ['PATH'] = str_replace ( "//", "/", implode ( "/", array_reverse ( $folderArray ['PATH_ARRAY'] ) ) ); return $folderArray; } - + function getFolderContent($folderID, $docIdFilter = array(), $keyword = NULL, $searchType = NULL) { require_once ("classes/model/AppDocument.php"); require_once ("classes/model/InputDocument.php"); require_once ("classes/model/OutputDocument.php"); require_once ("classes/model/Users.php"); - + G::LoadClass ( 'case' ); $oCase = new Cases ( ); G::LoadClass ( 'process' ); $oProcess = new Process ( ); - + $oAppDocument = new AppDocument ( ); $oCriteria = new Criteria ( ); if ((is_array ( $docIdFilter )) && (count ( $docIdFilter ) > 0)) { //Search by App Doc UID no matter what Folder it is @@ -192,11 +207,15 @@ class AppFolder extends BaseAppFolder { } elseif ($searchType == "TAG") { $oCriteria->add ( AppDocumentPeer::APP_DOC_TAGS, "%" . $keyword . "%", CRITERIA::LIKE ); } - + $oCase->verifyTable (); - + + $oCriteria->setOffset(0); + $oCriteria->setLimit(150); + $oCriteria->addAscendingOrderByColumn ( AppDocumentPeer::APP_DOC_INDEX ); - + $oCriteria->addDescendingOrderByColumn ( AppDocumentPeer::DOC_VERSION ); + $rs = AppDocumentPeer::doSelectRS ( $oCriteria ); $rs->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); $rs->next (); @@ -205,12 +224,13 @@ class AppFolder extends BaseAppFolder { //**** start get Doc Info $oApp = new Application ( ); if (($oApp->exists ( $row ['APP_UID'] )) || ($row ['APP_UID'] == "00000000000000000000000000000000")) { - + + $completeInfo = array("APP_DOC_FILENAME" => $row ["APP_DOC_UID"],"APP_DOC_UID"=>$row ['APP_UID']); $completeInfo = $this->getCompleteDocumentInfo ( $row ['APP_UID'], $row ['APP_DOC_UID'], $row ['DOC_VERSION'], $row ['DOC_UID'], $row ['USR_UID'] ); - + $oAppDocument = new AppDocument ( ); $lastVersion = $oAppDocument->getLastAppDocVersion ( $row ['APP_DOC_UID'], $row ['APP_UID'] ); - + $filesResult [] = $completeInfo; if ($completeInfo ['APP_DOC_STATUS'] != "DELETED") { if ((in_array ( $row ['APP_DOC_UID'], $completeInfo ['INPUT_DOCUMENTS'] )) || (in_array ( $row ['APP_DOC_UID'], $completeInfo ['OUTPUT_DOCUMENTS'] )) || (in_array ( $completeInfo ['USR_UID'], array ($_SESSION ['USER_LOGGED'], '-1' ) ))) { if (count ( $docIdFilter ) > 0) { @@ -221,12 +241,12 @@ class AppFolder extends BaseAppFolder { if ($searchType == "ALL") {// If search in name of docs is active then filter if ((stripos ( $completeInfo ['APP_DOC_FILENAME'], $keyword ) !== false) || (stripos ( $completeInfo ['APP_DOC_TAGS'], $keyword ) !== false)) { $filesResult [] = $completeInfo; - } + } } else {//No search filter active $filesResult [] = $completeInfo; } } - + } } } @@ -257,7 +277,7 @@ class AppFolder extends BaseAppFolder { $row3 = $oProcess->Load ( $row2 ['PRO_UID'] ); } $lastVersion = $oAppDocument->getLastAppDocVersion ( $appDocUid, $appUid ); - + switch ($row1 ['APP_DOC_TYPE']) { case "OUTPUT" : $oOutputDocument = new OutputDocument ( ); @@ -283,7 +303,7 @@ class AppFolder extends BaseAppFolder { $downloadLabel1 = ".doc"; break; } - + break; case "INPUT" : $oInputDocument = new InputDocument ( ); @@ -316,15 +336,15 @@ class AppFolder extends BaseAppFolder { $downloadLabel = G::LoadTranslation ( 'ID_DOWNLOAD' ); $downloadLabel1 = ""; break; - + } $oUser = new Users ( ); - if ($usrId != "-1") { + if (($usrId != "-1")&&($oUser->userExists($usrId))) { $row5 = $oUser->load ( $usrId ); } else { $row5 ['USR_USERNAME'] = "***"; } - + //Labels/Links $row6 = array (); $row6 ['DELETE_LABEL'] = G::LoadTranslation('ID_DELETE'); @@ -340,12 +360,12 @@ class AppFolder extends BaseAppFolder { $row6 ['NEWVERSION_LABEL'] = G::LoadTranslation ( 'ID_NEW_VERSION' ); } $row6 ['APP_DOC_UID_VERSION'] = $appDocUid . "_" . $docVersion; - + if ($appUid == "00000000000000000000000000000000") { //External Files $row1 ['APP_DOC_TYPE'] = G::LoadTranslation ( 'ID_EXTERNAL_FILE' ); } //**** End get docinfo - + $infoMerged = array_merge ( $row1, $row2, $row3, $row4, $row5, $row6 ); //krumo($infoMerged); @@ -355,7 +375,7 @@ class AppFolder extends BaseAppFolder { if (isset ( $infoMerged ['PRO_UID'] )) { $aObjectPermissions = $oCase->getAllObjects ( $infoMerged ['PRO_UID'], $infoMerged ['APP_UID'], '', $sUserUID ); } - + if (! is_array ( $aObjectPermissions )) { $aObjectPermissions = array ('DYNAFORMS' => array (- 1 ), 'INPUT_DOCUMENTS' => array (- 1 ), 'OUTPUT_DOCUMENTS' => array (- 1 ) ); } @@ -381,7 +401,7 @@ class AppFolder extends BaseAppFolder { } } //**************************************************************************************************** - + return array_merge ( $infoMerged, $aObjectPermissions ); } @@ -395,26 +415,26 @@ class AppFolder extends BaseAppFolder { } return (array_merge ( $folderArray, $foldersList )); } - + function getFolderTags($rootFolder) { $folderArray [$rootFolder] = $rootFolder; $foldersToProcess = $this->getFolderChilds ( $rootFolder, $folderArray ); $tagsInfo = array (); - + foreach ( $foldersToProcess as $folderkey => $foldername ) { $filesList = $this->getFolderContent ( $folderkey ); - + foreach ( $filesList as $key => $fileInfo ) { $fileTags = explode ( ",", $fileInfo ['APP_DOC_TAGS'] ); foreach ( $fileTags as $key1 => $tag ) { if (! (isset ( $tagsInfo [$tag] ))) - $tagsInfo [$tag] = 0; + $tagsInfo [$tag] = 0; $tagsInfo [$tag] ++; } } } return $tagsInfo; - + } function remove ($FolderUid, $rootfolder ) { $oCriteria = new Criteria('workflow'); diff --git a/workflow/engine/classes/model/Users.php b/workflow/engine/classes/model/Users.php index 9c43736ce..d1267aace 100644 --- a/workflow/engine/classes/model/Users.php +++ b/workflow/engine/classes/model/Users.php @@ -63,6 +63,24 @@ class Users extends BaseUsers { throw($e); } } + +public function userExists($UsrUid) + { + try { + $oRow = UsersPeer::retrieveByPK( $UsrUid ); + if (!is_null($oRow)) + { + return true; + } + else { + return false; + } + } + catch (Exception $oError) { + return false; + } + } + public function load($UsrUid) { try { diff --git a/workflow/engine/menus/cases.php b/workflow/engine/menus/cases.php index 13234adab..59ebcd4d7 100644 --- a/workflow/engine/menus/cases.php +++ b/workflow/engine/menus/cases.php @@ -60,7 +60,7 @@ $G_TMP_MENU->AddIdRawOption('CASES_HOME', 'casesStartPage', G::LoadTranslation('ID_CASES_START_PAGE'), '', '', 'blockHeader'); - //$G_TMP_MENU->AddIdRawOption('CASES_FOLDERS', 'casesStartPage?action=documents', G::LoadTranslation('ID_FOLDERS'), 'folderV2.gif' ); + $G_TMP_MENU->AddIdRawOption('CASES_FOLDERS', 'casesStartPage?action=documents', G::LoadTranslation('ID_FOLDERS'), 'folderV2.gif' ); //$G_TMP_MENU->AddIdRawOption('CASES_START_PAGE', 'casesStartPage?action=mainDashboard', ucwords(strtolower(G::LoadTranslation('ID_DASHBOARD'))), '' ); //Load Other registered Dashboards (From plugins) diff --git a/workflow/engine/methods/appFolder/appFolderAjax.php b/workflow/engine/methods/appFolder/appFolderAjax.php index b6106d8c1..293324829 100755 --- a/workflow/engine/methods/appFolder/appFolderAjax.php +++ b/workflow/engine/methods/appFolder/appFolderAjax.php @@ -10,83 +10,204 @@ $oPMFolder = new AppFolder ( ); $rootFolder = "/"; switch ($_POST ['action']) { - - case 'expandNode': - $folderList = $oPMFolder->getFolderList ( $_POST ['node'] != 'root' ? $_POST ['node'] == 'NA' ? "" : $_POST ['node'] : $rootFolder ); - $folderContent = $oPMFolder->getFolderContent ( $_POST ['node'] != 'root' ? $_POST ['node'] == 'NA' ? "" : $_POST ['node'] : $rootFolder ); - //G::pr($folderContent); - $processListTree=array(); - foreach ( $folderList as $key => $obj ) { - $tempTree ['text'] = $obj['FOLDER_NAME']; + + case 'expandNode': + if($_POST ['node']=="") $_POST ['node'] ="/"; + if($_POST ['node']=="root") $_POST ['node'] ="/"; + if(!(isset($_POST['sendWhat']))) $_POST['sendWhat']="both"; + if(($_POST['sendWhat']=="dirs")||($_POST['sendWhat']=="both")){ + $folderList = $oPMFolder->getFolderList ( $_POST ['node'] != 'root' ? $_POST ['node'] == 'NA' ? "" : $_POST ['node'] : $rootFolder ); + //G::pr($folderList); + } + if(($_POST['sendWhat']=="files")||($_POST['sendWhat']=="both")){ + $folderContent = $oPMFolder->getFolderContent ( $_POST ['node'] != 'root' ? $_POST ['node'] == 'NA' ? "" : $_POST ['node'] : $rootFolder ); + //G::pr($folderContent); + } + //G::pr($folderContent); + $processListTree=array(); + if(isset($folderList)){ + $tempTree=array(); + foreach ( $folderList as $key => $obj ) { + //$tempTree ['all-obj'] = $obj; + $tempTree ['text'] = $obj['FOLDER_NAME']; $tempTree ['id'] = $obj['FOLDER_UID']; $tempTree ['folderID'] = $obj['FOLDER_UID']; $tempTree ['cls'] = 'folder'; $tempTree ['draggable'] = true; + $tempTree ['name'] = $obj['FOLDER_NAME']; + $tempTree ['type'] = "Directory"; + $tempTree ['is_file'] = false; + $tempTree ['appDocCreateDate'] = $obj['FOLDER_CREATE_DATE']; + $tempTree ['qtip'] ='Directory: '.$obj['FOLDER_NAME'].'
Create Date: '.$obj['FOLDER_CREATE_DATE'].''; + $tempTree ['is_writable'] =true; + $tempTree ['is_chmodable'] =true; + $tempTree ['is_readable'] =true; + $tempTree ['is_deletable'] =true; + + + + + + if((isset($_POST['option']))&&($_POST['option']=="gridDocuments")){ + $tempTree ['icon'] = "/images/documents/extension/folder.png"; + } //$tempTree ['leaf'] = true; //$tempTree ['optionType'] = "category"; //$tempTree['allowDrop']=false; - $tempTree ['singleClickExpand'] = true; + //$tempTree ['singleClickExpand'] = false; /* - if ($key != "No Category") { - $tempTree ['expanded'] = true; - } else { - //$tempTree ['expanded'] = false; - $tempTree ['expanded'] = true; - } - */ + if ($key != "No Category") { + $tempTree ['expanded'] = true; + } else { + //$tempTree ['expanded'] = false; + $tempTree ['expanded'] = true; + } + */ $processListTree [] = $tempTree; + $tempTree=array(); + } + + if($_POST ['node'] == '/'){ + $notInFolderLabel = G::LoadTranslation ( 'ID_NOT_IN_FOLDER' ); + $tempTree ['text'] = $notInFolderLabel; + $tempTree ['id'] = "NA"; + $tempTree ['folderID'] = "NA"; + $tempTree ['cls'] = 'folder'; + $tempTree ['draggable'] = true; + $tempTree ['name'] = $notInFolderLabel; + $tempTree ['type'] = "Directory"; + $tempTree ['is_file'] = false; + $tempTree ['qtip'] ='Directory: '.$notInFolderLabel.'
Unfiled Files '; + $tempTree ['is_writable'] =true; + $tempTree ['is_chmodable'] =true; + $tempTree ['is_readable'] =true; + $tempTree ['is_deletable'] =true; + + if((isset($_POST['option']))&&($_POST['option']=="gridDocuments")){ + $tempTree ['icon'] = "/images/documents/extension/bz2.png"; + } + //$tempTree ['leaf'] = true; + //$tempTree ['optionType'] = "category"; + //$tempTree['allowDrop']=false; + //$tempTree ['singleClickExpand'] = false; + /* + if ($key != "No Category") { + $tempTree ['expanded'] = true; + } else { + //$tempTree ['expanded'] = false; + $tempTree ['expanded'] = true; + } + */ + $processListTree [] = $tempTree; + $tempTree=array(); + + } } - foreach ( $folderContent as $key => $obj ) { - $tempTree ['text'] = $obj['APP_DOC_FILENAME']; + + if(isset($folderContent)){ + foreach ( $folderContent as $key => $obj ) { + $tempTree ['text'] = $obj['APP_DOC_FILENAME']; $tempTree ['id'] = $obj['APP_DOC_UID']; - + $tempTree ['cls'] = 'file'; //$tempTree ['draggable'] = true; $tempTree ['leaf'] = true; + $tempTree ['name'] = $obj['APP_DOC_FILENAME']; + $mimeInformation=getMime($obj['APP_DOC_FILENAME']); + $tempTree ['type'] = $mimeInformation['description']; + $tempTree ['is_file'] = true; + //if((isset($_POST['option']))&&($_POST['option']=="gridDocuments")){ + $tempTree ['icon'] = $mimeInformation['icon']; + //} + + $tempTree ['docVersion'] = $obj['DOC_VERSION']; + $tempTree ['appUid'] = $obj['APP_UID']; + $tempTree ['usrUid'] = $obj['USR_UID']; + $tempTree ['appDocType'] = $obj['APP_DOC_TYPE']; + $tempTree ['appDocCreateDate'] = $obj['APP_DOC_CREATE_DATE']; + $tempTree ['appDocPlugin'] = $obj['APP_DOC_PLUGIN']; + $tempTree ['appDocTags'] = $obj['APP_DOC_TAGS']; + $tempTree ['appDocTitle'] = $obj['APP_DOC_TITLE']; + $tempTree ['appDocComment'] = $obj['APP_DOC_COMMENT']; + $tempTree ['appDocFileName'] = $obj['APP_DOC_FILENAME']; + if(isset($obj['APP_NUMBER'])){ + $tempTree ['appLabel'] = sprintf("%s '%s' (%s)",$obj['APP_NUMBER'],$obj['APP_TITLE'],$obj['STATUS']); + }else{ + $tempTree ['appLabel'] = "No case related"; + } + $tempTree ['proTitle'] = $obj['PRO_TITLE']; + $tempTree ['appDocVersionable'] = 0; + if(isset($obj['OUT_DOC_VERSIONING'])){ + $tempTree ['appDocVersionable'] = $obj['OUT_DOC_VERSIONING']; + }elseif(isset($obj['INP_DOC_VERSIONING'])){ + $tempTree ['appDocVersionable'] = $obj['INP_DOC_VERSIONING']; + } + + if(isset($obj['USR_LASTNAME'])&&isset($obj['USR_LASTNAME'])){ + $tempTree ['owner'] = sprintf("%s %s (%s)",$obj['USR_LASTNAME'],$obj['USR_FIRSTNAME'],$obj['USR_USERNAME']); + }else{ + $tempTree ['owner'] = sprintf("%s",$obj['USR_USERNAME']); + + } + $tempTree ['deletelabel'] = $obj['DELETE_LABEL']; + $tempTree ['downloadLabel'] = $obj['DOWNLOAD_LABEL']; + $tempTree ['downloadLink'] = $obj['DOWNLOAD_LINK']; + $tempTree ['downloadLabel1'] = $obj['DOWNLOAD_LABEL1']; + $tempTree ['downloadLink1'] = $obj['DOWNLOAD_LINK1']; + $tempTree ['appDocUidVersion'] = $obj['APP_DOC_UID_VERSION']; + //$tempTree ['optionType'] = "category"; //$tempTree['allowDrop']=false; //$tempTree ['singleClickExpand'] = true; /* - if ($key != "No Category") { - $tempTree ['expanded'] = true; - } else { - //$tempTree ['expanded'] = false; - $tempTree ['expanded'] = true; - } - */ + if ($key != "No Category") { + $tempTree ['expanded'] = true; + } else { + //$tempTree ['expanded'] = false; + $tempTree ['expanded'] = true; + } + */ $processListTree [] = $tempTree; + $tempTree=array(); + } + } + if((isset($_POST['option']))&&($_POST['option']=="gridDocuments")){ + $processListTreeTemp['totalCount']=count($processListTree); + $processListTreeTemp['items']=$processListTree; + $processListTree = $processListTreeTemp; } - print G::json_encode ( $processListTree ); - break; - case 'openPMFolder' : - $WIDTH_PANEL = 350; - G::LoadClass ( 'tree' ); - $folderContent = $oPMFolder->getFolderList ( $_POST ['folderID'] != '0' ? $_POST ['folderID'] == 'NA' ? "" : $_POST ['folderID'] : $rootFolder ); - //krumo($folderContent); - if (! is_array ( $folderContent )) { - echo $folderContent; - exit (); - } - - $tree = new Tree ( ); - $tree->name = 'DMS'; - $tree->nodeType = "blank"; - - //$tree->width="350px"; - $tree->value = ''; - $tree->showSign = false; - - $i = 0; - foreach ( $folderContent as $key => $obj ) { - $i ++; - //if($obj->item_type=="F"){ - - $RowClass = ($i % 2 == 0) ? 'Row1' : 'Row2'; - $id_delete = G::LoadTranslation('ID_DELETE'); - $id_edit = G::LoadTranslation('ID_EDIT'); - - $htmlGroup = <<getFolderList ( $_POST ['folderID'] != '0' ? $_POST ['folderID'] == 'NA' ? "" : $_POST ['folderID'] : $rootFolder ); + //krumo($folderContent); + if (! is_array ( $folderContent )) { + echo $folderContent; + exit (); + } + + $tree = new Tree ( ); + $tree->name = 'DMS'; + $tree->nodeType = "blank"; + + //$tree->width="350px"; + $tree->value = ''; + $tree->showSign = false; + + $i = 0; + foreach ( $folderContent as $key => $obj ) { + $i ++; + //if($obj->item_type=="F"){ + + + $RowClass = ($i % 2 == 0) ? 'Row1' : 'Row2'; + $id_delete = G::LoadTranslation('ID_DELETE'); + $id_edit = G::LoadTranslation('ID_EDIT'); + + $htmlGroup = << @@ -97,16 +218,16 @@ switch ($_POST ['action']) {
GHTML; - - $ch = & $tree->addChild ( $key, $htmlGroup, array ('nodeType' => 'child' ) ); - $ch->point = ' '; - - } - $RowClass = ($i % 2 == 0) ? 'Row1' : 'Row2'; - $key = 0; - if ($_POST ['folderID'] == '0') { - $notInFolderLabel = G::LoadTranslation ( 'ID_NOT_IN_FOLDER' ); - $htmlGroup = <<addChild ( $key, $htmlGroup, array ('nodeType' => 'child' ) ); + $ch->point = ' '; + + } + $RowClass = ($i % 2 == 0) ? 'Row1' : 'Row2'; + $key = 0; + if ($_POST ['folderID'] == '0') { + $notInFolderLabel = G::LoadTranslation ( 'ID_NOT_IN_FOLDER' ); + $htmlGroup = <<
 - {$notInFolderLabel} -  @@ -115,191 +236,839 @@ GHTML;
GHTML; - - $ch = & $tree->addChild ( $key, $htmlGroup, array ('nodeType' => 'child' ) ); - $ch->point = ' '; - } - - print ($tree->render ()) ; - - break; - case 'getPMFolderContent' : - $swSearch = false; - - if (isset ( $_POST ['folderID'] )) { //Render content of a folder - $folderID = $_POST ['folderID'] != '0' ? $_POST ['folderID'] == 'NA' ? "" : $_POST ['folderID'] : $rootFolder; - $folderContent = $oPMFolder->getFolderContent ( $folderID ); - } else { // Perform a Search - $swSearch = true; - $folderContent = $oPMFolder->getFolderContent ( NULL, array (), $_POST ['searchKeyword'], $_POST ['type'] ); - } - array_unshift ( $folderContent, array ('id' => 'char' ) ); - if (! is_array ( $folderContent )) { - echo $folderContent; - exit (); - } - - $_DBArray ['PM_FOLDER_DOC'] = $folderContent; - $_SESSION ['_DBArray'] = $_DBArray; - - G::LoadClass ( 'ArrayPeer' ); - $c = new Criteria ( 'dbarray' ); - $c->setDBArrayTable ( 'PM_FOLDER_DOC' ); - $c->addAscendingOrderByColumn ( 'id' ); - $G_PUBLISH = new Publisher ( ); - require_once ('classes/class.xmlfield_InputPM.php'); - - $labelFolderAddFile = ""; - $labelFolderAddFolder = ""; - if ($RBAC->userCanAccess ( 'PM_FOLDERS_ADD_FILE' ) == 1) { - $labelFolderAddFile = G::LoadTranslation ( 'ID_ATTACH' ); - } - if ($RBAC->userCanAccess ( 'PM_FOLDERS_ADD_FOLDER' ) == 1) { - $labelFolderAddFolder = G::LoadTranslation ( 'ID_NEW_FOLDER' ); - } - - if (! $swSearch) { - $G_PUBLISH->AddContent ( 'propeltable', 'paged-table', 'appFolder/appFolderDocumentList', $c, array ('folderID' => $_POST ['folderID'] != '0' ? $_POST ['folderID'] == 'NA' ? "/" : $_POST ['folderID'] : $rootFolder, 'labelFolderAddFile' => $labelFolderAddFile, 'labelFolderAddFolder' => $labelFolderAddFolder ) ); - $G_PUBLISH->AddContent ( 'xmlform', 'xmlform', 'appFolder/appFolderDocumentListHeader', '', array (), 'appFolderList?folderID=' . $_POST ['folderID'] ); - } else { - $G_PUBLISH->AddContent ( 'propeltable', 'paged-table', 'appFolder/appFolderDocumentListSearch', $c, array () ); - $G_PUBLISH->AddContent ( 'xmlform', 'xmlform', 'appFolder/appFolderDocumentListHeader', '', array (), 'appFolderList?folderID=/' ); - } - - G::RenderPage ( 'publish', 'raw' ); - - break; - - case "getPMFolderTags" : - // Default font sizes - $min_font_size = 12; - $max_font_size = 30; - - $rootFolder = "/"; - $folderID = $_POST ['rootFolder'] != '0' ? $_POST ['rootFolder'] == 'NA' ? "" : $_POST ['rootFolder'] : $rootFolder; - $tags = $oPMFolder->getFolderTags ( $folderID ); - $minimum_count = 0; - $maximum_count = 0; - if ((is_array ( $tags )) && (count ( $tags ) > 0)) { - $minimum_count = min ( array_values ( $tags ) ); - $maximum_count = max ( array_values ( $tags ) ); - } - $spread = $maximum_count - $minimum_count; - - if ($spread == 0) { - $spread = 1; - } - - $cloud_html = ''; - $cloud_tags = array (); // create an array to hold tag code - foreach ( $tags as $tag => $count ) { - $href = "#"; - //$href="?q="$tag; - $size = $min_font_size + ($count - $minimum_count) * ($max_font_size - $min_font_size) / $spread; - $cloud_tags [] = '' . htmlspecialchars ( stripslashes ( $tag ) ) . ''; - } - $cloud_html = join ( "\n", $cloud_tags ) . "\n"; - - print "$cloud_html"; - - break; - - case "uploadDocument" : - //krumo($_POST); - G::LoadClass ( 'case' ); - $oCase = new Cases ( ); - - $G_PUBLISH = new Publisher ( ); - $Fields ['DOC_UID'] = $_POST ['docID']; - $Fields ['APP_DOC_UID'] = $_POST ['appDocId']; - $Fields ['actionType'] = $_POST ['actionType']; - $Fields ['docVersion'] = $_POST ['docVersion']; - - $Fields ['appId'] = $_POST ['appId']; - $Fields ['docType'] = $_POST ['docType']; - $G_PUBLISH->AddContent ( 'xmlform', 'xmlform', 'cases/cases_AttachInputDocumentGeneral', '', $Fields, 'appFolderSaveDocument?UID=' . $_POST ['docID'] . '&appId=' . $_POST ['appId'] . '&docType=' . $_POST ['docType'] ); - G::RenderPage ( 'publish', 'raw' ); - - break; - case "documentVersionHistory" : - - $folderID = $_POST ['folderID'] != '0' ? $_POST ['folderID'] == 'NA' ? "" : $_POST ['folderID'] : $rootFolder; - $folderContent = $oPMFolder->getFolderContent ( $folderID, array ($_POST ['appDocId'] ) ); - - array_unshift ( $folderContent, array ('id' => 'char' ) ); - if (! is_array ( $folderContent )) { - echo $folderContent; - exit (); - } - - $_DBArray ['PM_FOLDER_DOC_HISTORY'] = $folderContent; - $_SESSION ['_DBArray'] = $_DBArray; - - G::LoadClass ( 'ArrayPeer' ); - $c = new Criteria ( 'dbarray' ); - $c->setDBArrayTable ( 'PM_FOLDER_DOC_HISTORY' ); - $c->addAscendingOrderByColumn ( 'id' ); - $G_PUBLISH = new Publisher ( ); - require_once ('classes/class.xmlfield_InputPM.php'); - - $G_PUBLISH->AddContent ( 'propeltable', 'paged-table', 'appFolder/appFolderDocumentListHistory', $c, array ('folderID' => $_POST ['folderID'] != '0' ? $_POST ['folderID'] == 'NA' ? "/" : $_POST ['folderID'] : $rootFolder ) ); - - G::RenderPage ( 'publish', 'raw' ); - - break; - - case "uploadExternalDocument" : - G::LoadClass ( 'case' ); - $oCase = new Cases ( ); - - $G_PUBLISH = new Publisher ( ); - $Fields ['DOC_UID'] = "-1"; - - $Fields ['appId'] = "00000000000000000000000000000000"; - - $G_PUBLISH->AddContent ( 'xmlform', 'xmlform', 'cases/cases_AttachInputDocumentGeneral', '', $Fields, 'appFolderSaveDocument?UID=-1&appId=' . $Fields ['appId'] . "&folderId=" . $_POST ['folderID'] ); - G::RenderPage ( 'publish', 'raw' ); - - break; - - case "newFolder" : - $oFolder = new AppFolder ( ); - $folderStructure = $oPMFolder->getFolderStructure ( $_POST ['folderID'] ); - $Fields ['FOLDER_PATH'] = $folderStructure ['PATH']; - $Fields ['FOLDER_PARENT_UID'] = $_POST ['folderID']; - $Fields ['FOLDER_UID'] = G::GenerateUniqueID (); - $G_PUBLISH = new Publisher ( ); - - $G_PUBLISH->AddContent ( 'xmlform', 'xmlform', 'appFolder/appFolderEdit', '', $Fields, 'appFolderSave' ); - G::RenderPage ( 'publish', 'raw' ); - - break; - - case "documentInfo" : - $oFolder = new AppFolder ( ); - $Fields = $oPMFolder->getCompleteDocumentInfo ( $_POST ['appId'], $_POST ['appDocId'], $_POST ['docVersion'], $_POST ['docID'], $_POST ['usrUid'] ); - $G_PUBLISH = new Publisher ( ); - - $G_PUBLISH->AddContent ( 'xmlform', 'xmlform', 'appFolder/appFolderDocumentInfo', '', $Fields, '' ); - G::RenderPage ( 'publish', 'raw' ); - - break; - - case "documentdelete": - include_once ("classes/model/AppDocument.php"); - $oAppDocument = new AppDocument ( ); - $oAppDocument->remove($_POST['sFileUID'],$_POST['docVersion']); - /*we need to delete fisicaly the file use the follow code - $appId= "00000000000000000000000000000000"; - $sPathName = PATH_DOCUMENT . $appId . PATH_SEP; - unlink($sPathName.$_POST['sFileUID'].'_1.jpg');*/ - break; - - case "deletePMFolder": - include_once ("classes/model/AppFolder.php"); - $oAppFoder = new AppFolder ( ); - $oAppFoder->remove($_POST['sFileUID'],$_POST['rootfolder']); + + $ch = & $tree->addChild ( $key, $htmlGroup, array ('nodeType' => 'child' ) ); + $ch->point = ' '; + } - break; + print ($tree->render ()) ; + break; + case 'getPMFolderContent' : + $swSearch = false; + + if (isset ( $_POST ['folderID'] )) { //Render content of a folder + $folderID = $_POST ['folderID'] != '0' ? $_POST ['folderID'] == 'NA' ? "" : $_POST ['folderID'] : $rootFolder; + $folderContent = $oPMFolder->getFolderContent ( $folderID ); + } else { // Perform a Search + $swSearch = true; + $folderContent = $oPMFolder->getFolderContent ( NULL, array (), $_POST ['searchKeyword'], $_POST ['type'] ); + } + array_unshift ( $folderContent, array ('id' => 'char' ) ); + if (! is_array ( $folderContent )) { + echo $folderContent; + exit (); + } + + $_DBArray ['PM_FOLDER_DOC'] = $folderContent; + $_SESSION ['_DBArray'] = $_DBArray; + + G::LoadClass ( 'ArrayPeer' ); + $c = new Criteria ( 'dbarray' ); + $c->setDBArrayTable ( 'PM_FOLDER_DOC' ); + $c->addAscendingOrderByColumn ( 'id' ); + $G_PUBLISH = new Publisher ( ); + require_once ('classes/class.xmlfield_InputPM.php'); + + $labelFolderAddFile = ""; + $labelFolderAddFolder = ""; + if ($RBAC->userCanAccess ( 'PM_FOLDERS_ADD_FILE' ) == 1) { + $labelFolderAddFile = G::LoadTranslation ( 'ID_ATTACH' ); + } + if ($RBAC->userCanAccess ( 'PM_FOLDERS_ADD_FOLDER' ) == 1) { + $labelFolderAddFolder = G::LoadTranslation ( 'ID_NEW_FOLDER' ); + } + + if (! $swSearch) { + $G_PUBLISH->AddContent ( 'propeltable', 'paged-table', 'appFolder/appFolderDocumentList', $c, array ('folderID' => $_POST ['folderID'] != '0' ? $_POST ['folderID'] == 'NA' ? "/" : $_POST ['folderID'] : $rootFolder, 'labelFolderAddFile' => $labelFolderAddFile, 'labelFolderAddFolder' => $labelFolderAddFolder ) ); + $G_PUBLISH->AddContent ( 'xmlform', 'xmlform', 'appFolder/appFolderDocumentListHeader', '', array (), 'appFolderList?folderID=' . $_POST ['folderID'] ); + } else { + $G_PUBLISH->AddContent ( 'propeltable', 'paged-table', 'appFolder/appFolderDocumentListSearch', $c, array () ); + $G_PUBLISH->AddContent ( 'xmlform', 'xmlform', 'appFolder/appFolderDocumentListHeader', '', array (), 'appFolderList?folderID=/' ); + } + + G::RenderPage ( 'publish', 'raw' ); + + break; + + case "getPMFolderTags" : + // Default font sizes + $min_font_size = 12; + $max_font_size = 30; + + $rootFolder = "/"; + $folderID = $_POST ['rootFolder'] != '0' ? $_POST ['rootFolder'] == 'NA' ? "" : $_POST ['rootFolder'] : $rootFolder; + $tags = $oPMFolder->getFolderTags ( $folderID ); + $minimum_count = 0; + $maximum_count = 0; + if ((is_array ( $tags )) && (count ( $tags ) > 0)) { + $minimum_count = min ( array_values ( $tags ) ); + $maximum_count = max ( array_values ( $tags ) ); + } + $spread = $maximum_count - $minimum_count; + + if ($spread == 0) { + $spread = 1; + } + + $cloud_html = ''; + $cloud_tags = array (); // create an array to hold tag code + foreach ( $tags as $tag => $count ) { + $href = "#"; + //$href="?q="$tag; + $size = $min_font_size + ($count - $minimum_count) * ($max_font_size - $min_font_size) / $spread; + $cloud_tags [] = '' . htmlspecialchars ( stripslashes ( $tag ) ) . ''; + } + $cloud_html = join ( "\n", $cloud_tags ) . "\n"; + + print "$cloud_html"; + + break; + + case "uploadDocument" : + + $uploadDocumentComponent=array(); + + + $uploadDocumentComponent["xtype"]= "tabpanel"; + $uploadDocumentComponent["stateId"]= "upload_tabpanel"; + $uploadDocumentComponent["activeTab"]= "uploadform"; + $uploadDocumentComponent["dialogtitle"]= "actupload"; + $uploadDocumentComponent["stateful"]= true; + + $uploadDocumentComponent["stateEvents"]= array("tabchange"); + $uploadDocumentComponent["getState"]= "function_getState"; + $functionsToReplace['function_getState']="function() { return { + activeTab:this.items.indexOf(this.getActiveTab()) + }; + }"; + $uploadDocumentComponent["listeners"]["resize"]["fn"]="function_listeners_resize"; + $functionsToReplace['function_listeners_resize'] = "function(panel) { + panel.items.each( function(item) { item.setHeight(500);return true } ); + }"; + $uploadDocumentComponent["items"]=array(); + + $itemA=array(); + + + $itemA["xtype"]= "swfuploadpanel"; + $itemA["title"]= "flashupload"; + $itemA["height"]= "300"; + $itemA["id"]= "swfuploader"; + $itemA["viewConfig"]["forceFit"]=true; + $itemA["listeners"]["allUploadsComplete"]["fn"]="function_listeners_allUploadsComplete"; + $functionsToReplace['function_listeners_allUploadsComplete'] = "function(panel) { + datastore.reload(); + panel.destroy(); + Ext.getCmp('dialog').destroy(); + statusBarMessage('upload_completed', false ); + }"; + + // Uploader Params + $itemA["upload_url"]= "../appFolder/appFolderAjax.php"; + $itemA["post_params"][session_name()]=session_id(); + $itemA["post_params"]["option"]="uploadFile"; + $itemA["post_params"]["action"]="upload"; + $itemA["post_params"]["dir"]="datastore.directory"; + $itemA["post_params"]["requestType"]="xmlhttprequest"; + $itemA["post_params"]["confirm"]="true"; + + $itemA["flash_url"]="/scripts/extjs3-ext/ux.swfupload/swfupload.swf"; + $itemA["file_size_limit"]=get_max_file_size(); + // Custom Params + $itemA["single_file_select"]=false; // Set to true if you only want to select one file from the FileDialog. + $itemA["confirm_delete"]=false; // This will prompt for removing files from queue. + $itemA["remove_completed"]=false; // Remove file from grid after uploaded. +//$uploadDocumentComponent["items"][]=$itemA; + + //Standard Upload + $itemA=array(); + $itemA["xtype"]="form"; + $itemA["autoScroll"]=true; + $itemA["autoHeight"]=true; + $itemA["id"]="uploadform"; + $itemA["fileUpload"]=true; + $itemA["labelWidth"]="125"; + $itemA["url"]="URL_SCRIPT"; + $itemA["title"]="standardupload"; + //$itemA["tooltip"]="Max File Size ". ((get_max_file_size() / 1024) / 1024)." MB
Max Post Size". ((get_max_upload_limit() / 1024) / 1024)." MB
"; + $itemA["frame"]=true; + $itemA["items"]=array(); + $itemB=array(); + + $itemB["xtype"]="displayfield"; + $itemB["value"]="Max File Size ". ((get_max_file_size() / 1024) / 1024)." MB
Max Post Size". ((get_max_upload_limit() / 1024) / 1024)." MB
"; + //$itemA["items"][]=$itemB; + + for($i=0;$i<7;$i++) { + $itemB=array(); + + $itemB["xtype"]="fileuploadfield"; + $itemB["fieldLabel"]="File ".($i+1); + $itemB["id"]="uploadedFile[$i]"; + $itemB["name"]="uploadedFile[$i]"; + $itemB["width"]=275; + $itemB["buttonOnly"]= false; + $itemA["items"][]=$itemB; + } + + $itemB=array(); + + $itemB["xtype"]="checkbox"; + $itemB["fieldLabel"]="overwrite_files"; + $itemB["name"]="overwrite_files"; + $itemB["checked"]=true; + $itemA["items"][]=$itemB; + + $itemA["buttons"]=array(); + + $buttonA=array(); + $buttonA["text"]="btnsave"; + $buttonA["handler"]="function_standardupload_btnsave"; + $functionsToReplace["function_standardupload_btnsave"]=' function() { + statusBarMessage( "upload_processing", true ); + form = Ext.getCmp("uploadform").getForm(); + + //Ext.getCmp("uploadform").getForm().submit(); + console.log(form); + console.log(form.url); + Ext.getCmp("uploadform").getForm().submit({ + //reset: true, + reset: false, + success: function(form, action) { + + datastore.reload(); + statusBarMessage( action.result.message, false, true ); + Ext.getCmp("dialog").destroy(); + }, + failure: function(form, action) { + + if( !action.result ) return; + Ext.MessageBox.alert("error", action.result.error); + statusBarMessage( action.result.error, false, false ); + }, + scope: Ext.getCmp("uploadform"), + // add some vars to the request, similar to hidden fields + params: { + option: "standardupload", + action: "uploadExternalDocument", + dir: datastore.directory, + requestType: "xmlhttprequest", + confirm: "true", + docUid: "-1", + appId: "00000000000000000000000000000000" + } + }); + }'; + + $itemA["buttons"][]=$buttonA; + + $buttonA=array(); + + $buttonA["text"]= "btncancel"; + $buttonA["handler"]="function_standardupload_btncancel"; + $functionsToReplace["function_standardupload_btncancel"]=' function() { Ext.getCmp("dialog").destroy(); }'; +$itemA["buttons"][]=$buttonA; + + $uploadDocumentComponent["items"][]=$itemA; + + $itemA=array(); + + $itemA["xtype"]="form"; + $itemA["id"]="transferform"; + $itemA["url"]="../appFolder/appFolderAjax.php"; + $itemA["hidden"]="true"; + $itemA["title"]="acttransfer"; + $itemA["autoHeight"]="true"; + $itemA["labelWidth"]=225; + $itemA["frame"]= true; + $itemA["items"]=array(); + + + for($i=0;$i<7;$i++) { + $itemB=array(); + $itemB["xtype"]= "textfield"; + $itemB["fieldLabel"]= "url_to_file"; + $itemB["name"]= "userfile[$i]"; + $itemB["width"]=275; + $itemA["items"][]=$itemB; + } + $itemB=array(); + $itemB["xtype"]="checkbox"; + $itemB["fieldLabel"]="overwrite_files"; + $itemB["name"]="overwrite_files"; + $itemB["checked"]=true; + $itemA["items"][]=$itemB; + + $itemA["buttons"]=array(); + + $buttonA=array(); + + $buttonA["text"]="btnsave"; + $buttonA["handler"]="function_transfer_btnsave"; + $functionsToReplace["function_transfer_btnsave"]='function() { + statusBarMessage( "transfer_processing", true ); + transfer = Ext.getCmp("transferform").getForm(); + transfer.submit({ + //reset: true, + reset: false, + success: function(form, action) { + datastore.reload(); + statusBarMessage( action.result.message, false, true ); + Ext.getCmp("dialog").destroy(); + }, + failure: function(form, action) { + if( !action.result ) return; + Ext.MessageBox.alert("error", action.result.error); + statusBarMessage( action.result.error, false, false ); + }, + scope: transfer, + // add some vars to the request, similar to hidden fields + params: { + "option": "com_extplorer", + "action": "transfer", + "dir": datastore.directory, + "confirm": "true" + } + }); + }'; + + $itemA["buttons"]=$buttonA; + + $buttonA=array(); + $buttonA["text"]="btncancel"; + $buttonA["handler"]="function_transfer_btncancel"; + $functionsToReplace["function_transfer_btncancel"]='function() { Ext.getCmp("dialog").destroy(); }'; +$itemA["buttons"]=$buttonA; + + // $uploadDocumentComponent["items"][]=$itemA; + +$finalResponse=G::json_encode($uploadDocumentComponent); +$finalResponse=str_replace("URL_SCRIPT","../appFolder/appFolderAjax.php",$finalResponse); +foreach($functionsToReplace as $key => $originalFunction){ + + $finalResponse=str_replace('"'.$key.'"',$originalFunction,$finalResponse); +} + echo ($finalResponse); + +/* + //krumo($_POST); + G::LoadClass ( 'case' ); + $oCase = new Cases ( ); + + $G_PUBLISH = new Publisher ( ); + $Fields ['DOC_UID'] = $_POST ['docID']; + $Fields ['APP_DOC_UID'] = $_POST ['appDocId']; + $Fields ['actionType'] = $_POST ['actionType']; + $Fields ['docVersion'] = $_POST ['docVersion']; + + $Fields ['appId'] = $_POST ['appId']; + $Fields ['docType'] = $_POST ['docType']; + $G_PUBLISH->AddContent ( 'xmlform', 'xmlform', 'cases/cases_AttachInputDocumentGeneral', '', $Fields, 'appFolderSaveDocument?UID=' . $_POST ['docID'] . '&appId=' . $_POST ['appId'] . '&docType=' . $_POST ['docType'] ); + G::RenderPage ( 'publish', 'raw' ); +*/ + break; + case "documentVersionHistory" : + + $folderID = $_POST ['folderID'] != '0' ? $_POST ['folderID'] == 'NA' ? "" : $_POST ['folderID'] : $rootFolder; + $folderContent = $oPMFolder->getFolderContent ( $folderID, array ($_POST ['appDocId'] ) ); + + array_unshift ( $folderContent, array ('id' => 'char' ) ); + if (! is_array ( $folderContent )) { + echo $folderContent; + exit (); + } + + $_DBArray ['PM_FOLDER_DOC_HISTORY'] = $folderContent; + $_SESSION ['_DBArray'] = $_DBArray; + + G::LoadClass ( 'ArrayPeer' ); + $c = new Criteria ( 'dbarray' ); + $c->setDBArrayTable ( 'PM_FOLDER_DOC_HISTORY' ); + $c->addAscendingOrderByColumn ( 'id' ); + $G_PUBLISH = new Publisher ( ); + require_once ('classes/class.xmlfield_InputPM.php'); + + $G_PUBLISH->AddContent ( 'propeltable', 'paged-table', 'appFolder/appFolderDocumentListHistory', $c, array ('folderID' => $_POST ['folderID'] != '0' ? $_POST ['folderID'] == 'NA' ? "/" : $_POST ['folderID'] : $rootFolder ) ); + + G::RenderPage ( 'publish', 'raw' ); + + break; + + case "uploadExternalDocument" : + + $response['action']=$_POST['action']. " - ".$_POST['option']; + $response['error']="error"; + $response['message']="error"; + $response['success']=false; + if(isset($_POST["confirm"]) && $_POST["confirm"]=="true") { + //G::pr($_FILES); + $uploadedInstances=count($_FILES['uploadedFile']['name']); + $sw_error=false; + $sw_error_exists=isset($_FILES['uploadedFile']['error']); + $emptyInstances=0; + $quequeUpload=array(); + // upload files & check for errors + for($i=0;$i<$uploadedInstances;$i++) { + $errors[$i]=NULL; + $tmp = $_FILES['uploadedFile']['tmp_name'][$i]; + $items[$i] = stripslashes($_FILES['uploadedFile']['name'][$i]); + if($sw_error_exists) $up_err = $_FILES['uploadedFile']['error'][$i]; + else $up_err=(file_exists($tmp)?0:4); + + + if($items[$i]=="" || $up_err==4){ + $emptyInstances++; + continue; + } + if($up_err==1 || $up_err==2) { + $errors[$i]='miscfilesize'; + $sw_error=true; continue; + } + if($up_err==3) { + $errors[$i]='miscfilepart'; + $sw_error=true; continue; + } + if(!@is_uploaded_file($tmp)) { + $errors[$i]='uploadfile'; + $sw_error=true; continue; + } + + //The uplaoded files seems to be correct and ready to be uploaded. Add to the Queque + $fileInfo=array("tempName"=>$tmp,"fileName"=>$items[$i]); + $quequeUpload[]=$fileInfo; + } + //G::pr($quequeUpload); + + //Read. Instance Document classes + if(!empty($quequeUpload)){ + $docUid=$_POST['docUid']; + $appDocUid=isset($_POST['APP_DOC_UID'])?$_POST['APP_DOC_UID']:""; + $docVersion=isset($_POST['docVersion'])?$_POST['docVersion']:""; + $actionType=isset($_POST['actionType'])?$_POST['actionType']:""; + $folderId=$_POST['dir']==""?"/":$_POST['dir']; + $appId=$_POST['appId']; + $docType=isset($_POST['docType'])?$_GET['docType']:"INPUT"; + + //save info + + require_once ( "classes/model/AppDocument.php" ); + require_once ('classes/model/AppFolder.php'); + require_once ('classes/model/InputDocument.php'); + + $oInputDocument = new InputDocument(); + if($docUid!=-1){ + $aID = $oInputDocument->load($docUid); + }else{ + $oFolder=new AppFolder(); + $folderStructure=$oFolder->getFolderStructure($folderId); + $aID=array('INP_DOC_DESTINATION_PATH'=>$folderStructure['PATH']); + } + + + $oAppDocument = new AppDocument(); + + + //Get the Custom Folder ID (create if necessary) + $oFolder=new AppFolder(); + if($docUid!=-1){ + //krumo("jhl"); + $folderId=$oFolder->createFromPath($aID['INP_DOC_DESTINATION_PATH'],$appId); + //Tags + $fileTags=$oFolder->parseTags($aID['INP_DOC_TAGS'],$appId); + }else{ + $folderId=$folderId; + $fileTags="EXTERNAL"; + } + + foreach($quequeUpload as $key =>$fileObj){ + switch($actionType){ + case "R": //replace + $aFields = array('APP_DOC_UID' => $appDocUid, + 'APP_UID' => $appId, + 'DOC_VERSION' => $docVersion, + 'DEL_INDEX' => 1, + 'USR_UID' => $_SESSION['USER_LOGGED'], + 'DOC_UID' => $docUid, + 'APP_DOC_TYPE' => $docType, + 'APP_DOC_CREATE_DATE' => date('Y-m-d H:i:s'), + 'APP_DOC_COMMENT' => isset($_POST['form']['APP_DOC_COMMENT']) ? $_POST['form']['APP_DOC_COMMENT'] : '', + 'APP_DOC_TITLE' => '', + 'APP_DOC_FILENAME' => $fileObj['fileName'], + 'FOLDER_UID' => $folderId, + 'APP_DOC_TAGS' => $fileTags); + + + $oAppDocument->update($aFields); + break; + case "NV": //New Version + + + $aFields = array('APP_DOC_UID' => $appDocUid, + 'APP_UID' => $appId, + + 'DEL_INDEX' => 1, + 'USR_UID' => $_SESSION['USER_LOGGED'], + 'DOC_UID' => $docUid, + 'APP_DOC_TYPE' => $docType, + 'APP_DOC_CREATE_DATE' => date('Y-m-d H:i:s'), + 'APP_DOC_COMMENT' => isset($_POST['form']['APP_DOC_COMMENT']) ? $_POST['form']['APP_DOC_COMMENT'] : '', + 'APP_DOC_TITLE' => '', + 'APP_DOC_FILENAME' => $fileObj['fileName'], + 'FOLDER_UID' => $folderId, + 'APP_DOC_TAGS' => $fileTags); + + $oAppDocument->create($aFields); + break; + default: //New + $aFields = array('APP_UID' => $appId, + 'DEL_INDEX' => isset($_SESSION['INDEX'])?$_SESSION['INDEX']:1, + 'USR_UID' => $_SESSION['USER_LOGGED'], + 'DOC_UID' => $docUid, + 'APP_DOC_TYPE' => $docType, + 'APP_DOC_CREATE_DATE' => date('Y-m-d H:i:s'), + 'APP_DOC_COMMENT' => isset($_POST['form']['APP_DOC_COMMENT']) ? $_POST['form']['APP_DOC_COMMENT'] : '', + 'APP_DOC_TITLE' => '', + 'APP_DOC_FILENAME' => $fileObj['fileName'], + 'FOLDER_UID' => $folderId, + 'APP_DOC_TAGS' => $fileTags); + + + $oAppDocument->create($aFields); + break; + } + + + $sAppDocUid = $oAppDocument->getAppDocUid(); + $iDocVersion = $oAppDocument->getDocVersion(); + $info = pathinfo( $oAppDocument->getAppDocFilename() ); + $ext = (isset($info['extension']) ? $info['extension'] : ''); + + //save the file +// if (!empty($_FILES['form'])) { + // if ($_FILES['form']['error']['APP_DOC_FILENAME'] == 0) { + $sPathName = PATH_DOCUMENT . $appId . PATH_SEP; + $sFileName = $sAppDocUid . "_".$iDocVersion. '.' . $ext; + G::uploadFile($fileObj['tempName'], $sPathName, $sFileName ); + + //Plugin Hook PM_UPLOAD_DOCUMENT for upload document + $oPluginRegistry =& PMPluginRegistry::getSingleton(); + if ( $oPluginRegistry->existsTrigger ( PM_UPLOAD_DOCUMENT ) && class_exists ('uploadDocumentData' ) ) { + + $oData['APP_UID'] = $appId; + $documentData = new uploadDocumentData ( + $appId, + $_SESSION['USER_LOGGED'], + $sPathName . $sFileName, + $fileObj['fileName'], + $sAppDocUid + ); + + //$oPluginRegistry->executeTriggers ( PM_UPLOAD_DOCUMENT , $documentData ); + //unlink ( $sPathName . $sFileName ); + } + //end plugin + } + } + + if($sw_error) { // there were errors + $err_msg=""; + for($i=0;$i<$uploadedInstances;$i++) { + if($errors[$i]==NULL) continue; + $err_msg .= $items[$i]." : ".$errors[$i]."\n"; + } + + $response['error']=$err_msg; + $response['message']=$err_msg; + $response['success']=false; + }elseif($emptyInstances==$uploadedInstances){ + $response['error']="You may upload at least one file"; + $response['message']="You may upload at least one file"; + $response['success']=false; + }else{ + $response['error']="Upload complete"; + $response['message']="Upload complete"; + $response['success']=true; + + + } + + + + + + } + + print_r(G::json_encode($response)); +/* + G::LoadClass ( 'case' ); + $oCase = new Cases ( ); + + $G_PUBLISH = new Publisher ( ); + $Fields ['DOC_UID'] = "-1"; + + $Fields ['appId'] = "00000000000000000000000000000000"; + + $G_PUBLISH->AddContent ( 'xmlform', 'xmlform', 'cases/cases_AttachInputDocumentGeneral', '', $Fields, 'appFolderSaveDocument?UID=-1&appId=' . $Fields ['appId'] . "&folderId=" . $_POST ['folderID'] ); + G::RenderPage ( 'publish', 'raw' ); +*/ + break; + + case "newFolder" : + //G::pr($_POST); + if($_POST ['dir']=="") $_POST ['dir']="/"; + $folderStructure = $oPMFolder->getFolderStructure ( $_POST ['dir'] ); + //G::pr($folderStructure); + $folderPath = $folderStructure ['PATH']; + $parentUid = $_POST ['dir']; + $folderUid = G::GenerateUniqueID (); + + $formNewFolder=array(); + + + $formNewFolder["xtype"]="form"; + $formNewFolder["id"]= "simpleform"; + $formNewFolder["labelWidth"]=125; + $formNewFolder["url"]="../appFolder/appFolderAjax.php"; + $formNewFolder["dialogtitle"]= "Create New Folder"; + $formNewFolder["frame"]= true; + $formNewFolder["items"]= array(); + + + + $field=array(); + $field["xtype"]= "label"; + $field["fieldLabel"]= "Path"; + $field["name"]= "form[FOLDER_PATH]"; + $field["id"]= "form[FOLDER_PATH]"; + $field["width"]=175; + $field["allowBlank"]=false; + $field["value"]=$folderPath; + $field["text"]=$folderPath; + $formNewFolder["items"][]= $field; + + $field=array(); + $field["xtype"]= "hidden"; + $field["fieldLabel"]= "Uid"; + $field["name"]= "form[FOLDER_UID]"; + $field["id"]= "form[FOLDER_UID]"; + $field["width"]=175; + $field["allowBlank"]=false; + $field["value"]=$folderUid; + $formNewFolder["items"][]= $field; + + $field=array(); + $field["xtype"]= "hidden"; + $field["fieldLabel"]= "Parent"; + $field["name"]= "form[FOLDER_PARENT_UID]"; + $field["id"]= "form[FOLDER_PARENT_UID]"; + $field["width"]=175; + $field["allowBlank"]=false; + $field["value"]=$parentUid; + $formNewFolder["items"][]= $field; + + $field=array(); + $field["xtype"]= "textfield"; + $field["fieldLabel"]= "Name"; + $field["name"]= "form[FOLDER_NAME]"; + $field["id"]= "form[FOLDER_NAME]"; + $field["width"]=175; + $field["allowBlank"]=false; + $formNewFolder["items"][]= $field; + + + $formNewFolder["buttons"]= array(); + + + + $button=array(); + $button["text"]= "Create"; + $button["handler"]= 'handlerCreate'; + $formNewFolder["buttons"][]= $button; + + $button=array(); + $button["text"]= "Cancel"; + $button["handler"]= 'handlerCancel'; + $formNewFolder["buttons"][]= $button; + + $handlerCreate='function() { + statusBarMessage( "Please wait...", true ); + Ext.getCmp("simpleform").getForm().submit({ + //reset: true, + reset: false, + success: function(form, action) { + statusBarMessage( action.result.message, false, true ); + try{ + dirTree.getSelectionModel().getSelectedNode().reload(); + } catch(e) {} + datastore.reload(); + Ext.getCmp("dialog").destroy(); + }, + failure: function(form, action) { + if( !action.result ) return; + Ext.Msg.alert("Error!", action.result.error); + statusBarMessage( action.result.error, false, false ); + }, + scope: Ext.getCmp("simpleform"), + // add some vars to the request, similar to hidden fields + params: {option: "new", + action: "appFolderSave", + dir: datastore.directory, + confirm: "true"} + }) + }'; + + $handlerCancel='function() { Ext.getCmp("dialog").destroy(); }'; + + $response=G::json_encode($formNewFolder); + //This will add the functions to the Json response without quotes! + $response=str_replace('"handlerCreate"',$handlerCreate,$response); + $response=str_replace('"handlerCancel"',$handlerCancel,$response); + print_r($response); + + /* + $oFolder = new AppFolder ( ); + $folderStructure = $oPMFolder->getFolderStructure ( $_POST ['folderID'] ); + $Fields ['FOLDER_PATH'] = $folderStructure ['PATH']; + $Fields ['FOLDER_PARENT_UID'] = $_POST ['folderID']; + $Fields ['FOLDER_UID'] = G::GenerateUniqueID (); + $G_PUBLISH = new Publisher ( ); + + $G_PUBLISH->AddContent ( 'xmlform', 'xmlform', 'appFolder/appFolderEdit', '', $Fields, 'appFolderSave' ); + G::RenderPage ( 'publish', 'raw' ); + */ + break; + case "appFolderSave": + $form = $_POST['form']; + $FolderUid = $form['FOLDER_UID']; + $FolderParentUid = $form['FOLDER_PARENT_UID']; + $FolderName = $form['FOLDER_NAME']; + $FolderCreateDate = 'now'; + $FolderUpdateDate = 'now'; + $response['action']=$_POST['action']. " - ".$_POST['option']; + $response['error']="error"; + $response['message']="error"; + $response['success']=false; + $folderCreateResponse = $oPMFolder->createFolder ( $FolderName, $FolderParentUid, "new" ); + + $response=array_merge($response,$folderCreateResponse); + + print_r(G::json_encode($response)); + + + break; + case "documentInfo" : + $oFolder = new AppFolder ( ); + $Fields = $oPMFolder->getCompleteDocumentInfo ( $_POST ['appId'], $_POST ['appDocId'], $_POST ['docVersion'], $_POST ['docID'], $_POST ['usrUid'] ); + $G_PUBLISH = new Publisher ( ); + + $G_PUBLISH->AddContent ( 'xmlform', 'xmlform', 'appFolder/appFolderDocumentInfo', '', $Fields, '' ); + G::RenderPage ( 'publish', 'raw' ); + + break; + + case "documentdelete": + include_once ("classes/model/AppDocument.php"); + $oAppDocument = new AppDocument ( ); + $oAppDocument->remove($_POST['sFileUID'],$_POST['docVersion']); + /*we need to delete fisicaly the file use the follow code + $appId= "00000000000000000000000000000000"; + $sPathName = PATH_DOCUMENT . $appId . PATH_SEP; + unlink($sPathName.$_POST['sFileUID'].'_1.jpg');*/ + break; + + case "deletePMFolder": + include_once ("classes/model/AppFolder.php"); + $oAppFoder = new AppFolder ( ); + $oAppFoder->remove($_POST['sFileUID'],$_POST['rootfolder']); + + break; + +} +function getMime($fileName){ + $fileName=basename($fileName); + $fileNameA=explode(".",$fileName); + $return['description']=G::LoadTranslation("MIME_DES_DOCUMENT"); + $return['icon']="/images/documents/extension/document.png"; + if(count($fileNameA)>1){ + $extension=$fileNameA[count($fileNameA)-1]; + $return['description']=G::LoadTranslation("MIME_DES_".strtoupper($extension)); + $return['icon']="/images/documents/extension/".strtolower($extension).".png"; + } + return $return; +} +function get_max_file_size() { // get php max_upload_file_size + return calc_php_setting_bytes( ini_get("upload_max_filesize") ); +} +function get_max_upload_limit() { + return calc_php_setting_bytes( ini_get('post_max_size')); +} + +function calc_php_setting_bytes( $value ) { + if(@eregi("G$",$value)) { + $value = substr($value,0,-1); + $value = round($value*1073741824); + } elseif(@eregi("M$",$value)) { + $value = substr($value,0,-1); + $value = round($value*1048576); + } elseif(@eregi("K$",$value)) { + $value = substr($value,0,-1); + $value = round($value*1024); + } + + return $value; +} +function get_abs_item($dir, $item) { // get absolute file+path + if( is_array( $item )) { + // FTP Mode + $abs_item = '/' . get_abs_dir($dir)."/".$item['name']; + if( get_is_dir($item)) $abs_item.='/'; + return extPathName($abs_item); + } + return extPathName( get_abs_dir($dir)."/".$item ); +} +function extPathName($p_path,$p_addtrailingslash = false) { + $retval = ""; + + $isWin = (substr(PHP_OS, 0, 3) == 'WIN'); + + if ($isWin) { + $retval = str_replace( '/', '\\', $p_path ); + if ($p_addtrailingslash) { + if (substr( $retval, -1 ) != '\\') { + $retval .= '\\'; + } + } + + // Check if UNC path + $unc = substr($retval,0,2) == '\\\\' ? 1 : 0; + + // Remove double \\ + $retval = str_replace( '\\\\', '\\', $retval ); + + // If UNC path, we have to add one \ in front or everything breaks! + if ( $unc == 1 ) { + $retval = '\\'.$retval; + } + } else { + $retval = str_replace( '\\', '/', $p_path ); + if ($p_addtrailingslash) { + if (substr( $retval, -1 ) != '/') { + $retval .= '/'; + } + } + + // Check if UNC path + $unc = substr($retval,0,2) == '//' ? 1 : 0; + + // Remove double // + $retval = str_replace('//','/',$retval); + + // If UNC path, we have to add one / in front or everything breaks! + if ( $unc == 1 ) { + $retval = '/'.$retval; + } + } + + return $retval; } \ No newline at end of file diff --git a/workflow/engine/methods/cases/casesStartPage.php b/workflow/engine/methods/cases/casesStartPage.php index 57f27be5a..0cf76c835 100644 --- a/workflow/engine/methods/cases/casesStartPage.php +++ b/workflow/engine/methods/cases/casesStartPage.php @@ -5,6 +5,14 @@ } $oHeadPublisher =& headPublisher::getSingleton(); + //$oHeadPublisher->setExtSkin( 'xtheme-gray'); + //$oHeadPublisher->usingExtJs('ux/TabCloseMenu'); + + + $oHeadPublisher->usingExtJs('ux.treefilterx/Ext.ux.tree.TreeFilterX'); + $oHeadPublisher->usingExtJs('ux.locationbar/Ext.ux.LocationBar'); + $oHeadPublisher->usingExtJs('ux.statusbar/ext-statusbar'); + //$oHeadPublisher->usingExtJs('ux/ColumnHeaderGroup'); $oHeadPublisher->addExtJsScript('cases/casesStartPage', false); //adding a javascript file .js $oHeadPublisher->addContent( 'cases/casesStartPage'); //adding a html file .html. diff --git a/workflow/engine/templates/cases/casesStartPage.js b/workflow/engine/templates/cases/casesStartPage.js index cda3f1648..1f811b38b 100644 --- a/workflow/engine/templates/cases/casesStartPage.js +++ b/workflow/engine/templates/cases/casesStartPage.js @@ -4,42 +4,11 @@ var startCaseFilter; Ext.chart.Chart.CHART_URL = '/images/charts.swf'; Ext.FlashComponent.EXPRESS_INSTALL_URL = '/images/expressinstall.swf'; +// The Quicktips are used for the toolbar and Tree mouseover tooltips! +Ext.QuickTips.init(); var conn = new Ext.data.Connection(); -var caseStatusByProcess = new Ext.data.JsonStore({ - fields : [ 'process', 'inbox', 'draft', 'unassigned' ], - root : 'caseStatusByProcess' -}); - -var caseDelayed = new Ext.data.JsonStore({ - fields : [ 'delayed', 'total' ], - root : 'caseDelayed' -}); - -function getDashboardData() { - - var parameters = { - action : 'getSimpleDashboardData' - }; - conn.request({ - url : 'casesStartPage_Ajax.php', - method : 'POST', - params : { - "action" : 'getSimpleDashboardData' - }, - success : function(responseObject) { - var responseData = Ext.decode(responseObject.responseText); - - // Load store from here - caseStatusByProcess.loadData(responseData); - caseDelayed.loadData(responseData); - }, - failure : function() { - Ext.Msg.alert('Status', 'Unable to get list of Process'); - } - }); -} function getOtherDashboards(dashboardTabPanels) { conn.request({ @@ -49,7 +18,6 @@ function getOtherDashboards(dashboardTabPanels) { "action" : 'getRegisteredDashboards' }, success : function(responseObject) { - var response = Ext.util.JSON.decode(responseObject.responseText); for ( var i = 0; i < response.length; i++) { tabInfo = response[i]; @@ -76,70 +44,6 @@ function getOtherDashboards(dashboardTabPanels) { }); } -function getDashboardItems() { - dashboardItems = [ { - store : caseDelayed, - xtype : 'piechart', - dataField : 'total', - categoryField : 'delayed', - width : 250, - height : 250, - draggable : true, - disableCaching : true, - expressInstall : true, - // extra styles get applied to the chart defaults - extraStyle : { - legend : { - display : 'bottom', - padding : 5, - font : { - family : 'Tahoma', - size : 13 - } - } - } - - }, { - title : 'Status by Process', - xtype : 'columnchart', - store : caseStatusByProcess, - width : 450, - height : 400, - series : [ { - yField : 'inbox', - displayName : 'Inbox' - }, { - yField : 'draft', - displayName : 'Draft' - }, { - yField : 'unassigned', - displayName : 'Unassigned' - } ], - xField : 'process', - draggable : true, - xAxis : new Ext.chart.CategoryAxis({ - // title : 'Case Status', - labelRenderer : this.customFormat - }), - customFormat : function(value) { - return 'Year: '; - }, - yAxis : new Ext.chart.NumericAxis({ - title : 'Total' - }), - extraStyle : { - xAxis : { - labelRotation : -45 - }, - legend : { - display : 'right' - } - } - } ]; - getDashboardData(); - return dashboardItems; -} - function getDefaultDashboard(dashboardTabPanels) { defaultDashboard = "mainDashboard"; dashboardTabPanels.setActiveTab(defaultDashboard); @@ -185,243 +89,237 @@ function getDefaultDashboard(dashboardTabPanels) { Docs = {}; // console.info("Doc Panel - Start"); +/* +DocPanel = Ext.extend(Ext.Panel, + { + closable : true, + autoScroll : true, -DocPanel = Ext.extend(Ext.Panel, { - closable : true, - autoScroll : true, + initComponent : function() { + // var ps = this.cclass.split('.'); + // this.title = ps[ps.length-1]; + Ext.apply(this, { + tbar : [ + '->', + { + text : 'Config Options', + handler : this.scrollToMember.createDelegate( + this, [ 'configs' ]), + iconCls : 'icon-config' + }, + '-', + { + text : 'Properties', + handler : this.scrollToMember.createDelegate( + this, [ 'props' ]), + iconCls : 'icon-prop' + }, + '-', + { + text : 'Methods', + handler : this.scrollToMember.createDelegate( + this, [ 'methods' ]), + iconCls : 'icon-method' + }, + '-', + { + text : 'Events', + handler : this.scrollToMember.createDelegate( + this, [ 'events' ]), + iconCls : 'icon-event' + }, + '-', + { + text : 'Direct Link', + handler : this.directLink, + scope : this, + iconCls : 'icon-fav' + }, + '-', + { + tooltip : 'Hide Inherited Members', + iconCls : 'icon-hide-inherited', + enableToggle : true, + scope : this, + toggleHandler : function(b, pressed) { + this.body[pressed ? 'addClass' + : 'removeClass']('hide-inherited'); + } + }, + '-', + { + tooltip : 'Expand All Members', + iconCls : 'icon-expand-members', + enableToggle : true, + scope : this, + toggleHandler : function(b, pressed) { + this.body[pressed ? 'addClass' + : 'removeClass']('full-details'); + } + } ] + }); + DocPanel.superclass.initComponent.call(this); + }, - initComponent : function() { - // var ps = this.cclass.split('.'); - // this.title = ps[ps.length-1]; - Ext.apply(this, { - tbar : [ - '->', - { - text : 'Config Options', - handler : this.scrollToMember.createDelegate( - this, [ 'configs' ]), - iconCls : 'icon-config' - }, - '-', - { - text : 'Properties', - handler : this.scrollToMember.createDelegate( - this, [ 'props' ]), - iconCls : 'icon-prop' - }, - '-', - { - text : 'Methods', - handler : this.scrollToMember.createDelegate( - this, [ 'methods' ]), - iconCls : 'icon-method' - }, - '-', - { - text : 'Events', - handler : this.scrollToMember.createDelegate( - this, [ 'events' ]), - iconCls : 'icon-event' - }, - '-', - { - text : 'Direct Link', - handler : this.directLink, - scope : this, - iconCls : 'icon-fav' - }, - '-', - { - tooltip : 'Hide Inherited Members', - iconCls : 'icon-hide-inherited', - enableToggle : true, - scope : this, - toggleHandler : function(b, pressed) { - this.body[pressed ? 'addClass' - : 'removeClass']('hide-inherited'); - } - }, - '-', - { - tooltip : 'Expand All Members', - iconCls : 'icon-expand-members', - enableToggle : true, - scope : this, - toggleHandler : function(b, pressed) { - this.body[pressed ? 'addClass' - : 'removeClass']('full-details'); - } - } ] - }); - DocPanel.superclass.initComponent.call(this); - }, + directLink : function() { + var link = String.format( + "{0}", + document.location.href + '?class=' + this.cclass); + Ext.Msg.alert('Direct Link to ' + this.cclass, link); + }, - directLink : function() { - var link = String.format( - "{0}", - document.location.href + '?class=' + this.cclass); - Ext.Msg.alert('Direct Link to ' + this.cclass, link); - }, - - scrollToMember : function(member) { - var el = Ext.fly(this.cclass + '-' + member); - if (el) { - var top = (el.getOffsetsTo(this.body)[1]) - + this.body.dom.scrollTop; - this.body.scrollTo('top', top - 25, { - duration : 0.75, - callback : this.hlMember.createDelegate(this, - [ member ]) - }); - } - }, - - scrollToSection : function(id) { - var el = Ext.getDom(id); - if (el) { - var top = (Ext.fly(el).getOffsetsTo(this.body)[1]) - + this.body.dom.scrollTop; - this.body.scrollTo('top', top - 25, { - duration : 0.5, - callback : function() { - Ext.fly(el).next('h2').pause(0.2).highlight( - '#8DB2E3', { - attr : 'color' - }); - } - }); - } - }, - - hlMember : function(member) { - var el = Ext.fly(this.cclass + '-' + member); - if (el) { - if (tr = el.up('tr')) { - tr.highlight('#cadaf9'); - } - } - } -}); + scrollToMember : function(member) { + var el = Ext.fly(this.cclass + '-' + member); + if (el) { + var top = (el.getOffsetsTo(this.body)[1]) + + this.body.dom.scrollTop; + this.body.scrollTo('top', top - 25, { + duration : 0.75, + callback : this.hlMember.createDelegate(this, + [ member ]) + }); + } + }, + scrollToSection : function(id) { + var el = Ext.getDom(id); + if (el) { + var top = (Ext.fly(el).getOffsetsTo(this.body)[1]) + + this.body.dom.scrollTop; + this.body.scrollTo('top', top - 25, { + duration : 0.5, + callback : function() { + Ext.fly(el).next('h2').pause(0.2).highlight( + '#8DB2E3', { + attr : 'color' + }); + } + }); + } + }, + hlMember : function(member) { + var el = Ext.fly(this.cclass + '-' + member); + if (el) { + if (tr = el.up('tr')) { + tr.highlight('#cadaf9'); + } + } + } + }); +*/ var newCaseTree = { - xtype : 'treepanel', - id : 'processTree', - style : { - height : '100%', - overflow : 'auto' - }, - useArrows : true, - border : false, - split : true, - itemId : 'startCaseTreePanel', - id : 'startCaseTreePanel', - rootVisible : false, - treePanel : this, - clearOnReLoad : false, - loader : new Ext.tree.TreeLoader({ + xtype : 'treepanel', + id : 'processTree', + style : { + height : '100%', + overflow : 'auto' + }, + useArrows : true, + border : false, + split : true, + itemId : 'startCaseTreePanel', + id : 'startCaseTreePanel', + rootVisible : false, + treePanel : this, + clearOnReLoad : false, + loader : new Ext.tree.TreeLoader({ preloadChildren : true, - dataUrl : 'casesStartPage_Ajax.php', - baseParams : { - action : 'getProcessList' - } - }), - listeners : { - dblclick : function(n) { - if (n.attributes.optionType == "startProcess") { - Ext.Msg.show({ - title : 'Start Case', - msg : 'Starting new case

' - + n.attributes.text - + '', - icon : Ext.MessageBox.INFO - }); - Ext.Ajax.request({ - url : 'casesStartPage_Ajax.php', - params : { - action : 'startCase', - processId : n.attributes.pro_uid, - taskId : n.attributes.tas_uid - }, - success : function(response) { - var res = Ext.util.JSON.decode(response.responseText); - if (res.openCase) { - window.location = res.openCase.PAGE; - } else { - Ext.Msg.show({ - title : 'Error creating a new Case', - msg : '', - icon : Ext.MessageBox.ERROR, - buttons : Ext.Msg.OK - }); - } - }, - failure : function() { - // grid.getGridEl().unmask(true); - Ext.Msg.alert('Error', 'Unable to start a case'); - } - }); - } - }, - click : function(n) { - mainPanel.showDetails(n); - } - }, - root : { - nodeType : 'async', - draggable : false, - id : 'root', - expanded : true - } + dataUrl : 'casesStartPage_Ajax.php', + baseParams : { + action : 'getProcessList' + } + }), + listeners : { + dblclick : function(n) { + if (n.attributes.optionType == "startProcess") { + Ext.Msg.show({ + title : 'Start Case', + msg : 'Starting new case

' + n.attributes.text + + '', + icon : Ext.MessageBox.INFO + }); + Ext.Ajax.request({ + url : 'casesStartPage_Ajax.php', + params : { + action : 'startCase', + processId : n.attributes.pro_uid, + taskId : n.attributes.tas_uid + }, + success : function(response) { + var res = Ext.util.JSON.decode(response.responseText); + if (res.openCase) { + window.location = res.openCase.PAGE; + } else { + Ext.Msg.show({ + title : 'Error creating a new Case', + msg : '', + icon : Ext.MessageBox.ERROR, + buttons : Ext.Msg.OK + }); + } + }, + failure : function() { + // grid.getGridEl().unmask(true); + Ext.Msg.alert('Error', 'Unable to start a case'); + } + }); + } + }, + click : function(n) { + mainPanel.showDetails(n); + } + }, + root : { + nodeType : 'async', + draggable : false, + id : 'root', + expanded : true + } }; var startCaseTab = { - id : 'startCase', - title : 'Start Case', - iconCls : 'ICON_CASES_START_CASE', - layout : 'border', - items : [ - { - id : 'img-chooser-view', - region : 'center', + id : 'startCase', + title : 'Start Case', + iconCls : 'ICON_CASES_START_CASE', + layout : 'border', + items : [ { + id : 'img-chooser-view', + region : 'center', style : { width : '50%' - }, - // autoScroll: true, - items : [ newCaseTree ] - }, { + // autoScroll: true, + items : [ newCaseTree ] + }, { xtype:'form', - id : 'process-detail-panel', - region : 'east', - //autoHeight : true, - split : true, - style : { - width : '50%' + id : 'process-detail-panel', + region : 'east', + // autoHeight : true, + split : true, + style : { + width : '50%' }, -// minWidth : 150, - frame: true, +// minWidth : 150, + //frame: true, labelAlign: 'right', labelWidth: 85, - // width:340, + // width:340, waitMsgTarget: true, title:'Process Information', layout:'form', defaults: {width: 350}, defaultType: 'textfield', - - items: [{ fieldLabel: 'Process', name: 'processName', allowBlank:false, value: '', disabled: true, - //readonly:true, + // readonly:true, id:"processName" },{ fieldLabel: 'Task', @@ -471,7 +369,6 @@ var startCaseTab = { {boxLabel: 'Fri', name: '5'}, {boxLabel: 'Sat', name: '6'} ] - }, { xtype:'checkbox', fieldLabel: 'Debug Mode', @@ -482,430 +379,1642 @@ var startCaseTab = { } ], - tbar : [ - { - xtype : 'textfield', - name : 'processesFilter', - id: 'processesFilter', - emptyText : 'Find a Process', - enableKeyEvents : true, - listeners : { - render : function(f) { - /*Ext.getCmp("startCaseTreePanel").filter = new Ext.tree.TreeFilter( - this, - { - clearBlank : true, - autoClear : true - } - );*/ + tbar : [ + { + xtype : 'textfield', + name : 'processesFilter', + id : 'processesFilter', + emptyText : 'Find a Process', + enableKeyEvents : true, + listeners : { + render : function(f) { + /* + * Ext.getCmp("startCaseTreePanel").filter = new + * Ext.tree.TreeFilter( this, { clearBlank : true, + * autoClear : true } ); + */ - startCaseFilter = new Ext.ux.tree.TreeFilterX(Ext.getCmp('startCaseTreePanel')); - }, /* - keydown : function(t, e) { - treeFiltered = Ext.getCmp("startCaseTreePanel"); - //console.log(treeFiltered); + startCaseFilter = new Ext.ux.tree.TreeFilterX(Ext + .getCmp('startCaseTreePanel')); + }, /* + * keydown : function(t, e) { treeFiltered = + * Ext.getCmp("startCaseTreePanel"); + * //console.log(treeFiltered); + * + * var text = t.getValue(); + * + * //console.log(text); if (!text) { + * treeFiltered.filter.clear(); return; } + * treeFiltered.expandAll(); + * + * var re = new RegExp('^'+ Ext.escapeRe(text), 'i'); + * console.log(re); + * treeFiltered.filter.filterBy(function(n) { return + * !n.attributes.isClass || re.test(n.text); }); }, + */ + specialkey : function(f, e) { + if (e.getKey() == e.ENTER) { + txt = Ext.getCmp('processesFilter').getValue(); + startCaseFilter.clear(); + var re = new RegExp('.*' + txt + '.*', 'i'); + startCaseFilter.filter(re, 'text'); + } + }, + scope : this + } + }, { + text : 'X', + ctCls : 'pm_search_x_button', + handler : function() { + Ext.getCmp('processesFilter').setValue(''); + startCaseFilter.clear(); + } + }, ' ', ' ', { + iconCls : 'icon-expand-all', + tooltip : 'Expand All', + handler : function() { + Ext.getCmp("startCaseTreePanel").root.expand(true); + }, + scope : this + }, '-', { + iconCls : 'icon-collapse-all', + tooltip : 'Collapse All', + handler : function() { + Ext.getCmp("startCaseTreePanel").root.collapse(true); + }, + scope : this + }, ' ', ' ', { + xtype : 'tbbutton', + cls : 'x-btn-icon', + icon : '/images/refresh.gif', - var text = t.getValue(); - - //console.log(text); - if (!text) { - treeFiltered.filter.clear(); - return; - } - treeFiltered.expandAll(); - - var re = new RegExp('^'+ Ext.escapeRe(text), 'i'); - console.log(re); - treeFiltered.filter.filterBy(function(n) { - return !n.attributes.isClass || re.test(n.text); - }); - },*/ - specialkey: function(f,e){ - if (e.getKey() == e.ENTER) { - txt = Ext.getCmp('processesFilter').getValue(); - startCaseFilter.clear(); - var re = new RegExp('.*' + txt + '.*', 'i'); - startCaseFilter.filter(re, 'text'); - } - }, - scope : this - } - }, - { - text:'X', - ctCls:'pm_search_x_button', - handler: function(){ - Ext.getCmp('processesFilter').setValue(''); - startCaseFilter.clear(); - } - }, - ' ', - ' ', - { - iconCls : 'icon-expand-all', - tooltip : 'Expand All', - handler : function() { - Ext.getCmp("startCaseTreePanel").root.expand(true); - }, - scope : this - }, - '-', - { - iconCls : 'icon-collapse-all', - tooltip : 'Collapse All', - handler : function() { - Ext.getCmp("startCaseTreePanel").root.collapse(true); - }, - scope : this - }, - ' ', - ' ', - { - xtype : 'tbbutton', - cls : 'x-btn-icon', - icon : '/images/refresh.gif', - - handler : function() { - tree = Ext - .getCmp('startCaseTreePanel'); - tree.getLoader().load( - tree.root); - } - } - ] + handler : function() { + tree = Ext.getCmp('startCaseTreePanel'); + tree.getLoader().load(tree.root); + } + } ] }; + + function chDir( directory, loadGridOnly ) { + //console.info("**** Changing Directory: "+directory+" -- "+loadGridOnly); + if( datastore.directory.replace( /\//g, '' ) == directory.replace( /\//g, '' ) + && datastore.getTotalCount() > 0 && directory != '') { + // Prevent double loading + return; + } + datastore.directory = directory; + var conn = datastore.proxy.getConnection(); + if( directory == '' || conn && !conn.isLoading()) { + datastore.load({params:{start:0, limit:150, dir: directory, node: directory, option:'gridDocuments', action:'expandNode', sendWhat: datastore.sendWhat }}); + } + + if( !loadGridOnly ) { + expandTreeToDir( null, directory ); + } + } + + function expandTreeToDir( node, dir ) { + //console.info("Expanding Tree to Dir "+node+" - "+dir); + dir = dir ? dir : new String(''); + var dirs = dir.split('/'); + if( dirs[0] == '') { dirs.shift(); } + if( dirs.length > 0 ) { + //console.log("Dir to expand... "+dirs[0]); + node = dirTree.getNodeById( dirs[0] ); + if( !node ) return; + if( node.isExpanded() ) { + expandNode( node, dir ); + return; + } + node.on('load', function() { expandNode( node, dir ); } ); + node.expand(); + } + } + function expandNode( node, dir ) { + //console.info("Expanding Node "+node+" - "+dir); + var fulldirpath, dirpath; + + var dirs = dir.split('/'); + if( dirs[0] == '') { dirs.shift(); } + if( dirs.length > 0 ) { + fulldirpath = ''; + for( i=0; i < dirs.length; i++ ) { + fulldirpath += dirs[i]; + } + if( node.id.substr( 0, 5 ) != '_RRR_' ) { + fulldirpath = fulldirpath.substr( 5 ); + } + + if( node.id != fulldirpath ) { + dirpath = ''; + + var nodedirs = node.id.split('_RRR_'); + if( nodedirs[0] == '' ) nodedirs.shift(); + for( i=0; i < dirs.length; i++ ) { + if( nodedirs[i] ) { + dirpath += '_RRR_'+ dirs[i]; + } else { + dirpath += '_RRR_'+ dirs[i]; + // dirpath = dirpath.substr( 5 ); + var nextnode = dirTree.getNodeById( dirpath ); + if( !nextnode ) { return; } + if( nextnode.isExpanded() ) { expandNode( nextnode, dir ); return;} + nextnode.on( 'load', function() { expandNode( nextnode, dir ); } ); + + nextnode.expand(); + break; + } + } + } + else { + node.select(); + } + + } + } + function handleNodeClick( sm, node ) { + if( node && node.id ) { + //console.log("Node Clicked: "+node); + chDir( node.id ); + } + } + + function showLoadingIndicator( el, replaceContent ) { + //console.info("showLoadingIndicator"); + if( !el ) return; + var loadingimg = '/images/documents/_indicator.gif'; + var imgtag = '<' + 'img src="'+ loadingimg + '" alt="Loading..." border="0" name="Loading" align="absmiddle" />'; + + if( replaceContent ) { + el.innerHTML = imgtag; + } + else { + el.innerHTML += imgtag; + } + } + function getURLParam( strParamName, myWindow){ + //console.info("getURLParam"); + //console.trace(); + if( !myWindow ){ + myWindow = window; + } + var strReturn = ""; + var strHref = myWindow.location.href; + if ( strHref.indexOf("?") > -1 ){ + var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase(); + var aQueryString = strQueryString.split("&"); + for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){ + if ( aQueryString[iParam].indexOf(strParamName + "=") > -1 ){ + var aParam = aQueryString[iParam].split("="); + strReturn = aParam[1]; + break; + } + } + } + return strReturn; + } + + function openActionDialog( caller, action ) { + //console.log("Dialog open: "+caller+" ->"+action); + var dialog; + var selectedRows = ext_itemgrid.getSelectionModel().getSelections(); + if( selectedRows.length < 1 ) { + var selectedNode = dirTree.getSelectionModel().getSelectedNode(); + if( selectedNode ) { + selectedRows = Array( dirTree.getSelectionModel().getSelectedNode().id.replace( /_RRR_/g, '/' ) ); + } + } + var dontNeedSelection = { newFolder:1, uploadDocument:1, search:1 }; + if( dontNeedSelection[action] == null && selectedRows.length < 1 ) { + Ext.Msg.alert( 'error','No items Selected'); + return false; + } + + switch( action ) { + case 'copy': + case 'edit': + case 'newFolder': + case 'move': + case 'rename': + case 'search': + case 'uploadDocument': + case 'move': + requestParams = getRequestParams(); + requestParams.action = action; + if( action != "edit" ) { + dialog = new Ext.Window( { + id: "dialog", + autoCreate: true, + modal:true, + width:600, + height:400, + shadow:true, + minWidth:300, + minHeight:200, + proxyDrag: true, + resizable: true, + //renderTo: Ext.getBody(), + keys: { + key: 27, + fn : function(){ + dialog.hide(); + } + }//, + // animateTarget: typeof caller.getEl == 'function' + // ? caller.getEl() : caller, + //title: 'dialog_title' + + }); + } + Ext.Ajax.request( { url: '../appFolder/appFolderAjax.php', + params: Ext.urlEncode( requestParams ), + scripts: true, + callback: function(oElement, bSuccess, oResponse) { + if( !bSuccess ) { + msgbox = Ext.Msg.alert( "Ajax communication failure!"); + msgbox.setIcon( Ext.MessageBox.ERROR ); + } + if( oResponse && oResponse.responseText ) { + + // Ext.Msg.alert("Debug", + // oResponse.responseText + // ); + try{ json = Ext.decode( oResponse.responseText ); + if( json.error && typeof json.error != 'xml' ) { + Ext.Msg.alert( "error", json.error ); + dialog.destroy(); + return false; + } + } catch(e) { + msgbox = Ext.Msg.alert( "error", "JSON Decode Error: " + e.message ); + msgbox.setIcon( Ext.MessageBox.ERROR ); + return false; + } + if( action == "edit" ) { + Ext.getCmp("mainpanel").add(json); + Ext.getCmp("mainpanel").activate(json.id); + } + else { + // we expect the + // returned JSON to + // be an object that + // contains an + // "Ext.Component" + // or derivative in + // xtype notation + // so we can simply + // add it to the + // Window + //console.log(json); + dialog.add(json); + if( json.dialogtitle ) { + // if the + // component + // delivers a + // title for our + // dialog we can + // set the title + // of the window + dialog.setTitle(json.dialogtitle); + } + + try { + // recalculate + // layout + dialog.doLayout(); + // recalculate + // dimensions, + // based on + // those of the + // newly added + // child + // component + firstComponent = dialog.getComponent(0); + newWidth = firstComponent.getWidth() + dialog.getFrameWidth(); + newHeight = firstComponent.getHeight() + dialog.getFrameHeight(); + dialog.setSize( newWidth, newHeight ); + + } catch(e) {} + // alert( "Before: + // Dialog.width: " + + // dialog.getWidth() + // + ", Client + // Width: "+ + // Ext.getBody().getWidth()); + if( dialog.getWidth() >= Ext.getBody().getWidth() ) { + dialog.setWidth( Ext.getBody().getWidth() * 0.8 ); + } + // alert( "After: + // Dialog.width: " + + // dialog.getWidth() + // + ", Client + // Width: "+ + // Ext.getBody().getWidth()); + if( dialog.getHeight() >= Ext.getBody().getHeight() ) { + dialog.setHeight( Ext.getBody().getHeight() * 0.7 ); + } else if( dialog.getHeight() < Ext.getBody().getHeight() * 0.3 ) { + dialog.setHeight( Ext.getBody().getHeight() * 0.5 ); + } + + // recalculate + // Window size + dialog.syncSize(); + // center the window + dialog.center(); + } + } else if( !response || !oResponse.responseText) { + msgbox = Ext.Msg.alert( "error", "Received an empty response"); + msgbox.setIcon( Ext.MessageBox.ERROR ); + + } + } + }); + + if( action != "edit" ) { + dialog.on( 'hide', function() { dialog.destroy(true); } ); + dialog.show(); + } + break; + + case 'delete': + var num = selectedRows.length; + Ext.Msg.confirm('dellink?', String.format("miscdelitems", num ), deleteFiles); + break; + case 'download': + document.location = '?option=com_extplorer&action=download&item='+ encodeURIComponent(ext_itemgrid.getSelectionModel().getSelected().get('name')) + '&dir=' + encodeURIComponent( datastore.directory ); + break; + } + } + function handleCallback(requestParams, node) { + //console.log("handleCallback "+requestParams +" -- "+node); + //console.trace(); + var conn = new Ext.data.Connection(); + + conn.request({ + url: '../appFolder/appFolderAjax.php', + params: requestParams, + callback: function(options, success, response ) { + if( success ) { + json = Ext.decode( response.responseText ); + if( json.success ) { + statusBarMessage( json.message, false, true ); + try { + if( dropEvent) { + dropEvent.target.parentNode.reload(); + dropEvent = null; + } + if( node ) { + if( options.params.action == 'delete' || options.params.action == 'rename' ) { + node.parentNode.select(); + } + node.parentNode.reload(); + } else { + datastore.reload(); + } + } catch(e) { datastore.reload(); } + } else { + Ext.Msg.alert( 'Failure', json.error ); + } + } + else { + Ext.Msg.alert( 'Error', 'Failed to connect to the server.'); + } + + } + }); + } + function getRequestParams() { + //console.info("Get Request params "); + var selitems, dir, node; + var selectedRows = ext_itemgrid.getSelectionModel().getSelections(); + if( selectedRows.length < 1 ) { + node = dirTree.getSelectionModel().getSelectedNode(); + if( node ) { + var dir = dirTree.getSelectionModel().getSelectedNode().id.replace( /_RRR_/g, '/' ); + var lastSlash = dir.lastIndexOf( '/' ); + if( lastSlash > 0 ) { + selitems = Array( dir.substring(lastSlash+1) ); + } else { + selitems = Array( dir ); + } + } else { + selitems = {}; + } + dir = datastore.directory.substring( 0, datastore.directory.lastIndexOf('/')); + } + else { + selitems = Array(selectedRows.length); + + if( selectedRows.length > 0 ) { + for( i=0; i < selectedRows.length;i++) { + selitems[i] = selectedRows[i].get('name'); + } + } + dir = datastore.directory; + } + Ext.Msg.alert("Debug", datastore.directory ); + var requestParams = { + option: 'new', + dir: datastore.directory, + item: selitems.length > 0 ? selitems[0]:'', + 'selitems[]': selitems + }; + return requestParams; + } + /** + * Function for actions, which don't require a form like download, + * extraction, deletion etc. + */ + function deleteFiles(btn) { + if( btn != 'yes') { + return; + } + requestParams = getRequestParams(); + requestParams.action = 'delete'; + handleCallback(requestParams); + } + function extractArchive(btn) { + if( btn != 'yes') { + return; + } + requestParams = getRequestParams(); + requestParams.action = 'extract'; + handleCallback(requestParams); + } + function deleteDir( btn, node ) { + if( btn != 'yes') { + return; + } + requestParams = getRequestParams(); + requestParams.dir = datastore.directory.substring( 0, datastore.directory.lastIndexOf('/')); + requestParams.selitems = Array( node.id.replace( /_RRR_/g, '/' ) ); + requestParams.action = 'delete'; + handleCallback(requestParams, node); + } + + Ext.msgBoxSlider = function(){ + var msgCt; + + function createBox(t, s){ + return ['
', + '
', + '

', t, '

', s, '
', + '
', + '
'].join(''); + } + return { + msg : function(title, format){ + if(!msgCt){ + msgCt = Ext.DomHelper.insertFirst(document.body, {id:'msg-div'}, true); + } + msgCt.alignTo(document, 't-t'); + var s = String.format.apply(String, Array.prototype.slice.call(arguments, 1)); + var m = Ext.DomHelper.append(msgCt, {html:createBox(title, s)}, true); + m.setWidth(400 ); + m.position(null, 5000 ); + m.alignTo(document, 't-t'); + Ext.get('x-box-mc-inner' ).setStyle('background-image', 'url("/images/documents/_accept.png")'); + Ext.get('x-box-mc-inner' ).setStyle('background-position', '5px 10px'); + Ext.get('x-box-mc-inner' ).setStyle('background-repeat', 'no-repeat'); + Ext.get('x-box-mc-inner' ).setStyle('padding-left', '35px'); + m.slideIn('t').pause(3).ghost("t", {remove:true}); + } + }; + }(); + + + function statusBarMessage( msg, isLoading, success ) { + //console.log("Status Bar needed"); + var statusBar = Ext.getCmp('statusPanel'); + if( !statusBar ) return; + //console.log("Status bar acceced: "+msg); + if( isLoading ) { + statusBar.showBusy(); + } + else { + statusBar.setStatus("Done."); + } + if( success ) { + statusBar.setStatus({ + text: 'success: ' + msg, + iconCls: 'success', + clear: true + }); + Ext.msgBoxSlider.msg('success', msg ); + } else if( success != null ) { + statusBar.setStatus({ + text: 'error: ' + msg, + iconCls: 'error', + clear: true + }); + + } + + + } + + function selectFile( dir, file ) { + //console.log("file selected: "+dir+" - "+file); + chDir( dir ); + var conn = datastore.proxy.getConnection(); + if( conn.isLoading() ) { + setTimeout( "selectFile(\"" + dir + "\", \""+ file + "\")", 1000 ); + } + idx = datastore.find( "name", file ); + if( idx >= 0 ) { + ext_itemgrid.getSelectionModel().selectRow( idx ); + } + } + + /** + * Debug Function, that works like print_r for Objects in Javascript + */ + function var_dump(obj) { + var vartext = ""; + for (var prop in obj) { + if( isNaN( prop.toString() )) { + vartext += "\t->"+prop+" = "+ eval( "obj."+prop.toString()) +"\n"; + } + } + if(typeof obj == "object") { + return "Type: "+typeof(obj)+((obj.constructor) ? "\nConstructor: "+obj.constructor : "") + "\n" + vartext; + } else { + return "Type: "+typeof(obj)+"\n" + vartext; + } + }// end function var_dump + + +datastore = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : "../appFolder/appFolderAjax.php", + directory : "/", + params : { + start : 0, + limit : 150, + dir : this.directory, + node : this.directory, + option : "gridDocuments", + action : "expandNode" + } + }), + directory : "/", + sendWhat : "both", + // create reader that reads the File records + reader : new Ext.data.JsonReader({ + root : "items", + totalProperty : "totalCount" + }, Ext.data.Record.create([ { + name : "name" + }, { + name : "size" + }, { + name : "type" + }, { + name : "modified" + }, { + name : "perms" + }, { + name : "icon" + }, { + name : "owner" + }, { + name : "is_deletable" + }, { + name : "is_file" + }, { + name : "is_archive" + }, { + name : "is_writable" + }, { + name : "is_chmodable" + }, { + name : "is_readable" + }, { + name : "is_deletable" + }, { + name : "is_editable" + }, { + name : "id" + }, { + name : "docVersion" + }, { + name : "appDocType" + }, { + name : "appDocCreateDate" + }, { + name : "appLabel" + }, { + name : "proTitle" + }, { + name : "appDocVersionable" + } + ])), + + // turn on remote sorting + remoteSort : true +}); +datastore.paramNames["dir"] = "direction"; +datastore.paramNames["sort"] = "order"; + +datastore.on("beforeload", + function(ds, options) { + options.params.dir = options.params.dir ? options.params.dir + : ds.directory; + node = options.params.dir ? options.params.dir : ds.directory; + options.params.option = "gridDocuments"; + options.params.action = "expandNode"; + options.params.sendWhat = datastore.sendWhat; + }); +// pluggable renders +function renderFileName(value, p, record) { + return String.format( + '*  {1}', + record.get('icon'), value); +} +function renderType(value) { + return String.format('{0}', value); +} +function renderVersion(value, p, record) { + // addcc.png + // system-search.png + if(record.get("appDocVersionable")=="1"){ + if(value>1){ + return String.format( + '{1}  * ', + "/images/addc.png", value); + }else{ + return String.format( + '{1}  * ', + "/images/addc.png", value); + } + }else{ + + return String.format( + '-', + value); + } +} + +var gridtb = new Ext.Toolbar( + [ + { + xtype : "tbbutton", + id : 'tb_home', + icon : '/images/documents/_home.png', + //text : 'Root', + tooltip : 'Root Folder', + //cls : 'x-btn-text-icon', + cls : 'x-btn-icon', + handler : function() { + chDir(''); + } + }, + { + xtype : "tbbutton", + id : 'tb_reload', + icon : '/images/documents/_reload.png', + //text : 'Reload', + tooltip : 'Reload', + //cls : 'x-btn-text-icon', + cls : 'x-btn-icon', + handler : loadDir + }, + + { + xtype : "tbbutton", + id : 'tb_search', + icon : '/images/documents/_filefind.png', + //text : 'Search', + tooltip : 'Search', + //cls : 'x-btn-text-icon', + cls : 'x-btn-icon', + disabled : true, + handler : function() { + openActionDialog(this, 'search'); + } + }, + '-', + { + xtype : "tbbutton", + id : 'tb_new', + icon : '/images/documents/_filenew.png', + tooltip : 'New Folder', + cls : 'x-btn-icon', + disabled : false, + handler : function() { + openActionDialog(this, 'newFolder'); + } + }, + { + xtype : "tbbutton", + id : 'tb_copy', + icon : '/images/documents/_editcopy.png', + tooltip : 'Copy', + cls : 'x-btn-icon', + disabled : 'true', + handler : function() { + openActionDialog(this, 'copy'); + } + }, + { + xtype : "tbbutton", + id : 'tb_move', + icon : '/images/documents/_move.png', + tooltip : 'Move', + cls : 'x-btn-icon', + disabled : 'true', + handler : function() { + openActionDialog(this, 'move'); + } + }, + { + xtype : "tbbutton", + id : 'tb_delete', + icon : '/images/documents/_editdelete.png', + tooltip : 'dellink', + cls : 'x-btn-icon', + disabled : 'true', + handler : function() { + openActionDialog(this, 'delete'); + } + }, + { + xtype : "tbbutton", + id : 'tb_rename', + icon : '/images/documents/_fonts.png', + tooltip : 'renamelink', + cls : 'x-btn-icon', + disabled : 'true', + handler : function() { + openActionDialog(this, 'rename'); + } + }, + '-', + { + xtype : "tbbutton", + id : 'tb_download', + icon : '/images/documents/_down.png', + tooltip : 'downlink', + cls : 'x-btn-icon', + disabled : 'true', + handler : function() { + openActionDialog(this, 'download'); + } + }, + { + xtype : "tbbutton", + id : 'tb_upload', + icon : '/images/documents/_up.png', + tooltip : 'Upload', + cls : 'x-btn-icon', + disabled : false, + handler : function() { + /* + Ext.ux.OnDemandLoad + .load("/scripts/extjs3-ext/ux.swfupload/SwfUploadPanel.css"); + Ext.ux.OnDemandLoad + .load("/scripts/extjs3-ext/ux.swfupload/SwfUpload.js"); + Ext.ux.OnDemandLoad + .load( + "/scripts/extjs3-ext/ux.swfupload/SwfUploadPanel.js", + function(options) { + openActionDialog(this, 'upload'); + });*/ + openActionDialog(this, 'uploadDocument'); + } + }, + '-', + new Ext.Toolbar.Button({ + text : 'Show Dirs', + enableToggle : true, + pressed : true, + handler : function(btn, e) { + if (btn.pressed) { + datastore.sendWhat = 'both'; + loadDir(); + } else { + datastore.sendWhat = 'files'; + loadDir(); + } + } + }), '-', new Ext.form.TextField({ + name : "filterValue", + id : "filterField", + enableKeyEvents : true, + title : "Filter current view", + emptyText : 'Filter current view', + listeners : { + "keypress" : { + fn : function(textfield, e) { + if (e.getKey() == Ext.EventObject.ENTER) { + filterDataStore(); + } + } + } + } + }), new Ext.Toolbar.Button({ + text : ' X ', + handler : function() { + datastore.clearFilter(); + Ext.getCmp("filterField").setValue(""); + } + }) + + ]); +function filterDataStore(btn, e) { + var filterVal = Ext.getCmp("filterField").getValue(); + if (filterVal.length > 1) { + datastore.filter('name', eval('/' + filterVal + '/gi')); + } else { + datastore.clearFilter(); + } +} +// add a paging toolbar to the grid's footer +var gridbb = new Ext.PagingToolbar({ + store : datastore, + pageSize : 25 , + displayInfo : true, + displayMsg : '% % %', + emptyMsg : 'No items to display', + beforePageText : 'Page', + afterPageText : 'of %', + firstText : 'First', + lastText : 'Last', + nextText : 'Next', + prevText : 'Previous', + refreshText : 'Reload', + items : [ '-', ' ', ' ', ' ', ' ', ' ', new Ext.ux.StatusBar({ + defaultText : 'Done', + id : 'statusPanel' + }) ] +}); + +// the column model has information about grid columns +// dataIndex maps the column to the specific data field in +// the data store +var cm = new Ext.grid.ColumnModel([ { + id : 'gridcm', // id assigned so we can apply custom css (e.g. + // .x-grid-col-topic b { color:#333 }) + header : "Name", + dataIndex : 'name', + width : 250, + renderer : renderFileName, + editor : new Ext.form.TextField({ + allowBlank : false + }), + css : 'white-space:normal;' +}, { + header : "Version", + dataIndex : 'docVersion', + width : 50, + align : 'center', + renderer : renderVersion +}, { + header : "Modified", + dataIndex : 'appDocCreateDate', + width : 90 +}, { + header : "Owner", + dataIndex : 'owner', + width : 150 + // sortable : false +}, { + header : "PM Type", + dataIndex : 'appDocType', + width : 70// , + // align : 'right' + // renderer : renderType +}, { + header : "Type", + dataIndex : 'type', + width : 70, + // align : 'right', + renderer : renderType +}, { + header : "Process", + dataIndex : 'proTitle', + width : 150// , + // align : 'right' + // renderer : renderType +}, { + header : "Case", + dataIndex : 'appLabel', + width : 150// , + // align : 'right' + // renderer : renderType +},{ + header : "Size", + dataIndex : 'size', + width : 50, + hidden:true +}, { + header : "Permissions", + dataIndex : 'perms', + width : 100, + hidden:true +}, { + dataIndex : 'is_deletable', + header : "is_deletable", + hidden : true, + hideable : false +}, { + dataIndex : 'is_file', + hidden : true, + hideable : false +}, { + dataIndex : 'is_archive', + hidden : true, + hideable : false +}, { + dataIndex : 'is_writable', + hidden : true, + hideable : false +}, { + dataIndex : 'is_chmodable', + hidden : true, + hideable : false +}, { + dataIndex : 'is_readable', + hidden : true, + hideable : false +}, { + dataIndex : 'is_deletable', + hidden : true, + hideable : false +}, { + dataIndex : 'is_editable', + hidden : true, + hideable : false +}, { + dataIndex : 'id', + hidden : true, + hideable : false +} ]); + +// by default columns are sortable +cm.defaultSortable = true; + +// Unregister the default double click action (which makes the name field +// editable - we want this when the user clicks "Rename" in the menu) +// ext_itemgrid.un('celldblclick', ext_itemgrid.onCellDblClick); + +function handleRowClick(sm, rowIndex) { + //console.log("Row Clicked: "+rowIndex); + var selections = sm.getSelections(); + tb = ext_itemgrid.getTopToolbar(); + if (selections.length > 1) { + tb.items.get('tb_delete').enable(); + tb.items.get('tb_rename').disable(); + tb.items.get('tb_download').disable(); + } else if (selections.length == 1) { + tb.items.get('tb_delete')[selections[0].get('is_deletable') ? 'enable' + : 'disable'](); + tb.items.get('tb_rename')[selections[0].get('is_deletable') ? 'enable' + : 'disable'](); + tb.items.get('tb_download')[selections[0].get('is_readable') + && selections[0].get('is_file') ? 'enable' : 'disable'](); + } else { + tb.items.get('tb_delete').disable(); + tb.items.get('tb_rename').disable(); + tb.items.get('tb_download').disable(); + } + return true; +} + + +// trigger the data store load +function loadDir() { + //console.info("loadDir"); + //console.trace(); + datastore.load({ + params : { + start : 0, + limit : 150, + dir : datastore.directory, + node : datastore.directory, + option : 'gridDocuments', + action : 'expandNode', + sendWhat : datastore.sendWhat + } + }); +} + +function rowContextMenu(grid, rowIndex, e, f) { + //console.log("Context menu: "+grid+" - "+rowIndex); + if (typeof e == 'object') { + e.preventDefault(); + } else { + e = f; + } + gsm = ext_itemgrid.getSelectionModel(); + gsm.clickedRow = rowIndex; + var selections = gsm.getSelections(); + if (selections.length > 1) { + gridCtxMenu.items.get('gc_delete').enable(); + gridCtxMenu.items.get('gc_rename').disable(); + gridCtxMenu.items.get('gc_download').disable(); + } else if (selections.length == 1) { + gridCtxMenu.items.get('gc_delete')[selections[0].get('is_deletable') ? 'enable' + : 'disable'](); + gridCtxMenu.items.get('gc_rename')[selections[0].get('is_deletable') ? 'enable' + : 'disable'](); + gridCtxMenu.items.get('gc_download')[selections[0].get('is_readable') + && selections[0].get('is_file') ? 'enable' : 'disable'](); + } + gridCtxMenu.show(e.getTarget(), 'tr-br?'); + +} +gridCtxMenu = new Ext.menu.Menu({ + id : 'gridCtxMenu', + + items : [ { + id : 'gc_rename', + icon : '/images/documents/_fonts.png', + text : 'renamelink', + handler : function() { + ext_itemgrid.onCellDblClick(ext_itemgrid, gsm.clickedRow, 0); + gsm.clickedRow = null; + } + }, { + id : 'gc_copy', + icon : '/images/documents/_editcopy.png', + text : 'copylink', + handler : function() { + openActionDialog(this, 'copy'); + } + }, { + id : 'gc_move', + icon : '/images/documents/_move.png', + text : 'movelink', + handler : function() { + openActionDialog(this, 'move'); + } + }, { + id : 'gc_delete', + icon : '/images/documents/_editdelete.png', + text : 'dellink', + handler : function() { + openActionDialog(this, 'delete'); + } + }, '-', { + id : 'gc_download', + icon : '/images/documents/_down.png', + text : 'downlink', + handler : function() { + openActionDialog(this, 'download'); + } + }, + + '-', { + id : 'cancel', + icon : '/images/documents/_cancel.png', + text : 'btncancel', + handler : function() { + gridCtxMenu.hide(); + } + } ] +}); + +function dirContext(node, e) { + //console.log("Dir context menu: "+node); + // Select the node that was right clicked + node.select(); + // Unselect all files in the grid + ext_itemgrid.getSelectionModel().clearSelections(); + + dirCtxMenu.items.get('dirCtxMenu_rename')[node.attributes.is_deletable ? 'enable' + : 'disable'](); + dirCtxMenu.items.get('dirCtxMenu_remove')[node.attributes.is_deletable ? 'enable' + : 'disable'](); + + dirCtxMenu.node = node; + dirCtxMenu.show(e.getTarget(), 't-b?'); + +} + +function copymove(action) { + var s = dropEvent.data.selections, r = []; + if (s) { + // Dragged from the Grid + requestParams = getRequestParams(); + requestParams.new_dir = dropEvent.target.id.replace(/_RRR_/g, '/'); + requestParams.new_dir = requestParams.new_dir.replace(/ext_root/g, ''); + requestParams.confirm = 'true'; + requestParams.action = action; + handleCallback(requestParams); + } else { + // Dragged from inside the tree + // alert('Move ' + dropEvent.data.node.id.replace( /_RRR_/g, '/' )+' to + // '+ dropEvent.target.id.replace( /_RRR_/g, '/' )); + requestParams = getRequestParams(); + requestParams.dir = datastore.directory.substring(0, + datastore.directory.lastIndexOf('/')); + requestParams.new_dir = dropEvent.target.id.replace(/_RRR_/g, '/'); + requestParams.new_dir = requestParams.new_dir.replace(/ext_root/g, ''); + requestParams.selitems = Array(dropEvent.data.node.id.replace(/_RRR_/g, + '/')); + requestParams.confirm = 'true'; + requestParams.action = action; + handleCallback(requestParams); + } +} +// context menus +var dirCtxMenu = new Ext.menu.Menu( + { + id : 'dirCtxMenu', + items : [ + { + id : 'dirCtxMenu_new', + icon : '/images/documents/_folder_new.png', + text : 'New', + handler : function() { + dirCtxMenu.hide(); + openActionDialog(this, 'newFolder'); + } + }, + { + id : 'dirCtxMenu_rename', + icon : '/images/documents/_fonts.png', + text : 'Rename', + handler : function() { + dirCtxMenu.hide(); + openActionDialog(this, 'rename'); + } + }, + { + id : 'dirCtxMenu_copy', + icon : '/images/documents/_editcopy.png', + text : 'Copy', + handler : function() { + dirCtxMenu.hide(); + openActionDialog(this, 'copy'); + } + }, + { + id : 'dirCtxMenu_move', + icon : '/images/documents/_move.png', + text : 'Move', + handler : function() { + dirCtxMenu.hide(); + openActionDialog(this, 'move'); + } + }, + { + id : 'dirCtxMenu_remove', + icon : '/images/documents/_editdelete.png', + text : 'Remove', + handler : function() { + dirCtxMenu.hide(); + var num = 1; + Ext.Msg + .confirm( + 'Confirm', + String + .format( + "Delete?", + num), + function(btn) { + deleteDir(btn, dirCtxMenu.node); + }); + } + }, '-', { + id : 'dirCtxMenu_reload', + icon : '/images/documents/_reload.png', + text : 'Refresh', + handler : function() { + dirCtxMenu.hide(); + dirCtxMenu.node.reload(); + } + }, '-', { + id : 'dirCtxMenu_cancel', + icon : '/images/documents/_cancel.png', + text : 'Cancel', + handler : function() { + dirCtxMenu.hide(); + } + } ] + }); +var copymoveCtxMenu = new Ext.menu.Menu({ + id : 'copyCtx', + items : [ { + id : 'copymoveCtxMenu_copy', + icon : '/images/documents/_editcopy.png', + text : 'copylink', + handler : function() { + copymoveCtxMenu.hide(); + copymove('copy'); + } + }, { + id : 'copymoveCtxMenu_move', + icon : '/images/documents/_move.png', + text : 'movelink', + handler : function() { + copymoveCtxMenu.hide(); + copymove('move'); + } + }, '-', { + id : 'copymoveCtxMenu_cancel', + icon : '/images/documents/_cancel.png', + text : 'btncancel', + handler : function() { + copymoveCtxMenu.hide(); + } + } ] +}); + +function copymoveCtx(e) { + // ctxMenu.items.get('remove')[node.attributes.allowDelete ? 'enable' : + // 'disable'](); + copymoveCtxMenu.showAt(e.rawEvent.getXY()); +} + var documentsTab = { - id : 'documents', - title : 'Documents', - iconCls : 'ICON_FOLDERS', - layout : 'border', - items : [ { - id : 'documentsView', - region : 'center', - // autoScroll: true, - items : [ { - xtype : 'treepanel', - id : 'documentsTree', - style : { - // width: '50%', - height : '100%', - overflow : 'auto' - }, - useArrows : true, - border : false, - split : true, - itemId : 'documentsTreePanel', - id : 'documentsTreePanel', - rootVisible : true, - treePanel : this, - clearOnReLoad : false, - loader : new Ext.tree.TreeLoader( - { - dataUrl : '../appFolder/appFolderAjax.php', - baseParams : { - action : 'expandNode' - } - } - ), - listeners : { - dblclick : function(n) { - if (n.attributes.optionType == "startProcess") { - Ext.Msg.show({ - title : 'Start Case', - msg : 'Starting new case

' - + n.attributes.text - + '', - icon : Ext.MessageBox.INFO - }); - Ext.Ajax.request({ - url : 'casesStartPage_Ajax.php', - params : { - action : 'startCase', - processId : n.attributes.pro_uid, - taskId : n.attributes.tas_uid - }, - success : function( - response) { - var res = Ext.util.JSON - .decode(response.responseText); - if (res.openCase) { - window.location = res.openCase.PAGE; - } else { - Ext.Msg.show({ - title : 'Error creating a new Case', - msg : '', - icon : Ext.MessageBox.ERROR, - buttons : Ext.Msg.OK - }); - } - }, - failure : function() { - // grid.getGridEl().unmask(true); - Ext.Msg.alert('Error', 'Unable to start a case'); - } - }); - } - }, - click : function(n) { - mainPanel.showDetails(n); - } - }, - root : { - nodeType : 'async', - draggable : false, - id : 'root', - expanded : true - } - } ] - // items - } ], + id : 'documents', + title : 'Documents', + iconCls : 'ICON_FOLDERS', + layout : 'border', + defaults : { + split : true + }, + items : [ + { + xtype : "treepanel", + id : "dirTree", + region : "west", + title : 'DirectoryReload', + closable : false, + collapsible: true, + collapseMode: 'mini', + // collapsed:true, + width : 250, + titlebar : true, + autoScroll : true, + animate : true, + + // rootVisible: false, + loader : new Ext.tree.TreeLoader({ + preloadChildren : true, + dataUrl : '../appFolder/appFolderAjax.php', + baseParams : { + action : 'expandNode', + sendWhat : 'dirs' + } + }), + containerScroll : true, + enableDD : true, + ddGroup : 'TreeDD', + listeners : { + // "load": { fn: function(node) { chDir( node.id.replace( + // /_RRR_/g, '/' ), true ); } }, + 'contextmenu' : { + fn : dirContext + }, + 'textchange' : { + fn : function(node, text, oldText) { + if (text == oldText) + return true; + var requestParams = getRequestParams(); + var dir = node.parentNode.id.replace(/_RRR_/g, '/'); + if (dir == 'root') + dir = ''; + requestParams.dir = dir; + requestParams.newitemname = text; + requestParams.item = oldText; - tbar : [ - { - xtype : 'textfield', - name : 'field1', - emptyText : 'Filter', - enableKeyEvents : true, - listeners : { - render : function(f) { - Ext.getCmp("documentsTreePanel").filter = new Ext.tree.TreeFilter( - this, - { - clearBlank : true, - autoClear : true - } - ); - }, - keydown : function(t, e) { - treeFiltered = Ext.getCmp("documentsTreePanel"); - var text = t.getValue(); - if (!text) { - treeFiltered.filter - .clear(); - return; - } - treeFiltered - .expandAll(); + requestParams.confirm = 'true'; + requestParams.action = 'rename'; + handleCallback(requestParams); + ext_itemgrid.stopEditing(); + return true; + } + }, + 'beforenodedrop' : { + fn : function(e) { + dropEvent = e; + copymoveCtx(e); + } + }, + 'beforemove' : { + fn : function() { + return false; + } + } + }, - var re = new RegExp( - '^' - + Ext - .escapeRe(text), - 'i'); - treeFiltered.filter - .filterBy(function( - n) { - // return - // !n.attributes.isClass - // || - // re.test(n.text); - }); - /* - * // hide empty - * packages that weren't - * filtered - * this.hiddenPkgs = []; - * var me = this; - * this.root.cascade(function(n){ - * if(!n.attributes.isClass && - * n.ui.ctNode.offsetHeight < - * 3){ n.ui.hide(); - * me.hiddenPkgs.push(n); } - * }); - */ - }, - scope : this - } - }, - ' ', - ' ', - { - iconCls : 'icon-expand-all', - tooltip : 'Expand All', - handler : function() { - Ext - .getCmp("documentsTreePanel").root - .expand(true); - }, - scope : this - }, - '-', - { - iconCls : 'icon-collapse-all', - tooltip : 'Collapse All', - handler : function() { - Ext - .getCmp("documentsTreePanel").root - .collapse(true); - }, - scope : this - }, - ' ', - ' ', - { - xtype : 'tbbutton', - cls : 'x-btn-icon', - icon : '/images/refresh.gif', + root : new Ext.tree.AsyncTreeNode({ + text : '/', + draggable : false, + expanded : true, + id : 'root' + }) + }, + { + layout : "border", + region : "center", + items : [ + { + region : "north", + xtype : "locationbar", + id : "locationbarcmp", + height : 28, + tree : Ext.getCmp("dirTree") + }, + { + // region : "center", + // layout:'fit', + // items : [ { + region : "center", + // xtype : "tabpanel", + layout:'fit', + id : "mainpanel", + // autoHeight : true, + // enableTabScroll : true, + // activeTab : 0, + // hideTabStripItem:0, + items : [ { + xtype : "editorgrid", + layout:'fit', + region : "center", + // title : "Documents", + // autoHeight : true, + // autoScroll : true, + // collapsible : false, + // closeOnTab : true, + id : "gridpanel", + ds : datastore, + cm : cm, + tbar : gridtb, + bbar : gridbb, + ddGroup : 'TreeDD', + selModel : new Ext.grid.RowSelectionModel({ + listeners : { + 'rowselect' : { + fn : handleRowClick + }, + 'selectionchange' : { + fn : handleRowClick + } + } + }), + loadMask : true, + keys : [ + { + key : 'c', + ctrl : true, + stopEvent : true, + handler : function() { + openActionDialog(this, + 'copy'); + } + + }, + { + key : 'x', + ctrl : true, + stopEvent : true, + handler : function() { + openActionDialog(this, + 'move'); + } + + }, + { + key : 'a', + ctrl : true, + stopEvent : true, + handler : function() { + ext_itemgrid + .getSelectionModel() + .selectAll(); + } + }, + { + key : Ext.EventObject.DELETE, + handler : function() { + openActionDialog(this, + 'delete'); + } + } ], + listeners : { + 'rowcontextmenu' : { + fn : rowContextMenu + }, + 'celldblclick' : { + fn : function(grid, rowIndex, + columnIndex, e) { + if (Ext.isOpera) { + // because Opera <= 9 + // doesn't support the + // right-mouse-button-clicked + // event (contextmenu) + // we need to simulate it + // using the ondblclick + // event + rowContextMenu(grid, + rowIndex, e); + } else { + gsm = ext_itemgrid + .getSelectionModel(); + gsm.clickedRow = rowIndex; + var selections = gsm + .getSelections(); + if (!selections[0] + .get('is_file')) { + //console.log(datastore.directory); + chDir(/*datastore.directory + + "/"+*/selections[0] + .get('id')); + } else if (selections[0] + .get('is_editable')) { + openActionDialog(this, + 'edit'); + } else if (selections[0] + .get('is_readable')) { + openActionDialog(this, + 'view'); + } + } + } + }, + 'validateedit' : { + fn : function(e) { + if (e.value == e.originalValue) + return true; + var requestParams = getRequestParams(); + requestParams.newitemname = e.value; + requestParams.item = e.originalValue; + + requestParams.confirm = 'true'; + requestParams.action = 'rename'; + handleCallback(requestParams); + return true; + } + } + } + + } ]// another level + + // } /* jj */] + } + ] + } ], + + listeners : { + "afterlayout" : { + fn : function() { + // alert(Ext.getCmp("locationbarcmp")); + // Ext.getCmp("documents"). + if(typeof(sw_afterlayout)!="undefined"){ + //console.log("starting locatiobar"); + Ext.getCmp("locationbarcmp").tree = Ext.getCmp("dirTree"); + Ext.getCmp("locationbarcmp").initComponent(); + //console.log("location abr started"); + return; + } + + //console.log(typeof(sw_afterlayout)); + sw_afterlayout=true; + ext_itemgrid = Ext.getCmp("gridpanel"); + //console.log("variable ext_itemgrid created"); + //console.trace(); + ext_itemgrid.un('celldblclick', ext_itemgrid.onCellDblClick); + //console.log("celldoublde click removed"); + dirTree = Ext.getCmp("dirTree"); + //console.log("dirtree created"); + + /* + * dirTree.loader.on('load', function(loader, o, + * response ) { if( response && response.responseText ) { + * var json = Ext.decode( response.responseText ); if( + * json && json.error ) { Ext.Msg.alert('Error', + * json.error +'onLoad'); } } }); + */ + + var tsm = dirTree.getSelectionModel(); + //console.log("tried to gtet selection model"); + tsm.on('selectionchange', + handleNodeClick); + + // create the editor for the directory + // tree + var dirTreeEd = new Ext.tree.TreeEditor( + dirTree, + { + allowBlank : false, + blankText : 'A name is required', + selectOnFocus : true + }); + //console.log("tree editor created"); + + //console.log("before the first chdir"); + chDir(''); + //console.log("starting locatiobar first time"); + Ext.getCmp("locationbarcmp").tree = Ext.getCmp("dirTree"); + // Ext.getCmp("locationbarcmp").initComponent(); + //console.log("location abr started first time"); + + } + + } + } - handler : function() { - tree = Ext - .getCmp('documentsTreePanel'); - tree.getLoader().load( - tree.root); - } - } - ] }; /* -var dashboardTab = { - title : 'Dashboard', - id : 'mainDashboard', - iconCls : 'ICON_CASES_START_PAGE', - xtype : 'container', - autoHeight : true, - enableDD : false, - items : getDashboardItems() -}; -*/ + * var dashboardTab = { title : 'Dashboard', id : 'mainDashboard', iconCls : + * 'ICON_CASES_START_PAGE', xtype : 'container', autoHeight : true, enableDD : + * false, items : getDashboardItems() }; + */ var MainPanel = function() { MainPanel.superclass.constructor.call(this, { - id : 'doc-body', - region : 'center', - resizeTabs : true, - minTabWidth : 135, - tabWidth : 135, - plugins : new Ext.ux.TabCloseMenu(), - enableTabScroll : true, - activeTab : 0, - items : [startCaseTab/*, documentsTab, dashboardTab*/] - }); + id : 'doc-body', + region : 'center', + resizeTabs : true, + minTabWidth : 135, + tabWidth : 135, + plugins : new Ext.ux.TabCloseMenu(), + enableTabScroll : true, + activeTab : 0, + items : [ startCaseTab, documentsTab /* , dashboardTab */] + }); }; // console.info("Main Panel - End"); -Ext.extend( - MainPanel, - Ext.TabPanel, - { - initEvents : function() { - MainPanel.superclass.initEvents.call(this); - // this.body.on('click', this.onClick, this); - - }, +Ext + .extend( + MainPanel, + Ext.TabPanel, + { + initEvents : function() { + MainPanel.superclass.initEvents.call(this); + this.body.on('click', this.onClick, this); + }, - onClick : function(e, target, elementselected) { - return; - if (target = e.getTarget('a:not(.exi)', 3)) { - var cls = Ext.fly(target).getAttributeNS('ext', - 'cls'); - e.stopEvent(); - if (cls) { - var member = Ext.fly(target).getAttributeNS( - 'ext', 'member'); - this.loadClass(target.href, cls, member); - } else if (target.className == 'inner-link') { - this.getActiveTab().scrollToSection( - target.href.split('#')[1]); - } else { - window.open(target.href); - } - } else if (target = e.getTarget('.micon', 2)) { - e.stopEvent(); - var tr = Ext.fly(target.parentNode); - if (tr.hasClass('expandable')) { - tr.toggleClass('expanded'); - } - } - }, + onClick : function(e, target, elementselected) { + return; + if (target = e.getTarget('a:not(.exi)', 3)) { + var cls = Ext.fly(target).getAttributeNS('ext', + 'cls'); + e.stopEvent(); + if (cls) { + var member = Ext.fly(target).getAttributeNS( + 'ext', 'member'); + this.loadClass(target.href, cls, member); + } else if (target.className == 'inner-link') { + this.getActiveTab().scrollToSection( + target.href.split('#')[1]); + } else { + window.open(target.href); + } + } else if (target = e.getTarget('.micon', 2)) { + e.stopEvent(); + var tr = Ext.fly(target.parentNode); + if (tr.hasClass('expandable')) { + tr.toggleClass('expanded'); + } + } + }, +/* + loadClass : function(href, cls, member) { + var id = 'docs-' + cls; + var tab = this.getComponent(id); + if (tab) { + this.setActiveTab(tab); + if (member) { + tab.scrollToMember(member); + } + } else { + var autoLoad = { + url : href + }; + if (member) { + autoLoad.callback = function() { + Ext.getCmp(id).scrollToMember(member); + }; + } + var p = this.add(new DocPanel({ + id : id, + cclass : cls, + autoLoad : autoLoad + })); + this.setActiveTab(p); + } + }, +*/ + + showDetails : function(selectedNode) { - loadClass : function(href, cls, member) { - var id = 'docs-' + cls; - var tab = this.getComponent(id); - if (tab) { - this.setActiveTab(tab); - if (member) { - tab.scrollToMember(member); - } - } else { - var autoLoad = { - url : href - }; - if (member) { - autoLoad.callback = function() { - Ext.getCmp(id).scrollToMember(member); - }; - } - var p = this.add(new DocPanel({ - id : id, - cclass : cls, - autoLoad : autoLoad - })); - this.setActiveTab(p); - } - }, - - initTemplates : function() { - - this.detailsTemplate = new Ext.XTemplate( - '
', - '', - '', - '
', - - '', - '

{taskName}


', - 'Process Name:', - '{processName}', - 'Description: ', - '{processDescription}', - '', - '', - '', - '', - '', - '', - '
', - 'Category: ', - - '{processCategory}', - - '', - 'Calendar: ', - '{calendarName} ({calendarDescription})', - '', - 'Working Days: ', - '{calendarWorkDays}', - '', - 'Debug mode: ', - '{processDebug}', - '
', - 'Statistics: ', - 'Active Cases (Mine/Total):{myInbox} / {totalInbox}', - - '
Double click to start any Process/Case', - '', - - '', '
'); - this.detailsTemplate.compile(); - }, - - showDetails : function(selectedNode) { - - // console.log(selectedNode); - var detailEl = Ext.getCmp('process-detail-panel').body; - if (selectedNode) { + // console.log(selectedNode); + var detailEl = Ext.getCmp('process-detail-panel').body; + if (selectedNode) { - //this.initTemplates(); - //detailEl.hide(); - // detailEl.sequenceFx(); - // detailEl.slideOut('l', - // {stopFx:true,duration:.9}); - - + // this.initTemplates(); + // detailEl.hide(); + // detailEl.sequenceFx(); + // detailEl.slideOut('l', + // {stopFx:true,duration:.9}); - otherAttributes = selectedNode.attributes.otherAttributes; + otherAttributes = selectedNode.attributes.otherAttributes; calendarDays=(otherAttributes.CALENDAR_WORK_DAYS).split("|"); calendarObj={}; @@ -918,7 +2027,7 @@ Ext.extend( calendarName : otherAttributes.CALENDAR_NAME, calendarDescription : otherAttributes.CALENDAR_DESCRIPTION, processCalendar:otherAttributes.CALENDAR_NAME+" "+otherAttributes.CALENDAR_DESCRIPTION, - calendarWorkDays : calendarObj,/*(otherAttributes.CALENDAR_WORK_DAYS).split("|"),*/ + calendarWorkDays : calendarObj,/* (otherAttributes.CALENDAR_WORK_DAYS).split("|"), */ processCategory : otherAttributes.PRO_CATEGORY_LABEL, processDebug : otherAttributes.PRO_DEBUG, processDescription : otherAttributes.PRO_DESCRIPTION, @@ -931,89 +2040,88 @@ Ext.extend( - //this.detailsTemplate.overwrite(detailEl, data); - //detailEl.slideIn('t', {stopFx:true,duration:.0}); - //detailEl.highlight('#000', { - // block : true - //}); - } else { - detailEl.update(''); - } + // this.detailsTemplate.overwrite(detailEl, data); + // detailEl.slideIn('t', {stopFx:true,duration:.0}); + detailEl.highlight('#c3daf9', { + block : true + }); + } else { + detailEl.update(''); + } - return; - // var selNode = this.getSelectedNodes(); + return; + // var selNode = this.getSelectedNodes(); - }, - /* - * startNewCase:function(){ alert("asdasdasd"); }, - */ - loadOtherDashboards : function() { - // console.info("Getting other Dashboards"); - dashboardTabPanels = this; - // console.log(dashboardTabPanels); - conn.request({ - url : 'casesStartPage_Ajax.php', - method : 'POST', - params : { - "action" : 'getRegisteredDashboards' - }, - success : function(responseObject) { + }, + /* + * startNewCase:function(){ alert("asdasdasd"); }, + */ + loadOtherDashboards : function() { + // console.info("Getting other Dashboards"); + dashboardTabPanels = this; + // console.log(dashboardTabPanels); + conn.request({ + url : 'casesStartPage_Ajax.php', + method : 'POST', + params : { + "action" : 'getRegisteredDashboards' + }, + success : function(responseObject) { + var response = Ext.util.JSON + .decode(responseObject.responseText); + for (var i in response) { + tabInfo = response[i]; + if (tabInfo.sName) { + dashboardTabPanels.add({ + title : tabInfo.sName, + id : tabInfo.sNamespace + "-" + + tabInfo.sName, + iconCls : tabInfo.sIcon,// 'ICON_CASES_START_PAGE', + autoLoad : { + url : tabInfo.sPage, + scripts : true + } + // disabled:true, + }); + } + } + // getDefaultDashboard(dashboardTabPanels); + dashboardTabPanels.activateDefaultTab(); + }, + failure : function() { + // grid.getGridEl().unmask(true); + // getDefaultDashboard(dashboardTabPanels); + dashboardTabPanels.activateDefaultTab(); + Ext.Msg.alert('Status', + 'Unable to get Dashboards'); + } + }); + }, + activateDefaultTab : function() { + // api.expandPath('/root/apidocs'); + // allow for link in + var page = window.location.href.split('?')[1]; + // console.info("page : "+page); + if (page) { + var ps = Ext.urlDecode(page); + // console.log(ps.action); + if (ps.action) { + defaultDashboard = ps.action; + if (this.getItem(defaultDashboard)) { + // console.info("Setting the new default + // dashboard: + // "+defaultDashboard); + this.setActiveTab(defaultDashboard); + } - var response = Ext.util.JSON - .decode(responseObject.responseText); - for ( var i = 0; i < response.length; i++) { - tabInfo = response[i]; - if (tabInfo.sName) { - dashboardTabPanels.add({ - title : tabInfo.sName, - id : tabInfo.sNamespace + "-" - + tabInfo.sName, - iconCls : tabInfo.sIcon,// 'ICON_CASES_START_PAGE', - autoLoad : { - url : tabInfo.sPage, - scripts : true - } - // disabled:true, - }); - } - } - // getDefaultDashboard(dashboardTabPanels); - dashboardTabPanels.activateDefaultTab(); - }, - failure : function() { - // grid.getGridEl().unmask(true); - // getDefaultDashboard(dashboardTabPanels); - dashboardTabPanels.activateDefaultTab(); - Ext.Msg.alert('Status', - 'Unable to get Dashboards'); - } - }); - }, - activateDefaultTab : function() { - // api.expandPath('/root/apidocs'); - // allow for link in - var page = window.location.href.split('?')[1]; - // console.info("page : "+page); - if (page) { - var ps = Ext.urlDecode(page); - // console.log(ps.action); - if (ps.action) { - defaultDashboard = ps.action; - if (this.getItem(defaultDashboard)) { - // console.info("Setting the new default - // dashboard: - // "+defaultDashboard); - this.setActiveTab(defaultDashboard); - } + } + // var cls = ps['class']; + // mainPanel.loadClass('output/' + cls + '.html', + // cls, ps.member); + } + } - } - // var cls = ps['class']; - // mainPanel.loadClass('output/' + cls + '.html', - // cls, ps.member); - } - } - - }); + }); var mainPanel = new MainPanel(); @@ -1068,31 +2176,7 @@ Ext.onReady(function() { return unescape(document.cookie.substring(offset, endstr)); }; - // function that loads store when it is called - function getDashboardData() { - var parameters = { - action : 'getSimpleDashboardData' - }; - conn.request({ - url : 'casesStartPage_Ajax.php', - method : 'POST', - params : { - "action" : 'getSimpleDashboardData' - }, - success : function(responseObject) { - var responseData = Ext.decode(responseObject.responseText); - - // Load store from here - caseStatusByProcess.loadData(responseData); - caseDelayed.loadData(responseData); - }, - failure : function() { - Ext.Msg.alert('Status', 'Unable to get list of Process'); - } - }); - } - - Ext.QuickTips.init(); + mainPanel.on('tabchange', function(tp, tab) { if (tab.getUpdater) { @@ -1106,10 +2190,6 @@ Ext.onReady(function() { var viewport = new Ext.Viewport({ layout : 'border', items : [ - /* - * { // cls: 'docs-header', // height: 36, region:'north', xtype:'box', - * el:'header', border:false// , // margins: '0 0 5 0' }, - */ mainPanel ] }); @@ -1119,163 +2199,12 @@ Ext.onReady(function() { viewport.doLayout(); + // routine to hide the debug panel if it is open + if (parent.PANEL_EAST_OPEN) { + parent.PANEL_EAST_OPEN = false; + var debugPanel = parent.Ext.getCmp('debugPanel'); + debugPanel.hide(); + debugPanel.ownerCt.doLayout(); + } - //routine to hide the debug panel if it is open - if( parent.PANEL_EAST_OPEN ){ - parent.PANEL_EAST_OPEN = false; - var debugPanel = parent.Ext.getCmp('debugPanel'); - debugPanel.hide(); - debugPanel.ownerCt.doLayout(); - } - -}); - - - - - - -// vim: ts=4:sw=4:nu:fdc=4:nospell -/*global Ext */ -/** - * @class Ext.ux.tree.TreeFilterX - * @extends Ext.tree.TreeFilter - * - *

- * Shows also parents of matching nodes as opposed to default TreeFilter. In other words - * this filter works "deep way". - *

- * - * @author Ing. Jozef Sakáloš - * @version 1.0 - * @date 17. December 2008 - * @revision $Id: Ext.ux.tree.TreeFilterX.js 589 2009-02-21 23:30:18Z jozo $ - * @see http://extjs.com/forum/showthread.php?p=252709 - * - * @license Ext.ux.tree.CheckTreePanel is licensed under the terms of - * the Open Source LGPL 3.0 license. Commercial use is permitted to the extent - * that the code/component(s) do NOT become part of another Open Source or Commercially - * licensed development library or toolkit without explicit permission. - * - *

License details: http://www.gnu.org/licenses/lgpl.html

- * - * @forum 55489 - * @demo http://remotetree.extjs.eu - * - * @donate - *
- * - * - * - * - *
- */ - -Ext.ns('Ext.ux.tree'); - -/** - * Creates new TreeFilterX - * @constructor - * @param {Ext.tree.TreePanel} tree The tree panel to attach this filter to - * @param {Object} config A config object of this filter - */ -Ext.ux.tree.TreeFilterX = Ext.extend(Ext.tree.TreeFilter, { - /** - * @cfg {Boolean} expandOnFilter Deeply expands startNode before filtering (defaults to true) - */ - expandOnFilter:true - - // {{{ - /** - * Filter the data by a specific attribute. - * - * @param {String/RegExp} value Either string that the attribute value - * should start with or a RegExp to test against the attribute - * @param {String} attr (optional) The attribute passed in your node's attributes collection. Defaults to "text". - * @param {TreeNode} startNode (optional) The node to start the filter at. - */ - ,filter:function(value, attr, startNode) { - - // expand start node - if(false !== this.expandOnFilter) { - startNode = startNode || this.tree.root; - var animate = this.tree.animate; - this.tree.animate = false; - startNode.expand(true, false, function() { - - // call parent after expand - Ext.ux.tree.TreeFilterX.superclass.filter.call(this, value, attr, startNode); - - }.createDelegate(this)); - this.tree.animate = animate; - } - else { - // call parent - Ext.ux.tree.TreeFilterX.superclass.filter.apply(this, arguments); - } - - } // eo function filter - // }}} - // {{{ - /** - * Filter by a function. The passed function will be called with each - * node in the tree (or from the startNode). If the function returns true, the node is kept - * otherwise it is filtered. If a node is filtered, its children are also filtered. - * Shows parents of matching nodes. - * - * @param {Function} fn The filter function - * @param {Object} scope (optional) The scope of the function (defaults to the current node) - */ - ,filterBy:function(fn, scope, startNode) { - startNode = startNode || this.tree.root; - if(this.autoClear) { - this.clear(); - } - var af = this.filtered, rv = this.reverse; - - var f = function(n) { - if(n === startNode) { - return true; - } - if(af[n.id]) { - return false; - } - var m = fn.call(scope || n, n); - if(!m || rv) { - af[n.id] = n; - n.ui.hide(); - return true; - } - else { - n.ui.show(); - var p = n.parentNode; - while(p && p !== this.root) { - p.ui.show(); - p = p.parentNode; - } - return true; - } - return true; - }; - startNode.cascade(f); - - if(this.remove){ - for(var id in af) { - if(typeof id != "function") { - var n = af[id]; - if(n && n.parentNode) { - n.parentNode.removeChild(n); - } - } - } - } - } // eo function filterBy - // }}} - -}); // eo extend - -// eof - - +}); \ No newline at end of file diff --git a/workflow/public_html/images/documents/_.gif b/workflow/public_html/images/documents/_.gif new file mode 100755 index 0000000000000000000000000000000000000000..f44a942b99bfc35cd7527a128b51691933ef7863 GIT binary patch literal 43 scmZ?wbhEHbWMp7uXkcLY4+e@qSy)9F7#MVb7%0xjz`(@h!pL9^02ogS4gdfE literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/_accept.png b/workflow/public_html/images/documents/_accept.png new file mode 100755 index 0000000000000000000000000000000000000000..3e5a30035b52919a8241db1210864b0234252412 GIT binary patch literal 1777 zcmV(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRZ?cS%G+RCwBSmRoF;#}&taGv94*-d(S4STEQt1{*LplRy;I5G7m`2uj)#P!&b3 z(x6J9iX=)w%~REfBx=+4p=wg)A-GW>iIfCFA!=w!L2Z?&h1S7ua}D)#zVF#A>dxKdquZa+KR$}q znz~So`%}v{Eln-NEQ#B_EJ<}RifNckCMVEZ<0+q9VVql|{nQ1cy!Ob8Y)!5$pY7^=CZEqA zlu}M6Jx#Jqb9rmalEa5?pGs``a1S|MWJO~uwef1CBT<$@nLf(&P?kd4f@mbd@`e_a zWw7nYUf#HR#JXo$Tf5^po2UCBr$~X8rk1z=HryG1>XV<4s!5TqsmC&Xsw_pVtx4LN zdK>C(NZOj1St1n<@~d^v^7x{4q-yGU_T(=()c03wMa$ARfh2$_rKBdF*rUR-ZRfF< zsf{I=ACD6h9w7;~)R+>a(8#I&`ASn#nmuh#v$p;oR@Jl+wFA7@{bzQa`Wa`xb6`$= zUGl~Lp*zn@psFD`ch_&aKH#R?$GwT!)R{iDwkGZtZ94YrVO}QUOMwz=7l8*JH_XHC+J`KbSPdGe^kb*;`d(8eo2FU ziw9;02$+h9DRB%*P&!1c2##SRwL+;PjxgA^@Ozljt^j^|`VDIBLF$4wD-#yY!6E)J z)Jbi1?YCtl7+Kvp)Iq{_SrGB4aRipMc)aOJnyZ&GHqnP$9Hv+vBVQb1P4WR!k#t4; ztxKOWaJPfS)%8S7L36ak+>pgcp^tDl(r6l{S)VTt6E-busYwNL1no6EICnE^k`JQ% z33|r9z%d-su{0agJ1XMWvV**Hsh!m|76umSaF(F-37ZB*Zv@jcgA#ZLK7xQO zuxZ{#0D@+S?=IWReW^_ZO<13P0^0}x;Azb-JNC0Q3brVM|1W|vhel#ZFoXgjg!FxX zDB;BMl?Mp2#R1L@96{+RvyvuT7VPBFg}Z5ruc~B!PDEyNJ(LA=e1gejbLLVAU zS!rs534Gt5kP}6>qqSxgN`!GsBNV(Gr+eEua%CUB_9kDW5G<-$ixiXII8rQfu)({{cR_ybn*6 zzizm^)_IUx^Y0kK1B{B}2qDS1y+{#faeO(W*^#5toyeasJhOjw{T9YbJ^~F00%nxX zJMVG$@{eXf&JFi+ruR*nqb8my_s5>^s?h)$0U%+j12y6L*q6Q!8H_> z4@@>7U`9DV@ID`0dXBOx0?^*oPE+_M8f&KS0|n&~v|HIc|4I4>`rg%AUy}gCBbisN zvU7cV>yJUCr!xL8Y$4F~Y`%wsF7GDW|RZ?-&7Ox2F|5B9zU zATFFgkJcK;an>(f&~m(U_>}cY_bU{=ZcJey#Pk>~F#cv7N1RQVp+rraSNa(5G|_9%tCS zOxYi&tO|g}kPeoN5DPT1bk-xRoV5kVi)F6gxcY+Yx(Ad}l@GuSfN7c_1VV^ZJX*cC zCQ-MuEXSjni5|vFL*&b2XsrlY)kN$BiNHJ@9V=!sgYOJw243|%?}`ut&-4C2KundU zl|l%S4uv8cBcZBq1p>iFDUApql=Abg>-OIr&wiYD?;iJk|BCPXmD&DPz<&k+GxEdn Tdtt+z00000NkvXXu0mjfCCEzF literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/_admin.gif b/workflow/public_html/images/documents/_admin.gif new file mode 100755 index 0000000000000000000000000000000000000000..04d231946d2e94d5c87d9ef74331618715cad0b9 GIT binary patch literal 639 zcmV-_0)YKTNk%w1VGsZi0OkMy6Lt@(wm}47>{*|iXPft|zVS4$Bde(1DX0E!i7U6Y zx*?%kGhr zzB8FKQpQ^ym;P{(SCX^wTeUo|wc*9Z;WfDay}iAPip1F7{*kNKX}f0!b^f8!{J^s- zLCXF*s5xi3^{2S=($40Bgx1u zkfJI_V20NDz{2CHzvN%i{$_M#LZ2uuuKsSR{xgRrr_T3GSy^blImylO%*@QSwb8!p zRioQvSeH#{wOD?Bey6F|w!Zb{<>v77{$srU5qkcCu=~{0=>Px!A^8La6aaq!EC2ui z01yBW000NvfPaF2H(*^IHzrJ1DTw7_#Fy06T}RI*I@Q literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/_archive.png b/workflow/public_html/images/documents/_archive.png new file mode 100755 index 0000000000000000000000000000000000000000..4a9fe1737a7123c8b0d7327f9acfc3f721275cbc GIT binary patch literal 1126 zcmV-s1eyDZP))u00kUWW0RR2`00adC0Q~p;00RF29|s2kQ4AU)SrQ{EE!f)T?cLJWxd#6Cr`YHK z!37Hg{0IX600RR60ISge00IC(0KWeO|Ns5~{rms`0s#G84Hgw#6D2S<7%x5#4{siA;$d?JdLKAD8!%Qr6SEBqWz75 zPeF=-Lq>w(&(D7h00G4E_dn3T%s`vDfd2anGXNNm41XEEd}3v|e)KJaS&R|GxlOki z1hwQDPRzZ)AR;FM3~Uw#CJr_RfB<6o_m2^%m>uGUe?TWQ0yX~!x{Vnajo)|}-oN<9 zaPRCZhM(X5GyM9^!k`^w#-L=Y!|;poC(w~Q82|!^g^i7s2^g$E{{n3X`UYqU5CQSu zzYP3xq6{_}Rt!%rK4x$%_hFDSQDRVb2ZkAg2*azp7l97_&jb)a%#!TCGC7!k@ra5D zFtG4SF)#qr0s}M96~BS5VdY^Ew-9Ggbunb%m68K$z+CYpa=8Qwm4$#81lMTY%* zFZ|hm^wzVR&%Ph}`j25MKmakCEAld&yZ@O1=xYXGDzH})Vu~~{(DC$jH s1SyO1tQF^C*$Cvv0ojK3jhEB literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/_arrowdown.gif b/workflow/public_html/images/documents/_arrowdown.gif new file mode 100755 index 0000000000000000000000000000000000000000..1191cc57a9801fde5cdbfb7aa130f26820fc5fb3 GIT binary patch literal 70 zcmZ?wbhEHbw1Zr-mn;Vhq**O;ZNWn7^zGrdBs?!&l#P0Z=Ubn+rmvc6=VnQ=ALtZob$Vfp_Jl(g8f^P zhE5Cp*N?7QJ;2mz+%h@0I)K{4P$%E$^XHyAesGiLp8@7r`vFqm-XU$w&uu*BtN&9S zvr?itP%lvPhYuXvhO)AKU>L;1!>YcpP@SKrM5W5^g$%&xgF}TyYx(=UTiybJE2LRG z2d4}uuBEC}3N)Dj7So`XshM*#pIaVIoxN}?+Q$Mw>51OhSS)cVO^s};z{%NO3ARLG zTk}gN%LehtAbD;WmhNip`116|ljNI>5eDv5RQR{LdU&5VAKVH(gg{rn8dq;d&v*0* zEvl+6{?DfV`!QUAD??G{DZzy~ld28E{mm!n}JhrcV5HZIN%Vf174QS0IG&@u;I zU0tZHt|TAEPQ1S-bgs+U5YLbZ0L{(KOfVSa zG)-eErEof(BoGLYhK2?b3WXR&QBYS`M*-j`DT^RWHY10E00000NkvXXu0mjfWA!$a literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/_cancel.png b/workflow/public_html/images/documents/_cancel.png new file mode 100755 index 0000000000000000000000000000000000000000..a432b492c4f8f54714290b27bd978eefa714488d GIT binary patch literal 1133 zcmV-z1d{uSP)i_@W|M}sAhw_srY>W~TKsPfouoxLJNIief_Uq!sAfaEsA{^Y@xOjmE zgETUH_`vZ0)G3BDOP2h+bm&kaKmak@u(Mx&^y$-mrq{2%AP9OrSt~`cWMBe}Df@WdXVtAb^-{fqrKM zhBm{WKbK$p{CV}~>(@b&Z{ISrfec|{VqpC9hvEOnj||^|n$Pav|M&czJ4yfk{hPxK ziXor@00G3p|Me>aP=MhdQ1O2@wh#Zfxc+?xI`hkm7YtzU0Ks3N8c+cLWnuXTwCn>L zPz;1Y=>#Bvm|a;}8UBK7;o$HwmX%#&_3Ev z8Du=HOuX z4|L&Apeyv`#@8bfBxE!U^>5?3)J&j7~IN0z^T7prh^aQ_9m=nqi-_p@gVCMG7_z;K%h5I{^nzkYr61?WsB zppBr|;1UpEcqk|p>1Ag}>4QVi}+aSR-WB@<_feqm1X5eG^$H2fT_k+Q}^f*w&3y4J+ z7#W^0+`sjJL0n#v;rFj!AltzP{r=6t@Z-mi?;yPZ0mK9%o<3!`2lg1ykpF*xPGMjL z;-3t^ezP-h3kWd${qqN``5(~s|NkNQ-@m_LEdT)oHsIDhhLbPO0vU`93_tDy&3XNT z;rWiO3_t$~GH~(p0B!vX){KlnE&&0600J9u=LJK-`Xvl!ftE6`13h)`=zE3}Cu|tB zec~AY{r!nzGsq(5e40B!rUBSe~!0_u23xkZM2ZNxTJi{Nb-(fcY z$8Z5a05QSh_0ung&3Dc+d}sLkpMeqRmES+VGyMAT6RZiO7=%&10dWC905Kt@C^1fc zpksgxU{r&n4D958$WH$U_YNprKmZ_szy@$YBH+!d`wXub{z44^CY-;}ct>_NvMWFU zAb`N>fEkE?F)+OQ{SQd710#`*k%6C=he1eykKrdfGtd?PQ8e=Ka56A6GjoCT0t65X zB!PlsQ1Jh625yEQj11S0fBw4p;iPi{+r@#g0C6hFNw6Hj$jHQS;J|@%Sy|Z(009K{ zTLMrp0*K=o7))lnbKXwnWDO@KCxY|>1P~*o*%=_f0NNj6q#`1axBvhE07*qoM6N<$ Ef}@mHaR2}S literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/_down.png b/workflow/public_html/images/documents/_down.png new file mode 100755 index 0000000000000000000000000000000000000000..f3bc4cd0932ce493d38a058dabf802a9c111277e GIT binary patch literal 912 zcmV;B18@9^P)yS03d+CF8KfNza+!=KOzi&{{Q^>^AGQ@-#~T${xUHB{Lb+I*LR?i>_Xk3g-D0RjkY03R>=HeDStS)iitj6ePei}15C-2C>F;m6nS3_pSR z``7;rJY1{{HbxQ_U;g~t%fZIXdE?pV*FdeB009Ixfa5=-P+O6;u&$~g!>`|e7{s_4 z8IB(Q!tm?+Payum@czR;21!9Nh8fM)?3`?jGH*ZsVF)SO4-N!?00M`>tCydXr!Bqo zTacHHVdJ%b4ADzIF>Jf^g@F<1e3m~y84g~4$Kcg)iJ^1lT?S!Z7KYiYZZbT0@G%pl z7a)Kjfyl;uV9omL^OkM7$>6BQ3Jka}47Zn{lswc@*9R=D^Z3+ z=if3cT6=3P12fZlkXC>IVuGfgKYtmS8VWm)-(mmtg`vTNo8kNC?+jmn`0JN%3?JWp zVW^3eV=&baU?}Q2`}F&-Ka~vZOg}+d0RjjSja)1*UOoFYj7?#gU7zO4wPMSq~h4HU(%) mB~T6{>jDH2Bc<6HAiw|t4?BIRMtdj#00002_# zgct*}h%f_#pa27dtPHQAy=_x(N2l@WS5Ly(85pv-nHl7N{beWy2q0#w|Gx{r8V7TH zaCKn#^!NdT*q!SPtj``Z{Cxa~;V%fke9pl5wu+w1&pJ3rCWJN<)L~Reo6R zKL3^gM-0suh(zW)UL007Sf=-V{~`~d(A1pol^Iz9lo z3JL%d*wq03{r&(43=RPQ@B07%>!koIcrXAQLk<7{>1Y76!z=*4=?U)wh*^q(K}?pB z#ZTNXijjwxk>NYg$y};R4F65d8CdM?8J@E9FnoHuhQYDHltI?&I|IX`r3`EPzA{uy zy?6W8ub(jh0RTY&zW)OC007GV^5OUYbx;gJAb zY#jg@8`S{&#-{+0bp!uol>x`!`~X7$007AXhz02CYwy3md;aV0ZDkfVQwCvR3@|hP zWBB^!4a3I+oeTjn5)2%l_A|WQf0dzSD*M057k;n$%kVD|sQCvd9RLIn(^UqBf6xCj zTw}a_p5Z6Zg=&+3?Cm~XK-|~VBom6n&I-&YYf}3WidPzaQ_6YSh13YVa1C`29>OK24{C0VDvNS zAg4rt0Ad0PFg#~q*!ktj%|EO_KLZmQ!-HG58NPk_&v51u9|KFoa)$7hi40~cd<@3M zhO8po+&0Jt00a<&C6F*>U|_1{;(d8w`Og36ftlmVm;e9o{`&v_J`leG^1njy(_44{ zTdJw;V+18(MhFH7AePTS4ltJgJ^bbxK7jKY3j+fy zJA>SthYZ?(eyd($WntrIW%~t^0SF+Le^8g)W?AOZ8JQRv v7(q^EW@KamYGHZy@BdaH-3to>fB*vklxS9Zpn;@f00000NkvXXu0mjfLm=MW literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/_editcopy.png b/workflow/public_html/images/documents/_editcopy.png new file mode 100755 index 0000000000000000000000000000000000000000..b7c938a999b0e8490cf7d69ed9a6fd42ad580731 GIT binary patch literal 730 zcmV<00ww*4P)p!5HKmQ@@KR{(% z91K9a|NjLDAeR3i=d-dg{`>j+$M3&?feQbl>ShFCMuy)&;lCgZG6;x&gA4|$1qdJ( z9&XM$5nf(PW=1BN17~h9ym;}P;TO~;VB3If2NM+rBMn)GU%w!R{DT_y;oE-(fB<5N z3vjHeOmb)c1GN3)r>_h^X8;3;5o`bx6BEPTCvO94KS&2SK!NH30*D1gGf?msR1t^`Qt<;AdS8D12m6}= z>VFsp2>}EU3$o21TmQg98Du<^4~nS242Y@A0@*;l00G3ZSz%KR{cV!Q%gc;l>C|`)5v`y9W?p03+98#-LdpAOHXW M07*qoM6N<$f-s^ilmGw# literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/_editdelete.png b/workflow/public_html/images/documents/_editdelete.png new file mode 100755 index 0000000000000000000000000000000000000000..d33c344545a9bba40df8bf3defcc44197e245274 GIT binary patch literal 860 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 HqO<-3E_Mup literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/_filefind.png b/workflow/public_html/images/documents/_filefind.png new file mode 100755 index 0000000000000000000000000000000000000000..6dd1931589b453f6cc9772fd1851d8705d6b6631 GIT binary patch literal 813 zcmV+|1JeA7P)lXvaa)1B=8vtU6i;3jw7+Lm8D5$Z@i10EnF)=bcefw4K z$^E-CUfjQG`svfBbfD6|R#sLFj6lo3FG$G6@;ee>>~6i|H^5OY8c00W#fi<*1vzh{0&qu3dB`V0{{XDY`}(1n>S9M(9!zw#!&`A z#;*+0{6GVMSeWGp!`o{o8NPge#o%jgs54WT$qnQYpsyGNpauX05F;oJfZ`Pdw6!$j zynTH0RMa&!n3$Pa9zVGEY{&L(3qnPBl_DG6<9Xk0`Fl3`LiD4@pH{vDsxJWQ1qdJp zEJ>M}osCtQlY?CgW>F{;gVK#SmgoOZnEn5J%EtIXaWQXAO>Rdf)WFR;gt~f zXaA3z{{L{q=l48y!32MgJH;P6J{fgP9q~VFZc)|H;72^ba6_ zzy{!Q_dl5Ce^53^8IaA$3^o94IzRxi;Bw+WDE|KsN+Yp<0`Vu1n}0Jf00a;Vt^kAC z3blygFA)Fy1C(H5VE6{4zJg2v@&N*f1*fxNP6mR%e;F9Q1Mx3bU>E=m`1b=83_wZ7 z{|o>D#DcCF=G6bt00de3iycSKP1Po?_E}w4DVYfWQVYG9vjMNc;xkUqIde zfHr@9{e+lh`@mQ&o0F9`JV!V;IESmyb`|{*f^ds{P=m1VZm{oFM5AIa03Jo*nqd+ff_)8 z3e^k_3!u#Br;ixEo?5}c%lV6egO7(n+)ou4iVqlGZN9=_>+@MeOpd1qAb^+{kOJ$^ zKM4K}#s8Su82)l_G5q-PgW=!zZ$Re*ZTkL`;V)3p=eHcc|9<%Q1t5UHE?{M0W@Kl8 z_?hW1#Q7kD*rg>H*mz13M6o#L3&dxpgZj+N}YI94I;78I++E{UB5Q7s3(LqI_zo7mCC!L7kxHAWi90s8Z zf`}qI5d>QT))+9*f&EgOQgfT!v)9^tF9-Mbf@xf{&D!s?-~GOsnel(~>6Q1U&$L<# z$3|SU9LQ&#%TI=2Q!!aJI68fKX7SC<>@eWxuRePJcb5p4kEhXEl(6%kZC zD#F8uZNB{WI(zL-?}j1XqavdKPdG>^)+z!(mVt^V#?ar#7*X+%OL-(9hES{ct{M;# zVu(ODtDuUAr*Kjn3GgBv)yKhRT|f+AUd-75p^jcV7U(c(m8f!i?Ij^bvZ2iBc&mLd}Cwdz|4x2QnlalV}lb5Y&Gui+_`05KC{Z=@*K;rp5u<)M^(BGR4_{p zz^$#Vk!4u`s=Ai(lp>7@$K3dNPL=05QMCAF^jESnL%krrCWe5enD;}>vaAD4deLzW ziFm8c*2)!f3*4)(aX# zv(LZ5%yQ>kXK8+7GH;B%(p-As(&-m3-h8b47tj%XGDx%5<^TWy07*qoM6N<$g2bv> A%K!iX literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/_fonts.png b/workflow/public_html/images/documents/_fonts.png new file mode 100755 index 0000000000000000000000000000000000000000..3aab3bd2dc302f50b314d48463dbba548411b40a GIT binary patch literal 892 zcmV-?1B3jDP)#5iWGw zK;A|7GC%+^G5iLSApDnsPfC9xJ88p_dh(wpl6}U#2~~F2A0qP+Whmstg^D|F&8hNWnQuV z3q*9Kk23uEuLhC^2q1_HfL@T0lnnd+?I+`!b!!;JRm2#$HH55yGJFhj3=Cqz5}j4a zb;dv6{$b%_;$(KpbW>vxVrd5%01!Y-puhtoAKd3p2d?@P^^vKL%!?0UQ7U z#PT2Ld=XKx;GfL@nGVg}_V3$=AHP3+e9I=;gbR_f11Oxy80s;a6K>)u010q>2(pFnj82t_X z0Nw584EXi{_YzANMhh$d1qCDn1n}DXO#t}-2p>Ng2>u%c1^y%e1p^)X0QUL-4fxXf z2m$~>0KWeN3M>+XN_rJ;^5DgN)q2ZN z|EAt&1z&5w`m%mvX&4t+@c4Ki)zj^n9Qtq}u-Kkgm|S+sG2Fc6RK?X36?YJhP0dA}?VOU?JP&>G6klO2uGz08Gy=gKR?}h(b{K&aenodIzi% z2f@MJp01+RY|(6BJziiDpcm1+C)f4BSg6zCdpJmKRiimi){G4(q} z1^PxxRYp%IvSXi?q6Z{WU1=c||G9fvjNOV8M5eGC9+9=$-Km*DQ5AV*WII_(dnpARZKp%77uh;KZ$z~72R!)*N`!~x=0M8DAMel@xO((;7NkGYln^j z>m@53+D`)q@q?T2z|AfKr0Wq7@&V%3vEWE%IJj2*@I~|AQ1|l-SXw1vg>V7oa|8I- z0PP3HCDVWP3>La6dZtL>>2W$NTXeTeE3}I*#OEs`#HLvXE;&}!k}!JOU8}8G*^*;= zPjSv0_%M5yo+6j0Lw14m9`2dn-mf1NjIPg)Vw7)%a0o9zj^>|q#+Vv13MJSTT;}7h z4Zfq*P7G=k-K=j!InVUNj9wh!)4I~ern6^GUXtfu4!SZ`QB}@5t|WV`n%8=*ErSn) zGjYM$*~Vxc9q@=I`#Q~!`<=w&Se+$ud=Pk1O*Brwau1*M?WFKRth>8iTZJdIQgn~v zCzI($b7!BT>3&ZqyhH4&mz1-ow|8KFVjY;l(ti5lghhYge-hacl;-uimIqemZ0Qjj zBEs2%Kv-FHfq7&Jo><&)%Bjgdi{^SdvbB+` z{s9&)87BY$ literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/_home.gif b/workflow/public_html/images/documents/_home.gif new file mode 100755 index 0000000000000000000000000000000000000000..3b62135e5d9f1bb055271cbf6288751254a0696d GIT binary patch literal 1141 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/_log_error.png b/workflow/public_html/images/documents/_log_error.png new file mode 100755 index 0000000000000000000000000000000000000000..df63d750733139e986ab000182fce948538e8386 GIT binary patch literal 1360 zcmV-W1+V&vP)k7RCwBA zWWWQ`7#RG4lmieOsA*_0F#P||aO>txkkkbrJ}`@cVIwZR00D&4z-lR}`+Eut|Gz$T z=>PvGPyYXZ`}Y6;H*fy`zjyEd>+ReB?@3PnUo9+rA8I)U00_Xv9Mb>*!T=DIfH6Gc z0TVS*lEOez6%U1lF#P!UgK1X+q<3(KIWIg0m>rnbKovx&ITKI3ueAgaBeJ2~{QL(B zXUs5=wX|el`1zB8;qPAthChEGG%_1m?AI@bN4s}3Oqe2 zkB>oCL`34`g$ojAq2Ue?K+I6r+WRCXPO$RwLNRpjiWLl>o<3!e;N?Xz^uqDu3|G&b zVNl}YVqkdtmf=6p0)C(me_g+BAoSpVfv%Nz3J7=*4hmP07a18D_MSV(V7Yub1DAjRIGBztSir!r zWC;To&{E-s1_oIJ1F-m;2M-vYsH!sP0K*&@Xkfe*hz~I^r~m{IGcaruJbZmUBwoFO zL<$h|v9K`Q|M!nULRS}T0LY-nAbvyy+)xnMTv*6paPcAoD=>Zk0`fulI}qPsV0Z!$ zK%k%ykO76^%a;rcKm$Q876Asucc6Hh8P|bgK6m6wG6UAL;nEf|3C}_ z8w`w21`Y-WHGlwO0@4pakpeatmb^e1$bJh97GY4Np#fQYdxpoLNCV3M2J(?H$bx^s z#0d~UV1pk6lMITXKzsq1K82@DK?zeB00+y=nG8pOF8+mP=qpHAKL-dPkii!ogVHCG zp*MlyEezC%Z0O3QB!&wM7or%>JbymJLujP^hSDH|fdP9NAb>yyAGmPm4g&)xCp-wi z83aq13TI_8TmU6KC=dpww4gdm(kw9(5>A}EY2`otr*nt)>KwSC^SO#9%&AHTp!;tEZx5S@1^H2&HDcTKL-#%Okh(O8FMs?3c#B0tX<3S z;Otq3r>9OaFarJ0^y?SH>!(i{-stNy+_`s`;qS{g3|3Oo%)oG}1nC6`Ag}?vGU9>a zzg{!E-@lXL9}_c!ii-;a!_y}W48MOfF#i3^@c+pZ1_c`%2Eo)chI>~oF|hpm!63lH z;|kIX5J2EC;F6LQ{}C<6-z2Ll5$GlS%puM96cI~ZiT zx*3iO2r+OyzQ@4J%EANE3lKnH1O5U1_Vdek21X7xhW|h(|2=(zf$9H0hM(7Of`j<~ zw@(Z|PMl!)`~4dOn}Pzv&s)I2<=_Ix96$hp4fycx!~36#vSQ3nUo$WZ3NZY6^N!)s z&TR~TcW-3)^P7R;>)WpkLe{nnEIfP+|6jgj_|M41@Zs0*Zy>z@0R#?%*H2$;d&9)T z!1DGL!>=R97{psU7+A%n8Gbzf%JA*YR|ak&5eB91Zib&Xt}%SOc#h#4Cp*KlA3qO* z^a2DBI2yYd8TAyj)z4Zhi?V#V^^8Gs9nf}OE{3n`H#7VP1|pxI4+AS38^Z-JFNU8F zZZn)@VET9Q^HkLMm}H? zX8HS%;oqOX44=P#XLt=vjW>XPzwqT-2QYCpvjfxDLZDuN0D>C;3K0)&hU@tFVG7g{{H{=>i6&cAOHOA20Hl&BTyYH5Q7W=2p~pEvok<|0RYy)V;Aj; RqCx-w002ovPDHLkV1k%q%fkQw literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/_messagebox_warning.png b/workflow/public_html/images/documents/_messagebox_warning.png new file mode 100755 index 0000000000000000000000000000000000000000..82d3fc796b51afba587303e9a7e367994bad76db GIT binary patch literal 1356 zcmV-S1+)5zP)=({bFy%Aw*FyYP$r}gAbOVvfTW<$!aOd3=H3XFfhD&!=UNs&mbTo6adt0{ug2~Rtyk8Oay{qs*<+{ zC%>i+1H;p&3=GeoGjIzEGicb`vixRXnD7T;IaUl1Kuox71bWp=KvK*@Eh3VE;oS#@ zpCTd*Kjh^Y7+$|+&@wh*kdTow`^vzOh$|=n0*DC|yEt&IYES?xhp;%%34a*ab#xdw zOiUOU_;?xEe*R|AH!=kIwgPAf6E+tE1Q1q(fr=BwHB`(MUECNLK7D5RtE|khYV&4> zg)3Jw`~VsL;}?U9xHyBnf}GlS28MEwLBG*3KmalQgM=j>_Y7t#DhzC_EG0n0InaXwAb>C;4`^_steLT#oS7v9 z!~2g6463RO>}+g6^LZIKIXD=2*x4Bv+<-n|W?@kL_n$#aT1p5Q9~05d0SF)_v{WF^ z#>SGX9TWtP!T(Z{3=E>847@;B%E-tt2n!1{@bmC6FaU#r!OazzQeH4v@(TdvIbyys zFc>4d7$AU9f&wVesAy^+$b01g!_V_a82;;M!!4DSm1U5VlLNaN47|J;K8Wx!e0z1D zK~qM83mC2qzmUQhAb{YJ2jpn*N{ELmNpUfJ-m#0}Gba7+71UGca@V zFfjf52aHT623A&91|=mWF#h-VFT-zOsmQ9O!|>+7UWVVd?=bL*2r}LM^ws3=|NqlL zz6S^(a0UUo)>}kg#zu}Cm~$UJXZRbF!SF{&oZ;8!&kVnTY4|S?a|6SfADB9R|N6!7 z2WarmFJBn`vU4#Ar)M#||Ne(T=;sdxc|IO(V8%}c1qna^fx?*SKNEA0y0#)S)9uR) zUx2CMn@a%0k9Y4FzW@Hk@E=&LzIyY9Av`LIAuu?Y;lZOv42(b@{P^{o;rqL{4D60B z3|zk64DVk6b0jA_BMTD~D69nl0tl4n^Q6_3)J6Y)V)*{zGs7=84Tc}Az$Eqi2hdO; z{rx)wGdDLwZBrA&&!0aTc!4S7{r9g7-~at#_yx51CotKus%bF1`nQ!q^xJm^HEu4c zv!B0|0|XG`JYJsXwhjgoy!S6Le0}$c;V%yt!%rn0hJVa#44}&8-+xAi|4b|l+}ylC zHUq&=Rd#yGJLy!mErr_4-CL^n}Lsqn_=hIZ|?yDh=qlXO_&X6 z`#(`h24+EE`UHBB^T|VC*!~3;5x{`@`wvWi{QIBbF9<`$7=e+)0*qKjpl!UYK#Tc# z82$k*VFK#oVr1k42q2bE@7^unf8tgo3lBF??B9PN1g2?VQv1iq0A>R<{sX3)zd%EP zF%G0bd>{lS)W0AaSaARS0~7-~j^Y15#_vGe-~Rc#9Uy=hX;qm51Q-A~f#~CBBc3Gy O0000{rJ z{`_TEoMXxm7NFkD@bPCc!!MxTe?U1#4h9BxUIu^wV*2=-@voY(7(;!&t{xW`%Swhn ze*_qKgcumO1%L|wF#P`g@84f`4u)u00{|dg za19z13N0-Y03i|v8N<%-IsX3ut^gAn`2hLv0RH~`HV6$d zSePN$Nr3uh)~|w!pvYnP`0N$K zo%?UsFmQ7;F?@f|!0`K@oCrV5Hf1vtwL46r4BY=dG3;1(`Sq_KKjQ%c2$U+qq+|s9 zz6&WbePd!~VEy`*;my-`yBIjw5*R){{m$^=xeyl@^Lz&{0Y>2_4n6zUke$Sm^XsbBR~K#{b%Fk=M&*#;QaH2;pyF%*Z%%z2xeereZ}zU zIRnGrpP=Nd#404rAjbcn;qA4n3?E;9C}Ut^oCC`X00G3p!^OhP!|;va-pvVuDL46>FQ3<(PI+Gh^l znRsFU<+N9iUiAQ7z7nYGJ3s(2g1ulggPq~e->DjA>dD%+It-jbf(*==Fkeem?jXNKQD ze=#sKGct$>2{3&7%gFGL5ojGy?!(Kk3~!!(W%&D_;T}jUKmdUa5D?=p3Q0C*5SC(K z*f{I#|8u*~U-|d{|6>+b7R%iBa6w)%E{4ZP>NH0JD zfeql`WETJS_hb*OwnwzySEd$jop^l>LkC*&WvycC5R+=i}4&GZ;8n z)&k`i7#JZz2M|E8FeqgB`kN2vXC?+-_S?W1SOWAG0|O^(hlDt{^NZVWCIB_9W#DG} z!SLe`B&N9882+EnU;qdp7HIVK1EYw6fd$C@2bBE&la=AuKYJkw9>W*UzZ_!V;#kVS z1`JdtMn9mu8qj)BJbnSa6Ew?yASDt}Djy?ZZz7 z#(xZ|z`$Gw^r(oAt(LTjuQ9_uoVv}xaDCSWhF6c@%mL{I2q3TlOiYaSs;a^q zVj7|he}KOD@dM;t1_oYECI)e!Oa6kB_-TNNG#~j z;9>gxGe%rqEZ@LUU&Fv!379rG82)_t!LYJ->-XQk|J(=VpI2|be*FCQ%c_4YEK`B8 z^6UTEbOwL`Vu1$Xmw$g5W<0<5a@F%YyOXaRmP`qWGElQNlVZ4j=k2ZEufJLVoy5w( z#|{j6V0Hwh11JCpAg~LV^k)Eb-fy5BC_F)a_$kH4$(E>XBwcXr-n(Nzzy0=S_zBAD mK>L0HqnjNX`#=`}1Q-AXvS|QT0000v@AL+d#DcmD9yq`AaLyx`8UIs(zll4uvm(2?dJ9rs z2LKT5bWBZcU0+_lv`zf!;GJRIH+B7~H8^-p@96=EaGFlT-PqVGl*xGvZ*K%NH$sGkFxEbCMK>(??ACB8RU4LGPM)|nAn+tE=a4nVMqoE-_8XDqiD#iKNuld+)|JN6TuLp7)_U6zU8Sp%#hYit7RZ%9e#tK98D|_*Sd^5W(QhfqeepQjn4@ zEjOyZ|28ay6A=RHFTDc5Wk!`b6;_n{H%g`Cr5q%aNvzJzZ5K6dpb9+M_x;bizR$b9 z&-=drxe7dSHErPK%*@W(+S)~w6N!XaSy^c=l}cgH^HeEin3+S&+-w3W08s#{0O~|k zBce(m5UA?9UKtq~sR?FAI-SPi;v#KsZc;9nqe`WsG#U-^eO~|o5pggWl%Y^aMj{bE i9*@iU`FRv(qFh^0bT2XPWqNb&#lb4fMkQWdHMFoLSa!?cyWd}tS z2PGFrMI}ciXGbL$CnslT7guK&w^UaHQBQRX2=w#-(UduJ?k!zaaNxjyDgnixEQ|~c_6#~ep8$O%#=yX~?ZEs3k3XI& zlD%q^L&WCWFXLq4YV~So-lDNIYU8c96J`de39+#~X3yMxf5LI*z?C9g?>JbFzW@DK zf}@tZs$PSEu}y-jnYX&0k)f-nhP$t(L#cftqjIhI6b=6AwUZ{cGu4VNTwJZx(b=KF zxUyz-?b_L!cQG)pS~Fc`!|V=~{X6*j+uF9*@Si+=T9j>vAm7D$PGJ_#8bOgHrxY=< h^vvvsfs(6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^sIZa%Ew3Wn>_CX>@2HRA^-&M@dak03rDV0RRC004x9i000&M761SU z!T|jV97xdLx^?*S<-?ayVZn#~82+0`ksCLN1tn6PXb~ephT;^86Q`|QIe+R>s$8k= z+&OUd>QSS{a-&U~_rOssm-1$$O*ij}+i6bS%}tSl4xL!8=)|8-kpiV?Z|T2tPAMiu z`Y+NiiuJ5wHQIF(P^g=}P7F(NY}tQj&k_SGHtWy0Q0cZ!NA~7TwiD0s_3O8uwzlfh s5wz>% literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/_save.png b/workflow/public_html/images/documents/_save.png new file mode 100755 index 0000000000000000000000000000000000000000..fd0048ded9baa040b1c04b84cca92550acad6f64 GIT binary patch literal 898 zcmV-|1AY97P)uMFMs&||L0%d|AW9UApQ!(pZ@&+|Lq@y|Mx!xy!-m`f6?aW|CJIi zgSZR;0Vo`U6o5e(2o6=NC;k67TPnoF(0CnomdWR}+}Y*TYj=gwum!e34a6bEszh3= z!9Qg_5-j;~e*pwG;QznB|Ns7DWME)o1UvLUBgD}l>Nil}H_*V}Ob~(JKmlGpK?W`k zuzm)B0AgW)14af$paG0PMQqGK9!Q=Us_72{I7~pU0)`4Wj6lu@0e}Dk8vxV?mSALJ zf(SB0Y-eDC7z8r(H&F8*sH6WgGBGeRL#zb|Ah-*dfU4M-L8kr%^O=DPIDxwV0X6*r zc?B39|Nnu!_Y-I?Cj%2yA3y*>0ujjj`kRsA*aK#UKmY##Z39LlQ0L#je}VLWhQA;$ z03i$WUxq(F{xf{~!^yw`jbDHO0vo{2@}J?wcLs(tS6LbUeES7<^Pj&!!+?SC_b(&` z`~X_;?h`WuhX6AJJ3lZ+SRe)f1Q6H&W}qLx0b`K!=QoB7%dZUL;!F%*zcDiW`~?XM z77j*++Yf#-Kmb7k5$NBaKxeYD{AG|5`NuGK?Oz55Qziy; zeKv;gK$mfHGBNIfE{W8Kmb9!05tU%&_vdFGjGd1eqWv00a=k1&oZ$Yy|!NK66*5ZHhV+bRpY|MBzx zeXpJ~@NlyNT?C9qXd+?)M%h=O&F_E~aC~8Ako(8TcyI5es|*dw3;+Sd2uqUW0)PMm Y07EoBQ)jr0B>(^b07*qoM6N<$g57L=!vFvP literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/_up.png b/workflow/public_html/images/documents/_up.png new file mode 100755 index 0000000000000000000000000000000000000000..184c118b63424218e82ea1a7d8acf4aa7f4741dc GIT binary patch literal 906 zcmV;519kj~P)VFvnKmaj8 zi~&-tOdykhoPR+4yE`w}r0d|mFrNMU!#S#|tZIPb(;;$Ttx(Ls01!Z67cj6h12u#6 z{$*hJ`?okP)uedh1ZRd-cbOPI{a|2dZMA3k`-dU9v+L+fpew2wI9P#}GJ>@N1P}|{ zKoI!*$KJtNxoP?o7lu{0nHc7s{m=0I>ko$S@Bc8gwOcXVx%<9s?b_=X7+Bd>Gq6Go z002(O`0<@$42yR?WAJp7W(bQ^j|Upy3epM?06_r0{{a90{{R;znA6A1=l}Ql{Qva# z`~Uy@_y3f;LcX?f=u)<^LcpoZIoKfq2*hm6EDW#S{A4I=JM-uJ@4p{8IGH(qvOydV z5I|r9-hTMuwr<5$A%VDw!}=|E4={ZD zQ^df`#Ks`R@e!mKAb=nN!Nhp~A2-{51})k~+%V@8AFa|NAck!!IBP)BhO3^zXm_8Gii%(m?$49|OZb zW;TZ3pFT3)TA$Yi5I|r9)GZD8MD=wUe*OB-@SlYVtm!XM;m_}X8Gilz%kYPljo}Ye z?Drp_8lb_q?|)#py^Y%rAb`LIJbU{2f2i9pMq#Ee4BtO|W?*6h3Ict`t|Y*~$jZ*Z z_~tQ?|Br!@k%57Um6?G_RGguB{%3|?KmPp%2q3Tl|5;cWM5Ndm{`E~@_%(SN!!H&V zhPOX|GAK-#$ROk4%D}K8kAZ>Z3j@R3??8X?GBDIGV_@Rq1nOk`4-kL@az_CGgkflk z_rIgK)j>om4vIB)c#tW-FgPxRLKP_&a4IHQt;ZR6S4JCr7{msghaCKxf+v8$2K@fV z1m=GE^M~Onhz8;pKrH?DFF2(CKYYW$`1c(H!;`NJ{~3iD{sLp}FGvT_PXGY~HQ+zP zpC1eiqM^|Y43g>$49v_7O2AMPwYF#Y!^Y0Q>|Vt1_t$rz%|HWLxfuQd1NHBZUtq%l z0tjrtUtp-R{$yadqW*>9to%1{w7vQEp20`p9fRg?b%vEn=?u(33%>)^Fao0@{P%YT z);~aZGBPm$1P~+)7?^>Of#KHY(+tP|u3-51Y15Y7&ct^!*F@3=OKUq0=wYDw;%skUH--R^~+zN0!FaYLCN{s@Ba)x zfldYr0S$oU5wO#NrZfHn1|ri>W`F6UWKN1_5c7PNx q1pohKW%zP`EkFPrquzJ)WPR|5;B@ z?*ves10aA{7?8mK{|pR&|Ndq8^XE5+s{<4Xu(h>yW@Kd2Ha9mH3=0cmS+r;ggNlke z!;Kqv3@=@}qze#0j4;j0%1W}&o;~yCHq?WQCeEMPeeq-O;=Y>DJ?C7bJM1cKpT`8#Kfc+ znwuMd-eLdw^5yf_j~+cZ57e{|hz|qtS(wED0mPV@nf=Ag%z}IU`ZWxCdd3W!H?RM5 z>(-5rfB*iw{p;7ylRz~)fcP8`zX9TZAb&$K2z&qt06_r0{{-3D+1(%@Aua|62LST& z>;NGlApkNmF$fY85+~l?-z6a-A6@zR`vT|Z=>jP!CIRE)~_pp^oM zSxQPW&feZZ_UF%^3@It8pcrA|PfO)|^7JW}wze*(ld}uQ!w2`+{r&yffnme` z5?2q2bUzkaP?VPWYoF)@<<`t>&h8!IEj zPu33%m!JP&c)`fdpe@eApeVt~@SlZ);p_LG44`P^;bCXEbm=@O%3lHm5GWn+Fajg` z*ROvJK*N9u;UB}7Z$B7r{T5)j@qvwD%Z=9zW}+V%JPmjmczHM&egM^Raj`S}`}ZH1 z@EDl^0*D2Yfc`W5{{0tdz#j%?)_)A&fBs?Ed+RR)GcOx38l@Qy-1)(<_}qPl7B_YV zT@_)Vy8l4i|AV6eAb^-)De(92Kfn|S#6UxS|Nh6o35+NnJ_d$gKYuU?etW@SE%k#z zfSZZo+mGL1b^reT0~-JkKwuYuI3U|Wn33@>!@vK385AY|GyMDhjKPHQ8H2wyJA>4ICaUKrgt6 z{bt}};$*mf?*rU67~tdMWw>?gHc;)qUjP9F5@zD!;wk~Ayukk;01OglCPq*Q16_ow n5t{nJq5lC0zI^%I1Q1{V_c>jp(8|`@00000NkvXXu0mjfv|r;U literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/bmp.png b/workflow/public_html/images/documents/extension/bmp.png new file mode 100755 index 0000000000000000000000000000000000000000..246a66cad89f0c60476b4f70099e5d9b865bc628 GIT binary patch literal 824 zcmV-81IPS{P)#KgqF#>U2Y;J|_JEiEkt00G3XW53fS!=L}`4Bx*006X{pzyDx^{`~&K zz{|tU@ayMCpcfb!#KpzH;vkm*1P}|z6cAu%Wn}pKpP6C)MGl5P{BjI@oc|fVe*e$# z>iK_$8>fCUmy)npK4`3>|I6C`Y)nn3^{fZ#4*VrF3gN;B-4UCVHu^EZQ~r5(efB`X=;ynW5^ z^s5wuh=B$Jv$GFSBQp>~3;_Xv0D`-K0ciT)KR+1mpE=I3_4*BlRm(Rq{Qdczff4An zUwbanMJynFYKfe{FS&SC(irC&gU zq@-nmF~G|3^XCt+MwmW;0D>Fv>(?&^4h~KRcMlH+P|SiH_U|9eCa@rEnf?Ul65I`*F&Yk;iZf?#2%p@3!K>#_)u00kUWW0RR2`00adC0Q~p;00RF29|s2kQ4AU)SrQ{EE!f)T?cLJWxd#6Cr`YHK z!37Hg{0IX600RR60ISge00IC(0KWeO|Ns5~{rms`0s#G84Hgw#6D2S<7%x5#4{siA;$d?JdLKADC{AXYS2q2cf%-jqNTp|n%U*9t@ytu@` z@cSzR12a1V0}oJ>kOEK~7+NnbFfe?3!ocw7BhXML1_pishQDmQ4FCQ!{RapjpaEP! z#o|Cue`8=^WC1FC&cN^qsQAS>1_tE-pi3SxF#LMMz`(%|#KH^=tQ-sse7p?*KfVDP zz`y_yKtKa{Ahvz`%m5BO#(zLfj6gOJGyeuUA7}xm6htEn&>PIGKo|1^ee|8-|9>V1 zfB<6o#{%>MH_!z}|3m0MKY*I~fSQ3q48I@-v9LnD$H(xW;|s&Te~b(O0mSn6 zKTv=f7zSLQfPsT-08kS!P#L&D1^`{c3N?TQsGf_D;UC*apcfb!00M{wWC}1|AOZOg zn4%bg-eC9xH2~;uu741(v2jAY0K#lQFE9hc0q9kL0AgWdV+95)FHi!gkQ-zhkp2h6 zzk!Bu0uA7Vh6^ju09G~#%^X=+71%2YF+~~}=y>|Nn@XA5S+Kl$d5vNFrsIDO9J%%8%AI!yKmKD_4^+At zh`)h63=lvJ7D~JfT)=Q-1!4hESTci!xg^*bf|Nyh){1knYy|RSfmni_@% literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/c.png b/workflow/public_html/images/documents/extension/c.png new file mode 100755 index 0000000000000000000000000000000000000000..e237b3f2d5d87851f82dba37c04c06c343c00ff8 GIT binary patch literal 817 zcmV-11J3-3P)_|KGp=4CsInD1i)^n3x#Y*w`2k960d3rKP0+Ab=Ql?%eU?KM?%= z`|m$4@b~ZE|9}4c`Ty(Jum3-P{sfC%zI^$=yuAD&fB+QEF$w@63`5b6T2Scy@95yJ zh}AeIgh$G~#9Eu)2kwoW6T&b{%(;m;)N22W`lB4$IRcTx6F^KL1x!qg4BXu83@j{6 zK*4`N#s9&QFdF1Fuwo`gxVJzCfm{L*Kr9g3Sb&;Y7`}b`!2r_7&d$Q{@#9ypMm9Ex zI4CHXnVG=`fh>Ukl#SI10Boo>Cnts{re9LGBVQeBn}WjEHM9ooCOj5&+z5T7ls=* z?l7pRC@}Ez^D!JfdK#P(fBg6bPHZnKOkyWrisPYi~J zIt&jVJ^_ahJ3Gi5{J`+|1$4nj21P|VV4!~isb&HQAeM9I&V9GAu;2hW5#$O8_y^R$ z1B_ZVa2ojY=Qo3xm@F{J5fqXDh;TM^*_|KGp=4CsInD1i)^n3x#Y*w`2k960d3rKP0+Ab=Ql?%eU?KM?%= z`|m$4@b~ZE|9}4c`Ty(Jum3-P{sfC%zI^$=yuAD&fB+QEF$w@63`5b6T2Scy@95yJ zh}AeIgh$G~#9Eu)2kwoW6T&b{%(;m;)N22W`lB4$IRcTx6F^KL1x!qg4BXu83@j{6 zK*4`N#s9&QFdF1Fuwo`gxVJzCfm{L*Kr9g3Sb&;Y7`}b`!2r_7&d$Q{@#9ypMm9Ex zI4CHXnVG=`fh>Ukl#SI10Boo>Cnts{re9LGBVQeBn}WjEHM9ooCOj5&+z5T7ls=* z?l7pRC@}Ez^D!JfdK#P(fBg6bPHZnKOkyWrisPYi~J zIt&jVJ^_ahJ3Gi5{J`+|1$4nj21P|VV4!~isb&HQAeM9I&V9GAu;2hW5#$O8_y^R$ z1B_ZVa2ojY=Qo3xm@F{J5fqXDh;TM^*FPMeT#sW0|XEY%%p#R|1$hyVBq@q@uN962ZyqXwzh?ol#~+? zD@p+k6$Qxy4ZXw0=JMhDcd!8<01!Z61OEQ}8N($e=3!uGt0rk_sVQ!0#UsYe&A`28 z4a5Iu&lrB*yvgtd=(_)3zA(tLv8g`%{#}%jf#EesFF*i+4UqBhnC84-0WT}i=}c^F z48MV5e?ER;`2PF_!|!|d7=Hf#&F~B80v4c?Wtf>YI2jo&fOs=VFF*i+UGnYCo2zWV zaQM%{#_;{?PllggelYw38um*@7U;Sk4FCT9WBB{y2gA<~9~i{mzhh?o|6lPvPz(eB z0tjrt>uc9HzC3r1feFa__x~Tm|KERrG|&}Vx(t8bzi0RZ^v1teFByKburLT(*f5BQ zi8}(NIYD{>0tn)QPahA03;;#we`aQef1I2Q|A3zRqYE@ZPJ!W{mmdRT*F*+}RT~+2 zHf&~)cK5ag+Ajvu3lKoyF!=NT|D&fzk3G^%PL})s?mYv;oqG(7XHPLO9NN$Dzp;&h z!N`Px;qw;;#-G0!7@0X3WQ@&(*_JL)1!{c=5I|r9fHuE=ee~$TKV4n19Cv|%cIOVm z-;eJZ{=I$6@b}blhW|SHz(D;742%B^zZsbr#5A-RcmxC;fm-(f1Q6H@z$p3k?!o<| zZ?|t}V0Z}(c_v1NKb%|)e^}WV{v0{N@bC9eU;qQ{0>%O`${EBowHUF!S*<{9|Kh`1tiJ!-Izp7#MkZ z)j@gz0toDdpTIZ<8gTN_t5-L4#Ka7legXXo#2^DcJ$}USZSO9I*HW?!&yE~qczN;s zt#|kC-1zqTzxwdu=Ic+N48MQ-#_$yA=a-*9GrauyQx?{gN zx%Pf~^60_u|Nl?32?;-82D%0W00IbX06QZinDg`3ubq2u-t_zW>(`@?KYwod{{R18 z21dr4U*Eib$t5lOjh$bR;s1ws42+-z19UYA00a;trP&!EzyRKibiCBCt;PTV002ov JPDHLkV1fzi*@FN8 literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/class.png b/workflow/public_html/images/documents/extension/class.png new file mode 100755 index 0000000000000000000000000000000000000000..d7aa15e1f12605cfd6351044785d29799713fdf6 GIT binary patch literal 806 zcmV+>1KIqEP)}o05L(X0ND(}pFe+Q`0(Ka zgMfel12Z!-1JEF_8Xg`VuzHYMfB<5F>IX}JFi7LKZ{HZ+zJ1H^^5shgpsfrX92^Y1 zyu4roVBUaQ_8%aC;0Az9V`pav+j!x^1%{tLelUoMi!&%FD8MztTnMua#0Cf;CRo5R zfo%TzmErT3uM8hPePMX}{v!hiCnqStz+M5VL-q#D0Du5uff;c9#tnuC_wO^jef^Sw zmGKY5(`U~ao<6$IAR#5gAR;2fz|GCWprWDzq`AQwVfp|9hy_G|oc;Xy3$S1BT|Ldf z^5rqZyHDR3ZoT=>z{VrY5EC8E@cZ{4hC_!AF&G#afV~CtIzRxizyk2kpWh6+y1EQ{ zdQHH9`wn*MpTD4R;RMS4Wq1vA8OVaWckhC|!otD=b_GBHv49l963qX9{~0*BxETb6 zMHtxGSiuH=`}PCu!e`H(G5i1qEC|48kO2Sz#Dwf0MkYp}&3_pF{Qd=W@^1!Uq5;!D z88CkI=n*(jfe8pK2Lb>A!~%;JSSZ81^c!dhBwa87oy!dL)=zLCT3cI#T?|VT009I} z2b{p@0!7v3%U2j=Wo5y9R#q0U0l$9zVR-T4IXIBb%uK-+ff5(U01z7>fLMU0F@mDT z#>N&LKo1{2ggO}%*9g~HT3UcZAH?S3;sRR&)XD@9KrH9Zo%?QKVZi~CP*ju$M;FN7 zps)Y|W@Z+!Ye0sAk~hdekpF?13FPWu009KDJyA+ZDh;TD6==vmSVn?nXXK;~69ZzF k*RNlHegFRbB!B<|01-yXmF*#f7ytkO07*qoM6N<$g0}cv>Hq)$ literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/cpp.png b/workflow/public_html/images/documents/extension/cpp.png new file mode 100755 index 0000000000000000000000000000000000000000..e237b3f2d5d87851f82dba37c04c06c343c00ff8 GIT binary patch literal 817 zcmV-11J3-3P)_|KGp=4CsInD1i)^n3x#Y*w`2k960d3rKP0+Ab=Ql?%eU?KM?%= z`|m$4@b~ZE|9}4c`Ty(Jum3-P{sfC%zI^$=yuAD&fB+QEF$w@63`5b6T2Scy@95yJ zh}AeIgh$G~#9Eu)2kwoW6T&b{%(;m;)N22W`lB4$IRcTx6F^KL1x!qg4BXu83@j{6 zK*4`N#s9&QFdF1Fuwo`gxVJzCfm{L*Kr9g3Sb&;Y7`}b`!2r_7&d$Q{@#9ypMm9Ex zI4CHXnVG=`fh>Ukl#SI10Boo>Cnts{re9LGBVQeBn}WjEHM9ooCOj5&+z5T7ls=* z?l7pRC@}Ez^D!JfdK#P(fBg6bPHZnKOkyWrisPYi~J zIt&jVJ^_ahJ3Gi5{J`+|1$4nj21P|VV4!~isb&HQAeM9I&V9GAu;2hW5#$O8_y^R$ z1B_ZVa2ojY=Qo3xm@F{J5fqXDh;TM^*3^c3^a+6 z;qRYM3{3wXF?|2=o8k5Aw+!NM7+1~w01__9Kx7o-;;fS5pj0ma0h&%YS{JqI%G0%PqVFp6$}XJCBumBFa^AA^7# z1H<{r3=E1uL&VL0G5q=p@;1Z;009K{0t-8kCGWy;@BA$WW_F+iFpwY-4~#vI{|vlV z3=B&0KpUn1GW-&_|KGp=4CsInD1i)^n3x#Y*w`2k960d3rKP0+Ab=Ql?%eU?KM?%= z`|m$4@b~ZE|9}4c`Ty(Jum3-P{sfC%zI^$=yuAD&fB+QEF$w@63`5b6T2Scy@95yJ zh}AeIgh$G~#9Eu)2kwoW6T&b{%(;m;)N22W`lB4$IRcTx6F^KL1x!qg4BXu83@j{6 zK*4`N#s9&QFdF1Fuwo`gxVJzCfm{L*Kr9g3Sb&;Y7`}b`!2r_7&d$Q{@#9ypMm9Ex zI4CHXnVG=`fh>Ukl#SI10Boo>Cnts{re9LGBVQeBn}WjEHM9ooCOj5&+z5T7ls=* z?l7pRC@}Ez^D!JfdK#P(fBg6bPHZnKOkyWrisPYi~J zIt&jVJ^_ahJ3Gi5{J`+|1$4nj21P|VV4!~isb&HQAeM9I&V9GAu;2hW5#$O8_y^R$ z1B_ZVa2ojY=Qo3xm@F{J5fqXDh;TM^*$AU;i<% zvobOK{Pl-{gZUqWsyGV+7Y7r=x1T_70lfjz2XYBO0KpAlW&Y3b@!Ma9omamx2=lQs z=qqwFFaZsG|Md^U0*DC~IDdfx%T9e@c=wBe z!CaM>fuECs;rY9-4DUYwU=ZN^!*KJ(JBC?%p8>t~kAa2hKimL-0Ac|K5ZHhxZ+|ju zJ@be`O+$g<;(G>$E2l0nT)B3Ofti(!;osZl^65Flv3-Xb{xYyIXqlQZNDA>YJb(Qa=m&@k zKmZ_sSpNTm7{JNOz`(~V$iV#i8^il={}}|i_!;C3tr>3L{luWEp~xVuAkXmc?MnuJ zZYGA`Kv%=O01!Ydz=#H=AqENF{|ug%stkH&Mhx0o5)5xYGcfRr@G(S1dojpL@GyM+ z@R{M$&tD8uLR<`gz%GDT3=lvpAX9+pgn0i*UW1IS{KUVs2%fdmF9;rwHe;AduVSNXwk_Wo0bi%*ys zKL2E5kmCQ%AjS2S!AO*eL0*a{q_C(_mcnu Z3;?bQzDi!$Q~>}0002ovPDHLkV1lBoxtag~ literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/doc.png b/workflow/public_html/images/documents/extension/doc.png new file mode 100755 index 0000000000000000000000000000000000000000..53a675febfb39542b35128db5a2b0324e871cedd GIT binary patch literal 943 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 JPDHLkV1fzi*@FN8 literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/folder.png b/workflow/public_html/images/documents/extension/folder.png new file mode 100755 index 0000000000000000000000000000000000000000..9232553fcd4febac41d45f124c686f4c94e3c8eb GIT binary patch literal 558 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx-l>?F7b4645_%4l#-B;kW_H{*K|hNH=nMtP1@f0LtY^Hlry6PgCT?I|Kn^9j~pu1 z6`nCAiD{&%9^ZcelS&ePYzWz$E?Qopy-uiHZe3|2OpL zURP*az`S5#cw?Id(@b|qHU<`f8x7&{5)$k7rzE_XwW+sJj<1)HsAGC5@9;}MAm{R$be?scK?d7* zFtG?6;SONFSKH2F=<)geegWov{~I^`clZ%sZ){NWgYSEffdfM$Z^d8MtOMa57ydEd zwa)<{rNqf<^N}YmkOW- zDpCv8nv$3$Y!aLgBr;t6^WEOX*n=nKfVc`X14!@kd=I@J{GROf3mG}N`2~3S9_-g( z`@_JY5HKT?aq$x^=9LN4ziTP%lv8MMVB5g7QBlB}d85F@TaF(K7(2cLEzn7B$S7Np tc!VL~-5*vitp#5iWGw zK;A|7GC%+^G5iLSApDnsPfC9xJ88p_dh(wpl6}U#2~~F2A0qP+Whmstg^D|F&8hNWnQuV z3q*9Kk23uEuLhC^2q1_HfL@T0lnnd+?I+`!b!!;JRm2#$HH55yGJFhj3=Cqz5}j4a zb;dv6{$b%_;$(KpbW>vxVrd5%01!Y-puhtoAKd3p2d?@P^^vKL%!?0UQ7U z#PT2Ld=XKx;GfL@nGVg}_V3$=AHP3+e9I=;gbR_f11Oxy80s;a6K>)u010q>2(pFnj82t_X z0Nw584EXi{_YzANMhh$d1qCDn1n}DXO#t}-2p>Ng2>u%c1^y%e1p^)X0QUL-4fxXf z2m$~>0KWeN3M>+X#KgqF#>U2Y;J|_JEiEkt00G3XW53fS!=L}`4Bx*006X{pzyDx^{`~&K zz{|tU@ayMCpcfb!#KpzH;vkm*1P}|z6cAu%Wn}pKpP6C)MGl5P{BjI@oc|fVe*e$# z>iK_$8>fCUmy)npK4`3>|I6C`Y)nn3^{fZ#4*VrF3gN;B-4UCVHu^EZQ~r5(efB`X=;ynW5^ z^s5wuh=B$Jv$GFSBQp>~3;_Xv0D`-K0ciT)KR+1mpE=I3_4*BlRm(Rq{Qdczff4An zUwbanMJynFYKfe{FS&SC(irC&gU zq@-nmF~G|3^XCt+MwmW;0D>Fv>(?&^4h~KRcMlH+P|SiH_U|9eCa@rEnf?Ul65I`*F&Yk;iZf?#2%p@3!K>#_)u00kUWW0RR2`00adC0Q~p;00RF29|s2kQ4AU)SrQ{EE!f)T?cLJWxd#6Cr`YHK z!37Hg{0IX600RR60ISge00IC(0KWeO|Ns5~{rms`0s#G84Hgw#6D2S<7%x5#4{siA;$d?JdLKAD8!%Qr6SEBqWz75 zPeF=-Lq>w(&(D7h00G4E_dn3T%s`vDfd2anGXNNm41XEEd}3v|e)KJaS&R|GxlOki z1hwQDPRzZ)AR;FM3~Uw#CJr_RfB<6o_m2^%m>uGUe?TWQ0yX~!x{Vnajo)|}-oN<9 zaPRCZhM(X5GyM9^!k`^w#-L=Y!|;poC(w~Q82|!^g^i7s2^g$E{{n3X`UYqU5CQSu zzYP3xq6{_}Rt!%rK4x$%_hFDSQDRVb2ZkAg2*azp7l97_&jb)a%#!TCGC7!k@ra5D zFtG4SF)#qr0s}M96~BS5VdY^Ew-9Ggbunb%m68K$z+CYpa=8Qwm4$#81lMTY%* zFZ|hm^wzVR&%Ph}`j25MKmakCEAld&yZ@O1=xYXGDzH})Vu~~{(DC$jH s1SyO1tQF^C*$Cvv0ojK3jhEB literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/h.png b/workflow/public_html/images/documents/extension/h.png new file mode 100755 index 0000000000000000000000000000000000000000..3523f98bb6191b0c57ade23f21e924af4cb07a5c GIT binary patch literal 776 zcmV+j1NZ!iP)_|KGp=4CsInD1i)^n3x#Y*w`2k960d3rKP0+Ab=Ql?%eU?KM?%= z`|m$4@b~ZE|9}4c`Ty(Jum3-P{sfC%zI^$=yuAD&fB+QEF$w@63`5b6T2Scy@95yJ zh}AeIgh$G~#9Eu)2kwoW6T&b{%(;m;)N22W`lB4$IRcTx6F^KL1x!qg4BXu83@j{6 zK*4`N#s9&QFdF1Fuwo`gxVJzCfm{L*Kr9g3Sb&;Y7`}b`!2r_7&d$Q{@#9ypMm9Ex zI4CHXnVG=`fh>U*7lCXB$%E8`41gHIzyJ_HED)#s z2gWrUIHW;-`}5~F$gyBU+1Xiv1~7s(vamob0%?Tl0|+1%Sp2fGGJ~B83NRKHc4$CB zLmH^@$&=R%A3l6x;N#;2s`>yn6a)YQhy|tyfxVWIHj{$A~hz5D$fT zN-7Pgj`cqzBcNnuSV{zi6D;un`7AGAzWn_|KGp=4CsInD1i)^n3x#Y*w`2k960d3rKP0+Ab=Ql?%eU?KM?%= z`|m$4@b~ZE|9}4c`Ty(Jum3-P{sfC%zI^$=yuAD&fB+QEF$w@63`5b6T2Scy@95yJ zh}AeIgh$G~#9Eu)2kwoW6T&b{%(;m;)N22W`lB4$IRcTx6F^KL1x!qg4BXu83@j{6 zK*4`N#s9&QFdF1Fuwo`gxVJzCfm{L*Kr9g3Sb&;Y7`}b`!2r_7&d$Q{@#9ypMm9Ex zI4CHXnVG=`fh>U*7lCXB$%E8`41gHIzyJ_HED)#s z2gWrUIHW;-`}5~F$gyBU+1Xiv1~7s(vamob0%?Tl0|+1%Sp2fGGJ~B83NRKHc4$CB zLmH^@$&=R%A3l6x;N#;2s`>yn6a)YQhy|tyfxVWIHj{$A~hz5D$fT zN-7Pgj`cqzBcNnuSV{zi6D;un`7AGAzWn$AU;i<% zvobOK{Pl-{gZUqWsyGV+7Y7r=x1T_70lfjz2XYBO0KpAlW&Y3b@!Ma9omamx2=lQs z=qqwFFaZsG|Md^U0*DC~IDdfx%T9e@c=wBe z!CaM>fuECs;rY9-4DUYwU=ZN^!*KJ(JBC?%p8>t~kAa2hKimL-0Ac|K5ZHhxZ+|ju zJ@be`O+$g<;(G>$E2l0nT)B3Ofti(!;osZl^65Flv3-Xb{xYyIXqlQZNDA>YJb(Qa=m&@k zKmZ_sSpNTm7{JNOz`(~V$iV#i8^il={}}|i_!;C3tr>3L{luWEp~xVuAkXmc?MnuJ zZYGA`Kv%=O01!Ydz=#H=AqENF{|ug%stkH&Mhx0o5)5xYGcfRr@G(S1dojpL@GyM+ z@R{M$&tD8uLR<`gz%GDT3=lvpAX9+pgn0i*UW1IS{KUVs2%fdmF9;rwHe;AduVSNXwk_Wo0bi%*ys zKL2E5kmCQ%AjS2S!AO*eL0*a{q_C(_mcnu Z3;?bQzDi!$Q~>}0002ovPDHLkV1lBoxtag~ literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/html.png b/workflow/public_html/images/documents/extension/html.png new file mode 100755 index 0000000000000000000000000000000000000000..f56567f11223ed61f143d8362429a85037c596ff GIT binary patch literal 951 zcmV;o14#UdP)$AU;i<% zvobOK{Pl-{gZUqWsyGV+7Y7r=x1T_70lfjz2XYBO0KpAlW&Y3b@!Ma9omamx2=lQs z=qqwFFaZsG|Md^U0*DC~IDdfx%T9e@c=wBe z!CaM>fuECs;rY9-4DUYwU=ZN^!*KJ(JBC?%p8>t~kAa2hKimL-0Ac|K5ZHhxZ+|ju zJ@be`O+$g<;(G>$E2l0nT)B3Ofti(!;osZl^65Flv3-Xb{xYyIXqlQZNDA>YJb(Qa=m&@k zKmZ_sSpNTm7{JNOz`(~V$iV#i8^il={}}|i_!;C3tr>3L{luWEp~xVuAkXmc?MnuJ zZYGA`Kv%=O01!Ydz=#H=AqENF{|ug%stkH&Mhx0o5)5xYGcfRr@G(S1dojpL@GyM+ z@R{M$&tD8uLR<`gz%GDT3=lvpAX9+pgn0i*UW1IS{KUVs2%fdmF9;rwHe;AduVSNXwk_Wo0bi%*ys zKL2E5kmCQ%AjS2S!AO*eL0*a{q_C(_mcnu Z3;?bQzDi!$Q~>}0002ovPDHLkV1lBoxtag~ literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/inc.png b/workflow/public_html/images/documents/extension/inc.png new file mode 100755 index 0000000000000000000000000000000000000000..b0afbd529f9689bc8cb21770b68fba604e3f9944 GIT binary patch literal 980 zcmV;_11tQAP)GFShdHF*C0Vo`U6aYXNhDA{j^#5NKoSkkxwNOHu zN0J-|vexpbvG=(g6DcryAuyO6nKS1?x~a?;KrB%GK!JY@tjs`-zyCAbe({6h&Bxyi z92~3+|9}dafQBoJaxieRF)}c-{%2rgX9BASxdb49;0CZV|7ZC0{V&6|i=P?zfeJL` zc^Llx{>|{{_J4+Zj~Eyp{(Q|K&nLye$il>+Zt;tOndLv&1pooW0t=kKK!cW^c+c?l z$3F%KI|-ok|1lgn_=Vxool^`yemww&CNsk$b^(S*cV96mUAAD*Gyey62|xg`00RhY zz>~MX7`B{!%%HBRz;NdmE5oT>ml$qt`^3P)`iOy*hl@d4N{`{?s|yTozJ6k0e)ow% z{_}qZW?+l}1Q5$VXw-fA#RzonU4~BuOQH+JPaScF);k(5@cXES7o>$ z@rB{3=6{A)YMcx&fC1?nqQ+ojqsZ{*Hv=$$|1kgr5DPG-L1~CVg7-gzm!&F$zL^n& zww46L+s_OP{6Yc@QL!EjGE%$@Uq60j`1AZfgOm_E!?&-$z|qJ6jADQQVgZFDFr5J7 z{y#&swIIWR`-}{148Ixpcv%=&m>C)PVPVjh`pxk9+aCrtV6x=nW@TUmhWOWCe;NLR)dN!` zF!n(D00M}GnVFf9g@uKIi;D|l5YS*opaNicF^CEQ6#@l*|M>?_d7MlTjhvjEU<}M? zOaKAIa_-!@?-mvo9KV674wfb$u3`Xt4dzz{NOlEdklM?aFEf1p{P`C^05NiNb0REq_)7c}5)q%{d>qXep+UPv3vjM;b=cvjd@nCf&o16xxUcvC zypR*ti029H>DL0JW>IEWp5uj)iM03Qz1-$TV_yIh=dylzy_s@Y7 zmnRPVM}yt`TH#5}$|nSK=K?T30RL0)crozJ2w~n|9e_nI1c5{X0vrcn1PMY!0*Hk$ z-PZJfK6m^Yl_ts|ByI#MTYV#HDK_+>F{6_Ol@oyzn$hvY$~@ z>A?=G_jwX-8#Ex(TWUJsvy{u@&Dku4y;HHF-gRf(g6ce_bYR9W#?!hJMd@uGlz*X5 z6N9a4ZE;w=&%$w=q6u?sMo3VKO#MbV8!|9rLX&*Np$R)QAEgb1bS1$V6~6jTj3~Xv zhxWXyNTK$J2@1Ggt9J^+@w#{%w@^4v9VSb7xv5l!OzTBv&>5NXAlLA5G8$~PE17Yw zr)Yd^cU9q}6!i^j(e<3NyyHVHT}{bh#o?XJoAWg>piFear5wbuN+k%1?ws$)fmy{H z^2}$0j(7)C>AKy009`HfDkYojDxtVisXn-*%Uki$D-~5ONjQ(_B%+(@f@bY>BNlZO zup3KPB-qaUbhgVHn85K7|7tWmSeBA>P_G*rjm#y6Y2DEAK3&PwrfSzn<688?t{i!G ze|c5Wl#1EQIlTU~NL&NIFu|Ex?T#HaT4&m+@}m{C<(2Xe!>KGb=sV`J*Cry_;!*>V z^{e5^=ZzJvKaO2QeY&P>ti>E$MiFun1l5%%PR#o;AhR9w=r6_+gPF_#S8~9Vn2MIIlmythP^Fkg)eZ-Lx5pmOQ z@3D3=r`iTGzA8Vt6D6^=t~Z^|k=->Zr7Sz4;Grp%N_FA4)$&o+l3oF++~k*=5n3el=^~=u_g1H>%V5~oa$;+64y@+dztlDtDSE*Ki>Ec}9`v)wo%;;pd1x=Wx+Q5R&F@EYviHU`_o}N3+ zXU?2n9&f$X-qqC}80nBz?L3#m8H1DdI+1KIqEP)}o05L(X0ND(}pFe+Q`0(Ka zgMfel12Z!-1JEF_8Xg`VuzHYMfB<5F>IX}JFi7LKZ{HZ+zJ1H^^5shgpsfrX92^Y1 zyu4roVBUaQ_8%aC;0Az9V`pav+j!x^1%{tLelUoMi!&%FD8MztTnMua#0Cf;CRo5R zfo%TzmErT3uM8hPePMX}{v!hiCnqStz+M5VL-q#D0Du5uff;c9#tnuC_wO^jef^Sw zmGKY5(`U~ao<6$IAR#5gAR;2fz|GCWprWDzq`AQwVfp|9hy_G|oc;Xy3$S1BT|Ldf z^5rqZyHDR3ZoT=>z{VrY5EC8E@cZ{4hC_!AF&G#afV~CtIzRxizyk2kpWh6+y1EQ{ zdQHH9`wn*MpTD4R;RMS4Wq1vA8OVaWckhC|!otD=b_GBHv49l963qX9{~0*BxETb6 zMHtxGSiuH=`}PCu!e`H(G5i1qEC|48kO2Sz#Dwf0MkYp}&3_pF{Qd=W@^1!Uq5;!D z88CkI=n*(jfe8pK2Lb>A!~%;JSSZ81^c!dhBwa87oy!dL)=zLCT3cI#T?|VT009I} z2b{p@0!7v3%U2j=Wo5y9R#q0U0l$9zVR-T4IXIBb%uK-+ff5(U01z7>fLMU0F@mDT z#>N&LKo1{2ggO}%*9g~HT3UcZAH?S3;sRR&)XD@9KrH9Zo%?QKVZi~CP*ju$M;FN7 zps)Y|W@Z+!Ye0sAk~hdekpF?13FPWu009KDJyA+ZDh;TD6==vmSVn?nXXK;~69ZzF k*RNlHegFRbB!B<|01-yXmF*#f7ytkO07*qoM6N<$g0}cv>Hq)$ literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/jpeg.png b/workflow/public_html/images/documents/extension/jpeg.png new file mode 100755 index 0000000000000000000000000000000000000000..246a66cad89f0c60476b4f70099e5d9b865bc628 GIT binary patch literal 824 zcmV-81IPS{P)#KgqF#>U2Y;J|_JEiEkt00G3XW53fS!=L}`4Bx*006X{pzyDx^{`~&K zz{|tU@ayMCpcfb!#KpzH;vkm*1P}|z6cAu%Wn}pKpP6C)MGl5P{BjI@oc|fVe*e$# z>iK_$8>fCUmy)npK4`3>|I6C`Y)nn3^{fZ#4*VrF3gN;B-4UCVHu^EZQ~r5(efB`X=;ynW5^ z^s5wuh=B$Jv$GFSBQp>~3;_Xv0D`-K0ciT)KR+1mpE=I3_4*BlRm(Rq{Qdczff4An zUwbanMJynFYKfe{FS&SC(irC&gU zq@-nmF~G|3^XCt+MwmW;0D>Fv>(?&^4h~KRcMlH+P|SiH_U|9eCa@rEnf?Ul65I`*F&Yk;iZf?#2%p@3!K>#_#KgqF#>U2Y;J|_JEiEkt00G3XW53fS!=L}`4Bx*006X{pzyDx^{`~&K zz{|tU@ayMCpcfb!#KpzH;vkm*1P}|z6cAu%Wn}pKpP6C)MGl5P{BjI@oc|fVe*e$# z>iK_$8>fCUmy)npK4`3>|I6C`Y)nn3^{fZ#4*VrF3gN;B-4UCVHu^EZQ~r5(efB`X=;ynW5^ z^s5wuh=B$Jv$GFSBQp>~3;_Xv0D`-K0ciT)KR+1mpE=I3_4*BlRm(Rq{Qdczff4An zUwbanMJynFYKfe{FS&SC(irC&gU zq@-nmF~G|3^XCt+MwmW;0D>Fv>(?&^4h~KRcMlH+P|SiH_U|9eCa@rEnf?Ul65I`*F&Yk;iZf?#2%p@3!K>#_21sUuR?G(bh3L{Ms8Rl;!E-7{YN~wf7)rs{@aV`wgbB4NWyaSUH~UTT^xZAe)TY z-{}d9imUd_6j<;^km0G=LemAie{YKsU4G(z-)XyyVhMF#%Q#mz->!G&aZ4xqv+hY% xU%BzTxGrD!uG=#mLSN5nlkx6bZW;8E;o&Ta+&wo>0$s$w;OXk;vd$@?2>`AuSnL1* literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/m3u.png b/workflow/public_html/images/documents/extension/m3u.png new file mode 100755 index 0000000000000000000000000000000000000000..3f1bd5692bc9431f725ef9adf89b34f7191a572f GIT binary patch literal 1040 zcmV+r1n>KaP)1B-wX!yg7&28RFt8Gr;3vobKSNw7$3NbZmk<+3@wb>f15JTEdBOiY;= z&Yk(k@ctbGPy+)%05LIO07eM)`!9pADA$}IlRwVcz9Q_}#vaKGKmS-TynFSJfrB-L z;U5DJNEtu?F=1-`2Q>LF1D7CQURJbztg<9CgNP6tgO!CI3j-5RKf|r7h73%p=ra%9GF$f6oG3cs^GcYmn zNi&Er_A`9{a*RQS)s=yV(H|gyP+Y*w2(ScscJNPwT8;rs6c45ADc44;4BXAoo50tf&>0KWeO{r&wP z1_~2C4i6PSBOoq4PDWlP_w)e(@A2;d3=0zg@9*mX_V)Jx4h|0h3JC`a0Pg_Y01p5X z0O$Vw00;pC0*J-f$o-g^p|hlrpc13Bq$tCW@BbKHy!;AO%*mjjpvJ(@FTn8R$rA=$ zeHjKu#(&HVEDT?PG0X&nte{W_2p|?O7f%UwWpl>YZ-Cza@t@)6?_Ug}qCyOuK=0nY z`(_PPRy<@M|5%^TMDy#Tsd5{RDzQ-i#Ss8*V$ zhAY3LqXh#y`%7RH|7Eyv@jSzS=D#cqkN)gq;N@atc=`7a!^eL;00G2+186ZZah~#U zFZefk@}mE1*KPi{%p7Cr`LiMb4{Oj#g>00D#-v9NG;IXV0N@be4)4@~Mu zzJNRCwBA ztg5Oy?cw2J%)r3#9|#!G0V5+L3ZIFIiGhucjq$*N1K(R(S_%LHh+)T$9Y6l#0RR5| z`~UavUoigj=gA$?Z{2_n8G{~7S4d1_iXW-!AV1Rj#g@pxd5lAh_B>(}$0^hYKmf78{KCu23p8DyK~`1{ z>`W#mMg~?^HU?2qF$PstRR(^3K2V%6aB=f6z`P9t009IxfB|G0kfW%e$RHpn0QBE) zhX4QmgPr~N?{A5 zfCBCNk8fag!XhFJ@7}!y8vqbM;B>&v&BYL(n8EP*^A~vhgE1&kf&BX)LW2zA;^bst zWnqSU10aCFVE{@LzkdB>;N)Zn+X_#4|DbG;C^Uus{{0IWX6$e^00G3p%*@OPiZ(7T zE_iCgmYiX1W}u5XIk|wC6XY!>fB<3vroQhM78V?!G>)9CVWEu9hvkRMzy$UA^XFdx z0mKN*7>QC+QfWYWR!{~+&&udo93%$BEU#a`{`&s?`$+%+1^{Nf#1UhAZGZp(002ov JPDHLkV1iWiRBiwO literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/mov.png b/workflow/public_html/images/documents/extension/mov.png new file mode 100755 index 0000000000000000000000000000000000000000..27ddf385e4d62ba76e8edfbd139c14c7b0a122de GIT binary patch literal 1069 zcmV+|1k(G7P)rquzJ)WPR|5;B@ z?*ves10aA{7?8mK{|pR&|Ndq8^XE5+s{<4Xu(h>yW@Kd2Ha9mH3=0cmS+r;ggNlke z!;Kqv3@=@}qze#0j4;j0%1W}&o;~yCHq?WQCeEMPeeq-O;=Y>DJ?C7bJM1cKpT`8#Kfc+ znwuMd-eLdw^5yf_j~+cZ57e{|hz|qtS(wED0mPV@nf=Ag%z}IU`ZWxCdd3W!H?RM5 z>(-5rfB*iw{p;7ylRz~)fcP8`zX9TZAb&$K2z&qt06_r0{{-3D+1(%@Aua|62LST& z>;NGlApkNmF$fY85+~l?-z6a-A6@zR`vT|Z=>jP!CIRE)~_pp^oM zSxQPW&feZZ_UF%^3@It8pcrA|PfO)|^7JW}wze*(ld}uQ!w2`+{r&yffnme` z5?2q2bUzkaP?VPWYoF)@<<`t>&h8!IEj zPu33%m!JP&c)`fdpe@eApeVt~@SlZ);p_LG44`P^;bCXEbm=@O%3lHm5GWn+Fajg` z*ROvJK*N9u;UB}7Z$B7r{T5)j@qvwD%Z=9zW}+V%JPmjmczHM&egM^Raj`S}`}ZH1 z@EDl^0*D2Yfc`W5{{0tdz#j%?)_)A&fBs?Ed+RR)GcOx38l@Qy-1)(<_}qPl7B_YV zT@_)Vy8l4i|AV6eAb^-)De(92Kfn|S#6UxS|Nh6o35+NnJ_d$gKYuU?etW@SE%k#z zfSZZo+mGL1b^reT0~-JkKwuYuI3U|Wn33@>!@vK385AY|GyMDhjKPHQ8H2wyJA>4ICaUKrgt6 z{bt}};$*mf?*rU67~tdMWw>?gHc;)qUjP9F5@zD!;wk~Ayukk;01OglCPq*Q16_ow n5t{nJq5lC0zI^%I1Q1{V_c>jp(8|`@00000NkvXXu0mjfv|r;U literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/mp3.png b/workflow/public_html/images/documents/extension/mp3.png new file mode 100755 index 0000000000000000000000000000000000000000..3f1bd5692bc9431f725ef9adf89b34f7191a572f GIT binary patch literal 1040 zcmV+r1n>KaP)1B-wX!yg7&28RFt8Gr;3vobKSNw7$3NbZmk<+3@wb>f15JTEdBOiY;= z&Yk(k@ctbGPy+)%05LIO07eM)`!9pADA$}IlRwVcz9Q_}#vaKGKmS-TynFSJfrB-L z;U5DJNEtu?F=1-`2Q>LF1D7CQURJbztg<9CgNP6tgO!CI3j-5RKf|r7h73%p=ra%9GF$f6oG3cs^GcYmn zNi&Er_A`9{a*RQS)s=yV(H|gyP+Y*w2(ScscJNPwT8;rs6c45ADc44;4BXAoo50tf&>0KWeO{r&wP z1_~2C4i6PSBOoq4PDWlP_w)e(@A2;d3=0zg@9*mX_V)Jx4h|0h3JC`a0Pg_Y01p5X z0O$Vw00;pC0*J-f$o-g^p|hlrpc13Bq$tCW@BbKHy!;AO%*mjjpvJ(@FTn8R$rA=$ zeHjKu#(&HVEDT?PG0X&nte{W_2p|?O7f%UwWpl>YZ-Cza@t@)6?_Ug}qCyOuK=0nY z`(_PPRy<@M|5%^TMDy#Tsd5{RDzQ-i#Ss8*V$ zhAY3LqXh#y`%7RH|7Eyv@jSzS=D#cqkN)gq;N@atc=`7a!^eL;00G2+186ZZah~#U zFZefk@}mE1*KPi{%p7Cr`LiMb4{Oj#g>00D#-v9NG;IXV0N@be4)4@~Mu zzrquzJ)WPR|5;B@ z?*ves10aA{7?8mK{|pR&|Ndq8^XE5+s{<4Xu(h>yW@Kd2Ha9mH3=0cmS+r;ggNlke z!;Kqv3@=@}qze#0j4;j0%1W}&o;~yCHq?WQCeEMPeeq-O;=Y>DJ?C7bJM1cKpT`8#Kfc+ znwuMd-eLdw^5yf_j~+cZ57e{|hz|qtS(wED0mPV@nf=Ag%z}IU`ZWxCdd3W!H?RM5 z>(-5rfB*iw{p;7ylRz~)fcP8`zX9TZAb&$K2z&qt06_r0{{-3D+1(%@Aua|62LST& z>;NGlApkNmF$fY85+~l?-z6a-A6@zR`vT|Z=>jP!CIRE)~_pp^oM zSxQPW&feZZ_UF%^3@It8pcrA|PfO)|^7JW}wze*(ld}uQ!w2`+{r&yffnme` z5?2q2bUzkaP?VPWYoF)@<<`t>&h8!IEj zPu33%m!JP&c)`fdpe@eApeVt~@SlZ);p_LG44`P^;bCXEbm=@O%3lHm5GWn+Fajg` z*ROvJK*N9u;UB}7Z$B7r{T5)j@qvwD%Z=9zW}+V%JPmjmczHM&egM^Raj`S}`}ZH1 z@EDl^0*D2Yfc`W5{{0tdz#j%?)_)A&fBs?Ed+RR)GcOx38l@Qy-1)(<_}qPl7B_YV zT@_)Vy8l4i|AV6eAb^-)De(92Kfn|S#6UxS|Nh6o35+NnJ_d$gKYuU?etW@SE%k#z zfSZZo+mGL1b^reT0~-JkKwuYuI3U|Wn33@>!@vK385AY|GyMDhjKPHQ8H2wyJA>4ICaUKrgt6 z{bt}};$*mf?*rU67~tdMWw>?gHc;)qUjP9F5@zD!;wk~Ayukk;01OglCPq*Q16_ow n5t{nJq5lC0zI^%I1Q1{V_c>jp(8|`@00000NkvXXu0mjfv|r;U literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/mpg.png b/workflow/public_html/images/documents/extension/mpg.png new file mode 100755 index 0000000000000000000000000000000000000000..27ddf385e4d62ba76e8edfbd139c14c7b0a122de GIT binary patch literal 1069 zcmV+|1k(G7P)rquzJ)WPR|5;B@ z?*ves10aA{7?8mK{|pR&|Ndq8^XE5+s{<4Xu(h>yW@Kd2Ha9mH3=0cmS+r;ggNlke z!;Kqv3@=@}qze#0j4;j0%1W}&o;~yCHq?WQCeEMPeeq-O;=Y>DJ?C7bJM1cKpT`8#Kfc+ znwuMd-eLdw^5yf_j~+cZ57e{|hz|qtS(wED0mPV@nf=Ag%z}IU`ZWxCdd3W!H?RM5 z>(-5rfB*iw{p;7ylRz~)fcP8`zX9TZAb&$K2z&qt06_r0{{-3D+1(%@Aua|62LST& z>;NGlApkNmF$fY85+~l?-z6a-A6@zR`vT|Z=>jP!CIRE)~_pp^oM zSxQPW&feZZ_UF%^3@It8pcrA|PfO)|^7JW}wze*(ld}uQ!w2`+{r&yffnme` z5?2q2bUzkaP?VPWYoF)@<<`t>&h8!IEj zPu33%m!JP&c)`fdpe@eApeVt~@SlZ);p_LG44`P^;bCXEbm=@O%3lHm5GWn+Fajg` z*ROvJK*N9u;UB}7Z$B7r{T5)j@qvwD%Z=9zW}+V%JPmjmczHM&egM^Raj`S}`}ZH1 z@EDl^0*D2Yfc`W5{{0tdz#j%?)_)A&fBs?Ed+RR)GcOx38l@Qy-1)(<_}qPl7B_YV zT@_)Vy8l4i|AV6eAb^-)De(92Kfn|S#6UxS|Nh6o35+NnJ_d$gKYuU?etW@SE%k#z zfSZZo+mGL1b^reT0~-JkKwuYuI3U|Wn33@>!@vK385AY|GyMDhjKPHQ8H2wyJA>4ICaUKrgt6 z{bt}};$*mf?*rU67~tdMWw>?gHc;)qUjP9F5@zD!;wk~Ayukk;01OglCPq*Q16_ow n5t{nJq5lC0zI^%I1Q1{V_c>jp(8|`@00000NkvXXu0mjfv|r;U literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/pdf.png b/workflow/public_html/images/documents/extension/pdf.png new file mode 100755 index 0000000000000000000000000000000000000000..f4863cb6c4ae23759e205756fc6b7bc22baee820 GIT binary patch literal 857 zcmV-f1E&0mP)q$gGRCwBA ztg5Oy?cw2J%)r3#9|#!G0V9}Tg!7r0m>AgD*ccBSIPkrtrKJEMfEae{*zw~(F7WT) z|Gyv#i2nlFzkdDt|MTZhu+-(tm;cMl%O3&=AeMhX05bW{pFa#BCdd^a8YK9ifr)|X z@OFkj&mJ=T@r+<#;^bub{qrXSFE1}xJxDD;0I@*z!!?5eh-T+tV0`zAfq6<3!{^s8 z8UEP$F!1p5F)#uR0C@wd{y#tfVKo5kg1>(m{xh>MumJHN6&(g9AyJ0EzkVWI2vrXd zKuoZ}0dY|9@81jzy!;G*BxM=?=$JAvbMr9#134S27G?lI0I~c9+61$e0a=oRli}a< zhYUY2Uu9tW#{x9)7f>@u?k@vK56ray0mKAjAWQ{fpdT5Sm>GVqU%~K9U6$;%)B5I{^YC&Odl572ZjE{4CC&M>^cc!7blqK$z|&xqmQ*0l_OIJp`A zaq%+z2d0bvQ1t)-!~)X@b_X*v*cQg0zZm|`?P2&YCCR}3={>_&Hcke%&GQ*p_<(Xc zh7AApEg1eXGJ#_YAb?oFP69;>8#@Ez>*oyr9^YqR-o1|D3((n&+U5+OZ(L>gV`Rm^ z%FV&Rym$)3$3rptTUv7b`3nuq zj~^ka5E`}UX#|9S0TUT8GckPr{P`C^05NiNb0ehSwR^OB`brxhnB@bVnEFD j`t|Ft@87?l1Q1{V(ks~WOR5=@00000NkvXXu0mjf+#`dP literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/php.png b/workflow/public_html/images/documents/extension/php.png new file mode 100755 index 0000000000000000000000000000000000000000..02fb3eb2539910c4fc623bdad202b892b1a54cf5 GIT binary patch literal 997 zcmX9+O-Phs5T0!}UHqYpSSe}NAHPC>AQ z^>gXf*Lo}#i^tG%?xlIkq{}GGcl865+-Fb|Hh7-BXOjT%%`%D6A~d6GGEC`PDzwh$*?yPBek$2 zS~@}nQrJ8IGdpHsR%Y{fI6KGUSRI>($Fma_VHGyd2H8$olvUY$r85>|H8xKa#K9EQ zJU%c1g05(TI^>2jaDgSxsh0#u97LRoGp`T~M4hTLuNG{?oEij$%Ah$U6$*uHC_oJu zL2Kv;pdbSM&;!)`76qar=FNf_0OPDG=DmY9VB=X$%v%ZX;WVs;m#_^c!4=p5-Ovhg zPy^B^15L2=_`Ye_6>Y*9ARX_xz%oA)SO$ea#o1t=A10=Uv0w;r9X7*Pc!}Y`EjR>A zPy_XtB_u*qSRc|1M+-W@2Ov74B}$QwN1RZM2LA&hb}#8zrBbQYYSYuxb8~YmD=UkO zi)(9Z>+9>Ao15F)+q=8FdwYBKr#?Tw5ClQ^$1yS=5V6A=O_o35{!B5S9lrhI%J;_& z9S;xh)iaF dy@!^QJ83%g`rXB=-wG9Uq++3*|BxHI_YXR=yg&c| literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/php3.png b/workflow/public_html/images/documents/extension/php3.png new file mode 100755 index 0000000000000000000000000000000000000000..02fb3eb2539910c4fc623bdad202b892b1a54cf5 GIT binary patch literal 997 zcmX9+O-Phs5T0!}UHqYpSSe}NAHPC>AQ z^>gXf*Lo}#i^tG%?xlIkq{}GGcl865+-Fb|Hh7-BXOjT%%`%D6A~d6GGEC`PDzwh$*?yPBek$2 zS~@}nQrJ8IGdpHsR%Y{fI6KGUSRI>($Fma_VHGyd2H8$olvUY$r85>|H8xKa#K9EQ zJU%c1g05(TI^>2jaDgSxsh0#u97LRoGp`T~M4hTLuNG{?oEij$%Ah$U6$*uHC_oJu zL2Kv;pdbSM&;!)`76qar=FNf_0OPDG=DmY9VB=X$%v%ZX;WVs;m#_^c!4=p5-Ovhg zPy^B^15L2=_`Ye_6>Y*9ARX_xz%oA)SO$ea#o1t=A10=Uv0w;r9X7*Pc!}Y`EjR>A zPy_XtB_u*qSRc|1M+-W@2Ov74B}$QwN1RZM2LA&hb}#8zrBbQYYSYuxb8~YmD=UkO zi)(9Z>+9>Ao15F)+q=8FdwYBKr#?Tw5ClQ^$1yS=5V6A=O_o35{!B5S9lrhI%J;_& z9S;xh)iaF dy@!^QJ83%g`rXB=-wG9Uq++3*|BxHI_YXR=yg&c| literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/php4.png b/workflow/public_html/images/documents/extension/php4.png new file mode 100755 index 0000000000000000000000000000000000000000..02fb3eb2539910c4fc623bdad202b892b1a54cf5 GIT binary patch literal 997 zcmX9+O-Phs5T0!}UHqYpSSe}NAHPC>AQ z^>gXf*Lo}#i^tG%?xlIkq{}GGcl865+-Fb|Hh7-BXOjT%%`%D6A~d6GGEC`PDzwh$*?yPBek$2 zS~@}nQrJ8IGdpHsR%Y{fI6KGUSRI>($Fma_VHGyd2H8$olvUY$r85>|H8xKa#K9EQ zJU%c1g05(TI^>2jaDgSxsh0#u97LRoGp`T~M4hTLuNG{?oEij$%Ah$U6$*uHC_oJu zL2Kv;pdbSM&;!)`76qar=FNf_0OPDG=DmY9VB=X$%v%ZX;WVs;m#_^c!4=p5-Ovhg zPy^B^15L2=_`Ye_6>Y*9ARX_xz%oA)SO$ea#o1t=A10=Uv0w;r9X7*Pc!}Y`EjR>A zPy_XtB_u*qSRc|1M+-W@2Ov74B}$QwN1RZM2LA&hb}#8zrBbQYYSYuxb8~YmD=UkO zi)(9Z>+9>Ao15F)+q=8FdwYBKr#?Tw5ClQ^$1yS=5V6A=O_o35{!B5S9lrhI%J;_& z9S;xh)iaF dy@!^QJ83%g`rXB=-wG9Uq++3*|BxHI_YXR=yg&c| literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/php5.png b/workflow/public_html/images/documents/extension/php5.png new file mode 100755 index 0000000000000000000000000000000000000000..02fb3eb2539910c4fc623bdad202b892b1a54cf5 GIT binary patch literal 997 zcmX9+O-Phs5T0!}UHqYpSSe}NAHPC>AQ z^>gXf*Lo}#i^tG%?xlIkq{}GGcl865+-Fb|Hh7-BXOjT%%`%D6A~d6GGEC`PDzwh$*?yPBek$2 zS~@}nQrJ8IGdpHsR%Y{fI6KGUSRI>($Fma_VHGyd2H8$olvUY$r85>|H8xKa#K9EQ zJU%c1g05(TI^>2jaDgSxsh0#u97LRoGp`T~M4hTLuNG{?oEij$%Ah$U6$*uHC_oJu zL2Kv;pdbSM&;!)`76qar=FNf_0OPDG=DmY9VB=X$%v%ZX;WVs;m#_^c!4=p5-Ovhg zPy^B^15L2=_`Ye_6>Y*9ARX_xz%oA)SO$ea#o1t=A10=Uv0w;r9X7*Pc!}Y`EjR>A zPy_XtB_u*qSRc|1M+-W@2Ov74B}$QwN1RZM2LA&hb}#8zrBbQYYSYuxb8~YmD=UkO zi)(9Z>+9>Ao15F)+q=8FdwYBKr#?Tw5ClQ^$1yS=5V6A=O_o35{!B5S9lrhI%J;_& z9S;xh)iaF dy@!^QJ83%g`rXB=-wG9Uq++3*|BxHI_YXR=yg&c| literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/phtml.png b/workflow/public_html/images/documents/extension/phtml.png new file mode 100755 index 0000000000000000000000000000000000000000..02fb3eb2539910c4fc623bdad202b892b1a54cf5 GIT binary patch literal 997 zcmX9+O-Phs5T0!}UHqYpSSe}NAHPC>AQ z^>gXf*Lo}#i^tG%?xlIkq{}GGcl865+-Fb|Hh7-BXOjT%%`%D6A~d6GGEC`PDzwh$*?yPBek$2 zS~@}nQrJ8IGdpHsR%Y{fI6KGUSRI>($Fma_VHGyd2H8$olvUY$r85>|H8xKa#K9EQ zJU%c1g05(TI^>2jaDgSxsh0#u97LRoGp`T~M4hTLuNG{?oEij$%Ah$U6$*uHC_oJu zL2Kv;pdbSM&;!)`76qar=FNf_0OPDG=DmY9VB=X$%v%ZX;WVs;m#_^c!4=p5-Ovhg zPy^B^15L2=_`Ye_6>Y*9ARX_xz%oA)SO$ea#o1t=A10=Uv0w;r9X7*Pc!}Y`EjR>A zPy_XtB_u*qSRc|1M+-W@2Ov74B}$QwN1RZM2LA&hb}#8zrBbQYYSYuxb8~YmD=UkO zi)(9Z>+9>Ao15F)+q=8FdwYBKr#?Tw5ClQ^$1yS=5V6A=O_o35{!B5S9lrhI%J;_& z9S;xh)iaF dy@!^QJ83%g`rXB=-wG9Uq++3*|BxHI_YXR=yg&c| literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/pl.png b/workflow/public_html/images/documents/extension/pl.png new file mode 100755 index 0000000000000000000000000000000000000000..7c38cb60676b9fab5307533473808d65968d8868 GIT binary patch literal 669 zcmV;O0%HA%P)8O`nh000+sMObuGZ)S9NVRB^vM@&RePDdbiWpW@hE;Mn4q~QPn00?w&PDe*f zL^A*Y002sWDIWj;00d`2O+f$vv5yPvEaV^1 zC}lTg%feepRy0cq3op@ZrpC)cvXh0BrI?!Xnv$|&LzI`InaqqP5*ws2!}mJpHgoUX zx!qFtTW4|3d7jUCp6_`W<|F`jIA40^%;eRd2Oj|3-{0fu>FJ-@7K;VD-44g&@hjl= z_7+;L7J9uN)oPUnyuZI=I-TO}?G3eB4cFJ#;PH4co6VTd=U)M{*$f(u22Q6FtJMmr zREq9zZf;<+*^tR(kWQyzFc=Vz$G^Am{QQi5zmG&Bfnu=;nM{VwX7d@8%jGDjR4U=& z;oZLx{~bUsTrL+noemTV1;k=8 zlu9LpLLmeK0en6mmdhpD?KVs%6V~hXF90!(BoK(vXhgT$#c(*pT$79;oC!kWPfWzTXvejy(rPu3qcsw3zC;>_&5=0^qTwGjWyWOHtC?KEDJ19V< zQi03mBAHA=tyY80X5;1Mg?{hlcDtPhlQz9xFEyD|K<35mc7x&b`H;)ybjpZEqY)jV5B)xQBqk6DP_why zEF2C8n5(NR>gYKl^FaJKd8H>F2u^E!7U8GvnE#<4LniG_lQJ8z00000NkvXXu0mjf DnGYmT literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/pls.png b/workflow/public_html/images/documents/extension/pls.png new file mode 100755 index 0000000000000000000000000000000000000000..3f1bd5692bc9431f725ef9adf89b34f7191a572f GIT binary patch literal 1040 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/rm.png b/workflow/public_html/images/documents/extension/rm.png new file mode 100755 index 0000000000000000000000000000000000000000..85725f5930cec563093b38ff0393896b5e36215c GIT binary patch literal 924 zcmV;N17rM&P)a)1&lXTKGmJ}gjSx?e%jOdHQ9C5tui`I&SfKjB5^QWt44=OIVmNc-E5no5Kn;Hx z8Mrx_8I;8s8T1qx8CcjE7(Rakd5a0G9^?{$0D>C;^cKUB3-1_K9Q?*0B_+rpE6Ks| z8z^<=*>{F@m;W)yasFdSbNUAq2U+$PW&i^~05QP=?#$Kq3=8&rW(al?XNa}_%AhIn zm_d}`5(DR>B@AkcFBop~2s4zgVrF>!>^B2DD+AmBfB=FT@SkDjp^pqMR?-aG;_n!C z@7l}o@bX;-X;wxC4Otn6CvSf;h)XjtJmcVH*mn9a0~6z4pbm(|00G1TG2kD=yHEcZ zTK2Lr?7IG)!CO?6A=ul7fq|Ku;p5Lg3{TJfXW;wD01N|WhEL!BfdlvdKZpSU0mSn6 zFDML{8GKFH7?#X`#c=hxFvBy!YYd0)?PbuF!oaU#%JAza zBg4~YUl^`@;%3-<`Wr)*>>seVL3#lKhy@l4zktU60mi$Q5)XrpBGAAezkp)@7+6`D z7=Hcw%W(728-|m2nHa2EU@T+(2NY9enZ*7aA5?ddypZ(l*6E< z!or}d1~M4vvS0teh yS^vYL1Su<{XK|1i5VO2~{rc|L@&KrzfBwII{rdmUU%&oi13-iSgVg*2%K!ZN6D)T5^5y^X^74lO0*D1@!@rj=UoxCK zca}j#S&4y%hlk<&k6#S@f`SZh-o9n{{p%Nll%ymB2Rl2%@87?{E(ECo8pr@NhXEjf zSU`dxNi}s%1|Du6hJQdoHZ}$ZR-jY4n3)-Vv9dBS0=)+E-hUPr1|S3M4Uj<~mjDD1 z%iq6$7=(m{89x6LVtD$Vk%5uvAA>aOa|Vtpml(MJGcx=Ky5z^RXAJLwhJkEm02=a_ zg9B_4$OQla!~zPKuV240Jh=0OftihuK}1Y|frXWY;U7Og!yg_#hJQfYfPuik3ktw5 zUl@J@`G16j82&?CzyJ_HKm!;Vo_%@6@a)%R1}Q;F2KN6F49{PEVGx&irGaxU306+k-fC58ORDwbErxnA;Zww5tJ_G&E_>vogF^o2Pq_a<7$AUH{s2vq`pE{A6lD1J`8NaO#}^ELxqmTmzIevK z@$Wywcc6x!yu9F;Vg!2U4^R`xc9;tQ0*K}R-+v6x|9)V2$oPPPO^A(w_X7jNgJ+)^ zWchd)IQaM(egWh34=@J)0HgCCCnq=z{zDA_xd0%5SU`jbJ227w`pxj=I~&7C7Dfhc zq1Oz|9Lx;=K7V0gV`gGte*d1~KQLC9fd>5s;(vU6V9g)^5I`*dfg$?k`6C9VXEzxH z1%(&{_(g$$AU;i<% zvobOK{Pl-{gZUqWsyGV+7Y7r=x1T_70lfjz2XYBO0KpAlW&Y3b@!Ma9omamx2=lQs z=qqwFFaZsG|Md^U0*DC~IDdfx%T9e@c=wBe z!CaM>fuECs;rY9-4DUYwU=ZN^!*KJ(JBC?%p8>t~kAa2hKimL-0Ac|K5ZHhxZ+|ju zJ@be`O+$g<;(G>$E2l0nT)B3Ofti(!;osZl^65Flv3-Xb{xYyIXqlQZNDA>YJb(Qa=m&@k zKmZ_sSpNTm7{JNOz`(~V$iV#i8^il={}}|i_!;C3tr>3L{luWEp~xVuAkXmc?MnuJ zZYGA`Kv%=O01!Ydz=#H=AqENF{|ug%stkH&Mhx0o5)5xYGcfRr@G(S1dojpL@GyM+ z@R{M$&tD8uLR<`gz%GDT3=lvpAX9+pgn0i*UW1IS{KUVs2%fdmF9;rwHe;AduVSNXwk_Wo0bi%*ys zKL2E5kmCQ%AjS2S!AO*eL0*a{q_C(_mcnu Z3;?bQzDi!$Q~>}0002ovPDHLkV1lBoxtag~ literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/sql.png b/workflow/public_html/images/documents/extension/sql.png new file mode 100755 index 0000000000000000000000000000000000000000..5a218fe92fbef0bd2398532509200b78e0920a06 GIT binary patch literal 977 zcmV;?11|iDP)|L@&KrzfBwII{rdmUU%&oi13-iSgVg*2%K!ZN6D)T5^5y^X^74lO0*D1@!@rj=UoxCK zca}j#S&4y%hlk<&k6#S@f`SZh-o9n{{p%Nll%ymB2Rl2%@87?{E(ECo8pr@NhXEjf zSU`dxNi}s%1|Du6hJQdoHZ}$ZR-jY4n3)-Vv9dBS0=)+E-hUPr1|S3M4Uj<~mjDD1 z%iq6$7=(m{89x6LVtD$Vk%5uvAA>aOa|Vtpml(MJGcx=Ky5z^RXAJLwhJkEm02=a_ zg9B_4$OQla!~zPKuV240Jh=0OftihuK}1Y|frXWY;U7Og!yg_#hJQfYfPuik3ktw5 zUl@J@`G16j82&?CzyJ_HKm!;Vo_%@6@a)%R1}Q;F2KN6F49{PEVGx&irGaxU306+k-fC58ORDwbErxnA;Zww5tJ_G&E_>vogF^o2Pq_a<7$AUH{s2vq`pE{A6lD1J`8NaO#}^ELxqmTmzIevK z@$Wywcc6x!yu9F;Vg!2U4^R`xc9;tQ0*K}R-+v6x|9)V2$oPPPO^A(w_X7jNgJ+)^ zWchd)IQaM(egWh34=@J)0HgCCCnq=z{zDA_xd0%5SU`jbJ227w`pxj=I~&7C7Dfhc zq1Oz|9Lx;=K7V0gV`gGte*d1~KQLC9fd>5s;(vU6V9g)^5I`*dfg$?k`6C9VXEzxH z1%(&{_(g$S?LC@s*|0=5yWhzJS_2qHy>E4Fyom+Rg23Trdg>$SKQBP{IS*z@7}{(N{+(~cx2 zou&gi_#1$=wKeC0XWoLYuC7`g#Ng;lvHF2T(>G!;*)SJ^AXYmzK5ZPHG;$@X&fbyX z$+?uSQGqhPyi%wDF-&=bihjKP0=XgoKNl4SKUxuU<)Mey4!tY!C=q~qeYb> z-i?+srM#(G^B2eR5ybBGE!T*ZH`V&!%KJdTFOalN8?7KZnWB6MzBoAxy*69(*^OXJ ze7FA5(9>rKwot^C5iYmQL6~5NgK)!$^KkA}i^Jt2oLp&FS$&(lyYDJjJO`nEKgAX* z8EFL+MG53OfkMZXsDG*!@tZrZ2|92bTk=xrR~k#Ir7fC!IEHm-`&kuDhS&36pa0!* zVA10h$-7`1{!efvD)|&-Cnjc0^aI~ZRXuX;z>dU|W7FnwgYjH>Eo8-fq_;+@$t|n1 zSS%>E@ZrO%K+!X2h7i;VBgDMT`EYdRtqrS_b>DsbLaiTqzp_$X-MsP3AFpskLWNeO z?A`oL!NB+|g1Rhr)QX@JuZ$yxH#w#J{;?Sw>PjmX7P1>)JKiKyZabJ|wxD)w0UXTc zh&%ONTyWldW)|&zJU;r$DP6Y#SA;Z|BTom?Z4vB*S-D(2>%0wgnxSUzA7b) zHJUgmF{qf4;sjyq+0m@cQM`zYiD$ms{u$#Et0Jjn{G*h;KRlpmQB93>%Q>>*R?P2H zaz;o-)McVRlbg=prP~Ho({%}|mPEC0mCoiuyA|o!de}6b5tzpwAD2U!S Rp=N#^v7sw?B0dIu^)LF_&TRky literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/tar.png b/workflow/public_html/images/documents/extension/tar.png new file mode 100755 index 0000000000000000000000000000000000000000..184f959df006a032a8cf984a1249efde28aa8315 GIT binary patch literal 1050 zcmV+#1m*jQP))u00kUWW0RR2`00adC0Q~p;00RF29|s2kQ4AU)SrQ{EE!f)T?cLJWxd#6Cr`YHK z!37Hg{0IX600RR60ISge00IC(0KWeO|Ns5~{rms`0s#G84Hgw#6D2S<7%x5#4{siA;$d?JdLKADC{AXYS2q2cf%-jqNTp|n%U*9t@ytu@` z@cSzR12a1V0}oJ>kOEK~7+NnbFfe?3!ocw7BhXML1_pishQDmQ4FCQ!{RapjpaEP! z#o|Cue`8=^WC1FC&cN^qsQAS>1_tE-pi3SxF#LMMz`(%|#KH^=tQ-sse7p?*KfVDP zz`y_yKtKa{Ahvz`%m5BO#(zLfj6gOJGyeuUA7}xm6htEn&>PIGKo|1^ee|8-|9>V1 zfB<6o#{%>MH_!z}|3m0MKY*I~fSQ3q48I@-v9LnD$H(xW;|s&Te~b(O0mSn6 zKTv=f7zSLQfPsT-08kS!P#L&D1^`{c3N?TQsGf_D;UC*apcfb!00M{wWC}1|AOZOg zn4%bg-eC9xH2~;uu741(v2jAY0K#lQFE9hc0q9kL0AgWdV+95)FHi!gkQ-zhkp2h6 zzk!Bu0uA7Vh6^ju09G~#%^X=+71%2YF+~~}=y>|Nn@XA5S+Kl$d5vNFrsIDO9J%%8%AI!yKmKD_4^+At zh`)h63=lvJ7D~JfT)=Q-1!4hESTci!xg^*bf|Nyh){1knYy|RSfmni_@% literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/tbz.png b/workflow/public_html/images/documents/extension/tbz.png new file mode 100755 index 0000000000000000000000000000000000000000..184f959df006a032a8cf984a1249efde28aa8315 GIT binary patch literal 1050 zcmV+#1m*jQP))u00kUWW0RR2`00adC0Q~p;00RF29|s2kQ4AU)SrQ{EE!f)T?cLJWxd#6Cr`YHK z!37Hg{0IX600RR60ISge00IC(0KWeO|Ns5~{rms`0s#G84Hgw#6D2S<7%x5#4{siA;$d?JdLKADC{AXYS2q2cf%-jqNTp|n%U*9t@ytu@` z@cSzR12a1V0}oJ>kOEK~7+NnbFfe?3!ocw7BhXML1_pishQDmQ4FCQ!{RapjpaEP! z#o|Cue`8=^WC1FC&cN^qsQAS>1_tE-pi3SxF#LMMz`(%|#KH^=tQ-sse7p?*KfVDP zz`y_yKtKa{Ahvz`%m5BO#(zLfj6gOJGyeuUA7}xm6htEn&>PIGKo|1^ee|8-|9>V1 zfB<6o#{%>MH_!z}|3m0MKY*I~fSQ3q48I@-v9LnD$H(xW;|s&Te~b(O0mSn6 zKTv=f7zSLQfPsT-08kS!P#L&D1^`{c3N?TQsGf_D;UC*apcfb!00M{wWC}1|AOZOg zn4%bg-eC9xH2~;uu741(v2jAY0K#lQFE9hc0q9kL0AgWdV+95)FHi!gkQ-zhkp2h6 zzk!Bu0uA7Vh6^ju09G~#%^X=+71%2YF+~~}=y>|Nn@XA5S+Kl$d5vNFrsIDO9J%%8%AI!yKmKD_4^+At zh`)h63=lvJ7D~JfT)=Q-1!4hESTci!xg^*bf|Nyh){1knYy|RSfmni_@% literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/tgz.png b/workflow/public_html/images/documents/extension/tgz.png new file mode 100755 index 0000000000000000000000000000000000000000..4a9fe1737a7123c8b0d7327f9acfc3f721275cbc GIT binary patch literal 1126 zcmV-s1eyDZP))u00kUWW0RR2`00adC0Q~p;00RF29|s2kQ4AU)SrQ{EE!f)T?cLJWxd#6Cr`YHK z!37Hg{0IX600RR60ISge00IC(0KWeO|Ns5~{rms`0s#G84Hgw#6D2S<7%x5#4{siA;$d?JdLKAD8!%Qr6SEBqWz75 zPeF=-Lq>w(&(D7h00G4E_dn3T%s`vDfd2anGXNNm41XEEd}3v|e)KJaS&R|GxlOki z1hwQDPRzZ)AR;FM3~Uw#CJr_RfB<6o_m2^%m>uGUe?TWQ0yX~!x{Vnajo)|}-oN<9 zaPRCZhM(X5GyM9^!k`^w#-L=Y!|;poC(w~Q82|!^g^i7s2^g$E{{n3X`UYqU5CQSu zzYP3xq6{_}Rt!%rK4x$%_hFDSQDRVb2ZkAg2*azp7l97_&jb)a%#!TCGC7!k@ra5D zFtG4SF)#qr0s}M96~BS5VdY^Ew-9Ggbunb%m68K$z+CYpa=8Qwm4$#81lMTY%* zFZ|hm^wzVR&%Ph}`j25MKmakCEAld&yZ@O1=xYXGDzH})Vu~~{(DC$jH s1SyO1tQF^C*$Cvv0ojK3jhEB literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/txt.gif b/workflow/public_html/images/documents/extension/txt.gif new file mode 100755 index 0000000000000000000000000000000000000000..f229509ce956e6a81fd7a4497a57b201253c99ee GIT binary patch literal 1195 zcmZ?wbhEHb6k`x$_|5FJr7nORv`IXOAG zxq12d`2__9MMXu$#leI>6_u5hRaI5h)z!7NwRLrMbMg!)RVOT{ zbeZ22-PKS!wKH{cf5q}9&rLmU+a|>=pPjmVYW;~Wj_2!T9&IqZx+?bPG5v4HY;GON z`*}6_$JMmIHw*vWE^KaWXlZGgHf`FXIn%c*{W5mHf-3iapT5Kn>KCUym{NU zZQHkR-?3xIu3fu!@7}#<&z^nz_U+%l|HR(@Gn*%!*gWIpjwR>MOuKn%?z4OQ{yph@ z^>F*ocWeKC*m&T;frAGR9y)aB@ZrNpjvP69^yu;9$4{I%aS{YhpF4N%{Q2|OuU@%! z{rat2w{G9QeecfgJ9qBfy?giGy?gh8;K8GRUl0HLa`NA|Qx6_Ic=+()BM^A}=rIU9 zdGh2b2t0fG^!c-A&z=LpixsPN{y?*`r&6_uG-@bkK?%n(M@85m+ z^x?yYj~_pN0)fw;f#~z+FJHcV{rdIWw{PFSfB*dT$Dbb`fBg9I^XJcBzkdDx{rk_K zKY#!J{rB(RnKNg=F+WN$DE?$&WMEj%paTjEP@Z7m_{ZSSDdVwW!NEomrx_6^COqtH z=l2a^FbHT}8MM@6qL3(8h`QfwlhjQiok5b!%;8g{j$Tyum^e+tvy0{A#97Ruo~=ob zk9bbDDs>B+#rZODu?Z{NvKtvGKzme#aad=kOj;V;_7WSOIMDxzCJ zKfFQaWpX>$uV87DP}kcLg1xc{IfBmer9Or8*=EjpI#aP#K&hSE!{!0IY|x$Qj%qyz z)jSj$zC3JW%0DA`v{oYG(EK);ZyVcX>n{khi>L%`deA2OX=9RX$r;Au!rwg?c&a<> dTf*sc>g16_wG1K&2PXNLy?he9oP~wK8UV-<=Tray literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/txt.png b/workflow/public_html/images/documents/extension/txt.png new file mode 100755 index 0000000000000000000000000000000000000000..3c3b4b00cc76a551ca8d595f2a94715c40d44f47 GIT binary patch literal 734 zcmV<40wMj0P)yT98Ws0*D2q38djS&}5KXnEwD3{RUzN z2>(CSc94N!7l2&?!5}$+0AhiK8OS9d8ySE${QLh8su5%W#OWXi68{S}2Hr z5DUmJAi%@~;{Ib`W@chw1PTFN48$OXpwRyhb^#aw8H`|Yh!{Wsv48^z2!H?k3kk$O zK&SqN2H^j{aNEJ*0do3Z2>uUtE&~HV0I`6b%D@2k(|>TF!PsC|!r2fS%7%syKmf78 z0tguAptJ-Q{0p`fWF-S6JpMua4-Hzd>!7i~01!Y-U}rNzFc^ZJ_79pOA?X3c0jEl^ z7{qXx7XSi?1;k~9`WK>>5$0})bHR50hdZAEWZ_?k?H~XUKwvL`oc#0mA8=x422y{2 zqekO@aH?crfT;b)@CQUgQzAeBu`mIX6)Q6f0}n4Z*l%21EN}z`SF_zyWdGr|o*76W3I*RNlHegFRbB!B<|0Ewa@t7QIk QF#rGn07*qoM6N<$f+TSxV*mgE literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/wav.png b/workflow/public_html/images/documents/extension/wav.png new file mode 100755 index 0000000000000000000000000000000000000000..3f1bd5692bc9431f725ef9adf89b34f7191a572f GIT binary patch literal 1040 zcmV+r1n>KaP)1B-wX!yg7&28RFt8Gr;3vobKSNw7$3NbZmk<+3@wb>f15JTEdBOiY;= z&Yk(k@ctbGPy+)%05LIO07eM)`!9pADA$}IlRwVcz9Q_}#vaKGKmS-TynFSJfrB-L z;U5DJNEtu?F=1-`2Q>LF1D7CQURJbztg<9CgNP6tgO!CI3j-5RKf|r7h73%p=ra%9GF$f6oG3cs^GcYmn zNi&Er_A`9{a*RQS)s=yV(H|gyP+Y*w2(ScscJNPwT8;rs6c45ADc44;4BXAoo50tf&>0KWeO{r&wP z1_~2C4i6PSBOoq4PDWlP_w)e(@A2;d3=0zg@9*mX_V)Jx4h|0h3JC`a0Pg_Y01p5X z0O$Vw00;pC0*J-f$o-g^p|hlrpc13Bq$tCW@BbKHy!;AO%*mjjpvJ(@FTn8R$rA=$ zeHjKu#(&HVEDT?PG0X&nte{W_2p|?O7f%UwWpl>YZ-Cza@t@)6?_Ug}qCyOuK=0nY z`(_PPRy<@M|5%^TMDy#Tsd5{RDzQ-i#Ss8*V$ zhAY3LqXh#y`%7RH|7Eyv@jSzS=D#cqkN)gq;N@atc=`7a!^eL;00G2+186ZZah~#U zFZefk@}mE1*KPi{%p7Cr`LiMb4{Oj#g>00D#-v9NG;IXV0N@be4)4@~Mu zz$AU;i<% zvobOK{Pl-{gZUqWsyGV+7Y7r=x1T_70lfjz2XYBO0KpAlW&Y3b@!Ma9omamx2=lQs z=qqwFFaZsG|Md^U0*DC~IDdfx%T9e@c=wBe z!CaM>fuECs;rY9-4DUYwU=ZN^!*KJ(JBC?%p8>t~kAa2hKimL-0Ac|K5ZHhxZ+|ju zJ@be`O+$g<;(G>$E2l0nT)B3Ofti(!;osZl^65Flv3-Xb{xYyIXqlQZNDA>YJb(Qa=m&@k zKmZ_sSpNTm7{JNOz`(~V$iV#i8^il={}}|i_!;C3tr>3L{luWEp~xVuAkXmc?MnuJ zZYGA`Kv%=O01!Ydz=#H=AqENF{|ug%stkH&Mhx0o5)5xYGcfRr@G(S1dojpL@GyM+ z@R{M$&tD8uLR<`gz%GDT3=lvpAX9+pgn0i*UW1IS{KUVs2%fdmF9;rwHe;AduVSNXwk_Wo0bi%*ys zKL2E5kmCQ%AjS2S!AO*eL0*a{q_C(_mcnu Z3;?bQzDi!$Q~>}0002ovPDHLkV1lBoxtag~ literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/extension/xls.png b/workflow/public_html/images/documents/extension/xls.png new file mode 100755 index 0000000000000000000000000000000000000000..c1a32d0b11bdd538a02f4180f47fd96a7ca40a06 GIT binary patch literal 1016 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/images/documents/systeminfo.gif b/workflow/public_html/images/documents/systeminfo.gif new file mode 100755 index 0000000000000000000000000000000000000000..a6e7b9bbdaaec3559ebeb97af2a4f72d64c71dde GIT binary patch literal 1224 zcmZ?wbhEHb6k`x$c+Sb7p{m|marX8M$;7B$(M?Rv&HUo^{4@8@%)I3K_3PKSn+0ah zoax~ZS6)#OxX;`r-RIu@`;QKGbp42YHbHSwrBhAG9`C8r?kluy%sp#f2K+z6uy5bK z{k;;R(>SkQyB_3Q^nH$k?=1JCRfT8HoO$-_S=bE|4KLLRWwyEp#NVwJp4OO=le*yJ zAx`5o<8w>nH*eY2^)9;frC0yNNg18O>l^I9PgYGm z7l(+Jw$A@gW$hEJcP;H)yLRoO4*oxz#GWq^b3d%=e$1~dc||A{&mr6!i7rYMwWmSiY|WTYy%d-?`2DE?$&+8zw5UNh)iUF&JJ}=4a6KSP|06(C#Xr z>X|g<#>GQDGx^Q)3|irusFhMP$Dry@USx9%adV?G&~NrdUqYpyVM}o ztmrRyNnWDHfvMe8P-*?aON@7$9Vgq^ypoaM!1hB%DW*$?FIn091%G_c`X7^)^G$lO zF1S}@VUq>3q?HYu!^?|H`lQ(-EEde4;L&hnLj11NQW7=hk literal 0 HcmV?d00001 diff --git a/workflow/public_html/skins/ext/images/default/locationbar/btn-arrow.gif b/workflow/public_html/skins/ext/images/default/locationbar/btn-arrow.gif new file mode 100755 index 0000000000000000000000000000000000000000..876f4e10328a8fde8e389e0212ff998b22753b80 GIT binary patch literal 973 zcmZ?wbhEHb%v`KOZWD#+&_8Ep&1*F%-M2$;r3I@ zcAr_b@BI2h7q=X{vg72n{pard|NkGNb(9DMkbyHiNJ<~9m4u{COZNb9`9Fh?vnA`wB+Pujo?)=CpRrU zJ>7s+XhOpVhO^CVc~UkDHY+sEmi@1~Jv<%dp=5f?3$^6oHIq$gGR5;6H z{Qv(y10{fofkH6I3@AO3$p*x`Nil#0jeqs;pT9Ds7{CaN1)$9r#n~kE{`~pF@bLXZ zhF?E_GyM7i!oL`P0x_8Wj$ni2F7#hzWPxfvDaIx(K@^6+>g^d@v4;gkbWsEoXE%32*i1tcpTNXd5CcIl)ECgqz|2rE6EW}s7R?kl za1q`0GCkMruC6-2LANtwVlsgzsp4?{@7$`KBv!G66>Vie3h?3OmEEkjwdLG0PgLVi z`!N((f$A@n17Ldj#`};0I3@iHJ5M{#IZz|UIYRm4(!uV7eYIYIwQf&}_2J~}>pQ^n z6o8--^T(=hkBNQ_k{-_GWE;FMW7!p}f{NG3nHZ{D5<3d8&tLh%a4AqqnjMkr3m&fkMdECD3N5}Unig5wy40;>lo4j~k+e}v)` zR6)J8Mk*u=SpB`p6o)7j?S0T@9?bz#m@l>gc*zk__|*!FMcHwP!gwLJvS~9c0px8E zWo>#A+qW*AYQLZl(!&BX$x7Ik;qO170ssEM z@$bKXf%rGW?|(r27bf-TSv zD}TdX0CM*JhkLO)8|Y^+n~Q^sK~hqR;q|N647YFGy>NTZJsWr!5CaSfwJm@a><8NX v2&h?|`!iy8(2_#ButL^3%VaH2WCpD^U)OZxp@C)2#hU)y+@T%ZNzJigNk%37 zz-WYJwT%teVfiEI+B*@v4ey@58(ld4VY_&5-ox`e@AKg+0U-I`y79bmuw_~y6+4rZ zBG5EdFDS+@M0OSE`>d7SUDOzKZ&h*4eB1iX7tOd9RiYtW2mQ--bUahxr1`i{RG@dM zL#}_X=DDO1{;UI$pFu=dLYT_=5d8WC-sLfjr7UO-HKMAwa=!>)kEhvuwre zuW3yF@ZxFCkI*+ad|5kOX%5zu8IQjhan)UqgSrFGA_0nQFn@Z08DSEUToCSz4Z1ls z&fDbq$T&7|6iq$_uDI$@q1_kQ@dfqk*0>{SDL6V)94@)ete)j++*>bIc9sj}Y;R1o z#OpH+Yt-^4wfv{nern^iVag8`0r3Od0)xY0~Iq4Rm?bCJ?B`>oTK&gPd3dz*}CLR%aU_l zD=ze`x;$asm5J-FP1|y7=C<4Oc0KGp@OARxuQQK*oqzJ{(lcLIpZm7u8ukxPurZ-YfblWU`p4o5&%%PX!%{-|5oZ<}b{tn!>Yw4W=u^Uq zQpF50j}MM*?7gx+W?f1zJDKabS=0$Rg*yZqflo?c5Ixr^dQ@Bde4NjsFf-c#W=%hte#Xx8144{oy_EOnT}e!Oo~L)&NLV<%|FT literal 0 HcmV?d00001 diff --git a/workflow/public_html/skins/ext/images/gray/locationbar/btn-arrow.gif b/workflow/public_html/skins/ext/images/gray/locationbar/btn-arrow.gif new file mode 100755 index 0000000000000000000000000000000000000000..876f4e10328a8fde8e389e0212ff998b22753b80 GIT binary patch literal 973 zcmZ?wbhEHb%v`KOZWD#+&_8Ep&1*F%-M2$;r3I@ zcAr_b@BI2h7q=X{vg72n{pard|NkGNb(9DMkbyHiNJ<~9m4u{COZNb9`9Fh?vnA`wB+Pujo?)=CpRrU zJ>7s+XhOpVhO^CVc~UkDHY+sEmi@1~Jv<%dp=5f?3$^6oHIq$gGR5;6H z{Qv(y10{fofkH6I3@AO3$p*x`Nil#0jeqs;pT9Ds7{CaN1)$9r#n~kE{`~pF@bLXZ zhF?E_GyM7i!oL`P0x_8Wj$ni2F7#hzWPxfvDaIx(K@^6+>g^d@v4;gkbWsEoXE%32*i1tcpTNXd5CcIl)ECgqz|2rE6EW}s7R?kl za1q`0GCkMruC6-2LANtwVlsgzsp4?{@7$`KBv!G66>Vie3h?3OmEEkjwdLG0PgLVi z`!N((f$A@n17Ldj#`};0I3@iHJ5M{#IZz|UIYRm4(!uV7eYIYIwQf&}_2J~}>pQ^n z6o8--^T(=hkBNQ_k{-_GWE;FMW7!p}f{NG3nHZ{D5<3d8&tLh%a4AqqnjMkr3m&fkMdECD3N5}Unig5wy40;>lo4j~k+e}v)` zR6)J8Mk*u=SpB`p6o)7j?S0T@9?bz#m@l>gc*zk__|*!FMcHwP!gwLJvS~9c0px8E zWo>#A+qW*AYQLZl(!&BX$x7Ik;qO170ssEM z@$bKXf%rGW?|(r27bf-TSv zD}TdX0CM*JhkLO)8|Y^+n~Q^sK~hqR;q|N647YFGy>NTZJsWr!5CaSfwJm@a><8NX v2&h?|`!iy8(2_#ButL^3%VaH2WCpD^U)OZxp@C)2#hU)y+@T%ZNzJigNk%37 zz-WYJwT%teVfiEI+B*@v4ey@58(ld4VY_&5-ox`e@AKg+0U-I`y79bmuw_~y6+4rZ zBG5EdFDS+@M0OSE`>d7SUDOzKZ&h*4eB1iX7tOd9RiYtW2mQ--bUahxr1`i{RG@dM zL#}_X=DDO1{;UI$pFu=dLYT_=5d8WC-sLfjr7UO-HKMAwa=!>)kEhvuwre zuW3yF@ZxFCkI*+ad|5kOX%5zu8IQjhan)UqgSrFGA_0nQFn@Z08DSEUToCSz4Z1ls z&fDbq$T&7|6iq$_uDI$@q1_kQ@dfqk*0>{SDL6V)94@)ete)j++*>bIc9sj}Y;R1o z#OpH+Yt-^4wfv{nern^iVag8`0r3Od0)xY0~Iq4Rm?bCJ?B`>oTK&gPd3dz*}CLR%aU_l zD=ze`x;$asm5J-FP1|y7=C<4Oc0KGp@OARxuQQK*oqzJ{(lcLIpZm7u8ukxPurZ-YfblWU`p4o5&%%PX!%{-|5oZ<}b{tn!>Yw4W=u^Uq zQpF50j}MM*?7gx+W?f1zJDKabS=0$Rg*yZqflo?c5Ixr^dQ@Bde4NjsFf-c#W=%hte#Xx8144{oy_EOnT}e!Oo~L)&NLV<%|FT literal 0 HcmV?d00001 diff --git a/workflow/public_html/skins/ext/pmos-xtheme-gray.css b/workflow/public_html/skins/ext/pmos-xtheme-gray.css index 9bbc01dfb..de71aaa44 100644 --- a/workflow/public_html/skins/ext/pmos-xtheme-gray.css +++ b/workflow/public_html/skins/ext/pmos-xtheme-gray.css @@ -212,4 +212,42 @@ left: 0; z-index: 3; color: #777; +} +.x-locationbar { + padding-left: 5px; +} +.x-locationbar .x-locationbar-location { + background-color: white; + border-top: 1px solid #96969D; + border-bottom: 1px solid #96969D; +} +.x-locationbar .x-locationbar-location-first { + border-left: 1px solid #96969D; +} +.x-locationbar .x-locationbar-location-last { + border-right: 1px solid #96969D; +} +.x-locationbar-folder-icon { + background-image: url("/skins/ext/images/gray/locationbar/location_folder.png") !important; +} +.x-locationbar-back-icon { + background-image: url("/skins/ext/images/gray/locationbar/location_back.png") !important; +} +.x-locationbar-forward-icon { + background-image: url("/skins/ext/images/gray/locationbar/location_forward.png") !important; +} +.x-locationbar-reload-icon { + background-image: url("/skins/ext/images/gray/locationbar/location_reload.png") !important; +} +.x-locationbar .x-btn-menu-arrow-wrap .x-btn-center button { + background:transparent url(/skins/ext/images/gray/locationbar/btn-arrow.gif) no-repeat scroll 0pt 3px; + width: 12px; +} +.x-locationbar .x-btn-menu-active .x-btn-menu-arrow-wrap .x-btn-center button { + background-position: 0pt -97px; +} +.x-locationbar .x-btn-click .x-btn-center, +.x-locationbar .x-btn-pressed .x-btn-center, +.x-locationbar .x-btn-menu-active .x-btn-center { + background:transparent url(/skins/ext/images/gray/locationbar/tb-btn-sprite.gif) repeat-x scroll 0pt -105px; } \ No newline at end of file