<?php /** * Created by PhpStorm. * User: tim * Date: 13.07.14 * Time: 13:55 */ namespace Hackspace\Bundle\CalciferBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityRepository; use Symfony\Component\Security\Acl\Exception\Exception; /** * A baseclass for all other entities * * @property integer $id * @property string $slug * * @ORM\MappedSuperclass */ abstract class BaseEntity { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @var string * * @ORM\Column(name="slug", type="string", length=255,options={"default" = ""}) */ protected $slug = ''; public function __isset($name) { if (property_exists($this,$name)) { return true; } else { return false; } } public function __get($name) { if (property_exists($this,$name)) { return $this->$name; } else { throw new \Exception("Property {$name} does not Exists"); } } public function __set($name,$value) { if (property_exists($this,$name)) { if ($value == '') { $this->$name = null; } else { $this->$name = $value; } return $this; } else { 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; } }