Merge commit 'origin/fusionax' into account
[platal.git] / modules / profile / general.inc.php
index 708c2dc..4884303 100644 (file)
@@ -24,7 +24,8 @@ class ProfileSearchNames implements ProfileSetting
     private $private_name_end;
     private $search_names;
 
-    private function matchWord($old, $new, $newLen) {
+    private function matchWord($old, $new, $newLen)
+    {
         return ($i = strpos($old, $new)) !== false
             && ($i == 0 || $old{$i-1} == ' ')
             && ($i + $newLen == strlen($old) || $old{$i + $newLen} == ' ');
@@ -67,7 +68,7 @@ class ProfileSearchNames implements ProfileSetting
                                  INNER JOIN  profile_name_enum AS e  ON (e.id = sn.typeid)
                                       WHERE  sn.pid = {?} AND NOT FIND_IN_SET('not_displayed', e.flags)
                                    ORDER BY  NOT FIND_IN_SET('always_displayed', e.flags), e.id, sn.name",
-                                    S::v('uid'));
+                                     $page->pid());
 
             $sn_types = XDB::iterator("SELECT  id, type, name,
                                                FIND_IN_SET('has_particle', flags) AS has_particle
@@ -81,7 +82,9 @@ class ProfileSearchNames implements ProfileSetting
             while ($sn_type = $sn_types->next()) {
                 if ($sn_type['id'] == $sn['typeid']) {
                     $value[] = $sn;
-                    $sn = $sn_all->next();
+                    if ($sn) {
+                        $sn = $sn_all->next();
+                    }
                 } else {
                     $value[] = array('name'             => '',
                                      'particle'         => '',
@@ -106,7 +109,7 @@ class ProfileSearchNames implements ProfileSetting
                            INNER JOIN  profile_name_enum AS e ON (e.id = s.typeid)
                                 WHERE  s.pid = {?} AND e.type LIKE '%ini'
                              ORDER BY  e.type = 'firstname_ini'",
-                             S::i('uid'));
+                             $page->pid());
             $res = $res->fetchAllAssoc();
             $initial = array();
             $initial['lastname'] = $res[0]['particle'] . $res[0]['name'];
@@ -174,7 +177,7 @@ class ProfileSearchNames implements ProfileSetting
                             USING  profile_name      AS s
                        INNER JOIN  profile_name_enum AS e ON (s.typeid = e.id)
                             WHERE  s.pid = {?} AND NOT FIND_IN_SET('not_displayed', e.flags)",
-                     S::i('uid'));
+                     $page->pid());
         $has_new = set_alias_names($this->search_names, $sn_old);
 
         // Only requires validation if modification in public names
@@ -193,7 +196,8 @@ class ProfileSearchNames implements ProfileSetting
 
 class ProfileEdu implements ProfileSetting
 {
-    public function __construct(){}
+    public function __construct() {
+    }
 
     static function sortByGradYear($line1, $line2) {
         $a = (int) $line1['grad_year'];
@@ -209,14 +213,11 @@ class ProfileEdu implements ProfileSetting
         $success = true;
         if (is_null($value) || !is_array($value)) {
             $value = array();
-            $res = XDB::iterator("SELECT  eduid, degreeid, fieldid, grad_year, program
-                                    FROM  profile_education
-                                   WHERE  uid = {?} AND !FIND_IN_SET('primary', flags)
-                                ORDER BY  id",
-                                 S::v('uid'));
-            while($edu = $res->next()) {
-                $value[] = $edu;
-            }
+            $value = XDB::fetchAllAssoc("SELECT  eduid, degreeid, fieldid, grad_year, program
+                                           FROM  profile_education
+                                          WHERE  uid = {?} AND !FIND_IN_SET('primary', flags)
+                                       ORDER BY  id",
+                                        $page->pid());
         } else {
             $i = 0;
             foreach ($value as $key=>&$edu) {
@@ -240,13 +241,13 @@ class ProfileEdu implements ProfileSetting
     {
         XDB::execute("DELETE FROM  profile_education
                             WHERE  uid = {?} AND !FIND_IN_SET('primary', flags)",
-                     S::i('uid'));
+                     $page->pid());
         foreach ($value as $eduid=>&$edu) {
             if ($edu['eduid'] != '') {
                 XDB::execute("INSERT INTO  profile_education
                                       SET  id = {?}, uid = {?}, eduid = {?}, degreeid = {?},
                                            fieldid = {?}, grad_year = {?}, program = {?}",
-                             $eduid, S::i('uid'), $edu['eduid'], $edu['degreeid'],
+                             $eduid, $page->pid(), $edu['eduid'], $edu['degreeid'],
                              $edu['fieldid'], $edu['grad_year'], $edu['program']);
             }
         }
@@ -296,25 +297,17 @@ class ProfileNetworking implements ProfileSetting
     public function value(ProfilePage &$page, $field, $value, &$success)
     {
         if (is_null($value)) {
-            $value = array();
-            $res = XDB::iterator("SELECT  n.address, n.network_type AS type, n.pub, m.name
-                                    FROM  profile_networking AS n
-                              INNER JOIN  profile_networking_enum AS m ON (n.network_type = m.network_type)
-                                   WHERE  n.uid = {?}",
-                                 S::i('uid'));
-            while($network = $res->next()) {
-                $value[] = $network;
-            }
+            $value = XDB::fetchAllAssoc("SELECT  n.address, n.network_type AS type, n.pub, m.name
+                                           FROM  profile_networking AS n
+                                     INNER JOIN  profile_networking_enum AS m ON (n.network_type = m.network_type)
+                                          WHERE  n.uid = {?}",
+                                         $page->pid());
         }
         if (!is_array($value)) {
             $value = array();
         }
-        $res = XDB::iterator("SELECT  filter, network_type AS type
-                                FROM  profile_networking_enum;");
-        $filters = array();
-        while($filter = $res->next()) {
-            $filters[$filter['type']] = $filter['filter'];
-        }
+        $filters = XDB::fetchAllAssoc('type', 'SELECT  filter, network_type AS type
+                                                 FROM  profile_networking_enum;');
         $success = true;
         foreach($value as $i=>&$network) {
             if (!trim($network['address'])) {
@@ -346,7 +339,7 @@ class ProfileNetworking implements ProfileSetting
     {
         XDB::execute("DELETE FROM profile_networking
                             WHERE uid = {?}",
-                     S::i('uid'));
+                     $page->pid());
         if (!count($value)) {
             return;
         }
@@ -354,7 +347,7 @@ class ProfileNetworking implements ProfileSetting
         foreach ($value as $id=>$network) {
             XDB::execute("INSERT INTO  profile_networking (uid, nwid, network_type, address, pub)
                                VALUES  ({?}, {?}, {?}, {?}, {?})",
-                         S::i('uid'), $id, $network['type'], $network['address'], $network['pub']);
+                         $page->pid(), $id, $network['type'], $network['address'], $network['pub']);
         }
     }
 }
@@ -368,15 +361,14 @@ class ProfileGeneral extends ProfilePage
         parent::__construct($wiz);
         $this->settings['search_names']
                                   = new ProfileSearchNames();
-        $this->settings['naissance'] 
-                                  = new ProfileDate();
+        $this->settings['birthdate'] = new ProfileDate();
         $this->settings['freetext_pub']
                                   = $this->settings['photo_pub']
                                   = new ProfilePub();
         $this->settings['freetext']
-                                  = $this->settings['nationalite']
-                                  = $this->settings['nationalite2']
-                                  = $this->settings['nationalite3']
+                                  = $this->settings['nationality1']
+                                  = $this->settings['nationality2']
+                                  = $this->settings['nationality3']
                                   = $this->settings['yourself']
                                   = $this->settings['promo']
                                   = null;
@@ -389,39 +381,44 @@ class ProfileGeneral extends ProfilePage
         $this->settings['edus']   = new ProfileEdu();
         $this->watched= array('freetext' => true, 'tels' => true,
                               'networking' => true, 'edus' => true,
-                              'nationalite' => true, 'nationalite2' => true,
-                              'nationalite3' => true, 'search_names' => true);
+                              'nationality1' => true, 'nationality2' => true,
+                              'nationality3' => true, 'search_names' => true);
     }
 
     protected function _fetchData()
     {
         // Checkout all data...
         $res = XDB::query("SELECT  p.promo, e.entry_year AS entry_year, e.grad_year AS grad_year,
-                                   u.nationalite, u.nationalite2, u.nationalite3, u.naissance,
+                                   pr.nationality1, pr.nationality2, pr.nationality3, pr.birthdate,
                                    t.display_tel as mobile, t.pub as mobile_pub,
                                    d.email_directory as email_directory,
-                                   q.profile_freetext as freetext, q.profile_freetext_pub as freetext_pub,
-                                   u.matricule_ax, p.yourself
-                             FROM  auth_user_md5         AS u
-                       INNER JOIN  auth_user_quick       AS q ON (u.user_id = q.user_id)
-                       INNER JOIN  profile_display       AS p ON (p.pid = u.user_id)
-                       INNER JOIN  profile_education     AS e ON (e.uid = u.user_id AND FIND_IN_SET('primary', e.flags))
-                        LEFT JOIN  profile_phones        AS t ON (u.user_id = t.uid AND link_type = 'user')
-                        LEFT JOIN  profile_directory     AS d ON (d.uid = u.user_id)
-                            WHERE  u.user_id = {?}", S::v('uid', -1));
+                                   pr.freetext, pr.freetext_pub, pr.ax_id AS matricule_ax, p.yourself
+                             FROM  profiles              AS pr
+                       INNER JOIN  profile_display       AS p ON (p.pid = pr.pid)
+                       INNER JOIN  profile_education     AS e ON (e.uid = pr.pid AND FIND_IN_SET('primary', e.flags))
+                        LEFT JOIN  profile_phones        AS t ON (t.uid = pr.pid AND link_type = 'user')
+                        LEFT JOIN  profile_directory     AS d ON (d.uid = pr.pid)
+                            WHERE  pr.pid = {?}", $this->pid());
         $this->values = $res->fetchOneAssoc();
+        if ($this->owner) {
+            $this->values['yourself'] = $this->owner->displayName();
+        }
 
         // Retreive photo informations
         $res = XDB::query("SELECT  pub
                              FROM  photo
-                            WHERE  uid = {?}", S::v('uid'));
+                            WHERE  uid = {?}", $this->pid());
         $this->values['photo_pub'] = $res->fetchOneCell();
 
-        $res = XDB::query("SELECT  COUNT(*)
-                             FROM  requests
-                            WHERE  type='photo' AND user_id = {?}",
-                          S::v('uid'));
-        $this->values['nouvellephoto'] = $res->fetchOneCell();
+        if ($this->owner) {
+            $res = XDB::query("SELECT  COUNT(*)
+                                 FROM  requests
+                                WHERE  type='photo' AND user_id = {?}",
+                              $this->owner->id());
+            $this->values['nouvellephoto'] = $res->fetchOneCell();
+        } else {
+            $this->values['nouvellephoto'] = 0;
+        }
 
         // Proposes choice for promotion
         if ($this->values['entry_year'] != $this->values['grad_year'] - 3) {
@@ -433,33 +430,28 @@ class ProfileGeneral extends ProfilePage
 
     protected function _saveData()
     {
-        if ($this->changed['nationalite'] || $this->changed['nationalite2'] || $this->changed['nationalite3']
-            || $this->changed['naissance']) {
-            if ($this->values['nationalite3'] == "") {
-                $this->values['nationalite3'] = NULL;
+        if ($this->changed['nationality1'] || $this->changed['nationality2'] || $this->changed['nationality3']
+            || $this->changed['birthdate'] || $this->changed['freetext'] || $this->changed['freetext_pub']) {
+            if ($this->values['nationality3'] == "") {
+                $this->values['nationality3'] = NULL;
             }
-            if ($this->values['nationalite2'] == "") {
-                $this->values['nationalite2'] = $this->values['nationalite3'];
-                $this->values['nationalite3'] = NULL;
+            if ($this->values['nationality2'] == "") {
+                $this->values['nationality2'] = $this->values['nationality3'];
+                $this->values['nationality3'] = NULL;
             }
-            if ($this->values['nationalite'] == "") {
-                $this->values['nationalite']  = $this->values['nationalite2'];
-                $this->values['nationalite2'] = $this->values['nationalite3'];
-                $this->values['nationalite3'] = NULL;
+            if ($this->values['nationality1'] == "") {
+                $this->values['nationality1']  = $this->values['nationality2'];
+                $this->values['nationality2'] = $this->values['nationality3'];
+                $this->values['nationality3'] = NULL;
             }
 
-            XDB::execute("UPDATE  auth_user_md5
-                             SET  nationalite = {?}, nationalite2 = {?}, nationalite3 = {?}, naissance={?}
-                           WHERE  user_id = {?}",
-                         $this->values['nationalite'], $this->values['nationalite2'], $this->values['nationalite3'],
-                         preg_replace('@(\d{2})/(\d{2})/(\d{4})@', '\3-\2-\1', $this->values['naissance']),
-                         S::v('uid'));
-        }
-        if ($this->changed['freetext'] || $this->changed['freetext_pub']) {
-            XDB::execute("UPDATE  auth_user_quick
-                             SET  profile_freetext={?}, profile_freetext_pub={?}
-                           WHERE  user_id = {?}",
-                         $this->values['freetext'], $this->values['freetext_pub'], S::v('uid'));
+            XDB::execute("UPDATE  profiles
+                             SET  nationality1 = {?}, nationality2 = {?}, nationality3 = {?}, birthdate = {?},
+                                  freetext = {?}, freetext_pub = {?}
+                           WHERE  pid = {?}",
+                          $this->values['nationality1'], $this->values['nationality2'], $this->values['nationality3'],
+                          preg_replace('@(\d{2})/(\d{2})/(\d{4})@', '\3-\2-\1', $this->values['birthdate']),
+                          $this->values['freetext'], $this->values['freetext_pub'], $this->pid());
         }
         if ($this->changed['email_directory']) {
             $new_email = ($this->values['email_directory'] == "new@example.org") ?
@@ -469,25 +461,24 @@ class ProfileGeneral extends ProfilePage
             }
             XDB::execute("REPLACE INTO  profile_directory (uid, email_directory)
                                 VALUES  ({?}, {?})",
-                         S::v('uid'), $new_email);
+                         $this->pid(), $new_email);
         }
         if ($this->changed['photo_pub']) {
             XDB::execute("UPDATE  photo
                              SET  pub = {?}
                            WHERE  uid = {?}",
-                         $this->values['photo_pub'], S::v('uid'));
+                         $this->values['photo_pub'], $this->pid());
         }
         if ($this->changed['yourself']) {
-            XDB::execute("UPDATE  profile_display
-                             SET  yourself = {?}
-                           WHERE  pid = {?}",
-                         $this->values['yourself'], S::v('uid'));
+            XDB::execute('UPDATE  accounts
+                             SET  display_name = {?}
+                           WHERE  pid = {?}', $this->pid());
         }
         if ($this->changed['promo']) {
             XDB::execute("UPDATE  profile_display
                              SET  promo = {?}
                            WHERE  pid = {?}",
-                         $this->values['promo'], S::v('uid'));
+                         $this->values['promo'], $this->pid());
         }
     }
 
@@ -495,23 +486,23 @@ class ProfileGeneral extends ProfilePage
     {
         require_once "education.func.inc.php";
 
-        $res = XDB::iterator("SELECT  id, field
-                                FROM  profile_education_field_enum
-                            ORDER BY  field");
+        $res = XDB::query("SELECT  id, field
+                             FROM  profile_education_field_enum
+                         ORDER BY  field");
         $page->assign('edu_fields', $res->fetchAllAssoc());
 
         require_once "emails.combobox.inc.php";
-        fill_email_combobox($page);
+        fill_email_combobox($page, $this->owner, $this->profile);
 
-        $res = XDB::iterator("SELECT  nw.network_type AS type, nw.name
-                                FROM  profile_networking_enum AS nw
-                            ORDER BY  name");
+        $res = XDB::query("SELECT  nw.network_type AS type, nw.name
+                             FROM  profile_networking_enum AS nw
+                         ORDER BY  name");
         $page->assign('network_list', $res->fetchAllAssoc());
 
         $res = XDB::query("SELECT  public_name, private_name
                              FROM  profile_display
                             WHERE  pid = {?}",
-                             S::v('uid'));
+                          $this->pid());
         $res = $res->fetchOneRow();
         $page->assign('public_name', $res[0]);
         $page->assign('private_name', $res[1]);