| Current Path : /var/www/element/data/www/greenpr.ru/bitrix/modules/main/classes/general/ |
| Current File : /var/www/element/data/www/greenpr.ru/bitrix/modules/main/classes/general/component_util.php |
<?
IncludeModuleLangFile(__FILE__);
class CComponentUtil
{
function __IncludeLang($filePath, $fileName, $lang = False)
{
if ($lang === False)
$lang = LANGUAGE_ID;
if ($lang != "en" && $lang != "ru")
if (file_exists($_SERVER["DOCUMENT_ROOT"].$filePath."/lang/en/".$fileName))
__IncludeLang($_SERVER["DOCUMENT_ROOT"].$filePath."/lang/en/".$fileName);
if (file_exists($_SERVER["DOCUMENT_ROOT"].$filePath."/lang/".$lang."/".$fileName))
__IncludeLang($_SERVER["DOCUMENT_ROOT"].$filePath."/lang/".$lang."/".$fileName);
}
function Dump2File($text)
{
$fff = fopen($_SERVER["DOCUMENT_ROOT"]."/__test__.txt", "w");
fwrite($fff, $text."\n");
fclose($fff);
}
function PrepareVariables(&$arData)
{
UnSet($arData["NEW_COMPONENT_TEMPLATE"]);
if ($arData["SEF_MODE"] == "Y")
{
UnSet($arData["VARIABLE_ALIASES"]);
UnSet($arData["SEF_URL_TEMPLATES"]);
foreach ($arData as $dataKey => $dataValue)
{
if (SubStr($dataKey, 0, StrLen("SEF_URL_TEMPLATES_")) == "SEF_URL_TEMPLATES_")
{
$arData["SEF_URL_TEMPLATES"][SubStr($dataKey, StrLen("SEF_URL_TEMPLATES_"))] = $dataValue;
unset($arData[$dataKey]);
if (preg_match_all("'(\?|&)(.+?)=#([^#]+?)#'is", $dataValue, $arMatches, PREG_SET_ORDER))
{
foreach ($arMatches as $arMatch)
$arData["VARIABLE_ALIASES"][SubStr($dataKey, StrLen("SEF_URL_TEMPLATES_"))][$arMatch[3]] = $arMatch[2];
}
}
elseif (SubStr($dataKey, 0, StrLen("VARIABLE_ALIASES_")) == "VARIABLE_ALIASES_")
{
unset($arData[$dataKey]);
}
}
}
else
{
UnSet($arData["VARIABLE_ALIASES"]);
UnSet($arData["SEF_URL_TEMPLATES"]);
foreach ($arData as $dataKey => $dataValue)
{
if (SubStr($dataKey, 0, StrLen("SEF_URL_TEMPLATES_")) == "SEF_URL_TEMPLATES_")
{
unset($arData[$dataKey]);
}
elseif (SubStr($dataKey, 0, StrLen("VARIABLE_ALIASES_")) == "VARIABLE_ALIASES_")
{
$arData["VARIABLE_ALIASES"][SubStr($dataKey, StrLen("VARIABLE_ALIASES_"))] = $dataValue;
unset($arData[$dataKey]);
}
}
}
}
function __ShowError($errorMessage)
{
if (StrLen($errorMessage) > 0)
echo "<font color=\"#FF0000\">".$errorMessage."</font>";
}
function __BuildTree($arPath, &$arTree, &$arComponent, $level = 1)
{
$arBXTopComponentCatalogLevel = array("content", "service", "communication", "e-store", "utility");
$arBXTopComponentCatalogLevelSort = array(600, 700, 800, 900, 1000);
if (!is_array($arTree["#"]))
$arTree["#"] = array();
if (!array_key_exists($arPath["ID"], $arTree["#"]))
{
$arTree["#"][$arPath["ID"]] = array();
$arTree["#"][$arPath["ID"]]["@"] = array();
$arTree["#"][$arPath["ID"]]["@"]["NAME"] = "";
$arTree["#"][$arPath["ID"]]["@"]["SORT"] = IntVal($arPath["SORT"]);
if ($level == 1 && in_array($arPath["ID"], $arBXTopComponentCatalogLevel))
{
$arTree["#"][$arPath["ID"]]["@"]["NAME"] = GetMessage("VRT_COMP_CAT_".StrToUpper($arPath["ID"]));
$arTree["#"][$arPath["ID"]]["@"]["SORT"] = IntVal($arBXTopComponentCatalogLevelSort[array_search($arPath["ID"], $arBXTopComponentCatalogLevel)]);
}
if (StrLen($arTree["#"][$arPath["ID"]]["@"]["NAME"]) <= 0)
$arTree["#"][$arPath["ID"]]["@"]["NAME"] = $arPath["NAME"];
if ($arTree["#"][$arPath["ID"]]["@"]["SORT"] <= 0)
$arTree["#"][$arPath["ID"]]["@"]["SORT"] = 100;
}
if (array_key_exists("CHILD", $arPath))
{
CComponentUtil::__BuildTree($arPath["CHILD"], $arTree["#"][$arPath["ID"]], $arComponent, $level + 1);
}
else
{
if (!is_array($arTree["#"][$arPath["ID"]]["*"]))
$arTree["#"][$arPath["ID"]]["*"] = array();
$arTree["#"][$arPath["ID"]]["*"][$arComponent["NAME"]] = $arComponent;
}
}
function __GetComponentsTree($filterNamespace = False, $arNameFilter = False)
{
$arTree = array();
if ($handle = @opendir($_SERVER["DOCUMENT_ROOT"]."/bitrix/components"))
{
while (($file = readdir($handle)) !== false)
{
if ($file == "." || $file == "..")
continue;
if (is_dir($_SERVER["DOCUMENT_ROOT"]."/bitrix/components/".$file))
{
if (file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/components/".$file."/component.php"))
{
// It's component
if ($filterNamespace !== False && StrLen($filterNamespace) > 0)
continue;
if ($arNameFilter !== False && !CComponentUtil::CheckComponentName($file, $arNameFilter))
continue;
if (file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/components/".$file."/.description.php"))
{
CComponentUtil::__IncludeLang("/bitrix/components/".$file, ".description.php");
$arComponentDescription = array();
$componentName = $file;
include($_SERVER["DOCUMENT_ROOT"]."/bitrix/components/".$file."/.description.php");
if (array_key_exists("PATH", $arComponentDescription) && array_key_exists("ID", $arComponentDescription["PATH"]))
{
$arComponent = array();
$arComponent["NAME"] = $file;
$arComponent["NAMESPACE"] = "";
$arComponent["TITLE"] = Trim($arComponentDescription["NAME"]);
$arComponent["DESCRIPTION"] = $arComponentDescription["DESCRIPTION"];
if (array_key_exists("ICON", $arComponentDescription))
$arComponent["ICON"] = "/bitrix/components/".$file.$arComponentDescription["ICON"];
if (array_key_exists("COMPLEX", $arComponentDescription) && $arComponentDescription["COMPLEX"] == "Y")
$arComponent["COMPLEX"] = "Y";
else
$arComponent["COMPLEX"] = "N";
$arComponent["SORT"] = IntVal($arComponentDescription["SORT"]);
if ($arComponent["SORT"] <= 0)
$arComponent["SORT"] = 100;
$arComponent["SCREENSHOT"] = array();
if (array_key_exists("SCREENSHOT", $arComponentDescription))
{
if (!is_array($arComponentDescription["SCREENSHOT"]))
$arComponentDescription["SCREENSHOT"] = array($arComponentDescription["SCREENSHOT"]);
for ($i = 0, $cnt = count($arComponentDescription["SCREENSHOT"]); $i < $cnt; $i++)
$arComponent["SCREENSHOT"][] = "/bitrix/components/".$file.$arComponentDescription["SCREENSHOT"][$i];
}
CComponentUtil::__BuildTree($arComponentDescription["PATH"], $arTree, $arComponent);
}
}
}
else
{
// It's not a component
if ($filterNamespace !== False && (StrLen($filterNamespace) <= 0 || $filterNamespace != $file))
continue;
if ($handle1 = @opendir($_SERVER["DOCUMENT_ROOT"]."/bitrix/components/".$file))
{
while (($file1 = readdir($handle1)) !== false)
{
if ($file1 == "." || $file1 == "..")
continue;
if (is_dir($_SERVER["DOCUMENT_ROOT"]."/bitrix/components/".$file."/".$file1))
{
if (file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/components/".$file."/".$file1."/component.php"))
{
if ($arNameFilter !== False && !CComponentUtil::CheckComponentName($file1, $arNameFilter))
continue;
// It's component
if (file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/components/".$file."/".$file1."/.description.php"))
{
CComponentUtil::__IncludeLang("/bitrix/components/".$file."/".$file1, ".description.php");
$arComponentDescription = array();
$componentName = $file.":".$file1;
include($_SERVER["DOCUMENT_ROOT"]."/bitrix/components/".$file."/".$file1."/.description.php");
if (array_key_exists("PATH", $arComponentDescription) && array_key_exists("ID", $arComponentDescription["PATH"]))
{
$arComponent = array();
$arComponent["NAME"] = $file.":".$file1;
$arComponent["NAMESPACE"] = $file;
$arComponent["TITLE"] = Trim($arComponentDescription["NAME"]);
$arComponent["DESCRIPTION"] = $arComponentDescription["DESCRIPTION"];
if (array_key_exists("ICON", $arComponentDescription))
$arComponent["ICON"] = "/bitrix/components/".$file."/".$file1.$arComponentDescription["ICON"];
if (array_key_exists("COMPLEX", $arComponentDescription) && $arComponentDescription["COMPLEX"] == "Y")
$arComponent["COMPLEX"] = "Y";
else
$arComponent["COMPLEX"] = "N";
$arComponent["SORT"] = IntVal($arComponentDescription["SORT"]);
if ($arComponent["SORT"] <= 0)
$arComponent["SORT"] = 100;
$arComponent["SCREENSHOT"] = array();
if (array_key_exists("SCREENSHOT", $arComponentDescription))
{
if (!is_array($arComponentDescription["SCREENSHOT"]))
$arComponentDescription["SCREENSHOT"] = array($arComponentDescription["SCREENSHOT"]);
for ($i = 0, $cnt = count($arComponentDescription["SCREENSHOT"]); $i < $cnt; $i++)
$arComponent["SCREENSHOT"][] = "/bitrix/components/".$file."/".$file1.$arComponentDescription["SCREENSHOT"][$i];
}
CComponentUtil::__BuildTree($arComponentDescription["PATH"], $arTree, $arComponent);
}
}
}
}
}
@closedir($handle1);
}
}
}
}
@closedir($handle);
}
return $arTree;
}
function __TreeFolderCompare($a, $b)
{
if ($a["@"]["SORT"] < $b["@"]["SORT"] || $a["@"]["SORT"] == $b["@"]["SORT"] && StrToLower($a["@"]["NAME"]) < StrToLower($b["@"]["NAME"]))
return -1;
elseif ($a["@"]["SORT"] > $b["@"]["SORT"] || $a["@"]["SORT"] == $b["@"]["SORT"] && StrToLower($a["@"]["NAME"]) > StrToLower($b["@"]["NAME"]))
return 1;
else
return 0;
}
function __TreeItemCompare($a, $b)
{
if ($a["COMPLEX"] == "Y" && $b["COMPLEX"] == "Y"
|| $a["COMPLEX"] != "Y" && $b["COMPLEX"] != "Y")
{
if ($a["SORT"] < $b["SORT"] || $a["SORT"] == $b["SORT"] && StrToLower($a["TITLE"]) < StrToLower($b["TITLE"]))
return -1;
elseif ($a["SORT"] > $b["SORT"] || $a["SORT"] == $b["SORT"] && StrToLower($a["TITLE"]) > StrToLower($b["TITLE"]))
return 1;
else
return 0;
}
else
{
if ($a["COMPLEX"] == "Y")
return -1;
if ($b["COMPLEX"] == "Y")
return 1;
}
}
function __SortComponentsTree(&$arTree)
{
uasort($arTree, array("CComponentUtil", "__TreeFolderCompare"));
foreach ($arTree as $key => $value)
{
if (array_key_exists("#", $arTree[$key]))
CComponentUtil::__SortComponentsTree($arTree[$key]["#"]);
if (array_key_exists("*", $arTree[$key]))
uasort($arTree[$key]["*"], array("CComponentUtil", "__TreeItemCompare"));
}
}
function GetComponentsTree($filterNamespace = False, $arNameFilter = False)
{
$arTree = CComponentUtil::__GetComponentsTree($filterNamespace, $arNameFilter);
CComponentUtil::__SortComponentsTree($arTree["#"]);
return $arTree;
}
function GetNamespaceList()
{
$arNamespaces = array();
if ($handle = @opendir($_SERVER["DOCUMENT_ROOT"]."/bitrix/components"))
{
while (($file = readdir($handle)) !== false)
{
if ($file == "." || $file == "..")
continue;
if (is_dir($_SERVER["DOCUMENT_ROOT"]."/bitrix/components/".$file))
{
if (!file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/components/".$file."/component.php"))
$arNamespaces[] = $file;
}
}
@closedir($handle);
}
return $arNamespaces;
}
function GetComponentDescr($componentName)
{
$componentName = Trim($componentName);
static $cache = array();
if(strLen($componentName) <= 0)
{
$arComponentDescription = false;
}
else
{
if(array_key_exists($componentName, $cache))
return $cache[$componentName];
$path2Comp = CComponentEngine::MakeComponentPath($componentName);
if(strLen($path2Comp) <= 0)
{
$arComponentDescription = false;
}
else
{
$componentPath = "/bitrix/components".$path2Comp;
if(!file_exists($_SERVER["DOCUMENT_ROOT"].$componentPath)
|| !is_dir($_SERVER["DOCUMENT_ROOT"].$componentPath)
|| !file_exists($_SERVER["DOCUMENT_ROOT"].$componentPath."/component.php")
|| !is_file($_SERVER["DOCUMENT_ROOT"].$componentPath."/component.php"))
{
$arComponentDescription = false;
}
else
{
$arComponentDescription = array();
if(file_exists($_SERVER["DOCUMENT_ROOT"].$componentPath."/.description.php"))
{
CComponentUtil::__IncludeLang($componentPath, ".description.php");
include($_SERVER["DOCUMENT_ROOT"].$componentPath."/.description.php");
}
}
}
}
$cache[$componentName] = $arComponentDescription;
return $arComponentDescription;
}
function __GroupParamsCompare($a, $b)
{
if ($a["SORT"] < $b["SORT"])
return -1;
elseif ($a["SORT"] > $b["SORT"])
return 1;
else
return 0;
}
function GetComponentProps($componentName, $arCurrentValues = array())
{
$arComponentParameters = array();
$componentName = Trim($componentName);
if (StrLen($componentName) <= 0)
return False;
$path2Comp = CComponentEngine::MakeComponentPath($componentName);
if (StrLen($path2Comp) <= 0)
return False;
$componentPath = "/bitrix/components".$path2Comp;
if (!file_exists($_SERVER["DOCUMENT_ROOT"].$componentPath)
|| !is_dir($_SERVER["DOCUMENT_ROOT"].$componentPath)
|| !file_exists($_SERVER["DOCUMENT_ROOT"].$componentPath."/component.php")
|| !is_file($_SERVER["DOCUMENT_ROOT"].$componentPath."/component.php"))
{
return False;
}
if (file_exists($_SERVER["DOCUMENT_ROOT"].$componentPath."/.parameters.php"))
{
CComponentUtil::__IncludeLang($componentPath, ".parameters.php");
$arComponentParameters = array();
include($_SERVER["DOCUMENT_ROOT"].$componentPath."/.parameters.php");
if (!array_key_exists("PARAMETERS", $arComponentParameters) || !is_array($arComponentParameters["PARAMETERS"]))
return False;
if (!array_key_exists("GROUPS", $arComponentParameters) || !is_array($arComponentParameters["GROUPS"]))
$arComponentParameters["GROUPS"] = array();
$arParamKeys = array_keys($arComponentParameters["GROUPS"]);
for ($i = 0, $cnt = count($arParamKeys); $i < $cnt; $i++)
{
if (!IsSet($arComponentParameters["GROUPS"][$arParamKeys[$i]]["SORT"]))
$arComponentParameters["GROUPS"][$arParamKeys[$i]]["SORT"] = 1000+$i;
$arComponentParameters["GROUPS"][$arParamKeys[$i]]["SORT"] = IntVal($arComponentParameters["GROUPS"][$arParamKeys[$i]]["SORT"]);
if ($arComponentParameters["GROUPS"][$arParamKeys[$i]]["SORT"] <= 0)
$arComponentParameters["GROUPS"][$arParamKeys[$i]]["SORT"] = 1000+$i;
}
$arParamKeys = array_keys($arComponentParameters["PARAMETERS"]);
for ($i = 0, $cnt = count($arParamKeys); $i < $cnt; $i++)
{
if ($arParamKeys[$i] == "SET_TITLE")
{
$arComponentParameters["GROUPS"]["ADDITIONAL_SETTINGS"] = array(
"NAME" => GetMessage("COMP_GROUP_ADDITIONAL_SETTINGS"),
"SORT" => 700
);
$arComponentParameters["PARAMETERS"]["SET_TITLE"] = array(
"PARENT" => "ADDITIONAL_SETTINGS",
"NAME" => GetMessage("COMP_PROP_SET_TITLE"),
"TYPE" => "CHECKBOX",
"DEFAULT" => "Y",
"ADDITIONAL_VALUES" => "N"
);
}
elseif ($arParamKeys[$i] == "CACHE_TIME")
{
$arComponentParameters["GROUPS"]["CACHE_SETTINGS"] = array(
"NAME" => GetMessage("COMP_GROUP_CACHE_SETTINGS"),
"SORT" => 600
);
$arSavedParams = $arComponentParameters["PARAMETERS"];
$arComponentParameters["PARAMETERS"] = array();
foreach ($arSavedParams as $keyTmp => $valueTmp)
{
if ($keyTmp == "CACHE_TIME")
{
$arComponentParameters["PARAMETERS"]["CACHE_TYPE"] = array(
"PARENT" => "CACHE_SETTINGS",
"NAME" => GetMessage("COMP_PROP_CACHE_TYPE"),
"TYPE" => "LIST",
"VALUES" => array("A" => GetMessage("COMP_PROP_CACHE_TYPE_AUTO"), "Y" => GetMessage("COMP_PROP_CACHE_TYPE_YES"), "N" => GetMessage("COMP_PROP_CACHE_TYPE_NO")),
"DEFAULT" => "A",
"ADDITIONAL_VALUES" => "N"
);
$arComponentParameters["PARAMETERS"]["CACHE_TIME"] = array(
"PARENT" => "CACHE_SETTINGS",
"NAME" => GetMessage("COMP_PROP_CACHE_TIME"),
"TYPE" => "STRING",
"MULTIPLE" => "N",
"DEFAULT" => IntVal($arSavedParams["CACHE_TIME"]["DEFAULT"]),
"COLS" => 5
);
}
else
{
$arComponentParameters["PARAMETERS"][$keyTmp] = $valueTmp;
}
}
}
elseif ($arParamKeys[$i] == "SEF_MODE")
{
$arComponentParameters["GROUPS"]["SEF_MODE"] = array(
"NAME" => GetMessage("COMP_GROUP_SEF_MODE"),
"SORT" => 500
);
$arSEFModeSettings = $arComponentParameters["PARAMETERS"]["SEF_MODE"];
$arComponentParameters["PARAMETERS"]["SEF_MODE"] = array(
"PARENT" => "SEF_MODE",
"NAME" => GetMessage("COMP_PROP_SEF_MODE"),
"TYPE" => "CHECKBOX",
/*"VALUES" => array("N" => GetMessage("COMP_PROP_SEF_MODE_NO"), "Y" => GetMessage("COMP_PROP_SEF_MODE_YES")),*/
"DEFAULT" => "N",
"ADDITIONAL_VALUES" => "N"
);
$arComponentParameters["PARAMETERS"]["SEF_FOLDER"] = array(
"PARENT" => "SEF_MODE",
"NAME" => GetMessage("COMP_PROP_SEF_FOLDER"),
"TYPE" => "STRING",
"MULTIPLE" => "N",
"DEFAULT" => "",
"COLS" => 30
);
if (is_array($arSEFModeSettings) && count($arSEFModeSettings) > 0)
{
foreach ($arSEFModeSettings as $templateKey => $arTemplateValue)
{
$arComponentParameters["PARAMETERS"]["SEF_URL_TEMPLATES_".$templateKey] = array(
"PARENT" => "SEF_MODE",
"NAME" => $arTemplateValue["NAME"],
"TYPE" => "STRING",
"MULTIPLE" => "N",
"DEFAULT" => $arTemplateValue["DEFAULT"],
"COLS" => 50,
"VARIABLES" => array(),
);
if (is_array($arVariableAliasesSettings) && count($arVariableAliasesSettings) > 0)
{
foreach ($arTemplateValue["VARIABLES"] as $variable)
$arComponentParameters["PARAMETERS"]["SEF_URL_TEMPLATES_".$templateKey]["VARIABLES"]["#".$variable."#"] = $arVariableAliasesSettings[$variable]["NAME"];
}
}
}
}
elseif ($arParamKeys[$i] == "VARIABLE_ALIASES")
{
$arComponentParameters["GROUPS"]["SEF_MODE"] = array(
"NAME" => GetMessage("COMP_GROUP_SEF_MODE"),
"SORT" => 500
);
$arVariableAliasesSettings = $arComponentParameters["PARAMETERS"]["VARIABLE_ALIASES"];
unset($arComponentParameters["PARAMETERS"]["VARIABLE_ALIASES"]);
foreach ($arVariableAliasesSettings as $aliaseKey => $arAliaseValue)
{
$arComponentParameters["PARAMETERS"]["VARIABLE_ALIASES_".$aliaseKey] = array(
"PARENT" => "SEF_MODE",
"NAME" => $arAliaseValue["NAME"],
"TYPE" => "STRING",
"MULTIPLE" => "N",
"DEFAULT" => $aliaseKey,
"COLS" => 20,
);
}
}
elseif (IsSet($arComponentParameters["PARAMETERS"][$arParamKeys[$i]]["PARENT"]) && StrLen($arComponentParameters["PARAMETERS"][$arParamKeys[$i]]["PARENT"]) > 0)
{
if ($arComponentParameters["PARAMETERS"][$arParamKeys[$i]]["PARENT"] == "URL_TEMPLATES")
{
$arComponentParameters["GROUPS"]["URL_TEMPLATES"] = array(
"NAME" => GetMessage("COMP_GROUP_URL_TEMPLATES"),
"SORT" => 400
);
}
elseif ($arComponentParameters["PARAMETERS"][$arParamKeys[$i]]["PARENT"] == "VISUAL")
{
$arComponentParameters["GROUPS"]["VISUAL"] = array(
"NAME" => GetMessage("COMP_GROUP_VISUAL"),
"SORT" => 300
);
}
elseif ($arComponentParameters["PARAMETERS"][$arParamKeys[$i]]["PARENT"] == "DATA_SOURCE")
{
$arComponentParameters["GROUPS"]["DATA_SOURCE"] = array(
"NAME" => GetMessage("COMP_GROUP_DATA_SOURCE"),
"SORT" => 200
);
}
elseif ($arComponentParameters["PARAMETERS"][$arParamKeys[$i]]["PARENT"] == "BASE")
{
$arComponentParameters["GROUPS"]["BASE"] = array(
"NAME" => GetMessage("COMP_GROUP_BASE"),
"SORT" => 100
);
}
elseif ($arComponentParameters["PARAMETERS"][$arParamKeys[$i]]["PARENT"] == "ADDITIONAL_SETTINGS")
{
$arComponentParameters["GROUPS"]["ADDITIONAL_SETTINGS"] = array(
"NAME" => GetMessage("COMP_GROUP_ADDITIONAL_SETTINGS"),
"SORT" => 700
);
}
}
elseif ($arParamKeys[$i] == "AJAX_MODE")
{
$arComponentParameters["GROUPS"]["AJAX_SETTINGS"] = array(
"NAME" => GetMessage("COMP_GROUP_AJAX_SETTINGS"),
"SORT" => 550
);
$arComponentParameters["PARAMETERS"]["AJAX_MODE"] = array(
"PARENT" => "AJAX_SETTINGS",
"NAME" => GetMessage("COMP_PROP_AJAX_MODE"),
"TYPE" => "CHECKBOX",
"DEFAULT" => "N",
"ADDITIONAL_VALUES" => "N"
);
$arComponentParameters["PARAMETERS"]["AJAX_OPTION_SHADOW"] = array(
"PARENT" => "AJAX_SETTINGS",
"NAME" => GetMessage("COMP_PROP_AJAX_OPTIONS_SHADOW"),
"TYPE" => "CHECKBOX",
"MULTIPLE" => "N",
"DEFAULT" => "Y",
"ADDITIONAL_VALUES" => "N"
);
$arComponentParameters["PARAMETERS"]["AJAX_OPTION_JUMP"] = array(
"PARENT" => "AJAX_SETTINGS",
"NAME" => GetMessage("COMP_PROP_AJAX_OPTIONS_JUMP"),
"TYPE" => "CHECKBOX",
"MULTIPLE" => "N",
"DEFAULT" => "N",
"ADDITIONAL_VALUES" => "N"
);
$arComponentParameters["PARAMETERS"]["AJAX_OPTION_STYLE"] = array(
"PARENT" => "AJAX_SETTINGS",
"NAME" => GetMessage("COMP_PROP_AJAX_OPTIONS_STYLE"),
"TYPE" => "CHECKBOX",
"MULTIPLE" => "N",
"DEFAULT" => "Y",
"ADDITIONAL_VALUES" => "N"
);
$arComponentParameters["PARAMETERS"]["AJAX_OPTION_HISTORY"] = array(
"PARENT" => "AJAX_SETTINGS",
"NAME" => GetMessage("COMP_PROP_AJAX_OPTIONS_HISTORY"),
"TYPE" => "CHECKBOX",
"MULTIPLE" => "N",
"DEFAULT" => "N",
"ADDITIONAL_VALUES" => "N"
);
$arComponentParameters["PARAMETERS"]["AJAX_OPTION_ADDITIONAL"] = array(
"PARENT" => "AJAX_SETTINGS",
"NAME" => GetMessage("COMP_PROP_AJAX_OPTIONS_ADDITIONAL"),
"TYPE" => "STRING",
"HIDDEN" => "Y",
"MULTIPLE" => "N",
"DEFAULT" => "",
"ADDITIONAL_VALUES" => "N"
);
/*
$arComponentParameters["PARAMETERS"]["AJAX_OPTIONS"] = array(
"PARENT" => "AJAX_SETTINGS",
"NAME" => GetMessage("COMP_PROP_AJAX_OPTIONS"),
"TYPE" => "LIST",
"MULTIPLE" => "Y",
"VALUES" => array(
"NOSHADOW" => GetMessage("COMP_PROP_AJAX_OPTIONS_NOSHADOW"),
"NOJUMP" => GetMessage("COMP_PROP_AJAX_OPTIONS_NOJUMP"),
"NOSTYLE" => GetMessage("COMP_PROP_AJAX_OPTIONS_NOSTYLE"),
),
"DEFAULT" => array('NOJUMP'),
"ADDITIONAL_VALUES" => "N"
);
*/
}
}
if(
(CPageOption::GetOptionString("main","tips_creation","no")=="allowed")
&& (strpos($componentPath, "/forum")!==false)
)
{
//Create directories
$help_path = $_SERVER["DOCUMENT_ROOT"].$componentPath."/help";
if(!file_exists($help_path)) mkdir($help_path);
$help_lang_path = $_SERVER["DOCUMENT_ROOT"].$componentPath."/lang";
if(!file_exists($help_lang_path)) mkdir($help_lang_path);
$help_lang_path .= "/ru";if(!file_exists($help_lang_path)) mkdir($help_lang_path);
$help_lang_path .= "/help";if(!file_exists($help_lang_path)) mkdir($help_lang_path);
if(is_dir($help_path) && is_dir($help_lang_path))
{
//Create files if none exists
$filename = $help_path."/.tooltips.php";
if(!file_exists($filename))
{
$handle=fopen($filename, "w");fwrite($handle, "<?\n\$arTooltips = array(\n);\n?>");fclose($handle);
}
$handle=fopen($filename, "r");$contents = fread($handle, filesize($filename));fclose($handle);
$file_modified = false;
$lang_filename = $help_lang_path."/.tooltips.php";
if(!file_exists($lang_filename))
{
$handle=fopen($lang_filename, "w");fwrite($handle, "<?\n?>");fclose($handle);
}
$handle=fopen($lang_filename, "r");$lang_contents = fread($handle, filesize($lang_filename));fclose($handle);
$lang_file_modified = false;
//Bug fix
if(strpos($lang_contents, "\$MESS['")!==false)
{
$lang_contents = str_replace("\$MESS['", "\$MESS ['", $lang_contents);
$lang_file_modified = true;
}
//Check out parameters
foreach($arComponentParameters["PARAMETERS"] as $strName=>$arParameter)
{
if(strpos($contents, "\"${strName}\" => ")===false)
{
$contents = str_replace(");\n", "\t\"${strName}\" => GetMessage(\"${strName}_TIP\"),\n);\n", $contents);
$file_modified = true;
}
if(strpos($lang_contents, "\$MESS ['${strName}_TIP'] = ")===false)
{
$lang_contents = str_replace("?>", "\$MESS ['${strName}_TIP'] = \"".str_replace("\$", "\\\$", str_replace('"','\\"',$arParameter["NAME"]))."\";\n?>", $lang_contents);
$lang_file_modified = true;
}
}
//Save the result of the work
if($file_modified)
{
$handle=fopen($filename, "w");
fwrite($handle, $contents);
fclose($handle);
}
if($lang_file_modified)
{
$handle=fopen($lang_filename, "w");
fwrite($handle, $lang_contents);
fclose($handle);
}
}
reset($arComponentParameters["PARAMETERS"]);
}
uasort($arComponentParameters["GROUPS"], array("CComponentUtil", "__GroupParamsCompare"));
}
return $arComponentParameters;
}
function GetTemplateProps($componentName, $templateName, $siteTemplate = "", $arCurrentValues = array())
{
$arTemplateParameters = array();
$componentName = Trim($componentName);
if (StrLen($componentName) <= 0)
return $arTemplateParameters;
$path2Comp = CComponentEngine::MakeComponentPath($componentName);
if (StrLen($path2Comp) <= 0)
return $arTemplateParameters;
$componentPath = "/bitrix/components".$path2Comp;
if (!file_exists($_SERVER["DOCUMENT_ROOT"].$componentPath)
|| !is_dir($_SERVER["DOCUMENT_ROOT"].$componentPath)
|| !file_exists($_SERVER["DOCUMENT_ROOT"].$componentPath."/component.php")
|| !is_file($_SERVER["DOCUMENT_ROOT"].$componentPath."/component.php"))
{
return $arTemplateParameters;
}
if (StrLen($templateName) <= 0)
$templateName = ".default";
if ($siteTemplate && StrLen($siteTemplate) > 0)
{
if (file_exists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$siteTemplate."/components".$path2Comp."/".$templateName))
{
if (is_dir($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$siteTemplate."/components".$path2Comp."/".$templateName)
&& file_exists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$siteTemplate."/components".$path2Comp."/".$templateName."/.parameters.php"))
{
CComponentUtil::__IncludeLang(BX_PERSONAL_ROOT."/templates/".$siteTemplate."/components".$path2Comp."/".$templateName, ".parameters.php");
include($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$siteTemplate."/components".$path2Comp."/".$templateName."/.parameters.php");
}
return $arTemplateParameters;
}
}
if (file_exists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/.default/components".$path2Comp."/".$templateName))
{
if (is_dir($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/.default/components".$path2Comp."/".$templateName)
&& file_exists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/.default/components".$path2Comp."/".$templateName."/.parameters.php"))
{
CComponentUtil::__IncludeLang(BX_PERSONAL_ROOT."/templates/.default/components".$path2Comp."/".$templateName, ".parameters.php");
include($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/.default/components".$path2Comp."/".$templateName."/.parameters.php");
}
return $arTemplateParameters;
}
if (file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/components".$path2Comp."/templates/".$templateName))
{
if (is_dir($_SERVER["DOCUMENT_ROOT"]."/bitrix/components".$path2Comp."/templates/".$templateName)
&& file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/components".$path2Comp."/templates/".$templateName."/.parameters.php"))
{
CComponentUtil::__IncludeLang("/bitrix/components".$path2Comp."/templates/".$templateName, ".parameters.php");
include($_SERVER["DOCUMENT_ROOT"]."/bitrix/components".$path2Comp."/templates/".$templateName."/.parameters.php");
}
return $arTemplateParameters;
}
return $arTemplateParameters;
}
function GetTemplatesList($componentName, $currentTemplate = False)
{
$arTemplatesList = array();
$componentName = Trim($componentName);
if (StrLen($componentName) <= 0)
return $arTemplatesList;
$path2Comp = CComponentEngine::MakeComponentPath($componentName);
if (StrLen($path2Comp) <= 0)
return $arTemplatesList;
$componentPath = "/bitrix/components".$path2Comp;
if (!file_exists($_SERVER["DOCUMENT_ROOT"].$componentPath)
|| !is_dir($_SERVER["DOCUMENT_ROOT"].$componentPath)
|| !file_exists($_SERVER["DOCUMENT_ROOT"].$componentPath."/component.php")
|| !is_file($_SERVER["DOCUMENT_ROOT"].$componentPath."/component.php"))
{
return $arTemplatesList;
}
$arExists = array();
if ($handle = @opendir($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates"))
{
while (($file = readdir($handle)) !== false)
{
if ($file == "." || $file == "..")
continue;
if ($currentTemplate !== False && $currentTemplate != $file || $file == ".default")
continue;
if (is_dir($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$file))
{
if (file_exists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$file."/components"))
{
if (file_exists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$file."/components".$path2Comp))
{
if ($handle1 = @opendir($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$file."/components".$path2Comp))
{
while (($file1 = readdir($handle1)) !== false)
{
if ($file1 == "." || $file1 == "..")
continue;
$arTemplate = array(
"NAME" => $file1,
"TEMPLATE" => $file
);
if (is_dir($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$file."/components".$path2Comp."/".$file1))
{
if (file_exists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$file."/components".$path2Comp."/".$file1."/.description.php"))
{
CComponentUtil::__IncludeLang(BX_PERSONAL_ROOT."/templates/".$file."/components".$path2Comp."/".$file1, ".description.php");
$arTemplateDescription = array();
include($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$file."/components".$path2Comp."/".$file1."/.description.php");
$arTemplate["TITLE"] = $arTemplateDescription["NAME"];
$arTemplate["DESCRIPTION"] = $arTemplateDescription["DESCRIPTION"];
}
}
$arTemplatesList[] = $arTemplate;
$arExists[] = $arTemplate["NAME"];
}
@closedir($handle1);
}
}
}
}
}
@closedir($handle);
}
if (is_dir($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/.default"))
{
if (file_exists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/.default/components"))
{
if (file_exists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/.default/components".$path2Comp))
{
if ($handle1 = @opendir($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/.default/components".$path2Comp))
{
while (($file1 = readdir($handle1)) !== false)
{
if ($file1 == "." || $file1 == "..")
continue;
if (in_array($file1, $arExists))
continue;
$arTemplate = array(
"NAME" => $file1,
"TEMPLATE" => ".default"
);
if (is_dir($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/.default/components".$path2Comp."/".$file1))
{
if (file_exists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/.default/components".$path2Comp."/".$file1."/.description.php"))
{
CComponentUtil::__IncludeLang(BX_PERSONAL_ROOT."/templates/.default/components".$path2Comp."/".$file1, ".description.php");
$arTemplateDescription = array();
include($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/.default/components".$path2Comp."/".$file1."/.description.php");
$arTemplate["TITLE"] = $arTemplateDescription["NAME"];
$arTemplate["DESCRIPTION"] = $arTemplateDescription["DESCRIPTION"];
}
}
$arTemplatesList[] = $arTemplate;
$arExists[] = $arTemplate["NAME"];
}
@closedir($handle1);
}
}
}
}
if ($handle1 = @opendir($_SERVER["DOCUMENT_ROOT"].$componentPath."/templates"))
{
while (($file1 = readdir($handle1)) !== false)
{
if ($file1 == "." || $file1 == "..")
continue;
if (in_array($file1, $arExists))
continue;
$arTemplate = array(
"NAME" => $file1,
"TEMPLATE" => ""
);
if (is_dir($_SERVER["DOCUMENT_ROOT"].$componentPath."/templates/".$file1))
{
if (file_exists($_SERVER["DOCUMENT_ROOT"].$componentPath."/templates/".$file1."/.description.php"))
{
CComponentUtil::__IncludeLang($componentPath."/templates/".$file1, ".description.php");
$arTemplateDescription = array();
include($_SERVER["DOCUMENT_ROOT"].$componentPath."/templates/".$file1."/.description.php");
$arTemplate["TITLE"] = $arTemplateDescription["NAME"];
$arTemplate["DESCRIPTION"] = $arTemplateDescription["DESCRIPTION"];
}
}
$arTemplatesList[] = $arTemplate;
$arExists[] = $arTemplate["NAME"];
}
@closedir($handle1);
}
return $arTemplatesList;
}
function CopyComponent($componentName, $newNamespace, $newName = False, $bRewrite = False)
{
$componentName = Trim($componentName);
if (StrLen($componentName) <= 0)
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("comp_util_err1"), "EMPTY_COMPONENT_NAME");
return false;
}
$path2Comp = CComponentEngine::MakeComponentPath($componentName);
if (StrLen($path2Comp) <= 0)
{
$GLOBALS["APPLICATION"]->ThrowException(str_replace("#NAME#", $componentName, GetMessage("comp_util_err2")), "ERROR_NOT_COMPONENT");
return false;
}
$componentPath = "/bitrix/components".$path2Comp;
if (!file_exists($_SERVER["DOCUMENT_ROOT"].$componentPath)
|| !is_dir($_SERVER["DOCUMENT_ROOT"].$componentPath)
|| !file_exists($_SERVER["DOCUMENT_ROOT"].$componentPath."/component.php")
|| !is_file($_SERVER["DOCUMENT_ROOT"].$componentPath."/component.php"))
{
$GLOBALS["APPLICATION"]->ThrowException(str_replace("#NAME#", $componentName, GetMessage("comp_util_err2")), "ERROR_NOT_COMPONENT");
return false;
}
$newNamespace = Trim($newNamespace);
if (StrLen($newNamespace) > 0)
{
$newNamespaceTmp = preg_replace("#[^A-Za-z0-9_.-]#i", "", $newNamespace);
if ($newNamespace != $newNamespaceTmp)
{
$GLOBALS["APPLICATION"]->ThrowException(str_replace("#NAME#", $newNamespace, GetMessage("comp_util_err3")), "ERROR_NEW_NAMESPACE");
return false;
}
}
if (StrLen($newName) <= 0)
$newName = False;
if ($newName !== False)
{
if (!preg_match("#^([A-Za-z0-9_-]+\\.)*([A-Za-z0-9_-]+)$#i", $newName))
{
$GLOBALS["APPLICATION"]->ThrowException(str_replace("#NAME#", $newName, GetMessage("comp_util_err4")), "ERROR_NEW_NAME");
return false;
}
}
$namespace = "";
$name = $componentName;
if (($pos = StrPos($componentName, ":")) !== False)
{
$namespace = SubStr($componentName, 0, $pos);
$name = SubStr($componentName, $pos + 1);
}
if ($namespace == $newNamespace
&& ($newName === False || $newName !== False && $name == $newName))
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("comp_util_err5"), "ERROR_DUPL1");
return false;
}
if ($newName !== False)
$componentNameNew = $newNamespace.":".$newName;
else
$componentNameNew = $newNamespace.":".$name;
$path2CompNew = CComponentEngine::MakeComponentPath($componentNameNew);
if (StrLen($path2CompNew) <= 0)
{
$GLOBALS["APPLICATION"]->ThrowException(str_replace("#NAME#", $componentNameNew, GetMessage("comp_util_err2")), "ERROR_NOT_COMPONENT");
return false;
}
$componentPathNew = "/bitrix/components".$path2CompNew;
if (file_exists($_SERVER["DOCUMENT_ROOT"].$componentPathNew))
{
if (!$bRewrite)
{
$GLOBALS["APPLICATION"]->ThrowException(str_replace("#NAME#", $componentNameNew, GetMessage("comp_util_err6")), "ERROR_EXISTS");
return false;
}
else
{
DeleteDirFilesEx($componentPathNew);
}
}
CheckDirPath($_SERVER["DOCUMENT_ROOT"].$componentPathNew);
CopyDirFiles($_SERVER["DOCUMENT_ROOT"].$componentPath, $_SERVER["DOCUMENT_ROOT"].$componentPathNew, True, True, False);
}
function CopyTemplate($componentName, $templateName, $siteTemplate, $newSiteTemplate, $newName = False, $bRewrite = False)
{
$componentName = Trim($componentName);
if (StrLen($componentName) <= 0)
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("comp_util_err1"), "EMPTY_COMPONENT_NAME");
return false;
}
$path2Comp = CComponentEngine::MakeComponentPath($componentName);
if (StrLen($path2Comp) <= 0)
{
$GLOBALS["APPLICATION"]->ThrowException(str_replace("#NAME#", $componentName, GetMessage("comp_util_err2")), "ERROR_NOT_COMPONENT");
return false;
}
$componentPath = "/bitrix/components".$path2Comp;
if (!file_exists($_SERVER["DOCUMENT_ROOT"].$componentPath)
|| !is_dir($_SERVER["DOCUMENT_ROOT"].$componentPath)
|| !file_exists($_SERVER["DOCUMENT_ROOT"].$componentPath."/component.php")
|| !is_file($_SERVER["DOCUMENT_ROOT"].$componentPath."/component.php"))
{
$GLOBALS["APPLICATION"]->ThrowException(str_replace("#NAME#", $componentName, GetMessage("comp_util_err2")), "ERROR_NOT_COMPONENT");
return false;
}
if (StrLen($templateName) <= 0)
$templateName = ".default";
$templateNameTmp = preg_replace("#[^A-Za-z0-9_.-]#i", "", $templateName);
if ($templateNameTmp != $templateName)
{
$GLOBALS["APPLICATION"]->ThrowException(str_replace("#NAME#", $templateName, GetMessage("comp_util_err7")), "ERROR_BAD_TEMPLATE_NAME");
return false;
}
if (StrLen($siteTemplate) <= 0)
$siteTemplate = False;
if ($siteTemplate != False)
{
if (!file_exists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$siteTemplate)
|| !is_dir($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$siteTemplate))
{
$GLOBALS["APPLICATION"]->ThrowException(str_replace("#NAME#", $siteTemplate, GetMessage("comp_util_err8")), "ERROR_NO_SITE_TEMPL");
return false;
}
}
if ($siteTemplate != False)
$path = BX_PERSONAL_ROOT."/templates/".$siteTemplate."/components".$path2Comp."/".$templateName;
else
$path = "/bitrix/components".$path2Comp."/templates/".$templateName;
if (!file_exists($_SERVER["DOCUMENT_ROOT"].$path))
{
$GLOBALS["APPLICATION"]->ThrowException(str_replace("#C_NAME#", $componentName, str_replace("#T_NAME#", $templateName, GetMessage("comp_util_err9"))), "ERROR_NO_TEMPL");
return false;
}
if (StrLen($newSiteTemplate) <= 0)
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("comp_util_err10"), "ERROR_EMPTY_SITE_TEMPL");
return false;
}
if (!file_exists($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$newSiteTemplate)
|| !is_dir($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/".$newSiteTemplate))
{
$GLOBALS["APPLICATION"]->ThrowException(str_replace("#NAME#", $newSiteTemplate, GetMessage("comp_util_err8")), "ERROR_NO_SITE_TEMPL");
return false;
}
if ($siteTemplate !== False
&& $siteTemplate == $newSiteTemplate
&& ($newName === False || $newName !== False && $templateName == $newName))
{
$GLOBALS["APPLICATION"]->ThrowException(GetMessage("comp_util_err11"), "ERROR_DUPL1");
return false;
}
if ($newName !== False)
$templateNameNew = $newName;
else
$templateNameNew = $templateName;
$templateNameNewTmp = preg_replace("#[^A-Za-z0-9_.-]#i", "", $templateNameNew);
if ($templateNameNewTmp != $templateNameNew)
{
$GLOBALS["APPLICATION"]->ThrowException(str_replace("#NAME#", $templateNameNew, GetMessage("comp_util_err7")), "ERROR_BAD_TEMPLATE_NAME");
return false;
}
$pathNew = BX_PERSONAL_ROOT."/templates/".$newSiteTemplate."/components".$path2Comp."/".$templateNameNew;
if (file_exists($_SERVER["DOCUMENT_ROOT"].$pathNew))
{
if (!$bRewrite)
{
$GLOBALS["APPLICATION"]->ThrowException(str_replace("#NAME#", $templateNameNew, GetMessage("comp_util_err12")), "ERROR_EXISTS");
return false;
}
else
{
DeleteDirFilesEx($pathNew);
}
}
CopyDirFiles($_SERVER["DOCUMENT_ROOT"].$path, $_SERVER["DOCUMENT_ROOT"].$pathNew, True, True, False);
return True;
}
function CheckComponentName($name, $arFilter)
{
foreach ($arFilter as $pattern)
if (preg_match($pattern, $name))
return true;
return false;
}
}
?>