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