Updated cover image upload and delete function.

This commit is contained in:
Nilesh Deepak 2017-07-07 16:29:38 +05:30
parent c5f11e4516
commit 144a6e469d
9 changed files with 53 additions and 51 deletions

View File

@ -18,6 +18,24 @@ class Book extends Entity
return baseUrl('/books/' . urlencode($this->slug)); 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. * Get the edit url for this book.
* @return string * @return string

View File

@ -8,7 +8,6 @@ use BookStack\Services\ExportService;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response; use Illuminate\Http\Response;
use Views; use Views;
use File;
class BookController extends Controller class BookController extends Controller
{ {
@ -69,11 +68,7 @@ class BookController extends Controller
'name' => 'required|string|max:255', 'name' => 'required|string|max:255',
'description' => 'string|max:1000' 'description' => 'string|max:1000'
]); ]);
$image = $request->file('image');
$path = $this->getBookCoverURL($image);
$book = $this->entityRepo->createFromInput('book', $request->all()); $book = $this->entityRepo->createFromInput('book', $request->all());
$book->image = $path;
$book->save();
Activity::add($book, 'book_create', $book->id); Activity::add($book, 'book_create', $book->id);
return redirect($book->getUrl()); return redirect($book->getUrl());
} }
@ -120,36 +115,11 @@ class BookController extends Controller
'name' => 'required|string|max:255', 'name' => 'required|string|max:255',
'description' => 'string|max:1000' 'description' => 'string|max:1000'
]); ]);
$image = $request->file('image');
$path = $this->getBookCoverURL($image);
$book = $this->entityRepo->updateFromInput('book', $book, $request->all()); $book = $this->entityRepo->updateFromInput('book', $book, $request->all());
$book->image = $path;
$book->save();
Activity::add($book, 'book_update', $book->id); Activity::add($book, 'book_update', $book->id);
return redirect($book->getUrl()); 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 * Shows the page to confirm deletion
* @param $bookSlug * @param $bookSlug
@ -258,8 +228,6 @@ class BookController extends Controller
$book = $this->entityRepo->getBySlug('book', $bookSlug); $book = $this->entityRepo->getBySlug('book', $bookSlug);
$this->checkOwnablePermission('book-delete', $book); $this->checkOwnablePermission('book-delete', $book);
Activity::addMessage('book_delete', 0, $book->name); Activity::addMessage('book_delete', 0, $book->name);
$file = basename($book->image);
File::delete('uploads/book/'.$file);
$this->entityRepo->destroyBook($book); $this->entityRepo->destroyBook($book);
return redirect('/books'); return redirect('/books');
} }

View File

@ -18,7 +18,7 @@ class AddCoverImageDisplay extends Migration
}); });
Schema::table('books', function (Blueprint $table) { Schema::table('books', function (Blueprint $table) {
$table->string('image'); $table->integer('image');
}); });
} }

BIN
public/default.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -63,6 +63,11 @@ body.dragging, body.dragging * {
&.square { &.square {
border-radius: 3px; border-radius: 3px;
} }
&.cover {
height: 192px;
width: 120px;
border-radius: 3px;
}
} }
// System wide notifications // System wide notifications

View File

@ -8,5 +8,6 @@
@include('books/form') @include('books/form')
</form> </form>
</div> </div>
<p class="margin-top large"><br></p>
@include('components.image-manager', ['imageType' => 'cover'])
@stop @stop

View File

@ -14,10 +14,10 @@
<div class="container small" ng-non-bindable> <div class="container small" ng-non-bindable>
<h1>{{ trans('entities.books_edit') }}</h1> <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"> <input type="hidden" name="_method" value="PUT">
@include('books/form', ['model' => $book]) @include('books/form', ['model' => $book])
</form> </form>
</div> </div>
@include('components.image-manager', ['imageType' => 'cover'])
@stop @stop

View File

@ -9,11 +9,21 @@
<label for="description">{{ trans('common.description') }}</label> <label for="description">{{ trans('common.description') }}</label>
@include('form/textarea', ['name' => 'description']) @include('form/textarea', ['name' => 'description'])
</div> </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"> @include('components.image-picker', [
<label for="image">{{ trans('common.cover_image') }}</label> 'resizeHeight' => '192',
<input type="file" name="image"> 'resizeWidth' => '120',
</div> '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"> <div class="form-group">
<a href="{{ isset($book) ? $book->getUrl() : baseUrl('/books') }}" class="button muted">{{ trans('common.cancel') }}</a> <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> <button type="submit" class="button pos">{{ trans('entities.books_save') }}</button>

View 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="col-xs-12 col-sm-6 col-md-4 col-lg-3" data-entity-type="book" data-entity-id="{{$book->id}}">
<div class="galleryItem"> <div class="galleryItem">
<h3> <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> <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> <br>
<img @if($book->image === NULL) src="{{baseUrl('/default.jpg')}}" @else src="{{$book->image}}" @endif alt="{{$book->name}}"> <img src="{{$book->getBookCover(192)}}" alt="{{$book->name}}">
</a> </a>
</h3> </h3>
@if(isset($book->searchSnippet)) @if(isset($book->searchSnippet))
<p class="text-muted">{!! $book->searchSnippet !!}</p> <p class="text-muted">{!! $book->searchSnippet !!}</p>
@else @else
<p class="text-muted">{{ $book->getExcerpt() }}</p> <p class="text-muted">{{ $book->getExcerpt() }}</p>
@endif @endif
</div> </div>
</div> </div>