['all']]), new TwigFunction('buttonAdd', [$this, 'addButton'], ['is_safe' => ['all']]), new TwigFunction('buttonSetMenuLink', [$this, 'setMenuLink'], ['is_safe' => ['all']]), new TwigFunction('buttonSetWrappingTags', [$this, 'setWrappingTags'], ['is_safe' => ['all']]), new TwigFunction('buttonSetGroupType', [$this, 'setGroupType'], ['is_safe' => ['all']]), new TwigFunction('buttonGetCount', [$this, 'getButtonCount']), new TwigFunction('buttonsRender', [$this, 'render'], ['is_safe' => ['all']]), new TwigFunction('buttonsAdd', [$this, 'addButtons'], ['is_safe' => ['all']]), new TwigFunction('buttonsAddFromTemplate', [$this, 'addButtonsFromTemplate'], ['is_safe' => ['all']]), ]; } public function reset(string $location, string $groupType = ButtonHelper::TYPE_GROUP, $item = null): void { $this->buttonHelper->reset( $this->requestStack->getCurrentRequest(), $location, $groupType, $item ); } /** * @param array $button */ public function addButton(array $button): void { $this->buttonHelper->addButton($button); } public function setMenuLink(?string $menuLink): void { $this->buttonHelper->setMenuLink($menuLink); } public function setWrappingTags(?string $wrapOpeningTag, ?string $wrapClosingTag): void { $this->buttonHelper->setWrappingTags($wrapOpeningTag, $wrapClosingTag); } public function setGroupType(string $groupType): void { $this->buttonHelper->setGroupType($groupType); } public function getButtonCount(): int { return $this->buttonHelper->getButtonCount(); } /** * @param array> $buttons */ public function addButtons(array $buttons): void { $this->buttonHelper->addButtons($buttons); } public function render(string $dropdownHtml = '', string $closingDropdownHtml = ''): string { return $this->buttonHelper->renderButtons($dropdownHtml, $closingDropdownHtml); } /** * @param array $templateButtons * @param array $query * @param array $editAttr * @param array $routeVars * @param mixed $item */ public function addButtonsFromTemplate( array $templateButtons, array $query, string $actionRoute, string $indexRoute, string $langVar, string $nameGetter, array $editAttr = [], array $routeVars = [], $item = null, ?string $tooltip = null ): void { foreach ($templateButtons as $action => $enabled) { if (!$enabled) { continue; } $path = false; $primary = false; $priority = 0; switch ($action) { case 'clone': case 'abtest': $actionQuery = [ /** * If the item has the getVariantParent(), it probably implements VariantEntityInterface, * but that doesn't have a getId() method so we can't do $item instanceof VariantEntityInterface here. */ 'objectId' => ('abtest' == $action && method_exists($item, 'getVariantParent') && $item->getVariantParent()) ? $item->getVariantParent()->getId() : $item->getId(), ]; $icon = ('clone' == $action) ? 'file-copy-line' : 'a-b'; $path = $this->router->generate($actionRoute, array_merge(['objectAction' => $action], $actionQuery, $query)); break; case 'close': $closeParameters = $routeVars['close'] ?? []; $icon = 'close-line'; $path = $this->router->generate($indexRoute, $closeParameters); $primary = true; $priority = 200; break; case 'new': case 'edit': $actionQuery = ('edit' == $action) ? ['objectId' => $item->getId()] : []; $icon = ('edit' == $action) ? 'edit-line' : 'add-line'; $path = $this->router->generate($actionRoute, array_merge(['objectAction' => $action], $actionQuery, $query)); $primary = true; break; case 'delete': $this->buttonHelper->addButton( [ 'confirm' => [ 'message' => $this->translator->trans( 'mautic.'.$langVar.'.form.confirmdelete', ['%name%' => $item->$nameGetter().' ('.$item->getId().')'] ), 'confirmAction' => $this->router->generate( $actionRoute, array_merge(['objectAction' => 'delete', 'objectId' => $item->getId()], $query) ), 'template' => 'delete', 'btnClass' => false, ], 'priority' => -1, ] ); break; } if ($path) { $mergeAttr = (!in_array($action, ['edit', 'new'])) ? [] : $editAttr; $this->buttonHelper->addButton( [ 'attr' => array_merge( [ 'class' => 'btn btn-default', 'href' => $path, 'data-toggle' => 'ajax', ], $mergeAttr ), 'iconClass' => 'ri-'.$icon, 'btnText' => $this->translator->trans('mautic.core.form.'.$action), 'priority' => $priority, 'primary' => $primary, 'tooltip' => $tooltip, ] ); } } } }