Current Path : /var/www/html/clients/nkpgkx11.e-nk.ru/bitrix/modules/main/classes/general/ |
Current File : /var/www/html/clients/nkpgkx11.e-nk.ru/bitrix/modules/main/classes/general/module.php |
<?php /** * Bitrix Framework * @package bitrix * @subpackage main * @copyright 2001-2013 Bitrix */ define("MODULE_NOT_FOUND", 0); define("MODULE_INSTALLED", 1); define("MODULE_DEMO", 2); define("MODULE_DEMO_EXPIRED", 3); class CModule { private static $includedModules = array("main" => true); private static $includedModulesEx = array(); private static $classes = array(); public static $installedModules = false; public static $events = array(); var $MODULE_NAME; var $MODULE_DESCRIPTION; var $MODULE_VERSION; var $MODULE_VERSION_DATE; var $MODULE_ID; var $MODULE_SORT = 10000; var $SHOW_SUPER_ADMIN_GROUP_RIGHTS; var $MODULE_GROUP_RIGHTS; var $PARTNER_NAME; var $PARTNER_URI; public static function AddAutoloadClasses($module, $arParams = array()) { if (!is_array($arParams) || empty($arParams)) return false; $module = trim($module); if (defined("NO_BITRIX_AUTOLOAD") && NO_BITRIX_AUTOLOAD) { foreach ($arParams as $value) include_once($_SERVER["DOCUMENT_ROOT"].($module <> ''? getLocalPath("modules/".$module)."/" : "").$value); } else { static $search = 'QWERTYUIOPASDFGHJKLZXCVBNM'; static $replace = 'qwertyuiopasdfghjklzxcvbnm'; foreach ($arParams as $key => $value) { self::$classes[strtr($key, $search, $replace)] = array( "module" => $module, "file" => $value ); } } return true; } function AutoloadClassDefined($className) { $className = trim($className); if ($className == '') return false; $className = strtolower($className); return array_key_exists($className, self::$classes); } static function RequireAutoloadClass($className) { $className = trim($className); if ($className == '') return false; static $search = 'QWERTYUIOPASDFGHJKLZXCVBNM'; static $replace = 'qwertyuiopasdfghjklzxcvbnm'; $className = strtr($className, $search, $replace); if (isset(self::$classes[$className])) { if (self::$classes[$className]['module'] != '') $dir = getLocalPath('modules/'.self::$classes[$className]['module']).'/'; else $dir = ''; require_once($_SERVER["DOCUMENT_ROOT"].$dir.self::$classes[$className]["file"]); return true; } return false; } function _GetCache() { global $DB, $CACHE_MANAGER; if (!self::$installedModules) { if($CACHE_MANAGER->Read(3600, "b_module")) self::$installedModules = $CACHE_MANAGER->Get("b_module"); if(self::$installedModules === false) { self::$installedModules = array(); $rs = $DB->Query("SELECT m.* FROM b_module m ORDER BY m.ID"); while($ar = $rs->Fetch()) self::$installedModules[$ar['ID']] = $ar; $CACHE_MANAGER->Set("b_module", self::$installedModules); } } return self::$installedModules; } function _GetName($arEvent) { $strName = ''; if(array_key_exists("CALLBACK", $arEvent)) { if(is_array($arEvent["CALLBACK"])) $strName .= (is_object($arEvent["CALLBACK"][0]) ? get_class($arEvent["CALLBACK"][0]) : $arEvent["CALLBACK"][0]).'::'.$arEvent["CALLBACK"][1]; else $strName .= $arEvent["CALLBACK"]; } else { $strName .= $arEvent["TO_CLASS"].'::'.$arEvent["TO_METHOD"]; } if(isset($arEvent['TO_MODULE_ID']) && $arEvent['TO_MODULE_ID'] <> '') $strName .= ' ('.$arEvent['TO_MODULE_ID'].')'; return $strName; } function InstallDB() { return false; } function UnInstallDB() { } function InstallEvents() { } function UnInstallEvents() { } function InstallFiles() { } function UnInstallFiles() { } function DoInstall() { } function GetModuleTasks() { return array( /* "NAME" => array( "LETTER" => "", "BINDING" => "", "OPERATIONS" => array( "NAME", "NAME", ), ), */ ); } function InstallTasks() { global $DB, $CACHE_MANAGER; $sqlMODULE_ID = $DB->ForSQL($this->MODULE_ID, 50); $arDBOperations = array(); $rsOperations = $DB->Query("SELECT NAME FROM b_operation WHERE MODULE_ID = '$sqlMODULE_ID'"); while($ar = $rsOperations->Fetch()) $arDBOperations[$ar["NAME"]] = $ar["NAME"]; $arDBTasks = array(); $rsTasks = $DB->Query("SELECT NAME FROM b_task WHERE MODULE_ID = '$sqlMODULE_ID' AND SYS = 'Y'"); while($ar = $rsTasks->Fetch()) $arDBTasks[$ar["NAME"]] = $ar["NAME"]; $arModuleTasks = $this->GetModuleTasks(); foreach($arModuleTasks as $task_name => $arTask) { $sqlBINDING = isset($arTask["BINDING"]) && $arTask["BINDING"] <> ''? $DB->ForSQL($arTask["BINDING"], 50): 'module'; $sqlTaskOperations = array(); if(isset($arTask["OPERATIONS"]) && is_array($arTask["OPERATIONS"])) { foreach($arTask["OPERATIONS"] as $operation_name) { $operation_name = substr($operation_name, 0, 50); if(!isset($arDBOperations[$operation_name])) { $DB->Query(" INSERT INTO b_operation (NAME, MODULE_ID, BINDING) VALUES ('".$DB->ForSQL($operation_name)."', '$sqlMODULE_ID', '$sqlBINDING') ", false, "FILE: ".__FILE__."<br> LINE: ".__LINE__); $arDBOperations[$operation_name] = $operation_name; } $sqlTaskOperations[] = $DB->ForSQL($operation_name); } } $task_name = substr($task_name, 0, 100); $sqlTaskName = $DB->ForSQL($task_name); if(!isset($arDBTasks[$task_name]) && $task_name <> '') { $DB->Query(" INSERT INTO b_task (NAME, LETTER, MODULE_ID, SYS, BINDING) VALUES ('$sqlTaskName', '".$DB->ForSQL($arTask["LETTER"], 1)."', '$sqlMODULE_ID', 'Y', '$sqlBINDING') ", false, "FILE: ".__FILE__."<br> LINE: ".__LINE__); } if(!empty($sqlTaskOperations) && $task_name <> '') { $DB->Query(" INSERT INTO b_task_operation (TASK_ID,OPERATION_ID) SELECT T.ID TASK_ID, O.ID OPERATION_ID FROM b_task T ,b_operation O WHERE T.SYS='Y' AND T.NAME='$sqlTaskName' AND O.NAME in ('".implode("','", $sqlTaskOperations)."') AND O.NAME not in ( SELECT O2.NAME FROM b_task T2 inner join b_task_operation TO2 on TO2.TASK_ID = T2.ID inner join b_operation O2 on O2.ID = TO2.OPERATION_ID WHERE T2.SYS='Y' AND T2.NAME='$sqlTaskName' ) ", false, "FILE: ".__FILE__."<br> LINE: ".__LINE__); } } if(is_object($CACHE_MANAGER)) { $CACHE_MANAGER->CleanDir("b_task"); $CACHE_MANAGER->CleanDir("b_task_operation"); } } function UnInstallTasks() { global $DB, $CACHE_MANAGER; $sqlMODULE_ID = $DB->ForSQL($this->MODULE_ID, 50); $DB->Query(" DELETE FROM b_group_task WHERE TASK_ID IN ( SELECT T.ID FROM b_task T WHERE T.MODULE_ID = '$sqlMODULE_ID' ) ", false, "File: ".__FILE__."<br>Line: ".__LINE__); $DB->Query(" DELETE FROM b_task_operation WHERE TASK_ID IN ( SELECT T.ID FROM b_task T WHERE T.MODULE_ID = '$sqlMODULE_ID') ", false, "File: ".__FILE__."<br>Line: ".__LINE__); $DB->Query(" DELETE FROM b_operation WHERE MODULE_ID = '$sqlMODULE_ID' ", false, "File: ".__FILE__."<br>Line: ".__LINE__); $DB->Query(" DELETE FROM b_task WHERE MODULE_ID = '$sqlMODULE_ID' ", false, "File: ".__FILE__."<br>Line: ".__LINE__); if(is_object($CACHE_MANAGER)) { $CACHE_MANAGER->CleanDir("b_task"); $CACHE_MANAGER->CleanDir("b_task_operation"); } } function IsInstalled() { if (!self::$installedModules) CModule::_GetCache(); return isset(self::$installedModules[$this->MODULE_ID]); } function DoUninstall() { } function Remove() { global $DB,$CACHE_MANAGER; $DB->Query("DELETE FROM b_module WHERE ID='".$this->MODULE_ID."'"); $CACHE_MANAGER->Clean("b_module"); self::$installedModules = false; } function Add() { global $DB, $CACHE_MANAGER; $DB->Query( "INSERT INTO b_module(ID) ". "VALUES('".$this->MODULE_ID."')" ); unset(self::$includedModules[$this->MODULE_ID]); unset(self::$includedModulesEx[$this->MODULE_ID]); $CACHE_MANAGER->Clean("b_module"); self::$installedModules = false; } function GetList() { $result = new CDBResult; $result->InitFromArray(CModule::_GetCache()); return $result; } /** * Makes module classes and function available. Returns true on success. * * @param string $module_name * @return bool */ public static function IncludeModule($module_name) { /** @noinspection PhpUnusedLocalVariableInspection */ global $DB, $MESS; if(defined("SM_SAFE_MODE") && SM_SAFE_MODE===true) { if(!in_array($module_name, array("main", "fileman"))) return false; } if(isset(self::$includedModules[$module_name])) return self::$includedModules[$module_name]; if (!self::$installedModules) CModule::_GetCache(); if(!array_key_exists($module_name, self::$installedModules)) { self::$includedModules[$module_name] = false; return false; } $include = getLocalPath("modules/".$module_name."/include.php"); if($include === false) { self::$includedModules[$module_name] = false; return false; } $res = include_once($_SERVER["DOCUMENT_ROOT"].$include); if($res === false) { self::$includedModules[$module_name] = false; return false; } self::$includedModules[$module_name] = true; return true; } function IncludeModuleEx($module_name) { if (is_set(self::$includedModulesEx, $module_name)) return self::$includedModulesEx[$module_name]; $module_name_tmp = str_replace(".", "_", $module_name); if (CModule::IncludeModule($module_name)) { if (defined($module_name_tmp."_DEMO") && constant($module_name_tmp."_DEMO") == "Y") self::$includedModulesEx[$module_name] = MODULE_DEMO; else self::$includedModulesEx[$module_name] = MODULE_INSTALLED; return self::$includedModulesEx[$module_name]; } if (defined($module_name_tmp."_DEMO") && constant($module_name_tmp."_DEMO") == "Y") { self::$includedModulesEx[$module_name] = MODULE_DEMO_EXPIRED; return MODULE_DEMO_EXPIRED; } self::$includedModulesEx[$module_name] = MODULE_NOT_FOUND; return MODULE_NOT_FOUND; } function err_mess() { return "<br>Class: CModule;<br>File: ".__FILE__; } function GetDropDownList($strSqlOrder="ORDER BY ID") { global $DB; $err_mess = (CModule::err_mess())."<br>Function: GetDropDownList<br>Line: "; $strSql = " SELECT ID as REFERENCE_ID, ID as REFERENCE FROM b_module $strSqlOrder "; $res = $DB->Query($strSql, false, $err_mess.__LINE__); return $res; } /** * @param string $moduleId * @return CModule|bool */ function CreateModuleObject($moduleId) { $moduleId = trim($moduleId); $moduleId = preg_replace("/[^a-zA-Z0-9_.]+/i", "", $moduleId); if ($moduleId == '') return false; $path = getLocalPath("modules/".$moduleId."/install/index.php"); if ($path === false) return false; include_once($_SERVER["DOCUMENT_ROOT"].$path); $className = str_replace(".", "_", $moduleId); if (!class_exists($className)) return false; return new $className; } } // register autoload if (!function_exists("__autoload")) { if (function_exists('spl_autoload_register')) { spl_autoload_register(array('CModule', 'RequireAutoloadClass')); } else { function __autoload($className) { CModule::RequireAutoloadClass($className); } } define("NO_BITRIX_AUTOLOAD", false); } else { define("NO_BITRIX_AUTOLOAD", true); } function RegisterModule($id) { $m = new CModule; $m->MODULE_ID = $id; $m->Add(); foreach(GetModuleEvents("main", "OnAfterRegisterModule", true) as $arEvent) ExecuteModuleEventEx($arEvent, array($id)); } function UnRegisterModule($id) { global $DB; $DB->Query("DELETE FROM b_agent WHERE MODULE_ID='".$DB->ForSQL($id)."'"); CMain::DelGroupRight($id); $m = new CModule; $m->MODULE_ID = $id; $m->Remove(); foreach(GetModuleEvents("main", "OnAfterUnRegisterModule", true) as $arEvent) ExecuteModuleEventEx($arEvent, array($id)); } function AddEventHandler($FROM_MODULE_ID, $MESSAGE_ID, $CALLBACK, $SORT=100, $FULL_PATH = false) { $arEvent = array("FROM_MODULE_ID"=>$FROM_MODULE_ID, "MESSAGE_ID"=>$MESSAGE_ID, "CALLBACK"=>$CALLBACK, "SORT"=>$SORT, "FULL_PATH"=>$FULL_PATH, "VERSION" => 1); $arEvent['TO_NAME'] = CModule::_GetName($arEvent); $FROM_MODULE_ID = strtoupper($FROM_MODULE_ID); $MESSAGE_ID = strtoupper($MESSAGE_ID); if (!isset(CModule::$events[$FROM_MODULE_ID]) || !is_array(CModule::$events[$FROM_MODULE_ID])) CModule::$events[$FROM_MODULE_ID] = array(); $arEvents = &CModule::$events[$FROM_MODULE_ID]; if (!isset($arEvents[$MESSAGE_ID]) || !is_array($arEvents[$MESSAGE_ID])) $arEvents[$MESSAGE_ID] = array(); $iEventHandlerKey = count($arEvents[$MESSAGE_ID]); $arEvents[$MESSAGE_ID][$iEventHandlerKey] = $arEvent; uasort($arEvents[$MESSAGE_ID], create_function('$a, $b', 'if($a["SORT"] == $b["SORT"]) return 0; return ($a["SORT"] < $b["SORT"])? -1 : 1;')); if (class_exists("\\Bitrix\\Main\\EventManager")) { $eventManager = \Bitrix\Main\EventManager::getInstance(); /** @noinspection PhpDeprecationInspection */ $eventManager->addEventHandlerOld($FROM_MODULE_ID, $MESSAGE_ID, $CALLBACK, $FULL_PATH, $SORT); } return $iEventHandlerKey; } function RemoveEventHandler($FROM_MODULE_ID, $MESSAGE_ID, $iEventHandlerKey) { $FROM_MODULE_ID = strtoupper($FROM_MODULE_ID); $MESSAGE_ID = strtoupper($MESSAGE_ID); if(is_array(CModule::$events[$FROM_MODULE_ID][$MESSAGE_ID])) { if(isset(CModule::$events[$FROM_MODULE_ID][$MESSAGE_ID][$iEventHandlerKey])) { unset(CModule::$events[$FROM_MODULE_ID][$MESSAGE_ID][$iEventHandlerKey]); return true; } } return false; } function GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray = false) { global $DB, $CACHE_MANAGER; static $init = false; if($init === false) { 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 ($ar["TO_METHOD_ARG"] <> '') $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 = CModule::$events; foreach($arEvents as $ar) { if (intval($ar["VERSION"]) < 2) CModule::$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(CModule::$events[$module][$message], "SORT"); $init = true; } $MODULE_ID = strtoupper($MODULE_ID); $MESSAGE_ID = strtoupper($MESSAGE_ID); if(array_key_exists($MODULE_ID, CModule::$events) && array_key_exists($MESSAGE_ID, CModule::$events[$MODULE_ID])) $arrResult = CModule::$events[$MODULE_ID][$MESSAGE_ID]; else $arrResult = array(); if($bReturnArray) { return $arrResult; } else { $resRS = new CDBResult; $resRS->InitFromArray($arrResult); return $resRS; } } function ExecuteModuleEvent($arEvent, $param1=NULL, $param2=NULL, $param3=NULL, $param4=NULL, $param5=NULL, $param6=NULL, $param7=NULL, $param8=NULL, $param9=NULL, $param10=NULL) { $CNT_PREDEF = 10; $r = true; if($arEvent["TO_MODULE_ID"] <> '' && $arEvent["TO_MODULE_ID"] <> 'main') { if(!CModule::IncludeModule($arEvent["TO_MODULE_ID"])) return null; $r = include_once($_SERVER["DOCUMENT_ROOT"].getLocalPath("modules/".$arEvent["TO_MODULE_ID"]."/include.php")); } elseif($arEvent["TO_PATH"] <> '' && file_exists($_SERVER["DOCUMENT_ROOT"].BX_ROOT.$arEvent["TO_PATH"])) { $r = include_once($_SERVER["DOCUMENT_ROOT"].BX_ROOT.$arEvent["TO_PATH"]); } elseif($arEvent["FULL_PATH"]<>"" && file_exists($arEvent["FULL_PATH"])) { $r = include_once($arEvent["FULL_PATH"]); } if(($arEvent["TO_CLASS"] == '' || $arEvent["TO_METHOD"] == '') && !is_set($arEvent, "CALLBACK")) return $r; $args = array(); if (is_array($arEvent["TO_METHOD_ARG"]) && count($arEvent["TO_METHOD_ARG"]) > 0) { foreach ($arEvent["TO_METHOD_ARG"] as $v) $args[] = $v; } $nArgs = func_num_args(); for($i = 1; $i <= $CNT_PREDEF; $i++) { if($i > $nArgs) break; $args[] = &${"param".$i}; } for($i = $CNT_PREDEF + 1; $i < $nArgs; $i++) $args[] = func_get_arg($i); if(is_set($arEvent, "CALLBACK")) { $resmod = call_user_func_array($arEvent["CALLBACK"], $args); } else { //php bug: http://bugs.php.net/bug.php?id=47948 class_exists($arEvent["TO_CLASS"]); $resmod = call_user_func_array(array($arEvent["TO_CLASS"], $arEvent["TO_METHOD"]), $args); } return $resmod; } function ExecuteModuleEventEx($arEvent, $arParams = array()) { $r = true; if( isset($arEvent["TO_MODULE_ID"]) && $arEvent["TO_MODULE_ID"]<>"" && $arEvent["TO_MODULE_ID"]<>"main" ) { if(CModule::IncludeModule($arEvent["TO_MODULE_ID"])) $r = include_once($_SERVER["DOCUMENT_ROOT"].getLocalPath("modules/".$arEvent["TO_MODULE_ID"]."/include.php")); else return null; } elseif( isset($arEvent["TO_PATH"]) && $arEvent["TO_PATH"]<>"" && file_exists($_SERVER["DOCUMENT_ROOT"].BX_ROOT.$arEvent["TO_PATH"]) ) { $r = include_once($_SERVER["DOCUMENT_ROOT"].BX_ROOT.$arEvent["TO_PATH"]); } elseif( isset($arEvent["FULL_PATH"]) && $arEvent["FULL_PATH"]<>"" && file_exists($arEvent["FULL_PATH"]) ) { $r = include_once($arEvent["FULL_PATH"]); } if(array_key_exists("CALLBACK", $arEvent)) { if(isset($arEvent["TO_METHOD_ARG"]) && is_array($arEvent["TO_METHOD_ARG"]) && count($arEvent["TO_METHOD_ARG"])) $args = array_merge($arEvent["TO_METHOD_ARG"], $arParams); else $args = $arParams; return call_user_func_array($arEvent["CALLBACK"], $args); } elseif($arEvent["TO_CLASS"] != "" && $arEvent["TO_METHOD"] != "") { if(is_array($arEvent["TO_METHOD_ARG"]) && count($arEvent["TO_METHOD_ARG"])) $args = array_merge($arEvent["TO_METHOD_ARG"], $arParams); else $args = $arParams; //php bug: http://bugs.php.net/bug.php?id=47948 class_exists($arEvent["TO_CLASS"]); return call_user_func_array(array($arEvent["TO_CLASS"], $arEvent["TO_METHOD"]), $args); } else { return $r; } } function UnRegisterModuleDependences($FROM_MODULE_ID, $MESSAGE_ID, $TO_MODULE_ID, $TO_CLASS="", $TO_METHOD="", $TO_PATH="", $TO_METHOD_ARG = array()) { global $DB, $CACHE_MANAGER; $TO_METHOD_ARG = ((!is_array($TO_METHOD_ARG) || is_array($TO_METHOD_ARG) && count($TO_METHOD_ARG) <= 0) ? "" : serialize($TO_METHOD_ARG)); $strSql = "DELETE FROM b_module_to_module ". "WHERE FROM_MODULE_ID='".$DB->ForSql($FROM_MODULE_ID)."'". " AND MESSAGE_ID='".$DB->ForSql($MESSAGE_ID)."' ". " AND TO_MODULE_ID='".$DB->ForSql($TO_MODULE_ID)."' ". ($TO_CLASS <> ''? " AND TO_CLASS='".$DB->ForSql($TO_CLASS)."' ": " AND (TO_CLASS='' OR TO_CLASS IS NULL) "). ($TO_METHOD <> ''? " AND TO_METHOD='".$DB->ForSql($TO_METHOD)."'": " AND (TO_METHOD='' OR TO_METHOD IS NULL) "). ($TO_PATH <> '' && $TO_PATH !== 1/*controller disconnect correction*/? " AND TO_PATH='".$DB->ForSql($TO_PATH)."'": " AND (TO_PATH='' OR TO_PATH IS NULL) "). ($TO_METHOD_ARG <> ''? " AND TO_METHOD_ARG='".$DB->ForSql($TO_METHOD_ARG)."'": " AND (TO_METHOD_ARG='' OR TO_METHOD_ARG IS NULL) "); $DB->Query($strSql, false, "FILE: ".__FILE__."<br> LINE: ".__LINE__); $CACHE_MANAGER->Clean("b_module_to_module"); } function RegisterModuleDependences($FROM_MODULE_ID, $MESSAGE_ID, $TO_MODULE_ID, $TO_CLASS="", $TO_METHOD="", $SORT=100, $TO_PATH="", $TO_METHOD_ARG = array()) { global $DB, $CACHE_MANAGER; $TO_METHOD_ARG = ((!is_array($TO_METHOD_ARG) || is_array($TO_METHOD_ARG) && count($TO_METHOD_ARG) <= 0) ? "" : serialize($TO_METHOD_ARG)); $r = $DB->Query( "SELECT 'x' ". "FROM b_module_to_module ". "WHERE FROM_MODULE_ID='".$DB->ForSql($FROM_MODULE_ID)."'". " AND MESSAGE_ID='".$DB->ForSql($MESSAGE_ID)."' ". " AND TO_MODULE_ID='".$DB->ForSql($TO_MODULE_ID)."' ". " AND TO_CLASS='".$DB->ForSql($TO_CLASS)."' ". " AND TO_METHOD='".$DB->ForSql($TO_METHOD)."'". ($TO_PATH == ''? " AND (TO_PATH='' OR TO_PATH IS NULL)" :" AND TO_PATH='".$DB->ForSql($TO_PATH)."'" ). ($TO_METHOD_ARG == ''? " AND (TO_METHOD_ARG='' OR TO_METHOD_ARG IS NULL)" :" AND TO_METHOD_ARG='".$DB->ForSql($TO_METHOD_ARG)."'" ) ); if(!$r->Fetch()) { $arFields = array( "SORT" => intval($SORT), "FROM_MODULE_ID" => "'".$DB->ForSql($FROM_MODULE_ID)."'", "MESSAGE_ID" => "'".$DB->ForSql($MESSAGE_ID)."'", "TO_MODULE_ID" => "'".$DB->ForSql($TO_MODULE_ID)."'", "TO_CLASS" => "'".$DB->ForSql($TO_CLASS)."'", "TO_METHOD" => "'".$DB->ForSql($TO_METHOD)."'", "TO_PATH" => "'".$DB->ForSql($TO_PATH)."'", "TO_METHOD_ARG" => "'".$DB->ForSql($TO_METHOD_ARG)."'", "VERSION" => 1, ); $DB->Insert("b_module_to_module",$arFields, "FILE: ".__FILE__."<br>LINE: ".__LINE__); $CACHE_MANAGER->Clean("b_module_to_module"); } } function IsModuleInstalled($module_id) { if (!CModule::$installedModules) CModule::_GetCache(); return isset(CModule::$installedModules[$module_id]); } function GetModuleID($str) { $arr = explode("/",$str); $i = array_search("modules",$arr); return $arr[$i+1]; } /** * Returns TRUE if version1 >= version2 * version1 = "XX.XX.XX" * version2 = "XX.XX.XX" */ function CheckVersion($version1, $version2) { $arr1 = explode(".",$version1); $arr2 = explode(".",$version2); if (intval($arr2[0])>intval($arr1[0])) return false; elseif (intval($arr2[0])<intval($arr1[0])) return true; else { if (intval($arr2[1])>intval($arr1[1])) return false; elseif (intval($arr2[1])<intval($arr1[1])) return true; else { if (intval($arr2[2])>intval($arr1[2])) return false; elseif (intval($arr2[2])<intval($arr1[2])) return true; else return true; } } }