FrameBeurk File
Fmbk/Module/Kom1/Site/Vue/rechercheSite.php
<?php //FrameBeurk V0.65 Copyright ToolOscope 2016. Licence CeCILL-C.
require_once(INSTALL_PATH . '/Module/Kom1/helpersKom1.php');
// la recherche par mot-clés utilise les index full-text de Mysql. Se rapporter à la doc pour les différents paramètres de gestion. Pour MyIsam :
// - ft_min_word_len : Longueur mini des mots à indexer
// - ft_max_word_len : Longueur maxi des mots à indexer
// - ft_stopword_file : Liste des mots à ne pas indexer
// de plus, la recherche ne semble pas fonctionner quand la table est toute petite (...3 lignes ?)
//Récupération des variables et valeurs par défaut : déjà fait par le controleurClef
$TRANSAC['Page']['Titre'] = Beurk_traduit('Recherche')
. (($Perimetre != '') ? ' ' . Beurk_Request2HTML($Perimetre) : '')
. (($MotCle != '') ? Beurk_traduit(' contenant "%s"', 'Kom1', Beurk_Request2HTML($MotCle)) : '')
. (($DateCreation != '') ? Beurk_traduit(' du %s', 'Kom1', Beurk_Request2HTML($DateCreation)) : '')
. (($Createur != '') ? Beurk_traduit(' par %s', 'Kom1', Beurk_Request2HTML($Createur)) : '');
echo '<h2 class="h_recherche">', $TRANSAC['Page']['Titre'], "</h2>\n";
// controles
if ($MotCle == '' && $Createur == '' && $DateCreation == '') // au moins 1 valeur saisie
Beurk_messageEtape('Aucune valeur saisie', true);
elseif (! isset($CONFIG['Controle']['Recherche'][$Perimetre]))
Beurk_messageEtape('Périmètre invalide', true);
elseif ($DateCreation != '' && (list($YYYY, $MM, $DD) = explode('-', $DateCreation)) && ! checkdate($MM, $DD ,$YYYY))
//echo "checkdate($MM,$DD ,$YYYY)";
Beurk_messageEtape('Date (YYYY-MM-DD) invalide', true);
else {
// transformation date en timeBeurk
if ($DateCreation != '') {
$TsCREMin = $YYYY . $MM . $DD . '000000000';
$TsCREMax = $YYYY . $MM . $DD . '235959999';
} else {
$TsCREMin = '';
$TsCREMax = '';
}
$nbresults = 0;
$PerimetreInclus = false;
$requete = '';
$directive = 'SQL_CALC_FOUND_ROWS';
// conception de la requete en fonction du périmètre
foreach($CONFIG['Controle']['Recherche'] as $EntVueRecherche => $paramRecherche) {
//entrée dans le périmètre
if ($EntVueRecherche == $Perimetre) {
$PerimetreInclus = true;
$niveauSelection = $paramRecherche['niveau'];
// sortie du périmètre à la prochaine ligne de même niveau ou inférieur
} elseif (($PerimetreInclus == true) && ($paramRecherche['niveau'] <= $niveauSelection))
$PerimetreInclus = false;
//ajout de la requete si périmètre inclus et ligne à prendre en compte
if (($PerimetreInclus == true) && ($paramRecherche['aInclure'])) {
$module = $CONFIG['Entite'][$EntVueRecherche]['Module'];
$messageAuto = Beurk_controleurAutorisation($paramRecherche['autorisation'],
array( 'ActMaj' => $ActVue,
'IdMaj' => $EntVueRecherche,
'preAuto' => true)); // preAuto=true inhibe les autos qui ont besoin d'un résultat (état jeton, controle somme...)
if ($messageAuto == '') {
include_once(INSTALL_PATH . '/Module/' . $module . '/' . $EntVueRecherche . '/modele' . $EntVueRecherche . '.php'); //chargement des fonctions DB
if ($requete != '') //gestion de la suite
$requete .= ' UNION ALL ';
$fonctionQuery = $paramRecherche['requete'];
$requete .= db_recomposeTabQuery($fonctionQuery($TsCREMin, $TsCREMax, Beurk_Request2DB($MotCle), Beurk_Request2DB($Createur)), $directive);
//pour la suite du périmètre
$directive = '';
} else
echo "\n <!-- Beurk_controleurAutorisation($module, ", $paramRecherche['autorisation'], ", $ActVue, $EntVueRecherche) = $messageAuto-->\n";
}
}
//controle de requete non vide
if ($requete == '')
Beurk_messageEtape('Périmètre de recherche invalide', true);
else {
//requete OK, à terminer
$requete .= ' ORDER BY score DESC, TsAction ASC';
$requete = Kom1_pagineRequete($requete);
echo "\n<!-- $requete -->\n";
$result2 = db_QUERY($requete);
$result1 = db_QUERY('SELECT FOUND_ROWS()');
//affichage du résultat
if (list($nbresults) = db_FETCH_ROW($result1)) {
// liste des pages de résultats
$tabAdresse = array('ActVue' => 'recherche', 'IdVue' => 'Site', 'Perimetre' => $Perimetre, 'MotCle' => $MotCle,
'DateCreation' => $DateCreation, 'Createur' => $Createur);
$pages = Kom1_listePages($nbresults, $NoPage, $tabAdresse);
echo $pages . '<div class="enbas"></div>' . "\n";
$sufxCss = 1;
while (list($entite, $IdEntite, $Item, $IdCreateur, $User, $TsCRE, $stat1, $stat2, $Donnees, $IdElementDe, $score) = db_FETCH_ROW($result2)) {
// affichage des résultats selon le type d'entité
$module = $CONFIG['Entite'][$entite]['Module'];
$TRANSAC[ $TRANSAC['Etape'] ]['Module'] = $module;
include_once(INSTALL_PATH . '/Module/' . $module . '/' . $entite . '/helpers' . $entite . '.php'); //chargement des fonctions
$FonctionAffiche = $CONFIG['Controle']['Recherche'][$entite]['affichage'];
echo $FonctionAffiche($sufxCss, $IdEntite, $Item, $IdCreateur, $User, $TsCRE, $stat1, $stat2, $Donnees, $IdElementDe, $score);
$sufxCss = 1 - $sufxCss;
}
// re-liste des pages de résultats
echo $pages . '<div class="enbas"></div>' . "\n";
}
db_FREE($result1);
db_FREE($result2);
if ($nbresults == 0)
$TRANSAC['Message']['Recherche'] = '<p Class="erreur">' . Beurk_traduit('Recherche infructueuse') . '</p>';
else
$TRANSAC['Message']['Recherche'] = '<p Class="bravo">' . Kom1_traduitQuantite('%d résultat%s', 'Kom1', $nbresults) . '</p>';
}
}