]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/apiaccountupdateprofilebackgroundimage.php
add a privacy flag to user table
[quix0rs-gnu-social.git] / actions / apiaccountupdateprofilebackgroundimage.php
index 26d55d448bde6761985c1f31ae42272d01b4f846..f26c30198d40335dec3139550ee616c3ac898d5f 100644 (file)
@@ -42,10 +42,8 @@ require_once INSTALLDIR . '/lib/apiauth.php';
  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link     http://status.net/
  */
-
 class ApiAccountUpdateProfileBackgroundImageAction extends ApiAuthAction
 {
-
     var $tile = false;
 
     /**
@@ -56,7 +54,6 @@ class ApiAccountUpdateProfileBackgroundImageAction extends ApiAuthAction
      * @return boolean success flag
      *
      */
-
     function prepare($args)
     {
         parent::prepare($args);
@@ -76,19 +73,29 @@ class ApiAccountUpdateProfileBackgroundImageAction extends ApiAuthAction
      *
      * @return void
      */
-
     function handle($args)
     {
         parent::handle($args);
 
         if ($_SERVER['REQUEST_METHOD'] != 'POST') {
             $this->clientError(
+                // TRANS: Client error. POST is a HTTP command. It should not be translated.
                 _('This method requires a POST.'),
                 400, $this->format
             );
             return;
         }
 
+        if (!in_array($this->format, array('xml', 'json'))) {
+            $this->clientError(
+                // TRANS: Client error displayed when trying to handle an unknown API method.
+                _('API method not found.'),
+                404,
+                $this->format
+            );
+            return;
+        }
+
         // Workaround for PHP returning empty $_POST and $_FILES when POST
         // length > post_max_size in php.ini
 
@@ -96,18 +103,59 @@ class ApiAccountUpdateProfileBackgroundImageAction extends ApiAuthAction
             && empty($_POST)
             && ($_SERVER['CONTENT_LENGTH'] > 0)
         ) {
-             $msg = _('The server was unable to handle that much POST ' .
-                    'data (%s bytes) due to its current configuration.');
+             // TRANS: Client error displayed when the number of bytes in a POST request exceeds a limit.
+             // TRANS: %s is the number of bytes of the CONTENT_LENGTH.
+             $msg = _m('The server was unable to handle that much POST data (%s byte) due to its current configuration.',
+                      'The server was unable to handle that much POST data (%s bytes) due to its current configuration.',
+                      intval($_SERVER['CONTENT_LENGTH']));
 
             $this->clientError(sprintf($msg, $_SERVER['CONTENT_LENGTH']));
             return;
         }
 
         if (empty($this->user)) {
-            $this->clientError(_('No such user!'), 404, $this->format);
+            // TRANS: Client error when user not found updating a profile background image.
+            $this->clientError(_('No such user.'), 404, $this->format);
             return;
         }
 
+        $design = $this->user->getDesign();
+
+        // XXX: This is kinda gross, but before we can add a background
+        // img we have to make sure there's a Design because design ID
+        // is part of the img filename.
+
+        if (empty($design)) {
+            $this->user->query('BEGIN');
+
+            // save new design
+            $design = new Design();
+            $id = $design->insert();
+
+            if (empty($id)) {
+                common_log_db_error($id, 'INSERT', __FILE__);
+                // TRANS: Client error displayed when saving design settings fails because of an empty id.
+                $this->clientError(_('Unable to save your design settings.'));
+                return;
+            }
+
+            $original              = clone($this->user);
+            $this->user->design_id = $id;
+            $result                = $this->user->update($original);
+
+            if (empty($result)) {
+                common_log_db_error($original, 'UPDATE', __FILE__);
+                // TRANS: Client error displayed when saving design settings fails because of an empty result.
+                $this->clientError(_('Unable to save your design settings.'));
+                $this->user->query('ROLLBACK');
+                return;
+            }
+
+            $this->user->query('COMMIT');
+        }
+
+        // Okay, now get the image and add it to the design
+
         try {
             $imagefile = ImageFile::fromUpload('image');
         } catch (Exception $e) {
@@ -115,8 +163,6 @@ class ApiAccountUpdateProfileBackgroundImageAction extends ApiAuthAction
             return;
         }
 
-        $design = $this->user->getDesign();
-
         $filename = Design::filename(
             $design->id,
             image_type_to_extension($imagefile->type),
@@ -134,31 +180,31 @@ class ApiAccountUpdateProfileBackgroundImageAction extends ApiAuthAction
         }
 
         $original = clone($design);
-
         $design->backgroundimage = $filename;
-
-        $design->setDisposition(true, false, !empty($this->tile));
+        $design->setDisposition(true, false, ($this->tile == 'true'));
 
         $result = $design->update($original);
 
         if ($result === false) {
             common_log_db_error($design, 'UPDATE', __FILE__);
-            $this->showForm(_('Couldn\'t update your design.'));
+            // TRANS: Error displayed when updating design settings fails.
+            $this->showForm(_('Could not update your design.'));
             return;
         }
 
         $profile = $this->user->getProfile();
 
         if (empty($profile)) {
+            // TRANS: Client error displayed when a user has no profile.
             $this->clientError(_('User has no profile.'));
             return;
         }
 
-        $twitter_user = $this->twitterUserArray($this->user->getProfile(), true);
+        $twitter_user = $this->twitterUserArray($profile, true);
 
         if ($this->format == 'xml') {
             $this->initDocument('xml');
-            $this->showTwitterXmlUser($twitter_user);
+            $this->showTwitterXmlUser($twitter_user, 'user', true);
             $this->endDocument('xml');
         } elseif ($this->format == 'json') {
             $this->initDocument('json');
@@ -166,5 +212,4 @@ class ApiAccountUpdateProfileBackgroundImageAction extends ApiAuthAction
             $this->endDocument('json');
         }
     }
-
 }