Файл: install/install.php
Строк: 185
<?php
error_reporting(0);
define('SITE', 'http://'.$_SERVER['SERVER_NAME'].URL::getCutSection());
$prefix = empty($_REQUEST['prefix']) ? 'mg_' : $_REQUEST['prefix'];
$_SESSION = array();
if ($_REQUEST['siteName']) {
$siteName = clearData($_REQUEST['siteName']);
} else {
$siteName = $_SERVER['SERVER_NAME'];
}
$aLogin = 'Администратор';
$aPass = clearData($_REQUEST['pass']);
$adminEmail = clearData($_REQUEST['email']);
if ($_REQUEST['step1']) {
$step = 1;
}
if ($_REQUEST['step2']) {
$step = 0;
if ('ok'==$_REQUEST['agree']) {
$step = 2;
}
if($checkLibs = libExists()){
$libError = true;
$msg .= '<div class="wrapper-error">';
$msg .= '<div class="error-system-install">Установка системы невозможна!</div>';
foreach ($checkLibs as $message){
$msg .= '<span class="error-lib">'.$message.'</span><br>';
}
$msg .= '</div>';
}
if($_SERVER['HTTP_HOST']=='localhost'){
$host = 'localhost';
$user = 'root';
$password = '';
$nameDB = 'BASE_NAME';
};
}
if ($_REQUEST['step3']) {
$host = clearData($_REQUEST['host']);
$user = clearData($_REQUEST['user']);
$password = clearData($_REQUEST['password']);
$nameDB = clearData($_REQUEST['nameDB']);
$engineType = clearData($_REQUEST['engineType']);
$step = 3;
if(!empty($engineType)){
$checkedTest = 'checked=checked'; //отметка "по умолчанию" типа магазина -тестовый
}
//Тестирование введенных пользоватем параметров.
try {
if (!mysql_connect($host, $user, $password)) {
throw new Exception('<span class="no-bd">Невозможно установить соединение.</span>');
}
if (!mysql_select_db($nameDB)) {
throw new Exception('<span class="error-db">Ошибка! Невозможно выбрать указанную базу.</span>');
}
} catch (Exception $e) {
//Выведет либо сообщение об ошибке подключения, либо об ошибке выбора.
$msg = '<div class="msgError">'.$e->getMessage().'</div>';
$step = 2;
}
}
if ($_REQUEST['step4']) {
$step = 4;
$host = clearData($_REQUEST['host']);
$user = clearData($_REQUEST['user']);
$password = clearData($_REQUEST['password']);
$nameDB = clearData($_REQUEST['nameDB']);
$engineType = clearData($_REQUEST['engineType']);
if(!empty($engineType)){
$checkedTest = 'checked=checked'; //отметка "по умолчанию" типа магазина -тестовый
}
if (!$_REQUEST['existDB']) {
// Проверка адреса сайта.
if (''==$siteName) {
$msg .= '<div class="msgError">Ошибка!
Не заполнено имя сайта</div>';
}
// Проверка электронного адреса.
if (!preg_match(
'/^[-._a-z0-9]+@(?:[a-z0-9][-a-z0-9]{0,61}+.)+[a-z]{2,6}$/', $adminEmail)
) {
$msg .= '<span class="error-email">Ошибка!
Неверно заполнено email администратора</span>';
}
// Пароль должен быть больше 5-ти символов.
if (strlen($aPass)<5) {
$msg .= '<span class="error-pass-count">Ошибка!
Пароль менее 5 символов</span>';
// Иначе, если не отмечено что пароль видимый.
} elseif (!$_REQUEST['showPass']) {
$rePass = clearData($_REQUEST['rePass']);
// Проверяем равенство введенных паролей.
if ($rePass!=$aPass) {
$msg .= '<span class="error-pass">Ошибка!
Введенные пароли не совпадают</span>';
}
}
// Если ошибок нет
if (!$msg) {
//Тестирование введенных пользоватем параметров.
try {
if (!mysql_connect($host, $user, $password)) {
throw new Exception('<span class="no-bd">Невозможно установить соединение.</span>');
}
if (!mysql_select_db($nameDB)) {
throw new Exception('<span class="error-db">Ошибка! Невозможно выбрать указанную базу.</span>');
}
} catch (Exception $e) {
//Выведет либо сообщение об ошибке подключения, либо об ошибке выбора.
$msg = '<div class="msgError">'.$e->getMessage().'</div>';
}
if (file_exists('install/dbDump.php')) { //подгружаем основной дамп БД
require_once ('install/dbDump.php');
if(is_array($damp)){
if (file_exists('install/dbDumpTestShop.php') && $checkedTest == 'checked=checked') { //если указано, что устанавливать тестовый магазин,
// то подгружаем дамп тестового магазина
require_once ('install/dbDumpTestShop.php');
if(is_array($dampTestShop)){
$damp = array_merge($damp, $dampTestShop);
}
$imageFile = downloadTestImage('http://moguta.ru/uploads/install/upTest.zip');
if($imageFile) extractZip($imageFile);
}
foreach ($damp as $sql) {
mysql_query($sql) or die ("Ошибка выполнения запроса:".mysql_error()."<br/>".$sql);
}
}
}
$cryptAPass = crypt($aPass);
$sql = "
INSERT INTO `".$prefix."user`
(`email`, `pass`,`name`,`role`,`activity`)
VALUES ('".$adminEmail."','".$cryptAPass."', '".$aLogin."', 1, 1)
";
mysql_query($sql);
$sql = "
UPDATE `".$prefix."setting`
SET `value` = '".$siteName."'
WHERE `option` = 'sitename'
";
mysql_query($sql);
$sql = "
UPDATE `".$prefix."setting`
SET `value` = '".$adminEmail."'
WHERE `option` = 'adminEmail'
";
mysql_query($sql);
$sql = '
SELECT *
FROM `'.$prefix.'user`
WHERE `email` = "'.$adminEmail.'"';
$res = mysql_query($sql);
session_start();
if ($row = mysql_fetch_object($res)) {
$_SESSION['user'] = $row;
}
}else{
$step = 3;
}
} else {
$sql = '
SELECT id
FROM `'.$prefix.'user`
WHERE `role` = 1';
$res = mysql_query($sql);
if (!mysql_fetch_assoc($res))
$msg .= '<div class="error-email">Ошибка! Недостаточно данных для установки системы. Не найден аккаунт с правами администратора</div>';
}
if (!$msg) {
$step = 4;
// Запись введенных данных в файл параметров config.ini
$str = "[DB]rn";
$str .="HOST = "".$host.""rn";
$str .="USER = "".$user.""rn";
$str .="PASSWORD = "".$password.""rn";
$str .="NAME_BD = "".$nameDB.""rn";
$str .="TABLE_PREFIX = "".$prefix.""rn";
file_put_contents('config.ini', $str);
$robots ="User-agent: Yandex
Allow: /uploads/
Disallow: /install/
Disallow: /mg-admin/
Disallow: /mg-core/
Disallow: /mg-pages/
Disallow: /mg-plugins/
Disallow: /mg-templates/
Disallow: /mg-admin
Disallow: /personal
Disallow: /enter
Disallow: /forgotpass
Disallow: /registration
Host: ".$_SERVER['SERVER_NAME']."
User-agent: *
Disallow: /install/
Disallow: /mg-admin/
Disallow: /mg-core/
Disallow: /mg-pages/
Disallow: /mg-plugins/
Disallow: /mg-templates/
Disallow: /mg-admin
Disallow: /personal
Disallow: /enter
Disallow: /forgotpass
Disallow: /registration
Host: ".$_SERVER['SERVER_NAME']."
Sitemap: http://".$_SERVER['SERVER_NAME']."/sitemap.xml";
file_put_contents('robots.txt', $robots);
$tables = array(
'category',
'category_user_property',
'delivery',
'order',
'page',
'payment',
'plugins',
'product',
'product_user_property',
'property',
'setting',
'user',
);
}
}
/**
* Фильтрует введеные пользователем данные
*
* @param string $str передаваемая строка
* @param int $strong строгость проверки
* @return string отфильтрованная строка
*
*/
function clearData($str, $strong = 2) {
switch ($strong) {
case 1:
return trim($str);
case 2:
return trim(strip_tags($str));
}
}
/**
* скачивание архива с изображениями для тестового магазина
* @param string $imageFile путь к архиву на сервере
* @return string|boolean в случае успеха путь к архиву в папке инсталятора
*/
function downloadTestImage($imageFile){
$imageZip = 'install/image.zip';
$ch = curl_init($imageFile);
$fp = fopen($imageZip, "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
if(file_exists($imageZip)) return $imageZip;
return false;
}
/**
* Распаковывает архив.
* После распаковки удаляет заданый архив.
*
* @param $file - название архива, который нужно распаковать
* @return bool
*/
function extractZip($file) {
$imageFolder = SITE_DIR.'uploads/';
if (file_exists($file)) {
$zip = new ZipArchive;
$res = $zip->open($file, ZIPARCHIVE::CREATE);
if ($res === TRUE) {
$zip->extractTo($imageFolder);
$zip->close();
unlink($file);
return true;
} else {
return false;
}
}
return false;
}
/**
* Функция проверяет наличие установленных библиотек PHP
* @return boolean|srting сообщение об отсутствии необходимого модуля
*/
function libExists() {
if(!function_exists('curl_init')){
$res[] = 'Пакет libcurl не установлен! Библиотека cURL не подключена.';
}
if(!extension_loaded('zip')){
$res[] = 'Пакет zip не установлен! Библиотека ZipArchive не подключена.';
}
file_put_contents('temp.txt', ' ');
if(!file_exists('temp.txt')){
$res[] = 'Нет прав на создание файла. Загрузка архива с обновлением невозможна';
}else{
unlink('temp.txt');
}
if(!filesize('.htaccess')){
$htaccess = 'AddType image/x-icon .ico
AddDefaultCharset UTF-8
Options +FollowSymlinks
Options -Indexes
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_URI} .(ini|php)$
RewriteRule ^(.*) index.php [L,QSA]
</IfModule>
<IfModule mod_php5.c>
php_flag magic_quotes_gpc Off
</IfModule>
';
file_put_contents('.htaccess',$htaccess);
if(!file_get_contents('.htaccess')){
$res[] = 'Невозможно создать файл .htaccess ';
}
}
return $res;
}
switch ($step) {
case 0:
require_once ('step0.php');
break;
case 1:
require_once ('step1.php');
break;
case 2:
require_once ('step2.php');
break;
case 3:
require_once ('step3.php');
break;
case 4:
require_once ('step4.php');
break;
}