'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' => '

' . 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') . '.

'), ); } 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' => '

' . 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') . '.

'), ); } 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; }