Facebook.php 3.13 KB
<?php
/**
 * Note: If there is an inconsistent error
 * it's due to how I changed the FB load
 * process, may need to change how JS is loaded
 * Proabably move FB.init and FB.Event.subscribe
 * to my init method
 * 
 * This needs to go in the <html tag
 * xmlns:fb="http://www.facebook.com/2008/fbml"
 *
 * http://wpdev.tenzinghost.com
 * API Key:    83f54e078b9aa0e303bba959dc0a566f
 * App Secret: e542aca35ab698121fa5917211013a41
 * App ID:     105917066126941
 * 
 * http://wp.cb
 * API Key:    3bcccfd8c28c52197141266d9e417649
 * App Secret: 9bfcd828bc6ccef12336dea57df93ecb
 * App ID:     138943536118944
 *
 * Graph API Reference:
 * http://developers.facebook.com/docs/reference/api/user
 */

namespace Tz\WordPress\Tools\Auth\Facebook;

use Tz\WordPress\Tools;
use Tz\WordPress\Tools\Auth;

use InvalidArgumentException;

const OPTION_NAME = 'tz_auth_fb';

    call_user_func(function() {
        Vars::$options = new Tools\WP_Option(OPTION_NAME, Array('button_title' => 'Login'));

        Tools\add_actions(__NAMESPACE__ . '\Actions');
        Tools\add_shortcodes(__NAMESPACE__ . '\ShortCodes');

        if (is_admin()) {
            require_once(__DIR__ . DIRECTORY_SEPARATOR . 'Settings.php');
        }
    });

function drawLoginButton($echo = true) {
    $btn = '<a id="TzFB" class="fb_button fb_button_medium"><span class="fb_button_text">' . Vars::$options['button_title'] . '</span></a>';

    if (!$echo) {
        return $btn;
    }

    echo $btn;
}

class Actions {
    public static function wp() {
        global $post; // I want a better way to do this

        if ($post->ID == Auth\Vars::$options['login_page'] && !is_user_logged_in()) {
            require_once(__DIR__ . DIRECTORY_SEPARATOR . 'facebook-sdk.php');
            Vars::$sdk = new \FB\Facebook(Array(
                'appId'  => Vars::$options['application_id']
              , 'secret' => Vars::$options['application_secret']
              , 'cookie' => true
            ));

            if (Vars::$sdk->getSession()) {
                $info = Vars::$sdk->api('/me');
                // get email, verify vs database
                // register and/or login
            }
        }
    }

    public static function wp_enqueue_scripts() {
        if (is_admin() || is_user_logged_in()) {
            return;
        }

        _enqueue_script('facebook-all', 'http://connect.facebook.net/en_US/all.js');
        _enqueue_script('tz-facebook', Tools\url('tz-facebook.js', __FILE__), Array('addEvent'));

        _localize_script('tz-facebook', 'TzFBData', Array('AppID' => Vars::$options['application_id'], 'ext_perms' => implode(',', array_keys(Vars::$options['ext_perms']))));
    }

    public static function get_footer() {
        echo '<div id="fb-root"></div>';
    }
}

class ShortCodes {
    public static function fb_login_button() {
        if (Vars::$sdk->getSession()) {
            ob_start();
            print_r(Vars::$sdk->api('/me'));
            $data = '<pre>' . ob_get_contents() . '</pre>';
            ob_end_clean();

            return $data;
        } else {
            return drawLoginButton(false);
        }
    }
}

class Vars {
    public static $options;
    public static $sdk;
}
?>