8 changed files with 356 additions and 21 deletions
@ -0,0 +1,120 @@
|
||||
<?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. Seuls les textes non vides sont copiés. |
||||
* |
||||
* Cette action est réservée aux webmestres. Elle ne nécessite aucun argument. |
||||
* |
||||
* @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 et le texte: |
||||
// - Si le descriptif existe dans la rubrique et que le texte est vide on recopie le descriptif dans le texte |
||||
// - Ensuite, on ne le remplace le descriptif que si l'option de forçage est active ou que celui-ci est vide. |
||||
if ($rubrique['descriptif']) { |
||||
// Recopie du descriptif |
||||
if (!$rubrique['texte']) { |
||||
$set['texte'] = $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; |
||||
} |
@ -0,0 +1,90 @@
|
||||
<?php |
||||
/** |
||||
* Ce fichier contient l'action `rubrique_textes_synchroniser` 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. Seuls les textes non vides sont copiés. |
||||
* |
||||
* Cette action est réservée aux webmestres. Elle ne nécessite aucun argument. |
||||
* |
||||
* @return void |
||||
*/ |
||||
function action_rubrique_plugin_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(); |
||||
} |
||||
|
||||
// Récupération des rubriques-plugin idenfiées parce que leur préfixe est initialisé. |
||||
include_spip('inc/contrib_rubrique'); |
||||
$filtres = array( |
||||
'categorie' => '', |
||||
'prefixe' => '!' |
||||
); |
||||
$rubriques_plugin = rubrique_repertorier($filtres); |
||||
|
||||
// Pour chaque rubrique on recherche le titre et le slogan du plugin associé pour remplir respectivement |
||||
// le titre, le descriptif et le texte de la rubrique. |
||||
include_spip('inc/svp_plugin'); |
||||
include_spip('action/editer_objet'); |
||||
foreach ($rubriques_plugin as $_rubrique) { |
||||
// Récupération des champs du plugin |
||||
if ($plugin = plugin_lire($_rubrique['prefixe'])) { |
||||
// Identification des modifications |
||||
$set = array(); |
||||
// -- On traite le titre. Si le plugin possède un nom il est systématiquement utilisé. |
||||
if ($plugin['nom']) { |
||||
$set['titre'] = $plugin['nom']; |
||||
} |
||||
|
||||
// -- On traite le descriptif et le texte: |
||||
// - Si le descriptif existe dans la rubrique et que le texte est vide on recopie le descriptif dans le texte |
||||
// - Ensuite, on ne le remplace le descriptif que si l'option de forçage est active ou que celui-ci est vide. |
||||
if ($_rubrique['descriptif']) { |
||||
// Recopie du descriptif |
||||
if (!$_rubrique['texte']) { |
||||
$set['texte'] = $_rubrique['descriptif']; |
||||
} |
||||
// Forçage du descriptif |
||||
if ($forcer) { |
||||
if ($plugin['slogan']) { |
||||
$set['descriptif'] = $plugin['slogan']; |
||||
} |
||||
} |
||||
} else { |
||||
if ($plugin['slogan']) { |
||||
$set['descriptif'] = $plugin['slogan']; |
||||
} |
||||
} |
||||
|
||||
// Si il y a un champ à modifier, on met à jour la rubrique. |
||||
if ($set) { |
||||
objet_modifier('rubrique', intval($_rubrique['id_rubrique']), $set); |
||||
} |
||||
} |
||||
} |
||||
|
||||
// TODO : ajouter le déblocage de toutes les éditions de l'auteur |
||||
rubrique_debloquer_edition($GLOBALS['visiteur_session']['id_auteur']); |
||||
} |
@ -1,12 +1,15 @@
|
||||
[(#REM) <!-- Boite d'information sur le dashboard et boutons de raccourcis --> ] |
||||
#BOITE_OUVRIR{#CHEMIN_IMAGE{boussole_gerer-24.png}|balise_img{'',cadre-icone}, info} |
||||
<:contrib:boite_info_explication:> |
||||
#BOITE_FERMER |
||||
|
||||
[(#AUTORISER{webmestre}|oui) |
||||
#BOITE_OUVRIR{'', raccourcis} |
||||
[(#URL_ACTION_AUTEUR{rubrique_prefixe_generer, '', #SELF} |
||||
|icone_horizontale{<:contrib:rubrique_prefixe_generer_label:>, rubrique_plugin-24.png})] |
||||
[(#URL_ACTION_AUTEUR{plugin_categorie_changer, '', #SELF} |
||||
|icone_horizontale{<:contrib:plugin_categorie_changer_label:>, plugin_categorie-24.png})] |
||||
[(#URL_ACTION_AUTEUR{rubrique_categorie_synchroniser_texte, '', #SELF} |
||||
|icone_horizontale{<:contrib:rubrique_categorie_synchroniser_texte_label:>, rubrique_plugin-24.png})] |
||||
[(#URL_ACTION_AUTEUR{rubrique_plugin_generer_prefixe, '', #SELF} |
||||
|icone_horizontale{<:contrib:rubrique_plugin_generer_prefixe_label:>, rubrique_plugin-24.png})] |
||||
[(#URL_ACTION_AUTEUR{rubrique_plugin_synchroniser_texte, '', #SELF} |
||||
|icone_horizontale{<:contrib:rubrique_plugin_synchroniser_texte_label:>, rubrique_plugin-24.png})] |
||||
#BOITE_FERMER |
||||
] |
||||
|
Loading…
Reference in new issue