commit b87b6b2a96de870f1782b00cfe3f393cc79b7d3b Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Mon Dec 18 14:05:11 2017 +0000 Even more tests for this micropub refactor commit 2d967f33c3abeea8fc89f91e1764e970681dc58f Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Sat Dec 16 22:19:53 2017 +0000 Fill out token endpoint tests commit 440dcbe3e53f058060c918429bea75911ddafdc1 Merge: 02a25b0 f60164f Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Fri Dec 15 14:32:50 2017 +0000 Merge pull request #77 from jonnybarnes/analysis-8KABW6 Apply fixes from StyleCI commit f60164fe81dbcc1d2343704145d26c6d6412579a Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Fri Dec 15 14:27:40 2017 +0000 Apply fixes from StyleCI commit 02a25b083a0305f73d715feb3f9d34f9de8f67d4 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Fri Dec 15 14:17:43 2017 +0000 phpcs fix commit 144998de0866bf11f235847d7edc076235294545 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Fri Dec 15 14:16:59 2017 +0000 Don’t pass the request object to service files, pass request()->all() commit dd5e52010c51a359665efa349ff8c13d4d6dbf57 Merge: 97b270a 23b145e Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Sun Dec 10 20:01:03 2017 +0000 Merge pull request #76 from jonnybarnes/analysis-86AVg6 Apply fixes from StyleCI commit 23b145e7bf67a358b3cb894ea0793984b65ecab5 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Sun Dec 10 19:50:53 2017 +0000 Apply fixes from StyleCI commit 97b270a89abe92e167e0d363029ae0b86608bbc9 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Sun Dec 10 19:43:38 2017 +0000 Improve test coverage of the refactor commit 244102264559e4fb0b0614d1738c0283703a71dc Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Fri Dec 8 13:31:13 2017 +0000 Refactor the note creation code commit 22b4786cbd7ae508b51a47f0c8cf9a15535edbb1 Author: Jonny Barnes <jonny@jonnybarnes.uk> Date: Thu Dec 7 17:39:41 2017 +0000 Remove ununsed importsed classes in the controller
99 lines
3.6 KiB
PHP
99 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Micropub;
|
|
|
|
use App\Note;
|
|
use App\Media;
|
|
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
|
|
|
class UpdateService
|
|
{
|
|
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);
|
|
}
|
|
}
|