fix #8131 - chinese translations
[Pman.Core] / DataObjects / Core_group.php
index c243b00..54f83f5 100644 (file)
  *
  *
  *  NOTE - used to be called Groups ....
- * 
+ *
  */
 class_exists('DB_DataObject') ? '' : require_once 'DB/DataObject.php';
 
-class Pman_Core_DataObjects_Core_group extends DB_DataObject 
+class Pman_Core_DataObjects_Core_group extends DB_DataObject
 {
     ###START_AUTOCODE
     /* the code below is auto generated do not remove the above tag */
@@ -22,34 +22,84 @@ class Pman_Core_DataObjects_Core_group extends DB_DataObject
     public $__table = 'core_group';                          // table name
     public $id;                              // int(11)  not_null primary_key auto_increment
     public $name;                            // string(64)  not_null
-    public $type;                            // int(11)  
+    public $type;                            // int(11)
     public $leader;                          // int(11)  not_null
     public $is_system;                       // used by timesheets?
-    
+
     /* the code above is auto generated do not remove the tag below */
     ###END_AUTOCODE
-    
-      
+
+
     function personTable()
     {
         $ff = HTML_FlexyFramework::get();
         return empty($ff->Pman['authTable']) ? 'core_person' : $ff->Pman['authTable'];
     }
-    
-    
+
+
     // group types??
     function applyFilters($q, $au, $roo)
     {
+
         if (!empty($q['query']['name_starts'])) {
             $v = $this->escape($q['query']['name_starts']);
             $this->whereAdd("{$this->tableName()}.name like '{$v}%'");
         }
+        if (!empty($q['query']['name_contains'])) {
+            $v = $this->escape($q['query']['name_contains']);
+            $this->whereAdd("{$this->tableName()}.name like '%{$v}%'");
+        }
+        
+        if(!empty($q['_count_member_by_name'])){
+            
+            $core_group = DB_DataObject::factory('core_group');
+            
+            if($core_group->get('name', $q['_count_member_by_name'])){
+                $roo->jok($core_group->memberCount());
+            }
+        }
+        
+        if(!empty($q['_is_in_group'])){
+            $this->selectAdd("
+                COALESCE((
+                    SELECT 
+                            COUNT(id) 
+                    FROM 
+                            core_group_member
+                        WHERE 
+                            user_id = {$q['_is_in_group']}
+                        AND
+                            group_id = {$this->tableName()}.id
+                    ), 0) AS is_in_group
+            ");
+        }
+        
+        
+        $cp = DB_DataObject::Factory('core_person')->tableName();
+        $cgm = DB_DataObject::Factory('core_group_member')->tableName();
+        
+        $this->selectAdd("
+           (
+            SELECT COUNT({$cgm}.user_id) 
+                FROM 
+                    {$cgm}
+                LEFT JOIN
+                    {$cp}
+                ON
+                    {$cp}.id = {$cgm}.user_id
+                WHERE
+                    {$cgm}.group_id = {$this->tableName()}.id
+                AND
+                    {$cp}.active = 1
+                ) AS group_member_count            
+        ");
+        
     }
-    
+
     function toEventString() {
         return $this->name;
     }
-    
+
     function beforeInsert($q,$roo)
     {
         if (isset($q['_action'])) {
@@ -59,25 +109,40 @@ class Pman_Core_DataObjects_Core_group extends DB_DataObject
                 $roo->jerr("missing group id");
 
             }
-             foreach(explode(',', $q['user_ids']) as $uid) {
+            
+            $user_ids = explode(',', $q['user_ids']);
+            
+            foreach($user_ids as $uid) {
+                
                 switch($q['_action']) {
                     case 'add':
-                        $g->addMember($uid);
+                        $g->addMember($uid,$roo);
                         break;
                     case 'sub':
-                        $g->removeMember($uid);
+                        
+                        $g->removeMember($uid, $roo);
                         break;
                     default:
                         $roo->jerr('invalid action');
                 }
             }
             $roo->jok('updated');
-            
+
         }
-        
+        if (isset($q['display_name']) && !isset($q['name']) && !$this->is_system) {
+            $this->name = $q['display_name'];
+        }
+
     }
     
-    
+    function beforeUpdate($old, $q,$roo)
+    {
+        if (isset($q['display_name']) && empty($q['name']) && !$this->is_system) {
+            $this->name = $q['display_name'];
+        }
+    }
+
+
     function beforeDelete()
     {
         $x = DB_DataObject::factory('core_group_right');
@@ -88,10 +153,10 @@ class Pman_Core_DataObjects_Core_group extends DB_DataObject
     /**
      * check who is trying to access this. false == access denied..
      */
-    function checkPerm($lvl, $au) 
+    function checkPerm($lvl, $au)
     {
-        return $au->hasPerm("Core.Groups", $lvl);    
-    } 
+        return $au->hasPerm("Core.Groups", $lvl);
+    }
     function onUpdate($old, $req, $roo)
     {
         $this->ensureLeaderMembership($roo);
@@ -102,42 +167,47 @@ class Pman_Core_DataObjects_Core_group extends DB_DataObject
     }
     function ensureLeaderMembership($roo)
     {
-        
+
         // groups - make sure the leader is a member...
         if (!$this->type || !$this->leader)
         {
             return true;
         }
-        
+
         $pi = DB_DataObject::factory('core_person');
         $pi->get($this->leader);
-            
+
         $p = DB_DataObject::factory('core_group_member');
         $p->group_id = $this->id;
         $p->user_id = $this->leader;
         //$p->type = 1; //???????
         if (!$p->count()) {
-            
+
             $p->insert();
             $roo->addEvent("ADD", $p, $this->toEventString(). " Added " . $pi->toEventString());
         }
-             
+
     }
-    
-    
+
+
     function memberCount()
     {
         $gm = DB_Dataobject::factory('core_group_member');
         $gm->group_id = $this->id;
+        $gm->autoJoin();
+        $gm->whereAdd('join_user_id_id.active = 1');
+        //PDO_DAtaObject::DebugLevel(1); 
         return $gm->count();
     }
-    
+
     function memberIds()
     {
         $gm = DB_Dataobject::factory('core_group_member');
         $gm->group_id = $this->id;
+        $gm->autoJoin();
+        $gm->whereAdd('join_user_id_id.active = 1');
         return $gm->fetchAll('user_id');
-        
+
     }
     function isMember($person)
     {
@@ -146,28 +216,36 @@ class Pman_Core_DataObjects_Core_group extends DB_DataObject
         $gm->user_id = is_object($person) ? $person->id : $person;
         return $gm->count();
     }
-    
-    function addMember($person)
+
+    function addMember($person,$roo = false)
     {
+        if ($this->name == "Empty Group") {
+            $roo->jerr('Cannot add the person into Empty Group');
+        }
         $gm = DB_Dataobject::factory('core_group_member');
         $gm->group_id = $this->id;
         $gm->user_id = is_object($person) ? $person->id : $person;
+        
         if (!$gm->count()) {
             $gm->insert();
         }
     }
-    
-    function removeMember($person)
+
+    function removeMember($person, $roo)
     {
         $gm = DB_Dataobject::factory('core_group_member');
         $gm->group_id = $this->id;
         $gm->user_id = is_object($person) ? $person->id : $person;
+        $au = $roo->getAuthUser();
+        if ($gm->group()->name == 'Administrators' && $gm->user_id = $au->id) {
+            $roo->jerr("You can not remove yourself from the admin group");
+        }
         
-        if ($gm->count()) {
+        if ($gm->find(true)) {
             $gm->delete();
         }
     }
-    
+
     /**
      *
      *  grab a list of members - default is the array of person objects..
@@ -175,7 +253,7 @@ class Pman_Core_DataObjects_Core_group extends DB_DataObject
      *
      *
      */
-    
+
     function members($what = false)
     {
         $ids = $this->memberIds();
@@ -185,17 +263,17 @@ class Pman_Core_DataObjects_Core_group extends DB_DataObject
         //$p = DB_Dataobject::factory(empty($ff->Pman['authTable']) ? 'Person' : $ff->Pman['authTable']);
         // groups databse is hard coded to person.. so this should not be used for other tables.????
         $p = DB_Dataobject::factory( 'core_person' );
-        
-        
-        
+
         $p->whereAdd('id IN ('. implode(',', $ids) .')');
         $p->active = 1;
+
+        $p->orderBy('name');
         return $p->fetchAll($what);
     }
-    
-    
-    
-    
+
+
+
+
     function lookup($k,$v = false) {
         if ($v === false) {
             $v = $k;
@@ -204,38 +282,38 @@ class Pman_Core_DataObjects_Core_group extends DB_DataObject
         $this->get($k,$v);
 
         return $this;
-    } 
-    
+    }
+
     function lookUpMembers($name, $what=false)
     {
         if (!$this->get('name', $name)) {
             return array();
         }
         return $this->members($what);
-        
+
     }
-    
+
     function lookupMembersByGroupId($id, $what=false)
     {
         if (!$this->get($id)) {
             return array();
         }
-        
+
         return $this->members($what);
     }
-    
+
     function postListFilter($ar, $au, $req)
-    {      
+    {
         if(empty($req['_add_everyone'])){
             return $ar;
         }
-        
+
         $ret[] = array( 'id' => 0, 'name' => 'EVERYONE');
         $ret[] = array( 'id' => -1, 'name' => 'NOT_IN_GROUP');
         return array_merge($ret, $ar);
 
     }
-    
+
     function initGroups()
     {
         
@@ -257,33 +335,46 @@ class Pman_Core_DataObjects_Core_group extends DB_DataObject
             if ($p->find(true)) {
                 $g->addMember($p);
             }
-            
-            
+
+
         }
     }
-    
+
     function initDatabase($roo, $data)
     {
         $this->initGroups();
-        
+
         foreach($data as $gi) {
             $g = DB_DataObject::factory($this->tableName());
+            
+            $o = false;
+            
+            if($g->get('name', $gi['name'])){
+                $o = clone($g);
+            }
+            
+            $display_name = (isset($gi['display_name'])) ? $gi['display_name'] : '';
+            
+            unset($gi['display_name']);
+            
             $g->setFrom($gi);
             
-            if(!$g->find(true)){
-                $g->insert();
+            if(empty($o) || empty($o->display_name)){
+                $g->display_name = $display_name;
             }
             
+            (empty($o)) ? $g->insert() : $g->update($o);
+
             if(count($g->members()) || empty($gi['members'])){
                 continue;
             }
-            
+
             foreach ($gi['members'] as $m){
                 $g->addMember($m);
             }
-            
+
         }
-     
+
     }
-    
+
 }