/bitrix/modules/main/admin/settings.php

https://bitbucket.org/alex_poluektov/itech_test · PHP · 351 lines · 312 code · 25 blank · 14 comment · 69 complexity · 7ad31365901f2959eaec10e2eeb820f2 MD5 · raw file

  1. <?php
  2. /**
  3. * Bitrix Framework
  4. * @package bitrix
  5. * @subpackage main
  6. * @copyright 2001-2013 Bitrix
  7. */
  8. /**
  9. * Bitrix vars
  10. * @global CUser $USER
  11. * @global CMain $APPLICATION
  12. * @global CAdminPage $adminPage
  13. */
  14. require_once(dirname(__FILE__)."/../include/prolog_admin_before.php");
  15. define("HELP_FILE", "settings/settings/settings.php");
  16. if(!$USER->CanDoOperation('view_other_settings') && !$USER->CanDoOperation('edit_other_settings'))
  17. $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
  18. if(strpos($_REQUEST["back_url_settings"], '/') !== 0 || strpos($_REQUEST["back_url_settings"], '//') === 0)
  19. $_REQUEST["back_url_settings"] = '';
  20. IncludeModuleLangFile(__FILE__);
  21. $arModules = array(
  22. "main"=>array(
  23. "PAGE"=>$_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/options.php",
  24. "NAME"=>GetMessage("MAIN_KERNEL"),
  25. "SORT"=>-1,
  26. )
  27. );
  28. $adminPage->Init();
  29. foreach($adminPage->aModules as $module)
  30. {
  31. if($APPLICATION->GetGroupRight($module) < "R")
  32. continue;
  33. if($module == "main")
  34. continue;
  35. $ifile = getLocalPath("modules/".$module."/install/index.php");
  36. $ofile = getLocalPath("modules/".$module."/options.php");
  37. if($ifile !== false && $ofile !== false)
  38. {
  39. $info = CModule::CreateModuleObject($module);
  40. $arModules[$module]["PAGE"] = $_SERVER["DOCUMENT_ROOT"].$ofile;
  41. $arModules[$module]["NAME"] = $info->MODULE_NAME;
  42. $arModules[$module]["SORT"] = $info->MODULE_SORT;
  43. }
  44. }
  45. uasort($arModules, create_function('$a, $b', 'if($a["SORT"] == $b["SORT"]) return strcasecmp($a["NAME"], $b["NAME"]); return ($a["SORT"] < $b["SORT"])? -1 : 1;'));
  46. $mid = $_REQUEST["mid"];
  47. if($mid == "" || !isset($arModules[$mid]) || !file_exists($arModules[$mid]["PAGE"]))
  48. $mid = "main";
  49. ob_start();
  50. include($arModules[$mid]["PAGE"]);
  51. $strModuleSettingsTabs = ob_get_contents();
  52. ob_end_clean();
  53. $APPLICATION->SetTitle(GetMessage("MAIN_TITLE"));
  54. require_once ($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/include/prolog_admin_after.php");
  55. ?>
  56. <form action="">
  57. <select name="mid" onchange="window.location='settings.php?lang=<?=LANGUAGE_ID.($_REQUEST["mid_menu"]<>""? "&amp;mid_menu=1":"")?>&amp;mid='+this[this.selectedIndex].value;">
  58. <?foreach($arModules as $k=>$m):?>
  59. <option value="<?echo htmlspecialcharsbx($k)?>"<?if($mid == $k) echo " selected"?>><?echo htmlspecialcharsbx($m["NAME"])?></option>
  60. <?endforeach;?>
  61. </select>
  62. </form>
  63. <br />
  64. <?
  65. function __AdmSettingsSaveOptions($module_id, $arOptions)
  66. {
  67. foreach($arOptions as $arOption)
  68. {
  69. __AdmSettingsSaveOption($module_id, $arOption);
  70. }
  71. }
  72. function __AdmSettingsSaveOption($module_id, $arOption)
  73. {
  74. if(!is_array($arOption) || isset($arOption["note"]))
  75. return false;
  76. if($arOption[3][0] == "statictext" || $arOption[3][0] == "statichtml")
  77. return false;
  78. $arControllerOption = CControllerClient::GetInstalledOptions($module_id);
  79. if(isset($arControllerOption[$arOption[0]]))
  80. return false;
  81. $name = $arOption[0];
  82. $isChoiceSites = array_key_exists(6, $arOption) && $arOption[6] == "Y" ? true : false;
  83. if ($isChoiceSites)
  84. {
  85. if (isset($_REQUEST[$name."_all"]) && strlen($_REQUEST[$name."_all"]) > 0)
  86. COption::SetOptionString($module_id, $name, $_REQUEST[$name."_all"], $arOption[1]);
  87. else
  88. COption::RemoveOption($module_id, $name);
  89. $queryObject = \Bitrix\Main\SiteTable::getList(array(
  90. 'select' => array('LID', 'NAME'),
  91. 'filter' => array(),
  92. 'order' => array('SORT' => 'ASC'),
  93. ));
  94. while ($site = $queryObject->fetch())
  95. {
  96. if (isset($_REQUEST[$name."_".$site["LID"]]) && strlen($_REQUEST[$name."_".$site["LID"]]) > 0 &&
  97. !isset($_REQUEST[$name."_all"]))
  98. {
  99. $val = $_REQUEST[$name."_".$site["LID"]];
  100. if($arOption[3][0] == "checkbox" && $val != "Y")
  101. $val = "N";
  102. if($arOption[3][0] == "multiselectbox")
  103. $val = @implode(",", $val);
  104. COption::SetOptionString($module_id, $name, $val, $arOption[1], $site["LID"]);
  105. }
  106. else
  107. {
  108. COption::RemoveOption($module_id, $name, $site["LID"]);
  109. }
  110. }
  111. }
  112. else
  113. {
  114. $val = $_REQUEST[$name];
  115. //disabled
  116. if(!isset($_REQUEST[$name]))
  117. {
  118. if($arOption[3][0] == 'checkbox')
  119. $val = 'N';
  120. else
  121. return false;
  122. }
  123. if($arOption[3][0] == "checkbox" && $val != "Y")
  124. $val = "N";
  125. if($arOption[3][0] == "multiselectbox")
  126. $val = @implode(",", $val);
  127. COption::SetOptionString($module_id, $name, $val, $arOption[1]);
  128. }
  129. return null;
  130. }
  131. function __AdmSettingsDrawRow($module_id, $Option)
  132. {
  133. $arControllerOption = CControllerClient::GetInstalledOptions($module_id);
  134. if(!is_array($Option)):
  135. ?>
  136. <tr class="heading">
  137. <td colspan="2"><?=$Option?></td>
  138. </tr>
  139. <?
  140. elseif(isset($Option["note"])):
  141. ?>
  142. <tr>
  143. <td colspan="2" align="center">
  144. <?echo BeginNote('align="center"');?>
  145. <?=$Option["note"]?>
  146. <?echo EndNote();?>
  147. </td>
  148. </tr>
  149. <?
  150. else:
  151. $isChoiceSites = array_key_exists(6, $Option) && $Option[6] == "Y" ? true : false;
  152. $listSite = array();
  153. $listSiteValue = array();
  154. if ($Option[0] != "")
  155. {
  156. if ($isChoiceSites)
  157. {
  158. $queryObject = \Bitrix\Main\SiteTable::getList(array(
  159. "select" => array("LID", "NAME"),
  160. "filter" => array(),
  161. "order" => array("SORT" => "ASC"),
  162. ));
  163. $listSite[""] = GetMessage("MAIN_ADMIN_SITE_DEFAULT_VALUE_SELECT");
  164. $listSite["all"] = GetMessage("MAIN_ADMIN_SITE_ALL_SELECT");
  165. while ($site = $queryObject->fetch())
  166. {
  167. $listSite[$site["LID"]] = $site["NAME"];
  168. $val = COption::GetOptionString($module_id, $Option[0], $Option[2], $site["LID"], true);
  169. if ($val)
  170. $listSiteValue[$Option[0]."_".$site["LID"]] = $val;
  171. }
  172. $val = "";
  173. if (empty($listSiteValue))
  174. {
  175. $value = COption::GetOptionString($module_id, $Option[0], $Option[2]);
  176. if ($value)
  177. $listSiteValue = array($Option[0]."_all" => $value);
  178. else
  179. $listSiteValue[$Option[0]] = "";
  180. }
  181. }
  182. else
  183. {
  184. $val = COption::GetOptionString($module_id, $Option[0], $Option[2]);
  185. }
  186. }
  187. else
  188. {
  189. $val = $Option[2];
  190. }
  191. if ($isChoiceSites):?>
  192. <tr>
  193. <td colspan="2" style="text-align: center!important;">
  194. <label><?=$Option[1]?></label>
  195. </td>
  196. </tr>
  197. <?endif;?>
  198. <?if ($isChoiceSites):
  199. foreach ($listSiteValue as $fieldName => $fieldValue):?>
  200. <tr>
  201. <?
  202. $siteValue = str_replace($Option[0]."_", "", $fieldName);
  203. renderLable($Option, $listSite, $siteValue);
  204. renderInput($Option, $arControllerOption, $fieldName, $fieldValue);
  205. ?>
  206. </tr>
  207. <?endforeach;?>
  208. <?else:?>
  209. <tr>
  210. <?
  211. renderLable($Option, $listSite);
  212. renderInput($Option, $arControllerOption, $Option[0], $val);
  213. ?>
  214. </tr>
  215. <?endif;?>
  216. <? if ($isChoiceSites): ?>
  217. <tr>
  218. <td width="50%">
  219. <a href="javascript:void(0)" onclick="addSiteSelector(this)" class="bx-action-href">
  220. <?=GetMessage("MAIN_ADMIN_ADD_SITE_SELECTOR")?>
  221. </a>
  222. </td>
  223. <td width="50%"></td>
  224. </tr>
  225. <? endif; ?>
  226. <?
  227. endif;
  228. }
  229. function __AdmSettingsDrawList($module_id, $arParams)
  230. {
  231. foreach($arParams as $Option)
  232. {
  233. __AdmSettingsDrawRow($module_id, $Option);
  234. }
  235. }
  236. function renderLable($Option, array $listSite, $siteValue = "")
  237. {
  238. $type = $Option[3];
  239. $sup_text = array_key_exists(5, $Option) ? $Option[5] : '';
  240. $isChoiceSites = array_key_exists(6, $Option) && $Option[6] == "Y" ? true : false;
  241. ?>
  242. <?if ($isChoiceSites): ?>
  243. <script type="text/javascript">
  244. //TODO It is possible to modify the functions if necessary to clone different elements
  245. function changeSite(el, fieldName)
  246. {
  247. var tr = jsUtils.FindParentObject(el, "tr");
  248. var sel = jsUtils.FindChildObject(tr.cells[1], "select");
  249. sel.name = fieldName+"_"+el.value;
  250. }
  251. function addSiteSelector(a)
  252. {
  253. var row = jsUtils.FindParentObject(a, "tr");
  254. var tbl = row.parentNode;
  255. var tableRow = tbl.rows[row.rowIndex-1].cloneNode(true);
  256. tbl.insertBefore(tableRow, row);
  257. var sel = jsUtils.FindChildObject(tableRow.cells[0], "select");
  258. sel.name = "";
  259. sel.selectedIndex = 0;
  260. sel = jsUtils.FindChildObject(tableRow.cells[1], "select");
  261. sel.name = "";
  262. sel.selectedIndex = 0;
  263. }
  264. </script>
  265. <td width="50%">
  266. <select onchange="changeSite(this, '<?=htmlspecialcharsbx($Option[0])?>')">
  267. <?foreach ($listSite as $lid => $siteName):?>
  268. <option <?if ($siteValue ==$lid) echo "selected";?> value="<?=htmlspecialcharsbx($lid)?>">
  269. <?=htmlspecialcharsbx($siteName)?>
  270. </option>
  271. <?endforeach;?>
  272. </select>
  273. </td>
  274. <?else:?>
  275. <td<?if ($type[0]=="multiselectbox" || $type[0]=="textarea" || $type[0]=="statictext" ||
  276. $type[0]=="statichtml") echo ' class="adm-detail-valign-top"'?> width="50%"><?
  277. if ($type[0]=="checkbox")
  278. echo "<label for='".htmlspecialcharsbx($Option[0])."'>".$Option[1]."</label>";
  279. else
  280. echo $Option[1];
  281. if (strlen($sup_text) > 0)
  282. {
  283. ?><span class="required"><sup><?=$sup_text?></sup></span><?
  284. }
  285. ?><a name="opt_<?=htmlspecialcharsbx($Option[0])?>"></a></td>
  286. <?endif;
  287. }
  288. function renderInput($Option, $arControllerOption, $fieldName, $val)
  289. {
  290. $type = $Option[3];
  291. $disabled = array_key_exists(4, $Option) && $Option[4] == 'Y' ? ' disabled' : '';
  292. ?><td width="50%"><?
  293. if($type[0]=="checkbox"):
  294. ?><input type="checkbox" <?if(isset($arControllerOption[$Option[0]]))echo ' disabled title="'.GetMessage("MAIN_ADMIN_SET_CONTROLLER_ALT").'"';?> id="<?echo htmlspecialcharsbx($Option[0])?>" name="<?=htmlspecialcharsbx($fieldName)?>" value="Y"<?if($val=="Y")echo" checked";?><?=$disabled?><?if($type[2]<>'') echo " ".$type[2]?>><?
  295. elseif($type[0]=="text" || $type[0]=="password"):
  296. ?><input type="<?echo $type[0]?>"<?if(isset($arControllerOption[$Option[0]]))echo ' disabled title="'.GetMessage("MAIN_ADMIN_SET_CONTROLLER_ALT").'"';?> size="<?echo $type[1]?>" maxlength="255" value="<?echo htmlspecialcharsbx($val)?>" name="<?=htmlspecialcharsbx($fieldName)?>"<?=$disabled?><?=($type[0]=="password" || $type["noautocomplete"]? ' autocomplete="new-password"':'')?>><?
  297. elseif($type[0]=="selectbox"):
  298. $arr = $type[1];
  299. if(!is_array($arr))
  300. $arr = array();
  301. ?><select name="<?=htmlspecialcharsbx($fieldName)?>" <?if(isset($arControllerOption[$Option[0]]))echo ' disabled title="'.GetMessage("MAIN_ADMIN_SET_CONTROLLER_ALT").'"';?> <?=$disabled?>><?
  302. foreach($arr as $key => $v):
  303. ?><option value="<?echo $key?>"<?if($val==$key)echo" selected"?>><?echo htmlspecialcharsbx($v)?></option><?
  304. endforeach;
  305. ?></select><?
  306. elseif($type[0]=="multiselectbox"):
  307. $arr = $type[1];
  308. if(!is_array($arr))
  309. $arr = array();
  310. $arr_val = explode(",",$val);
  311. ?><select size="5" <?if(isset($arControllerOption[$Option[0]]))echo ' disabled title="'.GetMessage("MAIN_ADMIN_SET_CONTROLLER_ALT").'"';?> multiple name="<?=htmlspecialcharsbx($fieldName)?>[]"<?=$disabled?>><?
  312. foreach($arr as $key => $v):
  313. ?><option value="<?echo $key?>"<?if(in_array($key, $arr_val)) echo " selected"?>><?echo htmlspecialcharsbx($v)?></option><?
  314. endforeach;
  315. ?></select><?
  316. elseif($type[0]=="textarea"):
  317. ?><textarea <?if(isset($arControllerOption[$Option[0]]))echo ' disabled title="'.GetMessage("MAIN_ADMIN_SET_CONTROLLER_ALT").'"';?> rows="<?echo $type[1]?>" cols="<?echo $type[2]?>" name="<?=htmlspecialcharsbx($fieldName)?>"<?=$disabled?>><?echo htmlspecialcharsbx($val)?></textarea><?
  318. elseif($type[0]=="statictext"):
  319. echo htmlspecialcharsbx($val);
  320. elseif($type[0]=="statichtml"):
  321. echo $val;
  322. endif;?>
  323. </td><?
  324. }
  325. echo $strModuleSettingsTabs;
  326. require($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/include/epilog_admin.php");