/** * @param Tx_MooxNews_Domain_Model_News $news * @param array $importItem * @param array $importItemOverwrite * @return Tx_MooxNews_Domain_Model_News */ protected function hydrateNewsRecord(Tx_MooxNews_Domain_Model_News $news, array $importItem, array $importItemOverwrite) { if (!empty($importItemOverwrite)) { $importItem = array_merge($importItem, $importItemOverwrite); } $news->setPid($importItem['pid']); $news->setHidden($importItem['hidden']); $news->setStarttime($importItem['starttime']); $news->setEndtime($importItem['endtime']); $news->setFeGroup($importItem['fe_group']); $news->setTstamp($importItem['tstamp']); $news->setCrdate($importItem['crdate']); $news->setTitle($importItem['title']); $news->setTeaser($importItem['teaser']); $news->setBodytext($importItem['bodytext']); $news->setType($importItem['type']); $news->setKeywords($importItem['keywords']); $news->setDatetime(new DateTime(date('Y-m-d H:i:sP', $importItem['datetime']))); $news->setArchive(new DateTime(date('Y-m-d H:i:sP', $importItem['archive']))); $contentElementUidArray = \TYPO3\CMS\Extbase\Utility\ArrayUtility::trimExplode(',', $importItem['content_elements'], TRUE); foreach ($contentElementUidArray as $contentElementUid) { if (is_object($contentElement = $this->ttContentRepository->findByUid($contentElementUid))) { $news->addContentElement($contentElement); } } $news->setInternalurl($importItem['internalurl']); $news->setExternalurl($importItem['externalurl']); $news->setType($importItem['type']); $news->setKeywords($importItem['keywords']); $news->setAuthor($importItem['author']); $news->setAuthorEmail($importItem['author_email']); $news->setImportid($importItem['import_id']); $news->setImportSource($importItem['import_source']); if (is_array($importItem['categories'])) { foreach ($importItem['categories'] as $categoryUid) { if ($this->settings['findCategoriesByImportSource']) { $category = $this->categoryRepository->findOneByImportSourceAndImportId($this->settings['findCategoriesByImportSource'], $categoryUid); } else { $category = $this->categoryRepository->findByUid($categoryUid); } if ($category) { $news->addCategory($category); } } } /** @var $basicFileFunctions \TYPO3\CMS\Core\Utility\File\BasicFileUtility */ $basicFileFunctions = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Utility\\File\\BasicFileUtility'); // media relation if (is_array($importItem['media'])) { foreach ($importItem['media'] as $mediaItem) { // multi media if ($mediaItem['type'] === Tx_MooxNews_Domain_Model_Media::MEDIA_TYPE_MULTIMEDIA) { if (($media = $this->getMultiMediaIfAlreadyExists($news, $mediaItem['multimedia'])) === FALSE) { $media = $this->objectManager->get('Tx_MooxNews_Domain_Model_Media'); $media->setMultimedia($mediaItem['multimedia']); $news->addMedia($media); } if (isset($mediaItem['caption'])) { $media->setDescription($mediaItem['caption']); } if (isset($mediaItem['copyright'])) { $media->setCopyright($mediaItem['copyright']); } if (isset($mediaItem['showinpreview'])) { $media->setShowinpreview($mediaItem['showinpreview']); } $media->setType($mediaItem['type']); $media->setPid($importItem['pid']); // Images FAL enabled } elseif ($this->emSettings->getUseFal() > 0) { // get fileobject by given identifier (file UID, combined identifier or path/filename) try { $file = $this->getResourceFactory()->retrieveFileOrFolderObject($mediaItem['image']); } catch (\TYPO3\CMS\Core\Resource\Exception\ResourceDoesNotExistException $exception) { $file = FALSE; } // no file found skip processing of this item if ($file === FALSE) { continue; } // file not inside a storage then search for same file based on hash (to prevent duplicates) if ($file->getStorage()->getUid() === 0) { $existingFile = $this->findFileByHash($file->getSha1()); if ($existingFile !== NULL) { $file = $existingFile; } } /** @var $media Tx_MooxNews_Domain_Model_FileReference */ if (!($media = $this->getIfFalRelationIfAlreadyExists($news->getFalMedia(), $file))) { // file not inside a storage copy the one form storage 0 to the import folder if ($file->getStorage()->getUid() === 0) { $file = $this->getResourceStorage()->copyFile($file, $this->getImportFolder()); } $media = $this->objectManager->get('Tx_MooxNews_Domain_Model_FileReference'); $media->setFileUid($file->getUid()); $news->addFalMedia($media); } if ($media) { $media->setTitle($mediaItem['title']); $media->setAlternative($mediaItem['alt']); $media->setDescription($mediaItem['caption']); $media->setShowinpreview($mediaItem['showinpreview']); $media->setPid($importItem['pid']); } } else { if (!($media = $this->getMediaIfAlreadyExists($news, $mediaItem['image']))) { $uniqueName = $basicFileFunctions->getUniqueName($mediaItem['image'], PATH_site . self::UPLOAD_PATH); copy(PATH_site . $mediaItem['image'], $uniqueName); $media = $this->objectManager->get('Tx_MooxNews_Domain_Model_Media'); $news->addMedia($media); $media->setImage(basename($uniqueName)); } $media->setTitle($mediaItem['title']); $media->setAlt($mediaItem['alt']); $media->setCaption($mediaItem['caption']); $media->setType($mediaItem['type']); $media->setShowinpreview($mediaItem['showinpreview']); $media->setPid($importItem['pid']); } } } // related files if (is_array($importItem['related_files'])) { // FAL enabled if ($this->emSettings->getUseFal() > 0) { foreach ($importItem['related_files'] as $fileItem) { // get fileObject by given identifier (file UID, combined identifier or path/filename) try { $file = $this->getResourceFactory()->retrieveFileOrFolderObject($fileItem['file']); } catch (\TYPO3\CMS\Core\Resource\Exception\ResourceDoesNotExistException $exception) { $file = FALSE; } // no file found skip processing of this item if ($file === FALSE) { continue; } // file not inside a storage then search for same file based on hash (to prevent duplicates) if ($file->getStorage()->getUid() === 0) { $existingFile = $this->findFileByHash($file->getSha1()); if ($existingFile !== NULL) { $file = $existingFile; } } /** @var $relatedFile Tx_MooxNews_Domain_Model_FileReference */ if (!($relatedFile = $this->getIfFalRelationIfAlreadyExists($news->getFalRelatedFiles(), $file))) { // file not inside a storage copy the one form storage 0 to the import folder if ($file->getStorage()->getUid() === 0) { $file = $this->getResourceStorage()->copyFile($file, $this->getImportFolder()); } $relatedFile = $this->objectManager->get('Tx_MooxNews_Domain_Model_FileReference'); $relatedFile->setFileUid($file->getUid()); $news->addFalRelatedFile($relatedFile); } if ($relatedFile) { $relatedFile->setTitle($fileItem['title']); $relatedFile->setDescription($fileItem['description']); $relatedFile->setPid($importItem['pid']); } } } else { foreach ($importItem['related_files'] as $file) { if (!($relatedFile = $this->getRelatedFileIfAlreadyExists($news, $file['file']))) { $uniqueName = $basicFileFunctions->getUniqueName($file['file'], PATH_site . self::UPLOAD_PATH); copy(PATH_site . $file['file'], $uniqueName); $relatedFile = $this->objectManager->get('Tx_MooxNews_Domain_Model_File'); $news->addRelatedFile($relatedFile); $relatedFile->setFile(basename($uniqueName)); } $relatedFile->setTitle($file['title']); $relatedFile->setDescription($file['description']); $relatedFile->setPid($importItem['pid']); } } } if (is_array($importItem['related_links'])) { foreach ($importItem['related_links'] as $link) { /** @var $relatedLink Tx_MooxNews_Domain_Model_Link */ if (($relatedLink = $this->getRelatedLinkIfAlreadyExists($news, $link['uri'])) === FALSE) { $relatedLink = $this->objectManager->get('Tx_MooxNews_Domain_Model_Link'); $relatedLink->setUri($link['uri']); $news->addRelatedLink($relatedLink); } $relatedLink->setTitle($link['title']); $relatedLink->setDescription($link['description']); $relatedLink->setPid($importItem['pid']); } } return $news; }
/** * Main action for administration * * @param Tx_MooxNews_Domain_Model_Dto_AdministrationDemand $demand * @param \array $sorting * @param \int $parent * @dontvalidate $demand * @return void */ public function indexAction(Tx_MooxNews_Domain_Model_Dto_AdministrationDemand $demand = NULL, $sorting = array(), $parent = 0) { // Extension manager configuration $configuration = Tx_MooxNews_Utility_EmConfiguration::getSettings(); if (count($sorting) && ($sorting['field'] != "" || isset($sorting['mode']))) { if ($this->backendSession->get("administrationDemand")) { $demand = unserialize($this->backendSession->get("administrationDemand")); if (isset($sorting['mode'])) { $demand->setSortingMode($sorting['mode']); } else { $demand->setSortingField($sorting['field']); $demand->setSortingDirection($sorting['direction']); } } } if (is_null($demand)) { if ($this->backendSession->get("administrationDemand")) { $demand = unserialize($this->backendSession->get("administrationDemand")); } else { $demand = $this->objectManager->get('Tx_MooxNews_Domain_Model_Dto_AdministrationDemand'); // Preselect by TsConfig (e.g. tx_mooxnews.module.preselect.topNewsRestriction = 1) if (isset($this->tsConfiguration['preselect.']) && is_array($this->tsConfiguration['preselect.'])) { unset($this->tsConfiguration['preselect.']['orderByAllowed']); foreach ($this->tsConfiguration['preselect.'] as $propertyName => $propertyValue) { \TYPO3\CMS\Extbase\Reflection\ObjectAccess::setProperty($demand, $propertyName, $propertyValue); } } $this->backendSession->store("administrationDemand", serialize($demand)); } } else { $this->backendSession->store("administrationDemand", serialize($demand)); } $demand = $this->createDemandObjectFromSettings($demand); $folders = $this->getFolders($demand); $this->redirectToFolder($folders, $parent); $allowedTypes = array(); if ($this->getPage() > 0) { $pageInfo = $this->pageRepository->getPage($this->getPage()); if ($pageInfo['news_types'] != "") { $allowedTypes = explode(",", $pageInfo['news_types']); } } if (count($allowedTypes) > 0 && !in_array($demand->getType(), $allowedTypes)) { $demand->setType($allowedTypes[0]); } if ($this->settings['list']['paginate']['itemsPerPage'] > 0) { $demand->setPerPage($this->settings['list']['paginate']['itemsPerPage']); } else { $demand->setPerPage(20); } if (!$demand->getSortingField()) { $demand->setSortingField('title'); } if (!$demand->getSortingDirection()) { $demand->setSortingDirection('ASC'); } if ($this->getForceYearFilter() && $demand->getYear() < 1970) { $demand->setYear(date("Y")); } if ($demand->getSortingMode()) { $demand->setType(NULL); $demand->setQuery(NULL); $demand->setTopNewsRestriction(NULL); $demand->setYear(NULL); $demand->setSysLanguageUid(NULL); $demand->setOrder("sorting ASC"); } if ($configuration->getCategoryRestriction() == "current_pid") { if ($demand->getType() != "") { $categories = $this->categoryRepository->findCategoriesByTypeAndPid($this->page, array($demand->getType()), $demand->getSysLanguageUid()); } else { $categoryRoot = $this->getListViewCategoryRoot($demand->getType()); if ($categoryRoot > 0) { $categories = $this->categoryRepository->findCategoriesByParentAndPid($this->page, $categoryRoot, $demand->getSysLanguageUid()); } else { $categories = $this->categoryRepository->findParentCategoriesByPid($this->page, $demand->getSysLanguageUid()); } } } else { if ($demand->getType() != "") { $categories = $this->categoryRepository->findAllCategoriesByType(array($demand->getType()), $demand->getSysLanguageUid()); } else { $categoryRoot = $this->getListViewCategoryRoot($demand->getType()); if ($categoryRoot > 0) { $categories = $this->categoryRepository->findAllCategoriesByParent($categoryRoot, $demand->getSysLanguageUid()); } else { $categories = $this->categoryRepository->findAllCategories($demand->getSysLanguageUid()); } } } $selectedCategories = ""; foreach ($demand->getCategories() as $category) { if ($selectedCategories) { $selectedCategories .= ", "; } $selectedCategories .= $this->categoryRepository->findByUid($category)->getTitle(); } $idList = array(); foreach ($categories as $c) { $idList[] = $c->getUid(); } $rootline = $this->pageRepository->getRootLine($this->page); foreach ($rootline as $rootlinepage) { if ($rootlinepage['is_siteroot']) { $rootpage = $rootlinepage; break; } } if (!$rootpage) { $rootpage = $rootline[0]; } $rootfound = false; for ($i = 0; $i < count($rootline); $i++) { if ($rootfound) { unset($rootline[$i]); } else { if ($rootline[$i]['is_siteroot']) { $rootfound = true; } } } $rootline = array_reverse($rootline); if (isset($rootline[count($rootline) - 2])) { $pageInfo = $this->pageRepository->getPage((int) $rootline[count($rootline) - 2]['uid']); if ($pageInfo['module'] == 'mxnews') { $folder = $pageInfo['uid']; } } $languages = $this->getLanguages(); $years = $this->newsRepository->findAllBackendYears(false); $optionYears = array(); if (!$this->getForceYearFilter()) { $optionYears[0] = "Alle Jahre anzeigen"; } foreach ($years as $year) { if ($year['year'] > 1970) { $optionYears[$year['year']] = $year['year'] . " anzeigen"; } else { $optionYears[1970] = "Artikel ohne Jahr anzeigen"; } } if ($this->settings['defaultPreviewPid'] > 0) { $previewBaseUrl = self::getBaseUrl($this->settings['defaultPreviewPid']); } // Get extended fields from external extensions for backend preview $extendedBackendPreviewFields = array(); foreach ($GLOBALS['TCA']['tx_mooxnews_domain_model_news']['columns'] as $fieldname => $field) { if ($field['addToMooxNewsBackendPreview']) { $field['title'] = $fieldname; $field['name'] = \TYPO3\CMS\Core\Utility\GeneralUtility::underscoredToLowerCamelCase($fieldname); $field['nameEmphasized'] = $fieldname; if ($field['addToMooxNewsBackendPreview']['type'] == "") { $field['addToMooxNewsBackendPreview']['type'] = "text"; } $extendedBackendPreviewFields[] = $field; } } // Get special sorting fields $specialSortingFields = array(); foreach ($GLOBALS['TCA']['tx_mooxnews_domain_model_news']['columns'] as $fieldname => $field) { $nameParts = explode("_", $fieldname); if ($nameParts[count($nameParts) - 1] == "sortfield") { if (isset($GLOBALS['TCA']['tx_mooxnews_domain_model_news']['columns'][str_replace("_sortfield", "", $fieldname)])) { $key = \TYPO3\CMS\Core\Utility\GeneralUtility::underscoredToLowerCamelCase(str_replace("_sortfield", "", $fieldname)); $specialSortingFields[$key] = \TYPO3\CMS\Core\Utility\GeneralUtility::underscoredToLowerCamelCase($fieldname); } } } $types = $this->getTypes($demand, $allowedTypes); $news = $this->newsRepository->findDemanded($demand, FALSE); $count = $news->count(); if ($demand->getSortingMode()) { $sortHelper = array(); $sortedUids = array(); $sorting = array(); for ($pos = 0; $pos < $count; $pos++) { $sortedUids[$pos] = $news->offsetGet($pos)->getUid(); } $sortingCnt = 0; foreach ($sortedUids as $pos => $uid) { if ($sortingCnt == 0) { $sortUp = 0; } elseif ($sortingCnt == 1) { $sortUp = $this->page; } else { $sortUp = -$sortedUids[$pos - 2]; } if (isset($sortedUids[$pos + 1])) { $sortDown = -$sortedUids[$pos + 1]; } else { $sortDown = 0; } $sortHelper["uid" . $uid] = array("up" => $sortUp, "down" => $sortDown); $sortingCnt++; } } $multipleFunctions = array(); $multipleFunctions['delete'] = "Einträge löschen"; $multipleFunctions['show'] = "Einträge aktivieren"; $multipleFunctions['hide'] = "Einträge deaktivieren"; if ($this->mailerActive) { $multipleFunctions['mailoff'] = "Markierung für Mailversand entfernen"; $multipleFunctions['mailsingle'] = "Für Direktversand markieren"; $multipleFunctions['mailcumulated'] = "Für kumulierten Mailversand markieren"; } $assignedValues = array('page' => $this->page, 'folder' => $folder, 'years' => $optionYears, 'languages' => $languages, 'rootpage' => $rootpage, 'rootline' => $rootline, 'demand' => $demand, 'news' => $news, 'count' => $count, 'categories' => count($idList) || $configuration->getCategoryRestriction() != "current_pid" ? $this->categoryRepository->findTree($idList) : array(), 'selectedCategories' => $selectedCategories, 'dateformat' => $GLOBALS['TYPO3_CONF_VARS']['SYS']['ddmmyy'], 'folders' => count($folders) > 1 ? $folders : false, 'previewBaseUrl' => $previewBaseUrl, 'extendedBackendPreviewFields' => $extendedBackendPreviewFields, 'types' => $types, 'localizeUrl' => $this->getLocalizeUrl(), 'sortingUrl' => $this->getSortingUrl(), 'parent' => $parent, 'conf' => $this->extConf, 'fields' => $this->getListViewFields($demand->getType()), 'fieldsSeparator' => self::$listViewFieldSeparator, 'replacements' => $this->getQueryReplacements($demand->getQuery()), 'allowedTypes' => $allowedTypes, 'sortHelper' => $sortHelper, 'specialSortingFields' => $specialSortingFields, 'multipleFunctions' => $multipleFunctions, 'mailerActive' => $this->mailerActive); $this->emitActionSignal('AdministrationController', self::SIGNAL_ADMINISTRATION_INDEX_ACTION, $assignedValues); $this->view->assignMultiple($assignedValues); }