Files
portal/app/Http/Controllers/BookmarkController.php
2020-08-10 08:19:29 +02:00

91 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)) {
$url = parse_url($url, PHP_URL_SCHEME).'://'.parse_url($url, PHP_URL_HOST);
$metas['favicon'] = $url.$metas['favicon'];
}
//dd($metas['favicon'], $matches, !isset($matches[1]), empty($matches));
} else {
$metas['favicon'] = null;
}
return $metas;
}
}