Модуль Инструмент установки / удаления модулей

Тема в разделе "DLE", создана пользователем bumer3, 4 апр 2009.

Информация :
Актуальная версия DataLife Engine 11.2
( Final Release v.11.2 | Скачать DataLife Engine | Скачать 11.2 demo )
Нужно ли обновляться | Как обновиться | Изменения в шаблонах
> Нет русских символов <
[Приватная тема DLE (Все подробности в ЛС к модератору раздела)]

Версии 11.1 и ниже - уязвимы!

Локализации | F.A.Q. | Внешний вид
Правила раздела | Правила форума
Обсуждение хайда карается баном!
В каждом сообщении указывайте версию DLE, которого они касаются!
Статус темы:
Закрыта.
Модераторы: killoff
  1. bumer3

    bumer3

    Регистр.:
    10 янв 2008
    Сообщения:
    291
    Симпатии:
    154
    Пришла мысль как можно такое сделать. Есть ли смысл этим заниматься? И кто захочет для своих модулей сделать автоустановку?
     
  2. Max399

    Max399

    Регистр.:
    7 май 2007
    Сообщения:
    245
    Симпатии:
    26
    Думаю если выложить в паблик - то народ будет пользоватся!
    А если ещё и модули удобнее писать будет - то пиши конешно! :yahoo:
     
  3. bumer3

    bumer3

    Регистр.:
    10 янв 2008
    Сообщения:
    291
    Симпатии:
    154
    Просто если такое сделать то можно будет организовать репрозиторий типа Linux где будут бесплатные модули + установка в один клик. Посмотрим если будет спрос сделаю 2 модуля которые запланировал и этим займусь
     
  4. nithwich

    nithwich

    Регистр.:
    10 фев 2007
    Сообщения:
    421
    Симпатии:
    74
    безсмыслено,если будет от сторонних разрабов - не безопастно!
    висит тема в предложения для целкософта:nezn:
     
  5. bumer3

    bumer3

    Регистр.:
    10 янв 2008
    Сообщения:
    291
    Симпатии:
    154
    Какая разница кто разработает. Ведь модули всеравно будут не от Целсофта :)
     
  6. Хортица

    Хортица Прохожие

    Во-первых, в ДЛЕ очень стремная по умолчанию система установки модулей/хаков и прочего, поэтому создание подобной вещи весьма затруднительно
    Во-вторых, если же получится реализовать эту вещь, то нужно продумать как именно получать модули, как добавлять новые и тп (вариант - по проверке /engine/engine.php)
    В-третьих, если делать как в ИПБ через xml то можно умом тронуться надо созданием xml для каждой новой версии модуля
    В-четвертых, если делать на основе дистрибутивов *nix систем, то надо проштудировать все ДЛЕ которые сейчас могут использоваться - от 3.х до 7.х , а это вообще сума сойти

    Идея: супер, но к сожелению не новая
    Реализация: сомнительная
    Паблик: 100% нельзя делать

    ps: если что готов спонсировать данную вещь с делением на паблик/приват и прочее
     
  7. bumer3

    bumer3

    Регистр.:
    10 янв 2008
    Сообщения:
    291
    Симпатии:
    154
    Принципи хотел бы сделать через xml + скрипт для его генерации.

    Тоесть отдельная секция для SQL другая для правок в файлах

    Добавлять можно просто немного переписать engine.php чтоб было проще подключать и отключать

    Насчет паблика и привата
    Сделать репрозиторий где будут модули для бесплатного использования и платная секция на которую нужно купить подписку.
     
  8. raven4eg

    raven4eg Бесяцая птича

    Регистр.:
    14 дек 2007
    Сообщения:
    151
    Симпатии:
    19
    Не сочтите за рекламу, но думаю, что для установки и вкл\выкл модулей на лету будет не плохо рассмотреть идею автора данного сайта (там же идея и расписана)
    http://dle-hack.ru
     
  9. Demon425

    Demon425

    Регистр.:
    9 июл 2008
    Сообщения:
    439
    Симпатии:
    96
    <?php
    define('DLE_LINEAGE_INSTALL', 1);

    error_reporting(E_ALL ^ E_NOTICE);

    @session_start();

    @ini_set('display_errors', true);
    @ini_set('html_errors', false);
    @ini_set('error_reporting', E_ALL ^ E_NOTICE);

    define('DATALIFEENGINE', true);
    define('ROOT_DIR', dirname (__FILE__));
    define('ENGINE_DIR', ROOT_DIR.'/engine');

    require_once ENGINE_DIR.'/data/config.php';

    require_once ENGINE_DIR.'/classes/mysql.php';
    require_once ENGINE_DIR.'/data/dbconfig.php';
    require_once ENGINE_DIR.'/modules/functions.php';

    $config['charset'] = "windows-1251";
    $db_charset = "cp1251";
    $db_collate = "cp1251_general_ci";

    $url = $config['http_home_url'];

    $_TIME = time()+($config['date_adjust']*60);

    $topic_date = date ("Y-m-d H:i:s", $_TIME);

    extract($_REQUEST, EXTR_SKIP);

    $act = $_REQUEST['act'];

    if (!intval($act))
    {
    $act = 1;

    $next_act = 1;
    }

    $button_value = 'Дальше >';

    switch ($act)
    {
    default:
    case "1":
    $addr = str_replace("http://", "", $_SERVER['HTTP_HOST']);
    if (strtolower(substr($addr, 0, 4)) == 'www.') $addr = str_replace("www.", "", $addr);

    $content.= "<br>Добро пожаловать в мастер установки DLE LineАge 1.5.<br>
    Данный мастер поможет вам установить скрипт всего за пару минут.<br>
    Прежде чем начать установку убедитесь, что все файлы дистрибутива загружены на сервер, а также выставлены необходимые права доступа для папок и файлов.<br>";
    $next_act = 2;
    break;

    case "2":
    $licence_file.= "Мы настоятельно рекомендуем вам внимательно ознакомиться с данным документом. В нем содержится информация о том, какие правила будут регламентировать права и обязанности сторон, подписавших данное соглашение. Обратите внимание на выполнение обязательных условий при использовании нашего продукта, как при самостоятельной установке, так и при обращении в службу технической поддержки.<br />";
    $licence_file.= "<br />ЛИЦЕНЗИЯ<br />";
    $licence_file.= "Данный продукт является платным. Изменять или удалять любые упоминания об авторских правах (copyrights) запрещается. В рамках данного лицензионного соглашения покупатель получает статус клиента/ключ активации только на один профиль/URL адрес сайта. Получать техническую поддержку клиент можент на нашем сайте hellevil.net.<br />";
    $licence_file.= "<br />ПРАВА И ОБЯЗАННОСТИ СТОРОН<br />";
    $licence_file.= "<br />Вы имеете право:<br />";
    $licence_file.= "# Изменять дизайн программного продукта в соответствии с нуждами своего сайта.<br />";
    $licence_file.= "# Создавать приложения, интерфейс которых будет успешно работать с Системой, указав, что это ваш оригинальный продукт.<br />";
    $licence_file.= "<br />Вы не имеете право:<br />";
    $licence_file.= "# Изменять структуру исходного кода, функции программы для создания собственных продуктов, базирующиеся на исходном коде Системы.<br />";
    $licence_file.= "# Изменять или удалять любые упоминания об авторских правах (copyrights) в Системе, указываемые в нижней части модуля (кроме случаев, когда вы приобрели разрешение на удаление этих строк), а также указанные в верхней части исходного кода каждого файла.<br />";
    $licence_file.= "# Распространять индивидуальные копии файлов, библиотек и другого исходного кода Системы.<br />";
    $licence_file.= "<br />ГАРАНТИЙНОЕ ОБЯЗАТЕЛЬСТВО<br />";
    $licence_file.= "Система распространяется в соответствии с условием «AS IS» (как есть), без гарантий любого рода. В дополнение мы хотим отметить, что механизмы безопасности, установленные в Системе, имеют известные ограничения, и вы должны быть ознакомлены с отсутствием абсолютных гарантий от взлома вашего сайта или форума хакерами. Так же Наши гарантии и техническая поддержка не распространяются на модификации, произведенные третьей стороной или самостоятельно.<br />";
    $licence_file.= "<br />ПРАВА НА ИНТЕЛЛЕКТУАЛЬНУЮ СОБСТВЕННОСТЬ<br />";
    $licence_file.= "Название DLE LineАge, а также входящие в данный продукт скрипты являются собственностью hellEVIL TEAM, за исключением случаев, когда для компонента системы применяется другой тип лицензии. Программный продукт защищен законом об авторских правах. Мы не несем никакой ответственности за содержание Ваших сайтов.<br />";


    $content = "<script language='javascript'>
    check_eula = function(){
    if( document.getElementById( 'eula' ).checked == true ){ return true; }
    else { alert( 'Вы должны принять лицензионное соглашение, прежде чем продолжите установку.' ); return false; }}
    document.getElementById( 'install' ).onsubmit = check_eula;</script>
    <div class=eula>".$licence_file."</div>
    <input type=hidden name=action value=function_check>
    <input type='checkbox' name='eula' id='eula'><b>Я принимаю данное соглашение</b>
    ";

    $next_act = 3;
    break;

    case "3":
    $next_act = 4;
    $important_files = array(
    './engine/data/',
    './engine/lineage/',
    );

    $write_files = array(
    './engine/engine.php',
    './admin.php',
    './engine/inc/options.php',
    './engine/init.php',
    './index.php',
    './templates/'.$config['skin'].'/main.tpl',
    );

    if ($_SESSION['auto_install'])
    {
    $important_files = array_merge ($important_files, $write_files);
    }

    $chmod_errors = 0;
    $not_found_errors = 0;

    foreach ($important_files as $file)
    {
    if(!file_exists($file))
    {
    $file_status = "<font color=red>не найден!</font>";
    $not_found_errors ++;
    }
    elseif(is_writable($file))
    {
    $file_status = "<font color=green>разрешено</font>";
    }
    else
    {
    @chmod($file, 0777);
    if(is_writable($file))
    {
    $file_status = "<font color=green>разрешено</font>";
    }
    else
    {
    @chmod("$file", 0755);
    if(is_writable($file))
    {
    $file_status = "<font color=green>разрешено</font>";
    }
    else
    {
    $file_status = "<font color=red>запрещено</font>";
    $chmod_errors ++;
    }
    }
    }

    $chmod_value = @decoct(@fileperms($file)) % 1000;

    $content_chmod .= "<tr><td height=22>&nbsp;$file</td>
    <td>&nbsp; $chmod_value</td>
    <td>&nbsp; $file_status</td></tr>";
    }

    if ($chmod_errors == 0 and $not_found_errors == 0)
    {
    $status_report = '<br />Проверка успешно завершена! Можете продолжить установку!';
    }
    else
    {
    if ($chmod_errors > 0)
    {
    $status_report = "<font color=red>Внимание!!!</font><br /><br />Во время проверки обнаружены ошибки: <b>$chmod_errors</b>. Запрещена запись в файл.<br />Вы должны выставить для папок CHMOD 777, для файлов CHMOD 666, используя ФТП-клиент.<br /><br /><font color=red><b>Настоятельно не рекомендуется</b></font> продолжать установку, пока не будут произведены изменения.<br />";
    }

    if ($not_found_errors > 0)
    {
    $status_report .= "<font color=red>Внимание!!!</font><br />Во время проверки обнаружены ошибки: <b>$not_found_errors</b>. Файлы не найдены!<br /><br /><font color=red><b>Не рекомендуется</b></font> продолжать установку, пока не будут произведены изменения.<br />";
    }

    $next_act = 3;

    $button_value = 'Обновить >';
    }

    $content = "<table border=0 width=100%>".$content_chmod."</table>".$status_report;
    break;

    case "4":
    if(!isset($_POST['host']))
    {
    $content="
    <script language='javascript'>
    check_db = function(){
    if(document.getElementById('host').value == '') { alert( 'Вы должны заполнить поле хоста, прежде чем продолжите установку.' ); return false; }
    if(document.getElementById('db').value == '') { alert( 'Вы должны заполнить поле базы, прежде чем продолжите установку.' ); return false; }
    if(document.getElementById('user').value == '') { alert( 'Вы должны заполнить поле пользователя, прежде чем продолжите установку.' ); return false; }
    if(document.getElementById('pass').value == '') { alert( 'Вы должны заполнить поле пароля, прежде чем продолжите установку.' ); return false; }
    return true;
    }
    document.getElementById( 'install' ).onsubmit = check_db;
    </script>
    Заполните необходимые поля, данные для базы с Lineage:<p>
    <table>
    <tr>
    <td><b>Хост: </b></td>
    <td><input type='text' name='host' id='host'></td>
    </tr>
    <tr>
    <td><b>База геймсервера: </b></td>
    <td><input type='text' name='gdb' id='gdb'></td>
    </tr>
    <tr>
    <td><b>База логинсервера: </b></td>
    <td><input type='text' name='ldb' id='ldb'></td>
    </tr>
    <tr>
    <td><b>Пользователь: </b></td>
    <td><input type='text' name='user' id='user'></td>
    </tr>
    <tr>
    <td><b>Пароль: </b></td>
    <td><input type='text' name='pass' id='pass'></td>
    </tr>
    </table>
    <p>Проверьте правильно ли заполнены все поля!<br>";
    $next_act = 4;
    }
    else {
    $db->connect($_POST['user'], $_POST['pass'], $_POST['gdb'], $_POST['host'], 1);

    require_once ROOT_DIR.'/install/game_db.php';
    foreach($db_query as $table)
    {
    $db->query($table, true);
    }
    $db->close();

    $db->connect($_POST['user'], $_POST['pass'], $_POST['ldb'], $_POST['host'], 1);

    require_once ROOT_DIR.'/install/login_db.php';
    foreach($db_query as $table)
    {
    $db->query($table, true);
    }
    $db->close();

    $content = "База данных MySQL создана...<br /><br />Все необходимые поля внесены...<br /><br />Нажмите \"Дальше\" для продолжения.";

    $next_act = 5;
    }
    break;

    case "5":

    require_once ROOT_DIR.'/install/write.php';

    foreach ($edit_files as $file)
    {
    if (is_writable($file['open']))
    {
    $file_status = "<font color=green>разрешено</font>";
    }
    else
    {
    @chmod($file['open'], 0777);

    if(is_writable($file['open']))
    {
    $file_status = "<font color=green>разрешено</font>";
    }
    else
    {
    @chmod($file['open'], 0755);

    if(is_writable($file['open']))
    {
    $file_status = "<font color=green>разрешено</font>";
    }
    else
    {
    $file_status = "<font color=red>запрещено</font>";
    $chmod_errors ++;
    }
    }
    }

    $chmod_value = @decoct(@fileperms($file['open'])) % 1000;

    $content_chmod .= "<tr><td height=22>&nbsp;{$file['open']}</td>
    <td>&nbsp; $chmod_value</td>
    <td>&nbsp; $file_status</td></tr>";
    }

    if (!$chmod_errors and !$file_errors)
    {
    foreach ($edit_files as $file)
    {
    $file_edit = file_get_contents($file['open']);

    $new_file = str_replace($file['find'], $file['before'].(($file['replace']!="")?$file['replace']:$file['find'])."\n".$file['add'], $file_edit);

    $fd = @fopen($file['open'], "w+");
    fwrite($fd, $new_file);
    fclose($fd);
    @chmod($file['open'], 0644);

    }

    $content = "Файлы успешно подключены...";

    $next_act = 6;
    }

    else
    {
    $error_num = $chmod_errors + $file_errors;

    $status_report = "<font color=red>Внимание!!!</font><br /><br />Во время проверки обнаружены ошибки <b>{$error_num}</b>:<br /><br />";

    if ($chmod_errors)
    {
    $status_report = $status_report." - Запрещена запись в файлы: {$chmod_errors}. <i>(Вы должны выставить CHMOD)</i><br /><br />";
    }

    if ($file_errors)
    {
    $status_report = $status_report." - Измененные файлы: {$file_errors}. <i>(Вы должны заменить файлы на оригинальные)</i><br />";
    }

    $content = "<table border=0 width=100%>".$content_chmod."</table>".$status_report;

    $button_value = 'Обновить >';

    $next_act = 5;
    }

    break;

    case "6":

    $content = "Поздравляем Вас, DLE LineAge 1.5 был успешно установлен.<br />Вы можете, например, просмотреть теперь <a href=\"index.php?do=lineage\"> страницу статистики</a> и посмотреть возможности скрипта. Либо Вы можете <a href=\"admin.php?mod=lineage\">зайти</a> в панель управления DLE LineAge и изменить настройки системы.<br /><br />Приятной Вам работы<br /><br />hellEVIL TEAM";

    $button_value = 'Готово';

    $next_act = 7;

    break;

    case "7":

    $forum_link = $config['http_home_url'].'?do=lineage';

    header("Location: $forum_link");

    break;
    }

    $progress_array = array (
    '1' => "Требования",
    '2' => "Cоглашение",
    '3' => "CHMOD",
    '4' => "База данных",
    '5' => "Установка",
    '6' => "Завершение",
    );

    foreach ($progress_array as $prog => $name)
    {
    if ($prog == $act) $step_class = 'step_doing';

    elseif ($prog < $act) $step_class = 'step_done';

    else $step_class = 'step_notdone';

    if ($act == '6') $step_class = 'step_done';

    $progress .= "<li class='{$step_class}'>{$name}</li>";
    }

    $install_tpl = <<<HTML
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    <title>DLE Lineage</title>
    <link href="/install/style.css" rel="stylesheet" type="text/css" />
    </head>
    {$js}
    <body>
    <p>&nbsp;</p>
    <p>&nbsp;</p>
    <p>&nbsp;</p>

    <div id='ipswrapper'>
    <form id="install" method="post" action="$PHP_SELF">
    <div class='main_shell'>

    <h1><img src='/install/images/package_icon.gif' align='absmiddle' /> Установщик продуктов hellEVIL TEAM</h1>
    <div class='content_shell'>
    <div class='package'>
    <div>
    <div class='install_info'>
    <h3>Требования</h3>

    <ul id='progress'>{$progress}</ul>
    </div>

    <div class='content_wrap'>
    <div style="padding-bottom:4px; border-bottom-width:1px; border-bottom-color:rgb(147,147,147); border-bottom-style:solid;">
    <div style="vertical-align:middle;">
    <h2>DLE LineAge</h2><br /><strong>Version 1.5</strong></div>
    </div>
    <div style="clear:both;"></div>
    <div>
    <div><br />{$content}</div>
    </div></div>
    </div>
    <br clear='all' />

    <div class='hr'></div>
    <div style="padding-top:17px; padding-right:15px; padding-left:15px;">
    <div style="float:left;">
    <input type='button' class='nav_button' value='Прекратить установку' onclick="window.location='?';return false;" />
    </div>

    <div style="float:right;">
    <input type=hidden name="act" value="{$next_act}">
    <input type='submit' id='button' class='nav_button' value='{$button_value}'> </div>
    </div>
    <div style="clear:both;"></div>
    <div class='copyright'>&copy; 2008 hellEVIL TEAM</div>
    </div>

    </div>
    </div>
    </form>
    </div>

    </body>
    </html>
    HTML;

    echo $install_tpl;
    ?>


    эта часть уже поинтерресней:

    <?php
    if(!defined('DLE_LINEAGE_INSTALL'))
    {
    die("Hacking attempt!");
    }
    $edit_files = array
    (
    array
    (
    'open' => './engine/engine.php',
    'find' => 'switch ($do) {',
    'add' => 'case "lineage" :
    include ENGINE_DIR.\'/lineage/index.php\';
    break;',
    ),

    array
    (
    'open' => "./{$config['admin_path']}",
    'find' => '\'addnews\' => \'user\',',
    'add' => '\'lineage\' => \'admin\',',
    ),

    array
    (
    'open' => './engine/inc/options.php',
    'find' => '$options[\'others\'] = array(',
    'add' => 'array(
    \'name\' => "DLE Lineage",
    \'url\' => "$PHP_SELF?mod=lineage",
    \'descr\' => "Панель управления сервером Lineage.",
    \'image\' => "spset.png",
    \'access\' => "1",
    ),',
    ),

    array
    (
    'open' => './engine/init.php',
    'find' => 'require_once ENGINE_DIR.\'/modules/calendar.php\';',
    'add' => 'require_once ENGINE_DIR.\'/lineage/servl2.php\';',
    ),

    array
    (
    'open' => './index.php',
    'find' => '$tpl->set(\'{topnews}\',$topnews);',
    'add' => '$tpl->set(\'{servl2}\',$servl2); $tpl->set(\'{l2menu}\',$l2menu);',
    ),

    array
    (
    'open' => "./templates/{$config['skin']}/main.tpl",
    'find' => '<style type="text/css" media="all">@import url({THEME}/css/engine.css);</style>',
    'add' => '<style type="text/css" media="all">@import url({THEME}/lineage/css/dlelineage.css);</style>',
    ),
    );
    ?>
     
  10. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.036
    Симпатии:
    2.040
    Инсталятор сделать не так сложно:
    открыть, найти строку, заменить на 10 строк, сохранить.

    Реализация - очень проста..

    НО! Как всегда есть НО! Есть: 1) несовместимые моды. 2) возможность глюков при установке 2-го и т.д. модулей.

    Так что, сделать инсталятор можно. Но все авторы должны будут сами делать его!
     
Статус темы:
Закрыта.