mirror of
https://github.com/e107inc/e107.git
synced 2025-08-06 06:38:00 +02:00
Facebook files.
This commit is contained in:
88
e107_plugins/facebook/e_meta.php
Normal file
88
e107_plugins/facebook/e_meta.php
Normal file
@@ -0,0 +1,88 @@
|
||||
<?php
|
||||
if (!defined('e107_INIT')) { exit; }
|
||||
|
||||
/**
|
||||
* we need a full wide page, no sidebar,
|
||||
* where place the Facebook Invite Friends Flash Object,
|
||||
* this Object can't be styled so... put it in CUSTOMPAGES
|
||||
*
|
||||
* but we can use a popup page instead ?
|
||||
*/
|
||||
|
||||
$CUSTOMPAGES = array_push( explode( ' ' , $CUSTOMPAGES ) , ' facebook.php' );
|
||||
|
||||
|
||||
include_once (e_PLUGIN.'facebook/facebook_function.php');
|
||||
|
||||
|
||||
//echo '<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js"></script>';
|
||||
|
||||
|
||||
echo '<link rel="stylesheet" href="'.e_PLUGIN.'facebook/facebook.css" type="text/css" />';
|
||||
|
||||
|
||||
/**
|
||||
* if we are in comment.php page add "publish_to_facebook" checkbox to the form
|
||||
*
|
||||
*/
|
||||
|
||||
if( ( ( e_PAGE == "comment.php") || ( eregi( 'extend' , e_QUERY ) ) ) && (is_fb()))
|
||||
{
|
||||
|
||||
|
||||
|
||||
echo '<script type="text/javascript">
|
||||
document.observe("dom:loaded", function() {
|
||||
|
||||
var commentbutton = document.getElementsByName("commentsubmit")[0];
|
||||
|
||||
commentbutton.insert( {"after" : " <img src=\"http://static.ak.fbcdn.net/images/icons/favicon.gif\" /><input type=\"checkbox\" name=\"publish_to_facebook\" checked /> Publish Comment to Facebook"}) }); </script>';
|
||||
|
||||
onloadRegister('facebook_show_feed_checkbox();');
|
||||
|
||||
/**
|
||||
* Simple Pure Javascript code , do same thing of prototype!
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
echo '
|
||||
var commentbutton = document.getElementsByName("commentsubmit")[0];
|
||||
|
||||
var checkbox = document.createElement("input");
|
||||
checkbox.type = "checkbox";
|
||||
checkbox.name = "publish_to_facebook";
|
||||
checkbox.defaultChecked = true;
|
||||
|
||||
var txt = document.createTextNode("Publish Comment to Facebook");
|
||||
|
||||
var img = document.createElement("img");
|
||||
img.setAttribute("src", "http://static.ak.fbcdn.net/images/icons/favicon.gif");
|
||||
img.setAttribute("alt", "");
|
||||
img.setAttribute("style", "padding-left:5px");
|
||||
|
||||
commentbutton.parentNode.insertBefore(img,commentbutton.nextSibling);
|
||||
img.parentNode.insertBefore(checkbox,img.nextSibling);
|
||||
checkbox.parentNode.insertBefore(txt,checkbox.nextSibling);
|
||||
';
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
* if we are in the signup page add the Facebook Connect Button
|
||||
*
|
||||
*/
|
||||
|
||||
}
|
||||
elseif(e_PAGE == "signup.php")
|
||||
{
|
||||
echo '<script type="text/javascript">
|
||||
document.observe("dom:loaded", function() {
|
||||
$("signupform").insert(
|
||||
{"before" : "<center>OR | Login by using Facebook<br /><br /><a href=\"#\" onclick=\"FB.Connect.requireSession(); return false;\" ><img id=\"fb_login_image\" src=\"http://static.ak.fbcdn.net/images/fbconnect/login-buttons/connect_light_medium_long.gif\" alt=\"Connect\"/></a><fb:login-button size=\"medium\" background=\"light\" length=\"long\" onlogin=\"facebook_onlogin_ready();\"></fb:login-button><br /><br /></center>"})
|
||||
|
||||
});
|
||||
</script>';
|
||||
|
||||
}
|
||||
?>
|
159
e107_plugins/facebook/e_module.php
Normal file
159
e107_plugins/facebook/e_module.php
Normal file
@@ -0,0 +1,159 @@
|
||||
<?php
|
||||
//error_reporting(E_ALL);
|
||||
|
||||
|
||||
include_once ( e_PLUGIN . 'facebook/facebook_function.php' );
|
||||
|
||||
|
||||
prevent_cache_headers();
|
||||
|
||||
/**
|
||||
* just define facebook XMLNS
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
define(XMLNS,"xmlns:fb='http://www.facebook.com/2008/fbml'");
|
||||
|
||||
/**
|
||||
* Ensure "Make entering an email address optional" is setted to "ON";
|
||||
*
|
||||
*/
|
||||
|
||||
global $pref;
|
||||
|
||||
if ( $pref['disable_emailcheck'] == 0 ) {
|
||||
|
||||
$pref['disable_emailcheck'] = 1;
|
||||
|
||||
save_prefs();
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* when clicked it insert a new User
|
||||
*
|
||||
*/
|
||||
|
||||
if ( e_QUERY == 'facebook' ) {
|
||||
|
||||
Fb_Connect_Me();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* simple Re-Login after logged out from e107
|
||||
*
|
||||
*/
|
||||
|
||||
if ( e_QUERY == 'login' ) {
|
||||
|
||||
Fb_LogIn();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* simulate Facebook logOut when logged out from e107
|
||||
*
|
||||
*/
|
||||
|
||||
if ( e_QUERY == 'logout') {
|
||||
|
||||
Fb_LogOut();
|
||||
|
||||
}
|
||||
|
||||
|
||||
if ( e_QUERY == 'facebook_switch') {
|
||||
|
||||
Switch_Facebook_User();
|
||||
|
||||
}
|
||||
|
||||
|
||||
if ( e_QUERY == 'facebook_delete') {
|
||||
|
||||
Delete_Duplicate_Facebook_User();
|
||||
|
||||
}
|
||||
|
||||
function theme_foot(){
|
||||
|
||||
|
||||
/**
|
||||
* the init js needs to be at the bottom of the document, within the </body> tag
|
||||
* this is so that any xfbml elements are already rendered by the time the xfbml
|
||||
* rendering takes over. otherwise, it might miss some elements in the doc.
|
||||
*
|
||||
*/
|
||||
|
||||
global $onload_js;
|
||||
|
||||
$text .= render_facebook_init_js( is_fb() );
|
||||
// Print out all onload function calls
|
||||
|
||||
if ( $onload_js ) {
|
||||
|
||||
$text .= '<script type="text/javascript">'
|
||||
.'window.onload = function() { ' . $onload_js . ' };'
|
||||
.'</script>';
|
||||
|
||||
}
|
||||
return $text;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Facebook Deprecated get Feed Story trough Template Bundle 2009
|
||||
*
|
||||
|
||||
function getTemplateData() {
|
||||
|
||||
$template_data = array(
|
||||
'post_title' => $_POST[ 'subject' ],
|
||||
'body' => $_POST[ 'comment' ],
|
||||
'body_short' => $_POST[ 'comment' ],
|
||||
'post_permalink' => e_SELF,
|
||||
'blogname' => SITENAME,
|
||||
'blogdesc' => SITEDESCRIPTION,
|
||||
'siteurl' => SITEURLBASE);
|
||||
|
||||
return $template_data;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* get Feed Story infos to send to Facebook
|
||||
*
|
||||
* the new way FB.Connect.streamPublish();
|
||||
*
|
||||
*/
|
||||
|
||||
function getStreamToPublish() {
|
||||
//global $pref;
|
||||
//$stream = facebook_client()->api_client->stream_get('','','','','',''.$pref[ 'Facebook_App-Bundle' ].'','');
|
||||
|
||||
// $stream = facebook_client()->api_client->stream_publish($_POST[ 'comment' ]);
|
||||
|
||||
return $_POST[ 'comment' ];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* if comment is submitted and "publish_to_facebook" is checked send a copy to Facebook
|
||||
*
|
||||
*/
|
||||
|
||||
if ( isset( $_POST[ 'commentsubmit' ] ) && ( $_POST[ 'publish_to_facebook' ] == true ) ) {
|
||||
|
||||
register_feed_form_js();
|
||||
|
||||
}
|
||||
|
||||
?>
|
602
e107_plugins/facebook/facebook-client/facebook.php
Normal file
602
e107_plugins/facebook/facebook-client/facebook.php
Normal file
@@ -0,0 +1,602 @@
|
||||
<?php
|
||||
// Copyright 2004-2009 Facebook. All Rights Reserved.
|
||||
//
|
||||
// +---------------------------------------------------------------------------+
|
||||
// | Facebook Platform PHP5 client |
|
||||
// +---------------------------------------------------------------------------+
|
||||
// | Copyright (c) 2007 Facebook, Inc. |
|
||||
// | All rights reserved. |
|
||||
// | |
|
||||
// | Redistribution and use in source and binary forms, with or without |
|
||||
// | modification, are permitted provided that the following conditions |
|
||||
// | are met: |
|
||||
// | |
|
||||
// | 1. Redistributions of source code must retain the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer. |
|
||||
// | 2. Redistributions in binary form must reproduce the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer in the |
|
||||
// | documentation and/or other materials provided with the distribution. |
|
||||
// | |
|
||||
// | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
|
||||
// | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
|
||||
// | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
|
||||
// | IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
|
||||
// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
|
||||
// | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
|
||||
// | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
||||
// +---------------------------------------------------------------------------+
|
||||
// | For help with this library, contact developers-help@facebook.com |
|
||||
// +---------------------------------------------------------------------------+
|
||||
|
||||
include_once 'facebookapi_php5_restlib.php';
|
||||
|
||||
define('FACEBOOK_API_VALIDATION_ERROR', 1);
|
||||
class Facebook {
|
||||
public $api_client;
|
||||
public $api_key;
|
||||
public $secret;
|
||||
public $generate_session_secret;
|
||||
public $session_expires;
|
||||
|
||||
public $fb_params;
|
||||
public $user;
|
||||
public $profile_user;
|
||||
public $canvas_user;
|
||||
protected $base_domain;
|
||||
/*
|
||||
* Create a Facebook client like this:
|
||||
*
|
||||
* $fb = new Facebook(API_KEY, SECRET);
|
||||
*
|
||||
* This will automatically pull in any parameters, validate them against the
|
||||
* session signature, and chuck them in the public $fb_params member variable.
|
||||
*
|
||||
* @param api_key your Developer API key
|
||||
* @param secret your Developer API secret
|
||||
* @param generate_session_secret whether to automatically generate a session
|
||||
* if the user doesn't have one, but
|
||||
* there is an auth token present in the url,
|
||||
*/
|
||||
public function __construct($api_key, $secret, $generate_session_secret=false) {
|
||||
$this->api_key = $api_key;
|
||||
$this->secret = $secret;
|
||||
$this->generate_session_secret = $generate_session_secret;
|
||||
$this->api_client = new FacebookRestClient($api_key, $secret, null);
|
||||
$this->validate_fb_params();
|
||||
|
||||
// Set the default user id for methods that allow the caller to
|
||||
// pass an explicit uid instead of using a session key.
|
||||
$defaultUser = null;
|
||||
if ($this->user) {
|
||||
$defaultUser = $this->user;
|
||||
} else if ($this->profile_user) {
|
||||
$defaultUser = $this->profile_user;
|
||||
} else if ($this->canvas_user) {
|
||||
$defaultUser = $this->canvas_user;
|
||||
}
|
||||
|
||||
$this->api_client->set_user($defaultUser);
|
||||
|
||||
|
||||
if (isset($this->fb_params['friends'])) {
|
||||
$this->api_client->friends_list = explode(',', $this->fb_params['friends']);
|
||||
}
|
||||
if (isset($this->fb_params['added'])) {
|
||||
$this->api_client->added = $this->fb_params['added'];
|
||||
}
|
||||
if (isset($this->fb_params['canvas_user'])) {
|
||||
$this->api_client->canvas_user = $this->fb_params['canvas_user'];
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Validates that the parameters passed in were sent from Facebook. It does so
|
||||
* by validating that the signature matches one that could only be generated
|
||||
* by using your application's secret key.
|
||||
*
|
||||
* Facebook-provided parameters will come from $_POST, $_GET, or $_COOKIE,
|
||||
* in that order. $_POST and $_GET are always more up-to-date than cookies,
|
||||
* so we prefer those if they are available.
|
||||
*
|
||||
* For nitty-gritty details of when each of these is used, check out
|
||||
* http://wiki.developers.facebook.com/index.php/Verifying_The_Signature
|
||||
*
|
||||
* @param bool resolve_auth_token convert an auth token into a session
|
||||
*/
|
||||
public function validate_fb_params($resolve_auth_token=true) {
|
||||
$this->fb_params = $this->get_valid_fb_params($_POST, 48 * 3600, 'fb_sig');
|
||||
|
||||
// note that with preload FQL, it's possible to receive POST params in
|
||||
// addition to GET, so use a different prefix to differentiate them
|
||||
if (!$this->fb_params) {
|
||||
$fb_params = $this->get_valid_fb_params($_GET, 48 * 3600, 'fb_sig');
|
||||
$fb_post_params = $this->get_valid_fb_params($_POST, 48 * 3600, 'fb_post_sig');
|
||||
$this->fb_params = array_merge($fb_params, $fb_post_params);
|
||||
}
|
||||
|
||||
// Okay, something came in via POST or GET
|
||||
if ($this->fb_params) {
|
||||
$user = isset($this->fb_params['user']) ?
|
||||
$this->fb_params['user'] : null;
|
||||
$this->profile_user = isset($this->fb_params['profile_user']) ?
|
||||
$this->fb_params['profile_user'] : null;
|
||||
$this->canvas_user = isset($this->fb_params['canvas_user']) ?
|
||||
$this->fb_params['canvas_user'] : null;
|
||||
$this->base_domain = isset($this->fb_params['base_domain']) ?
|
||||
$this->fb_params['base_domain'] : null;
|
||||
|
||||
if (isset($this->fb_params['session_key'])) {
|
||||
$session_key = $this->fb_params['session_key'];
|
||||
} else if (isset($this->fb_params['profile_session_key'])) {
|
||||
$session_key = $this->fb_params['profile_session_key'];
|
||||
} else {
|
||||
$session_key = null;
|
||||
}
|
||||
$expires = isset($this->fb_params['expires']) ?
|
||||
$this->fb_params['expires'] : null;
|
||||
$this->set_user($user,
|
||||
$session_key,
|
||||
$expires);
|
||||
}
|
||||
// if no Facebook parameters were found in the GET or POST variables,
|
||||
// then fall back to cookies, which may have cached user information
|
||||
// Cookies are also used to receive session data via the Javascript API
|
||||
else if ($cookies =
|
||||
$this->get_valid_fb_params($_COOKIE, null, $this->api_key)) {
|
||||
|
||||
$base_domain_cookie = 'base_domain_' . $this->api_key;
|
||||
if (isset($_COOKIE[$base_domain_cookie])) {
|
||||
$this->base_domain = $_COOKIE[$base_domain_cookie];
|
||||
}
|
||||
|
||||
// use $api_key . '_' as a prefix for the cookies in case there are
|
||||
// multiple facebook clients on the same domain.
|
||||
$expires = isset($cookies['expires']) ? $cookies['expires'] : null;
|
||||
$this->set_user($cookies['user'],
|
||||
$cookies['session_key'],
|
||||
$expires);
|
||||
}
|
||||
// finally, if we received no parameters, but the 'auth_token' GET var
|
||||
// is present, then we are in the middle of auth handshake,
|
||||
// so go ahead and create the session
|
||||
else if ($resolve_auth_token && isset($_GET['auth_token']) &&
|
||||
$session = $this->do_get_session($_GET['auth_token'])) {
|
||||
if ($this->generate_session_secret &&
|
||||
!empty($session['secret'])) {
|
||||
$session_secret = $session['secret'];
|
||||
}
|
||||
|
||||
if (isset($session['base_domain'])) {
|
||||
$this->base_domain = $session['base_domain'];
|
||||
}
|
||||
|
||||
$this->set_user($session['uid'],
|
||||
$session['session_key'],
|
||||
$session['expires'],
|
||||
isset($session_secret) ? $session_secret : null);
|
||||
}
|
||||
|
||||
return !empty($this->fb_params);
|
||||
}
|
||||
|
||||
// Store a temporary session secret for the current session
|
||||
// for use with the JS client library
|
||||
public function promote_session() {
|
||||
try {
|
||||
$session_secret = $this->api_client->auth_promoteSession();
|
||||
if (!$this->in_fb_canvas()) {
|
||||
$this->set_cookies($this->user, $this->api_client->session_key, $this->session_expires, $session_secret);
|
||||
}
|
||||
return $session_secret;
|
||||
} catch (FacebookRestClientException $e) {
|
||||
// API_EC_PARAM means we don't have a logged in user, otherwise who
|
||||
// knows what it means, so just throw it.
|
||||
if ($e->getCode() != FacebookAPIErrorCodes::API_EC_PARAM) {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function do_get_session($auth_token) {
|
||||
try {
|
||||
return $this->api_client->auth_getSession($auth_token, $this->generate_session_secret);
|
||||
} catch (FacebookRestClientException $e) {
|
||||
// API_EC_PARAM means we don't have a logged in user, otherwise who
|
||||
// knows what it means, so just throw it.
|
||||
if ($e->getCode() != FacebookAPIErrorCodes::API_EC_PARAM) {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Invalidate the session currently being used, and clear any state associated
|
||||
// with it. Note that the user will still remain logged into Facebook.
|
||||
public function expire_session() {
|
||||
try {
|
||||
if ($this->api_client->auth_expireSession()) {
|
||||
$this->clear_cookie_state();
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
$this->clear_cookie_state();
|
||||
}
|
||||
}
|
||||
|
||||
/** Logs the user out of all temporary application sessions as well as their
|
||||
* Facebook session. Note this will only work if the user has a valid current
|
||||
* session with the application.
|
||||
*
|
||||
* @param string $next URL to redirect to upon logging out
|
||||
*
|
||||
*/
|
||||
public function logout($next) {
|
||||
$logout_url = $this->get_logout_url($next);
|
||||
|
||||
// Clear any stored state
|
||||
$this->clear_cookie_state();
|
||||
|
||||
$this->redirect($logout_url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears any persistent state stored about the user, including
|
||||
* cookies and information related to the current session in the
|
||||
* client.
|
||||
*
|
||||
*/
|
||||
public function clear_cookie_state() {
|
||||
if (!$this->in_fb_canvas() && isset($_COOKIE[$this->api_key . '_user'])) {
|
||||
$cookies = array('user', 'session_key', 'expires', 'ss');
|
||||
foreach ($cookies as $name) {
|
||||
setcookie($this->api_key . '_' . $name, false, time() - 3600);
|
||||
unset($_COOKIE[$this->api_key . '_' . $name]);
|
||||
}
|
||||
setcookie($this->api_key, false, time() - 3600);
|
||||
unset($_COOKIE[$this->api_key]);
|
||||
}
|
||||
|
||||
// now, clear the rest of the stored state
|
||||
$this->user = 0;
|
||||
$this->api_client->session_key = 0;
|
||||
}
|
||||
|
||||
public function redirect($url) {
|
||||
if ($this->in_fb_canvas()) {
|
||||
echo '<fb:redirect url="' . $url . '"/>';
|
||||
} else if (preg_match('/^https?:\/\/([^\/]*\.)?facebook\.com(:\d+)?/i', $url)) {
|
||||
// make sure facebook.com url's load in the full frame so that we don't
|
||||
// get a frame within a frame.
|
||||
echo "<script type=\"text/javascript\">\ntop.location.href = \"$url\";\n</script>";
|
||||
} else {
|
||||
header('Location: ' . $url);
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
public function in_frame() {
|
||||
return isset($this->fb_params['in_canvas'])
|
||||
|| isset($this->fb_params['in_iframe']);
|
||||
}
|
||||
public function in_fb_canvas() {
|
||||
return isset($this->fb_params['in_canvas']);
|
||||
}
|
||||
|
||||
public function get_loggedin_user() {
|
||||
return $this->user;
|
||||
}
|
||||
|
||||
public function get_canvas_user() {
|
||||
return $this->canvas_user;
|
||||
}
|
||||
|
||||
public function get_profile_user() {
|
||||
return $this->profile_user;
|
||||
}
|
||||
|
||||
public static function current_url() {
|
||||
return 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
|
||||
}
|
||||
|
||||
// require_add and require_install have been removed.
|
||||
// see http://developer.facebook.com/news.php?blog=1&story=116 for more details
|
||||
public function require_login() {
|
||||
if ($user = $this->get_loggedin_user()) {
|
||||
return $user;
|
||||
}
|
||||
$this->redirect($this->get_login_url(self::current_url(), $this->in_frame()));
|
||||
}
|
||||
|
||||
public function require_frame() {
|
||||
if (!$this->in_frame()) {
|
||||
$this->redirect($this->get_login_url(self::current_url(), true));
|
||||
}
|
||||
}
|
||||
|
||||
public static function get_facebook_url($subdomain='www') {
|
||||
return 'http://' . $subdomain . '.facebook.com';
|
||||
}
|
||||
|
||||
public function get_install_url($next=null) {
|
||||
// this was renamed, keeping for compatibility's sake
|
||||
return $this->get_add_url($next);
|
||||
}
|
||||
|
||||
public function get_add_url($next=null) {
|
||||
$page = self::get_facebook_url().'/add.php';
|
||||
$params = array('api_key' => $this->api_key);
|
||||
|
||||
if ($next) {
|
||||
$params['next'] = $next;
|
||||
}
|
||||
|
||||
return $page . '?' . http_build_query($params);
|
||||
}
|
||||
|
||||
public function get_login_url($next, $canvas) {
|
||||
$page = self::get_facebook_url().'/login.php';
|
||||
$params = array('api_key' => $this->api_key,
|
||||
'v' => '1.0');
|
||||
|
||||
if ($next) {
|
||||
$params['next'] = $next;
|
||||
}
|
||||
if ($canvas) {
|
||||
$params['canvas'] = '1';
|
||||
}
|
||||
|
||||
return $page . '?' . http_build_query($params);
|
||||
}
|
||||
|
||||
public function get_logout_url($next) {
|
||||
$page = self::get_facebook_url().'/logout.php';
|
||||
$params = array('app_key' => $this->api_key,
|
||||
'session_key' => $this->api_client->session_key);
|
||||
|
||||
if ($next) {
|
||||
$params['connect_next'] = 1;
|
||||
$params['next'] = $next;
|
||||
}
|
||||
|
||||
return $page . '?' . http_build_query($params);
|
||||
}
|
||||
|
||||
public function set_user($user, $session_key, $expires=null, $session_secret=null) {
|
||||
if (!$this->in_fb_canvas() && (!isset($_COOKIE[$this->api_key . '_user'])
|
||||
|| $_COOKIE[$this->api_key . '_user'] != $user)) {
|
||||
$this->set_cookies($user, $session_key, $expires, $session_secret);
|
||||
}
|
||||
$this->user = $user;
|
||||
$this->api_client->session_key = $session_key;
|
||||
$this->session_expires = $expires;
|
||||
}
|
||||
|
||||
public function set_cookies($user, $session_key, $expires=null, $session_secret=null) {
|
||||
$cookies = array();
|
||||
$cookies['user'] = $user;
|
||||
$cookies['session_key'] = $session_key;
|
||||
if ($expires != null) {
|
||||
$cookies['expires'] = $expires;
|
||||
}
|
||||
if ($session_secret != null) {
|
||||
$cookies['ss'] = $session_secret;
|
||||
}
|
||||
|
||||
foreach ($cookies as $name => $val) {
|
||||
setcookie($this->api_key . '_' . $name, $val, (int)$expires, '', $this->base_domain);
|
||||
$_COOKIE[$this->api_key . '_' . $name] = $val;
|
||||
}
|
||||
$sig = self::generate_sig($cookies, $this->secret);
|
||||
setcookie($this->api_key, $sig, (int)$expires, '', $this->base_domain);
|
||||
$_COOKIE[$this->api_key] = $sig;
|
||||
|
||||
if ($this->base_domain != null) {
|
||||
$base_domain_cookie = 'base_domain_' . $this->api_key;
|
||||
setcookie($base_domain_cookie, $this->base_domain, (int)$expires, '', $this->base_domain);
|
||||
$_COOKIE[$base_domain_cookie] = $this->base_domain;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to undo the badness of magic quotes as best we can
|
||||
* @param string $val Should come directly from $_GET, $_POST, etc.
|
||||
* @return string val without added slashes
|
||||
*/
|
||||
public static function no_magic_quotes($val) {
|
||||
if (get_magic_quotes_gpc()) {
|
||||
return stripslashes($val);
|
||||
} else {
|
||||
return $val;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the signed parameters that were sent from Facebook. Validates the set
|
||||
* of parameters against the included signature.
|
||||
*
|
||||
* Since Facebook sends data to your callback URL via unsecured means, the
|
||||
* signature is the only way to make sure that the data actually came from
|
||||
* Facebook. So if an app receives a request at the callback URL, it should
|
||||
* always verify the signature that comes with against your own secret key.
|
||||
* Otherwise, it's possible for someone to spoof a request by
|
||||
* pretending to be someone else, i.e.:
|
||||
* www.your-callback-url.com/?fb_user=10101
|
||||
*
|
||||
* This is done automatically by verify_fb_params.
|
||||
*
|
||||
* @param assoc $params a full array of external parameters.
|
||||
* presumed $_GET, $_POST, or $_COOKIE
|
||||
* @param int $timeout number of seconds that the args are good for.
|
||||
* Specifically good for forcing cookies to expire.
|
||||
* @param string $namespace prefix string for the set of parameters we want
|
||||
* to verify. i.e., fb_sig or fb_post_sig
|
||||
*
|
||||
* @return assoc the subset of parameters containing the given prefix,
|
||||
* and also matching the signature associated with them.
|
||||
* OR an empty array if the params do not validate
|
||||
*/
|
||||
public function get_valid_fb_params($params, $timeout=null, $namespace='fb_sig') {
|
||||
$prefix = $namespace . '_';
|
||||
$prefix_len = strlen($prefix);
|
||||
$fb_params = array();
|
||||
if (empty($params)) {
|
||||
return array();
|
||||
}
|
||||
|
||||
foreach ($params as $name => $val) {
|
||||
// pull out only those parameters that match the prefix
|
||||
// note that the signature itself ($params[$namespace]) is not in the list
|
||||
if (strpos($name, $prefix) === 0) {
|
||||
$fb_params[substr($name, $prefix_len)] = self::no_magic_quotes($val);
|
||||
}
|
||||
}
|
||||
|
||||
// validate that the request hasn't expired. this is most likely
|
||||
// for params that come from $_COOKIE
|
||||
if ($timeout && (!isset($fb_params['time']) || time() - $fb_params['time'] > $timeout)) {
|
||||
return array();
|
||||
}
|
||||
|
||||
// validate that the params match the signature
|
||||
$signature = isset($params[$namespace]) ? $params[$namespace] : null;
|
||||
if (!$signature || (!$this->verify_signature($fb_params, $signature))) {
|
||||
return array();
|
||||
}
|
||||
return $fb_params;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the account that a user was trying to set up an
|
||||
* independent account through Facebook Connect.
|
||||
*
|
||||
* @param user The user attempting to set up an independent account.
|
||||
* @param hash The hash passed to the reclamation URL used.
|
||||
* @return bool True if the user is the one that selected the
|
||||
* reclamation link.
|
||||
*/
|
||||
public function verify_account_reclamation($user, $hash) {
|
||||
return $hash == md5($user . $this->secret);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates that a given set of parameters match their signature.
|
||||
* Parameters all match a given input prefix, such as "fb_sig".
|
||||
*
|
||||
* @param $fb_params an array of all Facebook-sent parameters,
|
||||
* not including the signature itself
|
||||
* @param $expected_sig the expected result to check against
|
||||
*/
|
||||
public function verify_signature($fb_params, $expected_sig) {
|
||||
return self::generate_sig($fb_params, $this->secret) == $expected_sig;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the given signed public session data structure with
|
||||
* public key of the app that
|
||||
* the session proof belongs to.
|
||||
*
|
||||
* @param $signed_data the session info that is passed by another app
|
||||
* @param string $public_key Optional public key of the app. If this
|
||||
* is not passed, function will make an API call to get it.
|
||||
* return true if the session proof passed verification.
|
||||
*/
|
||||
public function verify_signed_public_session_data($signed_data,
|
||||
$public_key = null) {
|
||||
|
||||
// If public key is not already provided, we need to get it through API
|
||||
if (!$public_key) {
|
||||
$public_key = $this->api_client->auth_getAppPublicKey(
|
||||
$signed_data['api_key']);
|
||||
}
|
||||
|
||||
// Create data to verify
|
||||
$data_to_serialize = $signed_data;
|
||||
unset($data_to_serialize['sig']);
|
||||
$serialized_data = implode('_', $data_to_serialize);
|
||||
|
||||
// Decode signature
|
||||
$signature = base64_decode($signed_data['sig']);
|
||||
$result = openssl_verify($serialized_data, $signature, $public_key,
|
||||
OPENSSL_ALGO_SHA1);
|
||||
return $result == 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Generate a signature using the application secret key.
|
||||
*
|
||||
* The only two entities that know your secret key are you and Facebook,
|
||||
* according to the Terms of Service. Since nobody else can generate
|
||||
* the signature, you can rely on it to verify that the information
|
||||
* came from Facebook.
|
||||
*
|
||||
* @param $params_array an array of all Facebook-sent parameters,
|
||||
* NOT INCLUDING the signature itself
|
||||
* @param $secret your app's secret key
|
||||
*
|
||||
* @return a hash to be checked against the signature provided by Facebook
|
||||
*/
|
||||
public static function generate_sig($params_array, $secret) {
|
||||
$str = '';
|
||||
|
||||
ksort($params_array);
|
||||
// Note: make sure that the signature parameter is not already included in
|
||||
// $params_array.
|
||||
foreach ($params_array as $k=>$v) {
|
||||
$str .= "$k=$v";
|
||||
}
|
||||
$str .= $secret;
|
||||
|
||||
return md5($str);
|
||||
}
|
||||
|
||||
public function encode_validationError($summary, $message) {
|
||||
return json_encode(
|
||||
array('errorCode' => FACEBOOK_API_VALIDATION_ERROR,
|
||||
'errorTitle' => $summary,
|
||||
'errorMessage' => $message));
|
||||
}
|
||||
|
||||
public function encode_multiFeedStory($feed, $next) {
|
||||
return json_encode(
|
||||
array('method' => 'multiFeedStory',
|
||||
'content' =>
|
||||
array('next' => $next,
|
||||
'feed' => $feed)));
|
||||
}
|
||||
|
||||
public function encode_feedStory($feed, $next) {
|
||||
return json_encode(
|
||||
array('method' => 'feedStory',
|
||||
'content' =>
|
||||
array('next' => $next,
|
||||
'feed' => $feed)));
|
||||
}
|
||||
|
||||
public function create_templatizedFeedStory($title_template, $title_data=array(),
|
||||
$body_template='', $body_data = array(), $body_general=null,
|
||||
$image_1=null, $image_1_link=null,
|
||||
$image_2=null, $image_2_link=null,
|
||||
$image_3=null, $image_3_link=null,
|
||||
$image_4=null, $image_4_link=null) {
|
||||
return array('title_template'=> $title_template,
|
||||
'title_data' => $title_data,
|
||||
'body_template'=> $body_template,
|
||||
'body_data' => $body_data,
|
||||
'body_general' => $body_general,
|
||||
'image_1' => $image_1,
|
||||
'image_1_link' => $image_1_link,
|
||||
'image_2' => $image_2,
|
||||
'image_2_link' => $image_2_link,
|
||||
'image_3' => $image_3,
|
||||
'image_3_link' => $image_3_link,
|
||||
'image_4' => $image_4,
|
||||
'image_4_link' => $image_4_link);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
104
e107_plugins/facebook/facebook-client/facebook_desktop.php
Normal file
104
e107_plugins/facebook/facebook-client/facebook_desktop.php
Normal file
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
// Copyright 2004-2009 Facebook. All Rights Reserved.
|
||||
//
|
||||
// +---------------------------------------------------------------------------+
|
||||
// | Facebook Platform PHP5 client |
|
||||
// +---------------------------------------------------------------------------+
|
||||
// | Copyright (c) 2007 Facebook, Inc. |
|
||||
// | All rights reserved. |
|
||||
// | |
|
||||
// | Redistribution and use in source and binary forms, with or without |
|
||||
// | modification, are permitted provided that the following conditions |
|
||||
// | are met: |
|
||||
// | |
|
||||
// | 1. Redistributions of source code must retain the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer. |
|
||||
// | 2. Redistributions in binary form must reproduce the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer in the |
|
||||
// | documentation and/or other materials provided with the distribution. |
|
||||
// | |
|
||||
// | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
|
||||
// | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
|
||||
// | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
|
||||
// | IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
|
||||
// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
|
||||
// | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
|
||||
// | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
||||
// +---------------------------------------------------------------------------+
|
||||
// | For help with this library, contact developers-help@facebook.com |
|
||||
// +---------------------------------------------------------------------------+
|
||||
//
|
||||
|
||||
/**
|
||||
* This class extends and modifies the "Facebook" class to better
|
||||
* suit desktop apps.
|
||||
*/
|
||||
class FacebookDesktop extends Facebook {
|
||||
// the application secret, which differs from the session secret
|
||||
public $app_secret;
|
||||
public $verify_sig;
|
||||
|
||||
public function __construct($api_key, $secret) {
|
||||
$this->app_secret = $secret;
|
||||
$this->verify_sig = false;
|
||||
parent::__construct($api_key, $secret);
|
||||
}
|
||||
|
||||
public function do_get_session($auth_token) {
|
||||
$this->api_client->secret = $this->app_secret;
|
||||
$this->api_client->session_key = null;
|
||||
$session_info = parent::do_get_session($auth_token);
|
||||
if (!empty($session_info['secret'])) {
|
||||
// store the session secret
|
||||
$this->set_session_secret($session_info['secret']);
|
||||
}
|
||||
return $session_info;
|
||||
}
|
||||
|
||||
public function set_session_secret($session_secret) {
|
||||
$this->secret = $session_secret;
|
||||
$this->api_client->use_session_secret($session_secret);
|
||||
}
|
||||
|
||||
public function require_login() {
|
||||
if ($this->get_loggedin_user()) {
|
||||
try {
|
||||
// try a session-based API call to ensure that we have the correct
|
||||
// session secret
|
||||
$user = $this->api_client->users_getLoggedInUser();
|
||||
|
||||
// now that we have a valid session secret, verify the signature
|
||||
$this->verify_sig = true;
|
||||
if ($this->validate_fb_params(false)) {
|
||||
return $user;
|
||||
} else {
|
||||
// validation failed
|
||||
return null;
|
||||
}
|
||||
} catch (FacebookRestClientException $ex) {
|
||||
if (isset($_GET['auth_token'])) {
|
||||
// if we have an auth_token, use it to establish a session
|
||||
$session_info = $this->do_get_session($_GET['auth_token']);
|
||||
if ($session_info) {
|
||||
return $session_info['uid'];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// if we get here, we need to redirect the user to log in
|
||||
$this->redirect($this->get_login_url(self::current_url(), $this->in_fb_canvas()));
|
||||
}
|
||||
|
||||
public function verify_signature($fb_params, $expected_sig) {
|
||||
// we don't want to verify the signature until we have a valid
|
||||
// session secret
|
||||
if ($this->verify_sig) {
|
||||
return parent::verify_signature($fb_params, $expected_sig);
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
260
e107_plugins/facebook/facebook-client/facebook_mobile.php
Normal file
260
e107_plugins/facebook/facebook-client/facebook_mobile.php
Normal file
@@ -0,0 +1,260 @@
|
||||
<?php
|
||||
// Copyright 2004-2009 Facebook. All Rights Reserved.
|
||||
//
|
||||
// +---------------------------------------------------------------------------+
|
||||
// | Facebook Platform PHP5 client |
|
||||
// +---------------------------------------------------------------------------+
|
||||
// | Copyright (c) 2007 Facebook, Inc. |
|
||||
// | All rights reserved. |
|
||||
// | |
|
||||
// | Redistribution and use in source and binary forms, with or without |
|
||||
// | modification, are permitted provided that the following conditions |
|
||||
// | are met: |
|
||||
// | |
|
||||
// | 1. Redistributions of source code must retain the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer. |
|
||||
// | 2. Redistributions in binary form must reproduce the above copyright |
|
||||
// | notice, this list of conditions and the following disclaimer in the |
|
||||
// | documentation and/or other materials provided with the distribution. |
|
||||
// | |
|
||||
// | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
|
||||
// | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
|
||||
// | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
|
||||
// | IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
|
||||
// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
|
||||
// | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
|
||||
// | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
||||
// +---------------------------------------------------------------------------+
|
||||
// | For help with this library, contact developers-help@facebook.com |
|
||||
// +---------------------------------------------------------------------------+
|
||||
//
|
||||
/**
|
||||
* This class extends and modifies the "Facebook" class to better suit wap
|
||||
* apps. Since there is no javascript support, we need to use server redirect
|
||||
* to implement Facebook connect functionalities such as authenticate,
|
||||
* authorize, feed form etc.. This library provide many helper functions for
|
||||
* wap developer to locate the right wap url. The url here is targed at
|
||||
* facebook wap site or wap-friendly url.
|
||||
*/
|
||||
class FacebookMobile extends Facebook {
|
||||
// the application secret, which differs from the session secret
|
||||
|
||||
public function __construct($api_key, $secret, $generate_session_secret=false) {
|
||||
parent::__construct($api_key, $secret, $generate_session_secret);
|
||||
}
|
||||
|
||||
public function redirect($url) {
|
||||
header('Location: '. $url);
|
||||
}
|
||||
|
||||
public function get_m_url($action, $params) {
|
||||
$page = parent::get_facebook_url('m'). '/' .$action;
|
||||
foreach($params as $key => $val) {
|
||||
if (!$val) {
|
||||
unset($params[$key]);
|
||||
}
|
||||
}
|
||||
return $page . '?' . http_build_query($params);
|
||||
}
|
||||
|
||||
public function get_www_url($action, $params) {
|
||||
$page = parent::get_facebook_url('www'). '/' .$action;
|
||||
foreach($params as $key => $val) {
|
||||
if (!$val) {
|
||||
unset($params[$key]);
|
||||
}
|
||||
}
|
||||
return $page . '?' . http_build_query($params);
|
||||
}
|
||||
|
||||
public function get_add_url($next=null) {
|
||||
|
||||
return $this->get_m_url('add.php', array('api_key' => $this->api_key,
|
||||
'next' => $next));
|
||||
}
|
||||
|
||||
public function get_tos_url($next=null, $cancel = null, $canvas=null) {
|
||||
return $this->get_m_url('tos.php', array('api_key' => $this->api_key,
|
||||
'v' => '1.0',
|
||||
'next' => $next,
|
||||
'canvas' => $canvas,
|
||||
'cancel' => $cancel));
|
||||
}
|
||||
|
||||
public function get_logout_url($next=null) {
|
||||
$params = array('api_key' => $this->api_key,
|
||||
'session_key' => $this->api_client->session_key,
|
||||
);
|
||||
|
||||
if ($next) {
|
||||
$params['connect_next'] = 1;
|
||||
$params['next'] = $next;
|
||||
}
|
||||
|
||||
return $this->get_m_url('logout.php', $params);
|
||||
}
|
||||
public function get_register_url($next=null, $cancel_url=null) {
|
||||
return $this->get_m_url('r.php',
|
||||
array('fbconnect' => 1,
|
||||
'api_key' => $this->api_key,
|
||||
'next' => $next ? $next : parent::current_url(),
|
||||
'cancel_url' => $cancel_url ? $cancel_url : parent::current_url()));
|
||||
}
|
||||
/**
|
||||
* These set of fbconnect style url redirect back to the application current
|
||||
* page when the action is done. Developer can also use the non fbconnect
|
||||
* style url and provide their own redirect link by giving the right parameter
|
||||
* to $next and/or $cancel_url
|
||||
*/
|
||||
public function get_fbconnect_register_url() {
|
||||
return $this->get_register_url(parent::current_url(), parent::current_url());
|
||||
}
|
||||
public function get_fbconnect_tos_url() {
|
||||
return $this->get_tos_url(parent::current_url(), parent::current_url(), $this->in_frame());
|
||||
}
|
||||
|
||||
public function get_fbconnect_logout_url() {
|
||||
return $this->get_logout_url(parent::current_url());
|
||||
}
|
||||
|
||||
public function logout_user() {
|
||||
$this->user = null;
|
||||
}
|
||||
|
||||
public function get_prompt_permissions_url($ext_perm,
|
||||
$next=null,
|
||||
$cancel_url=null) {
|
||||
|
||||
return $this->get_www_url('connect/prompt_permissions.php',
|
||||
array('api_key' => $this->api_key,
|
||||
'ext_perm' => $ext_perm,
|
||||
'next' => $next ? $next : parent::current_url(),
|
||||
'cancel' => $cancel_url ? $cancel_url : parent::current_url(),
|
||||
'display' => 'wap'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* support both prompt_permissions.php and authorize.php for now.
|
||||
* authorized.php is to be deprecate though.
|
||||
*/
|
||||
public function get_extended_permission_url($ext_perm,
|
||||
$next=null,
|
||||
$cancel_url=null) {
|
||||
$next = $next ? $next : parent::current_url();
|
||||
$cancel_url = $cancel_url ? $cancel_url : parent::current_url();
|
||||
|
||||
return $this->get_m_url('authorize.php',
|
||||
array('api_key' => $this->api_key,
|
||||
'ext_perm' => $ext_perm,
|
||||
'next' => $next,
|
||||
'cancel_url' => $cancel_url));
|
||||
|
||||
}
|
||||
|
||||
public function render_prompt_feed_url($action_links=NULL,
|
||||
$target_id=NULL,
|
||||
$message='',
|
||||
$user_message_prompt='',
|
||||
$caption=NULL,
|
||||
$callback ='',
|
||||
$cancel='',
|
||||
$attachment=NULL,
|
||||
$preview=true) {
|
||||
|
||||
$params = array('api_key' => $this->api_key,
|
||||
'session_key' => $this->api_client->session_key,
|
||||
);
|
||||
if (!empty($attachment)) {
|
||||
$params['attachment'] = urlencode(json_encode($attachment));
|
||||
} else {
|
||||
$attachment = new stdClass();
|
||||
$app_display_info = $this->api_client->admin_getAppProperties(array('application_name',
|
||||
'callback_url',
|
||||
'description',
|
||||
'logo_url'));
|
||||
$app_display_info = $app_display_info;
|
||||
$attachment->name = $app_display_info['application_name'];
|
||||
$attachment->caption = !empty($caption) ? $caption : 'Just see what\'s new!';
|
||||
$attachment->description = $app_display_info['description'];
|
||||
$attachment->href = $app_display_info['callback_url'];
|
||||
if (!empty($app_display_info['logo_url'])) {
|
||||
$logo = new stdClass();
|
||||
$logo->type = 'image';
|
||||
$logo->src = $app_display_info['logo_url'];
|
||||
$logo->href = $app_display_info['callback_url'];
|
||||
$attachment->media = array($logo);
|
||||
}
|
||||
$params['attachment'] = urlencode(json_encode($attachment));
|
||||
}
|
||||
$params['preview'] = $preview;
|
||||
$params['message'] = $message;
|
||||
$params['user_message_prompt'] = $user_message_prompt;
|
||||
if (!empty($callback)) {
|
||||
$params['callback'] = $callback;
|
||||
} else {
|
||||
$params['callback'] = $this->current_url();
|
||||
}
|
||||
if (!empty($cancel)) {
|
||||
$params['cancel'] = $cancel;
|
||||
} else {
|
||||
$params['cancel'] = $this->current_url();
|
||||
}
|
||||
|
||||
if (!empty($target_id)) {
|
||||
$params['target_id'] = $target_id;
|
||||
}
|
||||
if (!empty($action_links)) {
|
||||
$params['action_links'] = urlencode(json_encode($action_links));
|
||||
}
|
||||
|
||||
$params['display'] = 'wap';
|
||||
header('Location: '. $this->get_www_url('connect/prompt_feed.php', $params));
|
||||
}
|
||||
|
||||
//use template_id
|
||||
public function render_feed_form_url($template_id=NULL,
|
||||
$template_data=NULL,
|
||||
$user_message=NULL,
|
||||
$body_general=NULL,
|
||||
$user_message_prompt=NULL,
|
||||
$target_id=NULL,
|
||||
$callback=NULL,
|
||||
$cancel=NULL,
|
||||
$preview=true) {
|
||||
|
||||
$params = array('api_key' => $this->api_key);
|
||||
$params['preview'] = $preview;
|
||||
if (isset($template_id) && $template_id) {
|
||||
$params['template_id'] = $template_id;
|
||||
}
|
||||
$params['message'] = $user_message ? $user_message['value'] : '';
|
||||
if (isset($body_general) && $body_general) {
|
||||
$params['body_general'] = $body_general;
|
||||
}
|
||||
if (isset($user_message_prompt) && $user_message_prompt) {
|
||||
$params['user_message_prompt'] = $user_message_prompt;
|
||||
}
|
||||
if (isset($callback) && $callback) {
|
||||
$params['callback'] = $callback;
|
||||
} else {
|
||||
$params['callback'] = $this->current_url();
|
||||
}
|
||||
if (isset($cancel) && $cancel) {
|
||||
$params['cancel'] = $cancel;
|
||||
} else {
|
||||
$params['cancel'] = $this->current_url();
|
||||
}
|
||||
if (isset($template_data) && $template_data) {
|
||||
$params['template_data'] = $template_data;
|
||||
}
|
||||
if (isset($target_id) && $target_id) {
|
||||
$params['to_ids'] = $target_id;
|
||||
}
|
||||
$params['display'] = 'wap';
|
||||
header('Location: '. $this->get_www_url('connect/prompt_feed.php', $params));
|
||||
}
|
||||
}
|
3627
e107_plugins/facebook/facebook-client/facebookapi_php5_restlib.php
Normal file
3627
e107_plugins/facebook/facebook-client/facebookapi_php5_restlib.php
Normal file
File diff suppressed because it is too large
Load Diff
806
e107_plugins/facebook/facebook-client/jsonwrapper/JSON/JSON.php
Normal file
806
e107_plugins/facebook/facebook-client/jsonwrapper/JSON/JSON.php
Normal file
@@ -0,0 +1,806 @@
|
||||
<?php
|
||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
||||
|
||||
/**
|
||||
* Converts to and from JSON format.
|
||||
*
|
||||
* JSON (JavaScript Object Notation) is a lightweight data-interchange
|
||||
* format. It is easy for humans to read and write. It is easy for machines
|
||||
* to parse and generate. It is based on a subset of the JavaScript
|
||||
* Programming Language, Standard ECMA-262 3rd Edition - December 1999.
|
||||
* This feature can also be found in Python. JSON is a text format that is
|
||||
* completely language independent but uses conventions that are familiar
|
||||
* to programmers of the C-family of languages, including C, C++, C#, Java,
|
||||
* JavaScript, Perl, TCL, and many others. These properties make JSON an
|
||||
* ideal data-interchange language.
|
||||
*
|
||||
* This package provides a simple encoder and decoder for JSON notation. It
|
||||
* is intended for use with client-side Javascript applications that make
|
||||
* use of HTTPRequest to perform server communication functions - data can
|
||||
* be encoded into JSON notation for use in a client-side javascript, or
|
||||
* decoded from incoming Javascript requests. JSON format is native to
|
||||
* Javascript, and can be directly eval()'ed with no further parsing
|
||||
* overhead
|
||||
*
|
||||
* All strings should be in ASCII or UTF-8 format!
|
||||
*
|
||||
* LICENSE: Redistribution and use in source and binary forms, with or
|
||||
* without modification, are permitted provided that the following
|
||||
* conditions are met: Redistributions of source code must retain the
|
||||
* above copyright notice, this list of conditions and the following
|
||||
* disclaimer. Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following disclaimer
|
||||
* in the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
|
||||
* NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
||||
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||
* DAMAGE.
|
||||
*
|
||||
* @category
|
||||
* @package Services_JSON
|
||||
* @author Michal Migurski <mike-json@teczno.com>
|
||||
* @author Matt Knapp <mdknapp[at]gmail[dot]com>
|
||||
* @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
|
||||
* @copyright 2005 Michal Migurski
|
||||
* @version CVS: $Id: JSON.php,v 1.1 2009-11-09 02:48:44 e107coders Exp $
|
||||
* @license http://www.opensource.org/licenses/bsd-license.php
|
||||
* @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198
|
||||
*/
|
||||
|
||||
/**
|
||||
* Marker constant for Services_JSON::decode(), used to flag stack state
|
||||
*/
|
||||
define('SERVICES_JSON_SLICE', 1);
|
||||
|
||||
/**
|
||||
* Marker constant for Services_JSON::decode(), used to flag stack state
|
||||
*/
|
||||
define('SERVICES_JSON_IN_STR', 2);
|
||||
|
||||
/**
|
||||
* Marker constant for Services_JSON::decode(), used to flag stack state
|
||||
*/
|
||||
define('SERVICES_JSON_IN_ARR', 3);
|
||||
|
||||
/**
|
||||
* Marker constant for Services_JSON::decode(), used to flag stack state
|
||||
*/
|
||||
define('SERVICES_JSON_IN_OBJ', 4);
|
||||
|
||||
/**
|
||||
* Marker constant for Services_JSON::decode(), used to flag stack state
|
||||
*/
|
||||
define('SERVICES_JSON_IN_CMT', 5);
|
||||
|
||||
/**
|
||||
* Behavior switch for Services_JSON::decode()
|
||||
*/
|
||||
define('SERVICES_JSON_LOOSE_TYPE', 16);
|
||||
|
||||
/**
|
||||
* Behavior switch for Services_JSON::decode()
|
||||
*/
|
||||
define('SERVICES_JSON_SUPPRESS_ERRORS', 32);
|
||||
|
||||
/**
|
||||
* Converts to and from JSON format.
|
||||
*
|
||||
* Brief example of use:
|
||||
*
|
||||
* <code>
|
||||
* // create a new instance of Services_JSON
|
||||
* $json = new Services_JSON();
|
||||
*
|
||||
* // convert a complexe value to JSON notation, and send it to the browser
|
||||
* $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
|
||||
* $output = $json->encode($value);
|
||||
*
|
||||
* print($output);
|
||||
* // prints: ["foo","bar",[1,2,"baz"],[3,[4]]]
|
||||
*
|
||||
* // accept incoming POST data, assumed to be in JSON notation
|
||||
* $input = file_get_contents('php://input', 1000000);
|
||||
* $value = $json->decode($input);
|
||||
* </code>
|
||||
*/
|
||||
class Services_JSON
|
||||
{
|
||||
/**
|
||||
* constructs a new JSON instance
|
||||
*
|
||||
* @param int $use object behavior flags; combine with boolean-OR
|
||||
*
|
||||
* possible values:
|
||||
* - SERVICES_JSON_LOOSE_TYPE: loose typing.
|
||||
* "{...}" syntax creates associative arrays
|
||||
* instead of objects in decode().
|
||||
* - SERVICES_JSON_SUPPRESS_ERRORS: error suppression.
|
||||
* Values which can't be encoded (e.g. resources)
|
||||
* appear as NULL instead of throwing errors.
|
||||
* By default, a deeply-nested resource will
|
||||
* bubble up with an error, so all return values
|
||||
* from encode() should be checked with isError()
|
||||
*/
|
||||
function Services_JSON($use = 0)
|
||||
{
|
||||
$this->use = $use;
|
||||
}
|
||||
|
||||
/**
|
||||
* convert a string from one UTF-16 char to one UTF-8 char
|
||||
*
|
||||
* Normally should be handled by mb_convert_encoding, but
|
||||
* provides a slower PHP-only method for installations
|
||||
* that lack the multibye string extension.
|
||||
*
|
||||
* @param string $utf16 UTF-16 character
|
||||
* @return string UTF-8 character
|
||||
* @access private
|
||||
*/
|
||||
function utf162utf8($utf16)
|
||||
{
|
||||
// oh please oh please oh please oh please oh please
|
||||
if(function_exists('mb_convert_encoding')) {
|
||||
return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16');
|
||||
}
|
||||
|
||||
$bytes = (ord($utf16{0}) << 8) | ord($utf16{1});
|
||||
|
||||
switch(true) {
|
||||
case ((0x7F & $bytes) == $bytes):
|
||||
// this case should never be reached, because we are in ASCII range
|
||||
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
return chr(0x7F & $bytes);
|
||||
|
||||
case (0x07FF & $bytes) == $bytes:
|
||||
// return a 2-byte UTF-8 character
|
||||
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
return chr(0xC0 | (($bytes >> 6) & 0x1F))
|
||||
. chr(0x80 | ($bytes & 0x3F));
|
||||
|
||||
case (0xFFFF & $bytes) == $bytes:
|
||||
// return a 3-byte UTF-8 character
|
||||
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
return chr(0xE0 | (($bytes >> 12) & 0x0F))
|
||||
. chr(0x80 | (($bytes >> 6) & 0x3F))
|
||||
. chr(0x80 | ($bytes & 0x3F));
|
||||
}
|
||||
|
||||
// ignoring UTF-32 for now, sorry
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* convert a string from one UTF-8 char to one UTF-16 char
|
||||
*
|
||||
* Normally should be handled by mb_convert_encoding, but
|
||||
* provides a slower PHP-only method for installations
|
||||
* that lack the multibye string extension.
|
||||
*
|
||||
* @param string $utf8 UTF-8 character
|
||||
* @return string UTF-16 character
|
||||
* @access private
|
||||
*/
|
||||
function utf82utf16($utf8)
|
||||
{
|
||||
// oh please oh please oh please oh please oh please
|
||||
if(function_exists('mb_convert_encoding')) {
|
||||
return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
|
||||
}
|
||||
|
||||
switch(strlen($utf8)) {
|
||||
case 1:
|
||||
// this case should never be reached, because we are in ASCII range
|
||||
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
return $utf8;
|
||||
|
||||
case 2:
|
||||
// return a UTF-16 character from a 2-byte UTF-8 char
|
||||
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
return chr(0x07 & (ord($utf8{0}) >> 2))
|
||||
. chr((0xC0 & (ord($utf8{0}) << 6))
|
||||
| (0x3F & ord($utf8{1})));
|
||||
|
||||
case 3:
|
||||
// return a UTF-16 character from a 3-byte UTF-8 char
|
||||
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
return chr((0xF0 & (ord($utf8{0}) << 4))
|
||||
| (0x0F & (ord($utf8{1}) >> 2)))
|
||||
. chr((0xC0 & (ord($utf8{1}) << 6))
|
||||
| (0x7F & ord($utf8{2})));
|
||||
}
|
||||
|
||||
// ignoring UTF-32 for now, sorry
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* encodes an arbitrary variable into JSON format
|
||||
*
|
||||
* @param mixed $var any number, boolean, string, array, or object to be encoded.
|
||||
* see argument 1 to Services_JSON() above for array-parsing behavior.
|
||||
* if var is a strng, note that encode() always expects it
|
||||
* to be in ASCII or UTF-8 format!
|
||||
*
|
||||
* @return mixed JSON string representation of input var or an error if a problem occurs
|
||||
* @access public
|
||||
*/
|
||||
function encode($var)
|
||||
{
|
||||
switch (gettype($var)) {
|
||||
case 'boolean':
|
||||
return $var ? 'true' : 'false';
|
||||
|
||||
case 'NULL':
|
||||
return 'null';
|
||||
|
||||
case 'integer':
|
||||
return (int) $var;
|
||||
|
||||
case 'double':
|
||||
case 'float':
|
||||
return (float) $var;
|
||||
|
||||
case 'string':
|
||||
// STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
|
||||
$ascii = '';
|
||||
$strlen_var = strlen($var);
|
||||
|
||||
/*
|
||||
* Iterate over every character in the string,
|
||||
* escaping with a slash or encoding to UTF-8 where necessary
|
||||
*/
|
||||
for ($c = 0; $c < $strlen_var; ++$c) {
|
||||
|
||||
$ord_var_c = ord($var{$c});
|
||||
|
||||
switch (true) {
|
||||
case $ord_var_c == 0x08:
|
||||
$ascii .= '\b';
|
||||
break;
|
||||
case $ord_var_c == 0x09:
|
||||
$ascii .= '\t';
|
||||
break;
|
||||
case $ord_var_c == 0x0A:
|
||||
$ascii .= '\n';
|
||||
break;
|
||||
case $ord_var_c == 0x0C:
|
||||
$ascii .= '\f';
|
||||
break;
|
||||
case $ord_var_c == 0x0D:
|
||||
$ascii .= '\r';
|
||||
break;
|
||||
|
||||
case $ord_var_c == 0x22:
|
||||
case $ord_var_c == 0x2F:
|
||||
case $ord_var_c == 0x5C:
|
||||
// double quote, slash, slosh
|
||||
$ascii .= '\\'.$var{$c};
|
||||
break;
|
||||
|
||||
case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
|
||||
// characters U-00000000 - U-0000007F (same as ASCII)
|
||||
$ascii .= $var{$c};
|
||||
break;
|
||||
|
||||
case (($ord_var_c & 0xE0) == 0xC0):
|
||||
// characters U-00000080 - U-000007FF, mask 110XXXXX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$char = pack('C*', $ord_var_c, ord($var{$c + 1}));
|
||||
$c += 1;
|
||||
$utf16 = $this->utf82utf16($char);
|
||||
$ascii .= sprintf('\u%04s', bin2hex($utf16));
|
||||
break;
|
||||
|
||||
case (($ord_var_c & 0xF0) == 0xE0):
|
||||
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$char = pack('C*', $ord_var_c,
|
||||
ord($var{$c + 1}),
|
||||
ord($var{$c + 2}));
|
||||
$c += 2;
|
||||
$utf16 = $this->utf82utf16($char);
|
||||
$ascii .= sprintf('\u%04s', bin2hex($utf16));
|
||||
break;
|
||||
|
||||
case (($ord_var_c & 0xF8) == 0xF0):
|
||||
// characters U-00010000 - U-001FFFFF, mask 11110XXX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$char = pack('C*', $ord_var_c,
|
||||
ord($var{$c + 1}),
|
||||
ord($var{$c + 2}),
|
||||
ord($var{$c + 3}));
|
||||
$c += 3;
|
||||
$utf16 = $this->utf82utf16($char);
|
||||
$ascii .= sprintf('\u%04s', bin2hex($utf16));
|
||||
break;
|
||||
|
||||
case (($ord_var_c & 0xFC) == 0xF8):
|
||||
// characters U-00200000 - U-03FFFFFF, mask 111110XX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$char = pack('C*', $ord_var_c,
|
||||
ord($var{$c + 1}),
|
||||
ord($var{$c + 2}),
|
||||
ord($var{$c + 3}),
|
||||
ord($var{$c + 4}));
|
||||
$c += 4;
|
||||
$utf16 = $this->utf82utf16($char);
|
||||
$ascii .= sprintf('\u%04s', bin2hex($utf16));
|
||||
break;
|
||||
|
||||
case (($ord_var_c & 0xFE) == 0xFC):
|
||||
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$char = pack('C*', $ord_var_c,
|
||||
ord($var{$c + 1}),
|
||||
ord($var{$c + 2}),
|
||||
ord($var{$c + 3}),
|
||||
ord($var{$c + 4}),
|
||||
ord($var{$c + 5}));
|
||||
$c += 5;
|
||||
$utf16 = $this->utf82utf16($char);
|
||||
$ascii .= sprintf('\u%04s', bin2hex($utf16));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return '"'.$ascii.'"';
|
||||
|
||||
case 'array':
|
||||
/*
|
||||
* As per JSON spec if any array key is not an integer
|
||||
* we must treat the the whole array as an object. We
|
||||
* also try to catch a sparsely populated associative
|
||||
* array with numeric keys here because some JS engines
|
||||
* will create an array with empty indexes up to
|
||||
* max_index which can cause memory issues and because
|
||||
* the keys, which may be relevant, will be remapped
|
||||
* otherwise.
|
||||
*
|
||||
* As per the ECMA and JSON specification an object may
|
||||
* have any string as a property. Unfortunately due to
|
||||
* a hole in the ECMA specification if the key is a
|
||||
* ECMA reserved word or starts with a digit the
|
||||
* parameter is only accessible using ECMAScript's
|
||||
* bracket notation.
|
||||
*/
|
||||
|
||||
// treat as a JSON object
|
||||
if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
|
||||
$properties = array_map(array($this, 'name_value'),
|
||||
array_keys($var),
|
||||
array_values($var));
|
||||
|
||||
foreach($properties as $property) {
|
||||
if(Services_JSON::isError($property)) {
|
||||
return $property;
|
||||
}
|
||||
}
|
||||
|
||||
return '{' . join(',', $properties) . '}';
|
||||
}
|
||||
|
||||
// treat it like a regular array
|
||||
$elements = array_map(array($this, 'encode'), $var);
|
||||
|
||||
foreach($elements as $element) {
|
||||
if(Services_JSON::isError($element)) {
|
||||
return $element;
|
||||
}
|
||||
}
|
||||
|
||||
return '[' . join(',', $elements) . ']';
|
||||
|
||||
case 'object':
|
||||
$vars = get_object_vars($var);
|
||||
|
||||
$properties = array_map(array($this, 'name_value'),
|
||||
array_keys($vars),
|
||||
array_values($vars));
|
||||
|
||||
foreach($properties as $property) {
|
||||
if(Services_JSON::isError($property)) {
|
||||
return $property;
|
||||
}
|
||||
}
|
||||
|
||||
return '{' . join(',', $properties) . '}';
|
||||
|
||||
default:
|
||||
return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS)
|
||||
? 'null'
|
||||
: new Services_JSON_Error(gettype($var)." can not be encoded as JSON string");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* array-walking function for use in generating JSON-formatted name-value pairs
|
||||
*
|
||||
* @param string $name name of key to use
|
||||
* @param mixed $value reference to an array element to be encoded
|
||||
*
|
||||
* @return string JSON-formatted name-value pair, like '"name":value'
|
||||
* @access private
|
||||
*/
|
||||
function name_value($name, $value)
|
||||
{
|
||||
$encoded_value = $this->encode($value);
|
||||
|
||||
if(Services_JSON::isError($encoded_value)) {
|
||||
return $encoded_value;
|
||||
}
|
||||
|
||||
return $this->encode(strval($name)) . ':' . $encoded_value;
|
||||
}
|
||||
|
||||
/**
|
||||
* reduce a string by removing leading and trailing comments and whitespace
|
||||
*
|
||||
* @param $str string string value to strip of comments and whitespace
|
||||
*
|
||||
* @return string string value stripped of comments and whitespace
|
||||
* @access private
|
||||
*/
|
||||
function reduce_string($str)
|
||||
{
|
||||
$str = preg_replace(array(
|
||||
|
||||
// eliminate single line comments in '// ...' form
|
||||
'#^\s*//(.+)$#m',
|
||||
|
||||
// eliminate multi-line comments in '/* ... */' form, at start of string
|
||||
'#^\s*/\*(.+)\*/#Us',
|
||||
|
||||
// eliminate multi-line comments in '/* ... */' form, at end of string
|
||||
'#/\*(.+)\*/\s*$#Us'
|
||||
|
||||
), '', $str);
|
||||
|
||||
// eliminate extraneous space
|
||||
return trim($str);
|
||||
}
|
||||
|
||||
/**
|
||||
* decodes a JSON string into appropriate variable
|
||||
*
|
||||
* @param string $str JSON-formatted string
|
||||
*
|
||||
* @return mixed number, boolean, string, array, or object
|
||||
* corresponding to given JSON input string.
|
||||
* See argument 1 to Services_JSON() above for object-output behavior.
|
||||
* Note that decode() always returns strings
|
||||
* in ASCII or UTF-8 format!
|
||||
* @access public
|
||||
*/
|
||||
function decode($str)
|
||||
{
|
||||
$str = $this->reduce_string($str);
|
||||
|
||||
switch (strtolower($str)) {
|
||||
case 'true':
|
||||
return true;
|
||||
|
||||
case 'false':
|
||||
return false;
|
||||
|
||||
case 'null':
|
||||
return null;
|
||||
|
||||
default:
|
||||
$m = array();
|
||||
|
||||
if (is_numeric($str)) {
|
||||
// Lookie-loo, it's a number
|
||||
|
||||
// This would work on its own, but I'm trying to be
|
||||
// good about returning integers where appropriate:
|
||||
// return (float)$str;
|
||||
|
||||
// Return float or int, as appropriate
|
||||
return ((float)$str == (integer)$str)
|
||||
? (integer)$str
|
||||
: (float)$str;
|
||||
|
||||
} elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) {
|
||||
// STRINGS RETURNED IN UTF-8 FORMAT
|
||||
$delim = substr($str, 0, 1);
|
||||
$chrs = substr($str, 1, -1);
|
||||
$utf8 = '';
|
||||
$strlen_chrs = strlen($chrs);
|
||||
|
||||
for ($c = 0; $c < $strlen_chrs; ++$c) {
|
||||
|
||||
$substr_chrs_c_2 = substr($chrs, $c, 2);
|
||||
$ord_chrs_c = ord($chrs{$c});
|
||||
|
||||
switch (true) {
|
||||
case $substr_chrs_c_2 == '\b':
|
||||
$utf8 .= chr(0x08);
|
||||
++$c;
|
||||
break;
|
||||
case $substr_chrs_c_2 == '\t':
|
||||
$utf8 .= chr(0x09);
|
||||
++$c;
|
||||
break;
|
||||
case $substr_chrs_c_2 == '\n':
|
||||
$utf8 .= chr(0x0A);
|
||||
++$c;
|
||||
break;
|
||||
case $substr_chrs_c_2 == '\f':
|
||||
$utf8 .= chr(0x0C);
|
||||
++$c;
|
||||
break;
|
||||
case $substr_chrs_c_2 == '\r':
|
||||
$utf8 .= chr(0x0D);
|
||||
++$c;
|
||||
break;
|
||||
|
||||
case $substr_chrs_c_2 == '\\"':
|
||||
case $substr_chrs_c_2 == '\\\'':
|
||||
case $substr_chrs_c_2 == '\\\\':
|
||||
case $substr_chrs_c_2 == '\\/':
|
||||
if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
|
||||
($delim == "'" && $substr_chrs_c_2 != '\\"')) {
|
||||
$utf8 .= $chrs{++$c};
|
||||
}
|
||||
break;
|
||||
|
||||
case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)):
|
||||
// single, escaped unicode character
|
||||
$utf16 = chr(hexdec(substr($chrs, ($c + 2), 2)))
|
||||
. chr(hexdec(substr($chrs, ($c + 4), 2)));
|
||||
$utf8 .= $this->utf162utf8($utf16);
|
||||
$c += 5;
|
||||
break;
|
||||
|
||||
case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
|
||||
$utf8 .= $chrs{$c};
|
||||
break;
|
||||
|
||||
case ($ord_chrs_c & 0xE0) == 0xC0:
|
||||
// characters U-00000080 - U-000007FF, mask 110XXXXX
|
||||
//see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$utf8 .= substr($chrs, $c, 2);
|
||||
++$c;
|
||||
break;
|
||||
|
||||
case ($ord_chrs_c & 0xF0) == 0xE0:
|
||||
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$utf8 .= substr($chrs, $c, 3);
|
||||
$c += 2;
|
||||
break;
|
||||
|
||||
case ($ord_chrs_c & 0xF8) == 0xF0:
|
||||
// characters U-00010000 - U-001FFFFF, mask 11110XXX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$utf8 .= substr($chrs, $c, 4);
|
||||
$c += 3;
|
||||
break;
|
||||
|
||||
case ($ord_chrs_c & 0xFC) == 0xF8:
|
||||
// characters U-00200000 - U-03FFFFFF, mask 111110XX
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$utf8 .= substr($chrs, $c, 5);
|
||||
$c += 4;
|
||||
break;
|
||||
|
||||
case ($ord_chrs_c & 0xFE) == 0xFC:
|
||||
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
|
||||
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
|
||||
$utf8 .= substr($chrs, $c, 6);
|
||||
$c += 5;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $utf8;
|
||||
|
||||
} elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) {
|
||||
// array, or object notation
|
||||
|
||||
if ($str{0} == '[') {
|
||||
$stk = array(SERVICES_JSON_IN_ARR);
|
||||
$arr = array();
|
||||
} else {
|
||||
if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
|
||||
$stk = array(SERVICES_JSON_IN_OBJ);
|
||||
$obj = array();
|
||||
} else {
|
||||
$stk = array(SERVICES_JSON_IN_OBJ);
|
||||
$obj = new stdClass();
|
||||
}
|
||||
}
|
||||
|
||||
array_push($stk, array('what' => SERVICES_JSON_SLICE,
|
||||
'where' => 0,
|
||||
'delim' => false));
|
||||
|
||||
$chrs = substr($str, 1, -1);
|
||||
$chrs = $this->reduce_string($chrs);
|
||||
|
||||
if ($chrs == '') {
|
||||
if (reset($stk) == SERVICES_JSON_IN_ARR) {
|
||||
return $arr;
|
||||
|
||||
} else {
|
||||
return $obj;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//print("\nparsing {$chrs}\n");
|
||||
|
||||
$strlen_chrs = strlen($chrs);
|
||||
|
||||
for ($c = 0; $c <= $strlen_chrs; ++$c) {
|
||||
|
||||
$top = end($stk);
|
||||
$substr_chrs_c_2 = substr($chrs, $c, 2);
|
||||
|
||||
if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) {
|
||||
// found a comma that is not inside a string, array, etc.,
|
||||
// OR we've reached the end of the character list
|
||||
$slice = substr($chrs, $top['where'], ($c - $top['where']));
|
||||
array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false));
|
||||
//print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
|
||||
|
||||
if (reset($stk) == SERVICES_JSON_IN_ARR) {
|
||||
// we are in an array, so just push an element onto the stack
|
||||
array_push($arr, $this->decode($slice));
|
||||
|
||||
} elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
|
||||
// we are in an object, so figure
|
||||
// out the property name and set an
|
||||
// element in an associative array,
|
||||
// for now
|
||||
$parts = array();
|
||||
|
||||
if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
|
||||
// "name":value pair
|
||||
$key = $this->decode($parts[1]);
|
||||
$val = $this->decode($parts[2]);
|
||||
|
||||
if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
|
||||
$obj[$key] = $val;
|
||||
} else {
|
||||
$obj->$key = $val;
|
||||
}
|
||||
} elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
|
||||
// name:value pair, where name is unquoted
|
||||
$key = $parts[1];
|
||||
$val = $this->decode($parts[2]);
|
||||
|
||||
if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
|
||||
$obj[$key] = $val;
|
||||
} else {
|
||||
$obj->$key = $val;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) {
|
||||
// found a quote, and we are not inside a string
|
||||
array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c}));
|
||||
//print("Found start of string at {$c}\n");
|
||||
|
||||
} elseif (($chrs{$c} == $top['delim']) &&
|
||||
($top['what'] == SERVICES_JSON_IN_STR) &&
|
||||
((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) {
|
||||
// found a quote, we're in a string, and it's not escaped
|
||||
// we know that it's not escaped becase there is _not_ an
|
||||
// odd number of backslashes at the end of the string so far
|
||||
array_pop($stk);
|
||||
//print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n");
|
||||
|
||||
} elseif (($chrs{$c} == '[') &&
|
||||
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
|
||||
// found a left-bracket, and we are in an array, object, or slice
|
||||
array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false));
|
||||
//print("Found start of array at {$c}\n");
|
||||
|
||||
} elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) {
|
||||
// found a right-bracket, and we're in an array
|
||||
array_pop($stk);
|
||||
//print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
|
||||
|
||||
} elseif (($chrs{$c} == '{') &&
|
||||
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
|
||||
// found a left-brace, and we are in an array, object, or slice
|
||||
array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false));
|
||||
//print("Found start of object at {$c}\n");
|
||||
|
||||
} elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) {
|
||||
// found a right-brace, and we're in an object
|
||||
array_pop($stk);
|
||||
//print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
|
||||
|
||||
} elseif (($substr_chrs_c_2 == '/*') &&
|
||||
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
|
||||
// found a comment start, and we are in an array, object, or slice
|
||||
array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false));
|
||||
$c++;
|
||||
//print("Found start of comment at {$c}\n");
|
||||
|
||||
} elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) {
|
||||
// found a comment end, and we're in one now
|
||||
array_pop($stk);
|
||||
$c++;
|
||||
|
||||
for ($i = $top['where']; $i <= $c; ++$i)
|
||||
$chrs = substr_replace($chrs, ' ', $i, 1);
|
||||
|
||||
//print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (reset($stk) == SERVICES_JSON_IN_ARR) {
|
||||
return $arr;
|
||||
|
||||
} elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
|
||||
return $obj;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @todo Ultimately, this should just call PEAR::isError()
|
||||
*/
|
||||
function isError($data, $code = null)
|
||||
{
|
||||
if (class_exists('pear')) {
|
||||
return PEAR::isError($data, $code);
|
||||
} elseif (is_object($data) && (get_class($data) == 'services_json_error' ||
|
||||
is_subclass_of($data, 'services_json_error'))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (class_exists('PEAR_Error')) {
|
||||
|
||||
class Services_JSON_Error extends PEAR_Error
|
||||
{
|
||||
function Services_JSON_Error($message = 'unknown error', $code = null,
|
||||
$mode = null, $options = null, $userinfo = null)
|
||||
{
|
||||
parent::PEAR_Error($message, $code, $mode, $options, $userinfo);
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
/**
|
||||
* @todo Ultimately, this class shall be descended from PEAR_Error
|
||||
*/
|
||||
class Services_JSON_Error
|
||||
{
|
||||
function Services_JSON_Error($message = 'unknown error', $code = null,
|
||||
$mode = null, $options = null, $userinfo = null)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
@@ -0,0 +1,21 @@
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
|
||||
Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
|
||||
NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
@@ -0,0 +1,6 @@
|
||||
<?php
|
||||
# In PHP 5.2 or higher we don't need to bring this in
|
||||
if (!function_exists('json_encode')) {
|
||||
require_once 'jsonwrapper_inner.php';
|
||||
}
|
||||
?>
|
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
require_once 'JSON/JSON.php';
|
||||
|
||||
function json_encode($arg)
|
||||
{
|
||||
global $services_json;
|
||||
if (!isset($services_json)) {
|
||||
$services_json = new Services_JSON();
|
||||
}
|
||||
return $services_json->encode($arg);
|
||||
}
|
||||
|
||||
function json_decode($arg)
|
||||
{
|
||||
global $services_json;
|
||||
if (!isset($services_json)) {
|
||||
$services_json = new Services_JSON();
|
||||
}
|
||||
return $services_json->decode($arg);
|
||||
}
|
||||
|
||||
?>
|
62
e107_plugins/facebook/facebook.css
Normal file
62
e107_plugins/facebook/facebook.css
Normal file
@@ -0,0 +1,62 @@
|
||||
.fb_share_button { display: -moz-inline-block; display:inline-block; padding:1px 20px 0 5px; height:15px; border:1px solid #d8dfea; background:url(http://static.ak.fbcdn.net/rsrc.php/z39E0/hash/ya8q506x.gif) no-repeat top right; }
|
||||
|
||||
html .fb_share_button:hover { color:#fff; border-color:#295582; background:#3b5998 url(http://static.ak.fbcdn.net/rsrc.php/z39E0/hash/ya8q506x.gif) no-repeat top right; text-decoration:none; }
|
||||
|
||||
.facebook_link {
|
||||
background:#3b5998;
|
||||
line-height:1.6em;font-size:12px;height:100%;width:100%;padding:5px;border:1px solid #203360;
|
||||
color:#fff; font-weight:bold; margin: 5px auto auto auto
|
||||
}
|
||||
|
||||
.facebook_link:hover {
|
||||
background:#637bad;
|
||||
}
|
||||
|
||||
.facebook_notice a,
|
||||
.facebook_link a{
|
||||
text-decoration:none
|
||||
}
|
||||
|
||||
.facebook_notice a{
|
||||
color:#000
|
||||
}
|
||||
|
||||
.facebook_link a{
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.facebook_notice {
|
||||
color:#000;
|
||||
background:#fff9d7;
|
||||
line-height:1.6em;font-size:12px;height:100%;width:100%;padding:5px;border:1px solid #e2c822;font-weight:bold; margin: 5px auto auto auto
|
||||
}
|
||||
|
||||
.facebook_notice:hover {
|
||||
border:1px solid #dd3c10;
|
||||
background: #ffebe8;
|
||||
}
|
||||
|
||||
.welcome_msg {
|
||||
height:100%;
|
||||
width:100%;
|
||||
background:#eaecf3;
|
||||
padding:5px;
|
||||
line-height:1.6em;
|
||||
border:1px solid #d1d5da;
|
||||
margin: 5px auto auto auto
|
||||
}
|
||||
|
||||
.user_image {
|
||||
height:100%;
|
||||
width:100%;
|
||||
padding:5px;
|
||||
background:#eaecf3;
|
||||
border:1px solid #d1d5da;
|
||||
margin: 5px auto auto auto
|
||||
}
|
||||
|
||||
.fb_green {
|
||||
background: #ddffbb;
|
||||
color:#558833;
|
||||
line-height:1.6em;font-size:12px;height:100%;width:100%;padding:5px;border:1px solid #88dd00;font-weight:bold; margin: 5px auto auto auto
|
||||
}
|
133
e107_plugins/facebook/facebook.js
Normal file
133
e107_plugins/facebook/facebook.js
Normal file
@@ -0,0 +1,133 @@
|
||||
|
||||
/*
|
||||
* The facebook_onload statement is printed out in the PHP. If the user's logged in
|
||||
* status has changed since the last page load, then refresh the page to pick up
|
||||
* the change.
|
||||
*
|
||||
* This helps enforce the concept of "single sign on", so that if a user is signed into
|
||||
* Facebook when they visit your site, they will be automatically logged in -
|
||||
* without any need to click the login button.
|
||||
*
|
||||
* @param already_logged_into_facebook reports whether the server thinks the user
|
||||
* is logged in, based on their cookies
|
||||
*
|
||||
*/
|
||||
function facebook_onload(already_logged_into_facebook) {
|
||||
// user state is either: has a session, or does not.
|
||||
// if the state has changed, detect that and reload.
|
||||
FB.ensureInit(function() {
|
||||
|
||||
FB.Connect.get_status().waitUntilReady( function( status ) {
|
||||
switch ( status ) {
|
||||
case FB.ConnectState.connected:
|
||||
|
||||
loggedIn = true;
|
||||
break;
|
||||
case FB.ConnectState.appNotAuthorized:
|
||||
case FB.ConnectState.userNotLoggedIn:
|
||||
|
||||
|
||||
loggedIn = false;
|
||||
}
|
||||
});
|
||||
|
||||
/* FB.Facebook.get_sessionState().waitUntilReady(function(session) {
|
||||
var is_now_logged_into_facebook = session ? true : false;
|
||||
|
||||
// if the new state is the same as the old (i.e., nothing changed)
|
||||
// then do nothing
|
||||
if (is_now_logged_into_facebook == already_logged_into_facebook) {
|
||||
return;
|
||||
}
|
||||
|
||||
// otherwise, refresh to pick up the state change
|
||||
refresh_page();
|
||||
}); */
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
* Our <fb:login-button> specifies this function in its onlogin attribute,
|
||||
* which is triggered after the user authenticates the app in the Connect
|
||||
* dialog and the Facebook session has been set in the cookies.
|
||||
*/
|
||||
function facebook_onlogin_ready() {
|
||||
FB.Connect.ifUserConnected("/news.php?login", null);
|
||||
// In this app, we redirect the user back to index.php. The server will read
|
||||
// the cookie and see that the user is logged in, and will deliver a new page
|
||||
// with content appropriate for a logged-in user.
|
||||
//
|
||||
// However, a more complex app could use this function to do AJAX calls
|
||||
// and/or in-place replacement of page contents to avoid a full page refresh.
|
||||
// refresh_page();
|
||||
}
|
||||
|
||||
/*
|
||||
* Do a page refresh after login state changes.
|
||||
* This is the easiest but not the only way to pick up changes.
|
||||
* If you have a small amount of Facebook-specific content on a large page,
|
||||
* then you could change it in Javascript without refresh.
|
||||
*/
|
||||
function refresh_page() {
|
||||
window.location = 'index.php';
|
||||
}
|
||||
|
||||
/*
|
||||
* Prompts the user to grant a permission to the application.
|
||||
*/
|
||||
function facebook_prompt_permission(permission) {
|
||||
FB.ensureInit(function() {
|
||||
FB.Connect.showPermissionDialog(permission);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function facebook_log_out(){
|
||||
FB.ensureInit(function() {
|
||||
FB.Connect.logout(function() { refresh_page(); });
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Show the feed form. This would be typically called in response to the
|
||||
* onclick handler of a "Publish" button, or in the onload event after
|
||||
* the user submits a form with info that should be published.
|
||||
*
|
||||
*/
|
||||
function facebook_publish_feed_story(user_message) {
|
||||
// Load the feed form
|
||||
FB.ensureInit(function() {
|
||||
// FB.Connect.showFeedDialog(form_bundle_id, template_data);
|
||||
// FB.Connect.showFeedDialog(form_bundle_id, template_data, null, null, FB.FeedStorySize.shortStory, FB.RequireConnect.promptConnect);
|
||||
FB.Connect.streamPublish(user_message,'');
|
||||
|
||||
// hide the "Loading feed story ..." div
|
||||
ge('feed_loading').style.visibility = "hidden";
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* If a user is not connected, then the checkbox that says "Publish To Facebook"
|
||||
* is hidden in the "add run" form.
|
||||
*
|
||||
* This function detects whether the user is logged into facebook but just
|
||||
* not connected, and shows the checkbox if that's true.
|
||||
*/
|
||||
function facebook_show_feed_checkbox() {
|
||||
FB.ensureInit(function() {
|
||||
FB.Connect.get_status().waitUntilReady(function(status) {
|
||||
if (status != FB.ConnectState.userNotLoggedIn) {
|
||||
// If the user is currently logged into Facebook, but has not
|
||||
// authorized the app, then go ahead and show them the feed dialog + upsell
|
||||
checkbox = ge('publish_fb_checkbox');
|
||||
if (checkbox) {
|
||||
checkbox.style.visibility = "visible";
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
34
e107_plugins/facebook/facebook.php
Normal file
34
e107_plugins/facebook/facebook.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
require_once('../../class2.php');
|
||||
|
||||
require_once(HEADERF);
|
||||
|
||||
$text = '<fb:serverfbml style="width: 100%;">
|
||||
<script type="text/fbml">
|
||||
<fb:fbml>
|
||||
<fb:request-form
|
||||
action="'.e_SELF.'"
|
||||
method="GET"
|
||||
invite="true"
|
||||
type="'.SITENAME.'"
|
||||
content="'.SITENAME.'
|
||||
<fb:req-choice url=\''.e_SELF.'\'
|
||||
label=\'Become a Member!\' />
|
||||
">
|
||||
|
||||
<fb:multi-friend-selector
|
||||
showborder="true"
|
||||
|
||||
actiontext="Select the friends you want to invite.">
|
||||
</fb:request-form>
|
||||
</fb:fbml>
|
||||
|
||||
</script>
|
||||
</fb:serverfbml>';
|
||||
|
||||
$ns->tablerender("Facebook Connect Invite Friends",$text);
|
||||
|
||||
require_once(FOOTERF);
|
||||
|
||||
?>
|
65
e107_plugins/facebook/facebook2_menu.php
Normal file
65
e107_plugins/facebook/facebook2_menu.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
//error_reporting(E_ALL);
|
||||
|
||||
|
||||
require_once (e_BASE.'class2.php');
|
||||
|
||||
include_once (e_PLUGIN.'facebook/facebook_function.php');
|
||||
|
||||
|
||||
if ( isset ($_POST['fb_sig_in_canvas']))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* start the logic...
|
||||
*
|
||||
*/
|
||||
|
||||
global $pref;
|
||||
|
||||
$html = '';
|
||||
|
||||
if ( ( $pref[ 'Facebook_Api-Key' ] != '' ) && ( $pref[ 'Facebook_Secret-Key' ] != '' ) && ( $pref[ 'user_reg' ] == 1 ) )
|
||||
{
|
||||
|
||||
$html = '';
|
||||
|
||||
if ( USER ) {
|
||||
|
||||
if ( USERID == get_id_from_uid ( is_fb() ) ) {
|
||||
|
||||
if ( Facebook_User_Is_Connected() === true ) {
|
||||
|
||||
///$html .= Render_Facebook_Profile();
|
||||
|
||||
//$caption = 'Welcome, ' . Get_Facebook_Info ( 'name' );
|
||||
|
||||
$html .= Render_Facebook_Friends_Table();
|
||||
|
||||
$html .= Render_Connect_Invite_Friends();
|
||||
|
||||
|
||||
|
||||
$caption = 'Friends';
|
||||
// $text = $tp->parseTemplate($html, true, $facebook_shortcodes);
|
||||
|
||||
$ns->tablerender($caption, $html);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
?>
|
47
e107_plugins/facebook/facebook3_menu.php
Normal file
47
e107_plugins/facebook/facebook3_menu.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Fun Box - Become a Fun Of...
|
||||
*
|
||||
* http://wiki.developers.facebook.com/index.php/Fan_Box
|
||||
*
|
||||
* this must be later inserted in the Control Panel where User can chose below Parameters :
|
||||
*
|
||||
* stream = Set to 1 to display stream stories in the Fan Box or 0 to hide stream stories. (Default value is 1.)
|
||||
*
|
||||
* connections = The number of fans to display in the Fan Box. Specifying 0 hides the list of fans in the Fan Box. You cannot display more than 100 fans. (Default value is 10 connections.)
|
||||
*
|
||||
*
|
||||
* see the render_fun_box() function
|
||||
*
|
||||
*/
|
||||
|
||||
require_once (e_BASE.'class2.php');
|
||||
|
||||
include_once (e_PLUGIN.'facebook/facebook_function.php');
|
||||
|
||||
|
||||
if ( isset ($_POST['fb_sig_in_canvas']))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if ( is_fb() ) {
|
||||
|
||||
$html = '';
|
||||
|
||||
$html .= Render_Fun_Box( '0' , '10' , '200px' );
|
||||
|
||||
$caption = 'Fun Box';
|
||||
|
||||
|
||||
$ns->tablerender($caption, $html);
|
||||
|
||||
}
|
||||
|
||||
?>
|
143
e107_plugins/facebook/facebook_config.php
Normal file
143
e107_plugins/facebook/facebook_config.php
Normal file
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
$eplug_admin = TRUE;
|
||||
require_once ("../../class2.php");
|
||||
if (!getperms("P"))
|
||||
{
|
||||
header("location:".e_BASE."index.php");
|
||||
exit();
|
||||
}
|
||||
|
||||
// version 0.8
|
||||
/*if(!plugInstalled('facebook'))
|
||||
{
|
||||
header("location:".e_BASE."index.php");
|
||||
exit();
|
||||
}*/
|
||||
|
||||
|
||||
|
||||
require_once (e_ADMIN."auth.php");
|
||||
|
||||
$fb = new facebook_admin;
|
||||
|
||||
|
||||
if (isset($_POST['save-settings']))
|
||||
{
|
||||
$fb->save_settings();
|
||||
$fb->message = "<div style='text-align:center;padding:20px'>Preferences Updated!</div>";
|
||||
|
||||
}
|
||||
|
||||
$fb->pref_form();
|
||||
|
||||
require_once (e_ADMIN."footer.php");
|
||||
|
||||
|
||||
class facebook_admin
|
||||
{
|
||||
|
||||
var $message;
|
||||
|
||||
function save_settings()
|
||||
{
|
||||
global $pref;
|
||||
$pref['Facebook_Api-Key'] = $_POST['Facebook_Api-Key'];
|
||||
$pref['Facebook_Secret-Key'] = $_POST['Facebook_Secret-Key'];
|
||||
$pref['Facebook_App-Bundle'] = $_POST['Facebook_App-Bundle'];
|
||||
save_prefs(); // uses toDB() automatically
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
function pref_form()
|
||||
{
|
||||
global $ns,$pref;
|
||||
|
||||
$text = ""; // Remove Notice in PHP.
|
||||
|
||||
// if (($pref['Facebook_Api-Key'] == '') || ($pref['Facebook_Secret-Key'] == ''))
|
||||
{
|
||||
$text .= $this->display_help();
|
||||
}
|
||||
|
||||
$text .= '
|
||||
|
||||
<form method="post" action="'.e_SELF.'" class="fborder admin-form">
|
||||
<div><img src="'.e_PLUGIN.'facebook/images/facebooklogo.gif" alt="" /> </div>
|
||||
<div style="clear:both"></div>
|
||||
<table cellpadding="0" cellspacing="0" class="adminform" >
|
||||
<colgroup span="2" >
|
||||
<col class = "col-label" style="width:30%" />
|
||||
<col class = "col-control" style="width:70%" />
|
||||
</colgroup >
|
||||
<tr>
|
||||
<td class="forumheader3">Facebook Application ID</td>
|
||||
<td class="forumheader3">
|
||||
<input class="tbox" type="text" id="Facebook_App-Bundle" name="Facebook_App-Bundle" value="'.$pref['Facebook_App-Bundle'].'" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="forumheader3">Facebook API Key</td>
|
||||
<td class="forumheader3">
|
||||
<input class="tbox" type="text" id="Facebook_Api-Key" name="Facebook_Api-Key" value="'.$pref['Facebook_Api-Key'].'" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td class="forumheader3">Facebook Secret Key</td>
|
||||
<td class="forumheader3">
|
||||
<input class="tbox" type="text" id="Facebook_Secret-Key" name="Facebook_Secret-Key" value="'.$pref['Facebook_Secret-Key'].'" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
<tr>
|
||||
<td class="forumheader buttons-bar" style="text-align:center" colspan="2">
|
||||
<input class="button" type="submit" name="save-settings" id="save-settings" value="Save Settings" />
|
||||
</td>
|
||||
</tr>
|
||||
</table></form>';
|
||||
|
||||
$ns->tablerender("Facebook Connect :: General Settings", $this->message.$text);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
function display_help()
|
||||
{
|
||||
global $ns,$pref;
|
||||
|
||||
$text = '
|
||||
<div style="padding:20px">
|
||||
<h2>Setting Up Your Application and Getting an API Key</h2>
|
||||
<table style="'.ADMIN_WIDTH.'">
|
||||
<tr>
|
||||
<td>
|
||||
<p>If you don\'t already have a Facebook Platform API key for your site, create an application with the <a href="http://www.facebook.com/developers" class="external text" title="http://www.facebook.com/developers" rel="nofollow">Facebook Developer application</a>.
|
||||
</p><p><b>Note:</b> Even if you have created an application and received an API key, you should review steps 1.4 through 1.7 and make sure your application settings are appropriate.
|
||||
</p>
|
||||
|
||||
<ol><li>1. Go to <a href="http://www.facebook.com/developers/createapp.php" class="external free" title="http://www.facebook.com/developers/createapp.php" rel="nofollow">http://www.facebook.com/developers/createapp.php</a> to create a new application.
|
||||
</li><li>2. Enter a name for your application in the <b>Application Name</b> field.
|
||||
</li><li>3. Accept the <a href="http://developers.facebook.com/terms.php" class="external text" title="http://developers.facebook.com/terms.php" rel="nofollow">Developer Terms of Service</a>, then click <b>Save Changes</b>.
|
||||
</li><li>4. On the <b>Basic</b> tab, keep all of the defaults.
|
||||
</li><li>5. Take note of the <b>API Key</b>, you\'ll need this shortly.<br/>
|
||||
</li><li>6. Click the <b>Connect</b> tab. Set <b>Connect URL</b> to the top-level directory of the site where you plan to implement Facebook Connect (this is usually your domain, like <a href="http://www.example.com" class="external free" title="http://www.example.com" rel="nofollow">http://www.example.com</a>, but could also be a subdirectory).
|
||||
</li><li>7. You should include a logo that appears on the Facebook Connect dialog. Next to <b>Facebook Connect Logo</b>, click <b>Change your Facebook Connect logo</b> and browse to an image file. The logo can be up to 99 pixels wide by 22 pixels tall, and must be in JPG, GIF, or PNG format.
|
||||
</li><li>8. If you plan to implement Facebook Connect across a number of subdomains of your site (for example, foo.example.com and bar.example.com), you need to enter a <b><a href="/index.php/Base_Domain" title="Base Domain">Base Domain</a></b> (which would be example.com in this case). Specifying a base domain allows you to make calls using the <a href="/index.php/PHP" title="PHP">PHP</a> and <a href="/index.php/JavaScript_Client_Library" title="JavaScript Client Library">JavaScript</a> client libraries as well as get and store session information for any subdomain of the base domain. For more information about subdomains, see <a href="/index.php/Supporting_Subdomains_In_Facebook_Connect" title="Supporting Subdomains In Facebook Connect">Supporting Subdomains In Facebook Connect</a>.
|
||||
</li><li>9. Click <b>Save Changes</b>.
|
||||
</li></ol>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>';
|
||||
|
||||
return $text;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
915
e107_plugins/facebook/facebook_function.php
Normal file
915
e107_plugins/facebook/facebook_function.php
Normal file
@@ -0,0 +1,915 @@
|
||||
<?php
|
||||
//error_reporting(E_ALL);
|
||||
|
||||
|
||||
if ( !defined ( 'e107_INIT' ) ) {
|
||||
exit ;
|
||||
}
|
||||
|
||||
require_once ( e_PLUGIN . 'facebook/facebook-client/facebook.php' ) ;
|
||||
|
||||
|
||||
/**
|
||||
* simple get the Facebook User ID one is logged in!
|
||||
*
|
||||
*/
|
||||
|
||||
function is_fb() {
|
||||
try{
|
||||
$fbclient = & facebook_client();
|
||||
if ($fbclient)
|
||||
return $fbclient->get_loggedin_user();
|
||||
}catch (FacebookRestClientException $e) {
|
||||
//echo "Facebook connect error:".$e->getCode();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add all infos in the facebook table
|
||||
*
|
||||
* if is specified 'full' , retrieve all Facebook infos otherwise just
|
||||
* Standard infos: http://wiki.developers.facebook.com/index.php/Users.getStandardInfo
|
||||
*
|
||||
*/
|
||||
|
||||
function Add_Facebook_Connect_User ( $info = '', $user_id ) {
|
||||
|
||||
|
||||
|
||||
/* $full = array (
|
||||
'facebook_about_me' => Get_Facebook_Info ( 'about_me' ) ,
|
||||
'facebook_activities' => Get_Facebook_Info ( 'activities' ) ,
|
||||
'facebook_birthday_date' => Get_Facebook_Info ( 'birthday_date' ) ,
|
||||
'facebook_books' => Get_Facebook_Info ( 'books' ) ,
|
||||
'facebook_education_history' => Get_Facebook_Info ( 'education_history' ) ,
|
||||
'facebook_hometown_location' => Get_Facebook_Info ( 'hometown_location' ) ,
|
||||
'facebook_hs_info' => Get_Facebook_Info ( 'hs_info' ) ,
|
||||
'facebook_interests' => Get_Facebook_Info ( 'interests' ) ,
|
||||
'facebook_is_app_user' => Get_Facebook_Info ( 'is_app_user' ) ,
|
||||
'facebook_is_blocked' => Get_Facebook_Info ( 'is_blocked' ) ,
|
||||
'facebook_meeting_for' => Get_Facebook_Info ( 'meeting_for' ) ,
|
||||
'facebook_meeting_sex' => Get_Facebook_Info ( 'meeting_sex' ) ,
|
||||
'facebook_movies' => Get_Facebook_Info ( 'movies' ) ,
|
||||
'facebook_music' => Get_Facebook_Info ( 'music' ) ,
|
||||
'facebook_notes_count' => Get_Facebook_Info ( 'notes_count' ) ,
|
||||
'facebook_pic' => Get_Facebook_Info ( 'pic' ) ,
|
||||
'facebook_pic_with_logo' => Get_Facebook_Info ( 'pic_with_logo' ) ,
|
||||
'facebook_pic_big' => Get_Facebook_Info ( 'pic_big' ) ,
|
||||
'facebook_pic_big_with_logo' => Get_Facebook_Info ( 'pic_big_with_logo' ) ,
|
||||
'facebook_pic_small' => Get_Facebook_Info ( 'pic_small' ) ,
|
||||
'facebook_pic_small_with_logo' => Get_Facebook_Info ( 'pic_small_with_logo' ) ,
|
||||
'facebook_pic_square' => Get_Facebook_Info ( 'pic_square' ) ,
|
||||
'facebook_pic_square_with_logo' => Get_Facebook_Info ( 'pic_square_with_logo' ) ,
|
||||
'facebook_political' => Get_Facebook_Info ( 'political' ) ,
|
||||
'facebook_profile_blurb' => Get_Facebook_Info ( 'profile_blurb' ) ,
|
||||
'facebook_profile_update_time' => Get_Facebook_Info ( 'profile_update_time' ) ,
|
||||
'facebook_quotes' => Get_Facebook_Info ( 'quotes' ) ,
|
||||
'facebook_relationship_status' => Get_Facebook_Info ( 'relationship_status' ) ,
|
||||
'facebook_significant_other_id' => Get_Facebook_Info ( 'significant_other_id' ) ,
|
||||
'facebook_tv' => Get_Facebook_Info ( 'tv' ) ,
|
||||
'facebook_wall_count' => Get_Facebook_Info ( 'wall_count' ) ,
|
||||
'facebook_website' => Get_Facebook_Info ( 'website' ) ,
|
||||
'facebook_religion' => Get_Facebook_Info ( 'religion' ) ,
|
||||
'facebook_work_history' => Get_Facebook_Info ( 'work_history' )
|
||||
) ; */
|
||||
|
||||
$standard = array (
|
||||
'facebook_connected' => '1',
|
||||
'facebook_uid' => is_fb() ,
|
||||
'facebook_user_id' => $user_id,
|
||||
'facebook_last_name' => Get_Facebook_Info ( 'last_name' ) ,
|
||||
'facebook_username' => Get_Facebook_Info ( 'username' ) ,
|
||||
'facebook_name' => Get_Facebook_Info ( 'name' ) ,
|
||||
//'facebook_affiliations' => Get_Facebook_Info ( 'affiliations' ) ,
|
||||
'facebook_sex' => Get_Facebook_Info ( 'sex' ) ,
|
||||
'facebook_timezone' => Get_Facebook_Info ( 'timezone' ) ,
|
||||
'facebook_birthday' => Get_Facebook_Info ( 'birthday' ) ,
|
||||
'facebook_profile_url' => Get_Facebook_Info ( 'profile_url' ) ,
|
||||
//'facebook_proxied_email' => Get_Facebook_Info ( 'proxied_emai' ) ,
|
||||
'facebook_email_hashes' => Get_Facebook_Info ( 'email_hashes' ) ,
|
||||
'facebook_first_name' => Get_Facebook_Info ( 'first_name' ) ,
|
||||
'facebook_current_location' => Get_Facebook_Info ( 'current_location' ) ,
|
||||
'facebook_locale' => Get_Facebook_Info ( 'locale' )
|
||||
) ;
|
||||
|
||||
$query = $standard;
|
||||
|
||||
if ( trim ( $info ) == 'full' ) {
|
||||
|
||||
$query = array_push ( $standard, $full ) ;
|
||||
|
||||
}
|
||||
global $sql;
|
||||
|
||||
$sql->db_Insert ( 'facebook', $query ) ;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Function for rendering the Facebook Profile once logged in!
|
||||
*
|
||||
*/
|
||||
|
||||
function Render_Facebook_Profile() {
|
||||
if ( is_fb() ) {
|
||||
|
||||
$html .= '<div class="welcome_msg">';
|
||||
$html .= 'Welcome, ' . Get_Facebook_Info ( 'name' );
|
||||
$html .= '</div>';
|
||||
$html .= '<div class="user_image">';
|
||||
$html .= '<span class="fbimg">';
|
||||
$html .= getProfilePic ( is_fb() , true ) ;
|
||||
$html .= '</span>';
|
||||
$html .= '</div>';
|
||||
|
||||
|
||||
//check for User Permission
|
||||
|
||||
if ( Has_App_Permission( 'publish_stream' ) == 0 ) {
|
||||
|
||||
$html .= '<div class="facebook_notice">';
|
||||
$html .= '<fb:prompt-permission perms="read_stream,publish_stream">';
|
||||
$html .= 'Would you like our application to read from and post to your News Feed?';
|
||||
$html .= '</fb:prompt-permission>';
|
||||
$html .= '</div>';
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
if ( ADMIN )
|
||||
{
|
||||
|
||||
$html .= '<a href="' . e_ADMIN . 'admin.php">→ Admin Area</a><br />';
|
||||
|
||||
}
|
||||
|
||||
$html .= '<br /><a href="' . e_BASE . 'usersettings.php">→ Settings</a><br />';
|
||||
$html .= '<a href="' . e_BASE . 'user.php?id . ' . USERID . '">→ Profile</a><br />';
|
||||
|
||||
*/
|
||||
|
||||
$html .= '<div class="facebook_link">';
|
||||
$html .= '<a href="#" onclick="FB.Connect.logout ( function() { refresh_page() ; } ) "> Logout </a>';
|
||||
$html .= '</div>';
|
||||
|
||||
$html .= '<div class="facebook_link">';
|
||||
$html .= '<a href="' . e_PLUGIN . 'facebook/facebook.php"> Invite Friends</a>';
|
||||
$html .= '</div>';
|
||||
|
||||
return $html;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the facebook client object for easy access.
|
||||
*
|
||||
*/
|
||||
|
||||
function facebook_client() {
|
||||
global $pref;
|
||||
|
||||
static $facebook = null;
|
||||
|
||||
if ( $facebook === null ) {
|
||||
$facebook = new Facebook ( $pref[ 'Facebook_Api-Key' ], $pref[ 'Facebook_Secret-Key' ] ) ;
|
||||
|
||||
if ( !$facebook ) {
|
||||
// Could not create facebook client!
|
||||
}
|
||||
|
||||
}
|
||||
return $facebook;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* since 2009 User Permission Required for Post Stream
|
||||
*
|
||||
* http://wiki.developers.facebook.com/index.php/Users.hasAppPermission
|
||||
*
|
||||
* $ext_perm = email, read_stream, publish_stream, offline_access, status_update, photo_upload, create_event, rsvp_event, sms, video_upload, create_note, share_item.
|
||||
*
|
||||
* return 0 OR 1
|
||||
*/
|
||||
|
||||
|
||||
function Has_App_Permission( $ext_perm ) {
|
||||
|
||||
if ( is_fb() ) {
|
||||
|
||||
$HasAppPermission = facebook_client()->api_client->users_hasAppPermission ( $ext_perm , is_fb() ) ;
|
||||
|
||||
return $HasAppPermission;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Function for retrieve Facebook info by using his API
|
||||
*
|
||||
* more info: http://wiki.developers.facebook.com/index.php/User_ ( FQL )
|
||||
*
|
||||
*/
|
||||
|
||||
function Get_Facebook_Info ( $info , $friend = '' ) {
|
||||
|
||||
|
||||
|
||||
if ( is_fb() ) {
|
||||
|
||||
$uid = is_fb();
|
||||
|
||||
if ( $friend != '' ) {
|
||||
|
||||
$uid = $friend;
|
||||
|
||||
}
|
||||
|
||||
|
||||
$info_data = facebook_client()->api_client->users_getInfo ( $uid, $info ) ;
|
||||
|
||||
if ( ! empty ( $info_data ) ) {
|
||||
|
||||
$data[ $info ] = $info_data[ 0 ][ $info ];
|
||||
|
||||
if ( is_array ( $data[ $info ] ) ) {
|
||||
|
||||
$data[ $info ] = implode ( ',', $info_data[0][ $info ] ) ;
|
||||
|
||||
}
|
||||
|
||||
$text = $data[ $info ] ? $data[ $info ] : null;
|
||||
|
||||
}
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Add new e107 User , by using Facebook Infos
|
||||
*
|
||||
*/
|
||||
|
||||
function Fb_Connect_Me() {
|
||||
|
||||
global $sql;
|
||||
$sql4 = new db;
|
||||
if ( !$sql4->db_select("user_extended","*","user_facebookID = '".is_fb()."' ") ) {
|
||||
|
||||
$nickname = username_exists ( Get_Facebook_Info ( 'first_name' ) );
|
||||
$password = md5 ( is_fb() ) ;
|
||||
$username = "FacebookUser_".is_fb() ;
|
||||
|
||||
$sql2 = new db;
|
||||
|
||||
$sql2->db_Insert ( 'user',
|
||||
array (
|
||||
'user_name' => $nickname,
|
||||
'user_loginname' => $username,
|
||||
'user_password' => $password,
|
||||
'user_login' => Get_Facebook_Info ( 'name' ) ,
|
||||
'user_image' => Get_Facebook_Info ( 'pic' )
|
||||
)
|
||||
) ;
|
||||
$sql3 = new db;
|
||||
$sql3->db_Insert ( 'user_extended',
|
||||
array (
|
||||
'user_extended_id' => last_user() ,
|
||||
'user_facebookID' => is_fb()
|
||||
)
|
||||
) ;
|
||||
|
||||
Add_Facebook_Connect_User('',last_user());
|
||||
|
||||
set_cookies ( last_user(), md5 ( $password ) ) ;
|
||||
|
||||
header ( 'Location:' . e_SELF ) ;
|
||||
}
|
||||
}
|
||||
|
||||
function UEID () {
|
||||
|
||||
global $sql;
|
||||
|
||||
$sql->db_Select ( "user_extended", "user_facebookID", "user_extended_id = '".USERID."' " ) ;
|
||||
|
||||
$row = $sql->db_Fetch() ;
|
||||
|
||||
return $row[ 'user_facebookID' ];
|
||||
|
||||
}
|
||||
/**
|
||||
* When logging out e107 , simulate a Log-Out from Facebook instead of expire Facebook session!
|
||||
*
|
||||
*/
|
||||
|
||||
function Fb_LogOut() {
|
||||
|
||||
//$uid = UEID() ? UEID() : is_fb();
|
||||
|
||||
global $sql;
|
||||
if ( $sql->db_Select ( "facebook", "*", "facebook_connected = '1' AND facebook_user_id = '".USERID."' " ) ) {
|
||||
$row = $sql->db_Fetch();
|
||||
extract($row);
|
||||
|
||||
$sql2 = new db;
|
||||
$sql2->db_Update ( "facebook", "facebook_connected = '0' WHERE facebook_uid = '". $facebook_uid ."' " ) ;
|
||||
header ( 'Location: ' . e_SELF ) ;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-Login in e107 without request new Facebook session!
|
||||
*
|
||||
*/
|
||||
|
||||
function Fb_LogIn() {
|
||||
$sql = new db;
|
||||
$sql2 = new db;
|
||||
if ( $sql->db_Update ( "facebook", "facebook_connected = '1' WHERE facebook_uid = '".is_fb() ."' " ) ) {
|
||||
|
||||
Log_In_Registered_User();
|
||||
|
||||
} else if ( $sql2->db_Select ( "user_extended", "*", "user_facebookID = '".is_fb() ."' " ) ) {
|
||||
$row2 = $sql2->db_Fetch();
|
||||
extract($row2);
|
||||
|
||||
Add_Facebook_Connect_User( '' , $user_extended_id );
|
||||
|
||||
Log_In_Registered_User();
|
||||
|
||||
} else {
|
||||
|
||||
Fb_Connect_Me();
|
||||
|
||||
}
|
||||
|
||||
header ( 'Location: ' . e_SELF ) ;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* check for e107 connection status: 1 = logged In , 0 = logged Out
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
function your_facebook_is() {
|
||||
$uid = is_fb();
|
||||
return ( $uid ) ?
|
||||
'your facebook id is: <b>'. $uid .'</b>'
|
||||
:'';
|
||||
|
||||
}
|
||||
|
||||
function Get_Connection_Status() {
|
||||
$sql = new db;
|
||||
$sql2 = new db;
|
||||
|
||||
if ( ( $sql->db_Select ( "facebook", "*", "facebook_uid = '".is_fb() ."' " ) ) ||
|
||||
|
||||
( $sql2->db_Select ( "user_extended", "*", "user_facebookID = '".is_fb() ."' " ) )
|
||||
|
||||
|
||||
) {
|
||||
$row = $sql->db_Fetch() ;
|
||||
return $row[ 'facebook_connected' ] ? $row[ 'facebook_connected' ] : '0';
|
||||
|
||||
} else {
|
||||
|
||||
return '';
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure e107 and Facebook Are well linked!
|
||||
*
|
||||
*/
|
||||
|
||||
function Facebook_User_Is_Connected() {
|
||||
global $sql;
|
||||
|
||||
if ( $sql->db_select("user_extended", "*", "user_extended_id = '".get_id_from_uid ( is_fb() )."' AND user_facebookID = '".is_fb()."' ") ) {
|
||||
|
||||
return true;
|
||||
|
||||
} else {
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Log out from Facebook by JS
|
||||
*
|
||||
*/
|
||||
|
||||
function Facebook_LogOut() {
|
||||
|
||||
if ( is_fb () ) {
|
||||
onloadRegister ( 'facebook_log_out(); ' );
|
||||
|
||||
Fb_LogOut();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
function Delete_Duplicate_Facebook_User() {
|
||||
|
||||
$id = get_id_from_uid ( is_fb() );
|
||||
|
||||
$sql1->db_Delete("user_extended", "user_extended_id='".$id."'");
|
||||
$sql2->db_Delete("facebook", "facebook_uid='".is_fb()."'");
|
||||
$sql3->db_Delete("user", "user_loginname='FacebookUser_".is_fb()."'");
|
||||
|
||||
|
||||
}
|
||||
|
||||
function Switch_Facebook_User() {
|
||||
|
||||
$sql1 = new db;
|
||||
$sql2 = new db;
|
||||
$sql3 = new db;
|
||||
$sql4 = new db;
|
||||
|
||||
if ( !$sql1->db_Insert ( 'user_extended',
|
||||
array (
|
||||
'user_extended_id' => USERID ,
|
||||
'user_facebookID' => is_fb()
|
||||
))) {
|
||||
|
||||
$sql2->db_Update ( "user_extended", "user_facebookID = '".is_fb()."' WHERE user_extended_id = '". USERID ."' " ) ;
|
||||
|
||||
}
|
||||
|
||||
$id = get_id_from_uid ( is_fb() );
|
||||
|
||||
$sql3->db_Update ( "user_extended", "user_facebookID = '' WHERE user_extended_id = '". $id ."' " );
|
||||
$sql4->db_Update ( "facebook", "facebook_user_id = '".USERID."' WHERE facebook_uid = '". is_fb() ."' " );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* check for Facebook presence and validation
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
function single_uid(){
|
||||
|
||||
$sql = new db;
|
||||
|
||||
|
||||
$count = $sql->db_Count("user_extended", "(*)",
|
||||
"WHERE user_facebookID = '".is_fb()."'");
|
||||
return $count;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
function uid_check() {
|
||||
|
||||
$sql = new db;
|
||||
$sql2 = new db;
|
||||
$sql3 = new db;
|
||||
$sql4 = new db;
|
||||
$sql5 = new db;
|
||||
$sql6 = new db;
|
||||
|
||||
$msg = "";
|
||||
|
||||
if ( $sql->db_select ( "user_extended", "*","user_facebookID = '".is_fb()."' AND user_extended_id !='".USERID."'" ) ) {
|
||||
|
||||
|
||||
// header ( 'Location: ' . e_SELF ) ;
|
||||
|
||||
$msg .= "<div class='facebook_notice'><a href='".e_SELF."?facebook_switch' title='switch user'>would you like to use facebook with this account? press this link!</a></div>";
|
||||
$msg .= "<div class='facebook_notice'><a href='".e_SELF."?facebook_delete' title='delete user'>would you like to delete this facebook account? press this link!</a></div>";
|
||||
|
||||
} else if ( $sql->db_select ( "user_extended", "*", "user_facebookID != '".is_fb()."' ") ) {
|
||||
|
||||
|
||||
$msg = "<div class='facebook_notice'> <a href='usersettings.php' title='click here'>The provided Facebook ID is wrong!</a> </div> <div class='fb_green'>" . your_facebook_is() . "</div>";
|
||||
|
||||
} else if ( $sql->db_select ( "user_extended", "*", "user_facebookID = '' ") ) {
|
||||
|
||||
|
||||
|
||||
$msg = "<div class='facebook_notice'><a href='usersettings.php' title='click here'>Specify your Facebook ID in the Profile Settings! </a></div><div class='fb_green'>" . your_facebook_is() . "</div>";
|
||||
|
||||
} else {
|
||||
|
||||
$msg = '<a href="#" onclick="facebook_onlogin_ready();">
|
||||
<img id="fb_login_image" src="http://static.ak.fbcdn.net/images/fbconnect/login-buttons/connect_light_medium_long.gif" alt="Connect" />
|
||||
</a>';
|
||||
|
||||
}
|
||||
|
||||
return $msg;
|
||||
}
|
||||
|
||||
function uid_exists() {
|
||||
|
||||
global $sql;
|
||||
|
||||
if( $sql->db_select ( "user_extended", "*","user_extended_id = '".USERID."' AND user_facebookID = '".is_fb()."'") ) {
|
||||
|
||||
$row = $sql->db_Fetch() ;
|
||||
|
||||
return $row[ 'user_extended_id' ];
|
||||
|
||||
} else {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* simple display icon
|
||||
*
|
||||
*/
|
||||
|
||||
function fb_icon() {
|
||||
return " <img src=\"".e_PLUGIN."facebook/images/icon_16.png\" alt=\"\" /> ";
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* get profile picture by requesting it to Facebook; but we can use also the infos stored in facebook table!
|
||||
*
|
||||
*/
|
||||
|
||||
function getProfilePic ( $uid, $show_logo = false ) {
|
||||
return ( $uid ) ? ( '<fb:profile-pic uid="' . $uid . '" size="square" ' . ( $show_logo?' facebook-logo="true"':'' ) . '></fb:profile-pic>' )
|
||||
:'<img src="http://static.ak.fbcdn.net/pics/q_default.gif" />';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* get USERID by knowing his Facebook ID
|
||||
*
|
||||
*/
|
||||
|
||||
function get_id_from_uid ( $uid ) {
|
||||
|
||||
global $sql;
|
||||
|
||||
$sql->db_Select( "facebook", "*", "facebook_uid = '$uid' " ) ;
|
||||
|
||||
$row = $sql->db_Fetch() ;
|
||||
|
||||
return $row[ 'facebook_user_id' ];
|
||||
|
||||
}
|
||||
|
||||
|
||||
function render_facebook_init_js ( $uid ) {
|
||||
|
||||
global $pref, $sql;
|
||||
|
||||
$text .=
|
||||
'<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script>
|
||||
<script type="text/javascript">
|
||||
FB_RequireFeatures ( [ "XFBML" ], function() {
|
||||
FB.init ( "' . $pref[ 'Facebook_Api-Key' ] . '", "' .e_PLUGIN . 'facebook/xd_receiver.php" ) ;
|
||||
} ) ;
|
||||
</script>
|
||||
<script src="' . e_PLUGIN . 'facebook/facebook.js" type="text/javascript"></script>';
|
||||
|
||||
$text .= onloadRegister ( sprintf ( "facebook_onload(%s);", ( $uid ) ? "true" : "false" ) ) ;
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Render a custom button to log in via Facebook.
|
||||
* When the button is clicked, the Facebook JS library pops up a Connect dialog
|
||||
* to authenticate the user.
|
||||
* If the user authenticates the application, the handler specified by the
|
||||
* onlogin attribute will be triggered.
|
||||
*
|
||||
* @param $size size of the button. one of ( 'small', 'medium', 'large' )
|
||||
* http://static.ak.fbcdn.net/images/fbconnect/login-buttons/connect_light_medium_long.gif
|
||||
*/
|
||||
function Render_Facebook_Connect_Button ( $size = 'medium' ) {
|
||||
|
||||
if ( !is_fb() ) {
|
||||
|
||||
/* return '<a href="#" onclick="FB.Connect.requireSession(); return false;" ><img id="fb_login_image" src="http://static.ak.fbcdn.net/images/fbconnect/login-buttons/connect_light_medium_long.gif" alt="Connect"/></a>';*/
|
||||
|
||||
return '<fb:login-button ' .
|
||||
'size="' . $size . '" background="light" length="long" ' .
|
||||
'onlogin="facebook_onlogin_ready();"></fb:login-button>';
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Render pseudo Facebook button when USER logOut from e107
|
||||
*
|
||||
*/
|
||||
|
||||
function Render_Fcuk_Facebook_Connect_Button() {
|
||||
|
||||
return '
|
||||
|
||||
<div class="welcome_msg">Welcome '.Get_Facebook_Info ( 'name' ).' !<br /> Click below to Login</div> <br />
|
||||
|
||||
<a href="' . e_SELF . '?login">
|
||||
<img id="fb_login_image" src="'.e_PLUGIN.'facebook/images/facebooklogin.gif" alt="Click to Login"/></a>
|
||||
';
|
||||
|
||||
}
|
||||
|
||||
function register_feed_form_js() {
|
||||
|
||||
onloadRegister ( "facebook_publish_feed_story('".getStreamToPublish()."');" );
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Prevent caching of pages. When the Javascript needs to refresh a page,
|
||||
* it wants to actually refresh it, so we want to prevent the browser from
|
||||
* caching them.
|
||||
*/
|
||||
function prevent_cache_headers() {
|
||||
header ( 'Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0' ) ;
|
||||
header ( 'Pragma: no-cache' ) ;
|
||||
}
|
||||
|
||||
/*
|
||||
* Register a bit of javascript to be executed on page load.
|
||||
*
|
||||
* This is printed in render_footer() , so make sure to include that on all pages.
|
||||
*/
|
||||
function onloadRegister ( $js ) {
|
||||
global $onload_js;
|
||||
$onload_js .= $js;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* expire Facebook session = logOut
|
||||
* not used yet!
|
||||
*/
|
||||
|
||||
function fb_expire_session() {
|
||||
try {
|
||||
|
||||
$fbclient = & facebook_client() ;
|
||||
if ( $fbclient && $fbclient->get_loggedin_user() != "" ) {
|
||||
$fbclient->expire_session() ;
|
||||
}
|
||||
} catch ( Exception $e )
|
||||
{
|
||||
//nothing, probably an expired session
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple get the user message status while connected
|
||||
*
|
||||
*/
|
||||
|
||||
function Get_Fecebook_Status ( $uid ) {
|
||||
return ( $uid ) ?
|
||||
'<fb:user-status uid="' . $uid . '" ></fb:user-status>'
|
||||
:'';
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple render invitation link
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
function Render_Invite_Friends_Link() {
|
||||
return ' <a href="javascript;" onclick="FB.Connect.inviteConnectUsers();' .
|
||||
' return false;">→ Invite them to Connect.</a> ';
|
||||
}
|
||||
|
||||
|
||||
|
||||
function Render_Fun_Box ( $stream , $connections , $width ) {
|
||||
|
||||
global $pref;
|
||||
|
||||
return '<fb:fan profile_id="'.$pref[ 'Facebook_App-Bundle' ].'" stream="'.$stream.'" connections="'.$connections.'" width="'.$width.'"></fb:fan><div style="font-size:8px; padding-left:10px"><a href="'.e_PLUGIN.'facebook">e107fbconnect</a> on Facebook</div>';
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Render all Facebook User Friends
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
function Render_Facebook_Friends_Table() {
|
||||
|
||||
$friends = facebook_client()->api_client->friends_get();
|
||||
|
||||
$n = ( count($friends) * 60 / 2 );
|
||||
|
||||
if ( $n > 300 ) {
|
||||
|
||||
$n = 300;
|
||||
|
||||
}
|
||||
|
||||
if ( is_array ( $friends ) && !empty ( $friends ) ) {
|
||||
|
||||
$html .= '<div style="width:200px;height:'.$n.'px;overflow:auto" >';
|
||||
|
||||
foreach ( $friends as $friend ) {
|
||||
|
||||
if ( $friend ) {
|
||||
|
||||
|
||||
$html .= '<div style="margin:0;width:50px;height:50px;padding-top:10px;padding-right:5px;float:left">' . getProfilePic ( $friend ) . '</div>';
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
$html .= '</div>';
|
||||
return $html;
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display list of Friends that are not Invited yet
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
function Render_Connect_Invite_Friends() {
|
||||
//$friends = facebook_client()->api_client->friends_get() ;
|
||||
//$has_existing_friends = count ( $friends ) ;
|
||||
//$more = $has_existing_friends?' more':'';
|
||||
$num = '<fb:unconnected-friends-count></fb:unconnected-friends-count>';
|
||||
|
||||
if ( $num > 0 ) {
|
||||
//$one_friend_text = 'You have one' . $more . ' Facebook friend that also join on ' . SITENAME;
|
||||
//$multiple_friends_text = 'You have ' . $num.$more . ' Facebook friends that also join on ' . SITENAME;
|
||||
//$invite_link = '<a onclick="FB.Connect.inviteConnectUsers() ; return false;">Invite them to Connect.</a>';
|
||||
|
||||
//$html = '';
|
||||
$html .= '<fb:container class="HideUntilElementReady" condition="FB.XFBML.Operator.equals ( FB.XFBML.Context.singleton.get_unconnectedFriendsCount() , 1 ) " >';
|
||||
|
||||
$html .= '</fb:container>';
|
||||
$html .= '<fb:container class="HideUntilElementReady" condition="FB.XFBML.Operator.greaterThan ( FB.XFBML.Context.singleton.get_unconnectedFriendsCount() , 1 ) " >';
|
||||
$html .= '<a onclick="FB.Connect.inviteConnectUsers() ; return false;">Invite them to Connect.</a>';
|
||||
$html .= '</fb:container>';
|
||||
return $html;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Make the API call to register the feed forms. This is a setup call that only
|
||||
* needs to be made once.
|
||||
*
|
||||
*/
|
||||
function register_feed_forms() {
|
||||
$one_line_stories = $short_stories = $full_stories = array() ;
|
||||
|
||||
$one_line_stories[ ] = '{*actor*} went for a {*distance*} run at {*location*} . ';
|
||||
|
||||
$form_id = facebook_client()->api_client->feed_registerTemplateBundle ( $one_line_stories ) ;
|
||||
return $form_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent duplicate user while adding new user using Facebook
|
||||
*
|
||||
*/
|
||||
|
||||
function username_exists ( $user ) {
|
||||
|
||||
$sql = new db;
|
||||
if ( $sql->db_Select ( "user", "user_loginname", "user_loginname = '$user' " ) ) {
|
||||
$sql2 = new db;
|
||||
$count = $sql2->db_Count ( "user", "(*)",
|
||||
"WHERE $name LIKE '$user%' " ) ;
|
||||
$num = $count+1;
|
||||
return username_exists ( $user.$num ) ;
|
||||
|
||||
} else {
|
||||
|
||||
return $user;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set Login cookies
|
||||
*
|
||||
*/
|
||||
|
||||
function set_cookies ( $id, $pwd ) {
|
||||
global $pref;
|
||||
$cockiename = $pref[ 'cookie_name' ]?$pref[ 'cookie_name' ]:'e107cookie';
|
||||
$cookieval = $id.".".$pwd;
|
||||
|
||||
if ( $pref[ 'user_tracking' ] == 'session' ) {
|
||||
$_SESSION[ $cockiename ] = $cookieval;
|
||||
} else {
|
||||
cookie ( $cockiename, $cookieval, ( time() +3600*24*30 ) ) ;
|
||||
|
||||
|
||||
}
|
||||
|
||||
return $_SESSION[ $cockiename ];
|
||||
}
|
||||
|
||||
/**
|
||||
* just like get_user_info but for all e107 table
|
||||
* not used yet!
|
||||
*/
|
||||
|
||||
function get_info ( $info , $uid ) {
|
||||
|
||||
$sql = new db;
|
||||
|
||||
if ( $sql->db_select ( "user", "*", "user_id = '$uid'" ) ) {
|
||||
|
||||
$row = $sql->db_Fetch();
|
||||
|
||||
extract ( $row ) ;
|
||||
|
||||
return $row[ $info ];
|
||||
|
||||
} else {
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function Log_In_Registered_User(){
|
||||
if ( !USER ) {
|
||||
|
||||
$uid = get_id_from_uid ( is_fb() );
|
||||
|
||||
set_cookies ( get_info( 'user_id' , $uid ), md5 ( get_info( 'user_password' , $uid) ) ) ;
|
||||
|
||||
header ( 'Location:' . e_SELF ) ;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple get last Registered User added by Facebook
|
||||
*
|
||||
*/
|
||||
|
||||
function last_user() {
|
||||
$sql = new db;
|
||||
$qry = "SELECT
|
||||
user_id
|
||||
FROM
|
||||
#user
|
||||
WHERE
|
||||
user_id = (SELECT MAX(user_id)
|
||||
FROM
|
||||
#user
|
||||
) ";
|
||||
$sql->db_Select_gen( $qry ) ;
|
||||
$row = $sql->db_Fetch() ;
|
||||
return $row[ 'user_id' ];
|
||||
}
|
121
e107_plugins/facebook/facebook_menu.php
Normal file
121
e107_plugins/facebook/facebook_menu.php
Normal file
@@ -0,0 +1,121 @@
|
||||
<?php
|
||||
//error_reporting(E_ALL);
|
||||
|
||||
|
||||
require_once (e_BASE.'class2.php');
|
||||
|
||||
include_once (e_PLUGIN.'facebook/facebook_function.php');
|
||||
|
||||
|
||||
if ( isset ($_POST['fb_sig_in_canvas']))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* start the logic...
|
||||
*
|
||||
*/
|
||||
|
||||
global $pref;
|
||||
|
||||
if ( ( $pref[ 'Facebook_Api-Key' ] != '' ) && ( $pref[ 'Facebook_Secret-Key' ] != '' ) && ( $pref[ 'user_reg' ] == 1 ) )
|
||||
{
|
||||
|
||||
if ( USER ) {
|
||||
|
||||
if ( USERID == get_id_from_uid ( is_fb() ) ) {
|
||||
|
||||
if ( Facebook_User_Is_Connected() === true ) {
|
||||
|
||||
$html .= Render_Facebook_Profile();
|
||||
|
||||
$html .= Render_Connect_Invite_Friends();
|
||||
|
||||
} else {
|
||||
|
||||
$html .= uid_check();
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if ( is_fb() && uid_exists() && ( single_uid() == 1 ) ) {
|
||||
|
||||
Add_Facebook_Connect_User( '', USERID );
|
||||
|
||||
header ( 'Location:' . e_SELF ) ;
|
||||
|
||||
} else if ( is_fb() && ( USERID != get_id_from_uid ( is_fb() ) ) ) {
|
||||
|
||||
|
||||
//return Facebook_LogOut();
|
||||
|
||||
$html .= uid_check();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
if ( ( Get_Connection_Status() == '' ) && ( Facebook_User_Is_Connected() === true ) ) {
|
||||
|
||||
$html .= uid_check();
|
||||
|
||||
} else {
|
||||
|
||||
$html .= Render_Facebook_Connect_Button();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if ( is_fb() ) {
|
||||
|
||||
|
||||
if ( Get_Connection_Status() == '' ) {
|
||||
|
||||
$html .= '<a href="#" onclick="facebook_onlogin_ready();">
|
||||
<img id="fb_login_image" src="http://static.ak.fbcdn.net/images/fbconnect/login-buttons/connect_light_medium_long.gif" alt="Connect" />
|
||||
</a>';
|
||||
|
||||
// Fb_Connect_Me();
|
||||
|
||||
} else if ( Get_Connection_Status() == 1 ) {
|
||||
|
||||
//not a real error! just some problem with Facebook ID
|
||||
|
||||
$html .= 'Ops... Some error Occur';
|
||||
|
||||
} else if ( Get_Connection_Status() == 0 ) {
|
||||
|
||||
|
||||
$html .= Render_Fcuk_Facebook_Connect_Button();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
$html .= Render_Facebook_Connect_Button();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$caption = 'facebook';
|
||||
// $text = $tp->parseTemplate($html, true, $facebook_shortcodes);
|
||||
|
||||
$ns->tablerender($caption, $html);
|
||||
|
||||
?>
|
BIN
e107_plugins/facebook/images/facebook_24.png
Normal file
BIN
e107_plugins/facebook/images/facebook_24.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
BIN
e107_plugins/facebook/images/facebook_48.png
Normal file
BIN
e107_plugins/facebook/images/facebook_48.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
BIN
e107_plugins/facebook/images/facebooklogin.gif
Normal file
BIN
e107_plugins/facebook/images/facebooklogin.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.3 KiB |
BIN
e107_plugins/facebook/images/facebooklogo.gif
Normal file
BIN
e107_plugins/facebook/images/facebooklogo.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
BIN
e107_plugins/facebook/images/icon_16.png
Normal file
BIN
e107_plugins/facebook/images/icon_16.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 578 B |
BIN
e107_plugins/facebook/images/icon_32.png
Normal file
BIN
e107_plugins/facebook/images/icon_32.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
11
e107_plugins/facebook/index.php
Normal file
11
e107_plugins/facebook/index.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
if ( !defined ( 'e107_INIT' ) ) {
|
||||
exit ;
|
||||
}
|
||||
|
||||
Header ('Location: ' . e_BASE );
|
||||
|
||||
|
||||
|
||||
?>
|
21
e107_plugins/facebook/plugin.xml
Normal file
21
e107_plugins/facebook/plugin.xml
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!-- $Id: plugin.xml,v 1.1 2009-11-09 02:48:44 e107coders Exp $ -->
|
||||
|
||||
<e107Plugin name="facebook" version="0.3" compatibility="0.8" installRequired="true">
|
||||
<author name="Luca Filosofi" url="http://ask.altervista.org" email="aseptik@gmail.com" />
|
||||
<description>Facebook Connect for e107</description>
|
||||
<copyright>Copyright e107 Inc e107.org, Licensed under GPL (http://www.gnu.org/licenses/gpl.txt)</copyright>
|
||||
<category>Auth</category>
|
||||
<adminLinks>
|
||||
<link url='facebook_config.php' description='Facebook Connect' icon='images/icon_32.png' iconSmall='images/icon_16.png' primary='true' >Facebook Connect</link>
|
||||
</adminLinks>
|
||||
<mainPrefs>
|
||||
<pref name="Facebook_Api-Key"></pref>
|
||||
<pref name="Facebook_Secret-Key"></pref>
|
||||
<pref name="Facebook_App-Bundle" active='false'></pref>
|
||||
</mainPrefs>
|
||||
<extendedFields>
|
||||
<field name="facebookID" type='EUF_INTEGER' default='0' active="true" />
|
||||
</extendedFields>
|
||||
</e107Plugin>
|
28
e107_plugins/facebook/share.sc
Normal file
28
e107_plugins/facebook/share.sc
Normal file
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
* http://wiki.developers.facebook.com/index.php/Fb:share-button
|
||||
*
|
||||
* $box_type = box_count, button_count, button, icon, or icon_link
|
||||
*
|
||||
*
|
||||
*
|
||||
*<fb:share-button class="meta" type="icon_link">
|
||||
<meta name="medium" content="blog"/>
|
||||
<meta name="title" content="Leonidas in All of Us"/>
|
||||
<meta name="video_type" content="application/x-shockwave-flash"/>
|
||||
<meta name="video_height" content="345"/>
|
||||
<meta name="video_width" content="473"/>
|
||||
<meta name="description" content="That's the lesson 300 teaches us."/>
|
||||
<link rel="image_src" href="http://9.content.collegehumor.com/d1/ch6/f/6/collegehumor.b38e345f621621dfa9de5456094735a0.jpg"/>
|
||||
<link rel="video_src" href="http://www.collegehumor.com/moogaloop/moogaloop.swf?clip_id=1757757&autoplay=true"/>
|
||||
<link rel="target_url" href="http://www.collegehumor.com/video:1757757"/>
|
||||
</fb:share-button>
|
||||
*/
|
||||
|
||||
$news_item = getcachedvars('current_news_item'); //get news id
|
||||
|
||||
$box_type = "box_count";
|
||||
|
||||
$share = "<fb:share-button href='".e_SELF."?item.".$news_item['news_id']."' type='{$box_type}'></fb:share-button>";
|
||||
|
||||
return $share;
|
||||
|
28
e107_plugins/facebook/xd_receiver.php
Normal file
28
e107_plugins/facebook/xd_receiver.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
// cache the xd_receiver
|
||||
header('Cache-Control: max-age=225065900');
|
||||
header('Expires:');
|
||||
header('Pragma:');
|
||||
|
||||
?>
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" >
|
||||
<head>
|
||||
<title>cross domain receiver page</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!--
|
||||
This is a cross domain (XD) receiver page. It needs to be placed on your domain so that the Javascript
|
||||
library can communicate within the iframe permission model. Put it here:
|
||||
|
||||
http://www.example.com/xd_receiver.php
|
||||
-->
|
||||
|
||||
<?php
|
||||
echo '<script src="http://static.ak.facebook.com/js/api_lib/v0.4/XdCommReceiver.debug.js" type="text/javascript"></script>';
|
||||
?>
|
||||
</body>
|
||||
</html>
|
Reference in New Issue
Block a user