From 61968d79e31e564807846dc832ef01a5488c52fa Mon Sep 17 00:00:00 2001
From: Terry <2358269014@qq.com>
Date: Tue, 27 Aug 2019 08:42:54 +0800
Subject: [PATCH] extension market manager
---
.../System/block/extensionmarket/Manager.php | 30 ++-
.../controllers/ExtensionmarketController.php | 177 +++++++++++++++++-
.../system/extensionmarket/manager.php | 141 +++++++++++++-
3 files changed, 329 insertions(+), 19 deletions(-)
diff --git a/app/appadmin/modules/System/block/extensionmarket/Manager.php b/app/appadmin/modules/System/block/extensionmarket/Manager.php
index ec41c6e3..f77bea35 100644
--- a/app/appadmin/modules/System/block/extensionmarket/Manager.php
+++ b/app/appadmin/modules/System/block/extensionmarket/Manager.php
@@ -22,7 +22,9 @@ use Yii;
*/
class Manager
{
-
+
+ public $nameSpaceArr;
+ public $versionArr;
/**
* init param function ,execute in construct.
*/
@@ -36,17 +38,37 @@ class Manager
$addons = $info['addons'];
$coll = isset($addons['coll']) ? $addons['coll'] : [];
$count = isset($addons['count']) ? $addons['count'] : 0;
+ $this->initInstalledExtensions();
return [
'addon_list'=> $coll,
'addon_count' => $count,
- 'installed_extensions' => $this->getInstalledExtensions(),
+ 'installed_extensions_namespace' => $this->nameSpaceArr,
+ 'versionArr' => $this->versionArr,
+
];
}
// namespace
- public function getInstalledExtensions()
+ public function initInstalledExtensions()
{
- return Yii::$service->extension->getAllNamespaces();
+ $filter = [
+ 'asArray' => true,
+ 'fetchAll' => true,
+ ];
+ $data = Yii::$service->extension->coll($filter);
+ $arr = [];
+ $versionArr = [];
+ if (is_array($data['coll'])) {
+ foreach ($data['coll'] as $one) {
+ $namespace = $one['namespace'];
+ if ($namespace) {
+ $arr[] = $namespace;
+ $versionArr[$namespace] = $one['version'];
+ }
+ }
+ }
+ $this->versionArr = $versionArr;
+ $this->nameSpaceArr = $arr;
}
diff --git a/app/appadmin/modules/System/controllers/ExtensionmarketController.php b/app/appadmin/modules/System/controllers/ExtensionmarketController.php
index 75edd003..b48450b6 100644
--- a/app/appadmin/modules/System/controllers/ExtensionmarketController.php
+++ b/app/appadmin/modules/System/controllers/ExtensionmarketController.php
@@ -62,10 +62,11 @@ class ExtensionmarketController extends SystemController
{
$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, $addonName);
+ $zipFilePath = Yii::$service->extension->remoteService->downloadAddons($namespace, $packageName, $folderName, $addonName);
if (!$zipFilePath) {
echo json_encode([
'statusCode' => '300',
@@ -82,7 +83,8 @@ class ExtensionmarketController extends SystemController
]);
exit;
}
-
+ // 删除zip压缩包
+ unlink($zipFilePath);
// 将addons信息写入数据库
/*
@@ -95,8 +97,8 @@ class ExtensionmarketController extends SystemController
string(7) "fecmall"
["name"]=>
string(15) "furnilife_theme"
- ["config_file_path"]=>
- string(26) "furnilife_theme/config.php"
+ ["folder"]=>
+ string(26) "furnilife_theme"
["version"]=>
string(5) "1.0.0"
}
@@ -126,17 +128,180 @@ class ExtensionmarketController extends SystemController
]);
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()
+ {
+ $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->downloadAddons($namespace, $packageName, $folderName, $addonName);
+ if (!$zipFilePath) {
+ echo json_encode([
+ 'statusCode' => '300',
+ 'message' => Yii::$service->page->translate->__('download remote addons fail'),
+ ]);
+ 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);
+ // 将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()
+ {
+ $namespace = Yii::$app->request->get('namespace');
+ $packageName = Yii::$app->request->get('packageName');
+ $addonName = Yii::$app->request->get('addonName');
+ // 进行zip文件下载到指定的文件路径
+ $zipFilePath = Yii::$service->extension->remoteService->downloadAddons($namespace, $packageName, $addonName);
+ if (!$zipFilePath) {
+ echo json_encode([
+ 'statusCode' => '300',
+ 'message' => Yii::$service->page->translate->__('download remote addons fail'),
+ ]);
+ 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);
-
+ // 将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 actionManagereditsave()
{
diff --git a/app/appadmin/theme/base/default/system/extensionmarket/manager.php b/app/appadmin/theme/base/default/system/extensionmarket/manager.php
index aa4d2d64..953bc744 100644
--- a/app/appadmin/theme/base/default/system/extensionmarket/manager.php
+++ b/app/appadmin/theme/base/default/system/extensionmarket/manager.php
@@ -27,31 +27,56 @@ use fec\helpers\CRequest;