. */ namespace Volkszaehler\Controller; use Volkszaehler\Util; use Volkszaehler\Model; /** * Entity controller * * @author Steffen Vogel * @package default */ class EntityController extends Controller { protected $entity = NULL; public function __construct(\Volkszaehler\View\View $view, \Doctrine\ORM\EntityManager $em, $identifier) { parent::__construct($view, $em); if ($identifier) { $dql = 'SELECT e, p FROM Volkszaehler\Model\Entity e LEFT JOIN e.properties p WHERE e.uuid LIKE \'%' . $identifier . '\''; $q = $this->em->createQuery($dql); if (count($q->getResult() == 1)) { $this->entitiy = $q->getFirstResult(); } elseif (count($q->getResult() > 1)) { throw new Exception('identifier is not unique'); } elseif (count($q->getResult() < 1)) { throw new Exception('no entity found'); } } } /** * Get Entities * * @todo authentification/indentification * @todo implement filters */ public function get() { Util\Debug::log('unique', print_r($this->entity, TRUE)); if (isset($this->entity)) { $this->view->addChannel($this->entity); } else { $dql = 'SELECT e, p FROM Volkszaehler\Model\Channel e LEFT JOIN e.properties p'; $q = $this->em->createQuery($dql); $entities = $q->getResult(); foreach ($entities as $entity) { // distinction between channels & aggregators $this->view->addChannel($entity); } } } /** * Add channel */ public function add() { $channel = new Model\Channel($this->view->request->getParameter('type')); foreach ($this->view->request->getParameters() as $parameter => $value) { if (Model\PropertyDefinition::exists($parameter)) { $property = new Model\Property($channel, $parameter, $value); $channel->setProperty($property); } } $this->em->persist($channel); $this->em->flush(); $this->view->addChannel($channel); } /** * Delete channel by uuid * * @todo authentification/indentification */ public function delete() { $ucid = $this->view->request->getParameter('ucid'); $channel = $this->em->getRepository('Volkszaehler\Model\Channel')->findOneBy(array('uuid' => $ucid)); $this->em->remove($channel); $this->em->flush(); } /** * Edit channel properties * * @todo authentification/indentification * @todo to be implemented */ public function edit() { } } ?>