Browse Source

Permettre de se connecter dans le public comme l'auteur de l'objet courant - fixes #2

Reviewed-on: https://git.spip.net/spip-contrib-extensions/incarner/pulls/3
et https://git.spip.net/spip-contrib-extensions/incarner/issues/2 fixes #2
Co-authored-by: JLuc <jluc@noreply.git.spip.net>
Co-committed-by: JLuc <jluc@noreply.git.spip.net>
v1
JLuc 4 months ago
parent
commit
21edacdd03
  1. 2
      incarner_options.php
  2. 125
      incarner_pipelines.php
  3. 2
      lang/paquet-incarner_fr.php
  4. 5
      paquet.xml

2
incarner_options.php

@ -11,4 +11,4 @@
require __DIR__ . '/vendor/autoload.php';
$GLOBALS['liste_des_authentifications']['incarner'] = 'incarner';
$GLOBALS['liste_des_authentifications']['incarner'] = 'incarner';

125
incarner_pipelines.php

@ -85,28 +85,12 @@ function incarner_boite_infos($flux) {
*/
function incarner_affichage_final($html) {
if ((! isset($_COOKIE['spip_cle_incarner']))
or (! $cle_actuelle = $_COOKIE['spip_cle_incarner'])) {
return $html;
}
include_spip('inc/config');
include_spip('inc/session');
if (! $cles = lire_config('incarner/cles')) {
$cles = array();
}
$id_auteur = array_search($cle_actuelle, $cles);
include_spip('incarner_fonctions');
if ((! incarner_cle_valide($cle_actuelle))
or (intval(session_get('id_auteur')) === $id_auteur)) {
$id_auteur = incarner_racine_incarnation ();
if (!$id_auteur) {
return $html;
}
include_spip('base/abstract_sql');
$auteur = sql_fetsel(
'login,email',
'spip_auteurs',
@ -124,23 +108,56 @@ function incarner_affichage_final($html) {
'logout=oui&redirect=' . $self
);
$login_aff = incarner_login_affiche($auteur['login'], $auteur['email']);
$quisuisje = incarner_login_affiche(session_get('login'), session_get('email'));
$lien = '<div class="menu-incarner' . (test_espace_prive() ? ' prive' : '') . '">';
$lien .= '<a class="bouton-incarner" href="' . $url_logout . '">';
$lien .= _T('incarner:logout_definitif');
$lien .= '</a>';
$lien .= '<a class="bouton-incarner" href="' . $url . '">';
$lien .= _T('incarner:reset_incarner', array('login' => $login_aff));
$invite = _T('incarner:reset_incarner', array('login' => $login_aff));
$lien .= '<a class="bouton-incarner" href="' . $url . '" title="' . attribut_html($quisuisje.' : '.$invite) . '">';
$lien .= $invite;
$lien .= '</a>';
$lien .= '</div>';
$html = preg_replace('#(</body>)#', $lien . '$1', $html);
return $html;
}
/**
* teste si l'internaute actuellement connecté est un admin incarné
*
* @return int id_auteur de l'admin actuellement incarné, ou 0 sinon
*/
function incarner_racine_incarnation(){
if (
(! isset($_COOKIE['spip_cle_incarner']))
or (! $cle_actuelle = $_COOKIE['spip_cle_incarner'])
) {
return 0;
}
include_spip('inc/config');
if (! ($cles = lire_config('incarner/cles'))) {
return 0;
}
$id_auteur = array_search($cle_actuelle, $cles);
include_spip('inc/session');
include_spip('incarner_fonctions');
if (
incarner_cle_valide($cle_actuelle)
and (intval(session_get('id_auteur')) !== $id_auteur)
) {
return $id_auteur;
}
return 0;
}
/**
* @param $html
* @return array
*/
function incarner_affichage_final_prive($html) {
return incarner_affichage_final($html);
@ -150,8 +167,8 @@ function incarner_affichage_final_prive($html) {
* Ajoute une feuille de styles à l'espace public
*
* @pipeline insert_head
* @param array $flux Données du pipeline
* @return array Données du pipeline
* @param string $flux Données du pipeline
* @return string Données du pipeline
*/
function incarner_insert_head($flux) {
@ -180,3 +197,63 @@ function incarner_formulaire_traiter($flux) {
return $flux;
}
/**
* Ajoute le bouton d'administration permettant d'incarner l'auteur de l'objet courant sur une page publique
*
* @pipeline formulaire_admin
* @param array $flux Données du pipeline
* @return array Données du pipeline
*
* @uses _INCARNER_OBJET_ID_OBJET_COURANT
* Au format "objet|id_objet" = indique de quels objets on peut incarner l'auteur
*/
function incarner_formulaire_admin($flux) {
if (!defined('_INCARNER_OBJET_ID_OBJET_COURANT')
or empty($GLOBALS['visiteur_session']['id_auteur']) // utile lorsqu'on déconnecté mais que le cookie de correspondance est encore là
or !isset($flux['args']['contexte']['objet'])
or !($objet = $flux['args']['contexte']['objet'])
or !isset($flux['args']['contexte']['id_objet'])
or !($id_objet = $flux['args']['contexte']['id_objet'])
or !autoriser('incarner')
) {
return $flux;
}
list ($incarner_objet, $incarner_objet_id) = explode('|', _INCARNER_OBJET_ID_OBJET_COURANT);
$id_objet_courant = intval(_request($incarner_objet_id));
if ($objet != $incarner_objet) {
return $flux;
}
include_spip('base/abstract_sql');
$login_objet_courant = sql_getfetsel(
'login',
'spip_auteurs, spip_auteurs_liens',
array(
'spip_auteurs.id_auteur=spip_auteurs_liens.id_auteur',
"objet='$objet'",
"id_objet=$id_objet_courant"
)
);
if (!$login_objet_courant) {
return $flux;
}
$login = session_get('login');
if ($login == $login_objet_courant){
return $flux;
}
$url_courant = generer_url_action(
'incarner',
'login=' . $login_objet_courant . '&redirect=' . urlencode(self())
);
$lien = '<a class="bouton-incarner" href="' . $url_courant . '">';
$lien .= _T ('incarner:incarner_login', array('login' => $login_objet_courant));
$lien .= '</a>';
$x='<!--extra-->';
$flux['data'] = str_ireplace($x, $lien.$x, $flux['data']);
return $flux;
}

2
lang/paquet-incarner_fr.php

@ -11,5 +11,5 @@ On peux aussi changer d'utilisateur en visitant l'url spip.php?action=incarner&l
Ce plugin est un trou de sécurité, NE PAS ACTIVER EN PRODUCTION !",
'incarner_nom' => 'Incarner',
'incarner_slogan' => 'Changer rapidement d\'utilisateur durant le développement.',
'incarner_slogan' => 'Changer rapidement d\'utilisateur durant le développement ou pour aider.',
);

5
paquet.xml

@ -1,9 +1,9 @@
<paquet
prefix="incarner"
categorie="outil"
version="1.4.2"
version="1.5.0"
etat="stable"
compatibilite="[3.0.11;3.2.*]"
compatibilite="[3.0.11;4.0.*]"
logo="images/logo_incarner_48.png"
documentation="https://contrib.spip.net/Incarner"
>
@ -17,6 +17,7 @@
<pipeline nom="autoriser" inclure="incarner_autorisations.php" />
<pipeline nom="boite_infos" inclure="incarner_pipelines.php" />
<pipeline nom="formulaire_admin" inclure="incarner_pipelines.php" />
<pipeline nom="affichage_final" inclure="incarner_pipelines.php" />
<pipeline nom="affichage_final_prive" inclure="incarner_pipelines.php" />
<pipeline nom="insert_head" inclure="incarner_pipelines.php" />

Loading…
Cancel
Save