%PDF- %PDF-
| Direktori : /proc/self/root/home/bitrix/www/local/php_interface/include/ |
| Current File : //proc/self/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;
}
}