<?php

eval( ' function xoops_module_install_'.$mydirname.'( $module ) { return links_oninstall_base( $module , "'.$mydirname.'" ) ; } ' ) ;

if( ! function_exists( 'links_oninstall_base' ) ) {

	function links_oninstall_base( $module , $mydirname )
	{
		global $ret ; // TODO :-D

		// for ICMS ?
		if (defined('ICMS_URL') && ini_get('max_execution_time') < 70) {
			ini_set('max_execution_time', 120);
		}

//		require_once dirname(__FILE__) . '/include/functions.php';

		if( ! is_array( $ret ) )
			$ret = array() ;

	$db =& icms_db_Factory::instance() ;
	$mid = $module->getVar('mid') ;


		// configs
		$check_sql = "SHOW COLUMNS FROM " . $db->prefix("config") . " LIKE 'conf_title'";
		if (($result = $db->query($check_sql)) && ($myrow = $db->fetchArray($result)) && @$myrow['Type'] == 'varchar(30)') {
			$db->queryF("ALTER TABLE " . $db->prefix("config") . " MODIFY `conf_title` varchar(255) NOT NULL default '', MODIFY `conf_desc` varchar(255) NOT NULL default ''");
		}

		// TABLES (loading mysql.sql)
		$sql_file_path = dirname(__FILE__) .'/sql/mysql.sql' ;
		$prefix_mod = $db->prefix() . '_' . $mydirname ;
		if( file_exists( $sql_file_path ) ) {
			$ret[] = "SQL file found at <b>".htmlspecialchars($sql_file_path)."</b>.<br /> Creating tables...";

			if( file_exists( XOOPS_ROOT_PATH.'/class/database/oldsqlutility.php' ) ) {
				include_once XOOPS_ROOT_PATH.'/class/database/oldsqlutility.php' ;
				$sqlutil = new OldSqlUtility ;
			//	$sqlutil =& new OldSqlUtility ;
			} else {
				include_once XOOPS_ROOT_PATH.'/class/database/sqlutility.php' ;
				$sqlutil = new icms_db_legacy_mysql_Utility;
			//	$sqlutil =& new SqlUtility ;
			}

			$sql_query = trim( file_get_contents( $sql_file_path ) ) ;
			$sqlutil->splitMySqlFile( $pieces , $sql_query ) ;
			$created_tables = array() ;
			foreach( $pieces as $piece ) {
				$prefixed_query = $sqlutil->prefixQuery( $piece , $prefix_mod ) ;
				if( ! $prefixed_query ) {
					$ret[] = "Invalid SQL <b>".htmlspecialchars($piece)."</b><br />";
					return false ;
				}
				if( ! $db->query( $prefixed_query[0] ) ) {
					$ret[] = '<strong>'.htmlspecialchars( $db->error() ).'</strong><br />' ;
					//var_dump( $db->error() ) ;
					return false ;
				} else {
					if( ! in_array( $prefixed_query[4] , $created_tables ) ) {
						$ret[] = 'Table <strong>'.htmlspecialchars($prefix_mod.'_'.$prefixed_query[4]).'</strong> created.<br />';
						$created_tables[] = $prefixed_query[4];
					} else {
						$ret[] = 'Data inserted to table <strong>'.htmlspecialchars($prefix_mod.'_'.$prefixed_query[4]).'</strong>.</br />';
					}
				}
			}
		}

		// TEMPLATES
		$tplfile_handler =& icms::handler('icms_view_template_file');
		$tpl_path = dirname(__FILE__).'/templates' ;
		if( $handler = @opendir( $tpl_path . '/' ) ) {
			while( ( $file = readdir( $handler ) ) !== false ) {
				if( substr( $file , 0 , 1 ) == '.' ) continue ;
				$file_path = $tpl_path . '/' . $file ;
				if( is_file( $file_path ) && substr( $file , -5 ) == '.html' ) {
					$mtime = intval( @filemtime( $file_path ) ) ;
					$tplfile =& $tplfile_handler->create() ;
					$tplfile->setVar( 'tpl_source' , file_get_contents( $file_path ) , true ) ;
					$tplfile->setVar( 'tpl_refid' , $mid ) ;
					$tplfile->setVar( 'tpl_tplset' , 'default' ) ;
					$tplfile->setVar( 'tpl_file' , $mydirname . '_' . $file ) ;
					$tplfile->setVar( 'tpl_desc' , '' , true ) ;
					$tplfile->setVar( 'tpl_module' , $mydirname ) ;
					$tplfile->setVar( 'tpl_lastmodified' , $mtime ) ;
					$tplfile->setVar( 'tpl_lastimported' , 0 ) ;
					$tplfile->setVar( 'tpl_type' , 'module' ) ;
					if( ! $tplfile_handler->insert( $tplfile ) ) {
						$ret[] = '<span style="color:#ff0000;">ERROR: Could not insert template <b>'.htmlspecialchars($mydirname.'_'.$file).'</b> to the database.</span><br />';
					} else {
						$tplid = $tplfile->getVar( 'tpl_id' ) ;
						$ret[] = 'Template <b>'.htmlspecialchars($mydirname.'_'.$file).'</b> added to the database. (ID: <b>'.$tplid.'</b>)<br />';
						// generate compiled file
						if( !icms_view_Tpl::template_touch( $tplid ) ) {
							$ret[] = '<span style="color:#ff0000;">ERROR: Failed compiling template <b>'.htmlspecialchars($mydirname.'_'.$file).'</b>.</span><br />';
						} else {
							$ret[] = 'Template <b>'.htmlspecialchars($mydirname.'_'.$file).'</b> compiled.</span><br />';
						}
					}
				}
			}
			closedir( $handler ) ;
		}

		include_once XOOPS_ROOT_PATH.'/class/xoopsblock.php' ;
		icms_view_Tpl::template_clear_module_cache( $mid ) ;

	// BLOCKS
	$tpl_path = dirname(__FILE__).'/templates/blocks' ;
	if( $handler = @opendir( $tpl_path . '/' ) ) {
		while( ( $file = readdir( $handler ) ) !== false ) {
			if( substr( $file , 0 , 1 ) == '.' ) continue ;
			$file_path = $tpl_path . '/' . $file ;
			$tpl_source = file_get_contents( $file_path );
			if( is_file( $file_path ) && substr( $file , -5 ) == '.html' ) {
				$mtime = intval( @filemtime( $file_path ) ) ;
				$tpl_file = $mydirname . '_' . $file;
				$sql = "SELECT tpl_id, tpl_refid FROM ".$db->prefix('tplfile')." WHERE tpl_module='$mydirname' AND tpl_file='".$db->quoteString($tpl_file)."'";
				list($tpl_id, $block_id) = $db->fetchRow($db->query($sql));
				if( empty($tpl_id) && empty($block_id)){
					$blocks_info = $module->getInfo('blocks');
					$show_func = '';
					foreach($blocks_info as $oneblock){
						if($tpl_file == $oneblock['template']){
							$show_func = $oneblock['show_func'];
							break;
						}
					}
					if( $show_func != ''){
						$sql = sprintf("SELECT bid FROM %s WHERE dirname=%s AND show_func=%s", $db->prefix("newblocks"), $db->quoteString($mydirname), $db->quoteString($show_func) ) ;
						list($block_id) = $db->fetchRow($db->query($sql));
						if($block_id){
							$tplfile =& $tplfile_handler->create();
							$tplfile->setVar('tpl_module', $mydirname);
							$tplfile->setVar('tpl_refid', $block_id);
							$tplfile->setVar('tpl_source', $tpl_source, true);
							$tplfile->setVar('tpl_tplset', 'default');
							$tplfile->setVar('tpl_file', $tpl_file, true);
							$tplfile->setVar('tpl_type', 'block');
							$tplfile->setVar('tpl_lastimported', 0);
							$tplfile->setVar('tpl_lastmodified', time());
							$tplfile->setVar('tpl_desc', '', true);
							if (!$tplfile_handler->insert($tplfile)) {
								$ret[] = '&nbsp;&nbsp;<span style="color:#ff0000;">ERROR: Could not insert template <b>'.$tpl_file.'</b> to the database.</span><br />';
							} else {
								$newid = $tplfile->getVar('tpl_id');
								$ret[] = '&nbsp;&nbsp;Template <b>'.$tpl_file.'</b> added to the database.<br />';
								if ($xoopsConfig['template_set'] == 'default') {
									if (!icms_view_Tpl::template_touch($block_id)) {
										$ret[] = '&nbsp;&nbsp;<span style="color:#ff0000;">ERROR: Template <b>'.$tpl_file.'</b> recompile failed.</span><br />';
									} else {
										$ret[] = '&nbsp;&nbsp;Template <b>'.$tpl_file.'</b> recompiled.<br />';
									}
								}
							}
							$sql = "UPDATE ".$db->prefix("newblocks")." SET template='".$db->quoteString($tpl_file)."', last_modified=".time()." WHERE bid=".$block_id;
							if( !$result = $db->query($sql) ) {
								$ret[] = '<span style="color:#ff0000;">ERROR: Could not insert template <b>'.htmlspecialchars($mydirname.'_'.$file).'</b> to the database.</span><br />';
							}else{
								$ret[] = 'Template <b>'.htmlspecialchars($mydirname.'_'.$file).'</b> added to the database. (ID: <b>'.$newid.'</b>)<br />';
							}
						}
					}
				}
				elseif (!empty($tpl_id) && isset($tpl_source) && $tpl_source != '') {
					$sql = "SELECT COUNT(*) FROM ".$db->prefix('tplsource')." WHERE tpl_id='$tpl_id'";
					list($count) = $$db->fetchRow($xoopsDB->query($sql));
					if($count==0){
						$sql = sprintf("INSERT INTO %s (tpl_id, tpl_source) VALUES (%u, %s)", $db->prefix('tplsource'), $tpl_id, $db->quoteString($tpl_source));
					}else{
						$sql = "UPDATE ".$db->prefix("tplsource")." SET tpl_source='".$db->quoteString($tpl_source)."' WHERE tpl_id=".$tpl_id;
					}
					if( !$result = $db->query($sql) ) {
						$ret[] = '<span style="color:#ff0000;">ERROR: Could not insert template <b>'.htmlspecialchars($mydirname.'_'.$file).'</b> to the database.</span><br />';
					} else {
						$ret[] = 'Template <b>'.htmlspecialchars($mydirname.'_'.$file).'</b> added to the database. (ID: <b>'.$tpl_id.'</b>)<br />';
						// generate compiled file
						include_once XOOPS_ROOT_PATH.'/class/xoopsblock.php';
//						include_once XOOPS_ROOT_PATH.'/class/template.php';
						if( ! icms_view_Tpl::template_touch( $tpl_id ) ) {
							$ret[] = '<span style="color:#ff0000;">ERROR: Failed compiling template <b>'.htmlspecialchars($mydirname.'_'.$file).'</b>.</span><br />';
						} else {
							$ret[] = 'Template <b>'.htmlspecialchars($mydirname.'_'.$file).'</b> compiled.</span><br />';
						}
					}
					$sql = "UPDATE ".$db->prefix("newblocks")." SET template='".$db->quoteString($tpl_file)."', last_modified=".time()." WHERE bid=".$block_id;
					if( !$result = $db->query($sql) ) {
						$ret[] = '<span style="color:#ff0000;">ERROR: Could not insert template <b>'.htmlspecialchars($mydirname.'_'.$file).'</b> to the database.</span><br />';
					}else{
						$ret[] = 'Template <b>'.htmlspecialchars($mydirname.'_'.$file).'</b> added to the database. (ID: <b>'.$tpl_id.'</b>)<br />';
					}
				}
			}
		}
		closedir( $handler ) ;
		$ret[] = 'Now end block template area' . '<br />';
	}

		return true ;
	}

	function links_message_append_oninstall( &$controller , &$log )
	{
		if( is_array( @$GLOBALS['ret'] ) ) {
			foreach( $GLOBALS['ret'] as $message ) {
				$controller->mLog->add( $message ) ;
			}
		}
	}
}

