Index: diggbar_blocker.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/diggbar_blocker/diggbar_blocker.module,v retrieving revision 1.1 diff -u -p -r1.1 diggbar_blocker.module --- diggbar_blocker.module 11 Apr 2009 23:16:49 -0000 1.1 +++ diggbar_blocker.module 14 Apr 2009 23:19:14 -0000 @@ -3,15 +3,40 @@ /** * @file - * Makes resizable textarea fields expand and contract dynamically with content. + * Implement DiggBar blocking via different methods (javascript framebusting or nasty message) */ +DEFINE('DIGGBAR_BLOCKER_JSFB', 0); +DEFINE('DIGGBAR_BLOCKER_BM', 1); + +/** + * Determine what DiggBar blocking method to use + * 0 - Javascript Framebusting (DEFAULT) + * 1 - Blocking Message + */ +function diggbar_blocker_method() { + return variable_get('diggbar_blocker_method', DIGGBAR_BLOCKER_JSFB); +} + +/** + * Implementation of hook_boot() + */ +function diggbar_blocker_boot() { + if(diggbar_blocker_method() == DIGGBAR_BLOCKER_BM && + preg_match('/http:\/\/digg.com\/\w{1,8}\/*(\?.*)?$/', $_SERVER['HTTP_REFERER'])) { + echo diggbar_blocker_message(); + exit; + } +} + /** * Implementation of hook_init(). */ -function diggbar_init() { - drupal_add_js(drupal_get_path('module', 'diggbar_blocker') .'/diggbar_blocker.js'); - drupal_add_js(array('diggbar_blocker' => array(array('id' => variable_get("diggbar_blocker_redirect", '')))), 'setting'); +function diggbar_blocker_init() { + if (diggbar_blocker_method() == DIGGBAR_BLOCKER_JSFB) { + drupal_add_js(drupal_get_path('module', 'diggbar_blocker') .'/diggbar_blocker.js'); + drupal_add_js(array('diggbar_blocker' => array(array('id' => variable_get("diggbar_blocker_redirect", '')))), 'setting'); + } } /** @@ -38,12 +63,56 @@ function diggbar_blocker_settings_form() '#collapsed' => FALSE, ); - $form['diggbar_blocker_settings']['diggbar_blocker_include'] = array( + $form['diggbar_blocker_settings']['diggbar_blocker_method'] = array( + '#type' => 'radios', + '#title' => t('DiggBar Blocking Method'), + '#description' => t('The DiggBar can be removed (and optionally the user can be redirect) or DiggBar users can be blocked with a message'), + '#default_value' => diggbar_blocker_method(), + '#options' => array( + DIGGBAR_BLOCKER_JSFB => t('Javascript Framebusting'), + DIGGBAR_BLOCKER_BM => t('Blocking Message') + ), + ); + + $form['diggbar_blocker_settings']['javascript_framebusting'] = array( + '#type' => 'fieldset', + '#title' => t('Javascript Framebusting Settings'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + + $form['diggbar_blocker_settings']['javascript_framebusting']['diggbar_blocker_include'] = array( '#type' => 'textfield', '#title' => t('Page to redirect DiggBar visitors to (optional)'), '#default_value' => variable_get("diggbar_blocker_redirect", ''), '#description' => t("Example: node/1."), ); + $form['diggbar_blocker_settings']['blocking_message'] = array( + '#type' => 'fieldset', + '#title' => t('Blocking Message Settings'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + + $form['diggbar_blocker_settings']['blocking_message']['diggbar_blocker_message'] = array( + '#type' => 'textarea', + '#description' => t('Input the message to display to diggbar users'), + '#default_value' => diggbar_blocker_message(), + ); + + return system_settings_form($form); -} \ No newline at end of file +} + +function diggbar_blocker_message() { + $msg = variable_get('diggbar_blocker_message', ''); + return !empty($msg) ? $msg : + '
' . "\n" .
+ 'Dear Digg,
+ Framing sites is bullshit.
+
+ Your pal,
+ — J.G.' . "\n" .
+ '