+ // Unknown status
+ DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Unknown error status %s detected.", $status));
+ }
+
+ // Return error code
+ return $errorCode;
+}
+
+// Function to search for the last modifified file
+function searchDirsRecursive ($dir, &$last_changed) {
+ // Get dir as array
+ //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):dir=" . $dir."<br />\n";
+ // Does it match what we are looking for? (We skip a lot files already!)
+ // RegexPattern to exclude ., .., .revision, .svn, debug.log or .cache in the filenames
+ $excludePattern = '@(\.revision|debug\.log|\.cache|config\.php)$@';
+ $ds = getArrayFromDirectory($dir, '', true, false, array(), '.php', $excludePattern);
+ //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):ds[]=".count($ds)."<br />\n";
+
+ // Walk through all entries
+ foreach ($ds as $d) {
+ // Generate proper FQFN
+ $FQFN = str_replace('//', '/', constant('PATH') . $dir. '/'. $d);
+
+ // Is it a file and readable?
+ //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):FQFN={$FQFN}<br />\n";
+ if (isDirectory($FQFN)) {
+ // $FQFN is a directory so also crawl into this directory
+ $newDir = $d;
+ if (!empty($dir)) $newDir = $dir . '/'. $d;
+ //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):DESCENT: " . $newDir."<br />\n";
+ searchDirsRecursive($newDir, $last_changed);
+ } elseif (isFileReadable($FQFN)) {
+ // $FQFN is a filename and no directory
+ $time = filemtime($FQFN);
+ //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>):File: " . $d." found. (".($last_changed['time'] - $time).")<br />\n";
+ if ($last_changed['time'] < $time) {
+ // This file is newer as the file before
+ //* DEBUG: */ print __FUNCTION__."(<font color=\"#0000aa\">".__LINE__."</font>) - NEWER!<br />\n";
+ $last_changed['path_name'] = $FQFN;
+ $last_changed['time'] = $time;
+ } // END - if
+ }
+ } // END - foreach
+}
+
+// "Getter" for revision/version data
+function getActualVersion ($type = 'Revision') {
+ // By default nothing is new... ;-)
+ $new = false;
+
+ if (EXT_IS_ACTIVE('cache')) {
+ // Check if REQUEST_GET('check_revision_data') is setted (switch for manually rewrite the .revision-File)
+ if (REQUEST_ISSET_GET('check_revision_data') && REQUEST_GET('check_revision_data') == 'yes') {
+ // Force rebuild by URL parameter
+ $new = true;
+ } elseif ((
+ !isset($GLOBALS['cache_array']['revision'][$type])
+ ) || (
+ count($GLOBALS['cache_array']['revision']) < 3
+ ) || (
+ !$GLOBALS['cache_instance']->loadCacheFile('revision')
+ )) {
+ // Out-dated cache
+ $new = true;
+ } // END - if
+
+ // Is the cache file outdated/invalid?
+ if ($new === true) {
+ // Reload the cache file
+ $GLOBALS['cache_instance']->loadCacheFile('revision');
+
+ // Destroy cache file
+ $GLOBALS['cache_instance']->destroyCacheFile(false, true);
+
+ // @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
+ loadInclude('inc/loader/load_cache-revision.php');
+
+ // Abort here
+ return;
+ } // END - if
+
+ // Return found value
+ return $GLOBALS['cache_array']['revision'][$type][0];
+ } else {
+ // Old Version without ext-cache active (deprecated ?)
+
+ // FQFN of revision file
+ $FQFN = sprintf("%sinc/cache/.revision", constant('PATH'));
+
+ // Check if REQUEST_GET('check_revision_data') is setted (switch for manually rewrite the .revision-File)
+ if ((REQUEST_ISSET_GET('check_revision_data')) && (REQUEST_GET('check_revision_data') == 'yes')) {
+ // Forced rebuild of .revision file
+ $new = true;
+ } else {
+ // Check for revision file
+ if (!isFileReadable($FQFN)) {
+ // Not found, so we need to create it
+ $new = true;
+ } else {
+ // Revision file found
+ $ins_vers = explode("\n", readFromFile($FQFN));
+
+ // Get array for mapping information
+ $mapper = array_flip(getSearchFor());
+ //* DEBUG: */ print("<pre>".print_r($mapper, true).print_r($ins_vers, true)."</pre>");
+
+ // Is the content valid?
+ if ((!is_array($ins_vers)) || (count($ins_vers) <= 0) || (!isset($ins_vers[$mapper[$type]])) || (trim($ins_vers[$mapper[$type]]) == '') || ($ins_vers[0]) == "new") {
+ // File needs update!
+ $new = true;
+ } else {
+ // Return found value
+ return trim($ins_vers[$mapper[$type]]);
+ }
+ }
+ }
+
+ // Has it been updated?
+ if ($new === true) {
+ writeToFile($FQFN, implode("\n", getArrayFromActualVersion()));
+ } // END - if