X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=DataObjects%2FCore_group.php;h=613a77d07a69dedf225aab179d9e214e172ade47;hp=474554f7d3bb61b96021dbe506a2bf1ce4e58093;hb=HEAD;hpb=04c5242197b0e1f994f3bbb41253d87fdf99e6eb diff --git a/DataObjects/Core_group.php b/DataObjects/Core_group.php index 474554f7..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,18 +59,19 @@ class Pman_Core_DataObjects_Core_group extends DB_DataObject } } - if(!empty($q['_with_membership_user'])){ - $q['_with_membership_user'] = 1*$q['_with_membership_user']; + if(!empty($q['_is_in_group'])){ $this->selectAdd(" - COALESCE( - (SELECT id from core_group_member + COALESCE(( + SELECT + COUNT(id) + FROM + core_group_member WHERE - user_id = {$q['_with_membership_user']} + user_id = {$q['_is_in_group']} AND group_id = {$this->tableName()}.id - LIMIT 1 - ),0) as cgm_id - "); + ), 0) AS is_in_group + "); } @@ -75,36 +80,20 @@ class Pman_Core_DataObjects_Core_group extends DB_DataObject $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 "); - /*WHERE - {$this->tableName()}.id = core_group_member.group_id - AND - core_group_member.user_id = core_person.id - AND - core_person.active = 1 - )*/ - -// $this->whereAdd("{$this->tableName()}.id = core_group_member.group_id"); -// $this->whereAdd("core_group_member.user_id = core_person.id"); -// $this->whereAdd("core_person.active = 1"); - - - /*$cgmDBObj->joinAdd($cpObj); - $this->joinAdd($cgmDBObj); - DB_DataObject::debugLevel();*/ } function toEventString() { @@ -120,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'); @@ -135,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() @@ -221,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(); } @@ -337,11 +346,24 @@ class Pman_Core_DataObjects_Core_group extends DB_DataObject 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;