jonnybarnes.uk/app/Services/NoteService.php

75 lines
2.1 KiB
PHP
Raw Normal View History

2016-05-19 15:01:28 +01:00
<?php
declare(strict_types=1);
2016-05-19 15:01:28 +01:00
namespace App\Services;
use App\Note;
use App\Place;
use Illuminate\Http\Request;
2016-06-23 14:27:00 +01:00
use App\Jobs\SendWebMentions;
2016-05-19 15:01:28 +01:00
use App\Jobs\SyndicateToTwitter;
2016-10-26 23:05:58 +01:00
use App\Jobs\SyndicateToFacebook;
2016-05-19 15:01:28 +01:00
class NoteService
{
/**
* Create a new note.
*
* @param array $data
2016-05-19 15:01:28 +01:00
* @return \App\Note $note
*/
public function createNote(array $data): Note
2016-05-19 15:01:28 +01:00
{
$note = Note::create(
[
'note' => $data['content'],
'in_reply_to' => $data['in-reply-to'],
'client_id' => $data['client-id'],
2016-05-19 15:01:28 +01:00
]
);
if (array_key_exists('location', $data) && $data['location'] !== null && $data['location'] !== 'no-location') {
if (substr($data['location'], 0, strlen(config('app.url'))) == config('app.url')) {
2016-10-07 12:15:17 +01:00
//uri of form http://host/places/slug, we want slug so chop off start
//thats the apps url plus `/places/`
$slug = mb_substr($location, mb_strlen(config('app.url')) + 8);
$place = Place::where('slug', '=', $slug)->first();
$note->place()->associate($place);
}
if (substr($data['location'], 0, 4) == 'geo:') {
preg_match_all(
'/([0-9\.\-]+)/',
$data['location'],
$matches
);
$note->location = $matches[0][0] . ', ' . $matches[0][1];
}
2016-05-19 15:01:28 +01:00
}
/* drop image support for now
2016-05-19 15:01:28 +01:00
//add images to media library
if ($request->hasFile('photo')) {
$files = $request->file('photo');
foreach ($files as $file) {
2016-10-07 14:39:05 +01:00
$note->addMedia($file)->toCollectionOnDisk('images', 's3');
2016-05-19 15:01:28 +01:00
}
}
*/
$note->save();
2016-05-19 15:01:28 +01:00
2016-09-20 13:13:05 +01:00
dispatch(new SendWebMentions($note));
2016-05-19 15:01:28 +01:00
//syndication targets
if (in_array('twitter', $data['syndicate'])) {
dispatch(new SyndicateToTwitter($note));
}
if (in_arraY('facebook', $data['syndicate'])) {
dispatch(new SyndicateToFacebook($note));
}
2016-05-19 15:01:28 +01:00
return $note;
}
}