Вход Регистрация
Файл: textpattern-4.5.7/textpattern/lib/txplib_validator.php
Строк: 311
<?php

/*
This is Textpattern

Copyright 2012 The Textpattern Development Team
textpattern.com
All rights reserved.

Use of this software indicates acceptance of the Textpattern license agreement

$HeadURL: https://textpattern.googlecode.com/svn/releases/4.5.7/source/textpattern/lib/txplib_validator.php $
$LastChangedRevision: 3802 $
*/

/**
 * Validator
 *
 * Manages and evaluates a collection of constraints
 * @since 4.5.0
 */
class Validator
{
    protected 
$constraints;
    protected 
$messages;

    
/**
     * Construct a validator
     * @param array $constraints Array of constraint objects to validate over
     */
    
function __construct($constraints = array())
    {
        
$this->setConstraints($constraints);
    }

    
/**
     * Validate all constraints and collect messages on violations
     * @return boolean true: value obeys constraints
     */
    
function validate()
    {
        foreach (
$this->constraints as $c) {
            if (!
$c->validate()) {
                
$this->messages[] = $c->getMessage();
            }
        }
        return empty(
$this->messages);
    }

    
/**
     * @return array An array of message strings with constraint-violation details collected from Validator::validate() (if any)
     */
    
function getMessages()
    {
        return 
$this->messages;
    }

    
/**
     * Set new constraints
     */
    
function setConstraints($constraints)
    {
        
$this->constraints $constraints;
        
$this->messages = array();
    }
}

/**
 * Constraint
 *
 * Defines a single validation rule
 * @since 4.5.0
 */
class Constraint
{
    protected 
$value;
    protected 
$options;

    
/**
     * Construct a constraint
     * @param mixed $value    The validee
     * @param array $options Key/value pairs of class-specific options
     */
    
function __construct($value$options = array())
    {
        if (empty(
$options['message'])) {
            
$options['message'] = 'undefined_constraint_violation';
        }
        
$this->value $value;
        
$this->options $options;
    }

    
/**
     * Validate a given value against this constraint
     * @return boolean true: value obeys constraint
     */
    
function validate()
    {
        return 
true;
    }

    
/**
     *
     */
    
function getMessage()
    {
        return 
$this->options['message'];
    }
}

/**
 * ChoiceConstraint
 *
 * Tests against a list of values
 * @since 4.5.0
 */
class ChoiceConstraint extends Constraint
{
    function 
__construct($value$options = array())
    {
        
$options lAtts(array('choices' => array(), 'allow_blank' => false'message' => 'unknown_choice'), $optionsfalse);
        
parent::__construct($value$options);
    }

    function 
validate()
    {
        return (
$this->options['allow_blank'] && ('' === $this->value)) ||
        
in_array($this->value$this->options['choices']);
    }
}

/**
 * SectionConstraint
 *
 * Tests against existing section names
 * @since 4.5.0
 */
class SectionConstraint extends ChoiceConstraint
{
    function 
__construct($value$options = array())
    {
        static 
$choices null;
        if (
null === $choices) {
            
$choices safe_column('name''txp_section''1=1');
        }
        
$options['choices'] = $choices;
        
$options['message'] = 'unknown_section';
        
parent::__construct($value$options);
    }
}

/**
 * CategoryConstraint
 *
 * Tests against existing or a blank category names
 * @since 4.5.0
 */
class CategoryConstraint extends ChoiceConstraint
{
    function 
__construct($value$options = array())
    {
        static 
$choices null;
        
$options lAtts(array('allow_blank' => true'type' => '''message' => 'unknown_category'), $optionsfalse);
        if (
null === $choices) {
            
$choices safe_column('name''txp_category'$options['type'] !== '' 'type=''.doSlash($options['type']).''' '1=1');
        }
        
$options['choices'] = $choices;
        
parent::__construct($value$options);
    }
}

/**
 * FormConstraint
 *
 * Tests against existing form names
 * @since 4.5.0
 */
class FormConstraint extends ChoiceConstraint
{
    function 
__construct($value$options = array())
    {
        static 
$choices null;
        
$options lAtts(array('allow_blank' => true'type' => '''message' => 'unknown_form'), $optionsfalse);

        if (
null === $choices) {
            
$choices safe_column('name''txp_form'$options['type'] !== '' 'type=''.doSlash($options['type']).''' '1=1');
        }
        
$options['choices'] = $choices;
        
parent::__construct($value$options);
    }
}

/**
 * BlankConstraint
 *
 * Validates that a value is blank, defined as equal to a blank string or equal to null.
 * @since 4.5.0
 */
class BlankConstraint extends Constraint
{
    function 
__construct($value$options = array())
    {
        
$options lAtts(array('message' => 'should_be_blank'), $optionsfalse);
        
parent::__construct($value$options);
    }

    function 
validate()
    {
        return 
$this->value === '' || $this->value === null;
    }
}

/**
 * TrueConstraint
 *
 * Validates that a value is true.
 * @since 4.5.0
 */
class TrueConstraint extends Constraint
{
    function 
__construct($value$options = array())
    {
        
$options lAtts(array('message' => 'should_be_true'), $optionsfalse);
        
parent::__construct($value$options);
    }

    function 
validate()
    {
        return (boolean)
$this->value;
    }
}

/**
 * FalseConstraint
 *
 * Validates that a value is false.
 * @since 4.5.0
 */
class FalseConstraint extends Constraint
{
    function 
__construct($value$options = array())
    {
        
$options lAtts(array('message' => 'should_be_false'), $optionsfalse);
        
parent::__construct($value$options);
    }

    function 
validate()
    {
        return !(boolean)
$this->value;
    }
}
?>
Онлайн: 2
Реклама