Struct Types

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
This commit is contained in:
Jonny Barnes 2018-01-15 14:02:13 +00:00
parent 053e19a457
commit e4fe2ecde3
64 changed files with 911 additions and 406 deletions

View file

@ -1,19 +1,23 @@
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Admin;
use App\Models\Article;
use Illuminate\View\View;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
class ArticlesController extends Controller
{
/**
* List the articles that can be edited.
*
* @return \Illuminate\View\Factory view
* @return \Illuminate\View\View
*/
public function index()
public function index(): View
{
$posts = Article::select('id', 'title', 'published')->orderBy('id', 'desc')->get();
@ -23,9 +27,9 @@ class ArticlesController extends Controller
/**
* Show the new article form.
*
* @return \Illuminate\View\Factory view
* @return \Illuminate\View\View
*/
public function create()
public function create(): View
{
$message = session('message');
@ -35,23 +39,22 @@ class ArticlesController extends Controller
/**
* Process an incoming request for a new article and save it.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\View\Factory view
* @return \Illuminate\Http\RedirectResponse
*/
public function store(Request $request)
public function store(): RedirectResponse
{
//if a `.md` is attached use that for the main content.
if ($request->hasFile('article')) {
$file = $request->file('article')->openFile();
if (request()->hasFile('article')) {
$file = request()->file('article')->openFile();
$content = $file->fread($file->getSize());
}
$main = $content ?? $request->input('main');
$main = $content ?? request()->input('main');
$article = Article::create(
[
'url' => $request->input('url'),
'title' => $request->input('title'),
'url' => request()->input('url'),
'title' => request()->input('title'),
'main' => $main,
'published' => $request->input('published') ?? 0,
'published' => request()->input('published') ?? 0,
]
);
@ -61,10 +64,10 @@ class ArticlesController extends Controller
/**
* Show the edit form for an existing article.
*
* @param string The article id
* @return \Illuminate\View\Factory view
* @param int $articleId
* @return \Illuminate\View\View
*/
public function edit($articleId)
public function edit(int $articleId): View
{
$post = Article::select(
'title',
@ -79,17 +82,16 @@ class ArticlesController extends Controller
/**
* Process an incoming request to edit an article.
*
* @param \Illuminate\Http\Request $request
* @param string
* @return \Illuminate|View\Factory view
* @param int $articleId
* @return \Illuminate\Http\RedirectResponse
*/
public function update(Request $request, $articleId)
public function update(int $articleId): RedirectResponse
{
$article = Article::find($articleId);
$article->title = $request->input('title');
$article->url = $request->input('url');
$article->main = $request->input('main');
$article->published = $request->input('published') ?? 0;
$article->title = request()->input('title');
$article->url = request()->input('url');
$article->main = request()->input('main');
$article->published = request()->input('published') ?? 0;
$article->save();
return redirect('/admin/blog');
@ -98,10 +100,10 @@ class ArticlesController extends Controller
/**
* Process a request to delete an aricle.
*
* @param string The article id
* @return \Illuminate\View\Factory view
* @param int $articleId
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy($articleId)
public function destroy(int $articleId): RedirectResponse
{
Article::where('id', $articleId)->delete();

View file

@ -1,19 +1,23 @@
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Admin;
use Illuminate\View\View;
use Illuminate\Http\Request;
use App\Models\MicropubClient;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
class ClientsController extends Controller
{
/**
* Show a list of known clients.
*
* @return \Illuminate\View\Factory view
* @return \Illuminate\View\View
*/
public function index()
public function index(): View
{
$clients = MicropubClient::all();
@ -23,9 +27,9 @@ class ClientsController extends Controller
/**
* Show form to add a client name.
*
* @return \Illuminate\View\Factory view
* @return \Illuminate\View\View
*/
public function create()
public function create(): View
{
return view('admin.clients.create');
}
@ -33,14 +37,13 @@ class ClientsController extends Controller
/**
* Process the request to adda new client name.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\View\Factory view
* @return \Illuminate\Http\RedirectResponse
*/
public function store(Request $request)
public function store(): RedirectResponse
{
MicropubClient::create([
'client_url' => $request->input('client_url'),
'client_name' => $request->input('client_name'),
'client_url' => request()->input('client_url'),
'client_name' => request()->input('client_name'),
]);
return redirect('/admin/clients');
@ -49,10 +52,10 @@ class ClientsController extends Controller
/**
* Show a form to edit a client name.
*
* @param string The client id
* @return \Illuminate\View\Factory view
* @param int $clientId
* @return \Illuminate\View\View
*/
public function edit($clientId)
public function edit(int $clientId): View
{
$client = MicropubClient::findOrFail($clientId);
@ -66,15 +69,14 @@ class ClientsController extends Controller
/**
* Process the request to edit a client name.
*
* @param string The client id
* @param \Illuminate\Http\Request $request
* @return \Illuminate\View\Factory view
* @param int $clientId
* @return \Illuminate\Http\RedirectResponse
*/
public function update($clientId, Request $request)
public function update(int $clientId): RedirectResponse
{
$client = MicropubClient::findOrFail($clientId);
$client->client_url = $request->input('client_url');
$client->client_name = $request->input('client_name');
$client->client_url = request()->input('client_url');
$client->client_name = request()->input('client_name');
$client->save();
return redirect('/admin/clients');
@ -83,10 +85,10 @@ class ClientsController extends Controller
/**
* Process a request to delete a client.
*
* @param string The client id
* @return redirect
* @param int $clientId
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy($clientId)
public function destroy(int $clientId): RedirectResponse
{
MicropubClient::where('id', $clientId)->delete();

View file

@ -1,21 +1,25 @@
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Admin;
use GuzzleHttp\Client;
use App\Models\Contact;
use Illuminate\View\View;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Filesystem\Filesystem;
use Illuminate\Http\RedirectResponse;
class ContactsController extends Controller
{
/**
* List the currect contacts that can be edited.
*
* @return \Illuminate\View\Factory view
* @return \Illuminate\View\View
*/
public function index()
public function index(): View
{
$contacts = Contact::all();
@ -25,9 +29,9 @@ class ContactsController extends Controller
/**
* Display the form to add a new contact.
*
* @return \Illuminate\View\Factory view
* @return \Illuminate\View\View
*/
public function create()
public function create(): View
{
return view('admin.contacts.create');
}
@ -35,17 +39,16 @@ class ContactsController extends Controller
/**
* Process the request to add a new contact.
*
* @param \Illuminate\Http|request $request
* @return \Illuminate\View\Factory view
* @return \Illuminate\Http\RedirectResponse
*/
public function store(Request $request)
public function store(): RedirectResponse
{
$contact = new Contact();
$contact->name = $request->input('name');
$contact->nick = $request->input('nick');
$contact->homepage = $request->input('homepage');
$contact->twitter = $request->input('twitter');
$contact->facebook = $request->input('facebook');
$contact->name = request()->input('name');
$contact->nick = request()->input('nick');
$contact->homepage = request()->input('homepage');
$contact->twitter = request()->input('twitter');
$contact->facebook = request()->input('facebook');
$contact->save();
return redirect('/admin/contacts');
@ -54,10 +57,10 @@ class ContactsController extends Controller
/**
* Show the form to edit an existing contact.
*
* @param string The contact id
* @return \Illuminate\View\Factory view
* @param int $contactId
* @return \Illuminate\View\View
*/
public function edit($contactId)
public function edit(int $contactId): View
{
$contact = Contact::findOrFail($contactId);
@ -69,28 +72,27 @@ class ContactsController extends Controller
*
* @todo Allow saving profile pictures for people without homepages
*
* @param string The contact id
* @param \Illuminate\Http\Request $request
* @return \Illuminate\View\Factory view
* @param int $contactId
* @return \Illuminate\Http\RedirectResponse
*/
public function update($contactId, Request $request)
public function update(int $contactId): RedirectResponse
{
$contact = Contact::findOrFail($contactId);
$contact->name = $request->input('name');
$contact->nick = $request->input('nick');
$contact->homepage = $request->input('homepage');
$contact->twitter = $request->input('twitter');
$contact->facebook = $request->input('facebook');
$contact->name = request()->input('name');
$contact->nick = request()->input('nick');
$contact->homepage = request()->input('homepage');
$contact->twitter = request()->input('twitter');
$contact->facebook = request()->input('facebook');
$contact->save();
if ($request->hasFile('avatar') && ($request->input('homepage') != '')) {
$dir = parse_url($request->input('homepage'), PHP_URL_HOST);
if (request()->hasFile('avatar') && (request()->input('homepage') != '')) {
$dir = parse_url(request()->input('homepage'), PHP_URL_HOST);
$destination = public_path() . '/assets/profile-images/' . $dir;
$filesystem = new Filesystem();
if ($filesystem->isDirectory($destination) === false) {
$filesystem->makeDirectory($destination);
}
$request->file('avatar')->move($destination, 'image');
request()->file('avatar')->move($destination, 'image');
}
return redirect('/admin/contacts');
@ -99,10 +101,10 @@ class ContactsController extends Controller
/**
* Process the request to delete a contact.
*
* @param string The contact id
* @return \Illuminate\View\Factory view
* @param int $contactId
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy($contactId)
public function destroy(int $contactId): RedirectResponse
{
$contact = Contact::findOrFail($contactId);
$contact->delete();
@ -116,16 +118,16 @@ class ContactsController extends Controller
* This method attempts to find the microformat marked-up profile image
* from a given homepage and save it accordingly
*
* @param string The contact id
* @return \Illuminate\View\Factory view
* @param int $contactId
* @return \Illuminate\Http\RedirectResponse|\Illuminate\View\View
*/
public function getAvatar($contactId)
public function getAvatar(int $contactId)
{
// Initialising
$avatarURL = null;
$avatar = null;
$contact = Contact::findOrFail($contactId);
if (mb_strlen($contact->homepage !== null) !== 0) {
if ($contact->homepage !== null && mb_strlen($contact->homepage) !== 0) {
$client = resolve(Client::class);
try {
$response = $client->get($contact->homepage);

View file

@ -1,12 +1,20 @@
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Admin;
use Illuminate\View\View;
use App\Http\Controllers\Controller;
class HomeController extends Controller
{
public function welcome()
/**
* Show the homepage of the admin CP.
*
* @return \Illuminate\View\View
*/
public function welcome(): View
{
return view('admin.welcome', ['name' => config('admin.user')]);
}

View file

@ -12,6 +12,11 @@ use Illuminate\Http\RedirectResponse;
class LikesController extends Controller
{
/**
* List the likes that can be edited.
*
* @return \Illuminate\View\View
*/
public function index(): View
{
$likes = Like::all();
@ -19,11 +24,21 @@ class LikesController extends Controller
return view('admin.likes.index', compact('likes'));
}
/**
* Show the form to make a new like.
*
* @return \Illuminate\View\View
*/
public function create(): View
{
return view('admin.likes.create');
}
/**
* Process a request to make a new like.
*
* @return \Illuminate\Http\RedirectResponse
*/
public function store(): RedirectResponse
{
$like = Like::create([
@ -34,6 +49,12 @@ class LikesController extends Controller
return redirect('/admin/likes');
}
/**
* Display the form to edit a specific like.
*
* @param int $likeId
* @return \Illuminate\View\View
*/
public function edit(int $likeId): View
{
$like = Like::findOrFail($likeId);
@ -44,6 +65,12 @@ class LikesController extends Controller
]);
}
/**
* Process a request to edit a like.
*
* @param int $likeId
* @return \Illuminate\Http\RedirectResponse
*/
public function update(int $likeId): RedirectResponse
{
$like = Like::findOrFail($likeId);
@ -54,6 +81,12 @@ class LikesController extends Controller
return redirect('/admin/likes');
}
/**
* Process the request to delete a like.
*
* @param int $likeId
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy(int $likeId): RedirectResponse
{
Like::where('id', $likeId)->delete();

View file

@ -1,20 +1,24 @@
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Admin;
use App\Models\Note;
use Illuminate\View\View;
use Illuminate\Http\Request;
use App\Jobs\SendWebMentions;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
class NotesController extends Controller
{
/**
* List the notes that can be edited.
*
* @return \Illuminate\View\Factory view
* @return \Illuminate\View\View
*/
public function index()
public function index(): View
{
$notes = Note::select('id', 'note')->orderBy('id', 'desc')->get();
foreach ($notes as $note) {
@ -27,9 +31,9 @@ class NotesController extends Controller
/**
* Show the form to make a new note.
*
* @return \Illuminate\View\Factory view
* @return \Illuminate\View\View
*/
public function create()
public function create(): View
{
return view('admin.notes.create');
}
@ -37,14 +41,13 @@ class NotesController extends Controller
/**
* Process a request to make a new note.
*
* @param Illuminate\Http\Request $request
* @todo Sort this mess out
* @return \Illuminate\Http\RedirectResponse
*/
public function store(Request $request)
public function store(): RedirectResponse
{
Note::create([
'in-reply-to' => $request->input('in-reply-to'),
'note' => $request->input('content'),
'in-reply-to' => request()->input('in-reply-to'),
'note' => request()->input('content'),
]);
return redirect('/admin/notes');
@ -53,10 +56,10 @@ class NotesController extends Controller
/**
* Display the form to edit a specific note.
*
* @param string The note id
* @return \Illuminate\View\Factory view
* @param int $noteId
* @return \Illuminate\View\View
*/
public function edit($noteId)
public function edit(int $noteId): View
{
$note = Note::find($noteId);
$note->originalNote = $note->getOriginal('note');
@ -68,18 +71,18 @@ class NotesController extends Controller
* Process a request to edit a note. Easy since this can only be done
* from the admin CP.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\View\Factory view
* @param int $noteId
* @return \Illuminate\Http\RedirectResponse
*/
public function update($noteId, Request $request)
public function update(int $noteId): RedirectResponse
{
//update note data
$note = Note::findOrFail($noteId);
$note->note = $request->input('content');
$note->in_reply_to = $request->input('in-reply-to');
$note->note = request()->input('content');
$note->in_reply_to = request()->input('in-reply-to');
$note->save();
if ($request->input('webmentions')) {
if (request()->input('webmentions')) {
dispatch(new SendWebMentions($note));
}
@ -89,12 +92,12 @@ class NotesController extends Controller
/**
* Delete the note.
*
* @param int id
* @return view
* @param int $noteId
* @return \Illuminate\Http\RedirectResponse
*/
public function destroy($id)
public function destroy(int $noteId): RedirectResponse
{
$note = Note::findOrFail($id);
$note = Note::findOrFail($noteId);
$note->delete();
return redirect('/admin/notes');

View file

@ -1,11 +1,15 @@
<?php
declare(strict_types=1);
namespace App\Http\Controllers\Admin;
use App\Models\Place;
use Illuminate\View\View;
use Illuminate\Http\Request;
use App\Services\PlaceService;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Phaza\LaravelPostgis\Geometries\Point;
class PlacesController extends Controller
@ -20,9 +24,9 @@ class PlacesController extends Controller
/**
* List the places that can be edited.
*
* @return \Illuminate\View\Factory view
* @return \Illuminate\View\View
*/
public function index()
public function index(): View
{
$places = Place::all();
@ -32,9 +36,9 @@ class PlacesController extends Controller
/**
* Show the form to make a new place.
*
* @return \Illuminate\View\Factory view
* @return \Illuminate\View\View
*/
public function create()
public function create(): View
{
return view('admin.places.create');
}
@ -42,12 +46,11 @@ class PlacesController extends Controller
/**
* Process a request to make a new place.
*
* @param Illuminate\Http\Request $request
* @return Illuminate\View\Factory view
* @return \Illuminate\Http\RedirectResponse
*/
public function store(Request $request)
public function store(): RedirectResponse
{
$data = $request->only(['name', 'description', 'latitude', 'longitude']);
$data = request()->only(['name', 'description', 'latitude', 'longitude']);
$place = $this->placeService->createPlace($data);
return redirect('/admin/places');
@ -56,10 +59,10 @@ class PlacesController extends Controller
/**
* Display the form to edit a specific place.
*
* @param string The place id
* @return \Illuminate\View\Factory view
* @param int $placeId
* @return \Illuminate\View\View
*/
public function edit($placeId)
public function edit(int $placeId): View
{
$place = Place::findOrFail($placeId);
@ -69,17 +72,19 @@ class PlacesController extends Controller
/**
* Process a request to edit a place.
*
* @param string The place id
* @param Illuminate\Http\Request $request
* @return Illuminate\View\Factory view
* @param int $placeId
* @return \Illuminate\Http\RedirectResponse
*/
public function update($placeId, Request $request)
public function update(int $placeId): RedirectResponse
{
$place = Place::findOrFail($placeId);
$place->name = $request->name;
$place->description = $request->description;
$place->location = new Point((float) $request->latitude, (float) $request->longitude);
$place->icon = $request->icon;
$place->name = request()->input('name');
$place->description = request()->input('description');
$place->location = new Point(
(float) request()->input('latitude'),
(float) request()->input('longitude')
);
$place->icon = request()->input('icon');
$place->save();
return redirect('/admin/places');
@ -88,10 +93,10 @@ class PlacesController extends Controller
/**
* List the places we can merge with the current place.
*
* @param string Place id
* @return Illuminate\View\Factory view
* @param int $placeId
* @return \Illuminate\View\View
*/
public function mergeIndex($placeId)
public function mergeIndex(int $placeId): View
{
$first = Place::find($placeId);
$results = Place::near(new Point($first->latitude, $first->longitude))->get();
@ -105,27 +110,39 @@ class PlacesController extends Controller
return view('admin.places.merge.index', compact('first', 'places'));
}
public function mergeEdit($place1_id, $place2_id)
/**
* Show a form for merging two specific places.
*
* @param int $placeId1
* @param int $placeId2
* @return \Illuminate\View\View
*/
public function mergeEdit(int $placeId1, int $placeId2): View
{
$place1 = Place::find($place1_id);
$place2 = Place::find($place2_id);
$place1 = Place::find($placeId1);
$place2 = Place::find($placeId2);
return view('admin.places.merge.edit', compact('place1', 'place2'));
}
public function mergeStore(Request $request)
/**
* Process the request to merge two places.
*
* @return \Illuminate\Http\RedirectResponse
*/
public function mergeStore(): RedirectResponse
{
$place1 = Place::find($request->input('place1'));
$place2 = Place::find($request->input('place2'));
$place1 = Place::find(request()->input('place1'));
$place2 = Place::find(request()->input('place2'));
if ($request->input('delete') === '1') {
if (request()->input('delete') === '1') {
foreach ($place1->notes as $note) {
$note->place()->dissociate();
$note->place()->associate($place2->id);
}
$place1->delete();
}
if ($request->input('delete') === '2') {
if (request()->input('delete') === '2') {
foreach ($place2->notes as $note) {
$note->place()->dissociate();
$note->place()->associate($place1->id);