X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=DataObjects%2FCore_group.php;h=613a77d07a69dedf225aab179d9e214e172ade47;hp=0ddfa8bd315d4a46f01a9b48f55d5d9935216372;hb=HEAD;hpb=64c9440b1c63c76cc91ae53e382537c462ab3365 diff --git a/DataObjects/Core_group.php b/DataObjects/Core_group.php index 0ddfa8bd..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,31 +59,42 @@ 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 "); } - - function postListExtra($q, $roo) - { - print_R($this);exit; - } function toEventString() { return $this->name; @@ -94,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'); @@ -109,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() @@ -195,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(); }