+// Clears the output buffer. This function does *NOT* backup sent content.
+function clearOutputBuffer () {
+ // Trigger an error on failure
+ if (!ob_end_clean()) {
+ // Failed!
+ debug_report_bug(__FUNCTION__.": Failed to clean output buffer.");
+ } // END - if
+}
+
+// "Getter" for revision/version data
+function getActualVersion ($type = 0) {
+ // By default nothing is new... ;-)
+ $new = false;
+
+ // FQFN of revision file
+ $FQFN = sprintf("%sinc/cache/.revision", constant('PATH'));
+
+ // Check for revision file
+ if (!FILE_READABLE($FQFN)) {
+ // Not found, so we need to create it
+ $new = true;
+ } else {
+ // Revision file found
+ $ins_vers = explode("\n", READ_FILE($FQFN));
+
+ // Is the content valid?
+ if ((!is_array($ins_vers)) || (count($ins_vers) <= 0) || (!isset($ins_vers[$type])) || ($ins_vers[0]) == "new") {
+ // File needs update!
+ $new = true;
+ } else {
+ // Revision-File has valid Data and isn't 'new' so return the Rev-Number
+ return trim($ins_vers[$type]);
+ }
+ }
+
+ // Has it been updated?
+ if ($new === true) {
+ // No Revision-File or has no valid Data so read the Revision from the Server.
+ $version = GET_URL("check-updates3.php");
+
+ // Prepare content
+ $akt_vers[] = trim($version[10]);
+ $akt_vers[] = trim($version[9]);
+ $akt_vers[] = trim($version[8]);
+
+ // Write file
+ WRITE_FILE($FQFN, implode("\n", $akt_vers));
+
+ // Return requested content
+ return trim($akt_vers[$type]);
+ }
+}
+
+// Loads an include file and logs any missing files for debug purposes
+function LOAD_INC ($INC) {
+ // Get constant path
+ $PATH = constant('PATH');
+
+ // Use the include file name directly
+ // @TODO Try to find all locations where an FQFN is given to these two
+ // @TODO functions and avoid it.
+ $FQFN = $INC;
+
+ // Check if PATH is in $INC
+ if (substr($INC, 0, $PATH) != $PATH) {
+ // Add it. This is why we need a trailing slash in config.php
+ $FQFN = $PATH . $INC;
+ } // END - if
+
+ // Is the include file there?
+ if (!FILE_READABLE($FQFN)) {
+ // Not there so log it
+ DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Include file %s not found.", basename($INC)));
+ return false;
+ } // END - if
+
+ // Try to load it
+ require($FQFN);
+}
+
+// Loads an include file once
+function LOAD_INC_ONCE ($INC) {
+ global $cacheArray;
+
+ // Is it not loaded?
+ if (!isset($cacheArray['load_once'][$INC])) {
+ // Then try to load it
+ LOAD_INC($INC);
+
+ // And mark it as loaded
+ $cacheArray['load_once'][$INC] = true;
+ } // END - if
+}
+
+// Back-ported from the new ship-simu engine. :-)
+function debug_get_printable_backtrace () {
+ // Init variable
+ $backtrace = "<ol>\n";
+
+ // Get and prepare backtrace for output
+ $backtraceArray = debug_backtrace();
+ foreach ($backtraceArray as $key => $trace) {
+ if (!isset($trace['file'])) $trace['file'] = __FILE__;
+ if (!isset($trace['line'])) $trace['line'] = __LINE__;
+ if (!isset($trace['args'])) $trace['args'] = array();
+ $backtrace .= "<li class=\"debug_list\"><span class=\"backtrace_file\">".basename($trace['file'])."</span>:".$trace['line'].", <span class=\"backtrace_function\">".$trace['function']."(".count($trace['args']).")</span></li>\n";
+ } // END - foreach
+
+ // Close it
+ $backtrace .= "</ol>\n";
+
+ // Return the backtrace
+ return $backtrace;
+}
+
+// Output a debug backtrace to the user
+function debug_report_bug ($message = "") {
+ // Init message
+ $debug = "";
+ // Is the optional message set?
+ if (!empty($message)) {
+ // Use and log it
+ $debug = sprintf("Note: %s<br />\n",
+ $message
+ );
+
+ // @TODO Add a little more infos here
+ DEBUG_LOG(__FUNCTION__, __LINE__, $message);
+ } // END - if
+
+ // Add output
+ $debug .= ("Please report this error at <a href=\"http://bugs.mxchange.org\" rel=\"external\" target=\"_blank\">bugs.mxchange.org</a>:<pre>");
+ $debug .= (debug_get_printable_backtrace());
+ $debug .= ("</pre>Thank you for your help finding bugs.");
+
+ // And abort here
+ die($debug);
+}
+
+// Generates a ***weak*** seed (taken from de.php.net/mt_srand)
+function generateSeed () {
+ list($usec, $sec) = explode(" ", microtime());
+ return ((float)$sec + (float)$usec);
+}
+
+// Converts a message code to a human-readable message
+function convertCodeToMessage ($code) {
+ $msg = "";
+ switch ($code) {
+ case constant('CODE_LOGOUT_DONE') : $msg = getMessage('LOGOUT_DONE'); break;
+ case constant('CODE_LOGOUT_FAILED') : $msg = "<span class=\"guest_failed\">{--LOGOUT_FAILED--}</span>"; break;
+ case constant('CODE_DATA_INVALID') : $msg = getMessage('MAIL_DATA_INVALID'); break;
+ case constant('CODE_POSSIBLE_INVALID') : $msg = getMessage('MAIL_POSSIBLE_INVALID'); break;
+ case constant('CODE_ACCOUNT_LOCKED') : $msg = getMessage('MEMBER_ACCOUNT_LOCKED_UNC'); break;
+ case constant('CODE_USER_404') : $msg = getMessage('USER_NOT_FOUND'); break;
+ case constant('CODE_STATS_404') : $msg = getMessage('MAIL_STATS_404'); break;
+ case constant('CODE_ALREADY_CONFIRMED'): $msg = getMessage('MAIL_ALREADY_CONFIRMED'); break;
+
+ case constant('CODE_ERROR_MAILID'):
+ if (EXT_IS_ACTIVE($ext, true)) {
+ $msg = getMessage('ERROR_CONFIRMING_MAIL');
+ } else {
+ $msg = sprintf(getMessage('EXTENSION_PROBLEM_NOT_INSTALLED'), "mailid");
+ }
+ break;
+
+ case constant('CODE_EXTENSION_PROBLEM'):
+ if (isset($_GET['ext'])) {
+ $msg = sprintf(getMessage('EXTENSION_PROBLEM_EXT_INACTIVE'), SQL_ESCAPE($_GET['ext']));
+ } else {
+ $msg = getMessage('EXTENSION_PROBLEM_UNSET_EXT');
+ }
+ break;
+
+ case constant('CODE_COOKIES_DISABLED') : $msg = getMessage('LOGIN_NO_COOKIES'); break;
+ case constant('CODE_BEG_SAME_AS_OWN') : $msg = getMessage('BEG_SAME_UID_AS_OWN'); break;
+ case constant('CODE_LOGIN_FAILED') : $msg = getMessage('LOGIN_FAILED_GENERAL'); break;
+ default : $msg = sprintf(getMessage('UNKNOWN_MAILID_CODE'), $code); break;
+ } // END - switch
+
+ // Return the message
+ return $msg;
+}
+
+// Checks wether the given extension is currently not installed
+// and redirects if so.
+function REDIRCT_ON_UNINSTALLED_EXTENSION ($ext_name) {
+ // Is the extension uninstalled/inactive?
+ if (!EXT_IS_ACTIVE($ext_name)) {
+ // Redirect to index
+ LOAD_URL("modules.php?module=index&msg=".constant('CODE_EXTENSION_PROBLEM')."&ext=".$ext_name);
+ } // END - if
+}
+
+// Generate a "link" for the given admin id (aid)
+function GENERATE_AID_LINK ($aid) {
+ // No assigned admin is default
+ $admin = "<div class=\"admin_note\">{--ADMIN_NO_ADMIN_ASSIGNED--}</div>";
+
+ // Zero? = Not assigned
+ if ($aid == "0") {
+ // Load admin's login
+ $login = GET_ADMIN_LOGIN($aid);
+ if ($login != "***") {
+ // Is the extension there?
+ if (EXT_IS_ACTIVE("admins")) {
+ // Admin found
+ $admin = "<a href=\"".ADMINS_CREATE_EMAIL_LINK(GET_ADMIN_EMAIL($aid))."\">".$login."</a>";
+ } else {
+ // Extension not found
+ $admin = sprintf(getMessage('EXTENSION_PROBLEM_NOT_INSTALLED'), "admins");
+ }
+ } else {
+ // Maybe deleted?
+ $admin = "<div class=\"admin_note\">".sprintf(getMessage('ADMIN_ID_404'), $aid)."</div>";
+ }
+ } // END - if
+
+ // Return result
+ return $admin;
+}
+
+// Checks wether an include file (non-FQFN better) is readable
+function INCLUDE_READABLE ($INC) {
+ // Construct FQFN
+ $FQFN = constant('PATH') . $INC;
+
+ // Is it readable?
+ return FILE_READABLE($FQFN);
+}
+