*/
if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
require_once(DOKU_PLUGIN.'admin.php');
require_once(DOKU_INC.'inc/init.php');
define('CACHEREVISIONSERASER2_VER','1.6.7');
define('CACHEREVISIONSERASER2_CONFIGREVISION',2);
define('CACHEREVISIONSERASER2_DATE','2010-11-22');
/**
 * All DokuWiki plugins to extend the admin function
 * need to inherit from this class
 * 
 * The class name needs to be consistent with the name of the plugin page
 */
class admin_plugin_cacherevisionseraser2 extends AdminPlugin {
	var $cachedir = null;
	var $revisdir = null;
	var $pagesdir = null;
	var $metadir = null;
	var $configs = null;
	var $filedels = 0;
	var $dirdels = 0;
	/**
	* Constructor
	*/
	function __construct(){
		$this->setupLocale();
		@include(dirname(__FILE__).'/configs.php');
	}
	/**
	* Return plug-in info
	*/
	function getInfo(){
		return array(
			'author' => 'JustBurn',
			'email'  => 'justburner@armail.pt',
			'date'   => CACHEREVISIONSERASER2_DATE,
			'name'   => html_entity_decode($this->lang['title']),
			'desc'   => html_entity_decode($this->lang['desc']),
			'url'    => 'http://wiki.splitbrain.org/plugin:cacherevisionseraser',
		);
	}
	/**
	* Return prompt for admin menu
	*/
	function getMenuText($language) {
		return $this->getLang('menu') . ' (v' . CACHEREVISIONSERASER2_VER . ')';
	}
	/**
	* Return sort order for position in admin menu
	*/
	function getMenuSort() {
		if ($this->configs['menusort'] == null) return 67;
		else return $this->configs['menusort'];
	}
	/**
	* Handle user request
	*/
	function handle() {
		global $conf;
		$this->cachedir = $conf['cachedir'];	// This configuration item is deprecated
		$this->revisdir = $conf['olddir'];		// This configuration item is deprecated
		$this->pagesdir = $conf['datadir'];		// This configuration item is deprecated
		if ($this->pagesdir == null) $this->pagesdir = $conf['savedir']; // Olders versions compability?
		$this->metadir = $conf['metadir'];		// This configuration item is deprecated
		if ($this->metadir == null) $this->metadir = $conf['meta'];      // Olders versions compability?
		$this->locksdir = $conf['lockdir'];		// This configuration item is deprecated
		if ($this->locksdir == null) $this->locksdir = $this->pagesdir;  // Olders versions compability?
		$this->lang_id = $conf['lang'];
		if (!($this->configs['confrevision'] > 0)) $this->configs['confrevision'] = 0;
		$this->locktime = $conf['locktime'];
	}
	/**
	* Get request variable
	*/
	function get_req($reqvar, $defaultval) {
		if (isset($_REQUEST[$reqvar])) {
			return $_REQUEST[$reqvar];
		} else {
			return $defaultval;
		}
	}
	/**
	* Compare request variable
	*/
	function cmp_req($reqvar, $strtocmp, $onequal, $ondifferent) {
		if (isset($_REQUEST[$reqvar])) {
			return strcmp($_REQUEST[$reqvar], $strtocmp) ? $ondifferent : $onequal;
		} else {
			return $ondifferent;
		}
	}
	/**
	* Output appropriate html
	*/
	function html() {
		global $ID;
		global $lang;
		global $cacherevercfg;
		global $conf;
		$cmd = $this->get_req('cmd', 'main');
		// Plug-in title
		ptln('
'.$this->lang['title'].' '.$this->lang['version'].' '.CACHEREVISIONSERASER2_VER.'
');
		// Make sure outputinfo level is valid
		$theoutputinfo = intval($this->get_req('level_outputinfo', 0));
		if ($this->configs['allow_outputinfo']) {
			if (($theoutputinfo < 0) || ($theoutputinfo > 2)) $theoutputinfo = 0;
		} else {
			$theoutputinfo = intval($this->configs['level_outputinfo']);
		}
		// Debugging only
		if ($this->configs['debuglist']) {
			ptln('');
			ptln('| Debugging information | 
|---|
');
			ptln('| ');
			ptln('config revision: '.$this->configs['confrevision'].' (require '.CACHEREVISIONSERASER2_CONFIGREVISION.') ');
			ptln('admin menu position: '.$this->configs['menusort'].'
 ');
			ptln('language (C/R E.): '.$this->lang['language'].'
 ');
			ptln('cachedir: '.$this->cachedir.'
 ');
			ptln('revisdir: '.$this->revisdir.'
 ');
			ptln('pagesdir: '.$this->pagesdir.'
 ');
			ptln('metadir: '.$this->metadir.'
 ');
			ptln('locksdir: '.$this->locksdir.'
 ');
			ptln('language id (Doku): '.$this->lang_id.'
 ');
			ptln('
 | 
|---|
');
		}
		// Plug-in processing...
		$this->filedels = 0;
		$this->dirdels = 0;
		if ($this->analyzecrpt($cmd))
		if ((strcmp($cmd, 'erasecache') == 0) && ($this->configs['allow_allcachedel'])) {
			// Erase cache...
			ptln('');
			ptln('| ');
			clearstatcache();
			$succop = true;
			$params = $this->cmp_req('delfl_UNK', 'yes', 0x01, 0) + $this->cmp_req('del_indexing', 'yes', 0x02, 0) + $this->cmp_req('delfl_i', 'yes', 0x04, 0) + $this->cmp_req('delfl_xhtml', 'yes', 0x08, 0) + $this->cmp_req('delfl_js', 'yes', 0x10, 0) + $this->cmp_req('delfl_css', 'yes', 0x20, 0) + $this->cmp_req('delfl_mediaP', 'yes', 0x40, 0);
			$prmask = ($this->configs['cache_delext_UNK']==0 ? 0 : 0x01) + ($this->configs['cache_del_indexing']==0 ? 0 : 0x02) + ($this->configs['cache_delext_i']==0 ? 0 : 0x04) + ($this->configs['cache_delext_xhtml']==0 ? 0 : 0x08) + ($this->configs['cache_delext_js']==0 ? 0 : 0x10) + ($this->configs['cache_delext_css']==0 ? 0 : 0x20) + ($this->configs['cache_delext_mediaP']==0 ? 0 : 0x40);
			if ($this->cmp_req('del_oldpagelocks', 'yes', true, false) && ($this->configs['cache_del_oldlocks'])) {
				if ($this->rmeverything_oldlockpages($this->locksdir, $this->locksdir, $theoutputinfo) == false) $succop = false;
			}
			if ($this->rmeverything_cache($this->cachedir, $this->cachedir, $params & $prmask, $theoutputinfo) == false) $succop = false;
			ptln(''.$this->lang['numfilesdel'].' '.$this->filedels.' '.$this->lang['numdirsdel'].' '.$this->dirdels.'
 ');
			ptln('
 | 
|---|
');
			if ($succop)
				ptln('| '.$this->lang['successcache'].' | 
|---|
');
			else
				ptln('| '.$this->lang['failedcache'].' | 
|---|
');
			ptln('
');
			ptln('');
		} else if ((strcmp($cmd, 'eraseallrevisions') == 0) && ($this->configs['allow_allrevisdel'])) {
			// Erase old revisions...
			ptln('');
			ptln('| ');
			clearstatcache();
			$succop = true;
			if ($this->cmp_req('del_metafiles', 'yes', true, false) && ($this->configs['cache_del_metafiles'])) {
				if ($this->rmeverything_meta($this->metadir, $this->metadir, $theoutputinfo) == false) $succop = false;
			}
			if ($this->cmp_req('del_revisfiles', 'yes', true, false) && ($this->configs['cache_del_revisfiles'])) {
				if ($this->rmeverything_revis($this->revisdir, $this->revisdir, $theoutputinfo) == false) $succop == false;
			}
			ptln(''.$this->lang['numfilesdel'].' '.$this->filedels.' '.$this->lang['numdirsdel'].' '.$this->dirdels.'
 ');
			ptln('
 | 
|---|
');
			if ($succop)
				ptln('| '.$this->lang['successrevisions'].' | 
|---|
');
			else
				ptln('| '.$this->lang['failedrevisions'].' | 
|---|
');
			ptln('
');
			ptln('');
		} else {
			// Controls
			ptln('');
			ptln('| ');
			if ($this->configs['allow_allcachedel']) {
				ptln($this->lang['cachedesc'].' | 
|---|
| ');
				ptln('');
			} else {
				ptln($this->lang['cachedisabled'].'
 ');
			}
			ptln('
 | 
|---|
| 
 | 
');
			ptln('| ');
			if ($this->configs['allow_allrevisdel']) {
				ptln($this->lang['revisionsdesc'].' | 
|---|
| ');
				ptln('');
			} else {
				ptln($this->lang['revisdisabled'].'
 ');
			}
			ptln('
 | 
|---|
');
		}
		ptln('
'.$this->lang['searchyounewversionurl'].' [English only]
');
	}
	/**
	* Delete all files into cache directory
	*/
	function rmeverything_cache($fileglob, $basedir, $params, $outputinfo)
	{
		$fileglob2 = substr($fileglob, strlen($basedir));
		if (strpos($fileglob, '*') !== false) {
			foreach (glob($fileglob) as $filename) {
				$this->rmeverything_cache($filename, $basedir, $params, $outputinfo);
			}
		} 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 (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)) {
				if ($outputinfo > 0) ptln(''.$this->lang['deletefile'].''.(($outputinfo==2) ? ' ('.$this->lang['cache_word'].') ' : ' ').'"'.$fileglob2.'".
');
				$this->filedels++;
				return true;
			} else {
				if ($outputinfo > 0) ptln(''.$this->lang['deletefileerr'].''.(($outputinfo==2) ? ' ('.$this->lang['cache_word'].') ' : ' ').'"'.$fileglob2.'".
');
				return false;
			}
		} else if (is_dir($fileglob)) {
			$ok = $this->rmeverything_cache($fileglob.'/*', $basedir, $params, $outputinfo);
			if (!$ok) return false;
			if (strcmp($fileglob, $basedir) == 0) return true;
			if (@rmdir($fileglob)) {
				if ($outputinfo > 0) ptln(''.$this->lang['deletedir'].''.(($outputinfo==2) ? ' ('.$this->lang['cache_word'].') ' : ' ').'"'.$fileglob2.'".
');
				$this->dirdels++;
				return true;
			} else {
				return true;
			}
		} else {
			// Woha, this shouldn't never happen...
			if ($outputinfo > 0) ptln(''.$this->lang['pathclasserror'].''.(($outputinfo==2) ? ' ('.$this->lang['cache_word'].') ' : ' ').'"'.$fileglob2.'".
');
			return false;
		}
		return true;
	}
	/**
	* Delete all old lost locks into "data/pages" or "data/locks" directory
	*/
	function rmeverything_oldlockpages($fileglob, $basedir, $outputinfo)
	{
		$fileglob2 = substr($fileglob, strlen($basedir));
		if (strpos($fileglob, '*') !== false) {
			foreach (glob($fileglob) as $filename) {
				$this->rmeverything_oldlockpages($filename, $basedir, $outputinfo);
			}
		} 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 (time()-@filemtime($fileglob) < $this->locktime) {
				if ($outputinfo > 0) ptln(''.$this->lang['lockexpirein'].' '.($this->locktime-(time()-@filemtime($fileglob))).' '.$this->lang['seconds'].' -> "'.$fileglob2.'".
');
				return true;
			}
			if (@unlink($fileglob)) {
				if ($outputinfo > 0) ptln(''.$this->lang['deletefile'].''.(($outputinfo==2) ? ' ('.$this->lang['lock_word'].') ' : ' ').'"'.$fileglob2.'".
');
				$this->filedels++;
				return true;
			} else {
				if ($outputinfo > 0) ptln(''.$this->lang['deletefileerr'].''.(($outputinfo==2) ? ' ('.$this->lang['lock_word'].') ' : ' ').'"'.$fileglob2.'".
');
				return false;
			}
		} else if (is_dir($fileglob)) {
			$ok = $this->rmeverything_oldlockpages($fileglob.'/*', $basedir, $outputinfo);
			if (!$ok) return false;
			if (strcmp($fileglob, $basedir) == 0) return true;
			if (@rmdir($fileglob)) {
				if ($outputinfo > 0) ptln(''.$this->lang['deletedir'].''.(($outputinfo==2) ? ' ('.$this->lang['lock_word'].') ' : ' ').'"'.$fileglob2.'".
');
				$this->dirdels++;
				return true;
			} else {
				return true;
			}
		} else {
			// Woha, this shouldn't never happen...
			if ($outputinfo > 0) ptln(''.$this->lang['pathclasserror'].''.(($outputinfo==2) ? ' ('.$this->lang['lock_word'].') ' : ' ').'"'.$fileglob2.'".
');
			return false;
		}
		return true;
	}
	/**
	* Delete all files into meta directory
	*/
	function rmeverything_meta($fileglob, $basedir, $outputinfo)
	{
		$fileglob2 = substr($fileglob, strlen($basedir));
		if (strpos($fileglob, '*') !== false) {
			foreach (glob($fileglob) as $filename) {
				$this->rmeverything_meta($filename, $basedir, $outputinfo);
			}
		} else if (is_file($fileglob)) {
			if (strcmp($fileglob2, '/_dummy') == 0) return true;
			$pathinfor = pathinfo($fileglob2);                                              // For compatibility with the following:
			if (strcmp(strtolower($pathinfor['extension']), 'comments') == 0) return true;  //  Discussion Plugin
			if (strcmp(strtolower($pathinfor['extension']), 'doodle') == 0) return true;    //  Doodle & Doodle2 Plugins
			if (@unlink($fileglob)) {
				if ($outputinfo > 0) ptln(''.$this->lang['deletefile'].''.(($outputinfo==2) ? ' ('.$this->lang['meta_word'].') ' : ' ').'"'.$fileglob2.'".
');
				$this->filedels++;
				return true;
			} else {
				if ($outputinfo > 0) ptln(''.$this->lang['deletefileerr'].''.(($outputinfo==2) ? ' ('.$this->lang['meta_word'].') ' : ' ').'"'.$fileglob2.'".
');
				return false;
			}
		} else if (is_dir($fileglob)) {
			$ok = $this->rmeverything_meta($fileglob.'/*', $basedir, $outputinfo);
			if (!$ok) return false;
			if (strcmp($fileglob, $basedir) == 0) return true;
			if (@rmdir($fileglob)) {
				if ($outputinfo > 0) ptln(''.$this->lang['deletedir'].''.(($outputinfo==2) ? ' ('.$this->lang['meta_word'].') ' : ' ').'"'.$fileglob2.'".
');
				$this->dirdels++;
				return true;
			} else {
				if ($outputinfo > 0) ptln(''.$this->lang['deletedirerr'].''.(($outputinfo==2) ? ' ('.$this->lang['meta_word'].') ' : ' ').'"'.$fileglob2.'".
');
				return false;
			}
		} else {
			// Woha, this shouldn't never happen...
			if ($outputinfo > 0) ptln(''.$this->lang['pathclasserror'].''.(($outputinfo==2) ? ' ('.$this->lang['meta_word'].') ' : ' ').'"'.$fileglob2.'".
');
			return false;
		}
		return true;
	}
	/**
	* Delete all files into old revisions directory
	*/
	function rmeverything_revis($fileglob, $basedir, $outputinfo)
	{
		$fileglob2 = substr($fileglob, strlen($basedir));
		if (strpos($fileglob, '*') !== false) {
			foreach (glob($fileglob) as $filename) {
				$this->rmeverything_revis($filename, $basedir, $outputinfo);
			}
		} else if (is_file($fileglob)) {
			if (strcmp($fileglob2, '/_dummy') == 0) return true;
			if (@unlink($fileglob)) {
				if ($outputinfo > 0) ptln(''.$this->lang['deletefile'].''.(($outputinfo==2) ? ' ('.$this->lang['revis_word'].') ' : ' ').'"'.$fileglob2.'".
');
				$this->filedels++;
				return true;
			} else {
				if ($outputinfo > 0) ptln(''.$this->lang['deletefileerr'].''.(($outputinfo==2) ? ' ('.$this->lang['revis_word'].') ' : ' ').'"'.$fileglob2.'".
');
				return false;
			}
		} else if (is_dir($fileglob)) {
			$ok = $this->rmeverything_revis($fileglob.'/*', $basedir, $outputinfo);
			if (!$ok) return false;
			if (strcmp($fileglob, $basedir) == 0) return true;
			if (@rmdir($fileglob)) {
				if ($outputinfo > 0) ptln(''.$this->lang['deletedir'].''.(($outputinfo==2) ? ' ('.$this->lang['revis_word'].') ' : ' ').'"'.$fileglob2.'".
');
				$this->dirdels++;
				return true;
			} else {
				if ($outputinfo > 0) ptln(''.$this->lang['deletedirerr'].''.(($outputinfo==2) ? ' ('.$this->lang['revis_word'].') ' : ' ').'"'.$fileglob2.'".
');
				return false;
			}
		} else {
			// Woha, this shouldn't never happen...
			if ($outputinfo > 0) ptln(''.$this->lang['pathclasserror'].''.(($outputinfo==2) ? ' ('.$this->lang['revis_word'].') ' : ' ').'"'.$fileglob2.'".
');
			return false;
		}
		return true;
	}
	/**
	* Routine to analyze configurations and directories
	*/
	function analyzecrpt($cmd)
	{
		global $ID;
		$analizysucessy = true;
		if ($this->configs['confrevision'] == 0) {
			ptln(''.$this->lang['analyze_confmissingfailed'].' (ERR: 1)
');
			$analizysucessy = false;
		}
		if (($this->configs['confrevision'] != CACHEREVISIONSERASER2_CONFIGREVISION) && ($analizysucessy)) {
			ptln(''.$this->lang['analyze_confrevisionfailed'].' (ERR: 2)
');
			$analizysucessy = false;
		}
		if ($analizysucessy == false) {
			if (strcmp($cmd, 'createconf') == 0) {
				$this->writeconfigs();
				ptln(''.$this->lang['analyze_creatingdefconfs']);
				if (file_exists(dirname(__FILE__).'/configs.php')) {
					ptln($this->lang['analyze_creatingdefconfs_o']);
				} else ptln($this->lang['analyze_creatingdefconfs_x']);
				ptln('
');
			} else {
				ptln('
');
			}
		}
		if (!is_dir($this->cachedir)) {
			ptln(''.$this->lang['analyze_cachedirfailed'].' (ERR: 3)
');
			$analizysucessy = false;
		}
		if (!is_dir($this->revisdir)) {
			ptln(''.$this->lang['analyze_revisdirfailed'].' (ERR: 4)
');
			$analizysucessy = false;
		}
		if (!is_dir($this->pagesdir)) {
			ptln(''.$this->lang['analyze_pagesdirfailed'].' (ERR: 5)
');
			$analizysucessy = false;
		}
		if (!is_dir($this->metadir)) {
			ptln(''.$this->lang['analyze_metadirfailed'].' (ERR: 6)
');
			$analizysucessy = false;
		}
		if (!is_dir($this->locksdir)) {
			ptln(''.$this->lang['analyze_locksdirfailed'].' (ERR: 7)
');
			$analizysucessy = false;
		}
		if ($analizysucessy == false) {
			ptln('
'.$this->lang['analyze_checkreadme'].'
');
		}
		return $analizysucessy;
	}
	/**
	* Routine to create "configs.php"
	*/
	function writeconfigs()
	{
		global $lang;
		$cahdelext_i = -2 + $this->cmp_req('delext_i_A', 'yes', 0, 2) + $this->cmp_req('delext_i_C', 'yes', 1, 0);
		$cahdelext_xhtml = -2 + $this->cmp_req('delext_xhtml_A', 'yes', 0, 2) + $this->cmp_req('delext_xhtml_C', 'yes', 1, 0);
		$cahdelext_js = -2 + $this->cmp_req('delext_js_A', 'yes', 0, 2) + $this->cmp_req('delext_js_C', 'yes', 1, 0);
		$cahdelext_css = -2 + $this->cmp_req('delext_css_A', 'yes', 0, 2) + $this->cmp_req('delext_css_C', 'yes', 1, 0);
		$cahdelext_mediaP = -2 + $this->cmp_req('delext_mediaP_A', 'yes', 0, 2) + $this->cmp_req('delext_mediaP_C', 'yes', 1, 0);
		$cahdelext_UNK = -2 + $this->cmp_req('delext_UNK_A', 'yes', 0, 2) + $this->cmp_req('delext_UNK_C', 'yes', 1, 0);
		$cahdel_oldlocks = -2 + $this->cmp_req('del_oldlock_A', 'yes', 0, 2) + $this->cmp_req('del_oldlock_C', 'yes', 1, 0);
		$cahdel_indexing = -2 + $this->cmp_req('del_indexing_A', 'yes', 0, 2) + $this->cmp_req('del_indexing_C', 'yes', 1, 0);
		$cahdel_metafiles = -2 + $this->cmp_req('del_meta_A', 'yes', 0, 2) + $this->cmp_req('del_meta_C', 'yes', 1, 0);
		$cahdel_revisfiles = -2 + $this->cmp_req('del_revis_A', 'yes', 0, 2) + $this->cmp_req('del_revis_C', 'yes', 1, 0);
		$wcnf = fopen(dirname(__FILE__).'/configs.php', 'w');
		fwrite($wcnf, "\n *\n *\n");
		fwrite($wcnf, " * Generated automatically by the plug-in, Cache/Revisions Eraser v" . CACHEREVISIONSERASER2_VER . "\n *\n */\n\n");
		fwrite($wcnf, '$this->configs[\'confrevision\'] = 2;' . "\n");
		if ((intval($this->get_req('menusort','67')) >= 0) && (intval($this->get_req('menusort','67')) <= 99))
			fwrite($wcnf, '$this->configs[\'menusort\'] = ' . intval($this->get_req('menusort','67')) . ";\n");
		else
			fwrite($wcnf, '$this->configs[\'menusort\'] = 67' . ";\n");
		fwrite($wcnf, '$this->configs[\'allow_allcachedel\'] = ' . $this->cmp_req('allow_allcachedel_E', 'yes', 'true', 'false') . ";\n");
		fwrite($wcnf, '$this->configs[\'allow_allrevisdel\'] = ' . $this->cmp_req('allow_allrevisdel_E', 'yes', 'true', 'false') . ";\n");
		fwrite($wcnf, '$this->configs[\'debuglist\'] = ' . $this->cmp_req('allow_debug_E', 'yes', 'true', 'false') . ";\n");
		fwrite($wcnf, '$this->configs[\'cache_delext_i\'] = ' . $cahdelext_i . ";\n");
		fwrite($wcnf, '$this->configs[\'cache_delext_xhtml\'] = ' . $cahdelext_xhtml . ";\n");
		fwrite($wcnf, '$this->configs[\'cache_delext_js\'] = ' . $cahdelext_js . ";\n");
		fwrite($wcnf, '$this->configs[\'cache_delext_css\'] = ' . $cahdelext_css . ";\n");
		fwrite($wcnf, '$this->configs[\'cache_delext_mediaP\'] = ' . $cahdelext_mediaP . ";\n");
		fwrite($wcnf, '$this->configs[\'cache_delext_UNK\'] = ' . $cahdelext_UNK . ";\n");
		fwrite($wcnf, '$this->configs[\'cache_del_oldlocks\'] = ' . $cahdel_oldlocks . ";\n");
		fwrite($wcnf, '$this->configs[\'cache_del_indexing\'] = ' . $cahdel_indexing . ";\n");
		fwrite($wcnf, '$this->configs[\'cache_del_metafiles\'] = ' . $cahdel_metafiles . ";\n");
		fwrite($wcnf, '$this->configs[\'cache_del_revisfiles\'] = ' . $cahdel_revisfiles . ";\n");
		fwrite($wcnf, '$this->configs[\'allow_outputinfo\'] = ' . $this->cmp_req('allow_outputinfo', 'yes', 'true', 'false') . ";\n");
		if ((intval($this->get_req('level_outputinfo','0')) >= 0) && (intval($this->get_req('level_outputinfo','0')) <= 2))
			fwrite($wcnf, '$this->configs[\'level_outputinfo\'] = ' . intval($this->get_req('level_outputinfo','0')) . ";\n");
		else
			fwrite($wcnf, '$this->configs[\'level_outputinfo\'] = 0'.";\n");
		fwrite($wcnf, "\n\n?>");
		fclose($wcnf);
	}
}
?>