3require_once(
$_SERVER[
"DOCUMENT_ROOT"].
"/bitrix/modules/socialnetwork/classes/general/messages.php");
28 if (
$arFields[
'MESSAGE'] instanceof \Closure)
38 if (defined(
"INTASK_SKIP_SOCNET_MESSAGES1") && INTASK_SKIP_SOCNET_MESSAGES1)
50 $db_events =
GetModuleEvents(
"socialnetwork",
"OnBeforeSocNetMessagesAdd");
51 while ($arEvent = $db_events->Fetch())
55 $arInsert =
$DB->PrepareInsert(
"b_sonet_messages",
$arFields);
59 if ($arInsert[0] <>
'')
62 "INSERT INTO b_sonet_messages(".$arInsert[0].
") ".
63 "VALUES(".$arInsert[1].
")";
66 $ID = intval(
$DB->LastID());
69 while ($arEvent = $events->Fetch())
84 if (!CSocNetGroup::__ValidateID(
$ID))
94 $db_events =
GetModuleEvents(
"socialnetwork",
"OnBeforeSocNetMessagesUpdate");
95 while ($arEvent = $db_events->Fetch())
99 $strUpdate =
$DB->PrepareUpdate(
"b_sonet_messages",
$arFields);
102 if ($strUpdate <>
'')
105 "UPDATE b_sonet_messages SET ".
107 "WHERE ID = ".$ID.
" ";
111 while ($arEvent = $events->Fetch())
125 public static function GetList($arOrder = Array(
"ID" =>
"DESC"),
$arFilter = Array(), $arGroupBy =
false, $arNavStartParams =
false, $arSelectFields =
array())
129 if (
count($arSelectFields) <= 0)
131 $arSelectFields =
array(
"ID",
"FROM_USER_ID",
"TO_USER_ID",
"TITLE",
"MESSAGE",
"DATE_CREATE",
"DATE_VIEW",
"MESSAGE_TYPE",
"FROM_DELETED",
"TO_DELETED");
138 !array_key_exists(
"IS_LOG_ALL",
$arFilter)
139 && !array_key_exists(
"IS_LOG",
$arFilter)
140 && !array_key_exists(
"!IS_LOG",
$arFilter)
147 if (array_key_exists(
"IS_LOG_ALL",
$arFilter))
154 $online_interval = (array_key_exists(
"ONLINE_INTERVAL",
$arFilter) && (int)
$arFilter[
"ONLINE_INTERVAL"] > 0 ?
$arFilter[
"ONLINE_INTERVAL"] : 120);
157 "ID" => Array(
"FIELD" =>
"M.ID",
"TYPE" =>
"int"),
158 "FROM_USER_ID" => Array(
"FIELD" =>
"M.FROM_USER_ID",
"TYPE" =>
"int"),
159 "TO_USER_ID" => Array(
"FIELD" =>
"M.TO_USER_ID",
"TYPE" =>
"int"),
160 "TITLE" => Array(
"FIELD" =>
"M.TITLE",
"TYPE" =>
"string"),
161 "MESSAGE" => Array(
"FIELD" =>
"M.MESSAGE",
"TYPE" =>
"string"),
162 "DATE_CREATE" => Array(
"FIELD" =>
"M.DATE_CREATE",
"TYPE" =>
"datetime"),
163 "DATE_VIEW" => Array(
"FIELD" =>
"M.DATE_VIEW",
"TYPE" =>
"datetime"),
164 "MESSAGE_TYPE" => Array(
"FIELD" =>
"M.MESSAGE_TYPE",
"TYPE" =>
"string"),
165 "FROM_DELETED" => Array(
"FIELD" =>
"M.FROM_DELETED",
"TYPE" =>
"string"),
166 "TO_DELETED" => Array(
"FIELD" =>
"M.TO_DELETED",
"TYPE" =>
"string"),
167 "SEND_MAIL" => Array(
"FIELD" =>
"M.SEND_MAIL",
"TYPE" =>
"string"),
168 "IS_LOG" => Array(
"FIELD" =>
"M.IS_LOG",
"TYPE" =>
"string"),
169 "EMAIL_TEMPLATE" => Array(
"FIELD" =>
"M.EMAIL_TEMPLATE",
"TYPE" =>
"string"),
170 "FROM_USER_NAME" => Array(
"FIELD" =>
"U.NAME",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U ON (M.FROM_USER_ID = U.ID)"),
171 "FROM_USER_LAST_NAME" => Array(
"FIELD" =>
"U.LAST_NAME",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U ON (M.FROM_USER_ID = U.ID)"),
172 "FROM_USER_SECOND_NAME" => Array(
"FIELD" =>
"U.SECOND_NAME",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U ON (M.FROM_USER_ID = U.ID)"),
173 "FROM_USER_LOGIN" => Array(
"FIELD" =>
"U.LOGIN",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U ON (M.FROM_USER_ID = U.ID)"),
174 "FROM_USER_PERSONAL_PHOTO" => Array(
"FIELD" =>
"U.PERSONAL_PHOTO",
"TYPE" =>
"int",
"FROM" =>
"INNER JOIN b_user U ON (M.FROM_USER_ID = U.ID)"),
175 "FROM_USER_PERSONAL_GENDER" => Array(
"FIELD" =>
"U.PERSONAL_GENDER",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U ON (M.FROM_USER_ID = U.ID)"),
176 "FROM_USER_LID" => Array(
"FIELD" =>
"U.LID",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U ON (M.FROM_USER_ID = U.ID)"),
177 "TO_USER_NAME" => Array(
"FIELD" =>
"U1.NAME",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U1 ON (M.TO_USER_ID = U1.ID)"),
178 "TO_USER_LAST_NAME" => Array(
"FIELD" =>
"U1.LAST_NAME",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U1 ON (M.TO_USER_ID = U1.ID)"),
179 "TO_USER_SECOND_NAME" => Array(
"FIELD" =>
"U1.SECOND_NAME",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U1 ON (M.TO_USER_ID = U1.ID)"),
180 "TO_USER_LOGIN" => Array(
"FIELD" =>
"U1.LOGIN",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U1 ON (M.TO_USER_ID = U1.ID)"),
181 "TO_USER_EMAIL" => Array(
"FIELD" =>
"U1.EMAIL",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U1 ON (M.TO_USER_ID = U1.ID)"),
182 "TO_USER_PERSONAL_PHOTO" => Array(
"FIELD" =>
"U1.PERSONAL_PHOTO",
"TYPE" =>
"int",
"FROM" =>
"INNER JOIN b_user U1 ON (M.TO_USER_ID = U1.ID)"),
183 "TO_USER_PERSONAL_GENDER" => Array(
"FIELD" =>
"U1.PERSONAL_GENDER",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U1 ON (M.TO_USER_ID = U1.ID)"),
184 "TO_USER_LID" => Array(
"FIELD" =>
"U1.LID",
"TYPE" =>
"string",
"FROM" =>
"INNER JOIN b_user U1 ON (M.TO_USER_ID = U1.ID)"),
190 $arFields[
"FROM_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 (M.FROM_USER_ID = U.ID)");
191 $arFields[
"TO_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 (M.TO_USER_ID = U1.ID)");
194 $arSqls = CSocNetGroup::PrepareSql(
$arFields, $arOrder,
$arFilter, $arGroupBy, $arSelectFields);
196 $arSqls[
"SELECT"] = str_replace(
"%%_DISTINCT_%%",
"", $arSqls[
"SELECT"]);
198 if (is_array($arGroupBy) &&
count($arGroupBy)==0)
201 "SELECT ".$arSqls[
"SELECT"].
" ".
202 "FROM b_sonet_messages M ".
203 " ".$arSqls[
"FROM"].
" ";
204 if ($arSqls[
"WHERE"] <>
'')
205 $strSql .=
"WHERE ".$arSqls[
"WHERE"].
" ";
206 if ($arSqls[
"GROUPBY"] <>
'')
207 $strSql .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
220 "SELECT ".$arSqls[
"SELECT"].
" ".
221 "FROM b_sonet_messages M ".
222 " ".$arSqls[
"FROM"].
" ";
223 if ($arSqls[
"WHERE"] <>
'')
224 $strSql .=
"WHERE ".$arSqls[
"WHERE"].
" ";
225 if ($arSqls[
"GROUPBY"] <>
'')
226 $strSql .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
227 if ($arSqls[
"ORDERBY"] <>
'')
228 $strSql .=
"ORDER BY ".$arSqls[
"ORDERBY"].
" ";
230 if (is_array($arNavStartParams) && intval($arNavStartParams[
"nTopCount"]) <= 0)
233 "SELECT COUNT('x') as CNT ".
234 "FROM b_sonet_messages M ".
235 " ".$arSqls[
"FROM"].
" ";
236 if ($arSqls[
"WHERE"] <>
'')
237 $strSql_tmp .=
"WHERE ".$arSqls[
"WHERE"].
" ";
238 if ($arSqls[
"GROUPBY"] <>
'')
239 $strSql_tmp .=
"GROUP BY ".$arSqls[
"GROUPBY"].
" ";
245 if ($arSqls[
"GROUPBY"] ==
'')
253 $cnt =
$dbRes->SelectedRowsCount();
260 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
264 if (is_array($arNavStartParams) && intval($arNavStartParams[
"nTopCount"]) > 0)
265 $strSql .=
"LIMIT ".intval($arNavStartParams[
"nTopCount"]);
281 $currentUserID = (int)$currentUserID;
282 if ($currentUserID <= 0)
286 $userID = (int)$userID;
295 "SELECT " . $helper->formatDate(
'YYYY-MM-DD 00:00:00',
'MAX(DATE_CREATE)') .
" as DDD ".
296 "FROM b_sonet_messages ".
298 " (TO_USER_ID = ".$currentUserID.
" ".
299 " AND FROM_USER_ID = ".$userID.
" ".
300 " AND TO_DELETED = 'N' ".
301 " OR FROM_USER_ID = ".$currentUserID.
" ".
302 " AND TO_USER_ID = ".$userID.
" ".
303 " AND FROM_DELETED = 'N' ) ".
304 " AND MESSAGE_TYPE = 'P' ";
316 $date = date(
"Y-m-d 00:00:00");
322 public static function GetMessagesForChat($currentUserID, $userID, $date =
false, $arNavStartParams =
false, $replyMessId=
false)
328 $currentUserID = (int)$currentUserID;
329 if ($currentUserID <= 0)
334 $userID = (int)$userID;
344 if (!preg_match(
"#\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d#i", $date))
350 $replyMessId = (int)$replyMessId;
354 if(CTimeZone::Enabled())
356 $diff = CTimeZone::GetOffset();
359 if($diff !==
false && $diff <> 0)
361 $sDateFmt = $helper->formatDate(
'YYYY-MM-DD HH:MI:SS', $helper->addSecondsToDateTime($diff,
'DATE_CREATE')) .
" as DATE_CREATE_FMT, ";
365 $sDateFmt = $helper->formatDate(
'YYYY-MM-DD HH:MI:SS',
'DATE_CREATE') .
" as DATE_CREATE_FMT, ";
369 "SELECT 'IN' as WHO, ID, FROM_USER_ID as USER_ID, TITLE, MESSAGE, DATE_VIEW as DATE_VIEW, DATE_CREATE, ".
371 " ".$DB->DateToCharFunction(
"DATE_CREATE",
"FULL").
" as DATE_CREATE_FORMAT ".
372 "FROM b_sonet_messages ".
373 "WHERE TO_USER_ID = ".$currentUserID.
" ".
374 ($userID > 0?
" AND FROM_USER_ID = ".$userID.
" ":
"").
375 " AND TO_DELETED = 'N' ".
376 " AND (IS_LOG IS NULL OR NOT IS_LOG = 'Y') ".
377 (($date !==
false && $replyMessId <=0) ?
" AND MESSAGE_TYPE = 'P' AND DATE_CREATE > '".$DB->ForSql($date).
"' " :
"").
378 (($replyMessId > 0) ?
" AND MESSAGE_TYPE = 'P' AND ID >= '".$replyMessId.
"' " :
"").
380 "SELECT 'OUT' as WHO, ID, TO_USER_ID as USER_ID, TITLE, MESSAGE, DATE_CREATE as DATE_VIEW, DATE_CREATE, ".
382 " ".$DB->DateToCharFunction(
"DATE_CREATE",
"FULL").
" as DATE_CREATE_FORMAT ".
383 "FROM b_sonet_messages ".
384 "WHERE FROM_USER_ID = ".$currentUserID.
" ".
385 ($userID > 0?
" AND TO_USER_ID = ".$userID.
" ":
"").
386 " AND FROM_DELETED = 'N' ".
387 " AND (IS_LOG IS NULL OR NOT IS_LOG = 'Y') ".
388 (($date !==
false && $replyMessId <=0) ?
" AND MESSAGE_TYPE = 'P' AND DATE_CREATE > '".$DB->ForSql($date).
"' " :
"").
389 (($replyMessId > 0) ?
" AND MESSAGE_TYPE = 'P' AND ID >= '".$replyMessId.
"' " :
"").
390 "ORDER BY DATE_CREATE ".(($date !==
false) ?
"ASC" :
"DESC").
" ";
392 if (is_array($arNavStartParams) && (
int)$arNavStartParams[
"nTopCount"] <= 0)
395 "SELECT COUNT(M.ID) as CNT ".
396 "FROM b_sonet_messages M ".
397 "WHERE (M.TO_USER_ID = ".$currentUserID.
" ".
398 ($userID > 0?
" AND M.FROM_USER_ID = ".$userID.
" ":
"").
399 " AND M.TO_DELETED = 'N' ".
401 " M.FROM_USER_ID = ".$currentUserID.
" ".
402 ($userID > 0?
" AND M.TO_USER_ID = ".$userID.
" ":
"").
403 " AND M.FROM_DELETED = 'N') ".
404 " AND (IS_LOG IS NULL OR NOT IS_LOG = 'Y') ".
405 (($date !==
false || $replyMessId > 0) ?
" AND M.MESSAGE_TYPE = 'P' " :
"");
416 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
420 if (is_array($arNavStartParams) && (
int)$arNavStartParams[
"nTopCount"] > 0)
422 $strSql .=
"LIMIT " . (int)$arNavStartParams[
"nTopCount"];
431 public static function GetMessagesUsers($userID, $arNavStartParams =
false, $online_interval = 120)
437 $userID = (int)$userID;
444 "SELECT U.ID, U.ACTIVE, U.LOGIN, U.NAME, U.LAST_NAME, U.SECOND_NAME, U.PERSONAL_PHOTO, U.PERSONAL_GENDER, COUNT(M.ID) as TOTAL, MAX(M.DATE_CREATE) as MAX_DATE, ".
445 " CASE WHEN U.LAST_ACTIVITY_DATE > " . $helper->addSecondsToDateTime(-(
int)$online_interval) .
" THEN 'Y' ELSE 'N' END IS_ONLINE, ".
446 " ".$DB->DateToCharFunction(
"MAX(M.DATE_CREATE)",
"FULL").
" as MAX_DATE_FORMAT, ".
447 " SUM(CASE WHEN M.DATE_VIEW IS NULL AND M.TO_USER_ID = ".$userID.
" THEN 1 ELSE 0 END) as UNREAD ".
448 "FROM b_user U, b_sonet_messages M ".
450 " (M.IS_LOG IS NULL OR NOT M.IS_LOG = 'Y') ".
452 " M.TO_USER_ID = ".$userID.
" ".
453 " AND M.FROM_USER_ID = U.ID ".
454 " AND M.TO_DELETED = 'N' ".
456 " M.FROM_USER_ID = ".$userID.
" ".
457 " AND M.TO_USER_ID = U.ID ".
458 " AND M.FROM_DELETED = 'N' ".
460 "GROUP BY U.ID, U.NAME, U.LAST_NAME, U.SECOND_NAME, U.PERSONAL_PHOTO, U.PERSONAL_GENDER ".
461 "ORDER BY UNREAD DESC, MAX_DATE DESC ";
463 if (is_array($arNavStartParams) && (
int)$arNavStartParams[
"nTopCount"] <= 0)
466 "SELECT DISTINCT FROM_USER_ID ".
467 "FROM b_sonet_messages M ".
469 "(M.IS_LOG IS NULL OR NOT M.IS_LOG = 'Y') ".
470 "AND M.TO_USER_ID = ".$userID.
" ".
471 "AND M.TO_DELETED = 'N' ".
475 "SELECT DISTINCT TO_USER_ID ".
476 "FROM b_sonet_messages ".
478 "(IS_LOG IS NULL OR NOT IS_LOG = 'Y') ".
479 "AND FROM_USER_ID = ".$userID.
" ".
480 "AND FROM_DELETED = 'N'";
485 $cnt =
$dbRes->SelectedRowsCount();
488 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
492 if (is_array($arNavStartParams) && intval($arNavStartParams[
"nTopCount"]) > 0)
493 $strSql .=
"LIMIT ".intval($arNavStartParams[
"nTopCount"]);
501 public static function Now()
503 return date(
"Y-m-d H:i:s");
static getConnection($name="")
static processEqualityFieldsToUpdate($fields1, &$update)
static getEqualityFields(&$fields)
static processEqualityFieldsToInsert($fields1, &$insert)
static CheckFields($ACTION, &$arFields, $ID=0)
static __SpeedFileCreate($userID)
static GetMessagesUsers($userID, $arNavStartParams=false, $online_interval=120)
static GetList($arOrder=Array("ID"=> "DESC"), $arFilter=Array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static GetChatLastDate($currentUserID, $userID)
static GetMessagesForChat($currentUserID, $userID, $date=false, $arNavStartParams=false, $replyMessId=false)
static Update($ID, $arFields)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
$_SERVER["DOCUMENT_ROOT"]
ExecuteModuleEventEx($arEvent, $arParams=[])
IsModuleInstalled($module_id)
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
</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."%"
const SONET_MESSAGE_SYSTEM