Version 5.1 - All the GraphQL #32
@ -38,7 +38,7 @@ A self-hosted client that allows custom formatting of data from the hummingbird
|
|||||||
|
|
||||||
### Installation
|
### Installation
|
||||||
|
|
||||||
1. Install dependencies via composer: `composer install`
|
1. Install via composer: `composer create-project timw4mail/hummingbird-anime-client`
|
||||||
2. Configure settings in `app/config/config.php` to your liking
|
2. Configure settings in `app/config/config.php` to your liking
|
||||||
3. Create the following directories if they don't exist, and make sure they are world writable
|
3. Create the following directories if they don't exist, and make sure they are world writable
|
||||||
* app/cache
|
* app/cache
|
||||||
@ -51,7 +51,7 @@ A self-hosted client that allows custom formatting of data from the hummingbird
|
|||||||
* For importing anime:
|
* For importing anime:
|
||||||
1. Login
|
1. Login
|
||||||
2. Use the form to select your media
|
2. Use the form to select your media
|
||||||
3. Save & Repeat as needed
|
3. Save & Repeat as needed
|
||||||
* For bulk importing anime:
|
* For bulk importing anime:
|
||||||
1. Find the anime you are looking for on the hummingbird search api page: `https://hummingbird.me/api/v1/search/anime?query=`
|
1. Find the anime you are looking for on the hummingbird search api page: `https://hummingbird.me/api/v1/search/anime?query=`
|
||||||
2. Create an `import.json` file in the root of the app, with an array of objects from the search page that you want to import
|
2. Create an `import.json` file in the root of the app, with an array of objects from the search page that you want to import
|
||||||
|
@ -29,8 +29,7 @@ return function(array $config_array = []) {
|
|||||||
|
|
||||||
$app_logger = new Logger('animeclient');
|
$app_logger = new Logger('animeclient');
|
||||||
$app_logger->pushHandler(new RotatingFileHandler(__DIR__ . '/logs/app.log', Logger::NOTICE));
|
$app_logger->pushHandler(new RotatingFileHandler(__DIR__ . '/logs/app.log', Logger::NOTICE));
|
||||||
$app_logger->pushHandler(new BrowserConsoleHandler(Logger::DEBUG));
|
$container->setLogger($app_logger, 'default');
|
||||||
$container->setLogger($app_logger);
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
// Injected Objects
|
// Injected Objects
|
||||||
|
355
build.xml
355
build.xml
@ -1,251 +1,158 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project name="animeclient" default="full-build">
|
<project default="full-build" name="animeclient" basedir=".">
|
||||||
<!-- By default, we assume all tools to be on the $PATH -->
|
<!-- By default, we assume all tools to be on the $PATH -->
|
||||||
<property name="pdepend" value="pdepend"/>
|
<property name="pdepend" value="pdepend" />
|
||||||
<property name="phpcpd" value="phpcpd"/>
|
<property name="phpcpd" value="phpcpd" />
|
||||||
<property name="phpcs" value="phpcs"/>
|
<property name="phpdox" value="phpdox" />
|
||||||
<property name="phpdox" value="phpdox"/>
|
<property name="phploc" value="phploc" />
|
||||||
<property name="phploc" value="phploc"/>
|
<property name="phpmd" value="phpmd" />
|
||||||
<property name="phpmd" value="phpmd"/>
|
<property name="phpunit" value="phpunit" />
|
||||||
<property name="phpunit" value="phpunit"/>
|
<property name="sonar" value="sonar-runner" />
|
||||||
<property name="sonar" value="sonar-runner"/>
|
|
||||||
|
|
||||||
<!-- Use this when the tools are located as PHARs in ${basedir}/build/tools
|
<target name="full-build"
|
||||||
<property name="pdepend" value="${basedir}/build/tools/pdepend.phar"/>
|
depends="prepare,static-analysis,phpunit,phpdox,sonar"
|
||||||
<property name="phpcpd" value="${basedir}/build/tools/phpcpd.phar"/>
|
description="Performs static analysis, runs the tests, and generates project documentation"
|
||||||
<property name="phpcs" value="${basedir}/build/tools/phpcs.phar"/>
|
/>
|
||||||
<property name="phpdox" value="${basedir}/build/tools/phpdox.phar"/>
|
<target name="full-build-parallel"
|
||||||
<property name="phploc" value="${basedir}/build/tools/phploc.phar"/>
|
depends="prepare,static-analysis-parallel,phpunit,phpdox"
|
||||||
<property name="phpmd" value="${basedir}/build/tools/phpmd.phar"/>
|
description="Performs static analysis (executing the tools in parallel), runs the tests, and generates project documentation"
|
||||||
<property name="phpunit" value="${basedir}/build/tools/phpunit.phar"/> -->
|
/>
|
||||||
|
<target name="quick-build"
|
||||||
|
depends="prepare,lint,phpunit-no-coverage"
|
||||||
|
description="Performs a lint check and runs the tests (without generating code coverage reports)"
|
||||||
|
/>
|
||||||
|
<target name="static-analysis"
|
||||||
|
depends="lint,phploc-ci,pdepend,phpcpd-ci"
|
||||||
|
description="Performs static analysis"
|
||||||
|
/>
|
||||||
|
|
||||||
<!-- Use this when the tools are managed by Composer in ${basedir}/vendor/bin
|
<!-- Adjust the threadCount attribute's value to the number of CPUs -->
|
||||||
<property name="pdepend" value="${basedir}/vendor/bin/pdepend"/>
|
<target name="static-analysis-parallel" description="Performs static analysis (executing the tools in parallel)">
|
||||||
<property name="phpcpd" value="${basedir}/vendor/bin/phpcpd"/>
|
<parallel threadCount="6">
|
||||||
<property name="phpcs" value="${basedir}/vendor/bin/phpcs"/>
|
<sequential>
|
||||||
<property name="phpdox" value="${basedir}/vendor/bin/phpdox"/>
|
<antcall target="pdepend" />
|
||||||
<property name="phploc" value="${basedir}/vendor/bin/phploc"/>
|
</sequential>
|
||||||
<property name="phpmd" value="${basedir}/vendor/bin/phpmd"/>
|
<antcall target="lint" />
|
||||||
<property name="phpunit" value="${basedir}/vendor/bin/phpunit"/> -->
|
<antcall target="phpcpd-ci" />
|
||||||
|
<antcall target="phploc-ci" />
|
||||||
|
</parallel>
|
||||||
|
</target>
|
||||||
|
|
||||||
<target name="full-build"
|
<target name="clean" unless="clean.done" description="Cleanup build artifacts">
|
||||||
depends="prepare,static-analysis,phpunit,phpdox,sonar,-check-failure"
|
<delete dir="build/api" />
|
||||||
description="Performs static analysis, runs the tests, and generates project documentation"/>
|
<delete dir="build/coverage" />
|
||||||
|
<delete dir="build/logs" />
|
||||||
|
<delete dir="build/pdepend" />
|
||||||
|
<delete dir="build/phpdox" />
|
||||||
|
<property name="clean.done" value="true" />
|
||||||
|
</target>
|
||||||
|
|
||||||
<target name="full-build-parallel"
|
<target name="prepare" depends="clean" unless="prepare.done" description="Prepare for build">
|
||||||
depends="prepare,static-analysis-parallel,phpunit,phpdox,-check-failure"
|
<mkdir dir="build/api" />
|
||||||
description="Performs static analysis (executing the tools in parallel), runs the tests, and generates project documentation"/>
|
<mkdir dir="build/coverage" />
|
||||||
|
<mkdir dir="build/logs" />
|
||||||
|
<mkdir dir="build/pdepend" />
|
||||||
|
<mkdir dir="build/phpdox" />
|
||||||
|
<property name="prepare.done" value="true" />
|
||||||
|
</target>
|
||||||
|
|
||||||
<target name="quick-build"
|
<target name="lint" unless="lint.done" description="Perform syntax check of sourcecode files">
|
||||||
depends="prepare,lint,phpunit-no-coverage"
|
<apply executable="php" taskname="lint">
|
||||||
description="Performs a lint check and runs the tests (without generating code coverage reports)"/>
|
<arg value="-l" />
|
||||||
|
|
||||||
<target name="static-analysis"
|
<fileset dir="src">
|
||||||
depends="lint,phploc-ci,pdepend,phpcs-ci,phpcpd-ci"
|
<include name="**/*.php" />
|
||||||
description="Performs static analysis" />
|
</fileset>
|
||||||
|
|
||||||
<!-- Adjust the threadCount attribute's value to the number of CPUs -->
|
<fileset dir="tests">
|
||||||
<target name="static-analysis-parallel"
|
<include name="**/*.php" />
|
||||||
description="Performs static analysis (executing the tools in parallel)">
|
</fileset>
|
||||||
<parallel threadCount="2">
|
</apply>
|
||||||
<sequential>
|
|
||||||
<antcall target="pdepend"/>
|
|
||||||
</sequential>
|
|
||||||
<antcall target="lint"/>
|
|
||||||
<antcall target="phpcpd-ci"/>
|
|
||||||
<antcall target="phpcs-ci"/>
|
|
||||||
<antcall target="phploc-ci"/>
|
|
||||||
</parallel>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<target name="clean"
|
<property name="lint.done" value="true" />
|
||||||
unless="clean.done"
|
</target>
|
||||||
description="Cleanup build artifacts">
|
|
||||||
<delete dir="${basedir}/build/api"/>
|
|
||||||
<delete dir="${basedir}/build/coverage"/>
|
|
||||||
<delete dir="${basedir}/build/logs"/>
|
|
||||||
<delete dir="${basedir}/build/pdepend"/>
|
|
||||||
<delete dir="${basedir}/build/phpdox"/>
|
|
||||||
<property name="clean.done" value="true"/>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<target name="prepare"
|
<target name="phploc" unless="phploc.done" description="Measure project size using PHPLOC and print human readable output. Intended for usage on the command line.">
|
||||||
unless="prepare.done"
|
<exec executable="${phploc}" taskname="phploc">
|
||||||
depends="clean"
|
<arg value="--count-tests" />
|
||||||
description="Prepare for build">
|
<arg path="src" />
|
||||||
<mkdir dir="${basedir}/build/api"/>
|
<arg path="tests" />
|
||||||
<mkdir dir="${basedir}/build/coverage"/>
|
</exec>
|
||||||
<mkdir dir="${basedir}/build/logs"/>
|
|
||||||
<mkdir dir="${basedir}/build/pdepend"/>
|
|
||||||
<mkdir dir="${basedir}/build/phpdox"/>
|
|
||||||
<property name="prepare.done" value="true"/>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<target name="lint"
|
<property name="phploc.done" value="true" />
|
||||||
unless="lint.done"
|
</target>
|
||||||
description="Perform syntax check of sourcecode files">
|
|
||||||
<apply executable="php" taskname="lint">
|
|
||||||
<arg value="-l" />
|
|
||||||
|
|
||||||
<fileset dir="${basedir}/src">
|
<target name="phploc-ci" depends="prepare" unless="phploc.done" description="Measure project size using PHPLOC and log result in CSV and XML format. Intended for usage within a continuous integration environment.">
|
||||||
<include name="**/*.php" />
|
<exec executable="${phploc}" taskname="phploc">
|
||||||
<modified />
|
<arg value="--count-tests" />
|
||||||
</fileset>
|
<arg value="--log-csv" />
|
||||||
|
<arg path="build/logs/phploc.csv" />
|
||||||
|
<arg value="--log-xml" />
|
||||||
|
<arg path="build/logs/phploc.xml" />
|
||||||
|
<arg path="src" />
|
||||||
|
<arg path="tests" />
|
||||||
|
</exec>
|
||||||
|
|
||||||
<fileset dir="${basedir}/tests">
|
<property name="phploc.done" value="true" />
|
||||||
<include name="**/*.php" />
|
</target>
|
||||||
<modified />
|
|
||||||
</fileset>
|
|
||||||
</apply>
|
|
||||||
|
|
||||||
<property name="lint.done" value="true"/>
|
<target name="pdepend" depends="prepare" unless="pdepend.done" description="Calculate software metrics using PHP_Depend and log result in XML format. Intended for usage within a continuous integration environment.">
|
||||||
</target>
|
<exec executable="${pdepend}" taskname="pdepend">
|
||||||
|
<arg value="--jdepend-xml=build/logs/jdepend.xml" />
|
||||||
|
<arg value="--jdepend-chart=build/pdepend/dependencies.svg" />
|
||||||
|
<arg value="--overview-pyramid=build/pdepend/overview-pyramid.svg" />
|
||||||
|
<arg path="src" />
|
||||||
|
</exec>
|
||||||
|
|
||||||
<target name="phploc"
|
<property name="pdepend.done" value="true" />
|
||||||
unless="phploc.done"
|
</target>
|
||||||
description="Measure project size using PHPLOC and print human readable output. Intended for usage on the command line.">
|
|
||||||
<exec executable="${phploc}" taskname="phploc">
|
|
||||||
<arg value="--count-tests" />
|
|
||||||
<arg path="${basedir}/src" />
|
|
||||||
<arg path="${basedir}/tests" />
|
|
||||||
</exec>
|
|
||||||
|
|
||||||
<property name="phploc.done" value="true"/>
|
<target name="phpcpd" unless="phpcpd.done" description="Find duplicate code using PHPCPD and print human readable output. Intended for usage on the command line before committing.">
|
||||||
</target>
|
<exec executable="${phpcpd}" taskname="phpcpd">
|
||||||
|
<arg path="src" />
|
||||||
|
</exec>
|
||||||
|
|
||||||
<target name="phploc-ci"
|
<property name="phpcpd.done" value="true" />
|
||||||
unless="phploc.done"
|
</target>
|
||||||
depends="prepare"
|
|
||||||
description="Measure project size using PHPLOC and log result in CSV and XML format. Intended for usage within a continuous integration environment.">
|
|
||||||
<exec executable="${phploc}" taskname="phploc">
|
|
||||||
<arg value="--count-tests" />
|
|
||||||
<arg value="--log-csv" />
|
|
||||||
<arg path="${basedir}/build/logs/phploc.csv" />
|
|
||||||
<arg value="--log-xml" />
|
|
||||||
<arg path="${basedir}/build/logs/phploc.xml" />
|
|
||||||
<arg path="${basedir}/src" />
|
|
||||||
<arg path="${basedir}/tests" />
|
|
||||||
</exec>
|
|
||||||
|
|
||||||
<property name="phploc.done" value="true"/>
|
<target name="phpcpd-ci" depends="prepare" unless="phpcpd.done" description="Find duplicate code using PHPCPD and log result in XML format. Intended for usage within a continuous integration environment.">
|
||||||
</target>
|
<exec executable="${phpcpd}" taskname="phpcpd">
|
||||||
|
<arg value="--log-pmd" />
|
||||||
|
<arg path="build/logs/pmd-cpd.xml" />
|
||||||
|
<arg path="src" />
|
||||||
|
</exec>
|
||||||
|
|
||||||
<target name="pdepend"
|
<property name="phpcpd.done" value="true" />
|
||||||
unless="pdepend.done"
|
</target>
|
||||||
depends="prepare"
|
|
||||||
description="Calculate software metrics using PHP_Depend and log result in XML format. Intended for usage within a continuous integration environment.">
|
|
||||||
<exec executable="${pdepend}" taskname="pdepend">
|
|
||||||
<arg value="--jdepend-xml=${basedir}/build/logs/jdepend.xml" />
|
|
||||||
<arg value="--jdepend-chart=${basedir}/build/pdepend/dependencies.svg" />
|
|
||||||
<arg value="--overview-pyramid=${basedir}/build/pdepend/overview-pyramid.svg" />
|
|
||||||
<arg path="${basedir}/src" />
|
|
||||||
</exec>
|
|
||||||
|
|
||||||
<property name="pdepend.done" value="true"/>
|
<target name="phpunit" unless="phpunit.done" depends="prepare" description="Run unit tests with PHPUnit">
|
||||||
</target>
|
<exec executable="${phpunit}" taskname="phpunit">
|
||||||
|
<arg value="--configuration" />
|
||||||
|
<arg path="build/phpunit.xml" />
|
||||||
|
</exec>
|
||||||
|
|
||||||
<target name="phpcs"
|
<property name="phpunit.done" value="true" />
|
||||||
unless="phpcs.done"
|
</target>
|
||||||
description="Find coding standard violations using PHP_CodeSniffer and print human readable output. Intended for usage on the command line before committing.">
|
|
||||||
<exec executable="${phpcs}" taskname="phpcs">
|
|
||||||
<arg value="--standard=PSR2" />
|
|
||||||
<arg value="--extensions=php" />
|
|
||||||
<arg value="--ignore=autoload.php" />
|
|
||||||
<arg path="${basedir}/src" />
|
|
||||||
<arg path="${basedir}/tests" />
|
|
||||||
</exec>
|
|
||||||
|
|
||||||
<property name="phpcs.done" value="true"/>
|
<target name="phpunit-no-coverage" depends="prepare" unless="phpunit.done" description="Run unit tests with PHPUnit (without generating code coverage reports)">
|
||||||
</target>
|
<exec executable="${phpunit}" failonerror="true" taskname="phpunit">
|
||||||
|
<arg value="--configuration" />
|
||||||
|
<arg path="build/phpunit.xml" />
|
||||||
|
<arg value="--no-coverage" />
|
||||||
|
</exec>
|
||||||
|
|
||||||
<target name="phpcs-ci"
|
<property name="phpunit.done" value="true" />
|
||||||
unless="phpcs.done"
|
</target>
|
||||||
depends="prepare"
|
|
||||||
description="Find coding standard violations using PHP_CodeSniffer and log result in XML format. Intended for usage within a continuous integration environment.">
|
|
||||||
<exec executable="${phpcs}" output="/dev/null" taskname="phpcs">
|
|
||||||
<arg value="--report=checkstyle" />
|
|
||||||
<arg value="--report-file=${basedir}/build/logs/checkstyle.xml" />
|
|
||||||
<arg value="--standard=PSR2" />
|
|
||||||
<arg value="--extensions=php" />
|
|
||||||
<arg value="--ignore=autoload.php" />
|
|
||||||
<arg path="${basedir}/src" />
|
|
||||||
<arg path="${basedir}/tests" />
|
|
||||||
</exec>
|
|
||||||
|
|
||||||
<property name="phpcs.done" value="true"/>
|
<target name="phpdox" depends="phploc-ci,phpunit" unless="phpdox.done" description="Generate project documentation using phpDox">
|
||||||
</target>
|
<exec dir="build" executable="${phpdox}" taskname="phpdox" />
|
||||||
|
|
||||||
<target name="phpcpd"
|
<property name="phpdox.done" value="true" />
|
||||||
unless="phpcpd.done"
|
</target>
|
||||||
description="Find duplicate code using PHPCPD and print human readable output. Intended for usage on the command line before committing.">
|
|
||||||
<exec executable="${phpcpd}" taskname="phpcpd">
|
|
||||||
<arg path="${basedir}/src" />
|
|
||||||
</exec>
|
|
||||||
|
|
||||||
<property name="phpcpd.done" value="true"/>
|
<target name="sonar" depends="phpunit" unless="sonar.done" description="Generate code analysis with sonarqube">
|
||||||
</target>
|
<exec executable="${sonar}" taskname="sonar" />
|
||||||
|
|
||||||
<target name="phpcpd-ci"
|
|
||||||
unless="phpcpd.done"
|
|
||||||
depends="prepare"
|
|
||||||
description="Find duplicate code using PHPCPD and log result in XML format. Intended for usage within a continuous integration environment.">
|
|
||||||
<exec executable="${phpcpd}" taskname="phpcpd">
|
|
||||||
<arg value="--log-pmd" />
|
|
||||||
<arg path="${basedir}/build/logs/pmd-cpd.xml" />
|
|
||||||
<arg path="${basedir}/src" />
|
|
||||||
</exec>
|
|
||||||
|
|
||||||
<property name="phpcpd.done" value="true"/>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<target name="phpunit"
|
|
||||||
unless="phpunit.done"
|
|
||||||
depends="prepare"
|
|
||||||
description="Run unit tests with PHPUnit">
|
|
||||||
<exec executable="${phpunit}" resultproperty="result.phpunit" taskname="phpunit">
|
|
||||||
<arg value="--configuration"/>
|
|
||||||
<arg path="${basedir}/build/phpunit.xml"/>
|
|
||||||
</exec>
|
|
||||||
|
|
||||||
<property name="phpunit.done" value="true"/>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<target name="phpunit-no-coverage"
|
|
||||||
unless="phpunit.done"
|
|
||||||
depends="prepare"
|
|
||||||
description="Run unit tests with PHPUnit (without generating code coverage reports)">
|
|
||||||
<exec executable="${phpunit}" failonerror="true" taskname="phpunit">
|
|
||||||
<arg value="--configuration"/>
|
|
||||||
<arg path="${basedir}/build/phpunit.xml"/>
|
|
||||||
<arg value="--no-coverage"/>
|
|
||||||
</exec>
|
|
||||||
|
|
||||||
<property name="phpunit.done" value="true"/>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<target name="phpdox"
|
|
||||||
unless="phpdox.done"
|
|
||||||
depends="phploc-ci,phpcs-ci,phpunit"
|
|
||||||
description="Generate project documentation using phpDox">
|
|
||||||
<exec executable="${phpdox}" dir="${basedir}/build" taskname="phpdox"/>
|
|
||||||
|
|
||||||
<property name="phpdox.done" value="true"/>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<target name="sonar"
|
|
||||||
depends="phpunit">
|
|
||||||
<exec executable="${sonar}" taskname="sonar"/>
|
|
||||||
<property name="sonar.done" value="true"/>
|
|
||||||
</target>
|
|
||||||
|
|
||||||
<target name="-check-failure">
|
|
||||||
<fail message="PHPUnit did not finish successfully">
|
|
||||||
<condition>
|
|
||||||
<not>
|
|
||||||
<equals arg1="${result.phpunit}" arg2="0"/>
|
|
||||||
</not>
|
|
||||||
</condition>
|
|
||||||
</fail>
|
|
||||||
</target>
|
|
||||||
</project>
|
|
||||||
|
|
||||||
|
<property name="sonar.done" value="true" />
|
||||||
|
</target>
|
||||||
|
</project>
|
@ -7,16 +7,15 @@
|
|||||||
"aura/html": "2.*",
|
"aura/html": "2.*",
|
||||||
"aura/router": "2.2.*",
|
"aura/router": "2.2.*",
|
||||||
"aura/session": "2.*",
|
"aura/session": "2.*",
|
||||||
"aura/web": "2.0.*",
|
"aura/web": "2.*",
|
||||||
"aviat4ion/query": "2.5.*",
|
"aviat4ion/query": "2.5.*",
|
||||||
"container-interop/container-interop": "1.*",
|
"container-interop/container-interop": "1.*",
|
||||||
"danielstjules/stringy": "~2.1",
|
"danielstjules/stringy": "~2.1",
|
||||||
"filp/whoops": "1.1.*",
|
"filp/whoops": "2.0.*",
|
||||||
"guzzlehttp/guzzle": "6.*",
|
"guzzlehttp/guzzle": "6.*",
|
||||||
"monolog/monolog": "1.*",
|
"monolog/monolog": "1.*",
|
||||||
"mustache/mustache": "*",
|
|
||||||
"psr/log": "~1.0",
|
"psr/log": "~1.0",
|
||||||
"robmorgan/phinx": "0.4.*",
|
"robmorgan/phinx": "0.4.*",
|
||||||
"szymach/c-pchart": "1.*"
|
"yosymfony/toml": "0.3.*"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -66,7 +66,6 @@ $whoops->pushHandler($defaultHandler);
|
|||||||
|
|
||||||
// Set up json handler for ajax errors
|
// Set up json handler for ajax errors
|
||||||
$jsonHandler = new JsonResponseHandler();
|
$jsonHandler = new JsonResponseHandler();
|
||||||
$jsonHandler->onlyForAjaxRequests(TRUE);
|
|
||||||
$whoops->pushHandler($jsonHandler);
|
$whoops->pushHandler($jsonHandler);
|
||||||
|
|
||||||
// Register as the error handler
|
// Register as the error handler
|
||||||
@ -86,7 +85,6 @@ unset($SRC_DIR);
|
|||||||
unset($CONF_DIR);
|
unset($CONF_DIR);
|
||||||
|
|
||||||
$container = $di($config_array);
|
$container = $di($config_array);
|
||||||
$container->set('error-handler', $defaultHandler);
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Dispatch to the current route
|
// Dispatch to the current route
|
||||||
|
@ -197,8 +197,6 @@ class Controller {
|
|||||||
*/
|
*/
|
||||||
protected function load_partial($view, $template, array $data = [])
|
protected function load_partial($view, $template, array $data = [])
|
||||||
{
|
{
|
||||||
$errorHandler = $this->container->get('error-handler');
|
|
||||||
$errorHandler->addDataTable('Template Data', $data);
|
|
||||||
$router = $this->container->get('dispatcher');
|
$router = $this->container->get('dispatcher');
|
||||||
|
|
||||||
if (isset($this->base_data))
|
if (isset($this->base_data))
|
||||||
|
@ -110,11 +110,13 @@ class Collection extends BaseController {
|
|||||||
*/
|
*/
|
||||||
public function form($id = NULL)
|
public function form($id = NULL)
|
||||||
{
|
{
|
||||||
|
$this->set_session_redirect();
|
||||||
|
|
||||||
$action = (is_null($id)) ? "Add" : "Edit";
|
$action = (is_null($id)) ? "Add" : "Edit";
|
||||||
|
|
||||||
$this->outputHTML('collection/' . strtolower($action), [
|
$this->outputHTML('collection/' . strtolower($action), [
|
||||||
'action' => $action,
|
'action' => $action,
|
||||||
'action_url' => $this->urlGenerator->full_url("collection/" . strtolower($action)),
|
'action_url' => $this->urlGenerator->full_url('collection/' . strtolower($action)),
|
||||||
'title' => $this->config->get('whose_list') . " Anime Collection · {$action}",
|
'title' => $this->config->get('whose_list') . " Anime Collection · {$action}",
|
||||||
'media_items' => $this->anime_collection_model->get_media_type_list(),
|
'media_items' => $this->anime_collection_model->get_media_type_list(),
|
||||||
'item' => ($action === "Edit") ? $this->anime_collection_model->get($id) : []
|
'item' => ($action === "Edit") ? $this->anime_collection_model->get($id) : []
|
||||||
@ -129,14 +131,17 @@ class Collection extends BaseController {
|
|||||||
public function edit()
|
public function edit()
|
||||||
{
|
{
|
||||||
$data = $this->request->post->get();
|
$data = $this->request->post->get();
|
||||||
if ( ! array_key_exists('hummingbird_id', $data))
|
if (array_key_exists('hummingbird_id', $data))
|
||||||
{
|
{
|
||||||
$this->redirect("collection/view", 303);
|
$this->anime_collection_model->update($data);
|
||||||
|
$this->set_flash_message('Successfully updated collection item.', 'success');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->set_flash_message('Failed to update collection item', 'error');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->anime_collection_model->update($data);
|
$this->session_redirect();
|
||||||
|
|
||||||
$this->redirect("collection/view", 303);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -147,14 +152,17 @@ class Collection extends BaseController {
|
|||||||
public function add()
|
public function add()
|
||||||
{
|
{
|
||||||
$data = $this->request->post->get();
|
$data = $this->request->post->get();
|
||||||
if ( ! array_key_exists('id', $data))
|
if (array_key_exists('id', $data))
|
||||||
{
|
{
|
||||||
$this->redirect("collection/view", 303);
|
$this->anime_collection_model->add($data);
|
||||||
|
$this->set_flash_message('Successfully added collection item', 'success');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->set_flash_message('Failed to add collection item.', 'error');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->anime_collection_model->add($data);
|
$this->session_redirect();
|
||||||
|
|
||||||
$this->redirect("collection/view", 303);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -62,14 +62,15 @@ class Dispatcher extends RoutingBase {
|
|||||||
*/
|
*/
|
||||||
public function get_route()
|
public function get_route()
|
||||||
{
|
{
|
||||||
$error_handler = $this->container->get('error-handler');
|
$logger = $this->container->getLogger('default');
|
||||||
|
|
||||||
$raw_route = $this->request->url->get(PHP_URL_PATH);
|
$raw_route = $this->request->url->get(PHP_URL_PATH);
|
||||||
$route_path = "/" . trim($raw_route, '/');
|
$route_path = "/" . trim($raw_route, '/');
|
||||||
|
|
||||||
$error_handler->addDataTable('Route Info', [
|
$logger->debug('Dispatcher - Routing data from get_route method');
|
||||||
|
$logger->debug(print_r([
|
||||||
'route_path' => $route_path
|
'route_path' => $route_path
|
||||||
]);
|
], TRUE));
|
||||||
|
|
||||||
return $this->router->match($route_path, $_SERVER);
|
return $this->router->match($route_path, $_SERVER);
|
||||||
}
|
}
|
||||||
@ -93,12 +94,14 @@ class Dispatcher extends RoutingBase {
|
|||||||
*/
|
*/
|
||||||
public function __invoke($route = NULL)
|
public function __invoke($route = NULL)
|
||||||
{
|
{
|
||||||
$error_handler = $this->container->get('error-handler');
|
$logger = $this->container->getLogger('default');
|
||||||
|
|
||||||
if (is_null($route))
|
if (is_null($route))
|
||||||
{
|
{
|
||||||
$route = $this->get_route();
|
$route = $this->get_route();
|
||||||
$error_handler->addDataTable('route_args', (array)$route);
|
|
||||||
|
$logger->debug('Dispatcher - Route invoke arguments');
|
||||||
|
$logger->debug(print_r($route, TRUE));
|
||||||
}
|
}
|
||||||
|
|
||||||
if($route)
|
if($route)
|
||||||
@ -233,12 +236,13 @@ class Dispatcher extends RoutingBase {
|
|||||||
*/
|
*/
|
||||||
protected function call($controller_name, $method, array $params)
|
protected function call($controller_name, $method, array $params)
|
||||||
{
|
{
|
||||||
$error_handler = $this->container->get('error-handler');
|
$logger = $this->container->getLogger('default');
|
||||||
|
|
||||||
$controller = new $controller_name($this->container);
|
$controller = new $controller_name($this->container);
|
||||||
|
|
||||||
// Run the appropriate controller method
|
// Run the appropriate controller method
|
||||||
$error_handler->addDataTable('controller_args', $params);
|
$logger->debug('Dispatcher - controller arguments');
|
||||||
|
$logger->debug(print_r($params, TRUE));
|
||||||
call_user_func_array([$controller, $method], $params);
|
call_user_func_array([$controller, $method], $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -250,9 +254,12 @@ class Dispatcher extends RoutingBase {
|
|||||||
*/
|
*/
|
||||||
protected function get_error_params()
|
protected function get_error_params()
|
||||||
{
|
{
|
||||||
|
$logger = $this->container->getLogger('default');
|
||||||
$failure = $this->router->getFailedRoute();
|
$failure = $this->router->getFailedRoute();
|
||||||
$error_handler = $this->container->get('error-handler');
|
|
||||||
$error_handler->addDataTable('failed_route', (array)$failure);
|
$logger->info('Dispatcher - failed route');
|
||||||
|
$logger->info(print_r($failure, TRUE));
|
||||||
|
|
||||||
$action_method = AnimeClient::ERROR_MESSAGE_METHOD;
|
$action_method = AnimeClient::ERROR_MESSAGE_METHOD;
|
||||||
|
|
||||||
$params = [];
|
$params = [];
|
||||||
|
@ -149,7 +149,7 @@ class Anime extends API {
|
|||||||
*/
|
*/
|
||||||
public function search($name)
|
public function search($name)
|
||||||
{
|
{
|
||||||
$errorHandler = $this->container->get('error-handler');
|
$logger = $this->container->getLogger('default');
|
||||||
|
|
||||||
$config = [
|
$config = [
|
||||||
'query' => [
|
'query' => [
|
||||||
@ -158,10 +158,12 @@ class Anime extends API {
|
|||||||
];
|
];
|
||||||
|
|
||||||
$response = $this->get('search/anime', $config);
|
$response = $this->get('search/anime', $config);
|
||||||
$errorHandler->addDataTable('anime_search_response', (array)$response);
|
|
||||||
|
|
||||||
if ($response->getStatusCode() != 200)
|
if ($response->getStatusCode() != 200)
|
||||||
{
|
{
|
||||||
|
$logger->warning("Non 200 response for search api call");
|
||||||
|
$logger->warning($response->getBody());
|
||||||
|
|
||||||
throw new RuntimeException($response->getEffectiveUrl());
|
throw new RuntimeException($response->getEffectiveUrl());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,6 +60,7 @@ class HttpView extends BaseView {
|
|||||||
/**
|
/**
|
||||||
* Send the appropriate response
|
* Send the appropriate response
|
||||||
*
|
*
|
||||||
|
* @codeCoverageIgnore
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
protected function output()
|
protected function output()
|
||||||
|
@ -1,11 +1,15 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use Aura\Web\WebFactory;
|
||||||
|
use Aura\Router\RouterFactory;
|
||||||
|
use Monolog\Logger;
|
||||||
|
use Monolog\Handler\TestHandler;
|
||||||
|
|
||||||
use Aviat\Ion\Di\Container;
|
use Aviat\Ion\Di\Container;
|
||||||
use Aviat\AnimeClient\Dispatcher;
|
use Aviat\AnimeClient\Dispatcher;
|
||||||
use Aviat\AnimeClient\Config;
|
use Aviat\AnimeClient\Config;
|
||||||
use Aviat\AnimeClient\UrlGenerator;
|
use Aviat\AnimeClient\UrlGenerator;
|
||||||
use Aura\Web\WebFactory;
|
|
||||||
use Aura\Router\RouterFactory;
|
|
||||||
|
|
||||||
class DispatcherTest extends AnimeClient_TestCase {
|
class DispatcherTest extends AnimeClient_TestCase {
|
||||||
|
|
||||||
@ -35,15 +39,19 @@ class DispatcherTest extends AnimeClient_TestCase {
|
|||||||
|
|
||||||
$old_config = $this->container->get('config');
|
$old_config = $this->container->get('config');
|
||||||
|
|
||||||
|
$logger = new Logger('test_logger');
|
||||||
|
$logger->pushHandler(new TestHandler(Logger::DEBUG));
|
||||||
|
|
||||||
// Add the appropriate objects to the container
|
// Add the appropriate objects to the container
|
||||||
$this->container = new Container([
|
$this->container = new Container([
|
||||||
'config' => $old_config,
|
'config' => $old_config,
|
||||||
'request' => $web_factory->newRequest(),
|
'request' => $web_factory->newRequest(),
|
||||||
'response' => $web_factory->newResponse(),
|
'response' => $web_factory->newResponse(),
|
||||||
'aura-router' => $router_factory->newInstance(),
|
'aura-router' => $router_factory->newInstance()
|
||||||
'error-handler' => new MockErrorHandler()
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$this->container->setLogger($logger, 'default');
|
||||||
|
|
||||||
if ( ! empty($config))
|
if ( ! empty($config))
|
||||||
{
|
{
|
||||||
$config = new Config($config);
|
$config = new Config($config);
|
||||||
|
@ -57,43 +57,35 @@ class MangaModelTest extends AnimeClient_TestCase {
|
|||||||
|
|
||||||
public function testGetList()
|
public function testGetList()
|
||||||
{
|
{
|
||||||
$this->markTestSkipped();
|
|
||||||
if (($var = getenv('CI')))
|
if (($var = getenv('CI')))
|
||||||
{
|
{
|
||||||
$this->markTestSkipped();
|
$this->markTestSkipped();
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = $this->model->get_all_lists();
|
$data = file_get_contents($this->mockDir . '/manga.json');
|
||||||
$this->assertEquals($data['Reading'], $this->model->get_list('Reading'));
|
$client = $this->getMockClient(200, [
|
||||||
|
'Content-type' => 'application/json'
|
||||||
|
], $data);
|
||||||
|
$this->model->__set('client', $client);
|
||||||
|
|
||||||
|
$expected = Json::decodeFile($this->mockDir . '/get-all-lists.json');
|
||||||
|
$this->assertEquals($expected['Reading'], $this->model->get_list('Reading'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetAllLists()
|
public function testGetAllLists()
|
||||||
{
|
{
|
||||||
$this->markTestSkipped();
|
|
||||||
if (($var = getenv('CI')))
|
if (($var = getenv('CI')))
|
||||||
{
|
{
|
||||||
$this->markTestSkipped();
|
$this->markTestSkipped();
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = Json::decodeFile($this->mockDir . '/manga-mapped.json');
|
$data = file_get_contents($this->mockDir . '/manga.json');
|
||||||
|
$client = $this->getMockClient(200, [
|
||||||
|
'Content-type' => 'application/json'
|
||||||
|
], $data);
|
||||||
|
$this->model->__set('client', $client);
|
||||||
|
|
||||||
foreach($data as &$val)
|
$expected = Json::decodeFile($this->mockDir . '/get-all-lists.json');
|
||||||
{
|
$this->assertEquals($expected, $this->model->get_all_lists());
|
||||||
$this->sort_by_name($val);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->assertEquals($data, $this->model->get_all_lists());
|
|
||||||
}
|
|
||||||
|
|
||||||
private function sort_by_name(&$array)
|
|
||||||
{
|
|
||||||
$sort = array();
|
|
||||||
|
|
||||||
foreach ($array as $key => $item)
|
|
||||||
{
|
|
||||||
$sort[$key] = $item['manga']['title'];
|
|
||||||
}
|
|
||||||
|
|
||||||
array_multisort($sort, SORT_ASC, $array);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -75,7 +75,6 @@ class AnimeClient_TestCase extends PHPUnit_Framework_TestCase {
|
|||||||
// Set up DI container
|
// Set up DI container
|
||||||
$di = require _dir($APP_DIR, 'bootstrap.php');
|
$di = require _dir($APP_DIR, 'bootstrap.php');
|
||||||
$container = $di($config_array);
|
$container = $di($config_array);
|
||||||
$container->set('error-handler', new MockErrorHandler());
|
|
||||||
$container->set('session-handler', self::$session_handler);
|
$container->set('session-handler', self::$session_handler);
|
||||||
|
|
||||||
$this->container = $container;
|
$this->container = $container;
|
||||||
|
@ -51,4 +51,10 @@ class HttpViewTest extends AnimeClient_TestCase {
|
|||||||
$this->assertEquals($content->getCharset(), 'utf-8');
|
$this->assertEquals($content->getCharset(), 'utf-8');
|
||||||
$this->assertEquals($content->get(), $this->friend->getOutput());
|
$this->assertEquals($content->get(), $this->friend->getOutput());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testSetStatusCode()
|
||||||
|
{
|
||||||
|
$this->view->setStatusCode(404);
|
||||||
|
$this->assertEquals(404, $this->friend->response->status->getCode());
|
||||||
|
}
|
||||||
}
|
}
|
1
tests/test_data/manga_list/get-all-lists.json
Normal file
1
tests/test_data/manga_list/get-all-lists.json
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user