You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
4.0 KiB
115 lines
4.0 KiB
<?php |
|
/** |
|
* Ce fichier contient l'action `rubrique_categorie_synchroniser_texte` utilisée lors de la migration |
|
* pour synchroniser le titre et la description d'une rubrique-catégorie avec sa catégorie. |
|
*/ |
|
if (!defined('_ECRIRE_INC_VERSION')) { |
|
return; |
|
} |
|
|
|
/** |
|
* Cette action permet de copier le titre et la description d'une catégorie dans les champs idoines |
|
* de la rubrique-catégorie associée si elle existe. |
|
* |
|
* Cette action est réservée aux webmestres. Elle accepte un argument optionnel pour forcer la mise à jour. |
|
* |
|
* @return void |
|
*/ |
|
function action_rubrique_categorie_synchroniser_texte_dist($arguments = null) { |
|
|
|
// Récupération des arguments de façon sécurisée. |
|
if (is_null($arguments)) { |
|
$securiser_action = charger_fonction('securiser_action', 'inc'); |
|
$arguments = $securiser_action(); |
|
} |
|
|
|
// Le seul argument accepté est l'indicateur de forçage. |
|
$forcer = false; |
|
if ($arguments) { |
|
$forcer = true; |
|
} |
|
|
|
// Verification des autorisations |
|
if (!autoriser('webmestre')) { |
|
include_spip('inc/minipres'); |
|
echo minipres(); |
|
exit(); |
|
} |
|
|
|
// Pour permettre de ranger les rubriques selon le classement alphabétique basé sur l'identifiant et donc |
|
// ajouter un numéro adéquat dans le titre, il faut synchroniser par niveau : |
|
// - les catégories de regroupement d'abord, |
|
// - et ensuite, pour chaque catégorie de regroupement, les catégories filles. |
|
|
|
// Récupération des catégories de regroupement (profondeur = 0). Les catégories sont déjà fournies avec |
|
// un tri alphabétique sur l'identifiant. |
|
include_spip('inc/svptype_type_plugin'); |
|
$categories_meres = type_plugin_repertorier('categorie', array('profondeur' => 0)); |
|
|
|
// On synchronise les rubriques mère et filles dans la même boucle. |
|
$rang_mere = 0; |
|
foreach ($categories_meres as $_categorie_mere) { |
|
// On synchronise la rubrique de regroupement. Le rang de la catégorie est toujours incrémenté que la rubrique |
|
$rang_mere++; |
|
rubrique_categorie_synchroniser($_categorie_mere, $rang_mere, $forcer); |
|
|
|
// Récupération des catégories filles |
|
$categories_filles = type_plugin_repertorier('categorie', array('id_parent' => $_categorie_mere['id_mot'])); |
|
|
|
// On synchronise les rubriques de filles selon la même heuristique. |
|
$rang_fille = 0; |
|
foreach ($categories_filles as $_categorie_fille) { |
|
$rang_fille++; |
|
rubrique_categorie_synchroniser($_categorie_fille, $rang_fille, $forcer); |
|
} |
|
} |
|
|
|
// TODO : ajouter le déblocage de toutes les éditions de l'auteur |
|
include_spip('inc/contrib_rubrique'); |
|
rubrique_debloquer_edition($GLOBALS['visiteur_session']['id_auteur']); |
|
} |
|
|
|
function rubrique_categorie_synchroniser($categorie, $rang, $forcer = false) { |
|
|
|
// Initialiser la sortie de la fonction à false qui indique qu'aucune mise à jour n'a été faite. |
|
$rubrique_synchronisee = false; |
|
|
|
// On récupère la rubrique-catégorie correspondante, si elle existe. |
|
$select = array('id_rubrique', 'titre', 'descriptif'); |
|
$from = 'spip_rubriques'; |
|
$where = array('categorie=' . sql_quote($categorie['identifiant'])); |
|
if ($rubrique = sql_fetsel($select, $from, $where)) { |
|
// La rubrique existe : |
|
// - On traite le titre. Si la catégorie possède un titre différent de l'identifiant |
|
// il est systématiquement utilisé. |
|
$set = array(); |
|
if ($categorie['titre'] and ($categorie['titre'] != $categorie['identifiant'])) { |
|
$numero = 10 * $rang; |
|
$set['titre'] = "${numero}. {$categorie['titre']}"; |
|
} |
|
|
|
// -- On traite le descriptif : |
|
// on ne remplace le descriptif que si l'option de forçage est active ou que celui-ci est vide. |
|
if ($rubrique['descriptif']) { |
|
// Forçage du descriptif |
|
if ($forcer) { |
|
if ($categorie['descriptif']) { |
|
$set['descriptif'] = $categorie['descriptif']; |
|
} |
|
} |
|
} else { |
|
if ($categorie['descriptif']) { |
|
$set['descriptif'] = $categorie['descriptif']; |
|
} |
|
} |
|
|
|
// Si il y a un champ à modifier, on met à jour la rubrique. |
|
if ($set) { |
|
include_spip('action/editer_objet'); |
|
objet_modifier('rubrique', intval($rubrique['id_rubrique']), $set); |
|
$rubrique_synchronisee = true; |
|
} |
|
} |
|
|
|
return $rubrique_synchronisee; |
|
}
|
|
|