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

source: OpenPNE3/trunk/lib/form/ProfileForm.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: 3.6 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 * Profile form.
13 *
14 * @package    symfony
15 * @subpackage form
16 * @author     Kousuke Ebihara <ebihara@tejimaya.com>
17 */
18class ProfileForm extends BaseProfileForm
19{
20  public function configure()
21  {
22    $isDispOption = array('choices' => array('1' => '表示する', '0' => '表示しない'));
23
24    $this->setWidgets(array(
25      'name' => new sfWidgetFormInput(),
26      'is_disp_regist' => new sfWidgetFormSelectRadio($isDispOption),
27      'is_disp_config' => new sfWidgetFormSelectRadio($isDispOption),
28      'is_disp_search' => new sfWidgetFormSelectRadio($isDispOption),
29      'form_type' => new sfWidgetFormSelect(array('choices' => array(
30        'input'    => 'テキスト',
31        'textarea' => 'テキスト(複数行)',
32        'select'   => '単一選択(プルダウン)',
33        'radio'    => '単一選択(ラジオボタン)',
34        'checkbox' => '複数選択(チェックボックス)',
35        'date'     => '日付',
36      ))),
37      'value_type' => new sfWidgetFormSelect(array('choices' => array(
38        'string' => '文字列',
39        'integer' => '数値',
40        'email' => 'メールアドレス',
41        'url' => 'URL',
42        'regexp' => '正規表現',
43      ))),
44      'is_unique' => new sfWidgetFormSelectRadio(array('choices' => array('0' => '重複可', '1' => '重複不可'))),
45      'sort_order' => new sfWidgetFormInputHidden(),
46    ) + $this->getWidgetSchema()->getFields());
47
48    $this->widgetSchema->setNameFormat('profile[%s]');
49
50    $this->validatorSchema->setPostValidator(
51      new sfValidatorPropelUnique(array('model' => 'Profile', 'column' => array('name')))
52    );
53
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
59    $this->widgetSchema->setLabels(array(
60      'name' => '識別名',
61      'is_required' => '必須',
62      'is_unique' => '重複の可否',
63      'form_type' => 'フォームタイプ',
64      'value_type' => '入力値タイプ',
65      'value_regexp' => '正規表現',
66      'value_min' => '最小値',
67      'value_max' => '最大値',
68      'is_disp_regist' => '新規登録',
69      'is_disp_config' => 'プロフィール変更',
70      'is_disp_search' => 'メンバー検索',
71    ));
72
73    $this->setDefaults($this->getDefaults() + array(
74      'is_unique' => '0',
75      'is_disp_regist' => '1',
76      'is_disp_config' => '1',
77      'is_disp_search' => '1',
78    ));
79
80    $this->embedI18n(array('ja_JP'));
81  }
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  }
104}
Note: See TracBrowser for help on using the repository browser.