public function validateDynamicStructure($attribute, $params)
 {
     if (count($this->dynamicClauses) > 0) {
         if (null != ($errorMessage = SQLOperatorUtil::resolveValidationForATemplateSqlStatementAndReturnErrorMessage($this->{$attribute}, count($this->dynamicClauses)))) {
             $this->addError('dynamicStructure', $errorMessage);
         }
     }
 }
예제 #2
0
 public function validateDynamicStructure($attribute, $params)
 {
     if (count($this->dynamicClauses) > 0) {
         if (null != ($errorMessage = SQLOperatorUtil::resolveValidationForATemplateSqlStatementAndReturnErrorMessage($this->{$attribute}, count($this->dynamicClauses)))) {
             $this->addError('dynamicStructure', $errorMessage);
         } else {
             $formula = strtolower($this->dynamicStructure);
             $formula = str_replace("(", "", $formula);
             $formula = str_replace(")", "", $formula);
             $arguments = preg_split("/or|and/", $formula);
             foreach ($arguments as $argument) {
                 $argument = trim($argument);
                 if (!is_numeric($argument) || !(intval($argument) <= count($this->dynamicClauses)) || !(intval($argument) > 0) || !(preg_match("/\\./", $argument) === 0)) {
                     $errorContent = Zurmo::t('Core', 'Please use only integers lesser than {max}.', array('{max}' => count($this->dynamicClauses)));
                 }
             }
         }
         if (isset($errorContent)) {
             $this->addError('dynamicStructure', Zurmo::t('Core', 'The structure is invalid. {error}', array('{error}' => $errorContent)));
         }
     }
 }
예제 #3
0
 /**
  * Validates if the filter structure is valid.
  */
 public function validateFiltersStructure()
 {
     if (count($this->filters) > 0) {
         if (null != ($errorMessage = SQLOperatorUtil::resolveValidationForATemplateSqlStatementAndReturnErrorMessage($this->filtersStructure, count($this->filters)))) {
             $this->addError('filtersStructure', $errorMessage);
         }
     }
 }
 /**
  * For now use the same method that SQL structure checks use since it works the same way
  * @param $structure
  * @param $clauseCount
  * @return null | string if error message
  */
 public static function resolveValidationForATemplateSqlStatementAndReturnErrorMessage($structure, $clauseCount)
 {
     return SQLOperatorUtil::resolveValidationForATemplateSqlStatementAndReturnErrorMessage($structure, $clauseCount);
 }
 public function testResolveValidationForATemplateSqlStatementAndReturnErrorMessage()
 {
     $this->assertEquals('The structure is invalid. Please fix conditions.', SQLOperatorUtil::resolveValidationForATemplateSqlStatementAndReturnErrorMessage('', 1));
     $this->assertEquals('The structure is invalid. Please fix conditions.', SQLOperatorUtil::resolveValidationForATemplateSqlStatementAndReturnErrorMessage('dumb structure', 1));
     $this->assertEquals('The structure is invalid. Please use only integers less than 2.', SQLOperatorUtil::resolveValidationForATemplateSqlStatementAndReturnErrorMessage('4', 1));
     $this->assertEquals('The structure is invalid. Please fix your parenthesis.', SQLOperatorUtil::resolveValidationForATemplateSqlStatementAndReturnErrorMessage('()))', 1));
     $this->assertEquals('The structure is invalid. Please fix your parenthesis around the not operator.', SQLOperatorUtil::resolveValidationForATemplateSqlStatementAndReturnErrorMessage('(not) 2 and 1', 2));
     $this->assertEquals('The structure is invalid. Please fix conditions.', SQLOperatorUtil::resolveValidationForATemplateSqlStatementAndReturnErrorMessage('or 2 and 1', 2));
     $this->assertEquals('The structure is invalid. Please, only use one of the operators: not, and, or.', SQLOperatorUtil::resolveValidationForATemplateSqlStatementAndReturnErrorMessage('1 e 2 ou 1', 2));
     $this->assertEquals('', SQLOperatorUtil::resolveValidationForATemplateSqlStatementAndReturnErrorMessage('not (not (2 and 4) or 1 and not 4)', 4));
 }