@grunt
test: ## Launch wallabag testsuite
- @if [ ! -d "vendor/phpunit" ]; then composer install; fi
- @ant prepare && vendor/phpunit/phpunit/phpunit -v
+ @ant prepare && bin/simple-phpunit -v
release: ## Create a package. Need a VERSION parameter (eg: `make release VERSION=master`).
ifndef VERSION
{
$entryTable = $schema->getTable($this->getTable('entry'));
- $this->skipIf($entryTable->hasColumn('uuid'), 'It seems that you already played this migration.');
+ $this->skipIf($entryTable->hasColumn('uid'), 'It seems that you already played this migration.');
- $entryTable->addColumn('uuid', 'guid', [
+ $entryTable->addColumn('uid', 'string', [
'notnull' => false,
+ 'length' => 23,
]);
$this->addSql('INSERT INTO '.$this->getTable('craue_config_setting')." (name, value, section) VALUES ('share_public', '1', 'entry')");
}
public function down(Schema $schema)
{
$entryTable = $schema->getTable($this->getTable('entry'));
- $entryTable->dropColumn('uuid');
+ $entryTable->dropColumn('uid');
$this->addSql('DELETE FROM '.$this->getTable('craue_config_setting')." WHERE name = 'share_public'");
}
--- /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 index on wallabag_entry.uid
+ */
+class Version20161214094403 extends AbstractMigration implements ContainerAwareInterface
+{
+ /**
+ * @var ContainerInterface
+ */
+ private $container;
+
+ private $indexName = 'IDX_entry_uid';
+
+ public function setContainer(ContainerInterface $container = null)
+ {
+ $this->container = $container;
+ }
+
+ private function getTable($tableName)
+ {
+ return $this->container->getParameter('database_table_prefix').$tableName;
+ }
+
+ /**
+ * @param Schema $schema
+ */
+ public function up(Schema $schema)
+ {
+ $entryTable = $schema->getTable($this->getTable('entry'));
+ $this->skipIf($entryTable->hasIndex($this->indexName), 'It seems that you already played this migration.');
+
+ $entryTable->addIndex(['uid'], $this->indexName);
+ }
+
+ /**
+ * @param Schema $schema
+ */
+ public function down(Schema $schema)
+ {
+ $entryTable = $schema->getTable($this->getTable('entry'));
+ $this->skipIf(false === $entryTable->hasIndex($this->indexName), 'It seems that you already played this migration.');
+
+ $entryTable->dropIndex($this->indexName);
+ }
+}
{
$this->checkUserAction($entry);
- if (null === $entry->getUuid()) {
- $entry->generateUuid();
+ if (null === $entry->getUid()) {
+ $entry->generateUid();
$em = $this->getDoctrine()->getManager();
$em->persist($entry);
}
return $this->redirect($this->generateUrl('share_entry', [
- 'uuid' => $entry->getUuid(),
+ 'uid' => $entry->getUid(),
]));
}
{
$this->checkUserAction($entry);
- $entry->cleanUuid();
+ $entry->cleanUid();
$em = $this->getDoctrine()->getManager();
$em->persist($entry);
*
* @param Entry $entry
*
- * @Route("/share/{uuid}", requirements={"uuid" = ".+"}, name="share_entry")
+ * @Route("/share/{uid}", requirements={"uid" = ".+"}, name="share_entry")
* @Cache(maxage="25200", smaxage="25200", public=true)
*
* @return \Symfony\Component\HttpFoundation\Response
* @ORM\Table(
* name="`entry`",
* options={"collate"="utf8mb4_unicode_ci", "charset"="utf8mb4"},
- * indexes={@ORM\Index(name="created_at", columns={"created_at"})}
+ * indexes={
+ * @ORM\Index(name="created_at", columns={"created_at"}),
+ * @ORM\Index(name="uid", columns={"uid"})
+ * }
* )
* @ORM\HasLifecycleCallbacks()
* @Hateoas\Relation("self", href = "expr('/api/entries/' ~ object.getId())")
/**
* @var string
*
- * @ORM\Column(name="uuid", type="text", nullable=true)
+ * @ORM\Column(name="uid", type="string", length=23, nullable=true)
*
* @Groups({"entries_for_user", "export_all"})
*/
- private $uuid;
+ private $uid;
/**
* @var string
/**
* @return string
*/
- public function getUuid()
+ public function getUid()
{
- return $this->uuid;
+ return $this->uid;
}
/**
- * @param string $uuid
+ * @param string $uid
*
* @return Entry
*/
- public function setUuid($uuid)
+ public function setUid($uid)
{
- $this->uuid = $uuid;
+ $this->uid = $uid;
return $this;
}
- public function generateUuid()
+ public function generateUid()
{
- if (null === $this->uuid) {
+ if (null === $this->uid) {
// @see http://blog.kevingomez.fr/til/2015/07/26/why-is-uniqid-slow/ for true parameter
- $this->uuid = uniqid('', true);
+ $this->uid = uniqid('', true);
}
}
- public function cleanUuid()
+ public function cleanUid()
{
- $this->uuid = null;
+ $this->uid = null;
}
/**
->getRepository('WallabagCoreBundle:Entry')
->findOneByUser($this->getLoggedInUserId());
- // no uuid
- $client->request('GET', '/share/'.$content->getUuid());
+ // no uid
+ $client->request('GET', '/share/'.$content->getUid());
$this->assertEquals(404, $client->getResponse()->getStatusCode());
- // generating the uuid
+ // generating the uid
$client->request('GET', '/share/'.$content->getId());
$this->assertEquals(302, $client->getResponse()->getStatusCode());
- // follow link with uuid
+ // follow link with uid
$crawler = $client->followRedirect();
$this->assertEquals(200, $client->getResponse()->getStatusCode());
$this->assertContains('max-age=25200', $client->getResponse()->headers->get('cache-control'));
// sharing is now disabled
$client->getContainer()->get('craue_config')->set('share_public', 0);
- $client->request('GET', '/share/'.$content->getUuid());
+ $client->request('GET', '/share/'.$content->getUid());
$this->assertEquals(404, $client->getResponse()->getStatusCode());
$client->request('GET', '/view/'.$content->getId());
$this->assertEquals(302, $client->getResponse()->getStatusCode());
// share is now disable
- $client->request('GET', '/share/'.$content->getUuid());
+ $client->request('GET', '/share/'.$content->getUid());
$this->assertEquals(404, $client->getResponse()->getStatusCode());
}