static function register($fields) { if (!empty($fields['userid'])) { $profile = Profile::staticGet('id', $fields['userid']); if ($profile && !$profile->hasRight(Right::CREATEGROUP)) { common_log(LOG_WARNING, "Attempted group creation from banned user: " . $profile->nickname); // TRANS: Client exception thrown when a user tries to create a group while banned. throw new ClientException(_('You are not allowed to create groups on this site.'), 403); } } // MAGICALLY put fields into current scope // @fixme kill extract(); it makes debugging absurdly hard $defaults = array('nickname' => null, 'fullname' => null, 'homepage' => null, 'description' => null, 'location' => null, 'uri' => null, 'mainpage' => null, 'aliases' => array(), 'userid' => null); $fields = array_merge($defaults, $fields); extract($fields); $group = new User_group(); $group->query('BEGIN'); if (empty($uri)) { // fill in later... $uri = null; } if (empty($mainpage)) { $mainpage = common_local_url('showgroup', array('nickname' => $nickname)); } $group->nickname = $nickname; $group->fullname = $fullname; $group->homepage = $homepage; $group->description = $description; $group->location = $location; $group->uri = $uri; $group->mainpage = $mainpage; $group->created = common_sql_now(); if (isset($fields['join_policy'])) { $group->join_policy = intval($fields['join_policy']); } else { $group->join_policy = 0; } if (isset($fields['force_scope'])) { $group->force_scope = intval($fields['force_scope']); } else { $group->force_scope = 0; } if (Event::handle('StartGroupSave', array(&$group))) { $result = $group->insert(); if (!$result) { common_log_db_error($group, 'INSERT', __FILE__); // TRANS: Server exception thrown when creating a group failed. throw new ServerException(_('Could not create group.')); } if (!isset($uri) || empty($uri)) { $orig = clone $group; $group->uri = common_local_url('groupbyid', array('id' => $group->id)); $result = $group->update($orig); if (!$result) { common_log_db_error($group, 'UPDATE', __FILE__); // TRANS: Server exception thrown when updating a group URI failed. throw new ServerException(_('Could not set group URI.')); } } $result = $group->setAliases($aliases); if (!$result) { // TRANS: Server exception thrown when creating group aliases failed. throw new ServerException(_('Could not create aliases.')); } $member = new Group_member(); $member->group_id = $group->id; $member->profile_id = $userid; $member->is_admin = 1; $member->created = $group->created; $result = $member->insert(); if (!$result) { common_log_db_error($member, 'INSERT', __FILE__); // TRANS: Server exception thrown when setting group membership failed. throw new ServerException(_('Could not set group membership.')); } self::blow('profile:groups:%d', $userid); if ($local) { $local_group = new Local_group(); $local_group->group_id = $group->id; $local_group->nickname = $nickname; $local_group->created = common_sql_now(); $result = $local_group->insert(); if (!$result) { common_log_db_error($local_group, 'INSERT', __FILE__); // TRANS: Server exception thrown when saving local group information failed. throw new ServerException(_('Could not save local group info.')); } } $group->query('COMMIT'); Event::handle('EndGroupSave', array($group)); } return $group; }
static function register($fields) { // MAGICALLY put fields into current scope extract($fields); $group = new User_group(); $group->query('BEGIN'); if (empty($uri)) { // fill in later... $uri = null; } $group->nickname = $nickname; $group->fullname = $fullname; $group->homepage = $homepage; $group->description = $description; $group->location = $location; $group->uri = $uri; $group->mainpage = $mainpage; $group->created = common_sql_now(); $result = $group->insert(); if (!$result) { common_log_db_error($group, 'INSERT', __FILE__); // TRANS: Server exception thrown when creating a group failed. throw new ServerException(_('Could not create group.')); } if (!isset($uri) || empty($uri)) { $orig = clone $group; $group->uri = common_local_url('groupbyid', array('id' => $group->id)); $result = $group->update($orig); if (!$result) { common_log_db_error($group, 'UPDATE', __FILE__); // TRANS: Server exception thrown when updating a group URI failed. throw new ServerException(_('Could not set group URI.')); } } $result = $group->setAliases($aliases); if (!$result) { // TRANS: Server exception thrown when creating group aliases failed. throw new ServerException(_('Could not create aliases.')); } $member = new Group_member(); $member->group_id = $group->id; $member->profile_id = $userid; $member->is_admin = 1; $member->created = $group->created; $result = $member->insert(); if (!$result) { common_log_db_error($member, 'INSERT', __FILE__); // TRANS: Server exception thrown when setting group membership failed. throw new ServerException(_('Could not set group membership.')); } if ($local) { $local_group = new Local_group(); $local_group->group_id = $group->id; $local_group->nickname = $nickname; $local_group->created = common_sql_now(); $result = $local_group->insert(); if (!$result) { common_log_db_error($local_group, 'INSERT', __FILE__); // TRANS: Server exception thrown when saving local group information failed. throw new ServerException(_('Could not save local group info.')); } } $group->query('COMMIT'); return $group; }
function initLocalGroup() { printfnq("Ensuring all local user groups have a local_group..."); $group = new User_group(); $group->whereAdd('NOT EXISTS (select group_id from local_group where group_id = user_group.id)'); $group->find(); while ($group->fetch()) { try { // Hack to check for local groups if ($group->getUri() == common_local_url('groupbyid', array('id' => $group->id))) { $lg = new Local_group(); $lg->group_id = $group->id; $lg->nickname = $group->nickname; $lg->created = $group->created; // XXX: common_sql_now() ? $lg->modified = $group->modified; $lg->insert(); } } catch (Exception $e) { printfv("Error initializing local group for {$group->nickname}:" . $e->getMessage()); } } printfnq("DONE.\n"); }