/** * Compiles URL addressing current script of current application. * * @param array|false $parameters set of parameters to pass in query, false * to drop all current parameters (e.g. on creating GET form), * provide special parameter '*' in array to start fresh set of parameters * @param mixed $selector first of multiple optional selectors to include * @return string URL of addressed script including optional parameters */ public function selfURL($parameters = array(), $selector = null) { $selectors = func_get_args(); $selectors = array_slice($selectors, 1); if (!count($selectors)) { $selectors = application::current()->selectors; } /* * merge current script's input parameters with provided one */ if ($parameters === false) { $parameters = array(); } else { // find all non-persistent input parameters of current script $currentVolatileParameters = array(); if (!array_key_exists('*', $parameters)) { $get = input::source(input::SOURCE_ACTUAL_GET); foreach ($get->listNames() as $name) { if (data::isKeyword($name) && !input::isPersistent($name)) { $currentVolatileParameters[$name] = $get->getValue($name); } } } unset($parameters['*']); // merge volatile input with given parameters, but drop all those // finally set NULL (to support removal per $parameters) $parameters = array_filter(array_merge($currentVolatileParameters, $parameters), function ($item) { return $item !== null; }); } /* * utilize scriptURL() for referring to current script */ array_unshift($selectors, $parameters); array_unshift($selectors, $this->script); return call_user_func_array(array(&$this, 'scriptURL'), $selectors); }