public function addAction(Request $request)
{
$error = false;
$message = '';
$bundle = $request->request->get('bundle');
if (($request->isXmlHttpRequest() || 'POST' === $request->getMethod()) && null === $bundle) {
$error = true;
$message = 'Please enter a valid GitHub repo name (e.g. KnpLabs/KnpBundles).';
}
if (!$error && ($request->isXmlHttpRequest() || 'POST' === $request->getMethod())) {
$bundle = trim(str_replace(array('http://github.com', 'https://github.com', '.git'), '', $bundle), '/');
if (preg_match('/^[a-z0-9-]+\\/[a-z0-9-]+$/i', $bundle)) {
list($ownerName, $name) = explode('/', $bundle);
$url = $this->generateUrl('bundle_show', array('ownerName' => $ownerName, 'name' => $name));
if ($this->getRepository('Bundle')->findOneBy(array('ownerName' => $ownerName, 'name' => $name))) {
if (!$request->isXmlHttpRequest()) {
return $this->redirect($url);
}
$error = true;
$message = 'Specified bundle already <a href="' . $url . '">exists</a> at KnpBundles.com!';
}
if (!$error) {
/** @var $updater \Knp\Bundle\KnpBundlesBundle\Updater\Updater */
$updater = $this->get('knp_bundles.updater');
if ($updater->addBundle($bundle)) {
if (!$request->isXmlHttpRequest()) {
return $this->redirect($url);
}
$message = '<strong>Hey, friend!</strong> Thanks for adding <a href="' . $url . '">your bundle</a> to our database!';
} else {
$error = true;
$message = 'Specified repository is not valid Symfony2 bundle!';
}
}
} else {
$error = true;
$message = 'Please enter a valid GitHub repo name (e.g. KnpLabs/KnpBundles).';
}
}
if (!$request->isXmlHttpRequest()) {
$bundles = $this->getRepository('Bundle')->findAllSortedBy('createdAt', 'desc', 5);
return $this->render('KnpBundlesBundle:Bundle:add.html.twig', array('bundle' => $bundle, 'bundles' => $bundles, 'error' => $error, 'errorMessage' => $message));
}
return new JsonResponse(array('message' => $message), $error ? 400 : 201);
}