/** * Hook for updates in Typo3 backend * @param array $incomingFieldArray * @param string $table * @param integer $id * @param \TYPO3\CMS\Core\DataHandling\DataHandler $tcemain */ public function processDatamap_preProcessFieldArray(&$incomingFieldArray, $table, $id, \TYPO3\CMS\Core\DataHandling\DataHandler &$tcemain) { if (FALSE === $this->needsOverWriteProtection($table)) { return; } // check, if overwrite-protection-fields are set: // If they are NOT set, it means, that any other extension maybe called the process_datamap! if (false === array_key_exists(self::OVERWRITE_PROTECTION_TILL, $incomingFieldArray) || false === array_key_exists(self::OVERWRITE_PROTECTION_MODE, $incomingFieldArray)) { return; } if (FALSE === $this->hasOverWriteProtection($incomingFieldArray)) { $this->removeOverwriteprotection($id, $table); } else { $protection = strtotime($incomingFieldArray[self::OVERWRITE_PROTECTION_TILL]); $mode = $incomingFieldArray[self::OVERWRITE_PROTECTION_MODE]; $result = $this->getOverwriteprotectionRepository()->findByProtectedUidAndTableName($id, $table); if ($result->count() === 0) { /* @var $overwriteprotection Tx_AoeDbsequenzer_Domain_Model_Overwriteprotection */ $overwriteprotection = $this->objectManager->get('Tx_AoeDbsequenzer_Domain_Model_Overwriteprotection'); $overwriteprotection->setProtectedMode($mode); $overwriteprotection->setPid($tcemain->getPID($table, $id)); $overwriteprotection->setProtectedTablename($table); $overwriteprotection->setProtectedUid($id); $overwriteprotection->setProtectedTime($protection); $this->getOverwriteprotectionRepository()->add($overwriteprotection); } else { foreach ($result as $overwriteprotection) { /* @var $overwriteprotection Tx_AoeDbsequenzer_Domain_Model_Overwriteprotection */ $overwriteprotection->setProtectedMode($mode); $overwriteprotection->setProtectedTime($protection); $this->getOverwriteprotectionRepository()->update($overwriteprotection); } } $this->persistAll(); } unset($incomingFieldArray[self::OVERWRITE_PROTECTION_TILL]); unset($incomingFieldArray[self::OVERWRITE_PROTECTION_MODE]); }
/** * Hooks into TCE Main and watches all record creations and updates. If it * detects that the new/updated record belongs to a table configured for * indexing through Solr, we add the record to the index queue. * * @param string $status Status of the current operation, 'new' or 'update' * @param string $table The table the record belongs to * @param mixed $uid The record's uid, [integer] or [string] (like 'NEW...') * @param array $fields The record's data * @param DataHandler $tceMain TYPO3 Core Engine parent object * @return void */ public function processDatamap_afterDatabaseOperations($status, $table, $uid, array $fields, DataHandler $tceMain) { $recordTable = $table; $recordUid = $uid; $recordPageId = 0; if ($status == 'new') { $recordUid = $tceMain->substNEWwithIDs[$recordUid]; } if (Util::isDraftRecord($table, $recordUid)) { // skip workspaces: index only LIVE workspace return; } if ($status == 'update' && !isset($fields['pid'])) { $recordPageId = $tceMain->getPID($recordTable, $recordUid); if ($recordTable == 'pages' && Util::isRootPage($recordUid)) { $recordPageId = $uid; } } else { $recordPageId = $fields['pid']; } // when a content element changes we need to updated the page instead if ($recordTable == 'tt_content') { $recordTable = 'pages'; $recordUid = $recordPageId; } $this->solrConfiguration = Util::getSolrConfigurationFromPageId($recordPageId); $monitoredTables = $this->getMonitoredTables($recordPageId); if (in_array($recordTable, $monitoredTables, true)) { $record = $this->getRecord($recordTable, $recordUid); if (!empty($record)) { // only update/insert the item if we actually found a record if (Util::isLocalizedRecord($recordTable, $record)) { // if it's a localization overlay, update the original record instead $recordUid = $record[$GLOBALS['TCA'][$recordTable]['ctrl']['transOrigPointerField']]; if ($recordTable == 'pages_language_overlay') { $recordTable = 'pages'; } $tableEnableFields = implode(', ', $GLOBALS['TCA'][$recordTable]['ctrl']['enablecolumns']); $l10nParentRecord = BackendUtility::getRecord($recordTable, $recordUid, $tableEnableFields, '', false); if (!$this->isEnabledRecord($recordTable, $l10nParentRecord)) { // the l10n parent record must be visible to have it's translation indexed return; } } // Clear existing index queue items to prevent mount point duplicates. if ($recordTable == 'pages') { $this->indexQueue->deleteItem('pages', $recordUid); } if ($this->isEnabledRecord($recordTable, $record)) { $configurationName = null; if ($recordTable !== 'pages') { $configurationName = $this->getIndexingConfigurationName($recordTable, $recordUid); } $this->indexQueue->updateItem($recordTable, $recordUid, $configurationName); } if ($recordTable == 'pages') { $this->updateCanonicalPages($recordUid); $this->updateMountPages($recordUid); if ($this->isRecursiveUpdateRequired($recordUid, $fields)) { $treePageIds = $this->getSubPageIds($recordUid); foreach ($treePageIds as $treePageId) { $this->indexQueue->updateItem('pages', $treePageId); } } } } else { // TODO move this part to the garbage collector // check if the item should be removed from the index because it no longer matches the conditions if ($this->indexQueue->containsItem($recordTable, $recordUid)) { $this->removeFromIndexAndQueue($recordTable, $recordUid); } } } }
/** * Hook for updates in Typo3 backend * @param array $incomingFieldArray * @param string $table * @param integer $id * @param \TYPO3\CMS\Core\DataHandling\DataHandler $tceMain * @codingStandardsIgnoreStart */ public function processDatamap_preProcessFieldArray(&$incomingFieldArray, $table, $id, \TYPO3\CMS\Core\DataHandling\DataHandler &$tceMain) { // @codingStandardsIgnoreEnd if (array_key_exists(self::FIELD_BEHAVIOR, $incomingFieldArray) && array_key_exists(self::FIELD_FLAG, $incomingFieldArray)) { $pid = $tceMain->getPID($table, $id); $this->updateMapping($table, $id, $incomingFieldArray[self::FIELD_FLAG], $pid, $incomingFieldArray[self::FIELD_BEHAVIOR]); unset($incomingFieldArray[self::FIELD_BEHAVIOR]); unset($incomingFieldArray[self::FIELD_FLAG]); } }