Update and delete links

This commit is contained in:
MarceauKa 2019-08-23 00:47:01 +02:00
parent 952225c39a
commit 93e05311b5
9 changed files with 91 additions and 11 deletions

View File

@ -54,4 +54,26 @@ class LinkController extends Controller
'status' => 'created',
]);
}
public function update(StoreLinkRequest $request, int $id)
{
$link = Link::findOrFail($id);
$data = collect($request->validated());
$link->fill($data->only('title', 'content', 'url')->toArray());
$link->is_private = $request->has('is_private');
if ($data['tags']) {
$link->syncTags($data['tags']);
}
if ($link->url) {
$link->findExtra();
}
return response()->json([
'id' => $link->id,
'status' => 'updated',
]);
}
}

View File

@ -24,4 +24,30 @@ class LinkController extends Controller
'tags' => Tag::all()->pluck('name')->toJson(),
]);
}
public function edit(Request $request, int $id)
{
$link = Link::with('tags')->findOrFail($id);
$link = \App\Http\Resources\Link::make($link)->toArray($request);
return view('link-form')->with([
'submit' => route('api.link.update', $id),
'parse' => route('api.link.parse'),
'method' => 'PUT',
'link' => $link,
'tags' => Tag::all()->pluck('name')->toJson(),
]);
}
public function delete(Request $request, int $id, string $hash)
{
if ($hash !== csrf_token()) {
abort(403);
}
$link = Link::findOrFail($id);
$link->delete();
return redirect()->back();
}
}

View File

@ -17,7 +17,8 @@ class Link extends JsonResource
return [
'title' => $this->title,
'content' => $this->content,
'url' => '#',
'tags' => $this->tags->pluck('name')->toArray(),
'url' => $this->url,
'created_at' => $this->created_at,
];
}

View File

@ -61,7 +61,7 @@ class Link extends Model
return $this;
}
public function sharingBookmarkCode(): string
public static function sharingBookmarkCode(): string
{
return vsprintf("javascript:(function(){var url=location.href; window.open('%s?url=' + encodeURIComponent(url), '_blank', '%s');})();", [
route('link.create'),

View File

@ -98,9 +98,13 @@ export default {
},
mounted() {
if (this.queryUrl) {
if (this.queryUrl && this.link.length === 0) {
this.form.url = this.queryUrl;
}
if (this.link) {
this.form = this.link;
}
},
methods: {
@ -133,11 +137,16 @@ export default {
url: this.submitUrl,
data: this.form
}).then((response) => {
this.reset();
this.$toasted.success("Lien ajouté !");
if (this.link) {
this.$toasted.success("Lien modifié !");
this.loading = false;
} else {
this.$toasted.success("Lien ajouté !");
this.reset();
}
}).catch((error) => {
this.loading = false;
this.$toasted.error("Impossible d'ajouter le lien.");
this.$toasted.error("Impossible d'enregistrer le lien.");
console.log(error);
})
},
@ -156,7 +165,7 @@ export default {
watch: {
'form.url': _.debounce(function (value) {
if (value) {
if (value && ! this.link) {
this.parse(value)
}
}, 500),

View File

@ -28,8 +28,19 @@
@endif
</div>
<div class="card-footer">
{{ $link->created_at->diffForHumans() }}
<div class="card-footer d-flex justify-content-between">
<span>{{ $link->created_at->diffForHumans() }}</span>
@if(auth()->check())
<div class="dropdown">
<button class="btn btn-outline-dark btn-sm dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Edit
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a class="dropdown-item" href="{{ route('link.edit', $link->id) }}">Modifier</a>
<a class="dropdown-item" href="{{ route('link.delete', [$link->id, csrf_token()]) }}">Supprimer</a>
</div>
</div>
@endif
</div>
</div>
@endforeach
@ -52,3 +63,9 @@
</div>
</div>
@endsection
<script>
import ButtonDelete from "../js/components/ButtonDelete";
export default {
components: {ButtonDelete}
}
</script>

View File

@ -4,10 +4,12 @@
<div class="container">
<div class="row justify-content-center">
<div class="col-12 col-md-8">
<link-form :link="{!! $link->toJson() !!}"
<link-form :link="{{ json_encode($link) }}"
parse-url="{{ $parse }}"
submit-url="{{ $submit }}"
@if(isset($query))
query-url="{{ $query }}"
@endif
method="{{ $method }}"
:tags="{{ $tags }}"
></link-form>
@ -19,7 +21,7 @@
<p class="card-text">Glissez et déposez le bouton ci-dessous dans votre barre de favoris</p>
<p class="card-text">
<a class="btn btn-outline-primary"
href="{{ $link->sharingBookmarkCode() }}"
href="{{ \App\Link::sharingBookmarkCode() }}"
>Shaare</a>
</p>
</div>

View File

@ -7,3 +7,4 @@ Route::post('search', 'SearchController@search')->name('search');
Route::post('link/parse', 'LinkController@parse')->name('link.parse');
Route::post('link', 'LinkController@store')->name('link.store');
Route::put('link/{id}', 'LinkController@update')->name('link.update');

View File

@ -11,3 +11,5 @@ Route::auth([
Route::get('/', 'HomeController@index')->name('home');
Route::get('lien/ajouter', 'LinkController@create')->name('link.create');
Route::get('lien/modifier/{id}', 'LinkController@edit')->name('link.edit');
Route::get('lien/supprimer/{id}/{hash}', 'LinkController@delete')->name('link.delete');