Skip to content

Instantly share code, notes, and snippets.

@mistergraphx
Last active August 29, 2015 14:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mistergraphx/bee2465b5a890103e83a to your computer and use it in GitHub Desktop.
Save mistergraphx/bee2465b5a890103e83a to your computer and use it in GitHub Desktop.
SPIP - Ajout de l'export des formulaires Formidable a l'importeur/exporteur de config

Ajout de l'export des formulaires Formidable a l'IE config

Sources : http://contrib.spip.net/Importeur-Exporteur-de-configurations

Permet depuis l'importeur/exporteur de configuration de pouvoir exporter la structure des formulaires comme il est déjà possible de le faire pour les Menus.

Ceci fait partie de ma toolbox personnelle, vous avez juste a adapter les sources a votre plugin Squelette, ou plugin Toolbox en faisant un replace du prefixe gx_toolbox

<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Pipeline ieconfig pour l'import/export de configuration
*
* @param array $flux
* @return array
*/
function gx_toolbox_ieconfig($flux){
include_spip('inc/texte');
$action = $flux['args']['action'];
// Tester si le plugin Formidable est bien activé
// (_DIR_PLUGIN_FORMIDABLE != '_DIR_PLUGIN_FORMIDABLE')
// Formulaire d'export
if ($action=='form_export') {
$saisies = array(
array(
'saisie' => 'fieldset',
'options' => array(
'nom' => 'formidable_export',
'label' => '<:gx_toolbox:formidable_export_titre:>',
'icone' => 'formulaire-16.png'
),
'saisies' => array(
array(
'saisie' => 'formulaire_formidable_multiple',
'options' => array(
'nom' => 'formidable_a_exporter',
'label' => '<:gx_toolbox:formidable_choix_export:>',
'cacher_option_intro' => 'oui'
)
)
)
)
);
$flux['data'] = array_merge($flux['data'],$saisies);
}
// Tableau d'export
if ($action=='export' && is_array(_request('formidable_a_exporter')) && count(_request('formidable_a_exporter'))>0) {
$flux['data']['formidable'] = array();
include_spip('base/abstract_sql');
//include_spip('echanger/formulaire/yaml');
foreach (_request('formidable_a_exporter') as $identifiant) {
$formulaire = sql_fetsel(array('id_formulaire','identifiant','titre'),'spip_formulaires','identifiant = '.sql_quote($identifiant));
$id_formulaire = $formulaire['id_formulaire'];
unset($formulaire['id_formulaire']);
$formulaire['entrees'] = exporter_formulaire($id_formulaire);
$flux['data']['formidable'][$identifiant] = $formulaire;
}
}
// Formulaire d'import
if ($action=='form_import' && isset($flux['args']['config']['formidable']) && is_array($flux['args']['config']['formidable']) && count($flux['args']['config']['formidable'])>0) {
$saisies = array(
array(
'saisie' => 'fieldset',
'options' => array(
'nom' => 'formidable_import',
'label' => '<:formidable:editer_formidable_titre:>',
'icone' => 'menu-16.png'
),
'saisies' => array(
array(
'saisie' => 'explication',
'options' => array(
'nom' => 'formidable_import_explication',
'texte' => '<:formidable:formulaire_ieconfig_choisir_formidable_a_importer:>'
)
)
)
)
);
foreach ($flux['args']['config']['formidable'] as $identifiant => $formulaire) {
if (sql_countsel('spip_formulaires','identifiant = '.sql_quote($identifiant))>0) {
$saisies[0]['saisies'][] = array(
'saisie' => 'selection',
'options' => array(
'nom' => 'formidable_importer_'.$identifiant,
'label' => $identifiant.(isset($formulaire['titre']) ? ' ('.typo($formulaire['titre']).')' : ''),
'cacher_option_intro' => 'oui',
'attention' => '<:formidable:formulaire_ieconfig_menu_meme_identifiant:>',
'datas' => array(
'non' => '<:formidable:formulaire_ieconfig_ne_pas_importer:>',
'renommer' => '<:formidable:formulaire_ieconfig_renommer:>',
'remplacer' => '<:formidable:formulaire_ieconfig_remplacer:>'
)
)
);
} else {
$saisies[0]['saisies'][] = array(
'saisie' => 'selection',
'options' => array(
'nom' => 'formidable_importer_'.$identifiant,
'label' => $identifiant.(isset($formulaire['titre']) ? ' ('.typo($formulaire['titre']).')' : ''),
'cacher_option_intro' => 'oui',
'datas' => array(
'non' => '<:formidable:formulaire_ieconfig_ne_pas_importer:>',
'importer' => '<:formidable:formulaire_ieconfig_importer:>'
)
)
);
}
}
$flux['data'] = array_merge($flux['data'],$saisies);
}
// Import de la configuration
if ($action=='import' && isset($flux['args']['config']['formidable']) && is_array($flux['args']['config']['formidable']) && count($flux['args']['config']['formidable'])>0) {
foreach ($flux['args']['config']['formidable'] as $identifiant => $formulaire) {
$choix = _request('formidable_importer_'.$identifiant);
include_spip('base/abstract_sql');
//include_spip('inc/formidable');
// include_spip('action/editer_menu');
if ($choix == 'remplacer') {
$id_formulaire = intval(sql_getfetsel('id_formulaire','spip_formulaires','identifiant = '.sql_quote($identifiant)));
formulaire_supprimer($id_formulaire);
}
if ($choix == 'renommer')
$identifiant = $identifiant.'_'.time();
if (in_array($choix,array('importer','remplacer','renommer'))) {
$titre = isset($menu['titre']) ? $menu['titre'] : '';
$id_menu = sql_insertq('spip_formulaires',array(
'identifiant' => $identifiant,
'titre' => $titre
));
if (isset($formulaire['entrees']))
formulaire_importer($formulaire['entrees']);
}
}
}
return($flux);
}
/**
* exporter_formulaire
*
* tiré de la function echanger/formulaire/yaml
*/
function exporter_formulaire($id_formulaire){
include_spip('base/abstract_sql');
include_spip('inc/yaml');
$id_formulaire = intval($id_formulaire);
if ($id_formulaire > 0){
// On récupère le formulaire
$formulaire = sql_fetsel(
'*',
'spip_formulaires',
'id_formulaire = '.$id_formulaire
);
// On décompresse les trucs sérialisés
$formulaire['saisies'] = unserialize($formulaire['saisies']);
$formulaire['traitements'] = unserialize($formulaire['traitements']);
return $formulaire;
}
}
function formulaire_importer($formulaire){
// Si le decodage marche on importe alors le contenu
if (is_array($formulaire)){
// include_spip('action/editer_formulaire');
// On enlève les champs inutiles
unset($formulaire['id_formulaire']);
// On vérifie que l'identifiant n'existe pas déjà
$deja = sql_getfetsel(
'id_formulaire',
'spip_formulaires',
'identifiant = '.sql_quote($formulaire['identifiant'])
);
if ($deja){
$formulaire['identifiant'] .= '_'.date('Ymd_His');
}
// On insère un nouveau formulaire
$id_formulaire = ieconfig_formulaire_insserer();
// Si ça a marché on transforme les tableaux et on modifie les champs
if ($id_formulaire > 0){
if (is_array($formulaire['saisies'])){
$formulaire['saisies'] = serialize($formulaire['saisies']);
}
if (is_array($formulaire['traitements'])){
$formulaire['traitements'] = serialize($formulaire['traitements']);
}
$erreur = ieconfig_formulaire_modifier($id_formulaire, $formulaire);
}
}
}
/**
* Crée un nouveau formulaire et retourne son ID
*
* @return int id_formulaire
*/
function ieconfig_formulaire_insserer() {
$champs = array(
'statut' => 'prop',
'date_creation' => date('Y-m-d H:i:s'),
);
$id_formulaire = sql_insertq("spip_formulaires", $champs);
return $id_formulaire;
}
function formulaire_supprimer($id_formulaire){
sql_delete("spip_formulaires", "idformulaire=$id_$id_formulaire");
}
/**
* Appelle la fonction de modification d'un formulaire
*
* @param int $id_formulaire
* @param array|null $set
* @return string
*/
function ieconfig_formulaire_modifier($id_formulaire, $set=null) {
include_spip('inc/modifier');
include_spip('inc/filtres');
$err = '';
$c = collecter_requests(
// white list
objet_info('formulaire','champs_editables'),
// black list
array('statut'),
// donnees eventuellement fournies
$set
);
$invalideur = "id='id_formulaire/$id_formulaire'";
if ($err = objet_modifier_champs('formulaire', $id_formulaire,
array(
'nonvide' => array('titre' => _T('info_sans_titre')),
'invalideur' => $invalideur,
),
$c))
return $err;
// Modification de statut, changement de rubrique ?
$c = collecter_requests(array('statut'),array(),$set);
include_spip("action/editer_objet");
$err = objet_instituer('formulaire',$id_formulaire, $c);
return $err;
}
?>
<paquet
prefix="gx_toolbox"
categorie="outil"
version="1.0.16"
etat="dev"
compatibilite="[3.0.3;3.0.*]"
logo="prive/themes/spip/images/gx_toolbox-64.png"
documentation=""
>
<nom>Gx ToolBoX</nom>
<auteur lien='www.mister-graphx.com'>Arnaud B. (Mist. GraphX)</auteur>
<licence>GNU/GPL</licence>
<pipeline nom="ieconfig_metas" inclure="gx_toolbox_pipelines.php" />
<!-- Formulaires Formidables Export/Import -->
<pipeline nom="ieconfig" inclure="formidable_ieconfig.php" />
<necessite nom="ieconfig"/>
<!--<necessite nom="menus"/>-->
<utilise nom="formidable"/>
</paquet>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment