예제 #1
0
 /**
  * Check if the data provider is multi language and prepare the data provider with the selected language.
  *
  * @param EnvironmentInterface $environment The environment.
  *
  * @return void
  *
  * @SuppressWarnings(PHPMD.Superglobals)
  * @SuppressWarnings(PHPMD.CamelCaseVariableName)
  */
 private function checkLanguage($environment)
 {
     $inputProvider = $environment->getInputProvider();
     $sessionStorage = $environment->getSessionStorage();
     $dataProvider = $environment->getDataProvider();
     $providerName = $environment->getDataDefinition()->getName();
     $modelId = $inputProvider->hasParameter('id') && $inputProvider->getParameter('id') ? IdSerializer::fromSerialized($inputProvider->getParameter('id'))->getId() : null;
     $languages = $environment->getController()->getSupportedLanguages($modelId);
     if (!$languages) {
         return;
     }
     static::checkLanguageSubmit($environment);
     // Load language from Session.
     $session = (array) $sessionStorage->get('dc_general');
     /** @var MultiLanguageDataProviderInterface $dataProvider */
     // Try to get the language from session.
     if (isset($session['ml_support'][$providerName][$modelId])) {
         $currentLanguage = $session['ml_support'][$providerName][$modelId];
     } else {
         $currentLanguage = $GLOBALS['TL_LANGUAGE'];
     }
     if (!array_key_exists($currentLanguage, $languages)) {
         $currentLanguage = $dataProvider->getFallbackLanguage($modelId)->getLocale();
     }
     $session['ml_support'][$providerName][$modelId] = $currentLanguage;
     $sessionStorage->set('dc_general', $session);
     $dataProvider->setCurrentLanguage($currentLanguage);
 }
 /**
  * Handle the persisting of the currently loaded model.
  *
  * @return void
  */
 private function doPersist()
 {
     if (!$this->model->getMeta(ModelInterface::IS_CHANGED)) {
         return;
     }
     $this->handlePrePersist();
     // FIXME: manual sorting property handling is not enabled here as it originates from the backend defininiton.
     // Save the model.
     $dataProvider = $this->environment->getDataProvider($this->model->getProviderName());
     $dataProvider->save($this->model);
     $this->handlePostPersist();
     $this->storeVersion($this->model);
 }
예제 #3
0
 /**
  * Load the parent model for the current list.
  *
  * @param InputProviderInterface $input       The input provider.
  *
  * @param EnvironmentInterface   $environment The environment.
  *
  * @return ModelInterface|null
  */
 protected function loadParentModel(InputProviderInterface $input, EnvironmentInterface $environment)
 {
     if (!$input->hasParameter('pid')) {
         return null;
     }
     $pid = ModelId::fromSerialized($input->getParameter('pid'));
     if (!($dataProvider = $environment->getDataProvider($pid->getDataProviderName()))) {
         return null;
     }
     if ($parent = $dataProvider->fetch($dataProvider->getEmptyConfig()->setId($pid->getId()))) {
         return $parent;
     }
     return null;
 }
예제 #4
0
 /**
  * Determine the toggle state of a toggle command.
  *
  * @param ToggleCommandInterface $command The toggle command.
  *
  * @param ModelInterface         $model   The model in scope.
  *
  * @return bool
  */
 private function isTogglerInActiveState($command, $model)
 {
     $dataProvider = $this->environment->getDataProvider($model->getProviderName());
     if ($command instanceof TranslatedToggleCommandInterface && $dataProvider instanceof MultiLanguageDataProviderInterface) {
         $language = $dataProvider->getCurrentLanguage();
         $dataProvider->setCurrentLanguage($command->getLanguage());
         $propModel = $dataProvider->fetch($dataProvider->getEmptyConfig()->setId($model->getId())->setFields($command->getToggleProperty()));
         $dataProvider->setCurrentLanguage($language);
     } else {
         $propModel = $model;
     }
     if ($command->isInverse()) {
         return !$propModel->getProperty($command->getToggleProperty());
     }
     return (bool) $propModel->getProperty($command->getToggleProperty());
 }
예제 #5
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);
 }
예제 #6
0
 /**
  * Return layout used information by message.
  *
  * @param EntityInterface      $entity      The Entity.
  *
  * @param EnvironmentInterface $environment The Environment.
  *
  * @return string
  */
 protected function getLayoutUsedInformation(EntityInterface $entity, EnvironmentInterface $environment)
 {
     $dataProvider = $environment->getDataProvider();
     $entityManager = $dataProvider->getEntityManager();
     $repository = $entityManager->getRepository('Avisota\\Contao:Message');
     $messageResult = $repository->findBy(array('layout' => $entity->getId()), array('subject' => 'ASC'));
     if (count($messageResult) < 1) {
         return '';
     }
     $information = '';
     foreach ($messageResult as $message) {
         $information .= "\\n";
         $information .= $message->getCategory()->getTitle();
         $information .= ' => ';
         $information .= $message->getSubject();
     }
     return $information;
 }
예제 #7
0
 /**
  * Copy each children.
  *
  * @param ModelIdInterface     $modelId     The model id.
  * @param ModelInterface       $copiedModel The copied model.
  * @param EnvironmentInterface $environment The environment.
  *
  * @return void
  *
  * @SuppressWarnings(PHPMD.LongVariableName)
  */
 protected function copyEachChilds(ModelIdInterface $modelId, ModelInterface $copiedModel, EnvironmentInterface $environment)
 {
     $childDataProviderName = $environment->getInputProvider()->getParameter('ctable');
     $dataProvider = $environment->getDataProvider();
     $childDataProvider = $environment->getDataProvider($childDataProviderName);
     $modelRelationship = $environment->getParentDataDefinition()->getModelRelationshipDefinition();
     $childCondition = $modelRelationship->getChildCondition($copiedModel->getProviderName(), $childDataProviderName);
     if (!$childCondition) {
         return;
     }
     $parentModel = $dataProvider->fetch($dataProvider->getEmptyConfig()->setId($modelId->getId()));
     $parentFilters = $childCondition->getFilter($parentModel);
     $copiedFilters = $childCondition->getFilter($copiedModel);
     $filter = array();
     // Todo can many filter has operation equal
     foreach ($parentFilters as $index => $parentFilter) {
         if ($parentFilter['operation'] !== '=') {
             continue;
         }
         $filter = array('parent' => $parentFilter, 'copied' => $copiedFilters[$index]);
     }
     $childModels = $childDataProvider->fetchAll($childDataProvider->getEmptyConfig()->setFilter(array($filter['parent'])));
     if ($childModels->count() < 1) {
         return;
     }
     foreach ($childModels->getModelIds() as $index => $modelId) {
         $childModel = $childModels->get($index);
         $copyModelId = ModelId::fromModel($childModel);
         $copiedChildModel = null;
         if ($environment->getDataDefinition()->getName() !== $copyModelId->getDataProviderName()) {
             $copiedChildModel = $this->copyParent($copyModelId, $environment);
         }
         if ($environment->getDataDefinition()->getName() === $copyModelId->getDataProviderName() && !$copiedChildModel) {
             $copiedChildModel = $this->copyHandler($copyModelId, $environment);
         }
         $copiedChildModel->setProperty($filter['copied']['property'], $filter['copied']['value']);
         $childDataProvider->save($copiedChildModel);
     }
 }