X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Fwrapper-functions.php;h=c7e4978ce06d380518dae021891ee4699ff816be;hp=1df653fb9bcd16d13e00ef9d72c7a603d651929a;hb=5408c1e4283b9ae9bc34d12e46a5fe6be2442d39;hpb=ff21321f09918909f7e21f850b6617156323e332 diff --git a/inc/wrapper-functions.php b/inc/wrapper-functions.php index 1df653fb9b..c7e4978ce0 100644 --- a/inc/wrapper-functions.php +++ b/inc/wrapper-functions.php @@ -17,7 +17,7 @@ * Needs to be in all Files and every File needs "svn propset * * svn:keywords Date Revision" (autoprobset!) at least!!!!!! * * -------------------------------------------------------------------- * - * Copyright (c) 2003 - 2008 by Roland Haeder * + * Copyright (c) 2003 - 2009 by Roland Haeder * * For more information visit: http://www.mxchange.org * * * * This program is free software; you can redistribute it and/or modify * @@ -38,8 +38,7 @@ // Some security stuff... if (!defined('__SECURITY')) { - $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), '/inc') + 4) . '/security.php'; - require($INC); + die(); } // END - if // Read a given file @@ -71,11 +70,11 @@ function readFromFile ($FQFN, $sqlPrepare = false) { } // Writes content to a file -function writeToFile ($FQFN, $content) { +function writeToFile ($FQFN, $content, $aquireLock = false) { // Is the file writeable? if ((isFileReadable($FQFN)) && (!is_writeable($FQFN)) && (!changeMode($FQFN, 0644))) { // Not writeable! - DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("File %s not writeable.", basename($FQFN))); + logDebugMessage(__FUNCTION__, __LINE__, sprintf("File %s not writeable.", basename($FQFN))); // Failed! :( return false; @@ -86,20 +85,33 @@ function writeToFile ($FQFN, $content) { // Is the function there? if (function_exists('file_put_contents')) { - // Write it directly - $return = file_put_contents($FQFN, $content); + // With lock? + if ($aquireLock === true) { + // Write it directly with lock + $return = file_put_contents($FQFN, $content, LOCK_EX); + } else { + // Write it directly + $return = file_put_contents($FQFN, $content); + } } else { // Write it with fopen $fp = fopen($FQFN, 'w') or app_die(__FUNCTION__, __LINE__, "Cannot write file ".basename($FQFN).'!'); + + // Aquire lock + if ($aquireLock === true) flock($fp, LOCK_EX); + + // Write content fwrite($fp, $content); - fclose($fp); - // Set CHMOD rights - $return = changeMode($FQFN, 0644); + // Close stream + fclose($fp); } + // Mark it as readable + $GLOBALS['file_readable'][$FQFN] = true; + // Return status - return $return; + return changeMode($FQFN, 0644); } // Clears the output buffer. This function does *NOT* backup sent content. @@ -111,43 +123,6 @@ function clearOutputBuffer () { } // END - if } -// Loads an include file and logs any missing files for debug purposes -function loadInclude ($INC) { - // Add the path. This is why we need a trailing slash in config.php - $FQFN = constant('PATH') . $INC; - - // Is the include file there? - if (!isIncludeReadable($INC)) { - // Not there so log it - debug_report_bug(sprintf("Include file %s not found.", $INC)); - return false; - } // END - if - - // Try to load it - require($FQFN); -} - -// Loads an include file once -function loadIncludeOnce ($INC) { - // Is it not loaded? - if (!isset($GLOBALS['load_once'][$INC])) { - // Mark it as loaded - $GLOBALS['load_once'][$INC] = "loaded"; - - // Then try to load it - loadInclude($INC); - } // END - if -} - -// Checks wether an include file (non-FQFN better) is readable -function isIncludeReadable ($INC) { - // Construct FQFN - $FQFN = constant('PATH') . $INC; - - // Is it readable? - return isFileReadable($FQFN); -} - // Encode strings // @TODO Implement $compress function encodeString ($str, $compress = true) { @@ -164,8 +139,17 @@ function decodeString ($str, $decompress = true) { // Smartly adds slashes function smartAddSlashes ($unquoted) { - $unquoted = str_replace("\\", '', $unquoted); - return addslashes($unquoted); + // Do we have cache? + if (!isset($GLOBALS['smart_addslashes'][$unquoted])) { + // Remove slashe + $unquoted = str_replace("\\", '', $unquoted); + + // Put it in cache and add slashes + $GLOBALS['smart_addslashes'][$unquoted] = addslashes($unquoted); + } // END - if + + // Return result + return $GLOBALS['smart_addslashes'][$unquoted]; } // Decode entities in a nicer way @@ -180,39 +164,46 @@ function decodeEntities ($str) { // Merges an array together but only if both are arrays function merge_array ($array1, $array2) { // Are both an array? - if ((is_array($array1)) && (is_array($array2))) { - // Merge all together - return array_merge($array1, $array2); - } elseif (is_array($array1)) { - // Return left array - DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("array2 is not an array. array != %s", gettype($array2))); - return $array1; - } elseif (is_array($array2)) { - // Return right array - DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("array1 is not an array. array != %s", gettype($array1))); - return $array2; + if ((!is_array($array1)) && (!is_array($array2))) { + // Both are not arrays + debug_report_bug(__FUNCTION__ . ': No arrays provided!'); + } elseif (!is_array($array1)) { + // Left one is not an array + debug_report_bug(sprintf("[%s:%s] array1 is not an array. array != %s", __FUNCTION__, __LINE__, gettype($array1))); + } elseif (!is_array($array2)) { + // Right one is not an array + debug_report_bug(sprintf("[%s:%s] array2 is not an array. array != %s", __FUNCTION__, __LINE__, gettype($array2))); } - // Both are not arrays - debug_report_bug(__FUNCTION__.": No arrays provided!"); + // Merge all together + return array_merge($array1, $array2); } // Check if given FQFN is a readable file function isFileReadable ($FQFN) { - // Check all... - return ((file_exists($FQFN)) && (is_file($FQFN)) && (is_readable($FQFN))); + // Do we have cache? + if (!isset($GLOBALS['file_readable'][$FQFN])) { + // Check all... + $GLOBALS['file_readable'][$FQFN] = ((file_exists($FQFN)) && (is_file($FQFN)) && (is_readable($FQFN))); + } // END - if + + // Return result + return $GLOBALS['file_readable'][$FQFN]; } -// Checks wether the given FQFN is a directory and not .,.. or .svn +// Checks wether the given FQFN is a directory and not ., .. or .svn function isDirectory ($FQFN) { - // Generate baseName - $baseName = basename($FQFN); + // Do we have cache? + if (!isset($GLOBALS['is_directory'][$FQFN])) { + // Generate baseName + $baseName = basename($FQFN); - // Check it - $isDirectory = ((is_dir($FQFN)) && ($baseName != '.') && ($baseName != '..') && ($baseName != '.svn')); + // Check it + $GLOBALS['is_directory'][$FQFN] = ((is_dir($FQFN)) && ($baseName != '.') && ($baseName != '..') && ($baseName != '.svn')); + } // END - if // Return the result - return $isDirectory; + return $GLOBALS['is_directory'][$FQFN]; } // "Getter" for remote IP number @@ -221,9 +212,9 @@ function detectRemoteAddr () { $remoteAddr = determineRealRemoteAddress(); // Is removeip installed? - if (EXT_IS_ACTIVE('removeip')) { + if (isExtensionActive('removeip')) { // Then anonymize it - $remoteAddr = GET_ANONYMOUS_REMOTE_ADDR($remoteAddr); + $remoteAddr = getAnonymousRemoteAddress($remoteAddr); } // END - if // Return it @@ -236,9 +227,9 @@ function detectRemoteHostname () { $remoteHost = getenv('REMOTE_HOST'); // Is removeip installed? - if (EXT_IS_ACTIVE('removeip')) { + if (isExtensionActive('removeip')) { // Then anonymize it - $remoteHost = GET_ANONYMOUS_REMOTE_HOST($remoteHost); + $remoteHost = getAnonymousRemoteHost($remoteHost); } // END - if // Return it @@ -251,9 +242,9 @@ function detectUserAgent () { $userAgent = getenv('HTTP_USER_AGENT'); // Is removeip installed? - if (EXT_IS_ACTIVE('removeip')) { + if (isExtensionActive('removeip')) { // Then anonymize it - $userAgent = GET_ANONYMOUS_USER_AGENT($userAgent); + $userAgent = getAnonymousUserAgent($userAgent); } // END - if // Return it @@ -266,9 +257,9 @@ function detectReferer () { $referer = getenv('HTTP_REFERER'); // Is removeip installed? - if (EXT_IS_ACTIVE('removeip')) { + if (isExtensionActive('removeip')) { // Then anonymize it - $referer = GET_ANONYMOUS_REFERER($referer); + $referer = getAnonymousReferer($referer); } // END - if // Return it @@ -277,40 +268,57 @@ function detectReferer () { // Check wether we are installing function isInstalling () { - $installing = ((isset($GLOBALS['mxchange_installing'])) || (REQUEST_ISSET_GET('installing'))); - //* DEBUG: */ var_dump($installing); - return $installing; + // Determine wether we are installing + if (!isset($GLOBALS['mxchange_installing'])) { + // Check URL (css.php/js.php need this) + $GLOBALS['mxchange_installing'] = isGetRequestElementSet('installing'); + } // END - if + + // Return result + return $GLOBALS['mxchange_installing']; } // Check wether this script is installed function isInstalled () { - return ( - ( - // New config file found and loaded - getConfig('MXCHANGE_INSTALLED') == 'Y' - ) || ( - // Fall-back! - isIncludeReadable('inc/config.php') - ) || ( + // Do we have cache? + if (!isset($GLOBALS['is_installed'])) { + // Determine wether this script is installed + $GLOBALS['is_installed'] = ( ( - // New config file found, but not yet read - isIncludeReadable('inc/cache/config-local.php') - ) && ( + // First is config ( - // Only new config file is found - !isIncludeReadable('inc/config.php') - ) || ( - // Is installation mode - isInstalling() + ( + isConfigEntrySet('MXCHANGE_INSTALLED') + ) && ( + getConfig('MXCHANGE_INSTALLED') == 'Y' + ) ) - ) - ) - ); + ) || ( + // New config file found and loaded + isIncludeReadable(getConfig('CACHE_PATH') . 'config-local.php') + ) || ( + ( + // New config file found, but not yet read + isIncludeReadable(getConfig('CACHE_PATH') . 'config-local.php') + ) && ( + ( + // Only new config file is found + !isIncludeReadable('inc/config.php') + ) || ( + // Is installation mode + !isInstalling() + ) + ) + )); + } // END - if + + // Then use the cache + return $GLOBALS['is_installed']; } // Check wether an admin is registered function isAdminRegistered () { - return (getConfig('ADMIN_REGISTERED') == 'Y'); + return ((isConfigEntrySet('ADMIN_REGISTERED')) && (getConfig('ADMIN_REGISTERED') == 'Y')); } // Checks wether the reset mode is active @@ -322,13 +330,13 @@ function isResetModeEnabled () { // Checks wether the debug mode is enabled function isDebugModeEnabled () { // Simply check it - return (getConfig('DEBUG_MODE') == 'Y'); + return ((isConfigEntrySet('DEBUG_MODE')) && (getConfig('DEBUG_MODE') == 'Y')); } // Checks wether we shall debug regular expressions function isDebugRegExpressionEnabled () { // Simply check it - return (getConfig('DEBUG_REGEX') == 'Y'); + return ((isConfigEntrySet('DEBUG_REGEX')) && (getConfig('DEBUG_REGEX') == 'Y')); } // Checks wether the cache instance is valid @@ -352,14 +360,17 @@ function copyFileVerified ($source, $dest, $chmod = '') { // Is the target directory there? if (!isDirectory(dirname($dest))) { // Then abort here - debug_report_bug('Cannot find directory ' . str_replace(constant('PATH'), '', dirname($dest)) . '.'); + debug_report_bug('Cannot find directory ' . str_replace(getConfig('PATH'), '', dirname($dest)) . '.'); } // END - if // Now try to copy it if (!copy($source, $dest)) { // Something went wrong debug_report_bug('copy() has failed to copy the file.'); - } // END - if + } else { + // Reset cache + $GLOBALS['file_readable'][$dest] = true; + } // If there are chmod rights set, apply them if (!empty($chmod)) { @@ -404,6 +415,9 @@ function changeMode ($FQFN, $mode) { function removeFile ($FQFN) { // Is the file there? if (isFileReadable($FQFN)) { + // Reset cache first + $GLOBALS['file_readable'][$FQFN] = false; + // Yes, so remove it return unlink($FQFN); } // END - if @@ -415,7 +429,7 @@ function removeFile ($FQFN) { // Wrapper for $_POST['sel'] function countPostSelection () { - return countSelection(REQUEST_POST('sel')); + return countSelection(postRequestElement('sel')); } // Checks wether the config-local.php is loaded @@ -429,15 +443,15 @@ function isNicknameUsed ($userid) { $isUsed = false; // Is the cache there - if (isset($GLOBALS['cache_probe_nicknames'][$userid])) { + if (isset($GLOBALS['is_nickname_used'][$userid])) { // Then use it - $isUsed = $GLOBALS['cache_probe_nicknames'][$userid]; + $isUsed = $GLOBALS['is_nickname_used'][$userid]; } else { // Determine it - $isUsed = ((EXT_IS_ACTIVE('nickname')) && ((''.round($userid).'') != $userid)); + $isUsed = ((isExtensionActive('nickname')) && (('' . round($userid) . '') != $userid)); // And write it to the cache - $GLOBALS['cache_probe_nicknames'][$userid] = $isUsed; + $GLOBALS['is_nickname_used'][$userid] = $isUsed; } // Return the result @@ -474,12 +488,12 @@ function setWhatFromConfig ($configEntry) { } // Checks wether what is set and optionally aborts on miss -function isWhatSet ($abortOnMiss = false) { +function isWhatSet ($strict = false) { // Check for it $isset = (isset($GLOBALS['what'])); // Should we abort here? - if (($abortOnMiss === true) && ($isset === false)) { + if (($strict === true) && ($isset === false)) { // Output backtrace debug_report_bug('what is empty.'); } // END - if @@ -509,12 +523,12 @@ function setAction ($newAction) { } // Checks wether action is set and optionally aborts on miss -function isActionSet ($abortOnMiss = false) { +function isActionSet ($strict = false) { // Check for it $isset = (isset($GLOBALS['action'])); // Should we abort here? - if (($abortOnMiss === true) && ($isset === false)) { + if (($strict === true) && ($isset === false)) { // Output backtrace debug_report_bug('action is empty.'); } // END - if @@ -524,12 +538,12 @@ function isActionSet ($abortOnMiss = false) { } // Getter for 'module' value -function getModule () { +function getModule ($strict = true) { // Default is null $module = null; // Is the value set? - if (isModuleSet(true)) { + if (isModuleSet($strict)) { // Then use it $module = $GLOBALS['module']; } // END - if @@ -540,17 +554,21 @@ function getModule () { // Setter for 'module' value function setModule ($newModule) { - $GLOBALS['module'] = SQL_ESCAPE($newModule); + // Secure it and make all modules lower-case + $GLOBALS['module'] = SQL_ESCAPE(strtolower($newModule)); } // Checks wether module is set and optionally aborts on miss -function isModuleSet ($abortOnMiss = false) { +function isModuleSet ($strict = false) { // Check for it $isset = (!empty($GLOBALS['module'])); // Should we abort here? - if (($abortOnMiss === true) && ($isset === false)) { + if (($strict === true) && ($isset === false)) { // Output backtrace + print 'Module not set!
';
+		debug_print_backtrace();
+		die('';
+	return ((isExtensionInstalled($ext_name)) && (getExtensionVersion($ext_name) >= $version));
+}
+
+// Wrapper function for checking if extension is installed and older than given version
+function isExtensionInstalledAndOlder ($ext_name, $version) {
+	// Return it
+	//* DEBUG: */ print __FUNCTION__.':'.$ext_name.'<'.$version.'
'; + return ((isExtensionInstalled($ext_name)) && (isExtensionOlder($ext_name, $version))); +} + +// Set username +function setUsername ($userName) { + $GLOBALS['username'] = (string) $userName; +} + +// Get username +function getUsername () { + return $GLOBALS['username']; +} + +// Wrapper function for installation phase +function isInstallationPhase () { + // Do we have cache? + if (!isset($GLOBALS['installation_phase'])) { + // Determine it + $GLOBALS['installation_phase'] = ((!isInstalled()) || (isInstalling())); + } // END - if + + // Return result + return $GLOBALS['installation_phase']; +} + +// Checks wether the extension demo is actuve and the admin login is demo (password needs to be demo, too!) +function isDemoModeActive () { + return ((isExtensionActive('demo')) && (getSession('admin_login') == 'demo')); +} + +// Wrapper function to redirect to de-refered URL +function redirectToDereferedUrl ($URL) { + // De-refer the URL + $URL = generateDerefererUrl($URL); + + // Redirect to to + redirectToUrl($URL); +} + +// Getter for PHP caching value +function getPhpCaching () { + return $GLOBALS['php_caching']; +} + +// Checks wether the admin hash is set +function isAdminHashSet ($admin) { + return isset($GLOBALS['cache_array']['admin']['password'][$admin]); +} + +// Setter for admin hash +function setAdminHash ($admin, $hash) { + $GLOBALS['cache_array']['admin']['password'][$admin] = $hash; +} + +// Init user data array +function initUserData () { + // User id should not be zero + if (getCurrentUserId() < 1) debug_report_bug(__FUNCTION__.': User id is zero.'); + + // Init the user + $GLOBALS['user_data'][getCurrentUserId()] = array(); +} + +// Getter for user data +function getUserData ($column) { + // User id should not be zero + if (getCurrentUserId() < 1) debug_report_bug(__FUNCTION__.': User id is zero.'); + + // Return the value + return $GLOBALS['user_data'][getCurrentUserId()][$column]; +} + +// Geter for whole user data array +function getUserDataArray () { + // User id should not be zero + if (getCurrentUserId() < 1) debug_report_bug(__FUNCTION__.': User id is zero.'); + + // Get the whole array + return $GLOBALS['user_data'][getCurrentUserId()]; +} + +// Checks if the user data is valid, this may indicate that the user has logged +// in, but you should use isMember() if you want to find that out. +function isUserDataValid () { + // User id should not be zero + if (getCurrentUserId() < 1) debug_report_bug(__FUNCTION__.': User id is zero.'); + + // Is the array there and filled? + return ((isset($GLOBALS['user_data'][getCurrentUserId()])) && (count($GLOBALS['user_data'][getCurrentUserId()]) > 1)); +} + +// Setter for current userid +function setCurrentUserId ($userid) { + $GLOBALS['current_userid'] = bigintval($userid); +} + +// Getter for current userid +function getCurrentUserId () { + // Userid must be set before it can be used + if (!isset($GLOBALS['current_userid'])) { + // Not set + debug_report_bug('User id is not set.'); + } // END - if + + // Return the userid + return $GLOBALS['current_userid']; +} + // [EOF] ?>