<?php	

  global $filedels, $dirdels;
  $cachedir = DOKU_INC. str_replace("./", "", $conf['savedir'])."/cache";
  $time_older = time() - $conf['cachetime']; // purge only files older than cachetime

  $params = 0x01 + 0x02 + 0x04 + 0x08 + 0x10 + 0x20 + 0x40;
  
  $filedels = 0;
  $dirdels = 0;
	rmeverything_cache($cachedir, $cachedir, $params, $time_older);
  logMessage(" Cache:: files deleted: ".$filedels.", folders deleted: ".$dirdels);
  
  $lockdir  = DOKU_INC. str_replace("./", "", $conf['savedir'])."/locks"; 
  $time_older =  time() - $conf['locktime']; // purge only files older than locktime
  $filedels = 0;
  $dirdels = 0;
	removelock($lockdir, $lockdir, $time_older);
  logMessage(" Lock:: files deleted: ".$filedels.", folders deleted: ".$dirdels);


  /**
	* delete files into cache directory older $time_older
	*/
	function rmeverything_cache($fileglob, $basedir, $params, $time_older) {
    global $filedels, $dirdels;
    
		$fileglob2 = substr($fileglob, strlen($basedir));
		if (strpos($fileglob, '*') !== false) {
			foreach (glob($fileglob) as $filename) {
				rmeverything_cache($filename, $basedir, $params, $time_older);
			}
		} else if (is_file($fileglob)) {
			if (strcmp($fileglob2, '/_dummy') == 0) return true;
			$pathinfor = pathinfo($fileglob2);
			if (strcmp($basedir, dirname($fileglob)) == 0) {
				if (!($params & 0x02)) return true;
			} else {
        if ($pathinfor['mtime'] > $time_older) return true;
				if (substr_count(strtolower($pathinfor['basename']), '.media.') > 0) {
					if (!($params & 0x40)) return true;
				} else if (strcmp(strtolower($pathinfor['extension']), 'i') == 0) {
					if (!($params & 0x04)) return true;
				} else if (strcmp(strtolower($pathinfor['extension']), 'xhtml') == 0) {
					if (!($params & 0x08)) return true;
				} else if (strcmp(strtolower($pathinfor['extension']), 'js') == 0) {
					if (!($params & 0x10)) return true;
				} else if (strcmp(strtolower($pathinfor['extension']), 'css') == 0) {
					if (!($params & 0x20)) return true;
				} else {
					if (!($params & 0x01)) return true;
				}
			}
			if (@unlink($fileglob)) {
				$filedels++;
				return true;
			} else {
				return false;
			}
		} else if (is_dir($fileglob)) {
			$ok = rmeverything_cache($fileglob.'/*', $basedir, $params, $time_older);
			if (!$ok) return false;
			if (strcmp($fileglob, $basedir) == 0) return true;
			if (@rmdir($fileglob)) {
				$dirdels++;
				return true;
			} else {
				return true;
			}
		} else {
			return false;
		}
		return true;
	}


	/**
	* remove stale lock files
	*/
	function removelock($fileglob, $basedir, $time_older) {
    global $filedels, $dirdels;
    global $conf;
    
		$fileglob2 = substr($fileglob, strlen($basedir));
		if (strpos($fileglob, '*') !== false) {
			foreach (glob($fileglob) as $filename) {
				removelock($filename, $basedir, $time_older);
			}
		} else if (is_file($fileglob)) {
			if (strcmp($fileglob2, '/_dummy') == 0) return true;
			$pathinfor = pathinfo($fileglob2);
			if (strcmp(strtolower($pathinfor['extension']), 'lock') != 0) return true;
      if (@filemtime($fileglob) > $time_older) return true;
			if (@unlink($fileglob)) {
				$filedels++;
				return true;
			} else {
				return false;
			}
		} else if (is_dir($fileglob)) {
			$ok = removelock($fileglob.'/*', $basedir, $time_older);
			if (!$ok) return false;
			if (strcmp($fileglob, $basedir) == 0) return true;
			if (@rmdir($fileglob)) {
				$dirdels++;
				return true;
			} else {
				return true;
			}
		} else {
			return false;
		}
		return true;
	}
  
?>