summaryrefslogtreecommitdiffstats
path: root/addthis.module
blob: 59e7238f9b374689a57e9df726d28511761037d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
<?php
// $Id$

/**
 * @file
 * Stand alone module file to handle AddThis button integration
 */

/**
 * Implementation of hook_perm().
 */
function addthis_perm() {
  $perms[] = 'administer addthis';
  $perms[] = 'view addthis';
  return $perms;
}

/**
 * Implementation of hook_link().
 */
function addthis_link($type, $node=NULL, $teaser = FALSE) {
  $links = array();

  if ($type == 'node' && user_access('view addthis') && $teaser ? variable_get('addthis_display_in_teasers', '0') : variable_get('addthis_display_in_links', '0') ) {
    $links['addthis'] = array(
      'title' => _addthis_create_button($node,$teaser),
      'html' => TRUE,
    );
  }

  return $links;
}
/**
 * Implementation of hook_menu().
 */
function addthis_menu() {
  $items = array();

  $items['admin/settings/addthis'] = array(
    'title'            => t('AddThis module settings'),
    'description'      => t('Set username and customize look and feel for <a href="http://www.addthis.com/">AddThis</a> button.'),
    'page callback'    => 'drupal_get_form',
    'page arguments'   => array('addthis_admin_settings'),
    'access arguments' => array('administer addthis'),
  );

  return $items;
}

/**
 * Administration settings form.
 *
 * @return
 *   The completed form definition.
 */
function addthis_admin_settings() {
  $form = array();

  $form['addthis_general_settings'] = array(
    '#type'  => 'fieldset',
    '#title' => t('General settings'),
  );
  $form['addthis_general_settings']['addthis_username'] = array(
    '#type'          => 'textfield',
    '#title'         => t('Username'),
    '#default_value' => variable_get('addthis_username', 'my-username'),
    '#description'   => t('Your username for <a href="http://www.addthis.com/">addthis.com</a>. Example: my-username'),
  );
  $form['addthis_general_settings']['addthis_display_in_links'] = array(
    '#type'          => 'checkbox',
    '#title'         => t('Display on node pages'),
    '#default_value' => variable_get('addthis_display_in_links', '0'),
    '#description'   => t('Display an AddThis button always on a node page\'s links section.'),
  );
  $form['addthis_general_settings']['addthis_display_in_teasers'] = array(
    '#type'          => 'checkbox',
    '#title'         => t('Display in node teasers'),
    '#default_value' => variable_get('addthis_display_in_teasers', '0'),
    '#description'   => t('Display an AddThis button in the node teasers.'),
  );

  $form['addthis_button_settings'] = array(
    '#type'         => 'fieldset',
    '#title'        => t('Button image settings'),
    '#collapsible'  => TRUE,
    '#collapsed'    => TRUE,
  );
  $form['addthis_button_settings']['addthis_image'] = array(
    '#type'          => 'textfield',
    '#title'         => t('Button image url'),
    '#default_value' => variable_get('addthis_image', 'http://s9.addthis.com/button1-share.gif'),
    '#description'   => t('URL for small image in the button. Example: http://s9.addthis.com/button1-share.gif'),
  );
  $form['addthis_button_settings']['addthis_image_width'] = array(
    '#type'          => 'textfield',
    '#title'         => t('Button image width'),
    '#default_value' => variable_get('addthis_image_width', '125'),
    '#description'   => t('Width for button image. Example: 125'),
  );
  $form['addthis_button_settings']['addthis_image_height'] = array(
    '#type'          => 'textfield',
    '#title'         => t('Button image height'),
    '#default_value' => variable_get('addthis_image_height', '16'),
    '#description'   => t('Height for button image. Example: 16'),
  );
  $form['addthis_button_settings']['addthis_image_attributes'] = array(
    '#type'          => 'textfield',
    '#title'         => t('Button image HTML attributes'),
    '#default_value' => variable_get('addthis_image_attributes', 'alt=""'),
    '#description'   => t('Extra HTML attributes for img tag. Example: alt=""'),
  );

  $form['addthis_widget_settings'] = array(
    '#type'         => 'fieldset',
    '#title'        => t('Widget settings'),
    '#collapsible'  => TRUE,
    '#collapsed'    => TRUE,
  );
  $form['addthis_widget_settings']['addthis_logo'] = array(
    '#type'          => 'textfield',
    '#title'         => t('Logo url'),
    '#default_value' => variable_get('addthis_logo', 'http://www.addthis.com/images/yourlogo.png'),
    '#description'   => t('The logo to display on the popup window (about 200x50 pixels). The popup window is show when the user selects the \'More\' choice. Example: http://www.your-website.com/img/mylogo.gif'),
  );
  $form['addthis_widget_settings']['addthis_logo_background'] = array(
    '#type'          => 'textfield',
    '#title'         => t('Logo background color'),
    '#default_value' => variable_get('addthis_logo_background', 'EFEFFF'),
    '#description'   => t('The color to use as a background around the logo in the popup. Example: EFEFEF'),
  );
  $form['addthis_widget_settings']['addthis_logo_color'] = array(
    '#type'          => 'textfield',
    '#title'         => t('Logo text color'),
    '#default_value' => variable_get('addthis_logo_color', '666699'),
    '#description'   => t('The color to use for the text next to the logo in the popup. Example: 666666'),
  );
  $form['addthis_widget_settings']['addthis_brand'] = array(
    '#type'          => 'textfield',
    '#title'         => t('Brand text'),
    '#default_value' => variable_get('addthis_brand', 'Your Site'),
    '#description'   => t('The brand name to display in the drop-down (top right). Example: My Website'),
  );
  $form['addthis_widget_settings']['addthis_options'] = array(
    '#type'          => 'textfield',
    '#title'         => t('Options'),
    '#default_value' => variable_get('addthis_options', 'favorites, email, digg, delicious, myspace, facebook, google, live, more'),
    '#description'   => t('A comma-separated ordered list of options to include in the drop-down. Example: favorites, email, digg, delicious, more<br/>Currently supported options:<br/>
	delicious, digg, email, favorites, facebook, fark, furl, google, live, myweb, myspace, newsvine, reddit, slashdot, stumbleupon, technorati, twitter, more'),
  );
  $form['addthis_widget_settings']['addthis_offset_top'] = array(
    '#type'          => 'textfield',
    '#title'         => t('Offset top'),
    '#default_value' => variable_get('addthis_offset_top', '2'),
    '#description'   => t('Vertical offset for the drop-down window (in pixels). Example: 2'),
  );
  $form['addthis_widget_settings']['addthis_offset_left'] = array(
    '#type'          => 'textfield',
    '#title'         => t('Offset top'),
    '#default_value' => variable_get('addthis_offset_left', '2'),
    '#description'   => t('Horizontal offset for the drop-down window (in pixels). Example: 2'),
  );
  return system_settings_form($form);
}

/**
 * Implementation of hook_block().
 */
function addthis_block($op = 'list', $delta = 0) {
  if ($op == 'list') {
    $blocks[0]['info'] = t('AddThis button');
    return $blocks;
  }
  else if ($op == 'view' && user_access('view addthis')) {
    $block['subject'] = t('AddThis');
    $block['content'] = _addthis_create_button();
    return $block;
  }
}

/**
 * Internal function to generate code for AddThis button
 *
 * @return
 *   String containing html code for the button
 */
function _addthis_create_button($node=NULL, $teaser = FALSE) {
  drupal_add_css((drupal_get_path('module', 'addthis') .'/addthis.css'), $type = 'module', $media = 'all', $preprocess = TRUE);
  return ( sprintf('
    <script type="text/javascript">
      addthis_pub = \'%s\';
      addthis_logo = \'%s\';
      addthis_logo_background = \'%s\';
      addthis_logo_color = \'%s\';
      addthis_brand = \'%s\';
      addthis_options = \'%s\';
      addthis_offset_top = \'%d\';
      addthis_offset_left = \'%d\';
    </script>
    <div class="addthis"><a href="http://www.addthis.com/bookmark.php"
      onmouseover="return addthis_open(this, \'\', \'%s\', \'%s\')"
      onmouseout="addthis_close()"
      onclick="return addthis_sendto()"><img src="%s" width="%d" height="%d" %s /></a></div>
    <script type="text/javascript" src="http://s7.addthis.com/js/152/addthis_widget.js"></script>
    ',
    variable_get('addthis_user', 'my-username'),
    variable_get('addthis_logo', 'http://www.addthis.com/images/yourlogo.png'),
    variable_get('addthis_logo_background', 'EFEFFF'),
    variable_get('addthis_logo_color', '666699'),
    variable_get('addthis_brand', 'Your Site'),
    variable_get('addthis_options', 'favorites, email, digg, delicious, myspace, facebook, google, live, more'),
    variable_get('addthis_offset_top', '2'),
    variable_get('addthis_offset_left', '2'),
    $teaser ? url('node/'.$node->nid, array('absolute' => 1) ) : '[URL]',
    $teaser ? addslashes($node->title) : '[TITLE]',
    variable_get('addthis_image', 'http://s9.addthis.com/button1-share.gif'),
    variable_get('addthis_image_width', '125'),
    variable_get('addthis_image_height', '16'),
    variable_get('addthis_image_attributes', 'alt=""')
  ));
}