Drupal: Newsletter block
This connects to an abstract class that outputs different types of file formats for newsletter data. This is just the Drupal bit.
define('EMAIL_ADDRESS_TO', 'xxxxx@xxxxxxxxxx.co.uk');
define('EMAIL_ADDRESS_FROM', 'admxxxxxin@xxxxxxxxxx.co.uk');
define('EMAIL_SUBJECT_ADD', 'subscribe');
define('EMAIL_SUBJECT_REMOVE', 'unsubscribe');
/**
* Implementation of hook_block
*/
function dbnewsletter_block($op = 'list', $delta = 0, $edit = array()) {
$blocks = array() ;
switch ($op) {
case 'list':
$blocks['dbnewsletter_subs']['info'] = t('Newsletter subscribe/unsubscribe') ;
break ;
case 'view':
switch ($delta) {
case 'dbnewsletter_subs':
$blocks['subject'] = null ;
$blockregion = db_result(db_query("SELECT region FROM {blocks} WHERE delta = '%s' AND theme = '%s'", 'dbnewsletter_subs', 'theme1'));
if ($blockregion == 'front_middle_column') {
$blocks['content'] = 'Newsletter'.
_dbnewsletter_subs_block();
}
if ($blockregion == 'front_left_column') {
$blocks['content'] = 'Newsletter'.
_dbnewsletter_subs_block();
}
}
break ;
}
return $blocks ;
}
function _dbnewsletter_subs_block() {
return drupal_get_form('dbnewsletter_subs_form');
}
function theme_dbnewsletter_subs_form($form) {
$ret = '';
$ret .= ' ';
$ret .= ' ';
$ret .= ' ';
$ret .= drupal_render($form['blurb']);
$ret .= ' ';
$ret .= '
';
$ret .= drupal_render($form['dmail']);
$ret .= ' ';
$ret .= ' ';
$ret .= drupal_render($form['sub']);
$ret .= ' ';
$ret .= ' ';
$ret .= drupal_render($form['submit']);
$ret .= ' ';
$ret .= ' ';
$ret .= ' ';
$ret .= ' ';
$ret .= '';
$ret .= drupal_render($form);
return $ret;
}
function dbnewsletter_subs_form() {
$form = array() ;
$weight = -10 ;
$form['blurb'] = array(
'#value' => '' . t('Stay informed with the latest news') . '
',
'#weight' => $weight++,
) ;
$form['dmail'] = array(
'#nomarkup' => 1,
'#type' => 'textfield',
'#title' => t('Email'),
'#size' => 42,
'#attributes' => array('class' => 'tx'),
'#required' => false, // we set this false so we can use the form_set_error message in the validate hook
'#weight' => $weight++,
) ;
$form['sub'] = array(
'#nomarkup' => 1,
'#type' => 'radios',
'#options' => array(t('Subscribe'), t('Unsubscribe')),
'#default_value' => 0,
'#required' => true,
'#weight' => $weight++,
) ;
$form['submit'] = array(
'#nomarkup' => 1,
'#type' => 'submit',
'#value' => t('Submit'),
'#weight' => $weight++,
) ;
return $form ;
}
function dbnewsletter_subs_form_validate($form_id, $form_values) {
// print_r($form_values); exit;
if ($form_values['dmail'] == '') {
form_set_error('dmail', t('Please enter an email address into the newsletter box'));
}
if (!valid_email_address($form_values['dmail'])) {
form_set_error('dmail', t('The email address you provided is not valid')) ;
}
}
function dbnewsletter_subs_form_submit($form_id, $form_values) {
// print_r($form_values); exit;
switch ($form_values['sub']) {
case 0:
dbnewsletter_add($form_values['dmail']) ;
drupal_set_message(t('Thank you, your email address has been added')) ;
// send email:
$to = EMAIL_ADDRESS_TO;
$from = EMAIL_ADDRESS_FROM;
$subj = EMAIL_SUBJECT_ADD;
$msg = 'new subscriber to the newsletter: ' . $form_values['dmail'];
drupal_mail('newsletter', $to, $subj, $msg, $from);
break ;
case 1:
dbnewsletter_del($form_values['dmail']) ;
drupal_set_message(t('Your email address has been removed')) ;
$to = EMAIL_ADDRESS_TO;
$from = EMAIL_ADDRESS_FROM;
$subj = EMAIL_SUBJECT_REMOVE;
$msg = 'this person unsubscribed from the newsletter: ' . $form_values['dmail'];
drupal_mail('newsletter', $to, $subj, $msg, $from);
break ;
}
list(,$path) = explode('=', drupal_get_destination()) ;
if ($path=='frontpage') $path='' ;
return urldecode($path) ;
}
function dbnewsletter_add($dmail) {
dbnewsletter_del($dmail) ;
db_query("INSERT INTO {dbnewsletter_email} (dmail) VALUES ('%s')", $dmail) ;
}
function dbnewsletter_del($dmail) {
db_query("DELETE FROM {dbnewsletter_email} WHERE dmail='%s'", $dmail) ;
}
/**
* Implementation of hook_menu
*/
function dbnewsletter_menu($may_cache) {
$items = array() ;
if (!$may_cache) {
$items[] = array(
'path' => 'subscribers',
'title' => t('Fetch newsletter emails'),
'access' => user_access('administer nodes'),
'callback' => 'dbnewsletter_export',
'type' => MENU_CALLBACK
) ;
}
return $items ;
}
function dbnewsletter_export($type = 'xls') {
if ($exporter = dbnewsletterExport::factory($type)) {
$exporter->export() ;
exit ;
}
return ' ' ;
}