You are here

devel_mail_logger.admin.inc in Devel Mail Logger 7

File

devel_mail_logger.admin.inc
View source
<?php

/**
 * List all mails logged.
 * @param $form
 * @param $form_state
 * @return array
 */
function devel_mail_logger_list($form, $form_state) {
  $form = array();
  $form['delete'] = array(
    '#type' => 'submit',
    '#value' => t('Delete debug mails'),
    '#submit' => array(
      'devel_mail_logger_delete_mails',
    ),
  );
  $form['send'] = array(
    '#type' => 'submit',
    '#value' => t('Send test mail'),
    '#submit' => array(
      'devel_mail_logger_send_test_mail',
    ),
  );
  $header = array(
    'title' => array(
      'data' => t('Date'),
      'field' => 'dml.timestamp',
    ),
    'city' => array(
      'data' => t('To'),
      'field' => 'dml.to',
    ),
    'subject' => array(
      'data' => t('Subject'),
      'field' => 'dml.subject',
    ),
    array(
      'data' => t('Operations'),
      'colspan' => 2,
    ),
  );
  $query = db_select('devel_mail_logger', 'dml');
  $count_query = clone $query;
  $count_query
    ->addExpression('COUNT(dml.id)');
  $query = $query
    ->extend('PagerDefault')
    ->extend('TableSort');
  $query
    ->fields('dml')
    ->limit(25)
    ->orderByHeader($header)
    ->setCountQuery($count_query);
  $records = $query
    ->execute();
  $header = array(
    t('Date'),
    t('To'),
    t('Subject'),
    array(
      'data' => t('Operations'),
      'colspan' => 2,
    ),
  );
  $rows = array();
  foreach ($records as $rec) {
    $row = array();
    $row[] = date('Y-m-d H:i', $rec->timestamp);
    $row[] = $rec->recipient;
    $row[] = $rec->subject;
    $row[] = l(t('view'), 'admin/reports/devel_mail_logger/mail/' . $rec->id . '/view');
    $row[] = l(t('send'), 'admin/reports/devel_mail_logger/mail/' . $rec->id . '/send');
    $rows[] = $row;
  }
  $form['pager_table'] = array(
    '#theme' => 'table',
    '#header' => $header,
    '#rows' => $rows,
  );
  $form['pager_pager'] = array(
    '#theme' => 'pager',
  );
  return $form;
}

/**
 * Delete mails which were logged.
 * @param $form
 * @param $form_state
 */
function devel_mail_logger_delete_mails($form, &$form_state) {
  $result = db_truncate('devel_mail_logger')
    ->execute();
  $form_state['redirect'] = 'admin/reports/devel_mail_logger';
}

/**
 * Function allows rendering of the mails.
 * @param $mail
 * @return string
 * @throws Exception
 */
function devel_mail_logger_show_mail($mail) {
  $mail = json_decode($mail->message);
  $rows = array();
  foreach ($mail->headers as $key => $value) {
    $rows[] = array(
      array(
        'data' => $key,
        'header' => true,
      ),
      $value,
    );
  }
  $build['headers'] = array(
    '#type' => 'fieldset',
    '#title' => 'Headers',
    '#collapsed' => TRUE,
    '#collapsible' => TRUE,
  );
  $build['headers']['table'] = array(
    '#theme' => 'table',
    //'#header' => $header,
    '#rows' => $rows,
  );
  $system = drupal_mail_system($mail->module, $mail->key);
  $message = $system
    ->format((array) $mail);
  $body = $message['params']->body[0];
  $rows = array(
    array(
      array(
        'data' => t('To: '),
        'header' => TRUE,
      ),
      t($mail->to),
    ),
    array(
      array(
        'data' => t('From: '),
        'header' => TRUE,
      ),
      t($mail->from),
    ),
    array(
      array(
        'data' => t('Subject: '),
        'header' => TRUE,
      ),
      t($mail->subject),
    ),
    array(
      array(
        'data' => t('Body: '),
        'header' => TRUE,
      ),
      $body,
    ),
  );
  $build['mail_table'] = [
    '#theme' => 'table',
    '#rows' => $rows,
  ];
  return $build;
  $output = '';
  $output .= '<b>' . t('Subject:') . '</b> ' . $mail->subject;
  $output .= '<br/>';
  $message = json_decode($mail->message);
  $system = drupal_mail_system($message->module, $message->key);
  $message = $system
    ->format((array) $message);
  $output .= '<b>' . t('Body') . '</b> ' . $message['body'];
  return $output;
}

/**
 * This function loads form and sends actual email.
 * @param $form
 * @param $form_state
 * @param $mail
 * @return array
 */
function devel_mail_logger_send_mail($form, &$form_state, $mail) {
  $form = array();
  $form['mail'] = array(
    '#type' => 'hidden',
    '#value' => $mail,
  );
  $form['email'] = array(
    '#type' => 'textfield',
    '#title' => t('Email: '),
    '#default_value' => $GLOBALS['user']->mail,
    '#required' => TRUE,
  );
  $form['send'] = array(
    '#type' => 'submit',
    '#value' => t('Send'),
  );
  return $form;
}

/**
 * Validate function for send mail form.
 * @param $form
 * @param $form_state
 */
function devel_mail_logger_send_mail_validate($form, &$form_state) {
  if (!valid_email_address($form_state['values']['email'])) {
    form_set_error('email', t('Please provide a valid email'));
  }
}

/**
 * Submit function for send mail form.
 * @param $form
 * @param $form_state
 * @throws Exception
 */
function devel_mail_logger_send_mail_submit($form, &$form_state) {
  $message = json_decode($form_state['values']['mail']->message);
  $system = drupal_mail_system($message->module, $message->key);
  $message = $system
    ->format((array) $message);
  $module = 'devel_mail_logger';
  $key = 'send_mail';
  $to = $form_state['values']['email'];
  $params['body'] = is_array($message['params']->body) ? $message['params']->body : array(
    $message['params']->body,
  );
  $params['subject'] = $message['subject'];
  $lang_code = $message['language'];
  if (drupal_mail($module, $key, $to, $lang_code, $params)) {
    drupal_set_message(t('Mail send successfully'));
  }
  else {
    drupal_set_message(t('Mail send failed'));
  }
  $form_state['redirect'] = 'admin/reports/devel_mail_logger';
}

/**
 * Send test mail, this will get logged.
 * @param $form
 * @param $form_state
 */
function devel_mail_logger_send_test_mail($form, &$form_state) {
  $module = 'devel_mail_logger';
  $key = 'send_test';
  $to = $GLOBALS['user']->mail;
  $params['message'] = 'body';
  $params['subject'] = 'subject';
  $lang_code = $GLOBALS['user']->language;
  if (!$lang_code) {
    $lang_code = LANGUAGE_NONE;
  }
  $result = drupal_mail($module, $key, $to, $lang_code, $params);
  if ($result) {
    drupal_set_message(t('Email send successfully'));
  }
  else {
    drupal_set_message(t('Email sending failed'), 'error');
  }
  $form_state['redirect'] = 'admin/reports/devel_mail_logger';
}

Functions

Namesort descending Description
devel_mail_logger_delete_mails Delete mails which were logged.
devel_mail_logger_list List all mails logged.
devel_mail_logger_send_mail This function loads form and sends actual email.
devel_mail_logger_send_mail_submit Submit function for send mail form.
devel_mail_logger_send_mail_validate Validate function for send mail form.
devel_mail_logger_send_test_mail Send test mail, this will get logged.
devel_mail_logger_show_mail Function allows rendering of the mails.