Version 5.1 - All the GraphQL #32
@ -20,5 +20,3 @@ host = "127.0.0.1"
|
|||||||
|
|
||||||
# Database number
|
# Database number
|
||||||
database = 2
|
database = 2
|
||||||
|
|
||||||
[options]
|
|
@ -2,7 +2,7 @@
|
|||||||
<main>
|
<main>
|
||||||
<h2>Edit Anime Collection Item</h2>
|
<h2>Edit Anime Collection Item</h2>
|
||||||
<form action="<?= $action_url ?>" method="post">
|
<form action="<?= $action_url ?>" method="post">
|
||||||
<table class="invisible form borderless">
|
<table class="invisible form">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td rowspan="6" class="align-center">
|
<td rowspan="6" class="align-center">
|
||||||
|
@ -315,7 +315,7 @@ class APIRequestBuilder {
|
|||||||
* @param string $type
|
* @param string $type
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
private function resetState($url, $type = 'GET')
|
private function resetState($url, $type = 'GET'): void
|
||||||
{
|
{
|
||||||
$requestUrl = $url ?: $this->baseUrl;
|
$requestUrl = $url ?: $this->baseUrl;
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ final class Anilist {
|
|||||||
MangaReadingStatus::PLAN_TO_READ => KMRS::PLAN_TO_READ,
|
MangaReadingStatus::PLAN_TO_READ => KMRS::PLAN_TO_READ,
|
||||||
];
|
];
|
||||||
|
|
||||||
public static function getIdToWatchingStatusMap()
|
public static function getIdToWatchingStatusMap(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'CURRENT' => AnimeWatchingStatus::WATCHING,
|
'CURRENT' => AnimeWatchingStatus::WATCHING,
|
||||||
@ -77,7 +77,7 @@ final class Anilist {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getIdToReadingStatusMap()
|
public static function getIdToReadingStatusMap(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'CURRENT' => MangaReadingStatus::READING,
|
'CURRENT' => MangaReadingStatus::READING,
|
||||||
|
@ -100,7 +100,7 @@ final class Model
|
|||||||
$config = $this->container->get('config');
|
$config = $this->container->get('config');
|
||||||
$anilistUser = $config->get(['anilist', 'username']);
|
$anilistUser = $config->get(['anilist', 'username']);
|
||||||
|
|
||||||
if ( ! is_string($anilistUser))
|
if ( ! \is_string($anilistUser))
|
||||||
{
|
{
|
||||||
throw new InvalidArgumentException('Anilist username is not defined in config');
|
throw new InvalidArgumentException('Anilist username is not defined in config');
|
||||||
}
|
}
|
||||||
@ -151,10 +151,9 @@ final class Model
|
|||||||
* Create a list item with all the relevant data
|
* Create a list item with all the relevant data
|
||||||
*
|
*
|
||||||
* @param array $data
|
* @param array $data
|
||||||
* @param string $type
|
|
||||||
* @return Request
|
* @return Request
|
||||||
*/
|
*/
|
||||||
public function createFullListItem(array $data, string $type = 'anime'): Request
|
public function createFullListItem(array $data): Request
|
||||||
{
|
{
|
||||||
$createData = $data['data'];
|
$createData = $data['data'];
|
||||||
$mediaId = $this->getMediaIdFromMalId($data['mal_id']);
|
$mediaId = $this->getMediaIdFromMalId($data['mal_id']);
|
||||||
@ -168,6 +167,7 @@ final class Model
|
|||||||
* Get the data for a specific list item, generally for editing
|
* Get the data for a specific list item, generally for editing
|
||||||
*
|
*
|
||||||
* @param string $malId - The unique identifier of that list item
|
* @param string $malId - The unique identifier of that list item
|
||||||
|
* @param string $type - Them media type (anime/manga)
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function getListItem(string $malId, string $type): array
|
public function getListItem(string $malId, string $type): array
|
||||||
@ -185,6 +185,7 @@ final class Model
|
|||||||
* Increase the watch count for the current list item
|
* Increase the watch count for the current list item
|
||||||
*
|
*
|
||||||
* @param FormItem $data
|
* @param FormItem $data
|
||||||
|
* @param string $type - Them media type (anime/manga)
|
||||||
* @return Request
|
* @return Request
|
||||||
*/
|
*/
|
||||||
public function incrementListItem(FormItem $data, string $type): Request
|
public function incrementListItem(FormItem $data, string $type): Request
|
||||||
@ -198,7 +199,7 @@ final class Model
|
|||||||
* Modify a list item
|
* Modify a list item
|
||||||
*
|
*
|
||||||
* @param FormItem $data
|
* @param FormItem $data
|
||||||
* @param int [$id]
|
* @param string $type - Them media type (anime/manga)
|
||||||
* @return Request
|
* @return Request
|
||||||
*/
|
*/
|
||||||
public function updateListItem(FormItem $data, string $type): Request
|
public function updateListItem(FormItem $data, string $type): Request
|
||||||
@ -225,6 +226,7 @@ final class Model
|
|||||||
* Get the id of the specific list entry from the malId
|
* Get the id of the specific list entry from the malId
|
||||||
*
|
*
|
||||||
* @param string $malId
|
* @param string $malId
|
||||||
|
* @param string $type - The media type (anime/manga)
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getListIdFromMalId(string $malId, string $type): ?string
|
public function getListIdFromMalId(string $malId, string $type): ?string
|
||||||
@ -234,7 +236,7 @@ final class Model
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the Anilist media id from its MAL id
|
* Get the Anilist list item id from the media id from its MAL id
|
||||||
* this way is more accurate than getting the list item id
|
* this way is more accurate than getting the list item id
|
||||||
* directly from the MAL id
|
* directly from the MAL id
|
||||||
*/
|
*/
|
||||||
@ -248,13 +250,6 @@ final class Model
|
|||||||
'userName' => $anilistUser,
|
'userName' => $anilistUser,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
/* dump([
|
|
||||||
'media_id' => $mediaId,
|
|
||||||
'userName' => $anilistUser,
|
|
||||||
'response' => $info,
|
|
||||||
]);
|
|
||||||
die(); */
|
|
||||||
|
|
||||||
return (string)$info['data']['MediaList']['id'];
|
return (string)$info['data']['MediaList']['id'];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -272,12 +267,6 @@ final class Model
|
|||||||
'type' => mb_strtoupper($type),
|
'type' => mb_strtoupper($type),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
/* dump([
|
|
||||||
'mal_id' => $malId,
|
|
||||||
'response' => $info,
|
|
||||||
]);
|
|
||||||
die(); */
|
|
||||||
|
|
||||||
return (string)$info['data']['Media']['id'];
|
return (string)$info['data']['Media']['id'];
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -56,16 +56,4 @@ class AnimeListTransformer extends AbstractTransformer {
|
|||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Transform a set of structures
|
|
||||||
*
|
|
||||||
* @param array|object $collection
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function untransformCollection($collection): array
|
|
||||||
{
|
|
||||||
$list = (array)$collection;
|
|
||||||
return array_map([$this, 'untransform'], $list);
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -18,6 +18,7 @@ namespace Aviat\AnimeClient\API\Anilist\Transformer;
|
|||||||
|
|
||||||
use Aviat\AnimeClient\API\Enum\MangaReadingStatus\Anilist as AnilistStatus;
|
use Aviat\AnimeClient\API\Enum\MangaReadingStatus\Anilist as AnilistStatus;
|
||||||
use Aviat\AnimeClient\API\Mapping\MangaReadingStatus;
|
use Aviat\AnimeClient\API\Mapping\MangaReadingStatus;
|
||||||
|
use Aviat\AnimeClient\Types\MangaListItem;
|
||||||
use Aviat\AnimeClient\Types\FormItem;
|
use Aviat\AnimeClient\Types\FormItem;
|
||||||
|
|
||||||
use Aviat\Ion\Transformer\AbstractTransformer;
|
use Aviat\Ion\Transformer\AbstractTransformer;
|
||||||
@ -28,7 +29,7 @@ class MangaListTransformer extends AbstractTransformer {
|
|||||||
|
|
||||||
public function transform($item)
|
public function transform($item)
|
||||||
{
|
{
|
||||||
|
return new MangaListItem([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -56,16 +57,4 @@ class MangaListTransformer extends AbstractTransformer {
|
|||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Transform a set of structures
|
|
||||||
*
|
|
||||||
* @param array|object $collection
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function untransformCollection($collection): array
|
|
||||||
{
|
|
||||||
$list = (array)$collection;
|
|
||||||
return array_map([$this, 'untransform'], $list);
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -22,10 +22,10 @@ use Aviat\Ion\Enum;
|
|||||||
* Possible values for watching status for the current anime
|
* Possible values for watching status for the current anime
|
||||||
*/
|
*/
|
||||||
final class Anilist extends Enum {
|
final class Anilist extends Enum {
|
||||||
const WATCHING = 'CURRENT';
|
public const WATCHING = 'CURRENT';
|
||||||
const COMPLETED = 'COMPLETED';
|
public const COMPLETED = 'COMPLETED';
|
||||||
const ON_HOLD = 'PAUSED';
|
public const ON_HOLD = 'PAUSED';
|
||||||
const DROPPED = 'DROPPED';
|
public const DROPPED = 'DROPPED';
|
||||||
const PLAN_TO_WATCH = 'PLANNING';
|
public const PLAN_TO_WATCH = 'PLANNING';
|
||||||
const REPEATING = 'REPEATING';
|
public const REPEATING = 'REPEATING';
|
||||||
}
|
}
|
@ -22,9 +22,9 @@ use Aviat\Ion\Enum;
|
|||||||
* Possible values for watching status for the current anime
|
* Possible values for watching status for the current anime
|
||||||
*/
|
*/
|
||||||
final class Kitsu extends Enum {
|
final class Kitsu extends Enum {
|
||||||
const WATCHING = 'current';
|
public const WATCHING = 'current';
|
||||||
const PLAN_TO_WATCH = 'planned';
|
public const PLAN_TO_WATCH = 'planned';
|
||||||
const ON_HOLD = 'on_hold';
|
public const ON_HOLD = 'on_hold';
|
||||||
const DROPPED = 'dropped';
|
public const DROPPED = 'dropped';
|
||||||
const COMPLETED = 'completed';
|
public const COMPLETED = 'completed';
|
||||||
}
|
}
|
@ -16,16 +16,16 @@
|
|||||||
|
|
||||||
namespace Aviat\AnimeClient\API\Enum\AnimeWatchingStatus;
|
namespace Aviat\AnimeClient\API\Enum\AnimeWatchingStatus;
|
||||||
|
|
||||||
use Aviat\Ion\Enum as Enum;
|
use Aviat\Ion\Enum;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Possible values for current watching status of anime
|
* Possible values for current watching status of anime
|
||||||
*/
|
*/
|
||||||
final class Route extends Enum {
|
final class Route extends Enum {
|
||||||
const ALL = 'all';
|
public const ALL = 'all';
|
||||||
const WATCHING = 'watching';
|
public const WATCHING = 'watching';
|
||||||
const PLAN_TO_WATCH = 'plan_to_watch';
|
public const PLAN_TO_WATCH = 'plan_to_watch';
|
||||||
const DROPPED = 'dropped';
|
public const DROPPED = 'dropped';
|
||||||
const ON_HOLD = 'on_hold';
|
public const ON_HOLD = 'on_hold';
|
||||||
const COMPLETED = 'completed';
|
public const COMPLETED = 'completed';
|
||||||
}
|
}
|
||||||
|
@ -16,16 +16,16 @@
|
|||||||
|
|
||||||
namespace Aviat\AnimeClient\API\Enum\AnimeWatchingStatus;
|
namespace Aviat\AnimeClient\API\Enum\AnimeWatchingStatus;
|
||||||
|
|
||||||
use Aviat\Ion\Enum as Enum;
|
use Aviat\Ion\Enum;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Possible values for current watching status of anime
|
* Possible values for current watching status of anime
|
||||||
*/
|
*/
|
||||||
final class Title extends Enum {
|
final class Title extends Enum {
|
||||||
const ALL = 'All';
|
public const ALL = 'All';
|
||||||
const WATCHING = 'Currently Watching';
|
public const WATCHING = 'Currently Watching';
|
||||||
const PLAN_TO_WATCH = 'Plan to Watch';
|
public const PLAN_TO_WATCH = 'Plan to Watch';
|
||||||
const DROPPED = 'Dropped';
|
public const DROPPED = 'Dropped';
|
||||||
const ON_HOLD = 'On Hold';
|
public const ON_HOLD = 'On Hold';
|
||||||
const COMPLETED = 'Completed';
|
public const COMPLETED = 'Completed';
|
||||||
}
|
}
|
||||||
|
@ -22,10 +22,10 @@ use Aviat\Ion\Enum;
|
|||||||
* Possible values for watching status for the current anime
|
* Possible values for watching status for the current anime
|
||||||
*/
|
*/
|
||||||
final class Anilist extends Enum {
|
final class Anilist extends Enum {
|
||||||
const READING = 'CURRENT';
|
public const READING = 'CURRENT';
|
||||||
const COMPLETED = 'COMPLETED';
|
public const COMPLETED = 'COMPLETED';
|
||||||
const ON_HOLD = 'PAUSED';
|
public const ON_HOLD = 'PAUSED';
|
||||||
const DROPPED = 'DROPPED';
|
public const DROPPED = 'DROPPED';
|
||||||
const PLAN_TO_READ = 'PLANNING';
|
public const PLAN_TO_READ = 'PLANNING';
|
||||||
const REPEATING = 'REPEATING';
|
public const REPEATING = 'REPEATING';
|
||||||
}
|
}
|
@ -22,9 +22,9 @@ use Aviat\Ion\Enum;
|
|||||||
* Possible values for current reading status of manga
|
* Possible values for current reading status of manga
|
||||||
*/
|
*/
|
||||||
final class Kitsu extends Enum {
|
final class Kitsu extends Enum {
|
||||||
const READING = 'current';
|
public const READING = 'current';
|
||||||
const PLAN_TO_READ = 'planned';
|
public const PLAN_TO_READ = 'planned';
|
||||||
const DROPPED = 'dropped';
|
public const DROPPED = 'dropped';
|
||||||
const ON_HOLD = 'on_hold';
|
public const ON_HOLD = 'on_hold';
|
||||||
const COMPLETED = 'completed';
|
public const COMPLETED = 'completed';
|
||||||
}
|
}
|
@ -22,10 +22,10 @@ use Aviat\Ion\Enum;
|
|||||||
* Possible values for current reading status of manga
|
* Possible values for current reading status of manga
|
||||||
*/
|
*/
|
||||||
final class Route extends Enum {
|
final class Route extends Enum {
|
||||||
const ALL = 'all';
|
public const ALL = 'all';
|
||||||
const READING = 'reading';
|
public const READING = 'reading';
|
||||||
const PLAN_TO_READ = 'plan_to_read';
|
public const PLAN_TO_READ = 'plan_to_read';
|
||||||
const DROPPED = 'dropped';
|
public const DROPPED = 'dropped';
|
||||||
const ON_HOLD = 'on_hold';
|
public const ON_HOLD = 'on_hold';
|
||||||
const COMPLETED = 'completed';
|
public const COMPLETED = 'completed';
|
||||||
}
|
}
|
||||||
|
@ -22,10 +22,10 @@ use Aviat\Ion\Enum;
|
|||||||
* Possible values for current reading status of manga
|
* Possible values for current reading status of manga
|
||||||
*/
|
*/
|
||||||
final class Title extends Enum {
|
final class Title extends Enum {
|
||||||
const ALL = 'All';
|
public const ALL = 'All';
|
||||||
const READING = 'Currently Reading';
|
public const READING = 'Currently Reading';
|
||||||
const PLAN_TO_READ = 'Plan to Read';
|
public const PLAN_TO_READ = 'Plan to Read';
|
||||||
const DROPPED = 'Dropped';
|
public const DROPPED = 'Dropped';
|
||||||
const ON_HOLD = 'On Hold';
|
public const ON_HOLD = 'On Hold';
|
||||||
const COMPLETED = 'Completed';
|
public const COMPLETED = 'Completed';
|
||||||
}
|
}
|
||||||
|
@ -21,9 +21,7 @@ namespace Aviat\AnimeClient\API;
|
|||||||
*/
|
*/
|
||||||
final class JsonAPI {
|
final class JsonAPI {
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* The full data array
|
|
||||||
*
|
|
||||||
* Basic structure is generally like so:
|
* Basic structure is generally like so:
|
||||||
* [
|
* [
|
||||||
* 'id' => '12016665',
|
* 'id' => '12016665',
|
||||||
@ -35,10 +33,7 @@ final class JsonAPI {
|
|||||||
*
|
*
|
||||||
* ]
|
* ]
|
||||||
* ]
|
* ]
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
*/
|
||||||
protected $data = [];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inline all included data
|
* Inline all included data
|
||||||
@ -214,8 +209,7 @@ final class JsonAPI {
|
|||||||
$dataType = $props['data']['type'];
|
$dataType = $props['data']['type'];
|
||||||
|
|
||||||
$relationship =& $organized[$type][$id]['relationships'][$relType];
|
$relationship =& $organized[$type][$id]['relationships'][$relType];
|
||||||
unset($relationship['links']);
|
unset($relationship['links'], $relationship['data']);
|
||||||
unset($relationship['data']);
|
|
||||||
|
|
||||||
if ($relType === $dataType)
|
if ($relType === $dataType)
|
||||||
{
|
{
|
||||||
|
@ -23,11 +23,11 @@ use DateTimeImmutable;
|
|||||||
* Data massaging helpers for the Kitsu API
|
* Data massaging helpers for the Kitsu API
|
||||||
*/
|
*/
|
||||||
final class Kitsu {
|
final class Kitsu {
|
||||||
const AUTH_URL = 'https://kitsu.io/api/oauth/token';
|
public const AUTH_URL = 'https://kitsu.io/api/oauth/token';
|
||||||
const AUTH_USER_ID_KEY = 'kitsu-auth-userid';
|
public const AUTH_USER_ID_KEY = 'kitsu-auth-userid';
|
||||||
const AUTH_TOKEN_CACHE_KEY = 'kitsu-auth-token';
|
public const AUTH_TOKEN_CACHE_KEY = 'kitsu-auth-token';
|
||||||
const AUTH_TOKEN_EXP_CACHE_KEY = 'kitsu-auth-token-expires';
|
public const AUTH_TOKEN_EXP_CACHE_KEY = 'kitsu-auth-token-expires';
|
||||||
const AUTH_TOKEN_REFRESH_CACHE_KEY = 'kitsu-auth-token-refresh';
|
public const AUTH_TOKEN_REFRESH_CACHE_KEY = 'kitsu-auth-token-refresh';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine whether an anime is airing, finished airing, or has not yet aired
|
* Determine whether an anime is airing, finished airing, or has not yet aired
|
||||||
|
@ -22,8 +22,8 @@ use Aviat\Ion\Enum as BaseEnum;
|
|||||||
* Status of when anime is being/was/will be aired
|
* Status of when anime is being/was/will be aired
|
||||||
*/
|
*/
|
||||||
final class AnimeAiringStatus extends BaseEnum {
|
final class AnimeAiringStatus extends BaseEnum {
|
||||||
const NOT_YET_AIRED = 'Not Yet Aired';
|
public const NOT_YET_AIRED = 'Not Yet Aired';
|
||||||
const AIRING = 'Currently Airing';
|
public const AIRING = 'Currently Airing';
|
||||||
const FINISHED_AIRING = 'Finished Airing';
|
public const FINISHED_AIRING = 'Finished Airing';
|
||||||
}
|
}
|
||||||
// End of AnimeAiringStatus.php
|
// End of AnimeAiringStatus.php
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
namespace Aviat\AnimeClient\API\Kitsu;
|
namespace Aviat\AnimeClient\API\Kitsu;
|
||||||
|
|
||||||
|
use const Aviat\AnimeClient\USER_AGENT;
|
||||||
use Aviat\AnimeClient\API\APIRequestBuilder;
|
use Aviat\AnimeClient\API\APIRequestBuilder;
|
||||||
|
|
||||||
final class KitsuRequestBuilder extends APIRequestBuilder {
|
final class KitsuRequestBuilder extends APIRequestBuilder {
|
||||||
@ -32,7 +33,7 @@ final class KitsuRequestBuilder extends APIRequestBuilder {
|
|||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $defaultHeaders = [
|
protected $defaultHeaders = [
|
||||||
'User-Agent' => "Tim's Anime Client/4.0",
|
'User-Agent' => USER_AGENT,
|
||||||
'Accept' => 'application/vnd.api+json',
|
'Accept' => 'application/vnd.api+json',
|
||||||
'Content-Type' => 'application/vnd.api+json',
|
'Content-Type' => 'application/vnd.api+json',
|
||||||
'CLIENT_ID' => 'dd031b32d2f56c990b1425efe6c42ad847e7fe3ab46bf1299f05ecd856bdb7dd',
|
'CLIENT_ID' => 'dd031b32d2f56c990b1425efe6c42ad847e7fe3ab46bf1299f05ecd856bdb7dd',
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
namespace Aviat\AnimeClient\API\Kitsu;
|
namespace Aviat\AnimeClient\API\Kitsu;
|
||||||
|
|
||||||
|
use Amp\Artax\Response;
|
||||||
use const Aviat\AnimeClient\SESSION_SEGMENT;
|
use const Aviat\AnimeClient\SESSION_SEGMENT;
|
||||||
|
|
||||||
use function Amp\Promise\wait;
|
use function Amp\Promise\wait;
|
||||||
@ -121,7 +122,7 @@ trait KitsuTrait {
|
|||||||
* @param array $options
|
* @param array $options
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
private function getResponse(string $type, string $url, array $options = [])
|
private function getResponse(string $type, string $url, array $options = []): Response
|
||||||
{
|
{
|
||||||
$logger = NULL;
|
$logger = NULL;
|
||||||
if ($this->getContainer())
|
if ($this->getContainer())
|
||||||
|
@ -78,8 +78,6 @@ final class ListItem implements ListItemInterface {
|
|||||||
|
|
||||||
return $request->setJsonBody($body)
|
return $request->setJsonBody($body)
|
||||||
->getFullRequest();
|
->getFullRequest();
|
||||||
|
|
||||||
// return ($response->getStatus() === 201);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function delete(string $id): Request
|
public function delete(string $id): Request
|
||||||
@ -93,8 +91,6 @@ final class ListItem implements ListItemInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return $request->getFullRequest();
|
return $request->getFullRequest();
|
||||||
|
|
||||||
// return ($response->getStatus() === 204);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function get(string $id): array
|
public function get(string $id): array
|
||||||
|
@ -91,9 +91,10 @@ final class Model {
|
|||||||
{
|
{
|
||||||
$this->animeTransformer = new AnimeTransformer();
|
$this->animeTransformer = new AnimeTransformer();
|
||||||
$this->animeListTransformer = new AnimeListTransformer();
|
$this->animeListTransformer = new AnimeListTransformer();
|
||||||
$this->listItem = $listItem;
|
|
||||||
$this->mangaTransformer = new MangaTransformer();
|
$this->mangaTransformer = new MangaTransformer();
|
||||||
$this->mangaListTransformer = new MangaListTransformer();
|
$this->mangaListTransformer = new MangaListTransformer();
|
||||||
|
|
||||||
|
$this->listItem = $listItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -265,7 +266,7 @@ final class Model {
|
|||||||
public function getUserData(string $username): array
|
public function getUserData(string $username): array
|
||||||
{
|
{
|
||||||
// $userId = $this->getUserIdByUsername($username);
|
// $userId = $this->getUserIdByUsername($username);
|
||||||
$data = $this->getRequest("users", [
|
$data = $this->getRequest('users', [
|
||||||
'query' => [
|
'query' => [
|
||||||
'filter' => [
|
'filter' => [
|
||||||
'name' => $username,
|
'name' => $username,
|
||||||
@ -334,7 +335,7 @@ final class Model {
|
|||||||
* @param string $type "anime" or "manga"
|
* @param string $type "anime" or "manga"
|
||||||
* @return string|NULL
|
* @return string|NULL
|
||||||
*/
|
*/
|
||||||
public function getKitsuIdFromMALId(string $malId, string $type="anime")
|
public function getKitsuIdFromMALId(string $malId, string $type='anime'): ?string
|
||||||
{
|
{
|
||||||
$options = [
|
$options = [
|
||||||
'query' => [
|
'query' => [
|
||||||
@ -369,7 +370,7 @@ final class Model {
|
|||||||
* @param string $slug
|
* @param string $slug
|
||||||
* @return Anime
|
* @return Anime
|
||||||
*/
|
*/
|
||||||
public function getAnime(string $slug)
|
public function getAnime(string $slug): Anime
|
||||||
{
|
{
|
||||||
$baseData = $this->getRawMediaData('anime', $slug);
|
$baseData = $this->getRawMediaData('anime', $slug);
|
||||||
|
|
||||||
@ -523,7 +524,7 @@ final class Model {
|
|||||||
* @param string $kitsuAnimeId The id of the anime on Kitsu
|
* @param string $kitsuAnimeId The id of the anime on Kitsu
|
||||||
* @return string|null Returns the mal id if it exists, otherwise null
|
* @return string|null Returns the mal id if it exists, otherwise null
|
||||||
*/
|
*/
|
||||||
public function getMalIdForAnime(string $kitsuAnimeId)
|
public function getMalIdForAnime(string $kitsuAnimeId): ?string
|
||||||
{
|
{
|
||||||
$options = [
|
$options = [
|
||||||
'query' => [
|
'query' => [
|
||||||
@ -625,7 +626,7 @@ final class Model {
|
|||||||
* Get information about a particular manga
|
* Get information about a particular manga
|
||||||
*
|
*
|
||||||
* @param string $mangaId
|
* @param string $mangaId
|
||||||
* @return array
|
* @return MangaPage
|
||||||
*/
|
*/
|
||||||
public function getMangaById(string $mangaId): MangaPage
|
public function getMangaById(string $mangaId): MangaPage
|
||||||
{
|
{
|
||||||
@ -808,7 +809,7 @@ final class Model {
|
|||||||
* @param string $kitsuMangaId The id of the manga on Kitsu
|
* @param string $kitsuMangaId The id of the manga on Kitsu
|
||||||
* @return string|null Returns the mal id if it exists, otherwise null
|
* @return string|null Returns the mal id if it exists, otherwise null
|
||||||
*/
|
*/
|
||||||
public function getMalIdForManga(string $kitsuMangaId)
|
public function getMalIdForManga(string $kitsuMangaId): ?string
|
||||||
{
|
{
|
||||||
$options = [
|
$options = [
|
||||||
'query' => [
|
'query' => [
|
||||||
@ -920,7 +921,7 @@ final class Model {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the raw data for the anime id
|
* Get the raw data for the anime/manga id
|
||||||
*
|
*
|
||||||
* @param string $type
|
* @param string $type
|
||||||
* @param string $id
|
* @param string $id
|
||||||
|
@ -24,7 +24,7 @@ use Aviat\Ion\Enum;
|
|||||||
* and url route segments
|
* and url route segments
|
||||||
*/
|
*/
|
||||||
final class AnimeWatchingStatus extends Enum {
|
final class AnimeWatchingStatus extends Enum {
|
||||||
const ANILIST_TO_KITSU = [
|
public const ANILIST_TO_KITSU = [
|
||||||
Anilist::WATCHING => Kitsu::WATCHING,
|
Anilist::WATCHING => Kitsu::WATCHING,
|
||||||
Anilist::PLAN_TO_WATCH => Kitsu::PLAN_TO_WATCH,
|
Anilist::PLAN_TO_WATCH => Kitsu::PLAN_TO_WATCH,
|
||||||
Anilist::COMPLETED => Kitsu::COMPLETED,
|
Anilist::COMPLETED => Kitsu::COMPLETED,
|
||||||
@ -32,7 +32,7 @@ final class AnimeWatchingStatus extends Enum {
|
|||||||
Anilist::DROPPED => Kitsu::DROPPED
|
Anilist::DROPPED => Kitsu::DROPPED
|
||||||
];
|
];
|
||||||
|
|
||||||
const KITSU_TO_ANILIST = [
|
public const KITSU_TO_ANILIST = [
|
||||||
Kitsu::WATCHING => Anilist::WATCHING,
|
Kitsu::WATCHING => Anilist::WATCHING,
|
||||||
Kitsu::PLAN_TO_WATCH => Anilist::PLAN_TO_WATCH,
|
Kitsu::PLAN_TO_WATCH => Anilist::PLAN_TO_WATCH,
|
||||||
Kitsu::COMPLETED => Anilist::COMPLETED,
|
Kitsu::COMPLETED => Anilist::COMPLETED,
|
||||||
@ -40,7 +40,7 @@ final class AnimeWatchingStatus extends Enum {
|
|||||||
Kitsu::DROPPED => Anilist::DROPPED
|
Kitsu::DROPPED => Anilist::DROPPED
|
||||||
];
|
];
|
||||||
|
|
||||||
const KITSU_TO_TITLE = [
|
public const KITSU_TO_TITLE = [
|
||||||
Kitsu::WATCHING => Title::WATCHING,
|
Kitsu::WATCHING => Title::WATCHING,
|
||||||
Kitsu::PLAN_TO_WATCH => Title::PLAN_TO_WATCH,
|
Kitsu::PLAN_TO_WATCH => Title::PLAN_TO_WATCH,
|
||||||
Kitsu::ON_HOLD => Title::ON_HOLD,
|
Kitsu::ON_HOLD => Title::ON_HOLD,
|
||||||
@ -48,7 +48,7 @@ final class AnimeWatchingStatus extends Enum {
|
|||||||
Kitsu::COMPLETED => Title::COMPLETED
|
Kitsu::COMPLETED => Title::COMPLETED
|
||||||
];
|
];
|
||||||
|
|
||||||
const ROUTE_TO_KITSU = [
|
public const ROUTE_TO_KITSU = [
|
||||||
Route::WATCHING => Kitsu::WATCHING,
|
Route::WATCHING => Kitsu::WATCHING,
|
||||||
Route::PLAN_TO_WATCH => Kitsu::PLAN_TO_WATCH,
|
Route::PLAN_TO_WATCH => Kitsu::PLAN_TO_WATCH,
|
||||||
Route::ON_HOLD => Kitsu::ON_HOLD,
|
Route::ON_HOLD => Kitsu::ON_HOLD,
|
||||||
@ -56,7 +56,7 @@ final class AnimeWatchingStatus extends Enum {
|
|||||||
Route::COMPLETED => Kitsu::COMPLETED
|
Route::COMPLETED => Kitsu::COMPLETED
|
||||||
];
|
];
|
||||||
|
|
||||||
const ROUTE_TO_TITLE = [
|
public const ROUTE_TO_TITLE = [
|
||||||
Route::ALL => Title::ALL,
|
Route::ALL => Title::ALL,
|
||||||
Route::WATCHING => Title::WATCHING,
|
Route::WATCHING => Title::WATCHING,
|
||||||
Route::PLAN_TO_WATCH => Title::PLAN_TO_WATCH,
|
Route::PLAN_TO_WATCH => Title::PLAN_TO_WATCH,
|
||||||
@ -65,7 +65,7 @@ final class AnimeWatchingStatus extends Enum {
|
|||||||
Route::COMPLETED => Title::COMPLETED
|
Route::COMPLETED => Title::COMPLETED
|
||||||
];
|
];
|
||||||
|
|
||||||
const TITLE_TO_ROUTE = [
|
public const TITLE_TO_ROUTE = [
|
||||||
Title::ALL => Route::ALL,
|
Title::ALL => Route::ALL,
|
||||||
Title::WATCHING => Route::WATCHING,
|
Title::WATCHING => Route::WATCHING,
|
||||||
Title::PLAN_TO_WATCH => Route::PLAN_TO_WATCH,
|
Title::PLAN_TO_WATCH => Route::PLAN_TO_WATCH,
|
||||||
|
@ -24,7 +24,7 @@ use Aviat\Ion\Enum;
|
|||||||
* and url route segments
|
* and url route segments
|
||||||
*/
|
*/
|
||||||
final class MangaReadingStatus extends Enum {
|
final class MangaReadingStatus extends Enum {
|
||||||
const ANILIST_TO_KITSU = [
|
public const ANILIST_TO_KITSU = [
|
||||||
Anilist::READING => Kitsu::READING,
|
Anilist::READING => Kitsu::READING,
|
||||||
Anilist::PLAN_TO_READ => Kitsu::PLAN_TO_READ,
|
Anilist::PLAN_TO_READ => Kitsu::PLAN_TO_READ,
|
||||||
Anilist::COMPLETED => Kitsu::COMPLETED,
|
Anilist::COMPLETED => Kitsu::COMPLETED,
|
||||||
@ -32,7 +32,7 @@ final class MangaReadingStatus extends Enum {
|
|||||||
Anilist::DROPPED => Kitsu::DROPPED
|
Anilist::DROPPED => Kitsu::DROPPED
|
||||||
];
|
];
|
||||||
|
|
||||||
const KITSU_TO_ANILIST = [
|
public const KITSU_TO_ANILIST = [
|
||||||
Kitsu::READING => Anilist::READING,
|
Kitsu::READING => Anilist::READING,
|
||||||
Kitsu::PLAN_TO_READ => Anilist::PLAN_TO_READ,
|
Kitsu::PLAN_TO_READ => Anilist::PLAN_TO_READ,
|
||||||
Kitsu::COMPLETED => Anilist::COMPLETED,
|
Kitsu::COMPLETED => Anilist::COMPLETED,
|
||||||
@ -40,7 +40,7 @@ final class MangaReadingStatus extends Enum {
|
|||||||
Kitsu::DROPPED => Anilist::DROPPED
|
Kitsu::DROPPED => Anilist::DROPPED
|
||||||
];
|
];
|
||||||
|
|
||||||
const KITSU_TO_TITLE = [
|
public const KITSU_TO_TITLE = [
|
||||||
Kitsu::READING => Title::READING,
|
Kitsu::READING => Title::READING,
|
||||||
Kitsu::PLAN_TO_READ => Title::PLAN_TO_READ,
|
Kitsu::PLAN_TO_READ => Title::PLAN_TO_READ,
|
||||||
Kitsu::COMPLETED => Title::COMPLETED,
|
Kitsu::COMPLETED => Title::COMPLETED,
|
||||||
@ -48,7 +48,7 @@ final class MangaReadingStatus extends Enum {
|
|||||||
Kitsu::DROPPED => Title::DROPPED,
|
Kitsu::DROPPED => Title::DROPPED,
|
||||||
];
|
];
|
||||||
|
|
||||||
const ROUTE_TO_KITSU = [
|
public const ROUTE_TO_KITSU = [
|
||||||
Route::PLAN_TO_READ => Kitsu::PLAN_TO_READ,
|
Route::PLAN_TO_READ => Kitsu::PLAN_TO_READ,
|
||||||
Route::READING => Kitsu::READING,
|
Route::READING => Kitsu::READING,
|
||||||
Route::COMPLETED => Kitsu::COMPLETED,
|
Route::COMPLETED => Kitsu::COMPLETED,
|
||||||
@ -56,7 +56,7 @@ final class MangaReadingStatus extends Enum {
|
|||||||
Route::ON_HOLD => Kitsu::ON_HOLD,
|
Route::ON_HOLD => Kitsu::ON_HOLD,
|
||||||
];
|
];
|
||||||
|
|
||||||
const ROUTE_TO_TITLE = [
|
public const ROUTE_TO_TITLE = [
|
||||||
Route::ALL => Title::ALL,
|
Route::ALL => Title::ALL,
|
||||||
Route::PLAN_TO_READ => Title::PLAN_TO_READ,
|
Route::PLAN_TO_READ => Title::PLAN_TO_READ,
|
||||||
Route::READING => Title::READING,
|
Route::READING => Title::READING,
|
||||||
@ -65,7 +65,7 @@ final class MangaReadingStatus extends Enum {
|
|||||||
Route::ON_HOLD => Title::ON_HOLD,
|
Route::ON_HOLD => Title::ON_HOLD,
|
||||||
];
|
];
|
||||||
|
|
||||||
const TITLE_TO_KITSU = [
|
public const TITLE_TO_KITSU = [
|
||||||
Title::PLAN_TO_READ => Kitsu::PLAN_TO_READ,
|
Title::PLAN_TO_READ => Kitsu::PLAN_TO_READ,
|
||||||
Title::READING => Kitsu::READING,
|
Title::READING => Kitsu::READING,
|
||||||
Title::COMPLETED => Kitsu::COMPLETED,
|
Title::COMPLETED => Kitsu::COMPLETED,
|
||||||
|
@ -246,7 +246,7 @@ function getLocalImg ($kitsuUrl, $webp = TRUE): string
|
|||||||
* @param int $height
|
* @param int $height
|
||||||
* @param string $text
|
* @param string $text
|
||||||
*/
|
*/
|
||||||
function createPlaceholderImage ($path, $width, $height, $text = 'Image Unavailable')
|
function createPlaceholderImage ($path, $width, $height, $text = 'Image Unavailable'): void
|
||||||
{
|
{
|
||||||
$width = $width ?? 200;
|
$width = $width ?? 200;
|
||||||
$height = $height ?? 200;
|
$height = $height ?? 200;
|
||||||
@ -268,7 +268,7 @@ function createPlaceholderImage ($path, $width, $height, $text = 'Image Unavaila
|
|||||||
$fontSize = 10;
|
$fontSize = 10;
|
||||||
$fontWidth = imagefontwidth($fontSize);
|
$fontWidth = imagefontwidth($fontSize);
|
||||||
$fontHeight = imagefontheight($fontSize);
|
$fontHeight = imagefontheight($fontSize);
|
||||||
$length = strlen($text);
|
$length = \strlen($text);
|
||||||
$textWidth = $length * $fontWidth;
|
$textWidth = $length * $fontWidth;
|
||||||
$fxPos = (int) ceil((imagesx($img) - $textWidth) / 2);
|
$fxPos = (int) ceil((imagesx($img) - $textWidth) / 2);
|
||||||
$fyPos = (int) ceil((imagesy($img) - $fontHeight) / 2);
|
$fyPos = (int) ceil((imagesy($img) - $fontHeight) / 2);
|
||||||
|
@ -21,13 +21,9 @@ use function Aviat\AnimeClient\loadTomlFile;
|
|||||||
|
|
||||||
use Aura\Router\RouterContainer;
|
use Aura\Router\RouterContainer;
|
||||||
use Aura\Session\SessionFactory;
|
use Aura\Session\SessionFactory;
|
||||||
use Aviat\AnimeClient\UrlGenerator;
|
use Aviat\AnimeClient\{Model, UrlGenerator, Util};
|
||||||
use Aviat\AnimeClient\Util;
|
use Aviat\AnimeClient\API\{Anilist, CacheTrait, Kitsu};
|
||||||
use Aviat\AnimeClient\API\CacheTrait;
|
|
||||||
use Aviat\AnimeClient\API\Anilist;
|
|
||||||
use Aviat\AnimeClient\API\Kitsu;
|
|
||||||
use Aviat\AnimeClient\API\Kitsu\KitsuRequestBuilder;
|
use Aviat\AnimeClient\API\Kitsu\KitsuRequestBuilder;
|
||||||
use Aviat\AnimeClient\Model;
|
|
||||||
use Aviat\Banker\Pool;
|
use Aviat\Banker\Pool;
|
||||||
use Aviat\Ion\Config;
|
use Aviat\Ion\Config;
|
||||||
use Aviat\Ion\Di\{Container, ContainerAware};
|
use Aviat\Ion\Di\{Container, ContainerAware};
|
||||||
|
@ -27,7 +27,7 @@ class ClearThumbnails extends BaseCommand {
|
|||||||
$this->echoBox('All cached images have been removed');
|
$this->echoBox('All cached images have been removed');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function clearThumbs()
|
private function clearThumbs(): void
|
||||||
{
|
{
|
||||||
$imgDir = realpath(__DIR__ . '/../../public/images');
|
$imgDir = realpath(__DIR__ . '/../../public/images');
|
||||||
|
|
||||||
|
@ -183,7 +183,7 @@ class Controller {
|
|||||||
* @throws \Aviat\Ion\Di\Exception\NotFoundException
|
* @throws \Aviat\Ion\Di\Exception\NotFoundException
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function sessionRedirect()
|
public function sessionRedirect(): void
|
||||||
{
|
{
|
||||||
$target = $this->session->get('redirect_url');
|
$target = $this->session->get('redirect_url');
|
||||||
if (empty($target))
|
if (empty($target))
|
||||||
@ -208,7 +208,7 @@ class Controller {
|
|||||||
* @throws \Aviat\Ion\Di\Exception\NotFoundException
|
* @throws \Aviat\Ion\Di\Exception\NotFoundException
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
protected function loadPartial($view, string $template, array $data = [])
|
protected function loadPartial($view, string $template, array $data = []): string
|
||||||
{
|
{
|
||||||
$router = $this->container->get('dispatcher');
|
$router = $this->container->get('dispatcher');
|
||||||
|
|
||||||
@ -242,7 +242,7 @@ class Controller {
|
|||||||
* @throws \Aviat\Ion\Di\Exception\NotFoundException
|
* @throws \Aviat\Ion\Di\Exception\NotFoundException
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
protected function renderFullPage($view, string $template, array $data)
|
protected function renderFullPage($view, string $template, array $data): void
|
||||||
{
|
{
|
||||||
$csp = [
|
$csp = [
|
||||||
"default-src 'self'",
|
"default-src 'self'",
|
||||||
@ -275,7 +275,7 @@ class Controller {
|
|||||||
public function notFound(
|
public function notFound(
|
||||||
string $title = 'Sorry, page not found',
|
string $title = 'Sorry, page not found',
|
||||||
string $message = 'Page Not Found'
|
string $message = 'Page Not Found'
|
||||||
)
|
): void
|
||||||
{
|
{
|
||||||
$this->outputHTML('404', [
|
$this->outputHTML('404', [
|
||||||
'title' => $title,
|
'title' => $title,
|
||||||
@ -383,7 +383,7 @@ class Controller {
|
|||||||
* @throws \Aviat\Ion\Di\Exception\NotFoundException
|
* @throws \Aviat\Ion\Di\Exception\NotFoundException
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
protected function outputHTML(string $template, array $data = [], $view = NULL, int $code = 200)
|
protected function outputHTML(string $template, array $data = [], $view = NULL, int $code = 200): void
|
||||||
{
|
{
|
||||||
if (null === $view)
|
if (null === $view)
|
||||||
{
|
{
|
||||||
|
@ -68,7 +68,7 @@ final class AnimeCollection extends BaseController {
|
|||||||
* @throws \Aviat\Ion\Exception\DoubleRenderException
|
* @throws \Aviat\Ion\Exception\DoubleRenderException
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function search()
|
public function search(): void
|
||||||
{
|
{
|
||||||
$queryParams = $this->request->getQueryParams();
|
$queryParams = $this->request->getQueryParams();
|
||||||
$query = $queryParams['query'];
|
$query = $queryParams['query'];
|
||||||
@ -84,7 +84,7 @@ final class AnimeCollection extends BaseController {
|
|||||||
* @throws \InvalidArgumentException
|
* @throws \InvalidArgumentException
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function index($view)
|
public function index($view): void
|
||||||
{
|
{
|
||||||
$viewMap = [
|
$viewMap = [
|
||||||
'' => 'cover',
|
'' => 'cover',
|
||||||
@ -110,7 +110,7 @@ final class AnimeCollection extends BaseController {
|
|||||||
* @throws \InvalidArgumentException
|
* @throws \InvalidArgumentException
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function form($id = NULL)
|
public function form($id = NULL): void
|
||||||
{
|
{
|
||||||
$this->setSessionRedirect();
|
$this->setSessionRedirect();
|
||||||
|
|
||||||
@ -161,7 +161,7 @@ final class AnimeCollection extends BaseController {
|
|||||||
* @throws \InvalidArgumentException
|
* @throws \InvalidArgumentException
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function add()
|
public function add(): void
|
||||||
{
|
{
|
||||||
$data = $this->request->getParsedBody();
|
$data = $this->request->getParsedBody();
|
||||||
if (array_key_exists('id', $data))
|
if (array_key_exists('id', $data))
|
||||||
@ -182,7 +182,7 @@ final class AnimeCollection extends BaseController {
|
|||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function delete()
|
public function delete(): void
|
||||||
{
|
{
|
||||||
$data = $this->request->getParsedBody();
|
$data = $this->request->getParsedBody();
|
||||||
if ( ! array_key_exists('hummingbird_id', $data))
|
if ( ! array_key_exists('hummingbird_id', $data))
|
||||||
|
@ -138,7 +138,7 @@ final class MangaCollection extends BaseController {
|
|||||||
* @throws \InvalidArgumentException
|
* @throws \InvalidArgumentException
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function edit()
|
public function edit(): void
|
||||||
{
|
{
|
||||||
$data = $this->request->getParsedBody();
|
$data = $this->request->getParsedBody();
|
||||||
if (array_key_exists('hummingbird_id', $data))
|
if (array_key_exists('hummingbird_id', $data))
|
||||||
@ -162,7 +162,7 @@ final class MangaCollection extends BaseController {
|
|||||||
* @throws \InvalidArgumentException
|
* @throws \InvalidArgumentException
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function add()
|
public function add(): void
|
||||||
{
|
{
|
||||||
$data = $this->request->getParsedBody();
|
$data = $this->request->getParsedBody();
|
||||||
if (array_key_exists('id', $data))
|
if (array_key_exists('id', $data))
|
||||||
@ -183,7 +183,7 @@ final class MangaCollection extends BaseController {
|
|||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function delete()
|
public function delete(): void
|
||||||
{
|
{
|
||||||
$data = $this->request->getParsedBody();
|
$data = $this->request->getParsedBody();
|
||||||
if ( ! array_key_exists('hummingbird_id', $data))
|
if ( ! array_key_exists('hummingbird_id', $data))
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
namespace Aviat\AnimeClient\Controller;
|
namespace Aviat\AnimeClient\Controller;
|
||||||
|
|
||||||
use Aviat\AnimeClient\Controller as BaseController;
|
use Aviat\AnimeClient\Controller as BaseController;
|
||||||
use Aviat\Ion\Di\ContainerInterface;
|
|
||||||
use Aviat\Ion\View\HtmlView;
|
use Aviat\Ion\View\HtmlView;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -29,7 +28,7 @@ final class Misc extends BaseController {
|
|||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function clearCache()
|
public function clearCache(): void
|
||||||
{
|
{
|
||||||
$this->cache->clear();
|
$this->cache->clear();
|
||||||
$this->outputHTML('blank', [
|
$this->outputHTML('blank', [
|
||||||
@ -43,7 +42,7 @@ final class Misc extends BaseController {
|
|||||||
* @param string $status
|
* @param string $status
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function login(string $status = '')
|
public function login(string $status = ''): void
|
||||||
{
|
{
|
||||||
$message = '';
|
$message = '';
|
||||||
|
|
||||||
@ -68,7 +67,7 @@ final class Misc extends BaseController {
|
|||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function loginAction()
|
public function loginAction(): void
|
||||||
{
|
{
|
||||||
$auth = $this->container->get('auth');
|
$auth = $this->container->get('auth');
|
||||||
$post = $this->request->getParsedBody();
|
$post = $this->request->getParsedBody();
|
||||||
@ -88,7 +87,7 @@ final class Misc extends BaseController {
|
|||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function logout()
|
public function logout(): void
|
||||||
{
|
{
|
||||||
$auth = $this->container->get('auth');
|
$auth = $this->container->get('auth');
|
||||||
$auth->logout();
|
$auth->logout();
|
||||||
|
@ -64,8 +64,9 @@ final class Dispatcher extends RoutingBase {
|
|||||||
public function __construct(ContainerInterface $container)
|
public function __construct(ContainerInterface $container)
|
||||||
{
|
{
|
||||||
parent::__construct($container);
|
parent::__construct($container);
|
||||||
$this->router = $container->get('aura-router')->getMap();
|
$router = $this->container->get('aura-router');
|
||||||
$this->matcher = $container->get('aura-router')->getMatcher();
|
$this->router = $router->getMap();
|
||||||
|
$this->matcher = $router->getMatcher();
|
||||||
$this->request = $container->get('request');
|
$this->request = $container->get('request');
|
||||||
|
|
||||||
$this->outputRoutes = $this->setupRoutes();
|
$this->outputRoutes = $this->setupRoutes();
|
||||||
@ -99,7 +100,7 @@ final class Dispatcher extends RoutingBase {
|
|||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getOutputRoutes()
|
public function getOutputRoutes(): array
|
||||||
{
|
{
|
||||||
return $this->outputRoutes;
|
return $this->outputRoutes;
|
||||||
}
|
}
|
||||||
@ -171,7 +172,7 @@ final class Dispatcher extends RoutingBase {
|
|||||||
$controllerName = $map[$controllerName];
|
$controllerName = $map[$controllerName];
|
||||||
}
|
}
|
||||||
|
|
||||||
$actionMethod = (array_key_exists('action', $route->attributes))
|
$actionMethod = array_key_exists('action', $route->attributes)
|
||||||
? $route->attributes['action']
|
? $route->attributes['action']
|
||||||
: NOT_FOUND_METHOD;
|
: NOT_FOUND_METHOD;
|
||||||
|
|
||||||
@ -205,9 +206,9 @@ final class Dispatcher extends RoutingBase {
|
|||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getController()
|
public function getController(): string
|
||||||
{
|
{
|
||||||
$routeType = $this->__get('default_list');
|
$routeType = $this->config->get('default_list');
|
||||||
$requestUri = $this->request->getUri()->getPath();
|
$requestUri = $this->request->getUri()->getPath();
|
||||||
$path = trim($requestUri, '/');
|
$path = trim($requestUri, '/');
|
||||||
|
|
||||||
@ -225,7 +226,7 @@ final class Dispatcher extends RoutingBase {
|
|||||||
$controller = $routeType;
|
$controller = $routeType;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $controller;
|
return $controller ?? '';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -233,11 +234,13 @@ final class Dispatcher extends RoutingBase {
|
|||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function getControllerList()
|
public function getControllerList(): array
|
||||||
{
|
{
|
||||||
$defaultNamespace = DEFAULT_CONTROLLER_NAMESPACE;
|
$defaultNamespace = DEFAULT_CONTROLLER_NAMESPACE;
|
||||||
$path = str_replace('\\', '/', $defaultNamespace);
|
$find = ['\\', 'Aviat/AnimeClient/'];
|
||||||
$path = str_replace('Aviat/AnimeClient/', '', $path);
|
$replace = ['/', ''];
|
||||||
|
|
||||||
|
$path = str_replace($find, $replace, $defaultNamespace);
|
||||||
$path = trim($path, '/');
|
$path = trim($path, '/');
|
||||||
$actualPath = realpath(_dir(SRC_DIR, $path));
|
$actualPath = realpath(_dir(SRC_DIR, $path));
|
||||||
$classFiles = glob("{$actualPath}/*.php");
|
$classFiles = glob("{$actualPath}/*.php");
|
||||||
@ -265,7 +268,7 @@ final class Dispatcher extends RoutingBase {
|
|||||||
* @param array $params
|
* @param array $params
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
protected function call($controllerName, $method, array $params)
|
protected function call($controllerName, $method, array $params): void
|
||||||
{
|
{
|
||||||
$logger = $this->container->getLogger('default');
|
$logger = $this->container->getLogger('default');
|
||||||
|
|
||||||
@ -347,7 +350,7 @@ final class Dispatcher extends RoutingBase {
|
|||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function setupRoutes()
|
protected function setupRoutes(): array
|
||||||
{
|
{
|
||||||
$routeType = $this->getController();
|
$routeType = $this->getController();
|
||||||
|
|
||||||
@ -359,7 +362,7 @@ final class Dispatcher extends RoutingBase {
|
|||||||
unset($route['path']);
|
unset($route['path']);
|
||||||
|
|
||||||
$controllerMap = $this->getControllerList();
|
$controllerMap = $this->getControllerList();
|
||||||
$controllerClass = (array_key_exists($routeType, $controllerMap))
|
$controllerClass = array_key_exists($routeType, $controllerMap)
|
||||||
? $controllerMap[$routeType]
|
? $controllerMap[$routeType]
|
||||||
: DEFAULT_CONTROLLER;
|
: DEFAULT_CONTROLLER;
|
||||||
|
|
||||||
|
@ -16,35 +16,28 @@
|
|||||||
|
|
||||||
namespace Aviat\AnimeClient;
|
namespace Aviat\AnimeClient;
|
||||||
|
|
||||||
use Aviat\Ion\
|
|
||||||
{
|
|
||||||
ArrayWrapper, StringWrapper
|
|
||||||
};
|
|
||||||
use Aviat\Ion\Di\ContainerInterface;
|
use Aviat\Ion\Di\ContainerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper object to manage form generation, especially for config editing
|
* Helper object to manage form generation, especially for config editing
|
||||||
*/
|
*/
|
||||||
final class FormGenerator {
|
final class FormGenerator {
|
||||||
use ArrayWrapper;
|
|
||||||
use StringWrapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Injection Container
|
|
||||||
* @var ContainerInterface $container
|
|
||||||
*/
|
|
||||||
protected $container;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Html generation helper
|
* Html generation helper
|
||||||
*
|
*
|
||||||
* @var \Aura\Html\HelperLocator
|
* @var \Aura\Html\HelperLocator
|
||||||
*/
|
*/
|
||||||
protected $helper;
|
private $helper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FormGenerator constructor.
|
||||||
|
*
|
||||||
|
* @param ContainerInterface $container
|
||||||
|
* @throws \Aviat\Ion\Di\Exception\ContainerException
|
||||||
|
* @throws \Aviat\Ion\Di\Exception\NotFoundException
|
||||||
|
*/
|
||||||
public function __construct(ContainerInterface $container)
|
public function __construct(ContainerInterface $container)
|
||||||
{
|
{
|
||||||
$this->container = $container;
|
|
||||||
$this->helper = $container->get('html-helper');
|
$this->helper = $container->get('html-helper');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,7 +48,7 @@ final class FormGenerator {
|
|||||||
* @param array $form
|
* @param array $form
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function generate(string $name, array $form)
|
public function generate(string $name, array $form): string
|
||||||
{
|
{
|
||||||
$type = $form['type'];
|
$type = $form['type'];
|
||||||
|
|
||||||
@ -105,6 +98,6 @@ final class FormGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->helper->input($params);
|
return (string)$this->helper->input($params);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -45,9 +45,11 @@ final class MenuGenerator extends UrlGenerator {
|
|||||||
protected $request;
|
protected $request;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create menu generator
|
* MenuGenerator constructor.
|
||||||
*
|
*
|
||||||
* @param ContainerInterface $container
|
* @param ContainerInterface $container
|
||||||
|
* @throws \Aviat\Ion\Di\Exception\ContainerException
|
||||||
|
* @throws \Aviat\Ion\Di\Exception\NotFoundException
|
||||||
*/
|
*/
|
||||||
public function __construct(ContainerInterface $container)
|
public function __construct(ContainerInterface $container)
|
||||||
{
|
{
|
||||||
@ -106,7 +108,7 @@ final class MenuGenerator extends UrlGenerator {
|
|||||||
|
|
||||||
$link = $this->helper->a($this->url($path), $title);
|
$link = $this->helper->a($this->url($path), $title);
|
||||||
|
|
||||||
$attrs = ($selected)
|
$attrs = $selected
|
||||||
? ['class' => 'selected']
|
? ['class' => 'selected']
|
||||||
: [];
|
: [];
|
||||||
|
|
||||||
|
@ -16,14 +16,10 @@
|
|||||||
|
|
||||||
namespace Aviat\AnimeClient\Model;
|
namespace Aviat\AnimeClient\Model;
|
||||||
|
|
||||||
use Aviat\Ion\StringWrapper;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base model for api interaction
|
* Base model for api interaction
|
||||||
*/
|
*/
|
||||||
class API {
|
class API {
|
||||||
use StringWrapper;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the list entries by their title
|
* Sort the list entries by their title
|
||||||
*
|
*
|
||||||
@ -31,7 +27,7 @@ class API {
|
|||||||
* @param string $sortKey
|
* @param string $sortKey
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
protected function sortByName(array &$array, string $sortKey)
|
protected function sortByName(array &$array, string $sortKey): void
|
||||||
{
|
{
|
||||||
$sort = [];
|
$sort = [];
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ class Anime extends API {
|
|||||||
* @param string $slug
|
* @param string $slug
|
||||||
* @return AnimeType
|
* @return AnimeType
|
||||||
*/
|
*/
|
||||||
public function getAnime(string $slug)
|
public function getAnime(string $slug): AnimeType
|
||||||
{
|
{
|
||||||
return $this->kitsuModel->getAnime($slug);
|
return $this->kitsuModel->getAnime($slug);
|
||||||
}
|
}
|
||||||
@ -147,7 +147,7 @@ class Anime extends API {
|
|||||||
$item = $this->kitsuModel->getListItem($itemId);
|
$item = $this->kitsuModel->getListItem($itemId);
|
||||||
$array = $item->toArray();
|
$array = $item->toArray();
|
||||||
|
|
||||||
if (is_array($array['notes']))
|
if (\is_array($array['notes']))
|
||||||
{
|
{
|
||||||
$array['notes'] = '';
|
$array['notes'] = '';
|
||||||
}
|
}
|
||||||
|
@ -226,6 +226,11 @@ final class AnimeCollection extends Collection {
|
|||||||
return $query->fetch(PDO::FETCH_ASSOC);
|
return $query->fetch(PDO::FETCH_ASSOC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the list of genres from the database
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
private function getGenresForList(): array
|
private function getGenresForList(): array
|
||||||
{
|
{
|
||||||
$query = $this->db->select('hummingbird_id, genre')
|
$query = $this->db->select('hummingbird_id, genre')
|
||||||
|
@ -83,11 +83,11 @@ class Collection extends DB {
|
|||||||
|
|
||||||
if ( ! empty($filter))
|
if ( ! empty($filter))
|
||||||
{
|
{
|
||||||
$this->db->where_in('hummingbird_id', $filter);
|
$this->db->whereIn('hummingbird_id', $filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = $this->db->order_by('hummingbird_id')
|
$query = $this->db->orderBy('hummingbird_id')
|
||||||
->order_by('genre')
|
->orderBy('genre')
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
$output = [];
|
$output = [];
|
||||||
|
@ -17,15 +17,12 @@
|
|||||||
namespace Aviat\AnimeClient\Model;
|
namespace Aviat\AnimeClient\Model;
|
||||||
|
|
||||||
use Aviat\Ion\Di\{ContainerAware, ContainerInterface};
|
use Aviat\Ion\Di\{ContainerAware, ContainerInterface};
|
||||||
use Aviat\Ion\{ArrayWrapper, StringWrapper};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base model for database interaction
|
* Base model for database interaction
|
||||||
*/
|
*/
|
||||||
class DB {
|
class DB {
|
||||||
use ArrayWrapper;
|
|
||||||
use ContainerAware;
|
use ContainerAware;
|
||||||
use StringWrapper;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The query builder object
|
* The query builder object
|
||||||
|
@ -41,7 +41,7 @@ final class Settings {
|
|||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getSettings()
|
public function getSettings(): array
|
||||||
{
|
{
|
||||||
$settings = [
|
$settings = [
|
||||||
'config' => [],
|
'config' => [],
|
||||||
@ -66,7 +66,7 @@ final class Settings {
|
|||||||
return $settings;
|
return $settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getSettingsForm()
|
public function getSettingsForm(): array
|
||||||
{
|
{
|
||||||
$output = [];
|
$output = [];
|
||||||
|
|
||||||
@ -124,7 +124,7 @@ final class Settings {
|
|||||||
return $output;
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function validateSettings(array $settings)
|
public function validateSettings(array $settings): array
|
||||||
{
|
{
|
||||||
$config = (new Config($settings))->toArray();
|
$config = (new Config($settings))->toArray();
|
||||||
|
|
||||||
@ -150,7 +150,7 @@ final class Settings {
|
|||||||
$looseConfig[$key] = $val;
|
$looseConfig[$key] = $val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elseif (is_array($val) && ! empty($val))
|
elseif (\is_array($val) && ! empty($val))
|
||||||
{
|
{
|
||||||
foreach($val as $k => $v)
|
foreach($val as $k => $v)
|
||||||
{
|
{
|
||||||
@ -204,7 +204,6 @@ final class Settings {
|
|||||||
{
|
{
|
||||||
dump($e);
|
dump($e);
|
||||||
dump($settings);
|
dump($settings);
|
||||||
die();
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,20 +59,6 @@ class RoutingBase {
|
|||||||
$this->routes = $this->config->get('routes');
|
$this->routes = $this->config->get('routes');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve the appropriate value for the routing key
|
|
||||||
*
|
|
||||||
* @param string|int|array $key
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function __get($key)
|
|
||||||
{
|
|
||||||
if ($this->config->has($key))
|
|
||||||
{
|
|
||||||
return $this->config->get($key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the current url path
|
* Get the current url path
|
||||||
* @throws \Aviat\Ion\Di\ContainerException
|
* @throws \Aviat\Ion\Di\ContainerException
|
||||||
|
@ -47,13 +47,13 @@ class UrlGenerator extends RoutingBase {
|
|||||||
/**
|
/**
|
||||||
* Get the base url for css/js/images
|
* Get the base url for css/js/images
|
||||||
*
|
*
|
||||||
* @param string ...$args
|
* @param string[] $args
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function assetUrl(string ...$args): string
|
public function assetUrl(string ...$args): string
|
||||||
{
|
{
|
||||||
$baseUrl = rtrim($this->url(''), '/')
|
$baseUrl = rtrim($this->url(''), '/')
|
||||||
. $this->__get('asset_path');
|
. $this->config->get('asset_path');
|
||||||
|
|
||||||
array_unshift($args, $baseUrl);
|
array_unshift($args, $baseUrl);
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ class UrlGenerator extends RoutingBase {
|
|||||||
{
|
{
|
||||||
if ( ! array_key_exists($i + 1, $segments))
|
if ( ! array_key_exists($i + 1, $segments))
|
||||||
{
|
{
|
||||||
$segments[$i + 1] = "";
|
$segments[$i + 1] = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
$path_segments[$i] = preg_replace('`{.*?}`', $segments[$i + 1], $path_segments[$i]);
|
$path_segments[$i] = preg_replace('`{.*?}`', $segments[$i + 1], $path_segments[$i]);
|
||||||
@ -104,7 +104,7 @@ class UrlGenerator extends RoutingBase {
|
|||||||
public function defaultUrl(string $type): string
|
public function defaultUrl(string $type): string
|
||||||
{
|
{
|
||||||
$type = trim($type);
|
$type = trim($type);
|
||||||
$defaultPath = $this->__get("default_{$type}_list_path");
|
$defaultPath = $this->config->get("default_{$type}_list_path");
|
||||||
|
|
||||||
if ($defaultPath !== NULL)
|
if ($defaultPath !== NULL)
|
||||||
{
|
{
|
||||||
|
@ -60,7 +60,7 @@ class Util {
|
|||||||
* @param string $b - Second item to compare
|
* @param string $b - Second item to compare
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function isSelected($a, $b)
|
public static function isSelected(string $a, string $b): string
|
||||||
{
|
{
|
||||||
return ($a === $b) ? 'selected' : '';
|
return ($a === $b) ? 'selected' : '';
|
||||||
}
|
}
|
||||||
@ -72,7 +72,7 @@ class Util {
|
|||||||
* @param string $b - Second item to compare
|
* @param string $b - Second item to compare
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function isNotSelected($a, $b)
|
public static function isNotSelected(string $a, string $b): string
|
||||||
{
|
{
|
||||||
return ($a !== $b) ? 'selected' : '';
|
return ($a !== $b) ? 'selected' : '';
|
||||||
}
|
}
|
||||||
@ -100,7 +100,7 @@ class Util {
|
|||||||
*
|
*
|
||||||
* @throws \Aviat\Ion\Di\ContainerException
|
* @throws \Aviat\Ion\Di\ContainerException
|
||||||
* @throws \Aviat\Ion\Di\NotFoundException
|
* @throws \Aviat\Ion\Di\NotFoundException
|
||||||
* @return boolean
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function isFormPage(): bool
|
public function isFormPage(): bool
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user