]> BookStack Code Mirror - bookstack/commitdiff
Updated cover image upload and delete function.
authorNilesh Deepak <redacted>
Fri, 7 Jul 2017 10:59:38 +0000 (16:29 +0530)
committerNilesh Deepak <redacted>
Fri, 7 Jul 2017 10:59:38 +0000 (16:29 +0530)
app/Book.php
app/Http/Controllers/BookController.php
database/migrations/2017_07_05_102650_add_cover_image_display.php
public/default.png [new file with mode: 0644]
resources/assets/sass/styles.scss
resources/views/books/create.blade.php
resources/views/books/edit.blade.php
resources/views/books/form.blade.php
resources/views/books/grid-item.blade.php

index 67bd4f5b224f19bd63017acaf3f76872cb9e83f6..a489acf8b38a7f11149cf153dc07bfae4aedcd88 100644 (file)
@@ -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
index b64841220b01f8122f3f2cc505e543defafcf579..eecb7839f378439519a57a2c526f845fab22d958 100644 (file)
@@ -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');
     }
index d9a7f94ee369ddc04af8a43d60f2c6b41ab457bb..396112744a8f101f2e92e8ff1732a5343da04603 100644 (file)
@@ -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 (file)
index 0000000..1d7b737
Binary files /dev/null and b/public/default.png differ
index e15b14d96f1f414d16d5ba12bbd6a734498858e6..aa3ac10691f032267b93b0bdd867846f88d7dd8b 100644 (file)
@@ -63,6 +63,11 @@ body.dragging, body.dragging * {
   &.square {
     border-radius: 3px;
   }
+  &.cover {
+    height: 192px;
+    width: 120px;
+    border-radius: 3px;
+  }
 }
 
 // System wide notifications
index 36c94af62d00a4762abf41b092eec8fdb7203dc6..4d1edf78bf4cfa204bc19d73e92b2fa55011fbb5 100644 (file)
@@ -8,5 +8,6 @@
         @include('books/form')
     </form>
 </div>
-
+<p class="margin-top large"><br></p>
+    @include('components.image-manager', ['imageType' => 'cover'])
 @stop
\ No newline at end of file
index 02768b3014bd8083b7ea1f634837edce4eb4e179..322f3d7001d54bf55e83ed1cf37ad9d817802f3a 100644 (file)
 
     <div class="container small" ng-non-bindable>
         <h1>{{ trans('entities.books_edit') }}</h1>
-        <form action="{{ $book->getUrl() }}" method="POST" enctype="multipart/form-data">
+        <form action="{{ $book->getUrl() }}" method="POST">
             <input type="hidden" name="_method" value="PUT">
             @include('books/form', ['model' => $book])
         </form>
     </div>
-
+@include('components.image-manager', ['imageType' => 'cover'])
 @stop
\ No newline at end of file
index afa6c48eae5c974fbc0ae844984d488b56ae8eb3..4cc5d2ff3de199760626b898f7109812f5f396de 100644 (file)
@@ -9,11 +9,21 @@
     <label for="description">{{ trans('common.description') }}</label>
     @include('form/textarea', ['name' => 'description'])
 </div>
+<div class="form-group" id="logo-control">
+                        <label for="user-avatar">{{ trans('common.cover_image') }}</label>
+                        <p class="small">{{ trans('common.cover_image_description') }}</p>
 
-<div class="form-group">
-    <label for="image">{{ trans('common.cover_image') }}</label>
-    <input type="file" name="image">
-</div>
+                        @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'
+                          ])
+                    </div>
 <div class="form-group">
     <a href="{{ isset($book) ? $book->getUrl() : baseUrl('/books') }}" class="button muted">{{ trans('common.cancel') }}</a>
     <button type="submit" class="button pos">{{ trans('entities.books_save') }}</button>
index 095cccb24f3ce287a59345ecb1e20958d7a8e468..d11a66eace9e15e2ed25391143edb2dc93eeddd9 100644 (file)
@@ -1,15 +1,15 @@
 <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3"  data-entity-type="book" data-entity-id="{{$book->id}}">
     <div class="galleryItem">
-        <h3>
-            <a class="text-book entity-list-item-link" href="{{$book->getUrl()}}"><i class="zmdi zmdi-book"></i><span class="entity-list-item-name">{{$book->name}}</span>
-            <br>
-            <img @if($book->image === NULL) src="{{baseUrl('/default.jpg')}}" @else src="{{$book->image}}" @endif alt="{{$book->name}}">
-            </a>
-        </h3>
-        @if(isset($book->searchSnippet))
-         <p class="text-muted">{!! $book->searchSnippet !!}</p>
-         @else
+    <h3>
+        <a class="text-book entity-list-item-link" href="{{$book->getUrl()}}"><i class="zmdi zmdi-book"></i><span class="entity-list-item-name">{{$book->name}}</span>
+        <br>
+        <img src="{{$book->getBookCover(192)}}" alt="{{$book->name}}">
+        </a>
+    </h3>
+    @if(isset($book->searchSnippet))
+        <p class="text-muted">{!! $book->searchSnippet !!}</p>
+    @else
         <p class="text-muted">{{ $book->getExcerpt() }}</p>
-        @endif
-    </div>
+    @endif
+</div>
 </div>
\ No newline at end of file