function OnChangeFileComponent($path, $site) { /** @global CMain $APPLICATION */ global $APPLICATION; // kind of optimization if (!HasScriptExtension($path)) { return; } $docRoot = CSite::GetSiteDocRoot($site); CUrlRewriter::Delete(array("SITE_ID" => $site, "PATH" => $path, "ID" => "NULL")); if (class_exists("\\Bitrix\\Main\\Application", false)) { \Bitrix\Main\Component\ParametersTable::deleteByFilter(array("SITE_ID" => $site, "REAL_PATH" => $path)); } $fileSrc = $APPLICATION->GetFileContent($docRoot . $path); $arComponents = PHPParser::ParseScript($fileSrc); for ($i = 0, $cnt = count($arComponents); $i < $cnt; $i++) { if (class_exists("\\Bitrix\\Main\\Application", false)) { \Bitrix\Main\Component\ParametersTable::add(array('SITE_ID' => $site, 'COMPONENT_NAME' => $arComponents[$i]["DATA"]["COMPONENT_NAME"], 'TEMPLATE_NAME' => $arComponents[$i]["DATA"]["TEMPLATE_NAME"], 'REAL_PATH' => $path, 'SEF_MODE' => $arComponents[$i]["DATA"]["PARAMS"]["SEF_MODE"] == "Y" ? \Bitrix\Main\Component\ParametersTable::SEF_MODE : \Bitrix\Main\Component\ParametersTable::NOT_SEF_MODE, 'SEF_FOLDER' => $arComponents[$i]["DATA"]["PARAMS"]["SEF_MODE"] == "Y" ? $arComponents[$i]["DATA"]["PARAMS"]["SEF_FOLDER"] : null, 'START_CHAR' => $arComponents[$i]["START"], 'END_CHAR' => $arComponents[$i]["END"], 'PARAMETERS' => serialize($arComponents[$i]["DATA"]["PARAMS"]))); } if (isset($arComponents[$i]["DATA"]["PARAMS"]) && is_array($arComponents[$i]["DATA"]["PARAMS"])) { if (array_key_exists("SEF_MODE", $arComponents[$i]["DATA"]["PARAMS"]) && $arComponents[$i]["DATA"]["PARAMS"]["SEF_MODE"] == "Y") { CUrlRewriter::Add(array("SITE_ID" => $site, "CONDITION" => "#^" . $arComponents[$i]["DATA"]["PARAMS"]["SEF_FOLDER"] . "#", "ID" => $arComponents[$i]["DATA"]["COMPONENT_NAME"], "PATH" => $path)); } } } }
function ReindexFile($path, $SEARCH_SESS_ID = "", $max_file_size = 0) { global $APPLICATION; CMain::InitPathVars($site, $path); $DOC_ROOT = CSite::GetSiteDocRoot($site); if (!CUrlRewriter::CheckPath($path)) { return 0; } if ($max_file_size > 0 && filesize($DOC_ROOT . "/" . $path) > $max_file_size * 1024) { return 0; } $filesrc = $APPLICATION->GetFileContent($DOC_ROOT . "/" . $path); if (!$filesrc || $filesrc == "") { return 0; } $arComponents = PHPParser::ParseScript($filesrc); for ($i = 0, $cnt = count($arComponents); $i < $cnt; $i++) { if ($arComponents[$i]["DATA"]["PARAMS"]["SEF_MODE"] == "Y") { $arFields = array("SITE_ID" => $site, "CONDITION" => "#^" . $arComponents[$i]["DATA"]["PARAMS"]["SEF_FOLDER"] . "#", "RULE" => "", "ID" => $arComponents[$i]["DATA"]["COMPONENT_NAME"], "PATH" => $path); CUrlRewriter::Add($arFields); } } return true; }
public static function FindComponent($component_name, $filesrc, $src_line) { /* parse source file for PHP code */ $arComponents = PHPParser::ParseScript($filesrc); /* identify the component by line number */ $arComponent = false; for ($i = 0, $cnt = count($arComponents); $i < $cnt; $i++) { $nLineFrom = substr_count(substr($filesrc, 0, $arComponents[$i]["START"]), "\n") + 1; $nLineTo = substr_count(substr($filesrc, 0, $arComponents[$i]["END"]), "\n") + 1; if ($nLineFrom <= $src_line && $nLineTo >= $src_line) { if ($arComponents[$i]["DATA"]["COMPONENT_NAME"] == $component_name) { $arComponent = $arComponents[$i]; break; } } if ($nLineTo > $src_line) { break; } } return $arComponent; }
function OnChangeFileComponent($path, $site) { require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/classes/general/php_parser.php"; global $APPLICATION; $docRoot = CSite::GetSiteDocRoot($site); CUrlRewriter::Delete(array("SITE_ID" => $site, "PATH" => $path, "ID" => "NULL")); if (class_exists("\\Bitrix\\Main\\Application", false)) { \Bitrix\Main\Component\ParametersTable::deleteByFilter(array("SITE_ID" => $site, "REAL_PATH" => $path)); } $fileSrc = $APPLICATION->GetFileContent($docRoot . $path); $arComponents = PHPParser::ParseScript($fileSrc); for ($i = 0, $cnt = count($arComponents); $i < $cnt; $i++) { if (class_exists("\\Bitrix\\Main\\Application", false)) { \Bitrix\Main\Component\ParametersTable::add(array('SITE_ID' => $site, 'COMPONENT_NAME' => $arComponents[$i]["DATA"]["COMPONENT_NAME"], 'TEMPLATE_NAME' => $arComponents[$i]["DATA"]["TEMPLATE_NAME"], 'REAL_PATH' => $path, 'SEF_MODE' => $arComponents[$i]["DATA"]["PARAMS"]["SEF_MODE"] == "Y" ? Component\ParametersTable::SEF_MODE : Component\ParametersTable::NOT_SEF_MODE, 'SEF_FOLDER' => $arComponents[$i]["DATA"]["PARAMS"]["SEF_MODE"] == "Y" ? $arComponents[$i]["DATA"]["PARAMS"]["SEF_FOLDER"] : null, 'START_CHAR' => $arComponents[$i]["START"], 'END_CHAR' => $arComponents[$i]["END"], 'PARAMETERS' => serialize($arComponents[$i]["DATA"]["PARAMS"]))); } if (isset($arComponents[$i]["DATA"]["PARAMS"]) && is_array($arComponents[$i]["DATA"]["PARAMS"])) { if (array_key_exists("SEF_MODE", $arComponents[$i]["DATA"]["PARAMS"]) && $arComponents[$i]["DATA"]["PARAMS"]["SEF_MODE"] == "Y") { CUrlRewriter::Add(array("SITE_ID" => $site, "CONDITION" => "#^" . $arComponents[$i]["DATA"]["PARAMS"]["SEF_FOLDER"] . "#", "ID" => $arComponents[$i]["DATA"]["COMPONENT_NAME"], "PATH" => $path)); } } } }
function OnChangeFileComponent($path, $site) { require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/php_parser.php"); global $APPLICATION; $docRoot = CSite::GetSiteDocRoot($site); CUrlRewriter::Delete( array("SITE_ID" => $site, "PATH" => $path, "ID" => "NULL") ); $fileSrc = $APPLICATION->GetFileContent($docRoot.$path); $arComponents = PHPParser::ParseScript($fileSrc); for ($i = 0, $cnt = count($arComponents); $i < $cnt; $i++) { if (isset($arComponents[$i]["DATA"]["PARAMS"]) && is_array($arComponents[$i]["DATA"]["PARAMS"])) { if (array_key_exists("SEF_MODE", $arComponents[$i]["DATA"]["PARAMS"]) && $arComponents[$i]["DATA"]["PARAMS"]["SEF_MODE"] == "Y") { CUrlRewriter::Add( array( "SITE_ID" => $site, "CONDITION" => "#^".$arComponents[$i]["DATA"]["PARAMS"]["SEF_FOLDER"]."#", "ID" => $arComponents[$i]["DATA"]["COMPONENT_NAME"], "PATH" => $path ) ); } } } }
public static function ReindexFile($path, $SEARCH_SESS_ID = "", $max_file_size = 0) { global $APPLICATION; CMain::InitPathVars($site, $path); $DOC_ROOT = CSite::GetSiteDocRoot($site); if (!CUrlRewriter::CheckPath($path)) { return 0; } if ($max_file_size > 0 && filesize($DOC_ROOT . "/" . $path) > $max_file_size * 1024) { return 0; } $filesrc = $APPLICATION->GetFileContent($DOC_ROOT . "/" . $path); if (!$filesrc || $filesrc == "") { return 0; } $arComponents = PHPParser::ParseScript($filesrc); for ($i = 0, $cnt = count($arComponents); $i < $cnt; $i++) { if ($arComponents[$i]["DATA"]["PARAMS"]["SEF_MODE"] == "Y") { if (array_key_exists("SEF_RULE", $arComponents[$i]["DATA"]["PARAMS"])) { $ruleMaker = new \Bitrix\Main\UrlRewriterRuleMaker(); $ruleMaker->process($arComponents[$i]["DATA"]["PARAMS"]["SEF_RULE"]); CUrlRewriter::Add(array("SITE_ID" => $site, "CONDITION" => $ruleMaker->getCondition(), "RULE" => $ruleMaker->getRule(), "ID" => $arComponents[$i]["DATA"]["COMPONENT_NAME"], "PATH" => $path)); } else { CUrlRewriter::Add(array("SITE_ID" => $site, "CONDITION" => "#^" . $arComponents[$i]["DATA"]["PARAMS"]["SEF_FOLDER"] . "#", "RULE" => "", "ID" => $arComponents[$i]["DATA"]["COMPONENT_NAME"], "PATH" => $path)); } } } return true; }
// try to read parameters from script file /* Try to open script containing the component call */ if (!$src_path || $src_line <= 0) { $strWarning .= GetMessage("comp_prop_err_param") . "<br>"; } else { $abs_path = $io->RelativeToAbsolutePath($src_path); $f = $io->GetFile($abs_path); $filesrc = $f->GetContents(); if (!$filesrc || $filesrc == "") { $strWarning .= GetMessage("comp_prop_err_open") . "<br>"; } } $arComponent = false; if ($strWarning == "") { /* parse source file for PHP code */ $arComponents = PHPParser::ParseScript($filesrc); /* identify the component by line number */ for ($i = 0, $cnt = count($arComponents); $i < $cnt; $i++) { $nLineFrom = substr_count(substr($filesrc, 0, $arComponents[$i]["START"]), "\n") + 1; $nLineTo = substr_count(substr($filesrc, 0, $arComponents[$i]["END"]), "\n") + 1; if ($nLineFrom <= $src_line && $nLineTo >= $src_line) { if ($arComponents[$i]["DATA"]["COMPONENT_NAME"] == $_GET["component_name"]) { $arComponent = $arComponents[$i]; break; } } if ($nLineTo > $src_line) { break; } } }