ModuleController.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. namespace backend\controllers;
  3. use backend\models\ModuleConfig;
  4. use backend\widgets\grid\SwitcherAction;
  5. use Yii;
  6. use yii\base\Model;
  7. use yii\data\ArrayDataProvider;
  8. use yii\filters\VerbFilter;
  9. use yii\helpers\Json;
  10. use yii\web\Controller;
  11. /**
  12. * ModuleController implements the CRUD actions for Module model.
  13. */
  14. class ModuleController extends Controller
  15. {
  16. public function behaviors()
  17. {
  18. return [
  19. 'verbs' => [
  20. 'class' => VerbFilter::className(),
  21. 'actions' => [
  22. 'open' => ['post'],
  23. 'close' => ['post'],
  24. 'install' => ['post'],
  25. 'uninstall' => ['post']
  26. ],
  27. ],
  28. ];
  29. }
  30. public function actions()
  31. {
  32. return [
  33. 'switcher' => SwitcherAction::className()
  34. ];
  35. }
  36. /**
  37. * Lists all Module models.
  38. * @return mixed
  39. */
  40. public function actionIndex()
  41. {
  42. $modules = Yii::$app->moduleManager->findAll();
  43. $dataProvider = new ArrayDataProvider([
  44. 'allModels' => $modules
  45. ]);
  46. return $this->render('index', [
  47. 'dataProvider' => $dataProvider,
  48. ]);
  49. }
  50. // 安装
  51. public function actionInstall()
  52. {
  53. $id = Yii::$app->request->post('id');
  54. $module = Yii::$app->moduleManager->findOne($id);
  55. if(!Yii::$app->moduleManager->install($module)){
  56. Yii::$app->session->setFlash('error', '安装失败');
  57. } else {
  58. Yii::$app->session->setFlash('success', '安装成功');
  59. }
  60. return $this->redirect(['index']);
  61. }
  62. //卸载
  63. public function actionUninstall()
  64. {
  65. $id = Yii::$app->request->post('id');
  66. $module = Yii::$app->moduleManager->findOne($id);
  67. if(!Yii::$app->moduleManager->uninstall($module)){
  68. Yii::$app->session->setFlash('error', '卸载失败');
  69. } else {
  70. Yii::$app->session->setFlash('success', '卸载成功');
  71. }
  72. return $this->redirect(['index']);
  73. }
  74. // 开启
  75. public function actionOpen()
  76. {
  77. $id = Yii::$app->request->post('id');
  78. $module = Yii::$app->moduleManager->findOne($id);
  79. if(!$module->install){
  80. Yii::$app->session->setFlash('error', '没安装');
  81. }
  82. if(!Yii::$app->moduleManager->open($module)){
  83. Yii::$app->session->setFlash('error', '打开失败');
  84. } else {
  85. Yii::$app->session->setFlash('success', '打开成功');
  86. }
  87. return $this->redirect(['index']);
  88. }
  89. // 关闭
  90. public function actionClose()
  91. {
  92. $id = Yii::$app->request->post('id');
  93. $module = Yii::$app->moduleManager->findOne($id);
  94. if(!$module->install){
  95. Yii::$app->session->setFlash('error', '没安装');
  96. }
  97. if(!Yii::$app->moduleManager->close($module)){
  98. Yii::$app->session->setFlash('error', '关闭失败');
  99. } else {
  100. Yii::$app->session->setFlash('success', '关闭成功');
  101. }
  102. return $this->redirect(['index']);
  103. }
  104. // 配置
  105. public function actionConfig($id)
  106. {
  107. $module = Yii::$app->moduleManager->findOne($id);
  108. if(!$module->install){
  109. Yii::$app->session->setFlash('error', '插件没安装');
  110. return $this->redirect(['index']);
  111. }
  112. $configs = Json::decode($module->getModel()->config);
  113. $configModels = [];
  114. if (!empty($configs)) {
  115. foreach ($configs as $k => $config) {
  116. $configModel = new ModuleConfig();
  117. $configModel->scenario = 'init';
  118. $configModel->attributes = $config;
  119. $configModels[$k] = $configModel;
  120. }
  121. }
  122. $model = $module->getModel();
  123. if (\Yii::$app->request->isPost && Model::loadMultiple($configModels, \Yii::$app->request->post()) && Model::validateMultiple($configModels)) {
  124. $configs = Json::encode($configModels);
  125. $model->config = $configs;
  126. $model->save();
  127. return $this->redirect(['index']);
  128. }
  129. return $this->render('config', [
  130. 'model' => $model,
  131. 'configModels' => $configModels
  132. ]);
  133. }
  134. }