/**
  * Called during validation operations, before validation. Please note that custom
  * validation rules can be defined in $validate.
  *
  * @param array $options Options passed from Model::save().
  * @return bool True if validate operation should continue, false to abort
  * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  * @see Model::save()
  */
 public function beforeValidate($options = array())
 {
     $qIndex = $options['questionIndex'];
     // Questionモデルは繰り返し判定が行われる可能性高いのでvalidateルールは最初に初期化
     // mergeはしません
     $this->validate = array('question_sequence' => array('numeric' => array('rule' => array('numeric'), 'message' => __d('net_commons', 'Invalid request.')), 'comparison' => array('rule' => array('comparison', '==', $qIndex), 'message' => __d('registrations', 'question sequence is illegal.'))), 'question_type' => array('inList' => array('rule' => array('inList', RegistrationsComponent::$typesList), 'message' => __d('net_commons', 'Invalid request.'))), 'question_value' => array('notBlank' => array('rule' => array('notBlank'), 'message' => __d('registrations', 'Please input question text.'))), 'is_require' => array('boolean' => array('rule' => array('boolean'), 'message' => __d('net_commons', 'Invalid request.'))), 'is_choice_random' => array('boolean' => array('rule' => array('boolean'), 'message' => __d('net_commons', 'Invalid request.'))), 'is_skip' => array('boolean' => array('rule' => array('boolean'), 'message' => __d('net_commons', 'Invalid request.'))), 'is_result_display' => array('inList' => array('rule' => array('inList', $this->_getResultDisplayList($this->data['RegistrationQuestion']['question_type'])), 'message' => __d('net_commons', 'Invalid request.'))), 'result_display_type' => array('inList' => array('rule' => array('inList', RegistrationsComponent::$resultDispTypesList), 'message' => __d('net_commons', 'Invalid request.'))), 'is_range' => array('boolean' => array('rule' => array('boolean'), 'message' => __d('net_commons', 'Invalid request.'))));
     // 範囲制限設定された項目の場合
     if ($this->data['RegistrationQuestion']['is_range'] == true) {
         $this->validate = Hash::merge($this->validate, array('min' => array('notBlank' => array('rule' => array('notBlank'), 'message' => __d('registrations', 'Please enter both the maximum and minimum values.')), 'comparison' => array('rule' => array('comparison', '<', $this->data['RegistrationQuestion']['max']), 'message' => __d('registrations', 'Please enter smaller value than max.'))), 'max' => array('notBlank' => array('rule' => array('notBlank'), 'message' => __d('registrations', 'Please enter both the maximum and minimum values.')), 'comparison' => array('rule' => array('comparison', '>', $this->data['RegistrationQuestion']['min']), 'message' => __d('registrations', 'Please enter bigger value than min.')))));
     }
     // validates時にはまだregistration_page_idの設定ができないのでチェックしないことにする
     // registration_page_idの設定は上位のRegistrationPageクラスで責任を持って行われるものとする
     parent::beforeValidate($options);
     $isSkip = $this->data['RegistrationQuestion']['is_skip'];
     // 付属の選択肢以下のvalidate
     if ($this->_checkChoiceExists() && isset($this->data['RegistrationChoice'])) {
         // この項目種別に必要な選択肢データがちゃんとあるなら選択肢をバリデート
         $validationErrors = array();
         foreach ($this->data['RegistrationChoice'] as $cIndex => $choice) {
             // 項目データバリデータ
             $this->RegistrationChoice->create();
             $this->RegistrationChoice->set($choice);
             $options['choiceIndex'] = $cIndex;
             $options['isSkip'] = $isSkip;
             if (!$this->RegistrationChoice->validates($options)) {
                 $validationErrors['RegistrationChoice'][$cIndex] = $this->RegistrationChoice->validationErrors;
             }
         }
         $this->validationErrors += $validationErrors;
     }
     return true;
 }
 /**
  * Called during validation operations, before validation. Please note that custom
  * validation rules can be defined in $validate.
  *
  * @param array $options Options passed from Model::save().
  * @return bool True if validate operation should continue, false to abort
  * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate
  * @see Model::save()
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  */
 public function beforeValidate($options = array())
 {
     // ウィザード画面中はstatusチェックをしないでほしいので
     // ここに来る前にWorkflowBehaviorでつけられたstatus-validateを削除しておく
     if (Hash::check($options, 'validate') == RegistrationsComponent::REGISTRATION_VALIDATE_TYPE) {
         $this->validate = Hash::remove($this->validate, 'status');
     }
     $this->validate = Hash::merge($this->validate, array('block_id' => array('numeric' => array('rule' => array('numeric'), 'message' => __d('net_commons', 'Invalid request.'), 'on' => 'update')), 'title' => array('rule' => 'notBlank', 'message' => sprintf(__d('net_commons', 'Please input %s.'), __d('registrations', 'Title')), 'required' => true, 'allowEmpty' => false), 'answer_timing' => array('publicTypeCheck' => array('rule' => array('inList', array(RegistrationsComponent::USES_USE, RegistrationsComponent::USES_NOT_USE)), 'message' => __d('net_commons', 'Invalid request.')), 'requireOtherFields' => array('rule' => array('requireOtherFields', RegistrationsComponent::USES_USE, array('Registration.answer_start_period', 'Registration.answer_end_period'), 'OR'), 'message' => __d('registrations', 'if you set the period, please set time.'))), 'answer_start_period' => array('checkDateTime' => array('rule' => 'checkDateTime', 'message' => __d('registrations', 'Invalid datetime format.'))), 'answer_end_period' => array('checkDateTime' => array('rule' => 'checkDateTime', 'message' => __d('registrations', 'Invalid datetime format.')), 'checkDateComp' => array('rule' => array('checkDateComp', '>=', 'answer_start_period'), 'message' => __d('registrations', 'start period must be smaller than end period'))), 'is_key_pass_use' => array('boolean' => array('rule' => array('boolean'), 'message' => __d('net_commons', 'Invalid request.')), 'requireOtherFieldsKey' => array('rule' => array('requireOtherFields', RegistrationsComponent::USES_USE, array('AuthorizationKey.authorization_key'), 'AND'), 'message' => __d('registrations', 'if you set the use key phrase period, please set key phrase text.')), 'authentication' => array('rule' => array('requireOtherFields', RegistrationsComponent::USES_USE, array('Registration.is_image_authentication'), 'XOR'), 'message' => __d('registrations', 'Authentication key setting , image authentication , either only one can not be selected.'))), 'is_image_authentication' => array('boolean' => array('rule' => array('boolean'), 'message' => __d('net_commons', 'Invalid request.')), 'authentication' => array('rule' => array('requireOtherFields', RegistrationsComponent::USES_USE, array('Registration.is_key_pass_use'), 'XOR'), 'message' => __d('registrations', 'Authentication key setting , image authentication , either only one can not be selected.'))), 'is_answer_mail_send' => array('boolean' => array('rule' => array('boolean'), 'message' => __d('net_commons', 'Invalid request.'))), 'is_regist_user_send' => array('boolean' => array('rule' => array('boolean'), 'message' => __d('net_commons', 'Invalid request.'))), 'reply_to' => array('email' => array('rule' => array('email', false, null), 'message' => sprintf(__d('mails', '%s, please enter by e-mail format'), __d('mails', 'E-mail address to receive a reply')), 'allowEmpty' => true))));
     parent::beforeValidate($options);
     // 最低でも1ページは存在しないとエラー
     if (!isset($this->data['RegistrationPage'][0])) {
         $this->validationErrors['pickup_error'] = __d('registrations', 'please set at least one page.');
     } else {
         // ページデータが存在する場合
         // 配下のページについてバリデート
         $validationErrors = array();
         $maxPageIndex = count($this->data['RegistrationPage']);
         $options['maxPageIndex'] = $maxPageIndex;
         foreach ($this->data['RegistrationPage'] as $pageIndex => $page) {
             // それぞれのページのフィールド確認
             $this->RegistrationPage->create();
             $this->RegistrationPage->set($page);
             // ページシーケンス番号の正当性を確認するため、現在の配列インデックスを渡す
             $options['pageIndex'] = $pageIndex;
             if (!$this->RegistrationPage->validates($options)) {
                 $validationErrors['RegistrationPage'][$pageIndex] = $this->RegistrationPage->validationErrors;
             }
         }
         $this->validationErrors += $validationErrors;
     }
     // 引き続き登録フォーム本体のバリデートを実施してもらうためtrueを返す
     return true;
 }
 /**
  * Called during validation operations, before validation. Please note that custom
  * validation rules can be defined in $validate.
  *
  * @param array $options Options passed from Model::save().
  * @return bool True if validate operation should continue, false to abort
  * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate
  * @see Model::save()
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  */
 public function beforeValidate($options = array())
 {
     // option情報取り出し
     $summaryId = $options['registration_answer_summary_id'];
     $this->data['RegistrationAnswer']['registration_answer_summary_id'] = $summaryId;
     $question = $options['question'];
     $allAnswers = $options['allAnswers'];
     // Answerモデルは繰り返し判定が行われる可能性高いのでvalidateルールは最初に初期化
     // mergeはしません
     $this->validate = array('registration_answer_summary_id' => array('numeric' => array('rule' => array('numeric'), 'allowEmpty' => true)), 'registration_question_key' => array('notBlank' => array('rule' => array('notBlank'), 'allowEmpty' => false, 'required' => true)), 'answer_value' => array('answerRequire' => array('rule' => array('answerRequire', $question), 'message' => __d('registrations', 'Input required')), 'answerMaxLength' => array('rule' => array('answerMaxLength', $question, RegistrationsComponent::REGISTRATION_MAX_ANSWER_LENGTH), 'message' => sprintf(__d('registrations', 'the answer is too long. Please enter under %d letters.', RegistrationsComponent::REGISTRATION_MAX_ANSWER_LENGTH))), 'answerChoiceValidation' => array('rule' => array('answerChoiceValidation', $question, $allAnswers), 'last' => true, 'message' => ''), 'answerTextValidation' => array('rule' => array('answerTextValidation', $question, $allAnswers), 'last' => true, 'message' => ''), 'answerDatetimeValidation' => array('rule' => array('answerDatetimeValidation', $question, $allAnswers), 'last' => true, 'message' => ''), 'answerMatrixValidation' => array('rule' => array('answerMatrixValidation', $question, $allAnswers), 'last' => true, 'message' => ''), 'answerEmailValidation' => array('rule' => array('answerEmailValidation', $question, $allAnswers), 'last' => true, 'message' => __d('mails', '%s, please enter by e-mail format', $question['question_value'])), 'answerEmailConfirmValidation' => array('rule' => array('answerEmailConfirmValidation', $question, $allAnswers), 'last' => true, 'message' => __d('net_commons', 'The input data does not match. Please try again.'))));
     parent::beforeValidate($options);
     return true;
 }
 /**
  * Constructor. Binds the model's database table to the object.
  *
  * @param bool|int|string|array $id Set this ID for this model on startup,
  * can also be an array of options, see above.
  * @param string $table Name of database table to use.
  * @param string $ds DataSource connection name.
  * @see Model::__construct()
  * @SuppressWarnings(PHPMD.BooleanArgumentFlag)
  */
 public function __construct($id = false, $table = null, $ds = null)
 {
     parent::__construct($id, $table, $ds);
     $this->loadModels(['Registration' => 'Registrations.Registration', 'RegistrationAnswer' => 'Registrations.RegistrationAnswer']);
 }
 /**
  * Called during validation operations, before validation. Please note that custom
  * validation rules can be defined in $validate.
  *
  * @param array $options Options passed from Model::save().
  * @return bool True if validate operation should continue, false to abort
  * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate
  * @see Model::save()
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  */
 public function beforeValidate($options = array())
 {
     $pageIndex = $options['pageIndex'];
     // Pageモデルは繰り返し判定が行われる可能性高いのでvalidateルールは最初に初期化
     // mergeはしません
     $this->validate = array('page_sequence' => array('numeric' => array('rule' => array('numeric')), 'comparison' => array('rule' => array('comparison', '==', $pageIndex), 'message' => __d('registrations', 'page sequence is illegal.'))), 'route_number' => array('numeric' => array('rule' => array('numeric'))));
     // validates時にはまだregistration_idの設定ができないのでチェックしないことにする
     // registration_idの設定は上位のRegistrationクラスで責任を持って行われるものとする
     parent::beforeValidate($options);
     // 付属の項目以下のvalidate
     if (!isset($this->data['RegistrationQuestion'][0])) {
         $this->validationErrors['page_sequence'][] = __d('registrations', 'please set at least one question.');
     } else {
         $validationErrors = array();
         foreach ($this->data['RegistrationQuestion'] as $qIndex => $question) {
             // 項目データバリデータ
             $this->RegistrationQuestion->create();
             $this->RegistrationQuestion->set($question);
             $options['questionIndex'] = $qIndex;
             if (!$this->RegistrationQuestion->validates($options)) {
                 $validationErrors['RegistrationQuestion'][$qIndex] = $this->RegistrationQuestion->validationErrors;
             }
         }
         $this->validationErrors += $validationErrors;
     }
     return true;
 }
 /**
  * Called during validation operations, before validation. Please note that custom
  * validation rules can be defined in $validate.
  *
  * @param array $options Options passed from Model::save().
  * @return bool True if validate operation should continue, false to abort
  * @link http://book.cakephp.org/2.0/en/models/callback-methods.html#beforevalidate
  * @see Model::save()
  * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
  */
 public function beforeValidate($options = array())
 {
     $this->validate = Hash::merge($this->validate, array('create_option' => array('rule' => array('inList', array(RegistrationsComponent::REGISTRATION_CREATE_OPT_NEW, RegistrationsComponent::REGISTRATION_CREATE_OPT_REUSE, RegistrationsComponent::REGISTRATION_CREATE_OPT_TEMPLATE)), 'message' => __d('registrations', 'Please choose create option.'), 'required' => true), 'title' => array('rule' => array('requireWhen', 'create_option', RegistrationsComponent::REGISTRATION_CREATE_OPT_NEW), 'message' => sprintf(__d('net_commons', 'Please input %s.'), __d('registrations', 'Title')), 'required' => false), 'past_registration_id' => array('requireWhen' => array('rule' => array('requireWhen', 'create_option', RegistrationsComponent::REGISTRATION_CREATE_OPT_REUSE), 'message' => __d('registrations', 'Please select past registration.')), 'checkPastRegistration' => array('rule' => array('checkPastRegistration'), 'message' => __d('registrations', 'Please select past registration.')))));
     return parent::beforeValidate($options);
 }