PageRenderTime 53ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/bitrix/modules/learning/admin_tools_user_selector.php

https://gitlab.com/neuser/bitrix-core
PHP | 315 lines | 284 code | 30 blank | 1 comment | 54 complexity | b8757bcda4324c65d23728fd00cbd3a6 MD5 | raw file
  1. <?
  2. IncludeModuleLangFile(__FILE__);
  3. function _ShowUserPropertyField($name, $property_fields, $values, $bInitDef = false, $bVarsFromForm = false, $max_file_size_show=50000, $form_name = "form_element", $bCopy = false)
  4. {
  5. global $bCopy;
  6. $start = 0;
  7. if(!is_array($property_fields["~VALUE"]))
  8. $values = array();
  9. else
  10. $values = $property_fields["~VALUE"];
  11. unset($property_fields["VALUE"]);
  12. unset($property_fields["~VALUE"]);
  13. $html = '<table cellpadding="0" cellspacing="0" border="0" class="nopadding" width="100%" id="tb'.md5($name).'">';
  14. $arUserType = array(
  15. 'PROPERTY_TYPE' => 'S',
  16. 'USER_TYPE' => 'UserID',
  17. 'DESCRIPTION' => '',
  18. 'GetPropertyFieldHtml' => array(
  19. 'Learning_CIBlockPropertyUserID',
  20. 'GetPropertyFieldHtml'
  21. )
  22. );
  23. if(($arUserType["PROPERTY_TYPE"] !== "F") || (!$bCopy))
  24. {
  25. foreach($values as $key=>$val)
  26. {
  27. if($bCopy)
  28. {
  29. $key = "n".$start;
  30. $start++;
  31. }
  32. if(!is_array($val) || !array_key_exists("VALUE",$val))
  33. $val = array("VALUE"=>$val, "DESCRIPTION"=>"");
  34. $html .= '<tr><td>';
  35. if(array_key_exists("GetPropertyFieldHtml", $arUserType))
  36. $html .= call_user_func_array($arUserType["GetPropertyFieldHtml"],
  37. array(
  38. $property_fields,
  39. $val,
  40. array(
  41. "VALUE"=>'PROP['.$property_fields["ID"].']['.$key.'][VALUE]',
  42. "DESCRIPTION"=>'PROP['.$property_fields["ID"].']['.$key.'][DESCRIPTION]',
  43. "FORM_NAME"=>$form_name,
  44. "MODE"=>"FORM_FILL",
  45. "COPY"=>$bCopy,
  46. ),
  47. ));
  48. else
  49. $html .= '&nbsp;';
  50. $html .= '</td></tr>';
  51. if(mb_substr($key, -1, 1) == 'n' && $max_val < intval(mb_substr($key, 1)))
  52. $max_val = intval(mb_substr($key, 1));
  53. if($property_fields["MULTIPLE"] != "Y")
  54. {
  55. $bVarsFromForm = true;
  56. break;
  57. }
  58. }
  59. }
  60. if(!$bVarsFromForm && !$bMultiple)
  61. {
  62. $bDefaultValue = is_array($property_fields["DEFAULT_VALUE"]) || mb_strlen($property_fields["DEFAULT_VALUE"]);
  63. if($property_fields["MULTIPLE"]=="Y")
  64. {
  65. $cnt = intval($property_fields["MULTIPLE_CNT"]);
  66. if($cnt <= 0 || $cnt > 30)
  67. $cnt = 5;
  68. if($bInitDef && $bDefaultValue)
  69. $cnt++;
  70. }
  71. else
  72. {
  73. $cnt = 1;
  74. }
  75. for($i=$max_val+1; $i<$max_val+1+$cnt; $i++)
  76. {
  77. if($i==0 && $bInitDef && $bDefaultValue)
  78. $val = array(
  79. "VALUE"=>$property_fields["DEFAULT_VALUE"],
  80. "DESCRIPTION"=>"",
  81. );
  82. else
  83. $val = array(
  84. "VALUE"=>"",
  85. "DESCRIPTION"=>"",
  86. );
  87. $key = "n".($start + $i);
  88. $html .= '<tr><td>';
  89. if(array_key_exists("GetPropertyFieldHtml", $arUserType))
  90. $html .= call_user_func_array($arUserType["GetPropertyFieldHtml"],
  91. array(
  92. $property_fields,
  93. $val,
  94. array(
  95. "VALUE"=>'PROP['.$property_fields["ID"].']['.$key.'][VALUE]',
  96. "DESCRIPTION"=>'PROP['.$property_fields["ID"].']['.$key.'][DESCRIPTION]',
  97. "FORM_NAME"=>$form_name,
  98. "MODE"=>"FORM_FILL",
  99. "COPY"=>$bCopy,
  100. ),
  101. ));
  102. else
  103. $html .= '&nbsp;';
  104. $html .= '</td></tr>';
  105. }
  106. $max_val += $cnt;
  107. }
  108. if($property_fields["MULTIPLE"]=="Y" && $arUserType["USER_TYPE"] !== "HTML" && !$bMultiple)
  109. {
  110. $html .= '<tr><td><input type="button" value="'.GetMessage("LEARNING_USER_SELECTOR_ADD").'" onClick="learningJs.addNewRow(\'tb'.md5($name).'\')"></td></tr>';
  111. }
  112. $html .= '</table>';
  113. echo $html;
  114. }
  115. function _ShowHiddenValue($name, $value)
  116. {
  117. $res = "";
  118. if(is_array($value))
  119. {
  120. foreach($value as $k => $v)
  121. $res .= _ShowHiddenValue($name.'['.htmlspecialcharsbx($k).']', $v);
  122. }
  123. else
  124. {
  125. $res .= '<input type="hidden" name="'.$name.'" value="'.htmlspecialcharsbx($value).'">'."\n";
  126. }
  127. return $res;
  128. }
  129. class Learning_CIBlockPropertyUserID
  130. {
  131. public static function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
  132. {
  133. global $USER;
  134. $default_value = intval($value["VALUE"]);
  135. $res = "";
  136. if ($default_value == $USER->GetID())
  137. {
  138. $select = "CU";
  139. $res = "[<a title='".GetMessage("LEARNING_USER_SELECTOR_USER_PROFILE")."' href='/bitrix/admin/user_edit.php?ID=".$USER->GetID()."&lang=".LANG."'>".$USER->GetID()."</a>] (".htmlspecialcharsbx($USER->GetLogin()).") ".htmlspecialcharsbx($USER->GetFirstName())." ".htmlspecialcharsbx($USER->GetLastName());
  140. }
  141. elseif ($default_value > 0)
  142. {
  143. $select = "SU";
  144. $rsUsers = CUser::GetList('', '', array("ID" => $default_value));
  145. if ($arUser = $rsUsers->Fetch())
  146. $res = "[<a title='".GetMessage("LEARNING_USER_SELECTOR_USER_PROFILE")."' href='/bitrix/admin/user_edit.php?ID=".$arUser["ID"]."&lang=".LANG."'>".$arUser["ID"]."</a>] (".htmlspecialcharsbx($arUser["LOGIN"]).") ".htmlspecialcharsbx($arUser["NAME"])." ".htmlspecialcharsbx($arUser["LAST_NAME"]);
  147. else
  148. $res = "&nbsp;".GetMessage("LEARNING_USER_SELECTOR_NOT_FOUND");
  149. }
  150. else
  151. {
  152. $select = "none";
  153. $default_value = "";
  154. }
  155. $name_x = preg_replace("/([^a-z0-9])/is", "x", $strHTMLControlName["VALUE"]);
  156. if (trim($strHTMLControlName["FORM_NAME"]) == '')
  157. $strHTMLControlName["FORM_NAME"] = "form_element";
  158. ob_start();
  159. ?><select id="SELECT<?=htmlspecialcharsbx($strHTMLControlName["VALUE"])?>" name="SELECT<?=htmlspecialcharsbx($strHTMLControlName["VALUE"])?>" onchange="if(this.value == 'none')
  160. {
  161. var v=document.getElementById('<?=htmlspecialcharsbx($strHTMLControlName["VALUE"])?>');
  162. v.value = '';
  163. v.readOnly = true;
  164. document.getElementById('FindUser<?=$name_x?>').disabled = true;
  165. }
  166. else
  167. {
  168. var v=document.getElementById('<?=htmlspecialcharsbx($strHTMLControlName["VALUE"])?>');
  169. v.value = this.value == 'CU'?'<?=$USER->GetID()?>':'';
  170. v.readOnly = false;
  171. document.getElementById('FindUser<?=$name_x?>').disabled = false;
  172. }">
  173. <option value="none"<?if($select=="none")echo " selected"?>><?=GetMessage("LEARNING_USER_SELECTOR_NONE")?></option>
  174. <option value="CU"<?if($select=="CU")echo " selected"?>><?=GetMessage("LEARNING_USER_SELECTOR_CURRENT")?></option>
  175. <option value="SU"<?if($select=="SU")echo " selected"?>><?=GetMessage("LEARNING_USER_SELECTOR_OTHER")?></option>
  176. </select>&nbsp;
  177. <?echo Learning_FindUserIDNew($strHTMLControlName["VALUE"], $value["VALUE"], $res, $strHTMLControlName["FORM_NAME"], $select);
  178. $return = ob_get_contents();
  179. ob_end_clean();
  180. return $return;
  181. }
  182. }
  183. function Learning_FindUserIDNew(
  184. $tag_name,
  185. $tag_value,
  186. $user_name = "",
  187. $form_name = "form1",
  188. $select = "none",
  189. $tag_size = "3",
  190. $tag_maxlength = "",
  191. $button_value = "...",
  192. $tag_class = "typeinput",
  193. $button_class = "tablebodybutton",
  194. $search_page = "/bitrix/admin/user_search.php"
  195. )
  196. {
  197. global $APPLICATION, $USER;
  198. $tag_name_x = preg_replace("/([^a-z0-9])/is", "x", $tag_name);
  199. $tag_name_escaped = CUtil::JSEscape($tag_name);
  200. $tag_value_escaped = CUtil::JSEscape($tag_value);
  201. $form_name = preg_replace("/([^a-z0-9_])/is", "", $form_name);
  202. $args = array(
  203. "tag_name", "tag_value", "form_name", "select", "tag_size", "tag_maxlength",
  204. "button_value", "tag_class", "button_class", "search_page"
  205. );
  206. foreach ($args as $varName)
  207. {
  208. ${$varName} = htmlspecialcharsbx(${$varName});
  209. }
  210. if($APPLICATION->GetGroupRight("main") >= "R")
  211. {
  212. $strReturn = "
  213. <input type=\"text\" name=\"".$tag_name."\" id=\"".$tag_name."\" value=\"".($select=="none"?"":$tag_value)."\" size=\"".$tag_size."\" maxlength=\"".$tag_maxlength."\" class=\"".$tag_class."\">
  214. <IFRAME style=\"width:0px; height:0px; border: 0px\" src=\"javascript:void(0)\" name=\"hiddenframe".$tag_name."\" id=\"hiddenframe".$tag_name."\"></IFRAME>
  215. <input class=\"".$button_class."\" type=\"button\" name=\"FindUser".$tag_name_x."\" id=\"FindUser".$tag_name_x."\" OnClick=\"window.open('".$search_page."?lang=".LANGUAGE_ID."&FN=".$form_name."&FC=".$tag_name_escaped."', '', 'scrollbars=yes,resizable=yes,width=760,height=500,top='+Math.floor((screen.height - 560)/2-14)+',left='+Math.floor((screen.width - 760)/2-5));\" value=\"".$button_value."\" ".($select=="none"?"disabled":"").">
  216. <span id=\"div_".$tag_name."\">".$user_name."</span>
  217. <script>
  218. ";
  219. if($user_name=="")
  220. $strReturn.= "var tv".$tag_name_x."='';\n";
  221. else
  222. $strReturn.= "var tv".$tag_name_x."='".$tag_value_escaped."';\n";
  223. $strReturn.= "
  224. function Ch".$tag_name_x."()
  225. {
  226. var DV_".$tag_name_x.";
  227. DV_".$tag_name_x." = BX(\"div_".$tag_name_escaped."\");
  228. if (!!DV_".$tag_name_x.")
  229. {
  230. if (
  231. document.".$form_name."
  232. && document.".$form_name."['".$tag_name_escaped."']
  233. && typeof tv".$tag_name_x." != 'undefined'
  234. && tv".$tag_name_x." != document.".$form_name."['".$tag_name_escaped."'].value
  235. )
  236. {
  237. tv".$tag_name_x."=document.".$form_name."['".$tag_name_escaped."'].value;
  238. if (tv".$tag_name_x."!='')
  239. {
  240. DV_".$tag_name_x.".innerHTML = '<i>".GetMessage("LEARNING_USER_SELECTOR_WAIT")."</i>';
  241. if (tv".$tag_name_x."!=".intval($USER->GetID()).")
  242. {
  243. document.getElementById(\"hiddenframe".$tag_name_escaped."\").src='/bitrix/admin/get_user.php?ID=' + tv".$tag_name_x."+'&strName=".$tag_name_escaped."&lang=".LANG.(defined("ADMIN_SECTION") && ADMIN_SECTION===true?"&admin_section=Y":"")."';
  244. document.getElementById('SELECT".$tag_name_escaped."').value = 'SU';
  245. }
  246. else
  247. {
  248. DV_".$tag_name_x.".innerHTML = '".CUtil::JSEscape("[<a title=\"".GetMessage("LEARNING_USER_SELECTOR_USER_PROFILE")."\" class=\"tablebodylink\" href=\"/bitrix/admin/user_edit.php?ID=".$USER->GetID()."&lang=".LANG."\">".$USER->GetID()."</a>] (".htmlspecialcharsbx($USER->GetLogin()).") ".htmlspecialcharsbx($USER->GetFirstName())." ".htmlspecialcharsbx($USER->GetLastName()))."';
  249. document.getElementById('SELECT".$tag_name_escaped."').value = 'CU';
  250. }
  251. }
  252. else
  253. {
  254. DV_".$tag_name_x.".innerHTML = '';
  255. document.getElementById('SELECT".$tag_name_escaped."').value = 'SU';
  256. }
  257. }
  258. else if (
  259. DV_".$tag_name_x."
  260. && DV_".$tag_name_x.".innerHTML.length > 0
  261. && document.".$form_name."
  262. && document.".$form_name."['".$tag_name_escaped."']
  263. && document.".$form_name."['".$tag_name_escaped."'].value == ''
  264. )
  265. {
  266. document.getElementById('div_".$tag_name."').innerHTML = '';
  267. }
  268. }
  269. setTimeout(function(){Ch".$tag_name_x."()},1000);
  270. }
  271. Ch".$tag_name_x."();
  272. //-->
  273. </script>
  274. ";
  275. }
  276. else
  277. {
  278. $strReturn = "
  279. <input type=\"text\" name=\"$tag_name\" id=\"$tag_name\" value=\"$tag_value\" size=\"$tag_size\" maxlength=\"strMaxLenght\">
  280. <input type=\"button\" name=\"FindUser".$tag_name_x."\" id=\"FindUser".$tag_name_x."\" OnClick=\"window.open('".$search_page."?lang=".LANGUAGE_ID."&FN=$form_name&FC=$tag_name_escaped', '', 'scrollbars=yes,resizable=yes,width=760,height=560,top='+Math.floor((screen.height - 560)/2-14)+',left='+Math.floor((screen.width - 760)/2-5));\" value=\"$button_value\">
  281. $user_name
  282. ";
  283. }
  284. return $strReturn;
  285. }