/** * Creates a new record * * @return void */ public function createAction() { // Check permission if ($this->settings['enableNew']) { // Get $_POST parameters $arguments = $this->request->getArguments(); // Create record management object $recordManagement = $this->objectManager->create('Frohland\\Ezqueries\\Domain\\Model\\RecordManagement', $this->recordManagementRepository, 'new'); // Set Table names $recordManagement->setTableNames(explode(',', $this->settings['tables'])); // Set column types $recordManagement->setColumnTypes($this->settings); // Set selected columns $recordManagement->setSelectedColumns($this->settings, $arguments); // Get data from $_POST ($arguments) $data = array(); $columns = $recordManagement->getTable()->getSelectedColumns(); $columnTypes = $recordManagement->getTable()->getColumnTypes(); $tables = $recordManagement->getTable()->getTableNames(); foreach ($columns as $column) { if (isset($columnTypes[$column['name']]['defaultValueQuery'])) { $defaultValue = $this->recordManagementRepository->getRecordsBySQLQuery($columnTypes[$column['name']]['defaultValueQuery']); if ($defaultValue !== FALSE) { $defaultValue = $defaultValue[0][0]; } else { $defaultValue = ''; } if ($defaultValue == '' || $defaultValue == NULL) { $defaultValue = 1; } $data[$column['name']]['value'] = $defaultValue; $data[$column['name']]['type'] = 'numeric'; } else { if ($columnTypes[$column['name']]['type'] != 'numeric' && $columnTypes[$column['name']]['type'] != 'int' && $columnTypes[$column['name']]['type'] != 'boolean') { if (isset($arguments[$column['name']])) { $data[$column['name']]['value'] = $arguments[$column['name']]; $data[$column['name']]['type'] = 'text'; } else { if ($columnTypes[$column['name']]['not_null']) { $data[$column['name']]['value'] = ''; $data[$column['name']]['type'] = 'text'; } } } else { if (isset($arguments[$column['name']])) { if ($arguments[$column['name']] == '') { if ($columnTypes[$column['name']]['not_null']) { $data[$column['name']]['value'] = 0; } else { $data[$column['name']]['value'] = 'NULL'; } } else { $data[$column['name']]['value'] = $arguments[$column['name']]; } $data[$column['name']]['type'] = 'numeric'; } else { if ($columnTypes[$column['name']]['not_null']) { $data[$column['name']]['value'] = 0; $data[$column['name']]['type'] = 'numeric'; } } } } } // Search arguments if ($arguments['search']) { $search = $arguments['search']; } else { $search = array(); } // Filter arguments if (isset($arguments['filters'])) { $filters = $arguments['filters']; } else { $filters = array(); } // Include hook to validate data before creating the new record (return TRUE if valid; or return "any error message" if not valid) $isValid = TRUE; if (is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['ezqueries']['recordManagementController']['hookBeforeCreate'])) { foreach ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['ezqueries']['recordManagementController']['hookBeforeCreate'] as $_classRef) { $_procObj =& \TYPO3\CMS\Core\Utility\GeneralUtility::getUserObj($_classRef); $isValid = $_procObj->hookBeforeCreate($data, $columns, $columnTypes, $tables[0]); } } if ($isValid === TRUE) { // Create the record $returnValues = $this->recordManagementRepository->createRecord($tables[0], $data); $status = $returnValues['status']; } else { $status = $isValid; } // Include hook to do something after creating the record if ($status == 'success') { if (is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['ezqueries']['recordManagementController']['hookAfterCreate'])) { foreach ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['ezqueries']['recordManagementController']['hookAfterCreate'] as $_classRef) { $_procObj =& \TYPO3\CMS\Core\Utility\GeneralUtility::getUserObj($_classRef); $_procObj->hookAfterCreate($data, $returnValues['insertID'], $columns, $columnTypes, $tables[0]); } } } // Post-processing SQL if ($status == 'success' && isset($this->settings['postProcessingNewSQL'])) { $templateUtility = $this->objectManager->get('Frohland\\Ezqueries\\Utility\\TemplateUtility'); $postProcessingSQLStatements = explode(';', $this->settings['postProcessingNewSQL']); $postProcessingSQLStatusTotal = ''; $data['ezqueriesAIValue']['type'] = 'numeric'; $data['ezqueriesAIValue']['value'] = $returnValues['insertID']; foreach ($postProcessingSQLStatements as $postProcessingSQLStatement) { if ($postProcessingSQLStatement !== '') { $parsedPostProcessingSQLStatement = $templateUtility->fillMarkersInSQLStatement(trim($postProcessingSQLStatement), $arguments, $data, $this->recordManagementRepository); $postProcessingSQLStatus = $this->recordManagementRepository->executeSQLStatement($parsedPostProcessingSQLStatement); if ($postProcessingSQLStatus !== 'success') { $postProcessingSQLStatusTotal .= '<br />Post-processing error: ' . $postProcessingSQLStatus; } } } } // Show create status switch ($status) { case 'success': $flashMessage = \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate('message_create_successful', 'ezqueries') . $postProcessingSQLStatusTotal; break; default: $flashMessage = \TYPO3\CMS\Extbase\Utility\LocalizationUtility::translate('message_error', 'ezqueries') . ' "' . $status . '"'; $status = 'error'; break; } // Redirect if ($status == 'success') { if ($this->settings['redirectNew'] == 'edit' || $this->settings['redirectNew'] == 'detail') { $primaryKeyColumns = $this->recordManagementRepository->getPrimaryKeyColumns($tables); foreach ($primaryKeyColumns as $column => $value) { if (isset($arguments[$column])) { $primaryKeys[$column] = $arguments[$column]; } else { $primaryKeys[$column] = $returnValues['insertID']; } } } if ($this->settings['redirectNewPage'] !== '' && $this->settings['redirectNewPage'] !== NULL) { $page = $this->settings['redirectNewPage']; if ($this->settings['redirectNew'] == 'list') { $this->redirect('list', NULL, NULL, array(), $page); } if ($this->settings['redirectNew'] == 'edit') { $this->redirect('edit', NULL, NULL, array('primaryKeys' => $primaryKeys), $page); } if ($this->settings['redirectNew'] == 'detail') { $this->redirect('detail', NULL, NULL, array('primaryKeys' => $primaryKeys), $page); } if ($this->settings['redirectNew'] == 'new') { $this->redirect('new', NULL, NULL, array(), $page); } } else { if ($this->settings['redirectNew'] == 'new') { $this->redirect('new', NULL, NULL, array('search' => $search, 'filters' => $filters, 'status' => $status, 'flashMessage' => $flashMessage)); } if ($this->settings['redirectNew'] == 'list') { $this->redirect('list', NULL, NULL, array('search' => $search, 'filters' => $filters)); } if ($this->settings['redirectNew'] == 'edit') { $this->redirect('edit', NULL, NULL, array('primaryKeys' => $primaryKeys, 'search' => $search, 'filters' => $filters)); } if ($this->settings['redirectNew'] == 'detail') { $this->redirect('detail', NULL, NULL, array('primaryKeys' => $primaryKeys, 'search' => $search, 'filters' => $filters)); } } } else { $this->redirect('new', NULL, NULL, array('search' => $search, 'filters' => $filters, 'status' => $status, 'flashMessage' => $flashMessage)); } } else { $this->redirect('error'); } }
/** * Set columns (for the queries) * * @param array $flexFormSettings The Settings from the FlexForm * @return void */ public function setColumns($flexFormSettings) { 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; } $columns = array(); // Get selected columns and all columns if ($flexFormSettings[$selectedColumnsSettings]) { $selectedColumns = explode(',', $flexFormSettings[$selectedColumnsSettings]); foreach ($selectedColumns as $column) { $columns[$column]['cssName'] = str_replace('.', '_', $column); $columns[$column]['columnName'] = substr($column, strpos($column, '.') + 1, strlen($column) - strpos($column, '.') - 1); $columns[$column]['tableName'] = substr($column, 0, strpos($column, '.')); $columns[$column]['name'] = $column; } // Get primary key columns $primaryKeyColumns = $this->recordManagementRepository->getPrimaryKeyColumns($this->table->getTableNames()); foreach ($primaryKeyColumns as $primaryKeyColumn) { $columns[$primaryKeyColumn['name']]['name'] = $primaryKeyColumn['name']; } // Get additional columns (for links, labels, ...) $columnTypes = $this->table->getColumnTypes(); foreach ($columnTypes as $column => $name) { if (isset($columnTypes[$column]['filterColumn'])) { $columns[$columnTypes[$column]['filterColumn']]['name'] = $columnTypes[$column]['filterColumn']; } if ($this->table->getTableType() == 'detail' || $this->table->getTableType() == 'edit') { if (isset($columnTypes[$column]['labelFrom'])) { $columns[$columnTypes[$column]['labelFrom']]['name'] = $columnTypes[$column]['labelFrom']; } } if ($this->table->getTableType() == 'relation') { if ($column == $this->table->getForeignKeyColumn()) { $columns[$column]['name'] = $this->table->getForeignKeyColumn(); } if ($column == $this->table->getForeignKeyRelationColumn()) { $columns[$column]['name'] = $this->table->getForeignKeyRelationColumn(); } } } // Get additional columns (parameters, additional select, ...) foreach ($columns as $column => $name) { if (isset($columnTypes[$column]['parameters'])) { $parameters = explode(',', $columnTypes[$column]['parameters']); foreach ($parameters as $parameter) { $parameter = trim($parameter); $parameterValue = trim(substr($parameter, strpos($parameter, '=') + 1, strlen($parameter) - strpos($parameter, '=') - 1)); if ($parameterValue[0] != '"') { $columns[$parameterValue]['name'] = $parameterValue; } } } if ($columnTypes[$column]['type'] == 'additional') { unset($columns[$column]); if (isset($columnTypes[$column]['select'])) { $columns[$column]['cssName'] = str_replace('.', '_', $column); $columns[$column]['name'] = $column; $columns[$column]['query'] = $columnTypes[$column]['select']; } } } } else { $columns = $this->recordManagementRepository->getColumnsFromTables($this->table->getTableNames()); } $this->table->setColumns($columns); }