Implemented create group api

This commit is contained in:
Craig Andrews 2009-09-30 16:35:21 -04:00
parent f7d86f1cc6
commit 96d32fb8d0

View File

@ -428,7 +428,133 @@ require_once INSTALLDIR.'/lib/twitterapi.php';
function create($args, $apidata)
{
die("todo");
parent::handle($args);
common_debug("in groups api action");
if (!common_config('inboxes','enabled')) {
$this->serverError(_('Inboxes must be enabled for groups to work'));
return false;
}
$this->auth_user = $apidata['user'];
$nickname = $args['nickname'];
$fullname = $args['full_name'];
$homepage = $args['homepage'];
$description = $args['description'];
$location = $args['location'];
$aliasstring = $args['aliases'];
if (!Validate::string($nickname, array('min_length' => 1,
'max_length' => 64,
'format' => NICKNAME_FMT))) {
$this->clientError(_('Nickname must have only lowercase letters '.
'and numbers and no spaces.'), $code=403);
return;
} else if ($this->groupNicknameExists($nickname)) {
$this->clientError(_('Nickname already in use. Try another one.'), $code=403);
return;
} else if (!User_group::allowedNickname($nickname)) {
$this->clientError(_('Not a valid nickname.'), $code=403);
return;
} else if (!is_null($homepage) && (strlen($homepage) > 0) &&
!Validate::uri($homepage,
array('allowed_schemes' =>
array('http', 'https')))) {
$this->clientError(_('Homepage is not a valid URL.'), $code=403);
return;
} else if (!is_null($fullname) && mb_strlen($fullname) > 255) {
$this->clientError(_('Full name is too long (max 255 chars).'), $code=403);
return;
} else if (User_group::descriptionTooLong($description)) {
$this->clientError(sprintf(_('description is too long (max %d chars).'), User_group::maxDescription()), $code=403);
return;
} else if (!is_null($location) && mb_strlen($location) > 255) {
$this->clientError(_('Location is too long (max 255 chars).'), $code=403);
return;
}
if (!empty($aliasstring)) {
$aliases = array_map('common_canonical_nickname', array_unique(preg_split('/[\s,]+/', $aliasstring)));
} else {
$aliases = array();
}
if (count($aliases) > common_config('group', 'maxaliases')) {
$this->clientError(sprintf(_('Too many aliases! Maximum %d.'),
common_config('group', 'maxaliases')), $code=403);
return;
}
foreach ($aliases as $alias) {
if (!Validate::string($alias, array('min_length' => 1,
'max_length' => 64,
'format' => NICKNAME_FMT))) {
$this->clientError(sprintf(_('Invalid alias: "%s"'), $alias), $code=403);
return;
}
if ($this->groupNicknameExists($alias)) {
$this->clientError(sprintf(_('Alias "%s" already in use. Try another one.'),
$alias), $code=403);
return;
}
// XXX assumes alphanum nicknames
if (strcmp($alias, $nickname) == 0) {
$this->clientError(_('Alias can\'t be the same as nickname.'), $code=403);
return;
}
}
$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.'));
}
$result = $group->setAliases($aliases);
if (!$result) {
$this->serverError(_('Could not create aliases.'));
}
$member = new Group_member();
$member->group_id = $group->id;
$member->profile_id = $this->auth_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.'));
}
$group->query('COMMIT');
switch($apidata['content-type']) {
case 'xml':
$this->show_single_xml_group($group);
break;
case 'json':
$this->show_single_json_group($group);
break;
default:
$this->clientError(_('API method not found!'), $code = 404);
}
}
function update($args, $apidata)
@ -450,4 +576,21 @@ require_once INSTALLDIR.'/lib/twitterapi.php';
{
die("todo");
}
function groupNicknameExists($nickname)
{
$group = User_group::staticGet('nickname', $nickname);
if (!empty($group)) {
return true;
}
$alias = Group_alias::staticGet('alias', $nickname);
if (!empty($alias)) {
return true;
}
return false;
}
}