Changes how is displayed networking information
authorGuillaume Bandet <guillaume.bandet@polytechnique.org>
Fri, 20 Jun 2008 11:29:32 +0000 (13:29 +0200)
committerGuillaume Bandet <guillaume.bandet@polytechnique.org>
Thu, 10 Jul 2008 21:47:43 +0000 (23:47 +0200)
htdocs/javascript/profile.js
modules/profile.php
modules/profile/general.inc.php
modules/search.php
modules/search/classes.inc.php
modules/search/search.inc.php
templates/admin/index.tpl
templates/profile/general.networking.tpl
templates/profile/general.tpl
templates/profile/profile.tpl
templates/search/adv.form.tpl

index 2b615e8..4e16e29 100644 (file)
@@ -113,39 +113,38 @@ function removeSearchName(i)
 function addNetworking()
 {
     var i = 0;
-    var nw = 'networking_';
-    while (document.getElementById(nw + i) != null) {
+    var nws = 'networking_';
+    while (document.getElementById(nws + i) != null) {
         i++;
     }
-    var cb   = document.forms.prof_annu['nw_type'];
-    var id   = cb.value;
-    var text = cb.options[cb.selectedIndex].text;
+    var namefirst = '';
     var html = '<tr id="networking_' + i + '">'
-        + '  <td>'
-        + '    <span class="flags">'
-        + '      <input type="checkbox" name="networking[' + i + '][pub]"/>'
-        + '      <img src="images/icons/flag_green.gif" alt="site public" title="site public">'
-        + '    </span>&nbsp;'
-        + '    <input type="hidden" name="networking[' + i + '][type]" value="' + id + '"/>'
-        + '    <input type="hidden" name="networking[' + i + '][name]" value="' + text + '"/>'
-        + '    <img src="profile/networking/' + id + '" alt="' + text + '" title="' + text + '" />'
-        + '    <span class="title">'
-        + text
-        + '    </span>'
-        + '  </td>'
-        + '  <td>'
-        + '    <input type="text" name="networking[' + i + '][address]" value="" size="30"/>'
-        + '    <a href="javascript:removeNetworking(' + i + ')">'
-        + '      <img src="images/icons/cross.gif" alt="cross" title="Supprimer cet élément"/>'
-        + '    </a>'
+        + '  <td colspan="2">'
+        + '    <div style="float: left; width: 200px;">'
+        + '      <span class="flags">'
+        + '        <input type="checkbox" name="networking[' + i + '][pub]"/>'
+        + '        <img src="images/icons/flag_green.gif" alt="site public" title="site public">'
+        + '      </span>&nbsp;'
+        + '      <select id="networking_type_' + i + '" name="networking[' + i + '][type]" onchange="javascript:updateNetworking(' + i + ');">';
+    for (nw in nw_list) {
+        if (namefirst == '') {
+            namefirst = nw;
+        }
+        html += '  <option value="' + nw_list[nw] + '">' + nw + '</option>';
+    }
+    html += '</select>'
+        + '      <input type="hidden" id="networking_name_' + i + '" name="networking[' + i + '][name]" value="' + namefirst + '"/>'
+        + '    </div>'
+        + '    <div style="float: left">'
+        + '      <input type="text" name="networking[' + i + '][address]" value="" size="30"/>'
+        + '      <a href="javascript:removeNetworking(' + i + ')">'
+        + '        <img src="images/icons/cross.gif" alt="cross" title="Supprimer cet élément"/>'
+        + '      </a>'
+        + '    </div>'
         + '  </td>'
         + '</tr>';
 
-    if (i == 0) {
-        $('#networking').after(html);
-    } else {
-        $('#networking_'+(i-1)).after(html);
-    }
+    $('#networking').before(html);
 }
 
 function removeNetworking(id)
@@ -153,14 +152,14 @@ function removeNetworking(id)
     $('#networking_' + id).remove();
 }
 
-function updateNetworking()
+function updateNetworking(i)
 {
-    var val = document.forms.prof_annu['nw_type'].value;
-    if (val == '') {
-        document.getElementById('nw_add').style.display = 'none';
-    } else {
-        document.getElementById('nw_add').style.display = '';
+    var name = document.getElementById('networking_name_' + i);
+    var type = document.getElementById('networking_type_' + i);
+    if (type != null && name != null) {
+        name.value = type.options[type.selectedIndex].text;
     }
+
 }
 
 // Addresses
index a62c930..89a4d56 100644 (file)
@@ -833,6 +833,7 @@ class ProfileModule extends PLModule
         $page->assign('xorg_title', 'Polytechnique.org - Administration - Format d\'affichage des numéros de téléphone ');
         $page->assign('title', 'Gestion des formats d\'affichage des numéros de téléphone');
         $table_editor = new PLTableEditor('admin/phones_format_display', 'phone_formats', 'phoneprf',true);
+        $table_editor->describe('phoneprf', 'Préfixe International', true);
         $table_editor->describe('format', 'format d\'Affichage (ex: (+p) ### ## ## ##)', true);
         if ($action == 'update') {
             if ((Post::has('phoneprf')) && (Post::v('phoneprf') == $id)) {
index ccff9a1..1351848 100644 (file)
@@ -179,22 +179,26 @@ class ProfileNetworking implements ProfileSetting
         }
         $success = true;
         foreach($value as $i=>&$network) {
-            if(!isset($network['pub'])) {
-                $network['pub'] = 'private';
-            }
-            $network['error'] = false;
-            $network['pub'] = $this->pub->value($page, 'pub', $network['pub'], $s);
-            $s = true;
-            if ($filters[$network['type']] == 'web') {
-                $network['address'] = $this->web->value($page, 'address', $network['address'], $s);
-            } elseif ($filters[$network['type']] == 'email') {
-                $network['address'] = $this->email->value($page, 'address', $network['address'], $s);
-            } elseif ($filters[$network['type']] == 'number') {
-                $network['address'] = $this->number->value($page, 'address', $network['address'], $s);
-            }
-            if (!$s) {
-                $success = false;
-                $network['error'] = true;
+            if (!trim($network['address'])) {
+                unset($value[$i]);
+            } else {
+                if (!isset($network['pub'])) {
+                    $network['pub'] = 'private';
+                }
+                $network['error'] = false;
+                $network['pub'] = $this->pub->value($page, 'pub', $network['pub'], $s);
+                $s = true;
+                if ($filters[$network['type']] == 'web') {
+                    $network['address'] = $this->web->value($page, 'address', $network['address'], $s);
+                } elseif ($filters[$network['type']] == 'email') {
+                    $network['address'] = $this->email->value($page, 'address', $network['address'], $s);
+                } elseif ($filters[$network['type']] == 'number') {
+                    $network['address'] = $this->number->value($page, 'address', $network['address'], $s);
+                }
+                if (!$s) {
+                    $success = false;
+                    $network['error'] = true;
+                }
             }
         }
         return $value;
index 55e5d20..97f8773 100644 (file)
@@ -168,11 +168,6 @@ class SearchModule extends PLModule
         $page->assign('advanced',1);
         $page->addJsLink('jquery.autocomplete.js');
 
-        $res = XDB::iterator("SELECT  nw.network_type AS type, nw.name
-                                FROM  profile_networking_enum AS nw
-                            ORDER BY  name ;");
-        $page->assign('network_list', $res->fetchAllAssoc());
-
         if (!Env::has('rechercher') && $action != 'geoloc') {
             $this->form_prepare();
         } else {
@@ -182,6 +177,8 @@ class SearchModule extends PLModule
                 'secteur' => array('field' => 'id', 'table' => 'emploi_secteur', 'text' => 'label', 'exact' => false),
                 'nationalite' => array('field' => 'a2', 'table' => 'geoloc_pays', 'text' => 'nat', 'exact' => 'false'),
                 'binet' => array('field' => 'id', 'table' => 'binets_def', 'text' => 'text', 'exact' => false),
+                'networking_type' => array('field' => 'network_type', 'table' => 'profile_networking_enum',
+                                           'text' => 'name', 'exact' => false),
                 'groupex' => array('field' => 'id', 'table' => 'groupex.asso',
                                    'text' => "(a.cat = 'GroupesX' OR a.cat = 'Institutions') AND pub = 'public' AND nom",
                                    'exact' => false),
@@ -272,6 +269,13 @@ class SearchModule extends PLModule
                 $beginwith = false;
             $realid = '`binets_def`.`id`';
             break;
+          case 'networking_typeTxt':
+            $db = '`profile_networking_enum` INNER JOIN
+                   `profile_networking` ON(`profile_networking`.`network_type` = `profile_networking_enum`.`network_type`)';
+            $field = '`profile_networking_enum`.`name`';
+            $unique = 'uid';
+            $realid = '`profile_networking_enum`.`network_type`';
+            break;
           case 'city':
             $db = '`geoloc_city` INNER JOIN
                    `adresses` ON(`geoloc_city`.`id` = `adresses`.`cityid`)';
@@ -424,6 +428,11 @@ class SearchModule extends PLModule
           case 'binet':
             $db = '`binets_def`';
             break;
+          case 'networking_type':
+            $db = '`profile_networking_enum`';
+            $field = '`name`';
+            $id = '`network_type`';
+            break;
           case 'country':
             $db = '`geoloc_pays`';
             $field = '`pays`';
index 6eab490..8113380 100644 (file)
@@ -515,6 +515,19 @@ class PhoneSField extends RefSField
     }
 }
 
+class IndexSField extends RefSField
+{
+    function IndexSField($_fieldFormName, $_fieldDbName='', $_refTable, $_refAlias, $_refCondition)
+    {
+        $this->RefSField($_fieldFormName, $_fieldDbName, $_refTable, $_refAlias, $_refCondition, true);
+    }
+
+    function get_request()
+    {
+        $this->value = trim(Env::v($this->fieldFormName));
+    }
+}
+
 class MapSField extends RefSField
 {
     var $mapId;
index e621ca2..7db59a7 100644 (file)
@@ -75,9 +75,9 @@ function advancedSearchFromInput()
 
     $nwAddressField  = new RefSField('networking_address', array('nw.address'), 'profile_networking', 'nw', 'nw.uid=u.user_id', false);
     if (Env::v('networking_address') == '') {
-        $nwTypeField     = new RefSField('networking_type', array('nwe.name'), array('profile_networking', 'profile_networking_enum'), array('nw', 'nwe'), array('nw.uid = u.user_id', 'nwe.network_type = nw.network_type'), true);
+        $nwTypeField     = new IndexSField('networking_type', array('nwe.network_type'), array('profile_networking', 'profile_networking_enum'), array('nw', 'nwe'), array('nw.uid = u.user_id', 'nwe.network_type = nw.network_type'));
     } else {
-        $nwTypeField     = new RefSField('networking_type', array('nwe.name'), 'profile_networking_enum', 'nwe', 'nwe.network_type = nw.network_type', true);
+        $nwTypeField     = new IndexSField('networking_type', array('nwe.network_type'), 'profile_networking_enum', 'nwe', 'nwe.network_type = nw.network_type');
     }
     $nwPhoneField  = new PhoneSField('phone_number', array('t.search_tel'), 'telephone', 't', 't.uid=u.user_id');
     return array(
index 64be0cb..36dbf56 100644 (file)
       &nbsp;&nbsp;|&nbsp;&nbsp;
       <a href="admin/networking">Networking</a>
       &nbsp;&nbsp;|&nbsp;&nbsp;
-      <a href="admin/phones_format_display">Format d'affichage des numéros de téléphone</a>
+      <a href="admin/phones_format_display">Téléphone</a>
     </td>
   </tr>
   <tr class="pair">
index e7f7f28..97474a8 100644 (file)
 {**************************************************************************}
 
 <tr id="networking_{$i}">
-  <td>
-    <span class="flags">
-      <input type="checkbox"
-        {if $nw.pub neq 'private'} checked="checked"{/if}
-        name="networking[{$i}][pub]"/>
-      {icon name="flag_green" title="site public"}
-    </span>&nbsp;
-    <input type="hidden" name="networking[{$i}][type]" value="{$nw.type}"/>
-    <input type="hidden" name="networking[{$i}][name]" value="{$nw.name}"/>
-    <img src="profile/networking/{$nw.type}" alt="{nw.name}" title="{nw.name}" />
-    <span class="title">{$nw.name}</span>
-  </td>
-  <td>
-    <input type="text" name="networking[{$i}][address]" value="{$nw.address}"
-    {if $nw.error} class="error" {/if}
-    size="30"/>
-    <a href="javascript:removeNetworking({$i})">
-      {icon name=cross title="Supprimer cet élément"}
-    </a>
+  <td colspan="2">
+    <div style="float: left; width: 200px;">
+      <span class="flags">
+        <input type="checkbox"
+          {if $nw.pub neq 'private'} checked="checked"{/if}
+          name="networking[{$i}][pub]"/>
+        {icon name="flag_green" title="site public"}
+      </span>&nbsp;
+      <input type="hidden" name="networking[{$i}][type]" value="{$nw.type}"/>
+      <input type="hidden" name="networking[{$i}][name]" value="{$nw.name}"/>
+      <img src="profile/networking/{$nw.type}" alt="{$nw.name}" title="{$nw.name}" />
+      <span style="">{$nw.name}</span>
+    </div>
+    <div style="float: left">
+      <input type="text" name="networking[{$i}][address]" value="{$nw.address}"
+        {if $nw.error} class="error" {/if}
+        size="30"/>
+      <a href="javascript:removeNetworking({$i})">
+        {icon name=cross title="Supprimer cet élément"}
+      </a>
+    </div>
   </td>
 </tr>
 
index 0ecaefc..9eebac8 100644 (file)
       <span class="titre">Messageries, networking et sites web</span>
     </td>
   </tr>
-  <tr id="networking">
-    <td>
-      <span class="titre" style="margin-left:1em;">Type à ajouter</span>
-    </td>
-    <td>
-      <select name="nw_type" onchange="updateNetworking()">
-        <option value=""></option>
-        {foreach from=$network_list item=network}
-          <option value="{$network.type}">{$network.name}</option>
-        {/foreach}
-      </select>
-      <span id="nw_add" style="display: none">
-        <a href="javascript:addNetworking();">{icon name=add title="Ajouter cette adresse"}</a>
-      </span>
-    </td>
-  </tr>
   {foreach from=$networking item=network key=id}
     {include file="profile/general.networking.tpl" nw=$network i=$id}
   {/foreach}
+  <tr id="networking">
+    <script type="text/javascript">//<![CDATA[
+      var nw_list = new Array();
+      {foreach from=$network_list item=network}
+        nw_list['{$network.name}'] = {$network.type};
+      {/foreach}
+    //]]></script>
+    <td colspan="2">
+      <div id="nw_add" class="center">
+        <a href="javascript:addNetworking();">
+          {icon name=add title="Ajouter une adresse"} Ajouter une adresse
+        </a>
+      </div>
+    </td>
+  </tr>
+<!--  <tr id="networking">
+    <td colspan="2">
+      <div style="float: left; width: 200px;">
+        <span class="titre" style="margin-left:1em;">Type à ajouter</span>
+      </div>
+      <div style="float: left;">
+        <div id="nw_type_ac" style="background-color: white; border: solid 1px black; position: absolute; width: 208px; display: none">TEST</div>
+        <input type="text" size="30" id="nw_type" name="nw_type" onkeyup="updateNetworking()">
+        <span id="nw_add" style="display: none">
+          <a href="javascript:addNetworking();">{icon name=add title="Ajouter cette adresse"}</a>
+        </span>
+      </div>
+    </td>
+  </tr>-->
   <tr class="pair">
     <td>
       <div>
index 405987f..9ddee57 100644 (file)
@@ -51,7 +51,7 @@ function chgMainWinLoc(strPage)
       <span><br/>{$x.gpxs_join|smarty:nodefaults}</span></div>{/if}
     {/if}
     {if $x.networking}
-      <h2>Messageries, networking et sites web&nbsp;:</h2>
+      <h2>Sur le web...</h2>
       {foreach from=$x.networking item=network}
         <img style="width: auto; padding: 0" src="profile/networking/{$network.type}" alt="{$network.name}" title="{$network.name}"/>
         {if $network.filter == 'web'}
index 5e61843..abee6af 100644 (file)
@@ -409,31 +409,22 @@ checked="checked"{/if}/>Chercher uniquement les adresses où les camarades sont
       <td><input type="text" name="phone_number" size="32" value="{$smarty.request.phone_number}"/></td>
     </tr>
     <tr>
-      <td colspan="2">Messageries, networking et sites webs</td>
-    </tr>
-    <tr>
-      <td>
-        <span style="margin-left:2em">Adresse</span>
-      </td>
-      <td>
-        <input type="text" name="networking_address" size="32" value="{$smarty.request.networking_address}" />
-      </td>
-    </tr>
-    <tr>
-      <td>
-        <span style="margin-left:2em">Type</span>
+      <td style="vertical-align: middle">
+        <span>Networking et sites webs</span>
       </td>
       <td>
-        <select name="networking_type">
-          <option value="" {if $smarty.request.networking_type eq ""} selected="selected"{/if}>
-            Tout
-          </option>
-        {foreach from=$network_list item=network}
-          <option value="{$network.name}" {if $smarty.request.networking_type eq $network.name} selected="selected" {/if}>
-            {$network.name}
-          </option>
-        {/foreach}
-        </select>
+        <table>
+          <tr>
+            <td style="padding-left: 0px;">
+              <input type="text" name="networking_address" size="32" value="{$smarty.request.networking_address}" />
+            </td>
+            <td>
+              <input type="text" name="networking_typeTxt" class="autocomplete" size="10" value="{$smarty.request.networking_typeTxt}" />
+              <input name="networking_type" class="autocompleteTarget" type="hidden" value="{$smarty.request.networking_type}"/>
+              <a href="networking_type" class="autocompleteToSelect">{icon name="table" title="Tous les types d'adresse"}</a>
+            </td>
+          </tr>
+        </table>
       </td>
     </tr>
         {if $smarty.session.auth ge AUTH_COOKIE}