From 5a4fb3829a8b488ccaa1af816d7ee57dbc75e7cf Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Thu, 8 May 2008 09:12:21 +0000 Subject: [PATCH] =?UTF-8?q?Pour=20pr=C3=A9parer=20le=20passage=20en=20sque?= =?UTF-8?q?lette=20de=20{{{xhtml=5Ftable=5Fid=5Ftype}}}=20annonc=C3=A9=20d?= =?UTF-8?q?ans=20[11579],=20il=20ne=20faut=20pas=20utiliser=20de=20passage?= =?UTF-8?q?=20par=20r=C3=A9f=C3=A9rence=20dans=20la=20fonction=20qui=20cor?= =?UTF-8?q?respond=20au=20corps=20de=20la=20future=20BOUCLE,=20hormis=20po?= =?UTF-8?q?ur=20m=C3=A9moriser=20les=20cl=C3=A9s=20primaires=20(=C3=A7a,?= =?UTF-8?q?=20=C3=A7a=20devrait=20pouvoir=20se=20simuler=20avec=20le=20cri?= =?UTF-8?q?t=C3=A8re=20doublon).=20Donc,=20dans=20la=20construction=20de?= =?UTF-8?q?=20la=20liste=20des=20mots-cl=C3=A9s=20associ=C3=A9s,=20on=20ne?= =?UTF-8?q?=20m=C3=A9morise=20plus=20les=20id=5Fgroupe=20rencontr=C3=A9s?= =?UTF-8?q?=20ni=20le=20nombre=20de=20ceux=20o=C3=B9=20l'utilisateur=20a?= =?UTF-8?q?=20le=20droit=20de=20modification,=20on=20les=20recalcule=20plu?= =?UTF-8?q?s=20tard.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On profite de ce calcul supplémentaire pour apporter une amélioration: le lien "supprimer tous les mots" apparaissait même si l'utilisateur n'avait le droit de supprimer qu'une partie d'entre eux; à présent il n'apparait que s'il a le droit de les supprimer tous. --- ecrire/inc/editer_mots.php | 104 ++++++++++++++++++------------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/ecrire/inc/editer_mots.php b/ecrire/inc/editer_mots.php index 96e2a1cb62..f1bb73efeb 100644 --- a/ecrire/inc/editer_mots.php +++ b/ecrire/inc/editer_mots.php @@ -160,17 +160,14 @@ function recherche_mot_cle($cherche_mots, $id_groupe, $objet, $id_objet, $table, function afficher_mots_cles($flag_editable, $objet, $id_objet, $table, $table_id, $url_base, $visible) { $les_mots = array(); - $id_groupes_vus = array(); - $groupes_vus = array(); - $flag_tous = 0; - $result = sql_select("mots.id_mot, mots.titre, mots.descriptif, mots.id_groupe", "spip_mots AS mots, spip_mots_$table AS lien", "lien.$table_id=$id_objet AND mots.id_mot=lien.id_mot", "mots.type, mots.titre", "mots.type, mots.titre"); + $result = sql_select("mots.id_mot, mots.titre, mots.id_groupe", "spip_mots AS mots, spip_mots_$table AS lien", "lien.$table_id=$id_objet AND mots.id_mot=lien.id_mot", "mots.type, mots.titre", "mots.type, mots.titre"); if (sql_count($result)) { $tableau= array(); $cle = http_img_pack('petite-cle.gif', "", "width='23' height='12'"); $ret = generer_url_retour($url_base, "$table_id=$id_objet#mots"); while ($row = sql_fetch($result)) { - $tableau[] = editer_mots_un($row, $cle, $flag_editable, $id_groupes_vus, $flag_tous, $id_objet, $objet, $ret, $table, $table_id, $url_base, $les_mots); + $tableau[] = editer_mots_un($row, $cle, $flag_editable, $id_objet, $objet, $ret, $table, $table_id, $url_base, $les_mots); } $largeurs = array('25', '', '', ''); @@ -181,58 +178,49 @@ function afficher_mots_cles($flag_editable, $objet, $id_objet, $table, $table_id } else $res =''; if ($flag_editable) - $res .= formulaire_mots_cles($id_groupes_vus, $id_objet, $les_mots, $table, $table_id, $url_base, $visible, $objet, $flag_tous); + $res .= formulaire_mots_cles($id_objet, $les_mots, $table, $table_id, $url_base, $visible, $objet); return $res; } // http://doc.spip.org/@editer_mots_un -function editer_mots_un($row, $cle, $flag_editable, &$id_groupes_vus, &$flag_tous, $id_objet, $objet, $ret, $table, $table_id, $url_base, $les_mots) +function editer_mots_un($row, $cle, $flag_editable, $id_objet, $objet, $ret, $table, $table_id, $url_base, &$les_mots) { $id_mot = $row['id_mot']; - $les_mots[] = $row['id_mot']; $titre_mot = $row['titre']; - $descriptif_mot = $row['descriptif']; + $les_mots[] = $row['id_mot']; $id_groupe = $row['id_groupe']; - $id_groupes_vus[] = $id_groupe; $url = generer_url_ecrire('mots_edit', "id_mot=$id_mot&redirect=$ret"); - $vals= array("<a href='$url'>$cle</a>"); + // On recupere le typo_mot ici, et non dans le mot-cle lui-meme; + // sinon bug avec arabe - $r = sql_fetsel("titre, unseul", "spip_groupes_mots", "id_groupe = $id_groupe"); - $unseul = $r['unseul']; - // On recupere le typo_mot ici, et non dans le mot-cle lui-meme; sinon bug avec arabe - $type_mot = typo($r['titre']); + $groupe = typo(sql_getfetsel("titre", "spip_groupes_mots", "id_groupe = $id_groupe")); if (autoriser('modifier', 'groupemots', $id_groupe)) - $type_mot = "<a href='" . generer_url_ecrire("mots_type","id_groupe=$id_groupe") . "'>$type_mot</a>"; + $groupe = "<a href='" . generer_url_ecrire("mots_type","id_groupe=$id_groupe") . "'>$groupe</a>"; - if (!$flag_editable) - $flag_groupe = false; - else { - $flag_groupe = sql_fetch(editer_mots_droits('COUNT(*) AS n', "id_groupe = $id_groupe")); - $flag_groupe = $flag_groupe['n']; + $retire = $unseul = ''; + + if ($flag_editable) { + $r = sql_fetch(editer_mots_droits('unseul', "id_groupe = $id_groupe")); + if ($r) { + $unseul = ($r['unseul'] == 'oui'); + $r = _T('info_retirer_mot') + . " " + . http_img_pack('croix-rouge.gif', "X", " class='puce' style='vertical-align: bottom;'"); + + $retire = ajax_action_auteur('editer_mots', "$id_objet,$id_mot,$table,$table_id,$objet", $url_base, "$table_id=$id_objet", array($r,''),"&id_objet=$id_objet&objet=$objet"); + } } // Changer - if ($unseul == "oui" AND $flag_groupe) { - $vals[]= formulaire_mot_remplace($id_groupe, $id_mot, $url_base, $table, $table_id, $objet, $id_objet); + if ($unseul) { + $mot = formulaire_mot_remplace($id_groupe, $id_mot, $url_base, $table, $table_id, $objet, $id_objet); } else { - $vals[]= "<a href='$url'>".typo($titre_mot)."</a>"; + $mot = "<a href='$url'>".typo($titre_mot)."</a>"; } - $vals[]= $type_mot; - - $s = " "; - if ($flag_editable AND $flag_groupe) { - $flag_tous++; - $s = _T('info_retirer_mot') - . " " - . http_img_pack('croix-rouge.gif', "X", " class='puce' style='vertical-align: bottom;'"); - - $s = ajax_action_auteur('editer_mots', "$id_objet,$id_mot,$table,$table_id,$objet", $url_base, "$table_id=$id_objet", array($s,''),"&id_objet=$id_objet&objet=$objet"); - } - $vals[] = $s; - return $vals; + return array("<a href='$url'>$cle</a>", $mot, $groupe, $retire); } // http://doc.spip.org/@formulaire_mot_remplace @@ -263,35 +251,47 @@ function formulaire_mot_remplace($id_groupe, $id_mot, $url_base, $table, $table_ return ajax_action_post('editer_mots', "$id_objet,$id_mot,$table,$table_id,$objet", $url_base, "$table_id=$id_objet",$corps, $t, " class='fondo spip_xx-small visible_au_chargement' id='$ancre'", "", "&id_objet=$id_objet&objet=$objet"); } - // http://doc.spip.org/@formulaire_mots_cles -function formulaire_mots_cles($id_groupes_vus, $id_objet, $les_mots, $table, $table_id, $url_base, $visible, $objet, $flag_tous) { +function formulaire_mots_cles($id_objet, $les_mots, $table, $table_id, $url_base, $visible, $objet) { global $spip_lang, $spip_lang_right; - if ($les_mots) { - $les_mots = join($les_mots, ","); + $cond_mots_vus = !$les_mots ? '' : + sql_in('id_mot', $les_mots); + + $id_groupes_vus = array(); + $flag_tous = 1; + if ($cond_mots_vus) { + + $droit = substr($GLOBALS['visiteur_session']['statut'],1); + $q = sql_select("M.id_groupe, G.$droit", "spip_mots AS M LEFT JOIN spip_groupes_mots AS G ON M.id_groupe=G.id_groupe", $cond_mots_vus, "M.id_groupe"); + while($r = sql_fetch($q)) { + $id_groupes_vus[]= $r['id_groupe']; + $flag_tous &= ($r[$droit] === 'oui'); + } + $cond_id_groupes_vus = (" AND " . sql_in('id_groupe', $id_groupes_vus, 'NOT')); } else { - $les_mots = "0"; + $cond_id_groupes_vus = ''; } - $cond_id_groupes_vus = "0"; - if ($id_groupes_vus) $cond_id_groupes_vus = join(",",$id_groupes_vus); - - $nb_groupes = sql_fetch(editer_mots_droits('count(*) AS n', "$table = 'oui' AND obligatoire = 'oui' AND id_groupe NOT IN ($cond_id_groupes_vus)")); + + $nb_groupes = sql_fetch(editer_mots_droits('count(*) AS n', "$table = 'oui' AND obligatoire = 'oui'$cond_id_groupes_vus")); $nb_groupes = $nb_groupes['n']; $res = debut_block_depliable($visible OR ($nb_groupes > 0),"lesmots"); - if ($flag_tous >= 3) { + if ($flag_tous AND count($les_mots)>= 3) { $res .= "<div style='text-align: right' class='arial1'>" . ajax_action_auteur('editer_mots', "$id_objet,-1,$table,$table_id,$objet", $url_base, "$table_id=$id_objet", array(_T('info_retirer_mots'),''),"&id_objet=$id_objet&objet=$objet") . "</div><br />\n"; } - $result = editer_mots_droits("id_groupe,unseul,obligatoire,titre, ".sql_multi ("titre", $spip_lang), "$table = 'oui' AND (unseul != 'oui' OR (unseul = 'oui' AND id_groupe NOT IN ($cond_id_groupes_vus))) ORDER BY multi"); + $result = editer_mots_droits("id_groupe,unseul,obligatoire,titre, ".sql_multi ("titre", $spip_lang), "$table = 'oui' AND (unseul != 'oui' OR (unseul = 'oui'$cond_id_groupes_vus)) ORDER BY multi"); - // Afficher un menu par groupe de mots + // Afficher un menu par groupe de mots non vu $ajouter =''; + $cond_mots_vus = !$les_mots ? '' : + (" AND " . sql_in('id_mot', $les_mots, 'NOT')); + while ($row = sql_fetch($result)) { - if ($menu = menu_mots($row, $id_groupes_vus, $les_mots)) { + if ($menu = menu_mots($row, $id_groupes_vus, $cond_mots_vu)) { $id_groupe = $row['id_groupe']; list($corps, $clic) = $menu; @@ -339,7 +339,7 @@ function menu_mots($row, $id_groupes_vus, $les_mots) { $id_groupe = $row['id_groupe']; - $n = sql_countsel("spip_mots", "id_groupe=$id_groupe" . ($les_mots ? " AND id_mot NOT IN ($les_mots) " : '')); + $n = sql_countsel("spip_mots", "id_groupe=$id_groupe" . $les_mots); if (!$n) return ''; $titre = textebrut(typo($row['titre'])); @@ -380,7 +380,7 @@ function menu_mots($row, $id_groupes_vus, $les_mots) $res .= "\n<option value='x' style='font-variant: small-caps;'>$titre</option>"; - $result = sql_select("id_mot, type, titre", "spip_mots", "id_groupe =$id_groupe " . ($les_mots ? "AND id_mot NOT IN ($les_mots) " : '') . "", "", "titre"); + $result = sql_select("id_mot, type, titre", "spip_mots", "id_groupe =$id_groupe " . $les_mots, "", "titre"); while($row = sql_fetch($result)) { -- GitLab