X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Ffunctions.php;h=67a149808f6a231ce91a6d12910edd2bc2bf5900;hb=1dddfaaf4153c2df63288c2d1e4b39f9196afb59;hp=177886ad3aaf33e96f46aaf77563b558733e8368;hpb=076e28c32b079b93b73a67b0c8710d65596b76a9;p=mailer.git diff --git a/inc/functions.php b/inc/functions.php index 177886ad3a..67a149808f 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -38,7 +38,7 @@ if (!defined('__SECURITY')) { } // Check if our config file is writeable or not -function is_INCWritable($inc) { +function IS_INC_WRITEABLE($inc) { // Generate FQFN $fqfn = sprintf("%sinc/%s.php", PATH, $inc); @@ -233,23 +233,31 @@ function LOAD_TEMPLATE($template, $return=false, $content=array()) { $template = strtolower($template); // Count the template load - if (!isset($_CONFIG['num_templates'])) $_CONFIG['num_templates'] = 0; - $_CONFIG['num_templates']++; + if (getConfig('num_templates') == null) { + $_CONFIG['num_templates'] = 1; + } else { + $_CONFIG['num_templates']++; + } + + // Prepare IP number and User Agent + $REMOTE_ADDR = GET_REMOTE_ADDR(); + if (!defined('REMOTE_ADDR')) define('REMOTE_ADDR', $REMOTE_ADDR); + $HTTP_USER_AGENT = GET_USER_AGENT(); // Init some data $ret = ""; if (empty($GLOBALS['refid'])) $GLOBALS['refid'] = 0; - // @DEPRECATED Try to remove this if() block + // @DEPRECATED Try to rewrite the if() condition if ($template == "member_support_form") { // Support request of a member - $result = SQL_QUERY_ESC("SELECT gender, surname, family, email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%s LIMIT 1", - array($GLOBALS['userid']), __FILE__, __LINE__); + $result = SQL_QUERY_ESC("SELECT userid, gender, surname, family, email FROM `"._MYSQL_PREFIX."_user_data` WHERE userid=%s LIMIT 1", + array($GLOBALS['userid']), __FILE__, __LINE__); // Is content an array? if (is_array($content)) { // Merge data - $content = array_merge($content, SQL_FETCHARRAY($result)); + $content = merge_array($content, SQL_FETCHARRAY($result)); // Translate gender $content['gender'] = TRANSLATE_GENDER($content['gender']); @@ -334,7 +342,7 @@ function LOAD_TEMPLATE($template, $return=false, $content=array()) { $tmpl_file = implode("", file($file)); // Replace ' to our own chars to preventing them being quoted - while (strpos($tmpl_file, "\'") !== false) { $tmpl_file = str_replace("\'", '{QUOT}', $tmpl_file); } + while (strpos($tmpl_file, "'") !== false) { $tmpl_file = str_replace("'", '{QUOT}', $tmpl_file); } // Do we have to compile the code? $ret = ""; @@ -397,7 +405,7 @@ function SEND_EMAIL($TO, $SUBJECT, $MSG, $HTML = "N", $FROM = "") { return; } else { // Load email address - $result_email = SQL_QUERY_ESC("SELECT email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%s LIMIT 1", array(bigintval($TO)), __FILE__, __LINE__); + $result_email = SQL_QUERY_ESC("SELECT email FROM `"._MYSQL_PREFIX."_user_data` WHERE userid=%s LIMIT 1", array(bigintval($TO)), __FILE__, __LINE__); //* DEBUG: */ print __FUNCTION__."(".__LINE__."):numRows=".SQL_NUMROWS($result_email)."\n"; // Does the user exist? @@ -450,15 +458,12 @@ function SEND_EMAIL($TO, $SUBJECT, $MSG, $HTML = "N", $FROM = "") { if (empty($HTML)) $HTML = "N"; if (isBooleanConstantAndTrue('DEBUG_MODE')) { // In debug mode we want to display the mail instead of sending it away so we can debug this part - echo "
+ print(" ".htmlentities(trim($FROM))." To : ".$TO." Subject : ".$SUBJECT." Message : ".$MSG." -\n"; - - // Log the mail away - if (defined('DEBUG_MAIL')) DEBUG_LOG(__FUNCTION__, __LINE__, "to={$TO},subject={$SUBJECT},msg={$MSG}"); +
".htmlentities(trim($FROM))." To : ".$TO." Subject : ".$SUBJECT." Message : ".$MSG." -
"); + debug_print_backtrace(); + die("
"); debug_print_backtrace(); @@ -2022,7 +2047,7 @@ function generateHash ($plainText, $salt = "") { $server = $_SERVER['PHP_SELF'].":".GET_USER_AGENT().":".getenv('SERVER_SOFTWARE').":".GET_REMOTE_ADDR().":".":".filemtime(PATH."inc/databases.php"); // Build key string - $keys = SITE_KEY.":".DATE_KEY.":".$_CONFIG['secret_key'].":".$_CONFIG['file_hash'].":".date("d-m-Y (l-F-T)", bigintval($_CONFIG['patch_ctime'])).":".$_CONFIG['master_salt']; + $keys = SITE_KEY.":".DATE_KEY.":".getConfig('secret_key').":".getConfig('file_hash').":".date("d-m-Y (l-F-T)", bigintval(getConfig('patch_ctime'))).":".getConfig('master_salt'); // Additional data $data = $plainText.":".uniqid(mt_rand(), true).":".time(); @@ -2039,11 +2064,11 @@ function generateHash ($plainText, $salt = "") { //* DEBUG: */ echo "Descrambled=".$sha1b." (".strlen($sha1b).")"; // Generate the password salt string - $salt = substr($sha1, 0, $_CONFIG['salt_length']); + $salt = substr($sha1, 0, getConfig('salt_length')); //* DEBUG: */ echo $salt." (".strlen($salt).")"; } else { // Use given salt - $salt = substr($salt, 0, $_CONFIG['salt_length']); + $salt = substr($salt, 0, getConfig('salt_length')); //* DEBUG: */ echo "GIVEN={$salt}\n"; } @@ -2063,7 +2088,7 @@ function scrambleString($str) { return $str; } elseif (strlen($str) == 40) { // From database - $scrambleNums = explode(":", $_CONFIG['pass_scramble']); + $scrambleNums = explode(":", getConfig('pass_scramble')); } else { // Generate new numbers $scrambleNums = explode(":", genScrambleString(strlen($str))); @@ -2090,7 +2115,7 @@ function descrambleString($str) { if (strlen($str) != 40) return $str; // Load numbers from config - $scrambleNums = explode(":", $_CONFIG['pass_scramble']); + $scrambleNums = explode(":", getConfig('pass_scramble')); // Validate numbers if (count($scrambleNums) != 40) return $str; @@ -2146,9 +2171,9 @@ function ADD_URL_DATA($URL) { if ((!empty($_GET['refid'])) && (strpos($URL, "refid=") == 0)) { // Cookie found in URL $ADD .= $BIND."refid=".bigintval($_GET['refid']); - } elseif ((GET_EXT_VERSION("sql_patches") != '') && ($_CONFIG['def_refid'] > 0)) { + } elseif ((GET_EXT_VERSION("sql_patches") != '') && (getConfig('def_refid') > 0)) { // Not found! So let's set default here - $ADD .= $BIND."refid=".$_CONFIG['def_refid']; + $ADD .= $BIND."refid=".getConfig('def_refid'); } // Is there already added data? Then change the binder @@ -2175,12 +2200,12 @@ function generatePassString($passHash) { $ret = $passHash; // Is a secret key and master salt already initialized? - if ((!empty($_CONFIG['secret_key'])) && (!empty($_CONFIG['master_salt']))) { + if ((getConfig('secret_key') != "") && (getConfig('master_salt') != "")) { // Only calculate when the secret key is generated $newHash = ""; $start = 9; for ($idx = 0; $idx < 10; $idx++) { $part1 = hexdec(substr($passHash, $start, 4)); - $part2 = hexdec(substr($_CONFIG['secret_key'], $start, 4)); + $part2 = hexdec(substr(getConfig('secret_key'), $start, 4)); $mod = dechex($idx); if ($part1 > $part2) { $mod = dechex(sqrt(($part1 - $part2) * _PRIME / pi())); @@ -2195,7 +2220,7 @@ function generatePassString($passHash) { } // END - for //* DEBUG: */ print($passHash."".$newHash." (".strlen($newHash).")"); - $ret = generateHash($newHash, $_CONFIG['master_salt']); + $ret = generateHash($newHash, getConfig('master_salt')); //* DEBUG: */ print($ret."\n"); } else { // Hash it simple @@ -2238,14 +2263,16 @@ function mxchange_die ($msg) { // Display parsing time and number of SQL queries in footer function DISPLAY_PARSING_TIME_FOOTER() { - global $startTime, $_CONFIG; - $endTime = microtime(true); + global $_CONFIG; // Is the timer started? if (!isset($GLOBALS['startTime'])) { // Abort here return false; - } + } // END - if + + // Get end time + $endTime = microtime(true); // "Explode" both times $start = explode(" ", $GLOBALS['startTime']); @@ -2257,8 +2284,8 @@ function DISPLAY_PARSING_TIME_FOOTER() { // Prepare output $content = array( 'runtime' => $runTime, - 'numSQLs' => ($_CONFIG['sql_count'] + 1), - 'numTemplates' => ($_CONFIG['num_templates'] + 1) + 'numSQLs' => (getConfig('sql_count') + 1), + 'numTemplates' => (getConfig('num_templates') + 1) ); // Load the template @@ -2301,23 +2328,23 @@ function set_session ($var, $value) { // Check wether a boolean constant is set // Taken from user comments in PHP documentation for function constant() function isBooleanConstantAndTrue($constName) { // : Boolean - global $constCache; + global $cacheArray; // Failed by default $res = false; // In cache? - if (isset($constCache[$constName])) { + if (isset($cacheArray['const'][$constName])) { // Use cache //* DEBUG: */ print __FUNCTION__."(".__LINE__."): ".$constName."-CACHE!\n"; - $res = $constCache[$constName]; + $res = $cacheArray['const'][$constName]; } else { // Check constant //* DEBUG: */ print __FUNCTION__."(".__LINE__."): ".$constName."-RESOLVE!\n"; if (defined($constName)) $res = (constant($constName) === true); // Set cache - $constCache[$constName] = $res; + $cacheArray['const'][$constName] = $res; } //* DEBUG: */ var_dump($res); @@ -2326,12 +2353,12 @@ function isBooleanConstantAndTrue($constName) { // : Boolean } // Check wether a session variable is set -function isSessionVariableSet($var) { +function isSessionVariableSet ($var) { //* DEBUG: */ print __FUNCTION__."(".__LINE__."):var={$var}\n"; return (isset($_SESSION[$var])); } // Returns wether the value of the session variable or NULL if not set -function get_session($var) { +function get_session ($var) { global $cacheArray; // Default is not found! ;-) @@ -2340,9 +2367,11 @@ function get_session($var) { // Is the variable there or cached values? if (isset($cacheArray['session'][$var])) { // Get cached value (skips a lot SQL_ESCAPE() calles! + //* DEBUG: */ print __FUNCTION__."(".__LINE__."): ".$var."-CACHE!\n"; $value = $cacheArray['session'][$var]; } elseif (isSessionVariableSet($var)) { // Then get it secured! + //* DEBUG: */ print __FUNCTION__."(".__LINE__."): ".$var."-RESOLVE!\n"; $value = SQL_ESCAPE($_SESSION[$var]); // Cache the value @@ -2390,7 +2419,7 @@ function DEBUG_LOG ($file, $line, $message, $force=true) { if ((isBooleanConstantAndTrue('DEBUG_MODE')) || ($force)) { // Log this message away $fp = fopen(PATH."inc/cache/debug.log", 'a') or mxchange_die("Cannot write logfile debug.log!"); - fwrite($fp, date("d.m.Y|H:i:s", time())."|".basename(__FILE__)."|".__LINE__."|".strip_tags($message)."\n"); + fwrite($fp, date("d.m.Y|H:i:s", time())."|".basename($file)."|".$line."|".strip_tags($message)."\n"); fclose($fp); } // END - if } @@ -2456,9 +2485,9 @@ function RESET_ADD_INCLUDES () { $currWeek = date("W", time()); // Has it changed? - if ($_CONFIG['last_week'] != $currWeek) { + if (getConfig('last_week') != $currWeek) { // Include weekly reset scripts - $INC_POOL = array_merge($INC_POOL, GET_DIR_AS_ARRAY(PATH."inc/weekly/", "weekly_")); + $INC_POOL = merge_array($INC_POOL, GET_DIR_AS_ARRAY(PATH."inc/weekly/", "weekly_")); // Update config if (!defined('DEBUG_WEEKLY')) UPDATE_CONFIG("last_week", $currWeek); @@ -2468,9 +2497,9 @@ function RESET_ADD_INCLUDES () { $currMonth = date("m", time()); // Has it changed? - if ($_CONFIG['last_month'] != $currMonth) { + if (getConfig('last_month') != $currMonth) { // Include monthly reset scripts - $INC_POOL = array_merge($INC_POOL, GET_DIR_AS_ARRAY(PATH."inc/monthly/", "monthly_")); + $INC_POOL = merge_array($INC_POOL, GET_DIR_AS_ARRAY(PATH."inc/monthly/", "monthly_")); // Update config if (!defined('DEBUG_MONTHLY')) UPDATE_CONFIG("last_month", $currMonth); @@ -2496,7 +2525,7 @@ function HANDLE_EXTRA_VALUES ($filterFunction, $value, $extraValue) { // If we have an array simply use it and pre-extend it with our value if (is_array($extraValue)) { // Make the new args array - $args = array_merge(array($value), $extraValue); + $args = merge_array(array($value), $extraValue); } // END - if // Call the multi-parameter call-back @@ -2519,31 +2548,31 @@ function FILE_READABLE($fqfn) { // Converts timestamp selections into a timestamp function CONVERT_SELECTIONS_TO_TIMESTAMP(&$POST, &$DATA, &$id, &$skip) { // Init test variable - $TEST2 = ""; + $test2 = ""; // Get last three chars - $TEST = substr($id, -3); + $test = substr($id, -3); // Improved way of checking! :-) - if (in_array($TEST, array("_ye", "_mo", "_we", "_da", "_ho", "_mi", "_se"))) { + if (in_array($test, array("_ye", "_mo", "_we", "_da", "_ho", "_mi", "_se"))) { // Found a multi-selection for timings? - $TEST = substr($id, 0, -3); - if ((isset($POST[$TEST."_ye"])) && (isset($POST[$TEST."_mo"])) && (isset($POST[$TEST."_we"])) && (isset($POST[$TEST."_da"])) && (isset($POST[$TEST."_ho"])) && (isset($POST[$TEST."_mi"])) && (isset($POST[$TEST."_se"])) && ($TEST != $TEST2)) { + $test = substr($id, 0, -3); + if ((isset($POST[$test."_ye"])) && (isset($POST[$test."_mo"])) && (isset($POST[$test."_we"])) && (isset($POST[$test."_da"])) && (isset($POST[$test."_ho"])) && (isset($POST[$test."_mi"])) && (isset($POST[$test."_se"])) && ($test != $test2)) { // Generate timestamp - $POST[$TEST] = CREATE_TIMESTAMP_FROM_SELECTIONS($TEST, $POST); - $DATA[] = "$TEST='".$POST[$TEST]."'"; + $POST[$test] = CREATE_TIMESTAMP_FROM_SELECTIONS($test, $POST); + $DATA[] = sprintf("%s='%s'", $test, $POST[$test]); // Remove data from array foreach (array("ye", "mo", "we", "da", "ho", "mi", "se") as $rem) { - unset($POST[$TEST."_".$rem]); + unset($POST[$test."_".$rem]); } // END - foreach // Skip adding - unset($id); $skip = true; $TEST2 = $TEST; + unset($id); $skip = true; $test2 = $test; } // END - if } else { // Process this entry - $skip = false; $TEST2 = ""; + $skip = false; $test2 = ""; } } // Reverts the german decimal comma into Computer decimal dot @@ -2605,9 +2634,9 @@ function REBUILD_CACHE ($cache, $inc="") { // Shall I remove the cache file? if ((EXT_IS_ACTIVE("cache")) && (is_object($cacheInstance))) { // Rebuild cache - if ($cacheInstance->cache_file($cache, true)) { + if ($cacheInstance->loadCacheFile($cache)) { // Destroy it - $cacheInstance->cache_destroy(); + $cacheInstance->destroyCacheFile(); } // END - if // Include file given? @@ -2618,6 +2647,7 @@ function REBUILD_CACHE ($cache, $inc="") { // Is the include there? if (FILE_READABLE($fqfn)) { // And rebuild it from scratch + //* DEBUG: */ print __FUNCTION__."(".__LINE__."): inc={$inc} - LOADED!\n"; require($fqfn); } else { // Include not found! @@ -2628,7 +2658,7 @@ function REBUILD_CACHE ($cache, $inc="") { } // Purge admin menu cache function CACHE_PURGE_ADMIN_MENU ($id=0, $action="", $what="", $str="") { - global $_CONFIG, $cacheInstance; + global $cacheInstance; // Is the cache extension enabled or no cache instance or admin menu cache disabled? if (!EXT_IS_ACTIVE("cache")) { @@ -2638,7 +2668,7 @@ function CACHE_PURGE_ADMIN_MENU ($id=0, $action="", $what="", $str="") { // No cache instance! DEBUG_LOG(__FUNCTION__, __LINE__, " No cache instance found."); return false; - } elseif ((!isset($_CONFIG['cache_admin_menu'])) || ($_CONFIG['cache_admin_menu'] == "N")) { + } elseif ((getConfig('cache_admin_menu') == null) || (getConfig('cache_admin_menu') == "N")) { // Caching disabled (currently experiemental!) return false; } @@ -2774,10 +2804,10 @@ function DETERMINE_REFID () { } elseif ((isSessionVariableSet('refid')) && (get_session('refid') != 0)) { // Set session refid als global $GLOBALS['refid'] = bigintval(get_session('refid')); - } elseif ((GET_EXT_VERSION("sql_patches") != "") && ($_CONFIG['def_refid'] > 0)) { + } elseif ((GET_EXT_VERSION("sql_patches") != "") && (getConfig('def_refid') > 0)) { // Set default refid as refid in URL - $GLOBALS['refid'] = bigintval($_CONFIG['def_refid']); - } elseif ((GET_EXT_VERSION("user") >= "0.3.4") && ($_CONFIG['select_user_zero_refid']) == "Y") { + $GLOBALS['refid'] = bigintval(getConfig('def_refid')); + } elseif ((GET_EXT_VERSION("user") >= "0.3.4") && (getConfig('select_user_zero_refid')) == "Y") { // Select a random user which has confirmed enougth mails $GLOBALS['refid'] = SELECT_RANDOM_REFID(); } else { @@ -2786,22 +2816,167 @@ function DETERMINE_REFID () { } // Set cookie when default refid > 0 - if (!isSessionVariableSet('refid') || (!empty($GLOBALS['refid'])) || ((get_session('refid') == "0") && (isset($_CONFIG['def_refid'])) && ($_CONFIG['def_refid'] > 0))) { + if (!isSessionVariableSet('refid') || (!empty($GLOBALS['refid'])) || ((get_session('refid') == "0") && (getConfig('def_refid') > 0))) { // Set cookie set_session('refid', $GLOBALS['refid']); } // END - if + + // Return determined refid + return $GLOBALS['refid']; } // Destroys the admin session -function DESTROY_ADMIN_SESSION () { +function DESTROY_ADMIN_SESSION ($destroy = true) { // Kill maybe existing session variables including array elements - set_session('admin_login' , ""); - set_session('admin_md5' , ""); - set_session('admin_last' , ""); - set_session('admin_to' , ""); + set_session('admin_login', ""); + set_session('admin_md5' , ""); + set_session('admin_last' , ""); + set_session('admin_to' , ""); // Destroy session and return status - return @session_destroy(); + if ($destroy) { + return @session_destroy(); + } // END - if + + // All fine if we shall not really destroy the session + return true; +} + +// Checks if a given apache module is loaded +function IF_APACHE_MODULE_LOADED ($apacheModule) { + // Check it and return result + return (((function_exists('apache_get_modules')) && (in_array($apacheModule, apache_get_modules()))) || (!function_exists('apache_get_modules'))); +} + +// Getter for $_CONFIG entries +function getConfig ($entry) { + global $_CONFIG; + + // Default value + $value = null; + + // Is the entry there? + if (isset($_CONFIG[$entry])) { + // Then use it + $value = $_CONFIG[$entry]; + } // END - if + + // Return it + return $value; +} + +// @TODO Rewrite all language constants to the function getLanguage(). +// "Getter" for language strings +function getMessage ($messageId) { + // Default is not found! + $return = "!".$messageId."!"; + + // Is the language string found? + if (isset($GLOBALS['msg'][$messageId])) { + // Language array element found + $return = $GLOBALS['msg'][$messageId]; + } elseif (defined($messageId)) { + // @DEPRECATED Deprecated constant found + $return = constant($messageId); + } else { + // Missing language constant + DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Missing message string %s detected.", $messageId)); + } + + // Return the string + return $return; +} + +// Get current theme name +function GET_CURR_THEME() { + global $INC_POOL, $_CONFIG, $CSS, $cacheArray; + + // The default theme is 'default'... ;-) + $ret = "default"; + + // Load default theme if not empty from configuration + if (getConfig('default_theme') != "") $ret = getConfig('default_theme'); + + if (!isSessionVariableSet('mxchange_theme')) { + // Set default theme + set_session("mxchange_theme", $ret); + } elseif ((isSessionVariableSet('mxchange_theme')) && (GET_EXT_VERSION("sql_patches") >= "0.1.4")) { + //die("".print_r($cacheArray['themes'], true).""); + // Get theme from cookie + $ret = get_session('mxchange_theme'); + + // Is it valid? + if (THEME_GET_ID($ret) == 0) { + // Fix it to default + $ret = "default"; + } // END - if + } elseif ((!isBooleanConstantAndTrue('mxchange_installed')) && ((isBooleanConstantAndTrue('mxchange_installing')) || ($CSS == true)) && ((!empty($_GET['theme'])) || (!empty($_POST['theme'])))) { + // Prepare FQFN for checking + $theme = sprintf("%stheme/%s/theme.php", PATH, SQL_ESCAPE($_GET['theme'])); + + // Installation mode active + if ((!empty($_GET['theme'])) && (FILE_READABLE($theme))) { + // Set cookie from URL data + set_session("mxchange_theme", SQL_ESCAPE($_GET['theme'])); + } elseif (FILE_READABLE(sprintf("%stheme/%s/theme.php", PATH, SQL_ESCAPE($_POST['theme'])))) { + // Set cookie from posted data + set_session("mxchange_theme", SQL_ESCAPE($_POST['theme'])); + } + + // Set return value + $ret = get_session('mxchange_theme'); + } else { + // Invalid design, reset cookie + set_session("mxchange_theme", $ret); + } + + // Add (maybe) found theme.php file to inclusion list + $theme = sprintf("%stheme/%s/theme.php", PATH, SQL_ESCAPE($ret)); + + // Try to load the requested include file + if (FILE_READABLE($theme)) $INC_POOL[] = $theme; + + // Return theme value + return $ret; +} + +// Get id from theme +function THEME_GET_ID ($name) { + global $cacheArray, $_CONFIG; + + // Is the extension "theme" installed? + if (!EXT_IS_ACTIVE("theme")) { + // Then abort here + return 0; + } // END - if + + // Default id + $id = 0; + + // Is the cache entry there? + if (isset($cacheArray['themes']['id'][$name])) { + // Get the version from cache + $id = $cacheArray['themes']['id'][$name]; + + // Count up + if (getConfig('cache_hits') > 0) { $_CONFIG['cache_hits']++; } else { $_CONFIG['cache_hits'] = 1; } + } elseif (GET_EXT_VERSION("cache") != "0.1.8") { + // Check if current theme is already imported or not + $result = SQL_QUERY_ESC("SELECT id FROM `"._MYSQL_PREFIX."_themes` WHERE theme_path='%s' LIMIT 1", + array($name), __FILE__, __LINE__); + + // Entry found? + if (SQL_NUMROWS($result) == 1) { + // Fetch data + list($id) = SQL_FETCHROW($result); + } // END - if + + // Free result + SQL_FREERESULT($result); + } + + // Return id + return $id; } ////////////////////////////////////////////////// @@ -2812,7 +2987,7 @@ function DESTROY_ADMIN_SESSION () { // if (!function_exists('html_entity_decode')) { // Taken from documentation on www.php.net - function html_entity_decode($string) { + function html_entity_decode ($string) { $trans_tbl = get_html_translation_table(HTML_ENTITIES); $trans_tbl = array_flip($trans_tbl); return strtr($string, $trans_tbl);
".print_r($cacheArray['themes'], true)."