Author: bshaffer
Date: 2010-02-01 03:53:05 +0100 (Mon, 01 Feb 2010)
New Revision: 27376
Added:
plugins/csSettingsPlugin/trunk/lib/form/doctrine/csSettingAdminForm.class.php
Modified:
plugins/csSettingsPlugin/trunk/config/app.yml
plugins/csSettingsPlugin/trunk/lib/form/doctrine/PlugincsSettingForm.class.php
plugins/csSettingsPlugin/trunk/lib/form/doctrine/SettingsListForm.class.php
plugins/csSettingsPlugin/trunk/lib/model/doctrine/PlugincsSetting.class.php
plugins/csSettingsPlugin/trunk/lib/model/doctrine/PlugincsSettingTable.class.php
plugins/csSettingsPlugin/trunk/modules/csSetting/lib/BasecsSettingActions.class.php
plugins/csSettingsPlugin/trunk/modules/csSetting/templates/_list_td_tabular.php
Log:
great updates - cleaning up actions, validators actually do something, better
subclassing/extending options, and addition of DateTime field
Modified: plugins/csSettingsPlugin/trunk/config/app.yml
===================================================================
--- plugins/csSettingsPlugin/trunk/config/app.yml 2010-02-01 02:28:37 UTC
(rev 27375)
+++ plugins/csSettingsPlugin/trunk/config/app.yml 2010-02-01 02:53:05 UTC
(rev 27376)
@@ -6,10 +6,12 @@
checkbox: Checkbox
select: Select List
yesno: Yes/No Radios
+ datetime: Date/Time
model: Database Model
upload: Upload
- authMethod: isAuthenticated #used to determine when seo admin bar is
visible
- tableMethod: findAll #used to pull the list of settings
+
+ authMethod: isSuperAdmin #used to determine when user is able to
edit settings
+
cachepaths: #override the cache path, for whatever
reason you might want to
settings_array: cs_settings.settings_array.cache
object_array: cs_settings.obj_array.cache
\ No newline at end of file
Modified:
plugins/csSettingsPlugin/trunk/lib/form/doctrine/PlugincsSettingForm.class.php
===================================================================
---
plugins/csSettingsPlugin/trunk/lib/form/doctrine/PlugincsSettingForm.class.php
2010-02-01 02:28:37 UTC (rev 27375)
+++
plugins/csSettingsPlugin/trunk/lib/form/doctrine/PlugincsSettingForm.class.php
2010-02-01 02:53:05 UTC (rev 27376)
@@ -9,54 +9,6 @@
*/
abstract class PlugincsSettingForm extends BasecsSettingForm
{
- public function setup()
- {
- parent::setup();
- $this->widgetSchema['type'] = new sfWidgetFormSelectRadio(array(
- 'choices' =>
sfConfig::get('app_csSettingsPlugin_types'),
- ));
-
- $choices = Doctrine::getTable('csSetting')->getExistingGroupsArray();
-
- if ($choices)
- {
- $choices = array_merge(array('' => ''), $choices);
- $this->widgetSchema['setting_group'] = new sfWidgetFormSelect(array(
- 'choices' => $choices,
- ));
- }
-
- $this->widgetSchema->setLabel('setting_group', 'Group');
-
- $this->validatorSchema->setPostValidator(
- new sfValidatorDoctrineUnique(array('model' => 'csSetting', 'column' =>
array('name')), array('invalid' => 'Cannot use this name, a setting with this
name already exists!'))
- );
-
- $help = array(
- 'Text Field' => 'HTML Attributes',
- 'Text Area' => 'HTML Attributes',
- 'Checkbox' => 'HTML Attributes',
- 'Checkbox' => 'Choices (key=value)',
- 'Yes/No Radios' => 'HTML Attributes',
- 'Database Model' => '<a
href="http://www.symfony-project.org/api/1_2/sfWidgetFormDoctrineChoice"
target="_blank">Widget Options</a> (*model=MyModel method=__toString
add_empty=true)',
- 'Upload' => '<a
href="http://www.symfony-project.org/api/1_2/sfWidgetFormInputFileEditable"
target="_blank">Widget Options</a>',
- );
-
- $helpStr = '<b>The following options are supported for each setting
type</b>:<ul>';
-
- foreach ($help as $key => $value)
- {
- $helpStr .= "<li>$key: $value</li>";
- }
- $helpStr .= '</ul>* required';
-
- $this->widgetSchema->setLabel('slug', 'Handle');
- $this->widgetSchema->setHelp('slug', 'This is used in your code to pull
the value for this setting. Use csSettings::get($handle);');
- $this->widgetSchema->setLabel('widget_options', 'Options');
- $this->widgetSchema->setHelp('widget_options', $helpStr);
- $this->widgetSchema->setHelp('setting_group', 'Organize your settings into
groups');
- }
-
public function getSettingWidget()
{
$type = $this->getObject()->getType();
@@ -95,7 +47,7 @@
return $this->$method();
}
// Return a generic Validator
- return new sfValidatorString();
+ return new sfValidatorString(array('required' => false));
}
//Type Textarea
@@ -109,6 +61,16 @@
{
return new sfWidgetFormInputCheckbox(array(),
$this->getObject()->getOptionsArray());
}
+
+ // Type Date
+ public function getDateTimeSettingWidget()
+ {
+ return new sfWidgetFormDateTime($this->getObject()->getOptionsArray());
+ }
+ public function getDateTimeSettingValidator()
+ {
+ return new sfValidatorDateTime(array('required' => false));
+ }
// Type Yesno
public function getYesnoSettingWidget()
@@ -117,17 +79,17 @@
}
public function getYesnoSettingValidator()
{
- return new sfValidatorChoice(array('choices' => array('yes', 'no')));
+ return new sfValidatorChoice(array('choices' => array('yes', 'no'),
'required' => false));
}
//Type Select List
public function getSelectSettingWidget()
{
- return new sfWidgetFormSelect(array('choices' =>
$this->getObject()->getOptionsArray()));
+ return new sfWidgetFormSelect(array('choices' =>
$this->getObject()->getOptionsArray(), 'required' => false));
}
public function getSelectSettingValidator()
{
- return new sfValidatorChoice(array('choices' =>
$this->getObject()->getOptionsArray()));
+ return new sfValidatorChoice(array('choices' =>
$this->getObject()->getOptionsArray(), 'required' => false));
}
//Type Model
Modified:
plugins/csSettingsPlugin/trunk/lib/form/doctrine/SettingsListForm.class.php
===================================================================
--- plugins/csSettingsPlugin/trunk/lib/form/doctrine/SettingsListForm.class.php
2010-02-01 02:28:37 UTC (rev 27375)
+++ plugins/csSettingsPlugin/trunk/lib/form/doctrine/SettingsListForm.class.php
2010-02-01 02:53:05 UTC (rev 27376)
@@ -4,11 +4,9 @@
{
public function configure()
{
- $method = sfConfig::get('app_csSettingsPlugin_tableMethod');
-
- foreach (Doctrine::getTable('csSetting')->$method() as $setting)
+ foreach (Doctrine::getTable('csSetting')->findAllForList() as $setting)
{
- $form = new csSettingForm($setting);
+ $form = new csSettingAdminForm($setting);
$this->widgetSchema[$setting['slug']] = $form->getSettingWidget();
$this->widgetSchema[$setting['slug']]->setDefault($setting->getValue());
$this->validatorSchema[$setting['slug']] = $form->getSettingValidator();
Added:
plugins/csSettingsPlugin/trunk/lib/form/doctrine/csSettingAdminForm.class.php
===================================================================
---
plugins/csSettingsPlugin/trunk/lib/form/doctrine/csSettingAdminForm.class.php
(rev 0)
+++
plugins/csSettingsPlugin/trunk/lib/form/doctrine/csSettingAdminForm.class.php
2010-02-01 02:53:05 UTC (rev 27376)
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * PlugincsSetting form.
+ *
+ * @package form
+ * @subpackage csSetting
+ * @version SVN: $Id: sfDoctrineFormTemplate.php 6174 2007-11-27 06:22:40Z
fabien $
+ */
+class csSettingAdminForm extends csSettingForm
+{
+ public function configure()
+ {
+ $this->widgetSchema['type'] = new sfWidgetFormSelectRadio(array(
+ 'choices' =>
sfConfig::get('app_csSettingsPlugin_types'),
+ ));
+
+ $choices = Doctrine::getTable('csSetting')->getExistingGroupsArray();
+
+ if ($choices)
+ {
+ $choices = array_merge(array('' => ''), $choices);
+ $this->widgetSchema['setting_group'] = new sfWidgetFormSelect(array(
+ 'choices' => $choices,
+ ));
+ }
+
+ $this->validatorSchema->setPostValidator(
+ new sfValidatorDoctrineUnique(array('model' => 'csSetting', 'column' =>
array('name')), array('invalid' => 'Cannot use this name, a setting with this
name already exists!'))
+ );
+
+ $help = array(
+ 'Text Field' => 'HTML Attributes',
+ 'Text Area' => 'HTML Attributes',
+ 'Checkbox' => 'HTML Attributes',
+ 'Checkbox' => 'Choices (key=value)',
+ 'Date Time' => '<a
href="http://www.symfony-project.org/api/1_2/sfWidgetFormDateTime"
target="_blank">Widget Options</a> (with_time=false)',
+ 'Yes/No Radios' => 'HTML Attributes',
+ 'Database Model' => '<a
href="http://www.symfony-project.org/api/1_2/sfWidgetFormDoctrineChoice"
target="_blank">Widget Options</a> (*model=MyModel method=__toString
add_empty=true)',
+ 'Upload' => '<a
href="http://www.symfony-project.org/api/1_2/sfWidgetFormInputFileEditable"
target="_blank">Widget Options</a>',
+ );
+
+ $helpStr = '<b>The following options are supported for each setting
type</b>:<ul>';
+
+ foreach ($help as $key => $value)
+ {
+ $helpStr .= "<li>$key: $value</li>";
+ }
+ $helpStr .= '</ul>* required';
+
+ $this->widgetSchema->setLabels(array(
+ 'setting_group' => 'Group',
+ 'slug' => 'Handle',
+ 'widget_options' => 'Options',
+ ));
+
+ $this->widgetSchema->setLabels(array(
+ 'slug' => 'This is used in your code to pull the value for
this setting. Use csSettings::get($handle);',
+ 'widget_options' => $helpStr,
+ 'setting_group' => 'Organize your settings into groups',
+ ));
+ }
+}
\ No newline at end of file
Modified:
plugins/csSettingsPlugin/trunk/lib/model/doctrine/PlugincsSetting.class.php
===================================================================
--- plugins/csSettingsPlugin/trunk/lib/model/doctrine/PlugincsSetting.class.php
2010-02-01 02:28:37 UTC (rev 27375)
+++ plugins/csSettingsPlugin/trunk/lib/model/doctrine/PlugincsSetting.class.php
2010-02-01 02:53:05 UTC (rev 27376)
@@ -69,13 +69,20 @@
public function getValue()
{
+ $value = $this->_get('value');
switch ($this['type'])
{
case 'checkbox':
+ if ($value == '')
+ {
+ // Cast as boolean
+ return false;
+ }
+ break;
case 'yesno':
- return (bool) $this->_get('value');
+ return (bool) $value;
}
- return $this->_get('value');
+ return $value;
}
}
Modified:
plugins/csSettingsPlugin/trunk/lib/model/doctrine/PlugincsSettingTable.class.php
===================================================================
---
plugins/csSettingsPlugin/trunk/lib/model/doctrine/PlugincsSettingTable.class.php
2010-02-01 02:28:37 UTC (rev 27375)
+++
plugins/csSettingsPlugin/trunk/lib/model/doctrine/PlugincsSettingTable.class.php
2010-02-01 02:53:05 UTC (rev 27376)
@@ -7,6 +7,11 @@
*/
class PlugincsSettingTable extends Doctrine_Table
{
+ public function findAllForList()
+ {
+ return $this->findAll();
+ }
+
public function findSettingsByGroup($query)
{
return $query->addOrderBy($query->getRootAlias().'.setting_group ASC');
Modified:
plugins/csSettingsPlugin/trunk/modules/csSetting/lib/BasecsSettingActions.class.php
===================================================================
---
plugins/csSettingsPlugin/trunk/modules/csSetting/lib/BasecsSettingActions.class.php
2010-02-01 02:28:37 UTC (rev 27375)
+++
plugins/csSettingsPlugin/trunk/modules/csSetting/lib/BasecsSettingActions.class.php
2010-02-01 02:53:05 UTC (rev 27376)
@@ -20,25 +20,39 @@
public function executeListSaveSettings(sfWebRequest $request)
{
- if($settings = $this->getRequestParameter('cs_setting'))
+ self::executeIndex($request);
+ if($settings = $request->getParameter('cs_setting'))
{
- foreach($settings AS $slug => $value)
+ $this->form = new SettingsListForm();
+ $this->form->bind($settings, $request->getfiles('cs_setting'));
+ if ($this->form->isValid())
{
- $setting = Doctrine::getTable('csSetting')->findOneBySlug($slug);
- if ($setting)
+ foreach($this->form->getValues() as $slug => $value)
{
- $setting->setValue($value);
- $setting->save();
+ $setting = Doctrine::getTable('csSetting')->findOneBySlug($slug);
+ if ($setting)
+ {
+ $setting->setValue($value);
+ $setting->save();
+ }
}
+
+ if($files = $request->getFiles('cs_setting'))
+ {
+ $this->processUpload($settings, $files);
+ }
+
+ // Update form with new values
+ $this->form = new SettingsListForm();
+
+ $this->getUser()->setFlash('notice', 'Your settings have been saved.');
}
+ else
+ {
+ $this->getUser()->setFlash('error', 'Your form contains some errors');
+ }
}
-
- if($files = $request->getFiles('cs_setting'))
- {
- $this->processUpload($settings, $files);
- }
- $this->getUser()->setFlash('notice', 'Your settings have been saved.');
- $this->redirect('@cs_setting');
+ $this->setTemplate('index');
}
public function executeListRestoreDefault(sfWebRequest $request)
Modified:
plugins/csSettingsPlugin/trunk/modules/csSetting/templates/_list_td_tabular.php
===================================================================
---
plugins/csSettingsPlugin/trunk/modules/csSetting/templates/_list_td_tabular.php
2010-02-01 02:28:37 UTC (rev 27375)
+++
plugins/csSettingsPlugin/trunk/modules/csSetting/templates/_list_td_tabular.php
2010-02-01 02:53:05 UTC (rev 27376)
@@ -2,5 +2,8 @@
<?php echo link_to($cs_setting->getName(), 'cs_setting_edit', $cs_setting) ?>
</td>
<td class="sf_admin_text sf_admin_list_td_value">
+ <?php if ($form[$cs_setting['slug']]->hasError()): ?>
+ <?php echo $form[$cs_setting['slug']]->renderError() ?>
+ <?php endif ?>
<?php echo $form[$cs_setting['slug']] ?>
</td>
\ No newline at end of file
--
You received this message because you are subscribed to the Google Groups
"symfony SVN" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/symfony-svn?hl=en.