示例#1
0
 /**
  *  プラグインを使ったフォーム値検証メソッド
  *
  *  @access private
  *  @param  string  $form_name  フォームの名前
  *  @todo   ae 側に $key を与えられるようにする
  */
 public function _validateWithPlugin($form_name)
 {
     // (pre) filter
     if ($this->form[$form_name]['type'] != VAR_TYPE_FILE) {
         //    入力値とフィルタ定義を取り出す
         $form_var = $this->get($form_name);
         $filter = isset($this->form[$form_name]['filter']) ? $this->form[$form_name]['filter'] : null;
         //    フィルタを適用
         if (is_array($this->form[$form_name]['type']) == false) {
             $this->set($form_name, $this->_filter($form_var, $filter));
         } else {
             if ($form_var != null) {
                 //  配列の場合
                 foreach (array_keys($form_var) as $key) {
                     $this->set($form_name . "[" . $key . "]", $this->_filter($form_var[$key], $filter));
                 }
             } else {
                 //  配列で値が空の場合
                 $this->set($form_name, $this->_filter($form_var, $filter));
             }
         }
     }
     $form_vars = $this->get($form_name);
     $plugin = $this->_getPluginDef($form_name);
     // type のチェックを処理の最初に追加
     $plugin = array_merge(array('type' => array()), $plugin);
     if (is_array($this->form[$form_name]['type'])) {
         $plugin['type']['type'] = $this->form[$form_name]['type'][0];
     } else {
         $plugin['type']['type'] = $this->form[$form_name]['type'];
     }
     if (isset($this->form[$form_name]['type_error'])) {
         $plugin['type']['error'] = $this->form[$form_name]['type_error'];
     }
     // スカラーの場合
     if (is_array($this->form[$form_name]['type']) == false) {
         foreach (array_keys($plugin) as $name) {
             // break: 明示されていなければ,エラーが起きたらvalidateを継続しない
             $break = isset($plugin[$name]['break']) == false || $plugin[$name]['break'];
             // プラグイン取得
             unset($v);
             $v = $this->plugin->getPlugin('Validator', ucfirst(strtolower($name)));
             if (Ethna::isError($v)) {
                 continue;
             }
             // バリデーション実行
             unset($r);
             $r = $v->validate($form_name, $form_vars, $plugin[$name]);
             // エラー処理
             if ($r !== true) {
                 if (Ethna::isError($r)) {
                     $this->ae->addObject($form_name, $r);
                 }
                 if ($break) {
                     break;
                 }
             }
         }
         return;
     }
     // 配列の場合
     // break 指示用の key list
     $valid_keys = is_array($form_vars) ? array_keys($form_vars) : array();
     foreach (array_keys($plugin) as $name) {
         // break: 明示されていなければ,エラーが起きたらvalidateを継続しない
         $break = isset($plugin[$name]['break']) == false || $plugin[$name]['break'];
         // プラグイン取得
         unset($v);
         $v = $this->plugin->getPlugin('Validator', ucfirst(strtolower($name)));
         if (Ethna::isError($v)) {
             continue;
         }
         // 配列全体を受け取るプラグインの場合
         if (isset($v->accept_array) && $v->accept_array == true) {
             // バリデーション実行
             unset($r);
             $r = $v->validate($form_name, $form_vars, $plugin[$name]);
             // エラー処理
             if (Ethna::isError($r)) {
                 $this->ae->addObject($form_name, $r);
                 if ($break) {
                     break;
                 }
             }
             continue;
         }
         // 配列の各要素に対して実行
         foreach ($valid_keys as $key) {
             // バリデーション実行
             unset($r);
             $r = $v->validate($form_name, $form_vars[$key], $plugin[$name]);
             // エラー処理
             if (Ethna::isError($r)) {
                 $this->ae->addObject($form_name, $r);
                 if ($break) {
                     unset($valid_keys[$key]);
                 }
             }
         }
     }
 }
示例#2
0
文件: Plugin.php 项目: riaf/ethna
 /**
  *  Ethna 本体付属のプラグインのソースを include する
  *  (B.C.) Ethna 2.5.0 perview 5 以降,このメソッドには意味がありません.Ethna_Plugin::import を使ってください
  *
  *  @access public
  *  @param  string  $type   プラグインの種類
  *  @param  string  $name   プラグインの名前
  *  @static
  */
 public static function includeEthnaPlugin($type, $name)
 {
     Ethna_Plugin::import($type, $name);
 }
 /**
  *  Ethna 本体付属のプラグインのソースを include する
  *
  *  @access public
  *  @param  string  $type   プラグインの種類
  *  @param  string  $name   プラグインの名前
  *  @static
  */
 function includeEthnaPlugin($type, $name)
 {
     Ethna_Plugin::includePlugin($type, $name, 'Ethna');
 }
示例#4
0
 /**
  *  フィルタチェインを生成する
  *
  *  @access protected
  */
 public function _createFilterChain()
 {
     $this->filter_chain = array();
     foreach ($this->filter as $filter) {
         $filter_plugin = $this->plugin->getPlugin('Filter', $filter);
         if (Ethna::isError($filter_plugin)) {
             continue;
         }
         $this->filter_chain[] = $filter_plugin;
     }
 }