+// 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 = (('' . 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'])) && (!empty($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
+ debug_report_bug('module is empty.');
+ } // END - if
+
+ // Return it
+ return (($isset === true) && ($GLOBALS['module'] != 'unknown')) ;
+}
+
+// Getter for 'output_mode' value
+function getOutputMode () {
+ // Default is null
+ $output_mode = null;
+
+ // Is the value set?
+ if (isOutputModeSet(true)) {
+ // Then use it
+ $output_mode = $GLOBALS['output_mode'];
+ } // END - if
+
+ // Return it
+ return $output_mode;
+}
+
+// Setter for 'output_mode' value
+function setOutputMode ($newOutputMode) {
+ $GLOBALS['output_mode'] = (int) $newOutputMode;
+}
+
+// Checks wether output_mode is set and optionally aborts on miss
+function isOutputModeSet ($strict = false) {
+ // Check for it
+ $isset = (isset($GLOBALS['output_mode']));
+
+ // Should we abort here?
+ if (($strict === true) && ($isset === false)) {
+ // Output backtrace
+ debug_report_bug('output_mode is empty.');
+ } // END - if
+
+ // Return it
+ return $isset;
+}
+
+// Enables block-mode
+function enableBlockMode ($enabled = true) {
+ $GLOBALS['block_mode'] = $enabled;
+}
+
+// Checks wether block-mode is enabled
+function isBlockModeEnabled () {
+ // Abort if not set
+ if (!isset($GLOBALS['block_mode'])) {
+ // Needs to be fixed
+ debug_report_bug(__FUNCTION__ . ': block_mode is not set.');
+ } // END - if
+
+ // Return it
+ return $GLOBALS['block_mode'];
+}
+
+// Wrapper function for addPointsThroughReferalSystem()
+function addPointsDirectly ($subject, $userid, $points) {
+ // Reset level here
+ unset($GLOBALS['ref_level']);
+
+ // Call more complicated method (due to more parameters)
+ return addPointsThroughReferalSystem($subject, $userid, $points, false, 0, false, 'direct');
+}
+
+// Wrapper function to redirect from member-only modules to index
+function redirectToIndexMemberOnlyModule () {
+ // Do the redirect here
+ redirectToUrl('modules.php?module=index&code=' . getCode('MODULE_MEM_ONLY') . '&mod=' . getModule());
+}
+
+// Wrapper function to redirect to current URL
+function redirectToRequestUri () {
+ redirectToUrl(basename(detectRequestUri()));
+}
+
+// Wrapper function to redirect to de-refered URL
+function redirectToDereferedUrl ($URL) {
+ // Redirect to to
+ redirectToUrl(generateDerefererUrl($URL));
+}
+
+// Wrapper function for checking if extension is installed and newer or same version
+function isExtensionInstalledAndNewer ($ext_name, $version) {
+ // Return it
+ //* DEBUG: */ print __FUNCTION__.':'.$ext_name.'=>'.$version.'<br />';
+ 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.'<br />';
+ return ((isExtensionInstalled($ext_name)) && (isExtensionOlder($ext_name, $version)));
+}
+
+// Set username
+function setUsername ($userName) {
+ $GLOBALS['username'] = (string) $userName;
+}
+
+// Get username
+function getUsername () {
+ // default is guest
+ $username = getMessage('USERNAME_GUEST');
+
+ // User name set?
+ if (isset($GLOBALS['username'])) {
+ // Use the set name
+ $username = $GLOBALS['username'];
+ } // END - if
+
+ // Return it
+ return $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'));
+}
+
+// Getter for PHP caching value
+function getPhpCaching () {
+ return $GLOBALS['php_caching'];
+}
+
+// Checks wether the admin hash is set
+function isAdminHashSet ($admin) {
+ /**
+ * @TODO Do we really need this check? If yes, try to fix this:
+ * 1.:functions.php:2504, debug_get_mailable_backtrace(0)
+ * 2.:wrapper-functions.php:744, debug_report_bug(1)
+ * 3.:mysql-manager.php:728, isAdminHashSet(1)
+ * 4.:filters.php:384, isAdmin(0)
+ * 5.:debug_get_mailable_backtrace:2457, FILTER_DETERMINE_USERNAME(1)
+ * 6.:filter-functions.php:280, call_user_func_array(2)
+ * 7.:load_cache.php:74, runFilterChain(1)
+ * 8.:inc-functions.php:131, include(1)
+ * 9.:inc-functions.php:145, loadInclude(1)
+ * 10.:mysql-connect.php:104, loadIncludeOnce(1)
+ * 11.:inc-functions.php:131, include(1)
+ * 12.:inc-functions.php:145, loadInclude(1)
+ * 13.:config-global.php:106, loadIncludeOnce(1)
+ * 14.:js.php:57, require(1)
+ */
+ if (!isset($GLOBALS['cache_array']['admin'])) {
+ debug_report_bug('Cache not set.');
+ } // END - if
+
+ // Check for admin hash
+ 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 () {
+ // Get user id
+ $uid = getCurrentUserId();
+
+ // User id should not be zero
+ if ($uid < 1) debug_report_bug(__FUNCTION__.': User id is zero.');
+
+ // Get the whole array if found
+ if (isset($GLOBALS['user_data'][$uid])) {
+ // Found, so return it
+ return $GLOBALS['user_data'][$uid];
+ } else {
+ // Return empty array
+ return array();
+ }
+}
+
+// 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']);
+}
+
+// Checks wether we are debugging template cache
+function isDebuggingTemplateCache () {
+ return (getConfig('DEBUG_TEMPLATE_CACHE') == 'Y');
+}
+
+// Wrapper for fetchUserData() and getUserData() calls
+function getFetchedUserData ($keyColumn, $userId, $valueColumn) {
+ // Default is 'guest'
+ $data = getMessage('USERNAME_GUEST');
+
+ // Can we fetch the user data?
+ if (($userId > 0) && (fetchUserData($userId, $keyColumn))) {
+ // Now get the data back
+ $data = getUserData($valueColumn);
+ } // END - if
+
+ // Return it
+ return $data;
+}
+
+// Wrapper for strpos() to ease porting from deprecated ereg() function
+function isInString ($needle, $haystack) {
+ return (strpos($haystack, $needle) !== false);
+}
+
+// Wrapper for strpos() to ease porting from deprecated eregi() function
+// This function is case-insensitive
+function isInStringIgnoreCase ($needle, $haystack) {
+ return (isInString(strtolower($haystack), strtolower($needle)));
+}
+