diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1e7f0a4 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,9 @@ +.github export-ignore +.gitattributes export-ignore +.gitignore export-ignore +.travis.yml export-ignore +build export-ignore +build.sh export-ignore +composer.lock export-ignore +Dockerfile export-ignore +tests export-ignore diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..5229d9b --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,10 @@ +## Observed Behavior +Provide a clear and concise description of observed behavior. Provide any logs or screenshots that could be helpful. + +## Expected Behavior +Provide a clear and concise description of expected or desired behavior. + +## Steps to Reproduce +* Step 1 +* Step 2 +* Step n diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..370228e --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,14 @@ +## Change Profile + +| Question | Answer +| ------------- | --- +| New feature | yes/no +| Bug fix | yes/no +| BC breaks | yes/no +| Passing tests | yes/no + +## Description +Provide a clear and concise description of change. + +## Reason +Provide a clear and concise reason for the change. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d85f061 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +# Composer files +composer.phar +vendor/ + +# Local configs +config/autoload/*.local.php + +# Build directories +build/* \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index caa853f..092fa2a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,20 +1,19 @@ language: php +env: + - ZF_VERSION=^2.4 + - ZF_VERSION=2.4.* + - ZF_VERSION=2.5.* + php: - - 5.3 + - 5.6 + - 7.0 + - 7.1 + +before_install: + - composer require --update-with-dependencies zendframework/zend-loader:${ZF_VERSION} zendframework/zend-servicemanager:${ZF_VERSION} zendframework/zend-modulemanager:${ZF_VERSION} zendframework/zend-mvc:${ZF_VERSION} zendframework/zend-view:${ZF_VERSION} zendframework/zend-serializer:${ZF_VERSION} zendframework/zend-log:${ZF_VERSION} zendframework/zend-i18n:${ZF_VERSION} zendframework/zend-http:${ZF_VERSION} zendframework/zend-console:${ZF_VERSION} -before_script: - - cd .. - - git clone git://github.com/zendframework/ZendSkeletonApplication.git - - cd ZendSkeletonApplication - - rm .gitmodules - - git rm --cached vendor/ZF2 - - cp ../DOMPDFModule/.travis/composer.json ./ - - curl -s http://getcomposer.org/installer | php - - php composer.phar install - - rm -rf vendor/dino/dompdf-module - - cp -r ../DOMPDFModule vendor/dino/dompdf-module +script: ./build.sh -script: - - cd vendor/dino/dompdf-module/tests - - phpunit +after_success: + - vendor/bin/test-reporter \ No newline at end of file diff --git a/.travis/application.config.php b/.travis/application.config.php deleted file mode 100644 index 4571013..0000000 --- a/.travis/application.config.php +++ /dev/null @@ -1,23 +0,0 @@ - array( - 'Application', - 'DOMPDFModule', - ), - 'module_listener_options' => array( - 'config_glob_paths' => array( - 'config/autoload/{,*.}{global,local}.php', - ), - 'config_cache_enabled' => false, - 'cache_dir' => 'data/cache', - 'module_paths' => array( - './module', - './vendor', - ), - ), - 'service_manager' => array( - 'use_defaults' => true, - 'factories' => array( - ), - ), -); diff --git a/.travis/composer.json b/.travis/composer.json deleted file mode 100644 index 77a7285..0000000 --- a/.travis/composer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "minimum-stability": "dev", - "require": { - "php": ">=5.3.3", - "zendframework/zendframework": "dev-master", - "dino/dompdf-module": "dev-master" - } -} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..024aff7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +ARG PHP_VERSION=7.1 +FROM php:${PHP_VERSION} + +ENV COMPOSER_HOME=/var/lib/composer +WORKDIR /opt/app + +RUN apt-get update -y && \ + apt-get install -y git zlib1g-dev libfreetype6-dev libjpeg62-turbo-dev && \ + pecl install xdebug-2.5.0 && \ + docker-php-ext-install -j$(nproc) zip gd && \ + docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \ + docker-php-ext-enable xdebug && \ + php -r "copy('https://getcomposer.org/installer', '/tmp/composer-setup.php');" && \ + php -r "if (hash_file('SHA384', '/tmp/composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); exit(1); } echo PHP_EOL;" && \ + php /tmp/composer-setup.php --no-ansi --install-dir=/usr/local/bin --filename=composer && \ + rm -rf /tmp/composer-setup.php + +ENTRYPOINT ["./build.sh" ] diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..b276459 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,20 @@ +Copyright (c) 2012 University of Maine, 2016 Raymond J. Kolbe + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/Module.php b/Module.php index c11177c..56290ac 100644 --- a/Module.php +++ b/Module.php @@ -1,3 +1,20 @@ + * @copyright Copyright (c) 2012 University of Maine, 2016 Raymond J. Kolbe + * @license http://www.opensource.org/licenses/mit-license.php MIT License + */ require_once __DIR__ . '/src/DOMPDFModule/Module.php'; \ No newline at end of file diff --git a/README.md b/README.md index 1c599cb..46ca935 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,9 @@ DOMPDFModule ============ -Master: [![Build Status](https://secure.travis-ci.org/raykolbe/DOMPDFModule.png?branch=master)](http://travis-ci.org/raykolbe/DOMPDFModule) +[![Build Status](https://secure.travis-ci.org/raykolbe/DOMPDFModule.png?branch=master)](http://travis-ci.org/raykolbe/DOMPDFModule) [![Code Climate](https://codeclimate.com/github/raykolbe/DOMPDFModule/badges/gpa.svg)](https://codeclimate.com/github/raykolbe/DOMPDFModule) [![Test Coverage](https://codeclimate.com/github/raykolbe/DOMPDFModule/badges/coverage.svg)](https://codeclimate.com/github/raykolbe/DOMPDFModule/coverage) [![Total Downloads](https://poser.pugx.org/dino/dompdf-module/downloads)](https://packagist.org/packages/dino/dompdf-module) [![License](https://poser.pugx.org/dino/dompdf-module/license)](https://packagist.org/packages/dino/dompdf-module) -The DOMPDF module integrates the DOMPDF library with Zend Framework 2 with minimal -effort on the consumer's end. +The DOMPDF module integrates the DOMPDF library with Zend Framework 2 with minimal effort on the consumer's end. ## Requirements - [Zend Framework 2](http://www.github.com/zendframework/zf2) @@ -51,9 +50,10 @@ class ReportController extends AbstractActionController public function monthlyReportPdfAction() { $pdf = new PdfModel(); - $pdf->setOption('filename', 'monthly-report'); // Triggers PDF download, automatically appends ".pdf" - $pdf->setOption('paperSize', 'a4'); // Defaults to "8x11" - $pdf->setOption('paperOrientation', 'landscape'); // Defaults to "portrait" + $pdf->setOption('fileName', 'monthly-report'); // "pdf" extension is automatically appended + $pdf->setOption('display', PdfModel::DISPLAY_ATTACHMENT); // Triggers browser to prompt "save as" dialog + $pdf->setOption('paperSize', 'a4'); // Defaults to "8x11" + $pdf->setOption('paperOrientation', 'landscape'); // Defaults to "portrait" // To set view variables $pdf->setVariables(array( @@ -64,6 +64,34 @@ class ReportController extends AbstractActionController } } ``` +## Development +So you want to contribute? Fantastic! Don't worry, it's easy. Local builds, tests, and code quality checks can be executed using [Docker](https://www.docker.com/). + +### Quick Start +1. Install [Docker CE](https://www.docker.com/community-edition). +2. Run the following from your terminal: + +``` +docker build -t dino/dompdf-module . +docker run -v composer-cache:/var/lib/composer -v ${PWD}:/opt/app dino/dompdf-module +``` + +Super easy, right? Here's a quick walk through as to what's going on. + +* `docker build -t dino/dompdf-module .` builds a docker image that will be used for each run (i.e. each time `docker run` is executed) and tags it with the name `dino/dompdf-module`. +* `docker run -v composer-cache:/var/lib/composer -v ${PWD}:/opt/app dino/dompdf-module` runs the default build in a new Docker container derived from the image tagged `dino/dompdf-module`. The root of the project and PHP Composer cache volume are mounted so that artifacts generated during the build process are available to you on your local machine. + +**Note:** You only need to run the first command once in order to build the image. The second command is what executes the build (build, tests, code quality checks, etc.). + +### Other Supported PHP Versions +By default, builds executed using Docker are done so using the [latest stable version of PHP](http://php.net/supported-versions.php). If you're adventurous you can execute builds against other [supported versions](http://php.net/supported-versions.php) of PHP. + +**PHP 5.6** + +``` +docker build --build-arg PHP_VERSION=5.6 --tag dino/dompdf-module-php56 . +docker run -v composer-cache:/var/lib/composer -v ${PWD}:/opt/app dino/dompdf-module-php56 +``` ## To-do - Add command line support. diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..33eb407 --- /dev/null +++ b/build.sh @@ -0,0 +1,131 @@ +#!/usr/bin/env bash +# ------------------------------------------------------------------ +# [Raymond J Kolbe] Build Tools +# Simple build tools pipeline inspired by ABC +# http://abc.tools.qafoo.com/ and Ant Maven +# https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference +# ------------------------------------------------------------------ + +set -euo pipefail + +readonly PROJECT_ROOT=${PWD} +readonly BUILD_LOGS=${PROJECT_ROOT}/build/logs +readonly BUILD_DIST=${PROJECT_ROOT}/build/dist +readonly VENDOR_BIN=${PROJECT_ROOT}/vendor/bin + +echo "Starting new build..." + +# ------------------------------------------------------------------ +# Clean +# +# Remove all files generated by the previous build +# ------------------------------------------------------------------ +echo "Cleaning project space..."; + +rm -rf ${PROJECT_ROOT}/vendor +rm -rf ${BUILD_LOGS} +rm -rf ${BUILD_DIST} + +# ------------------------------------------------------------------ +# Validate +# +# Validate the project is correct and all necessary information is available. +# ------------------------------------------------------------------ +echo "Validating project space..."; + +# Ensure PHP interpreter exists. +which php &> /dev/null || { + echo 'PHP interpreter not found. Aborting build.' + exit 1 +} + +# Ensure supported PHP version (5.6.0+) +php -r 'exit((int) !(PHP_VERSION_ID >= 50600));' || { + echo 'Unsupported version of PHP. Aborting build.' + exit 1 +} + +# Ensure PHP Composer exists. +which composer &> /dev/null || { + echo 'PHP Composer not found. Aborting build.' + exit 1 +} + +composer validate --strict + +# ------------------------------------------------------------------ +# Initialize +# +# Initialize build state, e.g. set properties or create directories. +# ------------------------------------------------------------------ +echo "Initializing project space..."; + +mkdir ${BUILD_LOGS} +mkdir ${BUILD_DIST} + +# ------------------------------------------------------------------ +# Compile +# +# Compiles the project source code. For PHP this means, that a lint check will be run on the source files. +# ------------------------------------------------------------------ +echo "Compiling project..."; + +composer --prefer-dist install + +php -l ${PROJECT_ROOT}/src +php -l ${PROJECT_ROOT}/config +php -l ${PROJECT_ROOT}/tests +php -l ${PROJECT_ROOT}/Module.php + +# ------------------------------------------------------------------ +# Test +# +# Run tests using a suitable unit testing framework. These tests should not require the code be packaged or deployed. +# ------------------------------------------------------------------ +echo "Executing tests..."; + +${VENDOR_BIN}/phpunit ${PROJECT_ROOT}/tests -v -c ${PROJECT_ROOT}/tests/phpunit.xml + +# ------------------------------------------------------------------ +# Package +# +# Package the code in its distributable format (i.e. zip, phar, etc.). +# ------------------------------------------------------------------ +echo "Packaging artifacts..."; + +# PHP Composer relies on git archives so we mimic what a dist looks like. +git archive --format=tar.gz -o ${BUILD_DIST}/SNAPSHOT.tar.gz HEAD + +# ------------------------------------------------------------------ +# Integration test +# +# Process and deploy the package if necessary into an environment where integration tests can be run. +# ------------------------------------------------------------------ +echo "Executing integration tests..."; +# TODO Placeholder for integration test suite. + +# ------------------------------------------------------------------ +# Verify +# +# Static analysis and code quality checks. +# ------------------------------------------------------------------ +echo "Verifying source..."; + +${VENDOR_BIN}/phpcs --standard=PSR2 src +${VENDOR_BIN}/phpcs --standard=PSR2 config +${VENDOR_BIN}/phpcs --standard=PSR2 tests +${VENDOR_BIN}/phpmd config,src,tests text cleancode,codesize,controversial,design,naming,unusedcode + +# ------------------------------------------------------------------ +# Install +# ------------------------------------------------------------------ +echo "Installing package..."; +# TODO Placeholder for local installation. + +# ------------------------------------------------------------------ +# Deploy +# ------------------------------------------------------------------ +echo "Deploying package..."; +# TODO Placeholder for automatic publishing of artifact. + +echo "Build complete..."; diff --git a/build/.gitkeep b/build/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/composer.json b/composer.json index 861727b..b124712 100644 --- a/composer.json +++ b/composer.json @@ -7,17 +7,39 @@ "license": "MIT", "authors": [ { - "name": "Raymond Kolbe", - "email": "raymond.kolbe@maine.edu" + "name": "Raymond J. Kolbe", + "email": "rkolbe@gmail.com" } ], "require": { - "php": ">=5.3.0", - "dompdf/dompdf": "0.6.*" + "php": ">=5.6", + "zendframework/zend-loader": "^2.4", + "zendframework/zend-servicemanager": "^2.4", + "zendframework/zend-modulemanager": "^2.4", + "zendframework/zend-mvc": "^2.4", + "zendframework/zend-view": "^2.4", + "zendframework/zend-serializer": "^2.4", + "zendframework/zend-log": "^2.4", + "zendframework/zend-i18n": "^2.4", + "zendframework/zend-http": "^2.4", + "zendframework/zend-console": "^2.4", + "dompdf/dompdf": "^0.8.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.27", + "codeclimate/php-test-reporter": "^0.3.2", + "fabpot/php-cs-fixer": "^1.12", + "squizlabs/php_codesniffer": "^2.7", + "phpmd/phpmd": "^2.4" }, "autoload": { "psr-0": { "DOMPDFModule": "src/" } + }, + "autoload-dev": { + "psr-0": { + "DOMPDFModuleTest": "tests/" + } } } diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..9fd3d96 --- /dev/null +++ b/composer.lock @@ -0,0 +1,3442 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "f2fea96a4da6988560bbbb47b7a3004c", + "packages": [ + { + "name": "container-interop/container-interop", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/container-interop/container-interop.git", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "shasum": "" + }, + "require": { + "psr/container": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Interop\\Container\\": "src/Interop/Container/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", + "homepage": "https://github.com/container-interop/container-interop", + "time": "2017-02-14T19:40:03+00:00" + }, + { + "name": "dompdf/dompdf", + "version": "v0.8.1", + "source": { + "type": "git", + "url": "https://github.com/dompdf/dompdf.git", + "reference": "9ea852c4bdc74fac5def165e6cd52353f7ca3b3f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/9ea852c4bdc74fac5def165e6cd52353f7ca3b3f", + "reference": "9ea852c4bdc74fac5def165e6cd52353f7ca3b3f", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-gd": "*", + "ext-mbstring": "*", + "phenx/php-font-lib": "0.5.*", + "phenx/php-svg-lib": "0.3.*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "4.8.*", + "squizlabs/php_codesniffer": "2.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "0.7-dev" + } + }, + "autoload": { + "psr-4": { + "Dompdf\\": "src/" + }, + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + }, + { + "name": "Brian Sweeney", + "email": "eclecticgeek@gmail.com" + }, + { + "name": "Gabriel Bull", + "email": "me@gabrielbull.com" + } + ], + "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", + "homepage": "https://github.com/dompdf/dompdf", + "time": "2017-09-14T01:36:24+00:00" + }, + { + "name": "phenx/php-font-lib", + "version": "0.5.1", + "source": { + "type": "git", + "url": "https://github.com/PhenX/php-font-lib.git", + "reference": "760148820110a1ae0936e5cc35851e25a938bc97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/760148820110a1ae0936e5cc35851e25a938bc97", + "reference": "760148820110a1ae0936e5cc35851e25a938bc97", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "^4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "FontLib\\": "src/FontLib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse, export and make subsets of different types of font files.", + "homepage": "https://github.com/PhenX/php-font-lib", + "time": "2017-09-13T16:14:37+00:00" + }, + { + "name": "phenx/php-svg-lib", + "version": "v0.3", + "source": { + "type": "git", + "url": "https://github.com/PhenX/php-svg-lib.git", + "reference": "a85f7fe9fe08d093a4a8583cdd306b553ff918aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/a85f7fe9fe08d093a4a8583cdd306b553ff918aa", + "reference": "a85f7fe9fe08d093a4a8583cdd306b553ff918aa", + "shasum": "" + }, + "require": { + "sabberworm/php-css-parser": "8.1.*" + }, + "require-dev": { + "phpunit/phpunit": "~5.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Svg\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Fabien Ménager", + "email": "fabien.menager@gmail.com" + } + ], + "description": "A library to read, parse and export to PDF SVG files.", + "homepage": "https://github.com/PhenX/php-svg-lib", + "time": "2017-05-24T10:07:27+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "sabberworm/php-css-parser", + "version": "8.1.0", + "source": { + "type": "git", + "url": "https://github.com/sabberworm/PHP-CSS-Parser.git", + "reference": "850cbbcbe7fbb155387a151ea562897a67e242ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/850cbbcbe7fbb155387a151ea562897a67e242ef", + "reference": "850cbbcbe7fbb155387a151ea562897a67e242ef", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "type": "library", + "autoload": { + "psr-0": { + "Sabberworm\\CSS": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Schweikert" + } + ], + "description": "Parser for CSS Files written in PHP", + "homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "keywords": [ + "css", + "parser", + "stylesheet" + ], + "time": "2016-07-19T19:14:21+00:00" + }, + { + "name": "zendframework/zend-console", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-console.git", + "reference": "ad425c45444a76d6559df45df14291940c6883f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-console/zipball/ad425c45444a76d6559df45df14291940c6883f1", + "reference": "ad425c45444a76d6559df45df14291940c6883f1", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-stdlib": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-filter": "~2.5", + "zendframework/zend-json": "~2.5", + "zendframework/zend-validator": "~2.5" + }, + "suggest": { + "zendframework/zend-filter": "To support DefaultRouteMatcher usage", + "zendframework/zend-validator": "To support DefaultRouteMatcher usage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Console\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-console", + "keywords": [ + "console", + "zf2" + ], + "time": "2015-06-03T15:32:00+00:00" + }, + { + "name": "zendframework/zend-escaper", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-escaper.git", + "reference": "a4b227d8a477f4e7e9073f8e0a7ae7dbd3104a73" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-escaper/zipball/a4b227d8a477f4e7e9073f8e0a7ae7dbd3104a73", + "reference": "a4b227d8a477f4e7e9073f8e0a7ae7dbd3104a73", + "shasum": "" + }, + "require": { + "php": ">=5.3.23" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Escaper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-escaper", + "keywords": [ + "escaper", + "zf2" + ], + "time": "2015-06-03T14:05:37+00:00" + }, + { + "name": "zendframework/zend-eventmanager", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-eventmanager.git", + "reference": "d94a16039144936f107f906896349900fd634443" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/d94a16039144936f107f906896349900fd634443", + "reference": "d94a16039144936f107f906896349900fd634443", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-stdlib": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\EventManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-eventmanager", + "keywords": [ + "eventmanager", + "zf2" + ], + "time": "2015-06-03T15:32:01+00:00" + }, + { + "name": "zendframework/zend-filter", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-filter.git", + "reference": "93e6990a198e6cdd811064083acac4693f4b29ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-filter/zipball/93e6990a198e6cdd811064083acac4693f4b29ae", + "reference": "93e6990a198e6cdd811064083acac4693f4b29ae", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-stdlib": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-config": "~2.5", + "zendframework/zend-crypt": "~2.5", + "zendframework/zend-i18n": "~2.5", + "zendframework/zend-loader": "~2.5", + "zendframework/zend-servicemanager": "~2.5", + "zendframework/zend-uri": "~2.5" + }, + "suggest": { + "zendframework/zend-crypt": "Zend\\Crypt component", + "zendframework/zend-i18n": "Zend\\I18n component", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component", + "zendframework/zend-uri": "Zend\\Uri component for UriNormalize filter" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Filter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a set of commonly needed data filters", + "homepage": "https://github.com/zendframework/zend-filter", + "keywords": [ + "filter", + "zf2" + ], + "time": "2015-06-03T15:32:01+00:00" + }, + { + "name": "zendframework/zend-form", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-form.git", + "reference": "a3b9151013e419e4401f66726746abdba174ed21" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-form/zipball/a3b9151013e419e4401f66726746abdba174ed21", + "reference": "a3b9151013e419e4401f66726746abdba174ed21", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-inputfilter": "~2.5", + "zendframework/zend-stdlib": "~2.5" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-cache": "~2.5", + "zendframework/zend-captcha": "~2.5", + "zendframework/zend-code": "~2.5", + "zendframework/zend-di": "~2.5", + "zendframework/zend-eventmanager": "~2.5", + "zendframework/zend-filter": "~2.5", + "zendframework/zend-i18n": "~2.5", + "zendframework/zend-mvc": "~2.5", + "zendframework/zend-servicemanager": "~2.5", + "zendframework/zend-session": "~2.5", + "zendframework/zend-text": "~2.5", + "zendframework/zend-validator": "~2.5", + "zendframework/zend-view": "~2.5", + "zendframework/zendservice-recaptcha": "*" + }, + "suggest": { + "zendframework/zend-captcha": "Zend\\Captcha component", + "zendframework/zend-code": "Zend\\Code component", + "zendframework/zend-eventmanager": "Zend\\EventManager component", + "zendframework/zend-filter": "Zend\\Filter component", + "zendframework/zend-i18n": "Zend\\I18n component", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component", + "zendframework/zend-validator": "Zend\\Validator component", + "zendframework/zend-view": "Zend\\View component", + "zendframework/zendservice-recaptcha": "ZendService\\ReCaptcha component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Form\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-form", + "keywords": [ + "form", + "zf2" + ], + "time": "2015-06-03T15:32:01+00:00" + }, + { + "name": "zendframework/zend-http", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-http.git", + "reference": "09f4d279f46d86be63171ff62ee0f79eca878678" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-http/zipball/09f4d279f46d86be63171ff62ee0f79eca878678", + "reference": "09f4d279f46d86be63171ff62ee0f79eca878678", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-loader": "^2.5", + "zendframework/zend-stdlib": "^2.5 || ^3.0", + "zendframework/zend-uri": "^2.5", + "zendframework/zend-validator": "^2.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.0", + "zendframework/zend-coding-standard": "~1.0.0", + "zendframework/zend-config": "^2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Http\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides an easy interface for performing Hyper-Text Transfer Protocol (HTTP) requests", + "homepage": "https://github.com/zendframework/zend-http", + "keywords": [ + "http", + "zf2" + ], + "time": "2017-01-31T14:41:02+00:00" + }, + { + "name": "zendframework/zend-i18n", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-i18n.git", + "reference": "509271eb7947e4aabebfc376104179cffea42696" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-i18n/zipball/509271eb7947e4aabebfc376104179cffea42696", + "reference": "509271eb7947e4aabebfc376104179cffea42696", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-stdlib": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-cache": "~2.5", + "zendframework/zend-config": "~2.5", + "zendframework/zend-eventmanager": "~2.5", + "zendframework/zend-filter": "~2.5", + "zendframework/zend-servicemanager": "~2.5", + "zendframework/zend-validator": "~2.5", + "zendframework/zend-view": "~2.5" + }, + "suggest": { + "ext-intl": "Required for most features of Zend\\I18n; included in default builds of PHP", + "zendframework/zend-cache": "Zend\\Cache component", + "zendframework/zend-config": "Zend\\Config component", + "zendframework/zend-eventmanager": "You should install this package to use the events in the translator", + "zendframework/zend-filter": "You should install this package to use the provided filters", + "zendframework/zend-resources": "Translation resources", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component", + "zendframework/zend-validator": "You should install this package to use the provided validators", + "zendframework/zend-view": "You should install this package to use the provided view helpers" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\I18n\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-i18n", + "keywords": [ + "i18n", + "zf2" + ], + "time": "2015-06-03T15:32:01+00:00" + }, + { + "name": "zendframework/zend-inputfilter", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-inputfilter.git", + "reference": "b96ca3c3fb7894c36f440516f3be56d35772de92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-inputfilter/zipball/b96ca3c3fb7894c36f440516f3be56d35772de92", + "reference": "b96ca3c3fb7894c36f440516f3be56d35772de92", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-filter": "~2.5", + "zendframework/zend-stdlib": "~2.5", + "zendframework/zend-validator": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-i18n": "~2.5", + "zendframework/zend-servicemanager": "~2.5" + }, + "suggest": { + "zendframework/zend-servicemanager": "To support plugin manager support" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\InputFilter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-inputfilter", + "keywords": [ + "inputfilter", + "zf2" + ], + "time": "2015-06-03T15:32:01+00:00" + }, + { + "name": "zendframework/zend-json", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-json.git", + "reference": "c74eaf17d2dd37dc1e964be8dfde05706a821ebc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-json/zipball/c74eaf17d2dd37dc1e964be8dfde05706a821ebc", + "reference": "c74eaf17d2dd37dc1e964be8dfde05706a821ebc", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-stdlib": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-http": "~2.5", + "zendframework/zend-server": "~2.5", + "zendframework/zendxml": "~1.0" + }, + "suggest": { + "zendframework/zend-http": "Zend\\Http component", + "zendframework/zend-server": "Zend\\Server component", + "zendframework/zendxml": "To support Zend\\Json\\Json::fromXml() usage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Json\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP", + "homepage": "https://github.com/zendframework/zend-json", + "keywords": [ + "json", + "zf2" + ], + "time": "2015-06-03T15:32:01+00:00" + }, + { + "name": "zendframework/zend-loader", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-loader.git", + "reference": "c5fd2f071bde071f4363def7dea8dec7393e135c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-loader/zipball/c5fd2f071bde071f4363def7dea8dec7393e135c", + "reference": "c5fd2f071bde071f4363def7dea8dec7393e135c", + "shasum": "" + }, + "require": { + "php": ">=5.3.23" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Loader\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-loader", + "keywords": [ + "loader", + "zf2" + ], + "time": "2015-06-03T14:05:47+00:00" + }, + { + "name": "zendframework/zend-log", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-log.git", + "reference": "75bcfb813571705032571e2b471519b924b86fde" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-log/zipball/75bcfb813571705032571e2b471519b924b86fde", + "reference": "75bcfb813571705032571e2b471519b924b86fde", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "psr/log": "~1.0", + "zendframework/zend-servicemanager": "~2.5", + "zendframework/zend-stdlib": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-console": "~2.5", + "zendframework/zend-db": "~2.5", + "zendframework/zend-escaper": "~2.5", + "zendframework/zend-filter": "~2.5", + "zendframework/zend-mail": "~2.5", + "zendframework/zend-mvc": "~2.5", + "zendframework/zend-validator": "~2.5" + }, + "suggest": { + "ext-mongo": "mongodb extetension to use MongoDB writer", + "zendframework/zend-console": "Zend\\Console component to use the RequestID log processor", + "zendframework/zend-db": "Zend\\Db component to use the database log writer", + "zendframework/zend-escaper": "Zend\\Escaper component, for use in the XML log formatter", + "zendframework/zend-mail": "Zend\\Mail component to use the email log writer", + "zendframework/zend-validator": "Zend\\Validator component to block invalid log messages" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Log\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "component for general purpose logging", + "homepage": "https://github.com/zendframework/zend-log", + "keywords": [ + "log", + "logging", + "zf2" + ], + "time": "2015-07-20T17:41:08+00:00" + }, + { + "name": "zendframework/zend-math", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-math.git", + "reference": "9f02a1ac4d3374d3332c80f9215deec9c71558fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-math/zipball/9f02a1ac4d3374d3332c80f9215deec9c71558fc", + "reference": "9f02a1ac4d3374d3332c80f9215deec9c71558fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.23" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "ircmaxell/random-lib": "~1.1", + "phpunit/phpunit": "~4.0", + "zendframework/zend-servicemanager": "~2.5" + }, + "suggest": { + "ext-bcmath": "If using the bcmath functionality", + "ext-gmp": "If using the gmp functionality", + "ircmaxell/random-lib": "Fallback random byte generator for Zend\\Math\\Rand if OpenSSL/Mcrypt extensions are unavailable", + "zendframework/zend-servicemanager": ">= current version, if using the BigInteger::factory functionality" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-math", + "keywords": [ + "math", + "zf2" + ], + "time": "2015-06-03T15:32:02+00:00" + }, + { + "name": "zendframework/zend-modulemanager", + "version": "2.5.3", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-modulemanager.git", + "reference": "afaf873a3b420ba017933c15eb2a93dff433a7d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-modulemanager/zipball/afaf873a3b420ba017933c15eb2a93dff433a7d1", + "reference": "afaf873a3b420ba017933c15eb2a93dff433a7d1", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "zendframework/zend-eventmanager": "~2.5", + "zendframework/zend-stdlib": ">=2.5.0,<2.7.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-config": "~2.5", + "zendframework/zend-console": "~2.5", + "zendframework/zend-di": "~2.5", + "zendframework/zend-loader": "~2.5", + "zendframework/zend-mvc": "~2.5", + "zendframework/zend-servicemanager": "~2.5" + }, + "suggest": { + "zendframework/zend-config": "Zend\\Config component", + "zendframework/zend-console": "Zend\\Console component", + "zendframework/zend-loader": "Zend\\Loader component", + "zendframework/zend-mvc": "Zend\\Mvc component", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\ModuleManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-modulemanager", + "keywords": [ + "modulemanager", + "zf2" + ], + "time": "2015-09-22T17:21:13+00:00" + }, + { + "name": "zendframework/zend-mvc", + "version": "2.5.3", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-mvc.git", + "reference": "bae0da8318323da7dd71d64aa8054f91f782951b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-mvc/zipball/bae0da8318323da7dd71d64aa8054f91f782951b", + "reference": "bae0da8318323da7dd71d64aa8054f91f782951b", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "zendframework/zend-eventmanager": "~2.5", + "zendframework/zend-form": "~2.5", + "zendframework/zend-servicemanager": "~2.5", + "zendframework/zend-stdlib": ">=2.5.0,<2.7.0" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-authentication": "~2.5", + "zendframework/zend-cache": "~2.5", + "zendframework/zend-console": "~2.5", + "zendframework/zend-di": "~2.5", + "zendframework/zend-filter": "~2.5", + "zendframework/zend-http": "~2.5", + "zendframework/zend-i18n": "~2.5", + "zendframework/zend-inputfilter": "~2.5", + "zendframework/zend-json": "~2.5", + "zendframework/zend-log": "~2.5", + "zendframework/zend-modulemanager": "~2.5", + "zendframework/zend-serializer": "~2.5", + "zendframework/zend-session": "~2.5", + "zendframework/zend-text": "~2.5", + "zendframework/zend-uri": "~2.5", + "zendframework/zend-validator": "~2.5", + "zendframework/zend-version": "~2.5", + "zendframework/zend-view": "~2.5" + }, + "suggest": { + "zendframework/zend-authentication": "Zend\\Authentication component for Identity plugin", + "zendframework/zend-config": "Zend\\Config component", + "zendframework/zend-console": "Zend\\Console component", + "zendframework/zend-di": "Zend\\Di component", + "zendframework/zend-filter": "Zend\\Filter component", + "zendframework/zend-http": "Zend\\Http component", + "zendframework/zend-i18n": "Zend\\I18n component for translatable segments", + "zendframework/zend-inputfilter": "Zend\\Inputfilter component", + "zendframework/zend-json": "Zend\\Json component", + "zendframework/zend-log": "Zend\\Log component", + "zendframework/zend-modulemanager": "Zend\\ModuleManager component", + "zendframework/zend-serializer": "Zend\\Serializer component", + "zendframework/zend-session": "Zend\\Session component for FlashMessenger, PRG, and FPRG plugins", + "zendframework/zend-text": "Zend\\Text component", + "zendframework/zend-uri": "Zend\\Uri component", + "zendframework/zend-validator": "Zend\\Validator component", + "zendframework/zend-version": "Zend\\Version component", + "zendframework/zend-view": "Zend\\View component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Mvc\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-mvc", + "keywords": [ + "mvc", + "zf2" + ], + "time": "2015-09-22T21:12:14+00:00" + }, + { + "name": "zendframework/zend-serializer", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-serializer.git", + "reference": "b7208eb17dc4a4fb3a660b85e6c4af035eeed40c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-serializer/zipball/b7208eb17dc4a4fb3a660b85e6c4af035eeed40c", + "reference": "b7208eb17dc4a4fb3a660b85e6c4af035eeed40c", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-json": "~2.5", + "zendframework/zend-math": "~2.5", + "zendframework/zend-stdlib": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-servicemanager": "~2.5" + }, + "suggest": { + "zendframework/zend-servicemanager": "To support plugin manager support" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Serializer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides an adapter based interface to simply generate storable representation of PHP types by different facilities, and recover", + "homepage": "https://github.com/zendframework/zend-serializer", + "keywords": [ + "serializer", + "zf2" + ], + "time": "2015-06-03T15:32:02+00:00" + }, + { + "name": "zendframework/zend-servicemanager", + "version": "2.7.8", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-servicemanager.git", + "reference": "2ae3b6e4978ec2e9ff52352e661946714ed989f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/2ae3b6e4978ec2e9ff52352e661946714ed989f9", + "reference": "2ae3b6e4978ec2e9ff52352e661946714ed989f9", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "~1.0", + "php": "^5.5 || ^7.0" + }, + "require-dev": { + "athletic/athletic": "dev-master", + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-di": "~2.5", + "zendframework/zend-mvc": "~2.5" + }, + "suggest": { + "ocramius/proxy-manager": "ProxyManager 0.5.* to handle lazy initialization of services", + "zendframework/zend-di": "Zend\\Di component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev", + "dev-develop": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\ServiceManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-servicemanager", + "keywords": [ + "servicemanager", + "zf2" + ], + "time": "2016-12-19T19:14:29+00:00" + }, + { + "name": "zendframework/zend-stdlib", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-stdlib.git", + "reference": "cc8e90a60dd5d44b9730b77d07b97550091da1ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/cc8e90a60dd5d44b9730b77d07b97550091da1ae", + "reference": "cc8e90a60dd5d44b9730b77d07b97550091da1ae", + "shasum": "" + }, + "require": { + "php": ">=5.3.23" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-config": "~2.5", + "zendframework/zend-eventmanager": "~2.5", + "zendframework/zend-filter": "~2.5", + "zendframework/zend-inputfilter": "~2.5", + "zendframework/zend-serializer": "~2.5", + "zendframework/zend-servicemanager": "~2.5" + }, + "suggest": { + "zendframework/zend-eventmanager": "To support aggregate hydrator usage", + "zendframework/zend-filter": "To support naming strategy hydrator usage", + "zendframework/zend-serializer": "Zend\\Serializer component", + "zendframework/zend-servicemanager": "To support hydrator plugin manager usage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Stdlib\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "homepage": "https://github.com/zendframework/zend-stdlib", + "keywords": [ + "stdlib", + "zf2" + ], + "time": "2015-06-03T15:32:03+00:00" + }, + { + "name": "zendframework/zend-uri", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-uri.git", + "reference": "fe6c7f4c8d9037fe551898a538a2b6d39483f572" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-uri/zipball/fe6c7f4c8d9037fe551898a538a2b6d39483f572", + "reference": "fe6c7f4c8d9037fe551898a538a2b6d39483f572", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-escaper": "~2.5", + "zendframework/zend-validator": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Uri\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "a component that aids in manipulating and validating » Uniform Resource Identifiers (URIs)", + "homepage": "https://github.com/zendframework/zend-uri", + "keywords": [ + "uri", + "zf2" + ], + "time": "2015-06-03T15:32:03+00:00" + }, + { + "name": "zendframework/zend-validator", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-validator.git", + "reference": "f2c1a1fc786ff4533003cb7fac477495dc007120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/f2c1a1fc786ff4533003cb7fac477495dc007120", + "reference": "f2c1a1fc786ff4533003cb7fac477495dc007120", + "shasum": "" + }, + "require": { + "php": ">=5.3.23", + "zendframework/zend-stdlib": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-cache": "~2.5", + "zendframework/zend-config": "~2.5", + "zendframework/zend-db": "~2.5", + "zendframework/zend-filter": "~2.5", + "zendframework/zend-http": "~2.5", + "zendframework/zend-i18n": "~2.5", + "zendframework/zend-math": "~2.5", + "zendframework/zend-servicemanager": "~2.5", + "zendframework/zend-session": "~2.5", + "zendframework/zend-uri": "~2.5" + }, + "suggest": { + "zendframework/zend-db": "Zend\\Db component", + "zendframework/zend-filter": "Zend\\Filter component, required by the Digits validator", + "zendframework/zend-i18n": "Zend\\I18n component to allow translation of validation error messages as well as to use the various Date validators", + "zendframework/zend-math": "Zend\\Math component", + "zendframework/zend-resources": "Translations of validator messages", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component to allow using the ValidatorPluginManager and validator chains", + "zendframework/zend-session": "Zend\\Session component", + "zendframework/zend-uri": "Zend\\Uri component, required by the Uri and Sitemap\\Loc validators" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Validator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a set of commonly needed validators", + "homepage": "https://github.com/zendframework/zend-validator", + "keywords": [ + "validator", + "zf2" + ], + "time": "2015-06-03T15:32:03+00:00" + }, + { + "name": "zendframework/zend-view", + "version": "2.5.3", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-view.git", + "reference": "f1b682652045b126e0eb0852a1c9fb76b21dfcdd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-view/zipball/f1b682652045b126e0eb0852a1c9fb76b21dfcdd", + "reference": "f1b682652045b126e0eb0852a1c9fb76b21dfcdd", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "zendframework/zend-eventmanager": "~2.5", + "zendframework/zend-loader": "~2.5", + "zendframework/zend-stdlib": "~2.5" + }, + "require-dev": { + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "~4.0", + "zendframework/zend-authentication": "~2.5", + "zendframework/zend-cache": "~2.5", + "zendframework/zend-config": "~2.5", + "zendframework/zend-console": "~2.5", + "zendframework/zend-escaper": "~2.5", + "zendframework/zend-feed": "~2.5", + "zendframework/zend-filter": "~2.5", + "zendframework/zend-http": "~2.5", + "zendframework/zend-i18n": "~2.5", + "zendframework/zend-json": "~2.5", + "zendframework/zend-log": "~2.5", + "zendframework/zend-modulemanager": "~2.5", + "zendframework/zend-mvc": "~2.5", + "zendframework/zend-navigation": "~2.5", + "zendframework/zend-paginator": "~2.5", + "zendframework/zend-permissions-acl": "~2.5", + "zendframework/zend-serializer": "~2.5", + "zendframework/zend-servicemanager": "~2.5", + "zendframework/zend-session": "dev-master", + "zendframework/zend-uri": "~2.5" + }, + "suggest": { + "zendframework/zend-authentication": "Zend\\Authentication component", + "zendframework/zend-escaper": "Zend\\Escaper component", + "zendframework/zend-feed": "Zend\\Feed component", + "zendframework/zend-filter": "Zend\\Filter component", + "zendframework/zend-http": "Zend\\Http component", + "zendframework/zend-i18n": "Zend\\I18n component", + "zendframework/zend-json": "Zend\\Json component", + "zendframework/zend-mvc": "Zend\\Mvc component", + "zendframework/zend-navigation": "Zend\\Navigation component", + "zendframework/zend-paginator": "Zend\\Paginator component", + "zendframework/zend-permissions-acl": "Zend\\Permissions\\Acl component", + "zendframework/zend-servicemanager": "Zend\\ServiceManager component", + "zendframework/zend-uri": "Zend\\Uri component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev", + "dev-develop": "2.6-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\View\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides a system of helpers, output filters, and variable escaping", + "homepage": "https://github.com/zendframework/zend-view", + "keywords": [ + "view", + "zf2" + ], + "time": "2016-01-19T20:49:13+00:00" + } + ], + "packages-dev": [ + { + "name": "codeclimate/php-test-reporter", + "version": "v0.3.2", + "source": { + "type": "git", + "url": "https://github.com/codeclimate/php-test-reporter.git", + "reference": "3a2d3ebdc1df5acf372458c15041af240a6fc016" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/codeclimate/php-test-reporter/zipball/3a2d3ebdc1df5acf372458c15041af240a6fc016", + "reference": "3a2d3ebdc1df5acf372458c15041af240a6fc016", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=5.3", + "satooshi/php-coveralls": "1.0.*", + "symfony/console": ">=2.0" + }, + "require-dev": { + "ext-xdebug": "*", + "phpunit/phpunit": "3.7.*@stable" + }, + "bin": [ + "composer/bin/test-reporter" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.3.x-dev" + } + }, + "autoload": { + "psr-0": { + "CodeClimate\\Component": "src/", + "CodeClimate\\Bundle": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Code Climate", + "email": "hello@codeclimate.com", + "homepage": "https://codeclimate.com" + } + ], + "description": "PHP client for reporting test coverage to Code Climate", + "homepage": "https://github.com/codeclimate/php-test-reporter", + "keywords": [ + "codeclimate", + "coverage" + ], + "time": "2016-04-19T16:54:33+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14T21:17:01+00:00" + }, + { + "name": "fabpot/php-cs-fixer", + "version": "v1.12.3", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "78a820c16d13f593303511461eefa939502fb2de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/78a820c16d13f593303511461eefa939502fb2de", + "reference": "78a820c16d13f593303511461eefa939502fb2de", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^5.3.6 || >=7.0 <7.2", + "sebastian/diff": "^1.1", + "symfony/console": "^2.3 || ^3.0", + "symfony/event-dispatcher": "^2.1 || ^3.0", + "symfony/filesystem": "^2.1 || ^3.0", + "symfony/finder": "^2.1 || ^3.0", + "symfony/process": "^2.3 || ^3.0", + "symfony/stopwatch": "^2.5 || ^3.0" + }, + "conflict": { + "hhvm": "<3.9" + }, + "require-dev": { + "phpunit/phpunit": "^4.5|^5", + "satooshi/php-coveralls": "^1.0" + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "Symfony\\CS\\": "Symfony/CS/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "abandoned": "friendsofphp/php-cs-fixer", + "time": "2016-10-30T12:07:10+00:00" + }, + { + "name": "guzzle/guzzle", + "version": "v3.9.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle3.git", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=5.3.3", + "symfony/event-dispatcher": "~2.1" + }, + "replace": { + "guzzle/batch": "self.version", + "guzzle/cache": "self.version", + "guzzle/common": "self.version", + "guzzle/http": "self.version", + "guzzle/inflection": "self.version", + "guzzle/iterator": "self.version", + "guzzle/log": "self.version", + "guzzle/parser": "self.version", + "guzzle/plugin": "self.version", + "guzzle/plugin-async": "self.version", + "guzzle/plugin-backoff": "self.version", + "guzzle/plugin-cache": "self.version", + "guzzle/plugin-cookie": "self.version", + "guzzle/plugin-curlauth": "self.version", + "guzzle/plugin-error-response": "self.version", + "guzzle/plugin-history": "self.version", + "guzzle/plugin-log": "self.version", + "guzzle/plugin-md5": "self.version", + "guzzle/plugin-mock": "self.version", + "guzzle/plugin-oauth": "self.version", + "guzzle/service": "self.version", + "guzzle/stream": "self.version" + }, + "require-dev": { + "doctrine/cache": "~1.3", + "monolog/monolog": "~1.0", + "phpunit/phpunit": "3.7.*", + "psr/log": "~1.0", + "symfony/class-loader": "~2.1", + "zendframework/zend-cache": "2.*,<2.3", + "zendframework/zend-log": "2.*,<2.3" + }, + "suggest": { + "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.9-dev" + } + }, + "autoload": { + "psr-0": { + "Guzzle": "src/", + "Guzzle\\Tests": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Guzzle Community", + "homepage": "https://github.com/guzzle/guzzle/contributors" + } + ], + "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "abandoned": "guzzlehttp/guzzle", + "time": "2015-03-18T18:23:50+00:00" + }, + { + "name": "pdepend/pdepend", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/pdepend/pdepend.git", + "reference": "b086687f3a01dc6bb92d633aef071d2c5dd0db06" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/b086687f3a01dc6bb92d633aef071d2c5dd0db06", + "reference": "b086687f3a01dc6bb92d633aef071d2c5dd0db06", + "shasum": "" + }, + "require": { + "php": ">=5.3.7", + "symfony/config": "^2.3.0|^3", + "symfony/dependency-injection": "^2.3.0|^3", + "symfony/filesystem": "^2.3.0|^3" + }, + "require-dev": { + "phpunit/phpunit": "^4.4.0,<4.8", + "squizlabs/php_codesniffer": "^2.0.0" + }, + "bin": [ + "src/bin/pdepend" + ], + "type": "library", + "autoload": { + "psr-4": { + "PDepend\\": "src/main/php/PDepend" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Official version of pdepend to be handled with Composer", + "time": "2016-03-10T15:15:04+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "dflydev/markdown": "~1.0", + "erusev/parsedown": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "time": "2015-02-03T12:10:50+00:00" + }, + { + "name": "phpmd/phpmd", + "version": "2.4.3", + "source": { + "type": "git", + "url": "https://github.com/phpmd/phpmd.git", + "reference": "2b9c2417a18696dfb578b38c116cd0ddc19b256e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/2b9c2417a18696dfb578b38c116cd0ddc19b256e", + "reference": "2b9c2417a18696dfb578b38c116cd0ddc19b256e", + "shasum": "" + }, + "require": { + "pdepend/pdepend": "^2.0.4", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0", + "squizlabs/php_codesniffer": "^2.0" + }, + "bin": [ + "src/bin/phpmd" + ], + "type": "project", + "autoload": { + "psr-0": { + "PHPMD\\": "src/main/php" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Manuel Pichler", + "email": "github@manuel-pichler.de", + "homepage": "https://github.com/manuelpichler", + "role": "Project Founder" + }, + { + "name": "Other contributors", + "homepage": "https://github.com/phpmd/phpmd/graphs/contributors", + "role": "Contributors" + }, + { + "name": "Marc Würth", + "email": "ravage@bluewin.ch", + "homepage": "https://github.com/ravage84", + "role": "Project Maintainer" + } + ], + "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", + "homepage": "http://phpmd.org/", + "keywords": [ + "mess detection", + "mess detector", + "pdepend", + "phpmd", + "pmd" + ], + "time": "2016-04-04T11:52:04+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.6.1", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "58a8137754bc24b25740d4281399a4a3596058e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", + "reference": "58a8137754bc24b25740d4281399a4a3596058e0", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1", + "sebastian/recursion-context": "^1.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2016-06-07T08:13:47+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-10-06T15:47:00+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2015-06-21T13:08:43+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4|~5" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2016-05-12T18:03:57+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2015-09-15T10:49:45+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.27", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "c062dddcb68e44b563f66ee319ddae2b5a322a90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c062dddcb68e44b563f66ee319ddae2b5a322a90", + "reference": "c062dddcb68e44b563f66ee319ddae2b5a322a90", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.1", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2016-07-21T06:48:14+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02T06:51:40+00:00" + }, + { + "name": "satooshi/php-coveralls", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/satooshi/php-coveralls.git", + "reference": "da51d304fe8622bf9a6da39a8446e7afd432115c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/satooshi/php-coveralls/zipball/da51d304fe8622bf9a6da39a8446e7afd432115c", + "reference": "da51d304fe8622bf9a6da39a8446e7afd432115c", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzle/guzzle": "^2.8|^3.0", + "php": ">=5.3.3", + "psr/log": "^1.0", + "symfony/config": "^2.1|^3.0", + "symfony/console": "^2.1|^3.0", + "symfony/stopwatch": "^2.0|^3.0", + "symfony/yaml": "^2.0|^3.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/coveralls" + ], + "type": "library", + "autoload": { + "psr-4": { + "Satooshi\\": "src/Satooshi/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/satooshi/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2016-01-20T17:35:46+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2015-07-26T15:48:44+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2015-12-08T07:14:41+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2015-11-11T19:50:13+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.7.0", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "571e27b6348e5b3a637b2abc82ac0d01e6d7bbed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/571e27b6348e5b3a637b2abc82ac0d01e6d7bbed", + "reference": "571e27b6348e5b3a637b2abc82ac0d01e6d7bbed", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2016-09-01T23:53:02+00:00" + }, + { + "name": "symfony/config", + "version": "v2.8.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "f8b1922bbda9d2ac86aecd649399040bce849fde" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/f8b1922bbda9d2ac86aecd649399040bce849fde", + "reference": "f8b1922bbda9d2ac86aecd649399040bce849fde", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/filesystem": "~2.3|~3.0.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2016-09-14T20:31:12+00:00" + }, + { + "name": "symfony/console", + "version": "v2.8.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "7350016c8abcab897046f1aead2b766b84d3eff8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/7350016c8abcab897046f1aead2b766b84d3eff8", + "reference": "7350016c8abcab897046f1aead2b766b84d3eff8", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/debug": "~2.7,>=2.7.2|~3.0.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.1|~3.0.0", + "symfony/process": "~2.1|~3.0.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2016-10-06T01:43:09+00:00" + }, + { + "name": "symfony/debug", + "version": "v2.8.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "8c29235936a47473af16fb91c7c4b7b193c5693c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/8c29235936a47473af16fb91c7c4b7b193c5693c", + "reference": "8c29235936a47473af16fb91c7c4b7b193c5693c", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/class-loader": "~2.2|~3.0.0", + "symfony/http-kernel": "~2.3.24|~2.5.9|~2.6,>=2.6.2|~3.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2016-09-06T10:55:00+00:00" + }, + { + "name": "symfony/dependency-injection", + "version": "v2.8.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/dependency-injection.git", + "reference": "3d61c765daa1a5832f1d7c767f48886b8d8ea64c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/3d61c765daa1a5832f1d7c767f48886b8d8ea64c", + "reference": "3d61c765daa1a5832f1d7c767f48886b8d8ea64c", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "conflict": { + "symfony/expression-language": "<2.6" + }, + "require-dev": { + "symfony/config": "~2.2|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/yaml": "~2.3.42|~2.7.14|~2.8.7|~3.0.7" + }, + "suggest": { + "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\DependencyInjection\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DependencyInjection Component", + "homepage": "https://symfony.com", + "time": "2016-10-24T15:52:36+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v2.8.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "25c576abd4e0f212e678fe8b2bd9a9a98c7ea934" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/25c576abd4e0f212e678fe8b2bd9a9a98c7ea934", + "reference": "25c576abd4e0f212e678fe8b2bd9a9a98c7ea934", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.0,>=2.0.5|~3.0.0", + "symfony/dependency-injection": "~2.6|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/stopwatch": "~2.3|~3.0.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2016-10-13T01:43:15+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v2.8.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "a3784111af9f95f102b6411548376e1ae7c93898" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/a3784111af9f95f102b6411548376e1ae7c93898", + "reference": "a3784111af9f95f102b6411548376e1ae7c93898", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2016-10-18T04:28:30+00:00" + }, + { + "name": "symfony/finder", + "version": "v2.8.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "bc24c8f5674c6f6841f2856b70e5d60784be5691" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/bc24c8f5674c6f6841f2856b70e5d60784be5691", + "reference": "bc24c8f5674c6f6841f2856b70e5d60784be5691", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2016-09-28T00:10:16+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "dff51f72b0706335131b00a7f49606168c582594" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594", + "reference": "dff51f72b0706335131b00a7f49606168c582594", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2016-05-18T14:26:46+00:00" + }, + { + "name": "symfony/process", + "version": "v2.8.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "024de37f8a6b9e5e8244d9eb3fcf3e467dd2a93f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/024de37f8a6b9e5e8244d9eb3fcf3e467dd2a93f", + "reference": "024de37f8a6b9e5e8244d9eb3fcf3e467dd2a93f", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2016-09-29T14:03:54+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v2.8.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "35bae476693150728b0eb51647faac82faf9aaca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/35bae476693150728b0eb51647faac82faf9aaca", + "reference": "35bae476693150728b0eb51647faac82faf9aaca", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2016-06-29T05:29:29+00:00" + }, + { + "name": "symfony/yaml", + "version": "v2.8.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "396784cd06b91f3db576f248f2402d547a077787" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/396784cd06b91f3db576f248f2402d547a077787", + "reference": "396784cd06b91f3db576f248f2402d547a077787", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2016-10-21T20:59:10+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.6" + }, + "platform-dev": [] +} diff --git a/config/module.compat.php b/config/module.compat.php deleted file mode 100644 index f13095b..0000000 --- a/config/module.compat.php +++ /dev/null @@ -1,43 +0,0 @@ - 1); \ No newline at end of file diff --git a/config/module.config.php b/config/module.config.php index 70f1d51..c732e8a 100644 --- a/config/module.config.php +++ b/config/module.config.php @@ -1,9 +1,26 @@ + * @copyright Copyright (c) 2012 University of Maine, 2016 Raymond J. Kolbe + * @license http://www.opensource.org/licenses/mit-license.php MIT License + */ namespace DOMPDFModule; -return array( - 'dompdf_module' => array( +return [ + 'dompdf_module' => [ /** * The location of the DOMPDF font directory * @@ -62,21 +79,10 @@ * should be an absolute path. * This is only checked on command line call by dompdf.php, but not by * direct class use like: - * $dompdf = new DOMPDF(); $dompdf->load_html($htmldata); $dompdf->render(); $pdfdata = $dompdf->output(); + * $dompdf = new DOMPDF(); $dompdf->load_html($htmldata); $dompdf->render(); $pdfdata = $dompdf->output(); */ 'chroot' => realpath(__DIR__ . '/../../../dompdf/dompdf/'), - /** - * Whether to use Unicode fonts or not. - * - * When set to true the PDF backend must be set to "CPDF" and fonts must be - * loaded via load_font.php. - * - * When enabled, dompdf can support all Unicode glyphs. Any glyphs used in a - * document must be present in your fonts, however. - */ - 'unicode_enabled' => true, - /** * Whether to make font subsetting or not. */ @@ -136,7 +142,7 @@ * If pdflib present in web server and auto or selected explicitely above, * a real license code must exist! */ - //def("DOMPDF_PDFLIB_LICENSE", "your license key here"); + 'pdflib_license' => '', /** * The default paper size. @@ -244,45 +250,36 @@ */ 'font_height_ratio' => 1.1, - /** - * Enable CSS float - * - * Allows people to disabled CSS float support - * @var bool - */ - 'enable_css_float' => false, - /** * Use the more-than-experimental HTML5 Lib parser */ 'enable_html5parser' => false, - - 'debug_png' => false, + 'debug_png' => false, 'debug_keep_temp' => false, 'debug_css' => false, 'debug_layout' => false, - 'debug_layout_links' => false, + 'debug_layout_lines' => false, 'debug_layout_blocks' => false, 'debug_layout_inline' => false, 'debug_layout_padding_box' => false - ), - 'view_manager' => array( - 'strategies' => array( + ], + 'view_manager' => [ + 'strategies' => [ 'ViewPdfStrategy' - ) - ), - 'service_manager' => array( - 'shared' => array( + ] + ], + 'service_manager' => [ + 'shared' => [ /** * DOMPDF itself has issues rendering twice in a row so we force a * new instance to be created. */ 'DOMPDF' => false - ), - 'factories' => array( + ], + 'factories' => [ 'DOMPDF' => __NAMESPACE__ . '\Service\DOMPDFFactory', 'ViewPdfRenderer' => __NAMESPACE__ . '\Mvc\Service\ViewPdfRendererFactory', 'ViewPdfStrategy' => __NAMESPACE__ . '\Mvc\Service\ViewPdfStrategyFactory', - ) - ), -); + ] + ] +]; diff --git a/src/DOMPDFModule/Module.php b/src/DOMPDFModule/Module.php index 7d0e6ad..997e512 100644 --- a/src/DOMPDFModule/Module.php +++ b/src/DOMPDFModule/Module.php @@ -12,8 +12,8 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * @author Raymond J. Kolbe - * @copyright Copyright (c) 2012 University of Maine + * @author Raymond J. Kolbe + * @copyright Copyright (c) 2012 University of Maine, 2016 Raymond J. Kolbe * @license http://www.opensource.org/licenses/mit-license.php MIT License */ @@ -31,12 +31,12 @@ public function getConfig() public function getAutoloaderConfig() { - return array( - 'Zend\Loader\StandardAutoloader' => array( - 'namespaces' => array( + return [ + 'Zend\Loader\StandardAutoloader' => [ + 'namespaces' => [ __NAMESPACE__ => __DIR__ , - ), - ), - ); + ] + ] + ]; } } diff --git a/src/DOMPDFModule/Mvc/Service/ViewPdfRendererFactory.php b/src/DOMPDFModule/Mvc/Service/ViewPdfRendererFactory.php index 7096e1e..37efbe4 100644 --- a/src/DOMPDFModule/Mvc/Service/ViewPdfRendererFactory.php +++ b/src/DOMPDFModule/Mvc/Service/ViewPdfRendererFactory.php @@ -12,8 +12,9 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * @author Raymond J. Kolbe - * @copyright Copyright (c) 2012 University of Maine + * @author Raymond J. Kolbe + * @author Márcio Dias + * @copyright Copyright (c) 2012 University of Maine, 2016 Raymond J. Kolbe * @license http://www.opensource.org/licenses/mit-license.php MIT License */ @@ -28,18 +29,14 @@ class ViewPdfRendererFactory implements FactoryInterface /** * Create and return the PDF view renderer * - * @param ServiceLocatorInterface $serviceLocator + * @param ServiceLocatorInterface $serviceLocator * @return PdfRenderer */ public function createService(ServiceLocatorInterface $serviceLocator) { - $viewManager = $serviceLocator->get('ViewManager'); - - $pdfRenderer = new PdfRenderer(); - $pdfRenderer->setResolver($viewManager->getResolver()); - $pdfRenderer->setHtmlRenderer($viewManager->getRenderer()); - $pdfRenderer->setEngine($serviceLocator->get('dompdf')); - - return $pdfRenderer; + return (new PdfRenderer()) + ->setResolver($serviceLocator->get('ViewResolver')) + ->setHtmlRenderer($serviceLocator->get('ViewRenderer')) + ->setEngine($serviceLocator->get('dompdf')); } -} \ No newline at end of file +} diff --git a/src/DOMPDFModule/Mvc/Service/ViewPdfStrategyFactory.php b/src/DOMPDFModule/Mvc/Service/ViewPdfStrategyFactory.php index c1ce0e2..29467f9 100644 --- a/src/DOMPDFModule/Mvc/Service/ViewPdfStrategyFactory.php +++ b/src/DOMPDFModule/Mvc/Service/ViewPdfStrategyFactory.php @@ -12,8 +12,8 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * @author Raymond J. Kolbe - * @copyright Copyright (c) 2012 University of Maine + * @author Raymond J. Kolbe + * @copyright Copyright (c) 2012 University of Maine, 2016 Raymond J. Kolbe * @license http://www.opensource.org/licenses/mit-license.php MIT License */ @@ -31,14 +31,11 @@ class ViewPdfStrategyFactory implements FactoryInterface * Retrieves the ViewPdfRenderer service from the service locator, and * injects it into the constructor for the PDF strategy. * - * @param ServiceLocatorInterface $serviceLocator + * @param ServiceLocatorInterface $serviceLocator * @return PdfStrategy */ public function createService(ServiceLocatorInterface $serviceLocator) { - $pdfRenderer = $serviceLocator->get('ViewPdfRenderer'); - $pdfStrategy = new PdfStrategy($pdfRenderer); - - return $pdfStrategy; + return new PdfStrategy($serviceLocator->get('ViewPdfRenderer')); } } diff --git a/src/DOMPDFModule/Service/DOMPDFFactory.php b/src/DOMPDFModule/Service/DOMPDFFactory.php index be78f48..3cd0a06 100644 --- a/src/DOMPDFModule/Service/DOMPDFFactory.php +++ b/src/DOMPDFModule/Service/DOMPDFFactory.php @@ -12,107 +12,58 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * @author Raymond J. Kolbe - * @copyright Copyright (c) 2012 University of Maine + * @author Raymond J. Kolbe + * @copyright Copyright (c) 2012 University of Maine, 2016 Raymond J. Kolbe * @license http://www.opensource.org/licenses/mit-license.php MIT License */ namespace DOMPDFModule\Service; +use Dompdf\Dompdf; +use Dompdf\Options; use Zend\ServiceManager\FactoryInterface; use Zend\ServiceManager\ServiceLocatorInterface; -use DOMPDF; class DOMPDFFactory implements FactoryInterface { /** - * An array of keys that map DOMPDF define keys to DOMPDFModule config's - * keys. - * - * @var array - */ - private static $configCompatMapping = array( - 'font_directory' => 'DOMPDF_FONT_DIR', - 'font_cache_directory' => 'DOMPDF_FONT_CACHE', - 'temporary_directory' => 'DOMPDF_TEMP_DIR', - 'chroot' => 'DOMPDF_CHROOT', - 'unicode_enabled' => 'DOMPDF_UNICODE_ENABLED', - 'enable_fontsubsetting' => 'DOMPDF_ENABLE_FONTSUBSETTING', - 'pdf_backend' => 'DOMPDF_PDF_BACKEND', - 'default_media_type' => 'DOMPDF_DEFAULT_MEDIA_TYPE', - 'default_paper_size' => 'DOMPDF_DEFAULT_PAPER_SIZE', - 'default_font' => 'DOMPDF_DEFAULT_FONT', - 'dpi' => 'DOMPDF_DPI', - 'enable_php' => 'DOMPDF_ENABLE_PHP', - 'enable_javascript' => 'DOMPDF_ENABLE_JAVASCRIPT', - 'enable_remote' => 'DOMPDF_ENABLE_REMOTE', - 'log_output_file' => 'DOMPDF_LOG_OUTPUT_FILE', - 'font_height_ratio' => 'DOMPDF_FONT_HEIGHT_RATIO', - 'enable_css_float' => 'DOMPDF_ENABLE_CSS_FLOAT', - 'enable_html5parser' => 'DOMPDF_ENABLE_HTML5PARSER', - 'debug_png' => 'DEBUGPNG', - 'debug_keep_temp' => 'DEBUGKEEPTEMP', - 'debug_css' => 'DEBUGCSS', - 'debug_layout' => 'DEBUG_LAYOUT', - 'debug_layout_links' => 'DEBUG_LAYOUT_LINES', - 'debug_layout_blocks' => 'DEBUG_LAYOUT_BLOCKS', - 'debug_layout_inline' => 'DEBUG_LAYOUT_INLINE', - 'debug_layout_padding_box' => 'DEBUG_LAYOUT_PADDINGBOX' - ); - - /** - * Creates an instance of DOMPDF. - * - * @param ServiceLocatorInterface $serviceLocator - * @return PdfRenderer + * Creates an instance of Dompdf. + * + * @param ServiceLocatorInterface $serviceLocator + * @return Dompdf */ public function createService(ServiceLocatorInterface $serviceLocator) { - $config = $serviceLocator->get('config'); - $config = $config['dompdf_module']; - - if (defined('DOMPDF_DIR') === false) { - define("DOMPDF_DIR", __DIR__ . '/../../../../../dompdf/dompdf'); - } - - if (defined('DOMPDF_INC_DIR') === false) { - define("DOMPDF_INC_DIR", DOMPDF_DIR . "/include"); - } - - if (defined('DOMPDF_LIB_DIR') === false) { - define("DOMPDF_LIB_DIR", DOMPDF_DIR . "/lib"); - } - - if (defined('DOMPDF_AUTOLOAD_PREPEND') === false) { - define("DOMPDF_AUTOLOAD_PREPEND", false); - } + $moduleConfig = $serviceLocator->get('config')['dompdf_module']; - if (defined('DOMPDF_ADMIN_USERNAME') === false) { - define("DOMPDF_ADMIN_USERNAME", false); - } + $options = [ + 'temp_dir' => $moduleConfig['temporary_directory'], + 'font_dir' => $moduleConfig['font_directory'], + 'font_cache' => $moduleConfig['font_cache_directory'], + 'chroot' => $moduleConfig['chroot'], + 'log_output_file' => $moduleConfig['log_output_file'], + 'default_media_type' => $moduleConfig['default_media_type'], + 'default_paper_size' => $moduleConfig['default_paper_size'], + 'default_font' => $moduleConfig['default_font'], + 'dpi' => $moduleConfig['dpi'], + 'font_height_ratio' => $moduleConfig['font_height_ratio'], + 'is_php_enabled' => $moduleConfig['enable_php'], + 'is_remote_enabled' => $moduleConfig['enable_remote'], + 'is_javascript_enabled' => $moduleConfig['enable_javascript'], + 'is_html5_parser_enabled' => $moduleConfig['enable_html5parser'], + 'is_font_subsetting_enabled' => $moduleConfig['enable_fontsubsetting'], + 'debug_png' => $moduleConfig['debug_png'], + 'debug_keep_temp' => $moduleConfig['debug_keep_temp'], + 'debug_css' => $moduleConfig['debug_css'], + 'debug_layout' => $moduleConfig['debug_layout'], + 'debug_layout_lines' => $moduleConfig['debug_layout_lines'], + 'debug_layout_blocks' => $moduleConfig['debug_layout_blocks'], + 'debug_layout_inline' => $moduleConfig['debug_layout_inline'], + 'debug_layout_padding_box' => $moduleConfig['debug_layout_padding_box'], + 'pdf_backend' => $moduleConfig['pdf_backend'], + 'pdflib_license' => $moduleConfig['pdflib_license'] + ]; - if (defined('DOMPDF_ADMIN_PASSWORD') === false) { - define("DOMPDF_ADMIN_PASSWORD", false); - } - - - foreach ($config as $key => $value) { - if (! array_key_exists($key, static::$configCompatMapping)) { - continue; - } - - if (defined(static::$configCompatMapping[$key])) { - continue; - } - - define(static::$configCompatMapping[$key], $value); - } - - require_once DOMPDF_LIB_DIR . '/html5lib/Parser.php'; - require_once DOMPDF_INC_DIR . '/functions.inc.php'; - require_once __DIR__ . '/../../../config/module.compat.php'; - - return new DOMPDF(); + return new Dompdf(new Options($options)); } } - diff --git a/src/DOMPDFModule/View/Model/PdfModel.php b/src/DOMPDFModule/View/Model/PdfModel.php index 1f90bd9..7461e73 100644 --- a/src/DOMPDFModule/View/Model/PdfModel.php +++ b/src/DOMPDFModule/View/Model/PdfModel.php @@ -12,8 +12,8 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * @author Raymond J. Kolbe - * @copyright Copyright (c) 2012 University of Maine + * @author Raymond J. Kolbe + * @copyright Copyright (c) 2012 University of Maine, 2016 Raymond J. Kolbe * @license http://www.opensource.org/licenses/mit-license.php MIT License */ @@ -23,29 +23,34 @@ class PdfModel extends ViewModel { + const DISPLAY_INLINE = 'inline'; + const DISPLAY_ATTACHMENT = 'attachment'; + const DEFAULT_FILE_NAME = 'untitled.pdf'; + /** * Renderer options * @var array */ - protected $options = array( + protected $options = [ 'paperSize' => '8x11', 'paperOrientation' => 'portrait', 'basePath' => '/', - 'fileName' => null - ); - + 'fileName' => self::DEFAULT_FILE_NAME, + 'display' => self::DISPLAY_INLINE + ]; + /** - * PDF probably won't need to be captured into a + * PDF probably won't need to be captured into a * a parent container by default. - * + * * @var string */ protected $captureTo = null; /** * PDF is usually terminal - * + * * @var bool */ protected $terminate = true; -} \ No newline at end of file +} diff --git a/src/DOMPDFModule/View/Renderer/PdfRenderer.php b/src/DOMPDFModule/View/Renderer/PdfRenderer.php index 4947219..d52af26 100644 --- a/src/DOMPDFModule/View/Renderer/PdfRenderer.php +++ b/src/DOMPDFModule/View/Renderer/PdfRenderer.php @@ -12,54 +12,95 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * @author Raymond J. Kolbe - * @copyright Copyright (c) 2012 University of Maine + * @author Raymond J. Kolbe + * @copyright Copyright (c) 2012 University of Maine, 2016 Raymond J. Kolbe * @license http://www.opensource.org/licenses/mit-license.php MIT License */ namespace DOMPDFModule\View\Renderer; +use DOMPDFModule\View\Model\PdfModel; +use Zend\View\Exception\InvalidArgumentException; use Zend\View\Renderer\RendererInterface as Renderer; use Zend\View\Resolver\ResolverInterface as Resolver; -use DOMPDF; +use Dompdf\Dompdf; class PdfRenderer implements Renderer { + /** + * @var Dompdf|null + */ private $dompdf = null; + + /** + * @var Resolver|null + */ private $resolver = null; + + /** + * @var Renderer|null + */ private $htmlRenderer = null; - + + /** + * @param Renderer $renderer + * @return $this + */ public function setHtmlRenderer(Renderer $renderer) { $this->htmlRenderer = $renderer; return $this; } - + + /** + * @return Renderer + */ public function getHtmlRenderer() { return $this->htmlRenderer; } - - public function setEngine(DOMPDF $dompdf) + + /** + * @param Dompdf $dompdf + * @return $this + */ + public function setEngine(Dompdf $dompdf) { $this->dompdf = $dompdf; return $this; } - + + /** + * @return Dompdf + */ public function getEngine() { return $this->dompdf; } + + /** + * @param Resolver $resolver + * @return $this + */ + public function setResolver(Resolver $resolver) + { + $this->resolver = $resolver; + return $this; + } /** - * Renders values as a PDF - * - * @param string|Model $name The script/resource process, or a view model - * @param null|array|\ArrayAccess Values to use during rendering - * @return string The script output. + * {@inheritdoc} */ public function render($nameOrModel, $values = null) { + if (!($nameOrModel instanceof PdfModel)) { + throw new InvalidArgumentException(sprintf( + '%s expects a PdfModel as the first argument; received "%s"', + __METHOD__, + (is_object($nameOrModel) ? get_class($nameOrModel) : gettype($nameOrModel)) + )); + } + $html = $this->getHtmlRenderer()->render($nameOrModel, $values); $paperSize = $nameOrModel->getOption('paperSize'); @@ -67,18 +108,12 @@ public function render($nameOrModel, $values = null) $basePath = $nameOrModel->getOption('basePath'); $pdf = $this->getEngine(); - $pdf->set_paper($paperSize, $paperOrientation); - $pdf->set_base_path($basePath); + $pdf->setPaper($paperSize, $paperOrientation); + $pdf->setBasePath($basePath); - $pdf->load_html($html); + $pdf->loadHtml($html); $pdf->render(); return $pdf->output(); } - - public function setResolver(Resolver $resolver) - { - $this->resolver = $resolver; - return $this; - } } diff --git a/src/DOMPDFModule/View/Strategy/PdfStrategy.php b/src/DOMPDFModule/View/Strategy/PdfStrategy.php index ece0ecb..cb89cc6 100644 --- a/src/DOMPDFModule/View/Strategy/PdfStrategy.php +++ b/src/DOMPDFModule/View/Strategy/PdfStrategy.php @@ -12,8 +12,8 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * @author Raymond J. Kolbe - * @copyright Copyright (c) 2012 University of Maine + * @author Raymond J. Kolbe + * @copyright Copyright (c) 2012 University of Maine, 2016 Raymond J. Kolbe * @license http://www.opensource.org/licenses/mit-license.php MIT License */ @@ -30,7 +30,7 @@ class PdfStrategy implements ListenerAggregateInterface /** * @var \Zend\Stdlib\CallbackHandler[] */ - protected $listeners = array(); + protected $listeners = []; /** * @var PdfRenderer @@ -57,8 +57,8 @@ public function __construct(PdfRenderer $renderer) */ public function attach(EventManagerInterface $events, $priority = 1) { - $this->listeners[] = $events->attach(ViewEvent::EVENT_RENDERER, array($this, 'selectRenderer'), $priority); - $this->listeners[] = $events->attach(ViewEvent::EVENT_RESPONSE, array($this, 'injectResponse'), $priority); + $this->listeners[] = $events->attach(ViewEvent::EVENT_RENDERER, [$this, 'selectRenderer'], $priority); + $this->listeners[] = $events->attach(ViewEvent::EVENT_RESPONSE, [$this, 'injectResponse'], $priority); } /** @@ -79,18 +79,18 @@ public function detach(EventManagerInterface $events) /** * Detect if we should use the PdfRenderer based on model type * - * @param ViewEvent $e + * @param ViewEvent $event * @return null|PdfRenderer */ - public function selectRenderer(ViewEvent $e) + public function selectRenderer(ViewEvent $event) { - $model = $e->getModel(); + $model = $event->getModel(); if ($model instanceof Model\PdfModel) { return $this->renderer; } - return; + return null; } /** @@ -99,34 +99,37 @@ public function selectRenderer(ViewEvent $e) * @param ViewEvent $e * @return void */ - public function injectResponse(ViewEvent $e) + public function injectResponse(ViewEvent $event) { - $renderer = $e->getRenderer(); + $renderer = $event->getRenderer(); if ($renderer !== $this->renderer) { // Discovered renderer is not ours; do nothing return; } - $result = $e->getResult(); - + $result = $event->getResult(); if (!is_string($result)) { - // @todo Potentially throw an exception here since we should *always* get back a result. + // No output to display. Good bye! return; } - $response = $e->getResponse(); + $response = $event->getResponse(); $response->setContent($result); - $response->getHeaders()->addHeaderLine('content-type', 'application/pdf'); - - $fileName = $e->getModel()->getOption('filename'); - if (isset($fileName)) { - if (substr($fileName, -4) != '.pdf') { - $fileName .= '.pdf'; - } - - $response->getHeaders()->addHeaderLine( - 'Content-Disposition', - 'attachment; filename=' . $fileName); + + $model = $event->getModel(); + $options = $model->getOptions(); + + $fileName = $options['fileName']; + $dispositionType = $options['display']; + + if (substr($fileName, -4) != '.pdf') { + $fileName .= '.pdf'; } + + $headerValue = sprintf('%s; filename="%s"', $dispositionType, $fileName); + + $response->getHeaders()->addHeaderLine('Content-Disposition', $headerValue); + $response->getHeaders()->addHeaderLine('Content-Length', strlen($result)); + $response->getHeaders()->addHeaderLine('Content-Type', 'application/pdf'); } } diff --git a/tests/Bootstrap.php b/tests/Bootstrap.php index d38d4e4..4da6ea4 100644 --- a/tests/Bootstrap.php +++ b/tests/Bootstrap.php @@ -1,50 +1,37 @@ + * @copyright Copyright (c) 2012 University of Maine, 2016 Raymond J. Kolbe + * @license http://www.opensource.org/licenses/mit-license.php MIT License + */ use DOMPDFModuleTest\Framework\TestCase; use Zend\ServiceManager\ServiceManager; use Zend\Mvc\Service\ServiceManagerConfig; -use Zend\Loader\StandardAutoloader; +ini_set('display_errors', 'On'); error_reporting(E_ALL | E_STRICT); -chdir(__DIR__); - -$previousDir = '.'; -while (!file_exists('config/application.config.php')) { - $dir = dirname(getcwd()); - if ($previousDir === $dir) { - throw new RuntimeException( - 'Unable to locate "config/application.config.php": ' . - 'is DOMPDFModule in a subdir of your application skeleton?' - ); - } - $previousDir = $dir; - chdir($dir); -} - if (is_readable(__DIR__ . '/TestConfiguration.php')) { $configuration = include_once __DIR__ . '/TestConfiguration.php'; } else { $configuration = include_once __DIR__ . '/TestConfiguration.php.dist'; } -// Assumes PHP Composer autoloader w/compiled classmaps, etc. -require_once 'vendor/autoload.php'; - -// This namespace is not in classmap. -$loader = new StandardAutoloader( - array( - StandardAutoloader::LOAD_NS => array( - 'DOMPDFModuleTest' => __DIR__ . '/DOMPDFModuleTest' - ), - )); -$loader->register(); - -$serviceManager = new ServiceManager(new ServiceManagerConfig($configuration['service_manager'])); -$serviceManager->setService('ApplicationConfig', $configuration); -$serviceManager->setAllowOverride(true); - -$moduleManager = $serviceManager->get('ModuleManager'); -$moduleManager->loadModules(); +require_once __DIR__ . '/../vendor/autoload.php'; -TestCase::setServiceManager($serviceManager); \ No newline at end of file +$application = \Zend\Mvc\Application::init($configuration); +$serviceManager = $application->getServiceManager(); +TestCase::setServiceManager($serviceManager); diff --git a/tests/DOMPDFModuleTest/Framework/TestCase.php b/tests/DOMPDFModuleTest/Framework/TestCase.php index 3e891f4..c36a290 100644 --- a/tests/DOMPDFModuleTest/Framework/TestCase.php +++ b/tests/DOMPDFModuleTest/Framework/TestCase.php @@ -1,21 +1,46 @@ + * @copyright Copyright (c) 2012 University of Maine, 2016 Raymond J. Kolbe + * @license http://www.opensource.org/licenses/mit-license.php MIT License + */ namespace DOMPDFModuleTest\Framework; -use PHPUnit_Framework_TestCase; use Zend\ServiceManager\ServiceManager; -class TestCase extends PHPUnit_Framework_TestCase +class TestCase extends \PHPUnit_Framework_TestCase { - protected static $serviceManager = null; - - public static function setServiceManager(ServiceManager $sm) + /** + * @var ServiceManager + */ + protected static $serviceManager; + + /** + * @param ServiceManager $serviceManager + */ + public static function setServiceManager(ServiceManager $serviceManager) { - self::$serviceManager = $sm; + self::$serviceManager = $serviceManager; } - + + /** + * @return ServiceManager + */ public function getServiceManager() { - return self::$serviceManager; + return self::$serviceManager; } -} \ No newline at end of file +} diff --git a/tests/DOMPDFModuleTest/ModuleTest.php b/tests/DOMPDFModuleTest/ModuleTest.php new file mode 100644 index 0000000..1320c61 --- /dev/null +++ b/tests/DOMPDFModuleTest/ModuleTest.php @@ -0,0 +1,55 @@ + + * @copyright Copyright (c) 2012 University of Maine, 2016 Raymond J. Kolbe + * @license http://www.opensource.org/licenses/mit-license.php MIT License + */ + +namespace DOMPDFModuleTest; + +use DOMPDFModule\Module; + +class ModuleTest extends \PHPUnit_Framework_TestCase +{ + /** + * @var Module + */ + private $module; + + public function testHasConfig() + { + $config = $this->module->getConfig(); + + // Test the obvious required keys. + $this->assertArrayHasKey('dompdf_module', $config, 'dompdf_module'); + $this->assertArrayHasKey('service_manager', $config, 'service_manager'); + } + + public function testHasAutoloaderConfig() + { + $config = $this->module->getAutoloaderConfig(); + $this->assertInternalType('array', $config, 'config is array'); + } + + /** + * {@inheritDoc} + */ + protected function setUp() + { + parent::setUp(); + + $this->module = new Module(); + } +} diff --git a/tests/DOMPDFModuleTest/Mvc/Service/ViewPdfRendererFactoryTest.php b/tests/DOMPDFModuleTest/Mvc/Service/ViewPdfRendererFactoryTest.php new file mode 100644 index 0000000..761e33d --- /dev/null +++ b/tests/DOMPDFModuleTest/Mvc/Service/ViewPdfRendererFactoryTest.php @@ -0,0 +1,36 @@ + + * @copyright Copyright (c) 2012 University of Maine, 2016 Raymond J. Kolbe + * @license http://www.opensource.org/licenses/mit-license.php MIT License + */ + +namespace DOMPDFModuleTest\Mvc\Service; + +use DOMPDFModule\Mvc\Service\ViewPdfRendererFactory; +use DOMPDFModuleTest\Framework\TestCase; + +class ViewPdfRendererFactoryTest extends TestCase +{ + public function testCreatesService() + { + $factory = new ViewPdfRendererFactory(); + + /* @var $instance \DOMPDFModule\View\Renderer\PdfRenderer */ + $instance = $factory->createService($this->getServiceManager()); + + $this->assertInstanceOf('\DOMPDFModule\View\Renderer\PdfRenderer', $instance); + } +} diff --git a/tests/DOMPDFModuleTest/Mvc/Service/ViewPdfStrategyFactoryTest.php b/tests/DOMPDFModuleTest/Mvc/Service/ViewPdfStrategyFactoryTest.php new file mode 100644 index 0000000..a4735b0 --- /dev/null +++ b/tests/DOMPDFModuleTest/Mvc/Service/ViewPdfStrategyFactoryTest.php @@ -0,0 +1,36 @@ + + * @copyright Copyright (c) 2012 University of Maine, 2016 Raymond J. Kolbe + * @license http://www.opensource.org/licenses/mit-license.php MIT License + */ + +namespace DOMPDFModuleTest\Mvc\Service; + +use DOMPDFModule\Mvc\Service\ViewPdfStrategyFactory; +use DOMPDFModuleTest\Framework\TestCase; + +class ViewPdfStrategyFactoryTest extends TestCase +{ + public function testCreatesService() + { + $factory = new ViewPdfStrategyFactory(); + + /* @var $instance \DOMPDFModule\View\Strategy\PdfStrategy */ + $instance = $factory->createService($this->getServiceManager()); + + $this->assertInstanceOf('\DOMPDFModule\View\Strategy\PdfStrategy', $instance); + } +} diff --git a/tests/DOMPDFModuleTest/Service/DOMPDFFactoryTest.php b/tests/DOMPDFModuleTest/Service/DOMPDFFactoryTest.php new file mode 100644 index 0000000..51c5cf8 --- /dev/null +++ b/tests/DOMPDFModuleTest/Service/DOMPDFFactoryTest.php @@ -0,0 +1,95 @@ + + * @copyright Copyright (c) 2017 Raymond J. Kolbe + * @license http://www.opensource.org/licenses/mit-license.php MIT License + */ + +namespace DOMPDFModule\Service; + +use Dompdf\Dompdf; +use DOMPDFModuleTest\Framework\TestCase; + +class DOMPDFFactoryTest extends TestCase +{ + /** + * System under test. + * + * @var DOMPDFFactory + */ + private $factory; + + public function testItCreatesAValidInstance() + { + $dompdf = $this->factory->createService($this->getServiceManager()); + + $this->assertInstanceOf('\Dompdf\Dompdf', $dompdf); + $this->assertNotNullOptions($dompdf); + } + + public function testItCreatesUniqueInstances() + { + $firstInstance = $this->factory->createService($this->getServiceManager()); + $secondInstance = $this->factory->createService($this->getServiceManager()); + + $this->assertNotSame($firstInstance, $secondInstance); + } + + /** + * {@inheritdoc} + */ + protected function setUp() + { + parent::setUp(); + + $this->factory = new DOMPDFFactory(); + } + + /** + * Asserts that the given DOMPDF instance contains not null options for has options set. + * + * @param Dompdf $dompdf + */ + private function assertNotNullOptions(Dompdf $dompdf) + { + $options = $dompdf->getOptions(); + + $this->assertNotNull($options->get('temp_dir'), 'temp_dir'); + $this->assertNotNull($options->get('font_dir'), 'font_dir'); + $this->assertNotNull($options->get('font_cache'), 'font_cache'); + $this->assertNotNull($options->get('chroot'), 'chroot'); + $this->assertNotNull($options->get('log_output_file'), 'log_output_file'); + $this->assertNotNull($options->get('default_media_type'), 'default_media_type'); + $this->assertNotNull($options->get('default_paper_size'), 'default_paper_size'); + $this->assertNotNull($options->get('default_font'), 'default_font'); + $this->assertNotNull($options->get('dpi'), 'dpi'); + $this->assertNotNull($options->get('font_height_ratio'), 'font_height_ratio'); + $this->assertNotNull($options->get('is_php_enabled'), 'is_php_enabled'); + $this->assertNotNull($options->get('is_remote_enabled'), 'is_remote_enabled'); + $this->assertNotNull($options->get('is_javascript_enabled'), 'is_javascript_enabled'); + $this->assertNotNull($options->get('is_html5_parser_enabled'), 'is_html5_parser_enabled'); + $this->assertNotNull($options->get('is_font_subsetting_enabled'), 'is_font_subsetting_enabled'); + $this->assertNotNull($options->get('debug_png'), 'debug_png'); + $this->assertNotNull($options->get('debug_keep_temp'), 'debug_keep_temp'); + $this->assertNotNull($options->get('debug_css'), 'debug_css'); + $this->assertNotNull($options->get('debug_layout'), 'debug_layout'); + $this->assertNotNull($options->get('debug_layout_lines'), 'debug_layout_lines'); + $this->assertNotNull($options->get('debug_layout_blocks'), 'debug_layout_blocks'); + $this->assertNotNull($options->get('debug_layout_inline'), 'debug_layout_inline'); + $this->assertNotNull($options->get('debug_layout_padding_box'), 'debug_layout_padding_box'); + $this->assertNotNull($options->get('pdf_backend'), 'pdf_backend'); + $this->assertNotNull($options->get('pdflib_license'), 'pdflib_license'); + } +} diff --git a/tests/DOMPDFModuleTest/View/Model/PdfModelTest.php b/tests/DOMPDFModuleTest/View/Model/PdfModelTest.php new file mode 100644 index 0000000..eece70a --- /dev/null +++ b/tests/DOMPDFModuleTest/View/Model/PdfModelTest.php @@ -0,0 +1,77 @@ + + * @copyright Copyright (c) 2017 Raymond J. Kolbe + * @license http://www.opensource.org/licenses/mit-license.php MIT License + */ + +namespace DOMPDFModuleTest\View\Model; + +use DOMPDFModule\View\Model\PdfModel; + +class PdfModelTest extends \PHPUnit_Framework_TestCase +{ + /** + * System under test. + * + * @var PdfModel + */ + private $model; + + public function testItHasDefaultPaperSize() + { + $this->assertEquals('8x11', $this->model->getOption('paperSize')); + } + + public function testItHasDefaultPaperOrientation() + { + $this->assertEquals('portrait', $this->model->getOption('paperOrientation')); + } + + public function testItHasDefaultBasePath() + { + $this->assertEquals('/', $this->model->getOption('basePath')); + } + + public function testItHasDefaultFileName() + { + $this->assertEquals('untitled.pdf', $this->model->getOption('fileName')); + } + + public function testItHasDefaultDisplayOption() + { + $this->assertEquals(PdfModel::DISPLAY_INLINE, $this->model->getOption('display')); + } + + public function testItIsTerminal() + { + $this->assertTrue($this->model->terminate()); + } + + public function testItDoesNotHaveCaptureToVariable() + { + $this->assertNull($this->model->captureTo()); + } + + /** + * {@inheritdoc} + */ + protected function setUp() + { + parent::setUp(); + + $this->model = new PdfModel(); + } +} diff --git a/tests/DOMPDFModuleTest/View/Renderer/PdfRendererTest.php b/tests/DOMPDFModuleTest/View/Renderer/PdfRendererTest.php new file mode 100644 index 0000000..a6aa8b6 --- /dev/null +++ b/tests/DOMPDFModuleTest/View/Renderer/PdfRendererTest.php @@ -0,0 +1,116 @@ + + * @copyright Copyright (c) 2017 Raymond J. Kolbe + * @license http://www.opensource.org/licenses/mit-license.php MIT License + */ + +namespace DOMPDFModuleTest\View\Strategy; + +use Zend\View\Model\JsonModel; +use DOMPDFModuleTest\Framework\TestCase; +use DOMPDFModule\View\Model\PdfModel; +use DOMPDFModule\View\Renderer\PdfRenderer; + +class PdfRendererTest extends TestCase +{ + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $htmlRenderer; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $engine; + + /** + * @var \PHPUnit_Framework_MockObject_MockObject + */ + private $resolver; + + /** + * System under test. + * + * @var PdfRenderer + */ + private $renderer; + + public function testItHasAnHtmlRenderer() + { + $this->assertInstanceOf('Zend\View\Renderer\RendererInterface', $this->renderer->getHtmlRenderer()); + } + + public function testItHasAnEngine() + { + $this->assertInstanceOf('\Dompdf\Dompdf', $this->renderer->getEngine()); + } + + public function testItRendersAPdfModel() + { + $this->htmlRenderer->expects($this->once())->method('render'); + + $this->engine->expects($this->once())->method('setPaper'); + $this->engine->expects($this->once())->method('setBasePath'); + $this->engine->expects($this->once())->method('loadHtml'); + $this->engine->expects($this->once())->method('render'); + $this->engine->expects($this->once())->method('output'); + + $this->renderer->render(new PdfModel()); + } + + /** + * @expectedException \Zend\View\Exception\InvalidArgumentException + */ + public function testItDoesNotRenderOtherModels() + { + $this->htmlRenderer->expects($this->never())->method('render'); + + $this->engine->expects($this->never())->method('render'); + $this->engine->expects($this->never())->method('output'); + + $this->renderer->render(new JsonModel()); + } + + /** + * @expectedException \Zend\View\Exception\InvalidArgumentException + */ + public function testItDoesNotRenderNamedModels() + { + $this->htmlRenderer->expects($this->never())->method('render'); + + $this->engine->expects($this->never())->method('render'); + $this->engine->expects($this->never())->method('output'); + + $this->renderer->render('named-model'); + } + + /** + * {@inheritdoc} + */ + protected function setUp() + { + parent::setUp(); + + $this->htmlRenderer = $this->getMock('Zend\View\Renderer\RendererInterface'); + $this->resolver = $this->getMock('Zend\View\Resolver\ResolverInterface'); + $this->engine = $this->getMockBuilder('\Dompdf\Dompdf')->disableOriginalConstructor()->getMock(); + + $this->renderer = new PdfRenderer(); + $this->renderer->setHtmlRenderer($this->htmlRenderer); + $this->renderer->setResolver($this->resolver); + $this->renderer->setEngine($this->engine); + } +} diff --git a/tests/DOMPDFModuleTest/View/Service/DOMPDFTest.php b/tests/DOMPDFModuleTest/View/Service/DOMPDFTest.php deleted file mode 100644 index 9c3a2c3..0000000 --- a/tests/DOMPDFModuleTest/View/Service/DOMPDFTest.php +++ /dev/null @@ -1,16 +0,0 @@ -getServiceManager()->get('dompdf'); - $dompdfInstance2 = $this->getServiceManager()->get('dompdf'); - - $this->assertNotSame($dompdfInstance1, $dompdfInstance2); - } -} diff --git a/tests/DOMPDFModuleTest/View/Strategy/PdfStrategyTest.php b/tests/DOMPDFModuleTest/View/Strategy/PdfStrategyTest.php index df88d9f..7f545ee 100644 --- a/tests/DOMPDFModuleTest/View/Strategy/PdfStrategyTest.php +++ b/tests/DOMPDFModuleTest/View/Strategy/PdfStrategyTest.php @@ -1,7 +1,26 @@ + * @copyright Copyright (c) 2012 University of Maine, 2016 Raymond J. Kolbe + * @license http://www.opensource.org/licenses/mit-license.php MIT License + */ namespace DOMPDFModuleTest\View\Strategy; +use Zend\Stdlib\ResponseInterface; +use Zend\View\Model\ViewModel; use Zend\View\Resolver\TemplatePathStack; use Zend\View\Renderer\PhpRenderer; use Zend\View\ViewEvent; @@ -13,67 +32,170 @@ class PdfStrategyTest extends TestCase { - public function setUp() + /** + * @var ViewEvent + */ + private $event; + + /** + * @var PdfRenderer + */ + private $renderer; + + /** + * @var TemplatePathStack + */ + private $resolver; + + /** + * @var HttpResponse + */ + private $response; + + /** + * System under test. + * + * @var PdfStrategy + */ + private $strategy; + + public function testSelectsRendererWhenProvidedPdfModel() + { + $this->event->setModel(new PdfModel()); + $result = $this->strategy->selectRenderer($this->event); + $this->assertSame($this->renderer, $result); + } + + public function testDoesNotSelectRendererWhenNotProvidedPdfModel() + { + $this->event->setModel(new ViewModel()); + $result = $this->strategy->selectRenderer($this->event); + $this->assertNull($result); + } + + public function testDoesNotRenderPdfWhenRenderMismatch() + { + $this->event->setRenderer(new PhpRenderer()); + $result = $this->strategy->injectResponse($this->event); + $this->assertNull($result); + } + + public function testDoesNotRenderPdfWhenResultIsNotString() + { + $this->event->setRenderer($this->renderer); + $this->event->setResult(new \stdClass()); + + $result = $this->strategy->injectResponse($this->event); + + $this->assertNull($result); + } + + public function testItAddsApplicationPdfContentType() + { + $model = new PdfModel(); + $model->setTemplate('basic.phtml'); + + $this->execute($this->strategy, $this->event, $model); + + $response = $this->event->getResponse(); + $this->assertHeaderEqualTo( + $response, + 'Content-Type', + 'application/pdf', + 'content type' + ); + } + + public function testItAddsAttachmentDispositionType() + { + $model = new PdfModel(); + $model->setTemplate('basic.phtml'); + $model->setOption('fileName', 'testPdfFileName'); + $model->setOption('display', PdfModel::DISPLAY_ATTACHMENT); + + $this->execute($this->strategy, $this->event, $model); + + $response = $this->event->getResponse(); + $this->assertHeaderEqualTo( + $response, + 'Content-Disposition', + 'attachment; filename="testPdfFileName.pdf"', + 'content disposition' + ); + } + + public function testItAddsInlineDispositionType() + { + $model = new PdfModel(); + $model->setTemplate('basic.phtml'); + $model->setOption('fileName', 'testPdfFileName'); + $model->setOption('display', PdfModel::DISPLAY_INLINE); + + $this->execute($this->strategy, $this->event, $model); + + $response = $this->event->getResponse(); + $this->assertHeaderEqualTo( + $response, + 'Content-Disposition', + 'inline; filename="testPdfFileName.pdf"', + 'content disposition' + ); + } + + public function testItAddsContentLength() { + $model = new PdfModel(); + $model->setTemplate('basic.phtml'); + + $this->execute($this->strategy, $this->event, $model); + + $response = $this->event->getResponse(); + $this->assertHeaderEqualTo( + $response, + 'Content-Length', + 1148, + 'content length' + ); + } + + /** + * {@inheritdoc} + */ + protected function setUp() + { + parent::setUp(); + $this->renderer = new PdfRenderer(); $this->strategy = new PdfStrategy($this->renderer); $this->event = new ViewEvent(); $this->response = new HttpResponse(); - + $this->resolver = new TemplatePathStack(); $this->resolver->addPath(dirname(__DIR__) . '/_templates'); - + $this->renderer->setResolver($this->resolver); - + $htmlRenderer = new PhpRenderer(); $htmlRenderer->setResolver($this->resolver); $this->renderer->setHtmlRenderer($htmlRenderer); $this->renderer->setEngine($this->getServiceManager()->get('dompdf')); } - public function testPdfModelSelectsPdfStrategy() + private function execute(PdfStrategy $strategy, ViewEvent $event, PdfModel $model) { - $this->event->setModel(new PdfModel()); - $result = $this->strategy->selectRenderer($this->event); - $this->assertSame($this->renderer, $result); - } - - public function testContentTypeResponseHeader() - { - $model = new PdfModel(); - $model->setTemplate('basic.phtml'); - - $this->event->setModel($model); - $this->event->setResponse($this->response); - $this->event->setRenderer($this->renderer); - $this->event->setResult($this->renderer->render($model)); - - $this->strategy->injectResponse($this->event); - - $headers = $this->event->getResponse()->getHeaders(); - $contentTypeHeader = $headers->get('content-type'); - - $this->assertInstanceof('Zend\Http\Header\ContentType', $contentTypeHeader); - $this->assertEquals($contentTypeHeader->getFieldValue(), 'application/pdf'); + $event->setModel($model); + $event->setResponse($this->response); + $event->setRenderer($this->renderer); + $event->setResult($this->renderer->render($model)); + + $strategy->injectResponse($this->event); } - - public function testResponseHeadersWithFileName() + + private function assertHeaderEqualTo(ResponseInterface $response, $name, $expected, $message = '') { - $model = new PdfModel(); - $model->setTemplate('basic.phtml'); - $model->setOption('filename', 'testPdfFileName'); - - $this->event->setModel($model); - $this->event->setResponse($this->response); - $this->event->setRenderer($this->renderer); - $this->event->setResult($this->renderer->render($model)); - - $this->strategy->injectResponse($this->event); - - $headers = $this->event->getResponse()->getHeaders(); - $contentDispositionHeader = $headers->get('Content-Disposition'); - - $this->assertInstanceof('Zend\Http\Header\ContentDisposition', $contentDispositionHeader); - $this->assertEquals($contentDispositionHeader->getFieldValue(), 'attachment; filename=testPdfFileName.pdf'); + $headers = $response->getHeaders(); + $header = $headers->get($name); + + $this->assertEquals($header->getFieldValue(), $expected, $message); } } diff --git a/tests/TestConfiguration.php.dist b/tests/TestConfiguration.php.dist index 2d96f37..1035b1f 100644 --- a/tests/TestConfiguration.php.dist +++ b/tests/TestConfiguration.php.dist @@ -1,4 +1,24 @@ + * @copyright Copyright (c) 2012 University of Maine, 2016 Raymond J. Kolbe + * @license http://www.opensource.org/licenses/mit-license.php MIT License + */ + +define('DOMPDF_DIR', __DIR__ . '/../vendor/dompdf/dompdf'); + return array( 'modules' => array( 'DOMPDFModule', diff --git a/tests/phpunit.xml b/tests/phpunit.xml index f9d2ff7..8d59b01 100644 --- a/tests/phpunit.xml +++ b/tests/phpunit.xml @@ -1,11 +1,19 @@ ./ + + + ../src + + + + +