PageRenderTime 41ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/components/bitrix/wiki.history.diff/component.php

https://gitlab.com/alexprowars/bitrix
PHP | 341 lines | 292 code | 49 blank | 0 comment | 73 complexity | db17327dbe83c4a97b96265c00ba2434 MD5 | raw file
  1. <?if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true)die();
  2. global $CACHE_MANAGER;
  3. $arParams['IN_COMPLEX'] = 'N';
  4. if (($arParent = $this->GetParent()) !== NULL)
  5. $arParams['IN_COMPLEX'] = 'Y';
  6. if(empty($arParams['PAGE_VAR']))
  7. $arParams['PAGE_VAR'] = 'title';
  8. if(empty($arParams['OPER_VAR']))
  9. $arParams['OPER_VAR'] = 'oper';
  10. $arParams['PATH_TO_POST'] = trim($arParams['PATH_TO_POST']);
  11. if(empty($arParams['SEF_MODE']))
  12. {
  13. $arParams['SEF_MODE'] = 'N';
  14. if ($arParams['IN_COMPLEX'] == 'Y')
  15. $arParams['SEF_MODE'] = $this->GetParent()->arResult['SEF_MODE'];
  16. }
  17. $arParams['NAME_TEMPLATE'] = empty($arParams['NAME_TEMPLATE']) ? CSite::GetNameFormat(false) : str_replace(array("#NOBR#","#/NOBR#"), array("",""), $arParams["NAME_TEMPLATE"]);
  18. $arCache = array();
  19. if(empty($arParams['SOCNET_GROUP_ID']) && $arParams['IN_COMPLEX'] == 'Y')
  20. {
  21. if (mb_strpos($this->GetParent()->GetName(), 'socialnetwork') !== false &&
  22. !empty($this->GetParent()->arResult['VARIABLES']['group_id']))
  23. $arParams['SOCNET_GROUP_ID'] = $this->GetParent()->arResult['VARIABLES']['group_id'];
  24. }
  25. if (!empty($arParams['SOCNET_GROUP_ID']))
  26. $arCache = array('SOCNET_GROUP_ID' => $arParams['SOCNET_GROUP_ID']);
  27. $arParams['PATH_TO_POST'] = trim($arParams['PATH_TO_POST']);
  28. if(empty($arParams['PATH_TO_POST']))
  29. $arParams['PATH_TO_POST'] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?$arParams[PAGE_VAR]=#wiki_name#");
  30. $arParams['PATH_TO_HISTORY'] = trim($arParams['PATH_TO_HISTORY']);
  31. if(empty($arParams['PATH_TO_POST']))
  32. $arParams['PATH_TO_HISTORY'] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?$arParams[PAGE_VAR]=#wiki_name#");
  33. $arParams['PATH_TO_USER'] = trim($arParams['PATH_TO_USER']);
  34. if($arParams['PATH_TO_USER'] == '')
  35. {
  36. if ($arParams['IN_COMPLEX'] == 'Y' && $arParams['SEF_MODE'] == "Y")
  37. $arParams['PATH_TO_USER'] = $this->GetParent()->arParams['PATH_TO_USER'];
  38. }
  39. $arParams['PATH_TO_HISTORY_DIFF'] = trim($arParams['PATH_TO_HISTORY_DIFF']);
  40. if($arParams['PATH_TO_HISTORY_DIFF'] == '')
  41. {
  42. $arParams["PATH_TO_HISTORY_DIFF"] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?$arParams[PAGE_VAR]=#wiki_name#");
  43. if ($arParams['IN_COMPLEX'] == 'Y' && $arParams['SEF_MODE'] == 'Y')
  44. $arParams['PATH_TO_HISTORY_DIFF'] = $this->GetParent()->arResult['PATH_TO_HISTORY_DIFF'];
  45. }
  46. $arParams['PATH_TO_DISCUSSION'] = trim($arParams['PATH_TO_DISCUSSION']);
  47. if($arParams['PATH_TO_DISCUSSION'] == '')
  48. $arParams['PATH_TO_DISCUSSION'] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?$arParams[PAGE_VAR]=#wiki_name#");
  49. $DiffId = 0;
  50. if (isset($_REQUEST['diffid']))
  51. {
  52. $DiffId = intval($_REQUEST['diffid']);
  53. $arCache['diffid'] = $DiffId;
  54. }
  55. $historyId = 0;
  56. if (isset($_REQUEST['oldid']))
  57. {
  58. $historyId = intval($_REQUEST['oldid']);
  59. $arCache['oldid'] = $historyId;
  60. }
  61. if (isset($_REQUEST['ID']) && is_array($_REQUEST['ID']))
  62. {
  63. $DiffId = intval($_REQUEST['ID'][0]);
  64. $arCache['diffid'] = $DiffId;
  65. $historyId = intval($_REQUEST['ID'][1]);
  66. $arCache['oldid'] = $historyId;
  67. }
  68. $GLOBALS['arParams'] = $arParams;
  69. if (!CModule::IncludeModule('wiki'))
  70. {
  71. ShowError(GetMessage('WIKI_MODULE_NOT_INSTALLED'));
  72. return;
  73. }
  74. if(!CModule::IncludeModule('iblock'))
  75. {
  76. ShowError(GetMessage('IBLOCK_MODULE_NOT_INSTALLED'));
  77. return;
  78. }
  79. if(!CModule::IncludeModule('bizproc'))
  80. {
  81. ShowError(GetMessage('BIZPROC_MODULE_NOT_INSTALLED'));
  82. return;
  83. }
  84. if (empty($arParams['IBLOCK_ID']))
  85. {
  86. ShowError(GetMessage('IBLOCK_NOT_ASSIGNED'));
  87. return;
  88. }
  89. if (array_key_exists('SOCNET_GROUP_ID', $arParams) && empty($arParams['SOCNET_GROUP_ID']))
  90. {
  91. ShowError(GetMessage('WIKI_ACCESS_DENIED'));
  92. return;
  93. }
  94. if (CWikiSocnet::isEnabledSocnet() && !empty($arParams['SOCNET_GROUP_ID']))
  95. {
  96. if(!CModule::IncludeModule('socialnetwork'))
  97. {
  98. ShowError(GetMessage('SOCNET_MODULE_NOT_INSTALLED'));
  99. return;
  100. }
  101. }
  102. $arResult['SOCNET'] = false;
  103. if (CWikiSocnet::isEnabledSocnet() && !empty($arParams['SOCNET_GROUP_ID']))
  104. {
  105. $iblock_id_tmp = CWikiSocnet::RecalcIBlockID($arParams["SOCNET_GROUP_ID"]);
  106. if ($iblock_id_tmp)
  107. $arParams['IBLOCK_ID'] = $iblock_id_tmp;
  108. if (!CWikiSocnet::Init($arParams['SOCNET_GROUP_ID'], $arParams['IBLOCK_ID']))
  109. {
  110. ShowError(GetMessage('WIKI_SOCNET_INITIALIZING_FAILED'));
  111. return;
  112. }
  113. $arResult['SOCNET'] = true;
  114. }
  115. if (!CWikiUtils::IsReadable())
  116. {
  117. ShowError(GetMessage('WIKI_ACCESS_DENIED'));
  118. return;
  119. }
  120. if (empty($historyId) || empty($DiffId))
  121. {
  122. LocalRedirect(CHTTP::urlAddParams(
  123. CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_HISTORY'],
  124. array(
  125. 'wiki_name' => $arParams['ELEMENT_NAME'],
  126. 'group_id' => CWikiSocnet::$iSocNetId
  127. )
  128. ),
  129. $arParams['IN_COMPLEX'] == 'Y' && $arParams['SEF_MODE'] == 'N' ? array($arParams['OPER_VAR'] => 'history') : array()
  130. ));
  131. return ;
  132. }
  133. $res = CIBlock::GetList(Array(), Array("ID"=>$arParams['IBLOCK_ID'], 'CHECK_PERMISSIONS' => 'N'));
  134. $arIBLOCK = $res->GetNext();
  135. if (empty($arIBLOCK['BIZPROC']) || $arIBLOCK['BIZPROC'] != 'Y')
  136. {
  137. ShowError(GetMessage('WIKI_NOT_CHANGE_BIZPROC'));
  138. return;
  139. }
  140. CUtil::InitJSCore(array("ajax", "tooltip")); //http://jabber.bx/view.php?id=30695
  141. if($this->StartResultCache(false, array($USER->GetGroups(), $arCache), false))
  142. {
  143. $arParams['ELEMENT_NAME'] = rawurldecode($arParams['ELEMENT_NAME']);
  144. $arResult['ELEMENT'] = array();
  145. if (empty($arParams['ELEMENT_NAME']))
  146. $arParams['ELEMENT_NAME'] = CWiki::GetDefaultPage($arParams['IBLOCK_ID']);
  147. $arFilter = array(
  148. 'IBLOCK_ID' => $arParams['IBLOCK_ID'],
  149. 'CHECK_PERMISSIONS' => 'N',
  150. 'ACTIVE' => 'Y'
  151. );
  152. if (!empty($arParams['ELEMENT_NAME']) && ($arResult['ELEMENT'] = CWiki::GetElementByName($arParams['ELEMENT_NAME'], $arFilter)) != false)
  153. $arParams['ELEMENT_ID'] = $arResult['ELEMENT']['ID'];
  154. $documentId = array('iblock', 'CWikiDocument', $arParams['ELEMENT_ID']);
  155. $arErrorsTmp = array();
  156. $arHistoryResult = CBPDocument::GetDocumentFromHistory($historyId, $arErrorsTmp);
  157. if (count($arErrorsTmp) > 0)
  158. {
  159. foreach ($arErrorsTmp as $e)
  160. $arResult['FATAL_MESSAGE'] .= $e['message'];
  161. }
  162. $arDiffResult = CBPDocument::GetDocumentFromHistory($DiffId, $arErrorsTmp);
  163. if (count($arErrorsTmp) > 0)
  164. {
  165. foreach ($arErrorsTmp as $e)
  166. $arResult['FATAL_MESSAGE'] .= $e['message'];
  167. $this->AbortResultCache();
  168. ShowError($arResult['FATAL_MESSAGE']);
  169. return;
  170. }
  171. if (!($arHistoryResult['DOCUMENT_ID'] == $documentId && $arDiffResult['DOCUMENT_ID'] == $documentId))
  172. {
  173. $this->AbortResultCache();
  174. ShowError(GetMessage('WIKI_ACCESS_DENIED'));
  175. return;
  176. }
  177. $canRead = CBPDocument::CanUserOperateDocument(
  178. CBPCanUserOperateOperation::ReadDocument,
  179. $GLOBALS['USER']->GetID(),
  180. $documentId,
  181. array('UserGroups' => $GLOBALS['USER']->GetUserGroupArray())
  182. );
  183. if (!$canRead)
  184. {
  185. $this->AbortResultCache();
  186. ShowError(GetMessage('WIKI_ACCESS_DENIED'));
  187. return;
  188. }
  189. $rsUser = CUser::GetByID($arDiffResult['USER_ID']);
  190. $arUser = $rsUser->Fetch();
  191. if ($arResult['SOCNET'])
  192. {
  193. $arResult['AJAX_PAGE'] = $APPLICATION->GetCurPageParam('', array('bxajaxid', 'logout'));
  194. $arResult['PATH_TO_USER'] = $arParams['PATH_TO_USER'];
  195. $arResult['SHOW_LOGIN'] = $this->GetParent()->arParams['SHOW_LOGIN'];
  196. $arResult['NAME_TEMPLATE'] = $this->GetParent()->arParams['NAME_TEMPLATE'];
  197. $arResult['PATH_TO_CONPANY_DEPARTMENT'] = $this->GetParent()->arParams['PATH_TO_CONPANY_DEPARTMENT'];
  198. $arResult['PATH_TO_VIDEO_CALL'] = $this->GetParent()->arParams['PATH_TO_VIDEO_CALL'];
  199. $arResult['PATH_TO_SONET_MESSAGES_CHAT'] = $this->GetParent()->arParams['PATH_TO_MESSAGES_CHAT'];
  200. }
  201. $arResult['VERSION_DIFF'] = array();
  202. $arResult['VERSION_DIFF']['USER_ID'] = $arDiffResult['USER_ID'];
  203. $arResult['VERSION_DIFF']['USER_LOGIN'] = CWikiUtils::GetUserLogin($arUser, $arParams["NAME_TEMPLATE"]);
  204. $arResult['VERSION_DIFF']['MODIFIED'] = FormatDateFromDB($arDiffResult['MODIFIED']);
  205. $arResult['VERSION_DIFF']['ID'] = $arDiffResult['ID'];
  206. $arResult['VERSION_DIFF']['SHOW_LINK'] = CHTTP::urlAddParams(
  207. CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_POST"],
  208. array(
  209. 'wiki_name' => rawurlencode($arParams['ELEMENT_NAME']),
  210. 'group_id' => CWikiSocnet::$iSocNetId
  211. )
  212. ),
  213. array('oldid' => $arDiffResult['ID'])
  214. );
  215. $arResult['VERSION_DIFF']['USER_LINK'] = '';
  216. if (!empty($arParams["PATH_TO_USER"]))
  217. {
  218. $arResult['VERSION_DIFF']['USER_LINK'] = CHTTP::urlAddParams(
  219. CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER"],
  220. array(
  221. 'wiki_name' => rawurlencode($arParams['ELEMENT_NAME']),
  222. 'group_id' => CWikiSocnet::$iSocNetId,
  223. 'user_id' => $arDiffResult['USER_ID']
  224. )
  225. ),
  226. array()
  227. );
  228. }
  229. $rsUser = CUser::GetByID($arHistoryResult['USER_ID']);
  230. $arUser = $rsUser->Fetch();
  231. $arResult['VERSION_OLD'] = array();
  232. $arResult['VERSION_OLD']['USER_ID'] = $arHistoryResult['USER_ID'];
  233. $arResult['VERSION_OLD']['USER_LOGIN'] = CWikiUtils::GetUserLogin($arUser, $arParams["NAME_TEMPLATE"]);
  234. $arResult['VERSION_OLD']['MODIFIED'] = FormatDateFromDB($arHistoryResult['MODIFIED']);
  235. $arResult['VERSION_OLD']['ID'] = $arHistoryResult['ID'];
  236. $arResult['VERSION_OLD']['SHOW_LINK'] = CHTTP::urlAddParams(
  237. CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_POST'],
  238. array(
  239. 'wiki_name' => rawurlencode($arParams['ELEMENT_NAME']),
  240. 'group_id' => CWikiSocnet::$iSocNetId
  241. )
  242. ),
  243. array('oldid' => $arHistoryResult['ID'])
  244. );
  245. $arResult['VERSION_OLD']['USER_LINK'] = '';
  246. if (!empty($arParams['PATH_TO_USER']))
  247. {
  248. $arResult['VERSION_OLD']['USER_LINK'] = CHTTP::urlAddParams(
  249. CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_USER'],
  250. array(
  251. 'wiki_name' => rawurlencode($arParams['ELEMENT_NAME']),
  252. 'group_id' => CWikiSocnet::$iSocNetId,
  253. 'user_id' => $arHistoryResult['USER_ID']
  254. )
  255. ),
  256. array()
  257. );
  258. }
  259. $arHp = array('oldid' => $arHistoryResult['ID'], 'sessid' => bitrix_sessid());
  260. if ($arParams['IN_COMPLEX'] == 'Y' && $arParams['SEF_MODE'] == 'N')
  261. $arHp[$arParams["OPER_VAR"]] = 'history';
  262. $arResult['CANCEL_LINK'] = CHTTP::urlAddParams(
  263. CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_HISTORY"],
  264. array(
  265. 'wiki_name' => rawurlencode($arParams['ELEMENT_NAME']),
  266. 'group_id' => CWikiSocnet::$iSocNetId
  267. )
  268. ),
  269. $arHp
  270. );
  271. $wikiDiff = new Bitrix\Wiki\Diff();
  272. $arResult['DIFF_NAME'] = $wikiDiff->getDiffHtml(
  273. htmlspecialcharsbx($arHistoryResult['DOCUMENT']['FIELDS']['NAME']),
  274. htmlspecialcharsbx($arDiffResult['DOCUMENT']['FIELDS']['NAME'])
  275. );
  276. $arCat = array();
  277. $CWikiParser = new CWikiParser();
  278. $arResult['DIFF'] = $wikiDiff->getDiffHtml(
  279. $arHistoryResult['DOCUMENT']['FIELDS']['DETAIL_TEXT'],
  280. $arDiffResult['DOCUMENT']['FIELDS']['DETAIL_TEXT']
  281. );
  282. $arResult['DIFF'] = $CWikiParser->parseBeforeSave($arResult['DIFF'], $arCat, $arParams["NAME_TEMPLATE"]);
  283. $arResult['DIFF'] = $CWikiParser->Parse($arResult['DIFF'], $arHistoryResult['DOCUMENT']['FIELDS']['DETAIL_TEXT_TYPE']);
  284. $arResult['DIFF'] = $CWikiParser->Clear($arResult['DIFF']);
  285. $CACHE_MANAGER->StartTagCache($this->GetCachePath());
  286. $CACHE_MANAGER->RegisterTag('wiki_'.$arParams['ELEMENT_ID']);
  287. $CACHE_MANAGER->EndTagCache();
  288. $this->IncludeComponentTemplate();
  289. }
  290. include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/components/bitrix/wiki/include/nav.php');
  291. unset($GLOBALS['arParams']);
  292. ?>