%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /proc/11976/task/11976/root/home/bitrix/www/local/php_interface/include/
Upload File :
Create Path :
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;
    }
}

Zerion Mini Shell 1.0