Просмотр файла install/index.php

Размер файла: 11.91Kb
<?php
#######################################################
#                раздача ICQ номерков                 #
#                                                     #
#             	 Автор  :  Неизвестен                 #
#                Автор модификации : Дальше...        #
#               E-mail  :  [email protected]             #
#                  ICQ  :  362548079                  #
#                                                     #
#   		По всем вопросам пишите в ICQ.            #
#######################################################
class Install
	{
	var $files;
	var $conffile;
	
	function Install()
		{
		$this->files=array('../admin.php',
						   '../admin_prefs.php',
						   '../admin_users.php',
						   '../classes.php',
						   '../index.php',
						   '../myprefs.php',
						   '../mysql.php',
						   '../conf.php',
						   'dump.php'
						   );
		$this->conffile='../conf.php';
		}
	
	function PrintTempl($title,$caption,$center,$step,$result='ok')
		{
		$steps=4;
		echo "<html>
<head>
<title>Раздача ICQ (установка) - $title</title>
<style type=\"text/css\">
<!--
body {
	font: 10pt arial tahoma verdana sans-serif;
	background-color: #ffffff;
	margin: 2px;
	text-align: left;
}

table {
	color: #333333;
	font-family: Tahoma,Verdana;
	text-decoration: none;
	font-size: 8pt;
}

a.menu {
	color: #333333;
	font-family: Tahoma,Verdana;
	text-decoration: underline;
	font-size: 10pt;
	font-weight: bold;
}

a.menu:hover {
	color: #333333;
	font-family: Tahoma,Verdana;
	text-decoration: none;
	font-size: 10pt;
	font-weight: bold;
}

.menu {
	color: #333333;
	font-family: Tahoma,Verdana;
	text-decoration: none;
	font-size: 10pt;
}

input {
	color: #333333;
	font-family: Tahoma,Verdana;
	text-decoration: none;
	font-size: 8pt;
}

textarea {
	color: #333333;
	font-family: Tahoma,Verdana;
	text-decoration: none;
	font-size: 8pt;
}

a {
	color: #333333;
	font-family: Tahoma,Verdana;
	text-decoration: underline;
	font-weight: bold;
	font-size: 8pt;
}
a:hover {
	color: #dd2200;
	font-family: Tahoma,Verdana;
	text-decoration: none;
	font-weight: bold;
	font-size: 8pt;
}

.sel {
	color: #333333;
	font-family: Tahoma,Verdana;
	text-decoration: none;
	font-size: 8pt;
	width: 150;
}
-->
</style>
</head>
<body><br><br>
		<table cellspacing=1 cellpadding=3 border=0 bgcolor=#CCCCCC align=center valign=center>
		<tr>
			<td bgcolor=#EEEEEE align=center>
			<b>Установка скрипта \"Раздача ICQ\". "; if ($step>0) echo "Шаг $step из $steps"; echo "</b>
			</td>
		</tr>
		<tr>
			<td bgcolor=#ffffff align=center>
			<br><b>$caption</b> <br><br>
			$center<br>
			</td>
		</tr>
		<tr>
			<td bgcolor=#CCCCFF>
			Состояние: $result
			</td>
		</tr>
		</table>
</body></html>
		";
		}
	
	function EventCycle()
		{
		if (isset($_REQUEST['sc_submit']))
			{
			$this->dbform();
			}
		else
		if (isset($_REQUEST['db_submit']))
			{
			$res=$this->TryConnect($_REQUEST['db_login'],$_REQUEST['db_pass'],$_REQUEST['db_host'],$_REQUEST['db_dbname']);
			if (!$res['flag']) $this->dbform($_REQUEST['db_login'],$_REQUEST['db_pass'],$_REQUEST['db_host'],$_REQUEST['db_dbname'],1,$res['result']);
			else 
				{
				if ($this->SaveParams($_REQUEST['db_login'],$_REQUEST['db_pass'],$_REQUEST['db_host'],$_REQUEST['db_dbname']))
					{
					$this->tablesform();
					}
				else $this->dbform($_REQUEST['db_login'],$_REQUEST['db_pass'],$_REQUEST['db_host'],$_REQUEST['db_dbname'],2,'Проблема с записью в файл '.$this->conffile);
				}
			}
		else 
		if (isset($_REQUEST['tf_submit_again'])) $this->tablesform();
		else 
		if (isset($_REQUEST['tf_submit_next'])) $this->userform();
		else 
		if (isset($_REQUEST['user_submit']))
			{
			if (!$_REQUEST['login']||!$_REQUEST['pass']||!$_REQUEST['pass_again']||!eregi('[a-z|A-Z|_]{4,}',$_REQUEST['login'])) 
				{
				$result.='<b>Добавление невозможно. Не заданы (либо заданы неправильно) имя или пароль пользователя!</b>';
				$this->userform($result,$_REQUEST['login']);
				}
			else
			if ($_REQUEST['pass']!=$_REQUEST['pass_again'])
				{
				$result.='<b>Добавление невозможно. Пароли не совпадают!</b>';
				$this->userform($result,$_REQUEST['login']);
				}
			else
				{
				include('../mysql.php');
				if ($res=mysql_query("SELECT * FROM icqadminusers WHERE login='".$_REQUEST['login']."'"))
					{
					if ($arr=mysql_fetch_array($res))
						{
						$result.='<b>Добавление невозможно. Пользователь с таким именем уже есть в базе!</b>';
						$this->userform($result,$_REQUEST['login']);
						}
					else
						{
						if (mysql_query("INSERT INTO icqadminusers (`login`,`pass`) VALUES ('".strip_tags($_REQUEST['login'])."','".md5($_REQUEST['pass'])."')")) 
							{
							$this->finalform();
							}
						else 
							{
							$result.='<b>Не удалось добавить пользователя. Ответ MySQL: '.mysql_error().'</b>';
							$this->userform($result,$_REQUEST['login']);
							}
						}
					}
				else
					{
					$result.='<b>Не удалось добавить пользователя. Ответ MySQL: '.mysql_error().'</b>';
					$this->userform($result,$_REQUEST['login']);
					}
				}
			}
		else $this->SelfCheck();
		}
	
	function SelfCheck()
		{
		$caption='Проверка целостности файлов программы...';
		$center="
		<table cellspacing=0 cellpadding=3 border=0>
		<form method=POST>
		<tr>
			<td align=center>
			Файл
			</td>
			<td align=center>
			Состояние
			</td>
		</tr>";
		$flag=true;
		foreach ($this->files as $file)
			{
			if (file_exists($file))
				{
				$center.="
				<tr>
					<td>
					$file
					</td>
					<td align=center>
					<font color=green>ок
					</td>
				</tr>";
				}
			else
				{
				$center.="
				<tr>
					<td>
					$file
					</td>
					<td align=center>
					<b><font color=red>отсутствует</font></b>
					</td>
				</tr>";
				$flag=false;
				}
			}
			
		if ($flag)
			{
			$result='ok';
			$center.="
				<tr>
					<td colspan=2 align=center>
					<input type=submit name=sc_submit value=\"Продолжить &raquo;\">
					</td>
				</tr>";
			}
		else $result='<b>Продолжение невозможно!</b>';
		$center.="
		</form>
		</table>
		";
		$this->PrintTempl("Самопроверка",$caption,$center,1,$result);
		}
	
	function dbform($name=NULL,$pass=NULL,$host='localhost',$db=NULL,$noconnect=0,$result='ok')
		{
		$center="
		<table cellspacing=0 cellpadding=3 border=0>
		<form method=POST>
		<tr>
			<td>
			Логин:
			</td>
			<td>
			<input type=text name=db_login value=\"$name\">
			</td>
		</tr>
		<tr>
			<td>
			Пароль:
			</td>
			<td>
			<input type=password name=db_pass value=\"$pass\">
			</td>
		</tr>
		<tr>
			<td>
			Хост:
			</td>
			<td>
			<input type=text name=db_host value=\"$host\">
			</td>
		</tr>
		<tr>
			<td>
			Имя БД:
			</td>
			<td>
			<input type=text name=db_dbname value=\"$db\">
			</td>
		</tr>
		<tr>
			<td colspan=2 align=center>
			<input type=submit name=db_submit value=\"Продолжить &raquo;\">
			</td>
		</tr>
		</form>
		</table>
		";
		if ($noconnect==1) $caption="<font color=red>Нет связи с сервером MySQL с такими параметрами.<br> Повторите ввода!</font>";
		else if ($noconnect==0) $caption="Введите параметры MySQL";
		else if ($noconnect==2) $caption="<font color=red>Не удалось сохранить данные в файл ".$this->conffile."<br> Проверьте права на запись в файл!</font>";
		$this->PrintTempl("Установка параметров MySQL",$caption,$center,2,$result);
		}
	
	function tablesform($result='ok')
		{
		include_once('../mysql.php');
		include_once('dump.php');
		$caption='Создание таблиц в базе данных';
		$center="
		<table cellspacing=0 cellpadding=3 border=0>
		<form method=POST>
		<tr>
			<td align=center>
			Таблица
			</td>
			<td align=center>
			Состояние
			</td>
		</tr>";
		
		if ($res=mysql_query('SHOW TABLES'))
			{
			while ($arr=mysql_fetch_array($res))
				{
				$dbtables[]=$arr[0];
				}
			}
		
		$flag=true;
		foreach ($tables as $table)
			{
			if (@in_array($table['name'],$dbtables)) $flag=false;
			}
		reset($tables);
		foreach ($tables as $table)
			{
			if (@in_array($table['name'],$dbtables)) // Таблица уже есть в базе
				{
				$center.="
				<tr>
					<td>
					".$table['name']."
					</td>
					<td align=center>
					<b><font color=red>есть в базе</font></b>
					</td>
				</tr>";
				}
			else
				{
				if (!$flag)
					{
					$center.="
					<tr>
						<td>
						".$table['name']."
						</td>
						<td align=center>
						<font color=green>нет в базе</font>
						</td>
					</tr>";
					}
				else
					{
					if (mysql_query($table['create']))
						{
						if ($table['dump']!='') 
							{
							$dumps=explode("\n",$table['dump']);
							foreach ($dumps as $dump) mysql_query($dump);
							echo mysql_error();
							}
						$center.="
						<tr>
							<td>
							".$table['name']."
							</td>
							<td align=center>
							<font color=green>создана</font>
							</td>
						</tr>";
						}
					else
						{
						$center.="
						<tr>
							<td>
							".$table['name']."
							</td>
							<td align=center>
							<b><font color=red>не удалось создать</font></b>
							</td>
						</tr>";
						}
					}
				}
			}
			
		if ($flag)
			{
			$result='ok';
			$center.="
				<tr>
					<td colspan=2 align=center>
					<input type=submit name=tf_submit_next value=\"Продолжить &raquo;\">
					</td>
				</tr>";
			}
		else 
			{
			$result='<b>Продолжение невозможно! Удалите существующие таблицы!</b>';
			$center.="
				<tr>
					<td colspan=2 align=center>
					<input type=submit name=tf_submit_again value=\"Повторить &raquo;\">
					</td>
				</tr>";
			}
		$center.="
		</form>
		</table>
		";
		$this->PrintTempl("Создание таблиц",$caption,$center,3,$result);
		}
	
	function userform($result='ok',$login="")
		{
		$caption='Создание певого пользователя';
		$center="
		<table cellspacing=0 cellpadding=3 border=0>
		<form method=POST>
		<tr>
			<td align=center>
			Имя
			</td>
			<td align=center>
			<input type=text name=login value=\"$login\">
			</td>
		</tr>
		<tr>
			<td align=center>
			Пароль
			</td>
			<td align=center>
			<input type=password name=pass value=\"\">
			</td>
		</tr>
		<tr>
			<td align=center>
			Подтверждение
			</td>
			<td align=center>
			<input type=password name=pass_again value=\"\">
			</td>
		</tr>
		<tr>
			<td align=center colspan=2>
			<input type=submit name=user_submit value=\"Продолжить &raquo;\">
			</td>
		</tr>
		</form>
		</table>
		";
		$this->PrintTempl("Создание первого пользователя",$caption,$center,4,$result);
		}
	
	function finalform()
		{
		$caption='Установка завершена!';
		$center="
		Скрипт \"Раздача ICQ\" успешно установлен на Ваш сервер.<br> 
		Не забудьте удалить папку install с Вашего сервера.<br>
		Для перехода в администраторскую часть <a href=\"../admin_prefs.php\">нажмите здесь</a><br><br>
		";
		$this->PrintTempl("Установка завершена",$caption,$center,-1);
		}
	
	function TryConnect($name,$pass,$host,$db)
		{
		if ($res=@mysql_connect($host,$name,$pass))
			{
			$result.='cоединение с MySQL установлено<br>';
			if (mysql_select_db($db,$res))
				{
				$result.='соединение с базой данных $db установлено<br>';
				return array('flag'=>true,'result'=>$result);
				}
			else $result.="<b>база данных $db не существует, создайте её</b><br>";
			}
		else $result.='<b>не удалось установить соединение с MySQL</b>';
		return array('flag'=>false,'result'=>$result);
		}
	
	function SaveParams($name,$pass,$host,$db)
		{
		if ($fp=@fopen($this->conffile,'w'))
			{
			$str="<?php
\$GLOBALS[mysql_user]='$name';
\$GLOBALS[mysql_pass]='$pass';
\$GLOBALS[mysql_host]='$host';
\$GLOBALS[mysql_db]='$db';
?>";
			if (fwrite($fp,$str))
				{
				fclose($fp);
				return true;
				}
			fclose($fp);
			}
		return false;
		}
	
	}

$inst=new Install;
$inst->EventCycle();
	
?>