1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
blog_post.php
См. документацию.
1<?php
2
3require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/blog/general/blog_post.php");
4
6{
7 /*************** ADD, UPDATE, DELETE *****************/
8 public static function Add($arFields)
9 {
11
12 $arFields1 = array();
13
14 foreach ($arFields as $key => $value)
15 {
16 if (mb_substr($key, 0, 1) == "=")
17 {
18 $arFields1[mb_substr($key, 1)] = $value;
19 unset($arFields[$key]);
20 }
21 }
22
24 return false;
25 elseif(!$USER_FIELD_MANAGER->CheckFields("BLOG_POST", 0, $arFields, (isset($arFields["AUTHOR_ID"]) && intval($arFields["AUTHOR_ID"]) > 0 ? intval($arFields["AUTHOR_ID"]) : false)))
26 return false;
27
28 foreach(GetModuleEvents("blog", "OnBeforePostAdd", true) as $arEvent)
29 {
30 if (ExecuteModuleEventEx($arEvent, Array(&$arFields))===false)
31 return false;
32 }
33
34 if (
35 array_key_exists("ATTACH_IMG", $arFields)
36 && is_array($arFields["ATTACH_IMG"])
37 && (
38 !array_key_exists("MODULE_ID", $arFields["ATTACH_IMG"])
39 || $arFields["ATTACH_IMG"]["MODULE_ID"] == ''
40 )
41 )
42 $arFields["ATTACH_IMG"]["MODULE_ID"] = "blog";
43
44 $prefix = "blog";
45 if (($arFields["URL"] ?? '') <> '')
46 {
47 $prefix .= "/" . $arFields["URL"];
48 }
49
50 CFile::SaveForDB($arFields, "ATTACH_IMG", $prefix);
51
52 $arInsert = $DB->PrepareInsert("b_blog_post", $arFields);
53
54 foreach ($arFields1 as $key => $value)
55 {
56 if ($arInsert[0] <> '')
57 $arInsert[0] .= ", ";
58 $arInsert[0] .= $key;
59 if ($arInsert[1] <> '')
60 $arInsert[1] .= ", ";
61 $arInsert[1] .= $value;
62 }
63
64 $ID = false;
65 if ($arInsert[0] <> '')
66 {
67 $strSql =
68 "INSERT INTO b_blog_post(".$arInsert[0].") ".
69 "VALUES(".$arInsert[1].")";
70 $DB->Query($strSql);
71
72 $ID = intval($DB->LastID());
73
74 foreach(GetModuleEvents("blog", "OnBeforePostUserFieldUpdate", true) as $arEvent)
75 ExecuteModuleEventEx($arEvent, Array("BLOG_POST", $ID, $arFields));
76
77 $USER_FIELD_MANAGER->Update("BLOG_POST", $ID, $arFields, (isset($arFields["AUTHOR_ID"]) && intval($arFields["AUTHOR_ID"]) > 0 ? intval($arFields["AUTHOR_ID"]) : false));
78 }
79
80 if ($ID)
81 {
82 $arPost = CBlogPost::GetByID($ID);
83 CBlog::SetStat($arPost["BLOG_ID"]);
84
86 CBlogPost::SetPostPerms($ID, $arFields["PERMS_COMMENT"] ?? null, BLOG_PERMS_COMMENT);
87
88 $arFields["SC_PERM"] = Array();
89 if(array_key_exists("SOCNET_RIGHTS", $arFields))
90 {
91 $arFields["SC_PERM"] = CBlogPost::AddSocNetPerms($ID, $arFields["SOCNET_RIGHTS"], $arPost);
92 }
93
94 foreach(GetModuleEvents("blog", "OnPostAdd", true) as $arEvent)
95 {
96 ExecuteModuleEventEx($arEvent, Array($ID, &$arFields));
97 }
98
99 if (CModule::IncludeModule("search"))
100 {
101 if (
102 $arPost["DATE_PUBLISHED"] == "Y"
103 && $arPost["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH
105 )
106 {
107 $tag = "";
108 $arBlog = CBlog::GetByID($arPost["BLOG_ID"]);
109 if($arBlog["SEARCH_INDEX"] == "Y")
110 {
111 $arGroup = CBlogGroup::GetByID(isset($arFields["SEARCH_GROUP_ID"]) && intval($arFields["SEARCH_GROUP_ID"]) > 0 ? $arFields["SEARCH_GROUP_ID"] : $arBlog["GROUP_ID"]);
112
113 if (($arFields["PATH"] ?? '') <> '')
114 {
115 $arFields["PATH"] = (
116 ($arFields["CODE"] ?? '') <> ''
117 ? str_replace("#post_id#", $arFields["CODE"], $arFields["PATH"])
118 : str_replace("#post_id#", $ID, $arFields["PATH"])
119 );
120
121 $arPostSite = array(
122 $arGroup["SITE_ID"] => $arFields["PATH"]
123 );
124 }
125 else
126 {
127 $arPostSite = array(
128 $arGroup["SITE_ID"] => CBlogPost::PreparePath(
129 $arBlog["URL"],
130 $arPost["ID"],
131 $arGroup["SITE_ID"],
132 false,
133 $arBlog["OWNER_ID"],
134 $arBlog["SOCNET_GROUP_ID"]
135 )
136 );
137 }
138
139 if (
140 $arBlog["USE_SOCNET"] == "Y"
141 && CModule::IncludeModule("extranet")
142 )
143 {
144 $arPostSiteExt = CExtranet::GetSitesByLogDestinations($arFields["SC_PERM"]);
145 foreach($arPostSiteExt as $lid)
146 {
147 if (!array_key_exists($lid, $arPostSite))
148 {
149 $arPostSite[$lid] = str_replace(
150 array("#user_id#", "#post_id#"),
151 array($arBlog["OWNER_ID"], $arPost["ID"]),
152 COption::GetOptionString("socialnetwork", "userblogpost_page", false, $lid)
153 );
154 }
155 }
156 }
157
158 if($arPost["CATEGORY_ID"] <> '')
159 {
160 $arC = explode(",", $arPost["CATEGORY_ID"]);
161 $arTag = Array();
162 foreach($arC as $v)
163 {
164 $arCategory = CBlogCategory::GetByID($v);
165 $arTag[] = $arCategory["NAME"];
166 }
167 $tag = implode(",", $arTag);
168 }
169
170 $searchContent = blogTextParser::killAllTags($arPost["DETAIL_TEXT"]);
171 $searchContent .= "\r\n" . $USER_FIELD_MANAGER->OnSearchIndex("BLOG_POST", $arPost["ID"]);
172
173 if(intval($arPost["AUTHOR_ID"]) > 0)
174 {
175 $dbUser = CUser::GetByID($arPost["AUTHOR_ID"]);
176 if($arUser = $dbUser->Fetch())
177 {
178 $arTmpUser = array(
179 "NAME" => $arUser["NAME"],
180 "LAST_NAME" => $arUser["LAST_NAME"],
181 "SECOND_NAME" => $arUser["SECOND_NAME"],
182 "LOGIN" => $arUser["LOGIN"],
183 );
184 $authorName = CUser::FormatName(CSite::GetNameFormat(), $arTmpUser, false, false);
185 if($authorName <> '')
186 {
187 $searchContent .= "\r\n".$authorName;
188 }
189 }
190 }
191
192 $arSearchIndex = array(
193 "SITE_ID" => $arPostSite,
194 "LAST_MODIFIED" => $arPost["DATE_PUBLISH"],
195 "PARAM1" => "POST",
196 "PARAM2" => $arPost["BLOG_ID"],
197 "PARAM3" => $arPost["ID"],
198 "PERMISSIONS" => array(2),
199 "TITLE" => CSearch::KillTags(blogTextParser::killAllTags($arPost["MICRO"] == "Y" ? $arPost["TITLE"] : htmlspecialcharsEx($arPost["TITLE"]))),
200 "BODY" => CSearch::KillTags($searchContent),
201 "TAGS" => $tag,
202 "USER_ID" => $arPost["AUTHOR_ID"],
203 "ENTITY_TYPE_ID" => "BLOG_POST",
204 "ENTITY_ID" => $arPost["ID"],
205 );
206
207 if($arBlog["USE_SOCNET"] == "Y")
208 {
209 CBlogSearch::fillSearchPermsWithSonetGroupData($arFields["SC_PERM"], $arPost["AUTHOR_ID"], $arSearchIndex, array("INIT_PERMISSIONS" => "Y"));
210
211 // get mentions and grats
213 }
214
215 CSearch::Index("blog", "P".$ID, $arSearchIndex);
216 }
217 }
218 }
219 }
220
221 return $ID;
222 }
223
224 public static function Update($ID, $arFields, $bSearchIndex = true)
225 {
227
228 $ID = intval($ID);
229 if (($arFields["PATH"] ?? '') <> '')
230 {
231 $arFields["PATH"] = str_replace("#post_id#", $ID, $arFields["PATH"]);
232 }
233
234 $arFields1 = array();
235 foreach ($arFields as $key => $value)
236 {
237 if (mb_substr($key, 0, 1) == "=")
238 {
239 $arFields1[mb_substr($key, 1)] = $value;
240 unset($arFields[$key]);
241 }
242 }
243
244 if (!CBlogPost::CheckFields("UPDATE", $arFields, $ID))
245 return false;
246 elseif(!$USER_FIELD_MANAGER->CheckFields("BLOG_POST", $ID, $arFields, (isset($arFields["AUTHOR_ID"]) && intval($arFields["AUTHOR_ID"]) > 0 ? intval($arFields["AUTHOR_ID"]) : false)))
247 return false;
248
249 foreach(GetModuleEvents("blog", "OnBeforePostUpdate", true) as $arEvent)
250 {
251 if (ExecuteModuleEventEx($arEvent, Array($ID, &$arFields))===false)
252 return false;
253 }
254
255 $arOldPost = CBlogPost::GetByID($ID);
256
257 if(is_array($arFields["ATTACH_IMG"]))
258 {
259 if (
260 !array_key_exists("MODULE_ID", $arFields["ATTACH_IMG"])
261 || $arFields["ATTACH_IMG"]["MODULE_ID"] == ''
262 )
263 $arFields["ATTACH_IMG"]["MODULE_ID"] = "blog";
264
265 $prefix = "blog";
266 if($arFields["URL"] <> '')
267 $prefix .= "/".$arFields["URL"];
268 CFile::SaveForDB($arFields, "ATTACH_IMG", $prefix);
269 }
270
271 $strUpdate = $DB->PrepareUpdate("b_blog_post", $arFields);
272
273 foreach ($arFields1 as $key => $value)
274 {
275 if ($strUpdate <> '')
276 $strUpdate .= ", ";
277 $strUpdate .= $key."=".$value." ";
278 }
279
280 if ($strUpdate <> '')
281 {
282 $oldPostPerms = CBlogUserGroup::GetGroupPerms(1, $arOldPost["BLOG_ID"], $ID, BLOG_PERMS_POST);
283
284 $strSql =
285 "UPDATE b_blog_post SET ".
286 " ".$strUpdate." ".
287 "WHERE ID = ".$ID." ";
288 $DB->Query($strSql);
289
290 unset(static::$arBlogPostCache[$ID]);
291
292 foreach(GetModuleEvents("blog", "OnBeforePostUserFieldUpdate", true) as $arEvent)
293 ExecuteModuleEventEx($arEvent, Array("BLOG_POST", $ID, $arFields));
294
295 $USER_FIELD_MANAGER->Update("BLOG_POST", $ID, $arFields, (isset($arFields["AUTHOR_ID"]) && intval($arFields["AUTHOR_ID"]) > 0 ? intval($arFields["AUTHOR_ID"]) : false));
296 }
297 else
298 {
299 $ID = False;
300 }
301
302 if ($ID)
303 {
304 $arNewPost = CBlogPost::GetByID($ID);
305 if($arNewPost["PUBLISH_STATUS"] != $arOldPost["PUBLISH_STATUS"] || $arNewPost["BLOG_ID"] != $arOldPost["BLOG_ID"])
306 CBlog::SetStat($arNewPost["BLOG_ID"]);
307
308 if ($arNewPost["BLOG_ID"] != $arOldPost["BLOG_ID"])
309 CBlog::SetStat($arOldPost["BLOG_ID"]);
310
311 if (is_set($arFields, "PERMS_POST"))
313 if (is_set($arFields, "PERMS_COMMENT"))
315
316 if(array_key_exists("SOCNET_RIGHTS", $arFields))
317 {
319 $arFields["SC_PERM"] = CBlogPost::UpdateSocNetPerms($ID, $arFields["SOCNET_RIGHTS"], $arNewPost);
320 }
321
322 foreach(GetModuleEvents("blog", "OnPostUpdate", true) as $arEvent)
323 {
324 ExecuteModuleEventEx($arEvent, Array($ID, &$arFields));
325 }
326
327 if (
328 $bSearchIndex
329 && CModule::IncludeModule("search")
330 )
331 {
332 $newPostPerms = CBlogUserGroup::GetGroupPerms(1, $arNewPost["BLOG_ID"], $ID, BLOG_PERMS_POST);
333 $arBlog = CBlog::GetByID($arNewPost["BLOG_ID"]);
334
335 if (
336 $arOldPost["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH &&
337 $oldPostPerms >= BLOG_PERMS_READ
338 && (
339 $arNewPost["PUBLISH_STATUS"] != BLOG_PUBLISH_STATUS_PUBLISH ||
340 $newPostPerms < BLOG_PERMS_READ
341 )
342 || $arBlog["SEARCH_INDEX"] != "Y"
343 )
344 {
345 CSearch::Index("blog", "P".$ID,
346 array(
347 "TITLE" => "",
348 "BODY" => ""
349 )
350 );
351 CSearch::DeleteIndex("blog", false, "COMMENT", $arBlog["ID"]."|".$ID);
352 }
353 elseif (
354 $arNewPost["DATE_PUBLISHED"] == "Y"
355 && $arNewPost["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH
356 && $newPostPerms >= BLOG_PERMS_READ
357 && $arBlog["SEARCH_INDEX"] == "Y"
358 )
359 {
360 $tag = "";
361 $arGroup = CBlogGroup::GetByID(isset($arFields["SEARCH_GROUP_ID"]) && intval($arFields["SEARCH_GROUP_ID"]) > 0 ? $arFields["SEARCH_GROUP_ID"] : $arBlog["GROUP_ID"]);
362 if (($arFields["PATH"] ?? '') <> '')
363 {
364 $arPostSite = array($arGroup["SITE_ID"] => $arFields["PATH"]);
365 }
366 elseif($arNewPost["PATH"] <> '')
367 {
368 $arNewPost["PATH"] = (
369 $arNewPost["CODE"] <> ''
370 ? str_replace("#post_id#", $arNewPost["CODE"], $arNewPost["PATH"])
371 : str_replace("#post_id#", $ID, $arNewPost["PATH"])
372 );
373 $arPostSite = array($arGroup["SITE_ID"] => $arNewPost["PATH"]);
374 }
375 else
376 {
377 $arPostSite = array(
378 $arGroup["SITE_ID"] => CBlogPost::PreparePath(
379 $arBlog["URL"],
380 $arNewPost["ID"],
381 $arGroup["SITE_ID"],
382 false,
383 $arBlog["OWNER_ID"],
384 $arBlog["SOCNET_GROUP_ID"]
385 )
386 );
387 }
388
389 if (
390 $arBlog["USE_SOCNET"] == "Y"
391 && CModule::IncludeModule("extranet")
392 )
393 {
394 $arPostSiteExt = CExtranet::GetSitesByLogDestinations($arFields["SC_PERM"] ?? null);
395 foreach($arPostSiteExt as $lid)
396 {
397 if (!array_key_exists($lid, $arPostSite))
398 {
399 $arPostSite[$lid] = str_replace(
400 array("#user_id#", "#post_id#"),
401 array($arBlog["OWNER_ID"], $arNewPost["ID"]),
402 COption::GetOptionString("socialnetwork", "userblogpost_page", false, $lid)
403 );
404 }
405 }
406 }
407
408 if($arNewPost["CATEGORY_ID"] <> '')
409 {
410 $arC = explode(",", $arNewPost["CATEGORY_ID"]);
411 $arTag = Array();
412 foreach($arC as $v)
413 {
414 $arCategory = CBlogCategory::GetByID($v);
415 $arTag[] = $arCategory["NAME"];
416 }
417 $tag = implode(",", $arTag);
418 }
419
420 $searchContent = blogTextParser::killAllTags($arNewPost["DETAIL_TEXT"]);
421 $searchContent .= "\r\n" . $USER_FIELD_MANAGER->OnSearchIndex("BLOG_POST", $arNewPost["ID"]);
422
423 $authorName = "";
424 if(intval($arNewPost["AUTHOR_ID"]) > 0)
425 {
426 $dbUser = CUser::GetByID($arNewPost["AUTHOR_ID"]);
427 if($arUser = $dbUser->Fetch())
428 {
429 $arTmpUser = array(
430 "NAME" => $arUser["NAME"],
431 "LAST_NAME" => $arUser["LAST_NAME"],
432 "SECOND_NAME" => $arUser["SECOND_NAME"],
433 "LOGIN" => $arUser["LOGIN"],
434 );
435 $authorName = CUser::FormatName(CSite::GetNameFormat(), $arTmpUser, false, false);
436 if($authorName <> '')
437 {
438 $searchContent .= "\r\n".$authorName;
439 }
440 }
441 }
442
443 $arSearchIndex = array(
444 "SITE_ID" => $arPostSite,
445 "LAST_MODIFIED" => $arNewPost["DATE_PUBLISH"],
446 "PARAM1" => "POST",
447 "PARAM2" => $arNewPost["BLOG_ID"],
448 "PARAM3" => $arNewPost["ID"],
449 "PERMISSIONS" => array(2),
450 "TITLE" => CSearch::KillTags($arNewPost["MICRO"] == "Y" ? $arNewPost["TITLE"] : htmlspecialcharsEx($arNewPost["TITLE"])),
451 "BODY" => CSearch::KillTags($searchContent),
452 "TAGS" => $tag,
453 "USER_ID" => $arNewPost["AUTHOR_ID"],
454 "ENTITY_TYPE_ID" => "BLOG_POST",
455 "ENTITY_ID" => $arNewPost["ID"],
456 );
457
458 $bIndexComment = false;
459 if($arBlog["USE_SOCNET"] == "Y")
460 {
461 if(!empty($arFields["SC_PERM"]))
462 {
463 $arSearchIndex["PERMISSIONS"] = $arFields["SC_PERM"];
464 if($arFields["SC_PERM"] != $arFields["SC_PERM_OLD"])
465 {
466 $bIndexComment = true;
467 }
468 }
469 else
470 {
471 $arSearchIndex["PERMISSIONS"] = CBlogPost::GetSocnetPermsCode($ID);
472 }
473
474 CBlogSearch::fillSearchPermsWithSonetGroupData($arSearchIndex["PERMISSIONS"], $arNewPost["AUTHOR_ID"], $arSearchIndex, array("INIT_PERMISSIONS" => "N"));
475
476 // get mentions and grats
478 }
479
480 CSearch::Index("blog", "P".$ID, $arSearchIndex, True);
481
482 if(($arOldPost["PUBLISH_STATUS"] != BLOG_PUBLISH_STATUS_PUBLISH && $arNewPost["PUBLISH_STATUS"] == BLOG_PUBLISH_STATUS_PUBLISH) || $bIndexComment) //index comments
483 {
484 $arParamsComment = Array(
485 "BLOG_ID" => $arBlog["ID"],
486 "POST_ID" => $ID,
487 "SITE_ID" => $arGroup["SITE_ID"],
488 "PATH" => $arPostSite[$arGroup["SITE_ID"]]."?commentId=#comment_id##com#comment_id#",
489 "BLOG_URL" => $arBlog["URL"],
490 "OWNER_ID" => $arBlog["OWNER_ID"],
491 "SOCNET_GROUP_ID" => $arBlog["SOCNET_GROUP_ID"],
492 "USE_SOCNET" => $arBlog["USE_SOCNET"],
493 );
494
495 CBlogComment::_IndexPostComments($arParamsComment);
496 }
497 }
498 }
499 }
500
501 BXClearCache(true, '/blog/socnet_post/gen/'.intval($ID / 100)."/".$ID);
502 if(defined("BX_COMP_MANAGED_CACHE"))
503 {
504 $CACHE_MANAGER->ClearByTag("blog_post_".$ID);
505 }
506
507 return $ID;
508 }
509
510 //*************** SELECT *********************/
511 public static function GetByID($ID)
512 {
513 global $DB;
514
515 $ID = intval($ID);
516
517 if (
518 !empty(static::$arBlogPostCache[$ID])
519 && is_set(static::$arBlogPostCache[$ID], "ID")
520 )
521 {
522 return static::$arBlogPostCache[$ID];
523 }
524 else
525 {
526 static $strSql;
527 if (!isset($strSql))
528 $strSql =
529 "SELECT P.*, CASE WHEN P.DATE_PUBLISH <= NOW() THEN 'Y' ELSE 'N' END as DATE_PUBLISHED, ".
530 " ".$DB->DateToCharFunction("P.DATE_CREATE", "FULL")." as DATE_CREATE, ".
531 " ".$DB->DateToCharFunction("P.DATE_PUBLISH", "FULL")." as DATE_PUBLISH ".
532 "FROM b_blog_post P ".
533 "WHERE P.ID = ";
534 $dbResult = $DB->Query($strSql.$ID);
535 if ($arResult = $dbResult->Fetch())
536 {
537 if (!empty($arResult['TITLE']))
538 {
540 }
541 if (!empty($arResult['DETAIL_TEXT']))
542 {
543 $arResult['DETAIL_TEXT'] = \Bitrix\Main\Text\Emoji::decode($arResult['DETAIL_TEXT']);
544 }
545
546 static::$arBlogPostCache[$ID] = $arResult;
547 return $arResult;
548 }
549 }
550
551 return False;
552 }
553
554 public static function GetList(
555 $arOrder = ["ID" => "DESC"],
556 $arFilter = [],
557 $arGroupBy = false,
558 $arNavStartParams = false,
559 $arSelectFields = []
560 )
561 {
563 static $blogPostEventIdList = null;
564
565 $obUserFieldsSql = new CUserTypeSQL;
566 $obUserFieldsSql->SetEntity("BLOG_POST", "P.ID");
567 $obUserFieldsSql->SetSelect($arSelectFields);
568 $obUserFieldsSql->SetFilter($arFilter);
569 $obUserFieldsSql->SetOrder($arOrder);
570
571 if (isset($arFilter["DATE_PUBLISH_DAY"]) && isset($arFilter["DATE_PUBLISH_MONTH"]) && isset($arFilter["DATE_PUBLISH_YEAR"]))
572 {
573 if (mb_strlen($arFilter["DATE_PUBLISH_YEAR"]) == 2)
574 $arFilter["DATE_PUBLISH_YEAR"] = "20".$arFilter["DATE_PUBLISH_YEAR"];
575 $date1 = mktime(0, 0, 0, $arFilter["DATE_PUBLISH_MONTH"], $arFilter["DATE_PUBLISH_DAY"], $arFilter["DATE_PUBLISH_YEAR"]);
576 $date2 = mktime(0, 0, 0, $arFilter["DATE_PUBLISH_MONTH"], $arFilter["DATE_PUBLISH_DAY"] + 1, $arFilter["DATE_PUBLISH_YEAR"]);
577 $arFilter[">=DATE_PUBLISH"] = ConvertTimeStamp($date1, "SHORT", SITE_ID);
578 $arFilter["<DATE_PUBLISH"] = ConvertTimeStamp($date2, "SHORT", SITE_ID);
579
580 unset($arFilter["DATE_PUBLISH_DAY"]);
581 unset($arFilter["DATE_PUBLISH_MONTH"]);
582 unset($arFilter["DATE_PUBLISH_YEAR"]);
583 }
584 elseif (isset($arFilter["DATE_PUBLISH_MONTH"]) && isset($arFilter["DATE_PUBLISH_YEAR"]))
585 {
586 if (mb_strlen($arFilter["DATE_PUBLISH_YEAR"]) == 2)
587 $arFilter["DATE_PUBLISH_YEAR"] = "20".$arFilter["DATE_PUBLISH_YEAR"];
588 $date1 = mktime(0, 0, 0, $arFilter["DATE_PUBLISH_MONTH"], 1, $arFilter["DATE_PUBLISH_YEAR"]);
589 $date2 = mktime(0, 0, 0, $arFilter["DATE_PUBLISH_MONTH"] + 1, 1, $arFilter["DATE_PUBLISH_YEAR"]);
590 $arFilter[">=DATE_PUBLISH"] = ConvertTimeStamp($date1, "SHORT", SITE_ID);
591 $arFilter["<DATE_PUBLISH"] = ConvertTimeStamp($date2, "SHORT", SITE_ID);
592
593 unset($arFilter["DATE_PUBLISH_MONTH"]);
594 unset($arFilter["DATE_PUBLISH_YEAR"]);
595 }
596 elseif (isset($arFilter["DATE_PUBLISH_YEAR"]))
597 {
598 if (mb_strlen($arFilter["DATE_PUBLISH_YEAR"]) == 2)
599 $arFilter["DATE_PUBLISH_YEAR"] = "20".$arFilter["DATE_PUBLISH_YEAR"];
600 $date1 = mktime(0, 0, 0, 1, 1, $arFilter["DATE_PUBLISH_YEAR"]);
601 $date2 = mktime(0, 0, 0, 1, 1, $arFilter["DATE_PUBLISH_YEAR"] + 1);
602 $arFilter[">=DATE_PUBLISH"] = ConvertTimeStamp($date1, "SHORT", SITE_ID);
603 $arFilter["<DATE_PUBLISH"] = ConvertTimeStamp($date2, "SHORT", SITE_ID);
604
605 unset($arFilter["DATE_PUBLISH_YEAR"]);
606 }
607
608 if (count($arSelectFields) <= 0)
609 $arSelectFields = array("ID", "TITLE", "BLOG_ID", "AUTHOR_ID", "PREVIEW_TEXT", "PREVIEW_TEXT_TYPE", "DETAIL_TEXT", "DETAIL_TEXT_TYPE", "DATE_CREATE", "DATE_PUBLISH", "KEYWORDS", "PUBLISH_STATUS", "ATRIBUTE", "ATTACH_IMG", "ENABLE_TRACKBACK", "ENABLE_COMMENTS", "VIEWS", "NUM_COMMENTS", "NUM_COMMENTS_ALL", "CODE", "MICRO");
610 if(in_array("*", $arSelectFields))
611 $arSelectFields = array("ID", "TITLE", "BLOG_ID", "AUTHOR_ID", "PREVIEW_TEXT", "PREVIEW_TEXT_TYPE", "DETAIL_TEXT", "DETAIL_TEXT_TYPE", "DATE_CREATE", "DATE_PUBLISH", "KEYWORDS", "PUBLISH_STATUS", "ATRIBUTE", "ATTACH_IMG", "ENABLE_TRACKBACK", "ENABLE_COMMENTS", "NUM_COMMENTS", "NUM_COMMENTS_ALL", "NUM_TRACKBACKS", "VIEWS", "FAVORITE_SORT", "CATEGORY_ID", "PERMS", "AUTHOR_LOGIN", "AUTHOR_NAME", "AUTHOR_LAST_NAME", "AUTHOR_SECOND_NAME", "AUTHOR_EMAIL", "AUTHOR", "BLOG_USER_ALIAS", "BLOG_USER_AVATAR", "BLOG_URL", "BLOG_OWNER_ID", "BLOG_ACTIVE", "BLOG_GROUP_ID", "BLOG_GROUP_SITE_ID", "BLOG_SOCNET_GROUP_ID", "BLOG_ENABLE_RSS", "BLOG_USE_SOCNET", "CODE", "MICRO");
612
613 if((array_key_exists("BLOG_GROUP_SITE_ID", $arFilter) || in_array("BLOG_GROUP_SITE_ID", $arSelectFields)) && !in_array("BLOG_URL", $arSelectFields))
614 $arSelectFields[] = "BLOG_URL";
615
616 // FIELDS -->
618 "ID" => array("FIELD" => "P.ID", "TYPE" => "int"),
619 "TITLE" => array("FIELD" => "P.TITLE", "TYPE" => "string"),
620 "CODE" => array("FIELD" => "P.CODE", "TYPE" => "string"),
621 "BLOG_ID" => array("FIELD" => "P.BLOG_ID", "TYPE" => "int"),
622 "AUTHOR_ID" => array("FIELD" => "P.AUTHOR_ID", "TYPE" => "int"),
623 "PREVIEW_TEXT" => array("FIELD" => "P.PREVIEW_TEXT", "TYPE" => "string"),
624 "PREVIEW_TEXT_TYPE" => array("FIELD" => "P.PREVIEW_TEXT_TYPE", "TYPE" => "string"),
625 "DETAIL_TEXT" => array("FIELD" => "P.DETAIL_TEXT", "TYPE" => "string"),
626 "DETAIL_TEXT_TYPE" => array("FIELD" => "P.DETAIL_TEXT_TYPE", "TYPE" => "string"),
627 "DATE_CREATE" => array("FIELD" => "P.DATE_CREATE", "TYPE" => "datetime"),
628 "DATE_PUBLISH" => array("FIELD" => "P.DATE_PUBLISH", "TYPE" => "datetime"),
629 "KEYWORDS" => array("FIELD" => "P.KEYWORDS", "TYPE" => "string"),
630 "PUBLISH_STATUS" => array("FIELD" => "P.PUBLISH_STATUS", "TYPE" => "string"),
631 "ATRIBUTE" => array("FIELD" => "P.ATRIBUTE", "TYPE" => "string"), /* deprecated. Not using nowhere */
632 "ATTACH_IMG" => array("FIELD" => "P.ATTACH_IMG", "TYPE" => "int"),
633 "ENABLE_TRACKBACK" => array("FIELD" => "P.ENABLE_TRACKBACK", "TYPE" => "string"),
634 "ENABLE_COMMENTS" => array("FIELD" => "P.ENABLE_COMMENTS", "TYPE" => "string"),
635 "NUM_COMMENTS" => array("FIELD" => "P.NUM_COMMENTS", "TYPE" => "int"),
636 "NUM_COMMENTS_ALL" => array("FIELD" => "P.NUM_COMMENTS_ALL", "TYPE" => "int"),
637 "NUM_TRACKBACKS" => array("FIELD" => "P.NUM_TRACKBACKS", "TYPE" => "int"),
638 "VIEWS" => array("FIELD" => "P.VIEWS", "TYPE" => "int"),
639 "FAVORITE_SORT" => array("FIELD" => "P.FAVORITE_SORT", "TYPE" => "int"),
640 "CATEGORY_ID" => array("FIELD" => "P.CATEGORY_ID", "TYPE" => "string"),
641 "PATH" => array("FIELD" => "P.PATH", "TYPE" => "string"),
642 "MICRO" => array("FIELD" => "P.MICRO", "TYPE" => "string"),
643 "HAS_IMAGES" => array("FIELD" => "P.HAS_IMAGES", "TYPE" => "string"),
644 "HAS_PROPS" => array("FIELD" => "P.HAS_PROPS", "TYPE" => "string"),
645 "HAS_TAGS" => array("FIELD" => "P.HAS_TAGS", "TYPE" => "string"),
646 "HAS_COMMENT_IMAGES" => array("FIELD" => "P.HAS_COMMENT_IMAGES", "TYPE" => "string"),
647 "HAS_SOCNET_ALL" => array("FIELD" => "P.HAS_SOCNET_ALL", "TYPE" => "string"),
648 "SEO_TITLE" => array("FIELD" => "P.SEO_TITLE", "TYPE" => "string"),
649 "SEO_TAGS" => array("FIELD" => "P.SEO_TAGS", "TYPE" => "string"),
650 "SEO_DESCRIPTION" => array("FIELD" => "P.SEO_DESCRIPTION", "TYPE" => "string"),
651
652 "PERMS" => array(),
653
654 "AUTHOR_LOGIN" => array("FIELD" => "U.LOGIN", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (P.AUTHOR_ID = U.ID)"),
655 "AUTHOR_NAME" => array("FIELD" => "U.NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (P.AUTHOR_ID = U.ID)"),
656 "AUTHOR_LAST_NAME" => array("FIELD" => "U.LAST_NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (P.AUTHOR_ID = U.ID)"),
657 "AUTHOR_SECOND_NAME" => array("FIELD" => "U.SECOND_NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (P.AUTHOR_ID = U.ID)"),
658 "AUTHOR_EMAIL" => array("FIELD" => "U.EMAIL", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (P.AUTHOR_ID = U.ID)"),
659 "AUTHOR" => array("FIELD" => "U.LOGIN, U.NAME, U.LAST_NAME, U.EMAIL, U.ID", "WHERE_ONLY" => "Y", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (P.AUTHOR_ID = U.ID)"),
660
661 "CATEGORY_NAME" => array("FIELD" => "PCN.NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_blog_category PCN ON (P.CATEGORY_ID = PCN.ID)"),
662 "CATEGORY_ID_F" => array("FIELD" => "PC.CATEGORY_ID", "TYPE" => "int", "FROM" => "LEFT JOIN b_blog_post_category PC ON (PC.POST_ID = P.ID)"),
663
664 "BLOG_USER_ALIAS" => array("FIELD" => "BU.ALIAS", "TYPE" => "string", "FROM" => "LEFT JOIN b_blog_user BU ON (P.AUTHOR_ID = BU.USER_ID)"),
665 "BLOG_USER_AVATAR" => array("FIELD" => "BU.AVATAR", "TYPE" => "int", "FROM" => "LEFT JOIN b_blog_user BU ON (P.AUTHOR_ID = BU.USER_ID)"),
666
667 "BLOG_URL" => array("FIELD" => "B.URL", "TYPE" => "string", "FROM" => "INNER JOIN b_blog B ON (P.BLOG_ID = B.ID)"),
668 "BLOG_OWNER_ID" => array("FIELD" => "B.OWNER_ID", "TYPE" => "string", "FROM" => "INNER JOIN b_blog B ON (P.BLOG_ID = B.ID)"),
669 "BLOG_ACTIVE" => array("FIELD" => "B.ACTIVE", "TYPE" => "string", "FROM" => "INNER JOIN b_blog B ON (P.BLOG_ID = B.ID)"),
670 "BLOG_GROUP_ID" => array("FIELD" => "B.GROUP_ID", "TYPE" => "int", "FROM" => "INNER JOIN b_blog B ON (P.BLOG_ID = B.ID)"),
671 "BLOG_ENABLE_RSS" => array("FIELD" => "B.ENABLE_RSS", "TYPE" => "string", "FROM" => "INNER JOIN b_blog B ON (P.BLOG_ID = B.ID)"),
672 "BLOG_USE_SOCNET" => array("FIELD" => "B.USE_SOCNET", "TYPE" => "string", "FROM" => "INNER JOIN b_blog B ON (P.BLOG_ID = B.ID)"),
673 "BLOG_NAME" => array("FIELD" => "B.NAME", "TYPE" => "string", "FROM" => "INNER JOIN b_blog B ON (P.BLOG_ID = B.ID)"),
674
675 "BLOG_GROUP_SITE_ID" => array("FIELD" => "BG.SITE_ID", "TYPE" => "string", "FROM" => "INNER JOIN b_blog_group BG ON (B.GROUP_ID = BG.ID)"),
676
677 "SOCNET_BLOG_READ" => array("FIELD" => "BSR.BLOG_ID", "TYPE" => "int", "FROM" => "INNER JOIN b_blog_socnet BSR ON (P.BLOG_ID = BSR.BLOG_ID)"),
678 "BLOG_SOCNET_GROUP_ID" => array("FIELD" => "B.SOCNET_GROUP_ID", "TYPE" => "string", "FROM" => "INNER JOIN b_blog B ON (P.BLOG_ID = B.ID)"),
679 "SOCNET_GROUP_ID" => array("FIELD" => "SR1.ENTITY_ID", "TYPE" => "string", "FROM" => "INNER JOIN b_blog_socnet_rights SR1 ON (P.ID = SR1.POST_ID AND SR1.ENTITY_TYPE = 'SG')"),
680
681 "COMMENT_ID" => array("FIELD" => "PC.ID", "TYPE" => "string", "FROM" => "INNER JOIN b_blog_comment PC ON (P.ID = PC.POST_ID)"),
682 );
683
684 $unreadImportantFilter = false;
685 if (\Bitrix\Main\Loader::includeModule('socialnetwork'))
686 {
687 if ($blogPostEventIdList === null)
688 {
689 $blogPostLivefeedProvider = new \Bitrix\Socialnetwork\Livefeed\BlogPost;
690 $blogPostEventIdList = $blogPostLivefeedProvider->getEventId();
691 }
692
693 $arFields["SOCNET_SITE_ID"] = array("FIELD" => "SLS.SITE_ID", "TYPE" => "string", "FROM" => "INNER JOIN b_sonet_log BSL ON (BSL.EVENT_ID in ('".implode("', '", $blogPostEventIdList)."') AND BSL.SOURCE_ID = P.ID) ".
694 "LEFT JOIN b_sonet_log_site SLS ON BSL.ID = SLS.LOG_ID");
695 }
696
697 $ii = 0;
698 foreach ($arFilter as $key => $val)
699 {
701 $k = $key_res["FIELD"];
702 if (
703 $k == 'POST_PARAM_BLOG_POST_IMPRTNT'
704 && $key_res['NEGATIVE'] == 'Y'
705 && $key_res['OR_NULL'] == 'N'
706 )
707 {
708 $unreadImportantFilter = true;
709 unset($arFilter[$key]);
710 }
711 elseif (mb_strpos($k, "POST_PARAM_") === 0)
712 {
713 $user_id = 0; $ii++; $pref = "BPP".$ii;
714 if (is_array($val))
715 {
716 $user_id = (isset($val["USER_ID"]) ? intval($val["USER_ID"]) : 0);
717 $arFilter[$key] = $val["VALUE"];
718 }
719 $arSelectFields[] = $k;
720 $arFields[$k] = array("FIELD" => $pref.".VALUE", "TYPE" => "string",
721 "FROM" => "LEFT JOIN b_blog_post_param ".$pref." ON (P.ID = ".$pref.".POST_ID AND ".$pref.".USER_ID".
722 ($user_id <= 0 ? " IS NULL" : "=".$user_id)." AND ".$pref.".NAME='".$GLOBALS["DB"]->ForSql(mb_substr($k, 11), 50)."')");
723 }
724 }
725
726 if(isset($arFilter["GROUP_CHECK_PERMS"]))
727 {
728 if(is_array($arFilter["GROUP_CHECK_PERMS"]))
729 {
730 foreach($arFilter["GROUP_CHECK_PERMS"] as $val)
731 {
732 if(intval($val)>0)
733 {
734 $arFields["POST_PERM_".$val] = Array(
735 "FIELD" => "BUGP".$val.".PERMS",
736 "TYPE" => "string",
737 "FROM" => "LEFT JOIN b_blog_user_group_perms BUGP".$val."
738 ON (P.BLOG_ID = BUGP".$val.".BLOG_ID
739 AND P.ID = BUGP".$val.".POST_ID
740 AND BUGP".$val.".USER_GROUP_ID = ".$val."
741 AND BUGP".$val.".PERMS_TYPE = '".BLOG_PERMS_POST."')"
742 );
743 $arSelectFields[] = "POST_PERM_".$val;
744 }
745 }
746 }
747 else
748 {
749 if(intval($arFilter["GROUP_CHECK_PERMS"])>0)
750 {
751 $arFields["POST_PERM_".$arFilter["GROUP_CHECK_PERMS"]] = Array(
752 "FIELD" => "BUGP.PERMS",
753 "TYPE" => "string",
754 "FROM" => "LEFT JOIN b_blog_user_group_perms BUGP
755 ON (P.BLOG_ID = BUGP.BLOG_ID
756 AND P.ID = BUGP.POST_ID
757 AND BUGP.USER_GROUP_ID = ".$arFilter["GROUP_CHECK_PERMS"]."
758 AND BUGP.PERMS_TYPE = '".BLOG_PERMS_POST."')"
759 );
760 $arSelectFields[] = "POST_PERM_".$arFilter["GROUP_CHECK_PERMS"];
761 }
762 }
763 unset($arFilter["GROUP_CHECK_PERMS"]);
764 }
765
766 // rating variable
767 if (
768 in_array("RATING_TOTAL_VALUE", $arSelectFields) ||
769 in_array("RATING_TOTAL_VOTES", $arSelectFields) ||
770 in_array("RATING_TOTAL_POSITIVE_VOTES", $arSelectFields) ||
771 in_array("RATING_TOTAL_NEGATIVE_VOTES", $arSelectFields) ||
772 array_key_exists("RATING_TOTAL_VALUE", $arOrder) ||
773 array_key_exists("RATING_TOTAL_VOTES", $arOrder) ||
774 array_key_exists("RATING_TOTAL_POSITIVE_VOTES", $arOrder) ||
775 array_key_exists("RATING_TOTAL_NEGATIVE_VOTES", $arOrder)
776 )
777 {
778 $arSelectFields[] = 'RATING_TOTAL_VALUE';
779 $arSelectFields[] = 'RATING_TOTAL_VOTES';
780 $arSelectFields[] = 'RATING_TOTAL_POSITIVE_VOTES';
781 $arSelectFields[] = 'RATING_TOTAL_NEGATIVE_VOTES';
782 $arFields["RATING_TOTAL_VALUE"] = array("FIELD" => $DB->IsNull('RV.TOTAL_VALUE', '0'), "ORDER" => "RATING_TOTAL_VALUE", "TYPE" => "double", "FROM" => "LEFT JOIN b_rating_voting RV ON ( RV.ENTITY_TYPE_ID = 'BLOG_POST' AND RV.ENTITY_ID = P.ID )");
783 $arFields["RATING_TOTAL_VOTES"] = array("FIELD" => $DB->IsNull('RV.TOTAL_VOTES', '0'), "ORDER" => "RATING_TOTAL_VALUE", "TYPE" => "int", "FROM" => "LEFT JOIN b_rating_voting RV ON ( RV.ENTITY_TYPE_ID = 'BLOG_POST' AND RV.ENTITY_ID = P.ID )");
784 $arFields["RATING_TOTAL_POSITIVE_VOTES"] = array("FIELD" => $DB->IsNull('RV.TOTAL_POSITIVE_VOTES', '0'), "ORDER" => "RATING_TOTAL_POSITIVE_VOTES", "TYPE" => "int", "FROM" => "LEFT JOIN b_rating_voting RV ON ( RV.ENTITY_TYPE_ID = 'BLOG_POST' AND RV.ENTITY_ID = P.ID )");
785 $arFields["RATING_TOTAL_NEGATIVE_VOTES"] = array("FIELD" => $DB->IsNull('RV.TOTAL_NEGATIVE_VOTES', '0'), "ORDER" => "RATING_TOTAL_POSITIVE_VOTES", "TYPE" => "int", "FROM" => "LEFT JOIN b_rating_voting RV ON ( RV.ENTITY_TYPE_ID = 'BLOG_POST' AND RV.ENTITY_ID = P.ID )");
786 }
787 if (in_array("RATING_USER_VOTE_VALUE", $arSelectFields))
788 {
789 global $USER;
790 if (isset($USER) && is_object($USER))
791 {
792 $arSelectFields[] = 'RATING_USER_VOTE_VALUE';
793 $arFields["RATING_USER_VOTE_VALUE"] = Array("FIELD" => $DB->IsNull('RVV.VALUE', '0'), "ORDER" => "RATING_USER_VOTE_VALUE", "TYPE" => "double", "FROM" => "LEFT JOIN b_rating_vote RVV ON RVV.ENTITY_TYPE_ID = 'BLOG_POST' AND RVV.ENTITY_ID = P.ID AND RVV.USER_ID = ".intval($USER->GetId()));
794 }
795 }
796 if (
797 array_key_exists("DATE_PUBLISH", $arOrder)
798 && !in_array("DATE_PUBLISH", $arSelectFields)
799 )
800 {
801 $arSelectFields[] = 'DATE_PUBLISH';
802 }
803 if (
804 array_key_exists("VIEWS", $arOrder)
805 && !in_array("VIEWS", $arSelectFields)
806 )
807 {
808 $arSelectFields[] = 'VIEWS';
809 }
810
811 // <-- FIELDS
812 $strSqlUFFilter = '';
813 $bNeedDistinct = false;
814 $blogModulePermissions = $APPLICATION->GetGroupRight("blog");
815 if ($blogModulePermissions < "W")
816 {
817 $user_id = 0;
818 if(isset($USER) && is_object($USER) && $USER->IsAuthorized())
819 $user_id = $USER->GetID();
820
821 if(!CBlog::IsBlogOwner(($arFilter["BLOG_ID"] ?? null), $user_id))
822 {
823 $arUserGroups = CBlogUser::GetUserGroups(
824 $user_id,
825 intval(($arFilter["BLOG_ID"] ?? null)),
826 "Y",
828 );
829 $strUserGroups = "0";
830 foreach($arUserGroups as $v)
831 $strUserGroups .= ",".intval($v);
832
833 $arFields["PERMS"] = array("FIELD" => "UGP.PERMS", "TYPE" => "string", "FROM" => "INNER JOIN b_blog_user_group_perms UGP ON (P.ID = UGP.POST_ID AND P.BLOG_ID = UGP.BLOG_ID AND UGP.USER_GROUP_ID IN (".$strUserGroups.") AND UGP.PERMS_TYPE = '".BLOG_PERMS_POST."')");
834 $bNeedDistinct = true;
835 }
836 else
837 $arFields["PERMS"] = array("FIELD" => "'W'", "TYPE" => "string");
838 }
839 else
840 {
841 $arFields["PERMS"] = array("FIELD" => "'W'", "TYPE" => "string");
842 }
843
844 $arSqls = CBlog::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields, $obUserFieldsSql);
845
846 if(array_key_exists("SOCNET_GROUP_ID", $arFilter))
847 $bNeedDistinct = true;
848 if(array_key_exists("FOR_USER", $arFilter))
849 {
850 if(intval($arFilter["FOR_USER"]) > 0) //authorized user
851 {
852 if(($arFilter["FOR_USER_TYPE"] ?? '') == "ALL")
853 {
854 $arSqls["FROM"] .=
855 " INNER JOIN b_blog_socnet_rights SR ON (P.ID = SR.POST_ID) ".
856 " LEFT JOIN b_user_access UA ON (UA.ACCESS_CODE = SR.ENTITY AND UA.USER_ID = ".intval($arFilter["FOR_USER"]).") ";
857 if($arSqls["WHERE"] <> '')
858 $arSqls["WHERE"] .= " AND ";
859 $arSqls["WHERE"] .= " (SR.ENTITY_TYPE != 'SG') AND ".
860 " (SR.ENTITY = 'U".intval($arFilter["FOR_USER"])."' OR (UA.USER_ID is not NULL AND SR.ENTITY_TYPE = 'DR') OR P.AUTHOR_ID = '".intval($arFilter["FOR_USER"])."')";
861 }
862 elseif(($arFilter["FOR_USER_TYPE"] ?? '') == "SELF")
863 {
864 $arSqls["FROM"] .=
865 " INNER JOIN b_blog_socnet_rights SR ON (P.ID = SR.POST_ID) ".
866 " LEFT JOIN b_user_access UA ON (UA.ACCESS_CODE = SR.ENTITY AND UA.USER_ID = ".intval($arFilter["FOR_USER"]).") ";
867 if($arSqls["WHERE"] <> '')
868 $arSqls["WHERE"] .= " AND ";
869 $arSqls["WHERE"] .= " (SR.ENTITY = 'U".intval($arFilter["FOR_USER"])."' OR (UA.USER_ID is not NULL AND SR.ENTITY_TYPE = 'DR')) ";
870 }
871 elseif(($arFilter["FOR_USER_TYPE"] ?? '') == "DR")
872 {
873 $arSqls["FROM"] .=
874 " INNER JOIN b_blog_socnet_rights SR ON (P.ID = SR.POST_ID) " .
875 " LEFT JOIN b_user_access UA ON (UA.ACCESS_CODE = SR.ENTITY AND UA.USER_ID = ".intval($arFilter["FOR_USER"]).") ";
876 if($arSqls["WHERE"] <> '')
877 $arSqls["WHERE"] .= " AND ";
878 $arSqls["WHERE"] .= " (UA.USER_ID is not NULL AND SR.ENTITY_TYPE = 'DR') ";
879 }
880 else
881 {
882 $currentExtranetSite = (
884 && ($extranetSiteId = \Bitrix\Main\Config\Option::get("extranet", "extranet_site"))
885 && $extranetSiteId == SITE_ID
886 );
887 if($arSqls["WHERE"] <> '')
888 $arSqls["WHERE"] .= " AND ";
889 $arSqls["WHERE"] .=
890 " EXISTS ( ".
891 "SELECT SRX.ID ".
892 "FROM b_blog_socnet_rights SRX ".
893 "LEFT JOIN b_user_access UA ON (UA.ACCESS_CODE = SRX.ENTITY AND UA.USER_ID = ".intval($arFilter["FOR_USER"]).") ".
894 "WHERE P.ID = SRX.POST_ID
895 AND (
896 ".($currentExtranetSite ? "" : " (SRX.ENTITY = 'AU') OR ")."
897 (UA.ACCESS_CODE = SRX.ENTITY AND UA.USER_ID = ".intval($arFilter["FOR_USER"]).") ".
898 ($currentExtranetSite ? " AND NOT (SRX.ENTITY = 'G2') " : "").
899 ")".
900 ")";
901 }
902 }
903 else
904 {
905 $arSqls["FROM"] .=
906 " INNER JOIN b_blog_socnet_rights SR ON (P.ID = SR.POST_ID) ".
907 " INNER JOIN b_user_access UA ON (UA.ACCESS_CODE = SR.ENTITY AND UA.USER_ID = 0)";
908 }
909 $bNeedDistinct = true;
910 }
911
912 if ($unreadImportantFilter)
913 {
914 if($arSqls["WHERE"] <> '')
915 $arSqls["WHERE"] .= " AND ";
916 $arSqls["WHERE"] .=
917 " NOT EXISTS ( ".
918 "SELECT BPPX.POST_ID ".
919 "FROM b_blog_post_param BPPX ".
920 " WHERE P.ID = BPPX.POST_ID AND BPPX.USER_ID = ".intval($arFilter["FOR_USER"])." AND BPPX.NAME = 'BLOG_POST_IMPRTNT' AND BPPX.VALUE = 'Y' ".
921 ")";
922 }
923
924 if($bNeedDistinct)
925 $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "DISTINCT", $arSqls["SELECT"]);
926 else
927 $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]);
928
929 $r = $obUserFieldsSql->GetFilter();
930 if($r <> '')
931 $strSqlUFFilter = " (".$r.") ";
932
933 if (is_array($arGroupBy) && count($arGroupBy)==0)
934 {
935 $strSql =
936 "SELECT ".$arSqls["SELECT"]." ".
937 $obUserFieldsSql->GetSelect()." ".
938 "FROM b_blog_post P ".
939 " ".$arSqls["FROM"]." ".
940 $obUserFieldsSql->GetJoin("P.ID")." ";
941 if ($arSqls["WHERE"] <> '')
942 $strSql .= "WHERE ".$arSqls["WHERE"]." ";
943 if($arSqls["WHERE"] <> '' && $strSqlUFFilter <> '')
944 $strSql .= " AND ".$strSqlUFFilter." ";
945 elseif($arSqls["WHERE"] == '' && $strSqlUFFilter <> '')
946 $strSql .= " WHERE ".$strSqlUFFilter." ";
947
948 if ($arSqls["GROUPBY"] <> '')
949 $strSql .= "GROUP BY ".$arSqls["GROUPBY"]." ";
950
951 //echo "!1!=".htmlspecialcharsbx($strSql)."<br>";
952
953 $dbRes = $DB->Query($strSql);
954 if ($arRes = $dbRes->Fetch())
955 return $arRes["CNT"];
956 else
957 return False;
958 }
959
960 $strSql =
961 "SELECT ".$arSqls["SELECT"]." ".
962 $obUserFieldsSql->GetSelect()." ".
963 "FROM b_blog_post P ".
964 " ".$arSqls["FROM"]." ".
965 $obUserFieldsSql->GetJoin("P.ID")." ";
966 if ($arSqls["WHERE"] <> '')
967 $strSql .= "WHERE ".$arSqls["WHERE"]." ";
968 if($arSqls["WHERE"] <> '' && $strSqlUFFilter <> '')
969 $strSql .= " AND ".$strSqlUFFilter." ";
970 elseif($arSqls["WHERE"] == '' && $strSqlUFFilter <> '')
971 $strSql .= " WHERE ".$strSqlUFFilter." ";
972
973 if ($arSqls["GROUPBY"] <> '')
974 $strSql .= "GROUP BY ".$arSqls["GROUPBY"]." ";
975 if ($arSqls["ORDERBY"] <> '')
976 $strSql .= "ORDER BY ".$arSqls["ORDERBY"]." ";
977 if (
978 is_array($arNavStartParams)
979 && intval($arNavStartParams["nTopCount"] ?? 0) <= 0
980 )
981 {
982 $strSql_tmp =
983 "SELECT COUNT(DISTINCT P.ID) as CNT ".
984 "FROM b_blog_post P ".
985 " ".$arSqls["FROM"]." ".
986 $obUserFieldsSql->GetJoin("P.ID")." ";
987 if ($arSqls["WHERE"] <> '')
988 $strSql_tmp .= "WHERE ".$arSqls["WHERE"]." ";
989 if($arSqls["WHERE"] <> '' && $strSqlUFFilter <> '')
990 $strSql_tmp .= " AND ".$strSqlUFFilter." ";
991 elseif($arSqls["WHERE"] == '' && $strSqlUFFilter <> '')
992 $strSql_tmp .= " WHERE ".$strSqlUFFilter." ";
993
994 if ($arSqls["GROUPBY"] <> '')
995 $strSql_tmp .= "GROUP BY ".$arSqls["GROUPBY"]." ";
996
997 //echo "!2.1!=".htmlspecialcharsbx($strSql_tmp)."<br>";
998
999 $dbRes = $DB->Query($strSql_tmp);
1000 $cnt = 0;
1001 if ($arSqls["GROUPBY"] == '')
1002 {
1003 if ($arRes = $dbRes->Fetch())
1004 $cnt = $arRes["CNT"];
1005 }
1006 else
1007 {
1008 $cnt = $dbRes->SelectedRowsCount();
1009 }
1010
1011 $dbRes = new CDBResult();
1012
1013 //echo "!2.2!=".htmlspecialcharsbx($strSql)."<br>";
1014
1015 $dbRes->SetUserFields($USER_FIELD_MANAGER->GetUserFields("BLOG_POST"));
1016 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
1017 }
1018 else
1019 {
1020 if (is_array($arNavStartParams) && intval($arNavStartParams["nTopCount"]) > 0)
1021 $strSql .= "LIMIT ".intval($arNavStartParams["nTopCount"]);
1022
1023 //echo "!3!=".htmlspecialcharsbx($strSql)."<br>";
1024
1025 $dbRes = $DB->Query($strSql);
1026 $dbRes->SetUserFields($USER_FIELD_MANAGER->GetUserFields("BLOG_POST"));
1027 }
1028 //echo "!4!=".htmlspecialcharsbx($strSql)."<br>";
1029 return $dbRes;
1030 }
1031
1032 public static function GetListCalendar($blogID, $year = false, $month = false, $day = false)
1033 {
1034 global $DB, $USER, $APPLICATION;
1035
1036 $blogID = intval($blogID);
1037
1038 if (
1039 $year
1040 && mb_strlen($year) == 2
1041 )
1042 {
1043 $year = "20".$year;
1044 }
1045
1046 if ($year && $month && $day)
1047 {
1048 $date1 = mktime(0, 0, 0, $month, $day, $year);
1049 $date2 = mktime(0, 0, 0, $month, $day + 1, $year);
1050 }
1051 elseif ($month && $year)
1052 {
1053 $date1 = mktime(0, 0, 0, $month, 1, $year);
1054 $date2 = mktime(0, 0, 0, $month + 1, 1, $year);
1055 }
1056 elseif ($year)
1057 {
1058 $date1 = mktime(0, 0, 0, 1, 1, $year);
1059 $date2 = mktime(0, 0, 0, 1, 1, $year + 1);
1060 }
1061 $datePublishFrom = ConvertTimeStamp($date1, "SHORT", SITE_ID);
1062 $datePublishTo = ConvertTimeStamp($date2, "SHORT", SITE_ID);
1063
1064 $arUserGroups = CBlogUser::GetUserGroups(($USER->IsAuthorized() ? $USER->GetID() : 0), $blogID, "Y", BLOG_BY_USER_ID);
1065 $strUserGroups = "0";
1066 foreach($arUserGroups as $v)
1067 $strUserGroups .= ",".intval($v);
1068
1069 $strFromPerms =
1070 " LEFT JOIN b_blog_user_group_perms UGP ".
1071 " ON (P.ID = UGP.POST_ID ".
1072 " AND P.BLOG_ID = UGP.BLOG_ID ".
1073 " AND UGP.USER_GROUP_ID IN (".$strUserGroups.") ".
1074 " AND UGP.PERMS_TYPE = '".$DB->ForSql(BLOG_PERMS_POST)."') ";
1075 $strWherePerms = " AND (UGP.PERMS > 'D') ";
1076
1077 $blogModulePermissions = $APPLICATION->GetGroupRight("blog");
1078 if ($blogModulePermissions >= "W")
1079 {
1080 $strFromPerms = "";
1081 $strWherePerms = "";
1082 }
1083
1084 $dateFormatFunction = (strtolower($DB->type) === 'pgsql') ? 'to_char' : 'DATE_FORMAT';
1085 $strSql =
1086 "SELECT $dateFormatFunction(P.DATE_PUBLISH, '%Y-%m-%d') as DATE_PUBLISH1, COUNT(P.ID) as CNT ".
1087 "FROM b_blog_post P ".$strFromPerms." ".
1088 "WHERE P.BLOG_ID = ".$blogID." ".
1089 " AND P.DATE_PUBLISH >= ".$DB->CharToDateFunction($DB->ForSql($datePublishFrom), "SHORT")." ".
1090 " AND P.DATE_PUBLISH < ".$DB->CharToDateFunction($DB->ForSql($datePublishTo), "SHORT")." ".
1091 " AND P.PUBLISH_STATUS = '".$DB->ForSql(BLOG_PUBLISH_STATUS_PUBLISH)."' ".
1092 " ".$strWherePerms." ".
1093 "GROUP BY DATE_PUBLISH1 ".
1094 "ORDER BY DATE_PUBLISH1 ";
1095
1096 $dbRes = $DB->Query($strSql);
1097
1098 $arResult = array();
1099 while ($arRes = $dbRes->Fetch())
1100 {
1101 $arDate = explode("-", $arRes["DATE_PUBLISH1"]);
1102 $arResult[] = array(
1103 "YEAR" => $arDate[0],
1104 "MONTH" => $arDate[1],
1105 "DAY" => $arDate[2],
1106 "DATE" => ConvertTimeStamp(mktime(0, 0, 0, (int)$arDate[1], (int)$arDate[2], (int)$arDate[0]), "SHORT", LANG)
1107 );
1108 }
1109
1110 return $arResult;
1111 }
1112}
const BLOG_PERMS_COMMENT
Определения include.php:43
const BLOG_BY_USER_ID
Определения include.php:55
const BLOG_PERMS_POST
Определения include.php:42
const BLOG_PERMS_READ
Определения include.php:6
const BLOG_PUBLISH_STATUS_PUBLISH
Определения include.php:47
global $APPLICATION
Определения include.php:80
$arResult
Определения generate_coupon.php:16
static get($moduleId, $name, $default="", $siteId=false)
Определения option.php:30
static isModuleInstalled($moduleName)
Определения modulemanager.php:125
static decode($text)
Определения emoji.php:24
static GetByID($ID)
Определения blog_category.php:82
static _IndexPostComments($arParams=Array())
Определения blog_comment.php:475
static GetByID($ID)
Определения blog_group.php:64
static GetFilterOperation($key)
Определения blog.php:428
static GetByID($ID)
Определения blog.php:931
static PrepareSql(&$arFields, $arOrder, &$arFilter, $arGroupBy, $arSelectFields, $obUserFieldsSql=false)
Определения blog.php:487
static IsBlogOwner($ID, $userID)
Определения blog.php:11
static SetStat($ID)
Определения blog.php:389
Определения blog_post.php:11
static SetPostPerms($ID, $arPerms=array(), $permsType=BLOG_PERMS_POST)
Определения blog_post.php:392
static AddSocNetPerms($ID, $perms=array(), $arPost=array())
Определения blog_post.php:1232
static CheckFields($ACTION, &$arFields, $ID=0)
Определения blog_post.php:221
static UpdateSocNetPerms($ID, $perms=array(), $arPost=array())
Определения blog_post.php:1334
static GetMentionedUserID($arFields)
Определения blog_post.php:3654
static PreparePath($blogUrl, $postID=0, $siteID=False, $is404=True, $userID=0, $groupID=0)
Определения blog_post.php:620
static GetSocNetPermsCode($ID)
Определения blog_post.php:1551
static GetGroupPerms($ID, $blogID, $postID=0, $permsType=BLOG_PERMS_POST)
Определения blog_user_group.php:209
static GetUserGroups($ID, $blogID, $joinStatus="", $selectType=BLOG_BY_BLOG_USER_ID, $bUrl=false)
Определения blog_user.php:436
static DeleteIndex($MODULE_ID, $ITEM_ID=false, $PARAM1=false, $PARAM2=false, $SITE_ID=false)
Определения search.php:2922
static KillTags($str)
Определения search.php:2092
static Index($MODULE_ID, $ITEM_ID, $arFields, $bOverWrite=false, $SEARCH_SESS_ID='')
Определения search.php:1302
Определения blog_post.php:6
static GetListCalendar($blogID, $year=false, $month=false, $day=false)
Определения blog_post.php:1032
static Add($arFields)
Определения blog_post.php:8
static GetByID($ID)
Определения blog_post.php:511
static Update($ID, $arFields, $bSearchIndex=true)
Определения blog_post.php:224
static GetList( $arOrder=["ID"=> "DESC"], $arFilter=[], $arGroupBy=false, $arNavStartParams=false, $arSelectFields=[])
Определения blog_post.php:554
static fillSearchParamsWithMentionData($arMentionedUserID=array(), &$arSearchIndex=array())
Определения blog_search.php:77
static fillSearchPermsWithSonetGroupData($sonetPerms, $authorId, &$arSearchIndex=array(), $arParams=array())
Определения blog_search.php:7
Определения usertypesql.php:4
SetEntity($entity_id, $ID)
Определения usertypesql.php:16
static killAllTags($text)
Определения functions.php:473
global $CACHE_MANAGER
Определения clear_component_cache.php:7
$arFields
Определения dblapprove.php:5
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
global $USER_FIELD_MANAGER
Определения attempt.php:6
if($ajaxMode) $ID
Определения get_user.php:27
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
htmlspecialcharsEx($str)
Определения tools.php:2685
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
is_set($a, $k=false)
Определения tools.php:2133
BXClearCache($full=false, $initdir='')
Определения tools.php:5150
$year
Определения payment.php:9
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
</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
$val
Определения options.php:1793
$arRes
Определения options.php:104
const SITE_ID
Определения sonet_set_content_view.php:12
$k
Определения template_pdf.php:567
$GLOBALS['_____370096793']
Определения update_client.php:1
$dbResult
Определения updtr957.php:3
$arFilter
Определения user_search.php:106
$dbRes
Определения yandex_detail.php:168