Fix sort_name and display_name inversion.
[platal.git] / include / newsletter.inc.php
index 9016bdd..d5f7718 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2011 Polytechnique.org                              *
+ *  Copyright (C) 2003-2013 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -46,6 +46,7 @@ class NewsLetter
     const GROUP_XORG = 'Polytechnique.org';
     const GROUP_AX = 'AX';
     const GROUP_EP = 'Ecole';
+    const GROUP_FX = 'FX';
 
     // Searches on mutiple fields
     const SEARCH_ALL = 'all';
@@ -398,18 +399,32 @@ class NewsLetter
     /** Get the count of subscribers to the NL.
      * @return Number of subscribers.
      */
-    public function subscriberCount()
+    public function subscriberCount($lost = null, $sex = null, $grade = null, $first_promo = null, $last_promo = null)
     {
-        $uf = new UserFilter(new UFC_NLSubscribed($this->id));
+        $cond = new PFC_And(new UFC_NLSubscribed($this->id));
+        if (!is_null($sex)) {
+            $cond->addChild(new UFC_Sex($sex));
+        }
+        if (!is_null($grade)) {
+            $cond->addChild(new UFC_Promo('>=', $grade, $first_promo));
+            $cond->addChild(new UFC_Promo('<=', $grade, $last_promo));
+        }
+        if (!($lost === null)) {
+            if ($lost === true) {
+                $cond->addChild(new PFC_Not(new UFC_HasEmailRedirect()));
+            } else {
+                $cond->addChild(new UFC_HasEmailRedirect());
+            }
+        }
+        $uf = new UserFilter($cond);
         return $uf->getTotalCount();
     }
 
     /** Get the count of subscribers with non valid redirection.
      */
-    public function lostSubscriberCount()
+    public function lostSubscriberCount($sex = null)
     {
-        $uf = new UserFilter(new PFC_And(new UFC_NLSubscribed($this->id), new PFC_Not(new UFC_HasEmailRedirect())));
-        return $uf->getTotalCount();
+        return $this->subscriberCount(true, $sex);
     }
 
     /** Get the number of subscribers to the NL whose last received mailing was $last.
@@ -537,6 +552,8 @@ class NewsLetter
             return 'ax';
         case self::GROUP_EP:
             return 'epletter';
+        case self::GROUP_FX:
+            return 'fxletter';
         default:
             // Don't display groups NLs on X.org
             assert(!$enforce_xnet);
@@ -561,6 +578,8 @@ class NewsLetter
             return 'ax/admin';
         case self::GROUP_EP:
             return 'epletter/admin';
+        case self::GROUP_FX:
+            return 'fxletter/admin';
         default:
             // Don't display groups NLs on X.org
             assert(!$enforce_xnet);
@@ -585,6 +604,8 @@ class NewsLetter
             return 'ax/stat';
         case self::GROUP_EP:
             return 'epletter/stat';
+        case self::GROUP_FX:
+            return 'fxletter/stat';
         default:
             // Don't display groups NLs on X.org
             assert(!$enforce_xnet);
@@ -628,6 +649,7 @@ class NewsLetter
           case self::GROUP_XORG:
           case self::GROUP_AX:
           case self::GROUP_EP:
+          case self::GROUP_FX:
             return false;
           default:
             return true;