ConfigController.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. namespace App\Http\Controllers\API;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests\API\Config\AllowSettingConfig;
  5. use App\Models\Config;
  6. use App\Models\Enums\ConfigGroup;
  7. use App\Models\Enums\ObjectAction;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\Auth;
  10. class ConfigController extends Controller
  11. {
  12. public function index(Request $request)
  13. {
  14. $groups = $request->get("group", []);
  15. $data = [];
  16. if ($groups) {
  17. $data = Config::query()->whereIn("group", $groups)->get([
  18. 'group', 'key', 'value'
  19. ])->groupBy("group");
  20. }
  21. return $this->success([
  22. 'data' => $data
  23. ]);
  24. }
  25. public function setting(Request $request)
  26. {
  27. $allowSettingConfig = new AllowSettingConfig();
  28. foreach ($request->all() as $item) {
  29. try {
  30. $allowSettingConfig->check($item['group'], $item['key'], $item['value']);
  31. } catch (\Exception $exception) {
  32. return $this->forbidden($exception->getMessage());
  33. }
  34. }
  35. foreach ($request->all() as $item) {
  36. Config::query()->updateOrCreate([
  37. 'group' => $item['group'],
  38. 'key' => $item['key'],
  39. 'company_id' => Auth::user()->company_id,
  40. ], [
  41. 'value' => $item['value']
  42. ]);
  43. }
  44. return $this->noContent();
  45. }
  46. public function messageNotificationSetting()
  47. {
  48. $relations = ObjectAction::messageNotificationItems();
  49. $settingResult = Config::query()
  50. ->where("group", ConfigGroup::MESSAGE_NOTIFICATION)
  51. ->where("key", "setting")
  52. ->first();
  53. $setting = $settingResult ? json_decode($settingResult->value, true) : [];
  54. $items = [];
  55. foreach ($relations as $group => $relation) {
  56. $item = [
  57. 'group_key' => $group,
  58. 'group_name' => __("action-labels.object_type." . $group),
  59. 'email' => [],
  60. 'browser' => [],
  61. ];
  62. foreach ($relation as $action) {
  63. $actionItem = [
  64. 'key' => $action->value,
  65. 'name' => __("action-labels.label." . $action->value),
  66. ];
  67. $item['email'][] = [
  68. ...$actionItem,
  69. 'checked' => in_array($action->value, $setting[$group]['email'] ?? []),
  70. ];
  71. $item['browser'][] = [
  72. ...$actionItem,
  73. 'checked' => in_array($action->value, $setting[$group]['browser'] ?? []),
  74. ];
  75. }
  76. $items[] = $item;
  77. }
  78. return $this->success([
  79. 'data' => $items
  80. ]);
  81. }
  82. public function storeMessageNotificationSetting(Request $request)
  83. {
  84. $relations = ObjectAction::messageNotificationItems();
  85. $settings = [];
  86. foreach ($request->all() as $group => $items) {
  87. if (! isset($relations[$group])) {
  88. return $this->badRequest(sprintf("Group '%s' does not exist", $group));
  89. }
  90. foreach(['email', 'browser'] as $settingItem) {
  91. foreach ($items[$settingItem] as $item) {
  92. $action = ObjectAction::tryFrom($item);
  93. if (! in_array($action, $relations[$group])) {
  94. return $this->badRequest(sprintf("In group '%s', '%s' exists", $group, $item));
  95. }
  96. }
  97. }
  98. $settings[$group] = $items;
  99. }
  100. Config::query()->updateOrCreate([
  101. 'group' => ConfigGroup::MESSAGE_NOTIFICATION,
  102. 'key' => 'setting',
  103. 'company_id' => Auth::user()->company_id,
  104. ], [
  105. 'value' => json_encode($settings),
  106. ]);
  107. return $this->noContent();
  108. }
  109. }