forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			261 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			261 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?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));
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |