Changeset 81931 in spip-zone for _plugins_/COG


Ignore:
Timestamp:
Apr 17, 2014, 8:53:17 AM (7 years ago)
Author:
guillaume.wauquier@…
Message:

Chargement des EPCIs directement à partir du site de l'INSEE, Possibilité d'ajouter et de modifier des objets COG , ajout des traductions...

Location:
_plugins_/COG/trunk
Files:
45 added
1 deleted
9 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/COG/trunk/base/cog.php

    r68102 r81931  
    1212$tables['spip_cog_communes'] = array(
    1313
    14                 'principale' => "oui",
     14                'type' => 'cog_commune',
     15                'principale' => "oui",
     16                'table_objet_surnoms' => array('cogcommune'), // table_objet('cog_commune') => 'cog_communes'
    1517                'field'=> array(
    1618                        "id_cog_commune"        => "INT(10) UNSIGNED NOT NULL COMMENT 'Identifiant de la commune'",
    1719                        "decoupage_cantons"     => "TINYINT(1) NOT NULL COMMENT 'Découpage de la commune en cantons'",
    18                         "chef_lieu"=> "TINYINT(1) NOT NULL DEFAULT '0'  COMMENT 'Chef-lieu de canton, d\'arrondissement, de département, de région'",
    19                         "region"=> "TINYINT(2) UNSIGNED NOT NULL        COMMENT 'Code région'",
    20                         "departement"=> "VARCHAR( 3 ) NOT NULL COMMENT 'Code département'",
    21                         "code"=> "SMALLINT( 3 ) UNSIGNED ZEROFILL NOT NULL      COMMENT 'Code commune'",
    22                         "arrondissement"=> "TINYINT( 1 ) UNSIGNED NOT NULL      COMMENT 'Code arrondissement'",
    23                         "canton"=> "TINYINT( 2 ) UNSIGNED NOT NULL      COMMENT 'Code canton'",
    24                         "type_charniere"=> "TINYINT( 1 ) UNSIGNED NOT NULL              COMMENT 'Type de nom en clair'",
    25                         "article_majuscule"=> "VARCHAR( 5 ) NOT NULL    COMMENT 'Article (majuscules)'",
    26                         "nom_majuscule"=> "text NOT NULL        COMMENT 'Nom en clair (majuscules)'",
    27                         "article"=> "VARCHAR( 5 ) NOT NULL      COMMENT 'Article (typographie riche)'",
    28                         "nom"=> "text NOT NULL COMMENT 'Nom en clair (typographie riche)'"
     20                        "chef_lieu"                     => "TINYINT(1) NOT NULL DEFAULT '0'     COMMENT 'Chef-lieu de canton, d\'arrondissement, de département, de région'",
     21                        "region"                        => "TINYINT(2) UNSIGNED NOT NULL        COMMENT 'Code région'",
     22                        "departement"           => "VARCHAR( 3 ) NOT NULL COMMENT 'Code département'",
     23                        "code"                          => "SMALLINT( 3 ) UNSIGNED ZEROFILL NOT NULL    COMMENT 'Code commune'",
     24                        "arrondissement"        => "TINYINT( 1 ) UNSIGNED NOT NULL      COMMENT 'Code arrondissement'",
     25                        "canton"                        => "TINYINT( 2 ) UNSIGNED NOT NULL      COMMENT 'Code canton'",
     26                        "type_charniere"        => "TINYINT( 1 ) UNSIGNED NOT NULL              COMMENT 'Type de nom en clair'",
     27                        "article_majuscule"     => "VARCHAR( 5 ) NOT NULL       COMMENT 'Article (majuscules)'",
     28                        "nom_majuscule"         => "text NOT NULL       COMMENT 'Nom en clair (majuscules)'",
     29                        "article"                       => "VARCHAR( 5 ) NOT NULL       COMMENT 'Article (typographie riche)'",
     30                        "nom"=> "text NOT NULL COMMENT 'Nom en clair (typographie riche)'",
     31                        "maj"                => "TIMESTAMP"             
    2932                ),
    3033                'key' => array(
     
    3437                        "KEY insee"     => "departement,code"
    3538                ),
    36                 'champs_editables' => $tab_champs,
    37                 'champs_versionnes' => $tab_champs,
    38                 'rechercher_champs' => array(
    39                         'nom' => 8, 'code' => 5, 'departement' => 1
    40                 ),
    41                 'tables_jointures' => array(
    42                         'cog_communes_liens'
    43                 ),
    44                 'titre' => "nom AS titre, '' as lang"
    45         );
     39                'titre' => "nom AS titre, '' AS lang",
     40                #'date' => "",
     41                'champs_editables' => $tab_champs,
     42                'champs_versionnes' => $tab_champs,
     43                'rechercher_champs' => array('nom' => 8, 'code' => 5, 'departement' => 1        ),
     44                'tables_jointures' => array('spip_cog_communes_liens')
     45
     46        );
     47
    4648
    4749
     
    5355
    5456$tables['spip_cog_cantons'] = array(
    55 
    56                 'principale' => "oui",
     57                'type' => 'cog_canton',
     58                'principale' => "oui",
     59                'table_objet_surnoms' => array('cogcanton'), // table_objet('cog_canton') => 'cog_cantons'
    5760                'field'=> array(
    5861                        "id_cog_canton" => "INT(10) UNSIGNED NOT NULL COMMENT 'Identifiant du canton'",
     
    6770                        "nom_majuscule"=> "text NOT NULL        COMMENT 'Nom en clair (majuscules)'",
    6871                        "article"=> "VARCHAR( 5 ) NOT NULL      COMMENT 'Article (typographie riche)'",
    69                         "nom"=> "text NOT NULL COMMENT 'Nom en clair (typographie riche)'"
     72                        "nom"=> "text NOT NULL COMMENT 'Nom en clair (typographie riche)'",
     73                        "maj"                => "TIMESTAMP"             
    7074                ),
    7175                'key' => array(
     
    9094
    9195$tables['spip_cog_arrondissements'] = array(
    92 
    93                 'principale' => "oui",
     96                'type' => 'cog_arrondissement',
     97                'principale' => "oui",
     98                'table_objet_surnoms' => array('cogarrondissement'), // table_objet('cog_arrondissement') => 'cog_arrondissements'
     99               
    94100                'field'=> array(
    95101                        "id_cog_arrondissement" => "INT(10) UNSIGNED NOT NULL COMMENT 'Identifiant de l\'arrondissement'",
     
    102108                        "nom_majuscule"=> "VARCHAR( 70 ) NOT NULL       COMMENT 'Nom en clair (majuscules)'",
    103109                        "article"=> "VARCHAR( 5 ) NOT NULL      COMMENT 'Article (typographie riche)'",
    104                         "nom"=> "VARCHAR( 70 ) NOT NULL COMMENT 'Nom en clair (typographie riche)'"
     110                        "nom"=> "VARCHAR( 70 ) NOT NULL COMMENT 'Nom en clair (typographie riche)'",
     111                        "maj"                => "TIMESTAMP"             
    105112                ),
    106113                'key' => array(
     
    126133$tables['spip_cog_departements'] = array(
    127134
    128                 'principale' => "oui",
     135                'type' => 'cog_departement',
     136                'principale' => "oui",
     137                'table_objet_surnoms' => array('cogdepartement'), // table_objet('cog_departement') => 'cog_departements'
    129138                'field'=> array(
    130139                        "id_cog_departement"    => "INT(10) UNSIGNED NOT NULL COMMENT 'Identifiant du departement'",
     
    159168$tables['spip_cog_regions'] = array(
    160169
    161                 'principale' => "oui",
     170                'type' => 'cog_region',
     171                'principale' => "oui",
     172                'table_objet_surnoms' => array('cogregion'), // table_objet('cog_region') => 'cog_regions'
    162173                'field'=> array(
    163174                        "id_cog_region" => "INT(10) UNSIGNED NOT NULL COMMENT 'Identifiant du region'",
     
    166177                        "type_charniere"=> "TINYINT( 1 ) UNSIGNED NOT NULL              COMMENT 'Type de nom en clair'",
    167178                        "nom_majuscule"=> "VARCHAR( 70 ) NOT NULL       COMMENT 'Nom en clair (majuscules)'",
    168                         "nom"=> "VARCHAR( 70 ) NOT NULL COMMENT 'Nom en clair (typographie riche)'"
     179                        "nom"=> "VARCHAR( 70 ) NOT NULL COMMENT 'Nom en clair (typographie riche)'",
     180                        "maj"                => "TIMESTAMP"             
    169181                ),
    170182                'key' => array(
     
    192204$tables['spip_cog_epcis'] = array(
    193205
    194                 'principale' => "oui",
     206                'type' => 'cog_epci',
     207                'principale' => "oui",
     208                'table_objet_surnoms' => array('cogepci'), // table_objet('cog_epci') => 'cog_epcis'
    195209                'field'=> array(
    196210                        "id_cog_epci"   => "INT(9) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'identifiant de l\'EPCI'",
     
    204218                'champs_editables' => $tab_champs,
    205219                'champs_versionnes' => $tab_champs,
    206                 'rechercher_champs' => array(
    207                         'libelle' => 8, 'code' => 5
    208                 ),
     220                'rechercher_champs' => array('libelle' => 8, 'code' => 5),
    209221                'titre' => "libelle AS titre, '' as lang",
    210222        );
     
    235247//////////   ZAUER  //////////
    236248
    237 
     249/*
    238250
    239251
     
    307319                'titre' => "libelle AS titre, '' as lang",
    308320        );
    309 
     321*/
    310322return $tables;
    311323
     
    315327
    316328
    317 function cog_declarer_tables_auxiliaires($tables_auxiliaires){
     329/**
     330 * Déclaration des tables secondaires (liaisons)
     331 *
     332 * @pipeline declarer_tables_auxiliaires
     333 * @param array $tables
     334 *     Description des tables
     335 * @return array
     336 *     Description complétée des tables
     337 */
     338function cog_declarer_tables_auxiliaires($tables) {
    318339
    319340
     
    321342//////////   Communes liens   //////////
    322343
    323         $table_cog = array(
    324                 "id_cog_commune"=> "INT(10) UNSIGNED NOT NULL COMMENT 'id_cog_commune'",
    325                 "objet"=> "VARCHAR( 25 ) NOT NULL       COMMENT 'Nom du type d\'objets '",
    326                 "id_objet"=> "BIGINT( 21 ) NOT NULL COMMENT 'identifiant de l\'objet'",
    327                 );
    328 
    329         $table_cog_key = array(
    330                 "PRIMARY KEY"   => "id_cog_commune, objet, id_objet",
    331                 "KEY id_objet"  => "id_cog_commune"
    332                 );
    333 
    334 
    335 
    336         $tables_auxiliaires['spip_cog_communes_liens'] = array(
    337                 'field' => &$table_cog,
    338                 'key' => &$table_cog_key,
    339                 );
    340 
    341 return $tables_auxiliaires;
     344        $tables['spip_cog_communes_liens'] = array(
     345                'field' => array(
     346                        "id_cog_commune"     => "bigint(21) DEFAULT '0' NOT NULL",
     347                        "id_objet"           => "bigint(21) DEFAULT '0' NOT NULL",
     348                        "objet"              => "VARCHAR(25) DEFAULT '' NOT NULL",
     349                        "vu"                 => "VARCHAR(6) DEFAULT 'non' NOT NULL"
     350                ),
     351                'key' => array(
     352                        "PRIMARY KEY"        => "id_cog_commune,id_objet,objet",
     353                        "KEY id_cog_commune" => "id_cog_commune"
     354                )
     355        );
     356
     357        return $tables;
    342358}
    343359
  • _plugins_/COG/trunk/cog_administrations.php

    r68107 r81931  
    1515                                                                        'spip_cog_epcis',
    1616                                                                        'spip_cog_epcis_natures',
    17                                                                         'spip_cog_zauers',
     17                                                                        /*'spip_cog_zauers',
    1818                                                                        'spip_cog_zauers_espace',
    19                                                                         'spip_cog_zauers_categories')),
     19                                                                        'spip_cog_zauers_categories'*/)),
    2020                array('cog_peupler_base')
    2121        );
     
    3434        sql_drop_table("spip_cog_epcis");
    3535        sql_drop_table("spip_cog_epci_natures");
    36         sql_drop_table("spip_cog_zauers");
     36        /*sql_drop_table("spip_cog_zauers");
    3737        sql_drop_table("spip_cog_zauer_espace");
    38         sql_drop_table("spip_cog_zauer_categories");
     38        sql_drop_table("spip_cog_zauer_categories");*/
    3939
    4040        effacer_meta($nom_meta_base_version);
  • _plugins_/COG/trunk/cog_config.php

    r68101 r81931  
    66 *
    77 */
    8 function cog_config_tab_fichier()
     8function cog_config_tab_fichier($objet=null)
    99{
    1010$tab_cog_fichier = array(
    11 'communes'                              => array(       'nom'=>'Communes',
    12                                                                         'fichier'=>'http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement/2012/txt/comsimp2012.zip'),
    13 'cantons'                               => array(       'nom'=>'Cantons',
    14                                                                         'fichier'=>'http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement/2012/txt/canton2012.txt'),
    15 'arrondissements'               => array(       'nom'=>'Arrondissements',
    16                                                                         'fichier'=>'http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement/2012/txt/arrond2012.txt'),
    17 'departements'                  => array(       'nom'=>'Départements',
    18                                                                         'fichier'=>'http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement/2012/txt/depts2012.txt'),
    19 'regions'                               => array(       'nom'=>'Régions',
    20                                                                         'fichier'=>'http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement/2012/txt/reg2012.txt'),
    21 'epcis'                                 => array(       'nom'=>'EPCI',
    22                                                                         'fichier'=>array('epci.txt',array('epci_composition.txt',0,1))),
    23 'epcis_natures'                 => array(       'nom'=>'Natures des EPCI',
    24                                                                         'fichier'=>'epci_nature.txt'),
    25 'epcis_communes_liens'  => array(       'nom'=>'Relations EPCI - commune',
    26                                                                         'fichier'=>'epci_composition.txt'),
    27 'zauers'                                => array(       'nom'=>'ZAUER',
     11'cog_commune'                           => array(       'nom'=>'Communes',
     12                                                                        'cle_unique'=>array('departement','code'),
     13                                                                        'fichier'=>'http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement/2013/txt/comsimp2013.zip'),
     14'cog_canton'                            => array(       'nom'=>'Cantons',
     15                                                                        'cle_unique'=>array('departement','arrondissement','code'),
     16                                                                        'fichier'=>'http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement/2013/txt/canton2013.txt'),
     17'cog_arrondissement'            => array(       'nom'=>'Arrondissements',
     18                                                                        'cle_unique'=>array('departement','code'),
     19                                                                        'fichier'=>'http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement/2013/txt/arrond2013.txt'),
     20'cog_departement'                       => array(       'nom'=>'Départements',
     21                                                                        'fichier'=>'http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement/2013/txt/depts2013.txt'),
     22'cog_region'                            => array(       'nom'=>'Régions',
     23                                                                        'fichier'=>'http://www.insee.fr/fr/methodes/nomenclatures/cog/telechargement/2013/txt/reg2013.txt'),
     24'cog_epci'                              => array(       'nom'=>'EPCI',
     25                                                                        'fichier'=>'http://www.insee.fr/fr/methodes/zonages/epci-au-01-01-2013.zip',
     26                                                                        'xls'=>array(   'cog_epci' => array('fichier_csv'=>'epci.txt','onglet'=>'Liste des EPCI au 01-01-2013','colonnes'=>range('A','C'),'ligne_depart'=>2,'ligne_arrive'=>3000),
     27                                                                                                        'epci_relation'=>array('fichier_csv'=>'epci_relation.txt','onglet'=>'Composition communale des EPCI','colonnes'=>array('A','C'),'ligne_depart'=>2,'ligne_arrive'=>37000)),
     28                                                                        'relation'=>array('code_insee'  =>      array('fichier'=>'epci_relation','num_col'=>0,'lien_col_cog_epci'=>0,'lien_col_epci_relation'=>2)),
     29                                                                        'correspondance' => array('code'=>      0,'libelle'     =>      1,'nature' => 2)),
     30                                                                       
     31                                                                        //'fichier'=>array('epci.txt',array('epci_composition.txt',0,1))),
     32/*'zauers'                              => array(       'nom'=>'ZAUER',
    2833                                                                        'fichier'=>array('ZAUER.txt',array('zauer_composition.txt',0,1))),
    2934'zauers_espace'                 => array(       'nom'=>'Espaces Urbains des ZAUER',
     
    3237                                                                        'fichier'=>'epci_nature.txt'),
    3338'zauers_communes_liens' => array(       'nom'=>'Relations ZAUER - commune',
    34                                                                         'fichier'=>'epci_nature.txt')
     39                                                                        'fichier'=>'epci_nature.txt')*/
    3540                                        );
     41if ($objet)
     42        return $tab_cog_fichier[$objet];                       
    3643return $tab_cog_fichier;
    3744}
     
    4047{
    4148$tab_cog_fichier = array(
    42 'communes'                              =>      array('nom'=>'Commune'),
    43 'cantons'                               =>      array('nom'=>'Cantons'),
    44 'arrondissements'               =>      array('nom'=>'Arrondissement'),
    45 'departements'                  =>      array('nom'=>'Département'),
    46 'regions'                               =>      array('nom'=>'Région'),
    47 'epcis'                                 =>      array('nom'=>'EPCI'),
    48 'epcis_natures'                 =>      array('nom'=>'Nature des EPCI'),
     49'cog_commune'                           =>      array('nom'=>'Commune'),
     50'cog_canton'                            =>      array('nom'=>'Cantons'),
     51'cog_arrondissement'            =>      array('nom'=>'Arrondissement'),
     52'cog_departement'                       =>      array('nom'=>'Département'),
     53'cog_region'                            =>      array('nom'=>'Région'),
     54'cog_epci'                              =>      array('nom'=>'EPCI'),
     55/*'epcis_natures'               =>      array('nom'=>'Nature des EPCI'),
    4956'zauers'                                =>      array('nom'=>'ZAUER'),
    5057'zauers_espace'                 =>      array('nom'=>'Espace Urbain des ZAUER'),
    5158'zauers_categories'     =>      array('nom'=>'Categorie des ZAUER'),
    52 'communes_liens'                =>      array('nom'=>'table de relations avec les communes')
     59'communes_liens'                =>      array('nom'=>'table de relations avec les communes')*/
    5360);
    5461return $tab_cog_fichier;
  • _plugins_/COG/trunk/formulaires/importer_cog.html

    r65246 r81931  
    99
    1010<ul>
    11         <li class="editer_fichier obligatoire[ (#ENV**{erreurs}|table_valeur{nom}|oui)erreur]">
    12                         <label for="fichier"><:cog:fichiers:></label>[
    13                         <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{fichier})</span>
    14                         ]<p class='explication'><:cog:choississez_le_fichier_a_importer:></p>
    15                 <select name='objet' [(#ENV{objet,''}|?{'',' '})onfocus="if(!antifocus){this.value='';antifocus=true;}"]>
    16                 <BOUCLE_fichier(POUR){tableau #ENV**{tab_objet}}>
    17                         <option value="#CLE"[(#ENV{objet}|=={#CLE}) selected="selected"] [(#VALEUR|table_valeur{fichier_manquant}|oui) disabled="disabled"]>[(#VALEUR|table_valeur{nom})] [(#VALEUR|table_valeur{fichier_manquant}|oui) (Fichier manquant)]</option>
    18                 </BOUCLE_fichier>
    19                 </select>
    20         </li>
    21 
    22 
     11<li class="editer_fichier obligatoire[ (#ENV**{erreurs}|table_valeur{nom}|oui)erreur]">
     12                <label for="fichier"><:cog:fichiers:></label>[
     13                <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{fichier})</span>
     14                ]<p class='explication'><:cog:choississez_le_fichier_a_importer:></p>
     15        <select name='objet' [(#ENV{objet,''}|?{'',' '})onfocus="if(!antifocus){this.value='';antifocus=true;}"]>
     16        <BOUCLE_fichier(POUR){tableau #ENV**{tab_objet}}>
     17                <option value="#CLE"[(#ENV{objet}|=={#CLE}) selected="selected"] [(#VALEUR|table_valeur{fichier_manquant}|oui) disabled="disabled"]>[(#VALEUR|table_valeur{nom})] [(#VALEUR|table_valeur{fichier_manquant}|oui) (Fichier manquant)]</option>
     18        </BOUCLE_fichier>
     19        </select>
     20</li>
    2321<li class="editer_option">
    24 
    2522  <div class="choix">
    2623          <input type='checkbox' class="checkbox" name='option_ecraser' value='1' id='option_ecraser'[ (#ENV{option_ecraser}|=={non}|oui)checked="checked"] />
    2724          <label for='option_ecraser'><:cog:ecraser_enregistrement:></label>
    2825  </div>
    29 
    3026  <div class="choix">
    3127          <input type='checkbox' class="checkbox" name='option_truncate' value='1' id='option_truncate'[ (#ENV{option_truncate}|=={oui}|oui)checked="checked"] />
    3228          <label for='option_truncate'><:cog:vider_la_table:></label>
    3329  </div>
    34 
    3530  <div class="choix">
    3631          <label for='option_truncate'><:cog:filtre_d_importation:></label>
    3732          <input type='text' name='option_filtre'  id='option_filtre' value="#ENV{option_filtre}" />
    3833  </div>
    39 
    4034</li>
    41 
    42 
    4335</ul>
    4436
     
    4739          [(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
    4840          <!--extra-->
    49           <p class='boutons'><input type='submit' class='submit' value='<:cog:bouton_importer:>' /></p>
    50         </div></form>
     41  <p class='boutons'><input type='submit' class='submit' value='<:cog:bouton_importer:>' /></p>
     42</div></form>
    5143
    5244
  • _plugins_/COG/trunk/formulaires/importer_cog.php

    r68107 r81931  
    2020                        if(!file_exists($nom_fichier))
    2121                                $fichier_manquant=true;
     22                        $nom_fichier=$emplacement.$infos_fichier['filename'].'.xls';
     23                        if(file_exists($nom_fichier))
     24                                $fichier_manquant=false;
    2225                }
    2326                $objet['fichier_manquant']=$fichier_manquant;
     
    5457                                $extension = 'txt';
    5558                        $fichier=$infos_fichier['filename'].'.'.$extension;
     59                        if(!file_exists($emplacement.$fichier))
     60                                $fichier=$infos_fichier['filename'].'.xls';
    5661                        if (!file_exists($emplacement.$fichier)) {
    57                                 $erreurs['fichier'] .= _T('cog:fichier_introuvable')." ".$emplacement.$fichier ;
     62                                $erreurs['fichier'] .= _T('cog:fichier_introuvable')." ".$emplacement.$infos_fichier['filename'].'.[txt|xls]';
    5863                                $erreurs['message_erreur'] .= _T('cog:fichier_introuvable');
    5964                        }
     
    9297
    9398
    94 function cog_import_epcis($objet,$options)
     99function cog_import_cog_epci($objet,$options)
    95100{
    96101
    97102        $options['decalage']=0;
    98         $tab_correspondance= array(
    99         'code'          =>      0,
    100         'libelle'       =>      1,
    101         'nature'        =>      array('fichier'=>1,'col'=>0),
    102         );
    103         $tab_relation= array(
    104         'code_insee'    =>      array('fichier'=>1,'col'=>3),
    105         'objet'         =>      'cog_epci',
    106         );
    107 
    108         return cog_import($objet,$options,$tab_correspondance,$tab_relation);
    109 
    110 }
    111 
    112 
    113 
    114 
    115 
    116 
    117 
    118 
    119 
    120 function cog_applique_filtre($tab_value,$tab_filtres)
    121 {
     103        return cog_import($objet,$options);
     104
     105}
     106
     107
     108
     109
     110
     111
     112
     113
     114
     115function cog_applique_filtre($tab_value,$tab_filtres){
    122116        foreach($tab_filtres as $col=>$filtre)
    123117        {
     
    134128
    135129
    136 function cog_renvoyer_valeur(&$ligne,&$correspondance,&$fichier,&$contenu_fichier,$one=true)
     130function cog_renvoyer_valeur($ligne,$correspondance)
    137131{
    138         if(isset($correspondance['fichier']))
    139         {
    140                 return  cog_ramener_valeur($ligne,$correspondance,$fichier,$contenu_fichier,$one);
    141         }
    142         elseif(isset($correspondance['col']))
     132        if(isset($correspondance['col']))
    143133        {
    144134                return  $ligne[$correspondance['col']];
     
    151141
    152142
    153 function cog_ramener_valeur(&$ligne,&$correspondance,&$fichier,&$contenu_fichier,$one=true)
     143function cog_ramener_valeur(&$ligne,&$correspondance,$objet,&$contenu_fichier,$one=true)
    154144{
    155145        include_spip('inc/config');
     146        include_spip('cog_config');
    156147        $tab_result=array();
    157         $num_fichier=$correspondance['fichier'];
    158         $col_key1=$fichier['fichier'][$num_fichier][1];
    159         $col_key2=$fichier['fichier'][$num_fichier][2];
    160         if(!isset($contenu_fichier[$num_fichier]))
     148        $objet_config=cog_config_tab_fichier($objet);
     149        $cle_fichier=$correspondance['fichier'];
     150        $col_key1=$correspondance['lien_col_'.objet_type($objet)];
     151        $col_key2=$correspondance['lien_col_'.$cle_fichier];
     152        //Charger le fichier en mémoire
     153        if(!isset($contenu_fichier[$cle_fichier]))
    161154                {
    162155                        $emplacement=_DIR_TMP.lire_config('cog/chemin_donnee');
    163                         $nom_fichier=$emplacement.$fichier['fichier'][$num_fichier][0];
     156                        if(isset($objet_config['xls']))
     157                                $nom_fichier=$emplacement.$objet_config['xls'][$cle_fichier]['fichier_csv'];
     158                        else
     159                                $nom_fichier=$emplacement.$objet_config['fichier'][$cle_fichier]['fichier'];
    164160                        $pointeur_fichier = fopen($nom_fichier,"r");
    165161                        if($pointeur_fichier<>0)
     
    172168                                        $ligne_temp= fgets($pointeur_fichier, 4096);
    173169                                        $ligne_temp=explode("\t",$ligne_temp);
    174                                         if($ligne_temp[$col_key2]==$anc_code){
    175                                                 $indice++;}
    176                                         else {
    177                                                 $indice=0;
    178                                                 $anc_code=$ligne_temp[$col_key2];}
    179                                         if(count($ligne_temp)>=2)
    180                                                 $contenu_fichier[$num_fichier][$col_key2][$ligne_temp[$col_key2]][$indice]=$ligne_temp;
    181                                 }
    182                         }
    183                 }
    184                 //print_r($contenu_fichier);
    185                 //exit();
    186                 //echo("<br />toto".$one);
    187                 //print_r($contenu_fichier[$num_fichier][$col_key2]);
    188 
    189         if(isset($contenu_fichier[$num_fichier][$col_key2][$ligne[$col_key1]][0]))
     170                                        if(isset($ligne_temp[$col_key2]) and !empty($ligne_temp[$col_key2]) )
     171                                                $contenu_fichier[$cle_fichier][$col_key2][trim($ligne_temp[$col_key2])][]=$ligne_temp;
     172                                        $indice++;
     173                                }
     174                        }
     175                }
     176        if(isset($contenu_fichier[$cle_fichier][$col_key2][$ligne[$col_key1]][0]))
    190177                {
    191                         //echo("<br />".$one);
    192178                        if($one)
    193179                                {
    194                                 return $contenu_fichier[$num_fichier][$col_key2][$ligne[$col_key1]][0][$correspondance['col']];
     180                                return $contenu_fichier[$cle_fichier][$col_key2][$ligne[$col_key1]][0][$correspondance['num_col']];
    195181                                }
    196182                        else
    197183                                {
    198                                         //echo("<br />eoeoe");
    199 
    200184                                        $tab_result=array();
    201                                         foreach($contenu_fichier[$num_fichier][$col_key2][$ligne[$col_key1]] as $ligne_temp)
     185                                        foreach($contenu_fichier[$cle_fichier][$col_key2][$ligne[$col_key1]] as $ligne_temp)
    202186                                                {
    203187                                                        //echo("<br />".$ligne_temp[$correspondance['col']]);
    204                                                         $tab_result[]=$ligne_temp[$correspondance['col']];
     188                                                        $tab_result[]=$ligne_temp[$correspondance['num_col']];
    205189                                                }
    206190                                        return $tab_result;
     
    216200
    217201
    218 function cog_import($objet,$options,$tab_correspondance=array(),$tab_relation=array())
    219 {
     202function cog_import($objet,$options){
    220203include_spip('cog_config');
    221204include_spip('inc/config');
     
    237220                $option_decalage        = $options['decalage'];
    238221
    239         //print_r($filtres);
     222
    240223        $filtres=explode(';',$option_filtre);
    241         //print_r($filtres);
    242         foreach($filtres as $filtre)
    243                 {
     224
     225foreach($filtres as $filtre){
    244226                $tab_temp=explode('=',$filtre);
    245227                $tab_filtres[$tab_temp[0]]=$tab_temp[1];
     
    249231        $message=  'Importation du fichier '.$objet."<br />";
    250232//      $message.= 'Emplacement du fichier : '.$emplacement."<br />";
    251         if(is_array($tab_objet[$objet]['fichier']))
    252         {
    253                 $fichier_modele=$tab_objet[$objet]['fichier'][0];
    254         }
    255         else
    256         {
    257                 $fichier_modele=$tab_objet[$objet]['fichier'];
    258         }
     233if(is_array($tab_objet[$objet]['fichier']))     {
     234                $fichier_modele=$tab_objet[$objet]['fichier'][0];}
     235else{
     236                $fichier_modele=$tab_objet[$objet]['fichier'];}
    259237
    260238        $infos_fichier=pathinfo($fichier_modele);
     
    262240        if($extension =='zip')
    263241                $extension = 'txt';
    264         $fichier_modele=$emplacement.$infos_fichier['filename'].'.'.$extension;
    265 
    266         $table='spip_cog_'.$objet;
    267         $tab_description=description_table($table);
    268         if($option_truncate==1)
    269         {
     242if(!file_exists($fichier_modele=$emplacement.$infos_fichier['filename'].'.'.$extension)) {
     243        if(file_exists($emplacement.$infos_fichier['filename'].'.xls'))
     244                {
     245                foreach($tab_objet[$objet]['xls'] as $extraction)
     246                if(!file_exists($emplacement.$extraction['fichier_csv'])){
     247                        conversion_fichier_excel($emplacement.$infos_fichier['filename'].'.xls',$emplacement.$extraction['fichier_csv'],$extraction['onglet'],$extraction['colonnes'],$extraction['ligne_depart'],$extraction['ligne_arrive']);
     248                        }
     249                        $fichier_modele=$emplacement.$tab_objet[$objet]['xls'][objet_type($objet)]['fichier_csv'];
     250                }
     251               
     252}
     253$table=table_objet_sql($objet);
     254$tab_description=description_table($table);
     255if($option_truncate==1) {
    270256        $message.=  'Purge de la table '.$table."<br />";
    271257        spip_mysql_query('truncate table '.$table);
    272258        sql_delete($table,array("1"=>"1"));
    273         if(!empty($tab_relation))
    274                 {
    275                 sql_delete("spip_cog_communes_liens",'objet='.sql_quote($tab_relation['objet']));
    276                 }
    277         }
    278 
     259        if(isset($tab_objet[$objet]['relation'])){
     260                sql_delete("spip_cog_communes_liens",'objet='.sql_quote($objet));
     261                }
     262        }
     263
     264$req_relation=array();
     265if(isset($tab_objet[$objet]['relation'])){
     266        $tab_commune=sql_allfetsel('concat(departement,code) as code,id_cog_commune','spip_cog_communes');
     267        foreach($tab_commune as $com)
     268                $tab_temp[$com['code']]=$com['id_cog_commune'];
     269        $tab_commune=$tab_temp;
     270}
     271       
     272
     273$cle_unique=isset($tab_objet[$objet]['cle_unique'])?$tab_objet[$objet]['cle_unique']: array('code');
     274$tab_objet_existant=sql_allfetsel(id_table_objet($table).','.implode(',',$cle_unique),$table);
     275$tab_temp=array();
     276foreach($tab_objet_existant as $ob){
     277        $super_cle=array();
     278        foreach($cle_unique as $cle)
     279                $super_cle[]=$ob[$cle];
     280        $tab_temp[implode("-+-",$super_cle)]=$ob[id_table_objet($table)];
     281}
     282$tab_objet_existant=$tab_temp;
    279283
    280284        $pointeur_fichier = fopen($fichier_modele,"r");
    281         if($pointeur_fichier<>0)
    282         {
     285if($pointeur_fichier<>0){
    283286        $ligne= fgets($pointeur_fichier, 4096);
    284287        $nb_ligne=0;
    285         //print_r($tab_correspondance);
    286         while (!feof($pointeur_fichier))
    287         {
     288        while (!feof($pointeur_fichier)){
    288289                $ligne= fgets($pointeur_fichier, 4096);
    289290                $tab=explode("\t",$ligne);
     
    293294                        $i=0;
    294295                        reset($tab_description['field']);
     296                       
    295297                        while(list ($key, $val) = each ($tab_description['field']))
    296298                                {
     
    301303                                        }
    302304
    303                                         if(!empty($tab_correspondance))
     305                                        if(isset($tab_objet[$objet]['correspondance']))
    304306                                        {
     307                                                $tab_correspondance=$tab_objet[$objet]['correspondance'];
    305308                                                if(isset($tab_correspondance[$key]))
    306309                                                {
     
    314317                                                                if(isset($tab_correspondance[$key]['col']))
    315318                                                                {
    316                                                                         $tab_value[$key]=cog_renvoyer_valeur($tab,$tab_correspondance[$key],$tab_objet[$objet],$contenu_fichier);
     319                                                                                if(isset($correspondance[$key]['fichier']))
     320                                                                                        $tab_value[$key]=cog_ramener_valeur($tab,$tab_correspondance[$key],$objet,$contenu_fichier);
     321                                                                                else
     322                                                                                        $tab_value[$key]=cog_renvoyer_valeur($tab,$tab_correspondance[$key]);
    317323                                                                }
    318324                                                                else
     
    321327                                                                        reset($tab_correspondance[$key]);
    322328                                                                        while(list ($indice1, $valeur1) = each ($tab_correspondance[$key]))
    323                                                                                 {
    324                                                                                         $tab_value[$key] .=sql_quote(cog_renvoyer_valeur($tab,$valeur1,$tab_objet[$objet],$contenu_fichier));
    325                                                                                 }
     329                                                                                $tab_value[$key] .=sql_quote(cog_renvoyer_valeur($tab,$valeur1));
    326330                                                                }
    327331                                                        }
     
    330334                                                else
    331335                                                {
    332                                                         //print_r($tab);
    333336                                                        $tab_value[$key] = $tab[$i-$option_decalage];
    334337                                                }
     
    337340
    338341                                $filtre_relation=false;
    339                                 if(!empty($tab_relation))
    340                                 {
    341                                         $tab_depcom=cog_renvoyer_valeur($tab,$tab_relation['code_insee'],$tab_objet[$objet],$contenu_fichier,false);
    342                                         //print_r($tab_depcom);
    343                                         //print_r("rara");
    344                                         //exit();
     342                                if(isset($tab_objet[$objet]['relation']))
     343                                {
     344                                        foreach($tab_objet[$objet]['relation'] as $key => $relation)
     345                                        {
     346                                                $tab_depcom=cog_ramener_valeur($tab,$relation,$objet,$contenu_fichier,false);
    345347                                        for($ii=0;$ii<count($tab_depcom);$ii++)
    346348                                        {
     
    351353
    352354                                        }
    353                                 //      print_r($tab_depcom);
    354                                 }
    355 
     355                                        }
     356                                }
     357                               
    356358                                if(!cog_applique_filtre($tab_value,$tab_filtres) || $filtre_relation)
    357359                                        continue;
    358 
    359 
    360                                 if($option_replace && $existe_deja)
     360                               
     361
     362                                $super_cle=array();
     363                                $super_cles=='';
     364                                foreach($cle_unique as $cle){
     365                                        $super_cle[]=$tab_value[$cle];
     366                                        $super_cles.=$tab_value[$cle];
     367                                        }
     368                                if (!empty($super_cles))
    361369                                        {
    362                                                 sql_delete($table, $primarys);
    363                                                 $id=sql_insertq($table, $tab_value);
    364                                         }
    365                                 elseif(!$existe_deja)
    366                                         {
    367                                                 //print_r($tab_value);
    368                                                 $id=sql_insertq($table, $tab_value);
    369                                         }
    370 
    371                                 if(!empty($tab_relation))
    372                                 {
    373 
    374                                         foreach($tab_depcom as $depcom)
    375                                         {
    376                                                 //exit();
    377 
    378                                                         if($id_cog_commune=sql_getfetsel('id_cog_commune','spip_cog_communes','departement='.sql_quote($depcom['departement']).' and code= '.sql_quote($depcom['code'])))
    379                                                                 {
    380                                                                 //      print_r(sql_get_select('id_cog_commune','spip_cog_communes','departement='.sql_quote($depcom['departement']).' and code= '.sql_quote($depcom['code']))."<br />");
    381 
    382                                                                 sql_insertq("spip_cog_communes_liens",array('id_cog_commune'=>$id_cog_commune,'id_objet'=>$id,'objet'=> $tab_relation['objet']));
     370                                        $existe_deja=false;
     371                                        if(isset($tab_objet_existant[implode("-+-",$super_cle)])){
     372                                                $existe_deja=true;
     373                                                $id_objet=$tab_objet_existant[implode("-+-",$super_cle)];
     374                                                $where=id_table_objet($table).'='.intval($id_objet);
     375                                        }
     376
     377                                        if($option_replace && $existe_deja)     {
     378                                                        sql_updateq($table, $tab_value, $where);
     379                                                }
     380                                        elseif(!$existe_deja){
     381                                                        $id_objet=sql_insertq($table, $tab_value);
     382                                                }
     383
     384                                        // Ajout des éventuels liaison
     385                                        if(isset($tab_objet[$objet]['relation'])){
     386                                                /*foreach($tab_depcom as $key=>$depcom){
     387                                                        if($id_cog_commune=$tab_commune[$depcom['departement'].$depcom['code']])
     388                                                                sql_insertq("spip_cog_communes_liens",array('id_cog_commune'=>$id_cog_commune,'id_objet'=>$id,'objet'=> objet_type($objet)));
     389                                                        else
     390                                                                $erreurs[]="Erreur grave Commune introuvable : ".$depcom['departement'].$depcom['code'];
     391                                                }*/
     392                                                $req=array();
     393                                                foreach($tab_depcom as $key=>$depcom){
     394                                                        if(isset($tab_commune[$depcom['departement'].$depcom['code']]))
     395                                                                $req_relation []= '('.implode(',',array($tab_commune[$depcom['departement'].$depcom['code']],$id_objet,"'".objet_type($objet)."'")).')';
     396
    383397                                                                }
    384                                                         else {
    385                                                                 $erreurs[]="Erreur grave Commune introuvable : ".$com['ccocom'];
    386398                                                                }
    387399
    388                                         }
    389 
     400                                        if(($nb_ligne%100)==0){
     401                                                        if(!empty($req_relation)){
     402                                                        $req_relation= "REPLACE INTO spip_cog_communes_liens  (id_cog_commune,id_objet,objet) VALUES ".implode(',',$req_relation);
     403                                                        if(!sql_query($req_relation))
     404                                                                $erreurs[]="Erreur dans la création des relation avec les communes.";
     405                                        }
     406
     407                                                        $req_relation=array();
    390408                                }
    391409
     
    394412                }
    395413        }
     414                        if(!empty($req_relation)){
     415                        $req_relation= "REPLACE INTO spip_cog_communes_liens  (id_cog_commune,id_objet,objet) VALUES ".implode(',',$req_relation);
     416                        if(!sql_query($req_relation))
     417                                $erreurs[]="Erreur dans la création des relation avec les communes.";
     418                        }
     419                       
     420                }
    396421        $message.=$nb_ligne.' enregistrements ajoutés.';
    397422        fclose($pointeur_fichier);
     
    425450        return $x;
    426451}
     452unset($filterSubset);
     453
     454
     455
     456
     457function conversion_fichier_excel($fichier_xls_in,$fichier_xls_out,$sheetname,$cols,$ligne_depart,$ligne_arrive)
     458{
     459$inputFileType = 'Excel5';
     460//      $inputFileType = 'Excel2007';
     461//      $inputFileType = 'Excel2003XML';
     462//      $inputFileType = 'OOCalc';
     463//      $inputFileType = 'Gnumeric';
     464$inputFileName = $fichier_xls_in;
     465$chunkSize = 2000;
     466$filterSubset = new MyReadFilter($cols);
     467$sheetData=array();
     468$objReader = PHPExcel_IOFactory::createReader($inputFileType);
     469$objReader->setReadDataOnly(true);
     470$objReader->setLoadSheetsOnly($sheetname);
     471$objReader->setReadFilter($filterSubset);
     472for ($startRow = $ligne_depart; $startRow <= $ligne_arrive; $startRow += $chunkSize) {
     473$filterSubset->setRows($startRow,$chunkSize);
     474$objPHPExcel = $objReader->load($inputFileName);
     475$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,false,true,false);
     476$objPHPExcel->disconnectWorksheets();
     477unset($objPHPExcel);
     478$chaine="";
     479foreach($sheetData as &$data)
     480        if(!empty($data[0]))
     481                $chaine.=implode("\t",$data).PHP_EOL;
     482file_put_contents($fichier_xls_out,$chaine,FILE_APPEND);
     483unset($sheetData);
     484unset($chaine);
     485}
     486unset($filterSubset);
     487unset($objReader);
     488return true;
     489}
     490
     491
     492include_spip('lib/PHPExcel/Classes/PHPExcel/IOFactory');
     493class MyReadFilter implements PHPExcel_Reader_IReadFilter
     494{
     495        private $_startRow = 0;
     496        private $_endRow = 0;
     497        private $_columns = array();
     498
     499        public function __construct( $columns) {
     500                $this->_columns         = $columns;
     501        }
     502
     503    public function setRows($startRow, $chunkSize) {
     504        $this->_startRow = $startRow;
     505        $this->_endRow   = $startRow + $chunkSize;
     506    }
     507
     508        public function readCell($column, $row, $worksheetName = '') {
     509                if ($row >= $this->_startRow && $row <= $this->_endRow) {
     510                        if (in_array($column,$this->_columns)) {
     511                                return true;
     512                        }
     513                }
     514                return false;
     515        }
     516}
    427517
    428518
  • _plugins_/COG/trunk/formulaires/telecharger_cog.php

    r68107 r81931  
    9999        if(isset($contenu[0]))  {
    100100                foreach ($contenu[0] as $fichier) {
    101                         rename(_DIR_TMP.$fichier['filename'],$nom_fichier_txt);
     101                        rename(_DIR_TMP.$fichier['filename'],$emplacement.$fichier['filename']);
    102102                }
    103103        }
  • _plugins_/COG/trunk/paquet.xml

    r79890 r81931  
    22        prefix="cog"
    33        categorie="outil"
    4         version="2.0.5"
     4        version="2.1.0"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.0.*]"
     
    1616        <auteur>Guillaume Wauquier</auteur>
    1717
     18        <licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>       
    1819        <copyright>2012</copyright>
    1920
    20         <licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>
     21       
    2122
     23        <pipeline nom="autoriser" inclure="cog_autorisations.php" />   
    2224        <pipeline nom="declarer_tables_objets_sql" inclure="base/cog.php" />
     25        <pipeline nom="declarer_tables_interfaces" inclure="base/cog.php" />
    2326        <pipeline nom="declarer_tables_auxiliaires" inclure="base/cog.php" />
    24         <pipeline nom="declarer_tables_interfaces" inclure="base/cog.php" />
    2527        <pipeline nom="affiche_milieu" inclure="cog_pipeline.php" />
    2628        <pipeline nom="rechercher_liste_des_champs" inclure="cog_pipeline.php" />
    2729        <pipeline nom="declarer_tables_objets_surnoms" inclure="cog_pipeline.php" />
    2830        <pipeline nom="header_prive" inclure="cog_pipeline.php" />
    29         <pipeline nom="autoriser" inclure="cog_autoriser.php" />
    3031        <pipeline nom="jqueryui_plugins" inclure="cog_pipeline.php" />
    3132
    3233        <necessite nom="spip_bonux" compatibilite="[3.0.5;[" />
    33 
     34        <necessite nom="saisies"  compatibilite="[1.24.0;]" />
     35       
     36        <lib nom="PHPExcel" lien="https://github.com/PHPOffice/PHPExcel/archive/master.zip" />
    3437
    3538        <menu nom="cog" titre="COG" parent="menu_edition" icone="images/cog-24.png" action="cog" />
  • _plugins_/COG/trunk/prive/squelettes/contenu/cog.html

    r68102 r81931  
    44<BOUCLE_table(POUR){tableau #GET{tab_table}}>
    55<tr>
    6 <td><a href="[(#URL_ECRIRE{cog_#CLE})]">[(#VALEUR|table_valeur{nom})]</a></td>
     6<td><a href="[(#URL_ECRIRE{#CLE})s]">[(#VALEUR|table_valeur{nom})]</a></td>
    77</tr>
    88</BOUCLE_table>
  • _plugins_/COG/trunk/prive/squelettes/navigation/cog_import.html

    r68102 r81931  
    11[(#BOITE_OUVRIR{'','raccourcis'})]
    2 [(#URL_ECRIRE{cog}|icone_horizontale{<:icone_retour:>, #CHEMIN_IMAGE{coggps-24.png},''})]
     2[(#URL_ECRIRE{cog}|icone_horizontale{<:icone_retour:>, #CHEMIN_IMAGE{cog-24.png},''})]
    33[(#BOITE_FERMER)]
Note: See TracChangeset for help on using the changeset viewer.