diff --git a/application/Espo/Core/Application.php b/application/Espo/Core/Application.php index 57908aee33..e84bac936e 100644 --- a/application/Espo/Core/Application.php +++ b/application/Espo/Core/Application.php @@ -181,7 +181,7 @@ class Application protected function initRoutes() { - $routes = new \Espo\Core\Utils\Route($this->getContainer()->get('config'), $this->getContainer()->get('fileManager')); + $routes = new \Espo\Core\Utils\Route($this->getContainer()->get('config'), $this->getMetadata(), $this->getContainer()->get('fileManager')); $crudList = array_keys( $this->getContainer()->get('config')->get('crud') ); foreach ($routes->getAll() as $route) { diff --git a/application/Espo/Core/Container.php b/application/Espo/Core/Container.php index 7f53368737..4b7b93fee3 100644 --- a/application/Espo/Core/Container.php +++ b/application/Espo/Core/Container.php @@ -31,7 +31,7 @@ class Container $obj = $this->$loadMethod(); $this->data[$name] = $obj; } else { - //external loader class \Espo\Core\Loaders\ or \Custom\Espo\Core\Loaders\ with load() method + //external loader class \Espo\Core\Loaders\ or \Espo\Custom\Core\Loaders\ with load() method $className = '\Espo\Custom\Core\Loaders\\'.ucfirst($name); if (!class_exists($className)) { $className = '\Espo\Core\Loaders\\'.ucfirst($name); diff --git a/application/Espo/Core/Cron/ScheduledJob.php b/application/Espo/Core/Cron/ScheduledJob.php index d4e2301a20..5aac25a68f 100644 --- a/application/Espo/Core/Cron/ScheduledJob.php +++ b/application/Espo/Core/Cron/ScheduledJob.php @@ -21,7 +21,7 @@ class ScheduledJob private $paths = array( 'corePath' => 'application/Espo/Jobs', 'modulePath' => 'application/Espo/Modules/{*}/Jobs', - 'customPath' => 'application/Espo/Custom/Jobs', + 'customPath' => 'custom/Espo/Custom/Jobs', ); diff --git a/application/Espo/Core/EntryPointManager.php b/application/Espo/Core/EntryPointManager.php index dbeaa714c4..0a517861e0 100644 --- a/application/Espo/Core/EntryPointManager.php +++ b/application/Espo/Core/EntryPointManager.php @@ -26,7 +26,7 @@ class EntryPointManager private $paths = array( 'corePath' => 'application/Espo/EntryPoints', 'modulePath' => 'application/Espo/Modules/{*}/EntryPoints', - 'customPath' => 'application/Espo/Custom/EntryPoints', + 'customPath' => 'custom/Espo/Custom/EntryPoints', ); diff --git a/application/Espo/Core/HookManager.php b/application/Espo/Core/HookManager.php index 751062bacb..d17d298020 100644 --- a/application/Espo/Core/HookManager.php +++ b/application/Espo/Core/HookManager.php @@ -27,6 +27,13 @@ class HookManager 'afterRemove', ); + protected $paths = array( + 'corePath' => 'application/Espo/Hooks', + 'modulePath' => 'application/Espo/Modules/{*}/Hooks', + 'customPath' => 'custom/Espo/Custom/Hooks', + ); + + public function __construct(Container $container) { $this->container = $container; @@ -52,11 +59,15 @@ class HookManager $metadata = $this->container->get('metadata'); - $this->data = $this->getHookData(array('Espo/Hooks', 'Espo/Custom/Hooks') ); + $this->data = $this->getHookData($this->paths['corePath']); + foreach ($metadata->getModuleList() as $moduleName) { - $this->data = array_merge($this->data, $this->getHookData(array('Espo/Modules/' . $moduleName . '/Hooks'))); + $modulePath = str_replace('{*}', $moduleName, $this->paths['modulePath']); + $this->data = array_merge($this->data, $this->getHookData($modulePath)); } + $this->data = array_merge($this->data, $this->getHookData($this->paths['customPath'])); + if ($this->getConfig()->get('useCache')) { $this->getFileManager()->putContentsPHP($this->cacheFile, $this->data); } @@ -97,19 +108,22 @@ class HookManager /** * Get and merge hook data by checking the files exist in $hookDirs * - * @param array $hookDirs - it can be an array('Espo/Hooks', 'Espo/Custom/Hooks', 'Espo/Custom/Modules/Crm/Hooks') + * @param array $hookDirs - it can be an array('Espo/Hooks', 'Espo/Custom/Hooks', 'Espo/Modules/Crm/Hooks') * * @return array */ - protected function getHookData(array $hookDirs) + protected function getHookData($hookDirs) { + if (is_string($hookDirs)) { + $hookDirs = (array) $hookDirs; + } + $hooks = array(); foreach ($hookDirs as $hookDir) { - - $fullHookDir = 'application/'.$hookDir; - if (file_exists($fullHookDir)) { - $fileList = $this->getFileManager()->getFileList($fullHookDir, 1, '\.php$', 'file'); + + if (file_exists($hookDir)) { + $fileList = $this->getFileManager()->getFileList($hookDir, 1, '\.php$', 'file'); foreach ($fileList as $scopeName => $hookFiles) { @@ -117,8 +131,8 @@ class HookManager $scopeHooks = array(); foreach($hookFiles as $hookFile) { - $hookFilePath = Util::concatPath($hookScopeDirPath, $hookFile); - $className = '\\'.Util::toFormat(preg_replace('/\.php$/i', '', $hookFilePath), '\\'); + $hookFilePath = Util::concatPath($hookScopeDirPath, $hookFile); + $className = Util::getClassName($hookFilePath); foreach($this->hookList as $hookName) { if (method_exists($className, $hookName)) { diff --git a/application/Espo/Core/ServiceFactory.php b/application/Espo/Core/ServiceFactory.php index 92011b2934..9eeb38fdce 100644 --- a/application/Espo/Core/ServiceFactory.php +++ b/application/Espo/Core/ServiceFactory.php @@ -15,10 +15,10 @@ class ServiceFactory /** * @var array - path to Service files */ - private $paths = array( + protected $paths = array( 'corePath' => 'application/Espo/Services', 'modulePath' => 'application/Espo/Modules/{*}/Services', - 'customPath' => 'application/Espo/Custom/Services', + 'customPath' => 'custom/Espo/Custom/Services', ); protected $data; @@ -35,12 +35,15 @@ class ServiceFactory if (file_exists($this->cacheFile) && $config->get('useCache')) { $this->data = $this->getFileManager()->getContents($this->cacheFile); } else { - $this->data = $this->getClassNameHash(array($this->paths['corePath'], $this->paths['customPath'])); + $this->data = $this->getClassNameHash($this->paths['corePath']); foreach ($this->getContainer()->get('metadata')->getModuleList() as $moduleName) { $path = str_replace('{*}', $moduleName, $this->paths['modulePath']); - $this->data = array_merge($this->data, $this->getClassNameHash(array($path))); - } + $this->data = array_merge($this->data, $this->getClassNameHash($path)); + } + + $this->data = array_merge($this->data, $this->getClassNameHash($this->paths['customPath'])); + if ($config->get('useCache')) { $result = $this->getFileManager()->putContentsPHP($this->cacheFile, $this->data); if ($result == false) { @@ -106,8 +109,12 @@ class ServiceFactory } // TODO delegate to another class - protected function getClassNameHash(array $dirs) + protected function getClassNameHash($dirs) { + if (is_string($dirs)) { + $dirs = (array) $dirs; + } + $data = array(); foreach ($dirs as $dir) { diff --git a/application/Espo/Core/Utils/Database/Schema/Schema.php b/application/Espo/Core/Utils/Database/Schema/Schema.php index 498e63d71a..17930e0f38 100644 --- a/application/Espo/Core/Utils/Database/Schema/Schema.php +++ b/application/Espo/Core/Utils/Database/Schema/Schema.php @@ -2,7 +2,8 @@ namespace Espo\Core\Utils\Database\Schema; -use \Doctrine\DBAL\Types\Type; +use Doctrine\DBAL\Types\Type, + Espo\Core\Utils\Util; class Schema { @@ -28,8 +29,8 @@ class Schema ); protected $fieldTypePaths = array( - 'Espo/Core/Utils/Database/DBAL/FieldTypes', - 'Espo/Custom/Core/Utils/Database/DBAL/FieldTypes', + 'application/Espo/Core/Utils/Database/DBAL/FieldTypes', + 'custom/Espo/Custom/Core/Utils/Database/DBAL/FieldTypes', ); /** @@ -38,7 +39,7 @@ class Schema */ protected $rebuildActionsPath = array( 'corePath' => 'application/Espo/Core/Utils/Database/Schema/rebuildActions', - 'customPath' => 'application/Espo/Custom/Core/Utils/Database/Schema/rebuildActions', + 'customPath' => 'custom/Espo/Custom/Core/Utils/Database/Schema/rebuildActions', ); /** @@ -132,12 +133,14 @@ class Schema { foreach($this->fieldTypePaths as $path) { - $typeList = $this->getFileManager()->getFileList('application/'.$path, false, '\.php$'); + $typeList = $this->getFileManager()->getFileList($path, false, '\.php$'); if ($typeList !== false) { foreach($typeList as $name) { $typeName = preg_replace('/\.php$/i', '', $name); $dbalTypeName = strtolower($typeName); - $class = \Espo\Core\Utils\Util::toFormat($path, '\\').'\\'.$typeName; + + $filePath = Util::concatPath($path, $typeName); + $class = Util::getClassName($filePath); if( ! Type::hasType($dbalTypeName) ) { Type::addType($dbalTypeName, $class); diff --git a/application/Espo/Core/Utils/I18n.php b/application/Espo/Core/Utils/I18n.php index b41027dd20..6cf5ba8654 100644 --- a/application/Espo/Core/Utils/I18n.php +++ b/application/Espo/Core/Utils/I18n.php @@ -27,7 +27,7 @@ class I18n private $paths = array( 'corePath' => 'application/Espo/Resources/i18n', 'modulePath' => 'application/Espo/Modules/{*}/Resources/i18n', - 'customPath' => 'application/Espo/Custom/Resources/i18n', + 'customPath' => 'custom/Espo/Custom/Resources/i18n', ); diff --git a/application/Espo/Core/Utils/Layout.php b/application/Espo/Core/Utils/Layout.php index d850ba3c13..6a7c9df5f3 100644 --- a/application/Espo/Core/Utils/Layout.php +++ b/application/Espo/Core/Utils/Layout.php @@ -22,8 +22,8 @@ class Layout */ private $paths = array( 'corePath' => 'application/Espo/Resources/layouts', - 'modulePath' => 'application/Espo/Modules/{*}/Resources/layouts', - 'customPath' => 'application/Espo/Custom/Resources/layouts', + 'modulePath' => 'application/Espo/Modules/{*}/Resources/layouts', + 'customPath' => 'custom/Espo/Custom/Resources/layouts', ); diff --git a/application/Espo/Core/Utils/Metadata.php b/application/Espo/Core/Utils/Metadata.php index d1d35d330c..9dcdf1ac47 100644 --- a/application/Espo/Core/Utils/Metadata.php +++ b/application/Espo/Core/Utils/Metadata.php @@ -23,7 +23,7 @@ class Metadata private $paths = array( 'corePath' => 'application/Espo/Resources/metadata', 'modulePath' => 'application/Espo/Modules/{*}/Resources/metadata', - 'customPath' => 'application/Espo/Custom/Resources/metadata', + 'customPath' => 'custom/Espo/Custom/Resources/metadata', ); diff --git a/application/Espo/Core/Utils/Route.php b/application/Espo/Core/Utils/Route.php index dc1702435a..b70477b393 100644 --- a/application/Espo/Core/Utils/Route.php +++ b/application/Espo/Core/Utils/Route.php @@ -4,17 +4,24 @@ namespace Espo\Core\Utils; class Route { - protected $fileName = 'routes.json'; - protected $cacheFile = 'data/cache/application/routes.php'; - protected $data = null; private $fileManager; private $config; + private $metadata; - public function __construct(Config $config, File\Manager $fileManager) + protected $cacheFile = 'data/cache/application/routes.php'; + + protected $paths = array( + 'corePath' => 'application/Espo/Resources/routes.json', + 'modulePath' => 'application/Espo/Modules/{*}/Resources/routes.json', + 'customPath' => 'custom/Espo/Custom/Resources/routes.json', + ); + + public function __construct(Config $config, Metadata $metadata, File\Manager $fileManager) { $this->config = $config; + $this->metadata = $metadata; $this->fileManager = $fileManager; } @@ -28,6 +35,11 @@ class Route return $this->fileManager; } + protected function getMetadata() + { + return $this->metadata; + } + public function get($key = '', $returns = null) { @@ -74,32 +86,18 @@ class Route } } - protected function unify($isCustom = false) + protected function unify() { - $dirName = $isCustom ? '/Custom' : ''; + $data = array(); - $data = array(); + $data = $this->getAddData($data, $this->paths['customPath']); - $moduleDir = 'application/Espo'.$dirName.'/Modules'; - if (file_exists($moduleDir)) { - $dirList= $this->getFileManager()->getFileList($moduleDir, false, '', 'dir'); + foreach ($this->getMetadata()->getModuleList() as $moduleName) { + $modulePath = str_replace('{*}', $moduleName, $this->paths['modulePath']); + $data = $this->getAddData($data, $modulePath); + } - foreach($dirList as $currentDirName) { - - $dirNameFull = Util::concatPath($moduleDir, $currentDirName); - $routeFile = Util::concatPath($dirNameFull, 'Resources/'.$this->fileName); - - $data = $this->getAddData($data, $routeFile); - } - } - - //if need this path to high priority, move up this code - $routeFile = Util::concatPath('application/Espo'.$dirName.'/Resources', $this->fileName); - $data = $this->getAddData($data, $routeFile); - - if (!$isCustom) { - $data = $this->addToData($this->unify(true), $data); - } + $data = $this->getAddData($data, $this->paths['corePath']); return $data; } diff --git a/application/Espo/Core/Utils/Util.php b/application/Espo/Core/Utils/Util.php index 10689fd2a7..516a6db8f7 100644 --- a/application/Espo/Core/Utils/Util.php +++ b/application/Espo/Core/Utils/Util.php @@ -317,7 +317,7 @@ class Util public static function getClassName($filePath) { $className = preg_replace('/\.php$/i', '', $filePath); - $className = preg_replace('/^application\//i', '', $className); + $className = preg_replace('/^(application|custom)\//i', '', $className); $className = '\\'.static::toFormat($className, '\\'); return $className; diff --git a/custom/Espo/Custom/.htaccess b/custom/Espo/Custom/.htaccess new file mode 100644 index 0000000000..2859d7f432 --- /dev/null +++ b/custom/Espo/Custom/.htaccess @@ -0,0 +1,2 @@ +Order Deny,Allow +Deny from all \ No newline at end of file diff --git a/custom/Espo/Custom/Test.php b/custom/Espo/Custom/Test.php new file mode 100644 index 0000000000..8af3657539 --- /dev/null +++ b/custom/Espo/Custom/Test.php @@ -0,0 +1,11 @@ +hello(); \ No newline at end of file diff --git a/tests/Espo/Core/Utils/LayoutTest.php b/tests/Espo/Core/Utils/LayoutTest.php index 5bd6e78338..1dafa56cc7 100644 --- a/tests/Espo/Core/Utils/LayoutTest.php +++ b/tests/Espo/Core/Utils/LayoutTest.php @@ -42,7 +42,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue(false)); $this->assertEquals('application/Espo/Resources/layouts/User', $this->reflection->invokeMethod('getLayoutPath', array('User')) ); - $this->assertEquals('application/Espo/Custom/Resources/layouts/User', $this->reflection->invokeMethod('getLayoutPath', array('User', true)) ); + $this->assertEquals('custom/Espo/Custom/Resources/layouts/User', $this->reflection->invokeMethod('getLayoutPath', array('User', true)) ); } @@ -54,7 +54,7 @@ class LayoutTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue('Crm')); $this->assertEquals('application/Espo/Modules/Crm/Resources/layouts/Call', $this->reflection->invokeMethod('getLayoutPath', array('Call')) ); - $this->assertEquals('application/Espo/Custom/Resources/layouts/Call', $this->reflection->invokeMethod('getLayoutPath', array('Call', true)) ); + $this->assertEquals('custom/Espo/Custom/Resources/layouts/Call', $this->reflection->invokeMethod('getLayoutPath', array('Call', true)) ); } function testGet() diff --git a/tests/Espo/Core/Utils/UtilTest.php b/tests/Espo/Core/Utils/UtilTest.php index e7b049759d..336d203dfa 100644 --- a/tests/Espo/Core/Utils/UtilTest.php +++ b/tests/Espo/Core/Utils/UtilTest.php @@ -214,8 +214,9 @@ class UtilTest extends \PHPUnit_Framework_TestCase function testGetClassName() { $this->assertEquals('\Espo\EntryPoints\Donwload', Util::getClassName('application/Espo/EntryPoints/Donwload.php')); - + $this->assertEquals('\Espo\EntryPoints\Donwload', Util::getClassName('custom/Espo/EntryPoints/Donwload.php')); $this->assertEquals('\Espo\EntryPoints\Donwload', Util::getClassName('Espo/EntryPoints/Donwload.php')); + $this->assertEquals('\Espo\EntryPoints\Donwload', Util::getClassName('application/Espo/EntryPoints/Donwload')); } function testUnsetInArrayNotSingle() diff --git a/tests/testData/Utils/Config/defaultConfig.php b/tests/testData/Utils/Config/defaultConfig.php index 005191cd17..95ba2fe950 100644 --- a/tests/testData/Utils/Config/defaultConfig.php +++ b/tests/testData/Utils/Config/defaultConfig.php @@ -1,7 +1,7 @@ 'tests/testData/Utils/Config/testArray.php', +return array ( + 'configPath' => 'tests/testData/Utils/Config/config.php', 'dateFormat' => 'MM/DD/YYYY', 'timeFormat' => 'HH:mm', diff --git a/tests/testData/Utils/Config/defaultConfigArray.php b/tests/testData/Utils/Config/defaultConfigArray.php index 36739b4ac8..005191cd17 100644 --- a/tests/testData/Utils/Config/defaultConfigArray.php +++ b/tests/testData/Utils/Config/defaultConfigArray.php @@ -1,7 +1,7 @@ 'tests/testData/Utils/Config/config.php', + 'configPath' => 'tests/testData/Utils/Config/testArray.php', 'dateFormat' => 'MM/DD/YYYY', 'timeFormat' => 'HH:mm', diff --git a/tests/testData/Utils/Config/testArray.php b/tests/testData/Utils/Config/testArray.php index b4d1e6bc55..a08299cda4 100644 --- a/tests/testData/Utils/Config/testArray.php +++ b/tests/testData/Utils/Config/testArray.php @@ -2,6 +2,7 @@ return array ( 'testOption' => 'Another Wrong Value', + 'testOption2' => 'Test2', ); ?> \ No newline at end of file diff --git a/vendor/autoload.php b/vendor/autoload.php index 0878f794a5..fd51f30df1 100644 --- a/vendor/autoload.php +++ b/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer' . '/autoload_real.php'; -return ComposerAutoloaderInit838748678582ba23758384df47dd5301::getLoader(); +return ComposerAutoloaderInita8e290620fe754108c330a35964cc81c::getLoader(); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php index a549954c77..6ec1440201 100644 --- a/vendor/composer/autoload_namespaces.php +++ b/vendor/composer/autoload_namespaces.php @@ -19,6 +19,7 @@ return array( 'Slim' => array($vendorDir . '/slim/slim'), 'Psr\\Log\\' => array($vendorDir . '/psr/log'), 'Monolog' => array($vendorDir . '/monolog/monolog/src'), + 'Espo\\Custom' => array($baseDir . '/custom'), 'Doctrine\\DBAL\\' => array($vendorDir . '/doctrine/dbal/lib'), 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib'), 'Doctrine\\Common\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib'), diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index 41dc384d21..92551b4a4d 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit838748678582ba23758384df47dd5301 +class ComposerAutoloaderInita8e290620fe754108c330a35964cc81c { private static $loader; @@ -19,9 +19,9 @@ class ComposerAutoloaderInit838748678582ba23758384df47dd5301 return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit838748678582ba23758384df47dd5301', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInita8e290620fe754108c330a35964cc81c', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInit838748678582ba23758384df47dd5301', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInita8e290620fe754108c330a35964cc81c', 'loadClassLoader')); $vendorDir = dirname(__DIR__); $baseDir = dirname($vendorDir); @@ -51,7 +51,7 @@ class ComposerAutoloaderInit838748678582ba23758384df47dd5301 } } -function composerRequire838748678582ba23758384df47dd5301($file) +function composerRequirea8e290620fe754108c330a35964cc81c($file) { require $file; } diff --git a/vendor/composer/include_paths.php b/vendor/composer/include_paths.php index 89c0856c24..97e43fb487 100644 --- a/vendor/composer/include_paths.php +++ b/vendor/composer/include_paths.php @@ -8,9 +8,9 @@ $baseDir = dirname($vendorDir); return array( $vendorDir . '/phpunit/phpunit-mock-objects', $vendorDir . '/phpunit/php-timer', - $vendorDir . '/phpunit/php-token-stream', $vendorDir . '/phpunit/php-file-iterator', $vendorDir . '/phpunit/php-text-template', + $vendorDir . '/phpunit/php-token-stream', $vendorDir . '/phpunit/php-code-coverage', $vendorDir . '/phpunit/phpunit', $vendorDir . '/symfony/yaml', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index b9cd38bc0a..eddaf044b7 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -443,58 +443,6 @@ "spl" ] }, - { - "name": "phpunit/php-token-stream", - "version": "1.2.1", - "version_normalized": "1.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "5220af2a7929aa35cf663d97c89ad3d50cf5fa3e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/5220af2a7929aa35cf663d97c89ad3d50cf5fa3e", - "reference": "5220af2a7929aa35cf663d97c89ad3d50cf5fa3e", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" - }, - "time": "2013-09-13 04:58:23", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "PHP/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ] - }, { "name": "phpunit/php-file-iterator", "version": "1.3.4", @@ -1174,145 +1122,6 @@ "template" ] }, - { - "name": "phpunit/php-code-coverage", - "version": "1.2.15", - "version_normalized": "1.2.15.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6ba4ed2895d538a039d5d5866edc4ec0424c7852" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6ba4ed2895d538a039d5d5866edc4ec0424c7852", - "reference": "6ba4ed2895d538a039d5d5866edc4ec0424c7852", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": ">=1.3.0@stable", - "phpunit/php-text-template": ">=1.2.0@stable", - "phpunit/php-token-stream": ">=1.1.3@stable" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*@dev" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.0.5" - }, - "time": "2014-02-03 07:44:47", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "PHP/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "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" - ] - }, - { - "name": "phpunit/phpunit", - "version": "3.7.31", - "version_normalized": "3.7.31.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "d24e9877331039582497052cc3c4d9f465b88210" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d24e9877331039582497052cc3c4d9f465b88210", - "reference": "d24e9877331039582497052cc3c4d9f465b88210", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.3.3", - "phpunit/php-code-coverage": "~1.2.1", - "phpunit/php-file-iterator": ">=1.3.1", - "phpunit/php-text-template": ">=1.1.1", - "phpunit/php-timer": ">=1.0.4", - "phpunit/phpunit-mock-objects": "~1.2.0", - "symfony/yaml": "~2.0" - }, - "require-dev": { - "pear-pear/pear": "1.9.4" - }, - "suggest": { - "ext-json": "*", - "ext-simplexml": "*", - "ext-tokenizer": "*", - "phpunit/php-invoker": ">=1.1.0,<1.2.0" - }, - "time": "2014-02-03 07:46:27", - "bin": [ - "composer/bin/phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.7.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "PHPUnit/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "", - "../../symfony/yaml/" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "http://www.phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ] - }, { "name": "doctrine/collections", "version": "v1.2", @@ -1491,5 +1300,196 @@ "logging", "psr-3" ] + }, + { + "name": "phpunit/php-token-stream", + "version": "1.2.2", + "version_normalized": "1.2.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/ad4e1e23ae01b483c16f600ff1bebec184588e32", + "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "time": "2014-03-03 05:10:30", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "PHP/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ] + }, + { + "name": "phpunit/php-code-coverage", + "version": "1.2.16", + "version_normalized": "1.2.16.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "69e55e68481cf708a6db43aff0b504e31402fe27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/69e55e68481cf708a6db43aff0b504e31402fe27", + "reference": "69e55e68481cf708a6db43aff0b504e31402fe27", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": ">=1.3.0@stable", + "phpunit/php-text-template": ">=1.2.0@stable", + "phpunit/php-token-stream": ">=1.1.3@stable" + }, + "require-dev": { + "phpunit/phpunit": "3.7.*@dev" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.0.5" + }, + "time": "2014-02-25 03:34:05", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "PHP/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "" + ], + "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" + ] + }, + { + "name": "phpunit/phpunit", + "version": "3.7.32", + "version_normalized": "3.7.32.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "2752cbb9ea5bd84c2811b34b6953f76965ec7a2f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2752cbb9ea5bd84c2811b34b6953f76965ec7a2f", + "reference": "2752cbb9ea5bd84c2811b34b6953f76965ec7a2f", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpunit/php-code-coverage": "~1.2.1", + "phpunit/php-file-iterator": ">=1.3.1", + "phpunit/php-text-template": ">=1.1.1", + "phpunit/php-timer": ">=1.0.4", + "phpunit/phpunit-mock-objects": "~1.2.0", + "symfony/yaml": "~2.0" + }, + "require-dev": { + "pear-pear.php.net/pear": "1.9.4" + }, + "suggest": { + "ext-json": "*", + "ext-simplexml": "*", + "ext-tokenizer": "*", + "phpunit/php-invoker": ">=1.1.0,<1.2.0" + }, + "time": "2014-02-25 03:47:29", + "bin": [ + "composer/bin/phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.7.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "classmap": [ + "PHPUnit/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "", + "../../symfony/yaml/" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "http://www.phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ] } ]