Valider b6aea23e rédigé par tcharlss's avatar tcharlss
Parcourir les fichiers

Vérification d'un identifiant : utiliser la fonction native de spip 4....

Vérification d'un identifiant : utiliser la fonction native de spip 4. Simplifier le texte d'explication et éviter de répéter la même chose dans le message d'erreur. Et on ajoute une suggestion en cas d'erreur.
parent 0a50a63b
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+5 −5
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -23,13 +23,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
	'champ_objets_label' => 'Contenus',
	'champ_titre_label' => 'Titre',
	'champ_date_label' => 'Date',
	'champ_identifiant_explication' => 'Identifiant textuel unique pour ce contenu. Ne peut contenir que des chiffres, lettres latines non accentuées et le caractère "_".',
	'champ_identifiant_explication' => 'Charactères alphanumériques en minuscules ou un souligné <code>_</code>',

	// E
	'erreur_champ_identifiant_format' => 'Format incorrect : n’utilisez pas d’espace, ni de majuscule, ni de caractères accentués ou spéciaux.',
	'erreur_champ_identifiant_doublon' => 'Cet identifiant est déjà utilisé par un même type de contenu',
	'erreur_champ_identifiant_doublon_objet' => 'Cet identifiant est déjà utilisé par un même type de contenu : @objet@ n°@id_objet@',
	'erreur_champ_identifiant_taille' => '@nb_max@ caractères au maximum (actuellement @nb@)',
	'erreur_identifiant_format' => 'Format incorrect, suggestion : @slug@',
	'erreur_identifiant_doublon' => 'Cet identifiant est déjà utilisé par un même type de contenu',
	'erreur_identifiant_doublon_objet' => 'Cet identifiant est déjà utilisé par un même type de contenu : @objet@ n°@id_objet@',
	'erreur_identifiant_taille' => '@nb_max@ caractères au maximum (actuellement @nb@)',

	// F
	'filtre_tous' => 'Tous',
+29 −21
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -18,36 +18,36 @@ if (!defined('_ECRIRE_INC_VERSION')) {
 * @param string $valeur
 *   La valeur à vérifier.
 * @param array $options
 *   unicite => true ou 'on', dans ce cas là donner aussi au minimum `objet`
 *   objet
 *   id_objet
 *   - normaliser (bool) : pour normaliser la valeur 
 *   - unicite (bool)    : pour vérifier l'unicité si c'est un objet
 *   - objet (string)    : type d'objet pour vérifier l'unicité
 *   - id_objet          : numéro d'un objet pour vérifier l'unicité
 * @param null $valeur_normalisee
 *   Si normalisation a faire, la variable sera remplie par la valeur normalisée.
 * @return string
 *   Retourne une chaîne vide si c'est valide, sinon une chaîne expliquant l'erreur.
 */
function verifier_identifiant_dist($identifiant, $options = array()) {
function verifier_identifiant_dist(string $identifiant, array $options = [], &$valeur_normalisee = null) {
	include_spip('inc/filtres');
	$erreur = '';

	// Longueur max
	$longueur_max = 255;
	if (($longueur = strlen($identifiant)) > $longueur_max) {
	$longueur = strlen($identifiant);
	if ($longueur > $longueur_max) {
		$erreur = _T(
			'identifiant:erreur_champ_identifiant_taille',
			'identifiant:erreur_identifiant_taille',
			array('nb' => $longueur, 'nb_max' => $longueur_max)
		);
	}

	// Format : caractères alphanumériques en minuscules ou "_"
	if (!$erreur) {
	$slug = identifiant_slug($identifiant, '', array('longueur_maxi' => $longueur_max));
	if (
			(
				function_exists('slugify')
				and $slug = slugify($identifiant, '', array('longueur_maxi' => $longueur_max))
				and $slug != $identifiant
			)
			or !preg_match('/^[a-z0-9_]+$/', $identifiant)
		!$erreur
		and $slug !== $identifiant
	) {
			$erreur = _T('identifiant:erreur_champ_identifiant_format');
		}
		$erreur = _T('identifiant:erreur_identifiant_format', ['slug' => $slug]);
	}

	// Unicité : doit être unique pour ce type d'objet, sauf autres langues.
@@ -58,13 +58,13 @@ function verifier_identifiant_dist($identifiant, $options = array()) {
	) {
		include_spip('base/objets');
		$trouver_table = charger_fonction('trouver_table', 'base');
		$objet         = $options['objet'];
		$id_objet      = (isset($options['id_objet']) ? $options['id_objet'] : 0);
		$objet         = objet_type($options['objet']);
		$id_objet      = (int) (isset($options['id_objet']) ? $options['id_objet'] : 0);
		$table_objet   = table_objet_sql($objet);
		$cle_objet     = id_table_objet($objet);
		$desc          = $trouver_table($table_objet);
		$where = array(
			$cle_objet . '!=' . intval($id_objet),
			"$cle_objet != $id_objet",
			'identifiant=' . sql_quote($identifiant)
		);
		// l'identifiant a le droit d'être utilisé dans une autre langue
@@ -74,9 +74,17 @@ function verifier_identifiant_dist($identifiant, $options = array()) {
		}
		$doublon = sql_getfetsel($cle_objet, $table_objet, $where);
		if ($doublon) {
			$erreur = _T('identifiant:erreur_champ_identifiant_doublon_objet', array('objet' => $objet, 'id_objet' => $doublon));
			$erreur = _T('identifiant:erreur_identifiant_doublon_objet', array('objet' => $objet, 'id_objet' => $doublon));
		}
	}

	// S'il n'y a pas d'erreur, normaliser si demandé
	if (
		!$erreur
		and !empty($option['normaliser'])
	) {
		$valeur_normalisee = $slug;
	}

	return $erreur;
}