public function testObjectIndexer() { //use a news-record, if available if (class_module_system_module::getModuleByName("news") === null) { return; } $objConfig = class_module_system_setting::getConfigByName("_search_deferred_indexer_"); $objConfig->setStrValue("true"); $objConfig->updateObjectToDb(); $objNews = new class_module_news_news(); $objNews->setStrTitle("demo 1"); $objNews->setStrIntro("intro demo news"); $objNews->setStrText("text demo news"); $objNews->updateObjectToDb(); $strNewsId = $objNews->getSystemid(); //trigger the endprocessinglistener $objHandler = new class_module_search_request_endprocessinglistener(); $objHandler->handleEvent(class_system_eventidentifier::EVENT_SYSTEM_REQUEST_AFTERCONTENTSEND, array()); //query queue table $objQueue = new class_search_indexqueue(); $arrRows = $objQueue->getRowsBySystemid(class_search_enum_indexaction::INDEX(), $strNewsId); $this->assertTrue(count($arrRows) == 1); $this->assertTrue($arrRows[0]["search_queue_systemid"] == $objNews->getSystemid()); class_objectfactory::getInstance()->getObject($strNewsId)->deleteObjectFromDatabase(); $objHandler->handleEvent(class_system_eventidentifier::EVENT_SYSTEM_REQUEST_AFTERCONTENTSEND, array()); $arrRows = $objQueue->getRowsBySystemid(class_search_enum_indexaction::DELETE(), $strNewsId); $this->assertTrue(count($arrRows) == 1); $this->assertTrue($arrRows[0]["search_queue_systemid"] == $objNews->getSystemid()); $objConfig = class_module_system_setting::getConfigByName("_search_deferred_indexer_"); $objQueue->deleteBySystemid($strNewsId); $objConfig->setStrValue("false"); $objConfig->updateObjectToDb(); }
/** * Creates a new workflow-instance in order to index changed objects in a decoupled process */ private function processDeferred() { $arrRows = array(); foreach (array_keys(self::$arrToIndex) as $strOneId) { $arrRows[] = array(generateSystemid(), $strOneId, class_search_enum_indexaction::INDEX() . ""); } foreach (array_keys(self::$arrToDelete) as $strOneId) { $arrRows[] = array(generateSystemid(), $strOneId, class_search_enum_indexaction::DELETE() . ""); } $objQueue = new class_search_indexqueue(); $objQueue->addRowsToQueue($arrRows); }
/** * @return bool */ public function execute() { $objIndex = new class_module_search_indexwriter(); //start with deletions $objQueue = new class_search_indexqueue(); foreach ($objQueue->getRows(class_search_enum_indexaction::DELETE()) as $arrRow) { $objIndex->removeRecordFromIndex($arrRow["search_queue_systemid"]); $objQueue->deleteBySystemid($arrRow["search_queue_systemid"]); } //index objects foreach ($objQueue->getRows(class_search_enum_indexaction::INDEX(), 0, $this->intMaxObjectsPerRun) as $arrRow) { $objIndex->indexObject(class_objectfactory::getInstance()->getObject($arrRow["search_queue_systemid"])); $objQueue->deleteBySystemidAndAction($arrRow["search_queue_systemid"], class_search_enum_indexaction::INDEX()); } //reschedule for the next run return false; }