View file admin/about/update.php

File size: 4.24Kb
<?php
    include '../../engine/includes/start.php';
    if (!$creator)
        Core::stop();

    $set['title'] = 'Обновление';
    include incDir.'head.php';

	function update($file)
	{
		Core::get('zip');
		$zip = new Pclzip($file);
		$contents = $zip->listContent();

        if ($contents == 0)
			$error = 'Архив поврежден или пуст';
		else
		{
			$config = $zip->extract(PCLZIP_OPT_BY_NAME, 'update.ini', PCLZIP_CB_POST_EXTRACT, 'get_ini');
			if (empty($config))
				$error = 'update.ini не найден';
			else
			{
				$config = parse_ini_file(tmpDir . 'update.upd');
		
				if (empty($config['version']) || str_replace('.', '', $config['version']) <= str_replace('.', '', Core::Secwind('version')))
					$error = 'Невозможно установить обновление до версии '. $config['version'] .', когда уже установлена версия '. Core::Secwind('version');
			}
		}

		if (file_exists(tmpDir . 'update.upd'))
			unlink(tmpDir . 'update.upd');

		if (!isset($error))
		{
			$zip->delete(PCLZIP_OPT_BY_NAME, 'upload.ini');
			$zip->extract(PCLZIP_OPT_SUBSTITUE_FILE, H);

			if (!empty($config['sql']))
			{
				Global $sql;
				$sql->from_file(H . $config['sql']);
				$sql->free(true);
				Core::msg_show('Сделаны запросы из файла ' .$config['sql'], 'menu_razd');
				@unlink(H . $config['sql']);
			}

			if (!empty($config['chmod']))
			{
				$dirs = explode(' ', $config['chmod']);
				foreach($dirs as $dir)
				{
					chmod(H . $dir, 0777);
				}
				Core::msg_show('Выставлены права доступа 777 на необходимые папки', 'menu_razd');
			}

			Core::msg_show('SecWind обновлен до версии '.$config['version'] . '<br />Список изменений: '.nl2br(htmlspecialchars($config['descr'])), 'post');
			$data = unserialize(file_get_contents(H . 'engine/files/data/secwind.db'));
			$data['version'] = $config['version'];
			file_put_contents(H . 'engine/files/data/secwind.db', serialize($data));
		}

		unset($zip, $config, $headers);
	
		if (isset($error))
			Core::msg_show($error);
	}

	function get_ini($event, &$file)
	{
        Return Rename($file['filename'], tmpDir . 'update.upd');
	}

	switch($act)
	{
		default:
			echo 
				'Ваша версия: '.Core::SecWind('version').'<br />Последняя: Неизвестно<br />
				<a href="?act=upload"><div class="link">Выгрузить файл обновления</div></a>
				<a href="?act=import"><div class="link">Импортировать файл обновления</div></a>';
		break;

		case 'import':
		if (!empty($_POST['url']))
		{
			$headers = @get_headers($_POST['url'], 1);

			if (!$headers)
				$error = 'Не удалось получить заголовки по указанному адресу';

			elseif ($headers['Content-Type'] != 'application/zip')
				$error = 'Только zip архивы';
        
			else
			{
				@set_time_limit(20);

				$up_file = pathinfo($_POST['url'], PATHINFO_FILENAME);

                file_put_contents(tmpDir . $up_file, file_get_contents($_POST['url']));
				
				update(tmpDir . $up_file);
			}
		}

		?>
		<form method = "post">
			Путь к zip архиву:<br />
			<input type="text" name="url" value="http://"/><br />
			<input value = "Импорт" type="submit" />
		</form>
		<?php
		break;

		case 'upload':

		if (!empty($_FILES['file']['name']))
		{
			$pathinfo = pathinfo($_FILES['file']['name']);
			if ($pathinfo['extension'] != 'zip')
				$error = 'Только zip архивы';
			else
			{
				update($_FILES['file']['tmp_name']);
			}
		}

    ?>
    <form method="post" enctype="multipart/form-data">
        <div class="post">Выберите архив. Расширение файла должен быть "<b>zip</b>" и присутсовать файл "<b>update.ini</b>"</div>
        <input type="file" name="file"/><br />
        <input value = "Загрузить" name="save" type="submit" />
    </form>

	<?php
		break;
	}

	?>
    <a href='/admin/?act=about'><div class="menu_razd">SecWind</div></a>
    <a href='?'><div class="menu_razd">Обновление</div></a>
    <a href='/admin/'><div class="menu_razd">Админка</div></a>
    <?php
    include incDir.'foot.php';