* @category API
* @package StatusNet
* @author Craig Andrews <candrews@integralblue.com>
+ * @author Evan Prodromou <evan@status.net>
+ * @author Jeffery To <jeffery.to@gmail.com>
* @author Zach Copley <zach@status.net>
* @copyright 2009 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
*
* @category API
* @package StatusNet
+ * @author Craig Andrews <candrews@integralblue.com>
+ * @author Evan Prodromou <evan@status.net>
+ * @author Jeffery To <jeffery.to@gmail.com>
* @author Zach Copley <zach@status.net>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
{
parent::handle($args);
- if (!common_config('inboxes','enabled')) {
- $this->serverError(
- _('Inboxes must be enabled for groups to work'),
- 400,
- $this->format
- );
- return false;
- }
-
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
- $this->clientError(
- _('This method requires a POST.'),
- 400,
- $this->format
- );
- return;
+ $this->clientError(
+ _('This method requires a POST.'),
+ 400,
+ $this->format
+ );
+ return;
}
if (empty($this->user)) {
- $this->clientError(_('No such user!'), 404, $this->format);
+ $this->clientError(_('No such user.'), 404, $this->format);
return;
}
return;
}
- $group = new User_group();
-
- $group->query('BEGIN');
-
- $group->nickname = $this->nickname;
- $group->fullname = $this->fullname;
- $group->homepage = $this->homepage;
- $group->description = $this->description;
- $group->location = $this->location;
- $group->created = common_sql_now();
-
- $result = $group->insert();
-
- if (!$result) {
- common_log_db_error($group, 'INSERT', __FILE__);
- $this->serverError(
- _('Could not create group.'),
- 500,
- $this->format
- );
- return;
- }
-
- $result = $group->setAliases($this->aliases);
-
- if (!$result) {
- $this->serverError(
- _('Could not create aliases.'),
- 500,
- $this->format
- );
- return;
- }
-
- $member = new Group_member();
-
- $member->group_id = $group->id;
- $member->profile_id = $this->user->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.'),
- 500,
- $this->format
- );
- return;
- }
-
- $group->query('COMMIT');
-
+ $group = User_group::register(array('nickname' => $this->nickname,
+ 'fullname' => $this->fullname,
+ 'homepage' => $this->homepage,
+ 'description' => $this->description,
+ 'location' => $this->location,
+ 'aliases' => $this->aliases,
+ 'userid' => $this->user->id));
switch($this->format) {
case 'xml':
$this->showSingleXmlGroup($group);
break;
default:
$this->clientError(
- _('API method not found!'),
+ _('API method not found.'),
404,
$this->format
);
function validateParams()
{
- if (!Validate::string(
+ $valid = Validate::string(
$this->nickname, array(
'min_length' => 1,
'max_length' => 64,
- 'format' => NICKNAME_FMT)
- )
+ 'format' => NICKNAME_FMT
)
- {
+ );
+
+ if (!$valid) {
$this->clientError(
_(
'Nickname must have only lowercase letters ' .
);
return false;
- } elseif (!is_null($this->homepage)
+ } elseif (
+ !is_null($this->homepage)
&& strlen($this->homepage) > 0
&& !Validate::uri(
$this->homepage, array(
'allowed_schemes' =>
array('http', 'https')
)
- ))
- {
+ )) {
$this->clientError(
_('Homepage is not a valid URL.'),
403,
$this->format
);
return false;
- } elseif (!is_null($this->fullname)
- && mb_strlen($this->fullname) > 255)
- {
+ } elseif (
+ !is_null($this->fullname)
+ && mb_strlen($this->fullname) > 255) {
$this->clientError(
_('Full name is too long (max 255 chars).'),
403,
);
return false;
} elseif (User_group::descriptionTooLong($this->description)) {
- $this->clientError(sprintf(
- _('Description is too long (max %d chars).'),
- User_group::maxDescription()),
- 403,
- $this->format
- );
+ $this->clientError(
+ sprintf(
+ _('Description is too long (max %d chars).'),
+ User_group::maxDescription()
+ ),
+ 403,
+ $this->format
+ );
return false;
- } elseif (!is_null($this->location)
- && mb_strlen($this->location) > 255)
- {
+ } elseif (
+ !is_null($this->location)
+ && mb_strlen($this->location) > 255) {
$this->clientError(
_('Location is too long (max 255 chars).'),
403,
if (!empty($this->aliasstring)) {
$this->aliases = array_map(
'common_canonical_nickname',
- array_unique(preg_split('/[\s,]+/',
- $this->aliasstring)
- )
+ array_unique(preg_split('/[\s,]+/', $this->aliasstring))
);
} else {
$this->aliases = array();
if (count($this->aliases) > common_config('group', 'maxaliases')) {
$this->clientError(
- sprintf(_('Too many aliases! Maximum %d.'),
- common_config('group', 'maxaliases')),
- 403,
- $this->format
- );
+ sprintf(
+ _('Too many aliases! Maximum %d.'),
+ common_config('group', 'maxaliases')
+ ),
+ 403,
+ $this->format
+ );
return false;
}
foreach ($this->aliases as $alias) {
- if (!Validate::string($alias, array(
- 'min_length' => 1,
- 'max_length' => 64,
- 'format' => NICKNAME_FMT
+
+ $valid = Validate::string(
+ $alias, array(
+ 'min_length' => 1,
+ 'max_length' => 64,
+ 'format' => NICKNAME_FMT
)
- ))
- {
+ );
+
+ if (!$valid) {
$this->clientError(
sprintf(_('Invalid alias: "%s"'), $alias),
403,
}
if ($this->groupNicknameExists($alias)) {
$this->clientError(
- sprintf(_('Alias "%s" already in use. Try another one.'),
- $alias),
+ sprintf(
+ _('Alias "%s" already in use. Try another one.'),
+ $alias
+ ),
403,
$this->format
);
return true;
}
+ /**
+ * Check to see whether a nickname is already in use by a group
+ *
+ * @param String $nickname The nickname in question
+ *
+ * @return boolean true or false
+ */
+
function groupNicknameExists($nickname)
{
- $group = User_group::staticGet('nickname', $nickname);
+ $group = User_group::staticGet('nickname', $nickname);
- if (!empty($group)) {
- return true;
- }
+ if (!empty($group)) {
+ return true;
+ }
- $alias = Group_alias::staticGet('alias', $nickname);
+ $alias = Group_alias::staticGet('alias', $nickname);
- if (!empty($alias)) {
- return true;
- }
+ if (!empty($alias)) {
+ return true;
+ }
- return false;
+ return false;
}
}