...Человеческий поиск в разработке...
- Модуль: blog
- Путь к файлу: ~/bitrix/modules/blog/lib/broadcast.php
- Класс: BitrixBlogBroadcast
- Вызов: Broadcast::send
static function send($params): bool { if ( !Loader::includeModule('intranet') || !Loader::includeModule('pull') ) { return false; } if ( empty($params['ENTITY_TYPE']) || $params['ENTITY_TYPE'] !== 'POST' || empty($params['ENTITY_ID']) || empty($params['AUTHOR_ID']) || empty($params['URL']) || empty($params['SOCNET_RIGHTS']) || !is_array($params['SOCNET_RIGHTS']) ) { return false; } if (empty($params['SITE_ID'])) { $params['SITE_ID'] = SITE_ID; } $res = MainUserTable::getList([ 'filter' => [ '=ID' => (int)$params['AUTHOR_ID'], ], 'select' => [ 'ID', 'PERSONAL_GENDER', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'LOGIN' ], ]); if ($author = $res->fetch()) { $author['NAME_FORMATTED'] = CUser::formatName(CSite::getNameFormat(null, $params['SITE_ID']), $author, true); switch($author['PERSONAL_GENDER']) { case 'M': $authorSuffix = '_M'; break; case 'F': $authorSuffix = '_F'; break; default: $authorSuffix = ''; } } else { return false; } $params['SOCNET_RIGHTS'] = array_map(static function ($right) { return ($right === 'G2' ? 'UA' : $right); }, $params['SOCNET_RIGHTS']); if ( !empty($params['SOCNET_RIGHTS_OLD']) && is_array($params['SOCNET_RIGHTS_OLD']) ) { $rightsOld = []; foreach ($params['SOCNET_RIGHTS_OLD'] as $entities) { foreach ($entities as $rightsList) { foreach ($rightsList as $right) { $rightsOld[] = ($right === 'G2' ? 'UA' : $right); } } } $params['SOCNET_RIGHTS'] = array_diff($params['SOCNET_RIGHTS'], $rightsOld); } $found = false; $userListParams = [ 'SKIP' => (int)$params['AUTHOR_ID'], 'DEPARTMENTS' => [], ]; foreach ($params['SOCNET_RIGHTS'] as $right) { if ( $right === 'UA' || $right === 'G2' ) { $userListParams['SITE_ID'] = $params['SITE_ID']; $found = true; } elseif (preg_match('/^DR(d+)$/', $right, $matches)) { $userListParams['DEPARTMENTS'][] = $matches[1]; $found = true; } } if ($found) { $userList = BitrixIntranetUtil::getEmployeesList($userListParams); } if (empty($userList)) { return false; } if ( $params['ENTITY_TYPE'] === 'POST' && ($post = CBlogPost::getById($params['ENTITY_ID'])) && !empty($post['PUBLISH_STATUS']) && ($post['PUBLISH_STATUS'] === BLOG_PUBLISH_STATUS_PUBLISH) ) { $titleTmp = str_replace([ "rn", "n" ], ' ', $post['TITLE']); $title = truncateText($titleTmp, 100); $titleEmail = ($post['MICRO'] !== 'Y' ? truncateText($titleTmp, 255) : ''); $titleEmpty = (trim($title, " tnr x0BxA0" ) === ''); $message = Loc::getMessage( 'BLOG_BROADCAST_PUSH_POST' . ($titleEmpty ? 'A' : '') . $authorSuffix, [ '#author#' => $author['NAME_FORMATTED'], '#title#' => $title, ] ); $userIdList = array_keys($userList); if ( !empty($params['EXCLUDE_USERS']) && is_array($params['EXCLUDE_USERS']) ) { $userIdList = array_diff($userIdList, $params['EXCLUDE_USERS']); } if (!empty($userIdList)) { $userIdListPush = self::filterRecipients($userIdList, CIMSettings::CLIENT_PUSH); BitrixPullPush::add($userIdListPush, [ 'module_id' => 'blog', 'push' => [ 'message' => $message, 'params' => [ 'ACTION' => 'post', 'TAG' => 'BLOG|POST|' . $params['ENTITY_ID'] ], 'tag' => 'BLOG|POST|' . $params['ENTITY_ID'], 'send_immediately' => 'Y', ] ]); $offlineUserIdList = []; $mailRecipients = self::filterRecipients($userIdList, CIMSettings::CLIENT_MAIL); $deviceInfo = CPushManager::getDeviceInfo($mailRecipients); if (is_array($deviceInfo)) { foreach ($deviceInfo as $userId => $info) { if (in_array( $info['mode'], [ CPushManager::SEND_DEFERRED, CPushManager::RECORD_NOT_FOUND, ], true )) { $offlineUserIdList[] = $userId; } } } if (!empty($offlineUserIdList)) { $res = MainUserTable::getList([ 'filter' => [ '=SEND_EMAIL' => 'Y', '@ID' => $offlineUserIdList, ], 'runtime' => [ new MainEntityExpressionField('SEND_EMAIL', 'CASE WHEN LAST_ACTIVITY_DATE IS NOT NULL AND LAST_ACTIVITY_DATE > ' . MainApplication::getConnection()->getSqlHelper()->addSecondsToDateTime('-' . (60*60*24*90)) . " THEN 'Y' ELSE 'N' END"), ], 'select' => [ 'ID' ], ]); $offlineUserIdList = []; while ($ar = $res->fetch()) { $offlineUserIdList[] = $ar['ID']; } } if (!empty($offlineUserIdList)) { $serverName = ''; $res = CSite::getByID($params['SITE_ID']); if ($site = $res->fetch()) { $serverName = $site['SERVER_NAME']; } if (empty($serverName)) { $serverName = ( defined('SITE_SERVER_NAME') && SITE_SERVER_NAME <> '' ? SITE_SERVER_NAME : Option::get('main', 'server_name', $_SERVER['SERVER_NAME']) ); } $serverName = (CMain::isHTTPS() ? 'https' : 'http') . '://' . $serverName; $textEmail = $post['DETAIL_TEXT']; if ($post['DETAIL_TEXT_TYPE'] === 'html') { $textEmail = HTMLToTxt($textEmail); } $imageList = []; $parserBlog = new blogTextParser(); $textEmail = $parserBlog->convert4mail($textEmail, $imageList); foreach ($offlineUserIdList as $userId) { if (!empty($userList[$userId]['EMAIL'])) { CEvent::send( 'BLOG_POST_BROADCAST', $params['SITE_ID'], [ 'EMAIL_TO' => (!empty($userList[$userId]['NAME_FORMATTED']) ? '' . $userList[$userId]['NAME_FORMATTED'] . ' <' . $userList[$userId]['EMAIL'] . '>' : $userList[$userId]['EMAIL']), 'AUTHOR' => $author['NAME_FORMATTED'], 'MESSAGE_TITLE' => $titleEmail, 'MESSAGE_TEXT' => $textEmail, 'MESSAGE_PATH' => $serverName . $params['URL'], ] ); } } } } } return false; }