Merge commit 'origin/master' into account
[platal.git] / modules / events / feed.inc.php
index 4e93712..46de904 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2008 Polytechnique.org                              *
+ *  Copyright (C) 2003-2010 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -31,19 +31,35 @@ class EventFeed extends PlFeed
                             'events/rss.tpl');
     }
 
-    protected function fetch($user)
+    public static function nextEvent(PlIterator &$it, PlUser &$user)
     {
-        return XDB::iterator(
-                'SELECT  e.id, e.titre AS title, e.texte, e.creation_date AS publication, e.post_id, p.attachmime IS NOT NULL AS photo,
-                         CONCAT(u2.prenom, " ", IF(u2.nom_usage = "", u2.nom, u2.nom_usage), "(X", u2.promo, ")") AS author,
-                         FIND_IN_SET(\'wiki\', e.flags) AS wiki
-                   FROM  auth_user_md5   AS u
-             INNER JOIN  evenements      AS e ON ( (e.promo_min = 0 || e.promo_min <= u.promo)
-                                                 AND (e.promo_max = 0 || e.promo_max >= u.promo) )
-              LEFT JOIN  evenements_photo AS p ON (p.eid = e.id)
-             INNER JOIN  auth_user_md5   AS u2 ON (u2.user_id = e.user_id)
-                  WHERE  u.user_id = {?} AND FIND_IN_SET("valide", e.flags)
-                                         AND peremption >= NOW()', $user);
+        while ($body = $it->next()) {
+            $uf = UserFilter::getLegacy($body['promo_min'], $body['promo_max']);
+            if ($uf->checkUser($user)) {
+                return $body;
+            }
+        }
+        return null;
+    }
+
+    protected function fetch(PlUser &$user)
+    {
+        global $globals;
+        $events = XDB::iterator('SELECT  e.id, e.titre AS title, e.texte, e.creation_date AS publication, e.post_id,
+                                         p.attachmime IS NOT NULL AS photo, FIND_IN_SET(\'wiki\', e.flags) AS wiki,
+                                         e.user_id, e.promo_min, e.promo_max
+                                   FROM  evenements       AS e
+                              LEFT JOIN  evenements_photo AS p ON (p.eid = e.id)
+                                  WHERE  FIND_IN_SET("valide", e.flags) AND peremption >= NOW()');
+        $data = array();
+        while ($e = self::nextEvent($events, $user)) {
+            $author = User::getWithUID($e['user_id']);
+            $promo  = $author->promo();
+            $e['author'] = $author->fullName() . ($promo ? ' (' . $promo . ')' : '');
+            $e['link'] = $globals->baseurl . '/events#newsid' . $e['id'];
+            $data[] = $e;
+        }
+        return PlIteratorUtils::fromArray($data, 1, true);
     }
 }