Beispiel #1
0
 /**
  * Returns true if configuration field pass given validation rule.
  * 
  * @param string $config Configuration variable
  * @param string $group Configuration group
  * @param mixed $value Submitted value
  * @param mixed $relatedValue value that related such as mail settings
  * @return boolean True if there are no errors
  * @access public
  */
 function _validates($config, $group, &$value, &$relatedValue = null)
 {
     global $_CONF_VALIDATE, $LANG_VALIDATION;
     $_validator =& validator::getInstance();
     if (isset($_CONF_VALIDATE[$group][$config]) && !empty($_CONF_VALIDATE[$group][$config])) {
         $default = array('rule' => 'blank');
         foreach ($_CONF_VALIDATE[$group][$config] as $index => $validator) {
             if (!is_array($validator)) {
                 if ($index == 'message' && is_string($validator)) {
                     continue;
                 }
                 $validator = array('rule' => $validator);
             } else {
                 if ($index == 'rule') {
                     $validator = array('rule' => $validator);
                 }
             }
             if (isset($_CONF_VALIDATE[$group][$config]['message']) && is_string($_CONF_VALIDATE[$group][$config]['message'])) {
                 $validator['message'] = $_CONF_VALIDATE[$group][$config]['message'];
                 unset($_CONF_VALIDATE[$group][$config]['message']);
             }
             $validator = array_merge($default, $validator);
             if (isset($validator['message'])) {
                 $message = $validator['message'];
             } else {
                 if (is_string($validator['rule']) && isset($LANG_VALIDATION[$validator['rule']])) {
                     $message = $LANG_VALIDATION[$validator['rule']];
                 } else {
                     if (is_array($validator['rule']) && isset($LANG_VALIDATION[$validator['rule'][0]])) {
                         $message = $LANG_VALIDATION[$validator['rule'][0]];
                     } else {
                         $message = $LANG_VALIDATION['default'];
                     }
                 }
             }
             if (is_array($validator['rule'])) {
                 $rule = $validator['rule'][0];
                 unset($validator['rule'][0]);
                 $ruleParams = array_merge(array($value), array_values($validator['rule']));
             } else {
                 $rule = $validator['rule'];
                 $ruleParams = array($value);
             }
             $valid = true;
             $custom_function = 'custom_validation_' . strtolower($rule);
             if (function_exists($custom_function)) {
                 $ruleParams[] = $validator;
                 $ruleParams[0] = array($config => $ruleParams[0]);
                 if (is_array($relatedValue) && !empty($relatedValue)) {
                     $ruleParams[] = $relatedValue;
                 }
                 $valid = $custom_function($rule, $ruleParams);
             } elseif (method_exists($_validator, $rule)) {
                 $valid = $_validator->dispatchMethod($rule, $ruleParams);
             } elseif (!is_array($validator['rule'])) {
                 $valid = preg_match($rule, $value);
             }
             if (!$valid || is_string($valid) && strlen($valid) > 0) {
                 if (is_string($valid) && strlen($valid) > 0) {
                     $validator['message'] = $valid;
                 } elseif (!isset($validator['message'])) {
                     $validator['message'] = $message;
                 }
                 $this->validationErrors[$group][$config] = $validator['message'];
                 $this->validationErrorValues[$group][$config] = $value;
                 return FALSE;
             }
         }
         // end foreach
         return $valid;
     }
     // end if
     return TRUE;
 }
Beispiel #2
0
 /**
  * reset this singleton back to base values
  */
 private function reset()
 {
     $v = validator::getInstance();
     foreach (array('rules') as $var) {
         $v->{$var} = array();
     }
 }
 /**
  * Get the values to use when value sent to validation method is
  * an array.
  *
  * @param  array $params Parameters sent to validation method
  * @return void
  */
 protected function _extract($params)
 {
     $_this = validator::getInstance();
     extract($params, EXTR_OVERWRITE);
     if (isset($check)) {
         $_this->check = $check;
     }
     if (isset($regex)) {
         $_this->regex = $regex;
     }
     if (isset($type)) {
         $_this->type = $type;
     }
 }
 private function validate()
 {
     $post = $this->request->post;
     if (!array_key_exists('form_id', $this->request->post) || !($setting = id::decode($this->request->post['form_id']))) {
         oc::registry()->message->data['error']['warning'] = $this->language->get('error_system_fields');
     } else {
         oc::registry()->message->data['form_id'] = $form_id = $this->request->post['form_id'];
         if (isset($this->form_id) && $this->form_id != $form_id) {
             return;
         }
         $template_info = $this->getTemplate($setting['template_id']);
         if ($setting['type'] == '0') {
             // cart, category...
             if (!$this->cart->hasStock() && !$template_info['stock_checkout']) {
                 oc::registry()->message->data['error']['warning'] = $this->language->get('error_stock');
             }
             if ($template_info['minimum']) {
                 $products = $this->cart->getProducts();
                 foreach ($products as $product) {
                     $product_total = 0;
                     foreach ($products as $product_2) {
                         if ($product_2['product_id'] == $product['product_id']) {
                             $product_total += $product_2['quantity'];
                         }
                     }
                     if ($product['minimum'] > $product_total) {
                         oc::registry()->message->data['error']['warning'] = sprintf($this->language->get('error_minimum'), $product['name'], $product['minimum']);
                     }
                 }
             }
         } else {
             // product
             if ($this->isAjax()) {
                 $this->load->model('catalog/product');
                 if (isset($this->request->get['product_id'])) {
                     $product_id = $this->request->get['product_id'];
                 } elseif (isset($this->request->post['product_id'])) {
                     $product_id = $this->request->post['product_id'];
                 } else {
                     $product_id = 0;
                 }
                 if ($template_info['minimum']) {
                     $product_info = $this->model_catalog_product->getProduct($product_id);
                     if (isset($this->request->post['quantity'])) {
                         $quantity = $this->request->post['quantity'];
                     } else {
                         $quantity = 1;
                     }
                     if ($product_info['minimum'] > $quantity) {
                         oc::registry()->message->data['error']['warning'] = sprintf($this->language->get('error_minimum'), $product_info['name'], $product_info['minimum']);
                     }
                 }
                 if (strpos(VERSION, '1.6') !== FALSE) {
                     if (isset($this->request->post['profile_id'])) {
                         $profile_id = $this->request->post['profile_id'];
                     } else {
                         $profile_id = 0;
                     }
                     $profiles = $this->model_catalog_product->getProfiles($product_id);
                     if ($profiles) {
                         $profile_ids = array();
                         foreach ($profiles as $profile) {
                             $profile_ids[] = $profile['profile_id'];
                         }
                         if (!in_array($profile_id, $profile_ids)) {
                             $json['error']['profile'] = $this->language->get('error_profile_required');
                         }
                     }
                 }
                 if ($template_info['use_option'] && $template_info['option_required']) {
                     if (isset($this->request->post['option'])) {
                         $option = array_filter($this->request->post['option']);
                     } else {
                         $option = array();
                     }
                     $required_options = array();
                     $product_options = $this->model_catalog_product->getProductOptions($product_id);
                     foreach ($product_options as $product_option) {
                         if ($product_option['required'] && (!isset($this->request->post['option'][$product_option['product_option_id']]) || !$this->request->post['option'][$product_option['product_option_id']])) {
                             $required_options[] = trim($product_option['name']);
                         }
                     }
                     if (!empty($required_options)) {
                         oc::registry()->message->data['error']['warning'] = sprintf($this->language->get('error_required_options'), implode(', ', $required_options));
                     }
                 }
             }
         }
         $language_id = $this->config->get('config_language_id');
         foreach ($template_info['fields'] as $field_id => $field_info) {
             if (!$field_info['status']) {
                 continue;
             }
             if (isset($post['fields'][$field_id]) || in_array($field_info['type']['type'], array('radio', 'checkbox'))) {
                 $value = isset($post['fields'][$field_id]) ? $post['fields'][$field_id] : FALSE;
                 // field value
                 $isEmpty = $value === FALSE || empty($value) && $value !== '0';
                 if ($isEmpty) {
                     if ($field_info['required']) {
                         oc::registry()->message->data['error']['fields'][$field_id] = $this->language->get('error_required');
                     }
                 } elseif (!empty($field_info['validate']) && ($validator = validator::getInstance($field_info))) {
                     if (!$validator->validate($value)) {
                         oc::registry()->message->data['error']['fields'][$field_id] = $validator->getErrorMessage();
                     }
                 }
             } else {
                 oc::registry()->message->data['error']['system'] = sprintf($this->language->get('error_field_empty'), $field_info['title'][$language_id]);
                 break;
             }
         }
     }
     return (bool) empty(oc::registry()->message->data['error']);
 }