1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
currencylang.php
См. документацию.
1<?php
2
3namespace Bitrix\Currency;
4
5use Bitrix\Main\Application;
6use Bitrix\Main\Localization\Loc;
7use Bitrix\Main\ORM;
8use Bitrix\Main\Type;
9use Bitrix\Main\Event;
10
49
51{
57 public static function getTableName(): string
58 {
59 return 'b_catalog_currency_lang';
60 }
61
67 public static function getMap(): array
68 {
69 return [
70 'CURRENCY' => (new ORM\Fields\StringField('CURRENCY'))
71 ->configurePrimary(true)
72 ->addValidator(new ORM\Fields\Validators\LengthValidator(null, 3))
73 ->configureTitle(Loc::getMessage('CURRENCY_LANG_ENTITY_CURRENCY_FIELD'))
74 ,
75 'LID' => (new ORM\Fields\StringField('LID'))
76 ->configurePrimary(true)
77 ->addValidator(new ORM\Fields\Validators\LengthValidator(2, 2))
78 ->configureTitle(Loc::getMessage('CURRENCY_LANG_ENTITY_LID_FIELD'))
79 ,
80 'FORMAT_STRING' => (new ORM\Fields\StringField('FORMAT_STRING'))
81 ->configureRequired(true)
82 ->addValidator(new ORM\Fields\Validators\LengthValidator(null, 50))
83 ->configureTitle(Loc::getMessage('CURRENCY_LANG_ENTITY_FORMAT_STRING_FIELD'))
84 ,
85 'FULL_NAME' => (new ORM\Fields\StringField('FULL_NAME'))
86 ->addValidator(new ORM\Fields\Validators\LengthValidator(null, 50))
87 ->configureTitle(Loc::getMessage('CURRENCY_LANG_ENTITY_FULL_NAME_FIELD'))
88 ,
89 'DEC_POINT' => (new ORM\Fields\StringField('DEC_POINT'))
90 ->configureDefaultValue('.')
91 ->addValidator(new ORM\Fields\Validators\LengthValidator(null, 16))
92 ->configureTitle(Loc::getMessage('CURRENCY_LANG_ENTITY_DEC_POINT_FIELD'))
93 ,
94 'THOUSANDS_SEP' => (new ORM\Fields\StringField('THOUSANDS_SEP'))
95 ->configureDefaultValue(' ')
96 ->addValidator(new ORM\Fields\Validators\LengthValidator(null, 16))
97 ->configureTitle(Loc::getMessage('CURRENCY_LANG_ENTITY_THOUSANDS_SEP_FIELD'))
98 ,
99 'DECIMALS' => (new ORM\Fields\IntegerField('DECIMALS'))
100 ->configureDefaultValue(2)
101 ->configureTitle(Loc::getMessage('CURRENCY_LANG_ENTITY_DECIMALS_FIELD'))
102 ,
103 'THOUSANDS_VARIANT' => (new ORM\Fields\StringField('THOUSANDS_VARIANT'))
104 ->addValidator(new ORM\Fields\Validators\LengthValidator(null, 1))
105 ->configureTitle(Loc::getMessage('CURRENCY_LANG_ENTITY_THOUSANDS_VARIANT_FIELD'))
106 ,
107 'HIDE_ZERO' => (new ORM\Fields\BooleanField('HIDE_ZERO'))
108 ->configureValues('N', 'Y')
109 ->configureDefaultValue('N')
110 ->configureTitle(Loc::getMessage('CURRENCY_LANG_ENTITY_HIDE_ZERO_FIELD'))
111 ,
112 'CREATED_BY' => (new ORM\Fields\IntegerField('CREATED_BY'))
113 ->configureTitle(Loc::getMessage('CURRENCY_LANG_ENTITY_CREATED_BY_FIELD'))
114 ,
115 'DATE_CREATE' => (new ORM\Fields\DatetimeField('DATE_CREATE'))
116 ->configureDefaultValue(static fn() => new Type\DateTime())
117 ->configureTitle(Loc::getMessage('CURRENCY_LANG_ENTITY_DATE_CREATE_FIELD'))
118 ,
119 'MODIFIED_BY' => (new ORM\Fields\IntegerField('MODIFIED_BY'))
120 ->configureTitle(Loc::getMessage('CURRENCY_LANG_ENTITY_MODIFIED_BY_FIELD'))
121 ,
122 'TIMESTAMP_X' => (new ORM\Fields\DatetimeField('TIMESTAMP_X'))
123 ->configureRequired(true)
124 ->configureDefaultValue(static fn() => new Type\DateTime())
125 ->configureTitle(Loc::getMessage('CURRENCY_LANG_ENTITY_TIMESTAMP_X_FIELD'))
126 ,
127 'CREATED_BY_USER' => (new ORM\Fields\Relations\Reference(
128 'CREATED_BY_USER',
129 'Bitrix\Main\User',
130 ORM\Query\Join::on('this.CREATED_BY', 'ref.ID')
131 ))->configureJoinType(ORM\Query\Join::TYPE_LEFT)
132 ,
133 'MODIFIED_BY_USER' => (new ORM\Fields\Relations\Reference(
134 'MODIFIED_BY_USER',
135 'Bitrix\Main\User',
136 ORM\Query\Join::on('this.MODIFIED_BY', 'ref.ID')
137 ))->configureJoinType(ORM\Query\Join::TYPE_LEFT)
138 ,
139 'LANGUAGE' => (new ORM\Fields\Relations\Reference(
140 'LANGUAGE',
141 'Bitrix\Main\Localization\Language',
142 ORM\Query\Join::on('this.LID', 'ref.LID')
143 ))->configureJoinType(ORM\Query\Join::TYPE_LEFT)
144 ,
145 ];
146 }
147
154 public static function deleteByCurrency(string $currency): void
155 {
156 $currency = trim($currency);
157 if ($currency === '')
158 {
159 return;
160 }
161 $conn = Application::getConnection();
162 $helper = $conn->getSqlHelper();
163 $conn->queryExecute(
164 'delete from ' . $helper->quote(self::getTableName())
165 . ' where ' . $helper->quote('CURRENCY') . ' = \'' . $helper->forSql($currency) . '\''
166 );
167 unset($helper, $conn);
168
169 static::cleanCache();
170 }
171
177 public static function cleanCache(): void
178 {
179 parent::cleanCache();
181 }
182
183 public static function onLanguageAddHandler(array|Event $event): void
184 {
185 if ($event instanceof Event)
186 {
187 $primary = $event->getParameter('primary');
188 $languageId = $primary['LID'] ?? null;
189 }
190 else
191 {
192 $languageId = $event['LID'] ?? null;
193 }
194
195 if (!$languageId)
196 {
197 return;
198 }
199
200 self::addCurrencyLanguagesByLanguageId((string)$languageId);
201 }
202
203 private static function addCurrencyLanguagesByLanguageId(string $languageId): void
204 {
205 $existCurrencies = \Bitrix\Currency\CurrencyTable::getList(['select' => ['CURRENCY']])->fetchAll();
206 foreach ($existCurrencies as $existCurrency)
207 {
208 $existsCurrencyCode = $existCurrency['CURRENCY'];
209 $currencyLangData = CurrencyLangTable::getRow(
210 [
211 'select' => ['CURRENCY', 'LID'],
212 'filter' => [
213 '=CURRENCY' => $existsCurrencyCode,
214 '=LID' => $languageId,
215 ],
216 ],
217 );
218 if ($currencyLangData)
219 {
220 continue;
221 }
222
223 $currencyClassifierData = CurrencyClassifier::getCurrency(
224 $existsCurrencyCode,
225 [$languageId]
226 );
227 if (!$currencyClassifierData)
228 {
229 continue;
230 }
231
232 $languageData = $currencyClassifierData[mb_strtoupper($languageId)];
233 $datetimeEntity = new \Bitrix\Main\DB\SqlExpression(
234 \Bitrix\Main\Application::getConnection()->getSqlHelper()->getCurrentDateTimeFunction()
235 );
236 self::add([
237 'CURRENCY' => $existsCurrencyCode,
238 'LID' => $languageId,
239 'FORMAT_STRING' => str_replace('#VALUE#', '#', $languageData['FORMAT_STRING']),
240 'FULL_NAME' => $languageData['FULL_NAME'],
241 'DEC_POINT' => $languageData['DEC_POINT'],
242 'THOUSANDS_SEP' => null,
243 'DECIMALS' => $languageData['DECIMALS'],
244 'THOUSANDS_VARIANT' => $languageData['THOUSANDS_VARIANT'],
245 'HIDE_ZERO' => 'Y',
246 'CREATED_BY' => null,
247 'DATE_CREATE' => $datetimeEntity,
248 'MODIFIED_BY' => null,
249 'TIMESTAMP_X' => $datetimeEntity,
250 ]);
252 }
253 }
254}
static getCurrency(string $currency, array $languages, ?string $b24Area=null)
Определения currencyclassifier.php:39
static onLanguageAddHandler(array|Event $event)
Определения currencylang.php:183
static deleteByCurrency(string $currency)
Определения currencylang.php:154
static getTableName()
Определения currencylang.php:57
static clearCurrencyCache($language='')
Определения currencymanager.php:416
Определения event.php:5
static cleanCache()
Определения datamanager.php:1983
static getRow(array $parameters)
Определения datamanager.php:398
static getList(array $parameters=array())
Определения datamanager.php:431
static add(array $data)
Определения datamanager.php:877
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
Определения chain.php:3
Определения collection.php:2
$event
Определения prolog_after.php:141
$currency
Определения template.php:266