<?php
class upgrade_impcms05 {
	var $usedFiles = array ();
	function isApplied() {
		return ($this->check_conf_config());
	}
	function apply() {
		$this->apply_alter_tables();
		$this->apply_conf_configcategory();
		$this->apply_conf_config();
		$this->apply_ml_config();
		$this->blocks_engine_upgrade();
		//$this->apply_new_blocks();
		$this->apply_templates();
		return ($this->cleaning_write_folders());
	}
	function cleaning_write_folders() {
		$dir = array();
		$dir['templates_c'] = XOOPS_ROOT_PATH."/templates_c/";
		$dir['cache'] = XOOPS_ROOT_PATH."/cache/";

		foreach ($dir as $d)
		{
			$dd = opendir($d);
			while($file = readdir($dd))
			{
		 		if(is_file($d.$file) && ($file != 'index.html' && $file != 'php.ini' && $file != '.htaccess'))
				{
		  			unlink($d.$file);
				}
			}
			closedir($dd);
		}
			return true;
	}
	function apply_conf_configcategory() {
		$db = $GLOBALS['xoopsDB'];
		if (getDbValue($db,'configcategory','confcat_id',' confcat_name="_MD_AM_MULTILANGUAGE"') != 0){return true;}
		return $this->query(" INSERT INTO " . $db->prefix("configcategory") . " (confcat_id,confcat_name) VALUES ('','_MD_AM_MULTILANGUAGE')");
	}
	function apply_new_blocks() {
		$db = $GLOBALS['xoopsDB'];
		if (getDbValue($db,'newblocks','bid',' show_func="b_system_multilanguage_show"') != 0){return true;}
		$this->query(" INSERT INTO " . $db->prefix("newblocks") . " VALUES ('', 1, 0, '', 'Language Selection', 'Language Selection', '', 1, 0, 0, 'S', 'H', 1, 'system', 'system_blocks.php', 'b_system_multilanguage_show', '', 'system_block_multilanguage.html', 0, " . time() . ")");
		$new_block_id = $db->getInsertId();
		$this->query(" UPDATE " . $db->prefix("newblocks") . " SET func_num = " . $new_block_id . " WHERE bid=" . $new_block_id);
		$this->query(" INSERT INTO " . $db->prefix("tplfile") . " VALUES ('', " . $new_block_id . ", 'system', 'default', 'system_block_multilanguage.html', 'Displays image links to change the site language', " . time() . ", " . time() . ", 'block');");
		$new_tplfile_id = $db->getInsertId();
		$new_tpl_source = '<div align="center">\n	<{$block.ml_tag}>\n</div>';
		$this->query(" INSERT INTO " . $db->prefix("tplsource") . " VALUES (" . $new_tplfile_id . ", '" . $new_tpl_source . "');");
		$this->query(" INSERT INTO " . $db->prefix("block_module_link") . " VALUES (" . $new_block_id . ", 0);");
		$this->query(" INSERT INTO " . $db->prefix("group_permission") . " VALUES ('', 1, " . $new_block_id . ", 1, 'block_read');");
		$this->query(" INSERT INTO " . $db->prefix("group_permission") . " VALUES ('', 2, " . $new_block_id . ", 1, 'block_read');");
		$this->query(" INSERT INTO " . $db->prefix("group_permission") . " VALUES ('', 3, " . $new_block_id . ", 1, 'block_read');");
		return true;
	}
	function blocks_engine_upgrade() {
		echo '<h2>Updating blocks engine </h2>';
		if (!$this->table_exists('block_positions')) {
			$xoopsDB = $GLOBALS['xoopsDB'];
			$query = "CREATE TABLE `" . $xoopsDB->prefix('block_positions') . "` (
				  id int(11) NOT NULL auto_increment,
				  pname varchar(30) default '',
				  title varchar(90) NOT NULL default '',
				  description text,
				  block_default int(1) NOT NULL default '0',
				  block_type varchar(1) NOT NULL default 'L',
				  PRIMARY KEY  (`id`)
				  ) TYPE=MyISAM;";
			$this->query($query);
			$pos = array ();
			$pos[] = "INSERT INTO `" . $xoopsDB->prefix('block_positions') . "` VALUES (1,'canvas_left','_AM_SBLEFT',NULL,1,'L');";
			$pos[] = "INSERT INTO `" . $xoopsDB->prefix('block_positions') . "` VALUES (2,'canvas_right','_AM_SBRIGHT',NULL,1,'L');";
			$pos[] = "INSERT INTO `" . $xoopsDB->prefix('block_positions') . "` VALUES (3,'page_topleft','_AM_CBLEFT',NULL,1,'C');";
			$pos[] = "INSERT INTO `" . $xoopsDB->prefix('block_positions') . "` VALUES (4,'page_topcenter','_AM_CBCENTER',NULL,1,'C');";
			$pos[] = "INSERT INTO `" . $xoopsDB->prefix('block_positions') . "` VALUES (5,'page_topright','_AM_CBRIGHT',NULL,1,'C');";
			$pos[] = "INSERT INTO `" . $xoopsDB->prefix('block_positions') . "` VALUES (6,'page_bottomleft','_AM_CBBOTTOMLEFT',NULL,1,'C');";
			$pos[] = "INSERT INTO `" . $xoopsDB->prefix('block_positions') . "` VALUES (7,'page_bottomcenter','_AM_CBBOTTOM',NULL,1,'C');";
			$pos[] = "INSERT INTO `" . $xoopsDB->prefix('block_positions') . "` VALUES (8,'page_bottomright','_AM_CBBOTTOMRIGHT',NULL,1,'C');";
			foreach ($pos as $p) {
				$this->query($p);
			}
			$curr_block_schema = array ();
			$curr_block_schema["XOOPS_SIDEBLOCK_LEFT"] = 0;
			$curr_block_schema["XOOPS_SIDEBLOCK_RIGHT"] = 1;
			$curr_block_schema["XOOPS_SIDEBLOCK_BOTH"] = 2;
			$curr_block_schema["XOOPS_CENTERBLOCK_LEFT"] = 3;
			$curr_block_schema["XOOPS_CENTERBLOCK_RIGHT"] = 4;
			$curr_block_schema["XOOPS_CENTERBLOCK_CENTER"] = 5;
			$curr_block_schema["XOOPS_CENTERBLOCK_ALL"] = 6;
			$curr_block_schema["XOOPS_CENTERBLOCK_BOTTOMLEFT"] = 7;
			$curr_block_schema["XOOPS_CENTERBLOCK_BOTTOMRIGHT"] = 8;
			$curr_block_schema["XOOPS_CENTERBLOCK_BOTTOM"] = 9;
			$curr_block_schema_id = array ();

			foreach ($curr_block_schema as $k => $v) {
				$sql = 'SELECT bid FROM ' . $xoopsDB->prefix('newblocks') . ' WHERE side = "' . $v . '"';
				echo "<li>" . $sql . "</li>";
				$result = $xoopsDB->query($sql);
				$curr_block_schema_id[$k] = array ();
				while (list ($bid) = $xoopsDB->fetchRow($result)) {
					$curr_block_schema_id[$k][] = $bid;
				}
			}
			echo '<h2>Relating old blocks schema with the new and updating data.</h2>';
			$err = 0;
			foreach ($curr_block_schema_id as $k => $v) {
				echo '<li>Position constant: ' . $k . '</li>';
				foreach ($v as $bid) {
					echo '<li>bid = ' . $bid . ' - old side = ' . $curr_block_schema[$k] . ' - new side = ' . constant($k) . '</li>';
					$sql = 'UPDATE ' . $xoopsDB->prefix('newblocks') . ' SET side = "' . constant($k) . '" WHERE bid = ' . $bid;
					$this->query($sql);
				}
			}
		}
		return true;
	}
	/**
	 * Verify that a mysql table exists
	 *
	 * @package News
	 * @author Herv� Thouzard (www.herve-thouzard.com)
	 * @copyright (c) The Xoops Project - www.xoops.org
	*/
	function table_exists($tablename) {
		global $xoopsDB;
		$query = "SHOW TABLES LIKE '" . $xoopsDB->prefix($tablename) . "'";
		$result = $xoopsDB->queryF($query);
		return ($xoopsDB->getRowsNum($result) > 0);
	}
	function check_file_patch() {
		/* $path = XOOPS_ROOT_PATH . '/class/auth';
		$lines = file( "$path/auth_provisionning.php");
		foreach ( $lines as $line ) {
			if ( strpos( $line, "ldap_provisionning_upd" ) !== false ) {
				// Patch found: do not apply again
				return true;
			}
		} */
		return true;
	}
	function check_conf_config() {
		$db = $GLOBALS['xoopsDB'];
		$value = getDbValue($db, 'config', 'conf_id', "`conf_name` = 'rank_width' AND `conf_catid` = " . XOOPS_CONF_USER);
		return (bool) ($value);
	}
	function query($sql) {
		//echo "<li>" . $sql . "</li>";
		$db = $GLOBALS['xoopsDB'];
		if (!($ret = $db->queryF($sql))) {
			echo "<li style='font-weight: bold; color: red;'>" . $db->error() . "</li>";
		}
	}
	function apply_alter_tables() {
		$db = $GLOBALS['xoopsDB'];
		$this->fields = array (
			"config" => array (
				"conf_desc" => "varchar(100)"
			),

		);
		foreach ($this->fields as $table => $data) {
			foreach ($data as $field => $property) {
				$sql = "ALTER TABLE " . $db->prefix($table) . " CHANGE `$field` `$field` $property";
				$this->query($sql);
			}
		}
		return true;
	}
	function apply_ml_config() {
		$db = $GLOBALS['xoopsDB'];
		// Insert config values
		$table = $db->prefix('config');
		$data = array (
			'ml_enable' => "'_MD_AM_ML_ENABLE', '0', '_MD_AM_ML_ENABLEDSC', 'yesno', 'int', 0",
			'ml_tags' => "'_MD_AM_ML_TAGS', 'en,fr', '_MD_AM_ML_TAGSDSC', 'textbox', 'text', 5",
			'ml_names' => "'_MD_AM_ML_NAMES', 'english,french', '_MD_AM_ML_NAMESDSC', 'textbox', 'text', 10",
			'ml_captions' => "'_MD_AM_ML_CAPTIONS', 'English,Francais', '_MD_AM_ML_CAPTIONSDSC', 'textbox', 'text', 15",
			'ml_charset' => "'_MD_AM_ML_CHARSET', 'UTF-8,ISO-8859-15', '_MD_AM_ML_CHARSETDSC', 'textbox', 'text', 16",
			);
		reset($data);
		foreach ($data as $name => $values) {
			if (!getDbValue($db, 'config', 'conf_id', "`conf_modid`=0 AND `conf_catid`=8 AND `conf_name`='$name'")) {
				$this->query("INSERT INTO `$table` (conf_modid,conf_catid,conf_name,conf_title,conf_value,conf_desc,conf_formtype,conf_valuetype,conf_order) VALUES ( 0,8,'$name',$values)");
			}
		}
		return true;
	}
	function apply_conf_config() {
		$db = $GLOBALS['xoopsDB'];
		// Insert config values
		$table = $db->prefix('config');
		$data = array (
			'rank_width' => "'_MD_AM_RANKW', '120', '_MD_AM_RANKWDSC', 'textbox', 'int', 21",
			'rank_height' => "'_MD_AM_RANKH', '120', '_MD_AM_RANKHDSC', 'textbox', 'int', 21",
			'rank_maxsize' => "'_MD_AM_RANKMAX', '35000', '_MD_AM_RANKMAXDSC', 'textbox', 'int', 21",
			'remember_me' => "'_MD_AM_REMEMBERME', '0', '_MD_AM_REMEMBERMEDSC', 'yesno', 'int', 29",
			'priv_dpolicy' => "'_MD_AM_PRIVDPOLICY', 1, '_MD_AM_PRIVDPOLICYDSC', 'yesno', 'int', 31",
			'priv_policy' => "'_MD_AM_PRIVPOLICY', '" . addslashes(_UPGRADE_PRIVPOLICY
		) . "', '_MD_AM_PRIVPOLICYDSC', 'textarea', 'text', 32");
		reset($data);
		foreach ($data as $name => $values) {
			if (!getDbValue($db, 'config', 'conf_id', "`conf_modid`=0 AND `conf_catid`=2 AND `conf_name`='$name'")) {
				$this->query("INSERT INTO `$table` (conf_modid,conf_catid,conf_name,conf_title,conf_value,conf_desc,conf_formtype,conf_valuetype,conf_order) VALUES ( 0,2,'$name',$values)");
			}
		}
		return true;
	}

	function apply_templates(){
		$db = $GLOBALS['xoopsDB'];
		$table = $db->prefix('tplfile');
		$table1 = $db->prefix('tplsource');
		$tpl_files = array(
			'system_error.html'=>'Template for handling HTTP errors',
			'system_privpolicy.html'=>'Template for displaying site Privacy Policy'
		);
		foreach ($tpl_files as $tpl_file=>$desc) {
			if (!getDbValue($db,'tplfile','tpl_id',' tpl_file="'.$tpl_file.'"')) {
				if ($fp = fopen('../modules/system/templates/'.$tpl_file, 'r')) {
					$new_tpl_source = fread($fp, filesize('../modules/system/templates/'.$tpl_file));
					fclose($fp);
					$this->query(" INSERT INTO " . $table . " VALUES ('', 1, 'system', 'default', '".$tpl_file."', '".$desc."', ".time().", 0, 'module')");
					$new_tplfile_id = $db->getInsertId();
					$this->query(" INSERT INTO " . $table1 . " VALUES (" . $new_tplfile_id . ", '" . addslashes($new_tpl_source) . "');");
				}
			}
		}
		return true;
	}
}
$upg = new upgrade_impcms05();
return $upg;
?>