mirror of
https://gitlab.easter-eggs.com/ee/ldapsaisie.git
synced 2024-11-22 18:09:06 +01:00
LSsearch : Added searchLSformat and approxLSformat parameter for searched attributes
This commit is contained in:
parent
aa4058f46f
commit
b87d5207e7
3 changed files with 112 additions and 18 deletions
|
@ -13,6 +13,11 @@ configuration des &LSobjects;, dans la variable <varname>LSsearch</varname>
|
||||||
'attr1',
|
'attr1',
|
||||||
'attr2',
|
'attr2',
|
||||||
...
|
...
|
||||||
|
'attr3' => array(
|
||||||
|
'searchLSformat' => '[LSformat]',
|
||||||
|
'approxLSformat' => '[LSformat]',
|
||||||
|
),
|
||||||
|
...
|
||||||
),
|
),
|
||||||
'params' => array(
|
'params' => array(
|
||||||
// Paramètres de la recherche
|
// Paramètres de la recherche
|
||||||
|
@ -48,15 +53,58 @@ configuration des &LSobjects;, dans la variable <varname>LSsearch</varname>
|
||||||
passé par l'utilisateur, &LdapSaisie; composera un filtre LDAP à partir de
|
passé par l'utilisateur, &LdapSaisie; composera un filtre LDAP à partir de
|
||||||
cette liste.</para>
|
cette liste.</para>
|
||||||
<para>Lors d'une recherche non-approximative, le filtre de recherche sera
|
<para>Lors d'une recherche non-approximative, le filtre de recherche sera
|
||||||
composé de la manière suivante :
|
composé (par défaut) de la manière suivante :
|
||||||
<programlisting>(|(attr1=*motif*)(attr2=*motif*)...)</programlisting></para>
|
<programlisting>(|(attr1=*motif*)(attr2=*motif*)...)</programlisting></para>
|
||||||
<para>Lors d'une recherche approximative, le filtre de recherche sera
|
<para>Lors d'une recherche approximative, le filtre de recherche sera
|
||||||
composé de la manière suivante :
|
composé (par défaut) de la manière suivante :
|
||||||
<programlisting>(|(attr1=~motif)(attr2~=motif)...)</programlisting></para>
|
<programlisting>(|(attr1=~motif)(attr2~=motif)...)</programlisting></para>
|
||||||
|
<para>Il est également possible de paramétrer la manière dont sera composé le filtre
|
||||||
|
de recherche attribut par attribut à l'aide des paramètres <emphasis>searchLSformat</emphasis>
|
||||||
|
et <emphasis>approxLSformat</emphasis>.</para>
|
||||||
<important><simpara>Ces filtres, une fois composés, sont insérés dans un autre,
|
<important><simpara>Ces filtres, une fois composés, sont insérés dans un autre,
|
||||||
filtrant en plus sur les <emphasis>ObjectClass</emphasis> du type
|
filtrant en plus sur les <emphasis>ObjectClass</emphasis> du type
|
||||||
d'&LSobject; de la manière suivante :</simpara>
|
d'&LSobject; de la manière suivante :</simpara>
|
||||||
<programlisting><![CDATA[(& (&(objectclass=oc1)(objectclass=oc2)) (filtre) )]]></programlisting></important>
|
<programlisting><![CDATA[(& (&(objectclass=oc1)(objectclass=oc2)) (filtre) )]]></programlisting></important>
|
||||||
|
|
||||||
|
<variablelist>
|
||||||
|
<title>Paramètres des attributs</title>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>searchLSformat</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Ce paramètre est un &LSformat; permettant de définir, attribut par attribut, comment le
|
||||||
|
filtre de recherche LDAP est composé à partir d'un motif de recherche et en cas de recherche
|
||||||
|
non-approximative.</para>
|
||||||
|
<para>Ce &LSformat; est composé à l'aide des éléments <emphasis>name</emphasis>, le nom de
|
||||||
|
l'attribut et <emphasis>pattern</emphasis>, le motif de recherche.
|
||||||
|
<programlisting>
|
||||||
|
<citetitle>Exemple</citetitle>
|
||||||
|
<![CDATA[(%{name}=%{pattern})]]>
|
||||||
|
</programlisting></para>
|
||||||
|
<important><simpara>Le filtre déduit doit obligatoirement commencer par <emphasis>(</emphasis> et
|
||||||
|
se terminer par <emphasis>)</emphasis>.</simpara></important>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>approxLSformat</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Ce paramètre est un &LSformat; permettant de définir, attribut par attribut, comment le
|
||||||
|
filtre de recherche LDAP est composé à partir d'un motif de recherche et en cas de recherche
|
||||||
|
approximative.</para>
|
||||||
|
<para>Ce &LSformat; est composé à l'aide des éléments <emphasis>name</emphasis>, le nom de
|
||||||
|
l'attribut et <emphasis>pattern</emphasis>, le motif de recherche.
|
||||||
|
<programlisting>
|
||||||
|
<citetitle>Exemple</citetitle>
|
||||||
|
<![CDATA[(%{name}=~%{pattern})]]>
|
||||||
|
</programlisting></para>
|
||||||
|
<important><simpara>Le filtre déduit doit obligatoirement commencer par <emphasis>(</emphasis> et
|
||||||
|
se terminer par <emphasis>)</emphasis>.</simpara></important>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
</variablelist>
|
||||||
|
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
|
|
@ -700,23 +700,41 @@ class LSldapObject {
|
||||||
*/
|
*/
|
||||||
function getPatternFilter($pattern=null,$approx=null) {
|
function getPatternFilter($pattern=null,$approx=null) {
|
||||||
if ($pattern!=NULL) {
|
if ($pattern!=NULL) {
|
||||||
|
$attrs=array();
|
||||||
if (is_array($this -> config['LSsearch']['attrs'])) {
|
if (is_array($this -> config['LSsearch']['attrs'])) {
|
||||||
$attrs=$this -> config['LSsearch']['attrs'];
|
foreach ($this -> config['LSsearch']['attrs'] as $key => $val) {
|
||||||
|
if (is_int($key)) {
|
||||||
|
$attrs[$val]=array();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$attrs=array($this -> config['rdn']);
|
$attrs[$key]=$val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$attrs=array($this -> config['rdn'] => array());
|
||||||
}
|
}
|
||||||
$pfilter='(|';
|
$pfilter='(|';
|
||||||
if ($approx) {
|
if ($approx) {
|
||||||
foreach ($attrs as $attr_name) {
|
foreach ($attrs as $attr_name => $attr_opts) {
|
||||||
|
if (isset($attr_opts['approxLSformat'])) {
|
||||||
|
$pfilter.=getFData($attr_opts['approxLSformat'],array('name' => $attr_name, 'pattern' => $pattern));
|
||||||
|
}
|
||||||
|
else {
|
||||||
$pfilter.='('.$attr_name.'~='.$pattern.')';
|
$pfilter.='('.$attr_name.'~='.$pattern.')';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
foreach ($attrs as $attr_name => $attr_opts) {
|
||||||
|
if (isset($attr_opts['searchLSformat'])) {
|
||||||
|
$pfilter.=getFData($attr_opts['searchLSformat'],array('name' => $attr_name, 'pattern' => $pattern));
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
foreach ($attrs as $attr_name) {
|
|
||||||
$pfilter.='('.$attr_name.'=*'.$pattern.'*)';
|
$pfilter.='('.$attr_name.'=*'.$pattern.'*)';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
$pfilter.=')';
|
$pfilter.=')';
|
||||||
return $pfilter;
|
return $pfilter;
|
||||||
}
|
}
|
||||||
|
|
|
@ -574,10 +574,22 @@ class LSsearch {
|
||||||
$pattern=$this -> params['pattern'];
|
$pattern=$this -> params['pattern'];
|
||||||
}
|
}
|
||||||
if (self :: isValidPattern($pattern)) {
|
if (self :: isValidPattern($pattern)) {
|
||||||
$operator=( ($params['approx'])?'approx':'contains' );
|
$attrsConfig=LSconfig::get("LSobjects.".$this -> LSobject.".LSsearch.attrs");
|
||||||
$attrsList=LSconfig::get("LSobjects.".$this -> LSobject.".LSsearch.attrs");
|
$attrsList=array();
|
||||||
if (!is_array($attrsList)) {
|
if (!is_array($attrsList)) {
|
||||||
$attrsList = array_keys(LSconfig::get("LSobjects.".$this -> LSobject.".attrs"));
|
foreach(LSconfig::get("LSobjects.".$this -> LSobject.".attrs") as $attr) {
|
||||||
|
$attrsList[$attr]=array();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
foreach($attrsConfig as $key => $val) {
|
||||||
|
if(is_int($key)) {
|
||||||
|
$attrsList[$val]=array();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$attrsList[$key]=$val;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($attrsList)) {
|
if (empty($attrsList)) {
|
||||||
|
@ -586,8 +598,24 @@ class LSsearch {
|
||||||
}
|
}
|
||||||
|
|
||||||
$filters=array();
|
$filters=array();
|
||||||
foreach ($attrsList as $attr) {
|
foreach ($attrsList as $attr => $opts) {
|
||||||
$filter=Net_LDAP2_Filter::create($attr,$operator,$pattern);
|
if ($params['approx']) {
|
||||||
|
if (isset($opts['approxLSformat'])) {
|
||||||
|
$filter=Net_LDAP2_Filter::parse(getFData($opts['approxLSformat'],array('name'=>$attr,'pattern'=>$pattern)));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$filter=Net_LDAP2_Filter::create($attr,'approx',$pattern);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (isset($opts['searchLSformat'])) {
|
||||||
|
$filter=Net_LDAP2_Filter::parse(getFData($opts['searchLSformat'],array('name'=>$attr,'pattern'=>$pattern)));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$filter=Net_LDAP2_Filter::create($attr,'contains',$pattern);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!Net_LDAP2::isError($filter)) {
|
if (!Net_LDAP2::isError($filter)) {
|
||||||
$filters[]=$filter;
|
$filters[]=$filter;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue