X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=Pman.js;h=41bad06d3be441a81c615146db5db9abe41d49cb;hb=7e9cdd246cc8bba1ce46a4db263a0f49b7cbc5a0;hp=bde2e9a47373582bdb762dd09f3631330e4a7033;hpb=556efdb2e7604eb2877fcc05bcc6a8457910c760;p=Pman.Core diff --git a/Pman.js b/Pman.js index bde2e9a4..41bad06d 100644 --- a/Pman.js +++ b/Pman.js @@ -19,6 +19,26 @@ if (typeof(_T) == 'undefined') { _T={};} +Roo.XComponent.on('register', function(e) { if (typeof(Pman) != 'undefined') { return Pman.xregister(e); } return true; }); +Roo.XComponent.on('beforebuild', function(e) { if (typeof(Pman) != 'undefined') { return Pman.xbeforebuild(e); } return true; }); + +Roo.XComponent.on('buildComplete', + function() { + + Pman.layout.getRegion('center').showPanel(0); + Pman.layout.endUpdate(); + Pman.addTopToolbar(); + Pman.finalize(); + Pman.fireEvent('load',this); + + if (!Pman.layout.getRegion('south').panels.length) { + Pman.layout.getRegion('south').hide(); + } + + +} ); + +//Roo.debug = 1; Pman = new Roo.Document( @@ -98,7 +118,17 @@ Pman = new Roo.Document( }, - + fakeRoot : new Roo.XComponent( { + modKey : '000', + module : 'Pman', + region : 'center', + parent : false, + isTop : true, + name : "Pman Base", + disabled : false, + permname: '' , + render : function (el) { this.el = this.layout; } + }), layout: false, @@ -117,27 +147,7 @@ Pman = new Roo.Document( Roo.get('loading-mask').show(); } - - - - /* - Roo.MessageBox.show({ - title: "Please wait...", - msg: "Building Interface...", - width:340, - progress:true, - closable:false - - }); - */ - //Pman.onLoadBuild(); - //Roo.get(document.body).mask("Building Interface"); - //Pman.onLoadBuild.defer(100, Pman); - //Pman.onLoadBuild(); - - // }, - //onLoadBuild : function() { - + var _this = this; this.stime = new Date(); this.layout = new Roo.BorderLayout(document.body, { @@ -166,6 +176,16 @@ Pman = new Roo.Document( } }); + this.fakeRoot.layout = this.layout; + /* + Pman.register( Roo.apply(this.fakeRoot, { + layout : this.layout + + + } ) ); + */ + + // creates all the modules ready to load.. this.fireEvent('beforeload',this); @@ -203,23 +223,8 @@ Pman = new Roo.Document( this.layout.beginUpdate(); Pman.building = true; - - this.buildModules(this, - function() { - - _this.layout.getRegion('center').showPanel(0); - _this.layout.endUpdate(); - _this.addTopToolbar(); - _this.finalize(); - _this.fireEvent('load',this); - - if (!_this.layout.getRegion('south').panels.length) { - _this.layout.getRegion('south').hide(); - } - - - } - ); + Roo.XComponent.build(); + @@ -412,13 +417,14 @@ Pman = new Roo.Document( onLoadTrackCall : function(id,cb, cls) { Roo.get(document.body).mask("Loading Document details"); - Pman.request({ + new Pman.Request({ url: baseURL + '/Roo/Documents.html', params: { _id: id }, method: 'GET', - success : function(data) { + success : function(res) { + var data = res.data; Roo.get(document.body).unmask(); @@ -463,8 +469,12 @@ Pman = new Roo.Document( /** - * eg. has Pman.hasPerm('Admin.Admin_Tab', 'S') == showlist.. + * hasPerm: + * Does the authenticated user have permission to see this. * + * @param {String} name the [Module].[permission] to check for + * @param {Char} lvl - which type of permission to use (eg. S=show...) + * @returns {Boolean} tue indicates permission allowed */ hasPerm: function(name, lvl) { if ( @@ -480,8 +490,25 @@ Pman = new Roo.Document( return Pman.Login.authUser.perms[name].indexOf(lvl) > -1; }, - - + /** + * hasPermExists: + * Is there a permission defined for this (used by module registration.) + * + * @param {String} name the [Module].[permission] to check for + * @returns {Boolean} tue indicates permission exists. + */ + hasPermExists: function(name) { + if ( + (typeof(Pman.Login.authUser) != 'object') + || + (typeof(Pman.Login.authUser.perms) != 'object') + || + (typeof(Pman.Login.authUser.perms[name]) != 'string') + ) { + return false; + } + return true; + }, @@ -534,9 +561,9 @@ Pman = new Roo.Document( } // what about the toolbar?? tab.grid.getView().mainWrap.mask("Deleting"); - Pman.request({ + new Pman.Request({ url: baseURL + '/Roo/'+tbl+'.php', - method: 'GET', + method: 'POST', params: { _delete : r.join(',') }, @@ -593,10 +620,13 @@ Pman = new Roo.Document( }, /** * Depreciated - USE new Pman.Request - * + * We need to replace all the uses with this, however the api is slightly different, + * the success argument is res.data, not res.. * */ request : function(c) { + //return new Pman.Request(c); + var r= new Roo.data.Connection({ timeout : typeof(c.timeout) == 'undefined' ? 30000 : c.timeout }); @@ -639,6 +669,7 @@ Pman = new Roo.Document( scope: this }); + }, @@ -758,146 +789,200 @@ Pman = new Roo.Document( }, - - modules : false, /** - * example: - * - * Pman.register({ - modKey : '00-admin-xxxx', - module : Pman.Tab.projectMgr, - moduleName : 'Pman.Tab.projectMgr', - region : 'center', - parent : Pman.layout - }) - * + * @property {Array} appModules - array based on AppModules global */ - register : function(obj) + appModules : false, + + modules : false, + + + xregister : function(obj) { + // work out owner.. + if (!Pman.appModules === false) { + Pman.appModules = typeof(AppModules ) == 'undefined'? [] : + AppModules.split(','); + } + + + // ignore registration of objects which are disabled. + // global supplied by master.html appDisabled = typeof(appDisabled) == 'undefined' ? [] : appDisabled; - if ((typeof(obj.moduleName) != 'undefined') - && appDisabled.indexOf(obj.moduleName) > -1) - { - return; - } - if (!obj.parent) { - if (obj.parent === false) { - //console.log('skip module (no parent)' + obj.modkey); + /// design flaw + // previously we did not a good naming policy for module and parts + // most things that are called module here, really are 'parts' + // new versions should have 'part' as [ module : part ] + if (typeof(obj.part) != 'undefined') { + + var permname = obj.part.join('.'); + // we now have permission... + // obj.moduleOwner '.' lname + + + if (appDisabled.indexOf(permname) > -1) { + Roo.log(permname + " is Disabled for this site"); + obj.disabled = true; return; } - // this is an error condition - the parent does not exist.. - // technically it should not happen.. - console.log(obj); - return; - } - if (!obj.parent.modules) { - obj.parent.modules = new Roo.util.MixedCollection(false, function(o) { return o.modKey }); + + } - obj.parent.modules.add(obj); - - }, - - buildModules : function(parent, onComplete) - { + - var _this = this; - var cmp = function(a,b) { - return String(a).toUpperCase() > String(b).toUpperCase() ? 1 : -1; - - }; - if (!parent.modules) { + if ( obj.isTop) { + // false parent... use it.. return; } - parent.modules.keySort('ASC', cmp ); - var mods = []; - // add modules to their parents.. - var addMod = function(m) { - // console.log(m.modKey); + if (obj.parent === Pman || obj.parent == 'Pman') { + Roo.log("PARENT OF : " + obj.name + " replacing with fake"); + obj.parent = Pman.fakeRoot; + } + + if (typeof(obj.parent) == 'undefined') { + console.log("Parent is undefined"); + console.log(obj); + obj.disabled = true; + return; + } - mods.push(m); - if (m.module.modules) { - m.module.modules.keySort('ASC', cmp ); - m.module.modules.each(addMod); - } - if (m.finalize) { - m.finalize.name = m.name + " (clean up) "; - mods.push(m.finalize); - } - } - - parent.modules.each(addMod); - //this.allmods = mods; - //console.log(mods); - //return; - if (!mods.length) { - if (onComplete) onComplete(); + if (obj.parent === false) { + obj.disabled = true; + console.log('ignoring top level object (as parent===false found)'); + console.log(obj); return; } - // flash it up as modal - so we store the mask!? - Roo.MessageBox.show({ title: 'loading' }); - Roo.MessageBox.show({ - title: "Please wait...", - msg: "Building Interface...", - width:450, - progress:true, - closable:false, - modal: false + // this is an error condition - the parent does not exist.. + // technically it should not happen.. - }); - var n = 0; - var progressRun = function() { - - var mod = mods[n]; + // hack for Pman parent == Pman.. + if (obj.parent == obj.module) { + obj.parent = false; + } + + + }, + /** + * fired before building on each compoenent + * used to apply permissions. + */ + + xbeforebuild : function(obj) + { + if (typeof(obj.part) != 'undefined') { + + if (!obj.part[1].length) { + obj.part[1] = obj.part[0]; + } + var permname = obj.part.join('.'); - Roo.MessageBox.updateProgress( - (n+1)/mods.length, "Building Interface " + (n+1) + - " of " + mods.length + - (mod.name ? (' - ' + mod.name) : '') - ); + Roo.log("CHECKING: "+ permname); + // we now have permission... + // obj.moduleOwner '.' lname + + if (Pman.hasPermExists(permname) && !Pman.hasPerm(permname,'S')) { + // it's a turned off permission... + Roo.log(permname + " is Disabled for this user"); + obj.disabled = true; + return; + } + - if (typeof(mod) == 'function') { - mod(); + } + + + }, + + /** + * DEPRICATED : use Roo.XComponents now.. + * + * Pman.register({ + modKey : '00-admin-xxxx', + module : Pman.Tab.projectMgr, << really a components.. + part : [ 'Admin', 'ProjectManager' ] + moduleOwner : + region : 'center', + parent : Pman.layout + }) + * + */ + register : function(obj) + { + + //this.xregister(obj); + + + // old style calls go in here.. + // we need to convert the object so that it looks a bit like an XCompoenent.. + + obj.render = function() + { + if (!this.parent) { + Roo.log("Skip module, as parent does not exist"); + Roo.log(this); + return; + } + //if (typeof(mod) == 'function') { + // mod(); - } else if (mod.parent.layout && !mod.module.disabled) { - // honour permname setings.. - if (mod.permname && mod.permname.length) { - if (Pman.hasPerm(mod.permname, 'S')) { - mod.module.add(mod.parent.layout, mod.region); - } - } else { - mod.module.add(mod.parent.layout, mod.region); - } - - + if (typeof(this.region) == 'undefined') { + Roo.log("Module does not have region defined, skipping"); + Roo.log(this); + return; + } + if (this.module.disabled) { + Roo.log("Module disabled, should not rendering") + Roo.log(this); + return; } - - n++; - if (n >= mods.length) { - onComplete(); + if (!this.parent.layout) { + Roo.log("Module parent does not have property layout.") + Roo.log(this); return; } + + // honour DEPRICATED permname setings.. + // new code should use PART name, and matching permissions. + if (this.permname && this.permname.length) { + if (!Pman.hasPerm(this.permname, 'S')) { + return; + } + } + this.add(this.parent.layout, this.region); + this.el = this.layout; - progressRun.defer(10, Pman); - } - progressRun.defer(1, Pman); - + + + }; + // map some of the standard properties.. + obj.order = obj.modKey; + // a bit risky... - }, - + + + // the other issue we have is that + + + // Roo.log("CALLING XComponent register with : " + obj.name); + + // this will call xregister as it's the on.register handler.. + Roo.XComponent.register(obj.isTop ? obj : Roo.apply(obj.module, obj)); + + } , invertColor : function(c) { // read..