Index: branches/5.3.x/core/units/helpers/cron_helper.php =================================================================== diff -u -r16519 -r16800 --- branches/5.3.x/core/units/helpers/cron_helper.php (.../cron_helper.php) (revision 16519) +++ branches/5.3.x/core/units/helpers/cron_helper.php (.../cron_helper.php) (revision 16800) @@ -1,6 +1,6 @@ fieldFactory = new FieldFactory(); + } + + /** * Defines possible cron fields and their matching priority * * @var Array @@ -193,6 +214,26 @@ } /** + * Get an instance of a field object for a cron expression field type. + * + * @param integer $field_type Field type. + * + * @return FieldInterface + */ + protected function getField($field_type) + { + $field_mapping = array( + self::MINUTE => 0, + self::HOUR => 1, + self::DAY => 2, + self::MONTH => 3, + self::WEEKDAY => 4, + ); + + return $this->fieldFactory->getField($field_mapping[$field_type]); + } + + /** * Creates virtual fields for given unit * * @param string $prefix @@ -254,13 +295,12 @@ { $validated = true; $combined_value = Array (); - $cron_field = new kCronField(); foreach ($this->fieldTypes as $field_type) { $field_name = $this->_getFieldNameByType($field_type, $field_prefix); $value = preg_replace('/\s+/s', '', mb_strtoupper($object->GetDBField($field_name))); - if ( $cron_field->validate($field_type, $value) ) { + if ( $this->getField($field_type)->validate($value) ) { $object->SetDBField($field_name, $value); } else { @@ -278,36 +318,6 @@ } /** - * Replaces aliases in the field - * - * @param int $field_type - * @param string $value - * @return string - * @access public - */ - public static function replaceAliases($field_type, $value) - { - $replacements = Array (); - $value = mb_strtolower($value); - - if ( $field_type == self::MONTH ) { - $replacements = Array ( - 'jan' => 1, 'feb' => 2, 'mar' => 3, 'apr' => 4, 'may' => 5, 'jun' => 6, - 'jul' => 7, 'aug' => 8, 'sep' => 9, 'oct' => 10, 'nov' => 11, 'dec' => 12, - ); - } - elseif ( $field_type == self::WEEKDAY ) { - $replacements = Array ('sun' => 0, 'mon' => 1, 'tue' => 2, 'wed' => 3, 'thu' => 4, 'fri' => 5, 'sat' => 6); - } - - if ( $replacements ) { - $value = str_replace(array_keys($replacements), array_values($replacements), $value); - } - - return $value; - } - - /** * Returns next (after given one or now) timestamp matching given cron expression * * @param string $expression @@ -324,359 +334,15 @@ $date = TIMENOW; } - $next_run = strtotime('-' . (int)date('s', $date) . ' seconds', $date); - $expression_parts = explode(' ', $expression); + $cron = CronExpression::factory($expression); - $cron_field = new kCronField(); + $date_formatted = date('Y-m-d H:i:s', $date); - // set a hard limit to bail on an impossible date - for ($i = 0; $i < 1000; $i++) { - foreach ($this->fieldTypes as $field_type) { - $matched = false; - $part = $expression_parts[$field_type - 1]; - - // check if this is singular or a list - if ( strpos($part, ',') === false ) { - $matched = $cron_field->match($field_type, $next_run, $part); - } - else { - $rules = explode(',', $part); - - foreach ($rules as $rule) { - if ( $cron_field->match($field_type, $next_run, $rule) ) { - $matched = true; - break; - } - } - } - - // if the field is not matched, then start over - if ( !$matched ) { - $next_run = $cron_field->increment($field_type, $next_run, $inverse); - continue 2; - } - } - - // Skip this match if needed - if ( (!$allow_current_date && $next_run == $date) ) { - $next_run = $cron_field->increment(self::MINUTE, $next_run, $inverse); - continue; - } - - return $next_run; + if ( $inverse ) { + return $cron->getPreviousRunDate($date_formatted, 0, $allow_current_date)->format('U'); } - throw new RuntimeException('Impossible CRON expression'); + return $cron->getNextRunDate($date_formatted, 0, $allow_current_date)->format('U'); } -} - -class kCronField extends kBase { - - /** - * Validates field value - * - * @param int $field_type - * @param string $value - * @param bool $asterisk_allowed - * @return bool - * @access public - */ - public function validate($field_type, $value, $asterisk_allowed = true) - { - $rules = explode(',', kCronHelper::replaceAliases($field_type, $value)); - - foreach ($rules as $rule) { - if ( $this->_isIncrementRule($rule) ) { - if ( !$this->_validateIncrementRule($field_type, $rule) ) { - return false; - } - } - elseif ( $this->_isRangeRule($rule) ) { - if ( !$this->_validateRangeRule($field_type, $rule) ) { - return false; - } - } - elseif ( !$this->_validateNumberRule($field_type, $rule, $asterisk_allowed) ) { - return false; - } - } - - return true; - } - - /** - * Determines if expression is range - * - * @param string $rule - * @return bool - * @access protected - */ - protected function _isRangeRule($rule) - { - return strpos($rule, '-') !== false; - } - - /** - * Validates range rule - * - * @param int $field_type - * @param string $rule - * @return bool - * @access protected - */ - protected function _validateRangeRule($field_type, $rule) - { - $parts = explode('-', $rule); - - if ( count($parts) != 2 ) { - return false; - } - - $min_value = $parts[0]; - $max_value = $parts[1]; - - if ( !$this->_validateNumberRule($field_type, $min_value) || !$this->_validateNumberRule($field_type, $max_value) || $min_value >= $max_value ) { - return false; - } - - return true; - } - - /** - * Determines if expression is increment - * - * @param string $rule - * @return bool - * @access protected - */ - protected function _isIncrementRule($rule) - { - return strpos($rule, '/') !== false; - } - - /** - * Validates increment rule - * - * @param int $field_type - * @param string $rule - * @return bool - * @access protected - */ - protected function _validateIncrementRule($field_type, $rule) - { - $parts = explode('/', $rule); - - if ( count($parts) != 2 ) { - return false; - } - - $interval = $parts[0]; - $increment = $parts[1]; - - if ( $this->_isRangeRule($interval) ) { - if ( !$this->_validateRangeRule($field_type, $interval) ) { - return false; - } - } - elseif ( !$this->_validateNumberRule($field_type, $interval, true) ) { - return false; - } - - if ( !$this->_validateNumberRule($field_type, $increment) ) { - return false; - } - - return true; - } - - /** - * Validates, that number within range OR an asterisk is given - * - * @param int $field_type - * @param string $rule - * @param bool $asterisk_allowed - * @return bool - * @access protected - */ - protected function _validateNumberRule($field_type, $rule, $asterisk_allowed = false) - { - if ( "$rule" === '*' ) { - return $asterisk_allowed; - } - - $int_rule = (int)$rule; - - if ( !is_numeric($rule) || "$int_rule" !== "$rule" ) { - // not integer - return false; - } - - $range_mapping = Array ( - kCronHelper::MINUTE => Array ('from' => 0, 'to' => 59), - kCronHelper::HOUR => Array ('from' => 0, 'to' => 23), - kCronHelper::DAY => Array ('from' => 1, 'to' => 31), - kCronHelper::MONTH => Array ('from' => 1, 'to' => 12), - kCronHelper::WEEKDAY => Array ('from' => 0, 'to' => 7), - ); - - return $int_rule >= $range_mapping[$field_type]['from'] && $int_rule <= $range_mapping[$field_type]['to']; - } - - /** - * Tries to match given date to given expression - * - * @param int $field_type - * @param int $date - * @param string $rule - * @return bool - * @access public - */ - public function match($field_type, $date, $rule) - { - $date_part = $this->_getDatePart($field_type, $date, $rule); - - if ( $this->_isIncrementRule($rule) ) { - return $this->_isInIncrement($date_part, $rule); - } - elseif ( $this->_isRangeRule($rule) ) { - return $this->_isInRange($date_part, $rule); - } - - return $rule == '*' || $date_part == $rule; - } - - /** - * Returns only part, needed based on field type of date in timestamp - * - * @param int $field_type - * @param int $date - * @param string $rule - * @return int - * @access protected - */ - protected function _getDatePart($field_type, $date, $rule) - { - $mapping = Array ( - kCronHelper::MINUTE => 'i', - kCronHelper::HOUR => 'G', - kCronHelper::DAY => 'j', - kCronHelper::MONTH => 'n', - kCronHelper::WEEKDAY => 'N', - ); - - if ( $field_type == kCronHelper::WEEKDAY ) { - // Test to see which Sunday to use -- 0 == 7 == Sunday - $mapping[$field_type] = in_array(7, str_split($rule)) ? 'N' : 'w'; - } - - return (int)date($mapping[$field_type], $date); - } - - /** - * Test if a value is within a range - * - * @param string $date_value Set date value - * @param string $rule Value to test - * @return bool - * @access protected - */ - protected function _isInRange($date_value, $rule) - { - $parts = array_map('trim', explode('-', $rule, 2)); - - return $date_value >= $parts[0] && $date_value <= $parts[1]; - } - - /** - * Test if a value is within an increments of ranges (offset[-to]/step size) - * - * @param string $date_value Set date value - * @param string $rule Value to test - * @return bool - * @access protected - */ - protected function _isInIncrement($date_value, $rule) - { - $parts = array_map('trim', explode('/', $rule, 2)); - $stepSize = isset($parts[1]) ? $parts[1] : 0; - - if ( $parts[0] == '*' || $parts[0] == 0 ) { - return (int)$date_value % $stepSize == 0; - } - - $range = explode('-', $parts[0], 2); - $offset = $range[0]; - $to = isset($range[1]) ? $range[1] : $date_value; - - // Ensure that the date value is within the range - if ( $date_value < $offset || $date_value > $to ) { - return false; - } - - for ($i = $offset; $i <= $to; $i += $stepSize) { - if ( $i == $date_value ) { - return true; - } - } - - return false; - } - - /** - * Increments/decrements given date for 1 unit based on field type - * - * @param int $field_type - * @param int $date - * @param bool $inverse - * @return int - * @access public - */ - public function increment($field_type, $date, $inverse = false) - { - $mapping = Array ( - kCronHelper::MINUTE => '1 minute', - kCronHelper::HOUR => '1 hour', - kCronHelper::DAY => '1 day', - kCronHelper::MONTH => '1 month', - kCronHelper::WEEKDAY => '1 day', - ); - - return $this->_resetTime($field_type, strtotime(($inverse ? '-' : '+') . $mapping[$field_type], $date), $inverse); - } - - /** - * Resets time based on field type - * - * @param int $field_type - * @param int $date - * @param bool $inverse - * @return int - * @access public - */ - protected function _resetTime($field_type, $date, $inverse = false) - { - if ( $field_type == kCronHelper::MONTH || $field_type == kCronHelper::WEEKDAY || $field_type == kCronHelper::DAY ) { - if ( $inverse ) { - $date = strtotime(date('Y-m-d 23:59:59', $date)); - // set time 23:59:00 - } - else { - // set time 00:00:00 - $date = strtotime(date('Y-m-d 00:00:00', $date)); - } - } - elseif ( $field_type == kCronHelper::HOUR ) { - if ( $inverse ) { - // set time :59:00 - $date = strtotime(date('Y-m-d H:59:59', $date)); - } - else { - // set time :00:00 - $date = strtotime(date('Y-m-d H:00:00', $date)); - } - } - - return $date; - } -} \ No newline at end of file +} Index: branches/5.3.x/tools/class_locator.php =================================================================== diff -u -r16395 -r16800 --- branches/5.3.x/tools/class_locator.php (.../class_locator.php) (revision 16395) +++ branches/5.3.x/tools/class_locator.php (.../class_locator.php) (revision 16800) @@ -1,6 +1,6 @@ Init(); -/** @var \Composer\Autoload\ClassLoader $composer_class_loader */ +/** @var ClassLoader $composer_class_loader */ $composer_class_loader = require FULL_PATH . '/vendor/autoload.php'; return function ($class) use ($application, $composer_class_loader) { + // 1. Search for class within In-Portal. $file = $application->findClassFile($class); if ( $file !== false ) { return $file; } - return $composer_class_loader->findFile($class); + // 2. Search for class within Composer + register custom autoloaders. + $file = $composer_class_loader->findFile($class); + + if ( $file !== false ) { + return $file; + } + + // 3. Use custom autoloaders. + $dynamic_autoloader_namespaces = array( + 'ConsoleHelpers\\PHPUnitCompat\\', + 'Yoast\\PHPUnitPolyfills\\', + ); + + foreach ( $dynamic_autoloader_namespaces as $dynamic_autoloader_namespace ) { + if ( strpos($class, $dynamic_autoloader_namespace) !== 0 ) { + continue; + } + + return (new ReflectionClass($class))->getFileName(); + } + + return false; }; Index: branches/5.3.x/composer.lock =================================================================== diff -u -r16723 -r16800 --- branches/5.3.x/composer.lock (.../composer.lock) (revision 16723) +++ branches/5.3.x/composer.lock (.../composer.lock) (revision 16800) @@ -4,49 +4,57 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f829b982ceec533437242efa2763f61a", + "content-hash": "03b61a11d07186bb3a362faad10e7fa4", "packages": [ { - "name": "ircmaxell/password-compat", - "version": "v1.0.4", + "name": "mtdowling/cron-expression", + "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/ircmaxell/password_compat.git", - "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c" + "url": "https://github.com/in-portal/cron-expression", + "reference": "c4dda94f8f13f5447aa82e9b9528de1115448c74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/5c5cde8822a69545767f7c7f3058cb15ff84614c", - "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c", + "url": "https://api.github.com/repos/in-portal/cron-expression/zipball/c4dda94f8f13f5447aa82e9b9528de1115448c74", + "reference": "c4dda94f8f13f5447aa82e9b9528de1115448c74", "shasum": "" }, + "require": { + "php": ">=5.4.7" + }, "require-dev": { - "phpunit/phpunit": "4.*" + "yoast/phpunit-polyfills": "^1.0" }, + "default-branch": true, "type": "library", "autoload": { - "files": [ - "lib/password.php" - ] + "psr-4": { + "Cron\\": "src/Cron/" + } }, - "notification-url": "https://packagist.org/downloads/", + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/Cron/" + } + }, "license": [ "MIT" ], "authors": [ { - "name": "Anthony Ferrara", - "email": "ircmaxell@php.net", - "homepage": "http://blog.ircmaxell.com" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" } ], - "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash", - "homepage": "https://github.com/ircmaxell/password_compat", + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", "keywords": [ - "hashing", - "password" + "cron", + "schedule" ], - "time": "2014-11-20T16:49:30+00:00" + "abandoned": "dragonmantank/cron-expression", + "time": "2022-11-08T11:57:39+00:00" }, { "name": "paragonie/random_compat", @@ -95,6 +103,11 @@ "pseudorandom", "random" ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, "time": "2022-02-16T17:07:03+00:00" }, { @@ -142,6 +155,9 @@ "psr", "psr-3" ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, "time": "2021-05-03T11:20:27+00:00" }, { @@ -187,6 +203,10 @@ } ], "description": "Automatic BASH completion for Symfony Console Component based applications.", + "support": { + "issues": "https://github.com/stecman/symfony-console-completion/issues", + "source": "https://github.com/stecman/symfony-console-completion/tree/0.11.0" + }, "time": "2019-11-24T17:03:06+00:00" }, { @@ -248,6 +268,9 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/console/tree/v2.8.52" + }, "time": "2018-11-20T15:55:20+00:00" }, { @@ -305,6 +328,9 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/debug/tree/v2.8.50" + }, "abandoned": "symfony/error-handler", "time": "2018-11-11T11:18:13+00:00" }, @@ -369,80 +395,9 @@ "portable", "shim" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T09:01:57+00:00" - }, - { - "name": "symfony/polyfill-php55", - "version": "v1.19.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php55.git", - "reference": "248a5c9877b126493abb661e4fb47792e418035b" + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.19.0" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/248a5c9877b126493abb661e4fb47792e418035b", - "reference": "248a5c9877b126493abb661e4fb47792e418035b", - "shasum": "" - }, - "require": { - "ircmaxell/password-compat": "~1.0", - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.19-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php55\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 5.5+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], "funding": [ { "url": "https://symfony.com/sponsor", @@ -460,150 +415,6 @@ "time": "2020-10-23T09:01:57+00:00" }, { - "name": "symfony/polyfill-php56", - "version": "v1.19.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "ea19621731cbd973a6702cfedef3419768bf3372" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/ea19621731cbd973a6702cfedef3419768bf3372", - "reference": "ea19621731cbd973a6702cfedef3419768bf3372", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/polyfill-util": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.19-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php56\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T09:01:57+00:00" - }, - { - "name": "symfony/polyfill-util", - "version": "v1.19.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-util.git", - "reference": "8df0c3e6a4b85df9a5c6f3f2f46fba5c5c47058a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/8df0c3e6a4b85df9a5c6f3f2f46fba5c5c47058a", - "reference": "8df0c3e6a4b85df9a5c6f3f2f46fba5c5c47058a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.19-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Util\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony utilities for portability of PHP codes", - "homepage": "https://symfony.com", - "keywords": [ - "compat", - "compatibility", - "polyfill", - "shim" - ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-21T09:57:48+00:00" - }, - { "name": "symfony/process", "version": "v2.8.52", "source": { @@ -650,6 +461,9 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v2.8.50" + }, "time": "2018-11-11T11:18:13+00:00" } ], @@ -693,37 +507,42 @@ "PHP_CodeSniffer", "codesniffer" ], + "support": { + "issues": "https://github.com/aik099/CodingStandard/issues", + "source": "https://github.com/aik099/CodingStandard/tree/in-portal" + }, "time": "2021-11-07T17:05:54+00:00" }, { "name": "aik099/phpunit-mink", - "version": "v2.2.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/minkphp/phpunit-mink.git", - "reference": "68b94432ac12ad4f714ef540037396aeb369e230" + "reference": "6ebf48d8d76a7054f84de2cbe779318cc3b0f4ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/phpunit-mink/zipball/68b94432ac12ad4f714ef540037396aeb369e230", - "reference": "68b94432ac12ad4f714ef540037396aeb369e230", + "url": "https://api.github.com/repos/minkphp/phpunit-mink/zipball/6ebf48d8d76a7054f84de2cbe779318cc3b0f4ab", + "reference": "6ebf48d8d76a7054f84de2cbe779318cc3b0f4ab", "shasum": "" }, "require": { - "behat/mink": "~1.6@dev", + "behat/mink": "^1.8@dev", "behat/mink-selenium2-driver": "~1.2", - "php": ">=5.3.2", - "phpunit/phpunit": "~4|~5", - "symfony/event-dispatcher": "~2.4|~3.0" + "console-helpers/phpunit-compat": "^1.0.3", + "php": ">=5.6", + "phpunit/phpunit": ">=4.8.35 <5|>=5.4.3" }, "require-dev": { "aik099/coding-standard": "dev-master", - "mockery/mockery": "~0.9" + "mockery/mockery": "~0.9|^1.5", + "yoast/phpunit-polyfills": "^1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "2.3.x-dev" } }, "autoload": { @@ -753,7 +572,11 @@ "selenium", "tests" ], - "time": "2016-06-26T09:07:47+00:00" + "support": { + "issues": "https://github.com/minkphp/phpunit-mink/issues", + "source": "https://github.com/minkphp/phpunit-mink/tree/v2.4.0" + }, + "time": "2024-07-15T11:00:18+00:00" }, { "name": "behat/mink", @@ -815,6 +638,10 @@ "testing", "web" ], + "support": { + "issues": "https://github.com/minkphp/Mink/issues", + "source": "https://github.com/minkphp/Mink/tree/v1.9.0" + }, "time": "2021-10-11T11:58:47+00:00" }, { @@ -876,9 +703,64 @@ "testing", "webdriver" ], + "support": { + "issues": "https://github.com/minkphp/MinkSelenium2Driver/issues", + "source": "https://github.com/minkphp/MinkSelenium2Driver/tree/v1.5.0" + }, "time": "2021-10-12T16:01:47+00:00" }, { + "name": "console-helpers/phpunit-compat", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/console-helpers/phpunit-compat.git", + "reference": "096c6e42ebd090415ab03d9ce9edff8ed978a319" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/console-helpers/phpunit-compat/zipball/096c6e42ebd090415ab03d9ce9edff8ed978a319", + "reference": "096c6e42ebd090415ab03d9ce9edff8ed978a319", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "require-dev": { + "aik099/coding-standard": "dev-master" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "files": [ + "phpunitcompat_autoloader.php" + ], + "psr-4": { + "Tests\\ConsoleHelpers\\PHPUnitCompat\\": "tests/PHPUnitCompat/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Alexander Obuhovich", + "email": "aik.bold@gmail.com" + } + ], + "description": "Compatibility layer for PHPUnit test cases/test suite to work on different major PHPUnit versions", + "support": { + "issues": "https://github.com/console-helpers/phpunit-compat/issues", + "source": "https://github.com/console-helpers/phpunit-compat/tree/v1.0.3" + }, + "time": "2024-07-11T11:28:01+00:00" + }, + { "name": "doctrine/instantiator", "version": "1.0.5", "source": { @@ -930,65 +812,38 @@ "constructor", "instantiate" ], - "time": "2015-06-14T21:17:01+00:00" - }, - { - "name": "hamcrest/hamcrest-php", - "version": "v1.2.2", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c" + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.0.5" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/b37020aa976fa52d3de9aa904aa2522dc518f79c", - "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "1.3.3", - "satooshi/php-coveralls": "dev-master" - }, - "type": "library", - "autoload": { - "classmap": [ - "hamcrest" - ], - "files": [ - "hamcrest/Hamcrest.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD" + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], - "time": "2015-05-11T14:41:42+00:00" + "time": "2015-06-14T21:17:01+00:00" }, { "name": "instaclick/php-webdriver", - "version": "1.4.14", + "version": "1.4.19", "source": { "type": "git", "url": "https://github.com/instaclick/php-webdriver.git", - "reference": "200b8df772b74d604bebf25ef42ad6f8ee6380a9" + "reference": "3b2a2ddc4e0a690cc691d7e5952964cc4b9538b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/instaclick/php-webdriver/zipball/200b8df772b74d604bebf25ef42ad6f8ee6380a9", - "reference": "200b8df772b74d604bebf25ef42ad6f8ee6380a9", + "url": "https://api.github.com/repos/instaclick/php-webdriver/zipball/3b2a2ddc4e0a690cc691d7e5952964cc4b9538b1", + "reference": "3b2a2ddc4e0a690cc691d7e5952964cc4b9538b1", "shasum": "" }, "require": { @@ -1034,20 +889,24 @@ "webdriver", "webtest" ], - "time": "2022-04-19T02:06:59+00:00" + "support": { + "issues": "https://github.com/instaclick/php-webdriver/issues", + "source": "https://github.com/instaclick/php-webdriver/tree/1.4.19" + }, + "time": "2024-03-19T01:58:53+00:00" }, { "name": "mindplay/annotations", - "version": "1.3.3", + "version": "1.3.4", "source": { "type": "git", "url": "https://github.com/php-annotations/php-annotations.git", - "reference": "d314832b338b88299c4108361c858b0590798d2c" + "reference": "6d5bfc47218cb013b0b3026374c6ffb0b1cad989" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-annotations/php-annotations/zipball/d314832b338b88299c4108361c858b0590798d2c", - "reference": "d314832b338b88299c4108361c858b0590798d2c", + "url": "https://api.github.com/repos/php-annotations/php-annotations/zipball/6d5bfc47218cb013b0b3026374c6ffb0b1cad989", + "reference": "6d5bfc47218cb013b0b3026374c6ffb0b1cad989", "shasum": "" }, "require": { @@ -1084,72 +943,11 @@ "annotations", "framework" ], - "time": "2022-07-16T15:11:03+00:00" - }, - { - "name": "mockery/mockery", - "version": "0.9.11", - "source": { - "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "be9bf28d8e57d67883cba9fcadfcff8caab667f8" + "support": { + "issues": "https://github.com/php-annotations/php-annotations/issues", + "source": "https://github.com/php-annotations/php-annotations/tree/1.3.4" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/be9bf28d8e57d67883cba9fcadfcff8caab667f8", - "reference": "be9bf28d8e57d67883cba9fcadfcff8caab667f8", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "~1.1", - "lib-pcre": ">=7.0", - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.9.x-dev" - } - }, - "autoload": { - "psr-0": { - "Mockery": "library/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL). Designed as a drop in alternative to PHPUnit's phpunit-mock-objects library, Mockery is easy to integrate with PHPUnit and can operate alongside phpunit-mock-objects without the World ending.", - "homepage": "http://github.com/padraic/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ], - "time": "2019-02-12T16:07:13+00:00" + "time": "2024-02-17T16:21:25+00:00" }, { "name": "nikic/php-parser", @@ -1194,6 +992,10 @@ "parser", "php" ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/1.x" + }, "time": "2015-09-19T14:15:08+00:00" }, { @@ -1243,6 +1045,10 @@ "email": "mike.vanriel@naenius.com" } ], + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/release/2.x" + }, "time": "2016-01-25T08:17:30+00:00" }, { @@ -1306,6 +1112,10 @@ "spy", "stub" ], + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/v1.10.3" + }, "time": "2020-03-05T15:02:03+00:00" }, { @@ -1368,6 +1178,11 @@ "testing", "xunit" ], + "support": { + "irc": "irc://irc.freenode.net/phpunit", + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/2.2" + }, "time": "2015-10-06T15:47:00+00:00" }, { @@ -1415,6 +1230,11 @@ "filesystem", "iterator" ], + "support": { + "irc": "irc://irc.freenode.net/phpunit", + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/1.4.5" + }, "time": "2017-11-27T13:52:08+00:00" }, { @@ -1456,6 +1276,10 @@ "keywords": [ "template" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" + }, "time": "2015-06-21T13:50:34+00:00" }, { @@ -1505,6 +1329,10 @@ "keywords": [ "timer" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/master" + }, "time": "2017-02-26T11:10:40+00:00" }, { @@ -1554,6 +1382,10 @@ "keywords": [ "tokenizer" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", + "source": "https://github.com/sebastianbergmann/php-token-stream/tree/1.4" + }, "abandoned": true, "time": "2017-12-04T08:55:13+00:00" }, @@ -1627,6 +1459,10 @@ "testing", "xunit" ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/4.8.36" + }, "time": "2017-06-21T08:07:12+00:00" }, { @@ -1683,6 +1519,11 @@ "mock", "xunit" ], + "support": { + "irc": "irc://irc.freenode.net/phpunit", + "issues": "https://github.com/sebastianbergmann/phpunit-mock-objects/issues", + "source": "https://github.com/sebastianbergmann/phpunit-mock-objects/tree/2.3" + }, "abandoned": true, "time": "2015-10-02T06:51:40+00:00" }, @@ -1734,6 +1575,10 @@ "container", "dependency injection" ], + "support": { + "issues": "https://github.com/silexphp/Pimple/issues", + "source": "https://github.com/silexphp/Pimple/tree/master" + }, "time": "2018-01-21T07:42:36+00:00" }, { @@ -1783,6 +1628,10 @@ "container-interop", "psr" ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/master" + }, "time": "2017-02-14T16:28:37+00:00" }, { @@ -1857,6 +1706,10 @@ "phpunit", "tests" ], + "support": { + "issues": "https://github.com/qa-tools/qa-tools/issues", + "source": "https://github.com/qa-tools/qa-tools/tree/master" + }, "time": "2016-07-06T11:31:04+00:00" }, { @@ -1921,6 +1774,10 @@ "compare", "equality" ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/1.2" + }, "time": "2017-01-29T09:50:25+00:00" }, { @@ -1973,6 +1830,10 @@ "keywords": [ "diff" ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/1.4" + }, "time": "2017-05-22T07:24:03+00:00" }, { @@ -2023,6 +1884,10 @@ "environment", "hhvm" ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/1.3" + }, "time": "2016-08-18T05:49:44+00:00" }, { @@ -2090,6 +1955,10 @@ "export", "exporter" ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/master" + }, "time": "2016-06-17T09:04:28+00:00" }, { @@ -2141,6 +2010,10 @@ "keywords": [ "global state" ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/1.1.1" + }, "time": "2015-10-12T03:26:01+00:00" }, { @@ -2194,6 +2067,10 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/master" + }, "time": "2016-10-03T07:41:43+00:00" }, { @@ -2229,6 +2106,10 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/1.0.6" + }, "time": "2015-06-21T13:59:46+00:00" }, { @@ -2282,69 +2163,12 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v2.8.52" + }, "time": "2018-11-11T11:18:13+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v2.8.52", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a77e974a5fecb4398833b0709210e3d5e334ffb0", - "reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^2.0.5|~3.0.0", - "symfony/dependency-injection": "~2.6|~3.0.0", - "symfony/expression-language": "~2.6|~3.0.0", - "symfony/stopwatch": "~2.3|~3.0.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com", - "time": "2018-11-21T14:20:20+00:00" - }, - { "name": "symfony/polyfill-ctype", "version": "v1.19.0", "source": { @@ -2404,6 +2228,9 @@ "polyfill", "portable" ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.19.0" + }, "funding": [ { "url": "https://symfony.com/sponsor", @@ -2468,19 +2295,86 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v2.8.52" + }, "time": "2018-11-11T11:18:13+00:00" + }, + { + "name": "yoast/phpunit-polyfills", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", + "reference": "224e4a1329c03d8bad520e3fc4ec980034a4b212" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/224e4a1329c03d8bad520e3fc4ec980034a4b212", + "reference": "224e4a1329c03d8bad520e3fc4ec980034a4b212", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + }, + "require-dev": { + "yoast/yoastcs": "^2.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "files": [ + "phpunitpolyfills-autoload.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Team Yoast", + "email": "support@yoast.com", + "homepage": "https://yoast.com" + }, + { + "name": "Contributors", + "homepage": "https://github.com/Yoast/PHPUnit-Polyfills/graphs/contributors" + } + ], + "description": "Set of polyfills for changed PHPUnit functionality to allow for creating PHPUnit cross-version compatible tests", + "homepage": "https://github.com/Yoast/PHPUnit-Polyfills", + "keywords": [ + "phpunit", + "polyfill", + "testing" + ], + "support": { + "issues": "https://github.com/Yoast/PHPUnit-Polyfills/issues", + "source": "https://github.com/Yoast/PHPUnit-Polyfills" + }, + "time": "2023-08-19T14:25:08+00:00" } ], "aliases": [], "minimum-stability": "stable", "stability-flags": { + "mtdowling/cron-expression": 20, "aik099/coding-standard": 20 }, "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=5.3.7" + "php": ">=5.6" }, "platform-dev": [], - "plugin-api-version": "1.1.0" + "platform-overrides": { + "php": "5.6" + }, + "plugin-api-version": "2.2.0" } Index: branches/5.3.x/core/install/steps_db.xml =================================================================== diff -u -r16284 -r16800 --- branches/5.3.x/core/install/steps_db.xml (.../steps_db.xml) (revision 16284) +++ branches/5.3.x/core/install/steps_db.xml (.../steps_db.xml) (revision 16800) @@ -222,7 +222,7 @@ The System Requirements Check option should be used to ensure proper system behavior in the current environment.

- PHP version 5.3.9 or above*
+ PHP version 5.6 or above*
Use this PHP version or better to ensure normal website operation on every day basis.

Index: branches/5.3.x/tools/build/inc/phpunit.xml =================================================================== diff -u -r16195 -r16800 --- branches/5.3.x/tools/build/inc/phpunit.xml (.../phpunit.xml) (revision 16195) +++ branches/5.3.x/tools/build/inc/phpunit.xml (.../phpunit.xml) (revision 16800) @@ -1,7 +1,7 @@ @@ -19,22 +19,19 @@ - - - - - + + - + ../../.. Index: branches/5.3.x/core/install/cache/class_structure.php =================================================================== diff -u -r16731 -r16800 --- branches/5.3.x/core/install/cache/class_structure.php (.../class_structure.php) (revision 16731) +++ branches/5.3.x/core/install/cache/class_structure.php (.../class_structure.php) (revision 16800) @@ -7,9 +7,11 @@ return array( 'cache_format' => 2, 'classes' => array( + 'AbstractBrowserTestCase' => '/core/tests/AbstractBrowserTestCase.php', 'AbstractCategoryItemRouter' => '/core/kernel/utility/Router/AbstractCategoryItemRouter.php', 'AbstractReviewRouter' => '/core/kernel/utility/Router/AbstractReviewRouter.php', 'AbstractRouter' => '/core/kernel/utility/Router/AbstractRouter.php', + 'AbstractTestCase' => '/core/tests/AbstractTestCase.php', 'AdminEventsHandler' => '/core/units/admin/admin_events_handler.php', 'AdminTagProcessor' => '/core/units/admin/admin_tag_processor.php', 'AjaxFormHelper' => '/core/units/helpers/ajax_form_helper.php', @@ -129,6 +131,7 @@ 'NParser' => '/core/kernel/nparser/nparser.php', 'NParserCompiler' => '/core/kernel/nparser/compiler.php', 'POP3Helper' => '/core/units/helpers/pop3_helper.php', + 'Page' => '/core/kernel/tests/Page/Page.php', 'PageHelper' => '/core/units/helpers/page_helper.php', 'PageRevisionEventHandler' => '/core/units/page_revisions/page_revision_eh.php', 'PageRevisionTagProcessor' => '/core/units/page_revisions/page_revision_tp.php', @@ -148,6 +151,8 @@ 'PromoBlockGroupTagProcessor' => '/core/units/promo_block_groups/promo_block_group_tp.php', 'PromoBlockTagProcessor' => '/core/units/promo_blocks/promo_block_tp.php', 'PromoBlockType' => '/core/kernel/constants.php', + 'QAToolsUrlBuilder' => '/core/kernel/tests/Url/QAToolsUrlBuilder.php', + 'QAToolsUrlFactory' => '/core/kernel/tests/Url/QAToolsUrlFactory.php', 'RatingHelper' => '/core/units/helpers/rating_helper.php', 'RelatedSearchEventHandler' => '/core/units/related_searches/related_searches_event_handler.php', 'RelatedSearchTagProcessor' => '/core/units/related_searches/related_searches_tag_processor.php', @@ -255,7 +260,6 @@ 'kColumnPickerHelper' => '/core/units/helpers/col_picker_helper.php', 'kCountHelper' => '/core/units/helpers/count_helper.php', 'kCountryStatesHelper' => '/core/units/helpers/country_states_helper.php', - 'kCronField' => '/core/units/helpers/cron_helper.php', 'kCronHelper' => '/core/units/helpers/cron_helper.php', 'kCurlHelper' => '/core/units/helpers/curl_helper.php', 'kCustomFieldFormatter' => '/core/kernel/utility/formatters/customfield_formatter.php', @@ -357,6 +361,13 @@ 'kiCacheable' => '/core/kernel/interfaces/cacheable.php', ), 'class_info' => array( + 'AbstractBrowserTestCase' => array( + 'type' => 1, + 'modifiers' => 1, + 'extends' => array( + 0 => 'aik099\\PHPUnit\\BrowserTestCase', + ), + ), 'AbstractCategoryItemRouter' => array( 'type' => 1, 'modifiers' => 1, @@ -378,6 +389,13 @@ 0 => 'kBase', ), ), + 'AbstractTestCase' => array( + 'type' => 1, + 'modifiers' => 1, + 'extends' => array( + 0 => 'PHPUnit\\Framework\\TestCase', + ), + ), 'AdminEventsHandler' => array( 'type' => 1, 'modifiers' => 0, @@ -1152,6 +1170,13 @@ 0 => 'kHelper', ), ), + 'Page' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'QATools\\QATools\\HtmlElements\\TypifiedPage', + ), + ), 'PageHelper' => array( 'type' => 1, 'modifiers' => 0, @@ -1276,6 +1301,21 @@ 'type' => 1, 'modifiers' => 0, ), + 'QAToolsUrlBuilder' => array( + 'type' => 1, + 'modifiers' => 2, + 'extends' => array( + 0 => 'kBase', + 1 => 'QATools\\QATools\\PageObject\\Url\\IBuilder', + ), + ), + 'QAToolsUrlFactory' => array( + 'type' => 1, + 'modifiers' => 0, + 'extends' => array( + 0 => 'QATools\\QATools\\PageObject\\Url\\IUrlFactory', + ), + ), 'RatingHelper' => array( 'type' => 1, 'modifiers' => 0, @@ -1988,13 +2028,6 @@ 0 => 'kHelper', ), ), - 'kCronField' => array( - 'type' => 1, - 'modifiers' => 0, - 'extends' => array( - 0 => 'kBase', - ), - ), 'kCronHelper' => array( 'type' => 1, 'modifiers' => 0, Index: branches/5.3.x/core/kernel/application.php =================================================================== diff -u -r16727 -r16800 --- branches/5.3.x/core/kernel/application.php (.../application.php) (revision 16727) +++ branches/5.3.x/core/kernel/application.php (.../application.php) (revision 16800) @@ -1,6 +1,6 @@ registerClass('Params', KERNEL_PATH . '/utility/params.php', 'kActions'); $this->registerClass('kMainTagProcessor', KERNEL_PATH . '/processors/main_processor.php', 'm_TagProcessor'); $this->registerClass('kEmailSendingHelper', KERNEL_PATH . '/utility/email_send.php', 'EmailSender'); + + // Testing. + $this->registerClass('Page', KERNEL_PATH . '/tests/Page/Page.php'); + $this->registerClass('QAToolsUrlBuilder', KERNEL_PATH . '/tests/Url/QAToolsUrlBuilder.php'); + $this->registerClass('QAToolsUrlFactory', KERNEL_PATH . '/tests/Url/QAToolsUrlFactory.php'); + $this->registerClass('AbstractTestCase', KERNEL_PATH . '/../tests/AbstractTestCase.php'); + $this->registerClass('AbstractBrowserTestCase', KERNEL_PATH . '/../tests/AbstractBrowserTestCase.php'); } /** Index: branches/5.3.x/core/install/step_templates/sys_requirements.tpl =================================================================== diff -u -r16723 -r16800 --- branches/5.3.x/core/install/step_templates/sys_requirements.tpl (.../sys_requirements.tpl) (revision 16723) +++ branches/5.3.x/core/install/step_templates/sys_requirements.tpl (.../sys_requirements.tpl) (revision 16800) @@ -11,7 +11,7 @@ '; $check_titles = Array ( - 'php_version' => 'PHP version 5.3.9 or above*', + 'php_version' => 'PHP version 5.6 or above*', 'url_rewriting' => 'URL rewriting support', 'java' => 'Java template compression', 'composer' => 'Dependencies via Composer*', Index: branches/5.3.x/core/install/prerequisites.php =================================================================== diff -u -r16723 -r16800 --- branches/5.3.x/core/install/prerequisites.php (.../prerequisites.php) (revision 16723) +++ branches/5.3.x/core/install/prerequisites.php (.../prerequisites.php) (revision 16800) @@ -1,6 +1,6 @@ ='); + $ret['php_version'] = version_compare(PHP_VERSION, '5.6', '>='); if ( function_exists('apache_get_modules') ) { $mod_rewrite = in_array('mod_rewrite', apache_get_modules()); Index: branches/5.3.x/.arcconfig =================================================================== diff -u -r16195 -r16800 --- branches/5.3.x/.arcconfig (.../.arcconfig) (revision 16195) +++ branches/5.3.x/.arcconfig (.../.arcconfig) (revision 16800) @@ -1,5 +1,5 @@ { "project.name": "in-portal", "repository.callsign": "INP", - "phabricator.uri": "http://qa.in-portal.org/" + "phabricator.uri": "https://qa.in-portal.org/" } Index: branches/5.3.x/composer.json =================================================================== diff -u -r16723 -r16800 --- branches/5.3.x/composer.json (.../composer.json) (revision 16723) +++ branches/5.3.x/composer.json (.../composer.json) (revision 16800) @@ -1,21 +1,32 @@ { - "name": "In-Portal", + "name": "intechnic/in-portal", "require": { - "php": ">=5.3.7", + "php": ">=5.6", "symfony/console": "~2.6", "stecman/symfony-console-completion": "~0.5", "symfony/process": "^2.7", "paragonie/random_compat": "^2.0", - "symfony/polyfill-php55": "^1.19", - "symfony/polyfill-php56": "^1.19" + "mtdowling/cron-expression": "dev-master" }, "require-dev": { - "aik099/phpunit-mink": "~2.0", - "qa-tools/qa-tools": "~1.0", + "behat/mink": "^1.7", + "aik099/phpunit-mink": "^2.4", + "yoast/phpunit-polyfills": "^1.1", + "qa-tools/qa-tools": "^1.2", + "phpspec/prophecy": "^1.10", "aik099/coding-standard": "dev-in-portal", - "nikic/php-parser": "~1.2", - "mockery/mockery": "~0.9", - - "behat/mink": "~1.6" + "nikic/php-parser": "~1.2" + }, + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/in-portal/cron-expression", + "no-api": true + } + ], + "config": { + "platform": { + "php": "5.6" + } } } Index: branches/5.3.x/core/kernel/utility/formatters/formatter.php =================================================================== diff -u -r16600 -r16800 --- branches/5.3.x/core/kernel/utility/formatters/formatter.php (.../formatter.php) (revision 16600) +++ branches/5.3.x/core/kernel/utility/formatters/formatter.php (.../formatter.php) (revision 16800) @@ -1,6 +1,6 @@ @@ -16,22 +16,19 @@ - - - - - + + - + ../../../modules/custom Index: branches/5.3.x/tools/build/targets/common.xml =================================================================== diff -u -r16195 -r16800 --- branches/5.3.x/tools/build/targets/common.xml (.../common.xml) (revision 16195) +++ branches/5.3.x/tools/build/targets/common.xml (.../common.xml) (revision 16800) @@ -135,7 +135,6 @@ - Index: branches/5.3.x/core/kernel/startup.php =================================================================== diff -u -r16124 -r16800 --- branches/5.3.x/core/kernel/startup.php (.../startup.php) (revision 16124) +++ branches/5.3.x/core/kernel/startup.php (.../startup.php) (revision 16800) @@ -1,6 +1,6 @@