]> BookStack Code Mirror - bookstack/blob - app/Settings/SettingController.php
Merge pull request #5793 from BookStackApp/role_permission_refactor
[bookstack] / app / Settings / SettingController.php
1 <?php
2
3 namespace BookStack\Settings;
4
5 use BookStack\Activity\ActivityType;
6 use BookStack\App\AppVersion;
7 use BookStack\Http\Controller;
8 use BookStack\Permissions\Permission;
9 use BookStack\Users\Models\User;
10 use Illuminate\Http\Request;
11
12 class SettingController extends Controller
13 {
14     /**
15      * Handle requests to the settings index path.
16      */
17     public function index()
18     {
19         return redirect('/settings/features');
20     }
21
22     /**
23      * Display the settings for the given category.
24      */
25     public function category(string $category)
26     {
27         $this->ensureCategoryExists($category);
28         $this->checkPermission(Permission::SettingsManage);
29         $this->setPageTitle(trans('settings.settings'));
30
31         return view('settings.categories.' . $category, [
32             'category'  => $category,
33             'version'   => AppVersion::get(),
34             'guestUser' => User::getGuest(),
35         ]);
36     }
37
38     /**
39      * Update the specified settings in storage.
40      */
41     public function update(Request $request, AppSettingsStore $store, string $category)
42     {
43         $this->ensureCategoryExists($category);
44         $this->preventAccessInDemoMode();
45         $this->checkPermission(Permission::SettingsManage);
46         $this->validate($request, [
47             'app_logo' => ['nullable', ...$this->getImageValidationRules()],
48             'app_icon' => ['nullable', ...$this->getImageValidationRules()],
49         ]);
50
51         $store->storeFromUpdateRequest($request, $category);
52         $this->logActivity(ActivityType::SETTINGS_UPDATE, $category);
53
54         return redirect("/settings/{$category}");
55     }
56
57     protected function ensureCategoryExists(string $category): void
58     {
59         if (!view()->exists('settings.categories.' . $category)) {
60             abort(404);
61         }
62     }
63 }