Changeset 51646 in spip-zone


Ignore:
Timestamp:
Sep 21, 2011, 10:47:45 AM (10 years ago)
Author:
marcimat@…
Message:

Une version fonctionnelle qui remet id_auteur sur spip_contacts et spip_organisations, facilitant boucles et jointures en SPIP 2.1, parce que, son déplacement dans les tables de lien créaient trop de problèmes.

Location:
_plugins_/contacts_et_organisations/branches/v1
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/contacts_et_organisations/branches/v1/action/creer_auteur_lie.php

    r47519 r51646  
    2828                                                "statut"        => "1comite"
    2929                                        ));
    30                                 sql_insertq("spip_contacts_liens", array(
    31                                                 "objet"      => "auteur",
    32                                                 "id_objet"   => $id_auteur,
    33                                                 "id_contact" => $arg[1],
     30                                sql_updateq("spip_contacts",
     31                                                array("id_auteur" => $id_auteur),
     32                                                "id_contact =" . $arg[1],
    3433                                        ));
    3534                                break;
    3635
    3736                        case 'organisation':
    38                                 /*
    39                                 // Code pour quand on aura une liaison externe auteur/organisation
    40                                 $organisation = sql_getfetsel("nom", "spip_organisations", "id_organisation=$arg[1]");
    41                                 $nom = ltrim($organisation);
    42                                 $id_auteur = sql_insertq("spip_auteurs", array (
    43                                                 "nom"                           =>  $nom,
    44                                                 "statut"                        => "1comite"
    45                                         ));
    46                                 sql_insertq("spip_organisations_liens", array(
    47                                                 "objet"                 => "auteur",
    48                                                 "id_objet"              => $id_auteur,
    49                                                 "id_organisation"       => $arg[1],
    50                                         ));
    51                                 break;
    52                                 */
    5337                               
    5438                                // Code pour le cas present ou le id_auteur est dans la table organisations...
  • _plugins_/contacts_et_organisations/branches/v1/action/definir_contact.php

    r50185 r51646  
    4444
    4545        $champs = array(
    46                 'nom' => $nom
     46                'nom' => $nom,
     47                'id_auteur' => $id_auteur
    4748        );
    4849       
     
    5657
    5758        $id_contact = sql_insertq("spip_contacts", $champs);
    58         sql_insertq('spip_contacts_liens',array('id_objet' => $id_auteur,'objet' => 'auteur',"id_contact"=>$id_contact));
    5959        return $id_contact;
    6060}
     
    6666
    6767        $champs = array(
    68                 'nom' => $nom
     68                'nom' => $nom,
     69                'id_auteur' => $id_auteur
    6970        );
    7071       
     
    7879
    7980        $id_organisation = sql_insertq("spip_organisations", $champs);
    80         sql_insertq('spip_organisations_liens',array('id_objet' => $id_auteur,'objet' => 'auteur',"id_organisation"=>$id_organisation));
    8181        return $id_organisation;
    8282}
  • _plugins_/contacts_et_organisations/branches/v1/action/lier_contact_auteur.php

    r49979 r51646  
    3030        $id_contact = intval($id_contact);
    3131        if ($id_contact) {
    32                 if (!$id_auteur) {
    33                         sql_delete('spip_contacts_liens', array(
    34                                 'id_contact=' . $id_contact,
    35                                 'objet=' . sql_quote('auteur')));
    36                 } else {
    37                         sql_insertq("spip_contacts_liens", array(
    38                                 "objet"      => "auteur",
    39                                 "id_objet"   => $id_auteur,
    40                                 "id_contact" => $id_contact,
    41                         ));
    42                 }
    43 
     32                sql_updateq('spip_contacts', array('id_auteur' => $id_auteur), 'id_contact=' . $id_contact);
     33       
    4434                include_spip('inc/invalideur');
    45                 suivre_invalideur("id='id_organisation/$id_organisation'");
     35                suivre_invalideur("id='id_contact/$id_contact'");
    4636        }
    4737}
  • _plugins_/contacts_et_organisations/branches/v1/action/lier_organisation_auteur.php

    r49979 r51646  
    3030        $id_organisation = intval($id_organisation);
    3131        if ($id_organisation) {
    32                 if (!$id_auteur) {
    33                         sql_delete('spip_organisations_liens', array(
    34                                 'id_organisation=' . $id_organisation,
    35                                 'objet=' . sql_quote('auteur')));
    36                 } else {
    37                         sql_insertq("spip_organisations_liens", array(
    38                                 "objet"      => "auteur",
    39                                 "id_objet"   => $id_auteur,
    40                                 "id_organisation" => $id_organisation,
    41                         ));
    42                 }
     32                sql_updateq('spip_organisations', array('id_auteur' => $id_auteur), 'id_organisation=' . $id_organisation);
    4333
    4434                include_spip('inc/invalideur');
  • _plugins_/contacts_et_organisations/branches/v1/base/contacts.php

    r50633 r51646  
    1414       
    1515        // -- Liaisons organisations/auteurs, contacts/auteurs et organisations/contacts
     16        $interface['tables_jointures']['spip_contacts'][]= 'auteurs';
    1617        $interface['tables_jointures']['spip_contacts'][]= 'contacts_liens';
    17         $interface['tables_jointures']['spip_auteurs'][]= 'contacts_liens';
     18        $interface['tables_jointures']['spip_auteurs'][] = 'contacts';
     19        $interface['tables_jointures']['spip_organisations'][] = 'auteurs';
    1820        $interface['tables_jointures']['spip_organisations'][] = 'organisations_liens';
    19         $interface['tables_jointures']['spip_auteurs'][]= 'organisations_liens';
     21        $interface['tables_jointures']['spip_auteurs'][] = 'organisations';
    2022        $interface['tables_jointures']['spip_organisations_contacts'][]= 'contacts';
    2123        $interface['tables_jointures']['spip_organisations_contacts'][]= 'organisations';
     
    5153                "id_organisation"       => "bigint(21) NOT NULL auto_increment",
    5254                "id_parent"                     => "bigint(21) NOT NULL default 0",
     55                "id_auteur"             => "bigint(21) NOT NULL default 0",
    5356                "nom"                           => "tinytext DEFAULT '' NOT NULL",
    5457        "statut_juridique"      => "tinytext DEFAULT '' NOT NULL", // forme juridique : SA, SARL, association, etc.
     
    6063                );
    6164        $organisations_key = array(
    62                 "PRIMARY KEY"           => "id_organisation"
     65                "PRIMARY KEY"           => "id_organisation",
     66                "KEY id_auteur"         => "id_auteur",
    6367                );
    64 /*      $organisations_join = array(
     68        $organisations_join = array(
    6569                // sinon (ORGANISATIONS){auteurs.statut = xxx} ne fonctionne pas...
    6670                // va comprendre...
    67                 "id_organisation"       => "id_organisation"
    68         );*/
     71                "id_organisation"       => "id_organisation",
     72                "id_auteur"     => "id_auteur"
     73        );
    6974        $tables_principales['spip_organisations'] =
    70                 array('field' => &$organisations, 'key' => &$organisations_key,/* 'join' => &$organisations_join*/);
     75                array('field' => &$organisations, 'key' => &$organisations_key, 'join' => &$organisations_join);
    7176
    7277        //-- Table contacts ------------------------------------------
    7378        $contacts = array(
    74                 "id_contact"    => "bigint(21) NOT NULL auto_increment",
     79                "id_contact"    => "bigint(21) NOT NULL auto_increment",
     80                "id_auteur"     => "bigint(21) NOT NULL default 0",
    7581                "civilite"              => "tinytext DEFAULT '' NOT NULL",
    7682                "nom"                   => "tinytext DEFAULT '' NOT NULL",
     
    8389        $contacts_key = array(
    8490                "PRIMARY KEY"   => "id_contact",
     91                "KEY id_auteur" => "id_auteur",
    8592                );
    86 /*      $contacts_join = array(
    87                 "id_contact" => "id_contact"
    88         );*/
     93        $contacts_join = array(
     94                "id_contact" => "id_contact",
     95                "id_auteur"  => "id_auteur"
     96        );
    8997        $tables_principales['spip_contacts'] =
    90                 array('field' => &$contacts, 'key' => &$contacts_key, /*'join' => &$contacts_join*/);
     98                array('field' => &$contacts, 'key' => &$contacts_key, 'join' => &$contacts_join);
    9199
    92100        return $tables_principales;
  • _plugins_/contacts_et_organisations/branches/v1/base/contacts_upgrade.php

    r51638 r51646  
    9595        }
    9696
    97         if (version_compare($current_version,"1.3.2","<")){
     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","<")){
    98101                maj_tables('spip_contacts_liens');
    99                 $res = sql_select(array("id_auteur","id_contact"),"spip_contacts");
    100                 while ($row = sql_fetch($res)) {
    101                     sql_insertq(
    102                         'spip_contacts_liens',
    103                 array(
    104                     "id_objet" => $row['id_auteur'],
    105                     "objet" => "auteur",
    106                     "id_contact" => $row['id_contact']
    107                 )
    108                     );
    109                 }
    110 
    111                 if (!sql_alter("TABLE spip_contacts DROP id_auteur")) {
    112                         spip_log('Probleme lors de la modif de la table spip_contacts','contacts');
    113                 } else {
    114                         spip_log('Table spip_contacts correctement passsée en version 1.3.2','contacts');
    115                 }
    116 
    117                
    118                 spip_log('Tables correctement passsées en version 1.3.2','contacts');
     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');
    119120                ecrire_meta($nom_meta_base_version, $current_version="1.3.2");
    120     }
     121        }
     122*/     
    121123
    122124        // le champ descriptif ne changeait pas sur les nouvelles installations (c'etait encore declare tinytext
     
    154156                ecrire_meta($nom_meta_base_version, $current_version="1.3.7");
    155157        }
    156        
     158
     159/*     
    157160        // on utilise la table spip_organisations_liens
    158161        // pour stocker le id_auteur de spip_organisations
     
    160163                $auteurs = sql_allfetsel(array('id_auteur', 'id_organisation'), 'spip_organisations', 'id_auteur > 0');
    161164                if ($auteurs) {
     165                        $inserts = array();
    162166                        foreach ($auteurs as $r) {
    163167                                // possibilité d'erreur sql si la ligne est déjà là.
    164168                                // rien de dramatique
    165                                 sql_insertq('spip_organisations_liens', array(
     169                                $inserts = array(
    166170                                        'id_organisation' => $r['id_organisation'],
    167171                                        'id_objet' => $r['id_auteur'],
    168172                                        'objet' => 'auteur',
    169                                 ));
     173                                );
     174                        }
     175                        if ($inserts) {
     176                                sql_insertq_multi('spip_organisations_liens', $inserts);
    170177                        }
    171178                }
     
    174181                ecrire_meta($nom_meta_base_version, $current_version="1.4.0");
    175182        }
     183*/
    176184
    177185        // coquille sur la clé de spip_organisations_liens
     
    185193        // rajout d'un type_liaison dans les liens
    186194        if (version_compare($current_version,"1.4.2","<")){
    187                 maj_tables('spip_contacts_liens');
    188                 maj_tables('spip_organisations_liens');
     195                maj_tables(array('spip_contacts_liens', 'spip_organisations_liens'));
    189196        sql_alter('TABLE `spip_organisations_liens` DROP PRIMARY KEY');
    190197        sql_alter('TABLE `spip_organisations_liens` ADD PRIMARY KEY ( `id_organisation` , `id_objet` , `objet`, `type_liaison`(25)) ');
     
    204211                $contacts = sql_allfetsel(array('id_contact', 'id_organisation','type_liaison'), 'spip_organisations_contacts', 'id_contact > 0');
    205212                if ($contacts) {
     213                        $inserts = array();
    206214                        foreach ($contacts as $r) {
    207215                                // possibilité d'erreur sql si la ligne est déjà là.
    208216                                // rien de dramatique
    209                                 sql_insertq('spip_organisations_liens', array(
     217                                $inserts[] = array(
    210218                                        'id_organisation' => $r['id_organisation'],
    211219                                        'id_objet' => $r['id_contact'],
    212220                                        'objet' => 'contact',
    213221                    'type_liaison' => $r['type_liaison'],
    214                                 ));
     222                                );
     223                        }
     224                        if ($inserts) {
     225                                sql_insertq_multi('spip_organisations_liens', $inserts);
    215226                        }
    216227                }
     
    249260                ecrire_meta($nom_meta_base_version, $current_version="1.6.0");
    250261        }
     262
     263
     264        if (version_compare($current_version,"1.7.0","<")) {
     265                contacts_migrer_liens_auteurs();
     266                ecrire_meta($nom_meta_base_version, $current_version="1.7.0");
     267        }
    251268}
    252269
     
    261278}
    262279
     280
     281
     282function contacts_migrer_liens_auteurs() {
     283        // remettre id_auteur sur spip_contacts et spip_organisations
     284        include_spip('base/create');
     285        maj_tables(array('spip_contacts', 'spip_organisations'));
     286        sql_alter('TABLE spip_contacts ADD INDEX (id_auteur)');
     287        sql_alter('TABLE spip_organisations ADD INDEX (id_auteur)');
     288
     289        // pour chaque table, remettre les petits auteurs dans les tables
     290        foreach (array('spip_contacts', 'spip_organisations') as $table) {
     291                $_id = id_table_objet($table);
     292                $auteurs = sql_allfetsel(
     293                        array($_id, 'id_objet AS id_auteur'),
     294                        $table . '_liens',
     295                        array('objet='.sql_quote('auteur'), 'id_objet > 0'));
     296                if ($auteurs) {
     297                        // on supprime 1 par 1 en cas de timeout
     298                        foreach ($auteurs as $r) {
     299                                sql_updateq($table, array('id_auteur' => $r['id_auteur']), $_id . '=' . $r[$_id]);
     300                                sql_delete($table . '_liens',
     301                                        array('objet='.sql_quote('auteur'), 'id_objet=' . $r['id_auteur'], $_id . '=' . $r[$_id]));
     302                        }
     303                        $auteurs = sql_allfetsel(
     304                                array($_id, 'id_objet AS id_auteur'),
     305                                $table . '_liens',
     306                                array('objet='.sql_quote('auteur'), 'id_objet > 0'));
     307                        if (!$auteurs) {
     308                                // enlever eventuellement des id_auteur = 0 ?
     309                                sql_delete($table . '_liens', 'objet='.sql_quote('auteur'));
     310                        }
     311                }
     312        }
     313}
     314
    263315?>
  • _plugins_/contacts_et_organisations/branches/v1/contacts_pipelines.php

    r50265 r51646  
    3434{
    3535        if ($flux["args"]["type"] == "auteur") {
    36        
    3736                $id = $flux["args"]["id_objet"];
    3837                $id_contact = sql_getfetsel('id_contact', 'spip_contacts_liens', array('objet=' . sql_quote('auteur'), 'id_objet=' . intval($id)));
     
    117116
    118117                $id = $flux["args"]["id_auteur"];
    119                 $id_contact = sql_getfetsel('id_contact', 'spip_contacts_liens', array('objet=' . sql_quote('auteur'), 'id_objet=' . intval($id)));
    120                 $id_organisation = sql_getfetsel('id_organisation', 'spip_organisations_liens', array('objet=' . sql_quote('auteur'), 'id_objet=' . intval($id)));
     118                $id_contact = sql_getfetsel('id_contact', 'spip_contacts', 'id_auteur=' . intval($id));
     119                $id_organisation = sql_getfetsel('id_organisation', 'spip_organisations', 'id_auteur=' . intval($id));
    121120
    122121                if ($id_contact || $id_organisation)
     
    140139                        else if ($id_organisation)
    141140                        {
     141                               
    142142                                // bouton "Créer un contact"
    143143                                if ( autoriser('creer', 'contact') )
     
    185185        {
    186186                $id = $flux["args"]["id_auteur"];
    187                 $id_contact = sql_getfetsel('id_contact', 'spip_contacts_liens', array('objet=' . sql_quote('auteur'), 'id_objet=' . intval($id)));
    188                 $id_organisation = sql_getfetsel('id_organisation', 'spip_organisations_liens', array('objet=' . sql_quote('auteur'), 'id_objet=' . intval($id)));
     187                $id_contact = sql_getfetsel('id_contact', 'spip_contacts', 'id_auteur=' . intval($id));
     188                $id_organisation = sql_getfetsel('id_organisation', 'spip_organisations', 'id_auteur=' . intval($id));
    189189
    190190                if ( $id_contact || $id_organisation )
     
    225225                                        $ajout = icone_inline($texte, $lien, $fond, '', 'right') . '<br class="nettoyeur">'. $ajout ;
    226226                                }
    227        
     227
    228228                        }
    229229
  • _plugins_/contacts_et_organisations/branches/v1/formulaires/recherche_contacts.html

    r50617 r51646  
    1919</div>
    2020
     21
    2122[(#INCLURE{fond=prive/liste/contacts, env, ajax})]
  • _plugins_/contacts_et_organisations/branches/v1/formulaires/recherche_organisations.html

    r45949 r51646  
    1919</div>
    2020
    21 [(#INCLURE{fond=prive/liste/organisations, env, sinon=<:contacts:aucune_organisation:>})]
     21[(#INCLURE{fond=prive/liste/organisations, env, ajax, sinon=<:contacts:aucune_organisation:>})]
  • _plugins_/contacts_et_organisations/branches/v1/plugin.xml

    r51638 r51646  
    2727        <prefix>contacts</prefix>
    2828       
    29         <version>1.11.0</version>
    30         <version_base>1.6.0</version_base>
     29        <version>1.12.0</version>
     30        <version_base>1.7.0</version_base>
    3131       
    3232        <install>base/contacts_upgrade.php</install>
  • _plugins_/contacts_et_organisations/branches/v1/prive/liste/contacts.html

    r48835 r51646  
    2020        <BOUCLE_liste_contacts(CONTACTS)
    2121                {id_organisation?}{recherche ?}
    22                 {auteurs.statut == #ENV{statut,.*}}
     22                {auteurs.statut ?= #ENV{statut,''}}
    2323                {tri #ENV{order,nom},#GET{defaut_tri}}{pagination #ENV{nb,20}}>
    2424                <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
  • _plugins_/contacts_et_organisations/branches/v1/prive/liste/organisations.html

    r49979 r51646  
    2020        <BOUCLE_liste_orga(ORGANISATIONS)
    2121                {id_contact?}{id_auteur?}{id_parent ?= #ENV{id_parent}}
    22                 {recherche?}{auteurs.statut == #ENV{statut,.*}}
     22                {recherche?}{auteurs.statut ?= #ENV{statut,''}}
    2323                {tri #ENV{order,nom},#GET{defaut_tri}}{pagination #ENV{nb,20}}>
    2424                <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
Note: See TracChangeset for help on using the changeset viewer.