Prefix == 'u-ug') { $new_groups = $this->Application->GetVar('g'); if (!$new_groups) { return ; } $new_groups = array_keys($new_groups); // don't insert duplicate group membership record $user_id = $this->Application->GetVar('u_id'); $table_name = $this->Application->GetTempName(TABLE_PREFIX.'UserGroupRelations', 'prefix:u'); $sql = 'SELECT GroupId FROM '.$table_name.' WHERE PortalUserId = '.(int)$user_id; $old_groups = $this->Conn->GetCol($sql); $new_groups = array_diff($new_groups, $old_groups); if ($new_groups) { foreach ($new_groups as $new_group) { $fields_hash = Array ( 'GroupId' => $new_group, 'PortalUserId' => $user_id, ); $this->Conn->doInsert($fields_hash, $table_name); } } } elseif ($event->Prefix == 'g-ug') { $new_users = $this->Application->GetVar('u'); if (!$new_users) { return ; } $new_users = array_keys($new_users); // don't insert duplicate group membership record $group_id = $this->Application->GetVar('g_id'); $table_name = $this->Application->GetTempName(TABLE_PREFIX.'UserGroupRelations', 'prefix:g'); $sql = 'SELECT PortalUserId FROM ' . $table_name . ' WHERE GroupId = ' . (int)$group_id; $old_users = $this->Conn->GetCol($sql); $new_users = array_diff($new_users, $old_users); if ($new_users) { foreach ($new_users as $new_user) { $fields_hash = Array ( 'GroupId' => $group_id, 'PortalUserId' => $new_user, ); $this->Conn->doInsert($fields_hash, $table_name); } } } $this->Application->StoreVar($this->Application->GetTopmostPrefix($event->Prefix).'_modified', '1', true); // true for optional $event->SetRedirectParam('opener', 'u'); } /** * Sets primary group for user (in editing only) * * @param kEvent $event */ function OnSetPrimary(&$event) { $ids = $this->StoreSelectedIDs($event); if ($ids) { $user =& $this->Application->recallObject('u'); /* @var $user kDBItem */ $user->SetDBField('PrimaryGroupId', array_shift($ids)); $user->Update(); } $this->clearSelectedIDs($event); } /** * Don't allow primary group record deleting * * @param kEvent $event * @param string $type * @return void * @access protected */ protected function customProcessing(&$event, $type) { if ($event->Name == 'OnMassDelete' && $type == 'before') { $ids = $event->getEventParam('ids'); if ($ids) { $object =& $event->getObject( Array('skip_autoload' => true) ); if ($event->Prefix == 'u-ug') { // allow deleting non-primary group of current user ($ids - groups) $sql = 'SELECT PrimaryGroupId FROM ' . $this->Application->GetTempName(TABLE_PREFIX . 'Users', 'prefix:u') . ' WHERE PortalUserId = ' . (int)$this->Application->GetVar('u_id'); $primary_group_id = (int)$this->Conn->GetOne($sql); $index = array_search($primary_group_id, $ids); if ($index !== false) { unset($ids[$index]); $event->setEventParam('ids', $ids); } } elseif ($event->Prefix == 'g-ug') { // allow deleting users from group record, then it's not their primary group ($ids - users) $group_id = (int)$this->Application->GetVar('g_id'); $sql = 'SELECT PortalUserId FROM ' . TABLE_PREFIX . 'Users WHERE PortalUserId IN (' . implode(',', $ids) . ') AND PrimaryGroupId = ' . $group_id; $exclude_users = $this->Conn->GetCol($sql); $event->setEventParam('ids', array_diff($ids, $exclude_users)); } } } } }