Improve likes
Squashed commit of the following: commit 4dc223939c31fd5771b9e6895c8e9e0c88fc6663 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Fri Jan 12 21:19:29 2018 +0000 update changelog commit 7b15937a097c12145e60dfec67cad19e385fcb9f Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Fri Jan 12 21:19:13 2018 +0000 re-compile frontend assets commit f533d5e463d06e158b7bedbfd3602af70113acbc Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Fri Jan 12 21:14:11 2018 +0000 Only use “by” if there is an author name to show commit 7b067fd559ce2f4a82ad747a3ebd3474e221169c Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Fri Jan 12 21:12:27 2018 +0000 Some styles for the likes page commit 039523f595115c1329a3939837ebf589184de995 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Fri Jan 12 21:11:44 2018 +0000 Add a like with just the url to the seeder commit c43d4b07936fceeeb59460399a20abec7a9bc3ae Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Fri Jan 12 20:44:46 2018 +0000 Add test for the admin cp part of likes commit eb115fa481319e98bf54a9fa6aa682479e56787d Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Fri Jan 12 20:44:28 2018 +0000 Catch 400 errors from a POSSE attempt, its not that important commit 79f7aa7807534eb76ae57dee72002f99249255b0 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Fri Jan 12 20:01:19 2018 +0000 Better fetch data for tweets, attempt to POSSE them back to twitter commit 1ad078929f918c00db550c0af315677cd991dad6 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Fri Jan 12 20:00:40 2018 +0000 Only filter the like content when its actual HTML commit 10f1ba430d4d5262d28e24ca0413474900ea6145 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Fri Jan 12 19:59:57 2018 +0000 Add link to POSSE to twitter via bridgy commit 7f8e5c6dd39716fb51b5766de2f24c7e01355dbb Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Fri Jan 12 19:59:22 2018 +0000 add links in the admin welcome page for likes commit ebe80b07759881ffb98f8f5117ef25310aaabe6c Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Fri Jan 12 18:22:35 2018 +0000 Add the admin routes commit 5e150a7c39f5d71688b7ef14c924d09ba2ec82ba Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Fri Jan 12 18:22:15 2018 +0000 Add admin functionality for likes
This commit is contained in:
parent
6ccd564d56
commit
50facf52de
23 changed files with 281 additions and 12 deletions
61
app/Http/Controllers/Admin/LikesController.php
Normal file
61
app/Http/Controllers/Admin/LikesController.php
Normal file
|
@ -0,0 +1,61 @@
|
|||
<?php declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Models\Like;
|
||||
use App\Jobs\ProcessLike;
|
||||
use Illuminate\View\View;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
|
||||
class LikesController extends Controller
|
||||
{
|
||||
public function index(): View
|
||||
{
|
||||
$likes = Like::all();
|
||||
|
||||
return view('admin.likes.index', compact('likes'));
|
||||
}
|
||||
|
||||
public function create(): View
|
||||
{
|
||||
return view('admin.likes.create');
|
||||
}
|
||||
|
||||
public function store(): RedirectResponse
|
||||
{
|
||||
$like = Like::create([
|
||||
'url' => normalize_url(request()->input('like_url')),
|
||||
]);
|
||||
ProcessLike::dispatch($like);
|
||||
|
||||
return redirect('/admin/likes');
|
||||
}
|
||||
|
||||
public function edit(int $likeId): View
|
||||
{
|
||||
$like = Like::findOrFail($likeId);
|
||||
|
||||
return view('admin.likes.edit', [
|
||||
'id' => $like->id,
|
||||
'like_url' => $like->url,
|
||||
]);
|
||||
}
|
||||
|
||||
public function update(int $likeId): RedirectResponse
|
||||
{
|
||||
$like = Like::findOrFail($likeId);
|
||||
$like->url = normalize_url(request()->input('like_url'));
|
||||
$like->save();
|
||||
ProcessLike::dispatch($like);
|
||||
|
||||
return redirect('/admin/likes');
|
||||
}
|
||||
|
||||
public function destroy(int $likeId): RedirectResponse
|
||||
{
|
||||
Like::where('id', $likeId)->delete();
|
||||
|
||||
return redirect('/admin/likes');
|
||||
}
|
||||
}
|
|
@ -5,8 +5,10 @@ namespace App\Jobs;
|
|||
use App\Models\Like;
|
||||
use GuzzleHttp\Client;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Thujohn\Twitter\Facades\Twitter;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use GuzzleHttp\Exception\ClientException;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Jonnybarnes\WebmentionsParser\Authorship;
|
||||
|
@ -35,6 +37,32 @@ class ProcessLike implements ShouldQueue
|
|||
*/
|
||||
public function handle(Client $client, Authorship $authorship)
|
||||
{
|
||||
if ($this->isTweet($this->like->url)) {
|
||||
$tweet = Twitter::getOembed(['url' => $this->like->url]);
|
||||
$this->like->author_name = $tweet->author_name;
|
||||
$this->like->author_url = $tweet->author_url;
|
||||
$this->like->content = $tweet->html;
|
||||
$this->like->save();
|
||||
|
||||
//POSSE like
|
||||
try {
|
||||
$response = $client->request(
|
||||
'POST',
|
||||
'https://brid.gy/publish/webmention',
|
||||
[
|
||||
'form_params' => [
|
||||
'source' => $this->like->url,
|
||||
'target' => 'https://brid.gy/publish/twitter',
|
||||
],
|
||||
]
|
||||
);
|
||||
} catch(ClientException $exception) {
|
||||
//no biggie
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
$response = $client->request('GET', $this->like->url);
|
||||
$mf2 = \Mf2\parse((string) $response->getBody(), $this->like->url);
|
||||
if (array_has($mf2, 'items.0.properties.content')) {
|
||||
|
@ -51,9 +79,17 @@ class ProcessLike implements ShouldQueue
|
|||
$this->like->author_name = $author;
|
||||
}
|
||||
} catch (AuthorshipParserException $exception) {
|
||||
return;
|
||||
return 1;
|
||||
}
|
||||
|
||||
$this->like->save();
|
||||
}
|
||||
|
||||
private function isTweet(string $url): bool
|
||||
{
|
||||
$host = parse_url($url, PHP_URL_HOST);
|
||||
$parts = array_reverse(explode('.', $host));
|
||||
|
||||
return $parts[0] === 'com' && $parts[1] === 'twitter';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,7 +29,13 @@ class Like extends Model
|
|||
|
||||
$mf2 = Mf2\parse($value, $this->url);
|
||||
|
||||
return $this->filterHTML($mf2['items'][0]['properties']['content'][0]['html']);
|
||||
if (array_get($mf2, 'items.0.properties.content.0.html')) {
|
||||
return $this->filterHTML(
|
||||
$mf2['items'][0]['properties']['content'][0]['html']
|
||||
);
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
public function filterHTML($html)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue