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

source: OpenPNE3/trunk/lib/util/opFormItemGenerator.class.php @ 10969

Last change on this file since 10969 was 10969, checked in by ebihara, 13 years ago

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

File size: 6.2 KB
Line 
1<?php
2
3/**
4 * This file is part of the OpenPNE package.
5 * (c) OpenPNE Project (http://www.openpne.jp/)
6 *
7 * For the full copyright and license information, please view the LICENSE
8 * file and the NOTICE file that were distributed with this source code.
9 */
10
11/**
12 * opFormItemGenerator generates form items (widgets and validators)
13 *
14 * @package    OpenPNE
15 * @subpackage form
16 * @author     Kousuke Ebihara <ebihara@tejimaya.com>
17 */
18class opFormItemGenerator
19{
20  public static function generateWidgetParams($field, $choices = array())
21  {
22    $params = array();
23
24    if ($field['Caption'])
25    {
26      $params['label'] = $field['Caption'];
27    }
28
29    switch ($field['FormType'])
30    {
31      case 'checkbox' :
32      case 'select' :
33      case 'radio' :
34        $params['choices'] = $choices;
35        if (!empty($field['Choices']))
36        {
37          $params['choices'] = $field['Choices'];
38        }
39    }
40
41    if (!empty($field['Default']))
42    {
43      $params['default'] = $field['Default'];
44    }
45
46    return $params;
47  }
48
49  public static function generateWidget($field, $choices = array())
50  {
51    $params = self::generateWidgetParams($field, $choices);
52
53    switch ($field['FormType'])
54    {
55      case 'checkbox':
56        $obj = new sfWidgetFormSelectCheckbox($params);
57        break;
58      case 'select':
59        $obj = new sfWidgetFormSelect($params);
60        break;
61      case 'radio':
62        $obj = new sfWidgetFormSelectRadio($params);
63        break;
64      case 'textarea':
65        $obj = new sfWidgetFormTextarea($params);
66        break;
67      case 'rich_textarea':
68        $params['config'] = 'theme_advanced_buttons1: "bold, italic, underline, forecolor, hr", theme_advanced_buttons2:"", theme_advanced_buttons3:"", ';
69        $params['width'] = '200px';
70        $jsPath = 'tiny_mce/tiny_mce';
71        sfContext::getInstance()->getResponse()->addJavascript($jsPath);
72        $obj = new sfWidgetFormTextareaTinyMCE($params, array('class' => 'tinymce'));
73        break;
74      case 'password':
75        $obj = new sfWidgetFormInputPassword($params);
76        break;
77      case 'date':
78        unset($params['choices']);
79        $params['culture'] = sfContext::getInstance()->getUser()->getCulture();
80        $params['month_format'] = 'number';
81        $obj = new opWidgetFormDate($params);
82        break;
83      case 'increased_input':
84        $obj = new opWidgetFormInputIncreased($params);
85        break;
86      default:
87        $obj = new sfWidgetFormInput($params);
88    }
89
90    return $obj;
91  }
92
93  public static function generateValidator($field, $choices = array())
94  {
95    $option = array('required' => $field['IsRequired'], 'trim' => $field['IsRequired']);
96    if (!$choices && !empty($field['Choices']))
97    {
98      $choices = array_keys($field['Choices']);
99    }
100
101    if ($field['FormType'] === 'checkbox')
102    {
103      $option['choices'] = $choices;
104      $obj = new sfValidatorChoiceMany($option);
105      return $obj;
106    }
107    if ($field['FormType'] === 'select' || $field['FormType'] === 'radio')
108    {
109      $obj = new sfValidatorChoice(array('choices' => $choices));
110      return $obj;
111    }
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
136    if ($field['FormType'] === 'date')
137    {
138      $obj = new opValidatorDate($option);
139      return $obj;
140    }
141
142    switch ($field['ValueType'])
143    {
144      case 'email':
145        $obj = new sfValidatorEmail($option);
146        break;
147      case 'pc_email':
148        $obj = new opValidatorPCEmail($option);
149        break;
150      case 'mobile_email':
151        $obj = new sfValidatorMobileEmail($option);
152        break;
153      case 'integer':
154        $obj = new sfValidatorInteger($option);
155        break;
156      case 'regexp':
157        $option['pattern'] = $field['ValueRegexp'];
158        $obj = new sfValidatorRegex($option);
159        break;
160      case 'url':
161        $obj = new sfValidatorUrl($option);
162        break;
163      case 'password':
164        $obj = new sfValidatorPassword($option);
165        break;
166      case 'pass':
167        $obj = new sfValidatorPass($option);
168        break;
169      default:
170        $obj = new sfValidatorString($option);
171    }
172
173    return $obj;
174  }
175
176  public static function generateSearchWidget($field, $choices = array())
177  {
178    $params = self::generateWidgetParams($field, $choices);
179
180    switch ($field['FormType'])
181    {
182      // selection
183      case 'checkbox':
184      case 'select':
185      case 'radio':
186        $obj = new sfWidgetFormSelectCheckbox($params);
187        break;
188      // doesn't allow searching
189      case 'increased_input':
190      case 'password':
191        $obj = null;
192        break;
193      // date
194      case 'date':
195        unset($params['choices']);
196        $params['culture'] = sfContext::getInstance()->getUser()->getCulture();
197        $params['month_format'] = 'number';
198        $params['can_be_empty'] = true;
199        $obj = new opWidgetFormDate($params);
200        break;
201      // text and something else
202      default:
203        $obj = new sfWidgetFormInput($params);
204    }
205
206    return $obj;
207  }
208
209  public static function filterSearchCriteria($c, $column, $value, $field, $choices = array())
210  {
211    if (!$c)
212    {
213      $c = new Criteria();
214    }
215
216    if (empty($value))
217    {
218      return $c;
219    }
220
221    switch ($field['FormType'])
222    {
223      // selection
224      case 'checkbox':
225      case 'select':
226      case 'radio':
227        if (count($value) == 1)
228        {
229          $c->add($column, array_shift($value));
230        }
231        else
232        {
233          foreach ($value as $item)
234          {
235            $c->addOr($column, $item);
236          }
237        }
238        break;
239      // doesn't allow searching
240      case 'increased_input':
241      case 'password':
242        // pass
243        break;
244      // text and something else
245      default:
246        $c->add($column, '%'.$value.'%', Criteria::LIKE);
247    }
248
249    return $c;
250  }
251}
Note: See TracBrowser for help on using the repository browser.