Extension:Facebook

This is the README file for the Facebook extension for MediaWiki software. The extension can only be installed by the administrator of a MediaWiki installation. Please note that this extension was developed by a third party and the Wikia development team.

The Facebook Platform enables you to make your wiki more social. With this extension installed, users can log in with their Facebook accounts and access other features enabled by this extension.

Connect account with Facebook
 This wiki is enabled with Facebook Connect, the next evolution of Facebook Platform. This means that when you are Connected, in addition to the normal benefits you see when logging in, you will be able to take advantage of some extra features...

Features

 * "Single Sign On" experience via Facebook Connect
 * On a successful Connect, allows the user to choose a nickname and creates a new account for that user on the wiki
 * Updates the wiki user's information from Facebook upon login (opt-out soon to come)
 * Logging out of Facebook logs you out of the wiki and vice versa
 * And more...

User Rights from Facebook Group
Please note that on October 6, 2010, Facebook launched a redesigned version of Facebook Groups. The new version does not have a way to add officers, and newly-created Facebook groups may not work as described below.

Instead of using the built-in special pages to manage user rights, this extension enables users to manage rights using a Facebook group. By simply creating a group and providing the group ID, Connected users will automatically be promoted to any of three implicit groups:
 * Group member: This right will be attached to people belonging to the Facebook group or "awaiting reply."
 * Group officer: Making someone an officer of the group will automatically give them Bureaucrat rights.
 * Group admin: Likewise, admins of the Facebook group will inherit Sysop rights on the wiki.

A fourth group is also provided: Facebook Connect user. All accounts created by Facebook Connect belong to this group.

On my personal wiki, I set $wgFbDisableLogin to true and $wgFbUserRightsFromGroup to a secret Facebook group. In LocalSettings.php, I put the following user rights code after including Facebook.php. This allows only members of the secret Facebook group to read or edit the wiki, and endows officership to admins of the group. (Note: See the Talk page for possible caveats to this feature.)
 * Example

XFBML
XFBML in wiki text is enabled by default. Non-secure tags and attributes are excluded from the final page output. Due to a bug in MediaWiki, the facebook-logo attribute of  is also dropped from the final page output. Applying the patch posted to this bug report resolves this error. Hopefully the patch will be included in MediaWiki's code in the future.

If XFBML is enabled, then  maybe be used as an alternative for $wgAllowExternalImages with the added benefit that all photos are screened against Facebook's Code of Conduct and subject to dynamic privacy.

Tags that work

 * Activity Feed 
 * Comments 
 * Facepile 
 * Like Button 
 * Live Stream 
 * Login with Faces </fb:login-button>
 * Recommendations <fb:recommendations></fb:recommendations>

Tags that don't work
Works now for me! Just use <fb:like-box href="http://www.facebook.com/name">
 * Like Box <fb:like-box profile_id="185550966885"></fb:like-box>

No more annoying xd_receiver.php!
The new JavaScript SDK doesn't require a xd_receiver.php file for cross-domain (xd) communication. For those wondering how it accomplishes this magic, read on...

The new library circumvents the need for a xd_receiver.php file via a dynamically-constructed Flash object or the PostMessage feature of HTML5. Unfortunately, these two features are not available in every environment. In this case, a page is still required to implement Facebook's xd communication functions (like xd_receiver.php used to do). Their fall-back solution: they use the current page in an iframe (which, of course, links to the Connect functions), but with an extra hash (#) and special token. The technique is known as fragment.

The same Connect code on the reused page falls back into "xd_receiver" mode upon seeing the token in the fragment. It skips the initialization of the beefy Connect library and part of the document-rendering process (document.body.style.display = 'none';</tt>). Voila! The result: a perfectly functional xd_receiver.php, fabricated out of the current page by reusing the URL, trashing the DOM and only loading the necessary JS. Ingenious! ref1, ref2.

Download
You are always better off with the most recent SVN release:
 * 1) Download SVN files via SourceForge tarball
 * 2) Browse the source code
 * 1) Browse the source code

Installation
First, like any extension, you will need to place the folder containing the PHP source files into the extensions folder of your MediaWiki installation. Make your wiki aware of the extension by including it in your Localsettings.php.

Database update
Your database will need to be updated to work with Facebook. This process will probably be made much simpler for MediaWiki 1.17, but until then the update must be done from the command line. It will only work with PHP 5. Some web servers still default to PHP 4, which you can check using the following command:

$ php --version PHP 5.2.15 (cli) (built: Dec 15 2010 14:09:31)

Assuming PHP 5, run MediaWiki's update script.

$ cd path/to/site/w/ $ php maintenance/update.php

Fixing Database prefix problems
If you use a database prefix, the maintenance update script may fail. In that case, add your database prefix to the file-names in the folder /extensions/Facebook/sql to the following files: fbconnect_event_show.sql fbconnect_event_stats.sql user_fbconnect.sql and run the maintenance/update script again.

You may notice that your facebook extension is still not functional. When going to special pages -> Log in with Facebook, you get a database error, where you can observe that you have a duplicated database prefix. To fix this, edit the file extensions/Facebook/FacebookDB.php, and find the function getPrefix around line 212. Modify the return value as follows: return self::sharedDB ? $wgSharedPrefix : ""; //bugfix for $wgDBprefix; This should eliminate your double prefix issue.

Alternatively, if you are checking out via SVN, updating to any revision above 404 will contain this fix.

Configuration
The file config.default.php contains the steps for creating a new Facebook application and different ways to customize your setup. You may edit config.default.php directly, but in order to preserve changes across updates it is recommended that you save the modified file as config.php. Alternatively, you may include your settings in Localsettings.php after the  statement above.

It is highly recommended that you enable the "Remember my login" option by default so that the user doesn't have to go through the Facebook login process each time.

Upgrading

 * Take care upgrading from older versions of this extension (from r91, pre-March 2010). Unfortunately, due to the new database layout, backwards compatibility was unable to be retained and considerable user renaming might have to be done. Updating from r100+ is safe and recommended.
 * When updating from an older version, consider bumping $wgStyleVersion.
 * Note that if you are using a version from 2011 (v3.0+), the name of the extension folder has changed from "extensions/FBConnect" to "extensions/Facebook". Simply overwriting the files in the old directory won't work because some JavaScript and CSS paths are hard-coded.

SourceForge
The primary repository for this extension is at http://sourceforge.net/projects/fbconnect4mw

Twitter
This fully-automated feed was created as a convenience for following any commits and releases: http://twitter.com/fbconnect4mw