1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
wiki_utils.php
См. документацию.
1<?php
2
4
6{
7 static function getRightsLinks($arPage)
8 {
10 if (!is_array($arPage))
11 $arPage = array($arPage);
12
13 $arLinks = array();
14 $arParams['ELEMENT_NAME'] = htmlspecialcharsback($arParams['ELEMENT_NAME']);
15 $arParams['ELEMENT_NAME'] = rawurlencode($arParams['ELEMENT_NAME']);
16
17 if (in_array('categories', $arPage))
18 return array();
19
20 if (in_array('article', $arPage) && !in_array('add', $arPage))
21 {
22 $arLinks['article'] = array(
23 'NAME' => GetMessage('PAGE_ARTICLE'),
24 'TITLE' => GetMessage('PAGE_ARTICLE_TITLE'),
25 'CURRENT' => in_array('article', $arPage),
26 'LINK' => CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_POST'],
27 array(
28 'wiki_name' => $arParams['ELEMENT_NAME'],
29 'group_id' => CWikiSocnet::$iSocNetId
30 )
31 ),
32 'ID' => 'article',
33 'TYPE' => 'page',
34 'IS_RED' => in_array('add', $arPage) ? 'Y' : 'N'
35 );
36 }
37
38 if (self::IsWriteable() &&
39 ((!in_array('history', $arPage) || in_array('history_diff', $arPage)) &&
40 (!in_array('add', $arPage) && !in_array('edit', $arPage) && !in_array('delete', $arPage) && !in_array('rename', $arPage))))
41 {
42 if(IsModuleInstalled('bizproc'))
43 {
44 $arLinks['history'] = array(
45 'NAME' => GetMessage('PAGE_HISTORY'),
46 'TITLE' => GetMessage('PAGE_HISTORY_TITLE'),
47 'CURRENT' => in_array('history', $arPage),
48 'LINK' => CHTTP::urlAddParams(
49 CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_HISTORY'],
50 array(
51 'wiki_name' => $arParams['ELEMENT_NAME'],
52 'group_id' => CWikiSocnet::$iSocNetId
53 )
54 ),
55 $arParams['IN_COMPLEX'] == 'Y' && $arParams['SEF_MODE'] == 'N' ? array($arParams['OPER_VAR'] => 'history') : array()
56 ),
57 'ID' => 'history',
58 'TYPE' => 'page',
59 'IS_RED' => 'N'
60 );
61 }
62 }
63
64 if ($arParams['USE_REVIEW'] == 'Y')
65 {
66 $arLinks['discussion'] = array(
67 'NAME' => GetMessage('PAGE_DISCUSSION'),
68 'TITLE' => GetMessage('PAGE_DISCUSSION_TITLE'),
69 'CURRENT' => in_array('discussion', $arPage),
70 'LINK' => CHTTP::urlAddParams(
71 CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_DISCUSSION'],
72 array(
73 'wiki_name' => $arParams['ELEMENT_NAME'],
74 'group_id' => CWikiSocnet::$iSocNetId
75 )
76 ),
77 $arParams['IN_COMPLEX'] == 'Y' && $arParams['SEF_MODE'] == 'N' ? array($arParams['OPER_VAR'] => 'discussion') : array()
78 ),
79 'ID' => 'discussion',
80 'TYPE' => 'page',
81 'IS_RED' => 'N'
82 );
83 }
84
85 if (self::IsWriteable() && (!in_array('history', $arPage) && !in_array('history_diff', $arPage)))
86 {
87 $arLinks['add'] = array(
88 'NAME' => GetMessage('PAGE_ADD'),
89 'TITLE' => GetMessage('PAGE_ADD_TITLE'),
90 'CURRENT' => in_array('add', $arPage),
91 'LINK' => CHTTP::urlAddParams(
92 CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_POST_EDIT'],
93 array(
94 'wiki_name' => GetMessage('WIKI_NEW_PAGE_TITLE'),
95 'group_id' => CWikiSocnet::$iSocNetId
96 )
97 ),
98 array($arParams['OPER_VAR'] => 'add')
99 ),
100 'ID' => 'add',
101 'TYPE' => 'edit',
102 'IS_RED' => in_array('add', $arPage) ? 'Y' : 'N'
103 );
104
105 if (!in_array('add', $arPage))
106 {
107 $arLinks['edit'] = array(
108 'NAME' => GetMessage('PAGE_EDIT'),
109 'TITLE' => GetMessage('PAGE_EDIT_TITLE'),
110 'CURRENT' => in_array('edit', $arPage),
111 'LINK' => CHTTP::urlAddParams(
112 CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_POST_EDIT'],
113 array(
114 'wiki_name' => $arParams['ELEMENT_NAME'],
115 'group_id' => CWikiSocnet::$iSocNetId
116 )
117 ),
118 $arParams['IN_COMPLEX'] == 'Y' && $arParams['SEF_MODE'] == 'N' ? array($arParams['OPER_VAR'] => 'edit') : array()
119 ),
120 'ID' => 'edit',
121 'TYPE' => 'edit',
122 'IS_RED' => in_array('add', $arPage) ? 'Y' : 'N'
123 );
124
125 $url = $APPLICATION->GetPopupLink(
126 array(
127 'URL' => CHTTP::urlAddParams(
128 CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_POST_EDIT'],
129 array(
130 'wiki_name' => rawurlencode($arParams['ELEMENT_NAME']),
131 'group_id' => CWikiSocnet::$iSocNetId
132 )
133 ),
134 array($arParams['OPER_VAR'] => 'rename')
135 ),
136 'PARAMS' => array(
137 'width' => 400,
138 'height' => 150,
139 'resizable' => false
140 )
141 )
142 );
143
144 $arLinks['rename'] = array(
145 'NAME' => GetMessage('WIKI_PAGE_RENAME'),
146 'TITLE' => GetMessage('WIKI_PAGE_RENAME_TITLE'),
147 'CURRENT' => in_array('rename', $arPage),
148 'LINK' => 'javascript:'.$url,
149 'ID' => 'rename',
150 'TYPE' => 'page',
151 );
152
153 if (self::IsDeleteable())
154 {
155 $url = $APPLICATION->GetPopupLink(
156 array(
157 'URL' => CHTTP::urlAddParams(
158 CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_POST_EDIT'],
159 array(
160 'wiki_name' => $arParams['ELEMENT_ID'],
161 'group_id' => CWikiSocnet::$iSocNetId
162 )
163 ),
164 array($arParams['OPER_VAR'] => 'delete')
165 ),
166 'PARAMS' => array(
167 'width' => 400,
168 'height' => 150,
169 'resizable' => false
170 )
171 )
172 );
173
174 $arLinks['delete'] = array(
175 'NAME' => GetMessage('PAGE_DELETE'),
176 'TITLE' => GetMessage('PAGE_DELETE_TITLE'),
177 'CURRENT' => in_array('delete', $arPage),
178 'LINK' => 'javascript:'.$url,
179 'ID' => 'delete',
180 'TYPE' => 'edit',
181 'IS_RED' => 'N'
182 );
183 }
184 }
185
186
204 }
205
206 return $arLinks;
207 }
208
209 static function IsReadable()
210 {
211 return self::CheckAccess('view');
212 }
213
214 static function IsWriteable()
215 {
216 return self::CheckAccess('write');
217 }
218
219 static function isAllowHTML()
220 {
221 if (COption::GetOptionString('wiki', 'allow_html', 'Y') == 'N')
222 return false;
223
224 if (!$GLOBALS['USER']->IsAuthorized())
225 return false;
226
227 return true;
228 }
229
230 static function IsDeleteable()
231 {
232 return self::CheckAccess('delete');
233 }
234
235 static function CheckAccess($access = 'view')
236 {
238
239 if ($USER->IsAdmin())
240 return true;
241
243 {
244 $arSonetGroup = CSocNetGroup::GetByID(CWikiSocnet::$iSocNetId);
245 if ($arSonetGroup && CSocNetUser::IsCurrentUserModuleAdmin($arSonetGroup['SITE_ID']))
246 return true;
247
248 if (!CSocNetFeaturesPerms::CanPerformOperation($USER->GetID(), SONET_ENTITY_GROUP, CWikiSocnet::$iSocNetId, 'wiki', $access))
249 return false;
250
251 return true;
252 }
253 else
254 {
255 $letter = 'R';
256 $letterI = 'R';
257 switch ($access)
258 {
259 case 'write': $letter = 'W'; $letterI = 'W'; break;
260 case 'delete': $letter = 'Y'; $letterI = 'W'; break;
261 case 'perm': $letter = 'Z'; $letterI = 'X'; break;
262 }
263
264 $wikiModulePermission = $APPLICATION->GetGroupRight('wiki');
265 $iblockPermission = CIBlock::GetPermission($arParams['IBLOCK_ID']);
266 return $wikiModulePermission >= $letter && $iblockPermission >= $letterI;
267 }
268 }
269
270 static function CheckServicePage($NAME, &$SERVICE_NAME)
271 {
272 $arStream = array('category', mb_strtolower(GetMessage('CATEGORY_NAME')));
273 $arSplit = explode(':', $NAME);
274
275 if (count($arSplit) >= 2)
276 {
277 $SERVICE_PAGE = mb_strtolower($arSplit[0]);
278 if (in_array($SERVICE_PAGE, $arStream))
279 {
280 unset($arSplit[0]);
281 $SERVICE_NAME = implode(':', $arSplit);
282 return $SERVICE_PAGE;
283 }
284 else
285 return '';
286 }
287 else
288 return '';
289 }
290
291 static function IsCategoryPage($NAME, &$CATEGORY_NAME)
292 {
293 $sServiceName = self::CheckServicePage($NAME, $CATEGORY_NAME);
294 return ($sServiceName == 'category' || $sServiceName == mb_strtolower(GetMessage('CATEGORY_NAME')));
295 }
296
297 static function OnBeforeIndex($arFields)
298 {
299 static $groupSiteList = array();
300
301 $arFields['NAME'] = preg_replace('/^category:/iu', GetMessage('CATEGORY_NAME').':', $arFields['NAME']);
302 $CWikiParser = new CWikiParser();
303 $arFields['BODY'] = $CWikiParser->parseForSearch($arFields['BODY']);
304
305 if (
306 isset($arFields['MODULE_ID'])
307 && $arFields['MODULE_ID'] == 'socialnetwork'
308 && isset($arFields['PARAMS'])
309 && isset($arFields['PARAMS']['socnet_group'])
310 && intval($arFields['PARAMS']['socnet_group']) > 0
311 && \Bitrix\Main\ModuleManager::isModuleInstalled('extranet')
312 )
313 {
314 $url = false;
315 if (
316 is_array($arFields['SITE_ID'])
317 && count($arFields['SITE_ID']) == 1
318 )
319 {
320 $siteId = key($arFields['SITE_ID']);
321 $url = $arFields['SITE_ID'][$siteId];
322
323 if (!empty($url))
324 {
325 $url = str_replace(COption::getOptionString("socialnetwork", "workgroups_page", "/workgroups/", $siteId), "#GROUPS_PATH#", $url);
326 }
327 }
328
329 if (!empty($url))
330 {
331 $sonetGroupId = intval($arFields['PARAMS']['socnet_group']);
332
333 $siteIdList = array();
334
335 if (
336 !isset($groupSiteList[$sonetGroupId])
337 && \Bitrix\Main\Loader::includeModule('socialnetwork')
338 )
339 {
340 $groupSiteList[$sonetGroupId] = array();
341 $res = CSocNetGroup::getSite($sonetGroupId);
342 while ($site = $res->fetch())
343 {
344 $groupSiteList[$sonetGroupId][] = $site['SITE_ID'];
345 }
346 }
347
348 if (isset($groupSiteList[$sonetGroupId]))
349 {
350 $siteIdList = $groupSiteList[$sonetGroupId];
351 }
352
353 $extranetGroup = (
354 !empty($siteIdList)
356 && in_array(CExtranet::getExtranetSiteId(), $siteIdList)
357 );
358
359 if ($extranetGroup)
360 {
361 foreach($siteIdList as $siteId)
362 {
363 $arFields['SITE_ID'][$siteId] = str_replace("#GROUPS_PATH#", COption::getOptionString("socialnetwork", "workgroups_page", "/workgroups/", $siteId), $url);
364 }
365 }
366 }
367 }
368
369 return $arFields;
370 }
371
372 static function GetUserLogin($arUserData = array(), $nameTemplate = "")
373 {
374 global $USER;
375
376 if (empty($nameTemplate))
377 $nameTemplate = CSite::GetNameFormat(false);
378
379 if (!empty($arUserData))
380 {
381 $userLogin = isset($arUserData['USER_LOGIN']) ? $arUserData['USER_LOGIN'] : $arUserData['LOGIN'];
382 $userFName = isset($arUserData['USER_NAME']) ? $arUserData['USER_NAME'] : $arUserData['NAME'];
383 $userLName = isset($arUserData['USER_LAST_NAME']) ? $arUserData['USER_LAST_NAME'] : $arUserData['LAST_NAME'];
384 $userSName = isset($arUserData['USER_SECOND_NAME']) ? $arUserData['USER_SECOND_NAME'] : $arUserData['SECOND_NAME'];
385 }
386 else
387 {
388 $userLogin = $USER->GetLogin();
389 $userFName = $USER->GetFirstName();
390 $userLName = $USER->GetLastName();
391 $userSName = $USER->GetSecondName();
392 }
393
394 $userLogin = CUser::FormatName($nameTemplate, array("NAME" => $userFName, "LAST_NAME" => $userLName, "SECOND_NAME" => $userSName, "LOGIN" => $userLogin ));
395
396 return $userLogin;
397 }
398
399 static function htmlspecialcharsback($str, $end = true)
400 {
401 $str = rawurldecode($str);
402 while(mb_strpos($str, '&amp;') !== false)
404 if($end)
406 return $str;
407 }
408
410 {
411 static $search = array("&lt;", "&gt;", "&quot;", "&apos;", "&#039;","&amp;");
412 static $replace = array("<", ">", "\"", "'", "'","&");
413 return str_replace($search, $replace, $str);
414 }
415
424 static function SetCommentPath($forumID, $rightPath, $urlRewriterPath)
425 {
426 if (!$forumID || !CModule::IncludeModule('forum') || !$rightPath || !$urlRewriterPath)
427 return false;
428
429 $arRewriter = CUrlRewriter::GetList(array("PATH"=>$urlRewriterPath)); //http://jabber.bx/view.php?id=25340
430
431 if(!is_array($arRewriter) || empty($arRewriter))
432 return false;
433
434 $rewriteCondition = str_replace(array("#","^"),"",$arRewriter[0]["CONDITION"]);
435 $rightCommentsPath = $rewriteCondition.$rightPath;
436
437 $arActualCommentsPath = CWikiUtils::GetCommentPath($forumID);
438
439 if(!is_array($arActualCommentsPath))
440 return false;
441
442 $arUpdateForum = array();
443
444 foreach ($arActualCommentsPath as $site => $path)
445 if($path!=$rightCommentsPath)
446 $arUpdateForum["SITES"][$site] = $rightCommentsPath;
447
448 if(!empty($arUpdateForum))
449 CForumNew::Update($forumID, $arUpdateForum);
450
451 return true;
452 }
453
460 static function GetCommentPath($forumID)
461 {
462 $arForumPath=array();
463
464 if (!$forumID || !CModule::IncludeModule('forum'))
465 return false;
466
467 $arSites = CForumNew::GetSites($forumID);
468
469 if(!is_array($arSites))
470 return false;
471
472 foreach ($arSites as $siteID => $forumUrl)
473 $arForumPath[$siteID] = $forumUrl;
474
475 return $arForumPath;
476 }
477
478 static function UnlocalizeCategoryName($categoryName)
479 {
480 return preg_replace('/^'.GetMessage('CATEGORY_NAME').':/iu', 'category:', $categoryName);
481 }
482
483 static function GetTagsAsLinks($arTags)
484 {
485 if(!is_array($arTags) || empty($arTags))
486 return "";
487
488 $strRet = "";
489 $_i = 1;
490 foreach ($arTags as $arTag)
491 {
492 if (isset($arTag['LINK'])):
493 $strRet .= "<a title='".$arTag['NAME']."' href='".$arTag['LINK']."'>".$arTag['NAME']."</a>";
494 else :
495 $strRet .= $arTag['NAME'];
496 endif;
497
498 if ($_i < count($arTags))
499 $strRet .= ' | ';
500 $_i++;
501 }
502
503 return $strRet;
504 }
505
506 static function isCategoryVirtual($name)
507 {
508 $result = false;
509 $sCatName = '';
510
511 if(CWikiUtils::IsCategoryPage($name, $sCatName))
513
514 return $result;
515 }
516
517 static function isVirtualCategoryExist($categoryName)
518 {
519 $result = false;
520
521 if($categoryName == GetMessage("WIKI_CATEGORY_NOCAT") || $categoryName == GetMessage("WIKI_CATEGORY_ALL"))
522 {
523 $result = true;
524 }
525 else
526 {
527 $categories = new CWikiCategories;
528 $rsHandlers = GetModuleEvents("wiki", "OnCategoryListCreate");
529
530 while($arHandler = $rsHandlers->Fetch())
531 ExecuteModuleEventEx($arHandler, array(&$categories, ''));
532
533 $arCats = $categories->GetItems();
534
535 foreach ($arCats as $category)
536 {
537 if($category["NAME"] == $categoryName)
538 {
539 $result = true;
540 break;
541 }
542 }
543 }
544
545 return $result;
546 }
547}
548
549?>
$arParams
Определения access_dialog.php:21
$path
Определения access_edit.php:21
$arSites
Определения options.php:15
global $APPLICATION
Определения include.php:80
static includeModule($moduleName)
Определения loader.php:67
static GetSites($ID)
Определения forum_new.php:411
static Update($ID, $arFields, $bReindex=true)
Определения forum_new.php:210
static urlAddParams($url, $add_params, $options=[])
Определения http.php:521
static GetList($arFilter=array(), $arOrder=array())
Определения urlrewriter.php:16
Определения wiki_parser.php:6
static IsSocNet()
Определения wiki_socnet.php:97
static $iSocNetId
Определения wiki_socnet.php:17
Определения wiki_utils.php:6
static CheckAccess($access='view')
Определения wiki_utils.php:235
static htmlspecialchars_decode($str)
Определения wiki_utils.php:409
static GetUserLogin($arUserData=array(), $nameTemplate="")
Определения wiki_utils.php:372
static UnlocalizeCategoryName($categoryName)
Определения wiki_utils.php:478
static CheckServicePage($NAME, &$SERVICE_NAME)
Определения wiki_utils.php:270
static GetTagsAsLinks($arTags)
Определения wiki_utils.php:483
static OnBeforeIndex($arFields)
Определения wiki_utils.php:297
static SetCommentPath($forumID, $rightPath, $urlRewriterPath)
Определения wiki_utils.php:424
static isCategoryVirtual($name)
Определения wiki_utils.php:506
static isAllowHTML()
Определения wiki_utils.php:219
static IsCategoryPage($NAME, &$CATEGORY_NAME)
Определения wiki_utils.php:291
static isVirtualCategoryExist($categoryName)
Определения wiki_utils.php:517
static htmlspecialcharsback($str, $end=true)
Определения wiki_utils.php:399
static getRightsLinks($arPage)
Определения wiki_utils.php:7
static IsWriteable()
Определения wiki_utils.php:214
static GetCommentPath($forumID)
Определения wiki_utils.php:460
static IsDeleteable()
Определения wiki_utils.php:230
static IsReadable()
Определения wiki_utils.php:209
$str
Определения commerceml2.php:63
$arFields
Определения dblapprove.php:5
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$result
Определения get_property_values.php:14
$siteID
Определения cron_frame.php:12
if(preg_match('/^ else[a-z0-9_]{2}$/i', $siteID)===1)
Определения cron_frame.php:23
global $USER
Определения csv_new_run.php:40
endif
Определения csv_new_setup.php:990
if(!is_array($deviceNotifyCodes)) $access
Определения options.php:174
$siteId
Определения ajax.php:8
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
IsModuleInstalled($module_id)
Определения tools.php:5301
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$name
Определения menu_edit.php:35
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
$siteIdList
Определения options.php:46
const SONET_ENTITY_GROUP
Определения include.php:117
$GLOBALS['_____370096793']
Определения update_client.php:1
$url
Определения iframe.php:7
$site
Определения yandex_run.php:614