fblikebutton.module in Facebook Like Button 7.2
Same filename and directory in other branches
Adds Facebook's "Like" button to each selected node type. Adds a block with a global static value where users can "Like" the URL set by admins.
File
fblikebutton.moduleView source
<?php
// $Id$
/**
* @file
* Adds Facebook's "Like" button to each selected node type.
* Adds a block with a global static value where users can "Like" the URL set by
* admins.
*/
/**
* Implements of hook_menu().
*/
function fblikebutton_menu() {
$items['admin/config/fblikebutton'] = array(
'title' => 'FB Like Button',
'description' => 'Configure the Facebook Like button',
'page callback' => 'system_admin_menu_block_page',
'access arguments' => array(
'administer fblikebutton',
),
'position' => 'right',
'weight' => -20,
'type' => MENU_NORMAL_ITEM,
'file' => 'system.admin.inc',
'file path' => drupal_get_path('module', 'system'),
);
$items['admin/config/fblikebutton/dynamic'] = array(
'title' => 'Dynamic Like button settings',
'description' => 'Configure the settings for the Like button as it appears on individual nodes (liking that node).',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'fblikebutton_dynamic_settings',
),
'access arguments' => array(
'administer fblikebutton',
),
'type' => MENU_NORMAL_ITEM,
'file' => 'fblikebutton.admin.inc',
'weight' => 0,
);
$items['admin/config/fblikebutton/static'] = array(
'title' => 'Static Like button settings',
'description' => 'Configure the settings for the static Like button as it appears in the block (liking a given url). Use this to like for example your Facebook fanpage.',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'fblikebutton_static_settings',
),
'access arguments' => array(
'administer fblikebutton block',
),
'type' => MENU_NORMAL_ITEM,
'file' => 'fblikebutton.admin.inc',
'weight' => 1,
);
return $items;
}
/**
* Helper function to generate the configuration array used to generate the like
* button.
*/
function fblikebutton_conf($type = 'dynamic') {
$prefix = 'fblikebutton';
if ($type == 'static') {
$prefix = 'fblikebutton_bl';
}
$conf = array(
'layout' => variable_get($prefix . '_layout', 'standard'),
'action' => variable_get($prefix . '_action', 'like'),
'color_scheme' => variable_get($prefix . '_color_scheme', 'light'),
'show_faces' => variable_get($prefix . '_show_faces', 'true'),
'font' => variable_get($prefix . '_font', 'arial'),
'height' => variable_get($prefix . '_iframe_height', '80'),
'width' => variable_get($prefix . '_iframe_width', '450'),
'send' => variable_get($prefix . '_send', 'true'),
'other_css' => check_plain(variable_get($prefix . '_iframe_css', '')),
'share' => variable_get($prefix . '_share', ''),
'language' => variable_get($prefix . '_language', 'en_US'),
);
return $conf;
}
/**
* Implements of hook_node_view().
*/
function fblikebutton_node_view($node, $view_mode) {
global $user, $base_url;
$types = variable_get('fblikebutton_node_types', array());
$fullnodedisplay = variable_get('fblikebutton_full_node_display', 0);
$teaserdisplay = variable_get('fblikebutton_teaser_display', 0);
$full = $view_mode == 'full' ? TRUE : FALSE;
$show = !empty($types[$node->type]) && user_access('access fblikebutton');
$webpage_to_like = url("node/{$node->nid}", array(
'absolute' => TRUE,
));
$likebutton_weight = variable_get('fblikebutton_weight', '0');
$conf = fblikebutton_conf();
if ($show) {
// Content area
if ($view_mode == 'teaser' && $teaserdisplay == 1 || $view_mode == 'full' && $fullnodedisplay == 0) {
$node->content['fblikebutton_field'] = array(
'#markup' => _fblikebutton_field($webpage_to_like, $conf),
'#weight' => $likebutton_weight,
);
}
// Link area
if ($view_mode == 'teaser' && $teaserdisplay == 2 || $view_mode == 'full' && $fullnodedisplay == 2) {
$node->content['links']['#links']['fblikebutton_field'] = array(
'title' => _fblikebutton_field($webpage_to_like, $conf),
'html' => TRUE,
);
}
}
}
/**
* Implements of hook_permission().
*/
function fblikebutton_permission() {
return array(
'administer fblikebutton' => array(
'title' => t('Administer FB Like button'),
'description' => t('Perform administration tasks for FB Like button'),
),
'administer fblikebutton block' => array(
'title' => t('Administer FB Like button block'),
'description' => t('Perform administration tasks for FB Like button block'),
),
'access fblikebutton' => array(
'title' => t('Access FB Like button'),
),
);
}
/**
* Implementation of hook_block_info().
*/
function fblikebutton_block_info() {
$fullnodedisplay = variable_get('fblikebutton_full_node_display', 0);
$blocks['fblikebutton_static_block'] = array(
'info' => t('Static FB Like button'),
'cache' => DRUPAL_NO_CACHE,
);
if ($fullnodedisplay == 1) {
$blocks['fblikebutton_dynamic_block'] = array(
'info' => t('Dynamic FB Like button'),
'cache' => DRUPAL_NO_CACHE,
);
}
return $blocks;
}
/**
* Implementation of hook_block_configure().
*/
function fblikebutton_block_configure($delta = '') {
global $base_url;
$form = array();
if ($delta == 'fblikebutton_static_block') {
$form['fblikebutton_static_block'] = array(
'#type' => 'fieldset',
'#title' => t('Static FB Like button block'),
'#collapsible' => FALSE,
);
$form['fblikebutton_static_block']['fblikebutton_static_config'] = array(
'#markup' => '<p>' . t('To configure the URL and the appearance of the button go to the ' . l(t('static Like button settings'), 'admin/config/fblikebutton/static') . '. Make sure you set the right permissions on the ' . l(t('permissions page'), 'admin/people/permissions') . '.</p>'),
);
}
if ($delta == 'fblikebutton_dynamic_block') {
$form['fblikebutton_dynamic_block'] = array(
'#type' => 'fieldset',
'#title' => t('Dynamic FB Like button block'),
'#collapsible' => FALSE,
);
$form['fblikebutton_dynamic_block']['fblikebutton_dynamic_config'] = array(
'#markup' => '<p>' . t('To configure the visibility and the appearance of the button go to the ' . l(t('dynamic Like button settings'), 'admin/config/fblikebutton/dynamic') . '. You can enhance the visibility settings by using the settings on this page. Make sure you set the right permissions on the ' . l(t('permissions page'), 'admin/people/permissions') . '.</p>'),
);
}
return $form;
}
/**
* Implementation of hook_block_view().
*/
function fblikebutton_block_view($delta = '') {
global $base_url;
$node = node_load(arg(1));
$types = variable_get('fblikebutton_node_types', array());
if ($node) {
$show = !empty($types[$node->type]) && user_access('access fblikebutton');
}
else {
$show = NULL;
}
$fullnodedisplay = variable_get('fblikebutton_full_node_display', 0);
$block = array();
switch ($delta) {
case 'fblikebutton_dynamic_block':
if ($show && $fullnodedisplay == 1) {
$webpage_to_like = url("node/{$node->nid}", array(
'absolute' => TRUE,
));
$conf = fblikebutton_conf();
$block['content'] = _fblikebutton_field($webpage_to_like, $conf);
}
break;
case 'fblikebutton_static_block':
$addr = variable_get('fblikebutton_block_url', $base_url);
$conf = fblikebutton_conf('static');
$block['content'] = _fblikebutton_field($addr, $conf);
break;
}
return $block;
}
/**
* Implements hook_ds_fields_info().
*/
function fblikebutton_ds_fields_info($entity_type) {
$fields = array();
if ($entity_type == 'node') {
$ui_limit = array();
$bundles = variable_get('fblikebutton_node_types', array());
foreach ($bundles as $bundle) {
$ui_limit[] = $bundle . '|*';
}
$fields['node'] = array();
$fields['node']['fblikebutton_ds_field'] = array(
'title' => t('Dynamic Facebook Like button'),
'field_type' => DS_FIELD_TYPE_FUNCTION,
'function' => '_fblikebutton_ds_field',
'ui_limit' => $ui_limit,
);
}
return $fields;
}
/**
* Callback for ds button.
*/
function _fblikebutton_ds_field($field) {
if (!user_access('access fblikebutton')) {
return '';
}
$uri = entity_uri($field['entity_type'], $field['entity']);
$url = url($uri['path'], array(
'absolute' => TRUE,
));
$conf = fblikebutton_conf();
return _fblikebutton_field($url, $conf);
}
/**
* Build the like button. This is essentially just a convienience function that
* appends the url to the configuration array.
*/
function _fblikebutton_field($webpage_to_like, $conf) {
$conf['url'] = $webpage_to_like;
return theme('fblikebutton', $conf);
}
/**
* Implements hook_theme().
*/
function fblikebutton_theme() {
$theme = array();
$theme['fblikebutton'] = array(
'variables' => fblikebutton_conf('static'),
'file' => 'fblikebutton.theme.inc',
'template' => 'fblikebutton',
);
return $theme;
}
Functions
Name | Description |
---|---|
fblikebutton_block_configure | Implementation of hook_block_configure(). |
fblikebutton_block_info | Implementation of hook_block_info(). |
fblikebutton_block_view | Implementation of hook_block_view(). |
fblikebutton_conf | Helper function to generate the configuration array used to generate the like button. |
fblikebutton_ds_fields_info | Implements hook_ds_fields_info(). |
fblikebutton_menu | Implements of hook_menu(). |
fblikebutton_node_view | Implements of hook_node_view(). |
fblikebutton_permission | Implements of hook_permission(). |
fblikebutton_theme | Implements hook_theme(). |
_fblikebutton_ds_field | Callback for ds button. |
_fblikebutton_field | Build the like button. This is essentially just a convienience function that appends the url to the configuration array. |