LSattr_html :: postaladdress : improve it and add default configuration value
authorBenjamin Renard <brenard@easter-eggs.com>
Thu, 15 Jun 2017 16:44:51 +0000 (18:44 +0200)
committerBenjamin Renard <brenard@easter-eggs.com>
Thu, 15 Jun 2017 16:44:51 +0000 (18:44 +0200)
doc/conf/LSattribute/LSattr_html/LSattr_html_postaladdress.docbook
public_html/includes/class/class.LSformElement_postaladdress.php

index 9e74b8f..1b41da7 100644 (file)
@@ -5,10 +5,22 @@
   en plus de l'adresse, un lien composé à partir d'informations de l'objet permettant
   par exemple d'afficher un lien vers une carte géocalisant l'adresse postale.</para>
 
   en plus de l'adresse, un lien composé à partir d'informations de l'objet permettant
   par exemple d'afficher un lien vers une carte géocalisant l'adresse postale.</para>
 
+  <para>Par défaut, le lien ajouté sera un lien de recherche de l'adresse postale
+  générée à partir de la valeur de l'attribut (en remplaçant les retours à la ligne
+  (<literal>\n</literal>) par des espaces) via le service
+  <ulink url='http://nominatim.openstreetmap.org/'>Nominatim d'OpenStreetMap</ulink>.
+  </para>
+
+  <note><simpara>Dans le cadre du fonctionnement par défaut et pour maîtriser les
+  valeurs stockées dans l'annuaire, il faut coupler ce type d'attribut HTML avec le
+  type d'attribut LDAP
+  <link linkend='config-LSattr_ldap_postaladdress'>postaladdress</link></simpara></note>
+
 <programlisting linenumbering="unnumbered">
 <citetitle>Structure</citetitle>...
 <![CDATA['html_options' => array(
   'map_url_pattern_format' => '[LSformat]',
 <programlisting linenumbering="unnumbered">
 <citetitle>Structure</citetitle>...
 <![CDATA['html_options' => array(
   'map_url_pattern_format' => '[LSformat]',
+  'map_url_pattern_generate_function' => '[callable]',
   'map_url_format' => '[LSformat]',
 ),]]>
 ...
   'map_url_format' => '[LSformat]',
 ),]]>
 ...
 </varlistentry>
 
 <varlistentry>
 </varlistentry>
 
 <varlistentry>
+  <term>map_url_pattern_generate_function</term>
+  <listitem>
+    <simpara>Ce paramètre permet de définir une fonction qui sera utilisée à la place
+    du paramètre <literal>map_url_pattern_format</literal> pour générer la valeur de
+    l'adresse postale qui sera insérée dans l'URL du lien ajouté dans l'interface.
+    Cette fonction prendra en paramètre l'objet <emphasis>LSformElement</emphasis>
+    courant et devra retourner une chaîne de caractères correspondant à l'adresse
+    postale à insérer dans le lien de l'interface. Par défaut, la fonction
+    <literal>LSformElement_postaladdress__generate_pattern</literal> est utilisée.
+    </simpara>
+  </listitem>
+</varlistentry>
+
+<varlistentry>
   <term>map_url_format</term>
   <listitem>
     <simpara>Ce &LSformat; doit permettre de générer l'URL du lien ajouté dans
   <term>map_url_format</term>
   <listitem>
     <simpara>Ce &LSformat; doit permettre de générer l'URL du lien ajouté dans
-    l'interface à partir de la valeur de l'adresse postale générée via le paramètre
-    <literal>map_url_pattern_format</literal>.</simpara>
+    l'interface. Il sera composé avec les informations de l'objet LDAP, y compris
+    le mot clé <emphasis>%{pattern}</emphasis> correspondant à la valeur de l'adresse
+    postale générée à l'aide des paramètres précédents. Par défaut, la format suivant
+    sera utilisé :
+    <literal>http://nominatim.openstreetmap.org/search.php?q=%{pattern}</literal></simpara>
   </listitem>
 </varlistentry>
 
   </listitem>
 </varlistentry>
 
index 8cfa700..67f7375 100644 (file)
@@ -42,15 +42,27 @@ class LSformElement_postaladdress extends LSformElement_textarea {
   function getDisplay(){
     $return = parent :: getDisplay();
     if ($this -> isFreeze()) {
   function getDisplay(){
     $return = parent :: getDisplay();
     if ($this -> isFreeze()) {
-      if (isset($this -> params['html_options']['map_url_format']) && !empty($this->values)) {
-       if (isset($this -> params['html_options']['map_url_pattern_format'])) {
-               $pattern=$this -> attr_html -> attribute -> ldapObject -> getFData($this -> params['html_options']['map_url_pattern_format']);
-               $pattern=str_replace("\n"," ",$pattern);
-               $pattern=urlencode($pattern);
-               $this -> attr_html -> attribute -> ldapObject -> registerOtherValue('pattern',$pattern);
+      if (!empty($this->values)) {
+        $map_url_format=(isset($this -> params['html_options']['map_url_format'])?$this -> params['html_options']['map_url_format']:'http://nominatim.openstreetmap.org/search.php?q=%{pattern}');
+        if (isset($this -> params['html_options']['map_url_pattern_generate_function'])) {
+          if (is_callable($this -> params['html_options']['map_url_pattern_generate_function'])) {
+            $this -> attr_html -> attribute -> ldapObject -> registerOtherValue('pattern',call_user_func($this -> params['html_options']['map_url_pattern_generate_function'],$this));
+          }
+          else {
+            LSerror::addErrorCode('LSformElement_postaladdress_01', $this -> params['html_options']['map_url_pattern_generate_function']);
+          }
        }
        }
+       elseif (isset($this -> params['html_options']['map_url_pattern_format'])) {
+          $pattern=$this -> attr_html -> attribute -> ldapObject -> getFData($this -> params['html_options']['map_url_pattern_format']);
+          $pattern=str_replace("\n"," ",$pattern);
+          $pattern=urlencode($pattern);
+          $this -> attr_html -> attribute -> ldapObject -> registerOtherValue('pattern',$pattern);
+       }
+        else {
+          $this -> attr_html -> attribute -> ldapObject -> registerOtherValue('pattern',LSformElement_postaladdress__generate_pattern($this));
+        }
         LSsession :: addJSconfigParam('LSformElement_postaladdress_'.$this -> name, array (
         LSsession :: addJSconfigParam('LSformElement_postaladdress_'.$this -> name, array (
-            'map_url' => $this -> attr_html -> attribute -> ldapObject -> getFData($this -> params['html_options']['map_url_format']) 
+            'map_url' => $this -> attr_html -> attribute -> ldapObject -> getFData($map_url_format)
           )
         );
         LSsession :: addHelpInfos(
           )
         );
         LSsession :: addHelpInfos(
@@ -66,4 +78,10 @@ class LSformElement_postaladdress extends LSformElement_textarea {
   }
 }
 
   }
 }
 
-?>
+function LSformElement_postaladdress__generate_pattern($LSformElement) {
+  return str_replace("\n"," ",$LSformElement->attr_html->attribute->getDisplayValue());
+}
+
+LSerror :: defineError('LSformElement_postaladdress_01',
+_("LSformElement_postaladdress : Map URL pattern generate function is not callabled (%{function}).")
+);