tra('Parameter'), 'documentation' => 'PluginParam', 'description' => tra('Display content based on URL parameters'), 'prefs' => [ 'wikiplugin_param' ], 'body' => tr('Wiki text to display if conditions are met. The body may contain %0{ELSE}%1. Text after the marker will be displayed if conditions are not met.', '', ''), 'iconname' => 'cog', 'introduced' => 7, 'params' => [ 'name' => [ 'required' => true, 'name' => tra('Name'), 'description' => tr('Names of parameters required to display text, separated by %0|%1.', '', ''), 'since' => '7.0', 'filter' => 'text', 'separator' => '|', ], 'source' => [ 'required' => false, 'name' => tra('Source'), 'default' => 'request', 'description' => tra('Source where the parameter is checked.'), 'since' => '7.0', 'filter' => 'word', 'options' => [ ['text' => tra('REQUEST'), 'value' => ''], ['text' => tra('GET'), 'value' => 'get'], ['text' => tra('POST'), 'value' => 'post'], ['text' => tra('COOKIE'), 'value' => 'cookie'], ], ], 'value' => [ 'required' => false, 'name' => tra('Value'), 'description' => tra('Value to test for. If empty then just tests if the named params are set and not "empty".'), 'since' => '13.1', 'filter' => 'text', ], ] ]; } function wikiplugin_param($data, $params) { $dataelse = ''; $test = true; $parserlib = TikiLib::lib('parser'); $noparsed = []; $parserlib->plugins_remove($data, $noparsed); if (strpos($data, '{ELSE}')) { $dataelse = substr($data, strpos($data, '{ELSE}') + 6); $data = substr($data, 0, strpos($data, '{ELSE}')); } if (! isset($params['source']) || empty($params['source'])) { $params['source'] = 'request'; } foreach ($params['name'] as $name) { $value = null; switch ($params['source']) { case 'get': $value = isset($_GET[$name]) ? $_GET[$name] : null; break; case 'post': $value = isset($_POST[$name]) ? $_POST[$name] : null; break; case 'cookie': $value = isset($_COOKIE[$name]) ? $_COOKIE[$name] : null; break; default: $value = isset($_REQUEST[$name]) ? $_REQUEST[$name] : null; break; } if (isset($params['value'])) { if ($value !== $params['value']) { $test = false; break; } } elseif (empty($value)) { // multiple "names" work as AND $test = false; break; } } if ($test) { $parserlib->plugins_replace($data, $noparsed); return $data; } else { $parserlib->plugins_replace($dataelse, $noparsed); return $dataelse; } }