11use Bitrix\Im\Configuration\Manager;
12use Bitrix\Im\Configuration\Notification;
14use Bitrix\Main\Config\Option;
15use Bitrix\Main\Loader;
16use Bitrix\Main\ModuleManager;
17use Bitrix\Main\Localization\Loc;
18use Bitrix\Main\Type\DateTime;
19use Bitrix\Main\Entity\ExpressionField;
21Loc::loadMessages(__FILE__);
31 private static function getValue(): string
33 return Option::get(
'blog',
'log_notify_all',
'N');
36 private static function setValue($value =
false): void
38 $value = ($value ===
true);
39 Option::set(
'blog',
'log_notify_all', ($value ?
'Y' :
'N'));
42 private static function getOffModeRequested(): bool
44 return (Option::get(
'blog',
'log_notify_all_off_requested',
false) ===
'Y');
47 private static function getOnModeRequested(): bool
49 return (Option::get(
'blog',
'log_notify_all_on_requested',
false) ===
'Y');
52 private static function setOffModeRequested(): void
54 Option::set(
'blog',
'log_notify_all_off_requested',
'Y');
57 private static function setOnModeRequested(): void
59 Option::set(
'blog',
'log_notify_all_on_requested',
'Y');
62 private static function getCount($period): int
66 $now = new \DateTime();
68 $res = PostTable::getList([
71 '=PostSocnetRights:POST.ENTITY' =>
'G2',
73 '>DATE_PUBLISH' => DateTime::createFromUserTime(DateTime::createFromUserTime($now->sub(
new \DateInterval($period))->format(DateTime::getFormat()))),
76 'select' => [
'CNT' ],
78 new ExpressionField(
'CNT',
'COUNT(*)'),
80 'data_doubling' =>
false,
90 private static function onModeNeeded(): bool
92 $counter = self::getCount(self::ON_PERIOD);
97 private static function offModeNeeded(): bool
99 $counter = self::getCount(self::OFF_PERIOD);
110 $value = Option::get(
'blog',
'log_notify_all_data',
false);
113 $value = unserialize($value, [
'allowed_classes' =>
false]);
116 && isset($value[
'cnt'], $value[
'rate'])
120 'cnt' => (int)$value[
'cnt'],
121 'rate' => (
int)$value[
'rate'],
131 $value = ($value ===
true);
135 self::setOnModeRequested();
139 self::setOffModeRequested();
145 if (ModuleManager::isModuleInstalled(
'intranet'))
147 $onModeRequested = self::getOnModeRequested();
148 $offModeRequested = self::getOffModeRequested();
149 $mode = self::getValue();
164 if (self::onModeNeeded())
166 self::sendRequest(
true);
172 && !$offModeRequested
175 if (self::offModeNeeded())
177 self::sendRequest(
false);
185 private static function sendRequest($value,
$siteId =
SITE_ID): void
187 $value = ($value ===
true);
189 if (Loader::includeModule(
'im'))
191 $str = ($value ?
'ON' :
'OFF');
192 $tag =
'BLOG|BROADCAST_REQUEST|' . ($value ?
'ON' :
'OFF');
197 'NOTIFY_MODULE' =>
'blog',
198 'NOTIFY_EVENT' =>
'log_notify_all_request',
199 'NOTIFY_SUB_TAG' => $tag,
200 'NOTIFY_MESSAGE' => fn (?
string $languageId =
null) => Loc::getMessage(
'BLOG_BROADCAST_REQUEST_IM_MESSAGE_' .
$str,
null, $languageId),
202 'NOTIFY_BUTTONS' => [
204 'TITLE' => Loc::getMessage(
'BLOG_BROADCAST_REQUEST_IM_BUTTON_' .
$str .
'_Y'),
209 'TITLE' => Loc::getMessage(
'BLOG_BROADCAST_REQUEST_IM_BUTTON_' .
$str .
'_N'),
217 foreach ($moduleAdminList as
$userId)
232 !Loader::includeModule(
'intranet')
233 || !Loader::includeModule(
'pull')
241 ||
$params[
'ENTITY_TYPE'] !==
'POST'
245 || empty(
$params[
'SOCNET_RIGHTS'])
246 || !is_array(
$params[
'SOCNET_RIGHTS'])
259 '=ID' => (
int)
$params[
'AUTHOR_ID'],
261 'select' => [
'ID',
'PERSONAL_GENDER',
'NAME',
'LAST_NAME',
'SECOND_NAME',
'LOGIN' ],
264 if ($author =
$res->fetch())
266 $author[
'NAME_FORMATTED'] = \CUser::formatName(\CSite::getNameFormat(
null,
$params[
'SITE_ID']), $author,
true);
267 switch($author[
'PERSONAL_GENDER'])
270 $authorSuffix =
'_M';
273 $authorSuffix =
'_F';
284 $params[
'SOCNET_RIGHTS'] = array_map(
static function (
$right) {
289 !empty(
$params[
'SOCNET_RIGHTS_OLD'])
290 && is_array(
$params[
'SOCNET_RIGHTS_OLD'])
294 foreach (
$params[
'SOCNET_RIGHTS_OLD'] as $entities)
296 foreach ($entities as $rightsList)
298 foreach ($rightsList as
$right)
304 $params[
'SOCNET_RIGHTS'] = array_diff(
$params[
'SOCNET_RIGHTS'], $rightsOld);
310 'SKIP' => (int)
$params[
'AUTHOR_ID'],
321 $userListParams[
'SITE_ID'] =
$params[
'SITE_ID'];
326 $userListParams[
'DEPARTMENTS'][] =
$matches[1];
333 $userList = \Bitrix\Intranet\Util::getEmployeesList($userListParams);
342 $params[
'ENTITY_TYPE'] ===
'POST'
344 && !empty(
$post[
'PUBLISH_STATUS'])
348 $titleTmp = str_replace([
"\r\n",
"\n" ],
' ',
$post[
'TITLE']);
349 $title = truncateText($titleTmp, 100);
350 $titleEmail = (
$post[
'MICRO'] !==
'Y' ? truncateText($titleTmp, 255) :
'');
352 $titleEmpty = (trim(
$title,
" \t\n\r\0\x0B\xA0" ) ===
'');
355 'BLOG_BROADCAST_PUSH_POST' . ($titleEmpty ?
'A' :
'') . $authorSuffix,
357 '#author#' => $author[
'NAME_FORMATTED'],
364 !empty(
$params[
'EXCLUDE_USERS'])
365 && is_array(
$params[
'EXCLUDE_USERS'])
368 $userIdList = array_diff($userIdList,
$params[
'EXCLUDE_USERS']);
371 if (!empty($userIdList))
375 \Bitrix\Pull\Push::add($userIdListPush, [
376 'module_id' =>
'blog',
381 'TAG' =>
'BLOG|POST|' .
$params[
'ENTITY_ID']
383 'tag' =>
'BLOG|POST|' .
$params[
'ENTITY_ID'],
384 'send_immediately' =>
'Y',
388 $offlineUserIdList = [];
392 $deviceInfo = \CPushManager::getDeviceInfo($mailRecipients);
393 if (is_array($deviceInfo))
400 \CPushManager::SEND_DEFERRED,
401 \CPushManager::RECORD_NOT_FOUND,
406 $offlineUserIdList[] =
$userId;
411 if (!empty($offlineUserIdList))
415 '=SEND_EMAIL' =>
'Y',
416 '@ID' => $offlineUserIdList,
419 new Main\
Entity\
ExpressionField(
'SEND_EMAIL',
'CASE WHEN LAST_ACTIVITY_DATE IS NOT NULL AND LAST_ACTIVITY_DATE > ' .
Main\Application::getConnection()->getSqlHelper()->addSecondsToDateTime(
'-' . (60*60*24*90)) .
" THEN 'Y' ELSE 'N' END"),
421 'select' => [
'ID' ],
424 $offlineUserIdList = [];
427 $offlineUserIdList[] =
$ar[
'ID'];
431 if (!empty($offlineUserIdList))
438 $serverName =
$site[
'SERVER_NAME'];
440 if (empty($serverName))
443 defined(
'SITE_SERVER_NAME')
444 && SITE_SERVER_NAME <>
''
446 : Option::get(
'main',
'server_name',
$_SERVER[
'SERVER_NAME'])
450 $serverName = (\CMain::isHTTPS() ?
'https' :
'http') .
'://' . $serverName;
452 $textEmail =
$post[
'DETAIL_TEXT'];
453 if (
$post[
'DETAIL_TEXT_TYPE'] ===
'html')
460 $parserBlog = new \blogTextParser();
461 $textEmail = $parserBlog->convert4mail($textEmail, $imageList);
463 foreach ($offlineUserIdList as
$userId)
468 'BLOG_POST_BROADCAST',
472 'AUTHOR' => $author[
'NAME_FORMATTED'],
473 'MESSAGE_TITLE' => $titleEmail,
474 'MESSAGE_TEXT' => $textEmail,
475 'MESSAGE_PATH' => $serverName .
$params[
'URL'],
489 if ($module ===
'blog')
491 $tagList = explode(
'|', $tag);
493 count($tagList) === 4
494 && $tagList[1] ===
'BROADCAST_REQUEST'
500 && in_array($mode, [
'ON',
'OFF' ])
503 self::setValue($mode ===
'ON');
504 \CIMNotify::deleteBySubTag(
'BLOG|BROADCAST_REQUEST|' . $mode);
516 if (!Loader::includeModule(
'im'))
528 $notification =
new Notification(
'blog',
'broadcast_post');
530 return $notification->filterAllowedUsers($usersId, $notifyType);
535 if (!\CIMSettings::getNotifyAccess(
542 unset($usersId[
$key]);
const BLOG_PUBLISH_STATUS_PUBLISH
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
onBeforeConfirmNotify($module, $tag, $value, $params)
static filterRecipients(array $usersId, string $notifyType)
static setRequestedMode($value)
static isSettingsMigrated()
static getList(array $parameters=array())
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
$_SERVER["DOCUMENT_ROOT"]
if($NS['step']==6) if( $NS[ 'step']==7) if(COption::GetOptionInt('main', 'disk_space', 0) > 0) $info
HTMLToTxt($str, $strSiteUrl="", $aDelete=[], $maxlen=70)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
</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."%"
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']