Outputs csv of postal formatted addresses corresponding to an advanced query (#Closes...
[platal.git] / templates / search / adv.form.tpl
index 7654438..167f8d4 100644 (file)
@@ -1,6 +1,6 @@
 {**************************************************************************}
 {*                                                                        *}
-{*  Copyright (C) 2003-2009 Polytechnique.org                             *}
+{*  Copyright (C) 2003-2010 Polytechnique.org                             *}
 {*  http://opensource.polytechnique.org/                                  *}
 {*                                                                        *}
 {*  This program is free software; you can redistribute it and/or modify  *}
 
 <h1>Recherche dans l'annuaire</h1>
 
+{if hasPerm('edit_directory,admin') && t($suggestAddresses)}
+<p class="center"><strong>Voulez-vous télécharger le <a href="{$globals->baseurl}/search/adv/addresses{$plset_args}">tableau des adresses postales</a> pour la recette précédente&nbsp;?</strong></p>
+{/if}
+
+{javascript name=jquery.form}
+
 <script type="text/javascript">// <!--
   var baseurl = platal_baseurl + "search/";
   {literal}
+  String.prototype.htmlEntities = function () {
+    return this.replace(/&/g,'&amp;').replace(new RegExp('<','g'),'&lt;').replace(/>/g,'&gt;');
+  };
   // display an autocomplete row : blabla (nb of found matches)
   function make_format_autocomplete(block) {
     return function(row) {
         regexp = new RegExp('(' + RegExp.escape(block.value) + ')', 'i');
 
-        name = row[0].replace(regexp, '<strong>$1<\/strong>');
+        name = row[0].htmlEntities().replace(regexp, '<strong>$1<\/strong>');
 
         if (row[1] === "-1") {
-          return '...';
+          return '&hellip;';
+        }
+
+        if (row[1] === "-2") {
+          return '<em>aucun camarade trouvé pour '+row[0].htmlEntities()+'<\/em>';
         }
 
         camarades = (row[1] > 1) ? "camarades" : "camarade";
 
-        return name + '<em>&nbsp;&nbsp;-&nbsp;&nbsp;' + row[1] + '&nbsp;' + camarades + '<\/em>';
+        return name + '<em>&nbsp;&nbsp;-&nbsp;&nbsp;' + row[1].htmlEntities() + '&nbsp;' + camarades + '<\/em>';
       };
   }
 
 
     if (schoolId) {
       $(".autocomplete[name='schoolTxt']").addClass('hidden_valid');
-
-      $("[name='diploma']").parent().load(baseurl + 'list/diploma/', { school:schoolId }, function() {
-          if ($("select[name='diploma']").children("option").size() > 1) {
-            $("select[name='diploma']").attr('value', '{/literal}{$smarty.request.diploma}{literal}');
-          } else {
-            $("select[name='diploma']").attr('value', '');
-          }
-        });
     } else {
       $(".autocomplete[name='schoolTxt']").removeClass('hidden_valid');
+    }
 
-      $("select[name='diploma']").attr('value', '');
+    $("[name='diploma']").parent().load(baseurl + 'list/diploma/', { school:schoolId }, function() {
+        $("select[name='diploma']").attr('value', '{/literal}{$smarty.request.diploma}{literal}');
+      });
+  }
+
+  // when choosing a job term in tree, hide tree and set job term field
+  function searchForJobTerm(treeid, jtid, full_name) {
+    $(".term_tree").remove();
+    $("input[name='jobtermTxt']").val(full_name).addClass("hidden_valid").show();
+    $("input[name='jobterm']").val(jtid);
+  }
+
+  function cancel_autocomplete(field, realfield) {
+    $(".autocomplete[name='"+field+"']").removeClass('hidden_valid').val('').focus();
+    if (typeof(realfield) != "undefined") {
+      $(".autocompleteTarget[name='"+realfield+"']").val('');
     }
+    return;
   }
 
   // when choosing autocomplete from list, must validate
       // if changing country, might want to open region choice
       if (nameRealField == 'country')
         return function(i) {
+            if (i.extra[0] < 0) {
+              cancel_autocomplete('countryTxt', 'country');
+              i.extra[1] = '';
+            }
             changeCountry(i.extra[1]);
           }
 
       if (nameRealField == 'school')
         return function(i) {
+            if (i.extra[0] < 0) {
+              cancel_autocomplete('schoolTxt', 'school');
+              i.extra[1] = '';
+            }
             changeSchool(i.extra[1]);
           }
 
       return function(i) {
         nameRealField = this.field.replace(/Txt$/, '');
 
+        if (i.extra[0] < 0) {
+          cancel_autocomplete(this.field, nameRealField);
+          return;
+        }
+
         $(".autocompleteTarget[name='"+nameRealField+"']").attr('value',i.extra[1]);
 
         $(".autocomplete[name='"+this.field+"']").addClass('hidden_valid');
           $(this).parent().find('.autocompleteTarget').val('');
         });
     });
+/** Regexps to wipe out from search queries */
+var default_form_values = [ /&woman=0(&|$)/, /&subscriber=0(&|$)/, /&alive=0(&|$)/, /&egal[12]=[^&]*&promo[12]=(&|$)/g, /&networking_type=0(&|$)/, /&[^&=]+=(&|$)/g ];
+/** Uses javascript to clean form from all empty fields */
+function cleanForm(f) {
+  var query = $(f).formSerialize();
+  var old_query;
+  for (var i in default_form_values) {
+    var reg = default_form_values[i];
+    if (typeof(reg) != "undefined") {
+      do {
+        old_query = query;
+        query = query.replace(reg, '$1');
+      } while (old_query != query);
+    }
+  }
+  query = query.replace(/^&*(.*)&*$/, '$1');
+  if (query == "rechercher=Chercher") {
+    alert("Aucun critère n'a été spécifié");
+    return false;
+  }
+  document.location = baseurl + 'adv?' + query;
+  return false;
+}
 -->
 {/literal}</script>
 <p class="center">[<a href="search">Revenir à la recherche simple</a>]</p>
-<form id="recherche" action="search/adv" method="get">
+<form id="recherche" action="search/adv" method="get" onsubmit="return cleanForm(this)">
   <table class="bicol" cellpadding="3" summary="Recherche">
     <tr>
       <th colspan="2">
       </th>
     </tr>
     <tr>
-      <td>Nom</td>
+      <td>Nom, prénom, surnom...</td>
       <td>
         <input type="hidden" name="rechercher" value="Chercher"/>
         <input type="submit" style="display:none"/>
-        <input type="text" class="autocomplete" name="name" size="32" value="{$smarty.request.name}" />
-      </td>
-    </tr>
-    <tr>
-      <td>Prénom</td>
-      <td>
-        <input class="autocomplete" type="text" name="firstname" size="32" value="{$smarty.request.firstname}" />
-      </td>
-    </tr>
-    <tr>
-      <td>Surnom</td>
-      <td>
-        <input class="autocomplete" type="text" name="nickname" size="32" value="{$smarty.request.nickname}" />
+        <input type="text" name="name" size="32" value="{$smarty.request.name}" />
       </td>
     </tr>
     <tr>
       <td>Promotion</td>
       <td>
-        <select name="egal1">
+        <script type="text/javascript">/*<![CDATA[*/
+          {literal}
+          function updatepromofields(egal1) {
+            var f = egal1.form;
+            f.egal2.disabled = f.promo2.disabled = egal1.value == '=';
+            f.egal2.readOnly = true;
+            if (f.egal1.value == '>=') {
+              f.egal2.value = '<=';
+            } else {
+              f.egal2.value = '>=';
+            }
+          }
+          $(document).ready(function() { updatepromofields($('select[name=egal1]')[0]); });
+          {/literal}
+        /*]]>*/</script>
+        <select name="egal1" onchange="updatepromofields(this)" style="text-align:center">
           <option value="=" {if $smarty.request.egal1 eq "="}selected="selected"{/if}>&nbsp;=&nbsp;</option>
           <option value="&gt;=" {if $smarty.request.egal1 eq "&gt;="}selected="selected"{/if}>&nbsp;&gt;=&nbsp;</option>
           <option value="&lt;=" {if $smarty.request.egal1 eq "&lt;="}selected="selected"{/if}>&nbsp;&lt;=&nbsp;</option>
         </select>
         <input type="text" name="promo1" size="4" maxlength="4" value="{$smarty.request.promo1}" />
         &nbsp;et&nbsp;
-        <select name="egal2">
-          <option value="=" {if $smarty.request.egal2 eq "="}selected="selected"{/if}>&nbsp;=&nbsp;</option>
-          <option value="&gt;=" {if $smarty.request.egal2 eq "&gt;="}selected="selected"{/if}>&nbsp;&gt;=&nbsp;</option>
-          <option value="&lt;=" {if $smarty.request.egal2 neq "&gt;=" && $smarty.request.egal2 neq "="}selected="selected"{/if}>&nbsp;&lt;=&nbsp;</option>
-        </select>
+        <input type="text" name="egal2" size="1" style="text-align:center" value="{if t($smarty.request.egal2) eq '&lt;'}&lt;{else}&gt;{/if}" readonly="readonly" />
         <input type="text" name="promo2" size="4" maxlength="4" value="{$smarty.request.promo2}" />
       </td>
     </tr>
     </tr>
     <tr>
       <td colspan="2">
-      <label for="only_current"><input name="only_current" id="only_current" type="checkbox"{if $smarty.request.only_current}  
-checked="checked"{/if}/>Chercher uniquement les adresses où les camarades sont actuellement.</label></td>
+        <label for="only_current">
+          <input name="only_current" id="only_current" type="checkbox"{if $smarty.request.only_current} checked="checked"{/if}/>
+          Chercher uniquement les adresses où les camarades sont actuellement.
+        </label>
+      </td>
     </tr>
     <tr>
       <th colspan="2">Activité</th>
@@ -316,31 +376,24 @@ checked="checked"{/if}/>Chercher uniquement les adresses où les camarades sont
       <td><input type="text" class="autocomplete" name="entreprise" size="32" value="{$smarty.request.entreprise}" /></td>
     </tr>
     <tr>
-      <td>Fonction</td>
-      <td>
-        <input name="fonctionTxt" type="text" class="autocomplete" style="display:none" size="32"
-               value="{$smarty.request.fonctionTxt}"/>
-        <input name="fonction" class="autocompleteTarget" type="hidden" value="{$smarty.request.fonction}"/>
-        <a href="fonction" class="autocompleteToSelect">{icon name="table" title="Toutes les fonctions"}</a>
-      </td>
-    </tr>
-    <tr>
-      <td>Poste</td>
-      <td><input type="text" class="autocomplete" name="poste" size="32" value="{$smarty.request.poste}" /></td>
+      <td>Description</td>
+      <td><input type="text" class="autocomplete" name="description" size="32" value="{$smarty.request.description}" /></td>
     </tr>
     <tr>
-      <td>Secteur</td>
+      <td>Mots-clefs</td>
       <td>
-        <input name="secteurTxt" type="text" class="autocomplete" style="display:none" size="32"
-               value="{$smarty.request.secteurTxt}"/>
-        <input name="secteur" class="autocompleteTarget" type="hidden" value="{$smarty.request.secteur}"/>
-        <a href="secteur" class="autocompleteToSelect">{icon name="table" title="Tous les secteurs"}</a>
+        <input name="jobtermTxt" type="text" class="autocomplete{if $smarty.request.jobterm} hidden_valid{/if}" style="display:none" size="32"
+               value="{$smarty.request.jobtermTxt}"/>
+        <input name="jobterm" class="autocompleteTarget" type="hidden" value="{$smarty.request.jobterm}"/>
+        <a href="jobterm" class="autocompleteToSelect">{icon name="table" title="Tous les mots-clefs"}</a>
       </td>
     </tr>
+    {if hasPerm('directory_private')}
     <tr>
       <td>CV contient</td>
       <td><input type="text" name="cv" size="32" value="{$smarty.request.cv}" /></td>
     </tr>
+    {/if}
     <tr>
       <td colspan="2">
         <input type='checkbox' name='only_referent' {if $smarty.request.only_referent}checked='checked'{/if} id="only_referent"/>
@@ -359,6 +412,7 @@ checked="checked"{/if}/>Chercher uniquement les adresses où les camarades sont
         <a href="nationalite" class="autocompleteToSelect">{icon name="table" title="Toutes les nationalités"}</a>
       </td>
     </tr>
+    {if hasPerm('directory_private')}
     <tr>
       <td>Binet</td>
       <td>
@@ -368,6 +422,7 @@ checked="checked"{/if}/>Chercher uniquement les adresses où les camarades sont
         <a href="binet" class="autocompleteToSelect">{icon name="table" title="Tous les binets"}</a>
       </td>
     </tr>
+    {/if}
     <tr>
       <td>Groupe X</td>
       <td>
@@ -377,6 +432,7 @@ checked="checked"{/if}/>Chercher uniquement les adresses où les camarades sont
         <a href="groupex" class="autocompleteToSelect">{icon name="table" title="Tous les groupes X"}</a>
       </td>
     </tr>
+    {if hasPerm('directory_private')}
     <tr>
       <td>Section</td>
       <td>
@@ -386,6 +442,7 @@ checked="checked"{/if}/>Chercher uniquement les adresses où les camarades sont
         <a href="section" class="autocompleteToSelect">{icon name="table" title="Toutes les sections"}</a>
       </td>
     </tr>
+    {/if}
     <tr>
       <td>Formation</td>
       <td>
@@ -405,6 +462,31 @@ checked="checked"{/if}/>Chercher uniquement les adresses où les camarades sont
       <td>Commentaire contient</td>
       <td><input type="text" name="free" size="32" value="{$smarty.request.free}" /></td>
     </tr>
+    <tr>
+      <td>Numéro de téléphone</td>
+      <td><input type="text" name="phone_number" size="32" value="{$smarty.request.phone_number}"/></td>
+    </tr>
+    <tr>
+      <td style="vertical-align: middle">
+        <span>Networking et sites webs</span>
+      </td>
+      <td>
+        <table>
+          <tr>
+            <td style="padding-left: 0px;">
+              <input type="text" name="networking_address" size="32" value="{$smarty.request.networking_address}" />
+            </td>
+            <td>
+              <select name="networking_type">
+              {foreach from=$networking_types key=id item=network}
+                <option value="{$id}" {if $smarty.request.networking_type eq $id}selected="selected"{/if}>{$network}</option>
+              {/foreach}
+              </select>
+            </td>
+          </tr>
+        </table>
+      </td>
+    </tr>
         {if $smarty.session.auth ge AUTH_COOKIE}
     <tr>
       <td colspan="2">
@@ -427,8 +509,5 @@ checked="checked"{/if}/>Chercher uniquement les adresses où les camarades sont
     </tr>
   </table>
 </form>
-<p>
-  <small><strong>N.B. :</strong> le caractère joker * peut remplacer une ou plusieurs lettres dans les recherches.</small>
-</p>
 
 {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}