public function NewsletterMailSystem::addNewsletterUrlQuery in Newsletter 7
Same name and namespace in other branches
- 7.2 includes/newsletter.mail.inc \NewsletterMailSystem::addNewsletterUrlQuery()
 
Add the source and nnid to newsletter URLs so we can gather clicks.
1 call to NewsletterMailSystem::addNewsletterUrlQuery()
- NewsletterMailSystem::format in includes/
newsletter.mail.inc  - Format a message composed by drupal_mail() prior sending.
 
File
- includes/
newsletter.mail.inc, line 16  - Class file for MailSystemInterface implementation.
 
Class
- NewsletterMailSystem
 - Modify the drupal mail system to send HTML emails.
 
Code
public function addNewsletterUrlQuery($message) {
  if (isset($message['params']['newsletter']->nnid)) {
    global $base_url;
    $nnid = $message['params']['newsletter']->nnid;
    $dom = new DomDocument();
    // Convert to html entities to avoid text scrumbling
    // due to encoding especially for non-latin characters.
    $message['body'] = mb_convert_encoding($message['body'], 'HTML-ENTITIES', 'UTF-8');
    @$dom
      ->loadHTML($message['body']);
    $links = $dom
      ->getElementsByTagName('a');
    foreach ($links as $link) {
      $href = $link
        ->getAttribute('href');
      if (strpos($href, $base_url) !== FALSE) {
        $href = drupal_parse_url($href);
        $query = array_merge($href['query'], array(
          'source' => 'newsletter',
          'nnid' => $nnid,
        ));
        $link
          ->setAttribute('href', url($href['path'], array(
          'query' => $query,
        )));
      }
    }
    // Converts back from hmtl entities
    return decode_entities($dom
      ->saveHTML());
  }
  return $message['body'];
}