Current File : /home/aventura/www/site/wp-content/plugins/victheme_core/vtcore/form/base.php
<?php

/**
 * Main Interface for all Form SubClass
 *
 * Any SubClass of VTCore_Form_Base() must
 * implement this interface in order to be able to
 * act as a form element constructor and overrider
 * for the main VTCore_Form_Base() or VTCore_Form_Form().
 *
 * @author jason.xie@victheme.com
 * @see form_element_example.api.php
 */
interface VTCore_Form_Interface {
  public function buildElement();

  public function setValue($value);
}

/**
 * Extending the Core_Html_Base() for the form element
 * subclasses. We need to extend the base because
 * the method for overloading the form elements method
 * is different from the basic HTML methods.
 *
 * @author jason.xie@victheme.com
 *
 * Define the magic method for IDE autocomplete use
 * @method string Button() Method for building HTML5 Button input element
 * @method string Checkbox() Method for building checkbox element
 * @method string Color() Method for building HTML5 Color input element
 * @method string DataList() Method for building HTML data list element
 * @method string Date() Method for building HTML5 Date input element
 * @method string Email() Method for building Email input element
 * @method string Fieldset() Method for building fieldset element
 * @method string Hidden() Method for building hidden input element
 * @method string Label() Method for building label element
 * @method string Legend() Method for building legend element
 * @method string Month() Method for building HTML5 Month input element
 * @method string Nonce() Method for building WP nonce hidden input field
 * @method string Number() Method for building HTML5 Number input element
 * @method string Option() Method for building option element
 * @method string Radio() Method for building radio element
 * @method string Range() Method for building HTML5 Range input element
 * @method string Required() Method for building form item required element
 * @method string Reset() Method for building input reset element
 * @method string Search() Method for building HTML5 Search input element
 * @method string Select() Method for building select element
 * @method string Submit() Method for building input submit element
 * @method string Tel() Method for building HTML5 Telephone input element
 * @method string Text() Method for building input text object
 * @method string Textarea() Method for building textarea object
 * @method string Time() Method for building HTML5 Time input element
 * @method string URL() Method for building HTML5 URL input element
 * @method string Week() Method for building HTML5 Week input element
 */
class VTCore_Form_Base
  extends VTCore_Html_Base {

  private $validators = array();
  protected $overloaderPrefix = array('VTCore_Form_', 'VTCore_Html_');

  /**
   * Constructing the object and processing
   * the context array
   */
  public function __construct($context = array()) {
    $this->buildObject($context);
    $this->buildElement();
    $this->buildValidator();
  }

  public function buildValidator() {

    $validator = $this->getContext('validators');

    if ($this->getAttribute('required') == TRUE
      && !isset($validator['empty'])
    ) {

      $context = array(
        'validators' => array(
          'empty' => __('Form is required', 'victheme_core'),
        ),
      );
      $this->setContext($context);
    }

    if ($this->getContext('validators') !== NULL) {
      $this->setValidators();
    }
  }

  public function setValue($value) {
    $this->addAttribute('value', $value);
  }

  public function getValue() {
    return $this->getAttribute('value');
  }

  public function setDefaultValidator($rule, $message) {
    $context = $this->getContext('validators');
    if (!isset($context[$rule])) {
      $context[$rule] = $message;
      $this->setContext(array('validators' => $context));
    }
  }

  public function addValidator($rule, $validator) {
    $this->validators[$rule] = $validator;
  }

  public function removeValidator($rule) {
    unset($this->validators[$rule]);
  }

  public function getValidator($rule) {
    return (!isset($this->validators[$rule])) ? NULL : $this->validators[$rule];
  }

  public function getValidators() {
    return (empty($this->validators)) ? NULL : $this->validators;
  }

  public function setValidators() {
    foreach ($this->getContext('validators') as $rule => $message) {
      $class = 'VTCore_Validator_' . $rule;
      if (is_callable($class, TRUE)) {
        $this->addValidator($rule, new $class(FALSE, $message));
      }
    }
  }
}