Browse Source

Merge remote-tracking branch 'simensen/warn-on-similar'

Jordi Boggiano 12 years ago
parent
commit
8337d823d7

+ 20 - 1
src/Packagist/WebBundle/Controller/WebController.php

@@ -261,7 +261,26 @@ class WebController extends Controller
         if ('POST' === $req->getMethod()) {
             $form->bind($req);
             if ($form->isValid()) {
-                $response = array('status' => 'success', 'name' => $package->getName());
+                list($vendor, $name) = explode('/', $package->getName(), 2);
+
+                $existingPackages = $this->getDoctrine()
+                    ->getRepository('PackagistWebBundle:Package')
+                    ->createQueryBuilder('p')
+                    ->where('p.name LIKE ?0')
+                    ->setParameters(array('%/'.$name))
+                    ->getQuery()
+                    ->getResult();
+
+                $similar = array();
+
+                foreach ($existingPackages as $existingPackage) {
+                    $similar[] = array(
+                        'name' => $existingPackage->getName(),
+                        'url' => $this->generateUrl('view_package', array('name' => $existingPackage->getName()), true),
+                    );
+                }
+
+                $response = array('status' => 'success', 'name' => $package->getName(), 'similar' => $similar);
             } else {
                 $errors = array();
                 if ($form->hasErrors()) {

+ 18 - 0
src/Packagist/WebBundle/Resources/public/js/submitPackage.js

@@ -1,4 +1,5 @@
 (function ($) {
+    var showSimilarMax = 5;
     var onSubmit = function(e) {
         var success;
         $('div > ul, div.confirmation', this).remove();
@@ -11,6 +12,23 @@
                 });
                 $('#submit-package-form div').prepend('<ul>'+html+'</ul>');
             } else {
+                if (data.similar.length) {
+                    var $similar = $('<ul>');
+                    var limit = data.similar.length > showSimilarMax ? showSimilarMax : data.similar.length;
+                    for ( var i = 0; i < limit; i++ ) {
+                        var similar = data.similar[i];
+                        var $link = $('<a>').attr('href', similar.url).text(similar.name);
+                        $similar.append($('<li>').append($link))
+                    }
+                    if (limit != data.similar.length) {
+                        $similar.append($('<li>').text('And ' + (data.similar.length - limit) + ' more'));
+                    }
+                    $('#submit-package-form input[type="submit"]').before($('<div>').append(
+                        '<p><strong>Notice:</strong> One or more similarly named packages have already been submitted to Packagist. If this is a fork read the notice above regarding VCS Repositories.'
+                    ).append(
+                        '<p>Similarly named packages:'
+                    ).append($similar));
+                }
                 $('#submit-package-form input[type="submit"]').before(
                     '<div class="confirmation">The package name found for your repository is: <strong>'+data.name+'</strong>, press Submit to confirm.</div>'
                 );