14,6 → 14,11 |
* Carte = Type de carte. Valeurs possible : defaut, |
* Utilisateur = identifiant (= courriel) de l'utilisateur ou * pour tous les utilisateurs. |
* Projet = mot-clé du projet |
* Plusieurs mots-clés peuvent être spécifiés: |
* machin ET bidule ET chose => observations ayant tous les mots-clés (intersection) |
* machin OU bildule OU chose => observations ayant au moins un des mots-clés (union) |
* ATTENTION |
* machin ET bidule OU chose donne un résultat indéterminé pour l'instant |
* |
* @author Jean-Pascal MILCENT <jpm@clapas.org> |
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt> |
1005,7 → 1010,6 |
|
private function construireWhereProjet() { |
$sql = ''; |
// Récupération des coordonnées depuis l'id station |
extract($this->parametres); |
$projet_sql = isset($projet) ? $this->getSqlWhereProjet($projet) : null; |
if (!$this->etreNull($projet_sql)) { |
1016,12 → 1020,39 |
|
/** |
* Traitement de $projet pour construction du filtre dans la requête |
* |
* projet1 ET projet2 ET projet3 => intersection |
* projet1 OU projet2 OU projet3 => union |
* projet1 ET projet2 OU projet3 => ATTENTION indéfini |
*/ |
private function getSqlWhereProjet($projet) { |
$sql = null; |
if (isset($projet) && !$this->etreNull($projet)) { |
if (strpos($projet, ' ET ')) { |
// intersection |
$projets = explode(' ET ', $projet); |
$clauses = array(); |
foreach ($projets as $proj) { |
if ($proj != '') { |
$clauses[] = 'co.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$proj.'%'); |
} |
} |
$sql = implode($clauses, ' AND '); |
} else if (strpos($projet, ' OU ')) { |
// union |
$projets = explode(' OU ', $projet); |
$clauses = array(); |
foreach ($projets as $proj) { |
if ($proj != '') { |
$clauses[] = 'co.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$proj.'%'); |
} |
} |
$sql = implode($clauses, ' OR '); |
} else { |
// simple |
$sql = 'co.mots_cles_texte LIKE '.Cel::db()->proteger('%'.$projet.'%'); |
} |
} |
return $sql; |
} |
|