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