Beispiel #1
0
 protected function _bdApiConsumer_getExternalAlertsForUser(array $viewingUser, $alwaysCheck)
 {
     /** @var bdApiConsumer_XenForo_Model_UserExternal $userExternalModel */
     $userExternalModel = $this->getModelFromCache('XenForo_Model_UserExternal');
     $auths = $userExternalModel->bdApiConsumer_getExternalAuthAssociations($viewingUser['user_id']);
     foreach ($auths as &$authRef) {
         if (!XenForo_Model_Alert::userReceivesAlert($viewingUser, 'bdapi_consumer', $authRef['provider'])) {
             // user opted out for this provider
             continue;
         }
         if (!$alwaysCheck && empty($auth['extra_data']['notification_subscription_callback'])) {
             // do not check to save resources
             continue;
         }
         $provider = bdApiConsumer_Option::getProviderByCode($authRef['provider']);
         if (empty($provider)) {
             continue;
         }
         $accessToken = $userExternalModel->bdApiConsumer_getAccessTokenFromAuth($provider, $authRef);
         if (empty($accessToken)) {
             continue;
         }
         $notifications = bdApiConsumer_Helper_Api::getNotifications($provider, $accessToken);
         $alertUser = true;
         if (!empty($notifications['_headerLinkHub'])) {
             if (empty($notifications['subscription_callback'])) {
                 // subscribe to future notifications
                 if (bdApiConsumer_Helper_Api::postSubscription($provider, $accessToken, $notifications['_headerLinkHub'])) {
                     $authRef['extra_data']['notification_subscription_callback'] = 1;
                     $userExternalModel->bdApiConsumer_updateExternalAuthAssociation($provider, $authRef['provider_key'], $authRef['user_id'], $authRef['extra_data']);
                 }
             } else {
                 // subscribed, do not alert user to avoid duplicates
                 $alertUser = false;
             }
         }
         if ($alertUser && !empty($notifications['notifications'])) {
             // server does not support subscription, we will just put all notifications into
             // user alerts then
             foreach ($notifications['notifications'] as $notification) {
                 $this->bdApiConsumer_alertUser($provider, $viewingUser, $notification);
             }
         }
     }
 }