/**
  * Triggered as soon as a record is updated
  *
  * @param string $strEventName
  * @param array $arrArguments
  *
  * @return bool
  */
 public function handleEvent($strEventName, array $arrArguments)
 {
     $objRecord = $arrArguments[0];
     if (self::$BIT_UPDATE_INDEX_ON_END_OF_REQUEST) {
         class_module_search_request_endprocessinglistener::addIdToIndex($objRecord);
     } else {
         $objIndex = new class_module_search_indexwriter();
         $objIndex->indexObject($objRecord);
     }
     return true;
 }
 /**
  * @param string $strEventName
  * @param array $arrArguments
  *
  * @return bool
  */
 public function handleEvent($strEventName, array $arrArguments)
 {
     //unwrap arguments
     list($strSystemid, $strSourceClass) = $arrArguments;
     if (self::$BIT_UPDATE_INDEX_ON_END_OF_REQUEST) {
         class_module_search_request_endprocessinglistener::addIdToDelete($strSystemid);
         return true;
     } else {
         $objIndex = new class_module_search_indexwriter();
         return $objIndex->removeRecordFromIndex($strSystemid);
     }
 }
 protected function tearDown()
 {
     //since the test cleared the index, we want a fresh index again :)
     $objSearchIndexWriter = new class_module_search_indexwriter();
     $objSearchIndexWriter->indexRebuild();
     foreach (self::$arrObjectIds as $intKey => $strId) {
         $objObject = class_objectfactory::getInstance()->getObject($strId);
         if ($objObject !== null) {
             $objObject->deleteObjectFromDatabase();
         }
         unset(self::$arrObjectIds[$intKey]);
     }
 }
 /**
  * Handles the processing of objects directly
  */
 private function processDirectly()
 {
     $objIndex = new class_module_search_indexwriter();
     //start by processing the records to be deleted
     foreach (self::$arrToDelete as $strOneId => $strObject) {
         $objIndex->removeRecordFromIndex($strOneId);
     }
     //add new records
     foreach (self::$arrToIndex as $strOneId => $objInstance) {
         if (!is_object($objIndex) && validateSystemid($objInstance)) {
             $objInstance = class_objectfactory::getInstance()->getObject($objInstance);
         }
         $objIndex->indexObject($objInstance);
     }
 }
 /**
  * @see interface_admin_systemtast::executeTask()
  * @return string
  */
 public function executeTask()
 {
     if (!class_module_system_module::getModuleByName("search")->rightEdit()) {
         return $this->getLang("commons_error_permissions");
     }
     $objWorker = new class_module_search_indexwriter();
     if (!class_carrier::getInstance()->getObjSession()->sessionIsset($this->STR_SESSION_KEY)) {
         //fetch all records to be indexed
         $strQuery = "SELECT system_id FROM " . _dbprefix_ . "system WHERE system_deleted = 0";
         $arrRows = class_carrier::getInstance()->getObjDB()->getPArray($strQuery, array());
         $arrIds = array();
         foreach ($arrRows as $arrOneRow) {
             $arrIds[] = $arrOneRow["system_id"];
         }
         $objWorker->clearIndex();
         class_carrier::getInstance()->getObjSession()->setSession($this->STR_SESSION_KEY, $arrIds);
         $this->setParam("totalCount", count($arrIds));
     }
     $arrIds = class_carrier::getInstance()->getObjSession()->getSession($this->STR_SESSION_KEY);
     if (count($arrIds) == 0) {
         class_carrier::getInstance()->getObjSession()->sessionUnset($this->STR_SESSION_KEY);
         return $this->objToolkit->getTextRow($this->getLang("worker_indexrebuild_end", array($objWorker->getNumberOfDocuments(), $objWorker->getNumberOfContentEntries())));
     }
     $intMax = 0;
     foreach ($arrIds as $intKey => $strOneValue) {
         $objObject = class_objectfactory::getInstance()->getObject($strOneValue);
         if ($objObject != null) {
             $objWorker->indexObject($objObject);
         }
         unset($arrIds[$intKey]);
         if ($intMax++ > 500) {
             break;
         }
     }
     class_carrier::getInstance()->getObjSession()->setSession($this->STR_SESSION_KEY, $arrIds);
     //and create a small progress-info
     $intTotal = $this->getParam("totalCount");
     $floatOnePercent = 100 / $intTotal;
     //and multiply it with the already processed records
     $intLookupsDone = ((int) $intTotal - count($arrIds)) * $floatOnePercent;
     $intLookupsDone = round($intLookupsDone, 2);
     if ($intLookupsDone < 0) {
         $intLookupsDone = 0;
     }
     $this->setStrProgressInformation($this->getLang("worker_indexrebuild", array($objWorker->getNumberOfDocuments(), $objWorker->getNumberOfContentEntries())));
     $this->setStrReloadParam("&totalCount=" . $this->getParam("totalCount"));
     return $intLookupsDone;
 }
 /**
  * @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;
 }
 private function updateIndex()
 {
     class_carrier::getInstance()->flushCache(class_carrier::INT_CACHE_TYPE_DBQUERIES | class_carrier::INT_CACHE_TYPE_MODULES);
     class_module_search_indexwriter::resetIndexAvailableCheck();
     $objWorker = new class_module_search_indexwriter();
     $objWorker->indexRebuild();
 }
 public function testFullIndexWriter()
 {
     if (@ini_get("max_execution_time") < 300 && @ini_get("max_execution_time") > 0) {
         @ini_set("max_execution_time", 300);
     }
     $indexWriter = new class_module_search_indexwriter();
     $intQueriesStart = class_db::getInstance()->getNumber();
     $intTimeStart = microtime(true);
     $indexWriter->indexRebuild();
     $intTimeEnd = microtime(true);
     $time = $intTimeEnd - $intTimeStart;
     echo "Index erstellt in " . sprintf('%f', $time) . " sec.\n";
     echo "Index erstellt mit " . (class_db::getInstance()->getNumber() - $intQueriesStart) . " queries.\n";
 }
 /**
  * Resets the internal check whether the search module is available with index support or not.
  * @return void
  */
 public static function resetIndexAvailableCheck()
 {
     self::$isIndexAvailable = null;
 }