1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
functions.php
См. документацию.
1<?php
2
5
7
9{
10 var $smiles = array();
11 var $allow_img_ext = "gif|jpg|jpeg|png";
13 "width" => 300,
14 "height" => 300,
15 "template" => "popup_image");
16 var $LAST_ERROR = "";
17 var $path_to_smile = false;
18 var $quote_error = 0;
19 var $quote_open = 0;
21 var $MaxStringLen = 125;
22 var $code_error = 0;
23 var $code_open = 0;
24 var $code_closed = 0;
25 var $CacheTime = false;
27 0 => 40, //"xx-small"
28 1 => 60, //"x-small"
29 2 => 80, //"small"
30 3 => 100, //"medium"
31 4 => 120, //"large"
32 5 => 140, //"x-large"
33 7 => 160); //"xx-large"
34 var $word_separator = "\s.,;:!?\#\-\*\|\[\]\‍(\‍)\{\}";
35
36 var $matchNum = 0;
37 var $matchNum2 = 0;
38 var $matchType = "html";
39 var $matchType2 = "";
40 var $matchType3 = "";
41 var $matchType4 = "";
42
43 function sonet_sortlen($a, $b)
44 {
45 if (mb_strlen($a["TYPING"]) == mb_strlen($b["TYPING"]))
46 {
47 return 0;
48 }
49 return (mb_strlen($a["TYPING"]) > mb_strlen($b["TYPING"])) ? -1 : 1;
50 }
51
52 public function __construct($strLang = False, $pathToSmile = false)
53 {
54 global $DB, $CACHE_MANAGER;
55 static $arSmiles = array();
56
57 $this->smiles = array();
58 if ($strLang === False)
59 $strLang = LANGUAGE_ID;
60 $this->path_to_smile = $pathToSmile;
61
62 if($CACHE_MANAGER->Read(604800, "b_sonet_smile"))
63 {
64 $arSmiles = $CACHE_MANAGER->Get("b_sonet_smile");
65 }
66 else
67 {
68 $db_res = CSocNetSmile::GetList(array("SORT" => "ASC"), array("SMILE_TYPE" => "S"/*, "LANG_LID" => $strLang*/), false, false, Array("LANG_LID", "ID", "IMAGE", "DESCRIPTION", "TYPING", "SMILE_TYPE", "SORT"));
69 while ($res = $db_res->Fetch())
70 {
71 $tok = strtok($res['TYPING'], " ");
72 while ($tok !== false)
73 {
74 $arSmiles[$res['LANG_LID']][] = array(
75 'TYPING' => $tok,
76 'IMAGE' => stripslashes($res['IMAGE']), // stripslashes is not needed here
77 'DESCRIPTION' => stripslashes($res['NAME']) // stripslashes is not needed here
78 );
79 $tok = strtok(" ");
80 }
81 }
82
83 foreach ($arSmiles as $LID => $arSmilesLID)
84 {
85 uasort($arSmilesLID, array('CSocNetTextParser', 'sonet_sortlen'));
86 $arSmiles[$LID] = $arSmilesLID;
87 }
88
89 $CACHE_MANAGER->Set("b_sonet_smile", $arSmiles);
90 }
91 $this->smiles = $arSmiles[$strLang] ?? null;
92 }
93
94 function convert($text, $bPreview = True, $arImages = array(), $allow = array("HTML" => "N", "ANCHOR" => "Y", "BIU" => "Y", "IMG" => "Y", "QUOTE" => "Y", "CODE" => "Y", "FONT" => "Y", "LIST" => "Y", "SMILES" => "Y", "NL2BR" => "N", "VIDEO" => "Y"), $type = "html") //, "KEEP_AMP" => "N"
95 {
96 global $DB;
97
98 $text = preg_replace("#([?&;])PHPSESSID=([0-9a-zA-Z]{32})#is", "\\1PHPSESSID1=", $text);
99 $type = ($type == "rss" ? "rss" : "html");
100
101 $this->quote_error = 0;
102 $this->quote_open = 0;
103 $this->quote_closed = 0;
104 $this->code_error = 0;
105 $this->code_open = 0;
106 $this->code_closed = 0;
107 if ($allow["HTML"] != "Y")
108 {
109 if ($allow["CODE"]=="Y")
110 {
111 $text = str_replace(array("\001", "\002", chr(5), chr(6), "'", "\""), array("", "", "", "", chr(5), chr(6)), $text);
112 $text = preg_replace(
113 array(
114 "#<code(\s+[^>]*>|>)(.+?)</code(\s+[^>]*>|>)#isu",
115 "/\[code([^\]])*\]/isu",
116 "/\[\/code([^\]])*\]/isu"),
117 array(
118 "[code]\\2[/code]",
119 "\001",
120 "\002",
121 ),
122 $text
123 );
124 $this->matchNum = 2;
125 $text = preg_replace_callback(
126 "/(?<=[\001])(([^\002]+))(?=([\002]))/isu",
127 array($this, "pre_convert_code_tag_callback"),
128 $text
129 );
130 $text = preg_replace(
131 array(
132 "/\001/",
133 "/\002/"),
134 array(
135 "[code]",
136 "[/code]"
137 ), $text
138 );
139 $text = str_replace(array(chr(5), chr(6)), array("'", "\""), $text);
140 }
141 if ($allow["ANCHOR"]=="Y")
142 {
143 $text = preg_replace(
144 array(
145 "#<a[^>]+href\s*=\s*[\"]+(([^\"])+)[\"]+[^>]*>(.+?)</a[^>]*>#isu",
146 "#<a[^>]+href\s*=\s*[\']+(([^\'])+)[\']+[^>]*>(.+?)</a[^>]*>#isu",
147 "#<a[^>]+href\s*=\s*(([^\'\">])+)>(.+?)</a[^>]*>#isu"),
148 "[url=\\1]\\3[/url]", $text);
149 }
150 if ($allow["BIU"]=="Y")
151 {
152 $text = preg_replace(
153 array(
154 "/<b([^>]*)>(.+?)<\/b([^>]*)>/isu",
155 "/<u([^>]*)>(.+?)<\/u([^>]*)>/isu",
156 "/<s([^>a-z]*)>(.+?)<\/s([^>a-z]*)>/isu",
157 "/<i([^>]*)>(.+?)<\/i([^>]*)>/isu"),
158 array(
159 "[b]\\2[/b]",
160 "[u]\\2[/u]",
161 "[s]\\2[/s]",
162 "[i]\\2[/i]"),
163 $text);
164 }
165 if ($allow["IMG"]=="Y")
166 {
167 $text = preg_replace(
168 "#<img[^>]+src\s*=[\s\"']*(((http|https|ftp)://[.-_:a-z0-9@]+)*(\/[-_/=:.a-z0-9@{}&?%]+)+)[\s\"']*[^>]*>#isu",
169 "[img]\\1[/img]", $text);
170 }
171 if ($allow["QUOTE"]=="Y")
172 {
173 //$text = preg_replace("#(<quote(.*?)>(.*)</quote(.*?)>)#is", "[quote]\\3[/quote]", $text);
174 $text = preg_replace("#<(/?)quote(.*?)>#is", "[\\1quote]", $text);
175 }
176 if ($allow["FONT"]=="Y")
177 {
178 $text = preg_replace(
179 array(
180 "/<font[^>]+size\s*=[\s\"']*([0-9]+)[\s\"']*[^>]*>(.+?)<\/font[^>]*>/isu",
181 "/<font[^>]+color\s*=[\s\"']*(\#[a-f0-9]{6})[^>]*>(.+?)<\/font[^>]*>/isu",
182 "/<font[^>]+face\s*=[\s\"']*([a-z\s\-]+)[\s\"']*[^>]*>(.+?)<\/font[^>]*>/isu"),
183 array(
184 "[size=\\1]\\2[/size]",
185 "[color=\\1]\\2[/color]",
186 "[font=\\1]\\2[/font]"),
187 $text);
188 }
189 if ($allow["LIST"]=="Y")
190 {
191 $text = preg_replace(
192 array(
193 "/<ul((\s[^>]*)|(\s*))>(.+?)<\/ul([^>]*)>/isu",
194 "/<li((\s[^>]*)|(\s*))>/isu"),
195 array(
196 "[list]\\4[/list]",
197 "[*]"),
198 $text);
199 }
200 if ($text <> '')
201 {
202 $text = str_replace(
203 array("<", ">", "\""),
204 array("&lt;", "&gt;", "&quot;"),
205 $text);
206 }
207 }
208 elseif ($allow["NL2BR"]=="Y")
209 {
210 $text = str_replace("\n", "<br />", $text);
211 }
212
213
214 if ($allow["ANCHOR"]=="Y")
215 {
216 $word_separator = str_replace("\]", "", $this->word_separator);
217 $text = preg_replace("'(?<=^|[".$word_separator."]|\s)((http|https|news|ftp|aim|mailto)://[\.\-\_\:a-z0-9\@]([^\"\s\'\[\]\{\}\‍(\‍)])*)'is",
218 "[url]\\1[/url]", $text);
219 }
220 if ($allow["CODE"] == "Y")
221 {
222 $text = preg_replace(
223 array(
224 "/\[code([^\]])*\]/isu",
225 "/\[\/code([^\]])*\]/isu"
226 ),
227 array(
228 "\001",
229 "\002"
230 ),
231 $text
232 );
233 $this->matchNum = 2;
234 $this->matchType = $type;
235 $text = preg_replace_callback(
236 "/(\001)([^\002]+)(\002)/isu",
237 array($this, "convert_code_tag_callback"),
238 $text
239 );
240 $text = preg_replace(
241 array(
242 "/\001/",
243 "/\002/"
244 ),
245 array(
246 "[code]",
247 "[/code]"
248 ),
249 $text
250 );
251 }
252 if ($allow["QUOTE"] == "Y")
253 {
254 $this->matchNum = 1;
255 $this->matchType = $type;
256 $text = preg_replace_callback(
257 "#(\[quote([^\]])*\](.*)\[/quote([^\]])*\])#is",
258 array($this, "convert_quote_tag_callback"),
259 $text
260 );
261 }
262 if ($allow["IMG"]=="Y")
263 {
264 $this->matchNum = 1;
265 $this->matchType = $type;
266 $text = preg_replace_callback(
267 "#\[img\](.+?)\[/img\]#i",
268 array($this, "convert_image_tag_callback"),
269 $text
270 );
271 }
272 if ($allow["ANCHOR"] == "Y")
273 {
274 $this->matchNum = 1;
275 $this->matchNum2 = 1;
276 $text = preg_replace_callback(
277 "/\[url\]([^\]]+?)\[\/url\]/iu",
278 array($this, "convert_anchor_tag_callback"),
279 $text
280 );
281 $this->matchNum = 1;
282 $this->matchNum2 = 2;
283 $text = preg_replace_callback(
284 "/\[url\s*=\s*([^\]]+?)\s*\](.*?)\[\/url\]/iu",
285 array($this, "convert_anchor_tag_callback"),
286 $text
287 );
288 }
289 if ($allow["BIU"]=="Y")
290 {
291 $text = preg_replace(
292 array(
293 "/\[b\](.+?)\[\/b\]/isu",
294 "/\[i\](.+?)\[\/i\]/isu",
295 "/\[s\](.+?)\[\/s\]/isu",
296 "/\[u\](.+?)\[\/u\]/isu"),
297 array(
298 "<b>\\1</b>",
299 "<i>\\1</i>",
300 "<s>\\1</s>",
301 "<u>\\1</u>"), $text);
302 }
303 if ($allow["LIST"]=="Y")
304 {
305 $text = preg_replace(
306 array(
307 "/\[list\](.+?)\[\/list\]/isu",
308 "/\[\*\]/u"),
309 array(
310 "<ul>\\1</ul>",
311 "<li>"),
312 $text);
313 }
314 if ($allow["FONT"]=="Y")
315 {
316 while (preg_match("/\[size\s*=\s*([^\]]+)\](.+?)\[\/size\]/isu", $text))
317 {
318 $this->matchNum = 1;
319 $this->matchNum2 = 2;
320 $this->matchType = 'size';
321 $text = preg_replace_callback(
322 "/\[size\s*=\s*([^\]]+)\](.+?)\[\/size\]/isu",
323 array($this, "convert_font_attr_callback"),
324 $text
325 );
326 }
327 while (preg_match("/\[font\s*=\s*([^\]]+)\](.*?)\[\/font\]/isu", $text))
328 {
329 $this->matchNum = 1;
330 $this->matchNum2 = 2;
331 $this->matchType = 'font';
332 $text = preg_replace_callback(
333 "/\[font\s*=\s*([^\]]+)\](.*?)\[\/font\]/isu",
334 array($this, "convert_font_attr_callback"),
335 $text
336 );
337 }
338 while (preg_match("/\[color\s*=\s*([^\]]+)\](.+?)\[\/color\]/isu", $text))
339 {
340 $this->matchNum = 1;
341 $this->matchNum2 = 2;
342 $this->matchType = 'color';
343 $text = preg_replace_callback(
344 "/\[color\s*=\s*([^\]]+)\](.+?)\[\/color\]/isu",
345 array($this, "convert_font_attr_callback"),
346 $text
347 );
348 }
349 }
350
351 $text = str_replace(
352 array(
353 "(c)", "(C)",
354 "(tm)", "(TM)", "(Tm)", "(tM)",
355 "(r)", "(R)",
356 "\n"
357 ),
358 array(
359 "&copy;", "&copy;",
360 "&#153;", "&#153;", "&#153;", "&#153;",
361 "&reg;", "&reg;",
362 "<br />"
363 ),
364 $text
365 );
366 if ($this->MaxStringLen > 0)
367 {
368 $this->matchNum = 1;
369 $text = preg_replace_callback(
370 "/(?<=^|>)([^<]+)(?=<|$)/isu",
371 array($this, "part_long_words_callback"),
372 $text
373 );
374 }
375 if ($allow["SMILES"]=="Y")
376 {
377 if (
378 is_array($this->smiles)
379 && !empty($this->smiles)
380 )
381 {
382 if ($this->path_to_smile !== false)
383 {
385 }
386 else
387 {
388 $path_to_smile = "/bitrix/images/socialnetwork/smile/";
389 }
390
391 $arSmiles = array();
392 $arQuoted = array();
393 foreach ($this->smiles as $a_id => $row)
394 {
395 if($row["TYPING"] == '' || $row["IMAGE"] == '')
396 continue;
397 $typing = htmlspecialcharsbx($row["TYPING"]);
398 $arSmiles[$typing] = '<img src="'.$path_to_smile.$row["IMAGE"].'" border="0" alt="smile'.$typing.'" title="'.htmlspecialcharsbx($row["DESCRIPTION"]).'" />';
399 $arQuoted[] = preg_quote($typing, "/");
400 }
401 $ar = preg_split("/(?<=[\s>])(".implode("|", $arQuoted).")/u", " ".$text, -1, PREG_SPLIT_DELIM_CAPTURE);
402 $text = "";
403 foreach($ar as $piece)
404 {
405 if(array_key_exists($piece, $arSmiles))
406 $text .= $arSmiles[$piece];
407 else
408 $text .= $piece;
409 }
410 }
411 }
412 if (($allow["VIDEO"] ?? null) === "Y")
413 {
414 while (preg_match("/\[video(.+?)\](.+?)\[\/video[\s]*\]/isu", $text))
415 {
416 $this->matchNum = 1;
417 $this->matchNum2 = 2;
418 $text = preg_replace_callback(
419 "/\[video([^\]]*)\](.+?)\[\/video[\s]*\]/isu",
420 array($this, "convert_video_callback"),
421 $text
422 );
423 }
424 }
425 return trim($text);
426 }
427
428 public static function killAllTags($text)
429 {
430 if (method_exists("CTextParser", "clearAllTags"))
432 $text = strip_tags($text);
433 $text = preg_replace(
434 array(
435 "/<(\/?)(quote|code|font|color)([^>]*)>/isu",
436 "/\[(\/?)(b|u|i|list|code|quote|font|color|url|img)([^\]]*)\]/isu"),
437 "",
438 $text);
439 return $text;
440 }
441
443 {
444 $text = Trim($text);
445 if ($text == '') return "";
446 $arPattern = array();
447 $arReplace = array();
448
449 $arPattern[] = "/\[(code|quote)(.*?)\]/isu";
450 $arReplace[] = "\n>================== \\1 ===================\n";
451
452 $arPattern[] = "/\[\/(code|quote)(.*?)\]/isu";
453 $arReplace[] = "\n>===========================================\n";
454
455 $arPattern[] = "/<WBR[\s\/]?>/isu";
456 $arReplace[] = "";
457
458 $arPattern[] = "/^(\r|\n)+?(.*)$/";
459 $arReplace[] = "\\2";
460
461 $arPattern[] = "/\[b\](.+?)\[\/b\]/isu";
462 $arReplace[] = "\\1";
463
464 $arPattern[] = "/\[i\](.+?)\[\/i\]/isu";
465 $arReplace[] = "\\1";
466
467 $arPattern[] = "/\[u\](.+?)\[\/u\]/isu";
468 $arReplace[] = "_\\1_";
469
470 $arPattern[] = "/\[(\/?)(color|font|size)([^\]]*)\]/isu";
471 $arReplace[] = "";
472
473 $arPattern[] = "/\[url\](\S+?)\[\/url\]/isu";
474 $arReplace[] = "(URL: \\1 )";
475
476 $arPattern[] = "/\[url\s*=\s*(\S+?)\s*\](.*?)\[\/url\]/isu";
477 $arReplace[] = "\\2 (URL: \\1 )";
478
479 $arPattern[] = "/\[img\](.+?)\[\/img\]/isu";
480 $arReplace[] = "(IMAGE: \\1)";
481
482 $arPattern[] = "/\[video([^\]]*)\](.+?)\[\/video[\s]*\]/isu";
483 $arReplace[] = "(VIDEO: \\2)";
484
485 $arPattern[] = "/\[(\/?)list\]/isu";
486 $arReplace[] = "\n";
487 $text = preg_replace($arPattern, $arReplace, $text);
488 $text = str_replace("&shy;", "", $text);
489
490 return $text;
491 }
492
494 {
495 global $APPLICATION;
496
497 if ($path == '')
498 return "";
499
500 preg_match("/width\=([0-9]+)/is", $params, $width);
501 preg_match("/height\=([0-9]+)/is", $params, $height);
502 $width = intval($width[1]);
503 $width = ($width > 0 ? $width : 400);
504 $height = intval($height[1]);
505 $height = ($height > 0 ? $height : 300);
506
507 ob_start();
508 $APPLICATION->IncludeComponent(
509 "bitrix:player", "",
510 Array(
511 "PLAYER_TYPE" => "auto",
512 "USE_PLAYLIST" => "N",
513 "PATH" => $path,
514 "WIDTH" => $width,
515 "HEIGHT" => $height,
516 "PREVIEW" => "",
517 "LOGO" => "",
518 "FULLSCREEN" => "Y",
519 "SKIN_PATH" => "/bitrix/components/bitrix/player/mediaplayer/skins",
520 "SKIN" => "bitrix.swf",
521 "CONTROLBAR" => "bottom",
522 "WMODE" => "transparent",
523 "HIDE_MENU" => "N",
524 "SHOW_CONTROLS" => "Y",
525 "SHOW_STOP" => "N",
526 "SHOW_DIGITS" => "Y",
527 "CONTROLS_BGCOLOR" => "FFFFFF",
528 "CONTROLS_COLOR" => "000000",
529 "CONTROLS_OVER_COLOR" => "000000",
530 "SCREEN_COLOR" => "000000",
531 "AUTOSTART" => "N",
532 "REPEAT" => "N",
533 "VOLUME" => "90",
534 "DISPLAY_CLICK" => "play",
535 "MUTE" => "N",
536 "HIGH_QUALITY" => "Y",
537 "ADVANCED_MODE_SETTINGS" => "N",
538 "BUFFER_LENGTH" => "10",
539 "DOWNLOAD_LINK" => "",
540 "DOWNLOAD_LINK_TARGET" => "_self"));
541 $video = ob_get_contents();
542 ob_end_clean();
543 return $video;
544 }
545
546 private function convert_video_callback($m)
547 {
548 return $this->convert_video($m[$this->matchNum], $m[$this->matchNum2]);
549 }
550
551 function convert_emoticon($code = "", $image = "", $description = "", $servername = "")
552 {
553 if ($code == '' || $image == '') return;
554 $code = stripslashes($code);
555 $description = stripslashes($description);
556 $image = stripslashes($image);
557 if ($this->path_to_smile !== false)
558 return '<img src="'.$servername.$this->path_to_smile.$image.'" border="0" alt="smile'.$code.'" title="'.$description.'" />';
559 return '<img src="'.$servername.'/bitrix/images/socialnetwork/smile/'.$image.'" border="0" alt="smile'.$code.'" title="'.$description.'" />';
560 }
561
562 private function convert_emoticon_callback($m)
563 {
564 return $this->convert_emoticon($this->matchType, $this->matchType2, $this->matchType3, $this->matchType4);
565 }
566
568 {
569 if ($text == '')
570 {
571 return;
572 }
573 $text = str_replace(
574 array("&", "<", ">", "[", "]"),
575 array("&amp;", "&lt;", "&gt;", "&#91;", "&#93;"),
576 $text
577 );
578 return $text;
579 }
580
581 private function pre_convert_code_tag_callback($m)
582 {
583 return $this->pre_convert_code_tag($m[$this->matchNum]);
584 }
585
586 function convert_code_tag($text = "", $type = "html")
587 {
588 if ($text == '') return;
589 $type = ($type == "rss" ? "rss" : "html");
590 $text = str_replace(array("<", ">", "\\r", "\\n", "\\"), array("&lt;", "&gt;", "&#92;r", "&#92;n", "&#92;"), $text);
591 $text = stripslashes($text);
592 $text = str_replace(array(" ", "\t", ), array("&nbsp;&nbsp;", "&nbsp;&nbsp;&nbsp;"), $text);
593 $txt = $text;
594
595 $this->matchType = 'code';
596 $this->matchType2 = $type;
597 $txt = preg_replace_callback(
598 "/\[code\]/iu",
599 array($this, "convert_open_tag_callback"),
600 $txt
601 );
602 $this->matchType = 'code';
603 $txt = preg_replace_callback(
604 "/\[\/code\]/iu",
605 array($this, "convert_close_tag_callback"),
606 $txt
607 );
608
609 if (
610 ($this->code_open == $this->code_closed)
611 && ($this->code_error == 0)
612 )
613 {
614 return $txt;
615 }
616 return $text;
617 }
618
619 private function convert_code_tag_callback($m)
620 {
621 return $this->convert_code_tag('[code]'.$m[$this->matchNum].'[/code]', $this->matchType);
622 }
623
624 function convert_quote_tag($text = "", $type = "html")
625 {
626 if ($text == '') return;
627 $txt = $text;
628 $type = ($type == "rss" ? "rss" : "html");
629
630 $this->matchType = 'quote';
631 $this->matchType2 = $type;
632 $txt = preg_replace_callback(
633 "/\[quote([^\]])*\]/iu",
634 array($this, "convert_open_tag_callback"),
635 $txt
636 );
637 $this->matchType = 'quote';
638 $txt = preg_replace_callback(
639 "/\[\/quote([^\]])*\]/iu",
640 array($this, "convert_close_tag_callback"),
641 $txt
642 );
643
644 if (
645 ($this->quote_open == $this->quote_closed)
646 && ($this->quote_error == 0)
647 )
648 {
649 return $txt;
650 }
651 return $text;
652 }
653
654 private function convert_quote_tag_callback($m)
655 {
656 return $this->convert_quote_tag($m[$this->matchNum], $this->matchType);
657 }
658
659 function convert_open_tag($marker = "quote", $type = "html")
660 {
661 $marker = (mb_strtolower($marker) == "code" ? "code" : "quote");
662 $type = ($type == "rss" ? "rss" : "html");
663
664 $this->{$marker."_open"}++;
665 if ($type == "rss")
666 return "\n====".$marker."====\n";
667 return "<table class='sonet-".$marker."'><thead><tr><th>".($marker == "quote" ? GetMessage("SONET_QUOTE") : GetMessage("SONET_CODE"))."</th></tr></thead><tbody><tr><td>";
668 }
669
670 private function convert_open_tag_callback($m)
671 {
672 return $this->convert_open_tag($this->matchType, $this->matchType2);
673 }
674
675 function convert_close_tag($marker = "quote")
676 {
677 $marker = (mb_strtolower($marker) == "code" ? "code" : "quote");
678 $type = ($type == "rss" ? "rss" : "html");
679
680 if ($this->{$marker."_open"} == 0)
681 {
682 $this->{$marker."_error"}++;
683 return;
684 }
685 $this->{$marker."_closed"}++;
686 if ($type == "rss")
687 return "\n=============\n";
688 return "</td></tr></tbody></table>";
689 }
690
691 private function convert_close_tag_callback($m)
692 {
693 return $this->convert_close_tag($this->matchType);
694 }
695
696 function convert_image_tag($url = "", $type = "html")
697 {
698 static $bShowedScript = false;
699 if ($url == '') return;
700 $url = trim($url);
701 $type = (mb_strtolower($type) == "rss" ? "rss" : "html");
702 $extension = preg_replace("/^.*\.(\S+)$/u", "\\1", $url);
703 $extension = mb_strtolower($extension);
704 $extension = preg_quote($extension, "/");
705
706 $bErrorIMG = False;
707 if (preg_match("/[?&;]/u", $url)) $bErrorIMG = True;
708 if (!$bErrorIMG && !preg_match("/$extension(\||\$)/u", $this->allow_img_ext)) $bErrorIMG = True;
709 if (!$bErrorIMG && !preg_match("/^(http|https|ftp|\/)/iu", $url)) $bErrorIMG = True;
710
711 if ($bErrorIMG)
712 {
713 return "[img]".$url."[/img]";
714 }
715
716 return '<img src="'.$url.'" alt="'.GetMessage("FRM_IMAGE_ALT").'" border="0" />';
717 }
718
719 private function convert_image_tag_callback($m)
720 {
721 return $this->convert_image_tag($m[$this->matchNum], $this->matchType);
722 }
723
724 function convert_font_attr($attr, $value = "", $text = "")
725 {
726 if ($text == '') return "";
727 if ($value == '') return $text;
728
729 if ($attr == "size")
730 {
731 $count = count($this->arFontSize);
732 if ($count <= 0)
733 return $text;
734 $value = intval($value >= $count ? ($count - 1) : $value);
735 return "<span style='font-size:".$this->arFontSize[$value]."%;'>".$text."</span>";
736 }
737 else if ($attr == 'color')
738 {
739 $value = preg_replace("/[^\w#]/", "" , $value);
740 return "<font color='".$value."'>".$text."</font>";
741 }
742 else if ($attr == 'font')
743 {
744 $value = preg_replace("/[^\w]/", "" , $value);
745 return "<font face='".$value."'>".$text."</font>";
746 }
747 }
748
749 private function convert_font_attr_callback($m)
750 {
751 return $this->convert_font_attr($this->matchType, $m[$this->matchNum], $m[$this->matchNum2]);
752 }
753
754 // Only for public using
756 {
757 if (
758 $this->MaxStringLen > 0
759 && !empty($text)
760 )
761 {
762 $text = str_replace(array(chr(7), chr(8), chr(34), chr(39)), array("", "", chr(7), chr(8)), $text);
763 $this->matchNum = 1;
764 $text = preg_replace_callback(
765 "/(?<=^|>)([^<]+)(?=<|$)/isu",
766 array($this, "part_long_words_callback"),
767 $text
768 );
769 $text = str_replace(array(chr(7), chr(8)), array(chr(34), chr(39)), $text);
770 }
771 return $text;
772 }
773
775 {
777 if (($this->MaxStringLen > 0) && (trim($str) <> ''))
778 {
779 $str = str_replace(
780 array(chr(1), chr(2), chr(3), chr(4), chr(5), chr(6), "&amp;", "&lt;", "&gt;", "&quot;", "&nbsp;", "&copy;", "&reg;", "&trade;"),
781 array("", "", "", "", "", "", chr(5), "<", ">", chr(6), chr(1), chr(2), chr(3), chr(4)),
782 $str
783 );
784 $this->matchNum = 2;
785 $str = preg_replace_callback(
786 "/(?<=[".$word_separator."]|^)(([^".$word_separator."]+))(?=[".$word_separator."]|$)/isu",
787 array($this, "cut_long_words_callback"),
788 $str
789 );
790 $str = str_replace(
791 array(chr(5), "<", ">", chr(6), chr(1), chr(2), chr(3), chr(4), "&lt;WBR/&gt;", "&lt;WBR&gt;", "&amp;shy;"),
792 array("&amp;", "&lt;", "&gt;", "&quot;", "&nbsp;", "&copy;", "&reg;", "&trade;", "<WBR/>", "<WBR/>", "&shy;"),
793 $str
794 );
795 }
796 return $str;
797 }
798
799 private function part_long_words_callback($m)
800 {
801 return $this->cut_long_words($m[$this->matchNum]);
802 }
803
805 {
806 if (
807 ($this->MaxStringLen > 0)
808 && ($str <> '')
809 )
810 {
811 $str = preg_replace(
812 "/([^ \n\r\t\x01]{".$this->MaxStringLen."})/isu",
813 "\\1<WBR/>&shy;",
814 $str
815 );
816 }
817 return $str;
818 }
819
821 {
822 return $this->cut_long_words($m[$this->matchNum]);
823 }
824
825 function convert_anchor_tag($url, $text, $pref="")
826 {
827 $bCutUrl = True;
828 $text = str_replace("\\\"", "\"", $text);
829 $end = "";
830 if (preg_match("/([\.,\?]|&#33;)$/u", $url, $match))
831 {
832 $end = $match[1];
833 $url = preg_replace("/([\.,\?]|&#33;)$/u", "", $url);
834 $text = preg_replace("/([\.,\?]|&#33;)$/u", "", $text);
835 }
836 if (preg_match("/\[\/(quote|code)/i", $url))
837 return $url;
838 $url = preg_replace(
839 array("/&amp;/u", "/javascript:/iu"),
840 array("&", "java script&#58; ") , $url);
841 if (mb_substr($url, 0, 1) != "/" && !preg_match("/^(http|news|https|ftp|aim|mailto)\:\/\//iu", $url))
842 $url = 'http://'.$url;
843 if (!preg_match("/^((http|https|news|ftp|aim):\/\/[-_:.a-z0-9@]+)*([^\"\'])+$/iu", $url))
844 return $pref.$text." (".$url.")".$end;
845
846 if (preg_match("/^<img\s+src/iu", $text))
847 $bCutUrl = False;
848 $text = preg_replace(
849 array("/&amp;/iu", "/javascript:/iu"),
850 array("&", "javascript&#58; "), $text);
851 if ($bCutUrl && mb_strlen($text) < 55)
852 $bCutUrl = False;
853 if ($bCutUrl && !preg_match("/^(http|ftp|https|news):\/\//iu", $text))
854 $bCutUrl = False;
855
856 if ($bCutUrl)
857 {
858 $stripped = preg_replace("/^(http|ftp|https|news):\/\/(\S+)$/iu", "\\2", $text);
859 $uri_type = preg_replace("/^(http|ftp|https|news):\/\/(\S+)$/iu", "\\1", $text);
860 $text = $uri_type.'://'.mb_substr($stripped, 0, 30).'...'.mb_substr($stripped, -10);
861 }
862
863 return $pref."<a href='".$url."' target='_blank'>".$text."</a>".$end;
864 }
865
867 {
868 return $this->convert_anchor_tag($m[$this->matchNum], $m[$this->matchNum2], '');
869 }
870
871 function convert_to_rss($text, $arImages = Array(), $arAllow = array("HTML" => "N", "ANCHOR" => "Y", "BIU" => "Y", "IMG" => "Y", "QUOTE" => "Y", "CODE" => "Y", "FONT" => "Y", "LIST" => "Y", "SMILES" => "Y", "NL2BR" => "N"), $arParams = array())
872 {
873 global $DB;
874 if (empty($arAllow))
875 $arAllow = array(
876 "HTML" => "N",
877 "ANCHOR" => "Y",
878 "BIU" => "Y",
879 "IMG" => "Y",
880 "QUOTE" => "Y",
881 "CODE" => "Y",
882 "FONT" => "Y",
883 "LIST" => "Y",
884 "SMILES" => "Y",
885 "NL2BR" => "N");
886
887 $this->quote_error = 0;
888 $this->quote_open = 0;
889 $this->quote_closed = 0;
890 $this->code_error = 0;
891 $this->code_open = 0;
892 $this->code_closed = 0;
893 $bAllowSmiles = $arAllow["SMILES"];
894 if ($arAllow["HTML"]!="Y")
895 {
896 $text = preg_replace(
897 array(
898 "#^(.+?)<cut[\s]*(/>|>).*?$#isu",
899 "#^(.+?)\[cut[\s]*(/\]|\]).*?$#isu"),
900 "\\1", $text);
901 $arAllow["SMILES"] = "N";
902 $text = $this->convert($text, $arAllow, "rss");
903 }
904 else
905 {
906 if ($arAllow["NL2BR"]=="Y")
907 $text = str_replace("\n", "<br />", $text);
908 }
909
910 if ($arParams["SERVER_NAME"] == '')
911 {
912 $dbSite = CSite::GetByID(SITE_ID);
913 $arSite = $dbSite->Fetch();
914 $arParams["SERVER_NAME"] = htmlspecialcharsEx($arSite["SERVER_NAME"]);
915 if ($arParams["SERVER_NAME"] == '')
916 {
917 if (defined("SITE_SERVER_NAME") && SITE_SERVER_NAME <> '')
918 $arParams["SERVER_NAME"] = SITE_SERVER_NAME;
919 else
920 $arParams["SERVER_NAME"] = COption::GetOptionString("main", "server_name");
921 }
922 }
923
924 if ($bAllowSmiles == "Y")
925 {
926 if (count($this->smiles) > 0)
927 {
928 foreach ($this->smiles as $a_id => $row)
929 {
930 $code = preg_quote(str_replace("'", "\\'", $row["TYPING"]), "/");
931 $image = preg_quote(str_replace("'", "\\'", $row["IMAGE"]));
932 $description = preg_quote(htmlspecialcharsbx($row["DESCRIPTION"], ENT_QUOTES), "/");
933
934 $this->matchType = $code;
935 $this->matchType2 = $image;
936 $this->matchType3 = $description;
937 $this->matchType4 = "http://".$arParams["SERVER_NAME"];
938
939 $text = preg_replace_callback(
940 "/(?<=[^\w&])$code(?=.\W|\W.|\W$)/i",
941 array($this, "convert_emoticon_callback"),
942 $text
943 );
944
945 }
946 }
947 }
948 return trim($text);
949 }
950
951 function strip_words($string, $count)
952 {
953 $result = "";
954 $counter_plus = true;
955 $counter = 0;
956 $string_len = mb_strlen($string);
957 for($i=0; $i<$string_len; ++$i)
958 {
959 $char = mb_substr($string, $i, 1);
960 if($char == '<')
961 $counter_plus = false;
962 if($char == '>' && mb_substr($string, $i + 1, 1) != '<')
963 {
964 $counter_plus = true;
965 $counter--;
966 }
967 $result .= $char;
968 if ($counter_plus)
969 $counter++;
970 if($counter >= $count)
971 {
972 $pos_space = mb_strpos($string, " ", $i);
973 $pos_tag = mb_strpos($string, "<", $i);
974 if ($pos_space == false)
975 {
976 $pos = mb_strrpos($result, " ");
977 $result = mb_substr($result, 0, mb_strlen($result) - ($i - $pos + 1));
978 }
979 else
980 {
981 $pos = min($pos_space, $pos_tag);
982 if ($pos != $i)
983 {
984 $dop_str = mb_substr($string, $i + 1, $pos - $i - 1);
985 $result .= $dop_str;
986 }
987 else
988 $result = mb_substr($result, 0, mb_strlen($result) - 1);
989 }
990 break;
991 }
992 }
993 return $result;
994 }
995
996 public static function closetags($html)
997 {
998 $arNoClose = array('br','hr','img','area','base','basefont','col','frame','input','isindex','link','meta','param');
999
1000 preg_match_all("#<([a-z0-9]+)([^>]*)(?<!/)>#iu", $html, $result);
1001 $openedtags = $result[1];
1002
1003 preg_match_all("#</([a-z0-9]+)>#iu", $html, $result);
1004 $closedtags = $result[1];
1005 $len_opened = count($openedtags);
1006
1007 if(count($closedtags) == $len_opened)
1008 return $html;
1009
1010 $openedtags = array_reverse($openedtags);
1011
1012 for($i = 0; $i < $len_opened; $i++)
1013 {
1014 if (!in_array($openedtags[$i], $closedtags))
1015 {
1016 if (!in_array($openedtags[$i], $arNoClose))
1017 $html .= '</'.$openedtags[$i].'>';
1018 }
1019 else
1020 unset($closedtags[array_search($openedtags[$i], $closedtags)]);
1021 }
1022
1023 return $html;
1024 }
1025
1026 function html_cut($html, $size)
1027 {
1028 $symbols = strip_tags($html);
1029 $symbols_len = mb_strlen($symbols);
1030
1031 if($symbols_len < mb_strlen($html))
1032 {
1033 $strip_text = $this->strip_words($html, $size);
1034
1035 if($symbols_len > $size)
1036 $strip_text = $strip_text."...";
1037
1038 $final_text = $this->closetags($strip_text);
1039 }
1040 else
1041 $final_text = mb_substr($html, 0, $size);
1042
1043 return $final_text;
1044 }
1045
1046}
1047
1049{
1050 public static function InitImage($imageID, $imageSize, $defaultImage, $defaultImageSize, $imageUrl, $showImageUrl, $urlParams=false)
1051 {
1052 $imageFile = false;
1053 $imageImg = "";
1054
1055 $imageSize = intval($imageSize);
1056 if($imageSize <= 0)
1057 $imageSize = 100;
1058
1059 $defaultImageSize = intval($defaultImageSize);
1060 if($defaultImageSize <= 0)
1061 $defaultImageSize = 100;
1062
1063 $imageUrl = trim($imageUrl);
1064 $imageID = intval($imageID);
1065
1066 if($imageID > 0)
1067 {
1068 $imageFile = CFile::GetFileArray($imageID);
1069 if ($imageFile !== false)
1070 {
1071 $arFileTmp = CFile::ResizeImageGet(
1072 $imageFile,
1073 array("width" => $imageSize, "height" => $imageSize),
1075 false
1076 );
1077 $imageImg = CFile::ShowImage($arFileTmp["src"], $imageSize, $imageSize, "border=0", "", ($imageUrl == ''));
1078 }
1079 }
1080 if($imageImg == '')
1081 $imageImg = "<img src=\"".$defaultImage."\" width=\"".$defaultImageSize."\" height=\"".$defaultImageSize."\" border=\"0\" alt=\"\" />";
1082
1083 if($imageUrl <> '' && $showImageUrl)
1084 $imageImg = "<a href=\"".$imageUrl."\"".($urlParams !== false? ' '.$urlParams:'').">".$imageImg."</a>";
1085
1086 return array("FILE" => $imageFile, "IMG" => $imageImg);
1087 }
1088
1089 public static function htmlspecialcharsExArray($array)
1090 {
1091 $res = Array();
1092 if(!empty($array) && is_array($array))
1093 {
1094 foreach($array as $k => $v)
1095 {
1096 if(is_array($v))
1097 {
1098 foreach($v as $k1 => $v1)
1099 {
1100 $res[$k1] = htmlspecialcharsex($v1);
1101 $res['~'.$k1] = $v1;
1102 }
1103 }
1104 else
1105 {
1106 $res[$k] = htmlspecialcharsex($v);
1107 $res['~'.$k] = $v;
1108 }
1109 }
1110 }
1111 return $res;
1112 }
1113
1114 public static function ResizeImage($aFile, $sizeX, $sizeY)
1115 {
1116 $result = CFile::ResizeImageGet($aFile, array("width" => $sizeX, "height" => $sizeY));
1117 if(is_array($result))
1118 return $result["src"];
1119 else
1120 return false;
1121 }
1122
1123 public static function GetDateTimeFormat()
1124 {
1125 $timestamp = mktime(7,30,45,2,22,2007);
1126 return array(
1127 "d-m-Y H:i:s" => date("d-m-Y H:i:s", $timestamp),//"22-02-2007 7:30",
1128 "m-d-Y H:i:s" => date("m-d-Y H:i:s", $timestamp),//"02-22-2007 7:30",
1129 "Y-m-d H:i:s" => date("Y-m-d H:i:s", $timestamp),//"2007-02-22 7:30",
1130 "d.m.Y H:i:s" => date("d.m.Y H:i:s", $timestamp),//"22.02.2007 7:30",
1131 "m.d.Y H:i:s" => date("m.d.Y H:i:s", $timestamp),//"02.22.2007 7:30",
1132 "j M Y H:i:s" => date("j M Y H:i:s", $timestamp),//"22 Feb 2007 7:30",
1133 "M j, Y H:i:s" => date("M j, Y H:i:s", $timestamp),//"Feb 22, 2007 7:30",
1134 "j F Y H:i:s" => date("j F Y H:i:s", $timestamp),//"22 February 2007 7:30",
1135 "F j, Y H:i:s" => date("F j, Y H:i:s", $timestamp),//"February 22, 2007",
1136 "d.m.y g:i A" => date("d.m.y g:i A", $timestamp),//"22.02.07 1:30 PM",
1137 "d.m.y G:i" => date("d.m.y G:i", $timestamp),//"22.02.07 7:30",
1138 "d.m.Y H:i:s" => date("d.m.Y H:i:s", $timestamp),//"22.02.2007 07:30",
1139 );
1140 }
1141
1142 public static function Birthday($datetime, $gender, $showYear = "N")
1143 {
1144 if ($datetime == '')
1145 return false;
1146
1147 $arDateTmp = ParseDateTime($datetime, CSite::GetDateFormat('SHORT'));
1148
1149 $day = intval($arDateTmp["DD"]);
1150 if (isset($arDateTmp["M"]))
1151 {
1152 if (is_numeric($arDateTmp["M"]))
1153 {
1154 $month = intval($arDateTmp["M"]);
1155 }
1156 else
1157 {
1158 $month = GetNumMonth($arDateTmp["M"], true);
1159 if (!$month)
1160 $month = intval(date('m', strtotime($arDateTmp["M"])));
1161 }
1162 }
1163 elseif (isset($arDateTmp["MMMM"]))
1164 {
1165 if (is_numeric($arDateTmp["MMMM"]))
1166 {
1167 $month = intval($arDateTmp["MMMM"]);
1168 }
1169 else
1170 {
1171 $month = GetNumMonth($arDateTmp["MMMM"]);
1172 if (!$month)
1173 $month = intval(date('m', strtotime($arDateTmp["MMMM"])));
1174 }
1175 }
1176 else
1177 {
1178 $month = intval($arDateTmp["MM"]);
1179 }
1180 $arDateTmp["MM"] = $month;
1181
1182 $year = intval($arDateTmp["YYYY"]);
1183
1184 if (($showYear == 'Y') || ($showYear == 'M' && $gender == 'M'))
1185 $date_template = GetMessage("SONET_BIRTHDAY_DAY_TEMPLATE");
1186 else
1187 $date_template = GetMessage("SONET_BIRTHDAY_DAY_TEMPLATE_WO_YEAR");
1188
1189 $val = str_replace(
1190 array("#DAY#", "#MONTH#", "#MONTH_LOW#", "#YEAR#"),
1191 array($day, GetMessage("MONTH_".$month."_S"), mb_strtolower(GetMessage("MONTH_".$month."_S")), $year),
1192 $date_template
1193 );
1194
1195 return array(
1196 "DATE" => $val,
1197 "MONTH" => Str_Pad(intval($arDateTmp["MM"]), 2, "0", STR_PAD_LEFT),
1198 "DAY" => Str_Pad(intval($arDateTmp["DD"]), 2, "0", STR_PAD_LEFT)
1199 );
1200 }
1201
1202 public static function GetDefaultNameTemplates()
1203 {
1204 return array(
1205 '#NOBR##LAST_NAME# #NAME##/NOBR#' => GetMessage('SONET_NAME_TEMPLATE_SMITH_JOHN'),
1206 '#NOBR##LAST_NAME# #NAME##/NOBR# #SECOND_NAME#' => GetMessage('SONET_NAME_TEMPLATE_SMITH_JOHN_LLOYD'),
1207 '#LAST_NAME#, #NOBR##NAME# #SECOND_NAME##/NOBR#' => GetMessage('SONET_NAME_TEMPLATE_SMITH_COMMA_JOHN_LLOYD'),
1208 '#NAME# #SECOND_NAME# #LAST_NAME#' => GetMessage('SONET_NAME_TEMPLATE_JOHN_LLOYD_SMITH'),
1209 '#NOBR##NAME_SHORT# #SECOND_NAME_SHORT# #LAST_NAME##/NOBR#' => GetMessage('SONET_NAME_TEMPLATE_J_L_SMITH'),
1210 '#NOBR##NAME_SHORT# #LAST_NAME##/NOBR#' => GetMessage('SONET_NAME_TEMPLATE_J_SMITH'),
1211 '#NOBR##LAST_NAME# #NAME_SHORT##/NOBR#' => GetMessage('SONET_NAME_TEMPLATE_SMITH_J'),
1212 '#NOBR##LAST_NAME# #NAME_SHORT# #SECOND_NAME_SHORT##/NOBR#' => GetMessage('SONET_NAME_TEMPLATE_SMITH_J_L'),
1213 '#NOBR##LAST_NAME#, #NAME_SHORT##/NOBR#' => GetMessage('SONET_NAME_TEMPLATE_SMITH_COMMA_J'),
1214 '#NOBR##LAST_NAME#, #NAME_SHORT# #SECOND_NAME_SHORT##/NOBR#' => GetMessage('SONET_NAME_TEMPLATE_SMITH_COMMA_J_L'),
1215 '#NOBR##NAME# #LAST_NAME##/NOBR#' => GetMessage('SONET_NAME_TEMPLATE_JOHN_SMITH'),
1216 '#NOBR##NAME# #SECOND_NAME_SHORT# #LAST_NAME##/NOBR#' => GetMessage('SONET_NAME_TEMPLATE_JOHN_L_SMITH'),
1217 );
1218 }
1219
1220 public static function GetMyGroups()
1221 {
1222 global $USER;
1223
1224 $arGroupsMy = array();
1225 $dbRequests = CSocNetUserToGroup::GetList(
1226 array(),
1227 array(
1228 "USER_ID" => $USER->getId(),
1229 "<=ROLE" => SONET_ROLES_USER,
1230 "GROUP_ACTIVE" => "Y"
1231 ),
1232 false,
1233 false,
1234 array("GROUP_ID")
1235 );
1236 while ($arRequests = $dbRequests->Fetch())
1237 {
1238 $arGroupsMy[] = $arRequests["GROUP_ID"];
1239 }
1240
1241 return $arGroupsMy;
1242 }
1243
1244 public static function GetGroupUsers($group_id)
1245 {
1246 if (intval($group_id) <= 0)
1247 return false;
1248
1249 $arGroupUsers = array();
1250 $dbRequests = CSocNetUserToGroup::GetList(
1251 array(),
1252 array(
1253 "GROUP_ID" => $group_id,
1254 "<=ROLE" => SONET_ROLES_USER,
1255 "USER_ACTIVE" => "Y"
1256 ),
1257 false,
1258 false,
1259 array("USER_ID")
1260 );
1261 while ($arRequests = $dbRequests->Fetch())
1262 $arGroupUsers[] = $arRequests["USER_ID"];
1263
1264 return $arGroupUsers;
1265 }
1266
1267 public static function IsMyGroup($entity_id)
1268 {
1269 global $USER;
1270
1271 $is_my = false;
1272 $dbRequests = CSocNetUserToGroup::GetList(
1273 array(),
1274 array(
1275 "USER_ID" => $USER->getId(),
1276 "GROUP_ID" => $entity_id,
1277 "<=ROLE" => SONET_ROLES_USER,
1278 )
1279 );
1280 if ($arRequests = $dbRequests->Fetch())
1281 $is_my = true;
1282
1283 return $is_my;
1284 }
1285
1286 public static function GetMyUsers($user_id = false)
1287 {
1288 global $USER;
1289
1290 if (!$user_id)
1291 {
1292 $user_id = $USER->getId();
1293 }
1294
1295 $arUsersMy = false;
1296 if (CSocNetUser::IsFriendsAllowed())
1297 {
1298 $arUsersMy = array();
1300 if ($dbFriends)
1301 while ($arFriends = $dbFriends->Fetch())
1302 {
1303 $pref = (($user_id == $arFriends["FIRST_USER_ID"]) ? "SECOND" : "FIRST");
1304 $arUsersMy[] = $arFriends[$pref."_USER_ID"];
1305 }
1306 }
1307 return $arUsersMy;
1308 }
1309
1310 public static function IsMyUser($entity_id)
1311 {
1312 global $USER;
1313
1314 $is_my = false;
1315 if (
1316 CSocNetUser::IsFriendsAllowed()
1317 && CSocNetUserRelations::IsFriends($USER->getId(), $entity_id)
1318 )
1319 $is_my = true;
1320
1321 return $is_my;
1322 }
1323
1324 public static function HasLogEventCreatedBy($event_id)
1325 {
1327 }
1328
1330 {
1331 global $USER;
1332
1333 if (
1334 !isset($GLOBALS["arExtranetGroupID"])
1335 || !isset($GLOBALS["arExtranetUserID"])
1336 )
1337 {
1338 $GLOBALS["arExtranetGroupID"] = array();
1339 $GLOBALS["arExtranetUserID"] = array();
1340
1341 if($USER?->IsAuthorized())
1342 {
1345 }
1346 }
1347 }
1348
1352 public static function GetSubordinateGroups($userID = false)
1353 {
1354 global $USER;
1355 static $arSubordinateGroupsByUser = array();
1356
1357 $userID = intval($userID);
1358 if ($userID <= 0)
1359 {
1360 $userID = $USER->getId();
1361 }
1362
1363 if ($userID <= 0)
1364 {
1365 return array();
1366 }
1367
1368 if (isset($arSubordinateGroupsByUser[$userID]))
1369 {
1370 $arUserSubordinateGroups = $arSubordinateGroupsByUser[$userID];
1371 }
1372 else
1373 {
1374 $arUserSubordinateGroups = CGroup::GetSubordinateGroups(CUser::GetUserGroup($userID));
1375
1376 $arSubordinateGroupsByUser[$userID] = $arUserSubordinateGroups;
1377 }
1378
1379 return $arUserSubordinateGroups;
1380 }
1381}
1382
1384{
1385 private static $arAllowedEntityTypes = array();
1386 private static $arAllowedEntityTypesDesc = array();
1387 private static $arAllowedFeatures = array();
1388 private static $arAllowedLogEvents = array();
1389
1390 /* --- entity types --- */
1391
1392 public static function RunEventForAllowedEntityType()
1393 {
1394 global $arSocNetAllowedSubscribeEntityTypesDesc;
1395 $arSocNetAllowedSubscribeEntityTypesDesc = array();
1396
1397 $newAllowedEntityTypes = array();
1398
1399 $events = GetModuleEvents("socialnetwork", "OnFillSocNetAllowedSubscribeEntityTypes");
1400 while ($arEvent = $events->Fetch())
1401 {
1402 ExecuteModuleEventEx($arEvent, array(&$newAllowedEntityTypes));
1403 }
1404
1405 foreach($newAllowedEntityTypes as $entityType)
1406 {
1407 self::AddAllowedEntityType($entityType);
1408 }
1409
1410 foreach($arSocNetAllowedSubscribeEntityTypesDesc as $entityTypeDescCode => $arEntityTypeDesc)
1411 {
1412 self::AddAllowedEntityTypeDesc($entityTypeDescCode, $arEntityTypeDesc);
1413 }
1414
1415 unset($arSocNetAllowedSubscribeEntityTypesDesc);
1416 }
1417
1418 public static function addAllowedEntityType($entityType)
1419 {
1420 if (is_array($entityType))
1421 {
1422 foreach ($entityType as $tmp)
1423 {
1424 self::AddAllowedEntityType($tmp);
1425 }
1426 return true;
1427 }
1428
1429 $entityType = trim($entityType);
1430 if (
1431 $entityType == ''
1432 || in_array($entityType, self::$arAllowedEntityTypes)
1433 || !preg_match('/^[a-zA-Z0-9]+$/', $entityType)
1434 )
1435 {
1436 return false;
1437 }
1438
1439 if (
1440 $entityType == SONET_SUBSCRIBE_ENTITY_GROUP
1441 && !CBXFeatures::IsFeatureEnabled("Workgroups")
1442 )
1443 {
1444 return false;
1445 }
1446
1447 self::$arAllowedEntityTypes[] = $entityType;
1448 }
1449
1450 public static function getAllowedEntityTypes()
1451 {
1452 self::getAllowedFeatures(); // to initialize standard features
1453 self::runEvents();
1454 return self::$arAllowedEntityTypes;
1455 }
1456
1457 /* --- entity types desc --- */
1458
1459 public static function addAllowedEntityTypeDesc($entityTypeDescCode, $arEntityTypeDesc)
1460 {
1461 $entityTypeDescCode = trim($entityTypeDescCode);
1462
1463 if (
1464 $entityTypeDescCode == ''
1465 || array_key_exists($entityTypeDescCode, self::$arAllowedEntityTypesDesc)
1466 || !is_array($arEntityTypeDesc)
1467 )
1468 {
1469 return false;
1470 }
1471
1472 if (
1473 $entityTypeDescCode == SONET_SUBSCRIBE_ENTITY_GROUP
1474 && !CBXFeatures::IsFeatureEnabled("Workgroups")
1475 )
1476 {
1477 return false;
1478 }
1479
1480 self::$arAllowedEntityTypesDesc[$entityTypeDescCode] = $arEntityTypeDesc;
1481
1482 return true;
1483 }
1484
1485 public static function getAllowedEntityTypesDesc()
1486 {
1487 self::getAllowedFeatures(); // to initialize standard features
1488 self::runEvents();
1489 return self::$arAllowedEntityTypesDesc;
1490 }
1491
1492 /* --- features --- */
1493
1494 public static function runEventForAllowedFeature()
1495 {
1496 $newAllowedFeatures = [];
1497
1498 $ignoreList = [];
1499
1500 $events = GetModuleEvents('socialnetwork', 'OnFillSocNetFeaturesList');
1501 while ($arEvent = $events->Fetch())
1502 {
1503 if ($arEvent['TO_MODULE_ID'] === 'wiki')
1504 {
1505 if (
1506 Loader::includeModule('bitrix24')
1507 && !\Bitrix\Bitrix24\Feature::isFeatureEnabled('socialnetwork_wiki')
1508 )
1509 {
1510 $ignoreList[] = $arEvent['TO_MODULE_ID'];
1511 }
1512 }
1513
1514 if (!in_array($arEvent['TO_MODULE_ID'], $ignoreList, true))
1515 {
1516 ExecuteModuleEventEx($arEvent, array(&$newAllowedFeatures, SITE_ID));
1517 }
1518 }
1519
1520 foreach($newAllowedFeatures as $strFeatureCode => $arFeature)
1521 {
1522 self::addAllowedFeature($strFeatureCode, $arFeature);
1523 }
1524 }
1525
1526 public static function addStandardFeatureList()
1527 {
1529 $isCollabUser = false;
1530 if ($userId > 0)
1531 {
1532 $isCollabUser = (new \Bitrix\Socialnetwork\Collab\User\User($userId))->isCollaber();
1533 }
1534
1535 if (ModuleManager::isModuleInstalled('forum'))
1536 {
1537 $arFeatureTmp = array(
1538 "allowed" => array(),
1539 "operations" => array(
1540 "full" => array(),
1541 "newtopic" => array(),
1542 "answer" => array(),
1543 "view" => array(),
1544 ),
1545 "minoperation" => array("view"),
1546 "subscribe_events" => array(
1547 "forum" => array(
1548 "ENTITIES" => array(),
1549 "OPERATION" => "view",
1550 "CLASS_FORMAT" => "CSocNetLogTools",
1551 "METHOD_FORMAT" => "FormatEvent_Forum",
1552 "HAS_CB" => "Y",
1553 "COMMENT_EVENT" => array(
1554 "EVENT_ID" => "forum",
1555 "OPERATION" => "view",
1556 "OPERATION_ADD" => "answer",
1557 "ADD_CALLBACK" => array("CSocNetLogTools", "AddComment_Forum"),
1558 "UPDATE_CALLBACK" => array("CSocNetLogTools", "UpdateComment_Forum"),
1559 "DELETE_CALLBACK" => array("CSocNetLogTools", "DeleteComment_Forum"),
1560 "CLASS_FORMAT" => "CSocNetLogTools",
1561 "METHOD_FORMAT" => "FormatComment_Forum",
1562 "RATING_TYPE_ID" => "FORUM_POST"
1563 )
1564 )
1565 )
1566 );
1567
1568 if (COption::GetOptionString("socialnetwork", "allow_forum_user", "Y") == "Y")
1569 {
1570 $arFeatureTmp["subscribe_events"]["forum"]["ENTITIES"][SONET_SUBSCRIBE_ENTITY_USER] = array(
1571 "TITLE" => GetMessage("SOCNET_LOG_FORUM_USER"),
1572 "TITLE_SETTINGS" => GetMessage("SOCNET_LOG_FORUM_USER_SETTINGS"),
1573 "TITLE_SETTINGS_1" => GetMessage("SOCNET_LOG_FORUM_USER_SETTINGS_1"),
1574 "TITLE_SETTINGS_2" => GetMessage("SOCNET_LOG_FORUM_USER_SETTINGS_2"),
1575 );
1576
1577 $arFeatureTmp["allowed"][] = SONET_ENTITY_USER;
1578 $arFeatureTmp["operations"]["full"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_forum_operation_full_user", SONET_RELATIONS_TYPE_NONE);
1579 $arFeatureTmp["operations"]["newtopic"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_forum_operation_newtopic_user", SONET_RELATIONS_TYPE_NONE);
1580 $arFeatureTmp["operations"]["answer"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_forum_operation_answer_user", (CSocNetUser::IsFriendsAllowed() ? SONET_RELATIONS_TYPE_FRIENDS : SONET_RELATIONS_TYPE_AUTHORIZED));
1581 $arFeatureTmp["operations"]["view"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_forum_operation_view_user", SONET_RELATIONS_TYPE_ALL);
1582 }
1583
1584 if (COption::GetOptionString("socialnetwork", "allow_forum_group", "Y") == "Y")
1585 {
1586 $arFeatureTmp["subscribe_events"]["forum"]["ENTITIES"][SONET_SUBSCRIBE_ENTITY_GROUP] = array(
1587 "TITLE" => GetMessage("SOCNET_LOG_FORUM_GROUP"),
1588 "TITLE_SETTINGS" => GetMessage("SOCNET_LOG_FORUM_GROUP_SETTINGS"),
1589 "TITLE_SETTINGS_1" => GetMessage("SOCNET_LOG_FORUM_GROUP_SETTINGS_1"),
1590 "TITLE_SETTINGS_2" => GetMessage("SOCNET_LOG_FORUM_GROUP_SETTINGS_2"),
1591 );
1592
1593 $arFeatureTmp["allowed"][] = SONET_ENTITY_GROUP;
1594 $arFeatureTmp["operations"]["full"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_forum_operation_full_group", SONET_ROLES_MODERATOR);
1595 $arFeatureTmp["operations"]["newtopic"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_forum_operation_newtopic_group", SONET_ROLES_USER);
1596 $arFeatureTmp["operations"]["answer"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_forum_operation_answer_group", SONET_ROLES_USER);
1597 $arFeatureTmp["operations"]["view"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_forum_operation_view_group", SONET_ROLES_USER);
1598 }
1599
1600 \CSocNetAllowed::addAllowedFeature("forum", $arFeatureTmp);
1601 }
1602
1603 if (ModuleManager::isModuleInstalled('photogallery'))
1604 {
1605 $arFeatureTmp = array(
1606 "allowed" => array(),
1607 "operations" => array(
1608 "write" => array(),
1609 "view" => array(),
1610 ),
1611 "minoperation" => array("view"),
1612 "subscribe_events" => array(
1613 "photo" => array(
1614 "ENTITIES" => array(),
1615 "OPERATION" => "view",
1616 "CLASS_FORMAT" => "CSocNetLogTools",
1617 "METHOD_FORMAT" => "FormatEvent_Photo",
1618 "HAS_CB" => "Y",
1619 "FULL_SET" => array("photo", "photo_photo", "photo_comment"),
1620 "COMMENT_EVENT" => array(
1621 "EVENT_ID" => "photoalbum_comment",
1622 "OPERATION" => "view",
1623 "OPERATION_ADD" => "view",
1624 "ADD_CALLBACK" => array("CSocNetPhotoCommentEvent", "AddComment_PhotoAlbum"),
1625 "UPDATE_CALLBACK" => "NO_SOURCE",
1626 "DELETE_CALLBACK" => "NO_SOURCE",
1627 "CLASS_FORMAT" => "CSocNetLogTools",
1628 "METHOD_FORMAT" => "FormatComment_PhotoAlbum",
1629 "RATING_TYPE_ID" => "LOG_COMMENT"
1630 )
1631 ),
1632 "photo_photo" => array(
1633 "OPERATION" => "view",
1634 "CLASS_FORMAT" => "CSocNetLogTools",
1635 "METHOD_FORMAT" => "FormatEvent_PhotoPhoto",
1636 "HIDDEN" => true,
1637 "HAS_CB" => "Y",
1638 "ENTITIES" => array(
1641 ),
1642 "COMMENT_EVENT" => array(
1643 "EVENT_ID" => "photo_comment",
1644 "OPERATION" => "view",
1645 "OPERATION_ADD" => "view",
1646 "ADD_CALLBACK" => array("CSocNetPhotoCommentEvent", "AddComment_Photo"),
1647 "UPDATE_CALLBACK" => array("CSocNetPhotoCommentEvent", "UpdateComment_Photo"),
1648 "DELETE_CALLBACK" => array("CSocNetPhotoCommentEvent", "DeleteComment_Photo"),
1649 "CLASS_FORMAT" => "CSocNetLogTools",
1650 "METHOD_FORMAT" => "FormatComment_Photo"
1651 )
1652 )
1653 )
1654 );
1655
1656 if (COption::GetOptionString("socialnetwork", "allow_photo_user", "Y") == "Y")
1657 {
1658 $arFeatureTmp["subscribe_events"]["photo"]["ENTITIES"][SONET_SUBSCRIBE_ENTITY_USER] = array(
1659 "TITLE" => GetMessage("SOCNET_LOG_PHOTO_USER"),
1660 "TITLE_SETTINGS" => GetMessage("SOCNET_LOG_PHOTO_USER_SETTINGS"),
1661 "TITLE_SETTINGS_1" => GetMessage("SOCNET_LOG_PHOTO_USER_SETTINGS_1"),
1662 "TITLE_SETTINGS_2" => GetMessage("SOCNET_LOG_PHOTO_USER_SETTINGS_2"),
1663 );
1664
1665 $arFeatureTmp["allowed"][] = SONET_ENTITY_USER;
1666 $arFeatureTmp["operations"]["write"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_photo_operation_write_user", SONET_RELATIONS_TYPE_NONE);
1667 $arFeatureTmp["operations"]["view"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_photo_operation_view_user", SONET_RELATIONS_TYPE_ALL);
1668 }
1669
1670 if (COption::GetOptionString("socialnetwork", "allow_photo_group", "Y") == "Y")
1671 {
1672 $arFeatureTmp["subscribe_events"]["photo"]["ENTITIES"][SONET_SUBSCRIBE_ENTITY_GROUP] = array(
1673 "TITLE" => GetMessage("SOCNET_LOG_PHOTO_GROUP"),
1674 "TITLE_SETTINGS" => GetMessage("SOCNET_LOG_PHOTO_GROUP_SETTINGS"),
1675 "TITLE_SETTINGS_1" => GetMessage("SOCNET_LOG_PHOTO_GROUP_SETTINGS_1"),
1676 "TITLE_SETTINGS_2" => GetMessage("SOCNET_LOG_PHOTO_GROUP_SETTINGS_2"),
1677 );
1678
1679 $arFeatureTmp["allowed"][] = SONET_ENTITY_GROUP;
1680 $arFeatureTmp["operations"]["write"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_photo_operation_write_group", SONET_ROLES_MODERATOR);
1681 $arFeatureTmp["operations"]["view"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_photo_operation_view_group", SONET_ROLES_USER);
1682 }
1683
1684 \CSocNetAllowed::addAllowedFeature("photo", $arFeatureTmp);
1685 }
1686
1687 $bIntranet = ModuleManager::isModuleInstalled('intranet');
1688 $bCalendar = (
1690 && ModuleManager::isModuleInstalled('calendar')
1691 && CBXFeatures::IsFeatureEditable("calendar")
1692 );
1693
1694 if ($bCalendar)
1695 {
1696 $arFeatureTmp = array(
1697 "allowed" => array(),
1698 "operations" => array(
1699 "write" => array(),
1700 "view" => array(),
1701 ),
1702 "minoperation" => array("view"),
1703 );
1704
1705 if ($isCollabUser || COption::GetOptionString("socialnetwork", "allow_calendar_user", "Y") == "Y")
1706 {
1707 $arFeatureTmp["allowed"][] = SONET_ENTITY_USER;
1708 $arFeatureTmp["operations"]["write"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_calendar_operation_write_user", SONET_RELATIONS_TYPE_NONE);
1709 $arFeatureTmp["operations"]["view"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_calendar_operation_view_user", SONET_RELATIONS_TYPE_ALL);
1710 }
1711
1712 if (COption::GetOptionString("socialnetwork", "allow_calendar_group", "Y") == "Y")
1713 {
1714 $arFeatureTmp["allowed"][] = SONET_ENTITY_GROUP;
1715 $arFeatureTmp["operations"]["write"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_calendar_operation_write_group", SONET_ROLES_MODERATOR);
1716 $arFeatureTmp["operations"]["view"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_calendar_operation_view_group", SONET_ROLES_USER);
1717 }
1718
1719 \CSocNetAllowed::addAllowedFeature("calendar", $arFeatureTmp);
1720 }
1721
1722 if (
1724 && ModuleManager::isModuleInstalled('tasks')
1725 )
1726 {
1727 $arFeatureTmp = array(
1728 "allowed" => array(),
1729 "operations" => array(
1730 "view" => array(),
1731 "view_all" => array(),
1732 "sort" => array(),
1733 "create_tasks" => array(),
1734 "edit_tasks" => array(),
1735 "delete_tasks" => array(),
1736 "modify_folders" => array(),
1737 "modify_common_views" => array(),
1738 ),
1739 "minoperation" => array("view_all", "view"),
1740 "subscribe_events" => array(
1741 "tasks" => array(
1742 "ENTITIES" => array(),
1743 'FORUM_COMMENT_ENTITY' => 'TK',
1744 "OPERATION" => "view",
1745 "CLASS_FORMAT" => "CSocNetLogTools",
1746 "METHOD_FORMAT" => "FormatEvent_Task2",
1747 "HAS_CB" => "Y",
1748 "FULL_SET" => array("tasks", "tasks_comment", "crm_activity_add"),
1749 "COMMENT_EVENT" => array(
1750 "EVENT_ID" => "tasks_comment",
1751 "OPERATION" => "view",
1752 "OPERATION_ADD" => "log_rights",
1753 "ADD_CALLBACK" => array("CSocNetLogTools", "AddComment_Tasks"),
1754 "UPDATE_CALLBACK" => array("CSocNetLogTools", "UpdateComment_Task"),
1755 "DELETE_CALLBACK" => array("CSocNetLogTools", "DeleteComment_Task"),
1756 "CLASS_FORMAT" => "CSocNetLogTools",
1757 "METHOD_FORMAT" => "FormatComment_Forum",
1758 "METHOD_CANEDIT" => array("CSocNetLogTools", "CanEditComment_Task"),
1759 "METHOD_CANEDITOWN" => array("CSocNetLogTools", "CanEditOwnComment_Task"),
1760 "METHOD_GET_URL" => array("CSocNetLogTools", "GetCommentUrl_Task"),
1761 "RATING_TYPE_ID" => "FORUM_POST"
1762 )
1763 )
1764 )
1765 );
1766
1767 if (COption::GetOptionString("socialnetwork", "allow_tasks_user", "Y") == "Y")
1768 {
1769 $arFeatureTmp["subscribe_events"]["tasks"]["ENTITIES"][SONET_SUBSCRIBE_ENTITY_USER] = array(
1770 "TITLE" => GetMessage("SOCNET_LOG_TASKS_USER"),
1771 "TITLE_SETTINGS" => GetMessage("SOCNET_LOG_TASKS_USER_SETTINGS"),
1772 "TITLE_SETTINGS_1" => GetMessage("SOCNET_LOG_TASKS_USER_SETTINGS_1"),
1773 "TITLE_SETTINGS_2" => GetMessage("SOCNET_LOG_TASKS_USER_SETTINGS_2"),
1774 );
1775
1776 $arFeatureTmp["allowed"][] = SONET_ENTITY_USER;
1777 $arFeatureTmp["operations"]["view"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_tasks_operation_view_user", SONET_RELATIONS_TYPE_ALL);
1778 $arFeatureTmp["operations"]["view_all"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_tasks_operation_view_all_user", SONET_RELATIONS_TYPE_NONE);
1779 $arFeatureTmp["operations"]["create_tasks"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_tasks_operation_create_tasks_user", SONET_RELATIONS_TYPE_AUTHORIZED);
1780 $arFeatureTmp["operations"]["edit_tasks"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_tasks_operation_edit_tasks_user", SONET_RELATIONS_TYPE_NONE);
1781 $arFeatureTmp["operations"]["delete_tasks"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_tasks_operation_delete_tasks_user", SONET_RELATIONS_TYPE_NONE);
1782 $arFeatureTmp["operations"]["modify_folders"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_tasks_operation_modify_folders_user", SONET_RELATIONS_TYPE_NONE);
1783 $arFeatureTmp["operations"]["modify_common_views"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_tasks_operation_modify_common_views_user", SONET_RELATIONS_TYPE_NONE);
1784 }
1785
1786 if (COption::GetOptionString("socialnetwork", "allow_tasks_group", "Y") == "Y")
1787 {
1788 $arFeatureTmp["subscribe_events"]["tasks"]["ENTITIES"][SONET_SUBSCRIBE_ENTITY_GROUP] = array(
1789 "TITLE" => GetMessage("SOCNET_LOG_TASKS_GROUP"),
1790 "TITLE_SETTINGS" => GetMessage("SOCNET_LOG_TASKS_GROUP_SETTINGS"),
1791 "TITLE_SETTINGS_1" => GetMessage("SOCNET_LOG_TASKS_GROUP_SETTINGS_1"),
1792 "TITLE_SETTINGS_2" => GetMessage("SOCNET_LOG_TASKS_GROUP_SETTINGS_2"),
1793 );
1794
1795 $arFeatureTmp["allowed"][] = SONET_ENTITY_GROUP;
1796 $arFeatureTmp["operations"]["view"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_tasks_operation_view_group", SONET_ROLES_USER);
1797 $arFeatureTmp["operations"]["view_all"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_tasks_operation_view_all_group", SONET_ROLES_USER);
1798 $arFeatureTmp["operations"]["sort"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_tasks_operation_sort_group", SONET_ROLES_USER);
1799 $arFeatureTmp["operations"]["create_tasks"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_tasks_operation_create_tasks_group", SONET_ROLES_USER);
1800 $arFeatureTmp["operations"]["edit_tasks"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_tasks_operation_edit_tasks_group", SONET_ROLES_MODERATOR);
1801 $arFeatureTmp["operations"]["delete_tasks"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_tasks_operation_delete_tasks_group", SONET_ROLES_MODERATOR);
1802 $arFeatureTmp["operations"]["modify_folders"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_tasks_operation_modify_folders_group", SONET_ROLES_MODERATOR);
1803 $arFeatureTmp["operations"]["modify_common_views"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_tasks_operation_modify_common_views_group", SONET_ROLES_MODERATOR);
1804 }
1805
1806 \CSocNetAllowed::addAllowedFeature("tasks", $arFeatureTmp);
1807 }
1808
1809 // files
1810 if (
1812 && (
1813 ModuleManager::isModuleInstalled('webdav')
1814 || ModuleManager::isModuleInstalled('disk')
1815 )
1816 && (
1817 COption::GetOptionString("socialnetwork", "allow_files_user", "Y") == "Y"
1818 || COption::GetOptionString("socialnetwork", "allow_files_group", "Y") == "Y"
1819 )
1820 )
1821 {
1822 $arFeatureTmp = array(
1823 "allowed" => array(),
1824 "operations" => array(
1825 "view" => array(),
1826 "write_limited" => array(),
1827 ),
1828 "minoperation" => array("view"),
1829 "subscribe_events" => array(
1830 "files" => array(
1831 "ENTITIES" => array(),
1832 "OPERATION" => "view",
1833 "CLASS_FORMAT" => "CSocNetLogTools",
1834 "METHOD_FORMAT" => "FormatEvent_Files",
1835 "HAS_CB" => "Y",
1836 "FULL_SET" => array("files", "files_comment"),
1837 "COMMENT_EVENT" => array(
1838 "EVENT_ID" => "files_comment",
1839 "OPERATION" => "view",
1840 "OPERATION_ADD" => "",
1841 "ADD_CALLBACK" => array("CSocNetLogTools", "AddComment_Files"),
1842 "CLASS_FORMAT" => "CSocNetLogTools",
1843 "METHOD_FORMAT" => "FormatComment_Files"
1844 )
1845 )
1846 )
1847 );
1848
1849 if (ModuleManager::isModuleInstalled("bizproc"))
1850 {
1851 $arFeatureTmp["operations"]["bizproc"] = array();
1852 }
1853
1854 $arFeatureTmp["operations"]["write"] = array();
1855
1856 if (COption::GetOptionString("socialnetwork", "allow_files_user", "Y") == "Y")
1857 {
1858 $arFeatureTmp["subscribe_events"]["files"]["ENTITIES"][SONET_SUBSCRIBE_ENTITY_USER] = array(
1859 "TITLE" => GetMessage("SOCNET_LOG_FILES_USER"),
1860 "TITLE_SETTINGS" => GetMessage("SOCNET_LOG_FILES_USER_SETTINGS"),
1861 "TITLE_SETTINGS_1" => GetMessage("SOCNET_LOG_FILES_USER_SETTINGS_1"),
1862 "TITLE_SETTINGS_2" => GetMessage("SOCNET_LOG_FILES_USER_SETTINGS_2"),
1863 );
1864
1865 $arFeatureTmp["allowed"][] = SONET_ENTITY_USER;
1866 $arFeatureTmp["operations"]["view"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_files_operation_view_user", (CSocNetUser::IsFriendsAllowed() ? SONET_RELATIONS_TYPE_FRIENDS : SONET_RELATIONS_TYPE_ALL));
1867 $arFeatureTmp["operations"]["write_limited"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_files_operation_write_limited_user", SONET_RELATIONS_TYPE_NONE);
1868 $arFeatureTmp["operations"]["write"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_files_operation_write_user", SONET_RELATIONS_TYPE_NONE);
1869 }
1870
1871 if (COption::GetOptionString("socialnetwork", "allow_files_group", "Y") == "Y")
1872 {
1873 $arFeatureTmp["subscribe_events"]["files"]["ENTITIES"][SONET_SUBSCRIBE_ENTITY_GROUP] = array(
1874 "TITLE" => GetMessage("SOCNET_LOG_FILES_GROUP"),
1875 "TITLE_SETTINGS" => GetMessage("SOCNET_LOG_FILES_GROUP_SETTINGS"),
1876 "TITLE_SETTINGS_1" => GetMessage("SOCNET_LOG_FILES_GROUP_SETTINGS_1"),
1877 "TITLE_SETTINGS_2" => GetMessage("SOCNET_LOG_FILES_GROUP_SETTINGS_2"),
1878 );
1879
1880 $arFeatureTmp["allowed"][] = SONET_ENTITY_GROUP;
1881 $arFeatureTmp["operations"]["view"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_files_operation_view_group", SONET_ROLES_USER);
1882 $arFeatureTmp["operations"]["write_limited"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_files_operation_write_limited_group", SONET_ROLES_MODERATOR);
1883 $arFeatureTmp["operations"]["write"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_files_operation_write_group", SONET_ROLES_MODERATOR);
1884 }
1885
1886 \CSocNetAllowed::addAllowedFeature("files", $arFeatureTmp);
1887 }
1888
1889 if (
1890 ModuleManager::isModuleInstalled('blog')
1891 && (
1892 COption::GetOptionString("socialnetwork", "allow_blog_user", "Y") == "Y"
1893 || COption::GetOptionString("socialnetwork", "allow_blog_group", "Y") == "Y"
1894 )
1895 )
1896 {
1897 $livefeedProvider = new \Bitrix\Socialnetwork\Livefeed\BlogPost;
1898
1899 $arFeatureTmp = array(
1900 "allowed" => array(),
1901 "operations" => array(
1902 "view_post" => array(),
1903 "premoderate_post" => array(),
1904 "write_post" => array(),
1905 "moderate_post" => array(),
1906 "full_post" => array(),
1907 "view_comment" => array(),
1908 "premoderate_comment" => array(),
1909 "write_comment" => array(),
1910 "moderate_comment" => array(),
1911 "full_comment" => array(),
1912 ),
1913 "minoperation" => array("view_comment", "view_post"),
1914 "subscribe_events" => array(
1915 "blog" => array(
1916 "ENTITIES" => array(),
1917 "OPERATION" => "",
1918 "NO_SET" => true,
1919 "REAL_EVENT_ID" => "blog_post",
1920 "FULL_SET" => array_unique(array_merge($livefeedProvider->getEventId(), array("blog", "blog_comment")))
1921 ),
1922 "blog_post" => array(
1923 "ENTITIES" => array(),
1924 "OPERATION" => "view_post",
1925 "HIDDEN" => true,
1926 "CLASS_FORMAT" => "CSocNetLogTools",
1927 "METHOD_FORMAT" => "FormatEvent_Blog",
1928 "HAS_CB" => "Y",
1929 "COMMENT_EVENT" => array(
1930 "EVENT_ID" => "blog_comment",
1931 "OPERATION" => "view_comment",
1932 "OPERATION_ADD" => "premoderate_comment",
1933 "ADD_CALLBACK" => array("CSocNetLogTools", "AddComment_Blog"),
1934 "CLASS_FORMAT" => "CSocNetLogTools",
1935 "METHOD_FORMAT" => "FormatComment_Blog"
1936 )
1937 ),
1938 "blog_comment" => array(
1939 "ENTITIES" => array(),
1940 "OPERATION" => "view_comment",
1941 "HIDDEN" => true,
1942 "CLASS_FORMAT" => "CSocNetLogTools",
1943 "METHOD_FORMAT" => "FormatEvent_Blog",
1944 "HAS_CB" => "Y"
1945 )
1946 )
1947 );
1948
1949 if (COption::GetOptionString("socialnetwork", "allow_blog_user", "Y") == "Y")
1950 {
1951 $arFeatureTmp["subscribe_events"]["blog"]["ENTITIES"][SONET_SUBSCRIBE_ENTITY_USER] = array(
1952 "TITLE" => GetMessage("SOCNET_LOG_BLOG_USER"),
1953 "TITLE_SETTINGS" => GetMessage("SOCNET_LOG_BLOG_USER_SETTINGS"),
1954 "TITLE_SETTINGS_1" => GetMessage("SOCNET_LOG_BLOG_USER_SETTINGS_1"),
1955 "TITLE_SETTINGS_2" => GetMessage("SOCNET_LOG_BLOG_USER_SETTINGS_2"),
1956 );
1957
1958 $arFeatureTmp["subscribe_events"]["blog_post"]["ENTITIES"][SONET_SUBSCRIBE_ENTITY_USER] = array(
1959 "TITLE" => GetMessage("SOCNET_LOG_BLOG_POST_USER")
1960 );
1961
1962 $arFeatureTmp["allowed"][] = SONET_ENTITY_USER;
1963 $arFeatureTmp["operations"]["view_post"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_blog_operation_view_post_user", SONET_RELATIONS_TYPE_ALL);
1964 $arFeatureTmp["operations"]["view_comment"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_blog_operation_view_comment_user", SONET_RELATIONS_TYPE_ALL);
1965 $arFeatureTmp["operations"]["premoderate_comment"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_blog_operation_premoderate_comment_user", SONET_RELATIONS_TYPE_AUTHORIZED);
1966 $arFeatureTmp["operations"]["write_comment"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_blog_operation_write_comment_user", SONET_RELATIONS_TYPE_AUTHORIZED);
1967 }
1968
1969 if (COption::GetOptionString("socialnetwork", "allow_blog_group", "Y") == "Y")
1970 {
1971 $arFeatureTmp["subscribe_events"]["blog"]["ENTITIES"][SONET_SUBSCRIBE_ENTITY_GROUP] = array(
1972 "TITLE" => GetMessage("SOCNET_LOG_BLOG_GROUP"),
1973 "TITLE_SETTINGS" => GetMessage("SOCNET_LOG_BLOG_GROUP_SETTINGS"),
1974 "TITLE_SETTINGS_1" => GetMessage("SOCNET_LOG_BLOG_GROUP_SETTINGS_1"),
1975 "TITLE_SETTINGS_2" => GetMessage("SOCNET_LOG_BLOG_GROUP_SETTINGS_2"),
1976 );
1977
1978 $arFeatureTmp["subscribe_events"]["blog_post"]["ENTITIES"][SONET_SUBSCRIBE_ENTITY_GROUP] = array(
1979 "TITLE" => GetMessage("SOCNET_LOG_BLOG_POST_GROUP")
1980 );
1981
1982 $arFeatureTmp["allowed"][] = SONET_ENTITY_GROUP;
1983 $arFeatureTmp["operations"]["view_post"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_blog_operation_view_post_group", SONET_ROLES_USER);
1984 $arFeatureTmp["operations"]["premoderate_post"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_blog_operation_premoderate_post_group", SONET_ROLES_USER);
1985 $arFeatureTmp["operations"]["write_post"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_blog_operation_write_post_group", SONET_ROLES_USER);
1986 $arFeatureTmp["operations"]["moderate_post"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_blog_operation_moderate_post_group", SONET_ROLES_MODERATOR);
1987 $arFeatureTmp["operations"]["full_post"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_blog_operation_full_post_group", SONET_ROLES_OWNER);
1988 $arFeatureTmp["operations"]["view_comment"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_blog_operation_view_comment_group", SONET_ROLES_USER);
1989 $arFeatureTmp["operations"]["premoderate_comment"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_blog_operation_premoderate_comment_group", SONET_ROLES_USER);
1990 $arFeatureTmp["operations"]["write_comment"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_blog_operation_write_comment_group", SONET_ROLES_USER);
1991 $arFeatureTmp["operations"]["moderate_comment"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_blog_operation_moderate_comment_group", SONET_ROLES_MODERATOR);
1992 $arFeatureTmp["operations"]["full_comment"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_blog_operation_full_comment_group", SONET_ROLES_MODERATOR);
1993
1994 $arFeatureTmp["operations"]["write_post"]["restricted"][SONET_ENTITY_GROUP] = array(SONET_ROLES_ALL);
1995 $arFeatureTmp["operations"]["premoderate_post"]["restricted"][SONET_ENTITY_GROUP] = array(SONET_ROLES_ALL);
1996 $arFeatureTmp["operations"]["moderate_post"]["restricted"][SONET_ENTITY_GROUP] = array(SONET_ROLES_ALL);
1997 $arFeatureTmp["operations"]["full_post"]["restricted"][SONET_ENTITY_GROUP] = array(SONET_ROLES_ALL);
1998 $arFeatureTmp["operations"]["moderate_comment"]["restricted"][SONET_ENTITY_GROUP] = array(SONET_ROLES_ALL);
1999 $arFeatureTmp["operations"]["full_comment"]["restricted"][SONET_ENTITY_GROUP] = array(SONET_ROLES_ALL);
2000 }
2001 $arFeatureTmp["subscribe_events"]["blog_post_important"] = $arFeatureTmp["subscribe_events"]["blog_post"];
2002 if (ModuleManager::isModuleInstalled('vote'))
2003 {
2004 $arFeatureTmp["subscribe_events"]["blog_post_vote"] = $arFeatureTmp["subscribe_events"]["blog_post"];
2005 }
2006 if (ModuleManager::isModuleInstalled('intranet'))
2007 {
2008 $arFeatureTmp["subscribe_events"]["blog_post_grat"] = $arFeatureTmp["subscribe_events"]["blog_post"];
2009 }
2010 \CSocNetAllowed::addAllowedFeature("blog", $arFeatureTmp);
2011 }
2012
2013 if (
2014 ModuleManager::isModuleInstalled('search')
2015 && (
2016 COption::GetOptionString("socialnetwork", "allow_search_user", "N") == "Y"
2017 || COption::GetOptionString("socialnetwork", "allow_search_group", "Y") == "Y"
2018 )
2019 )
2020 {
2021 $arFeatureTmp = array(
2022 "allowed" => array(),
2023 "operations" => array(),
2024 "minoperation" => array(),
2025 );
2026
2027 if (COption::GetOptionString("socialnetwork", "allow_search_user", "N") == "Y")
2028 {
2029 $arFeatureTmp["allowed"][] = SONET_ENTITY_USER;
2030 $arFeatureTmp["operations"]["view"][SONET_ENTITY_USER] = COption::GetOptionString("socialnetwork", "default_search_operation_view_user", SONET_RELATIONS_TYPE_ALL);
2031 }
2032
2033 if (COption::GetOptionString("socialnetwork", "allow_search_group", "Y") == "Y")
2034 {
2035 $arFeatureTmp["allowed"][] = SONET_ENTITY_GROUP;
2036 $arFeatureTmp["operations"]["view"][SONET_ENTITY_GROUP] = COption::GetOptionString("socialnetwork", "default_search_operation_view_group", SONET_ROLES_USER);
2037 }
2038
2039 CSocNetAllowed::addAllowedFeature("search", $arFeatureTmp);
2040 }
2041
2042 if (
2043 ModuleManager::isModuleInstalled('sign')
2044 && method_exists(\Bitrix\Sign\Config\Storage::class, 'isB2eAvailable')
2045 && \Bitrix\Sign\Config\Storage::instance()->isB2eAvailable()
2046 )
2047 {
2048 $arFeatureTmp = [
2049 'allowed' => [],
2050 'operations' => [],
2051 'minoperation' => [],
2052 ];
2053 $arFeatureTmp['allowed'][] = SONET_ENTITY_USER;
2054 $arFeatureTmp['operations']['view'][SONET_ENTITY_USER] = SONET_RELATIONS_TYPE_NONE;
2055
2056 self::addAllowedFeature('sign', $arFeatureTmp);
2057 }
2058
2059 // chat
2060 if (
2061 ModuleManager::isModuleInstalled('im')
2062 && (COption::GetOptionString('socialnetwork', 'use_workgroup_chat', "Y") == "Y")
2063 )
2064 {
2065 $arFeatureTmp = array(
2066 "allowed" => array(SONET_ENTITY_GROUP),
2067 "operations" => array(),
2068 "minoperation" => array(),
2069 );
2070
2071 CSocNetAllowed::addAllowedFeature("chat", $arFeatureTmp);
2072 }
2073
2074 if (defined("BX_STARTED"))
2075 {
2076 self::addRestFeatures();
2077 }
2078 else
2079 {
2080 AddEventHandler("main", "OnBeforeProlog", array("CSocNetAllowed", "addRestFeatures"));
2081 }
2082 }
2083
2084 public static function addRestFeatures()
2085 {
2086 global $USER;
2087
2088 if (Loader::includeModule('rest'))
2089 {
2091 "allowed" => array(SONET_ENTITY_GROUP),
2092 "operations" => array(),
2093 "minoperation" => array(),
2094 ));
2095
2096 if (
2097 !isset($USER)
2098 || !is_object($USER)
2099 || !($USER instanceof \CUser)
2100 )
2101 {
2102 return;
2103 }
2104
2105 $placementHandlerList = \Bitrix\Rest\PlacementTable::getHandlersList('SONET_GROUP_DETAIL_TAB');
2106 if(is_array($placementHandlerList))
2107 {
2108 foreach($placementHandlerList as $placementHandler)
2109 {
2110 CSocNetAllowed::addAllowedFeature("placement_".$placementHandler['ID'], array(
2111 "allowed" => array(SONET_ENTITY_GROUP),
2112 "operations" => array(),
2113 "minoperation" => array(),
2114 "title" => $placementHandler['TITLE']
2115 ));
2116 }
2117 }
2118 }
2119 }
2120
2121 public static function addAllowedFeature($strFeatureCode, $arFeature)
2122 {
2123 $strFeatureCode = trim($strFeatureCode);
2124
2125 if (
2126 $strFeatureCode == ''
2127 || !is_array($arFeature)
2128 )
2129 {
2130 return false;
2131 }
2132
2133 if (
2134 !CBXFeatures::IsFeatureEnabled("Workgroups")
2135 && array_key_exists("subscribe_events", $arFeature)
2136 )
2137 {
2138 foreach ($arFeature["subscribe_events"] as $event_id_tmp => $arEventTmp)
2139 {
2140 if (
2141 array_key_exists("ENTITIES", $arEventTmp)
2142 && array_key_exists(SONET_SUBSCRIBE_ENTITY_GROUP, $arEventTmp["ENTITIES"])
2143 )
2144 {
2145 unset($arFeature["subscribe_events"][$event_id_tmp]["ENTITIES"][SONET_SUBSCRIBE_ENTITY_GROUP]);
2146 }
2147 }
2148 }
2149
2150 if (!array_key_exists($strFeatureCode, self::$arAllowedFeatures))
2151 {
2152 self::$arAllowedFeatures[$strFeatureCode] = $arFeature;
2153 }
2154 else
2155 {
2156 if (
2157 array_key_exists("operations", $arFeature)
2158 && is_array($arFeature["operations"])
2159 )
2160 {
2161 if (!array_key_exists("operations", self::$arAllowedFeatures[$strFeatureCode]))
2162 {
2163 self::$arAllowedFeatures[$strFeatureCode]["operations"] = array();
2164 }
2165
2166 foreach ($arFeature["operations"] as $strOpCode => $arOperation)
2167 {
2168 if (is_array($arOperation))
2169 {
2170 if (!array_key_exists($strOpCode, self::$arAllowedFeatures[$strFeatureCode]["operations"]))
2171 {
2172 self::$arAllowedFeatures[$strFeatureCode]["operations"][$strOpCode] = array();
2173 }
2174
2175 foreach ($arOperation as $key => $value)
2176 {
2177 self::$arAllowedFeatures[$strFeatureCode]["operations"][$strOpCode][$key] = $value;
2178 }
2179 }
2180 }
2181 }
2182
2183 if (
2184 array_key_exists("subscribe_events", $arFeature)
2185 && is_array($arFeature["subscribe_events"])
2186 )
2187 {
2188 if (!array_key_exists("subscribe_events", self::$arAllowedFeatures[$strFeatureCode]))
2189 {
2190 self::$arAllowedFeatures[$strFeatureCode]["subscribe_events"] = array();
2191 }
2192
2193 foreach ($arFeature["subscribe_events"] as $strEventCode => $arEvent)
2194 {
2195 if (is_array($arEvent))
2196 {
2197 self::$arAllowedFeatures[$strFeatureCode]["subscribe_events"][$strEventCode] = $arEvent;
2198 }
2199 }
2200 }
2201 }
2202
2203 return true;
2204 }
2205
2206 public static function updateAllowedFeature($strFeatureCode, $arFeature)
2207 {
2208 $strFeatureCode = trim($strFeatureCode);
2209
2210 if (
2211 $strFeatureCode == ''
2212 || !array_key_exists($strFeatureCode, self::$arAllowedFeatures)
2213 || !is_array($arFeature)
2214 )
2215 {
2216 return false;
2217 }
2218
2219 if (
2220 !CBXFeatures::IsFeatureEnabled("Workgroups")
2221 && array_key_exists("subscribe_events", $arFeature)
2222 )
2223 {
2224 foreach ($arFeature["subscribe_events"] as $event_id_tmp => $arEventTmp)
2225 {
2226 if (
2227 array_key_exists("ENTITIES", $arEventTmp)
2228 && array_key_exists(SONET_SUBSCRIBE_ENTITY_GROUP, $arEventTmp["ENTITIES"])
2229 )
2230 {
2231 unset($arFeature["subscribe_events"][$event_id_tmp]["ENTITIES"][SONET_SUBSCRIBE_ENTITY_GROUP]);
2232 }
2233 }
2234 }
2235
2236 self::$arAllowedFeatures[$strFeatureCode] = $arFeature;
2237
2238 return true;
2239 }
2240
2241 public static function getAllowedFeatures()
2242 {
2243 static $init = false;
2244 if (!$init)
2245 {
2246 \CSocNetAllowed::addStandardFeatureList();
2247 $init = true;
2248 }
2249
2250 self::runEvents();
2251 return self::$arAllowedFeatures;
2252 }
2253
2254 /* --- log events --- */
2255
2256 public static function runEventForAllowedLogEvent()
2257 {
2258 $newAllowedLogEvent = array();
2259
2260 $events = GetModuleEvents("socialnetwork", "OnFillSocNetLogEvents");
2261 while ($arEvent = $events->Fetch())
2262 {
2263 ExecuteModuleEventEx($arEvent, array(&$newAllowedLogEvent));
2264 }
2265
2266 foreach($newAllowedLogEvent as $strEventCode => $arLogEvent)
2267 {
2268 self::addAllowedLogEvent($strEventCode, $arLogEvent);
2269 }
2270 }
2271
2272 public static function addAllowedLogEvent($strEventCode, $arLogEvent)
2273 {
2274 $strEventCode = trim($strEventCode);
2275
2276 if (
2277 $strEventCode == ''
2278 || array_key_exists($strEventCode, self::$arAllowedLogEvents)
2279 || !is_array($arLogEvent)
2280 )
2281 {
2282 return false;
2283 }
2284
2285 if (!CBXFeatures::IsFeatureEnabled("Workgroups"))
2286 {
2287 if ($strEventCode == "system_groups")
2288 {
2289 return false;
2290 }
2291
2292 if (
2293 array_key_exists("ENTITIES", $arLogEvent)
2294 && array_key_exists(SONET_SUBSCRIBE_ENTITY_GROUP, $arLogEvent["ENTITIES"])
2295 )
2296 {
2297 unset($arLogEvent["ENTITIES"][SONET_SUBSCRIBE_ENTITY_GROUP]);
2298 }
2299
2300 if ($strEventCode == "system")
2301 {
2302 foreach($arLogEvent["FULL_SET"] as $i => $event_id_tmp)
2303 {
2304 if ($event_id_tmp == "system_groups")
2305 {
2306 unset($arLogEvent["FULL_SET"][$i]);
2307 }
2308 }
2309 }
2310 }
2311
2312 if (!CBXFeatures::IsFeatureEnabled("Friends"))
2313 {
2314 if ($strEventCode == "system_friends")
2315 {
2316 return false;
2317 }
2318
2319 if ($strEventCode == "system")
2320 {
2321 foreach($arLogEvent["FULL_SET"] as $i => $event_id_tmp)
2322 {
2323 if ($event_id_tmp == "system_friends")
2324 {
2325 unset($arLogEvent["FULL_SET"][$i]);
2326 }
2327 }
2328 }
2329 }
2330
2331 self::$arAllowedLogEvents[$strEventCode] = $arLogEvent;
2332
2333 return true;
2334 }
2335
2336 public static function GetAllowedLogEvents()
2337 {
2338 self::getAllowedFeatures(); // to initialize standard features
2339 self::runEvents();
2340 return self::$arAllowedLogEvents;
2341 }
2342
2343 public static function runEvents()
2344 {
2345 static $bAlreadyRun;
2346
2347 if (!$bAlreadyRun)
2348 {
2349 self::runEventForAllowedEntityType();
2350 self::runEventForAllowedFeature();
2351 self::runEventForAllowedLogEvent();
2352 $bAlreadyRun = true;
2353 }
2354 }
2355}
$arParams
Определения access_dialog.php:21
$path
Определения access_edit.php:21
$count
Определения admin_tab.php:4
$type
Определения options.php:106
$db_res
Определения options_user_settings.php:8
global $APPLICATION
Определения include.php:80
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
Определения check_mail.php:18
$bIntranet
Определения checklist_structure.php:347
Определения loader.php:13
static getHandlersList($placement, $skipInstallCheck=false, int $userId=null)
Определения placement.php:266
static getExtranetSonetGroupIdList()
Определения componenthelper.php:1437
static getCurrentUserId()
Определения user.php:18
static GetSubordinateGroups($grId)
Определения group.php:1161
static GetRelatedUsers($userID, $relation, $arNavStartParams=false, $bActiveOnly="N")
Определения user_relations.php:215
static IsFriends($firstUserID, $secondUserID)
Определения user_relations.php:355
static IsFeatureEnabled($_1488512778)
Определения include.php:116
static IsFeatureEditable($_1488512778)
Определения include.php:116
Определения functions.php:1384
static addAllowedLogEvent($strEventCode, $arLogEvent)
Определения functions.php:2272
static runEventForAllowedFeature()
Определения functions.php:1494
static addAllowedEntityTypeDesc($entityTypeDescCode, $arEntityTypeDesc)
Определения functions.php:1459
static addStandardFeatureList()
Определения functions.php:1526
static updateAllowedFeature($strFeatureCode, $arFeature)
Определения functions.php:2206
static getAllowedFeatures()
Определения functions.php:2241
static addAllowedEntityType($entityType)
Определения functions.php:1418
static addRestFeatures()
Определения functions.php:2084
static runEventForAllowedLogEvent()
Определения functions.php:2256
static getAllowedEntityTypes()
Определения functions.php:1450
static RunEventForAllowedEntityType()
Определения functions.php:1392
static getAllowedEntityTypesDesc()
Определения functions.php:1485
static addAllowedFeature($strFeatureCode, $arFeature)
Определения functions.php:2121
static runEvents()
Определения functions.php:2343
static GetAllowedLogEvents()
Определения functions.php:2336
static HasLogEventCreatedBy($event_id)
Определения log_tools.php:367
static GetList($arOrder=Array("ID"=> "DESC"), $arFilter=Array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения smile.php:68
Определения functions.php:9
convert_video($params, $path)
Определения functions.php:493
cut_long_words_callback($m)
Определения functions.php:820
convert4mail($text)
Определения functions.php:442
$code_error
Определения functions.php:22
static killAllTags($text)
Определения functions.php:428
pre_convert_code_tag($text="")
Определения functions.php:567
convert_image_tag($url="", $type="html")
Определения functions.php:696
$arFontSize
Определения functions.php:26
wrap_long_words($text="")
Определения functions.php:755
static closetags($html)
Определения functions.php:996
$quote_error
Определения functions.php:18
cut_long_words($str)
Определения functions.php:804
$MaxStringLen
Определения functions.php:21
part_long_words($str)
Определения functions.php:774
$quote_open
Определения functions.php:19
$CacheTime
Определения functions.php:25
convert_quote_tag($text="", $type="html")
Определения functions.php:624
convert_close_tag($marker="quote")
Определения functions.php:675
$quote_closed
Определения functions.php:20
convert_code_tag($text="", $type="html")
Определения functions.php:586
sonet_sortlen($a, $b)
Определения functions.php:43
html_cut($html, $size)
Определения functions.php:1026
convert_to_rss($text, $arImages=Array(), $arAllow=array("HTML"=> "N", "ANCHOR"=> "Y", "BIU"=> "Y", "IMG"=> "Y", "QUOTE"=> "Y", "CODE"=> "Y", "FONT"=> "Y", "LIST"=> "Y", "SMILES"=> "Y", "NL2BR"=> "N"), $arParams=array())
Определения functions.php:871
$matchNum
Определения functions.php:36
$image_params
Определения functions.php:12
$LAST_ERROR
Определения functions.php:16
$matchType2
Определения functions.php:39
convert($text, $bPreview=True, $arImages=array(), $allow=array("HTML"=> "N", "ANCHOR"=> "Y", "BIU"=> "Y", "IMG"=> "Y", "QUOTE"=> "Y", "CODE"=> "Y", "FONT"=> "Y", "LIST"=> "Y", "SMILES"=> "Y", "NL2BR"=> "N", "VIDEO"=> "Y"), $type="html")
Определения functions.php:94
$smiles
Определения functions.php:10
convert_anchor_tag_callback($m)
Определения functions.php:866
convert_open_tag($marker="quote", $type="html")
Определения functions.php:659
$matchType4
Определения functions.php:41
strip_words($string, $count)
Определения functions.php:951
$code_open
Определения functions.php:23
$path_to_smile
Определения functions.php:17
$word_separator
Определения functions.php:34
convert_emoticon($code="", $image="", $description="", $servername="")
Определения functions.php:551
$allow_img_ext
Определения functions.php:11
convert_anchor_tag($url, $text, $pref="")
Определения functions.php:825
__construct($strLang=False, $pathToSmile=false)
Определения functions.php:52
$matchType
Определения functions.php:38
$matchNum2
Определения functions.php:37
convert_font_attr($attr, $value="", $text="")
Определения functions.php:724
$matchType3
Определения functions.php:40
$code_closed
Определения functions.php:24
Определения functions.php:1049
static IsMyGroup($entity_id)
Определения functions.php:1267
static InitGlobalExtranetArrays($SITE_ID=SITE_ID)
Определения functions.php:1329
static IsMyUser($entity_id)
Определения functions.php:1310
static GetDefaultNameTemplates()
Определения functions.php:1202
static Birthday($datetime, $gender, $showYear="N")
Определения functions.php:1142
static GetGroupUsers($group_id)
Определения functions.php:1244
static GetSubordinateGroups($userID=false)
Определения functions.php:1352
static ResizeImage($aFile, $sizeX, $sizeY)
Определения functions.php:1114
static GetMyGroups()
Определения functions.php:1220
static GetMyUsers($user_id=false)
Определения functions.php:1286
static htmlspecialcharsExArray($array)
Определения functions.php:1089
static InitImage($imageID, $imageSize, $defaultImage, $defaultImageSize, $imageUrl, $showImageUrl, $urlParams=false)
Определения functions.php:1050
static HasLogEventCreatedBy($event_id)
Определения functions.php:1324
static GetDateTimeFormat()
Определения functions.php:1123
static clearAllTags($text)
Определения textparser.php:2358
Определения user.php:6037
global $CACHE_MANAGER
Определения clear_component_cache.php:7
$str
Определения commerceml2.php:63
if(!is_array($prop["VALUES"])) $tmp
Определения component_props.php:203
</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
if(Loader::includeModule( 'bitrix24')) elseif(Loader::includeModule('intranet') &&CIntranetUtils::getPortalZone() !=='ru') $description
Определения .description.php:24
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
Определения options.php:195
const BX_RESIZE_IMAGE_PROPORTIONAL
Определения constants.php:11
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
ParseDateTime($datetime, $format=false)
Определения tools.php:638
AddEventHandler($FROM_MODULE_ID, $MESSAGE_ID, $CALLBACK, $SORT=100, $FULL_PATH=false)
Определения tools.php:5165
htmlspecialcharsEx($str)
Определения tools.php:2685
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения tools.php:2701
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
GetNumMonth($month)
Определения tools.php:519
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$year
Определения payment.php:9
$counter
Определения options.php:5
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$ar
Определения options.php:199
if(empty($signedUserToken)) $key
Определения quickway.php:257
$text
Определения template_pdf.php:79
$i
Определения factura.php:643
</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
$width
Определения html.php:68
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
else $a
Определения template.php:137
$val
Определения options.php:1793
const SONET_ROLES_USER
Определения include.php:31
const SONET_SUBSCRIBE_ENTITY_USER
Определения include.php:121
const SONET_ENTITY_GROUP
Определения include.php:117
const SONET_SUBSCRIBE_ENTITY_GROUP
Определения include.php:120
const SONET_ENTITY_USER
Определения include.php:118
const SONET_ROLES_MODERATOR
Определения include.php:30
const SONET_ROLES_OWNER
Определения include.php:29
const SONET_RELATIONS_FRIEND
Определения include.php:24
const SONET_RELATIONS_TYPE_FRIENDS
Определения include.php:41
const SONET_ROLES_ALL
Определения include.php:35
const SONET_RELATIONS_TYPE_ALL
Определения include.php:38
const SONET_RELATIONS_TYPE_AUTHORIZED
Определения include.php:39
const SONET_RELATIONS_TYPE_NONE
Определения include.php:42
if($bIntranet) $bCalendar
Определения options.php:167
const SITE_ID
Определения sonet_set_content_view.php:12
$k
Определения template_pdf.php:567
$GLOBALS['_____370096793']
Определения update_client.php:1
$url
Определения iframe.php:7
$SITE_ID
Определения yandex_run.php:607