mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-06 10:11:38 +09:00
Author name update.
NHN developers@xpressengine.com http://xpressengine.com/ git-svn-id: http://xe-core.googlecode.com/svn/sandbox@7676 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
parent
7d1fa86e5c
commit
8f385a592b
603 changed files with 67379 additions and 67522 deletions
|
|
@ -1,243 +1,243 @@
|
|||
<?php
|
||||
/**
|
||||
* @class autoinstallAdminController
|
||||
* @author sol (sol@ngleader.com)
|
||||
* @brief autoinstall 모듈의 admin controller class
|
||||
**/
|
||||
|
||||
require_once(_XE_PATH_.'modules/autoinstall/autoinstall.lib.php');
|
||||
|
||||
class autoinstallAdminController extends autoinstall {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
function checkFileCheckSum($file, $checksum){
|
||||
$local_checksum = md5_file(FileHandler::getRealPath($file));
|
||||
return ($local_checksum === $checksum);
|
||||
}
|
||||
|
||||
function _cleanDownloaded($obj){
|
||||
FileHandler::removeDir($obj->download_path);
|
||||
}
|
||||
|
||||
function procAutoinstallAdminUpdateinfo()
|
||||
{
|
||||
$oModel = &getModel('autoinstall');
|
||||
$item = $oModel->getLatestPackage();
|
||||
if($item)
|
||||
{
|
||||
$params["updatedate"] = $item->updatedate;
|
||||
}
|
||||
|
||||
$params["act"] = "getResourceapiUpdate";
|
||||
$body = XmlGenerater::generate($params);
|
||||
$buff = FileHandler::getRemoteResource($this->uri, $body, 3, "POST", "application/xml");
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->parse($buff);
|
||||
$this->updateCategory($xmlDoc);
|
||||
$this->updatePackages($xmlDoc);
|
||||
$this->checkInstalled();
|
||||
|
||||
$this->setMessage("success_updated");
|
||||
}
|
||||
|
||||
function checkInstalled()
|
||||
{
|
||||
executeQuery("autoinstall.deleteInstalledPackage");
|
||||
$oModel =& getModel('autoinstall');
|
||||
$packages = $oModel->getPackages();
|
||||
foreach($packages as $package)
|
||||
{
|
||||
$real_path = FileHandler::getRealPath($package->path);
|
||||
if(!file_exists($real_path)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$type = $oModel->getTypeFromPath($package->path);
|
||||
if($type == "core")
|
||||
{
|
||||
$version = __ZBXE_VERSION__;
|
||||
}
|
||||
else
|
||||
{
|
||||
$config_file = null;
|
||||
switch($type)
|
||||
{
|
||||
case "m.layout":
|
||||
$type = "layout";
|
||||
case "module":
|
||||
case "addon":
|
||||
case "layout":
|
||||
case "widget":
|
||||
$config_file = "/conf/info.xml";
|
||||
break;
|
||||
case "component":
|
||||
$config_file = "/info.xml";
|
||||
break;
|
||||
case "style":
|
||||
case "m.skin":
|
||||
$type = "skin";
|
||||
case "skin":
|
||||
case "widgetstyle":
|
||||
$config_file = "/skin.xml";
|
||||
break;
|
||||
case "drcomponent":
|
||||
$config_file = "/info.xml";
|
||||
$type = "component";
|
||||
break;
|
||||
}
|
||||
if(!$config_file) continue;
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->loadXmlFile($real_path.$config_file);
|
||||
if(!$xmlDoc) continue;
|
||||
$version = $xmlDoc->{$type}->version->body;
|
||||
}
|
||||
|
||||
$args = null;
|
||||
$args->package_srl = $package->package_srl;
|
||||
$args->version = $package->version;
|
||||
$args->current_version = $version;
|
||||
if(version_compare($args->version, $args->current_version, ">"))
|
||||
{
|
||||
$args->need_update="Y";
|
||||
}
|
||||
else
|
||||
{
|
||||
$args->need_update="N";
|
||||
}
|
||||
|
||||
$output = executeQuery("autoinstall.insertInstalledPackage", $args);
|
||||
}
|
||||
}
|
||||
|
||||
function procAutoinstallAdminPackageinstall()
|
||||
{
|
||||
set_time_limit(0);
|
||||
$package_srls = Context::get('package_srl');
|
||||
$oModel =& getModel('autoinstall');
|
||||
$packages = explode(',', $package_srls);
|
||||
$ftp_info = Context::getFTPInfo();
|
||||
if(!$_SESSION['ftp_password'])
|
||||
{
|
||||
$ftp_password = Context::get('ftp_password');
|
||||
}
|
||||
else
|
||||
{
|
||||
$ftp_password = $_SESSION['ftp_password'];
|
||||
}
|
||||
|
||||
foreach($packages as $package_srl)
|
||||
{
|
||||
$package = $oModel->getPackage($package_srl);
|
||||
if($ftp_info->sftp && $ftp_info->sftp == 'Y')
|
||||
{
|
||||
$oModuleInstaller = new SFTPModuleInstaller($package);
|
||||
}
|
||||
else if(function_exists(ftp_connect))
|
||||
{
|
||||
$oModuleInstaller = new PHPFTPModuleInstaller($package);
|
||||
}
|
||||
else
|
||||
{
|
||||
$oModuleInstaller = new FTPModuleInstaller($package);
|
||||
}
|
||||
|
||||
$oModuleInstaller->setPassword($ftp_password);
|
||||
$output = $oModuleInstaller->install();
|
||||
if(!$output->toBool()) return $output;
|
||||
}
|
||||
$this->setMessage('success_installed');
|
||||
}
|
||||
|
||||
function updatePackages(&$xmlDoc)
|
||||
{
|
||||
$oModel =& getModel('autoinstall');
|
||||
if(!$xmlDoc->response->packages->item) return;
|
||||
if(!is_array($xmlDoc->response->packages->item))
|
||||
{
|
||||
$xmlDoc->response->packages->item = array($xmlDoc->response->packages->item);
|
||||
}
|
||||
$targets = array('package_srl', 'updatedate', 'latest_item_srl', 'path', 'version', 'category_srl');
|
||||
foreach($xmlDoc->response->packages->item as $item)
|
||||
{
|
||||
$args = null;
|
||||
foreach($targets as $target)
|
||||
{
|
||||
$args->{$target} = $item->{$target}->body;
|
||||
}
|
||||
if($oModel->getPackage($args->package_srl))
|
||||
{
|
||||
$output = executeQuery("autoinstall.updatePackage", $args);
|
||||
}
|
||||
else
|
||||
{
|
||||
$output = executeQuery("autoinstall.insertPackage", $args);
|
||||
if(!$output->toBool())
|
||||
{
|
||||
$output = executeQuery("autoinstall.deletePackage", $args);
|
||||
$output = executeQuery("autoinstall.insertPackage", $args);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function updateCategory(&$xmlDoc)
|
||||
{
|
||||
executeQuery("autoinstall.deleteCategory", $args);
|
||||
$oModel =& getModel('autoinstall');
|
||||
if(!is_array($xmlDoc->response->categorylist->item))
|
||||
{
|
||||
$xmlDoc->response->categorylist->item = array($xmlDoc->response->categorylist->item);
|
||||
}
|
||||
foreach($xmlDoc->response->categorylist->item as $item)
|
||||
{
|
||||
$args = null;
|
||||
$args->category_srl = $item->category_srl->body;
|
||||
$args->parent_srl = $item->parent_srl->body;
|
||||
$args->title = $item->title->body;
|
||||
executeQuery("autoinstall.insertCategory", $args);
|
||||
}
|
||||
}
|
||||
|
||||
function procAutoinstallAdminUninstallPackage()
|
||||
{
|
||||
$package_srl = Context::get('package_srl');
|
||||
$oModel =& getModel('autoinstall');
|
||||
$package = $oModel->getPackage($package_srl);
|
||||
$path = $package->path;
|
||||
|
||||
if(!$_SESSION['ftp_password'])
|
||||
{
|
||||
$ftp_password = Context::get('ftp_password');
|
||||
}
|
||||
else
|
||||
{
|
||||
$ftp_password = $_SESSION['ftp_password'];
|
||||
}
|
||||
$ftp_info = Context::getFTPInfo();
|
||||
|
||||
if($ftp_info->sftp && $ftp_info->sftp == 'Y')
|
||||
{
|
||||
$oModuleInstaller = new SFTPModuleInstaller($package);
|
||||
}
|
||||
else if(function_exists(ftp_connect))
|
||||
{
|
||||
$oModuleInstaller = new PHPFTPModuleInstaller($package);
|
||||
}
|
||||
else
|
||||
{
|
||||
$oModuleInstaller = new FTPModuleInstaller($package);
|
||||
}
|
||||
|
||||
$oModuleInstaller->setPassword($ftp_password);
|
||||
$output = $oModuleInstaller->uninstall();
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class autoinstallAdminController
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief autoinstall 모듈의 admin controller class
|
||||
**/
|
||||
|
||||
require_once(_XE_PATH_.'modules/autoinstall/autoinstall.lib.php');
|
||||
|
||||
class autoinstallAdminController extends autoinstall {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
function checkFileCheckSum($file, $checksum){
|
||||
$local_checksum = md5_file(FileHandler::getRealPath($file));
|
||||
return ($local_checksum === $checksum);
|
||||
}
|
||||
|
||||
function _cleanDownloaded($obj){
|
||||
FileHandler::removeDir($obj->download_path);
|
||||
}
|
||||
|
||||
function procAutoinstallAdminUpdateinfo()
|
||||
{
|
||||
$oModel = &getModel('autoinstall');
|
||||
$item = $oModel->getLatestPackage();
|
||||
if($item)
|
||||
{
|
||||
$params["updatedate"] = $item->updatedate;
|
||||
}
|
||||
|
||||
$params["act"] = "getResourceapiUpdate";
|
||||
$body = XmlGenerater::generate($params);
|
||||
$buff = FileHandler::getRemoteResource($this->uri, $body, 3, "POST", "application/xml");
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->parse($buff);
|
||||
$this->updateCategory($xmlDoc);
|
||||
$this->updatePackages($xmlDoc);
|
||||
$this->checkInstalled();
|
||||
|
||||
$this->setMessage("success_updated");
|
||||
}
|
||||
|
||||
function checkInstalled()
|
||||
{
|
||||
executeQuery("autoinstall.deleteInstalledPackage");
|
||||
$oModel =& getModel('autoinstall');
|
||||
$packages = $oModel->getPackages();
|
||||
foreach($packages as $package)
|
||||
{
|
||||
$real_path = FileHandler::getRealPath($package->path);
|
||||
if(!file_exists($real_path)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$type = $oModel->getTypeFromPath($package->path);
|
||||
if($type == "core")
|
||||
{
|
||||
$version = __ZBXE_VERSION__;
|
||||
}
|
||||
else
|
||||
{
|
||||
$config_file = null;
|
||||
switch($type)
|
||||
{
|
||||
case "m.layout":
|
||||
$type = "layout";
|
||||
case "module":
|
||||
case "addon":
|
||||
case "layout":
|
||||
case "widget":
|
||||
$config_file = "/conf/info.xml";
|
||||
break;
|
||||
case "component":
|
||||
$config_file = "/info.xml";
|
||||
break;
|
||||
case "style":
|
||||
case "m.skin":
|
||||
$type = "skin";
|
||||
case "skin":
|
||||
case "widgetstyle":
|
||||
$config_file = "/skin.xml";
|
||||
break;
|
||||
case "drcomponent":
|
||||
$config_file = "/info.xml";
|
||||
$type = "component";
|
||||
break;
|
||||
}
|
||||
if(!$config_file) continue;
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->loadXmlFile($real_path.$config_file);
|
||||
if(!$xmlDoc) continue;
|
||||
$version = $xmlDoc->{$type}->version->body;
|
||||
}
|
||||
|
||||
$args = null;
|
||||
$args->package_srl = $package->package_srl;
|
||||
$args->version = $package->version;
|
||||
$args->current_version = $version;
|
||||
if(version_compare($args->version, $args->current_version, ">"))
|
||||
{
|
||||
$args->need_update="Y";
|
||||
}
|
||||
else
|
||||
{
|
||||
$args->need_update="N";
|
||||
}
|
||||
|
||||
$output = executeQuery("autoinstall.insertInstalledPackage", $args);
|
||||
}
|
||||
}
|
||||
|
||||
function procAutoinstallAdminPackageinstall()
|
||||
{
|
||||
set_time_limit(0);
|
||||
$package_srls = Context::get('package_srl');
|
||||
$oModel =& getModel('autoinstall');
|
||||
$packages = explode(',', $package_srls);
|
||||
$ftp_info = Context::getFTPInfo();
|
||||
if(!$_SESSION['ftp_password'])
|
||||
{
|
||||
$ftp_password = Context::get('ftp_password');
|
||||
}
|
||||
else
|
||||
{
|
||||
$ftp_password = $_SESSION['ftp_password'];
|
||||
}
|
||||
|
||||
foreach($packages as $package_srl)
|
||||
{
|
||||
$package = $oModel->getPackage($package_srl);
|
||||
if($ftp_info->sftp && $ftp_info->sftp == 'Y')
|
||||
{
|
||||
$oModuleInstaller = new SFTPModuleInstaller($package);
|
||||
}
|
||||
else if(function_exists(ftp_connect))
|
||||
{
|
||||
$oModuleInstaller = new PHPFTPModuleInstaller($package);
|
||||
}
|
||||
else
|
||||
{
|
||||
$oModuleInstaller = new FTPModuleInstaller($package);
|
||||
}
|
||||
|
||||
$oModuleInstaller->setPassword($ftp_password);
|
||||
$output = $oModuleInstaller->install();
|
||||
if(!$output->toBool()) return $output;
|
||||
}
|
||||
$this->setMessage('success_installed');
|
||||
}
|
||||
|
||||
function updatePackages(&$xmlDoc)
|
||||
{
|
||||
$oModel =& getModel('autoinstall');
|
||||
if(!$xmlDoc->response->packages->item) return;
|
||||
if(!is_array($xmlDoc->response->packages->item))
|
||||
{
|
||||
$xmlDoc->response->packages->item = array($xmlDoc->response->packages->item);
|
||||
}
|
||||
$targets = array('package_srl', 'updatedate', 'latest_item_srl', 'path', 'version', 'category_srl');
|
||||
foreach($xmlDoc->response->packages->item as $item)
|
||||
{
|
||||
$args = null;
|
||||
foreach($targets as $target)
|
||||
{
|
||||
$args->{$target} = $item->{$target}->body;
|
||||
}
|
||||
if($oModel->getPackage($args->package_srl))
|
||||
{
|
||||
$output = executeQuery("autoinstall.updatePackage", $args);
|
||||
}
|
||||
else
|
||||
{
|
||||
$output = executeQuery("autoinstall.insertPackage", $args);
|
||||
if(!$output->toBool())
|
||||
{
|
||||
$output = executeQuery("autoinstall.deletePackage", $args);
|
||||
$output = executeQuery("autoinstall.insertPackage", $args);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function updateCategory(&$xmlDoc)
|
||||
{
|
||||
executeQuery("autoinstall.deleteCategory", $args);
|
||||
$oModel =& getModel('autoinstall');
|
||||
if(!is_array($xmlDoc->response->categorylist->item))
|
||||
{
|
||||
$xmlDoc->response->categorylist->item = array($xmlDoc->response->categorylist->item);
|
||||
}
|
||||
foreach($xmlDoc->response->categorylist->item as $item)
|
||||
{
|
||||
$args = null;
|
||||
$args->category_srl = $item->category_srl->body;
|
||||
$args->parent_srl = $item->parent_srl->body;
|
||||
$args->title = $item->title->body;
|
||||
executeQuery("autoinstall.insertCategory", $args);
|
||||
}
|
||||
}
|
||||
|
||||
function procAutoinstallAdminUninstallPackage()
|
||||
{
|
||||
$package_srl = Context::get('package_srl');
|
||||
$oModel =& getModel('autoinstall');
|
||||
$package = $oModel->getPackage($package_srl);
|
||||
$path = $package->path;
|
||||
|
||||
if(!$_SESSION['ftp_password'])
|
||||
{
|
||||
$ftp_password = Context::get('ftp_password');
|
||||
}
|
||||
else
|
||||
{
|
||||
$ftp_password = $_SESSION['ftp_password'];
|
||||
}
|
||||
$ftp_info = Context::getFTPInfo();
|
||||
|
||||
if($ftp_info->sftp && $ftp_info->sftp == 'Y')
|
||||
{
|
||||
$oModuleInstaller = new SFTPModuleInstaller($package);
|
||||
}
|
||||
else if(function_exists(ftp_connect))
|
||||
{
|
||||
$oModuleInstaller = new PHPFTPModuleInstaller($package);
|
||||
}
|
||||
else
|
||||
{
|
||||
$oModuleInstaller = new FTPModuleInstaller($package);
|
||||
}
|
||||
|
||||
$oModuleInstaller->setPassword($ftp_password);
|
||||
$output = $oModuleInstaller->uninstall();
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,319 +1,319 @@
|
|||
<?php
|
||||
/**
|
||||
* @class autoinstallAdminView
|
||||
* @author sol (sol@ngleader.com)
|
||||
* @brief autoinstall 모듈의 admin view class
|
||||
**/
|
||||
|
||||
|
||||
class autoinstallAdminView extends autoinstall {
|
||||
|
||||
var $categories;
|
||||
var $ftp_set = false;
|
||||
|
||||
function init() {
|
||||
$template_path = sprintf("%stpl/",$this->module_path);
|
||||
Context::set('original_site', $this->original_site);
|
||||
Context::set('uri', $this->uri);
|
||||
$this->setTemplatePath($template_path);
|
||||
|
||||
$ftp_info = Context::getFTPInfo();
|
||||
if(!$ftp_info->ftp_root_path) Context::set('show_ftp_note', true);
|
||||
else $this->ftp_set = true;
|
||||
|
||||
|
||||
$this->dispCategory();
|
||||
$oModel = &getModel('autoinstall');
|
||||
Context::set('tCount', $oModel->getPackageCount(null));
|
||||
Context::set('iCount', $oModel->getInstalledPackageCount());
|
||||
}
|
||||
|
||||
function rearrange(&$item, &$targets)
|
||||
{
|
||||
$ret = null;
|
||||
foreach($targets as $target)
|
||||
{
|
||||
$ret->{$target} = $item->{$target}->body;
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
function rearranges($items, $packages = null)
|
||||
{
|
||||
if(!is_array($items)) $items = array($items);
|
||||
$item_list = array();
|
||||
$targets = array('category_srl', 'package_srl', 'item_screenshot_url', 'package_voted', 'package_voter', 'package_description', 'package_downloaded', 'item_regdate', 'title', 'item_version', 'package_star', 'depfrom');
|
||||
$targetpackages = array();
|
||||
foreach($items as $item)
|
||||
{
|
||||
$targetpackages[$item->package_srl->body] = 0;
|
||||
}
|
||||
$oModel = &getModel('autoinstall');
|
||||
if($package == null)
|
||||
$packages = $oModel->getInstalledPackages(array_keys($targetpackages));
|
||||
$depto = array();
|
||||
foreach($items as $item)
|
||||
{
|
||||
$v = $this->rearrange($item, $targets);
|
||||
if($packages[$v->package_srl])
|
||||
{
|
||||
$v->current_version = $packages[$v->package_srl]->current_version;
|
||||
$v->need_update = $packages[$v->package_srl]->need_update;
|
||||
$v->type = $oModel->getTypeFromPath($packages[$v->package_srl]->path);
|
||||
if($this->ftp_set && $v->depfrom) {
|
||||
$depfrom = explode("," , $v->depfrom);
|
||||
foreach($depfrom as $package_srl)
|
||||
{
|
||||
$depto[$package_srl][] = $v->package_srl;
|
||||
}
|
||||
}
|
||||
if($v->type == "core") $v->avail_remove = false;
|
||||
else if($v->type == "module") {
|
||||
$v->avail_remove = $oModel->checkRemovable($packages[$v->package_srl]->path);
|
||||
}
|
||||
else $v->avail_remove = true;
|
||||
}
|
||||
$item_list[$v->package_srl] = $v;
|
||||
}
|
||||
|
||||
if(count($depto) > 0)
|
||||
{
|
||||
$installed = $oModel->getInstalledPackages(implode(",", array_keys($depto)));
|
||||
foreach($installed as $key=>$val)
|
||||
{
|
||||
$path = $val->path;
|
||||
$type = $oModel->getTypeFromPath($path);
|
||||
if(!$type || $type == "core") continue;
|
||||
$config_file = $oModel->getConfigFilePath($type);
|
||||
if(!$config_file) continue;
|
||||
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->loadXmlFile(FileHandler::getRealPath($path).$config_file);
|
||||
if(!$xmlDoc) continue;
|
||||
if($type == "drcomponent") $type = "component";
|
||||
if($type == "style" || $type == "m.skin") $type = "skin";
|
||||
if($type == "m.layout") $type = "layout";
|
||||
$title = $xmlDoc->{$type}->title->body;
|
||||
$installed[$key]->title = $title;
|
||||
}
|
||||
Context::set('installed', $installed);
|
||||
foreach($installed as $key=>$val)
|
||||
{
|
||||
foreach($depto[$key] as $package_srl)
|
||||
{
|
||||
$item_list[$package_srl]->avail_remove = false;
|
||||
$item_list[$package_srl]->deps[] = $key;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $item_list;
|
||||
}
|
||||
|
||||
function dispAutoinstallAdminInstalledPackages()
|
||||
{
|
||||
$page = Context::get('page');
|
||||
if(!$page) $page = 1;
|
||||
Context::set('page', $page);
|
||||
$oModel = &getModel('autoinstall');
|
||||
$output = $oModel->getInstalledPackageList($page);
|
||||
$package_list = $output->data;
|
||||
|
||||
$params["act"] = "getResourceapiPackages";
|
||||
$params["package_srls"] = implode(",", array_keys($package_list));
|
||||
$body = XmlGenerater::generate($params);
|
||||
$buff = FileHandler::getRemoteResource($this->uri, $body, 3, "POST", "application/xml");
|
||||
$xml_lUpdate = new XmlParser();
|
||||
$xmlDoc = $xml_lUpdate->parse($buff);
|
||||
if($xmlDoc && $xmlDoc->response->packagelist->item)
|
||||
{
|
||||
$item_list = $this->rearranges($xmlDoc->response->packagelist->item, $package_list);
|
||||
$res = array();
|
||||
foreach($package_list as $package_srl => $package)
|
||||
{
|
||||
$res[] = $item_list[$package_srl];
|
||||
}
|
||||
Context::set('item_list', $res);
|
||||
}
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
$this->setTemplateFile('index');
|
||||
}
|
||||
|
||||
function dispAutoinstallAdminInstall() {
|
||||
$package_srl = Context::get('package_srl');
|
||||
if(!$package_srl) return $this->dispAutoinstallAdminIndex();
|
||||
|
||||
$params["act"] = "getResourceapiInstallInfo";
|
||||
$params["package_srl"] = $package_srl;
|
||||
$xmlDoc = XmlGenerater::getXmlDoc($params);
|
||||
$oModel = &getModel('autoinstall');
|
||||
|
||||
$targetpackages = array();
|
||||
if($xmlDoc)
|
||||
{
|
||||
$xmlPackage =& $xmlDoc->response->package;
|
||||
$package->package_srl = $xmlPackage->package_srl->body;
|
||||
$package->title = $xmlPackage->title->body;
|
||||
$package->package_description = $xmlPackage->package_description->body;
|
||||
$package->version = $xmlPackage->version->body;
|
||||
$package->path = $xmlPackage->path->body;
|
||||
if($xmlPackage->depends)
|
||||
{
|
||||
if(!is_array($xmlPackage->depends->item)) $xmlPackage->depends->item = array($xmlPackage->depends->item);
|
||||
$package->depends = array();
|
||||
foreach($xmlPackage->depends->item as $item)
|
||||
{
|
||||
$dep_item = null;
|
||||
$dep_item->package_srl = $item->package_srl->body;
|
||||
$dep_item->title = $item->title->body;
|
||||
$dep_item->version = $item->version->body;
|
||||
$dep_item->path = $item->path->body;
|
||||
$package->depends[] = $dep_item;
|
||||
$targetpackages[$dep_item->package_srl] = 1;
|
||||
}
|
||||
$packages = $oModel->getInstalledPackages(array_keys($targetpackages));
|
||||
$package->deplist = "";
|
||||
foreach($package->depends as $key => $dep)
|
||||
{
|
||||
if(!$packages[$dep->package_srl]) {
|
||||
$package->depends[$key]->installed = false;
|
||||
$package->package_srl .= ",". $dep->package_srl;
|
||||
}
|
||||
else {
|
||||
$package->depends[$key]->installed = true;
|
||||
$package->depends[$key]->cur_version = $packages[$dep->package_srl]->current_version;
|
||||
if(version_compare($dep->version, $packages[$dep->package_srl]->current_version, ">"))
|
||||
{
|
||||
$package->depends[$key]->need_update = true;
|
||||
$package->package_srl .= ",". $dep->package_srl;
|
||||
}
|
||||
else
|
||||
{
|
||||
$package->need_update = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$installedPackage = $oModel->getInstalledPackage($package_srl);
|
||||
if($installedPackage) {
|
||||
$package->installed = true;
|
||||
$package->cur_version = $installedPackage->current_version;
|
||||
$package->need_update = version_compare($package->version, $installedPackage->current_version, ">");
|
||||
}
|
||||
|
||||
Context::set("package", $package);
|
||||
}
|
||||
if(!$_SESSION['ftp_password'])
|
||||
{
|
||||
Context::set('need_password', true);
|
||||
}
|
||||
$this->setTemplateFile('install');
|
||||
}
|
||||
|
||||
function dispAutoinstallAdminIndex() {
|
||||
$oModuleModel = &getModel('module');
|
||||
$config = $oModuleModel->getModuleConfig('autoinstall');
|
||||
$ftp_info = Context::getFTPInfo();
|
||||
if(!$ftp_info->ftp_root_path) Context::set('show_ftp_note', true);
|
||||
|
||||
$this->setTemplateFile('index');
|
||||
|
||||
$params = array();
|
||||
$params["act"] = "getResourceapiLastupdate";
|
||||
$body = XmlGenerater::generate($params);
|
||||
$buff = FileHandler::getRemoteResource($this->uri, $body, 3, "POST", "application/xml");
|
||||
$xml_lUpdate = new XmlParser();
|
||||
$lUpdateDoc = $xml_lUpdate->parse($buff);
|
||||
$updateDate = $lUpdateDoc->response->updatedate->body;
|
||||
|
||||
$oModel = &getModel('autoinstall');
|
||||
$item = $oModel->getLatestPackage();
|
||||
if(!$item || $item->updatedate < $updateDate || count($this->categories) < 1)
|
||||
{
|
||||
Context::set('need_update', true);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$page = Context::get('page');
|
||||
if(!$page) $page = 1;
|
||||
Context::set('page', $page);
|
||||
|
||||
$order_type = Context::get('order_type');
|
||||
if(!in_array($order_type, array('asc', 'desc'))) $order_type = 'desc';
|
||||
Context::set('order_type', $order_type);
|
||||
|
||||
$order_target = Context::get('order_target');
|
||||
if(!in_array($order_target, array('newest', 'download', 'popular'))) $order_target = 'newest';
|
||||
Context::set('order_target', $order_target);
|
||||
|
||||
$search_keyword = Context::get('search_keyword');
|
||||
|
||||
$childrenList = Context::get('childrenList');
|
||||
$category_srl = Context::get('category_srl');
|
||||
if($childrenList) $params["category_srl"] = $childrenList;
|
||||
else if($category_srl) $params["category_srl"] = $category_srl;
|
||||
|
||||
$params["act"] = "getResourceapiPackagelist";
|
||||
$params["order_target"] = $order_target;
|
||||
$params["order_type"] = $order_type;
|
||||
$params["page"] = $page;
|
||||
if($search_keyword)
|
||||
{
|
||||
$params["search_keyword"] = $search_keyword;
|
||||
}
|
||||
$xmlDoc = XmlGenerater::getXmlDoc($params);
|
||||
if($xmlDoc && $xmlDoc->response->packagelist->item)
|
||||
{
|
||||
$item_list = $this->rearranges($xmlDoc->response->packagelist->item);
|
||||
Context::set('item_list', $item_list);
|
||||
$array = array('total_count', 'total_page', 'cur_page', 'page_count', 'first_page', 'last_page');
|
||||
$page_nav = $this->rearrange($xmlDoc->response->page_navigation, $array);
|
||||
$page_navigation = new PageHandler($page_nav->total_count, $page_nav->total_page, $page_nav->cur_page, $page_nav->page_count);
|
||||
Context::set('page_navigation', $page_navigation);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function dispCategory()
|
||||
{
|
||||
$oModel = &getModel('autoinstall');
|
||||
$this->categories = &$oModel->getCategoryList();
|
||||
Context::set('categories', $this->categories);
|
||||
}
|
||||
|
||||
function dispAutoinstallAdminUninstall()
|
||||
{
|
||||
$package_srl = Context::get('package_srl');
|
||||
if(!$package_srl) return $this->dispAutoinstallAdminIndex();
|
||||
$oModel =& getModel('autoinstall');
|
||||
$installedPackage = $oModel->getInstalledPackage($package_srl);
|
||||
if(!$installedPackage) return $this->dispAutoinstallAdminInstalledPackages();
|
||||
|
||||
if(!$_SESSION['ftp_password'])
|
||||
{
|
||||
Context::set('need_password', true);
|
||||
}
|
||||
$installedPackage = $oModel->getPackage($package_srl);
|
||||
$path = $installedPackage->path;
|
||||
$type = $oModel->getTypeFromPath($path);
|
||||
if(!$type || $type == "core") $this->stop("msg_invalid_request");
|
||||
$config_file = $oModel->getConfigFilePath($type);
|
||||
if(!$config_file) $this->stop("msg_invalid_request");
|
||||
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->loadXmlFile(FileHandler::getRealPath($path).$config_file);
|
||||
if(!$xmlDoc) $this->stop("msg_invalid_request");
|
||||
if($type == "drcomponent") $type = "component";
|
||||
if($type == "style") $type = "skin";
|
||||
$title = $xmlDoc->{$type}->title->body;
|
||||
$installedPackage->title = $title;
|
||||
$installedPackage->type = $type;
|
||||
Context::set('package', $installedPackage);
|
||||
|
||||
$this->setTemplateFile('uninstall');
|
||||
Context::addJsFilter($this->module_path.'tpl/filter', 'uninstall_package.xml');
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class autoinstallAdminView
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief autoinstall 모듈의 admin view class
|
||||
**/
|
||||
|
||||
|
||||
class autoinstallAdminView extends autoinstall {
|
||||
|
||||
var $categories;
|
||||
var $ftp_set = false;
|
||||
|
||||
function init() {
|
||||
$template_path = sprintf("%stpl/",$this->module_path);
|
||||
Context::set('original_site', $this->original_site);
|
||||
Context::set('uri', $this->uri);
|
||||
$this->setTemplatePath($template_path);
|
||||
|
||||
$ftp_info = Context::getFTPInfo();
|
||||
if(!$ftp_info->ftp_root_path) Context::set('show_ftp_note', true);
|
||||
else $this->ftp_set = true;
|
||||
|
||||
|
||||
$this->dispCategory();
|
||||
$oModel = &getModel('autoinstall');
|
||||
Context::set('tCount', $oModel->getPackageCount(null));
|
||||
Context::set('iCount', $oModel->getInstalledPackageCount());
|
||||
}
|
||||
|
||||
function rearrange(&$item, &$targets)
|
||||
{
|
||||
$ret = null;
|
||||
foreach($targets as $target)
|
||||
{
|
||||
$ret->{$target} = $item->{$target}->body;
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
function rearranges($items, $packages = null)
|
||||
{
|
||||
if(!is_array($items)) $items = array($items);
|
||||
$item_list = array();
|
||||
$targets = array('category_srl', 'package_srl', 'item_screenshot_url', 'package_voted', 'package_voter', 'package_description', 'package_downloaded', 'item_regdate', 'title', 'item_version', 'package_star', 'depfrom');
|
||||
$targetpackages = array();
|
||||
foreach($items as $item)
|
||||
{
|
||||
$targetpackages[$item->package_srl->body] = 0;
|
||||
}
|
||||
$oModel = &getModel('autoinstall');
|
||||
if($package == null)
|
||||
$packages = $oModel->getInstalledPackages(array_keys($targetpackages));
|
||||
$depto = array();
|
||||
foreach($items as $item)
|
||||
{
|
||||
$v = $this->rearrange($item, $targets);
|
||||
if($packages[$v->package_srl])
|
||||
{
|
||||
$v->current_version = $packages[$v->package_srl]->current_version;
|
||||
$v->need_update = $packages[$v->package_srl]->need_update;
|
||||
$v->type = $oModel->getTypeFromPath($packages[$v->package_srl]->path);
|
||||
if($this->ftp_set && $v->depfrom) {
|
||||
$depfrom = explode("," , $v->depfrom);
|
||||
foreach($depfrom as $package_srl)
|
||||
{
|
||||
$depto[$package_srl][] = $v->package_srl;
|
||||
}
|
||||
}
|
||||
if($v->type == "core") $v->avail_remove = false;
|
||||
else if($v->type == "module") {
|
||||
$v->avail_remove = $oModel->checkRemovable($packages[$v->package_srl]->path);
|
||||
}
|
||||
else $v->avail_remove = true;
|
||||
}
|
||||
$item_list[$v->package_srl] = $v;
|
||||
}
|
||||
|
||||
if(count($depto) > 0)
|
||||
{
|
||||
$installed = $oModel->getInstalledPackages(implode(",", array_keys($depto)));
|
||||
foreach($installed as $key=>$val)
|
||||
{
|
||||
$path = $val->path;
|
||||
$type = $oModel->getTypeFromPath($path);
|
||||
if(!$type || $type == "core") continue;
|
||||
$config_file = $oModel->getConfigFilePath($type);
|
||||
if(!$config_file) continue;
|
||||
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->loadXmlFile(FileHandler::getRealPath($path).$config_file);
|
||||
if(!$xmlDoc) continue;
|
||||
if($type == "drcomponent") $type = "component";
|
||||
if($type == "style" || $type == "m.skin") $type = "skin";
|
||||
if($type == "m.layout") $type = "layout";
|
||||
$title = $xmlDoc->{$type}->title->body;
|
||||
$installed[$key]->title = $title;
|
||||
}
|
||||
Context::set('installed', $installed);
|
||||
foreach($installed as $key=>$val)
|
||||
{
|
||||
foreach($depto[$key] as $package_srl)
|
||||
{
|
||||
$item_list[$package_srl]->avail_remove = false;
|
||||
$item_list[$package_srl]->deps[] = $key;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $item_list;
|
||||
}
|
||||
|
||||
function dispAutoinstallAdminInstalledPackages()
|
||||
{
|
||||
$page = Context::get('page');
|
||||
if(!$page) $page = 1;
|
||||
Context::set('page', $page);
|
||||
$oModel = &getModel('autoinstall');
|
||||
$output = $oModel->getInstalledPackageList($page);
|
||||
$package_list = $output->data;
|
||||
|
||||
$params["act"] = "getResourceapiPackages";
|
||||
$params["package_srls"] = implode(",", array_keys($package_list));
|
||||
$body = XmlGenerater::generate($params);
|
||||
$buff = FileHandler::getRemoteResource($this->uri, $body, 3, "POST", "application/xml");
|
||||
$xml_lUpdate = new XmlParser();
|
||||
$xmlDoc = $xml_lUpdate->parse($buff);
|
||||
if($xmlDoc && $xmlDoc->response->packagelist->item)
|
||||
{
|
||||
$item_list = $this->rearranges($xmlDoc->response->packagelist->item, $package_list);
|
||||
$res = array();
|
||||
foreach($package_list as $package_srl => $package)
|
||||
{
|
||||
$res[] = $item_list[$package_srl];
|
||||
}
|
||||
Context::set('item_list', $res);
|
||||
}
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
$this->setTemplateFile('index');
|
||||
}
|
||||
|
||||
function dispAutoinstallAdminInstall() {
|
||||
$package_srl = Context::get('package_srl');
|
||||
if(!$package_srl) return $this->dispAutoinstallAdminIndex();
|
||||
|
||||
$params["act"] = "getResourceapiInstallInfo";
|
||||
$params["package_srl"] = $package_srl;
|
||||
$xmlDoc = XmlGenerater::getXmlDoc($params);
|
||||
$oModel = &getModel('autoinstall');
|
||||
|
||||
$targetpackages = array();
|
||||
if($xmlDoc)
|
||||
{
|
||||
$xmlPackage =& $xmlDoc->response->package;
|
||||
$package->package_srl = $xmlPackage->package_srl->body;
|
||||
$package->title = $xmlPackage->title->body;
|
||||
$package->package_description = $xmlPackage->package_description->body;
|
||||
$package->version = $xmlPackage->version->body;
|
||||
$package->path = $xmlPackage->path->body;
|
||||
if($xmlPackage->depends)
|
||||
{
|
||||
if(!is_array($xmlPackage->depends->item)) $xmlPackage->depends->item = array($xmlPackage->depends->item);
|
||||
$package->depends = array();
|
||||
foreach($xmlPackage->depends->item as $item)
|
||||
{
|
||||
$dep_item = null;
|
||||
$dep_item->package_srl = $item->package_srl->body;
|
||||
$dep_item->title = $item->title->body;
|
||||
$dep_item->version = $item->version->body;
|
||||
$dep_item->path = $item->path->body;
|
||||
$package->depends[] = $dep_item;
|
||||
$targetpackages[$dep_item->package_srl] = 1;
|
||||
}
|
||||
$packages = $oModel->getInstalledPackages(array_keys($targetpackages));
|
||||
$package->deplist = "";
|
||||
foreach($package->depends as $key => $dep)
|
||||
{
|
||||
if(!$packages[$dep->package_srl]) {
|
||||
$package->depends[$key]->installed = false;
|
||||
$package->package_srl .= ",". $dep->package_srl;
|
||||
}
|
||||
else {
|
||||
$package->depends[$key]->installed = true;
|
||||
$package->depends[$key]->cur_version = $packages[$dep->package_srl]->current_version;
|
||||
if(version_compare($dep->version, $packages[$dep->package_srl]->current_version, ">"))
|
||||
{
|
||||
$package->depends[$key]->need_update = true;
|
||||
$package->package_srl .= ",". $dep->package_srl;
|
||||
}
|
||||
else
|
||||
{
|
||||
$package->need_update = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$installedPackage = $oModel->getInstalledPackage($package_srl);
|
||||
if($installedPackage) {
|
||||
$package->installed = true;
|
||||
$package->cur_version = $installedPackage->current_version;
|
||||
$package->need_update = version_compare($package->version, $installedPackage->current_version, ">");
|
||||
}
|
||||
|
||||
Context::set("package", $package);
|
||||
}
|
||||
if(!$_SESSION['ftp_password'])
|
||||
{
|
||||
Context::set('need_password', true);
|
||||
}
|
||||
$this->setTemplateFile('install');
|
||||
}
|
||||
|
||||
function dispAutoinstallAdminIndex() {
|
||||
$oModuleModel = &getModel('module');
|
||||
$config = $oModuleModel->getModuleConfig('autoinstall');
|
||||
$ftp_info = Context::getFTPInfo();
|
||||
if(!$ftp_info->ftp_root_path) Context::set('show_ftp_note', true);
|
||||
|
||||
$this->setTemplateFile('index');
|
||||
|
||||
$params = array();
|
||||
$params["act"] = "getResourceapiLastupdate";
|
||||
$body = XmlGenerater::generate($params);
|
||||
$buff = FileHandler::getRemoteResource($this->uri, $body, 3, "POST", "application/xml");
|
||||
$xml_lUpdate = new XmlParser();
|
||||
$lUpdateDoc = $xml_lUpdate->parse($buff);
|
||||
$updateDate = $lUpdateDoc->response->updatedate->body;
|
||||
|
||||
$oModel = &getModel('autoinstall');
|
||||
$item = $oModel->getLatestPackage();
|
||||
if(!$item || $item->updatedate < $updateDate || count($this->categories) < 1)
|
||||
{
|
||||
Context::set('need_update', true);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
$page = Context::get('page');
|
||||
if(!$page) $page = 1;
|
||||
Context::set('page', $page);
|
||||
|
||||
$order_type = Context::get('order_type');
|
||||
if(!in_array($order_type, array('asc', 'desc'))) $order_type = 'desc';
|
||||
Context::set('order_type', $order_type);
|
||||
|
||||
$order_target = Context::get('order_target');
|
||||
if(!in_array($order_target, array('newest', 'download', 'popular'))) $order_target = 'newest';
|
||||
Context::set('order_target', $order_target);
|
||||
|
||||
$search_keyword = Context::get('search_keyword');
|
||||
|
||||
$childrenList = Context::get('childrenList');
|
||||
$category_srl = Context::get('category_srl');
|
||||
if($childrenList) $params["category_srl"] = $childrenList;
|
||||
else if($category_srl) $params["category_srl"] = $category_srl;
|
||||
|
||||
$params["act"] = "getResourceapiPackagelist";
|
||||
$params["order_target"] = $order_target;
|
||||
$params["order_type"] = $order_type;
|
||||
$params["page"] = $page;
|
||||
if($search_keyword)
|
||||
{
|
||||
$params["search_keyword"] = $search_keyword;
|
||||
}
|
||||
$xmlDoc = XmlGenerater::getXmlDoc($params);
|
||||
if($xmlDoc && $xmlDoc->response->packagelist->item)
|
||||
{
|
||||
$item_list = $this->rearranges($xmlDoc->response->packagelist->item);
|
||||
Context::set('item_list', $item_list);
|
||||
$array = array('total_count', 'total_page', 'cur_page', 'page_count', 'first_page', 'last_page');
|
||||
$page_nav = $this->rearrange($xmlDoc->response->page_navigation, $array);
|
||||
$page_navigation = new PageHandler($page_nav->total_count, $page_nav->total_page, $page_nav->cur_page, $page_nav->page_count);
|
||||
Context::set('page_navigation', $page_navigation);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function dispCategory()
|
||||
{
|
||||
$oModel = &getModel('autoinstall');
|
||||
$this->categories = &$oModel->getCategoryList();
|
||||
Context::set('categories', $this->categories);
|
||||
}
|
||||
|
||||
function dispAutoinstallAdminUninstall()
|
||||
{
|
||||
$package_srl = Context::get('package_srl');
|
||||
if(!$package_srl) return $this->dispAutoinstallAdminIndex();
|
||||
$oModel =& getModel('autoinstall');
|
||||
$installedPackage = $oModel->getInstalledPackage($package_srl);
|
||||
if(!$installedPackage) return $this->dispAutoinstallAdminInstalledPackages();
|
||||
|
||||
if(!$_SESSION['ftp_password'])
|
||||
{
|
||||
Context::set('need_password', true);
|
||||
}
|
||||
$installedPackage = $oModel->getPackage($package_srl);
|
||||
$path = $installedPackage->path;
|
||||
$type = $oModel->getTypeFromPath($path);
|
||||
if(!$type || $type == "core") $this->stop("msg_invalid_request");
|
||||
$config_file = $oModel->getConfigFilePath($type);
|
||||
if(!$config_file) $this->stop("msg_invalid_request");
|
||||
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->loadXmlFile(FileHandler::getRealPath($path).$config_file);
|
||||
if(!$xmlDoc) $this->stop("msg_invalid_request");
|
||||
if($type == "drcomponent") $type = "component";
|
||||
if($type == "style") $type = "skin";
|
||||
$title = $xmlDoc->{$type}->title->body;
|
||||
$installedPackage->title = $title;
|
||||
$installedPackage->type = $type;
|
||||
Context::set('package', $installedPackage);
|
||||
|
||||
$this->setTemplateFile('uninstall');
|
||||
Context::addJsFilter($this->module_path.'tpl/filter', 'uninstall_package.xml');
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,87 +1,87 @@
|
|||
<?php
|
||||
/**
|
||||
* @class autoinstall
|
||||
* @author sol (sol@ngleader.com)
|
||||
* @brief autoinstall 모듈의 high class
|
||||
**/
|
||||
|
||||
class XmlGenerater {
|
||||
function generate(&$params)
|
||||
{
|
||||
$xmlDoc = '<?xml version="1.0" encoding="utf-8" ?><methodCall><params>';
|
||||
if(!is_array($params)) return null;
|
||||
$params["module"] = "resourceapi";
|
||||
foreach($params as $key => $val)
|
||||
{
|
||||
$xmlDoc .= sprintf("<%s><![CDATA[%s]]></%s>", $key, $val, $key);
|
||||
}
|
||||
$xmlDoc .= "</params></methodCall>";
|
||||
return $xmlDoc;
|
||||
}
|
||||
|
||||
function getXmlDoc(&$params)
|
||||
{
|
||||
$body = XmlGenerater::generate($params);
|
||||
$buff = FileHandler::getRemoteResource($this->uri, $body, 3, "POST", "application/xml");
|
||||
if(!$buff) return;
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->parse($buff);
|
||||
return $xmlDoc;
|
||||
}
|
||||
}
|
||||
|
||||
class autoinstall extends ModuleObject {
|
||||
var $uri = "http://download.xpressengine.com/";
|
||||
var $original_site = "http://www.xpressengine.com/";
|
||||
var $tmp_dir = './files/cache/autoinstall/';
|
||||
|
||||
/**
|
||||
* @brief 설치시 추가 작업이 필요할시 구현
|
||||
**/
|
||||
function moduleInstall() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
**/
|
||||
function checkUpdate() {
|
||||
$oDB =& DB::getInstance();
|
||||
if(!file_exists(FileHandler::getRealPath("./modules/autoinstall/schemas/autoinstall_installed_packages.xml"))
|
||||
&& $oDB->isTableExists("autoinstall_installed_packages"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if(!file_exists(FileHandler::getRealPath("./modules/autoinstall/schemas/autoinstall_remote_categories.xml"))
|
||||
&& $oDB->isTableExists("autoinstall_remote_categories"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 업데이트 실행
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
$oDB =& DB::getInstance();
|
||||
if(!file_exists(FileHandler::getRealPath("./modules/autoinstall/schemas/autoinstall_installed_packages.xml"))
|
||||
&& $oDB->isTableExists("autoinstall_installed_packages"))
|
||||
{
|
||||
$oDB->dropTable("autoinstall_installed_packages");
|
||||
}
|
||||
if(!file_exists(FileHandler::getRealPath("./modules/autoinstall/schemas/autoinstall_remote_categories.xml"))
|
||||
&& $oDB->isTableExists("autoinstall_remote_categories"))
|
||||
{
|
||||
$oDB->dropTable("autoinstall_remote_categories");
|
||||
}
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 캐시 파일 재생성
|
||||
**/
|
||||
function recompileCache() {
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class autoinstall
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief autoinstall 모듈의 high class
|
||||
**/
|
||||
|
||||
class XmlGenerater {
|
||||
function generate(&$params)
|
||||
{
|
||||
$xmlDoc = '<?xml version="1.0" encoding="utf-8" ?><methodCall><params>';
|
||||
if(!is_array($params)) return null;
|
||||
$params["module"] = "resourceapi";
|
||||
foreach($params as $key => $val)
|
||||
{
|
||||
$xmlDoc .= sprintf("<%s><![CDATA[%s]]></%s>", $key, $val, $key);
|
||||
}
|
||||
$xmlDoc .= "</params></methodCall>";
|
||||
return $xmlDoc;
|
||||
}
|
||||
|
||||
function getXmlDoc(&$params)
|
||||
{
|
||||
$body = XmlGenerater::generate($params);
|
||||
$buff = FileHandler::getRemoteResource($this->uri, $body, 3, "POST", "application/xml");
|
||||
if(!$buff) return;
|
||||
$xml = new XmlParser();
|
||||
$xmlDoc = $xml->parse($buff);
|
||||
return $xmlDoc;
|
||||
}
|
||||
}
|
||||
|
||||
class autoinstall extends ModuleObject {
|
||||
var $uri = "http://download.xpressengine.com/";
|
||||
var $original_site = "http://www.xpressengine.com/";
|
||||
var $tmp_dir = './files/cache/autoinstall/';
|
||||
|
||||
/**
|
||||
* @brief 설치시 추가 작업이 필요할시 구현
|
||||
**/
|
||||
function moduleInstall() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
**/
|
||||
function checkUpdate() {
|
||||
$oDB =& DB::getInstance();
|
||||
if(!file_exists(FileHandler::getRealPath("./modules/autoinstall/schemas/autoinstall_installed_packages.xml"))
|
||||
&& $oDB->isTableExists("autoinstall_installed_packages"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if(!file_exists(FileHandler::getRealPath("./modules/autoinstall/schemas/autoinstall_remote_categories.xml"))
|
||||
&& $oDB->isTableExists("autoinstall_remote_categories"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 업데이트 실행
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
$oDB =& DB::getInstance();
|
||||
if(!file_exists(FileHandler::getRealPath("./modules/autoinstall/schemas/autoinstall_installed_packages.xml"))
|
||||
&& $oDB->isTableExists("autoinstall_installed_packages"))
|
||||
{
|
||||
$oDB->dropTable("autoinstall_installed_packages");
|
||||
}
|
||||
if(!file_exists(FileHandler::getRealPath("./modules/autoinstall/schemas/autoinstall_remote_categories.xml"))
|
||||
&& $oDB->isTableExists("autoinstall_remote_categories"))
|
||||
{
|
||||
$oDB->dropTable("autoinstall_remote_categories");
|
||||
}
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 캐시 파일 재생성
|
||||
**/
|
||||
function recompileCache() {
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,185 +1,185 @@
|
|||
<?php
|
||||
/**
|
||||
* @class autoinstallModel
|
||||
* @author sol (sol@ngleader.com)
|
||||
* @brief autoinstall 모듈의 Model class
|
||||
**/
|
||||
|
||||
class autoinstallModel extends autoinstall {
|
||||
|
||||
function getCategory($category_srl)
|
||||
{
|
||||
$args->category_srl = $category_srl;
|
||||
$output = executeQueryArray("autoinstall.getCategory", $args);
|
||||
if(!$output->data) return null;
|
||||
return array_shift($output->data);
|
||||
}
|
||||
|
||||
function getPackages()
|
||||
{
|
||||
$output = executeQueryArray("autoinstall.getPackages");
|
||||
if(!$output->data) return array();
|
||||
return $output->data;
|
||||
}
|
||||
|
||||
function getInstalledPackage($package_srl)
|
||||
{
|
||||
$args->package_srl = $package_srl;
|
||||
$output = executeQueryArray("autoinstall.getInstalledPackage", $args);
|
||||
if(!$output->data) return null;
|
||||
return array_shift($output->data);
|
||||
}
|
||||
|
||||
function getPackage($package_srl)
|
||||
{
|
||||
$args->package_srl = $package_srl;
|
||||
$output = executeQueryArray("autoinstall.getPackage", $args);
|
||||
if(!$output->data) return null;
|
||||
return array_shift($output->data);
|
||||
}
|
||||
|
||||
function getCategoryList()
|
||||
{
|
||||
$output = executeQueryArray("autoinstall.getCategories");
|
||||
if(!$output->toBool() || !$output->data) return array();
|
||||
|
||||
$categoryList = array();
|
||||
foreach($output->data as $category)
|
||||
{
|
||||
$category->children = array();
|
||||
$categoryList[$category->category_srl] = $category;
|
||||
}
|
||||
|
||||
$depth0 = array();
|
||||
foreach($categoryList as $key => $category)
|
||||
{
|
||||
if($category->parent_srl)
|
||||
{
|
||||
$categoryList[$category->parent_srl]->children[] =& $categoryList[$key];
|
||||
}
|
||||
else
|
||||
{
|
||||
$depth0[] = $key;
|
||||
}
|
||||
}
|
||||
$resultList = array();
|
||||
foreach($depth0 as $category_srl)
|
||||
{
|
||||
$this->setDepth($categoryList[$category_srl], 0, $categoryList, $resultList);
|
||||
}
|
||||
return $resultList;
|
||||
}
|
||||
|
||||
function getPackageCount($category_srl)
|
||||
{
|
||||
$args->category_srl = $category_srl;
|
||||
$output = executeQuery("autoinstall.getPackageCount", $args);
|
||||
if(!$output->data) return 0;
|
||||
return $output->data->count;
|
||||
}
|
||||
|
||||
function getInstalledPackageCount()
|
||||
{
|
||||
$output = executeQuery("autoinstall.getInstalledPackageCount", $args);
|
||||
if(!$output->data) return 0;
|
||||
return $output->data->count;
|
||||
}
|
||||
|
||||
function setDepth(&$item, $depth, &$list, &$resultList)
|
||||
{
|
||||
$resultList[$item->category_srl] =& $item;
|
||||
$item->depth = $depth;
|
||||
$siblingList = $item->category_srl;
|
||||
foreach($item->children as $child)
|
||||
{
|
||||
$siblingList .= ",".$this->setDepth($list[$child->category_srl], $depth+1, $list, $resultList);
|
||||
}
|
||||
if(count($item->children) < 1)
|
||||
{
|
||||
$item->nPackages = $this->getPackageCount($item->category_srl);
|
||||
}
|
||||
$item->childrenList = $siblingList;
|
||||
return $siblingList;
|
||||
}
|
||||
|
||||
function getLatestPackage() {
|
||||
$output = executeQueryArray("autoinstall.getLatestPackage");
|
||||
if(!$output->data) return null;
|
||||
return array_shift($output->data);
|
||||
}
|
||||
|
||||
function getInstalledPackages($package_list) {
|
||||
$args->package_list = $package_list;
|
||||
$output = executeQueryArray("autoinstall.getInstalledPackages", $args);
|
||||
$result = array();
|
||||
if(!$output->data) return $result;
|
||||
foreach($output->data as $value)
|
||||
{
|
||||
$result[$value->package_srl] = $value;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
function getInstalledPackageList($page)
|
||||
{
|
||||
$args->page = $page;
|
||||
$output = executeQueryArray("autoinstall.getInstalledPackageList", $args);
|
||||
$res = array();
|
||||
foreach($output->data as $val)
|
||||
{
|
||||
$res[$val->package_srl] = $val;
|
||||
}
|
||||
$output->data = $res;
|
||||
return $output;
|
||||
}
|
||||
|
||||
function getTypeFromPath($path)
|
||||
{
|
||||
if(!$path) return null;
|
||||
if($path == ".") return "core";
|
||||
$path_array = explode("/", $path);
|
||||
$target_name = array_pop($path_array);
|
||||
$type = substr(array_pop($path_array), 0, -1);
|
||||
return $type;
|
||||
}
|
||||
|
||||
function getConfigFilePath($type)
|
||||
{
|
||||
$config_file = null;
|
||||
switch($type)
|
||||
{
|
||||
case "m.layout":
|
||||
case "module":
|
||||
case "addon":
|
||||
case "layout":
|
||||
case "widget":
|
||||
$config_file = "/conf/info.xml";
|
||||
break;
|
||||
case "component":
|
||||
$config_file = "/info.xml";
|
||||
break;
|
||||
case "m.skin":
|
||||
case "skin":
|
||||
case "widgetstyle":
|
||||
case "style":
|
||||
$config_file = "/skin.xml";
|
||||
break;
|
||||
case "drcomponent":
|
||||
$config_file = "/info.xml";
|
||||
break;
|
||||
}
|
||||
return $config_file;
|
||||
}
|
||||
|
||||
function checkRemovable($path)
|
||||
{
|
||||
$path_array = explode("/", $path);
|
||||
$target_name = array_pop($path_array);
|
||||
$oModule =& getModule($target_name, "class");
|
||||
if(!$oModule) return false;
|
||||
if(method_exists($oModule, "moduleUninstall")) return true;
|
||||
else return false;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* @class autoinstallModel
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief autoinstall 모듈의 Model class
|
||||
**/
|
||||
|
||||
class autoinstallModel extends autoinstall {
|
||||
|
||||
function getCategory($category_srl)
|
||||
{
|
||||
$args->category_srl = $category_srl;
|
||||
$output = executeQueryArray("autoinstall.getCategory", $args);
|
||||
if(!$output->data) return null;
|
||||
return array_shift($output->data);
|
||||
}
|
||||
|
||||
function getPackages()
|
||||
{
|
||||
$output = executeQueryArray("autoinstall.getPackages");
|
||||
if(!$output->data) return array();
|
||||
return $output->data;
|
||||
}
|
||||
|
||||
function getInstalledPackage($package_srl)
|
||||
{
|
||||
$args->package_srl = $package_srl;
|
||||
$output = executeQueryArray("autoinstall.getInstalledPackage", $args);
|
||||
if(!$output->data) return null;
|
||||
return array_shift($output->data);
|
||||
}
|
||||
|
||||
function getPackage($package_srl)
|
||||
{
|
||||
$args->package_srl = $package_srl;
|
||||
$output = executeQueryArray("autoinstall.getPackage", $args);
|
||||
if(!$output->data) return null;
|
||||
return array_shift($output->data);
|
||||
}
|
||||
|
||||
function getCategoryList()
|
||||
{
|
||||
$output = executeQueryArray("autoinstall.getCategories");
|
||||
if(!$output->toBool() || !$output->data) return array();
|
||||
|
||||
$categoryList = array();
|
||||
foreach($output->data as $category)
|
||||
{
|
||||
$category->children = array();
|
||||
$categoryList[$category->category_srl] = $category;
|
||||
}
|
||||
|
||||
$depth0 = array();
|
||||
foreach($categoryList as $key => $category)
|
||||
{
|
||||
if($category->parent_srl)
|
||||
{
|
||||
$categoryList[$category->parent_srl]->children[] =& $categoryList[$key];
|
||||
}
|
||||
else
|
||||
{
|
||||
$depth0[] = $key;
|
||||
}
|
||||
}
|
||||
$resultList = array();
|
||||
foreach($depth0 as $category_srl)
|
||||
{
|
||||
$this->setDepth($categoryList[$category_srl], 0, $categoryList, $resultList);
|
||||
}
|
||||
return $resultList;
|
||||
}
|
||||
|
||||
function getPackageCount($category_srl)
|
||||
{
|
||||
$args->category_srl = $category_srl;
|
||||
$output = executeQuery("autoinstall.getPackageCount", $args);
|
||||
if(!$output->data) return 0;
|
||||
return $output->data->count;
|
||||
}
|
||||
|
||||
function getInstalledPackageCount()
|
||||
{
|
||||
$output = executeQuery("autoinstall.getInstalledPackageCount", $args);
|
||||
if(!$output->data) return 0;
|
||||
return $output->data->count;
|
||||
}
|
||||
|
||||
function setDepth(&$item, $depth, &$list, &$resultList)
|
||||
{
|
||||
$resultList[$item->category_srl] =& $item;
|
||||
$item->depth = $depth;
|
||||
$siblingList = $item->category_srl;
|
||||
foreach($item->children as $child)
|
||||
{
|
||||
$siblingList .= ",".$this->setDepth($list[$child->category_srl], $depth+1, $list, $resultList);
|
||||
}
|
||||
if(count($item->children) < 1)
|
||||
{
|
||||
$item->nPackages = $this->getPackageCount($item->category_srl);
|
||||
}
|
||||
$item->childrenList = $siblingList;
|
||||
return $siblingList;
|
||||
}
|
||||
|
||||
function getLatestPackage() {
|
||||
$output = executeQueryArray("autoinstall.getLatestPackage");
|
||||
if(!$output->data) return null;
|
||||
return array_shift($output->data);
|
||||
}
|
||||
|
||||
function getInstalledPackages($package_list) {
|
||||
$args->package_list = $package_list;
|
||||
$output = executeQueryArray("autoinstall.getInstalledPackages", $args);
|
||||
$result = array();
|
||||
if(!$output->data) return $result;
|
||||
foreach($output->data as $value)
|
||||
{
|
||||
$result[$value->package_srl] = $value;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
function getInstalledPackageList($page)
|
||||
{
|
||||
$args->page = $page;
|
||||
$output = executeQueryArray("autoinstall.getInstalledPackageList", $args);
|
||||
$res = array();
|
||||
foreach($output->data as $val)
|
||||
{
|
||||
$res[$val->package_srl] = $val;
|
||||
}
|
||||
$output->data = $res;
|
||||
return $output;
|
||||
}
|
||||
|
||||
function getTypeFromPath($path)
|
||||
{
|
||||
if(!$path) return null;
|
||||
if($path == ".") return "core";
|
||||
$path_array = explode("/", $path);
|
||||
$target_name = array_pop($path_array);
|
||||
$type = substr(array_pop($path_array), 0, -1);
|
||||
return $type;
|
||||
}
|
||||
|
||||
function getConfigFilePath($type)
|
||||
{
|
||||
$config_file = null;
|
||||
switch($type)
|
||||
{
|
||||
case "m.layout":
|
||||
case "module":
|
||||
case "addon":
|
||||
case "layout":
|
||||
case "widget":
|
||||
$config_file = "/conf/info.xml";
|
||||
break;
|
||||
case "component":
|
||||
$config_file = "/info.xml";
|
||||
break;
|
||||
case "m.skin":
|
||||
case "skin":
|
||||
case "widgetstyle":
|
||||
case "style":
|
||||
$config_file = "/skin.xml";
|
||||
break;
|
||||
case "drcomponent":
|
||||
$config_file = "/info.xml";
|
||||
break;
|
||||
}
|
||||
return $config_file;
|
||||
}
|
||||
|
||||
function checkRemovable($path)
|
||||
{
|
||||
$path_array = explode("/", $path);
|
||||
$target_name = array_pop($path_array);
|
||||
$oModule =& getModule($target_name, "class");
|
||||
if(!$oModule) return false;
|
||||
if(method_exists($oModule, "moduleUninstall")) return true;
|
||||
else return false;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,26 +1,26 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @class autoinstallView
|
||||
* @author sol (sol@ngleader.com)
|
||||
* @brief autoinstall 모듈의 View class
|
||||
**/
|
||||
|
||||
class autoinstallView extends autoinstall {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
function dispAutoinstallTest(){
|
||||
$file = "modules.test.tar";
|
||||
$checksum = '549989037bd8401d39b83ca2393d8131';
|
||||
$file = "modules.test.skins.test.tar";
|
||||
$oAutoinstallAdminController = &getAdminController('autoinstall');
|
||||
$output = $oAutoinstallAdminController->install($file, $checksum);
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @class autoinstallView
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief autoinstall 모듈의 View class
|
||||
**/
|
||||
|
||||
class autoinstallView extends autoinstall {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
function dispAutoinstallTest(){
|
||||
$file = "modules.test.tar";
|
||||
$checksum = '549989037bd8401d39b83ca2393d8131';
|
||||
$file = "modules.test.skins.test.tar";
|
||||
$oAutoinstallAdminController = &getAdminController('autoinstall');
|
||||
$output = $oAutoinstallAdminController->install($file, $checksum);
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
|
|
|||
|
|
@ -1,34 +1,26 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="0.2">
|
||||
<title xml:lang="ko">쉬운 설치</title>
|
||||
<title xml:lang="en">EasyInstaller</title>
|
||||
<title xml:lang="vi">Cài đặt tự động</title>
|
||||
<title xml:lang="zh-TW">自動安裝</title>
|
||||
<title xml:lang="zh-CN">安装·更新</title>
|
||||
<title xml:lang="jp">イージーインストール</title>
|
||||
<description xml:lang="ko">관리자 모드에서 클릭으로 모듈/스킨/레이아웃/위젯/위젯스타일 등을 설치하는 모듈입니다.</description>
|
||||
<description xml:lang="en">With this module, you can install and upgrade your programs including modules, skins, layouts, etc., from www.xpressengine.com by one-click.</description>
|
||||
<description xml:lang="vi">Với Module này, bạn có thể cập nhật và cài đặt các phiên bản một cách tự động. Bao gồm Module, Layout, Widget, Addon, ... từ trang chủ XE bằng một bấm chuột.</description>
|
||||
<description xml:lang="zh-TW">可以藉由此模組安裝、更新程式包括模組、面板、版面等。</description>
|
||||
<description xml:lang="zh-CN">很方便的在线安装/更新XE相关模块(模块/皮肤/布局/控件/控件样式等)。</description>
|
||||
<description xml:lang="jp">管理者モードにてクリックだけで、モジュール/スキン/レイアウト/ウィジェット/ウィジェットスタイルのインストールを可能にするモジュールです。</description>
|
||||
<version>0.3</version>
|
||||
<date>2009-11-11</date>
|
||||
<category>system</category>
|
||||
<author email_address="haneul0318@gmail.com" link="http://www.seungyeop.kr">
|
||||
<name xml:lang="ko">haneul</name>
|
||||
<name xml:lang="en">haneul</name>
|
||||
<name xml:lang="vi">haneul</name>
|
||||
<name xml:lang="zh-TW">haneul</name>
|
||||
<name xml:lang="zh-CN">haneul</name>
|
||||
<name xml:lang="jp">haneul</name>
|
||||
</author>
|
||||
<author email_address="sol@ngleader.com" link="http://ngleader.com">
|
||||
<name xml:lang="ko">sol</name>
|
||||
<name xml:lang="en">sol</name>
|
||||
<name xml:lang="vi">sol</name>
|
||||
<name xml:lang="zh-TW">sol</name>
|
||||
<name xml:lang="zh-CN">sol</name>
|
||||
<name xml:lang="jp">sol</name>
|
||||
</author>
|
||||
</module>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="0.2">
|
||||
<title xml:lang="ko">쉬운 설치</title>
|
||||
<title xml:lang="en">EasyInstaller</title>
|
||||
<title xml:lang="vi">Cài đặt tự động</title>
|
||||
<title xml:lang="zh-TW">自動安裝</title>
|
||||
<title xml:lang="zh-CN">安装·更新</title>
|
||||
<title xml:lang="jp">イージーインストール</title>
|
||||
<description xml:lang="ko">관리자 모드에서 클릭으로 모듈/스킨/레이아웃/위젯/위젯스타일 등을 설치하는 모듈입니다.</description>
|
||||
<description xml:lang="en">With this module, you can install and upgrade your programs including modules, skins, layouts, etc., from www.xpressengine.com by one-click.</description>
|
||||
<description xml:lang="vi">Với Module này, bạn có thể cập nhật và cài đặt các phiên bản một cách tự động. Bao gồm Module, Layout, Widget, Addon, ... từ trang chủ XE bằng một bấm chuột.</description>
|
||||
<description xml:lang="zh-TW">可以藉由此模組安裝、更新程式包括模組、面板、版面等。</description>
|
||||
<description xml:lang="zh-CN">很方便的在线安装/更新XE相关模块(模块/皮肤/布局/控件/控件样式等)。</description>
|
||||
<description xml:lang="jp">管理者モードにてクリックだけで、モジュール/スキン/レイアウト/ウィジェット/ウィジェットスタイルのインストールを可能にするモジュールです。</description>
|
||||
<version>0.3</version>
|
||||
<date>2009-11-11</date>
|
||||
<category>system</category>
|
||||
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
|
||||
<name xml:lang="ko">NHN</name>
|
||||
<name xml:lang="en">NHN</name>
|
||||
<name xml:lang="vi">NHN</name>
|
||||
<name xml:lang="zh-TW">NHN</name>
|
||||
<name xml:lang="zh-CN">NHN</name>
|
||||
<name xml:lang="jp">NHN</name>
|
||||
</author>
|
||||
</module>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file en.lang.php
|
||||
* @author haneul (haneul0318@gmail.com)
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief Autoinstall(autoinstall) language pack (English)
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file modules/autoinstall/lang/jp.lang.php
|
||||
* @author sol (sol@ngleader.com) 翻訳:ミニミ
|
||||
* @author NHN (developers@xpressengine.com) 翻訳:ミニミ
|
||||
* @brief Autoinstall(autoinstall) 日本語基本言語パッケージ
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file ko.lang.php
|
||||
* @author sol (sol@ngleader.com)
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief Autoinstall(autoinstall) 모듈의 기본 언어팩
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file en.lang.php
|
||||
* @author haneul (haneul0318@gmail.com)
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief Autoinstall(autoinstall) language pack (English)
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file ko.lang.php
|
||||
* @author sol (sol@ngleader.com)
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief Autoinstall(autoinstall) 모듈의 기본 언어팩
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file zh-CN.lang.php
|
||||
* @author sol (sol@ngleader.com) 翻译:guny(space.china@gmail.com)
|
||||
* @author NHN (developers@xpressengine.com) 翻译:guny(space.china@gmail.com)
|
||||
* @brief 在线安装/更新(autoinstall)模块语言包
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* @file zh-TW.lang.php
|
||||
* @author sol (sol@ngleader.com) 翻譯:royallin
|
||||
* @author NHN (developers@xpressengine.com) 翻譯:royallin
|
||||
* @brief 自動安裝(autoinstall)模組正體中文語言
|
||||
**/
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
@charset "utf-8";
|
||||
/* NHN > UIT Center > Open UI Tech Team > Jeong Chan Myeong(dece24@nhncorp.com) */
|
||||
/* NHN (developers@xpressengine.com) */
|
||||
.install{ border-top:1px solid #ddd; *zoom:1;}
|
||||
.install:after{ content:""; display:block; clear:both;}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue