From 144a6e469d7ee21e2b452269c842157ab25bee42 Mon Sep 17 00:00:00 2001 From: Nilesh Deepak Date: Fri, 7 Jul 2017 16:29:38 +0530 Subject: [PATCH] Updated cover image upload and delete function. --- app/Book.php | 18 ++++++++++ app/Http/Controllers/BookController.php | 32 ------------------ ...7_07_05_102650_add_cover_image_display.php | 2 +- public/default.png | Bin 0 -> 3338 bytes resources/assets/sass/styles.scss | 5 +++ resources/views/books/create.blade.php | 3 +- resources/views/books/edit.blade.php | 4 +-- resources/views/books/form.blade.php | 18 +++++++--- resources/views/books/grid-item.blade.php | 22 ++++++------ 9 files changed, 53 insertions(+), 51 deletions(-) create mode 100644 public/default.png diff --git a/app/Book.php b/app/Book.php index 67bd4f5b2..a489acf8b 100644 --- a/app/Book.php +++ b/app/Book.php @@ -18,6 +18,24 @@ class Book extends Entity return baseUrl('/books/' . urlencode($this->slug)); } +public function getBookCover($size = 120) + { + $default = baseUrl('/default.png'); + $image = $this->image; + if ($image === 0 || $image === '0' || $image === null) + return $default; + try { + $cover = $this->cover ? baseUrl($this->cover->getThumb(120, 192, false)) : $default; + } catch (\Exception $err) { + $cover = $default; + } + return $cover; + } + +public function cover() + { + return $this->belongsTo(Image::class, 'image'); + } /* * Get the edit url for this book. * @return string diff --git a/app/Http/Controllers/BookController.php b/app/Http/Controllers/BookController.php index b64841220..eecb7839f 100644 --- a/app/Http/Controllers/BookController.php +++ b/app/Http/Controllers/BookController.php @@ -8,7 +8,6 @@ use BookStack\Services\ExportService; use Illuminate\Http\Request; use Illuminate\Http\Response; use Views; -use File; class BookController extends Controller { @@ -69,11 +68,7 @@ class BookController extends Controller 'name' => 'required|string|max:255', 'description' => 'string|max:1000' ]); - $image = $request->file('image'); - $path = $this->getBookCoverURL($image); $book = $this->entityRepo->createFromInput('book', $request->all()); - $book->image = $path; - $book->save(); Activity::add($book, 'book_create', $book->id); return redirect($book->getUrl()); } @@ -120,36 +115,11 @@ class BookController extends Controller 'name' => 'required|string|max:255', 'description' => 'string|max:1000' ]); - $image = $request->file('image'); - $path = $this->getBookCoverURL($image); $book = $this->entityRepo->updateFromInput('book', $book, $request->all()); - $book->image = $path; - $book->save(); Activity::add($book, 'book_update', $book->id); return redirect($book->getUrl()); } - /** - * Generate URL for book cover image - * @param $image - * @return $path - */ - private function getBookCoverURL($image) - { - if(is_null($image)) - { - return; - } - else - { - $input = time().'-'.$image->getClientOriginalName(); - $destinationPath = public_path('uploads/book/'); - $image->move($destinationPath, $input); - $path = baseUrl('/uploads/book/').'/'.$input; - return $path; - } - } - /** * Shows the page to confirm deletion * @param $bookSlug @@ -258,8 +228,6 @@ class BookController extends Controller $book = $this->entityRepo->getBySlug('book', $bookSlug); $this->checkOwnablePermission('book-delete', $book); Activity::addMessage('book_delete', 0, $book->name); - $file = basename($book->image); - File::delete('uploads/book/'.$file); $this->entityRepo->destroyBook($book); return redirect('/books'); } diff --git a/database/migrations/2017_07_05_102650_add_cover_image_display.php b/database/migrations/2017_07_05_102650_add_cover_image_display.php index d9a7f94ee..396112744 100644 --- a/database/migrations/2017_07_05_102650_add_cover_image_display.php +++ b/database/migrations/2017_07_05_102650_add_cover_image_display.php @@ -18,7 +18,7 @@ class AddCoverImageDisplay extends Migration }); Schema::table('books', function (Blueprint $table) { - $table->string('image'); + $table->integer('image'); }); } diff --git a/public/default.png b/public/default.png new file mode 100644 index 0000000000000000000000000000000000000000..1d7b737e7da36a919d9d389cbd980938cfae2435 GIT binary patch literal 3338 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 bn=^=B?2Oq~axR;Jfq}u()z4*}Q$iB}wBXCo literal 0 HcmV?d00001 diff --git a/resources/assets/sass/styles.scss b/resources/assets/sass/styles.scss index e15b14d96..aa3ac1069 100644 --- a/resources/assets/sass/styles.scss +++ b/resources/assets/sass/styles.scss @@ -63,6 +63,11 @@ body.dragging, body.dragging * { &.square { border-radius: 3px; } + &.cover { + height: 192px; + width: 120px; + border-radius: 3px; + } } // System wide notifications diff --git a/resources/views/books/create.blade.php b/resources/views/books/create.blade.php index 36c94af62..4d1edf78b 100644 --- a/resources/views/books/create.blade.php +++ b/resources/views/books/create.blade.php @@ -8,5 +8,6 @@ @include('books/form') - +


+ @include('components.image-manager', ['imageType' => 'cover']) @stop \ No newline at end of file diff --git a/resources/views/books/edit.blade.php b/resources/views/books/edit.blade.php index 02768b301..322f3d700 100644 --- a/resources/views/books/edit.blade.php +++ b/resources/views/books/edit.blade.php @@ -14,10 +14,10 @@

{{ 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/form.blade.php b/resources/views/books/form.blade.php index afa6c48ea..4cc5d2ff3 100644 --- a/resources/views/books/form.blade.php +++ b/resources/views/books/form.blade.php @@ -9,11 +9,21 @@ @include('form/textarea', ['name' => 'description']) +
+ +

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

-
- - -
+ @include('components.image-picker', [ + 'resizeHeight' => '192', + 'resizeWidth' => '120', + 'showRemove' => true, + 'defaultImage' => baseUrl('/default.png'), + 'currentImage' => @isset($model) ? $model->getBookCover(80) : baseUrl('/default.png') , + 'currentId' => @isset($model) ? $model->image : 0, + 'name' => 'image', + 'imageClass' => 'avatar cover' + ]) +
{{ trans('common.cancel') }} diff --git a/resources/views/books/grid-item.blade.php b/resources/views/books/grid-item.blade.php index 095cccb24..d11a66eac 100644 --- a/resources/views/books/grid-item.blade.php +++ b/resources/views/books/grid-item.blade.php @@ -1,15 +1,15 @@
-

- {{$book->name}} -
- image === NULL) src="{{baseUrl('/default.jpg')}}" @else src="{{$book->image}}" @endif alt="{{$book->name}}"> -
-

- @if(isset($book->searchSnippet)) -

{!! $book->searchSnippet !!}

- @else +

+ {{$book->name}} +
+ {{$book->name}} +
+

+ @if(isset($book->searchSnippet)) +

{!! $book->searchSnippet !!}

+ @else

{{ $book->getExcerpt() }}

- @endif -
+ @endif +
\ No newline at end of file