Skip to content

Commit

Permalink
Showing 3 changed files with 374 additions and 1 deletion.
66 changes: 66 additions & 0 deletions app/appadmin/modules/System/block/extensionmarket/Manager.php
Original file line number Diff line number Diff line change
@@ -44,17 +44,83 @@ public function getLastData($param, $info)
$this->initInstalledExtensions();
$toolBar = $this->getToolBar($count, $this->_param['pageNum'], $this->_param['numPerPage']);
$pagerForm = $this->getPagerForm();

$can_hand_install_extensions = $this->canHandInstallExtensions($coll);
$can_hand_upgrade_extensions = $this->canHandUpgradeExtensions($coll);
//var_dump( $can_hand_install_extensions);
return [
'addon_list'=> $coll,
'pagerForm' => $pagerForm,
'toolBar' => $toolBar,
'addon_count' => $count,
'installed_extensions_namespace' => $this->installedNameSpaceArr,
'can_hand_install_extensions' => $can_hand_install_extensions,
'can_hand_upgrade_extensions' => $can_hand_upgrade_extensions,
'versionArr' => $this->versionArr,
'localCreatedArr' => $this->localCreatedArr ,

];
}
/**
* @param $addon_list | array , 应用扩展列表
* 手动更新应用列表
*/
public function canHandUpgradeExtensions($addon_list)
{
$arr = [];
if (!is_array($addon_list)) {
return $arr;
}
foreach ($addon_list as $addon) {
$packageName = isset($addon['addon_info']['package']) ? $addon['addon_info']['package'] : '';
$folderName = isset($addon['addon_info']['folder']) ? $addon['addon_info']['folder'] : '';
$namespaceName = isset($addon['addon_info']['namespace']) ? $addon['addon_info']['namespace'] : ''; //$addon['namespace'];
// 如果应用没安装
if (!in_array($namespaceName, $this->installedNameSpaceArr)) {
continue;
}
// 如果版本不需要升级
if (!version_compare($this->versionArr[$namespace], $addon['addon_info']['version'] ,'<') ){
continue;
}
// 文件检测
$filePath = Yii::$service->extension->remoteService->getExtensionZipFilePath($packageName, $folderName);
if (file_exists($filePath) && is_executable($filePath)) {

$arr[] = $namespaceName;
}
}

return $arr;
}
/**
* @param $addon_list | array , 应用扩展列表
*
*/
public function canHandInstallExtensions($addon_list)
{
$arr = [];
if (!is_array($addon_list)) {
return $arr;
}
foreach ($addon_list as $addon) {
$packageName = isset($addon['addon_info']['package']) ? $addon['addon_info']['package'] : '';
$folderName = isset($addon['addon_info']['folder']) ? $addon['addon_info']['folder'] : '';
$namespaceName = isset($addon['addon_info']['namespace']) ? $addon['addon_info']['namespace'] : ''; //$addon['namespace'];
// 如果应用已经安装
if (in_array($namespaceName, $this->installedNameSpaceArr)) {
continue;
}
$filePath = Yii::$service->extension->remoteService->getExtensionZipFilePath($packageName, $folderName);
if (file_exists($filePath) && is_executable($filePath)) {

$arr[] = $namespaceName;
}
}

return $arr;
}

public function getPagerForm()
{
$str = '';
198 changes: 197 additions & 1 deletion app/appadmin/modules/System/controllers/ExtensionmarketController.php
Original file line number Diff line number Diff line change
@@ -223,6 +223,111 @@ public function actionInstall()
exit;
}

//
public function actionHandinstall()
{
$namespace = Yii::$app->request->get('namespace');
$packageName = Yii::$app->request->get('packageName');
$folderName = Yii::$app->request->get('folderName');
$addonName = Yii::$app->request->get('addonName');

// 进行zip文件下载到指定的文件路径
//$zipFilePath = Yii::$service->extension->remoteService->downloadAddons($namespace, $packageName, $folderName, $addonName);
$zipFilePath = Yii::$service->extension->remoteService->getExtensionZipFilePath($packageName, $folderName);
if (!file_exists($zipFilePath)) {
echo json_encode([
'statusCode' => '300',
'message' => Yii::$service->page->translate->__('hand install fail: '.$zipFilePath. ', is not exist'),
]);
exit;
}
if (!is_executable($zipFilePath)) {
echo json_encode([
'statusCode' => '300',
'message' => Yii::$service->page->translate->__('hand install fail: '.$zipFilePath. ', is not executable'),
]);
exit;
}
// 进行zip文件的解压
$dest_dir = dirname($zipFilePath);
if (!Yii::$service->helper->zipFile->unzip($zipFilePath, $dest_dir, true, true)) {
echo json_encode([
'statusCode' => '300',
'message' => Yii::$service->page->translate->__('unzip addons fail'),
]);
exit;
}
// 删除zip压缩包
unlink($zipFilePath);

/**
* 对于某些比较大的应用插件,下载时间可能需要几分钟
* 对于mysql,如果设置了超时时间,会超时导致无法执行sql,进行mysql重连。报错
* 因此下面对mysql进行了关闭,重新打开
*/
\Yii::$app->db->close();
\Yii::$app->db->open();

// 将addons信息写入数据库
/*
array(6) {
["id"]=>
string(2) "50"
["namespace"]=>
string(13) "fectfurnilife"
["package"]=>
string(7) "fecmall"
["name"]=>
string(15) "furnilife_theme"
["folder"]=>
string(26) "furnilife_theme"
["version"]=>
string(5) "1.0.0"
}
*/
$data = Yii::$service->extension->remoteService->getAddonsInfoByNamespace($namespace);
if (!is_array($data)) {
echo json_encode([
'statusCode' => '300',
'message' => Yii::$service->page->translate->__('get remote addons info by namespace fail'),
]);
exit;
}
// 将远程获取的数据,保存到数据库中。
if (!Yii::$service->extension->newInstallInit($data)){
$errors = Yii::$service->helper->errors->get(',');
echo json_encode([
'statusCode' => '300',
'message' => Yii::$service->page->translate->__($errors),
]);
exit;
}
// 进行插件的安装
if (!Yii::$service->extension->administer->install($namespace)) {
$errors = Yii::$service->helper->errors->get(',');
echo json_encode([
'statusCode' => '300',
'message' => Yii::$service->page->translate->__($errors),
]);
exit;
}
// 进行插件的升级
if (!Yii::$service->extension->administer->upgrade($namespace)) {
$errors = Yii::$service->helper->errors->get(',');
echo json_encode([
'statusCode' => '300',
'message' => Yii::$service->page->translate->__($errors),
]);
exit;
}
// 输入安装成功信息。
echo json_encode([
'statusCode' => '200',
'message' => Yii::$service->page->translate->__('addons install success'),
]);
exit;
}

// 升级
public function actionUpgrade()
{
@@ -308,7 +413,98 @@ public function actionUpgrade()
exit;
}


// hand升级
public function actionHandupgrade()
{
$namespace = Yii::$app->request->get('namespace');
$packageName = Yii::$app->request->get('packageName');
$addonName = Yii::$app->request->get('addonName');
$folderName = Yii::$app->request->get('folderName');
// zip下载文件
$zipFilePath = Yii::$service->extension->remoteService->getExtensionZipFilePath($packageName, $folderName);
if (!file_exists($zipFilePath)) {
echo json_encode([
'statusCode' => '300',
'message' => Yii::$service->page->translate->__('hand upgrade fail: '.$zipFilePath. ', is not exist'),
]);
exit;
}
if (!is_executable($zipFilePath)) {
echo json_encode([
'statusCode' => '300',
'message' => Yii::$service->page->translate->__('hand upgrade fail: '.$zipFilePath. ', is not executable'),
]);
exit;
}

// 进行zip文件的解压
$dest_dir = dirname($zipFilePath);
if (!Yii::$service->helper->zipFile->unzip($zipFilePath, $dest_dir, true, true)) {
echo json_encode([
'statusCode' => '300',
'message' => Yii::$service->page->translate->__('unzip addons fail'),
]);
exit;
}
// 删除zip压缩包
unlink($zipFilePath);
/**
* 对于某些比较大的应用插件,下载时间可能需要几分钟
* 对于mysql,如果设置了超时时间,会超时导致无法执行sql,进行mysql重连。报错
* 因此下面对mysql进行了关闭,重新打开
*/
\Yii::$app->db->close();
\Yii::$app->db->open();

// 将addons信息写入数据库
/*
array(6) {
["id"]=>
string(2) "50"
["namespace"]=>
string(13) "fectfurnilife"
["package"]=>
string(7) "fecmall"
["name"]=>
string(15) "furnilife_theme"
["config_file_path"]=>
string(26) "furnilife_theme/config.php"
["version"]=>
string(5) "1.0.0"
}
*/
$data = Yii::$service->extension->remoteService->getAddonsInfoByNamespace($namespace);
if (!is_array($data)) {
echo json_encode([
'statusCode' => '300',
'message' => Yii::$service->page->translate->__('get remote addons info by namespace fail'),
]);
exit;
}
// 将远程获取的数据,保存到数据库中。
if (!Yii::$service->extension->upgradeInit($data)){
echo json_encode([
'statusCode' => '300',
'message' => Yii::$service->page->translate->__('init new install addon to db fail'),
]);
exit;
}
// 进行插件的升级
if (!Yii::$service->extension->administer->upgrade($namespace)) {
$errors = Yii::$service->helper->errors->get(',');
echo json_encode([
'statusCode' => '300',
'message' => Yii::$service->page->translate->__($errors),
]);
exit;
}
// 输入安装成功信息。
echo json_encode([
'statusCode' => '200',
'message' => Yii::$service->page->translate->__('addons install success'),
]);
exit;
}

// 卸载
public function actionUninstall()
111 changes: 111 additions & 0 deletions app/appadmin/theme/base/default/system/extensionmarket/manager.php
Original file line number Diff line number Diff line change
@@ -69,13 +69,26 @@
?>
<a title="您的应用有新版本发布,您可以点击该按钮进行升级应用,升级之前,请务必进行文件和数据库的备份,以免造成不必要的损失,升级过程中,将会重新下载zip文件进行解压覆盖旧版本应用"
class="abutton-update" href="javascript:void(0)" addonName="<?= $addon_one['addon_info']['name'] ?>" rel="<?= $namespace ?>" folderName="<?= $addon_one['addon_info']['folder'] ?>" packageName="<?= $addon_one['addon_info']['package'] ?>">需要升级</a>


<?php if (in_array($namespace, $can_hand_upgrade_extensions)): // 可以手动升级 ?>
<a title="您的应用有新版本发布,您可以点击该按钮进行升级应用,升级之前,请务必进行文件和数据库的备份,以免造成不必要的损失,升级过程中,将会重新下载zip文件进行解压覆盖旧版本应用"
class="abutton-hand-update" href="javascript:void(0)" addonName="<?= $addon_one['addon_info']['name'] ?>" rel="<?= $namespace ?>" folderName="<?= $addon_one['addon_info']['folder'] ?>" packageName="<?= $addon_one['addon_info']['package'] ?>">手动升级</a>

<?php endif; ?>


<?php else: ?>

<a title="该应用已经是最新的版本了,无需升级,如果想要卸载,点击右下角卸载按钮即可" class="abutton-normal" href="javascript:void(0)">最新版本</a>
<?php endif; ?>


<?php else: ?>
<?php if (in_array($namespace, $can_hand_install_extensions)): ?>
<a title="点击该按钮,进行应用的手动安装" class="handbutton" href="javascript:void(0)" addonName="<?= $addon_one['addon_info']['name'] ?>" rel="<?= $namespace ?>" folderName="<?= $addon_one['addon_info']['folder'] ?>" packageName="<?= $addon_one['addon_info']['package'] ?>">手动安装</a>

<?php endif; ?>
<?php if ($top_version): ?>
<a title="点击该按钮,进行应用的在线安装" class="abutton" href="javascript:void(0)" addonName="<?= $addon_one['addon_info']['name'] ?>" rel="<?= $namespace ?>" folderName="<?= $addon_one['addon_info']['folder'] ?>" packageName="<?= $addon_one['addon_info']['package'] ?>">点击安装</a>
<?php else: ?>
@@ -181,6 +194,12 @@ class="abutton-update" href="javascript:void(0)" addonName="<?= $addon_one['add
padding:5px 10px;
}

.abutton-hand-update{
background:#cc0000 !important;
color:#fff;
padding:5px 10px;
}

.abutton-normal{
background:#337ab7 !important;
color:#fff;
@@ -192,6 +211,18 @@ class="abutton-update" href="javascript:void(0)" addonName="<?= $addon_one['add
opacity:0.8
}



.handbutton{
background:#5e72e4 !important;
color:#fff;
padding:5px 10px;
}

.handbutton:hover{
opacity:0.8
}

</style>


@@ -247,6 +278,47 @@ class="abutton-update" href="javascript:void(0)" addonName="<?= $addon_one['add


});
// hand install
$(document).off("click").on("click",".handbutton",function(){
namespace = $(this).attr('rel');
var packageName = $(this).attr('packageName');
var addonName = $(this).attr('addonName');
var folderName = $(this).attr('folderName');

var url = "<?= Yii::$service->url->getUrl("system/extensionmarket/handinstall"); ?>";
url += '?namespace=' + namespace;
url += '&packageName=' + packageName;
url += '&folderName=' + folderName;
url += '&addonName=' + encodeURIComponent(addonName);

$.ajax({
url: url,
async: true,
timeout: 800000,
dataType: 'json',
type: 'get',
success:function(data, textStatus){
if(data.statusCode == 200){
//alert(data.statusCode);
message = data.message;
alertMsg.correct(message);
navTab.reloadFlag('page1');
} else if (data.statusCode == 300){
message = data.message;
alertMsg.error(message)
} else {
alertMsg.error("错误");
}
//
},
error:function(){

}
});

});


$(document).on("click",".removeAddon",function(){
var self = this;
alertMsg.confirm("您确定删除该应用吗?", {
@@ -300,6 +372,45 @@ class="abutton-update" href="javascript:void(0)" addonName="<?= $addon_one['add

});

$(document).on("click",".abutton-hand-update",function(){
namespace = $(this).attr('rel');
var packageName = $(this).attr('packageName');
var addonName = $(this).attr('addonName');
var folderName = $(this).attr('folderName');

var url = "<?= Yii::$service->url->getUrl("system/extensionmarket/handupgrade"); ?>";
url += '?namespace=' + namespace;
url += '&packageName=' + packageName;
url += '&folderName=' + folderName;
url += '&addonName=' + encodeURIComponent(addonName);

$.ajax({
url: url,
async: true,
timeout: 800000,
dataType: 'json',
type: 'get',
success:function(data, textStatus){

if(data.statusCode == 200){
//alert(data.statusCode);
message = data.message;
alertMsg.correct(message);
navTab.reloadFlag('page1');
} else if (data.statusCode == 300){
message = data.message;
alertMsg.error(message)
} else {
alertMsg.error("错误");
}
//
},
error:function(){

}
});
});

$(document).on("click",".abutton-update",function(){
namespace = $(this).attr('rel');
var packageName = $(this).attr('packageName');

0 comments on commit 3e32d86

Please sign in to comment.