Вход Регистрация
Файл: admin/about/update.php
Строк: 272
<?php
    
include '../../engine/includes/start.php';
    if (!
$creator)
        
Core::stop();

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

    function 
pre_update($file)
    {
        
$zip = new Pclzip($file);
        
$_SESSION['update_file'] = $file;
        
$_SESSION['update_with_ftp'] = isset($_POST['ftp']);

        echo 
'<div class="post">Будут заменены следующие файлы:<br />';
        foreach (
$zip->listContent() as $file)
        {
            if (
$file['folder'])
                continue;

            echo 
$file['stored_filename'] .' ('.round($file['size'] / 10242).' kb)<br />';
        }
            echo 
'</div><a class="link" href="?">Применить обновление</a>';
    }

    function 
ftp_update($file)
    {
        
$zip = new Pclzip($file);
        
$contents $zip->listContent();

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

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

            
$ftp_data parse_ini_file('engine/files/data/modules.ini');
            
$ftp = new Ftp;
            if (!
$ftp->connect($ftp_data['ftp_host'], $ftp_data['ftp_user'], $ftp_data['ftp_pass']))
            {
                echo 
"conntecting failed: ";
                
print_r($ftp->error_no);
                
print_r($ftp->error_msg);
            }
            else{
            
$upd_dir tmpDir 'update_to_'.$config['version'] . '/';
            
mkdir($upd_dir0777);
            
$zip->extract(PCLZIP_OPT_SUBSTITUE_FILE$upd_dir);
            
            foreach(
$zip->listContent() as $file)
            {
                if (
$file['folder'])
                {
                    if (!
is_dir($file['filename']))
                    {
                        
mkdir($file['filename'], 0777);
                    }
                }
                else
                {
                    
//$fil = $zip->extract(PCLZIP_OPT_BY_NAME, $file['filename'], PCLZIP_OPT_EXTRACT_AS_STRING);
                    
                    
$ftp->put($file['filename'], $upd_dir $file['filename']); //, $fil[0]['content']))
                    
unlink($upd_dir $file['filename']);
                }
            }
            
//file_put_contents('text.txt', serialize($ftp->lastLines));

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

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

            
Core::msg_show('SecWind обновлен до версии '.$config['version'] . '<br />Список изменений: '.nl2br(htmlspecialchars($config['descr'])), 'post');
            
$data unserialize(file_get_contents('engine/files/data/secwind.db'));
            
$data['version'] = $config['version'];
            
            if (!empty(
$config['secwind']))
            {
                
$data array_merge($data$config['secwind']);
            }
            
            
//file_put_contents(H . 'engine/files/data/secwind.db', serialize($data));
            
}
        }
        
        unset(
$zip$config$headers);
    
        if (isset(
$error))
            
Core::msg_show($error);
    }
    
    function 
update($file)
    {
        
$zip = new Pclzip($file);
        
$contents $zip->listContent();

        if (
$contents == 0)
            
$error 'Архив поврежден или пуст';
        else
        {
            
$config $zip->extract(PCLZIP_OPT_SUBSTITUE_FILE'update.ini'PCLZIP_OPT_EXTRACT_AS_STRING);//, PCLZIP_CB_POST_EXTRACT, 'get_ini');
            
file_put_contents(tmpDir 'update.ini'$config[0]['content']);
            
$config parse_ini_file(tmpDir 'update.ini'true);
            if (empty(
$config))
                
$error 'update.ini не найден';
            else
            {
                if (empty(
$config['version']) || version_compare($config['version'], 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_FILEH);

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

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

            
Core::msg_show('SecWind обновлен до версии '.$config['version'] . '<br />Список изменений: '.nl2br(htmlspecialchars($config['descr'])), 'post');
            
$data unserialize(file_get_contents('engine/files/data/secwind.db'));
            
$data['version'] = $config['version'];
            
            if (!empty(
$config['secwind']))
            {
                
$data array_merge($data$config['secwind']);
            }
            
            
file_put_contents('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:
        
        if (
                isset(
$_SESSION['update_file']) && 
                (
                    
is_uploaded_file($_SESSION['update_file']) ||
                    
is_file($_SESSION['update_file'])
                ))
            {
                if (
$_SESSION['update_with_ftp'])
                {
                    
ftp_update($_SESSION['update_file']);
                }
                else
                {
                    
update($_SESSION['update_file']);
                }

                
Cache::multi_delete('swc');

                unset(
$_SESSION['update_file'], $_SESSION['update_with_ftp']);
            }
        
            echo 
'<div class="link">Ваша версия: '.Core::SecWind('version').'<br />';
        
            
$last_version = @json_decode(file_get_contents('http://secwind.ru/?act=get_last_version'), true);

            if (empty(
$last_version) || (function_exists('json_last_error') && json_last_error()))
            {
                echo 
'</div>';
                
Core::msg_show('Невозможно проверить на обновление');
            }
            else
            {
                echo (
version_compare($last_version['last_version'], Core::SecWind('version'), '=')    ? 'У вас установлена последняя версия' 'Последняя: <a href="'.$last_version['link_update'].'">'.$last_version['last_version'] . ' ' .$last_version['status'].'</a>') . '<br />
                Дата выхода: '
.Core::time($last_version['time_release']) . '<br />
                Список изменений в версии '
.$last_version['last_version'] .': <br /> '.nl2br($last_version['changelog']).'</div>';
            }
            
?>
                <form class="link" method = "post" action="?act=import">
                    Ссылка к zip архиву:<br />
                    <input type="text" name="url" value="http://"/><br />
                    <label><input type="checkbox" name="ftp"/>Установка по <a href="/admin/modules/settings.php">ftp</a> (beta)</label><br />
                    <input value = "Импорт" type="submit" />
                </form>
                <form class="link" method="post" enctype="multipart/form-data" action="?act=upload">
                    Выберите архив. Расширение файла должен быть "<b>zip</b>" и присутствовать файл "<b>update.ini</b>"<br/>
                    <input type="file" name="file"/><br />
                    <label><input type="checkbox" name="ftp"/>Установка по <a href="/admin/modules/settings.php">ftp</a> (beta)</label><br />
                    <input value = "Загрузить" name="save" type="submit" />
                </form>
                <?php
        
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_filefile_get_contents($_POST['url']));
                
                
pre_update(tmpDir $up_file);
            }
        }
        break;

        case 
'upload':

        if (!empty(
$_FILES['file']['name']))
        {
            
$pathinfo pathinfo($_FILES['file']['name']);
            if (
$pathinfo['extension'] != 'zip')
                
$error 'Только zip архивы';
            else
            {
                
$up_file tmpDir 'update_'.time().'.zip';
                
move_uploaded_file($_FILES['file']['tmp_name'], $up_file);
                
pre_update($up_file);
            }
        }
        break;
    }

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