233 lines
5.7 KiB
JavaScript
233 lines
5.7 KiB
JavaScript
/************************************************/
|
|
/* IPB3 Javascript */
|
|
/* -------------------------------------------- */
|
|
/* ips.facebook.js - Facebook Connect code */
|
|
/* (c) IPS, Inc 2008 */
|
|
/* -------------------------------------------- */
|
|
/* Author: Matt Mecham, Rikki Tissier */
|
|
/************************************************/
|
|
|
|
var _fb = window.IPBoard;
|
|
|
|
_fb.prototype.facebook = {
|
|
api: '',
|
|
linkedMember: {},
|
|
mem_fb_uid: 0,
|
|
|
|
/*------------------------------*/
|
|
/* Constructor */
|
|
init: function()
|
|
{
|
|
Debug.write("Initializing ips.facebook.js");
|
|
|
|
//document.observe("dom:loaded", function(){
|
|
|
|
//});
|
|
},
|
|
|
|
/**
|
|
* Wrapper for loadUser when used on the log in page
|
|
*/
|
|
login_loadUser: function()
|
|
{
|
|
/* Annoyingly, this has to go here */
|
|
ipb.facebook.api = FB.Facebook.apiClient;
|
|
|
|
ipb.facebook.loadUser();
|
|
},
|
|
|
|
/**
|
|
* Wrapper for loadUser when used on the register page
|
|
*/
|
|
register_loadUser: function()
|
|
{
|
|
var content = $('fb-template-main').innerHTML;
|
|
|
|
/* Annoyingly, this has to go here */
|
|
ipb.facebook.api = FB.Facebook.apiClient;
|
|
|
|
$('fbUserBox').update( content );
|
|
FB.XFBML.Host.parseDomTree();
|
|
|
|
/* Set up handler */
|
|
$('fbc_completeNewAcc').observe('click', ipb.facebook.login_completeNewAcc );
|
|
},
|
|
|
|
/**
|
|
* Wrapper for loadUser when used on the UserCP page
|
|
*/
|
|
usercp_loadUser: function()
|
|
{
|
|
/* Has this ID been saved, yet? */
|
|
if ( ! ipb.facebook.mem_fb_uid )
|
|
{
|
|
window.location = ipb.vars['base_url'] + 'app=core&module=usercp&tab=members&area=facebookLink&do=custom&secure_key=' + ipb.vars['secure_hash'];
|
|
}
|
|
|
|
var content = $('fb-template').innerHTML;
|
|
|
|
/* Annoyingly, this has to go here */
|
|
ipb.facebook.api = FB.Facebook.apiClient;
|
|
|
|
$('fbUserBox').update( content );
|
|
FB.XFBML.Host.parseDomTree();
|
|
|
|
/* Set up handler */
|
|
$('userCPForm').observe( 'submit', ipb.facebook.stupidBug );
|
|
$('fbc_remove').observe( 'click', ipb.facebook.usercp_remove );
|
|
},
|
|
|
|
/**
|
|
* Updates the log in box
|
|
*
|
|
*/
|
|
login_updateBox: function()
|
|
{
|
|
/* INIT */
|
|
var content = $('fb-template-main').innerHTML;
|
|
|
|
if ( ipb.facebook.linkedMember['member_id'] > 0 )
|
|
{
|
|
content = content + $('fb-template-linked').innerHTML;
|
|
}
|
|
else
|
|
{
|
|
content = content + $('fb-template-notlinked').innerHTML;
|
|
}
|
|
|
|
$('fbUserBox').update( content );
|
|
FB.XFBML.Host.parseDomTree();
|
|
|
|
/* Set up handlers */
|
|
$('fbc_completeNewAcc').observe('click', ipb.facebook.login_completeNewAcc );
|
|
$('fbc_completeWithLink').observe('click', ipb.facebook.login_linkCheck );
|
|
$('fbc_complete').observe('click', ipb.facebook.login_complete );
|
|
},
|
|
|
|
/**
|
|
* Loads the URL to remove the app
|
|
*
|
|
*/
|
|
usercp_remove: function()
|
|
{
|
|
window.location = ipb.vars['base_url'] + 'app=core&module=usercp&tab=members&area=facebookRemove&do=custom&secure_key=' + ipb.vars['secure_hash'];
|
|
},
|
|
|
|
/**
|
|
* Get around clashes with FBJS
|
|
*
|
|
*/
|
|
stupidBug: function(e)
|
|
{
|
|
Event.stop(e);
|
|
var location = $('userCPForm').action + '&secure_hash=' + ipb.vars['secure_hash'] + '&do=save';
|
|
|
|
[ '_pic', '_avatar', '_status', '_aboutme' ].each( function (i) {
|
|
location += '&fbc_s' + i + '='+ ( $('fbc_s' + i).checked ? 1 : 0 );
|
|
} );
|
|
|
|
window.location = location;
|
|
return false;
|
|
},
|
|
|
|
/**
|
|
* Simply submits our form so PHP can do the final checks
|
|
*
|
|
*/
|
|
login_completeNewAcc: function()
|
|
{
|
|
$('fbc_linkNewAccForm').submit();
|
|
},
|
|
|
|
/**
|
|
* Simply submits our form so PHP can do the final checks
|
|
*
|
|
*/
|
|
login_complete: function()
|
|
{
|
|
$('fbc_linkAlreadyForm').submit();
|
|
},
|
|
|
|
/**
|
|
* Check, via AJAX for an existing account
|
|
*
|
|
*/
|
|
login_linkCheck: function()
|
|
{
|
|
/* Fetch FB ID */
|
|
fbUserId = ipb.facebook.api.get_session().uid;
|
|
|
|
new Ajax.Request( ipb.vars['base_url'] + '&app=core&module=ajax&secure_key=' + ipb.vars['secure_hash'] + '§ion=login&do=authenticateUser&fbid=' + fbUserId,
|
|
{
|
|
method: 'post',
|
|
parameters: { 'emailaddress' : $('fbc_emailAddress').value, 'password' : $('fbc_password').value },
|
|
evalJSON: 'force',
|
|
onSuccess: function(t)
|
|
{
|
|
if( Object.isUndefined( t.responseJSON ) )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
_result = t.responseJSON;
|
|
|
|
if ( _result['status'] == 'error' )
|
|
{
|
|
$('fbc_linkError').update("Email или пароль неверны.");
|
|
$('fbc_linkError').show();
|
|
}
|
|
else
|
|
{
|
|
if ( _result['memberData']['fb_uid'] != 0 )
|
|
{
|
|
$('fbc_linkError').update("Пользователь уже связан с учетной записью facebook");
|
|
$('fbc_linkError').show();
|
|
}
|
|
else
|
|
{
|
|
/* Submit the form and let PHP re-check this and use the facebook PHP ipb.facebook.api to validate the signature, etc */
|
|
$('fbc_linkForm').submit();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
);
|
|
},
|
|
/**
|
|
* Check to see if the facebook user is linked to an IPB account
|
|
*/
|
|
loadUser: function()
|
|
{
|
|
/* Already been here? */
|
|
if ( typeof( ipb.facebook.linkedMember['member_id'] ) != 'undefined' )
|
|
{
|
|
return;
|
|
}
|
|
|
|
/* Fetch FB ID */
|
|
fbUserId = ipb.facebook.api.get_session().uid;
|
|
|
|
/* Got a linked member? */
|
|
new Ajax.Request( ipb.vars['base_url'] + '&app=core&module=ajax&secure_key=' + ipb.vars['secure_hash'] + '§ion=facebook&do=getUserByFbId&fbid=' + fbUserId,
|
|
{
|
|
method: 'post',
|
|
evalJSON: 'force',
|
|
onSuccess: function(t)
|
|
{
|
|
if( Object.isUndefined( t.responseJSON ) )
|
|
{
|
|
ipb.facebook.linkedMember = { 'member_id' : 0 };
|
|
}
|
|
else
|
|
{
|
|
ipb.facebook.linkedMember = t.responseJSON;
|
|
}
|
|
|
|
ipb.facebook.login_updateBox();
|
|
}
|
|
}
|
|
);
|
|
}
|
|
}
|
|
|
|
ipb.facebook.init(); |