X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=actions%2Fdesignadminpanel.php;h=30e8bde1a4e5d344ffa221a770183720cbfda204;hb=d5f86f7a8a113991f050425e411287da4f738ca2;hp=6b40ae02145d6bd4cb8d42a44e856c8307afa84e;hpb=7ae45abfccd6ca56767369a5a663535e2633ea1d;p=quix0rs-gnu-social.git diff --git a/actions/designadminpanel.php b/actions/designadminpanel.php index 6b40ae0214..30e8bde1a4 100644 --- a/actions/designadminpanel.php +++ b/actions/designadminpanel.php @@ -74,7 +74,7 @@ class DesignadminpanelAction extends AdminPanelAction } /** - * Show the site admin panel form + * Get the default design and show the design admin panel form * * @return void */ @@ -82,7 +82,6 @@ class DesignadminpanelAction extends AdminPanelAction function showForm() { $this->design = Design::siteDesign(); - $form = new DesignAdminPanelForm($this); $form->show(); return; @@ -101,8 +100,7 @@ class DesignadminpanelAction extends AdminPanelAction } else if ($this->arg('defaults')) { $this->restoreDefaults(); } else { - $this->success = false; - $this->message = 'Unexpected form submission.'; + $this->clientError(_('Unexpected form submission.')); } } @@ -114,7 +112,6 @@ class DesignadminpanelAction extends AdminPanelAction function saveDesignSettings() { - // Workaround for PHP returning empty $_POST and $_FILES when POST // length > post_max_size in php.ini @@ -124,8 +121,7 @@ class DesignadminpanelAction extends AdminPanelAction ) { $msg = _('The server was unable to handle that much POST ' . 'data (%s bytes) due to its current configuration.'); - $this->success = false; - $this->msg = $e->getMessage(sprintf($msg, $_SERVER['CONTENT_LENGTH'])); + $this->clientException(sprintf($msg, $_SERVER['CONTENT_LENGTH'])); return; } @@ -133,24 +129,37 @@ class DesignadminpanelAction extends AdminPanelAction $bgimage = $this->saveBackgroundImage(); - static $settings = array('theme'); + static $settings = array('theme', 'logo'); + $values = array(); foreach ($settings as $setting) { $values[$setting] = $this->trimmed($setting); } - // This throws an exception on validation errors - try { + $this->validate($values); + + $oldtheme = common_config('site', 'theme'); + + $config = new Config(); + + $config->query('BEGIN'); + + // Only update colors if the theme has not changed. + + if ($oldtheme == $values['theme']) { + $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->success = false; - $this->msg = $e->getMessage(); - return; + + Config::save('design', 'backgroundcolor', $bgcolor->intValue()); + Config::save('design', 'contentcolor', $ccolor->intValue()); + Config::save('design', 'sidebarcolor', $sbcolor->intValue()); + Config::save('design', 'textcolor', $tcolor->intValue()); + Config::save('design', 'linkcolor', $lcolor->intValue()); } $onoff = $this->arg('design_background-image_onoff'); @@ -166,13 +175,11 @@ class DesignadminpanelAction extends AdminPanelAction $tile = $this->boolean('design_background-image_repeat'); - $this->validate($values); - - // assert(all values are valid); - - $config = new Config(); + // Hack to use Design's bit setter + $scratch = new Design(); + $scratch->setDisposition($on, $off, $tile); - $config->query('BEGIN'); + Config::save('design', 'disposition', $scratch->disposition); foreach ($settings as $setting) { Config::save('site', $setting, $values[$setting]); @@ -182,47 +189,7 @@ class DesignadminpanelAction extends AdminPanelAction Config::save('design', 'backgroundimage', $bgimage); } - Config::save('design', 'backgroundcolor', $bgcolor->intValue()); - Config::save('design', 'contentcolor', $ccolor->intValue()); - Config::save('design', 'sidebarcolor', $sbcolor->intValue()); - Config::save('design', 'textcolor', $tcolor->intValue()); - Config::save('design', 'linkcolor', $lcolor->intValue()); - - // Hack to use Design's bit setter - $scratch = new Design(); - $scratch->setDisposition($on, $off, $tile); - - Config::save('design', 'disposition', $scratch->disposition); - $config->query('COMMIT'); - - return; - - } - - /** - * Delete a design setting - * - * @return mixed $result false if something didn't work - */ - - function deleteSetting($section, $setting) - { - $config = new Config(); - - $config->section = $section; - $config->setting = $setting; - - if ($config->find(true)) { - $result = $config->delete(); - if (!$result) { - common_log_db_error($config, 'DELETE', __FILE__); - $this->clientError(_("Unable to delete design setting.")); - return null; - } - } - - return $result; } /** @@ -233,6 +200,7 @@ class DesignadminpanelAction extends AdminPanelAction function restoreDefaults() { + $this->deleteSetting('site', 'logo'); $this->deleteSetting('site', 'theme'); $settings = array( @@ -243,6 +211,12 @@ class DesignadminpanelAction extends AdminPanelAction foreach ($settings as $setting) { $this->deleteSetting('design', $setting); } + + // XXX: Should we restore the default dir settings, etc.? --Z + + // XXX: I can't get it to show the new settings without forcing + // this terrible reload -- FIX ME! + common_redirect(common_local_url('designadminpanel'), 303); } /** @@ -264,8 +238,7 @@ class DesignadminpanelAction extends AdminPanelAction $imagefile = ImageFile::fromUpload('design_background-image_file'); } catch (Exception $e) { - $this->success = false; - $this->msg = $e->getMessage(); + $this->clientError('Unable to save background image.'); return; } @@ -297,6 +270,11 @@ class DesignadminpanelAction extends AdminPanelAction function validate(&$values) { + if (!empty($values['logo']) && + !Validate::uri($values['logo'], array('allowed_schemes' => array('http', 'https')))) { + $this->clientError(_("Invalid logo URL.")); + } + if (!in_array($values['theme'], Theme::listAvailable())) { $this->clientError(sprintf(_("Theme not available: %s"), $values['theme'])); } @@ -311,7 +289,7 @@ class DesignadminpanelAction extends AdminPanelAction function showStylesheets() { parent::showStylesheets(); - $this->cssLink('css/farbtastic.css','base','screen, projection, tv'); + $this->cssLink('js/farbtastic/farbtastic.css',null,'screen, projection, tv'); } /** @@ -324,15 +302,15 @@ class DesignadminpanelAction extends AdminPanelAction { parent::showScripts(); - $this->script('js/farbtastic/farbtastic.js'); - $this->script('js/userdesign.go.js'); + $this->script('farbtastic/farbtastic.js'); + $this->script('userdesign.go.js'); $this->autofocus('design_background-image_file'); } } -class DesignAdminPanelForm extends Form +class DesignAdminPanelForm extends AdminForm { /** @@ -393,23 +371,53 @@ class DesignAdminPanelForm extends Form function formData() { - $design = $this->out->design; + $this->out->elementStart('fieldset', array('id' => 'settings_design_logo')); + $this->out->element('legend', null, _('Change logo')); - $themes = Theme::listAvailable(); + $this->out->elementStart('ul', 'form_data'); - asort($themes); + $this->li(); + $this->input('logo', _('Site logo'), 'Logo for the site (full URL)'); + $this->unli(); - $themes = array_combine($themes, $themes); + $this->out->elementEnd('ul'); + + $this->out->elementEnd('fieldset'); + $this->out->elementStart('fieldset', array('id' => 'settings_design_theme')); + $this->out->element('legend', null, _('Change theme')); $this->out->elementStart('ul', 'form_data'); - $this->out->elementStart('li'); - $this->out->dropdown('theme', _('Theme'), + $themes = Theme::listAvailable(); + + // XXX: listAvailable() can return an empty list if you + // screw up your settings, so just in case: + + if (empty($themes)) { + $themes = array('default', 'default'); + } + + asort($themes); + $themes = array_combine($themes, $themes); + + $this->li(); + $this->out->dropdown('theme', _('Site theme'), $themes, _('Theme for the site.'), false, $this->value('theme')); - $this->out->elementEnd('li'); + $this->unli(); + + $this->out->elementEnd('ul'); + + $this->out->elementEnd('fieldset'); + + $design = $this->out->design; + + $this->out->elementStart('fieldset', array('id' => + 'settings_design_background-image')); + $this->out->element('legend', null, _('Change background image')); + $this->out->elementStart('ul', 'form_data'); - $this->out->elementStart('li'); + $this->li(); $this->out->element('label', array('for' => 'design_background-image_file'), _('Background')); $this->out->element('input', array('name' => 'design_background-image_file', @@ -422,7 +430,7 @@ class DesignAdminPanelForm extends Form 'type' => 'hidden', 'id' => 'MAX_FILE_SIZE', 'value' => ImageFile::maxFileSizeInt())); - $this->out->elementEnd('li'); + $this->unli(); if (!empty($design->backgroundimage)) { @@ -464,26 +472,28 @@ class DesignAdminPanelForm extends Form 'class' => 'radio'), _('Off')); $this->out->element('p', 'form_guide', _('Turn background image on or off.')); - $this->out->elementEnd('li'); + $this->unli(); - $this->out->elementStart('li'); + $this->li(); $this->out->checkbox('design_background-image_repeat', _('Tile background image'), ($design->disposition & BACKGROUND_TILE) ? true : false); - $this->out->elementEnd('li'); + $this->unli(); } $this->out->elementEnd('ul'); + $this->out->elementEnd('fieldset'); $this->out->elementStart('fieldset', array('id' => 'settings_design_color')); $this->out->element('legend', null, _('Change colours')); + $this->out->elementStart('ul', 'form_data'); try { $bgcolor = new WebColor($design->backgroundcolor); - $this->out->elementStart('li'); + $this->li(); $this->out->element('label', array('for' => 'swatch-1'), _('Background')); $this->out->element('input', array('name' => 'design_background', 'type' => 'text', @@ -492,11 +502,11 @@ class DesignAdminPanelForm extends Form 'maxlength' => '7', 'size' => '7', 'value' => '')); - $this->out->elementEnd('li'); + $this->unli(); $ccolor = new WebColor($design->contentcolor); - $this->out->elementStart('li'); + $this->li(); $this->out->element('label', array('for' => 'swatch-2'), _('Content')); $this->out->element('input', array('name' => 'design_content', 'type' => 'text', @@ -505,11 +515,11 @@ class DesignAdminPanelForm extends Form 'maxlength' => '7', 'size' => '7', 'value' => '')); - $this->out->elementEnd('li'); + $this->unli(); $sbcolor = new WebColor($design->sidebarcolor); - $this->out->elementStart('li'); + $this->li(); $this->out->element('label', array('for' => 'swatch-3'), _('Sidebar')); $this->out->element('input', array('name' => 'design_sidebar', 'type' => 'text', @@ -518,11 +528,11 @@ class DesignAdminPanelForm extends Form 'maxlength' => '7', 'size' => '7', 'value' => '')); - $this->out->elementEnd('li'); + $this->unli(); $tcolor = new WebColor($design->textcolor); - $this->out->elementStart('li'); + $this->li(); $this->out->element('label', array('for' => 'swatch-4'), _('Text')); $this->out->element('input', array('name' => 'design_text', 'type' => 'text', @@ -531,11 +541,11 @@ class DesignAdminPanelForm extends Form 'maxlength' => '7', 'size' => '7', 'value' => '')); - $this->out->elementEnd('li'); + $this->unli(); $lcolor = new WebColor($design->linkcolor); - $this->out->elementStart('li'); + $this->li(); $this->out->element('label', array('for' => 'swatch-5'), _('Links')); $this->out->element('input', array('name' => 'design_links', 'type' => 'text', @@ -544,49 +554,16 @@ class DesignAdminPanelForm extends Form 'maxlength' => '7', 'size' => '7', 'value' => '')); - $this->out->elementEnd('li'); + $this->unli(); } catch (WebColorException $e) { common_log(LOG_ERR, 'Bad color values in site design: ' . $e->getMessage()); } - $this->out->elementEnd('ul'); $this->out->elementEnd('fieldset'); - } - - /** - * Utility to simplify some of the duplicated code around - * params and settings. - * - * @param string $setting Name of the setting - * @param string $title Title to use for the input - * @param string $instructions Instructions for this field - * - * @return void - */ - - function input($setting, $title, $instructions) - { - $this->out->input($setting, $title, $this->value($setting), $instructions); - } - - /** - * Utility to simplify getting the posted-or-stored setting value - * - * @param string $setting Name of the setting - * - * @return string param value if posted, or current config value - */ - - function value($setting) - { - $value = $this->out->trimmed($setting); - if (empty($value)) { - $value = common_config('site', $setting); - } - return $value; + $this->out->elementEnd('ul'); } /** @@ -607,5 +584,7 @@ class DesignAdminPanelForm extends Form 'title' => _('Reset back to default'))); $this->out->submit('save', _('Save'), 'submit form_action-secondary', - 'save', _('Save design')); } + 'save', _('Save design')); + } + }