Автоустановка приложений на демо сайт
Создаем контроллер в каком нибудь из приложений
- Прописываем 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);
}
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()