90 lines
2.5 KiB
PHP
90 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Http\Requests\BookmarkRequest;
|
|
use App\Http\Resources\BookmarkCollection;
|
|
use App\Models\Bookmark;
|
|
use App\Http\Resources\Bookmark as BookmarkResource;
|
|
use Illuminate\Http\Request;
|
|
|
|
class BookmarkController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
$this->authorize('viewAny', Bookmark::class);
|
|
|
|
return new BookmarkCollection(request()->user()->bookmarks);
|
|
}
|
|
|
|
public function store(BookmarkRequest $request)
|
|
{
|
|
$this->authorize('create', Bookmark::class);
|
|
|
|
$metas = $this->getMeta($request->url);
|
|
$request['name'] = (empty($request->name)) ? $metas['title'] : $request->name;
|
|
$request['favicon'] = $metas['favicon'];
|
|
|
|
$bookmark = request()->user()->bookmarks()->create($request->all());
|
|
|
|
return (new BookmarkResource($bookmark))
|
|
->response()
|
|
->setStatusCode(201);
|
|
}
|
|
|
|
public function show(Bookmark $bookmark)
|
|
{
|
|
$this->authorize('view', $bookmark);
|
|
|
|
return new BookmarkResource($bookmark);
|
|
}
|
|
|
|
public function update(BookmarkRequest $request, Bookmark $bookmark)
|
|
{
|
|
$this->authorize('update', $bookmark);
|
|
|
|
$bookmark->update($request->all());
|
|
|
|
return (new BookmarkResource($bookmark))
|
|
->response()
|
|
->setStatusCode(200);
|
|
}
|
|
|
|
public function destroy(Bookmark $bookmark)
|
|
{
|
|
$this->authorize('delete', $bookmark);
|
|
|
|
$bookmark->delete();
|
|
|
|
return response([], 204);
|
|
}
|
|
|
|
private function getMeta($url)
|
|
{
|
|
$metas = [];
|
|
$client = new \GuzzleHttp\Client();
|
|
$promise = $client->requestAsync('GET', $url);
|
|
$response = $promise->wait();
|
|
$page = $response->getBody()->getContents();
|
|
preg_match("/\<title\>(.*)\<\/title\>/i",$page,$title);
|
|
$metas['title'] = $title[1];
|
|
|
|
|
|
preg_match('/\<link rel="[icon|appel-touch](.*)\"\>/i',$page,$favicon);
|
|
if(isset($favicon[1])) {
|
|
preg_match('/href="(.*)/i',$favicon[1],$favicon);
|
|
$metas['favicon'] = $favicon[1];
|
|
|
|
preg_match('/http/', $metas['favicon'], $matches);
|
|
if(empty($matches)) {
|
|
$metas['favicon'] = parse_url($url, PHP_URL_SCHEME).'://'.parse_url($url, PHP_URL_HOST).$metas['favicon'];
|
|
}
|
|
// dd($metas['favicon'], $matches, !isset($matches[1]), empty($matches));
|
|
} else {
|
|
$metas['favicon'] = null;
|
|
}
|
|
|
|
return $metas;
|
|
}
|
|
}
|