Valider 223cd1de rédigé par eric@smellup.net's avatar eric@smellup.net
Parcourir les fichiers

Mise au point de la fonction plugin_lire().

Mise au point de l'affichage de la page d'un plugin en limitant les boucle à un enregistrement car si un plugin appartient à deux dépots on obtenait 2 fois les squelettes (vieux bug).
La page plugin est prête à accueillir les formulaires d'affectation des types de plugin.
parent 6c2c07f2
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+44 −27
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -8,52 +8,69 @@ if (!defined('_ECRIRE_INC_VERSION')) {
	return;
}


/**
 * Retourne la description complète ou une liste de champs précisés dans l'appel
 * d'un objet plugin identifié par son préfixe.
 *
 * @param string        $prefixe
 *        La valeur du préfixe du plugin.
 * @param array|string  $informations
 *        Identifiant d'un champ ou de plusieurs champs de la description d'un plugin.
 * @param int|string   $plugin       La valeur du préfixe  ou de l'id du plugin.
 * @param array|string $informations Identifiant d'un champ ou de plusieurs champs de la description d'un plugin.
 *                                   Si l'argument est vide, la fonction renvoie la description complète.
 *
 * @return mixed
 *         La description brute complète ou partielle du plugin :
 * @return mixed La description brute complète ou partielle du plugin :
 *               - sous la forme d'une valeur simple si l'information demandée est unique (chaine)
 *               - sous la forme d'un tabelau associatif indexé par le nom du champ sinon.
 */
function plugin_lire($prefixe, $informations = array()) {
function plugin_lire($plugin, $informations = array()) {

	// Initialisation du tableau de sortie
	static $plugins = array();
	// Initialisation des tableaux statiques
	static $descriptions_plugin = array();
	static $prefixes = array();

	// On passe le préfixe en majuscules pour être cohérent avec le stockage en base.
	$prefixe = strtoupper($prefixe);
	// On détermine si on a passé l'id ou le préfixe du plugin :
	// -- si c'est le préfixe on le passe en majuscules pour être cohérent avec le stockage en base.
	// -- on essaye de déterminer l'index de la description qui est toujours le préfixe.
	$id_plugin = intval($plugin);
	if ($id_plugin) {
		$index = isset($prefixes[$id_plugin]) ? $prefixes[$id_plugin] : '';
	} else {
		$prefixe = strtoupper($plugin);
		$index = $prefixe;
	}

	if (!isset($plugins[$prefixe])) {
	if (!$index or !isset($descriptions_plugin[$index])) {
		// Initialisation de la jointure entre plugins et dépôts.
		$from = array('spip_plugins', 'spip_depots_plugins');
		$group_by = array('spip_plugins.id_plugin');

		// Préfixe, jointure et conditions sur la table des dépots pour éviter les plugins installés.
		$where = array(
			'spip_plugins.prefixe=' . sql_quote($prefixe),
			'spip_depots_plugins.id_depot>0',
			'spip_depots_plugins.id_plugin=spip_plugins.id_plugin'
		);
		// Condition sur le préfixe ou l'id.
		$where[] = $id_plugin
			? 'spip_plugins.id_plugin=' . $id_plugin
			: 'spip_plugins.prefixe=' . sql_quote($prefixe);

		// -- Acquisition de tous les champs du plugin.
		$plugins[$prefixe] = false;
		if ($plugin = sql_fetsel('*', $from, $where, $group_by)) {
			$plugins[$prefixe] = $plugin;
		// Acquisition de tous les champs du plugin et sauvegarde de celle-ci à l'index du préfixe.
		if ($description = sql_fetsel('*', $from, $where, $group_by)) {
			if (!$index) {
				// Première sauvegarde du plugin connu par son id, il ne faut stocker l'index pour un futur appel.
				$index = $description['prefixe'];
				$prefixes[$id_plugin] = $index;
			}
			$descriptions_plugin[$index] = $description;
		} elseif ($index) {
			$descriptions_plugin[$index] = array();
		}
	}

	// Si il y a eu une erreur lors du fetsel et que l'index est indéterminé (première lecture par id)
	// on renvoie une description vide.
	$description = $index ? $descriptions_plugin[$index] : array();

	// On ne retourne que les champs demandés
	$plugin = $plugins[$prefixe];
	if ($plugin and $informations) {
	if ($description and $informations) {
		// Extraction des seules informations demandées.
		// -- si on demande une information unique on renvoie la valeur simple, sinon on renvoie un tableau.
		// -- si une information n'est pas un champ valide elle n'est pas renvoyée sans monter d'erreur.
@@ -63,15 +80,15 @@ function plugin_lire($prefixe, $informations = array()) {
				$informations = array_shift($informations);
			} else {
				// Tableau des informations valides
				$plugin = array_intersect_key($plugin, array_flip($informations));
				$description = array_intersect_key($description, array_flip($informations));
			}
		}

		if (is_string($informations)) {
			// Valeur unique demandée.
			$plugin = isset($plugin[$informations]) ? $plugin[$informations] : '';
			$description = isset($description[$informations]) ? $description[$informations] : '';
		}
	}

	return $plugin;
	return $description;
}
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<paquet
	prefix="svp"
	categorie="maintenance"
	version="2.0.5"
	version="2.0.6"
	etat="stable"
	compatibilite="[3.3.0-dev;3.3.*]"
	logo="svp-64.png"
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<BOUCLE_contenu_plugin(PLUGINS) {id_plugin=#ENV{id}}>
<BOUCLE_contenu_plugin(PLUGINS) {id_plugin=#ENV{id}}{0, 1}>
<div class="champ contenu_titre[ (#NOM*|strlen|?{'',vide})]">
	<div class="label"><:info_nom:></div>
	<div dir="#LANG_DIR" class="titre">#NOM</div>
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<BOUCLE_infos_plugin(PLUGINS) {id_plugin=#ENV{id}}>
<BOUCLE_infos_plugin(PLUGINS) {id_plugin=#ENV{id}}{0, 1}>
<div class="infos">
	[(#REM) <!-- La reference du depot --> ]
	#SET{titre_info, #ENV{type}|objet_info{texte_objet}|_T}
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -32,7 +32,7 @@
			</tr>
		</thead>
		<tbody>
<BOUCLE_liste_plugins(PLUGINS) {id_plugin?}{where?}{id_depot?}{recherche?}{tri #ENV{par, nom}, #GET{defaut_tri}}{pagination #ENV{pas, 25}}>
<BOUCLE_liste_plugins(PLUGINS) {id_plugin?}{where?}{id_depot?}{recherche?}{tri #ENV{par, nom}, #GET{defaut_tri}}{pagination #ENV{pas, 25}}{fusion prefixe}>
			<tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
				<td class="titre principale">
					<a[ href="(#ID_PLUGIN|generer_url_entite{plugin})"] title="<:svp:bulle_aller_plugin:>">
Chargement en cours