/** * Builds a menu for displaying associated items to a model entry (i.e. /club/21/team). * * The menu will include: * - An Add LinkMenuItem; * - A SpacerMenuItem with the name of the associated model; * - A ResourceMenuItem to hold entries of the associated model. * * @param String $modelName The name of the model (i.e. Club). * @param int $modelId The id of the model entry. * @param String $associationName The name of the associated model (i.e. Team). * @param ModelConfig $config (optional) The `ModelConfig` to use. * * @return Menu the Menu, which can be configured further. */ public function create($modelName, $modelId, $associationName, ModelConfig $config = null) { $menu = new Menu(); $addMenuItem = new LinkMenuItem(); $addMenuItem->setText(Lang::trans('Add') . ' ' . Lang::trans($associationName)); $addMenuItem->setIcon(Icons::ion_plus); $addMenuItem->setTarget(Url::route($this->aujaRouter->getCreateAssociationName($modelName, $associationName), $modelId)); $menu->addMenuItem($addMenuItem); $headerMenuItem = new SpacerMenuItem(); $headerMenuItem->setText(Lang::trans(str_plural($associationName))); $menu->addMenuItem($headerMenuItem); $resourceMenuItem = new ResourceMenuItem(); $resourceMenuItem->setTarget(Url::route($this->aujaRouter->getAssociationName($modelName, $associationName), $modelId)); $menu->addMenuItem($resourceMenuItem); return $menu; }
/** * Builds a menu for a single model entry, where the model has exactly one relationship with another model. * * The menu will include: * - An Edit LinkMenuItem to edit the model entry. * - A SpacerMenuItem with the name of the associated model; * - An Add LinkMenuItem to add an entry of the associated model; * - A ResourceMenuItem to hold entries of the associated model. * * @param String $modelName The name of the model. * @param int $modelId The id of the model entry. * @param Relation $relation The Relation this model has with the associated model. * @param ModelConfig $config (optional) The `ModelConfig` to use. * * @return Menu The Menu, which can be configured further. */ public function create($modelName, $modelId, Relation $relation, ModelConfig $config = null) { $otherModelName = $relation->getRight()->getName(); $menu = new Menu(); $editMenuItem = new LinkMenuItem(); $editMenuItem->setText(Lang::trans('Edit')); $editMenuItem->setTarget(URL::route($this->aujaRouter->getEditName($modelName), $modelId)); $menu->addMenuItem($editMenuItem); $headerMenuItem = new SpacerMenuItem(); $headerMenuItem->setText(Lang::trans(str_plural($otherModelName))); $menu->addMenuItem($headerMenuItem); $addMenuItem = new LinkMenuItem(); $addMenuItem->setText(sprintf('%s %s', Lang::trans('Add'), Lang::trans($otherModelName))); $addMenuItem->setIcon(Icons::ion_plus); $addMenuItem->setTarget(URL::route($this->aujaRouter->getCreateAssociationName($modelName, $otherModelName), $modelId)); $menu->addMenuItem($addMenuItem); $resourceMenuItem = new ResourceMenuItem(); $resourceMenuItem->setTarget(URL::route($this->aujaRouter->getAssociationName($modelName, $otherModelName), $modelId)); $menu->addMenuItem($resourceMenuItem); return $menu; }
/** * Builds a simple menu for given model, where typically this model should not have any relations to other models. * * The menu will include: * - An Add LinkMenuItem; * - A SpacerMenuItem with the model's name; * - A ResourceMenuItem to hold entries of the model. * * @param String $modelName The name of the model. * @param ModelConfig $config (optional) The `ModelConfig` to use. * * @return Menu the Menu, which can be configured further. */ public function create($modelName, ModelConfig $config = null) { $menu = new Menu(); $addMenuItem = new LinkMenuItem(); $addMenuItem->setText(Lang::trans('Add')); $addMenuItem->setIcon(Icons::ion_plus); $addMenuItem->setTarget(URL::route($this->aujaRouter->getCreateName($modelName))); $menu->addMenuItem($addMenuItem); $spacerMenuItem = new SpacerMenuItem(); $spacerMenuItem->setText(Lang::trans($modelName)); $menu->addMenuItem($spacerMenuItem); $resourceMenuItem = new ResourceMenuItem(); $resourceMenuItem->setTarget(URL::route($this->aujaRouter->getIndexName($modelName))); $model = $this->aujaConfigurator->getModel($modelName); if ($this->aujaConfigurator->isSearchable($model, $config)) { $target = urldecode(URL::route($this->aujaRouter->getIndexName($modelName), ['q' => '%s'])); /* urldecode because the '%' gets escaped. */ $property = new Searchable($target); $resourceMenuItem->addProperty($property); } $menu->addMenuItem($resourceMenuItem); return $menu; }