*/ /** * QueryArgument class * @author NAVER (developers@xpressengine.com) * @package /classes/xml/xmlquery/queryargument * @version 0.1 */ class QueryArgument { /** * Argument name * @var string */ var $argument_name; /** * Variable name * @var string */ var $variable_name; /** * Argument validator * @var QueryArgumentValidator */ var $argument_validator; /** * Column name * @var string */ var $column_name; /** * Table name * @var string */ var $table_name; /** * Operation * @var string */ var $operation; /** * Ignore value * @var bool */ var $ignore_value; /** * constructor * @param object $tag tag object * @param bool $ignore_value * @return void */ function __construct($tag, $ignore_value = FALSE) { static $number_of_arguments = 0; $this->argument_name = $tag->attrs->var; if(!$this->argument_name) { $this->argument_name = str_replace('.', '_', $tag->attrs->name); } if(!$this->argument_name) { $this->argument_name = str_replace('.', '_', $tag->attrs->column); } $this->variable_name = $this->argument_name; $number_of_arguments++; $this->argument_name .= $number_of_arguments; $name = $tag->attrs->name; if(!$name) { $name = $tag->attrs->column; } if(strpos($name, '.') === FALSE) { $this->column_name = $name; } else { list($prefix, $name) = explode('.', $name); $this->column_name = $name; $this->table_name = $prefix; } if($tag->attrs->operation) { $this->operation = $tag->attrs->operation; } $this->argument_validator = new QueryArgumentValidator($tag, $this); $this->ignore_value = $ignore_value; } function getArgumentName() { return $this->argument_name; } function getColumnName() { return $this->column_name; } function getTableName() { return $this->table_name; } function getValidatorString() { return $this->argument_validator->toString(); } function isConditionArgument() { if($this->operation) { return TRUE; } return FALSE; } /** * Change QueryArgument object to string * @return string */ function toString() { if($this->isConditionArgument()) { // Instantiation $arg = sprintf("\n" . '${\'%s_argument\'} = new ConditionArgument(\'%s\', %s, \'%s\');' . "\n" , $this->argument_name , $this->variable_name , '$args->' . $this->variable_name , $this->operation ); // Call methods to validate argument and ensure default value $arg .= $this->argument_validator->toString(); // Prepare condition string $arg .= sprintf('${\'%s_argument\'}->createConditionValue();' . "\n" , $this->argument_name ); // Check that argument passed validation, else return $arg .= sprintf('if(!${\'%s_argument\'}->isValid()) return ${\'%s_argument\'}->getErrorMessage();' . "\n" , $this->argument_name , $this->argument_name ); } else { $arg = sprintf("\n" . '${\'%s_argument\'} = new Argument(\'%s\', %s);' . "\n" , $this->argument_name , $this->variable_name , $this->ignore_value ? 'NULL' : '$args->{\'' . $this->variable_name . '\'}'); $arg .= $this->argument_validator->toString(); $arg .= sprintf('if(!${\'%s_argument\'}->isValid()) return ${\'%s_argument\'}->getErrorMessage();' . "\n" , $this->argument_name , $this->argument_name ); } // If the argument is null, skip it if($this->argument_validator->isIgnorable()) { $arg = sprintf("if(isset(%s)) {", '$args->' . $this->variable_name) . $arg . sprintf("} else\n" . '${\'%s_argument\'} = NULL;', $this->argument_name); } return $arg; } } /* End of file QueryArgument.class.php */ /* Location: ./classes/xml/xmlquery/queryargument/QueryArgument.class.php */