Merge branch 'xorg/maint'
authorNicolas Iooss <nicolas.iooss_git@polytechnique.org>
Wed, 5 Mar 2014 19:23:23 +0000 (20:23 +0100)
committerNicolas Iooss <nicolas.iooss_git@polytechnique.org>
Wed, 5 Mar 2014 19:23:23 +0000 (20:23 +0100)
Conflicts:
include/newsletter.inc.php

1  2 
include/newsletter.inc.php

@@@ -1,6 -1,6 +1,6 @@@
  <?php
  /***************************************************************************
 - *  Copyright (C) 2003-2013 Polytechnique.org                              *
 + *  Copyright (C) 2003-2014 Polytechnique.org                              *
   *  http://opensource.polytechnique.org/                                   *
   *                                                                         *
   *  This program is free software; you can redistribute it and/or modify   *
@@@ -37,6 -37,8 +37,6 @@@ class NewsLette
      public $cats;  // List of all categories for this NL
      public $criteria;  // PlFlagSet of allowed filters for recipient selection
  
 -    protected $custom_css = false;
 -
      // Base name to use instead of the group short name for NLs without a custom CSS
      const FORMAT_DEFAULT_GROUP = 'default';
  
@@@ -58,7 -60,7 +58,7 @@@
      {
          // Load NL data
          $res = XDB::query('SELECT  nls.group_id, g.diminutif AS group_name,
 -                                   nls.name AS nl_name, nls.custom_css, nls.criteria
 +                                   nls.name AS nl_name, nls.criteria
                               FROM  newsletters AS nls
                          LEFT JOIN  groups AS g ON (nls.group_id = g.id)
                              WHERE  nls.id = {?}',
@@@ -72,6 -74,7 +72,6 @@@
          $this->group_id = $data['group_id'];
          $this->group = $data['group_name'];
          $this->name = $data['nl_name'];
 -        $this->custom_css = $data['custom_css'];
          $this->criteria = new PlFlagSet($data['criteria']);
  
          // Load the categories
       */
      public static function getAll($sort = 'id', $order = 'ASC')
      {
 -        $res = XDB::fetchAllAssoc('SELECT  n.id, g.nom AS group_name, n.name, n.custom_css, n.criteria, g.diminutif AS group_link
 +        $res = XDB::fetchAllAssoc('SELECT  n.id, g.nom AS group_name, n.name, n.criteria, g.diminutif AS group_link
                                       FROM  newsletters AS n
                                 INNER JOIN  groups      AS g ON (n.group_id = g.id)
                                   ORDER BY  ' . $sort . ' ' . $order);
       */
      public function cssFile()
      {
 -        if ($this->custom_css) {
 +        if ($this->hasCustomCss()) {
              $base = $this->group;
          } else {
              $base = self::FORMAT_DEFAULT_GROUP;
       */
      public function tplFile()
      {
 -        if ($this->custom_css) {
 +        if ($this->hasCustomCss()) {
              $base = $this->group;
          } else {
              $base = self::FORMAT_DEFAULT_GROUP;
          }
      }
  
+     /** Get a full URL to a newsletter
+      */
+     public function fullUrl()
+     {
+         switch ($this->group) {
+         case self::GROUP_XORG:
+             return 'https://www.polytechnique.org/nl';
+         case self::GROUP_COMMUNITY:
+             return 'https://www.polytechnique.org/comletter';
+         case self::GROUP_AX:
+             return 'https://www.polytechnique.org/ax';
+         case self::GROUP_EP:
+             return 'https://www.polytechnique.org/epletter';
+         case self::GROUP_FX:
+             return 'https://www.polytechnique.org/fxletter';
+         default:
+             return 'http://www.polytechnique.net/' . $this->group . '/nl';
+         }
+     }
      /** Get links for nl pages.
       */
      public function adminLinks()
  
      public function hasCustomCss()
      {
 -        return $this->custom_css;
 +        switch ($this->group) {
 +          case self::GROUP_XORG:
 +          case self::GROUP_COMMUNITY:
 +          case self::GROUP_AX:
 +          case self::GROUP_EP:
 +          case self::GROUP_FX:
 +            return true;
 +          default:
 +            return false;
 +        }
      }
  
      public function canSyncWithGroup()
@@@ -1231,12 -1245,7 +1251,14 @@@ class NLIssu
       */
      public function sendTo($user, $hash = null)
      {
+         global $globals;
++
 +        // Don't send email to users without an address
 +        // Note: this would never happen when using sendToAll
 +        if (!$user->bestEmail()) {
 +            return;
 +        }
 +
          $this->fetchArticles();
  
          if (is_null($hash)) {
          if (!empty($this->reply_to)) {
              $mailer->addHeader('Reply-To', $this->reply_to);
          }
+         // Add mailing list headers
+         // Note: "Precedence: bulk" is known to cause issues on some clients
+         $mailer->addHeader('Precedence', 'list');
+         // RFC 2919 header
+         $mailer->addHeader('List-Id', $this->nl->group .
+             ' <' . $this->nl->group . '.newsletter.' . $globals->mail->domain . '>');
+         // RFC 2369 headers
+         $listurl = $this->nl->fullUrl();
+         $mailer->addHeader('List-Unsubscribe', '<' . $listurl . '/out/nohash/' . $this->id . '>');
+         $mailer->addHeader('List-Subscribe', '<' . $listurl. '/in/nohash/' . $this->id . '>');
+         $mailer->addHeader('List-Archive', '<' . $listurl . '>');
+         $mailer->addHeader('List-Help', '<' . $listurl . '>');
+         $mailer->addHeader('List-Owner', '<mailto:support@' . $globals->mail->domain . '>');
          $mailer->sendTo($user);
      }
  
@@@ -1524,5 -1548,5 +1561,5 @@@ function format_text($input, $format, $
  
  // }}}
  
 -// vim:set et sw=4 sts=4 sws=4 enc=utf-8:
 +// vim:set et sw=4 sts=4 sws=4 fenc=utf-8:
  ?>