From 14dcaca5e914a496fc0e29a170858d26929f5b76 Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Sun, 11 Feb 2007 23:11:59 +0000 Subject: [PATCH] gestion des auteurs : on casse tout --- .gitattributes | 6 +- ...{legender_auteur.php => editer_auteur.php} | 95 ++++-- ecrire/action/editer_auteurs.php | 2 - ecrire/exec/accueil.php | 2 +- ecrire/exec/auteur_infos.php | 111 ++++--- ecrire/exec/auteurs.php | 2 +- ecrire/exec/auteurs_edit.php | 19 -- ecrire/exec/editer_auteurs.php | 3 +- ecrire/exec/legender_auteur.php | 43 --- ecrire/exec/message.php | 2 +- ecrire/exec/messagerie.php | 2 +- ecrire/exec/naviguer.php | 2 +- .../{legender_auteur.php => auteur_infos.php} | 283 +++++++++++------- ecrire/inc/autoriser.php | 35 ++- ecrire/inc/boutons.php | 2 +- ecrire/inc/commencer_page.php | 2 +- ecrire/inc/editer_auteurs.php | 24 +- ecrire/inc/formater_auteur.php | 4 +- ecrire/inc/forum.php | 2 +- ecrire/inc/gadgets.php | 2 +- ecrire/inc/informer_auteur.php | 2 +- ecrire/inc/instituer_auteur.php | 208 +++++++------ ecrire/inc/message_select.php | 2 +- ecrire/inc/urls.php | 3 +- ecrire/inc/vieilles_defs.php | 2 +- 25 files changed, 487 insertions(+), 373 deletions(-) rename ecrire/action/{legender_auteur.php => editer_auteur.php} (74%) delete mode 100644 ecrire/exec/auteurs_edit.php delete mode 100644 ecrire/exec/legender_auteur.php rename ecrire/inc/{legender_auteur.php => auteur_infos.php} (56%) diff --git a/.gitattributes b/.gitattributes index 1ae4290d61..a8a85be01a 100644 --- a/.gitattributes +++ b/.gitattributes @@ -341,6 +341,7 @@ ecrire/action/dater.php -text ecrire/action/desinstaller_plugin.php -text ecrire/action/documenter.php -text ecrire/action/editer_article.php -text +ecrire/action/editer_auteur.php -text ecrire/action/editer_auteurs.php -text ecrire/action/editer_breve.php -text ecrire/action/editer_message.php -text @@ -364,7 +365,6 @@ ecrire/action/instituer_rubrique_breves.php -text ecrire/action/instituer_syndic.php -text ecrire/action/joindre.php -text ecrire/action/legender.php -text -ecrire/action/legender_auteur.php -text ecrire/action/logout.php -text ecrire/action/petitionner.php -text ecrire/action/poster_forum_prive.php -text @@ -407,7 +407,6 @@ ecrire/exec/articles_tous.php -text ecrire/exec/articles_versions.php -text ecrire/exec/auteur_infos.php -text ecrire/exec/auteurs.php -text -ecrire/exec/auteurs_edit.php -text ecrire/exec/breves.php -text ecrire/exec/breves_edit.php -text ecrire/exec/breves_voir.php -text @@ -444,7 +443,6 @@ ecrire/exec/install.php -text ecrire/exec/instituer_auteur.php -text ecrire/exec/lang_raccourcis.php -text ecrire/exec/legender.php -text -ecrire/exec/legender_auteur.php -text ecrire/exec/meme_rubrique.php -text ecrire/exec/memoriser.php -text ecrire/exec/menu_agenda.php -text @@ -486,6 +484,7 @@ ecrire/inc/agenda.php -text ecrire/inc/aider.php -text ecrire/inc/ajouter_documents.php -text ecrire/inc/article_select.php -text +ecrire/inc/auteur_infos.php -text ecrire/inc/autoriser.php -text ecrire/inc/boutons.php -text ecrire/inc/chercher_logo.php -text @@ -523,7 +522,6 @@ ecrire/inc/instituer_auteur.php -text ecrire/inc/joindre.php -text ecrire/inc/lang_liste.php -text ecrire/inc/legender.php -text -ecrire/inc/legender_auteur.php -text ecrire/inc/maintenance.php -text ecrire/inc/message_select.php -text ecrire/inc/minipres.php -text diff --git a/ecrire/action/legender_auteur.php b/ecrire/action/editer_auteur.php similarity index 74% rename from ecrire/action/legender_auteur.php rename to ecrire/action/editer_auteur.php index 4910445efa..eb86b7985f 100644 --- a/ecrire/action/legender_auteur.php +++ b/ecrire/action/editer_auteur.php @@ -16,21 +16,21 @@ include_spip('inc/filtres'); include_spip('inc/acces'); include_spip('base/abstract_sql'); -// http://doc.spip.org/@action_legender_auteur_dist -function action_legender_auteur_dist() -{ - $securiser_action = charger_fonction('securiser_action', 'inc'); - $arg = $securiser_action(); +function action_editer_auteur_dist() { + $securiser_action = charger_fonction('securiser_action', 'inc'); + $arg = $securiser_action(); - if (!preg_match(",^(\d+)\D(\d*)(\D(\w*))?$,", $arg, $r)) { - $r = "action_legender_auteur_dist $arg pas compris"; + if (!preg_match(",^(\d+)$,", $arg, $r)) { + $r = "action_editer_auteur_dist $arg pas compris"; spip_log($r); - } else redirige_par_entete(action_legender_auteur_post($r)); + } else { + $url = action_legender_auteur_post($r); + redirige_par_entete($url); + } } // http://doc.spip.org/@action_legender_auteur_post -function action_legender_auteur_post($r) -{ +function action_legender_auteur_post($r) { global $auteur_session; $bio = _request('bio'); @@ -183,7 +183,49 @@ function action_legender_auteur_post($r) spip_query("UPDATE spip_auteurs SET $query_pass nom=" . _q($auteur['nom']) . ", login=" . _q($auteur['login']) . ", bio=" . _q($auteur['bio']) . ", email=" . _q($auteur['email']) . ", nom_site=" . _q($auteur['nom_site']) . ", url_site=" . _q($auteur['url_site']) . ", pgp=" . _q($auteur['pgp']) . (!$extra ? '' : (", extra = " . _q($extra) . "")) . " WHERE id_auteur=".$auteur['id_auteur']); } - // Si on modifie la fiche auteur, reindexer + + // + // Modifications de statut + // + // TODO : autorisations correspondantes ! + // + if ($statut = _request('statut') + AND autoriser('modifier', 'auteur', $id_auteur, $qui = null, + $opt = array('statut'=>$statut))) { + if (!ereg("^(0minirezo|1comite|5poubelle|6forum)$",$statut)) { + spip_log("action_instituer_auteur_dist: $statut incompris pour $id_auteur"); + } else { + spip_query("UPDATE spip_auteurs SET statut="._q($statut) . " WHERE id_auteur=" . _q($id_auteur)); + } + } + + // Rubriques restreintes + $restreintes = _request('restreintes'); + if ($id_parent = intval(_request('id_parent'))) { + if (is_array($restreintes)) + $restreintes[] = $id_parent; + else + $restreintes = array($id_parent); + } + if (is_array($restreintes) + AND autoriser('modifier', 'auteur', $id_auteur, $qui = null, + $opt = array('restreint'=>$restreintes))) { + include_spip('base/abstract_sql'); + spip_query("DELETE FROM spip_auteurs_rubriques WHERE id_auteur="._q($id_auteur)); + foreach (array_unique($restreintes) as $id_rub) + if ($id_rub = intval($id_rub)) // si '0' on ignore + spip_abstract_insert('spip_auteurs_rubriques', "(id_auteur,id_rubrique)", "($id_auteur,$id_rub)"); + } + + + // Lier a un article + if ($id_article = intval(_request('lier_id_article')) + #AND autoriser('modifier', 'article', $id_article) + ) { + spip_query("INSERT spip_auteurs_articles (id_article,id_auteur) VALUES ($id_article,$id_auteur)"); + } + + // Si on modifie la fiche auteur, reindexer if ($GLOBALS['meta']['activer_moteur'] == 'oui') { include_spip("inc/indexation"); marquer_indexer('spip_auteurs', $id_auteur); @@ -193,28 +235,21 @@ function action_legender_auteur_post($r) $echec = $echec ? '&echec=' . join('@@@', $echec) : ''; - // il faudrait rajouter OR $echec mais il y a conflit avec Ajax - - if ($echec OR ($init = ($tout[0]=='0'))) { - // tout nouveau. envoyer le formulaire de saisie du reste - // en transmettant le retour eventuel - // decode / encode car encode pas necessairement deja fait. + $redirect = rawurldecode($redirect); - $ret = !$redirect ? '' - : ('&redirect=' . rawurlencode(rawurldecode($redirect))); + if ($echec) { + // revenir au formulaire de saisie + $ret = !$redirect + ? '' + : ('&redirect=' . rawurlencode($redirect)); - $script = (_request('var_ajaxcharset') ? 'legender_auteur' : 'auteur_infos'); - - return generer_url_ecrire($script, "id_auteur=$id_auteur&initial=$init$echec$ret",true); + return generer_url_ecrire('auteur_infos', + "id_auteur=$id_auteur$echec$ret",'&'); } else { - // modif: renvoyer le resultat ou a nouveau le formulaire si erreur - if (!$redirect) { - $redirect = generer_url_ecrire("auteur_infos", "id_auteur=$id_auteur", true, true); - $anc = ''; - } else - list($redirect,$anc) = split('#',rawurldecode($redirect)); - - $redirect .= $echec . $anc . ($echec ? '' : '&initial=-1'); + // modif: renvoyer le resultat ou a nouveau le formulaire si erreur + if (!$redirect) + $redirect = generer_url_ecrire("auteur_infos", "id_auteur=$id_auteur", '&', true); + return $redirect; } } diff --git a/ecrire/action/editer_auteurs.php b/ecrire/action/editer_auteurs.php index 092bdcd9e9..3978230f93 100644 --- a/ecrire/action/editer_auteurs.php +++ b/ecrire/action/editer_auteurs.php @@ -20,8 +20,6 @@ function action_editer_auteurs_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); $redirect = urldecode(_request('redirect')); - if ($script_aut = _request('script_aut')) - $redirect = parametre_url($redirect,'script_aut',$script_aut,'&'); if ($script = _request('script')) $redirect = parametre_url($redirect,'script',$script,'&'); if ($titre = _request('titre')) diff --git a/ecrire/exec/accueil.php b/ecrire/exec/accueil.php index 3cdb150edd..43b9d1a661 100644 --- a/ecrire/exec/accueil.php +++ b/ecrire/exec/accueil.php @@ -257,7 +257,7 @@ function personnel_accueil($coockcookie) $t); $res .= $t; } - $titre_cadre = afficher_plus(generer_url_ecrire("auteurs_edit","id_auteur=$connect_id_auteur")); + $titre_cadre = afficher_plus(generer_url_ecrire("auteur_infos","id_auteur=$connect_id_auteur")); $titre_cadre .= majuscules(typo($GLOBALS['auteur_session']['nom'])); return debut_cadre_relief("fiche-perso-24.gif",true, '',$titre_cadre) diff --git a/ecrire/exec/auteur_infos.php b/ecrire/exec/auteur_infos.php index 63bf27fe2e..91a2dd96e8 100644 --- a/ecrire/exec/auteur_infos.php +++ b/ecrire/exec/auteur_infos.php @@ -13,44 +13,43 @@ if (!defined("_ECRIRE_INC_VERSION")) return; include_spip('inc/presentation'); include_spip('inc/acces'); +include_spip('inc/autoriser'); -// http://doc.spip.org/@exec_auteur_infos_dist -function exec_auteur_infos_dist() -{ - global $id_auteur, $redirect, $echec, $initial, $spip_display, - $connect_statut, $connect_toutes_rubriques, $connect_id_auteur; +function exec_auteur_infos_dist() { + global $connect_id_auteur; - $id_auteur = intval($id_auteur); + $id_auteur = intval(_request('id_auteur')); pipeline('exec_init', array('args' => array( - 'exec'=>'auteur_infos', + 'exec'=> 'auteur_infos', 'id_auteur'=>$id_auteur), - 'data'=>'') ); - - - // id_auteur nul ==> creation, et seuls les admins complets creent - if (!$id_auteur AND $connect_toutes_rubriques) { - $arg = "0/"; - include_spip('inc/headers'); - redirige_par_entete(generer_action_auteur('legender_auteur', $arg, $redirect, true)); - exit; + 'data'=>'' + ) + ); + + if ($id_auteur) { + $s = spip_query("SELECT * FROM spip_auteurs WHERE id_auteur=$id_auteur"); + $auteur = spip_fetch_array($s); + } else { + $auteur = array(); + if (strlen(_request('nom'))) + $auteur['nom'] = _request('nom'); } - $auteur = spip_fetch_array(spip_query("SELECT * FROM spip_auteurs WHERE id_auteur=$id_auteur")); - - if (!$auteur) { - gros_titre(_T('info_acces_interdit')); - exit; - } + $auteur_infos = charger_fonction('auteur_infos', 'inc'); + $fiche = $auteur_infos($auteur, _request('redirect')); - $legender_auteur = charger_fonction('legender_auteur', 'inc'); - $legender_auteur_r = $legender_auteur($id_auteur, $auteur, $initial, $echec, $redirect); - if (_request('var_ajaxcharset')) - ajax_retour($legender_auteur_r); +/* // Si on est appele en ajax, on renvoie la fiche + if (_request('var_ajaxcharset')) { + ajax_retour($fiche); + } + + // Sinon on la met en page else { - +*/ + // Entete if ($connect_id_auteur == $id_auteur) { $commencer_page = charger_fonction('commencer_page', 'inc'); echo $commencer_page($auteur['nom'], "auteurs", "perso"); @@ -65,20 +64,12 @@ function exec_auteur_infos_dist() echo cadre_auteur_infos($id_auteur, $auteur); echo pipeline('affiche_gauche', - array('args' => array( - 'exec'=>'auteur_infos', - 'id_auteur'=>$id_auteur), - 'data'=>'') - ); - - // charger ça tout de suite pour diposer de la fonction ci-dessous - $instituer_auteur = charger_fonction('instituer_auteur', 'inc'); - $instituer_auteur_r = $instituer_auteur($id_auteur, $auteur['statut'], "auteurs_edit"); + array('args' => array ( + 'exec'=>'auteur_infos', + 'id_auteur'=>$id_auteur), + 'data'=>'') + ); - if (statut_modifiable_auteur($id_auteur, $auteur) AND ($spip_display != 4)) { - $iconifier = charger_fonction('iconifier', 'inc'); - $icone = $iconifier('id_auteur', $id_auteur, 'auteur_infos'); - } else $icone =''; creer_colonne_droite(); echo pipeline('affiche_droite', @@ -87,9 +78,26 @@ function exec_auteur_infos_dist() 'id_auteur'=>$id_auteur), 'data'=>'') ); - echo $icone, debut_droite(); - echo debut_cadre_relief("redacteurs-24.gif", true), - $legender_auteur_r, $instituer_auteur_r; + + + // Interface de logo + if ($id_auteur > 0 + AND $spip_display != 4) { + $iconifier = charger_fonction('iconifier', 'inc'); + echo $iconifier('id_auteur', $id_auteur, 'auteur_infos'); + } + + echo debut_droite(); + + echo debut_cadre_relief("redacteurs-24.gif", true); + + // $fiche est vide si on demande par exemple + // a creer un auteur alors que c'est interdit + if ($fiche) { + echo $fiche; + } else { + gros_titre(_T('info_acces_interdit')); + } echo pipeline('affiche_milieu', array('args' => array( @@ -97,12 +105,13 @@ function exec_auteur_infos_dist() 'id_auteur'=>$id_auteur), 'data'=>'')); - auteurs_interventions($id_auteur, $auteur['statut']); + auteurs_interventions($auteur); echo fin_cadre_relief(true), - fin_gauche(), - fin_page(); - } + fin_gauche(), + fin_page(); +/* } */ + } // http://doc.spip.org/@cadre_auteur_infos @@ -132,10 +141,14 @@ function cadre_auteur_infos($id_auteur, $auteur) // http://doc.spip.org/@auteurs_interventions -function auteurs_interventions($id_auteur, $statut) -{ +function auteurs_interventions($auteur) { + $id_auteur = $auteur['id_auteur']; + $statut = $auteur['statut']; + global $connect_statut, $connect_id_auteur; + include_spip('inc/message_select'); + if ($connect_statut == "0minirezo") $aff_art = "'prepa','prop','publie','refuse'"; else if ($connect_id_auteur == $id_auteur) $aff_art = "'prepa','prop','publie'"; else $aff_art = "'prop','publie'"; diff --git a/ecrire/exec/auteurs.php b/ecrire/exec/auteurs.php index 42172187c6..143bd5bd46 100644 --- a/ecrire/exec/auteurs.php +++ b/ecrire/exec/auteurs.php @@ -114,7 +114,7 @@ function bandeau_auteurs($tri, $statut) $res = icone_horizontale(_T('icone_creer_nouvel_auteur'), generer_url_ecrire("auteur_infos"), "auteur-24.gif", "creer.gif", false); else $res = ''; - $res .= icone_horizontale(_T('icone_informations_personnelles'), generer_url_ecrire("auteur_infos","id_auteur=$connect_id_auteur&initial=-1"), "fiche-perso-24.gif","rien.gif", false); + $res .= icone_horizontale(_T('icone_informations_personnelles'), generer_url_ecrire("auteur_infos","id_auteur=$connect_id_auteur"), "fiche-perso-24.gif","rien.gif", false); $n = spip_num_rows(spip_query("SELECT id_auteur FROM spip_auteurs WHERE statut='6forum' LIMIT 1")); if ($n) { diff --git a/ecrire/exec/auteurs_edit.php b/ecrire/exec/auteurs_edit.php deleted file mode 100644 index 15bae5be27..0000000000 --- a/ecrire/exec/auteurs_edit.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php - -/***************************************************************************\ - * SPIP, Systeme de publication pour l'internet * - * * - * Copyright (c) 2001-2007 * - * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * - * * - * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * - * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * -\***************************************************************************/ - -if (!defined("_ECRIRE_INC_VERSION")) return; - -$id_auteur = intval(_request('id_auteur')); -include_spip('inc/headers'); -redirige_par_entete("./?exec=auteur_infos&id_auteur=$id_auteur&initial=-1"); - -?> diff --git a/ecrire/exec/editer_auteurs.php b/ecrire/exec/editer_auteurs.php index c04be373df..68fb44d83c 100644 --- a/ecrire/exec/editer_auteurs.php +++ b/ecrire/exec/editer_auteurs.php @@ -26,11 +26,10 @@ function exec_editer_auteurs_dist() echo minipres(); exit; } - $script_aut = _request('script_aut'); $script = _request('script'); $titre = ($titre=_request('titre'))?urldecode($titre):$titre; $editer_auteurs = charger_fonction('editer_auteurs', 'inc'); - ajax_retour($editer_auteurs($type, $id, 'ajax', _request('cherche_auteur'), _request('ids'),$titre,$script,$script_aut)); + ajax_retour($editer_auteurs($type, $id, 'ajax', _request('cherche_auteur'), _request('ids'),$titre,$script)); } ?> diff --git a/ecrire/exec/legender_auteur.php b/ecrire/exec/legender_auteur.php deleted file mode 100644 index 5fe474c7b4..0000000000 --- a/ecrire/exec/legender_auteur.php +++ /dev/null @@ -1,43 +0,0 @@ -<?php - -/***************************************************************************\ - * SPIP, Systeme de publication pour l'internet * - * * - * Copyright (c) 2001-2007 * - * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * - * * - * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * - * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * -\***************************************************************************/ - -if (!defined("_ECRIRE_INC_VERSION")) return; -include_spip('inc/presentation'); -include_spip('inc/acces'); -include_spip('inc/action'); - -// http://doc.spip.org/@exec_legender_auteur_dist -function exec_legender_auteur_dist() -{ - global $id_auteur, $retour, $echec, $initial, - $connect_statut, $connect_toutes_rubriques, $connect_id_auteur; - - $id_auteur = intval($id_auteur); - - $auteur = spip_fetch_array(spip_query("SELECT * FROM spip_auteurs WHERE id_auteur=$id_auteur")); - - if (!$auteur) { - gros_titre(_T('info_acces_interdit')); - exit; - } - - if (!$echec AND $retour) { - include_spip('inc/headers'); - redirige_par_entete(rawurldecode($retour)); - exit; - } - - $legender_auteur = charger_fonction('legender_auteur', 'inc'); - - ajax_retour($legender_auteur($id_auteur, $auteur, $initial, $echec, $retour)); -} -?> diff --git a/ecrire/exec/message.php b/ecrire/exec/message.php index fc376168a3..fe7286f4cf 100644 --- a/ecrire/exec/message.php +++ b/ecrire/exec/message.php @@ -223,7 +223,7 @@ function http_message_avec_participants($id_message, $statut, $forcer_dest, $che $ifond = 1 - $ifond; $auteurs_tmp[] = "<a href='" . - generer_url_ecrire('auteurs_edit',"id_auteur=" . $id_auteur) ."'>". $nom_auteur . "</a>"; + generer_url_ecrire('auteur_infos',"id_auteur=" . $id_auteur) ."'>". $nom_auteur . "</a>"; $aut = (($id_auteur != $expediteur) ? '' : ("<span class='arial0'>". _T('info_auteur_message') ."</span> ")); diff --git a/ecrire/exec/messagerie.php b/ecrire/exec/messagerie.php index 341d7c62c9..400d1d18fc 100644 --- a/ecrire/exec/messagerie.php +++ b/ecrire/exec/messagerie.php @@ -125,7 +125,7 @@ if (spip_num_rows($result) > 0) { $id_auteur = $row['id_auteur']; $nom = typo($row["nom"]); $total = $row["total"]; - echo "<div class='tr_liste'\nonmouseover=\"changeclass(this,'tr_liste_over');\"\nonmouseout=\"changeclass(this,'tr_liste');\"\nstyle='padding: 2px; padding-left: 10px; border-bottom: 1px solid #cccccc;'><div class='verdana1'><img src='" . _DIR_IMG_PACK . "redac-12.gif'\nstyle='border: 0px' alt=' ' /> <a href='" . generer_url_ecrire("auteurs_edit","id_auteur=$id_auteur"), "'>", + echo "<div class='tr_liste'\nonmouseover=\"changeclass(this,'tr_liste_over');\"\nonmouseout=\"changeclass(this,'tr_liste');\"\nstyle='padding: 2px; padding-left: 10px; border-bottom: 1px solid #cccccc;'><div class='verdana1'><img src='" . _DIR_IMG_PACK . "redac-12.gif'\nstyle='border: 0px' alt=' ' /> <a href='" . generer_url_ecrire("auteur_infos","id_auteur=$id_auteur"), "'>", $nom, "</a> ($total)</div></div>"; if ($count == ceil(spip_num_rows($result)/2)) echo "</td><td valign='top' width='50%' style='background-color: #eeeeee;'>"; diff --git a/ecrire/exec/naviguer.php b/ecrire/exec/naviguer.php index 170367aca8..6d82efa206 100644 --- a/ecrire/exec/naviguer.php +++ b/ecrire/exec/naviguer.php @@ -177,7 +177,7 @@ function infos_naviguer($id_rubrique, $statut, $ze_logo) echo http_img_pack('admin-12.gif','',''), - " <a href='", generer_url_ecrire('auteurs_edit', "id_auteur=$id"), + " <a href='", generer_url_ecrire('auteur_infos', "id_auteur=$id"), "'>", extraire_multi($row['nom']), '</a><br />'; diff --git a/ecrire/inc/legender_auteur.php b/ecrire/inc/auteur_infos.php similarity index 56% rename from ecrire/inc/legender_auteur.php rename to ecrire/inc/auteur_infos.php index bff7a9f49f..39deaf825e 100644 --- a/ecrire/inc/legender_auteur.php +++ b/ecrire/inc/auteur_infos.php @@ -13,44 +13,77 @@ if (!defined("_ECRIRE_INC_VERSION")) return; -// http://doc.spip.org/@inc_legender_auteur_dist -function inc_legender_auteur_dist($id_auteur, $auteur, $initial, $echec='', $redirect='') -{ +// Affiche la fiche de renseignements d'un auteur +// eventuellement editable +function inc_auteur_infos_dist($auteur, $redirect) { + if (!$auteur['id_auteur']) { + if (_request('new') == 'oui') { + $new = true; + } else { + include_spip('inc/headers'); + redirige_par_entete(generer_url_ecrire('auteurs')); + } + } - $corps = (($initial < 0) OR !statut_modifiable_auteur($id_auteur, $auteur)) - ? legender_auteur_voir($auteur, $redirect) - : legender_auteur_saisir($id_auteur, $auteur, $initial, $echec, $redirect); - - return $redirect ? $corps : - ajax_action_greffe("legender_auteur-$id_auteur", $corps); + if (!$new) { + $corps = "<div id='auteur_infos_voir'>" + . legender_auteur_voir($auteur, $redirect) + . "</div>\n"; + } else + $corps = ''; + + if (_request('echec')) + $corps .= afficher_erreurs_auteur(_request('echec')); + + + // Calculer le bloc de statut (modifiable ou non selon) + $instituer_auteur = charger_fonction('instituer_auteur', 'inc'); + $bloc_statut = $instituer_auteur($auteur); + + // Calculer le formulaire general + if (autoriser('modifier', 'auteur', $auteur['id_auteur'])) { + $corps = legender_auteur_saisir($auteur, $corps, $bloc_statut, $redirect); + } else { + // Indiquer le bloc statut (cas non modifiable) ? + $corps .= $bloc_statut; + } + + return $corps; + +} + +function afficher_erreurs_auteur($echec) { + foreach (split('@@@',$echec) as $e) + $corps .= '<p>' . _T($e) . "</p>\n"; + $corps = debut_cadre_relief('', true) + . "<span style='color: red; left-margin: 5px'>" + . http_img_pack("warning.gif", _T('info_avertissement'), "style='width: 48px; height: 48px; float: left; margin: 5px;'") + . $corps + . _T('info_recommencer') + . "</span>\n" + . fin_cadre_relief(true); + + return $corps; } + // http://doc.spip.org/@legender_auteur_saisir -function legender_auteur_saisir($id_auteur, $auteur, $initial, $echec='', $redirect='') -{ +function legender_auteur_saisir($auteur, $auteur_infos_voir, $bloc_statut, $redirect) { global $options, $connect_statut, $connect_id_auteur, $connect_toutes_rubriques; - $corps = ''; - if ($echec){ + $id_auteur = $auteur['id_auteur']; + - foreach (split('@@@',$echec) as $e) - $corps .= '<p>' . _T($e) . "</p>\n"; - - $corps = debut_cadre_relief('', true) - . "<span style='color: red; left-margin: 5px'>" - . http_img_pack("warning.gif", _T('info_avertissement'), "style='width: 48px; height: 48px; float: left; margin: 5px;'") - . $corps - . _T('info_recommencer') - . "</span>\n" - . fin_cadre_relief(true); - } $setmail = ($connect_statut == "0minirezo" AND ($connect_toutes_rubriques OR $auteur['statut']<>'0minirezo')); $setconnecte = ($connect_id_auteur == $id_auteur); + + // Elaborer le formulaire + $corps = ''; $corps .= _T('titre_cadre_signature_obligatoire') . "(" . _T('entree_nom_pseudo') @@ -92,16 +125,13 @@ function legender_auteur_saisir($id_auteur, $auteur, $initial, $echec='', $redir . fin_cadre_enfonce(true) . "\n<br />"; - if ($options == "avancees") { + if ($options == "avancees" + OR strlen($auteur['pgp'])) { $corps .= debut_cadre_enfonce("cadenas-24.gif", true, "", _T('entree_cle_pgp')) . "<textarea name='pgp' class='forml' rows='4' cols='40'>" . entites_html($auteur['pgp']) . "</textarea>\n" . fin_cadre_enfonce(true); - } else { - $corps .= "<input type='hidden' name='pgp' value=\"" - . entites_html($auteur['pgp']) - . "\" />"; } $corps .= "\n<br />"; @@ -165,26 +195,64 @@ function legender_auteur_saisir($id_auteur, $auteur, $initial, $echec='', $redir $corps .= $res; } - $corps .= fin_cadre_relief(true) - . "<br />" - . (!$setconnecte ? '' : apparait_auteur_infos($id_auteur, $auteur)); - - $att = " style='float: " - . $GLOBALS['spip_lang_right'] - . "' class='fondo'"; - - $arg = intval($id_auteur) . '/'; - - return '<div> </div>' - . "\n<div class='serif'>" - . debut_cadre_relief("fiche-perso-24.gif", true, "", _T("icone_informations_personnelles")) - . ( - $redirect - ? generer_action_auteur('legender_auteur', $arg, $redirect, - $corps . "<div align='right'><input type='submit' value='"._T('bouton_enregistrer')."' class='fondo' /></div>") - : ajax_action_post('legender_auteur', $arg, 'auteur_infos', "id_auteur=$id_auteur&initial=-1", $corps, _T('bouton_enregistrer'), $att)) - . fin_cadre_relief(true) - . '</div>'; + $corps .= fin_cadre_relief(true); + + + + // + // Retour + // + + $corps = $auteur_infos_voir + . "<div id='auteur_infos_edit'>\n" + . '<div> </div>' + . "\n<div class='serif'>" + . debut_cadre_relief("fiche-perso-24.gif", + true, "", _T("icone_informations_personnelles")) + . $corps + . fin_cadre_relief(true) + . (!$setconnecte ? '' : apparait_auteur_infos($id_auteur, $auteur)) + . "</div>\n" # /serif + . "</div>\n"; # /auteur_infos_edit + + // Installer la fiche "auteur_infos_voir" + // et masquer le formulaire si on n'en a pas besoin + $new = ($auteur_infos_voir == ''); + if (!$new + AND !_request('echec') + AND !_request('edit')) { + $corps .= "<script>jQuery('#auteur_infos_edit').hide()</script>\n"; + } else { + $corps .= "<script>jQuery('#auteur_infos_voir').hide()</script>\n"; + } + + + // Formulaire de statut + $corps .= $bloc_statut; + + + // Lier a un article (creation d'un auteur depuis un article) + if ($id_article = intval(_request('lier_id_article'))) + $corps .= "<input type='hidden' name='lier_id_article' value='$id_article' />\n"; + + // Redirection apres enregistrement ? + if ($redirect) + $corps .= "<input type='hidden' name='redirect' value=\"".attribut_html($redirect)."\" />\n"; + + $corps .= "<div align='right'><input type='submit' value='"._T('bouton_enregistrer')."' class='fondo' /></div>"; + + + if (!$redirect) + $redirect = generer_url_ecrire('auteur_infos', "id_auteur=$id_auteur", '&'); + + $arg = intval($id_auteur); + $ret .= generer_action_auteur('editer_auteur', $arg, $redirect, $corps, ' method="POST"'); + + $ret .= fin_cadre_relief(true) + . '</div>'; + + + return $ret; } // @@ -192,8 +260,7 @@ function legender_auteur_saisir($id_auteur, $auteur, $initial, $echec='', $redir // // http://doc.spip.org/@apparait_auteur_infos -function apparait_auteur_infos($id_auteur, $auteur) -{ +function apparait_auteur_infos($id_auteur, $auteur) { if ($auteur['imessage']=="non"){ $res = "<input type='radio' name='perso_activer_imessage' value='oui' id='perso_activer_imessage_on'>" @@ -211,86 +278,84 @@ function apparait_auteur_infos($id_auteur, $auteur) . "</label> "; } - return debut_cadre_formulaire('', true) - . debut_cadre_relief("messagerie-24.gif", true, "", _T('info_liste_redacteurs_connectes')) - . "\n<div>" - . _T('texte_auteur_messagerie') - . "</div>" - . $res - . fin_cadre_relief(true) - . "<br />" - . fin_cadre_formulaire(true); + return + "<br />" + .debut_cadre_formulaire('', true) + . debut_cadre_relief("messagerie-24.gif", true, "", _T('info_liste_redacteurs_connectes')) + . "\n<div>" + . _T('texte_auteur_messagerie') + . "</div>" + . $res + . fin_cadre_relief(true) + . "<br />" + . fin_cadre_formulaire(true); } // http://doc.spip.org/@legender_auteur_voir -function legender_auteur_voir($auteur, $redirect) -{ - global $connect_toutes_rubriques, $connect_statut, $connect_id_auteur, $champs_extra, $options,$spip_lang_right ; - - $id_auteur=$auteur['id_auteur']; - $nom=$auteur['nom']; - $bio=$auteur['bio']; - $email=$auteur['email']; - $nom_site_auteur=$auteur['nom_site']; - $url_site=$auteur['url_site']; - $statut=$auteur['statut']; - $pgp=$auteur["pgp"]; - $extra = $auteur["extra"]; +function legender_auteur_voir($auteur) { + global $connect_toutes_rubriques, $connect_statut, $connect_id_auteur, $champs_extra, $options, $spip_lang_right; + + if (!$id_auteur = $auteur['id_auteur']) { + $new = true; + } $res = "<table width='100%' cellpadding='0' border='0' cellspacing='0'>" . "<tr>" . "<td style='width: 100%' valign='top'>" - . gros_titre($nom,'',false) + . gros_titre( + sinon($auteur['nom'],_T('item_nouvel_auteur')), + '',false) . "<div> </div>"; - if (strlen($email) > 2) - $res .= "<div>"._T('email_2')." <b><a href='mailto:$email'>$email</a></b></div>"; + if (strlen($auteur['email'])) + $res .= "<div>"._T('email_2') + ." <b><a href='mailto:".htmlspecialchars($auteur['email'])."'>" + .$auteur['email']."</a></b></div>"; - if ($url_site) { - if (!$nom_site_auteur) $nom_site_auteur = _T('info_site'); - $res .= propre(_T('info_site_2')." [{{".$nom_site_auteur."}}->".$url_site."]"); + if ($auteur['url_site']) { + if (!$auteur['nom_site']) + $auteur['nom_site'] = _T('info_site'); + $res .= propre(_T('info_site_2')." [{{".$auteur['nom_site']."}}->".$auteur['url_site']."]"); } - - $res .= "</td>" - . "<td>"; - - if (statut_modifiable_auteur($id_auteur, $auteur)) { - $ancre = "legender_auteur-$id_auteur"; + + // Bouton "modifier" ? + if (autoriser('modifier', 'auteur', $id_auteur)) { + $res .= "</td>\n<td id='bouton_modifier_auteur'>"; $clic = _T("admin_modifier_auteur"); - $h = generer_url_ecrire("auteur_infos","id_auteur=$id_auteur"); - if ((_SPIP_AJAX === 1 ) AND !$redirect) { - $evt = "\nonclick=" . ajax_action_declencheur($h,$ancre); - $h = "<a\nhref='$h#$ancre'$evt>$clic</a>"; - } - $res .= icone($clic, $h, "redacteurs-24.gif", "edit.gif", '', '',true); + $h = generer_url_ecrire("auteur_infos","id_auteur=$id_auteur&edit=oui"); + $h = "<a\nhref='$h'>$clic</a>"; + $res .= icone($clic, $h, "redacteurs-24.gif", "edit.gif", '', '',true); + + $res .= "<script type='text/javascript'><!-- + jQuery('#bouton_modifier_auteur a') + .click(function() { + jQuery('#auteur_infos_edit') + .show(); + jQuery('#auteur_infos_voir') + .hide(); + return false; + }); + // --></script>\n"; } + $res .= "</td></tr></table>"; - if (strlen($bio) > 0) { $res .= "<div>".propre("<quote>".$bio."</quote>")."</div>"; } - if (strlen($pgp) > 0) { $res .= "<div>".propre("PGP:<cadre>".$pgp."</cadre>")."</div>"; } + if (strlen($auteur['bio'])) { + $res .= propre("<quote>".$auteur['bio']."</quote>"); + } + + if (strlen($auteur['pgp'])) { + $res .= propre("PGP: <cadre>".$auteur['pgp']."</cadre>"); + } - if ($champs_extra AND $extra) { + if ($GLOBALS['champs_extra'] AND $auteur['extra']) { include_spip('inc/extra'); - $res .= extra_affichage($extra, "auteurs"); + $res .= extra_affichage($auteur['extra'], 'auteurs'); } return $res; } -// http://doc.spip.org/@statut_modifiable_auteur -function statut_modifiable_auteur($id_auteur, $auteur) -{ - global $connect_statut, $connect_toutes_rubriques, $connect_id_auteur; - -// on peut se changer soi-meme - return (($connect_id_auteur == $id_auteur) || - // sinon on doit etre admin - // et pas admin restreint pour changer un autre admin ou creer qq - (($connect_statut == "0minirezo") && - ($connect_toutes_rubriques OR - ($id_auteur AND ($auteur['statut'] != "0minirezo"))))); -} - ?> diff --git a/ecrire/inc/autoriser.php b/ecrire/inc/autoriser.php index 65e840dcd4..046c96fcf4 100644 --- a/ecrire/inc/autoriser.php +++ b/ecrire/inc/autoriser.php @@ -310,6 +310,7 @@ function autoriser_webmestre_dist($faire, $type, $id, $qui, $opt) { // Attention tout depend de ce qu'on veut modifier // http://doc.spip.org/@autoriser_auteur_modifier_dist function autoriser_auteur_modifier_dist($faire, $type, $id, $qui, $opt) { + // Ni admin ni redacteur => non if (!in_array($qui['statut'], array('0minirezo', '1comite'))) return false; @@ -319,14 +320,42 @@ function autoriser_auteur_modifier_dist($faire, $type, $id, $qui, $opt) { if ($qui['statut'] == '1comite') { if ($opt['statut'] OR $opt['restreintes']) return false; - if ($id == $qui['id_auteur']) + else if ($id == $qui['id_auteur']) return true; - return false; + else + return false; + } + + // Un admin restreint peut modifier/creer un auteur non-admin mais il + // n'a le droit ni de le promouvoir admin, ni de changer les rubriques + if ($qui['restreint']) { + if ($opt['statut'] == '0minirezo' + OR $opt['restreintes']) { + return false; + } else { + if ($id == $qui['id_auteur']) { + if ($opt['statut']) + return false; + else + return true; + } + else if ($id_auteur = intval($id)) { + $s = spip_query("SELECT statut FROM spip_auteurs WHERE id_auteur=$id_auteur"); + if ($t = spip_fetch_array($s) + AND $t['statut'] != '0minirezo') + return true; + else + return false; + } + // id = 0 => creation + else + return true; + } } + // Un admin complet fait ce qu'elle veut return true; } - ?> diff --git a/ecrire/inc/boutons.php b/ecrire/inc/boutons.php index 3b67cda20c..a97561f618 100644 --- a/ecrire/inc/boutons.php +++ b/ecrire/inc/boutons.php @@ -264,7 +264,7 @@ function definir_barre_onglets($rubrique) { case 'auteur': $onglets['auteur']= new Bouton('auteur-24.gif', 'onglet_auteur', - generer_url_ecrire("auteurs_edit","id_auteur=$id_auteur")); + generer_url_ecrire("auteur_infos","id_auteur=$id_auteur")); $onglets['infos']= new Bouton('fiche-perso-24.gif', 'icone_informations_personnelles', generer_url_ecrire("auteur_infos","id_auteur=$id_auteur")); diff --git a/ecrire/inc/commencer_page.php b/ecrire/inc/commencer_page.php index 9c837e3515..9c53e03aff 100644 --- a/ecrire/inc/commencer_page.php +++ b/ecrire/inc/commencer_page.php @@ -126,7 +126,7 @@ function init_body($rubrique='accueil', $sous_rubrique='accueil', $id_rubrique=' . (($spip_ecran == "large") ? 300 : 110) . "px; height: 14px; overflow: hidden;'>" . "<a href='" - . generer_url_ecrire("auteur_infos","id_auteur=$connect_id_auteur&initial=-1") + . generer_url_ecrire("auteur_infos","id_auteur=$connect_id_auteur") . "' class='icone26' title=\"" . entites_html(_T('icone_informations_personnelles')) . '">' diff --git a/ecrire/inc/editer_auteurs.php b/ecrire/inc/editer_auteurs.php index 32fbdb8931..479d5993d8 100644 --- a/ecrire/inc/editer_auteurs.php +++ b/ecrire/inc/editer_auteurs.php @@ -20,14 +20,9 @@ define('_SPIP_SELECT_MIN_AUTEURS', 10); // en dessous: balise Select define('_SPIP_SELECT_MAX_AUTEURS', 100); // au-dessus: saisie + return // http://doc.spip.org/@inc_editer_auteurs_dist -function inc_editer_auteurs_dist($type, $id, $flag, $cherche_auteur, $ids, $titre_boite = NULL, $script_edit_objet = NULL, $script_edit_auteur = NULL) -{ +function inc_editer_auteurs_dist($type, $id, $flag, $cherche_auteur, $ids, $titre_boite = NULL, $script_edit_objet = NULL) { global $options; $arg_ajax = "&id_{$type}=$id"; - if ($script_edit_auteur===NULL) - $script_edit_auteur = 'auteur_infos'; - else - $arg_ajax .= "&script_aut=$script_edit_auteur"; if ($script_edit_objet===NULL) $script_edit_objet = $type.'s'; if ($titre_boite===NULL) $titre_boite = _T('texte_auteurs'). aide("artauteurs"); @@ -36,7 +31,7 @@ function inc_editer_auteurs_dist($type, $id, $flag, $cherche_auteur, $ids, $titr $cond_les_auteurs = ""; - $aff_les_auteurs = afficher_auteurs_objet($type, $id, $flag, $cond_les_auteurs, $script_edit_objet, $script_edit_auteur, $arg_ajax); + $aff_les_auteurs = afficher_auteurs_objet($type, $id, $flag, $cond_les_auteurs, $script_edit_objet, $arg_ajax); if ($flag AND $options == 'avancees') { $futurs = ajouter_auteurs_objet($type, $id, $cond_les_auteurs,$script_edit_objet, $arg_ajax); @@ -55,7 +50,7 @@ function editer_auteurs_objet($type, $id, $flag, $cherche_auteur, $ids, $les_aut $bouton_creer_auteur = $GLOBALS['connect_toutes_rubriques']; $clic = _T('icone_creer_auteur'); - $arg = "0/$id/" . ($statut ? $statut : '1comite'); + // // complement de action/editer_auteurs.php pour notifier la recherche d'auteur // @@ -67,8 +62,10 @@ function editer_auteurs_objet($type, $id, $flag, $cherche_auteur, $ids, $les_aut if ($type=='article' && $bouton_creer_auteur) { // pas generique pour le moment - $legende = redirige_action_auteur("legender_auteur", $arg, "articles","id_article=$id"); + $legende = generer_url_ecrire("bolino", "new=oui&lier_id_article=$id"); $legende = parametre_url($legende, 'nom', $cherche_auteur); + $legende = parametre_url($legende, 'redirect', + generer_url_ecrire('articles', "id_article=$id", '&')); $reponse .="<div style='width: 200px;'>" . icone_horizontale($clic, $legende, "redacteurs-24.gif", "creer.gif", false) @@ -92,7 +89,10 @@ function editer_auteurs_objet($type, $id, $flag, $cherche_auteur, $ids, $les_aut if ($type=='article' && $bouton_creer_auteur) { // pas generique pour le moment - $legende = redirige_action_auteur("legender_auteur",$arg, "articles","id_article=$id"); + $legende = generer_url_ecrire("bolino", "new=oui&lier_id_article=$id"); + $legende = parametre_url($legende, 'nom', $cherche_auteur); + $legende = parametre_url($legende, 'redirect', + generer_url_ecrire('articles', "id_article=$id", '&')); $clic = "<span class='verdana1'><b>$clic</b></span>"; $res = "<div style='width:170px;'>" @@ -201,7 +201,7 @@ function rechercher_auteurs_objet($cherche_auteur, $ids, $type, $id, $script_edi } // http://doc.spip.org/@afficher_auteurs_objet -function afficher_auteurs_objet($type, $id, $flag_editable, $cond_les_auteurs, $script_edit, $script_edit_auteur, $arg_ajax) +function afficher_auteurs_objet($type, $id, $flag_editable, $cond_les_auteurs, $script_edit, $arg_ajax) { global $connect_statut, $options,$connect_id_auteur, $spip_display; @@ -236,7 +236,7 @@ function afficher_auteurs_objet($type, $id, $flag_editable, $cond_les_auteurs, $ while ($row = spip_fetch_array($result)) { $id_auteur = $row['id_auteur']; - $vals = $formater_auteur($id_auteur, $script_edit_auteur); + $vals = $formater_auteur($id_auteur); if ($flag_editable AND ($connect_id_auteur != $id_auteur OR $connect_statut == '0minirezo') AND $options == 'avancees') { $vals[] = ajax_action_auteur('editer_auteurs', "$id,$type,-$id_auteur", $script_edit, "id_{$type}=$id", array(_T('lien_retirer_auteur')." ". http_img_pack('croix-rouge.gif', "X", " class='puce' style='vertical-align: bottom;'")),$arg_ajax); diff --git a/ecrire/inc/formater_auteur.php b/ecrire/inc/formater_auteur.php index cca9fadbae..71f8268504 100644 --- a/ecrire/inc/formater_auteur.php +++ b/ecrire/inc/formater_auteur.php @@ -24,7 +24,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // // http://doc.spip.org/@inc_formater_auteur_dist -function inc_formater_auteur_dist($id_auteur, $script_edition = 'auteur_infos') { +function inc_formater_auteur_dist($id_auteur) { global $connect_id_auteur, $spip_lang_rtl, $connect_statut; @@ -48,7 +48,7 @@ function inc_formater_auteur_dist($id_auteur, $script_edition = 'auteur_infos') $nom = "<span style='color: red'>" . _T('texte_vide') . '</span>'; $vals[] = "<a href='" - . generer_url_ecrire($script_edition, "id_auteur=$id_auteur&initial=-1") + . generer_url_ecrire('auteur_infos', "id_auteur=$id_auteur") . "' $bio_auteur>$nom</a>"; if ($url_site_auteur = $row["url_site"]) $vals[] = "<a href='$url_site_auteur'>"._T('info_site_min')."</a>"; diff --git a/ecrire/inc/forum.php b/ecrire/inc/forum.php index 727edb463e..2ff24eb567 100644 --- a/ecrire/inc/forum.php +++ b/ecrire/inc/forum.php @@ -101,7 +101,7 @@ function boutons_controle_forum($id_forum, $forum_stat, $forum_id_auteur=0, $ref $suppression = false; $controle = "<br /><span style='color: red; font-weight: bold;'>"._T('info_message_supprime')." $forum_ip</span>"; if($forum_id_auteur) - $controle .= " - <a href='" . generer_url_ecrire('auteurs_edit', "id_auteur=$forum_id_auteur") . + $controle .= " - <a href='" . generer_url_ecrire('auteur_infos', "id_auteur=$forum_id_auteur") . "'>" ._T('lien_voir_auteur'). "</a>"; break; # forum propose (a moderer) sur le site public diff --git a/ecrire/inc/gadgets.php b/ecrire/inc/gadgets.php index b878b5e2c8..b577cfab83 100644 --- a/ecrire/inc/gadgets.php +++ b/ecrire/inc/gadgets.php @@ -101,7 +101,7 @@ function bandeau_gadgets($largeur, $options, $id_rubrique) { // Infos perso $bandeau .= "\n<div id='bandeauinfoperso' class='bandeau bandeau_couleur_sous' style='$spip_lang_left: 200px;'>" - . "<a href='" . generer_url_ecrire("auteurs_edit","id_auteur=$connect_id_auteur") . "' class='lien_sous'>" + . "<a href='" . generer_url_ecrire("auteur_infos","id_auteur=$connect_id_auteur") . "' class='lien_sous'>" . _T('icone_informations_personnelles') . "</a>" . "</div>"; diff --git a/ecrire/inc/informer_auteur.php b/ecrire/inc/informer_auteur.php index 03f2f1175a..e50b6914bc 100644 --- a/ecrire/inc/informer_auteur.php +++ b/ecrire/inc/informer_auteur.php @@ -54,7 +54,7 @@ function inc_informer_auteur_dist($id) return "<div class='arial2' style='padding: 5px; background-color: white; border: 1px solid $couleur_foncee; border-top: 0px;'>" . (!$res ? '' : $res) . "<div><a href='" - . generer_url_ecrire('auteur_infos', "id_auteur=$id&initial=-1") + . generer_url_ecrire('auteur_infos', "id_auteur=$id") . "'>" . bonhomme_statut($row) . "</a> " diff --git a/ecrire/inc/instituer_auteur.php b/ecrire/inc/instituer_auteur.php index 8eb040d05a..10ef03b9a3 100644 --- a/ecrire/inc/instituer_auteur.php +++ b/ecrire/inc/instituer_auteur.php @@ -23,118 +23,62 @@ include_spip('inc/message_select'); // les admins restreints les voient mais // ne peuvent les utiliser que pour mettre un auteur a la poubelle -// http://doc.spip.org/@inc_instituer_auteur_dist -function inc_instituer_auteur_dist($id_auteur, $statut, $url_self) -{ +function inc_instituer_auteur_dist($auteur) { global $connect_toutes_rubriques, $connect_id_auteur, $connect_statut, $spip_lang_right, $spip_lang; - - if (($connect_statut != '0minirezo') - OR (!($id_auteur = intval($id_auteur)))) - return ''; - - $result_admin = spip_query("SELECT rubriques.id_rubrique, " . creer_objet_multi ("titre", $spip_lang) . " FROM spip_auteurs_rubriques AS lien, spip_rubriques AS rubriques WHERE lien.id_auteur=$id_auteur AND lien.id_rubrique=rubriques.id_rubrique ORDER BY multi"); - - $restreint = spip_num_rows($result_admin); - - if (!$restreint) - $res = _T('info_admin_gere_toutes_rubriques'); - else { - $modif = ($connect_toutes_rubriques AND $connect_id_auteur != $id_auteur) ? "id_auteur=$id_auteur" : ''; - - $lien = !$modif - ? '' - : array(_T('lien_supprimer_rubrique')); - - $res = ''; - - while ($row_admin = spip_fetch_array($result_admin)) { - $id_rubrique = $row_admin["id_rubrique"]; - - $res .= "\n<li><a href='" - . generer_url_ecrire("naviguer","id_rubrique=$id_rubrique") - . "'>" - . typo($row_admin["multi"]) - . "</a>" - . (!$modif ? '' : - " [<span class='spip_x-small'>" - . ajax_action_auteur('instituer_auteur', "$id_auteur/-$id_rubrique", $url_self, $modif, $lien) - . "</span>]") - . '</li>'; - } - - $res = _T('info_admin_gere_rubriques') - . "\n<ul style='list-style-image: url(" - . _DIR_IMG_PACK - . "rubrique-12.gif)'>" - . $res - . "</ul>"; - } - - // si pas admin au chargement, rien a montrer. - $vis = ($statut == '0minirezo') ? '' : " style='display: none'"; - - // Ajouter une rubrique a un administrateur restreint - if ($connect_toutes_rubriques AND $connect_id_auteur != $id_auteur) { - $label = $restreint ? _T('info_ajouter_rubrique') : _T('info_restreindre_rubrique'); + if ($connect_statut != '0minirezo') return ''; - $chercher_rubrique = charger_fonction('chercher_rubrique', 'inc'); + $statut = $auteur['statut']; - $res .= debut_block_visible("statut$id_auteur") - . "\n<div id='ajax_rubrique' class='arial1'><br />\n" - . "<b>" - . $label - . "</b><br />" - . "\n<input name='id_auteur' value='" - . $id_auteur - . "' type='hidden' />" - . $chercher_rubrique(0, 'auteur', false) - . "</div>\n" - . fin_block(); + if (!$id_auteur = $auteur['id_auteur']) { + $new = true; + $statut = '1comite'; } - - $droit = (($connect_toutes_rubriques OR $statut != "0minirezo") - && ($connect_id_auteur != $id_auteur)); $ancre = "instituer_auteur-" . intval($id_auteur); - if ($droit) { - $res = "<b>"._T('info_statut_auteur')." </b> " - . choix_statut_auteur($statut, "$ancre-aff") - . "<div id='$ancre-aff'$vis>" - . $res - . "</div>"; + if ($menu = choix_statut_auteur($statut, $id_auteur, "$ancre-aff")) + $res = "<b>"._T('info_statut_auteur')."</b> " . $menu; - $res = ajax_action_post('instituer_auteur', $id_auteur, $url_self, (!$id_auteur ? "" : "id_auteur=$id_auteur"), $res, _T('bouton_valider'), " style='float: $spip_lang_right' class='fondo'")."<br class='nettoyeur' />"; - } + // Prepare le bloc des rubriques restreintes ; + // si l'auteur n'est pas admin, on le cache + $vis = ($statut == '0minirezo') ? '' : " style='display: none'"; + if ($menu_restreints = choix_rubriques_admin_restreint($auteur)) + $res .= "<div id='$ancre-aff'$vis>" + . $menu_restreints + . "</div>"; - return (_request('var_ajaxcharset')) - ? $res - : (debut_cadre_relief('',true) + return debut_cadre_relief('',true) . "<div id='" . $ancre . "'>" . $res . '</div>' - . fin_cadre_relief(true)); + . fin_cadre_relief(true); } - // Menu de choix d'un statut d'auteur // http://doc.spip.org/@choix_statut_auteur -function choix_statut_auteur($statut, $ancre) { - global $connect_toutes_rubriques; +function choix_statut_auteur($statut, $id_auteur, $ancre) { + + // Le menu doit-il etre actif ? + if (!autoriser('modifier', 'auteur', $id_auteur, + null, array('statut' => '?'))) + return ''; + // Calculer le menu $menu = "<select name='statut' size='1' class='fondl' - onchange=\"(this.selectedIndex==0)?jQuery('#$ancre').slideDown():jQuery('#$ancre:visible').slideUp();\">"; + onchange=\"(this.options[this.selectedIndex].value == '0minirezo')?jQuery('#$ancre').slideDown():jQuery('#$ancre:visible').slideUp();\">"; - // Si on est admin restreint, on n'a pas le droit de modifier un admin - if ($connect_toutes_rubriques) + // A-t-on le droit de promouvoir cet auteur comme admin ? + if (autoriser('modifier', 'auteur', intval($id_auteur), + null, array('statut' => '0minirezo'))) { $menu .= "\n<option" . mySel("0minirezo",$statut) . ">" . _T('item_administrateur_2') . '</option>'; + } // Ajouter le choix "comite" $menu .= @@ -187,4 +131,98 @@ function choix_statut_auteur($statut, $ancre) { return $menu; } + + +function choix_rubriques_admin_restreint($auteur) { + global $connect_toutes_rubriques, $connect_id_auteur, $connect_statut, $spip_lang_right, $spip_lang; + + $id_auteur = intval($auteur['id_auteur']); + + $result_admin = spip_query("SELECT rubriques.id_rubrique, " . creer_objet_multi ("titre", $spip_lang) . " FROM spip_auteurs_rubriques AS lien, spip_rubriques AS rubriques WHERE lien.id_auteur=$id_auteur AND lien.id_rubrique=rubriques.id_rubrique ORDER BY multi"); + + + if (spip_num_rows($result_admin) == 0) { + $phrase = _T('info_admin_gere_toutes_rubriques')."\n"; + $menu = ''; + } else { + // L'autorisation de modifier les rubriques restreintes + // est egale a l'autorisation de passer en admin + $modif = autoriser('modifier', 'auteur', $id_auteur, null, array('statut' => '0minirezo')); + + // Il faut un element zero pour montrer qu'on a l'interface + // sinon il est impossible de deslectionner toutes les rubriques + $menu = $modif + ? "<input type='hidden' name='restreintes[]' value='0' />\n" + : ''; + + while ($row_admin = spip_fetch_array($result_admin)) { + $id_rubrique = $row_admin["id_rubrique"]; + + $menu .= "\n<li id='rubrest_$id_rubrique'>" + . ($modif + ? "<input type='checkbox' checked='checked' name='restreintes[]' value='$id_rubrique' />\n" + : '' + ) + . "<a href='?exec=naviguer&id_rubrique=$id_rubrique'>" + . typo($row_admin["multi"]) + . "</a>" + . '</li>'; + } + + $phrase = _T('info_admin_gere_rubriques'); + } + + if ($auteur['statut'] != '0minirezo') + $phrase = ''; + + $res = "<p>$phrase</p>\n" + . "<ul id='liste_rubriques_restreintes' style='list-style-image: url(" + . _DIR_IMG_PACK + . "rubrique-12.gif)'>" + . $menu + . "</ul>\n"; + + // Ajouter une rubrique a un administrateur restreint + if ($connect_toutes_rubriques AND $connect_id_auteur != $id_auteur) { + + $label = $restreint + ? _T('info_ajouter_rubrique') + : _T('info_restreindre_rubrique'); + + $chercher_rubrique = charger_fonction('chercher_rubrique', 'inc'); + + $res .= debut_block_visible("statut$id_auteur") + . "\n<div id='ajax_rubrique' class='arial1'><br />\n" + . "<b>" + . $label + . "</b><br />" + . "\n<input name='id_auteur' value='" + . $id_auteur + . "' type='hidden' />" + . $chercher_rubrique(0, 'auteur', false) + . "</div>\n" + + // onchange = pour le menu + // l'evenement doit etre provoque a la main par le selecteur ajax + . "<script type='text/javascript'><!-- + jQuery('input[@name=id_parent]') + .bind('change', function(){ + var id_parent = this.value; + var titre = jQuery('#titreparent').attr('value') || this.options[this.selectedIndex].text; + // Ajouter la rubrique selectionnee au formulaire, + // sous la forme d'un input name='rubriques[]' + var el = '<input type=\'checkbox\' checked=\'checked\' name=\'restreintes[]\' value=\''+id_parent+'\' /> ' + '<a href=\'?exec=naviguer&id_rubrique='+id_parent+'\'>'+titre+'</a>'; + if (jQuery('#rubrest_'+id_parent).size() == 0) { + jQuery('#liste_rubriques_restreintes') + .append('<li id=\'rubrest_'+id_parent+'\'>'+el+'</li>'); + } + }); //--></script>\n" + + . fin_block(); + } + + return $res; +} + + ?> diff --git a/ecrire/inc/message_select.php b/ecrire/inc/message_select.php index d5591e1b98..ad2d9e95e8 100644 --- a/ecrire/inc/message_select.php +++ b/ecrire/inc/message_select.php @@ -94,7 +94,7 @@ function afficher_message_boucles($row, &$messages_vus, $voir_logo, $afficher_au $auteurs = ''; while ($row_auteurs = spip_fetch_array($result_auteurs)) { $id_auteur = $row_auteurs['id_auteur']; - $auteurs[] = "<a href='" . generer_url_ecrire("auteurs_edit","id_auteur=$id_auteur") . "'>".typo($row_auteurs['nom'])."</a>"; + $auteurs[] = "<a href='" . generer_url_ecrire("auteur_infos","id_auteur=$id_auteur") . "'>".typo($row_auteurs['nom'])."</a>"; } if ($auteurs AND $type == 'normal') { diff --git a/ecrire/inc/urls.php b/ecrire/inc/urls.php index 007461194b..f736670e32 100644 --- a/ecrire/inc/urls.php +++ b/ecrire/inc/urls.php @@ -66,7 +66,8 @@ function generer_url_ecrire_auteur($id_auteur, $statut='') { $args = "id_auteur=" . intval($id_auteur); if (!$statut) return generer_url_action('redirect', $args); - else return generer_url_ecrire('auteurs_edit',$args); + else + return generer_url_ecrire('auteur_infos',$args); } // http://doc.spip.org/@generer_url_ecrire_forum diff --git a/ecrire/inc/vieilles_defs.php b/ecrire/inc/vieilles_defs.php index 90e50ddcbe..2cbb57d6f8 100644 --- a/ecrire/inc/vieilles_defs.php +++ b/ecrire/inc/vieilles_defs.php @@ -95,7 +95,7 @@ spip_log('affiche_auteur_boucle() '.$GLOBALS['REQUEST_URI'].' - '.$_SERVER['SCRI $nom = $row['nom']; $s = bonhomme_statut($row); - $s .= "<a href='" . generer_url_ecrire("auteurs_edit","id_auteur=$id_auteur") . "'>"; + $s .= "<a href='" . generer_url_ecrire("auteur_infos","id_auteur=$id_auteur") . "'>"; $s .= typo($nom); $s .= "</a>"; $vals[] = $s; -- GitLab