* -------------------------------------------------------------------- *
* 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";
} // 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()));
}
}
+}
+function getSearchFor()
+{
+ $searchFor[] = 'Revision';
+ $searchFor[] = 'Date';
+ $searchFor[] = 'Tag';
+ $searchFor[] = 'Author';
- // 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");
+ return $searchFor;
- // 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]);
+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();
+
+ 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