X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=DataObjects%2FCore_group.php;h=613a77d07a69dedf225aab179d9e214e172ade47;hp=f11f605b47a9df2876f6399ae33e38b7f3de1ddb;hb=HEAD;hpb=4d0106f01c2669180c9e339bbc12330d92b3c2ac diff --git a/DataObjects/Core_group.php b/DataObjects/Core_group.php index f11f605b..54f83f55 100644 --- a/DataObjects/Core_group.php +++ b/DataObjects/Core_group.php @@ -45,6 +45,10 @@ class Pman_Core_DataObjects_Core_group extends DB_DataObject $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'])){ @@ -55,22 +59,38 @@ class Pman_Core_DataObjects_Core_group extends DB_DataObject } } + 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) + SELECT COUNT({$cgm}.user_id) FROM {$cgm} LEFT JOIN {$cp} ON - ${cp}.id = {$cgm}.user_id + {$cp}.id = {$cgm}.user_id WHERE - ${cgm}.group_id = {$this->tableName()}.id + {$cgm}.group_id = {$this->tableName()}.id AND - ${cp}.active = 1 + {$cp}.active = 1 ) AS group_member_count "); @@ -89,13 +109,18 @@ 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,$roo); break; case 'sub': - $g->removeMember($uid); + + $g->removeMember($uid, $roo); break; default: $roo->jerr('invalid action'); @@ -104,8 +129,18 @@ class Pman_Core_DataObjects_Core_group extends DB_DataObject $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() @@ -190,17 +225,22 @@ class Pman_Core_DataObjects_Core_group extends DB_DataObject $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->find(true)) { $gm->delete(); } @@ -264,21 +304,13 @@ class Pman_Core_DataObjects_Core_group extends DB_DataObject function postListFilter($ar, $au, $req) { - $ret = array(); - print_r($ar);exit; - if(!empty($req['_is_group'])){ - - - + if(empty($req['_add_everyone'])){ + return $ar; } - - if(!empty($req['_add_everyone'])){ - $ret[] = array( 'id' => 0, 'name' => 'EVERYONE'); - $ret[] = array( 'id' => -1, 'name' => 'NOT_IN_GROUP'); - $ar = array_merge($ret, $ar); - } - - + + $ret[] = array( 'id' => 0, 'name' => 'EVERYONE'); + $ret[] = array( 'id' => -1, 'name' => 'NOT_IN_GROUP'); + return array_merge($ret, $ar); }