1C-Bitrix
25.700.0
Загрузка...
Поиск...
Не найдено
PhraseFtsIndexConverter.php
См. документацию.
1
<?php
2
namespace
Bitrix\Translate\Update
;
3
4
use
Bitrix\Main\Loader
;
5
use
Bitrix\Main\DB\SqlException
;
6
use
Bitrix\Main\Config\Option
;
7
use
Bitrix\Main\Localization\Loc
;
8
use
Bitrix\Main\Localization\LanguageTable
;
9
use
Bitrix\Translate\Index
;
10
11
12
final
class
PhraseFtsIndexConverter
extends
\Bitrix\Main\Update\Stepper
13
{
14
const
OPTION_NAME
=
'fts_index_converter_stepper'
;
15
protected
static
$moduleId
=
'translate'
;
16
20
public
function
execute
(
array
&
$result
)
21
{
22
if
(!Loader::includeModule(self::$moduleId))
23
{
24
return
self::FINISH_EXECUTION;
25
}
26
27
global $pPERIOD;
28
$pPERIOD = 30;
29
30
$connection
=
\Bitrix\Main\Application::getConnection
();
31
if
(!
$connection
->isTableExists(
'b_translate_phrase'
))
32
{
33
return
self::FINISH_EXECUTION;
34
}
35
36
try
37
{
38
$connection
->query(
"SELECT `PHRASE` FROM `b_translate_phrase` WHERE 1=0"
);
39
}
40
catch
(
SqlException
$exception)
41
{
42
return
self::FINISH_EXECUTION;
43
}
44
45
$startTime
= time();
46
$isCronRun =
47
!
\Bitrix\Main\ModuleManager::isModuleInstalled
(
'bitrix24'
)
48
&& (php_sapi_name() ===
'cli'
);
49
50
$return = self::FINISH_EXECUTION;
51
52
$params
= Option::get(self::$moduleId, self::OPTION_NAME,
''
);
53
$params
=
$params
!==
''
? @unserialize(
$params
, [
'allowed_classes'
=>
false
]) : [];
54
$params
= is_array(
$params
) ?
$params
: [];
55
56
if
(empty(
$params
))
57
{
58
$params
= [
59
'languages'
=> [],
60
'index'
=>
false
,
61
'field'
=>
false
,
62
'number'
=> 0,
63
'count'
=> LanguageTable::getCount() + 2,
64
];
65
}
66
67
if
(
$params
[
'count'
] > 0)
68
{
69
$result
[
'title'
] = Loc::getMessage(
'IM_UPDATE_CHAT_DISK_ACCESS'
);
70
$result
[
'progress'
] = 1;
71
$result
[
'steps'
] =
''
;
72
$result
[
'count'
] =
$params
[
'count'
];
73
74
$filter
= [];
75
if
(!empty(
$params
[
'languages'
]))
76
{
77
$filter
[
'!=ID'
] =
$params
[
'languages'
];
78
}
79
$found =
false
;
80
$langList = LanguageTable::getList([
81
'select'
=> [
'ID'
],
82
'filter'
=>
$filter
,
83
'order'
=> [
'SORT'
=>
'ASC'
],
84
]);
85
while
($row = $langList->fetch())
86
{
87
$langId = mb_strtolower($row[
'ID'
]);
88
if
(!preg_match(
"/[a-z0-9]{2}/i"
, $langId))
89
{
90
continue
;
91
}
92
93
try
94
{
95
Index\Internals\PhraseFts::createTable
($langId);
96
$partitionTable =
Index\Internals\PhraseFts::getPartitionTableName
($langId);
97
98
$connection
->queryExecute(
"
99
INSERT IGNORE INTO `{$partitionTable}`
100
SELECT `ID`, `FILE_ID`, `PATH_ID`, `CODE`, `PHRASE` FROM `b_translate_phrase` WHERE `LANG_ID` = '{$langId}'
101
"
);
102
}
103
catch
(
SqlException
$exception)
104
{}
105
106
$params
[
'languages'
][] = $langId;
107
$params
[
'number'
]++;
108
$found =
true
;
109
if
(!$isCronRun && (time() -
$startTime
>= 30))
110
{
111
break
;
112
}
113
}
114
115
if
($found ===
false
)
116
{
117
if
(
$params
[
'index'
] ===
false
)
118
{
119
try
120
{
121
$connection
->queryExecute(
"ALTER TABLE `b_translate_phrase` DROP INDEX `IXF_TRNSL_PHR`"
);
122
}
123
catch
(
SqlException
$exception)
124
{}
125
$params
[
'index'
] =
true
;
126
$params
[
'number'
]++;
127
$found =
true
;
128
}
129
elseif
(
$params
[
'field'
] ===
false
)
130
{
131
try
132
{
133
$connection
->queryExecute(
"ALTER TABLE `b_translate_phrase` DROP COLUMN `PHRASE`"
);
134
}
135
catch
(
SqlException
$exception)
136
{}
137
$params
[
'field'
] =
true
;
138
$params
[
'number'
]++;
139
$found =
true
;
140
}
141
}
142
143
if
($found)
144
{
145
Option::set(self::$moduleId, self::OPTION_NAME, serialize(
$params
));
146
$return = self::CONTINUE_EXECUTION;
147
}
148
149
$result
[
'progress'
] = floor(
$params
[
'number'
] * 100 /
$params
[
'count'
]);
150
$result
[
'steps'
] =
$params
[
'number'
];
151
152
if
($found ===
false
)
153
{
154
Option::delete(self::$moduleId, [
'name'
=> self::OPTION_NAME]);
155
}
156
}
157
158
return
$return;
159
}
160
}
$connection
$connection
Определения
actionsdefinitions.php:38
Bitrix\Main\Application\getConnection
static getConnection($name="")
Определения
application.php:638
Bitrix\Main\Config\Option
Определения
option.php:15
Bitrix\Main\DB\SqlException
Определения
sqlexception.php:9
Bitrix\Main\Loader
Определения
loader.php:13
Bitrix\Main\Localization\LanguageTable
Определения
language.php:21
Bitrix\Main\Localization\Loc
Определения
loc.php:12
Bitrix\Main\ModuleManager\isModuleInstalled
static isModuleInstalled($moduleName)
Определения
modulemanager.php:125
Bitrix\Main\Update\Stepper
Определения
stepper.php:29
Bitrix\Translate\Index\Internals\PhraseFts\getPartitionTableName
static getPartitionTableName(string $langId)
Определения
phrasefts.php:102
Bitrix\Translate\Index\Internals\PhraseFts\createTable
static createTable(string $langId)
Определения
phrasefts.php:118
Bitrix\Translate\Update\PhraseFtsIndexConverter
Определения
PhraseFtsIndexConverter.php:13
Bitrix\Translate\Update\PhraseFtsIndexConverter\execute
execute(array &$result)
Определения
PhraseFtsIndexConverter.php:20
Bitrix\Translate\Update\PhraseFtsIndexConverter\$moduleId
static $moduleId
Определения
PhraseFtsIndexConverter.php:15
Bitrix\Translate\Update\PhraseFtsIndexConverter\OPTION_NAME
const OPTION_NAME
Определения
PhraseFtsIndexConverter.php:14
$startTime
$startTime
Определения
sync.php:69
array
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения
file_new.php:804
$result
$result
Определения
get_property_values.php:14
$filter
$filter
Определения
iblock_catalog_list.php:54
Bitrix\Translate\Index
Определения
aggregate.php:3
Bitrix\Translate\Update
Определения
PhraseFtsIndexConverter.php:2
elseif
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения
prolog_main_admin.php:393
$params
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения
template.php:799
bitrix
modules
translate
lib
Update
PhraseFtsIndexConverter.php
Создано системой
1.14.0