浏览代码

Merge remote-tracking branch 'Soullivaneuh/deprecated-fixes'

Jordi Boggiano 9 年之前
父节点
当前提交
2ae9b0240b
共有 37 个文件被更改,包括 610 次插入366 次删除
  1. 9 9
      app/config/config.yml
  2. 1 1
      app/config/config_dev.yml
  3. 1 1
      app/config/defaults.yml
  4. 8 8
      app/config/routing.yml
  5. 3 3
      app/config/routing_dev.yml
  6. 2 2
      app/config/security.yml
  7. 9 6
      app/console
  8. 17 8
      composer.json
  9. 331 167
      composer.lock
  10. 1 1
      phpunit.xml.dist
  11. 3 2
      src/Packagist/WebBundle/Controller/ExploreController.php
  12. 6 5
      src/Packagist/WebBundle/Controller/FeedController.php
  13. 12 5
      src/Packagist/WebBundle/Controller/PackageController.php
  14. 18 18
      src/Packagist/WebBundle/Controller/WebController.php
  15. 1 1
      src/Packagist/WebBundle/Entity/User.php
  16. 46 0
      src/Packagist/WebBundle/EventListener/RegistrationListener.php
  17. 0 27
      src/Packagist/WebBundle/Form/Handler/RegistrationFormHandler.php
  18. 4 3
      src/Packagist/WebBundle/Form/Type/AbandonedType.php
  19. 8 3
      src/Packagist/WebBundle/Form/Type/AddMaintainerRequestType.php
  20. 8 3
      src/Packagist/WebBundle/Form/Type/OAuthRegistrationFormType.php
  21. 8 4
      src/Packagist/WebBundle/Form/Type/OrderByType.php
  22. 8 3
      src/Packagist/WebBundle/Form/Type/PackageType.php
  23. 4 1
      src/Packagist/WebBundle/Form/Type/ProfileFormType.php
  24. 8 3
      src/Packagist/WebBundle/Form/Type/RemoveMaintainerRequestType.php
  25. 11 5
      src/Packagist/WebBundle/Form/Type/SearchQueryType.php
  26. 5 5
      src/Packagist/WebBundle/Menu/MenuBuilder.php
  27. 2 2
      src/Packagist/WebBundle/Model/PackageManager.php
  28. 28 36
      src/Packagist/WebBundle/Resources/config/services.yml
  29. 2 2
      src/Packagist/WebBundle/Resources/views/Package/abandon.html.twig
  30. 2 2
      src/Packagist/WebBundle/Resources/views/Package/edit.html.twig
  31. 2 2
      src/Packagist/WebBundle/Resources/views/Package/submitPackage.html.twig
  32. 10 4
      src/Packagist/WebBundle/Resources/views/Package/viewPackage.html.twig
  33. 2 3
      src/Packagist/WebBundle/Resources/views/Web/searchForm.html.twig
  34. 15 10
      src/Packagist/WebBundle/Security/Provider/UserProvider.php
  35. 5 5
      src/Packagist/WebBundle/Twig/PackagistExtension.php
  36. 5 3
      web/app.php
  37. 5 3
      web/app_dev.php

+ 9 - 9
app/config/config.yml

@@ -6,13 +6,15 @@ imports:
 framework:
 framework:
     secret:          %secret%
     secret:          %secret%
     router:
     router:
-        resource: "%kernel.root_dir%/config/routing.yml"
+        resource: '%kernel.root_dir%/config/routing.yml'
         strict_requirements: %kernel.debug%
         strict_requirements: %kernel.debug%
     form:            true
     form:            true
     csrf_protection: true
     csrf_protection: true
     validation:      { enable_annotations: true }
     validation:      { enable_annotations: true }
     translator:      { fallback: en }
     translator:      { fallback: en }
-    templating:      { engines: ['twig'], assets_version: v=%assets_version% }
+    templating:      { engines: ['twig'] }
+    assets:
+        version: v=%assets_version%
     default_locale: %locale%
     default_locale: %locale%
     session:
     session:
         name:            packagist
         name:            packagist
@@ -26,9 +28,8 @@ framework:
 
 
 # Twig Configuration
 # Twig Configuration
 twig:
 twig:
-    form:
-        resources:
-           - 'PackagistWebBundle::forms.html.twig'
+    form_themes:
+        - 'PackagistWebBundle::forms.html.twig'
     debug:            %kernel.debug%
     debug:            %kernel.debug%
     strict_variables: %kernel.debug%
     strict_variables: %kernel.debug%
     globals:
     globals:
@@ -44,6 +45,8 @@ doctrine:
         user:     %database_user%
         user:     %database_user%
         password: %database_password%
         password: %database_password%
         charset:  UTF8
         charset:  UTF8
+        # See https://github.com/sonata-project/SonataAdminBundle/issues/3342
+        server_version: 5.6
     orm:
     orm:
         auto_generate_proxy_classes: %kernel.debug%
         auto_generate_proxy_classes: %kernel.debug%
         auto_mapping: true
         auto_mapping: true
@@ -73,15 +76,12 @@ fos_user:
     from_email:
     from_email:
         address:        %mailer_from_email%
         address:        %mailer_from_email%
         sender_name:    %mailer_from_name%
         sender_name:    %mailer_from_name%
-    registration:
-        form:
-            handler: packagist.form.handler.registration
     profile:
     profile:
         form:
         form:
             type:       packagist_user_profile
             type:       packagist_user_profile
 
 
 hwi_oauth:
 hwi_oauth:
-    firewall_name: main
+    firewall_names: [main]
     connect:
     connect:
         account_connector: packagist.user_provider
         account_connector: packagist.user_provider
         registration_form_handler: packagist.oauth.registration_form_handler
         registration_form_handler: packagist.oauth.registration_form_handler

+ 1 - 1
app/config/config_dev.yml

@@ -2,7 +2,7 @@ imports:
     - { resource: config.yml }
     - { resource: config.yml }
 
 
 framework:
 framework:
-    router:   { resource: "%kernel.root_dir%/config/routing_dev.yml" }
+    router:   { resource: '%kernel.root_dir%/config/routing_dev.yml' }
     profiler: { only_exceptions: false }
     profiler: { only_exceptions: false }
 
 
 swiftmailer:
 swiftmailer:

+ 1 - 1
app/config/defaults.yml

@@ -1,6 +1,6 @@
 parameters:
 parameters:
     packagist_host: ~
     packagist_host: ~
-    packagist_metadata_dir: "%kernel.cache_dir%/composer-packages-build"
+    packagist_metadata_dir: '%kernel.cache_dir%/composer-packages-build'
     packagist_dumper_compress: 0
     packagist_dumper_compress: 0
     session_save_path: %kernel.cache_dir%/sessions
     session_save_path: %kernel.cache_dir%/sessions
     database_name_test: packagist_test
     database_name_test: packagist_test

+ 8 - 8
app/config/routing.yml

@@ -1,9 +1,9 @@
 _packagist:
 _packagist:
-    resource: "@PackagistWebBundle/Controller"
+    resource: '@PackagistWebBundle/Controller'
     type:     annotation
     type:     annotation
 
 
 fos_user_profile:
 fos_user_profile:
-    resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
+    resource: '@FOSUserBundle/Resources/config/routing/profile.xml'
     prefix: /profile
     prefix: /profile
 
 
 fos_user_profile_show:
 fos_user_profile_show:
@@ -12,28 +12,28 @@ fos_user_profile_show:
     methods: [GET]
     methods: [GET]
 
 
 fos_user_register:
 fos_user_register:
-    resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
+    resource: '@FOSUserBundle/Resources/config/routing/registration.xml'
     prefix: /register
     prefix: /register
 
 
 fos_user_resetting:
 fos_user_resetting:
-    resource: "@FOSUserBundle/Resources/config/routing/resetting.xml"
+    resource: '@FOSUserBundle/Resources/config/routing/resetting.xml'
     prefix: /resetting
     prefix: /resetting
 
 
 fos_user_change_password:
 fos_user_change_password:
-    resource: "@FOSUserBundle/Resources/config/routing/change_password.xml"
+    resource: '@FOSUserBundle/Resources/config/routing/change_password.xml'
 
 
 
 
 hwi_oauth_connect:
 hwi_oauth_connect:
-    resource: "@HWIOAuthBundle/Resources/config/routing/connect.xml"
+    resource: '@HWIOAuthBundle/Resources/config/routing/connect.xml'
     prefix:   /connect
     prefix:   /connect
 
 
 # overrides the fosub /login page
 # overrides the fosub /login page
 hwi_oauth_login:
 hwi_oauth_login:
-    resource: "@HWIOAuthBundle/Resources/config/routing/login.xml"
+    resource: '@HWIOAuthBundle/Resources/config/routing/login.xml'
     prefix:   /login
     prefix:   /login
 
 
 hwi_oauth_redirect:
 hwi_oauth_redirect:
-    resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml"
+    resource: '@HWIOAuthBundle/Resources/config/routing/redirect.xml'
     prefix:   /login
     prefix:   /login
 
 
 github_check:
 github_check:

+ 3 - 3
app/config/routing_dev.yml

@@ -3,12 +3,12 @@
 #    type:     assetic
 #    type:     assetic
 
 
 _wdt:
 _wdt:
-    resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml"
+    resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
     prefix:   /_wdt
     prefix:   /_wdt
 
 
 _profiler:
 _profiler:
-    resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml"
+    resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
     prefix:   /_profiler
     prefix:   /_profiler
 
 
 _main:
 _main:
-    resource: routing.yml
+    resource: routing.yml

+ 2 - 2
app/config/security.yml

@@ -19,7 +19,7 @@ security:
                 check_path:     /login_check
                 check_path:     /login_check
                 failure_path:   null
                 failure_path:   null
             remember_me:
             remember_me:
-                key: %remember_me.secret%
+                secret: %remember_me.secret%
                 user_providers: packagist
                 user_providers: packagist
                 name: pauth
                 name: pauth
                 always_remember_me: true
                 always_remember_me: true
@@ -28,7 +28,7 @@ security:
             anonymous:    true
             anonymous:    true
             oauth:
             oauth:
                 resource_owners:
                 resource_owners:
-                    github: "/login/check-github"
+                    github: '/login/check-github'
                 login_path:        /login
                 login_path:        /login
                 failure_path:      /login
                 failure_path:      /login
                 oauth_user_provider:
                 oauth_user_provider:

+ 9 - 6
app/console

@@ -1,6 +1,11 @@
 #!/usr/bin/env php
 #!/usr/bin/env php
 <?php
 <?php
 
 
+use Composer\Autoload\ClassLoader;
+use Symfony\Bundle\FrameworkBundle\Console\Application;
+use Symfony\Component\Console\Input\ArgvInput;
+use Symfony\Component\Debug\Debug;
+
 // if you don't want to setup permissions the proper way, just uncomment the following PHP line
 // if you don't want to setup permissions the proper way, just uncomment the following PHP line
 // read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information
 // read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information
 //umask(0000);
 //umask(0000);
@@ -9,12 +14,10 @@ ini_set('date.timezone', 'UTC');
 
 
 set_time_limit(0);
 set_time_limit(0);
 
 
-require_once __DIR__.'/bootstrap.php.cache';
-require_once __DIR__.'/AppKernel.php';
-
-use Symfony\Bundle\FrameworkBundle\Console\Application;
-use Symfony\Component\Console\Input\ArgvInput;
-use Symfony\Component\Debug\Debug;
+/**
+ * @var ClassLoader
+ */
+$loader = require __DIR__.'/autoload.php';
 
 
 $input = new ArgvInput();
 $input = new ArgvInput();
 $env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev');
 $env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev');

+ 17 - 8
composer.json

@@ -20,29 +20,30 @@
           "email": "contact@packagist.org"
           "email": "contact@packagist.org"
     },
     },
     "autoload": {
     "autoload": {
-        "psr-4": { "Packagist\\": "src/Packagist/" }
+        "psr-4": { "Packagist\\": "src/Packagist/" },
+        "classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
     },
     },
     "require": {
     "require": {
         "php": ">=5.5",
         "php": ">=5.5",
-        "symfony/symfony": "^2.7",
+        "symfony/symfony": "^2.8",
         "doctrine/orm": "^2.3",
         "doctrine/orm": "^2.3",
         "doctrine/doctrine-bundle": "^1.2",
         "doctrine/doctrine-bundle": "^1.2",
         "twig/extensions": "^1.0",
         "twig/extensions": "^1.0",
         "symfony/swiftmailer-bundle": "^2.3",
         "symfony/swiftmailer-bundle": "^2.3",
         "symfony/monolog-bundle": "^2.4",
         "symfony/monolog-bundle": "^2.4",
-        "sensio/distribution-bundle": "^2.3",
-        "sensio/framework-extra-bundle": "^2.3",
-        "sensio/generator-bundle": "^2.3",
+        "sensio/distribution-bundle": "^5.0",
+        "sensio/framework-extra-bundle": "^3.0",
+        "sensio/generator-bundle": "^3.0",
         "jms/security-extra-bundle": "^1.5",
         "jms/security-extra-bundle": "^1.5",
         "jms/di-extra-bundle": "^1.4",
         "jms/di-extra-bundle": "^1.4",
 
 
         "composer/composer": "^1.0@dev",
         "composer/composer": "^1.0@dev",
-        "friendsofsymfony/user-bundle": "^1.0",
-        "hwi/oauth-bundle": "^0.4@dev",
+        "friendsofsymfony/user-bundle": "^2.0@dev",
+        "hwi/oauth-bundle": "^0.4",
         "nelmio/solarium-bundle": "^1.0",
         "nelmio/solarium-bundle": "^1.0",
         "nelmio/security-bundle": "^1.0",
         "nelmio/security-bundle": "^1.0",
         "predis/predis": "^1.0",
         "predis/predis": "^1.0",
-        "snc/redis-bundle": "^1.1.9",
+        "snc/redis-bundle": "dev-master",
         "white-october/pagerfanta-bundle": "^1.0",
         "white-october/pagerfanta-bundle": "^1.0",
         "zendframework/zend-feed": "^2.0",
         "zendframework/zend-feed": "^2.0",
         "zendframework/zend-servicemanager": "^2.0",
         "zendframework/zend-servicemanager": "^2.0",
@@ -52,6 +53,14 @@
         "knplabs/knp-menu-bundle": "^2.0",
         "knplabs/knp-menu-bundle": "^2.0",
         "ezyang/htmlpurifier": "^4.6"
         "ezyang/htmlpurifier": "^4.6"
     },
     },
+    "require-dev": {
+        "symfony/phpunit-bridge": "^2.7 || ^3.0"
+    },
+    "conflict": {
+        "knplabs/knp-menu": "<=2.1.0"
+    },
+    "minimum-stability": "dev",
+    "prefer-stable": true,
     "scripts": {
     "scripts": {
         "post-install-cmd": [
         "post-install-cmd": [
             "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
             "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",

文件差异内容过多而无法显示
+ 331 - 167
composer.lock


+ 1 - 1
phpunit.xml.dist

@@ -11,7 +11,7 @@
     processIsolation            = "false"
     processIsolation            = "false"
     stopOnFailure               = "false"
     stopOnFailure               = "false"
     syntaxCheck                 = "false"
     syntaxCheck                 = "false"
-    bootstrap                   = "app/bootstrap.php.cache" >
+    bootstrap                   = "app/autoload.php" >
 
 
     <testsuites>
     <testsuites>
         <testsuite name="Packagist Test Suite">
         <testsuite name="Packagist Test Suite">

+ 3 - 2
src/Packagist/WebBundle/Controller/ExploreController.php

@@ -23,6 +23,7 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
 use Symfony\Component\HttpFoundation\JsonResponse;
 use Symfony\Component\HttpFoundation\JsonResponse;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
 
 
 /**
 /**
  * @Route("/explore")
  * @Route("/explore")
@@ -121,7 +122,7 @@ class ExploreController extends Controller
 
 
             /** @var Package $package */
             /** @var Package $package */
             foreach ($packages as $package) {
             foreach ($packages as $package) {
-                $url = $this->generateUrl('view_package', array('name' => $package->getName()), true);
+                $url = $this->generateUrl('view_package', array('name' => $package->getName()), UrlGeneratorInterface::ABSOLUTE_URL);
 
 
                 $result['packages'][] = array(
                 $result['packages'][] = array(
                     'name' => $package->getName(),
                     'name' => $package->getName(),
@@ -140,7 +141,7 @@ class ExploreController extends Controller
                 if ($perPage !== 15) {
                 if ($perPage !== 15) {
                     $params['per_page'] = $perPage;
                     $params['per_page'] = $perPage;
                 }
                 }
-                $result['next'] = $this->generateUrl('browse_popular', $params, true);
+                $result['next'] = $this->generateUrl('browse_popular', $params, UrlGeneratorInterface::ABSOLUTE_URL);
             }
             }
 
 
             return new JsonResponse($result);
             return new JsonResponse($result);

+ 6 - 5
src/Packagist/WebBundle/Controller/FeedController.php

@@ -22,6 +22,7 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
 use Zend\Feed\Writer\Entry;
 use Zend\Feed\Writer\Entry;
 use Zend\Feed\Writer\Feed;
 use Zend\Feed\Writer\Feed;
 
 
@@ -61,7 +62,7 @@ class FeedController extends Controller
             $req,
             $req,
             'Newly Submitted Packages',
             'Newly Submitted Packages',
             'Latest packages submitted to Packagist.',
             'Latest packages submitted to Packagist.',
-            $this->generateUrl('browse', array(), true),
+            $this->generateUrl('browse', array(), UrlGeneratorInterface::ABSOLUTE_URL),
             $packages
             $packages
         );
         );
 
 
@@ -88,7 +89,7 @@ class FeedController extends Controller
             $req,
             $req,
             'New Releases',
             'New Releases',
             'Latest releases of all packages.',
             'Latest releases of all packages.',
-            $this->generateUrl('browse', array(), true),
+            $this->generateUrl('browse', array(), UrlGeneratorInterface::ABSOLUTE_URL),
             $packages
             $packages
         );
         );
 
 
@@ -115,7 +116,7 @@ class FeedController extends Controller
             $req,
             $req,
             "$vendor packages",
             "$vendor packages",
             "Latest packages updated on Packagist of $vendor.",
             "Latest packages updated on Packagist of $vendor.",
-            $this->generateUrl('view_vendor', array('vendor' => $vendor), true),
+            $this->generateUrl('view_vendor', array('vendor' => $vendor), UrlGeneratorInterface::ABSOLUTE_URL),
             $packages
             $packages
         );
         );
 
 
@@ -142,7 +143,7 @@ class FeedController extends Controller
             $req,
             $req,
             "$package releases",
             "$package releases",
             "Latest releases on Packagist of $package.",
             "Latest releases on Packagist of $package.",
-            $this->generateUrl('view_package', array('name' => $package), true),
+            $this->generateUrl('view_package', array('name' => $package), UrlGeneratorInterface::ABSOLUTE_URL),
             $packages
             $packages
         );
         );
 
 
@@ -235,7 +236,7 @@ class FeedController extends Controller
             $this->generateUrl(
             $this->generateUrl(
                 'view_package',
                 'view_package',
                 array('name' => $package->getName()),
                 array('name' => $package->getName()),
-                true
+                UrlGeneratorInterface::ABSOLUTE_URL
             )
             )
         );
         );
         $entry->setId($package->getName());
         $entry->setId($package->getName());

+ 12 - 5
src/Packagist/WebBundle/Controller/PackageController.php

@@ -20,6 +20,7 @@ use Packagist\WebBundle\Form\Type\AddMaintainerRequestType;
 use Packagist\WebBundle\Form\Type\PackageType;
 use Packagist\WebBundle\Form\Type\PackageType;
 use Packagist\WebBundle\Form\Type\RemoveMaintainerRequestType;
 use Packagist\WebBundle\Form\Type\RemoveMaintainerRequestType;
 use Predis\Connection\ConnectionException;
 use Predis\Connection\ConnectionException;
+use Symfony\Component\Form\Extension\Core\Type\TextType;
 use Symfony\Component\HttpFoundation\RedirectResponse;
 use Symfony\Component\HttpFoundation\RedirectResponse;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\JsonResponse;
 use Symfony\Component\HttpFoundation\JsonResponse;
@@ -105,7 +106,9 @@ class PackageController extends Controller
         $package = new Package;
         $package = new Package;
         $package->setEntityRepository($this->getDoctrine()->getRepository('PackagistWebBundle:Package'));
         $package->setEntityRepository($this->getDoctrine()->getRepository('PackagistWebBundle:Package'));
         $package->setRouter($this->get('router'));
         $package->setRouter($this->get('router'));
-        $form = $this->createForm(new PackageType(), $package);
+        $form = $this->createForm(PackageType::class, $package, [
+            'action' => $this->generateUrl('submit'),
+        ]);
         $user = $this->getUser();
         $user = $this->getUser();
         $package->addMaintainer($user);
         $package->addMaintainer($user);
 
 
@@ -762,7 +765,9 @@ class PackageController extends Controller
         }
         }
 
 
         $form = $this->createFormBuilder($package, array("validation_groups" => array("Update")))
         $form = $this->createFormBuilder($package, array("validation_groups" => array("Update")))
-            ->add("repository", "text")
+            ->add('repository', TextType::class)
+            ->setMethod('POST')
+            ->setAction($this->generateUrl('edit_package', ['name' => $package->getName()]))
             ->getForm();
             ->getForm();
 
 
         $form->handleRequest($req);
         $form->handleRequest($req);
@@ -800,7 +805,7 @@ class PackageController extends Controller
             throw new AccessDeniedException;
             throw new AccessDeniedException;
         }
         }
 
 
-        $form = $this->createForm(new AbandonedType());
+        $form = $this->createForm(AbandonedType::class);
         $form->handleRequest($request);
         $form->handleRequest($request);
         if ($form->isValid()) {
         if ($form->isValid()) {
             $package->setAbandoned(true);
             $package->setAbandoned(true);
@@ -1015,7 +1020,7 @@ class PackageController extends Controller
 
 
         if ($this->isGranted('ROLE_EDIT_PACKAGES') || $package->getMaintainers()->contains($user)) {
         if ($this->isGranted('ROLE_EDIT_PACKAGES') || $package->getMaintainers()->contains($user)) {
             $maintainerRequest = new MaintainerRequest();
             $maintainerRequest = new MaintainerRequest();
-            return $this->createForm(new AddMaintainerRequestType(), $maintainerRequest);
+            return $this->createForm(AddMaintainerRequestType::class, $maintainerRequest);
         }
         }
     }
     }
 
 
@@ -1027,7 +1032,9 @@ class PackageController extends Controller
 
 
         if ($this->isGranted('ROLE_EDIT_PACKAGES') || $package->getMaintainers()->contains($user)) {
         if ($this->isGranted('ROLE_EDIT_PACKAGES') || $package->getMaintainers()->contains($user)) {
             $maintainerRequest = new MaintainerRequest();
             $maintainerRequest = new MaintainerRequest();
-            return $this->createForm(new RemoveMaintainerRequestType(), $maintainerRequest, array('package'=>$package));
+            return $this->createForm(RemoveMaintainerRequestType::class, $maintainerRequest, array(
+                'package' => $package,
+            ));
         }
         }
     }
     }
 
 

+ 18 - 18
src/Packagist/WebBundle/Controller/WebController.php

@@ -21,6 +21,7 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
 use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
 use Symfony\Component\HttpFoundation\JsonResponse;
 use Symfony\Component\HttpFoundation\JsonResponse;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
 
 
 /**
 /**
  * @author Jordi Boggiano <j.boggiano@seld.be>
  * @author Jordi Boggiano <j.boggiano@seld.be>
@@ -38,16 +39,17 @@ class WebController extends Controller
 
 
     public function searchFormAction(Request $req)
     public function searchFormAction(Request $req)
     {
     {
-        $form = $this->createForm(new SearchQueryType, new SearchQuery);
+        $form = $this->createForm(SearchQueryType::class, new SearchQuery(), [
+            'action' => $this->generateUrl('search.ajax'),
+            'method' => 'GET',
+        ]);
 
 
         $filteredOrderBys = $this->getFilteredOrderedBys($req);
         $filteredOrderBys = $this->getFilteredOrderedBys($req);
         $normalizedOrderBys = $this->getNormalizedOrderBys($filteredOrderBys);
         $normalizedOrderBys = $this->getNormalizedOrderBys($filteredOrderBys);
 
 
         $this->computeSearchQuery($req, $filteredOrderBys);
         $this->computeSearchQuery($req, $filteredOrderBys);
 
 
-        if ($req->query->has('search_query')) {
-            $form->submit($req);
-        }
+        $form->handleRequest($req);
 
 
         $orderBysViewModel = $this->getOrderBysViewModel($req, $normalizedOrderBys);
         $orderBysViewModel = $this->getOrderBysViewModel($req, $normalizedOrderBys);
         return $this->render('PackagistWebBundle:Web:searchForm.html.twig', array(
         return $this->render('PackagistWebBundle:Web:searchForm.html.twig', array(
@@ -62,7 +64,7 @@ class WebController extends Controller
      */
      */
     public function searchAction(Request $req)
     public function searchAction(Request $req)
     {
     {
-        $form = $this->createForm(new SearchQueryType, new SearchQuery);
+        $form = $this->createForm(SearchQueryType::class, new SearchQuery());
 
 
         $filteredOrderBys = $this->getFilteredOrderedBys($req);
         $filteredOrderBys = $this->getFilteredOrderedBys($req);
         $normalizedOrderBys = $this->getNormalizedOrderBys($filteredOrderBys);
         $normalizedOrderBys = $this->getNormalizedOrderBys($filteredOrderBys);
@@ -107,18 +109,16 @@ class WebController extends Controller
                 $select->addSorts($normalizedOrderBys);
                 $select->addSorts($normalizedOrderBys);
             }
             }
 
 
-            if ($req->query->has('search_query')) {
-                $form->submit($req);
+            $form->handleRequest($req);
 
 
-                if ($form->isValid()) {
-                    $escapedQuery = $select->getHelper()->escapeTerm($form->getData()->getQuery());
-                    $escapedQuery = preg_replace('/(^| )\\\\-(\S)/', '$1-$2', $escapedQuery);
-                    $escapedQuery = preg_replace('/(^| )\\\\\+(\S)/', '$1+$2', $escapedQuery);
-                    if ((substr_count($escapedQuery, '"') % 2) == 0) {
-                        $escapedQuery = str_replace('\\"', '"', $escapedQuery);
-                    }
-                    $select->setQuery($escapedQuery);
+            if ($form->isValid()) {
+                $escapedQuery = $select->getHelper()->escapeTerm($form->getData()->getQuery());
+                $escapedQuery = preg_replace('/(^| )\\\\-(\S)/', '$1-$2', $escapedQuery);
+                $escapedQuery = preg_replace('/(^| )\\\\\+(\S)/', '$1+$2', $escapedQuery);
+                if ((substr_count($escapedQuery, '"') % 2) == 0) {
+                    $escapedQuery = str_replace('\\"', '"', $escapedQuery);
                 }
                 }
+                $select->setQuery($escapedQuery);
             }
             }
 
 
             $paginator = new Pagerfanta(new SolariumAdapter($solarium, $select));
             $paginator = new Pagerfanta(new SolariumAdapter($solarium, $select));
@@ -162,9 +162,9 @@ class WebController extends Controller
 
 
                 foreach ($paginator as $package) {
                 foreach ($paginator as $package) {
                     if (ctype_digit((string) $package->id)) {
                     if (ctype_digit((string) $package->id)) {
-                        $url = $this->generateUrl('view_package', array('name' => $package->name), true);
+                        $url = $this->generateUrl('view_package', array('name' => $package->name), UrlGeneratorInterface::ABSOLUTE_URL);
                     } else {
                     } else {
-                        $url = $this->generateUrl('view_providers', array('name' => $package->name), true);
+                        $url = $this->generateUrl('view_providers', array('name' => $package->name), UrlGeneratorInterface::ABSOLUTE_URL);
                     }
                     }
 
 
                     $row = array(
                     $row = array(
@@ -197,7 +197,7 @@ class WebController extends Controller
                     if ($perPage !== 15) {
                     if ($perPage !== 15) {
                         $params['per_page'] = $perPage;
                         $params['per_page'] = $perPage;
                     }
                     }
-                    $result['next'] = $this->generateUrl('search', $params, true);
+                    $result['next'] = $this->generateUrl('search', $params, UrlGeneratorInterface::ABSOLUTE_URL);
                 }
                 }
 
 
                 return JsonResponse::create($result)->setCallback($req->query->get('callback'));
                 return JsonResponse::create($result)->setCallback($req->query->get('callback'));

+ 1 - 1
src/Packagist/WebBundle/Entity/User.php

@@ -14,7 +14,7 @@ namespace Packagist\WebBundle\Entity;
 
 
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\ORM\Mapping as ORM;
 use Doctrine\ORM\Mapping as ORM;
-use FOS\UserBundle\Entity\User as BaseUser;
+use FOS\UserBundle\Model\User as BaseUser;
 
 
 /**
 /**
  * @ORM\Entity(repositoryClass="Packagist\WebBundle\Entity\UserRepository")
  * @ORM\Entity(repositoryClass="Packagist\WebBundle\Entity\UserRepository")

+ 46 - 0
src/Packagist/WebBundle/EventListener/RegistrationListener.php

@@ -0,0 +1,46 @@
+<?php
+
+namespace Packagist\WebBundle\EventListener;
+
+use FOS\UserBundle\Event\FormEvent;
+use FOS\UserBundle\FOSUserEvents;
+use FOS\UserBundle\Util\TokenGenerator;
+use Packagist\WebBundle\Entity\User;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * @author Sullivan Senechal <soullivaneuh@gmail.com>
+ */
+class RegistrationListener implements EventSubscriberInterface
+{
+    /**
+     * @var TokenGenerator
+     */
+    private $tokenGenerator;
+
+    /**
+     * @param TokenGenerator $tokenGenerator
+     */
+    public function __construct(TokenGenerator $tokenGenerator)
+    {
+        $this->tokenGenerator = $tokenGenerator;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public static function getSubscribedEvents()
+    {
+        return [
+            FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess'
+        ];
+    }
+
+    public function onRegistrationSuccess(FormEvent $event)
+    {
+        /** @var User $user */
+        $user = $event->getForm()->getData();
+        $apiToken = substr($this->tokenGenerator->generateToken(), 0, 20);
+        $user->setApiToken($apiToken);
+    }
+}

+ 0 - 27
src/Packagist/WebBundle/Form/Handler/RegistrationFormHandler.php

@@ -1,27 +0,0 @@
-<?php
-
-/*
- * This file is part of Packagist.
- *
- * (c) Jordi Boggiano <j.boggiano@seld.be>
- *     Nils Adermann <naderman@naderman.de>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Packagist\WebBundle\Form\Handler;
-
-use FOS\UserBundle\Form\Handler\RegistrationFormHandler as BaseHandler;
-use FOS\UserBundle\Model\UserInterface;
-
-class RegistrationFormHandler extends BaseHandler
-{
-    protected function onSuccess(UserInterface $user, $confirmation)
-    {
-        $apiToken = substr($this->tokenGenerator->generateToken(), 0, 20);
-        $user->setApiToken($apiToken);
-
-        parent::onSuccess($user, $confirmation);
-    }
-}

+ 4 - 3
src/Packagist/WebBundle/Form/Type/AbandonedType.php

@@ -13,6 +13,7 @@
 namespace Packagist\WebBundle\Form\Type;
 namespace Packagist\WebBundle\Form\Type;
 
 
 use Symfony\Component\Form\AbstractType;
 use Symfony\Component\Form\AbstractType;
+use Symfony\Component\Form\Extension\Core\Type\TextType;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\Form\FormBuilderInterface;
 
 
 /**
 /**
@@ -32,7 +33,7 @@ class AbandonedType extends AbstractType
     {
     {
         $builder->add(
         $builder->add(
             'replacement',
             'replacement',
-            'text',
+            TextType::class,
             array(
             array(
                 'required' => false,
                 'required' => false,
                 'label'    => 'Replacement package',
                 'label'    => 'Replacement package',
@@ -42,9 +43,9 @@ class AbandonedType extends AbstractType
     }
     }
 
 
     /**
     /**
-     * @return string
+     * {@inheritdoc}
      */
      */
-    public function getName()
+    public function getBlockPrefix()
     {
     {
         return 'package';
         return 'package';
     }
     }

+ 8 - 3
src/Packagist/WebBundle/Form/Type/AddMaintainerRequestType.php

@@ -12,6 +12,8 @@
 
 
 namespace Packagist\WebBundle\Form\Type;
 namespace Packagist\WebBundle\Form\Type;
 
 
+use FOS\UserBundle\Form\Type\UsernameFormType;
+use Packagist\WebBundle\Form\Model\MaintainerRequest;
 use Symfony\Component\Form\AbstractType;
 use Symfony\Component\Form\AbstractType;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 use Symfony\Component\OptionsResolver\OptionsResolver;
@@ -23,17 +25,20 @@ class AddMaintainerRequestType extends AbstractType
 {
 {
     public function buildForm(FormBuilderInterface $builder, array $options)
     public function buildForm(FormBuilderInterface $builder, array $options)
     {
     {
-        $builder->add('user', 'fos_user_username');
+        $builder->add('user', UsernameFormType::class);
     }
     }
 
 
     public function configureOptions(OptionsResolver $resolver)
     public function configureOptions(OptionsResolver $resolver)
     {
     {
         $resolver->setDefaults(array(
         $resolver->setDefaults(array(
-            'data_class' => 'Packagist\WebBundle\Form\Model\MaintainerRequest',
+            'data_class' => MaintainerRequest::class,
         ));
         ));
     }
     }
 
 
-    public function getName()
+    /**
+     * {@inheritdoc}
+     */
+    public function getBlockPrefix()
     {
     {
         return 'add_maintainer_form';
         return 'add_maintainer_form';
     }
     }

+ 8 - 3
src/Packagist/WebBundle/Form/Type/OAuthRegistrationFormType.php

@@ -12,7 +12,9 @@
 
 
 namespace Packagist\WebBundle\Form\Type;
 namespace Packagist\WebBundle\Form\Type;
 
 
+use Packagist\WebBundle\Entity\User;
 use Symfony\Component\Form\AbstractType;
 use Symfony\Component\Form\AbstractType;
+use Symfony\Component\Form\Extension\Core\Type\EmailType;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 
 
@@ -22,20 +24,23 @@ class OAuthRegistrationFormType extends AbstractType
     {
     {
         $builder
         $builder
             ->add('username', null, array('label' => 'form.username', 'translation_domain' => 'FOSUserBundle'))
             ->add('username', null, array('label' => 'form.username', 'translation_domain' => 'FOSUserBundle'))
-            ->add('email', 'email', array('label' => 'form.email', 'translation_domain' => 'FOSUserBundle'))
+            ->add('email', EmailType::class, array('label' => 'form.email', 'translation_domain' => 'FOSUserBundle'))
         ;
         ;
     }
     }
 
 
     public function configureOptions(OptionsResolver $resolver)
     public function configureOptions(OptionsResolver $resolver)
     {
     {
         $resolver->setDefaults(array(
         $resolver->setDefaults(array(
-            'data_class' => 'Packagist\WebBundle\Entity\User',
+            'data_class' => User::class,
             'intention'  => 'registration',
             'intention'  => 'registration',
             'validation_groups' => array('Default', 'Profile'),
             'validation_groups' => array('Default', 'Profile'),
         ));
         ));
     }
     }
 
 
-    public function getName()
+    /**
+     * {@inheritdoc}
+     */
+    public function getBlockPrefix()
     {
     {
         return 'packagist_oauth_user_registration';
         return 'packagist_oauth_user_registration';
     }
     }

+ 8 - 4
src/Packagist/WebBundle/Form/Type/OrderByType.php

@@ -12,7 +12,9 @@
 
 
 namespace Packagist\WebBundle\Form\Type;
 namespace Packagist\WebBundle\Form\Type;
 
 
+use Packagist\WebBundle\Form\Model\OrderBy;
 use Symfony\Component\Form\AbstractType;
 use Symfony\Component\Form\AbstractType;
+use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 
 
@@ -24,7 +26,7 @@ class OrderByType extends AbstractType
     public function buildForm(FormBuilderInterface $builder, array $options)
     public function buildForm(FormBuilderInterface $builder, array $options)
     {
     {
         $builder->add('sort');
         $builder->add('sort');
-        $builder->add('order', 'choice', array(
+        $builder->add('order', ChoiceType::class, array(
             'choices' => array(
             'choices' => array(
                 'asc' => 'asc',
                 'asc' => 'asc',
                 'desc' => 'desc'
                 'desc' => 'desc'
@@ -35,13 +37,15 @@ class OrderByType extends AbstractType
     public function configureOptions(OptionsResolver $resolver)
     public function configureOptions(OptionsResolver $resolver)
     {
     {
         $resolver->setDefaults(array(
         $resolver->setDefaults(array(
-            'data_class' => 'Packagist\WebBundle\Form\Model\OrderBy',
+            'data_class' => OrderBy::class,
             'csrf_protection' => false,
             'csrf_protection' => false,
         ));
         ));
     }
     }
 
 
-
-    public function getName()
+    /**
+     * {@inheritdoc}
+     */
+    public function getBlockPrefix()
     {
     {
         return 'order_by';
         return 'order_by';
     }
     }

+ 8 - 3
src/Packagist/WebBundle/Form/Type/PackageType.php

@@ -12,7 +12,9 @@
 
 
 namespace Packagist\WebBundle\Form\Type;
 namespace Packagist\WebBundle\Form\Type;
 
 
+use Packagist\WebBundle\Entity\Package;
 use Symfony\Component\Form\AbstractType;
 use Symfony\Component\Form\AbstractType;
+use Symfony\Component\Form\Extension\Core\Type\TextType;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 
 
@@ -23,7 +25,7 @@ class PackageType extends AbstractType
 {
 {
     public function buildForm(FormBuilderInterface $builder, array $options)
     public function buildForm(FormBuilderInterface $builder, array $options)
     {
     {
-        $builder->add('repository', 'text', array(
+        $builder->add('repository', TextType::class, array(
             'label' => 'Repository URL (Git/Svn/Hg)',
             'label' => 'Repository URL (Git/Svn/Hg)',
             'attr'  => array(
             'attr'  => array(
                 'placeholder' => 'i.e.: git://github.com/composer/composer.git',
                 'placeholder' => 'i.e.: git://github.com/composer/composer.git',
@@ -34,11 +36,14 @@ class PackageType extends AbstractType
     public function configureOptions(OptionsResolver $resolver)
     public function configureOptions(OptionsResolver $resolver)
     {
     {
         $resolver->setDefaults(array(
         $resolver->setDefaults(array(
-            'data_class' => 'Packagist\WebBundle\Entity\Package',
+            'data_class' => Package::class,
         ));
         ));
     }
     }
 
 
-    public function getName()
+    /**
+     * {@inheritdoc}
+     */
+    public function getBlockPrefix()
     {
     {
         return 'package';
         return 'package';
     }
     }

+ 4 - 1
src/Packagist/WebBundle/Form/Type/ProfileFormType.php

@@ -29,7 +29,10 @@ class ProfileFormType extends BaseType
         ));
         ));
     }
     }
 
 
-    public function getName()
+    /**
+     * {@inheritdoc}
+     */
+    public function getBlockPrefix()
     {
     {
         return 'packagist_user_profile';
         return 'packagist_user_profile';
     }
     }

+ 8 - 3
src/Packagist/WebBundle/Form/Type/RemoveMaintainerRequestType.php

@@ -15,6 +15,8 @@ namespace Packagist\WebBundle\Form\Type;
 use Doctrine\ORM\EntityRepository;
 use Doctrine\ORM\EntityRepository;
 use Packagist\WebBundle\Entity\Package;
 use Packagist\WebBundle\Entity\Package;
 use Packagist\WebBundle\Entity\User;
 use Packagist\WebBundle\Entity\User;
+use Packagist\WebBundle\Form\Model\MaintainerRequest;
+use Symfony\Bridge\Doctrine\Form\Type\EntityType;
 use Symfony\Component\Form\AbstractType;
 use Symfony\Component\Form\AbstractType;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 use Symfony\Component\OptionsResolver\OptionsResolver;
@@ -26,7 +28,7 @@ class RemoveMaintainerRequestType extends AbstractType
 {
 {
     public function buildForm(FormBuilderInterface $builder, array $options)
     public function buildForm(FormBuilderInterface $builder, array $options)
     {
     {
-        $builder->add('user', 'entity', array(
+        $builder->add('user', EntityType::class, array(
             'class' => 'PackagistWebBundle:User',
             'class' => 'PackagistWebBundle:User',
             'query_builder' => function(EntityRepository $er) use ($options) {
             'query_builder' => function(EntityRepository $er) use ($options) {
                 return $er->getPackageMaintainersQueryBuilder($options['package'], $options['excludeUser']);
                 return $er->getPackageMaintainersQueryBuilder($options['package'], $options['excludeUser']);
@@ -39,11 +41,14 @@ class RemoveMaintainerRequestType extends AbstractType
         $resolver->setRequired(array('package'));
         $resolver->setRequired(array('package'));
         $resolver->setDefaults(array(
         $resolver->setDefaults(array(
             'excludeUser' => null,
             'excludeUser' => null,
-            'data_class' => 'Packagist\WebBundle\Form\Model\MaintainerRequest'
+            'data_class' => MaintainerRequest::class
         ));
         ));
     }
     }
 
 
-    public function getName()
+    /**
+     * {@inheritdoc}
+     */
+    public function getBlockPrefix()
     {
     {
         return 'remove_maintainer_form';
         return 'remove_maintainer_form';
     }
     }

+ 11 - 5
src/Packagist/WebBundle/Form/Type/SearchQueryType.php

@@ -12,7 +12,10 @@
 
 
 namespace Packagist\WebBundle\Form\Type;
 namespace Packagist\WebBundle\Form\Type;
 
 
+use Packagist\WebBundle\Form\Model\SearchQuery;
 use Symfony\Component\Form\AbstractType;
 use Symfony\Component\Form\AbstractType;
+use Symfony\Component\Form\Extension\Core\Type\CollectionType;
+use Symfony\Component\Form\Extension\Core\Type\SearchType;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\Form\FormBuilderInterface;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 use Symfony\Component\OptionsResolver\OptionsResolver;
 
 
@@ -23,9 +26,9 @@ class SearchQueryType extends AbstractType
 {
 {
     public function buildForm(FormBuilderInterface $builder, array $options)
     public function buildForm(FormBuilderInterface $builder, array $options)
     {
     {
-        $builder->add('query', 'search');
-        $builder->add('orderBys', 'collection', array(
-            'type' => new OrderByType(),
+        $builder->add('query', SearchType::class);
+        $builder->add('orderBys', CollectionType::class, array(
+            'entry_type' => OrderByType::class,
             'allow_add' => true,
             'allow_add' => true,
             'allow_delete' => true,
             'allow_delete' => true,
             'prototype' => false,
             'prototype' => false,
@@ -35,12 +38,15 @@ class SearchQueryType extends AbstractType
     public function configureOptions(OptionsResolver $resolver)
     public function configureOptions(OptionsResolver $resolver)
     {
     {
         $resolver->setDefaults(array(
         $resolver->setDefaults(array(
-            'data_class' => 'Packagist\WebBundle\Form\Model\SearchQuery',
+            'data_class' => SearchQuery::class,
             'csrf_protection' => false,
             'csrf_protection' => false,
         ));
         ));
     }
     }
 
 
-    public function getName()
+    /**
+     * {@inheritdoc}
+     */
+    public function getBlockPrefix()
     {
     {
         return 'search_query';
         return 'search_query';
     }
     }

+ 5 - 5
src/Packagist/WebBundle/Menu/MenuBuilder.php

@@ -11,15 +11,15 @@ class MenuBuilder
     private $username;
     private $username;
 
 
     /**
     /**
-     * @param FactoryInterface $factory
-     * @param TokenStorageInterface $securityContext
+     * @param FactoryInterface      $factory
+     * @param TokenStorageInterface $tokenStorage
      */
      */
-    public function __construct(FactoryInterface $factory, TokenStorageInterface $securityContext)
+    public function __construct(FactoryInterface $factory, TokenStorageInterface $tokenStorage)
     {
     {
         $this->factory = $factory;
         $this->factory = $factory;
 
 
-        if ($securityContext->getToken() && $securityContext->getToken()->getUser()) {
-            $this->username = $securityContext->getToken()->getUser()->getUsername();
+        if ($tokenStorage->getToken() && $tokenStorage->getToken()->getUser()) {
+            $this->username = $tokenStorage->getToken()->getUser()->getUsername();
         }
         }
     }
     }
 
 

+ 2 - 2
src/Packagist/WebBundle/Model/PackageManager.php

@@ -64,7 +64,7 @@ class PackageManager
                 try {
                 try {
                     $this->mailer->send($message);
                     $this->mailer->send($message);
                 } catch (\Swift_TransportException $e) {
                 } catch (\Swift_TransportException $e) {
-                    $this->logger->err('['.get_class($e).'] '.$e->getMessage());
+                    $this->logger->error('['.get_class($e).'] '.$e->getMessage());
 
 
                     return false;
                     return false;
                 }
                 }
@@ -93,7 +93,7 @@ class PackageManager
         try {
         try {
             $this->mailer->send($message);
             $this->mailer->send($message);
         } catch (\Swift_TransportException $e) {
         } catch (\Swift_TransportException $e) {
-            $this->logger->err('['.get_class($e).'] '.$e->getMessage());
+            $this->logger->error('['.get_class($e).'] '.$e->getMessage());
 
 
             return false;
             return false;
         }
         }

+ 28 - 36
src/Packagist/WebBundle/Resources/config/services.yml

@@ -1,7 +1,7 @@
 services:
 services:
     packagist.twig.extension:
     packagist.twig.extension:
         class: Packagist\WebBundle\Twig\PackagistExtension
         class: Packagist\WebBundle\Twig\PackagistExtension
-        arguments: [ @doctrine ]
+        arguments: [ '@doctrine' ]
         tags:
         tags:
             - { name: twig.extension }
             - { name: twig.extension }
 
 
@@ -15,43 +15,42 @@ services:
         tags:
         tags:
             - { name: kernel.event_listener, event: kernel.response, method: onResponse }
             - { name: kernel.event_listener, event: kernel.response, method: onResponse }
 
 
+    packagist.registration_listener:
+        class: Packagist\WebBundle\EventListener\RegistrationListener
+        arguments: [ '@fos_user.util.token_generator' ]
+        tags:
+            - { name: kernel.event_subscriber }
+
     packagist.package_dumper:
     packagist.package_dumper:
         class: Packagist\WebBundle\Package\SymlinkDumper
         class: Packagist\WebBundle\Package\SymlinkDumper
-        arguments: [ @doctrine, @filesystem, @router, "%kernel.root_dir%/../web/", "%packagist_metadata_dir%", "%packagist_dumper_compress%" ]
+        arguments: [ '@doctrine', '@filesystem', '@router', '%kernel.root_dir%/../web/', '%packagist_metadata_dir%', '%packagist_dumper_compress%' ]
 
 
     packagist.user_provider:
     packagist.user_provider:
         class: Packagist\WebBundle\Security\Provider\UserProvider
         class: Packagist\WebBundle\Security\Provider\UserProvider
         public: false
         public: false
-        arguments: ["@fos_user.user_manager"]
+        arguments: ['@fos_user.user_manager', '@fos_user.user_provider.username_email']
 
 
     packagist.user_repository:
     packagist.user_repository:
         class: Packagist\WebBundle\Entity\UserRepository
         class: Packagist\WebBundle\Entity\UserRepository
-        factory_service: doctrine
-        factory_method: getRepository
-        arguments: ["PackagistWebBundle:User"]
+        factory: ['@doctrine', getRepository]
+        arguments: ['PackagistWebBundle:User']
 
 
     packagist.package_repository:
     packagist.package_repository:
         class: Packagist\WebBundle\Entity\PackageRepository
         class: Packagist\WebBundle\Entity\PackageRepository
-        factory_service: doctrine
-        factory_method: getRepository
-        arguments: ["PackagistWebBundle:Package"]
+        factory: ['@doctrine', getRepository]
+        arguments: ['PackagistWebBundle:Package']
 
 
     packagist.package_updater:
     packagist.package_updater:
         class: Packagist\WebBundle\Package\Updater
         class: Packagist\WebBundle\Package\Updater
-        arguments: [@doctrine]
-
-    packagist.form.handler.registration:
-        class: Packagist\WebBundle\Form\Handler\RegistrationFormHandler
-        parent: fos_user.registration.form.handler.default
-        scope: request
+        arguments: ['@doctrine']
 
 
     fos_user.util.user_manipulator:
     fos_user.util.user_manipulator:
         class: Packagist\WebBundle\Util\UserManipulator
         class: Packagist\WebBundle\Util\UserManipulator
-        arguments: [@fos_user.user_manager, @fos_user.util.token_generator]
+        arguments: ['@fos_user.user_manager', '@fos_user.util.token_generator']
 
 
     packagist.oauth.registration_form_handler:
     packagist.oauth.registration_form_handler:
         class: Packagist\WebBundle\Form\Handler\OAuthRegistrationFormHandler
         class: Packagist\WebBundle\Form\Handler\OAuthRegistrationFormHandler
-        arguments: [@fos_user.user_manager, @fos_user.util.token_generator]
+        arguments: ['@fos_user.user_manager', '@fos_user.util.token_generator']
 
 
     packagist.oauth.registration_form_type:
     packagist.oauth.registration_form_type:
         class: Packagist\WebBundle\Form\Type\OAuthRegistrationFormType
         class: Packagist\WebBundle\Form\Type\OAuthRegistrationFormType
@@ -59,8 +58,7 @@ services:
             - { name: form.type, alias: packagist_oauth_user_registration }
             - { name: form.type, alias: packagist_oauth_user_registration }
 
 
     packagist.oauth.registration_form:
     packagist.oauth.registration_form:
-        factory_method: create
-        factory_service: form.factory
+        factory: ['@form.factory', create]
         class: Symfony\Component\Form\Form
         class: Symfony\Component\Form\Form
         arguments:
         arguments:
             - 'packagist_oauth_user_registration'
             - 'packagist_oauth_user_registration'
@@ -68,22 +66,22 @@ services:
     packagist.download_manager:
     packagist.download_manager:
         class: Packagist\WebBundle\Model\DownloadManager
         class: Packagist\WebBundle\Model\DownloadManager
         arguments:
         arguments:
-            - @snc_redis.default_client
+            - '@snc_redis.default_client'
 
 
     packagist.favorite_manager:
     packagist.favorite_manager:
         class: Packagist\WebBundle\Model\FavoriteManager
         class: Packagist\WebBundle\Model\FavoriteManager
         arguments:
         arguments:
-            - @snc_redis.default_client
-            - @packagist.package_repository
-            - @packagist.user_repository
+            - '@snc_redis.default_client'
+            - '@packagist.package_repository'
+            - '@packagist.user_repository'
 
 
     packagist.package_manager:
     packagist.package_manager:
         class: Packagist\WebBundle\Model\PackageManager
         class: Packagist\WebBundle\Model\PackageManager
         arguments:
         arguments:
-            - @doctrine.orm.entity_manager
-            - @mailer
-            - @twig
-            - @logger
+            - '@doctrine.orm.entity_manager'
+            - '@mailer'
+            - '@twig'
+            - '@logger'
             - { from: %mailer_from_email%, fromName: %mailer_from_name% }
             - { from: %mailer_from_email%, fromName: %mailer_from_name% }
 
 
     packagist.profile.form.type:
     packagist.profile.form.type:
@@ -94,23 +92,17 @@ services:
 
 
     packagist.menu_builder:
     packagist.menu_builder:
         class: Packagist\WebBundle\Menu\MenuBuilder
         class: Packagist\WebBundle\Menu\MenuBuilder
-        arguments: [@knp_menu.factory, @security.token_storage]
+        arguments: ['@knp_menu.factory', '@security.token_storage']
 
 
     packagist.menu.user:
     packagist.menu.user:
         class: Knp\Menu\MenuItem
         class: Knp\Menu\MenuItem
-        factory_service: packagist.menu_builder
-        factory_method: createUserMenu
-        arguments: ["@request"]
-        scope: request
+        factory: ['@packagist.menu_builder', createUserMenu]
         tags:
         tags:
             - { name: knp_menu.menu, alias: user_menu }
             - { name: knp_menu.menu, alias: user_menu }
 
 
     packagist.menu.profile:
     packagist.menu.profile:
         class: Knp\Menu\MenuItem
         class: Knp\Menu\MenuItem
-        factory_service: packagist.menu_builder
-        factory_method: createProfileMenu
-        arguments: ["@request"]
-        scope: request
+        factory: ['@packagist.menu_builder', createProfileMenu]
         tags:
         tags:
             - { name: knp_menu.menu, alias: profile_menu }
             - { name: knp_menu.menu, alias: profile_menu }
 
 

+ 2 - 2
src/Packagist/WebBundle/Resources/views/Package/abandon.html.twig

@@ -8,11 +8,11 @@
 </h2>
 </h2>
 
 
 <section class="row">
 <section class="row">
-    <form method="post" {{ form_enctype(form) }} class="col-sm-6">
+    {{ form_start(form, { attr: { class: 'col-sm-6' } }) }}
         {{ form_widget(form) }}
         {{ form_widget(form) }}
 
 
         <input class="btn btn-block btn-default btn-lg" type="submit" value="Abandon Package" />
         <input class="btn btn-block btn-default btn-lg" type="submit" value="Abandon Package" />
-    </form>
+    {{ form_end(form) }}
 
 
     <div class="col-sm-6">
     <div class="col-sm-6">
         <p>You are about to mark this package as abandoned. This will alert users that this package will no longer be maintained.</p>
         <p>You are about to mark this package as abandoned. This will alert users that this package will no longer be maintained.</p>

+ 2 - 2
src/Packagist/WebBundle/Resources/views/Package/edit.html.twig

@@ -8,10 +8,10 @@
 <h2 class="title">Edit {{ package.name }}</h2>
 <h2 class="title">Edit {{ package.name }}</h2>
 
 
 <section class="row">
 <section class="row">
-    <form class="col-md-6" action="{{ path('edit_package', {'name': package.name}) }}" method="POST" {{ form_enctype(form) }}>
+    {{ form_start(form, { attr: { class: 'col-md-6' } }) }}
         {{ form_widget(form) }}
         {{ form_widget(form) }}
 
 
         <input class="btn btn-block btn-primary btn-lg" id="submit" type="submit" value="Update" />
         <input class="btn btn-block btn-primary btn-lg" id="submit" type="submit" value="Update" />
-    </form>
+    {{ form_end(form) }}
 </section>
 </section>
 {% endblock %}
 {% endblock %}

+ 2 - 2
src/Packagist/WebBundle/Resources/views/Package/submitPackage.html.twig

@@ -10,13 +10,13 @@
 <h2 class="title">Submit package</h2>
 <h2 class="title">Submit package</h2>
 
 
 <section class="row">
 <section class="row">
-    <form class="col-md-6" id="submit-package-form" action="{{ path('submit') }}" data-check-url="{{ path('submit.fetch_info') }}" method="POST" {{ form_enctype(form) }}>
+    {{ form_start(form, { attr: { class: 'col-md-6', data-check-url: path('submit.fetch_info') } }) }}
         {{ form_widget(form) }}
         {{ form_widget(form) }}
 
 
         {{ form_rest(form) }}
         {{ form_rest(form) }}
 
 
         <input class="btn btn-block btn-success btn-lg" id="submit" type="submit" value="Submit" />
         <input class="btn btn-block btn-success btn-lg" id="submit" type="submit" value="Submit" />
-    </form>
+    {{ form_end(form) }}
 
 
     <div class="col-md-6">
     <div class="col-md-6">
         <p>Please make sure you have read the package <a href="{{ path('about') }}#naming-your-package">naming conventions</a> before submitting your package. The authoritative name of your package will be taken from the composer.json file inside the master branch or trunk of your repository, and it can not be changed after that.</p>
         <p>Please make sure you have read the package <a href="{{ path('about') }}#naming-your-package">naming conventions</a> before submitting your package. The authoritative name of your package will be taken from the composer.json file inside the master branch or trunk of your repository, and it can not be changed after that.</p>

+ 10 - 4
src/Packagist/WebBundle/Resources/views/Package/viewPackage.html.twig

@@ -165,7 +165,10 @@
             {% if addMaintainerForm is defined or removeMaintainerForm is defined %}
             {% if addMaintainerForm is defined or removeMaintainerForm is defined %}
                 <div class="row">
                 <div class="row">
                     {% if addMaintainerForm is defined %}
                     {% if addMaintainerForm is defined %}
-                        <form id="add-maintainer-form" class="col-sm-6 col-md-3 col-md-offset-9 {{ show_add_maintainer_form|default(false) ? '': 'hidden' }}" action="{{ path('add_maintainer', {'name': package.name}) }}" method="POST" {{ form_enctype(addMaintainerForm) }}>
+                        {{ form_start(addMaintainerForm, {
+                            attr: { id: 'add-maintainer-form', class: 'col-sm-6 col-md-3 col-md-offset-9 ' ~ (show_add_maintainer_form|default(false) ? '': 'hidden') },
+                            action: path('add_maintainer', { 'name': package.name })
+                        }) }}
                             <div>
                             <div>
                                 <h4>Add Maintainer</h4>
                                 <h4>Add Maintainer</h4>
                                 <p>
                                 <p>
@@ -176,11 +179,14 @@
                                 {{ form_rest(addMaintainerForm) }}
                                 {{ form_rest(addMaintainerForm) }}
                                 <input class="btn btn-block btn-success btn-lg" type="submit" value="Add Maintainer" />
                                 <input class="btn btn-block btn-success btn-lg" type="submit" value="Add Maintainer" />
                             </div>
                             </div>
-                        </form>
+                        {{ form_end(addMaintainerForm) }}
                     {% endif %}
                     {% endif %}
 
 
                     {% if removeMaintainerForm is defined %}
                     {% if removeMaintainerForm is defined %}
-                        <form id="remove-maintainer-form" class="col-sm-6 col-md-3 col-md-offset-9 {{ show_remove_maintainer_form|default(false) ? '': 'hidden' }}" action="{{ path('remove_maintainer', {'name': package.name}) }}" method="POST" {{ form_enctype(removeMaintainerForm) }}>
+                        {{ form_start(removeMaintainerForm, {
+                            attr: { id: 'remove-maintainer-form', class: 'col-sm-6 col-md-3 col-md-offset-9 ' ~ (show_remove_maintainer_form|default(false) ? '': 'hidden') },
+                            action: path('remove_maintainer', { 'name': package.name })
+                        }) }}
                             <div>
                             <div>
                                 <h4>Remove Maintainer</h4>
                                 <h4>Remove Maintainer</h4>
                                 <p>
                                 <p>
@@ -191,7 +197,7 @@
                                 {{ form_rest(removeMaintainerForm) }}
                                 {{ form_rest(removeMaintainerForm) }}
                                 <input class="btn btn-block btn-danger btn-lg" type="submit" value="Remove Maintainer" />
                                 <input class="btn btn-block btn-danger btn-lg" type="submit" value="Remove Maintainer" />
                             </div>
                             </div>
-                        </form>
+                        {{ form_end(removeMaintainerForm) }}
                     {% endif %}
                     {% endif %}
                 </div>
                 </div>
             {% endif %}
             {% endif %}

+ 2 - 3
src/Packagist/WebBundle/Resources/views/Web/searchForm.html.twig

@@ -1,4 +1,4 @@
-<form id="search-form" action="{{ path('search.ajax') }}" method="GET" {{ form_enctype(searchForm) }} autocomplete="off">
+{{ form_start(searchForm, { attr: { id: 'search-form', autocomplete: 'off' } }) }}
     <div class="{% if orderBys is defined %}sortable{% endif %} row">
     <div class="{% if orderBys is defined %}sortable{% endif %} row">
         <div class="hidden">{{ form_errors(searchForm.query) }}</div>
         <div class="hidden">{{ form_errors(searchForm.query) }}</div>
         <div class="{% if searchForm.vars.value.query is empty %}col-xs-12{% else %}col-xs-8{% endif %} js-search-field-wrapper col-md-9">
         <div class="{% if searchForm.vars.value.query is empty %}col-xs-12{% else %}col-xs-8{% endif %} js-search-field-wrapper col-md-9">
@@ -29,5 +29,4 @@
         </div>
         </div>
         {{ form_rest(searchForm) }}
         {{ form_rest(searchForm) }}
     </div>
     </div>
-</form>
-
+{{ form_end(searchForm) }}

+ 15 - 10
src/Packagist/WebBundle/Security/Provider/UserProvider.php

@@ -17,7 +17,6 @@ use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface;
 use HWI\Bundle\OAuthBundle\Security\Core\Exception\AccountNotLinkedException;
 use HWI\Bundle\OAuthBundle\Security\Core\Exception\AccountNotLinkedException;
 use HWI\Bundle\OAuthBundle\Security\Core\User\OAuthAwareUserProviderInterface;
 use HWI\Bundle\OAuthBundle\Security\Core\User\OAuthAwareUserProviderInterface;
 use Packagist\WebBundle\Entity\User;
 use Packagist\WebBundle\Entity\User;
-use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
 use Symfony\Component\Security\Core\User\UserInterface;
 use Symfony\Component\Security\Core\User\UserInterface;
 use Symfony\Component\Security\Core\User\UserProviderInterface;
 use Symfony\Component\Security\Core\User\UserProviderInterface;
 
 
@@ -29,11 +28,18 @@ class UserProvider implements OAuthAwareUserProviderInterface, UserProviderInter
     private $userManager;
     private $userManager;
 
 
     /**
     /**
-     * @param UserManagerInterface $userManager
+     * @var UserProviderInterface
      */
      */
-    public function __construct(UserManagerInterface $userManager)
+    private $userProvider;
+
+    /**
+     * @param UserManagerInterface  $userManager
+     * @param UserProviderInterface $userProvider
+     */
+    public function __construct(UserManagerInterface $userManager, UserProviderInterface $userProvider)
     {
     {
         $this->userManager = $userManager;
         $this->userManager = $userManager;
+        $this->userProvider = $userProvider;
     }
     }
 
 
     /**
     /**
@@ -43,8 +49,10 @@ class UserProvider implements OAuthAwareUserProviderInterface, UserProviderInter
     {
     {
         $username = $response->getUsername();
         $username = $response->getUsername();
 
 
+        /** @var User $previousUser */
         $previousUser = $this->userManager->findUserBy(array('githubId' => $username));
         $previousUser = $this->userManager->findUserBy(array('githubId' => $username));
 
 
+        /** @var User $user */
         $user->setGithubId($username);
         $user->setGithubId($username);
         $user->setGithubToken($response->getAccessToken());
         $user->setGithubToken($response->getAccessToken());
 
 
@@ -69,6 +77,7 @@ class UserProvider implements OAuthAwareUserProviderInterface, UserProviderInter
     public function loadUserByOAuthUserResponse(UserResponseInterface $response)
     public function loadUserByOAuthUserResponse(UserResponseInterface $response)
     {
     {
         $username = $response->getUsername();
         $username = $response->getUsername();
+        /** @var User $user */
         $user = $this->userManager->findUserBy(array('githubId' => $username));
         $user = $this->userManager->findUserBy(array('githubId' => $username));
 
 
         if (!$user) {
         if (!$user) {
@@ -88,11 +97,7 @@ class UserProvider implements OAuthAwareUserProviderInterface, UserProviderInter
      */
      */
     public function loadUserByUsername($usernameOrEmail)
     public function loadUserByUsername($usernameOrEmail)
     {
     {
-        $user = $this->userManager->findUserByUsernameOrEmail($usernameOrEmail);
-
-        if (!$user) {
-            throw new UsernameNotFoundException(sprintf('No user with name or email "%s" was found.', $usernameOrEmail));
-        }
+        $user = $this->userProvider->loadUserByUsername($usernameOrEmail);
 
 
         return $user;
         return $user;
     }
     }
@@ -102,7 +107,7 @@ class UserProvider implements OAuthAwareUserProviderInterface, UserProviderInter
      */
      */
     public function refreshUser(UserInterface $user)
     public function refreshUser(UserInterface $user)
     {
     {
-        return $this->userManager->refreshUser($user);
+        return $this->userProvider->refreshUser($user);
     }
     }
 
 
     /**
     /**
@@ -110,6 +115,6 @@ class UserProvider implements OAuthAwareUserProviderInterface, UserProviderInter
      */
      */
     public function supportsClass($class)
     public function supportsClass($class)
     {
     {
-        return $this->userManager->supportsClass($class);
+        return $this->userProvider->supportsClass($class);
     }
     }
 }
 }

+ 5 - 5
src/Packagist/WebBundle/Twig/PackagistExtension.php

@@ -19,17 +19,17 @@ class PackagistExtension extends \Twig_Extension
     public function getTests()
     public function getTests()
     {
     {
         return array(
         return array(
-            'existing_package' => new \Twig_Test_Method($this, 'packageExistsTest'),
-            'existing_provider' => new \Twig_Test_Method($this, 'providerExistsTest'),
-            'numeric' => new \Twig_Test_Method($this, 'numericTest'),
+            new \Twig_SimpleTest('existing_package', [$this, 'packageExistsTest']),
+            new \Twig_SimpleTest('existing_provider', [$this, 'providerExistsTest']),
+            new \Twig_SimpleTest('numeric', [$this, 'numericTest']),
         );
         );
     }
     }
 
 
     public function getFilters()
     public function getFilters()
     {
     {
         return array(
         return array(
-            'prettify_source_reference' => new \Twig_Filter_Method($this, 'prettifySourceReference'),
-            'gravatar_hash' => new \Twig_Filter_Method($this, 'generateGravatarHash')
+            new \Twig_SimpleFilter('prettify_source_reference', [$this, 'prettifySourceReference']),
+            new \Twig_SimpleFilter('gravatar_hash', [$this, 'generateGravatarHash'])
         );
         );
     }
     }
 
 

+ 5 - 3
web/app.php

@@ -5,7 +5,11 @@ ini_set('date.timezone', 'UTC');
 use Symfony\Component\ClassLoader\ApcClassLoader;
 use Symfony\Component\ClassLoader\ApcClassLoader;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Request;
 
 
-$loader = include __DIR__.'/../app/bootstrap.php.cache';
+/**
+ * @var \Symfony\Component\ClassLoader\ClassLoader
+ */
+$loader = require __DIR__.'/../app/autoload.php';
+include_once __DIR__.'/../app/bootstrap.php.cache';
 
 
 // Use APC for autoloading to improve performance.
 // Use APC for autoloading to improve performance.
 if (function_exists('apc_store')) {
 if (function_exists('apc_store')) {
@@ -14,8 +18,6 @@ if (function_exists('apc_store')) {
     $apcLoader->register(true);
     $apcLoader->register(true);
 }
 }
 
 
-include __DIR__.'/../app/AppKernel.php';
-
 $kernel = new AppKernel('prod', false);
 $kernel = new AppKernel('prod', false);
 $kernel->loadClassCache();
 $kernel->loadClassCache();
 $request = Request::createFromGlobals();
 $request = Request::createFromGlobals();

+ 5 - 3
web/app_dev.php

@@ -2,6 +2,7 @@
 
 
 ini_set('date.timezone', 'UTC');
 ini_set('date.timezone', 'UTC');
 
 
+use Composer\Autoload\ClassLoader;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\Debug\Debug;
 use Symfony\Component\Debug\Debug;
 
 
@@ -19,11 +20,12 @@ if (isset($_SERVER['HTTP_CLIENT_IP'])
     exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
     exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
 }
 }
 
 
-$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
+/**
+ * @var ClassLoader
+ */
+$loader = require_once __DIR__.'/../app/autoload.php';
 Debug::enable();
 Debug::enable();
 
 
-require_once __DIR__.'/../app/AppKernel.php';
-
 $kernel = new AppKernel('dev', true);
 $kernel = new AppKernel('dev', true);
 $kernel->loadClassCache();
 $kernel->loadClassCache();
 $request = Request::createFromGlobals();
 $request = Request::createFromGlobals();

部分文件因为文件数量过多而无法显示