/**
  * Handle the request
  *
  * Check whether the credentials are valid and output the result
  *
  * @param array $args $_REQUEST data (unused)
  *
  * @return void
  */
 function handle($args)
 {
     parent::handle($args);
     if ($_SERVER['REQUEST_METHOD'] != 'POST') {
         $this->clientError(_('This method requires a POST.'), 400, $this->format);
         return;
     }
     if (!in_array($this->format, array('xml', 'json'))) {
         $this->clientError(_('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
     if (empty($_FILES) && empty($_POST) && $_SERVER['CONTENT_LENGTH'] > 0) {
         // 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)) {
         // 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) {
         $this->clientError($e->getMessage(), 400, $this->format);
         return;
     }
     $filename = Design::filename($design->id, image_type_to_extension($imagefile->type), common_timestamp());
     $filepath = Design::path($filename);
     move_uploaded_file($imagefile->filepath, $filepath);
     // delete any old backround img laying around
     if (isset($design->backgroundimage)) {
         @unlink(Design::path($design->backgroundimage));
     }
     $original = clone $design;
     $design->backgroundimage = $filename;
     $design->setDisposition(true, false, $this->tile == 'true');
     $result = $design->update($original);
     if ($result === false) {
         common_log_db_error($design, 'UPDATE', __FILE__);
         // 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($profile, true);
     if ($this->format == 'xml') {
         $this->initDocument('xml');
         $this->showTwitterXmlUser($twitter_user, 'user', true);
         $this->endDocument('xml');
     } elseif ($this->format == 'json') {
         $this->initDocument('json');
         $this->showJsonObjects($twitter_user);
         $this->endDocument('json');
     }
 }
예제 #2
0
 /**
  * Save or update the group's design settings
  *
  * @return void
  */
 function saveDesign()
 {
     try {
         $bgcolor = new WebColor($this->trimmed('design_background'));
         $ccolor = new WebColor($this->trimmed('design_content'));
         $sbcolor = new WebColor($this->trimmed('design_sidebar'));
         $tcolor = new WebColor($this->trimmed('design_text'));
         $lcolor = new WebColor($this->trimmed('design_links'));
     } catch (WebColorException $e) {
         $this->showForm($e->getMessage());
         return;
     }
     $onoff = $this->arg('design_background-image_onoff');
     $on = false;
     $off = false;
     $tile = false;
     if ($onoff == 'on') {
         $on = true;
     } else {
         $off = true;
     }
     $repeat = $this->boolean('design_background-image_repeat');
     if ($repeat) {
         $tile = true;
     }
     $design = $this->group->getDesign();
     if (!empty($design)) {
         // update design
         $original = clone $design;
         $design->backgroundcolor = $bgcolor->intValue();
         $design->contentcolor = $ccolor->intValue();
         $design->sidebarcolor = $sbcolor->intValue();
         $design->textcolor = $tcolor->intValue();
         $design->linkcolor = $lcolor->intValue();
         $design->setDisposition($on, $off, $tile);
         $result = $design->update($original);
         if ($result === false) {
             common_log_db_error($design, 'UPDATE', __FILE__);
             $this->showForm(_('Couldn\'t update your design.'));
             return;
         }
     } else {
         $this->group->query('BEGIN');
         // save new design
         $design = new Design();
         $design->backgroundcolor = $bgcolor->intValue();
         $design->contentcolor = $ccolor->intValue();
         $design->sidebarcolor = $sbcolor->intValue();
         $design->textcolor = $tcolor->intValue();
         $design->linkcolor = $lcolor->intValue();
         $design->setDisposition($on, $off, $tile);
         $id = $design->insert();
         if (empty($id)) {
             common_log_db_error($id, 'INSERT', __FILE__);
             $this->showForm(_('Unable to save your design settings!'));
             return;
         }
         $original = clone $this->group;
         $this->group->design_id = $id;
         $result = $this->group->update($original);
         if (empty($result)) {
             common_log_db_error($original, 'UPDATE', __FILE__);
             $this->showForm(_('Unable to save your design settings!'));
             $this->group->query('ROLLBACK');
             return;
         }
         $this->group->query('COMMIT');
     }
     $this->saveBackgroundImage($design);
     $this->showForm(_('Design preferences saved.'), true);
 }
예제 #3
0
 /**
  * Alternate default colors
  *
  * @return nothing
  */
 function sethd()
 {
     $user = common_current_user();
     $design = $user->getDesign();
     $user->query('BEGIN');
     // alternate colors
     $design = new Design();
     $design->backgroundcolor = 16184329;
     $design->contentcolor = 16059904;
     $design->sidebarcolor = 16059904;
     $design->textcolor = 0;
     $design->linkcolor = 16777215;
     $design->setDisposition(false, true, false);
     $id = $design->insert();
     if (empty($id)) {
         common_log_db_error($id, 'INSERT', __FILE__);
         $this->showForm(_('Unable to save your design settings!'));
         return;
     }
     $original = clone $user;
     $user->design_id = $id;
     $result = $user->update($original);
     if (empty($result)) {
         common_log_db_error($original, 'UPDATE', __FILE__);
         $this->showForm(_('Unable to save your design settings!'));
         $user->query('ROLLBACK');
         return;
     }
     $user->query('COMMIT');
     $this->saveBackgroundImage($design);
     $this->showForm(_('Enjoy your hotdog!'), true);
 }