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; |
} |
} |
?> |