resetFilename(); echo "
Done!"; } /* * Return the most recent modification time of anything in the folder. * @param $folder The folder, relative to the site root * @param $extensionList An option array of file extensions to limit the search to */ static function folderModTime($folder, $extensionList = null, $recursiveCall = false) { //$cacheID = $folder . ',' . implode(',', $extensionList); //if(!$recursiveCall && self::$cache_folderModTime[$cacheID]) return self::$cache_folderModTime[$cacheID]; $modTime = 0; if(!Filesystem::isAbsolute($folder)) $folder = Director::baseFolder() . '/' . $folder; $items = scandir($folder); foreach($items as $item) { if($item[0] != '.') { // Recurse into folders if(is_dir("$folder/$item")) { $modTime = max($modTime, self::folderModTime("$folder/$item", $extensionList, true)); // Check files } else { if($extensionList) $extension = strtolower(substr($item,strrpos($item,'.')+1)); if(!$extensionList || in_array($extension, $extensionList)) { $modTime = max($modTime, filemtime("$folder/$item")); } } } } //if(!$recursiveCall) self::$cache_folderModTime[$cacheID] = $modTime; return $modTime; } /** * Returns true if the given filename is an absolute file reference. * Works on Linux and Windows */ static function isAbsolute($filename) { if($_ENV['OS'] == "Windows_NT" || $_SERVER['WINDIR']) return $filename[1] == ':' && $filename[2] == '/'; else return $filename[0] == '/'; } /** * This function ensures the file table is correct with the files in the assets folder. */ static function sync() { singleton('Folder')->syncChildren(); $finished = false; while(!$finished) { $orphans = DB::query("SELECT C.ID FROM File AS C LEFT JOIN File AS P ON C.ParentID = P.ID WHERE P.ID IS NULL AND C.ParentID > 0"); $finished = true; if($orphans) foreach($orphans as $orphan) { $finished = false; // Delete the database record but leave the filesystem alone $file = DataObject::get_by_id("File", $orphan['ID']); $file->deleteDatabaseOnly(); unset($file); } } } } ?>