Browse Source

Implémentation de la possibilité d'importer des configurations ieconfig propre au site (sauvegardé dans ../ieconfig) dans la section squelette->Configurations rapides de SoyezCréateurs

Possibilité d'importer des configuration relative :
 - aux jeux de couleurs sans les polices
 - aux jeux de polices sans les couleurs
 - à l'aspect général du site (onglet principal et Positionnement)

NB : les fichiers doivent suivre un nommage bien précis pour être proposé à l'import.
Ils doivent commencer par :
 - soyezcreateurs_couleurs pour les jeux de couleurs
 - soyezcreateurs_police pour les jeux de polices
 - soyezcreateurs_layout pour l'apparence du site
Ils doivent être dans le fichier ieconfig de SoyezCréateurs

NNB La phase de test n'est pas complète, des beug peuvent existés et seront corrigés dès que détectés
svn/root
riedel.nobuyuki@yahoo.fr 3 years ago
parent
commit
a03c63b6ea
  1. 3
      .gitattributes
  2. 6
      .gitignore
  3. 16
      formulaires/export_soyezcreateurs.php
  4. 32
      formulaires/ieconfig_import_specifique_couleurs.html
  5. 271
      formulaires/ieconfig_import_specifique_couleurs.php
  6. 4
      lang/soyezcreateursprive_fr.php
  7. 1
      paquet.xml
  8. 24
      prive/exec/sc_import.html
  9. 25
      soyezcreateurs_ieconfig.php

3
.gitattributes

@ -221,6 +221,8 @@ formulaires/evenements_par_mots_compteur.html -text
formulaires/export_soyezcreateurs.html -text
formulaires/export_soyezcreateurs.php -text
formulaires/forum.html -text
formulaires/ieconfig_import_specifique_couleurs.html -text
formulaires/ieconfig_import_specifique_couleurs.php -text
formulaires/inc-forum_previsu.html -text
formulaires/inc-graver-nom.html -text
formulaires/inc-login_forum.html -text
@ -723,6 +725,7 @@ polices/police_vignettes_portail.ttf -text
/popup_musique.html -text
prive/exec/sc_aide.html -text
prive/exec/sc_bannieres.html -text
prive/exec/sc_import.html -text
prive/exec/sc_vide.html -text
prive/squelettes/contenu/configurer_soyezcreateurs.html -text
prive/squelettes/inclure/configurer_soyezcreateurs.html -text

6
.gitignore

@ -1,2 +1,8 @@
/desktop.ini
formulaires/ieconfig_import_specifique_couleurs.html
formulaires/ieconfig_import_specifique_couleurs.php
formulaires/ieconfig_import_specifique_layout.html
formulaires/ieconfig_import_specifique_layout.php
formulaires/ieconfig_import_specifique_police.html
formulaires/ieconfig_import_specifique_police.php
images/Thumbs.db

16
formulaires/export_soyezcreateurs.php

@ -118,6 +118,7 @@ function formulaires_export_soyezcreateurs_traiter_dist() {
include_spip('soyezcreateurs_fonctions_ieconfig');
$export = array();
$export['nom'] = _request('ieconfig_export_nom');
$nom = $export['nom'];
if (_request('ieconfig_export_description') != '') {
$export['description'] = _request('ieconfig_export_description');
}
@ -126,15 +127,25 @@ function formulaires_export_soyezcreateurs_traiter_dist() {
$url = getURI();
if (strpos($url, '&cfg=soyezcreateurs_layout')) {
$export['soyezcreateurs']['soyezcreateurs_layout'] = soyezcreateurs_tableau_export_spe('soyezcreateurs_layout')['soyezcreateurs_layout'];
$site = 'soyezcreateurs_layout';
}
elseif (strpos($url, '&cfg=soyezcreateurs_couleurs')) {
$export['soyezcreateurs']['soyezcreateurs_couleurs'] = soyezcreateurs_tableau_export_spe('soyezcreateurs_couleurs')['soyezcreateurs_couleurs'];
if (strpos($nom, 'police')) {
$site = 'soyezcreateurs_police';
}
else {
$site = 'soyezcreateurs_couleurs';
}
}
elseif (strpos($url, '&cfg=soyezcreateurs_google')) {
$export['soyezcreateurs']['soyezcreateurs_google'] = soyezcreateurs_tableau_export_spe('soyezcreateurs_google')['soyezcreateurs_google'];
$site = 'soyezcreateurs_google';
}
elseif (strpos($url, '&cfg=soyezcreateurs')) {
$export['soyezcreateurs']['soyezcreateurs'] = soyezcreateurs_tableau_export_spe('soyezcreateurs')['soyezcreateurs'];
$site = 'soyezcreateurs_layout';
}
@ -145,11 +156,6 @@ function formulaires_export_soyezcreateurs_traiter_dist() {
// Nom du fichier
include_spip('inc/texte');
$site = isset($GLOBALS['meta']['nom_site']) ? preg_replace(array(",\W,is", ',_(?=_),', ',_$,'), array(
'_',
'',
'',
), couper(translitteration(trim($GLOBALS['meta']['nom_site'])), 30, '')) : 'spip';
$filename = $site . '_' . date('Y-m-d_H-i') . '.yaml';
// Si telechargement

32
formulaires/ieconfig_import_specifique_couleurs.html

@ -0,0 +1,32 @@
<div id="tmp_id" class="formulaire_spip formulaire_ieconfig_import">
<h3 class="titrem"><:ieconfig:titre_import:></h3>
[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
<form id="tmp_id2" action="#ENV{action}" method="post" enctype="multipart/form-data"><div>
#ACTION_FORMULAIRE{#ENV{action}}
<[(#VAL{ul}|saisie_balise_structure_formulaire)] class="editer-groupe">
#GENERER_SAISIES{#ENV{_saisies}}
</[(#VAL{ul}|saisie_balise_structure_formulaire)]>
[<textarea name="_code_yaml" id="_code_yaml" style="display:none;">(#ENV{_code_yaml})</textarea>]
<p class="boutons">
[(#ENV{_code_yaml}|oui)
<input type="submit" class="submit link" name="annuler" value="<:bouton_annuler:>" />
<input type="submit" class="submit" name="importer" value="<:ieconfig:titre_import:>" />]
[(#ENV{_code_yaml}|non)
<input type="submit" class="submit" name="suivant" value="<:ieconfig:titre_import:>" />]
</p>
</div></form>
</div>
<script type='text/javascript' src='jwplayer.js'></script>
<script type='text/javascript'>
function idRandom() {
var length = 9;
var prefix = 'id-formulaire-import-'; // To be 100% sure id starts with letter
// Convert it to base 36 (numbers + letters), and grab the first 9 characters
// after the decimal.
var id = prefix + Math.random().toString(36).substr(2, length);
return id;
}
document.getElementById('tmp_id').id = idRandom();
document.getElementById('tmp_id2').id = idRandom();
</script>

271
formulaires/ieconfig_import_specifique_couleurs.php

@ -0,0 +1,271 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
function ieconfig_saisies_import_specifique_couleurs($section) {
// Etape de selection du fichier
if (!_request('_code_yaml') or _request('annuler') or _request('importer')) {
$saisies = array(
array(
'saisie' => 'fieldset',
'options' => array(
'nom' => 'ieconfig_import_choix_fichier',
'label' => '<:soyezcreateursprive:ieconfig_import_spe_'.$section.':>',
'icone' => 'img/ieconfig-import.png',
),
'saisies' => array(
array(
'saisie' => 'input',
'options' => array(
'type' => 'file',
'nom' => 'ieconfig_import_fichier',
'label' => '<:ieconfig:label_ieconfig_import_fichier:>',
'explication' => '<:ieconfig:explication_ieconfig_import_fichier:>',
),
),
array(
'saisie' => 'selection',
'options' => array(
'type' => 'selection',
'nom' => 'ieconfig_import_local',
'label' => '<:ieconfig:label_ieconfig_import_local:>',
'explication' => '<:ieconfig:explication_ieconfig_import_local:>',
'datas' => ieconfig_config_locales_specifique_couleurs($section),
),
),
),
),
);
// Options d'importations
} else {
include_spip('inc/yaml');
$config = yaml_decode(_request('_code_yaml'));
$texte_explication = '<b>' . _T('ieconfig:texte_nom') . '</b> ' . _T_ou_typo($config['nom']);
if ($config['description'] != '') {
$texte_explication .= '<br /><b>' . _T('ieconfig:texte_description') . '</b> ' . _T_ou_typo($config['description']);
}
// On identifie les entrées ne correspondant pas à un plugin
// Ou bien non déclarées dans ieconfig_metas
// Convention : les clés du tableau de config correspondent aux préfixes des plugins
$entrees = $config;
unset($entrees['nom']);
unset($entrees['description']);
unset($entrees['necessite']);
$entrees = array_map('strtolower', array_keys($entrees));
$plugins = array_map('strtolower', array_keys(unserialize($GLOBALS['meta']['plugin'])));
$entrees_prises_en_charge = array_merge(array_keys(pipeline('ieconfig_metas', array())), $plugins);
$plugins_manquants = array_diff($entrees, $entrees_prises_en_charge);
if (count($plugins_manquants) > 0) {
$texte_explication .= '<p class="reponse_formulaire reponse_formulaire_erreur">' . _T('ieconfig:texte_plugins_manquants', array('plugins' => implode(', ', $plugins_manquants))) . '</p>';
}
$saisies = array(
array(
'saisie' => 'explication',
'options' => array(
'nom' => 'import_details',
'texte' => $texte_explication,
),
),
);
// Gestion des plugins utilisant le pipeline ieconfig_metas
$ieconfig_metas = array();
foreach (pipeline('ieconfig_metas', array()) as $prefixe => $data) {
if (isset($config[$prefixe])) {
if (isset($data['icone'])) {
$icone = chemin_image($data['icone']);
if (!$icone) {
$icone = find_in_path($data['icone']);
}
if ($icone) {
$icone = '<img src="' . $icone . '" alt="" style="margin-left:-50px; margin-right:34px;" />';
}
} else {
$icone = '';
}
$ieconfig_metas[$prefixe] = $icone . (isset($data['titre']) ? $data['titre'] : $prefixe);
}
}
if (count($ieconfig_metas) > 0) {
$saisies[] = array(
'saisie' => 'fieldset',
'options' => array(
'nom' => 'metas_fieldset',
'label' => _T('ieconfig:label_importer_metas'),
'icone' => 'config-export-16.png',
),
'saisies' => array(
array(
'saisie' => 'checkbox',
'options' => array(
'nom' => 'import_metas',
'label' => _T('ieconfig:label_importer'),
'tout_selectionner' => 'oui',
'datas' => $ieconfig_metas,
),
),
),
);
}
// On passe via le pipeline ieconfig
$saisies = pipeline('ieconfig', array(
'args' => array(
'action' => 'form_import',
'config' => $config,
),
'data' => $saisies,
));
}
return $saisies;
}
function formulaires_ieconfig_import_specifique_couleurs_charger_dist($section) {
include_spip('inc/saisies');
$saisies = ieconfig_saisies_import_specifique_couleurs($section);
$contexte = array(
'_saisies' => $saisies,
);
if (_request('_code_yaml') and !_request('annuler') and !_request('importer')) {
$contexte['_code_yaml'] = _request('_code_yaml');
}
return array_merge(saisies_charger_champs($saisies), $contexte);
}
function formulaires_ieconfig_import__specifique_couleursverifier_dist() {
$erreurs = array();
// Etape de selection du fichier
if (!_request('_code_yaml')) {
// On a rien transmis et pas de fichier local
if (!_request('ieconfig_import_local') and $_FILES['ieconfig_import_fichier']['name'] == '') {
$erreurs['message_erreur'] = _T('ieconfig:message_erreur_fichier_import_manquant');
}
} // Options d'import
else {
include_spip('inc/saisies');
$erreurs = saisies_verifier(ieconfig_saisies_import_specifique_couleurs($section));
}
return $erreurs;
}
function formulaires_ieconfig_import_specifique_couleurs_traiter_dist($section) {
include_spip('inc/config');
// Si on est à l'étape de sélection d'un fichier de configuration
// On place le code YAML dans le contexte
if (!_request('_code_yaml')) {
if ($_FILES['ieconfig_import_fichier']['name'] != '') {
$dir = sous_repertoire(_DIR_TMP, 'ieconfig');
$hash = md5('ieimport-' . $GLOBALS['visiteur_session']['id_auteur'] . time());
$fichier = $dir . $hash . '-' . $_FILES['ieconfig_import_fichier']['name'];
move_uploaded_file($_FILES['ieconfig_import_fichier']['tmp_name'], $fichier);
lire_fichier($fichier, $code_yaml);
@unlink($fichier);
} else {
$fichier = _request('ieconfig_import_local');
lire_fichier($fichier, $code_yaml);
}
set_request('_code_yaml', $code_yaml);
} // Si on valide l'import
elseif (_request('importer') && _request('_code_yaml')) {
include_spip('inc/yaml');
$config = yaml_decode(_request('_code_yaml'));
// On passe via le pipeline ieconfig
$message_erreur = pipeline('ieconfig', array(
'args' => array(
'action' => 'import',
'config' => $config,
),
'data' => '',
));
// Gestion des plugins utilisant le pipeline ieconfig_metas
$import_metas = _request('import_metas');
if (!is_array($import_metas)) {
$import_metas = array();
}
foreach (pipeline('ieconfig_metas', array()) as $prefixe => $data) {
if (in_array($prefixe, $import_metas) && isset($config[$prefixe])) {
if (isset($data['metas_brutes'])) {
foreach (explode(',', $data['metas_brutes']) as $meta) {
// On teste le cas ou un prefixe est indique (dernier caractere est *)
if (substr($meta, -1) == '*') {
$p = substr($meta, 0, -1);
foreach ($config[$prefixe] as $m => $v) {
if (substr($m, 0, strlen($p)) == $p) {
ecrire_config($m . '/', $v);
}
}
} elseif (isset($config[$prefixe][$meta])) {
ecrire_config($meta . '/', $config[$prefixe][$meta]);
}
}
}
if (isset($data['metas_serialize'])) {
foreach (explode(',', $data['metas_serialize']) as $meta) {
// On teste le cas ou un prefixe est indique (dernier caractere est *)
if (substr($meta, -1) == '*') {
$p = substr($meta, 0, -1);
foreach ($config[$prefixe] as $m => $v) {
if (substr($m, 0, strlen($p)) == $p) {
ecrire_config($m . '/', serialize($v));
}
}
} elseif (isset($config[$prefixe][$meta])) {
ecrire_config($meta . '/', serialize($config[$prefixe][$meta]));
}
}
}
}
}
if ($message_erreur != '') {
return array('message_erreur' => $message_erreur);
} else {
return array('message_ok' => _T('ieconfig:message_ok_import'));
}
}
}
// Renvoie la liste des fichiers de configurations présents dans un sous-répertoires ieconfig/
function ieconfig_config_locales_specifique_couleurs($section) {
$liste_config = null;
if (is_null($liste_config)) {
include_spip('inc/yaml');
$liste_config = array();
$match = 'soyezcreateurs_'.$section.'.+[.]yaml$';
foreach (array_merge(find_all_in_path('ieconfig/', $match)) as $fichier => $chemin) {
$config = yaml_decode_file($chemin);
// On regarde s'il y a un necessite
$ok = true;
if (isset($config['necessite'])) {
if (!is_array($config['necessite'])) {
$config['necessite'] = array($config['necessite']);
}
foreach ($config['necessite'] as $plugin) {
if (!defined('_DIR_PLUGIN_' . strtoupper($plugin))) {
$ok = false;
}
}
}
//on vérifie s'il y a un champs nom
if ($ok) {
if (isset($config['nom'])) {
$liste_config[$chemin] = _T_ou_typo($config['nom']);
} else {
$liste_config[$chemin] = $fichier;
}
}
}
}
return $liste_config;
}

4
lang/soyezcreateursprive_fr.php

@ -384,7 +384,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'ieconfig_import_spe' => 'Importation de configuration pré-enregistrés.',
'ieconfig_import_spe_couleurs' => 'Importation de configuration pré-enregistrés de jeux de couleurs.',
'ieconfig_import_spe_couleurs_choix' => 'Importation de configuration pré-enregistrés de jeux de couleurs.',
'configurations_rapides_soyezcreateurs' => 'Configurations rapides de SoyezCréateurs'
'configurations_rapides_soyezcreateurs' => 'Configurations rapides de SoyezCréateurs',
'ieconfig_import_spe_police' => 'Importation de configuration pré-enregistrés de jeux de polices.',
'ieconfig_import_spe_layout' => 'Importation de configuration pré-enregistrés de jeux de positionnement ou de template.'
);

1
paquet.xml

@ -93,4 +93,5 @@
<menu nom="soyezcreateur_config21" titre="soyezcreateurs:configurersc" parent="bando_configuration" icone="images/soyezcreateurs-16.png" action="configurer_soyezcreateurs" parametres="cfg=soyezcreateurs" />
<menu nom="sc_aide" titre="soyezcreateurs:aidesc" parent="bando_squelette" icone="images/soyezcreateurs_help-16.png" action="sc_aide" />
<menu nom="sc_import" titre="soyezcreateursprive:configurations_rapides_soyezcreateurs" parent="bando_squelette" icone="images/soyezcreateurs_help-16.png" action="sc_import" />
</paquet>

24
prive/exec/sc_import.html

@ -0,0 +1,24 @@
<h1><:soyezcreateursprive:ieconfig_import_spe:></h1>
<div id="couleurs" class="ajax">
#FORMULAIRE_IECONFIG_IMPORT_SPECIFIQUE_COULEURS{"couleurs"}
</div>
<div id="police" class="ajax">
#FORMULAIRE_IECONFIG_IMPORT_SPECIFIQUE_COULEURS{"police"}
</div>
<div id="layout" class="ajax">
#FORMULAIRE_IECONFIG_IMPORT_SPECIFIQUE_COULEURS{"layout"}
</div>
<script type='text/javascript' src='jwplayer.js'></script>
<script type='text/javascript'>
function idRandom() {
var length = 9;
var prefix = 'id-formulaire-import-'; // To be 100% sure id starts with letter
// Convert it to base 36 (numbers + letters), and grab the first 9 characters
// after the decimal.
var id = prefix + Math.random().toString(36).substr(2, length);
return id;
}
document.getElementById('couleurs').id = idRandom();
document.getElementById('police').id = idRandom();
document.getElementById('layout').id = idRandom();
</script>

25
soyezcreateurs_ieconfig.php

@ -17,6 +17,7 @@
// Formulaire d'import
if ($action == 'form_import' && isset($flux['args']['config']['soyezcreateurs'])) {
//var_export($flux);
$url = getURI();
$saisies = array(
array(
@ -49,7 +50,29 @@
)
);
}
}
print_r('hello');
$req = _request('ieconfig_import_specifique_couleurs_local');
print_r($req.'</br>');
}
elseif (strpos($url, '?exec=sc_import')) {
foreach ($flux['args']['config']['soyezcreateurs'] as $section=>$exist){
$s1[] = array(
'saisie' => 'radio',
'options' => array(
'nom' => 'soyezcreateurs_import_choix_'.$section,
'label' => '<:soyezcreateursprive:ieconfig_soyezcreateurs_import_explication_'.$section.':>',
'datas' => array(
'rien' => '<:soyezcreateursprive:soyezcreateurs_import_soyezcreateurs_rien:>',
'fusion' => '<:soyezcreateursprive:soyezcreateurs_import_soyezcreateurs_fusionner:>',
'ecrase' => '<:soyezcreateursprive:soyezcreateurs_import_ecraser:>',
'fusion_inv' => '<:soyezcreateursprive:soyezcreateurs_import_soyezcreateurs_fusionner_inv:>',
),
'defaut' => 'fusion',
)
);
}
}
elseif (strpos($url, '&cfg=soyezcreateurs_layout') and isset($flux['args']['config']['soyezcreateurs'])) {
$s1[] = array(
'saisie' => 'radio',

Loading…
Cancel
Save