Version 5.1 - All the GraphQL #32

Closed
timw4mail wants to merge 1160 commits from develop into master
5 changed files with 159 additions and 54 deletions
Showing only changes of commit 9c7ed16538 - Show all commits

View File

@ -0,0 +1,31 @@
<?php declare(strict_types=1);
/**
* Hummingbird Anime List Client
*
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
*
* PHP version 7
*
* @package HummingbirdAnimeClient
* @author Timothy J. Warren <tim@timshomepage.net>
* @copyright 2015 - 2017 Timothy J. Warren
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 4.0
* @link https://github.com/timw4mail/HummingBirdAnimeClient
*/
namespace Aviat\AnimeClient\API\Enum\MangaReadingStatus;
use Aviat\Ion\Enum as Enum;
/**
* Possible values for current reading status of manga
*/
class Route extends Enum {
const ALL = 'all';
const READING = 'reading';
const PLAN_TO_READ = 'plan_to_read';
const DROPPED = 'dropped';
const ON_HOLD = 'on_hold';
const COMPLETED = 'completed';
}

View File

@ -0,0 +1,31 @@
<?php declare(strict_types=1);
/**
* Hummingbird Anime List Client
*
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
*
* PHP version 7
*
* @package HummingbirdAnimeClient
* @author Timothy J. Warren <tim@timshomepage.net>
* @copyright 2015 - 2017 Timothy J. Warren
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 4.0
* @link https://github.com/timw4mail/HummingBirdAnimeClient
*/
namespace Aviat\AnimeClient\API\Enum\MangaReadingStatus;
use Aviat\Ion\Enum as Enum;
/**
* Possible values for current reading status of manga
*/
class Title extends Enum {
const ALL = 'All';
const READING = 'Currently Reading';
const PLAN_TO_READ = 'Plan to Read';
const DROPPED = 'Dropped';
const ON_HOLD = 'On Hold';
const COMPLETED = 'Completed';
}

View File

@ -0,0 +1,77 @@
<?php declare(strict_types=1);
/**
* Hummingbird Anime List Client
*
* An API client for Kitsu and MyAnimeList to manage anime and manga watch lists
*
* PHP version 7
*
* @package HummingbirdAnimeClient
* @author Timothy J. Warren <tim@timshomepage.net>
* @copyright 2015 - 2017 Timothy J. Warren
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 4.0
* @link https://github.com/timw4mail/HummingBirdAnimeClient
*/
namespace Aviat\AnimeClient\API\Mapping;
use Aviat\AnimeClient\API\{
Kitsu\Enum\MangaReadingStatus as Kitsu,
MAL\Enum\MangaReadingStatus as MAL
};
use Aviat\AnimeClient\API\Enum\MangaReadingStatus\{Title, Route};
use Aviat\Ion\Enum;
class MangaReadingStatus extends Enum {
const MAL_TO_KITSU = [
Kitsu::READING => MAL::READING,
Kitsu::PLAN_TO_READ => MAL::PLAN_TO_READ,
Kitsu::COMPLETED => MAL::COMPLETED,
Kitsu::ON_HOLD => MAL::ON_HOLD,
Kitsu::DROPPED => MAL::DROPPED
];
const KITSU_TO_MAL = [
MAL::READING => Kitsu::READING,
MAL::PLAN_TO_READ => Kitsu::PLAN_TO_READ,
MAL::COMPLETED => Kitsu::COMPLETED,
MAL::ON_HOLD => Kitsu::ON_HOLD,
MAL::DROPPED => Kitsu::DROPPED
];
const KITSU_TO_TITLE = [
Kitsu::READING => Title::READING,
Kitsu::PLAN_TO_READ => Title::PLAN_TO_READ,
Kitsu::COMPLETED => Title::COMPLETED,
Kitsu::ON_HOLD => Title::ON_HOLD,
Kitsu::DROPPED => Title::DROPPED
];
const ROUTE_TO_KITSU = [
Route::ALL => 'all',
Route::PLAN_TO_READ => Kitsu::PLAN_TO_READ,
Route::READING => Kitsu::READING,
Route::COMPLETED => Kitsu::COMPLETED,
Route::DROPPED => Kitsu::DROPPED,
Route::ON_HOLD => Kitsu::ON_HOLD
];
const ROUTE_TO_TITLE = [
Route::ALL => Title::ALL,
Route::PLAN_TO_READ => Title::PLAN_TO_READ,
Route::READING => Title::READING,
Route::COMPLETED => Title::COMPLETED,
Route::DROPPED => Title::DROPPED,
Route::ON_HOLD => Title::ON_HOLD
];
const TITLE_TO_KITSU = [
Title::ALL => 'all',
Title::PLAN_TO_READ => Kitsu::PLAN_TO_READ,
Title::READING => Kitsu::READING,
Title::COMPLETED => Kitsu::COMPLETED,
Title::DROPPED => Kitsu::DROPPED,
Title::ON_HOLD => Kitsu::ON_HOLD
];
}

View File

@ -18,8 +18,11 @@ namespace Aviat\AnimeClient\Controller;
use Aviat\AnimeClient\Controller; use Aviat\AnimeClient\Controller;
use Aviat\AnimeClient\API\Kitsu; use Aviat\AnimeClient\API\Kitsu;
use Aviat\AnimeClient\API\Kitsu\Enum\MangaReadingStatus; use Aviat\AnimeClient\API\Kitsu\{
use Aviat\AnimeClient\API\Kitsu\Transformer\MangaListTransformer; Enum\MangaReadingStatus as KitsuReadingStatus,
Transformer\MangaListTransformer
};
use Aviat\AnimeClient\API\Mapping\MangaReadingStatus;
use Aviat\AnimeClient\Model\Manga as MangaModel; use Aviat\AnimeClient\Model\Manga as MangaModel;
use Aviat\Ion\Di\ContainerInterface; use Aviat\Ion\Di\ContainerInterface;
use Aviat\Ion\{Json, StringWrapper}; use Aviat\Ion\{Json, StringWrapper};
@ -70,16 +73,9 @@ class Manga extends Controller {
*/ */
public function index($status = "all", $view = "") public function index($status = "all", $view = "")
{ {
$map = [ $statusTitle = MangaReadingStatus::ROUTE_TO_TITLE[$status];
'all' => 'All',
'plan_to_read' => MangaModel::PLAN_TO_READ,
'reading' => MangaModel::READING,
'completed' => MangaModel::COMPLETED,
'dropped' => MangaModel::DROPPED,
'on_hold' => MangaModel::ON_HOLD
];
$title = $this->config->get('whose_list') . "'s Manga List &middot; {$map[$status]}"; $title = $this->config->get('whose_list') . "'s Manga List &middot; {$statusTitle}";
$view_map = [ $view_map = [
'' => 'cover', '' => 'cover',
@ -87,7 +83,7 @@ class Manga extends Controller {
]; ];
$data = ($status !== 'all') $data = ($status !== 'all')
? [$map[$status] => $this->model->getList($map[$status]) ] ? [ $statusTitle => $this->model->getList($statusTitle) ]
: $this->model->getList('All'); : $this->model->getList('All');
$this->outputHTML('manga/' . $view_map[$view], [ $this->outputHTML('manga/' . $view_map[$view], [
@ -167,7 +163,7 @@ class Manga extends Controller {
$this->outputHTML('manga/edit', [ $this->outputHTML('manga/edit', [
'title' => $title, 'title' => $title,
'status_list' => Kitsu::getStatusToMangaSelectMap(), 'status_list' => MangaReadingStatus::KITSU_TO_TITLE,
'item' => $item, 'item' => $item,
'action' => $this->container->get('url-generator') 'action' => $this->container->get('url-generator')
->url('/manga/update_form'), ->url('/manga/update_form'),

View File

@ -16,8 +16,8 @@
namespace Aviat\AnimeClient\Model; namespace Aviat\AnimeClient\Model;
use Aviat\AnimeClient\API\Kitsu\Enum\MangaReadingStatus; use Aviat\AnimeClient\API\Enum\MangaReadingStatus\Title;
use Aviat\AnimeClient\API\Kitsu\Transformer; use Aviat\AnimeClient\API\Mapping\MangaReadingStatus;
use Aviat\Ion\Di\ContainerInterface; use Aviat\Ion\Di\ContainerInterface;
/** /**
@ -25,37 +25,6 @@ use Aviat\Ion\Di\ContainerInterface;
*/ */
class Manga extends API class Manga extends API
{ {
const READING = 'Reading';
const PLAN_TO_READ = 'Plan to Read';
const DROPPED = 'Dropped';
const ON_HOLD = 'On Hold';
const COMPLETED = 'Completed';
/**
* Map API constants to display constants
* @var array
*/
protected $constMap = [
MangaReadingStatus::READING => self::READING,
MangaReadingStatus::PLAN_TO_READ => self::PLAN_TO_READ,
MangaReadingStatus::ON_HOLD => self::ON_HOLD,
MangaReadingStatus::DROPPED => self::DROPPED,
MangaReadingStatus::COMPLETED => self::COMPLETED
];
/**
* Maps url segments to their title equivalents
* @var array
*/
protected $statusMap = [
'current' => self::READING,
'planned' => self::PLAN_TO_READ,
'completed' => self::COMPLETED,
'on_hold' => self::ON_HOLD,
'dropped' => self::DROPPED
];
/** /**
* Model for making requests to Kitsu API * Model for making requests to Kitsu API
* @var \Aviat\AnimeClient\API\Kitsu\Model * @var \Aviat\AnimeClient\API\Kitsu\Model
@ -87,7 +56,7 @@ class Manga extends API
*/ */
public function getList($status) public function getList($status)
{ {
$APIstatus = array_flip($this->constMap)[$status]; $APIstatus = MangaReadingStatus::TITLE_TO_KITSU[$status];
$data = $this->kitsuModel->getMangaList($APIstatus); $data = $this->kitsuModel->getMangaList($APIstatus);
return $this->mapByStatus($data)[$status]; return $this->mapByStatus($data)[$status];
} }
@ -168,15 +137,16 @@ class Manga extends API
private function mapByStatus($data) private function mapByStatus($data)
{ {
$output = [ $output = [
self::READING => [], Title::READING => [],
self::PLAN_TO_READ => [], Title::PLAN_TO_READ => [],
self::ON_HOLD => [], Title::ON_HOLD => [],
self::DROPPED => [], Title::DROPPED => [],
self::COMPLETED => [], Title::COMPLETED => [],
]; ];
foreach ($data as &$entry) { foreach ($data as &$entry) {
$key = $this->statusMap[$entry['reading_status']]; $statusMap = MangaReadingStatus::KITSU_TO_TITLE;
$key = $statusMap[$entry['reading_status']];
$output[$key][] = $entry; $output[$key][] = $entry;
} }