Changeset 54880 in spip-zone


Ignore:
Timestamp:
Nov 25, 2011, 11:50:59 AM (8 years ago)
Author:
rastapopoulos@…
Message:

Et voilà le fichier d'installation entièrement passé au format SPIP 3 !

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/contacts_et_organisations/trunk/contacts_administrations.php

    r54878 r54880  
    99
    1010function contacts_upgrade($nom_meta_base_version, $version_cible){
    11  
    12         $current_version = "0.0";
    13         if (isset($GLOBALS['meta'][$nom_meta_base_version]))
    14                 $current_version = $GLOBALS['meta'][$nom_meta_base_version];
    15        
    16         if ($current_version=="0.0") {
    17                 creer_base();
    18                 spip_log('Tables C&O correctement creees','contacts');
    19                 ecrire_meta($nom_meta_base_version, $current_version=$version_cible);
    20         }
    21         if (version_compare($current_version,"1.1.0","<")){
    22                 sql_alter("TABLE spip_contacts CHANGE prenom prenom tinytext NOT NULL DEFAULT ''");
    23                 ecrire_meta($nom_meta_base_version, $current_version="1.1.0");
    24         }
    25         if (version_compare($current_version,"1.1.1","<")){
    26                 maj_tables('spip_contacts');
    27                 ecrire_meta($nom_meta_base_version, $current_version="1.1.1");
    28         }
    29         if (version_compare($current_version,"1.1.2","<")){
    30                 // dupliquer id_ pour les jointures automatiques.
    31                 maj_tables(array('spip_contacts', 'spip_comptes'));
    32                 sql_alter('TABLE spip_contacts ADD INDEX (id_contact)');
    33                 sql_alter('TABLE spip_comptes ADD INDEX (id_compte)');
    34                 sql_alter('TABLE spip_comptes_contacts ADD INDEX (id_contact)');
    35                 sql_update('spip_contacts', array('id_contact'=>'id_auteur'));
    36                 sql_update('spip_comptes', array('id_compte'=>'id_auteur'));
    37                 ecrire_meta($nom_meta_base_version, $current_version="1.1.2");
    38         }
    39         if (version_compare($current_version,"1.2.0","<")){
    40                 // on passe de compte a organisation...
    41                 sql_alter('TABLE spip_comptes DROP INDEX id_compte');
    42                 sql_alter('TABLE spip_comptes_contacts DROP INDEX id_compte');
     11        $maj = array();
     12       
     13        $maj['create'] = array(
     14                array('creer_base'),
     15        );
     16       
     17        $maj['1.1.0'] = array(
     18                array('sql_alter', 'TABLE spip_contacts CHANGE prenom prenom tinytext NOT NULL DEFAULT ""'),
     19        );
     20       
     21        $maj['1.1.1'] = array(
     22                array('maj_tables', 'spip_contacts'),
     23        );
     24       
     25        // Dupliquer pour les jointures automatiques
     26        $maj['1.1.2'] = array(
     27                array('maj_tables', array('spip_contacts', 'spip_comptes')),
     28                array('sql_alter', 'TABLE spip_contacts ADD INDEX (id_contact)'),
     29                array('sql_alter', 'TABLE spip_comptes ADD INDEX (id_compte)'),
     30                array('sql_alter', 'TABLE spip_comptes_contacts ADD INDEX (id_contact)'),
     31                array('sql_update', 'spip_contacts', array('id_contact'=>'id_auteur')),
     32                array('sql_update', 'spip_comptes', array('id_compte'=>'id_auteur')),
     33        );
     34       
     35        // On passe de compte à organisation
     36        $maj['1.2.0'] = array(
     37                array('sql_alter', 'TABLE spip_comptes DROP INDEX id_compte'),
     38                array('sql_alter', 'TABLE spip_comptes_contacts DROP INDEX id_compte'),
    4339               
    44                 sql_alter('TABLE spip_comptes RENAME spip_organisations');
    45                 sql_alter('TABLE spip_comptes_contacts RENAME spip_organisations_contacts');
    46 
    47                 sql_alter('TABLE spip_organisations CHANGE id_compte id_organisation bigint(21) NOT NULL');
    48                 sql_alter('TABLE spip_organisations_contacts CHANGE id_compte id_organisation bigint(21) NOT NULL');
    49 
    50                 sql_alter('TABLE spip_organisations ADD INDEX (id_organisation)');
    51                 sql_alter('TABLE spip_organisations_contacts ADD INDEX (id_organisation)');             
    52                 ecrire_meta($nom_meta_base_version, $current_version="1.2.0");
    53         }
    54         if (version_compare($current_version,"1.2.1","<")){
    55                 // on modifie quelques champs de la table organisations
    56                 sql_alter("TABLE spip_organisations CHANGE type statut_juridique TINYTEXT NOT NULL DEFAULT ''"); // renomme le champ 'type' en 'statut_juridique'
    57                 sql_alter("TABLE spip_organisations CHANGE siret identification TINYTEXT NOT NULL DEFAULT ''"); // renomme le champ 'siret' en 'identification'
    58                 sql_alter("TABLE spip_organisations ADD activite TINYTEXT NOT NULL DEFAULT '' AFTER identification"); // ajoute le champ 'activite'
    59                 spip_log('Tables correctement passsees en version 1.2.1','contacts');
    60                 ecrire_meta($nom_meta_base_version, $current_version="1.2.1");
    61         }
    62         if (version_compare($current_version,"1.3.0","<")){
    63                 // les cles primaires des tables contacts et organisations
    64                 // passent sur le id_contact et id_organisation au lieu du id_auteur
    65                 // afin de gerer eventuellement des contacts/organisations autonomes.
    66                 sql_alter('TABLE spip_organisations DROP INDEX id_organisation');
    67                 sql_alter('TABLE spip_organisations DROP PRIMARY KEY');
    68                 sql_alter('TABLE spip_organisations CHANGE id_auteur id_auteur bigint(21) NOT NULL');
    69                 sql_alter('TABLE spip_organisations CHANGE id_organisation id_organisation bigint(21) NOT NULL auto_increment PRIMARY KEY');
    70                 sql_alter('TABLE spip_organisations ADD INDEX (id_auteur)');
     40                array('sql_alter', 'TABLE spip_comptes RENAME spip_organisations'),
     41                array('sql_alter', 'TABLE spip_comptes_contacts RENAME spip_organisations_contacts'),
     42
     43                array('sql_alter', 'TABLE spip_organisations CHANGE id_compte id_organisation bigint(21) NOT NULL'),
     44                array('sql_alter', 'TABLE spip_organisations_contacts CHANGE id_compte id_organisation bigint(21) NOT NULL'),
     45
     46                array('sql_alter', 'TABLE spip_organisations ADD INDEX (id_organisation)'),
     47                array('sql_alter', 'TABLE spip_organisations_contacts ADD INDEX (id_organisation)'),           
     48        );
     49       
     50        // On modifie quelques champs de la table organisations
     51        $maj['1.2.1'] = array(
     52                // renomme le champ 'type' en 'statut_juridique'
     53                array('sql_alter', "TABLE spip_organisations CHANGE type statut_juridique TINYTEXT NOT NULL DEFAULT ''"),
     54                // renomme le champ 'siret' en 'identification'
     55                array('sql_alter', "TABLE spip_organisations CHANGE siret identification TINYTEXT NOT NULL DEFAULT ''"),
     56                // ajoute le champ 'activite'
     57                array('sql_alter', "TABLE spip_organisations ADD activite TINYTEXT NOT NULL DEFAULT '' AFTER identification"),
     58        );
     59       
     60        // Les clés primaires des tables contacts et organisations
     61        // passent sur le id_contact et id_organisation au lieu du id_auteur
     62        // afin de gérer éventuellement des contacts/organisations autonomes.
     63        $maj['1.3.0'] = array(
     64                array('sql_alter', 'TABLE spip_organisations DROP INDEX id_organisation'),
     65                array('sql_alter', 'TABLE spip_organisations DROP PRIMARY KEY'),
     66                array('sql_alter', 'TABLE spip_organisations CHANGE id_auteur id_auteur bigint(21) NOT NULL'),
     67                array('sql_alter', 'TABLE spip_organisations CHANGE id_organisation id_organisation bigint(21) NOT NULL auto_increment PRIMARY KEY'),
     68                array('sql_alter', 'TABLE spip_organisations ADD INDEX (id_auteur)'),
    7169               
    72                 sql_alter('TABLE spip_contacts DROP INDEX id_contact');
    73                 sql_alter('TABLE spip_contacts DROP PRIMARY KEY');
    74                 sql_alter('TABLE spip_contacts CHANGE id_auteur id_auteur bigint(21) NOT NULL'); 
    75                 sql_alter('TABLE spip_contacts CHANGE id_contact id_contact bigint(21) NOT NULL auto_increment PRIMARY KEY');
    76                 sql_alter('TABLE spip_contacts ADD INDEX (id_auteur)');
    77                
    78                 spip_log('Tables correctement passsees en version 1.3.0','contacts');
    79                 ecrire_meta($nom_meta_base_version, $current_version="1.3.0");
    80         }
    81 
    82         if (version_compare($current_version,"1.3.1","<")){
    83                 if (!sql_alter("TABLE spip_contacts CHANGE descriptif descriptif TEXT DEFAULT '' NOT NULL")) {
    84                         spip_log('Probleme lors de la modif de la table spip_contacts','contacts');
    85                 } else {
    86                         spip_log('Table spip_contacts correctement passsee en version 1.3.1','contacts');
    87                 }
    88                 if (!sql_alter("TABLE spip_organisations CHANGE descriptif descriptif TEXT DEFAULT '' NOT NULL")) {
    89                         spip_log('Probleme lors de la modif de la table spip_organisations','contacts');
    90                 } else {
    91                         spip_log('Table spip_organisations correctement passsee en version 1.3.1','contacts');
    92                 }
    93 
    94                 ecrire_meta($nom_meta_base_version, $current_version="1.3.1");
    95         }
    96 
    97 /*
    98         // on utilise la table spip_contacts_liens
    99         // pour stocker le id_auteur de spip_contacts
    100     if (version_compare($current_version,"1.3.2","<")){
    101                 maj_tables('spip_contacts_liens');
    102                 $auteurs = sql_allfetsel(array('id_auteur', 'id_contacts'), 'spip_contacts', 'id_auteur > 0');
    103                 if ($auteurs) {
    104                         $inserts = array();
    105                         foreach ($auteurs as $r) {
    106                                 // possibilité d'erreur sql si la ligne est déjà là.
    107                                 // rien de dramatique
    108                                 $inserts = array(
    109                                         'id_contact' => $r['id_contact'],
    110                                         'id_objet' => $r['id_auteur'],
    111                                         'objet' => 'auteur',
    112                                 );
    113                         }
    114                         if ($inserts) {
    115                                 sql_insertq_multi('spip_contacts_liens', $inserts);
    116                         }
    117                 }
    118                 sql_alter('TABLE spip_contacts DROP INDEX id_auteur');
    119                 sql_alter('TABLE spip_contacts DROP COLUMN id_auteur');
    120                 ecrire_meta($nom_meta_base_version, $current_version="1.3.2");
    121         }
    122 */     
    123 
    124         // le champ descriptif ne changeait pas sur les nouvelles installations (c'etait encore declare tinytext
    125     if (version_compare($current_version,"1.3.3","<")){
    126                 sql_alter("TABLE spip_contacts CHANGE descriptif descriptif TEXT DEFAULT '' NOT NULL");
    127                 ecrire_meta($nom_meta_base_version, $current_version="1.3.3");
    128         }
     70                array('sql_alter', 'TABLE spip_contacts DROP INDEX id_contact'),
     71                array('sql_alter', 'TABLE spip_contacts DROP PRIMARY KEY'),
     72                array('sql_alter', 'TABLE spip_contacts CHANGE id_auteur id_auteur bigint(21) NOT NULL'),
     73                array('sql_alter', 'TABLE spip_contacts CHANGE id_contact id_contact bigint(21) NOT NULL auto_increment PRIMARY KEY'),
     74                array('sql_alter', 'TABLE spip_contacts ADD INDEX (id_auteur)'),
     75        );
     76       
     77        $maj['1.3.1'] = array(
     78                array('sql_alter', "TABLE spip_contacts CHANGE descriptif descriptif TEXT DEFAULT '' NOT NULL"),
     79                array('sql_alter', "TABLE spip_organisations CHANGE descriptif descriptif TEXT DEFAULT '' NOT NULL"),
     80        );
     81       
     82        $maj['1.3.3'] = array(
     83                array('sql_alter', "TABLE spip_contacts CHANGE descriptif descriptif TEXT DEFAULT '' NOT NULL"),
     84        );
    12985       
    13086        // le champ id_auteur sur spip_organisations peut ne pas etre unique si une organisation
    13187        // n'est pas liee a un auteur (id_auteur=0). Plus tard, il faudra certainement mettre une
    13288        // table de relation spip_organisations_liens pour cela.
    133     if (version_compare($current_version,"1.3.4","<")){
     89        $maj['1.3.4'] = array(
    13490                // pas de UNIQUE sur l'index auteur
    135                 sql_alter("TABLE spip_organisations DROP INDEX id_auteur");
    136                 sql_alter("TABLE spip_organisations CHANGE id_auteur id_auteur bigint(21) DEFAULT 0 NOT NULL");
    137                 sql_alter("TABLE spip_organisations ADD INDEX (id_auteur)");
    138                 ecrire_meta($nom_meta_base_version, $current_version="1.3.4");
    139         }
    140        
    141         // le champ id_parent sur spip_organisations pour definir des hierarchies d'organisations.
    142     if (version_compare($current_version,"1.3.5","<")){
    143                 sql_alter("TABLE spip_organisations ADD COLUMN id_parent bigint(21) DEFAULT 0 NOT NULL");
    144                 ecrire_meta($nom_meta_base_version, $current_version="1.3.5");
    145         }
    146        
    147         // le champ type_liaison sur spip_organisations_contacts pour definir des types de liaisons donc.
    148     if (version_compare($current_version,"1.3.6","<")){
    149                 sql_alter("TABLE spip_organisations_contacts ADD COLUMN type_liaison tinytext NOT NULL DEFAULT ''");
    150                 ecrire_meta($nom_meta_base_version, $current_version="1.3.6");
    151         }
    152 
    153         // on cree la table spip_organisations_liens
    154     if (version_compare($current_version,"1.3.7","<")){
    155                 maj_tables('spip_organisations_liens');
    156                 ecrire_meta($nom_meta_base_version, $current_version="1.3.7");
    157         }
    158 
    159 /*     
    160         // on utilise la table spip_organisations_liens
    161         // pour stocker le id_auteur de spip_organisations
    162     if (version_compare($current_version,"1.4.0","<")){
    163                 $auteurs = sql_allfetsel(array('id_auteur', 'id_organisation'), 'spip_organisations', 'id_auteur > 0');
    164                 if ($auteurs) {
    165                         $inserts = array();
    166                         foreach ($auteurs as $r) {
    167                                 // possibilité d'erreur sql si la ligne est déjà là.
    168                                 // rien de dramatique
    169                                 $inserts = array(
    170                                         'id_organisation' => $r['id_organisation'],
    171                                         'id_objet' => $r['id_auteur'],
    172                                         'objet' => 'auteur',
    173                                 );
    174                         }
    175                         if ($inserts) {
    176                                 sql_insertq_multi('spip_organisations_liens', $inserts);
    177                         }
    178                 }
    179                 sql_alter('TABLE spip_organisations DROP INDEX id_auteur');
    180                 sql_alter('TABLE spip_organisations DROP COLUMN id_auteur');
    181                 ecrire_meta($nom_meta_base_version, $current_version="1.4.0");
    182         }
    183 */
    184 
    185         // coquille sur la cle de spip_organisations_liens
    186         if (version_compare($current_version,"1.4.1","<")){
    187                 sql_alter('TABLE spip_organisations DROP INDEX id_contact');
    188                 sql_alter('TABLE spip_organisations ADD INDEX (id_organisation)');
    189 
    190                 ecrire_meta($nom_meta_base_version, $current_version="1.4.1");
    191         }
    192 
    193         // rajout d'un type_liaison dans les liens
    194         if (version_compare($current_version,"1.4.2","<")){
    195                 maj_tables(array('spip_contacts_liens', 'spip_organisations_liens'));
    196         sql_alter('TABLE `spip_organisations_liens` DROP PRIMARY KEY');
    197         sql_alter('TABLE `spip_organisations_liens` ADD PRIMARY KEY ( `id_organisation` , `id_objet` , `objet`, `type_liaison`(25)) ');
    198         sql_alter('TABLE `spip_contacts_liens` DROP PRIMARY KEY');
    199         sql_alter('TABLE `spip_contacts_liens` ADD PRIMARY KEY ( `id_contact` , `id_objet` , `objet`, `type_liaison`(25)) ');
    200 
    201                 ecrire_meta($nom_meta_base_version, $current_version="1.4.2");
    202         }
    203 
     91                array('sql_alter', "TABLE spip_organisations DROP INDEX id_auteur"),
     92                array('sql_alter', "TABLE spip_organisations CHANGE id_auteur id_auteur bigint(21) DEFAULT 0 NOT NULL"),
     93                array('sql_alter', "TABLE spip_organisations ADD INDEX (id_auteur)"),
     94        );
     95       
     96        // Le champ id_parent sur spip_organisations pour définir des hiérarchies d'organisations.
     97        $maj['1.3.5'] = array(
     98                array('sql_alter', "TABLE spip_organisations ADD COLUMN id_parent bigint(21) DEFAULT 0 NOT NULL"),
     99        );
     100       
     101        // Le champ type_liaison sur spip_organisations_contacts pour définir des types de liaisons donc.
     102        $maj['1.3.6'] = array(
     103                array('sql_alter', "TABLE spip_organisations_contacts ADD COLUMN type_liaison tinytext NOT NULL DEFAULT ''"),
     104        );
     105       
     106        // On crée la table spip_organisations_liens
     107        // Le champ type_liaison sur spip_organisations_contacts pour définir des types de liaisons donc.
     108        $maj['1.3.7'] = array(
     109                array('maj_tables', 'spip_organisations_liens'),
     110        );
     111       
     112        // Coquille sur la clé de spip_organisations_liens
     113        $maj['1.4.1'] = array(
     114                array('sql_alter', 'TABLE spip_organisations DROP INDEX id_contact'),
     115                array('sql_alter', 'TABLE spip_organisations ADD INDEX (id_organisation)'),
     116        );
     117       
     118        // Rajout d'un type_liaison dans les liens
     119        $maj['1.4.2'] = array(
     120                array('maj_tables', array('spip_contacts_liens', 'spip_organisations_liens')),
     121        array('sql_alter', 'TABLE `spip_organisations_liens` DROP PRIMARY KEY'),
     122        array('sql_alter', 'TABLE `spip_organisations_liens` ADD PRIMARY KEY ( `id_organisation` , `id_objet` , `objet`, `type_liaison`(25)) '),
     123        array('sql_alter', 'TABLE `spip_contacts_liens` DROP PRIMARY KEY'),
     124        array('sql_alter', 'TABLE `spip_contacts_liens` ADD PRIMARY KEY ( `id_contact` , `id_objet` , `objet`, `type_liaison`(25)) '),
     125        );
     126       
    204127        /*
    205128        Il s'agissait de supprimer spip_organisations_contacts
    206129        pour le mettre dans spip_organisations_liens...
    207         ce qui s'est avere tres bugge un spip 2.1...
    208         la version 1.6.0 fait l'inverse de 1.5.0 du coup, pour remettre dans l'ordre
    209 
    210         if (version_compare($current_version,"1.5.0","<")){
    211                 $contacts = sql_allfetsel(array('id_contact', 'id_organisation','type_liaison'), 'spip_organisations_contacts', 'id_contact > 0');
    212                 if ($contacts) {
    213                         $inserts = array();
    214                         foreach ($contacts as $r) {
    215                                 // possibilité d'erreur sql si la ligne est déjà là.
    216                                 // rien de dramatique
    217                                 $inserts[] = array(
    218                                         'id_organisation' => $r['id_organisation'],
    219                                         'id_objet' => $r['id_contact'],
    220                                         'objet' => 'contact',
    221                     'type_liaison' => $r['type_liaison'],
    222                                 );
    223                         }
    224                         if ($inserts) {
    225                                 sql_insertq_multi('spip_organisations_liens', $inserts);
    226                         }
    227                 }
    228                 sql_drop_table('spip_organisations_contacts');
    229 
    230                 ecrire_meta($nom_meta_base_version, $current_version="1.5.0");
    231         }
     130        ce qui s'est avéré très bugué en spip 2.1...
     131        La version 1.6.0 fait l'inverse de 1.5.0 du coup, pour remettre dans l'ordre
    232132        */
    233 
    234         if (version_compare($current_version,"1.6.0","<")) {
    235                 include_spip('base/create');
    236                 // remettre spip_organisations_contacts si besoin
    237                 creer_base();
    238                 // repeupler
    239                 $contacts = sql_allfetsel(
    240                         array('id_objet AS id_contact', 'id_organisation', 'type_liaison'),
    241                         'spip_organisations_liens',
    242                         array('objet='.sql_quote('contact'), 'id_objet > 0'));
    243                 if ($contacts) {
    244                         $inserts = array();
    245                         foreach ($contacts as $r) {
    246                                 $inserts[] = array(
    247                                         'id_organisation' => $r['id_organisation'],
    248                                         'id_contact' => $r['id_contact'],
    249                     'type_liaison' => $r['type_liaison'],
    250                                 );
    251                         }
    252                         if ($inserts) {
    253                                 sql_insertq_multi('spip_organisations_contacts', $inserts);
    254                         }
    255                 }
    256 
    257                 // enlever les contacts de spip_organisations_liens
    258                 sql_delete('spip_organisations_liens', 'objet='.sql_quote('contact'));
    259 
    260                 ecrire_meta($nom_meta_base_version, $current_version="1.6.0");
    261         }
    262 
    263 
    264         if (version_compare($current_version,"1.7.1","<")) {
    265                 contacts_migrer_liens_auteurs();
    266                 ecrire_meta($nom_meta_base_version, $current_version="1.7.1");
    267         }
    268 }
    269 
     133        $maj['1.6.0'] = array(
     134                array('contacts_maj_1_6_0'),
     135        );
     136       
     137        $maj['1.7.1'] = array(
     138                array('contacts_migrer_liens_auteurs'),
     139        );
     140       
     141        include_spip('base/upgrade');
     142        maj_plugin($nom_meta_base_version, $version_cible, $maj);
     143}
    270144
    271145function contacts_vider_tables($nom_meta_base_version) {
     
    278152}
    279153
    280 
     154function contacts_maj_1_6_0(){
     155        // remettre spip_organisations_contacts si besoin
     156        creer_base();
     157       
     158        // repeupler
     159        $contacts = sql_allfetsel(
     160                array('id_objet AS id_contact', 'id_organisation', 'type_liaison'),
     161                'spip_organisations_liens',
     162                array('objet='.sql_quote('contact'), 'id_objet > 0')
     163        );
     164        if ($contacts) {
     165                $inserts = array();
     166                foreach ($contacts as $r) {
     167                        $inserts[] = array(
     168                                'id_organisation' => $r['id_organisation'],
     169                                'id_contact' => $r['id_contact'],
     170                'type_liaison' => $r['type_liaison'],
     171                        );
     172                }
     173                if ($inserts) {
     174                        sql_insertq_multi('spip_organisations_contacts', $inserts);
     175                }
     176        }
     177
     178        // enlever les contacts de spip_organisations_liens
     179        sql_delete('spip_organisations_liens', 'objet='.sql_quote('contact'));
     180}
    281181
    282182function contacts_migrer_liens_auteurs() {
Note: See TracChangeset for help on using the changeset viewer.