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); } } } }