1]); } /** * Echo string containing names and values of all arguments or stack trace if no args */ function ED(...$args) { it_debug::setup(); it_debug::echo($args); return $args[0]; } /** * Same as ED(), but if first argument is foo then $GLOBALS['debug_foo'] must be set for output * @return boolean indicating whether $GLOBALS['debug_foo'] was set */ function EDC($var, ...$args) { $GLOBALS['ULTRADEBUGVARS'][$var] = 1; if (($result = $GLOBALS["debug_$var"])) { if ($args) { it_debug::setup(); it_debug::echo($args); } if (!$result || $result === true) # Compatibility with old map relying on 0|1 $result = intval($result); } return $result; } /** * Echo string containing names and values of all arguments, then exit */ function EDX(...$args) { if ($_SERVER['REMOTE_ADDR'] && !headers_sent()) header("Content-Type: text/html"); # Not going to be e.g. a valid gif anyway it_debug::echo($args); exit(); } /****************** functions for class it_text **********************/ /** * Return a text in the selected language * Replaces variables of the form {var} with quoted values from argument $values * @param $label Label of text to return * @param $language Optional value array or language string (will be sent through Q()) * @param $values Optional value array or language string (will be sent through Q()) * @return Localized text string */ function T($label, $language = null, $values = null) { it_text::init(); if (is_array($language)) # Need to swap params? list($language, $values) = array($values, $language); return is_array($values) ? $GLOBALS['it_text']->etext($label, array_map(array("it_html", "Q"), $values), $language) : $GLOBALS['it_text']->text($label, $language); } /** * Return a text in the selected language * Replaces variables of the form {var} with value from argument $values * @param $label Label of text to return * @param $values Associative array containing values to fill in (no quoting) * @param $language Optional language to return text in. * @return Localized text string with variables replaced by their values */ function ET($label, $values = null, $language = null) { it_text::init(); return $GLOBALS['it_text']->etext($label, $values, $language); } /** * Change language * @param $language New language to set */ function T_set_language($language) { it_text::init(); return $GLOBALS['it_text']->set_language($language); } /** * Get active language * @return currently active language */ function T_lang() { it_text::init(); return $GLOBALS['it_text']->get_language(); } /** * Get active language * @return default language of browser */ function T_defaultlang() { it_text::init(); return $GLOBALS['it_text']->get_defaultlanguage(); } /** * Get available languages * @return available languages as langcode => langname */ function T_languages() { it_text::init(); return $GLOBALS['it_text']->languages; } /** * Check if a text entry for a specific label exists * @param $label Label to check * @return label name if text exists in current (or supplied) language, false otherwise. */ function T_exists($label, $language = null) { it_text::init(); return $GLOBALS['it_text']->text_exists($label, $language); } /****************** functions for class it_text **********************/ /** * Build an url */ function U(...$args) { return is_a($obj = $GLOBALS['it_html'], 'it_html') ? $obj->U(...$args) : it_html::U(...$args); } /************************** other functions ***************************/ /** * Print an error message and end page */ function fail($text) { trigger_error($text, E_USER_ERROR); it::fatal($text); } /** * Global shortcut for $it_debug::debug() * @see it_debug::debug() */ function debug($text, $level=0) { if (isset($GLOBALS['it_debug'])) $GLOBALS['it_debug']->debug($text, $level); } /** * Convert a htmlentities-encoded string back to normal */ function it_htmlentities_decode($string) { return strtr($string, array_flip(get_html_translation_table(HTML_ENTITIES))); } /** * Clone an object and return copy, works for all PHP versions */ function &it_clone(&$object) { $result = (is_object($object) && version_compare(zend_version(), 2, '>=')) ? clone($object) : $object; return $result; # PHP internals need a tmp var to return by ref } /** * Experimental PHP taint support, see ftp://ftp.porcupine.org/pub/php/ */ if (function_exists("taint")) { function it_untaint($value, $marks = TC_HTML) { untaint($value, $marks); return $value; } function it_taintcheck($value, $marks = TC_HTML) { if (istainted($value) & $marks) { untaint($value, $marks); it::error(it_untaint("it_taintcheck($value, $marks) failed")); } return $value; } } else { define('TC_HTML', 0); define('TC_SHELL', 0); define('TC_MYSQL', 0); define('TC_MYSQLI', 0); define('TC_SELF', 0); define('TC_ALL', 0); define('TC_NONE', 0); function it_untaint($value, $dummy_marks = 0) { return $value; } function it_taintcheck($value, $dummy_marks = 0) { return $value; } } # ULTRAHOME is generated in a safe way $GLOBALS['ULTRAHOME'] = it_untaint($GLOBALS['ULTRAHOME'], TC_ALL); ?>