1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
IndexTableTrait.php
См. документацию.
1<?php
2
3namespace Bitrix\Im\V2\Common;
4
5use Bitrix\Main\Application;
6use Bitrix\Main\ORM\Data\DataManager;
7use Bitrix\Main\ORM\Data\Internal\DeleteByFilterTrait;
8use Bitrix\Main\ORM\Query\Filter\Helper;
9use Bitrix\Main\ORM\Query\Query;
10use Bitrix\Main\Search\Content;
11
13{
15 use DeleteByFilterTrait;
16
17 private static bool $isAlreadyPlanned = false;
18
19 public static function indexInBackground(): void
20 {
21 if (self::$isAlreadyPlanned)
22 {
23 return;
24 }
25
26 self::$isAlreadyPlanned = true;
27
28 Application::getInstance()->addBackgroundJob(fn () => self::runIndex());
29 }
30
31 public static function prepareSearchString(string $searchString): string
32 {
33 $searchString = Content::prepareStringToken($searchString);
34 $searchString = Helper::matchAgainstWildcard($searchString);
35
36 return $searchString;
37 }
38
39 public static function deleteByParentFilter(array $filter): void
40 {
41 $baseTablePrimary = static::getBaseDataClass()::getEntity()->getPrimary();
42 $indexTablePrimary = static::getEntity()->getPrimary();
43 $rows = static::getBaseDataClass()::getList(['select' => [$baseTablePrimary], 'filter' => $filter])->fetchAll();
44 $primaries = [];
45
46 foreach ($rows as $row)
47 {
48 $primaries[] = (int)$row[$baseTablePrimary];
49 }
50
51 if (empty($primaries))
52 {
53 return;
54 }
55
56 sort($primaries);
57
58 static::deleteByFilter(["={$indexTablePrimary}" => $primaries]);
59 }
60
61 public static function updateIndexStatus(array $ids, bool $status = true): void
62 {
63 if (empty($ids))
64 {
65 return;
66 }
67
68 $connection = Application::getConnection();
69 $sqlHelper = $connection->getSqlHelper();
70 $baseTable = $sqlHelper->quote(static::getBaseDataClass()::getTableName());
71 $baseTablePrimary = $sqlHelper->quote(static::getBaseDataClass()::getEntity()->getPrimary());
72 $implodeIds = implode(',', $ids);
73 $statusString = $status ? 'Y' : 'N';
74
75 $sql = "
76 UPDATE {$baseTable}
77 SET IS_INDEXED = '{$statusString}'
78 WHERE {$baseTablePrimary} IN ({$implodeIds});
79 ";
80
81 $connection->queryExecute($sql);
82 }
83
84 private static function runIndex(): void
85 {
86 self::index();
87 self::$isAlreadyPlanned = false;
88 }
89
93 abstract protected static function getBaseDataClass(): string;
94
95 abstract public static function index(): void;
96}
$connection
Определения actionsdefinitions.php:38
static getInstance()
Определения servicelocator.php:33
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$filter
Определения iblock_catalog_list.php:54
$status
Определения session.php:10
trait IndexTableTrait
Определения IndexTableTrait.php:13
trait MultiplyInsertTrait
Определения MultiplyInsertTrait.php:8
$rows
Определения options.php:264