From dc6b6fc35377e077e21d6c43e6a9ffe62301b8f5 Mon Sep 17 00:00:00 2001 From: Mario Date: Tue, 26 Jul 2022 15:22:05 +0000 Subject: add "falsey" test --- Zotlabs/Lib/MessageFilter.php | 12 +++++++++++- Zotlabs/Render/Comanche.php | 12 +++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) (limited to 'Zotlabs') diff --git a/Zotlabs/Lib/MessageFilter.php b/Zotlabs/Lib/MessageFilter.php index 70b0188c4..13ec78072 100644 --- a/Zotlabs/Lib/MessageFilter.php +++ b/Zotlabs/Lib/MessageFilter.php @@ -123,7 +123,8 @@ class MessageFilter { * - ?foo {} baz which will check if 'baz' is an array element in item.foo * - ?foo {*} baz which will check if 'baz' is an array key in item.foo * - ?foo which will check for a return of a true condition for item.foo; - * + * - ?!foo which will check for a return of a false condition for item.foo; + * * The values 0, '', an empty array, and an unset value will all evaluate to false. * * @param string $s @@ -205,6 +206,15 @@ class MessageFilter { return false; } + // Ordering of this check (for falsiness) with relation to the following one (check for truthiness) is important. + if (preg_match('/\!(.*?)$/', $s, $matches)) { + $x = ((array_key_exists(trim($matches[1]),$item)) ? $item[trim($matches[1])] : EMPTY_STR); + if (!$x) { + return true; + } + return false; + } + if (preg_match('/(.*?)$/', $s, $matches)) { $x = ((array_key_exists(trim($matches[1]),$item)) ? $item[trim($matches[1])] : EMPTY_STR); if ($x) { diff --git a/Zotlabs/Render/Comanche.php b/Zotlabs/Render/Comanche.php index 230c2455e..7288c7fd7 100644 --- a/Zotlabs/Render/Comanche.php +++ b/Zotlabs/Render/Comanche.php @@ -219,7 +219,8 @@ class Comanche { * - [if $config.system.foo {} baz] which will check if 'baz' is an array element in get_config('system','foo') * - [if $config.system.foo {*} baz] which will check if 'baz' is an array key in get_config('system','foo') * - [if $config.system.foo] which will check for a return of a true condition for get_config('system','foo'); - * + * - [if !$config.system.foo] which will check for a return of a false condition for get_config('system','foo'); + * * The values 0, '', an empty array, and an unset value will all evaluate to false. * * @param int|string $s @@ -299,6 +300,15 @@ class Comanche { return false; } + // Ordering of this check (for falsiness) with relation to the following one (check for truthiness) is important. + if (preg_match('/[\!\$](.*?)$/', $s, $matches)) { + $x = $this->get_condition_var($matches[1]); + if (!$x) { + return true; + } + return false; + } + if(preg_match('/[\$](.*?)$/',$s,$matches)) { $x = $this->get_condition_var($matches[1]); if($x) -- cgit v1.2.3