/** * 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); }
/** * 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; }
/** * 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()); }
/** * 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); }
/** * 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; }
/** * 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); } }