public function validateDynamicStructure($attribute, $params) { if (count($this->dynamicClauses) > 0) { if (null != ($errorMessage = SQLOperatorUtil::resolveValidationForATemplateSqlStatementAndReturnErrorMessage($this->{$attribute}, count($this->dynamicClauses)))) { $this->addError('dynamicStructure', $errorMessage); } } }
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))); } } }
/** * 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)); }