* @author Jeffery To <jeffery.to@gmail.com>
* @author Zach Copley <zach@status.net>
* @copyright 2009 StatusNet, Inc.
+ * @copyright 2009 Free Software Foundation, Inc http://www.fsf.org
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
exit(1);
}
-require_once INSTALLDIR . '/lib/apiauth.php';
-
/**
* Make a new group. Sets the authenticated user as the administrator of the group.
*
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
-
class ApiGroupCreateAction extends ApiAuthAction
{
+ protected $needPost = true;
+
var $group = null;
var $nickname = null;
var $fullname = null;
* @param array $args $_REQUEST args
*
* @return boolean success flag
- *
*/
-
- function prepare($args)
+ protected function prepare(array $args=array())
{
parent::prepare($args);
- $this->user = $this->auth_user;
-
- $this->nickname = $this->arg('nickname');
+ $this->nickname = Nickname::normalize($this->arg('nickname'), true);
$this->fullname = $this->arg('full_name');
$this->homepage = $this->arg('homepage');
$this->description = $this->arg('description');
*
* Save the new group
*
- * @param array $args $_REQUEST data (unused)
- *
* @return void
*/
-
- function handle($args)
+ protected function handle()
{
- parent::handle($args);
-
- if ($_SERVER['REQUEST_METHOD'] != 'POST') {
- $this->clientError(
- _('This method requires a POST.'),
- 400,
- $this->format
- );
- return;
- }
+ parent::handle();
if (empty($this->user)) {
- $this->clientError(_('No such user.'), 404, $this->format);
- return;
+ // TRANS: Client error given when a user was not found (404).
+ $this->clientError(_('No such user.'), 404);
}
if ($this->validateParams() == false) {
$this->showSingleJsonGroup($group);
break;
default:
- $this->clientError(
- _('API method not found.'),
- 404,
- $this->format
- );
- break;
+ // TRANS: Client error displayed when coming across a non-supported API method.
+ $this->clientError(_('API method not found.'), 404);
}
-
}
/**
*
* @return void
*/
-
function validateParams()
{
- $valid = Validate::string(
- $this->nickname, array(
- 'min_length' => 1,
- 'max_length' => 64,
- 'format' => NICKNAME_FMT
- )
- );
+ if (!is_null($this->homepage)
+ && strlen($this->homepage) > 0
+ && !common_valid_http_url($this->homepage)) {
+ // TRANS: Client error in form for group creation.
+ $this->clientError(_('Homepage is not a valid URL.'), 403);
- if (!$valid) {
- $this->clientError(
- _(
- 'Nickname must have only lowercase letters ' .
- 'and numbers and no spaces.'
- ),
- 403,
- $this->format
- );
- return false;
- } elseif ($this->groupNicknameExists($this->nickname)) {
- $this->clientError(
- _('Nickname already in use. Try another one.'),
- 403,
- $this->format
- );
- return false;
- } else if (!User_group::allowedNickname($this->nickname)) {
- $this->clientError(
- _('Not a valid nickname.'),
- 403,
- $this->format
- );
- return false;
+ } elseif (!is_null($this->fullname)
+ && mb_strlen($this->fullname) > 255) {
+ // TRANS: Client error in form for group creation.
+ $this->clientError(_('Full name is too long (maximum 255 characters).'), 403);
- } 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) {
- $this->clientError(
- _('Full name is too long (max 255 chars).'),
- 403,
- $this->format
- );
- return false;
} elseif (User_group::descriptionTooLong($this->description)) {
- $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) {
- $this->clientError(
- _('Location is too long (max 255 chars).'),
- 403,
- $this->format
- );
- return false;
+ // TRANS: Client error shown when providing too long a description during group creation.
+ // TRANS: %d is the maximum number of allowed characters.
+ $this->clientError(sprintf(_m('Description is too long (maximum %d character).',
+ 'Description is too long (maximum %d characters).',
+ User_group::maxDescription()), User_group::maxDescription()), 403);
+
+ } elseif (!is_null($this->location)
+ && mb_strlen($this->location) > 255) {
+ // TRANS: Client error shown when providing too long a location during group creation.
+ $this->clientError(_('Location is too long (maximum 255 characters).'), 403);
}
if (!empty($this->aliasstring)) {
$this->aliases = array_map(
- 'common_canonical_nickname',
+ array('Nickname', 'normalize'), // static call to Nickname::normalize
array_unique(preg_split('/[\s,]+/', $this->aliasstring))
);
} else {
}
if (count($this->aliases) > common_config('group', 'maxaliases')) {
- $this->clientError(
- sprintf(
- _('Too many aliases! Maximum %d.'),
- common_config('group', 'maxaliases')
- ),
- 403,
- $this->format
- );
- return false;
+ $this->clientError(sprintf(
+ // TRANS: Client error shown when providing too many aliases during group creation.
+ // TRANS: %d is the maximum number of allowed aliases.
+ _m('Too many aliases! Maximum %d allowed.',
+ 'Too many aliases! Maximum %d allowed.',
+ common_config('group', 'maxaliases')),
+ common_config('group', 'maxaliases')),
+ 403);
}
- foreach ($this->aliases as $alias) {
-
- $valid = Validate::string(
- $alias, array(
- 'min_length' => 1,
- 'max_length' => 64,
- 'format' => NICKNAME_FMT
- )
- );
-
- if (!$valid) {
- $this->clientError(
- sprintf(_('Invalid alias: "%s".'), $alias),
- 403,
- $this->format
- );
- return false;
- }
- if ($this->groupNicknameExists($alias)) {
- $this->clientError(
- sprintf(
- _('Alias "%s" already in use. Try another one.'),
- $alias
- ),
- 403,
- $this->format
- );
- return false;
- }
-
- // XXX assumes alphanum nicknames
-
- if (strcmp($alias, $this->nickname) == 0) {
- $this->clientError(
- _('Alias can\'t be the same as nickname.'),
- 403,
- $this->format
- );
- return false;
- }
- }
-
- // Evarything looks OK
+ // Everything looks OK
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)
- {
- $local = Local_group::staticGet('nickname', $nickname);
-
- if (!empty($local)) {
- return true;
- }
-
- $alias = Group_alias::staticGet('alias', $nickname);
-
- if (!empty($alias)) {
- return true;
- }
-
- return false;
- }
-
}