Valider 3c89a691 rédigé par marcimat's avatar marcimat
Parcourir les fichiers

Ces fonctions sont très spécifiques à svp_skel. On les déplace là bas.

parent 944d4027
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -19,7 +19,7 @@
						<a class="spip_out" title="<:svp:bulle_ajouter_spipzone:>" href="https://plugins.spip.net/depots/principal.xml" onclick="$('#xml_paquets').attr('value',$(this).attr('href')).focus();return false;"><:svp:info_adresse_spipzone:></a> <i>(<a class="spip_out" href="https://plugins.spip.net/spip.php?page=depots" onclick="window.open(this.href); return false;"><:svp:titre_liste_depots:></a>)</i>
					</p>
					[<span class="erreur_message">(#ENV{erreurs}|table_valeur{xml_paquets})</span>]
					<input type="text" name="xml_paquets" id="xml_paquets" value="[https://plugins.spip.net/depots/principal.xml(#VAL{depot}|svp_compter|table_valeur{depot}|=={0}|oui)]" class="text" />
					<input type="text" name="xml_paquets" id="xml_paquets" value="[https://plugins.spip.net/depots/principal.xml(#ENV{nb_depots}|non)]" class="text" />
				</div>
			</div>
	
+3 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -20,7 +20,9 @@ if (!defined("_ECRIRE_INC_VERSION")) {
 **/
function formulaires_ajouter_depot_charger_dist() {
	// On ne renvoie pas les valeurs saisies mais on fait un raz systematique
	return array();
	return array(
		'nb_depots' => (int)sql_countsel('spip_depots'),
	);
}

/**
+0 −169
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -244,175 +244,6 @@ function svp_afficher_langues($langues, $sep = ', ') {
}



/**
 * Retourne un texte indiquant un nombre total de contributions pour un dépot
 *
 * Calcule différents totaux pour un dépot donné et retourne un texte
 * de ces différents totaux. Les totaux correspondent par défaut aux
 * plugins et paquets, mais l'on peut demander le total des autres contributions
 * avec le second paramètre.
 *
 * @uses svp_compter()
 * @param int $id_depot
 *     Identifiant du dépot
 *     Zéro (par défaut) signifie ici : «dans tous les dépots distants»
 *     (id_dépot>0) et non «dans le dépot local»
 * @param string $contrib
 *     Type de total demandé ('plugin' ou autre)
 *     Si 'plugin' : indique le nombre de plugins et de paquets du dépot
 *     Si autre chose : indique le nombre des autres contributions, c'est
 *     à dire des zips qui ne sont pas des plugins, comme certaines libraires ou
 *     certains jeux de squelettes.
 * @return string
 *     Texte indiquant certains totaux tel que nombre de plugins, nombre de paquets...
 **/
function svp_compter_depots($id_depot, $contrib = 'plugin') {

	$total = svp_compter('depot', $id_depot);
	if (!$id_depot) {
		$info = _T('svp:info_depots_disponibles', array('total_depots' => $total['depot'])) . ', ' .
			_T('svp:info_plugins_heberges', array('total_plugins' => $total['plugin'])) . ', ' .
			_T('svp:info_paquets_disponibles', array('total_paquets' => $total['paquet']));
	} else {
		if ($contrib == 'plugin') {
			$info = _T('svp:info_plugins_heberges', array('total_plugins' => $total['plugin'])) . ', ' .
				_T('svp:info_paquets_disponibles', array('total_paquets' => $total['paquet'] - $total['autre']));
		} else {
			$info = _T('svp:info_contributions_hebergees', array('total_autres' => $total['autre']));
		}
	}

	return $info;
}


/**
 * Retourne un texte indiquant un nombre total de plugins
 *
 * Calcule le nombre de plugins correspondant à certaines contraintes,
 * tel que l'appartenance à un certain dépot, une certaine catégorie
 * ou une certaine branche de SPIP et retourne une phrase traduite
 * tel que «64 plugins disponibles»
 *
 * @uses svp_compter()
 * @param int $id_depot
 *     Identifiant du dépot
 *     Zéro (par défaut) signifie ici : «dans tous les dépots distants»
 *     (id_dépot>0) et non «dans le dépot local»
 * @param string $categorie
 *     Type de catégorie (auteur, communication, date...)
 * @param string $compatible_spip
 *     Numéro de branche de SPIP. (3.0, 2.1, ...)
 * @return string
 *     Texte indiquant un nombre total de paquets
 **/
function svp_compter_plugins($id_depot = 0, $categorie = '', $compatible_spip = '') {
	$total = svp_compter('plugin', $id_depot, $categorie, $compatible_spip);
	$info = _T('svp:info_plugins_disponibles', array('total_plugins' => $total['plugin']));

	return $info;
}


/**
 * Compte le nombre de plugins, paquets ou autres contributions
 * en fonction de l'entité demandée et de contraintes
 *
 * Calcule, pour un type d'entité demandé (depot, plugin, paquet, catégorie)
 * leur nombre en fonction de certaines contraintes, tel que l'appartenance
 * à un certain dépot, une certaine catégorie ou une certaine branche de SPIP.
 *
 * Lorsque l'entité demandée est un dépot, le tableau des totaux possède,
 * en plus du nombre de dépots, le nombre de plugins et paquets.
 *
 * @note
 *     Attention le critère de compatibilite SPIP pris en compte est uniquement
 *     celui d'une branche SPIP
 *
 * @param string $entite
 *     De quoi veut-on obtenir des comptes. Peut être 'depot', 'plugin',
 *    'paquet' ou 'categorie'
 * @param int $id_depot
 *     Identifiant du dépot
 *     Zéro (par défaut) signifie ici : «dans tous les dépots distants»
 *     (id_dépot>0) et non «dans le dépot local»
 * @param string $categorie
 *     Type de catégorie (auteur, communication, date...)
 * @param string $compatible_spip
 *     Numéro de branche de SPIP. (3.0, 2.1, ...)
 * @return array
 *     Couples (entite => nombre).
 **/
function svp_compter($entite, $id_depot = 0, $categorie = '', $compatible_spip = '') {
	$compteurs = array();

	$where = array();
	if ($id_depot) {
		$where[] = "t1.id_depot=" . sql_quote($id_depot);
	} else {
		$where[] = "t1.id_depot>0";
	}

	if ($entite == 'plugin') {
		$from = array('spip_plugins AS t2', 'spip_depots_plugins AS t1');
		$where[] = "t1.id_plugin=t2.id_plugin";
		if ($categorie) {
			$where[] = "t2.categorie=" . sql_quote($categorie);
		}
		if ($compatible_spip) {
			$creer_where = charger_fonction('where_compatible_spip', 'inc');
			$where[] = $creer_where($compatible_spip, 't2', '>');
		}
		$compteurs['plugin'] = sql_count(sql_select('DISTINCT t1.id_plugin', $from, $where));
	} elseif ($entite == 'paquet') {
		$from = array('spip_paquets AS t1');
		if ($categorie) {
			$ids = sql_allfetsel('id_plugin', 'spip_plugins', 'categorie=' . sql_quote($categorie));
			$ids = array_column($ids, 'id_plugin');
			$where[] = sql_in('t1.id_plugin', $ids);
		}
		if ($compatible_spip) {
			$creer_where = charger_fonction('where_compatible_spip', 'inc');
			$where[] = $creer_where($compatible_spip, 't1', '>');
		}
		$compteurs['paquet'] = sql_countsel($from, $where);
	} elseif ($entite == 'depot') {
		$from = array('spip_depots AS t1');
		$select = array(
			'COUNT(t1.id_depot) AS depot',
			'SUM(t1.nbr_plugins) AS plugin',
			'SUM(t1.nbr_paquets) AS paquet',
			'SUM(t1.nbr_autres) AS autre'
		);
		$compteurs = sql_fetsel($select, $from, $where);
	} elseif ($entite == 'categorie') {
		$from = array('spip_plugins AS t2', 'spip_depots_plugins AS t1');
		$where[] = "t1.id_plugin=t2.id_plugin";
		if ($id_depot) {
			$ids = sql_allfetsel('id_plugin', 'spip_depots_plugins AS t1', $where);
			$ids = array_column($ids, 'id_plugin');
			$where[] = sql_in('t2.id_plugin', $ids);
		}
		if ($compatible_spip) {
			$creer_where = charger_fonction('where_compatible_spip', 'inc');
			$where[] = $creer_where($compatible_spip, 't2', '>');
		}
		if ($categorie) {
			$where[] = "t2.categorie=" . sql_quote($categorie);
			$compteurs['categorie'] = sql_count(sql_select('DISTINCT t1.id_plugin', $from, $where));
		} else {
			$select = array('t2.categorie', 'count(DISTINCT t1.id_plugin) as nb');
			$group_by = array('t2.categorie');
			$plugins = sql_allfetsel($select, $from, $where, $group_by);
			$compteurs['categorie'] = array_column($plugins, 'nb', 'categorie');
		}
	}

	return $compteurs;
}


/**
 * Compile la balise `#SVP_BRANCHES_SPIP`
 *