mirror of
				https://github.com/BookStackApp/BookStack.git
				synced 2025-11-03 02:13:16 +03:00 
			
		
		
		
	Refactored notification showing and global view data
This commit is contained in:
		@@ -65,14 +65,14 @@ class ConfirmEmailController extends Controller
 | 
				
			|||||||
            $userId = $this->emailConfirmationService->checkTokenAndGetUserId($token);
 | 
					            $userId = $this->emailConfirmationService->checkTokenAndGetUserId($token);
 | 
				
			||||||
        } catch (Exception $exception) {
 | 
					        } catch (Exception $exception) {
 | 
				
			||||||
            if ($exception instanceof UserTokenNotFoundException) {
 | 
					            if ($exception instanceof UserTokenNotFoundException) {
 | 
				
			||||||
                session()->flash('error', trans('errors.email_confirmation_invalid'));
 | 
					                $this->showErrorNotification( trans('errors.email_confirmation_invalid'));
 | 
				
			||||||
                return redirect('/register');
 | 
					                return redirect('/register');
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if ($exception instanceof UserTokenExpiredException) {
 | 
					            if ($exception instanceof UserTokenExpiredException) {
 | 
				
			||||||
                $user = $this->userRepo->getById($exception->userId);
 | 
					                $user = $this->userRepo->getById($exception->userId);
 | 
				
			||||||
                $this->emailConfirmationService->sendConfirmation($user);
 | 
					                $this->emailConfirmationService->sendConfirmation($user);
 | 
				
			||||||
                session()->flash('error', trans('errors.email_confirmation_expired'));
 | 
					                $this->showErrorNotification( trans('errors.email_confirmation_expired'));
 | 
				
			||||||
                return redirect('/register/confirm');
 | 
					                return redirect('/register/confirm');
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -84,7 +84,7 @@ class ConfirmEmailController extends Controller
 | 
				
			|||||||
        $user->save();
 | 
					        $user->save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        auth()->login($user);
 | 
					        auth()->login($user);
 | 
				
			||||||
        session()->flash('success', trans('auth.email_confirm_success'));
 | 
					        $this->showSuccessNotification( trans('auth.email_confirm_success'));
 | 
				
			||||||
        $this->emailConfirmationService->deleteByUser($user);
 | 
					        $this->emailConfirmationService->deleteByUser($user);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return redirect('/');
 | 
					        return redirect('/');
 | 
				
			||||||
@@ -106,11 +106,11 @@ class ConfirmEmailController extends Controller
 | 
				
			|||||||
        try {
 | 
					        try {
 | 
				
			||||||
            $this->emailConfirmationService->sendConfirmation($user);
 | 
					            $this->emailConfirmationService->sendConfirmation($user);
 | 
				
			||||||
        } catch (Exception $e) {
 | 
					        } catch (Exception $e) {
 | 
				
			||||||
            session()->flash('error', trans('auth.email_confirm_send_error'));
 | 
					            $this->showErrorNotification( trans('auth.email_confirm_send_error'));
 | 
				
			||||||
            return redirect('/register/confirm');
 | 
					            return redirect('/register/confirm');
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        session()->flash('success', trans('auth.email_confirm_resent'));
 | 
					        $this->showSuccessNotification( trans('auth.email_confirm_resent'));
 | 
				
			||||||
        return redirect('/register/confirm');
 | 
					        return redirect('/register/confirm');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,7 +53,7 @@ class ForgotPasswordController extends Controller
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        if ($response === Password::RESET_LINK_SENT) {
 | 
					        if ($response === Password::RESET_LINK_SENT) {
 | 
				
			||||||
            $message = trans('auth.reset_password_sent_success', ['email' => $request->get('email')]);
 | 
					            $message = trans('auth.reset_password_sent_success', ['email' => $request->get('email')]);
 | 
				
			||||||
            session()->flash('success', $message);
 | 
					            $this->showSuccessNotification( $message);
 | 
				
			||||||
            return back()->with('status', trans($response));
 | 
					            return back()->with('status', trans($response));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -166,14 +166,14 @@ class RegisterController extends Controller
 | 
				
			|||||||
            try {
 | 
					            try {
 | 
				
			||||||
                $this->emailConfirmationService->sendConfirmation($newUser);
 | 
					                $this->emailConfirmationService->sendConfirmation($newUser);
 | 
				
			||||||
            } catch (Exception $e) {
 | 
					            } catch (Exception $e) {
 | 
				
			||||||
                session()->flash('error', trans('auth.email_confirm_send_error'));
 | 
					                $this->showErrorNotification(trans('auth.email_confirm_send_error'));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return redirect('/register/confirm');
 | 
					            return redirect('/register/confirm');
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        auth()->login($newUser);
 | 
					        auth()->login($newUser);
 | 
				
			||||||
        session()->flash('success', trans('auth.register_success'));
 | 
					        $this->showSuccessNotification(trans('auth.register_success'));
 | 
				
			||||||
        return redirect($this->redirectPath());
 | 
					        return redirect($this->redirectPath());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,7 +44,7 @@ class ResetPasswordController extends Controller
 | 
				
			|||||||
    protected function sendResetResponse(Request $request, $response)
 | 
					    protected function sendResetResponse(Request $request, $response)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $message = trans('auth.reset_password_success');
 | 
					        $message = trans('auth.reset_password_success');
 | 
				
			||||||
        session()->flash('success', $message);
 | 
					        $this->showSuccessNotification( $message);
 | 
				
			||||||
        return redirect($this->redirectPath())
 | 
					        return redirect($this->redirectPath())
 | 
				
			||||||
            ->with('status', trans($response));
 | 
					            ->with('status', trans($response));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -77,7 +77,7 @@ class UserInviteController extends Controller
 | 
				
			|||||||
        $user->save();
 | 
					        $user->save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        auth()->login($user);
 | 
					        auth()->login($user);
 | 
				
			||||||
        session()->flash('success', trans('auth.user_invite_success', ['appName' => setting('app-name')]));
 | 
					        $this->showSuccessNotification( trans('auth.user_invite_success', ['appName' => setting('app-name')]));
 | 
				
			||||||
        $this->inviteService->deleteByUser($user);
 | 
					        $this->inviteService->deleteByUser($user);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return redirect('/');
 | 
					        return redirect('/');
 | 
				
			||||||
@@ -96,7 +96,7 @@ class UserInviteController extends Controller
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($exception instanceof UserTokenExpiredException) {
 | 
					        if ($exception instanceof UserTokenExpiredException) {
 | 
				
			||||||
            session()->flash('error', trans('errors.invite_token_expired'));
 | 
					            $this->showErrorNotification( trans('errors.invite_token_expired'));
 | 
				
			||||||
            return redirect('/password/email');
 | 
					            return redirect('/password/email');
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -380,7 +380,7 @@ class BookController extends Controller
 | 
				
			|||||||
        $book = $this->bookRepo->getBySlug($bookSlug);
 | 
					        $book = $this->bookRepo->getBySlug($bookSlug);
 | 
				
			||||||
        $this->checkOwnablePermission('restrictions-manage', $book);
 | 
					        $this->checkOwnablePermission('restrictions-manage', $book);
 | 
				
			||||||
        $this->bookRepo->updateEntityPermissionsFromRequest($request, $book);
 | 
					        $this->bookRepo->updateEntityPermissionsFromRequest($request, $book);
 | 
				
			||||||
        session()->flash('success', trans('entities.books_permissions_updated'));
 | 
					        $this->showSuccessNotification(trans('entities.books_permissions_updated'));
 | 
				
			||||||
        return redirect($book->getUrl());
 | 
					        return redirect($book->getUrl());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -254,7 +254,7 @@ class BookshelfController extends Controller
 | 
				
			|||||||
        $this->checkOwnablePermission('restrictions-manage', $shelf);
 | 
					        $this->checkOwnablePermission('restrictions-manage', $shelf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $this->entityRepo->updateEntityPermissionsFromRequest($request, $shelf);
 | 
					        $this->entityRepo->updateEntityPermissionsFromRequest($request, $shelf);
 | 
				
			||||||
        session()->flash('success', trans('entities.shelves_permissions_updated'));
 | 
					        $this->showSuccessNotification( trans('entities.shelves_permissions_updated'));
 | 
				
			||||||
        return redirect($shelf->getUrl());
 | 
					        return redirect($shelf->getUrl());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -270,7 +270,7 @@ class BookshelfController extends Controller
 | 
				
			|||||||
        $this->checkOwnablePermission('restrictions-manage', $shelf);
 | 
					        $this->checkOwnablePermission('restrictions-manage', $shelf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $updateCount = $this->entityRepo->copyBookshelfPermissions($shelf);
 | 
					        $updateCount = $this->entityRepo->copyBookshelfPermissions($shelf);
 | 
				
			||||||
        session()->flash('success', trans('entities.shelves_copy_permission_success', ['count' => $updateCount]));
 | 
					        $this->showSuccessNotification( trans('entities.shelves_copy_permission_success', ['count' => $updateCount]));
 | 
				
			||||||
        return redirect($shelf->getUrl());
 | 
					        return redirect($shelf->getUrl());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -197,13 +197,13 @@ class ChapterController extends Controller
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($parent === false || $parent === null) {
 | 
					        if ($parent === false || $parent === null) {
 | 
				
			||||||
            session()->flash('error', trans('errors.selected_book_not_found'));
 | 
					            $this->showErrorNotification( trans('errors.selected_book_not_found'));
 | 
				
			||||||
            return redirect()->back();
 | 
					            return redirect()->back();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $this->entityRepo->changeBook('chapter', $parent->id, $chapter, true);
 | 
					        $this->entityRepo->changeBook('chapter', $parent->id, $chapter, true);
 | 
				
			||||||
        Activity::add($chapter, 'chapter_move', $chapter->book->id);
 | 
					        Activity::add($chapter, 'chapter_move', $chapter->book->id);
 | 
				
			||||||
        session()->flash('success', trans('entities.chapter_move_success', ['bookName' => $parent->name]));
 | 
					        $this->showSuccessNotification( trans('entities.chapter_move_success', ['bookName' => $parent->name]));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return redirect($chapter->getUrl());
 | 
					        return redirect($chapter->getUrl());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -240,7 +240,7 @@ class ChapterController extends Controller
 | 
				
			|||||||
        $chapter = $this->entityRepo->getEntityBySlug('chapter', $chapterSlug, $bookSlug);
 | 
					        $chapter = $this->entityRepo->getEntityBySlug('chapter', $chapterSlug, $bookSlug);
 | 
				
			||||||
        $this->checkOwnablePermission('restrictions-manage', $chapter);
 | 
					        $this->checkOwnablePermission('restrictions-manage', $chapter);
 | 
				
			||||||
        $this->entityRepo->updateEntityPermissionsFromRequest($request, $chapter);
 | 
					        $this->entityRepo->updateEntityPermissionsFromRequest($request, $chapter);
 | 
				
			||||||
        session()->flash('success', trans('entities.chapters_permissions_success'));
 | 
					        $this->showSuccessNotification( trans('entities.chapters_permissions_success'));
 | 
				
			||||||
        return redirect($chapter->getUrl());
 | 
					        return redirect($chapter->getUrl());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,6 +18,7 @@ abstract class Controller extends BaseController
 | 
				
			|||||||
     * @var User static
 | 
					     * @var User static
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    protected $currentUser;
 | 
					    protected $currentUser;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @var bool
 | 
					     * @var bool
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
@@ -28,28 +29,15 @@ abstract class Controller extends BaseController
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public function __construct()
 | 
					    public function __construct()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $this->middleware(function ($request, $next) {
 | 
					        $this->currentUser = user();
 | 
				
			||||||
 | 
					 | 
				
			||||||
            // Get a user instance for the current user
 | 
					 | 
				
			||||||
            $user = user();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // Share variables with controllers
 | 
					 | 
				
			||||||
            $this->currentUser = $user;
 | 
					 | 
				
			||||||
        $this->signedIn = auth()->check();
 | 
					        $this->signedIn = auth()->check();
 | 
				
			||||||
 | 
					 | 
				
			||||||
            // Share variables with views
 | 
					 | 
				
			||||||
            view()->share('signedIn', $this->signedIn);
 | 
					 | 
				
			||||||
            view()->share('currentUser', $user);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            return $next($request);
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Stops the application and shows a permission error if
 | 
					     * Stops the application and shows a permission error if
 | 
				
			||||||
     * the application is in demo mode.
 | 
					     * the application is in demo mode.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    protected function preventAccessForDemoUsers()
 | 
					    protected function preventAccessInDemoMode()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (config('app.env') === 'demo') {
 | 
					        if (config('app.env') === 'demo') {
 | 
				
			||||||
            $this->showPermissionError();
 | 
					            $this->showPermissionError();
 | 
				
			||||||
@@ -75,7 +63,7 @@ abstract class Controller extends BaseController
 | 
				
			|||||||
            $response = response()->json(['error' => trans('errors.permissionJson')], 403);
 | 
					            $response = response()->json(['error' => trans('errors.permissionJson')], 403);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            $response = redirect('/');
 | 
					            $response = redirect('/');
 | 
				
			||||||
            session()->flash('error', trans('errors.permission'));
 | 
					            $this->showErrorNotification( trans('errors.permission'));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        throw new HttpResponseException($response);
 | 
					        throw new HttpResponseException($response);
 | 
				
			||||||
@@ -178,4 +166,31 @@ abstract class Controller extends BaseController
 | 
				
			|||||||
            'Content-Disposition' => 'attachment; filename="' . $fileName . '"'
 | 
					            'Content-Disposition' => 'attachment; filename="' . $fileName . '"'
 | 
				
			||||||
        ]);
 | 
					        ]);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Show a positive, successful notification to the user on next view load.
 | 
				
			||||||
 | 
					     * @param string $message
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected function showSuccessNotification(string $message)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        session()->flash('success', $message);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Show a warning notification to the user on next view load.
 | 
				
			||||||
 | 
					     * @param string $message
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected function showWarningNotification(string $message)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        session()->flash('warning', $message);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Show an error notification to the user on next view load.
 | 
				
			||||||
 | 
					     * @param string $message
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    protected function showErrorNotification(string $message)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        session()->flash('error', $message);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -240,7 +240,7 @@ class PageController extends Controller
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (count($warnings) > 0) {
 | 
					        if (count($warnings) > 0) {
 | 
				
			||||||
            session()->flash('warning', implode("\n", $warnings));
 | 
					            $this->showWarningNotification( implode("\n", $warnings));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $draftsEnabled = $this->signedIn;
 | 
					        $draftsEnabled = $this->signedIn;
 | 
				
			||||||
@@ -359,7 +359,7 @@ class PageController extends Controller
 | 
				
			|||||||
        $this->pageRepo->destroyPage($page);
 | 
					        $this->pageRepo->destroyPage($page);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Activity::addMessage('page_delete', $book->id, $page->name);
 | 
					        Activity::addMessage('page_delete', $book->id, $page->name);
 | 
				
			||||||
        session()->flash('success', trans('entities.pages_delete_success'));
 | 
					        $this->showSuccessNotification( trans('entities.pages_delete_success'));
 | 
				
			||||||
        return redirect($book->getUrl());
 | 
					        return redirect($book->getUrl());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -375,7 +375,7 @@ class PageController extends Controller
 | 
				
			|||||||
        $page = $this->pageRepo->getById('page', $pageId, true);
 | 
					        $page = $this->pageRepo->getById('page', $pageId, true);
 | 
				
			||||||
        $book = $page->book;
 | 
					        $book = $page->book;
 | 
				
			||||||
        $this->checkOwnablePermission('page-update', $page);
 | 
					        $this->checkOwnablePermission('page-update', $page);
 | 
				
			||||||
        session()->flash('success', trans('entities.pages_delete_draft_success'));
 | 
					        $this->showSuccessNotification( trans('entities.pages_delete_draft_success'));
 | 
				
			||||||
        $this->pageRepo->destroyPage($page);
 | 
					        $this->pageRepo->destroyPage($page);
 | 
				
			||||||
        return redirect($book->getUrl());
 | 
					        return redirect($book->getUrl());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -491,12 +491,12 @@ class PageController extends Controller
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        // Check if its the latest revision, cannot delete latest revision.
 | 
					        // Check if its the latest revision, cannot delete latest revision.
 | 
				
			||||||
        if (intval($currentRevision->id) === intval($revId)) {
 | 
					        if (intval($currentRevision->id) === intval($revId)) {
 | 
				
			||||||
            session()->flash('error', trans('entities.revision_cannot_delete_latest'));
 | 
					            $this->showErrorNotification( trans('entities.revision_cannot_delete_latest'));
 | 
				
			||||||
            return response()->view('pages.revisions', ['page' => $page, 'book' => $page->book, 'current' => $page], 400);
 | 
					            return response()->view('pages.revisions', ['page' => $page, 'book' => $page->book, 'current' => $page], 400);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $revision->delete();
 | 
					        $revision->delete();
 | 
				
			||||||
        session()->flash('success', trans('entities.revision_delete_success'));
 | 
					        $this->showSuccessNotification( trans('entities.revision_delete_success'));
 | 
				
			||||||
        return redirect($page->getUrl('/revisions'));
 | 
					        return redirect($page->getUrl('/revisions'));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -568,7 +568,7 @@ class PageController extends Controller
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        $this->pageRepo->changePageParent($page, $parent);
 | 
					        $this->pageRepo->changePageParent($page, $parent);
 | 
				
			||||||
        Activity::add($page, 'page_move', $page->book->id);
 | 
					        Activity::add($page, 'page_move', $page->book->id);
 | 
				
			||||||
        session()->flash('success', trans('entities.pages_move_success', ['parentName' => $parent->name]));
 | 
					        $this->showSuccessNotification( trans('entities.pages_move_success', ['parentName' => $parent->name]));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return redirect($page->getUrl());
 | 
					        return redirect($page->getUrl());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -616,7 +616,7 @@ class PageController extends Controller
 | 
				
			|||||||
            try {
 | 
					            try {
 | 
				
			||||||
                $parent = $this->pageRepo->getById($entityType, $entityId);
 | 
					                $parent = $this->pageRepo->getById($entityType, $entityId);
 | 
				
			||||||
            } catch (Exception $e) {
 | 
					            } catch (Exception $e) {
 | 
				
			||||||
                session()->flash(trans('entities.selected_book_chapter_not_found'));
 | 
					                $this->showErrorNotification(trans('entities.selected_book_chapter_not_found'));
 | 
				
			||||||
                return redirect()->back();
 | 
					                return redirect()->back();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -626,7 +626,7 @@ class PageController extends Controller
 | 
				
			|||||||
        $pageCopy = $this->pageRepo->copyPage($page, $parent, $request->get('name', ''));
 | 
					        $pageCopy = $this->pageRepo->copyPage($page, $parent, $request->get('name', ''));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Activity::add($pageCopy, 'page_create', $pageCopy->book->id);
 | 
					        Activity::add($pageCopy, 'page_create', $pageCopy->book->id);
 | 
				
			||||||
        session()->flash('success', trans('entities.pages_copy_success'));
 | 
					        $this->showSuccessNotification( trans('entities.pages_copy_success'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return redirect($pageCopy->getUrl());
 | 
					        return redirect($pageCopy->getUrl());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -663,7 +663,7 @@ class PageController extends Controller
 | 
				
			|||||||
        $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
 | 
					        $page = $this->pageRepo->getBySlug($pageSlug, $bookSlug);
 | 
				
			||||||
        $this->checkOwnablePermission('restrictions-manage', $page);
 | 
					        $this->checkOwnablePermission('restrictions-manage', $page);
 | 
				
			||||||
        $this->pageRepo->updateEntityPermissionsFromRequest($request, $page);
 | 
					        $this->pageRepo->updateEntityPermissionsFromRequest($request, $page);
 | 
				
			||||||
        session()->flash('success', trans('entities.pages_permissions_success'));
 | 
					        $this->showSuccessNotification( trans('entities.pages_permissions_success'));
 | 
				
			||||||
        return redirect($page->getUrl());
 | 
					        return redirect($page->getUrl());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,7 +53,7 @@ class PermissionController extends Controller
 | 
				
			|||||||
        ]);
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $this->permissionsRepo->saveNewRole($request->all());
 | 
					        $this->permissionsRepo->saveNewRole($request->all());
 | 
				
			||||||
        session()->flash('success', trans('settings.role_create_success'));
 | 
					        $this->showSuccessNotification( trans('settings.role_create_success'));
 | 
				
			||||||
        return redirect('/settings/roles');
 | 
					        return redirect('/settings/roles');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -90,7 +90,7 @@ class PermissionController extends Controller
 | 
				
			|||||||
        ]);
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $this->permissionsRepo->updateRole($id, $request->all());
 | 
					        $this->permissionsRepo->updateRole($id, $request->all());
 | 
				
			||||||
        session()->flash('success', trans('settings.role_update_success'));
 | 
					        $this->showSuccessNotification( trans('settings.role_update_success'));
 | 
				
			||||||
        return redirect('/settings/roles');
 | 
					        return redirect('/settings/roles');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -124,11 +124,11 @@ class PermissionController extends Controller
 | 
				
			|||||||
        try {
 | 
					        try {
 | 
				
			||||||
            $this->permissionsRepo->deleteRole($id, $request->get('migrate_role_id'));
 | 
					            $this->permissionsRepo->deleteRole($id, $request->get('migrate_role_id'));
 | 
				
			||||||
        } catch (PermissionsException $e) {
 | 
					        } catch (PermissionsException $e) {
 | 
				
			||||||
            session()->flash('error', $e->getMessage());
 | 
					            $this->showErrorNotification( $e->getMessage());
 | 
				
			||||||
            return redirect()->back();
 | 
					            return redirect()->back();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        session()->flash('success', trans('settings.role_delete_success'));
 | 
					        $this->showSuccessNotification( trans('settings.role_delete_success'));
 | 
				
			||||||
        return redirect('/settings/roles');
 | 
					        return redirect('/settings/roles');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -47,7 +47,7 @@ class SettingController extends Controller
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public function update(Request $request)
 | 
					    public function update(Request $request)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $this->preventAccessForDemoUsers();
 | 
					        $this->preventAccessInDemoMode();
 | 
				
			||||||
        $this->checkPermission('settings-manage');
 | 
					        $this->checkPermission('settings-manage');
 | 
				
			||||||
        $this->validate($request, [
 | 
					        $this->validate($request, [
 | 
				
			||||||
            'app_logo' => $this->imageRepo->getImageValidationRules(),
 | 
					            'app_logo' => $this->imageRepo->getImageValidationRules(),
 | 
				
			||||||
@@ -76,7 +76,7 @@ class SettingController extends Controller
 | 
				
			|||||||
            setting()->remove('app-logo');
 | 
					            setting()->remove('app-logo');
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        session()->flash('success', trans('settings.settings_save_success'));
 | 
					        $this->showSuccessNotification( trans('settings.settings_save_success'));
 | 
				
			||||||
        return redirect('/settings');
 | 
					        return redirect('/settings');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -111,14 +111,14 @@ class SettingController extends Controller
 | 
				
			|||||||
        $imagesToDelete = $imageService->deleteUnusedImages($checkRevisions, $dryRun);
 | 
					        $imagesToDelete = $imageService->deleteUnusedImages($checkRevisions, $dryRun);
 | 
				
			||||||
        $deleteCount = count($imagesToDelete);
 | 
					        $deleteCount = count($imagesToDelete);
 | 
				
			||||||
        if ($deleteCount === 0) {
 | 
					        if ($deleteCount === 0) {
 | 
				
			||||||
            session()->flash('warning', trans('settings.maint_image_cleanup_nothing_found'));
 | 
					            $this->showWarningNotification( trans('settings.maint_image_cleanup_nothing_found'));
 | 
				
			||||||
            return redirect('/settings/maintenance')->withInput();
 | 
					            return redirect('/settings/maintenance')->withInput();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($dryRun) {
 | 
					        if ($dryRun) {
 | 
				
			||||||
            session()->flash('cleanup-images-warning', trans('settings.maint_image_cleanup_warning', ['count' => $deleteCount]));
 | 
					            session()->flash('cleanup-images-warning', trans('settings.maint_image_cleanup_warning', ['count' => $deleteCount]));
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            session()->flash('success', trans('settings.maint_image_cleanup_success', ['count' => $deleteCount]));
 | 
					            $this->showSuccessNotification( trans('settings.maint_image_cleanup_success', ['count' => $deleteCount]));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return redirect('/settings/maintenance#image-cleanup')->withInput();
 | 
					        return redirect('/settings/maintenance#image-cleanup')->withInput();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -144,7 +144,7 @@ class UserController extends Controller
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public function update(Request $request, $id)
 | 
					    public function update(Request $request, $id)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $this->preventAccessForDemoUsers();
 | 
					        $this->preventAccessInDemoMode();
 | 
				
			||||||
        $this->checkPermissionOrCurrentUser('users-manage', $id);
 | 
					        $this->checkPermissionOrCurrentUser('users-manage', $id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $this->validate($request, [
 | 
					        $this->validate($request, [
 | 
				
			||||||
@@ -202,7 +202,7 @@ class UserController extends Controller
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $user->save();
 | 
					        $user->save();
 | 
				
			||||||
        session()->flash('success', trans('settings.users_edit_success'));
 | 
					        $this->showSuccessNotification( trans('settings.users_edit_success'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $redirectUrl = userCan('users-manage') ? '/settings/users' : ('/settings/users/' . $user->id);
 | 
					        $redirectUrl = userCan('users-manage') ? '/settings/users' : ('/settings/users/' . $user->id);
 | 
				
			||||||
        return redirect($redirectUrl);
 | 
					        return redirect($redirectUrl);
 | 
				
			||||||
@@ -230,23 +230,23 @@ class UserController extends Controller
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public function destroy($id)
 | 
					    public function destroy($id)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $this->preventAccessForDemoUsers();
 | 
					        $this->preventAccessInDemoMode();
 | 
				
			||||||
        $this->checkPermissionOrCurrentUser('users-manage', $id);
 | 
					        $this->checkPermissionOrCurrentUser('users-manage', $id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $user = $this->userRepo->getById($id);
 | 
					        $user = $this->userRepo->getById($id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->userRepo->isOnlyAdmin($user)) {
 | 
					        if ($this->userRepo->isOnlyAdmin($user)) {
 | 
				
			||||||
            session()->flash('error', trans('errors.users_cannot_delete_only_admin'));
 | 
					            $this->showErrorNotification( trans('errors.users_cannot_delete_only_admin'));
 | 
				
			||||||
            return redirect($user->getEditUrl());
 | 
					            return redirect($user->getEditUrl());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($user->system_name === 'public') {
 | 
					        if ($user->system_name === 'public') {
 | 
				
			||||||
            session()->flash('error', trans('errors.users_cannot_delete_guest'));
 | 
					            $this->showErrorNotification( trans('errors.users_cannot_delete_guest'));
 | 
				
			||||||
            return redirect($user->getEditUrl());
 | 
					            return redirect($user->getEditUrl());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $this->userRepo->destroy($user);
 | 
					        $this->userRepo->destroy($user);
 | 
				
			||||||
        session()->flash('success', trans('settings.users_delete_success'));
 | 
					        $this->showSuccessNotification( trans('settings.users_delete_success'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return redirect('/settings/users');
 | 
					        return redirect('/settings/users');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,7 +32,8 @@ class Kernel extends HttpKernel
 | 
				
			|||||||
            \Illuminate\Routing\Middleware\ThrottleRequests::class,
 | 
					            \Illuminate\Routing\Middleware\ThrottleRequests::class,
 | 
				
			||||||
            \BookStack\Http\Middleware\VerifyCsrfToken::class,
 | 
					            \BookStack\Http\Middleware\VerifyCsrfToken::class,
 | 
				
			||||||
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
 | 
					            \Illuminate\Routing\Middleware\SubstituteBindings::class,
 | 
				
			||||||
            \BookStack\Http\Middleware\Localization::class
 | 
					            \BookStack\Http\Middleware\Localization::class,
 | 
				
			||||||
 | 
					            \BookStack\Http\Middleware\GlobalViewData::class,
 | 
				
			||||||
        ],
 | 
					        ],
 | 
				
			||||||
        'api' => [
 | 
					        'api' => [
 | 
				
			||||||
            'throttle:60,1',
 | 
					            'throttle:60,1',
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										28
									
								
								app/Http/Middleware/GlobalViewData.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								app/Http/Middleware/GlobalViewData.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					<?php namespace BookStack\Http\Middleware;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use Closure;
 | 
				
			||||||
 | 
					use Illuminate\Http\Request;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Class GlobalViewData
 | 
				
			||||||
 | 
					 * Sets up data that is accessible to any view rendered by the web routes.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class GlobalViewData
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Handle an incoming request.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param Request $request
 | 
				
			||||||
 | 
					     * @param Closure $next
 | 
				
			||||||
 | 
					     * @return mixed
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function handle(Request $request, Closure $next)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        view()->share('signedIn', auth()->check());
 | 
				
			||||||
 | 
					        view()->share('currentUser', user());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return $next($request);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user