1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
userfieldenum.php
См. документацию.
1<?php
2
4
6{
7 function SetEnumValues($FIELD_ID, $values)
8 {
10 $aMsg = array();
11 $originalValues = $values;
12
13 foreach($values as $i => $row)
14 {
15 foreach($row as $key => $val)
16 {
17 if(strncmp($key, "~", 1) === 0)
18 {
19 unset($values[$i][$key]);
20 }
21 }
22 }
23
24 /*check unique XML_ID*/
25 $arAdded = array();
26 $salt = RandString(8);
27 foreach($values as $key => $value)
28 {
29 if(strncmp($key, "n", 1) === 0 && (!isset($value["DEL"]) || $value["DEL"] != "Y") && (string)$value["VALUE"] <> '')
30 {
31 if(!isset($value["XML_ID"]) || $value["XML_ID"] == '')
32 {
33 $values[$key]["XML_ID"] = $value["XML_ID"] = md5($salt . $value["VALUE"]);
34 }
35
36 if(array_key_exists($value["XML_ID"], $arAdded))
37 {
38 $aMsg[] = array("text" => GetMessage("USER_TYPE_XML_ID_UNIQ", array("#XML_ID#" => $value["XML_ID"])));
39 }
40 else
41 {
42 $rsEnum = $this->GetList(array(), array("USER_FIELD_ID" => $FIELD_ID, "XML_ID" => $value["XML_ID"]));
43 if($arEnum = $rsEnum->Fetch())
44 {
45 $aMsg[] = array("text" => GetMessage("USER_TYPE_XML_ID_UNIQ", array("#XML_ID#" => $value["XML_ID"])));
46 }
47 else
48 {
49 if (!isset($arAdded[$value["XML_ID"]]))
50 {
51 $arAdded[$value["XML_ID"]] = 0;
52 }
53
54 $arAdded[$value["XML_ID"]]++;
55 }
56 }
57 }
58 }
59
60 $previousValues = array();
61
62 $rsEnum = $this->GetList(array(), array("USER_FIELD_ID" => $FIELD_ID));
63 while($arEnum = $rsEnum->Fetch())
64 {
65 $previousValues[$arEnum["ID"]] = $arEnum;
66
67 if(array_key_exists($arEnum["ID"], $values))
68 {
69 $value = $values[$arEnum["ID"]];
70 if ((string)($value['VALUE'] ?? '') === '' || (($value['DEL'] ?? 'N') === 'Y'))
71 {
72 }
73 elseif(
74 $arEnum["VALUE"] != $value["VALUE"] ||
75 $arEnum["DEF"] != $value["DEF"] ||
76 $arEnum["SORT"] != $value["SORT"] ||
77 $arEnum["XML_ID"] != $value["XML_ID"]
78 )
79 {
80 if(!isset($value["XML_ID"]) || $value["XML_ID"] == '')
81 $value["XML_ID"] = md5($value["VALUE"]);
82
83 $bUnique = true;
84 if($arEnum["XML_ID"] != $value["XML_ID"])
85 {
86 if(array_key_exists($value["XML_ID"], $arAdded))
87 {
88 $aMsg[] = array("text" => GetMessage("USER_TYPE_XML_ID_UNIQ", array("#XML_ID#" => $value["XML_ID"])));
89 $bUnique = false;
90 }
91 else
92 {
93 $rsEnumXmlId = $this->GetList(array(), array("USER_FIELD_ID" => $FIELD_ID, "XML_ID" => $value["XML_ID"]));
94 if($arEnumXmlId = $rsEnumXmlId->Fetch())
95 {
96 $aMsg[] = array("text" => GetMessage("USER_TYPE_XML_ID_UNIQ", array("#XML_ID#" => $value["XML_ID"])));
97 $bUnique = false;
98 }
99 }
100 }
101
102 if ($bUnique)
103 {
104 $xmlId = $value['XML_ID'];
105 if (!isset($arAdded[$xmlId]))
106 {
107 $arAdded[$xmlId] = 0;
108 }
109
110 $arAdded[$xmlId]++;
111 }
112 }
113 }
114 }
115
116 if(!empty($aMsg))
117 {
118 $e = new CAdminException($aMsg);
119 $APPLICATION->ThrowException($e);
120 return false;
121 }
122
123 if(CACHED_b_user_field_enum !== false)
124 $CACHE_MANAGER->CleanDir("b_user_field_enum");
125
126 foreach($values as $key => $value)
127 {
128 if(strncmp($key, "n", 1) === 0 && (!isset($value["DEL"]) || $value["DEL"] != "Y") && (string)$value["VALUE"] <> '')
129 {
130 if(!isset($value["XML_ID"]) || $value["XML_ID"] == '')
131 $value["XML_ID"] = md5($value["VALUE"]);
132
133 if (!isset($value["DEF"]) || $value['DEF'] !== 'Y')
134 {
135 $value['DEF'] = 'N';
136 }
137
138 $value["USER_FIELD_ID"] = $FIELD_ID;
139 $id = $DB->Add("b_user_field_enum", $value);
140
141 $originalValues[$id] = $originalValues[$key];
142 unset($originalValues[$key], $values[$key]);
143 }
144 }
145 $rsEnum = $this->GetList(array(), array("USER_FIELD_ID" => $FIELD_ID));
146 while($arEnum = $rsEnum->Fetch())
147 {
148 if(array_key_exists($arEnum["ID"], $values))
149 {
150 $value = $values[$arEnum["ID"]];
151 if ((string)($value['VALUE'] ?? '') === '' || (($value['DEL'] ?? 'N') === 'Y'))
152 {
153 $DB->Query("DELETE FROM b_user_field_enum WHERE ID = " . $arEnum["ID"]);
154 }
155 elseif($arEnum["VALUE"] != $value["VALUE"] ||
156 $arEnum["DEF"] != $value["DEF"] ||
157 $arEnum["SORT"] != $value["SORT"] ||
158 $arEnum["XML_ID"] != $value["XML_ID"])
159 {
160 if(!isset($value["XML_ID"]) || $value["XML_ID"] == '')
161 $value["XML_ID"] = md5($value["VALUE"]);
162
163 unset($value["ID"]);
164 $strUpdate = $DB->PrepareUpdate("b_user_field_enum", $value);
165 if($strUpdate <> '')
166 $DB->Query("UPDATE b_user_field_enum SET " . $strUpdate . " WHERE ID = " . $arEnum["ID"]);
167 }
168 }
169 }
170 if(CACHED_b_user_field_enum !== false)
171 $CACHE_MANAGER->CleanDir("b_user_field_enum");
172
173 $event = new \Bitrix\Main\Event('main', 'onAfterSetEnumValues', [$FIELD_ID, $originalValues, $previousValues]);
174 $event->send();
175
176 return true;
177 }
178
179 public static function GetList($aSort = array(), $aFilter = array())
180 {
181 global $DB, $CACHE_MANAGER;
182
183 if(CACHED_b_user_field_enum !== false)
184 {
185 $cacheId = "b_user_field_enum" . md5(serialize($aSort) . "." . serialize($aFilter));
186 if($CACHE_MANAGER->Read(CACHED_b_user_field_enum, $cacheId, "b_user_field_enum"))
187 {
188 $arResult = $CACHE_MANAGER->Get($cacheId);
189 $res = new CDBResult;
190 $res->InitFromArray($arResult);
191 return $res;
192 }
193 }
194 else
195 {
196 $cacheId = '';
197 }
198
199 $bJoinUFTable = false;
200 $arFilter = array();
201 foreach($aFilter as $key => $val)
202 {
203 if(is_array($val))
204 {
205 if(empty($val))
206 continue;
207 $val = array_map(array($DB, "ForSQL"), $val);
208 $val = "('" . implode("', '", $val) . "')";
209 }
210 else
211 {
212 if((string)$val == '')
213 continue;
214 $val = "('" . $DB->ForSql($val) . "')";
215 }
216
217 $key = mb_strtoupper($key);
218 switch($key)
219 {
220 case "ID":
221 case "USER_FIELD_ID":
222 case "VALUE":
223 case "DEF":
224 case "SORT":
225 case "XML_ID":
226 $arFilter[] = "UFE." . $key . " in " . $val;
227 break;
228 case "USER_FIELD_NAME":
229 $bJoinUFTable = true;
230 $arFilter[] = "UF.FIELD_NAME in " . $val;
231 break;
232 }
233 }
234
235 $arOrder = array();
236 foreach($aSort as $key => $val)
237 {
238 $key = mb_strtoupper($key);
239 $ord = (mb_strtoupper($val) <> "ASC" ? "DESC" : "ASC");
240 switch($key)
241 {
242 case "ID":
243 case "USER_FIELD_ID":
244 case "VALUE":
245 case "DEF":
246 case "SORT":
247 case "XML_ID":
248 $arOrder[] = "UFE." . $key . " " . $ord;
249 break;
250 }
251 }
252 if(empty($arOrder))
253 {
254 $arOrder[] = "UFE.SORT asc";
255 $arOrder[] = "UFE.ID asc";
256 }
257 DelDuplicateSort($arOrder);
258 $sOrder = "\nORDER BY " . implode(", ", $arOrder);
259
260 if(empty($arFilter))
261 $sFilter = "";
262 else
263 $sFilter = "\nWHERE " . implode("\nAND ", $arFilter);
264
265 $strSql = "
266 SELECT
267 UFE.ID
268 ,UFE.USER_FIELD_ID
269 ,UFE.VALUE
270 ,UFE.DEF
271 ,UFE.SORT
272 ,UFE.XML_ID
273 FROM
274 b_user_field_enum UFE
275 " . ($bJoinUFTable ? "INNER JOIN b_user_field UF ON UF.ID = UFE.USER_FIELD_ID" : "") . "
276 " . $sFilter . $sOrder;
277
278 if($cacheId == '')
279 {
280 $res = $DB->Query($strSql);
281 }
282 else
283 {
284 $arResult = array();
285 $res = $DB->Query($strSql);
286 while($ar = $res->Fetch())
287 $arResult[] = $ar;
288
289 $CACHE_MANAGER->Set($cacheId, $arResult);
290
291 $res = new CDBResult;
292 $res->InitFromArray($arResult);
293 }
294
295 return $res;
296 }
297
298 function DeleteFieldEnum($FIELD_ID)
299 {
300 global $DB, $CACHE_MANAGER;
301 $DB->Query("DELETE FROM b_user_field_enum WHERE USER_FIELD_ID = " . intval($FIELD_ID));
302 if(CACHED_b_user_field_enum !== false) $CACHE_MANAGER->CleanDir("b_user_field_enum");
303 }
304}
global $APPLICATION
Определения include.php:80
$arResult
Определения generate_coupon.php:16
Определения userfieldenum.php:6
static GetList($aSort=array(), $aFilter=array())
Определения userfieldenum.php:179
DeleteFieldEnum($FIELD_ID)
Определения userfieldenum.php:298
SetEnumValues($FIELD_ID, $values)
Определения userfieldenum.php:7
global $CACHE_MANAGER
Определения clear_component_cache.php:7
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
global $DB
Определения cron_frame.php:29
DelDuplicateSort(&$arSort)
Определения tools.php:2055
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$event
Определения prolog_after.php:141
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$ar
Определения options.php:199
if(empty($signedUserToken)) $key
Определения quickway.php:257
$i
Определения factura.php:643
$val
Определения options.php:1793
$arFilter
Определения user_search.php:106