/** * Set column types * * @param array $flexFormSettings The Settings from the FlexForm * @return void */ public function setColumnTypes($flexFormSettings) { $columnTypes = $this->recordManagementRepository->getColumnTypes($this->table->getTableNames()); $columnConfig = $flexFormSettings['columnConfiguration']; $types = $this->mergeColumnTypesWithColumnConfig($columnTypes, $columnConfig); // Sortable columns? if ($this->table->getTableType() == 'list' && $flexFormSettings['useSortableColumns']) { $sortableColumns = explode(',', $flexFormSettings['sortableColumns']); foreach ($sortableColumns as $sortableColumn) { $types[$sortableColumn]['sortable'] = TRUE; } } // Include hook to set custom column types if (is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['ezqueries']['recordManagement']['hookSetColumnTypes'])) { foreach ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['ezqueries']['recordManagement']['hookSetColumnTypes'] as $_classRef) { $_procObj =& \TYPO3\CMS\Core\Utility\GeneralUtility::getUserObj($_classRef); $types = $_procObj->hookSetColumnTypes($types, $this->table->getTableType()); } } $this->table->setColumnTypes($types); }
/** * Assign relations * * @return void */ public function assignAction() { // Check permission if ($this->settings['enableRelation']) { // Get $_GET and $_POST parameters $arguments = $this->request->getArguments(); $flashMessage = ''; // Set Table names $tables = explode(',', $this->settings['tables']); // Get column types $columnTypes = $this->recordManagementRepository->getColumnTypes($tables); // Set foreign key / foreign key columns $foreignKeyColumn = $this->settings['relationForeignKeyColumn']; $foreignKeyRelationColumn = $this->settings['relationForeignKeyRelationColumn']; $foreignKey = $arguments['foreignKey']; // Get relation data $relationDataOld = explode('<->', $arguments['relationDataOld']); array_pop($relationDataOld); $relationDataNew = explode('<->', $arguments['relationDataNew']); array_pop($relationDataNew); if ($this->settings['relationType'] == 'manytomany') { // Delete removed relations foreach ($relationDataOld as $idOld) { $deleteRelation = true; $status = 'success'; foreach ($relationDataNew as $idNew) { if ($idOld == $idNew) { $deleteRelation = false; break; } } if ($deleteRelation) { $deleteData = array(); $deleteData[$foreignKeyColumn] = $foreignKey; $deleteData[$foreignKeyRelationColumn] = $idOld; $status = $this->recordManagementRepository->deleteRecord($tables[0], $deleteData); } // Status switch ($status) { case 'success': break; default: $flashMessage .= ' "' . $status . '"'; break; } } // Create added relations foreach ($relationDataNew as $idNew) { $createRelation = true; $status = 'success'; foreach ($relationDataOld as $idOld) { if ($idNew == $idOld) { $createRelation = false; break; } } if ($createRelation) { $createData = array(); $createData[$foreignKeyColumn]['value'] = $foreignKey; if ($columnTypes[$foreignKeyColumn]['type'] != 'numeric' && $columnTypes[$foreignKeyColumn]['type'] != 'int' && $columnTypes[$foreignKeyColumn]['type'] != 'boolean') { $createData[$foreignKeyColumn]['type'] = 'text'; } else { $createData[$foreignKeyColumn]['type'] = 'numeric'; } $createData[$foreignKeyRelationColumn]['value'] = $idNew; if ($columnTypes[$foreignKeyRelationColumn]['type'] != 'numeric' && $columnTypes[$foreignKeyRelationColumn]['type'] != 'int' && $columnTypes[$foreignKeyRelationColumn]['type'] != 'boolean') { $createData[$foreignKeyRelationColumn]['type'] = 'text'; } else { $createData[$foreignKeyRelationColumn]['type'] = 'numeric'; } $returnValues = $this->recordManagementRepository->createRecord($tables[0], $createData); $status = $returnValues['status']; } // Status switch ($status) { case 'success': break; default: $flashMessage .= ' "' . $status . '"'; break; } } } else { // Update removed relations foreach ($relationDataOld as $idOld) { $deleteRelation = true; $status = 'success'; foreach ($relationDataNew as $idNew) { if ($idOld == $idNew) { $deleteRelation = false; break; } } if ($deleteRelation) { $recordIdentifier = array(); $recordIdentifier[$foreignKeyColumn] = $foreignKey; $recordIdentifier[$foreignKeyRelationColumn] = $idOld; $updateData = array(); if ($columnTypes[$foreignKeyColumn]['type'] != 'numeric' && $columnTypes[$foreignKeyColumn]['type'] != 'int' && $columnTypes[$foreignKeyColumn]['type'] != 'boolean') { $updateData[$foreignKeyColumn]['value'] = ''; $updateData[$foreignKeyColumn]['type'] = 'text'; } else { if ($columnTypes[$foreignKeyColumn]['not_null']) { $updateData[$foreignKeyColumn]['value'] = 0; } else { $updateData[$foreignKeyColumn]['value'] = NULL; } $updateData[$foreignKeyColumn]['type'] = 'numeric'; } $status = $this->recordManagementRepository->updateRecord($tables[0], $recordIdentifier, $updateData); } // Status switch ($status) { case 'success': break; default: $flashMessage .= ' "' . $status . '"'; break; } } // Update added relations foreach ($relationDataNew as $idNew) { $createRelation = true; $status = 'success'; foreach ($relationDataOld as $idOld) { if ($idNew == $idOld) { $createRelation = false; break; } } if ($createRelation) { $recordIdentifier = array(); $recordIdentifier[$foreignKeyRelationColumn] = $idNew; $updateData = array(); $updateData[$foreignKeyColumn]['value'] = $foreignKey; if ($columnTypes[$foreignKeyColumn]['type'] != 'numeric' && $columnTypes[$foreignKeyColumn]['type'] != 'int' && $columnTypes[$foreignKeyColumn]['type'] != 'boolean') { $updateData[$foreignKeyColumn]['type'] = 'text'; } else { $updateData[$foreignKeyColumn]['type'] = 'numeric'; } $status = $this->recordManagementRepository->updateRecord($tables[0], $recordIdentifier, $updateData); } // Status switch ($status) { case 'success': break; default: $flashMessage .= ' "' . $status . '"'; break; } } } $this->redirect('relation', NULL, NULL, array('foreignKey' => $foreignKey, 'flashMessage' => $flashMessage)); } }