1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
user_relations.php
См. документацию.
1<?php
2
3require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/socialnetwork/classes/general/user_relations.php");
4
6{
7 /***************************************/
8 /******** DATA MODIFICATION **********/
9 /***************************************/
10 public static function Add($arFields)
11 {
12 global $DB;
13
15
17 {
18 return false;
19 }
20
21 $db_events = GetModuleEvents("socialnetwork", "OnBeforeSocNetUserRelationsAdd");
22 while ($arEvent = $db_events->Fetch())
23 {
24 if (ExecuteModuleEventEx($arEvent, array(&$arFields)) === false)
25 {
26 return false;
27 }
28 }
29
30 $arInsert = $DB->PrepareInsert("b_sonet_user_relations", $arFields);
31 $strUpdate = $DB->PrepareUpdate("b_sonet_user_relations", $arFields);
32
35
36 $ID = false;
37 if ($arInsert[0] <> '')
38 {
39 $strSql =
40 "INSERT INTO b_sonet_user_relations(".$arInsert[0].") ".
41 "VALUES(".$arInsert[1].")
42 ON DUPLICATE KEY UPDATE ".$strUpdate;
43
44 $DB->Query($strSql);
45
46 $ID = $DB->LastID();
47
48 $events = GetModuleEvents("socialnetwork", "OnSocNetUserRelationsAdd");
49 while ($arEvent = $events->Fetch())
51
52 if (
53 (
54 !array_key_exists("SEND_MAIL", $arFields)
55 || $arFields["SEND_MAIL"] != "N"
56 )
57 && !IsModuleInstalled("im")
58 )
59 {
60 $mailType = "INVITE_FRIEND";
61 if ($arFields["RELATION"] == SONET_RELATIONS_BAN)
62 $mailType = "BAN_FRIEND";
63
65 }
66
69 }
70
71 return $ID;
72 }
73
74 public static function Update($ID, $arFields)
75 {
76 global $DB;
78 $helper = $connection->getSqlHelper();
79
80 if (!CSocNetGroup::__ValidateID($ID))
81 {
82 return false;
83 }
84
85 $ID = intval($ID);
86
88
90 return false;
91
92 $db_events = GetModuleEvents("socialnetwork", "OnBeforeSocNetUserRelationsUpdate");
93 while ($arEvent = $db_events->Fetch())
94 {
95 if (ExecuteModuleEventEx($arEvent, array($ID, $arFields)) === false)
96 {
97 return false;
98 }
99 }
100
101 $arUserRelationOld = CSocNetUserRelations::GetByID($ID);
102
103 $strUpdate = $DB->PrepareUpdate("b_sonet_user_relations", $arFields);
105
106 if ($strUpdate <> '')
107 {
108 $strSql =
109 "UPDATE b_sonet_user_relations SET ".
110 " ".$strUpdate." ".
111 "WHERE ID = ".$ID." ";
112 $DB->Query($strSql);
113
114 $events = GetModuleEvents("socialnetwork", "OnSocNetUserRelationsUpdate");
115 while ($arEvent = $events->Fetch())
117
118 if (
119 (!array_key_exists("SEND_MAIL", $arFields)
120 || $arFields["SEND_MAIL"] !== "N")
121 && !IsModuleInstalled("im")
122 )
123 {
124 $mailType = "";
125 if ($arUserRelationOld["RELATION"] != SONET_RELATIONS_FRIEND && $arFields["RELATION"] == SONET_RELATIONS_FRIEND)
126 {
127 $mailType = "AGREE_FRIEND";
128 }
129 elseif ($arUserRelationOld["RELATION"] != SONET_RELATIONS_BAN && $arFields["RELATION"] == SONET_RELATIONS_BAN)
130 {
131 $mailType = "BAN_FRIEND";
132 }
133 elseif ($arUserRelationOld["RELATION"] != SONET_RELATIONS_REQUEST && $arFields["RELATION"] == SONET_RELATIONS_REQUEST)
134 {
135 $mailType = "INVITE_FRIEND";
136 }
137
138 if ($mailType <> '')
139 {
141 }
142 }
143
144 CSocNetSearch::OnUserRelationsChange($arUserRelationOld["FIRST_USER_ID"]);
145 CSocNetSearch::OnUserRelationsChange($arUserRelationOld["SECOND_USER_ID"]);
146 }
147 else
148 $ID = False;
149
150 return $ID;
151 }
152
153 /***************************************/
154 /********** DATA SELECTION ***********/
155 /***************************************/
156 public static function GetList($arOrder = Array("ID" => "DESC"), $arFilter = Array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
157 {
158 global $DB;
160 $helper = $connection->getSqlHelper();
161
162 if (count($arSelectFields) <= 0)
163 {
164 $arSelectFields = array("ID", "FIRST_USER_ID", "SECOND_USER_ID", "RELATION", "DATE_CREATE", "DATE_UPDATE", "MESSAGE", "INITIATED_BY");
165 }
166
167 $online_interval = (array_key_exists("ONLINE_INTERVAL", $arFilter) && intval($arFilter["ONLINE_INTERVAL"]) > 0 ? $arFilter["ONLINE_INTERVAL"] : 120);
168
169 static $arFields = array(
170 "ID" => Array("FIELD" => "UR.ID", "TYPE" => "int"),
171 "FIRST_USER_ID" => Array("FIELD" => "UR.FIRST_USER_ID", "TYPE" => "int"),
172 "SECOND_USER_ID" => Array("FIELD" => "UR.SECOND_USER_ID", "TYPE" => "int"),
173 "RELATION" => Array("FIELD" => "UR.RELATION", "TYPE" => "string"),
174 "DATE_CREATE" => Array("FIELD" => "UR.DATE_CREATE", "TYPE" => "datetime"),
175 "DATE_UPDATE" => Array("FIELD" => "UR.DATE_UPDATE", "TYPE" => "datetime"),
176 "MESSAGE" => Array("FIELD" => "UR.MESSAGE", "TYPE" => "string"),
177 "INITIATED_BY" => Array("FIELD" => "UR.INITIATED_BY", "TYPE" => "string"),
178 "FIRST_USER_NAME" => Array("FIELD" => "U.NAME", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (UR.FIRST_USER_ID = U.ID)"),
179 "FIRST_USER_LAST_NAME" => Array("FIELD" => "U.LAST_NAME", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (UR.FIRST_USER_ID = U.ID)"),
180 "FIRST_USER_SECOND_NAME" => Array("FIELD" => "U.SECOND_NAME", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (UR.FIRST_USER_ID = U.ID)"),
181 "FIRST_USER_LOGIN" => Array("FIELD" => "U.LOGIN", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (UR.FIRST_USER_ID = U.ID)"),
182 "FIRST_USER_EMAIL" => Array("FIELD" => "U.EMAIL", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (UR.FIRST_USER_ID = U.ID)"),
183 "FIRST_USER_PERSONAL_PHOTO" => Array("FIELD" => "U.PERSONAL_PHOTO", "TYPE" => "int", "FROM" => "INNER JOIN b_user U ON (UR.FIRST_USER_ID = U.ID)"),
184 "FIRST_USER_PERSONAL_GENDER" => Array("FIELD" => "U.PERSONAL_GENDER", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (UR.FIRST_USER_ID = U.ID)"),
185 "FIRST_USER_LID" => Array("FIELD" => "U.LID", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (UR.FIRST_USER_ID = U.ID)"),
186 "SECOND_USER_NAME" => Array("FIELD" => "U1.NAME", "TYPE" => "string", "FROM" => "INNER JOIN b_user U1 ON (UR.SECOND_USER_ID = U1.ID)"),
187 "SECOND_USER_LAST_NAME" => Array("FIELD" => "U1.LAST_NAME", "TYPE" => "string", "FROM" => "INNER JOIN b_user U1 ON (UR.SECOND_USER_ID = U1.ID)"),
188 "SECOND_USER_SECOND_NAME" => Array("FIELD" => "U1.SECOND_NAME", "TYPE" => "string", "FROM" => "INNER JOIN b_user U1 ON (UR.SECOND_USER_ID = U1.ID)"),
189 "SECOND_USER_LOGIN" => Array("FIELD" => "U1.LOGIN", "TYPE" => "string", "FROM" => "INNER JOIN b_user U1 ON (UR.SECOND_USER_ID = U1.ID)"),
190 "SECOND_USER_EMAIL" => Array("FIELD" => "U1.EMAIL", "TYPE" => "string", "FROM" => "INNER JOIN b_user U1 ON (UR.SECOND_USER_ID = U1.ID)"),
191 "SECOND_USER_PERSONAL_PHOTO" => Array("FIELD" => "U1.PERSONAL_PHOTO", "TYPE" => "int", "FROM" => "INNER JOIN b_user U1 ON (UR.SECOND_USER_ID = U1.ID)"),
192 "SECOND_USER_PERSONAL_GENDER" => Array("FIELD" => "U1.PERSONAL_GENDER", "TYPE" => "string", "FROM" => "INNER JOIN b_user U1 ON (UR.SECOND_USER_ID = U1.ID)"),
193 "SECOND_USER_LID" => Array("FIELD" => "U1.LID", "TYPE" => "string", "FROM" => "INNER JOIN b_user U1 ON (UR.SECOND_USER_ID = U1.ID)"),
194 );
195 $arFields["FIRST_USER_IS_ONLINE"] = Array("FIELD" => "CASE WHEN U.LAST_ACTIVITY_DATE > " . $helper->addSecondsToDateTime(-$online_interval) . " THEN 'Y' ELSE 'N' END", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (UR.FIRST_USER_ID = U.ID)");
196 $arFields["SECOND_USER_IS_ONLINE"] = Array("FIELD" => "CASE WHEN U1.LAST_ACTIVITY_DATE > " . $helper->addSecondsToDateTime(-$online_interval) . " THEN 'Y' ELSE 'N' END", "TYPE" => "string", "FROM" => "INNER JOIN b_user U1 ON (UR.SECOND_USER_ID = U1.ID)");
197 $arFields["RAND"] = Array("FIELD" => $helper->getRandomFunction(), "TYPE" => "string");
198
199 if (array_key_exists("ACTIVE_ONLY", $arFilter) && $arFilter["ACTIVE_ONLY"] === "Y")
200 {
201 $arFields["FIRST_USER_IS_ACTIVE"] = Array("FIELD" => "U.ACTIVE", "TYPE" => "string", "FROM" => "INNER JOIN b_user U ON (UR.FIRST_USER_ID = U.ID)");
202 $arFields["SECOND_USER_IS_ACTIVE"] = Array("FIELD" => "U1.ACTIVE", "TYPE" => "string", "FROM" => "INNER JOIN b_user U1 ON (UR.SECOND_USER_ID = U1.ID)");
203 $arFilter["FIRST_USER_IS_ACTIVE"] = "Y";
204 $arFilter["SECOND_USER_IS_ACTIVE"] = "Y";
205 }
206
207 $arSqls2 = null;
208
209 if (
210 (
211 array_key_exists("USER_ID", $arFilter)
212 && (int)$arFilter["USER_ID"] > 0
213 )
214 || (
215 array_key_exists("!USER_ID", $arFilter)
216 && (int)$arFilter["!USER_ID"] > 0
217 )
218 )
219 {
220 $key = (array_key_exists("USER_ID", $arFilter) ? "USER_ID" : "!USER_ID");
221
222 $filterVal = $arFilter[$key];
223 unset($arFilter[$key]);
224
225 $arFilter2 = $arFilter;
226
227 if ($key === "USER_ID")
228 {
229 $arFilter2["SECOND_USER_ID"] = $filterVal;
230 }
231 else
232 {
233 $arFilter2["!SECOND_USER_ID"] = $filterVal;
234 }
235
236 $arSqls2 = CSocNetGroup::PrepareSql($arFields, $arOrder, $arFilter2, $arGroupBy, $arSelectFields);
237
238 if ($key === "USER_ID")
239 {
240 $arFilter["FIRST_USER_ID"] = $filterVal;
241 }
242 else
243 {
244 $arFilter["!FIRST_USER_ID"] = $filterVal;
245 }
246 }
247
248 $arSqls = CSocNetGroup::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
249
250 $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]);
251
252 if (
253 is_array($arGroupBy)
254 && count($arGroupBy) == 0
255 )
256 {
257 if (
258 $arSqls2
259 && $arSqls2["WHERE"] <> ''
260 )
261 {
262 $strSql = "SELECT COUNT(*) AS CNT FROM (";
263
264 $strSql .=
265 "SELECT UR.ID ".
266 "FROM b_sonet_user_relations UR ".
267 " ".$arSqls["FROM"]." ".
268 "WHERE ".$arSqls["WHERE"]." ".
269 "UNION ".
270 "SELECT UR.ID ".
271 "FROM b_sonet_user_relations UR ".
272 " ".$arSqls["FROM"]." ".
273 "WHERE ".$arSqls2["WHERE"]." ";
274
275 if ($arSqls["GROUPBY"] <> '')
276 {
277 $strSql .= "GROUP BY ".$arSqls["GROUPBY"]." ";
278 }
279
280 $strSql .= ") AS RELS";
281 }
282 else
283 {
284 $strSql =
285 "SELECT ".$arSqls["SELECT"]." ".
286 "FROM b_sonet_user_relations UR ".
287 " ".$arSqls["FROM"]." ";
288
289 if ($arSqls["WHERE"] <> '')
290 {
291 $strSql .= "WHERE ".$arSqls["WHERE"]." ";
292 }
293
294 if ($arSqls["GROUPBY"] <> '')
295 {
296 $strSql .= "GROUP BY ".$arSqls["GROUPBY"]." ";
297 }
298 }
299
300 //echo "!1!=".htmlspecialcharsbx($strSql)."<br>";
301
302 $dbRes = $DB->Query($strSql);
303 if ($arRes = $dbRes->Fetch())
304 return $arRes["CNT"];
305 else
306 return False;
307 }
308
309 $strSql =
310 "SELECT ".$arSqls["SELECT"]." ".
311 "FROM b_sonet_user_relations UR ".
312 " ".$arSqls["FROM"]." ";
313 if ($arSqls["WHERE"] <> '')
314 {
315 $strSql .= "WHERE ".$arSqls["WHERE"]." ";
316 }
317 if ($arSqls["ORDERBY"] <> '')
318 {
319 $strSql .= "ORDER BY ".$arSqls["ORDERBY"]." ";
320 }
321
322 if (
323 $arSqls2
324 && $arSqls2["WHERE"] <> ''
325 )
326 {
327 $strSql = "(".$strSql.") ";
328 $strSql .=
329 "UNION (".
330 "SELECT ".$arSqls["SELECT"]." ".
331 "FROM b_sonet_user_relations UR ".
332 " ".$arSqls["FROM"]." ".
333 "WHERE ".$arSqls2["WHERE"]." ";
334
335 if ($arSqls2["ORDERBY"] <> '')
336 {
337 $strSql .= "ORDER BY ".$arSqls2["ORDERBY"]." ";
338 }
339 $strSql .= ") ";
340 }
341
342 if ($arSqls["GROUPBY"] <> '')
343 {
344 $strSql .= "GROUP BY ".$arSqls["GROUPBY"]." ";
345 }
346
347 if (is_array($arNavStartParams) && intval($arNavStartParams["nTopCount"]) <= 0)
348 {
349 $strSql_tmp =
350 "SELECT COUNT('x') as CNT ".
351 "FROM b_sonet_user_relations UR ".
352 " ".$arSqls["FROM"]." ";
353 if ($arSqls["WHERE"] <> '')
354 $strSql_tmp .= "WHERE ".$arSqls["WHERE"]." ";
355 if ($arSqls["GROUPBY"] <> '')
356 $strSql_tmp .= "GROUP BY ".$arSqls["GROUPBY"]." ";
357
358 //echo "!2.1!=".htmlspecialcharsbx($strSql_tmp)."<br>";
359
360 $dbRes = $DB->Query($strSql_tmp);
361 $cnt = 0;
362 if ($arSqls["GROUPBY"] == '')
363 {
364 if ($arRes = $dbRes->Fetch())
365 {
366 $cnt = $arRes["CNT"];
367 }
368 }
369 else
370 {
371 $cnt = $dbRes->SelectedRowsCount();
372 }
373
374 $dbRes = new CDBResult();
375
376 //echo "!2.2!=".htmlspecialcharsbx($strSql)."<br>";
377
378 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
379 }
380 else
381 {
382 if (is_array($arNavStartParams) && (int)$arNavStartParams["nTopCount"] > 0)
383 {
384 $strSql .= "LIMIT " . (int)$arNavStartParams["nTopCount"];
385 }
386
387 //echo "!3!=".htmlspecialcharsbx($strSql)."<br>";
388
389 $dbRes = $DB->Query($strSql);
390 }
391
392 return $dbRes;
393 }
394
395 public static function GetListBirthday($userID, $number = 5, $online_interval = 120)
396 {
397 global $DB;
399 $helper = $connection->getSqlHelper();
400
401 $userID = (int)$userID;
402 $number = (int)$number;
403
404 $curYear = (int)Date('Y');
405
406 $strSql =
407 "SELECT U.ID, U.NAME, U.LAST_NAME, U.SECOND_NAME, U.LOGIN, U.EMAIL, U.PERSONAL_PHOTO, U.PERSONAL_GENDER, U.PERSONAL_BIRTHDAY as PB, ".
408 " CASE WHEN U.LAST_ACTIVITY_DATE > " . $helper->addSecondsToDateTime(-$online_interval) . " THEN 'Y' ELSE 'N' END IS_ONLINE ".
409 "FROM b_sonet_user_relations UR ".
410 " INNER JOIN b_user U ON (UR.FIRST_USER_ID = U.ID) ".
411 "WHERE UR.SECOND_USER_ID = ".$userID." ".
412 " AND UR.RELATION = '".$DB->ForSql(SONET_RELATIONS_FRIEND, 1)."' ".
413 "UNION ".
414 "SELECT U.ID, U.NAME, U.LAST_NAME, U.SECOND_NAME, U.LOGIN, U.EMAIL, U.PERSONAL_PHOTO, U.PERSONAL_GENDER, U.PERSONAL_BIRTHDAY as PB, ".
415 " CASE WHEN U.LAST_ACTIVITY_DATE > " . $helper->addSecondsToDateTime(-$online_interval) . " THEN 'Y' ELSE 'N' END IS_ONLINE ".
416 "FROM b_sonet_user_relations UR ".
417 " INNER JOIN b_user U ON (UR.SECOND_USER_ID = U.ID) ".
418 "WHERE UR.FIRST_USER_ID = ".$userID." ".
419 " AND UR.RELATION = '".$DB->ForSql(SONET_RELATIONS_FRIEND, 1)."' ".
420 "ORDER BY CASE WHEN " . $helper->formatDate($curYear . '-MM-DD', 'PB') . " < " . $helper->formatDate('YYYY-MM-DD', 'CURDATE()') . " ".
421 " THEN " . $helper->formatDate(($curYear + 1) . '-MM-DD', 'PB') . " ".
422 " ELSE " . $helper->formatDate($curYear . '-MM-DD', 'PB') . " END".
423 ($number > 0 ? "LIMIT ".$number."" : "");
424
425 return $DB->Query($strSql);
426 }
427
428 public static function GetRelationsTop($userID, $number = 100)
429 {
430 global $DB;
431
432 $userID = (int)$userID;
433 $number = (int)$number;
434
435 $strSql =
436 "SELECT UR.RELATION, UR.FIRST_USER_ID, UR.SECOND_USER_ID ".
437 "FROM b_sonet_user_relations UR ".
438 "WHERE UR.FIRST_USER_ID = ".$userID." ".
439 "UNION ".
440 "SELECT UR.RELATION, UR.FIRST_USER_ID, UR.SECOND_USER_ID ".
441 "FROM b_sonet_user_relations UR ".
442 "WHERE UR.SECOND_USER_ID = ".$userID." ".
443 ($number > 0 ? "LIMIT ".$number : "");
444
445 return $DB->Query($strSql);
446 }
447}
$connection
Определения actionsdefinitions.php:38
static getConnection($name="")
Определения application.php:638
static processEqualityFieldsToUpdate($fields1, &$update)
Определения util.php:239
static getEqualityFields(&$fields)
Определения util.php:207
static processEqualityFieldsToInsert($fields1, &$insert)
Определения util.php:222
static GetByID($ID)
Определения user_relations.php:173
static CheckFields($ACTION, &$arFields, $ID=0)
Определения user_relations.php:12
static SendEvent($relationID, $mailType="INVITE_FRIEND")
Определения user_relations.php:470
static OnUserRelationsChange($user_id)
Определения search.php:47
static Add($arFields)
Определения user_relations.php:10
static GetList($arOrder=Array("ID"=> "DESC"), $arFilter=Array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения user_relations.php:156
static GetRelationsTop($userID, $number=100)
Определения user_relations.php:428
static GetListBirthday($userID, $number=5, $online_interval=120)
Определения user_relations.php:395
static Update($ID, $arFields)
Определения user_relations.php:74
$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
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
IsModuleInstalled($module_id)
Определения tools.php:5301
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
for($i=1; $i<=12; $i++) $curYear
Определения payment.php:250
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
Определения waybill.php:936
const SONET_RELATIONS_FRIEND
Определения include.php:24
const SONET_RELATIONS_REQUEST
Определения include.php:25
const SONET_RELATIONS_BAN
Определения include.php:26
$arRes
Определения options.php:104
$arFilter
Определения user_search.php:106
$dbRes
Определения yandex_detail.php:168