1C-Bitrix
25.700.0
Загрузка...
Поиск...
Не найдено
usertype.php
См. документацию.
1
<?php
2
9
10
use
Bitrix\Main\Application
;
11
use
Bitrix\Main\UserFieldTable
;
12
use
Bitrix\Main\UserFieldLangTable
;
13
14
IncludeModuleLangFile
(__FILE__);
15
88
class
CAllUserTypeEntity
extends
CDBResult
89
{
90
protected
static
$cache
= [];
91
92
function
CreatePropertyTables
($entity_id)
93
{
94
$connection
= Application::getConnection();
95
96
if
(!
$connection
->isTableExists(
"b_utm_"
. strtolower($entity_id)))
97
{
98
$connection
->createTable(
"b_utm_"
. strtolower($entity_id), [
99
'ID'
=>
new
\
Bitrix
\Main\ORM\Fields\IntegerField(
'ID'
),
100
'VALUE_ID'
=>
new
\
Bitrix
\Main\ORM\Fields\IntegerField(
'VALUE_ID'
),
101
'FIELD_ID'
=>
new
\
Bitrix
\Main\ORM\Fields\IntegerField(
'FIELD_ID'
),
102
'VALUE'
=>
new
\
Bitrix
\Main\ORM\Fields\TextField(
'VALUE'
, [
'nullable'
=>
true
]),
103
'VALUE_INT'
=>
new
\
Bitrix
\Main\ORM\Fields\IntegerField(
'VALUE_INT'
, [
'nullable'
=>
true
]),
104
'VALUE_DOUBLE'
=>
new
\
Bitrix
\Main\ORM\Fields\FloatField(
'VALUE_DOUBLE'
, [
'nullable'
=>
true
]),
105
'VALUE_DATE'
=>
new
\
Bitrix
\Main\ORM\Fields\DatetimeField(
'VALUE_DATE'
, [
'nullable'
=>
true
]),
106
], [
'ID'
], [
'ID'
]);
107
108
$connection
->createIndex(
"b_utm_"
. strtolower($entity_id),
"ix_utm_"
. $entity_id .
"_2"
, [
"VALUE_ID"
]);
109
$connection
->createIndex(
"b_utm_"
. strtolower($entity_id),
"ix_utm_"
. $entity_id .
"_4"
, [
"FIELD_ID"
,
"VALUE_ID"
,
"VALUE_INT"
]);
110
}
111
112
if
(!
$connection
->isTableExists(
"b_uts_"
. strtolower($entity_id)))
113
{
114
$connection
->createTable(
"b_uts_"
. strtolower($entity_id), [
115
'VALUE_ID'
=>
new
\
Bitrix
\Main\ORM\Fields\IntegerField(
'VALUE_ID'
),
116
], [
'VALUE_ID'
]);
117
}
118
119
return
true
;
120
}
121
130
public
static
function
GetByID
(
$ID
)
131
{
132
global
$DB
;
133
134
static
$arLabels = [
"EDIT_FORM_LABEL"
,
"LIST_COLUMN_LABEL"
,
"LIST_FILTER_LABEL"
,
"ERROR_MESSAGE"
,
"HELP_MESSAGE"
];
135
136
if
(!array_key_exists(
$ID
, static::$cache))
137
{
138
$rsUserField =
CUserTypeEntity::GetList
([], [
"ID"
=> intval(
$ID
)]);
139
if
($arUserField = $rsUserField->Fetch())
140
{
141
$rs
=
$DB
->Query(
"SELECT * FROM b_user_field_lang WHERE USER_FIELD_ID = "
. intval(
$ID
));
142
while
(
$ar
=
$rs
->Fetch())
143
{
144
foreach
($arLabels as $label)
145
{
146
$arUserField[$label][
$ar
[
"LANGUAGE_ID"
]] =
$ar
[$label];
147
}
148
}
149
static::$cache[
$ID
] = $arUserField;
150
}
151
else
152
{
153
static::$cache[
$ID
] =
false
;
154
}
155
}
156
return
static::$cache[
$ID
];
157
}
158
170
public
static
function
GetList
($aSort = [], $aFilter = [])
171
{
172
global
$DB
,
$CACHE_MANAGER
;
173
174
if
(CACHED_b_user_field !==
false
)
175
{
176
$cacheId =
"b_user_type"
. md5(serialize($aSort) .
"."
. serialize($aFilter));
177
if
(
$CACHE_MANAGER
->Read(CACHED_b_user_field, $cacheId,
"b_user_field"
))
178
{
179
$arResult
=
$CACHE_MANAGER
->Get($cacheId);
180
$res
=
new
CDBResult
;
181
$res
->InitFromArray(
$arResult
);
182
$res
=
new
CUserTypeEntity
(
$res
);
183
return
$res
;
184
}
185
}
186
187
$bLangJoin =
false
;
188
$arFilter
= [];
189
foreach
($aFilter as
$key
=>
$val
)
190
{
191
if
(is_array(
$val
) || (
string
)
$val
==
''
)
192
{
193
continue
;
194
}
195
196
$key
= strtoupper(
$key
);
197
$val
=
$DB
->ForSql(
$val
);
198
199
switch
(
$key
)
200
{
201
case
"ID"
:
202
case
"ENTITY_ID"
:
203
case
"FIELD_NAME"
:
204
case
"USER_TYPE_ID"
:
205
case
"XML_ID"
:
206
case
"SORT"
:
207
case
"MULTIPLE"
:
208
case
"MANDATORY"
:
209
case
"SHOW_FILTER"
:
210
case
"SHOW_IN_LIST"
:
211
case
"EDIT_IN_LIST"
:
212
case
"IS_SEARCHABLE"
:
213
$arFilter
[] =
"UF."
.
$key
.
" = '"
.
$val
.
"'"
;
214
break
;
215
case
"LANG"
:
216
$bLangJoin =
$val
;
217
break
;
218
}
219
}
220
221
$arOrder = [];
222
foreach
($aSort as
$key
=>
$val
)
223
{
224
$key
= strtoupper(
$key
);
225
$ord = (strtoupper(
$val
) <>
"ASC"
?
"DESC"
:
"ASC"
);
226
switch
(
$key
)
227
{
228
case
"ID"
:
229
case
"ENTITY_ID"
:
230
case
"FIELD_NAME"
:
231
case
"USER_TYPE_ID"
:
232
case
"XML_ID"
:
233
case
"SORT"
:
234
$arOrder[] =
"UF."
.
$key
.
" "
. $ord;
235
break
;
236
}
237
}
238
if
(empty($arOrder))
239
{
240
$arOrder[] =
"UF.SORT asc"
;
241
$arOrder[] =
"UF.ID asc"
;
242
}
243
DelDuplicateSort
($arOrder);
244
$sOrder =
"\nORDER BY "
. implode(
", "
, $arOrder);
245
246
if
(empty(
$arFilter
))
247
{
248
$sFilter =
""
;
249
}
250
else
251
{
252
$sFilter =
"\nWHERE "
. implode(
"\nAND "
,
$arFilter
);
253
}
254
255
$strSql =
"
256
SELECT
257
UF.ID
258
,UF.ENTITY_ID
259
,UF.FIELD_NAME
260
,UF.USER_TYPE_ID
261
,UF.XML_ID
262
,UF.SORT
263
,UF.MULTIPLE
264
,UF.MANDATORY
265
,UF.SHOW_FILTER
266
,UF.SHOW_IN_LIST
267
,UF.EDIT_IN_LIST
268
,UF.IS_SEARCHABLE
269
,UF.SETTINGS
270
"
. ($bLangJoin ?
"
271
,UFL.EDIT_FORM_LABEL
272
,UFL.LIST_COLUMN_LABEL
273
,UFL.LIST_FILTER_LABEL
274
,UFL.ERROR_MESSAGE
275
,UFL.HELP_MESSAGE
276
"
:
""
) .
"
277
FROM
278
b_user_field UF
279
"
. ($bLangJoin ?
"LEFT JOIN b_user_field_lang UFL on UFL.LANGUAGE_ID = '"
. $bLangJoin .
"' AND UFL.USER_FIELD_ID = UF.ID"
:
""
) .
"
280
"
. $sFilter . $sOrder;
281
282
if
(CACHED_b_user_field ===
false
)
283
{
284
$res
=
$DB
->Query($strSql);
285
}
286
else
287
{
288
$arResult
= [];
289
$res
=
$DB
->Query($strSql);
290
while
(
$ar
=
$res
->Fetch())
291
{
292
$arResult
[] =
$ar
;
293
}
294
296
$CACHE_MANAGER
->Set($cacheId,
$arResult
);
297
298
$res
=
new
CDBResult
;
299
$res
->InitFromArray(
$arResult
);
300
}
301
302
return
new
CUserTypeEntity
(
$res
);
303
}
304
328
public
function
CheckFields
(
$ID
,
$arFields
, $bCheckUserType =
true
)
329
{
331
global
$APPLICATION
,
$USER_FIELD_MANAGER
;
332
$aMsg = [];
333
$ID
= intval(
$ID
);
334
335
if
((
$ID
<= 0 || array_key_exists(
"ENTITY_ID"
,
$arFields
)) &&
$arFields
[
"ENTITY_ID"
] ==
''
)
336
{
337
$aMsg[] = [
"id"
=>
"ENTITY_ID"
,
"text"
=>
GetMessage
(
"USER_TYPE_ENTITY_ID_MISSING"
)];
338
}
339
if
(array_key_exists(
"ENTITY_ID"
,
$arFields
))
340
{
341
if
(mb_strlen(
$arFields
[
"ENTITY_ID"
]) > 50)
342
{
343
$aMsg[] = [
"id"
=>
"ENTITY_ID"
,
"text"
=>
GetMessage
(
"USER_TYPE_ENTITY_ID_TOO_LONG1"
)];
344
}
345
if
(!preg_match(
'/^[0-9A-Z_]+$/'
,
$arFields
[
"ENTITY_ID"
]))
346
{
347
$aMsg[] = [
"id"
=>
"ENTITY_ID"
,
"text"
=>
GetMessage
(
"USER_TYPE_ENTITY_ID_INVALID"
)];
348
}
349
}
350
351
if
((
$ID
<= 0 || array_key_exists(
"FIELD_NAME"
,
$arFields
)) &&
$arFields
[
"FIELD_NAME"
] ==
''
)
352
{
353
$aMsg[] = [
"id"
=>
"FIELD_NAME"
,
"text"
=>
GetMessage
(
"USER_TYPE_FIELD_NAME_MISSING"
)];
354
}
355
if
(array_key_exists(
"FIELD_NAME"
,
$arFields
))
356
{
357
if
(mb_strlen(
$arFields
[
"FIELD_NAME"
]) < 4)
358
{
359
$aMsg[] = [
"id"
=>
"FIELD_NAME"
,
"text"
=>
GetMessage
(
"USER_TYPE_FIELD_NAME_TOO_SHORT"
)];
360
}
361
if
(mb_strlen(
$arFields
[
"FIELD_NAME"
]) > 50)
362
{
363
$aMsg[] = [
"id"
=>
"FIELD_NAME"
,
"text"
=>
GetMessage
(
"USER_TYPE_FIELD_NAME_TOO_LONG1"
)];
364
}
365
if
(strncmp(
$arFields
[
"FIELD_NAME"
],
"UF_"
, 3) !== 0)
366
{
367
$aMsg[] = [
"id"
=>
"FIELD_NAME"
,
"text"
=>
GetMessage
(
"USER_TYPE_FIELD_NAME_NOT_UF"
)];
368
}
369
if
(!preg_match(
'/^[0-9A-Z_]+$/'
,
$arFields
[
"FIELD_NAME"
]))
370
{
371
$aMsg[] = [
"id"
=>
"FIELD_NAME"
,
"text"
=>
GetMessage
(
"USER_TYPE_FIELD_NAME_INVALID"
)];
372
}
373
}
374
375
if
((
$ID
<= 0 || array_key_exists(
"USER_TYPE_ID"
,
$arFields
)) &&
$arFields
[
"USER_TYPE_ID"
] ==
''
)
376
{
377
$aMsg[] = [
"id"
=>
"USER_TYPE_ID"
,
"text"
=>
GetMessage
(
"USER_TYPE_USER_TYPE_ID_MISSING"
)];
378
}
379
if
(
380
$bCheckUserType
381
&& array_key_exists(
"USER_TYPE_ID"
,
$arFields
)
382
&& !
$USER_FIELD_MANAGER
->GetUserType(
$arFields
[
"USER_TYPE_ID"
])
383
)
384
{
385
$aMsg[] = [
"id"
=>
"USER_TYPE_ID"
,
"text"
=>
GetMessage
(
"USER_TYPE_USER_TYPE_ID_INVALID"
)];
386
}
387
388
if
(!empty($aMsg))
389
{
390
$e =
new
CAdminException
($aMsg);
391
$APPLICATION
->ThrowException($e);
392
return
false
;
393
}
394
return
true
;
395
}
396
437
public
function
Add
(
$arFields
, $bCheckUserType =
true
)
438
{
439
global
$DB
,
$APPLICATION
,
$USER_FIELD_MANAGER
;
440
441
if
(!$this->
CheckFields
(0,
$arFields
, $bCheckUserType))
442
{
443
return
false
;
444
}
445
446
$rs
=
CUserTypeEntity::GetList
([], [
447
"ENTITY_ID"
=>
$arFields
[
"ENTITY_ID"
],
448
"FIELD_NAME"
=>
$arFields
[
"FIELD_NAME"
],
449
]);
450
451
if
(
$rs
->Fetch())
452
{
453
$aMsg = [];
454
$aMsg[] = [
455
"id"
=>
"FIELD_NAME"
,
456
"text"
=>
GetMessage
(
"USER_TYPE_ADD_ALREADY_ERROR"
, [
457
"#FIELD_NAME#"
=>
htmlspecialcharsbx
(
$arFields
[
"FIELD_NAME"
]),
458
"#ENTITY_ID#"
=>
htmlspecialcharsbx
(
$arFields
[
"ENTITY_ID"
]),
459
]),
460
];
461
$e =
new
CAdminException
($aMsg);
462
$APPLICATION
->ThrowException($e);
463
return
false
;
464
}
465
466
unset(
$arFields
[
"ID"
]);
467
if
(!isset(
$arFields
[
"SORT"
]) || intval(
$arFields
[
"SORT"
]) <= 0)
468
{
469
$arFields
[
"SORT"
] = 100;
470
}
471
if
(!isset(
$arFields
[
"MULTIPLE"
]) ||
$arFields
[
"MULTIPLE"
] !==
"Y"
)
472
{
473
$arFields
[
"MULTIPLE"
] =
"N"
;
474
}
475
if
(!isset(
$arFields
[
"MANDATORY"
]) ||
$arFields
[
"MANDATORY"
] !==
"Y"
)
476
{
477
$arFields
[
"MANDATORY"
] =
"N"
;
478
}
479
$arFields
[
"SHOW_FILTER"
] = mb_substr(
$arFields
[
"SHOW_FILTER"
] ??
''
, 0, 1);
480
if
(
$arFields
[
"SHOW_FILTER"
] ==
''
|| mb_strpos(
"NIES"
,
$arFields
[
"SHOW_FILTER"
]) ===
false
)
481
{
482
$arFields
[
"SHOW_FILTER"
] =
"N"
;
483
}
484
if
(!isset(
$arFields
[
"SHOW_IN_LIST"
]) ||
$arFields
[
"SHOW_IN_LIST"
] !==
"N"
)
485
{
486
$arFields
[
"SHOW_IN_LIST"
] =
"Y"
;
487
}
488
if
(!isset(
$arFields
[
"EDIT_IN_LIST"
]) ||
$arFields
[
"EDIT_IN_LIST"
] !==
"N"
)
489
{
490
$arFields
[
"EDIT_IN_LIST"
] =
"Y"
;
491
}
492
if
(!isset(
$arFields
[
"IS_SEARCHABLE"
]) ||
$arFields
[
"IS_SEARCHABLE"
] !==
"Y"
)
493
{
494
$arFields
[
"IS_SEARCHABLE"
] =
"N"
;
495
}
496
497
if
(!array_key_exists(
"SETTINGS"
,
$arFields
))
498
{
499
$arFields
[
"SETTINGS"
] = [];
500
}
501
$arFields
[
"SETTINGS"
] = serialize(
$USER_FIELD_MANAGER
->PrepareSettings(0,
$arFields
, $bCheckUserType));
502
507
$commonEventResult = [
'PROVIDE_STORAGE'
=>
true
];
508
509
foreach
(
GetModuleEvents
(
"main"
,
"OnBeforeUserTypeAdd"
,
true
) as $arEvent)
510
{
511
$eventResult =
ExecuteModuleEventEx
($arEvent, [&
$arFields
]);
512
513
if
($eventResult ===
false
)
514
{
515
if
(
$APPLICATION
->GetException())
516
{
517
return
false
;
518
}
519
520
$aMsg = [];
521
$aMsg[] = [
522
"id"
=>
"FIELD_NAME"
,
523
"text"
=>
GetMessage
(
"USER_TYPE_ADD_ERROR"
, [
524
"#FIELD_NAME#"
=>
htmlspecialcharsbx
(
$arFields
[
"FIELD_NAME"
]),
525
"#ENTITY_ID#"
=>
htmlspecialcharsbx
(
$arFields
[
"ENTITY_ID"
]),
526
]),
527
];
528
529
$e =
new
CAdminException
($aMsg);
530
$APPLICATION
->ThrowException($e);
531
532
return
false
;
533
}
534
elseif
(is_array($eventResult))
535
{
536
$commonEventResult = array_merge($commonEventResult, $eventResult);
537
}
538
}
539
540
if
(is_object(
$USER_FIELD_MANAGER
))
541
{
542
$USER_FIELD_MANAGER
->CleanCache();
543
}
544
545
if
($commonEventResult[
'PROVIDE_STORAGE'
])
546
{
547
if
(!$this->
CreatePropertyTables
(
$arFields
[
"ENTITY_ID"
]))
548
{
549
return
false
;
550
}
551
552
$strType =
$USER_FIELD_MANAGER
->getUtsDBColumnType(
$arFields
);
553
554
if
(!$strType)
555
{
556
$aMsg = [];
557
$aMsg[] = [
558
"id"
=>
"FIELD_NAME"
,
559
"text"
=>
GetMessage
(
"USER_TYPE_ADD_ERROR"
, [
560
"#FIELD_NAME#"
=>
htmlspecialcharsbx
(
$arFields
[
"FIELD_NAME"
]),
561
"#ENTITY_ID#"
=>
htmlspecialcharsbx
(
$arFields
[
"ENTITY_ID"
]),
562
]),
563
];
564
$e =
new
CAdminException
($aMsg);
565
$APPLICATION
->ThrowException($e);
566
return
false
;
567
}
568
569
$tableName =
'b_uts_'
. mb_strtolower(
$arFields
[
'ENTITY_ID'
]);
570
$tableFields =
$DB
->GetTableFields($tableName);
571
if
(!array_key_exists(
$arFields
[
'FIELD_NAME'
], $tableFields))
572
{
573
$ddl =
'ALTER TABLE '
. $tableName .
' ADD '
.
$arFields
[
'FIELD_NAME'
] .
' '
. $strType;
574
if
(!
$DB
->DDL($ddl,
true
))
575
{
576
$aMsg = [];
577
$aMsg[] = [
578
"id"
=>
"FIELD_NAME"
,
579
"text"
=>
GetMessage
(
"USER_TYPE_ADD_ERROR"
, [
580
"#FIELD_NAME#"
=>
htmlspecialcharsbx
(
$arFields
[
"FIELD_NAME"
]),
581
"#ENTITY_ID#"
=>
htmlspecialcharsbx
(
$arFields
[
"ENTITY_ID"
]),
582
]),
583
];
584
$e =
new
CAdminException
($aMsg);
585
$APPLICATION
->ThrowException($e);
586
return
false
;
587
}
588
}
589
}
590
591
if
(
$ID
=
$DB
->Add(
"b_user_field"
,
$arFields
, [
"SETTINGS"
],
''
,
true
))
592
{
593
$arLabels = [
"EDIT_FORM_LABEL"
,
"LIST_COLUMN_LABEL"
,
"LIST_FILTER_LABEL"
,
"ERROR_MESSAGE"
,
"HELP_MESSAGE"
];
594
$arLangs
= [];
595
foreach
($arLabels as $label)
596
{
597
if
(isset(
$arFields
[$label]) && is_array(
$arFields
[$label]))
598
{
599
foreach
(
$arFields
[$label] as
$lang
=> $value)
600
{
601
$arLangs
[
$lang
][$label] = $value;
602
}
603
}
604
}
605
606
foreach
(
$arLangs
as
$lang
=> $arLangFields)
607
{
608
$arLangFields[
"USER_FIELD_ID"
] =
$ID
;
609
$arLangFields[
"LANGUAGE_ID"
] =
$lang
;
610
$arInsert =
$DB
->PrepareInsert(
"b_user_field_lang"
, $arLangFields);
611
$DB
->Query(
"INSERT INTO b_user_field_lang ("
. $arInsert[0] .
") VALUES ("
. $arInsert[1] .
")"
);
612
}
613
614
static::cleanCache();
615
}
616
else
617
{
618
return
false
;
619
}
620
621
// post event
622
$arFields
[
'ID'
] =
$ID
;
623
624
foreach
(
GetModuleEvents
(
"main"
,
"OnAfterUserTypeAdd"
,
true
) as $arEvent)
625
{
626
ExecuteModuleEventEx
($arEvent, [
$arFields
]);
627
}
628
629
return
$ID
;
630
}
631
659
public
function
Update
(
$ID
,
$arFields
)
660
{
661
global
$DB
,
$USER_FIELD_MANAGER
,
$APPLICATION
;
662
$ID
= intval(
$ID
);
663
664
unset(
$arFields
[
"ENTITY_ID"
]);
665
unset(
$arFields
[
"FIELD_NAME"
]);
666
unset(
$arFields
[
"USER_TYPE_ID"
]);
667
unset(
$arFields
[
"MULTIPLE"
]);
668
669
if
(!$this->
CheckFields
(
$ID
,
$arFields
))
670
{
671
return
false
;
672
}
673
674
if
(array_key_exists(
"SETTINGS"
,
$arFields
))
675
{
676
$arFields
[
"SETTINGS"
] = serialize(
$USER_FIELD_MANAGER
->PrepareSettings(
$ID
,
$arFields
));
677
}
678
if
(array_key_exists(
"MANDATORY"
,
$arFields
) &&
$arFields
[
"MANDATORY"
] !==
"Y"
)
679
{
680
$arFields
[
"MANDATORY"
] =
"N"
;
681
}
682
if
(array_key_exists(
"SHOW_FILTER"
,
$arFields
))
683
{
684
$arFields
[
"SHOW_FILTER"
] = mb_substr(
$arFields
[
"SHOW_FILTER"
], 0, 1);
685
if
(mb_strpos(
"NIES"
,
$arFields
[
"SHOW_FILTER"
]) ===
false
)
686
{
687
$arFields
[
"SHOW_FILTER"
] =
"N"
;
688
}
689
}
690
if
(array_key_exists(
"SHOW_IN_LIST"
,
$arFields
) &&
$arFields
[
"SHOW_IN_LIST"
] !==
"N"
)
691
{
692
$arFields
[
"SHOW_IN_LIST"
] =
"Y"
;
693
}
694
if
(array_key_exists(
"EDIT_IN_LIST"
,
$arFields
) &&
$arFields
[
"EDIT_IN_LIST"
] !==
"N"
)
695
{
696
$arFields
[
"EDIT_IN_LIST"
] =
"Y"
;
697
}
698
if
(array_key_exists(
"IS_SEARCHABLE"
,
$arFields
) &&
$arFields
[
"IS_SEARCHABLE"
] !==
"Y"
)
699
{
700
$arFields
[
"IS_SEARCHABLE"
] =
"N"
;
701
}
702
703
// events
704
foreach
(
GetModuleEvents
(
"main"
,
"OnBeforeUserTypeUpdate"
,
true
) as $arEvent)
705
{
706
if
(
ExecuteModuleEventEx
($arEvent, [&
$arFields
]) ===
false
)
707
{
708
if
(
$APPLICATION
->GetException())
709
{
710
return
false
;
711
}
712
713
$aMsg = [];
714
$aMsg[] = [
715
"id"
=>
"FIELD_NAME"
,
716
"text"
=>
GetMessage
(
"USER_TYPE_UPDATE_ERROR"
, [
717
"#FIELD_NAME#"
=>
htmlspecialcharsbx
(
$arFields
[
"FIELD_NAME"
]),
718
"#ENTITY_ID#"
=>
htmlspecialcharsbx
(
$arFields
[
"ENTITY_ID"
]),
719
]),
720
];
721
722
$e =
new
CAdminException
($aMsg);
723
$APPLICATION
->ThrowException($e);
724
725
return
false
;
726
}
727
}
728
729
if
(is_object(
$USER_FIELD_MANAGER
))
730
{
731
$USER_FIELD_MANAGER
->CleanCache();
732
}
733
734
$strUpdate =
$DB
->PrepareUpdate(
"b_user_field"
,
$arFields
);
735
736
static
$arLabels = [
"EDIT_FORM_LABEL"
,
"LIST_COLUMN_LABEL"
,
"LIST_FILTER_LABEL"
,
"ERROR_MESSAGE"
,
"HELP_MESSAGE"
];
737
$arLangs
= [];
738
foreach
($arLabels as $label)
739
{
740
if
(isset(
$arFields
[$label]) && is_array(
$arFields
[$label]))
741
{
742
foreach
(
$arFields
[$label] as
$lang
=> $value)
743
{
744
$arLangs
[
$lang
][$label] = $value;
745
}
746
}
747
}
748
749
if
($strUpdate <>
""
|| !empty(
$arLangs
))
750
{
751
if
($strUpdate <>
""
)
752
{
753
$strSql =
"UPDATE b_user_field SET "
. $strUpdate .
" WHERE ID = "
.
$ID
;
754
if
(array_key_exists(
"SETTINGS"
,
$arFields
))
755
{
756
$arBinds = [
"SETTINGS"
=>
$arFields
[
"SETTINGS"
]];
757
}
758
else
759
{
760
$arBinds = [];
761
}
762
$DB
->QueryBind($strSql, $arBinds);
763
}
764
765
if
(!empty(
$arLangs
))
766
{
767
$DB
->StartTransaction();
768
769
$DB
->Query(
"DELETE FROM b_user_field_lang WHERE USER_FIELD_ID = "
.
$ID
);
770
771
foreach
(
$arLangs
as
$lang
=> $arLangFields)
772
{
773
$arLangFields[
"USER_FIELD_ID"
] =
$ID
;
774
$arLangFields[
"LANGUAGE_ID"
] =
$lang
;
775
$arInsert =
$DB
->PrepareInsert(
"b_user_field_lang"
, $arLangFields);
776
$DB
->Query(
"INSERT INTO b_user_field_lang ("
. $arInsert[0] .
") VALUES ("
. $arInsert[1] .
")"
);
777
}
778
779
$DB
->Commit();
780
}
781
782
static::cleanCache();
783
784
foreach
(
GetModuleEvents
(
"main"
,
"OnAfterUserTypeUpdate"
,
true
) as $arEvent)
785
{
786
ExecuteModuleEventEx
($arEvent, [
$arFields
,
$ID
]);
787
}
788
}
789
790
return
true
;
791
}
792
802
public
function
Delete
(
$ID
)
803
{
804
global
$DB
,
$USER_FIELD_MANAGER
,
$APPLICATION
;
805
$ID
= intval(
$ID
);
806
807
$rs
= $this->
GetList
([], [
"ID"
=>
$ID
]);
808
if
($arField =
$rs
->Fetch())
809
{
814
$commonEventResult = [
'PROVIDE_STORAGE'
=>
true
];
815
816
foreach
(
GetModuleEvents
(
"main"
,
"OnBeforeUserTypeDelete"
,
true
) as $arEvent)
817
{
818
$eventResult =
ExecuteModuleEventEx
($arEvent, [&$arField]);
819
820
if
($eventResult ===
false
)
821
{
822
if
(
$APPLICATION
->GetException())
823
{
824
return
false
;
825
}
826
827
$aMsg = [];
828
$aMsg[] = [
829
"id"
=>
"FIELD_NAME"
,
830
"text"
=>
GetMessage
(
"USER_TYPE_DELETE_ERROR"
, [
831
"#FIELD_NAME#"
=>
htmlspecialcharsbx
($arField[
"FIELD_NAME"
]),
832
"#ENTITY_ID#"
=>
htmlspecialcharsbx
($arField[
"ENTITY_ID"
]),
833
]),
834
];
835
836
$e =
new
CAdminException
($aMsg);
837
$APPLICATION
->ThrowException($e);
838
839
return
false
;
840
}
841
elseif
(is_array($eventResult))
842
{
843
$commonEventResult = array_merge($commonEventResult, $eventResult);
844
}
845
}
846
847
$entityId
= strtolower($arField[
"ENTITY_ID"
]);
848
849
$arType =
$USER_FIELD_MANAGER
->GetUserType($arField[
"USER_TYPE_ID"
]);
850
//We need special handling of file type properties
851
if
($arType)
852
{
853
if
($arType[
"BASE_TYPE"
] ==
"file"
&& $commonEventResult[
'PROVIDE_STORAGE'
])
854
{
855
// only if we store values
856
if
($arField[
"MULTIPLE"
] ==
"Y"
)
857
{
858
$strSql =
"SELECT VALUE_INT AS VALUE FROM b_utm_"
.
$entityId
.
" WHERE FIELD_ID="
. $arField[
"ID"
];
859
}
860
else
861
{
862
$strSql =
"SELECT "
. $arField[
"FIELD_NAME"
] .
" AS VALUE FROM b_uts_"
.
$entityId
;
863
}
864
$rsFile =
$DB
->Query($strSql);
865
while
($arFile = $rsFile->Fetch())
866
{
867
CFile::Delete($arFile[
"VALUE"
]);
868
}
869
}
870
elseif
($arType[
"BASE_TYPE"
] ==
"enum"
)
871
{
872
$obEnum =
new
CUserFieldEnum
;
873
$obEnum->
DeleteFieldEnum
($arField[
"ID"
]);
874
}
875
}
876
877
$rs
=
$DB
->Query(
"DELETE FROM b_user_field_lang WHERE USER_FIELD_ID = "
.
$ID
);
878
if
(
$rs
)
879
{
880
$rs
=
$DB
->Query(
"DELETE FROM b_user_field WHERE ID = "
.
$ID
);
881
}
882
883
static::cleanCache();
884
885
foreach
(
GetModuleEvents
(
"main"
,
"OnAfterUserTypeDelete"
,
true
) as $arEvent)
886
{
887
ExecuteModuleEventEx
($arEvent, [$arField,
$ID
]);
888
}
889
890
if
(
$rs
&& $commonEventResult[
'PROVIDE_STORAGE'
])
891
{
892
// only if we store values
893
$DB
->Query(
"DELETE FROM b_utm_"
.
$entityId
.
" WHERE FIELD_ID = '"
.
$ID
.
"'"
);
894
$DB
->Query(
"ALTER TABLE b_uts_"
.
$entityId
.
" DROP "
. $arField[
"FIELD_NAME"
]);
895
}
896
}
897
return
$rs
;
898
}
899
909
public
function
DropEntity
($entity_id)
910
{
911
global
$DB
,
$USER_FIELD_MANAGER
;
912
913
$entity_id = preg_replace(
"/[^0-9A-Z_]+/"
,
""
, $entity_id);
914
915
$rs
=
true
;
916
$rsFields = $this->
GetList
([], [
"ENTITY_ID"
=> $entity_id]);
917
//We need special handling of file and enum type properties
918
while
($arField = $rsFields->Fetch())
919
{
920
$arType =
$USER_FIELD_MANAGER
->GetUserType($arField[
"USER_TYPE_ID"
]);
921
if
($arType && ($arType[
"BASE_TYPE"
] ==
"file"
|| $arType[
"BASE_TYPE"
] ==
"enum"
))
922
{
923
$this->
Delete
($arField[
"ID"
]);
924
}
925
}
926
927
$bDropTable =
false
;
928
$rsFields = $this->
GetList
([], [
"ENTITY_ID"
=> $entity_id]);
929
while
($arField = $rsFields->Fetch())
930
{
931
$bDropTable =
true
;
932
$DB
->Query(
"DELETE FROM b_user_field_lang WHERE USER_FIELD_ID = "
. $arField[
"ID"
]);
933
$rs
=
$DB
->Query(
"DELETE FROM b_user_field WHERE ID = "
. $arField[
"ID"
]);
934
935
foreach
(
GetModuleEvents
(
"main"
,
"OnAfterUserTypeDelete"
,
true
) as $arEvent)
936
{
937
ExecuteModuleEventEx
($arEvent, [$arField, $arField[
"ID"
]]);
938
}
939
}
940
941
static::cleanCache();
942
943
if
($bDropTable)
944
{
945
$entityId
= strtolower($entity_id);
946
$DB
->Query(
"DROP TABLE IF EXISTS b_uts_"
.
$entityId
);
947
$DB
->Query(
"DROP TABLE IF EXISTS b_utm_"
.
$entityId
);
948
}
949
950
return
$rs
;
951
}
952
953
protected
static
function
cleanCache
(): void
954
{
955
global
$CACHE_MANAGER
,
$USER_FIELD_MANAGER
;
956
957
if
(CACHED_b_user_field !==
false
)
958
{
959
$CACHE_MANAGER
->CleanDir(
"b_user_field"
);
960
}
961
UserFieldTable::cleanCache();
962
UserFieldLangTable::cleanCache();
963
$USER_FIELD_MANAGER
->CleanCache();
964
static::$cache = [];
965
}
966
973
function
Fetch
()
974
{
975
$res
= parent::Fetch();
976
if
(
$res
&&
$res
[
"SETTINGS"
] <>
''
)
977
{
978
$res
[
"SETTINGS"
] = unserialize(
$res
[
"SETTINGS"
], [
'allowed_classes'
=>
false
]);
979
}
980
return
$res
;
981
}
982
}
983
984
class
CUserTypeEntity
extends
CAllUserTypeEntity
985
{
986
}
$connection
$connection
Определения
actionsdefinitions.php:38
$APPLICATION
global $APPLICATION
Определения
include.php:80
Bitrix\Main\Application
Определения
application.php:30
Bitrix\Main\UserFieldLangTable
Определения
userfieldlangtable.php:24
Bitrix\Main\UserFieldTable
Определения
userfield.php:33
CAdminException
Определения
adminexception.php:4
CAllDBResult\$arResult
$arResult
Определения
dbresult.php:17
CAllDBResult\$DB
$DB
Определения
dbresult.php:40
CAllUserTypeEntity
Определения
usertype.php:89
CAllUserTypeEntity\Delete
Delete($ID)
Определения
usertype.php:802
CAllUserTypeEntity\CreatePropertyTables
CreatePropertyTables($entity_id)
Определения
usertype.php:92
CAllUserTypeEntity\cleanCache
static cleanCache()
Определения
usertype.php:953
CAllUserTypeEntity\GetByID
static GetByID($ID)
Определения
usertype.php:130
CAllUserTypeEntity\CheckFields
CheckFields($ID, $arFields, $bCheckUserType=true)
Определения
usertype.php:328
CAllUserTypeEntity\Fetch
Fetch()
Определения
usertype.php:973
CAllUserTypeEntity\DropEntity
DropEntity($entity_id)
Определения
usertype.php:909
CAllUserTypeEntity\$cache
static $cache
Определения
usertype.php:90
CAllUserTypeEntity\GetList
static GetList($aSort=[], $aFilter=[])
Определения
usertype.php:170
CAllUserTypeEntity\Update
Update($ID, $arFields)
Определения
usertype.php:659
CAllUserTypeEntity\Add
Add($arFields, $bCheckUserType=true)
Определения
usertype.php:437
CDBResult
Определения
dbresult.php:88
CUserFieldEnum
Определения
userfieldenum.php:6
CUserFieldEnum\DeleteFieldEnum
DeleteFieldEnum($FIELD_ID)
Определения
userfieldenum.php:298
CUserTypeEntity
Определения
usertype.php:985
$CACHE_MANAGER
global $CACHE_MANAGER
Определения
clear_component_cache.php:7
$arFields
$arFields
Определения
dblapprove.php:5
$res
$res
Определения
filter_act.php:7
$USER_FIELD_MANAGER
global $USER_FIELD_MANAGER
Определения
attempt.php:6
$ID
if($ajaxMode) $ID
Определения
get_user.php:27
$lang
if(!defined('SITE_ID')) $lang
Определения
include.php:91
ExecuteModuleEventEx
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения
tools.php:5214
DelDuplicateSort
DelDuplicateSort(&$arSort)
Определения
tools.php:2055
htmlspecialcharsbx
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения
tools.php:2701
GetModuleEvents
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения
tools.php:5177
IncludeModuleLangFile
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения
tools.php:3778
GetMessage
GetMessage($name, $aReplace=null)
Определения
tools.php:3397
Bitrix
$entityId
$entityId
Определения
payment.php:4
$arLangs
$arLangs
Определения
prolog_auth_admin.php:31
elseif
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения
prolog_main_admin.php:393
$ar
$ar
Определения
options.php:199
$key
if(empty($signedUserToken)) $key
Определения
quickway.php:257
$val
$val
Определения
options.php:1793
$rs
$rs
Определения
action.php:82
$arFilter
$arFilter
Определения
user_search.php:106
bitrix
modules
main
classes
general
usertype.php
Создано системой
1.14.0