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 .= '
'; $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 ' ' ; }

click here to add a comment