. * * @category Settings * @package StatusNet * @author Sarven Capadisli * @author Zach Copley * @copyright 2008-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') && !defined('LACONICA')) { exit(1); } require_once INSTALLDIR . '/lib/designsettings.php'; /** * Set a user's design * * Saves a design for a given user * * @category Settings * @package StatusNet * @author Zach Copley * @author Sarven Capadisli * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ class UserDesignSettingsAction extends DesignSettingsAction { /** * Sets the right action for the form, and passes request args into * the base action * * @param array $args misc. arguments * * @return boolean true */ function prepare($args) { parent::prepare($args); $this->submitaction = common_local_url('userdesignsettings'); return true; } /** * Title of the page * * @return string Title of the page */ function title() { // TRANS: Title for profile design page. return _('Profile design'); } /** * Instructions for use * * @return instructions for use */ function getInstructions() { // TRANS: Instructions for Profile design page. return _('Customize the way your profile looks ' . 'with a background image and a colour palette of your choice.'); } /** * Get the design we want to edit * * @return Design */ function getWorkingDesign() { $user = common_current_user(); $design = $user->getDesign(); return $design; } /** * Content area of the page * * Shows a form for changing the design * * @return void */ function showContent() { $design = $this->getWorkingDesign(); if (empty($design)) { $design = Design::siteDesign(); } $this->showDesignForm($design); } /** * Shows the design settings form * * @param Design $design a working design to show * * @return nothing */ function showDesignForm($design) { $form = new UserDesignForm($this, $design, $this->submitaction); $form->show(); } /** * Save or update the user's design settings * * @return void */ function saveDesign() { $this->saveDesignPreferences(); foreach ($this->args as $key => $val) { if (preg_match('/(#ho|ho)Td.*g/i', $val)) { $this->sethd(); return; } } 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; } $user = common_current_user(); $design = $user->getDesign(); if (!empty($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__); // TRANS: Form validation error on Profile design page when updating design settings has failed. $this->showForm(_('Could not update your design.')); return; } // update design } else { $user->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__); // TRANS: Form validation error on Profile design page when saving design settings has failed. $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__); // TRANS: Form validation error on Profile design page when saving design settings has failed. $this->showForm(_('Unable to save your design settings.')); $user->query('ROLLBACK'); return; } $user->query('COMMIT'); } $this->saveBackgroundImage($design); // TRANS: Confirmation message on Profile design page when saving design settings has succeeded. $this->showForm(_('Design preferences saved.'), true); } /** * 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__); // TRANS: Form validation error on Profile design page when saving design settings has failed. $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__); // TRANS: Form validation error on Profile design page when updating design settings has failed. $this->showForm(_('Unable to save your design settings.')); $user->query('ROLLBACK'); return; } $user->query('COMMIT'); $this->saveBackgroundImage($design); // TRANS: Succes message on Profile design page when finding an easter egg. $this->showForm(_('Enjoy your hotdog!'), true); } function saveDesignPreferences() { $viewdesigns = $this->boolean('viewdesigns'); $user = common_current_user(); $original = clone($user); $user->viewdesigns = $viewdesigns; $result = $user->update($original); if ($result === false) { common_log_db_error($user, 'UPDATE', __FILE__); // TRANS: Server exception thrown on Profile design page when updating design settings fails. throw new ServerException(_('Could not update user.')); } } } class UserDesignForm extends DesignForm { function __construct($out, $design, $actionurl) { parent::__construct($out, $design, $actionurl); } /** * Legend of the Form * * @return void */ function formLegend() { // TRANS: Form legend on Profile design page. $this->out->element('legend', null, _('Design settings')); } /** * Data elements of the form * * @return void */ function formData() { $user = common_current_user(); $this->out->elementStart('ul', 'form_data'); $this->out->elementStart('li'); // TRANS: Checkbox label on Profile design page. $this->out->checkbox('viewdesigns', _('View profile designs'), // TRANS: Title for checkbox on Profile design page. - $user->viewdesigns, _('Show or hide profile designs.')); $this->out->elementEnd('li'); $this->out->elementEnd('ul'); $this->out->elementEnd('fieldset'); $this->out->elementStart('fieldset'); // TRANS: Form legend on Profile design page for form to choose a background image. $this->out->element('legend', null, _('Background file')); parent::formData(); } }