2011-11-08 15:29:30 +00:00
< ? php
2011-12-08 15:04:02 +00:00
require_once realpath ( dirname ( __FILE__ )) . '/sequence.php' ;
require_once realpath ( dirname ( __FILE__ )) . '/configuration.php' ;
2011-11-08 15:29:30 +00:00
Class SDmotor
{
2011-11-16 14:57:23 +00:00
protected $sphinx ;
2011-11-08 15:29:30 +00:00
protected $formR ;
2011-12-08 15:04:02 +00:00
protected $index ;
2011-11-08 15:29:30 +00:00
2011-11-16 14:57:23 +00:00
protected $criteresLetters ;
2011-12-08 15:04:02 +00:00
protected $limits ;
protected $sequancesArray ;
protected $pertinance ;
protected $acronyme ;
2011-11-08 15:29:30 +00:00
2011-12-08 15:04:02 +00:00
protected $NumberResults ;
protected $MaxResults ;
2011-11-08 15:29:30 +00:00
public function __construct ()
{
2011-12-08 15:04:02 +00:00
$this -> limits [ 'total_time' ] = 0 ;
$this -> limits [ 'actif' ] = false ;
2011-11-08 15:29:30 +00:00
}
public function _initForm ( $formR )
{
$formulaire = array ();
$ok = false ;
2011-12-08 15:04:02 +00:00
switch ( $this -> index ) {
case 'ent' :
foreach ( $formR as $name => $form ) {
if ( $name != 'controller' and $name != 'action' and $name != 'module' and $name != 'Envoyer' ) {
$formulaire [ $name ] = ( empty ( $form )) ? '' : $form ;
}
}
foreach ( $formulaire as $name => $form ) {
if ( array_key_exists ( $name , ConfigurationEnt :: $app_form ) and ! empty ( $formulaire [ $name ]))
$array [ $name ] = $form ;
}
$this -> formR = $array ;
break ;
case 'dir' :
foreach ( $formR as $name => $form ) {
if ( $name != 'controller' and $name != 'action' and $name != 'module' and $name != 'Envoyer' ) {
$formulaire [ $name ] = ( empty ( $form )) ? '' : $form ;
}
}
$this -> formR = $formulaire ;
break ;
case 'act' :
foreach ( $formR as $name => $form ) {
if ( $name != 'controller' and $name != 'action' and $name != 'module' and $name != 'Envoyer' ) {
$formulaire [ $name ] = ( empty ( $form )) ? '' : $form ;
}
}
$this -> formR = $formulaire ;
break ;
case 'ciblage' :
break ;
2011-11-08 15:29:30 +00:00
}
2011-12-08 15:04:02 +00:00
2011-11-08 15:29:30 +00:00
}
public function databaseJO ()
{
2011-12-08 15:04:02 +00:00
switch ( $this -> index )
{
case 'ent' :
$db = new mysqli ( ConfigurationEnt :: $mysql_host , ConfigurationEnt :: $mysql_user , ConfigurationEnt :: $mysql_password , ConfigurationEnt :: $mysql_database );
break ;
case 'dir' :
$db = new mysqli ( ConfigurationDir :: $mysql_host , ConfigurationDir :: $mysql_user , ConfigurationDir :: $mysql_password , ConfigurationDir :: $mysql_database );
break ;
case 'act' :
$db = new mysqli ( ConfigurationAct :: $mysql_host , ConfigurationAct :: $mysql_user , ConfigurationAct :: $mysql_password , ConfigurationAct :: $mysql_database );
break ;
case 'ciblage' :
$db = new mysqli ( ConfigurationCiblage :: $mysql_host , ConfigurationCiblage :: $mysql_user , ConfigurationCiblage :: $mysql_password , ConfigurationCiblage :: $mysql_database );
break ;
}
2011-11-08 15:29:30 +00:00
if ( mysqli_connect_error ()) {
return ;
}
$db -> query ( " SET NAMES 'utf8'; " );
return $db ;
}
public function search ()
{
2011-12-08 15:04:02 +00:00
$pass = 0 ;
$quorum = array ();
switch ( $this -> index ) {
case 'ent' :
$this -> sphinx -> SetLimits ( intval ( $this -> deb ), intval ( $this -> NumberResults ), intval ( $this -> MaxResults ));
if ( ! empty ( $this -> formR [ 'raisonSociale' ])) $this -> formR [ 'raisonSociale' ] = $this -> formatRaisonSociale ( $this -> formR [ 'raisonSociale' ]);
$this -> sphinx -> SetSortMode ( ConfigurationEnt :: $sphinx_sort , 'sirenValide DESC, rang DESC, actif DESC, siege DESC' );
$this -> sphinx -> SetMatchMode ( ConfigurationEnt :: $sphinx_match );
if ( ! empty ( $this -> formR [ 'Voie' ])) $this -> formR [ 'Voie' ] = $this -> formatAdress ( $this -> formR [ 'Voie' ]);
$resSphinx = $this -> SPH_MATCH_ ();
break ;
case 'dir' :
$this -> sphinx -> SetLimits ( intval ( $this -> deb ), intval ( $this -> NumberResults ), intval ( $this -> MaxResults ));
$this -> sphinx -> SetSortMode ( ConfigurationDir :: $sphinx_sort , 'actif DESC' );
$this -> sphinx -> SetMatchMode ( ConfigurationDir :: $sphinx_match );
$resSphinx = $this -> SPH_MATCH_ ();
break ;
case 'act' :
$this -> sphinx -> SetLimits ( intval ( $this -> deb ), $this -> NumberResults , $this -> MaxResults );
$this -> sphinx -> SetSortMode ( ConfigurationAct :: $sphinx_sort , 'actif DESC' );
$this -> sphinx -> SetMatchMode ( ConfigurationAct :: $sphinx_match );
$resSphinx = $this -> SPH_MATCH_ ();
break ;
case 'ciblage' :
$this -> sphinx -> SetLimits ( intval ( $this -> deb ), ConfigurationCiblage :: $nb_results , ConfigurationCiblage :: $max_results );
break ;
2011-11-08 15:29:30 +00:00
}
2011-12-08 15:04:02 +00:00
if ( $resSphinx [ 'matches' ] > 0 ){ $this -> setTime ( $resSphinx [ 'time' ]);}
2011-11-08 15:29:30 +00:00
return ( $this -> getResponse ( $resSphinx ));
}
2011-12-08 15:04:02 +00:00
public function SPH_MATCH_ ()
2011-11-08 15:29:30 +00:00
{
2011-12-08 15:04:02 +00:00
$sequenceS = new Sequence ();
$Word = new Words ();
$ref = $Word -> refSequence ;
$sequence = $sequenceS -> sequence ;
$link = $sequenceS -> link ;
$this -> sequancesArray = array ();
switch ( $this -> index )
{
case 'ent' :
$i = 0 ;
$valeur = $this -> detectedSequance ();
do {
$this -> sequancesArray [] = $sequence [ $link [ $valeur ][ 'id' ][ $i ]];
$this -> criteresLetters = $sequence [ $link [ $valeur ][ 'id' ][ $i ]];
$sequances = explode ( '.' , $sequence [ $link [ $valeur ][ 'id' ][ $i ]]);
$quorum = $this -> countQorum ();
$quorumRue = $this -> countQorumR ();
if ( in_array ( 'S' , $sequances )) {
do {
$countRef = 0 ;
do {
if ( $link [ $valeur ][ $ref [ $countRef ]])
{
if ( in_array ( 'R' , $sequances ))
{
do {
$this -> constructQuerySequance ( $sequence [ $link [ $valeur ][ 'id' ][ $i ]], array ((( $quorum == $this -> countQorum ()) ? false : $quorum ), (( $quorumRue == $this -> countQorumR ()) ? false : $quorumRue )), $ref [ $countRef ]);
$result = $this -> sphinx -> RunQueries ();
if ( $this -> constructRaisonSocialeRequest ( $sequence [ $link [ $valeur ][ 'id' ][ $i ]], array ( $quorum , false ), $ref [ $countRef ])) {
$result = $this -> sphinx -> RunQueries ();
if ( ! empty ( $result )) {
foreach ( $result as $res ) {
if ( $res [ 'total' ] > 0 ) { $result = $res ;}
}
}
}
$quorumRue -- ;
} while (( $result [ 'total' ] < 1 ) && $quorumRue > 0 );
} else {
$this -> constructQuerySequance ( $sequence [ $link [ $valeur ][ 'id' ][ $i ]], array ( $quorum , false ), $ref [ $countRef ]);
if ( $this -> constructRaisonSocialeRequest ( $sequence [ $link [ $valeur ][ 'id' ][ $i ]], array ( $quorum , false ), $ref [ $countRef ])) {
$result = $this -> sphinx -> RunQueries ();
if ( ! empty ( $result )) {
foreach ( $result as $res ) {
if ( $res [ 'total' ] > 0 ) { $result = $res ;}
}
}
}
}
}
$countRef ++ ;
} while (( $result [ 'total' ] < 1 ) && $countRef < count ( $ref ));
$quorum -- ;
} while (( $result [ 'total' ] < 1 ) && $quorum > 0 );
} elseif ( in_array ( 'R' , $sequances )) {
$qv = count ( explode ( ' ' , trim ( $this -> formR [ 'Voie' ])));
$quorumVille = $qv ;
do {
$this -> constructQuerySequance ( $sequence [ $link [ $valeur ][ 'id' ][ $i ]], array ( false , false ), null );
$result = $this -> sphinx -> Query ( $this -> RequestAdress ( $sequence [ $link [ $valeur ][ 'id' ][ $i ]], array ( 'R' , $qv )), $this -> index );
$qv -- ;
} while ( $result [ 'total' ] < 1 and $qv > 0 );
} else {
$this -> constructQuerySequance ( $sequence [ $link [ $valeur ][ 'id' ][ $i ]], array ( false , false ), null );
$result = $this -> sphinx -> Query ( $this -> RequestAdress ( $sequence [ $link [ $valeur ][ 'id' ][ $i ]]), $this -> index );
}
$i ++ ;
} while (( $result [ 'total' ] < 1 ) && $i < count ( $link [ $valeur ][ 'id' ]));
break ;
case 'dir' :
$request = $this -> constructQuerySequance ( null , null , null , null );
$result = $this -> sphinx -> Query ( $request , $this -> index );
break ;
case 'act' :
$quorum = count ( explode ( ' ' , $this -> formR [ 'actNomRs' ]));
while ( $result [ 'total' ] == 0 and $quorum != 0 ) {
$request = $this -> constructQuerySequance ( null , $quorum -- , false );
$result = $this -> sphinx -> Query ( $request , $this -> index );
}
break ;
}
return ( $result );
2011-11-08 15:29:30 +00:00
}
public function HistoSearch ()
{
if ( ! empty ( $this -> formR [ 'annee1' ]))
$this -> sphinx -> setFilter ( 'annee1' , array ( $this -> formR [ 'annee1' ]));
2011-12-08 15:04:02 +00:00
$resSphinx = $this -> sphinx -> Query ( $this -> formR [ 'recherche' ], $this -> index );
2011-11-08 15:29:30 +00:00
return ( $this -> getResponse ( $resSphinx ));
}
2011-12-08 15:04:02 +00:00
2011-11-08 15:29:30 +00:00
public function formatRaisonSociale ( $rs , $double = false )
{
2011-12-08 15:04:02 +00:00
$words = new Words ();
$request = '' ;
$wordformRS = $words -> wordformRS ;
$array = explode ( ' ' , $rs );
2011-11-08 15:29:30 +00:00
2011-12-08 15:04:02 +00:00
if ( ! empty ( $this -> formR [ 'raisonSociale' ]))
{
foreach ( $array as $item )
{
2011-11-08 15:29:30 +00:00
$item = str_replace ( '\'' , ' ' , $item );
2011-12-08 15:04:02 +00:00
if (( strlen ( $item ) > ConfigurationEnt :: $app_maxSizeWord and ! in_array ( strtoupper ( $item ), $wordformRS ) and $this -> index == 'ent' ) or strlen ( $item ) > ConfigurationEnt :: $app_maxSizeWord and count ( $array ) == 1 ) {
2011-11-08 15:29:30 +00:00
if ( $double )
$request .= preg_replace ( '/(?:([^*])\1)\1*/' , '$1' , $item ) . ' ' ;
else
$request .= $item . ' ' ;
} else {
$request .= $item . ' ' ;
}
}
2011-12-08 15:04:02 +00:00
$requets = mb_strtoupper ( strtr ( str_replace ( " ' " , ' ' , $this -> formR [ 'raisonSociale' ]), 'ÉÈÊË' , 'EEEEE' ), 'UTF-8' );
return ( $requets );
2011-11-08 15:29:30 +00:00
}
}
public function formatCP ( $cp )
{
$matches = '' ;
$arrayChamp = explode ( ' ' , trim ( $cp ));
$str = false ;
for ( $i = 0 ; $i < count ( $arrayChamp ); $i ++ )
{
if ( preg_match ( '/^[0-9]{1,}$/' , $cp , $matches ))
{
if ( strlen ( $matches [ 0 ]) == 1 and $matches [ 0 ] < 10 ) {
$matches [ 0 ] = '0' . $matches [ 0 ];
}
$size = strlen ( $matches [ 0 ]);
2011-12-08 15:04:02 +00:00
switch ( $this -> index ) {
case 'ent' :
if ( substr ( $matches [ 0 ], 0 , 2 ) > 95 ) {
$this -> sphinx -> setFilter ( 'adr_dep' , array (( int ) substr ( $matches [ 0 ], 0 , 3 )));
} else if ( substr ( $matches [ 0 ], 0 , 2 ) == 20 ) {
$this -> sphinx -> setFilter ( 'adr_dep' , array ( 200 ));
} else {
$this -> sphinx -> setFilter ( 'adr_dep' , array (( int )( substr ( $cp , 0 , 2 ))));
}
if ( $size == 5 ) {
$this -> sphinx -> setFilter ( 'adr_cp' , array ( intval ( $matches [ 0 ])));
}
break ;
case 'dir' :
if ( substr ( $matches [ 0 ], 0 , 2 ) > 95 ) {
$this -> sphinx -> setFilter ( 'adr_dep' , array (( int ) substr ( $matches [ 0 ], 0 , 3 )));
} else if ( substr ( $matches [ 0 ], 0 , 2 ) == 20 ) {
$this -> sphinx -> setFilter ( 'adr_dep' , array ( 200 ));
} else {
$this -> sphinx -> setFilter ( 'adr_dep' , array (( int )( substr ( $cp , 0 , 2 ))));
}
if ( $size == 5 ) {
$this -> sphinx -> setFilter ( 'adr_cp' , array ( intval ( $matches [ 0 ])));
}
break ;
case 'act' :
if ( substr ( $matches [ 0 ], 0 , 2 ) > 95 ) {
$this -> sphinx -> setFilter ( 'adr_dep' , array (( int ) substr ( $matches [ 0 ], 0 , 3 )));
} else if ( substr ( $matches [ 0 ], 0 , 2 ) == 20 ) {
$this -> sphinx -> setFilter ( 'adr_dep' , array ( 200 ));
} else {
$this -> sphinx -> setFilter ( 'adr_dep' , array (( int )( substr ( $cp , 0 , 2 ))));
}
if ( $size == 5 ) {
$this -> sphinx -> setFilter ( 'adr_cp' , array ( intval ( $matches [ 0 ])));
}
break ;
case 'ciblage' :
break ;
default :
2011-11-08 15:29:30 +00:00
}
}
2011-12-08 15:04:02 +00:00
else {
switch ( $this -> index ) {
case 'ent' :
$str .= $arrayChamp [ $i ];
break ;
case 'dir' :
$str .= ' @naissance_lieu "' . $arrayChamp [ $i ] . '"' ;
break ;
case 'act' :
$str .= $arrayChamp [ $i ];
break ;
case 'ciblage' :
break ;
}
}
2011-11-08 15:29:30 +00:00
}
return ( $str );
}
public function FiltreDateDeNaissance ()
{
if ( ! empty ( $this -> formR [ 'dirDateNaissMM' ])) {
if ( $this -> formR [ 'dirDateNaissMM' ] > 0 and $this -> formR [ 'dirDateNaissMM' ] < 12 ) {
if (( $this -> formR [ 'dirDateNaissMM' ] % 2 ) != 0 )
{
if ( $this -> formR [ 'dirDateNaissJJ' ] > 0 and $this -> formR [ 'dirDateNaissJJ' ] < 31 ) {
$this -> sphinx -> setFilter ( 'naiss_jour' , array ( $this -> formR [ dirDateNaissJJ ]));
}
} else {
if ( $this -> formR [ 'dirDateNaissJJ' ] > 0 and $this -> formR [ 'dirDateNaissJJ' ] < 29 ) {
$this -> sphinx -> setFilter ( 'naiss_jour' , array ( $this -> formR [ dirDateNaissJJ ]));
}
}
}
} else {
if ( ! empty ( $this -> formR [ 'dirDateNaissJJ' ])) {
$this -> sphinx -> setFilter ( 'naiss_jour' , array ( $this -> formR [ dirDateNaissJJ ]));
}
}
if ( $this -> formR [ 'dirDateNaissAAAA' ] > 0 and $this -> formR [ 'dirDateNaissAAAA' ] < date ( 'Y' )) {
$this -> sphinx -> setFilter ( 'naiss_annee' , array ( $this -> formR [ dirDateNaissAAAA ]));
}
}
public function removeSmallWord ( $rs )
{
2011-12-08 15:04:02 +00:00
$words = new Words ();
$wordformRS = $words -> wordformRS ;
2011-11-08 15:29:30 +00:00
$array = explode ( ' ' , $rs );
2011-12-08 15:04:02 +00:00
if ( count ( $array ) > 1 ) {
2011-11-08 15:29:30 +00:00
foreach ( $array as $item ) {
if ( strlen ( $item ) > 1 and ! in_array ( strtoupper ( $item ), $wordformRS )) {
$request .= $item . ' ' ;
} else if ( strlen ( $item ) == 1 ) {
$this -> acronyme .= $item ;
}
}
}
return (( empty ( $request )) ? $rs : $request );
}
public function formatAdress ( $adress )
{
2011-12-08 15:04:02 +00:00
$words = new Words ();
$adrRef = $words -> adrRef ;
2011-11-08 15:29:30 +00:00
$adr = explode ( ' ' , $adress );
foreach ( $adr as $item ) {
2011-12-08 15:04:02 +00:00
if ( ! empty ( $adrRef )) {
if ( ! in_array ( $item , $adrRef )) {
$request .= $item . ' ' ;
}
}
2011-11-08 15:29:30 +00:00
}
return ( $request );
}
public function countQorum ()
{
$i = 0 ;
$val = explode ( ' ' , $this -> formR [ 'raisonSociale' ]);
foreach ( $val as $item ) {
if ( empty ( $item ))
unset ( $val [ $i ]);
$i ++ ;
}
return ( count ( $val ));
}
public function countQorumR ()
{
$i = 0 ;
$val = explode ( ' ' , $this -> formR [ 'Voie' ]);
foreach ( $val as $item ) {
if ( empty ( $item ))
unset ( $val [ $i ]);
$i ++ ;
}
return ( count ( $val ));
}
public function detectedSequance ()
{
$sequance = " " ;
foreach ( $this -> formR as $name => $form ) {
if ( $name != 'SPH_MATCH' and ! empty ( $this -> formR [ $name ])) {
2011-12-08 15:04:02 +00:00
$sequance .= '.' . ConfigurationEnt :: $app_form [ $name ];
2011-11-08 15:29:30 +00:00
$values .= $name . ', ' ;
}
}
2011-12-08 15:04:02 +00:00
$sequance = substr ( $sequance , 1 );
if ( $sequance == 'S.S' ) { return 'S' ;}
2011-11-08 15:29:30 +00:00
2011-12-08 15:04:02 +00:00
return ( $sequance );
}
protected function RequestAdress ( $sequances , $quorum = false )
2011-11-08 15:29:30 +00:00
{
2011-12-08 15:04:02 +00:00
$request = '' ;
$adresse = '@adresse "' ;
$ville = '@ville "' ;
$naf = '@ape_etab "' ;
if ( ! is_array ( $sequances )) $sequances = explode ( '.' , $sequances );
if ( in_array ( 'V' , $sequances )) { $request .= $ville . str_replace ( '-' , ' ' , $this -> formR [ 'Ville' ]) . '" ' . (( $quorum and $quorum [ 0 ] == 'V' ) ? '/' . $quorum [ 1 ] : null );}
if ( in_array ( 'F' , $sequances )) { $request .= $naf . $this -> formR [ 'naf' ] . '"' ;}
if ( in_array ( 'R' , $sequances )) { $request .= $adresse . $this -> formR [ 'Voie' ] . '" ' . (( $quorum and $quorum [ 0 ] == 'R' ) ? '/' . $quorum [ 1 ] : null );}
return ( $request );
}
protected function constructRaisonSocialeRequest ( $sequances , $quorum , $seq )
{
$request = '@nom ' ;
$diff = explode ( '.' , $sequances );
switch ( $seq )
{
case 'quorum' :
$this -> sphinx -> AddQuery ( $request . ' "' . $this -> formR [ 'raisonSociale' ] . '" ~10 ' . (( $quorum [ 0 ] >= 1 ) ? '/' . $quorum [ 0 ] : ' ' . $this -> RequestAdress ( $diff )));
return ( true );
case 'space' :
$req = $request . '"' . str_replace ( ' ' , '' , $this -> formatRaisonSociale ( $this -> formR [ 'raisonSociale' ])) . '" ' . $this -> RequestAdress ( $diff ) . ' | ' ;
$req .= $request . '"' . str_replace ( ' ' , '' , $this -> formatRaisonSociale ( $this -> formR [ 'raisonSociale' ], true )) . '" ' . $this -> RequestAdress ( $diff );
$this -> sphinx -> AddQuery ( $req );
return ( true );
case 'double' :
if ( strlen ( $this -> formR [ $name ]) > 5 ) {
$req = $request . '"' . $this -> formatRaisonSociale ( $this -> formR [ 'raisonSociale' ], true ) . '" ' . $this -> RequestAdress ( $diff ) . ' | ' ;
$req .= $request . '"' . $this -> formatRaisonSociale ( $this -> formR [ 'raisonSociale' ], true ) . '" ' . (( $quorum [ 0 ] >= 1 ) ? '/' . $quorum [ 0 ] : '' ) . ' ' . $this -> RequestAdress ( $diff );
$this -> sphinx -> AddQuery ( $req );
return ( true );
}
return ( true );
case 'points' :
$this -> sphinx -> AddQuery ( $request . '"' . str_replace ( '.' , '' , $this -> formR [ 'raisonSociale' ]) . '" ' . $this -> RequestAdress ( $diff ));
return ( true );
case 'acrony' :
if ( ! empty ( $this -> acronyme ) and strlen ( $this -> acronyme ) > 2 ) {
$this -> sphinx -> AddQuery ( $request . '"' . $this -> acronyme . ' ' . $this -> formatRaisonSociale ( $this -> formR [ 'raisonSociale' ]) . '"/' . $quorum [ 0 ] . ' ' . $this -> RequestAdress ( $diff ));
}
return ( true );
case 'split' :
for ( $count = 0 ; $count < 2 ; $count ++ )
{
$rs = (( $i == 0 ) ? trim ( $this -> formR [ 'raisonSociale' ]) : str_replace ( '.' , '' , trim ( $this -> formR [ 'raisonSociale' ])));
$precedent = '' ;
$request .= '(' ;
if ( count ( explode ( ' ' , $rs )) == 1 ) {
for ( $i = 0 ; $i < strlen ( $rs ); $i ++ ) {
$precedent .= $rs [ $i ];
$request .= ' "' . $precedent . ' ' . substr ( $rs , $i + 1 ) . '"' . (( $i + 1 != strlen ( $rs )) ? ' ' : '' );
if ( $i + 1 < strlen ( $rs ))
$request .= ' | ' ;
}
}
$request .= ( $count == 0 ) ? ') |' : ')' ;
$this -> sphinx -> AddQuery ( $request . ' ' . $this -> RequestAdress ( $diff ));
}
return ( true );
default :
$this -> sphinx -> AddQuery ( $request . '"' . $this -> formatRaisonSociale ( $this -> formR [ 'raisonSociale' ]) . '" ' . $this -> RequestAdress ( $diff ));
return ( true );
}
return ( false );
}
protected function constructQuerySequance ( $sequances , $quorum , $seq )
{
$request = " " ;
$this -> sphinx -> ResetFilters ();
switch ( $this -> index ) {
case 'ent' :
$diff = explode ( '.' , $sequances );
foreach ( ConfigurationEnt :: $app_form as $name => $crit )
{
if ( in_array ( $crit , $diff )) {
switch ( $name )
{
case 'cpVille' :
$str = $this -> formatCP ( $this -> formR [ $name ]);
if ( $str != false ) { $this -> sphinx -> AddQuery ( $adresse . $str );}
break ;
case 'siren' :
if ( strlen ( $this -> formR [ $name ]) == 14 ) {
$this -> sphinx -> setFilter ( 'siren' , array ( substr ( $this -> formR [ $name ], 0 , 9 )));
$this -> sphinx -> setfilter ( 'nic' , array ( substr ( $this -> formR [ $name ], 9 )));
} else if ( strlen ( $this -> fomrR [ $name ]) == 9 ) {
$this -> sphinx -> setFilter ( 'siren' , array ( $this -> formR [ $name ]));
}
break ;
case 'numeroVoie' :
$this -> sphinx -> setFilter ( 'adr_num' , array ( $this -> formR [ $name ]));
break ;
default :
$request .= $this -> formR [ $name ] . ' ' ;
}
}
}
if ( $adresse != '@adresse "' ) { $request = $request . ' ' . $adresse . '"' . (( $quorum [ 1 ] != false ) ? '/' . $quorum [ 1 ] : '' );}
if ( $ville != '@ville "' ) $request = $request . ' ' . $ville . '"' ;
if ( $naf != '@ape_etab "' ) $request .= ' ' . $naf . '"' ;
break ;
case 'dir' :
foreach ( $this -> formR as $name => $valeur ) {
switch ( $name ) {
case 'nom' :
if ( ! empty ( $this -> formR [ $name ]))
$request .= '@nom "' . $this -> formR [ $name ] . '" ' ;
break ;
case 'prenom' :
if ( ! empty ( $this -> formR [ $name ]))
$request .= '@prenom "' . $this -> formR [ $name ] . '" ' ;
break ;
case 'dirDateNaissJJ' :
if ( ! empty ( $this -> formR [ $name ]))
$this -> sphinx -> setFilter ( 'naiss_jour' , array ( intval ( $this -> formR [ $name ])));
break ;
case 'dirDateNaissMM' :
if ( ! empty ( $this -> formR [ $name ]))
$this -> sphinx -> setFilter ( 'naiss_mois' , array ( intval ( $this -> formR [ $name ])));
break ;
case 'dirDateNaissAAAA' :
if ( ! empty ( $this -> formR [ $name ]))
$this -> sphinx -> setFilter ( 'naiss_annee' , array ( intval ( $this -> formR [ $name ])));
break ;
case 'cpVille' :
if ( ! empty ( $this -> formR [ $name ]))
$this -> formatCP ( $this -> formR [ $name ]);
break ;
case 'Ville' :
if ( ! empty ( $this -> formR [ $name ]))
$request .= ' @ville "' . $this -> formR [ $name ] . '"' ;
break ;
}
}
break ;
case 'act' :
foreach ( $this -> formR as $name => $valeur ) {
switch ( $name ) {
case 'actNomRs' :
if ( ! empty ( $this -> formR [ $name ])) {
$request .= '@RaisonSociale "' . strtolower ( $this -> formR [ $name ]) . '"' ;
if ( isset ( $quorum )) {
$request .= ' /' . $quorum ;
}
}
break ;
case 'cpVille' :
if ( ! empty ( $this -> formR [ $name ]))
$this -> formatCP ( $this -> formR [ $name ]);
break ;
case 'pays' :
if ( ! empty ( $this -> formR [ $name ]))
$request .= '@Pays "' . $this -> formR [ $name ] . '"' ;
break ;
case 'pctMin' :
case 'pctMax' :
if ( ! empty ( $this -> formR [ 'pcMin' ]) and ( ! empty ( $this -> formR [ 'pcMax' ]))) {
$this -> sphinx -> setFilterRange ( 'pcMin' , intval ( $this -> formR [ 'pcMin' ]), intval ( $this -> formR [ 'pcMax' ]));
} else if ( ! empty ( $this -> formR [ 'pcMax' ]) and empty ( $this -> formR [ 'pcMin' ])) {
$this -> sphinx -> setFilterRange ( 'pcMin' , 0 , intval ( $this -> formR [ 'pcMax' ]));
} else if ( ! empty ( $this -> formR [ 'pcMin' ]) and empty ( $this -> formR [ 'pcMax' ])) {
$this -> sphinx -> setFilterRange ( 'pcMin' , intval ( $this -> formR [ 'pcMin' ]), 100 );
}
break ;
}
}
break ;
case 'ciblage' :
break ;
default :
}
2011-11-08 15:29:30 +00:00
return ( $request );
}
protected function levenshteinCrit ( $crit )
{
$pertinance = 0 ;
$weight = array ( 'I' => 10 , 'S' => 9 , 'D' => 6 , 'L' => 4 , 'V' => 5 , 'N' => 2 , 'R' => 3 );
$crit = explode ( '.' , $crit );
for ( $i = 0 ; $i < count ( $crit ); $i ++ ) {
$pertinance += $weight [ $crit [ $i ]];
}
return ( $pertinance );
}
protected function checkParamsRS ( $rs )
{
if ( strlen ( $rs ) > 3 )
return ( false );
else
return ( true );
}
protected function getPertinence ( $formR , $mySql )
{
$formR = strtoupper ( $formR );
$mySql = strtoupper ( $mySql );
$array = explode ( ' ' , $mySql );
$array2 = explode ( ' ' , $formR );
for ( $i = 0 ; $i < count ( $array2 ); $i ++ ) {
if ( in_array ( $array2 [ $i ], $array )) {
$size += levenshtein ( $formR , $mySql );
}
}
return (( $size ) ? $size : 100 );
}
public function getResponse ( $resSphinx )
{
$i = 0 ;
$response = array ();
switch ( $this -> index ) {
case 'ent' :
2011-12-08 15:04:02 +00:00
$sql = ' SELECT id , rang , raisonSociale , CONCAT ( siren , nic ) AS siret , rang , siren , nic , siege , raisonSociale ,
2011-11-16 14:57:23 +00:00
sigle , enseigne , ( siren > 200 ) AS sirenValide , adr_num , adr_typeVoie , adr_libVoie , adr_comp , adr_cp ,
2011-12-08 15:04:02 +00:00
adr_ville , tel , fax , cj , actif , ape_etab , ape_entrep , identite_pre FROM etablissements WHERE id IN ( ' ;
2011-11-08 15:29:30 +00:00
foreach ( $resSphinx [ 'matches' ] as $elements ) {
$sql .= $elements [ 'id' ];
if ( $i + 1 < count ( $resSphinx [ 'matches' ]))
$sql .= ', ' ;
$i ++ ;
}
2011-11-16 14:57:23 +00:00
$sql .= " ) ORDER BY sirenValide DESC, rang DESC, actif DESC, siege DESC " ;
2011-11-08 15:29:30 +00:00
break ;
case 'dir' :
2011-12-08 15:04:02 +00:00
$sql = ' SELECT d . id as iddirigeant , e . id , e . raisonSociale , CONCAT ( e . siren , e . nic ) AS siret , e . siren , e . nic , e . siege , e . raisonSociale ,
2011-11-08 15:29:30 +00:00
e . sigle , e . enseigne , e . adr_num , e . adr_typeVoie , e . adr_libVoie , e . adr_comp , e . adr_cp , e . adr_ville , e . tel ,
2011-12-08 15:04:02 +00:00
e . fax , e . cj , e . actif , e . ape_etab , ape_entrep , d . nom , d . prenom , l . libelle AS fonction_lib from dirigeants d , etablissements e , bodacc_fonctions l WHERE d . id IN ( ' ;
2011-11-08 15:29:30 +00:00
foreach ( $resSphinx [ 'matches' ] as $elements ) {
$sql .= $elements [ 'id' ];
if ( $i + 1 < count ( $resSphinx [ 'matches' ]))
$sql .= ', ' ;
$i ++ ;
}
$sql .= ' ) AND d.siren=e.siren and d.fonction_code=l.codeFct AND e.siege=1 GROUP BY d.siren, d.id ORDER BY e.rang DESC, e.actif DESC, e.siege DESC, e.id ASC' ;
break ;
case 'act' :
$sql = 'SELECT DISTINCT e.siren, l.id AS lienId, l.actif AS lienActif, l.source, l.Pmin, l.PpPm, l.id2, ' .
2011-12-08 15:04:02 +00:00
'l.Siren2, l.RaisonSociale as nomRS, l.Pays, ' .
2011-11-08 15:29:30 +00:00
'IF(l.dateUpdate>IF(l.dateInsert>l.dateLien,l.dateInsert,l.dateLien),l.dateUpdate,IF(l.dateInsert>l.dateLien,l.dateInsert,l.dateLien)) AS dateLien, ' .
'e.id, CONCAT(siren,nic) AS siret, siren, nic, siege, e.raisonSociale, sigle, ' .
'enseigne, adr_num, adr_typeVoie, adr_libVoie, adr_comp, adr_cp, adr_ville, ' .
'tel, fax, cj, e.actif, ape_etab, ape_entrep, e.rang ' .
'FROM liens l, etablissements e ' .
'WHERE l.id IN (' ;
foreach ( $resSphinx [ 'matches' ] as $elements ) {
$sql .= $elements [ 'id' ];
if ( $i + 1 < count ( $resSphinx [ 'matches' ]))
$sql .= ', ' ;
$i ++ ;
}
$sql .= " ) AND l.Siren1=e.siren AND siege=1 AND e.actif=1 ORDER BY e.rang DESC " ;
break ;
case 'Histo' :
$sql = 'SELECT Histo as Loc, id, nomFichier, annee1, bod, texte FROM bodacc_cor WHERE id IN ( ' ;
foreach ( $resSphinx [ 'matches' ] as $elements ) {
$sql .= $elements [ 'id' ];
if ( $i + 1 < count ( $resSphinx [ 'matches' ]))
$sql .= ', ' ;
$i ++ ;
}
$sql .= ')' ;
break ;
}
2011-11-16 14:57:23 +00:00
$i = 0 ;
2011-11-08 15:29:30 +00:00
$db = $this -> databaseJO ();
$result = $db -> query ( $sql );
while ( $row = mysqli_fetch_assoc ( $result )) {
if ( $this -> index != 'Histo' ) {
2011-12-08 15:04:02 +00:00
$response [ 'reponses' ][ $i ][ 'id' ] = $row [ 'id' ];
$response [ 'reponses' ][ $i ][ 'Siret' ] = $row [ 'siret' ];
$response [ 'reponses' ][ $i ][ 'Siren' ] = $row [ 'siren' ];
$response [ 'reponses' ][ $i ][ 'Nic' ] = $row [ 'nic' ];
$response [ 'reponses' ][ $i ][ 'Siege' ] = $row [ 'siege' ];
$response [ 'reponses' ][ $i ][ 'Nom' ] = $row [ 'raisonSociale' ];
$response [ 'reponses' ][ $i ][ 'Nom2' ] = '' ;
$response [ 'reponses' ][ $i ][ 'Adresse' ] = $row [ 'adr_num' ] . ' ' . $row [ 'adr_typeVoie' ] . ' ' . $row [ 'adr_libVoie' ];
$response [ 'reponses' ][ $i ][ 'Adresse2' ] = $row [ 'adr_comp' ];
$response [ 'reponses' ][ $i ][ 'CP' ] = $row [ 'adr_cp' ];
$response [ 'reponses' ][ $i ][ 'Ville' ] = $row [ 'adr_ville' ];
$response [ 'reponses' ][ $i ][ 'Tel' ] = $row [ 'tel' ];
$response [ 'reponses' ][ $i ][ 'Fax' ] = $row [ 'fax' ];
$response [ 'reponses' ][ $i ][ 'FJ' ] = $row [ 'cj' ];
$response [ 'reponses' ][ $i ][ 'Actif' ] = $row [ 'actif' ];
$response [ 'reponses' ][ $i ][ 'NafEtab' ] = $row [ 'ape_etab' ];
$response [ 'reponses' ][ $i ][ 'NafEnt' ] = $row [ 'ape_entrep' ];
2011-11-08 15:29:30 +00:00
}
switch ( $this -> index ) {
case 'ent' :
$pertinence = $this -> getPertinence ( $this -> formR [ 'raisonSociale' ], $row [ 'raisonSociale' ]);
$response [ 'reponses' ][ $i ][ 'Pertinence' ] = $pertinence ;
2011-11-17 09:46:27 +00:00
$response [ 'reponses' ][ $i ][ 'rang' ] = $row [ 'rang' ];
2011-12-08 15:04:02 +00:00
if ( ConfigurationEnt :: $debug )
$response [ 'reponses' ][ $i ][ 'RequeteIndexation' ] = array ( 'Raison Sociale' => str_replace ( '\'' , ' ' , $row [ 'raisonSociale' ]),
'Enseigne' => str_replace ( '\'' , ' ' , $row [ 'enseigne' ]),
'Sigle' => str_replace ( '\'' , ' ' , $row [ 'sigle' ]),
'Identite Pre' => (( array_count_values ( explode ( ' ' , str_replace ( '\'' , ' ' , $row [ 'identite_pre' ]))) > 1 ) ? explode ( '-' , $row [ 'identite_pre' ]) : explode ( ' ' , str_replace ( '\'' , ' ' , $row [ 'identite_pre' ]))),
'Formulaire' => str_replace ( '\'' , ' ' , mb_strtoupper ( strtr ( $this -> formR [ 'raisonSociale' ], 'ÉÈÊË' , 'EEEEE' ), 'UTF-8' ))
);
2011-11-08 15:29:30 +00:00
break ;
case 'act' :
2011-12-08 15:04:02 +00:00
$response [ 'reponses' ][ $i ][ 'ActNomRs' ] = $row [ 'nomRS' ];
$response [ 'reponses' ][ $i ][ 'ActPays' ] = $row [ 'Pays' ];
$response [ 'reponses' ][ $i ][ 'ActDateLien' ] = $row [ 'dateLien' ];
$response [ 'reponses' ][ $i ][ 'ActActif' ] = $row [ 'actif' ];
$response [ 'reponses' ][ $i ][ 'ActPmin' ] = $row [ 'Pmin' ];
if ( ConfigurationAct :: $debug )
$response [ 'reponses' ][ $i ][ 'RequeteIndexation' ] = array ( 'Raison Sociale' => str_replace ( '\'' , ' ' , strtoupper ( $row [ 'nomRS' ])),
'Formulaire' => str_replace ( '\'' , ' ' , strtoupper ( $this -> formR [ 'actNomRs' ])),
);
2011-11-08 15:29:30 +00:00
break ;
case 'dir' :
2011-12-08 15:04:02 +00:00
$response [ 'reponses' ][ $i ][ 'DirRs' ] = '' ;
$response [ 'reponses' ][ $i ][ 'DirNom' ] = $row [ 'nom' ];
$response [ 'reponses' ][ $i ][ 'DirPrenom' ] = $row [ 'prenom' ];
$response [ 'reponses' ][ $i ][ 'DirNomUsage' ] = '' ;
$response [ 'reponses' ][ $i ][ 'DirDateEffet' ] = '' ;
$response [ 'reponses' ][ $i ][ 'DirFonction' ] = $row [ 'fonction_lib' ];
$response [ 'reponses' ][ $i ][ 'DirDepart' ] = '' ;
$response [ 'reponses' ][ $i ][ 'iddirigeant' ] = $row [ 'iddirigeant' ];
2011-11-08 15:29:30 +00:00
break ;
case 'Histo' :
2011-12-08 15:04:02 +00:00
$response [ 'reponses' ][ $i ][ 'Localisation' ] = $row [ 'Loc' ];
$response [ 'reponses' ][ $i ][ 'Fichier' ] = $row [ 'nomFichier' ];
$response [ 'reponses' ][ $i ][ 'Annee' ] = $row [ 'annee' ];
$response [ 'reponses' ][ $i ][ 'Code' ] = $row [ 'bod' ];
$response [ 'reponses' ][ $i ][ 'Texte' ] = $row [ 'texte' ];
2011-11-08 15:29:30 +00:00
2011-12-08 15:04:02 +00:00
$response [ 'reponses' ][ $i ][ 'id' ] = $row [ 'id' ];
2011-11-08 15:29:30 +00:00
$response [ 'reponses' ][ $i ][ 'Pertinence' ] = $resSphinx [ $row [ 'id' ]][ 'weight' ];
break ;
}
$i ++ ;
}
2011-12-08 15:04:02 +00:00
$response [ 'criteres' ] = $this -> criteresLetters ;
$response [ 'nbReponsesTotal' ] = $resSphinx [ 'total' ];
$response [ 'duree' ] = $this -> limits [ 'total_time' ];
$response [ 'nbReponses' ] = count ( $response [ 'reponses' ]);
2011-11-08 15:29:30 +00:00
2011-12-08 15:04:02 +00:00
return ( $response );
2011-11-08 15:29:30 +00:00
}
public function setForm ( $form ) {
$this -> formR = $form ;
}
public function setSphinx ( $sphinx ) {
$this -> sphinx = $sphinx ;
}
2011-11-16 14:57:23 +00:00
public function execute ( $sphinx ) {
$this -> sphinx = $sphinx ;
2011-11-08 15:29:30 +00:00
return $this -> search ();
}
public function setTime ( $time ) {
2011-12-08 15:04:02 +00:00
if ( $this -> limits [ 'total_time' ])
$this -> limits [ 'total_time' ] += $time ;
2011-11-08 15:29:30 +00:00
}
public function setDeb ( $deb ) {
$this -> deb = $deb ;
}
public function setIndex ( $index ) {
$this -> index = $index ;
}
2011-12-08 15:04:02 +00:00
public function getSequances () {
return ( $this -> sequancesArray );
}
public function setNumberResults ( $NumberResults ) {
$this -> NumberResults = $NumberResults ;
}
public function setMaxResults ( $MaxResults ) {
$this -> MaxResults = $MaxResults ;
}
2011-11-08 15:29:30 +00:00
/***************************************************************************************************************/
}
?>