| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 | <?phpnamespace backend\controllers;use backend\models\ModuleConfig;use common\models\Module;use Yii;use yii\base\Model;use yii\data\ArrayDataProvider;use yii\filters\VerbFilter;use yii\helpers\Json;use yii\web\Controller;/** * ModuleController implements the CRUD actions for Module model. */class PluginController extends Controller{    public function behaviors()    {        return [            'verbs' => [                'class' => VerbFilter::className(),                'actions' => [                    'open' => ['post'],                    'close' => ['post'],                    'install' => ['post'],                    'uninstall' => ['post']                ],            ],        ];    }    /**     * Lists all Module models.     * @return mixed     */    public function actionIndex()    {        $plugins = Yii::$app->pluginManager->findAll();        $dataProvider = new ArrayDataProvider([            'allModels' => $plugins        ]);        return $this->render('index', [            'dataProvider' => $dataProvider,        ]);    }    // 安装    public function actionInstall()    {        $id = Yii::$app->request->post('id');        $pluginManager = Yii::$app->pluginManager;        $plugin = $pluginManager->findOne($id);        if(!$pluginManager->install($plugin)){            Yii::$app->session->setFlash('error', '插件安装失败');        } else {            Yii::$app->session->setFlash('success', '插件安装成功');        }        return $this->redirect(['index']);    }    //卸载    public function actionUninstall()    {        $id = Yii::$app->request->post('id');        $pluginManager = Yii::$app->pluginManager;        $plugin = $pluginManager->findOne($id);        if(!$pluginManager->uninstall($plugin)){            Yii::$app->session->setFlash('error', '插件卸载失败');        } else {            Yii::$app->session->setFlash('success', '插件卸载成功');        }        return $this->redirect(['index']);    }    // 开启    public function actionOpen()    {        $id = Yii::$app->request->post('id');        $pluginManager = Yii::$app->pluginManager;        $plugin = $pluginManager->findOne($id);        if(!$plugin->install){            Yii::$app->session->setFlash('error', '插件没安装');        }        if(!$pluginManager->open($plugin)){            Yii::$app->session->setFlash('error', '插件打开失败');        } else {            Yii::$app->session->setFlash('success', '插件打开成功');        }        return $this->redirect(['index']);    }    // 关闭    public function actionClose()    {        $id = Yii::$app->request->post('id');        $pluginManager = Yii::$app->pluginManager;        $plugin = $pluginManager->findOne($id);        if(!$plugin->install){            Yii::$app->session->setFlash('error', '插件没安装');        }        if(!$pluginManager->close($plugin)){            Yii::$app->session->setFlash('error', '插件关闭失败');        } else {            Yii::$app->session->setFlash('success', '插件关闭成功');        }        return $this->redirect(['index']);    }    /**     * 插件配置     * @param $id     * @return string|\yii\web\Response     * @throws \yii\base\InvalidConfigException     */    public function actionConfig($id)    {        $pluginManager = Yii::$app->pluginManager;        $plugin = $pluginManager->findOne($id);        if(!$plugin->install){            Yii::$app->session->setFlash('error', '插件没安装');            return $this->redirect(['index']);        }        $configs = Json::decode($plugin->getModel()->config);        $configModels = [];        if (!empty($configs)) {            foreach ($configs as $k => $config) {                $configModel = new ModuleConfig();                $configModel->scenario = 'init';                $configModel->attributes = $config;                $configModels[$k] = $configModel;            }        }        $model = $plugin->getModel();        if (\Yii::$app->request->isPost && Model::loadMultiple($configModels, \Yii::$app->request->post()) && Model::validateMultiple($configModels)) {            $configs = Json::encode($configModels);            $model->config = $configs;            $model->save();            return $this->redirect(['index']);        }        return $this->render('config', [            'model' => $model,            'configModels' => $configModels        ]);    }}
 |