| 1 |
<?php // $Id: news.module,v 1.10 2008/08/03 05:36:05 vauxia Exp $ |
<?php // $Id: news.module,v 1.11 2008/12/14 02:00:22 vauxia Exp $ |
| 2 |
|
|
| 3 |
/** |
/** |
| 4 |
* @file |
* @file |
| 5 |
* |
* |
| 6 |
* Send nodes in an news announcement using the send module |
* Send nodes in a newsletter using the send API and lists handled by MLM. |
| 7 |
*/ |
*/ |
| 8 |
|
|
| 9 |
/** |
/** |
| 12 |
function news_menu() { |
function news_menu() { |
| 13 |
return array( |
return array( |
| 14 |
'send/news' => array( |
'send/news' => array( |
| 15 |
'title' => 'Send news', |
'title' => 'Send news', |
| 16 |
|
'page callback' => 'drupal_get_form', |
| 17 |
|
'page arguments' => array('news_form'), |
| 18 |
|
'access arguments' => array('send news'), |
| 19 |
|
'type' => MENU_NORMAL_ITEM, |
| 20 |
|
'file' => 'news.form.inc', |
| 21 |
|
'file path' => drupal_get_path('module', 'news') .'/includes', |
| 22 |
|
), |
| 23 |
|
'send/news/%' => array( |
| 24 |
|
'title' => 'Send news', |
| 25 |
|
'page callback' => 'drupal_get_form', |
| 26 |
|
'page arguments' => array('news_form', 2), |
| 27 |
'access arguments' => array('send news'), |
'access arguments' => array('send news'), |
| 28 |
'type' => MENU_NORMAL_ITEM, |
'type' => MENU_CALLBACK, |
| 29 |
|
'file' => 'news.form.inc', |
| 30 |
|
'file path' => drupal_get_path('module', 'news') .'/includes', |
| 31 |
), |
), |
| 32 |
); |
); |
| 33 |
} |
} |
| 40 |
} |
} |
| 41 |
|
|
| 42 |
/** |
/** |
| 43 |
* Implementation of send module's hook_send() |
* Implementation of hook_elements(). |
| 44 |
|
* Add a message element for the send form |
| 45 |
*/ |
*/ |
| 46 |
function news_send($op, $module = 'send') { |
function news_elements() { |
| 47 |
if ($module != 'news') return; // only works on news module |
return array( |
| 48 |
|
'news_message' => array( |
| 49 |
switch ($op) { |
'#input' => TRUE, |
| 50 |
case 'name': // human readable name of the module |
'#process' => array('send_process'), |
| 51 |
return t('News'); |
'#after_build' => array('send_set_value'), |
| 52 |
|
), |
| 53 |
case 'features': // features that this module uses |
); |
|
return array('send', 'block'); |
|
|
|
|
|
case 'access': // human readable name of the module |
|
|
return user_access('send news'); |
|
|
|
|
|
case 'default action': // if no nodes are included in message |
|
|
return drupal_get_form('_send_form', $module, array()); |
|
|
|
|
|
case 'recipient type': // node or user |
|
|
return 'node'; |
|
|
|
|
|
case 'deliver': // send the message to our own callback |
|
|
return '_news_deliver'; |
|
|
} |
|
|
return; |
|
| 54 |
} |
} |
| 55 |
|
|
| 56 |
/** |
/** |
| 57 |
* Implementation of hook_form_alter() to modify the default send form |
* Implementation of Send module's hook_send_profile_info(). |
| 58 |
*/ |
*/ |
| 59 |
function news_form_alter(&$form, $form_state, $form_id) { |
function news_send_profile_info() { |
| 60 |
if ((!isset($form['#module']) || $form['#module'] != 'news')) return; |
return array( |
| 61 |
|
'news' => array( |
| 62 |
// Reset the "from" array and replace it with a list selector |
'title' => t('News'), |
| 63 |
unset($form['from']['sender_first_name'], $form['from']['sender_last_name']); |
'mode' => 'mlm', |
| 64 |
$form['from']['sender_name'] = array( |
), |
|
'#type' => 'textfield', |
|
|
'#title' => t('Name'), |
|
|
'#weight' => -8, |
|
|
'#size' => 30, |
|
|
'#maxsize' => 100, |
|
|
'#required' => TRUE, |
|
|
'#default_value' => variable_get('site_name', 'Drupal'), |
|
|
); |
|
|
|
|
|
// Reset the "to" array and replace it with a list selector |
|
|
foreach (mlm_lists('announcement') as $list) { |
|
|
$options[$list->nid] = l($list->title, 'node/'. $list->nid); |
|
|
} |
|
|
|
|
|
$values = array(); |
|
|
if (count($options) == 1) $values = array_keys($options); |
|
|
|
|
|
$form['to'] = array(); |
|
|
$form['to']['recipients'] = array( |
|
|
'#type' => count($options) < 5 ? 'checkboxes' : 'select', |
|
|
'#multiple' => TRUE, |
|
|
'#title' => t('Mailing Lists'), |
|
|
'#options' => $options, |
|
|
'#default_value' => $values, |
|
|
); |
|
|
|
|
|
// Allow author to edit the rendered node output if it exists |
|
|
if ($value = $form['body']['node_body']['#value']) { |
|
|
$form['body']['node_body']['#type'] = 'textarea'; |
|
|
$form['body']['node_body']['#default_value'] = $form['body']['node_body']['#value']; |
|
|
unset($form['body']['node_body']['#value'], $form['body']['node_body_view']); |
|
|
} |
|
|
// Allow author to edit the subject line |
|
|
$form['subject']['subject']['#type'] = 'textfield'; |
|
|
$form['subject']['subject']['#default_value'] = $form['subject']['subject']['#value']; |
|
|
unset($form['subject']['subject']['#value'], $form['subject']['subject_view']); |
|
|
|
|
|
// Send test message |
|
|
unset($form['from']['sender_cc']); |
|
|
$form['buttons']['test'] = array( |
|
|
'#type' => 'submit', |
|
|
'#value' => t('Send test message'), |
|
| 65 |
); |
); |
|
$form['#validate'][] = '_news_test_delivery'; |
|
|
|
|
|
return; |
|
|
} |
|
|
function _news_test_delivery($form_id, $values) { |
|
|
if ($values['op'] != t('Send test message')) return; |
|
|
|
|
|
global $user; |
|
|
mimemail($values['sender'], $user, $values['subject'], $values['body']); |
|
|
drupal_set_message(t('Test message sent to !mail', array('!mail' => $user->mail))); |
|
|
// cause validation to fail |
|
|
form_set_error('buttons][test', ''); |
|
|
} |
|
|
|
|
|
function _news_deliver($sender, $list, $values) { |
|
|
if ($list) { |
|
|
if (mlm_post($list, $values['sender'], $values['subject'], $values['body'])) { |
|
|
return mlm_count($list); |
|
|
} |
|
|
} |
|
|
return FALSE; |
|
| 66 |
} |
} |