/** * 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)); } }
/** * Set conditions * * @param array $flexFormSettings The Settings from the FlexForm * @param array $arguments The POST or GET parameters * @return void */ public function setConditions($flexFormSettings, $arguments) { $columnTypes = $this->table->getColumnTypes(); // Include hook to edit arguments if (is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['ezqueries']['recordManagement']['hookEditArguments'])) { foreach ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['ezqueries']['recordManagement']['hookEditArguments'] as $_classRef) { $_procObj =& \TYPO3\CMS\Core\Utility\GeneralUtility::getUserObj($_classRef); $arguments = $_procObj->hookEditArguments($arguments); } } if ($this->table->getTableType() !== 'relation') { // Set where, orderby ,order and groupby if (isset($arguments['orderBy']) && $arguments['orderBy'] !== '' && isset($arguments['order'])) { $orderBy = $arguments['orderBy']; $order = $arguments['order']; $orderByValue = NULL; } else { if (isset($flexFormSettings['orderByValue']) && $flexFormSettings['orderByValue'] !== '') { $orderByValue = $flexFormSettings['orderByValue']; } else { $orderBy = $flexFormSettings['orderBy']; $orderByValue = NULL; } $order = $flexFormSettings['order']; } $groupBy = $flexFormSettings['groupBy']; $where = ''; if (isset($flexFormSettings['where'])) { $where .= $flexFormSettings['where']; } // User authentication $userGroup = $GLOBALS['TSFE']->fe_user->user['usergroup']; $userID = $GLOBALS['TSFE']->fe_user->user['uid']; if (isset($flexFormSettings['userIDColumn']) && $userGroup !== $flexFormSettings['adminUserGroup']) { $tables = $this->table->getTableNames(); $column = ''; if (strpos($flexFormSettings['userIDColumn'], '.') !== false) { $column = $flexFormSettings['userIDColumn']; } else { $column = $tables[0] . '.' . $flexFormSettings['userIDColumn']; } if ($where !== '') { $where .= ' AND ' . $column . '="' . $userID . '"'; } else { $where .= '' . $column . '="' . $userID . '"'; } } $this->conditions->setWhere($where); $this->conditions->setOrderBy($orderBy); $this->conditions->setOrderByValue($orderByValue); $this->conditions->setOrder($order); $this->conditions->setGroupBy($groupBy); // Set search if (isset($arguments['search'])) { foreach ($arguments['search'] as $column => $value) { if ($column !== 'highlighting' && $column !== 'fullTextSearch') { if ($arguments['search'][$column]['value'] !== NULL && $arguments['search'][$column]['value'] !== "") { $connection = $this->recordManagementRepository->connect(); $search[$column]['value'] = substr($connection->qstr($arguments['search'][$column]['value']), 1, -1); $connection->Close(); $search[$column]['operation'] = $arguments['search'][$column]['operation']; $search[$column]['columnType'] = $columnTypes[$column]['type']; if (isset($arguments['search'][$column]['searchMode'])) { $search[$column]['searchMode'] = $arguments['search'][$column]['searchMode']; } else { $search[$column]['searchMode'] = $columnTypes[$column]['searchMode']; } $search[$column]['searchType'] = $arguments['search'][$column]['searchType']; } } } if (!isset($arguments['search']['highlighting'])) { if ($flexFormSettings['enableSearchMarks']) { $search['highlighting'] = 'true'; } else { $search['highlighting'] = 'false'; } } else { $search['highlighting'] = $arguments['search']['highlighting']; } if (isset($arguments['search']['fullTextSearch'])) { $search['fullTextSearch'] = $arguments['search']['fullTextSearch']; } } else { $search = array(); } $this->conditions->setSearch($search); // Set filters if (isset($arguments['filters'])) { $filters = $arguments['filters']; } else { $filters = array(); } $this->conditions->setFilters($filters); } else { // Set where for relation view $where = $flexFormSettings['relationForeignKeyColumn'] . '="' . $arguments['foreignKey'] . '"'; $this->conditions->setWhere($where); $this->table->setForeignKeyColumn($flexFormSettings['relationForeignKeyColumn']); $this->table->setForeignKeyRelationColumn($flexFormSettings['relationForeignKeyRelationColumn']); } // Set column relations if ($flexFormSettings['columnRelations']) { $this->conditions->setColumnRelations(explode(',', $flexFormSettings['columnRelations'])); } // Set records count $recordsCount = $this->recordManagementRepository->countRecordsFromTable($this->table->getColumns(), $this->table->getTableNames(), $this->conditions); $this->conditions->setRecordsCount($recordsCount); // Set page browser stuff if list view if ($this->table->getTableType() == 'list') { // Set number of records per page if ($arguments['recordsPerPage']) { $recordsPerPage = $recordsCount; } else { if ($flexFormSettings['recordsPerPage']) { $recordsPerPage = $flexFormSettings['recordsPerPage']; } else { $recordsPerPage = $recordsCount; } } $recordsPerPage = (int) $recordsPerPage; $this->conditions->setRecordsPerPage($recordsPerPage); // Set maximum count of pages if ($flexFormSettings['maxPages']) { $maxPages = $flexFormSettings['maxPages']; } else { $maxPages = 0; } $maxPages = (int) $maxPages; $this->conditions->setMaxPages($maxPages); // Set start record if ($arguments['startRecord']) { $startRecord = $arguments['startRecord']; } else { $startRecord = 0; } $this->conditions->setStartRecord($startRecord); } }