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