]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Merge branch '0.9.x' into finish-account-api
authorZach Copley <zach@status.net>
Tue, 10 Nov 2009 23:25:43 +0000 (15:25 -0800)
committerZach Copley <zach@status.net>
Tue, 10 Nov 2009 23:25:43 +0000 (15:25 -0800)
* 0.9.x:
  Added a events for the settings menu items
  Bringing Sphinx search support up to code: broken out to a plugin, now supports multiple sites on a single server.
  Changed to Evan's event style and added an AuthPlugin superclass
  add geo output to statuses in json, xml, atom, rss in API
  Localisation updates from translatewiki.net (2009-11-10)
  Localisation updates from translatewiki.net
  Update pot
  add lat and long parameters to api/statuses/update
  change credential check to work more like other events
  fixup output of object attributes in db error code
  Performance fix for subscription/subscriber lists based on feedback from ops.
  Adjusting indexes to make favorites query more efficient, based on feedback from ops.
  Revert untested code; spews PHP notice warnings on every page view: "just sent a http 200 for the check-fancy from install.php"
  Added hook for the Group navigation items
  Updated block @title text (shouldn't say from group)
  Updated group block markup
  Revert "Remove more contractions"

actions/apiaccountratelimitstatus.php
actions/apiaccountupdatedeliverydevice.php [new file with mode: 0644]
actions/apiaccountupdateprofile.php [new file with mode: 0644]
actions/apiaccountupdateprofilebackgroundimage.php [new file with mode: 0644]
actions/apiaccountupdateprofilecolors.php [new file with mode: 0644]
actions/apiaccountupdateprofileimage.php
lib/api.php
lib/router.php

index 96179f175b87a582ef60054c83156395461bc7e7..1a5afd552c90d8c1d43b6ecdb0cd257dfd40d356 100644 (file)
@@ -67,7 +67,7 @@ class ApiAccountRateLimitStatusAction extends ApiBareAuthAction
 
         if (!in_array($this->format, array('xml', 'json'))) {
             $this->clientError(
-                _('API method not found!'),
+                _('API method not found.'),
                 404,
                 $this->format
             );
diff --git a/actions/apiaccountupdatedeliverydevice.php b/actions/apiaccountupdatedeliverydevice.php
new file mode 100644 (file)
index 0000000..684906f
--- /dev/null
@@ -0,0 +1,157 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Update the authenticating user notification channels
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  API
+ * @package   StatusNet
+ * @author    Zach Copley <zach@status.net>
+ * @copyright 2009 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+
+require_once INSTALLDIR . '/lib/apiauth.php';
+
+/**
+ * Sets which channel (device) StatusNet delivers updates to for
+ * the authenticating user. Sending none as the device parameter
+ * will disable IM and/or SMS updates.
+ *
+ * @category API
+ * @package  StatusNet
+ * @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/
+ */
+
+class ApiAccountUpdateDeliveryDeviceAction extends ApiAuthAction
+{
+    /**
+     * Take arguments for running
+     *
+     * @param array $args $_REQUEST args
+     *
+     * @return boolean success flag
+     *
+     */
+
+    function prepare($args)
+    {
+        parent::prepare($args);
+
+        $this->user   = $this->auth_user;
+        $this->device = $this->trimmed('device');
+
+        return true;
+    }
+
+    /**
+     * Handle the request
+     *
+     * See which request params have been set, and update the user settings
+     *
+     * @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;
+        }
+
+        // Note: Twitter no longer supports IM
+
+        if (!in_array(strtolower($this->device), array('sms', 'im', 'none'))) {
+            $this->clientError(
+                _(
+                    'You must specify a parameter named ' .
+                    '\'device\' with a value of one of: sms, im, none'
+                )
+            );
+            return;
+        }
+
+        if (empty($this->user)) {
+            $this->clientError(_('No such user.'), 404, $this->format);
+            return;
+        }
+
+        $original = clone($this->user);
+
+        if (strtolower($this->device) == 'sms') {
+            $this->user->smsnotify = true;
+        } elseif (strtolower($this->device) == 'im') {
+            $this->user->jabbernotify = true;
+        } elseif (strtolower($this->device == 'none')) {
+            $this->user->smsnotify    = false;
+            $this->user->jabbernotify = false;
+        }
+
+        $result = $this->user->update($original);
+
+        if ($result === false) {
+            common_log_db_error($this->user, 'UPDATE', __FILE__);
+            $this->serverError(_('Could not update user.'));
+            return;
+        }
+
+        $profile = $this->user->getProfile();
+
+        $twitter_user = $this->twitterUserArray($profile, true);
+
+        // Note: this Twitter API method is retarded because it doesn't give
+        // any success/failure information. Twitter's docs claim that the
+        // notification field will change to reflect notification choice,
+        // but that's not true; notification> is used to indicate
+        // whether the auth user is following the user in question.
+
+        if ($this->format == 'xml') {
+            $this->initDocument('xml');
+            $this->showTwitterXmlUser($twitter_user);
+            $this->endDocument('xml');
+        } elseif ($this->format == 'json') {
+            $this->initDocument('json');
+            $this->showJsonObjects($twitter_user);
+            $this->endDocument('json');
+        }
+    }
+
+}
diff --git a/actions/apiaccountupdateprofile.php b/actions/apiaccountupdateprofile.php
new file mode 100644 (file)
index 0000000..fd4384a
--- /dev/null
@@ -0,0 +1,166 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Update the authenticating user's profile
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  API
+ * @package   StatusNet
+ * @author    Zach Copley <zach@status.net>
+ * @copyright 2009 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+
+require_once INSTALLDIR . '/lib/apiauth.php';
+
+/**
+ * API analog to the profile settings page
+ * Only the parameters specified will be updated.
+ *
+ * @category API
+ * @package  StatusNet
+ * @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/
+ */
+
+class ApiAccountUpdateProfileAction extends ApiAuthAction
+{
+
+    /**
+     * Take arguments for running
+     *
+     * @param array $args $_REQUEST args
+     *
+     * @return boolean success flag
+     *
+     */
+
+    function prepare($args)
+    {
+        parent::prepare($args);
+
+        $this->user = $this->auth_user;
+
+        $this->name        = $this->trimmed('name');
+        $this->url         = $this->trimmed('url');
+        $this->location    = $this->trimmed('location');
+        $this->description = $this->trimmed('description');
+
+        return true;
+    }
+
+    /**
+     * Handle the request
+     *
+     * See which request params have been set, and update the profile
+     *
+     * @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;
+        }
+
+        if (empty($this->user)) {
+            $this->clientError(_('No such user.'), 404, $this->format);
+            return;
+        }
+
+        $profile = $this->user->getProfile();
+
+        if (empty($profile)) {
+            $this->clientError(_('User has no profile.'));
+            return;
+        }
+
+        $original = clone($profile);
+
+        if (empty($this->name)) {
+            $profile->fullname = $this->name;
+        }
+
+        if (empty($this->url)) {
+            $profile->homepage = $this->url;
+        }
+
+        if (!empty($this->description)) {
+            $profile->bio = $this->description;
+        }
+
+        if (!empty($this->location)) {
+            $profile->location = $this->location;
+
+            $loc = Location::fromName($location);
+
+            if (!empty($loc)) {
+                $profile->lat         = $loc->lat;
+                $profile->lon         = $loc->lon;
+                $profile->location_id = $loc->location_id;
+                $profile->location_ns = $loc->location_ns;
+            }
+        }
+
+        $result = $profile->update($original);
+
+        if (!$result) {
+            common_log_db_error($profile, 'UPDATE', __FILE__);
+            $this->serverError(_('Could not save profile.'));
+            return;
+        }
+
+        common_broadcast_profile($profile);
+
+        $twitter_user = $this->twitterUserArray($profile, true);
+
+        if ($this->format == 'xml') {
+            $this->initDocument('xml');
+            $this->showTwitterXmlUser($twitter_user);
+            $this->endDocument('xml');
+        } elseif ($this->format == 'json') {
+            $this->initDocument('json');
+            $this->showJsonObjects($twitter_user);
+            $this->endDocument('json');
+        }
+    }
+
+}
diff --git a/actions/apiaccountupdateprofilebackgroundimage.php b/actions/apiaccountupdateprofilebackgroundimage.php
new file mode 100644 (file)
index 0000000..3537b9f
--- /dev/null
@@ -0,0 +1,211 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Update the authenticating user's profile background image
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  API
+ * @package   StatusNet
+ * @author    Zach Copley <zach@status.net>
+ * @copyright 2009 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+
+require_once INSTALLDIR . '/lib/apiauth.php';
+
+/**
+ * Update the authenticating user's profile background image
+ *
+ * @category API
+ * @package  StatusNet
+ * @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/
+ */
+
+class ApiAccountUpdateProfileBackgroundImageAction extends ApiAuthAction
+{
+
+    var $tile = false;
+
+    /**
+     * Take arguments for running
+     *
+     * @param array $args $_REQUEST args
+     *
+     * @return boolean success flag
+     *
+     */
+
+    function prepare($args)
+    {
+        parent::prepare($args);
+
+        $this->user  = $this->auth_user;
+        $this->tile  = $this->arg('tile');
+
+        return true;
+    }
+
+    /**
+     * 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)
+        ) {
+             $msg = _('The server was unable to handle that much POST ' .
+                    'data (%s bytes) due to its current configuration.');
+
+            $this->clientError(sprintf($msg, $_SERVER['CONTENT_LENGTH']));
+            return;
+        }
+
+        if (empty($this->user)) {
+            $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__);
+                $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__);
+                $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__);
+            $this->showForm(_('Could not update your design.'));
+            return;
+        }
+
+        $profile = $this->user->getProfile();
+
+        if (empty($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);
+            $this->endDocument('xml');
+        } elseif ($this->format == 'json') {
+            $this->initDocument('json');
+            $this->showJsonObjects($twitter_user);
+            $this->endDocument('json');
+        }
+    }
+
+}
diff --git a/actions/apiaccountupdateprofilecolors.php b/actions/apiaccountupdateprofilecolors.php
new file mode 100644 (file)
index 0000000..3cac829
--- /dev/null
@@ -0,0 +1,246 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Update a user's design colors
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  API
+ * @package   StatusNet
+ * @author    Zach Copley <zach@status.net>
+ * @copyright 2009 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+
+require_once INSTALLDIR . '/lib/apiauth.php';
+
+/**
+ * Sets one or more hex values that control the color scheme of the
+ * authenticating user's design
+ *
+ * @category API
+ * @package  StatusNet
+ * @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/
+ */
+
+class ApiAccountUpdateProfileColorsAction extends ApiAuthAction
+{
+
+    var $profile_background_color     = null;
+    var $profile_text_color           = null;
+    var $profile_link_color           = null;
+    var $profile_sidebar_fill_color   = null;
+    var $profile_sidebar_border_color = null;
+
+    /**
+     * Take arguments for running
+     *
+     * @param array $args $_REQUEST args
+     *
+     * @return boolean success flag
+     *
+     */
+
+    function prepare($args)
+    {
+        parent::prepare($args);
+
+        $this->user   = $this->auth_user;
+
+        $this->profile_background_color
+            = $this->trimmed('profile_background_color');
+        $this->profile_text_color
+            = $this->trimmed('profile_text_color');
+        $this->profile_link_color
+            = $this->trimmed('profile_link_color');
+        $this->profile_sidebar_fill_color
+            = $this->trimmed('profile_sidebar_fill_color');
+
+        // XXX: we don't support changing the sidebar border color
+        // in our designs.
+
+        $this->profile_sidebar_border_color
+            = $this->trimmed('profile_sidebar_border_color');
+
+        // XXX: Unlike Twitter, we do allow people to change the 'content color'
+
+        $this->profile_content_color = $this->trimmed('profile_content_color');
+
+        return true;
+    }
+
+    /**
+     * Handle the request
+     *
+     * Try to save the user's colors in her design. Create a new design
+     * if the user doesn't already have one.
+     *
+     * @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;
+        }
+
+        $design = $this->user->getDesign();
+
+        if (!empty($design)) {
+
+            $original = clone($design);
+
+            try {
+                $this->setColors($design);
+            } catch (WebColorException $e) {
+                $this->clientError($e->getMessage());
+                return false;
+            }
+
+            $result = $design->update($original);
+
+            if ($result === false) {
+                common_log_db_error($design, 'UPDATE', __FILE__);
+                $this->clientError(_('Could not update your design.'));
+                return;
+            }
+
+        } else {
+
+            $this->user->query('BEGIN');
+
+            // save new design
+            $design = new Design();
+
+            try {
+                $this->setColors($design);
+            } catch (WebColorException $e) {
+                $this->clientError($e->getMessage());
+                return false;
+            }
+
+            $id = $design->insert();
+
+            if (empty($id)) {
+                common_log_db_error($id, 'INSERT', __FILE__);
+                $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__);
+                $this->clientError(_('Unable to save your design settings.'));
+                $this->user->query('ROLLBACK');
+                return;
+            }
+
+            $this->user->query('COMMIT');
+        }
+
+        $profile = $this->user->getProfile();
+
+        if (empty($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);
+            $this->endDocument('xml');
+        } elseif ($this->format == 'json') {
+            $this->initDocument('json');
+            $this->showJsonObjects($twitter_user);
+            $this->endDocument('json');
+        }
+    }
+
+    /**
+     * Sets the user's design colors based on the request parameters
+     *
+     * @param Design $design the user's Design
+     *
+     * @return void
+     */
+
+    function setColors($design)
+    {
+        $bgcolor = empty($this->profile_background_color) ?
+            null : new WebColor($this->profile_background_color);
+        $tcolor  = empty($this->profile_text_color) ?
+            null : new WebColor($this->profile_text_color);
+        $sbcolor = empty($this->profile_sidebar_fill_color) ?
+            null : new WebColor($this->profile_sidebar_fill_color);
+        $lcolor  = empty($this->profile_link_color) ?
+            null : new WebColor($this->profile_link_color);
+        $ccolor  = empty($this->profile_content_color) ?
+            null : new WebColor($this->profile_content_color);
+
+        if (!empty($bgcolor)) {
+            $design->backgroundcolor = $bgcolor->intValue();
+        }
+
+        if (!empty($ccolor)) {
+            $design->contentcolor = $ccolor->intValue();
+        }
+
+        if (!empty($sbcolor)) {
+            $design->sidebarcolor = $sbcolor->intValue();
+        }
+
+        if (!empty($tcolor)) {
+            $design->textcolor = $tcolor->intValue();
+        }
+
+        if (!empty($lcolor)) {
+            $design->linkcolor = $lcolor->intValue();
+        }
+
+        return true;
+    }
+
+}
index 2f8e9628c42b0896d85a83b4aa84d5d4863840c9..153ef7818ee03a9f09cc74bb4b790b8392e516bb 100644 (file)
@@ -135,7 +135,7 @@ class ApiAccountUpdateProfileImageAction extends ApiAuthAction
 
         common_broadcast_profile($profile);
 
-        $twitter_user = $this->twitterUserArray($this->user->getProfile(), true);
+        $twitter_user = $this->twitterUserArray($profile, true);
 
         if ($this->format == 'xml') {
             $this->initDocument('xml');
index 5e66639c4f64075dfd78d632dae6614e413762e6..e2ea87b43eb3d934d7c1d2d9bfa653fabcbe5037 100644 (file)
@@ -176,9 +176,14 @@ class ApiAction extends Action
         $twitter_user['utc_offset'] = $t->format('Z');
         $twitter_user['time_zone'] = $timezone;
 
-        // To be supported some day, perhaps
-        $twitter_user['profile_background_image_url'] = '';
-        $twitter_user['profile_background_tile'] = false;
+        $twitter_user['profile_background_image_url']
+            = empty($design->backgroundimage)
+            ? '' : ($design->disposition & BACKGROUND_ON)
+            ? Design::url($design->backgroundimage) : '';
+
+        $twitter_user['profile_background_tile']
+            = empty($design->disposition)
+            ? '' : ($design->disposition & BACKGROUND_TILE) ? 'true' : 'false';
 
         $twitter_user['statuses_count'] = $profile->noticeCount();
 
index db9fdb4704084a2aa941e835d68225d4321c59c8..bad3decad51aa32f35fef35201d241d1256f9252 100644 (file)
@@ -428,9 +428,21 @@ class Router
             $m->connect('api/account/verify_credentials.:format',
                         array('action' => 'ApiAccountVerifyCredentials'));
 
+            $m->connect('api/account/update_profile.:format',
+                        array('action' => 'ApiAccountUpdateProfile'));
+
             $m->connect('api/account/update_profile_image.:format',
                         array('action' => 'ApiAccountUpdateProfileImage'));
 
+            $m->connect('api/account/update_profile_background_image.:format',
+                        array('action' => 'ApiAccountUpdateProfileBackgroundImage'));
+
+            $m->connect('api/account/update_profile_colors.:format',
+                        array('action' => 'ApiAccountUpdateProfileColors'));
+
+            $m->connect('api/account/update_delivery_device.:format',
+                        array('action' => 'ApiAccountUpdateDeliveryDevice'));
+
             // special case where verify_credentials is called w/out a format
 
             $m->connect('api/account/verify_credentials',