<?php

/*
 * LinkorCMS 1.4
 * © 2012 LinkorCMS Development Group
 */


/**
 * Файл для распаковки системы из архива.
 * Файлы распаковываются из архива linkorcmspack.zip.
 * При распаковке, файлам и папкам устанавливаются права 777.
 * Для работы требуется расширение ZIP.
 */

@set_time_limit(600);
umask(0); // По умолчанию файлы будут создаваться с правами 0666, папки с правами 0777

$minimal_php_version = '5.2.0';
$archive_name = 'linkorcmspack.zip';
$pclzip_file = 'pclzip.lib.php';
$path = './';

function ExtractorError( $Title, $Content ){
	exit("<html>
<head>
	<title>Ошибка</title>
</head>
<body>
	<h2 align=\"center\">$Title</h2>
	<p align=\"center\">$Content</p>
</body>
</html>
");
}

// Проверка версии интерпретатора
if(version_compare(phpversion(), $minimal_php_version, '<')){
	ExtractorError('Требуется версия PHP >= '.$minimal_php_version, 'Вы используете PHP '.phpversion().'.');
}

// Проверка возможности работы с ZIP средствами PHP
if(version_compare(phpversion(), '5.3', '>=') && extension_loaded('zip')){
	$ZipDriver = 'ZipArchive';
}else{
	$ZipDriver = 'PclZip';
}

// Проверка наличия архива
if(!is_file($archive_name)){
	ExtractorError('Архив '.$archive_name.' не найден', 'Закачайте архив '.$archive_name.' на хостинг для распаковки и установки системы.');
}

// Проверяем права на запись в текущую папку
if(!is_writable(dirname(__FILE__))){
	ExtractorError('Данная папка не доступна для записи', 'Распаковка архива не возможна. Установите права 777 папку в которую планируется установка системы.');
}

// Проверка возможности удаления распаковщика
if(!is_writable(__FILE__)){
	ExtractorError('Нет прав на запись в распаковщик', 'Права на запись требуются для удаления распаковщика после распаковки архива. Установите права 777 на файл '.basename(__FILE__).'.');
}

if($path != '' && !is_dir($path)){
	mkdir($path, 0777);
}

if($ZipDriver == 'ZipArchive'){
	$zip = new ZipArchive;
	$open = $zip->open($archive_name);
	$to_unpack = array();
	if($open === true){
		$num_files = $zip->numFiles;
		for($i = 0; $i < $num_files; $i++){
			$file_name = $zip->getNameIndex($i);
			$dir_name = dirname($file_name);
			if(substr($file_name, -1) == '/'){ // Папка
				if(!is_dir($path.$file_name)){
					mkdir($path.$file_name, 0777, true);
				}
			}else{ // Файл
				$to_unpack[] = $file_name;
			}
		}
		// Распаковываем файлы
		if(!$zip->extractTo($path, $to_unpack)){
			ExtractorError('Ошибка при распаковке архива.', '');
		}
	}else{
		ExtractorError('Не удалось распаковать файл '.$archive_name, 'Код ошибки: '.$open.'.');
	}
}else{
	require $pclzip_file;
	$zip = new PclZip($archive_name);
	if($zip->extract(PCLZIP_OPT_PATH, $path, PCLZIP_OPT_SET_CHMOD, 0777) == 0){
		ExtractorError('Не удалось распаковать файл '.$archive_name, $zip->errorInfo(true));
	}
}


unlink(__FILE__); // Удаляем распаковщик
if(is_writable($archive_name)){
	unlink($archive_name); // Удаляем архив
}

if(is_file($pclzip_file) && is_writable($pclzip_file)){
	unlink($pclzip_file);
}

// Перенаправляем на установку системы
Header('Location: '.$path.'setup.php');
