1 <?php namespace BookStack\Http\Controllers;
3 use BookStack\Auth\User;
4 use BookStack\Notifications\TestEmail;
5 use BookStack\Uploads\ImageRepo;
6 use BookStack\Uploads\ImageService;
7 use Illuminate\Http\Request;
8 use Illuminate\Http\Response;
11 class SettingController extends Controller
16 * SettingController constructor.
19 public function __construct(ImageRepo $imageRepo)
21 $this->imageRepo = $imageRepo;
22 parent::__construct();
27 * Display a listing of the settings.
30 public function index()
32 $this->checkPermission('settings-manage');
33 $this->setPageTitle(trans('settings.settings'));
35 // Get application version
36 $version = trim(file_get_contents(base_path('version')));
38 return view('settings.index', [
39 'version' => $version,
40 'guestUser' => User::getDefault()
45 * Update the specified settings in storage.
46 * @param Request $request
49 public function update(Request $request)
51 $this->preventAccessInDemoMode();
52 $this->checkPermission('settings-manage');
53 $this->validate($request, [
54 'app_logo' => $this->imageRepo->getImageValidationRules(),
57 // Cycles through posted settings and update them
58 foreach ($request->all() as $name => $value) {
59 if (strpos($name, 'setting-') !== 0) {
62 $key = str_replace('setting-', '', trim($name));
63 setting()->put($key, $value);
66 // Update logo image if set
67 if ($request->has('app_logo')) {
68 $logoFile = $request->file('app_logo');
69 $this->imageRepo->destroyByType('system');
70 $image = $this->imageRepo->saveNew($logoFile, 'system', 0, null, 86);
71 setting()->put('app-logo', $image->url);
74 // Clear logo image if requested
75 if ($request->get('app_logo_reset', null)) {
76 $this->imageRepo->destroyByType('system');
77 setting()->remove('app-logo');
80 $this->showSuccessNotification(trans('settings.settings_save_success'));
81 return redirect('/settings');
85 * Show the page for application maintenance.
86 * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
88 public function showMaintenance()
90 $this->checkPermission('settings-manage');
91 $this->setPageTitle(trans('settings.maint'));
93 // Get application version
94 $version = trim(file_get_contents(base_path('version')));
96 return view('settings.maintenance', ['version' => $version]);
100 * Action to clean-up images in the system.
101 * @param Request $request
102 * @param ImageService $imageService
103 * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
105 public function cleanupImages(Request $request, ImageService $imageService)
107 $this->checkPermission('settings-manage');
109 $checkRevisions = !($request->get('ignore_revisions', 'false') === 'true');
110 $dryRun = !($request->has('confirm'));
112 $imagesToDelete = $imageService->deleteUnusedImages($checkRevisions, $dryRun);
113 $deleteCount = count($imagesToDelete);
114 if ($deleteCount === 0) {
115 $this->showWarningNotification(trans('settings.maint_image_cleanup_nothing_found'));
116 return redirect('/settings/maintenance')->withInput();
120 session()->flash('cleanup-images-warning', trans('settings.maint_image_cleanup_warning', ['count' => $deleteCount]));
122 $this->showSuccessNotification(trans('settings.maint_image_cleanup_success', ['count' => $deleteCount]));
125 return redirect('/settings/maintenance#image-cleanup')->withInput();
129 * Action to send a test e-mail to the current user.
130 * @param Request $request
132 * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
134 public function sendTestEmail(Request $request)
136 $this->checkPermission('settings-manage');
138 user()->notify(new TestEmail());
139 $this->showSuccessNotification(trans('settings.maint_send_test_email_success', ['address' => user()->email]));
141 return redirect('/settings/maintenance#image-cleanup')->withInput();