ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Changeset 10969


Ignore:
Timestamp:
Mar 9, 2009, 5:01:01 PM (13 years ago)
Author:
ebihara
Message:

#3361:added ability to limit value ranges for the date type form inputs

Location:
OpenPNE3/trunk
Files:
4 added
7 edited

Legend:

Unmodified
Added
Removed
  • OpenPNE3/trunk/apps/pc_backend/modules/profile/templates/editSuccess.php

    r9831 r10969  
    1 <h2>プロフィール項目追加</h2>
     1<?php use_helper('Javascript') ?>
     2
     3<h2><?php echo __('プロフィール項目追加') ?></h2>
     4
     5<?php if ($form->hasGlobalErrors()) : ?>
     6<ul>
     7<?php echo $form->renderGlobalErrors() ?>
     8</ul>
     9<?php endif; ?>
     10
    211<?php if ($form->isNew()): ?>
    312<form action="<?php echo url_for('profile/edit') ?>" method="post">
     
    615<?php endif; ?>
    716<table>
    8 
    917<tr><th colspan="2">ja_JP 用設定</th></tr>
    1018<?php echo $form['ja_JP']['caption']->renderRow() ?>
    1119<?php echo $form['ja_JP']['info']->renderRow() ?>
     20</table>
    1221
     22<table id="common">
    1323<tr><th colspan="2">共通設定</th></tr>
    1424<?php echo $form['name']->renderRow() ?>
     
    1929<?php echo $form['is_disp_search']->renderRow() ?>
    2030<?php echo $form['form_type']->renderRow() ?>
     31</table>
    2132
    22 <tr><th colspan="2"><?php echo __('以下の項目はフォームタイプが「テキスト」、「テキスト(複数行)」の場合のみ有効です。') ?></th></tr>
     33<?php slot('advanced_settings_text') ?>
     34<table id="advanced">
    2335<?php echo $form['value_type']->renderRow() ?>
    2436<tr>
     
    2638<td><?php echo $form['value_min']->render() ?>~<?php echo $form['value_max']->render() ?></td>
    2739</tr>
    28 <?php echo $form['value_regexp']->renderRow() ?>
    29 
     40<?php echo $form['value_regexp']->renderRow(array('class' => 'advanced')) ?>
     41</table>
     42<?php end_slot() ?>
     43<?php slot('advanced_settings_date') ?>
     44<table id="advanced">
    3045<tr>
    31 <td colspan="2">
    32 <?php echo $form->renderHiddenFields() ?>
    33 <input type="submit" value="<?php echo __('追加する') ?>" /></td>
     46<th><?php echo $form['value_min']->renderLabel() ?>~<?php echo $form['value_max']->renderLabel() ?></th>
     47<td>
     48<ul>
     49<li><code>YYYY/MM/DD HH:MM:SS</code> 形式で入力(例:<code>2009/01/01 23:59:21</code>)</li>
     50<li>その他、 PHP の <code>strtotime()</code> 関数が解釈することのできる特殊な文字列が利用可能</li>
     51</ul>
     52<?php echo $form['value_min']->render() ?>~<?php echo $form['value_max']->render() ?>
     53</td>
    3454</tr>
    3555</table>
     56<?php end_slot() ?>
     57
     58<?php if ($form->isNew()) : ?>
     59<?php include_slot('advanced_settings_text') ?>
     60<?php else: ?>
     61<?php if ($profile->getFormType() === 'input' || $profile->getFormType() == 'textarea'): ?>
     62<?php include_slot('advanced_settings_text') ?>
     63<?php elseif ($profile->getFormType() === 'date'): ?>
     64<?php include_slot('advanced_settings_date') ?>
     65<?php endif; ?>
     66<?php endif; ?>
     67
     68<?php echo $form->renderHiddenFields() ?>
     69<input type="submit" value="<?php echo __('追加する') ?>" />
    3670</form>
     71
     72<?php echo javascript_tag('
     73function changeAdvancedFormByFormType()
     74{
     75  if (document.getElementById("advanced"))
     76  {
     77    Element.remove("advanced");
     78  }
     79
     80  var form_type = $F("profile_form_type");
     81  if (form_type == "input" || form_type == "textarea")
     82  {
     83    Insertion.After("common", "'.str_replace(array('"', "\n"), array('\"', ''), get_slot('advanced_settings_text')).'");
     84  }
     85  else if (form_type == "date")
     86  {
     87    Insertion.After("common", "'.str_replace(array('"', "\n"), array('\"', ''), get_slot('advanced_settings_date')).'");
     88  }
     89}
     90
     91Event.observe(window, "load", function(e){
     92  changeAdvancedFormByFormType();
     93});
     94
     95Event.observe("profile_form_type", "change", function(e){
     96  changeAdvancedFormByFormType();
     97});
     98') ?>
  • OpenPNE3/trunk/config/schema.yml

    r10706 r10969  
    4747    value_type: { type: varchar(32), required: true, defaultValue: "" }
    4848    value_regexp: { type: longvarchar }
    49     value_min: { type: integer }
    50     value_max: { type: integer }
     49    value_min: { type: varchar(32) }
     50    value_max: { type: varchar(32) }
    5151    is_disp_regist: { type: boolean, required: true, defaultValue: 0 }
    5252    is_disp_config: { type: boolean, required: true, defaultValue: 0 }
  • OpenPNE3/trunk/data/fixtures/001_import_profile.yml

    r10462 r10969  
    1818    is_disp_config: 1
    1919    is_disp_search: 1
     20    value_min: "-100years"
     21    value_max: "now"
    2022    sort_order: 120
    2123
  • OpenPNE3/trunk/lib/form/ProfileForm.class.php

    r10003 r10969  
    5252    );
    5353
     54    $this->mergePostValidator(new sfValidatorCallback(array('callback' => array('ProfileForm', 'advancedValidator'))));
     55    $this->setValidator('value_min', new sfValidatorPass());
     56    $this->setValidator('value_max', new sfValidatorPass());
     57    $this->setValidator('value_type', new sfValidatorString(array('required' => false, 'empty_value' => 'string')));
     58
    5459    $this->widgetSchema->setLabels(array(
    5560      'name' => '識別名',
     
    7580    $this->embedI18n(array('ja_JP'));
    7681  }
     82
     83  static public function advancedValidator($validator, $values)
     84  {
     85    if ($values['form_type'] === 'input' || $values['form_type'] === 'textarea')
     86    {
     87      $validator = new sfValidatorInteger(array('required' => false));
     88      $values['value_min'] = $validator->clean($values['value_min']);
     89      $values['value_max'] = $validator->clean($values['value_max']);
     90    }
     91    elseif ($values['form_type'] === 'date')
     92    {
     93      $validator = new opValidatorDate(array('required' => false));
     94      $validator->clean($values['value_min']);
     95      $validator->clean($values['value_max']);
     96    }
     97    elseif ($values['value_min'] || $values['value_max'])
     98    {
     99      throw new sfValidatorError($validator, 'invalid');
     100    }
     101
     102    return $values;
     103  }
    77104}
  • OpenPNE3/trunk/lib/model/Profile.php

    r10089 r10969  
    4141  public function hydrate($row, $startcol = 0, $rehydrate = false)
    4242  {
    43     $this->setCulture(sfContext::getInstance()->getUser()->getCulture());
     43    try
     44    {
     45      $context = sfContext::getInstance();
     46    }
     47    catch (sfException $e)
     48    {
     49      $context = null;
     50    }
     51
     52    if ($context)
     53    {
     54      $this->setCulture($context->getUser()->getCulture());
     55    }
    4456    return parent::hydrate($row, $startcol, $rehydrate);
    4557  }
  • OpenPNE3/trunk/lib/util/opFormItemGenerator.class.php

    r10966 r10969  
    110110      return $obj;
    111111    }
     112
     113    if ($field['ValueType'] === 'integer' || $field['FormType'] === 'date')
     114    {
     115        if (isset($field['ValueMin']))
     116        {
     117          $option['min'] = $field['ValueMin'];
     118        }
     119        if (isset($field['ValueMax']))
     120        {
     121          $option['max'] = $field['ValueMax'];
     122        }
     123    }
     124    else
     125    {
     126        if (isset($field['ValueMin']))
     127        {
     128          $option['min_length'] = $field['ValueMin'];
     129        }
     130        if (isset($field['ValueMax']))
     131        {
     132          $option['max_length'] = $field['ValueMax'];
     133        }
     134    }
     135
    112136    if ($field['FormType'] === 'date')
    113137    {
    114       $obj = new opValidatorDate();
     138      $obj = new opValidatorDate($option);
    115139      return $obj;
    116     }
    117 
    118     if ($field['ValueType'] === 'integer')
    119     {
    120         if (isset($field['ValueMin']))
    121         {
    122           $option['min'] = $field['ValueMin'];
    123         }
    124         if (isset($field['ValueMax']))
    125         {
    126           $option['max'] = $field['ValueMax'];
    127         }
    128     }
    129     else
    130     {
    131         if (isset($field['ValueMin']))
    132         {
    133           $option['min_length'] = $field['ValueMin'];
    134         }
    135         if (isset($field['ValueMax']))
    136         {
    137           $option['max_length'] = $field['ValueMax'];
    138         }
    139140    }
    140141
  • OpenPNE3/trunk/lib/validator/opValidatorDate.class.php

    r10819 r10969  
    134134    }
    135135
     136
     137    if ($this->hasOption('max'))
     138    {
     139      $max = new DateTime($this->getOption('max'));
     140      if ($max && $clean->format('U') > $max->format('U'))
     141      {
     142        throw new sfValidatorError($this, 'max', array('max' => $max->format('Y-m-d')));
     143      }
     144    }
     145
     146    if ($this->hasOption('min'))
     147    {
     148      $min = new DateTime($this->getOption('min'));
     149      if ($min && $clean->format('U') < $min->format('U'))
     150      {
     151        throw new sfValidatorError($this, 'min', array('min' => $min->format('Y-m-d')));
     152      }
     153    }
     154
    136155    return $clean;
    137156  }
Note: See TracChangeset for help on using the changeset viewer.