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