コード例 #1
0
ファイル: Subscriber.php プロジェクト: zonky2/core
 /**
  * Clear the button if the User is not admin.
  *
  * @param GetOperationButtonEvent $event The event.
  *
  * @return void
  */
 public function getOperationButton(GetOperationButtonEvent $event)
 {
     if ($event->getEnvironment()->getDataDefinition()->getName() !== 'tl_metamodel') {
         return;
     }
     $command = $event->getCommand();
     if ($command->getName() == 'dca_combine') {
         $event->setHref(UrlBuilder::fromUrl($event->getHref())->setQueryParameter('id', ModelId::fromValues('tl_metamodel_dca_combine', $event->getModel()->getId())->getSerialized())->getUrl());
     }
 }
コード例 #2
0
 /**
  * {@inheritDoc}
  *
  * @throws \InvalidArgumentException When the model id is invalid.
  */
 public function fetchModelFromProvider($modelId, $providerName = null)
 {
     if ($providerName === null) {
         if (is_string($modelId)) {
             $modelId = ModelId::fromSerialized($modelId);
         }
     } else {
         $modelId = ModelId::fromValues($providerName, $modelId);
     }
     if (!$modelId instanceof ModelIdInterface) {
         throw new \InvalidArgumentException('Invalid model id passed: ' . var_export($modelId, true));
     }
     $dataProvider = $this->getEnvironment()->getDataProvider($modelId->getDataProviderName());
     $item = $dataProvider->fetch($dataProvider->getEmptyConfig()->setId($modelId->getId()));
     return $item;
 }
コード例 #3
0
ファイル: ButtonRenderer.php プロジェクト: zonky2/dc-general
 /**
  * Create a new instance.
  *
  * @param EnvironmentInterface $environment The environment.
  */
 public function __construct(EnvironmentInterface $environment)
 {
     $this->environment = $environment;
     $this->translator = $environment->getTranslator();
     $this->eventDispatcher = $environment->getEventDispatcher();
     $this->clipboardItems = $this->calculateClipboardItems();
     $dataDefinition = $environment->getDataDefinition();
     $basicDefinition = $dataDefinition->getBasicDefinition();
     $this->isHierarchical = $basicDefinition::MODE_HIERARCHICAL === $basicDefinition->getMode();
     $this->commands = $dataDefinition->getDefinition(Contao2BackendViewDefinitionInterface::NAME)->getModelCommands();
     $controller = $environment->getController();
     $this->clipboardModels = $controller->getModelsFromClipboardItems($this->clipboardItems);
     $this->circularModelIds = array();
     // We must only check for CUT operation here as pasting copy'ed parents is allowed.
     $cutItems = array_filter($this->clipboardItems, function ($item) {
         /** @var ItemInterface $item */
         return $item->getAction() === $item::CUT;
     });
     $cutModels = $controller->getModelsFromClipboardItems($cutItems);
     foreach ($cutModels as $model) {
         $providerName = $model->getProviderName();
         foreach ($controller->assembleAllChildrenFrom($model) as $subModel) {
             $this->circularModelIds[] = ModelId::fromValues($providerName, $subModel)->getSerialized();
         }
     }
     if (null !== ViewHelpers::getManualSortingProperty($environment)) {
         $this->hasPasteButtons = !empty($this->clipboardItems);
         $this->hasPasteNewButton = empty($this->clipboardItems) && !$this->isHierarchical;
     } else {
         $this->hasPasteButtons = false;
         $this->hasPasteNewButton = false;
     }
 }
コード例 #4
0
 /**
  * This method exists only for being compatible when MetaModels are being used as child table from DC_Table context.
  *
  * @param string $idParameter The id parameter in use.
  *
  * @param array  $arrRow      The current data row.
  *
  * @param string $href        The href to be appended.
  *
  * @param string $label       The operation label.
  *
  * @param string $name        The operation name.
  *
  * @param string $icon        The icon path.
  *
  * @param string $attributes  The button attributes.
  *
  * @param string $table       The table name.
  *
  * @return string
  */
 public function buildChildOperationButton($idParameter, $arrRow, $href, $label, $name, $icon, $attributes, $table)
 {
     $dispatcher = $this->getDispatcher();
     $modelId = ModelId::fromValues($table, $arrRow['id']);
     $url = $href . '&' . $idParameter . '=' . $modelId->getSerialized();
     // If id parameter different, we have to override it in the URL.
     if ('id' !== $idParameter) {
         $url .= '&id=';
     }
     $urlEvent = new AddToUrlEvent($url);
     $dispatcher->dispatch(ContaoEvents::BACKEND_ADD_TO_URL, $urlEvent);
     $url = $urlEvent->getUrl();
     // If id parameter different, we have to clean out the id in the URL now.
     if ('id' !== $idParameter) {
         $url = preg_replace('#(&)id=(?:&)?#', '$1', $url);
     }
     $imageEvent = new GenerateHtmlEvent($icon, $label);
     $dispatcher->dispatch(ContaoEvents::IMAGE_GET_HTML, $imageEvent);
     $title = sprintf($label ?: $name, $arrRow['id']);
     return '<a href="' . $url . '" title="' . specialchars($title) . '"' . $attributes . '>' . $imageEvent->getHtml() . '</a> ';
 }
コード例 #5
0
 /**
  * {@inheritDoc}
  */
 public function fetchModelFromProvider($modelId, $providerName = null)
 {
     if ($providerName === null) {
         if (is_string($modelId)) {
             $modelId = ModelId::fromSerialized($modelId);
         }
     } else {
         $modelId = ModelId::fromValues($providerName, $modelId);
     }
     $dataProvider = $this->getEnvironment()->getDataProvider($modelId->getDataProviderName());
     $item = $dataProvider->fetch($dataProvider->getEmptyConfig()->setId($modelId->getId()));
     return $item;
 }
コード例 #6
0
ファイル: Message.php プロジェクト: avisota/contao-message
 /**
  * Get the bread crumb elements.
  *
  * @param GetBreadcrumbEvent $event This event.
  *
  * @return void
  */
 public function getBreadCrumb(GetBreadcrumbEvent $event)
 {
     $environment = $event->getEnvironment();
     $dataDefinition = $environment->getDataDefinition();
     $inputProvider = $environment->getInputProvider();
     $translator = $environment->getTranslator();
     $newsletterParameter = $inputProvider->hasParameter('act') ? 'id' : 'pid';
     if ($dataDefinition->getName() !== 'orm_avisota_message' || !$inputProvider->hasParameter($newsletterParameter)) {
         return;
     }
     $newsletterModelId = ModelId::fromSerialized($inputProvider->getParameter($newsletterParameter));
     if ($newsletterModelId->getDataProviderName() !== 'orm_avisota_message') {
         return;
     }
     $elements = $event->getElements();
     $urlNewsletterBuilder = new UrlBuilder();
     $urlNewsletterBuilder->setPath('contao/main.php')->setQueryParameter('do', $inputProvider->getParameter('do'))->setQueryParameter('ref', TL_REFERER_ID);
     $elements[] = array('icon' => 'assets/avisota/message/images/newsletter.png', 'text' => $translator->translate('avisota_newsletter.0', 'MOD'), 'url' => $urlNewsletterBuilder->getUrl());
     $dataProvider = $environment->getDataProvider($newsletterModelId->getDataProviderName());
     $model = $dataProvider->fetch($dataProvider->getEmptyConfig()->setId($newsletterModelId->getId()));
     $newsletter = $model->getEntity();
     $newsletterCategory = $newsletter->getCategory();
     $urlNewsletterBuilder = new UrlBuilder();
     $urlNewsletterBuilder->setPath('contao/main.php')->setQueryParameter('do', $inputProvider->getParameter('do'))->setQueryParameter('table', $newsletterModelId->getDataProviderName())->setQueryParameter('pid', ModelId::fromValues('orm_avisota_message_category', $newsletterCategory->getId())->getSerialized())->setQueryParameter('ref', TL_REFERER_ID);
     $elements[] = array('text' => $newsletterCategory->getTitle(), 'url' => $urlNewsletterBuilder->getUrl());
     $event->setElements($elements);
 }
コード例 #7
0
 /**
  * Return the edit wizard.
  *
  * @param \DC_Table $dataContainer The data container.
  *
  * @param string    $table         The table name.
  *
  * @return string
  *
  * @SuppressWarnings(PHPMD.Superglobals)
  * @SuppressWarnings(PHPMD.CamelCaseVariableName)
  */
 public function editRenderSettingButton(\DC_Table $dataContainer, $table)
 {
     if ($dataContainer->value < 1) {
         return '';
     }
     $event = new GenerateHtmlEvent('alias.gif', $GLOBALS['TL_LANG'][$table]['editrendersetting'][0], 'style="vertical-align:top"');
     $dispatcher = $this->getEventDispatcher();
     $dispatcher->dispatch(ContaoEvents::IMAGE_GET_HTML, $event);
     $url = BackendUrlBuilder::fromUrl('contao/main.php?do=metamodels&table=tl_metamodel_rendersetting')->setQueryParameter('pid', ModelId::fromValues('tl_metamodel_rendersettings', $dataContainer->value)->getSerialized());
     return sprintf('<a href="%s" title="%s" style="padding-left:3px">%s</a>', $url->getUrl(), sprintf(specialchars($GLOBALS['TL_LANG'][$table]['editrendersetting'][1]), $dataContainer->value), $event->getHtml());
 }
コード例 #8
0
 /**
  * Retrieve a list of html buttons to use in the top panel (submit area).
  *
  * @param ModelInterface $parentModel The parent model.
  *
  * @return string
  */
 protected function getHeaderButtons($parentModel)
 {
     $environment = $this->getEnvironment();
     $definition = $environment->getDataDefinition();
     $clipboard = $environment->getClipboard();
     $basicDefinition = $definition->getBasicDefinition();
     $headerButtons = array();
     if ($this->isSelectModeActive()) {
         return '';
     }
     $dispatcher = $environment->getEventDispatcher();
     $objConfig = $this->getEnvironment()->getBaseConfigRegistry()->getBaseConfig();
     $this->getPanel()->initialize($objConfig);
     $sorting = $objConfig->getSorting();
     $headerButtons['editHeader'] = $this->getHeaderEditButtons($parentModel);
     $filter = new Filter();
     $filter->andModelIsFromProvider($basicDefinition->getDataProvider());
     if ($parentDataProviderName = $basicDefinition->getParentDataProvider()) {
         $filter->andParentIsFromProvider($parentDataProviderName);
     } else {
         $filter->andHasNoParent();
     }
     if ($sorting && $clipboard->isEmpty($filter) && $basicDefinition->isCreatable()) {
         /** @var AddToUrlEvent $urlEvent */
         $urlEvent = $dispatcher->dispatch(ContaoEvents::BACKEND_ADD_TO_URL, new AddToUrlEvent('act=edit&amp;pid=' . ModelId::fromModel($parentModel)->getSerialized()));
         /** @var GenerateHtmlEvent $imageEvent */
         $imageEvent = $dispatcher->dispatch(ContaoEvents::IMAGE_GET_HTML, new GenerateHtmlEvent('new.gif', $this->translate('pastenew.0', $definition->getName())));
         $headerButtons['pasteNew'] = sprintf('<a href="%s" title="%s" onclick="Backend.getScrollOffset()">%s</a>', $urlEvent->getUrl(), specialchars($this->translate('pastenew.1', $definition->getName())), $imageEvent->getHtml());
     }
     $filter = new Filter();
     $filter->andModelIsFromProvider($basicDefinition->getDataProvider());
     $filter->andParentIsFromProvider($basicDefinition->getParentDataProvider());
     if ($sorting && $clipboard->isNotEmpty($filter)) {
         $allowPasteTop = ViewHelpers::getManualSortingProperty($this->environment);
         if (!$allowPasteTop) {
             $subFilter = new Filter();
             $subFilter->andActionIsNotIn(array(ItemInterface::COPY, ItemInterface::DEEP_COPY));
             $subFilter->andParentIsNot(ModelId::fromModel($parentModel));
             $subFilter->orActionIsIn(array(ItemInterface::COPY, ItemInterface::DEEP_COPY));
             $filter = new Filter();
             $filter->andModelIsFromProvider($basicDefinition->getDataProvider());
             $filter->andParentIsFromProvider($basicDefinition->getParentDataProvider());
             $filter->andSub($subFilter);
             $allowPasteTop = (bool) $clipboard->fetch($filter);
         }
         if ($allowPasteTop) {
             /** @var AddToUrlEvent $urlEvent */
             $urlEvent = $dispatcher->dispatch(ContaoEvents::BACKEND_ADD_TO_URL, new AddToUrlEvent('act=paste' . '&amp;pid=' . ModelId::fromModel($parentModel)->getSerialized() . '&amp;after=' . ModelId::fromValues($basicDefinition->getDataProvider(), '0')->getSerialized()));
             /** @var GenerateHtmlEvent $imageEvent */
             $imageEvent = $dispatcher->dispatch(ContaoEvents::IMAGE_GET_HTML, new GenerateHtmlEvent('pasteafter.gif', $this->translate('pasteafter.0', $definition->getName()), 'class="blink"'));
             $headerButtons['pasteAfter'] = sprintf('<a href="%s" title="%s" onclick="Backend.getScrollOffset()">%s</a>', $urlEvent->getUrl(), specialchars($this->translate('pasteafter.0', $definition->getName())), $imageEvent->getHtml());
         } else {
             /** @var GenerateHtmlEvent $imageEvent */
             $imageEvent = $dispatcher->dispatch(ContaoEvents::IMAGE_GET_HTML, new GenerateHtmlEvent('pasteafter_.gif', $this->translate('pasteafter.0', $definition->getName()), 'class="blink"'));
             $headerButtons['pasteAfter'] = $imageEvent->getHtml();
         }
     }
     return implode(' ', $headerButtons);
 }
コード例 #9
0
ファイル: ClipboardTest.php プロジェクト: zonky2/dc-general
 /**
  * Test remove() method.
  *
  * @return void
  */
 public function testRemoveRemovesOnlyOneOfModel()
 {
     $modelId = ModelId::fromValues('dummy-provider', '15');
     $otherModelId = ModelId::fromValues('dummy-provider', '16');
     $clipboard = new Clipboard();
     $filterGetAll = new Filter();
     $cutItem = new Item(Item::CUT, null, $modelId);
     $copyItem = new Item(Item::COPY, null, $modelId);
     $copyOtherItem = new Item(Item::COPY, null, $otherModelId);
     $clipboard->push($cutItem);
     $clipboard->push($copyItem);
     $clipboard->push($copyOtherItem);
     $clipboard->remove($copyItem);
     $this->assertTrue($clipboard->hasId($modelId));
     $this->assertTrue($clipboard->hasId($otherModelId));
     $items = $clipboard->fetch($filterGetAll);
     $this->assertCount(2, $items);
     $this->assertArraySubset([$cutItem, $copyOtherItem], $items);
 }
コード例 #10
0
ファイル: BreadCrumbBase.php プロジェクト: zonky2/core
 /**
  * Create an serialized id from the passed values.
  *
  * @param string $dataProviderName The data provider name.
  *
  * @param mixed  $modelId          The id.
  *
  * @return string
  */
 public function seralizeId($dataProviderName, $modelId)
 {
     return ModelId::fromValues($dataProviderName, $modelId)->getSerialized();
 }
コード例 #11
0
 /**
  * Get the bread crumb elements.
  *
  * @param GetBreadcrumbEvent $event This event.
  *
  * @return void
  *
  * @SuppressWarnings(PHPMD.LongVariable)
  */
 public function getBreadCrumb(GetBreadcrumbEvent $event)
 {
     $environment = $event->getEnvironment();
     $dataDefinition = $environment->getDataDefinition();
     $inputProvider = $environment->getInputProvider();
     $translator = $environment->getTranslator();
     if ($dataDefinition->getName() !== 'orm_avisota_message_content' || (!$inputProvider->hasParameter('act') || $inputProvider->getParameter('act') === 'create') || !$inputProvider->hasParameter('id')) {
         return;
     }
     $messageContentModelId = ModelId::fromSerialized($inputProvider->getParameter('id'));
     if ($messageContentModelId->getDataProviderName() !== 'orm_avisota_message_content') {
         return;
     }
     $elements = $event->getElements();
     $dataProvider = $environment->getDataProvider($messageContentModelId->getDataProviderName());
     $model = $dataProvider->fetch($dataProvider->getEmptyConfig()->setId($messageContentModelId->getId()));
     $messageContent = $model->getEntity();
     $message = $messageContent->getMessage();
     $messageCategory = $message->getCategory();
     $urlNewsletterBuilder = new UrlBuilder();
     $urlNewsletterBuilder->setPath('contao/main.php')->setQueryParameter('do', $inputProvider->getParameter('do'))->setQueryParameter('ref', TL_REFERER_ID);
     $elements[] = array('icon' => 'assets/avisota/message/images/newsletter.png', 'text' => $translator->translate('avisota_newsletter.0', 'MOD'), 'url' => $urlNewsletterBuilder->getUrl());
     global $container;
     $entityManager = $container['doctrine.orm.entityManager'];
     $messageMeta = $entityManager->getClassMetadata(get_class($message));
     $messageCategoryMeta = $entityManager->getClassMetadata(get_class($messageCategory));
     $messageContentMeta = $entityManager->getClassMetadata(get_class($messageContent));
     $urlMessageCategoryBuilder = new UrlBuilder();
     $urlMessageCategoryBuilder->setPath('contao/main.php')->setQueryParameter('do', $inputProvider->getParameter('do'))->setQueryParameter('table', $messageMeta->getTableName())->setQueryParameter('pid', ModelId::fromValues($messageCategoryMeta->getTableName(), $messageCategory->getId())->getSerialized())->setQueryParameter('ref', TL_REFERER_ID);
     $elements[] = array('text' => $messageCategory->getTitle(), 'url' => $urlMessageCategoryBuilder->getUrl());
     $urlMessageBuilder = new UrlBuilder();
     $urlMessageBuilder->setPath('contao/main.php')->setQueryParameter('do', $inputProvider->getParameter('do'))->setQueryParameter('table', $messageContentMeta->getTableName())->setQueryParameter('pid', ModelId::fromValues($messageMeta->getTableName(), $message->getId())->getSerialized())->setQueryParameter('ref', TL_REFERER_ID);
     $elements[] = array('text' => $message->getSubject(), 'url' => $urlMessageBuilder->getUrl());
     $event->setElements($elements);
 }