diff --git a/composer.json b/composer.json
index 37164c5..92831e5 100644
--- a/composer.json
+++ b/composer.json
@@ -4,7 +4,7 @@
"type": "drupal-core",
"license": "GPL-2.0+",
"require": {
- "php": ">5.4.4-13",
+ "php": ">5.4.5",
"sdboyer/gliph": "0.1.*",
"symfony/class-loader": "2.5.*",
"symfony/css-selector": "2.5.*",
@@ -23,6 +23,8 @@
"kriswallsmith/assetic": "1.1.*@alpha",
"symfony-cmf/routing": "1.2.*",
"easyrdf/easyrdf": "0.8.*",
+ "ocramius/proxy-manager": "0.5.*",
+ "symfony/proxy-manager-bridge": "2.5.*",
"phpunit/phpunit": "4.1.*",
"phpunit/phpunit-mock-objects": "dev-master#e60bb929c50ae4237aaf680a4f6773f4ee17f0a2",
"zendframework/zend-feed": "2.2.*",
diff --git a/composer.lock b/composer.lock
index 371f59e..30374d1 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "hash": "84084dce2bc995cf540fa58e5f3c796d",
+ "hash": "edda2f2d9298642b2e82d0b46f600db0",
"packages": [
{
"name": "doctrine/annotations",
@@ -736,6 +736,71 @@
"time": "2014-07-21 20:15:54"
},
{
+ "name": "ocramius/proxy-manager",
+ "version": "0.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Ocramius/ProxyManager.git",
+ "reference": "3b3b7101b1eea62afe039db50faee0d3a9e3e330"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/3b3b7101b1eea62afe039db50faee0d3a9e3e330",
+ "reference": "3b3b7101b1eea62afe039db50faee0d3a9e3e330",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "zendframework/zend-code": "2.*"
+ },
+ "require-dev": {
+ "phpmd/phpmd": "1.4.*",
+ "phpunit/phpunit": ">=3.7",
+ "satooshi/php-coveralls": "~0.6",
+ "squizlabs/php_codesniffer": "1.4.*"
+ },
+ "suggest": {
+ "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects",
+ "zendframework/zend-json": "To have the JsonRpc adapter (Remote Object feature)",
+ "zendframework/zend-soap": "To have the Soap adapter (Remote Object feature)",
+ "zendframework/zend-stdlib": "To use the hydrator proxy",
+ "zendframework/zend-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.5.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "ProxyManager\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "http://ocramius.github.com/",
+ "role": "Developer"
+ }
+ ],
+ "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies",
+ "homepage": "https://github.com/Ocramius/ProxyManager",
+ "keywords": [
+ "aop",
+ "lazy loading",
+ "proxy",
+ "proxy pattern",
+ "service proxies"
+ ],
+ "time": "2013-11-30 15:00:46"
+ },
+ {
"name": "phpunit/php-code-coverage",
"version": "2.0.8",
"source": {
@@ -2015,6 +2080,58 @@
"time": "2014-09-23 05:25:11"
},
{
+ "name": "symfony/proxy-manager-bridge",
+ "version": "v2.5.5",
+ "target-dir": "Symfony/Bridge/ProxyManager",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/ProxyManagerBridge.git",
+ "reference": "aea5f3f814221b2cd4eac6c8fd91fdee006c498a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/ProxyManagerBridge/zipball/aea5f3f814221b2cd4eac6c8fd91fdee006c498a",
+ "reference": "aea5f3f814221b2cd4eac6c8fd91fdee006c498a",
+ "shasum": ""
+ },
+ "require": {
+ "ocramius/proxy-manager": ">=0.3.1,<0.6-dev",
+ "php": ">=5.3.3",
+ "symfony/dependency-injection": "~2.3"
+ },
+ "require-dev": {
+ "symfony/config": "2.3"
+ },
+ "type": "symfony-bridge",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.5-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Symfony\\Bridge\\ProxyManager\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Symfony ProxyManager Bridge",
+ "homepage": "http://symfony.com",
+ "time": "2014-09-22 15:28:36"
+ },
+ {
"name": "symfony/routing",
"version": "v2.5.5",
"target-dir": "Symfony/Component/Routing",
@@ -2351,6 +2468,54 @@
"time": "2013-12-06 07:47:10"
},
{
+ "name": "zendframework/zend-code",
+ "version": "2.2.1",
+ "target-dir": "Zend/Code",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/zendframework/Component_ZendCode.git",
+ "reference": "83ef7d8bc1fbf08f6eec04215b2ba309e543a5fa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/zendframework/Component_ZendCode/zipball/83ef7d8bc1fbf08f6eec04215b2ba309e543a5fa",
+ "reference": "83ef7d8bc1fbf08f6eec04215b2ba309e543a5fa",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "zendframework/zend-eventmanager": "self.version"
+ },
+ "require-dev": {
+ "doctrine/common": ">=2.1"
+ },
+ "suggest": {
+ "doctrine/common": "Doctrine\\Common >=2.1 for annotation features"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.2-dev",
+ "dev-develop": "2.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Zend\\Code\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "provides facilities to generate arbitrary code using an object oriented interface",
+ "keywords": [
+ "code",
+ "zf2"
+ ],
+ "time": "2013-06-12 19:48:38"
+ },
+ {
"name": "zendframework/zend-escaper",
"version": "2.2.1",
"target-dir": "Zend/Escaper",
@@ -2391,6 +2556,47 @@
"time": "2013-05-01 21:53:03"
},
{
+ "name": "zendframework/zend-eventmanager",
+ "version": "2.2.1",
+ "target-dir": "Zend/EventManager",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/zendframework/Component_ZendEventManager.git",
+ "reference": "f325feef4e1a19b873936e5b116980fbe88dd176"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/zendframework/Component_ZendEventManager/zipball/f325feef4e1a19b873936e5b116980fbe88dd176",
+ "reference": "f325feef4e1a19b873936e5b116980fbe88dd176",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "zendframework/zend-stdlib": "self.version"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.2-dev",
+ "dev-develop": "2.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Zend\\EventManager\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "keywords": [
+ "eventmanager",
+ "zf2"
+ ],
+ "time": "2013-06-12 19:45:10"
+ },
+ {
"name": "zendframework/zend-feed",
"version": "2.2.1",
"target-dir": "Zend/Feed",
@@ -2498,7 +2704,7 @@
},
"prefer-stable": false,
"platform": {
- "php": ">=5.4.2"
+ "php": ">5.4.5"
},
"platform-dev": [
diff --git a/core/core.services.yml b/core/core.services.yml
index 1d9b2d2..72713ae 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -201,6 +201,7 @@ services:
logger.factory:
class: Drupal\Core\Logger\LoggerChannelFactory
parent: container.trait
+ lazy: true
tags:
- { name: service_collector, tag: logger, call: addLogger }
logger.channel_base:
@@ -208,23 +209,30 @@ services:
class: Drupal\Core\Logger\LoggerChannel
factory_method: get
factory_service: logger.factory
+ lazy: true
logger.channel.default:
parent: logger.channel_base
arguments: ['system']
+ lazy: true
logger.channel.php:
parent: logger.channel_base
arguments: ['php']
+ lazy: true
logger.channel.image:
parent: logger.channel_base
arguments: ['image']
+ lazy: true
logger.channel.cron:
parent: logger.channel_base
arguments: ['cron']
+ lazy: true
logger.channel.form:
parent: logger.channel_base
arguments: ['form']
+ lazy: true
logger.log_message_parser:
class: Drupal\Core\Logger\LogMessageParser
+ lazy: true
serialization.json:
class: Drupal\Component\Serialization\Json
@@ -448,6 +456,7 @@ services:
lock:
class: Drupal\Core\Lock\DatabaseLockBackend
arguments: ['@database']
+ lazy: true
tags:
- { name: backend_overridable }
router.request_context:
diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php
index 6a9b78d..cf09c14 100644
--- a/core/lib/Drupal/Core/DrupalKernel.php
+++ b/core/lib/Drupal/Core/DrupalKernel.php
@@ -22,6 +22,7 @@
use Drupal\Core\PageCache\RequestPolicyInterface;
use Drupal\Core\PhpStorage\PhpStorageFactory;
use Drupal\Core\Site\Settings;
+use Symfony\Bridge\ProxyManager\LazyProxy\PhpDumper\ProxyDumper;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
@@ -1135,6 +1136,9 @@ protected function dumpDrupalContainer(ContainerBuilder $container, $baseClass)
}
// Cache the container.
$dumper = new PhpDumper($container);
+ $proxy_dumper = new ProxyDumper();
+ $dumper->setProxyDumper($proxy_dumper);
+
$class = $this->getClassName();
$content = $dumper->dump(array('class' => $class, 'base_class' => $baseClass));
return $this->storage()->save($class . '.php', $content);
diff --git a/core/vendor/composer/autoload_namespaces.php b/core/vendor/composer/autoload_namespaces.php
index 50cec57..c4e45ba 100644
--- a/core/vendor/composer/autoload_namespaces.php
+++ b/core/vendor/composer/autoload_namespaces.php
@@ -9,7 +9,9 @@
'org\\bovigo\\vfs\\' => array($vendorDir . '/mikey179/vfsStream/src/main/php'),
'Zend\\Stdlib\\' => array($vendorDir . '/zendframework/zend-stdlib'),
'Zend\\Feed\\' => array($vendorDir . '/zendframework/zend-feed'),
+ 'Zend\\EventManager\\' => array($vendorDir . '/zendframework/zend-eventmanager'),
'Zend\\Escaper\\' => array($vendorDir . '/zendframework/zend-escaper'),
+ 'Zend\\Code\\' => array($vendorDir . '/zendframework/zend-code'),
'Twig_' => array($vendorDir . '/twig/twig/lib'),
'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'),
'Symfony\\Component\\Validator\\' => array($vendorDir . '/symfony/validator'),
@@ -25,8 +27,10 @@
'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'),
'Symfony\\Component\\ClassLoader\\' => array($vendorDir . '/symfony/class-loader'),
'Symfony\\Cmf\\Component\\Routing' => array($vendorDir . '/symfony-cmf/routing'),
+ 'Symfony\\Bridge\\ProxyManager\\' => array($vendorDir . '/symfony/proxy-manager-bridge'),
'Stack' => array($vendorDir . '/stack/builder/src'),
'Psr\\Log\\' => array($vendorDir . '/psr/log'),
+ 'ProxyManager\\' => array($vendorDir . '/ocramius/proxy-manager/src'),
'Gliph' => array($vendorDir . '/sdboyer/gliph/src'),
'Egulias\\' => array($vendorDir . '/egulias/email-validator/src'),
'EasyRdf_' => array($vendorDir . '/easyrdf/easyrdf/lib'),
diff --git a/core/vendor/composer/installed.json b/core/vendor/composer/installed.json
index 5623c7f..e05fbc1 100644
--- a/core/vendor/composer/installed.json
+++ b/core/vendor/composer/installed.json
@@ -2564,5 +2564,219 @@
],
"description": "Symfony Yaml Component",
"homepage": "http://symfony.com"
+ },
+ {
+ "name": "zendframework/zend-eventmanager",
+ "version": "2.2.1",
+ "version_normalized": "2.2.1.0",
+ "target-dir": "Zend/EventManager",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/zendframework/Component_ZendEventManager.git",
+ "reference": "f325feef4e1a19b873936e5b116980fbe88dd176"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/zendframework/Component_ZendEventManager/zipball/f325feef4e1a19b873936e5b116980fbe88dd176",
+ "reference": "f325feef4e1a19b873936e5b116980fbe88dd176",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "zendframework/zend-stdlib": "self.version"
+ },
+ "time": "2013-06-12 19:45:10",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.2-dev",
+ "dev-develop": "2.3-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "Zend\\EventManager\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "keywords": [
+ "eventmanager",
+ "zf2"
+ ]
+ },
+ {
+ "name": "zendframework/zend-code",
+ "version": "2.2.1",
+ "version_normalized": "2.2.1.0",
+ "target-dir": "Zend/Code",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/zendframework/Component_ZendCode.git",
+ "reference": "83ef7d8bc1fbf08f6eec04215b2ba309e543a5fa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/zendframework/Component_ZendCode/zipball/83ef7d8bc1fbf08f6eec04215b2ba309e543a5fa",
+ "reference": "83ef7d8bc1fbf08f6eec04215b2ba309e543a5fa",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "zendframework/zend-eventmanager": "self.version"
+ },
+ "require-dev": {
+ "doctrine/common": ">=2.1"
+ },
+ "suggest": {
+ "doctrine/common": "Doctrine\\Common >=2.1 for annotation features"
+ },
+ "time": "2013-06-12 19:48:38",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.2-dev",
+ "dev-develop": "2.3-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "Zend\\Code\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "provides facilities to generate arbitrary code using an object oriented interface",
+ "keywords": [
+ "code",
+ "zf2"
+ ]
+ },
+ {
+ "name": "ocramius/proxy-manager",
+ "version": "0.5.0",
+ "version_normalized": "0.5.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Ocramius/ProxyManager.git",
+ "reference": "3b3b7101b1eea62afe039db50faee0d3a9e3e330"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/3b3b7101b1eea62afe039db50faee0d3a9e3e330",
+ "reference": "3b3b7101b1eea62afe039db50faee0d3a9e3e330",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "zendframework/zend-code": "2.*"
+ },
+ "require-dev": {
+ "phpmd/phpmd": "1.4.*",
+ "phpunit/phpunit": ">=3.7",
+ "satooshi/php-coveralls": "~0.6",
+ "squizlabs/php_codesniffer": "1.4.*"
+ },
+ "suggest": {
+ "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects",
+ "zendframework/zend-json": "To have the JsonRpc adapter (Remote Object feature)",
+ "zendframework/zend-soap": "To have the Soap adapter (Remote Object feature)",
+ "zendframework/zend-stdlib": "To use the hydrator proxy",
+ "zendframework/zend-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)"
+ },
+ "time": "2013-11-30 15:00:46",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.5.x-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "ProxyManager\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "http://ocramius.github.com/",
+ "role": "Developer"
+ }
+ ],
+ "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies",
+ "homepage": "https://github.com/Ocramius/ProxyManager",
+ "keywords": [
+ "aop",
+ "lazy loading",
+ "proxy",
+ "proxy pattern",
+ "service proxies"
+ ]
+ },
+ {
+ "name": "symfony/proxy-manager-bridge",
+ "version": "v2.5.5",
+ "version_normalized": "2.5.5.0",
+ "target-dir": "Symfony/Bridge/ProxyManager",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/ProxyManagerBridge.git",
+ "reference": "aea5f3f814221b2cd4eac6c8fd91fdee006c498a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/ProxyManagerBridge/zipball/aea5f3f814221b2cd4eac6c8fd91fdee006c498a",
+ "reference": "aea5f3f814221b2cd4eac6c8fd91fdee006c498a",
+ "shasum": ""
+ },
+ "require": {
+ "ocramius/proxy-manager": ">=0.3.1,<0.6-dev",
+ "php": ">=5.3.3",
+ "symfony/dependency-injection": "~2.3"
+ },
+ "require-dev": {
+ "symfony/config": "2.3"
+ },
+ "time": "2014-09-22 15:28:36",
+ "type": "symfony-bridge",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.5-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "Symfony\\Bridge\\ProxyManager\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Symfony ProxyManager Bridge",
+ "homepage": "http://symfony.com"
}
]
diff --git a/core/vendor/ocramius/proxy-manager/.scrutinizer.yml b/core/vendor/ocramius/proxy-manager/.scrutinizer.yml
new file mode 100644
index 0000000..095ce35
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/.scrutinizer.yml
@@ -0,0 +1,39 @@
+before_commands:
+ - "composer install --no-dev --prefer-source"
+
+tools:
+ php_code_coverage:
+ enabled: true
+ test_command: phpunit -c phpunit.xml.dist --exclude-group Functional,Performance
+ #filter:
+ #paths: ["src"]
+ php_code_sniffer:
+ enabled: true
+ config:
+ standard: PSR2
+ filter:
+ paths: ["src/*", "tests/*"]
+ php_cpd:
+ enabled: true
+ excluded_dirs: ["build/*", "docs", "examples", "tests", "vendor"]
+ php_cs_fixer:
+ enabled: true
+ config:
+ level: all
+ filter:
+ paths: ["src/*", "tests/*"]
+ php_loc:
+ enabled: true
+ excluded_dirs: ["build", "docs", "examples", "tests", "vendor"]
+ php_mess_detector:
+ enabled: true
+ filter:
+ paths: ["src/*"]
+ php_pdepend:
+ enabled: true
+ excluded_dirs: ["build", "docs", "examples", "tests", "vendor"]
+ php_analyzer: true
+ php_analyzer:
+ filter:
+ paths: ["src/*", "tests/*", "examples/*"]
+ sensiolabs_security_checker: true
diff --git a/core/vendor/ocramius/proxy-manager/.travis.yml b/core/vendor/ocramius/proxy-manager/.travis.yml
new file mode 100644
index 0000000..ef9de34
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/.travis.yml
@@ -0,0 +1,20 @@
+language: php
+
+php:
+ - 5.3.3
+ - 5.3
+ - 5.4
+ - 5.5
+
+before_script:
+ - composer self-update
+ - composer update --prefer-source; composer install --dev --prefer-source;
+
+script:
+ - ./vendor/bin/phpunit --coverage-clover ./build/logs/clover.xml --exclude-group Performance
+ - ./vendor/bin/phpunit ./tests/language-feature-scripts/
+ - php -n ./vendor/bin/phpunit --group=Performance
+ - ./vendor/bin/phpcs --standard=PSR2 ./src/ ./tests/
+
+after_script:
+ - php vendor/bin/coveralls -v
diff --git a/core/vendor/ocramius/proxy-manager/CONTRIBUTING.md b/core/vendor/ocramius/proxy-manager/CONTRIBUTING.md
new file mode 100644
index 0000000..d07d8dc
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/CONTRIBUTING.md
@@ -0,0 +1,35 @@
+# Contributing
+
+ * Coding standard for the project is [PSR-2](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)
+ * The project will follow strict [object calisthenics](http://www.slideshare.net/guilhermeblanco/object-calisthenics-applied-to-php)
+ * Any contribution must provide tests for additional introduced conditions
+ * Any un-confirmed issue needs a failing test case before being accepted
+ * Pull requests must be sent from a new hotfix/feature branch, not from `master`.
+
+## Installation
+
+To install the project and run the tests, you need to clone it first:
+
+```sh
+$ git clone git://github.com/Ocramius/ProxyManager.git
+```
+
+You will then need to run a composer installation:
+
+```sh
+$ cd ProxyManager
+$ curl -s https://getcomposer.org/installer | php
+$ php composer.phar update
+```
+
+## Testing
+
+The PHPUnit version to be used is the one installed as a dev- dependency via composer:
+
+```sh
+$ ./vendor/bin/phpunit
+```
+
+Accepted coverage for new contributions is 80%. Any contribution not satisfying this requirement
+won't be merged.
+
diff --git a/core/vendor/ocramius/proxy-manager/LICENSE b/core/vendor/ocramius/proxy-manager/LICENSE
new file mode 100644
index 0000000..49adae0
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2013 Marco Pivetta
+
+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/core/vendor/ocramius/proxy-manager/README.md b/core/vendor/ocramius/proxy-manager/README.md
new file mode 100644
index 0000000..e7f9944
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/README.md
@@ -0,0 +1,193 @@
+# Proxy Manager
+
+This library aims at providing abstraction for generating various kinds of [proxy classes](http://marco-pivetta.com/proxy-pattern-in-php/).
+
+![ProxyManager](proxy-manager.png)
+
+[![Build Status](https://travis-ci.org/Ocramius/ProxyManager.png?branch=master)](https://travis-ci.org/Ocramius/ProxyManager)
+[![Coverage Status](https://coveralls.io/repos/Ocramius/ProxyManager/badge.png?branch=master)](https://coveralls.io/r/Ocramius/ProxyManager)
+[![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/Ocramius/ProxyManager/badges/quality-score.png?s=eaa858f876137ed281141b1d1e98acfa739729ed)](https://scrutinizer-ci.com/g/Ocramius/ProxyManager/)
+[![Total Downloads](https://poser.pugx.org/ocramius/proxy-manager/downloads.png)](https://packagist.org/packages/ocramius/proxy-manager)
+[![Latest Stable Version](https://poser.pugx.org/ocramius/proxy-manager/v/stable.png)](https://packagist.org/packages/ocramius/proxy-manager)
+[![Latest Unstable Version](https://poser.pugx.org/ocramius/proxy-manager/v/unstable.png)](https://packagist.org/packages/ocramius/proxy-manager)
+[![Dependency Status](https://www.versioneye.com/package/php--ocramius--proxy-manager/badge.png)](https://www.versioneye.com/package/php--ocramius--proxy-manager)
+
+## Installation
+
+The suggested installation method is via [composer](https://getcomposer.org/):
+
+```sh
+php composer.phar require ocramius/proxy-manager:0.5.*
+```
+
+## Lazy Loading Value Holders (Virtual Proxy)
+
+ProxyManager can generate [lazy loading value holders](http://www.martinfowler.com/eaaCatalog/lazyLoad.html),
+which are virtual proxies capable of saving performance and memory for objects that require a lot of dependencies or
+CPU cycles to be loaded: particularly useful when you may not always need the object, but are constructing it anyways.
+
+```php
+$factory = new \ProxyManager\Factory\LazyLoadingValueHolderFactory();
+
+$proxy = $factory->createProxy(
+ 'MyApp\HeavyComplexObject',
+ function (& $wrappedObject, $proxy, $method, $parameters, & $initializer) {
+ $wrappedObject = new HeavyComplexObject(); // instantiation logic here
+ $initializer = null; // turning off further lazy initialization
+
+ return true;
+ }
+);
+
+$proxy->doFoo();
+```
+
+See the [complete documentation about lazy loading value holders](/docs/lazy-loading-value-holder.md)
+in the `docs/` directory.
+
+## Access Interceptor Value Holder
+
+An access interceptor value holder is a smart reference that allows you to execute logic before
+and after a particular method is executed or a particular property is accessed, and it allows to
+manipulate parameters and return values depending on your needs.
+
+```php
+$factory = new \ProxyManager\Factory\AccessInterceptorValueHolderFactory();
+
+$proxy = $factory->createProxy(
+ new \My\Db\Connection(),
+ array('query' => function () { echo "Query being executed!\n"; }),
+ array('query' => function () { echo "Query completed!\n"; })
+);
+
+$proxy->query(); // produces "Query being executed!\nQuery completed!\n"
+```
+
+See the [complete documentation about access interceptor value holders](/docs/access-interceptor-value-holder.md)
+in the `docs/` directory.
+
+## Access Interceptor Scope Localizer
+
+An access interceptor scope localizer works exactly like an access interceptor value holder,
+but it is safe to use to proxy fluent interfaces.
+
+See the [complete documentation about access interceptor scope localizer](/docs/access-interceptor-scope-localizer.md)
+in the `docs/` directory.
+
+## Null Objects
+
+A Null Object proxy implements the [null object pattern](http://en.wikipedia.org/wiki/Null_Object_pattern).
+
+This kind of proxr allows you to have fallback logic in case loading of the wrapped value failed.
+
+```php
+$factory = new \ProxyManager\Factory\NullObjectFactory();
+
+$proxy = $factory->createProxy('My\EntityObject');
+
+$proxy->getName(); // empty return
+```
+
+A Null Object Proxy can be created from an object, a class name or an interface name:
+
+```php
+$factory = new \ProxyManager\Factory\NullObjectFactory();
+
+$proxy = $factory->createProxy('My\EntityObjectInterface'); // created from interface name
+$proxy->getName(); // empty return
+
+$proxy = $factory->createProxy($entity); // created from object
+$proxy->getName(); // empty return
+```
+
+See the [complete documentation about null object proxy](/docs/null-object.md)
+in the `docs/` directory.
+
+## Ghost Objects
+
+
+Similar to value holder, a ghost object is usually created to handle lazy loading.
+
+The difference between a value holder and a ghost object is that the ghost object does not contain a real instance of
+the required object, but handles lazy loading by initializing its own inherited properties.
+
+ProxyManager can generate [lazy loading ghost objects](http://www.martinfowler.com/eaaCatalog/lazyLoad.html),
+which are proxies used to save performance and memory for large datasets and graphs representing relational data.
+Ghost objects are particularly useful when building data-mappers.
+
+Additionally, the overhead introduced by ghost objects is very low when compared to the memory and performance overhead
+caused by virtual proxies.
+
+```php
+$factory = new \ProxyManager\Factory\LazyLoadingGhostFactory();
+
+$proxy = $factory->createProxy(
+ 'MyApp\HeavyComplexObject',
+ function ($proxy, $method, $parameters, & $initializer) {
+ $initializer = null; // turning off further lazy initialization
+
+ // modify the proxy instance
+ $proxy->setFoo('foo');
+ $proxy->setBar('bar');
+
+ return true;
+ }
+);
+
+$proxy->doFoo();
+```
+
+See the [complete documentation about lazy loading ghost objects](/docs/lazy-loading-ghost-object.md)
+in the `docs/` directory.
+
+This feature is [planned](https://github.com/Ocramius/ProxyManager/issues/6).
+
+## Lazy References
+
+A lazy reference proxy is actually a proxy backed by some kind of reference holder (usually a registry) that can fetch
+existing instances of a particular object.
+
+A lazy reference is usually necessary when multiple instances of the same object can be avoided, or when the instances
+are not hard links (like with [Weakref](http://php.net/manual/en/book.weakref.php)), and could be garbage-collected to
+save memory in long time running processes.
+
+This feature [yet to be planned](https://github.com/Ocramius/ProxyManager/issues/8).
+
+## Remote Object
+
+A remote object proxy is an object that is located on a different system, but is used as if it was available locally.
+There's various possible remote proxy implementations, which could be based on xmlrpc/jsonrpc/soap/dnode/etc.
+
+This example uses the XML-RPC client of Zend Framework 2:
+
+```php
+interface FooServiceInterface
+{
+ public function foo();
+}
+
+$factory = new \ProxyManager\Factory\RemoteObjectFactory(
+ new \ProxyManager\Factory\RemoteObject\Adapter\XmlRpc(
+ new \Zend\XmlRpc\Client('https://example.com/rpc-endpoint')
+ )
+);
+
+// proxy is your remote implementation
+$proxy = $factory->createProxy('FooServiceInterface');
+
+var_dump($proxy->foo());
+```
+
+See the [complete documentation about remote objects](https://github.com/Ocramius/ProxyManager/tree/master/docs/remote-object.md)
+in the `docs/` directory.
+
+## Contributing
+
+Please read the [CONTRIBUTING.md](https://github.com/Ocramius/ProxyManager/blob/master/CONTRIBUTING.md) contents if you
+wish to help out!
+
+## Credits
+
+The idea was originated by a [talk about Proxies in PHP OOP](http://marco-pivetta.com/proxy-pattern-in-php/) that I gave
+at the [@phpugffm](https://twitter.com/phpugffm) in January 2013.
+
diff --git a/core/vendor/ocramius/proxy-manager/UPGRADE.md b/core/vendor/ocramius/proxy-manager/UPGRADE.md
new file mode 100644
index 0000000..d0de61d
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/UPGRADE.md
@@ -0,0 +1,69 @@
+This is a list of backwards compatibility (BC) breaks introduced in ProxyManager:
+
+# 0.5.0
+
+ * The Generated Hydrator has been removed - it is now available as a separate project
+ at [Ocramius/GeneratedHydrator](https://github.com/Ocramius/GeneratedHydrator) [#65](https://github.com/Ocramius/ProxyManager/pull/65)
+ * When having a `public function __get($name)` defined (by-val) and public properties, it won't be possible to get public
+ properties by-ref while initializing the object. Either drop `__get()` or implement
+ a by-ref `& __get()` [#126](https://github.com/Ocramius/ProxyManager/pull/126)
+ * Proxies are now being always auto-generated if they could not be autoloaded by a factory. The methods
+ [`ProxyManager\Configuration#setAutoGenerateProxies()`](https://github.com/Ocramius/ProxyManager/blob/0.5.0-BETA2/src/ProxyManager/Configuration.php#L67)
+ and [`ProxyManager\Configuration#doesAutoGenerateProxies()`](https://github.com/Ocramius/ProxyManager/blob/0.5.0-BETA2/src/ProxyManager/Configuration.php#L75)
+ are now no-op and deprecated, and will be removed in the next minor
+ version [#87](https://github.com/Ocramius/ProxyManager/pull/87) [#90](https://github.com/Ocramius/ProxyManager/pull/90)
+ * Proxy public properties defaults are now set before initialization [#116](https://github.com/Ocramius/ProxyManager/pull/116) [#122](https://github.com/Ocramius/ProxyManager/pull/122)
+
+# 0.4.0
+
+ * An optional parameter `$options` was introduced
+ in [`ProxyManager\Inflector\ClassNameInflectorInterface#getProxyClassName($className, array $options = array())`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Inflector/ClassNameInflectorInterface.php)
+ parametrize the generated class name as of [#10](https://github.com/Ocramius/ProxyManager/pull/10)
+ and [#59](https://github.com/Ocramius/ProxyManager/pull/59)
+ * Generated hydrators no longer have constructor arguments. Any required reflection instantiation is now dealt with
+ in the hydrator internally as of [#63](https://github.com/Ocramius/ProxyManager/pull/63)
+
+# 0.3.4
+
+ * Interface names are also supported for proxy generation as of [#40](https://github.com/Ocramius/ProxyManager/pull/40)
+
+# 0.3.3
+
+ * [Generated hydrators](https://github.com/Ocramius/ProxyManager/tree/master/docs/generated-hydrator.md) were introduced
+
+# 0.3.2
+
+ * An additional (optional) [by-ref parameter was added](https://github.com/Ocramius/ProxyManager/pull/31)
+ to the lazy loading proxies' initializer to allow unsetting the initializer with less overhead.
+
+# 0.3.0
+
+ * Dependency to [jms/cg](https://github.com/schmittjoh/cg-library) removed
+ * Moved code generation logic to [`Zend\Code`](https://github.com/zendframework/zf2)
+ * Added method [`ProxyManager\Inflector\ClassNameInflectorInterface#isProxyClassName($className)`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Inflector/ClassNameInflectorInterface.php)
+ * The constructor of [`ProxyManager\Autoloader\Autoloader`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Autoloader/Autoloader.php)
+ changed from `__construct(\ProxyManager\FileLocator\FileLocatorInterface $fileLocator)` to
+ `__construct(\ProxyManager\FileLocator\FileLocatorInterface $fileLocator, \ProxyManager\Inflector\ClassNameInflectorInterface $classNameInflector)`
+ * Classes implementing `CG\Core\GeneratorStrategyInterface` now implement
+ [`ProxyManager\GeneratorStrategy\GeneratorStrategyInterface`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/GeneratorStrategy/GeneratorStrategyInterface.php)
+ instead
+ * All code generation logic has been replaced - If you wrote any logic based on `ProxyManager\ProxyGenerator`, you will
+ have to rewrite it
+
+# 0.2.0
+
+ * The signature of initializers to be used with proxies implementing
+ [`ProxyManager\Proxy\LazyLoadingInterface`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Proxy/LazyLoadingInterface.php)
+ changed from:
+
+ ```php
+ $initializer = function ($proxy, & $wrappedObject, $method, $parameters) {};
+ ```
+
+ to
+
+ ```php
+ $initializer = function (& $wrappedObject, $proxy, $method, $parameters) {};
+ ```
+
+ Only the order of parameters passed to the closures has been changed.
diff --git a/core/vendor/ocramius/proxy-manager/build/.gitignore b/core/vendor/ocramius/proxy-manager/build/.gitignore
new file mode 100644
index 0000000..6d8e8bf
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/build/.gitignore
@@ -0,0 +1,4 @@
+*
+!logs
+!.gitignore
+!coverage-checker.php
\ No newline at end of file
diff --git a/core/vendor/ocramius/proxy-manager/composer.json b/core/vendor/ocramius/proxy-manager/composer.json
new file mode 100644
index 0000000..3b58c27
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/composer.json
@@ -0,0 +1,49 @@
+{
+ "name": "ocramius/proxy-manager",
+ "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies",
+ "type": "library",
+ "license": "MIT",
+ "homepage": "https://github.com/Ocramius/ProxyManager",
+ "minimum-stability": "dev",
+ "keywords": [
+ "proxy",
+ "proxy pattern",
+ "service proxies",
+ "lazy loading",
+ "aop"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "http://ocramius.github.com/"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.3",
+ "zendframework/zend-code": "2.*"
+ },
+ "require-dev": {
+ "phpunit/phpunit": ">=3.7",
+ "phpmd/phpmd": "1.4.*",
+ "squizlabs/php_codesniffer": "1.4.*",
+ "satooshi/php-coveralls": "~0.6"
+ },
+ "suggest": {
+ "zendframework/zend-stdlib": "To use the hydrator proxy",
+ "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects",
+ "zendframework/zend-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)",
+ "zendframework/zend-json": "To have the JsonRpc adapter (Remote Object feature)",
+ "zendframework/zend-soap": "To have the Soap adapter (Remote Object feature)"
+ },
+ "autoload": {
+ "psr-0": {
+ "ProxyManager\\": "src"
+ }
+ },
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.5.x-dev"
+ }
+ }
+}
diff --git a/core/vendor/ocramius/proxy-manager/docs/access-interceptor-scope-localizer.md b/core/vendor/ocramius/proxy-manager/docs/access-interceptor-scope-localizer.md
new file mode 100644
index 0000000..040ed8e
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/docs/access-interceptor-scope-localizer.md
@@ -0,0 +1,105 @@
+# Access Interceptor Scope Localizer Proxy
+
+An access interceptor scope localizer is a smart reference proxy that allows you to dynamically
+define logic to be executed before or after any of the proxied object's methods' logic.
+
+It works exactly like the [access interceptor value holder](access-interceptor-value-holder.md),
+with some minor differences in behavior.
+
+The working concept of an access interceptor scope localizer is to localize scope of a proxied object:
+
+```php
+class Example
+{
+ protected $foo;
+ protected $bar;
+ protected $baz;
+
+ public function doFoo()
+ {
+ // ...
+ }
+}
+
+class ExampleProxy extends Example
+{
+ public function __construct(Example $example)
+ {
+ $this->foo = & $example->foo;
+ $this->bar = & $example->bar;
+ $this->baz = & $example->baz;
+ }
+
+ public function doFoo()
+ {
+ return parent::doFoo();
+ }
+}
+```
+
+This allows to create a mirror copy of the real instance, where any change in the proxy or in the real
+instance is reflected in both objects.
+
+The main advantage of this approach is that the proxy is now safe against fluent interfaces, which
+would break an [access interceptor value holder](access-interceptor-value-holder.md) instead.
+
+## Differences with [access interceptor value holder](access-interceptor-value-holder.md):
+
+ * It does **NOT** implement the `ProxyManager\Proxy\ValueHolderInterface`, since the proxy itself
+ does not keep a reference to the original object being proxied
+ * In all interceptor methods (see [access interceptor value holder](access-interceptor-value-holder.md)),
+ the `$instance` passed in is the proxy itself. There is no way to gather a reference to the
+ original object right now, and that's mainly to protect from misuse.
+
+## Known limitations
+
+ * It is **NOT** possible to intercept access to public properties
+ * It is **NOT** possible to proxy interfaces, since this proxy relies on `parent::method()` calls.
+ Interfaces obviously don't provide a parent method implementation.
+ * calling `unset` on a property of an access interceptor scope localizer (or the real instance)
+ will cause the two objects to be un-synchronized, with possible unexpected behaviour.
+ * serializing or un-serializing an access interceptor scope localizer (or the real instance)
+ will not cause the real instance (or the proxy) to be serialized or un-serialized
+ * if a proxied object contains private properties, then an exception will be thrown if you use
+ PHP `< 5.4.0`.
+
+## Example
+
+Here's an example of how you can create and use an access interceptor value holder:
+
+```php
+createProxy(
+ new Foo(),
+ array('doFoo' => function () { echo "PreFoo!\n"; }),
+ array('doFoo' => function () { echo "PostFoo!\n"; })
+);
+
+$proxy->doFoo();
+```
+
+This send something like following to your output:
+
+```
+PreFoo!
+Foo!
+PostFoo!
+```
+
+This is pretty much the same logic that you can find
+in [access interceptor value holder](access-interceptor-value-holder.md).
diff --git a/core/vendor/ocramius/proxy-manager/docs/access-interceptor-value-holder.md b/core/vendor/ocramius/proxy-manager/docs/access-interceptor-value-holder.md
new file mode 100644
index 0000000..e47e941
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/docs/access-interceptor-value-holder.md
@@ -0,0 +1,108 @@
+# Access Interceptor Value Holder Proxy
+
+An access interceptor value holder is a smart reference proxy that allows you to dynamically
+define logic to be executed before or after any of the wrapped object's methods
+logic.
+
+It wraps around a real instance of the object to be proxied, and can be useful for things like:
+
+ * caching execution of slow and heavy methods
+ * log method calls
+ * debugging
+ * event triggering
+ * handling of orthogonal logic, and [AOP](http://en.wikipedia.org/wiki/Aspect-oriented_programming) in general
+
+## Example
+
+Here's an example of how you can create and use an access interceptor value holder:
+
+```php
+createProxy(
+ new Foo(),
+ array('doFoo' => function () { echo "PreFoo!\n"; }),
+ array('doFoo' => function () { echo "PostFoo!\n"; })
+);
+
+$proxy->doFoo();
+```
+
+This send something like following to your output:
+
+```
+PreFoo!
+Foo!
+PostFoo!
+```
+
+## Implementing pre- and post- access interceptors
+
+A proxy produced by the
+[`ProxyManager\Factory\AccessInterceptorValueHolderFactory`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Factory/AccessInterceptorValueHolderFactory.php)
+implements both the
+[`ProxyManager\Proxy\ValueHolderInterface`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Proxy/ValueHolderInterface.php)
+and the
+[`ProxyManager\Proxy\AccessInterceptorInterface`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Proxy/ValueHolderInterface.php).
+
+Therefore, you can set an access interceptor callback by calling:
+
+```php
+$proxy->setMethodPrefixInterceptor('methodName', function () { echo 'pre'; });
+$proxy->setMethodSuffixInterceptor('methodName', function () { echo 'post'; });
+```
+
+You can also listen to public properties access by attaching interceptors to `__get`, `__set`, `__isset` and `__unset`.
+
+A prefix interceptor (executed before method logic) should have following signature:
+
+```php
+/**
+ * @var object $proxy the proxy that intercepted the method call
+ * @var object $instance the wrapped instance within the proxy
+ * @var string $method name of the called method
+ * @var array $params sorted array of parameters passed to the intercepted
+ * method, indexed by parameter name
+ * @var bool $returnEarly flag to tell the interceptor proxy to return early, returning
+ * the interceptor's return value instead of executing the method logic
+ *
+ * @return mixed
+ */
+$prefixInterceptor = function ($proxy, $instance, $method, $params, & $returnEarly) {};
+```
+
+A suffix interceptor (executed after method logic) should have following signature:
+
+```php
+/**
+ * @var object $proxy the proxy that intercepted the method call
+ * @var object $instance the wrapped instance within the proxy
+ * @var string $method name of the called method
+ * @var array $params sorted array of parameters passed to the intercepted
+ * method, indexed by parameter name
+ * @var mixed $returnValue the return value of the intercepted method
+ * @var bool $returnEarly flag to tell the proxy to return early, returning the interceptor's
+ * return value instead of the value produced by the method
+ *
+ * @return mixed
+ */
+$suffixInterceptor = function ($proxy, $instance, $method, $params, $returnValue, & $returnEarly) {};
+```
+
+## Tuning performance for production
+
+See [Tuning ProxyManager for Production](https://github.com/Ocramius/ProxyManager/blob/master/docs/tuning-for-production.md).
\ No newline at end of file
diff --git a/core/vendor/ocramius/proxy-manager/docs/generator-strategies.md b/core/vendor/ocramius/proxy-manager/docs/generator-strategies.md
new file mode 100644
index 0000000..e4022d5
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/docs/generator-strategies.md
@@ -0,0 +1,16 @@
+# Generator strategies
+
+ProxyManager allows you to generate classes based on generator strategies and a
+given `Zend\Code\Generator\ClassGenerator` as of
+the [interface of a generator strategy](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/GeneratorStrategy/GeneratorStrategyInterface.php).
+
+Currently, 3 generator strategies are shipped with ProxyManager:
+
+ * [`ProxyManager\GeneratorStrategy\BaseGeneratorStrategy`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/GeneratorStrategy/BaseGeneratorStrategy.php),
+ which simply retrieves the string representation of the class from `ClassGenerator`
+ * [`ProxyManager\GeneratorStrategy\EvaluatingGeneratorStrategy`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/GeneratorStrategy/EvaluatingGeneratorStrategy.php),
+ which calls `eval()` upon the generated class code before returning it. This is useful in cases
+ where you want to generate multiple classes at runtime
+ * [`ProxyManager\GeneratorStrategy\FileWriterGeneratorStrategy`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/GeneratorStrategy/FileWriterGeneratorStrategy.php),
+ which accepts a [`ProxyManager\FileLocator\FileLocatorInterface`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/FileLocator/FileLocatorInterface.php)
+ instance as constructor parameter, and based on it, writes the generated class to a file before returning its code.
\ No newline at end of file
diff --git a/core/vendor/ocramius/proxy-manager/docs/lazy-loading-ghost-object.md b/core/vendor/ocramius/proxy-manager/docs/lazy-loading-ghost-object.md
new file mode 100644
index 0000000..4c93439
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/docs/lazy-loading-ghost-object.md
@@ -0,0 +1,206 @@
+# Lazy Loading Ghost Object Proxies
+
+A lazy loading ghost object proxy is a ghost proxy that looks exactly like the real instance of the proxied subject,
+but which has all properties nulled before initialization.
+
+## Lazy loading with the Ghost Object
+
+In pseudo-code, in userland, [lazy loading](http://www.martinfowler.com/eaaCatalog/lazyLoad.html) in a ghost object
+looks like following:
+
+```php
+class MyObjectProxy
+{
+ private $initialized = false;
+ private $name;
+ private $surname;
+
+ public function doFoo()
+ {
+ $this->init();
+
+ // Perform doFoo routine using loaded variables
+ }
+
+ private function init()
+ {
+ if (! $this->initialized) {
+ $data = some_logic_that_loads_data();
+
+ $this->name = $data['name'];
+ $this->surname = $data['surname'];
+
+ $this->initialized = true;
+ }
+ }
+}
+```
+
+Ghost objects work similarly to virtual proxies, but since they don't wrap around a "real" instance of the proxied
+subject, they are better suited for representing dataset rows.
+
+## When do I use a ghost object?
+
+You usually need a ghost object in cases where following applies
+
+ * you are building a small data-mapper and want to lazily load data across associations in your object graph
+ * you want to initialize objects representing rows in a large dataset
+ * you want to compare instances of lazily initialized objects without the risk of comparing a proxy with a real subject
+ * you are aware of the internal state of the object and are confident in working with its internals via reflection
+ or direct property access
+
+## Usage examples
+
+[ProxyManager](https://github.com/Ocramius/ProxyManager) provides a factory that creates lazy loading ghost objects.
+To use it, follow these steps:
+
+First of all, define your object's logic without taking care of lazy loading:
+
+```php
+namespace MyApp;
+
+class Customer
+{
+ private $name;
+ private $surname;
+
+ // just write your business logic or generally logic
+ // don't worry about how complex this object will be!
+ // don't code lazy-loading oriented optimizations in here!
+ public function getName() { return $this->name; }
+ public function setName($name) { $this->name = (string) $name; }
+ public function getSurname() { return $this->surname; }
+ public function setSurname($surname) { $this->surname = (string) $surname; }
+}
+```
+
+Then use the proxy manager to create a ghost object of it.
+You will be responsible of setting its state during lazy loading:
+
+```php
+namespace MyApp;
+
+use ProxyManager\Factory\LazyLoadingGhostFactory;
+use ProxyManager\Proxy\LazyLoadingInterface;
+
+require_once __DIR__ . '/vendor/autoload.php';
+
+$factory = new LazyLoadingGhostFactory();
+$initializer = function (LazyLoadingInterface $proxy, $method, array $parameters, & $initializer) {
+ $initializer = null; // disable initialization
+
+ // load data and modify the object here
+ $proxy->setName('Agent');
+ $proxy->setSurname('Smith');
+
+ return true; // confirm that initialization occurred correctly
+};
+
+$instance = $factory->createProxy('MyApp\Customer', $initializer);
+```
+
+You can now simply use your object as before:
+
+```php
+// this will just work as before
+echo $proxy->getName() . ' ' . $proxy->getSurname(); // Agent Smith
+```
+
+## Lazy Initialization
+
+As you can see, we use a closure to handle lazy initialization of the proxy instance at runtime.
+The initializer closure signature for ghost objects should be as following:
+
+```php
+/**
+ * @var object $proxy the instance the ghost object proxy that is being initialized
+ * @var string $method the name of the method that triggered lazy initialization
+ * @var array $parameters an ordered list of parameters passed to the method that
+ * triggered initialization, indexed by parameter name
+ * @var Closure $initializer a reference to the property that is the initializer for the
+ * proxy. Set it to null to disable further initialization
+ *
+ * @return bool true on success
+ */
+$initializer = function ($proxy, $method, $parameters, & $initializer) {};
+```
+
+The initializer closure should usually be coded like following:
+
+```php
+$initializer = function ($proxy, $method, $parameters, & $initializer) {
+ $initializer = null; // disable initializer for this proxy instance
+
+ // modify the object with loaded data
+ $proxy->setFoo(/* ... */);
+ $proxy->setBar(/* ... */);
+
+ return true; // report success
+};
+```
+
+The
+[`ProxyManager\Factory\LazyLoadingGhostFactory`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Factory/LazyLoadingGhostFactory.php)
+produces proxies that implement both the
+[`ProxyManager\Proxy\GhostObjectInterface`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Proxy/GhostObjectInterface.php)
+and the
+[`ProxyManager\Proxy\LazyLoadingInterface`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Proxy/LazyLoadingInterface.php).
+
+At any point in time, you can set a new initializer for the proxy:
+
+```php
+$proxy->setProxyInitializer($initializer);
+```
+
+In your initializer, you **MUST** turn off any further initialization:
+
+```php
+$proxy->setProxyInitializer(null);
+```
+
+or
+
+```php
+$initializer = null; // if you use the initializer passed by reference to the closure
+```
+
+## Triggering Initialization
+
+A lazy loading ghost object is initialized whenever you access any property or method of it.
+Any of the following interactions would trigger lazy initialization:
+
+```php
+// calling a method
+$proxy->someMethod();
+
+// reading a property
+echo $proxy->someProperty;
+
+// writing a property
+$proxy->someProperty = 'foo';
+
+// checking for existence of a property
+isset($proxy->someProperty);
+
+// removing a property
+unset($proxy->someProperty);
+
+// cloning the entire proxy
+clone $proxy;
+
+// serializing the proxy
+$unserialized = serialize(unserialize($proxy));
+```
+
+Remember to call `$proxy->setProxyInitializer(null);` to disable initialization of your proxy, or it will happen more
+than once.
+
+## Proxying interfaces
+
+You can also generate proxies from an interface FQCN. By proxying an interface, you will only be able to access the
+methods defined by the interface itself, even if the `wrappedObject` implements more methods. This will anyway save
+some memory since the proxy won't contain any properties.
+
+## Tuning performance for production
+
+See [Tuning ProxyManager for Production](https://github.com/Ocramius/ProxyManager/blob/master/docs/tuning-for-production.md).
diff --git a/core/vendor/ocramius/proxy-manager/docs/lazy-loading-value-holder.md b/core/vendor/ocramius/proxy-manager/docs/lazy-loading-value-holder.md
new file mode 100644
index 0000000..4de56ce
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/docs/lazy-loading-value-holder.md
@@ -0,0 +1,200 @@
+# Lazy Loading Value Holder Proxy
+
+A lazy loading value holder proxy is a virtual proxy that wraps and lazily initializes a "real" instance of the proxied
+class.
+
+## What is lazy loading?
+
+In pseudo-code, in userland, [lazy loading](http://www.martinfowler.com/eaaCatalog/lazyLoad.html) looks like following:
+
+```php
+class MyObjectProxy
+{
+ private $wrapped;
+
+ public function doFoo()
+ {
+ $this->init();
+
+ return $this->wrapped->doFoo();
+ }
+
+ private function init()
+ {
+ if (null === $this->wrapped) {
+ $this->wrapped = new MyObject();
+ }
+ }
+}
+```
+
+This code is problematic, and adds a lot of complexity that makes your unit tests' code even worse.
+
+Also, this kind of usage often ends up in coupling your code with a particular
+[Dependency Injection Container](http://martinfowler.com/articles/injection.html)
+or a framework that fetches dependencies for you.
+That way, further complexity is introduced, and some problems related
+with service location raise, as I've explained
+[in this article](http://ocramius.github.com/blog/zf2-and-symfony-service-proxies-with-doctrine-proxies/).
+
+Lazy loading value holders abstract this logic for you, hiding your complex, slow, performance-impacting objects behind
+tiny wrappers that have their same API, and that get initialized at first usage.
+
+## When do I use a lazy value holder?
+
+You usually need a lazy value holder in cases where following applies
+
+ * your object takes a lot of time and memory to be initialized (with all dependencies)
+ * your object is not always used, and the instantiation overhead can be avoided
+
+## Usage examples
+
+[ProxyManager](https://github.com/Ocramius/ProxyManager) provides a factory that eases instantiation of lazy loading
+value holders. To use it, follow these steps:
+
+First of all, define your object's logic without taking care of lazy loading:
+
+```php
+namespace MyApp;
+
+class HeavyComplexObject
+{
+ public function doFoo()
+ {
+ // ... do foo
+ echo 'OK!';
+ // just write your business logic
+ // don't worry about how heavy this object will be!
+ }
+}
+```
+
+Then use the proxy manager to create a lazy version of the object (as a proxy):
+
+```php
+namespace MyApp;
+
+use ProxyManager\Factory\LazyLoadingValueHolderFactory;
+use ProxyManager\Proxy\LazyLoadingInterface;
+
+require_once __DIR__ . '/vendor/autoload.php';
+
+$factory = new LazyLoadingValueHolderFactory();
+$initializer = function (& $wrappedObject, LazyLoadingInterface $proxy, $method, array $parameters, & $initializer) {
+ $initializer = null; // disable initialization
+ $wrappedObject = new HeavyComplexObject(); // fill your object with values here
+
+ return true; // confirm that initialization occurred correctly
+};
+
+$instance = $factory->createProxy('MyApp\HeavyComplexObject', $initializer);
+```
+
+You can now simply use your object as before:
+
+```php
+// this will just work as before
+$proxy->doFoo(); // OK!
+```
+
+## Lazy Initialization
+
+As you can see, we use a closure to handle lazy initialization of the proxy instance at runtime.
+The initializer closure signature should be as following:
+
+```php
+/**
+ * @var object $wrappedObject the instance (passed by reference) of the wrapped object,
+ * set it to your real object
+ * @var object $proxy the instance proxy that is being initialized
+ * @var string $method the name of the method that triggered lazy initialization
+ * @var string $parameters an ordered list of parameters passed to the method that
+ * triggered initialization, indexed by parameter name
+ * @var Closure $initializer a reference to the property that is the initializer for the
+ * proxy. Set it to null to disable further initialization
+ *
+ * @return bool true on success
+ */
+$initializer = function (& $wrappedObject, $proxy, $method, $parameters, & $initializer) {};
+```
+
+The initializer closure should usually be coded like following:
+
+```php
+$initializer = function (& $wrappedObject, $proxy, $method, $parameters, & $initializer) {
+ $newlyCreatedObject = new Foo(); // instantiation logic
+ $newlyCreatedObject->setBar('baz') // instantiation logic
+ $newlyCreatedObject->setBat('bam') // instantiation logic
+
+ $wrappedObject = $newlyCreatedObject; // set wrapped object in the proxy
+ $initializer = null; // disable initializer
+
+ return true; // report success
+};
+```
+
+The
+[`ProxyManager\Factory\LazyLoadingValueHolderFactory`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Factory/LazyLoadingValueHolderFactory.php)
+produces proxies that implement both the
+[`ProxyManager\Proxy\ValueHolderInterface`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Proxy/ValueHolderInterface.php)
+and the
+[`ProxyManager\Proxy\LazyLoadingInterface`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Proxy/LazyLoadingInterface.php).
+
+At any point in time, you can set a new initializer for the proxy:
+
+```php
+$proxy->setProxyInitializer($initializer);
+```
+
+In your initializer, you currently **MUST** turn off any further initialization:
+
+```php
+$proxy->setProxyInitializer(null);
+```
+
+or
+
+```php
+$initializer = null; // if you use the initializer by reference
+```
+
+## Triggering Initialization
+
+A lazy loading proxy is initialized whenever you access any property or method of it.
+Any of the following interactions would trigger lazy initialization:
+
+```php
+// calling a method
+$proxy->someMethod();
+
+// reading a property
+echo $proxy->someProperty;
+
+// writing a property
+$proxy->someProperty = 'foo';
+
+// checking for existence of a property
+isset($proxy->someProperty);
+
+// removing a property
+unset($proxy->someProperty);
+
+// cloning the entire proxy
+clone $proxy;
+
+// serializing the proxy
+$unserialized = serialize(unserialize($proxy));
+```
+
+Remember to call `$proxy->setProxyInitializer(null);` to disable initialization of your proxy, or it will happen more
+than once.
+
+## Proxying interfaces
+
+You can also generate proxies from an interface FQCN. By proxying an interface, you will only be able to access the
+methods defined by the interface itself, even if the `wrappedObject` implements more methods. This will anyway save
+some memory since the proxy won't contain useless inherited properties.
+
+## Tuning performance for production
+
+See [Tuning ProxyManager for Production](https://github.com/Ocramius/ProxyManager/blob/master/docs/tuning-for-production.md).
diff --git a/core/vendor/ocramius/proxy-manager/docs/null-object.md b/core/vendor/ocramius/proxy-manager/docs/null-object.md
new file mode 100644
index 0000000..aca1739
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/docs/null-object.md
@@ -0,0 +1,89 @@
+# Null Object Proxy
+
+A Null Object proxy is a [null object pattern](http://en.wikipedia.org/wiki/Null_Object_pattern) implementation.
+The proxy factory creates a new object with defined neutral behavior based on an other object, class name or interface.
+
+## What is null object proxy ?
+
+In your application, when you can't return the object related to the request, the consumer of the model must check
+for the return value and handle the failing condition gracefully, thus generating an explosion of conditionals throughout your code.
+Fortunately, this seemingly-tangled situation can be sorted out simply by creating a polymorphic implementation of the
+domain object, which would implement the same interface as the one of the object in question, only that its methods
+wouldn’t do anything, therefore offloading client code from doing repetitive checks for ugly null values when the operation
+ is executed.
+
+## Usage examples
+
+```php
+class UserMapper
+{
+ private $adapter;
+
+ public function __construct(DatabaseAdapterInterface $adapter) {
+ $this->adapter = $adapter;
+ }
+
+ public function fetchById($id) {
+ $this->adapter->select("users", array("id" => $id));
+ if (!$row = $this->adapter->fetch()) {
+ return null;
+ }
+ return $this->createUser($row);
+ }
+
+ private function createUser(array $row) {
+ $user = new Entity\User($row["name"], $row["email"]);
+ $user->setId($row["id"]);
+ return $user;
+ }
+}
+```
+
+If you want to remove conditionals from client code, you need to have a version of the entity conforming to the corresponding
+interface. With the Null Object Proxy, you can build this object :
+
+```php
+$factory = new \ProxyManager\Factory\NullObjectFactory();
+
+$nullUser = $factory->createProxy('Entity\User');
+
+var_dump($nullUser->getName()); // empty return
+```
+
+You can now return a valid entity :
+
+```php
+class UserMapper
+{
+ private $adapter;
+
+ public function __construct(DatabaseAdapterInterface $adapter) {
+ $this->adapter = $adapter;
+ }
+
+ public function fetchById($id) {
+ $this->adapter->select("users", array("id" => $id));
+ return $this->createUser($this->adapter->fetch());
+ }
+
+ private function createUser($row) {
+ if (!$row) {
+ $factory = new \ProxyManager\Factory\NullObjectFactory();
+
+ return $factory->createProxy('Entity\User');
+ }
+ $user = new Entity\User($row["name"], $row["email"]);
+ $user->setId($row["id"]);
+ return $user;
+ }
+}
+```
+
+## Proxying interfaces
+
+You can also generate proxies from an interface FQCN. By proxying an interface, you will only be able to access the
+methods defined by the interface itself, and like with the object, the methods are empty.
+
+## Tuning performance for production
+
+See [Tuning ProxyManager for Production](https://github.com/Ocramius/ProxyManager/blob/master/docs/tuning-for-production.md).
diff --git a/core/vendor/ocramius/proxy-manager/docs/remote-object.md b/core/vendor/ocramius/proxy-manager/docs/remote-object.md
new file mode 100644
index 0000000..1e040bd
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/docs/remote-object.md
@@ -0,0 +1,100 @@
+# Remote Object Proxy
+
+The remote object implementation is a mechanism that enables an local object to control an other object on an other server.
+Each call method on the local object will do a network call to get information or execute operations on the remote object.
+
+## What is remote object proxy ?
+
+A remote object is based on an interface. The remote interface defines the API that a consumer can call. This interface
+must be implemented both by the client and the RPC server.
+
+## Adapters
+
+ZendFramework's RPC components (XmlRpc, JsonRpc & Soap) can be used easily with the remote object.
+You will need to require the one you need via composer, though:
+
+```sh
+$ php composer.phar require zendframework/zend-xmlrpc:2.*
+$ php composer.phar require zendframework/zend-json:2.*
+$ php composer.phar require zendframework/zend-soap:2.*
+```
+
+ProxyManager comes with 3 adapters:
+
+ * `ProxyManager\Factory\RemoteObject\Adapter\XmlRpc`
+ * `ProxyManager\Factory\RemoteObject\Adapter\JsonRpc`
+ * `ProxyManager\Factory\RemoteObject\Adapter\Soap`
+
+## Usage examples
+
+RPC server side code (`xmlrpc.php` in your local webroot):
+
+```php
+interface FooServiceInterface
+{
+ public function foo();
+}
+
+class Foo implements FooServiceInterface
+{
+ /**
+ * Foo function
+ * @return string
+ */
+ public function foo()
+ {
+ return 'bar remote';
+ }
+}
+
+$server = new Zend\XmlRpc\Server();
+$server->setClass('Foo', 'FooServiceInterface'); // my FooServiceInterface implementation
+$server->handle();
+```
+
+Client side code (proxy) :
+
+```php
+
+interface FooServiceInterface
+{
+ public function foo();
+}
+
+$factory = new \ProxyManager\Factory\RemoteObjectFactory(
+ new \ProxyManager\Factory\RemoteObject\Adapter\XmlRpc(
+ new \Zend\XmlRpc\Client('https://localhost/xmlrpc.php')
+ )
+);
+
+$proxy = $factory->createProxy('FooServiceInterface');
+
+var_dump($proxy->foo()); // "bar remote"
+```
+
+## Implementing custom adapters
+
+Your adapters must implement `ProxyManager\Factory\RemoteObject\AdapterInterface` :
+
+```php
+interface AdapterInterface
+{
+ /**
+ * Call remote object
+ *
+ * @param string $wrappedClass
+ * @param string $method
+ * @param array $params
+ *
+ * @return mixed
+ */
+ public function call($wrappedClass, $method, array $params = array());
+}
+```
+
+It is very easy to create your own implementation (for RESTful web services, for example). Simply pass
+your own adapter instance to your factory at construction time
+
+## Tuning performance for production
+
+See [Tuning ProxyManager for Production](https://github.com/Ocramius/ProxyManager/blob/master/docs/tuning-for-production.md).
diff --git a/core/vendor/ocramius/proxy-manager/docs/tuning-for-production.md b/core/vendor/ocramius/proxy-manager/docs/tuning-for-production.md
new file mode 100644
index 0000000..48ccf9f
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/docs/tuning-for-production.md
@@ -0,0 +1,24 @@
+## Tuning the ProxyManager for production
+
+By default, all proxy factories generate the required proxy classes at runtime.
+
+Proxy generation causes I/O operations and uses a lot of reflection, so be sure to have
+generated all of your proxies **before deploying your code on a live system**, or you
+may experience poor performance.
+
+You can configure ProxyManager so that it will try autoloading the proxies first.
+Generating them "bulk" is not yet implemented:
+
+```php
+$config = new \ProxyManager\Configuration();
+$config->setProxiesTargetDir(__DIR__ . '/my/generated/classes/cache/dir');
+
+// then register the autoloader
+spl_autoload_register($config->getProxyAutoloader());
+```
+
+Generating a classmap with all your proxy classes in it will also work perfectly.
+
+Please note that all the currently implemented `ProxyManager\Factory\*` classes accept
+a `ProxyManager\Configuration` object as optional constructor parameter. This allows for
+fine-tuning of ProxyManager according to your needs.
diff --git a/core/vendor/ocramius/proxy-manager/examples/access-interceptor-scope-localizer.php b/core/vendor/ocramius/proxy-manager/examples/access-interceptor-scope-localizer.php
new file mode 100644
index 0000000..eb1da5b
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/examples/access-interceptor-scope-localizer.php
@@ -0,0 +1,38 @@
+counter += 1;
+
+ return $this;
+ }
+}
+
+$factory = new AccessInterceptorScopeLocalizerFactory();
+$foo = new FluentCounter();
+
+/* @var $proxy FluentCounter */
+$proxy = $factory->createProxy(
+ $foo,
+ array('fluentMethod' => function ($proxy) { echo "pre-fluentMethod #{$proxy->counter}!\n"; }),
+ array('fluentMethod' => function ($proxy) { echo "post-fluentMethod #{$proxy->counter}!\n"; })
+);
+
+$proxy->fluentMethod()->fluentMethod()->fluentMethod()->fluentMethod();
+
+echo 'The proxy counter is now at ' . $proxy->counter . "\n";
+echo 'The real instance counter is now at ' . $foo->counter . "\n";
diff --git a/core/vendor/ocramius/proxy-manager/examples/ghost-object.php b/core/vendor/ocramius/proxy-manager/examples/ghost-object.php
new file mode 100644
index 0000000..b4ec216
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/examples/ghost-object.php
@@ -0,0 +1,46 @@
+foo = (string) $foo;
+ }
+
+ public function getFoo()
+ {
+ return $this->foo;
+ }
+}
+
+$startTime = microtime(true);
+$factory = new LazyLoadingGhostFactory();
+
+for ($i = 0; $i < 1000; $i += 1) {
+ $proxy = $factory->createProxy(
+ 'Foo',
+ function ($proxy, $method, $parameters, & $initializer) {
+ $initializer = null;
+ $proxy->setFoo('Hello World!');
+
+ return true;
+ }
+ );
+}
+
+var_dump('time after 1000 instantiations: ' . (microtime(true) - $startTime));
+
+echo $proxy->getFoo() . "\n";
+
+var_dump('time after single call to doFoo: ' . (microtime(true) - $startTime));
diff --git a/core/vendor/ocramius/proxy-manager/examples/remote-proxy.php b/core/vendor/ocramius/proxy-manager/examples/remote-proxy.php
new file mode 100644
index 0000000..97025fc
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/examples/remote-proxy.php
@@ -0,0 +1,36 @@
+createProxy('Foo');
+
+try {
+ var_dump($proxy->bar()); // bar remote !
+} catch (\Zend\Http\Client\Adapter\Exception\RuntimeException $error) {
+ echo "To run this example, please following before:\n\n\$ php -S localhost:9876 -t \"" . __DIR__ . "\"\n";
+
+ exit(2);
+}
diff --git a/core/vendor/ocramius/proxy-manager/examples/remote-proxy/remote-proxy-server.php b/core/vendor/ocramius/proxy-manager/examples/remote-proxy/remote-proxy-server.php
new file mode 100644
index 0000000..81a742f
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/examples/remote-proxy/remote-proxy-server.php
@@ -0,0 +1,20 @@
+setClass(new Foo(), 'Foo');
+$server->setReturnResponse(false);
+
+$server->handle();
diff --git a/core/vendor/ocramius/proxy-manager/examples/smart-reference.php b/core/vendor/ocramius/proxy-manager/examples/smart-reference.php
new file mode 100644
index 0000000..8c00a3a
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/examples/smart-reference.php
@@ -0,0 +1,23 @@
+createProxy(
+ new Foo(),
+ array('doFoo' => function () { echo "pre-foo!\n"; }),
+ array('doFoo' => function () { echo "post-foo!\n"; })
+);
+
+$proxy->doFoo();
diff --git a/core/vendor/ocramius/proxy-manager/examples/virtual-proxy.php b/core/vendor/ocramius/proxy-manager/examples/virtual-proxy.php
new file mode 100644
index 0000000..7ee6b2e
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/examples/virtual-proxy.php
@@ -0,0 +1,39 @@
+createProxy(
+ 'Foo',
+ function (& $wrappedObject, $proxy, $method, $parameters, & $initializer) {
+ $initializer = null;
+ $wrappedObject = new Foo();
+
+ return true;
+ }
+ );
+}
+
+var_dump('time after 1000 instantiations: ' . (microtime(true) - $startTime));
+
+$proxy->doFoo();
+
+var_dump('time after single call to doFoo: ' . (microtime(true) - $startTime));
diff --git a/core/vendor/ocramius/proxy-manager/phpdox.xml.dist b/core/vendor/ocramius/proxy-manager/phpdox.xml.dist
new file mode 100644
index 0000000..c610db9
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/phpdox.xml.dist
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/vendor/ocramius/proxy-manager/phpmd.xml.dist b/core/vendor/ocramius/proxy-manager/phpmd.xml.dist
new file mode 100644
index 0000000..4a9f7df
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/phpmd.xml.dist
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/vendor/ocramius/proxy-manager/phpunit.xml.dist b/core/vendor/ocramius/proxy-manager/phpunit.xml.dist
new file mode 100644
index 0000000..94f3665
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/phpunit.xml.dist
@@ -0,0 +1,22 @@
+
+
+
+ ./tests/ProxyManagerTest
+
+
+
+ ./src
+
+
+
diff --git a/core/vendor/ocramius/proxy-manager/proxy-manager.png b/core/vendor/ocramius/proxy-manager/proxy-manager.png
new file mode 100644
index 0000000..0ab1c6e
--- /dev/null
+++ b/core/vendor/ocramius/proxy-manager/proxy-manager.png
@@ -0,0 +1,73 @@
+‰PNG
+
+
IHDR z ò C4‘ bKGD ÿ ÿ ÿ ½§“ pHYs
×
×B(›x tIMEÝ 0ž¾¬ IDATxÚíy`TÕÙÿ¿Ï½3ÉE€Y](j…AxMfbj)ÖV[ß¾bÛ·µ.¯Õª’ÌÜ …äNHÀºñÖ.V»Hß_»¿VcV‘M¡¸aÜ+(d’̽Ïï}É ÉÉÜ™¹9Ÿ¿Ú‘œsîY¾çœçœó<IJ¢iÚ• nà0ÀG ¶0ó/²²²~©ëz—¬%‰Dr2¬‚Ô"
+] š™ç矽ËÌ%ápøg XÖšD"‘BŸSUµÀ·O¶]ˆèÓ4———?/kP"‘H¡OQt]÷D"
@€‘ƒH‚…Ð4m€R Ó† ¹6 •mmme÷ߧ¬]‰D"…>‰ƒÁ‹‰¨À• Hþ
%†al”5-‘H¤ÐÛL(ú3¯p+ W‚³{†™óÃáðNYó‰zI‚Ñu]‰D"7X
`œYw2ó:f^U^^~H¶„D"…^’ ‚ÁàÕDTà‚$ã 3¯ÌÊÊz@×õ¨l‰D
+½d(..žªªj5€kR¨X¯2ó’p8ügÙB‰zÉ Ñu}t$¹À Ü)ZÌ?˜¦™_QQÑ,[L"‘B/9I,X N:õ¿ è ƧA‘»<äñxîÑuý lA‰D
+½ä8ƒA€uD4+
‹ÿ> ½¹¹ùÑ7š²5%)ô’£())kšæj"º€’æŸS§(J~iié6Ù²‰úa®ë§D"‘e á Oc ¿VUµxõêÕoÊ––H¤ÐKB¡ÐW˜¹Àyþ̃Dt_ffæzéY"‘B?lÿ¦ªêº¸vï0óRéY"‘BïhJJJÆZ–Uà[H;ü`ÙDD‹ËÊÊ6É!‘H¡w.Ì9rdƒwì4, O(ŠR\ZZú¬‰D
+}Zs¼öÙá™™ß ¢óñ‡û‰(@–Me=`t‡,‘¤ª¬‚ÿ£¤¤ä¢ìììŸQÀ6)ü‹Š¢|“™G‘wÀ35Ñ;–eÍ&¢O¸Ä†É;@^FFÆ×}>ßÞúúú—eÏ‘HäŠ>å),,<Óív¯†=îƒð3²²²×uÝ
+ƒˆè»ƒHg·aç@(ºÂ²¬j"ºÔ®ºcæ¿«ªš_ZZúÙ“$’ÔÄ5œ?^×uWGGÇÝŠ¢,gæÓmʶ€áñx*u]?<” —••=§ëº·££ãÛDT`lÂW
+DŸ·,k»¦i?êîî^ºfÍšÊa%‘È}J iÚT¸ÐÆl7š¦¹´¢¢bwåùo ·‰¬èã&±Ób±hódÚÒ™ˆö[–u¯t‡,‘H¡O¶ÀO°öºþ€Ã0ž>N¹+ô¯†Ñ¯¯ûâââóTU]kó÷¾ûÞ¿È!&‘$Ÿacº9Ê}ð÷Ðs hÿ°Ôãñü(Y+ÜØîáZMÓæ¨0Æl/ðgMÓþ `±a-r¨I$Rè)ðJ$¹-‰è°Ï}° àÎÎΕUUUûS¡ÃxúöÛoŸyúé§ß‚ž«£gÚí5 ækšö°t‡,‘$G›n‚Á ˆªxm«P¢¿š¦YP^^þÊ@þ.Q¦›¾(((8=33s€»aßÛ÷è燺®[rèI$Rè…XºtéDÓ4+ \oã7¶0s~8~j0l§Ð!LWUµŠ™¯²±y¶ÆÜ)4Èá'‘؃£L7Y™™™AÓ4‹aŸûàƒÌ¼<++ë¡tóôÛu|1^ÛùL±![/3×iš&Ý!K$6á']¿“™™ù:€6‰¼`ƒeYÓÃáðºtv營òx<Ó™9À!›v’LÓ|YÓ4]×uŠIb\ZSRRr©eYÕ ®°1Û˲òËËË·U‚Á`ð‡Dô_ƒøÓA›nú"œ(Ê
+ô˜‘ìZHwȉú>>îƒßPdƯ‡Z„þ5Ã0†üÑW ˜(Ê: Ù66ës̼8¿$‡¦D2t¤>æ>8ß4MˆN³)Û€°Çã)×u½}8tŒØnŧiÚõ *œkC¶WÑ6MÓ¤;d‰dI+}0¼väÈ‘;6‰<ø™ªªç†¡‘?úû
ÃØèñx¦X›ðìè“7š¦ùª¦iÁ…fÊa*‘ˆ‘¦›’’’‹,˪0ÏÆl_oFM“XJ™núbéÒ¥LÓ\
àFÛáu"*,++ûƒ®‰…þ(÷Á· pÛ”í>f.>â>ØÆÝJÊý4MËC;…ÏÚ˜íÓ±w
+»ä°•H¾MN9,X ƒÁů¸Ý&‘ïDþ‚p8ü˜|½Ù?†aÔx<žYÌ|€}6e;ˆ¶kš¶N×õÓd+H$i¼¢ƒWQ€é6fû‡˜yàõ$~wÚ¬èæ(wÈ°ÉYÜwÈ---?ظq£)‡±D’&BŸ$÷Á»Ðc‡:¾ÿQôD¸J+¡?B(:Ÿ™×ø²Ù¾ÂÌápø¯r(K$ý“ôë•@`”¢(«`£û`fþ€~àÀ7lØÐæm˜Œb»¡klv‡<ˆþ¢iÚ\.×¢U«VµÊ!-‘¤ÐqŒ—gÛ” à®®®”qì4Ž¸C3fÌ]D´À©6d{M4¯iÚÖe-+//?$[B"ù?’bº ƒÙŠ¢¬cæÙ6fûœ¢(ù¥¥¥/¦bC˜n^5cz*~S(:ƒ™—Ã^wÈïX)Ý!K$Iú`0x.UÂF÷ÁÌÜ
+`ñ`ÝK¡’o›‰sN®m›h‹eY‹Ãáp£æ’áŽ-¦]×=±›vº>`uWW×úªªªÙÔÉÃ0Œí ®ƒ×XGD“m˜àgQ½¦i¿fæ¢p8ü–l Ép%á÷èƒÁàw"‘H2Ü_hFXŠ|ꇟêêêš@ƒî‰HºC–kf> ƒŸ³È³ñ{Ñs]rsº5„“M7}s‡l ø6ì3!¾ÍÌËÂáðcrèK¤ÐPTTt–Ë媄CÜÛE0üÝ2\„þ¨ î2ô¼Ÿ¸Ü®<™ùY Ò²d¸0d6z]×3"‘H3k luF+*++Û†i¦u ŽØî+'ÞHD€ñ _Ý}À6MÓžˆF£E•••û¤HœÌ¬¸C¡Ð5‘HÄN÷ÁÀQ±È;f²
+‡ÃE£Ñó`³;dUU_Ó4-¨ëz†l‰S2݃Á1;¼îƒwÄîÃ?뤆0ݼbÆgœTÉr‡ÌÌKÂáð¥,H¤Ð÷ˆÒ©Dt/€;áp÷ÁRè“GIIÉçbñ€/±1[éYâ8d£_°`:eÊ”ïÑ= ΰ©Œ] ª „ÃáðÙdÇÒÒÒgu]ŸÙÑÑñm"ª p–
Ùq‡ü3/‡ÃŸÈ–›}0Ì™ifÚX¾?Ñ’dº–+úÔ@Ó´1 ‚°Ñ2€˜ù>éYâx¡_¶lÙäh4ºöº~Àâd¸nðÎeÂ.ã\»D¥ÃÊøT7«£Þ€V÷(µóm«èŸ4[ §"‡;þg†¾«ËÎö (Š²À—lÌv{ÌœS;Ü"//ÏÕÝÝý5"º
+Àùè¹E¡=Áwv2óÏžO+¡¹^
+`€,›Êó 3¯H†ûà·×^~z—Õõ(×ɾ{òó"“õÝ©…Ûÿž„þ<ôÜ¿·s73¬Ü!ggg_¦(Ê Î“]ý¤ù_"º©®®îýTzŠÝi.ƒÍèÞ²²²ì®„·×^~z·ÕUàbÙO±¢!º~Já–ßÛñí·ßî¶Ù2 t XoYÖj'»CÎÉÉñÑ_`Ÿo*ÇÀÌ{,Ëò555½›’Bg ¸?ö Ä.6Ñâ²²²¦dUBK¥÷)Økšrmªª\2±`sK22稪fæoÚhVh‰]ÇüÓ3//o\4} ö~;•çëëësÐã{+u„>Þ;lµËñÓû J<ORq·VÌþÿBöKáuÌÓSŠ¶}!™%HFœf~ôÀw: RÙ¿ðù|O øO٧ŕ论ºº‡RFèƒÁàÑã6†:‰¨Ê4ÍÒdo}÷V\2²Ü¯8GvË!=¢/O-Üò§d–A×u¥³³ó&f.0Î.±‡Ã·9¡
c&›ç \‡‚ý]]]ç¿ðÂ%» TRR2Ö²¬×`ó7¦iWTT4§B+´®™µ‚™tÙ‡Œ7ÌŒO.:oÑÉ.ÈQ— òdÚ ö×8àUâóù6˜%»òê«ëêê
+’Þ°Ìü}D~§¢(óÃøZªˆü[á™g3S‘ìŠCÊ4µëÔÛS¡ ååå‡ÃÐLÓœÁÌ¿µa@—¤{ãùýþÿ”"?䀻rss“~kIaæk˜þG îöx<³JKKÿžJ
`ªJ%€SdWrVµ–_6.U
+SQQчÿÀ ü#Y]
+…>•®6oÞ¼S™¹Rvß!'ò¬“.ôHÌÙ€•Ñht¢aêºM¥šo)Ÿågà›²&„ѬðÊT+”aO†q 3ß`o"õ ¦¥k£E"‘€±²û&fõûý_N¶Ðõ=Ù¿‘7Uݳ
+“}/¡µ|Û•³¼©X°p8üXggç"ºÀ.@˜yd:¶VÌ´P ûmB©¾úê«3“•ùPF€Úàó†a\UVVörªÖvë)³¿{ýõG0RµpUUUûËÊʘ`ãpo,˲VÃ>ÿAÃséÃ<íСCw¤³ÐàÇã5ã™T®ìfÃ{* íö@óZÖx¤r
ÃxÃ0Œ |ÀÎáØJ~¿ÿ* dµ…UyyyI9¿ú(€õ .0cCªÙáûÄÅ%¯ýl\Æ`Í{º7åŸÐ†ñŒÇã™àŽØÂeX——çbæµ²£Úƨh4zoR¤Odv2ceºÔpkÕ¥“ؤE‚É<ÐÇë3ñlâ!¹f7¡s$§ú7Ç*‚ÁàËDT7T'Þ
+A§pDô+fvºÏ~ðï ΂´nÉÍͽ¿¶¶ÖÖ¤K ;ÒJ¼,UÔ½ÃÇwuZñG’nºtLuÈÎXXÁòfÃû‹©ÚÖ·ÒáûUUm·,NgÎœ9g@üå/uuußpz]ùýþ›™ù»C¥¹–e=À€íúÀÖÊYWñUÁdV9]ä€Mµ½ÜRs'ÚŸ FJ«å®=µp»Ý+ ŒH¢[Q”%N¯§¹sçŽff#n‘»G0Ùœœœ[ÏE/ô[ñº™©J0™×öÂzÇOˆ³ów0G *Ë¢
+±/«¹Òë“òšäææ^LDw &ó`mmí+Ã`BŒ_ÀÌ|#€„†Q¥×kßù•ã…þôƒtÓ…V¹ŒÂÙwlívr=ñ“T&®Žûù½ö¬ÈêÕð¦H¿aëÃc™êX–U@H⟠V:½žbï–Ä ô“õõõõ–eåCÌô2ÁãñJ¡^«ôž b¡SnÿyjñÖ?:½Sïy»õ6 ŸíÎ(™q÷®Ã–4u“&¶¨Ç¬=§xo”2›\rrr¾‚žë¤"¬¨¯¯?0&Ä0z¿/hSUµ › üRpUòù|çJ¡Ýv‹Û!AŽ·C¾S:猘[ߣÙ4©pëcGþÏäâ-¿H(f*áÝë玖r›®¾úêL"½N¹cüøñ8½®²³³ç£ç¦ÍQ;{^SSSóΑÿïr¹ D^ÿgQ©zš×z/ÓBÂDôÀ䢯:½SwfZË œÞûÓ9Ÿ¨÷ÖT!äC,bÎXWwTƒ$)>|x€©Bc‚9ãƦ“ë)//Ï¥(Jü¹Þ›–eõ:”‰~…`}þ§ÏçKøù•c…^±P
A;¤¢Do‡|£böEÔãªúèî÷øäÂmÇD³ŸT¸e;?ëØ(l.¿T›¶¿ß?ž™ïLæ7
Ï:½®¢Ñèí8ö}AISSÓ1WÊMÓ,‡èùUOû„j±#…¾µböW¸Rl5å“^üØéZ!«
+½ßS„Ë]Üß¿·¬î "d2Åe@b+Ì|€QID 8>~Cì}Á}q?×Õ××÷n´©©©ƒˆDw©³ü~ÿw¤Ð€Ýë§e2 ?ë~iÊ„)œÞ©›×̺ yq’ž’¿éƒþþfZñŽ}1»"ƒ¿ÖRî/åײ³³/p‹HDTU__ßâôºÊÈÈXŽÞfLKQ”Å8Î
›ººº_2³Øù³1wnâί'ô®®Ó˜"¶ÊEÝàl;äîõÓ2¦øë”»;wžÐé[ûáŽj ¯ulUÏêy.H
©ª*jxOUÕR§WTnnîÅ âßü¤¶¶vû‰þVUÕ| "š16vg_
+ý‰ØSåÏàeB£ôÿ&nu¼Rí½ˆãææà}W׉þv†¾«DÅbõŒÏœ;êÐw!I(~¿ÿëÌ|¹àj³¤¦¦æ°Óë*ö¾àèÅÇ'–e”øÆ&ƒŸaI¢Â:JèÙäU´C+Ž·Cî©òŽÑ=qÊû·IÅÛ~s²iL)Üò{ {ƪwJçœ!å81ÌŸ?$3W&óBCCÃcN¯+ŸÏw-âÞQiccãI»=±,Køü*vw_
+}´¬=‡A7îr×N*~¡Õù+ÄÌEU¶aHQ¹ €È‹áÓ;3Ì{ IíííÅ Î[ÌóqíÓN ù)þ:åëû÷ï¯H:ûˆ„ý:ý{ì¿úc{#=×)…ìYeNü-kgÏÇÌÑ#‹¶Øc夂m¯ xXhjî~£böER–‡–ììì‰ b㊟hhhxÞéuÕ×û"
+ìÚub3f<û÷ï_Áó+EQªòò†öüÊBß²fö7 1;$ˆB3îÞåh;d?â?ÕîÎA¯ªÕî®èñ}2X\
+¡’¡]Á)Jzy!0m–e9þq[?ïþZWW÷»Á¤›DÍ¿Ÿ‰Ýå—B„½—Œ$p¹`2›&/Ùò3ǯæ+½ß