DataObjects/ProjectDirectory.php
authorAlan Knowles <alan@akbkhome.com>
Thu, 17 Mar 2011 14:32:04 +0000 (22:32 +0800)
committerAlan Knowles <alan@akbkhome.com>
Thu, 17 Mar 2011 14:32:04 +0000 (22:32 +0800)
DataObjects/ProjectDirectory.php [new file with mode: 0644]

diff --git a/DataObjects/ProjectDirectory.php b/DataObjects/ProjectDirectory.php
new file mode 100644 (file)
index 0000000..4df0092
--- /dev/null
@@ -0,0 +1,147 @@
+<?php
+/**
+ * Table Definition for ProjectDirectory
+ */
+require_once 'DB/DataObject.php';
+
+class Pman_Documents_DataObjects_ProjectDirectory extends DB_DataObject 
+{
+    ###START_AUTOCODE
+    /* the code below is auto generated do not remove the above tag */
+
+    public $__table = 'ProjectDirectory';                // table name
+    public $id;                              // int(11)  not_null primary_key auto_increment
+    public $project_id;                      // int(11)  not_null
+    public $person_id;                       // int(11)  not_null
+    public $ispm;                            // int(11)  not_null
+    public $office_id;                       // int(11)  
+    public $company_id;                      // int(11)  
+    public $role;                            // string(16)  not_null
+
+    
+    /* the code above is auto generated do not remove the tag below */
+    ###END_AUTOCODE
+    
+    
+    function toEventString() {
+        $p = DB_DataObject::factory('Person');
+        $p->get($this->person_id);
+        $c = DB_DataObject::factory('Companies');
+        $c->get($this->company_id);
+        $pr = DB_DataObject::factory('Projects');
+        $pr->get($this->project_id);
+        
+        return $pr->code . ' '. $p->name . '('. $c->name .')';
+    }
+    
+    function personMemberOf($pe, $pr) {
+        $this->person_id = $pe->id;
+        $this->project_id = $pr->id;
+        $this->limit(1);
+        if ($this->find(true)) {
+            return true;
+        }
+        return false;
+    }
+    function ensureProjectMember($pr, $pe) // used where?
+    {
+        if ($this->personMemberOf($pe, $pr)) {
+           return;
+        }
+        $this->company_id = $pe->company_id;
+        $this->office_id = $pe->office_id;
+        $this->role = $pe->role;
+        $this->insert();
+        
+        
+        
+    }
+    function checkPerm($lvl, $au) 
+    {
+        return $au->hasPerm('Documents.Project_Directory', $lvl);
+    } 
+    function setFromRoo($ar,$roo)
+    {
+        $this->setFrom($ar);
+        
+        if ($this->id && 
+            ($this->project_id == $roo->old->project_id) &&
+            ($this->person_id == $roo->old->person_id) &&
+            ($this->company_id == $roo->old->company_id) )
+        {
+            return true;
+        }
+
+        $xx = DB_Dataobject::factory('ProjectDirectory');
+        $xx->setFrom(array(
+            'project_id' => $this->project_id,
+            'person_id' => $this->person_id,
+            'company_id' => $this->company_id,
+        ));
+        
+        if ($xx->count()) {
+            return "Duplicate entry found Project Directory entry";
+        }
+        return true;
+
+    }
+    function applyFilters($q, $au)
+    {
+        //DB_DAtaObject::debugLevel(1);  var_dump($q);
+       
+        // otherwise only the project they are involved with..
+         
+        // can  see - their projects + their personal mail...
+        if (!empty($q['project_id_ar'])) {
+            // can filter projects!
+            $this->whereAddIn('ProjectDirectory.project_id', explode(',',$q['project_id_ar']), 'int');
+        }
+        
+        
+         if (!empty($q['query']['company_ids'])) {
+             $this->whereAddIn('ProjectDirectory.company_id', explode(',',$q['query']['company_ids']), 'int');
+        }
+        
+        // whos should they see as far as personal contacts.!?!?
+        // their projects... and their mail or.. just their mail if no projects..
+        
+        
+        /// ------------ PERMISSION FILTERERIN!!!!!!
+        
+        if ($au->hasPerm('Core.Projects_All', 'S')) {
+            return; // can see it all!!!
+        }
+        
+        
+        $pr = DB_DataObject::factory('Projects');
+        $pr->whereAdd("Projects.type IN ('N','X')");
+        $prjs = $pr->fetchAll('id');
+        
+        
+        $pd = DB_DataObject::factory('ProjectDirectory');
+        $pd->joinAdd(DB_DataObject::factory('Projects'), 'LEFT');
+        $pd->whereAdd("Projects.type NOT IN ('N','X')");
+        $pd->person_id = $au->id;
+        
+        $prjs = array_merge($prjs, $pd->fetchAll('project_id'));
+        if (count($prjs)) {
+            $this->whereAdd("
+                    (ProjectDirectory.project_id IN (".implode(',', $prjs).")) 
+                  
+                
+            ");
+        }  else {
+            $this->whereAdd("1=0"); // can see nothing!!!
+        }
+       
+        
+        
+         
+         
+        
+    }
+    
+    
+    
+}