Changeset 109596 in spip-zone


Ignore:
Timestamp:
Mar 18, 2018, 5:24:13 PM (19 months ago)
Author:
rastapopoulos@…
Message:

Enfin la config des enfants en cascade qui est gérée, et donc quand on duplique avec les enfants, ça prend en compte ce qu'on a décidé pour chaque objet. Ça marche MAIS, en fait, je m'aperçois qu'à l'utilisation ce n'est pas super, et qu'il faudrait arrêter d'utiliser des boutons uniques. Le mieux serait plutôt d'avoir un unique formulaire, pas dans la boite info mais plus bas dans son bloc dédié, et dedans on y cocherait des options directement pour CETTE duplication qu'on s'apprête à lancer. Et du coup ça enlèverait des configs que j'ai rajouté, puisqu'on déciderait de certaines choses lors du lancement. Mais en attendant ça marche !

Location:
_plugins_/duplicator/trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/duplicator/trunk/action/dupliquer_objet.php

    r109558 r109596  
    3333                include_spip('inc/config');
    3434                include_spip('base/objets');
    35                 $table_objet = table_objet($objet);
     35                $config = lire_config('duplicator', array());
     36                $objet = objet_type($objet); // assurance
    3637                $modifications = array();
    3738                $options = array();
    3839               
    3940                // S'il y a des champs précis à dupliquer pour cet objet, on rajoute aux options
    40                 if ($champs = lire_config("duplicator/$table_objet/champs", array())) {
     41                if (isset($config[$objet]['champs']) and $champs = $config[$objet]['champs']) {
    4142                        $options['champs'] = $champs;
    4243                }
    4344               
    44                 // S'il y a un statut forcé
    45                 if ($statut = lire_config("duplicator/$table_objet/statut", null)) {
     45                // S'il y a un statut forcé pour cet objet
     46                if (isset($config[$objet]['statut']) and $statut = $config[$objet]['statut']) {
    4647                        $modifications['statut'] = $statut;
    4748                }
     
    5051                if ($enfants) {
    5152                        $options['dupliquer_enfants'] = true;
     53                       
     54                        // On cherche si seulement certains enfants sont acceptés à dupliquer pour cet objet
     55                        if (isset($config[$objet]['enfants']) and $enfants = $config[$objet]['enfants']) {
     56                                $options['enfants'] = array_map('objet_type', $config[$objet]['enfants']);
     57                        }
     58                       
     59                        // Dans ce cas on passe aussi le tableau de toutes les options, avec "champs" et "enfants" qui seront pris en compte
     60                        $options['options_objets'] = $config;
    5261                }
    5362               
     
    8695 *              - ajout_titre : ajouter une chaine à la fin du titre
    8796 *              - dupliquer_liens : booléen précisant si on duplique les liens ou pas, par défaut oui
    88  *              - dupliquer_enfants : booléen précisant si on duplique les enfants ou pas, par défaut non
    8997 *              - liens : liste d'objets liables dont on veut dupliquer les liens
    9098 *              - liens_exclus : liste d'objets liables dont on ne veut pas dupliquer les liens
     99 *              - dupliquer_enfants : booléen précisant si on duplique les enfants ou pas, par défaut non
     100 *              - enfants : liste d'objets d'enfants acceptés pour la duplication en cascade
     101 *              - options_objets : tableau indexé par objet, avec pour chacun un tableau des options précédentes
     102 *                Cela permet de passer en cascade aux enfants certaines options qui ne sont pas forcément les mêmes que dans l'appel de départ
     103 *                'article' => array('champs'=>array(…), 'enfants'=>array(…))
    91104 * @return int
    92105 *              Retourne l'identifiant du duplicata
     
    169182                        and $enfants_methodes = type_objet_info_enfants($objet)
    170183                        and $enfants = objet_trouver_enfants($objet, $id_objet)
     184                        // S'il n'y a pas de config d'enfants alors tous, sinon seulement les enfants autorisés
     185                        and (
     186                                !isset($options['enfants'])
     187                                or $options['enfants'] == 'tous'
     188                                or (
     189                                        $enfants_autorises = ($options['enfants'] ? $options['enfants'] : array())
     190                                        and $enfants_autorises = array_flip(array_map('objet_type', $enfants_autorises))
     191                                        and $enfants = array_intersect_key($enfants, $enfants_autorises)
     192                                )
     193                        )
    171194                ) {
    172                         // On parcourt tous les types d'enfants
     195                        // On parcourt tous les types d'enfants autorisés
    173196                        foreach ($enfants as $objet_enfant => $ids) {
    174197                                if (is_array($ids)) {
     
    180203                                                unset($options_enfant['champs']);
    181204                                                unset($options_enfant['ajout_titre']);
     205                                               
     206                                                // S'il existe des options d'objets, on utilise
     207                                                if (isset($options['options_objets'][$objet_enfant])) {
     208                                                        $options_enfant = array_merge($options_enfant, $options['options_objets'][$objet_enfant]);
     209                                                }
    182210                                               
    183211                                                // Les modifications nécessaires pour mettre le bon parent suivant la méthode
  • _plugins_/duplicator/trunk/duplicator_administrations.php

    r109446 r109596  
    6363                $champs = explode(',', $champs);
    6464                $champs = array_map('trim', $champs);
    65                 $nouvelle_config['rubriques']['champs'] = $champs;
     65                $nouvelle_config['rubrique']['champs'] = $champs;
    6666        }
    6767        if (isset($config['art_champs']) and $champs = $config['art_champs']) {
    6868                $champs = explode(',', $champs);
    6969                $champs = array_map('trim', $champs);
    70                 $nouvelle_config['articles']['champs'] = $champs;
     70                $nouvelle_config['article']['champs'] = $champs;
    7171        }
    7272       
     
    7575        // Config du statut
    7676        if (isset($config['duplic_article_etat_pub']) and $config['duplic_article_etat_pub'] == 'oui') {
    77                 $nouvelle_config['articles']['statut'] = '';
     77                $nouvelle_config['article']['statut'] = '';
    7878        }
    7979        else {
    80                 $nouvelle_config['articles']['statut'] = 'prepa';
     80                $nouvelle_config['article']['statut'] = 'prepa';
    8181        }
    8282       
  • _plugins_/duplicator/trunk/duplicator_pipelines.php

    r109571 r109596  
    4747        }
    4848       
    49         //~ if(autoriser("dupliquer", "rubrique")){
    50                         //~ if (($id = intval($flux['args']['id'])) && ($type=='rubrique')){
    51                                 //~ $contexte = array('id_objet'=>$id,'objet'=>$type);
    52                                 //~ $flux["data"] .= recuperer_fond("noisettes/bouton_duplicator", $contexte);
    53                         //~ }
    54         //~ }
    55        
    56         //~ if(autoriser("dupliquer", "article")){
    57                         //~ if (($id = intval($flux['args']['id'])) && ($type=='article')){
    58                                 //~ $contexte = array('id_objet'=>$id,'objet'=>$type);
    59                                 //~ $flux["data"] .= recuperer_fond("noisettes/bouton_duplicator", $contexte);
    60                         //~ }
    61         //~ }
    62 
    6349        return $flux;
    6450}
    65 
    66 function duplicator_jqueryui_plugins($plugins){
    67         if (test_espace_prive()){
    68                 $plugins[] = "jquery.ui.dialog";
    69         }
    70        
    71         return $plugins;
    72 }
  • _plugins_/duplicator/trunk/formulaires/configurer_duplicator.php

    r109575 r109596  
    4040                // On boucle sur tous les objets possibles
    4141                foreach ($declaration_objets as $table_objet_sql=>$declaration_objet) {
    42                         $table_objet = table_objet($table_objet_sql);
    43                         $objet = objet_type($table_objet);
     42                        $objet = objet_type($table_objet_sql);
    4443                       
    4544                        $groupe_objet = array(
    4645                                'saisie' => 'fieldset',
    4746                                'options' => array(
    48                                         'nom' => "groupe_$table_objet",
     47                                        'nom' => "groupe_$objet",
    4948                                        'label' => _T($declaration_objet['texte_objets']),
    5049                                        'pliable' => 'oui',
     
    6766                                        'saisie' => 'case',
    6867                                        'options' => array(
    69                                                 'nom' => "${table_objet}[personnaliser_champs]",
     68                                                'nom' => "${objet}[personnaliser_champs]",
    7069                                                'label_case' => _T('duplicator:configurer_personnaliser_champs_label'),
    71                                                 'valeur_forcee' => (isset($config[$table_objet]['champs']) and $config[$table_objet]['champs']) ? 'on' : '',
     70                                                'valeur_forcee' => (isset($config[$objet]['champs']) and $config[$objet]['champs']) ? 'on' : '',
    7271                                        ),
    7372                                );
     
    7574                                        'saisie' => 'checkbox',
    7675                                        'options' => array(
    77                                                 'nom' => "${table_objet}[champs]",
     76                                                'nom' => "${objet}[champs]",
    7877                                                'label' => _T('duplicator:configurer_champs_label'),
    7978                                                'data' => $champs,
    80                                                 'defaut' => isset($config[$table_objet]['champs']) ? $config[$table_objet]['champs'] : array(),
    81                                                 'afficher_si' => "@${table_objet}[personnaliser_champs]@ == 'on'",
     79                                                'defaut' => isset($config[$objet]['champs']) ? $config[$objet]['champs'] : array(),
     80                                                'afficher_si' => "@${objet}[personnaliser_champs]@ == 'on'",
    8281                                        ),
    8382                                );
     
    9291                                        'saisie' => 'selection',
    9392                                        'options' => array(
    94                                                 'nom' => "${table_objet}[statut]",
     93                                                'nom' => "${objet}[statut]",
    9594                                                'label' => _T('duplicator:configurer_statut_label'),
    9695                                                'option_intro' => _T('duplicator:configurer_statut_option_intro'),
    9796                                                'data' => $statuts,
    98                                                 'defaut' => isset($config[$table_objet]['statut']) ? $config[$table_objet]['statut'] : '',
     97                                                'defaut' => isset($config[$objet]['statut']) ? $config[$objet]['statut'] : '',
    9998                                        ),
    10099                                );
     
    105104                                'saisie' => 'selection',
    106105                                'options' => array(
    107                                         'nom' => "${table_objet}[autorisation]",
     106                                        'nom' => "${objet}[autorisation]",
    108107                                        'label' => _T('duplicator:configurer_autorisation_label'),
    109108                                        'option_intro' => _T('duplicator:configurer_autorisation_option_intro'),
     
    113112                                                'redacteur' => _T('duplicator:configurer_autorisation_choix_redacteur'),
    114113                                        ),
    115                                         'defaut' => isset($config[$table_objet]['autorisation']) ? $config[$table_objet]['autorisation'] : '',
     114                                        'defaut' => isset($config[$objet]['autorisation']) ? $config[$objet]['autorisation'] : '',
    116115                                ),
    117116                        );
     
    125124                                        'saisie' => 'case',
    126125                                        'options' => array(
    127                                                 'nom' => "${table_objet}[personnaliser_enfants]",
     126                                                'nom' => "${objet}[personnaliser_enfants]",
    128127                                                'label_case' => _T('duplicator:configurer_personnaliser_enfants_label'),
    129                                                 'valeur_forcee' => (isset($config[$table_objet]['objets_enfants']) and $config[$table_objet]['objets_enfants']) ? 'on' : '',
     128                                                'defaut' => isset($config[$objet]['personnaliser_enfants']) ? $config[$objet]['personnaliser_enfants'] : '',
    130129                                        ),
    131130                                );
     
    133132                                        'saisie' => 'choisir_objets',
    134133                                        'options' => array(
    135                                                 'nom' => "${table_objet}[objets_enfants]",
     134                                                'nom' => "${objet}[enfants]",
    136135                                                'exclus' => $enfants_exclus,
    137                                                 'label' => _T('duplicator:configurer_objets_enfants_label'),
    138                                                 'defaut' => isset($config[$table_objet]['objets_enfants']) ? $config[$table_objet]['objets_enfants'] : array(),
    139                                                 'afficher_si' => "@${table_objet}[personnaliser_enfants]@ == 'on'",
     136                                                'label' => _T('duplicator:configurer_enfants_label'),
     137                                                'defaut' => isset($config[$objet]['enfants']) ? $config[$objet]['enfants'] : array(),
     138                                                'afficher_si' => "@${objet}[personnaliser_enfants]@ == 'on'",
    140139                                        ),
    141140                                );
     
    154153        $declaration_objets = lister_tables_objets_sql();
    155154        foreach ($declaration_objets as $table_objet_sql=>$declaration_objet) {
    156                 $table_objet = table_objet($table_objet_sql);
    157                 $config_objet = _request($table_objet);
     155                $objet = objet_type($table_objet_sql);
     156                $config_objet = _request($objet);
    158157               
    159158                // Si on a décoché la personnalisation des champs, on vide la config des champs
     
    164163                // Si on a décoché la personnalisation des enfants, on vide la config des enfants
    165164                if (!$config_objet['personnaliser_enfants']) {
    166                         unset($config_objet['objets_enfants']);
     165                        $config_objet['enfants'] = 'tous';
     166                }
     167                else {
     168                        // Le hidden pourri dans la saisie inc-choisir-enfants qu'il faut virer
     169                        $config_objet['enfants'] = array_filter($config_objet['enfants']);
    167170                }
    168171               
    169172                // On remet dans la course
    170                 set_request($table_objet, $config_objet);
     173                set_request($objet, $config_objet);
    171174        }
    172175       
  • _plugins_/duplicator/trunk/lang/duplicator_fr.php

    r109575 r109596  
    2424        'configurer_autorisation_option_intro' => 'Autorisation par défaut',
    2525        'configurer_champs_label' => 'Champs à dupliquer',
     26        'configurer_enfants_label' => 'Quels contenus enfants seront dupliqués ?',
    2627        'configurer_explication_objets_texte' => 'Même si seulement les contenus ci-dessus seront proposés dans l’interface, tous les types de contenus peuvent potentiellement être dupliqués s’ils sont enfants d’autres contenus. On permet donc de configurer en permanence l’ensemble des types de contenus, et non seulement ceux choisis pour les boutons.',
    27         'configurer_objets_enfants_label' => 'Quels contenus enfants seront dupliqués ?',
    2828        'configurer_objets_explication' => 'Le plugin va ajouter des boutons sur la page d’admin de ces contenus pour permettre de les dupliquer et parfois de dupliquer aussi leurs enfants s’il y en a.',
    2929        'configurer_objets_label' => 'Contenus à dupliquer dans l’interface',
  • _plugins_/duplicator/trunk/paquet.xml

    r109510 r109596  
    2222        <pipeline nom="autoriser" inclure="duplicator_autoriser.php" />
    2323        <pipeline nom="boite_infos" inclure="duplicator_pipelines.php" />
    24         <pipeline nom="jqueryui_plugins" inclure="duplicator_pipelines.php" />
    2524       
    2625        <!-- <menu nom="configurer_duplicator" titre="duplicator:configuration_duplicator" parent="menu_configuration" icone="theme/img/duplicator.png" /> -->
Note: See TracChangeset for help on using the changeset viewer.