| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485 |
- <?php
- namespace backend\modules\admin\controllers;
- use backend\controllers\AdminController;
- use common\enums\StatusEnum;
- use common\models\addons\AddonsCombo;
- use common\models\common\Addons;
- use Yii;
- use yii\helpers\Json;
- /**
- *
- * 插件管理
- * @Author bing
- * @DateTime 2021-08-11 17:22:39
- * @copyright: Copyright (c) 2020 广东七件事集团
- */
- class AddonsController extends AdminController
- {
- /**
- * 应用列表
- * @Author bing
- * @DateTime 2021-08-16 13:21:03
- * @copyright: Copyright (c) 2020 广东七件事集团
- * @return void
- */
- public function actionIndex()
- {
- $request = Yii::$app->request;
- if($request->isAjax){
- if($request->isGet){
- // 查询参数
- $title = $request->get('title','');
- $name = $request->get('name','');
- $where[] = ['status'=>[0,1]];
- (!empty(trim($title))) && $where[] = ['LIKE', 'title', $title];
- (!empty(trim($title))) && $where[] = ['LIKE', 'name', $title];
- $keyword = $request->get('keyword','');
- $addons_group_name = $request->get('addons_group_name','');
- (!empty(trim($keyword))) && $where[] = ['or',['LIKE', 'title', $keyword],['LIKE', 'name', $keyword]];
- (!empty($addons_group_name)) && $where[] = ['group'=>trim($addons_group_name)];
- $limit = $request->get('limit')??$this->pageSize;
- $select = 'title,name,author,cover,group,status,is_online,version,brief_introduction';
- $params = array('select' => $select,'where' => $where, 'order'=>'id desc','limit' => $limit);
- $page_data = Addons::listPage($params,false);
- if($page_data === false) return $this->error(Addons::getStaticError());
- // 检查插件是否有需要额外设置
- foreach ($page_data['list'] as &$item) {
- $item['is_extra_setting'] = (file_exists(Yii::getAlias('@addons')."/{$item['name']}/backend/views/extra-setting/index.php")) ? 1 : 0;
- }
- $page_data['addons_group'] = Yii::$app->params['addonsGroup'];
- $addons_group_arr = Yii::$app->params['addonsGroup'];
- sort($addons_group_arr);
- $page_data['addons_group_arr'] =$addons_group_arr;
- return $this->success('ok',$page_data);
- }else{
- // 操作插件
- $post = $request->post();
- $res = self::checkRequireParam($post, ['name', 'type']);
- if ($res === false) return $this->error(self::getStaticError());
- switch($post['type']){
- case 'uninstall':
- $res = Addons::uninstall($post['name']);
- break;
- case 'disable':
- $res = Addons::disable($post['name']);
- break;
- case 'reload':
- $res = Addons::install($post['name']);
- break;
- case 'upgrade':
- $res = Addons::upgrade($post['name']);
- break;
- case 'online':
- case 'offline':
- $res = Addons::online($post['name']);
- break;
- default :
- return $this->error('不支持的操作类型');
- }
- if($res === false) return $this->error(Addons::getStaticError());
- return $this->success('操作成功');
- }
- }else{
- return $this->render($this->action->id);
- }
- }
- /**
- * 应用设计
- * @Author bing
- * @DateTime 2021-08-16 13:21:03
- * @copyright: Copyright (c) 2020 广东七件事集团
- * @return void
- */
- public function actionCreate()
- {
- $request = Yii::$app->request;
- if (\Yii::$app->request->isAjax) {
- if ($request->isPost) {
- $post = $request->post();
- $res = self::checkRequireParam($post, ['title', 'name', 'group', 'author', 'version', 'install', 'uninstall', 'upgrade']);
- if ($res === false) return $this->error(self::getStaticError());
- $res = Addons::createAddons($post);
- if ($res === false) return $this->error(Addons::getStaticError());
- return $this->success();
- } else {
- $data['addons_group'] = Yii::$app->params['addonsGroup'];
- return $this->success('ok',$data);
- }
- }
- return $this->render($this->action->id);
- }
- public function actionEdit()
- {
- if (\Yii::$app->request->isAjax) {
- if (\Yii::$app->request->isGet) {
- $get = \Yii::$app->request->get();
- $res = Yii::$app->services->validate->validate($get, [[['name'], 'string']]);
- if ($res === false) {
- return $this->error(self::getStaticError());
- }
- $addons_info = Addons::findOne(['name' => $get['name']])->toArray();
- $addons_info['addons_group'] = Yii::$app->params['addonsGroup'];
- return $this->success('操作成功', $addons_info);
- } elseif (\Yii::$app->request->isPost) {
- $post = \Yii::$app->request->post();
- // dd($post);
- $rules = [
- [['name', 'title', 'cover', 'group', 'brief_introduction','course_url', 'description'], 'string'],
- [['cover'], 'url']
- ];
- $res = Yii::$app->services->validate->validate($post, $rules);
- if ($res === false) {
- return $this->error(self::getStaticError());
- }
- $model = Addons::findOne(['name' => $post['name']]);
- $model->title = $post['title'];
- $model->cover = $post['cover'];
- $model->group = $post['group'];
- $model->course_url = $post['course_url'];
- $model->brief_introduction = $post['brief_introduction'];
- $model->description = $post['description'];
- if ($model->save()) {
- return $this->success('修改成功');
- } else {
- return $this->error('修改失败');
- }
- } else {
- return $this->error('请求方式错误');
- }
- } else {
- return $this->render($this->action->id);
- }
- }
- /**
- * 本地插件
- * @Author bing
- * @DateTime 2021-08-17 11:18:04
- * @copyright: Copyright (c) 2020 广东七件事集团
- * @return void
- */
- public function actionLocal()
- {
- $request = Yii::$app->request;
- if($request->isAjax){
- if($request->isGet){
- // 未安装插件列表
- $addons_group = Yii::$app->params['addonsGroup'];
- $list = Yii::$app->services->addons->getLocalList();
- $list = array_values($list);
- $this->success('ok',compact('list','addons_group'));
- }else{
- // 安装插件
- $post = $request->post();
- $res = self::checkRequireParam($post, ['name']);
- if ($res === false) return $this->error(self::getStaticError());
- $res = Addons::install($post['name'],true);
- if ($res === false) return $this->error(Addons::getStaticError());
- $this->success('安装成功');
- }
- }else{
- return $this->render($this->action->id);
- }
- }
- /**
- * @Author: ltm 应用付费列表
- * @DateTime: 2022/2/26 0026 11:02
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $data
- * @return string
- */
- public function actionPaySetting()
- {
- $request = Yii::$app->request;
- if($request->isAjax){
- if($request->isGet){
- // 查询参数
- $where[] = ['status'=>[0,1]];
- $limit = $request->get('limit')??$this->pageSize;
- $select = 'title,name,author,cover,group,status,is_online,version,brief_introduction,id,price_setting';
- $keyword = $request->get('keyword','');
- (!empty(trim($keyword))) && $where[] = ['or',['LIKE', 'title', $keyword],['LIKE', 'name', $keyword]];
- $params = array('select' => $select,'where' => $where, 'order'=>'id desc','limit' => $limit);
- $page_data = Addons::listPage($params,false);
- if($page_data['list']){
- foreach ($page_data['list'] as $k => $v){
- $page_data['list'][$k]['setting'] = !empty($v['price_setting']) ? json_decode($v['price_setting']) : '';
- }
- }
- if($page_data === false) return $this->error(Addons::getStaticError());
- return $this->success('ok',$page_data);
- }
- }else{
- return $this->render($this->action->id);
- }
- }
- /**
- * @Author: ltm 应用付费
- * @DateTime: 2022/2/26 0026 10:58
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @param $data
- * @return string
- */
- public function actionPaySettingEdit()
- {
- if (\Yii::$app->request->isAjax) {
- if (\Yii::$app->request->isGet) {
- $get = \Yii::$app->request->get();
- $addons_info = Addons::findOne(['name' => $get['name']])->toArray();
- $addons_info['setting'] = !empty($addons_info['price_setting']) ? json_encode($addons_info['price_setting']) : '';
- $addons_info['payment_type'] = json_decode($addons_info['payment_type']);
- return $this->success('操作成功', $addons_info);
- } elseif (\Yii::$app->request->isPost) {
- $post = \Yii::$app->request->post();
- $rules = [
- [['price_setting', 'name', 'payment_type'], 'safe'],
- ];
- $res = Yii::$app->services->validate->validate($post, $rules);
- if ($res === false) {
- return $this->error(self::getStaticError());
- }
- $model = Addons::findOne(['name' => $post['name']]);
- $model->price_setting = $post['price_setting'];
- $model->payment_type = json_encode($post['payment_type'],true);
- if ($model->save()) {
- return $this->success('修改成功');
- } else {
- return $this->error('修改失败');
- }
- } else {
- return $this->error('请求方式错误');
- }
- } else {
- return $this->render($this->action->id);
- }
- }
- /**
- * 应用付费套餐
- * @Author: lun
- * @DateTime: 2022/3/29 0029 10:34
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @return mixed|string|void
- */
- public function actionCombo()
- {
- $request = Yii::$app->request;
- if($request->isAjax){
- if($request->isPost){
- $params = Yii::$app->request->post();
- // 检查提交的参数
- $res = Yii::$app->services->validate->validate($params,[
- [['page', 'limit'], 'safe'],
- [['title'], 'string'],
- [['datetime'], 'safe'],
- ]);
- if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $params = AddonsCombo::exceptNullVal($params);
- $where = [];
- isset($params['title']) && $where[] = ['like', 'title', $params['title']];
- if (isset($params['datetime'])) {
- $start_time = strtotime($params['datetime'][0]);
- $end_time = strtotime($params['datetime'][1]);
- $where[] = ['between','created_at',$start_time,$end_time];
- }
- $where[] = ['=', 'status', StatusEnum::ENABLED];
- $order = 'id desc,created_at desc';
- $params = array('where' => $where, 'order'=>$order, 'limit' => $params['limit']);
- $list = AddonsCombo::listPage($params, false, true);
- $this->success('获取成功', $list);
- }
- }else{
- return $this->render($this->action->id);
- }
- }
- /**
- * 付费套餐编辑
- * @Author: lun
- * @DateTime: 2022/3/29 0029 14:40
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @return mixed|string|void
- */
- public function actionComboEdit()
- {
- $request = Yii::$app->request;
- if($request->isAjax){
- if($request->isPost){
- $params = Yii::$app->request->post('detail');
- // 检查提交的参数
- $res = Yii::$app->services->validate->validate($params,[
- [['id'], 'integer'],
- [['title','description','addons','expire'], 'string'],
- ]);
- if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $params = AddonsCombo::exceptNullVal($params);
- $res = AddonsCombo::setData($params);
- if ($res == false) return $this->error("保存失败:" . AddonsCombo::getStaticError());
- $this->success('保存成功');
- } else {
- $params = Yii::$app->request->get();
- // 检查提交的参数
- $res = Yii::$app->services->validate->validate($params,[
- [['id'], 'integer'],
- ]);
- if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $params = AddonsCombo::exceptNullVal($params);
- $data = [];
- if (!empty($params['id'])) {
- $detail = AddonsCombo::find()->where(['id' => $params['id'], 'status' => StatusEnum::ENABLED])->asArray()->one();
- if (empty($detail)) return $this->error("获取失败:" . AddonsCombo::getStaticError());
- $data['detail'] = $detail;
- }
- $cate = Yii::$app->params['addonsGroup'];// 获取应用分类
- $field = 'title,name,group';
- $list = Addons::getAddons([['is_online' => 1]], [], true, $field);// 获取已上架的应用列表
- $addons_list = [];
- foreach ($list as $value) {
- $k = $value['group'];
- $addons_list[$k]['title'] = $cate[$k]['title'];
- $addons_list[$k]['list'][] = [
- 'title' => $value['title'],
- 'name' => $value['name'],
- ];
- }
- $data['addons_list'] = $addons_list;
- $this->success('获取成功', $data);
- }
- }else{
- return $this->render($this->action->id);
- }
- }
- /**
- * 套餐操作
- * @Author: lun
- * @DateTime: 2022/3/29 0029 14:28
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @return mixed|void
- */
- public function actionHandleCombo()
- {
- $request = Yii::$app->request;
- if($request->isAjax && $request->isPost){
- $params = Yii::$app->request->post();
- // 检查提交的参数
- $res = Yii::$app->services->validate->validate($params,[
- [['id','status'], 'integer'],
- ]);
- if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $params = AddonsCombo::exceptNullVal($params);
- $res = AddonsCombo::setData($params);
- if ($res == false) return $this->error("操作失败:" . AddonsCombo::getStaticError());
- $this->success('操作成功');
- }
- }
- /**
- * 本地应用批量安装
- * @Author: lun
- * @DateTime: 2023/1/10 0010 14:30
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @return mixed|void
- */
- public function actionBatchLocalInstall()
- {
- $request = Yii::$app->request;
- if($request->isAjax && $request->isPost){
- $params = Yii::$app->request->post();
- // 检查提交的参数
- $res = Yii::$app->services->validate->validate($params,[
- [['addons_names'], 'required'],
- [['is_online', 'is_set_price'], 'integer'],
- [['addons_names', 'payment_type', 'price_setting'], 'safe'],
- ]);
- if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- if (empty($params['addons_names'])) return $this->error('安装的应用不能为空');
- // 批量安装
- foreach ($params['addons_names'] as $addons_name) {
- $res = Addons::install($addons_name,true);
- if ($res === false) return $this->error($addons_name.'安装失败:'.Addons::getStaticError());
- $res = Addons::install($addons_name);
- if ($res === false) return $this->error($addons_name.'配置更新失败:'.Addons::getStaticError());
- }
- // 更改上架状态、价格设置
- Addons::installAfterUpdate($params);
- $this->success('操作成功');
- }
- }
- /**
- * 获取应用
- * @Author: lun
- * @DateTime: 2023/2/1 0001 11:53
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @return mixed|void
- */
- public function actionGetMallAddons()
- {
- $request = Yii::$app->request;
- if($request->isAjax && $request->isGet){
- $params = Yii::$app->request->get();
- // 检查提交的参数
- $res = Yii::$app->services->validate->validate($params,[
- [['mall_id'], 'required'],
- [['mall_id'], 'integer'],
- ]);
- if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
- $data = AddonsCombo::getNoInstallAddons($params['mall_id'], Yii::$app->params['addonsGroup']);
- $this->success('获取成功', $data);
- }
- }
- /**
- * 插件额外设置
- * @Author: lun
- * @DateTime: 2023/3/23 0023 11:19
- * @Copyright: copyright (c) 2021 广东七件事集团
- * @return mixed|string|void
- */
- public function actionExtraSetting()
- {
- $retuest = Yii::$app->request;
- $get = Yii::$app->request->get();
- if ($retuest->isAjax) {
- if (empty($get['addons'])) return $this->error('请求地址请带上应用标识');
- $group = 'addonsSetting' . $get['addons'];// 命名格式:addonsSetting . 插件标识
- if ($retuest->isPost) {
- $params = Yii::$app->request->post();
- if (isset($params['_csrf'])) unset($params['_csrf']);
- // 保存配置
- $config = Yii::$app->services->setting->platform->set([$group => $params]);
- $this->success('保存成功', $config);
- } else {
- // 获取配置
- $config = Yii::$app->services->setting->platform->get($group);
- $this->success('获取成功', $config);
- }
- }
- return $this->render("@addons/{$get['addons']}/backend/views/extra-setting/index.php");
- }
- }
|