nid, array('absolute' => TRUE)));
$items['dff_like'] = array(
'title' => "",
'html' => TRUE,
);
}
return $items;
}
}
/**
* Implements hook_fb_friend_invite_page_wrap_alter().
*
* @see modules/fb/contrib/fb_friend.module
*
* Here we customize the block which invites facebook friends to visit
* the current page.
*
* By default the invite form is wrapped in serverfbml and embedded
* within a page. Here we alter the data before it is rendered. We
* change the wrapper type to fb_connect_fbml_popup. The result is a
* link which pops up the invite form.
*/
function fb_example_fb_friend_invite_page_wrap_alter(&$elem) {
// Replace serverfbml with popup
if ($elem['#type'] == 'fb_form_serverfbml') {
$elem['#type'] = 'fb_fbml_popup';
$elem['#title'] = t('Invite Friends to View This Page');
$elem['#link_text'] = t('Invite friends to view this page');
$elem['#attributes'] = array('width' => 760);
}
}
/**
* Implements hook_fb_friend_invite_app_alter().
*
* Customizes aspects of the invitation form.
*/
function fb_example_fb_friend_invite_app_alter(&$fbml) {
$fbml['selector']['#attributes']['cols'] = 3;
$fbml['selector']['#attributes']['email_invite'] = FALSE;
$fbml['selector']['#attributes']['import_external_friends'] = FALSE;
}
function fb_example_fb_friend_invite_app_wrap_alter(&$elem) {
// Replace serverfbml with popup
if ($elem['#type'] == 'fb_form_serverfbml') {
$elem['#type'] = 'fb_fbml_popup';
$elem['#title'] = t('Invite Friends to install this application');
$elem['#link_text'] = t('Invite friends to install this application');
$elem['#attributes'] = array('width' => 760);
}
}
/**
* Implements hook_form_alter().
*
* Adds a checkbox to node edit and comment forms. This checkbox lets
* facebook users know that content may be published to their Wall,
* and gives them a chance to prevent that.
*/
function fb_example_form_alter(&$form, $form_state, $form_id) {
// Add stream publish option.
if (isset($GLOBALS['_fb']) && fb_facebook_user()) {
if ($form['#id'] == 'node-form') {
// Add checkbox to control feed publish.
$form['fb_example']['stream_publish'] = array(
'#type' => 'checkbox',
'#title' => t('Share on Facebook'),
'#default_value' => TRUE,
);
}
elseif ($form['form_id']['#value'] == 'comment_form') {
// Add checkbox to control feed publish.
$form['fb_example']['stream_publish'] = array(
'#type' => 'checkbox',
'#title' => t('Share on Facebook'),
'#default_value' => TRUE,
);
}
}
}
/**
* Implements hook_nodeapi().
*
* Publish to facebook Walls when users submit nodes.
*
* @see http://developers.facebook.com/docs/reference/rest/stream.publish
* @see http://developers.facebook.com/docs/guides/attachments
*/
function fb_example_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
if ($op == 'insert' || $op == 'update') {
if (isset($node->stream_publish) && $node->stream_publish) {
$attachment = array(
'name' => $node->title,
'href' => url('node/' . $node->nid, array('absolute' => TRUE)),
'description' => filter_xss($node->teaser, array()),
);
/*
if ($picture = $GLOBALS['user']->picture) {
$url = url($picture, array('absolute' => TRUE));
$attachment['media'][] = array(
'type' => 'image',
'src' => $url,
'href' => $url,
);
}
*/
if ($logo_path = theme_get_setting('logo_path')) {
$url = url($logo_path, array('absolute' => TRUE));
//dpm($logo_path, "logo_path is $logo_path and url is $url");
$attachment['media'][] = array(
'type' => 'image',
'src' => $url,
'href' => $url,
);
}
$user_message = t('Check out my latest post on !site...',
array('!site' => variable_get('site_name', t('my Drupal for Facebook powered site'))));
$actions = array();
$actions[] = array(
'text' => t('Read More'),
'href' => url('node/' . $node->nid, array('absolute' => TRUE)),
);
fb_stream_publish_dialog(array('message' => $user_message,
'attachment' => $attachment,
'action_links' => $actions,
));
}
}
// Another way to add like button, as part of a node.
if ($op == 'view' && variable_get('fb_example_nodeapi_add_like', FALSE)) {
$url = fb_scrub_urls(url('node/' . $node->nid, array('absolute' => TRUE)));
$node->content['dff_like'] = array(
'#value' => "",
'#type' => 'markup',
'#prefix' => '
',
'#suffix' => '
',
);
}
}
/**
* Implementation of hook_comment().
*
* Publish to facebook Walls when users submit comments.
*/
function fb_example_comment(&$a1, $op) {
if ($op == 'insert' || $op == 'update') {
if ($a1['stream_publish']) {
//dpm($a1, "fb_example_comment, publishing to stream");
$node = node_load($a1['nid']);
// http://wiki.developers.facebook.com/index.php/Attachment_(Streams)
$attachment = array(
'name' => $a1['subject'],
'href' => url('node/' . $a1['nid'], array('absolute' => TRUE, 'fragment' => 'comment-' . $a1['cid'])),
'description' => $a1['comment'],
//'properties' => array(t('In reply to') => array('text' => $node->title, 'href' => url("node/" . $node->nid, array('absolute' => TRUE)))),
);
if ($logo_path = theme_get_setting('logo_path')) {
$url = url($logo_path, array('absolute' => TRUE));
//dpm($logo_path, "logo_path is $logo_path and url is $url");
$attachment['media'][] = array(
'type' => 'image',
'src' => $url,
'href' => $url,
);
}
$user_message = t('Check out my latest comment on !site...',
array('!site' => variable_get('site_name', t('my Drupal for Facebook powered site'))));
$actions = array();
$actions[] = array('text' => t('Read More'),
'href' => url('node/' . $a1['nid'], array('absolute' => TRUE)),
);
fb_stream_publish_dialog(array('message' => $user_message,
'attachment' => $attachment,
'action_links' => $actions,
));
}
}
}
/**
* Implements hook_fb_required_perms_alter().
*
* Builds a list of extended permissions required when authorizing the current facebook app.
* @see http://developers.facebook.com/docs/authentication/permissions
*/
function fb_example_fb_required_perms_alter(&$perms) {
if (variable_get('fb_example_require_email', TRUE)) {
$perms[] = 'email';
}
}
/**
* Implements hook_fb().
*
* This hook provides an opportunity to customize the behavior of Facebook Applications.
*
* @param $op
* Indicates what operation is currently being performed, or which behavior
* can be customized. There are a number of these. In some cases,
* modules/fb is informing other modules, and in other operations it is
* asking for information.
* - FB_OP_INITIALIZE - The facebook sdk has been initialized. This tells a
* facebook application is enable for the current request.
* - FB_OP_APP_IS_AUTHORIZED - The visitor to this page has authorized the
* application.
*
* @param $data
* Associative array of information specific to this operation. Usually, but not always, contains:
* - 'fb' - The API provided by the facebook-php-sdk.
* - 'fb_app' - The data about this application stored by fb_app.module.
* - 'fbu' - If the current user is known, their facebook id.
*
* @param $return
* An op-specific return value. Your hook should change this reference
* variable, and not return it. Some operations return an array of data,
* which may be collaboratively built by multiple implementations of this
* hook.
*
*
* Note, some example code is disabled. Change the FALSE to TRUE in
* variable_get calls to test the code.
*/
function fb_example_fb($op, $data, &$return) {
$fb_app = isset($data['fb_app']) ? $data['fb_app'] : NULL;
$fb = isset($data['fb']) ? $data['fb'] : NULL;
// Use devel module to figure out when this hook is called and what it is passed.
//dpm(func_get_args(), "fb_example_fb($op) called"); // debug
if ($op == FB_OP_AJAX_EVENT) {
// We get FB_OP_AJAX_EVENT when fb.js calls us in reponse to a javascript event.
if ($data['event_type'] == 'edge.create' && variable_get('fb_example_like_thanks', FALSE)) {
// Facebook calls this event 'edge.create', because there's a new 'edge'
// in the open graph.
drupal_set_message(t('Thanks for clicking Like!'));
// reloading allows user to see message. This example is contrived,
// there's no real reason to reload page here, and it prevents users
// from adding a comment. In practice, you could put some other javascript here.
$return[] = "FB_JS.reload();";
}
if ($data['event_type'] == 'session_change' && variable_get('fb_example_session_change_redirect', FALSE)) {
if (!isset($GLOBALS['fb_example_new_user'])) {
// The user has clicked the connect button, or logged into/out-of
// facebook in another browser window, then refreshed.
if ($fbu = fb_facebook_user()) {
// The user has connected (as opposed to logged out). Let's redirect
// them to our 'welcome' page. Replace 'welcome' with the path you
// really want.
$url = url('welcome',
array('absolute' => TRUE, 'fb_canvas' => fb_is_canvas()));
// We return javascript to be evaluated by fb.js.
$return[] = "FB_JS.reload('$url');";
}
}
elseif ($GLOBALS['fb_example_new_user']) {
// The user has clicked the connect button and that results in a new
// user being created. Note this will work only when fb_example.module
// has heavier weight than fb_user.module. See fb_example.install.
// Send the user to their edit page.
$url = url('user/' . $GLOBALS['user']->uid . '/edit',
array('absolute' => TRUE, 'fb_canvas' => fb_is_canvas()));
// We return javascript to be evaluated by fb.js.
$return[] = "FB_JS.reload('$url');";
}
}
}
}
/**
* Implements hook_fb_user().
*
* This hook provided by fb_user.module will notify us when a new account is
* created or a local account is logged in via facebook.
*
* @param $op
* Indicates what operation is currently being performed, or which behavior
* can be customized. There are a number of these. In some cases,
* modules/fb is informing other modules, and in other operations it is
* asking for information.
* - FB_USER_OP_PRE_USER - You have a chance to the name or other account
* attributes, before a new user account is created.
* - FB_OP_POST_USER - A new user account was created for a facebook user
* who authorized an app.
*
* @param $data
* Associative array of information specific to this operation.
* Usually, but not always, contains:
* - 'fb' - The API provided by the facebook-php-sdk.
* - 'fb_app' - The data about this application stored by fb_app.module.
* - 'fbu' - If the current user is known, their facebook id.
*
* @param $return
* An op-specific return value. Your hook should change this reference
* variable, and not return it. Some operations return an array of data,
* which may be collaboratively built by multiple implementations of this
* hook.
*
*/
function fb_example_fb_user($op, $data, &$return) {
$fb_app = isset($data['fb_app']) ? $data['fb_app'] : NULL;
$fb = isset($data['fb']) ? $data['fb'] : NULL;
if ($op == FB_USER_OP_POST_USER) {
// Set a global that can be checked in hook_fb, above. Note for this to
// work properly, fb_example.module must be weighted heavier then
// fb_user.module. (See fb_example.install).
$GLOBALS['fb_example_new_user'] = TRUE;
}
}
/**
* Implements hook_preprocess_page().
*
* Under admin >> site building >> facebook apps >> canvas pages, you'll find
* some settings regarding the "processing" of canvas pages. This processing
* changes links for the entire page, so that all links point to
* http://apps.facebook.com/... instead of Drupal's normal base_url.
*
* If instead you only want some of the links on a page to work this way, and
* leave some unmodified, you can take the approach shown here. In this hook
* we process the text in some regions of the page, but not all. So for
* example links in the normal 'content' will not be modified.
*
* The code shown here could also be located in your theme's preprocess
* function, or even in a page template.
*
* Note this function is only relavent when the checkboxes on admin >> site
* building >> facebook apps >> canvas pages are disabled.
*/
function fb_example_preprocess_page(&$variables) {
if (module_exists('fb_canvas') && fb_is_canvas()) {
// Process links in these regions.
foreach (array('content', 'header', 'footer', 'left', 'preface_first', 'preface_middle', 'preface_last') as $region) {
$variables[$region] = fb_canvas_process($variables[$region], array('add_target' => TRUE, 'absolute_links' => TRUE));
}
}
}
/**
* Implements hook_init().
*
* Workaround for a problem with Drupal where a logged in user gets access
* denied when visiting the login or register pages. This can easily happen
* when clicking the facebook connect button on the login or register forms.
* Here will simply redirect the user to the profile page when that happens.
*/
function fb_example_init() {
global $user;
if ($user->uid != 0) {
if (arg(0) == 'user' &&
(arg(1) == 'register' || arg(2) == 'login')) {
// Avoid Drupal's awkward access denied.
if (function_exists('fb_canvas_goto')) {
fb_canvas_goto('user');
}
else {
drupal_goto('user');
}
}
}
}