<?php
header("content-type:text/html;charset=utf-8");
define('iPATH',substr(dirname(strtr(__FILE__,'\\','/')), 0,-7)."/");
$IWEB_SHOP_IN = true;

$lockfile = iPATH.'./doc/install.lock';
if(file_exists($lockfile)) {
	echo '警告!您已经安装过iweb_sns<br>
		为了保证数据安全，请立即手动删除 install 文件夹<br>
		如果您想重新安装iweb_sns，请删除 doc/install.lock 文件，再运行安装文件';
	exit;
}

// 防止 PHP 5.1.x 使用时间函数报错
function_exists('date_default_timezone_set') && date_default_timezone_set('Etc/GMT+0');
unset($_ENV,$HTTP_ENV_VARS,$_REQUEST,$HTTP_POST_VARS,$HTTP_GET_VARS,$HTTP_POST_FILES,$HTTP_COOKIE_VARS,$HTTP_SESSION_VARS,$HTTP_SERVER_VARS);
unset($GLOBALS['_ENV'],$GLOBALS['HTTP_ENV_VARS'],$GLOBALS['_REQUEST'],$GLOBALS['HTTP_POST_VARS'],$GLOBALS['HTTP_GET_VARS'],$GLOBALS['HTTP_POST_FILES'],$GLOBALS['HTTP_COOKIE_VARS'],$GLOBALS['HTTP_SESSION_VARS'],$GLOBALS['HTTP_SERVER_VARS']);

if (ini_get('register_globals')){
	isset($_REQUEST['GLOBALS']) && die('发现试图覆盖 GLOBALS 的操作');
	// Variables that shouldn't be unset
	$noUnset = array('GLOBALS', '_GET', '_POST', '_COOKIE','_SERVER', '_ENV', '_FILES');
	$input = array_merge($_GET, $_POST, $_COOKIE, $_SERVER, $_FILES, isset($_SESSION) && is_array($_SESSION) ? $_SESSION : array());
	foreach ( $input as $k => $v ){
		if ( !in_array($k, $noUnset) && isset($GLOBALS[$k]) ) {
			$GLOBALS[$k] = NULL;
			unset($GLOBALS[$k]);
		}
	}
}
// Fix for IIS, which doesn't set REQUEST_URI
if ( empty( $_SERVER['REQUEST_URI'] ) ) {

	// IIS Mod-Rewrite
	if (isset($_SERVER['HTTP_X_ORIGINAL_URL'])) {
		$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_ORIGINAL_URL'];
	}
	// IIS Isapi_Rewrite
	else if (isset($_SERVER['HTTP_X_REWRITE_URL'])) {
		$_SERVER['REQUEST_URI'] = $_SERVER['HTTP_X_REWRITE_URL'];
	}else{
		// Some IIS + PHP configurations puts the script-name in the path-info (No need to append it twice)
		if ( $_SERVER['PATH_INFO'] == $_SERVER['SCRIPT_NAME'] )
			$_SERVER['REQUEST_URI'] = $_SERVER['PATH_INFO'];
		else
			$_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'] . $_SERVER['PATH_INFO'];

		// Append the query string if it exists and isn't null
		if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) {
			$_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
		}
	}
}

// Fix for PHP as CGI hosts that set SCRIPT_FILENAME to something ending in php.cgi for all requests
if ( isset($_SERVER['SCRIPT_FILENAME']) && ( strpos($_SERVER['SCRIPT_FILENAME'], 'php.cgi') == strlen($_SERVER['SCRIPT_FILENAME']) - 7 ) )
	$_SERVER['SCRIPT_FILENAME'] = $_SERVER['PATH_TRANSLATED'];

// Fix for Dreamhost and other PHP as CGI hosts
if (strpos($_SERVER['SCRIPT_NAME'], 'php.cgi') !== false)
	unset($_SERVER['PATH_INFO']);

// Fix empty PHP_SELF
$PHP_SELF = $_SERVER['PHP_SELF'];
if ( empty($PHP_SELF) ){
	$_SERVER['PHP_SELF'] = $PHP_SELF = preg_replace("/(\?.*)?$/",'',$_SERVER["REQUEST_URI"]);
}

if ( version_compare( '4.3', phpversion(), '>' ) ) {
	die( '您的服务器运行的 PHP 版本是' . phpversion() . ' 但 iweb_sns 要求至少 4.3。' );
}

if ( !extension_loaded('mysql')){
	die( '您的 PHP 安装看起来缺少 MySQL 数据库部分，这对 iweb_sns 来说是必须的。' );
}

require_once(iPATH.'install/common.php');
if ( get_magic_quotes_gpc() ) {
	$_GET    = stripslashes_deep($_GET);
	$_POST   = stripslashes_deep($_POST);
	$_COOKIE = stripslashes_deep($_COOKIE);
}
$_GET    = add_magic_quotes($_GET);
$_POST   = add_magic_quotes($_POST);
$_COOKIE = add_magic_quotes($_COOKIE);
$_SERVER = add_magic_quotes($_SERVER);

!$_SERVER['PHP_SELF'] && $_SERVER['PHP_SELF']=$_SERVER['SCRIPT_NAME'];
$_URI  = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
$isnsDIR=substr(dirname($_URI),0,-8);
$isnsURL= 'http://'.$_SERVER['HTTP_HOST'].$isnsDIR.'/';
$step = isset($_POST['step']) ? $_POST['step'] : '';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>iweb_sns - 安装向导</title>
<link href="install.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="main"><img src="iweb_sns_logo.png" />
  <form method="post" action="<?php echo $PHP_SELF;?>">
    <p class="title">iweb_sns 0.9 安装向导</p>
    <hr size="1" noshade="noshade" />
<?php
if (empty($step)) {
?><p class="title" align="center">iweb_sns使用许可协议</p>
    <div class="licenseblock">
      <div class="license">
        <p>版权所有 (c) 2009-2010，聚易技术团队（www.jooyea.net）<a href="http://www.jooyea.net" target="_blank">jooyea</a> 保留所有权利。 </p>
        <p>感谢您选择iwebAx系列软件产品。希望iweb SNS能为您的站点提供一个强大高效的社交网络平台解决方案。 </p>
        <p>iweb SNS是iwebAx系列软件产品家族中的一款，全称为iweb SNS社交网络平台软件。</p>
        <p>聚易技术团队是iwebAx系列软件产品的开发商，依法拥护iwebAx系列软件的产品著作权。使用者：无论个人或组织机构、用途如何（包括以学习和研究为目的）、是否盈利，均须仔细阅读本授权协议，只有在理解、同意、并遵守本协议的相关条款的条件，方可开始安装并使用本软件。</p>
        <p>本授权协议适用且仅适用于iweb SNS 0.x.x版本，聚易技术团队拥有对本授权协议的最终解释权。 </p>
        <h3>I 协议许可的权利</h3>
        <ol>
          <li>1. 您可以在遵守本授权协议的基础上，将iweb SNS软件应用于非商业用途。</li>
          <li>2. 您可以在协议规定的约束和限制范围内修改本软件的源代码或界面风格以适应您网站的要求。</li>
          <li>3. 您拥有使用本软件构建的社交网络站点中全部会员资料、文章及相关信息的所有权，并独立承担与文章内容的相关法律义务。 </li>
          <li>4. 获得Jooyea特许授权之后，您可以将本软件应用于商业用途。</li>
          <li>5. 特许授权用户享有反映和提出意见的权力，相关意见将被作为首要考虑，但没有一定被采纳的承诺或保证。</li>
        </ol>
        <h3>II 协议规定的约束和限制</h3>
        <ol>
          <li>1. 不允许使用本软件的源码以及在本软件源码的基础进行修改后与衍生的代码一起做为闭源的商业软件或程序发布销售。</li>
          <li>2. 未获特许授权之前，不得将本软件用于商业用途（包括但不限于企业网站、经营性网站、以营利为目或实现盈利的网站）。获得特许授权请登陆http://www.jooyea.net参考相关说明。</li>
          <li>3. 不得对本软件或与之关联的特许授权进行出租、出售、抵押或发放子许可证。 </li>
          <li>4. 禁止在iweb SNS的整体或任何部分基础上以发展任何派生版本、修改版本或第三方版本用于重新分发。  </li>
          <li>5. 无论如何，即无论用途如何、是否经过修改或美化、修改程度如何，只要使用iweb SNS的整体或部分，未经书面许可，系统页面页脚处的Powered by iweb SNS x.x和Jooye名称及其网站（http://www.jooyea.net）链接都必须保留，不能清除或修改。 </li>
          <li>6. 如果您未能遵守本协议的条款，您的授权将被终止，所被许可的权利将被收回，并承担相应法律责任。  </li>
        </ol>
        <h3>III 有限担保和免责声明</h3>
        <ol>
          <li>1. 本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的。 </li>
          <li>2. 用户出于自愿而使用本软件，使用之前必须了解使用本软存在的风险，我们不承诺任何形式的使用担保，也不承担任何因使用本软件而产生问题的相关责任。</li>
          <li>3. 我们不对使用本软件构建的站点中的文章或信息承担责任。 </li>
        </ol>
        <p>您一旦开始安装iweb SNS，即被视为完全理解并接受本协议的各项条款，协议许可范围以外的行为，将直接违反本授权协议并构成侵权，我们有权随时终止授权，责令停止损害，并保留追究相关责任的权力。
</p>
      </div>
    </div>
    <hr size="1" noshade="noshade" />
    <p align="center">
      <input type="hidden" name="step" value="1" />
      <input class="formbutton" type="submit" value="同 意" />
      <input type="button" class="formbutton" value="我不同意" onClick="window.close();"/>
    </p>
    <?php
}elseif ($step == '1') {
	$check=1;
	$no_write=$isnsDIR."程序根目录无法书写,请速将根目录属性设置为777";
	$correct='    ......<font style="color:green;">√</font>';
	$incorrect='<font style="color:red;">× 777属性检测不通过</font>';
	$uncorrect='<font style="color:red;">× 文件不存在请上传此文件</font>';
	$w_check=array(
		'uploadfiles',
		'uploadfiles/group_logo',
		'uploadfiles/photo_store',
		'uploadfiles/album',		
		'langpackage',
		'plugins',
		'skin',
		'templates',
		'models',
		'modules.php',
		'configuration.php',
		'doc/version.txt',
		'sysadmin/toolsBox',
		'index.php',
	);
	if($fp=@fopen(iPATH.'test.txt',"wb")){
		$state=$correct;
		fclose($fp);
	} else{
		$state=$incorrect.$no_write;
	}
	$_count=count($w_check);
	for($i=0; $i<$_count; $i++){
		if(!file_exists(iPATH.$w_check[$i])){
			$w_check[$i].= $uncorrect;$check=0;
		} elseif(is_writable(iPATH.$w_check[$i])){
			$w_check[$i].= $correct;
		} else{
			$w_check[$i].=$incorrect; $check=0; 
		}
	}
	$check && @unlink(iPATH.'test.txt');
?>
    <p class="title">第一步:安装须知</p>
    <p>欢迎使用 iweb_sns 0.9，本向导将帮助您将程序完整地安装在您的服务器内。<br />
      请您先确认以下安装配置: </p>
    <ul>
      <li>MySQL 主机名称/IP 地址 </li>
      <li>MySQL 用户名和密码 </li>
      <li>MySQL 数据库名称 </li>
    </ul>
    <p>如果您无法确认以上的配置信息, 请与您的服务商联系, 我们无法为您提供任何帮助.</p>
    <p class="title">第二步:检查必要目录和文件是否可写，如果发生错误，请更改文件/目录属性 777 </p>
    <ul>
      <?php foreach($w_check as $key=>$value){ ?>
      <li><?php echo $value; ?></li>
      <?php }?>
    </ul>
    <hr size="1" noshade="noshade" />
    <p align="right">
      <input type="hidden" name="step" value="2" />
      <?php 
	if(!$check){
	?>
      <input onclick='window.location="<?php echo $PHP_SELF;?>"' type='button' value='重新检查'>
      <?php }else{?>
      <input class="formbutton" type="submit" value="下一步" />
      <?php }?>
    </p>
    <?php
}elseif ($step == '2') {
?>
    <p class="title">第三步:配置数据库信息</p>
    <table width="100%" border="0" cellspacing="0" cellpadding="4">
      <tr>
        <td colspan="2"><span class="title">数据库信息</span></td>
      </tr>
      <tr>
        <td width="30%">服务器地址:</td>
        <td><input type="text" value="localhost" name="dbhost" class="formfield" >
          一般是 localhost</td>
      </tr>
      <tr>
        <td width="30%">数据库名:</td>
        <td><input name="dbname" type="text" class="formfield" value="iweb_sns">
          <input name="create" type="checkbox" id="create" value="1"/>
          创建新数据库</td>
      </tr>
      <tr>
        <td width="30%">数据库用户名:</td>
        <td><input name="dbuser" type="text" class="formfield" value="root"></td>
      </tr>
      <tr>
        <td width="30%">数据库用户密码:</td>
        <td><input type="password" value="" name="dbpw" class="formfield"></td>
      </tr>
      <tr>
        <td width="30%">数据表前缀:</td>
        <td><input type="text" value="isns_" name="tablepre" class="formfield"></td>
      </tr>
      <tr>
        <td colspan="2">数据表编码:utf-8</td>
    </table>
    <hr size="1" noshade="noshade" />
    <table width="100%" border="0" cellspacing="0" cellpadding="4">
      <tr>
        <td colspan="2"><span class="title">程序配置</span></td>
      </tr>
      <tr>
        <td width="30%">网站地址:<br />
          一般不用修改，向导自动获取</td>
        <td><input name="isnsurl" type="text" class="formfield" id="isnsurl" style="width:320px" value="<?php echo $isnsURL;?>" /></td>
      </tr>
    </table>
    <hr size="1" noshade="noshade" />
    <table width="100%" border="0" cellspacing="0" cellpadding="4">
      <tr>
        <td colspan="2"><span class="title">管理配置</span></td>
      </tr>
      <tr>
        <td width="30%">管理员账号:</td>
        <td><input type="text" value="admin" name="admin" class="formfield" /></td>
      </tr>
      <tr>
        <td width="30%">管理员密码:</td>
        <td><input type="password" name="password" class="formfield" />
          请设置密码</td>
      </tr>
    </table>
    <br />
    <hr size="1" noshade="noshade" />
    <p align="right">
      <input type="hidden" name="step" value="3" />
      <input class="formbutton" type="button" value="上一步" onclick="history.back(1)" />
      <input class="formbutton" type="submit" value="下一步" />
    </p>
    <?php
} elseif ($step == '3') {
	if(trim($_POST['dbname']) == "" || trim($_POST['dbhost']) == "" || trim($_POST['dbuser']) == "" ){
?>
    <p>请返回并确认所有选项均已填写.</p>
    <hr size="1" noshade="noshade" />
    <p align="right">
      <input class="formbutton" type="button" value="上一步" onclick="history.back(1)" />
    </p>
    <?php
	} elseif(!@mysql_connect($_POST['dbhost'],$_POST['dbuser'],$_POST['dbpw'])) {
?>
    <p>数据库不能连接.</p>
    <hr size="1" noshade="noshade" />
    <p align="right">
      <input class="formbutton" type="button" value="上一步" onclick="history.back(1)" />
    </p>
    <?php
	} elseif(!@mysql_select_db($_POST['dbname'])&&!$_POST['create']) {

?>
    <p>数据库<?php echo $_POST['dbname'];?>不存在.</p>
    <hr size="1" noshade="noshade" />
    <p align="right">
      <input class="formbutton" type="button" value="上一步" onclick="history.back(1)" />
    </p>
    <?php
	} elseif(strstr($_POST['tablepre'], '.')) { 
?>
    <p>您指定的数据表前缀包含点字符，请返回修改.</p>
    <hr size="1" noshade="noshade" />
    <p align="right">
      <input class="formbutton" type="button" value="上一步" onclick="history.back(1)" />
    </p>
    <?php
	} else {
?>
    <p class="title">第四步:导入数据</p>
    <?php
		$configfile=iPATH.'iweb_mini_lib/conf/dbconf.php';
		if(is_writeable($configfile)) {

			$dbhost 	= trim($_POST['dbhost']);
			$dbuser 	= trim($_POST['dbuser']);
			$dbpw 		= trim($_POST['dbpw']);
			$dbname 	= trim($_POST['dbname']);
			$dbprefix	= trim($_POST['tablepre']);
			$isnsURL	= trim($_POST['isnsurl']);
			$admin		= trim($_POST['admin']);
			$password	= trim($_POST['password']);
			if(empty($password)){
				echo "<script> alert('管理员密码不能为空！');history.go(-1); </script>";
			}
			
			//配置文件静态化
			$config_re=fopen($configfile,"w+");
			$insert_config_data='
<?php
$host="'.$dbhost.':3306";//mysql数据库服务器,比如localhost:3306
$user="'.$dbuser.'"; //mysql数据库默认用户名
$pwd="'.$dbpw.'"; //mysql数据库默认密码
$db="'.$dbname.'"; //默认数据库名
global $tablePreStr;//设置外部变量
$tablePreStr="'.$dbprefix.'";//表前缀

//当前提供服务的mysql数据库
global $dbServs;
$dbServs=array($host,$db,$user,$pwd);
?>';
			fwrite($config_re,trim($insert_config_data));
			fclose($config_re);
			
		}
    	mysql_query("set names 'UTF8'");
		if(!@mysql_select_db($dbname)&&$_POST['create']){
    		$database=addslashes($dbname);
    		if(version_compare(mysql_get_server_info(), '4.1.0', '>=')){
		    	$DATABASESQL="DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci";
    		}
    		mysql_query("CREATE DATABASE `$database` ".$DATABASESQL);
    		@mysql_select_db($dbname);
		}
		require_once ($configfile);
		$installSQL=iPATH.'doc/iweb_sns.sql';
		!is_readable($installSQL)&&exit('数据库文件不存在或者读取失败');
		require_once(iPATH.'install/cdbex.class.php');
		$db = new dbex;
		runquery(openfile($installSQL),$tablePreStr,$isnsURL);
		$sql="INSERT INTO isns_admin(`admin_name`,`admin_password`,`admin_role`,`active_time`) VALUES('$admin','".md5($password)."',0,NOW())";
		$sql=str_replace('isns_',$tablePreStr,$sql);
		if(!$db->query($sql)){
			echo '创建后台管理员失败！';
			exit;			
		}
?>
    </p>
    <p>共创建了<?php echo $tablenum;?>个数据表.</p>
    <hr size="1" noshade="noshade" />
    <input type="hidden" name="step" value="4" />
    <input class="formbutton" type="button" value="上一步" onclick="history.back(1)" />
    <input class="formbutton" type="submit" value="下一步" />
    <?php
	}
}elseif($step==4){
	require("../foundation/ftpl_compile.php");
	require("../configuration.php");
	list_child_file("default");
	?>
		<hr size="1" noshade="noshade" />
    <input type="hidden" name="step" value="5" />
    <input class="formbutton" type="button" value="上一步" onclick="history.back(1)" />
    <input class="formbutton" type="submit" value="下一步" />	
<?php 
}elseif($step==5){
	file_put_contents(iPATH.'./doc/install.lock',"");
	?>
	
    <p>安装程序已经顺利执行完毕，请尽快删除整个 install 目录，以免被他人恶意利用。</p>
    <p>&nbsp;</p>
    <p><a href="../">点击这里进入首页</a><br />
      <a href="../sysadmin/login.php">点击这里进入后台</a></p>
    <hr size="1" noshade="noshade" />
    <p align="right"><a href="http://www.jooyea.net" target="_blank">Welcome to jooyea</a></p>
    
<?php	
}
?>
  </form>
</div>
<strong>Powered by iweb_sns V0.9 &copy; 2010 </strong>
</body>
</html>
<?php
function runquery($sql,$tablePreStr,$isnsURL) {
	global  $db, $tablenum;
	$sql = str_replace("\r", "\n", str_replace('http://localhost/iweb_sns/',$isnsURL,str_replace('isns_',$tablePreStr,$sql)));
	$ret = array();
	$num = 0;
	foreach(explode(";\n", trim($sql)) as $query) {
		$queries = explode("\n", trim($query));
		foreach($queries as $query) {
			if(!isset($ret[$num]))
			{
				$ret[$num] = substr($query,0,2) == '/*' ? '' : $query;
			}
			else
			{
				$ret[$num] .= substr($query,0,2) == '/*' ? '' : $query;
			}
		}
		$num++;
	}
	unset($sql);
	foreach($ret as $query) {
		$query = trim($query);
		if($query) {
			if(substr($query, 0, 12) == 'CREATE TABLE') {
				preg_match("|CREATE TABLE (.*) \(  |i",$query, $name);flush();
				if($db->query($query)){
					echo '创建表 '.$name[1].' ... <font color="#0000EE">成功</font><br />';
					$tablenum++;
				}else{
					echo '创建表'.$name[1].'失败！';
					exit;
				}
			}else {
				if(!$db->query($query)){
					echo '插入数据失败！';
					exit;					
				}
			}
		}
	}
}
//模板编译
function list_child_file($local){
	$compile_type="serve";
	$ref=opendir("../templates/".$local);
	while($tp_dir=readdir($ref)){
		if(!preg_match("/^\./",$tp_dir)){
			if(filetype("../templates/".$local."/".$tp_dir)=="dir"){
				list_child_file($local."/".$tp_dir);
			}
			if(filetype("../templates/".$local."/".$tp_dir)=="file"){
				$loc='default';
				$show_local=$local.'/'.$tp_dir;
				$show_local=preg_replace("/$loc\//","",$show_local);
				tpl_engine($loc,$show_local,0,$compile_type);
			}
		}
	}
}
?>
