15 "template" =>
"popup_image");
45 if (mb_strlen(
$a[
"TYPING"]) == mb_strlen($b[
"TYPING"]))
49 return (mb_strlen(
$a[
"TYPING"]) > mb_strlen($b[
"TYPING"])) ? -1 : 1;
52 public function __construct($strLang = False, $pathToSmile =
false)
55 static $arSmiles =
array();
57 $this->smiles =
array();
58 if ($strLang === False)
59 $strLang = LANGUAGE_ID;
60 $this->path_to_smile = $pathToSmile;
68 $db_res =
CSocNetSmile::GetList(
array(
"SORT" =>
"ASC"),
array(
"SMILE_TYPE" =>
"S"),
false,
false, Array(
"LANG_LID",
"ID",
"IMAGE",
"DESCRIPTION",
"TYPING",
"SMILE_TYPE",
"SORT"));
71 $tok = strtok(
$res[
'TYPING'],
" ");
72 while ($tok !==
false)
76 'IMAGE' => stripslashes(
$res[
'IMAGE']),
77 'DESCRIPTION' => stripslashes(
$res[
'NAME'])
83 foreach ($arSmiles as $LID => $arSmilesLID)
85 uasort($arSmilesLID,
array(
'CSocNetTextParser',
'sonet_sortlen'));
86 $arSmiles[$LID] = $arSmilesLID;
91 $this->smiles = $arSmiles[$strLang] ??
null;
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")
98 $text = preg_replace(
"#([?&;])PHPSESSID=([0-9a-zA-Z]{32})#is",
"\\1PHPSESSID1=",
$text);
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")
109 if ($allow[
"CODE"]==
"Y")
111 $text = str_replace(
array(
"\001",
"\002", chr(5), chr(6),
"'",
"\""),
array(
"",
"",
"",
"", chr(5), chr(6)),
$text);
112 $text = preg_replace(
114 "#<code(\s+[^>]*>|>)(.+?)</code(\s+[^>]*>|>)#isu",
115 "/\[code([^\]])*\]/isu",
116 "/\[\/code([^\]])*\]/isu"),
125 $text = preg_replace_callback(
126 "/(?<=[\001])(([^\002]+))(?=([\002]))/isu",
127 array($this,
"pre_convert_code_tag_callback"),
130 $text = preg_replace(
141 if ($allow[
"ANCHOR"]==
"Y")
143 $text = preg_replace(
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);
150 if ($allow[
"BIU"]==
"Y")
152 $text = preg_replace(
154 "/<b([^>]*)>(.+?)<\/b([^>]*)>/isu",
155 "/<u([^>]*)>(.+?)<\/u([^>]*)>/isu",
156 "/<s([^>a-z]*)>(.+?)<\/s([^>a-z]*)>/isu",
157 "/<i([^>]*)>(.+?)<\/i([^>]*)>/isu"),
165 if ($allow[
"IMG"]==
"Y")
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);
171 if ($allow[
"QUOTE"]==
"Y")
174 $text = preg_replace(
"#<(/?)quote(.*?)>#is",
"[\\1quote]",
$text);
176 if ($allow[
"FONT"]==
"Y")
178 $text = preg_replace(
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"),
184 "[size=\\1]\\2[/size]",
185 "[color=\\1]\\2[/color]",
186 "[font=\\1]\\2[/font]"),
189 if ($allow[
"LIST"]==
"Y")
191 $text = preg_replace(
193 "/<ul((\s[^>]*)|(\s*))>(.+?)<\/ul([^>]*)>/isu",
194 "/<li((\s[^>]*)|(\s*))>/isu"),
203 array(
"<",
">",
"\""),
204 array(
"<",
">",
"""),
208 elseif ($allow[
"NL2BR"]==
"Y")
214 if ($allow[
"ANCHOR"]==
"Y")
217 $text = preg_replace(
"'(?<=^|[".
$word_separator.
"]|\s)((http|https|news|ftp|aim|mailto)://[\.\-\_\:a-z0-9\@]([^\"\s\'\[\]\{\}\(\)])*)'is",
218 "[url]\\1[/url]",
$text);
220 if ($allow[
"CODE"] ==
"Y")
222 $text = preg_replace(
224 "/\[code([^\]])*\]/isu",
225 "/\[\/code([^\]])*\]/isu"
234 $this->matchType =
$type;
235 $text = preg_replace_callback(
236 "/(\001)([^\002]+)(\002)/isu",
237 array($this,
"convert_code_tag_callback"),
240 $text = preg_replace(
252 if ($allow[
"QUOTE"] ==
"Y")
255 $this->matchType =
$type;
256 $text = preg_replace_callback(
257 "#(\[quote([^\]])*\](.*)\[/quote([^\]])*\])#is",
258 array($this,
"convert_quote_tag_callback"),
262 if ($allow[
"IMG"]==
"Y")
265 $this->matchType =
$type;
266 $text = preg_replace_callback(
267 "#\[img\](.+?)\[/img\]#i",
268 array($this,
"convert_image_tag_callback"),
272 if ($allow[
"ANCHOR"] ==
"Y")
275 $this->matchNum2 = 1;
276 $text = preg_replace_callback(
277 "/\[url\]([^\]]+?)\[\/url\]/iu",
278 array($this,
"convert_anchor_tag_callback"),
282 $this->matchNum2 = 2;
283 $text = preg_replace_callback(
284 "/\[url\s*=\s*([^\]]+?)\s*\](.*?)\[\/url\]/iu",
285 array($this,
"convert_anchor_tag_callback"),
289 if ($allow[
"BIU"]==
"Y")
291 $text = preg_replace(
293 "/\[b\](.+?)\[\/b\]/isu",
294 "/\[i\](.+?)\[\/i\]/isu",
295 "/\[s\](.+?)\[\/s\]/isu",
296 "/\[u\](.+?)\[\/u\]/isu"),
301 "<u>\\1</u>"),
$text);
303 if ($allow[
"LIST"]==
"Y")
305 $text = preg_replace(
307 "/\[list\](.+?)\[\/list\]/isu",
314 if ($allow[
"FONT"]==
"Y")
316 while (preg_match(
"/\[size\s*=\s*([^\]]+)\](.+?)\[\/size\]/isu",
$text))
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"),
327 while (preg_match(
"/\[font\s*=\s*([^\]]+)\](.*?)\[\/font\]/isu",
$text))
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"),
338 while (preg_match(
"/\[color\s*=\s*([^\]]+)\](.+?)\[\/color\]/isu",
$text))
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"),
354 "(tm)",
"(TM)",
"(Tm)",
"(tM)",
360 "™",
"™",
"™",
"™",
366 if ($this->MaxStringLen > 0)
369 $text = preg_replace_callback(
370 "/(?<=^|>)([^<]+)(?=<|$)/isu",
371 array($this,
"part_long_words_callback"),
375 if ($allow[
"SMILES"]==
"Y")
378 is_array($this->smiles)
379 && !empty($this->smiles)
382 if ($this->path_to_smile !==
false)
393 foreach ($this->smiles as $a_id => $row)
395 if($row[
"TYPING"] ==
'' || $row[
"IMAGE"] ==
'')
398 $arSmiles[$typing] =
'<img src="'.$path_to_smile.$row[
"IMAGE"].
'" border="0" alt="smile'.$typing.
'" title="'.
htmlspecialcharsbx($row[
"DESCRIPTION"]).
'" />';
399 $arQuoted[] = preg_quote($typing,
"/");
401 $ar = preg_split(
"/(?<=[\s>])(".implode(
"|", $arQuoted).
")/u",
" ".
$text, -1, PREG_SPLIT_DELIM_CAPTURE);
403 foreach(
$ar as $piece)
405 if(array_key_exists($piece, $arSmiles))
406 $text .= $arSmiles[$piece];
412 if (($allow[
"VIDEO"] ??
null) ===
"Y")
414 while (preg_match(
"/\[video(.+?)\](.+?)\[\/video[\s]*\]/isu",
$text))
417 $this->matchNum2 = 2;
418 $text = preg_replace_callback(
419 "/\[video([^\]]*)\](.+?)\[\/video[\s]*\]/isu",
420 array($this,
"convert_video_callback"),
430 if (method_exists(
"CTextParser",
"clearAllTags"))
433 $text = preg_replace(
435 "/<(\/?)(quote|code|font|color)([^>]*)>/isu",
436 "/\[(\/?)(b|u|i|list|code|quote|font|color|url|img)([^\]]*)\]/isu"),
445 if (
$text ==
'')
return "";
446 $arPattern =
array();
447 $arReplace =
array();
449 $arPattern[] =
"/\[(code|quote)(.*?)\]/isu";
450 $arReplace[] =
"\n>================== \\1 ===================\n";
452 $arPattern[] =
"/\[\/(code|quote)(.*?)\]/isu";
453 $arReplace[] =
"\n>===========================================\n";
455 $arPattern[] =
"/<WBR[\s\/]?>/isu";
458 $arPattern[] =
"/^(\r|\n)+?(.*)$/";
459 $arReplace[] =
"\\2";
461 $arPattern[] =
"/\[b\](.+?)\[\/b\]/isu";
462 $arReplace[] =
"\\1";
464 $arPattern[] =
"/\[i\](.+?)\[\/i\]/isu";
465 $arReplace[] =
"\\1";
467 $arPattern[] =
"/\[u\](.+?)\[\/u\]/isu";
468 $arReplace[] =
"_\\1_";
470 $arPattern[] =
"/\[(\/?)(color|font|size)([^\]]*)\]/isu";
473 $arPattern[] =
"/\[url\](\S+?)\[\/url\]/isu";
474 $arReplace[] =
"(URL: \\1 )";
476 $arPattern[] =
"/\[url\s*=\s*(\S+?)\s*\](.*?)\[\/url\]/isu";
477 $arReplace[] =
"\\2 (URL: \\1 )";
479 $arPattern[] =
"/\[img\](.+?)\[\/img\]/isu";
480 $arReplace[] =
"(IMAGE: \\1)";
482 $arPattern[] =
"/\[video([^\]]*)\](.+?)\[\/video[\s]*\]/isu";
483 $arReplace[] =
"(VIDEO: \\2)";
485 $arPattern[] =
"/\[(\/?)list\]/isu";
487 $text = preg_replace($arPattern, $arReplace,
$text);
501 preg_match(
"/height\=([0-9]+)/is",
$params, $height);
504 $height = intval($height[1]);
505 $height = ($height > 0 ? $height : 300);
511 "PLAYER_TYPE" =>
"auto",
512 "USE_PLAYLIST" =>
"N",
519 "SKIN_PATH" =>
"/bitrix/components/bitrix/player/mediaplayer/skins",
520 "SKIN" =>
"bitrix.swf",
521 "CONTROLBAR" =>
"bottom",
522 "WMODE" =>
"transparent",
524 "SHOW_CONTROLS" =>
"Y",
526 "SHOW_DIGITS" =>
"Y",
527 "CONTROLS_BGCOLOR" =>
"FFFFFF",
528 "CONTROLS_COLOR" =>
"000000",
529 "CONTROLS_OVER_COLOR" =>
"000000",
530 "SCREEN_COLOR" =>
"000000",
534 "DISPLAY_CLICK" =>
"play",
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();
546 private function convert_video_callback($m)
548 return $this->
convert_video($m[$this->matchNum], $m[$this->matchNum2]);
553 if (
$code ==
'' || $image ==
'')
return;
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.
'" />';
562 private function convert_emoticon_callback($m)
564 return $this->
convert_emoticon($this->matchType, $this->matchType2, $this->matchType3, $this->matchType4);
574 array(
"&",
"<",
">",
"[",
"]"),
575 array(
"&",
"<",
">",
"[",
"]"),
581 private function pre_convert_code_tag_callback($m)
588 if (
$text ==
'')
return;
590 $text = str_replace(
array(
"<",
">",
"\\r",
"\\n",
"\\"),
array(
"<",
">",
"\r",
"\n",
"\"),
$text);
595 $this->matchType =
'code';
596 $this->matchType2 =
$type;
597 $txt = preg_replace_callback(
599 array($this,
"convert_open_tag_callback"),
602 $this->matchType =
'code';
603 $txt = preg_replace_callback(
605 array($this,
"convert_close_tag_callback"),
610 ($this->code_open == $this->code_closed)
611 && ($this->code_error == 0)
619 private function convert_code_tag_callback($m)
621 return $this->
convert_code_tag(
'[code]'.$m[$this->matchNum].
'[/code]', $this->matchType);
626 if (
$text ==
'')
return;
630 $this->matchType =
'quote';
631 $this->matchType2 =
$type;
632 $txt = preg_replace_callback(
633 "/\[quote([^\]])*\]/iu",
634 array($this,
"convert_open_tag_callback"),
637 $this->matchType =
'quote';
638 $txt = preg_replace_callback(
639 "/\[\/quote([^\]])*\]/iu",
640 array($this,
"convert_close_tag_callback"),
645 ($this->quote_open == $this->quote_closed)
646 && ($this->quote_error == 0)
654 private function convert_quote_tag_callback($m)
661 $marker = (mb_strtolower($marker) ==
"code" ?
"code" :
"quote");
664 $this->{$marker.
"_open"}++;
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>";
670 private function convert_open_tag_callback($m)
677 $marker = (mb_strtolower($marker) ==
"code" ?
"code" :
"quote");
680 if ($this->{$marker.
"_open"} == 0)
682 $this->{$marker.
"_error"}++;
685 $this->{$marker.
"_closed"}++;
687 return "\n=============\n";
688 return "</td></tr></tbody></table>";
691 private function convert_close_tag_callback($m)
698 static $bShowedScript =
false;
699 if (
$url ==
'')
return;
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,
"/");
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;
713 return "[img]".$url.
"[/img]";
716 return '<img src="'.$url.
'" alt="'.
GetMessage(
"FRM_IMAGE_ALT").
'" border="0" />';
719 private function convert_image_tag_callback($m)
726 if (
$text ==
'')
return "";
727 if ($value ==
'')
return $text;
734 $value = intval($value >=
$count ? (
$count - 1) : $value);
735 return "<span style='font-size:".$this->arFontSize[$value].
"%;'>".
$text.
"</span>";
737 else if ($attr ==
'color')
739 $value = preg_replace(
"/[^\w#]/",
"" , $value);
740 return "<font color='".$value.
"'>".
$text.
"</font>";
742 else if ($attr ==
'font')
744 $value = preg_replace(
"/[^\w]/",
"" , $value);
745 return "<font face='".$value.
"'>".
$text.
"</font>";
749 private function convert_font_attr_callback($m)
751 return $this->
convert_font_attr($this->matchType, $m[$this->matchNum], $m[$this->matchNum2]);
758 $this->MaxStringLen > 0
762 $text = str_replace(
array(chr(7), chr(8), chr(34), chr(39)),
array(
"",
"", chr(7), chr(8)),
$text);
764 $text = preg_replace_callback(
765 "/(?<=^|>)([^<]+)(?=<|$)/isu",
766 array($this,
"part_long_words_callback"),
777 if (($this->MaxStringLen > 0) && (trim(
$str) <>
''))
780 array(chr(1), chr(2), chr(3), chr(4), chr(5), chr(6),
"&",
"<",
">",
""",
" ",
"©",
"®",
"™"),
781 array(
"",
"",
"",
"",
"",
"", chr(5),
"<",
">", chr(6), chr(1), chr(2), chr(3), chr(4)),
785 $str = preg_replace_callback(
787 array($this,
"cut_long_words_callback"),
791 array(chr(5),
"<",
">", chr(6), chr(1), chr(2), chr(3), chr(4),
"<WBR/>",
"<WBR>",
"&shy;"),
792 array(
"&",
"<",
">",
""",
" ",
"©",
"®",
"™",
"<WBR/>",
"<WBR/>",
"­"),
799 private function part_long_words_callback($m)
807 ($this->MaxStringLen > 0)
812 "/([^ \n\r\t\x01]{".$this->MaxStringLen.
"})/isu",
830 if (preg_match(
"/([\.,\?]|!)$/u",
$url, $match))
833 $url = preg_replace(
"/([\.,\?]|!)$/u",
"",
$url);
834 $text = preg_replace(
"/([\.,\?]|!)$/u",
"",
$text);
836 if (preg_match(
"/\[\/(quote|code)/i",
$url))
839 array(
"/&/u",
"/javascript:/iu"),
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;
846 if (preg_match(
"/^<img\s+src/iu",
$text))
848 $text = preg_replace(
849 array(
"/&/iu",
"/javascript:/iu"),
851 if ($bCutUrl && mb_strlen(
$text) < 55)
853 if ($bCutUrl && !preg_match(
"/^(http|ftp|https|news):\/\//iu",
$text))
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);
863 return $pref.
"<a href='".
$url.
"' target='_blank'>".
$text.
"</a>".$end;
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())
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")
896 $text = preg_replace(
898 "#^(.+?)<cut[\s]*(/>|>).*?$#isu",
899 "#^(.+?)\[cut[\s]*(/\]|\]).*?$#isu"),
901 $arAllow[
"SMILES"] =
"N";
906 if ($arAllow[
"NL2BR"]==
"Y")
912 $dbSite = CSite::GetByID(
SITE_ID);
913 $arSite = $dbSite->Fetch();
917 if (defined(
"SITE_SERVER_NAME") && SITE_SERVER_NAME <>
'')
918 $arParams[
"SERVER_NAME"] = SITE_SERVER_NAME;
920 $arParams[
"SERVER_NAME"] = COption::GetOptionString(
"main",
"server_name");
924 if ($bAllowSmiles ==
"Y")
926 if (
count($this->smiles) > 0)
928 foreach ($this->smiles as $a_id => $row)
930 $code = preg_quote(str_replace(
"'",
"\\'", $row[
"TYPING"]),
"/");
931 $image = preg_quote(str_replace(
"'",
"\\'", $row[
"IMAGE"]));
934 $this->matchType =
$code;
935 $this->matchType2 = $image;
937 $this->matchType4 =
"http://".$arParams[
"SERVER_NAME"];
939 $text = preg_replace_callback(
940 "/(?<=[^\w&])$code(?=.\W|\W.|\W$)/i",
941 array($this,
"convert_emoticon_callback"),
954 $counter_plus =
true;
956 $string_len = mb_strlen($string);
957 for(
$i=0;
$i<$string_len; ++
$i)
959 $char = mb_substr($string,
$i, 1);
961 $counter_plus =
false;
962 if($char ==
'>' && mb_substr($string,
$i + 1, 1) !=
'<')
964 $counter_plus =
true;
972 $pos_space = mb_strpos($string,
" ",
$i);
973 $pos_tag = mb_strpos($string,
"<",
$i);
974 if ($pos_space ==
false)
976 $pos = mb_strrpos(
$result,
" ");
981 $pos = min($pos_space, $pos_tag);
984 $dop_str = mb_substr($string,
$i + 1, $pos -
$i - 1);
998 $arNoClose =
array(
'br',
'hr',
'img',
'area',
'base',
'basefont',
'col',
'frame',
'input',
'isindex',
'link',
'meta',
'param');
1000 preg_match_all(
"#<([a-z0-9]+)([^>]*)(?<!/)>#iu", $html,
$result);
1003 preg_match_all(
"#</([a-z0-9]+)>#iu", $html,
$result);
1005 $len_opened =
count($openedtags);
1007 if(
count($closedtags) == $len_opened)
1010 $openedtags = array_reverse($openedtags);
1012 for(
$i = 0;
$i < $len_opened;
$i++)
1014 if (!in_array($openedtags[
$i], $closedtags))
1016 if (!in_array($openedtags[
$i], $arNoClose))
1017 $html .=
'</'.$openedtags[
$i].
'>';
1020 unset($closedtags[array_search($openedtags[
$i], $closedtags)]);
1028 $symbols = strip_tags($html);
1029 $symbols_len = mb_strlen($symbols);
1031 if($symbols_len < mb_strlen($html))
1035 if($symbols_len > $size)
1036 $strip_text = $strip_text.
"...";
1038 $final_text = $this->
closetags($strip_text);
1041 $final_text = mb_substr($html, 0, $size);
1050 public static function InitImage($imageID, $imageSize, $defaultImage, $defaultImageSize, $imageUrl, $showImageUrl, $urlParams=
false)
1055 $imageSize = intval($imageSize);
1059 $defaultImageSize = intval($defaultImageSize);
1060 if($defaultImageSize <= 0)
1061 $defaultImageSize = 100;
1063 $imageUrl = trim($imageUrl);
1064 $imageID = intval($imageID);
1068 $imageFile = CFile::GetFileArray($imageID);
1069 if ($imageFile !==
false)
1071 $arFileTmp = CFile::ResizeImageGet(
1073 array(
"width" => $imageSize,
"height" => $imageSize),
1077 $imageImg = CFile::ShowImage($arFileTmp[
"src"], $imageSize, $imageSize,
"border=0",
"", ($imageUrl ==
''));
1081 $imageImg =
"<img src=\"".$defaultImage.
"\" width=\"".$defaultImageSize.
"\" height=\"".$defaultImageSize.
"\" border=\"0\" alt=\"\" />";
1083 if($imageUrl <>
'' && $showImageUrl)
1084 $imageImg =
"<a href=\"".$imageUrl.
"\"".($urlParams !==
false?
' '.$urlParams:
'').
">".$imageImg.
"</a>";
1086 return array(
"FILE" => $imageFile,
"IMG" => $imageImg);
1092 if(!empty($array) && is_array($array))
1094 foreach($array as
$k => $v)
1098 foreach($v as $k1 => $v1)
1100 $res[$k1] = htmlspecialcharsex($v1);
1101 $res[
'~'.$k1] = $v1;
1106 $res[
$k] = htmlspecialcharsex($v);
1116 $result = CFile::ResizeImageGet($aFile,
array(
"width" => $sizeX,
"height" => $sizeY));
1125 $timestamp = mktime(7,30,45,2,22,2007);
1127 "d-m-Y H:i:s" => date(
"d-m-Y H:i:s", $timestamp),
1128 "m-d-Y H:i:s" => date(
"m-d-Y H:i:s", $timestamp),
1129 "Y-m-d H:i:s" => date(
"Y-m-d H:i:s", $timestamp),
1130 "d.m.Y H:i:s" => date(
"d.m.Y H:i:s", $timestamp),
1131 "m.d.Y H:i:s" => date(
"m.d.Y H:i:s", $timestamp),
1132 "j M Y H:i:s" => date(
"j M Y H:i:s", $timestamp),
1133 "M j, Y H:i:s" => date(
"M j, Y H:i:s", $timestamp),
1134 "j F Y H:i:s" => date(
"j F Y H:i:s", $timestamp),
1135 "F j, Y H:i:s" => date(
"F j, Y H:i:s", $timestamp),
1136 "d.m.y g:i A" => date(
"d.m.y g:i A", $timestamp),
1137 "d.m.y G:i" => date(
"d.m.y G:i", $timestamp),
1138 "d.m.Y H:i:s" => date(
"d.m.Y H:i:s", $timestamp),
1142 public static function Birthday($datetime, $gender, $showYear =
"N")
1144 if ($datetime ==
'')
1147 $arDateTmp =
ParseDateTime($datetime, CSite::GetDateFormat(
'SHORT'));
1149 $day = intval($arDateTmp[
"DD"]);
1150 if (isset($arDateTmp[
"M"]))
1152 if (is_numeric($arDateTmp[
"M"]))
1154 $month = intval($arDateTmp[
"M"]);
1160 $month = intval(date(
'm', strtotime($arDateTmp[
"M"])));
1163 elseif (isset($arDateTmp[
"MMMM"]))
1165 if (is_numeric($arDateTmp[
"MMMM"]))
1167 $month = intval($arDateTmp[
"MMMM"]);
1173 $month = intval(date(
'm', strtotime($arDateTmp[
"MMMM"])));
1178 $month = intval($arDateTmp[
"MM"]);
1180 $arDateTmp[
"MM"] = $month;
1182 $year = intval($arDateTmp[
"YYYY"]);
1184 if (($showYear ==
'Y') || ($showYear ==
'M' && $gender ==
'M'))
1185 $date_template =
GetMessage(
"SONET_BIRTHDAY_DAY_TEMPLATE");
1187 $date_template =
GetMessage(
"SONET_BIRTHDAY_DAY_TEMPLATE_WO_YEAR");
1190 array(
"#DAY#",
"#MONTH#",
"#MONTH_LOW#",
"#YEAR#"),
1197 "MONTH" => Str_Pad(intval($arDateTmp[
"MM"]), 2,
"0", STR_PAD_LEFT),
1198 "DAY" => Str_Pad(intval($arDateTmp[
"DD"]), 2,
"0", STR_PAD_LEFT)
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'),
1224 $arGroupsMy =
array();
1225 $dbRequests = CSocNetUserToGroup::GetList(
1228 "USER_ID" =>
$USER->getId(),
1230 "GROUP_ACTIVE" =>
"Y"
1236 while ($arRequests = $dbRequests->Fetch())
1238 $arGroupsMy[] = $arRequests[
"GROUP_ID"];
1246 if (intval($group_id) <= 0)
1249 $arGroupUsers =
array();
1250 $dbRequests = CSocNetUserToGroup::GetList(
1253 "GROUP_ID" => $group_id,
1255 "USER_ACTIVE" =>
"Y"
1261 while ($arRequests = $dbRequests->Fetch())
1262 $arGroupUsers[] = $arRequests[
"USER_ID"];
1264 return $arGroupUsers;
1272 $dbRequests = CSocNetUserToGroup::GetList(
1275 "USER_ID" =>
$USER->getId(),
1276 "GROUP_ID" => $entity_id,
1280 if ($arRequests = $dbRequests->Fetch())
1292 $user_id =
$USER->getId();
1296 if (CSocNetUser::IsFriendsAllowed())
1298 $arUsersMy =
array();
1301 while ($arFriends = $dbFriends->Fetch())
1303 $pref = (($user_id == $arFriends[
"FIRST_USER_ID"]) ?
"SECOND" :
"FIRST");
1304 $arUsersMy[] = $arFriends[$pref.
"_USER_ID"];
1316 CSocNetUser::IsFriendsAllowed()
1334 !isset(
$GLOBALS[
"arExtranetGroupID"])
1335 || !isset(
$GLOBALS[
"arExtranetUserID"])
1341 if(
$USER?->IsAuthorized())
1355 static $arSubordinateGroupsByUser =
array();
1357 $userID = intval($userID);
1360 $userID =
$USER->getId();
1368 if (isset($arSubordinateGroupsByUser[$userID]))
1370 $arUserSubordinateGroups = $arSubordinateGroupsByUser[$userID];
1376 $arSubordinateGroupsByUser[$userID] = $arUserSubordinateGroups;
1379 return $arUserSubordinateGroups;
1385 private static $arAllowedEntityTypes =
array();
1386 private static $arAllowedEntityTypesDesc =
array();
1387 private static $arAllowedFeatures =
array();
1388 private static $arAllowedLogEvents =
array();
1394 global $arSocNetAllowedSubscribeEntityTypesDesc;
1395 $arSocNetAllowedSubscribeEntityTypesDesc =
array();
1397 $newAllowedEntityTypes =
array();
1399 $events =
GetModuleEvents(
"socialnetwork",
"OnFillSocNetAllowedSubscribeEntityTypes");
1400 while ($arEvent = $events->Fetch())
1405 foreach($newAllowedEntityTypes as $entityType)
1407 self::AddAllowedEntityType($entityType);
1410 foreach($arSocNetAllowedSubscribeEntityTypesDesc as $entityTypeDescCode => $arEntityTypeDesc)
1412 self::AddAllowedEntityTypeDesc($entityTypeDescCode, $arEntityTypeDesc);
1415 unset($arSocNetAllowedSubscribeEntityTypesDesc);
1420 if (is_array($entityType))
1422 foreach ($entityType as
$tmp)
1424 self::AddAllowedEntityType(
$tmp);
1429 $entityType = trim($entityType);
1432 || in_array($entityType, self::$arAllowedEntityTypes)
1433 || !preg_match(
'/^[a-zA-Z0-9]+$/', $entityType)
1447 self::$arAllowedEntityTypes[] = $entityType;
1452 self::getAllowedFeatures();
1454 return self::$arAllowedEntityTypes;
1461 $entityTypeDescCode = trim($entityTypeDescCode);
1464 $entityTypeDescCode ==
''
1465 || array_key_exists($entityTypeDescCode, self::$arAllowedEntityTypesDesc)
1466 || !is_array($arEntityTypeDesc)
1480 self::$arAllowedEntityTypesDesc[$entityTypeDescCode] = $arEntityTypeDesc;
1487 self::getAllowedFeatures();
1489 return self::$arAllowedEntityTypesDesc;
1496 $newAllowedFeatures = [];
1500 $events =
GetModuleEvents(
'socialnetwork',
'OnFillSocNetFeaturesList');
1501 while ($arEvent = $events->Fetch())
1503 if ($arEvent[
'TO_MODULE_ID'] ===
'wiki')
1506 Loader::includeModule(
'bitrix24')
1507 && !\
Bitrix\Bitrix24\Feature::isFeatureEnabled(
'socialnetwork_wiki')
1510 $ignoreList[] = $arEvent[
'TO_MODULE_ID'];
1514 if (!in_array($arEvent[
'TO_MODULE_ID'], $ignoreList,
true))
1520 foreach($newAllowedFeatures as $strFeatureCode => $arFeature)
1522 self::addAllowedFeature($strFeatureCode, $arFeature);
1529 $isCollabUser =
false;
1532 $isCollabUser = (new \Bitrix\Socialnetwork\Collab\User\User(
$userId))->isCollaber();
1535 if (ModuleManager::isModuleInstalled(
'forum'))
1537 $arFeatureTmp =
array(
1538 "allowed" =>
array(),
1539 "operations" =>
array(
1541 "newtopic" =>
array(),
1542 "answer" =>
array(),
1545 "minoperation" =>
array(
"view"),
1546 "subscribe_events" =>
array(
1548 "ENTITIES" =>
array(),
1549 "OPERATION" =>
"view",
1550 "CLASS_FORMAT" =>
"CSocNetLogTools",
1551 "METHOD_FORMAT" =>
"FormatEvent_Forum",
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"
1568 if (COption::GetOptionString(
"socialnetwork",
"allow_forum_user",
"Y") ==
"Y")
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"),
1584 if (COption::GetOptionString(
"socialnetwork",
"allow_forum_group",
"Y") ==
"Y")
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"),
1600 \CSocNetAllowed::addAllowedFeature(
"forum", $arFeatureTmp);
1603 if (ModuleManager::isModuleInstalled(
'photogallery'))
1605 $arFeatureTmp =
array(
1606 "allowed" =>
array(),
1607 "operations" =>
array(
1611 "minoperation" =>
array(
"view"),
1612 "subscribe_events" =>
array(
1614 "ENTITIES" =>
array(),
1615 "OPERATION" =>
"view",
1616 "CLASS_FORMAT" =>
"CSocNetLogTools",
1617 "METHOD_FORMAT" =>
"FormatEvent_Photo",
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"
1632 "photo_photo" =>
array(
1633 "OPERATION" =>
"view",
1634 "CLASS_FORMAT" =>
"CSocNetLogTools",
1635 "METHOD_FORMAT" =>
"FormatEvent_PhotoPhoto",
1638 "ENTITIES" =>
array(
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"
1656 if (COption::GetOptionString(
"socialnetwork",
"allow_photo_user",
"Y") ==
"Y")
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"),
1670 if (COption::GetOptionString(
"socialnetwork",
"allow_photo_group",
"Y") ==
"Y")
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"),
1684 \CSocNetAllowed::addAllowedFeature(
"photo", $arFeatureTmp);
1687 $bIntranet = ModuleManager::isModuleInstalled(
'intranet');
1690 && ModuleManager::isModuleInstalled(
'calendar')
1696 $arFeatureTmp =
array(
1697 "allowed" =>
array(),
1698 "operations" =>
array(
1702 "minoperation" =>
array(
"view"),
1705 if ($isCollabUser || COption::GetOptionString(
"socialnetwork",
"allow_calendar_user",
"Y") ==
"Y")
1712 if (COption::GetOptionString(
"socialnetwork",
"allow_calendar_group",
"Y") ==
"Y")
1719 \CSocNetAllowed::addAllowedFeature(
"calendar", $arFeatureTmp);
1724 && ModuleManager::isModuleInstalled(
'tasks')
1727 $arFeatureTmp =
array(
1728 "allowed" =>
array(),
1729 "operations" =>
array(
1731 "view_all" =>
array(),
1733 "create_tasks" =>
array(),
1734 "edit_tasks" =>
array(),
1735 "delete_tasks" =>
array(),
1736 "modify_folders" =>
array(),
1737 "modify_common_views" =>
array(),
1739 "minoperation" =>
array(
"view_all",
"view"),
1740 "subscribe_events" =>
array(
1742 "ENTITIES" =>
array(),
1743 'FORUM_COMMENT_ENTITY' =>
'TK',
1744 "OPERATION" =>
"view",
1745 "CLASS_FORMAT" =>
"CSocNetLogTools",
1746 "METHOD_FORMAT" =>
"FormatEvent_Task2",
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"
1767 if (COption::GetOptionString(
"socialnetwork",
"allow_tasks_user",
"Y") ==
"Y")
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"),
1786 if (COption::GetOptionString(
"socialnetwork",
"allow_tasks_group",
"Y") ==
"Y")
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"),
1799 $arFeatureTmp[
"operations"][
"create_tasks"][
SONET_ENTITY_GROUP] = COption::GetOptionString(
"socialnetwork",
"default_tasks_operation_create_tasks_group",
SONET_ROLES_USER);
1803 $arFeatureTmp[
"operations"][
"modify_common_views"][
SONET_ENTITY_GROUP] = COption::GetOptionString(
"socialnetwork",
"default_tasks_operation_modify_common_views_group",
SONET_ROLES_MODERATOR);
1806 \CSocNetAllowed::addAllowedFeature(
"tasks", $arFeatureTmp);
1813 ModuleManager::isModuleInstalled(
'webdav')
1814 || ModuleManager::isModuleInstalled(
'disk')
1817 COption::GetOptionString(
"socialnetwork",
"allow_files_user",
"Y") ==
"Y"
1818 || COption::GetOptionString(
"socialnetwork",
"allow_files_group",
"Y") ==
"Y"
1822 $arFeatureTmp =
array(
1823 "allowed" =>
array(),
1824 "operations" =>
array(
1826 "write_limited" =>
array(),
1828 "minoperation" =>
array(
"view"),
1829 "subscribe_events" =>
array(
1831 "ENTITIES" =>
array(),
1832 "OPERATION" =>
"view",
1833 "CLASS_FORMAT" =>
"CSocNetLogTools",
1834 "METHOD_FORMAT" =>
"FormatEvent_Files",
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"
1849 if (ModuleManager::isModuleInstalled(
"bizproc"))
1851 $arFeatureTmp[
"operations"][
"bizproc"] =
array();
1854 $arFeatureTmp[
"operations"][
"write"] =
array();
1856 if (COption::GetOptionString(
"socialnetwork",
"allow_files_user",
"Y") ==
"Y")
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"),
1871 if (COption::GetOptionString(
"socialnetwork",
"allow_files_group",
"Y") ==
"Y")
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"),
1886 \CSocNetAllowed::addAllowedFeature(
"files", $arFeatureTmp);
1890 ModuleManager::isModuleInstalled(
'blog')
1892 COption::GetOptionString(
"socialnetwork",
"allow_blog_user",
"Y") ==
"Y"
1893 || COption::GetOptionString(
"socialnetwork",
"allow_blog_group",
"Y") ==
"Y"
1897 $livefeedProvider = new \Bitrix\Socialnetwork\Livefeed\BlogPost;
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(),
1913 "minoperation" =>
array(
"view_comment",
"view_post"),
1914 "subscribe_events" =>
array(
1916 "ENTITIES" =>
array(),
1919 "REAL_EVENT_ID" =>
"blog_post",
1920 "FULL_SET" => array_unique(array_merge($livefeedProvider->getEventId(),
array(
"blog",
"blog_comment")))
1922 "blog_post" =>
array(
1923 "ENTITIES" =>
array(),
1924 "OPERATION" =>
"view_post",
1926 "CLASS_FORMAT" =>
"CSocNetLogTools",
1927 "METHOD_FORMAT" =>
"FormatEvent_Blog",
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"
1938 "blog_comment" =>
array(
1939 "ENTITIES" =>
array(),
1940 "OPERATION" =>
"view_comment",
1942 "CLASS_FORMAT" =>
"CSocNetLogTools",
1943 "METHOD_FORMAT" =>
"FormatEvent_Blog",
1949 if (COption::GetOptionString(
"socialnetwork",
"allow_blog_user",
"Y") ==
"Y")
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"),
1959 "TITLE" =>
GetMessage(
"SOCNET_LOG_BLOG_POST_USER")
1969 if (COption::GetOptionString(
"socialnetwork",
"allow_blog_group",
"Y") ==
"Y")
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"),
1979 "TITLE" =>
GetMessage(
"SOCNET_LOG_BLOG_POST_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);
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);
2001 $arFeatureTmp[
"subscribe_events"][
"blog_post_important"] = $arFeatureTmp[
"subscribe_events"][
"blog_post"];
2002 if (ModuleManager::isModuleInstalled(
'vote'))
2004 $arFeatureTmp[
"subscribe_events"][
"blog_post_vote"] = $arFeatureTmp[
"subscribe_events"][
"blog_post"];
2006 if (ModuleManager::isModuleInstalled(
'intranet'))
2008 $arFeatureTmp[
"subscribe_events"][
"blog_post_grat"] = $arFeatureTmp[
"subscribe_events"][
"blog_post"];
2010 \CSocNetAllowed::addAllowedFeature(
"blog", $arFeatureTmp);
2014 ModuleManager::isModuleInstalled(
'search')
2016 COption::GetOptionString(
"socialnetwork",
"allow_search_user",
"N") ==
"Y"
2017 || COption::GetOptionString(
"socialnetwork",
"allow_search_group",
"Y") ==
"Y"
2021 $arFeatureTmp =
array(
2022 "allowed" =>
array(),
2023 "operations" =>
array(),
2024 "minoperation" =>
array(),
2027 if (COption::GetOptionString(
"socialnetwork",
"allow_search_user",
"N") ==
"Y")
2033 if (COption::GetOptionString(
"socialnetwork",
"allow_search_group",
"Y") ==
"Y")
2043 ModuleManager::isModuleInstalled(
'sign')
2044 && method_exists(\
Bitrix\Sign\Config\Storage::class,
'isB2eAvailable')
2045 && \
Bitrix\Sign\Config\Storage::instance()->isB2eAvailable()
2051 'minoperation' => [],
2056 self::addAllowedFeature(
'sign', $arFeatureTmp);
2061 ModuleManager::isModuleInstalled(
'im')
2062 && (COption::GetOptionString(
'socialnetwork',
'use_workgroup_chat',
"Y") ==
"Y")
2065 $arFeatureTmp =
array(
2067 "operations" =>
array(),
2068 "minoperation" =>
array(),
2074 if (defined(
"BX_STARTED"))
2076 self::addRestFeatures();
2088 if (Loader::includeModule(
'rest'))
2092 "operations" =>
array(),
2093 "minoperation" =>
array(),
2098 || !is_object(
$USER)
2106 if(is_array($placementHandlerList))
2108 foreach($placementHandlerList as $placementHandler)
2112 "operations" =>
array(),
2113 "minoperation" =>
array(),
2114 "title" => $placementHandler[
'TITLE']
2123 $strFeatureCode = trim($strFeatureCode);
2126 $strFeatureCode ==
''
2127 || !is_array($arFeature)
2135 && array_key_exists(
"subscribe_events", $arFeature)
2138 foreach ($arFeature[
"subscribe_events"] as $event_id_tmp => $arEventTmp)
2141 array_key_exists(
"ENTITIES", $arEventTmp)
2150 if (!array_key_exists($strFeatureCode, self::$arAllowedFeatures))
2152 self::$arAllowedFeatures[$strFeatureCode] = $arFeature;
2157 array_key_exists(
"operations", $arFeature)
2158 && is_array($arFeature[
"operations"])
2161 if (!array_key_exists(
"operations", self::$arAllowedFeatures[$strFeatureCode]))
2163 self::$arAllowedFeatures[$strFeatureCode][
"operations"] =
array();
2166 foreach ($arFeature[
"operations"] as $strOpCode => $arOperation)
2168 if (is_array($arOperation))
2170 if (!array_key_exists($strOpCode, self::$arAllowedFeatures[$strFeatureCode][
"operations"]))
2172 self::$arAllowedFeatures[$strFeatureCode][
"operations"][$strOpCode] =
array();
2175 foreach ($arOperation as
$key => $value)
2177 self::$arAllowedFeatures[$strFeatureCode][
"operations"][$strOpCode][
$key] = $value;
2184 array_key_exists(
"subscribe_events", $arFeature)
2185 && is_array($arFeature[
"subscribe_events"])
2188 if (!array_key_exists(
"subscribe_events", self::$arAllowedFeatures[$strFeatureCode]))
2190 self::$arAllowedFeatures[$strFeatureCode][
"subscribe_events"] =
array();
2193 foreach ($arFeature[
"subscribe_events"] as $strEventCode => $arEvent)
2195 if (is_array($arEvent))
2197 self::$arAllowedFeatures[$strFeatureCode][
"subscribe_events"][$strEventCode] = $arEvent;
2208 $strFeatureCode = trim($strFeatureCode);
2211 $strFeatureCode ==
''
2212 || !array_key_exists($strFeatureCode, self::$arAllowedFeatures)
2213 || !is_array($arFeature)
2221 && array_key_exists(
"subscribe_events", $arFeature)
2224 foreach ($arFeature[
"subscribe_events"] as $event_id_tmp => $arEventTmp)
2227 array_key_exists(
"ENTITIES", $arEventTmp)
2236 self::$arAllowedFeatures[$strFeatureCode] = $arFeature;
2243 static $init =
false;
2246 \CSocNetAllowed::addStandardFeatureList();
2251 return self::$arAllowedFeatures;
2258 $newAllowedLogEvent =
array();
2261 while ($arEvent = $events->Fetch())
2266 foreach($newAllowedLogEvent as $strEventCode => $arLogEvent)
2268 self::addAllowedLogEvent($strEventCode, $arLogEvent);
2274 $strEventCode = trim($strEventCode);
2278 || array_key_exists($strEventCode, self::$arAllowedLogEvents)
2279 || !is_array($arLogEvent)
2287 if ($strEventCode ==
"system_groups")
2293 array_key_exists(
"ENTITIES", $arLogEvent)
2300 if ($strEventCode ==
"system")
2302 foreach($arLogEvent[
"FULL_SET"] as
$i => $event_id_tmp)
2304 if ($event_id_tmp ==
"system_groups")
2306 unset($arLogEvent[
"FULL_SET"][
$i]);
2314 if ($strEventCode ==
"system_friends")
2319 if ($strEventCode ==
"system")
2321 foreach($arLogEvent[
"FULL_SET"] as
$i => $event_id_tmp)
2323 if ($event_id_tmp ==
"system_friends")
2325 unset($arLogEvent[
"FULL_SET"][
$i]);
2331 self::$arAllowedLogEvents[$strEventCode] = $arLogEvent;
2338 self::getAllowedFeatures();
2340 return self::$arAllowedLogEvents;
2345 static $bAlreadyRun;
2349 self::runEventForAllowedEntityType();
2350 self::runEventForAllowedFeature();
2351 self::runEventForAllowedLogEvent();
2352 $bAlreadyRun =
true;
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static getHandlersList($placement, $skipInstallCheck=false, int $userId=null)
static getExtranetUserIdList()
static getExtranetSonetGroupIdList()
static getCurrentUserId()
static GetSubordinateGroups($grId)
static GetRelatedUsers($userID, $relation, $arNavStartParams=false, $bActiveOnly="N")
static IsFriends($firstUserID, $secondUserID)
static IsFeatureEnabled($_1488512778)
static IsFeatureEditable($_1488512778)
static addAllowedLogEvent($strEventCode, $arLogEvent)
static runEventForAllowedFeature()
static addAllowedEntityTypeDesc($entityTypeDescCode, $arEntityTypeDesc)
static addStandardFeatureList()
static updateAllowedFeature($strFeatureCode, $arFeature)
static getAllowedFeatures()
static addAllowedEntityType($entityType)
static runEventForAllowedLogEvent()
static getAllowedEntityTypes()
static RunEventForAllowedEntityType()
static getAllowedEntityTypesDesc()
static addAllowedFeature($strFeatureCode, $arFeature)
static GetAllowedLogEvents()
static GetList($arOrder=Array("ID"=> "DESC"), $arFilter=Array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
convert_video($params, $path)
cut_long_words_callback($m)
static killAllTags($text)
pre_convert_code_tag($text="")
convert_image_tag($url="", $type="html")
wrap_long_words($text="")
convert_quote_tag($text="", $type="html")
convert_close_tag($marker="quote")
convert_code_tag($text="", $type="html")
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())
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")
convert_anchor_tag_callback($m)
convert_open_tag($marker="quote", $type="html")
strip_words($string, $count)
convert_emoticon($code="", $image="", $description="", $servername="")
convert_anchor_tag($url, $text, $pref="")
__construct($strLang=False, $pathToSmile=false)
convert_font_attr($attr, $value="", $text="")
static clearAllTags($text)
if(!is_array($prop["VALUES"])) $tmp
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(Loader::includeModule( 'bitrix24')) elseif(Loader::includeModule('intranet') &&CIntranetUtils::getPortalZone() !=='ru') $description
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
const BX_RESIZE_IMAGE_PROPORTIONAL
ExecuteModuleEventEx($arEvent, $arParams=[])
ParseDateTime($datetime, $format=false)
AddEventHandler($FROM_MODULE_ID, $MESSAGE_ID, $CALLBACK, $SORT=100, $FULL_PATH=false)
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
</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."%"
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
const SONET_SUBSCRIBE_ENTITY_USER
const SONET_SUBSCRIBE_ENTITY_GROUP
const SONET_ROLES_MODERATOR
const SONET_RELATIONS_FRIEND
const SONET_RELATIONS_TYPE_FRIENDS
const SONET_RELATIONS_TYPE_ALL
const SONET_RELATIONS_TYPE_AUTHORIZED
const SONET_RELATIONS_TYPE_NONE
if($bIntranet) $bCalendar
$GLOBALS['_____370096793']