You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
3.8 KiB
PHP
116 lines
3.8 KiB
PHP
<?php
|
|
/**
|
|
* Gestion du formulaire d'affectation d'un type de plugin à un plugin.
|
|
**/
|
|
if (!defined('_ECRIRE_INC_VERSION')) {
|
|
return;
|
|
}
|
|
|
|
/**
|
|
* Chargement du formulaire d'affectation d'un type de plugin à un plugin donné.
|
|
*
|
|
* @param int $id_plugin Identifiant unique du plugin
|
|
* @param string $typologie Identifiant de la typologie
|
|
* @param null|array $options Options de chargement du formulaire :
|
|
*
|
|
* @return array Variables de contexte en entrée du formulaire
|
|
*/
|
|
function formulaires_editer_affectations_charger(int $id_plugin, string $typologie, array $options = []) : array {
|
|
// Les options peuvent être limitées au booléen d'éditabilité
|
|
if (!isset($options['editable'])) {
|
|
$options['editable'] = true;
|
|
}
|
|
|
|
// L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument
|
|
include_spip('inc/autoriser');
|
|
$editable = ($options['editable'] and autoriser('affecter', 'plugin', $id_plugin));
|
|
|
|
// On récupère le préfixe du plugin qui sert à indexer les affectations de types de plugin.
|
|
include_spip('inc/svp_plugin');
|
|
$prefixe = plugin_lire($id_plugin, 'prefixe');
|
|
|
|
// Acquérir la configuration de la typologie.
|
|
include_spip('inc/config');
|
|
$configuration_typologie = lire_config("svptype/typologies/{$typologie}", []);
|
|
|
|
// On détermine si la typologie n'accepte qu'un type de plugin par plugin ou plus.
|
|
$typologie_singuliere = ($configuration_typologie['max_affectations'] == 1);
|
|
|
|
// On détermine la liste des types de plugin de la catégorie concernée qui sont déjà affectés au plugin.
|
|
include_spip('inc/svptype_plugin');
|
|
$affectations = plugin_lister_type_plugin($prefixe, $typologie);
|
|
|
|
// Envoi des valeurs au formulaire.
|
|
$valeurs = [
|
|
'id_plugin' => $id_plugin,
|
|
'prefixe' => $prefixe,
|
|
'typologie' => $typologie,
|
|
'affectations' => $affectations,
|
|
'profondeur_max' => $configuration_typologie['max_profondeur'],
|
|
'typologie_singuliere' => $typologie_singuliere,
|
|
'attribut_id' => "plugin-{$typologie}",
|
|
'affecter_plugin' => '',
|
|
'desaffecter_plugin' => '',
|
|
'visible' => 0,
|
|
'editable' => $editable,
|
|
];
|
|
|
|
// Les options non definies dans $valeurs sont passees telles quelles au formulaire html
|
|
$valeurs = array_merge($options, $valeurs);
|
|
|
|
return $valeurs;
|
|
}
|
|
|
|
/**
|
|
* Traitement du formulaire d'affectation d'un type de plugin à un plugin donné.
|
|
*
|
|
* @param int $id_plugin Identifiant unique du plugin
|
|
* @param string $typologie Identifiant de la typologie
|
|
* @param null|array $options Options de chargement du formulaire :
|
|
*
|
|
* @return array Tableau des messages à afficher sur le formulaire
|
|
*/
|
|
function formulaires_editer_affectations_traiter(int $id_plugin, string $typologie, array $options = []) : array {
|
|
// Les options peuvent être limitées au booléen d'éditabilité
|
|
if (!isset($options['editable'])) {
|
|
$options['editable'] = true;
|
|
}
|
|
|
|
// Initialisation du retour
|
|
$retour = [
|
|
'editable' => $options['editable']
|
|
];
|
|
|
|
include_spip('inc/autoriser');
|
|
if ($options['editable']
|
|
and autoriser('affecter', 'plugin', $id_plugin)) {
|
|
$action_desaffecter_plugin = _request('desaffecter_plugin');
|
|
$action_affecter_plugin = _request('affecter_plugin');
|
|
|
|
if ($action_desaffecter_plugin) {
|
|
$affectation_courante = key($action_desaffecter_plugin);
|
|
$desaffecter = charger_fonction(
|
|
'desaffecter_plugin',
|
|
'action',
|
|
true
|
|
);
|
|
$desaffecter($affectation_courante);
|
|
}
|
|
|
|
if ($action_affecter_plugin) {
|
|
$nouvelle_affectation = reset($action_affecter_plugin);
|
|
if ($nouvelle_affectation) {
|
|
$affecter = charger_fonction(
|
|
'affecter_plugin',
|
|
'action',
|
|
true
|
|
);
|
|
$ancien_type_plugin = (int) (key($action_affecter_plugin));
|
|
$affecter("{$ancien_type_plugin}:{$nouvelle_affectation}");
|
|
}
|
|
}
|
|
}
|
|
|
|
return $retour;
|
|
}
|