PageRenderTime 31ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/main/admin/user_edit.php

https://gitlab.com/alexprowars/bitrix
PHP | 1102 lines | 968 code | 116 blank | 18 comment | 225 complexity | 58c144a89dc53a8cdae1930e7810e06f MD5 | raw file
  1. <?php
  2. /**
  3. * Bitrix Framework
  4. * @package bitrix
  5. * @subpackage main
  6. * @copyright 2001-2013 Bitrix
  7. * @global CMain $APPLICATION
  8. * @global CUser $USER
  9. * @global CDatabase $DB
  10. * @global CUserTypeManager $USER_FIELD_MANAGER
  11. */
  12. use \Bitrix\Main\Authentication\Policy;
  13. require_once(dirname(__FILE__)."/../include/prolog_admin_before.php");
  14. require_once($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/prolog.php");
  15. define("HELP_FILE", "users/user_edit.php");
  16. $strRedirect_admin = BX_ROOT."/admin/user_admin.php?lang=".LANG;
  17. $strRedirect = BX_ROOT."/admin/user_edit.php?lang=".LANG;
  18. ClearVars();
  19. $canViewUserList = ($USER->CanDoOperation('view_subordinate_users') || $USER->CanDoOperation('view_all_users') || $USER->CanDoOperation('edit_all_users') || $USER->CanDoOperation('edit_subordinate_users'));
  20. if(!($USER->CanDoOperation('view_own_profile') || $USER->CanDoOperation('edit_own_profile') || $canViewUserList))
  21. $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
  22. $ID = intval($_REQUEST["ID"]);
  23. $COPY_ID = intval($_REQUEST["COPY_ID"]);
  24. $uid = $USER->GetID();
  25. if($USER->CanDoOperation('edit_own_profile') && !$canViewUserList)
  26. {
  27. $ID = $uid;
  28. if($ID <= 0)
  29. $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
  30. $COPY_ID = 0;
  31. }
  32. IncludeModuleLangFile(__FILE__);
  33. $PROPERTY_ID = "USER";
  34. $message = null;
  35. $strError = '';
  36. $res = true;
  37. if($COPY_ID<=0)
  38. {
  39. $arUserGroups = CUser::GetUserGroup($ID);
  40. }
  41. else
  42. {
  43. $arUserGroups = array();
  44. $ID = $COPY_ID;
  45. }
  46. $selfEdit = ($USER->CanDoOperation('edit_own_profile') && $ID == $uid);
  47. $arUserSubordinateGroups = array();
  48. if($USER->CanDoOperation('edit_subordinate_users') && !$USER->CanDoOperation('edit_all_users'))
  49. {
  50. $arUserSubordinateGroups = array(2);
  51. $arUserGroups_u = CUser::GetUserGroup($uid);
  52. for ($j = 0,$len = count($arUserGroups_u); $j < $len; $j++)
  53. {
  54. $arSubordinateGroups = CGroup::GetSubordinateGroups($arUserGroups_u[$j]);
  55. $arUserSubordinateGroups = array_merge ($arUserSubordinateGroups, $arSubordinateGroups);
  56. }
  57. $arUserSubordinateGroups = array_unique($arUserSubordinateGroups);
  58. if (count(array_diff($arUserGroups, $arUserSubordinateGroups)) > 0 && !$selfEdit)
  59. LocalRedirect(BX_ROOT."/admin/user_admin.php?lang=".LANG);
  60. }
  61. $editable = ($USER->IsAdmin() ||
  62. $selfEdit ||
  63. ($USER->CanDoOperation('edit_subordinate_users') && !in_array(1, $arUserGroups)) ||
  64. ($USER->CanDoOperation('edit_all_users') && !in_array(1, $arUserGroups))
  65. );
  66. //authorize as user
  67. if($_REQUEST["action"] == "authorize" && check_bitrix_sessid() && $USER->CanDoOperation('edit_php'))
  68. {
  69. $USER->Logout();
  70. $USER->Authorize(intval($_REQUEST["ID"]), false, true, null, false);
  71. LocalRedirect("user_edit.php?lang=".LANGUAGE_ID."&ID=".intval($_REQUEST["ID"]));
  72. }
  73. $canSelfEdit = true;
  74. if($ID==$uid && !($USER->CanDoOperation('edit_php') || ($USER->CanDoOperation('edit_all_users') && $USER->CanDoOperation('edit_groups'))))
  75. $canSelfEdit = false;
  76. $showGroupTabs = (($USER->CanDoOperation('view_subordinate_users') || $USER->CanDoOperation('view_all_users')) && $canSelfEdit);
  77. $aTabs = array();
  78. $aTabs[] = array("DIV" => "edit1", "TAB" => GetMessage("MAIN_USER_TAB1"), "ICON"=>"main_user_edit", "TITLE"=>GetMessage("MAIN_USER_TAB1_TITLE"));
  79. if($showGroupTabs)
  80. {
  81. $aTabs[] = array("DIV" => "edit2", "TAB" => GetMessage("GROUPS"), "ICON"=>"main_user_edit", "TITLE"=>GetMessage("MAIN_USER_TAB2_TITLE"));
  82. $aTabs[] = array("DIV" => "edit_policy", "TAB" => GetMessage("main_user_edit_policy"), "ICON"=>"main_user_edit", "TITLE"=>GetMessage("main_user_edit_policy_title"));
  83. }
  84. $aTabs[] = array("DIV" => "edit3", "TAB" => GetMessage("USER_PERSONAL_INFO"), "ICON"=>"main_user_edit", "TITLE"=>GetMessage("USER_PERSONAL_INFO"));
  85. $aTabs[] = array("DIV" => "edit4", "TAB" => GetMessage("MAIN_USER_TAB4"), "ICON"=>"main_user_edit", "TITLE"=>GetMessage("USER_WORK_INFO"));
  86. $aTabs[] = array("DIV" => "edit_rating", "TAB" => GetMessage("USER_RATING_INFO"), "ICON"=>"main_user_edit", "TITLE"=>GetMessage("USER_RATING_INFO"));
  87. $i = 1;
  88. $db_opt_res = CModule::GetList();
  89. while ($opt_res = $db_opt_res->Fetch())
  90. {
  91. $mdir = $opt_res["ID"];
  92. if (file_exists($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/".$mdir) && is_dir($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/".$mdir))
  93. {
  94. $ofile = $_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/".$mdir."/options_user_settings.php";
  95. if(file_exists($ofile))
  96. {
  97. IncludeModuleLangFile($ofile);
  98. $mname = str_replace(".", "_", $mdir);
  99. $aTabs[] = array("DIV" => "edit_".$mname, "TAB" => GetMessage($mname."_TAB"), "ICON"=>"main_user_edit", "TITLE"=>GetMessage($mname."_TAB_TITLE"));
  100. $i++;
  101. }
  102. }
  103. }
  104. if(($editable && $ID!=$USER->GetID()) || $USER->IsAdmin())
  105. $aTabs[] = array("DIV" => "edit".($i+5), "TAB" => GetMessage("MAIN_USER_TAB5"), "ICON"=>"main_user_edit", "TITLE"=>GetMessage("USER_ADMIN_NOTES"));
  106. //Add user fields tab only when there is fields defined or user has rights for adding new field
  107. if(
  108. (count($USER_FIELD_MANAGER->GetUserFields($PROPERTY_ID)) > 0) ||
  109. ($USER_FIELD_MANAGER->GetRights($PROPERTY_ID) >= "W")
  110. )
  111. {
  112. $aTabs[] = $USER_FIELD_MANAGER->EditFormTab($PROPERTY_ID);
  113. }
  114. $tabControl = new CAdminForm("user_edit", $aTabs);
  115. if(
  116. $_SERVER["REQUEST_METHOD"]=="POST"
  117. && (
  118. $_REQUEST["save"]<>''
  119. || $_REQUEST["apply"]<>''
  120. || $_REQUEST["Update"]=="Y"
  121. || $_REQUEST["save_and_add"]<>''
  122. )
  123. && $editable
  124. && check_bitrix_sessid()
  125. )
  126. {
  127. $adminSidePanelHelper->decodeUriComponent();
  128. if(COption::GetOptionString('main', 'use_encrypted_auth', 'N') == 'Y')
  129. {
  130. //possible encrypted user password
  131. $sec = new CRsaSecurity();
  132. if(($arKeys = $sec->LoadKeys()))
  133. {
  134. $sec->SetKeys($arKeys);
  135. $errno = $sec->AcceptFromForm(array('NEW_PASSWORD', 'NEW_PASSWORD_CONFIRM'));
  136. if($errno == CRsaSecurity::ERROR_SESS_CHECK)
  137. $strError .= GetMessage("main_profile_sess_expired").'<br />';
  138. elseif($errno < 0)
  139. $strError .= GetMessage("main_profile_decode_err", array("#ERRCODE#"=>$errno)).'<br />';
  140. }
  141. }
  142. if($strError == '')
  143. {
  144. $user = new CUser;
  145. $arPERSONAL_PHOTO = $_FILES["PERSONAL_PHOTO"];
  146. $arWORK_LOGO = $_FILES["WORK_LOGO"];
  147. $arUser = false;
  148. if($ID > 0 && $COPY_ID <= 0)
  149. {
  150. $dbUser = CUser::GetById($ID);
  151. $arUser = $dbUser->Fetch();
  152. }
  153. if($arUser)
  154. {
  155. $arPERSONAL_PHOTO["old_file"] = $arUser["PERSONAL_PHOTO"];
  156. $arPERSONAL_PHOTO["del"] = $_POST["PERSONAL_PHOTO_del"];
  157. $arWORK_LOGO["old_file"] = $arUser["WORK_LOGO"];
  158. $arWORK_LOGO["del"] = $_POST["WORK_LOGO_del"];
  159. }
  160. $arFields = array(
  161. "TITLE" => $_POST["TITLE"],
  162. "NAME" => $_POST["NAME"],
  163. "LAST_NAME" => $_POST["LAST_NAME"],
  164. "SECOND_NAME" => $_POST["SECOND_NAME"],
  165. "EMAIL" => $_POST["EMAIL"],
  166. "LOGIN" => $_POST["LOGIN"],
  167. "PERSONAL_PROFESSION" => $_POST["PERSONAL_PROFESSION"],
  168. "PERSONAL_WWW" => $_POST["PERSONAL_WWW"],
  169. "PERSONAL_ICQ" => $_POST["PERSONAL_ICQ"],
  170. "PERSONAL_GENDER" => $_POST["PERSONAL_GENDER"],
  171. "PERSONAL_BIRTHDAY" => $_POST["PERSONAL_BIRTHDAY"],
  172. "PERSONAL_PHOTO" => $arPERSONAL_PHOTO,
  173. "PERSONAL_PHONE" => $_POST["PERSONAL_PHONE"],
  174. "PERSONAL_FAX" => $_POST["PERSONAL_FAX"],
  175. "PERSONAL_MOBILE" => $_POST["PERSONAL_MOBILE"],
  176. "PERSONAL_PAGER" => $_POST["PERSONAL_PAGER"],
  177. "PERSONAL_STREET" => $_POST["PERSONAL_STREET"],
  178. "PERSONAL_MAILBOX" => $_POST["PERSONAL_MAILBOX"],
  179. "PERSONAL_CITY" => $_POST["PERSONAL_CITY"],
  180. "PERSONAL_STATE" => $_POST["PERSONAL_STATE"],
  181. "PERSONAL_ZIP" => $_POST["PERSONAL_ZIP"],
  182. "PERSONAL_COUNTRY" => $_POST["PERSONAL_COUNTRY"],
  183. "PERSONAL_NOTES" => $_POST["PERSONAL_NOTES"],
  184. "WORK_COMPANY" => $_POST["WORK_COMPANY"],
  185. "WORK_DEPARTMENT" => $_POST["WORK_DEPARTMENT"],
  186. "WORK_POSITION" => $_POST["WORK_POSITION"],
  187. "WORK_WWW" => $_POST["WORK_WWW"],
  188. "WORK_PHONE" => $_POST["WORK_PHONE"],
  189. "WORK_FAX" => $_POST["WORK_FAX"],
  190. "WORK_PAGER" => $_POST["WORK_PAGER"],
  191. "WORK_STREET" => $_POST["WORK_STREET"],
  192. "WORK_MAILBOX" => $_POST["WORK_MAILBOX"],
  193. "WORK_CITY" => $_POST["WORK_CITY"],
  194. "WORK_STATE" => $_POST["WORK_STATE"],
  195. "WORK_ZIP" => $_POST["WORK_ZIP"],
  196. "WORK_COUNTRY" => $_POST["WORK_COUNTRY"],
  197. "WORK_PROFILE" => $_POST["WORK_PROFILE"],
  198. "WORK_LOGO" => $arWORK_LOGO,
  199. "WORK_NOTES" => $_POST["WORK_NOTES"],
  200. "AUTO_TIME_ZONE" => ($_POST["AUTO_TIME_ZONE"] == "Y" || $_POST["AUTO_TIME_ZONE"] == "N"? $_POST["AUTO_TIME_ZONE"] : ""),
  201. "XML_ID" => $_POST["XML_ID"],
  202. "PHONE_NUMBER" => $_POST["PHONE_NUMBER"],
  203. "PASSWORD_EXPIRED" => $_POST["PASSWORD_EXPIRED"],
  204. );
  205. if(isset($_POST["TIME_ZONE"]))
  206. $arFields["TIME_ZONE"] = $_POST["TIME_ZONE"];
  207. if($USER->CanDoOperation('edit_all_users') || $USER->CanDoOperation('edit_subordinate_users'))
  208. {
  209. if($_POST["LID"] <> '')
  210. $arFields["LID"] = $_POST["LID"];
  211. if(isset($_POST["LANGUAGE_ID"]))
  212. $arFields["LANGUAGE_ID"] = $_POST["LANGUAGE_ID"];
  213. if(isset($_POST['EXTERNAL_AUTH_ID']))
  214. $arFields['EXTERNAL_AUTH_ID'] = $_POST["EXTERNAL_AUTH_ID"];
  215. if ($ID == 1 && $COPY_ID <= 0)
  216. {
  217. $arFields["ACTIVE"] = "Y";
  218. $arFields["BLOCKED"] = "N";
  219. }
  220. else
  221. {
  222. $arFields["ACTIVE"] = $_POST["ACTIVE"];
  223. $arFields["BLOCKED"] = $_POST["BLOCKED"];
  224. }
  225. if($showGroupTabs && isset($_REQUEST["GROUP_ID_NUMBER"]))
  226. {
  227. $GROUP_ID_NUMBER = intval($_REQUEST["GROUP_ID_NUMBER"]);
  228. $GROUP_ID = array();
  229. $ind = -1;
  230. for ($i = 0; $i <= $GROUP_ID_NUMBER; $i++)
  231. {
  232. if (${"GROUP_ID_ACT_".$i} == "Y")
  233. {
  234. $gr_id = intval(${"GROUP_ID_".$i});
  235. if($gr_id == 1 && !$USER->IsAdmin())
  236. continue;
  237. if ($USER->CanDoOperation('edit_subordinate_users') && !$USER->CanDoOperation('edit_all_users') && !in_array($gr_id, $arUserSubordinateGroups))
  238. continue;
  239. $ind++;
  240. $GROUP_ID[$ind]["GROUP_ID"] = $gr_id;
  241. $GROUP_ID[$ind]["DATE_ACTIVE_FROM"] = ${"GROUP_ID_FROM_".$i};
  242. $GROUP_ID[$ind]["DATE_ACTIVE_TO"] = ${"GROUP_ID_TO_".$i};
  243. }
  244. }
  245. if ($ID == "1" && $COPY_ID<=0)
  246. {
  247. $ind++;
  248. $GROUP_ID[$ind]["GROUP_ID"] = 1;
  249. $GROUP_ID[$ind]["DATE_ACTIVE_FROM"] = false;
  250. $GROUP_ID[$ind]["DATE_ACTIVE_TO"] = false;
  251. }
  252. $arFields["GROUP_ID"]=$GROUP_ID;
  253. }
  254. if (($editable && $ID!=$USER->GetID()) || $USER->IsAdmin())
  255. $arFields["ADMIN_NOTES"] = $_POST["ADMIN_NOTES"];
  256. }
  257. if($_POST["NEW_PASSWORD"] <> '')
  258. {
  259. $arFields["PASSWORD"] = $_POST["NEW_PASSWORD"];
  260. $arFields["CONFIRM_PASSWORD"] = $_POST["NEW_PASSWORD_CONFIRM"];
  261. }
  262. $USER_FIELD_MANAGER->EditFormAddFields($PROPERTY_ID, $arFields);
  263. if($ID>0 && $COPY_ID<=0)
  264. {
  265. $res = $user->Update($ID, $arFields, true);
  266. }
  267. elseif($USER->CanDoOperation('edit_all_users') || $USER->CanDoOperation('edit_subordinate_users'))
  268. {
  269. $ID = $user->Add($arFields);
  270. $res = ($ID > 0);
  271. if(COption::GetOptionString("main", "event_log_register", "N") === "Y" && $res)
  272. {
  273. $res_log["user"] = ($_POST["NAME"] != "" || $_POST["LAST_NAME"] != "") ? trim($_POST["NAME"]." ".$_POST["LAST_NAME"]) : $_POST["LOGIN"];
  274. CEventLog::Log("SECURITY", "USER_REGISTER", "main", $ID, serialize($res_log));
  275. }
  276. $new = "Y";
  277. }
  278. if ($USER->CanDoOperation('edit_ratings') && ($selfEdit || $ID!=$USER->GetID()) && is_array($_POST['RATING_BONUS']))
  279. {
  280. foreach ($_POST['RATING_BONUS'] as $ratingId => $ratingBonus)
  281. {
  282. if ($new == "Y" && $ratingBonus == 0)
  283. {
  284. continue;
  285. }
  286. $arParam = array(
  287. 'RATING_ID' => $ratingId,
  288. 'ENTITY_ID' => $ID,
  289. 'BONUS' => $ratingBonus,
  290. );
  291. CRatings::UpdateRatingUserBonus($arParam);
  292. }
  293. }
  294. $strError .= $user->LAST_ERROR;
  295. if ($APPLICATION->GetException())
  296. {
  297. $err = $APPLICATION->GetException();
  298. $strError .= $err->GetString();
  299. $APPLICATION->ResetException();
  300. }
  301. }
  302. if($strError == '' && $ID>0)
  303. {
  304. if(is_array($_REQUEST["profile_module_id"]) && count($_REQUEST["profile_module_id"])>0)
  305. {
  306. $db_opt_res = CModule::GetList();
  307. while ($opt_res = $db_opt_res->Fetch())
  308. {
  309. if (in_array($opt_res["ID"], $_REQUEST["profile_module_id"]))
  310. {
  311. $mdir = $opt_res["ID"];
  312. if (file_exists($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/".$mdir) && is_dir($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/".$mdir))
  313. {
  314. $ofile = $_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/".$mdir."/options_user_settings_set.php";
  315. if (file_exists($ofile))
  316. {
  317. $MODULE_RIGHT = $APPLICATION->GetGroupRight($mdir);
  318. if ($MODULE_RIGHT>="R")
  319. {
  320. include($ofile);
  321. $mname = str_replace(".", "_", $mdir);
  322. if(!${$mname."_res"})
  323. {
  324. $res = false;
  325. if($APPLICATION->GetException())
  326. {
  327. $err = $APPLICATION->GetException();
  328. $strError .= $err->GetString();
  329. $APPLICATION->ResetException();
  330. }
  331. else
  332. {
  333. $strError .= ${$mname."WarningTmp"};
  334. }
  335. }
  336. }
  337. }
  338. }
  339. }
  340. }
  341. }
  342. if($strError == '' && $res)
  343. {
  344. if($_POST["user_info_event"] == "Y")
  345. {
  346. $arMess = false;
  347. $res_site = CSite::GetByID($_POST["LID"]);
  348. if($res_site_arr = $res_site->Fetch())
  349. $arMess = IncludeModuleLangFile(__FILE__, $res_site_arr["LANGUAGE_ID"], true);
  350. if($new == "Y")
  351. {
  352. $text = ($arMess !== false? $arMess["ACCOUNT_INSERT"] : GetMessage("ACCOUNT_INSERT"));
  353. }
  354. else
  355. {
  356. $text = ($arMess !== false? $arMess["ACCOUNT_UPDATE"] : GetMessage("ACCOUNT_UPDATE"));
  357. }
  358. CUser::SendUserInfo($ID, $_POST["LID"], $text, true);
  359. }
  360. if ($adminSidePanelHelper->isAjaxRequest())
  361. {
  362. $adminSidePanelHelper->sendSuccessResponse("base", array("ID" => $ID, "COPY_ID" => "0"));
  363. }
  364. else
  365. {
  366. if($USER->CanDoOperation('edit_all_users') || $USER->CanDoOperation('edit_subordinate_users') || ($USER->CanDoOperation('edit_own_profile') && $ID==$uid))
  367. {
  368. if($_POST["save"] <> '')
  369. LocalRedirect($strRedirect_admin);
  370. elseif($_POST["apply"] <> '')
  371. LocalRedirect($strRedirect."&ID=".$ID."&".$tabControl->ActiveTabParam());
  372. elseif($_POST["save_and_add"] <> '')
  373. LocalRedirect($strRedirect."&ID=0&".$tabControl->ActiveTabParam());
  374. }
  375. elseif($new=="Y")
  376. LocalRedirect($strRedirect."&ID=".$ID."&".$tabControl->ActiveTabParam());
  377. }
  378. }
  379. }
  380. if ($strError)
  381. $adminSidePanelHelper->sendJsonErrorResponse($strError);
  382. }
  383. $str_GROUP_ID = array();
  384. $str_PHONE_NUMBER = "";
  385. $user = CUser::GetByID($ID);
  386. if(!$user->ExtractFields("str_"))
  387. {
  388. $ID = 0;
  389. $str_ACTIVE = "Y";
  390. $str_BLOCKED = "N";
  391. $str_LID = CSite::GetDefSite();
  392. }
  393. else
  394. {
  395. if($phone = \Bitrix\Main\UserPhoneAuthTable::getRowById($ID))
  396. {
  397. $str_PHONE_NUMBER = htmlspecialcharsbx($phone["PHONE_NUMBER"]);
  398. }
  399. $dbUserGroup = CUser::GetUserGroupList($ID);
  400. while ($arUserGroup = $dbUserGroup->Fetch())
  401. {
  402. $str_GROUP_ID[intval($arUserGroup["GROUP_ID"])]["DATE_ACTIVE_FROM"] = $arUserGroup["DATE_ACTIVE_FROM"];
  403. $str_GROUP_ID[intval($arUserGroup["GROUP_ID"])]["DATE_ACTIVE_TO"] = $arUserGroup["DATE_ACTIVE_TO"];
  404. }
  405. }
  406. if($COPY_ID > 0)
  407. {
  408. $str_PERSONAL_PHOTO = "";
  409. $str_WORK_LOGO = "";
  410. }
  411. if($strError <> '' || !$res)
  412. {
  413. $save_PERSONAL_PHOTO = $str_PERSONAL_PHOTO;
  414. $save_WORK_LOGO = $str_WORK_LOGO;
  415. $DB->InitTableVarsForEdit("b_user", "", "str_");
  416. $str_PERSONAL_PHOTO = $save_PERSONAL_PHOTO;
  417. $str_WORK_LOGO = $save_WORK_LOGO;
  418. $str_PHONE_NUMBER = htmlspecialcharsbx($_POST["PHONE_NUMBER"]);
  419. $GROUP_ID_NUMBER = intval($_REQUEST["GROUP_ID_NUMBER"]);
  420. $str_GROUP_ID = array();
  421. for ($i = 0; $i <= $GROUP_ID_NUMBER; $i++)
  422. {
  423. if (${"GROUP_ID_ACT_".$i} == "Y")
  424. {
  425. $str_GROUP_ID[intval(${"GROUP_ID_".$i})]["DATE_ACTIVE_FROM"] = ${"GROUP_ID_FROM_".$i};
  426. $str_GROUP_ID[intval(${"GROUP_ID_".$i})]["DATE_ACTIVE_TO"] = ${"GROUP_ID_TO_".$i};
  427. }
  428. }
  429. }
  430. if($ID>0 && $COPY_ID<=0)
  431. $APPLICATION->SetTitle(GetMessage("EDIT_USER_TITLE", array("#ID#"=>$ID)));
  432. else
  433. $APPLICATION->SetTitle(GetMessage("NEW_USER_TITLE"));
  434. require_once ($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/include/prolog_admin_after.php");
  435. $aMenu = array();
  436. if($canViewUserList)
  437. {
  438. $aMenu[] = array(
  439. "TEXT" => GetMessage("RECORD_LIST"),
  440. "LINK" => "/bitrix/admin/user_admin.php?lang=".LANGUAGE_ID."&set_default=Y",
  441. "ICON" => "btn_list",
  442. "TITLE" => GetMessage("RECORD_LIST_TITLE"),
  443. );
  444. }
  445. if($USER->CanDoOperation('edit_php') && $ID != $USER->GetID())
  446. {
  447. $aMenu[] = array(
  448. "ICON" => "",
  449. "TEXT" => GetMessage("MAIN_ADMIN_AUTH"),
  450. "TITLE" => GetMessage("MAIN_ADMIN_AUTH_TITLE"),
  451. "LINK" => "/bitrix/admin/user_edit.php?lang=".LANGUAGE_ID."&ID=".$ID."&action=authorize&".bitrix_sessid_get()
  452. );
  453. }
  454. if($USER->CanDoOperation('edit_all_users'))
  455. {
  456. $aMenu[] = array(
  457. "ICON" => "",
  458. "TEXT" => GetMessage("MAIN_USER_EDIT_HISTORY"),
  459. "TITLE" => GetMessage("MAIN_USER_EDIT_HISTORY_TITLE"),
  460. "LINK" => "/bitrix/admin/profile_history.php?lang=".LANGUAGE_ID."&find_user_id=".$ID."&set_filter=Y"
  461. );
  462. }
  463. if($USER->CanDoOperation('edit_all_users') || $USER->CanDoOperation('edit_subordinate_users'))
  464. {
  465. if ($ID>0 && $COPY_ID<=0)
  466. {
  467. $aMenu[] = array(
  468. "TEXT" => GetMessage("MAIN_NEW_RECORD"),
  469. "LINK" => "/bitrix/admin/user_edit.php?lang=".LANGUAGE_ID,
  470. "ICON" => "btn_new",
  471. "TITLE" => GetMessage("MAIN_NEW_RECORD_TITLE"),
  472. );
  473. $aMenu[] = array(
  474. "TEXT" => GetMessage("MAIN_COPY_RECORD"),
  475. "LINK" => "/bitrix/admin/user_edit.php?lang=".LANGUAGE_ID.htmlspecialcharsbx("&COPY_ID=").$ID,
  476. "ICON" => "btn_copy",
  477. "TITLE" => GetMessage("MAIN_COPY_RECORD_TITLE"),
  478. );
  479. if ($ID!=1)
  480. {
  481. $aMenu[] = array(
  482. "TEXT" => GetMessage("MAIN_DELETE_RECORD"),
  483. "LINK" => "javascript:if(confirm('".GetMessage("MAIN_DELETE_RECORD_CONF")."')) window.location='/bitrix/admin/user_admin.php?action=delete&ID=".$ID."&lang=".LANGUAGE_ID."&".bitrix_sessid_get()."';",
  484. "ICON" => "btn_delete",
  485. "TITLE" => GetMessage("MAIN_DELETE_RECORD_TITLE"),
  486. );
  487. }
  488. }
  489. }
  490. $context = new CAdminContextMenu($aMenu);
  491. $context->Show();
  492. if ($e = $APPLICATION->GetException())
  493. $message = new CAdminMessage(GetMessage("MAIN_ERROR_SAVING"), $e);
  494. if($message)
  495. echo $message->Show();
  496. if($strError <> '')
  497. {
  498. $e = new CAdminException(array(array('text' => $strError)));
  499. $message = new CAdminMessage(GetMessage("MAIN_ERROR_SAVING"), $e);
  500. echo $message->Show();
  501. //echo CAdminMessage::ShowMessage(Array("MESSAGE"=>$strError, "HTML"=>true, "TYPE"=>"ERROR"));
  502. }
  503. //We have to explicitly call calendar and editor functions because
  504. //first output may be discarded by form settings
  505. $tabControl->BeginPrologContent();
  506. if(method_exists($USER_FIELD_MANAGER, 'showscript'))
  507. echo $USER_FIELD_MANAGER->ShowScript();
  508. CAdminCalendar::ShowScript();
  509. $tabControl->EndPrologContent();
  510. $tabControl->BeginEpilogContent();
  511. ?>
  512. <?=bitrix_sessid_post()?>
  513. <input type="hidden" name="Update" value="Y">
  514. <input type="hidden" name="COPY_ID" value=<?echo $COPY_ID?>>
  515. <?
  516. $tabControl->EndEpilogContent();
  517. $limitUsersCount = $users_cnt = 0;
  518. if($ID <= 0)
  519. {
  520. $users_cnt = CUser::GetActiveUsersCount();
  521. $limitUsersCount = intval(COption::GetOptionInt("main", "PARAM_MAX_USERS", 0));
  522. }
  523. $tabControl->Begin(array(
  524. "FORM_ACTION" => $APPLICATION->GetCurPage()."?ID=".intval($ID)."&lang=".LANG,
  525. "FORM_ATTRIBUTES" => ($ID <= 0 && $limitUsersCount > 0 && $limitUsersCount <= $users_cnt? 'onsubmit="alert(\''.GetMessage("USER_EDIT_WARNING_MAX").'\')"':''),
  526. ));
  527. $tabControl->BeginNextFormTab();
  528. $tabControl->AddViewField("DATE_REGISTER", GetMessage("USER_EDIT_DATE_REGISTER"), ($ID>0 && $COPY_ID<=0? $str_DATE_REGISTER:''));
  529. $tabControl->AddViewField("LAST_UPDATE", GetMessage('LAST_UPDATE'), ($ID>0 && $COPY_ID<=0? $str_TIMESTAMP_X:''));
  530. $tabControl->AddViewField("LAST_LOGIN", GetMessage('LAST_LOGIN'), ($ID>0 && $COPY_ID<=0? $str_LAST_LOGIN:''));
  531. if($ID <> 1 || $COPY_ID > 0):
  532. $tabControl->BeginCustomField("ACTIVE", GetMessage('ACTIVE'));
  533. ?>
  534. <tr>
  535. <td><?echo $tabControl->GetCustomLabelHTML()?></td>
  536. <td>
  537. <?if($canSelfEdit):?>
  538. <input type="checkbox" name="ACTIVE" value="Y"<?if($str_ACTIVE=="Y") echo " checked"?>>
  539. <?else:?>
  540. <input type="checkbox" <?if($str_ACTIVE=="Y") echo " checked"?> disabled>
  541. <input type="hidden" name="ACTIVE" value="<?=$str_ACTIVE;?>">
  542. <?endif;?>
  543. </tr>
  544. <?
  545. $tabControl->EndCustomField("ACTIVE", '<input type="hidden" name="ACTIVE" value="'.$str_ACTIVE.'">');
  546. else:
  547. $tabControl->HideField('ACTIVE');
  548. endif;
  549. $tabControl->BeginCustomField("BLOCKED", GetMessage("main_user_edit_blocked"));
  550. ?>
  551. <tr>
  552. <td><?echo $tabControl->GetCustomLabelHTML()?></td>
  553. <td>
  554. <?if($canSelfEdit):?>
  555. <input type="checkbox" name="BLOCKED" value="Y"<?if($str_BLOCKED == "Y") echo " checked"?>>
  556. <?else:?>
  557. <input type="checkbox" <?if($str_BLOCKED == "Y") echo " checked"?> disabled>
  558. <input type="hidden" name="BLOCKED" value="<?=$str_BLOCKED;?>">
  559. <?endif;?>
  560. </td>
  561. </tr>
  562. <?
  563. $tabControl->EndCustomField("BLOCKED", '<input type="hidden" name="BLOCKED" value="'.$str_BLOCKED.'">');
  564. $emailRequired = (COption::GetOptionString("main", "new_user_email_required", "Y") <> "N");
  565. $phoneRequired = (COption::GetOptionString("main", "new_user_phone_required", "N") == "Y");
  566. $tabControl->AddEditField("TITLE", GetMessage("USER_EDIT_TITLE"), false, array("size"=>30), $str_TITLE);
  567. $tabControl->AddEditField("NAME", GetMessage('NAME'), false, array("size"=>30), $str_NAME);
  568. $tabControl->AddEditField("LAST_NAME", GetMessage('LAST_NAME'), false, array("size"=>30), $str_LAST_NAME);
  569. $tabControl->AddEditField("SECOND_NAME", GetMessage('SECOND_NAME'), false, array("size"=>30), $str_SECOND_NAME);
  570. $tabControl->AddEditField("EMAIL", GetMessage('EMAIL'), $emailRequired, array("size"=>30), $str_EMAIL);
  571. $tabControl->AddEditField("LOGIN", GetMessage('LOGIN'), true, array("size"=>30), $str_LOGIN);
  572. $tabControl->AddEditField("PHONE_NUMBER", GetMessage("main_user_edit_phone_number"), $phoneRequired, array("size"=>30), $str_PHONE_NUMBER);
  573. $tabControl->BeginCustomField("PASSWORD", GetMessage('NEW_PASSWORD_REQ'), true);
  574. $bSecure = false;
  575. if(!CMain::IsHTTPS() && COption::GetOptionString('main', 'use_encrypted_auth', 'N') == 'Y')
  576. {
  577. $sec = new CRsaSecurity();
  578. if(($arKeys = $sec->LoadKeys()))
  579. {
  580. $sec->SetKeys($arKeys);
  581. $sec->AddToForm('user_edit_form', array('NEW_PASSWORD', 'NEW_PASSWORD_CONFIRM'));
  582. $bSecure = true;
  583. }
  584. }
  585. ?>
  586. <tr id="bx_pass_row" style="display:<?=($str_EXTERNAL_AUTH_ID <> ''? 'none':'')?>;"<?if($ID<=0 || $COPY_ID>0):?> class="adm-detail-required-field"<?endif?>>
  587. <td><?echo GetMessage('NEW_PASSWORD_REQ')?>:<sup><span class="required">1</span></sup></td>
  588. <td><input type="password" name="NEW_PASSWORD" size="30" maxlength="255" value="<? echo htmlspecialcharsbx($NEW_PASSWORD) ?>" autocomplete="new-password" style="vertical-align:middle;">
  589. <?if($bSecure):?>
  590. <span class="bx-auth-secure" id="bx_auth_secure" title="<?echo GetMessage("AUTH_SECURE_NOTE")?>" style="display:none">
  591. <div class="bx-auth-secure-icon"></div>
  592. </span>
  593. <noscript>
  594. <span class="bx-auth-secure" title="<?echo GetMessage("AUTH_NONSECURE_NOTE")?>">
  595. <div class="bx-auth-secure-icon bx-auth-secure-unlock"></div>
  596. </span>
  597. </noscript>
  598. <script type="text/javascript">
  599. document.getElementById('bx_auth_secure').style.display = 'inline-block';
  600. </script>
  601. <?endif?>
  602. </td>
  603. </tr>
  604. <tr id="bx_pass_confirm_row" style="display:<?=($str_EXTERNAL_AUTH_ID <> ''? 'none':'')?>;"<?if($ID<=0 || $COPY_ID>0):?> class="adm-detail-required-field"<?endif?>>
  605. <td><?echo GetMessage('NEW_PASSWORD_CONFIRM')?></td>
  606. <td><input type="password" name="NEW_PASSWORD_CONFIRM" size="30" maxlength="255" value="<? echo htmlspecialcharsbx($NEW_PASSWORD_CONFIRM) ?>" autocomplete="new-password"></td>
  607. </tr>
  608. <?
  609. $tabControl->EndCustomField("PASSWORD");
  610. $tabControl->AddCheckBoxField("PASSWORD_EXPIRED", GetMessage("main_user_edit_pass_expired"), false, array("Y","N"), ($str_PASSWORD_EXPIRED == "Y"));
  611. ?>
  612. <?if($USER->CanDoOperation('view_all_users')):?>
  613. <?
  614. $arAuthList = array();
  615. $rExtAuth = CUser::GetExternalAuthList();
  616. while($arExtAuth = $rExtAuth->GetNext())
  617. $arAuthList[$arExtAuth['ID']] = $arExtAuth;
  618. if($str_EXTERNAL_AUTH_ID <> '' && !array_key_exists($str_EXTERNAL_AUTH_ID, $arAuthList))
  619. $arAuthList[$str_EXTERNAL_AUTH_ID] = array('ID'=>$str_EXTERNAL_AUTH_ID, 'NAME'=>$str_EXTERNAL_AUTH_ID);
  620. if(!empty($arAuthList)):
  621. $tabControl->BeginCustomField("EXTERNAL_AUTH_ID", GetMessage('MAIN_USERED_AUTH_TYPE'));
  622. ?>
  623. <tr>
  624. <td><?echo $tabControl->GetCustomLabelHTML()?></td>
  625. <td>
  626. <script type="text/javascript">
  627. function BXAuthSwitch(val)
  628. {
  629. BX('bx_user_info_event').disabled = (val != '');
  630. BX('bx_pass_row').style.display = BX('bx_pass_confirm_row').style.display = (val == ''? '':'none');
  631. }
  632. </script>
  633. <select id="bx_EXTERNAL_AUTH_ID" name="EXTERNAL_AUTH_ID"<?if(!$canSelfEdit) echo " disabled"?> onchange="BXAuthSwitch(this.value)">
  634. <option value=""><?echo GetMessage("MAIN_USERED_AUTH_INT")?></option>
  635. <?foreach($arAuthList as $arExtAuth):?>
  636. <option value="<?=$arExtAuth['ID']?>"<?if($str_EXTERNAL_AUTH_ID == $arExtAuth['ID']) echo ' selected';?>><?=$arExtAuth['NAME']?></option>
  637. <?endforeach;?>
  638. </select>
  639. </td>
  640. </tr>
  641. <?
  642. $tabControl->EndCustomField("EXTERNAL_AUTH_ID", '<input type="hidden" name="EXTERNAL_AUTH_ID" value="'.$str_EXTERNAL_AUTH_ID.'">');
  643. endif;
  644. endif;
  645. $tabControl->AddEditField("XML_ID", GetMessage("MAIN_USER_EDIT_EXT"), false, array("size"=>30, "maxlength"=>255), $str_XML_ID);
  646. ?>
  647. <?
  648. if($USER->CanDoOperation('view_subordinate_users') || $USER->CanDoOperation('view_all_users') || $USER->CanDoOperation('edit_all_users') || $USER->CanDoOperation('edit_subordinate_users')):
  649. $tabControl->BeginCustomField("LID", GetMessage("MAIN_DEFAULT_SITE"));
  650. ?>
  651. <tr>
  652. <td><?echo $tabControl->GetCustomLabelHTML()?></td>
  653. <?if(!$canSelfEdit) $dis = " disabled"?>
  654. <td><?=CSite::SelectBox("LID", $str_LID, "", "", "style=\"width:220px\"".$dis);?></td>
  655. </tr>
  656. <?
  657. $tabControl->EndCustomField("LID", '<input type="hidden" name="LID" value="'.$str_LID.'">');
  658. $langOptions = array("" => GetMessage("user_edit_lang_not_set"));
  659. $languages = \Bitrix\Main\Localization\LanguageTable::getList(array("filter" => array("ACTIVE" => "Y"), "order" => array("SORT" => "ASC", "NAME" => "ASC")));
  660. while($language = $languages->fetch())
  661. {
  662. $langOptions[$language["LID"]] = \Bitrix\Main\Text\HtmlFilter::encode($language["NAME"]);
  663. }
  664. $tabControl->AddDropDownField("LANGUAGE_ID", GetMessage("user_edit_lang"), false, $langOptions, $str_LANGUAGE_ID);
  665. $params = array('id="bx_user_info_event"');
  666. if(!$canSelfEdit || $str_EXTERNAL_AUTH_ID <> '')
  667. {
  668. $params[] = "disabled";
  669. }
  670. $tabControl->AddCheckBoxField("user_info_event", GetMessage('INFO_FOR_USER'), false, "Y", ($_REQUEST["user_info_event"]=="Y"), $params);
  671. endif;
  672. if(CTimeZone::Enabled())
  673. {
  674. $tabControl->AddSection("USER_TIME_ZONE", GetMessage("user_edit_time_zones"));
  675. $tabControl->AddDropDownField("AUTO_TIME_ZONE", GetMessage("user_edit_time_zones_auto"), false, array(""=>GetMessage("user_edit_time_zones_auto_def"), "Y"=>GetMessage("user_edit_time_zones_auto_yes"), "N"=>GetMessage("user_edit_time_zones_auto_no")), $str_AUTO_TIME_ZONE, array('onchange="this.form.TIME_ZONE.disabled=(this.value != \'N\')"'));
  676. $tabControl->AddDropDownField("TIME_ZONE", GetMessage("user_edit_time_zones_zones"), false, CTimeZone::GetZones(), $str_TIME_ZONE, ($str_AUTO_TIME_ZONE<>"N"? array('disabled') : array()));
  677. }
  678. ?>
  679. <?
  680. if($showGroupTabs):
  681. $tabControl->BeginNextFormTab();
  682. $tabControl->BeginCustomField("GROUP_ID", GetMessage("user_edit_form_groups"));
  683. ?>
  684. <tr>
  685. <td colspan="2" align="center">
  686. <table border="0" cellpadding="0" cellspacing="0" class="internal" style="width:80%;">
  687. <tr class="heading">
  688. <td colspan="2"><?echo GetMessage("TBL_GROUP")?></td>
  689. <td><?=GetMessage('TBL_GROUP_DATE')?></td>
  690. </tr>
  691. <?
  692. $ind = -1;
  693. $dbGroups = CGroup::GetList("c_sort", "asc", array("ANONYMOUS" => "N"));
  694. while ($arGroups = $dbGroups->Fetch())
  695. {
  696. $arGroups["ID"] = intval($arGroups["ID"]);
  697. if (!$USER->CanDoOperation('edit_all_users') && $USER->CanDoOperation('edit_subordinate_users') && !in_array($arGroups["ID"], $arUserSubordinateGroups) || $arGroups["ID"] == 2)
  698. continue;
  699. if($arGroups["ID"]==1 && !$USER->IsAdmin())
  700. continue;
  701. $ind++;
  702. ?>
  703. <tr>
  704. <td>
  705. <input type="hidden" name="GROUP_ID_<?=$ind?>" value="<?=$arGroups["ID"]?>" /><input type="checkbox" name="GROUP_ID_ACT_<?=$ind?>" id="GROUP_ID_ACT_ID_<?=$ind?>" value="Y"<?
  706. if (array_key_exists($arGroups["ID"], $str_GROUP_ID))
  707. echo " checked=\"checked\"";
  708. ?> />
  709. </td>
  710. <td class="align-left">
  711. <label for="GROUP_ID_ACT_ID_<?= $ind ?>"><?=htmlspecialcharsbx($arGroups["NAME"])?> [<a href="/bitrix/admin/group_edit.php?ID=<?=$arGroups["ID"]?>&lang=<?=LANGUAGE_ID?>" title="<?=GetMessage("MAIN_VIEW_GROUP")?>"><?echo intval($arGroups["ID"])?></a>]</label>
  712. </td>
  713. <td>
  714. <?= CalendarDate("GROUP_ID_FROM_".$ind, (array_key_exists($arGroups["ID"], $str_GROUP_ID) ? htmlspecialcharsbx($str_GROUP_ID[$arGroups["ID"]]["DATE_ACTIVE_FROM"]) : ""), $tabControl->GetFormName(), "22")?>
  715. <?= CalendarDate("GROUP_ID_TO_".$ind, (array_key_exists($arGroups["ID"], $str_GROUP_ID) ? htmlspecialcharsbx($str_GROUP_ID[$arGroups["ID"]]["DATE_ACTIVE_TO"]) : ""), $tabControl->GetFormName(), "22")?>
  716. </td>
  717. </tr>
  718. <?
  719. }
  720. ?>
  721. </table><input type="hidden" name="GROUP_ID_NUMBER" value="<?= $ind ?>"></td>
  722. </tr>
  723. <?
  724. $tabControl->EndCustomField("GROUP_ID");
  725. $tabControl->BeginNextFormTab();
  726. $tabControl->BeginCustomField("GROUP_POLICY", GetMessage("main_user_edit_policy_field"));
  727. foreach (CUser::getPolicy($ID) as $rule):
  728. ?>
  729. <tr>
  730. <td width="50%">
  731. <?= htmlspecialcharsbx($rule->getTitle()) ?><?php if ($rule->getGroupId() > 0): ?>
  732. [<a href="group_edit.php?ID=<?= (int)$rule->getGroupId() ?>&amp;lang=<?= LANGUAGE_ID ?>" title="<?= GetMessage("MAIN_VIEW_GROUP")?> "><?= (int)$rule->getGroupId()?></a>]<?php endif ?>:</td>
  733. <td><b>
  734. <?php
  735. if ($rule instanceof Policy\BooleanRule)
  736. {
  737. echo ($rule->getValue() ? GetMessage("main_user_edit_policy_yes") : GetMessage("main_user_edit_policy_no"));
  738. }
  739. else
  740. {
  741. echo htmlspecialcharsbx($rule->getValue());
  742. }
  743. ?></b>
  744. </td>
  745. </tr>
  746. <?php
  747. endforeach;
  748. $tabControl->EndCustomField("GROUP_POLICY");
  749. endif;
  750. ?>
  751. <?
  752. $tabControl->BeginNextFormTab();
  753. $tabControl->AddEditField("PERSONAL_PROFESSION", GetMessage('USER_PROFESSION'), false, array("size"=>30, "maxlength"=>255), $str_PERSONAL_PROFESSION);
  754. $tabControl->AddEditField("PERSONAL_WWW", GetMessage('USER_WWW'), false, array("size"=>30, "maxlength"=>255), $str_PERSONAL_WWW);
  755. $tabControl->AddEditField("PERSONAL_ICQ", GetMessage('USER_ICQ'), false, array("size"=>30, "maxlength"=>255), $str_PERSONAL_ICQ);
  756. $tabControl->AddDropDownField("PERSONAL_GENDER", GetMessage('USER_GENDER'), false, array(""=>GetMessage("USER_DONT_KNOW"), "M"=>GetMessage("USER_MALE"), "F"=>GetMessage("USER_FEMALE")), $str_PERSONAL_GENDER);
  757. $tabControl->AddCalendarField("PERSONAL_BIRTHDAY", GetMessage("USER_BIRTHDAY_DT").":", $str_PERSONAL_BIRTHDAY);
  758. $tabControl->AddFileField("PERSONAL_PHOTO", GetMessage("USER_PHOTO"), $str_PERSONAL_PHOTO, array("iMaxW"=>150, "iMaxH"=>150));
  759. $tabControl->AddSection("USER_PHONES", GetMessage("USER_PHONES"));
  760. $tabControl->AddEditField("PERSONAL_PHONE", GetMessage('USER_PHONE'), false, array("size"=>30, "maxlength"=>255), $str_PERSONAL_PHONE);
  761. $tabControl->AddEditField("PERSONAL_FAX", GetMessage('USER_FAX'), false, array("size"=>30, "maxlength"=>255), $str_PERSONAL_FAX);
  762. $tabControl->AddEditField("PERSONAL_MOBILE", GetMessage('USER_MOBILE'), false, array("size"=>30, "maxlength"=>255), $str_PERSONAL_MOBILE);
  763. $tabControl->AddEditField("PERSONAL_PAGER", GetMessage('USER_PAGER'), false, array("size"=>30, "maxlength"=>255), $str_PERSONAL_PAGER);
  764. $tabControl->AddSection("USER_POST_ADDRESS", GetMessage("USER_POST_ADDRESS"));
  765. $tabControl->BeginCustomField("PERSONAL_COUNTRY", GetMessage('USER_COUNTRY'));
  766. ?>
  767. <tr>
  768. <td><?echo $tabControl->GetCustomLabelHTML()?></td>
  769. <td><?echo SelectBoxFromArray("PERSONAL_COUNTRY", GetCountryArray(), $str_PERSONAL_COUNTRY, GetMessage("USER_DONT_KNOW"));?></td>
  770. </tr>
  771. <?
  772. $tabControl->EndCustomField("PERSONAL_COUNTRY", '<input type="hidden" name="PERSONAL_COUNTRY" value="'.$str_PERSONAL_COUNTRY.'">');
  773. $tabControl->AddEditField("PERSONAL_STATE", GetMessage('USER_STATE'), false, array("size"=>30, "maxlength"=>255), $str_PERSONAL_STATE);
  774. $tabControl->AddEditField("PERSONAL_CITY", GetMessage('USER_CITY'), false, array("size"=>30, "maxlength"=>255), $str_PERSONAL_CITY);
  775. $tabControl->AddEditField("PERSONAL_ZIP", GetMessage('USER_ZIP'), false, array("size"=>30, "maxlength"=>255), $str_PERSONAL_ZIP);
  776. $tabControl->AddTextField("PERSONAL_STREET", GetMessage("USER_STREET"), $str_PERSONAL_STREET, array("cols"=>40, "rows"=>3));
  777. $tabControl->AddEditField("PERSONAL_MAILBOX", GetMessage('USER_MAILBOX'), false, array("size"=>30, "maxlength"=>255), $str_PERSONAL_MAILBOX);
  778. $tabControl->AddTextField("PERSONAL_NOTES", GetMessage("USER_NOTES"), $str_PERSONAL_NOTES, array("cols"=>40, "rows"=>5));
  779. $tabControl->BeginNextFormTab();
  780. $tabControl->AddEditField("WORK_COMPANY", GetMessage('USER_COMPANY'), false, array("size"=>30, "maxlength"=>255), $str_WORK_COMPANY);
  781. $tabControl->AddEditField("WORK_WWW", GetMessage('USER_WWW'), false, array("size"=>30, "maxlength"=>255), $str_WORK_WWW);
  782. $tabControl->AddEditField("WORK_DEPARTMENT", GetMessage('USER_DEPARTMENT'), false, array("size"=>30, "maxlength"=>255), $str_WORK_DEPARTMENT);
  783. $tabControl->AddEditField("WORK_POSITION", GetMessage('USER_POSITION'), false, array("size"=>30, "maxlength"=>255), $str_WORK_POSITION);
  784. $tabControl->AddTextField("WORK_PROFILE", GetMessage("USER_WORK_PROFILE"), $str_WORK_PROFILE, array("cols"=>40, "rows"=>5));
  785. $tabControl->AddFileField("WORK_LOGO", GetMessage("USER_LOGO"), $str_WORK_LOGO, array("iMaxW"=>150, "iMaxH"=>150));
  786. $tabControl->AddSection("USER_WORK_PHONES", GetMessage("USER_PHONES"));
  787. $tabControl->AddEditField("WORK_PHONE", GetMessage('USER_PHONE'), false, array("size"=>30, "maxlength"=>255), $str_WORK_PHONE);
  788. $tabControl->AddEditField("WORK_FAX", GetMessage('USER_FAX'), false, array("size"=>30, "maxlength"=>255), $str_WORK_FAX);
  789. $tabControl->AddEditField("WORK_PAGER", GetMessage('USER_PAGER'), false, array("size"=>30, "maxlength"=>255), $str_WORK_PAGER);
  790. $tabControl->AddSection("USER_WORK_POST_ADDRESS", GetMessage("USER_POST_ADDRESS"));
  791. $tabControl->BeginCustomField("WORK_COUNTRY", GetMessage('USER_COUNTRY'));
  792. ?>
  793. <tr>
  794. <td><?echo $tabControl->GetCustomLabelHTML()?></td>
  795. <td><?echo SelectBoxFromArray("WORK_COUNTRY", GetCountryArray(), $str_WORK_COUNTRY, GetMessage("USER_DONT_KNOW"));?></td>
  796. </tr>
  797. <?
  798. $tabControl->EndCustomField("WORK_COUNTRY", '<input type="hidden" name="WORK_COUNTRY" value="'.$str_WORK_COUNTRY.'">');
  799. $tabControl->AddEditField("WORK_STATE", GetMessage('USER_STATE'), false, array("size"=>30, "maxlength"=>255), $str_WORK_STATE);
  800. $tabControl->AddEditField("WORK_CITY", GetMessage('USER_CITY'), false, array("size"=>30, "maxlength"=>255), $str_WORK_CITY);
  801. $tabControl->AddEditField("WORK_ZIP", GetMessage('USER_ZIP'), false, array("size"=>30, "maxlength"=>255), $str_WORK_ZIP);
  802. $tabControl->AddTextField("WORK_STREET", GetMessage("USER_STREET"), $str_WORK_STREET, array("cols"=>40, "rows"=>3));
  803. $tabControl->AddEditField("WORK_MAILBOX", GetMessage('USER_MAILBOX'), false, array("size"=>30, "maxlength"=>255), $str_WORK_MAILBOX);
  804. $tabControl->AddTextField("WORK_NOTES", GetMessage("USER_NOTES"), $str_WORK_NOTES, array("cols"=>40, "rows"=>5));
  805. $tabControl->BeginNextFormTab();
  806. $tabControl->BeginCustomField("RATING_BOX", GetMessage("USER_RATING_INFO"), false);
  807. ?>
  808. <tr>
  809. <td width="100%" colspan="100%">
  810. <?
  811. $i = 1;
  812. $aTabs2 = array();
  813. $arRatings = array();
  814. $rsRatings = CRatings::GetList(array('ID' => 'ASC'), array('ACTIVE' => 'Y', 'ENTITY_ID' => 'USER'));
  815. while ($arRatingsTmp = $rsRatings->GetNext())
  816. {
  817. if ($arRatingsTmp['AUTHORITY'] == 'Y')
  818. $arRatingsTmp['NAME'] = '<span class="required">[A]</span> '.$arRatingsTmp['NAME'];
  819. $aTabs2[] = array("DIV"=>"rating_".$i, "TAB" => $arRatingsTmp['NAME'], "TITLE" => GetMessage('RATING_TAB_INFO'));
  820. $arRatings[$arRatingsTmp['ID']] = $arRatingsTmp;
  821. $i++;
  822. }
  823. if (is_array($arRatings) && !empty($arRatings))
  824. {
  825. $ratingWeightType = COption::GetOptionString("main", "rating_weight_type", "auto");
  826. $authorityRatingId = CRatings::GetAuthorityRating();
  827. $arAuthorityUserProp = CRatings::GetRatingUserPropEx($authorityRatingId, $ID);
  828. $viewTabControl = new CAdminViewTabControl("tabControlRating", $aTabs2);
  829. $viewTabControl->Begin();
  830. foreach($arRatings as $ratingId => $arRating)
  831. {
  832. $arRatingResult = CRatings::GetRatingResult($ratingId, $ID);
  833. $arRatingUserProp = CRatings::GetRatingUserPropEx($ratingId, $ID);
  834. $viewTabControl->BeginNextTab();
  835. ?>
  836. <table cellspacing="7" cellpadding="0" border="0" width="100%" class="edit-table">
  837. <? if ($USER->CanDoOperation('edit_ratings') && ($selfEdit || $ID!=$uid)): ?>
  838. <tr>
  839. <td class="field-name" width="40%"><?=GetMessage('RATING_BONUS')?>:<sup><span class="required">2</span></sup></td>
  840. <td><?=InputType('text', "RATING_BONUS[$ratingId]", floatval($arRatingUserProp['BONUS']), false, false, '', 'size="5" maxlength="11"')?> <?=($ratingWeightType == 'auto'? 'x '.GetMessage('RATING_NORM_VOTE_WEIGHT'): '')?></td>
  841. </tr>
  842. <? endif; ?>
  843. <tr>
  844. <td class="field-name" width="40%"><?=GetMessage('RATING_POSITION')?>:</td>
  845. <td>
  846. <?$APPLICATION->IncludeComponent(
  847. "bitrix:rating.result", "",
  848. array(
  849. "RESULT_TYPE" => 'POSITION',
  850. "SHOW_RATING_NAME" => 'N',
  851. "RATING_ID" => $arRatingResult['RATING_ID'],
  852. "ENTITY_ID" => $arRatingResult['ENTITY_ID'],
  853. "CURRENT_POSITION" => $arRatingResult['CURRENT_POSITION'],
  854. "PREVIOUS_POSITION" => $arRatingResult['PREVIOUS_POSITION'],
  855. ),
  856. null,
  857. array("HIDE_ICONS" => "Y")
  858. );?>
  859. </td>
  860. </tr>
  861. <tr>
  862. <td class="field-name" width="40%"><?=GetMessage('RATING_CURRENT_VALUE')?>:</td>
  863. <td><?=floatval($arRatingResult['CURRENT_VALUE']);?></td>
  864. </tr>
  865. <tr>
  866. <td class="field-name" width="40%"><?=GetMessage('RATING_PREVIOUS_VALUE')?>:</td>
  867. <td><?=floatval($arRatingResult['PREVIOUS_VALUE']);?></td>
  868. </tr>
  869. <?
  870. if ($arRating['AUTHORITY'] == 'Y')
  871. {
  872. if ($ratingWeightType == 'auto')
  873. {
  874. $voteWeight = COption::GetOptionString("main", "rating_vote_weight", 1);
  875. $voteWeightUser = $voteWeight>0? round(floatval($arAuthorityUserProp['VOTE_WEIGHT']/$voteWeight), 4): 0;
  876. $communitySize = COption::GetOptionString("main", "rating_community_size", 1);
  877. $communityAuthority = COption::GetOptionString("main", "rating_community_authority", 1);
  878. $normVoteCount = $voteWeight>0?floor(floatval($arRatingResult['CURRENT_VALUE'])/$voteWeight): 0;
  879. $sRatingAuthorityWeight = COption::GetOptionString("main", "rating_authority_weight_formula", 'Y');
  880. if ($sRatingAuthorityWeight == 'Y')
  881. $voteWeightAuthority = $communityAuthority > 0? round($communitySize*$voteWeightUser/$communityAuthority,4): 0;
  882. else
  883. $voteWeightAuthority = 1;
  884. ?>
  885. <tr>
  886. <td class="field-name" width="40%"><?=GetMessage('RATING_VOTE_NORM_VOTE')?>:</td>
  887. <td><?=$normVoteCount?></td>
  888. </tr>
  889. <?
  890. }
  891. else
  892. {
  893. $voteWeightAuthority = round(floatval($arAuthorityUserProp['VOTE_WEIGHT']), 4);
  894. }
  895. ?>
  896. <tr>
  897. <td class="field-name" width="40%"><?=GetMessage('RATING_VOTE_WEIGHT')?>:</td>
  898. <td><?=round(floatval($arAuthorityUserProp['VOTE_WEIGHT']), 4)?></td>
  899. </tr>
  900. <tr>
  901. <td class="field-name" width="40%"><?=GetMessage('RATING_VOTE_WEIGHT_AUTHORITY')?>:</td>
  902. <td><?=$voteWeightAuthority?></td>
  903. </tr>
  904. <tr>
  905. <td class="field-name" width="40%"><?=GetMessage('RATING_VOTE_AUTHORITY_COUNT')?>:</td>
  906. <td><?=floatval($arRatingUserProp['VOTE_COUNT']);?></td>
  907. </tr>
  908. <?
  909. }
  910. ?>
  911. </table>
  912. <?
  913. }
  914. $viewTabControl->End();
  915. }
  916. else
  917. echo GetMessage('RATING_NOT_AVAILABLE');
  918. ?>
  919. </td>
  920. </tr>
  921. <?
  922. $tabControl->EndCustomField("RATING_BOX");
  923. $db_opt_res = CModule::GetList();
  924. while ($opt_res = $db_opt_res->Fetch())
  925. {
  926. $mdir = $opt_res["ID"];
  927. if (file_exists($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/".$mdir) && is_dir($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/".$mdir))
  928. {
  929. $ofile = $_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/".$mdir."/options_user_settings.php";
  930. if (file_exists($ofile))
  931. {
  932. $mname = str_replace(".", "_", $mdir);
  933. $tabControl->BeginNextFormTab();
  934. $tabControl->BeginCustomField("MODULE_TAB_".$mname, GetMessage($mname."_TAB"));
  935. include($ofile);
  936. $tabControl->EndCustomField("MODULE_TAB_".$mname);
  937. }
  938. }
  939. }
  940. if (($editable && $ID!=$USER->GetID()) || $USER->IsAdmin()):
  941. $tabControl->BeginNextFormTab();
  942. $tabControl->BeginCustomField("ADMIN_NOTES", GetMessage("USER_ADMIN_NOTES"));
  943. ?>
  944. <tr>
  945. <td align="center" colspan="2"><textarea name="ADMIN_NOTES" cols="50" rows="10" style="width:100%;"><?echo $str_ADMIN_NOTES?></textarea></td>
  946. </tr>
  947. <?
  948. $tabControl->EndCustomField("ADMIN_NOTES", '<input type="hidden" name="ADMIN_NOTES" value="'.$str_ADMIN_NOTES.'">');
  949. endif;
  950. //Add user fields tab only when there is fields defined or user has rights for adding new field
  951. if(
  952. (count($USER_FIELD_MANAGER->GetUserFields($PROPERTY_ID)) > 0) ||
  953. ($USER_FIELD_MANAGER->GetRights($PROPERTY_ID) >= "W")
  954. )
  955. {
  956. $tabControl->BeginNextFormTab();
  957. $tabControl->ShowUserFields($PROPERTY_ID, $ID, ($strError <> '' || !$res));
  958. }
  959. if($canViewUserList)
  960. {
  961. $tabControl->Buttons(array(
  962. "disabled" => !$editable,
  963. "btnSaveAndAdd" => true,
  964. "back_url" => "user_admin.php?lang=".LANGUAGE_ID,
  965. ));
  966. }
  967. else
  968. {
  969. $tabControl->Buttons(array(
  970. "disabled" => !$editable,
  971. "btnSave" => false,
  972. "btnCancel" => false,
  973. "btnSaveAndAdd" => true,
  974. ));
  975. }
  976. $tabControl->Show();
  977. $tabControl->ShowWarnings($tabControl->GetName(), $message);
  978. ?>
  979. <?if(!defined('BX_PUBLIC_MODE') || BX_PUBLIC_MODE != 1):?>
  980. <?echo BeginNote();?>
  981. <span class="required">1</span> <?echo GetMessage("RATING_BONUS_NOTICE")?><br>
  982. <?echo EndNote();?>
  983. <?endif;?>
  984. <?
  985. require_once ($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/include/epilog_admin.php");