/**
  * 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;
 }
 /**
  * @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;
 }