Вход Регистрация
Файл: qa-plugin/facebook-login/qa-facebook-login.php
Строк: 169
<?php

/*
    Question2Answer (c) Gideon Greenspan

    http://www.question2answer.org/

    
    File: qa-plugin/facebook-login/qa-facebook-login.php
    Version: See define()s at top of qa-include/qa-base.php
    Description: Login module class for Facebook login plugin


    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    as published by the Free Software Foundation; either version 2
    of the License, or (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    More about this license: http://www.question2answer.org/license.php
*/

    
class qa_facebook_login {
        
        var 
$directory;
        var 
$urltoroot;

        
        function 
load_module($directory$urltoroot)
        {
            
$this->directory=$directory;
            
$this->urltoroot=$urltoroot;
        }

        
        function 
check_login()
        {
            
// Based on sample code: http://developers.facebook.com/docs/guides/web
            
            
$testfacebook=false;
            
            foreach (
$_COOKIE as $key => $value)
                if (
substr($key05)=='fbsr_')
                    
$testfacebook=true;
                    
            if (!
$testfacebook// to save making a database query for qa_opt() if there's no point
                
return;
                
            
$app_id=qa_opt('facebook_app_id');
            
$app_secret=qa_opt('facebook_app_secret');
            
            if (!(
strlen($app_id) && strlen($app_secret)))
                return;
                
            if (!
function_exists('json_decode')) { // work around fact that PHP might not have JSON extension installed
                
require_once $this->directory.'JSON.php';
                
                function 
json_decode($json)
                {
                    
$decoder=new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
                    return 
$decoder->decode($json);
                }
            }
            
            require_once 
$this->directory.'facebook.php';
            
            
$facebook = new Facebook(array(
                
'appId'  => qa_opt('facebook_app_id'),
                
'secret' => qa_opt('facebook_app_secret'),
                
'cookie' => true,
            ));
            
            
$fb_userid=$facebook->getUser();
            
            if (
$fb_userid)
                try {
                    
$user=$facebook->api('/me?fields=email,name,verified,location,website,about,picture');
                
                    if (
is_array($user))
                        
qa_log_in_external_user('facebook'$fb_userid, array(
                            
'email' => @$user['email'],
                            
'handle' => @$user['name'],
                            
'confirmed' => @$user['verified'],
                            
'name' => @$user['name'],
                            
'location' => @$user['location']['name'],
                            
'website' => @$user['website'],
                            
'about' => @$user['bio'],
                            
'avatar' => strlen(@$user['picture']['data']['url']) ? qa_retrieve_url($user['picture']['data']['url']) : null,
                        ));

                } catch (
FacebookApiException $e) {
                    
$facebookuserid=null;
                }
        }
        

        function 
match_source($source)
        {
            return 
$source=='facebook';
        }

        
        function 
login_html($tourl$context)
        {
            
$app_id=qa_opt('facebook_app_id');

            if (!
strlen($app_id))
                return;
                
            
$this->facebook_html($tourlfalse$context);
        }

        
        function 
logout_html($tourl)
        {
            
$app_id=qa_opt('facebook_app_id');

            if (!
strlen($app_id))
                return;
                
            if (isset(
$_COOKIE['fbsr_'.$app_id])) // check we still have a Facebook cookie ...
                
$this->facebook_html($tourltrue'menu');
            else 
// ... if not, show a standard logout link, since sometimes the redirect to Q2A's logout page doesn't complete
                
echo '<A HREF="'.qa_html($tourl).'">'.qa_lang_html('main/nav_logout').'</A>';
        }
        

        function 
facebook_html($tourl$logout$context)
        {
            if ((
$context=='login') || ($context=='register'))
                
$size='large';
            else
                
$size='medium';

?>
      <div id="fb-root" style="display:inline;"></div>
      <script>
        window.fbAsyncInit = function() {
          FB.init({
            appId      : <?php echo qa_js(qa_opt('facebook_app_id'), true)?>,
            status     : true, 
            cookie     : true,
            xfbml      : true,
            oauth      : true
          });

         FB.Event.subscribe('<?php echo $logout 'auth.logout' 'auth.login'?>', function(response) {
           setTimeout("window.location=<?php echo qa_js($tourl)?>", 100);
         });
        };
        (function(d){
           var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
           js = d.createElement('script'); js.id = id; js.async = true;
           js.src = "//connect.facebook.net/en_US/all.js";
           d.getElementsByTagName('head')[0].appendChild(js);
         }(document));
      </script>
      <div class="fb-login-button" style="display:inline; vertical-align:middle;" size="<?php echo $size?><?php echo $logout 'autologoutlink="true"' 'scope="email,user_about_me,user_location,user_website"'?>>
      </div>

<?php
        
        
}
        
        
        function 
admin_form()
        {
            
$saved=false;
            
            if (
qa_clicked('facebook_save_button')) {
                
qa_opt('facebook_app_id'qa_post_text('facebook_app_id_field'));
                
qa_opt('facebook_app_secret'qa_post_text('facebook_app_secret_field'));
                
$saved=true;
            }
            
            
$ready=strlen(qa_opt('facebook_app_id')) && strlen(qa_opt('facebook_app_secret'));
            
            return array(
                
'ok' => $saved 'Facebook application details saved' null,
                
                
'fields' => array(
                    array(
                        
'label' => 'Facebook App ID:',
                        
'value' => qa_html(qa_opt('facebook_app_id')),
                        
'tags' => 'NAME="facebook_app_id_field"',
                    ),

                    array(
                        
'label' => 'Facebook App Secret:',
                        
'value' => qa_html(qa_opt('facebook_app_secret')),
                        
'tags' => 'NAME="facebook_app_secret_field"',
                        
'error' => $ready null 'To use Facebook Login, please <A HREF="http://developers.facebook.com/setup/" TARGET="_blank">set up a Facebook application</A>.',
                    ),
                ),
                
                
'buttons' => array(
                    array(
                        
'label' => 'Save Changes',
                        
'tags' => 'NAME="facebook_save_button"',
                    ),
                ),
            );
        }
        
    }
    

/*
    Omit PHP closing tag to help avoid accidental output
*/
Онлайн: 2
Реклама