Squashed commit of the following: commit 74ed84617fcbecf661695763323e50d049a88db7 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:46:29 2018 +0000 Test passes so remove the dump statement commit a7d3323be02da64f76e8ec88713e3de84a13ded7 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:40:35 2018 +0000 Values with spaces need to be quoted commit 58a120bb238f14346793c388b948b7351d3b51fd Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:37:23 2018 +0000 We need a diplay name for the tests to work now we are using strict type checking commit b46f177053bd697db9a4835d073f2f37e088b26f Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:31:29 2018 +0000 Get travis to show more info about failing test commit 60323f3ce5a0561329a1721ee94821571cdcc86a Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:23:27 2018 +0000 Remove un-used namnepsace imports commit 096d3505920bc94ff8677c77430eca0aae0be58a Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:21:55 2018 +0000 we need php7.2 for object type-hint commit bb818bc19c73d02d510af9f002199f5718a54608 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Jan 15 12:15:48 2018 +0000 Added lots of strict_types
106 lines
3.8 KiB
PHP
106 lines
3.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Services\Micropub;
|
|
|
|
use App\Models\{Media, Note};
|
|
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
|
|
|
class UpdateService
|
|
{
|
|
/**
|
|
* Process a micropub request to update an entry.
|
|
*
|
|
* @param array $request Data from request()->all()
|
|
* @return \Illuminate\Http\JsonResponse
|
|
*/
|
|
public function process(array $request)
|
|
{
|
|
$urlPath = parse_url(array_get($request, 'url'), PHP_URL_PATH);
|
|
|
|
//is it a note we are updating?
|
|
if (mb_substr($urlPath, 1, 5) !== 'notes') {
|
|
return response()->json([
|
|
'error' => 'invalid',
|
|
'error_description' => 'This implementation currently only support the updating of notes',
|
|
], 500);
|
|
}
|
|
|
|
try {
|
|
$note = Note::nb60(basename($urlPath))->firstOrFail();
|
|
} catch (ModelNotFoundException $exception) {
|
|
return response()->json([
|
|
'error' => 'invalid_request',
|
|
'error_description' => 'No known note with given ID',
|
|
], 404);
|
|
}
|
|
|
|
//got the note, are we dealing with a “replace” request?
|
|
if (array_get($request, 'replace')) {
|
|
foreach (array_get($request, 'replace') as $property => $value) {
|
|
if ($property == 'content') {
|
|
$note->note = $value[0];
|
|
}
|
|
if ($property == 'syndication') {
|
|
foreach ($value as $syndicationURL) {
|
|
if (starts_with($syndicationURL, 'https://www.facebook.com')) {
|
|
$note->facebook_url = $syndicationURL;
|
|
}
|
|
if (starts_with($syndicationURL, 'https://www.swarmapp.com')) {
|
|
$note->swarm_url = $syndicationURL;
|
|
}
|
|
if (starts_with($syndicationURL, 'https://twitter.com')) {
|
|
$note->tweet_id = basename(parse_url($syndicationURL, PHP_URL_PATH));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$note->save();
|
|
|
|
return response()->json([
|
|
'response' => 'updated',
|
|
]);
|
|
}
|
|
|
|
//how about “add”
|
|
if (array_get($request, 'add')) {
|
|
foreach (array_get($request, 'add') as $property => $value) {
|
|
if ($property == 'syndication') {
|
|
foreach ($value as $syndicationURL) {
|
|
if (starts_with($syndicationURL, 'https://www.facebook.com')) {
|
|
$note->facebook_url = $syndicationURL;
|
|
}
|
|
if (starts_with($syndicationURL, 'https://www.swarmapp.com')) {
|
|
$note->swarm_url = $syndicationURL;
|
|
}
|
|
if (starts_with($syndicationURL, 'https://twitter.com')) {
|
|
$note->tweet_id = basename(parse_url($syndicationURL, PHP_URL_PATH));
|
|
}
|
|
}
|
|
}
|
|
if ($property == 'photo') {
|
|
foreach ($value as $photoURL) {
|
|
if (starts_with($photoURL, 'https://')) {
|
|
$media = new Media();
|
|
$media->path = $photoURL;
|
|
$media->type = 'image';
|
|
$media->save();
|
|
$note->media()->save($media);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$note->save();
|
|
|
|
return response()->json([
|
|
'response' => 'updated',
|
|
]);
|
|
}
|
|
|
|
return response()->json([
|
|
'response' => 'error',
|
|
'error_description' => 'unsupported request',
|
|
], 500);
|
|
}
|
|
}
|