%PDF- %PDF-
Direktori : /proc/11976/task/11976/root/home/bitrix/www/local/php_interface/include/ |
Current File : //proc/11976/task/11976/root/home/bitrix/www/local/php_interface/include/onesignal_push.php |
<?php class OneSignalPusher { const API_KEY = 'YmM2OTA1MTYtNmMyNi00MGMwLWFmMzEtMjYyMDNhNzI3ZWMy'; const APP_ID = '7f092c8c-a775-4013-9789-d0555ed3fa82'; const GOOGLE_PROJECT_NUMBER = '226723241042'; // googleProjectNumber const URL = 'https://onesignal.com/api/v1/'; const IBLOCK_CASTING_ID = 12; const IOS = 'iOS'; const ANDROID = 'Android'; const SEX = array( 205 => 19, // Male 206 => 20, // Female ); /* * include ($_SERVER['DOCUMENT_ROOT'].'/local/php_interface/include/onesignal_push.php'); * echo OneSignalPusher::test(); * */ public static function test() { return self::send('Fucking Title', 'Lorem Ipsum is simply dummy text of the printing and typesetting industry', array( static::IOS => array('0caa35f20291b53db1bee8e30bff4c47f3ecbc9b2328fa203a6c20770a432879'), static::ANDROID => array(), )); } public static function sendNewCasting($castingID, $isDebug = false) { if (intval($castingID) > 0) { $dbCasting = CIBlockElement::GetList(array(), array('ID' => $castingID, 'IBLOCK_ID' => static::IBLOCK_CASTING_ID, 'SHOW_NEW' => 'Y'), false, false, array('ID', 'NAME', 'PROPERTY_CITY', 'PROPERTY_SEX')); if ($arCasting = $dbCasting->Fetch()) { $arFilter = array(); if (intval($arCasting['PROPERTY_CITY_VALUE']) > 0) { $arFilter['PROPERTY_REGION'] = $arCasting['PROPERTY_CITY_VALUE']; } if (1 == count($arCasting['PROPERTY_SEX_VALUE'])) { $arFilter['PROPERTY_SEX'] = static::SEX[array_keys($arCasting['PROPERTY_SEX_VALUE'])[0]]; } return self::sendToAll( [ 'ru' => 'Для Вас добавлен новый кастинг', 'en' => 'Here’s a new casting just for you!', ], [ 'ru' => $arCasting['NAME'], 'en' => $arCasting['NAME'], ], $arFilter, $isDebug ); } } return false; } public static function sendToAll($arHeadings, $arContents, $arProfileFilter = array(), $isDebug = false) { $arResult = array(); $bProfileFilter = count($arProfileFilter) > 0; if ($bProfileFilter) { $arProfileFilter = array_merge($arProfileFilter, array('IBLOCK_ID' => IBLOCK_PROFILE_ID, 'ACTIVE' => 'Y')); } $by = 'id'; $order = 'asc'; $rsUsers = CUser::GetList($by, $order, array( 'ACTIVE' => 'Y', // '!UF_LANG'=>false, берем всех array( 'LOGIC' => 'OR', array('!UF_TOKEN' => false), array('!UF_ANDROID_REG' => false), ), ), array('SELECT' => array('UF_TOKEN', 'UF_ANDROID_REG', 'UF_LANG')) ); while ($arUser = $rsUsers->Fetch()) { if ($bProfileFilter) { $arProfileFilter['PROPERTY_ACCOUNT'] = $arUser['ID']; $dbProfile = CIBlockElement::GetList(array(), $arProfileFilter, false, false, array('ID', 'IBLOCK_ID', 'PROPERTY_COUNTRY')); if ($arProfile = $dbProfile->Fetch()) { if (!in_array($arUser['UF_LANG'], ['ru', 'en'])) { $arUser['UF_LANG'] = 21 == $arProfile['PROPERTY_COUNTRY_VALUE'] ? 'ru' : 'en'; } if (isset($arHeadings[$arUser['UF_LANG']])) { if (strlen($arUser['UF_TOKEN']) > 0) { $arResult[$arUser['UF_LANG']][static::IOS][] = $arUser['UF_TOKEN']; } if (strlen($arUser['UF_ANDROID_REG']) > 0) { $arResult[$arUser['UF_LANG']][static::ANDROID][] = $arUser['UF_ANDROID_REG']; } } } } } if (!$isDebug) { foreach ($arResult as $lang => $arDeviceToken) { static::send($arHeadings[$lang], $arContents[$lang], $arDeviceToken); } } else { print_r($arProfileFilter); print_r($arResult); } return true; } /** * Отправляет push-уведомления для конкретного пользователя. * * require_once($_SERVER["DOCUMENT_ROOT"].'/local/php_interface/include/onesignal_push.php'); * OneSignalPusher::sendMessage(780, 'Moderate result', 'Your account is...'); * * @param $userID * @param string $head * @param string $content * @param bool $arAdditional */ public static function sendMessage($userID, $head = '', $content = '', $arAdditional = false) { if (false !== strpos($userID, 'user_')) { $userID = explode('_', $userID)[1]; } $arDeviceToken = [ static::IOS => [], static::ANDROID => [], ]; $rsUser = CUser::GetByID($userID); if ($arUser = $rsUser->Fetch()) { if (strlen($arUser['UF_TOKEN']) > 0) { $arDeviceToken[static::IOS][] = $arUser['UF_TOKEN']; } if (strlen($arUser['UF_ANDROID_REG']) > 0) { $arDeviceToken[static::ANDROID][] = $arUser['UF_ANDROID_REG']; } } static::send($head, $content, $arDeviceToken, $arAdditional); } public static function send($heading, $content, $arDeviceToken, $arAdditional = false) { $fields = array( 'app_id' => static::APP_ID, 'headings' => array('en' => $heading), 'contents' => array('en' => $content), 'include_ios_tokens' => $arDeviceToken[static::IOS], 'include_android_reg_ids' => $arDeviceToken[static::ANDROID], 'ios_badgeType' => 'Increase', 'ios_badgeCount' => 1, ); if (false !== $arAdditional) { $fields = array_merge($fields, $arAdditional); } // AddMessage2Log(print_r($arDeviceToken,true)); $fields = json_encode($fields); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, static::URL.'notifications'); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Basic '.static::API_KEY)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($ch); curl_close($ch); return $response; } }