|
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\API;
|
|
|
use App\Http\Controllers\Controller;
|
|
|
use App\Http\Requests\API\Config\AllowSettingConfig;
|
|
|
use App\Models\Config;
|
|
|
+use App\Models\Enums\ConfigGroup;
|
|
|
use App\Models\Enums\ObjectAction;
|
|
|
use Illuminate\Http\Request;
|
|
|
|
|
@@ -55,6 +56,13 @@ class ConfigController extends Controller
|
|
|
{
|
|
|
$relations = ObjectAction::messageNotificationItems();
|
|
|
|
|
|
+ $settingResult = Config::query()
|
|
|
+ ->where("group", ConfigGroup::MESSAGE_NOTIFICATION)
|
|
|
+ ->where("key", "setting")
|
|
|
+ ->first();
|
|
|
+
|
|
|
+ $setting = $settingResult ? json_decode($settingResult->value, true) : [];
|
|
|
+
|
|
|
$items = [];
|
|
|
foreach ($relations as $group => $relation) {
|
|
|
$item = [
|
|
@@ -72,12 +80,12 @@ class ConfigController extends Controller
|
|
|
|
|
|
$item['email'] = [
|
|
|
...$actionItem,
|
|
|
- 'checked' => true,
|
|
|
+ 'checked' => in_array($action->value, $setting['email'] ?? []),
|
|
|
];
|
|
|
|
|
|
$item['browser'] = [
|
|
|
...$actionItem,
|
|
|
- 'checked' => true,
|
|
|
+ 'checked' => in_array($action->value, $setting['browser'] ?? []),
|
|
|
];
|
|
|
}
|
|
|
|
|
@@ -88,4 +96,36 @@ class ConfigController extends Controller
|
|
|
'data' => $items
|
|
|
]);
|
|
|
}
|
|
|
+
|
|
|
+ public function storeMessageNotificationSetting(Request $request)
|
|
|
+ {
|
|
|
+ $relations = ObjectAction::messageNotificationItems();
|
|
|
+
|
|
|
+ $settings = [];
|
|
|
+ foreach ($request->all() as $group => $items) {
|
|
|
+ if (! isset($relations[$group])) {
|
|
|
+ return $this->badRequest(sprintf("Group '%s' does not exist", $group));
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach(['email', 'browser'] as $settingItem) {
|
|
|
+ foreach ($items[$settingItem] as $item) {
|
|
|
+ $action = ObjectAction::tryFrom($item);
|
|
|
+ if (! in_array($action, $relations[$group])) {
|
|
|
+ return $this->badRequest(sprintf("In group '%s', '%s' exists", $group, $item));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $settings[$group] = $items;
|
|
|
+ }
|
|
|
+
|
|
|
+ Config::query()->updateOrCreate([
|
|
|
+ 'group' => ConfigGroup::MESSAGE_NOTIFICATION,
|
|
|
+ 'key' => 'setting',
|
|
|
+ ], [
|
|
|
+ 'value' => json_encode($settings),
|
|
|
+ ]);
|
|
|
+
|
|
|
+ return $this->noContent();
|
|
|
+ }
|
|
|
}
|