diff --git a/.travis-php-config.ini b/.travis-php-config.ini new file mode 100644 index 0000000..51d8aae --- /dev/null +++ b/.travis-php-config.ini @@ -0,0 +1 @@ +date.timezone = "Europe/Berlin" \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..12347cf --- /dev/null +++ b/.travis.yml @@ -0,0 +1,25 @@ +language: php + +php: + - '7.0' + - '7.1' + +services: + - postgresql + +install: + - composer install + +before_script: + - psql -c 'create database travis_ci_test;' -U postgres + - cp app/config/config_travis.yml app/config/config_test.yml + +script: bin/phpunit --verbose -c app + +notifications: + webhooks: + urls: + - "https://scalar.vector.im/api/neb/services/hooks/dHJhdmlzLWNpLyU0MDB4QUZGRSUzQW1hdHJpeC5vcmcvJTIxaWtsaVpGWGd0a1dWVW1FUmRQJTNBbWF0cml4Lm9yZw" + on_success: change # always|never|change + on_failure: always + on_start: never diff --git a/README.md b/README.md index efc478d..909bfd4 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Calcifer Terminverwaltung -[![Join the chat at https://gitter.im/HackspaceJena/calcifer](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/HackspaceJena/calcifer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![Join the chat at https://gitter.im/HackspaceJena/calcifer](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/HackspaceJena/calcifer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Build Status](https://travis-ci.org/HackspaceJena/calcifer.svg?branch=master)](https://travis-ci.org/HackspaceJena/calcifer) Calcifer ist ein Daemon aus dem Anime [Howl no Ugoku Shiro](http://anidb.net/perl-bin/animedb.pl?show=anime&aid=1218), der sich darum kümmert das sich Howls Schloss weiter bewegt. Diese Terminverwaltung soll dafür sorgen das sich der [Hackspace Jena](https://www.krautspace.de/) auch weiter bewegt und viele tolle Termine statfinden. -Das [offizielle Repository](https://phablab.krautspace.de/diffusion/C/) für diese Software findet man auf der Phabrictator-Instanz des Hackspaces. Für Leute die lieber auf Github stehen wurde ein Mirror unter [https://github.com/HackspaceJena/calcifer](https://github.com/HackspaceJena/calcifer) eingerichtet. \ No newline at end of file +Das [offizielle Repository](https://phablab.krautspace.de/diffusion/C/) für diese Software findet man auf der Phabrictator-Instanz des Hackspaces. Für Leute die lieber auf Github stehen wurde ein Mirror unter [https://github.com/HackspaceJena/calcifer](https://github.com/HackspaceJena/calcifer) eingerichtet. diff --git a/app/AppKernel.php b/app/AppKernel.php index 713ac3d..3ec9a0a 100755 --- a/app/AppKernel.php +++ b/app/AppKernel.php @@ -18,13 +18,13 @@ class AppKernel extends Kernel new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), new Hackspace\Bundle\CalciferBundle\CalciferBundle(), new Knp\Bundle\MarkdownBundle\KnpMarkdownBundle(), - new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(), ); if (in_array($this->getEnvironment(), array('dev', 'test'))) { $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); + $bundles[] = new Liip\FunctionalTestBundle\LiipFunctionalTestBundle(); } return $bundles; @@ -34,4 +34,11 @@ class AppKernel extends Kernel { $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml'); } + + + public function __construct($environment, $debug) + { + date_default_timezone_set( 'Europe/Berlin' ); + parent::__construct($environment, $debug); + } } diff --git a/app/SymfonyRequirements.php b/app/SymfonyRequirements.php index cbcf1c8..28b0dcd 100644 --- a/app/SymfonyRequirements.php +++ b/app/SymfonyRequirements.php @@ -77,7 +77,7 @@ class Requirement } /** - * Returns the help text for resolving the problem + * Returns the help text for resolving the problem. * * @return string The help text */ @@ -119,10 +119,10 @@ class PhpIniRequirement extends Requirement * * @param string $cfgName The configuration name used for ini_get() * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false, - or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement + * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false. - This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. - Example: You require a config to be true but PHP later removes this config and defaults it to true internally. + * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. + * Example: You require a config to be true but PHP later removes this config and defaults it to true internally. * @param string|null $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived) * @param string|null $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived) * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) @@ -221,10 +221,10 @@ class RequirementCollection implements IteratorAggregate * * @param string $cfgName The configuration name used for ini_get() * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false, - or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement + * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false. - This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. - Example: You require a config to be true but PHP later removes this config and defaults it to true internally. + * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. + * Example: You require a config to be true but PHP later removes this config and defaults it to true internally. * @param string $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived) * @param string $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived) * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) @@ -239,10 +239,10 @@ class RequirementCollection implements IteratorAggregate * * @param string $cfgName The configuration name used for ini_get() * @param bool|callback $evaluation Either a boolean indicating whether the configuration should evaluate to true or false, - or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement + * or a callback function receiving the configuration value as parameter to determine the fulfillment of the requirement * @param bool $approveCfgAbsence If true the Requirement will be fulfilled even if the configuration option does not exist, i.e. ini_get() returns false. - This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. - Example: You require a config to be true but PHP later removes this config and defaults it to true internally. + * This is helpful for abandoned configs in later PHP versions or configs of an optional extension, like Suhosin. + * Example: You require a config to be true but PHP later removes this config and defaults it to true internally. * @param string $testMessage The message for testing the requirement (when null and $evaluation is a boolean a default message is derived) * @param string $helpHtml The help text formatted in HTML for resolving the problem (when null and $evaluation is a boolean a default help is derived) * @param string|null $helpText The help text (when null, it will be inferred from $helpHtml, i.e. stripped from HTML tags) @@ -446,6 +446,12 @@ class SymfonyRequirements extends RequirementCollection ); } + $this->addRequirement( + function_exists('iconv'), + 'iconv() must be available', + 'Install and enable the iconv extension.' + ); + $this->addRequirement( function_exists('json_encode'), 'json_encode() must be available', @@ -542,11 +548,22 @@ class SymfonyRequirements extends RequirementCollection /* optional recommendations follow */ - $this->addRecommendation( - file_get_contents(__FILE__) === file_get_contents(__DIR__.'/../vendor/sensio/distribution-bundle/Sensio/Bundle/DistributionBundle/Resources/skeleton/app/SymfonyRequirements.php'), - 'Requirements file should be up-to-date', - 'Your requirements file is outdated. Run composer install and re-check your configuration.' - ); + if (file_exists(__DIR__.'/../vendor/composer')) { + require_once __DIR__.'/../vendor/autoload.php'; + + try { + $r = new ReflectionClass('Sensio\Bundle\DistributionBundle\SensioDistributionBundle'); + + $contents = file_get_contents(dirname($r->getFileName()).'/Resources/skeleton/app/SymfonyRequirements.php'); + } catch (ReflectionException $e) { + $contents = ''; + } + $this->addRecommendation( + file_get_contents(__FILE__) === $contents, + 'Requirements file should be up-to-date', + 'Your requirements file is outdated. Run composer install and re-check your configuration.' + ); + } $this->addRecommendation( version_compare($installedPhpVersion, '5.3.4', '>='), @@ -627,20 +644,20 @@ class SymfonyRequirements extends RequirementCollection } $this->addRecommendation( - class_exists('Locale'), + extension_loaded('intl'), 'intl extension should be available', 'Install and enable the intl extension (used for validators).' ); - if (class_exists('Collator')) { + if (extension_loaded('intl')) { + // in some WAMP server installations, new Collator() returns null $this->addRecommendation( null !== new Collator('fr_FR'), 'intl extension should be correctly configured', 'The intl extension does not behave properly. This problem is typical on PHP 5.3.X x64 WIN builds.' ); - } - if (class_exists('Locale')) { + // check for compatible ICU versions (only done when you have the intl extension) if (defined('INTL_ICU_VERSION')) { $version = INTL_ICU_VERSION; } else { @@ -659,6 +676,14 @@ class SymfonyRequirements extends RequirementCollection 'intl ICU version should be at least 4+', 'Upgrade your intl extension with a newer ICU version (4+).' ); + + $this->addPhpIniRecommendation( + 'intl.error_level', + create_function('$cfgValue', 'return (int) $cfgValue === 0;'), + true, + 'intl.error_level should be 0 in php.ini', + 'Set "intl.error_level" to "0" in php.ini* to inhibit the messages when an error occurs in ICU functions.' + ); } $accelerator = diff --git a/app/check.php b/app/check.php index 90bad4a..cf1e6b0 100644 --- a/app/check.php +++ b/app/check.php @@ -6,13 +6,13 @@ $lineSize = 70; $symfonyRequirements = new SymfonyRequirements(); $iniPath = $symfonyRequirements->getPhpIniConfigPath(); -echo_title('Symfony2 Requirements Checker'); +echo_title('Symfony Requirements Checker'); echo '> PHP is using the following php.ini file:'.PHP_EOL; if ($iniPath) { echo_style('green', ' '.$iniPath); } else { - echo_style('warning', ' WARNING: No configuration file (php.ini) used by PHP!'); + echo_style('yellow', ' WARNING: No configuration file (php.ini) used by PHP!'); } echo PHP_EOL.PHP_EOL; @@ -42,9 +42,9 @@ foreach ($symfonyRequirements->getRecommendations() as $req) { } if ($checkPassed) { - echo_block('success', 'OK', 'Your system is ready to run Symfony2 projects', true); + echo_block('success', 'OK', 'Your system is ready to run Symfony projects'); } else { - echo_block('error', 'ERROR', 'Your system is not ready to run Symfony2 projects', true); + echo_block('error', 'ERROR', 'Your system is not ready to run Symfony projects'); echo_title('Fix the following mandatory requirements', 'red'); @@ -80,7 +80,7 @@ function get_error_message(Requirement $requirement, $lineSize) return; } - $errorMessage = wordwrap($requirement->getTestMessage(), $lineSize - 3, PHP_EOL.' ').PHP_EOL; + $errorMessage = wordwrap($requirement->getTestMessage(), $lineSize - 3, PHP_EOL.' ').PHP_EOL; $errorMessage .= ' > '.wordwrap($requirement->getHelpText(), $lineSize - 5, PHP_EOL.' > ').PHP_EOL; return $errorMessage; @@ -121,8 +121,8 @@ function echo_block($style, $title, $message) echo PHP_EOL.PHP_EOL; echo_style($style, str_repeat(' ', $width).PHP_EOL); - echo_style($style, str_pad(' ['.$title.']', $width, ' ', STR_PAD_RIGHT).PHP_EOL); - echo_style($style, str_pad($message, $width, ' ', STR_PAD_RIGHT).PHP_EOL); + echo_style($style, str_pad(' ['.$title.']', $width, ' ', STR_PAD_RIGHT).PHP_EOL); + echo_style($style, str_pad($message, $width, ' ', STR_PAD_RIGHT).PHP_EOL); echo_style($style, str_repeat(' ', $width).PHP_EOL); } diff --git a/app/config/config_test.yml b/app/config/config_test.yml index 2f6d925..3ebd046 100644 --- a/app/config/config_test.yml +++ b/app/config/config_test.yml @@ -14,3 +14,15 @@ web_profiler: swiftmailer: disable_delivery: true + +liip_functional_test: ~ + +doctrine: + dbal: + driver: "pdo_pgsql" + host: "localhost" + port: "5432" + dbname: "travis_ci_test" + user: "postgres" + password: "123456" + charset: UTF8 \ No newline at end of file diff --git a/app/config/config_travis.yml b/app/config/config_travis.yml new file mode 100644 index 0000000..3d2642f --- /dev/null +++ b/app/config/config_travis.yml @@ -0,0 +1,28 @@ +imports: + - { resource: config_dev.yml } + +framework: + test: ~ + session: + storage_id: session.storage.mock_file + profiler: + collect: false + +web_profiler: + toolbar: false + intercept_redirects: false + +swiftmailer: + disable_delivery: true + +liip_functional_test: ~ + +doctrine: + dbal: + driver: "pdo_pgsql" + host: "localhost" + port: "5432" + dbname: "travis_ci_test" + user: "postgres" + password: "" + charset: UTF8 \ No newline at end of file diff --git a/app/phpunit.xml.dist b/app/phpunit.xml similarity index 93% rename from app/phpunit.xml.dist rename to app/phpunit.xml index 82a3a08..c987376 100644 --- a/app/phpunit.xml.dist +++ b/app/phpunit.xml @@ -20,11 +20,9 @@ - diff --git a/composer.json b/composer.json index 0c99e08..ff74076 100755 --- a/composer.json +++ b/composer.json @@ -13,35 +13,36 @@ "name": "jquery/jquery", "version": "1.10.2", "dist": { - "url": "http://code.jquery.com/jquery-1.10.2.js", + "url": "https://code.jquery.com/jquery-1.10.2.js", "type": "file" } } } ], "require": { - "php": ">=5.3.3", - "symfony/symfony": "2.5.*", - "doctrine/orm": "~2.2,>=2.2.3", - "doctrine/doctrine-bundle": "~1.2", - "twig/extensions": "~1.1", - "symfony/assetic-bundle": "~2.3", - "symfony/swiftmailer-bundle": "~2.3", - "symfony/monolog-bundle": "~2.4", - "sensio/distribution-bundle": "~3.0", + "php": ">=5.6", + "symfony/symfony": "^2.8", + "doctrine/doctrine-bundle": "^1.6", + "doctrine/orm": "^2.5", + "twig/extensions": "^1.3", + "symfony/assetic-bundle": "^2.8", + "symfony/swiftmailer-bundle": "^2.3", + "symfony/monolog-bundle": "^2.11", + "sensio/distribution-bundle": "^4.0", "sensio/framework-extra-bundle": "~3.0", - "incenteev/composer-parameter-handler": "~2.0", + "incenteev/composer-parameter-handler": "~2.1", "jquery/jquery": "1.10.*", - "knplabs/knp-markdown-bundle": "~1.3", + "knplabs/knp-markdown-bundle": "~1.5", "enko/ics": "~0.2", - "doctrine/migrations": "dev-master", - "doctrine/doctrine-migrations-bundle": "dev-master", - "jbroadway/urlify" : "~1.0", - "enko/relativedateparser" : "v0.5", - "sabre/dav" : "~2.0" + "jbroadway/urlify" : "^1.0", + "enko/relativedateparser" : "0.5", + "sabre/vobject": "^4.1" }, "require-dev": { - "sensio/generator-bundle": "~2.3" + "sensio/generator-bundle": "~3.0", + "phpunit/phpunit": "^5.4", + "liip/functional-test-bundle": "^1.6", + "doctrine/doctrine-fixtures-bundle": "^2.3" }, "scripts": { "post-root-package-install": [ diff --git a/composer.lock b/composer.lock index 0186f76..a739ddb 100644 --- a/composer.lock +++ b/composer.lock @@ -1,42 +1,43 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "6771cfbdeebb8bc4a8a5ca0071bbf312", + "hash": "26203561d36a2e9c10d3c9f26fefc068", + "content-hash": "0b9f219c85c3d32cce7ca43683d45699", "packages": [ { "name": "doctrine/annotations", - "version": "v1.2.3", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "eeda578cbe24a170331a1cfdf78be723412df7a4" + "reference": "30e07cf03edc3cd3ef579d0dd4dd8c58250799a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/eeda578cbe24a170331a1cfdf78be723412df7a4", - "reference": "eeda578cbe24a170331a1cfdf78be723412df7a4", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/30e07cf03edc3cd3ef579d0dd4dd8c58250799a5", + "reference": "30e07cf03edc3cd3ef579d0dd4dd8c58250799a5", "shasum": "" }, "require": { "doctrine/lexer": "1.*", - "php": ">=5.3.2" + "php": "^5.6 || ^7.0" }, "require-dev": { "doctrine/cache": "1.*", - "phpunit/phpunit": "4.*" + "phpunit/phpunit": "^5.6.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Annotations\\": "lib/" + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" } }, "notification-url": "https://packagist.org/downloads/", @@ -72,42 +73,42 @@ "docblock", "parser" ], - "time": "2014-12-20 20:49:38" + "time": "2016-10-24 11:45:47" }, { "name": "doctrine/cache", - "version": "v1.4.0", + "version": "v1.6.1", "source": { "type": "git", "url": "https://github.com/doctrine/cache.git", - "reference": "2346085d2b027b233ae1d5de59b07440b9f288c8" + "reference": "b6f544a20f4807e81f7044d31e679ccbb1866dc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/2346085d2b027b233ae1d5de59b07440b9f288c8", - "reference": "2346085d2b027b233ae1d5de59b07440b9f288c8", + "url": "https://api.github.com/repos/doctrine/cache/zipball/b6f544a20f4807e81f7044d31e679ccbb1866dc3", + "reference": "b6f544a20f4807e81f7044d31e679ccbb1866dc3", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "~5.5|~7.0" }, "conflict": { "doctrine/common": ">2.2,<2.4" }, "require-dev": { - "phpunit/phpunit": ">=3.7", - "predis/predis": "~0.8", + "phpunit/phpunit": "~4.8|~5.0", + "predis/predis": "~1.0", "satooshi/php-coveralls": "~0.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "1.6.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Cache\\": "lib/" + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" } }, "notification-url": "https://packagist.org/downloads/", @@ -142,25 +143,28 @@ "cache", "caching" ], - "time": "2015-01-15 20:38:55" + "time": "2016-10-29 11:16:17" }, { "name": "doctrine/collections", - "version": "v1.2", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "b99c5c46c87126201899afe88ec490a25eedd6a2" + "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/b99c5c46c87126201899afe88ec490a25eedd6a2", - "reference": "b99c5c46c87126201899afe88ec490a25eedd6a2", + "url": "https://api.github.com/repos/doctrine/collections/zipball/6c1e4eef75f310ea1b3e30945e9f06e652128b8a", + "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a", "shasum": "" }, "require": { "php": ">=5.3.2" }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, "type": "library", "extra": { "branch-alias": { @@ -177,17 +181,6 @@ "MIT" ], "authors": [ - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/", - "role": "Creator" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -196,11 +189,17 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, { "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "http://jmsyst.com", - "role": "Developer of wrapped JMSSerializerBundle" + "email": "schmittjoh@gmail.com" } ], "description": "Collections Abstraction library", @@ -210,20 +209,20 @@ "collections", "iterator" ], - "time": "2014-02-03 23:07:43" + "time": "2015-04-14 22:21:58" }, { "name": "doctrine/common", - "version": "v2.4.2", + "version": "v2.6.1", "source": { "type": "git", "url": "https://github.com/doctrine/common.git", - "reference": "5db6ab40e4c531f14dad4ca96a394dfce5d4255b" + "reference": "a579557bc689580c19fee4e27487a67fe60defc0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/common/zipball/5db6ab40e4c531f14dad4ca96a394dfce5d4255b", - "reference": "5db6ab40e4c531f14dad4ca96a394dfce5d4255b", + "url": "https://api.github.com/repos/doctrine/common/zipball/a579557bc689580c19fee4e27487a67fe60defc0", + "reference": "a579557bc689580c19fee4e27487a67fe60defc0", "shasum": "" }, "require": { @@ -232,20 +231,20 @@ "doctrine/collections": "1.*", "doctrine/inflector": "1.*", "doctrine/lexer": "1.*", - "php": ">=5.3.2" + "php": "~5.5|~7.0" }, "require-dev": { - "phpunit/phpunit": "~3.7" + "phpunit/phpunit": "~4.8|~5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.4.x-dev" + "dev-master": "2.7.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\Common\\": "lib/" + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" } }, "notification-url": "https://packagist.org/downloads/", @@ -253,17 +252,6 @@ "MIT" ], "authors": [ - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/", - "role": "Creator" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -272,11 +260,17 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, { "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "http://jmsyst.com", - "role": "Developer of wrapped JMSSerializerBundle" + "email": "schmittjoh@gmail.com" } ], "description": "Common Library for Doctrine projects", @@ -288,29 +282,29 @@ "persistence", "spl" ], - "time": "2014-05-21 19:28:51" + "time": "2015-12-25 13:18:31" }, { "name": "doctrine/dbal", - "version": "v2.5.1", + "version": "v2.5.5", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "628c2256b646ae2417d44e063bce8aec5199d48d" + "reference": "9f8c05cd5225a320d56d4bfdb4772f10d045a0c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/628c2256b646ae2417d44e063bce8aec5199d48d", - "reference": "628c2256b646ae2417d44e063bce8aec5199d48d", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/9f8c05cd5225a320d56d4bfdb4772f10d045a0c9", + "reference": "9f8c05cd5225a320d56d4bfdb4772f10d045a0c9", "shasum": "" }, "require": { - "doctrine/common": ">=2.4,<2.6-dev", + "doctrine/common": ">=2.4,<2.7-dev", "php": ">=5.3.2" }, "require-dev": { "phpunit/phpunit": "4.*", - "symfony/console": "2.*" + "symfony/console": "2.*||^3.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -359,20 +353,20 @@ "persistence", "queryobject" ], - "time": "2015-01-12 21:52:47" + "time": "2016-09-09 19:13:33" }, { "name": "doctrine/doctrine-bundle", - "version": "v1.4.0", + "version": "1.6.4", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "1986ff3a945b584c6505d07eae92d77e41131078" + "reference": "dd40b0a7fb16658cda9def9786992b8df8a49be7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/1986ff3a945b584c6505d07eae92d77e41131078", - "reference": "1986ff3a945b584c6505d07eae92d77e41131078", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/dd40b0a7fb16658cda9def9786992b8df8a49be7", + "reference": "dd40b0a7fb16658cda9def9786992b8df8a49be7", "shasum": "" }, "require": { @@ -380,25 +374,29 @@ "doctrine/doctrine-cache-bundle": "~1.0", "jdorn/sql-formatter": "~1.1", "php": ">=5.3.2", - "symfony/doctrine-bridge": "~2.2", - "symfony/framework-bundle": "~2.3" + "symfony/console": "~2.3|~3.0", + "symfony/dependency-injection": "~2.3|~3.0", + "symfony/doctrine-bridge": "~2.2|~3.0", + "symfony/framework-bundle": "~2.3|~3.0" }, "require-dev": { "doctrine/orm": "~2.3", "phpunit/phpunit": "~4", "satooshi/php-coveralls": "~0.6.1", - "symfony/validator": "~2.2", - "symfony/yaml": "~2.2", + "symfony/phpunit-bridge": "~2.7|~3.0", + "symfony/property-info": "~2.8|~3.0", + "symfony/validator": "~2.2|~3.0", + "symfony/yaml": "~2.2|~3.0", "twig/twig": "~1.10" }, "suggest": { "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", - "symfony/web-profiler-bundle": "to use the data collector" + "symfony/web-profiler-bundle": "To use the data collector." }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "1.6.x-dev" } }, "autoload": { @@ -436,52 +434,56 @@ "orm", "persistence" ], - "time": "2015-02-28 11:04:45" + "time": "2016-08-10 15:35:22" }, { "name": "doctrine/doctrine-cache-bundle", - "version": "v1.0.1", - "target-dir": "Doctrine/Bundle/DoctrineCacheBundle", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineCacheBundle.git", - "reference": "e4b6f810aa047f9cbfe41c3d6a3d7e83d7477a9d" + "reference": "18c600a9b82f6454d2e81ca4957cdd56a1cf3504" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/e4b6f810aa047f9cbfe41c3d6a3d7e83d7477a9d", - "reference": "e4b6f810aa047f9cbfe41c3d6a3d7e83d7477a9d", + "url": "https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/18c600a9b82f6454d2e81ca4957cdd56a1cf3504", + "reference": "18c600a9b82f6454d2e81ca4957cdd56a1cf3504", "shasum": "" }, "require": { - "doctrine/cache": "~1.3", + "doctrine/cache": "^1.4.2", "doctrine/inflector": "~1.0", "php": ">=5.3.2", - "symfony/doctrine-bridge": "~2.2", - "symfony/framework-bundle": "~2.2", - "symfony/security": "~2.2" + "symfony/doctrine-bridge": "~2.2|~3.0" }, "require-dev": { "instaclick/coding-standard": "~1.1", "instaclick/object-calisthenics-sniffs": "dev-master", "instaclick/symfony2-coding-standard": "dev-remaster", - "phpunit/phpunit": "~3.7", + "phpunit/phpunit": "~4", + "predis/predis": "~0.8", "satooshi/php-coveralls": "~0.6.1", - "squizlabs/php_codesniffer": "dev-master", - "symfony/console": "~2.2", - "symfony/finder": "~2.2", - "symfony/validator": "~2.2", - "symfony/yaml": "~2.2" + "squizlabs/php_codesniffer": "~1.5", + "symfony/console": "~2.2|~3.0", + "symfony/finder": "~2.2|~3.0", + "symfony/framework-bundle": "~2.2|~3.0", + "symfony/phpunit-bridge": "~2.7|~3.0", + "symfony/security-acl": "~2.3|~3.0", + "symfony/validator": "~2.2|~3.0", + "symfony/yaml": "~2.2|~3.0" + }, + "suggest": { + "symfony/security-acl": "For using this bundle to cache ACLs" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\Bundle\\DoctrineCacheBundle": "" + "psr-4": { + "Doctrine\\Bundle\\DoctrineCacheBundle\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -514,85 +516,26 @@ "email": "fabien@symfony.com" } ], - "description": "Symfony2 Bundle for Doctrine Cache", + "description": "Symfony Bundle for Doctrine Cache", "homepage": "http://www.doctrine-project.org", "keywords": [ "cache", "caching" ], - "time": "2014-11-28 09:43:36" - }, - { - "name": "doctrine/doctrine-migrations-bundle", - "version": "dev-master", - "target-dir": "Doctrine/Bundle/MigrationsBundle", - "source": { - "type": "git", - "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", - "reference": "6a1bd731dbdd4ad952a3b246a8f38c9c12f52e62" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/6a1bd731dbdd4ad952a3b246a8f38c9c12f52e62", - "reference": "6a1bd731dbdd4ad952a3b246a8f38c9c12f52e62", - "shasum": "" - }, - "require": { - "doctrine/doctrine-bundle": "~1.0", - "doctrine/migrations": "~1.0@dev", - "php": ">=5.3.2", - "symfony/framework-bundle": "~2.1" - }, - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Bundle\\MigrationsBundle": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, - { - "name": "Doctrine Project", - "homepage": "http://www.doctrine-project.org" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Symfony DoctrineMigrationsBundle", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "dbal", - "migrations", - "schema" - ], - "time": "2015-02-16 13:24:46" + "time": "2016-01-26 17:28:51" }, { "name": "doctrine/inflector", - "version": "v1.0.1", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "0bcb2e79d8571787f18b7eb036ed3d004908e604" + "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/0bcb2e79d8571787f18b7eb036ed3d004908e604", - "reference": "0bcb2e79d8571787f18b7eb036ed3d004908e604", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", + "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", "shasum": "" }, "require": { @@ -604,7 +547,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { @@ -646,7 +589,61 @@ "singularize", "string" ], - "time": "2014-12-20 21:24:13" + "time": "2015-11-06 14:35:42" + }, + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14 21:17:01" }, { "name": "doctrine/lexer", @@ -702,88 +699,33 @@ ], "time": "2014-09-09 13:34:57" }, - { - "name": "doctrine/migrations", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/doctrine/migrations.git", - "reference": "1e3f9f86a0f171df25be1946120a2a54d42db4d5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/1e3f9f86a0f171df25be1946120a2a54d42db4d5", - "reference": "1e3f9f86a0f171df25be1946120a2a54d42db4d5", - "shasum": "" - }, - "require": { - "doctrine/dbal": "~2.0", - "php": ">=5.3.2" - }, - "require-dev": { - "symfony/console": "2.*", - "symfony/yaml": "2.*" - }, - "suggest": { - "symfony/console": "to run the migration from the console" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\DBAL\\Migrations": "lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Database Schema migrations using Doctrine DBAL", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "database", - "migrations" - ], - "time": "2015-03-20 13:06:33" - }, { "name": "doctrine/orm", - "version": "v2.4.7", + "version": "v2.5.5", "source": { "type": "git", "url": "https://github.com/doctrine/doctrine2.git", - "reference": "2bc4ff3cab2ae297bcd05f2e619d42e6a7ca9e68" + "reference": "73e4be7c7b3ba26f96b781a40b33feba4dfa6d45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/2bc4ff3cab2ae297bcd05f2e619d42e6a7ca9e68", - "reference": "2bc4ff3cab2ae297bcd05f2e619d42e6a7ca9e68", + "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/73e4be7c7b3ba26f96b781a40b33feba4dfa6d45", + "reference": "73e4be7c7b3ba26f96b781a40b33feba4dfa6d45", "shasum": "" }, "require": { - "doctrine/collections": "~1.1", - "doctrine/dbal": "~2.4", + "doctrine/cache": "~1.4", + "doctrine/collections": "~1.2", + "doctrine/common": ">=2.5-dev,<2.7-dev", + "doctrine/dbal": ">=2.5-dev,<2.6-dev", + "doctrine/instantiator": "~1.0.1", "ext-pdo": "*", - "php": ">=5.3.2", - "symfony/console": "~2.0" + "php": ">=5.4", + "symfony/console": "~2.5|~3.0" }, "require-dev": { - "satooshi/php-coveralls": "dev-master", - "symfony/yaml": "~2.1" + "phpunit/phpunit": "~4.0", + "symfony/yaml": "~2.3|~3.0" }, "suggest": { "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" @@ -795,7 +737,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.4.x-dev" + "dev-master": "2.6.x-dev" } }, "autoload": { @@ -831,20 +773,20 @@ "database", "orm" ], - "time": "2014-12-16 13:45:01" + "time": "2016-09-10 18:51:13" }, { "name": "enko/ics", - "version": "0.2.1", + "version": "0.2.3", "source": { "type": "git", "url": "https://github.com/enko/ICS.git", - "reference": "2c1905ca62c6fb49a026cd965b591b6209787109" + "reference": "6a8ec3afab38a7954138e00330031e2238951512" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/enko/ICS/zipball/2c1905ca62c6fb49a026cd965b591b6209787109", - "reference": "2c1905ca62c6fb49a026cd965b591b6209787109", + "url": "https://api.github.com/repos/enko/ICS/zipball/6a8ec3afab38a7954138e00330031e2238951512", + "reference": "6a8ec3afab38a7954138e00330031e2238951512", "shasum": "" }, "require": { @@ -883,20 +825,20 @@ "ical", "multi-byte safe" ], - "time": "2014-11-22 16:07:40" + "time": "2016-01-12 15:47:20" }, { "name": "enko/relativedateparser", - "version": "v0.3", + "version": "v0.5", "source": { "type": "git", "url": "https://github.com/HackspaceJena/RelativeDateParser.git", - "reference": "55b94901ad919f3ca1bc661b624e9d0b764728eb" + "reference": "f31f5691fab8ba3e28ead4e9218fb2b44b0d868c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/HackspaceJena/RelativeDateParser/zipball/55b94901ad919f3ca1bc661b624e9d0b764728eb", - "reference": "55b94901ad919f3ca1bc661b624e9d0b764728eb", + "url": "https://api.github.com/repos/HackspaceJena/RelativeDateParser/zipball/f31f5691fab8ba3e28ead4e9218fb2b44b0d868c", + "reference": "f31f5691fab8ba3e28ead4e9218fb2b44b0d868c", "shasum": "" }, "require": { @@ -922,26 +864,25 @@ "email": "tim@bandenkrieg.hacked.jp" } ], - "time": "2014-09-30 05:06:16" + "time": "2016-06-02 12:52:40" }, { "name": "incenteev/composer-parameter-handler", - "version": "v2.1.0", - "target-dir": "Incenteev/ParameterHandler", + "version": "v2.1.2", "source": { "type": "git", "url": "https://github.com/Incenteev/ParameterHandler.git", - "reference": "143272a0a09c62616a3c8011fc165a10c6b35241" + "reference": "d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/143272a0a09c62616a3c8011fc165a10c6b35241", - "reference": "143272a0a09c62616a3c8011fc165a10c6b35241", + "url": "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc", + "reference": "d7ce7f06136109e81d1cb9d57066c4d4a99cf1cc", "shasum": "" }, "require": { "php": ">=5.3.3", - "symfony/yaml": "~2.0" + "symfony/yaml": "~2.3|~3.0" }, "require-dev": { "composer/composer": "1.0.*@dev", @@ -955,8 +896,8 @@ } }, "autoload": { - "psr-0": { - "Incenteev\\ParameterHandler": "" + "psr-4": { + "Incenteev\\ParameterHandler\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -974,20 +915,62 @@ "keywords": [ "parameters management" ], - "time": "2013-12-07 10:10:39" + "time": "2015-11-10 17:04:01" }, { - "name": "jbroadway/urlify", - "version": "1.0.4-stable", + "name": "ircmaxell/password-compat", + "version": "v1.0.4", "source": { "type": "git", - "url": "https://github.com/jbroadway/urlify.git", - "reference": "1a47f32e3eb70391f5a56efb139ad6a3ca45f1ab" + "url": "https://github.com/ircmaxell/password_compat.git", + "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jbroadway/urlify/zipball/1a47f32e3eb70391f5a56efb139ad6a3ca45f1ab", - "reference": "1a47f32e3eb70391f5a56efb139ad6a3ca45f1ab", + "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" + ], + "time": "2014-11-20 16:49:30" + }, + { + "name": "jbroadway/urlify", + "version": "1.0.9-stable", + "source": { + "type": "git", + "url": "https://github.com/jbroadway/urlify.git", + "reference": "d3e240cdd5bfb63b84a65916154a3185038ab887" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jbroadway/urlify/zipball/d3e240cdd5bfb63b84a65916154a3185038ab887", + "reference": "d3e240cdd5bfb63b84a65916154a3185038ab887", "shasum": "" }, "require": { @@ -1028,7 +1011,7 @@ "url", "urlify" ], - "time": "2015-03-09 22:33:47" + "time": "2016-09-14 14:22:45" }, { "name": "jdorn/sql-formatter", @@ -1085,7 +1068,7 @@ "version": "1.10.2", "dist": { "type": "file", - "url": "http://code.jquery.com/jquery-1.10.2.js", + "url": "https://code.jquery.com/jquery-1.10.2.js", "reference": null, "shasum": null }, @@ -1093,23 +1076,26 @@ }, { "name": "knplabs/knp-markdown-bundle", - "version": "1.3.2", - "target-dir": "Knp/Bundle/MarkdownBundle", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/KnpLabs/KnpMarkdownBundle.git", - "reference": "c24fca93e1ecedbbc8a90b4df3449eed30774d59" + "reference": "3581dabfc5e6627261abb0b6513b73b8e95f2c92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/KnpLabs/KnpMarkdownBundle/zipball/c24fca93e1ecedbbc8a90b4df3449eed30774d59", - "reference": "c24fca93e1ecedbbc8a90b4df3449eed30774d59", + "url": "https://api.github.com/repos/KnpLabs/KnpMarkdownBundle/zipball/3581dabfc5e6627261abb0b6513b73b8e95f2c92", + "reference": "3581dabfc5e6627261abb0b6513b73b8e95f2c92", "shasum": "" }, "require": { - "michelf/php-markdown": "1.4.0", + "michelf/php-markdown": "~1.4", "php": ">=5.3.9", - "symfony/framework-bundle": "~2.1" + "symfony/dependency-injection": "~2.3|~3.0", + "symfony/framework-bundle": "~2.3|~3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.5" }, "suggest": { "ext-sundown": "to use optional support for php-sundown extension instead of php implementation", @@ -1118,12 +1104,12 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { - "psr-0": { - "Knp\\Bundle\\MarkdownBundle": "" + "psr-4": { + "Knp\\Bundle\\MarkdownBundle\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1148,39 +1134,42 @@ "knplabs", "markdown" ], - "time": "2014-02-20 11:01:37" + "time": "2016-05-04 16:08:55" }, { "name": "kriswallsmith/assetic", - "version": "v1.2.1", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/kriswallsmith/assetic.git", - "reference": "b20efe38845d20458702f97f3ff625d80805897b" + "reference": "e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kriswallsmith/assetic/zipball/b20efe38845d20458702f97f3ff625d80805897b", - "reference": "b20efe38845d20458702f97f3ff625d80805897b", + "url": "https://api.github.com/repos/kriswallsmith/assetic/zipball/e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1", + "reference": "e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1", "shasum": "" }, "require": { "php": ">=5.3.1", - "symfony/process": "~2.1" + "symfony/process": "~2.1|~3.0" + }, + "conflict": { + "twig/twig": "<1.27" }, "require-dev": { - "cssmin/cssmin": "*", - "joliclic/javascript-packer": "*", - "kamicane/packager": "*", - "leafo/lessphp": "*", - "leafo/scssphp": "*", - "leafo/scssphp-compass": "*", - "mrclay/minify": "*", - "patchwork/jsqueeze": "~1.0", - "phpunit/phpunit": "~4", + "leafo/lessphp": "^0.3.7", + "leafo/scssphp": "~0.1", + "meenie/javascript-packer": "^1.1", + "mrclay/minify": "<2.3", + "natxet/cssmin": "3.0.4", + "patchwork/jsqueeze": "~1.0|~2.0", + "phpunit/phpunit": "~4.8 || ^5.6", "psr/log": "~1.0", - "ptachoire/cssembed": "*", - "twig/twig": "~1.6" + "ptachoire/cssembed": "~1.0", + "symfony/phpunit-bridge": "~2.7|~3.0", + "twig/twig": "~1.23|~2.0", + "yfix/packager": "dev-master" }, "suggest": { "leafo/lessphp": "Assetic provides the integration with the lessphp LESS compiler", @@ -1193,7 +1182,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -1222,20 +1211,20 @@ "compression", "minification" ], - "time": "2014-12-12 05:04:05" + "time": "2016-11-11 18:43:20" }, { "name": "michelf/php-markdown", - "version": "1.4.0", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/michelf/php-markdown.git", - "reference": "96d8150406f67e683ef4acc09fef91785fef1266" + "reference": "1f51cc520948f66cd2af8cbc45a5ee175e774220" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/michelf/php-markdown/zipball/96d8150406f67e683ef4acc09fef91785fef1266", - "reference": "96d8150406f67e683ef4acc09fef91785fef1266", + "url": "https://api.github.com/repos/michelf/php-markdown/zipball/1f51cc520948f66cd2af8cbc45a5ee175e774220", + "reference": "1f51cc520948f66cd2af8cbc45a5ee175e774220", "shasum": "" }, "require": { @@ -1260,33 +1249,33 @@ { "name": "Michel Fortin", "email": "michel.fortin@michelf.ca", - "homepage": "http://michelf.ca/", + "homepage": "https://michelf.ca/", "role": "Developer" }, { "name": "John Gruber", - "homepage": "http://daringfireball.net/" + "homepage": "https://daringfireball.net/" } ], "description": "PHP Markdown", - "homepage": "http://michelf.ca/projects/php-markdown/", + "homepage": "https://michelf.ca/projects/php-markdown/", "keywords": [ "markdown" ], - "time": "2013-11-29 17:09:24" + "time": "2016-10-29 18:58:20" }, { "name": "monolog/monolog", - "version": "1.13.1", + "version": "1.21.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac" + "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c31a2c4e8db5da8b46c74cf275d7f109c0f249ac", - "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f42fbdfd53e306bda545845e4dbfd3e72edb4952", + "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952", "shasum": "" }, "require": { @@ -1297,14 +1286,17 @@ "psr/log-implementation": "1.0.0" }, "require-dev": { - "aws/aws-sdk-php": "~2.4, >2.4.8", + "aws/aws-sdk-php": "^2.4.9", "doctrine/couchdb": "~1.0@dev", "graylog2/gelf-php": "~1.0", - "phpunit/phpunit": "~4.0", - "raven/raven": "~0.5", - "ruflin/elastica": "0.90.*", - "swiftmailer/swiftmailer": "~5.3", - "videlalvaro/php-amqplib": "~2.4" + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "~5.3" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", @@ -1312,15 +1304,17 @@ "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", "ext-mongo": "Allow sending log messages to a MongoDB server", "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "raven/raven": "Allow sending log messages to a Sentry server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", "rollbar/rollbar": "Allow sending log messages to Rollbar", "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib" + "sentry/sentry": "Allow sending log messages to a Sentry server" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -1346,26 +1340,82 @@ "logging", "psr-3" ], - "time": "2015-03-09 09:58:04" + "time": "2016-07-29 03:23:52" }, { - "name": "psr/log", - "version": "1.0.0", + "name": "paragonie/random_compat", + "version": "v2.0.4", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" + "url": "https://github.com/paragonie/random_compat.git", + "reference": "a9b97968bcde1c4de2a5ec6cbd06a0f6c919b46e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/a9b97968bcde1c4de2a5ec6cbd06a0f6c919b46e", + "reference": "a9b97968bcde1c4de2a5ec6cbd06a0f6c919b46e", "shasum": "" }, + "require": { + "php": ">=5.2.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, "type": "library", "autoload": { - "psr-0": { - "Psr\\Log\\": "" + "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", + "pseudorandom", + "random" + ], + "time": "2016-11-07 23:38:38" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1379,164 +1429,42 @@ } ], "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", "keywords": [ "log", "psr", "psr-3" ], - "time": "2012-12-21 11:40:51" + "time": "2016-10-10 12:19:37" }, { - "name": "sabre/dav", - "version": "2.1.3", - "source": { - "type": "git", - "url": "https://github.com/fruux/sabre-dav.git", - "reference": "6a8aec204688d36681e0185fbaf1974b97e4a070" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fruux/sabre-dav/zipball/6a8aec204688d36681e0185fbaf1974b97e4a070", - "reference": "6a8aec204688d36681e0185fbaf1974b97e4a070", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-date": "*", - "ext-dom": "*", - "ext-iconv": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-pcre": "*", - "ext-simplexml": "*", - "ext-spl": "*", - "php": ">=5.4.1", - "sabre/event": "~2.0.0", - "sabre/http": "~3.0.0", - "sabre/vobject": "~3.3" - }, - "require-dev": { - "evert/phpdoc-md": "~0.1.0", - "phpunit/phpunit": "~4.2", - "squizlabs/php_codesniffer": "~1.5.3" - }, - "suggest": { - "ext-curl": "*", - "ext-pdo": "*" - }, - "bin": [ - "bin/sabredav", - "bin/naturalselection" - ], - "type": "library", - "autoload": { - "psr-4": { - "Sabre\\DAV\\": "lib/DAV/", - "Sabre\\DAVACL\\": "lib/DAVACL/", - "Sabre\\CalDAV\\": "lib/CalDAV/", - "Sabre\\CardDAV\\": "lib/CardDAV/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Evert Pot", - "email": "me@evertpot.com", - "homepage": "http://evertpot.com/", - "role": "Developer" - } - ], - "description": "WebDAV Framework for PHP", - "homepage": "http://sabre.io/", - "keywords": [ - "CalDAV", - "CardDAV", - "WebDAV", - "framework", - "iCalendar" - ], - "time": "2015-02-25 18:13:20" - }, - { - "name": "sabre/event", + "name": "sabre/uri", "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/fruux/sabre-event.git", - "reference": "f33d60742d7dff63d3722d0f70016704bf32e8db" + "url": "https://github.com/fruux/sabre-uri.git", + "reference": "ac3f8f47576324da558f427d171938baa557020f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fruux/sabre-event/zipball/f33d60742d7dff63d3722d0f70016704bf32e8db", - "reference": "f33d60742d7dff63d3722d0f70016704bf32e8db", + "url": "https://api.github.com/repos/fruux/sabre-uri/zipball/ac3f8f47576324da558f427d171938baa557020f", + "reference": "ac3f8f47576324da558f427d171938baa557020f", "shasum": "" }, "require": { - "php": ">=5.4.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Sabre\\Event\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Evert Pot", - "email": "me@evertpot.com", - "homepage": "http://evertpot.com/", - "role": "Developer" - } - ], - "description": "sabre/event is a library for lightweight event-based programming", - "homepage": "http://sabre.io/event/", - "keywords": [ - "EventEmitter", - "events", - "hooks", - "plugin", - "promise", - "signal" - ], - "time": "2014-10-06 23:26:48" - }, - { - "name": "sabre/http", - "version": "3.0.4", - "source": { - "type": "git", - "url": "https://github.com/fruux/sabre-http.git", - "reference": "efae5aa7155ba73aa517e33c20aba9c001bb6588" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fruux/sabre-http/zipball/efae5aa7155ba73aa517e33c20aba9c001bb6588", - "reference": "efae5aa7155ba73aa517e33c20aba9c001bb6588", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=5.4", - "sabre/event": ">=1.0.0,<3.0.0" + "php": ">=7" }, "require-dev": { "phpunit/phpunit": "*", - "squizlabs/php_codesniffer": "~1.5.3" - }, - "suggest": { - "ext-curl": " to make http requests with the Client class" + "sabre/cs": "~1.0.0" }, "type": "library", "autoload": { + "files": [ + "lib/functions.php" + ], "psr-4": { - "Sabre\\HTTP\\": "lib/" + "Sabre\\Uri\\": "lib/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1551,34 +1479,40 @@ "role": "Developer" } ], - "description": "The sabre/http library provides utilities for dealing with http requests and responses. ", - "homepage": "https://github.com/fruux/sabre-http", + "description": "Functions for making sense out of URIs.", + "homepage": "http://sabre.io/uri/", "keywords": [ - "http" + "rfc3986", + "uri", + "url" ], - "time": "2014-12-10 20:14:39" + "time": "2016-10-27 04:23:58" }, { "name": "sabre/vobject", - "version": "3.4.2", + "version": "4.1.1", "source": { "type": "git", "url": "https://github.com/fruux/sabre-vobject.git", - "reference": "0c90f60dae40137f1903c7b5915d3691c4fc99b0" + "reference": "a3a59b06947f122af2d45d52b72172cdc1efd68f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fruux/sabre-vobject/zipball/0c90f60dae40137f1903c7b5915d3691c4fc99b0", - "reference": "0c90f60dae40137f1903c7b5915d3691c4fc99b0", + "url": "https://api.github.com/repos/fruux/sabre-vobject/zipball/a3a59b06947f122af2d45d52b72172cdc1efd68f", + "reference": "a3a59b06947f122af2d45d52b72172cdc1efd68f", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=5.3.1" + "php": ">=5.5", + "sabre/xml": "~1.1" }, "require-dev": { "phpunit/phpunit": "*", - "squizlabs/php_codesniffer": "*" + "sabre/cs": "~0.0.3" + }, + "suggest": { + "hoa/bench": "If you would like to run the benchmark scripts" }, "bin": [ "bin/vobject", @@ -1587,7 +1521,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { @@ -1611,37 +1545,127 @@ "email": "dominik@fruux.com", "homepage": "http://tobschall.de/", "role": "Developer" + }, + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net", + "homepage": "http://mnt.io/", + "role": "Developer" } ], "description": "The VObject library for PHP allows you to easily parse and manipulate iCalendar and vCard objects", "homepage": "http://sabre.io/vobject/", "keywords": [ - "VObject", + "availability", + "freebusy", "iCalendar", + "ical", + "ics", "jCal", "jCard", - "vCard" + "recurrence", + "rfc2425", + "rfc2426", + "rfc2739", + "rfc4770", + "rfc5545", + "rfc5546", + "rfc6321", + "rfc6350", + "rfc6351", + "rfc6474", + "rfc6638", + "rfc6715", + "rfc6868", + "vCalendar", + "vCard", + "vcf", + "xCal", + "xCard" ], - "time": "2015-02-25 17:47:50" + "time": "2016-07-15 19:52:17" + }, + { + "name": "sabre/xml", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/fruux/sabre-xml.git", + "reference": "59b20e5bbace9912607481634f97d05a776ffca7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruux/sabre-xml/zipball/59b20e5bbace9912607481634f97d05a776ffca7", + "reference": "59b20e5bbace9912607481634f97d05a776ffca7", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "lib-libxml": ">=2.6.20", + "php": ">=5.5.5", + "sabre/uri": ">=1.0,<3.0.0" + }, + "require-dev": { + "phpunit/phpunit": "*", + "sabre/cs": "~1.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Sabre\\Xml\\": "lib/" + }, + "files": [ + "lib/Deserializer/functions.php", + "lib/Serializer/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Evert Pot", + "email": "me@evertpot.com", + "homepage": "http://evertpot.com/", + "role": "Developer" + }, + { + "name": "Markus Staab", + "email": "markus.staab@redaxo.de", + "role": "Developer" + } + ], + "description": "sabre/xml is an XML library that you may not hate.", + "homepage": "https://sabre.io/xml/", + "keywords": [ + "XMLReader", + "XMLWriter", + "dom", + "xml" + ], + "time": "2016-10-09 22:57:52" }, { "name": "sensio/distribution-bundle", - "version": "v3.0.18", + "version": "v4.0.12", "target-dir": "Sensio/Bundle/DistributionBundle", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioDistributionBundle.git", - "reference": "ac026149ffb1d3a5c893290d2d3ca8795013de08" + "reference": "f2bbaa81fe980f64ccf32bb63038bf130855f5f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/ac026149ffb1d3a5c893290d2d3ca8795013de08", - "reference": "ac026149ffb1d3a5c893290d2d3ca8795013de08", + "url": "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/f2bbaa81fe980f64ccf32bb63038bf130855f5f1", + "reference": "f2bbaa81fe980f64ccf32bb63038bf130855f5f1", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sensiolabs/security-checker": "~2.0", + "php": ">=5.3.9", + "sensiolabs/security-checker": "~3.0", "symfony/class-loader": "~2.2", "symfony/framework-bundle": "~2.3", "symfony/process": "~2.2" @@ -1659,7 +1683,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { @@ -1682,33 +1706,40 @@ "configuration", "distribution" ], - "time": "2015-02-27 12:59:18" + "time": "2016-10-30 23:17:28" }, { "name": "sensio/framework-extra-bundle", - "version": "v3.0.5", - "target-dir": "Sensio/Bundle/FrameworkExtraBundle", + "version": "v3.0.16", "source": { "type": "git", "url": "https://github.com/sensiolabs/SensioFrameworkExtraBundle.git", - "reference": "a72ce75a73d86c3593eceed5650b58fd3807a0cf" + "reference": "507a15f56fa7699f6cc8c2c7de4080b19ce22546" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/a72ce75a73d86c3593eceed5650b58fd3807a0cf", - "reference": "a72ce75a73d86c3593eceed5650b58fd3807a0cf", + "url": "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/507a15f56fa7699f6cc8c2c7de4080b19ce22546", + "reference": "507a15f56fa7699f6cc8c2c7de4080b19ce22546", "shasum": "" }, "require": { "doctrine/common": "~2.2", - "symfony/framework-bundle": "~2.3" + "symfony/dependency-injection": "~2.3|~3.0", + "symfony/framework-bundle": "~2.3|~3.0" }, "require-dev": { - "symfony/expression-language": "~2.4", - "symfony/security-bundle": "~2.4" + "symfony/browser-kit": "~2.3|~3.0", + "symfony/dom-crawler": "~2.3|~3.0", + "symfony/expression-language": "~2.4|~3.0", + "symfony/finder": "~2.3|~3.0", + "symfony/phpunit-bridge": "~2.7|~3.0", + "symfony/security-bundle": "~2.4|~3.0", + "symfony/twig-bundle": "~2.3|~3.0", + "twig/twig": "~1.11|~2.0" }, "suggest": { "symfony/expression-language": "", + "symfony/psr-http-message-bridge": "To use the PSR-7 converters", "symfony/security-bundle": "" }, "type": "symfony-bundle", @@ -1718,8 +1749,8 @@ } }, "autoload": { - "psr-0": { - "Sensio\\Bundle\\FrameworkExtraBundle": "" + "psr-4": { + "Sensio\\Bundle\\FrameworkExtraBundle\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1737,25 +1768,24 @@ "annotations", "controllers" ], - "time": "2015-02-05 07:39:23" + "time": "2016-03-25 17:08:27" }, { "name": "sensiolabs/security-checker", - "version": "v2.0.1", + "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/sensiolabs/security-checker.git", - "reference": "134cecf1c61256bd8e973e11376891a724543820" + "reference": "21696b0daa731064c23cfb694c60a2584a7b6e93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/134cecf1c61256bd8e973e11376891a724543820", - "reference": "134cecf1c61256bd8e973e11376891a724543820", + "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/21696b0daa731064c23cfb694c60a2584a7b6e93", + "reference": "21696b0daa731064c23cfb694c60a2584a7b6e93", "shasum": "" }, "require": { - "ext-curl": "*", - "symfony/console": "~2.0" + "symfony/console": "~2.0|~3.0" }, "bin": [ "security-checker" @@ -1763,7 +1793,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -1782,20 +1812,20 @@ } ], "description": "A security checker for your composer.lock", - "time": "2015-01-26 16:25:19" + "time": "2015-11-07 08:07:40" }, { "name": "swiftmailer/swiftmailer", - "version": "v5.4.0", + "version": "v5.4.3", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "31454f258f10329ae7c48763eb898a75c39e0a9f" + "reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/31454f258f10329ae7c48763eb898a75c39e0a9f", - "reference": "31454f258f10329ae7c48763eb898a75c39e0a9f", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/4cc92842069c2bbc1f28daaaf1d2576ec4dfe153", + "reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153", "shasum": "" }, "require": { @@ -1831,40 +1861,46 @@ "description": "Swiftmailer, free feature-rich PHP mailer", "homepage": "http://swiftmailer.org", "keywords": [ + "email", "mail", "mailer" ], - "time": "2015-03-14 06:06:39" + "time": "2016-07-08 11:51:25" }, { "name": "symfony/assetic-bundle", - "version": "v2.6.1", + "version": "v2.8.0", "source": { "type": "git", - "url": "https://github.com/symfony/AsseticBundle.git", - "reference": "422b0add2110f0cf9bc7a873a386ea053f4a89f0" + "url": "https://github.com/symfony/assetic-bundle.git", + "reference": "aa5b4f8b712f38745928fa845ddb73300bb2af6d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/AsseticBundle/zipball/422b0add2110f0cf9bc7a873a386ea053f4a89f0", - "reference": "422b0add2110f0cf9bc7a873a386ea053f4a89f0", + "url": "https://api.github.com/repos/symfony/assetic-bundle/zipball/aa5b4f8b712f38745928fa845ddb73300bb2af6d", + "reference": "aa5b4f8b712f38745928fa845ddb73300bb2af6d", "shasum": "" }, "require": { - "kriswallsmith/assetic": "~1.2", + "kriswallsmith/assetic": "~1.3", "php": ">=5.3.0", - "symfony/console": "~2.3", - "symfony/dependency-injection": "~2.3", - "symfony/framework-bundle": "~2.3", - "symfony/yaml": "~2.3" + "symfony/console": "~2.3|~3.0", + "symfony/dependency-injection": "~2.3|~3.0", + "symfony/framework-bundle": "~2.3|~3.0", + "symfony/yaml": "~2.3|~3.0" + }, + "conflict": { + "kriswallsmith/spork": "<=0.2", + "twig/twig": "<1.20" }, "require-dev": { - "kriswallsmith/spork": "~0.2", + "kriswallsmith/spork": "~0.3", "patchwork/jsqueeze": "~1.0", - "symfony/class-loader": "~2.3", - "symfony/css-selector": "~2.3", - "symfony/dom-crawler": "~2.3", - "symfony/twig-bundle": "~2.3" + "symfony/class-loader": "~2.3|~3.0", + "symfony/css-selector": "~2.3|~3.0", + "symfony/dom-crawler": "~2.3|~3.0", + "symfony/phpunit-bridge": "~2.7|~3.0", + "symfony/twig-bundle": "~2.3|~3.0" }, "suggest": { "kriswallsmith/spork": "to be able to dump assets in parallel", @@ -1873,7 +1909,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.5-dev" + "dev-master": "2.7-dev" } }, "autoload": { @@ -1899,38 +1935,39 @@ "compression", "minification" ], - "time": "2015-01-27 12:45:16" + "time": "2015-12-28 13:12:39" }, { "name": "symfony/monolog-bundle", - "version": "v2.7.1", + "version": "2.12.0", "source": { "type": "git", - "url": "https://github.com/symfony/MonologBundle.git", - "reference": "9320b6863404c70ebe111e9040dab96f251de7ac" + "url": "https://github.com/symfony/monolog-bundle.git", + "reference": "6acef3bd201c4f35e42e52dedf1fe088f30e07e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/MonologBundle/zipball/9320b6863404c70ebe111e9040dab96f251de7ac", - "reference": "9320b6863404c70ebe111e9040dab96f251de7ac", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/6acef3bd201c4f35e42e52dedf1fe088f30e07e8", + "reference": "6acef3bd201c4f35e42e52dedf1fe088f30e07e8", "shasum": "" }, "require": { - "monolog/monolog": "~1.8", + "monolog/monolog": "~1.18", "php": ">=5.3.2", - "symfony/config": "~2.3", - "symfony/dependency-injection": "~2.3", - "symfony/http-kernel": "~2.3", - "symfony/monolog-bridge": "~2.3" + "symfony/config": "~2.3|~3.0", + "symfony/dependency-injection": "~2.3|~3.0", + "symfony/http-kernel": "~2.3|~3.0", + "symfony/monolog-bridge": "~2.3|~3.0" }, "require-dev": { - "symfony/console": "~2.3", - "symfony/yaml": "~2.3" + "phpunit/phpunit": "^4.8", + "symfony/console": "~2.3|~3.0", + "symfony/yaml": "~2.3|~3.0" }, "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.7.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -1958,32 +1995,546 @@ "log", "logging" ], - "time": "2015-01-04 20:21:17" + "time": "2016-11-06 18:54:50" }, { - "name": "symfony/swiftmailer-bundle", - "version": "v2.3.8", + "name": "symfony/polyfill-apcu", + "version": "v1.3.0", "source": { "type": "git", - "url": "https://github.com/symfony/SwiftmailerBundle.git", - "reference": "970b13d01871207e81d17b17ddda025e7e21e797" + "url": "https://github.com/symfony/polyfill-apcu.git", + "reference": "5d4474f447403c3348e37b70acc2b95475b7befa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/SwiftmailerBundle/zipball/970b13d01871207e81d17b17ddda025e7e21e797", - "reference": "970b13d01871207e81d17b17ddda025e7e21e797", + "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/5d4474f447403c3348e37b70acc2b95475b7befa", + "reference": "5d4474f447403c3348e37b70acc2b95475b7befa", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting apcu_* functions to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "apcu", + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2016-11-14 01:06:16" + }, + { + "name": "symfony/polyfill-intl-icu", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-icu.git", + "reference": "2d6e2b20d457603eefb6e614286c22efca30fdb4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/2d6e2b20d457603eefb6e614286c22efca30fdb4", + "reference": "2d6e2b20d457603eefb6e614286c22efca30fdb4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/intl": "~2.3|~3.0" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's ICU-related data and classes", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "icu", + "intl", + "polyfill", + "portable", + "shim" + ], + "time": "2016-11-14 01:06:16" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", + "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2016-11-14 01:06:16" + }, + { + "name": "symfony/polyfill-php54", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php54.git", + "reference": "90e085822963fdcc9d1c5b73deb3d2e5783b16a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php54/zipball/90e085822963fdcc9d1c5b73deb3d2e5783b16a0", + "reference": "90e085822963fdcc9d1c5b73deb3d2e5783b16a0", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php54\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2016-11-14 01:06:16" + }, + { + "name": "symfony/polyfill-php55", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php55.git", + "reference": "03e3f0350bca2220e3623a0e340eef194405fc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/03e3f0350bca2220e3623a0e340eef194405fc67", + "reference": "03e3f0350bca2220e3623a0e340eef194405fc67", + "shasum": "" + }, + "require": { + "ircmaxell/password-compat": "~1.0", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php55\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2016-11-14 01:06:16" + }, + { + "name": "symfony/polyfill-php56", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "1dd42b9b89556f18092f3d1ada22cb05ac85383c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/1dd42b9b89556f18092f3d1ada22cb05ac85383c", + "reference": "1dd42b9b89556f18092f3d1ada22cb05ac85383c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-util": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php56\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2016-11-14 01:06:16" + }, + { + "name": "symfony/polyfill-php70", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "13ce343935f0f91ca89605a2f6ca6f5c2f3faac2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/13ce343935f0f91ca89605a2f6ca6f5c2f3faac2", + "reference": "13ce343935f0f91ca89605a2f6ca6f5c2f3faac2", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2016-11-14 01:06:16" + }, + { + "name": "symfony/polyfill-util", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-util.git", + "reference": "746bce0fca664ac0a575e465f65c6643faddf7fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/746bce0fca664ac0a575e465f65c6643faddf7fb", + "reference": "746bce0fca664ac0a575e465f65c6643faddf7fb", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "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" + ], + "time": "2016-11-14 01:06:16" + }, + { + "name": "symfony/security-acl", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-acl.git", + "reference": "053b49bf4aa333a392c83296855989bcf88ddad1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-acl/zipball/053b49bf4aa333a392c83296855989bcf88ddad1", + "reference": "053b49bf4aa333a392c83296855989bcf88ddad1", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/security-core": "~2.8|~3.0" + }, + "require-dev": { + "doctrine/common": "~2.2", + "doctrine/dbal": "~2.2", + "psr/log": "~1.0", + "symfony/phpunit-bridge": "~2.8|~3.0" + }, + "suggest": { + "doctrine/dbal": "For using the built-in ACL implementation", + "symfony/class-loader": "For using the ACL generateSql script", + "symfony/finder": "For using the ACL generateSql script" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Acl\\": "" + }, + "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 Security Component - ACL (Access Control List)", + "homepage": "https://symfony.com", + "time": "2015-12-28 09:39:46" + }, + { + "name": "symfony/swiftmailer-bundle", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/swiftmailer-bundle.git", + "reference": "d7b7bd6bb6e9b32ebc5f9778f94d4b4e4af5d069" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/d7b7bd6bb6e9b32ebc5f9778f94d4b4e4af5d069", + "reference": "d7b7bd6bb6e9b32ebc5f9778f94d4b4e4af5d069", "shasum": "" }, "require": { "php": ">=5.3.2", "swiftmailer/swiftmailer": ">=4.2.0,~5.0", - "symfony/swiftmailer-bridge": "~2.1" + "symfony/config": "~2.7|~3.0", + "symfony/dependency-injection": "~2.7|~3.0", + "symfony/http-kernel": "~2.7|~3.0" }, "require-dev": { - "symfony/config": "~2.1", - "symfony/dependency-injection": "~2.1", - "symfony/http-kernel": "~2.1", - "symfony/yaml": "~2.1" + "symfony/console": "~2.7|~3.0", + "symfony/framework-bundle": "~2.7|~3.0", + "symfony/phpunit-bridge": "~2.7|~3.0", + "symfony/yaml": "~2.7|~3.0" }, "suggest": { "psr/log": "Allows logging" @@ -1991,7 +2542,7 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "2.4-dev" } }, "autoload": { @@ -2015,35 +2566,49 @@ ], "description": "Symfony SwiftmailerBundle", "homepage": "http://symfony.com", - "time": "2014-12-01 17:44:50" + "time": "2016-10-27 17:59:30" }, { "name": "symfony/symfony", - "version": "v2.5.10", + "version": "v2.8.14", "source": { "type": "git", "url": "https://github.com/symfony/symfony.git", - "reference": "6ffe6437a9e734eabd6d092387f065bebfefcd24" + "reference": "6ceca5b4154c80839270c38aa65373de76127df7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/symfony/zipball/6ffe6437a9e734eabd6d092387f065bebfefcd24", - "reference": "6ffe6437a9e734eabd6d092387f065bebfefcd24", + "url": "https://api.github.com/repos/symfony/symfony/zipball/6ceca5b4154c80839270c38aa65373de76127df7", + "reference": "6ceca5b4154c80839270c38aa65373de76127df7", "shasum": "" }, "require": { - "doctrine/common": "~2.3", - "php": ">=5.3.3", + "doctrine/common": "~2.4", + "php": ">=5.3.9", "psr/log": "~1.0", - "twig/twig": "~1.12,>=1.12.3" + "symfony/polyfill-apcu": "~1.1", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php54": "~1.0", + "symfony/polyfill-php55": "~1.0", + "symfony/polyfill-php56": "~1.0", + "symfony/polyfill-php70": "~1.0", + "symfony/polyfill-util": "~1.0", + "symfony/security-acl": "~2.7|~3.0.0", + "twig/twig": "~1.28|~2.0" + }, + "conflict": { + "phpdocumentor/reflection": "<1.0.7" }, "replace": { + "symfony/asset": "self.version", "symfony/browser-kit": "self.version", "symfony/class-loader": "self.version", "symfony/config": "self.version", "symfony/console": "self.version", "symfony/css-selector": "self.version", "symfony/debug": "self.version", + "symfony/debug-bundle": "self.version", "symfony/dependency-injection": "self.version", "symfony/doctrine-bridge": "self.version", "symfony/dom-crawler": "self.version", @@ -2056,19 +2621,20 @@ "symfony/http-foundation": "self.version", "symfony/http-kernel": "self.version", "symfony/intl": "self.version", + "symfony/ldap": "self.version", "symfony/locale": "self.version", "symfony/monolog-bridge": "self.version", "symfony/options-resolver": "self.version", "symfony/process": "self.version", - "symfony/propel1-bridge": "self.version", "symfony/property-access": "self.version", + "symfony/property-info": "self.version", "symfony/proxy-manager-bridge": "self.version", "symfony/routing": "self.version", "symfony/security": "self.version", - "symfony/security-acl": "self.version", "symfony/security-bundle": "self.version", "symfony/security-core": "self.version", "symfony/security-csrf": "self.version", + "symfony/security-guard": "self.version", "symfony/security-http": "self.version", "symfony/serializer": "self.version", "symfony/stopwatch": "self.version", @@ -2078,35 +2644,42 @@ "symfony/twig-bridge": "self.version", "symfony/twig-bundle": "self.version", "symfony/validator": "self.version", + "symfony/var-dumper": "self.version", "symfony/web-profiler-bundle": "self.version", "symfony/yaml": "self.version" }, "require-dev": { "doctrine/data-fixtures": "1.0.*", - "doctrine/dbal": "~2.2", - "doctrine/orm": "~2.2,>=2.2.3", - "egulias/email-validator": "~1.2", - "ircmaxell/password-compat": "~1.0", - "monolog/monolog": "~1.3", - "ocramius/proxy-manager": "~0.4|~1.0", - "propel/propel1": "~1.6" + "doctrine/dbal": "~2.4", + "doctrine/doctrine-bundle": "~1.2", + "doctrine/orm": "~2.4,>=2.4.5", + "egulias/email-validator": "~1.2,>=1.2.1", + "monolog/monolog": "~1.11", + "ocramius/proxy-manager": "~0.4|~1.0|~2.0", + "phpdocumentor/reflection": "^1.0.7", + "symfony/phpunit-bridge": "~3.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5-dev" + "dev-master": "2.8-dev" } }, "autoload": { - "psr-0": { - "Symfony\\": "src/" + "psr-4": { + "Symfony\\Bridge\\Doctrine\\": "src/Symfony/Bridge/Doctrine/", + "Symfony\\Bridge\\Monolog\\": "src/Symfony/Bridge/Monolog/", + "Symfony\\Bridge\\ProxyManager\\": "src/Symfony/Bridge/ProxyManager/", + "Symfony\\Bridge\\Swiftmailer\\": "src/Symfony/Bridge/Swiftmailer/", + "Symfony\\Bridge\\Twig\\": "src/Symfony/Bridge/Twig/", + "Symfony\\Bundle\\": "src/Symfony/Bundle/", + "Symfony\\Component\\": "src/Symfony/Component/" }, "classmap": [ - "src/Symfony/Component/HttpFoundation/Resources/stubs", "src/Symfony/Component/Intl/Resources/stubs" ], - "files": [ - "src/Symfony/Component/Intl/Resources/stubs/functions.php" + "exclude-from-classmap": [ + "**/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -2114,38 +2687,38 @@ "MIT" ], "authors": [ - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], "description": "The Symfony PHP framework", - "homepage": "http://symfony.com", + "homepage": "https://symfony.com", "keywords": [ "framework" ], - "time": "2015-02-02 09:26:53" + "time": "2016-11-21 02:24:51" }, { "name": "twig/extensions", - "version": "v1.2.0", + "version": "v1.4.1", "source": { "type": "git", "url": "https://github.com/twigphp/Twig-extensions.git", - "reference": "8cf4b9fe04077bd54fc73f4fde83347040c3b8cd" + "reference": "f0bb8431c8691f5a39f1017d9a5967a082bf01ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/8cf4b9fe04077bd54fc73f4fde83347040c3b8cd", - "reference": "8cf4b9fe04077bd54fc73f4fde83347040c3b8cd", + "url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/f0bb8431c8691f5a39f1017d9a5967a082bf01ff", + "reference": "f0bb8431c8691f5a39f1017d9a5967a082bf01ff", "shasum": "" }, "require": { - "twig/twig": "~1.12" + "twig/twig": "~1.20|~2.0" }, "require-dev": { "symfony/translation": "~2.3" @@ -2156,7 +2729,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -2180,29 +2753,33 @@ "i18n", "text" ], - "time": "2014-10-30 14:30:03" + "time": "2016-10-25 17:34:14" }, { "name": "twig/twig", - "version": "v1.18.0", + "version": "v1.28.1", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "4cf7464348e7f9893a93f7096a90b73722be99cf" + "reference": "fff80c4a7ae1d47a81dfec10c76cbcb939170b45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/4cf7464348e7f9893a93f7096a90b73722be99cf", - "reference": "4cf7464348e7f9893a93f7096a90b73722be99cf", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/fff80c4a7ae1d47a81dfec10c76cbcb939170b45", + "reference": "fff80c4a7ae1d47a81dfec10c76cbcb939170b45", "shasum": "" }, "require": { - "php": ">=5.2.4" + "php": ">=5.2.7" + }, + "require-dev": { + "symfony/debug": "~2.7", + "symfony/phpunit-bridge": "~2.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.18-dev" + "dev-master": "1.28-dev" } }, "autoload": { @@ -2237,49 +2814,1393 @@ "keywords": [ "templating" ], - "time": "2015-01-25 17:32:08" + "time": "2016-11-19 05:52:49" } ], "packages-dev": [ { - "name": "sensio/generator-bundle", - "version": "v2.5.3", - "target-dir": "Sensio/Bundle/GeneratorBundle", + "name": "doctrine/data-fixtures", + "version": "v1.2.2", "source": { "type": "git", - "url": "https://github.com/sensiolabs/SensioGeneratorBundle.git", - "reference": "e50108c2133ee5c9c484555faed50c17a61221d3" + "url": "https://github.com/doctrine/data-fixtures.git", + "reference": "17fa5bfe6ff52e35cb3d9ec37c934a2f4bd1fa2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/e50108c2133ee5c9c484555faed50c17a61221d3", - "reference": "e50108c2133ee5c9c484555faed50c17a61221d3", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/17fa5bfe6ff52e35cb3d9ec37c934a2f4bd1fa2e", + "reference": "17fa5bfe6ff52e35cb3d9ec37c934a2f4bd1fa2e", "shasum": "" }, "require": { - "symfony/console": "~2.5", - "symfony/framework-bundle": "~2.2" + "doctrine/common": "~2.2", + "php": "^5.6 || ^7.0" + }, + "conflict": { + "doctrine/orm": "< 2.4" }, "require-dev": { - "doctrine/orm": "~2.2,>=2.2.3", - "symfony/doctrine-bridge": "~2.2", - "twig/twig": "~1.11" + "doctrine/dbal": "^2.5.4", + "doctrine/orm": "^2.5.4", + "phpunit/phpunit": "^5.4.6" }, - "type": "symfony-bundle", + "suggest": { + "doctrine/mongodb-odm": "For loading MongoDB ODM fixtures", + "doctrine/orm": "For loading ORM fixtures", + "doctrine/phpcr-odm": "For loading PHPCR ODM fixtures" + }, + "type": "library", "extra": { "branch-alias": { - "dev-master": "2.5.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { "psr-0": { - "Sensio\\Bundle\\GeneratorBundle": "" + "Doctrine\\Common\\DataFixtures": "lib/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], + "authors": [ + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Data Fixtures for all Doctrine Object Managers", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database" + ], + "time": "2016-09-20 10:07:57" + }, + { + "name": "doctrine/doctrine-fixtures-bundle", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", + "reference": "0f1a2f91b349e10f5c343f75ab71d23aace5b029" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/0f1a2f91b349e10f5c343f75ab71d23aace5b029", + "reference": "0f1a2f91b349e10f5c343f75ab71d23aace5b029", + "shasum": "" + }, + "require": { + "doctrine/data-fixtures": "~1.0", + "doctrine/doctrine-bundle": "~1.0", + "php": ">=5.3.2", + "symfony/doctrine-bridge": "~2.3|~3.0" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Bundle\\FixturesBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Doctrine Project", + "homepage": "http://www.doctrine-project.org" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony DoctrineFixturesBundle", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "Fixture", + "persistence" + ], + "time": "2015-11-04 21:23:23" + }, + { + "name": "liip/functional-test-bundle", + "version": "1.6.3", + "source": { + "type": "git", + "url": "https://github.com/liip/LiipFunctionalTestBundle.git", + "reference": "f3606bff7fcf7208a482f88d4cd216ebf4af194e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/liip/LiipFunctionalTestBundle/zipball/f3606bff7fcf7208a482f88d4cd216ebf4af194e", + "reference": "f3606bff7fcf7208a482f88d4cd216ebf4af194e", + "shasum": "" + }, + "require": { + "doctrine/common": "~2.0", + "php": "^5.3.9|^7.0", + "symfony/browser-kit": "~2.3|~3.0", + "symfony/framework-bundle": "2.3.*|~2.7|~3.0" + }, + "require-dev": { + "brianium/paratest": "~0.12.0|~0.13.2", + "doctrine/doctrine-fixtures-bundle": "~2.3", + "doctrine/orm": "^2.4.8", + "doctrine/phpcr-bundle": "~1.3", + "doctrine/phpcr-odm": "~1.3", + "hautelook/alice-bundle": "~0.2|~1.2", + "jackalope/jackalope-doctrine-dbal": "1.1.*|1.2.*", + "nelmio/alice": "~1.7|~2.0", + "phpunit/phpunit": "4.8.*|~5.2", + "symfony/assetic-bundle": "~2.3", + "symfony/monolog-bundle": "~2.4", + "symfony/symfony": "~2.3.1|~2.7|~3.0", + "twig/twig": "~1.12" + }, + "suggest": { + "brianium/paratest": "Required when using paratest to parallelize tests", + "doctrine/dbal": "Required when using the fixture loading functionality with an ORM and SQLite", + "doctrine/doctrine-fixtures-bundle": "Required when using the fixture loading functionality", + "doctrine/orm": "Required when using the fixture loading functionality with an ORM and SQLite", + "hautelook/alice-bundle": "Required when using loadFixtureFiles functionality with custom providers", + "nelmio/alice": "Required when using loadFixtureFiles functionality", + "symfony/framework-bundle": "To use assertStatusCode and assertValidationErrors ~2.5" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Liip\\FunctionalTestBundle\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Liip AG", + "homepage": "http://www.liip.ch/" + }, + { + "name": "Community contributions", + "homepage": "https://github.com/liip/LiipFunctionalTestBundle/contributors" + } + ], + "description": "This bundles provides additional functional test-cases for Symfony2 applications", + "keywords": [ + "Symfony2" + ], + "time": "2016-05-10 22:04:27" + }, + { + "name": "myclabs/deep-copy", + "version": "1.5.5", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "399c1f9781e222f6eb6cc238796f5200d1b7f108" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/399c1f9781e222f6eb6cc238796f5200d1b7f108", + "reference": "399c1f9781e222f6eb6cc238796f5200d1b7f108", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "doctrine/collections": "1.*", + "phpunit/phpunit": "~4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "homepage": "https://github.com/myclabs/DeepCopy", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2016-10-31 17:19:45" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2015-12-27 11:43:31" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/type-resolver": "^0.2.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2016-09-30 07:12:33" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", + "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2016-06-10 07:14:17" + }, + { + "name": "phpspec/prophecy", + "version": "v1.6.2", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "6c52c2722f8460122f96f86346600e1077ce22cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/6c52c2722f8460122f96f86346600e1077ce22cb", + "reference": "6c52c2722f8460122f96f86346600e1077ce22cb", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1", + "sebastian/recursion-context": "^1.0|^2.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.0", + "phpunit/phpunit": "^4.8 || ^5.6.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2016-11-21 14:58:47" + }, + { + "name": "phpunit/php-code-coverage", + "version": "4.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "6cba06ff75a1a63a71033e1a01b89056f3af1e8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6cba06ff75a1a63a71033e1a01b89056f3af1e8d", + "reference": "6cba06ff75a1a63a71033e1a01b89056f3af1e8d", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "^1.4.2", + "sebastian/code-unit-reverse-lookup": "~1.0", + "sebastian/environment": "^1.3.2 || ^2.0", + "sebastian/version": "~1.0|~2.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "^5.4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.4.0", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2016-11-01 05:06:24" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2015-06-21 13:08:43" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21 13:50:34" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4|~5" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2016-05-12 18:03:57" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3b402f65a4cc90abf6e1104e388b896ce209631b", + "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2016-11-15 14:06:22" + }, + { + "name": "phpunit/phpunit", + "version": "5.6.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "875145fabfa261fa9c1aea663dd29ddce92dca8f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/875145fabfa261fa9c1aea663dd29ddce92dca8f", + "reference": "875145fabfa261fa9c1aea663dd29ddce92dca8f", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "~1.3", + "php": "^5.6 || ^7.0", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "^4.0.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "^3.2", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "^1.3 || ^2.0", + "sebastian/exporter": "~2.0", + "sebastian/global-state": "~1.0", + "sebastian/object-enumerator": "~2.0", + "sebastian/resource-operations": "~1.0", + "sebastian/version": "~1.0|~2.0", + "symfony/yaml": "~2.1|~3.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-xdebug": "*", + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.6.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2016-11-21 15:23:34" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "3.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "45026c8383187ad1dcb14fbfec77dced265b9cfc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/45026c8383187ad1dcb14fbfec77dced265b9cfc", + "reference": "45026c8383187ad1dcb14fbfec77dced265b9cfc", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.6 || ^7.0", + "phpunit/php-text-template": "^1.2", + "sebastian/exporter": "^1.2 || ^2.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.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": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2016-11-19 09:07:46" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe", + "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "phpunit/phpunit": "~5" + }, + "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": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2016-02-13 06:45:14" + }, + { + "name": "sebastian/comparator", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "6a1ed12e8b2409076ab22e3897126211ff8b1f7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/6a1ed12e8b2409076ab22e3897126211ff8b1f7f", + "reference": "6a1ed12e8b2409076ab22e3897126211ff8b1f7f", + "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" + ], + "time": "2016-11-19 09:18:40" + }, + { + "name": "sebastian/diff", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2015-12-08 07:14:41" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-08-18 05:49:44" + }, + { + "name": "sebastian/exporter", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.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": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-11-19 08:54:04" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12 03:26:01" + }, + { + "name": "sebastian/object-enumerator", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "96f8a3f257b69e8128ad74d3a7fd464bcbaa3b35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/96f8a3f257b69e8128ad74d3a7fd464bcbaa3b35", + "reference": "96f8a3f257b69e8128ad74d3a7fd464bcbaa3b35", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2016-11-19 07:35:10" + }, + { + "name": "sebastian/recursion-context", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2016-11-19 07:33:16" + }, + { + "name": "sebastian/resource-operations", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "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": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2015-07-28 20:34:47" + }, + { + "name": "sebastian/version", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", + "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.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": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-02-04 12:56:52" + }, + { + "name": "sensio/generator-bundle", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sensiolabs/SensioGeneratorBundle.git", + "reference": "0d3c9c4864142dc6a368fa0d952a8b83215e8740" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/0d3c9c4864142dc6a368fa0d952a8b83215e8740", + "reference": "0d3c9c4864142dc6a368fa0d952a8b83215e8740", + "shasum": "" + }, + "require": { + "symfony/console": "~2.7|~3.0", + "symfony/framework-bundle": "~2.7|~3.0", + "symfony/process": "~2.7|~3.0", + "symfony/yaml": "~2.7|~3.0" + }, + "require-dev": { + "doctrine/orm": "~2.4", + "symfony/doctrine-bridge": "~2.7|~3.0", + "twig/twig": "~1.18" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Sensio\\Bundle\\GeneratorBundle\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], "authors": [ { "name": "Fabien Potencier", @@ -2287,19 +4208,66 @@ } ], "description": "This bundle generates code for you", - "time": "2015-03-17 06:36:52" + "time": "2016-11-07 19:48:31" + }, + { + "name": "webmozart/assert", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "bb2d123231c095735130cc8f6d31385a44c7b308" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bb2d123231c095735130cc8f6d31385a44c7b308", + "reference": "bb2d123231c095735130cc8f6d31385a44c7b308", + "shasum": "" + }, + "require": { + "php": "^5.3.3|^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-08-09 15:02:57" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": { - "doctrine/migrations": 20, - "doctrine/doctrine-migrations-bundle": 20 - }, + "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=5.3.3" + "php": ">=5.6" }, "platform-dev": [] } diff --git a/src/Hackspace/Bundle/CalciferBundle/Command/GenerateEventsCommand.php b/src/Hackspace/Bundle/CalciferBundle/Command/GenerateEventsCommand.php index 9f7878a..c0c540b 100755 --- a/src/Hackspace/Bundle/CalciferBundle/Command/GenerateEventsCommand.php +++ b/src/Hackspace/Bundle/CalciferBundle/Command/GenerateEventsCommand.php @@ -12,6 +12,7 @@ namespace Hackspace\Bundle\CalciferBundle\Command; use Doctrine\ORM\EntityManager; use Hackspace\Bundle\CalciferBundle\Entity\Event; use Hackspace\Bundle\CalciferBundle\Entity\RepeatingEvent; +use Hackspace\Bundle\CalciferBundle\Entity\RepeatingEventLogEntry; use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -52,7 +53,6 @@ class GenerateEventsCommand extends ContainerAwareCommand $event = null; while (($next_date = $parser->getNext()) < $end) { /** @var \DateTime $next_date */ - $output->writeln(sprintf("Creating Event %s for %s",$entity->summary,$next_date->format('Y-m-d H:i'))); $event = new Event(); $event->location = $entity->location; $event->startdate = $next_date; @@ -75,6 +75,12 @@ class GenerateEventsCommand extends ContainerAwareCommand $event->addTag($tag); } $entityManager->persist($event); + $logEntry = new RepeatingEventLogEntry(); + $logEntry->event = $event; + $logEntry->repeating_event = $entity; + $logEntry->event_startdate = $event->startdate; + $logEntry->event_enddate = $event->enddate; + $entityManager->persist($logEntry); $entityManager->flush(); $parser->setNow($next_date); } diff --git a/src/Hackspace/Bundle/CalciferBundle/Controller/EventController.php b/src/Hackspace/Bundle/CalciferBundle/Controller/EventController.php index d477cad..ebeeb1b 100755 --- a/src/Hackspace/Bundle/CalciferBundle/Controller/EventController.php +++ b/src/Hackspace/Bundle/CalciferBundle/Controller/EventController.php @@ -15,19 +15,8 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use Hackspace\Bundle\CalciferBundle\Entity\Event; use Hackspace\Bundle\CalciferBundle\Form\EventType; use Symfony\Component\HttpFoundation\Response; -use Jsvrcek\ICS\Model\Calendar; -use Jsvrcek\ICS\Utility\Formatter; -use Jsvrcek\ICS\CalendarStream; -use Jsvrcek\ICS\CalendarExport; -use - Sabre\VObject, - Sabre\CalDAV, - Sabre\DAV, - Sabre\DAVACL, - Sabre\DAV\Exception\Forbidden, - Hackspace\Bundle\CalciferBundle\libs\CalciferCaldavBackend, - Hackspace\Bundle\CalciferBundle\libs\CalciferPrincipalBackend; +use Sabre\VObject; /** * Event controller. * @@ -35,45 +24,6 @@ use */ class EventController extends Controller { - /** - * Finds and displays a Event entity. - * - * @Route("/{url}", name="events_caldav", requirements={"url" : "caldav(.+)"}) - */ - public function caldavEntry() - { - // Backends - $calendarBackend = new CalciferCaldavBackend($this); - $principalBackend = new CalciferPrincipalBackend(); - // Directory structure - $tree = [ - new CalDAV\CalendarRootNode($principalBackend, $calendarBackend), - ]; - - $server = new DAV\Server($tree); - - $server->setBaseUri('/caldav'); - - /*$aclPlugin = new DAVACL\Plugin(); - $aclPlugin->allowAccessToNodesWithoutACL = false; - $server->addPlugin($aclPlugin);*/ - - /* CalDAV support */ - $caldavPlugin = new CalDAV\Plugin(); - $server->addPlugin($caldavPlugin); - - /* WebDAV-Sync plugin */ - $server->addPlugin(new DAV\Sync\Plugin()); - -// Support for html frontend - $browser = new DAV\Browser\Plugin(); - $server->addPlugin($browser); - -// And off we go! - $server->exec(); - return new Response(); - } - /** * Lists all Event entities as ICS. * @@ -96,22 +46,14 @@ class EventController extends Controller ->setParameter('startdate', $now); $entities = $qb->getQuery()->execute(); - $calendar = new Calendar(); - $calendar->setProdId('-//My Company//Cool Calendar App//EN'); + $vcalendar = new VObject\Component\VCalendar(); foreach ($entities as $entity) { - /** @var Event $entity */ - $event = $entity->ConvertToCalendarEvent(); - $calendar->addEvent($event); + /** @var Event $entity */ + $vcalendar->add('VEVENT',$entity->ConvertToCalendarEvent()); } - $calendarExport = new CalendarExport(new CalendarStream, new Formatter()); - $calendarExport->addCalendar($calendar); - - //output .ics formatted text - $result = $calendarExport->getStream(); - - $response = new Response($result); + $response = new Response($vcalendar->serialize()); $response->headers->set('Content-Type', 'text/calendar'); return $response; diff --git a/src/Hackspace/Bundle/CalciferBundle/Controller/LocationController.php b/src/Hackspace/Bundle/CalciferBundle/Controller/LocationController.php index bbdb83b..65da169 100755 --- a/src/Hackspace/Bundle/CalciferBundle/Controller/LocationController.php +++ b/src/Hackspace/Bundle/CalciferBundle/Controller/LocationController.php @@ -16,12 +16,9 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use Hackspace\Bundle\CalciferBundle\Entity\Event; use Hackspace\Bundle\CalciferBundle\Form\EventType; use Symfony\Component\HttpFoundation\Response; -use Jsvrcek\ICS\Model\Calendar; -use Jsvrcek\ICS\Utility\Formatter; -use Jsvrcek\ICS\CalendarStream; -use Jsvrcek\ICS\CalendarExport; use Symfony\Component\HttpFoundation\AcceptHeader; +use Sabre\VObject; /** * Location controller. * @@ -68,24 +65,15 @@ class LocationController extends Controller $entities = $qb->getQuery()->execute(); if ($format == 'ics') { - $calendar = new Calendar(); - $calendar->setProdId('-//My Company//Cool Calendar App//EN'); + $vcalendar = new VObject\Component\VCalendar(); foreach ($entities as $entity) { - /** @var Event $entity */ - $event = $entity->ConvertToCalendarEvent(); - $calendar->addEvent($event); + /** @var Event $entity */ + $vcalendar->add('VEVENT',$entity->ConvertToCalendarEvent()); } - $calendarExport = new CalendarExport(new CalendarStream, new Formatter()); - $calendarExport->addCalendar($calendar); - - //output .ics formatted text - $result = $calendarExport->getStream(); - - $response = new Response($result); + $response = new Response($vcalendar->serialize()); $response->headers->set('Content-Type', 'text/calendar'); - return $response; } else { return array( @@ -213,8 +201,13 @@ class LocationController extends Controller ); } + $retval = [ + "success" => true, + "results" => $locations, + ]; - $response = new Response(json_encode($locations)); + + $response = new Response(json_encode($retval)); $response->headers->set('Content-Type', 'application/json'); return $response; diff --git a/src/Hackspace/Bundle/CalciferBundle/Controller/RepeatingEventController.php b/src/Hackspace/Bundle/CalciferBundle/Controller/RepeatingEventController.php index 50ad4fb..76e2784 100755 --- a/src/Hackspace/Bundle/CalciferBundle/Controller/RepeatingEventController.php +++ b/src/Hackspace/Bundle/CalciferBundle/Controller/RepeatingEventController.php @@ -48,6 +48,28 @@ class RepeatingEventController extends Controller ]; } + /** + * Displays all repeating events + * + * @Route("/logs", name="repeating_event_logs") + * @Method("GET") + * @Template() + */ + public function logIndexAction() + { + /** @var EntityManager $em */ + $em = $this->getDoctrine()->getManager(); + + /** @var EntityRepository $repo */ + $repo = $em->getRepository('CalciferBundle:RepeatingEventLogEntry'); + + $entities = $repo->findBy([], ['event_startdate' => 'DESC']); + + return [ + 'entities' => $entities, + ]; + } + /** * Displays a form to create a repeating event * diff --git a/src/Hackspace/Bundle/CalciferBundle/Controller/TagController.php b/src/Hackspace/Bundle/CalciferBundle/Controller/TagController.php index 230b828..ee41a83 100755 --- a/src/Hackspace/Bundle/CalciferBundle/Controller/TagController.php +++ b/src/Hackspace/Bundle/CalciferBundle/Controller/TagController.php @@ -7,7 +7,6 @@ use Doctrine\ORM\EntityRepository; use Doctrine\ORM\QueryBuilder; use Hackspace\Bundle\CalciferBundle\Entity\Location; use Hackspace\Bundle\CalciferBundle\Entity\Tag; -use Jsvrcek\ICS\Model\Description\Geo; use Symfony\Component\HttpFoundation\Request; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; @@ -16,18 +15,12 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use Hackspace\Bundle\CalciferBundle\Entity\Event; use Hackspace\Bundle\CalciferBundle\Form\EventType; use Symfony\Component\HttpFoundation\Response; -use Jsvrcek\ICS\Model\Calendar; -use Jsvrcek\ICS\Model\CalendarEvent; -use Jsvrcek\ICS\Model\Relationship\Attendee; -use Jsvrcek\ICS\Model\Relationship\Organizer; - -use Jsvrcek\ICS\Utility\Formatter; -use Jsvrcek\ICS\CalendarStream; -use Jsvrcek\ICS\CalendarExport; use Symfony\Component\Validator\Constraints\DateTime; use Doctrine\ORM\Query\ResultSetMappingBuilder; use Symfony\Component\HttpFoundation\AcceptHeader; +use Sabre\VObject; + /** * Tag controller. * @@ -143,23 +136,14 @@ EOF; } if ($format == 'ics') { - $calendar = new Calendar(); - $calendar->setProdId('-//My Company//Cool Calendar App//EN'); - $calendar->setTimeZone(new \DateTimeZone('Europe/Berlin')); + $vcalendar = new VObject\Component\VCalendar(); foreach ($entities as $entity) { - /** @var Event $entity */ - $event = $entity->ConvertToCalendarEvent(); - $calendar->addEvent($event); + /** @var Event $entity */ + $vcalendar->add('VEVENT',$entity->ConvertToCalendarEvent()); } - $calendarExport = new CalendarExport(new CalendarStream, new Formatter()); - $calendarExport->addCalendar($calendar); - - //output .ics formatted text - $result = $calendarExport->getStream(); - - $response = new Response($result); + $response = new Response($vcalendar->serialize()); $response->headers->set('Content-Type', 'text/calendar'); return $response; @@ -202,8 +186,13 @@ EOF; ]; } + $retval = [ + 'success' => true, + 'results' => $tags, + ]; - $response = new Response(json_encode($tags)); + + $response = new Response(json_encode($retval)); $response->headers->set('Content-Type', 'application/json'); return $response; diff --git a/src/Hackspace/Bundle/CalciferBundle/Entity/Event.php b/src/Hackspace/Bundle/CalciferBundle/Entity/Event.php index 93506ea..9985e33 100755 --- a/src/Hackspace/Bundle/CalciferBundle/Entity/Event.php +++ b/src/Hackspace/Bundle/CalciferBundle/Entity/Event.php @@ -5,17 +5,7 @@ namespace Hackspace\Bundle\CalciferBundle\Entity; use Doctrine\ORM\Mapping as ORM; -use Jsvrcek\ICS\Model\Description\Location As EventLocation; use Symfony\Component\Validator\Constraints\DateTime; -use Jsvrcek\ICS\Model\Calendar; -use Jsvrcek\ICS\Model\CalendarEvent; -use Jsvrcek\ICS\Model\Relationship\Attendee; -use Jsvrcek\ICS\Model\Relationship\Organizer; - -use Jsvrcek\ICS\Utility\Formatter; -use Jsvrcek\ICS\CalendarStream; -use Jsvrcek\ICS\CalendarExport; -use Jsvrcek\ICS\Model\Description\Geo; /** * Event @@ -144,32 +134,41 @@ class Event extends BaseEntity public function ConvertToCalendarEvent() { - $event = new CalendarEvent(); - $event->setStart($this->startdate); - if ($this->enddate instanceof \DateTime) - $event->setEnd($this->enddate); - $event->setSummary($this->summary); - $event->setUrl($this->url); - $uid = sprintf("https://%s/termine/%s",$_SERVER['HTTP_HOST'],$this->slug); - $event->setUid($uid); - if (count($this->tags) > 0) { - $categories = []; - foreach($this->tags as $tag) { - $event->addCategory($tag->name); - } + $categories = []; + foreach($this->tags as $tag) { + $categories[] = $tag->name; } + + if (array_key_exists('HTTP_HOST',$_SERVER)) { + $uid = sprintf("https://%s/termine/%s",$_SERVER['HTTP_HOST'],$this->slug); + } else { + $uid = sprintf("https://localhost/termine/%s",$this->slug); + } + + $event = [ + 'SUMMARY' => $this->summary, + 'DTSTART' => $this->startdate, + 'DESCRIPTION' => $this->description, + 'URL' => $this->url, + 'CATEGORIES' => $categories, + 'UID' => $uid, + ]; + if (!is_null($this->enddate)) + $event["DTEND"] = $this->enddate; + if ($this->location instanceof Location) { - $location = new EventLocation(); - $location->setName($this->location->name); - $event->setLocations([$location]); + $event["LOCATION"] = $this->location->name; if (\is_float($this->location->lon) && \is_float($this->location->lat)) { - $geo = new Geo(); - $geo->setLatitude($this->location->lat); - $geo->setLongitude($this->location->lon); - $event->setGeo($geo); + $event["GEO"] = [$this->location->lat, $this->location->lon]; } } - $event->setDescription($this->description); + if (!array_key_exists('HTTP_HOST',$_SERVER)) { + $dtstamp = new \DateTime(); + $dtstamp->setDate(2016,06,27); + $dtstamp->setTime(0,0,0); + $event['DTSTAMP'] = $dtstamp; + } + return $event; } } diff --git a/src/Hackspace/Bundle/CalciferBundle/Entity/RepeatingEventLogEntry.php b/src/Hackspace/Bundle/CalciferBundle/Entity/RepeatingEventLogEntry.php new file mode 100644 index 0000000..90b520c --- /dev/null +++ b/src/Hackspace/Bundle/CalciferBundle/Entity/RepeatingEventLogEntry.php @@ -0,0 +1,70 @@ + 0) { jQuery('input[type=datetime]').datetimepicker({lang: 'de', format: 'Y-m-d H:i'}); } @@ -109,85 +115,71 @@ $(document).ready(function() { if (card_selector.length > 0) { calcBoxSize(4); } + + $location = $('#event_location'); - $('#event_tags').selectize({ - create: true, - diacritics: true, - valueField: 'name', - labelField: 'name', - searchField: 'name', - render: { - item: function(data,escape){ - console.log([data,escape]); - return '
' + escape(data.name) + '
'; - } - }, - load: function(query, callback) { - if (!query.length) return callback(); - $.ajax({ - url: "/tags/", - type: "GET", - dataType: 'json', - data: { - q: query + if ($location.length == 1) { + $('#event_location') + .dropdown({ + minCharacters: 4, + allowAdditions: true, + apiSettings: { + url: '/orte/?q={query}' }, - error: function() { - callback(); + fields: { + remoteValues : 'results', // grouping for api results + values : 'values', // grouping for all dropdown values + name : 'name', // displayed dropdown text + value : 'name' // actual dropdown value }, - success: function(res) { - console.log(res); - callback(res); + templates: { + menu: function(response, fields) { + var + values = response[fields.values] || {}, + html = '' + ; + $.each(values, function(index, option) { + var item = option; + html += '
' + + '
'+ + '
' + + '' + item.name + + '
' + + '
'+ + (item.lon && item.lat ? 'lon: '+ escape(item.lon)+' lat: ' + escape(item.lat) : '')+ + (item.streetaddress ? ' Anschrift: ' + item.streetaddress + ' ' + item.streetnumber + ' ' + item.zipcode + ' ' + item.city : '')+ + '
'+ + (item.description ? '
' + item.description + '
' : '') + + '
'+ + '
'; + }); + return html; + } } - }); - } - }); + }) + ; + } - $('#event_location').selectize({ - create: true, - diacritics: true, - valueField: 'name', - labelField: 'name', - searchField: 'name', - maxItems: 1, - render: { - item: function(data,escape){ - console.log([data,escape]); - return '
' + escape(data.name) + '
'; - }, - option: function(item, escape) { - return '
' + - '
'+ - '
' + - '' + escape(item.name) + - '
' + - '
'+ - (item.lon && item.lat ? 'lon: '+ escape(item.lon)+' lat: ' + escape(item.lat) : '')+ - (item.streetaddress ? ' Anschrift: ' + item.streetaddress + ' ' + item.streetnumber + ' ' + item.zipcode + ' ' + item.city : '')+ - '
'+ - (item.description ? '
' + item.description + '
' : '') + - '
'+ - '
'; + $('#event_tags') + .dropdown({ + minCharacters: 2, + allowAdditions: true, + apiSettings: { + url: '/tags/?q={query}' + }, + fields: { + remoteValues: 'results', // grouping for api results + values: 'values', // grouping for all dropdown values + name: 'name', // displayed dropdown text + value: 'name' // actual dropdown value + }/*, + templates: { + label: function (value, text) { + return '' + text + ''; + } + }*/ } - }, - load: function(query, callback) { - if (!query.length) return callback(); - $.ajax({ - url: "/orte/", - type: "GET", - dataType: 'json', - data: { - q: query - }, - error: function() { - callback(); - }, - success: function(res) { - console.log(res); - callback(res); - } - }); - } - }); + ); if (view_map_selector.length == 1) { jQuery('.show_map').click(addGeoCoordinates); diff --git a/src/Hackspace/Bundle/CalciferBundle/Resources/views/Event/edit.html.twig b/src/Hackspace/Bundle/CalciferBundle/Resources/views/Event/edit.html.twig index e21f44a..972aa73 100755 --- a/src/Hackspace/Bundle/CalciferBundle/Resources/views/Event/edit.html.twig +++ b/src/Hackspace/Bundle/CalciferBundle/Resources/views/Event/edit.html.twig @@ -8,7 +8,6 @@ %} {% endstylesheets %} - {% endblock %} {% block javascripts %} @@ -19,7 +18,6 @@ %} {% endjavascripts %} - {% endblock %} {% block body -%} diff --git a/src/Hackspace/Bundle/CalciferBundle/Resources/views/Event/event_form.html.twig b/src/Hackspace/Bundle/CalciferBundle/Resources/views/Event/event_form.html.twig index c502296..da02369 100755 --- a/src/Hackspace/Bundle/CalciferBundle/Resources/views/Event/event_form.html.twig +++ b/src/Hackspace/Bundle/CalciferBundle/Resources/views/Event/event_form.html.twig @@ -80,16 +80,37 @@ -
+
- + @@ -123,11 +144,17 @@
- +
Du kannst hier kommasepariert
- + diff --git a/src/Hackspace/Bundle/CalciferBundle/Resources/views/RepeatingEvent/logIndex.html.twig b/src/Hackspace/Bundle/CalciferBundle/Resources/views/RepeatingEvent/logIndex.html.twig new file mode 100644 index 0000000..77a3df3 --- /dev/null +++ b/src/Hackspace/Bundle/CalciferBundle/Resources/views/RepeatingEvent/logIndex.html.twig @@ -0,0 +1,58 @@ +{% extends 'CalciferBundle::layout.html.twig' %} + +{% block css %} + {% stylesheets filter="compass" + "@CalciferBundle/Resources/assets/css/events.scss" %} + + {% endstylesheets %} +{% endblock %} + +{% block javascripts %} + {% javascripts + "@CalciferBundle/Resources/assets/js/events.js" %} + + {% endjavascripts %} +{% endblock %} + +{% block body -%} +
+

+ Logeinträge für Wiederholende Termine +

+
+ +
+ + + + + + + + + + + {% for entity in entities %} + + + + + + + {% endfor %} + +
Wiederholender TerminTerminTermin StartdatumTermin Enddatum
+ {{ entity.repeating_event.summary }} + + {{ entity.event.summary }} + + {{ entity.event_startdate.format('Y-m-d H:i') }} + + {% if entity.event_enddate %} + {{ entity.event_enddate.format('Y-m-d H:i') }} + {% endif %} +
+ +
+ +{% endblock %} diff --git a/src/Hackspace/Bundle/CalciferBundle/Resources/views/RepeatingEvent/repeating_patterns.html.twig b/src/Hackspace/Bundle/CalciferBundle/Resources/views/RepeatingEvent/repeating_patterns.html.twig index 0279b79..dcfe916 100755 --- a/src/Hackspace/Bundle/CalciferBundle/Resources/views/RepeatingEvent/repeating_patterns.html.twig +++ b/src/Hackspace/Bundle/CalciferBundle/Resources/views/RepeatingEvent/repeating_patterns.html.twig @@ -26,8 +26,8 @@

Es gibt 2 verschiedene Wiederholungsmustertypen. Feste Termine oder Interval Termine.

Der erste definiert sich dadurch das der Termin immer an einem bestimmten Tag im Monat passieren soll. - Das Hackspace-Plenum findet z.B. am „Zweiten Freitag des Monats“ statt. Die - Sicherheitssprechstunde findet immer am „Ersten Dienstag des Monats“ statt. Anhand dieser + Das Hackspace-Plenum findet z.B. am „Zweiter Freitag des Monats“ statt. Die + Sicherheitssprechstunde findet immer am „Erster Dienstag des Monats“ statt. Anhand dieser Beispiele sollte eigentlich klar sein wie dieses Wiederholungsmuster funktioniert:

An erster stelle definiert man die Woche: Erster, Zweiter, Dritter, Letzter (In manchen Fällen kann @@ -42,4 +42,4 @@

-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/src/Hackspace/Bundle/CalciferBundle/Resources/views/layout.html.twig b/src/Hackspace/Bundle/CalciferBundle/Resources/views/layout.html.twig index 00d49c0..6d3a327 100755 --- a/src/Hackspace/Bundle/CalciferBundle/Resources/views/layout.html.twig +++ b/src/Hackspace/Bundle/CalciferBundle/Resources/views/layout.html.twig @@ -8,7 +8,6 @@ {% stylesheets filter="compass" "@CalciferBundle/Resources/assets/css/main.scss" - "css/custom.scss" %} {% endstylesheets %} @@ -19,15 +18,15 @@ -{% include "CalciferBundle::navigation.html.twig" %} +
+ {% include "CalciferBundle::navigation.html.twig" %} +
{% block body %}{% endblock %}
- - {% block javascripts %}{% endblock %} - \ No newline at end of file + diff --git a/src/Hackspace/Bundle/CalciferBundle/Resources/views/navigation.html.twig b/src/Hackspace/Bundle/CalciferBundle/Resources/views/navigation.html.twig index 8b92d06..ecf70cb 100755 --- a/src/Hackspace/Bundle/CalciferBundle/Resources/views/navigation.html.twig +++ b/src/Hackspace/Bundle/CalciferBundle/Resources/views/navigation.html.twig @@ -1,8 +1,7 @@ -
\ No newline at end of file + + diff --git a/src/Hackspace/Bundle/CalciferBundle/Tests/Controller/DefaultControllerTest.php b/src/Hackspace/Bundle/CalciferBundle/Tests/Controller/DefaultControllerTest.php deleted file mode 100644 index 63c7eb2..0000000 --- a/src/Hackspace/Bundle/CalciferBundle/Tests/Controller/DefaultControllerTest.php +++ /dev/null @@ -1,17 +0,0 @@ -request('GET', '/hello/Fabien'); - - $this->assertTrue($crawler->filter('html:contains("Hello Fabien")')->count() > 0); - } -} diff --git a/src/Hackspace/Bundle/CalciferBundle/Tests/Controller/EventControllerTest.php b/src/Hackspace/Bundle/CalciferBundle/Tests/Controller/EventControllerTest.php index c0b0ab0..9e03bc2 100644 --- a/src/Hackspace/Bundle/CalciferBundle/Tests/Controller/EventControllerTest.php +++ b/src/Hackspace/Bundle/CalciferBundle/Tests/Controller/EventControllerTest.php @@ -2,54 +2,191 @@ namespace Hackspace\Bundle\CalciferBundle\Tests\Controller; -use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; +use Doctrine\Bundle\DoctrineBundle\Registry; +use Doctrine\ORM\Decorator\EntityManagerDecorator; +use Doctrine\ORM\EntityRepository; +use Hackspace\Bundle\CalciferBundle\Entity\Event; +use Liip\FunctionalTestBundle\Test\WebTestCase; class EventControllerTest extends WebTestCase { - /* - public function testCompleteScenario() + /** @var \DateTime */ + private $now = null; + + /** @var \DateTime */ + private $startdate = null; + + /** @var \DateTime */ + private $enddate = null; + + const dateformat = "Y-m-d H:i"; + + /** + * EventControllerTest constructor. + */ + public function __construct($name = null, array $data = [], $dataName = '') { - // Create a new client to browse the application - $client = static::createClient(); + parent::__construct($name,$data,$dataName); + $this->now = new \DateTime(); + $this->now->setTime(0,0,0); - // Create a new entry in the database - $crawler = $client->request('GET', '//'); - $this->assertEquals(200, $client->getResponse()->getStatusCode(), "Unexpected HTTP status code for GET //"); - $crawler = $client->click($crawler->selectLink('Create a new entry')->link()); + $tz = new \DateTimeZone("Europe/Berlin"); + $this->now->setTimezone($tz); - // Fill in the form and submit it - $form = $crawler->selectButton('Create')->form(array( - 'hackspace_bundle_calciferbundle_event[field_name]' => 'Test', - // ... other fields to fill - )); + $this->startdate = clone $this->now; + $this->startdate->add(new \DateInterval("P1D")); + $this->enddate = clone $this->now; + $this->enddate->add(new \DateInterval("P1DT2H")); - $client->submit($form); - $crawler = $client->followRedirect(); - - // Check data in the show view - $this->assertGreaterThan(0, $crawler->filter('td:contains("Test")')->count(), 'Missing element td:contains("Test")'); - - // Edit the entity - $crawler = $client->click($crawler->selectLink('Edit')->link()); - - $form = $crawler->selectButton('Update')->form(array( - 'hackspace_bundle_calciferbundle_event[field_name]' => 'Foo', - // ... other fields to fill - )); - - $client->submit($form); - $crawler = $client->followRedirect(); - - // Check the element contains an attribute with value equals "Foo" - $this->assertGreaterThan(0, $crawler->filter('[value="Foo"]')->count(), 'Missing element [value="Foo"]'); - - // Delete the entity - $client->submit($crawler->selectButton('Delete')->form()); - $crawler = $client->followRedirect(); - - // Check the entity has been delete on the list - $this->assertNotRegExp('/Foo/', $client->getResponse()->getContent()); } - */ + public static function runCommandStatic($name) { + $command = sprintf("php app/console %s", $name); + $output = ""; + exec($command,$output); + return $output; + } + + public static function setUpBeforeClass() + { + EventControllerTest::runCommandStatic("doctrine:database:drop --force --env=test"); + EventControllerTest::runCommandStatic("doctrine:database:create --env=test"); + EventControllerTest::runCommandStatic("doctrine:schema:create --env=test"); + } + + + public function testEmptyListing() { + $client = static::makeClient(); + $crawler = $client->request('GET', '/'); + $this->assertStatusCode(200, $client); + } + + public function testPostEventForm() + { + $client = static::makeClient(); + + $url = $client->getContainer()->get('router')->generate('_new'); + + $crawler = $client->request('GET', $url); + $this->assertStatusCode(200, $client); + + $form = $crawler->selectButton('save')->form(); + + + + + $form['startdate'] = $this->startdate->format(EventControllerTest::dateformat); + $form['enddate'] = $this->enddate->format(EventControllerTest::dateformat); + $form['summary'] = "Testevent"; + $form['url'] = "https://calcifer.datenknoten.me"; + $form["location"] = "Krautspace"; + $form["location_lat"] = 1; + $form["location_lon"] = 2; + $form["tags"] = "foo,bar,krautspace"; + $form["description"] = "Testdescription"; + + $crawler = $client->submit($form); + + $this->assertStatusCode(302, $client); + + $target = $client->getResponse()->headers->get('location'); + + $slug = explode("/",$target)[2]; + + $this->assertGreaterThan(0,strlen($slug)); + + /** @var EntityManagerDecorator $em */ + $em = $this->getContainer()->get('doctrine')->getManager(); + + /** @var EntityRepository $repo */ + $repo = $em->getRepository('CalciferBundle:Event'); + + $qb = $em->createQueryBuilder(); + $qb->select(array('e')) + ->from('CalciferBundle:Event', 'e') + ->innerJoin('e.tags','t') + ->innerJoin('e.location','l') + ->where('e.slug>= :slug') + ->setParameter('slug', $slug); + $entities = $qb->getQuery()->execute(); + + $this->assertCount(1,$entities); + + /** @var Event $entity */ + $entity = $entities[0]; + + $this->assertInstanceOf('Hackspace\Bundle\CalciferBundle\Entity\Event', $entity); + + $this->assertTrue($this->startdate == $entity->startdate, "Startdate equal"); + $this->assertTrue($this->enddate == $entity->enddate, "Enddate equal"); + $this->assertTrue($form["summary"]->getValue() == $entity->summary, "Summary equal"); + $this->assertTrue($form["url"]->getValue() == $entity->url, "URL equal"); + $this->assertTrue($form["description"]->getValue() == $entity->description, "Description equal"); + + $tags = explode(",",$form["tags"]->getValue()); + foreach($entity->tags as $tag) { + $this->assertTrue(in_array($tag->name,$tags)); + } + + $this->assertTrue($form["location"]->getValue() == $entity->location->name); + $this->assertTrue($form["location_lat"]->getValue() == $entity->location->lat); + $this->assertTrue($form["location_lon"]->getValue() == $entity->location->lon); + + $em->close(); + + /** @var Registry $doc */ + $doc = $this->getContainer()->get('doctrine'); + + foreach($doc->getConnections() as $connection) { + $connection->close(); + } + } + + public function testICS() { + + $client = static::makeClient(); + + // events_ics + + $url = $client->getContainer()->get('router')->generate('events_ics'); + + $crawler = $client->request('GET', $url); + $this->assertStatusCode(200, $client); + + $test_doc = <<startdate->setTimezone($new_tz); + $this->enddate->setTimezone($new_tz); + $start = $this->startdate->format("Ymd") . "T" . $this->startdate->format("His") . "Z"; + $end = $this->enddate->format("Ymd") . "T" . $this->enddate->format("His") . "Z"; + + $test_doc = sprintf($test_doc,$start,$end); + + $content = $client->getResponse()->getContent(); + + $content = preg_replace('~\R~u', "\r\n", $content); + $test_doc = preg_replace('~\R~u', "\r\n", $test_doc); + + $this->assertGreaterThan(0,strlen($content)); + $this->assertEquals($test_doc, $content); + } } diff --git a/src/Hackspace/Bundle/CalciferBundle/libs/CalciferCaldavBackend.php b/src/Hackspace/Bundle/CalciferBundle/libs/CalciferCaldavBackend.php deleted file mode 100644 index f2003f8..0000000 --- a/src/Hackspace/Bundle/CalciferBundle/libs/CalciferCaldavBackend.php +++ /dev/null @@ -1,312 +0,0 @@ -controller = $controller; - } - - /** - * Returns a list of calendars for a principal. - * - * Every project is an array with the following keys: - * * id, a unique id that will be used by other functions to modify the - * calendar. This can be the same as the uri or a database key. - * * uri, which the basename of the uri with which the calendar is - * accessed. - * * principaluri. The owner of the calendar. Almost always the same as - * principalUri passed to this method. - * - * Furthermore it can contain webdav properties in clark notation. A very - * common one is '{DAV:}displayname'. - * - * Many clients also require: - * {urn:ietf:params:xml:ns:caldav}supported-calendar-component-set - * For this property, you can just return an instance of - * Sabre\CalDAV\Property\SupportedCalendarComponentSet. - * - * @param string $principalUri - * @return array - */ - public function getCalendarsForUser($principalUri) - { - return [[ - 'id' => 1, - 'uri' => 'calendar', - 'principaluri' => '/caldav/calcifer', - ]]; - } - - /** - * Creates a new calendar for a principal. - * - * If the creation was a success, an id must be returned that can be used to reference - * this calendar in other methods, such as updateCalendar. - * - * @param string $principalUri - * @param string $calendarUri - * @param array $properties - * @return void - */ - public function createCalendar($principalUri, $calendarUri, array $properties) - { - throw new \Exception('Not implemented'); - } - - /** - * Delete a calendar and all it's objects - * - * @param mixed $calendarId - * @return void - */ - public function deleteCalendar($calendarId) - { - throw new \Exception('Not implemented'); - } - - private function FormatCalendarEvent(CalendarEvent $event) - { - $stream = new CalendarStream(); - $formatter = new Formatter(); - $stream->addItem('BEGIN:VEVENT') - ->addItem('UID:' . $event->getUid()) - ->addItem('DTSTART:' . $formatter->getFormattedUTCDateTime($event->getStart())) - ->addItem('DTEND:' . $formatter->getFormattedUTCDateTime($event->getEnd())) - ->addItem('SUMMARY:' . $event->getSummary()) - ->addItem('DESCRIPTION:' . $event->getDescription()); - - if ($event->getClass()) - $stream->addItem('CLASS:' . $event->getClass()); - - /* @var $location Location */ - foreach ($event->getLocations() as $location) { - $stream - ->addItem('LOCATION' . $location->getUri() . $location->getLanguage() . ':' . $location->getName()); - } - - if ($event->getGeo()) - $stream->addItem('GEO:' . $event->getGeo()->getLatitude() . ';' . $event->getGeo()->getLongitude()); - - if ($event->getUrl()) - $stream->addItem('URL:' . $event->getUrl()); - - if ($event->getCreated()) - $stream->addItem('CREATED:' . $formatter->getFormattedUTCDateTime($event->getCreated())); - - if ($event->getLastModified()) - $stream->addItem('LAST-MODIFIED:' . $formatter->getFormattedUTCDateTime($event->getLastModified())); - - foreach ($event->getAttendees() as $attendee) { - $stream->addItem($attendee->__toString()); - } - - if ($event->getOrganizer()) - $stream->addItem($event->getOrganizer()->__toString()); - - $stream->addItem('END:VEVENT'); - - return $stream->getStream(); - } - - private function formatEvent(Event $event) - { - /** @var CalendarEvent $calendar_event */ - $calendar_event = $event->ConvertToCalendarEvent(); - $calendar = new Calendar(); - $calendar->setProdId('-//My Company//Cool Calendar App//EN'); - $calendar->addEvent($calendar_event); - $calendarExport = new CalendarExport(new CalendarStream, new Formatter()); - $calendarExport->addCalendar($calendar); - - //output .ics formatted text - $calendar_data = $calendarExport->getStream(); - - - $event_data = [ - 'id' => $event->id, - 'uri' => $event->slug . '.ics', - 'lastmodified' => $event->startdate, - 'etag' => '"' . sha1($calendar_data) . '"', - 'calendarid' => 1, - 'calendardata' => $calendar_data, - 'size' => strlen($calendar_data), - 'component' => 'VEVENT', - ]; - return $event_data; - } - - /** - * Returns all calendar objects within a calendar. - * - * Every item contains an array with the following keys: - * * id - unique identifier which will be used for subsequent updates - * * calendardata - The iCalendar-compatible calendar data - * * uri - a unique key which will be used to construct the uri. This can - * be any arbitrary string, but making sure it ends with '.ics' is a - * good idea. This is only the basename, or filename, not the full - * path. - * * lastmodified - a timestamp of the last modification time - * * etag - An arbitrary string, surrounded by double-quotes. (e.g.: - * '"abcdef"') - * * calendarid - The calendarid as it was passed to this function. - * * size - The size of the calendar objects, in bytes. - * * component - optional, a string containing the type of object, such - * as 'vevent' or 'vtodo'. If specified, this will be used to populate - * the Content-Type header. - * - * Note that the etag is optional, but it's highly encouraged to return for - * speed reasons. - * - * The calendardata is also optional. If it's not returned - * 'getCalendarObject' will be called later, which *is* expected to return - * calendardata. - * - * If neither etag or size are specified, the calendardata will be - * used/fetched to determine these numbers. If both are specified the - * amount of times this is needed is reduced by a great degree. - * - * @param mixed $calendarId - * @return array - */ - public function getCalendarObjects($calendarId) - { - /** @var EntityManager $em */ - $em = $this->controller->getDoctrine()->getManager(); - - $now = new \DateTime(); - $now->setTime(0, 0, 0); - /** @var QueryBuilder $qb */ - $qb = $em->createQueryBuilder(); - $qb->select(array('e')) - ->from('CalciferBundle:Event', 'e') - ->orderBy('e.startdate'); - $entities = $qb->getQuery()->execute(); - - if (count($entities) > 0) { - $events = []; - foreach ($entities as $event) { - /** @var Event $event */ - $events[] = $this->formatEvent($event); - } - return $events; - } - } - - /** - * Returns information from a single calendar object, based on it's object - * uri. - * - * The object uri is only the basename, or filename and not a full path. - * - * The returned array must have the same keys as getCalendarObjects. The - * 'calendardata' object is required here though, while it's not required - * for getCalendarObjects. - * - * This method must return null if the object did not exist. - * - * @param mixed $calendarId - * @param string $objectUri - * @return array|null - */ - public function getCalendarObject($calendarId, $objectUri) - { - /** @var EntityManager $em */ - $em = $this->controller->getDoctrine()->getManager(); - - /** @var EntityRepository $repo */ - $repo = $em->getRepository('CalciferBundle:Event'); - - /** @var Event $entity */ - $event = $repo->findOneBy(['slug' => substr($objectUri,0,strlen($objectUri) - 4)]); - - if (!($event instanceof Event)) { - throw $this->controller->createNotFoundException('Unable to find Event entity.'); - } - - return $this->formatEvent($event); - } - - /** - * Creates a new calendar object. - * - * The object uri is only the basename, or filename and not a full path. - * - * It is possible return an etag from this function, which will be used in - * the response to this PUT request. Note that the ETag must be surrounded - * by double-quotes. - * - * However, you should only really return this ETag if you don't mangle the - * calendar-data. If the result of a subsequent GET to this object is not - * the exact same as this request body, you should omit the ETag. - * - * @param mixed $calendarId - * @param string $objectUri - * @param string $calendarData - * @return string|null - */ - public function createCalendarObject($calendarId, $objectUri, $calendarData) - { - // TODO: Implement createCalendarObject() method. - } - - /** - * Updates an existing calendarobject, based on it's uri. - * - * The object uri is only the basename, or filename and not a full path. - * - * It is possible return an etag from this function, which will be used in - * the response to this PUT request. Note that the ETag must be surrounded - * by double-quotes. - * - * However, you should only really return this ETag if you don't mangle the - * calendar-data. If the result of a subsequent GET to this object is not - * the exact same as this request body, you should omit the ETag. - * - * @param mixed $calendarId - * @param string $objectUri - * @param string $calendarData - * @return string|null - */ - public function updateCalendarObject($calendarId, $objectUri, $calendarData) - { - throw new \Exception('Not implemented'); - } - - /** - * Deletes an existing calendar object. - * - * The object uri is only the basename, or filename and not a full path. - * - * @param mixed $calendarId - * @param string $objectUri - * @return void - */ - public function deleteCalendarObject($calendarId, $objectUri) - { - throw new \Exception('Not implemented'); - } -} \ No newline at end of file diff --git a/src/Hackspace/Bundle/CalciferBundle/libs/CalciferPrincipalBackend.php b/src/Hackspace/Bundle/CalciferBundle/libs/CalciferPrincipalBackend.php deleted file mode 100644 index aecf15b..0000000 --- a/src/Hackspace/Bundle/CalciferBundle/libs/CalciferPrincipalBackend.php +++ /dev/null @@ -1,158 +0,0 @@ - 'calcifer', - '{http://sabredav.org/ns}email-address' => 'calcifer@example.com', - 'uri' => '/caldav/calcifer', - ] - ]; - } - - /** - * Returns a specific principal, specified by it's path. - * The returned structure should be the exact same as from - * getPrincipalsByPrefix. - * - * @param string $path - * @return array - */ - function getPrincipalByPath($path) - { - return [ - '{DAV:}displayname' => 'calcifer', - '{http://sabredav.org/ns}email-address' => 'calcifer@example.com', - 'uri' => '/caldav/calcifer', - ]; - } - - /** - * Updates one ore more webdav properties on a principal. - * - * The list of mutations is stored in a Sabre\DAV\PropPatch object. - * To do the actual updates, you must tell this object which properties - * you're going to process with the handle() method. - * - * Calling the handle method is like telling the PropPatch object "I - * promise I can handle updating this property". - * - * Read the PropPatch documenation for more info and examples. - * - * @param string $path - * @param \Sabre\DAV\PropPatch $propPatch - * @return void - */ - function updatePrincipal($path, \Sabre\DAV\PropPatch $propPatch) - { - throw new \Exception('Not implemented'); - } - - /** - * This method is used to search for principals matching a set of - * properties. - * - * This search is specifically used by RFC3744's principal-property-search - * REPORT. You should at least allow searching on - * http://sabredav.org/ns}email-address. - * - * The actual search should be a unicode-non-case-sensitive search. The - * keys in searchProperties are the WebDAV property names, while the values - * are the property values to search on. - * - * If multiple properties are being searched on, the search should be - * AND'ed. - * - * This method should simply return an array with full principal uri's. - * - * If somebody attempted to search on a property the backend does not - * support, you should simply return 0 results. - * - * You can also just return 0 results if you choose to not support - * searching at all, but keep in mind that this may stop certain features - * from working. - * - * @param string $prefixPath - * @param array $searchProperties - * @return array - */ - function searchPrincipals($prefixPath, array $searchProperties, $test = 'allof') - { - return [ - [ - '{DAV:}displayname' => 'calcifer', - '{http://sabredav.org/ns}email-address' => 'calcifer@example.com', - 'uri' => '/caldav/calcifer', - ] - ]; - } - - /** - * Returns the list of members for a group-principal - * - * @param string $principal - * @return array - */ - function getGroupMemberSet($principal) - { - throw new \Exception('Not implemented'); - } - - /** - * Returns the list of groups a principal is a member of - * - * @param string $principal - * @return array - */ - function getGroupMembership($principal) - { - throw new \Exception('Not implemented'); - } - - /** - * Updates the list of group members for a group principal. - * - * The principals should be passed as a list of uri's. - * - * @param string $principal - * @param array $members - * @return void - */ - function setGroupMemberSet($principal, array $members) - { - throw new \Exception('Not implemented'); - } -} \ No newline at end of file diff --git a/web/config.php b/web/config.php index 162acfc..74d052a 100644 --- a/web/config.php +++ b/web/config.php @@ -74,7 +74,9 @@ $minorProblems = $symfonyRequirements->getFailedRecommendations();

Major problems have been detected and must be fixed before continuing:

    -
  1. getHelpHtml() ?>
  2. +
  3. getTestMessage() ?> +

    getHelpHtml() ?>

    +
@@ -87,7 +89,9 @@ $minorProblems = $symfonyRequirements->getFailedRecommendations();

    -
  1. getHelpHtml() ?>
  2. +
  3. getTestMessage() ?> +

    getHelpHtml() ?>

    +
diff --git a/web/semantic/.csscomb.json b/web/semantic/.csscomb.json deleted file mode 100644 index 86db560..0000000 --- a/web/semantic/.csscomb.json +++ /dev/null @@ -1,322 +0,0 @@ -{ - "remove-empty-rulesets": true, - "always-semicolon": true, - "color-case": "upper", - "block-indent": " ", - "color-shorthand": false, - "element-case": "lower", - "leading-zero": true, - "space-after-colon": " ", - "space-before-combinator": " ", - "space-after-combinator": " ", - "space-between-declarations": "\n", - "space-before-opening-brace": " ", - "space-after-opening-brace": "\n", - "space-after-selector-delimiter": "\n", - "space-before-selector-delimiter": "", - "space-before-closing-brace": "\n", - "strip-spaces": true, - "tab-size": true, - "vendor-prefix-align": true, - "sort-order": [ - [ - "display", - "visibility", - "float", - "clear", - "overflow", - "overflow-x", - "overflow-y", - "-webkit-box-sizing", - "-moz-box-sizing", - "box-sizing", - "-ms-overflow-x", - "-ms-overflow-y", - "clip", - "zoom", - "flex-direction", - "flex-order", - "flex-pack", - "flex-align" - ], - [ - "position", - "z-index", - "top", - "right", - "bottom", - "left" - ], - [ - "font", - "font-family", - "font-size", - "font-weight", - "font-style", - "font-variant", - "font-size-adjust", - "font-stretch", - "font-effect", - "font-emphasize", - "font-emphasize-position", - "font-emphasize-style", - "font-smooth", - "line-height" - ], - [ - "width", - "min-width", - "max-width", - "height", - "min-height", - "max-height", - "margin", - "margin-top", - "margin-right", - "margin-bottom", - "margin-left", - "padding", - "padding-top", - "padding-right", - "padding-bottom", - "padding-left" - ], - [ - "table-layout", - "empty-cells", - "caption-side", - "border-spacing", - "border-collapse", - "list-style", - "list-style-position", - "list-style-type", - "list-style-image" - ], - [ - "opacity", - "filter:progid:DXImageTransform.Microsoft.Alpha(Opacity", - "-ms-filter:\\'progid:DXImageTransform.Microsoft.Alpha", - "-ms-interpolation-mode", - "color", - "border", - "border-width", - "border-style", - "border-color", - "border-top", - "border-top-width", - "border-top-style", - "border-top-color", - "border-right", - "border-right-width", - "border-right-style", - "border-right-color", - "border-bottom", - "border-bottom-width", - "border-bottom-style", - "border-bottom-color", - "border-left", - "border-left-width", - "border-left-style", - "border-left-color", - "-webkit-border-radius", - "-moz-border-radius", - "border-radius", - "-webkit-border-top-left-radius", - "-moz-border-radius-topleft", - "border-top-left-radius", - "-webkit-border-top-right-radius", - "-moz-border-radius-topright", - "border-top-right-radius", - "-webkit-border-bottom-right-radius", - "-moz-border-radius-bottomright", - "border-bottom-right-radius", - "-webkit-border-bottom-left-radius", - "-moz-border-radius-bottomleft", - "border-bottom-left-radius", - "-webkit-border-image", - "-moz-border-image", - "-o-border-image", - "border-image", - "-webkit-border-image-source", - "-moz-border-image-source", - "-o-border-image-source", - "border-image-source", - "-webkit-border-image-slice", - "-moz-border-image-slice", - "-o-border-image-slice", - "border-image-slice", - "-webkit-border-image-width", - "-moz-border-image-width", - "-o-border-image-width", - "border-image-width", - "-webkit-border-image-outset", - "-moz-border-image-outset", - "-o-border-image-outset", - "border-image-outset", - "-webkit-border-image-repeat", - "-moz-border-image-repeat", - "-o-border-image-repeat", - "border-image-repeat", - "outline", - "outline-width", - "outline-style", - "outline-color", - "outline-offset", - "background", - "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader", - "background-color", - "background-image", - "background-repeat", - "background-attachment", - "background-position", - "background-position-x", - "-ms-background-position-x", - "background-position-y", - "-ms-background-position-y", - "-webkit-background-clip", - "-moz-background-clip", - "background-clip", - "background-origin", - "-webkit-background-size", - "-moz-background-size", - "-o-background-size", - "background-size", - "box-decoration-break", - "-webkit-box-shadow", - "-moz-box-shadow", - "box-shadow", - "filter:progid:DXImageTransform.Microsoft.gradient", - "-ms-filter:\\'progid:DXImageTransform.Microsoft.gradient", - "text-shadow" - ], - - [ - "content", - "quotes", - "counter-reset", - "counter-increment", - "resize", - "cursor", - "-webkit-user-select", - "-moz-user-select", - "-ms-user-select", - "user-select", - "nav-index", - "nav-up", - "nav-right", - "nav-down", - "nav-left", - "-webkit-transition", - "-moz-transition", - "-ms-transition", - "-o-transition", - "transition", - "-webkit-transition-delay", - "-moz-transition-delay", - "-ms-transition-delay", - "-o-transition-delay", - "transition-delay", - "-webkit-transition-timing-function", - "-moz-transition-timing-function", - "-ms-transition-timing-function", - "-o-transition-timing-function", - "transition-timing-function", - "-webkit-transition-duration", - "-moz-transition-duration", - "-ms-transition-duration", - "-o-transition-duration", - "transition-duration", - "-webkit-transition-property", - "-moz-transition-property", - "-ms-transition-property", - "-o-transition-property", - "transition-property", - "-webkit-transform", - "-moz-transform", - "-ms-transform", - "-o-transform", - "transform", - "-webkit-transform-origin", - "-moz-transform-origin", - "-ms-transform-origin", - "-o-transform-origin", - "transform-origin", - "-webkit-animation", - "-moz-animation", - "-ms-animation", - "-o-animation", - "animation", - "-webkit-animation-name", - "-moz-animation-name", - "-ms-animation-name", - "-o-animation-name", - "animation-name", - "-webkit-animation-duration", - "-moz-animation-duration", - "-ms-animation-duration", - "-o-animation-duration", - "animation-duration", - "-webkit-animation-play-state", - "-moz-animation-play-state", - "-ms-animation-play-state", - "-o-animation-play-state", - "animation-play-state", - "-webkit-animation-timing-function", - "-moz-animation-timing-function", - "-ms-animation-timing-function", - "-o-animation-timing-function", - "animation-timing-function", - "-webkit-animation-delay", - "-moz-animation-delay", - "-ms-animation-delay", - "-o-animation-delay", - "animation-delay", - "-webkit-animation-iteration-count", - "-moz-animation-iteration-count", - "-ms-animation-iteration-count", - "-o-animation-iteration-count", - "animation-iteration-count", - "-webkit-animation-direction", - "-moz-animation-direction", - "-ms-animation-direction", - "-o-animation-direction", - "animation-direction", - "text-align", - "-webkit-text-align-last", - "-moz-text-align-last", - "-ms-text-align-last", - "text-align-last", - "vertical-align", - "white-space", - "text-decoration", - "text-emphasis", - "text-emphasis-color", - "text-emphasis-style", - "text-emphasis-position", - "text-indent", - "-ms-text-justify", - "text-justify", - "letter-spacing", - "word-spacing", - "-ms-writing-mode", - "text-outline", - "text-transform", - "text-wrap", - "text-overflow", - "-ms-text-overflow", - "text-overflow-ellipsis", - "text-overflow-mode", - "-ms-word-wrap", - "word-wrap", - "word-break", - "-ms-word-break", - "-moz-tab-size", - "-o-tab-size", - "tab-size", - "-webkit-hyphens", - "-moz-hyphens", - "hyphens", - "pointer-events" - ] - ] -} \ No newline at end of file diff --git a/web/semantic/.csslintrc b/web/semantic/.csslintrc deleted file mode 100644 index 8786e82..0000000 --- a/web/semantic/.csslintrc +++ /dev/null @@ -1,18 +0,0 @@ -{ - "vendor-prefix" : true, - "duplicate-properties" : true, - "display-property-grouping" : true, - "empty-rules" : true, - - "adjoining-classes" : false, - "box-model" : false, - "compatible-vendor-prefixes" : false, - "box-sizing" : false, - "duplicate-background-images" : false, - "floats" : false, - "important" : false, - "overqualified-elements" : false, - "rules-count" : false, - "shorthand" : false, - "zero-units" : false -} \ No newline at end of file diff --git a/web/semantic/.gitignore b/web/semantic/.gitignore deleted file mode 100644 index f4b4857..0000000 --- a/web/semantic/.gitignore +++ /dev/null @@ -1,36 +0,0 @@ -node_modules/ -test/coverage/ -coverage/ -src/**/site/ -theme.config -semantic.json -tasks/**/oauth.js - -# Numerous always-ignore extensions -*.diff -*.err -*.orig -*.log -*.rej -*.swo -*.swp -*.zip -*.vi -*~ -*.sass-cache -*.ruby-version - -# OS or Editor folders -.DS_Store -._* -Thumbs.db -.cache -.project -.settings -.tmproj -.docpad.db -*.esproj -nbproject -*.sublime-project -*.sublime-workspace -.build* diff --git a/web/semantic/.jshintrc b/web/semantic/.jshintrc deleted file mode 100644 index d238639..0000000 --- a/web/semantic/.jshintrc +++ /dev/null @@ -1,38 +0,0 @@ -{ - - "globals": { - "$" : true, - "afterEach" : true, - "AnimatedPNG" : true, - "beforeEach" : true, - "console" : true, - "describe" : true, - "expect" : true, - "it" : true, - "jQuery" : true, - "loadFixtures" : true, - "module" : true, - "requestAnimationFrame" : true, - "require" : true, - "semantic" : true - }, - - "debug" : false, - "devel" : true, - - "browser" : true, - "curly" : true, - "immed" : true, - "latedef" : true, - "loopfunc" : true, - "noarg" : true, - "undef" : true, - "sub" : true, - "loopfunc" : true, - - "laxbreak" : true, - "evil" : true, - "indent" : false, - "trailing" : false - -} \ No newline at end of file diff --git a/web/semantic/CONTRIBUTING.md b/web/semantic/CONTRIBUTING.md index 3e960ad..b10264c 100644 --- a/web/semantic/CONTRIBUTING.md +++ b/web/semantic/CONTRIBUTING.md @@ -1,16 +1,38 @@ -# Contributing - -### Bugs & Issues - -Please submit any bugs you encounter when using the library to our [Github Issues Tracker](https://github.com/Semantic-Org/Semantic-UI/issues). - -When submiting a bug report, please include a set of steps to reproduce the issue and any related information, browser, OS etc. If we can't see the issue then it will make solving things much more difficult. - -Please create a fork of this [jsfiddle](http://jsfiddle.net/efp8z6Ln/) to demonstrate bugs. - -### Pull Requests - -Anyone can jump on the issues board and grab off bugs to fix. This is probably the best way to become a contributor to Semantic. Be sure to adhere to the style guides when submitting code. - -* [Create a Pull Request](https://github.com/Semantic-Org/Semantic-UI/compare) -* [View Open Issues](https://github.com/Semantic-Org/Semantic-UI/issues) +# Contributing to Semantic UI + +### Usage Questions + +Questions about usage should be asked on [the ProjectTalk message board](http://www.projecttalk.io/boards/Semantic-Org%2FSemantic-UI), [StackOverflow](http://stackoverflow.com/questions/tagged/semantic-ui) or [Gitter](https://gitter.im/Semantic-Org/Semantic-UI). + +Examples of usage questions +* *Why isnt my code working?* +* *Can Semantic UI do this?* + +Once you receive feedback through community channels you may find your question is actually a bug. At this point it's a good idea to submit it as a bug report. Just keep in mind the following suggestions. + +### Bugs & Issues + +**Please create a fork of this [jsfiddle](http://jsfiddle.net/efp8z6Ln/) to demonstrate bugs.** + +[Github Issues Tracker](https://github.com/Semantic-Org/Semantic-UI/issues) is used to track all upcoming milestones and changes to the project. + +When submiting a bug report, please include a set of steps to reproduce the issue and any related information, browser, OS etc. If we can't see the issue then it will make solving things much more difficult. + + +If your bug uses a third party framework like Ember, Meteor, or Angular. Be sure to submit the issue to their respective issues boards. If you are confident the bug is part of the 'vanilla' SUI release, keep in mind not all maintainers are familiar with all framework and a simple test case is greatly appreciated. + +If your bug is reproduced by a maintainer it will be asssigned the [`confirmed bug`](https://github.com/Semantic-Org/Semantic-UI/issues?q=is%3Aopen+is%3Aissue+label%3A%22Confirmed+Bug%22) tag. Browsing this tag is a good way to keep track of known issues with SUI. + + +### Upcoming Releases & Roadmap + +As bugs and features are triaged they will be assigned to milestones. The best indication of when a change will land is to check the date on the [upcoming milestones](https://github.com/Semantic-Org/Semantic-UI/milestones) page. + +### Pull Requests + +**All pull requests should be merged into the `next` branch.** + +Anyone can jump on the issues board and grab off bugs to fix. This is probably the best way to become a contributor to Semantic. Be sure to adhere to the style guides when submitting code. + +* [Create a Pull Request](https://github.com/Semantic-Org/Semantic-UI/compare) +* [View Open Issues](https://github.com/Semantic-Org/Semantic-UI/issues) diff --git a/web/semantic/README.md b/web/semantic/README.md index f44eafb..25bf39b 100644 --- a/web/semantic/README.md +++ b/web/semantic/README.md @@ -4,6 +4,9 @@ [![Join the chat at https://gitter.im/Semantic-Org/Semantic-UI](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Semantic-Org/Semantic-UI?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![ProjectTalk Messageboard](http://www.projecttalk.io/images/gh_badge-3e578a9f437f841de7446bab9a49d103.svg?vsn=d)] +(http://www.projecttalk.io/boards/Semantic-Org%2FSemantic-UI?utm_campaign=gh-badge&utm_medium=badge&utm_source=github) + Semantic is a UI framework designed for theming. Key Features @@ -13,6 +16,12 @@ Key Features * Built with EM values for responsive design * Flexbox friendly +## 2.1 Release + +Semantic UI `2.1` is now available. Read up on [what's new](http://www.semantic-ui.com/introduction/new.html) in the docs. + +Migration info from `1.x` can be found in the [2.0 release notes](https://github.com/Semantic-Org/Semantic-UI/blob/master/RELEASE-NOTES.md#version-200---march-xx-2015) + ## Install #### Recommended Install @@ -20,38 +29,54 @@ Key Features npm install semantic-ui # Use themes, import build/watch tasks into your own gulpfile. ``` +Semantic UI includes an interactive installer to help setup your project ![Getting Started](https://dl.dropboxusercontent.com/u/2657007/install.gif) -For details on how work with Semantic theming please [read our customization guide](http://learnsemantic.com/developing/customizing.html) on [LearnSemantic.com](http://learnsemantic.com/) +* For more details on setup visit our [getting started guide](http://semantic-ui.com/introduction/getting-started.html). +* To learn more about theming please read our [theming guide](http://www.semantic-ui.com/usage/theming.html) #### Additional Versions -Environment | Install Script | Repo ---- | --- | --- | +Environment | Install Script | Repo +--- | --- | --- | CSS Only | `npm install semantic-ui-css` | [CSS Repo](https://github.com/Semantic-Org/Semantic-UI-CSS) [LESS](https://github.com/less/less.js/) Only | `npm install semantic-ui-less` | [LESS Repo](https://github.com/Semantic-Org/Semantic-UI-LESS) +[LESS](https://github.com/less/less.js/) plugin | `npm install less-plugin-semantic-ui` | [LESS Plugin Repo](https://github.com/bassjobsen/less-plugin-semantic-ui/) [EmberJS](http://emberjs.com/) | `ember install:addon semantic-ui-ember` | [Ember Repo](https://github.com/Semantic-Org/Semantic-UI-Ember) -|[Meteor](https://www.meteor.com/) - [LESS](https://github.com/less/less.js/) | `meteor add semantic:ui` | [LESS Repo](https://github.com/Semantic-Org/Semantic-UI-LESS) | +|[Meteor](https://www.meteor.com/) - [LESS](https://github.com/less/less.js/) | `meteor add semantic:ui` | [Meteor Repo](https://github.com/Semantic-Org/Semantic-UI-Meteor) | |[Meteor](https://www.meteor.com/) - CSS | `meteor add semantic:ui-css` | [CSS Repo](https://github.com/Semantic-Org/Semantic-UI-CSS) | -[Bower](http://bower.io/) | `bower install semantic-ui` | +[Bower](http://bower.io/) | `bower install semantic-ui` | Check out our [integration wiki](https://github.com/Semantic-Org/Semantic-UI/wiki/Integration) for more options. #### Browser Support -* Last 2 Versions FF, Chrome, IE 10+ -* Safari 6 -* IE 9+ (Browser prefix only) -* Android 4 -* Blackberry 10 +* Last 2 Versions FF, Chrome, IE 10+, Safari Mac +* IE 10+ +* Android 4.4+, Chrome for Android 44+ +* iOS Safari 7+ -Browser prefixes are present for Internet Explorer 9, but the browser is not officially supported. +Although some components will work in IE9, [grids](http://semantic-ui.com/collections/grid.html) and other [flexbox](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flexible_boxes) components are not supported by IE9 and may not appear correctly. ## Community +#### Getting Help +Please **do not post** usage questions to GitHub Issues. For these types of questions use [StackOverflow](http://stackoverflow.com/questions/tagged/semantic-ui), [ProjectTalk](http://www.projecttalk.io/boards/Semantic-Org%2FSemantic-UI) or join our [Gitter chatroom](https://gitter.im/Semantic-Org/Semantic-UI). + +#### Submitting Bugs and Enhancements +[GitHub Issues](https://github.com/Semantic-Org/Semantic-UI/issues) is for suggesting enhancements and reporting bugs. Before submiting a bug make sure you do the following: +* Check out our [contributing guide](https://github.com/Semantic-Org/Semantic-UI/blob/master/CONTRIBUTING.md) for info on our release cycle +* [Fork this boilerplate JSFiddle](http://jsfiddle.net/efp8z6Ln/) to create a test case for your bug. If a bug is demonstratable from the docs, that's ok as well. Only bugs that include a test case can be triaged. + + +#### Pull Requests + +When adding pull requests be sure to merge into [next](https://github.com/Semantic-Org/Semantic-UI/tree/next) branch. If you need to demonstrate a fix in ``next`` release, you can use [this jsfiddle](http://jsfiddle.net/rduvhn8u/1/) + + #### International -* **Chinese** A Chinese mirror site is available at [http://www.semantic-ui.cn](http:/www.semantic-ui.cn) +* **Chinese** A Chinese mirror site is available at [http://www.semantic-ui.cn](http://www.semantic-ui.cn) * **Right-to-Left (RTL)** An RTL version can be created using our build tools by selecting `rtl` from the install script * **Translation** To help translate see the [Wiki Guide](https://github.com/Semantic-Org/Semantic-UI/wiki/Translating-Semantic-UI-Docs) for translations @@ -59,27 +84,25 @@ Browser prefixes are present for Internet Explorer 9, but the browser is not off Resource | Description --- | --- | -Bugs & Feature Requests | Make a test case by forking this [jsfiddle](http://jsfiddle.net/efp8z6Ln/), then submit a [bug on GitHub](https://github.com/Semantic-Org/Semantic-UI/issues) +Bugs & Feature Requests | All bug submission **require** a link to a test case, and a set of steps to reproduce the issue. You can make a test case by forking this [jsfiddle](http://jsfiddle.net/efp8z6Ln/), then submit your [bug report on GitHub Issues](https://github.com/Semantic-Org/Semantic-UI/issues) Live Chat | Join our [Gitter.im Room](https://gitter.im/Semantic-Org/Semantic-UI) -Newsletter Updates | Sign up for updates at [semantic-ui.com](http:/www.semantic-ui.com) -Additional Resources | Submit a question on [StackOverflow](http://www.stackoverflow.com) or ask our [Google Group](https://groups.google.com/forum/#!forum/semantic-ui) +Message Board | [ProjectTalk Board](http://www.projecttalk.io/boards/Semantic-Org%2FSemantic-UI) +Newsletter Updates | Sign up for updates at [semantic-ui.com](http://www.semantic-ui.com) +Additional Resources | Submit a question on [StackOverflow](http://stackoverflow.com/questions/tagged/semantic-ui) or ask our [Google Group](https://groups.google.com/forum/#!forum/semantic-ui) #### Places to Help -Project | How To Help | Next Step ---- | --- | --- | +Project | How To Help | Next Step +--- | --- | --- | Localization | Help us translate Semantic UI into your language | [Join our Translation Community](https://github.com/Semantic-Org/Semantic-UI/wiki/Translating-Semantic-UI-Docs) [SCSS](http://sass-lang.com/) | SASS needs PR to support variables inside `@import` | [Add Pull Request](https://github.com/sass/sass/pulls) for [#739](https://github.com/sass/sass/issues/739#issuecomment-73984809) [Angular](https://angularjs.org/) | Help develop angular bindings | Reach Out on [GitHub Issues](https://github.com/Semantic-Org/Semantic-UI-Angular/issues/8) Guides & Tutorials | Help write guides and tutorials | [Join the discussion](https://github.com/Semantic-Org/Semantic-UI/issues/1571) -#### Pull Requests - -When adding pull requests be sure to merge into [next](https://github.com/Semantic-Org/Semantic-UI/tree/next) branch. If you need to demonstrate a fix in ``next`` release, you can use [this jsfiddle](http://jsfiddle.net/rduvhn8u/1/) - #### Reaching Out If you'd like to start a conversation about Semantic feel free to e-mail me at [jack@semantic-ui.com](mailto:jack@semantic-ui.com) [![Flattr This](https://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=jlukic&url=https%3A%2F%2Fgithub.com%2Fjlukic%2FSemantic-UI) + diff --git a/web/semantic/RELEASE-NOTES.md b/web/semantic/RELEASE-NOTES.md index f008843..3ef1bb2 100644 --- a/web/semantic/RELEASE-NOTES.md +++ b/web/semantic/RELEASE-NOTES.md @@ -1,5 +1,847 @@ ## RELEASE NOTES +### Version 2.1.8 - Jan 7, 2016 + +**Critical Fix** +- **Install** - This fixes a regression causing users with NPM `2` from using Semantic UI, caused by removing the deprecated `peerDependencies` which are necessary for NPM2 install to function correctly. [#3511](https://github.com/Semantic-Org/Semantic-UI/issues/3511) + +**Minor Fix** +- **Flag** - Adds Scotland and Wales flag [#3494](https://github.com/Semantic-Org/Semantic-UI/issues/3494) **Thanks @edumucelli** +- **Install** - Fixes post-install scripts not exiting with correct return values [#3515](https://github.com/Semantic-Org/Semantic-UI/issues/3515) **Thanks @Jeff-Tian** + +### Version 2.1.7 - Dec 19, 2015 +[Closed Issues List](https://github.com/Semantic-Org/Semantic-UI/issues?q=is%3Aissue+milestone%3A2.1.7+is%3Aclosed) + +**Enhancements** +- **API** - All responses fulfilled with settings (like `mockResponse`) will now receive a settings object with all values resolved. For example `url` will be `/user/2/` and not `user/{id}` in the callback. - [#3466](https://github.com/Semantic-Org/Semantic-UI/issues/3466) +- **API** - API now allows the use of settings `response` and `responseAsync` to replace `mockResponse` and `mockResponseAsync`. The use of "mock" may not represent the most common use case which is providing a response from a third party source. (These changes are purely cosmetic and no underlying behavior has changed) - [#3491](https://github.com/Semantic-Org/Semantic-UI/issues/3491) +- **Popup** - Adds `onUnplaceable` callback when element cannot be placed in visible screen [#3388](https://github.com/Semantic-Org/Semantic-UI/issues/3388) + +**Bug Fixes** +- **Build Tools** - CSS build will now correctly call callback after both packaged files are created (compressed and uncompressed) Thanks @youngjay [#3405](https://github.com/Semantic-Org/Semantic-UI/issues/3405) +- **Flag** - A flag with no country set will no longer display an incorrect country flag. Thanks @space-alien [#3333](https://github.com/Semantic-Org/Semantic-UI/issues/3333) +- **Form** - Fixed issue where text would turn transparent inside a `loading form` [#3122](https://github.com/Semantic-Org/Semantic-UI/issues/3122) +- **Menu** - Fixed `1px` offset when `attached segment` follows `tabular menu` (max of 2 consecutive segments) [#3479](https://github.com/Semantic-Org/Semantic-UI/issues/3479) +- **Header** - `sub header` used inside a header now correctly forces `block` styling [#3020](https://github.com/Semantic-Org/Semantic-UI/issues/3020) +- **Popup** - Fixed `is visible`, `is animating`, and `is fluid` to always return `true/false` and not the DOM element. [#2781](https://github.com/Semantic-Org/Semantic-UI/issues/2781) +- **Popup** - Fixed issue with `onEnable` callback being defined with name `onEnabled` and `onDisable` with `onDisabled` in default settings, causing an error. To preserve backwards compatibility, the mispelled callback name has been left, but the bug has been fixed. [#3148](https://github.com/Semantic-Org/Semantic-UI/issues/3148) +- **Search** - Search now correctly hides menu when an error message inside results is clicked. [#3039](https://github.com/Semantic-Org/Semantic-UI/issues/3039) +- **Sidebar** - Fixed css rule issue causing `very thin` sidebar to not work [#3300](https://github.com/Semantic-Org/Semantic-UI/issues/3300) +- **Sidebar** - Sidebar no longer includes `transform` rules on child elements, this was causing layout issues in some cases (for example dropdowns in sidebars) [#3306](https://github.com/Semantic-Org/Semantic-UI/issues/3306) +- **Sticky** - Renames variables used to account for scroll offset internally for greater code clarity +- **Transition** - Fixes `noAnimation` error to more reasonably announce that the element is "not in the DOM" [#3040](https://github.com/Semantic-Org/Semantic-UI/issues/3040) + +### Version 2.1.6 - Nov 6, 2015 + +**Bug Fixes** +- **Checkbox/Dropdown/Search** - Fixed issue where dropdown/checkbox `change` events were not bubbling. (Dispatched events were swapped to use native `document.creatEvent` in `2.1.5` unfortunately the flag to bubble events was mistakenly off.) + +### Version 2.1.5 - Nov 1, 2015 + +**Docs Enhancements** +- **Examples** - All code examples now have a "copy to clipboard" button **Thanks @xiwc and @zenorocha for clipboard.js** + +**Minor Enhancements** +- **Form** - Adds `equal width form` and `equal width fields` for simpler grouped fields +- **Modal** - `onHide` callback can now cancel event by returning false [#3168](https://github.com/Semantic-Org/Semantic-UI/issues/3168) **Thanks @mdehoog** +- **Dropdown** - Added `onLabelRemove` callback that allows value removal to be cancelled by callback **Thanks @goloveychuk** +- **Table** - Added `selectable` on table cell, allowing for full table-cell links +- **Popup** Added three new variables for `arrow` background color based on position, top, center or bottom. This makes it easier to use gradient backgrounds with popups and still match arrow colors. +- **Popup** - Added behaviors `get popup` and `change content` to more easily determine popup from activating element and change text + +**Major Bug Fixes** +- **Checkbox/Dropdown/Search** - Fixed issue where using `.trigger('change')` would not fire native `change` event. Only triggering event handlers attached with jQuery [#3108](https://github.com/Semantic-Org/Semantic-UI/issues/3108) +- **Transition** - Fixed bug where static transitions (those that dont animate in/out of view) would not fire `onComplete` event +- **Sticky** - Fixes bug where sticky would stick at incorrect times when using a different scroll container than `body` and scrollTop is not 0 on page load. + +**Bugs** +- **Divider/Step/Modal/AD** - Fixes 1px jump at `@mobileBreakpoint` caused by incorrect edge conditions in media query [#3180](https://github.com/Semantic-Org/Semantic-UI/issues/3180) **THanks @mdehoog** +- **Dimmer** - Dimmer can now works correctly with `opacity: 0` [#3167](https://github.com/Semantic-Org/Semantic-UI/issues/3167) **Thanks @mdehoog** +- **Dropdown** - Fixed condition where focusing on dropdown would show a blank menu when "no results" was reached and the dropdown was refocused +- **Dropdown** - Search dropdowns will now correctly filter by current search term on re-focus +- **Dropdown** - Fixed issue where tabindex was being removed incorrectly with `selection dropdown` in some cases. [#3002](https://github.com/Semantic-Org/Semantic-UI/issues/3002) +- **Dropdown** - Added `remoteValues` as a possible `field` setting. Allowing users to return API results using arbitrary JSON object groupings. [#3080](https://github.com/Semantic-Org/Semantic-UI/issues/3080) +- **Dropdown** - Added ability to pass in `keys` as a setting, to avoid issues with languages where comma delimiter may be a different keycode [#3016](https://github.com/Semantic-Org/Semantic-UI/issues/3016) +- **Dropdown** - `search dropdown` will now initialize with `autocomplete="off"` to avoid triggering native autocomplete menu +- **Form Validation** - Fixes error on `blur` or `change` when using a blank validation object [#3131](https://github.com/Semantic-Org/Semantic-UI/issues/3131) **Thanks @listepo** +- **Form Validation** - Fixes some issues with form integer validation [#3053](https://github.com/Semantic-Org/Semantic-UI/issues/3053) **Thanks @maturano** +- **Form Validation** - `decimal` rule now **only matches decimals**, to match any number use `number` rule. [#3060](https://github.com/Semantic-Org/Semantic-UI/issues/3060) +- **Form** - Removed `divider` spacing as part of `ui form`, this caused inheritance issues when using special divider types [#3092](https://github.com/Semantic-Org/Semantic-UI/issues/3092) +- **Grid** - Fixes attached segment 1px offset inside grid column [#3226](https://github.com/Semantic-Org/Semantic-UI/issues/3226) +- **Grid** - Fixes some inconsistencies with `widescreen only` class [#3161](https://github.com/Semantic-Org/Semantic-UI/issues/3161) **Thanks @mdehoog** +- **Header** - Sub headers now force `display: block` [#3020](https://github.com/Semantic-Org/Semantic-UI/issues/3020) +- **Popup** - Fixes positioning issue when `movePopup: false` [#3213](https://github.com/Semantic-Org/Semantic-UI/issues/3213) **Thanks @parisholley** +- **Popup** - Popup now works with `svg` elements [#3043](https://github.com/Semantic-Org/Semantic-UI/issues/3043) +- **Progress* - Calling `reset` will now reset `value` to 0, so increment starts again at 0 +- **Search** - Fixes `onSearchQuery` not firing when results are cached **Thanks @mnquintana** +- **Search** - Fixes `url` parameter not working correctly due to typo in source **Thanks @fabienb4** +- **Segment** - Fixes border on `horizontal segment` when they are `:first-child` inside `segments` group +**Docs Bugs** +- Thanks to everyone who has submitted PRs for typos, grammatical changes. These are too numerous to count, but really help improve the quality of our docs. +- **Progress** - Progress example code no longer shows accidental inline css +- **Sticky** - Fixed issue where pressing home/end button would cause sticky to break due to internal logic not allowing immediate jump from bottom attached to top attached, experienced most likely when pressing "home" or "end" key [#3011](https://github.com/Semantic-Org/Semantic-UI/issues/3011) + +### Version 2.1.4 - Sep 13, 2015 + +**Critical Bugfixes** +- **Build** - Fixed issue where using a packaged theme without a `site.variables` would cause build to fail [#3009](https://github.com/Semantic-Org/Semantic-UI/issues/3009) [#3010](https://github.com/Semantic-Org/Semantic-UI/issues/3010) + +**Enhancements** +- **Form Validation** - Form validation now supports a brand new shorthand which is drastically simpler to specify [#2579](https://github.com/Semantic-Org/Semantic-UI/issues/2579) +```javascript +// expands out using default prompts and identifier matching property label +$('.ui.form') + .form({ + fields: { + name : 'empty', + gender : 'empty', + username : 'empty', + password : ['minLength[6]', 'empty'], + skills : ['minCount[2]', 'empty'], + terms : 'checked' + } + }) +; +``` +- **Form Validation** - `identifier` and `prompt` are now optional for all form validation rules. Default prompt values have been added for all rule types, and identifier will now automatically match on the named value for rule if no ID is specified. [#3001](https://github.com/Semantic-Org/Semantic-UI/issues/3001) [#2579](https://github.com/Semantic-Org/Semantic-UI/issues/2579) +- **Form Validation** - All form prompts now support templates values, `{value}`, `{name}`, `{ruleValue}`, and `{identifier}` [#3001](https://github.com/Semantic-Org/Semantic-UI/issues/3001) + +**Bugfixes** +- **Dropdown** - Fixed issue with ',' key not being allowed in dropdown due to user tagging shortcut key [#3016](https://github.com/Semantic-Org/Semantic-UI/issues/3016) +- **Message** - `ui list` used inside `ui message` now aligns properly in all conditions [#2958](https://github.com/Semantic-Org/Semantic-UI/issues/2958) +- **Form Validation** - Validation messages in `error message` group are now correctly removed when invalid field revalidates on blur +- **Label** - Labels no longer force single line using `word-wrap: nowrap` [#3006](https://github.com/Semantic-Org/Semantic-UI/issues/3006) +- **Table** - Fixed issue where `(x) column segment table` was inheriting accidentally inheriting some grid styles +- **Grid** - Fixed `middle aligned grid` not applying to columns [#2959](https://github.com/Semantic-Org/Semantic-UI/issues/2959) +- **Menu** - Fixed issue where `right menu` was not floating correctly inside a `menu > container` on mobile [#2969](https://github.com/Semantic-Org/Semantic-UI/issues/2969) +- **Button** - Fixes `right labeled icon button` with a `right` named icon (for example `right arrow`) having incorrect margin on icon. [#2973](https://github.com/Semantic-Org/Semantic-UI/issues/2973) + +### Version 2.1.3 - Sep 03, 2015 + +**Bugfixes** +- **Embed** - Fixes issue with `?=` appearing before parameters instead of `?` [#2956](https://github.com/Semantic-Org/Semantic-UI/issues/2956) **Thanks @AgentShark** +- **Input** - Fixes regression where `ui icon input` inside forms were not correct width [#2953](https://github.com/Semantic-Org/Semantic-UI/issues/2953) +- **Input** - Fixes typo in focused placeholder text color preventing the value from being used [#2939](https://github.com/Semantic-Org/Semantic-UI/issues/2939) +- **Input** - `action input` now correctly show focused border on button side, and avoids duplicating borders + +### Version 2.1.2 - Sep 02, 2015 + +**Bugfix** +- **Form Validation** - Fixes callbacks on `onSuccess` so as to not break backwards compatibility. #2945 #2944 + +### Version 2.1.1 - Sep 02, 2015 + +**Bugfix** +- **Build Tools** - Fixes [issue](https://github.com/Semantic-Org/Semantic-UI/commit/3d20d5e9796e05cc100af73370173f3383cf1d81) causing comment banner to incorrectly show version `2.0.7` in `dist/` + +### Version 2.1.0 - Sep 02, 2015 + +#### Features + +**New UI Features** + +- **API** - Added `encodeParameters` option to enable/disable parameters being encoded with `encodeURIComponent` [#2752](https://github.com/Semantic-Org/Semantic-UI/issues/2752) +- **API** Added new setting `hideError`, defaults to `auto` (will automatically hide error for elements that are not forms). [#2586](https://github.com/Semantic-Org/Semantic-UI/issues/2586) +- **Build Tools** - Packaged `.overrides` file are now an optional include +- **Button** - `colored basic` button are now colored before `:hover` in the default theme, this is more in line with common usage across other websites. +- **Button** - Added `labeled button` variation for display a count next to a button. +- **Cards** - Added documentation for `stackable` cards which was available but undocumented in previous versions. +- **Checkbox** - Added 4 new callbacks `beforeChecked`, `beforeUnchecked`, `beforeDeterminate`, `beforeIndeterminate`. You can now cancel a state change by returning false from these callbacks. +- **Divider** - Vertical divider can now be used multiple times in a single column row (not just 50/50 split). [#2808](https://github.com/Semantic-Org/Semantic-UI/issues/2808) +- **Dropdown** - Dropdown using remote data, can now customize the property names returned by api call using `fields` (similar to search). +- **Dropdown** - Dropdown will now automatically update selected values when hidden input value changes (so long as `change` event is triggered) [#2626](https://github.com/Semantic-Org/Semantic-UI/issues/2626) +- **Dropdown** - Dropdown with user additions now will use custom templated messages to distinguish added choice from preselected choice [#2923](https://github.com/Semantic-Org/Semantic-UI/issues/2923) +- **Form Validation** - Added credit card validation, supports array of card types, and international cards including non luhn cards like China UnionPay [#2729](https://github.com/Semantic-Org/Semantic-UI/issues/2729) +- **Form Validation** - Updated appearance of form validation prompts to use a more lightweight style. Added variables for controlling error validation prompt styles in `form.variables` +- **Grid** - Added new responsive [`reversed`](http://www.semantic-ui.com/collections/grid.html#responsive-order) variations for reversing column order, these are also compatible with other grid types like `divided` and `celled` by device [#2685](https://github.com/Semantic-Org/Semantic-UI/issues/2685) +- **Icon** - Added `fitted` icon variation, and new small sizes `tiny` and `mini` +- **Input** - Added `disabled` state for inputs [#2694](https://github.com/Semantic-Org/Semantic-UI/issues/2694) +- **Input** - Added ability for labeled input to be attached to both sides [#2922 **Thanks @maturano**](https://github.com/Semantic-Org/Semantic-UI/issues/no**) +- **Label** - Added a new `basic label` style, works symbiotically with other label types to provide a more lightweight style label +- **Menu** - Added new `tabular` menu types, `right tabular`, `bottom tabular`, added many new `tabular` menu variables for customizing +- **Menu** - Appearance of `labeled icon menu` has been modified. Horizontal menus now have icons above text, and icons are slightly larger than before. +- **Search** - Search now can use any server response mapping, use the `fields` parameter to pass in a mapping of server response to content **thanks @anibalmf1** [#2645](https://github.com/Semantic-Org/Semantic-UI/issues/2645) +- **Site** - Added global variable `@focusedFormBorderColor` for controlling form focus border color +- **Table** - New `fixed` table variation added for use with `table-layout: fixed;`. This also supports "..." ellipsis when used with `single line` content + +**[Additional Features](https://github.com/Semantic-Org/Semantic-UI/issues?q=is%3Aissue+milestone%3A2.1.0+is%3Aclosed)** +- **Breadcrumb** - Breadcrumb no longer receives vertical spacing by default. This may often cause vertical alignment issues when displayed next to other `inline-block` content. +- **Dropdown** - Added `get default text` and `get placeholder text` behaviors for returning text values. +- **Dropdown** - Pointing dropdown (dropdown with arrows) now support `upward`, and will automatically move pointer arrows when appearing upward [#2733](https://github.com/Semantic-Org/Semantic-UI/issues/2733) +- **Form** - `inverted form` now remove input border, added new variables for controlling inverted form input styles +- **GitHub Theme** - Added github icon theme with port of Octicons. +- **Label** - Added `basic` label variation, useful for item counts +- **Menu** - `inverted menu` now support `colored` individual items **Thanks @maturano** [#2850](https://github.com/Semantic-Org/Semantic-UI/issues/2850) +- **Menu** - `text menu` now uses padding for hitboxes to make target area for links larger + +**[Community Added Features](https://github.com/Semantic-Org/Semantic-UI/issues?q=is%3Aissue+milestone%3A2.1.0+is%3Aclosed)** +- **Build Tools** - `gulp build` now correctly calls `callback`, allowing those importing tasks to chain it correctly [#2836 **Thanks @artemkaint**](https://github.com/Semantic-Org/Semantic-UI/issues/nt**) +- **Dropdown** - Dropdown `show` and `hide` are now cancellable by returning `false` from `onShow` or `onHide` callbacks. +- **Flag** - England flag alias is now correctly set [#2770 **Thanks @eduardom**](https://github.com/Semantic-Org/Semantic-UI/issues/om**) +- **Form Validation** - Added `number` and `decimal` validations to form **Thanks @TonnyORG** [#2537](https://github.com/Semantic-Org/Semantic-UI/issues/2537) +- **Form Validation** - Form `onSuccess` and `onFailure` now receive current form fields as a parameter **Thanks @guodong** +- **Popup** - Popup will now look for inline popup as any next adjacent sibling [#2772 **Thanks @malacalypse**](https://github.com/Semantic-Org/Semantic-UI/issues/se**) + +#### Bugs +**[Reported Bugs](https://github.com/Semantic-Org/Semantic-UI/issues?q=is%3Aissue+milestone%3A2.1.0+is%3Aclosed)** +- **Accordion** - Added missing notation for accordion docs [#2812](https://github.com/Semantic-Org/Semantic-UI/issues/2812) +- **Build Tools** - Fixed bug where `gulp version` would show `x.x` [#2875 [#2920](https://github.com/Semantic-Org/Semantic-UI/issues/2920) +- **Build Tools** - Fixes issue where component glob `{tab, table}` caused table to be included twice in concatenated source ** +- **Button** - Fixes inverted button missing an `active` and `active focus` state [#2635](https://github.com/Semantic-Org/Semantic-UI/issues/2635) +- **Button** - Fixes issue where `basic button` would not have focus color text when colored [#2264](https://github.com/Semantic-Org/Semantic-UI/issues/2264) +- **Checkbox** - Clicking a link inside an initialized checkbox `label` will now work correctly, and will not toggle the checkbox. [#2804](https://github.com/Semantic-Org/Semantic-UI/issues/2804) +- **Container** - Fix issue with `fluid container` being `100% + gutter` at mobile resolution (causing overflow) +- **Dropdown** - `forceSelection` no longer sets current value in search selection when current query is blank [#2058](https://github.com/Semantic-Org/Semantic-UI/issues/2058) +- **Dropdown** - Dropdown `@arrowSize` will now automatically reposition itself if size is changed with variable +- **Dropdown** - Dropdown arrow now has a variable `@dropdownArrowSize`, and is slightly smaller than previously +- **Dropdown** - Fix `left menu` inside `ui menu` appearing horizontally [#2778](https://github.com/Semantic-Org/Semantic-UI/issues/2778) +- **Dropdown** - Fixed error where menu would disappear when entering spaced words using `allowAdditions: true` caused by value matching its own whitespace-trimed value [#2853](https://github.com/Semantic-Org/Semantic-UI/issues/2853) +- **Dropdown** - Fixed issue where "no results" message would be still be visible before search query on input focus [#2824](https://github.com/Semantic-Org/Semantic-UI/issues/2824) +- **Dropdown** - Fixed issue where `onChange` would not fire when using `action: 'hide'`. [#2818](https://github.com/Semantic-Org/Semantic-UI/issues/2818) +- **Dropdown** - Fixed issue where selected item would not be shown when being re-shown after filtering with single search selection [#2824](https://github.com/Semantic-Org/Semantic-UI/issues/2824) +- **Dropdown** - Fixes issues with setting "" (empty quote) values when `placeholder: false` is used. Fixes issues with using `clear` and `restore defaults` without placeholders. [#2637](https://github.com/Semantic-Org/Semantic-UI/issues/2637) +- **Dropdown** - Remove use of `trim` which causes issues IE 11 and below [#2806](https://github.com/Semantic-Org/Semantic-UI/issues/2806) +- **Embed** - Remove accidental `console.log` statements in js [#2760](https://github.com/Semantic-Org/Semantic-UI/issues/2760) +- **Form / Input** - Fixes `::placeholder` text color for `ui error input`, modifies form error placeholder color to distinguish from form value error color [#2786](https://github.com/Semantic-Org/Semantic-UI/issues/2786) +- **Form / Input** - Fixes issue where `ui input` would sometimes collapse to `0px` width, especially when used inside an `inline field` [#2705 [#2621 [#2821](https://github.com/Semantic-Org/Semantic-UI/issues/2821) +- **Form** - `disabled field(s)` now remove `pointer-events` allowing it to disable checkbox and dropdown functionality [#555](https://github.com/Semantic-Org/Semantic-UI/issues/#555) +- **Form** - Date input and other special input in chrome now are the same height as normal input (adds custom vendor shadow dom styling) [#2704](https://github.com/Semantic-Org/Semantic-UI/issues/2704) +- **Form** - Form will no longer show messages that are empty in `error`, `warning`, or `success` state. +- **Grid** - Fixed issue where `relaxed stackable grid` would have incorrect margin on mobile width +- **Grid** - Fixed issue where nested `stackable grid` would have incorrect margin on mobile. +- **Header** - Fixed `attached header` to have the correct bottom border on `top attached` and `attached` variations. [#2798](https://github.com/Semantic-Org/Semantic-UI/issues/2798) +- **Icon** - Fixed typo in cube icon alias caused by bad grep [#2765](https://github.com/Semantic-Org/Semantic-UI/issues/2765) +- **Input** - Fixed issue with appearance of `left corner labeled left icon input` [#2782](https://github.com/Semantic-Org/Semantic-UI/issues/2782) +- **Item** - Fixed `bottom aligned` not working in item due to incorrect flex value [#2826](https://github.com/Semantic-Org/Semantic-UI/issues/2826) +- **List** - Lists can now be `right floated` or `left floated` +- **Menu** - Fixed `(x) column` nested grid with alignment stacking vertically (wrong flex-direction) [#2810](https://github.com/Semantic-Org/Semantic-UI/issues/2810) +- **Menu** - Sub menus now work correctly and are correctly spaced inside `secondary menu` and text menu` [#2862](https://github.com/Semantic-Org/Semantic-UI/issues/2862) +- **Modal** - Fix autofocus setting in modal not working due to improper selector [#2737](https://github.com/Semantic-Org/Semantic-UI/issues/2737) +- **Modal** - Increased `close` specificity, modal will now only close on `> .close` [#2736](https://github.com/Semantic-Org/Semantic-UI/issues/2736) +- **Popup** - Fixes issue where variation would not be added to a pre-existing popup even if specified in javascript [#26011](https://github.com/Semantic-Org/Semantic-UI/issues/6011) +- **Search** - Calling `.search('show results')` no longer fails when input is not focused [#2842](https://github.com/Semantic-Org/Semantic-UI/issues/2842) +- **Table/Label** - `ribbon labels` will now automatically position themselves when used inside a table [#1930](https://github.com/Semantic-Org/Semantic-UI/issues/1930) +- **Transition** - Transition callbacks now all have the correct `this` set. [#2758](https://github.com/Semantic-Org/Semantic-UI/issues/2758) + +**[Community Bug Fixes](https://github.com/Semantic-Org/Semantic-UI/issues?q=is%3Aissue+milestone%3A2.1.0+is%3Aclosed)** +- **API** - API debug is now `false` by default, like other modules. [#2817](https://github.com/Semantic-Org/Semantic-UI/issues/2817) +- **Build Tools** - Removed octal literals from install scripts (for color escaping), and uses of future ECMAScript reserved words [#2838 [#2839 **Thanks @artemkaint**](https://github.com/Semantic-Org/Semantic-UI/issues/nt**) +- **Dropdown** - Fixed issue where label could not be removed when using a numeric value due to mismatched types [#2754 [#2755 **Thanks @dgurkaynak**](https://github.com/Semantic-Org/Semantic-UI/issues/ak**) +- **Menu** - Fixes tabular menu missing variable for background. **Thanks @frontdevde** +- **Step** - Fixed issue with display of step groups with only one step having incorrect border radius **Thanks @elliotisonfire** [#2869](https://github.com/Semantic-Org/Semantic-UI/issues/2869) +- **Sticky** - Sticky now sets width and height with `!important` to avoid inheritance issues in some cases **Thanks @lauri-elevant** [#2710](https://github.com/Semantic-Org/Semantic-UI/issues/2710) +- **Tab** - Fixed issue where simple path would be tested before full path, i.e. `first/` vs `/second/first/` causing tab to not open in some cases **Thanks @habibutsu** [#2843](https://github.com/Semantic-Org/Semantic-UI/issues/2843) + +**Additional Bugs** +- **API** - API now will use automatically use `form` action if no api event is specified now when form is `stateContext` but not intialized element +- **Build Tools** - Fixes issue on `win` platform where packaged theme would not correctly update when using watch due to regExp not matching windows path separators. +- **Dropdown** - Dropdown will no longer fire native `onchange` event on hidden input when setting value during initial load (unless `fireOnInit: true`) #2795 **Thanks @lauri-elevant** +- **Dropdown** - Fixed issue where `forceSelection` would not occur when `pageLostFocus` (clicked into another tab and back) +- **Dropdown** - Fixed issue where using the specific value `value="false"` would cause an option to not be removable from a multiple select +- **Dropdown** - When `useLabels: false` placeholder text will now show up when 0 items selected, instead of the text "0 items selected" +- **Dropdown/Tab** - Fixed an instance where `metadata` was not referencing settings metadata value +- **Form Validation** - Fixed issue with `get value(s)` where unchecked checkboxes would not correctly retrieve values +- **Form** - Dropdown in `inline field` now use auto width instead of 100% +- **Grid / Container** - `ui relaxed grid container` and `ui very relaxed grid container` will now all render at same container width +- **Grid** - Fixed `stackable celled grid` having doubled border width between rows +- **Header** - Fixed issue with em sizing of `chubby` and `bookish` header themes appearing too large +- **Icons** - Fixed issue where `active icon` or `emphasized icon` would not adjust opacity inside menus +- **Input** - `labeled input` now keeps border on label edge so that focus color appears correctly +- **Input** - Input now will reset `font-weight` and `font-style` if set on parent; +- **Input** `action input` and `labeled input` now have focused border on inner edge with label/button +- **Label** - `pointing` and `attached` labels are *now word order sensitive* to allow them to work correctly with other directional variations. +- **Label** - `pointint label` now rounds to exact pixel em value, should align correctly in more cases +- **Menu** - `@pressedItemColor` has been renamed to `@pressedItemTextColor` to match naming conventions of other variables +- **Menu** - Added `flex: 0 0 auto` to menu item to make sure menu do not collapse text content to reduce space +- **Menu** - Fix text align on `dropdown item` inside `icon menu` +- **Menu** - Fixed hybrid initialization not creating `menu` correctly. Fixed docs example of hybrid `` dropdowns intialized without `multiple` property set on `` options. [#2573](https://github.com/Semantic-Org/Semantic-UI/issues/2573) +- **Dropdown** - User additions now have their `