--- /dev/null
+<?php
+
+namespace Application\Migrations;
+
+use Doctrine\DBAL\Migrations\AbstractMigration;
+use Doctrine\DBAL\Schema\Schema;
+use Symfony\Component\DependencyInjection\ContainerAwareInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Added `given_url` field in entry table.
+ */
+class Version20170710125843 extends AbstractMigration implements ContainerAwareInterface
+{
+ /**
+ * @var ContainerInterface
+ */
+ private $container;
+
+ public function setContainer(ContainerInterface $container = null)
+ {
+ $this->container = $container;
+ }
+
+ /**
+ * @param Schema $schema
+ */
+ public function up(Schema $schema)
+ {
+ $entryTable = $schema->getTable($this->getTable('entry'));
+
+ $this->skipIf($entryTable->hasColumn('given_url'), 'It seems that you already played this migration.');
+
+ $entryTable->addColumn('given_url', 'text', [
+ 'notnull' => false,
+ ]);
+ }
+
+ /**
+ * @param Schema $schema
+ */
+ public function down(Schema $schema)
+ {
+ $entryTable = $schema->getTable($this->getTable('entry'));
+
+ $this->skipIf(!$entryTable->hasColumn('given_url'), 'It seems that you already played this migration.');
+
+ $entryTable->dropColumn('given_url');
+ }
+
+ private function getTable($tableName)
+ {
+ return $this->container->getParameter('database_table_prefix') . $tableName;
+ }
+}
return $this->redirect($this->generateUrl('view', ['id' => $existingEntry->getId()]));
}
+ $entry->setGivenUrl($entry->getUrl());
$this->updateEntry($entry);
$em = $this->getDoctrine()->getManager();
*/
private $title;
+ /**
+ * @var string
+ *
+ * @ORM\Column(name="given_url", type="text", nullable=true)
+ *
+ * @Groups({"entries_for_user", "export_all"})
+ */
+ private $givenUrl;
+
/**
* @var string
*
return $this->title;
}
+ /**
+ * Set given url.
+ *
+ * @param string $givenUrl
+ *
+ * @return Entry
+ */
+ public function setGivenUrl($givenUrl)
+ {
+ $this->givenUrl = $givenUrl;
+
+ return $this;
+ }
+
+ /**
+ * Get given Url.
+ *
+ * @return string
+ */
+ public function getGivenUrl()
+ {
+ return $this->givenUrl;
+ }
+
/**
* Set url.
*
*/
public function findByUrlAndUserId($url, $userId)
{
+ $url = urldecode($url);
+
$res = $this->createQueryBuilder('e')
- ->where('e.url = :url')->setParameter('url', urldecode($url))
+ ->where('e.url = :url')->setParameter('url', $url)
+ ->orWhere('e.givenUrl = :url')->setParameter('url', $url)
->andWhere('e.user = :user_id')->setParameter('user_id', $userId)
->getQuery()
->getResult();
$this->assertContains('/view/', $client->getResponse()->getTargetUrl());
}
+ public function testPostNewOkUrlExistWithRedirection()
+ {
+ $this->logInAs('admin');
+ $client = $this->getClient();
+
+ $url = 'https://fashionunited.com/news/business/jigsaw-posts-8-percent-increase-in-annual-sales/2017070316404';
+
+ $crawler = $client->request('GET', '/new');
+
+ $this->assertSame(200, $client->getResponse()->getStatusCode());
+
+ $form = $crawler->filter('form[name=entry]')->form();
+
+ $data = [
+ 'entry[url]' => $url,
+ ];
+
+ $client->submit($form, $data);
+
+ $crawler = $client->request('GET', '/new');
+
+ $this->assertSame(200, $client->getResponse()->getStatusCode());
+
+ $form = $crawler->filter('form[name=entry]')->form();
+
+ $data = [
+ 'entry[url]' => $url,
+ ];
+
+ $client->submit($form, $data);
+
+ $this->assertSame(302, $client->getResponse()->getStatusCode());
+ $this->assertContains('/view/', $client->getResponse()->getTargetUrl());
+ }
+
/**
* This test will require an internet connection.
*/