Newer
Older
* Displays Printer-friendly versions of Drupal pages.
define('PRINT_MAIL_HOURLY_THRESHOLD', 3);
define('PRINT_MAIL_TEASER_DEFAULT_DEFAULT', 1);
define('PRINT_MAIL_TEASER_CHOICE_DEFAULT', 0);
define('PRINT_MAIL_SEND_OPTION_DEFAULT', 'sendpage');
João Ventura
committed
define('PRINT_MAIL_JOB_QUEUE_DEFAULT', 0);
/**
* Implements hook_print_link().
*/
function print_mail_print_link() {
return array(
'format' => 'mail',
'text' => t('Send by email'),
'description' => t('Send this page by email.'),
'class' => 'print-mail',
'icon' => 'mail_icon.gif',
'module' => 'print_mail',
);
}
* Implements hook_permission().
function print_mail_permission() {
'access send by email' => array(
'title' => t('Access the Send by email functionality'),
'description' => t('Provides the ability to send pages by email and the links to them in the original pages.'),
'send unlimited emails' => array(
'title' => t('Send unlimited emails'),
'description' => t("Overrides the built-in hourly threshold limits when sending emails. This permission should only be granted to trusted users, due to it's potential in enabling the use of your site as a source of email spam."),
* Implements hook_theme().
*/
function print_mail_theme() {
return array(
'print_mail_form' => array(
'variables' => array('form' => NULL),
'file' => 'print_mail.inc',
* Implements hook_menu().
$items[$link['path']] = array(
'title' => 'Send by email',
'page callback' => 'drupal_get_form',
'page arguments' => array('print_mail_form'),
João Ventura
committed
'access callback' => '_print_mail_access',
'access arguments' => array('access send by email'),
'file' => 'print_mail.inc',
$items[$link['path'] . '/' . $link['path']] = array(
João Ventura
committed
'access callback' => FALSE,
$items['admin/config/user-interface/print/email'] = array(
'title' => 'email',
'description' => 'Configure the settings of the send by email functionality.',
'page callback' => 'drupal_get_form',
'page arguments' => array('print_mail_settings'),
'access arguments' => array('administer print'),
'file' => 'print_mail.admin.inc',
Devin Carlson
committed
/**
* Implements hook_variable_info().
*/
function print_mail_variable_info($options) {
$link = print_mail_print_link();
$variable['print_mail_link_text'] = array(
'title' => t('Send by email'),
'description' => t('Text used in the link to the send by email form.'),
'type' => 'string',
'default' => t($link['text']),
);
return $variable;
}
João Ventura
committed
/**
* Implements hook_requirements().
*/
function print_mail_requirements($phase) {
$requirements = array();
$t = get_t();
switch ($phase) {
// At runtime, make sure that a PDF generation tool is selected
case 'runtime':
if (module_exists('mailsystem')) {
$mail_system = mailsystem_get();
if (!isset($mail_system['print_mail']) || ($mail_system['print_mail'] != 'DefaultMailSystem')) {
$requirements['print_mail_mailsystem'] = array(
'title' => $t('Printer, email and PDF versions - Send by email'),
'value' => $t('Incompatible Mail System setting detected'),
'description' => $t('The send by email module requires the use of the DefaultMailSystem, please configure it in the !url.', array('!url' => l($t('Mail System Settings page'), 'admin/config/system/mailsystem'))),
'severity' => REQUIREMENT_WARNING,
);
}
}
}
return $requirements;
}
* Implements hook_block_info().
function print_mail_block_info() {
$block['print_mail-top']['info'] = t('Most emailed');
$block['print_mail-top']['cache'] = DRUPAL_CACHE_GLOBAL;
return $block;
* Implements hook_block_view().
switch ($delta) {
case 'print_mail-top':
$block['subject'] = t('Most emailed');
João Ventura
committed
$result = db_query_range("SELECT path FROM {print_mail_page_counter} LEFT JOIN {node} n ON path = CONCAT('node/', n.nid) WHERE status <> 0 OR status IS NULL ORDER BY sentcount DESC", 0, 3)
->fetchAll();
if (count($result)) {
foreach ($result as $obj) {
$items[] = l(_print_get_title($obj->path), $obj->path);
$block['content'] = theme('item_list', array('items' => $items, 'type' => 'ul'));
João Ventura
committed
}
}
* Implements hook_node_delete().
João Ventura
committed
function print_mail_node_delete($node) {
João Ventura
committed
->condition('path', 'node/' . $node->nid)
João Ventura
committed
/**
João Ventura
committed
*/
function print_mail_cron_queue_info() {
$queues['print_mail_send'] = array(
'worker callback' => 'print_mail_send',
'time' => 60,
João Ventura
committed
);
/**
* Worker callback for print_mail_cron_queue_info()
*
* @param array $data
* An associative array containing:
* - module: A module name to invoke hook_mail() on.
* - key: A key to identify the e-mail sent.
* - to: The e-mail address or addresses where the message will be sent to.
* - language: Language object to use to compose the e-mail.
* - params: Optional parameters to build the e-mail.
* - from: Sets From to this value, if given.
* These are the input arguments of the drupal_mail() function.
*/
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
function print_mail_send($data) {
drupal_mail($data['module'], $data['key'], $data['to'], $data['language'], $data['params'], $data['from']);
}
/**
* Implements hook_mail().
*/
function print_mail_mail($key, &$message, $params) {
$message['subject'] = $params['subject'];
switch ($key) {
case 'sendpage':
$message['body'][] = check_plain($params['body']);
$message['headers']['Content-Type'] = 'text/html; charset=utf-8';
break;
case 'sendlink':
// Generate plain-text and html versions of message with link
$sendlink_plain = $params['message'] . '\n\n' . $params['link'];
$sendlink_html = $params['message'] . '<br/><br/>' . l($params['title'], $params['link']);
// Send HTML-only version if MIME library not present
if (!class_exists('Mail_mime')) {
$message['body'][] = check_plain($sendlink_html);
$message['headers']['Content-Type'] = 'text/html; charset=utf-8';
break;
}
// no break on purpose
case 'plain-attachment':
case 'inline-attachment':
// Configure new MIME object
$mime = new Mail_mime("\n");
$mime_params['html_encoding'] = '7bit';
$mime_params['html_charset'] = 'utf-8';
$mime_params['text_charset'] = 'utf-8';
// Pass message contents into MIME object
switch ($key) {
case 'sendlink':
$mime->setTxtBody($sendlink_plain);
$mime->setHTMLBody($sendlink_html);
break;
case 'inline-attachment':
$mime->setHTMLBody($params['body']);
// no break on purpose
case 'plain-attachment':
$mime->setTxtBody($params['message']);
$mime->addAttachment($params['body'], 'text/html', 'Attachment.html', FALSE);
break;
}
// Store MIME message output in message array
$message['body'][] = check_plain($mime->get($mime_params));
$message['headers'] = $mime->headers($message['headers']);
// Strip special characters from Content-Type header
// Required to prevent mime_header_encode() from disrupting Content-Type header
$message['headers']['Content-Type'] = preg_replace('/[^\x20-\x7E]/', '', $message['headers']['Content-Type']);
break;
}
João Ventura
committed
}
João Ventura
committed
/**
* Access callback to check a combination of user_acess() and page access
*
João Ventura
committed
* permission required to view the page
João Ventura
committed
* TRUE if the user has permission to view the page, FALSE otherwise
*/
function _print_mail_access($permission) {
João Ventura
committed
$page_access = TRUE;
$parts = explode('/', $_GET['q']);
João Ventura
committed
if (count($parts) > 1) {
unset($parts[0]);
$path = implode('/', $parts);
if (ctype_digit($parts[1])) {
if (drupal_lookup_path('source', $path)) {
// This is a numeric alias
$path = drupal_get_normal_path($path);
}
else {
// normal nid
$path = 'node/' . $path;
}
}
else {
$path = drupal_get_normal_path($path);
}
João Ventura
committed
// If the destination page is not accessible, don't show the form
if (!($router_item = menu_get_item($path)) || (!$router_item['access'])) {
}
}
}
João Ventura
committed
return (user_access($permission) && $page_access);
João Ventura
committed
}
* Auxiliary function to display a formatted send by email link
* Function made available so that developers may call this function from
* their defined pages/blocks.
*
* path to be used in the link. If not specified, the current URL is used.
* node object, to be used in checking node access. If the path argument is
* not provided, the path used will be node/nid.
* @param string $location
* where in the page where the link is being inserted ('link', 'corner',
* 'block', 'help').
* string with the HTML link to the printer-friendly page
*
* @ingroup print_api
function print_mail_insert_link($path = NULL, $node = NULL, $location = '') {
if (function_exists('print_ui_insert_link')) {
return print_ui_insert_link(print_mail_print_link(), array('path' => $path, 'node' => $node, 'location' => $location));
else {
return FALSE;
}
/**
* Check if the link to send by email is allowed depending on the settings
*
* view_mode, node, type, path
*
* @return bool
* FALSE if not allowed, TRUE otherwise
*/
function print_mail_link_allowed($args) {
return (user_access('access send by email'));
}
function print_mail_mollom_form_list() {
$forms['print_mail_form'] = array(
'entity' => 'print_mail',
);
return $forms;
}
/**
function print_mail_mollom_form_info($form_id) {
switch ($form_id) {
case 'print_mail_form':
$form_info = array(
'elements' => array(
'fld_from_addr' => t('Sender email'),
'fld_from_name' => t('Sender name'),
'txt_to_addrs' => t('Recipients'),
'fld_subject' => t('Subject'),
'fld_title' => t('Page to be sent'),
'txt_message' => t('Your message'),
),
'mapping' => array(
'post_title' => 'fld_title',
'author_name' => 'fld_from_name',
'author_mail' => 'fld_from_addr',
),
);
break;
}
return $form_info;
}
/**
* Implements hook_views_api().
*/
function print_mail_views_api() {
return array(
'api' => 2.0,
'path' => drupal_get_path('module', 'print_mail'),
);
}
João Ventura
committed
/**
* Implements hook_rules_action_info().
João Ventura
committed
* @ingroup rules
*/
function print_mail_rules_action_info() {
return array(
'print_mail_action_submit' => array(
'label' => t('Send node as HTML formatted email'),
'group' => t('Send by email'),
João Ventura
committed
'parameter' => array(
'from' => array('type' => 'text', 'label' => t('From email adress')),
'from_name' => array('type' => 'text', 'label' => t('From name')),
'to' => array('type' => 'text', 'label' => t('Send email to')),
'subject' => array('type' => 'text', 'label' => t('Subject')),
'message' => array(
'type' => 'text',
'label' => t('Message'),
'description' => t('The message that should be displayed (optional).'),
'optional' => TRUE,
),
João Ventura
committed
'node' => array('type' => 'node', 'label' => t('Content')),
),
),
);
}
/**
* Action handler for the print_mail_action_submit
João Ventura
committed
* @ingroup rules
*/
function print_mail_action_submit($from, $from_name, $to, $subject, $message, $node) {
module_load_include('inc', 'print_mail', 'print_mail');
João Ventura
committed
$form_state['values'] = array(
'path' => 'node/' . $node->nid,
João Ventura
committed
'cid' => NULL,
'title' => $node->title,
'fld_from_addr' => $from,
'fld_from_name' => $from_name,
'txt_to_addrs' => $to,
'fld_subject' => $subject,
'txt_message' => $message,
João Ventura
committed
'chk_teaser' => FALSE,
);
print_mail_form_submit(NULL, $form_state);
}