Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2059 → Rev 2060

/trunk/jrest/lib/GestionMotsClesChemin.php
24,20 → 24,9
//TODO: switch suivant mode
$this->mode = $mode;
list($this->table_liaison, $this->table_mots_cles) = self::getTablesMotsClesEtLiaison($mode);
list($this->table_liaison, $this->table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
}
public static function getTablesMotsClesEtLiaison($mode) {
if($mode == 'obs') {
$table_liaison = 'cel_mots_cles_obs_liaison';
$table_mots_cles = 'cel_arbre_mots_cles_obs';
} else {
$table_liaison = 'cel_mots_cles_images_liaison';
$table_mots_cles = 'cel_arbre_mots_cles_images';
}
return array($table_liaison, $table_mots_cles);
}
public function obtenirArbre($id_utilisateur, $chemin = "/") {
$requete = "SELECT * FROM ".$this->table_mots_cles." ".
"WHERE id_utilisateur = ".Cel::db()->proteger($id_utilisateur)." AND ".
241,6 → 230,8
public function renommerMotCle($id_mot_cle, $nouveau_nom) {
$nouveau_nom = self::simplifier($nouveau_nom);
$requete_ancien_chemin = 'SELECT chemin, id_utilisateur FROM '.$this->table_mots_cles.' '.
'WHERE id_mot_cle = '.Cel::db()->proteger($id_mot_cle);
$res_ancien_chemin = Cel::db()->requeter($requete_ancien_chemin.' -- '.__FILE__.':'.__LINE__);
328,7 → 319,7
$print = array();
// obtention des ids des éléments liés au mot clé ainsi qu'à ces enfants (afin de pouvoir
// régénérer les index texte de mots clés sur les éléments liés
// régénérer les index texte de mots clés sur les éléments liés)
$ids_a_delier = array();
foreach($ids_mot_cle_et_enfants as $id) {
$ids_a_delier[] = $id['id_mot_cle'];
354,7 → 345,8
$chemin = Cel::db()->requeter($selection_chemin.' -- '.__FILE__.':'.__LINE__);
$suppression = true;
// vérification pour empecher la suppression accidentelle de tout l'arbre, cas qui ne devrait arriver
// vérification pour empecher la suppression accidentelle de tout l'arbre,
// cas qui ne devrait jamais arriver normalement
if(!empty($chemin) && $chemin != "/") {
$chemin = $chemin[0]['chemin'];
$requete = "DELETE FROM ".$this->table_mots_cles." WHERE chemin LIKE ".
412,6 → 404,24
return $ids_elements_lies;
}
/*****
*
* Fonctions statiques utilitaires
* (Dans l'idéal toute la classe pourrait être statique car elle n'a
* pas d'état (mais il faudrait passer $mode à toutes les fonctions)
*
*/
public static function getTablesMotsClesEtLiaisons($mode) {
if($mode == 'obs') {
$table_liaison = 'cel_mots_cles_obs_liaison';
$table_mots_cles = 'cel_arbre_mots_cles_obs';
} else {
$table_liaison = 'cel_mots_cles_images_liaison';
$table_mots_cles = 'cel_arbre_mots_cles_images';
}
return array($table_liaison, $table_mots_cles);
}
public static function regenererIndexTexteMotCle($id_element_lie, $mode) {
$sous_requete_concat = '('.sprintf(GestionMotsClesChemin::obtenirTemplateRequeteMotsClesTexte($mode),
Cel::db()->proteger($id_element_lie)).')';
419,7 → 429,7
list($table, $champ_id) = self::getNomTablesEtChampsElementsLies($mode);
$requete = 'UPDATE '.$table.' SET mots_cles_texte = '.$sous_requete_concat.' '.
'WHERE '.$champ_id.' = '.Cel::db()->proteger($id_element_lie).' ';
 
return Cel::db()->executer($requete, __FILE__ , __LINE__);
}
433,8 → 443,8
return $tables;
}
public static function obtenirTemplateRequeteMotsClesMotsClesIds($mode) {
list($table_liaison, $table_mots_cles) = self::getTablesMotsClesEtLiaison($mode);
public static function obtenirTemplateRequeteMotsClesTexte($mode) {
list($table_liaison, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
// renvoie un template de requete pour selectionner la concatenation
// de mots clé pour un element donné (utilisable avec sprintf)
445,8 → 455,8
'AND cml.id_element_lie = %s ';
}
public static function obtenirTemplateRequeteMotsClesTexte($mode) {
list($table_liaison, $table_mots_cles) = self::getTablesMotsClesEtLiaison($mode);
public static function obtenirTemplateRequeteMotsClesIds($mode) {
list($table_liaison, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
// renvoie un template de recherche sur les ids de mots clés utilisables avec sprintf
return "SELECT id_element_lie ".
456,7 → 466,8
// Fonctions utilitaires
static public function comparerProfNoeuds($a, $b) {
// la profondeur d'un noeud est déterminée par le nombre de slashs
// qu'il contient (étant donné que ceux ci sont interdits dans le texte du mot clé
$nb_slashs_a = substr_count($a['chemin'], '/');
$nb_slashs_b = substr_count($a['chemin'], '/');
$cmp = 0;
481,12 → 492,22
}
// fonction de slugification du mot clé
// http://stackoverflow.com/questions/2955251/php-function-to-make-slug-url-string
static public function simplifier($text)
{
return trim(str_replace(array('\\','/'), '', $text));
// ni slashes ou antislashes ou virgules (ce qui fausserait l'arbre ou bien les mots
// clés texte dans les tables obs ou image)
return trim(str_replace(array('\\','/', ','), '', $text));
}
// gardée pour compatibilité ancienne version (mais devrait être supprimée
// dans le futur
static function nettoyerMotsClesAvantSuppression($chaine) {
$valeur = str_replace('null', '', $chaine);
$valeur = trim($valeur, ';;');
return $valeur;
}
static public function startsWith($haystack, $needle) {
return $needle === "" || strpos($haystack, $needle) === 0;
}
494,5 → 515,39
static public function endsWith($haystack, $needle) {
return $needle === "" || substr($haystack, -strlen($needle)) === $needle;
}
/**
* Fonction utilisée pour importer les anciens mots clés saisis dans les widget dans un compte identifié
* Dans ce cas là, le widget remplit la case id_utilisateur par le mail indiqué lors de la saisie
* @param string $mail_utilisateur
* @param string $id_utilisateur
*/
public static function migrerMotsClesMailVersId($mail_utilisateur, $infos_utilisateur) {
return self::migrerLiaisonEtMotsCles($mail_utilisateur, $infos_utilisateur, 'obs') &&
self::migrerLiaisonEtMotsCles($mail_utilisateur, $infos_utilisateur, 'images');
}
private static function migrerLiaisonEtMotsCles($mail_utilisateur, $infos_utilisateur, $mode) {
list($table_liaisons, $table_mots_cles) = self::getTablesMotsClesEtLiaisons($mode);
// ATTENTION : cette fonction suppose que l'utilisateur n'ai pas déjà de mots clés dans le CEL
// avec l'identifiant $id_utilisateur ce qui est normalement le cas
// ça devrait normalement marcher correctement même s'il en a déjà mais ça n'a pas été testé
$requete_migration_mc = 'UPDATE '.$table_mots_cles.' SET '.
'id_utilisateur = '.Cel::db()->proteger($infos_utilisateur['id_utilisateur']).' '.
'WHERE id_utilisateur = '.Cel::db()->proteger($mail_utilisateur).' ';
$migration_mc = Cel::db()->executerRequeteSimple($requete_migration_mc);
$requete_migration_mc_liaisons = 'UPDATE '.$table_liaisons.' SET '.
'id_utilisateur = '.Cel::db()->proteger($infos_utilisateur['id_utilisateur']).' '.
'WHERE id_utilisateur = '.Cel::db()->proteger($mail_utilisateur).' ';
$migration_mc_liaisons = Cel::db()->executerRequeteSimple($requete_migration_mc_liaisons);
return $migration_mc !== false &&
$migration_mc_liaisons !== false;
}
}
?>