Adds levels to medals (Closes #1381).
[platal.git] / include / validations / medals.inc.php
index 46bf272..09c2520 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2010 Polytechnique.org                              *
+ *  Copyright (C) 2003-2011 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
 
 // {{{ class MedalReq
 
-class MedalReq extends Validate
+class MedalReq extends ProfileValidate
 {
     // {{{ properties
 
     public $mid;
     public $gid;
+    public $level;
+    public $has_levels;
 
     // }}}
     // {{{ constructor
 
-    public function __construct(User &$_user, $_idmedal, $_subidmedal, $_stamp=0)
+    public function __construct(User $_user, Profile $_profile, $_idmedal, $_subidmedal, $_level, $has_levels, $_stamp = 0)
     {
-        parent::__construct($_user, false, 'medal', $_stamp);
+        parent::__construct($_user, $_profile, false, 'medal', $_stamp);
         $this->mid = $_idmedal;
         $this->gid = $_subidmedal;
+        $this->level = $_level;
+        $this->has_levels = $has_levels;
         if (is_null($this->gid)) {
             $this->gid = 0;
         }
+        if (!$this->has_levels) {
+            $this->level = '';
+        }
     }
 
     // }}}
@@ -54,7 +61,7 @@ class MedalReq extends Validate
 
     protected function _mail_subj()
     {
-        return "[Polytechnique.org/Décoration] Demande de décoration : ".$this->medal_name();
+        return '[Polytechnique.org/Décoration] Demande de décoration : ' . $this->medal_name();
     }
 
     // }}}
@@ -63,9 +70,9 @@ class MedalReq extends Validate
     protected function _mail_body($isok)
     {
         if ($isok) {
-            return "  La décoration ".$this->medal_name()." vient d'être ajoutée à ta fiche.";
+            return '  La décoration ' . $this->medal_name() . ' vient d\'être ajoutée à ta fiche.';
         } else {
-            return "  La demande que tu avais faite pour la décoration ".$this->medal_name()." a été refusée.";
+            return '  La demande que tu avais faite pour la décoration ' . $this->medal_name() . ' a été refusée.';
         }
     }
 
@@ -74,13 +81,17 @@ class MedalReq extends Validate
 
     public function medal_name()
     {
-        //var_dump($this);
-        $r = XDB::query("
-            SELECT IF (g.text IS NOT NULL, CONCAT(m.text,' - ', g.text), m.text)
-              FROM profile_medal_enum AS m
-         LEFT JOIN profile_medal_enum_grades AS g ON(g.mid = m.id AND g.gid = {?})
-             WHERE m.id = {?}", $this->gid, $this->mid);
-        return $r->fetchOneCell();
+        $name = XDB::fetchOneCell('SELECT  text
+                                     FROM  profile_medal_enum
+                                    WHERE  id = {?}', $this->mid);
+        $grade = XDB::fetchOneCell('SELECT  text
+                                      FROM  profile_medal_grade_enum
+                                     WHERE  mid = {?} AND gid = {?}',
+                                   $this->mid, $this->gid);
+        if (is_null($grade)) {
+            return $name;
+        }
+        return $name . ' (' . $grade . ')';
     }
 
     // }}}
@@ -103,22 +114,21 @@ class MedalReq extends Validate
 
     public function commit ()
     {
-        require_once 'notifs.inc.php';
-        register_watch_op($this->user->id(), WATCH_FICHE, '', 'medals');
-        return XDB::execute('REPLACE INTO  profile_medals
-                                   VALUES  ({?}, {?}, {?})',
-                            $this->user->profile()->id(), $this->mid,
-                            is_null($this->gid) ? 0 : $this->gid);
+        return XDB::execute('INSERT INTO  profile_medals (pid, mid, gid, level)
+                                  VALUES  ({?}, {?}, {?}, {?})
+                 ON DUPLICATE KEY UPDATE  gid = VALUES(gid)',
+                            $this->profile->id(), $this->mid,
+                            is_null($this->gid) ? 0 : $this->gid, $this->level);
     }
 
     // }}}
     // {{{ function get_request($medal)
 
-    static public function get_request($uid, $type)
+    static public function get_request($pid, $type, $grade, $level)
     {
-        $reqs = Validate::get_typed_requests($uid, 'medal');
+        $reqs = parent::get_typed_requests($pid, 'medal');
         foreach ($reqs as &$req) {
-            if ($req->mid == $type) {
+            if ($req->mid == $type && $req->gid == $grade && $req->level == $level) {
                 return $req;
             }
         }