Beispiel #1
0
 public function setUp()
 {
     parent::setUp();
     Piece_Right_Filter_Factory::clearInstances();
     Piece_Right_Validator_Factory::clearInstances();
     $this->exclusiveDirectory = dirname(__FILE__) . '/' . basename(__FILE__, '.php');
 }
Beispiel #2
0
 /**
  * Validates a field value by the given validations.
  *
  * @param string  $fieldName
  * @param string  $value
  * @param boolean $isFinals
  * @since Method available since Release 0.3.0
  */
 function _validateField($fieldName, $value, $isFinals)
 {
     foreach ($this->_config->getValidations($fieldName) as $validation) {
         if ($validation['useInFinals'] != $isFinals) {
             continue;
         }
         $validator =& Piece_Right_Validator_Factory::factory($validation['validator']);
         if (Piece_Right_Error::hasErrors()) {
             return;
         }
         if (is_array($value) && !$validator->isArrayable()) {
             trigger_error("The value of the field [ {$fieldName} ] is an array, but the validator [ {$validation['validator']} ] is not arrayable. This validation is skipped.", E_USER_WARNING);
             $this->_results->addError($fieldName, $validation['validator'], $validator->getMessage());
             continue;
         }
         $validator->setResults($this->_results);
         $validator->setRules($validation['rules']);
         $validator->setMessage($validation['message']);
         $validator->setPayload($this->_payload);
         if (!$validator->validate($value)) {
             $this->_results->addError($fieldName, $validation['validator'], $validator->getMessage());
             if (!$this->_config->forceValidation($fieldName)) {
                 return;
             }
         }
     }
 }
Beispiel #3
0
 /**
  * @since Method available since Release 1.3.0
  */
 function testPayload()
 {
     $oldValidatorDirectories = $GLOBALS['PIECE_RIGHT_Validator_Directories'];
     Piece_Right_Validator_Factory::addValidatorDirectory($this->_cacheDirectory);
     $config =& new Piece_Right_Config();
     $config->addValidation('email', 'ScriptPayloadTest');
     $container =& new stdClass();
     $payload =& new stdClass();
     $script =& new Piece_Right_Validation_Script($this->_cacheDirectory, $this->_cacheDirectory, null, array(&$this, 'turnOnPostRunCallbackCalled'));
     $script->setPayload($payload);
     $results = $script->run('Script', $container, $config);
     $this->assertEquals(0, $results->countErrors());
     $this->assertTrue(array_key_exists('foo', $payload));
     $this->assertEquals('bar', $payload->foo);
     $GLOBALS['PIECE_RIGHT_Validator_Directories'] = $oldValidatorDirectories;
 }
Beispiel #4
0
 /**
  * Validates a field value by the given validations.
  *
  * @param string  $fieldName
  * @param string  $value
  * @param boolean $isFinals
  * @throws PIECE_RIGHT_ERROR_NOT_FOUND
  * @throws PIECE_RIGHT_ERROR_INVALID_VALIDATOR
  * @throws PIECE_RIGHT_ERROR_CANNOT_READ
  * @throws PIECE_RIGHT_ERROR_NOT_READABLE
  * @since Method available since Release 0.3.0
  */
 function _validateField($fieldName, $value, $isFinals)
 {
     foreach ($this->_config->getValidations($fieldName) as $validation) {
         if ($validation['useInFinals'] != $isFinals) {
             continue;
         }
         $validator =& Piece_Right_Validator_Factory::factory($validation['validator']);
         if (Piece_Right_Error::hasErrors('exception')) {
             return;
         }
         if (is_array($value) && !$validator->isArrayable()) {
             Piece_Right_Error::pushCallback(create_function('$error', 'return ' . PEAR_ERRORSTACK_PUSHANDLOG . ';'));
             Piece_Right_Error::push(PIECE_RIGHT_ERROR_NOT_ARRAYABLE, "The value of the field [ {$fieldName} ] is an array, but the validator [ {$validation['validator']} ] is not arrayable. This validation is skipped.", 'warning');
             Piece_Right_Error::popCallback();
             $this->_results->addError($fieldName, $validation['validator'], $validator->getMessage());
             continue;
         }
         $validator->setResults($this->_results);
         $validator->setRules($validation['rules']);
         $validator->setMessage($validation['message']);
         $validator->setPayload($this->_payload);
         if (!$validator->validate($value)) {
             $this->_results->addError($fieldName, $validation['validator'], $validator->getMessage());
         }
     }
 }
Beispiel #5
0
 /**
  * Adds a prefix for a validator.
  *
  * @param string $validatorPrefix
  */
 function addValidatorPrefix($validatorPrefix)
 {
     Piece_Right_Validator_Factory::addValidatorPrefix($validatorPrefix);
 }
Beispiel #6
0
 /**
  * Creates a validator object from the validator directories.
  *
  * @param string $validatorName
  * @return mixed
  * @throws PIECE_RIGHT_ERROR_NOT_FOUND
  * @throws PIECE_RIGHT_ERROR_INVALID_VALIDATOR
  * @throws PIECE_RIGHT_ERROR_CANNOT_READ
  */
 function &factory($validatorName)
 {
     if (!array_key_exists($validatorName, $GLOBALS['PIECE_RIGHT_Validator_Instances'])) {
         $found = false;
         foreach ($GLOBALS['PIECE_RIGHT_Validator_Prefixes'] as $prefixAlias) {
             $validatorClass = Piece_Right_Validator_Factory::_getValidatorClass($validatorName, $prefixAlias);
             if (Piece_Right_ClassLoader::loaded($validatorClass)) {
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             foreach ($GLOBALS['PIECE_RIGHT_Validator_Directories'] as $validatorDirectory) {
                 foreach ($GLOBALS['PIECE_RIGHT_Validator_Prefixes'] as $prefixAlias) {
                     $validatorClass = Piece_Right_Validator_Factory::_getValidatorClass($validatorName, $prefixAlias);
                     Piece_Right_Error::disableCallback();
                     Piece_Right_ClassLoader::load($validatorClass, $validatorDirectory);
                     Piece_Right_Error::enableCallback();
                     if (Piece_Right_Error::hasErrors()) {
                         $error = Piece_Right_Error::pop();
                         if ($error['code'] == PIECE_RIGHT_ERROR_NOT_FOUND) {
                             continue;
                         }
                         Piece_Right_Error::push(PIECE_RIGHT_ERROR_CANNOT_READ, "Failed to read the validator [ {$validatorName} ] for any reasons.", 'exception', array(), $error);
                         $return = null;
                         return $return;
                     }
                     if (Piece_Right_ClassLoader::loaded($validatorClass)) {
                         $found = true;
                         break 2;
                     }
                 }
             }
             if (!$found) {
                 Piece_Right_Error::push(PIECE_RIGHT_ERROR_NOT_FOUND, "The validator [ {$validatorName} ] is not found in the following directories:\n" . implode("\n", $GLOBALS['PIECE_RIGHT_Validator_Directories']));
                 $return = null;
                 return $return;
             }
         }
         $validator =& new $validatorClass($prefixAlias);
         if (!is_subclass_of($validator, 'Piece_Right_Validator_Common')) {
             Piece_Right_Error::push(PIECE_RIGHT_ERROR_INVALID_VALIDATOR, "The validator [ {$validatorName} ] is invalid.");
             $return = null;
             return $return;
         }
         $GLOBALS['PIECE_RIGHT_Validator_Instances'][$validatorName] =& $validator;
     } else {
         $GLOBALS['PIECE_RIGHT_Validator_Instances'][$validatorName]->clear();
     }
     return $GLOBALS['PIECE_RIGHT_Validator_Instances'][$validatorName];
 }
 function testValidatorPrefixes()
 {
     $oldValidatorPrefixes = $GLOBALS['PIECE_RIGHT_Validator_Prefixes'];
     $oldValidatorDirectories = $GLOBALS['PIECE_RIGHT_Validator_Directories'];
     $config =& new Piece_Unity_Config();
     $config->setConfiguration('KernelConfigurator', 'validationValidatorPrefixes', array('KernelConfiguratorTestCaseAlias'));
     $config->setConfiguration('KernelConfigurator', 'validationValidatorDirectories', array(dirname(__FILE__) . '/KernelConfiguratorTestCase'));
     $context =& Piece_Unity_Context::singleton();
     $context->setConfiguration($config);
     $configurator =& new Piece_Unity_Plugin_KernelConfigurator();
     $configurator->invoke();
     $foo =& Piece_Right_Validator_Factory::factory('FooValidator');
     $this->assertTrue(is_object($foo));
     $this->assertTrue(is_a($foo, 'KernelConfiguratorTestCaseAlias_FooValidator'));
     Piece_Right_Validator_Factory::clearInstances();
     $GLOBALS['PIECE_RIGHT_Validator_Directories'] = $oldValidatorDirectories;
     $GLOBALS['PIECE_RIGHT_Validator_Prefixes'] = $oldValidatorPrefixes;
 }
Beispiel #8
0
 function tearDown()
 {
     foreach (array_keys($_POST) as $field) {
         unset($_POST[$field]);
     }
     unset($_SERVER['REQUEST_METHOD']);
     Piece_Right_Validator_Factory::clearInstances();
     $GLOBALS['PIECE_RIGHT_Validator_Directories'] = $this->_oldValidatorDirectories;
     Piece_Right_Filter_Factory::clearInstances();
     $GLOBALS['PIECE_RIGHT_Filter_Directories'] = $this->_oldFilterDirectories;
     $cache =& new Cache_Lite_File(array('cacheDir' => "{$this->_cacheDirectory}/", 'masterFile' => '', 'automaticSerialization' => true, 'errorHandlingAPIBreak' => true));
     $cache->clean();
     Piece_Right_Error::clearErrors();
     Piece_Right_Error::popCallback();
 }