HummingBirdAnimeClient/src/AnimeClient/Command/BaseCommand.php

195 lines
5.6 KiB
PHP
Raw Normal View History

2016-10-20 22:09:36 -04:00
<?php declare(strict_types=1);
/**
2017-02-15 16:13:32 -05:00
* Hummingbird Anime List Client
*
2018-08-22 13:48:27 -04:00
* An API client for Kitsu to manage anime and manga watch lists
*
* PHP version 7.4
2016-08-30 10:01:18 -04:00
*
2017-02-15 16:13:32 -05:00
* @package HummingbirdAnimeClient
2016-08-30 10:01:18 -04:00
* @author Timothy J. Warren <tim@timshomepage.net>
2020-01-08 15:39:49 -05:00
* @copyright 2015 - 2020 Timothy J. Warren
2016-08-30 10:01:18 -04:00
* @license http://www.opensource.org/licenses/mit-license.html MIT License
* @version 5
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
*/
namespace Aviat\AnimeClient\Command;
use function Aviat\AnimeClient\loadToml;
2018-10-09 18:26:42 -04:00
use function Aviat\AnimeClient\loadTomlFile;
use Aura\Router\RouterContainer;
use Aura\Session\SessionFactory;
2018-11-09 10:38:35 -05:00
use Aviat\AnimeClient\{Model, UrlGenerator, Util};
use Aviat\AnimeClient\API\{Anilist, CacheTrait, Kitsu};
use Aviat\AnimeClient\API\Kitsu\KitsuRequestBuilder;
2017-01-19 12:49:18 -05:00
use Aviat\Banker\Pool;
2016-10-20 22:32:17 -04:00
use Aviat\Ion\Config;
2017-01-27 12:35:28 -05:00
use Aviat\Ion\Di\{Container, ContainerAware};
2018-01-31 15:44:48 -05:00
use ConsoleKit\{Command, ConsoleException};
2016-10-20 22:32:17 -04:00
use ConsoleKit\Widgets\Box;
2020-04-10 20:01:46 -04:00
use Laminas\Diactoros\{Response, ServerRequestFactory};
2017-10-18 19:28:57 -04:00
use Monolog\Handler\RotatingFileHandler;
2017-01-19 12:49:18 -05:00
use Monolog\Logger;
/**
* Base class for console command setup
*/
2019-12-09 14:34:23 -05:00
abstract class BaseCommand extends Command {
2017-01-27 12:35:28 -05:00
use CacheTrait;
use ContainerAware;
/**
* Echo text in a box
*
* @param string $message
* @return void
*/
2019-12-09 13:13:31 -05:00
protected function echoBox($message): void
{
2018-01-31 15:44:48 -05:00
try
{
echo "\n";
$box = new Box($this->getConsole(), $message);
$box->write();
echo "\n";
}
catch (ConsoleException $e)
{
// oops
}
}
/**
* Setup the Di container
*
* @return Container
*/
2018-01-31 15:44:48 -05:00
protected function setupContainer(): Container
{
$APP_DIR = realpath(__DIR__ . '/../../../app');
2017-02-10 16:12:02 -05:00
$APPCONF_DIR = realpath("{$APP_DIR}/appConf/");
2017-01-19 12:49:18 -05:00
$CONF_DIR = realpath("{$APP_DIR}/config/");
$baseConfig = require $APPCONF_DIR . '/base_config.php';
$config = loadToml($CONF_DIR);
$overrideFile = $CONF_DIR . '/admin-override.toml';
$overrideConfig = file_exists($overrideFile)
? loadTomlFile($overrideFile)
: [];
$configArray = array_replace_recursive($baseConfig, $config, $overrideConfig);
2019-12-09 13:13:31 -05:00
$di = static function ($configArray) use ($APP_DIR): Container {
$container = new Container();
2017-01-27 12:35:28 -05:00
// -------------------------------------------------------------------------
// Logging
// -------------------------------------------------------------------------
2017-01-19 12:49:18 -05:00
$app_logger = new Logger('animeclient');
2017-10-18 19:28:57 -04:00
$app_logger->pushHandler(new RotatingFileHandler($APP_DIR . '/logs/app-cli.log', Logger::NOTICE));
2019-12-09 13:13:31 -05:00
$kitsu_request_logger = new Logger('kitsu-request');
2017-10-18 19:28:57 -04:00
$kitsu_request_logger->pushHandler(new RotatingFileHandler($APP_DIR . '/logs/kitsu_request-cli.log', Logger::NOTICE));
2019-12-09 13:13:31 -05:00
2018-09-26 22:31:04 -04:00
$anilistRequestLogger = new Logger('anilist-request');
$anilistRequestLogger->pushHandler(new RotatingFileHandler($APP_DIR . '/logs/anilist_request-cli.log', Logger::NOTICE));
2019-12-09 13:13:31 -05:00
2018-01-16 14:58:07 -05:00
$container->setLogger($app_logger);
2018-09-26 22:31:04 -04:00
$container->setLogger($anilistRequestLogger, 'anilist-request');
$container->setLogger($kitsu_request_logger, 'kitsu-request');
// Create Config Object
2019-12-09 13:13:31 -05:00
$container->set('config', static function() use ($configArray): Config {
return new Config($configArray);
});
// Create Cache Object
2019-05-08 13:19:03 -04:00
$container->set('cache', static function($container) {
2017-01-19 12:49:18 -05:00
$logger = $container->getLogger();
$config = $container->get('config')->get('cache');
return new Pool($config, $logger);
});
// Create Aura Router Object
2019-05-08 13:19:03 -04:00
$container->set('aura-router', static function() {
return new RouterContainer;
});
// Create Request/Response Objects
2019-05-08 13:19:03 -04:00
$container->set('request', static function() {
return ServerRequestFactory::fromGlobals(
$_SERVER,
$_GET,
$_POST,
$_COOKIE,
$_FILES
);
});
2019-12-09 13:13:31 -05:00
$container->set('response', static function(): Response {
return new Response;
});
// Create session Object
2019-05-08 13:19:03 -04:00
$container->set('session', static function() {
return (new SessionFactory())->newInstance($_COOKIE);
});
// Models
2019-12-09 13:13:31 -05:00
$container->set('kitsu-model', static function($container): Kitsu\Model {
$requestBuilder = new KitsuRequestBuilder();
$requestBuilder->setLogger($container->getLogger('kitsu-request'));
2017-02-10 16:12:02 -05:00
$listItem = new Kitsu\ListItem();
2017-01-27 12:35:28 -05:00
$listItem->setContainer($container);
$listItem->setRequestBuilder($requestBuilder);
$model = new Kitsu\Model($listItem);
2017-01-27 12:35:28 -05:00
$model->setContainer($container);
$model->setRequestBuilder($requestBuilder);
2017-01-27 12:35:28 -05:00
$cache = $container->get('cache');
$model->setCache($cache);
return $model;
});
2019-12-09 13:13:31 -05:00
$container->set('anilist-model', static function ($container): Anilist\Model {
2018-09-26 22:31:04 -04:00
$requestBuilder = new Anilist\AnilistRequestBuilder();
$requestBuilder->setLogger($container->getLogger('anilist-request'));
$listItem = new Anilist\ListItem();
$listItem->setContainer($container);
$listItem->setRequestBuilder($requestBuilder);
$model = new Anilist\Model($listItem);
$model->setContainer($container);
$model->setRequestBuilder($requestBuilder);
return $model;
});
2019-12-09 13:13:31 -05:00
$container->set('settings-model', static function($container): Model\Settings {
$model = new Model\Settings($container->get('config'));
$model->setContainer($container);
return $model;
});
2019-12-09 13:13:31 -05:00
$container->set('auth', static function($container): Kitsu\Auth {
return new Kitsu\Auth($container);
});
2019-12-09 13:13:31 -05:00
$container->set('url-generator', static function($container): UrlGenerator {
return new UrlGenerator($container);
});
2019-12-09 13:13:31 -05:00
$container->set('util', static function($container): Util {
return new Util($container);
});
return $container;
};
return $di($configArray);
}
}