X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Fwrapper-functions.php;h=13a0fce739768900e76644b92ae6df18134708f4;hp=6803dfc37810eee46a9a9f38a5763230f3fb4365;hb=3bcb292dd0b55177499600c226d5d2aa8a932ce7;hpb=81bfbcd72e424060ea1223b49ad92fcfa150f361 diff --git a/inc/wrapper-functions.php b/inc/wrapper-functions.php index 6803dfc378..13a0fce739 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,12 +38,17 @@ // 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 function readFromFile ($FQFN, $sqlPrepare = false) { + // Sanity-check if file is there (should be there, but just to make it sure) + if (!isFileReadable($FQFN)) { + // This should not happen + debug_report_bug(__FUNCTION__.': File ' . basename($FQFN) . ' is not readable!'); + } // END - if + // Load the file if (function_exists('file_get_contents')) { // Use new function @@ -65,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; @@ -80,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. @@ -105,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])) { - // Then try to load it - loadInclude($INC); - - // And mark it as loaded - $GLOBALS['load_once'][$INC] = "loaded"; - } // 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) { @@ -156,16 +137,10 @@ function decodeString ($str, $decompress = true) { return $str; } -// Smartly adds slashes -function smartAddSlashes ($unquoted) { - $unquoted = str_replace("\\", '', $unquoted); - return addslashes($unquoted); -} - // Decode entities in a nicer way -function decodeEntities ($str) { +function decodeEntities ($str, $quote = ENT_NOQUOTES) { // Decode the entities to UTF-8 now - $decodedString = html_entity_decode($str, ENT_NOQUOTES, 'UTF-8'); + $decodedString = html_entity_decode($str, $quote, 'UTF-8'); // Return decoded string return $decodedString; @@ -174,39 +149,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 @@ -215,9 +197,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 @@ -230,9 +212,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 @@ -245,9 +227,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 @@ -260,9 +242,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 @@ -271,19 +253,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 (getConfig('MXCHANGE_INSTALLED') == 'Y'); + // Do we have cache? + if (!isset($GLOBALS['is_installed'])) { + // Determine wether this script is installed + $GLOBALS['is_installed'] = ( + ( + // First is config + ( + ( + 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 @@ -295,7 +315,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 ((isConfigEntrySet('DEBUG_REGEX')) && (getConfig('DEBUG_REGEX') == 'Y')); } // Checks wether the cache instance is valid @@ -319,14 +345,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)) { @@ -351,14 +380,14 @@ function sendHeader ($header) { } // END - if // Send the header - header($header); + header(trim($header)); } // Wrapper function for chmod() // @TODO Do some more sanity check here function changeMode ($FQFN, $mode) { // Is the file/directory there? - if ((!isFile($FQFN)) && (!isDirectory($FQFN))) { + if ((!isFileReadable($FQFN)) && (!isDirectory($FQFN))) { // Neither, so abort here debug_report_bug('Cannot chmod() on ' . basename($FQFN) . '.'); } // END - if @@ -367,9 +396,367 @@ function changeMode ($FQFN, $mode) { chmod($FQFN, $mode); } +// Wrapper for unlink() +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 + + // All fine if no file was removed. If we change this to 'false' or rewrite + // above if() block it would be to restrictive. + return true; +} + // Wrapper for $_POST['sel'] -function countPostSelection () { - return countSelection(REQUEST_POST('sel')); +function countPostSelection ($element = 'sel') { + // Is it set? + if (isPostRequestElementSet($element)) { + // Return counted elements + return countSelection(postRequestElement($element)); + } else { + // Return zero if not found + return 0; + } +} + +// Checks wether the config-local.php is loaded +function isConfigLocalLoaded () { + return ((isset($GLOBALS['config_local_loaded'])) && ($GLOBALS['config_local_loaded'] === true)); +} + +// Checks wether a nickname or userid was entered and caches the result +function isNicknameUsed ($userid) { + // Default is false + $isUsed = false; + + // Is the cache there + if (isset($GLOBALS['is_nickname_used'][$userid])) { + // Then use it + $isUsed = $GLOBALS['is_nickname_used'][$userid]; + } else { + // Determine it + $isUsed = ((isExtensionActive('nickname')) && (('' . round($userid) . '') != $userid)); + + // And write it to the cache + $GLOBALS['is_nickname_used'][$userid] = $isUsed; + } + + // Return the result + return $isUsed; +} + +// Getter for 'what' value +function getWhat () { + // Default is null + $what = null; + + // Is the value set? + if (isWhatSet(true)) { + // Then use it + $what = $GLOBALS['what']; + } // END - if + + // Return it + return $what; +} + +// Setter for 'what' value +function setWhat ($newWhat) { + $GLOBALS['what'] = SQL_ESCAPE($newWhat); +} + +// Setter for 'what' from configuration +function setWhatFromConfig ($configEntry) { + // Get 'what' from config + $what = getConfig($configEntry); + + // Set it + setWhat($what); +} + +// Checks wether what is set and optionally aborts on miss +function isWhatSet ($strict = false) { + // Check for it + $isset = (isset($GLOBALS['what'])); + + // Should we abort here? + if (($strict === true) && ($isset === false)) { + // Output backtrace + debug_report_bug('what is empty.'); + } // END - if + + // Return it + return $isset; +} + +// Getter for 'action' value +function getAction () { + // Default is null + $action = null; + + // Is the value set? + if (isActionSet(true)) { + // Then use it + $action = $GLOBALS['action']; + } // END - if + + // Return it + return $action; +} + +// Setter for 'action' value +function setAction ($newAction) { + $GLOBALS['action'] = SQL_ESCAPE($newAction); +} + +// Checks wether action is set and optionally aborts on miss +function isActionSet ($strict = false) { + // Check for it + $isset = (isset($GLOBALS['action'])); + + // Should we abort here? + if (($strict === true) && ($isset === false)) { + // Output backtrace + debug_report_bug('action is empty.'); + } // END - if + + // Return it + return $isset; +} + +// Getter for 'module' value +function getModule ($strict = true) { + // Default is null + $module = null; + + // Is the value set? + if (isModuleSet($strict)) { + // Then use it + $module = $GLOBALS['module']; + } // END - if + + // Return it + return $module; +} + +// Setter for 'module' value +function setModule ($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 ($strict = false) { + // Check for it + $isset = (!empty($GLOBALS['module'])); + + // Should we abort here? + 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 so abort here + if (!isCurrentUserIdSet()) return false; + + // 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 (!isCurrentUserIdSet()) { + // Not set + debug_report_bug('User id is not set.'); + } // END - if + + // Return the userid + return $GLOBALS['current_userid']; +} + +// Checks if current userid is set +function isCurrentUserIdSet () { + return isset($GLOBALS['current_userid']); } // [EOF]