[SPIP Zone] r2766 - in /_plugins_/_amelioration_admin_: mots_arbo/ mots_arbo/action/ mots_arbo/exec/ mots_arbo/js/ mots_arbo/lang/ tinymce/inc/

Author: christian_lefebvre@laposte.net
Date: Fri Apr 21 00:27:12 2006
New Revision: 2766

Log:
debut de mots cles en arborescence

Added:
    _plugins_/_amelioration_admin_/mots_arbo/
    _plugins_/_amelioration_admin_/mots_arbo/action/
    _plugins_/_amelioration_admin_/mots_arbo/action/bouger_mots.php
    _plugins_/_amelioration_admin_/mots_arbo/exec/
    _plugins_/_amelioration_admin_/mots_arbo/exec/install_mots_arbo.php
    _plugins_/_amelioration_admin_/mots_arbo/exec/mots_arbo.php
    _plugins_/_amelioration_admin_/mots_arbo/js/
    _plugins_/_amelioration_admin_/mots_arbo/js/motsArbo.js
    _plugins_/_amelioration_admin_/mots_arbo/lang/
    _plugins_/_amelioration_admin_/mots_arbo/lang/motsarbo_fr.php
    _plugins_/_amelioration_admin_/mots_arbo/mots_arbo.css
    _plugins_/_amelioration_admin_/mots_arbo/mots_arbo_admin.php
    _plugins_/_amelioration_admin_/mots_arbo/plugin.xml
    _plugins_/_amelioration_admin_/mots_arbo/test.html
Modified:
    _plugins_/_amelioration_admin_/tinymce/inc/sale.php

Added: _plugins_/_amelioration_admin_/mots_arbo/action/bouger_mots.php

--- _plugins_/_amelioration_admin_/mots_arbo/action/bouger_mots.php (added)
+++ _plugins_/_amelioration_admin_/mots_arbo/action/bouger_mots.php Fri Apr 21 00:27:12 2006
@@ -0,0 +1,139 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_spip('inc/presentation');
+include_spip('inc/mots');
+include_spip('base/abstract_sql');
+
+function dspip_query($q) {
+ error_log($q);
+ spip_query($q);
+}
+
+error_log("G $from,$after,$into");
+
+function action_bouger_mots() {
+ global $from, $after, $into;
+
+ error_log("$from,$after,$into");
+ if($from) {
+ $res=spip_query("select debut, fin, niveau, id_groupe from spip_mots where id_mot=$from");
+ $row= spip_fetch_array($res);
+ $debut_from= $row['debut']; $fin_from= $row['fin'];
+ $niv_from= $row['niveau'];
+ $groupe_from= $row['id_groupe'];
+ $largeur_from= $fin_from-$debut_from+1;
+ } else {
+ die("from ??");
+ }
+
+ if($after || $into) {
+ if($after) {
+ $to= $after;
+ $quoi='after';
+ } else {
+ $to= $into;
+ $quoi='into';
+ }
+ // déplacer le noeud SOUS le noeud, c'est à dire en première position de
+ // la sous arbo de ce noeud
+ $res=spip_query("SELECT debut, fin, niveau, id_groupe
+ FROM spip_mots WHERE id_mot=$to");
+ $row= spip_fetch_array($res);
+ $debut_to= $row['debut']; $fin_to= $row['fin'];
+ $niv_to= $row['niveau'];
+ if($quoi=='into') {
+ $niv_to++; // +1 puisqu'on deplace sous ce niveau
+ }
+ $groupe_to= $row['id_groupe'];
+
+ error_log("$quoi $debut_from/$fin_from -> $debut_to/$fin_to");
+
+ // déplacement vers le bas ou le haut, mais pas dans ses propres
+ // sous branches
+ if($fin_from<$fin_to || $debut_from>$debut_to) {
+ // determiner le delta de niveaux
+ if($niv_to!=$niv_from) {
+ $delta= $niv_to-$niv_from;
+ dspip_query("update spip_mots
+ set niveau=niveau+$delta
+ where debut>=$debut_from and fin<=$fin_from");
+ }
+
+ // mettre cette branche de cote
+ dspip_query("update spip_mots
+ set debut=-debut, fin=-fin
+ where debut>=$debut_from and fin<=$fin_from");
+ // et la changer de groupe si nécessaire
+ if($groupe_from!=$groupe_to) {
+ dspip_query("update spip_mots
+ set id_groupe=$groupe_to
+ where debut<0");
+ }
+
+ // retasser le trou qu'on vient de laisser
+ dspip_query("update spip_mots
+ set fin=fin-$largeur_from
+ where fin>$fin_from");
+ dspip_query("update spip_mots
+ set debut=debut-$largeur_from
+ where debut>$fin_from");
+
+ if($debut_from<$debut_to) {
+ // déplacement vers le bas => la destination
+ // s'est décalée qaund on a dégagé la branche source
+ $debut_to -= $largeur_from;
+ $fin_to -= $largeur_from;
+ }
+
+ if($quoi=='after') {
+ // faire un trou pour la destination
+ dspip_query("update spip_mots
+ set fin=fin+$largeur_from
+ where fin>$fin_to");
+ dspip_query("update spip_mots
+ set debut=debut+$largeur_from
+ where debut>$fin_to");
+ // y mettre la branche source
+ $delta=$fin_to+1-$debut_from;
+ } else {
+ // faire un trou pour la destination
+ dspip_query("update spip_mots
+ set fin=fin+$largeur_from
+ where fin>$debut_to");
+ dspip_query("update spip_mots
+ set debut=debut+$largeur_from
+ where debut>$debut_to");
+ // y mettre la branche source
+ $delta=$debut_to+1-$debut_from;
+ }
+ dspip_query("update spip_mots
+ set debut=-debut+$delta, fin=-fin+$delta
+ where debut<0");
+
+ if($groupe_from!=$groupe_to) {
+ // dans ce cas, faut renuméroter les groupes
+ // (même si ça sert peut être à rien ?)
+ // A REVOIR : cette requète est pourrie, comment la faire mieux ?
+ dspip_query("UPDATE spip_groupes_mots
+ SET debut=(
+ SELECT debut FROM spip_mots
+ WHERE spip_mots.id_groupe = spip_groupes_mots.id_groupe
+ AND niveau=0),
+ fin=(
+ SELECT fin FROM spip_mots
+ WHERE spip_mots.id_groupe = spip_groupes_mots.id_groupe
+ AND niveau=0)");
+ }
+ } else {
+ die("ça, on peut pas ... : $debut_from/$fin_from -> $debut_to/$fin_to");
+ }
+ } else {
+ die('???');
+ }
+
+ redirige_par_entete("ecrire?exec=mots_arbo");
+}
+
+?>

Added: _plugins_/_amelioration_admin_/mots_arbo/exec/install_mots_arbo.php

--- _plugins_/_amelioration_admin_/mots_arbo/exec/install_mots_arbo.php (added)
+++ _plugins_/_amelioration_admin_/mots_arbo/exec/install_mots_arbo.php Fri Apr 21 00:27:12 2006
@@ -0,0 +1,63 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_spip('inc/presentation');
+include_spip('inc/mots');
+include_spip('base/abstract_sql');
+
+function exec_install_mots_arbo() {
+
+ $requetes=array(
+ // ajouter les colonnes
+// "ALTER TABLE spip_groupes_mots
+// ADD debut MEDIUMINT NOT NULL DEFAULT '0',
+// ADD fin MEDIUMINT NOT NULL DEFAULT '0';",
+
+// "ALTER TABLE spip_mots
+// ADD debut MEDIUMINT NOT NULL DEFAULT '0',
+// ADD fin MEDIUMINT NOT NULL DEFAULT '0',
+// ADD niveau TINYINT NOT NULL DEFAULT '1';",
+
+ // ajouter des index sur debut et fin ?
+
+ // d'abord compter les groupes
+ "SET @pos:=-1;",
+ "UPDATE spip_groupes_mots SET debut=(@pos:=@pos+2) ORDER BY titre;",
+
+ // puis numéroter les mots en profitant de la num des groupe
+ // pour savoir qaund ca se décale
+ "SET @pos:=-1;",
+ "UPDATE spip_mots
+ SET spip_mots.debut=(@pos:=@pos+2)+(
+ SELECT spip_groupes_mots.debut
+ FROM spip_groupes_mots
+ WHERE spip_mots.id_groupe = spip_groupes_mots.id_groupe),
+ spip_mots.fin= spip_mots.debut+1,
+ spip_mots.niveau=1
+ ORDER BY id_groupe,titre;",
+
+ // reste plus qu'a mettre les vraies valeurs pour les groupes
+ "UPDATE spip_groupes_mots
+ SET debut=(
+ SELECT min(debut) FROM spip_mots
+ WHERE spip_mots.id_groupe = spip_groupes_mots.id_groupe)-1,
+ fin=(
+ SELECT max(fin) FROM spip_mots
+ WHERE spip_mots.id_groupe = spip_groupes_mots.id_groupe)+1;",
+
+ // et les repercuter dans des mots cle
+ "REPLACE INTO spip_mots
+ (id_mot, id_groupe, titre, descriptif, texte, debut, fin, niveau)
+ SELECT id_groupe+100000, id_groupe, titre, descriptif, texte, debut, fin, 0
+ FROM spip_groupes_mots",
+
+ );
+
+ foreach($requetes as $requete) {
+ if(!spip_query($requete)) die("Echec sur $requete : ".mysql_error());
+ }
+ echo "OK";
+}
+
+?>

Added: _plugins_/_amelioration_admin_/mots_arbo/exec/mots_arbo.php

--- _plugins_/_amelioration_admin_/mots_arbo/exec/mots_arbo.php (added)
+++ _plugins_/_amelioration_admin_/mots_arbo/exec/mots_arbo.php Fri Apr 21 00:27:12 2006
@@ -0,0 +1,275 @@
+<?php
+
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+include_spip('inc/presentation');
+include_spip('inc/mots');
+include_spip('base/abstract_sql');
+
+function exec_mots_arbo_dist() {
+ global $acces_comite, $acces_forum, $acces_minirezo, $ancien_type, $articles, $breves, $change_type, $conf_mot, $connect_statut, $connect_toutes_rubriques, $descriptif, $id_groupe, $modifier_groupe, $obligatoire, $rubriques, $spip_lang, $spip_lang_right, $supp_group, $syndic, $texte, $unseul;
+
+ $id_groupe = intval($id_groupe);
+
+ if ($conf_mot = intval($conf_mot)) {
+ $result = spip_query("SELECT * FROM spip_mots WHERE id_mot=$conf_mot");
+ if ($row = spip_fetch_array($result)) {
+ $id_mot = $row['id_mot'];
+ $titre_mot = typo($row['titre']);
+ $type_mot = typo($row['type']);
+
+ if ($connect_statut=="0minirezo") $aff_articles="prepa,prop,publie,refuse";
+ else $aff_articles="prop,publie";
+
+ list($nb_articles) = spip_fetch_array(spip_query("SELECT COUNT(*) FROM spip_mots_articles AS lien, spip_articles AS article WHERE lien.id_mot=$conf_mot AND article.id_article=lien.id_article AND FIND_IN_SET(article.statut,'$aff_articles')>0 AND article.statut!='refuse'"));
+
+ list($nb_rubriques) = spip_fetch_array(spip_query("SELECT COUNT(*) FROM spip_mots_rubriques AS lien, spip_rubriques AS rubrique WHERE lien.id_mot=$conf_mot AND rubrique.id_rubrique=lien.id_rubrique"));
+ list($nb_breves) = spip_fetch_array(spip_query("SELECT COUNT(*) FROM spip_mots_breves AS lien, spip_breves AS breve WHERE lien.id_mot=$conf_mot AND breve.id_breve=lien.id_breve AND FIND_IN_SET(breve.statut,'$aff_articles')>0 AND breve.statut!='refuse'"));
+
+ list($nb_sites) = spip_fetch_array(spip_query("SELECT COUNT(*) FROM spip_mots_syndic AS lien, spip_syndic AS syndic WHERE lien.id_mot=$conf_mot AND syndic.id_syndic=lien.id_syndic AND FIND_IN_SET(syndic.statut,'$aff_articles')>0 AND syndic.statut!='refuse'"));
+

[... 456 lines stripped ...]

On Thu, 2006-04-20 at 22:27 +0000, christian_lefebvre@laposte.net wrote:

Author: christian_lefebvre@laposte.net
Date: Fri Apr 21 00:27:12 2006
New Revision: 2766

Log:
debut de mots cles en arborescence

C'est vraiment un debut :
  ecrire/?exec=install_mots_arbo => execute une paire de manip pour
initialiser la table
  ecrire/?exec=mots_arbo montre les mots clés et permet de les
réorganiser en arbre

  pour l'instant, l'interce est pourrie, il faut ensuite que j'intègre
ce qu'à codé cy_altern pour le rendre utilisable à coup de drag and
drop.
  Là, chaque mot est suivi de 3 boutons radio :
- 1er = définir une source
- 2eme = définir le point d'arrivée après ce mot
- 3eme = définir le point d'arrivée sous ce mot (dans le sens, un
   niveau en dessous)

Donc, si on fait
- A
- B
- C
- D

ça devient
- B
- C
  - A
- D

ensuite :
- B
- C
  - A
- D
=>
- C
  - A
  - B
- D

puis :
- C
  - A
  - B
- D
=>
- D
  - C
    - A
    - B
donc, toute la branche suit le mouvement.

on peut aussi changer un mot de groupe

à suivre ...

--
À+, Pif.

super, je reviens de 15 jours de montagne et pour cette raison je ne pouvais pas répondre de suite aux discussions sur l'arbo
j'ai cherché hier justement à installer un plugin pour l'arbo des mots clefs ! donc c'est très intéressant tout ça!
j'ai trouvé ces liens pour essayer en non recursif car je vais avoir des mots en quantité qui vont vite être lourds sur les appels
un peu comme ce qui est utilisé sur agora (avec left right level)
http://www.edutech.ch/contribution/nstrees/index.php
http://www.hexadec.ch/repository/nstrees.phps
mais après avoir regardé ton code et testé je vois que tu es déjà loin devant,
hier je désespérais de résoudre tout ça!
si je peux t'aider sur un truc fais signe, je suis pas une bête de code mais je testerais!
++
touti

pif a écrit :

On Thu, 2006-04-20 at 22:27 +0000, christian_lefebvre@laposte.net wrote:
  

Author: christian_lefebvre@laposte.net
Date: Fri Apr 21 00:27:12 2006
New Revision: 2766

Log:
debut de mots cles en arborescence
    

C'est vraiment un debut :
  ecrire/?exec=install_mots_arbo => execute une paire de manip pour
initialiser la table
  ecrire/?exec=mots_arbo montre les mots clés et permet de les
réorganiser en arbre

  pour l'instant, l'interce est pourrie, il faut ensuite que j'intègre
ce qu'à codé cy_altern pour le rendre utilisable à coup de drag and
drop.
  Là, chaque mot est suivi de 3 boutons radio :
- 1er = définir une source
- 2eme = définir le point d'arrivée après ce mot
- 3eme = définir le point d'arrivée sous ce mot (dans le sens, un
   niveau en dessous)

Donc, si on fait
- A
- B
- C
- D

ça devient
- B
- C
  - A
- D

ensuite :
- B
- C
  - A
- D
=>
- C
  - A
  - B
- D

puis :
- C
  - A
  - B
- D
=>
- D
  - C
    - A
    - B
donc, toute la branche suit le mouvement.

on peut aussi changer un mot de groupe

à suivre ...