123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 |
- <?php
- /**
- * @file
- * Displays Printer-friendly versions of Drupal pages.
- *
- * @ingroup print
- */
- define('PRINT_MAIL_HOURLY_THRESHOLD', 3);
- define('PRINT_MAIL_USE_REPLY_TO', TRUE);
- define('PRINT_MAIL_TEASER_DEFAULT_DEFAULT', 1);
- define('PRINT_MAIL_TEASER_CHOICE_DEFAULT', 0);
- define('PRINT_MAIL_SEND_OPTION_DEFAULT', 'sendpage');
- define('PRINT_MAIL_JOB_QUEUE_DEFAULT', 0);
- define('PRINT_MAIL_USER_RECIPIENTS_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.'),
- 'path' => 'printmail',
- 'class' => 'print-mail',
- 'icon' => 'mail_icon.png',
- 'module' => 'print_mail',
- );
- }
- /**
- * Implements hook_permission().
- */
- function print_mail_permission() {
- return array(
- '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(
- 'render element' => 'form',
- 'file' => 'print_mail.inc',
- ),
- 'print_mail_sendlink_html' => array(
- 'variables' => array('params' => NULL),
- 'file' => 'print_mail.inc',
- ),
- 'print_mail_sendlink_plain' => array(
- 'variables' => array('params' => NULL),
- 'file' => 'print_mail.inc',
- ),
- );
- }
- /**
- * Implements hook_menu().
- */
- function print_mail_menu() {
- $link = print_mail_print_link();
- $items = array();
- $items[$link['path']] = array(
- 'title' => 'Send by email',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('print_mail_form'),
- 'access callback' => '_print_mail_access',
- 'access arguments' => array('access send by email'),
- 'type' => MENU_CALLBACK,
- 'file' => 'print_mail.inc',
- );
- $items[$link['path'] . '/' . $link['path']] = array(
- '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'),
- 'weight' => 2,
- 'type' => MENU_LOCAL_TASK,
- 'file' => 'print_mail.admin.inc',
- );
- return $items;
- }
- /**
- * 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;
- }
- /**
- * 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 (($mail_system['default-system'] != 'DefaultMailSystem') && (!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().
- */
- function print_mail_block_view($delta = 0) {
- switch ($delta) {
- case 'print_mail-top':
- $block['subject'] = t('Most emailed');
- $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)) {
- $items = array();
- foreach ($result as $obj) {
- $items[] = l(_print_get_title($obj->path), $obj->path);
- }
- $block['content'] = theme('item_list', array('items' => $items, 'type' => 'ul'));
- }
- break;
- }
- return $block;
- }
- /**
- * Implements hook_node_delete().
- */
- function print_mail_node_delete($node) {
- db_delete('print_mail_page_counter')
- ->condition('path', 'node/' . $node->nid)
- ->execute();
- }
- /**
- * Implements hook_cron_queue_info().
- */
- function print_mail_cron_queue_info() {
- $queues['print_mail_send'] = array(
- 'worker callback' => 'print_mail_send',
- 'time' => 60,
- );
- return $queues;
- }
- /**
- * 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.
- */
- 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'];
- if (isset($params['from'])) {
- $message['headers']['Reply-To'] = $params['from'];
- }
- 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 = theme('print_mail_sendlink_plain', $params);
- $sendlink_html = theme('print_mail_sendlink_html', $params);
- // 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;
- }
- }
- /**
- * Access callback to check a combination of user_acess() and page access
- *
- * @param string $permission
- * permission required to view the page
- *
- * @return bool
- * TRUE if the user has permission to view the page, FALSE otherwise
- */
- function _print_mail_access($permission) {
- $link = print_mail_print_link();
- $page_access = TRUE;
- $parts = explode('/', $_GET['q']);
- if ($parts[0] == $link['path']) {
- 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);
- }
- // If the destination page is not accessible, don't show the form
- if (!($router_item = menu_get_item($path)) || (!$router_item['access'])) {
- $page_access = FALSE;
- }
- }
- }
- return (user_access($permission) && $page_access);
- }
- /**
- * 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.
- *
- * @param string $path
- * path to be used in the link. If not specified, the current URL is used.
- * @param object $node
- * 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').
- *
- * @return string
- * 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
- *
- * @param array $args
- * array containing the possible parameters:
- * 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'));
- }
- /**
- * Implements hook_nollom_form_list().
- */
- function print_mail_mollom_form_list() {
- $forms['print_mail_form'] = array(
- 'title' => t('Send by email form'),
- 'entity' => 'print_mail',
- );
- return $forms;
- }
- /**
- * Implemenents hook_mollom_form_info().
- */
- 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' => 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'),
- );
- }
- /**
- * Implements hook_rules_action_info().
- *
- * @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'),
- '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,
- ),
- 'node' => array('type' => 'node', 'label' => t('Content')),
- ),
- ),
- );
- }
- /**
- * Action handler for the print_mail_action_submit
- *
- * @ingroup rules
- */
- function print_mail_action_submit($from, $from_name, $to, $subject, $message, $node) {
- module_load_include('inc', 'print_mail', 'print_mail');
- $form_state['values'] = array(
- 'path' => 'node/' . $node->nid,
- 'query' => NULL,
- 'cid' => NULL,
- 'title' => $node->title,
- 'fld_from_addr' => $from,
- 'fld_from_name' => $from_name,
- 'txt_to' => array('addrs' => $to),
- 'fld_subject' => $subject,
- 'txt_message' => $message,
- 'chk_teaser' => FALSE,
- );
- print_mail_form_submit(NULL, $form_state);
- }
|