tabs = variable_get('share_sharethis_tabs', array('web', 'post', 'email'));
$data->services = variable_get('share_sharethis_services', array('reddit','digg','facebook','myspace','delicious','stumbleupon','technorati','google_bmarks','yahoo_bmarks','yahoo_myweb','windows_live','propeller','slashdot','newsvine','n4g','mixx','blinklist','furl','magnolia','mister_wong'));
$data->publisher = variable_get('share_sharethis_publisher', 'd4a10265-492e-4646-82f0-bb513c7ca25f');
$data->code = variable_get('share_sharethis_code', '');
break;
}
foreach ($data as $key => $value) {
switch ($key) {
case 'node_types':
case 'category_terms':
case 'offsetTop':
$this->offset['top'] = ($value) ? $value : '';
break;
case 'offsetLeft':
$this->offset['left'] = ($value) ? $value : '';
break;
default:
$this->$key = $value;
break;
}
}
}
}
class share_share extends share {
var $tabs = array();
function defaults() {
$this->type = 'share';
$this->label = t('Share popup');
$this->name = t('Share');
$this->effects = 1;
$this->tabs = $this->default_tabs();
}
function default_tabs() {
$all_tabs = array();
foreach (module_implements('share_info') as $module) {
$func = $module .'_share_info';
$tab = $func();
$all_tabs[$tab['id']] = (object)$tab;
$all_tabs[$tab['id']]->module = $module;
}
foreach ($this->tabs as $tab) {
unset($all_tabs[$tab->id]);
}
$tabs = array();
foreach ($all_tabs as $value) {
$tabs[$value->weight][$value->id] = $value;
}
$enabled = array();
foreach ($tabs as $tab) {
ksort($tab);
$enabled+= array_values($tab);
}
$tabs = array_merge($this->tabs, $enabled);
return $tabs;
}
function load_tabs() {
$result = db_query("SELECT * FROM {share_tabs} WHERE share_id = %d ORDER BY weight", $this->share_id);
$tabs = array();
while ($data = db_fetch_object($result)) {
$tab = $data;
$tab_data = (object)module_invoke($data->module, 'share_tab', 'load', $this);
$tab = (array)$tab + (array)$tab_data;
$tab = (object)$tab;
$tabs[] = $tab;
unset($all_tabs[$data->id]);
}
$this->tabs = $tabs;
}
function render($node, $op = FALSE) {
$output = '';
switch ($op) {
case 'link':
$output.= l(t('Share'), 'share/'. $node->nid, array('id' => 'share-'. $this->share_id .'-'. $node->nid, 'class' => 'share-link'));
break;
case 'popup':
$output.= $this->render_popup($node);
break;
default:
$output = $this->render($node, 'link');
$output.= $this->render($node, 'popup');
break;
}
return $output;
}
function render_popup($node) {
$tabs = array();
$content = array();
foreach ($this->tabs as $tab) {
if (!$tab->enabled) {
continue;
}
$tabs[] = array(
'id' => str_replace('_', '-', check_plain($tab->id)),
'name' => $tab->title
);
$func = $tab->module .'_share_tab';
$result = $func('process', $tab, $node);
$content[] = array(
'id' => str_replace('_', '-', check_plain($tab->id)),
'content' => $result
);
}
$data['tabs'] = theme('share_popup_tabs', $tabs, $node->nid);
$data['content'] = theme('share_popup_content', $content, $node->nid);
return theme('share_popup', $data);
}
}
class share_sharethis extends share {
function defaults() {
$services = array(
'reddit',
'digg',
'facebook',
'myspace',
'delicious',
'stumbleupon',
'technorati',
'google_bmarks',
'yahoo_bmarks',
'yahoo_myweb',
'windows_live',
'propeller',
'slashdot',
'newsvine',
'n4g',
'mixx',
'blinklist',
'furl',
'magnolia',
'mister_wong'
);
$this->type = 'sharethis';
$this->label = t('ShareThis popup');
$this->name = t('ShareThis');
$this->tabs = array('web', 'post', 'email');
$this->services = $services;
$this->icon;
$this->publisher = 'd4a10265-492e-4646-82f0-bb513c7ca25f';
$this->button = 1;
$this->buttonText;
$this->popup = 0;
$this->offset = array(
'top' => '',
'left' => ''
);
$this->onclick;
$this->code = '';
}
function gen_setting($setting) {
$string = array();
foreach ($this->$setting as $value) {
if ($value) {
$string[] = $value;
}
}
$string = implode(',', $string);
return $string;
}
function gen_head() {
$settings = array();
$settings[] = 'tabs='. drupal_urlencode($this->gen_setting('tabs'));
$settings[] = 'services='. drupal_urlencode($this->gen_setting('services'));
$settings[] = 'charset=utf-8';
$settings[] = 'style=default';
$settings[] = 'publisher='. $this->publisher;
$settings = implode('&', $settings);
return '';
}
function page_props($node) {
$path = (isset($node->nid)) ? 'node/'. $node->nid : $_GET['q'];
$path = drupal_get_path_alias($path);
$props = array(
'title' => $node->title,
'url' => url($path, NULL, NULL, TRUE),
'summary' => $node->teaser,
'content' => $node->body,
'updated' => $node->updated,
'published' => $node->created,
'author' => $node->author
);
foreach ($props as $key => $prop) {
if (!$prop) {
unset($props[$key]);
}
}
if ($this->icon) {
$props['icon'] = $this->icon;
}
return drupal_to_js($props);
}
function advanced_settings() {
$advanced = array(
'button' => TRUE
);
if ($this->buttonText) {
$advanced['buttonText'] = $this->buttonText;
}
if ($this->popup) {
$advanced['popup'] = $this->popup;
}
if ($this->onclick) {
$advanced['onclick'] = $this->onclick;
}
if ($this->offset['top']) {
$advanced['offsetTop'] = $this->offset['top'];
}
if ($this->offset['left']) {
$advanced['offsetLeft'] = $this->offset['left'];
}
return drupal_to_js($advanced);
}
function render($node) {
static $sharethis = 0;
if ($sharethis == 0) {
if ($this->code) {
drupal_set_html_head($this->code);
} else {
drupal_set_html_head($this->gen_head());
}
$sharethis++;
}
$output = '';
return $output;
}
}