171 lines
7.2 KiB
PHP
171 lines
7.2 KiB
PHP
<?php
|
|
/**
|
|
* Special prefs handling for the 'facebookmanagement' preference.
|
|
*
|
|
* Copyright 2012-2017 Horde LLC (http://www.horde.org/)
|
|
*
|
|
* See the enclosed file COPYING for license information (GPL). If you
|
|
* did not receive this file, see http://www.horde.org/licenses/lgpl.
|
|
*
|
|
* @author Michael Slusarz <slusarz@horde.org>
|
|
* @category Horde
|
|
* @license http://www.horde.org/licenses/lgpl LGPL
|
|
* @package Horde
|
|
*/
|
|
class Horde_Prefs_Special_Facebook implements Horde_Core_Prefs_Ui_Special
|
|
{
|
|
/**
|
|
*/
|
|
public function init(Horde_Core_Prefs_Ui $ui)
|
|
{
|
|
}
|
|
|
|
/**
|
|
*/
|
|
public function display(Horde_Core_Prefs_Ui $ui)
|
|
{
|
|
global $injector, $notification, $page_output, $prefs, $registry;
|
|
|
|
try {
|
|
$facebook = $injector->getInstance('Horde_Service_Facebook');
|
|
} catch (Horde_Exception $e) {
|
|
return $e->getMessage();
|
|
}
|
|
|
|
$page_output->addThemeStylesheet('facebook.css');
|
|
|
|
$view = new Horde_View(array(
|
|
'templatePath' => HORDE_TEMPLATES . '/prefs'
|
|
));
|
|
|
|
$view->app_name = $registry->get('name', 'horde');
|
|
|
|
// Ensure we have authorized horde.
|
|
try {
|
|
$session_uid = $facebook->auth->getLoggedInUser();
|
|
$fbp = unserialize($prefs->getValue('facebook'));
|
|
$uid = $fbp['uid'];
|
|
// Verify the userid matches the one we expect for the session
|
|
if ($fbp['uid'] != $session_uid) {
|
|
$haveSession = false;
|
|
} else {
|
|
$haveSession = true;
|
|
}
|
|
} catch (Horde_Service_Facebook_Exception $e) {
|
|
Horde::log($e->getMessage(), 'ERR');
|
|
$haveSession = false;
|
|
$prefs->setValue('facebook', serialize(array('uid' => '', 'sid' => 0)));
|
|
}
|
|
|
|
// Get a token generator
|
|
$token = $injector->getInstance('Horde_Token');
|
|
|
|
// We have a session, build the template.
|
|
if (!empty($haveSession)) {
|
|
try {
|
|
$perms = $facebook->users->getAppPermissions();
|
|
$view->have_publish = !empty($perms[Horde_Service_Facebook_Auth::EXTEND_PERMS_PUBLISHSTREAM]);
|
|
$view->have_read = !empty($perms[Horde_Service_Facebook_Auth::EXTEND_PERMS_READSTREAM]);
|
|
$view->have_friends = !empty($perms[Horde_Service_Facebook_Auth::EXTEND_PERMS_FRIENDS_ABOUT]);
|
|
} catch (Horde_Service_Facebook_Exception $e) {
|
|
$notification->push($e->getMessage(), 'horde.error');
|
|
}
|
|
|
|
// Get user info. FB recommends using the FB photo and styling.
|
|
$fql = 'SELECT first_name, last_name, status, pic_with_logo, current_location FROM user WHERE uid IN (' . $uid . ')';
|
|
try {
|
|
$user_info = $facebook->fql->run($fql);
|
|
} catch (Horde_Service_Facebook_Exception $e) {
|
|
$notification->push(_("Temporarily unable to connect with Facebook, Please try again."), 'horde.alert');
|
|
}
|
|
|
|
// Get a state token.
|
|
$state = $token->get();
|
|
|
|
// FB Perms links
|
|
$cburl = Horde::url('services/facebook', true);
|
|
$view->have_session = true;
|
|
$view->user_pic_url = $user_info[0]['pic_with_logo'];
|
|
$view->user_name = $user_info[0]['first_name'] . ' ' . $user_info[0]['last_name'];
|
|
|
|
$url = $facebook->auth->getOAuthUrl($cburl, array(Horde_Service_Facebook_Auth::EXTEND_PERMS_PUBLISHSTREAM));
|
|
$view->publish_url = $url;
|
|
|
|
// User read perms
|
|
$url = $facebook->auth->getOAuthUrl($cburl, array(
|
|
Horde_Service_Facebook_Auth::EXTEND_PERMS_READSTREAM,
|
|
Horde_Service_Facebook_Auth::EXTEND_PERMS_USER_ABOUT,
|
|
Horde_Service_Facebook_Auth::EXTEND_PERMS_USER_BIRTHDAY,
|
|
Horde_Service_Facebook_Auth::EXTEND_PERMS_USER_EVENTS,
|
|
Horde_Service_Facebook_Auth::EXTEND_PERMS_USER_HOMETOWN,
|
|
Horde_Service_Facebook_Auth::EXTEND_PERMS_USER_LOCATION,
|
|
Horde_Service_Facebook_Auth::EXTEND_PERMS_USER_PHOTOS), $state);
|
|
$view->read_url = Horde::signQueryString($url);
|
|
|
|
// Friend read perms
|
|
$url = $facebook->auth->getOAuthUrl($cburl, array(
|
|
Horde_Service_Facebook_Auth::EXTEND_PERMS_FRIENDS_ABOUT,
|
|
Horde_Service_Facebook_Auth::EXTEND_PERMS_FRIENDS_BIRTHDAY,
|
|
Horde_Service_Facebook_Auth::EXTEND_PERMS_FRIENDS_HOMETOWN,
|
|
Horde_Service_Facebook_Auth::EXTEND_PERMS_FRIENDS_LOCATION,
|
|
Horde_Service_Facebook_Auth::EXTEND_PERMS_FRIENDS_PHOTOS), $state);
|
|
$view->friends_url = Horde::signQueryString($url);
|
|
} else {
|
|
/* No existing session */
|
|
$state = $token->get();
|
|
$view->authUrl = $facebook->auth->getOAuthUrl(Horde::url('services/facebook', true), array(), $state);
|
|
}
|
|
|
|
return $view->render('facebook');
|
|
}
|
|
|
|
/**
|
|
*/
|
|
public function update(Horde_Core_Prefs_Ui $ui)
|
|
{
|
|
global $injector, $notification, $prefs;
|
|
|
|
try {
|
|
$facebook = $injector->getInstance('Horde_Service_Facebook');
|
|
} catch (Horde_Exception $e) {
|
|
return $e->getMessage();
|
|
}
|
|
try {
|
|
switch ($ui->vars->fbactionID) {
|
|
case 'revokeApplication':
|
|
$prefs->setValue(
|
|
'facebook',
|
|
array('uid' => '', 'sid' => ''));
|
|
break;
|
|
|
|
case 'revokePublish':
|
|
$facebook->auth->revokeExtendedPermission(Horde_Service_Facebook_Auth::EXTEND_PERMS_PUBLISHSTREAM);
|
|
break;
|
|
|
|
case 'revokeRead':
|
|
$facebook->auth->revokeExtendedPermission(Horde_Service_Facebook_Auth::EXTEND_PERMS_READSTREAM);
|
|
$facebook->auth->revokeExtendedPermission(Horde_Service_Facebook_Auth::EXTEND_PERMS_USER_ABOUT);
|
|
$facebook->auth->revokeExtendedPermission(Horde_Service_Facebook_Auth::EXTEND_PERMS_USER_HOMETOWN);
|
|
$facebook->auth->revokeExtendedPermission(Horde_Service_Facebook_Auth::EXTEND_PERMS_USER_LOCATION);
|
|
$facebook->auth->revokeExtendedPermission(Horde_Service_Facebook_Auth::EXTEND_PERMS_USER_PHOTOS);
|
|
$facebook->auth->revokeExtendedPermission(Horde_Service_Facebook_Auth::EXTEND_PERMS_USER_BIRTHDAY);
|
|
$facebook->auth->revokeExtendedPermission(Horde_Service_Facebook_Auth::EXTEND_PERMS_USER_EVENTS);
|
|
break;
|
|
|
|
case 'revokeFriends':
|
|
$facebook->auth->revokeExtendedPermission(Horde_Service_Facebook_Auth::EXTEND_PERMS_FRIENDS_ABOUT);
|
|
$facebook->auth->revokeExtendedPermission(Horde_Service_Facebook_Auth::EXTEND_PERMS_FRIENDS_BIRTHDAY);
|
|
$facebook->auth->revokeExtendedPermission(Horde_Service_Facebook_Auth::EXTEND_PERMS_FRIENDS_HOMETOWN);
|
|
$facebook->auth->revokeExtendedPermission(Horde_Service_Facebook_Auth::EXTEND_PERMS_FRIENDS_LOCATION);
|
|
$facebook->auth->revokeExtendedPermission(Horde_Service_Facebook_Auth::EXTEND_PERMS_FRIENDS_PHOTOS);
|
|
break;
|
|
}
|
|
} catch (Horde_Service_Facebook_Exception $e) {
|
|
$notification->push($e->getMessage(), 'horde.error');
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
}
|