]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/apigroupcreate.php
correctly check for local notice to status mappings when notice originated here
[quix0rs-gnu-social.git] / actions / apigroupcreate.php
index d6340eebfc1e2814939ef3a517edb2dd787e586c..d216c15cd4f4be0e6a17c0f9a5083f925756e840 100644 (file)
  * @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.
+ * @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/
  */
@@ -39,6 +42,9 @@ require_once INSTALLDIR . '/lib/apiauth.php';
  *
  * @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/
@@ -94,26 +100,17 @@ class ApiGroupCreateAction extends ApiAuthAction
     {
         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;
         }
 
@@ -121,60 +118,14 @@ class ApiGroupCreateAction extends ApiAuthAction
             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,
+                                            'local'    => true));
 
         switch($this->format) {
         case 'xml':
@@ -185,7 +136,7 @@ class ApiGroupCreateAction extends ApiAuthAction
             break;
         default:
             $this->clientError(
-                _('API method not found!'),
+                _('API method not found.'),
                 404,
                 $this->format
             );
@@ -202,14 +153,15 @@ class ApiGroupCreateAction extends ApiAuthAction
 
     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 ' .
@@ -234,24 +186,24 @@ class ApiGroupCreateAction extends ApiAuthAction
             );
             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,
@@ -259,16 +211,18 @@ class ApiGroupCreateAction extends ApiAuthAction
                 );
             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,
@@ -280,9 +234,7 @@ class ApiGroupCreateAction extends ApiAuthAction
         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();
@@ -290,24 +242,29 @@ class ApiGroupCreateAction extends ApiAuthAction
 
         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),
+                    sprintf(_('Invalid alias: "%s".'), $alias),
                     403,
                     $this->format
                 );
@@ -315,8 +272,10 @@ class ApiGroupCreateAction extends ApiAuthAction
             }
             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
                 );
@@ -340,21 +299,29 @@ class ApiGroupCreateAction extends ApiAuthAction
         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);
+        $local = Local_group::staticGet('nickname', $nickname);
 
-       if (!empty($group)) {
-           return true;
-       }
+        if (!empty($local)) {
+            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;
     }
 
 }