Subversion Repositories Sites.tela-botanica.org

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

<?php

/***************************************************************************\
 *  SPIP, Systeme de publication pour l'internet                           *
 *                                                                         *
 *  Copyright (c) 2001-2005                                                *
 *  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.   *
\***************************************************************************/


include ("inc.php3");
include_ecrire ("inc_acces.php3");
include_ecrire ("inc_logos.php3");
include_ecrire ("inc_session.php3");
include_ecrire ("inc_filtres.php3");
include_ecrire ("inc_abstract_sql.php3");

// securite
$id_auteur = floor($id_auteur);


//
// Auteurs a acces restreint
//
function afficher_auteur_rubriques($leparent){
        global $id_parent;
        global $id_rubrique;
        global $toutes_rubriques;
        global $i;
        
        $i++;
        $query="SELECT * FROM spip_rubriques WHERE id_parent=$leparent ORDER BY 0+titre, titre";
        $result=spip_query($query);

        while($row=spip_fetch_array($result)){
                $my_rubrique=$row['id_rubrique'];
                $titre=typo($row['titre']);
        
                if (!ereg(",$my_rubrique,","$toutes_rubriques")){
                        $espace = str_repeat("&nbsp", $i*2) . "|";
                        if ($i==1)
                                $espace = "*";

                        echo "<OPTION VALUE='$my_rubrique'>$espace ".supprimer_tags($titre)."\n";
                        afficher_auteur_rubriques($my_rubrique);
                }
        }
        $i=$i-1;
}

// securite
if ($connect_statut != "0minirezo" AND $connect_id_auteur != $id_auteur) {
        gros_titre(_T('info_acces_interdit'));
        exit;
}

//
// Recuperer l'auteur (id_auteur) ... ou l'inventer
//
unset($auteur);

if ($id_auteur) {
        $auteur = spip_fetch_array(spip_query("SELECT * FROM spip_auteurs WHERE id_auteur=$id_auteur"));
        $new = false;   // eviter hack
} else {
        if (!$auteur['nom'] = $titre) {
                $auteur['nom'] = filtrer_entites(_T('item_nouvel_auteur'));
                $onfocus = " onfocus=\"if(!antifocus){this.value='';antifocus=true;}\"";
        }
        $auteur['statut'] = '1comite'; // statut par defaut a la creation
        $auteur['source'] = 'spip';
}


//
// Modification (et creation si besoin)
//
if ($nom) { // si on poste un nom, c'est qu'on modifie une fiche auteur
        $auteur['nom'] = corriger_caracteres($nom);

        // login et mot de passe
        unset ($modif_login);
        $old_login = $auteur['login'];
        if (($new_login<>$old_login) AND $connect_statut == '0minirezo' AND $connect_toutes_rubriques AND $auteur['source'] == 'spip') {
                if ($new_login) {
                        if (strlen($new_login) < 4)
                                $echec .= "<p>"._T('info_login_trop_court');
                        else if (spip_num_rows(spip_query("SELECT * FROM spip_auteurs WHERE login='".addslashes($new_login)."' AND id_auteur!=$id_auteur AND statut!='5poubelle'")))
                                $echec .= "<p>"._T('info_login_existant');
                        else if ($new_login != $old_login) {
                                $modif_login = true;
                                $auteur['login'] = $new_login;
                        }
                }
                // suppression du login
                else {
                        $auteur['login'] = '';
                        $modif_login = true;
                }
        }

        // changement de pass, a securiser en jaja ?
        if ($new_pass AND ($statut != '5poubelle') AND $auteur['login'] AND $auteur['source'] == 'spip') {
                if ($new_pass != $new_pass2)
                        $echec .= "<p>"._T('info_passes_identiques');
                else if ($new_pass AND strlen($new_pass) < 6)
                        $echec .= "<p>"._T('info_passe_trop_court');
                else {
                        $modif_login = true;
                        $auteur['new_pass'] = $new_pass;
                }
        }

        if ($modif_login) {
                include_ecrire('inc_session.php3');
                zap_sessions ($auteur['id_auteur'], true);
                if ($connect_id_auteur == $auteur['id_auteur'])
                        supprimer_session($GLOBALS['spip_session']);
        }

        // email
        // seuls les admins peuvent modifier l'email
        // les admins restreints peuvent modifier l'email des redacteurs
        // mais pas des autres admins
        if ($connect_statut == '0minirezo'
        AND ($connect_toutes_rubriques OR $statut<>'0minirezo')) { 
                if ($email !='' AND !email_valide($email)) {
                        $echec .= "<p>"._T('info_email_invalide');
                        $auteur['email'] = $email;
                } else
                        $auteur['email'] = $email;
        }

        if ($connect_id_auteur == $id_auteur) {
                if ($perso_activer_imessage) {
                        $query = "UPDATE spip_auteurs SET imessage='$perso_activer_imessage' WHERE id_auteur=$id_auteur";
                        $result = spip_query($query);
                        $auteur['imessage'] = $perso_activer_imessage;
                }
        }

        // variables sans probleme
        $auteur['bio'] = corriger_caracteres($bio);
        $auteur['pgp'] = corriger_caracteres($pgp);
        $auteur['nom_site'] = corriger_caracteres($nom_site_auteur); // attention mix avec $nom_site_spip ;(
        $auteur['url_site'] = vider_url($url_site);

        if ($new_pass) {
                $htpass = generer_htpass($new_pass);
                $alea_actuel = creer_uniqid();
                $alea_futur = creer_uniqid();
                $pass = md5($alea_actuel.$new_pass);
                $query_pass = " pass='$pass', htpass='$htpass', alea_actuel='$alea_actuel', alea_futur='$alea_futur', ";
                if ($auteur['id_auteur'])
                  effacer_low_sec($auteur['id_auteur']);
        } else
                $query_pass = '';

        // recoller les champs du extra
        if ($champs_extra) {
                include_ecrire("inc_extra.php3");
                $extra = extra_recup_saisie("auteurs");
                $add_extra = ", extra = '".addslashes($extra)."'";
        } else
                $add_extra = '';

        // l'entrer dans la base
        if (!$echec) {
                if (!$auteur['id_auteur']) { // creation si pas d'id
                  $auteur['id_auteur'] = spip_abstract_insert("spip_auteurs", "(nom)", "('temp')");

                        $id_auteur = $auteur['id_auteur'];

                        if ($ajouter_id_article = intval($ajouter_id_article))
                                spip_query("INSERT INTO spip_auteurs_articles (id_auteur, id_article) VALUES ($id_auteur, $ajouter_id_article)");
                }

                $query = "UPDATE spip_auteurs SET $query_pass
                        nom='".addslashes($auteur['nom'])."',
                        login='".addslashes($auteur['login'])."',
                        bio='".addslashes($auteur['bio'])."',
                        email='".addslashes($auteur['email'])."',
                        nom_site='".addslashes($auteur['nom_site'])."',
                        url_site='".addslashes($auteur['url_site'])."',
                        pgp='".addslashes($auteur['pgp'])."'
                        $add_extra
                        WHERE id_auteur=".$auteur['id_auteur'];
                spip_query($query) OR die($query);
        }
}

// Appliquer des modifications de statut
modifier_statut_auteur($auteur, $_POST['statut'], $_POST['add_rub'], $_GET['supp_rub']);


// Si on modifie la fiche auteur, reindexer et modifier htpasswd
if ($nom OR $statut) {
        if (lire_meta('activer_moteur') == 'oui') {
                include_ecrire ("inc_index.php3");
                marquer_indexer('auteur', $id_auteur);
        }

        // Mettre a jour les fichiers .htpasswd et .htpasswd-admin
        ecrire_acces();
}

// Redirection
if (!$echec AND $redirect_ok == "oui") {
        redirige_par_entete($redirect ? rawurldecode($redirect) : "auteurs_edit.php3?id_auteur=$id_auteur");
}


//
// Affichage
//

if ($connect_id_auteur == $id_auteur)
        debut_page($auteur['nom'], "auteurs", "perso");
else
        debut_page($auteur['nom'],"auteurs","redacteurs");

echo "<br><br><br>";

debut_gauche();

if ($id_auteur) {
        debut_boite_info();
        echo "<CENTER>";
        echo "<FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=1><B>"._T('titre_cadre_numero_auteur')."&nbsp;:</B></FONT>";
        echo "<BR><FONT FACE='Verdana,Arial,Sans,sans-serif' SIZE=6><B>$id_auteur</B></FONT>";
        echo "</CENTER>";
        fin_boite_info();
}

debut_droite();


//
// Formulaire d'edition de l'auteur
//

if ($echec){
        debut_cadre_relief();
        echo http_img_pack("warning.gif", _T('info_avertissement'), "width='48' height='48' align='left'");
        echo "<font color='red'>$echec <p>"._T('info_recommencer')."</font>";
        fin_cadre_relief();
        echo "<p>";
}


debut_cadre_formulaire();
echo "<FORM ACTION='auteur_infos.php3?id_auteur=$id_auteur' METHOD='post'>";
echo "<INPUT TYPE='Hidden' NAME='id_auteur' VALUE=\"$id_auteur\">";


//
// Infos personnelles
//

echo "<div class='serif'>";

debut_cadre_relief("fiche-perso-24.gif", false, "", _T("icone_informations_personnelles"));

echo _T('titre_cadre_signature_obligatoire');
echo "("._T('entree_nom_pseudo').")<BR>";
echo "<INPUT TYPE='text' NAME='nom' CLASS='formo' VALUE=\"".entites_html($auteur['nom'])."\" SIZE='40' $onfocus><P>";

echo "<B>"._T('entree_adresse_email')."</B>";

if ($connect_statut == "0minirezo"
AND ($connect_toutes_rubriques OR $auteur['statut']<>'0minirezo')) {
        echo "<br><INPUT TYPE='text' NAME='email' CLASS='formo' VALUE=\"".entites_html($auteur['email'])."\" SIZE='40'><P>\n";
}
else {
        echo "&nbsp;: <tt>".$auteur['email']."</tt>";
        echo "<br>("._T('info_reserve_admin').")\n";
        echo "<P>";
}

echo "<B>"._T('entree_infos_perso')."</B><BR>";
echo "("._T('entree_biographie').")<BR>";
echo "<TEXTAREA NAME='bio' CLASS='forml' ROWS='4' COLS='40' wrap=soft>";
echo entites_html($auteur['bio']);
echo "</TEXTAREA>\n";

debut_cadre_enfonce("site-24.gif", false, "", _T('info_site_web'));
echo "<B>"._T('entree_nom_site')."</B><BR>";
echo "<INPUT TYPE='text' NAME='nom_site_auteur' CLASS='forml' VALUE=\"".entites_html($auteur['nom_site'])."\" SIZE='40'><P>\n";

echo "<B>"._T('entree_url')."</B><BR>";
echo "<INPUT TYPE='text' NAME='url_site' CLASS='forml' VALUE=\"".entites_html($auteur['url_site'])."\" SIZE='40'>\n";
fin_cadre_enfonce();
        echo "<p>";

if ($options == "avancees") {
        debut_cadre_enfonce("cadenas-24.gif", false, "", _T('entree_cle_pgp'));
        echo "<TEXTAREA NAME='pgp' CLASS='forml' ROWS='4' COLS='40' wrap=soft>";
        echo entites_html($auteur['pgp']);
        echo "</TEXTAREA>\n";
        fin_cadre_enfonce();
        echo "<p>";
}
else {
        echo "<input type='hidden' name='pgp' value=\"".entites_html($auteur['pgp'])."\">";
}

echo "<p>";
        if ($champs_extra) {
                include_ecrire("inc_extra.php3");
                extra_saisie($auteur['extra'], 'auteurs', $auteur['statut']);
        }

fin_cadre_relief();
echo "<p>";



//
// Login et mot de passe :
// accessibles seulement aux admins non restreints et l'auteur lui-meme
//

if ($auteur['source'] != 'spip') {
        $edit_login = false;
        $edit_pass = false;
}
else if (($connect_statut == "0minirezo") AND $connect_toutes_rubriques) {
        $edit_login = true;
        $edit_pass = true;
}
else if ($connect_id_auteur == $id_auteur) {
        $edit_login = false;
        $edit_pass = true;
}
else {
        $edit_login = false;
        $edit_pass = false;
}

debut_cadre_relief("base-24.gif");

// Avertissement en cas de modifs de ses propres donnees
if (($edit_login OR $edit_pass) AND $connect_id_auteur == $id_auteur) {
        debut_cadre_enfonce();
        echo http_img_pack("warning.gif", _T('info_avertissement'), "width='48' height='48' align='right'");
        echo "<b>"._T('texte_login_precaution')."</b>\n";
        fin_cadre_enfonce();
        echo "<p>";
}

// Un redacteur n'a pas le droit de modifier son login !
if ($edit_login) {
        echo "<B>"._T('item_login')."</B> ";
        echo "<font color='red'>("._T('texte_plus_trois_car').")</font> :<BR>";
        echo "<INPUT TYPE='text' NAME='new_login' CLASS='formo' VALUE=\"".entites_html($auteur['login'])."\" SIZE='40'><P>\n";
}
else {
        echo "<fieldset style='padding:5'><legend><B>"._T('item_login')."</B><BR></legend><br><b>".$auteur['login']."</b> ";
        echo "<i> ("._T('info_non_modifiable').")</i><p>";
}

// On ne peut modifier le mot de passe en cas de source externe (par exemple LDAP)
if ($edit_pass) {
        echo "<B>"._T('entree_nouveau_passe')."</B> ";
        echo "<font color='red'>("._T('info_plus_cinq_car').")</font> :<BR>";
        echo "<INPUT TYPE='password' NAME='new_pass' CLASS='formo' VALUE=\"\" SIZE='40'><BR>\n";
        echo _T('info_confirmer_passe')."<BR>";
        echo "<INPUT TYPE='password' NAME='new_pass2' CLASS='formo' VALUE=\"\" SIZE='40'><P>\n";
}
fin_cadre_relief();
echo "<p />";


//
// Apparaitre dans la liste des redacteurs connectes
//

if ($connect_id_auteur == $id_auteur) {

        debut_cadre_relief("messagerie-24.gif", false, "", _T('info_liste_redacteurs_connectes'));
                
        echo "<div>"._T('texte_auteur_messagerie')."</div>";    

                if ($auteur['imessage']=="non"){
                        echo "<INPUT TYPE='radio' NAME='perso_activer_imessage' VALUE='oui' id='perso_activer_imessage_on'>";
                        echo " <label for='perso_activer_imessage_on'>"._T('bouton_radio_apparaitre_liste_redacteurs_connectes')."</label> ";
                        echo "<BR><INPUT TYPE='radio' NAME='perso_activer_imessage' VALUE='non' CHECKED id='perso_activer_imessage_off'>";
                        echo " <B><label for='perso_activer_imessage_off'>"._T('bouton_radio_non_apparaitre_liste_redacteurs_connectes')."</label></B> ";
                } else {
                        echo "<INPUT TYPE='radio' NAME='perso_activer_imessage' VALUE='oui' id='perso_activer_imessage_on' CHECKED>";
                        echo " <B><label for='perso_activer_imessage_on'>"._T('bouton_radio_apparaitre_liste_redacteurs_connectes')."</label></B> ";

                        echo "<BR><INPUT TYPE='radio' NAME='perso_activer_imessage' VALUE='non' id='perso_activer_imessage_off'>";
                        echo " <label for='perso_activer_imessage_off'>"._T('bouton_radio_non_apparaitre_liste_redacteurs_connectes')."</label> ";
                }

        fin_cadre_relief();
        echo "<p />";

        
}


// Afficher le formulaire de changement de statut (cf. inc_acces.php3)
afficher_formulaire_statut_auteur ($id_auteur, $auteur['statut']);


echo "<INPUT NAME='ajouter_id_article' VALUE='$ajouter_id_article' TYPE='hidden'>\n";
echo "<INPUT NAME='redirect' VALUE='$redirect' TYPE='hidden'>\n";
echo "<INPUT NAME='redirect_ok' VALUE='oui' TYPE='hidden'>\n";

echo "<DIV align='right'><INPUT TYPE='submit' CLASS='fondo' NAME='Valider' VALUE='"._T('bouton_enregistrer')."'></DIV>";

echo "</div>";

echo "</form>";
fin_cadre_formulaire();
echo "&nbsp;<p>";

fin_page();

?>