--- views_mail.module.5.x-1.1.orig 2007-06-05 15:46:12.000000000 -0700 +++ views_mail.module 2008-06-09 16:21:27.000000000 -0700 @@ -25,6 +25,7 @@ function views_mail_help($section) { } function views_mail_helptext() { + $description = t('
'); $description = t('All views that have Views Mail selected as a page type will have a collapsed fieldset above the view that contains an email message form. The message form will be displayed only to users with permissions to send mail.'); $description .= t('
Views Mail views should include fields for each value that will be used as recipient names or addresses and any values that can be substituted into the email message itself. Give each field a unique and descriptive label.
'); $description .= t('Mail will only be sent to recipients in the visible page of multi-page views. You may want to adjust your view settings to be sure that the records that should be mailed to are visible on the same page.
'); @@ -35,7 +36,7 @@ function views_mail_helptext() { * Implementation of hook_perm(). */ function views_mail_perm() { - return array('send views mail'); + return array('send views mail', 'administer views mail', 'send own views mail'); } function views_mail_menu($may_cache) { @@ -46,7 +47,7 @@ function views_mail_menu($may_cache) { 'title' => t('Views mail configuration'), 'description' => t('Configure email capabilities for Views.'), 'callback' => 'views_mail_settings', - 'access' => user_access('send views mail'), + 'access' => user_access('administer views mail'), 'type' => MENU_NORMAL_ITEM, ); } @@ -66,7 +67,7 @@ function views_mail_settings() { function views_mail_views_query_alter(&$query, &$view, $summary, $level) { if ($view->page_type == 'views_mail' && !$summary && ($view->build_type == 'page' || $view->build_type == 'items') - && user_access('send views mail')) { + && (user_access('send views mail') || user_access('send own views mail'))) { return _views_mail_query_alter($query, $view, $summary, $level); } } @@ -170,12 +171,7 @@ function theme_views_mail_display(&$view function views_mail_settings_form() { $form['#suffix'] = $explanation; - $form['default settings'] = array( - '#type' => 'fieldset', - '#title' => t('Settings'), - '#weight' => -20, - ); - $form['default settings']['views_mail_email_default_newsletter'] = array( + $form['views_mail_email_default_newsletter'] = array( '#type' => 'select', '#title' => t('Default newsletter'), '#default_value' => variable_get('views_mail_email_default_newsletter', ''), @@ -184,18 +180,39 @@ function views_mail_settings_form() { '#required' => TRUE, ); - $form['option settings'] = array( - '#type' => 'fieldset', - '#title' => t('Options'), - '#weight' => -15, - ); - $form['option settings']['views_mail_force_mail_accept'] = array( + $form['views_mail_force_mail_accept'] = array( '#type' => 'checkbox', '#title' => t('Force group e-mail opt-in'), - '#default_value' => variable_get('views_mail_force_mail_accept', 0), + '#default_value' => variable_get('views_mail_force_mail_accept', 1), '#description' => t('When new user signs up, force the group e-mail opt-in to be checked, even if user unchecks it on signup.') ); - $form['option settings']['views_mail_subscribe_newsletter'] = array( + + $form['link settings'] = array( + '#type' => 'fieldset', + '#title' => t('Link Settings'), + '#collapsible' => true, + '#weight' => -5, + ); + $form['link settings']['views_mail_link'] = array( + '#type' => 'checkbox', + '#title' => t('Create Views Mail link?'), + '#default_value' => variable_get('views_mail_link', 0), + '#description' => t('When you create a Views Mail newsletter, do you wish to display a link on the bottom of this newsletter which will take you to the Views Mail view you have created?') + ); + $form['link settings']['views_mail_link_url'] = array( + '#type' => 'textfield', + '#title' => t('Views Mail link URL'), + '#default_value' => variable_get('views_mail_link_url', ''), + '#description' => t('Enter the URL to the Views Mail view you have created. Do NOT include the ending \'/\'. Ex: myviewsmailview or og/emailmembersbyrole or http://mywebsite.org/viewsmailview') + ); + $form['link settings']['views_mail_link_title'] = array( + '#type' => 'textfield', + '#title' => t('Views Mail link title'), + '#default_value' => variable_get('views_mail_link_title', ''), + '#description' => t('Enter the title of the link.') + ); + + $form['views_mail_subscribe_newsletter'] = array( '#type' => 'textarea', '#title' => t('Subscribe all new signups to newsletter'), '#default_value' => variable_get('views_mail_subscribe_newsletter', ''), @@ -213,7 +230,7 @@ function views_mail_settings_form() {Only one newsletter ID can be entered.
'), ); - $form['option settings']['views_mail_subscribe_group_newsletter'] = array( + $form['views_mail_subscribe_group_newsletter'] = array( '#type' => 'textarea', '#title' => t('Groups whose new users are autosubscribed to newsletters'), '#default_value' => variable_get('views_mail_subscribe_group_newsletter', ''), @@ -232,18 +249,19 @@ function views_mail_settings_form() {Each groupID|newsletterID pair must be on a separate separated by a linefeed.
'), ); - $form['settings'] = array( + $form['test settings'] = array( '#type' => 'fieldset', '#title' => t('Test Settings'), + '#collapsible' => true, '#weight' => -10, ); - $form['settings']['views_mail_email_test_mode'] = array( + $form['test settings']['views_mail_email_test_mode'] = array( '#type' => 'checkbox', '#title' => t('Email test mode'), '#default_value' => variable_get('views_mail_email_test_mode', 1), '#description' => t('When test mode is on, emails will not actually be sent to recipients. Uncheck this option when ready to start sending actual emails.') ); - $form['settings']['views_mail_email_test_send'] = array( + $form['test settings']['views_mail_email_test_send'] = array( '#type' => 'select', '#title' => t('Email test handling'), '#default_value' => variable_get('views_mail_email_test_send', 0), @@ -252,7 +270,7 @@ function views_mail_settings_form() { 1 => t('Send to test email address instead of recipient address'), ), ); - $form['settings']['views_mail_email_test_address'] = array( + $form['test settings']['views_mail_email_test_address'] = array( '#type' => 'textfield', '#title' => t('Email test address'), '#default_value' => variable_get('views_mail_email_test_address', variable_get('site_mail', '')), @@ -319,7 +337,7 @@ function views_mail_mail_form($view, $it // CREATE MESSAGE $form['step'] = array('#type' => 'hidden', '#value' => $step); $hidden = array('from', 'from_name'); - $comment = t('Send a message using information from the view below. Select the fields that represent the recipient name and email address and type in the subject and message.'); + $comment = t('Send a message using information from the view below. Select the fields that represent the recipient name and email address. The subject line will be that of the newsletter selected.'); $form['#theme'] = 'views_mail_form'; $substitutions = views_mail_get_substitutions($view); $form_values['substitutions'] = serialize($substitutions); @@ -370,7 +388,11 @@ function views_mail_mail_form_submit($fo // Store the form values in a variable so they can be accessed by views_query_alter(). variable_set('views_mail_form_values_'.$view->vid, $form_values); // Rerun the query to get the recipient name and email fields. - $items = views_build_view('items', $view, $view->args, $view->use_pager, $view->limit, $view->page, $view->offset, $view->filters); +// $items = views_build_view('items', $view, $view->args, $view->use_pager, $view->limit, $view->page, $view->offset, $view->filters); +// +// Modification - Removed "pager" option as per: http://drupal.org/node/153632 +// + $items = views_build_view('items', $view, $view->args, 0, $view->limit, $view->page, $view->offset, $view->filters); views_mail_get_recipients($form_values, $view, $items['items']); break; case 2: @@ -401,7 +423,8 @@ function views_mail_message_form($view, '#title' => t('Send Mail'), '#collapsible' => TRUE, '#collapsed' => !empty($form_values['subject']) ? FALSE : TRUE, - '#description' => $comment, + '#description' => $comment, + '#access' => (user_access('send views mail') || user_access('send own views mail')), ); $options = views_mail_fields($view); if (in_array('to_name', $hidden)) { @@ -462,18 +485,18 @@ function views_mail_message_form($view, ); } - if (in_array('subject', $hidden)) { - $form['subject'] = array('#type' => 'hidden', '#value' => $form_values['subject']); - $form['group']['display'][] = array('#type' => 'markup', '#value' => theme('views_mail_form_display', 'subject', $form_values['subject'])); - } else{ - $form['group']['subject'] = array( - '#type' => 'textfield', - '#title' => t('Subject'), - '#default_value' => $form_values['subject'], - '#maxlength' => '130', - '#required' => TRUE, - ); - } +// if (in_array('subject', $hidden)) { +// $form['subject'] = array('#type' => 'hidden', '#value' => $form_values['subject']); +// $form['group']['display'][] = array('#type' => 'markup', '#value' => theme('views_mail_form_display', 'subject', $form_values['subject'])); +// } else{ +// $form['group']['subject'] = array( +// '#type' => 'textfield', +// '#title' => t('Subject'), +// '#default_value' => $form_values['subject'], +// '#maxlength' => '130', +// '#required' => TRUE, +// ); +// } if (in_array('newsletter', $hidden)) { $form['newsletter'] = array('#type' => 'hidden', '#value' => $form_values['newsletter']); $display = views_mail_get_node_field($form_values['newsletter'], 'title') . " (" . $form_values['newsletter'] . ")"; @@ -585,7 +608,7 @@ function views_mail_warning() { $message = t('mail will be sent to test email address @address.', array('@address' => variable_get('views_mail_email_test_address', variable_get('site_mail', '')))); } drupal_set_message(t('Views Mail test mode is on.') . $message . t('Turn test mode off at !link', array( - '!link' => l('admin/settings/views_mail', base_path() . 'admin/settings/views_mail')) + '!link' => l('admin/settings/views_mail', 'admin/settings/views_mail')) ), 'error'); } } @@ -781,7 +804,11 @@ function _views_mail_send_mail($form_val $log_type = $form_values['log_type'] ? $form_values['log_type'] : 'watchdog'; $test = variable_get('views_mail_email_test_mode', 1); $test_send = variable_get('views_mail_email_test_send', 0); - $test_mail = variable_get('views_mail_email_test_mail', variable_get('site_mail', $sender['mail'])); +// $test_mail = variable_get('views_mail_email_test_mail', variable_get('site_mail', $sender['mail'])); +// +// Modification - Changed variable name as per: http://drupal.org/node/154298 +// + $test_mail = variable_get('views_mail_email_test_address', variable_get('site_mail', $sender['mail'])); if ($test) $log_type = 'screen'; if (empty($recipients)) { @@ -798,13 +825,14 @@ function _views_mail_send_mail($form_val $sender = theme('views_mail_email', $from, $from_name); $number = $form_values['number'] ? $form_values['number'] : 0; $unit = $form_values['unit'] ? $form_values['unit'] : 86400; + $node = node_load($nid); if (!$from) { _views_mail_error_log($log_type, t('No from address was provided.')); return; - } elseif (!$subject) { - _views_mail_error_log($log_type, t('No subject was provided.')); - return; +// } elseif (!$subject) { +// _views_mail_error_log($log_type, t('No subject was provided.')); +// return; } elseif (!$message) { _views_mail_error_log($log_type, t('No message was provided.')); return; @@ -826,11 +854,12 @@ function _views_mail_send_mail($form_val if (!$account->views_mail_accept) { $accept_mail = 'n'; } + if (variable_get("views_mail_force_mail_accept", 0) == 1) $accept_mail = 'y'; } $hit .= "|A"; $recipient = theme('views_mail_email', $rec['mail'], $rec['name']); - + $node->simplenews_recipient = $recipient; if ($accept_mail == 'y') { @@ -889,14 +918,11 @@ function _views_mail_send_mail($form_val // Send mail now - if ($result = mimemail($sender, $recipient, $subject, $message)) { - $hit .= "|1"; - _views_mail_error_log($log_type, t('Sent mail to %name (%mail)', array( - '%name' => $rec['name'], '%mail' => $rec['mail'], '%rec_message' => $rec['message'], '%message' => $message))); - _views_mail_log($sender, $recipient, $subject, $message); - $results[] = array(t('Success'), $rec['name'], check_plain($recipient)); - $logged = true; - } + if (views_mail_simplenews_send($node)) { + $hit .= "|1"; + $results[] = array(t('Success'), $rec['name'], check_plain($recipient)); + $logged = true; + } } // end $number if @@ -904,12 +930,10 @@ function _views_mail_send_mail($form_val if ($test_mail && $test_send) { $hit .= "|2"; - if ($result = mimemail($sender, $test_mail, $subject, $message)) { + if (views_mail_simplenews_send($node)) { $hit .= "|3"; - _views_mail_error_log($log_type, t('Sent test to %test_mail for %mail.', array( - '%test_mail' => $test_mail, '%name' => $rec['name'], '%mail' => $rec['mail']))); - $results[] = array(t('Success'), $rec['name'], check_plain($recipient)); - $logged = true; + $results[] = array(t('Success'), $rec['name'], check_plain($recipient)); + $logged = true; } else { $hit .= "|4"; _views_mail_error_log($log_type, t('Failure sending test to %test_mail for %mail).', array( @@ -930,7 +954,7 @@ function _views_mail_send_mail($form_val if (!$logged) { $hit .= "|6"; - _views_mail_error_log($log_type, t('Failure sending mail to %mail (Result: %reason) (Test: %test) (Sender: %sender) (Subject: %subject) (Hit: %hit)', array( + _views_mail_error_log($log_type, t('Failure sending mail to %mail (Result: %reason) (Test: %test) (Sender: %sender) (Hit: %hit)', array( '%mail' => $recipient, '%reason' => $result, '%test' => $test, '%sender' => $sender, '%subject' => $subject, '%message' => $message, '%hit' => $hit))); } @@ -985,16 +1009,16 @@ function _views_mail_log($sender, $recip function theme_views_mail_form_display($name, $value) { switch ($name) { case ('subject'): - $label = t('Subject'); + $label = t('Subject'); break; case ('newsletter'): - $label = t('Newsletter'); + $label = t('Newsletter'); break; case ('message'): - $label = t('Message'); + $label = t('Message'); break; case ('from_name'): - $label = t('From'); + $label = t('From'); break; case ('number'): $label = t('Send after time period of:'); @@ -1021,13 +1045,13 @@ function theme_views_mail_form_display($ } break; case ('to_mail'): - $label = t('Recipient email'); + $label = t('Recipient email'); break; case ('to_name'): - $label = t('Recipient name'); + $label = t('Recipient name'); break; case ('distinct'): - $label = t('Distinct message'); + $label = t('Distinct message'); break; } @@ -1077,14 +1101,19 @@ function theme_views_mail_recipients_lis /** * Prepare a list of newsletter issues for selection. */ -function views_mail_newsletters() { +function views_mail_newsletters() { + global $user; $options = array(); $newsletter = variable_get('views_mail_email_default_newsletter', ''); // get the newsletter term id // $res = db_query("SELECT nid,title FROM {node} WHERE type = 'simplenews' ORDER BY title"); - $res = db_query("SELECT node.nid, node.title FROM node INNER JOIN simplenews_newsletters ON node.nid = simplenews_newsletters.nid WHERE tid = '" . $newsletter . "' ORDER BY node.title"); - + if (user_access('send own views mail')) { + $res = db_query("SELECT node.nid, node.title FROM node INNER JOIN simplenews_newsletters ON node.nid = simplenews_newsletters.nid WHERE tid = %d AND uid = %d ORDER BY node.title", $newsletter, $user->uid); + } + if (user_access('send views mail')) { + $res = db_query("SELECT node.nid, node.title FROM node INNER JOIN simplenews_newsletters ON node.nid = simplenews_newsletters.nid WHERE tid = %d ORDER BY node.title", $newsletter); + } while ($view = db_fetch_object($res)) { $options[$view->nid] = $view->title; } @@ -1150,6 +1179,8 @@ function action_views_mail_send($op, $ed } else { $recipient = $edit['recipient']; } + $node->simplenews_recipient = $recipient; + $subject = $node->title; if (isset($node) && is_object($node)) { $variables = array( '%site_name' => $site_name, @@ -1167,7 +1198,7 @@ function action_views_mail_send($op, $ed $subject = str_replace(array("\r", "\n"), '', $subject); $message = strtr($message, $variables); } - if (mimemail($from, $recipient, $subject, $message)) { + if (views_mail_simplenews_send($node)) { watchdog('action', t('Sent email to %recipient', array('%recipient' => $recipient))); } else { @@ -1392,3 +1423,60 @@ function views_handler_filter_views_mail } return $vids; } + +/** +* Send a Simplenews newsletter +* Note that the $to email address is sent as +* +* @param $input +* The node object of the newsletter to send. +* (include recipient address as $input->simplenews_recipient) +* +* @return +* Return TRUE if email is sent. +*/ +function views_mail_simplenews_send($input) { + $tid = db_result(db_query('SELECT tid FROM {simplenews_newsletters} WHERE nid = %d', $input->nid)); + $tid = $tid ? $tid : FALSE; + $node = simplenews_node_prepare($input->nid, NULL, $tid); + $term = $tid ? taxonomy_get_term($tid) : FALSE; + $name = $term ? $term->name : 'Unassigned newsletter'; + $to = $input->simplenews_recipient; + $node->to = $to; + if (simplenews_mail_send($node)) { + drupal_set_message(t('Newsletter sent to %recipient.', array('%recipient' => $to))); + watchdog('views_mail', t('Sent newsletter to %recipient', array('%recipient' => $to))); + return TRUE; + } +} +/** + * Implementation of hook_link(). + */ +function views_mail_link($type, $node = NULL, $teaser = FALSE) { + $links = array(); + // If this is a newsletter node in the Views Mail newsletter group + // and views_mail_link is clicked on + if ($type == 'node' && $node->type == 'simplenews') { + $count = db_result(db_query('SELECT COUNT(nid) FROM {simplenews_newsletters} WHERE nid = %d AND tid = %d', $node->nid, variable_get('views_mail_email_default_newsletter', 0))); + if ($count > 0 && variable_get('views_mail_link', 0) == 1) { + // If this is a group node, process for group, otherwise, normal process + if (count($node->og_groups) && $group_node = node_load($node->og_groups[0])) { + if (user_access('send views mail') || user_access('send own views mail')) { + $links['views_mail_newsletter'] = array( + 'title' => t(variable_get('views_mail_link_title', '')), + 'href' => variable_get('views_mail_link_url', '') . '/' . $group_node->nid, + ); + } + } else { + $links['views_mail_newsletter'] = array( + 'title' => t(variable_get('views_mail_link_title', '')), + 'href' => variable_get('views_mail_link_url', ''), + ); + } + } // end views_mail_link if + } // end simplenews node if + + return $links; +} + +?> \ No newline at end of file