3 * StatusNet, the distributed open-source microblogging tool
5 * Update a user's design colors
9 * LICENCE: This program is free software: you can redistribute it and/or modify
10 * it under the terms of the GNU Affero General Public License as published by
11 * the Free Software Foundation, either version 3 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU Affero General Public License for more details.
19 * You should have received a copy of the GNU Affero General Public License
20 * along with this program. If not, see <http://www.gnu.org/licenses/>.
24 * @author Zach Copley <zach@status.net>
25 * @copyright 2009 StatusNet, Inc.
26 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
27 * @link http://status.net/
30 if (!defined('STATUSNET')) {
34 require_once INSTALLDIR . '/lib/apiauth.php';
37 * Sets one or more hex values that control the color scheme of the
38 * authenticating user's design
42 * @author Zach Copley <zach@status.net>
43 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
44 * @link http://status.net/
47 class ApiAccountUpdateProfileColorsAction extends ApiAuthAction
50 var $profile_background_color = null;
51 var $profile_text_color = null;
52 var $profile_link_color = null;
53 var $profile_sidebar_fill_color = null;
54 var $profile_sidebar_border_color = null;
57 * Take arguments for running
59 * @param array $args $_REQUEST args
61 * @return boolean success flag
65 function prepare($args)
67 parent::prepare($args);
69 $this->user = $this->auth_user;
71 $this->profile_background_color
72 = $this->trimmed('profile_background_color');
73 $this->profile_text_color
74 = $this->trimmed('profile_text_color');
75 $this->profile_link_color
76 = $this->trimmed('profile_link_color');
77 $this->profile_sidebar_fill_color
78 = $this->trimmed('profile_sidebar_fill_color');
80 // XXX: we don't support changing the sidebar border color
83 $this->profile_sidebar_border_color
84 = $this->trimmed('profile_sidebar_border_color');
86 // XXX: Unlike Twitter, we do allow people to change the 'content color'
88 $this->profile_content_color = $this->trimmed('profile_content_color');
96 * Try to save the user's colors in her design. Create a new design
97 * if the user doesn't already have one.
99 * @param array $args $_REQUEST data (unused)
104 function handle($args)
106 parent::handle($args);
108 if ($_SERVER['REQUEST_METHOD'] != 'POST') {
110 _('This method requires a POST.'),
116 $design = $this->user->getDesign();
118 if (!empty($design)) {
120 $original = clone($design);
123 $this->setColors($design);
124 } catch (WebColorException $e) {
125 $this->clientError($e->getMessage());
129 $result = $design->update($original);
131 if ($result === false) {
132 common_log_db_error($design, 'UPDATE', __FILE__);
133 $this->clientError(_('Couldn\'t update your design.'));
139 $this->user->query('BEGIN');
142 $design = new Design();
145 $this->setColors($design);
146 } catch (WebColorException $e) {
147 $this->clientError($e->getMessage());
151 $id = $design->insert();
154 common_log_db_error($id, 'INSERT', __FILE__);
155 $this->clientError(_('Unable to save your design settings!'));
159 $original = clone($this->user);
160 $this->user->design_id = $id;
161 $result = $this->user->update($original);
163 if (empty($result)) {
164 common_log_db_error($original, 'UPDATE', __FILE__);
165 $this->clientError(_('Unable to save your design settings!'));
166 $this->user->query('ROLLBACK');
170 $this->user->query('COMMIT');
173 $profile = $this->user->getProfile();
175 if (empty($profile)) {
176 $this->clientError(_('User has no profile.'));
180 $twitter_user = $this->twitterUserArray($this->user->getProfile(), true);
182 if ($this->format == 'xml') {
183 $this->initDocument('xml');
184 $this->showTwitterXmlUser($twitter_user);
185 $this->endDocument('xml');
186 } elseif ($this->format == 'json') {
187 $this->initDocument('json');
188 $this->showJsonObjects($twitter_user);
189 $this->endDocument('json');
194 * Sets the user's design colors based on the request parameters
196 * @param Design $design the user's Design
201 function setColors($design)
203 $bgcolor = empty($this->profile_background_color) ?
204 null : new WebColor($this->profile_background_color);
205 $tcolor = empty($this->profile_text_color) ?
206 null : new WebColor($this->profile_text_color);
207 $sbcolor = empty($this->profile_sidebar_fill_color) ?
208 null : new WebColor($this->profile_sidebar_fill_color);
209 $lcolor = empty($this->profile_link_color) ?
210 null : new WebColor($this->profile_link_color);
211 $ccolor = empty($this->profile_content_color) ?
212 null : new WebColor($this->profile_content_color);
214 if (!empty($bgcolor)) {
215 $design->backgroundcolor = $bgcolor->intValue();
218 if (!empty($ccolor)) {
219 $design->contentcolor = $ccolor->intValue();
222 if (!empty($sbcolor)) {
223 $design->sidebarcolor = $sbcolor->intValue();
226 if (!empty($tcolor)) {
227 $design->textcolor = $tcolor->intValue();
230 if (!empty($lcolor)) {
231 $design->linkcolor = $lcolor->intValue();