/** * Adds an item to the index queue. * * Not meant for public use. * * @param string $itemType The item's type, usually a table name. * @param string $itemUid The item's uid, usually an integer uid, could be a * different value for non-database-record types. * @param string $indexingConfiguration The item's indexing configuration to use. * Optional, overwrites existing / determined configuration. * @return void */ private function addItem($itemType, $itemUid, $indexingConfiguration) { // FIXME must respect the indexer's additionalWhereClause option: // must not add items to the index queue which are excluded through // additionalWhereClause. Requires construction of additionalWhereClause // through multiple options instead of just one // FIXME temporary until we have a query builder to take care of this $additionalRecordFields = ''; if ($itemType == 'pages') { $additionalRecordFields = ', doktype, uid'; } $record = t3lib_BEfunc::getRecord($itemType, $itemUid, 'pid' . $additionalRecordFields); // FIXME temporary until we have a query builder to take care of this if (empty($record) || $itemType == 'pages' && !Tx_Solr_Util::isAllowedPageType($record)) { return; } if ($itemType == 'pages') { $rootPageId = Tx_Solr_Util::getRootPageId($itemUid); } else { $rootPageId = Tx_Solr_Util::getRootPageId($record['pid']); } if (Tx_Solr_Util::isRootPage($rootPageId)) { $item = array('root' => $rootPageId, 'item_type' => $itemType, 'item_uid' => $itemUid, 'changed' => $this->getItemChangedTime($itemType, $itemUid)); if (!empty($indexingConfiguration)) { $indexingConfigurationList = array($indexingConfiguration); } else { $indexingConfigurationList = $this->getIndexingConfigurationsByItem($itemType, $itemUid, $rootPageId); } // make a backup of the current item $baseItem = $item; foreach ($indexingConfigurationList as $indexingConfigurationCurrent) { $item = $baseItem; $item['indexing_configuration'] = $indexingConfigurationCurrent; $writeToIndex = TRUE; // Ensure additionalWhereClause is applied. $solrConfiguration = tx_solr_Util::getSolrConfigurationFromPageId($record['pid']); if (!empty($solrConfiguration['index.']['queue.'][$item['indexing_configuration'] . '.']['additionalWhereClause'])) { $record = t3lib_BEfunc::getRecord($itemType, $itemUid, 'pid' . $additionalRecordFields, ' AND ' . $solrConfiguration['index.']['queue.'][$item['indexing_configuration'] . '.']['additionalWhereClause']); if (empty($record)) { $writeToIndex = FALSE; } } if ($writeToIndex) { $GLOBALS['TYPO3_DB']->exec_INSERTquery('tx_solr_indexqueue_item', $item); } } } }
/** * Adds an item to the index queue. * * Not meant for public use. * * @param string $itemType The item's type, usually a table name. * @param string $itemUid The item's uid, usually an integer uid, could be a * different value for non-database-record types. * @param string $indexingConfiguration The item's indexing configuration to use. * Optional, overwrites existing / determined configuration. * @return void */ private function addItem($itemType, $itemUid, $indexingConfiguration) { $additionalRecordFields = ''; if ($itemType == 'pages') { $additionalRecordFields = ', doktype, uid'; } $record = BackendUtility::getRecord($itemType, $itemUid, 'pid' . $additionalRecordFields); if (empty($record) || $itemType == 'pages' && !Tx_Solr_Util::isAllowedPageType($record)) { return; } if ($itemType == 'pages') { $rootPageId = Tx_Solr_Util::getRootPageId($itemUid); } else { $rootPageId = Tx_Solr_Util::getRootPageId($record['pid']); } if (Tx_Solr_Util::isRootPage($rootPageId)) { $item = array('root' => $rootPageId, 'item_type' => $itemType, 'item_uid' => $itemUid, 'changed' => $this->getItemChangedTime($itemType, $itemUid)); if (!empty($indexingConfiguration)) { $indexingConfigurationList = array($indexingConfiguration); } else { $indexingConfigurationList = $this->getIndexingConfigurationsByItem($itemType, $itemUid, $rootPageId); } $solrConfiguration = tx_solr_Util::getSolrConfigurationFromPageId($rootPageId); // make a backup of the current item $baseItem = $item; foreach ($indexingConfigurationList as $indexingConfigurationCurrent) { $item = $baseItem; $item['indexing_configuration'] = $indexingConfigurationCurrent; $addItemToQueue = TRUE; // Ensure additionalWhereClause is applied. if (!empty($solrConfiguration['index.']['queue.'][$item['indexing_configuration'] . '.']['additionalWhereClause'])) { $indexingConfigurationCheckRecord = BackendUtility::getRecord($itemType, $itemUid, 'pid' . $additionalRecordFields, ' AND ' . $solrConfiguration['index.']['queue.'][$item['indexing_configuration'] . '.']['additionalWhereClause']); if (empty($indexingConfigurationCheckRecord)) { // item does not match the indexing configuration's additionalWhereClause $addItemToQueue = FALSE; } } if ($addItemToQueue) { $GLOBALS['TYPO3_DB']->exec_INSERTquery('tx_solr_indexqueue_item', $item); } } } }