riainvoice/application/core/Validator.php
gandhimathi Bharathirajan c940cb1a2c all files
2017-09-11 14:38:03 +05:30

253 lines
6.3 KiB
PHP

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
/*
* InvoicePlane
*
* @author InvoicePlane Developers & Contributors
* @copyright Copyright (c) 2012 - 2017 InvoicePlane.com
* @license https://invoiceplane.com/license.txt
* @link https://invoiceplane.com
*/
/**
* Class Validator
*/
class Validator extends MY_Model
{
public function validate_text()
{
return true;
}
/**
* @param $value
* @return bool|null
*/
public function validate_date($value)
{
if ($value == "") {
return null;
}
if (!is_date($value)) {
$this->form_validation->set_message('validate_date', 'Invalid date');
return false;
}
return true;
}
/**
* @param $value
* @return bool|null
*/
public function validate_boolean($value)
{
if ($value == "0" || $value == "1") {
return true;
}
if ($value == "") {
return null;
}
return false;
}
/**
* @param $value
* @param $key
* @return null
*/
public function validate_singlechoice($value, $key)
{
if ($value == "") {
return null;
}
$this->load->model('custom_values/mdl_custom_values', 'custom_value');
$result = $this->custom_value->column_has_value($key, $value);
return $result;
}
/**
* @param $value
* @param $key
* @return bool|null
*/
public function validate_multiplechoice($value, $id)
{
if ($value == "") {
return null;
}
$this->load->model('custom_values/mdl_custom_values', 'custom_value');
$this->custom_value->where('custom_field_id', $id);
$dbvals = $this->custom_value->where_in('custom_values_id', $value)->get();
if ($dbvals->num_rows() == sizeof($value)) {
return true;
}
return false;
}
/**
* @return array
*/
public function validation_rules()
{
return array(
'custom_field_table' => array(
'field' => 'custom_field_table',
'label' => trans('table'),
'rules' => 'required'
),
'custom_field_label' => array(
'field' => 'custom_field_label',
'label' => trans('label'),
'rules' => 'required|max_length[50]'
),
'custom_field_type' => array(
'field' => 'custom_field_type',
'label' => trans('type'),
'rules' => 'required'
)
);
}
/**
* @param $column
* @return null
*/
public function get_field_type($column)
{
$this->load->model('custom_values/mdl_custom_fields', 'cf');
$el = $this->cf->get_by_column($column)->row();
if ($el == null) {
return null;
}
return $el->custom_field_type;
}
/**
* @param $array
* @return bool|string
*/
public function validate($array)
{
$this->load->model('custom_fields/mdl_custom_fields');
$this->load->model('custom_values/mdl_custom_values');
$db_array = $array;
$errors = [];
if (empty($db_array)) {
// Return true if no fields need to be validated
return true;
}
foreach ($db_array as $key => $value) {
$model = $this->mdl_custom_fields->where('custom_field_id', $key)->get();
if ($model->num_rows()) {
$model = $model->row();
if (@$model->custom_field_required == "1") {
if ($value == "") {
$errors[] = array(
"field" => $model->custom_field_id,
"label" => $model->custom_field_label,
"error_msg" => "missing field required"
);
continue;
}
}
$result = $this->validate_type($model->custom_field_type, $value, $key);
if ($result === false) {
$errors[] = array(
"field" => $model->custom_field_id,
"label" => $model->custom_field_label,
"error_msg" => "invalid input"
);
}
}
}
if (sizeof($errors) == 0) {
$this->_formdata = $db_array;
$this->fixinput();
return true;
}
return $this->create_error_text($errors);
}
/**
* @param $type
* @param $value
* @param $key
* @return mixed
*/
public function validate_type($type, $value, $key)
{
$nicename = $this->mdl_custom_fields->get_nicename(
$type
);
$validation_rule = 'validate_' . $nicename;
return $this->{$validation_rule}($value, $key);
}
public function fixinput()
{
foreach ($this->_formdata as $key => $value) {
$model = $this->mdl_custom_fields->where('custom_field_id', $key)->get();
if ($model->num_rows()) {
$model = $model->row();
$ftype = $model->custom_field_type;
switch ($ftype) {
case "DATE":
if ($value == "") {
$this->_formdata[$key] = null;
} else {
$this->_formdata[$key] = date_to_mysql($value);
}
break;
case "MULTIPLE-CHOICE":
$this->_formdata[$key] = implode(",", $value);
break;
case "TEXT":
if ($value == "") {
$this->_formdata[$key] = null;
}
break;
}
}
}
}
/**
* @param $errors
* @return string
*/
public function create_error_text($errors)
{
$string = [];
foreach ($errors as $error) {
$string[] = sprintf(lang('validator_fail'), $error['label'], $error['error_msg']);
}
return nl2br(implode("\n", $string));
}
}