Пример #1
0
 protected function _getFacebookPagesOrGroups($getPages = true)
 {
     $visitor = XenForo_Visitor::getInstance();
     $facebookUid = bdSocialShare_Helper_Common::getAuthId($visitor->toArray(), 'facebook');
     if (empty($facebookUid)) {
         return false;
     }
     $auth = $this->getModelFromCache('XenForo_Model_UserExternal')->getExternalAuthAssociation('facebook', $facebookUid);
     if (empty($auth)) {
         return false;
     }
     $extraData = bdSocialShare_Helper_Common::unserializeOrFalse($auth, 'extra_data');
     if (empty($extraData) or empty($extraData['token'])) {
         return false;
     }
     $accessToken = $extraData['token'];
     if ($getPages) {
         return bdSocialShare_Helper_Facebook::getPages($accessToken);
     } else {
         return bdSocialShare_Helper_Facebook::getGroups($accessToken);
     }
 }
Пример #2
0
 public function actionSocialShareAddMoreFacebook()
 {
     $this->assertAdminPermission('option');
     if (!bdSocialShare_Option::hasPermissionFacebook()) {
         return $this->responseError(new XenForo_Phrase('bdsocialshare_facebook_must_be_configured'));
     }
     $inputToken = $this->_input->filterSingle('token', XenForo_Input::STRING);
     /* @var $facebookModel bdSocialShare_Model_Facebook */
     $facebookModel = $this->getModelFromCache('bdSocialShare_Model_Facebook');
     $existingAccounts = $facebookModel->getAccounts();
     if (empty($inputToken)) {
         $inputCode = $this->_input->filterSingle('code', XenForo_Input::STRING);
         $redirectUri = XenForo_Link::buildAdminLink('full:tools/social-share/add-more/facebook');
         if (empty($inputCode)) {
             $requestUrl = XenForo_Helper_Facebook::getFacebookRequestUrl($redirectUri);
             $requestUrl = preg_replace('#&scope=#', '$0publish_actions,manage_pages,user_groups,', $requestUrl);
             return $this->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_UPDATED, $requestUrl);
         }
         $token = XenForo_Helper_Facebook::getAccessTokenFromCode($inputCode, $redirectUri);
         $fbError = XenForo_Helper_Facebook::getFacebookRequestErrorInfo($token, 'access_token');
         if (!empty($fbError)) {
             return $this->responseError($fbError);
         }
         $fbToken = $token['access_token'];
     } else {
         $fbToken = $inputToken;
     }
     if ($this->isConfirmedPost()) {
         $accounts = $this->_input->filterSingle('accounts', XenForo_Input::ARRAY_SIMPLE);
         $newAccounts = $existingAccounts;
         foreach ($accounts as $accountId => $account) {
             if (!empty($account['add'])) {
                 $newAccounts[$accountId] = $account;
             } elseif (isset($newAccounts[$accountId])) {
                 unset($newAccounts[$accountId]);
             }
         }
         $facebookModel->setAccounts($newAccounts);
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_UPDATED, XenForo_Link::buildAdminLink('tools/social-share/facebook-targets'));
     }
     $fbUser = XenForo_Helper_Facebook::getUserInfo($fbToken);
     $fbError = XenForo_Helper_Facebook::getFacebookRequestErrorInfo($fbUser, 'id');
     if (!empty($fbError)) {
         return $this->responseError($fbError);
     }
     $accounts = array();
     $accounts[$fbUser['id']] = array('target_id' => bdSocialShare_Helper_Common::encryptTargetId($fbUser['name'], $fbToken), 'name' => $fbUser['name'], 'label' => new XenForo_Phrase('bdsocialshare_your_facebook_timeline'));
     $pages = bdSocialShare_Helper_Facebook::getPages($fbToken);
     if (!empty($pages)) {
         foreach ($pages as $pageId => $page) {
             $accounts[$pageId] = $page;
             $accounts[$pageId]['label'] = new XenForo_Phrase('bdsocialshare_facebook_page');
         }
     }
     $groups = bdSocialShare_Helper_Facebook::getGroups($fbToken);
     if (!empty($groups)) {
         foreach ($groups as $groupId => $group) {
             $accounts[$groupId] = $group;
             $accounts[$groupId]['label'] = new XenForo_Phrase('bdsocialshare_facebook_group');
         }
     }
     foreach ($accounts as $accountId => &$accountRef) {
         if (isset($existingAccounts[$accountId])) {
             $accountRef['selected'] = 1;
         }
     }
     $viewParams = array('type' => 'facebook', 'token' => $fbToken, 'accounts' => $accounts);
     return $this->responseView('bdSocialShare_ViewAdmin_Tools_AddMore', 'bdsocialshare_tools_add_more', $viewParams);
 }