✏️ 编辑:ProfileForm.class.php
路径:
/virtual/bigbrother/sns/lib/form/ProfileForm.class.php
大小:5.11 KB · 修改:2010-08-10 13:59:42 · 权限:0644 · 可写
← 返回目录
👁 查看
⬇ 下载
<?php /** * This file is part of the OpenPNE package. * (c) OpenPNE Project (http://www.openpne.jp/) * * For the full copyright and license information, please view the LICENSE * file and the NOTICE file that were distributed with this source code. */ /** * Profile form. * * @package symfony * @subpackage form * @author Kousuke Ebihara <ebihara@tejimaya.com> */ class ProfileForm extends BaseProfileForm { public function configure() { $isDispOption = array('choices' => array('1' => '表示する', '0' => '表示しない')); $this->setWidgets(array( 'name' => new sfWidgetFormInput(), 'is_edit_public_flag' => new sfWidgetFormSelectRadio(array('choices' => array('0' => '固定', '1' => 'メンバー選択'))), 'default_public_flag' => new sfWidgetFormSelect(array('choices' => ProfilePeer::getPublicFlags())), 'is_disp_regist' => new sfWidgetFormSelectRadio($isDispOption), 'is_disp_config' => new sfWidgetFormSelectRadio($isDispOption), 'is_disp_search' => new sfWidgetFormSelectRadio($isDispOption), 'form_type' => new sfWidgetFormSelect(array('choices' => array( 'input' => 'テキスト', 'textarea' => 'テキスト(複数行)', 'select' => '単一選択(プルダウン)', 'radio' => '単一選択(ラジオボタン)', 'checkbox' => '複数選択(チェックボックス)', 'date' => '日付', ))), 'value_type' => new sfWidgetFormSelect(array('choices' => array( 'string' => '文字列', 'integer' => '数値', 'email' => 'メールアドレス', 'url' => 'URL', 'regexp' => '正規表現', ))), 'is_unique' => new sfWidgetFormSelectRadio(array('choices' => array('0' => '重複可', '1' => '重複不可'))), 'sort_order' => new sfWidgetFormInputHidden(), ) + $this->getWidgetSchema()->getFields()); $this->widgetSchema->setNameFormat('profile[%s]'); $this->validatorSchema->setPostValidator( new sfValidatorPropelUnique(array('model' => 'Profile', 'column' => array('name'))) ); $this->mergePostValidator(new sfValidatorCallback(array('callback' => array('ProfileForm', 'advancedValidator')))); $this->setValidator('default_public_flag', new sfValidatorChoice(array('choices' => array_keys(ProfilePeer::getPublicFlags())))); $this->setValidator('value_min', new sfValidatorPass()); $this->setValidator('value_max', new sfValidatorPass()); $this->setValidator('value_type', new sfValidatorString(array('required' => false, 'empty_value' => 'string'))); $this->widgetSchema->setLabels(array( 'name' => '識別名', 'is_required' => '必須', 'is_edit_public_flag' => '公開設定の選択', 'default_public_flag' => '公開設定デフォルト値', 'is_unique' => '重複の可否', 'form_type' => 'フォームタイプ', 'value_type' => '入力値タイプ', 'value_regexp' => '正規表現', 'value_min' => '最小値', 'value_max' => '最大値', 'is_disp_regist' => '新規登録', 'is_disp_config' => 'プロフィール変更', 'is_disp_search' => 'メンバー検索' )); $this->setDefaults($this->getDefaults() + array( 'is_unique' => '0', 'is_disp_regist' => '1', 'is_disp_config' => '1', 'is_disp_search' => '1', )); $this->embedI18n(array('ja_JP')); } static public function advancedValidator($validator, $values) { if ($values['form_type'] === 'input' || $values['form_type'] === 'textarea') { $validator = new sfValidatorInteger(array('required' => false)); $values['value_min'] = $validator->clean($values['value_min']); $values['value_max'] = $validator->clean($values['value_max']); } elseif ($values['form_type'] === 'date') { $validator = new opValidatorDate(array('required' => false)); $validator->clean($values['value_min']); $validator->clean($values['value_max']); } elseif ($values['value_min'] || $values['value_max']) { throw new sfValidatorError($validator, 'invalid'); } return $values; } public function save($con = null) { $profile = parent::save($con); $values = $this->getValues(); if (!$values['is_edit_public_flag']) { $con = Propel::getConnection(MemberProfilePeer::DATABASE_NAME, Propel::CONNECTION_WRITE); $sc = new Criteria(MemberProfilePeer::DATABASE_NAME); $sc->add(MemberProfilePeer::LFT_KEY, 1); $sc->add(MemberProfilePeer::PROFILE_ID, $profile->getId()); $uc = new Criteria(MemberProfilePeer::DATABASE_NAME); $uc->add(MemberProfilePeer::PUBLIC_FLAG, $values['default_public_flag']); BasePeer::doUpdate($sc, $uc, $con); } if ($values['form_type'] === 'date') { if(!count($profile->getProfileOptions())) { $dateField = array('year', 'month', 'day'); foreach ($dateField as $k => $field) { $profileOption = new ProfileOption(); $profileOption->setSortOrder($k); $profileOption->setProfile($profile); $profileOption->save(); } } } } }
💾 保存
取消
保存为 UTF-8,换行统一为 LF