12 const ID =
"Facebook";
24 if(!$this->entityOAuth)
31 $this->entityOAuth->setCode(
$code);
42 $urlPreviewEnable = Option::get(
'main',
'url_preview_enable',
'Y');
44 [
'facebook_appid', Loc::getMessage(
'socserv_fb_id'),
'', [
'text', 40]],
45 [
'facebook_appsecret', Loc::getMessage(
'socserv_fb_secret'),
'', [
'text', 40]],
46 [
'note' => Loc::getMessage(
'socserv_fb_sett_note1', [
'#URL#'=>$this->
getEntityOAuth()->GetRedirectURI()])],
49 if($urlPreviewEnable ===
'Y')
51 $result[] = [
'facebook_instagram_url_preview_enable', Loc::getMessage(
'socserv_fb_instagram_url_preview'),
'', [
'checkbox']];
52 $result[] = [
'note' => Loc::getMessage(
'socserv_fb_sett_note_oembed_2')];
68 : '<a href="javascript:void(0)
" onclick="BX.util.popup(\
''.
htmlspecialcharsbx(CUtil::JSEscape(
$url)).
'\', 580, 400)
" class="bx-ss-button facebook-button
"></a><span class="bx-spacer
"></span><span>'.$phrase.'</span>';
71 public function GetOnClickJs($arParams)
73 $url = $this->getUrl($arParams);
74 return "BX.util.popup(
'".CUtil::JSEscape($url)."', 680, 600)
";
77 public function getUrl($arParams)
81 if(IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME'))
83 $redirect_uri = static::CONTROLLER_URL."/redirect.php
";
84 $state = $this->getEntityOAuth()->GetRedirectURI()."?check_key=
".\CSocServAuthManager::getUniqueKey()."&state=
";
85 $backurl = $APPLICATION->GetCurPageParam('', array("logout
", "auth_service_error
", "auth_service_id
", "backurl
"));
86 $state .= urlencode("state=
".urlencode("backurl=
".urlencode($backurl).(isset($arParams['BACKURL']) ? '&redirect_url='.urlencode($arParams['BACKURL']) : '')));
90 $state = 'site_id='.SITE_ID.'&backurl='.urlencode($APPLICATION->GetCurPageParam('check_key='.\CSocServAuthManager::getUniqueKey(), array("logout
", "auth_service_error
", "auth_service_id
", "backurl
"))).(isset($arParams['BACKURL']) ? '&redirect_url='.urlencode($arParams['BACKURL']) : '');
91 $redirect_uri = $this->getEntityOAuth()->GetRedirectURI();
94 return $this->getEntityOAuth()->GetAuthUrl($redirect_uri, $state);
97 public function addScope($scope)
99 return $this->getEntityOAuth()->addScope($scope);
102 public function prepareUser($arFBUser, $short = false)
105 'EXTERNAL_AUTH_ID' => self::ID,
106 'XML_ID' => $arFBUser["id"],
107 'LOGIN' => static::LOGIN_PREFIX.$arFBUser["id"],
108 'EMAIL' => ($arFBUser["email
"] != '') ? $arFBUser["email
"] : '',
109 'NAME'=> $arFBUser["first_name
"],
110 'LAST_NAME'=> $arFBUser["last_name
"],
111 'OATOKEN' => $this->entityOAuth->getToken(),
112 'OATOKEN_EXPIRES' => $this->entityOAuth->getAccessTokenExpires(),
115 if(!$short && isset($arFBUser['picture']['data']['url']) && !$arFBUser['picture']['data']['is_silhouette'])
117 $picture_url = CFacebookInterface::GRAPH_URL.'/'.$arFBUser['id'].'/picture?type=large';
118 $temp_path = CFile::GetTempName('', 'picture.jpg');
120 $ob = new HttpClient(array(
123 $ob->download($picture_url, $temp_path);
125 $arPic = CFile::MakeFileArray($temp_path);
128 $arFields["PERSONAL_PHOTO
"] = $arPic;
132 if(isset($arFBUser['birthday']))
134 if($date = MakeTimeStamp($arFBUser['birthday'], "MM/DD/YYYY
"))
136 $arFields["PERSONAL_BIRTHDAY
"] = ConvertTimeStamp($date);
140 if(isset($arFBUser['gender']) && $arFBUser['gender'] != '')
142 if($arFBUser['gender'] == 'male')
144 $arFields["PERSONAL_GENDER
"] = 'M';
146 elseif($arFBUser['gender'] == 'female')
148 $arFields["PERSONAL_GENDER
"] = 'F';
152 $arFields["PERSONAL_WWW
"] = $this->getProfileUrl($arFBUser['id']);
156 $arFields["SITE_ID"] = SITE_ID;
162 public function Authorize()
165 $APPLICATION->RestartBuffer();
167 $authError = SOCSERV_AUTHORISATION_ERROR;
170 isset($_REQUEST["code
"]) && $_REQUEST["code
"] <> ''
171 && CSocServAuthManager::CheckUniqueKey()
174 if(IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME'))
176 $redirect_uri = static::CONTROLLER_URL."/redirect.php
";
180 $redirect_uri = $this->getEntityOAuth()->GetRedirectURI();
183 $this->entityOAuth = $this->getEntityOAuth($_REQUEST['code']);
184 if($this->entityOAuth->GetAccessToken($redirect_uri) !== false)
186 $arFBUser = $this->entityOAuth->GetCurrentUser();
187 if(is_array($arFBUser) && isset($arFBUser["id"]))
189 $arFields = self::prepareUser($arFBUser);
190 $authError = $this->AuthorizeUser($arFields);
195 $bSuccess = $authError === true;
197 $url = ($APPLICATION->GetCurDir() == "/login/
") ? "" : $APPLICATION->GetCurDir();
198 $aRemove = array("logout
", "auth_service_error
", "auth_service_id
", "code
", "error_reason
", "error
", "error_description
", "check_key
", "current_fieldset
");
200 if(isset($_REQUEST["state
"]) && $bSuccess)
203 parse_str($_REQUEST["state
"], $arState);
205 if(isset($arState['backurl']) || isset($arState['redirect_url']))
207 $url = !empty($arState['redirect_url']) ? $arState['redirect_url'] : $arState['backurl'];
208 if(mb_substr($url, 0, 1) !== "#
")
210 $parseUrl = parse_url($url);
212 $urlPath = $parseUrl["path"];
213 $arUrlQuery = explode('&', $parseUrl["query
"]);
215 foreach($arUrlQuery as $key => $value)
217 foreach($aRemove as $param)
219 if(mb_strpos($value, $param."=
") === 0)
221 unset($arUrlQuery[$key]);
227 $url = (!empty($arUrlQuery)) ? $urlPath.'?'.implode("&
", $arUrlQuery) : $urlPath;
232 if($authError === SOCSERV_REGISTRATION_DENY)
234 $url = (preg_match("/\?/
", $url)) ? $url.'&' : $url.'?';
235 $url .= 'auth_service_id='.self::ID.'&auth_service_error='.$authError;
237 elseif($bSuccess !== true)
239 $url = (isset($urlPath)) ? $urlPath.'?auth_service_id='.self::ID.'&auth_service_error='.$authError : $GLOBALS['APPLICATION']->GetCurPageParam(('auth_service_id='.self::ID.'&auth_service_error='.$authError), $aRemove);
242 if(CModule::IncludeModule("socialnetwork
") && mb_strpos($url, "current_fieldset=
") === false)
244 $url .= ((mb_strpos($url, "?
") === false) ? '?' : '&')."current_fieldset=SOCSERV
";
249 window.opener.location = '<?=CUtil::JSEscape($url)?>';
253 CMain::FinalActions();
256 public function setUser($userId)
258 $this->getEntityOAuth()->setUser($userId);
261 public function getFriendsList($limit, &$next)
263 if(IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME'))
265 $redirect_uri = self::CONTROLLER_URL."/redirect.php?redirect_to=
".urlencode(CSocServUtil::GetCurUrl('auth_service_id='.self::ID, array("code
")));
269 $redirect_uri = CSocServUtil::GetCurUrl('auth_service_id='.self::ID, array("code
"));
272 $fb = $this->getEntityOAuth();
273 if($fb->GetAccessToken($redirect_uri) !== false)
275 $res = $fb->GetCurrentUserFriends($limit, $next);
278 foreach($res['data'] as $key => $value)
280 $res['data'][$key]['uid'] = $value['id'];
281 $res['data'][$key]['url'] = $this->getProfileUrl($value['id']);
283 if(is_array($value['picture']))
285 if(!$value['picture']['data']['is_silhouette'])
287 $res['data'][$key]['picture'] = CFacebookInterface::GRAPH_URL.'/'.$value['id'].'/picture?type=large';
291 $res['data'][$key]['picture'] = '';
293 //$res['data'][$key]['picture'] = $value['picture']['data']['url'];
304 public function sendMessage($uid, $message)
306 $fb = new CFacebookInterface();
308 if(IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME'))
310 $redirect_uri = self::CONTROLLER_URL."/redirect.php?redirect_to=
".urlencode(CSocServUtil::GetCurUrl('auth_service_id='.self::ID, array("code
")));
314 $redirect_uri = CSocServUtil::GetCurUrl('auth_service_id='.self::ID, array("code
"));
317 if($fb->GetAccessToken($redirect_uri) !== false)
319 $res = $fb->sendMessage($uid, $message);
326 public function getMessages($uid)
328 $fb = new CFacebookInterface();
330 if(IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME'))
332 $redirect_uri = self::CONTROLLER_URL."/redirect.php?redirect_to=
".urlencode(CSocServUtil::GetCurUrl('auth_service_id='.self::ID, array("code
")));
336 $redirect_uri = CSocServUtil::GetCurUrl('auth_service_id='.self::ID, array("code
"));
339 if($fb->GetAccessToken($redirect_uri) !== false)
341 $res = $fb->getMessages($uid);
346 public function getProfileUrl($uid)
363 const AUTH_URL =
"https://www.facebook.com/dialog/oauth";
390 return \CHTTP::URN2URI(
"/bitrix/tools/oauth/facebook.php");
400 return self::AUTH_URL .
401 "?client_id=" . $this->appID .
402 "&redirect_uri=" . urlencode($redirect_uri) .
403 "&scope=".$this->getScopeEncode().
"&display=popup" .
404 ($state <>
'' ?
'&state=' . urlencode($state) :
'');
417 $this->access_token = $token[
"OATOKEN"];
418 $this->accessTokenExpires = $token[
"OATOKEN_EXPIRES"];
426 if($this->code ===
false)
431 $result =
CHTTP::sGetHeader(self::GRAPH_URL.
'/oauth/access_token?client_id='.$this->appID.
'&client_secret='.$this->appSecret.
'&redirect_uri='.urlencode($redirect_uri).
'&code='.urlencode($this->code),
array(), $this->httpTimeout);
438 $result =
CHTTP::sGetHeader(self::GRAPH_URL.
"/oauth/access_token?grant_type=fb_exchange_token&client_id=".$this->appID.
"&client_secret=".$this->appSecret.
"&fb_exchange_token=".
$arResult[
"access_token"],
array(), $this->httpTimeout);
440 $arResultLongLive = Json::decode(
$result);
442 if(isset($arResultLongLive[
"access_token"]) && $arResultLongLive[
"access_token"] <>
'')
444 $arResult[
"access_token"] = $arResultLongLive[
"access_token"];
445 $arResult[
"expires"] = isset($arResultLongLive[
"expires_in"]) ? $arResultLongLive[
"expires_in"] : 86400 * 60;
446 $_SESSION[
"OAUTH_DATA"] =
array(
447 "OATOKEN" => $arResultLongLive[
"access_token"],
448 "OATOKEN_EXPIRES" => time() + $arResultLongLive[
'expires'],
452 $this->access_token =
$arResult[
"access_token"];
453 $this->accessTokenExpires = time() +
$arResult[
"expires"];
458 if (isset($this->responseData[
'error']))
460 $this->responseData =
array(
461 'error' => $this->responseData[
'error'][
'type'],
462 'error_description' => $this->responseData[
'error'][
'message'],
471 if($this->access_token ===
false)
475 $http->setTimeout($this->httpTimeout);
477 $result = $http->get(self::GRAPH_URL.
'/me?access_token='.$this->access_token.
"&fields=picture,id,name,first_name,last_name,gender,email");
484 if($this->access_token ===
false)
488 $http->setTimeout($this->httpTimeout);
490 $result = $http->get(self::GRAPH_URL.
'/debug_token?input_token='.$this->access_token.
'&access_token='.$this->appID.
"|".$this->appSecret);
503 if($this->access_token ===
false)
508 $url = self::GRAPH_URL.
'/me/friends?access_token='.$this->access_token.
"&fields=picture,id,name,first_name,last_name,gender,email";
512 $url .=
"&limit=".intval($limit).
"&offset=".intval($next);
521 $http->setTimeout($this->httpTimeout);
527 if(is_array(
$result[
'paging']) && !empty(
$result[
'paging'][
'next']))
529 $next =
$result[
'paging'][
'next'];
541 $isSetOauthKeys =
true;
542 if(!$this->access_token || !$this->userId)
543 $isSetOauthKeys = self::SetOauthKeys($socServUserId);
545 if($isSetOauthKeys ===
false)
551 $arPost =
array(
"access_token" => $this->access_token,
"message"=>
$message);
555 return CUtil::JsObjectToPhp(
$result);
563 if($this->access_token ===
false)
566 $url = self::GRAPH_URL.
'/'.
$uid.
'/apprequests';
568 $arPost =
array(
"access_token" => $this->access_token,
"message"=>
$message);
571 return $ob->post(
$url, $arPost);
576 if($this->access_token ===
false)
582 return $ob->get(
$url);
585 private function SetOauthKeys($socServUserId)
587 $dbSocservUser = \Bitrix\Socialservices\UserTable::getList([
588 'filter' => [
'=ID' => $socServUserId],
589 'select' => [
"OATOKEN",
"XML_ID"]
591 while($arOauth = $dbSocservUser->fetch())
593 $this->access_token = $arOauth[
"OATOKEN"];
594 $this->userId = $arOauth[
"XML_ID"];
596 if(!$this->access_token || !$this->userId)
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
change_password_forgot_link login popup forget pas AUTH_GOTO_FORGOT_FORM login btn wrap change_password_button login popup link login popup return auth javascript
__construct($appID=false, $appSecret=false, $code=false)
SendFeed($socServUserId, $message, $messageId)
GetAccessToken($redirect_uri)
GetCurrentUserFriends($limit, &$next)
sendMessage($uid, $message)
GetAuthUrl($redirect_uri, $state='')
static sGetHeader($url, $arHeader=array(), $httpTimeout=0)
static sPostHeader($url, $arPostData, $arHeader=array(), $http_timeout=0)
getEntityOAuth($code=false)
static SendUserFeed($userId, $message, $messageId)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
<? if( $useEditor3):?>< tr class="heading">< td colspan="2"><? echo GetMessage("FILEMAN_OPTION_SPELL_SET");?></td ></tr ><? if(function_exists( 'pspell_config_create')):$use_pspell_checked=(COption::GetOptionString( $module_id, "use_pspell", "Y")=="Y") ? "checked" :"";?>< tr >< td valign="top">< label for="use_pspell"><?echo GetMessage("FILEMAN_OPTION_USE_PSPELL");?></label >< br >< a title="<?echo GetMessage("FILEMAN_OPTION_ADDISH_DICS_TITLE");?> http
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)