/**
  * Set config for the selected columns
  *
  * @param array $flexFormSettings The Settings from the FlexForm
  * @param array $arguments The POST or GET parameters
  * @return boolean $useAllColumns
  */
 public function setSelectedColumns($flexFormSettings, $arguments)
 {
     $this->arguments = $arguments;
     switch ($this->table->getTableType()) {
         case 'list':
             $selectedColumnsSettings = 'listColumns';
             break;
         case 'detail':
             $selectedColumnsSettings = 'detailColumns';
             break;
         case 'edit':
             $selectedColumnsSettings = 'editColumns';
             break;
         case 'new':
             $selectedColumnsSettings = 'newColumns';
             break;
         case 'search':
             $selectedColumnsSettings = 'searchColumns';
             break;
         case 'relation':
             $selectedColumnsSettings = 'relationColumns';
             break;
         default:
             $selectedColumnsSettings = NULL;
             break;
     }
     // Get selected columns
     if ($flexFormSettings[$selectedColumnsSettings]) {
         $columns = explode(',', $flexFormSettings[$selectedColumnsSettings]);
         foreach ($columns as $column) {
             if (strpos($column, '.')) {
                 $selectedColumns[$column]['cssName'] = str_replace('.', '_', $column);
                 $selectedColumns[$column]['columnName'] = substr($column, strpos($column, '.') + 1, strlen($column) - strpos($column, '.') - 1);
                 $selectedColumns[$column]['tableName'] = substr($column, 0, strpos($column, '.'));
                 $selectedColumns[$column]['name'] = $column;
             } else {
                 $selectedColumns[$column]['cssName'] = $column;
                 $selectedColumns[$column]['columnName'] = $column;
                 $selectedColumns[$column]['tableName'] = '';
                 $selectedColumns[$column]['name'] = $column;
             }
         }
         $useAllColumns = FALSE;
     } else {
         if ($this->table->getTableType() == 'edit' || $this->table->getTableType() == 'new') {
             $tableNames = $this->table->getTableNames();
             $mainTable[0] = $tableNames[0];
             $selectedColumns = $this->recordManagementRepository->getColumnsFromTables($mainTable);
         } else {
             $selectedColumns = $this->recordManagementRepository->getColumnsFromTables($this->table->getTableNames());
         }
         $useAllColumns = TRUE;
     }
     $columnTypes = $this->table->getColumnTypes();
     // Get alternative labels for columns
     foreach ($selectedColumns as &$column) {
         if (isset($columnTypes[$column['name']]['label']) && $columnTypes[$column['name']]['label'] !== '_') {
             $column['columnName'] = $columnTypes[$column['name']]['label'];
         } else {
             if ($columnTypes[$column['name']]['label'] == '_') {
                 $column['columnName'] = '';
             }
         }
         if (isset($columnTypes[$column['name']]['list_label']) && $this->table->getTableType() == 'list') {
             $column['columnName'] = $columnTypes[$column['name']]['list_label'];
         }
         if (isset($columnTypes[$column['name']]['detail_label']) && $this->table->getTableType() == 'detail') {
             $column['columnName'] = $columnTypes[$column['name']]['detail_label'];
         }
         if (isset($columnTypes[$column['name']]['edit_label']) && $this->table->getTableType() == 'edit') {
             $column['columnName'] = $columnTypes[$column['name']]['edit_label'];
         }
         if (isset($columnTypes[$column['name']]['new_label']) && $this->table->getTableType() == 'new') {
             $column['columnName'] = $columnTypes[$column['name']]['new_label'];
         }
         if (isset($columnTypes[$column['name']]['search_label']) && $this->table->getTableType() == 'search') {
             $column['columnName'] = $columnTypes[$column['name']]['search_label'];
         }
     }
     unset($column);
     // Set values for elements in edit and new form
     if ($this->table->getTableType() == 'edit' || $this->table->getTableType() == 'new') {
         // Select items by SQL-Query
         foreach ($selectedColumns as $column => $values) {
             if (isset($columnTypes[$column]['dropDownListSQL'])) {
                 $templateUtility = $this->objectManager->get('Frohland\\Ezqueries\\Utility\\TemplateUtility');
                 $languageUtility = $this->objectManager->get('Frohland\\Ezqueries\\Utility\\LanguageUtility');
                 $sqlQuery = $templateUtility->fillMarkersInSQLStatement($columnTypes[$column]['dropDownListSQL'], $arguments, NULL, $this->recordManagementRepository);
                 $dropDownListItems = $this->recordManagementRepository->getRecordsBySQLQuery($sqlQuery);
                 if ($dropDownListItems !== NULL && $dropDownListItems !== FALSE) {
                     $counter = 0;
                     foreach ($dropDownListItems as $item) {
                         if ($counter != 0) {
                             $columnTypes[$column]['dropDownList'] .= '###';
                         }
                         if (isset($item[1])) {
                             $itemValueCounter = count($item);
                             $template = $columnTypes[$column]['dropDownListSQLTemplate'];
                             for ($i = 0; $i < $itemValueCounter; $i++) {
                                 $template = str_replace($i . '', '<###>' . $i . '<###>', $template);
                             }
                             for ($i = 0; $i < $itemValueCounter; $i++) {
                                 if ($i !== $itemValueCounter - 1) {
                                     if (isset($columnTypes[$column]['dropDownListSQLTemplate'])) {
                                         $template = str_replace('<###>' . $i . '<###>', $languageUtility->translateValue($item[$i]) . '', $template);
                                     } else {
                                         $columnTypes[$column]['dropDownList'] .= $languageUtility->translateValue($item[$i]) . ' ';
                                     }
                                 }
                             }
                             if (isset($columnTypes[$column]['dropDownListSQLTemplate'])) {
                                 $columnTypes[$column]['dropDownList'] .= $template;
                             }
                             $columnTypes[$column]['dropDownList'] .= ' [' . $item[$itemValueCounter - 1] . ']';
                         } else {
                             $columnTypes[$column]['dropDownList'] .= $languageUtility->translateValue($item[0]) . '[' . $item[0] . ']';
                         }
                         $counter++;
                     }
                 } else {
                     $columnTypes[$column]['dropDownList'] .= \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate('no_dropdown_items', 'ezqueries') . '[' . 'NULL' . ']';
                 }
             }
         }
         // User authentication
         $userGroup = $GLOBALS['TSFE']->fe_user->user['usergroup'];
         $userID = $GLOBALS['TSFE']->fe_user->user['uid'];
         foreach ($selectedColumns as $column) {
             if ($column['columnName'] == $flexFormSettings['userIDColumn'] && $userGroup !== $flexFormSettings['adminUserGroup']) {
                 $columnTypes[$column['name']]['userID'] = $userID;
             }
         }
         // Default values
         foreach ($selectedColumns as $column => $value) {
             if (isset($columnTypes[$column]['defaultValue'])) {
                 $defaultValue = trim($columnTypes[$column]['defaultValue']);
                 if ($defaultValue[0] == '"') {
                     $defaultValue = substr($defaultValue, 1, strlen($defaultValue) - 2);
                 } else {
                     // Get maximum or minimum value
                     if (strpos($defaultValue, 'max(') !== FALSE || strpos($defaultValue, 'min(') !== FALSE) {
                         $defaultValueQuery = 'SELECT ' . $defaultValue . ' FROM ' . $value['tableName'];
                         if (isset($columnTypes[$column]['defaultValueWhereColumn'])) {
                             if (isset($columnTypes[$column]['defaultValueWhereValue'])) {
                                 $defaultValueWhereValue = trim($columnTypes[$column]['defaultValueWhereValue']);
                                 if ($defaultValueWhereValue[0] != '"') {
                                     $whereValue = $arguments[$defaultValueWhereValue];
                                 } else {
                                     $whereValue = '"' . $arguments[$defaultValueWhereValue] . '"';
                                     //$whereValue = trim(substr($defaultValueWhereValue, 1, strpos($defaultValueWhereValue, '"',1) -1));
                                 }
                             } else {
                                 $whereValue = '';
                             }
                             $defaultValueQuery .= ' WHERE ' . $columnTypes[$column]['defaultValueWhereColumn'] . '=' . $whereValue;
                         }
                         $columnTypes[$column]['defaultValueQuery'] = $defaultValueQuery;
                         $defaultValue = $this->recordManagementRepository->getRecordsBySQLQuery($columnTypes[$column]['defaultValueQuery']);
                         if ($defaultValue !== FALSE) {
                             $defaultValue = $defaultValue[0][0];
                         } else {
                             $defaultValue = '';
                         }
                         if ($defaultValue == '' || $defaultValue == NULL) {
                             $defaultValue = 1;
                         }
                     } else {
                         // Get other default values
                         switch ($defaultValue) {
                             case 'userID':
                                 $defaultValue = $GLOBALS['TSFE']->fe_user->user['uid'];
                                 break;
                             case 'userName':
                                 $defaultValue = $GLOBALS['TSFE']->fe_user->user['name'];
                                 break;
                             case 'userEmail':
                                 $defaultValue = $GLOBALS['TSFE']->fe_user->user['email'];
                                 break;
                             case 'date':
                                 $timestamp = time();
                                 $defaultValue = date("Y-m-d", $timestamp);
                                 break;
                             case 'time':
                                 $timestamp = time();
                                 $defaultValue = date("H:i:s", $timestamp);
                                 break;
                             case 'year':
                                 $timestamp = time();
                                 $defaultValue = date("Y", $timestamp);
                                 break;
                             case 'timestamp':
                                 $timestamp = time();
                                 $defaultValue = date("Y-m-d H:i:s", $timestamp);
                                 break;
                             default:
                                 if (isset($arguments[$defaultValue])) {
                                     $defaultValue = $arguments[$defaultValue];
                                 } else {
                                     $defaultValue = NULL;
                                 }
                         }
                     }
                 }
                 $columnTypes[$column]['defaultValue'] = $defaultValue;
             }
         }
     }
     // Additonal values for search filteres
     if ($this->table->getTableType() == 'search') {
         // Select items by SQL-Query
         foreach ($selectedColumns as $column => $values) {
             if (isset($columnTypes[$column]['filterDropDownListSQL'])) {
                 $templateUtility = $this->objectManager->get('Frohland\\Ezqueries\\Utility\\TemplateUtility');
                 $sqlQuery = $templateUtility->fillMarkersInSQLStatement($columnTypes[$column]['filterDropDownListSQL'], $arguments, NULL, $this->recordManagementRepository);
                 $dropDownListItems = $this->recordManagementRepository->getRecordsBySQLQuery($sqlQuery);
                 if ($dropDownListItems !== NULL && $dropDownListItems !== FALSE) {
                     $counter = 0;
                     foreach ($dropDownListItems as $item) {
                         if ($counter != 0) {
                             $columnTypes[$column]['filterDropDownList'] .= '###';
                         }
                         if (isset($item[1])) {
                             $itemValueCounter = count($item);
                             $template = $columnTypes[$column]['filterDropDownListSQLTemplate'];
                             for ($i = 0; $i < $itemValueCounter; $i++) {
                                 $template = str_replace($i . '', '<###>' . $i . '<###>', $template);
                             }
                             for ($i = 0; $i < $itemValueCounter; $i++) {
                                 if ($i !== $itemValueCounter - 1) {
                                     if (isset($columnTypes[$column]['filterDropDownListSQLTemplate'])) {
                                         $template = str_replace('<###>' . $i . '<###>', $item[$i] . '', $template);
                                     } else {
                                         $columnTypes[$column]['filterDropDownList'] .= $item[$i] . ' ';
                                     }
                                 }
                             }
                             if (isset($columnTypes[$column]['filterDropDownListSQLTemplate'])) {
                                 $columnTypes[$column]['filterDropDownList'] .= $template;
                             }
                             $columnTypes[$column]['filterDropDownList'] .= ' [' . $item[$itemValueCounter - 1] . ']';
                         } else {
                             $columnTypes[$column]['filterDropDownList'] .= $item[0] . '[' . $item[0] . ']';
                         }
                         $counter++;
                     }
                 } else {
                     $columnTypes[$column]['filterDropDownList'] .= \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate('no_dropdown_items', 'ezqueries') . '[' . 'NULL' . ']';
                 }
             }
         }
     }
     // Values
     foreach ($selectedColumns as $column => $value) {
         if (isset($columnTypes[$column]['value'])) {
             $newValue = trim($columnTypes[$column]['value']);
             if (isset($columnTypes[$column]['valueType'])) {
                 if ($columnTypes[$column]['valueType'] == 'parameter') {
                     if (isset($arguments[$newValue])) {
                         $newValue = $arguments[$newValue];
                     } else {
                         $newValue = '';
                     }
                 }
                 if ($columnTypes[$column]['valueType'] == 'string') {
                     $newValue = $newValue;
                 }
             }
             if ($newValue[0] == '"') {
                 $newValue = substr($newValue, 1, strlen($newValue) - 2);
             }
             $columnTypes[$column]['value'] = $newValue;
         }
     }
     $this->table->setColumnTypes($columnTypes);
     $this->table->setSelectedColumns($selectedColumns);
     return $useAllColumns;
 }