/** * 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); }
/** * Detects if current input of script is considered containing input for * current form. * * @param boolean $keepFormIdInInput set true to keep any valid ID of form in input of current script * @return boolean true if form has actual input, false otherwise */ public function hasInput($keepFormIdInInput = false) { if ($this->_hasInput === null) { $this->_hasInput = false; try { $idName = $this->idName(); $source = input::source($this->usePost ? input::SOURCE_ACTUAL_POST : input::SOURCE_ACTUAL_GET); if ($source->hasValue($idName)) { $value = $source->getValue($idName); if ($value == $this->idValue()) { if (!$keepFormIdInInput) { $source->dropValue($idName); } $this->_hasInput = true; } } } catch (\InvalidArgumentException $e) { } } return $this->_hasInput; }