Valider ae7d390c rédigé par esj's avatar esj
Parcourir les fichiers

Dans la dernière étape d'une installation avec LDAP, ajout d'un formulaire...

Dans la dernière étape d'une installation avec LDAP, ajout d'un formulaire permettant d'indiquer le nom du champ LDAP correspondant au nom du champ SPIP de la table des auteurs, en particulier le Login, ce qui permet d'éviter les requêtes LDAP systématiquement vaines à chaque connexion d'un auteur. Les champs demandés sont le Login, le Nom, le Mail et la Biographie. On peut surcharger la globale pour en demander plus ou moins. L'installateur peut ne rien mettre dans un champ pour l'ignorer, ou mettre une suite de nom de champs si la correspondance n'est pas unique ou est inconnue. 

Le tableau déduit est sauvé dans le fichier de connexion LDAP, alors que le statut est dans les meta: ça parait bizarre, mais la valeur de celui-ci est une constante indépendante du LDAP (tous visiteurs ou tous rédacteurs etc), tandis que les autres seront à repréciser en cas de déménagement du site. L'exception est moins dans l'emplacement que dans l'invariance du statut, contrairement aux autres champs. On pourrait imaginer de le déduire aussi du LDAP, mais ça sort largement du noyau de SPIP: là il s'agissait seulement de ne plus avoir de requêtes vaines à chaque connexion.
parent 0dd82cfc
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+2 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -78,6 +78,8 @@ function auth_ldap_connect($serveur='') {
				$connexion['ldap'] = array('link' => $GLOBALS['ldap_link'],
					'base' => $GLOBALS['ldap_base']);
			else spip_log("connection LDAP $serveur mal definie dans $f");
			if (isset($GLOBALS['ldap_champs']))
				$connexion['ldap']['attributes'] = $GLOBALS['ldap_champs'];
		} else spip_log("connection LDAP $serveur inconnue");
	}
	return $connexions_ldap[$serveur]=$connexion['ldap'];
+22 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -207,9 +207,18 @@ function info_progression_etape($en_cours,$phase,$dir, $erreur = false){


// http://doc.spip.org/@fieldset
function fieldset($legend, $champs = array(), $horchamps='') {
	$fieldset = "<fieldset>\n" .
	($legend ? "<legend>".$legend."</legend>\n" : '');
function fieldset($legend,  $champs = array(), $apres='', $avant='') {
	return "<fieldset>\n" .
	  $avant .
	  ($legend ? "<legend>".$legend."</legend>\n" : '') .
	  fieldset_champs($champs) .
	  $apres .
	  "</fieldset>\n";
}

function fieldset_champs($champs = array())
  {
	$fieldset = '';
	foreach ($champs as $nom => $contenu) {
		$type = isset($contenu['hidden']) ? 'hidden' : (preg_match(',^pass,', $nom) ? 'password' : 'text');
		$class = isset($contenu['hidden']) ? '' : "class='formo' size='40' ";
@@ -230,7 +239,6 @@ function fieldset($legend, $champs = array(), $horchamps='') {
							  .(preg_match(',^(pass|login),', $nom)?" autocomplete='off'":'') .	" />\n";
		}
	}
	$fieldset .= "$horchamps</fieldset>\n";
	return $fieldset;
}

@@ -429,4 +437,14 @@ function install_etape_liste_bases($server_db, $disabled=array())

	return array($checked, $bases);
}

function install_propager($hidden)
{
	$res = '';
	foreach($hidden as $k) {
		$v = htmlentities(_request($k));
		$res .= "<input type='hidden' name='$k' value='$v' />";
	}
	return $res;
}
?>
+7 −14
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -18,8 +18,6 @@ function install_etape_ldap3_dist()
	$login_ldap = _request('login_ldap');
	$pass_ldap = _request('pass_ldap');
	$port_ldap = _request('port_ldap');
	$tls_ldap = _request('tls_ldap');
	$protocole_ldap = _request('protocole_ldap');

	$base_ldap_text = defined('_INSTALL_BASE_LDAP')
		? _INSTALL_BASE_LDAP
@@ -66,22 +64,17 @@ function install_etape_ldap3_dist()
		$res .= " checked=\"checked\"";
		$checked = true;
	}
	$res .= " />"
	. "\n<label for='manuel'>"._T('entree_chemin_acces')."</label> ";

	echo generer_form_ecrire('install', ($res
	. "\n<input type='hidden' name='etape' value='ldap4' />"
	. "\n<input type='hidden' name='adresse_ldap' value=\"$adresse_ldap\" />"
	. "\n<input type='hidden' name='port_ldap' value=\"$port_ldap\" />"
	. "\n<input type='hidden' name='login_ldap' value=\"$login_ldap\" />"
	. "\n<input type='hidden' name='pass_ldap' value=\"$pass_ldap\" />"
	. "\n<input type='hidden' name='protocole_ldap' value=\"$protocole_ldap\" />"
	. "\n<input type='hidden' name='tls_ldap' value=\"$tls_ldap\" />"

	$res .= " />"
	. "\n<label for='manuel'>"._T('entree_chemin_acces')."</label> "
	. "\n<fieldset>"
	. "<input type='text' name='base_ldap_text' class='text' value=\"$base_ldap_text\" size='40' />"
	. "\n</fieldset>"
	. bouton_suivant()));
	. "\n<input type='hidden' name='etape' value='ldap4' />"
	. install_propager(array('adresse_ldap','port_ldap','login_ldap','pass_ldap','protocole_ldap','tls_ldap'))
	. bouton_suivant();

	echo generer_form_ecrire('install', $res);

	echo install_fin_html();
}
+29 −24
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -10,6 +10,10 @@
 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
\***************************************************************************/

if (!defined("_ECRIRE_INC_VERSION")) return;

include_spip('auth/ldap');

// http://doc.spip.org/@install_etape_ldap4_dist
function install_etape_ldap4_dist()
{
@@ -17,16 +21,13 @@ function install_etape_ldap4_dist()
	$login_ldap = _request('login_ldap');
	$pass_ldap = _request('pass_ldap');
	$port_ldap = _request('port_ldap');
	$tls_ldap = _request('tls_ldap');
	$protocole_ldap = _request('protocole_ldap');
	$base_ldap = _request('base_ldap');
	$base_ldap_text = _request('base_ldap_text');
	if (!$base_ldap) $base_ldap = $base_ldap_text;

	echo install_debut_html();

	if (!$base_ldap) $base_ldap = $base_ldap_text;

	$ldap_link = @ldap_connect($adresse_ldap, $port_ldap);
	$ldap_link = ldap_connect($adresse_ldap, $port_ldap);
	@ldap_bind($ldap_link, $login_ldap, $pass_ldap);

	// Essayer de verifier le chemin fourni
@@ -43,29 +44,15 @@ function install_etape_ldap4_dist()
		info_etape(_T('info_reglage_ldap'));
		echo info_progression_etape(4,'etape_ldap','install/');

		lire_fichier(_FILE_CONNECT_TMP, $conn);
		if ($p = strpos($conn, "'');")) {
			ecrire_fichier(_FILE_CONNECT_TMP, 
				       substr($conn, 0, $p+1) 
				       . _FILE_LDAP
				       . substr($conn, $p+1));
		}
		$conn = "\$GLOBALS['ldap_base'] = \"$base_ldap\";\n"
		. "\$GLOBALS['ldap_link'] = @ldap_connect(\"$adresse_ldap\",\"$port_ldap\");\n"
		. "@ldap_set_option(\$GLOBALS['ldap_link'],LDAP_OPT_PROTOCOL_VERSION,\"$protocole_ldap\");\n"
		. (($tls_ldap != 'oui') ? '' :
		   "@ldap_start_tls(\$GLOBALS['ldap_link']);\n")
		. "@ldap_bind(\$GLOBALS['ldap_link'],\"$login_ldap\",\"$pass_ldap\");\n";

		install_fichier_connexion(_DIR_CONNECT . _FILE_LDAP, $conn);
		$statuts = liste_statuts_ldap();
		$statut_ldap = defined('_INSTALL_STATUT_LDAP')
		? _INSTALL_STATUT_LDAP
		  : $GLOBALS['liste_des_statuts']['info_redacteurs'];

		echo generer_form_ecrire('install', (
		"<input type='hidden' name='etape' value='ldap5' />"

		$res = install_propager(array('adresse_ldap','port_ldap','login_ldap','pass_ldap','protocole_ldap','tls_ldap'))
		. "<input type='hidden' name='etape' value='ldap5' />"
		. "<input type='hidden' name='base_ldap' value='" . htmlentities($base_ldap) . "' />"
		. fieldset(_T('info_statut_utilisateurs_1'),
			array(
				'statut_ldap' => array(
@@ -75,7 +62,10 @@ function install_etape_ldap4_dist()
					)
				)
			   )
		. bouton_suivant()));
		. install_ldap_correspondances()
		. bouton_suivant();

		echo generer_form_ecrire('install', $res); 
	}

	echo install_fin_html();
@@ -93,4 +83,19 @@ function liste_statuts_ldap() {
	}
	return $res;
}

function install_ldap_correspondances()
{
	$champs = array();
	foreach (is_array($GLOBALS['ldap_attributes']) ? $GLOBALS['ldap_attributes'] : array() as $champ => $v ) {
			$nom = 'ldap_' . $champ;
			$val = is_array($v) ? join(',', $v) : strval($v);
			$champs[$nom]= array(
				'label' => _T('ldap_correspondance', array('champ' => "<tt>$champ</tt>")).'<br />',
				'valeur' => $val
						  );
	}

	return !$champs ? '' : fieldset(_T('ldap_correspondance_1'), $champs, '', _T('ldap_correspondance_2') . '<br /><br />');
}
?>
+41 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -12,6 +12,7 @@

if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/headers');
include_spip('auth/ldap');

// http://doc.spip.org/@install_etape_ldap5_dist
function install_etape_ldap5_dist()
@@ -21,6 +22,45 @@ function install_etape_ldap5_dist()

	ecrire_meta('ldap_statut_import', _request('statut_ldap'));

	lire_fichier(_FILE_CONNECT_TMP, $conn);

	if ($p = strpos($conn, "'');")) {
			ecrire_fichier(_FILE_CONNECT_TMP, 
				       substr($conn, 0, $p+1) 
				       . _FILE_LDAP
				       . substr($conn, $p+1));
	}

	$adresse_ldap = _request('adresse_ldap');
	$login_ldap = _request('login_ldap');
	$pass_ldap = _request('pass_ldap');
	$port_ldap = _request('port_ldap');
	$tls_ldap = _request('tls_ldap');
	$protocole_ldap = _request('protocole_ldap');
	$base_ldap = _request('base_ldap');
	$base_ldap_text = _request('base_ldap_text');

	$conn = "\$GLOBALS['ldap_base'] = \"$base_ldap\";\n"
		. "\$GLOBALS['ldap_link'] = @ldap_connect(\"$adresse_ldap\",\"$port_ldap\");\n"
		. "@ldap_set_option(\$GLOBALS['ldap_link'],LDAP_OPT_PROTOCOL_VERSION,\"$protocole_ldap\");\n"
		. (($tls_ldap != 'oui') ? '' :
		   "@ldap_start_tls(\$GLOBALS['ldap_link']);\n")
		. "@ldap_bind(\$GLOBALS['ldap_link'],\"$login_ldap\",\"$pass_ldap\");\n";

	$champs = is_array($GLOBALS['ldap_attributes']) ? $GLOBALS['ldap_attributes'] : array();
	$res = '';
	foreach ($champs as $champ => $v ) {
		$nom = 'ldap_' . $champ;
		$val = trim(_request($nom));
		if (preg_match('/^\w*$/', $val)) {
			if ($val) $val = _q($val);
		} else $val = "array(" . _q(preg_split('/\W+/', $val)) . ')';;
		if ($val) $res .= "'$champ' => " . $val . ",";
	}
	$conn .= "\$GLOBALS['ldap_champs'] = array($res);\n";
	  
	install_fichier_connexion(_DIR_CONNECT . _FILE_LDAP, $conn);

	echo install_debut_html('AUTO', ' onload="document.getElementById(\'suivant\').focus();return false;"');

	echo info_etape(_T('info_ldap_ok'), info_progression_etape(5,'etape_ldap','install/'), _T('info_terminer_installation'));
@@ -33,4 +73,5 @@ function install_etape_ldap5_dist()
	echo install_fin_html();
}


?>
Chargement en cours