From e2618b06af064e0f5a4939d138328a921f29ec0c Mon Sep 17 00:00:00 2001 From: Tim Schumacher Date: Tue, 23 Sep 2014 18:54:27 +0200 Subject: [PATCH] Create a generic method for generating slugs that are unique to the table. Ticket #20 --- .../CalciferBundle/Entity/BaseEntity.php | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/Hackspace/Bundle/CalciferBundle/Entity/BaseEntity.php b/src/Hackspace/Bundle/CalciferBundle/Entity/BaseEntity.php index ed3a198..a33a608 100755 --- a/src/Hackspace/Bundle/CalciferBundle/Entity/BaseEntity.php +++ b/src/Hackspace/Bundle/CalciferBundle/Entity/BaseEntity.php @@ -9,7 +9,9 @@ namespace Hackspace\Bundle\CalciferBundle\Entity; use Doctrine\ORM\Mapping as ORM; -use Doctrine\ORM\PersistentCollection; +use Doctrine\ORM\EntityManager; +use Doctrine\ORM\EntityRepository; +use Symfony\Component\Security\Acl\Exception\Exception; /** * A baseclass for all other entities @@ -60,4 +62,31 @@ abstract class BaseEntity { throw new \Exception("Property {$name} does not Exists"); } } + + public function generateSlug($name,EntityManager $em) { + $slug = \URLify::filter($name, 255, 'de'); + + /** @var EntityRepository $repo */ + $repo = $em->getRepository(get_class($this)); + + $entity = $repo->findOneBy(['slug' => $slug]); + + if (is_null($entity)) { + return $slug; + } else { + $counter = 1; + while (true) { + $new_slug = $slug . '-' . $counter; + $entity = $repo->findOneBy(['slug' => $new_slug]); + if (is_null($entity)) { + return $new_slug; + } + if ($counter === 100) { + throw new \Exception('There are 100 events with the same name, pick a fresh one!'); + } + $counter++; + } + } + return null; + } } \ No newline at end of file