/** * Generate the paste button. * * @param GetPasteButtonEvent $event The event. * * @return void * * @SuppressWarnings(PHPMD.Superglobals) * @SuppressWarnings(PHPMD.CamelCaseVariableName) */ public function generatePasteButton(GetPasteButtonEvent $event) { if ($event->getEnvironment()->getDataDefinition()->getName() !== 'tl_metamodel_dcasetting_condition') { return; } $environment = $event->getEnvironment(); $model = $event->getModel(); $clipboard = $environment->getClipboard(); // Disable all buttons if there is a circular reference. if ($clipboard->fetch(Filter::create()->andActionIs(ItemInterface::CUT)->andModelIs(ModelId::fromModel($model)))) { $event->setPasteAfterDisabled(true)->setPasteIntoDisabled(true); return; } $flags = $GLOBALS['METAMODELS']['inputscreen_conditions'][$model->getProperty('type')]; // If setting does not support children, omit them. if ($model->getId() && !$flags['nestingAllowed']) { $event->setPasteIntoDisabled(true); return; } if (isset($flags['maxChildren']) && count($event->getEnvironment()->getController()->assembleAllChildrenFrom($model)) > $flags['maxChildren']) { $event->setPasteIntoDisabled(true); } }
/** * Generate the paste button. * * @param GetPasteButtonEvent $event The event. * * @return void */ public function generatePasteButton(GetPasteButtonEvent $event) { if ($event->getEnvironment()->getDataDefinition()->getName() !== 'tl_metamodel_filtersetting') { return; } $environment = $event->getEnvironment(); $model = $event->getModel(); $clipboard = $environment->getClipboard(); $filter = new Filter(); $filter->andModelIs(ModelId::fromModel($model))->andActionIs($clipboard::MODE_CUT); // Disable all buttons if there is a circular reference. if ($event->isCircularReference() || !$clipboard->isEmpty($filter)) { $event->setPasteAfterDisabled(true)->setPasteIntoDisabled(true); return; } $factory = $this->getServiceContainer()->getFilterFactory()->getTypeFactory($model->getProperty('type')); // If setting does not support children, omit them. if ($model->getId() && !($factory && $factory->isNestedType())) { $event->setPasteIntoDisabled(true); } }
/** * Handle the paste into and after buttons. * * @param GetPasteButtonEvent $event The event. * * @return void * * @throws \RuntimeException When more than one model is contained within the clipboard. */ public function handle(GetPasteButtonEvent $event) { $this->circularReference = $event->isCircularReference(); $this->environment = $event->getEnvironment(); $this->provider = $this->environment->getDataProvider(); $this->providerName = $this->provider->getEmptyModel()->getProviderName(); $clipboard = $this->environment->getClipboard(); $this->currentModel = $event->getModel(); $this->disablePI = true; $this->disablePA = true; // Only run for a MetaModels and if both values already disabled return here. if (substr($this->providerName, 0, 3) !== 'mm_' || $event->isPasteIntoDisabled() && $event->isPasteAfterDisabled()) { return; } $this->checkForAction($clipboard, 'copy'); $this->checkForAction($clipboard, 'create'); $this->checkForAction($clipboard, 'cut'); $event->setPasteAfterDisabled($this->disablePA)->setPasteIntoDisabled($this->disablePI); }