Adds types in profile_name_search and fixes a related few bugs.
authorStéphane Jacob <jacou@melix.net>
Fri, 16 Jan 2009 13:12:04 +0000 (14:12 +0100)
committerStéphane Jacob <jacou@melix.net>
Fri, 16 Jan 2009 13:12:04 +0000 (14:12 +0100)
include/name.func.inc.php
include/validations/names.inc.php
modules/profile/general.inc.php
templates/profile/general.searchname.tpl
upgrade/newdirectory-0.0.1/00_names.sql

index feb4536..900e411 100644 (file)
@@ -60,16 +60,16 @@ function build_types($pub = null)
     } else {
         $sql_pub = "";
     }
-    $sql = "SELECT  id, name
+    $sql = "SELECT  id, type, name
               FROM  profile_name_enum
              WHERE  NOT FIND_IN_SET('not_displayed', flags)" . $sql_pub;
     $sn_types = XDB::iterator($sql);
     $types    = array();
     while ($sn_type = $sn_types->next()) {
         if ($pub) {
-            $types[$sn_type['name']] = $sn_type['id'];
+            $types[$sn_type['type']] = $sn_type['id'];
         } else {
-            $types[$sn_type['id']] = $sn_type['name'];
+            $types[$sn_type['id']]   = $sn_type['name'];
         }
     }
     return $types;
@@ -78,29 +78,29 @@ function build_types($pub = null)
 function build_full_name(&$search_names, &$sn_types)
 {
     $name = "";
-    if (isset($search_names[$sn_types['Nom usuel']])) {
-        $name .= $search_names[$sn_types['Nom usuel']]['fullname'] . " ("
-              . $search_names[$sn_types['Nom patronymique']]['fullname'] . ")";
+    if (isset($search_names[$sn_types['lastname_ordinary']])) {
+        $name .= $search_names[$sn_types['lastname_ordinary']]['fullname'] . " ("
+              . $search_names[$sn_types['lastname']]['fullname'] . ")";
     } else {
-        $name .= $search_names[$sn_types['Nom patronymique']]['fullname'];
+        $name .= $search_names[$sn_types['lastname']]['fullname'];
     }
-    if (isset($search_names[$sn_types['Nom marital']])
-        || isset($search_names[$sn_types['Pseudonyme (nom de plume)']])) {
+    if (isset($search_names[$sn_types['lastname_marital']])
+        || isset($search_names[$sn_types['pseudonym']])) {
         $name .= " (";
-        if (isset($search_names[$sn_types['Nom marital']])) {
+        if (isset($search_names[$sn_types['lastname_marital']])) {
             $user = S::user();
             if ($user->isFemale()) {
                 $name .= "Mme ";
             } else {
                 $name .= "M ";
             }
-            $name .= $search_names[$sn_types['Nom marital']]['fullname'];
-            if (isset($search_names[$sn_types['Pseudonyme (nom de plume)']])) {
+            $name .= $search_names[$sn_types['lastname_marital']]['fullname'];
+            if (isset($search_names[$sn_types['pseudonym']])) {
                 $name .= ", ";
             }
         }
-        if (isset($search_names[$sn_types['Pseudonyme (nom de plume)']])) {
-            $name .= $search_names[$sn_types['Pseudonyme (nom de plume)']]['fullname'];
+        if (isset($search_names[$sn_types['pseudonym']])) {
+            $name .= $search_names[$sn_types['pseudonym']]['fullname'];
         }
         $name .= ")";
     }
@@ -109,44 +109,44 @@ function build_full_name(&$search_names, &$sn_types)
 
 function build_public_name(&$search_names, &$sn_types, $full_name)
 {
-    return $search_names[$sn_types['Prénom']]['fullname'] . " " . $full_name;
+    return $search_names[$sn_types['firstname']]['fullname'] . " " . $full_name;
 }
 
 function build_private_name(&$search_names, &$sn_types)
 {
     $name = "";
-    if (isset($search_names[$sn_types['Surnom']])
-        || (isset($search_names[$sn_types['Autre prénom']])
-        || isset($search_names[$sn_types['Autre nom']]))) {
+    if (isset($search_names[$sn_types['nickname']])
+        || (isset($search_names[$sn_types['name_other']])
+        || isset($search_names[$sn_types['name_other']]))) {
         $name .= " (";
-        if (isset($search_names[$sn_types['Surnom']])) {
-            $name .= "alias " . $search_names[$sn_types['Surnom']]['fullname'];
+        if (isset($search_names[$sn_types['nickname']])) {
+            $name .= "alias " . $search_names[$sn_types['nickname']]['fullname'];
             $i = 0;
-            while (isset($search_names[$sn_types['Surnom']][$i])) {
-                $name .= ", " . $search_names[$sn_types['Surnom']][$i];
+            while (isset($search_names[$sn_types['nickname']][$i])) {
+                $name .= ", " . $search_names[$sn_types['nickname']][$i];
                 $i++;
             }
-            if (isset($search_names[$sn_types['Autre prénom']])
-                || isset($search_names[$sn_types['Autre nom']])) {
+            if (isset($search_names[$sn_types['name_other']])
+                || isset($search_names[$sn_types['name_other']])) {
                 $name .= ", ";
             }
         }
-        if (isset($search_names[$sn_types['Autre prénom']])) {
-            $name .= "autres prénoms : " . $search_names[$sn_types['Autre prénom']]['fullname'];
+        if (isset($search_names[$sn_types['firstname_other']])) {
+            $name .= "autres prénoms : " . $search_names[$sn_types['firstname_other']]['fullname'];
             $i = 0;
-            while (isset($search_names[$sn_types['Autre prénom']][$i])) {
-                $name .= ", " . $search_names[$sn_types['Autre prénom']][$i];
+            while (isset($search_names[$sn_types['firstname_other']][$i])) {
+                $name .= ", " . $search_names[$sn_types['firstname_other']][$i];
                 $i++;
             }
-            if (isset($search_names[$sn_types['Autre nom']])) {
+            if (isset($search_names[$sn_types['name_other']])) {
                 $name .= ", ";
             }
         }
-        if (isset($search_names[$sn_types['Autre nom']])) {
-            $name .= "autres noms : " . $search_names[$sn_types['Autre nom']]['fullname'];
+        if (isset($search_names[$sn_types['name_other']])) {
+            $name .= "autres noms : " . $search_names[$sn_types['name_other']]['fullname'];
             $i = 0;
-            while (isset($search_names[$sn_types['Autre nom']][$i])) {
-                $name .= ", " . $search_names[$sn_types['Autre nom']][$i];
+            while (isset($search_names[$sn_types['name_other']][$i])) {
+                $name .= ", " . $search_names[$sn_types['name_other']][$i];
                 $i++;
             }
         }
@@ -157,20 +157,20 @@ function build_private_name(&$search_names, &$sn_types)
 
 function build_directory_name(&$search_names, &$sn_types, $full_name)
 {
-    return $full_name . " " . $search_names[$sn_types['Prénom']]['fullname'];
+    return $full_name . " " . $search_names[$sn_types['firstname']]['fullname'];
 }
 
 function build_short_name(&$search_names, &$sn_types, &$alias = null)
 {
-    if (isset($search_names[$sn_types['Nom usuel']])) {
-        $lastname = $search_names[$sn_types['Nom usuel']]['fullname'];
+    if (isset($search_names[$sn_types['lastname_ordinary']])) {
+        $lastname = $search_names[$sn_types['lastname_ordinary']]['fullname'];
     } else {
-        $lastname = $search_names[$sn_types['Nom patronymique']]['fullname'];
+        $lastname = $search_names[$sn_types['lastname']]['fullname'];
     }
-    if (isset($search_names[$sn_types['Prénom usuel']])) {
-        $firstname = $search_names[$sn_types['Prénom usuel']]['fullname'];
+    if (isset($search_names[$sn_types['firstname_ordinary']])) {
+        $firstname = $search_names[$sn_types['firstname_ordinary']]['fullname'];
     } else {
-        $firstname = $search_names[$sn_types['Prénom']]['fullname'];
+        $firstname = $search_names[$sn_types['firstname']]['fullname'];
     }
     if ($alias) {
         $alias = make_username($firstname, $lastname);
@@ -181,12 +181,12 @@ function build_short_name(&$search_names, &$sn_types, &$alias = null)
 function build_sort_name(&$search_names, &$sn_types)
 {
     $name = "";
-    if (isset($search_names[$sn_types['Nom usuel']])) {
-        $name .= $search_names[$sn_types['Nom usuel']]['name'];
+    if (isset($search_names[$sn_types['lastname_ordinary']])) {
+        $name .= $search_names[$sn_types['lastname_ordinary']]['name'];
     } else {
-        $name .= $search_names[$sn_types['Nom patronymique']]['name'];
+        $name .= $search_names[$sn_types['lastname']]['name'];
     }
-    $name .= " " . $search_names[$sn_types['Prénom']]['fullname'];
+    $name .= " " . $search_names[$sn_types['firstname']]['fullname'];
     return $name;
 }
 
@@ -247,6 +247,13 @@ function set_alias_names(&$sn_new, $sn_old, $update_new = false, $new_alias = nu
                                    VALUES  ('', {?}, {?}, {?})",
                              $sn['fullname'], $typeid, S::i('uid'));
             }
+            $i = 0;
+            while (isset($sn[$i])) {
+                XDB::execute("INSERT INTO  profile_name (particle, name, typeid, pid)
+                                   VALUES  ('', {?}, {?}, {?})",
+                             $sn[$i], $typeid, S::i('uid'));
+                $i++;
+            }
         }
     }
     if (count($sn_old) > 0) {
index b5b62ff..2c3ff1a 100644 (file)
@@ -123,7 +123,7 @@ class NamesReq extends Validate
     public function commit()
     {
         require_once 'notifs.inc.php';
-        require_once('name.func.inc.php');
+        require_once 'name.func.inc.php';
 
         register_watch_op($this->user->id(), WATCH_FICHE, '', 'search_names');
         set_profile_display($this->display_names);
index b588836..33e9915 100644 (file)
@@ -43,7 +43,7 @@ class ProfileSearchNames implements ProfileSetting
         $new     = $this->prepareField($value);
         $newLen  = strlen($new);
         $success = $this->matchWord($ini, $new, $newLen)
-                   || ($field == 'Nom patronymique' && $new == 'DE ' . $ini);
+                   || ($field == 'lastname' && $new == 'DE ' . $ini);
         if (!$success) {
             $field = strtolower($field);
             Platal::page()->trigError("Le " . $field . " que tu as choisi (" . $value .
@@ -58,7 +58,7 @@ class ProfileSearchNames implements ProfileSetting
         $success_tmp = true;
         if (is_null($value)) {
             $sn_all = XDB::iterator("SELECT  CONCAT(sn.particle, sn.name) AS name,
-                                             sn.particle, sn.typeid, e.name AS type,
+                                             sn.particle, sn.typeid, e.type, e.name AS type_name,
                                              FIND_IN_SET('has_particle', e.flags) AS has_particle,
                                              FIND_IN_SET('always_displayed', e.flags) AS always_displayed,
                                              FIND_IN_SET('public', e.flags) AS pub
@@ -68,7 +68,8 @@ class ProfileSearchNames implements ProfileSetting
                                    ORDER BY  NOT FIND_IN_SET('always_displayed', e.flags), e.id, sn.name",
                                     S::v('uid'));
 
-            $sn_types = XDB::iterator("SELECT  id, name, FIND_IN_SET('has_particle', flags) AS has_particle
+            $sn_types = XDB::iterator("SELECT  id, type, name,
+                                               FIND_IN_SET('has_particle', flags) AS has_particle
                                          FROM  profile_name_enum
                                         WHERE  NOT FIND_IN_SET('not_displayed', flags)
                                                AND FIND_IN_SET('always_displayed', flags)
@@ -81,31 +82,37 @@ class ProfileSearchNames implements ProfileSetting
                     $value[] = $sn;
                     $sn = $sn_all->next();
                 } else {
-                    $value[] = array('typeid' => $sn_type['id'],
-                                     'type'   => $sn_type['name'],
-                                     'pub'    => 1,
+                    $value[] = array('typeid'    => $sn_type['id'],
+                                     'type'      => $sn_type['type'],
+                                     'type_name' => $sn_type['name'],
+                                     'pub'       => 1,
                                      'has_particle'     => $sn_type['has_particle'],
                                      'always_displayed' => 1);
                 }
             }
-            do {
-                $value[] = $sn;
-            } while ($sn = $sn_all->next());
+            if ($sn) {
+                do {
+                    $value[] = $sn;
+                } while ($sn = $sn_all->next());
+            }
         } else {
+            require_once 'name.func.inc.php';
+
             $res = XDB::query("SELECT  s.particle, s.name
                                  FROM  profile_name      AS s
                            INNER JOIN  profile_name_enum AS e ON (e.id = s.typeid)
-                                WHERE  s.pid = {?} AND e.name LIKE '%initial'
-                             ORDER BY  e.name = 'Prénom initial'",
+                                WHERE  s.pid = {?} AND e.type LIKE '%ini'
+                             ORDER BY  e.type = 'firstname_ini'",
                              S::i('uid'));
             $res = $res->fetchAllAssoc();
             $initial = array();
-            $initial['Nom patronymique'] = $res[0]['particle'] . $res[0]['name'];
-            $initial['Prénom'] = $res[1]['name'];
+            $initial['lastname'] = $res[0]['particle'] . $res[0]['name'];
+            $initial['firstname'] = $res[1]['name'];
+            $sn_types = build_types();
             $this->search_names = array();
             foreach ($value as &$sn) {
                 $sn['name'] = trim($sn['name']);
-                if ($sn['type'] == 'Prénom' || $sn['type'] == 'Nom patronymique') {
+                if ($sn['type'] == 'firstname' || $sn['type'] == 'lastname') {
                     $sn['name'] = $this->prepare($page, $sn['type'], $sn['name'],
                                                  $initial[$sn['type']], $success_tmp);
                     $success = $success && $success_tmp;
@@ -135,6 +142,7 @@ class ProfileSearchNames implements ProfileSetting
                         } else {
                             $this->search_names[$sn['typeid']] = array('fullname' => $sn['name']);
                         }
+                        $sn['type_name'] = $sn_types[$sn['typeid']];
                     }
                 }
             }
@@ -144,7 +152,6 @@ class ProfileSearchNames implements ProfileSetting
                               S::v('uid'));
             list($public_name, $private_name) = $res->fetchOneRow();
             if ($success) {
-                require_once 'name.func.inc.php';
                 $sn_types_private       = build_types('private');
                 $this->private_name_end = build_private_name($this->search_names, $sn_types_private);
                 $private_name           = $public_name . $this->private_name_end;
index ff873ee..89649b7 100644 (file)
     <input type="hidden" name="sn_type_{$sn_type.id}_{$i}" value="{$sn_type.pub}"/>
     {/foreach}
     {else}
-    {$sn.type}
+    {$sn.type_name}
     <input type="hidden" name="search_names[{$i}][pub]" value="{$sn.pub}"/>
     <input type="hidden" name="search_names[{$i}][type]" value="{$sn.type}"/>
+    <input type="hidden" name="search_names[{$i}][type_name]" value="{$sn.type_name}"/>
     <input type="hidden" name="search_names[{$i}][typeid]" value="{$sn.typeid}"/>
     {/if}
   </td>
index 3a31193..22b2c51 100644 (file)
@@ -30,26 +30,32 @@ CREATE TABLE IF NOT EXISTS profile_name_enum (
   id TINYINT(2) UNSIGNED NOT NULL AUTO_INCREMENT,
   name VARCHAR(255) NOT NULL,
   explanations VARCHAR(255) NOT NULL,
+  type VARCHAR(255) NOT NULL,
   flags SET('has_particle', 'not_displayed', 'always_displayed', 'public') NOT NULL,
   PRIMARY KEY (id),
   UNIQUE (name)
 ) CHARSET=utf8;
 
-INSERT INTO  profile_name_enum (name, flags, explanations)
-     VALUES  ('Nom patronymique', 'has_particle,always_displayed,public', 'Le nom de famille avec lequel tu es né'),
+INSERT INTO  profile_name_enum (name, flags, explanations, type)
+     VALUES  ('Nom patronymique', 'has_particle,always_displayed,public',
+              'Le nom de famille avec lequel tu es né', 'lastname'),
              ('Nom marital', 'has_particle,always_displayed,public',
-              'Ton nom d\'épouse ou d\'époux'),
+              'Ton nom d\'épouse ou d\'époux', 'lastname_marital'),
              ('Nom usuel', 'has_particle,always_displayed,public',
-              'Le nom de famille que tu utilises usuellement s\'il est différent du nom patronymique, ce peut-être une  version racourcie de celui-ci, ton nom marital, une combianaison de ces deux noms...'),
-             ('Prénom', 'always_displayed,public', 'Ton prénom'),
+              'Le nom de famille que tu utilises usuellement s\'il est différent du nom patronymique, ce peut-être une  version racourcie de celui-ci, ton nom marital, une combinaison de ces deux noms...',
+              'lastname_ordinary'),
+             ('Prénom', 'always_displayed,public', 'Ton prénom', 'firstname'),
              ('Pseudonyme (nom de plume)', 'always_displayed,public',
-              'Pseudonyme pour les artistes, gens de lettres'),
-             ('Surnom', '', 'Surnom à l\'École ou ailleurs'),
-             ('Prénom usuel', 'public', 'Si tu utilises une version raccourcie, francisée... de ton prénom'),
-             ('Autre prénom', '', 'Si tu as d\'autres prénoms et que tu souhaites les faire apparaître'),
-             ('Autre nom', '', 'Si tu as d\'autres noms et que tu souhaites les faire apparaître'),
-             ('Nom initial', 'has_particle,not_displayed,public', ''),
-             ('Prénom initial', 'has_particle,not_displayed,public', '');
+              'Pseudonyme pour les artistes, gens de lettres', 'pseudonym'),
+             ('Surnom', '', 'Surnom à l\'École ou ailleurs', 'nickname'),
+             ('Prénom usuel', 'public', 'Si tu utilises une version raccourcie, francisée... de ton prénom',
+              'firstname_ordinary'),
+             ('Autre prénom', '', 'Si tu as d\'autres prénoms et que tu souhaites les faire apparaître',
+              'firstname_other'),
+             ('Autre nom', '', 'Si tu as d\'autres noms et que tu souhaites les faire apparaître',
+              'name_other'),
+             ('Nom initial', 'has_particle,not_displayed,public', '', 'name_ini'),
+             ('Prénom initial', 'has_particle,not_displayed,public', '', 'firstname_ini');
 
 
 DROP TABLE IF EXISTS profile_name;