Browse Source

On migre la configuration sous une forme générique en gardant au mieux les anciennes config.

svn/root/tags/v2.0.8
rastapopoulos@spip.org 4 years ago
parent
commit
2f8902a3bf
  1. 2
      .gitattributes
  2. 16
      action/dupliquer_objet.php
  3. 85
      duplicator_administrations.php
  4. 88
      formulaires/configurer_duplicator.html
  5. 72
      formulaires/configurer_duplicator.php
  6. 14
      lang/duplicator_fr.php
  7. 1
      paquet.xml
  8. 2
      prive/squelettes/contenu/configurer_duplicator.html

2
.gitattributes vendored

@ -2,9 +2,11 @@
/a_faire.txt -text
action/duplicator.php -text
action/dupliquer_objet.php -text
/duplicator_administrations.php -text
/duplicator_autoriser.php -text
/duplicator_pipelines.php -text
formulaires/configurer_duplicator.html -text
formulaires/configurer_duplicator.php -text
inc/duplicator.php -text
lang/duplicator_fr.php -text
lang/paquet-duplicator_fr.php -text

16
action/dupliquer_objet.php

@ -100,6 +100,22 @@ function objet_dupliquer($objet, $id_objet, $modifications=array(), $options=arr
}
if (!function_exists('logo_dupliquer')) {
/**
* Dupliquer un logo entre deux contenus
*
* Cette fonction est destinée à être remplacé par une plus moderne dans le plugin Rôles de documents, qui gère alors aussi les logos en documents.
*
* @param $objet
* Type de l'objet dont on veut dupliquer le logo
* @param $id_source
* Identifiant de l'objet dont on veut dupliquer le logo
* @param $id_cible
* Identifiant de l'objet sur lequel mettre le logo dupliqué
* @param $etat
* État du logo (on ou off)
* @return
* Retourne le chemin du nouveau logo si tout s'est déroulé correctement
*/
function logo_dupliquer($objet, $id_source, $id_cible, $etat='on') {
$chercher_logo = charger_fonction('chercher_logo', 'inc');
$cle_objet = id_table_objet($objet);

85
duplicator_administrations.php

@ -0,0 +1,85 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Fonction d'installation et de mise à jour du plugin Duplicator.
*
* @param string $nom_meta_base_version
* Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
* @param string $version_cible
* Version du schéma de données dans ce plugin (déclaré dans paquet.xml)
* @return void
**/
function duplicator_upgrade($nom_meta_base_version, $version_cible) {
$maj = array();
// Rien à faire à l'installation
$maj['create'] = array();
// Pour les anciens qui migrent, on déplace la config
$maj['1.0.0'] = array(
array('duplicator_maj_1_0_0'),
);
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}
/**
* Fonction de désinstallation du plugin Chapitres.
*
* @param string $nom_meta_base_version
* Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP
* @return void
**/
function duplicator_vider_tables($nom_meta_base_version) {
// Effacer la config
effacer_meta('duplicator');
effacer_meta($nom_meta_base_version);
}
/**
* On déplace la config tant que faire se peut
*/
function duplicator_maj_1_0_0() {
include_spip('inc/config');
$config = lire_config('duplicator/config');
$nouvelle_config = array();
// Config des objets
if (isset($config['duplic_rubrique']) and $config['duplic_rubrique'] == 'oui') {
$nouvelle_config['objets'][] = 'spip_rubriques';
}
if (isset($config['duplic_article']) and $config['duplic_article'] == 'oui') {
$nouvelle_config['objets'][] = 'spip_articles';
}
// Config des champs
if (isset($config['rub_champs']) and $champs = $config['rub_champs']) {
$champs = explode(',', $champs);
$champs = array_map('trim', $champs);
$nouvelle_config['rubriques']['champs'] = $champs;
}
if (isset($config['art_champs']) and $champs = $config['art_champs']) {
$champs = explode(',', $champs);
$champs = array_map('trim', $champs);
$nouvelle_config['articles']['champs'] = $champs;
}
// Config des autorisations : non on prend par défaut plutôt, qui n'existait pas avant, donc ça on ne le migre pas
// Config du statut
if (isset($config['duplic_article_etat_pub']) and $config['duplic_article_etat_pub'] == 'oui') {
$nouvelle_config['articles']['statut'] = '';
}
else {
$nouvelle_config['articles']['statut'] = 'prepa';
}
// Et on enregistre
ecrire_config('duplicator', $nouvelle_config);
}

88
formulaires/configurer_duplicator.html

@ -1,89 +1 @@
<div class="formulaire_spip formulaire_configurer formulaire_#FORM formulaire_#FORM-#ENV{id,nouveau}">
<h3 class="titrem"><:duplicator:configuration_duplicator:></h3>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV**{message_erreur})</p>]
[(#ENV{editable})
<form method='post' action='#ENV{action}'><div>
[(#REM) declarer les hidden qui declencheront le service du formulaire
parametre : url d'action ]
#ACTION_FORMULAIRE{#ENV{action}}
<fieldset>
<legend><:duplicator:texte_duplicator:></legend>
<ul>
<li class="editer duplic_objet[ (#ENV**{erreurs}|table_valeur{duplic_objet}|oui)erreur]">
<label><:duplicator:choix_type:></label>
[<span class='erreur_message'>(#ENV**{erreurs}|table_valeur{duplic_objet})</span>]
<div class="choix">
<input type="checkbox" name="duplic_rubrique" class="checkbox" value="oui" id="duplic_rubrique"[(#ENV{duplic_rubrique,''}|=={oui}|oui)checked="checked"] />
<label for="duplic_rubrique"><:duplicator:dupli_rub:></label>
</div>
<div class="choix">
<input type="checkbox" name="duplic_article" class="checkbox" value="oui" id="duplic_article"[(#ENV{duplic_article,''}|=={oui}|oui)checked="checked"] />
<label for="duplic_article"><:duplicator:dupli_art:></label>
</div>
</li>
</ul>
</fieldset>
<fieldset>
<legend><:duplicator:choix_champs:></legend>
<ul>
<li>
<label for="art_champs"><:duplicator:label_art_champs:></label>
<p class="explication"><:duplicator:aide_choix_champs:></p>
<textarea name="art_champs" id="art_champs" cols="60" rows="2">[(#CONFIG{duplicator/config/art_champs})]</textarea>
</li>
<li>
<label for="rub_champs"><:duplicator:label_rub_champs:></label>
<p class="explication"><:duplicator:aide_choix_champs:></p>
<textarea name="rub_champs" id="rub_champs" cols="60" rows="2">[(#CONFIG{duplicator/config/rub_champs})]</textarea>
</li>
</ul>
</fieldset>
<fieldset>
<legend><:duplicator:autorisations:></legend>
<ul>
<li>
<label for="duplic_article_autorisation"><:duplicator:autorisations_article:></label>
<div class="choix">
<select name="duplic_article_autorisation" id="duplic_article_autorisation">
<option value="webmestre" [(#ENV{duplic_article_autorisation,''}|=={webmestre}|oui)selected="selected"]><:duplicator:autorisations_webmestre_label:></option>
<option value="0minirezo" [(#ENV{duplic_article_autorisation,''}|=={0minirezo}|oui)selected="selected"]><:duplicator:autorisations_admin_label:></option>
<option value="1comite" [(#ENV{duplic_article_autorisation,''}|=={1comite}|oui)selected="selected"]><:duplicator:autorisations_redacteur_label:></option>
</select>
</div>
</li>
<li>
<label for="duplic_rubrique_autorisation"><:duplicator:autorisations_rubriques:></label>
<div class="choix">
<select name="duplic_rubrique_autorisation" id="duplic_rubrique_autorisation">
<option value="webmestre" [(#ENV{duplic_rubrique_autorisation,''}|=={webmestre}|oui)selected="selected"]><:duplicator:autorisations_webmestre_label:></option>
<option value="0minirezo" [(#ENV{duplic_rubrique_autorisation,''}|=={0minirezo}|oui)selected="selected"]><:duplicator:autorisations_admin_label:></option>
<option value="1comite" [(#ENV{duplic_rubrique_autorisation,''}|=={1comite}|oui)selected="selected"]><:duplicator:autorisations_redacteur_label:></option>
</select>
</div>
</li>
</ul>
</fieldset>
<fieldset>
<legend><:duplicator:etat_article:></legend>
<ul>
<li>
<label><:duplicator:dupli_art_etat_pub:></label>
<div class="choix">
<p class="explication"><:duplicator:dupli_art_etat_pub_expl:></p>
<input type="checkbox" name="duplic_article_etat_pub" class="checkbox" value="oui" id="duplic_article_etat_pub"[(#ENV{duplic_article_etat_pub,''}|=={oui}|oui)checked="checked"] />
<label for="duplic_article_etat_pub"><:duplicator:dupli_art_etat_pub_label:></label>
</div>
</li>
</ul>
</fieldset>
<input type="hidden" name="_meta_casier" value="duplicator/config" />
<p class='boutons'><span class='image_loading'>&nbsp;</span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p>
</div></form>]
</div>

72
formulaires/configurer_duplicator.php

@ -0,0 +1,72 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
include_spip('base/objets');
function formulaires_configurer_duplicator_saisies_dist() {
$declaration_objets = lister_tables_objets_sql();
$config = lire_config('duplicator');
$saisies = array(
array(
'saisie' => 'choisir_objets',
'options' => array(
'nom' => 'objets',
'label' => _T('duplicator:configurer_objets_label'),
'defaut' => isset($config['objets']) ? $config['objets'] : array(),
),
),
);
// Pour chaque objet déjà choisi, on ajoute des options
if (isset($config['objets'])) {
foreach ($config['objets'] as $table_objet_sql) {
// Si l'objet fait toujours parti des objets installés
if (isset($declaration_objets[$table_objet_sql]) and $declaration_objet = $declaration_objets[$table_objet_sql]) {
$table_objet = table_objet($table_objet_sql);
$objet = objet_type($table_objet);
$groupe_objet = array(
'saisie' => 'fieldset',
'options' => array(
'nom' => "groupe_$table_objet",
'label' => _T($declaration_objet['texte_objets']),
),
'saisies' => array(),
);
// Si l'objet a des champs
if (isset($declaration_objet['field']) and $champs = $declaration_objet['field']) {
foreach ($champs as $champ=>$sql) {
$champs[$champ] = $champ;
}
$groupe_objet['saisies'][] = array(
'saisie' => 'case',
'options' => array(
'nom' => "${table_objet}[personnaliser_champs]",
'label_case' => _T('duplicator:configurer_personnaliser_champs_label'),
'defaut' => (isset($config[$table_objet]['champs']) and $config[$table_objet]['champs']) ? 'on' : '',
),
);
$groupe_objet['saisies'][] = array(
'saisie' => 'checkbox',
'options' => array(
'nom' => "${table_objet}[champs]",
'label' => _T('duplicator:configurer_champs_label'),
'data' => $champs,
'defaut' => isset($config[$table_objet]['champs']) ? $config[$table_objet]['champs'] : array(),
'afficher_si' => "@${table_objet}[personnaliser_champs]@ == 'on'",
),
);
}
$saisies[] = $groupe_objet;
}
}
}
return $saisies;
}

14
lang/duplicator_fr.php

@ -1,8 +1,10 @@
<?php
// Ceci est un fichier langue de SPIP -- This is a SPIP language file
$GLOBALS[$GLOBALS['idx_lang']] = array(
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// A
'aide_choix_champs' => 'Liste des noms des champs SQL séparés par des ","<br/><em>Laisser vide pour sélectionner tous les champs principaux.</em>',
'action_dupliquer_article' => "Dupliquer cet article",
@ -15,8 +17,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'autorisations_rubriques' => 'Qui peut dupliquer des rubriques&nbsp;?',
'autorisations_webmestre_label' => 'Webmestre uniquement',
// B
'bouton_confirmer' => 'Confirmer',
'bouton_confirmer_rub' => "Tout dupliquer (arborescence+articles)",
@ -25,8 +25,10 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
// C
'choix_type' => 'Sélectionner le ou les mode(s) de duplication',
'choix_champs' => 'Choisir les champs à dupliquer',
'configuration_duplicator' => 'Configuration de Duplicator',
'configurer_champs_label' => 'Champs à dupliquer',
'configurer_objets_label' => 'Contenus à dupliquer',
'configurer_personnaliser_champs_label' => 'Personnaliser les champs à dupliquer pour ces contenus',
'configurer_titre' => 'Configuration de Duplicator',
// D
'dupli_art' => "Duplication sur les articles",

1
paquet.xml

@ -2,6 +2,7 @@
prefix="duplicator"
categorie="edition"
version="2.0.0-dev"
schema="1.0.0"
etat="dev"
compatibilite="[3.0.0;3.2.*]"
logo="prive/themes/spip/images/duplicator.png"

2
prive/squelettes/contenu/configurer_duplicator.html

@ -1,6 +1,6 @@
[(#AUTORISER{configurer,duplicator}|sinon_interdire_acces)]
<h1 class="grostitre"><:duplicator:configuration_duplicator:></h1>
<h1 class="grostitre"><:duplicator:configurer_titre:></h1>
<div class="ajax">
#FORMULAIRE_CONFIGURER_DUPLICATOR
</div>

Loading…
Cancel
Save