diff --git a/actions/othersettings.php b/actions/othersettings.php index 8d6e004047..3f2d8df6b4 100644 --- a/actions/othersettings.php +++ b/actions/othersettings.php @@ -134,10 +134,6 @@ class OthersettingsAction extends AccountSettingsAction $this->arg('maxnoticelength') : User_urlshortener_prefs::maxNoticeLength($user), _('URLs in notices longer than this will be shortened.')); $this->elementEnd('li'); - $this->elementStart('li'); - $this->checkbox('viewdesigns', _('View profile designs'), - - $user->viewdesigns, _('Show or hide profile designs.')); - $this->elementEnd('li'); $this->elementEnd('ul'); $this->submit('save', _('Save')); $this->elementEnd('fieldset'); @@ -170,8 +166,6 @@ class OthersettingsAction extends AccountSettingsAction return; } - $viewdesigns = $this->boolean('viewdesigns'); - $maxurllength = $this->trimmed('maxurllength'); if (!Validate::number($maxurllength, array('min' => 0))) { @@ -193,7 +187,6 @@ class OthersettingsAction extends AccountSettingsAction $original = clone($user); $user->urlshorteningservice = $urlshorteningservice; - $user->viewdesigns = $viewdesigns; $result = $user->update($original); diff --git a/actions/userdesignsettings.php b/actions/userdesignsettings.php index 1cf8780006..e6caea3a1b 100644 --- a/actions/userdesignsettings.php +++ b/actions/userdesignsettings.php @@ -120,6 +120,20 @@ class UserDesignSettingsAction extends DesignSettingsAction $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 * @@ -128,6 +142,8 @@ class UserDesignSettingsAction extends DesignSettingsAction function saveDesign() { + $this->saveDesignPreferences(); + foreach ($this->args as $key => $val) { if (preg_match('/(#ho|ho)Td.*g/i', $val)) { $this->sethd(); @@ -164,7 +180,8 @@ class UserDesignSettingsAction extends DesignSettingsAction $tile = true; } - $user = common_current_user(); + $user = common_current_user(); + $design = $user->getDesign(); if (!empty($design)) { @@ -282,4 +299,64 @@ class UserDesignSettingsAction extends DesignSettingsAction $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__); + throw new ServerException(_('Couldn\'t update user.')); + } + } +} + +class UserDesignForm extends DesignForm +{ + function __construct($out, $design, $actionurl) + { + parent::__construct($out, $design, $actionurl); + } + + /** + * Legend of the Form + * + * @return void + */ + function formLegend() + { + $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'); + $this->out->checkbox('viewdesigns', _('View profile designs'), + - $user->viewdesigns, _('Show or hide profile designs.')); + $this->out->elementEnd('li'); + $this->out->elementEnd('ul'); + + $this->out->elementEnd('fieldset'); + + $this->out->elementStart('fieldset'); + $this->out->element('legend', null, _('Background file')); + + parent::formData(); + } } diff --git a/lib/designform.php b/lib/designform.php index 89e7f6ce8b..4163cfc1a6 100644 --- a/lib/designform.php +++ b/lib/designform.php @@ -160,13 +160,13 @@ class DesignForm extends Form 'value' => ImageFile::maxFileSizeInt())); $this->out->elementEnd('li'); - if (!empty($design->backgroundimage)) { + if (!empty($this->design->backgroundimage)) { $this->out->elementStart('li', array('id' => 'design_background-image_onoff')); $this->out->element('img', array('src' => - Design::url($design->backgroundimage))); + Design::url($this->design->backgroundimage))); $attrs = array('name' => 'design_background-image_onoff', 'type' => 'radio', @@ -174,7 +174,7 @@ class DesignForm extends Form 'class' => 'radio', 'value' => 'on'); - if ($design->disposition & BACKGROUND_ON) { + if ($this->design->disposition & BACKGROUND_ON) { $attrs['checked'] = 'checked'; } @@ -190,7 +190,7 @@ class DesignForm extends Form 'class' => 'radio', 'value' => 'off'); - if ($design->disposition & BACKGROUND_OFF) { + if ($this->design->disposition & BACKGROUND_OFF) { $attrs['checked'] = 'checked'; } @@ -205,7 +205,7 @@ class DesignForm extends Form $this->out->elementStart('li'); $this->out->checkbox('design_background-image_repeat', _('Tile background image'), - ($design->disposition & BACKGROUND_TILE) ? true : false); + ($this->design->disposition & BACKGROUND_TILE) ? true : false); $this->out->elementEnd('li'); } @@ -218,7 +218,7 @@ class DesignForm extends Form try { - $bgcolor = new WebColor($design->backgroundcolor); + $bgcolor = new WebColor($this->design->backgroundcolor); $this->out->elementStart('li'); $this->out->element('label', array('for' => 'swatch-1'), _('Background')); @@ -231,7 +231,7 @@ class DesignForm extends Form 'value' => '')); $this->out->elementEnd('li'); - $ccolor = new WebColor($design->contentcolor); + $ccolor = new WebColor($this->design->contentcolor); $this->out->elementStart('li'); $this->out->element('label', array('for' => 'swatch-2'), _('Content')); @@ -244,7 +244,7 @@ class DesignForm extends Form 'value' => '')); $this->out->elementEnd('li'); - $sbcolor = new WebColor($design->sidebarcolor); + $sbcolor = new WebColor($this->design->sidebarcolor); $this->out->elementStart('li'); $this->out->element('label', array('for' => 'swatch-3'), _('Sidebar')); @@ -257,7 +257,7 @@ class DesignForm extends Form 'value' => '')); $this->out->elementEnd('li'); - $tcolor = new WebColor($design->textcolor); + $tcolor = new WebColor($this->design->textcolor); $this->out->elementStart('li'); $this->out->element('label', array('for' => 'swatch-4'), _('Text')); @@ -270,7 +270,7 @@ class DesignForm extends Form 'value' => '')); $this->out->elementEnd('li'); - $lcolor = new WebColor($design->linkcolor); + $lcolor = new WebColor($this->design->linkcolor); $this->out->elementStart('li'); $this->out->element('label', array('for' => 'swatch-5'), _('Links')); @@ -284,7 +284,7 @@ class DesignForm extends Form $this->out->elementEnd('li'); } catch (WebColorException $e) { - common_log(LOG_ERR, 'Bad color values in design ID: ' .$design->id); + common_log(LOG_ERR, 'Bad color values in design ID: ' .$this->design->id); } $this->out->elementEnd('ul'); diff --git a/lib/designsettings.php b/lib/designsettings.php index 98ef8256cd..58578f1886 100644 --- a/lib/designsettings.php +++ b/lib/designsettings.php @@ -174,28 +174,26 @@ class DesignSettingsAction extends AccountSettingsAction function saveBackgroundImage($design) { - // Now that we have a Design ID we can add a file to the design. // XXX: This is an additional DB hit, but figured having the image // associated with the Design rather than the User was worth // it. -- Zach - if ($_FILES['design_background-image_file']['error'] == - UPLOAD_ERR_OK) { + if (array_key_exists('design_background-image_file', $_FILES) && + $_FILES['design_background-image_file']['error'] == UPLOAD_ERR_OK) { $filepath = null; try { - $imagefile = - ImageFile::fromUpload('design_background-image_file'); + $imagefile = ImageFile::fromUpload('design_background-image_file'); } catch (Exception $e) { $this->showForm($e->getMessage()); return; } $filename = Design::filename($design->id, - image_type_to_extension($imagefile->type), - common_timestamp()); + image_type_to_extension($imagefile->type), + common_timestamp()); $filepath = Design::path($filename);