/** * Test andModelIs filter. * * @dataProvider provideForAndModelIdIsNot() */ public function testAndModelIdIsNot($expected, $modelId1, $modelId2) { $filter = new Filter(); $item = new MockedAbstractItem(ItemInterface::CREATE, null, $modelId1); $filter->andSub(new MockedFilter(true)); $filter->andModelIsNot($modelId2); $this->assertEquals($expected, $filter->accepts($item)); }
/** * Render the paste after button. * * @param GetPasteButtonEvent $event The event that has been triggered. * * @return string */ public function renderPasteAfterButton(GetPasteButtonEvent $event) { if ($event->getHtmlPasteAfter() !== null) { return $event->getHtmlPasteAfter(); } $model = $event->getModel(); $modelId = IdSerializer::fromModel($model); $environment = $event->getEnvironment(); $controller = $environment->getController(); $clipboard = $environment->getClipboard(); $dataDefinition = $environment->getDataDefinition(); $basicDefinition = $dataDefinition->getBasicDefinition(); $pasteAfterIsDisabled = $event->isPasteAfterDisabled(); if (!$pasteAfterIsDisabled) { // pre-build filter, to fetch other items $filter = new Filter(); $filter->andModelIsFromProvider($basicDefinition->getDataProvider()); if ($parentDataProviderName = $basicDefinition->getParentDataProvider()) { $filter->andParentIsFromProvider($parentDataProviderName); } else { $filter->andHasNoParent(); } $filter->andModelIsNot($modelId); /* * FIXME to be discussed, allow pasting only in the same grouping } /** @var Filter $filter Prevent IDE from saying $filter may be undefined! ;-D * / if (!$pasteAfterIsDisabled) { // Determine if the grouping is the same $groupingMode = ViewHelpers::getGroupingMode($environment); if ($groupingMode) { $items = $clipboard->fetch($filter); $models = $controller->getModelsFromClipboardItems($items); $propertyName = $groupingMode['property']; $propertyValue = $model->getProperty($propertyName); $pasteAfterIsDisabled = true; foreach ($models as $clipboardModel) { if ($propertyValue === $clipboardModel->getProperty($propertyName)) { // there exist at least one item, with the same grouping $pasteAfterIsDisabled = false; break; } } } } if (!$pasteAfterIsDisabled) { */ $pasteAfterIsDisabled = $clipboard->isEmpty($filter); } $strLabel = $this->translate('pasteafter.0', $model->getProviderName()); if ($pasteAfterIsDisabled) { /** @var GenerateHtmlEvent $imageEvent */ $imageEvent = $environment->getEventDispatcher()->dispatch(ContaoEvents::IMAGE_GET_HTML, new GenerateHtmlEvent('pasteafter_.gif', $strLabel, 'class="blink"')); return $imageEvent->getHtml(); } /** @var GenerateHtmlEvent $imageEvent */ $imageEvent = $environment->getEventDispatcher()->dispatch(ContaoEvents::IMAGE_GET_HTML, new GenerateHtmlEvent('pasteafter.gif', $strLabel, 'class="blink"')); $opDesc = $this->translate('pasteafter.1', $environment->getDataDefinition()->getName()); if (strlen($opDesc)) { $title = sprintf($opDesc, $model->getId()); } else { $title = sprintf('%s id %s', $strLabel, $model->getId()); } return sprintf(' <a href="%s" title="%s" %s>%s</a>', $event->getHrefAfter(), specialchars($title), 'onclick="Backend.getScrollOffset()"', $imageEvent->getHtml()); }