Автоустановка приложений на демо сайт

Создаем контроллер в каком нибудь из приложений

  • Прописываем namespace наименование приложение (папка в корне сайта, mspre)
  • Указываем ссылку demoSiteUrl на сайт куда будет отправлено приложение
    
    // core/components/minishop2/controllers/install.class.php

<?php ini_set('display_errors', 1);

if (!class_exists('msManagerController')) { require_once dirname(FILE) . '/manager.class.php'; }

/**

  • The home manager controller for mspre.
  • */ class Minishop2InstallManagerController extends msManagerController { protected $namespace = 'mspre'; protected $demoSiteUrl = 'http://s920.h1.bumodx.ru/upload.php';

    /**

    • @return string */ public function getTemplateFile() {

      // Подпись приложения берется из build.transport.php после успешной установки $signature = ''; ob_start(); require dirname(dirname(dirname(dirname(dirname(FILE))))).'/'.$this->namespace.'/_build/build.transport.php'; $html = ob_get_clean();

      // Эметируем подключения шаблона $file = $this->mspre->config['templatesPath'] . 'install.tpl';

      // Наименование файла $packname = $signature.'.transport.zip';

      // Пишем содержимое обратно в файл file_put_contents($file, '



      Установка пакета


      '.$html.'
      ');

      // Создание пути до файла $file_downloads = MODX_CORE_PATH.'packages/'.$packname;

      // Отправляем файл на сервер $this->sendDemoSite($file_downloads,$packname);

      // Возвращаем файл на скачивание клиенту $this->file_force_download_ngix($file_downloads); return $file; }

    /**

    • Отдача файла пользователю
    • @param string $file - полный путь до файла */ private function file_force_download_ngix($file) { $rFile = @fopen($file, 'r'); $rOutput = fopen('php://output', 'w'); if($rFile){ header('Content-Disposition: attachment; filename='.basename($file)); stream_copy_to_stream($rFile, $rOutput); } }

    /**

    • Отправка файла на демо сайт с последующией автоматической установкой
    • @param string $file - полный путь до файла
    • @param string $packname - полный путь до файла
    • @return string */ private function sendDemoSite($file, $packname) { $newfile = MODX_ASSETS_PATH.'extra/'.$packname; if (!copy($file, $newfile)) { echo "не удалось скопировать $file...\n"; } return file_get_contents($this->demoSiteUrl.'?packname='.$packname); } }

Создаем пункт меню

Ключ словаря: Создать пакет
Действие: install
Пространство имён: minishop2

Добавляем файл в корневую

// upload.php

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
ini_set("max_execution_time", 50);
define('MODX_API_MODE', true);
require 'index.php';

#$_GET['packname'] = 'mspre-1.1.0-beta.transport.zip';
if (isset($_GET['packname'])) {
    $packname = $_GET['packname'];

    $tmp = explode('.', $packname);
    $tmp = array_pop($tmp);
    if ($tmp == 'zip') {
        $file_url = 'http://s919.h1.bumodx.ru/assets/extra/'.$packname;
        $save_to = MODX_CORE_PATH.'packages/'.$packname;

        $content = file_get_contents($file_url);
        file_put_contents($save_to, $content);

        if (!file_exists($save_to)) {
            echo '<pre>';
            print_r('Ошибка файл не существует'); die;
        }

        // Начинаем инсталяцию файла
        /* @var modProcessorResponse $response */
        // Download Details
        /** @var string $package_url  - URL from the orange 'Download' button on the MODx Extras website */
        $package_url = $file_url;
        #$package_url = 'http://modx.com/extras/download/?id=512403a2f245547611000025';
        $package_signature = substr($packname, 0 , -14);

        if($user = $modx->getObject('modUser', 1)){
            $modx->user = $user;
        }

        $modx->user->addSessionContext('mgr');

        if (!file_exists($modx->getOption('base_path').'core/packages/'.$package_signature)) {
            // Download the package
            $modx->runProcessor('workspace/packages/rest/download',array(
                'info' => $package_url.'::'.$package_signature
            ));
        }

        // Create modTransportPackage object in new modx install
        $scan = $modx->runProcessor('workspace/packages/scanlocal');
        // Run install command
        $response = $modx->runProcessor('workspace/packages/install',array(
            'signature' => $package_signature
        ));

        $dirpath = $modx->getOption('base_path').'core/packages/'.$package_signature.'/';
        $basepath = $modx->getOption('base_path').'core/packages/'.$packname;
        unlink($basepath);

        clear_dir($dirpath);

        echo '<pre>'; 
        print_r($response->response); die;

    }

}

function myscandir($dir)
{
    $list = scandir($dir);
    unset($list[0],$list[1]);
    return array_values($list);
}
// требуется myscandir
function clear_dir($dir = ''){
    $handle = opendir($dir);
    while(false !== ($folder = readdir($handle))){
        if ($folder == '.' or $folder == '..') continue;
        if (is_dir($dir.$folder)){
            clear_dir($dir.$folder."/");
            rmdir($dir.$folder);
        }
        if (is_file($dir.$folder)){
            unlink($dir.$folder);
        }
    }
    closedir($handle);
}
22 сентября 2018, 21:27    225

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Наверх