ConfigController.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <?php
  2. namespace App\Http\Controllers\V1\Admin;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests\Admin\ConfigSave;
  5. use App\Jobs\SendEmailJob;
  6. use App\Services\ConfigService;
  7. use App\Services\TelegramService;
  8. use App\Utils\Dict;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Support\Facades\Artisan;
  11. use Illuminate\Support\Facades\File;
  12. use Illuminate\Support\Facades\Mail;
  13. class ConfigController extends Controller
  14. {
  15. public function getEmailTemplate()
  16. {
  17. $path = resource_path('views/mail/');
  18. $files = array_map(function ($item) use ($path) {
  19. return str_replace($path, '', $item);
  20. }, glob($path . '*'));
  21. return response([
  22. 'data' => $files
  23. ]);
  24. }
  25. public function getThemeTemplate()
  26. {
  27. $path = public_path('theme/');
  28. $files = array_map(function ($item) use ($path) {
  29. return str_replace($path, '', $item);
  30. }, glob($path . '*'));
  31. return response([
  32. 'data' => $files
  33. ]);
  34. }
  35. public function testSendMail(Request $request)
  36. {
  37. $obj = new SendEmailJob([
  38. 'email' => $request->user['email'],
  39. 'subject' => 'This is v2board test email',
  40. 'template_name' => 'notify',
  41. 'template_value' => [
  42. 'name' => config('v2board.app_name', 'V2Board'),
  43. 'content' => 'This is v2board test email',
  44. 'url' => config('v2board.app_url')
  45. ]
  46. ]);
  47. return response([
  48. 'data' => true,
  49. 'log' => $obj->handle()
  50. ]);
  51. }
  52. public function setTelegramWebhook(Request $request)
  53. {
  54. $hookUrl = url('/api/v1/guest/telegram/webhook?access_token=' . md5(config('v2board.telegram_bot_token', $request->input('telegram_bot_token'))));
  55. $telegramService = new TelegramService($request->input('telegram_bot_token'));
  56. $telegramService->getMe();
  57. $telegramService->setWebhook($hookUrl);
  58. return response([
  59. 'data' => true
  60. ]);
  61. }
  62. public function fetch(Request $request)
  63. {
  64. $key = $request->input('key');
  65. $data = (new ConfigService)->getDefaultConfig();
  66. if ($key && isset($data[$key])) {
  67. return response([
  68. 'data' => [
  69. $key => $data[$key]
  70. ]
  71. ]);
  72. };
  73. // TODO: default should be in Dict
  74. return response([
  75. 'data' => $data
  76. ]);
  77. }
  78. public function save(ConfigSave $request)
  79. {
  80. $data = $request->validated();
  81. $config = config('v2board');
  82. foreach (ConfigSave::RULES as $k => $v) {
  83. if (!in_array($k, array_keys(ConfigSave::RULES))) {
  84. unset($config[$k]);
  85. continue;
  86. }
  87. if (array_key_exists($k, $data)) {
  88. $config[$k] = $data[$k];
  89. }
  90. }
  91. $data = var_export($config, 1);
  92. if (!File::put(base_path() . '/config/v2board.php', "<?php\n return $data ;")) {
  93. abort(500, '修改失败');
  94. }
  95. if (function_exists('opcache_reset')) {
  96. if (opcache_reset() === false) {
  97. abort(500, '缓存清除失败,请卸载或检查opcache配置状态');
  98. }
  99. }
  100. Artisan::call('config:cache');
  101. return response([
  102. 'data' => true
  103. ]);
  104. }
  105. }