Index: branches/5.2.x/core/units/helpers/cron_helper.php =================================================================== --- branches/5.2.x/core/units/helpers/cron_helper.php (revision 16768) +++ branches/5.2.x/core/units/helpers/cron_helper.php (revision 16769) @@ -1,680 +1,346 @@ fieldFactory = new FieldFactory(); + } + + /** * Defines possible cron fields and their matching priority * * @var Array * @access protected */ protected $fieldTypes = Array (self::MONTH, self::DAY, self::WEEKDAY, self::HOUR, self::MINUTE); protected $commonSettings = Array ( '* * * * *' => 'la_opt_CronEveryMinute', '*/5 * * * *' => 'la_opt_CronEveryFiveMinutes', '0,30 * * * *' => 'la_opt_CronTwiceAnHour', '0 * * * *' => 'la_opt_CronOnceAnHour', '0 0,12 * * *' => 'la_opt_CronTwiceADay', '0 0 * * *' => 'la_opt_CronOnceADay', '0 0 * * 0' => 'la_opt_CronOnceAWeek', '0 0 1,15 * *' => 'la_opt_CronTwiceAMonth', '0 0 1 * *' => 'la_opt_CronOnceAMonth', '0 0 1 1 *' => 'la_opt_CronOnceAYear', ); protected $minuteSettings = Array ( '*' => 'la_opt_CronEveryMinute', '*/2' => 'la_opt_CronEveryOtherMinute', '*/5' => 'la_opt_CronEveryFiveMinutes', '*/10' => 'la_opt_CronEveryTenMinutes', '*/15' => 'la_opt_CronEveryFifteenMinutes', '0,30' => 'la_opt_CronEveryThirtyMinutes', '--' => 'la_opt_CronMinutes', // minutes added dynamically later ); protected $hourSettings = Array ( '*' => 'la_opt_CronEveryHour', '*/2' => 'la_opt_CronEveryOtherHour', '*/3' => 'la_opt_CronEveryThreeHours', '*/4' => 'la_opt_CronEveryFourHours', '*/6' => 'la_opt_CronEverySixHours', '0,12' => 'la_opt_CronEveryTwelveHours', '--' => 'la_opt_CronHours', // hours added dynamically later ); protected $daySettings = Array ( '*' => 'la_opt_CronEveryDay', '*/2' => 'la_opt_CronEveryOtherDay', '1,15' => 'la_opt_CronTwiceAMonth', '--' => 'la_opt_CronDays', // days added dynamically later ); protected $monthSettings = Array ( '*' => 'la_opt_CronEveryMonth', '*/2' => 'la_opt_CronEveryOtherMonth', '*/4' => 'la_opt_CronEveryThreeMonths', '1,7' => 'la_opt_CronEverySixMonths', '--' => 'la_opt_CronMonths', '1' => 'la_opt_January', '2' => 'la_opt_February', '3' => 'la_opt_March', '4' => 'la_opt_April', '5' => 'la_opt_May', '6' => 'la_opt_June', '7' => 'la_opt_July', '8' => 'la_opt_August', '9' => 'la_opt_September', '10' => 'la_opt_October', '11' => 'la_opt_November', '12' => 'la_opt_December', ); protected $weekdaySettings = Array ( '*' => 'la_opt_CronEveryWeekday', '1-5' => 'la_opt_CronMondayThroughFriday', '0,6' => 'la_opt_CronSaturdayAndSunday', '1,3,5' => 'la_opt_CronMondayWednesdayAndFriday', '2,4' => 'la_opt_CronTuesdayAndThursday', '--' => 'la_opt_CronWeekdays', '0' => 'la_opt_Sunday', '1' => 'la_opt_Monday', '2' => 'la_opt_Tuesday', '3' => 'la_opt_Wednesday', '4' => 'la_opt_Thursday', '5' => 'la_opt_Friday', '6' => 'la_opt_Saturday', ); /** * Returns possible field options by type * * @param int $field_type * @return Array */ public function getOptions($field_type) { $mapping = Array ( self::COMMON => $this->commonSettings, self::MINUTE => $this->minuteSettings, self::HOUR => $this->hourSettings, self::DAY => $this->daySettings, self::MONTH => $this->monthSettings, self::WEEKDAY => $this->weekdaySettings, ); /** @var Array $ret */ $ret = $mapping[$field_type]; foreach ($ret as $option_key => $option_title) { $option_title = substr($option_title, 0, 1) == '+' ? substr($option_title, 1) : $this->Application->Phrase($option_title); $ret[$option_key] = $option_title; if ( "$option_key" !== '--' ) { $ret[$option_key] .= ' (' . $option_key . ')'; } } if ( $field_type == self::MINUTE ) { for ($i = 0; $i <= 59; $i++) { $ret[$i] = ':' . str_pad($i, 2, '0', STR_PAD_LEFT) . ' (' . $i . ')'; } } elseif ( $field_type == self::HOUR ) { /** @var LanguagesItem $language */ $language = $this->Application->recallObject('lang.current'); $short_time_format = str_replace(':s', '', $language->GetDBField('TimeFormat')); for ($i = 0; $i <= 23; $i++) { $ret[$i] = adodb_date($short_time_format, adodb_mktime($i, 0, 0)) . ' (' . $i . ')'; } } elseif ( $field_type == self::DAY ) { /** @var kMultiLanguageHelper $ml_helper */ $ml_helper = $this->Application->recallObject('kMultiLanguageHelper'); $forms = Array ( 'phrase1' => 'la_NumberSuffixSt', 'phrase2' => 'la_NumberSuffixNd', 'phrase3' => 'la_NumberSuffixRd', 'phrase4' => 'la_NumberSuffixTh', 'phrase5' => 'la_NumberSuffixTh' ); for ($i = 1; $i <= 31; $i++) { $ret[$i] = $i . $ml_helper->getPluralPhrase($i, $forms) . ' (' . $i . ')'; } } return $ret; } /** * Returns field name by type * * @param int $field_type * @param string $field_prefix * @return string * @access protected */ protected function _getFieldNameByType($field_type, $field_prefix) { $field_mapping = Array ( self::MINUTE => 'Minute', self::HOUR => 'Hour', self::DAY => 'Day', self::MONTH => 'Month', self::WEEKDAY => 'Weekday', ); return $field_prefix . $field_mapping[$field_type]; } /** + * 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 * @param string $field_prefix * @return void * @access public */ public function initUnit($prefix, $field_prefix = '') { $virtual_fields = $this->Application->getUnitOption($prefix, 'VirtualFields', Array ()); $virtual_fields[$field_prefix . 'CommonHints'] = Array ( 'type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => $this->getOptions(self::COMMON), 'default' => '' ); foreach ($this->fieldTypes as $field_type) { $field_name = $this->_getFieldNameByType($field_type, $field_prefix); $virtual_fields[$field_name] = Array ('type' => 'string', 'max_len' => 30, 'default' => '*'); $virtual_fields[$field_name . 'Hints'] = Array ( 'type' => 'string', 'formatter' => 'kOptionsFormatter', 'options' => $this->getOptions($field_type), 'default' => '' ); } $this->Application->setUnitOption($prefix, 'VirtualFields', $virtual_fields); } /** * Loads schedule values from database into virtual fields * * @param kDBItem $object * @param string $field_prefix */ public function load(kDBItem $object, $field_prefix = '') { $combined_value = explode(' ', $object->GetDBField($field_prefix)); foreach ($this->fieldTypes as $field_type) { $field_name = $this->_getFieldNameByType($field_type, $field_prefix); $object->SetDBField($field_name, $combined_value[$field_type - 1]); } } /** * Validates schedule values and saves them to database * * @param kDBItem $object * @param string $field_prefix * @return bool * @access public */ public function validateAndSave(kDBItem $object, $field_prefix = '') { $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 { $validated = false; $object->SetError($field_name, 'invalid_format'); } $combined_value[$field_type] = $value; } ksort($combined_value); $object->SetDBField($field_prefix, implode(' ', $combined_value)); return $validated; } /** - * 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 * @param int $date * @param bool $inverse * @param bool $allow_current_date * @return int * @access public * @throws RuntimeException */ public function getMatch($expression, $date = NULL, $inverse = false, $allow_current_date = false) { if ( !isset($date) ) { $date = TIMENOW; } - $next_run = strtotime('-' . (int)adodb_date('s', $date) . ' seconds', $date); - $expression_parts = explode(' ', $expression); - - $cron_field = new kCronField(); - - // 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; - } - - throw new RuntimeException('Impossible CRON expression'); - } -} - - -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)adodb_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]; - } + $cron = CronExpression::factory($expression); - /** - * 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; + $date_formatted = date('Y-m-d H:i:s', $date); - if ( $parts[0] == '*' || $parts[0] == 0 ) { - return (int)$date_value % $stepSize == 0; + if ( $inverse ) { + return $cron->getPreviousRunDate($date_formatted, 0, $allow_current_date)->format('U'); } - $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; + return $cron->getNextRunDate($date_formatted, 0, $allow_current_date)->format('U'); } - /** - * 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(adodb_date('Y-m-d 23:59:59', $date)); - // set time 23:59:00 - } - else { - // set time 00:00:00 - $date = strtotime(adodb_date('Y-m-d 00:00:00', $date)); - } - } - elseif ( $field_type == kCronHelper::HOUR ) { - if ( $inverse ) { - // set time :59:00 - $date = strtotime(adodb_date('Y-m-d H:59:59', $date)); - } - else { - // set time :00:00 - $date = strtotime(adodb_date('Y-m-d H:00:00', $date)); - } - } - - return $date; - } -} \ No newline at end of file +} Index: branches/5.2.x/composer.json =================================================================== --- branches/5.2.x/composer.json (revision 16768) +++ branches/5.2.x/composer.json (revision 16769) @@ -1,22 +1,30 @@ { "name": "intechnic/in-portal", "require": { - "php": ">=5.4.0", + "php": ">=5.4.7", "paragonie/random_compat": "^2.0", "symfony/polyfill-php55": "^1.19", - "symfony/polyfill-php56": "^1.19" + "symfony/polyfill-php56": "^1.19", + "mtdowling/cron-expression": "dev-master" }, "require-dev": { "behat/mink": "^1.7", "aik099/phpunit-mink": "^2.2", "yoast/phpunit-polyfills": "^1.1", "qa-tools/qa-tools": "^1.2", "phpspec/prophecy": "^1.10", "aik099/coding-standard": "dev-in-portal" }, + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/in-portal/cron-expression", + "no-api": true + } + ], "config": { "platform": { - "php": "5.4.0" + "php": "5.4.7" } } } Index: branches/5.2.x/composer.lock =================================================================== --- branches/5.2.x/composer.lock (revision 16768) +++ branches/5.2.x/composer.lock (revision 16769) @@ -1,2208 +1,2260 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "982948269c77150f85ea5efd93aef365", + "content-hash": "e44d657cbe6f1c15496b087609a60d98", "packages": [ { "name": "ircmaxell/password-compat", "version": "v1.0.4", "source": { "type": "git", "url": "https://github.com/ircmaxell/password_compat.git", "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/5c5cde8822a69545767f7c7f3058cb15ff84614c", "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c", "shasum": "" }, "require-dev": { "phpunit/phpunit": "4.*" }, "type": "library", "autoload": { "files": [ "lib/password.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Anthony Ferrara", "email": "ircmaxell@php.net", "homepage": "http://blog.ircmaxell.com" } ], "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", "keywords": [ "hashing", "password" ], "support": { "issues": "https://github.com/ircmaxell/password_compat/issues", "source": "https://github.com/ircmaxell/password_compat/tree/v1.0" }, "time": "2014-11-20T16:49:30+00:00" }, { + "name": "mtdowling/cron-expression", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/in-portal/cron-expression", + "reference": "c4dda94f8f13f5447aa82e9b9528de1115448c74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/in-portal/cron-expression/zipball/c4dda94f8f13f5447aa82e9b9528de1115448c74", + "reference": "c4dda94f8f13f5447aa82e9b9528de1115448c74", + "shasum": "" + }, + "require": { + "php": ">=5.4.7" + }, + "require-dev": { + "yoast/phpunit-polyfills": "^1.0" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/Cron/" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "abandoned": "dragonmantank/cron-expression", + "time": "2022-11-08T11:57:39+00:00" + }, + { "name": "paragonie/random_compat", "version": "v2.0.21", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", "reference": "96c132c7f2f7bc3230723b66e89f8f150b29d5ae" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/paragonie/random_compat/zipball/96c132c7f2f7bc3230723b66e89f8f150b29d5ae", "reference": "96c132c7f2f7bc3230723b66e89f8f150b29d5ae", "shasum": "" }, "require": { "php": ">=5.2.0" }, "require-dev": { "phpunit/phpunit": "*" }, "suggest": { "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." }, "type": "library", "autoload": { "files": [ "lib/random.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Paragon Initiative Enterprises", "email": "security@paragonie.com", "homepage": "https://paragonie.com" } ], "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", "keywords": [ "csprng", "polyfill", "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" }, { "name": "symfony/polyfill-php55", "version": "v1.19.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php55.git", "reference": "248a5c9877b126493abb661e4fb47792e418035b" }, "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" ], "support": { "source": "https://github.com/symfony/polyfill-php55/tree/v1.19.0" }, "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-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" ], "support": { "source": "https://github.com/symfony/polyfill-php56/tree/v1.19.0" }, "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" ], "support": { "source": "https://github.com/symfony/polyfill-util/tree/v1.19.0" }, "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" } ], "packages-dev": [ { "name": "aik099/coding-standard", "version": "dev-in-portal", "source": { "type": "git", "url": "https://github.com/aik099/CodingStandard.git", "reference": "26b67b43b3cb4d57a68a472170bf6fab07334c18" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/aik099/CodingStandard/zipball/26b67b43b3cb4d57a68a472170bf6fab07334c18", "reference": "26b67b43b3cb4d57a68a472170bf6fab07334c18", "shasum": "" }, "require-dev": { "squizlabs/php_codesniffer": "^3.0", "yoast/phpunit-polyfills": "^1.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Alexander Obuhovich", "email": "aik.bold@gmail.com" } ], "description": "The PHP_CodeSniffer coding standard I'm using on all of my projects.", "keywords": [ "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.3.0", "source": { "type": "git", "url": "https://github.com/minkphp/phpunit-mink.git", - "reference": "68b94432ac12ad4f714ef540037396aeb369e230" + "reference": "2f80d83eb1ed7da1c5c96b1eb7bab6687193493e" }, "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/2f80d83eb1ed7da1c5c96b1eb7bab6687193493e", + "reference": "2f80d83eb1ed7da1c5c96b1eb7bab6687193493e", "shasum": "" }, "require": { "behat/mink": "~1.6@dev", "behat/mink-selenium2-driver": "~1.2", - "php": ">=5.3.2", - "phpunit/phpunit": "~4|~5", + "php": ">=5.4.7", + "phpunit/phpunit": ">=4.8.35 <5|>=5.4.3", "symfony/event-dispatcher": "~2.4|~3.0" }, "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" } }, "autoload": { "psr-4": { "aik099\\PHPUnit\\": "library/aik099/PHPUnit", "PimpleCopy\\Pimple\\": "library/PimpleCopy/Pimple" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Alexander Obuhovich", "email": "aik.bold@gmail.com" } ], "description": "Library for using Mink in PHPUnit tests. Supports session sharing between tests in a test case.", "homepage": "http://github.com/minkphp/phpunit-mink", "keywords": [ "BrowserStack", "Mink", "Sauce", "SauceLabs", "phpunit", "selenium", "tests" ], "support": { "issues": "https://github.com/minkphp/phpunit-mink/issues", - "source": "https://github.com/minkphp/phpunit-mink/tree/v2.2.0" + "source": "https://github.com/minkphp/phpunit-mink/tree/v2.3.0" }, - "time": "2016-06-26T09:07:47+00:00" + "time": "2022-11-24T15:03:10+00:00" }, { "name": "behat/mink", "version": "v1.9.0", "source": { "type": "git", "url": "https://github.com/minkphp/Mink.git", "reference": "e35f4695de8800fc776af34ebf665ad58ebdd996" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/minkphp/Mink/zipball/e35f4695de8800fc776af34ebf665ad58ebdd996", "reference": "e35f4695de8800fc776af34ebf665ad58ebdd996", "shasum": "" }, "require": { "php": ">=5.4", "symfony/css-selector": "^2.7|^3.0|^4.0|^5.0" }, "require-dev": { "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5 || ^9.5", "symfony/debug": "^2.7|^3.0|^4.0|^5.0", "symfony/phpunit-bridge": "^3.4.38 || ^4.4 || ^5.0.5", "yoast/phpunit-polyfills": "^1.0" }, "suggest": { "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation", "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)", "dmore/chrome-mink-driver": "fast and JS-enabled driver for any app (requires chromium or google chrome)" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { "Behat\\Mink\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Konstantin Kudryashov", "email": "ever.zet@gmail.com", "homepage": "http://everzet.com" } ], "description": "Browser controller/emulator abstraction for PHP", "homepage": "https://mink.behat.org/", "keywords": [ "browser", "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" }, { "name": "behat/mink-selenium2-driver", "version": "v1.5.0", "source": { "type": "git", "url": "https://github.com/minkphp/MinkSelenium2Driver.git", "reference": "0dee8cceed7e198bf130b4af0fab0ffab6dab47f" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/minkphp/MinkSelenium2Driver/zipball/0dee8cceed7e198bf130b4af0fab0ffab6dab47f", "reference": "0dee8cceed7e198bf130b4af0fab0ffab6dab47f", "shasum": "" }, "require": { "behat/mink": "~1.7@dev", "instaclick/php-webdriver": "~1.1", "php": ">=5.4" }, "require-dev": { "mink/driver-testsuite": "dev-master" }, "type": "mink-driver", "extra": { "branch-alias": { "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { "Behat\\Mink\\Driver\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Pete Otaqui", "email": "pete@otaqui.com", "homepage": "https://github.com/pete-otaqui" }, { "name": "Konstantin Kudryashov", "email": "ever.zet@gmail.com", "homepage": "http://everzet.com" } ], "description": "Selenium2 (WebDriver) driver for Mink framework", "homepage": "https://mink.behat.org/", "keywords": [ "ajax", "browser", "javascript", "selenium", "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": "doctrine/instantiator", "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", "shasum": "" }, "require": { "php": ">=5.3,<8.0-DEV" }, "require-dev": { "athletic/athletic": "~0.1.8", "ext-pdo": "*", "ext-phar": "*", "phpunit/phpunit": "~4.0", "squizlabs/php_codesniffer": "~2.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", "homepage": "http://ocramius.github.com/" } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", "homepage": "https://github.com/doctrine/instantiator", "keywords": [ "constructor", "instantiate" ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", "source": "https://github.com/doctrine/instantiator/tree/1.0.5" }, "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" } ], "time": "2015-06-14T21:17:01+00:00" }, { "name": "instaclick/php-webdriver", "version": "1.4.16", "source": { "type": "git", "url": "https://github.com/instaclick/php-webdriver.git", "reference": "a39a1f6dc0f4ddd8b2438fa5eb1f67755730d606" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/instaclick/php-webdriver/zipball/a39a1f6dc0f4ddd8b2438fa5eb1f67755730d606", "reference": "a39a1f6dc0f4ddd8b2438fa5eb1f67755730d606", "shasum": "" }, "require": { "ext-curl": "*", "php": ">=5.3.2" }, "require-dev": { "phpunit/phpunit": "^8.5 || ^9.5", "satooshi/php-coveralls": "^1.0 || ^2.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.4.x-dev" } }, "autoload": { "psr-0": { "WebDriver": "lib/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "Apache-2.0" ], "authors": [ { "name": "Justin Bishop", "email": "jubishop@gmail.com", "role": "Developer" }, { "name": "Anthon Pang", "email": "apang@softwaredevelopment.ca", "role": "Fork Maintainer" } ], "description": "PHP WebDriver for Selenium 2", "homepage": "http://instaclick.com/", "keywords": [ "browser", "selenium", "webdriver", "webtest" ], "support": { "issues": "https://github.com/instaclick/php-webdriver/issues", "source": "https://github.com/instaclick/php-webdriver/tree/1.4.16" }, "time": "2022-10-28T13:30:35+00:00" }, { "name": "mindplay/annotations", "version": "1.3.3", "source": { "type": "git", "url": "https://github.com/php-annotations/php-annotations.git", "reference": "d314832b338b88299c4108361c858b0590798d2c" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/php-annotations/php-annotations/zipball/d314832b338b88299c4108361c858b0590798d2c", "reference": "d314832b338b88299c4108361c858b0590798d2c", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { "phpunit/php-code-coverage": "~1.2.1", "phpunit/php-file-iterator": ">=1.3.0@stable <2.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.3.x-dev" } }, "autoload": { "psr-4": { "mindplay\\annotations\\": "src\\annotations" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "LGPL-3.0+" ], "authors": [ { "name": "Rasmus Schultz", "email": "rasmus@mindplay.dk" } ], "description": "Industrial-strength annotations for PHP", "homepage": "http://blog.mindplay.dk/", "keywords": [ "annotations", "framework" ], "support": { "issues": "https://github.com/php-annotations/php-annotations/issues", "source": "https://github.com/php-annotations/php-annotations/tree/1.3.3" }, "time": "2022-07-16T15:11:03+00:00" }, { "name": "phpdocumentor/reflection-docblock", "version": "2.0.5", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e6a969a640b00d8daa3c66518b0405fb41ae0c4b", "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { "phpunit/phpunit": "~4.0" }, "suggest": { "dflydev/markdown": "~1.0", "erusev/parsedown": "~1.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } }, "autoload": { "psr-0": { "phpDocumentor": [ "src/" ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Mike van Riel", "email": "mike.vanriel@naenius.com" } ], "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" }, { "name": "phpspec/prophecy", "version": "v1.10.3", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", "reference": "451c3cd1418cf640de218914901e51b064abb093" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", "reference": "451c3cd1418cf640de218914901e51b064abb093", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" }, "require-dev": { "phpspec/phpspec": "^2.5 || ^3.2", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.10.x-dev" } }, "autoload": { "psr-4": { "Prophecy\\": "src/Prophecy" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Konstantin Kudryashov", "email": "ever.zet@gmail.com", "homepage": "http://everzet.com" }, { "name": "Marcello Duarte", "email": "marcello.duarte@gmail.com" } ], "description": "Highly opinionated mocking framework for PHP 5.3+", "homepage": "https://github.com/phpspec/prophecy", "keywords": [ "Double", "Dummy", "fake", "mock", "spy", "stub" ], "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" }, { "name": "phpunit/php-code-coverage", "version": "2.2.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", "shasum": "" }, "require": { "php": ">=5.3.3", "phpunit/php-file-iterator": "~1.3", "phpunit/php-text-template": "~1.2", "phpunit/php-token-stream": "~1.3", "sebastian/environment": "^1.3.2", "sebastian/version": "~1.0" }, "require-dev": { "ext-xdebug": ">=2.1.4", "phpunit/phpunit": "~4" }, "suggest": { "ext-dom": "*", "ext-xdebug": ">=2.2.1", "ext-xmlwriter": "*" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.2.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sb@sebastian-bergmann.de", "role": "lead" } ], "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ "coverage", "testing", "xunit" ], "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" }, { "name": "phpunit/php-file-iterator", "version": "1.4.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", "shasum": "" }, "require": { "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.4.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sb@sebastian-bergmann.de", "role": "lead" } ], "description": "FilterIterator implementation that filters files based on a list of suffixes.", "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ "filesystem", "iterator" ], "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" }, { "name": "phpunit/php-text-template", "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { "php": ">=5.3.3" }, "type": "library", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Simple template engine.", "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ "template" ], "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" }, { "name": "phpunit/php-timer", "version": "1.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "shasum": "" }, "require": { "php": "^5.3.3 || ^7.0" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sb@sebastian-bergmann.de", "role": "lead" } ], "description": "Utility class for timing", "homepage": "https://github.com/sebastianbergmann/php-timer/", "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" }, { "name": "phpunit/php-token-stream", "version": "1.4.12", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", "shasum": "" }, "require": { "ext-tokenizer": "*", "php": ">=5.3.3" }, "require-dev": { "phpunit/phpunit": "~4.2" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.4-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Wrapper around PHP's tokenizer extension.", "homepage": "https://github.com/sebastianbergmann/php-token-stream/", "keywords": [ "tokenizer" ], "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" }, { "name": "phpunit/phpunit", "version": "4.8.36", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", "shasum": "" }, "require": { "ext-dom": "*", "ext-json": "*", "ext-pcre": "*", "ext-reflection": "*", "ext-spl": "*", "php": ">=5.3.3", "phpspec/prophecy": "^1.3.1", "phpunit/php-code-coverage": "~2.1", "phpunit/php-file-iterator": "~1.4", "phpunit/php-text-template": "~1.2", "phpunit/php-timer": "^1.0.6", "phpunit/phpunit-mock-objects": "~2.3", "sebastian/comparator": "~1.2.2", "sebastian/diff": "~1.2", "sebastian/environment": "~1.3", "sebastian/exporter": "~1.2", "sebastian/global-state": "~1.0", "sebastian/version": "~1.0", "symfony/yaml": "~2.1|~3.0" }, "suggest": { "phpunit/php-invoker": "~1.1" }, "bin": [ "phpunit" ], "type": "library", "extra": { "branch-alias": { "dev-master": "4.8.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "The PHP Unit Testing framework.", "homepage": "https://phpunit.de/", "keywords": [ "phpunit", "testing", "xunit" ], "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" }, { "name": "phpunit/phpunit-mock-objects", "version": "2.3.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": ">=5.3.3", "phpunit/php-text-template": "~1.2", "sebastian/exporter": "~1.2" }, "require-dev": { "phpunit/phpunit": "~4.4" }, "suggest": { "ext-soap": "*" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.3.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sb@sebastian-bergmann.de", "role": "lead" } ], "description": "Mock Object library for PHPUnit", "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", "keywords": [ "mock", "xunit" ], "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" }, { "name": "pimple/pimple", "version": "v3.2.3", "source": { "type": "git", "url": "https://github.com/silexphp/Pimple.git", "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32", "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32", "shasum": "" }, "require": { "php": ">=5.3.0", "psr/container": "^1.0" }, "require-dev": { "symfony/phpunit-bridge": "^3.2" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.2.x-dev" } }, "autoload": { "psr-0": { "Pimple": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" } ], "description": "Pimple, a simple Dependency Injection Container", "homepage": "http://pimple.sensiolabs.org", "keywords": [ "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" }, { "name": "psr/container", "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", "shasum": "" }, "require": { "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "PHP-FIG", "homepage": "http://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", "homepage": "https://github.com/php-fig/container", "keywords": [ "PSR-11", "container", "container-interface", "container-interop", "psr" ], "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" }, { "name": "qa-tools/qa-tools", "version": "v1.2.1", "source": { "type": "git", "url": "https://github.com/qa-tools/qa-tools.git", "reference": "505b14a7766daa718cad21bdb7bcb404cabaa1fc" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/qa-tools/qa-tools/zipball/505b14a7766daa718cad21bdb7bcb404cabaa1fc", "reference": "505b14a7766daa718cad21bdb7bcb404cabaa1fc", "shasum": "" }, "require": { "behat/mink": "~1.6", "mindplay/annotations": "~1.2", "php": ">=5.3.2", "pimple/pimple": "^2.0|^3.0" }, "replace": { "aik099/qa-tools": "self.version" }, "require-dev": { "aik099/coding-standard": "dev-master", "behat/mink-selenium2-driver": "~1.2", "mockery/mockery": "~0.9", "symfony/phpunit-bridge": "^3.1" }, "suggest": { "qa-tools/phpunit-extension": "PHPUnit extension for QA-Tools" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.2.x-dev" } }, "autoload": { "psr-0": { "QATools\\QATools\\": "./library/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Alexander Obuhovich", "email": "aik.bold@gmail.com" }, { "name": "Dmitry Kushnikov", "email": "dkushnikov@gmail.com" }, { "name": "Michael Geppert", "email": "evangelion1204@aol.com" } ], "description": "Library that provides easy-to-use way of interaction with web-page elements in functional tests using PageObject pattern.", "keywords": [ "BEM", "HtmlElements", "Mink", "PageObject", "acceptance", "functional", "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" }, { "name": "sebastian/comparator", "version": "1.2.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", "shasum": "" }, "require": { "php": ">=5.3.3", "sebastian/diff": "~1.2", "sebastian/exporter": "~1.2 || ~2.0" }, "require-dev": { "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.2.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Volker Dusch", "email": "github@wallbash.com" }, { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Provides the functionality to compare PHP values for equality", "homepage": "http://www.github.com/sebastianbergmann/comparator", "keywords": [ "comparator", "compare", "equality" ], "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" }, { "name": "sebastian/diff", "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", "shasum": "" }, "require": { "php": "^5.3.3 || ^7.0" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.4-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Kore Nordmann", "email": "mail@kore-nordmann.de" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ "diff" ], "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" }, { "name": "sebastian/environment", "version": "1.3.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", "shasum": "" }, "require": { "php": "^5.3.3 || ^7.0" }, "require-dev": { "phpunit/phpunit": "^4.8 || ^5.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.3.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Provides functionality to handle HHVM/PHP environments", "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", "hhvm" ], "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" }, { "name": "sebastian/exporter", "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", "shasum": "" }, "require": { "php": ">=5.3.3", "sebastian/recursion-context": "~1.0" }, "require-dev": { "ext-mbstring": "*", "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.3.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Volker Dusch", "email": "github@wallbash.com" }, { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Adam Harvey", "email": "aharvey@php.net" } ], "description": "Provides the functionality to export PHP variables for visualization", "homepage": "http://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "source": "https://github.com/sebastianbergmann/exporter/tree/master" }, "time": "2016-06-17T09:04:28+00:00" }, { "name": "sebastian/global-state", "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { "phpunit/phpunit": "~4.2" }, "suggest": { "ext-uopz": "*" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Snapshotting of global state", "homepage": "http://www.github.com/sebastianbergmann/global-state", "keywords": [ "global state" ], "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" }, { "name": "sebastian/recursion-context", "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Adam Harvey", "email": "aharvey@php.net" } ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", "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" }, { "name": "sebastian/version", "version": "1.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", "shasum": "" }, "type": "library", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", "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" }, { "name": "symfony/css-selector", "version": "v2.8.52", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", "reference": "7b1692e418d7ccac24c373528453bc90e42797de" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/css-selector/zipball/7b1692e418d7ccac24c373528453bc90e42797de", "reference": "7b1692e418d7ccac24c373528453bc90e42797de", "shasum": "" }, "require": { "php": ">=5.3.9" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.8-dev" } }, "autoload": { "psr-4": { "Symfony\\Component\\CssSelector\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, { "name": "Jean-François Simon", "email": "jeanfrancois.simon@sensiolabs.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "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", "support": { "source": "https://github.com/symfony/event-dispatcher/tree/v2.8.50" }, "time": "2018-11-21T14:20:20+00:00" }, { "name": "symfony/polyfill-ctype", "version": "v1.19.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", "reference": "aed596913b70fae57be53d86faa2e9ef85a2297b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/aed596913b70fae57be53d86faa2e9ef85a2297b", "reference": "aed596913b70fae57be53d86faa2e9ef85a2297b", "shasum": "" }, "require": { "php": ">=5.3.3" }, "suggest": { "ext-ctype": "For best performance" }, "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\\Ctype\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Gert de Pagter", "email": "BackEndTea@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", "ctype", "polyfill", "portable" ], "support": { "source": "https://github.com/symfony/polyfill-ctype/tree/v1.19.0" }, "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/yaml", "version": "v2.8.52", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", "reference": "02c1859112aa779d9ab394ae4f3381911d84052b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/yaml/zipball/02c1859112aa779d9ab394ae4f3381911d84052b", "reference": "02c1859112aa779d9ab394ae4f3381911d84052b", "shasum": "" }, "require": { "php": ">=5.3.9", "symfony/polyfill-ctype": "~1.8" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.8-dev" } }, "autoload": { "psr-4": { "Symfony\\Component\\Yaml\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", "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.4.0" + "php": ">=5.4.7" }, "platform-dev": [], "platform-overrides": { - "php": "5.4.0" + "php": "5.4.7" }, "plugin-api-version": "2.2.0" }