t('Share This Settings'), 'description' => t('Administer settings related to the Share This module.'), 'page callback' => 'drupal_get_form', 'page arguments' => array('sharethis_admin_settings'), 'access arguments' => array('administer share'), 'type' => MENU_NORMAL_ITEM, ); return $items; } function sharethis_admin_settings() { $form['sharethis_this_onoff'] = array( '#type' => 'fieldset', '#title' => t('Master On/Off Switch'), '#description' => t('You can enable or disable the ShareThis module here.'), '#collapsible' => TRUE, '#collapsed' => FALSE ); $types = array(t('ShareThis Disabled'), 'sharethis_this' => t('ShareThis Enabled')); $form['sharethis_this_onoff']['sharethis_type'] = array( '#type' => 'radios', '#title' => t('Show ShareThis Interface'), '#description' => t('Determine wether or not to show the ShareThis interface. Setting this feature to "Disabled" will prevent the ShareThis links from appearing on your site.'), '#default_value' => variable_get('sharethis_type', 0), '#options' => $types ); // Share This $form['sharethis_this_settings'] = array( '#type' => 'fieldset', '#title' => t('ShareThis API Code (STAPI)'), '#description' => t('The following javascript code can be modified to enhance the appearance of your ShareThis popup, and to determine which Social Networking sites are displayed.'), '#collapsible' => TRUE, '#collapsed' => FALSE ); $sharethis_code = ''; $form['sharethis_this_settings']['sharethis_sharethis_this_code'] = array( '#type' => 'textarea', '#title' => t('Share This Code'), '#description' => t('Javascript code provided by Share This. You can generate your own code !here.', array('!here' => l(t('here'), 'http://sharethis.com/publisher?type=stapi'))), '#default_value' => variable_get('sharethis_sharethis_this_code', $sharethis_code) ); $form['where_to_sharethis_sharethis_this'] = array( // Where to Share '#type' => 'fieldset', '#title' => t('Node Types & Positioning'), '#description' => t('Set the node types and categories you want to display links for.'), '#collapsible' => TRUE, '#collapsed' => FALSE ); $form['where_to_sharethis_sharethis_this']['sharethis_sharethis_this_node_types'] = array( '#type' => 'checkboxes', '#title' => t('Node types'), '#default_value' => variable_get('sharethis_sharethis_this_node_types', array()), '#options' => node_get_types('names') ); if (module_exists('taxonomy')) { $terms = taxonomy_form_all(); if (!empty($terms)) { $form['where_to_sharethis_sharethis_this']['sharethis_sharethis_this_category_types'] = array( '#type' => 'select', '#multiple' => TRUE, '#title' => t('Categories'), '#default_value' => variable_get('sharethis_sharethis_this_category_types', array()), '#options' => taxonomy_form_all() ); } } $teasertypes = array(t('Teaser Display Disabled'), t('Teaser Display Enabled')); $form['where_to_sharethis_sharethis_this']['sharethis_teaser'] = array( '#type' => 'radios', '#title' => t('Show ShareThis in Teasers?'), '#description' => t('If enabled, the ShareThis links will appear in teasers, if disabled, they will only appear on the full node page.'), '#default_value' => variable_get('sharethis_teaser', 1), '#options' => $teasertypes ); $form['where_to_sharethis_sharethis_this']['sharethis_sharethis_this_where'] = array( '#type' => 'select', '#title' => t('Where to display'), '#default_value' => variable_get('sharethis_sharethis_this_where', 0), '#options' => array(t('Links'), t('Nodes')) ); $form['where_to_sharethis_sharethis_this']['sharethis_sharethis_weight'] = array( '#type' => 'weight', '#delta' => 10, '#description' => t('Only applies when node type display is selected.'), '#title' => t('Weight'), '#default_value' => variable_get('sharethis_sharethis_weight', 0), ); return system_settings_form($form); } /** * Implementation of hook_nodeapi(). */ function sharethis_nodeapi(&$node, $op, $teaser, $page) { GLOBAL $base_url; switch ($op) { case 'view': switch (variable_get('sharethis_type', 0)) { case "sharethis_this": if(!$teaser || variable_get('sharethis_teaser', 1)) { if (variable_get('sharethis_sharethis_this_where', 0) == '1') { static $share = 0; if (_sharethis_sharethis_this_show($node->type, $node->nid) && user_access('use share this')) { if ($share == '0') { $share++; drupal_set_html_head(variable_get('sharethis_sharethis_this_code', 0)); } if($node->path) { // customized for pages with node->path specified $node->content['sharethis_sharethis_this'] = array( '#value' => "", '#weight' => variable_get('sharethis_sharethis_weight', 0) ); } else { // the $node object doesn't contain a path, so it has to be built // using the node id for the default display of nodes without a custom path $node->content['sharethis_sharethis_this'] = array( '#value' => "", '#weight' => variable_get('sharethis_sharethis_weight', 0) ); } } } } break; } break; } } /** * Implementation of hook_link(). */ function sharethis_link($type, $node = NULL, $teaser = FALSE) { global $base_url; switch (variable_get('sharethis_type', 0)) { case "sharethis_this": if(!$teaser || variable_get('sharethis_teaser', 1)) { if (variable_get('sharethis_sharethis_this_where', 0) == '0') { static $share = 0; if (_sharethis_sharethis_this_show($node->type, $node->nid) && user_access('use share this')) { if ($share == '0') { $share++; drupal_set_html_head(variable_get('sharethis_sharethis_this_code', 0)); } if($node->path) { // customized for pages with node->path specified $links['sharethis_sharethis_this'] = array( 'title' => "", 'html' => TRUE, 'attributes' => array('id' => 'sharethis_'.$node->nid) ); } else { // the $node object doesn't contain a path, so it has to be built // using the node id for the default display of nodes without a custom path $links['sharethis_sharethis_this'] = array( 'title' => "", 'html' => TRUE, 'attributes' => array('id' => 'sharethis_'.$node->nid) ); } return $links; } } } break; } } /** * Check if the service links should be displayed for the node type/category. */ function _sharethis_sharethis_this_show($type, $nid) { $links_show = FALSE; $node_type = in_array($type, variable_get('sharethis_sharethis_this_node_types', array()), TRUE); if (module_exists('taxonomy')) { $terms = taxonomy_node_get_terms($nid); foreach ($terms as $term) { $category_type = in_array($term->tid, variable_get('sharethis_sharethis_this_category_types', array()), FALSE); } } if ($node_type || $category_type) { $links_show = TRUE; } return $links_show; }