From 584e199d1dcaa2f3d7bef48b16799344b33a3ed4 Mon Sep 17 00:00:00 2001 From: Jeremy Trojan Date: Sun, 10 Apr 2011 19:22:12 -0700 Subject: Issue #1106338 by sutriadi: Patched and updated for use with Drupal 7. Kudos to user sutriadi for doing an excellent job. --- fblikebutton.module | 238 ++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 195 insertions(+), 43 deletions(-) (limited to 'fblikebutton.module') diff --git a/fblikebutton.module b/fblikebutton.module index 646b02a..2451d2f 100644 --- a/fblikebutton.module +++ b/fblikebutton.module @@ -10,63 +10,215 @@ * Implementation of hook_menu(). */ function fblikebutton_menu() { - $items['admin/settings/fblikebutton'] = array( - 'title' => 'FB Like Button', - 'description' => 'Control which content types the "like" button should appear on.', + $items['admin/config/fblikebutton'] = array( + 'title' => 'FB Like settings', + 'description' => 'Configure FB 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/general'] = array( + 'title' => 'FB Like settings', + 'description' => 'Configure which the button should appear on.', 'page callback' => 'drupal_get_form', 'page arguments' => array('fblikebutton_admin_settings'), - 'access arguments' => array('administer site configuration'), + 'access arguments' => array('administer fblikebutton'), + 'type' => MENU_NORMAL_ITEM, + 'file' => 'fblikebutton.admin.inc', + 'weight' => 0, + ); + $items['admin/config/fblikebutton/block'] = array( + 'title' => 'FB Like block settings', + 'description' => 'Configure which the block should appear on.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('fblikebutton_block_settings'), + 'access arguments' => array('administer fblikebutton block'), 'type' => MENU_NORMAL_ITEM, 'file' => 'fblikebutton.admin.inc', + 'weight' => 1, ); return $items; } /** - * Implementation of hook_nodeapi(). - * @todo - * Add more config options for like button (size, etc). + * Implementation 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_node_view() + */ +function fblikebutton_node_view($node, $view_mode) { + $types = variable_get('fblikebutton_node_types', array()); + $full = ($view_mode == 'full') ? TRUE : FALSE; + $show = ( ! empty($types[$node->type]) && + $full && user_access('access fblikebutton')); + if ($show) { + $url = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; + $http = ( ! empty($_SERVER['HTTPS'])) ? 'https://' : 'http://'; + $addr = $http . $url; + $conf = array( + 'layout' => variable_get('fblikebutton_layout', "standard"), + 'action' => variable_get('fblikebutton_action', "like"), + 'color_scheme' => variable_get('fblikebutton_color_scheme', "light"), + 'show_faces' => variable_get('fblikebutton_show_faces', "false"), + 'font' => variable_get('fblikebutton_font', "arial"), + ); + $node->content['fblikebutton_field'] = array( + '#markup' => _fblikebutton_field($addr, $conf), + ); + } +} + +/** + * Implementation of hook_block_info() */ -function fblikebutton_nodeapi(&$node, $op, $teaser, $page) { - global $user; +function fblikebutton_block_info() { + $blocks['fblikebutton_block'] = array( + 'info' => t('FB Like button'), + ); + return $blocks; +} + +/** + * Implementation of hook_block_configure() + */ +function fblikebutton_block_configure($delta = '') { global $base_url; - $likebase = $base_url . '/'; - $likepath = drupal_get_path_alias($_GET['q']); - $webpage_to_like = $likebase . $likepath; - switch ($op) { - case 'view': - // Set which node types users can "like". - $types_to_like = variable_get('fblikebutton_node_types', array('page')); - $show_faces = variable_get('fblikebutton_show_faces', 'true'); - // Facebook is doing away with FBML, so we use the iframe plugin option instead. - $likebutton = ''; - // Keep the fblikebutton button out of search results, etc. - if (!$page) { - break; - } - // Do not add the like button to any of the unchecked node types. - if (!in_array($node->type, $types_to_like, TRUE)) { - break; - } - // Set permissions, and keep the button out of teasers. Otherwise, there - // would be 50 "like" buttons on the front page of some sites... Not good. - if (!$teaser && user_access('users may access Like button')) { - $node->content['fblikebutton_button'] = array( - '#value' => $likebutton, - '#weight' => 100, - ); - } - break; + $form = array(); + if ($delta == 'fblikebutton_block') { + $form['fblikebutton_block_url'] = array( + '#title' => t('Homepage URL'), + '#type' => 'textfield', + '#default_value' => variable_get('fblikebutton_block_url', $base_url), + '#description' => t('URL of your homepage to like'), + ); + $form['block'] = array( + '#type' => 'fieldset', + '#collapsible' => false, + '#collapsed' => false, + '#title' => t('Options'), + '#description' => '', + ); + $form['block']['fblikebutton_bl_layout'] = array( + '#type' => 'select', + '#title' => t('Layout style'), + '#options' => array('standard' => t('Standard'), 'box_count' => t('Box Count'), 'button_count' => t('Button Count')), + '#default_value' => variable_get('fblikebutton_bl_layout', 'standard'), + '#description' => t('Determines the size and amount of social context next to the button'), + ); + $form['block']['fblikebutton_bl_show_faces'] = array( + '#type' => 'select', + '#title' => t('Display faces in the box'), + '#options' => array('show' => t('Show faces'), 'hide' => t('Do not show faces')), + '#default_value' => variable_get('fblikebutton_bl_show_faces', 'show'), + '#description' => t('Show profile pictures below the button. Only work on Standard layout'), + ); + $form['block']['fblikebutton_bl_action'] = array( + '#type' => 'select', + '#title' => t('Verb to display'), + '#options' => array('like' => t('Like'), 'recommend' => t('Recommend')), + '#default_value' => variable_get('fblikebutton_bl_action', 'like'), + '#description' => t('The verb to display in the button.'), + ); + $form['block']['fblikebutton_bl_font'] = array( + '#type' => 'select', + '#title' => t('Font'), + '#options' => array('arial' => 'Arial', + 'lucida+grande' => 'Lucida Grande', + 'segoe+ui' => 'Segoe UI', + 'tahoma' => 'Tahoma', + 'trebuchet+ms' => 'Trebuchet MS', + 'verdana' => 'Verdana'), + '#default_value' => variable_get('fblikebutton_bl_font', 'arial'), + '#description' => t('The font to display in the button'), + ); + $form['block']['fblikebutton_bl_color_scheme'] = array( + '#type' => 'select', + '#title' => t('Color scheme'), + '#options' => array('light' => t('Light'), 'dark' => t('Dark')), + '#default_value' => variable_get('fblikebutton_bl_color_scheme', 'light'), + '#description' => t('The color scheme of box environtment'), + ); } + return $form; } /** - * Implementation of hook_perm(). + * Implementation of hook_block_save() */ -function fblikebutton_perm() { - return array('users may access Like button'); +function fblikebutton_block_save($delta = '', $edit = array()) { + if ($delta == 'fblikebutton_block') { + variable_set('fblikebutton_bl_layout', $edit['fblikebutton_bl_layout']); + variable_set('fblikebutton_bl_layout', $edit['fblikebutton_bl_layout']); + variable_set('fblikebutton_bl_show_faces', $edit['fblikebutton_bl_show_faces']); + variable_set('fblikebutton_bl_action', $edit['fblikebutton_bl_action']); + variable_set('fblikebutton_bl_font', $edit['fblikebutton_bl_font']); + variable_set('fblikebutton_bl_color_scheme', $edit['fblikebutton_bl_color_scheme']); + } +} + +/** + * Implementation of hook_block_view() + */ +function fblikebutton_block_view($delta = '') { + global $base_url; + $block = array(); + switch ($delta) { + case 'fblikebutton_block': + default: + $addr = variable_get('fblikebutton_block_url', $base_url); + $conf = array( + 'layout' => variable_get('fblikebutton_bl_layout', "standard"), + 'action' => variable_get('fblikebutton_bl_action', "like"), + 'color_scheme' => variable_get('fblikebutton_bl_color_scheme', "light"), + 'show_faces' => variable_get('fblikebutton_bl_show_faces', "false"), + 'font' => variable_get('fblikebutton_bl_font', "arial"), + ); + $block['content'] = _fblikebutton_field($addr, $conf); + } + return $block; +} + +function _fblikebutton_field($addr, $conf) { + $addr = urlencode($addr); + $width = "100%"; + $layout = $conf['layout']; + $action = $conf['action']; + $colorscheme = $conf['color_scheme']; + $show_faces = $conf['show_faces']; + $font = $conf['font']; + switch ($layout) { + case "box_count": + $height = 65; + case "button_count": + $height = 21; + case "standard": + default: + $height = $show_faces == "false" ? 35 : 80; + } + $height = 60; + + $params = "href=$addr&layout=$layout&show_faces=false&width&font=$font&height=$height&action=$action&colorscheme=$colorscheme"; + $src = htmlentities($params); + $output = ""; + return $output; } -- cgit v1.2.3