Implement isset operation in template If statements

develop
Sven Slootweg 12 years ago
parent 7034837966
commit ecb95ca151

@ -530,7 +530,22 @@ class Templater
if($identifier == "if") if($identifier == "if")
{ {
$statement_parts = explode(" ", $statement, 3); $statement_parts = explode(" ", $statement, 3);
$element->left = $statement_parts[0];
$variable = $statement_parts[0];
if(strpos($variable, "|") !== false)
{
$variable_parts = explode("|", $variable, 2);
$element->operation = $variable_parts[0];
$element->left = $variable_parts[1];
}
else
{
$element->left = $variable;
}
$element->operator = $statement_parts[1]; $element->operator = $statement_parts[1];
$element->right = $statement_parts[2]; $element->right = $statement_parts[2];
} }
@ -648,49 +663,84 @@ class TemplateIfElement extends TemplateSyntaxElement
public $left = ""; public $left = "";
public $right = ""; public $right = "";
public $operator = ""; public $operator = "";
public $operation = "";
public function Evaluate($data) public function Evaluate($data)
{ {
$a = $this->FetchVariable($this->left, $data); if(empty($this->operation))
$b = $this->right;
if($b == "true")
{
$b = true;
}
elseif($b == "false")
{
$b = false;
}
switch($this->operator)
{ {
case "=": $a = $this->FetchVariable($this->left, $data);
case "==": $b = $this->right;
$result = ($a == $b);
break; if($b == "true")
case ">": {
$result = ($a > $b); $b = true;
break; }
case "<": elseif($b == "false")
$result = ($a < $b); {
break; $b = false;
case ">=": }
$result = ($a >= $b);
break; switch($this->operator)
case "<=": {
$result = ($a <= $b); case "=":
break; case "==":
case "!=": $result = ($a == $b);
$result = ($a != $b); break;
break; case ">":
default: $result = ($a > $b);
$result = false; break;
case "<":
$result = ($a < $b);
break;
case ">=":
$result = ($a >= $b);
break;
case "<=":
$result = ($a <= $b);
break;
case "!=":
$result = ($a != $b);
break;
default:
$result = false;
}
if($result == true)
{
return parent::Evaluate($data);
}
} }
elseif($this->operation == "isset")
if($result == true)
{ {
return parent::Evaluate($data); try
{
$this->FetchVariable($this->left, $data);
$found = true;
}
catch (TemplateEvaluationException $e)
{
$found = false;
}
if($this->right == "false")
{
$desired = false;
}
else
{
$desired = true;
}
if($found === $desired)
{
return parent::Evaluate($data);
}
else
{
return "";
}
} }
} }
} }

Loading…
Cancel
Save