/** * 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; }
/** * 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']); }