1C-Bitrix
25.700.0
Загрузка...
Поиск...
Не найдено
iblockpropertyenum.php
См. документацию.
1
<?php
2
3
class
CIBlockPropertyEnumResult
extends
CDBResult
4
{
5
function
Fetch
()
6
{
7
$a
= parent::Fetch();
8
if
(
$a
&& defined(
"BX_COMP_MANAGED_CACHE"
))
9
{
10
$GLOBALS
[
"CACHE_MANAGER"
]->RegisterTag(
"iblock_property_enum_"
.
$a
[
"PROPERTY_ID"
]);
11
}
12
return
$a
;
13
}
14
}
15
16
class
CIBlockPropertyEnum
17
{
18
public
static
function
GetList
($arOrder =
array
(
"SORT"
=>
"ASC"
,
"VALUE"
=>
"ASC"
),
$arFilter
=
array
())
19
{
20
global
$DB
;
21
22
$arSqlSearch =
array
();
23
foreach
(
$arFilter
as
$key
=>
$val
)
24
{
25
if
(
$key
[0] ==
"!"
)
26
{
27
$key
= mb_substr(
$key
, 1);
28
$bInvert =
true
;
29
}
30
else
31
{
32
$bInvert =
false
;
33
}
34
35
$key
= mb_strtoupper(
$key
);
36
switch
(
$key
)
37
{
38
case
"CODE"
:
39
$arSqlSearch[] = CIBlock::FilterCreate(
"P.CODE"
,
$val
,
"string"
, $bInvert);
40
break
;
41
case
"IBLOCK_ID"
:
42
$arSqlSearch[] = CIBlock::FilterCreate(
"P.IBLOCK_ID"
,
$val
,
"number"
, $bInvert);
43
break
;
44
case
"DEF"
:
45
$arSqlSearch[] = CIBlock::FilterCreate(
"BEN.DEF"
,
$val
,
"string_equal"
, $bInvert);
46
break
;
47
case
"EXTERNAL_ID"
:
48
$arSqlSearch[] = CIBlock::FilterCreate(
"BEN.XML_ID"
,
$val
,
"string_equal"
, $bInvert);
49
break
;
50
case
"VALUE"
:
51
case
"XML_ID"
:
52
case
"TMP_ID"
:
53
$arSqlSearch[] = CIBlock::FilterCreate(
"BEN."
.
$key
,
$val
,
"string"
, $bInvert);
54
break
;
55
case
"PROPERTY_ID"
:
56
if
(is_numeric(mb_substr(
$val
, 0, 1)))
57
$arSqlSearch[] = CIBlock::FilterCreate(
"P.ID"
,
$val
,
"number"
, $bInvert);
58
else
59
$arSqlSearch[] = CIBlock::FilterCreate(
"P.CODE"
,
$val
,
"string"
, $bInvert);
60
break
;
61
case
"PROPERTY_ACTIVE"
:
62
$arSqlSearch[] = CIBlock::FilterCreate(
"P.ACTIVE"
,
$val
,
"string_equal"
, $bInvert);
63
break
;
64
case
"ID"
:
65
case
"SORT"
:
66
$arSqlSearch[] = CIBlock::FilterCreate(
"BEN."
.
$key
,
$val
,
"number"
, $bInvert);
67
break
;
68
}
69
}
70
71
$strSqlSearch =
""
;
72
foreach
(array_filter($arSqlSearch) as $sqlCondition)
73
$strSqlSearch .=
" AND ("
.$sqlCondition.
") "
;
74
75
$arSqlOrder =
array
();
76
foreach
($arOrder as $by =>
$order
)
77
{
78
$order
= mb_strtolower(
$order
) !=
"asc"
?
"desc"
:
"asc"
;
79
$by = mb_strtoupper($by);
80
switch
($by)
81
{
82
case
"ID"
:
83
case
"PROPERTY_ID"
:
84
case
"VALUE"
:
85
case
"XML_ID"
:
86
case
"EXTERNAL_ID"
:
87
case
"DEF"
:
88
$arSqlOrder[$by] =
"BEN."
.$by.
" "
.
$order
;
89
break
;
90
case
"PROPERTY_SORT"
:
91
$arSqlOrder[$by] =
"P.SORT "
.$order;
92
break
;
93
case
"PROPERTY_CODE"
:
94
$arSqlOrder[$by] =
"P.CODE "
.$order;
95
break
;
96
default
:
97
$arSqlOrder[
"SORT"
] =
" BEN.SORT "
.$order;
98
break
;
99
}
100
}
101
102
if
(!empty($arSqlOrder))
103
$strSqlOrder =
"ORDER BY "
.implode(
", "
, $arSqlOrder);
104
else
105
$strSqlOrder =
""
;
106
107
$strSql =
"
108
SELECT
109
BEN.*,
110
BEN.XML_ID as EXTERNAL_ID,
111
P.NAME as PROPERTY_NAME,
112
P.CODE as PROPERTY_CODE,
113
P.SORT as PROPERTY_SORT
114
FROM
115
b_iblock_property_enum BEN,
116
b_iblock_property P
117
WHERE
118
BEN.PROPERTY_ID=P.ID
119
$strSqlSearch
120
$strSqlOrder
121
"
;
122
123
$rs
=
$DB
->Query($strSql);
124
return
new
CIBlockPropertyEnumResult
(
$rs
);
125
}
126
127
public
static
function
Add
(
$arFields
)
128
{
129
global
$DB
,
$CACHE_MANAGER
;
130
131
if
(
$arFields
[
"VALUE"
] ==
''
)
132
return
false
;
133
134
if
(CACHED_b_iblock_property_enum !==
false
)
135
$GLOBALS
[
"CACHE_MANAGER"
]->CleanDir(
"b_iblock_property_enum"
);
136
137
$allowedKeys = [
"PROPERTY_ID"
,
"VALUE"
,
"DEF"
,
"SORT"
,
"XML_ID"
,
"TMP_ID"
];
138
$arFields
= array_intersect_key(
$arFields
, array_flip($allowedKeys));
139
140
if
(
is_set
(
$arFields
,
"DEF"
) &&
$arFields
[
"DEF"
]!=
"Y"
)
141
$arFields
[
"DEF"
]=
"N"
;
142
143
if
(
is_set
(
$arFields
,
"EXTERNAL_ID"
))
144
$arFields
[
"XML_ID"
] =
$arFields
[
"EXTERNAL_ID"
];
145
146
if
(!
is_set
(
$arFields
,
"XML_ID"
))
147
$arFields
[
"XML_ID"
] = md5(uniqid(
""
,
true
));
148
149
$ID
=
$DB
->Add(
"b_iblock_property_enum"
,
$arFields
);
150
151
if
(defined(
"BX_COMP_MANAGED_CACHE"
))
152
$CACHE_MANAGER
->ClearByTag(
"iblock_property_enum_"
.
$arFields
[
"PROPERTY_ID"
]);
153
154
return
$ID
;
155
}
156
157
public
static
function
Update
(
$ID
,
$arFields
)
158
{
159
global
$DB
,
$CACHE_MANAGER
;
160
$ID
= intval(
$ID
);
161
162
if
(
is_set
(
$arFields
,
"VALUE"
) &&
$arFields
[
"VALUE"
] ==
''
)
163
return
false
;
164
165
if
(CACHED_b_iblock_property_enum !==
false
)
166
$CACHE_MANAGER
->CleanDir(
"b_iblock_property_enum"
);
167
168
if
(
is_set
(
$arFields
,
"EXTERNAL_ID"
))
169
$arFields
[
"XML_ID"
] =
$arFields
[
"EXTERNAL_ID"
];
170
171
if
(
is_set
(
$arFields
,
"DEF"
) &&
$arFields
[
"DEF"
]!=
"Y"
)
172
$arFields
[
"DEF"
]=
"N"
;
173
174
$strUpdate =
$DB
->PrepareUpdate(
"b_iblock_property_enum"
,
$arFields
);
175
if
($strUpdate <>
''
)
176
$DB
->Query(
"UPDATE b_iblock_property_enum SET "
.$strUpdate.
" WHERE ID="
.
$ID
);
177
178
if
(defined(
"BX_COMP_MANAGED_CACHE"
) && intval(
$arFields
[
"PROPERTY_ID"
]) > 0)
179
$CACHE_MANAGER
->ClearByTag(
"iblock_property_enum_"
.
$arFields
[
"PROPERTY_ID"
]);
180
181
return
true
;
182
}
183
184
public
static
function
DeleteByPropertyID
($PROPERTY_ID, $bIgnoreError=
false
)
185
{
186
global
$DB
,
$CACHE_MANAGER
;
187
188
if
(CACHED_b_iblock_property_enum !==
false
)
189
$CACHE_MANAGER
->CleanDir(
"b_iblock_property_enum"
);
190
191
if
(defined(
"BX_COMP_MANAGED_CACHE"
))
192
$CACHE_MANAGER
->ClearByTag(
"iblock_property_enum_"
.$PROPERTY_ID);
193
194
return
$DB
->Query(
"
195
DELETE FROM b_iblock_property_enum
196
WHERE PROPERTY_ID="
.intval($PROPERTY_ID).
"
197
"
, $bIgnoreError
198
);
199
}
200
201
public
static
function
Delete
(
$ID
)
202
{
203
global
$DB
,
$CACHE_MANAGER
;
204
205
if
(CACHED_b_iblock_property_enum !==
false
)
206
$CACHE_MANAGER
->CleanDir(
"b_iblock_property_enum"
);
207
208
$DB
->Query(
"
209
DELETE FROM b_iblock_property_enum
210
WHERE ID="
.intval(
$ID
).
"
211
"
212
);
213
214
return
true
;
215
}
216
217
public
static
function
GetByID
(
$ID
)
218
{
219
global
$DB
,
$CACHE_MANAGER
;
220
static
$BX_IBLOCK_ENUM_CACHE = [];
221
static
$bucket_size =
null
;
222
223
if
($bucket_size ===
null
)
224
{
225
$bucket_size = (int)CACHED_b_iblock_property_enum_bucket_size;
226
if
($bucket_size <= 0)
227
{
228
$bucket_size = 10;
229
}
230
}
231
232
$ID
= (int)
$ID
;
233
if
(
$ID
<= 0)
234
{
235
return
false
;
236
}
237
$bucket = (int)(
$ID
/$bucket_size);
238
239
if
(
240
!isset($BX_IBLOCK_ENUM_CACHE[$bucket])
241
|| !isset($BX_IBLOCK_ENUM_CACHE[$bucket][
$ID
])
242
)
243
{
244
$BX_IBLOCK_ENUM_CACHE[$bucket] ??= [];
245
if
(CACHED_b_iblock_property_enum ===
false
)
246
{
247
$rs
=
$DB
->Query(
"SELECT * from b_iblock_property_enum WHERE ID="
.
$ID
);
248
$BX_IBLOCK_ENUM_CACHE[$bucket][
$ID
] =
$rs
->Fetch();
249
unset(
$rs
);
250
}
251
elseif
(empty($BX_IBLOCK_ENUM_CACHE[$bucket]))
252
{
253
$cache_id =
'b_iblock_property_enum'
. $bucket;
254
if
(
$CACHE_MANAGER
->Read(CACHED_b_iblock_property_enum, $cache_id,
"b_iblock_property_enum"
))
255
{
256
$arEnums =
$CACHE_MANAGER
->Get($cache_id);
257
}
258
else
259
{
260
$arEnums = [];
261
$rs
=
$DB
->Query(
"
262
SELECT *
263
FROM b_iblock_property_enum
264
WHERE ID between "
.($bucket*$bucket_size).
" AND "
.(($bucket+1)*$bucket_size-1)
265
);
266
while
(
$ar
=
$rs
->Fetch())
267
{
268
$arEnums[
$ar
[
"ID"
]] =
$ar
;
269
}
270
unset(
$rs
);
271
$CACHE_MANAGER
->Set($cache_id, $arEnums);
272
}
273
$BX_IBLOCK_ENUM_CACHE[$bucket] = $arEnums;
274
}
275
}
276
277
return
$BX_IBLOCK_ENUM_CACHE[$bucket][
$ID
] ??
false
;
278
}
279
}
CIBlockPropertyEnum
Определения
iblockpropertyenum.php:17
CIBlockPropertyEnum\Delete
static Delete($ID)
Определения
iblockpropertyenum.php:201
CIBlockPropertyEnum\Add
static Add($arFields)
Определения
iblockpropertyenum.php:127
CIBlockPropertyEnum\GetByID
static GetByID($ID)
Определения
iblockpropertyenum.php:217
CIBlockPropertyEnum\GetList
static GetList($arOrder=array("SORT"=>"ASC", "VALUE"=>"ASC"), $arFilter=array())
Определения
iblockpropertyenum.php:18
CIBlockPropertyEnum\DeleteByPropertyID
static DeleteByPropertyID($PROPERTY_ID, $bIgnoreError=false)
Определения
iblockpropertyenum.php:184
CIBlockPropertyEnum\Update
static Update($ID, $arFields)
Определения
iblockpropertyenum.php:157
CIBlockPropertyEnumResult
Определения
iblockpropertyenum.php:4
CIBlockPropertyEnumResult\Fetch
Fetch()
Определения
iblockpropertyenum.php:5
$CACHE_MANAGER
global $CACHE_MANAGER
Определения
clear_component_cache.php:7
$arFields
$arFields
Определения
dblapprove.php:5
array
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения
file_new.php:804
$ID
if($ajaxMode) $ID
Определения
get_user.php:27
$DB
global $DB
Определения
cron_frame.php:29
is_set
is_set($a, $k=false)
Определения
tools.php:2133
$order
$order
Определения
payment.php:8
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
$a
else $a
Определения
template.php:137
$val
$val
Определения
options.php:1793
$rs
$rs
Определения
action.php:82
$GLOBALS
$GLOBALS['_____370096793']
Определения
update_client.php:1
$arFilter
$arFilter
Определения
user_search.php:106
bitrix
modules
iblock
classes
general
iblockpropertyenum.php
Создано системой
1.14.0