Changeset 74555 in spip-zone


Ignore:
Timestamp:
Aug 3, 2013, 3:34:10 PM (6 years ago)
Author:
marcimat@…
Message:

Option supplémentaire dans C&O pour les relations entre auteurs et contacts. Il peut être demandé maintenant que si un auteur est mis à la poubelle, sa fiche contact (ou organisation) associée soit supprimée (par cron, après la suppression effective de l'auteur en base).
Inversement, lorsqu'un contact (ou organisation) est supprimée, si l'option est activée, l'auteur associé est alors mis à la poubelle.

Location:
_plugins_/contacts_et_organisations/trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/contacts_et_organisations/trunk/action/supprimer_contact.php

    r69828 r74555  
    5151function action_supprimer_contact_post($id_contact) {
    5252        $id_contact = intval($id_contact);
     53
     54        // supprimer l'auteur associé si demandé dans la configuration
     55        include_spip('inc/config');
     56        if (lire_config('contacts_et_organisations/supprimer_reciproquement_auteurs_et_contacts')) {
     57                $id_auteur = sql_getfetsel("id_auteur", "spip_contacts", "id_contact=" . sql_quote($id_contact));
     58                if ($id_auteur) {
     59                        include_spip('action/editer_objet');
     60                        autoriser_exception('modifier', 'auteur', $id_auteur);
     61                        objet_modifier('auteur', $id_auteur, array("statut" => "5poubelle"));
     62                        autoriser_exception('modifier', 'auteur', $id_auteur, false);
     63                }
     64        }
     65
    5366        sql_delete("spip_contacts_liens", "id_contact=" . sql_quote($id_contact));
    5467        sql_delete("spip_contacts", "id_contact=" . sql_quote($id_contact));
    5568        sql_delete("spip_organisations_contacts", "id_contact=" . sql_quote($id_contact));
    56        
     69
    5770        include_spip('inc/invalideur');
    5871        suivre_invalideur("id='id_contact/$id_contact'");
     
    6780function action_supprimer_organisation_post($id_organisation) {
    6881        $id_organisation = intval($id_organisation);
     82
     83        // supprimer l'auteur associé si demandé dans la configuration
     84        include_spip('inc/config');
     85        if (lire_config('contacts_et_organisations/supprimer_reciproquement_auteurs_et_contacts')) {
     86                $id_auteur = sql_getfetsel("id_auteur", "spip_organisations", "id_organisation=" . sql_quote($id_organisation));
     87                if ($id_auteur) {
     88                        include_spip('action/editer_objet');
     89                        autoriser_exception('modifier', 'auteur', $id_auteur);
     90                        objet_modifier('auteur', $id_auteur, array("statut" => "5poubelle"));
     91                        autoriser_exception('modifier', 'auteur', $id_auteur, false);
     92                }
     93        }
     94
    6995        sql_delete("spip_organisations_liens", "id_organisation=" . sql_quote($id_organisation));
    7096        sql_delete("spip_organisations", "id_organisation=" . sql_quote($id_organisation));
    7197        sql_delete("spip_organisations_contacts", "id_organisation=" . sql_quote($id_organisation));
    72        
     98
    7399        include_spip('inc/invalideur');
    74100        suivre_invalideur("id='id_organisation/$id_organisation'");
  • _plugins_/contacts_et_organisations/trunk/contacts_pipelines.php

    r70271 r74555  
    146146}
    147147
     148
     149
     150
     151/**
     152 * Optimiser la base (suppression des contacts et organisations dont les auteurs liés ont disparu)
     153 *
     154 * Si la configuration du plugin indique que la suppression d'un auteur entraîne la suppression
     155 * de la fiche de contact, alors on supprime effectivement ce contact.
     156 *
     157 * @param array $flux
     158 * @return array
     159 */
     160function contacts_optimiser_base_disparus($flux){
     161
     162        // supprimer un contact associé à un auteur disparu si demandé dans la configuration
     163        include_spip('inc/config');
     164        if (lire_config('contacts_et_organisations/supprimer_reciproquement_auteurs_et_contacts')) {
     165                $n = 0;
     166
     167                # supprimer les contacts dont les auteurs ont disparu
     168                $res = sql_select(
     169                        "contacts.id_contact",
     170                        "spip_contacts AS contacts
     171                                LEFT JOIN spip_auteurs AS auteurs
     172                                ON contacts.id_auteur=auteurs.id_auteur",
     173                        array(
     174                                "auteurs.id_auteur IS NULL",
     175                                "contacts.id_auteur > 0"
     176                        )
     177                );
     178
     179                while ($row = sql_fetch($res)) {
     180                        $id_contact = $row['id_contact'];
     181                        sql_delete("spip_contacts_liens", "id_contact=" . sql_quote($id_contact));
     182                        sql_delete("spip_contacts", "id_contact=" . sql_quote($id_contact));
     183                        sql_delete("spip_organisations_contacts", "id_contact=" . sql_quote($id_contact));
     184                        $n++;
     185                }
     186
     187                # supprimer les organisations dont les auteurs ont disparu
     188                $res = sql_select(
     189                        "organisations.id_organisation",
     190                        "spip_organisations AS organisations
     191                                LEFT JOIN spip_auteurs AS auteurs
     192                                ON organisations.id_auteur=auteurs.id_auteur",
     193                        array(
     194                                "auteurs.id_auteur IS NULL",
     195                                "organisations.id_auteur > 0"
     196                        )
     197                );
     198
     199                while ($row = sql_fetch($res)) {
     200                        $id_organisation = $row['id_organisation'];
     201                        sql_delete("spip_organisations_liens", "id_organisation=" . sql_quote($id_organisation));
     202                        sql_delete("spip_organisations", "id_organisation=" . sql_quote($id_organisation));
     203                        sql_delete("spip_organisations_contacts", "id_organisation=" . sql_quote($id_organisation));
     204                        $n++;
     205                }
     206
     207                $flux['data'] += $n;
     208        }
     209
     210        return $flux;
     211}
     212
    148213?>
  • _plugins_/contacts_et_organisations/trunk/formulaires/configurer_contacts_et_organisations.html

    r58288 r74555  
    1414                explication=<:contacts:cfg_lier_organisations_rubriques_explication:>})]
    1515
    16         [(#SAISIE{oui_non,associer_aux_auteurs,
    17                 label=<:contacts:cfg_associer_aux_auteurs:>,
    18                 explication=<:contacts:cfg_associer_aux_auteurs_explication:>})]
    19                
    20         [(#SAISIE{oui_non,afficher_infos_sur_auteurs,
    21                 label=<:contacts:cfg_afficher_infos_sur_auteurs:>,
    22                 explication=<:contacts:cfg_afficher_infos_sur_auteurs_explication:>})]
    23 
    24                
    2516        [(#SAISIE{oui_non,activer_squelettes_publics_zpip1,
    2617                label=<:contacts:cfg_activer_squelettes_publics_zpip1:>,
    2718                explication=<:contacts:cfg_activer_squelettes_publics_zpip1_explication:>})]
     19
     20        <li class='fieldset'>
     21                <fieldset>
     22                        <legend><:contacts:cfg_relations_avec_auteurs:></legend>
     23                        <ul>
     24                                [(#SAISIE{oui_non,associer_aux_auteurs,
     25                                        label=<:contacts:cfg_associer_aux_auteurs:>,
     26                                        explication=<:contacts:cfg_associer_aux_auteurs_explication:>})]
     27
     28                                [(#SAISIE{oui_non,afficher_infos_sur_auteurs,
     29                                        label=<:contacts:cfg_afficher_infos_sur_auteurs:>,
     30                                        explication=<:contacts:cfg_afficher_infos_sur_auteurs_explication:>})]
     31
     32                                [(#SAISIE{oui_non,supprimer_reciproquement_auteurs_et_contacts,
     33                                        label=<:contacts:cfg_supprimer_reciproquement_auteurs_et_contacts:>,
     34                                        explication=<:contacts:cfg_supprimer_reciproquement_auteurs_et_contacts_explication:>})]
     35                        </ul>
     36                </fieldset>
     37        </li>
     38
    2839</ul>
    2940
  • _plugins_/contacts_et_organisations/trunk/lang/contacts_fr.php

    r71900 r74555  
    77
    88        // A
    9         'aucun_contact' => 'Il n\'y a aucun contact !',
    10         'aucune_organisation' => 'Il n\'y a aucune organisation !',
     9        'aucun_contact' => 'Il n\'y a aucun contact !',
     10        'aucune_organisation' => 'Il n\'y a aucune organisation !',
    1111        'auteur_lie' => 'Id de l\'auteur lié',
     12        'auteur_associe_est_a_la_poubelle' => 'L\'auteur associé est à la poubelle ! Cet auteur sera effacé dans quelques jours.',
     13        'auteur_associe_inexistant' => 'L\'auteur associé est inexistant ! L\'auteur avait du être mis à la poubelle et a été supprimé.',
    1214
    1315        // B
     
    2123        'cfg_activer_squelettes_publics_zpip1' => 'Squelettes publics ZPIP v1',
    2224        'cfg_activer_squelettes_publics_zpip1_explication' => 'Activer les squelettes publics pour ZPIP en version 1,
    23                 permettant le parcourir les contacts et organisations dans l\'espace public ?',
    24         'cfg_afficher_infos_sur_auteurs' => 'Affichage détaillé des auteurs ?',
     25                permettant le parcourir les contacts et organisations dans l\'espace public ?',
     26        'cfg_afficher_infos_sur_auteurs' => 'Affichage détaillé des auteurs ?',
    2527        'cfg_afficher_infos_sur_auteurs_explication' => 'Afficher les infos de contact ou d\'organisation
    26                 également sur les pages auteurs dans l\'espace privé ?',
    27         'cfg_associer_aux_auteurs' => 'Associer aux auteurs ?',
     28                également sur les pages auteurs dans l\'espace privé ?',
     29        'cfg_associer_aux_auteurs' => 'Associer aux auteurs ?',
    2830        'cfg_associer_aux_auteurs_explication' => 'Permettre d\'associer des contacts ou organisations
    2931                aux auteurs. Cela ajoute un formulaire pour associer un auteur sur les pages contact ou organisation,
    3032                et inversement cela ajoute un formulaire pour lier un contact ou une organisation sur les pages des auteurs.',
    3133        'cfg_lier_organisations_rubriques' => 'Lier aux rubriques',
    32         'cfg_lier_organisations_rubriques_explication' => 'Permettre de lier les organisations aux rubriques ?
     34        'cfg_lier_organisations_rubriques_explication' => 'Permettre de lier les organisations aux rubriques ?
    3335                Cela affiche le sélecteur d\'organisations sur les rubriques ainsi que le sélecteur de rubriques sur les organisations.',
     36        'cfg_relations_avec_auteurs' => 'Relation avec les auteurs',
     37        'cfg_supprimer_reciproquement_auteurs_et_contacts' => 'Supprimer réciproquement les auteurs et contacts ?',
     38        'cfg_supprimer_reciproquement_auteurs_et_contacts_explication' => 'Avec cette option active, lorsqu\'un contact
     39                (ou une organisation) est supprimé, l\'auteur associé à ce contact, s\'il en existe un, voit son statut
     40                passer à la poubelle. De la même manière, inversement, si un auteur est mis à la poubelle,
     41                le contact éventuel associé est supprimé. Cette option peut être pratique sur certains sites
     42                afin d\'éviter des contacts orphelins de leur auteur (si celui-ci a été supprimé) mais soyez vigilents :
     43                une suppression est définitive et les auteurs passent à la poubelle même s\'ils ont écrit des articles…',
    3444        'changer' => 'Changer',
    3545        'chercher_contact' => 'Chercher',
    3646        'chercher_organisation' => 'Chercher',
    3747        'chercher_statut' => 'Statut',
    38         'confirmer_delier_contact' => 'Êtes-vous sûr de vouloir délier cette organisation de ce contact ?',
    39         'confirmer_delier_organisation' => 'Êtes-vous sûr de vouloir délier ce contact de cette organisation ?',
    40         'confirmer_delier_organisation_rubrique' => 'Êtes-vous sûr de vouloir délier cette organisation de cette rubrique ?',
     48        'confirmer_delier_contact' => 'Êtes-vous sûr de vouloir délier cette organisation de ce contact ?',
     49        'confirmer_delier_organisation' => 'Êtes-vous sûr de vouloir délier ce contact de cette organisation ?',
     50        'confirmer_delier_organisation_rubrique' => 'Êtes-vous sûr de vouloir délier cette organisation de cette rubrique ?',
    4151        'confirmer_supprimer_contact' => 'Êtes-vous sûr de vouloir supprimer
    42                 les informations relatives à ce contact ?',
     52                les informations relatives à ce contact ?',
    4353        'confirmer_supprimer_organisation' => 'Êtes-vous sûr de vouloir supprimer
    44                 les informations relatives à cette organisation ?',
     54                les informations relatives à cette organisation ?',
    4555        'contact' => 'Contact',
    4656        'contact_ajouter' => 'Ajouter un contact',
     
    168178        // S
    169179        'statut_juridique' => 'Statut juridique',
     180        'suppression_automatique_de_organisation_prochainement' => 'Sans intervention de votre part,
     181                la configuration actuelle du plugin Contacts & Organisations entraînera
     182                la suppression automatique de cette organisation dans les jours à venir.',
     183        'suppression_automatique_du_contact_prochainement' => 'Sans intervention de votre part,
     184                la configuration actuelle du plugin Contacts & Organisations entraînera
     185                la suppression automatique de ce contact dans les jours à venir.',
    170186        'supprimer_contact' => 'Supprimer ce contact',
    171187        'supprimer_organisation' => 'Supprimer cette organisation',
  • _plugins_/contacts_et_organisations/trunk/paquet.xml

    r74531 r74555  
    22        prefix="contacts"
    33        categorie="auteur"
    4         version="2.7.0"
     4        version="2.8.0"
    55        etat="test"
    66        compatibilite="[3.0.0-dev;3.0.*]"
     
    2424        <pipeline nom="declarer_tables_interfaces" inclure="base/contacts.php" />
    2525        <pipeline nom="declarer_tables_auxiliaires" inclure="base/contacts.php" />
    26         <pipeline nom="header_prive" inclure="contacts_pipelines.php" />
    2726        <pipeline nom="affiche_gauche" inclure="contacts_pipelines.php" />
    2827        <pipeline nom="insert_head_css" inclure="contacts_pipelines.php" />
    2928        <pipeline nom="afficher_contenu_objet" inclure="contacts_pipelines.php" />
    3029        <pipeline nom="affiche_hierarchie" inclure="contacts_pipelines.php" />
     30        <pipeline nom="optimiser_base_disparus" inclure="contacts_pipelines.php" />
    3131        <pipeline nom="autoriser" inclure="contacts_autoriser.php" />
    3232
  • _plugins_/contacts_et_organisations/trunk/prive/objets/infos/contact.html

    r58288 r74555  
    1414                [<a href="[(#ID_AUTEUR|generer_url_entite{auteur})]">(#LOGO_AUTEUR|image_reduire{40})</a>]
    1515                </div>
     16
    1617                [(#AUTORISER{modifier, contact, #ID_CONTACT})
    1718                <div class='delier'>
     
    2223                ]
    2324        </div>
     25
     26        [(#STATUT|=={5poubelle}|oui)
     27                <div class='notice'>
     28                        <p><:contacts:auteur_associe_est_a_la_poubelle:></p>
     29
     30                        [(#CONFIG{contacts_et_organisations/supprimer_reciproquement_auteurs_et_contacts}|oui)
     31                                <p><:contacts:suppression_automatique_du_contact_prochainement:></p>
     32                        ]
     33                </div>
     34        ]
     35
    2436        </BOUCLE_auteur_lie>
     37                [(#ID_AUTEUR|oui)
     38                        <div class='notice'>
     39                                <p><:contacts:auteur_associe_inexistant:></p>
     40
     41                                [(#CONFIG{contacts_et_organisations/supprimer_reciproquement_auteurs_et_contacts}|oui)
     42                                        <p><:contacts:suppression_automatique_du_contact_prochainement:></p>
     43                                ]
     44                        </div>
     45                ]
     46        <//B_auteur_lie>
    2547</BOUCLE_si_auteurs>
    2648
  • _plugins_/contacts_et_organisations/trunk/prive/objets/infos/organisation.html

    r58288 r74555  
    2525                ]
    2626        </div>
     27
     28        [(#STATUT|=={5poubelle}|oui)
     29                <div class='notice'>
     30                        <p><:contacts:auteur_associe_est_a_la_poubelle:></p>
     31
     32                        [(#CONFIG{contacts_et_organisations/supprimer_reciproquement_auteurs_et_contacts}|oui)
     33                                <p><:contacts:suppression_automatique_de_organisation_prochainement:></p>
     34                        ]
     35                </div>
     36        ]
     37
    2738        </BOUCLE_auteur_lie>
     39                [(#ID_AUTEUR|oui)
     40                        <div class='notice'>
     41                                <p><:contacts:auteur_associe_inexistant:></p>
     42
     43                                [(#CONFIG{contacts_et_organisations/supprimer_reciproquement_auteurs_et_contacts}|oui)
     44                                        <p><:contacts:suppression_automatique_de_organisation_prochainement:></p>
     45                                ]
     46                        </div>
     47                ]
     48        <//B_auteur_lie>
    2849</BOUCLE_si_auteurs>
    2950
Note: See TracChangeset for help on using the changeset viewer.