urlGenerator = $urlGenerator; } /** * Generates an URL to the page using the given page type and element. * For the given types, the [type]URL() functions are called (e.g. infoURL()). * Not all entity class and $type combinations are supported. * * @param $entity mixed The element for which the page should be generated. * @param string $type The page type. Currently supported: 'info', 'edit', 'create', 'clone', 'list'/'list_parts' * @return string The link to the desired page. * @throws EntityNotSupported Thrown if the entity is not supported for the given type. * @throws \InvalidArgumentException Thrown if the givent type is not existing. */ public function getURL($entity, string $type) { switch ($type) { case 'info': return $this->infoURL($entity); case 'edit': return $this->editURL($entity); case 'create': return $this->createURL($entity); case 'clone': return $this->cloneURL($entity); case 'list': case 'list_parts': return $this->listPartsURL($entity); case 'delete': return $this->deleteURL($entity); } throw new \InvalidArgumentException('Method is not supported!'); } /** * Generates an URL to a page, where info about this entity can be viewed. * * @param $entity mixed The entity for which the info should be generated. * @return string The URL to the info page * @throws EntityNotSupported If the method is not supported for the given Entity */ public function infoURL($entity): string { if ($entity instanceof Part) { return $this->urlGenerator->generate('part_info', ['id' => $entity->getID()]); } //Otherwise throw an error throw new EntityNotSupported('The given entity is not supported yet!'); } /** * Generates an URL to a page, where this entity can be edited. * * @param $entity mixed The entity for which the edit link should be generated. * @return string The URL to the edit page. * @throws EntityNotSupported If the method is not supported for the given Entity */ public function editURL($entity): string { if ($entity instanceof Part) { return $this->urlGenerator->generate('part_edit', ['id' => $entity->getID()]); } if ($entity instanceof AttachmentType) { return $this->urlGenerator->generate('attachment_type_edit', ['id' => $entity->getID()]); } if ($entity instanceof Category) { return $this->urlGenerator->generate("category_edit", ['id' => $entity->getID()]); } if ($entity instanceof Device) { return $this->urlGenerator->generate("device_edit", ['id' => $entity->getID()]); } if ($entity instanceof Supplier) { return $this->urlGenerator->generate("supplier_edit", ['id' => $entity->getID()]); } if ($entity instanceof Manufacturer) { return $this->urlGenerator->generate("manufacturer_edit", ['id' => $entity->getID()]); } if ($entity instanceof Storelocation) { return $this->urlGenerator->generate("store_location_edit", ['id' => $entity->getID()]); } //Otherwise throw an error throw new EntityNotSupported('The given entity is not supported yet!'); } /** * Generates an URL to a page, where a entity of this type can be created. * * @param $entity mixed The entity for which the link should be generated. * @return string The URL to the page. * @throws EntityNotSupported If the method is not supported for the given Entity */ public function createURL($entity): string { if ($entity instanceof Part) { return $this->urlGenerator->generate('part_new'); } if ($entity instanceof AttachmentType) { return $this->urlGenerator->generate('attachment_type_new'); } if ($entity instanceof Category) { return $this->urlGenerator->generate('category_new'); } if ($entity instanceof Device) { return $this->urlGenerator->generate('device_new'); } if ($entity instanceof Supplier) { return $this->urlGenerator->generate('supplier_new'); } if ($entity instanceof Manufacturer) { return $this->urlGenerator->generate('manufacturer_new'); } if ($entity instanceof Storelocation) { return $this->urlGenerator->generate('store_location_new'); } throw new EntityNotSupported('The given entity is not supported yet!'); } /** * Generates an URL to a page, where a new entity can be created, that has the same informations as the * given entity (element cloning) * * @param $entity mixed The entity for which the link should be generated. * @return string The URL to the page. * @throws EntityNotSupported If the method is not supported for the given Entity */ public function cloneURL($entity): string { if ($entity instanceof Part) { return $this->urlGenerator->generate('part_clone', ['id' => $entity->getID()]); } throw new EntityNotSupported('The given entity is not supported yet!'); } /** * Generates an URL to a page, where all parts are listed, which are contained in the given element. * * @param $entity mixed The entity for which the link should be generated. * @return string The URL to the page. * @throws EntityNotSupported If the method is not supported for the given Entity */ public function listPartsURL($entity) : string { if ($entity instanceof Category) { return $this->urlGenerator->generate('app_partlists_showcategory', ['id' => $entity->getID()]); } throw new EntityNotSupported('The given entity is not supported yet!'); } public function deleteURL($entity) : string { if ($entity instanceof AttachmentType) { return $this->urlGenerator->generate('attachment_type_delete', ['id' => $entity->getID()]); } if ($entity instanceof Category) { return $this->urlGenerator->generate('category_delete', ['id' => $entity->getID()]); } if ($entity instanceof Device) { return $this->urlGenerator->generate('device_delete', ['id' => $entity->getID()]); } if ($entity instanceof Supplier) { return $this->urlGenerator->generate('supplier_delete', ['id' => $entity->getID()]); } if ($entity instanceof Manufacturer) { return $this->urlGenerator->generate('manufacturer_new', ['id' => $entity->getID()]); } if ($entity instanceof Storelocation) { return $this->urlGenerator->generate('store_location_new', ['id' => $entity->getID()]); } throw new EntityNotSupported('The given entity is not supported yet!'); } /** * Generates an HTML link to the info page about the given entity. * * @param $entity mixed The entity for which the info link should be generated. * * @return string The HTML of the info page link * * @throws EntityNotSupported */ public function infoHTML($entity): string { $href = $this->infoURL($entity); if ($entity instanceof NamedDBElement) { return sprintf('%s', $href, $entity->getName()); } throw new EntityNotSupported('The given entity is not supported yet!'); } }