]> BookStack Code Mirror - bookstack/blob - app/Settings/AppSettingsStore.php
Adjusted/improved some color setting wording
[bookstack] / app / Settings / AppSettingsStore.php
1 <?php
2
3 namespace BookStack\Settings;
4
5 use BookStack\Uploads\ImageRepo;
6 use Illuminate\Http\Request;
7
8 class AppSettingsStore
9 {
10     protected ImageRepo $imageRepo;
11
12     public function __construct(ImageRepo $imageRepo)
13     {
14         $this->imageRepo = $imageRepo;
15     }
16
17     public function storeFromUpdateRequest(Request $request, string $category)
18     {
19         $this->storeSimpleSettings($request);
20         if ($category === 'customization') {
21             $this->updateAppLogo($request);
22             $this->updateAppIcon($request);
23         }
24     }
25
26     protected function updateAppIcon(Request $request): void
27     {
28         $sizes = [180, 128, 64, 32];
29
30         // Update icon image if set
31         if ($request->hasFile('app_icon')) {
32             $iconFile = $request->file('app_icon');
33             $this->destroyExistingSettingImage('app-icon');
34             $image = $this->imageRepo->saveNew($iconFile, 'system', 0, 256, 256);
35             setting()->put('app-icon', $image->url);
36
37             foreach ($sizes as $size) {
38                 $this->destroyExistingSettingImage('app-icon-' . $size);
39                 $icon = $this->imageRepo->saveNew($iconFile, 'system', 0, $size, $size);
40                 setting()->put('app-icon-' . $size, $icon->url);
41             }
42         }
43
44         // Clear icon image if requested
45         if ($request->get('app_icon_reset')) {
46             $this->destroyExistingSettingImage('app-icon');
47             setting()->remove('app-icon');
48             foreach ($sizes as $size) {
49                 $this->destroyExistingSettingImage('app-icon-' . $size);
50                 setting()->remove('app-icon-' . $size);
51             }
52         }
53     }
54
55     protected function updateAppLogo(Request $request): void
56     {
57         // Update logo image if set
58         if ($request->hasFile('app_logo')) {
59             $logoFile = $request->file('app_logo');
60             $this->destroyExistingSettingImage('app-logo');
61             $image = $this->imageRepo->saveNew($logoFile, 'system', 0, null, 86);
62             setting()->put('app-logo', $image->url);
63         }
64
65         // Clear logo image if requested
66         if ($request->get('app_logo_reset')) {
67             $this->destroyExistingSettingImage('app-logo');
68             setting()->remove('app-logo');
69         }
70     }
71
72     protected function storeSimpleSettings(Request $request): void
73     {
74         foreach ($request->all() as $name => $value) {
75             if (strpos($name, 'setting-') !== 0) {
76                 continue;
77             }
78
79             $key = str_replace('setting-', '', trim($name));
80             setting()->put($key, $value);
81         }
82     }
83
84     protected function destroyExistingSettingImage(string $settingKey)
85     {
86         $existingVal = setting()->get($settingKey);
87         if ($existingVal) {
88             $this->imageRepo->destroyByUrlAndType($existingVal, 'system');
89         }
90     }
91 }