SettingController.php 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <?php
  2. /**
  3. * Author: lf
  4. * Blog: https://blog.feehi.com
  5. * Email: job@feehi.com
  6. * Created at: 2016-03-23 12:08
  7. */
  8. namespace backend\controllers;
  9. use Yii;
  10. use DateTimeZone;
  11. use backend\actions\DoAction;
  12. use backend\actions\CreateAction;
  13. use common\services\SettingServiceInterface;
  14. use backend\actions\UpdateAction;
  15. use backend\actions\DeleteAction;
  16. use common\models\Options;
  17. use yii\helpers\ArrayHelper;
  18. /**
  19. * Setting management
  20. * - data:
  21. * table options
  22. * column `type` value is \common\models\Options::TYPE_SYSTEM|TYPE_CUSTOM records
  23. *
  24. * Class SettingController
  25. * @package backend\controllers
  26. */
  27. class SettingController extends \yii\web\Controller
  28. {
  29. /**
  30. * @auth
  31. * - item group=设置 category=网站设置 description=网站设置 sort-get=100 sort-post=101 method=get,post
  32. * - item group=设置 category=自定义设置 description=修改 sort-get=130 sort-post=131 method=get,post
  33. * - item group=设置 category=自定义设置 description-post=删除 sort=132 method=post
  34. * - item group=设置 category=自定义设置 description=自定义设置创建 sort-get=133 sort-post=134 method=get,post
  35. * - item group=设置 category=自定义设置 description=自定义设置修改 sort-get=135 sort-post=136 method=get,post
  36. * - item group=设置 category=smtp设置 description=修改 sort-get=110 sort-post=111 method=get,post
  37. * - item group=设置 category=smtp设置 description-post=测试stmp设置 sort-post=112 method=post
  38. *
  39. * @return array
  40. * @throws \yii\base\InvalidConfigException
  41. */
  42. public function actions()
  43. {
  44. /** @var SettingServiceInterface $service */
  45. $service = Yii::$app->get(SettingServiceInterface::ServiceName);
  46. $localFrontendParams = [];
  47. if (file_exists(Yii::getAlias("@frontend/config/params-local.php"))){
  48. $localFrontendParams = require Yii::getAlias("@frontend/config/params-local.php");
  49. }
  50. $params = ArrayHelper::merge( require Yii::getAlias("@frontend/config/params.php"), $localFrontendParams);
  51. $frontendSupportLanguages = $params['supportLanguages'];
  52. $timezones = [];
  53. foreach (DateTimeZone::listIdentifiers() as $identifier) {
  54. $timezones[$identifier] = $identifier;
  55. }
  56. return [
  57. 'website' => [
  58. "class" => UpdateAction::className(),
  59. 'primaryKeyIdentity' => null,
  60. 'doUpdate' => function($postData)use($service){
  61. return $service->updateWebsiteSetting($postData);
  62. },
  63. "data" => function($updateResultModel)use($service, $frontendSupportLanguages, $timezones){
  64. $model = $updateResultModel === null ? $service->getModel("website") : $updateResultModel;
  65. return [
  66. "model" => $model,
  67. 'frontendSupportLanguages' => $frontendSupportLanguages,
  68. 'timezones' => $timezones,
  69. ];
  70. },
  71. 'successRedirect' => ["setting/website"]
  72. ],
  73. 'custom' => [
  74. 'class' => UpdateAction::className(),
  75. 'primaryKeyIdentity' => null,
  76. "doUpdate" => function($postData)use($service){
  77. return $service->updateCustomSetting($postData);
  78. },
  79. "data" => function($updateResultModel) use($service){
  80. $model = $updateResultModel === null ? $service->getModel("custom") : $updateResultModel;
  81. return [
  82. 'settings' => $model,
  83. 'model' => $service->newModel(),
  84. ];
  85. },
  86. 'successRedirect' => ["setting/custom"]
  87. ],
  88. "custom-delete" => [
  89. "class" => DeleteAction::className(),
  90. "doDelete" => function($id)use($service){
  91. return $service->delete($id);
  92. },
  93. ],
  94. 'custom-create' => [
  95. "class" => CreateAction::className(),
  96. 'doCreate' => function($postData) use($service) {
  97. return $service->create($postData, ['type' => Options::TYPE_CUSTOM]);
  98. },
  99. "data" => function($createResultModel)use($service){
  100. $model = $createResultModel === null ? $service->newModel(['type'=>Options::TYPE_CUSTOM]) : $createResultModel;
  101. return [
  102. 'model' => $model,
  103. ];
  104. },
  105. ],
  106. 'custom-update' => [
  107. "class" => UpdateAction::className(),
  108. 'doUpdate' => function($id, $postData)use($service){
  109. return $service->update($id, $postData);
  110. },
  111. "data" => function($id, $updateResultModel)use($service){
  112. $this->layout = false;
  113. $model = $updateResultModel === null ? $service->getModel($id) : $updateResultModel;
  114. return [
  115. 'model' => $model,
  116. ];
  117. },
  118. ],
  119. "smtp" => [
  120. "class" => UpdateAction::className(),
  121. 'primaryKeyIdentity' => null,
  122. "doUpdate" => function($postData)use($service){
  123. return $service->updateSMTPSetting($postData);
  124. },
  125. "data" => function($updateResultModel) use($service){
  126. $model = $updateResultModel === null ? $service->getModel("smtp") : $updateResultModel;
  127. return [
  128. "model" => $model,
  129. ];
  130. },
  131. 'successRedirect' => ['setting/smtp']
  132. ],
  133. 'test-smtp' => [
  134. 'class' => DoAction::className(),
  135. 'primaryKeyIdentity' => null,
  136. 'do' => function($postData) use($service) {
  137. return $service->testSMTPSetting($postData);
  138. },
  139. ],
  140. ];
  141. }
  142. }