PageRenderTime 382ms CodeModel.GetById 275ms RepoModel.GetById 1ms app.codeStats 0ms

/components/bitrix/socialnetwork_user/include/webdav_settings.php

https://gitlab.com/alexprowars/bitrix
PHP | 427 lines | 361 code | 45 blank | 21 comment | 64 complexity | 9dd12088bd40eb13603400cfe59a9ff3 MD5 | raw file
  1. <?
  2. if (!function_exists("__wd_check_uf_use_bp_property"))
  3. {
  4. function __wd_check_uf_use_bp_property($iblock_id)
  5. {
  6. $iblock_id = intval($iblock_id);
  7. $db_res = CUserTypeEntity::GetList(array($by=>$order), array("ENTITY_ID" => "IBLOCK_".$iblock_id."_SECTION", "FIELD_NAME" => "UF_USE_BP"));
  8. if (!$db_res || !($res = $db_res->GetNext()))
  9. {
  10. $arFields = Array(
  11. "ENTITY_ID" => "IBLOCK_".$iblock_id."_SECTION",
  12. "FIELD_NAME" => "UF_USE_BP",
  13. "USER_TYPE_ID" => "string",
  14. "MULTIPLE" => "N",
  15. "MANDATORY" => "N",
  16. "SETTINGS" => array("DEFAULT_VALUE" => "Y"));
  17. $arFieldName = array();
  18. $rsLanguage = CLanguage::GetList();
  19. while($arLanguage = $rsLanguage->Fetch()):
  20. // GetMessage("SONET_UF_USE_BP");
  21. $dir = str_replace(array("\\", "//"), "/", dirname(__FILE__));
  22. $dirs = explode("/", $dir);
  23. array_pop($dirs);
  24. $file = trim(implode("/", $dirs)."/lang/".$arLanguage["LID"]."/include/webdav_settings.php");
  25. $tmp_mess = __IncludeLang($file, true);
  26. $arFieldName[$arLanguage["LID"]] = (empty($tmp_mess["SONET_UF_USE_BP"]) ? "Use Business Process" : $tmp_mess["SONET_UF_USE_BP"]);
  27. endwhile;
  28. $arFields["EDIT_FORM_LABEL"] = $arFieldName;
  29. $obUserField = new CUserTypeEntity;
  30. $obUserField->Add($arFields);
  31. $GLOBALS["USER_FIELD_MANAGER"]->arFieldsCache = array();
  32. }
  33. }
  34. }
  35. if (!function_exists("__wd_get_root_section"))
  36. {
  37. function __wd_get_root_section($IBLOCK_ID, $object, $object_id)
  38. {
  39. $result = CIBlockWebdavSocnet::GetSectionID($IBLOCK_ID, $object, $object_id);
  40. if (intval($result) > 0)
  41. {
  42. return $result;
  43. }
  44. //elseif ($arParams["PERMISSION"] < "W" || ($object == "user" && $arResult["VARIABLES"]["user_id"] != $USER->GetID()))
  45. //{
  46. //$arParams["ERROR_MESSAGE"] = GetMessage("SONET_WEBDAV_NOT_EXISTS");
  47. //return 0;
  48. //}
  49. else // create new
  50. {
  51. __wd_check_uf_use_bp_property($arParams["IBLOCK_ID"]);
  52. $arFields = Array(
  53. "IBLOCK_ID" => $IBLOCK_ID,
  54. "ACTIVE" => "Y",
  55. "SOCNET_GROUP_ID" => false,
  56. "IBLOCK_SECTION_ID" => 0,
  57. "UF_USE_BP" => "N"
  58. );
  59. $bFound = false;
  60. if ($object == "user")
  61. {
  62. $dbUser = CUser::GetByID($object_id);
  63. $arUser = $dbUser->Fetch();
  64. if ($arUser)
  65. {
  66. $bFound = true;
  67. $arFields["NAME"] = trim($arUser['LAST_NAME']." ".$arUser['FIRST_NAME']);
  68. $arFields["NAME"] = trim(!empty($arFields["NAME"]) ? $arFields["NAME"] : $arUser['LOGIN']);
  69. $arFields['CREATED_BY'] = $arUser['ID'];
  70. $arFields['MODIFIED_BY'] = $arUser['ID'];
  71. if (CIBlock::GetArrayByID($IBLOCK_ID, "RIGHTS_MODE") === "E")
  72. {
  73. $arTasks = CWebDavIblock::GetTasks();
  74. $arFields['RIGHTS'] = array(
  75. 'n0' => array('GROUP_CODE' => 'U'.$object_id, 'TASK_ID' => $arTasks['X'])
  76. );
  77. }
  78. }
  79. }
  80. else
  81. {
  82. /* $res = CSocNetGroup::GetByID($arResult["VARIABLES"]["group_id"]);
  83. if (!$res)
  84. {
  85. $arParams["ERROR_MESSAGE"] = GetMessage("SONET_GROUP_NOT_EXISTS");
  86. return 0;
  87. } */
  88. $arFields["SOCNET_GROUP_ID"] = $object_id;
  89. //$arGroup = CSocNetGroup::GetByID($object_id);
  90. $arFields["NAME"] = GetMessage("SONET_GROUP_PREFIX").$object_id;
  91. $dbGroup = CSocNetGroup::GetList(
  92. Array(),
  93. Array("ID" => (int) $object_id),
  94. false,
  95. false,
  96. array("ID", "SITE_ID", "NAME")
  97. );
  98. if ($arGroup = $dbGroup->Fetch())
  99. {
  100. $bFound = true;
  101. $arFields["NAME"] = GetMessage("SONET_GROUP_PREFIX") . \Bitrix\Main\Text\Emoji::decode($arGroup['NAME']);
  102. if (CIBlock::GetArrayByID($IBLOCK_ID, "RIGHTS_MODE") === "E")
  103. {
  104. $arTasks = CWebDavIblock::GetTasks();
  105. $arFields['RIGHTS'] = array(
  106. 'n0' => array('GROUP_CODE' => 'SG'.$arFields["SOCNET_GROUP_ID"].'_A', 'TASK_ID' => $arTasks['X']),
  107. 'n1' => array('GROUP_CODE' => 'SG'.$arFields["SOCNET_GROUP_ID"].'_E', 'TASK_ID' => $arTasks['W']),
  108. 'n2' => array('GROUP_CODE' => 'SG'.$arFields["SOCNET_GROUP_ID"].'_K', 'TASK_ID' => $arTasks['W'])
  109. );
  110. }
  111. }
  112. }
  113. if ($bFound)
  114. {
  115. $GLOBALS["UF_USE_BP"] = $arFields["UF_USE_BP"];
  116. $GLOBALS["USER_FIELD_MANAGER"]->EditFormAddFields("IBLOCK_".$IBLOCK_ID."_SECTION", $arFields);
  117. $bs = new CIBlockSection;
  118. $sectionID = $bs->Add($arFields);
  119. if (!$sectionID)
  120. {
  121. $arParams["ERROR_MESSAGE"] = $bs->LAST_ERROR;
  122. return 0;
  123. }
  124. WDClearComponentCache(array(
  125. "webdav.element.edit",
  126. "webdav.element.hist",
  127. "webdav.element.upload",
  128. "webdav.element.view",
  129. "webdav.menu",
  130. "webdav.section.edit",
  131. "webdav.section.list"));
  132. return true;
  133. }
  134. else
  135. {
  136. return "NO_OBJECT";
  137. }
  138. /*
  139. if ($ob->workflow == 'bizproc')
  140. {
  141. __wd_create_default_bp_user_and_groups($arBizProcParameters);
  142. }
  143. */
  144. }
  145. }
  146. }
  147. if (defined("WEBDAV_SETTINGS_LIMIT_INCLUDE"))
  148. return true;
  149. require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
  150. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/interface/admin_lib.php");
  151. $dir = str_replace(array("\\", "//"), "/", dirname(__FILE__));
  152. $dirs = explode("/", $dir);
  153. array_pop($dirs);
  154. $file = trim(implode("/", $dirs)."/lang/".LANGUAGE_ID."/include/webdav_settings.php");
  155. __IncludeLang($file);
  156. $documentType = explode("_", $_REQUEST["DOCUMENT_ID"]);
  157. $arParams = array();
  158. $arParams["IBLOCK_ID"] = $IBLOCK_ID = intval($documentType[1]);
  159. $object = trim($documentType[2]);
  160. $object_id = intval($documentType[3]);
  161. $popupWindow = new CJSPopup('', '');
  162. if (!CModule::IncludeModule("iblock"))
  163. $popupWindow->ShowError(GetMessage("SONET_IB_MODULE_IS_NOT_INSTALLED"));
  164. elseif (!CModule::IncludeModule("webdav"))
  165. $popupWindow->ShowError(GetMessage("SONET_WD_MODULE_IS_NOT_INSTALLED"));
  166. elseif ($IBLOCK_ID <= 0)
  167. $popupWindow->ShowError(GetMessage("SONET_IBLOCK_ID_EMPTY"));
  168. elseif ($object_id <= 0 && ($object != "user" && $object != "group"))
  169. $popupWindow->ShowError(GetMessage("SONET_GROUP_NOT_EXISTS"));
  170. $res = CIBlockWebdavSocnet::GetUserMaxPermission(
  171. $object,
  172. $object_id,
  173. $USER->GetID(),
  174. $IBLOCK_ID);
  175. $arParams["PERMISSION"] = $res["PERMISSION"];
  176. $arParams["CHECK_CREATOR"] = $res["CHECK_CREATOR"];
  177. if (
  178. $arParams["PERMISSION"] < "W"
  179. || $arParams["CHECK_CREATOR"] == "Y"
  180. )
  181. {
  182. $popupWindow->ShowError($object == "user" ? GetMessage("SONET_USER_FILES_ACCESS_DENIED") : GetMessage("SONET_GROUP_FILES_ACCESS_DENIED"));
  183. }
  184. $arFilter = array(
  185. "IBLOCK_ID" => $arParams["IBLOCK_ID"],
  186. "SOCNET_GROUP_ID" => false,
  187. "CHECK_PERMISSIONS" => "N",
  188. "SECTION_ID" => 0);
  189. if ($object == "user")
  190. $arFilter["CREATED_BY"] = $object_id;
  191. else
  192. $arFilter["SOCNET_GROUP_ID"] = $object_id;
  193. $arLibrary = array();
  194. $db_res = CIBlockSection::GetList(array(), $arFilter, false, array("ID", "UF_USE_BP", 'UF_USE_EXT_SERVICES'));
  195. if (!($db_res && $arLibrary = $db_res->GetNext()))
  196. {
  197. $popupWindow->ShowError(GetMessage("SONET_WEBDAV_NOT_EXISTS"));
  198. }
  199. else
  200. {
  201. $arLibrary["UF_USE_BP"] = ($arLibrary["UF_USE_BP"] == "N" ? "N" : "Y");
  202. $arLibrary["UF_USE_EXT_SERVICES"] = CWebDavIblock::resolveDefaultUseExtServices($arLibrary["UF_USE_EXT_SERVICES"]);
  203. }
  204. if (CIBlock::GetArrayByID($IBLOCK_ID, "RIGHTS_MODE") === "E")
  205. {
  206. $sectionID = $arLibrary['ID'];
  207. $bSectionPerms = CIBlockSectionRights::UserHasRightTo($IBLOCK_ID, $sectionID, 'section_rights_edit');
  208. }
  209. else
  210. {
  211. $bSectionPerms = ($arParams["PERMISSION"] > 'W');
  212. }
  213. if (!$bSectionPerms)
  214. return;
  215. //Save permissions
  216. if ($_SERVER["REQUEST_METHOD"] == "POST" && !check_bitrix_sessid())
  217. {
  218. CUtil::JSPostUnescape();
  219. $strWarning = GetMessage("MAIN_SESSION_EXPIRED");
  220. }
  221. elseif ($_SERVER["REQUEST_METHOD"] == "POST")
  222. {
  223. $arRequestParams = array(
  224. 'SOCNET_GROUP_ID',
  225. 'SOCNET_TYPE',
  226. 'SOCNET_ID'
  227. );
  228. foreach ($arRequestParams as $param)
  229. {
  230. if (isset($_REQUEST[$param]))
  231. {
  232. $arParams[$param] = $_REQUEST[$param];
  233. }
  234. }
  235. $arParams['ENTITY_TYPE'] = 'SECTION';
  236. $arParams['ENTITY_ID'] = $arParams['IBLOCK_ID'];
  237. $arParams['ACTION'] = 'set_rights';
  238. $arParams['DO_NOT_REDIRECT'] = true;
  239. include($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/components/bitrix/webdav.iblock.rights/action.php");
  240. $_REQUEST["UF_USE_BP"] = ($_REQUEST["UF_USE_BP"] == "Y" ? "Y" : "N");
  241. $_REQUEST["UF_USE_EXT_SERVICES"] = CWebDavIblock::resolveDefaultUseExtServices($_REQUEST["UF_USE_EXT_SERVICES"]);
  242. if ($_REQUEST["UF_USE_BP"] != $arLibrary["UF_USE_BP"] || $_REQUEST["UF_USE_EXT_SERVICES"] != $arLibrary['UF_USE_EXT_SERVICES'])
  243. {
  244. if (!isset($arLibrary["~UF_USE_BP"]))
  245. {
  246. __wd_check_uf_use_bp_property($arParams["IBLOCK_ID"]);
  247. }
  248. if(!isset($arLibrary["~UF_USE_EXT_SERVICES"]))
  249. {
  250. CWebDavIblock::checkUfUseExtServices((int)$arParams["IBLOCK_ID"]);
  251. }
  252. $arFields = Array(
  253. "IBLOCK_ID" => $arParams["IBLOCK_ID"],
  254. "UF_USE_BP" => $_REQUEST["UF_USE_BP"],
  255. "UF_USE_EXT_SERVICES" => $_REQUEST["UF_USE_EXT_SERVICES"],
  256. );
  257. $GLOBALS["UF_USE_BP"] = $arFields["UF_USE_BP"];
  258. $GLOBALS["USER_FIELD_MANAGER"]->EditFormAddFields("IBLOCK_".$arParams["IBLOCK_ID"]."_SECTION", $arFields);
  259. $bs = new CIBlockSection();
  260. $res = $bs->Update($arLibrary["ID"], $arFields);
  261. }
  262. $popupWindow->Close($bReload = true, $_REQUEST["back_url"]);
  263. die();
  264. }
  265. //HTML output
  266. $popupWindow->ShowTitlebar(GetMessage("SN_TITLE"));
  267. $popupWindow->StartDescription("bx-access-folder");
  268. if (isset($strWarning) && $strWarning != "")
  269. $popupWindow->ShowValidationError($strWarning);
  270. ?>
  271. <p><b><?=GetMessage("SN_TITLE_TITLE")?></b></p>
  272. <?
  273. $popupWindow->EndDescription();
  274. $popupWindow->StartContent();
  275. ?>
  276. <? if ($object == 'user' && 'Y' == COption::GetOptionString('webdav', 'webdav_allow_ext_doc_services_local', CWebDavIblock::resolveDefaultUseExtServices())): ?>
  277. <p></p>
  278. <table class="bx-width100" id="bx_permission_table">
  279. <tr>
  280. <td width="35%" align="right"><?=GetMessage("WD_DOC_SETTINGS")?></td>
  281. <td>
  282. <input type="checkbox" name="UF_USE_EXT_SERVICES" id="UF_USE_EXT_SERVICES" value="Y" <?=(CWebDavIblock::resolveDefaultUseExtServices($arLibrary["UF_USE_EXT_SERVICES"]) == "Y"?' checked="checked" ' : '') ?>/>&nbsp;
  283. <label for="UF_USE_EXT_SERVICES"><?=GetMessage("WD_OPTIONS_ALLOW_EXT_SERVICES")?></label></td>
  284. </tr>
  285. </table>
  286. <? endif; ?>
  287. <? if ($object == 'group') { ?>
  288. <p></p>
  289. <table class="bx-width100" id="bx_permission_table">
  290. <tr>
  291. <td width="35%" align="right"><?=GetMessage("SN_BP")?></td>
  292. <td><input type="checkbox" name="UF_USE_BP" id="UF_USE_BP" value="Y" <?
  293. ?><?=($arLibrary["UF_USE_BP"] == "N" ? '' : ' checked="checked" ')
  294. ?> />&nbsp;<label for="UF_USE_BP"><?=GetMessage("SN_BP_LABEL")?></label> </td>
  295. </tr>
  296. </table>
  297. <? if (
  298. $USER->IsAdmin()
  299. && $object === 'group'
  300. ) {
  301. $arParams["DOCUMENT_TYPE"] = array("webdav", "CIBlockDocumentWebdavSocnet", $documentType);
  302. $arParams["ROOT_SECTION_ID"] = __wd_get_root_section($IBLOCK_ID, $object, $object_id);
  303. if ($arParams["ROOT_SECTION_ID"] === true) // created new
  304. $arParams["ROOT_SECTION_ID"] = __wd_get_root_section($IBLOCK_ID, $object, $object_id);
  305. $ob = new CWebDavIblock($IBLOCK_ID, '/',
  306. $arParams + array(
  307. "ATTRIBUTES" => ($object == "user" ? array('user_id' => $object_id) : array('group_id' => $object_id))
  308. )
  309. );
  310. ?>
  311. <tr class="section">
  312. <td colspan="2" align="center"><b><?=GetMessage("WD_TAB15_TITLE")?></b></td>
  313. </tr>
  314. <?
  315. $UF_ENTITY = $ob->GetUfEntity();
  316. $arUserField = $ob->GetUfFields();
  317. $backUrl = "/";
  318. if (isset($_REQUEST["back_url"]))
  319. $backUrl = $_REQUEST["back_url"];
  320. foreach ($arUserField as $fieldCode => $field)
  321. {
  322. $name = $fieldCode;
  323. if (!empty($field['EDIT_FORM_LABEL']))
  324. $name = $field['EDIT_FORM_LABEL'];
  325. $type = '';
  326. if (!empty($field['USER_TYPE']['DESCRIPTION']))
  327. $type = $field['USER_TYPE']['DESCRIPTION'];
  328. ?>
  329. <tr>
  330. <td width="50%" align="right" valign="top">
  331. <a href="/bitrix/admin/userfield_edit.php?ID=<?=$field["ID"]?>&back_url=<?=htmlspecialcharsbx($backUrl)?>"><?=htmlspecialcharsbx($name)?></a>:
  332. </td>
  333. <td width="50%">
  334. <i><?=htmlspecialcharsbx($type);?></i>
  335. </td>
  336. </tr>
  337. <?
  338. }
  339. ?>
  340. <tr>
  341. <td colspan="2" align="center" valign="top">
  342. <a href="/bitrix/admin/userfield_edit.php?ENTITY_ID=<?=htmlspecialcharsbx($UF_ENTITY)?>&back_url=<?=htmlspecialcharsbx($backUrl)?>"><?=GetMessage("IB_WDUF_ADD")?></a>
  343. </td>
  344. </tr>
  345. <? } ?>
  346. </table>
  347. <script>
  348. function wdNoteShow(e)
  349. {
  350. var expand = (this.style.height == '3em');
  351. this.style.height = (expand ? 'auto' : '3em');
  352. }
  353. BX(function() {
  354. BX.bind(BX('wd_bp_notes'),'click', wdNoteShow);
  355. });
  356. </script>
  357. <div id='wd_bp_notes' style="background-color:#FEFDEA; margin-bottom:16px; margin-top:16px; border:1px solid #D7D6BA; width:679px; position: relative; display:block; padding: 0 4px; height:3em; cursor: pointer; overflow: hidden;">
  358. <table class='notes' style='display:block;'>
  359. <tr><td class='content'>
  360. <?=GetMessage("SN_BP_NOTE")?>
  361. </td></tr></table>
  362. </div>
  363. <? } ?>
  364. <?
  365. $arWDRights = Array(
  366. "IBLOCK_ID" => $arParams["IBLOCK_ID"],
  367. "ENTITY_TYPE" => "SECTION",
  368. "ENTITY_ID" => $arLibrary['ID'],
  369. "TAB_ID" => 'tab_permissions',
  370. "SOCNET_TYPE" => $object,
  371. "SOCNET_ID" => $object_id,
  372. "SET_TITLE" => "N",
  373. "SET_NAV_CHAIN" => "N",
  374. "POPUP_DIALOG" => true,
  375. );
  376. if ($object == "group")
  377. $arWDRights["SOCNET_GROUP_ID"] = $object_id;
  378. $APPLICATION->IncludeComponent("bitrix:webdav.iblock.rights", ".default", $arWDRights, null, array("HIDE_ICONS" => "Y"));
  379. $popupWindow->EndContent();
  380. $popupWindow->ShowStandardButtons();
  381. ?>
  382. <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin_js.php");?>