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)); | ||
|  |   } | ||
|  | } |