1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
user_options.php
См. документацию.
1<?php
8
10{
11 protected static $cache = array();
12
13 public static function GetList($arOrder = array("ID" => "ASC"), $arFilter = array())
14 {
15 global $DB;
16
17 $arSqlSearch = array();
18 foreach ($arFilter as $key => $val)
19 {
20 $key = strtoupper($key);
21 switch ($key)
22 {
23 case "ID":
24 $arSqlSearch[] = "UO.ID = ".intval($val);
25 break;
26
27 case "USER_ID":
28 $arSqlSearch[] = "UO.USER_ID = ".intval($val);
29 break;
30
31 case "USER_ID_EXT":
32 $arSqlSearch[] = "(UO.USER_ID = ".intval($val)." OR UO.COMMON='Y')";
33 break;
34
35 case "CATEGORY":
36 $arSqlSearch[] = "UO.CATEGORY = '".$DB->ForSql($val)."'";
37 break;
38
39 case "NAME":
40 $arSqlSearch[] = "UO.NAME = '".$DB->ForSql($val)."'";
41 break;
42
43 case "NAME_MASK":
44 $arSqlSearch[] = GetFilterQuery("UO.NAME", $val);
45 break;
46
47 case "COMMON":
48 $arSqlSearch[] = "UO.COMMON = '".$DB->ForSql($val)."'";
49 break;
50 }
51 }
52
53 $strSqlSearch = "";
54 foreach ($arSqlSearch as $condition)
55 if ($condition <> '')
56 $strSqlSearch.= " AND (".$condition.") ";
57
58 $strSql = "
59 SELECT UO.ID, UO.USER_ID, UO.CATEGORY, UO.NAME, UO.COMMON, UO.VALUE
60 FROM b_user_option UO
61 WHERE 1 = 1
62 ".$strSqlSearch."
63 ";
64
65 $arSqlOrder = array();
66 if (is_array($arOrder))
67 {
68 foreach ($arOrder as $by => $order)
69 {
70 $by = strtoupper($by);
71 $order = strtoupper($order);
72 if ($order != "ASC")
73 $order = "DESC";
74
75 if ($by == "ID")
76 $arSqlOrder[$by] = " UO.ID ".$order." ";
77 elseif ($by == "USER_ID")
78 $arSqlOrder[$by] = " UO.USER_ID ".$order." ";
79 elseif ($by == "CATEGORY")
80 $arSqlOrder[$by] = " UO.CATEGORY ".$order." ";
81 elseif ($by == "NAME")
82 $arSqlOrder[$by] = " UO.NAME ".$order." ";
83 elseif ($by == "COMMON")
84 $arSqlOrder[$by] = " UO.COMMON ".$order." ";
85 }
86 }
87
88 if (!empty($arSqlOrder))
89 $strSqlOrder = "ORDER BY ".implode(", ", $arSqlOrder);
90 else
91 $strSqlOrder = "";
92
93 $res = $DB->Query($strSql.$strSqlOrder);
94 return $res;
95 }
96
97 public static function GetOption($category, $name, $default_value = false, $user_id = false)
98 {
99 global $DB, $USER, $CACHE_MANAGER;
100
101 if ($user_id === false && $USER instanceof CUser)
102 {
103 $user_id = $USER->GetID();
104 }
105
106 $user_id = intval($user_id);
107 $category = strtolower($category);
108
109 if (!isset(self::$cache[$user_id][$category]))
110 {
111 $mcache_id = "user_option:{$user_id}:{$category}";
112
113 // options for user '0' are always from DB (there are much more options for user '0' than for specific one)
114 if ($user_id > 0 && $CACHE_MANAGER->read(3600, $mcache_id, "user_option"))
115 {
116 // options for specified user from managed cache
117 self::$cache[$user_id][$category] = $CACHE_MANAGER->get($mcache_id);
118 }
119 else
120 {
121 //read from DB
122 $sql = "
123 SELECT NAME, VALUE, COMMON
124 FROM b_user_option
125 WHERE (USER_ID = {$user_id} OR (USER_ID = 0 AND COMMON = 'Y'))
126 AND CATEGORY = '{$DB->ForSql($category)}'
127 ";
128
129 $res = $DB->Query($sql);
130 while ($option = $res->Fetch())
131 {
132 if (!isset(self::$cache[$user_id][$category][$option["NAME"]]) || $option["COMMON"] <> 'Y')
133 {
134 self::$cache[$user_id][$category][$option["NAME"]] = unserialize($option["VALUE"], ['allowed_classes' => false]);
135 }
136 }
137
138 if (!isset(self::$cache[$user_id][$category]))
139 {
140 self::$cache[$user_id][$category] = [];
141 }
142
143 if ($user_id > 0)
144 {
145 $CACHE_MANAGER->Set($mcache_id, self::$cache[$user_id][$category]);
146 }
147 }
148
149 if (!isset(self::$cache[$user_id][$category][$name]))
150 {
151 self::$cache[$user_id][$category][$name] = null;
152 }
153 }
154
155 if (!isset(self::$cache[$user_id][$category][$name]))
156 {
157 return $default_value;
158 }
159
160 return self::$cache[$user_id][$category][$name];
161 }
162
163 public static function SetOption($category, $name, $value, $bCommon = false, $user_id = false)
164 {
165 global $DB, $USER, $CACHE_MANAGER;
166
167 if($bCommon == true)
168 {
169 $user_id = 0;
170 }
171 elseif($user_id === false)
172 {
173 if(!is_object($USER))
174 {
175 return false;
176 }
177 $user_id = $USER->GetID();
178 }
179
180 $category = strtolower($category);
181
182 $user_id = intval($user_id);
184 "USER_ID" => $user_id,
185 "CATEGORY" => $category,
186 "NAME" => $name,
187 "VALUE" => serialize($value),
188 "COMMON" => ($bCommon ? "Y" : "N"),
189 );
190
191 $arUpdateFields = array(
192 "VALUE" => $arFields["VALUE"],
193 "COMMON" => $arFields["COMMON"],
194 );
195 $helper = \Bitrix\Main\Application::getConnection()->getSqlHelper();
196 $sql = $helper->prepareMerge("b_user_option", array("USER_ID", "CATEGORY", "NAME"), $arFields, $arUpdateFields);
197
198 if(!$DB->Query(current($sql)))
199 {
200 return false;
201 }
202
203 if($bCommon)
204 {
205 $CACHE_MANAGER->cleanDir("user_option");
206 self::$cache = array();
207 }
208 else
209 {
210 $CACHE_MANAGER->clean("user_option:".$user_id.":".$category, "user_option");
211 unset(self::$cache[$user_id][$category]);
212 }
213 return true;
214 }
215
216 public static function SetOptionsFromArray($aOptions)
217 {
218 global $USER;
219
220 foreach ($aOptions as $opt)
221 {
222 if ($opt["c"] <> "" && $opt["n"] <> "")
223 {
224 $val = $opt["v"];
225 if (is_array($opt["v"]))
226 {
227 $val = CUserOptions::GetOption($opt["c"], $opt["n"], array());
228 if(is_array($val))
229 {
230 foreach ($opt["v"] as $k => $v)
231 $val[$k] = $v;
232 }
233 else
234 {
235 $val = $opt["v"];
236 }
237 }
238 CUserOptions::SetOption($opt["c"], $opt["n"], $val);
239 if (isset($opt["d"]) && $opt["d"] === "Y" && $USER->CanDoOperation('edit_other_settings'))
240 {
241 CUserOptions::SetOption($opt["c"], $opt["n"], $val, true);
242 }
243 }
244 }
245 }
246
247 public static function DeleteOption($category, $name, $bCommon = false, $user_id = false)
248 {
249 global $DB, $USER, $CACHE_MANAGER;
250
251 if ($user_id === false && $USER instanceof CUser)
252 {
253 $user_id = $USER->GetID();
254 }
255
256 $user_id = intval($user_id);
257 $strSql = "
258 DELETE FROM b_user_option
259 WHERE ".($bCommon ? "USER_ID=0 AND COMMON='Y' " : "USER_ID=".$user_id)."
260 AND CATEGORY='".$DB->ForSql($category, 50)."'
261 AND NAME='".$DB->ForSql($name, 255)."'
262 ";
263 if ($DB->Query($strSql))
264 {
265 if($bCommon)
266 {
267 $CACHE_MANAGER->cleanDir("user_option");
268 self::$cache = array();
269 }
270 else
271 {
272 $CACHE_MANAGER->clean("user_option:".$user_id.":".$category, "user_option");
273 unset(self::$cache[$user_id][$category]);
274 }
275 return true;
276 }
277 return false;
278 }
279
280 public static function DeleteCommonOptions()
281 {
282 global $DB, $CACHE_MANAGER;
283
284 if ($DB->Query("DELETE FROM b_user_option WHERE COMMON='Y' AND NAME NOT LIKE '~%'"))
285 {
286 $CACHE_MANAGER->cleanDir("user_option");
287 self::$cache = array();
288 return true;
289 }
290 return false;
291 }
292
293 public static function DeleteUsersOptions($user_id=false)
294 {
295 global $DB, $CACHE_MANAGER;
296
297 if ($DB->Query("DELETE FROM b_user_option WHERE USER_ID<>0 AND NAME NOT LIKE '~%' ".($user_id <> false? " AND USER_ID=".intval($user_id):"")))
298 {
299 $CACHE_MANAGER->cleanDir("user_option");
300 self::$cache = array();
301 return true;
302 }
303 return false;
304 }
305
306 public static function DeleteOptionsByName($category, $name)
307 {
308 global $DB, $CACHE_MANAGER;
309
310 $strSql = "DELETE FROM b_user_option WHERE CATEGORY='".$DB->ForSql($category, 50)."' AND NAME='".$DB->ForSql($name, 255)."'";
311 if ($DB->Query($strSql))
312 {
313 $CACHE_MANAGER->cleanDir("user_option");
314 self::$cache = array();
315 return true;
316 }
317
318 return false;
319 }
320
321 public static function SetCookieOptions($cookieName)
322 {
323 //last user setting
324 $varCookie = array();
325 parse_str($_COOKIE[$cookieName], $varCookie);
326 setcookie($cookieName, false, false, "/");
327 if (is_array($varCookie["p"]) && $varCookie["sessid"] == bitrix_sessid())
328 {
329 $arOptions = $varCookie["p"];
331 }
332 }
333
334 //*****************************
335 // Events
336 //*****************************
337
338 //user deletion event
339 public static function OnUserDelete($user_id)
340 {
341 global $DB, $CACHE_MANAGER;
342
343 $user_id = intval($user_id);
344
345 if ($DB->Query("DELETE FROM b_user_option WHERE USER_ID=". $user_id))
346 {
347 $CACHE_MANAGER->cleanDir("user_option");
348 self::$cache = array();
349 return true;
350 }
351 return false;
352 }
353}
static getConnection($name="")
Определения application.php:638
Определения user_options.php:10
static GetList($arOrder=array("ID"=> "ASC"), $arFilter=array())
Определения user_options.php:13
static DeleteCommonOptions()
Определения user_options.php:280
static SetOptionsFromArray($aOptions)
Определения user_options.php:216
static SetCookieOptions($cookieName)
Определения user_options.php:321
static OnUserDelete($user_id)
Определения user_options.php:339
static GetOption($category, $name, $default_value=false, $user_id=false)
Определения user_options.php:97
static DeleteOptionsByName($category, $name)
Определения user_options.php:306
static DeleteUsersOptions($user_id=false)
Определения user_options.php:293
static $cache
Определения user_options.php:11
static DeleteOption($category, $name, $bCommon=false, $user_id=false)
Определения user_options.php:247
static SetOption($category, $name, $value, $bCommon=false, $user_id=false)
Определения user_options.php:163
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
$res
Определения filter_act.php:7
GetFilterQuery($field, $val, $procent="Y", $ex_sep=array(), $clob="N", $div_fields="Y", $clob_upper="N")
Определения filter_tools.php:383
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
$arOptions
Определения structure.php:223
bitrix_sessid()
Определения tools.php:4656
$name
Определения menu_edit.php:35
$order
Определения payment.php:8
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
$option
Определения options.php:1711
$val
Определения options.php:1793
$k
Определения template_pdf.php:567
$arFilter
Определения user_search.php:106