Version 5.1 - All the GraphQL #32

Closed
timw4mail wants to merge 1160 commits from develop into master
7 changed files with 129 additions and 100 deletions
Showing only changes of commit 1634e98799 - Show all commits

View File

@ -90,7 +90,7 @@ class ByteOrderMarkSniff implements Sniff
$fileStartHex = bin2hex(substr($fileStartString, 0, $bomByteLength));
if ($fileStartHex === $expectedBomHex) {
$error = "File contains a $bomName byte order mark (BOM).";
$phpcsFile->addError($error, $stackPtr);
$phpcsFile->addError($error, $stackPtr, 123);
break;
}
}

View File

@ -17,6 +17,7 @@ namespace CodeIgniter\Sniffs\Strings;
use PHP_CodeSniffer\Sniffs\Sniff;
use PHP_CodeSniffer\Files\File;
use Exception;
/**
* CodeIgniter_Sniffs_Strings_DoubleQuoteUsageSniff.
@ -104,19 +105,19 @@ class VariableUsageSniff implements Sniff
$this->_parseVariable($strTokens, $strPtr);
} catch (Exception $err) {
$error = 'There is no variable, object nor array between curly braces. Please use the escape char for $ or {.';
$phpcsFile->addError($error, $stackPtr);
$phpcsFile->addError($error, $stackPtr, 234);
}
$variableFound = TRUE;
if ('}' !== $strTokens[$strPtr]) {
$error = 'There is no matching closing curly brace.';
$phpcsFile->addError($error, $stackPtr);
$phpcsFile->addError($error, $stackPtr, 345);
}
// don't move forward, since it will be done in the main loop
// $strPtr++;
} else if (T_VARIABLE === $strToken[0]) {
$variableFound = TRUE;
$error = "Variable {$strToken[1]} in double-quoted strings should be enclosed with curly braces. Please consider {{$strToken[1]}}";
$phpcsFile->addError($error, $stackPtr);
$phpcsFile->addError($error, $stackPtr, 456);
}
}
$strPtr++;

View File

@ -1,58 +1,57 @@
{
"name": "aviat/hummingbird-anime-client",
"description": "A self-hosted anime/manga client for Kitsu.",
"license":"MIT",
"autoload": {
"files": [
"src/AnimeClient.php"
],
"psr-4": {
"Aviat\\AnimeClient\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Aviat\\AnimeClient\\Tests\\": "tests/",
"CodeIgniter\\": "build/CodeIgniter/"
}
},
"require": {
"aura/html": "^2.0",
"aura/router": "^3.0",
"aura/session": "^2.0",
"aviat/banker": "^1.0.0",
"aviat/ion": "^2.2.0",
"monolog/monolog": "^1.0",
"psr/http-message": "~1.0",
"psr/log": "~1.0",
"yosymfony/toml": "^1.0",
"zendframework/zend-diactoros": "^1.3",
"maximebf/consolekit": "^1.0",
"amphp/artax": "^2.0"
},
"require-dev": {
"pdepend/pdepend": "^2.2",
"sebastian/phpcpd": "^3.0",
"theseer/phpdox": "dev-master",
"phploc/phploc": "^4.0",
"phpmd/phpmd": "^2.4",
"phpunit/phpunit": "^6.0",
"robmorgan/phinx": "^0.9.1",
"consolidation/robo": "~1.0",
"henrikbjorn/lurker": "^1.1.0",
"symfony/var-dumper": "^4.0.1",
"squizlabs/php_codesniffer": "^3.0.0@beta",
"phpstan/phpstan": "^0.9.1",
"spatie/phpunit-snapshot-assertions": "^1.2.0"
},
"scripts": {
"build": "vendor/bin/robo build",
"build:css": "cd public && npm run build && cd ..",
"clean": "vendor/bin/robo clean",
"coverage": "phpdbg -qrr -- vendor/bin/phpunit -c build",
"docs": "vendor/bin/phpdox",
"phpstan": "phpstan analyse src tests",
"watch:css": "cd public && npm run watch",
"test": "vendor/bin/phpunit"
"name": "aviat/hummingbird-anime-client",
"description": "A self-hosted anime/manga client for Kitsu.",
"license": "MIT",
"autoload": {
"files": [
"src/AnimeClient.php"
],
"psr-4": {
"Aviat\\AnimeClient\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Aviat\\AnimeClient\\Tests\\": "tests/",
"CodeIgniter\\": "build/CodeIgniter/"
}
},
"require": {
"amphp/artax": "^2.0",
"aura/html": "^2.0",
"aura/router": "^3.0",
"aura/session": "^2.0",
"aviat/banker": "^1.0.0",
"aviat/ion": "^2.2.0",
"maximebf/consolekit": "^1.0",
"monolog/monolog": "^1.0",
"psr/http-message": "~1.0",
"psr/log": "~1.0",
"yosymfony/toml": "^1.0",
"zendframework/zend-diactoros": "^1.3"
},
"require-dev": {
"consolidation/robo": "~1.0",
"henrikbjorn/lurker": "^1.1.0",
"pdepend/pdepend": "^2.2",
"phploc/phploc": "^4.0",
"phpmd/phpmd": "^2.4",
"phpstan/phpstan": "^0.9.1",
"phpunit/phpunit": "^6.0",
"robmorgan/phinx": "^0.9.1",
"sebastian/phpcpd": "^3.0",
"spatie/phpunit-snapshot-assertions": "^1.2.0",
"squizlabs/php_codesniffer": "^3.0.0@beta",
"theseer/phpdox": "^0.10.1"
},
"scripts": {
"build": "vendor/bin/robo build",
"build:css": "cd public && npm run build && cd ..",
"clean": "vendor/bin/robo clean",
"coverage": "phpdbg -qrr -- vendor/bin/phpunit -c build",
"docs": "vendor/bin/phpdox",
"phpstan": "phpstan analyse src tests",
"watch:css": "cd public && npm run watch",
"test": "vendor/bin/phpunit"
}
}

View File

@ -16,7 +16,6 @@
namespace Aviat\AnimeClient;
use function Aviat\AnimeClient\loadToml;
use function Aviat\Ion\_dir;
// Work around the silly timezone error
@ -27,7 +26,7 @@ if ($timezone === '' || $timezone === FALSE)
}
// Load composer autoloader
require __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/vendor/autoload.php';
// Define base directories
$APP_DIR = _dir(__DIR__, 'app');
@ -37,8 +36,8 @@ $CONF_DIR = _dir($APP_DIR, 'config');
// -----------------------------------------------------------------------------
// Dependency Injection setup
// -----------------------------------------------------------------------------
require _dir($APPCONF_DIR, 'base_config.php'); // $base_config
$di = require _dir($APP_DIR, 'bootstrap.php');
require_once $APPCONF_DIR . '/base_config.php'; // $base_config
$di = require $APP_DIR . '/bootstrap.php';
$config = loadToml($CONF_DIR);
$config_array = array_merge($base_config, $config);
@ -46,10 +45,9 @@ $config_array = array_merge($base_config, $config);
$container = $di($config_array);
// Unset 'constants'
unset($APP_DIR);
unset($CONF_DIR);
unset($APP_DIR, $APPCONF_DIR);
// -----------------------------------------------------------------------------
// Dispatch to the current route
// -----------------------------------------------------------------------------
$container->get('dispatcher')->__invoke();
$container->get('dispatcher')();

View File

@ -18,7 +18,10 @@ namespace Aviat\AnimeClient;
use Yosymfony\Toml\Toml;
define('SRC_DIR', realpath(__DIR__));
if ( ! defined('SRC_DIR'))
{
\define('SRC_DIR', \realpath(__DIR__));
}
const SESSION_SEGMENT = 'Aviat\AnimeClient\Auth';
const DEFAULT_CONTROLLER = 'Aviat\AnimeClient\Controller\Index';
@ -29,35 +32,39 @@ const NOT_FOUND_METHOD = 'notFound';
const ERROR_MESSAGE_METHOD = 'errorPage';
const SRC_DIR = SRC_DIR;
/**
* Load configuration options from .toml files
*
* @param string $path - Path to load config
* @return array
*/
function loadToml(string $path): array
if ( ! \function_exists('Aviat\AnimeClient\loadToml'))
{
$output = [];
$files = glob("{$path}/*.toml");
foreach ($files as $file)
/**
* Load configuration options from .toml files
*
* @param string $path - Path to load config
* @return array
*/
function loadToml(string $path): array
{
$key = str_replace('.toml', '', basename($file));
$toml = file_get_contents($file);
$config = Toml::Parse($toml);
$output = [];
$files = glob("{$path}/*.toml");
if ($key === 'config')
foreach ($files as $file)
{
foreach($config as $name => $value)
$key = str_replace('.toml', '', basename($file));
$toml = file_get_contents($file);
$config = Toml::parse($toml);
if ($key === 'config')
{
$output[$name] = $value;
foreach($config as $name => $value)
{
$output[$name] = $value;
}
continue;
}
continue;
$output[$key] = $config;
}
$output[$key] = $config;
return $output;
}
return $output;
}

View File

@ -16,19 +16,17 @@
namespace Aviat\AnimeClient;
use const Aviat\AnimeClient\SESSION_SEGMENT;
use function Aviat\Ion\_dir;
use Aviat\AnimeClient\API\JsonAPI;
use Aviat\Ion\Di\{ContainerAware, ContainerInterface};
use Aviat\Ion\Exception\DoubleRenderException;
use Aviat\Ion\View\{HtmlView, HttpView, JsonView};
use InvalidArgumentException;
/**
* Controller base, defines output methods
*
* @property Response object $response
* @property $response Response object
*/
class Controller {
@ -96,6 +94,8 @@ class Controller {
* Constructor
*
* @param ContainerInterface $container
* @throws \Aviat\Ion\Di\ContainerException
* @throws \Aviat\Ion\Di\NotFoundException
*/
public function __construct(ContainerInterface $container)
{
@ -122,7 +122,7 @@ class Controller {
// Set a 'previous' flash value for better redirects
$serverParams = $this->request->getServerParams();
if (array_key_exists('HTTP_REFERER', $serverParams))
if (array_key_exists('HTTP_REFERER', $serverParams) && false === stripos($serverParams['HTTP_REFERER'], 'login'))
{
$this->session->setFlash('previous', $serverParams['HTTP_REFERER']);
}
@ -146,6 +146,8 @@ class Controller {
* Set the current url in the session as the target of a future redirect
*
* @param string|null $url
* @throws \Aviat\Ion\Di\ContainerException
* @throws \Aviat\Ion\Di\NotFoundException
* @return void
*/
public function setSessionRedirect(string $url = NULL)
@ -159,16 +161,17 @@ class Controller {
$util = $this->container->get('util');
$doubleFormPage = $serverParams['HTTP_REFERER'] === $this->request->getUri();
$isLoginPage = (bool) strpos($serverParams['HTTP_REFERER'], 'login');
// Don't attempt to set the redirect url if
// the page is one of the form type pages,
// and the previous page is also a form type page_segments
if ($doubleFormPage)
if ($doubleFormPage || $isLoginPage)
{
return;
}
if (is_null($url))
if (null === $url)
{
$url = $util->isViewPage()
? $this->request->url->get()
@ -181,6 +184,9 @@ class Controller {
/**
* Redirect to the url previously set in the session
*
* @throws InvalidArgumentException
* @throws \Aviat\Ion\Di\ContainerException
* @throws \Aviat\Ion\Di\NotFoundException
* @return void
*/
public function sessionRedirect()
@ -204,6 +210,8 @@ class Controller {
* @param string $template
* @param array $data
* @throws InvalidArgumentException
* @throws \Aviat\Ion\Di\ContainerException
* @throws \Aviat\Ion\Di\NotFoundException
* @return string
*/
protected function loadPartial($view, string $template, array $data = [])
@ -235,6 +243,9 @@ class Controller {
* @param HtmlView $view
* @param string $template
* @param array $data
* @throws InvalidArgumentException
* @throws \Aviat\Ion\Di\ContainerException
* @throws \Aviat\Ion\Di\NotFoundException
* @return void
*/
protected function renderFullPage($view, string $template, array $data)
@ -260,6 +271,11 @@ class Controller {
/**
* 404 action
*
* @param string $title
* @param string $message
* @throws InvalidArgumentException
* @throws \Aviat\Ion\Di\ContainerException
* @throws \Aviat\Ion\Di\NotFoundException
* @return void
*/
public function notFound(
@ -280,6 +296,9 @@ class Controller {
* @param string $title
* @param string $message
* @param string $long_message
* @throws InvalidArgumentException
* @throws \Aviat\Ion\Di\ContainerException
* @throws \Aviat\Ion\Di\NotFoundException
* @return void
*/
public function errorPage(int $httpCode, string $title, string $message, string $long_message = "")
@ -330,7 +349,7 @@ class Controller {
/**
* Helper for consistent page titles
*
* @param string ...$parts Title segements
* @param string[] ...$parts Title segments
* @return string
*/
public function formatTitle(string ...$parts) : string
@ -344,6 +363,9 @@ class Controller {
* @param HtmlView $view
* @param string $type
* @param string $message
* @throws InvalidArgumentException
* @throws \Aviat\Ion\Di\ContainerException
* @throws \Aviat\Ion\Di\NotFoundException
* @return string
*/
protected function showMessage($view, string $type, string $message): string
@ -361,11 +383,14 @@ class Controller {
* @param array $data
* @param HtmlView|null $view
* @param int $code
* @throws InvalidArgumentException
* @throws \Aviat\Ion\Di\ContainerException
* @throws \Aviat\Ion\Di\NotFoundException
* @return void
*/
protected function outputHTML(string $template, array $data = [], $view = NULL, int $code = 200)
{
if (is_null($view))
if (null === $view)
{
$view = new HtmlView($this->container);
}
@ -379,6 +404,7 @@ class Controller {
*
* @param mixed $data
* @param int $code - the http status code
* @throws DoubleRenderException
* @return void
*/
protected function outputJSON($data = 'Empty response', int $code = 200)

View File

@ -273,8 +273,6 @@ class Manga extends Controller {
);
}
// dump($data);
foreach($data['included'] as $included)
{
if ($included['type'] === 'characters')