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