Esempio n. 1
0
 /**
  * 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);
     }
 }
Esempio n. 2
0
 /**
  * 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);
 }
Esempio n. 3
0
 /**
  * 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->isCut() && ($event->isCircularReference() || in_array($model->getId(), $clipboard->getContainedIds()))) {
         $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);
     }
 }
 /**
  * Retrieve the arguments for the callback.
  *
  * @param GetPasteButtonEvent $event The event being emitted.
  *
  * @return array
  */
 public function getArgs($event)
 {
     return array(new DcCompat($event->getEnvironment(), $event->getModel()), $event->getModel()->getPropertiesAsArray(), $event->getEnvironment()->getDataDefinition()->getName(), $event->isCircularReference(), $event->getContainedModels(), $event->getPrevious() ? $event->getPrevious()->getId() : null, $event->getNext() ? $event->getNext()->getId() : null);
 }