484 $enableCalculateStatistics = COption::GetOptionString(
'forum',
'enable_calculate_statistics',
'Y');
485 if ($enableCalculateStatistics ===
'N')
490 $forumId = (int) $this->getId();
493 SELECT COALESCE(T1.TOPICS, 0) as TOPICS, COALESCE(T2.MESSAGES, 0) AS POSTS, COALESCE(T3.MESSAGES_UNAPPROVED, 0) AS POSTS_UNAPPROVED,
494 T4.ID as LAST_MESSAGE_ID, T4.AUTHOR_ID as LAST_POSTER_ID, T4.AUTHOR_NAME LAST_POSTER_NAME, T4.POST_DATE LAST_POST_DATE,
495 T5.ID AS ABS_LAST_MESSAGE_ID, T5.AUTHOR_ID AS ABS_LAST_POSTER_ID, T5.AUTHOR_NAME AS ABS_LAST_POSTER_NAME, T5.POST_DATE AS ABS_LAST_POST_DATE
498 LEFT JOIN (SELECT FORUM_ID, COUNT(ID) AS TOPICS FROM b_forum_topic WHERE FORUM_ID={$forumId} AND APPROVED=
'Y' GROUP BY FORUM_ID) AS T1 ON T1.FORUM_ID = T0.ID
499 LEFT JOIN (SELECT FORUM_ID, COUNT(ID) AS MESSAGES FROM b_forum_message WHERE FORUM_ID={$forumId} AND APPROVED=
'Y' GROUP BY FORUM_ID) AS T2 ON T2.FORUM_ID = T0.ID
500 LEFT JOIN (SELECT FORUM_ID, COUNT(ID) AS MESSAGES_UNAPPROVED FROM b_forum_message WHERE FORUM_ID={$forumId} AND APPROVED !=
'Y' GROUP BY FORUM_ID) AS T3 ON T3.FORUM_ID = T0.ID
501 LEFT JOIN (SELECT FORUM_ID, ID, AUTHOR_ID, AUTHOR_NAME, POST_DATE FROM b_forum_message WHERE FORUM_ID={$forumId} AND APPROVED=
'Y' ORDER BY ID DESC LIMIT 1) AS T4 ON T4.FORUM_ID = T0.ID
502 LEFT JOIN (SELECT FORUM_ID, ID, AUTHOR_ID, AUTHOR_NAME, POST_DATE FROM b_forum_message WHERE FORUM_ID={$forumId} ORDER BY ID DESC LIMIT 1) AS T5 ON T5.FORUM_ID = T0.ID
503 WHERE T0.ID = {$forumId}
507 if (
$DB->type ===
'MYSQL')
516 f.TOPICS = ff.TOPICS,
518 f.POSTS_UNAPPROVED = ff.POSTS_UNAPPROVED,
519 f.LAST_MESSAGE_ID = ff.LAST_MESSAGE_ID,
520 f.LAST_POSTER_ID = ff.LAST_POSTER_ID,
521 f.LAST_POSTER_NAME = ff.LAST_POSTER_NAME,
522 f.LAST_POST_DATE = ff.LAST_POST_DATE,
523 f.ABS_LAST_MESSAGE_ID = ff.ABS_LAST_MESSAGE_ID,
524 f.ABS_LAST_POSTER_ID = ff.ABS_LAST_POSTER_ID,
525 f.ABS_LAST_POSTER_NAME = ff.ABS_LAST_POSTER_NAME,
526 f.ABS_LAST_POST_DATE = ff.ABS_LAST_POST_DATE
527WHERE f.ID = {$forumId}
530 else if (
$DB->type ===
'PGSQL')
545 ABS_LAST_POSTER_NAME,
550WHERE f.ID = {$forumId}
556 Main\Application::getConnection()->queryExecute($sql);
563 'POSTS_UNAPPROVED' => 0,
564 'LAST_MESSAGE_ID' =>
null,
565 'LAST_POSTER_ID' =>
null,
566 'LAST_POSTER_NAME' =>
null,
567 'LAST_POST_DATE' =>
null,
568 'ABS_LAST_MESSAGE_ID' =>
null,
569 'ABS_LAST_POSTER_ID' =>
null,
570 'ABS_LAST_POSTER_NAME' =>
null,
571 'ABS_LAST_POST_DATE' =>
null,
573 if ($statFields = Main\Application::getConnection()->query($statSQL)->fetch())
577 ForumTable::updateSilently($forumId,
$fields);
583 $enableCalculateStatistics = COption::GetOptionString(
'forum',
'enable_calculate_statistics',
'Y');
584 if ($enableCalculateStatistics ===
'N')
589 "ABS_LAST_POSTER_ID" =>
$message[
"AUTHOR_ID"],
590 "ABS_LAST_POSTER_NAME" =>
$message[
"AUTHOR_NAME"],
591 "ABS_LAST_POST_DATE" =>
$message[
"POST_DATE"],
592 "ABS_LAST_MESSAGE_ID" =>
$message[
"ID"]
597 "LAST_POSTER_ID" =>
$message[
"AUTHOR_ID"],
598 "LAST_POSTER_NAME" =>
$message[
"AUTHOR_NAME"],
599 "LAST_POST_DATE" =>
$message[
"POST_DATE"],
602 $fields[
"POSTS"] = new \Bitrix\Main\DB\SqlExpression(
'?# + 1',
"POSTS");
605 $fields[
"TOPICS"] = new \Bitrix\Main\DB\SqlExpression(
'?# + 1',
"TOPICS");
610 $fields[
"POSTS_UNAPPROVED"] = new \Bitrix\Main\DB\SqlExpression(
'?# + 1',
"POSTS_UNAPPROVED");
615 if (\CModule::IncludeModule(
"statistic"))
617 $F_EVENT1 = $this->data[
"EVENT1"];
618 $F_EVENT2 = $this->data[
"EVENT2"];
619 $F_EVENT3 = $this->data[
"EVENT3"];
620 if (empty($F_EVENT3))
622 $F_EVENT3 =
$_SERVER[
"HTTP_REFERER"] ??
'';
624 \CStatistics::Set_Event($F_EVENT1, $F_EVENT2, $F_EVENT3);
630 $enableCalculateStatistics = COption::GetOptionString(
'forum',
'enable_calculate_statistics',
'Y');
631 if ($enableCalculateStatistics ===
'N')
635 $forumId = (int) $this->getId();
638 $subQueryTopics =
"";
641 $subQueryTopics = <<<SQL
642 f.TOPICS = (SELECT COUNT(ID) FROM b_forum_topic WHERE FORUM_ID={$forumId} AND APPROVED=
'Y' GROUP BY FORUM_ID),
648 (SELECT ID, AUTHOR_ID, AUTHOR_NAME, POST_DATE, FORUM_ID FROM b_forum_message WHERE FORUM_ID={$forumId} AND APPROVED=
'Y' ORDER BY ID DESC LIMIT 1) AS last_message,
649 (SELECT ID, AUTHOR_ID, AUTHOR_NAME, POST_DATE, FORUM_ID FROM b_forum_message WHERE FORUM_ID={$forumId} ORDER BY ID DESC LIMIT 1) AS abs_last_message
652 f.POSTS = f.POSTS - 1,
653 f.LAST_MESSAGE_ID = last_message.ID,
654 f.LAST_POSTER_ID = last_message.AUTHOR_ID,
655 f.LAST_POSTER_NAME = last_message.AUTHOR_NAME,
656 f.LAST_POST_DATE = last_message.POST_DATE,
657 f.ABS_LAST_MESSAGE_ID = abs_last_message.ID,
658 f.ABS_LAST_POSTER_ID = abs_last_message.AUTHOR_ID,
659 f.ABS_LAST_POSTER_NAME = abs_last_message.AUTHOR_NAME,
660 f.ABS_LAST_POST_DATE = abs_last_message.POST_DATE,
662WHERE f.ID = {$forumId} AND last_message.FORUM_ID = f.ID AND abs_last_message.FORUM_ID = f.ID
670 (SELECT ID, AUTHOR_ID, AUTHOR_NAME, POST_DATE, FORUM_ID FROM b_forum_message WHERE FORUM_ID={$forumId} ORDER BY ID DESC LIMIT 1) AS abs_last_message
672 f.POSTS_UNAPPROVED = f.POSTS_UNAPPROVED - 1,
673 f.ABS_LAST_MESSAGE_ID = abs_last_message.ID,
674 f.ABS_LAST_POSTER_ID = abs_last_message.AUTHOR_ID,
675 f.ABS_LAST_POSTER_NAME = abs_last_message.AUTHOR_NAME,
676 f.ABS_LAST_POST_DATE = abs_last_message.POST_DATE,
678WHERE f.ID = {$forumId} AND abs_last_message.FORUM_ID = f.ID