jonnybarnes.uk/app/Services/NoteService.php

101 lines
3.3 KiB
PHP
Raw Normal View History

2016-05-19 15:01:28 +01:00
<?php
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;
class NoteService
{
/**
* Create a new note.
*
* @param \Illuminate\Http\Request $request
* @param string $clientId
* @return \App\Note $note
*/
public function createNote(Request $request, $clientId = null)
{
if ($request->header('Content-Type') == 'application/json') {
$content = $request->input('properties.content')[0];
$inReplyTo = $request->input('properties.in-reply-to')[0];
$location = $request->input('properties.location');
if (is_array($location)) {
$location = $location[0];
}
} else {
$content = $request->input('content');
$inReplyTo = $request->input('in-reply-to');
$location = $request->input('location');
}
2016-05-19 15:01:28 +01:00
$note = Note::create(
[
'note' => $content,
'in_reply_to' => $inReplyTo,
2016-05-19 15:01:28 +01:00
'client_id' => $clientId,
]
);
if ($location !== null && $location !== 'no-location') {
if (substr($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);
$note->save();
}
if (substr($location, 0, 4) == 'geo:') {
preg_match_all(
'/([0-9\.\-]+)/',
$location,
$matches
);
$note->location = $matches[0][0] . ', ' . $matches[0][1];
$note->save();
}
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
}
}
2016-09-20 13:13:05 +01:00
dispatch(new SendWebMentions($note));
2016-05-19 15:01:28 +01:00
//syndication targets
//string sent from either local admin CP or micropub
if ($request->input('twitter') == true || $request->input('syndicate-to') == 'https://twitter.com/jonnybarnes') {
dispatch(new SyndicateToTwitter($note));
}
if ($request->input('facebook') == true || $request->input('syndicate-to') == 'https://facebook.com/jonnybarnes') {
dispatch(new SyndicateToFacebook($note));
}
//micropub request, syndication sent as array
if (
2016-10-26 22:35:58 +01:00
(is_array($request->input('syndicate-to')))
2016-05-19 15:01:28 +01:00
&&
(in_array('https://twitter.com/jonnybarnes', $request->input('syndicate-to')))
2016-05-19 15:01:28 +01:00
) {
2016-09-20 13:13:05 +01:00
dispatch(new SyndicateToTwitter($note));
2016-05-19 15:01:28 +01:00
}
if (
2016-10-26 22:35:58 +01:00
(is_array($request->input('syndicate-to')))
&&
(in_array('https://facebook.com/jonnybarnes', $request->input('syndicate-to')))
) {
dispatch(new SyndicateToFacebook($note));
}
2016-05-19 15:01:28 +01:00
return $note;
}
}