1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
blog_post_param.php
См. документацию.
1<?php
8
10{
11 protected static $__USER_OPTIONS_CACHE;
12
13 public static function GetList($arOrder = array("ID" => "ASC"), $arFilter = array(), $arAddParams = array())
14 {
15 global $DB;
16
17 $ownerId = (int) ($arOrder["OWNER_ID"] ?? 0);
18
20 "ID" => array("FIELD" => "BPP.ID", "TYPE" => "int"),
21 "POST_ID" => array("FIELD" => "BPP.POST_ID", "TYPE" => "int"),
22 "USER_ID" => array("FIELD" => "BPP.USER_ID", "TYPE" => "int"),
23 "NAME" => array("FIELD" => "BPP.NAME", "TYPE" => "string"),
24 "VALUE" => array("FIELD" => "BPP.VALUE", "TYPE" => "string"),
25 "RANK" => ($ownerId > 0 ? array(
26 "FIELD" => "RV0.USER_RANK",
27 "TYPE" => "int",
28 "FROM" =>
29 "\n\tLEFT JOIN (\n\t\t".
30 "SELECT MAX(RV2.VOTE_WEIGHT) as VOTE_WEIGHT, RV2.ENTITY_ID \n\t\t".
31 "FROM b_rating_user RV2 \n\t\t".
32 (isset($arFilter["POST_ID"]) && !is_array($arFilter["POST_ID"]) && intval($arFilter["POST_ID"]) > 0 ? " WHERE RV2.ENTITY_ID IN (SELECT BPP.USER_ID as USER_ID FROM b_blog_post_param BPP WHERE BPP.POST_ID = ".intval($arFilter["POST_ID"]).")\n\t\t" : "").
33 "GROUP BY RV2.ENTITY_ID) RV ON (RV.ENTITY_ID = BPP.USER_ID)\n\t".
34 "LEFT JOIN (\n\t\t".
35 "SELECT RV1.OWNER_ID, SUM(case when RV1.ID is not null then 1 else 0 end) as USER_RANK \n\t\t".
36 "FROM b_rating_vote RV1 \n\t\t".
37 "WHERE RV1.USER_ID = ".$ownerId.(isset($arFilter["POST_ID"]) && !is_array($arFilter["POST_ID"]) && intval($arFilter["POST_ID"]) > 0 ? " AND RV1.OWNER_ID IN (SELECT BPP.USER_ID as USER_ID FROM b_blog_post_param BPP WHERE BPP.POST_ID = ".intval($arFilter["POST_ID"]).")" : "")."\n\t\t".
38 "GROUP BY RV1.OWNER_ID) RV0 ON (RV0.OWNER_ID = BPP.USER_ID)"
39 ) : array (
40 "FIELD" => "RV.USER_RANK",
41 "TYPE" => "string",
42 "FROM" =>
43 "\n\tLEFT JOIN (".
44 "\n\t\tSELECT MAX(RV2.VOTE_WEIGHT) as VOTE_WEIGHT, RV2.ENTITY_ID, 0 as USER_RANK ".
45 "\n\t\tFROM b_rating_user RV2".
46 "\n\t\tGROUP BY RV2.ENTITY_ID) RV ON (RV.ENTITY_ID = BPP.USER_ID)")),
47 "USER_ACTIVE" => array("FIELD" => "U.ACTIVE", "TYPE" => "string", "FROM" => "\n\tINNER JOIN b_user U ON (BPP.USER_ID = U.ID)"),
48 "USER_NAME" => array("FIELD" => "U.NAME", "TYPE" => "string", "FROM" => "\n\tINNER JOIN b_user U ON (BPP.USER_ID = U.ID)"),
49 "USER_LAST_NAME" => array("FIELD" => "U.LAST_NAME", "TYPE" => "string", "FROM" => "\n\tINNER JOIN b_user U ON (BPP.USER_ID = U.ID)"),
50 "USER_SECOND_NAME" => array("FIELD" => "U.SECOND_NAME", "TYPE" => "string", "FROM" => "\n\tINNER JOIN b_user U ON (BPP.USER_ID = U.ID)"),
51 "USER_LOGIN" => array("FIELD" => "U.LOGIN", "TYPE" => "string", "FROM" => "\n\tINNER JOIN b_user U ON (BPP.USER_ID = U.ID)"),
52 "USER_PERSONAL_PHOTO" => array("FIELD" => "U.PERSONAL_PHOTO", "TYPE" => "string", "FROM" => "\n\tINNER JOIN b_user U ON (BPP.USER_ID = U.ID)")
53 );
54 $arSelect = array_diff(array_keys($arFields), array("RANK"));
55 $arSelect = (
56 (
57 isset($arAddParams["SELECT"])
58 && is_array($arAddParams["SELECT"])
59 && !empty($arAddParams["SELECT"])
60 )
61 ? array_intersect($arAddParams["SELECT"], $arSelect)
62 : $arSelect
63 );
64
65 $arSql = CBlog::PrepareSql($arFields, array(), $arFilter, false, $arSelect);
66
67 $arSql["SELECT"] = (str_replace("%%_DISTINCT_%%", "", $arSql["SELECT"]));
68
69 $iCnt = 0;
70 if (
71 ($arAddParams["bCount"] ?? null)
72 || array_key_exists("bDescPageNumbering", $arAddParams)
73 )
74 {
75 $strSql = "SELECT COUNT(BPP.ID) AS CNT \n".
76 "FROM b_blog_post_param BPP ".$arSql["FROM"]."\n".
77 (empty($arSql["GROUPBY"]) ? "" : "GROUP BY ".$arSql["GROUPBY"]."\n").
78 "WHERE ".(empty($arSql["WHERE"]) ? "1 = 1" : $arSql["WHERE"]);
79 $db_res = $DB->Query($strSql);
80 if ($arAddParams["bCount"] ?? null)
81 return $db_res;
82 $iCnt = ($db_res && ($res = $db_res->Fetch()) ? intval($res["CNT"]) : 0);
83 }
84
85 // ORDER BY -->
86 $arSqlOrder = Array();
87 foreach ($arOrder as $by => $order)
88 {
89 $by = mb_strtoupper($by);
90 $order = (mb_strtoupper($order) != "ASC" ? "DESC" : "ASK");
91 if (array_key_exists($by, $arFields) && !array_key_exists($by, $arSqlOrder))
92 {
93 if($DB->type == "ORACLE")
94 $order .= ($order == "ASC" ? " NULLS FIRST" : " NULLS LAST");
95
96 if (isset($arFields[$by]["FROM"]) && !empty($arFields[$by]["FROM"]) && mb_strpos($arSql["FROM"], $arFields[$by]["FROM"]) === false)
97 $arSql["FROM"] .= " ".$arFields[$by]["FROM"];
98 if ($by == "RANK")
99 {
100 $arSql["SELECT"] .= ", ".$arFields["RANK"]["FIELD"];
101 $arSqlOrder[$by] = (IsModuleInstalled("intranet") ? "RV.VOTE_WEIGHT ".$order.", USER_RANK ".$order :
102 "USER_RANK ".$order.", RV.VOTE_WEIGHT ".$order);
103 }
104 else
105 $arSqlOrder[$by] = (array_key_exists("ORDER", $arFields[$by])? $arFields[$by]["ORDER"]: $arFields[$by]["FIELD"])." ".$order;
106 }
107 }
108 DelDuplicateSort($arSqlOrder);
109 $arSql["ORDERBY"] = implode(", ", $arSqlOrder);
110 // <-- ORDER BY
111
112 $strSql =
113 "SELECT ".$arSql["SELECT"]."\n".
114 "FROM b_blog_post_param BPP".$arSql["FROM"]."\n".
115 "WHERE ".(empty($arSql["WHERE"]) ? "1 = 1" : $arSql["WHERE"]).
116 (empty($arSql["ORDERBY"]) ? "" : "\nORDER BY ".$arSql["ORDERBY"]);
117
118 if (is_set($arAddParams, "bDescPageNumbering")) {
119 $db_res = new CDBResult();
120 $db_res->NavQuery($strSql, $iCnt, $arAddParams);
121 } else {
122 $db_res = $DB->Query($strSql);
123 }
124
125 return $db_res;
126 }
127
128 public static function GetOption($post_id, $name, $default_value = false, $user_id = false)
129 {
130 global $DB, $USER, $CACHE_MANAGER;
131
132 $post_id = intval($post_id);
133 if ($user_id === false)
134 $user_id = $USER->GetID();
135 $user_id = intval($user_id);
136 $cache_key = $post_id.":".$name;
137
138 if (!isset(self::$__USER_OPTIONS_CACHE[$user_id]))
139 {
140 $mcache_id = "user_option:$user_id";
141 if ($CACHE_MANAGER->read(3600, $mcache_id, "blog_post_param") && false)
142 {
143 self::$__USER_OPTIONS_CACHE[$user_id] = $CACHE_MANAGER->get($mcache_id);
144 }
145 else
146 {
147 $strSql = "
148 SELECT POST_ID, USER_ID, NAME, VALUE
149 FROM b_blog_post_param
150 WHERE (USER_ID=".$user_id." OR USER_ID IS NULL)";
151 $db_res = $DB->Query($strSql);
152
153 while ($res = $db_res->Fetch())
154 {
155 $row_cache_key = $res["POST_ID"].":".$res["NAME"];
156 $res["USER_ID"] = intval($res["USER_ID"]);
157
158 if (!isset(self::$__USER_OPTIONS_CACHE[$res["USER_ID"]][$row_cache_key]))
159 self::$__USER_OPTIONS_CACHE[$res["USER_ID"]][$row_cache_key] = $res["VALUE"];
160 }
161 $CACHE_MANAGER->Set($mcache_id, (self::$__USER_OPTIONS_CACHE[$user_id] ?? null));
162 }
163 }
164 if (!isset(self::$__USER_OPTIONS_CACHE[$user_id][$cache_key]))
165 return $default_value;
166 return self::$__USER_OPTIONS_CACHE[$user_id][$cache_key];
167 }
168
169 public static function SetOption($post_id, $name, $value, $user_id = false)
170 {
171 global $DB, $USER;
172
173 $post_id = intval($post_id);
174 if ($user_id === false)
175 $user_id = $USER->GetID();
176
177 $user_id = intval($user_id);
179 "POST_ID" => ($post_id > 0 ? $post_id : false),
180 "USER_ID" => ($user_id > 0 ? $user_id : false),
181 "NAME" => $name,
182 "VALUE" => $value
183 );
184 $res = $DB->Query(
185 "SELECT ID FROM b_blog_post_param
186 WHERE
187 ".($post_id <= 0 ? "POST_ID IS NULL" : "POST_ID=".$post_id)." AND
188 ".($user_id <= 0 ? "USER_ID IS NULL" : "USER_ID=".$user_id)." AND
189 NAME='".$DB->ForSql($name, 50)."'");
190 if ($res_array = $res->Fetch())
191 {
192 $strUpdate = $DB->PrepareUpdate("b_blog_post_param", $arFields);
193 if ($strUpdate != "")
194 {
195 $strSql = "UPDATE b_blog_post_param SET ".$strUpdate." WHERE ID=".$res_array["ID"];
196 if (!$DB->QueryBind($strSql, array() ))
197 return false;
198 }
199 }
200 else
201 {
202 if (!$DB->Add("b_blog_post_param", $arFields, array()))
203 return false;
204 }
205
206 self::_clear_cache($user_id);
207 return true;
208 }
209
210 public static function DeleteOption($post_id, $name, $user_id = false)
211 {
212 global $DB, $USER;
213 $post_id = intval($post_id);
214 if ($user_id === false)
215 $user_id = $USER->GetID();
216 $user_id = intval($user_id);
217
218 $strSql = "
219 DELETE FROM b_blog_post_param
220 WHERE
221 ".($post_id <= 0 ? "POST_ID IS NULL " : "POST_ID=".$post_id)."
222 AND ".($user_id <= 0 ? "USER_ID IS NULL " : "USER_ID=".$user_id)."
223 AND NAME='".$DB->ForSql($name, 50)."'
224 ";
225 if ($DB->Query($strSql))
226 {
227 self::_clear_cache($user_id);
228 return true;
229 }
230 return false;
231 }
232
233 public static function DeleteUsersOptions($user_id=false)
234 {
235 global $DB;
236 $user_id = intval($user_id);
237 if ($DB->Query("DELETE FROM b_blog_post_param WHERE ".($user_id <= 0 ? "USER_ID IS NULL" : "USER_ID=".$user_id)))
238 {
239 self::_clear_cache($user_id);
240 return true;
241 }
242 return false;
243 }
244
245 //*****************************
246 // Events
247 //*****************************
248
249 //user deletion event
250 public static function OnUserDelete($user_id)
251 {
252 global $DB;
253 $user_id = intval($user_id);
254
255 if ($DB->Query("DELETE FROM b_user_option WHERE USER_ID=". $user_id))
256 {
257 self::_clear_cache($user_id);
258 return true;
259 }
260 return false;
261 }
262
263 protected static function _clear_cache($user_id = 0)
264 {
265 global $CACHE_MANAGER;
266
267 self::$__USER_OPTIONS_CACHE = array();
268
269 if ($user_id > 0)
270 $CACHE_MANAGER->cleanDir("blog_post_param");
271 else
272 $CACHE_MANAGER->clean("user_option:$user_id", "blog_post_param");
273 }
274}
275?>
$db_res
Определения options_user_settings.php:8
static PrepareSql(&$arFields, $arOrder, &$arFilter, $arGroupBy, $arSelectFields, $obUserFieldsSql=false)
Определения blog.php:487
static _clear_cache($user_id=0)
Определения blog_post_param.php:263
static OnUserDelete($user_id)
Определения blog_post_param.php:250
static DeleteOption($post_id, $name, $user_id=false)
Определения blog_post_param.php:210
static DeleteUsersOptions($user_id=false)
Определения blog_post_param.php:233
static GetOption($post_id, $name, $default_value=false, $user_id=false)
Определения blog_post_param.php:128
static $__USER_OPTIONS_CACHE
Определения blog_post_param.php:11
static SetOption($post_id, $name, $value, $user_id=false)
Определения blog_post_param.php:169
static GetList($arOrder=array("ID"=> "ASC"), $arFilter=array(), $arAddParams=array())
Определения blog_post_param.php:13
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
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
IsModuleInstalled($module_id)
Определения tools.php:5301
DelDuplicateSort(&$arSort)
Определения tools.php:2055
is_set($a, $k=false)
Определения tools.php:2133
$name
Определения menu_edit.php:35
$order
Определения payment.php:8
$arFilter
Определения user_search.php:106