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;
 }