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.

Reply via email to