static function join($group_id, $profile_id) { $member = new Group_member(); $member->group_id = $group_id; $member->profile_id = $profile_id; $member->created = common_sql_now(); $result = $member->insert(); if (!$result) { common_log_db_error($member, 'INSERT', __FILE__); throw new Exception(_("Group join failed.")); } return true; }
/** * Method to add a user to a group. * In most cases, you should call Profile->joinGroup() instead. * * @param integer $group_id Group to add to * @param integer $profile_id Profile being added * * @return Group_member new membership object */ static function join($group_id, $profile_id) { $member = new Group_member(); $member->group_id = $group_id; $member->profile_id = $profile_id; $member->created = common_sql_now(); $member->uri = self::newURI($profile_id, $group_id, $member->created); $result = $member->insert(); if (!$result) { common_log_db_error($member, 'INSERT', __FILE__); // TRANS: Exception thrown when joining a group fails. throw new Exception(_("Group join failed.")); } return $member; }
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; }
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; }
/** * Handle the request * * Save the new message * * @param array $args $_REQUEST data (unused) * * @return void */ function handle($args) { parent::handle($args); if ($_SERVER['REQUEST_METHOD'] != 'POST') { $this->clientError(_('This method requires a POST.'), 400, $this->format); return; } if (empty($this->user)) { // TRANS: Client error displayed when trying to have a non-existing user join a group. $this->clientError(_('No such user.'), 404, $this->format); return; } if (empty($this->group)) { // TRANS: Client error displayed when trying to join a group that does not exist. $this->clientError(_('Group not found.'), 404, $this->format); return false; } if ($this->user->isMember($this->group)) { $this->clientError(_('You are already a member of that group.'), 403, $this->format); return; } if (Group_block::isBlocked($this->group, $this->user->getProfile())) { $this->clientError(_('You have been blocked from that group by the admin.'), 403, $this->format); return; } $member = new Group_member(); $member->group_id = $this->group->id; $member->profile_id = $this->user->id; $member->created = common_sql_now(); $result = $member->insert(); if (!$result) { common_log_db_error($member, 'INSERT', __FILE__); $this->serverError(sprintf(_('Could not join user %1$s to group %2$s.'), $this->user->nickname, $this->group->nickname)); return; } switch ($this->format) { case 'xml': $this->showSingleXmlGroup($this->group); break; case 'json': $this->showSingleJsonGroup($this->group); break; default: $this->clientError(_('API method not found.'), 404, $this->format); break; } }
function trySave() { $nickname = $this->trimmed('nickname'); $fullname = $this->trimmed('fullname'); $homepage = $this->trimmed('homepage'); $description = $this->trimmed('description'); $location = $this->trimmed('location'); if (!Validate::string($nickname, array('min_length' => 1, 'max_length' => 64, 'format' => NICKNAME_FMT))) { $this->showForm(_('Nickname must have only lowercase letters ' . 'and numbers and no spaces.')); return; } else { if ($this->nicknameExists($nickname)) { $this->showForm(_('Nickname already in use. Try another one.')); return; } else { if (!User_group::allowedNickname($nickname)) { $this->showForm(_('Not a valid nickname.')); return; } else { if (!is_null($homepage) && strlen($homepage) > 0 && !Validate::uri($homepage, array('allowed_schemes' => array('http', 'https')))) { $this->showForm(_('Homepage is not a valid URL.')); return; } else { if (!is_null($fullname) && mb_strlen($fullname) > 255) { $this->showForm(_('Full name is too long (max 255 chars).')); return; } else { if (!is_null($description) && mb_strlen($description) > 140) { $this->showForm(_('description is too long (max 140 chars).')); return; } else { if (!is_null($location) && mb_strlen($location) > 255) { $this->showForm(_('Location is too long (max 255 chars).')); return; } } } } } } } $cur = common_current_user(); // Checked in prepare() above assert(!is_null($cur)); $group = new User_group(); $group->query('BEGIN'); $group->nickname = $nickname; $group->fullname = $fullname; $group->homepage = $homepage; $group->description = $description; $group->location = $location; $group->created = common_sql_now(); $result = $group->insert(); if (!$result) { common_log_db_error($group, 'INSERT', __FILE__); $this->serverError(_('Could not create group.')); } $member = new Group_member(); $member->group_id = $group->id; $member->profile_id = $cur->id; $member->is_admin = 1; $member->created = $group->created; $result = $member->insert(); if (!$result) { common_log_db_error($member, 'INSERT', __FILE__); $this->serverError(_('Could not set group membership.')); } $group->query('COMMIT'); common_redirect($group->homeUrl(), 307); }
try { $user = User::getKV('nickname', $nickname); if (empty($user)) { throw new Exception("No user named '{$nickname}'."); } $group = User_group::getKV('nickname', $groupname); if (empty($group)) { throw new Exception("No group named '{$groupname}'."); } $member = Group_member::pkeyGet(array('group_id' => $group->id, 'profile_id' => $user->id)); if (empty($member)) { $member = new Group_member(); $member->group_id = $group->id; $member->profile_id = $user->id; $member->created = common_sql_now(); if (!$member->insert()) { throw new Exception("Can't add '{$nickname}' to '{$groupname}'."); } } if ($member->is_admin) { throw new Exception("'{$nickname}' is already an admin of '{$groupname}'."); } $orig = clone $member; $member->is_admin = 1; if (!$member->update($orig)) { throw new Exception("Can't make '{$nickname}' admin of '{$groupname}'."); } } catch (Exception $e) { print $e->getMessage() . "\n"; exit(1); }
/** * Handle the request * * On POST, add the current user to the group * * @param array $args unused * * @return void */ function handle($args) { parent::handle($args); $cur = common_current_user(); $member = new Group_member(); $member->group_id = $this->group->id; $member->profile_id = $cur->id; $member->created = common_sql_now(); $result = $member->insert(); if (!$result) { common_log_db_error($member, 'INSERT', __FILE__); $this->serverError(sprintf(_('Could not join user %s to group %s'), $cur->nickname, $this->group->nickname)); } if ($this->boolean('ajax')) { $this->startHTML('text/xml;charset=utf-8'); $this->elementStart('head'); $this->element('title', null, sprintf(_('%s joined group %s'), $cur->nickname, $this->group->nickname)); $this->elementEnd('head'); $this->elementStart('body'); $lf = new LeaveForm($this, $this->group); $lf->show(); $this->elementEnd('body'); $this->elementEnd('html'); } else { common_redirect(common_local_url('groupmembers', array('nickname' => $this->group->nickname))); } }