function GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray = false) { global $DB, $MAIN_MODULE_EVENTS, $MAIN_MODULE_EVENTS_INIT; if ($MAIN_MODULE_EVENTS_INIT === false) { global $CACHE_MANAGER; if ($CACHE_MANAGER->Read(3600, "b_module_to_module")) { $arEvents = $CACHE_MANAGER->Get("b_module_to_module"); } else { $arEvents = array(); $rs = $DB->Query("\n\t\t\t\tSELECT\n\t\t\t\t\t*\n\t\t\t\tFROM\n\t\t\t\t\tb_module_to_module m2m\n\t\t\t\tINNER JOIN b_module m ON (m2m.TO_MODULE_ID = m.ID)\n\t\t\t\tORDER BY SORT\n\t\t\t"); while ($ar = $rs->Fetch()) { $ar['TO_NAME'] = CModule::_GetName($ar); $ar["~FROM_MODULE_ID"] = strtoupper($ar["FROM_MODULE_ID"]); $ar["~MESSAGE_ID"] = strtoupper($ar["MESSAGE_ID"]); if (strlen($ar["TO_METHOD_ARG"]) > 0) { $ar["TO_METHOD_ARG"] = unserialize($ar["TO_METHOD_ARG"]); } else { $ar["TO_METHOD_ARG"] = array(); } $arEvents[] = $ar; } $CACHE_MANAGER->Set("b_module_to_module", $arEvents); } if (!is_array($arEvents)) { $arEvents = array(); } $copy_MAIN_MODULE_EVENTS = $MAIN_MODULE_EVENTS; foreach ($arEvents as $ar) { if (intval($ar["VERSION"]) < 2) { $MAIN_MODULE_EVENTS[$ar["~FROM_MODULE_ID"]][$ar["~MESSAGE_ID"]][] = $ar; } } // need to re-sort because of AddEventHandler() calls foreach ($copy_MAIN_MODULE_EVENTS as $module => $temp1) { foreach ($copy_MAIN_MODULE_EVENTS[$module] as $message => $temp2) { sortByColumn($MAIN_MODULE_EVENTS[$module][$message], "SORT"); } } $MAIN_MODULE_EVENTS_INIT = true; } $MODULE_ID = strtoupper($MODULE_ID); $MESSAGE_ID = strtoupper($MESSAGE_ID); if (array_key_exists($MODULE_ID, $MAIN_MODULE_EVENTS) && array_key_exists($MESSAGE_ID, $MAIN_MODULE_EVENTS[$MODULE_ID])) { $arrResult = $MAIN_MODULE_EVENTS[$MODULE_ID][$MESSAGE_ID]; } else { $arrResult = array(); } if ($bReturnArray) { return $arrResult; } else { $resRS = new CDBResult(); $resRS->InitFromArray($arrResult); return $resRS; } }
function GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray = false) { global $DB, $MAIN_MODULE_EVENTS, $MAIN_MODULE_EVENTS_INIT; if($MAIN_MODULE_EVENTS_INIT === false) { global $CACHE_MANAGER; if($CACHE_MANAGER->Read(3600, "b_module_to_module")) $arEvents = $CACHE_MANAGER->Get("b_module_to_module"); else { $arEvents = array(); $rs = $DB->Query(" SELECT * FROM b_module_to_module m2m INNER JOIN b_module m ON (m2m.TO_MODULE_ID = m.ID) ORDER BY SORT "); while($ar = $rs->Fetch()) { $ar['TO_NAME'] = CModule::_GetName($ar); $ar["~FROM_MODULE_ID"]=strtoupper($ar["FROM_MODULE_ID"]); $ar["~MESSAGE_ID"]=strtoupper($ar["MESSAGE_ID"]); if (strlen($ar["TO_METHOD_ARG"]) > 0) $ar["TO_METHOD_ARG"] = unserialize($ar["TO_METHOD_ARG"]); else $ar["TO_METHOD_ARG"] = array(); $arEvents[] = $ar; } $CACHE_MANAGER->Set("b_module_to_module", $arEvents); } if(!is_array($arEvents)) $arEvents = Array(); $copy_MAIN_MODULE_EVENTS = $MAIN_MODULE_EVENTS; foreach($arEvents as $ar) { if (intval($ar["VERSION"]) < 2) $MAIN_MODULE_EVENTS[$ar["~FROM_MODULE_ID"]][$ar["~MESSAGE_ID"]][] = $ar; } // need to re-sort because of AddEventHandler() calls $funcSort = create_function('$a, $b', 'if($a["SORT"] == $b["SORT"]) return 0; return ($a["SORT"] < $b["SORT"])? -1 : 1;'); foreach(array_keys($copy_MAIN_MODULE_EVENTS) as $module) foreach(array_keys($copy_MAIN_MODULE_EVENTS[$module]) as $message) uasort($MAIN_MODULE_EVENTS[$module][$message], $funcSort); $MAIN_MODULE_EVENTS_INIT = true; } $MODULE_ID = strtoupper($MODULE_ID); $MESSAGE_ID = strtoupper($MESSAGE_ID); if(array_key_exists($MODULE_ID, $MAIN_MODULE_EVENTS) && array_key_exists($MESSAGE_ID, $MAIN_MODULE_EVENTS[$MODULE_ID])) $arrResult = $MAIN_MODULE_EVENTS[$MODULE_ID][$MESSAGE_ID]; else $arrResult = Array(); if($bReturnArray) { return $arrResult; } else { $resRS = new CDBResult; $resRS->InitFromArray($arrResult); return $resRS; } }