diff --git a/.env.example b/.env.example index 6e015335e..9e64828b5 100644 --- a/.env.example +++ b/.env.example @@ -1,11 +1,14 @@ -# Environment -APP_ENV=production -APP_DEBUG=false +# Application key +# Used for encryption where needed. +# Run `php artisan key:generate` to generate a valid key. APP_KEY=SomeRandomString -# The below url has to be set if using social auth options -# or if you are not using BookStack at the root path of your domain. -# APP_URL=http://bookstack.dev +# Application URL +# Remove the hash below and set a URL if using BookStack behind +# a proxy, if using a third-party authentication option. +# This must be the root URL that you want to host BookStack on. +# All URL's in BookStack will be generated using this value. +#APP_URL=https://example.com # Database details DB_HOST=localhost @@ -13,77 +16,16 @@ DB_DATABASE=database_database DB_USERNAME=database_username DB_PASSWORD=database_user_password -# Cache and session -CACHE_DRIVER=file -SESSION_DRIVER=file -# If using Memcached, comment the above and uncomment these -#CACHE_DRIVER=memcached -#SESSION_DRIVER=memcached -QUEUE_DRIVER=sync -# A different prefix is useful when multiple BookStack instances use the same caching server -CACHE_PREFIX=bookstack - -# Memcached settings -# If using a UNIX socket path for the host, set the port to 0 -# This follows the following format: HOST:PORT:WEIGHT -# For multiple servers separate with a comma -MEMCACHED_SERVERS=127.0.0.1:11211:100 - -# Storage -STORAGE_TYPE=local -# Amazon S3 Config -STORAGE_S3_KEY=false -STORAGE_S3_SECRET=false -STORAGE_S3_REGION=false -STORAGE_S3_BUCKET=false -# Storage URL -# Used to prefix image urls for when using custom domains/cdns -STORAGE_URL=false - -# General auth -AUTH_METHOD=standard - -# Social Authentication information. Defaults as off. -GITHUB_APP_ID=false -GITHUB_APP_SECRET=false -GOOGLE_APP_ID=false -GOOGLE_APP_SECRET=false -GOOGLE_SELECT_ACCOUNT=false -OKTA_BASE_URL=false -OKTA_APP_ID=false -OKTA_APP_SECRET=false -TWITCH_APP_ID=false -TWITCH_APP_SECRET=false -GITLAB_APP_ID=false -GITLAB_APP_SECRET=false -GITLAB_BASE_URI=false -DISCORD_APP_ID=false -DISCORD_APP_SECRET=false - -# External services such as Gravatar and Draw.IO -DISABLE_EXTERNAL_SERVICES=false - -# LDAP Settings -LDAP_SERVER=false -LDAP_BASE_DN=false -LDAP_DN=false -LDAP_PASS=false -LDAP_USER_FILTER=false -LDAP_VERSION=false -# Do you want to sync LDAP groups to BookStack roles for a user -LDAP_USER_TO_GROUPS=false -# What is the LDAP attribute for group memberships -LDAP_GROUP_ATTRIBUTE="memberOf" -# Would you like to remove users from roles on BookStack if they do not match on LDAP -# If false, the ldap groups-roles sync will only add users to roles -LDAP_REMOVE_FROM_GROUPS=false - -# Mail settings +# Mail system to use +# Can be 'smtp', 'mail' or 'sendmail' MAIL_DRIVER=smtp + +# SMTP mail options MAIL_HOST=localhost MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null -MAIL_FROM=null -MAIL_FROM_NAME=null + + +# A full list of options can be found in the '.env.example.complete' file. \ No newline at end of file diff --git a/.env.example.complete b/.env.example.complete new file mode 100644 index 000000000..37421a419 --- /dev/null +++ b/.env.example.complete @@ -0,0 +1,227 @@ +# Full list of environment variables that can be used with BookStack. +# Selectively copy these to your '.env' file as required. +# Each option is shown with it's default value. +# Do not copy this whole file to use as your '.env' file. + +# Application environment +# Can be 'production', 'development', 'testing' or 'demo' +APP_ENV=production + +# Enable debug mode +# Shows advanced debug information and errors. +# CAN EXPOSE OTHER VARIABLES, LEAVE DISABLED +APP_DEBUG=false + +# Application key +# Used for encryption where needed. +# Run `php artisan key:generate` to generate a valid key. +APP_KEY=SomeRandomString + +# Application URL +# This must be the root URL that you want to host BookStack on. +# All URL's in BookStack will be generated using this value. +APP_URL=https://example.com + +# Application default language +# The default language choice to show. +# May be overridden by user-preference or visitor browser settings. +APP_LANG=en + +# Auto-detect language for public visitors. +# Uses browser-sent headers to infer a language. +# APP_LANG will be used if such a header is not provided. +APP_AUTO_LANG_PUBLIC=true + +# Application timezone +# Used where dates are displayed such as on exported content. +# Valid timezone values can be found here: https://www.php.net/manual/en/timezones.php +APP_TIMEZONE=UTC + +# Database details +# Host can contain a port (localhost:3306) or a separate DB_PORT option can be used. +DB_HOST=localhost +DB_PORT=3306 +DB_DATABASE=database_database +DB_USERNAME=database_username +DB_PASSWORD=database_user_password + +# Mail system to use +# Can be 'smtp', 'mail' or 'sendmail' +MAIL_DRIVER=smtp + +# Mail sending options +MAIL_FROM=mail@bookstackapp.com +MAIL_FROM_NAME=BookStack + +# SMTP mail options +MAIL_HOST=localhost +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null + +# Cache & Session driver to use +# Can be 'file', 'database', 'memcached' or 'redis' +CACHE_DRIVER=file +SESSION_DRIVER=file + +# Session configuration +SESSION_LIFETIME=120 +SESSION_COOKIE_NAME=bookstack_session +SESSION_SECURE_COOKIE=false + +# Cache key prefix +# Can be used to prevent conflicts multiple BookStack instances use the same store. +CACHE_PREFIX=bookstack + +# Memcached server configuration +# If using a UNIX socket path for the host, set the port to 0 +# This follows the following format: HOST:PORT:WEIGHT +# For multiple servers separate with a comma +MEMCACHED_SERVERS=127.0.0.1:11211:100 + +# Redis server configuration +# This follows the following format: HOST:PORT:DATABASE +# or, if using a password: HOST:PORT:DATABASE:PASSWORD +# For multiple servers separate with a comma. These will be clustered. +REDIS_SERVERS=127.0.0.1:6379:0 + +# Queue driver to use +# Queue not really currently used but may be configurable in the future. +# Would advise not to change this for now. +QUEUE_DRIVER=sync + +# Storage system to use +# Can be 'local', 'local_secure' or 's3' +STORAGE_TYPE=local + +# Amazon S3 storage configuration +STORAGE_S3_KEY=your-s3-key +STORAGE_S3_SECRET=your-s3-secret +STORAGE_S3_BUCKET=s3-bucket-name +STORAGE_S3_REGION=s3-bucket-region + +# S3 endpoint to use for storage calls +# Only set this if using a non-Amazon s3-compatible service such as Minio +STORAGE_S3_ENDPOINT=https://my-custom-s3-compatible.service.com:8001 + +# Storage URL prefix +# Used as a base for any generated image urls. +# An s3-format URL will be generated if not set. +STORAGE_URL=false + +# Authentication method to use +# Can be 'standard' or 'ldap' +AUTH_METHOD=standard + +# Social authentication configuration +# All disabled by default. +# Refer to https://www.bookstackapp.com/docs/admin/third-party-auth/ + +AZURE_APP_ID=false +AZURE_APP_SECRET=false +AZURE_TENANT=false +AZURE_AUTO_REGISTER=false +AZURE_AUTO_CONFIRM_EMAIL=false + +DISCORD_APP_ID=false +DISCORD_APP_SECRET=false +DISCORD_AUTO_REGISTER=false +DISCORD_AUTO_CONFIRM_EMAIL=false + +FACEBOOK_APP_ID=false +FACEBOOK_APP_SECRET=false +FACEBOOK_AUTO_REGISTER=false +FACEBOOK_AUTO_CONFIRM_EMAIL=false + +GITHUB_APP_ID=false +GITHUB_APP_SECRET=false +GITHUB_AUTO_REGISTER=false +GITHUB_AUTO_CONFIRM_EMAIL=false + +GITLAB_APP_ID=false +GITLAB_APP_SECRET=false +GITLAB_BASE_URI=false +GITLAB_AUTO_REGISTER=false +GITLAB_AUTO_CONFIRM_EMAIL=false + +GOOGLE_APP_ID=false +GOOGLE_APP_SECRET=false +GOOGLE_SELECT_ACCOUNT=false +GOOGLE_AUTO_REGISTER=false +GOOGLE_AUTO_CONFIRM_EMAIL=false + +OKTA_BASE_URL=false +OKTA_APP_ID=false +OKTA_APP_SECRET=false +OKTA_AUTO_REGISTER=false +OKTA_AUTO_CONFIRM_EMAIL=false + +SLACK_APP_ID=false +SLACK_APP_SECRET=false +SLACK_AUTO_REGISTER=false +SLACK_AUTO_CONFIRM_EMAIL=false + +TWITCH_APP_ID=false +TWITCH_APP_SECRET=false +TWITCH_AUTO_REGISTER=false +TWITCH_AUTO_CONFIRM_EMAIL=false + +TWITTER_APP_ID=false +TWITTER_APP_SECRET=false +TWITTER_AUTO_REGISTER=false +TWITTER_AUTO_CONFIRM_EMAIL=false + +# LDAP authentication configuration +# Refer to https://www.bookstackapp.com/docs/admin/ldap-auth/ +LDAP_SERVER=false +LDAP_BASE_DN=false +LDAP_DN=false +LDAP_PASS=false +LDAP_USER_FILTER=false +LDAP_VERSION=false +LDAP_TLS_INSECURE=false +LDAP_EMAIL_ATTRIBUTE=mail +LDAP_DISPLAY_NAME_ATTRIBUTE=cn +LDAP_FOLLOW_REFERRALS=true + +# LDAP group sync configuration +# Refer to https://www.bookstackapp.com/docs/admin/ldap-auth/ +LDAP_USER_TO_GROUPS=false +LDAP_GROUP_ATTRIBUTE="memberOf" +LDAP_REMOVE_FROM_GROUPS=false + +# Disable default third-party services such as Gravatar and Draw.IO +# Service-specific options will override this option +DISABLE_EXTERNAL_SERVICES=false + +# Use custom avatar service, Sets fetch URL +# Possible placeholders: ${hash} ${size} ${email} +# If set, Avatars will be fetched regardless of DISABLE_EXTERNAL_SERVICES option. +# Example: AVATAR_URL=https://seccdn.libravatar.org/avatar/${hash}?s=${size}&d=identicon +AVATAR_URL= + +# Enable Draw.io integration +DRAWIO=true + +# Default item listing view +# Used for public visitors and user's without a preference +# Can be 'list' or 'grid' +APP_VIEWS_BOOKS=list +APP_VIEWS_BOOKSHELVES=grid + +# Page revision limit +# Number of page revisions to keep in the system before deleting old revisions. +# If set to 'false' a limit will not be enforced. +REVISION_LIMIT=50 + +# Allow @yield('head') - - @include('partials/custom-styles') - + @include('partials.custom-styles') @include('partials.custom-head') + + @stack('head') - + - @include('partials/notifications') - - + @include('partials.notifications') + @include('common.header')
@yield('content')
-
+
@icon('chevron-up') {{ trans('common.back_to_top') }}
-@yield('bottom') - -@yield('scripts') + + @yield('bottom') + + @yield('scripts') + diff --git a/resources/views/books/create.blade.php b/resources/views/books/create.blade.php index 2d5e6c455..40b781441 100644 --- a/resources/views/books/create.blade.php +++ b/resources/views/books/create.blade.php @@ -1,28 +1,36 @@ @extends('simple-layout') -@section('toolbar') -
- -
-@stop - @section('body') +
+
+ @if (isset($bookshelf)) + @include('partials.breadcrumbs', ['crumbs' => [ + $bookshelf, + $bookshelf->getUrl('/create-book') => [ + 'text' => trans('entities.books_create'), + 'icon' => 'add' + ] + ]]) + @else + @include('partials.breadcrumbs', ['crumbs' => [ + '/books' => [ + 'text' => trans('entities.books'), + 'icon' => 'book' + ], + '/create-book' => [ + 'text' => trans('entities.books_create'), + 'icon' => 'add' + ] + ]]) + @endif +
-
-

 

-
-

@icon('add') {{ trans('entities.books_create') }}

-
-
- @include('books/form') +
+

{{ trans('entities.books_create') }}

+ + @include('books.form')
-
-


- @include('components.image-manager', ['imageType' => 'cover']) + @stop \ No newline at end of file diff --git a/resources/views/books/delete.blade.php b/resources/views/books/delete.blade.php index 0ac98e895..2860e8bcd 100644 --- a/resources/views/books/delete.blade.php +++ b/resources/views/books/delete.blade.php @@ -1,28 +1,30 @@ @extends('simple-layout') -@section('toolbar') -
- @include('books._breadcrumbs', ['book' => $book]) -
-@stop - @section('body')
-

 

-
-

@icon('delete') {{ trans('entities.books_delete') }}

-
-

{{ trans('entities.books_delete_explain', ['bookName' => $book->name]) }}

-

{{ trans('entities.books_delete_confirmation') }}

-
- {!! csrf_field() !!} - - {{ trans('common.cancel') }} - -
-
+
+ @include('partials.breadcrumbs', ['crumbs' => [ + $book, + $book->getUrl('/delete') => [ + 'text' => trans('entities.books_delete'), + 'icon' => 'delete', + ] + ]]) +
+ +
+

{{ trans('entities.books_delete') }}

+

{{ trans('entities.books_delete_explain', ['bookName' => $book->name]) }}

+

{{ trans('entities.books_delete_confirmation') }}

+ +
+ {!! csrf_field() !!} + + {{ trans('common.cancel') }} + +
diff --git a/resources/views/books/edit.blade.php b/resources/views/books/edit.blade.php index cb1ffc461..2e51ed6e9 100644 --- a/resources/views/books/edit.blade.php +++ b/resources/views/books/edit.blade.php @@ -1,24 +1,25 @@ @extends('simple-layout') -@section('toolbar') -
- @include('books._breadcrumbs', ['book' => $book]) -
-@stop - @section('body')
-

 

-
-

@icon('edit') {{ trans('entities.books_edit') }}

-
-
- - @include('books/form', ['model' => $book]) -
-
+ +
+ @include('partials.breadcrumbs', ['crumbs' => [ + $book, + $book->getUrl('/edit') => [ + 'text' => trans('entities.books_edit'), + 'icon' => 'edit', + ] + ]]) +
+ +
+

{{ trans('entities.books_edit') }}

+
+ + @include('books.form', ['model' => $book]) +
-@include('components.image-manager', ['imageType' => 'cover']) @stop \ No newline at end of file diff --git a/resources/views/books/export.blade.php b/resources/views/books/export.blade.php index 18440a74d..e1fabd800 100644 --- a/resources/views/books/export.blade.php +++ b/resources/views/books/export.blade.php @@ -31,51 +31,51 @@ @include('partials.custom-head') -
-
-
-
-

{{$book->name}}

+
-

{{ $book->description }}

+

{{$book->name}}

- @if(count($bookChildren) > 0) -
    - @foreach($bookChildren as $bookChild) -
  • {{ $bookChild->name }}
  • - @if($bookChild->isA('chapter') && count($bookChild->pages) > 0) - - @endif - @endforeach -
+

{{ $book->description }}

+ + @if(count($bookChildren) > 0) +
    + @foreach($bookChildren as $bookChild) +
  • {{ $bookChild->name }}
  • + @if($bookChild->isA('chapter') && count($bookChild->pages) > 0) + @endif + @endforeach +
+ @endif - @foreach($bookChildren as $bookChild) + @foreach($bookChildren as $bookChild) +
+

{{ $bookChild->name }}

+ + @if($bookChild->isA('chapter')) +

{{ $bookChild->description }}

+ + @if(count($bookChild->pages) > 0) + @foreach($bookChild->pages as $page)
-

{{ $bookChild->name }}

- @if($bookChild->isA('chapter')) -

{{ $bookChild->description }}

- @if(count($bookChild->pages) > 0) - @foreach($bookChild->pages as $page) -
-
{{$bookChild->name}}
-

{{ $page->name }}

- {!! $page->html !!} - @endforeach - @endif - @else - {!! $bookChild->html !!} - @endif +
{{$bookChild->name}}
+

{{ $page->name }}

+ {!! $page->html !!} @endforeach + @endif + + @else + {!! $bookChild->html !!} + @endif + + @endforeach -
-
-
+ diff --git a/resources/views/books/form.blade.php b/resources/views/books/form.blade.php index bf94b5b07..4edec240a 100644 --- a/resources/views/books/form.blade.php +++ b/resources/views/books/form.blade.php @@ -2,12 +2,12 @@ {{ csrf_field() }}
- @include('form/text', ['name' => 'name']) + @include('form.text', ['name' => 'name'])
- @include('form/textarea', ['name' => 'description']) + @include('form.textarea', ['name' => 'description'])
@@ -18,13 +18,9 @@

{{ trans('common.cover_image_description') }}

@include('components.image-picker', [ - 'resizeHeight' => '512', - 'resizeWidth' => '512', - 'showRemove' => false, 'defaultImage' => baseUrl('/book_default_cover.png'), - 'currentImage' => isset($model) ? $model->getBookCover() : baseUrl('/book_default_cover.png') , - 'currentId' => isset($model) && $model->image_id ? $model->image_id : 0, - 'name' => 'image_id', + 'currentImage' => (isset($model) && $model->cover) ? $model->getBookCover() : baseUrl('/book_default_cover.png') , + 'name' => 'image', 'imageClass' => 'cover' ])
@@ -41,5 +37,5 @@
{{ trans('common.cancel') }} - +
\ No newline at end of file diff --git a/resources/views/books/grid-item.blade.php b/resources/views/books/grid-item.blade.php index 9bbf69100..e1d37753a 100644 --- a/resources/views/books/grid-item.blade.php +++ b/resources/views/books/grid-item.blade.php @@ -1,18 +1,19 @@ -
-