Notifies profile's owner when profile modified by a third party (Closes #1038).
[platal.git] / modules / profile / decos.inc.php
index 4a6bd69..a6cfabc 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   *
@@ -19,7 +19,7 @@
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************/
 
-class ProfileDeco implements ProfileSetting
+class ProfileSettingDeco implements ProfileSetting
 {
     public function value(ProfilePage &$page, $field, $value, &$success)
     {
@@ -27,10 +27,10 @@ class ProfileDeco implements ProfileSetting
         if (is_null($value)) {
             // Fetch already attributed medals
             $res = XDB::iterRow("SELECT  m.id AS id, s.gid AS grade
-                                   FROM  profile_medals_sub    AS s
-                             INNER JOIN  profile_medals        AS m ON ( s.mid = m.id )
-                                  WHERE  s.uid = {?}",
-                                S::i('uid'));
+                                   FROM  profile_medals    AS s
+                             INNER JOIN  profile_medal_enum        AS m ON ( s.mid = m.id )
+                                  WHERE  s.pid = {?}",
+                                $page->pid());
             $value = array();
             while (list($id, $grade) = $res->next()) {
                 $value[$id] = array('grade' => $grade,
@@ -38,8 +38,8 @@ class ProfileDeco implements ProfileSetting
             }
 
             // Fetch not yet validated medals
-            require_once('validations.inc.php');
-            $medals = Validate::get_typed_requests(S::i('uid'), 'medal');
+            require_once 'validations.inc.php';
+            $medals = ProfileValidate::get_typed_requests($page->pid(), 'medal');
             foreach ($medals as &$medal) {
                 $value[$medal->mid] = array('grade' => $medal->gid,
                                             'valid' => '0');
@@ -53,7 +53,7 @@ class ProfileDeco implements ProfileSetting
 
     public function save(ProfilePage &$page, $field, $value)
     {
-        require_once('validations.inc.php');
+        require_once 'validations.inc.php';
 
         $orig =& $page->orig[$field];
 
@@ -61,11 +61,11 @@ class ProfileDeco implements ProfileSetting
         foreach ($orig as $id=>&$val) {
             if (!isset($value[$id]) || $val['grade'] != $value[$id]['grade']) {
                 if ($val['valid']) {
-                    XDB::execute("DELETE FROM  profile_medals_sub
-                                        WHERE  uid = {?} AND mid = {?}",
-                                 S::i('uid'), $id);
+                    XDB::execute("DELETE FROM  profile_medals
+                                        WHERE  pid = {?} AND mid = {?}",
+                                 $page->pid(), $id);
                 } else {
-                    $req = MedalReq::get_request(S::i('uid'), $id);
+                    $req = MedalReq::get_request($page->pid(), $id);
                     if ($req) {
                         $req->clean();
                     }
@@ -76,49 +76,58 @@ class ProfileDeco implements ProfileSetting
         // Add new ones
         foreach ($value as $id=>&$val) {
             if (!isset($orig[$id]) || $orig[$id]['grade'] != $val['grade']) {
-                $req = new MedalReq(S::user(), $id, $val['grade']);
+                $req = new MedalReq(S::user(), $page->profile, $id, $val['grade']);
                 $req->submit();
                 sleep(1);
             }
         }
     }
+
+    public function getText($value) {
+        $medalsList = DirEnum::getOptions(DirEnum::MEDALS);
+        $medals = array();
+        foreach ($value as $id => $medal) {
+            $medals[] = $medalsList[$id];
+        }
+        return implode(', ', $medals);
+    }
 }
 
-class ProfileDecos extends ProfilePage
+class ProfileSettingDecos extends ProfilePage
 {
     protected $pg_template = 'profile/deco.tpl';
 
     public function __construct(PlWizard &$wiz)
     {
         parent::__construct($wiz);
-        $this->settings['medals'] = new ProfileDeco();
-        $this->settings['medals_pub'] = new ProfilePub();
+        $this->settings['medals'] = new ProfileSettingDeco();
+        $this->settings['medals_pub'] = new ProfileSettingPub();
         $this->watched['medals'] = true;
     }
 
     protected function _fetchData()
     {
-        $res = XDB::query("SELECT  profile_medals_pub
-                             FROM  auth_user_quick
-                            WHERE  user_id = {?}",
-                          S::i('uid'));
+        $res = XDB::query("SELECT  medals_pub
+                             FROM  profiles
+                            WHERE  pid = {?}",
+                          $this->pid());
         $this->values['medals_pub'] = $res->fetchOneCell();
     }
 
     protected function _saveData()
     {
         if ($this->changed['medals_pub']) {
-            XDB::execute("UPDATE  auth_user_quick
-                             SET  profile_medals_pub = {?}
-                           WHERE  user_id = {?}",
-                         $this->values['medals_pub'], S::i('uid'));
+            XDB::execute("UPDATE  profiles
+                             SET  medals_pub = {?}
+                           WHERE  pid = {?}",
+                         $this->values['medals_pub'], $this->pid());
         }
     }
 
     public function _prepare(PlPage &$page, $id)
     {
         $res    = XDB::iterator("SELECT  *, FIND_IN_SET('validation', flags) AS validate
-                                   FROM  profile_medals
+                                   FROM  profile_medal_enum
                                ORDER BY  type, text");
         $mlist  = array();
         while ($tmp = $res->next()) {