Happy New Year!
[platal.git] / include / reminder / promotion_ml.inc.php
index 11c320c..62b151a 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2010 Polytechnique.org                              *
+ *  Copyright (C) 2003-2014 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -23,18 +23,15 @@ class ReminderPromotionMl extends Reminder
 {
     public function HandleAction($action)
     {
+        $user = S::user();
         switch ($action) {
           case 'yes':
-            $res = XDB::query('SELECT  id
-                                 FROM  #groupex#.asso
-                                WHERE  diminutif = {?}',
-                            S::v('promo'));
-            $asso_id = $res->fetchOneCell();
-            XDB::execute('REPLACE INTO  #groupex#.membres (uid, asso_id)
-                                VALUES  ({?}, {?})',
-                         S::v('uid'), $asso_id);
-            $mmlist = new MMList(S::v('uid'), S::v('password'));
-            $mmlist->subscribe('promo' . S::v('promo'));
+            XDB::execute('INSERT IGNORE INTO  group_members (uid, asso_id)
+                                      SELECT  {?}, id
+                                        FROM  groups
+                                       WHERE  diminutif = {?}',
+                         $user->id(), $user->profile()->yearPromo());
+            MailingList::subscribePromo($user->profile()->yearPromo());
 
             $this->UpdateOnYes();
             break;
@@ -62,22 +59,34 @@ class ReminderPromotionMl extends Reminder
         return "Inscription à la liste de diffusion de ta promotion";
     }
 
-    public static function IsCandidate(User &$user, $candidate)
+    public static function IsCandidate(User $user, $candidate)
     {
+        $profile = $user->profile();
+        if (!$profile) {
+            return false;
+        }
+
         // We only test if the user is in her promotion group for it is too
         // expensive to check if she is in the corresponding ML as well.
         $res = XDB::query('SELECT  COUNT(*)
-                             FROM  #groupex#.membres
+                             FROM  group_members
                             WHERE  uid = {?} AND asso_id = (SELECT  id
-                                                              FROM  #groupex#.asso
+                                                              FROM  groups
                                                              WHERE  diminutif = {?})',
-                          $user->id(), S::v('promo'));
-
+                          $user->id(), $user->profile()->yearPromo());
         $mlCount = $res->fetchOneCell();
         if ($mlCount) {
             Reminder::MarkCandidateAsAccepted($user->id(), $candidate);
         }
-        return ($mlCount == 0);
+        if ($mlCount == 0) {
+            $mlist = MailingList::promo($user->profile()->yearPromo());
+            try {
+                $mlist->getMembersLimit(0, 0);
+            } catch (Exception $e) {
+                return false;
+            }
+        }
+        return false;
     }
 }