Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 2059 → Rev 2060

/trunk/jrest/services/InventoryKeyWordList.php
File deleted
\ No newline at end of file
/trunk/jrest/services/User.php
245,13 → 245,13
* @param array $infos_utilisateur
*/
private function affecterDonneesWidgetSaisie($mail_utilisateur, $infos_utilisateur) {
//TODO tout ceci pourrait être simplifié sans avoir besoin d'instancier quoi que ce soit
$gestion_obs = new GestionObservation($this->config);
$gestion_img = new GestionImage($this->config);
$gestion_mots_cles = new LiaisonMotsCles($this->config, 'obs');
$gestion_obs->migrerObservationsMailVersId($mail_utilisateur, $infos_utilisateur);
$gestion_img->migrerImagesMailVersId($mail_utilisateur, $infos_utilisateur);
$gestion_mots_cles->migrerMotsClesMailVersId($mail_utilisateur, $infos_utilisateur);
GestionMotsClesChemin::migrerMotsClesMailVersId($mail_utilisateur, $infos_utilisateur);
}
}
?>
/trunk/jrest/services/InventoryKeyWordImageLink.php
23,32 → 23,31
return;
}
$id_images = array_filter(explode(',', $pairs['images']));
$mots_cles = array_filter(explode(',', $pairs['mots_cles']));
$ids_images = array_filter(explode(',', $pairs['images']));
$ids_mots_cles = array_filter(explode(',', $pairs['mots_cles']));
// Pour le moment on ne peut que supprimer les mots clés et ajouter les nouveaux à cause du fonctionnement
// de l'arbre de mots clés des images
$gestionnaire_mots_cles = new LiaisonMotsCles($this->config,'images');
$suppression_liaison_mot_cle = $gestionnaire_mots_cles->supprimerToutesLiaisonsPourIdsElementsLies($id_images);
$gestion_mots_cles = new GestionMotsClesChemin($this->config,'images');
$gestion_mots_cles->supprimerToutesLiaisonsPourIdsElementsLies($ids_images);
$liaison = true;
if(!empty($mots_cles)) {
$liaison = $gestionnaire_mots_cles->ajouterLiaisonMotsCles($pairs['ce_utilisateur'],$id_images, $mots_cles);
if(!empty($ids_mots_cles)) {
$liaison = $gestion_mots_cles->lierParTableaux($ids_mots_cles, $ids_images, $pairs['ce_utilisateur']);
}
foreach($ids_images as $id_element_lie) {
//TODO: que faire si la régénération d'index texte échoue ?
$r_index = GestionMotsClesChemin::regenererIndexTexteMotCle($id_element_lie, 'images');
}
return $liaison;
}
 
public function deleteElement($uid){
// Controle detournement utilisateur
$this->controleUtilisateur($uid[0]);
if (!isset($uid[0]) || !isset($uid[1]) || !isset($uid[2])) {
return FALSE;
}
$gestionnaire_mots_cles = new LiaisonMotsCles($this->config, 'images');
$mots_cles = explode(',', LiaisonMotsCles::nettoyerMotsCles($uid[2]));
$ids_images = explode(',',$uid[1]);
return $gestionnaire_mots_cles->supprimerLiaisonsMotsClesEtRegenererIndexTexte($uid[0], $ids_images, $mots_cles);
// n'est jamais appelée car pour supprimer les mots clés d'une image
// on appelle createElement avec des mots clés vides
// car les mots clés images ne fonctionnent pas pareil que ceux des obs
// dans l'interface
}
}
?>
/trunk/jrest/services/InventoryKeyWordObsLink.php
24,9 → 24,12
$ids_obs = explode(',',$pairs['observations']);
$ids_mots_cles = explode(',',$pairs['mots_cles']);
$gestionnaire_mots_cles = new LiaisonMotsCles($this->config,'obs');
$liaison_mot_cle = $gestionnaire_mots_cles->ajouterLiaisonMotsCles($pairs['ce_utilisateur'], $ids_obs, $ids_mots_cles);
$gestion_mots_cles = new GestionMotsClesChemin($this->config,'obs');
$liaison_mot_cle = $gestion_mots_cles->lierParTableaux($ids_mots_cles, $ids_obs, $pairs['ce_utilisateur']);
foreach($ids_obs as $id_element_lie) {
$r_index = GestionMotsClesChemin::regenererIndexTexteMotCle($id_element_lie, 'obs');
}
return $liaison_mot_cle;
}
 
38,9 → 41,15
return FALSE;
}
$gestionnaire_mots_cles = new LiaisonMotsCles($this->config, 'obs');
$mots_cles = explode(',', LiaisonMotsCles::nettoyerMotsCles($uid[2]));
$id_utilisateur = $uid[0];
$ids_obs = explode(',',$uid[1]);
return $gestionnaire_mots_cles->supprimerLiaisonsMotsClesEtRegenererIndexTexte($uid[0], $ids_obs, $mots_cles);
$ids_mots_cles = explode(',', GestionMotsClesChemin::nettoyerMotsClesAvantSuppression($uid[2]));
$gestion_mots_cles = new GestionMotsClesChemin($this->config, 'obs');
 
$suppression_liaisons = $gestion_mots_cles->supprimerLiaisonsMotsCles($ids_mots_cles, $ids_obs, $id_utilisateur);
foreach($ids_obs as $id_element_lie) {
$r_index = GestionMotsClesChemin::regenererIndexTexteMotCle($id_element_lie, 'obs');
}
}
}
/trunk/jrest/lib/LiaisonMotsCles.php
File deleted
\ No newline at end of file
/trunk/jrest/lib/RechercheImage.php
160,7 → 160,7
case "id_mots_cles";
$liste_mc = '"'.str_replace(';','","',$valeur).'"';
$tpl_sous_requete = GestionMotsClesChemin::obtenirTemplateRequeteMotsClesTexte('images');
$tpl_sous_requete = GestionMotsClesChemin::obtenirTemplateRequeteMotsClesIds('images');
$sous_requete .= 'id_image IN ('.sprintf($tpl_sous_requete, $liste_mc).')';
$sous_requete .= ' AND ' ;
break;
/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;
}
}
?>
/trunk/jrest/lib/RechercheObservation.php
242,7 → 242,7
break;
case 'id_mots_cles':
$liste_mc = '"'.str_replace(';','","',$valeur).'"';
$tpl_sous_requete = GestionMotsClesChemin::obtenirTemplateRequeteMotsClesTexte('obs');
$tpl_sous_requete = GestionMotsClesChemin::obtenirTemplateRequeteMotsClesIds('obs');
$sous_requete .= 'id_observation IN ('.sprintf($tpl_sous_requete, $liste_mc).')';
$sous_requete .= ' AND ' ;
break;