* -------------------------------------------------------------------- *
* Kurzbeschreibung : Viele Nicht-MySQL-Funktionen (auch Dateizugriff) *
* -------------------------------------------------------------------- *
- * *
+ * $Revision:: 856 $ *
+ * $Date:: 2009-03-06 20:24:32 +0100 (Fr, 06. Mär 2009) $ *
+ * $Tag:: 0.2.1-FINAL $ *
+ * $Author:: stelzi $ *
+ * 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 *
* For more information visit: http://www.mxchange.org *
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, *
* MA 02110-1301 USA *
************************************************************************/
-
// Some security stuff...
if (!defined('__SECURITY')) {
$INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4)."/security.php";
return false;
} // END - if
- // Test write-access
- return is_writeable($FQFN);
+ // Test write-access on directory
+ return is_writeable(dirname($FQFN));
}
// Output HTML code directly or "render" it. You addionally switch the new-line character off
LOAD_TEMPLATE("redirect_url", false, str_replace("&", "&", $URL));
LOAD_INC("inc/footer.php");
}
- exit;
+ shutdown();
}
// Wrapper for LOAD_URL but URL comes from a configuration entry
$request = "GET /" . trim($script) . " HTTP/1.1\r\n";
$request .= "Host: " . $host . "\r\n";
$request .= "Referer: " . constant('URL') . "/admin.php\r\n";
- $request .= "User-Agent: " . constant('TITLE') . "/" . constant('FULL_VERSION') . "\r\n";
+ if (defined('FULL_VERSION')) {
+ $request .= "User-Agent: " . constant('TITLE') . "/" . constant('FULL_VERSION') . "\r\n";
+ } else {
+ $request .= "User-Agent: " . constant('TITLE') . "/?.?.?\r\n";
+ }
$request .= "Content-Type: text/plain\r\n";
$request .= "Cache-Control: no-cache\r\n";
$request .= "Connection: Close\r\n\r\n";
LOAD_INC_ONCE("inc/footer.php");
// Exit explicitly
- exit;
+ shutdown();
}
// Display parsing time and number of SQL queries in footer
// Generates an error code from given account status
function GEN_ERROR_CODE_FROM_ACCOUNT_STATUS ($status) {
// Default error code if unknown account status
- $ERROR = constant('CODE_UNKNOWN_STATUS');
+ $ERROR = getCode('UNKNOWN_STATUS');
// Generate constant name
- $constantName = sprintf("CODE_ID_%s", $status);
+ $constantName = sprintf("ID_%s", $status);
// Is the constant there?
- if (defined($constantName)) {
+ if (isCodeSet($constantName)) {
// Then get it!
- $ERROR = constant($constantName);
+ $ERROR = getCode($constantName);
} else {
// Unknown status
DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Unknown error status %s detected.", $status));
} // END - if
}
+// Function to search for the last modifikated file
+function searchDirsRecoursive ($dir, &$last_changed) {
+ $ds = scandir($dir); // Needs adjustment for PHP < 5.0.0!!
+ foreach ($ds as $d) {
+ $f_name = $dir.'/'.$d; // makes a proper Filename
+ if (!preg_match('@(\.|\.\.|\.revision|\.svn|debug\.log|\.cache)$@',$d)) { // no . or .. or .revision or .svn in the filename
+ $is_dir = is_dir($f_name);
+ if (!$is_dir) { // $f_name is a filename and no directory
+ $time = filemtime($f_name);
+ if ($last_changed['time'] < $time) { // This file is newer as the file before
+ $last_changed['path_name'] = $f_name;
+ $last_changed['time'] = $time;
+ }
+ } elseif ($is_dir) { // $f_name is a directory so also crawl into this directory
+ searchDirsRecoursive($f_name, $last_changed);
+ }
+ }
+ }
+}
+
+
// "Getter" for revision/version data
-function getActualVersion ($type = 0) {
+function getActualVersion ($type = 'Revision') {
// By default nothing is new... ;-)
$new = false;
- // FQFN of revision file
- $FQFN = sprintf("%sinc/cache/.revision", constant('PATH'));
+ if (EXT_IS_ACTIVE("cache")) {
+ // Check if $_GET['check_revision_data'] is setted (switch for manually rewrite the .revision-File)
+ if (isset($_GET['check_revision_data']) && $_GET['check_revision_data'] == 'yes') $new = true;
+ if (!isset($GLOBALS['cache_array']['revision'][$type])
+ || count($GLOBALS['cache_array']['revision']) < 3
+ || !$GLOBALS['cache_instance']->loadCacheFile("revision")) $new = true;
+
+ if ($new){
+
+ $GLOBALS['cache_instance']->destroyCacheFile(); // @TODO isn't it better to do $GLOBALS['cache_instance']->destroyCacheFile('revision')?
+
+ // @TODO shouldn't do the unset and the reloading $GLOBALS['cache_instance']->destroyCacheFile() Or a new methode like forceCacheReload('revision')?
+ unset($GLOBALS['cache_array']['revision']);
+ // Reload load_cach-revison.php
+ LOAD_INC('inc/loader/load_cache-revision.php');
+ }
+
+ return $GLOBALS['cache_array']['revision'][$type][0];
- // 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));
+ // old Version without ext-cache aktive (depricated ?)
- // Is the content valid?
- if ((!is_array($ins_vers)) || (count($ins_vers) <= 0) || (!isset($ins_vers[$type])) || ($ins_vers[0]) == "new") {
- // File needs update!
+ // FQFN of revision file
+ $FQFN = sprintf("%sinc/cache/.revision", constant('PATH'));
+
+ // Check if $_GET['check_revision_data'] is setted (switch for manually rewrite the .revision-File)
+ if (isset($_GET['check_revision_data']) && $_GET['check_revision_data'] == 'yes') {
$new = true;
+
} else {
- // Revision-File has valid Data and isn't 'new' so return the Rev-Number
- return trim($ins_vers[$type]);
+ // 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])) || (trim($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
+ $ttype = array_search ($type,array_keys(getSearchFor()));
+ if ($ttype || $ttype != null) return trim($ins_vers[$ttype]);
+ else return false;
+ }
+ }
+ }
+ // Has it been updated?
+ if ($new === true) {
+ WRITE_FILE($FQFN, implode("\n", getAkt_vers()));
}
}
+}
- // 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");
+function getSearchFor () {
+ $searchFor[] = 'Revision';
+ $searchFor[] = 'Date';
+ $searchFor[] = 'Tag';
+ $searchFor[] = 'Author';
- // Prepare content
- $akt_vers[] = trim($version[10]);
- $akt_vers[] = trim($version[9]);
- $akt_vers[] = trim($version[8]);
+ return $searchFor;
+}
- // Write file
- WRITE_FILE($FQFN, implode("\n", $akt_vers));
+function getAkt_vers () {
+ $next_dir = '.';
+ $last_changed['path_name'] = '';
+ $last_changed['time'] = 0;
+ $akt_vers = array();
+ searchDirsRecoursive($next_dir, $last_changed); //Searches all Files and there date of the last modifikation and puts the newest File in $last_changed.
+ $last_file = READ_FILE($last_changed['path_name']);
+ $ergeb = 0;
+ $searchFor = getSearchFor();
- // Return requested content
- return trim($akt_vers[$type]);
+ foreach ($searchFor as $search) {
+ $ergeb += preg_match('@\$'.$search.'(:|::) (.*) \$@U', $last_file, $t);
+ if (isset($t[2])) $akt_vers[$search] = trim($t[2]);
}
+
+ if ($ergeb && $ergeb >= 3) {
+ // Prepare content
+ preg_match('@(....)-(..)-(..) (..):(..):(..)@',$akt_vers['Date'],$match_d);
+ $akt_vers['Date'] = mktime($match_d[4],$match_d[5],$match_d[6],$match_d[2],$match_d[3],$match_d[1]);
+ if (isset($akt_vers['Author']) && $akt_vers['Author'] != 'quix0r') $akt_vers['Tag'] .= '-'.strtoupper($akt_vers['Author']);
+ } else {
+ // no valid Data from the last modificated file so read the Revision from the Server. FallbackSolution!! Could be removed I think.
+ $version = GET_URL("check-updates3.php");
+ // Prepare content
+ $akt_vers['Revision'] = trim($version[10]);
+ $akt_vers['Date'] = trim($version[9]);
+ $akt_vers['Tag'] = trim($version[8]);
+ }
+ return $akt_vers;
}
+
// Loads an include file and logs any missing files for debug purposes
function LOAD_INC ($INC) {
// Add the path. This is why we need a trailing slash in config.php
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'):
+ case getCode('LOGOUT_DONE') : $msg = getMessage('LOGOUT_DONE'); break;
+ case getCode('LOGOUT_FAILED') : $msg = "<span class=\"guest_failed\">{--LOGOUT_FAILED--}</span>"; break;
+ case getCode('DATA_INVALID') : $msg = getMessage('MAIL_DATA_INVALID'); break;
+ case getCode('POSSIBLE_INVALID') : $msg = getMessage('MAIL_POSSIBLE_INVALID'); break;
+ case getCode('ACCOUNT_LOCKED') : $msg = getMessage('MEMBER_ACCOUNT_LOCKED_UNC'); break;
+ case getCode('USER_404') : $msg = getMessage('USER_NOT_FOUND'); break;
+ case getCode('STATS_404') : $msg = getMessage('MAIL_STATS_404'); break;
+ case getCode('ALREADY_CONFIRMED'): $msg = getMessage('MAIL_ALREADY_CONFIRMED'); break;
+
+ case getCode('ERROR_MAILID'):
if (EXT_IS_ACTIVE($ext, true)) {
$msg = getMessage('ERROR_CONFIRMING_MAIL');
} else {
}
break;
- case constant('CODE_EXTENSION_PROBLEM'):
+ case getCode('EXTENSION_PROBLEM'):
if (REQUEST_ISSET_GET(('ext'))) {
$msg = sprintf(getMessage('EXTENSION_PROBLEM_EXT_INACTIVE'), REQUEST_GET(('ext')));
} else {
}
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;
+ case getCode('COOKIES_DISABLED') : $msg = getMessage('LOGIN_NO_COOKIES'); break;
+ case getCode('BEG_SAME_AS_OWN') : $msg = getMessage('BEG_SAME_UID_AS_OWN'); break;
+ case getCode('LOGIN_FAILED') : $msg = getMessage('LOGIN_FAILED_GENERAL'); break;
default : $msg = sprintf(getMessage('UNKNOWN_MAILID_CODE'), $code); break;
} // END - switch
// 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);
+ LOAD_URL("modules.php?module=index&msg=".getCode('EXTENSION_PROBLEM')."&ext=".$ext_name);
} // END - if
}
$admin = "<span class=\"admin_note\">{--ADMIN_NO_ADMIN_ASSIGNED--}</span>";
// Zero? = Not assigned
- if ($aid == "0") {
+ if ($aid > 0) {
// Load admin's login
$login = GET_ADMIN_LOGIN($aid);
if ($login != "***") {
// Check wether we are installing
function isInstalling () {
- return (isset($GLOBALS['mxchange_installing']));
+ $installing = ((isset($GLOBALS['mxchange_installing'])) || (REQUEST_ISSET_GET('installing')));
+ //* DEBUG: */ var_dump($installing);
+ return $installing;
}
// Check wether this script is installed
return ((isset($GLOBALS['cache_instance'])) && (is_object($GLOBALS['cache_instance'])));
}
+// Our shutdown-function
+function shutdown () {
+ // Call the filter chain 'shutdown'
+ runFilterChain('shutdown', null, false);
+
+ if (SQL_IS_LINK_UP()) {
+ // Close link
+ SQL_CLOSE(__FILE__, __LINE__);
+ } elseif (!isInstalling()) {
+ // No database link
+ addFatalMessage(__FILE__, __LINE__, getMessage('NO_DB_LINK_SHUTDOWN'));
+ }
+
+ // Stop executing here
+ exit;
+}
+
//////////////////////////////////////////////////
// AUTOMATICALLY RE-GENERATED MISSING FUNCTIONS //
//////////////////////////////////////////////////