DataObjects/ProjectDirectory.php
[Pman.Core] / Pman.js
diff --git a/Pman.js b/Pman.js
index 061bf3e..4af9993 100644 (file)
--- a/Pman.js
+++ b/Pman.js
@@ -27,6 +27,13 @@ Pman = new Roo.Document(
     subMenuItems : [],
     topMenuItems : [],
     rightNames: { }, /// register right names here - so they can be translated and rendered.
+    /**
+     * @property {Roo.menu.Menu} pulldownMenu - the 'add menu pulldown, you can use it to add items..
+     *
+     */
+    pulldownMenu : false, 
+    
+    
     buildCompleted : false, // flag to say if we are building interface..
     events : {
         'beforeload' : true, // fired after page ready, before module building.
@@ -110,27 +117,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, {
@@ -269,17 +256,19 @@ Pman = new Roo.Document(
             // since we always add it.. just chop of last item
             this.subMenuItems.pop(); 
             
-            lotb.add(
+            var btn = new Roo.Toolbar.Button( 
                 {
-                     
                     text: "Add New Item",
                     cls: 'x-btn-text-icon',
                     icon: Roo.rootURL + 'images/default/dd/drop-add.gif',
                     menu : {
                         items : this.subMenuItems
                     }     
-                } ,'-'
+                }
             );
+            this.pulldownMenu = btn.menu;
+            lotb.add(btn, '-');
+            
         }
        
         lotb.add(
@@ -303,7 +292,7 @@ Pman = new Roo.Document(
       
        
         window.onbeforeunload = function(e) { 
-            var e = e || window.event;
+            e = e || window.event;
             var r = "Closing this window will loose changes, are you sure you want to do that?";
 
             // For IE and Firefox
@@ -386,7 +375,7 @@ Pman = new Roo.Document(
     },
     
     
-    
+    // REMOVE THESE 
     
      
     onLoadTrack : function(id,cb) {
@@ -435,9 +424,31 @@ Pman = new Roo.Document(
           
     },
     
+    refreshActivePanel : function() {
+        var actpan = this.layout.getRegion('center').getActivePanel();
+        if (actpan.controller && actpan.controller.paging) {
+            actpan.controller.paging.onClick('refresh');
+            return;
+        }
+        
+        var agid = Pman.layout.getRegion('center').getActivePanel().id;
+        if (!agid) {
+            return;
+        }
+        Pman.Tab[agid].paging.onClick('refresh');
+    },
+    toCidV : function(data) {
+        return 'C' + data.in_out.substring(0,1) + data.cid;
+    },
+    
+    
     /**
-     * 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 (
@@ -453,8 +464,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;
+    },
     
     
     
@@ -536,25 +564,12 @@ Pman = new Roo.Document(
                     
                 });
             }
+            
         );
-    },
-    refreshActivePanel : function() {
-        var actpan = this.layout.getRegion('center').getActivePanel();
-        if (actpan.controller && actpan.controller.paging) {
-            actpan.controller.paging.onClick('refresh');
-            return;
-        }
-        
-        var agid = Pman.layout.getRegion('center').getActivePanel().id;
-        if (!agid) {
-            return;
-        }
-        Pman.Tab[agid].paging.onClick('refresh');
-    },
-    toCidV : function(data) {
-        return 'C' + data.in_out.substring(0,1) + data.cid;
+        return '';
     },
     
+    
     standardActionFailed :  function(f, act, cb) {
     
         if (act.failureType == 'client') {
@@ -578,14 +593,8 @@ Pman = new Roo.Document(
         Roo.MessageBox.alert("Error", "Error loading details",cb); 
     },
     /**
-     * 
-     * similar to Roo.Ajax, but handles our responses better...
-     * c.url
-     * c.method
-     * c.params
-     * c.failure() == failure function..
-     * c.success(data) == success function..
-     * 
+     * Depreciated - USE new Pman.Request
+    * 
      * 
      */
     request : function(c) {
@@ -743,13 +752,17 @@ Pman = new Roo.Document(
             }
             s = !s;
             document.title = s ? msg : oldtitle;
-                  
+            return false;     
         }, 1000); // every 120 secs = 2mins..
          document.title =   msg;
         
         
         
     },
+    /**
+     * @property {Array} appModules  - array based on AppModules global
+     */
+    appModules : false,
     
     modules : false,
     /**
@@ -757,8 +770,9 @@ Pman = new Roo.Document(
      * 
      * Pman.register({
           modKey : '00-admin-xxxx',
-          module : Pman.Tab.projectMgr,
-          moduleName : 'Pman.Tab.projectMgr',
+          module : Pman.Tab.projectMgr, << really a components..
+          part : [ 'Admin', 'ProjectManager' ]
+          moduleOwner : 
           region : 'center',
           parent : Pman.layout
         })
@@ -767,15 +781,47 @@ Pman = new Roo.Document(
     register : function(obj)
     {
         
+        
+        // work out owner..
+        if (!this.appModules === false) {
+            this.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;
+        
+        /// 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 (this.hasPermExists(permname) && !this.hasPerm(permname,'S')) {
+                // it's a turned off permission...
+                Roo.log(permname + " is Disabled for this user");
+                return;
+            }
+            if (appDisabled.indexOf(permname) > -1)  {
+                Roo.log(permname + " is Disabled for this site");
+                return;
+            }
+            
+            
         }
         
+        
+        
         if (!obj.parent) {
             if (obj.parent === false) {
                 //console.log('skip module (no parent)' + obj.modkey);
@@ -783,7 +829,9 @@ Pman = new Roo.Document(
             }
             // this is an error condition - the parent does not exist..
             // technically it should not happen..
+            console.log("Parent is missing");
             console.log(obj);
+            return;
         }
         if (!obj.parent.modules) {
             obj.parent.modules = new Roo.util.MixedCollection(false, function(o) { return o.modKey });
@@ -860,6 +908,10 @@ Pman = new Roo.Document(
             if (typeof(mod) == 'function') {
                 mod();
                 
+            } else  if (typeof(mod.region) == 'undefined') {
+                Roo.log("Module does not have region defined, skipping");
+                Roo.log(mod);
+                
             } else  if (mod.parent.layout && !mod.module.disabled) {
                 // honour permname setings..
                 if (mod.permname && mod.permname.length) {
@@ -868,9 +920,7 @@ Pman = new Roo.Document(
                     }
                 } else {
                     mod.module.add(mod.parent.layout, mod.region);    
-                }
-                    
-                 
+                } 
             }