function ReindexModule($MODULE_ID, $bFull=false) { global $APPLICATION; $DB = CDatabase::GetModuleConnection('search'); if($bFull) CSearch::DeleteForReindex($MODULE_ID); $NS=Array("CLEAR"=>"N", "MODULE"=>"", "ID"=>"", "SESS_ID"=>md5(uniqid(""))); //for every who wants to be reindexed foreach(GetModuleEvents("search", "OnReindex", true) as $arEvent) { if($arEvent["TO_MODULE_ID"]!=$MODULE_ID) continue; $oCallBack = new CSearchCallback; $oCallBack->MODULE = $arEvent["TO_MODULE_ID"]; $oCallBack->CNT = &$NS["CNT"]; $oCallBack->SESS_ID = $NS["SESS_ID"]; $r = &$oCallBack; $arResult = ExecuteModuleEventEx($arEvent, array($NS, $r, "Index")); if(is_array($arResult)) //old way { foreach($arResult as $arFields) { $ID = $arFields["ID"]; if(strlen($ID) > 0) { unset($arFields["ID"]); $NS["CNT"]++; CSearch::Index($arEvent["TO_MODULE_ID"], $ID, $arFields, false, $NS["SESS_ID"]); } } } else //new way { return Array("MODULE"=>$arEvent["TO_MODULE_ID"], "CNT"=>$oCallBack->CNT, "ID"=>$arResult, "CLEAR"=>$NS["CLEAR"], "SESS_ID"=>$NS["SESS_ID"]); } } if(!$bFull) CSearch::DeleteOld($NS["SESS_ID"], $MODULE_ID, $NS["SITE_ID"]); }