1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
forum.php
См. документацию.
1<?php
2namespace Bitrix\Forum;
3
4use Bitrix\Main\Application;
5use Bitrix\Main\DB\SqlExpression;
6use Bitrix\Main;
7use Bitrix\Main\Entity;
8use Bitrix\Main\Entity\ReferenceField;
9use \Bitrix\Main\Localization\Loc;
10use Bitrix\Main\ORM\Fields\BooleanField;
11use Bitrix\Main\ORM\Fields\DatetimeField;
12use Bitrix\Main\ORM\Fields\EnumField;
13use Bitrix\Main\ORM\Fields\IntegerField;
14use Bitrix\Main\ORM\Fields\Relations\Reference;
15use Bitrix\Main\ORM\Fields\StringField;
16use Bitrix\Main\ORM\Fields\TextField;
17use Bitrix\Main\ORM\Query\Join;
18use Bitrix\Main\Type\DateTime;
19use COption;
20
21Loc::loadMessages(__FILE__);
22
96class ForumTable extends \Bitrix\Main\Entity\DataManager
97{
98 private static $topicSort = array(
99 "P" => "LAST_POST_DATE",
100 "T" => "TITLE",
101 "N" => "POSTS",
102 "V" => "VIEWS",
103 "D" => "START_DATE",
104 "A" => "USER_START_NAME"
105 );
106 private static $cache = [];
107
113 public static function getTableName()
114 {
115 return 'b_forum';
116 }
117
123 public static function getMap()
124 {
125 return [
126 (new IntegerField("ID", ["primary" => true, "autocomplete" => true])),
127 (new IntegerField("FORUM_GROUP_ID")),
128 (new StringField("NAME", ["required" => true, "size" => 255])),
129 (new TextField("DESCRIPTION")),
130 (new IntegerField("SORT", ["default_value" => 150])),
131 (new BooleanField("ACTIVE", ["values" => ["N", "Y"], "default_value" => "Y"])),
132 (new BooleanField("ALLOW_HTML", ["values" => ["N", "Y"], "default_value" => "N"])),
133 (new BooleanField("ALLOW_ANCHOR", ["values" => ["N", "Y"], "default_value" => "Y"])),
134 (new BooleanField("ALLOW_BIU", ["values" => ["N", "Y"], "default_value" => "Y"])),
135 (new BooleanField("ALLOW_IMG", ["values" => ["N", "Y"], "default_value" => "Y"])),
136 (new BooleanField("ALLOW_VIDEO", ["values" => ["N", "Y"], "default_value" => "Y"])),
137 (new BooleanField("ALLOW_LIST", ["values" => ["N", "Y"], "default_value" => "Y"])),
138 (new BooleanField("ALLOW_QUOTE", ["values" => ["N", "Y"], "default_value" => "Y"])),
139 (new BooleanField("ALLOW_CODE", ["values" => ["N", "Y"], "default_value" => "Y"])),
140 (new BooleanField("ALLOW_FONT", ["values" => ["N", "Y"], "default_value" => "Y"])),
141 (new BooleanField("ALLOW_SMILES", ["values" => ["N", "Y"], "default_value" => "Y"])),
142 (new BooleanField("ALLOW_TABLE", ["values" => ["N", "Y"], "default_value" => "Y"])),
143 (new BooleanField("ALLOW_ALIGN", ["values" => ["N", "Y"], "default_value" => "Y"])),
144 (new BooleanField("ALLOW_NL2BR", ["values" => ["N", "Y"], "default_value" => "Y"])),
145
146 (new EnumField("ALLOW_UPLOAD", ["values" => ["Y", "F", "A"], "default_value" => "F"])),
147 (new StringField("ALLOW_UPLOAD_EXT", ["size" => 255])),
148
149 (new BooleanField("ALLOW_MOVE_TOPIC", ["values" => ["N", "Y"], "default_value" => "Y"])),
150 (new BooleanField("ALLOW_TOPIC_TITLED", ["values" => ["N", "Y"], "default_value" => "Y"])),
151
152 (new BooleanField("ALLOW_SIGNATURE", ["values" => ["N", "Y"], "default_value" => "Y"])),
153 (new BooleanField("ASK_GUEST_EMAIL", ["values" => ["N", "Y"], "default_value" => "N"])),
154 (new BooleanField("USE_CAPTCHA", ["values" => ["N", "Y"], "default_value" => "Y"])),
155
156 (new BooleanField("INDEXATION", ["values" => ["N", "Y"], "default_value" => "Y"])),
157 (new BooleanField("DEDUPLICATION", ["values" => ["N", "Y"], "default_value" => "N"])),
158 (new BooleanField("MODERATION", ["values" => ["N", "Y"], "default_value" => "N"])),
159 (new EnumField("ORDER_BY", ["values" => self::$topicSort, "default_value" => "P"])),
160 (new EnumField("ORDER_DIRECTION", ["values" => ["ASC", "DESC"], "default_value" => "DESC"])),
161
162 (new IntegerField("TOPICS")),
163 (new IntegerField("POSTS")),
164 (new IntegerField("POSTS_UNAPPROVED")),
165
166 (new IntegerField("LAST_POSTER_ID")),
167 (new StringField("LAST_POSTER_NAME", ["size" => 255])),
168 (new DatetimeField("LAST_POST_DATE", ["default_value" => function(){return new DateTime();}])),
169 (new IntegerField("LAST_MESSAGE_ID")),
170
171 (new IntegerField("ABS_LAST_POSTER_ID")),
172 (new StringField("ABS_LAST_POSTER_NAME", ["size" => 255])),
173 (new DatetimeField("ABS_LAST_POST_DATE", ["default_value" => function(){return new DateTime();}])),
174 (new IntegerField("ABS_LAST_MESSAGE_ID")),
175
176 (new StringField("EVENT1")),
177 (new StringField("EVENT2")),
178 (new StringField("EVENT3")),
179 (new StringField("XML_ID", ["size" => 255])),
180 (new StringField("HTML", ["size" => 255])),
181
182 (new Reference("PERMISSION", \Bitrix\Forum\PermissionTable::class, Join::on("this.ID", "ref.FORUM_ID"))),
183 (new Reference("SITE", \Bitrix\Forum\ForumSiteTable::class, Join::on("this.ID", "ref.FORUM_ID"))),
184 (new Reference("GROUP", \Bitrix\Forum\GroupTable::class, Join::on("this.FORUM_GROUP_ID", "ref.ID")))
185 ];
186 }
187
188 private static function getFilteredFields()
189 {
190 return [
191 "LAST_POSTER_NAME"
192 ];
193 }
194 /*
195 * Returns main data
196 * @return array|null
197 */
198 public static function getMainData(int $forumId, ?string $siteId = null): ?array
199 {
200 $cacheKey = implode('_', ([$forumId] + ($siteId === null ? [] : [$siteId])));
201 if (!array_key_exists($cacheKey, self::$cache))
202 {
203 $q = ForumTable::query()
204 ->setSelect([
205 'ID', 'FORUM_GROUP_ID', 'NAME', 'DESCRIPTION', 'SORT', 'ACTIVE',
206 'ALLOW_HTML', 'ALLOW_ANCHOR', 'ALLOW_BIU', 'ALLOW_IMG', 'ALLOW_VIDEO',
207 'ALLOW_LIST', 'ALLOW_QUOTE', 'ALLOW_CODE', 'ALLOW_FONT', 'ALLOW_SMILES',
208 'ALLOW_TABLE', 'ALLOW_ALIGN', 'ALLOW_UPLOAD', 'ALLOW_UPLOAD_EXT',
209 'ALLOW_MOVE_TOPIC', 'ALLOW_TOPIC_TITLED', 'ALLOW_NL2BR', 'ALLOW_SIGNATURE',
210 'ASK_GUEST_EMAIL', 'USE_CAPTCHA' ,'INDEXATION', 'DEDUPLICATION',
211 'MODERATION', 'ORDER_BY', 'ORDER_DIRECTION',
212 'EVENT1', 'EVENT2', 'EVENT3', 'XML_ID'])
213 ->where('ID', $forumId)
214 ->setCacheTtl(84600);
215 if ($siteId !== null)
216 {
217 $q->registerRuntimeField(
218 '',
219 new ReferenceField('SITE',
220 ForumSiteTable::getEntity(),
221 [
222 '=ref.FORUM_ID' => 'this.ID',
223 '=ref.SITE_ID' => new SqlExpression('?s', $siteId)
224 ]
225 )
226 )
227 ->addSelect('SITE.PATH2FORUM_MESSAGE', 'PATH2FORUM_MESSAGE');
228 }
229 self::$cache[$cacheKey] = $q->fetch() ?: null;
230 }
231 self::bindOldKernelEvents();
232 return self::$cache[$cacheKey];
233 }
234
235 public static function updateSilently($id, $fields)
236 {
238 $helper = $connection->getSqlHelper();
239 $update = $helper->prepareUpdate(self::getTableName(), $fields);
240 $where = $helper->prepareAssignment(self::getTableName(), 'ID', $id);
241 $sql = 'UPDATE '.$helper->quote(self::getTableName()).' SET '.$update[0].' WHERE '.$where;
242 return $connection->query($sql, $update[1]);
243 }
244
245 public static function onBeforeUpdate(\Bitrix\Main\ORM\Event $event)
246 {
247 $result = new \Bitrix\Main\ORM\EventResult();
249 $data = $event->getParameter("fields");
250 $id = $event->getParameter("id");
251 $id = $id["ID"];
252 $forum = self::getById($id)->fetch();
253
254 if (\Bitrix\Main\Config\Option::get("forum", "FILTER", "Y") == "Y")
255 {
256 $filteredFields = self::getFilteredFields();
257 if (!empty(array_intersect($filteredFields, array_keys($data))))
258 {
259 $res = [];
260 foreach ($filteredFields as $key)
261 {
262 $res[$key] = $val = array_key_exists($key, $data) ? $data[$key] : $forum[$key];
263 if (!empty($val))
264 {
266 if (empty($res[$key]))
267 {
268 $res[$key] = "*";
269 }
270 }
271 }
272 $data["HTML"] = serialize($res);
273 }
274 }
275
276 if ($data != $event->getParameter("fields"))
277 {
278 $result->modifyFields($data);
279 }
280 return $result;
281 }
282
283 public static function onAfterAdd(\Bitrix\Main\ORM\Event $event)
284 {
285 self::$cache = [];
286 return new Entity\EventResult();
287 }
288
289 public static function onAfterUpdate(\Bitrix\Main\ORM\Event $event)
290 {
291 self::$cache = [];
292 return new Entity\EventResult();
293 }
294
295 public static function onAfterDelete(\Bitrix\Main\ORM\Event $event)
296 {
297 self::$cache = [];
298 return new Entity\EventResult();
299 }
300
301 public static function clearCache() // TODO redesign old forum new to D7
302 {
303 self::$cache = [];
304 self::getEntity()->cleanCache();
305 }
306
307 private static function bindOldKernelEvents() // TODO redesign old forum new to D7 and delete this function
308 {
309 static $bound = false;
310 if ($bound === true)
311 {
312 return;
313 }
315 $eventManager->addEventHandler("forum", "onAfterForumAdd", [__CLASS__, "clearCache"]);
316 $eventManager->addEventHandler("forum", "onAfterForumUpdate", [__CLASS__, "clearCache"]);
317 $eventManager->addEventHandler("forum", "OnAfterForumDelete", [__CLASS__, "clearCache"]);
318 $bound = true;
319 }
320}
321
322class Forum implements \ArrayAccess {
323 use \Bitrix\Forum\Internals\EntityFabric;
324 use \Bitrix\Forum\Internals\EntityBaseMethods;
325
327 protected $id = 0;
329 protected $data = [];
331 protected $strore = [];
332
333 public function __construct($id)
334 {
335 $this->id = $id;
336 if ($id <= 0)
337 {
338 throw new \Bitrix\Main\ArgumentNullException("Forum id is null.");
339 }
340 $this->data = ForumTable::getMainData($this->id);
341 if (empty($this->data))
342 {
343 throw new \Bitrix\Main\ObjectNotFoundException("Forum with id {$this->id} is not found.");
344 }
345 $this->bindEvents();
346 $this->errorCollection = new \Bitrix\Main\ErrorCollection();
347 }
348
349 private function bindEvents()
350 {
352 $eventManager->addEventHandler("forum", "onAfterPermissionSet", [$this, "clearCache"]);
353 $eventManager->addEventHandler("forum", "onAfterUserUpdate", [$this, "clearCache"]);
354 }
355
356 public function clearCache()
357 {
358 $this->strore = [];
359 }
360
361 public function getPermissions()
362 {
363 if (!array_key_exists("permission_for_all", $this->strore))
364 {
365 $dbRes = PermissionTable::getList([
366 "select" => ["GROUP_ID", "PERMISSION"],
367 "filter" => ["FORUM_ID" => $this->id],
368 "cache" => ["ttl" => 84600]
369 ]);
370 $this->strore["permission_for_all"] = [];
371 while ($res = $dbRes->fetch())
372 {
373 $this->strore["permission_for_all"][$res["GROUP_ID"]] = $res["PERMISSION"];
374 }
375 }
376 return $this->strore["permission_for_all"];
377 }
378
379 private function getPermissionFromUserGroups(array $groups)
380 {
381 sort($groups);
382 $key = "permission_".implode("_", $groups);
383 if (!array_key_exists($key, $this->strore))
384 {
385 $this->strore[$key] =
386 $dbRes = PermissionTable::getList([
387 "select" => ["MAX_PERMISSION"],
388 "runtime" => [
389 new \Bitrix\Main\Entity\ExpressionField("MAX_PERMISSION", "MAX(%s)", ["PERMISSION"])
390 ],
391 "filter" => [
392 "FORUM_ID" => $this->id,
393 "GROUP_ID" => $groups + [2]
394 ],
395 "group" => "FORUM_ID",
396 "cache" => ["ttl" => "3600"]
397 ]);
398 $this->strore[$key] = ($res = $dbRes->fetch()) ? $res["MAX_PERMISSION"] : Permission::ACCESS_DENIED;
399 }
400 return $this->strore[$key];
401 }
402
404 {
405 if ($user->isAdmin())
406 {
408 }
409 elseif ($this->data["ACTIVE"] != "Y")
410 {
412 }
413 else
414 {
415 $result = $this->getPermissionFromUserGroups($user->getGroups());
416 }
417 return $result;
418 }
419
421 {
423 {
425 }
426 elseif ($this->data["ACTIVE"] != "Y")
427 {
429 }
430 else
431 {
432 $result = $this->getPermissionFromUserGroups($groups);
433 }
434 return $result;
435 }
436
437 public function setPermission(array $groups)
438 {
439 $dbRes = PermissionTable::getList([
440 "select" => ["ID"],
441 "filter" => [
442 "FORUM_ID" => $this->id
443 ]
444 ]);
445 while ($res = $dbRes->fetch())
446 {
447 PermissionTable::delete($res["ID"]);
448 }
449 foreach ($groups as $key => $val)
450 {
451 PermissionTable::add([
452 "FORUM_ID" => $this->id,
453 "GROUP_ID" => $key,
454 "PERMISSION" => mb_strtoupper($val)
455 ]);
456 }
457 foreach (GetModuleEvents("forum", "onAfterPermissionSet", true) as $arEvent)
458 {
459 ExecuteModuleEventEx($arEvent, array($this->id, $groups));
460 }
461 return true;
462 }
463
464 public function getSites()
465 {
466 if (!array_key_exists("sites", $this->strore))
467 {
468 $dbRes = ForumSiteTable::getList([
469 "select" => ["*"],
470 "filter" => ["FORUM_ID" => $this->id],
471 "cache" => ["ttl" => 84600]
472 ]);
473 $this->strore["sites"] = [];
474 while ($res = $dbRes->fetch())
475 {
476 $this->strore["sites"][$res["SITE_ID"]] = $res["PATH2FORUM_MESSAGE"];
477 }
478 }
479 return $this->strore["sites"];
480 }
481
482 public function calculateStatistic()
483 {
484 $enableCalculateStatistics = COption::GetOptionString('forum', 'enable_calculate_statistics', 'Y');
485 if ($enableCalculateStatistics === 'N')
486 {
487 return;
488 }
489
490 $forumId = (int) $this->getId();
491 global $DB;
492 $statSQL = <<<SQL
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
496 FROM
497 b_forum AS T0
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}
504SQL;
505
506
507 if ($DB->type === 'MYSQL')
508 {
509 $sql = <<<SQL
510UPDATE
511 b_forum f,
512 (
513 {$statSQL}
514 ) ff
515set
516 f.TOPICS = ff.TOPICS,
517 f.POSTS = ff.POSTS,
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}
528SQL;
529 }
530 else if ($DB->type === 'PGSQL')
531 {
532 $sql = <<<SQL
533UPDATE
534 b_forum f
535set (
536 TOPICS,
537 POSTS,
538 POSTS_UNAPPROVED,
539 LAST_MESSAGE_ID,
540 LAST_POSTER_ID,
541 LAST_POSTER_NAME,
542 LAST_POST_DATE,
543 ABS_LAST_MESSAGE_ID,
544 ABS_LAST_POSTER_ID,
545 ABS_LAST_POSTER_NAME,
546 ABS_LAST_POST_DATE
547 ) = (
548 {$statSQL}
549 )
550WHERE f.ID = {$forumId}
551SQL;
552 }
553
554 if (isset($sql))
555 {
556 Main\Application::getConnection()->queryExecute($sql);
557 }
558 else
559 {
560 $fields = [
561 'TOPICS' => 0,
562 'POSTS' => 0,
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,
572 ];
573 if ($statFields = Main\Application::getConnection()->query($statSQL)->fetch())
574 {
575 $fields = array_intersect_key($statFields, $fields);
576 }
577 ForumTable::updateSilently($forumId, $fields);
578 }
579 }
580
582 {
583 $enableCalculateStatistics = COption::GetOptionString('forum', 'enable_calculate_statistics', 'Y');
584 if ($enableCalculateStatistics === 'N')
585 {
586 return;
587 }
588 $fields = [
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"]
593 ];
594 if ($message["APPROVED"] == "Y")
595 {
596 $fields += [
597 "LAST_POSTER_ID" => $message["AUTHOR_ID"],
598 "LAST_POSTER_NAME" => $message["AUTHOR_NAME"],
599 "LAST_POST_DATE" => $message["POST_DATE"],
600 "LAST_MESSAGE_ID" => $message["ID"]
601 ];
602 $fields["POSTS"] = new \Bitrix\Main\DB\SqlExpression('?# + 1', "POSTS");
603 if ($message["NEW_TOPIC"] == "Y")
604 {
605 $fields["TOPICS"] = new \Bitrix\Main\DB\SqlExpression('?# + 1', "TOPICS");
606 }
607 }
608 else
609 {
610 $fields["POSTS_UNAPPROVED"] = new \Bitrix\Main\DB\SqlExpression('?# + 1', "POSTS_UNAPPROVED");
611 }
612
613 ForumTable::updateSilently($this->getId(), $fields);
614
615 if (\CModule::IncludeModule("statistic"))
616 {
617 $F_EVENT1 = $this->data["EVENT1"];
618 $F_EVENT2 = $this->data["EVENT2"];
619 $F_EVENT3 = $this->data["EVENT3"];
620 if (empty($F_EVENT3))
621 {
622 $F_EVENT3 = $_SERVER["HTTP_REFERER"] ?? '';
623 }
624 \CStatistics::Set_Event($F_EVENT1, $F_EVENT2, $F_EVENT3);
625 }
626 }
627
629 {
630 $enableCalculateStatistics = COption::GetOptionString('forum', 'enable_calculate_statistics', 'Y');
631 if ($enableCalculateStatistics === 'N')
632 {
633 return;
634 }
635 $forumId = (int) $this->getId();
636 if ($message['APPROVED'] == 'Y')
637 {
638 $subQueryTopics = "";
639 if ($message['NEW_TOPIC'] === 'Y')
640 {
641 $subQueryTopics = <<<SQL
642 f.TOPICS = (SELECT COUNT(ID) FROM b_forum_topic WHERE FORUM_ID={$forumId} AND APPROVED='Y' GROUP BY FORUM_ID),
643SQL;
644 }
645 $sql = <<<SQL
646UPDATE
647 b_forum f,
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
650set
651 {$subQueryTopics}
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,
661 f.HTML = ''
662WHERE f.ID = {$forumId} AND last_message.FORUM_ID = f.ID AND abs_last_message.FORUM_ID = f.ID
663SQL;
664 }
665 else
666 {
667 $sql = <<<SQL
668UPDATE
669 b_forum f,
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
671set
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,
677 f.HTML = ''
678WHERE f.ID = {$forumId} AND abs_last_message.FORUM_ID = f.ID
679SQL;
680 }
681
682 Main\Application::getConnection()->queryExecute($sql);
683 }
684}
$connection
Определения actionsdefinitions.php:38
calculateStatistic()
Определения forum.php:482
__construct($id)
Определения forum.php:333
$strore
Определения forum.php:331
incrementStatistic(array $message)
Определения forum.php:581
decrementStatistic(array $message)
Определения forum.php:628
$data
Определения forum.php:329
getPermissionForUserGroups(array $groups)
Определения forum.php:420
getPermissions()
Определения forum.php:361
getSites()
Определения forum.php:464
clearCache()
Определения forum.php:356
getPermissionForUser(\Bitrix\Forum\User $user)
Определения forum.php:403
$id
Определения forum.php:327
setPermission(array $groups)
Определения forum.php:437
static onAfterAdd(\Bitrix\Main\ORM\Event $event)
Определения forum.php:283
static getMap()
Определения forum.php:123
static updateSilently($id, $fields)
Определения forum.php:235
static onAfterDelete(\Bitrix\Main\ORM\Event $event)
Определения forum.php:295
static onAfterUpdate(\Bitrix\Main\ORM\Event $event)
Определения forum.php:289
static getMainData(int $forumId, ?string $siteId=null)
Определения forum.php:198
static clearCache()
Определения forum.php:301
static getTableName()
Определения forum.php:113
const FULL_ACCESS
Определения permission.php:73
const ACCESS_DENIED
Определения permission.php:67
Определения user.php:264
static isUserAdmin(array $groups)
Определения user.php:967
static getConnection($name="")
Определения application.php:638
Определения event.php:5
static getInstance()
Определения eventmanager.php:31
static Filter($message)
Определения filter_dictionary.php:590
$data['IS_AVAILABLE']
Определения .description.php:13
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$result
Определения get_property_values.php:14
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
$groups
Определения options.php:30
$siteId
Определения ajax.php:8
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
Определения ufield.php:9
$user
Определения mysql_to_pgsql.php:33
$message
Определения payment.php:8
$event
Определения prolog_after.php:141
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
$val
Определения options.php:1793
$eventManager
Определения include.php:412
$dbRes
Определения yandex_detail.php:168
$fields
Определения yandex_run.php:501