Replaces calls to session datas by cals to the object in name edition.
authorStéphane Jacob <sj@m4x.org>
Tue, 25 May 2010 12:48:56 +0000 (14:48 +0200)
committerStéphane Jacob <sj@m4x.org>
Wed, 26 May 2010 07:42:20 +0000 (09:42 +0200)
Signed-off-by: Stéphane Jacob <sj@m4x.org>
htdocs/javascript/profile.js
include/name.func.inc.php
include/validations/names.inc.php
modules/profile.php
modules/profile/general.inc.php
templates/profile/general.searchname.tpl

index 56255ef..2c5291c 100644 (file)
@@ -79,10 +79,10 @@ function addSearchName()
     });
 }
 
-function removeSearchName(i)
+function removeSearchName(i, isFemale)
 {
     $('#search_name_' + i).remove();
-    updateNameDisplay();
+    updateNameDisplay(isFemale);
 }
 
 function changeNameFlag(i)
@@ -104,7 +104,7 @@ function changeNameFlag(i)
     }
 }
 
-function updateNameDisplay()
+function updateNameDisplay(isFemale)
 {
     var searchnames = '';
     for (var i = 0; i < 10; i++) {
@@ -113,7 +113,7 @@ function updateNameDisplay()
             searchnames += $('#search_name_' + i).find(':text').val() + ';;';
         }
     }
-    Ajax.update_html(null, 'profile/ajax/buildnames/' + searchnames, function(data){
+    Ajax.update_html(null, 'profile/ajax/buildnames/' + searchnames + '/' + isFemale, function(data){
         var name = data.split(';');
         $('#public_name').html(name[0]);
         $('#private_name').html(name[0] + name[1]);
index 547f535..7b761da 100644 (file)
@@ -19,7 +19,7 @@
  *  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
  ***************************************************************************/
 
-function build_javascript_names($data)
+function build_javascript_names($data, $isFemale)
 {
     $data_array = explode(';;', $data);
     $n = count($data_array);
@@ -35,15 +35,15 @@ function build_javascript_names($data)
 
     $sn_types_public  = build_types('public');
     $sn_types_private = build_types('private');
-    $full_name        = build_full_name($search_names, $sn_types_public);
+    $full_name        = build_full_name($search_names, $sn_types_public, $isFemale);
     return build_public_name($search_names, $sn_types_public, $full_name) . ';' .
            build_private_name($search_names, $sn_types_private);
 }
 
-function build_display_names(&$display_names, $search_names, $private_name_end = null, &$alias = null)
+function build_display_names(&$display_names, $search_names, $isFemale, $private_name_end = null, &$alias = null)
 {
     $sn_types_public  = build_types('public');
-    $full_name        = build_full_name($search_names, $sn_types_public);
+    $full_name        = build_full_name($search_names, $sn_types_public, $isFemale);
     $display_names['public_name']    = build_public_name($search_names, $sn_types_public, $full_name);
     $display_names['private_name']   = $display_names['public_name'] . $private_name_end;
     $display_names['directory_name'] = build_directory_name($search_names, $sn_types_public, $full_name);
@@ -75,7 +75,7 @@ function build_types($pub = null)
     return $types;
 }
 
-function build_full_name(&$search_names, &$sn_types)
+function build_full_name(&$search_names, &$sn_types, $isFemale)
 {
     $name = "";
     if (isset($search_names[$sn_types['lastname_ordinary']])) {
@@ -88,8 +88,7 @@ function build_full_name(&$search_names, &$sn_types)
         || isset($search_names[$sn_types['pseudonym']])) {
         $name .= " (";
         if (isset($search_names[$sn_types['lastname_marital']])) {
-            $user = S::user();
-            if ($user->isFemale()) {
+            if ($isFemale) {
                 $name .= "Mme ";
             } else {
                 $name .= "M ";
@@ -190,7 +189,7 @@ function build_sort_name(&$search_names, &$sn_types)
     return $name;
 }
 
-function set_profile_display(&$display_names)
+function set_profile_display(&$display_names, $pid)
 {
     XDB::execute("UPDATE  profile_display
                      SET  public_name = {?}, private_name = {?},
@@ -198,10 +197,10 @@ function set_profile_display(&$display_names)
                    WHERE  pid = {?}",
                  $display_names['public_name'], $display_names['private_name'],
                  $display_names['directory_name'], $display_names['short_name'],
-                 $display_names['sort_name'], S::v('uid'));
+                 $display_names['sort_name'], $pid);
 }
 
-function build_sn_pub()
+function build_sn_pub($pid)
 {
     $res = XDB::iterator("SELECT  CONCAT(sn.particle, sn.name) AS fullname, sn.typeid,
                                   sn.particle, sn.name, sn.id
@@ -210,7 +209,7 @@ function build_sn_pub()
                            WHERE  sn.pid = {?} AND NOT FIND_IN_SET('not_displayed', e.flags)
                                   AND FIND_IN_SET('public', e.flags)
                         ORDER BY  NOT FIND_IN_SET('always_displayed', e.flags), e.id, sn.name",
-                        S::i('uid'));
+                         $pid);
     $sn_old = array();
     while ($old = $res->next()) {
         $sn_old[$old['typeid']] = array('fullname' => $old['fullname'],
@@ -221,7 +220,7 @@ function build_sn_pub()
     return $sn_old;
 }
 
-function set_alias_names(&$sn_new, $sn_old, $update_new = false, $new_alias = null)
+function set_alias_names(&$sn_new, $sn_old, $pid, $uid, $update_new = false, $new_alias = null)
 {
     $has_new = false;
     foreach ($sn_new as $typeid => $sn) {
@@ -230,13 +229,13 @@ function set_alias_names(&$sn_new, $sn_old, $update_new = false, $new_alias = nu
                 XDB::execute("UPDATE  profile_name
                                  SET  particle = {?}, name = {?}, typeid = {?}
                                WHERE  id = {?} AND pid = {?}",
-                             $sn['particle'], $sn['name'], $typeid, $sn_old[$typeid]['id'], S::i('uid'));
+                             $sn['particle'], $sn['name'], $typeid, $sn_old[$typeid]['id'], $pid);
                 unset($sn_old[$typeid]);
             } elseif ($update_new
                       || (isset($sn_old[$typeid]) && $sn_old[$typeid]['fullname'] == $sn['fullname'])) {
                 XDB::execute("INSERT INTO  profile_name (particle, name, typeid, pid)
                                    VALUES  ({?}, {?}, {?}, {?})",
-                             $sn['particle'], $sn['name'], $typeid, S::i('uid'));
+                             $sn['particle'], $sn['name'], $typeid, $pid);
                 unset($sn_old[$typeid]);
             } else {
                 $has_new = true;
@@ -245,13 +244,13 @@ function set_alias_names(&$sn_new, $sn_old, $update_new = false, $new_alias = nu
             if ($sn['fullname'] != '') {
                 XDB::execute("INSERT INTO  profile_name (particle, name, typeid, pid)
                                    VALUES  ('', {?}, {?}, {?})",
-                             $sn['fullname'], $typeid, S::i('uid'));
+                             $sn['fullname'], $typeid, $pid);
             }
             $i = 0;
             while (isset($sn[$i])) {
                 XDB::execute("INSERT INTO  profile_name (particle, name, typeid, pid)
                                    VALUES  ('', {?}, {?}, {?})",
-                             $sn[$i], $typeid, S::i('uid'));
+                             $sn[$i], $typeid, $pid);
                 $i++;
             }
         }
@@ -262,27 +261,27 @@ function set_alias_names(&$sn_new, $sn_old, $update_new = false, $new_alias = nu
             foreach ($sn_old as $typeid => $sn) {
                 XDB::execute("INSERT INTO  profile_name (particle, name, typeid, pid)
                                    VALUES  ({?}, {?}, {?}, {?})",
-                             $sn['particle'], $sn['name'], $typeid, S::i('uid'));
+                             $sn['particle'], $sn['name'], $typeid, $pid);
             }
         } else {
             foreach ($sn_old as $typeid => $sn) {
                 XDB::execute("DELETE FROM  profile_name
                                     WHERE  pid = {?} AND id = {?}",
-                             S::i('uid'), $sn['id']);
+                             $pid, $sn['id']);
             }
         }
     }
     if ($update_new) {
         XDB::execute("DELETE FROM  aliases
                             WHERE  FIND_IN_SET('usage', flags) AND uid = {?}",
-                     S::i('uid'));
+                     $uid);
     }
     if ($new_alias) {
         XDB::execute("INSERT INTO  aliases (alias, type, flags, uid)
                            VALUES  ({?}, 'alias', 'usage', {?})",
-                     $new_alias, S::i('uid'));
+                     $new_alias, $uid);
     }
-    Profile::rebuildSearchTokens(S::i('uid'));
+    Profile::rebuildSearchTokens($pid);
     return $has_new;
 }
 
index 41ee0f1..3bdd3f3 100644 (file)
@@ -45,12 +45,13 @@ class NamesReq extends Validate
         require_once 'name.func.inc.php';
 
         $this->sn_types  = build_types();
-        $this->sn_old    = build_sn_pub();
+        $this->sn_old    = build_sn_pub($this->user->profile()->id());
         $this->sn_new    = $_search_names;
         $this->new_alias = true;
         $this->display_names = array();
 
-        build_display_names($this->display_names, $_search_names, $_private_name_end, $this->new_alias);
+        build_display_names($this->display_names, $_search_names,
+                            $this->user->profile()->isFemale(), $_private_name_end, $this->new_alias);
         foreach ($this->sn_new AS $key => &$sn) {
             if (!isset($sn['pub'])) {
                 unset($this->sn_new[$key]);
@@ -124,8 +125,9 @@ class NamesReq extends Validate
     {
         require_once 'name.func.inc.php';
 
-        set_profile_display($this->display_names);
-        set_alias_names($this->sn_new, $this->sn_old, true, $this->new_alias);
+        set_profile_display($this->display_names, $this->user->profile()->id());
+        set_alias_names($this->sn_new, $this->sn_old, $this->user->profile()->id(),
+                        $this->user->id(), true, $this->new_alias);
 
         // Update the local User object, to pick up the new bestalias.
         $this->user = User::getSilent($this->user->id());
index 7957fde..855e7db 100644 (file)
@@ -483,12 +483,12 @@ class ProfileModule extends PLModule
         $page->assign('i', $id);
     }
 
-    function handler_ajax_buildnames(&$page, $data)
+    function handler_ajax_buildnames(&$page, $data, $isFemale)
     {
         header('Content-Type: text/html; charset=utf-8');
         $page->changeTpl('profile/general.buildnames.tpl', NO_SKIN);
         require_once 'name.func.inc.php';
-        $page->assign('names', build_javascript_names($data));
+        $page->assign('names', build_javascript_names($data, $isFemale));
     }
 
     function handler_referent(&$page, $pf)
index d6a2b21..4359cac 100644 (file)
@@ -200,13 +200,13 @@ class ProfileSettingSearchNames implements ProfileSetting
     public function save(ProfilePage &$page, $field, $value)
     {
         require_once 'name.func.inc.php';
-        $sn_old = build_sn_pub();
+        $sn_old = build_sn_pub($page->pid());
         XDB::execute("DELETE FROM  s
                             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)",
                      $page->pid());
-        $has_new = set_alias_names($this->search_names, $sn_old);
+        $has_new = set_alias_names($this->search_names, $sn_old, $page->pid(), $page->owner->id());
 
         // Only requires validation if modification in public names
         if ($has_new) {
@@ -216,8 +216,9 @@ class ProfileSettingSearchNames implements ProfileSetting
                                         ' Tu recevras un email dès que ces changements auront été effectués.');
         } else {
             $display_names = array();
-            build_display_names($display_names, $this->search_names, $this->private_name_end);
-            set_profile_display($display_names);
+            build_display_names($display_names, $this->search_names,
+                                $page->profile->isFemale(), $this->private_name_end);
+            set_profile_display($display_names, $page->pid());
         }
     }
 }
@@ -591,6 +592,7 @@ class ProfileSettingGeneral extends ProfilePage
         $res = $res->fetchOneRow();
         $page->assign('public_name', $res[0]);
         $page->assign('private_name', $res[1]);
+        $page->assign('isFemale', $this->profile->isFemale() ? 1 : 0);
     }
 }
 
index 8d76c6a..ef613e1 100644 (file)
@@ -30,7 +30,8 @@
       {else}{icon name="flag_red" title="site privé"}{/if}</span>
     </span>&nbsp;
     {if $sn_type_list}
-    <select id="search_name_select_{$i}" name="search_names[{$i}][typeid]" onchange="changeNameFlag({$i});updateNameDisplay();">
+    <select id="search_name_select_{$i}" name="search_names[{$i}][typeid]"
+      onchange="changeNameFlag({$i});updateNameDisplay({$isFemale});">
         {foreach from=$sn_type_list item=sn_type}
           <option value="{$sn_type.id}">{$sn_type.name}</option>
         {/foreach}
   <td>
     <input type="text" name="search_names[{$i}][name]" value="{$sn.name}"
       {if $sn.has_particle}title="Coche la case en bout de ligne si ton nom commence par une particle."{/if}
-      {if $sn.error} class="error"{/if} size="25" onkeyup="updateNameDisplay();"/>
+      {if $sn.error} class="error"{/if} size="25" onkeyup="updateNameDisplay({$isFemale});"/>
   </td>
   <td>
     {if $sn.has_particle}<input type="checkbox"{if $sn.particle neq ''} checked="checked"{/if}
       title="Coche cette case si ton nom commence par une particle." onchange="toggleParticle({$i});"/>
     {/if}
     <input type="hidden"  name="search_names[{$i}][particle]" value="{$sn.particle}"/>
-    {if !$sn.always_displayed}<a href="javascript:removeSearchName({$i})">
+    {if !$sn.always_displayed}<a href="javascript:removeSearchName({$i}, {$isFemale})">
       {icon name=cross title="Supprimer ce nom"}
     </a>{/if}
   </td>