1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
log.php
См. документацию.
1<?php
2
3require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/socialnetwork/classes/general/log.php");
4
14
16{
17 /***************************************/
18 /******** DATA MODIFICATION **********/
19 /***************************************/
20 public static function Add($arFields, $bSendEvent = true)
21 {
23
24 $arFields1 = Util::getEqualityFields($arFields);
25
26 if (!self::CheckFields("ADD", $arFields))
27 {
28 return false;
29 }
30
31 $db_events = GetModuleEvents("socialnetwork", "OnBeforeSocNetLogAdd");
32 while ($arEvent = $db_events->Fetch())
33 {
34 if (ExecuteModuleEventEx($arEvent, array(&$arFields)) === false)
35 {
36 return false;
37 }
38 }
39
40 $arSiteID = array();
41 if (isset($arFields['SITE_ID']))
42 {
43 if (is_array($arFields["SITE_ID"]))
44 {
45 foreach ($arFields["SITE_ID"] as $site_id)
46 {
47 $arSiteID[$site_id] = $DB->ForSQL($site_id);
48 }
49 }
50 else
51 {
52 $arSiteID[$arFields["SITE_ID"]] = $DB->ForSQL($arFields["SITE_ID"]);
53 }
54 }
55
56 if (empty($arSiteID))
57 {
58 unset($arFields["SITE_ID"]);
59 }
60 else
61 {
62 $arFields["SITE_ID"] = end($arSiteID);
63 }
64
65 unset($arFields["LOG_UPDATE"]);
66 if (empty($arFields1["LOG_UPDATE"]))
67 {
68 $arFields["~LOG_UPDATE"] = CDatabase::CurrentTimeFunction();
69 }
70
71 $arInsert = $DB->PrepareInsert("b_sonet_log", $arFields);
72 Util::processEqualityFieldsToInsert($arFields1, $arInsert);
73
74 $ID = false;
75 if ($arInsert[0] <> '')
76 {
78
79 $strSql =
80 "INSERT INTO b_sonet_log(".$arInsert[0].") ".
81 "VALUES(".$arInsert[1].")";
82 $DB->Query($strSql);
83
84 $ID = (int)$DB->LastID();
85
86 if ($ID > 0)
87 {
89 'logId' => $ID,
90 'userId' => (isset($arFields["USER_ID"]) ? (int)$arFields["USER_ID"] : 0),
91 'typeList' => array(
92 'FOLLOW',
93 )
94 ));
95
96 if ($bSendEvent)
97 {
99 }
100
101 if (!empty($arSiteID))
102 {
103 $sql = $connection->getSqlHelper()->getInsertIgnore(
104 'b_sonet_log_site',
105 ' (LOG_ID, SITE_ID) ',
106 "SELECT ".$ID.", LID FROM b_lang WHERE LID IN ('".implode("', '", $arSiteID)."')"
107 );
108
109 $connection->query($sql);
110 }
111
112 if (isset($arFields["TAG"]))
113 {
114 LogTagTable::set(array(
115 'itemType' => LogTagTable::ITEM_TYPE_LOG,
116 'itemId' => $ID,
117 'tags' => $arFields["TAG"]
118 ));
119 }
120
121 $USER_FIELD_MANAGER->Update("SONET_LOG", $ID, $arFields);
122
123 $arFields["ID"] = $ID;
124 $events = GetModuleEvents("socialnetwork", "OnAfterSocNetLogAdd");
125 while ($arEvent = $events->Fetch())
126 {
128 }
129
130 LogIndex::setIndex([
131 'itemType' => LogIndexTable::ITEM_TYPE_LOG,
132 'itemId' => $ID,
133 'fields' => $arFields,
134 ]);
135 }
136 }
137
139
140 Service::addEvent(
141 EventDictionary::EVENT_SPACE_LIVEFEED_POST_ADD,
142 [
143 'SONET_LOG_ID' => (int)$ID,
144 'EVENT_ID' => $arFields['EVENT_ID'] ?? '',
145 ]
146 );
147
148 return $ID;
149 }
150
151 public static function Update($ID, $arFields)
152 {
155 $helper = $connection->getSqlHelper();
156
157 $ID = (int)$ID;
158 if ($ID <= 0)
159 {
160 $APPLICATION->ThrowException(GetMessage("SONET_L_WRONG_PARAMETER_ID"), "ERROR_NO_ID");
161 return false;
162 }
163 $logRightsBeforeUpdate = \Bitrix\Socialnetwork\Item\LogRight::get((int)$ID);
164
165 $str_SiteID = '';
166
167 $arFields1 = Util::getEqualityFields($arFields);
168 if (!self::CheckFields("UPDATE", $arFields, $ID))
169 {
170 return false;
171 }
172
173 $res = GetModuleEvents('socialnetwork', 'OnBeforeSocNetLogUpdate');
174 while ($eventFields = $res->fetch())
175 {
176 if (ExecuteModuleEventEx($eventFields, [ &$arFields ]) === false)
177 {
178 return false;
179 }
180 }
181
182 $arSiteID = [];
183 if (is_set($arFields, "SITE_ID"))
184 {
185 if (is_array($arFields["SITE_ID"]))
186 {
187 $arSiteID = $arFields["SITE_ID"];
188 }
189 else
190 {
191 $arSiteID[] = $arFields["SITE_ID"];
192 }
193
194 $arFields["SITE_ID"] = false;
195 $str_SiteID = "''";
196 foreach ($arSiteID as $v)
197 {
198 $arFields["SITE_ID"] = $v;
199 $str_SiteID .= ", '".$DB->ForSql($v)."'";
200 }
201 }
202
203 $strUpdate = $DB->PrepareUpdate("b_sonet_log", $arFields);
204 Util::processEqualityFieldsToUpdate($arFields1, $strUpdate);
205
206 if ($strUpdate !== '')
207 {
208 $strSql =
209 "UPDATE b_sonet_log SET ".
210 " ".$strUpdate." ".
211 "WHERE ID = ".$ID." ";
212 $DB->Query($strSql);
213
214 if (!empty($arSiteID))
215 {
216 $strSql = "DELETE FROM b_sonet_log_site WHERE LOG_ID=".$ID;
217 $DB->Query($strSql);
218
219 $strSql = $helper->getInsertIgnore("b_sonet_log_site", "(LOG_ID, SITE_ID)",
220 "SELECT " . $ID . ", LID " .
221 "FROM b_lang " .
222 "WHERE LID IN (" . $str_SiteID . ") "
223 );
224 $DB->Query($strSql);
225 }
226
227 if (isset($arFields["TAG"]))
228 {
229 LogTagTable::set([
230 'itemType' => LogTagTable::ITEM_TYPE_LOG,
231 'itemId' => $ID,
232 'tags' => $arFields["TAG"],
233 ]);
234 }
235
236 $USER_FIELD_MANAGER->Update("SONET_LOG", $ID, $arFields);
237
238 if (defined("BX_COMP_MANAGED_CACHE"))
239 {
240 $CACHE_MANAGER->ClearByTag("SONET_LOG_".$ID);
241 }
242
243 $cache = new CPHPCache;
244 $cache->CleanDir("/sonet/log/" . (int)($ID / 1000) . "/" . $ID . "/comments/");
245 }
246 elseif (!$USER_FIELD_MANAGER->Update("SONET_LOG", $ID, $arFields))
247 {
248 $ID = false;
249 }
250
251 if ((int)$ID > 0)
252 {
253 $events = GetModuleEvents("socialnetwork", "OnAfterSocNetLogUpdate");
254 while ($arEvent = $events->Fetch())
255 {
257 }
258
259 if (
260 !empty($arFields['TITLE'])
261 || !empty($arFields['MESSAGE'])
262 )
263 {
264 LogIndex::setIndex(array(
265 'itemType' => LogIndexTable::ITEM_TYPE_LOG,
266 'itemId' => $ID,
267 'fields' => $arFields
268 ));
269 }
270
271 if (
272 !empty($arFields['LOG_UPDATE'])
273 || !empty($arFields1['LOG_UPDATE'])
274 )
275 {
276 $res = LogTable::getList(array(
277 'filter' => array(
278 'ID' => $ID
279 ),
280 'select' => array('LOG_UPDATE')
281 ));
282 if (
283 ($logFields = $res->fetch())
284 && !empty($logFields['LOG_UPDATE'])
285 )
286 {
287 LogRightTable::setLogUpdate(array(
288 'logId' => $ID,
289 'value' => $logFields['LOG_UPDATE']
290 ));
291 LogIndexTable::setLogUpdate(array(
292 'logId' => $ID,
293 'value' => $logFields['LOG_UPDATE']
294 ));
295 }
296 }
297 }
298
299 $log = LogTable::query()
300 ->setSelect(['EVENT_ID'])
301 ->where('ID', (int)$ID)
302 ->fetch()
303 ;
304 Service::addEvent(
305 EventDictionary::EVENT_SPACE_LIVEFEED_POST_UPD,
306 [
307 'SONET_LOG_ID' => (int)$ID,
308 'EVENT_ID' => $log['EVENT_ID'] ?? null,
309 'LOG_RIGHTS_BEFORE_UPDATE' => $logRightsBeforeUpdate,
310 ]
311 );
312
313 return $ID;
314 }
315
316 public static function ClearOld($days = 90)
317 {
318 global $DB;
320 $helper = $connection->getSqlHelper();
321
322 $days = (int)$days;
323 if ($days <= 0)
324 {
325 return true;
326 }
327
328 $DB->Query("DELETE LC FROM b_sonet_log_comment LC INNER JOIN (SELECT L.TMP_ID FROM b_sonet_log L LEFT JOIN b_sonet_log_favorites LF ON L.ID = LF.LOG_ID WHERE LF.USER_ID IS NULL AND L.LOG_UPDATE < " . $helper->addDaysToDateTime(-$days) . ") L1 ON LC.LOG_ID = L1.TMP_ID", true);
329 $DB->Query("DELETE LS FROM b_sonet_log_site LS INNER JOIN (SELECT L.ID FROM b_sonet_log L LEFT JOIN b_sonet_log_favorites LF ON L.ID = LF.LOG_ID WHERE LF.USER_ID IS NULL AND L.LOG_UPDATE < " . $helper->addDaysToDateTime(-$days) . ") L1 ON LS.LOG_ID = L1.ID", true);
330 $DB->Query("DELETE LR FROM b_sonet_log_right LR INNER JOIN (SELECT L.ID FROM b_sonet_log L LEFT JOIN b_sonet_log_favorites LF ON L.ID = LF.LOG_ID WHERE LF.USER_ID IS NULL AND L.LOG_UPDATE < " . $helper->addDaysToDateTime(-$days) . ") L1 ON LR.LOG_ID = L1.ID", true);
331
332 return $DB->Query("DELETE FROM b_sonet_log WHERE LOG_UPDATE < " . $helper->addDaysToDateTime(-$days) . ";", true);
333 }
334
335 /***************************************/
336 /********** DATA SELECTION ***********/
337 /***************************************/
338 public static function GetList($arOrder = Array("ID" => "DESC"), $arFilter = Array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array(), $arParams = array())
339 {
341
342 $arSocNetAllowedSubscribeEntityTypesDesc = CSocNetAllowed::GetAllowedEntityTypesDesc();
343
344 $obUserFieldsSql = new CUserTypeSQL;
345 $obUserFieldsSql->SetEntity("SONET_LOG", "L.ID");
346 $obUserFieldsSql->SetSelect($arSelectFields);
347 $obUserFieldsSql->SetFilter($arFilter);
348 $obUserFieldsSql->SetOrder($arOrder);
349
350 if (count($arSelectFields) <= 0)
351 {
352 $arSelectFields = array(
353 "ID", "TMP_ID", "ENTITY_TYPE", "ENTITY_ID", "USER_ID", "EVENT_ID", "LOG_DATE", "LOG_UPDATE", "TITLE_TEMPLATE", "TITLE", "MESSAGE", "TEXT_MESSAGE", "URL", "MODULE_ID", "CALLBACK_FUNC", "EXTERNAL_ID", "SITE_ID", "PARAMS",
354 "COMMENTS_COUNT", "ENABLE_COMMENTS", "SOURCE_ID",
355 "GROUP_NAME", "GROUP_OWNER_ID", "GROUP_INITIATE_PERMS", "GROUP_VISIBLE", "GROUP_OPENED", "GROUP_IMAGE_ID",
356 "USER_NAME", "USER_LAST_NAME", "USER_SECOND_NAME", "USER_LOGIN", "USER_PERSONAL_PHOTO", "USER_PERSONAL_GENDER",
357 "CREATED_BY_NAME", "CREATED_BY_LAST_NAME", "CREATED_BY_SECOND_NAME", "CREATED_BY_LOGIN", "CREATED_BY_PERSONAL_PHOTO", "CREATED_BY_PERSONAL_GENDER",
358 "RATING_TYPE_ID", "RATING_ENTITY_ID", "RATING_TOTAL_VALUE", "RATING_TOTAL_VOTES", "RATING_TOTAL_POSITIVE_VOTES", "RATING_TOTAL_NEGATIVE_VOTES", "RATING_USER_VOTE_VALUE",
359 "SOURCE_TYPE"
360 );
361 if (
362 !isset($arParams["USE_FAVORITES"])
363 || $arParams["USE_FAVORITES"] != "N"
364 )
365 {
366 $arSelectFields[] = "FAVORITES_USER_ID";
367 }
368 }
369
370 static $arFields1 = array(
371 "ID" => Array("FIELD" => "L.ID", "TYPE" => "int"),
372 "TMP_ID" => Array("FIELD" => "L.TMP_ID", "TYPE" => "int"),
373 "SOURCE_ID" => Array("FIELD" => "L.SOURCE_ID", "TYPE" => "int"),
374 "ENTITY_TYPE" => Array("FIELD" => "L.ENTITY_TYPE", "TYPE" => "string"),
375 "ENTITY_ID" => Array("FIELD" => "L.ENTITY_ID", "TYPE" => "int"),
376 "USER_ID" => Array("FIELD" => "L.USER_ID", "TYPE" => "int"),
377 "EVENT_ID" => Array("FIELD" => "L.EVENT_ID", "TYPE" => "string"),
378 "LOG_DATE" => Array("FIELD" => "L.LOG_DATE", "TYPE" => "datetime"),
379 "LOG_DATE_TS" => Array("FIELD" => "UNIX_TIMESTAMP(L.LOG_DATE)", "TYPE" => "int"),
380 "LOG_UPDATE" => Array("FIELD" => "L.LOG_UPDATE", "TYPE" => "datetime"),
381 "TITLE_TEMPLATE" => Array("FIELD" => "L.TITLE_TEMPLATE", "TYPE" => "string"),
382 "TITLE" => Array("FIELD" => "L.TITLE", "TYPE" => "string"),
383 "MESSAGE" => Array("FIELD" => "L.MESSAGE", "TYPE" => "string"),
384 "TEXT_MESSAGE" => Array("FIELD" => "L.TEXT_MESSAGE", "TYPE" => "string"),
385 "URL" => Array("FIELD" => "L.URL", "TYPE" => "string"),
386 "MODULE_ID" => Array("FIELD" => "L.MODULE_ID", "TYPE" => "string"),
387 "CALLBACK_FUNC" => Array("FIELD" => "L.CALLBACK_FUNC", "TYPE" => "string"),
388 "EXTERNAL_ID" => Array("FIELD" => "L.EXTERNAL_ID", "TYPE" => "string"),
389 "PARAMS" => Array("FIELD" => "L.PARAMS", "TYPE" => "string"),
390 "COMMENTS_COUNT" => Array("FIELD" => "L.COMMENTS_COUNT", "TYPE" => "int"),
391 "ENABLE_COMMENTS" => Array("FIELD" => "L.ENABLE_COMMENTS", "TYPE" => "string"),
392 "SOURCE_TYPE" => Array("FIELD" => "L.SOURCE_TYPE", "TYPE" => "string"),
393 "INACTIVE" => Array("FIELD" => "L.INACTIVE", "TYPE" => "string"),
394 "CONTENT" => Array("FIELD" => "LI.CONTENT", "TYPE" => "string", "FROM" => "INNER JOIN b_sonet_log_index LI ON (LI.LOG_ID = L.ID)"),
395 "CONTENT_LOG_UPDATE" => Array("FIELD" => "LI.LOG_UPDATE", "TYPE" => "datetime", "FROM" => "INNER JOIN b_sonet_log_index LI ON (LI.LOG_ID = L.ID)"),
396 "CONTENT_ITEM_TYPE" => Array("FIELD" => "LI.ITEM_TYPE", "TYPE" => "string", "FROM" => "INNER JOIN b_sonet_log_index LI ON (LI.LOG_ID = L.ID)"),
397 "CONTENT_ITEM_ID" => Array("FIELD" => "LI.ITEM_ID", "TYPE" => "int", "FROM" => "INNER JOIN b_sonet_log_index LI ON (LI.LOG_ID = L.ID)"),
398 "CONTENT_DATE_CREATE" => Array("FIELD" => "LI.DATE_CREATE", "TYPE" => "datetime", "FROM" => "INNER JOIN b_sonet_log_index LI ON (LI.LOG_ID = L.ID)"),
399 "GROUP_NAME" => Array("FIELD" => "G.NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_sonet_group G ON (L.ENTITY_TYPE = 'G' AND L.ENTITY_ID = G.ID)"),
400 "GROUP_OWNER_ID" => Array("FIELD" => "G.OWNER_ID", "TYPE" => "int", "FROM" => "LEFT JOIN b_sonet_group G ON (L.ENTITY_TYPE = 'G' AND L.ENTITY_ID = G.ID)"),
401 "GROUP_INITIATE_PERMS" => Array("FIELD" => "G.INITIATE_PERMS", "TYPE" => "string", "FROM" => "LEFT JOIN b_sonet_group G ON (L.ENTITY_TYPE = 'G' AND L.ENTITY_ID = G.ID)"),
402 "GROUP_VISIBLE" => Array("FIELD" => "G.VISIBLE", "TYPE" => "string", "FROM" => "LEFT JOIN b_sonet_group G ON (L.ENTITY_TYPE = 'G' AND L.ENTITY_ID = G.ID)"),
403 "GROUP_OPENED" => Array("FIELD" => "G.OPENED", "TYPE" => "string", "FROM" => "LEFT JOIN b_sonet_group G ON (L.ENTITY_TYPE = 'G' AND L.ENTITY_ID = G.ID)"),
404 "GROUP_IMAGE_ID" => Array("FIELD" => "G.IMAGE_ID", "TYPE" => "int", "FROM" => "LEFT JOIN b_sonet_group G ON (L.ENTITY_TYPE = 'G' AND L.ENTITY_ID = G.ID)"),
405 "USER_NAME" => Array("FIELD" => "U.NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (L.ENTITY_TYPE = 'U' AND L.ENTITY_ID = U.ID)"),
406 "USER_LAST_NAME" => Array("FIELD" => "U.LAST_NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (L.ENTITY_TYPE = 'U' AND L.ENTITY_ID = U.ID)"),
407 "USER_SECOND_NAME" => Array("FIELD" => "U.SECOND_NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (L.ENTITY_TYPE = 'U' AND L.ENTITY_ID = U.ID)"),
408 "USER_LOGIN" => Array("FIELD" => "U.LOGIN", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (L.ENTITY_TYPE = 'U' AND L.ENTITY_ID = U.ID)"),
409 "USER_PERSONAL_PHOTO" => Array("FIELD" => "U.PERSONAL_PHOTO", "TYPE" => "int", "FROM" => "LEFT JOIN b_user U ON (L.ENTITY_TYPE = 'U' AND L.ENTITY_ID = U.ID)"),
410 "USER_PERSONAL_GENDER" => Array("FIELD" => "U.PERSONAL_GENDER", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U ON (L.ENTITY_TYPE = 'U' AND L.ENTITY_ID = U.ID)"),
411 "CREATED_BY_NAME" => Array("FIELD" => "U1.NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U1 ON L.USER_ID = U1.ID"),
412 "CREATED_BY_LAST_NAME" => Array("FIELD" => "U1.LAST_NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U1 ON L.USER_ID = U1.ID"),
413 "CREATED_BY_SECOND_NAME" => Array("FIELD" => "U1.SECOND_NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U1 ON L.USER_ID = U1.ID"),
414 "CREATED_BY_LOGIN" => Array("FIELD" => "U1.LOGIN", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U1 ON L.USER_ID = U1.ID"),
415 "CREATED_BY_PERSONAL_PHOTO" => Array("FIELD" => "U1.PERSONAL_PHOTO", "TYPE" => "int", "FROM" => "LEFT JOIN b_user U1 ON L.USER_ID = U1.ID"),
416 "CREATED_BY_PERSONAL_GENDER" => Array("FIELD" => "U1.PERSONAL_GENDER", "TYPE" => "string", "FROM" => "LEFT JOIN b_user U1 ON L.USER_ID = U1.ID"),
417 "USER_ID|COMMENT_USER_ID" => Array("FIELD" => "L.USER_ID|LC.USER_ID", "WHERE" => array("CSocNetLog", "GetSimpleOrQuery"), "FROM" => "LEFT JOIN b_sonet_log_comment LC ON LC.LOG_ID = L.ID"),
418 );
419
421 "RATING_TYPE_ID" => Array("FIELD" => "L.RATING_TYPE_ID", "TYPE" => "string"),
422 "RATING_ENTITY_ID" => Array("FIELD" => "L.RATING_ENTITY_ID", "TYPE" => "int"),
423 "RATING_TOTAL_VALUE" => Array("FIELD" => $DB->IsNull('RG.TOTAL_VALUE', '0'), "TYPE" => "double", "FROM" => "LEFT JOIN b_rating_voting RG ON L.RATING_TYPE_ID = RG.ENTITY_TYPE_ID AND L.RATING_ENTITY_ID = RG.ENTITY_ID"),
424 "RATING_TOTAL_VOTES" => Array("FIELD" => $DB->IsNull('RG.TOTAL_VOTES', '0'), "TYPE" => "double", "FROM" => "LEFT JOIN b_rating_voting RG ON L.RATING_TYPE_ID = RG.ENTITY_TYPE_ID AND L.RATING_ENTITY_ID = RG.ENTITY_ID"),
425 "RATING_TOTAL_POSITIVE_VOTES" => Array("FIELD" => $DB->IsNull('RG.TOTAL_POSITIVE_VOTES', '0'), "TYPE" => "int", "FROM" => "LEFT JOIN b_rating_voting RG ON L.RATING_TYPE_ID = RG.ENTITY_TYPE_ID AND L.RATING_ENTITY_ID = RG.ENTITY_ID"),
426 "RATING_TOTAL_NEGATIVE_VOTES" => Array("FIELD" => $DB->IsNull('RG.TOTAL_NEGATIVE_VOTES', '0'), "TYPE" => "int", "FROM" => "LEFT JOIN b_rating_voting RG ON L.RATING_TYPE_ID = RG.ENTITY_TYPE_ID AND L.RATING_ENTITY_ID = RG.ENTITY_ID"),
427 );
428
429 if (isset($USER) && is_object($USER))
430 {
431 $arFields["RATING_USER_VOTE_VALUE"] = array(
432 "FIELD" => $DB->IsNull('RV.VALUE', '0'),
433 "TYPE" => "double",
434 "FROM" => "LEFT JOIN b_rating_vote RV ON L.RATING_TYPE_ID = RV.ENTITY_TYPE_ID AND L.RATING_ENTITY_ID = RV.ENTITY_ID AND RV.USER_ID = " . (int)$USER->GetID()
435 );
436
437 if (
438 !isset($arParams["USE_FAVORITES"])
439 || $arParams["USE_FAVORITES"] !== "N"
440 )
441 {
442 $join_type = "LEFT";
443 $field_value = $DB->IsNull("SLF.USER_ID", "0");
444
445 foreach ($arFilter as $key => $value)
446 {
447 if (mb_strpos($key, "FAVORITES_USER_ID") !== false)
448 {
449 $join_type = "INNER";
450 $field_value = "SLF.USER_ID";
451 break;
452 }
453 }
454
455 $arFields["FAVORITES_USER_ID"] = [
456 "FIELD" => $field_value,
457 "TYPE" => "double",
458 "FROM" => $join_type . " JOIN b_sonet_log_favorites SLF ON L.ID = SLF.LOG_ID AND SLF.USER_ID = " . (int)$USER->GetID(),
459 ];
460 }
461
462 if (
463 isset($arParams["USE_PINNED"])
464 && $arParams["USE_PINNED"] === "Y"
465 )
466 {
467 $join_type = "LEFT";
468 $field_value = $DB->IsNull("SLP.USER_ID", "0");
469
470 foreach ($arFilter as $key => $value)
471 {
472 if (
473 $value
474 && mb_strpos($key, "PINNED_USER_ID") !== false
475 )
476 {
477 $join_type = "INNER";
478 $field_value = "SLP.USER_ID";
479 $arOrder['PINNED_DATE'] = 'DESC';
480 break;
481 }
482 }
483
484 $arFields["PINNED_USER_ID"] = Array("FIELD" => $field_value, "TYPE" => "double", "FROM" => $join_type." JOIN b_sonet_log_pinned SLP ON L.ID = SLP.LOG_ID AND SLP.USER_ID = " . (int)$USER->GetID());
485 $arFields["PINNED_DATE"] = Array("FIELD" => "SLP.PINNED_DATE", "TYPE" => "datetime", "FROM" => $join_type." JOIN b_sonet_log_pinned SLP ON L.ID = SLP.LOG_ID AND SLP.USER_ID = " . (int)$USER->GetID());
486 }
487 }
488
489 if (
490 isset($USER)
491 && is_object($USER)
492 && $USER->IsAuthorized()
493 )
494 {
495 $default_follow = CSocNetLogFollow::GetDefaultValue($USER->GetID());
496 $default_field = ($default_follow == "Y" ? "LOG_UPDATE" : "LOG_DATE");
497
498 $arFields["DATE_FOLLOW"] = Array(
499 "FIELD" => "CASE
500 WHEN LFW.USER_ID IS NULL
501 THEN L.".$default_field."
502 WHEN LFW.FOLLOW_DATE IS NOT NULL
503 THEN LFW.FOLLOW_DATE
504 WHEN LFW.TYPE = 'Y'
505 THEN L.LOG_UPDATE
506 ELSE L.LOG_DATE
507 END",
508 "TYPE" => "datetime",
509 "FROM" => "LEFT JOIN b_sonet_log_follow LFW ON LFW.USER_ID = ".$USER->GetID()." AND LFW.REF_ID = L.ID AND LFW.CODE = ".$DB->Concat("'L'", "L.ID")
510 );
511
512 $arFields["FOLLOW"] = Array(
513 "FIELD" => "CASE
514 WHEN LFW.USER_ID IS NULL
515 THEN '".$default_follow."'
516 ELSE LFW.TYPE
517 END",
518 "TYPE" => "string",
519 "FROM" => "LEFT JOIN b_sonet_log_follow LFW ON LFW.USER_ID = ".$USER->GetID()." AND LFW.REF_ID = L.ID AND LFW.CODE = ".$DB->Concat("'L'", "L.ID")
520 );
521
522 if (!in_array("FOLLOW", $arSelectFields))
523 {
524 $arSelectFields[] = "FOLLOW";
525 }
526 }
527
528 if (
529 !isset($arFilter["INACTIVE"])
530 && !isset($arFilter["!INACTIVE"])
531 && !isset($arFilter["=INACTIVE"])
532 && !isset($arFilter["!=INACTIVE"])
533 )
534 {
535 $arFilter["!=INACTIVE"] = 'Y';
536 }
537
538 if (isset($arFilter['SITE_ID']))
539 {
540 $arFields["SITE_ID"] = Array(
541 "FIELD" => "SLS.SITE_ID",
542 "TYPE" => "string",
543 "FROM" => "LEFT JOIN b_sonet_log_site SLS ON L.ID = SLS.LOG_ID"
544 );
545
546 if (is_array($arFilter["SITE_ID"]))
547 {
548 $site_cnt = 0;
549 foreach ($arFilter["SITE_ID"] as $site_id_tmp)
550 {
551 if ($site_id_tmp)
552 {
553 $site_cnt++;
554 }
555 }
556
557 $strDistinct = ($site_cnt > 1 ? " DISTINCT " : " ");
558 }
559 else
560 {
561 $strDistinct = " ";
562 }
563
564 foreach ($arSelectFields as $i => $strFieldTmp)
565 {
566 if ($strFieldTmp == "SITE_ID")
567 {
568 unset($arSelectFields[$i]);
569 }
570 }
571
572 foreach ($arOrder as $by => $order)
573 {
574 if (!in_array($by, $arSelectFields))
575 {
576 $arSelectFields[] = $by;
577 }
578 }
579 }
580 else
581 {
582 $arFields["SITE_ID"] = Array("FIELD" => "L.SITE_ID", "TYPE" => "string");
583 $strDistinct = " ";
584 }
585
586 if (
587 isset($arFilter["USER_ID"])
588 && !isset($arFilter["ENTITY_TYPE"])
589 )
590 {
591 $arCBFilterEntityType = array();
592 foreach ($arSocNetAllowedSubscribeEntityTypesDesc as $entity_type_tmp => $arEntityTypeTmp)
593 {
594 if (
595 isset($arEntityTypeTmp['USE_CB_FILTER'])
596 && $arEntityTypeTmp["USE_CB_FILTER"] == "Y"
597 )
598 {
599 $arCBFilterEntityType[] = $entity_type_tmp;
600 }
601 }
602
603 if (
604 is_array($arCBFilterEntityType)
605 && count($arCBFilterEntityType) > 0
606 )
607 {
608 $arFilter["ENTITY_TYPE"] = $arCBFilterEntityType;
609 }
610 }
611
612 if (isset($arFilter["LOG_RIGHTS"]))
613 {
614 $Rights = array();
615 if (is_array($arFilter["LOG_RIGHTS"]))
616 {
617 foreach ($arFilter["LOG_RIGHTS"] as $str)
618 {
619 if (trim($str))
620 {
621 $Rights[] = trim($str);
622 }
623 }
624 }
625 elseif (trim($arFilter["LOG_RIGHTS"]))
626 {
627 $Rights = trim($arFilter["LOG_RIGHTS"]);
628 }
629
630 unset($arFilter["LOG_RIGHTS"]);
631 if (
632 (
633 is_array($Rights)
634 && !empty($Rights)
635 )
636 || !is_array($Rights)
637 )
638 {
639 $arFilter["LOG_RIGHTS"] = $Rights;
640 $arFields["LOG_RIGHTS"] = Array(
641 "FIELD" => "SLR0.GROUP_CODE",
642 "TYPE" => "string",
643 "FROM" => "INNER JOIN b_sonet_log_right SLR0 ON L.ID = SLR0.LOG_ID"
644 );
645
646 if (!empty($arFilter['>=LOG_UPDATE']))
647 {
648 $arFields["SLR_LOG_UPDATE"] = Array(
649 "FIELD" => "SLR0.LOG_UPDATE",
650 "TYPE" => "datetime",
651 "FROM" => "INNER JOIN b_sonet_log_right SLR0 ON L.ID = SLR0.LOG_ID"
652 );
653 $arFilter['>=SLR_LOG_UPDATE'] = $arFilter['>=LOG_UPDATE'];
654 unset($arFilter['>=LOG_UPDATE']);
655
656 if (!empty($arOrder['LOG_UPDATE']))
657 {
658 $arOrder['SLR_LOG_UPDATE'] = $arOrder['LOG_UPDATE'];
659 unset($arOrder['LOG_UPDATE']);
660 }
661
662 if (!empty($arOrder['ID']))
663 {
664 $arFields["SLR_LOG_ID"] = Array(
665 "FIELD" => "SLR0.LOG_ID",
666 "TYPE" => "int",
667 "FROM" => "INNER JOIN b_sonet_log_right SLR0 ON L.ID = SLR0.LOG_ID"
668 );
669 $arOrder['SLR_LOG_ID'] = $arOrder['ID'];
670 unset($arOrder['ID']);
671 }
672 }
673 }
674
675 if (
676 is_array($Rights)
677 && count($Rights) > 1
678 )
679 {
680 $strDistinct = " DISTINCT ";
681 }
682 }
683
684 if (
685 isset($arFilter['TAG'])
686 || isset($arFilter['=TAG'])
687 || isset($arFilter['@TAG'])
688 )
689 {
690 $arFields["TAG"] = array(
691 "FIELD" => "SLT.NAME",
692 "TYPE" => "string",
693 "FROM" => "INNER JOIN b_sonet_log_tag SLT ON L.ID = SLT.LOG_ID"
694 );
695
696 $strDistinct = " DISTINCT ";
697 }
698 if (
699 isset($arFilter['USER_ID|COMMENT_USER_ID'])
700 || isset($arFilter['*CONTENT'])
701 || isset($arFilter['*%CONTENT'])
702 )
703 {
704 $strDistinct = " DISTINCT ";
705 }
706 if (
707 isset($arFilter["TMP_ID"])
708 && !isset($arFilter["ID"])
709 )
710 {
711 $arFilter["ID"] = $arFilter["TMP_ID"];
712 unset($arFilter["TMP_ID"]);
713 }
714
715 if (isset($arParams["IS_CRM"]) && $arParams["IS_CRM"] == "Y")
716 {
717 $events = GetModuleEvents("socialnetwork", "OnFillSocNetLogFields");
718 while ($arEvent = $events->Fetch())
719 {
721 }
722 }
723
724 $arFields = array_merge($arFields1, $arFields);
725 $arSqls = CSocNetGroup::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields, $obUserFieldsSql);
726
727 $listEvents = GetModuleEvents("socialnetwork", "OnBuildSocNetLogSql");
728 while ($arEvent = $listEvents->Fetch())
729 {
730 ExecuteModuleEventEx($arEvent, array(&$arFields, &$arOrder, &$arFilter, &$arGroupBy, &$arSelectFields, &$arSqls));
731 }
732
733 $strSqlUFFilter = "";
734 $r = $obUserFieldsSql->GetFilter();
735 if ($r <> '')
736 {
737 $strSqlUFFilter = " (".$r.") ";
738 }
739
740 $arSqls["RIGHTS"] = "";
741 $arSqls["VIEW"] = "";
742 $arSqls["CRM_RIGHTS"] = "";
743
744 if (
745 !empty($arParams)
746 && (
747 (
748 isset($arParams['CHECK_RIGHTS'])
749 && $arParams["CHECK_RIGHTS"] == "Y"
750 )
751 || (
752 isset($arParams['CHECK_CRM_RIGHTS'])
753 && $arParams["CHECK_CRM_RIGHTS"] == "Y"
754 )
755 || (
756 isset($arParams['CHECK_VIEW'])
757 && $arParams["CHECK_VIEW"] == "Y"
758 )
759 )
760 && !isset($arParams['USER_ID'])
761 && is_object($USER)
762 )
763 {
764 $arParams["USER_ID"] = $USER->GetID();
765 }
766
767 if (
768 !empty($arParams)
769 && isset($arParams['USER_ID'])
770 && (($arParams['CHECK_CRM_RIGHTS'] ?? '') !== 'Y')
771 )
772 {
773 $arParams["CHECK_RIGHTS"] = "Y";
774 }
775
776 if (
777 !empty($arParams)
778 && (
779 (
780 isset($arParams["USE_SUBSCRIBE"])
781 && $arParams["USE_SUBSCRIBE"] === "Y"
782 )
783 || ($arParams["USE_FOLLOW"] ?? '') == "Y"
784 )
785 )
786 {
787 if (!isset($arParams['SUBSCRIBE_USER_ID']))
788 {
789 if (
790 isset($arParams['USER_ID'])
791 && (int)$arParams["USER_ID"] > 0
792 )
793 {
794 $arParams["SUBSCRIBE_USER_ID"] = $arParams["USER_ID"];
795 }
796 elseif (is_object($USER))
797 {
798 $arParams["SUBSCRIBE_USER_ID"] = $USER->GetID();
799 }
800 }
801
802 if (
803 isset($arParams["USE_SUBSCRIBE"])
804 && $arParams["USE_SUBSCRIBE"] === "Y"
805 && !isset($arParams['MY_ENTITIES'])
806 )
807 {
808 $arMyEntities = array();
809 foreach ($arSocNetAllowedSubscribeEntityTypesDesc as $entity_type_tmp => $arEntityTypeTmp)
810 {
811 if (
812 isset($arEntityTypeTmp['HAS_MY'], $arEntityTypeTmp['CLASS_MY'], $arEntityTypeTmp['METHOD_MY'])
813 && $arEntityTypeTmp["HAS_MY"] == "Y"
814 && (string)$arEntityTypeTmp['CLASS_MY'] !== ''
815 && (string)$arEntityTypeTmp['METHOD_MY'] !== ''
816 && method_exists($arEntityTypeTmp["CLASS_MY"], $arEntityTypeTmp["METHOD_MY"])
817 )
818 {
819 $arMyEntities[$entity_type_tmp] = call_user_func(array($arEntityTypeTmp["CLASS_MY"], $arEntityTypeTmp["METHOD_MY"]));
820 }
821 }
822
823 $arParams["MY_ENTITIES"] = $arMyEntities;
824 }
825 }
826
827 if (
828 !empty($arParams)
829 && isset($arParams['CHECK_RIGHTS'], $arParams['USER_ID'])
830 && $arParams["CHECK_RIGHTS"] == "Y"
831 && is_object($USER)
832 )
833 {
834 $acc = new CAccess;
835 $acc->UpdateCodes();
836
837 $arSqls["RIGHTS"] = "EXISTS ( SELECT SLR.ID FROM b_sonet_log_right SLR
838 LEFT JOIN b_user_access UA ON (UA.ACCESS_CODE = SLR.GROUP_CODE AND UA.USER_ID = " . (int)$USER->GetID() . ")
839 WHERE L.ID = SLR.LOG_ID ".
840 (
841 (
842 $USER->IsAuthorized()
843 && isset($arParams["MY_GROUPS_ONLY"])
844 && $arParams["MY_GROUPS_ONLY"] === "Y"
845 )
846 ?
847 " AND (
848 (SLR.GROUP_CODE LIKE 'SG%' AND (UA.ACCESS_CODE = SLR.GROUP_CODE AND UA.USER_ID = " . (int)$USER->GetID() . "))
849 OR SLR.GROUP_CODE = 'U" . (int)$USER->GetID() . "'
850 )"
851 :
852 " AND (
853 0=1 ".
854 (is_object($USER) && CSocNetUser::IsCurrentUserModuleAdmin() ? " OR SLR.GROUP_CODE = 'SA'" : "").
855 (is_object($USER) && $USER->IsAuthorized() ? " OR (SLR.GROUP_CODE = 'AU')" : "").
856 " OR (SLR.GROUP_CODE = 'G2')".
857 (
858 isset($arParams['CHECK_RIGHTS_OSG'])
859 && $arParams['CHECK_RIGHTS_OSG'] === 'Y'
860 && is_object($USER)
861 && $USER->IsAuthorized()
862 ? " OR (SLR.GROUP_CODE LIKE 'OSG%')"
863 : ''
864 ).
865 (!empty($arFilter['LOG_RIGHTS_SG']) && !is_array($arFilter['LOG_RIGHTS_SG']) ? " OR (SLR.GROUP_CODE = '".$DB->ForSQL($arFilter['LOG_RIGHTS_SG'])."')" : "").
866 (is_object($USER) && $USER->IsAuthorized() ? " OR (UA.ACCESS_CODE = SLR.GROUP_CODE AND UA.USER_ID = ". (int)$USER->GetID() . ")" : "")."
867 )"
868 ).")";
869 }
870
871 if (
872 !empty($arParams)
873 && !isset($arParams['SKIP_EXPERT_MODE']) // skip expert mode for spaces
874 && isset($arParams["CHECK_VIEW"], $arParams["USER_ID"])
875 && $arParams["CHECK_VIEW"] == "Y"
876 && (int)$arParams["USER_ID"] > 0
877 )
878 {
879 $arSqls["VIEW"] = "NOT EXISTS ( SELECT SLV.USER_ID FROM b_sonet_log_view SLV
880 WHERE
881 L.EVENT_ID = SLV.EVENT_ID
882 AND SLV.USER_ID = ". (int)$arParams["USER_ID"] . "
883 AND SLV.TYPE = 'N'
884 )";
885 }
886
887 if (
888 !empty($arParams)
889 && isset($arParams['CHECK_CRM_RIGHTS'], $arParams['USER_ID'])
890 && $arParams["CHECK_CRM_RIGHTS"] == "Y"
891 && is_object($USER)
892 )
893 {
894 $permParams = array(
895 'ALIAS_PREFIX' => 'L',
896 'PERM_TYPE' => 'READ',
897 'FILTER_PARAMS' => ($arParams['CUSTOM_FILTER_PARAMS'] ?? []),
898 'OPTIONS' => array(
899 'ENTITY_TYPE_COLUMN' => 'ENTITY_TYPE',
900 'IDENTITY_COLUMN' => 'ENTITY_ID'
901 )
902 );
903
904 $altPerms = array();
905 $events = GetModuleEvents("socialnetwork", "OnBuildSocNetLogPerms");
906 while ($arEvent = $events->Fetch())
907 {
908 ExecuteModuleEventEx($arEvent, array(&$altPerms, $permParams));
909 }
910
911 if (!empty($altPerms))
912 {
913 foreach ($altPerms as $permSql)
914 {
915 if ($permSql === false)
916 {
917 //Access denied
918 $dbRes = new CDBResult();
919 $dbRes->InitFromArray(array());
920 return $dbRes;
921 }
922
923 if (is_string($permSql) && $permSql !== '')
924 {
925 if ($arSqls['CRM_RIGHTS'] !== '')
926 {
927 $arSqls['CRM_RIGHTS'] .= ' AND ';
928 }
929
930 $arSqls['CRM_RIGHTS'] = $permSql;
931 }
932 }
933 }
934 }
935
936 if (
937 isset($arParams["USE_SUBSCRIBE"])
938 && $arParams["USE_SUBSCRIBE"] == "Y"
939 && (int)$arParams["SUBSCRIBE_USER_ID"] > 0
940 )
941 {
942 $arSqls["SUBSCRIBE"] = CSocNetLogEvents::GetSQL(
943 $arParams["SUBSCRIBE_USER_ID"],
944 (is_array($arParams["MY_ENTITIES"]) ? $arParams["MY_ENTITIES"] : array()),
945 $arParams["TRANSPORT"],
946 $arParams["VISIBLE"]
947 );
948 $arParams["MIN_ID_JOIN"] = true;
949 }
950
951 $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", $strDistinct, $arSqls["SELECT"]);
952 $strMinIDJoin = "";
953
954 if (is_array($arGroupBy) && count($arGroupBy)==0)
955 {
956 $strSql =
957 "SELECT ".$arSqls["SELECT"]." ".
958 $obUserFieldsSql->GetSelect()." ".
959 "FROM b_sonet_log L ".
960 $strMinIDJoin.
961 " ".$arSqls["FROM"]." ".
962 $obUserFieldsSql->GetJoin("L.ID")." ";
963
964 $bWhereStarted = false;
965
966 if (($arSqls["WHERE"] ?? '') <> '')
967 {
968 $strSql .= "WHERE ".$arSqls["WHERE"]." ";
969 $bWhereStarted = true;
970 }
971
972 if ($strSqlUFFilter <> '')
973 {
974 $strSql .= ($bWhereStarted ? " AND " : " WHERE ").$strSqlUFFilter." ";
975 $bWhereStarted = true;
976 }
977
978 if (($arSqls["RIGHTS"] ?? '') <> '')
979 {
980 $strSql .= ($bWhereStarted ? " AND " : " WHERE ").$arSqls["RIGHTS"]." ";
981 $bWhereStarted = true;
982 }
983
984 if (($arSqls["VIEW"] ?? '') <> '')
985 {
986 $strSql .= ($bWhereStarted ? " AND " : " WHERE ").$arSqls["VIEW"]." ";
987 $bWhereStarted = true;
988 }
989
990 if (($arSqls["CRM_RIGHTS"] ?? '') <> '')
991 {
992 $strSql .= ($bWhereStarted ? " AND " : " WHERE ").$arSqls["CRM_RIGHTS"]." ";
993 $bWhereStarted = true;
994 }
995
996 if (($arSqls["SUBSCRIBE"] ?? '') <> '')
997 {
998 $strSql .= ($bWhereStarted ? " AND " : " WHERE ")."(".$arSqls["SUBSCRIBE"].") ";
999 }
1000 if (($arSqls["GROUPBY"] ?? '') <> '')
1001 {
1002 $strSql .= "GROUP BY ".$arSqls["GROUPBY"]." ";
1003 }
1004
1005 //echo "!1!=".htmlspecialcharsbx($strSql)."<br>";
1006
1007 $dbRes = $DB->Query($strSql);
1008 if ($arRes = $dbRes->Fetch())
1009 {
1010 return $arRes["CNT"];
1011 }
1012
1013 return false;
1014 }
1015
1016 if (
1017 !empty($arParams["FILTER_BY_CONTENT"])
1018 && is_array($arParams["FILTER_BY_CONTENT"])
1019 )
1020 {
1021 $tmpFields = array(
1022 "CONTENT" => array("FIELD" => "CONTENT", "TYPE" => "string"),
1023 "DATE_CREATE" => array("FIELD" => "LI.DATE_CREATE", "TYPE" => "datetime"),
1024 );
1025 $tmpFilter = $arParams["FILTER_BY_CONTENT"];
1026 $tmpJoin = array();
1027
1028 $strMinIDJoin = "INNER JOIN (
1029 SELECT LOG_ID, MAX(ITEM_TYPE) as ITEM_TYPE, MAX(ITEM_ID) as ITEM_ID
1030 FROM b_sonet_log_index TLI
1031 WHERE
1032 ".CSqlUtil::PrepareWhere($tmpFields, $tmpFilter, $tmpJoin)."
1033 GROUP BY LOG_ID
1034 ) as TLI ON (TLI.LOG_ID = L.ID)
1035 INNER JOIN b_sonet_log_index LI ON (LI.ITEM_TYPE = TLI.ITEM_TYPE AND LI.ITEM_ID = TLI.ITEM_ID)";
1036
1037 $arSqls["SELECT"] .= ',LI.ITEM_TYPE as CONTENT_ITEM_TYPE';
1038 $arSqls["SELECT"] .= ',LI.ITEM_ID as CONTENT_ITEM_ID';
1039 $arSqls["SELECT"] .= ',LI.LOG_UPDATE as CONTENT_LOG_UPDATE_X1';
1040 $arSqls["SELECT"] .= ','.$DB->DateToCharFunction('LI.LOG_UPDATE').' as CONTENT_LOG_UPDATE';
1041 $arSqls["SELECT"] .= ',LI.DATE_CREATE as CONTENT_DATE_CREATE_X1';
1042 $arSqls["SELECT"] .= ','.$DB->DateToCharFunction('LI.DATE_CREATE').' as CONTENT_DATE_CREATE';
1043
1044 if (!empty($arParams["FILTER_BY_CONTENT_DATE"]))
1045 {
1046 $tmpFilter = $arParams["FILTER_BY_CONTENT_DATE"];
1047 $arSqls["WHERE"] .= (!empty($arSqls["WHERE"]) ? " AND " : "").CSqlUtil::PrepareWhere($tmpFields, $tmpFilter, $tmpJoin);
1048 }
1049
1050 if (empty($arSqls["ORDERBY"]))
1051 {
1052 $arSqls["ORDERBY"] = " CONTENT_LOG_UPDATE_X1 DESC ";
1053 }
1054 else
1055 {
1056 $arSqls["ORDERBY"] = " CONTENT_LOG_UPDATE_X1 DESC, ".$arSqls["ORDERBY"];
1057 }
1058 }
1059
1060 $strSql =
1061 "SELECT ".$arSqls["SELECT"]." ".
1062 $obUserFieldsSql->GetSelect()." ".
1063 "FROM b_sonet_log L ".
1064 $strMinIDJoin.
1065 " ".$arSqls["FROM"]." ".
1066 $obUserFieldsSql->GetJoin("L.ID")." ";
1067
1068 $bWhereStarted = false;
1069
1070 if ($arSqls["WHERE"] <> '')
1071 {
1072 $strSql .= "WHERE ".$arSqls["WHERE"]." ";
1073 $bWhereStarted = true;
1074 }
1075
1076 if ($strSqlUFFilter <> '')
1077 {
1078 $strSql .= ($bWhereStarted ? " AND " : " WHERE ").$strSqlUFFilter." ";
1079 $bWhereStarted = true;
1080 }
1081
1082 if ($arSqls["RIGHTS"] <> '')
1083 {
1084 $strSql .= ($bWhereStarted ? " AND " : " WHERE ").$arSqls["RIGHTS"]." ";
1085 $bWhereStarted = true;
1086 }
1087
1088 if ($arSqls["VIEW"] <> '')
1089 {
1090 $strSql .= ($bWhereStarted ? " AND " : " WHERE ").$arSqls["VIEW"]." ";
1091 $bWhereStarted = true;
1092 }
1093
1094 if (
1095 isset($arSqls["CRM_RIGHTS"])
1096 && $arSqls["CRM_RIGHTS"] <> ''
1097 )
1098 {
1099 $strSql .= ($bWhereStarted ? " AND " : " WHERE ").$arSqls["CRM_RIGHTS"]." ";
1100 $bWhereStarted = true;
1101 }
1102
1103 if (isset($arSqls["SUBSCRIBE"]) && $arSqls["SUBSCRIBE"] <> '')
1104 {
1105 $strSql .= ($bWhereStarted ? " AND " : " WHERE ")."(".$arSqls["SUBSCRIBE"].") ";
1106 }
1107
1108 if ($arSqls["GROUPBY"] <> '')
1109 {
1110 $strSql .= "GROUP BY ".$arSqls["GROUPBY"]." ";
1111 }
1112
1113 if ($arSqls["ORDERBY"] <> '')
1114 {
1115 $strSql .= "ORDER BY ".$arSqls["ORDERBY"]." ";
1116 }
1117
1118 if (
1119 is_array($arNavStartParams)
1120 && (int) ($arNavStartParams["nTopCount"] ?? 0) <= 0
1121 )
1122 {
1123 if (
1124 isset($arNavStartParams["nRecordCount"])
1125 && (int)$arNavStartParams["nRecordCount"] > 0
1126 )
1127 {
1128 $cnt = (int)$arNavStartParams["nRecordCount"];
1129 }
1130 else
1131 {
1132 $strSql_tmp =
1133 "SELECT COUNT('x') as CNT ".
1134 $obUserFieldsSql->GetSelect()." ".
1135 "FROM b_sonet_log L ".
1136 $strMinIDJoin.
1137 " ".$arSqls["FROM"]." ".
1138 $obUserFieldsSql->GetJoin("L.ID")." ";
1139
1140 $bWhereStarted = false;
1141
1142 if ($arSqls["WHERE"] <> '')
1143 {
1144 $strSql_tmp .= "WHERE ".$arSqls["WHERE"]." ";
1145 $bWhereStarted = true;
1146 }
1147
1148 if ($strSqlUFFilter <> '')
1149 {
1150 $strSql_tmp .= ($bWhereStarted ? " AND " : " WHERE ").$strSqlUFFilter." ";
1151 $bWhereStarted = true;
1152 }
1153
1154 if (($arSqls["RIGHTS"] ?? '') <> '')
1155 {
1156 $strSql_tmp .= ($bWhereStarted ? " AND " : " WHERE ").$arSqls["RIGHTS"]." ";
1157 $bWhereStarted = true;
1158 }
1159
1160 if (($arSqls["CRM_RIGHTS"] ?? '') <> '')
1161 {
1162 $strSql_tmp .= ($bWhereStarted ? " AND " : " WHERE ").$arSqls["CRM_RIGHTS"]." ";
1163 $bWhereStarted = true;
1164 }
1165
1166 if (($arSqls["SUBSCRIBE"] ?? '') <> '')
1167 {
1168 $strSql_tmp .= ($bWhereStarted ? " AND " : " WHERE ")."(".$arSqls["SUBSCRIBE"].") ";
1169 }
1170 if (($arSqls["GROUPBY"] ?? '') <> '')
1171 {
1172 $strSql_tmp .= "GROUP BY ".$arSqls["GROUPBY"]." ";
1173 }
1174
1175 //echo "!2.1!=".htmlspecialcharsbx($strSql_tmp)."<br>";
1176
1177 $dbRes = $DB->Query($strSql_tmp);
1178 $cnt = 0;
1179 if ($arSqls["GROUPBY"] == '')
1180 {
1181 if ($arRes = $dbRes->Fetch())
1182 {
1183 $cnt = $arRes["CNT"];
1184 }
1185 }
1186 else
1187 {
1188 // ТОЛЬКО ДЛЯ MYSQL!!! ДЛЯ ORACLE ДРУГОЙ КОД
1189 $cnt = $dbRes->SelectedRowsCount();
1190 }
1191
1192 // for empty 2nd page show
1193 if (
1194 ($arNavStartParams["bSkipPageReset"] ?? null)
1195 && $arNavStartParams["nPageSize"] >= $cnt
1196 )
1197 {
1198 $cnt = $arNavStartParams["nPageSize"] + $cnt;
1199 }
1200 }
1201
1202 $dbRes = new CDBResult();
1203 //echo "!2.2!=".htmlspecialcharsbx($strSql)."<br>";
1204
1205 $dbRes->SetUserFields($USER_FIELD_MANAGER->GetUserFields("SONET_LOG"));
1206 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
1207 }
1208 else
1209 {
1210 if (is_array($arNavStartParams) && (int)$arNavStartParams["nTopCount"] > 0)
1211 {
1212 $strSql .= "LIMIT ". (int)$arNavStartParams["nTopCount"];
1213 }
1214 //echo "!3!=".htmlspecialcharsbx($strSql)."<br>";
1215
1216 $dbRes = $DB->Query($strSql);
1217 $dbRes->SetUserFields($USER_FIELD_MANAGER->GetUserFields("SONET_LOG"));
1218 }
1219
1220 return $dbRes;
1221 }
1222
1223 public static function DeleteSystemEventsByGroupID($group_id = false)
1224 {
1225 global $DB;
1226
1227 $group_id = (int) $group_id;
1228 if ($group_id <= 0)
1229 {
1230 return false;
1231 }
1232
1233 if ($DB->type === 'MYSQL')
1234 {
1235 $DB->Query("DELETE LC FROM b_sonet_log_comment LC INNER JOIN (SELECT L.TMP_ID FROM b_sonet_log L WHERE L.ENTITY_TYPE = '".SONET_ENTITY_USER."' AND EVENT_ID = 'system_groups' AND MESSAGE = '".$group_id."') L1 ON LC.LOG_ID = L1.TMP_ID", true);
1236 $DB->Query("DELETE LS FROM b_sonet_log_site LS INNER JOIN (SELECT L.ID FROM b_sonet_log L WHERE L.ENTITY_TYPE = '".SONET_ENTITY_USER."' AND EVENT_ID = 'system_groups' AND MESSAGE = '".$group_id."') L1 ON LS.LOG_ID = L1.ID", true);
1237 $DB->Query("DELETE LR FROM b_sonet_log_right LR INNER JOIN (SELECT L.ID FROM b_sonet_log L WHERE L.ENTITY_TYPE = '".SONET_ENTITY_USER."' AND EVENT_ID = 'system_groups' AND MESSAGE = '".$group_id."') L1 ON LR.LOG_ID = L1.ID", true);
1238 $DB->Query("DELETE LF FROM b_sonet_log_favorites LF INNER JOIN (SELECT L.ID FROM b_sonet_log L WHERE L.ENTITY_TYPE = '".SONET_ENTITY_USER."' AND EVENT_ID = 'system_groups' AND MESSAGE = '".$group_id."') L1 ON LF.LOG_ID = L1.ID", true);
1239 }
1240 else
1241 {
1242 $DB->Query(
1243 "
1244 DELETE FROM b_sonet_log_comment LC
1245 USING b_sonet_log L
1246 WHERE LC.LOG_ID = L.TMP_ID
1247 AND L.ENTITY_TYPE = '".SONET_ENTITY_USER."'
1248 AND L.EVENT_ID = 'system_groups'
1249 AND L.MESSAGE = '".$group_id."'
1250 ",
1251 true
1252 );
1253
1254 $DB->Query(
1255 "
1256 DELETE FROM b_sonet_log_site LS
1257 USING b_sonet_log L
1258 WHERE LS.LOG_ID = L.ID
1259 AND L.ENTITY_TYPE = '".SONET_ENTITY_USER."'
1260 AND L.EVENT_ID = 'system_groups'
1261 AND L.MESSAGE = '".$group_id."'
1262 ",
1263 true
1264 );
1265
1266 $DB->Query(
1267 "
1268 DELETE FROM b_sonet_log_right LR
1269 USING b_sonet_log L
1270 WHERE LR.LOG_ID = L.ID
1271 AND L.ENTITY_TYPE = '".SONET_ENTITY_USER."'
1272 AND L.EVENT_ID = 'system_groups'
1273 AND L.MESSAGE = '".$group_id."'
1274 ",
1275 true
1276 );
1277
1278 $DB->Query(
1279 "
1280 DELETE FROM b_sonet_log_favorites LF
1281 USING b_sonet_log L
1282 WHERE LF.LOG_ID = L.ID
1283 AND L.ENTITY_TYPE = '".SONET_ENTITY_USER."'
1284 AND L.EVENT_ID = 'system_groups'
1285 AND L.MESSAGE = '".$group_id."'
1286 ",
1287 true
1288 );
1289 }
1290
1291 return $DB->Query("DELETE FROM b_sonet_log WHERE ENTITY_TYPE = '".SONET_ENTITY_USER."' AND EVENT_ID = 'system_groups' AND MESSAGE = '".$group_id."'", true);
1292 }
1293
1294 public static function Delete($ID)
1295 {
1297
1298 $ID = (int)$ID;
1299 if ($ID <= 0)
1300 {
1301 $APPLICATION->ThrowException(GetMessage("SONET_GL_WRONG_PARAMETER_ID"), "ERROR_NO_ID");
1302 return false;
1303 }
1304
1305 $db_events = GetModuleEvents("socialnetwork", "OnBeforeSocNetLogDelete");
1306 while ($arEvent = $db_events->Fetch())
1307 {
1308 if (ExecuteModuleEventEx($arEvent, array($ID))===false)
1309 {
1310 return false;
1311 }
1312 }
1313
1315 'filter' => [
1316 '=LOG_ID' => $ID
1317 ],
1318 'select' => [ 'RATING_TYPE_ID', 'RATING_ENTITY_ID' ]
1319 ]);
1320 while ($logCommentFields = $res->fetch())
1321 {
1323 'ENTITY_TYPE_ID' => $logCommentFields['RATING_TYPE_ID'],
1324 'ENTITY_ID' => $logCommentFields['RATING_ENTITY_ID']
1325 ]);
1326 }
1327
1329
1330 if ($DB->type === 'MYSQL')
1331 {
1332 $DB->Query("DELETE LC FROM b_sonet_log_comment LC INNER JOIN (SELECT L.TMP_ID FROM b_sonet_log L WHERE L.ID = ".$ID.") L1 ON LC.LOG_ID = L1.TMP_ID", true);
1333 }
1334 else
1335 {
1336 $DB->Query(
1337 "
1338 DELETE FROM b_sonet_log_comment LC
1339 USING b_sonet_log L
1340 WHERE LC.LOG_ID = L.TMP_ID
1341 AND L.ID = '".$ID."'
1342 ",
1343 true
1344 );
1345 }
1346
1347 $DB->Query("DELETE FROM b_sonet_log_right WHERE LOG_ID = ".$ID, true);
1348 $DB->Query("DELETE FROM b_sonet_log_site WHERE LOG_ID = ".$ID, true);
1349 $DB->Query("DELETE FROM b_sonet_log_favorites WHERE LOG_ID = ".$ID, true);
1350 $DB->Query("DELETE FROM b_sonet_log_tag WHERE LOG_ID = ".$ID, true);
1351
1352 $logFields = [];
1353 $res = LogTable::getList([
1354 'select' => ['ID', 'EVENT_ID', 'SOURCE_ID', 'RATING_TYPE_ID', 'RATING_ENTITY_ID'],
1355 'filter' => ['ID' => $ID]
1356 ]);
1357 if ($fields = $res->fetch())
1358 {
1359 $logFields = $fields;
1360 }
1361
1362 $bSuccess = $DB->Query("DELETE FROM b_sonet_log WHERE ID = ".$ID, true);
1363
1364 if (
1365 $bSuccess
1366 && !empty($logFields)
1367 )
1368 {
1369 $DB->Query("DELETE FROM ".UserContentViewTable::getTableName()." WHERE RATING_TYPE_ID = '".$DB->ForSQL($logFields['RATING_TYPE_ID'])."' AND RATING_ENTITY_ID = " . (int)$logFields['RATING_ENTITY_ID'], true);
1370
1371 $USER_FIELD_MANAGER->Delete("SONET_LOG", $ID);
1372
1373 $db_events = GetModuleEvents("socialnetwork", "OnSocNetLogDelete");
1374 while ($arEvent = $db_events->Fetch())
1375 {
1376 ExecuteModuleEventEx($arEvent, array($ID, $logFields));
1377 }
1378
1379 LogIndex::deleteIndex(array(
1380 'itemType' => LogIndexTable::ITEM_TYPE_LOG,
1381 'itemId' => $ID
1382 ));
1383
1385 'ENTITY_TYPE_ID' => $logFields['RATING_TYPE_ID'],
1386 'ENTITY_ID' => $logFields['RATING_ENTITY_ID']
1387 ]);
1388
1389 if (defined("BX_COMP_MANAGED_CACHE"))
1390 {
1391 $CACHE_MANAGER->ClearByTag("SONET_LOG_".$ID);
1392 }
1393
1394 $cache = new CPHPCache;
1395 $cache->CleanDir("/sonet/log/" . (int)($ID / 1000) . "/" . $ID . "/comments/");
1396 }
1397
1398 Service::addEvent(
1399 EventDictionary::EVENT_SPACE_LIVEFEED_POST_DEL,
1400 [
1401 'SONET_LOG_ID' => (int)$ID,
1402 'EVENT_ID' => $logFields['EVENT_ID'] ?? null,
1403 'LOG_RIGHTS' => $logRights,
1404 ]
1405 );
1406
1407 return $bSuccess;
1408 }
1409
1410 public static function DeleteNoDemand($userID): bool
1411 {
1412 global $DB;
1413
1414 $userID = (int)$userID;
1415 if ($userID <= 0)
1416 {
1417 return false;
1418 }
1419
1420 if ($DB->type === 'MYSQL')
1421 {
1422 $DB->Query("DELETE LC FROM b_sonet_log_comment LC INNER JOIN (SELECT L.TMP_ID FROM b_sonet_log L WHERE L.ENTITY_TYPE = '".SONET_ENTITY_USER."' AND L.ENTITY_ID = ".$userID.") L1 ON LC.LOG_ID = L1.TMP_ID", true);
1423 $DB->Query("DELETE LS FROM b_sonet_log_site LS INNER JOIN (SELECT L.ID FROM b_sonet_log L WHERE L.ENTITY_TYPE = '".SONET_ENTITY_USER."' AND L.ENTITY_ID = ".$userID.") L1 ON LS.LOG_ID = L1.ID", true);
1424 $DB->Query("DELETE LR FROM b_sonet_log_right LR INNER JOIN (SELECT L.ID FROM b_sonet_log L WHERE L.ENTITY_TYPE = '".SONET_ENTITY_USER."' AND L.ENTITY_ID = ".$userID.") L1 ON LR.LOG_ID = L1.ID", true);
1425 $DB->Query("DELETE LF FROM b_sonet_log_favorites LF INNER JOIN (SELECT L.ID FROM b_sonet_log L WHERE L.ENTITY_TYPE = '".SONET_ENTITY_USER."' AND L.ENTITY_ID = ".$userID.") L1 ON LF.LOG_ID = L1.ID", true);
1426 }
1427 else
1428 {
1429 $DB->Query(
1430 "
1431 DELETE FROM b_sonet_log_comment LC
1432 USING b_sonet_log L
1433 WHERE LC.LOG_ID = L.TMP_ID
1434 AND L.ENTITY_TYPE = '".SONET_ENTITY_USER."'
1435 AND L.ENTITY_ID = ".$userID."
1436 ",
1437 true
1438 );
1439
1440 $DB->Query(
1441 "
1442 DELETE FROM b_sonet_log_site LS
1443 USING b_sonet_log L
1444 WHERE LS.LOG_ID = L.ID
1445 AND L.ENTITY_TYPE = '".SONET_ENTITY_USER."'
1446 AND L.ENTITY_ID = ".$userID."
1447 ",
1448 true
1449 );
1450
1451 $DB->Query(
1452 "
1453 DELETE FROM b_sonet_log_right LR
1454 USING b_sonet_log L
1455 WHERE LR.LOG_ID = L.ID
1456 AND L.ENTITY_TYPE = '".SONET_ENTITY_USER."'
1457 AND L.ENTITY_ID = ".$userID."
1458 ",
1459 true
1460 );
1461
1462 $DB->Query(
1463 "
1464 DELETE FROM b_sonet_log_favorites LF
1465 USING b_sonet_log L
1466 WHERE LF.LOG_ID = L.ID
1467 AND L.ENTITY_TYPE = '".SONET_ENTITY_USER."'
1468 AND L.ENTITY_ID = ".$userID."
1469 ",
1470 true
1471 );
1472 }
1473
1474
1475 $DB->Query("DELETE FROM b_sonet_log_favorites WHERE USER_ID = ".$userID, true);
1476 $DB->Query("DELETE FROM b_sonet_log_follow WHERE USER_ID = ".$userID, true);
1477 $DB->Query("DELETE FROM b_sonet_log_view WHERE USER_ID = ".$userID, true);
1478
1479 $DB->Query("DELETE FROM b_sonet_log WHERE ENTITY_TYPE = '".SONET_ENTITY_USER."' AND ENTITY_ID = ".$userID, true);
1480
1481 Service::addEvent(
1482 EventDictionary::EVENT_SPACE_LIVEFEED_READ_ALL, [
1483 'USER_ID' => $userID,
1484 'GROUP_ID' => 0,
1485 'FEATURE_ID' => \Bitrix\Socialnetwork\Space\List\Dictionary::FEATURE_DISCUSSIONS,
1486 ]
1487 );
1488
1489 return true;
1490 }
1491
1492 public static function OnBlogDelete($blog_id)
1493 {
1494 global $DB;
1495 return $DB->Query("DELETE SL FROM b_sonet_log SL INNER JOIN b_blog_post BP ON SL.SOURCE_ID = BP.ID AND BP.BLOG_ID = " . (int)$blog_id . " WHERE SL.EVENT_ID = 'blog_post_micro' OR SL.EVENT_ID = 'blog_post'", true);
1496 }
1497}
$arParams
Определения access_dialog.php:21
$connection
Определения actionsdefinitions.php:38
global $APPLICATION
Определения include.php:80
static getConnection($name="")
Определения application.php:638
static getList(array $parameters=array())
Определения datamanager.php:431
static userLogSubscribe($params=array())
Определения componenthelper.php:4799
static get(int $logId=0)
Определения logright.php:15
Определения access.php:15
static GetSQL($user_id, $arMyEntities, $transport, $visible, $table_alias="L")
Определения log_events.php:282
Определения log.php:9
static SendEvent( $ID, $mailTemplate="SONET_NEW_EVENT", $tmpId=0, $bAgent=false)
Определения log.php:318
Определения dbresult.php:88
Определения cache.php:11
CleanDir($initdir=false, $basedir="cache")
Определения cache.php:25
static deleteRatingVoting(array $params=[])
Определения ratings.php:2444
Определения log.php:16
static ClearOld($days=90)
Определения log.php:316
static OnBlogDelete($blog_id)
Определения log.php:1492
static Delete($ID)
Определения log.php:1294
static Add($arFields, $bSendEvent=true)
Определения log.php:20
static DeleteSystemEventsByGroupID($group_id=false)
Определения log.php:1223
static GetList($arOrder=Array("ID"=> "DESC"), $arFilter=Array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array(), $arParams=array())
Определения log.php:338
static Update($ID, $arFields)
Определения log.php:151
static DeleteNoDemand($userID)
Определения log.php:1410
static SetCacheLastLogID($type="log", $id=0)
Определения log_tools.php:3102
static PrepareWhere(&$arFields, &$arFilter, &$arJoins)
Определения sql_util.php:402
Определения usertypesql.php:4
SetEntity($entity_id, $ID)
Определения usertypesql.php:16
global $CACHE_MANAGER
Определения clear_component_cache.php:7
$str
Определения commerceml2.php:63
$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 $USER_FIELD_MANAGER
Определения attempt.php:6
if($ajaxMode) $ID
Определения get_user.php:27
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
is_set($a, $k=false)
Определения tools.php:2133
GetMessage($name, $aReplace=null)
Определения tools.php:3397
$order
Определения payment.php:8
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
if(empty($signedUserToken)) $key
Определения quickway.php:257
$i
Определения factura.php:643
</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
if(!CSocNetUser::IsFriendsAllowed()||!CBXFeatures::IsFeatureEnabled("Friends")) $arEntityTypeTmp
Определения include.php:187
const SONET_ENTITY_USER
Определения include.php:118
$arRes
Определения options.php:104
$site_id
Определения sonet_set_content_view.php:9
$arFilter
Определения user_search.php:106
$dbRes
Определения yandex_detail.php:168
$fields
Определения yandex_run.php:501