Changeset 102559 in spip-zone


Ignore:
Timestamp:
Jan 29, 2017, 3:12:36 PM (2 years ago)
Author:
kent1@…
Message:

si l'import vient de deux bases de données de langue différentes, on propose d'importé le contenu des documents identiques dans des multis

Version 1.3.0

Location:
_plugins_/fusion_spip/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/fusion_spip/trunk/formulaires/fusion_spip.html

    r100397 r102559  
    3434                                <input type="text" name="img_dir" class="text" id="img_dir" value="#ENV{img_dir}" />
    3535                        </li>
     36                        #SET{warning_traduction_document,#ENV**{erreurs}|table_valeur{warning_traduction_document}}
     37                        [<li class="editer editer_confirme_warning [ (#GET{warning_traduction_document}|oui)erreur]">
     38                                <span class='erreur_message'>(#GET{warning_traduction_document})</span>
     39                                <div class="choix">
     40                                        <input type="checkbox" name="traduire_documents_doublons" id="traduire_documents_doublons" />
     41                                        <label for="traduire_documents_doublons"><:fusion_spip:confirme_traduire_documents_doublons:></label>
     42                                </div>
     43                        </li>]
    3644                        #SET{erreurs,#ENV**{erreurs}|table_valeur{secteur}}
    3745                        <li class="editer editer_secteur [ (#GET{erreurs}|oui)erreur]">
  • _plugins_/fusion_spip/trunk/formulaires/fusion_spip.php

    r101499 r102559  
    5151                $traite_stats = (_request('stats') != 'on' ? true : false);
    5252                $traite_referers = (_request('referers') != 'on' ? true : false);
     53                $bases = bases_referencees(_FILE_CONNECT_TMP);
     54                $connect = $bases[$base-1];
    5355                /**
    5456                 * S'assurer de pouvoir créer des sous répertoires et des fichiers dans IMG/
     
    6466                                $erreurs['img_dir'] = _T('fusion_spip:erreur_img_accessible');
    6567                        }
     68
     69                        if (!isset($erreurs['img_dir']) && !_request('traduire_documents_doublons') && sql_showtable('spip_meta', false, $connect)) {
     70                                include_spip('inc/config');
     71                                $langue_base = sql_getfetsel('valeur', 'spip_meta', 'nom="langue_site"', '', '', '', '', $connect);
     72                                $langue_site = lire_config('langue_site');
     73                                if ($langue_base != $langue_site) {
     74                                        $erreurs['warning_traduction_document'] = _T('fusion_spip:erreur_traduction_document');
     75                                }
     76                        }
    6677                        supprimer_fichier(_DIR_IMG.'test_fusion.txt');
    6778                        supprimer_repertoire(_DIR_IMG.'test_fusion');
    6879                }
    69                 $bases = bases_referencees(_FILE_CONNECT_TMP);
    70                 $connect = $bases[$base-1];
    7180
    7281                $lister_tables_principales = charger_fonction('lister_tables_principales', 'fusion_spip');
     
    91100                }
    92101                // vérifier la conformité du shéma de la base source
    93                 if (empty($erreurs) && _request('confirme_warning') != 'on') {
     102                if ((empty($erreurs) or (count($erreurs) == 1 && isset($erreurs['warning_traduction_document']))) && _request('confirme_warning') != 'on') {
    94103                        $comparer_shemas = charger_fonction('comparer_shemas', 'fusion_spip');
    95104                        $erreurs_shema = $comparer_shemas($connect, $principales, $auxiliaires);
     
    203212                if ($img_dir) {
    204213                        $import_documents = charger_fonction('import_documents', 'fusion_spip');
    205                         $import_documents($img_dir, $connect);
     214                        $options = array();
     215                        if (_request('traduire_documents_doublons') == 'on') {
     216                                $options['traduire_documents_doublons'] = 'on';
     217                                $options['langue_base'] = sql_getfetsel('valeur', 'spip_meta', 'nom="langue_site"', '', '', '', '', $connect);
     218                                include_spip('inc/config');
     219                                $options['langue_origine'] = lire_config('langue_site');
     220                        }
     221                        $import_documents($img_dir, $connect, $options);
    206222                }
    207223
  • _plugins_/fusion_spip/trunk/inc/fusion_spip.php

    r101735 r102559  
    482482 * @param string $connect base source
    483483 */
    484 function fusion_spip_import_documents_dist($img_dir, $connect) {
     484function fusion_spip_import_documents_dist($img_dir, $connect, $options = array()) {
    485485        fusion_spip_log('Traitement du répertoire IMG : '.$img_dir, 'fusion_spip_documents_'.$connect);
    486486        include_spip('inc/documents');
     
    530530                                        if (intval($id_document_source) > 0) {
    531531                                                sql_updateq('spip_documents_liens', array('id_document' => $id_document_source), 'id_document='.intval($obj_import['id_final']));
     532                                                $datas_document = sql_fetsel('titre, descriptif, credits', 'spip_documents', 'id_document='.intval($obj_import['id_final']));
    532533                                                sql_updateq('spip_fusion_spip', array('id_final' => $id_document_source), 'id_final='.intval($obj_import['id_final']).' AND objet="document" and site_origine='.sql_quote($connect));
     534                                                if ($options['traduire_documents_doublons'] == 'on' && isset($options['langue_base'])) {
     535                                                        if ($datas_document) {
     536                                                                $nouveau_contenu = array();
     537                                                                $datas_original = sql_fetsel('titre, descriptif, credits', 'spip_documents', 'id_document='.intval($id_document_source));
     538                                                                foreach ($datas_document as $cle => $data) {
     539                                                                        $multi_final = false;
     540                                                                        if ((strlen($datas_original[$cle]) > 0) && (strlen($data) > 0) && preg_match_all(_EXTRAIRE_MULTI, $datas_original[$cle], $regs, PREG_SET_ORDER)) {
     541                                                                                $trads = extraire_trads($regs[0][1]);
     542                                                                                if (!isset($trads[$options['langue_base']])) {
     543                                                                                        $multi_debut = '<multi>';
     544                                                                                        $multi_fin = '</multi>';
     545                                                                                        $multi_complet = '';
     546                                                                                        foreach ($trads as $cle => $multi) {
     547                                                                                                $multi_complet .= '['.$cle.']'.$multi;
     548                                                                                        }
     549                                                                                        $multi_complet .= '['.$options['langue_base'].']'.$data;
     550                                                                                        $multi_final = $multi_debut.$multi_complet.$multi_fin;
     551                                                                                }
     552                                                                        } elseif (strlen($data) > 0){
     553                                                                                /**
     554                                                                                 * Cas 2, construire le multi
     555                                                                                 */
     556                                                                                $multi_final = '<multi>['.$options['langue_origine'].']'.$datas_original[$cle].'['.$options['langue_base'].']'.$data.'</multi>';
     557                                                                        }
     558                                                                        if (isset($multi_final) && $multi_final && $multi_final != $data) {
     559                                                                                $nouveau_contenu[$cle] = $multi_final;
     560                                                                        }
     561                                                                }
     562                                                                if (count($nouveau_contenu) > 0) {
     563                                                                        sql_updateq('spip_documents', $nouveau_contenu, 'id_document = '.intval($id_document_source));
     564                                                                }
     565                                                        }
     566                                                }
    533567                                                sql_delete('spip_documents', 'id_document='.intval($obj_import['id_final']));
    534568                                                $copy = false;
  • _plugins_/fusion_spip/trunk/lang/fusion_spip_fr.php

    r97338 r102559  
    1616
    1717        // C
     18        'confirme_traduire_documents_doublons' => 'Traduire les documents en doublons en utilisant les champs multis',
    1819        'confirme_warning' => 'Confirmer la fusion des bases ?',
    1920
     
    2425        // E
    2526        'erreur_img_accessible' => 'Votre répertoire IMG n’est pas accessible. Il est impossible soit d’y écrire un fichier à la racine, soit d’y créer un sous-répertoire.',
     27        'erreur_traduction_document' => 'Vos bases sont dans des langues différentes, en cochant la case suivante, vous pouvez traduire le contenu des documents en doublon en utilisant les champs multis.',
    2628        'erreur_versions' => 'Le site hôte et le site source ne sont pas dans la même version de base de données :
    2729                <br/>- hôte est en version @vhote@
  • _plugins_/fusion_spip/trunk/paquet.xml

    r101735 r102559  
    22        prefix="fusion_spip"
    33        categorie="maintenance"
    4         version="1.2.2"
     4        version="1.3.0"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.1.*]"
     
    2323
    2424        <menu nom="fusion_spip" titre="fusion_spip:titre_fusion_spip" parent="menu_administration" icone="images/fusion_spip-16.png" />
    25 
    2625</paquet>
Note: See TracChangeset for help on using the changeset viewer.