1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
iblockpropertyenum.php
См. документацию.
1<?php
2
3class 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
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}
static Delete($ID)
Определения iblockpropertyenum.php:201
static Add($arFields)
Определения iblockpropertyenum.php:127
static GetByID($ID)
Определения iblockpropertyenum.php:217
static GetList($arOrder=array("SORT"=>"ASC", "VALUE"=>"ASC"), $arFilter=array())
Определения iblockpropertyenum.php:18
static DeleteByPropertyID($PROPERTY_ID, $bIgnoreError=false)
Определения iblockpropertyenum.php:184
static Update($ID, $arFields)
Определения iblockpropertyenum.php:157
global $CACHE_MANAGER
Определения clear_component_cache.php:7
$arFields
Определения dblapprove.php:5
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
if($ajaxMode) $ID
Определения get_user.php:27
global $DB
Определения cron_frame.php:29
is_set($a, $k=false)
Определения tools.php:2133
$order
Определения payment.php:8
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$ar
Определения options.php:199
if(empty($signedUserToken)) $key
Определения quickway.php:257
else $a
Определения template.php:137
$val
Определения options.php:1793
$rs
Определения action.php:82
$GLOBALS['_____370096793']
Определения update_client.php:1
$arFilter
Определения user_search.php:106