Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Form/Service/Validation.php
Строк: 191
<?php
namespace ConcreteCoreFormService;

use 
Loader;

/**
 *
 * @package    Helpers
 * @subpackage Validation
 * @author     Andrew Embler <andrew@concrete5.org>
 * @copyright  Copyright (c) 2003-2008 Concrete5. (http://www.concrete5.org)
 * @license    http://www.concrete5.org/license/     MIT License
 */

/**
 * Helper functions to use with validating submitting forms.
 *
 * @package    Helpers
 * @subpackage Validation
 * @author     Andrew Embler <andrew@concrete5.org>
 * @copyright  Copyright (c) 2003-2008 Concrete5. (http://www.concrete5.org)
 * @license    http://www.concrete5.org/license/     MIT License
 */
class Validation
{

    
/**
     * @access private
     */
    
const VALID_NOT_EMPTY 1;
    const 
VALID_EMAIL 2;
    const 
VALID_INTEGER 3;
    const 
VALID_INTEGER_REQUIRED 4;
    const 
VALID_UPLOADED_IMAGE 10;
    const 
VALID_UPLOADED_IMAGE_REQUIRED 11;
    const 
VALID_UPLOADED_FILE 20;
    const 
VALID_UPLOADED_FILE_REQUIRED 25;
    const 
VALID_TOKEN 30;
    const 
VALID_FIELD_INVALID 99;
    protected 
$fields = array();
    protected 
$fieldsInvalid = array();
    protected 
$data = array();
    protected 
$files = array();
    protected 
$error;

    public function 
__construct()
    {
        
$this->error Loader::helper('validation/error');
    }

    
/**
     * Adds a test to a field to ensure that, if set, it is a valid uploaded image.
     *
     * @param string $field
     * @param string $errorMsg
     * @param bool   $emptyIsOk Tells whether this can be submitted as empty (e.g. the validation tests only run if someone is actually submitted in the post.)
     * @return void
     */
    
public function addUploadedImage($field$errorMsg null$emptyIsOk true)
    {
        
$const = ($emptyIsOk) ? self::VALID_UPLOADED_IMAGE self::VALID_UPLOADED_IMAGE_REQUIRED;
        
$this->addRequired($field$errorMsg$const);
    }

    
/**
     * Adds a required field to the form helper object. This will then be typically used in conjunction with the test() method to see
     * if the test is passed
     *
     * @param string $field
     * @param string $errorMsg
     * @param string $validate test to validate against
     * @return void
     */
    
public function addRequired($field$errorMsg null$validate self::VALID_NOT_EMPTY)
    {
        
$obj = new stdClass;
        
$obj->message = ($errorMsg == null) ? t('Field "%s" is invalid'$field) : $errorMsg;
        
$obj->field $field;
        
$obj->validate $validate;
        
$this->fields[] = $obj;
    }

    
/**
     * Adds a test to a field to ensure that, if set, it is a valid uploaded file.
     *
     * @param string $field
     * @param string $errorMsg
     * @param bool   $emptyIsOk Tells whether this can be submitted as empty (e.g. the validation tests only run if someone is actually submitted in the post.)
     * @return void
     */
    
public function addUploadedFile($field$errorMsg null$emptyIsOk true)
    {
        
$const = ($emptyIsOk) ? self::VALID_UPLOADED_FILE self::VALID_UPLOADED_FILE_REQUIRED;
        
$this->addRequired($field$errorMsg$const);
    }

    
/**
     * Adds a required field and tests that it is integer only
     *
     * @param string $field
     * @param string $errorMsg
     * @param bool   $emptyIsOk Tells whether this can be submitted as empty (e.g. the validation tests only run if someone is actually submitted in the post.)
     * @return void
     */
    
public function addInteger($field$errorMsg null$emptyIsOk true)
    {
        
$const = ($emptyIsOk) ? self::VALID_INTEGER self::VALID_INTEGER_REQUIRED;
        
$this->addRequired($field$errorMsg$const);
    }

    public function 
addRequiredToken($value$errorMsg null)
    {
        
$obj = new stdClass;
        
$vt Loader::helper('validation/token');
        
$obj->message = ($errorMsg == null) ? $vt->getErrorMessage() : $errorMsg;
        
$obj->value $value;
        
$obj->validate self::VALID_TOKEN;
        
$this->fields[] = $obj;
    }

    
/**
     * Adds a required email address to the suite of tests to be run.
     *
     * @param string $field
     * @param string $errorMsg
     * @return void
     */
    
public function addRequiredEmail($field$errorMsg null)
    {
        
$this->addRequired($field$errorMsgself::VALID_EMAIL);
    }

    
/**
     * Sets the data files array
     */
    
public function setFiles()
    {
        
$this->files $_FILES;
    }

    
/**
     * An associative array that we setup to validate against. Typical usage is $val->setData($_POST);
     *
     * @param array $data
     * @return void
     */
    
public function setData($data)
    {
        
$this->data $data;
    }

    public function 
invalidate($message)
    {
        
$f = new stdClass;
        
$f->message $message;
        
$this->fieldsInvalid[] = $f;
    }

    
/**
     * After the validation error helper has been setup, the test() method ensures that all fields that require validation
     * pass. Returns the number of invalid fields (0 = success)
     *
     * @return int
     */
    
public function test()
    {
        
$val Loader::helper('validation/strings');
        
$num Loader::helper('validation/numbers');
        
$fil Loader::helper('validation/file');

        
// loop through all the fields in the array, and run whatever validation
        // the validate parameter says is required
        
foreach ($this->fields as $f) {
            
$validate $f->validate;
            
$field $f->field;
            switch (
$validate) {
                case 
self::VALID_NOT_EMPTY:
                    if (!
$val->notempty($this->data[$field])) {
                        
$this->fieldsInvalid[] = $f;
                    }
                    break;
                case 
self::VALID_TOKEN:
                    
$vt Loader::helper('validation/token');
                    if (!
$vt->validate($f->value)) {
                        
$this->fieldsInvalid[] = $f;
                    }
                    break;
                case 
self::VALID_INTEGER:
                    if ((!
$num->integer($this->data[$field])) && ($val->notempty($this->data[$field]))) {
                        
$this->fieldsInvalid[] = $f;
                    }
                    break;
                case 
self::VALID_INTEGER_REQUIRED:
                    if (!
$num->integer($this->data[$field])) {
                        
$this->fieldsInvalid[] = $f;
                    }
                    break;
                case 
self::VALID_UPLOADED_IMAGE:
                    if ((!
$fil->image($this->files[$field]['tmp_name'])) && ($this->files[$field]['tmp_name'] != '')) {
                        
$this->fieldsInvalid[] = $f;
                    }
                    break;
                case 
self::VALID_UPLOADED_IMAGE_REQUIRED:
                    if (!
$fil->image($this->files[$field]['tmp_name'])) {
                        
$this->fieldsInvalid[] = $f;
                    }
                    break;
                case 
self::VALID_UPLOADED_FILE:
                    if ((!
$fil->file($this->files[$field]['tmp_name'])) && ($this->files[$field]['tmp_name'] != '')) {
                        
$this->fieldsInvalid[] = $f;
                    }
                    break;
                case 
self::VALID_UPLOADED_FILE_REQUIRED:
                    if (!
$fil->file($this->files[$field]['tmp_name'])) {
                        
$this->fieldsInvalid[] = $f;
                    }
                    break;
                case 
self::VALID_EMAIL:
                    if (!
$val->email($this->data[$field])) {
                        
$this->fieldsInvalid[] = $f;
                    }
                    break;
            }
        }

        
$this->setErrorsFromInvalidFields();
        return 
count($this->fieldsInvalid) == 0;
    }

    
/**
     * @access private
     */
    
protected function setErrorsFromInvalidFields()
    {
        foreach (
$this->fieldsInvalid as $f) {
            
$this->error->add($f->message);
        }
    }

    
/**
     * Gets the error object.
     * <code>
     *     if ($val->test() > 0) {
     *         $e = $val->getError();
     *     }
     * </code>
     *
     * @return ConcreteCoreErrorError
     */
    
public function getError()
    {
        return 
$this->error;
    }

}
Онлайн: 1
Реклама