Changeset 44981 in spip-zone


Ignore:
Timestamp:
Feb 26, 2011, 11:49:14 PM (10 years ago)
Author:
cedric@…
Message:

Modernisation des petitions :

  • une petition est un objet a part entiere, avec sa cle primaire id_petition
  • id_article est un index unique
  • introduction d'un statut sur la petition : poubelle pour suppression de la petition, publie pour la petition active, off pour une petition fermée aux nouvelles signatures mais toujours visible. Il manque juste l'interface pour passer en off
  • spip_signatures reference la petition et non directement l'article, pour plus de coherence

+corrections de code consecutives, jointures...
Il faudra tester l'upgrade avec precaution sur de grosses petitions.

Location:
_core_/plugins/petitions
Files:
1 deleted
14 edited
1 copied

Legend:

Unmodified
Added
Removed
  • _core_/plugins/petitions/action/confirmer_signature.php

    r43415 r44981  
    8080
    8181        $id_signature = $row['id_signature'];
    82         $id_article = $row['id_article'];
     82        $id_petition = $row['id_petition'];
    8383        $adresse_email = $row['ad_email'];
    8484        $url_site = $row['url_site'];
    8585
    86         $row = sql_fetsel('email_unique, site_unique', 'spip_petitions', "id_article=$id_article");
     86        $row = sql_fetsel('email_unique, site_unique, id_article', 'spip_petitions', "id_petition=".intval($id_petition));
    8787
    8888        $email_unique = $row['email_unique']  == "oui";
    8989        $site_unique = $row['site_unique']  == "oui";
     90        $id_article = $row['id_article'];
    9091
    9192        include_spip('action/editer_signature');
     
    9394
    9495        if ($email_unique) {
    95                 $r = "id_article=$id_article AND ad_email=" . sql_quote($adresse_email);
     96                $r = "id_petition=".intval($id_petition)." AND ad_email=" . sql_quote($adresse_email);
    9697                if (signature_entrop($r))
    9798                          $confirm =  _T('form_pet_deja_signe');
     
    99100
    100101        if ($site_unique) {
    101                 $r = "id_article=$id_article AND url_site=" . sql_quote($url_site);
     102                $r = "id_petition=".intval($id_petition)." AND url_site=" . sql_quote($url_site);
    102103                if (signature_entrop($r))
    103104                        $confirm = _T('form_pet_site_deja_enregistre');
  • _core_/plugins/petitions/action/editer_petition.php

    r44969 r44981  
    1313if (!defined("_ECRIRE_INC_VERSION")) return;
    1414
    15 // http://doc.spip.org/@action_editer_signature_dist
    16 function action_editer_signature_dist($arg=null) {
     15function action_editer_petition_dist($arg=null) {
    1716
    1817        if (is_null($arg)){
     
    2120        }
    2221
    23         // si id_signature n'est pas un nombre, c'est une creation
     22        // si id_petition n'est pas un nombre, c'est une creation
    2423        // mais on verifie qu'on a toutes les donnees qu'il faut.
    25         if (!$id_signature = intval($arg)) {
     24        if (!$id_petition = intval($arg)) {
    2625                $id_article = _request('id_article');
    2726                if (!($id_article)) {
     
    2928                        redirige_url_ecrire();
    3029                }
    31                 $id_signature = insert_signature($id_article);
     30                $id_petition = insert_petition($id_article);
    3231        }
    3332
    3433        // Enregistre l'envoi dans la BD
    35         if ($id_signature > 0)
    36                 $err = signatures_set($id_signature);
     34        if ($id_petition > 0)
     35                $err = petitions_set($id_petition);
    3736
    3837        if (_request('redirect')) {
    3938                $redirect = parametre_url(urldecode(_request('redirect')),
    40                         'id_signature', $id_signature, '&') . $err;
     39                        'id_petition', $id_petition, '&') . $err;
    4140       
    4241                include_spip('inc/headers');
     
    4443        }
    4544        else
    46                 return array($id_signature,$err);
     45                return array($id_petition,$err);
    4746}
    4847
    4948/**
    50  * Mettre a jour une signature existante
     49 * Mettre a jour une petition existante
    5150 *
    52  * @param int $id_signature
     51 * @param int $id_petition
    5352 * @param array $set
    5453 * @return string
    5554 */
    56 function signature_set($id_signature, $set=null) {
     55function petition_set($id_petition, $set=null) {
    5756        $err = '';
    5857
     
    6160                $c = $set;
    6261                unset($c['id_article']);
    63                 unset($c['statut']);
    64                 unset($c['date_time']);
    6562        }
    6663        else {
    6764                foreach (array(
    68                         "nom_email","ad_email",
    69                         "nom_site","url_site","message","statut"
     65                        "email_unique","site_obli",
     66                        "site_unique","message","texte"
    7067                ) as $champ)
    7168                        $c[$champ] = _request($champ,$set);
     
    7370
    7471        include_spip('inc/modifier');
    75         revision_signature($id_signature, $c);
    76 
    77         // Modification de statut, changement de rubrique ?
     72        revision_petition($id_petition, $c);
     73
     74        // changement d'article ou de statut ?
    7875        $c = array();
    7976        foreach (array(
    80                 "date_time", 'statut', 'id_article'
     77                'statut',
     78                'id_article'
    8179        ) as $champ)
    8280                $c[$champ] = _request($champ,$set);
    83         $err .= instituer_signature($id_signature, $c);
     81        $err .= instituer_petition($id_petition, $c);
    8482
    8583        return $err;
     
    8785
    8886/**
    89  * Inserer une signature en base
     87 * Inserer une petition en base
    9088 * @param <type> $id_article
    9189 * @return <type>
    9290 */
    93 function insert_signature($id_article) {
     91function insert_petition($id_article) {
    9492
    9593        // Si id_article vaut 0 ou n'est pas definie, echouer
     
    9997        $champs = array(
    10098                'id_article' => $id_article,
    101                 'statut' =>  'prepa',
    102                 'date_time' => date('Y-m-d H:i:s'));
     99        );
    103100
    104101        // Envoyer aux plugins
     
    106103                array(
    107104                        'args' => array(
    108                                 'table' => 'spip_signatures',
    109                         ),
    110                         'data' => $champs
    111                 )
    112         );
    113 
    114         $id_signature = sql_insertq("spip_signatures", $champs);
     105                                'table' => 'spip_petitions',
     106                        ),
     107                        'data' => $champs
     108                )
     109        );
     110
     111        $id_petition = sql_insertq("spip_petitions", $champs);
    115112
    116113        pipeline('post_insertion',
    117114                array(
    118115                        'args' => array(
    119                                 'table' => 'spip_signatures',
    120                                 'id_objet' => $id_signature
    121                         ),
    122                         'data' => $champs
    123                 )
    124         );
    125 
    126         return $id_signature;
    127 }
    128 
    129 
    130 // $c est un array ('statut', 'id_article' = changement d'article)
    131 // il n'est pas autoriser de deplacer une signature
    132 // http://doc.spip.org/@instituer_signature
    133 function instituer_signature($id_signature, $c, $calcul_rub=true) {
     116                                'table' => 'spip_petitions',
     117                                'id_objet' => $id_petition
     118                        ),
     119                        'data' => $champs
     120                )
     121        );
     122
     123        return $id_petition;
     124}
     125
     126
     127/**
     128 * $c est un array ('id_article' = changement d'article)
     129 * il n'est pas autoriser de deplacer une petition
     130 *
     131 * @param  $id_petition
     132 * @param  $c
     133 * @param bool $calcul_rub
     134 * @return string
     135 */
     136function instituer_petition($id_petition, $c) {
    134137
    135138        include_spip('inc/autoriser');
    136139        include_spip('inc/modifier');
    137140
    138         $row = sql_fetsel("statut, date_time, id_article", "spip_signatures", "id_signature=".intval($id_signature));
    139         $id_article= $row['id_article'];
     141        $row = sql_fetsel("id_article", "spip_petitions", "id_petition=".intval($id_petition));
    140142        $statut_ancien = $statut = $row['statut'];
    141         $date_ancienne = $date = $row['date_time'];
     143        #$date_ancienne = $date = $row['date_time'];
    142144        $champs = array();
    143145
    144         $d = isset($c['date_time'])?$c['date_time']:null;
    145146        $s = isset($c['statut'])?$c['statut']:$statut;
    146147
    147         // cf autorisations dans inc/instituer_signature
    148         if ($s != $statut OR ($d AND $d != $date)) {
     148        // cf autorisations dans inc/instituer_petition
     149        if ($s != $statut /*OR ($d AND $d != $date)*/) {
    149150                $statut = $champs['statut'] = $s;
    150151
    151152                // En cas de publication, fixer la date a "maintenant"
    152153                // sauf si $c commande autre chose
    153                 // ou si l'signature est deja date dans le futur
    154                 // En cas de proposition d'un signature (mais pas depublication), idem
     154                // ou si l'petition est deja date dans le futur
     155                // En cas de proposition d'un petition (mais pas depublication), idem
     156                /*
    155157                if ($champs['statut'] == 'publie') {
    156158                        if ($d)
     
    158160                        else
    159161                                $champs['date_time'] = $date = date('Y-m-d H:i:s');
    160                 }
     162                }*/
    161163        }
    162164
     
    165167                array(
    166168                        'args' => array(
    167                                 'table' => 'spip_signatures',
    168                                 'id_objet' => $id_signature,
     169                                'table' => 'spip_petitions',
     170                                'id_objet' => $id_petition,
    169171                                'action'=>'instituer',
    170172                                'statut_ancien' => $statut_ancien,
     
    177179
    178180        // Envoyer les modifs.
    179         sql_updateq('spip_signatures',$champs,'id_signature='.intval($id_signature));
     181        sql_updateq('spip_petitions',$champs,'id_petition='.intval($id_petition));
    180182
    181183        // Invalider les caches
    182184        include_spip('inc/invalideur');
    183         suivre_invalideur("id='signature/$id_signature'");
     185        suivre_invalideur("id='petition/$id_petition'");
    184186        suivre_invalideur("id='article/".$row['id_article']."'");
    185187
     
    188190                array(
    189191                        'args' => array(
    190                                 'table' => 'spip_signatures',
    191                                 'id_objet' => $id_signature,
     192                                'table' => 'spip_petitions',
     193                                'id_objet' => $id_petition,
    192194                                'action'=>'instituer',
    193195                                'statut_ancien' => $statut_ancien,
     
    199201        // Notifications
    200202        if ($notifications = charger_fonction('notifications', 'inc')) {
    201                 $notifications('instituersignature', $id_signature,
    202                         array('statut' => $statut, 'statut_ancien' => $statut_ancien, 'date'=>$date)
     203                $notifications('instituerpetition', $id_petition,
     204                        array('statut' => $statut, 'statut_ancien' => $statut_ancien)
    203205                );
    204206        }
     
    207209}
    208210
    209 // http://doc.spip.org/@revision_signature
    210 function revision_signature($id_signature, $c=false) {
     211// http://doc.spip.org/@revision_petition
     212function revision_petition($id_petition, $c=false) {
    211213
    212214        include_spip('inc/modifier');
    213         return modifier_contenu('signature', $id_signature,
    214                 array(
    215                         'nonvide' => array('nom_email' => _T('info_sans_titre'))
    216                 ),
    217                 $c);
    218 }
    219 
    220 
    221 // Pour eviter le recours a un verrou (qui bloque l'acces a la base),
    222 // on commence par inserer systematiquement la signature
    223 // puis on demande toutes celles ayant la propriete devant etre unique
    224 // (mail ou site). S'il y en a plus qu'une on les retire sauf la premiere
    225 // En cas d'acces concurrents il y aura des requetes de retraits d'elements
    226 // deja detruits. Bizarre ?  C'est mieux que de bloquer!
    227 
    228 // http://doc.spip.org/@signature_entrop
    229 function signature_entrop($where)
    230 {
    231         $where .= " AND statut='publie'";
    232         $query = sql_select('id_signature', 'spip_signatures', $where,'',"date_time desc");
    233         $n = sql_count($query);
    234         if ($n>1) {
    235                 $entrop = array();
    236                 for ($i=$n-1;$i;$i--) {
    237                         $r = sql_fetch($query);
    238                         $entrop[]=$r['id_signature'];
    239                 }
    240                 sql_free($query);
    241                 $where .= " OR " . sql_in('id_signature', $entrop);
    242 
    243                 sql_delete('spip_signatures', $where);
    244         }
    245 
    246         return $entrop;
    247 }
     215        return modifier_contenu('petition', $id_petition,array(),$c);
     216}
     217
    248218
    249219?>
  • _core_/plugins/petitions/action/editer_signature.php

    r44727 r44981  
    2424        // mais on verifie qu'on a toutes les donnees qu'il faut.
    2525        if (!$id_signature = intval($arg)) {
    26                 $id_article = _request('id_article');
    27                 if (!($id_article)) {
    28                         include_spip('inc/headers');
    29                         redirige_url_ecrire();
    30                 }
    31                 $id_signature = insert_signature($id_article);
     26                $id_petition = _request('id_petition');
     27                if (!($id_petition))
     28                        return array(0,'');
     29                $id_signature = insert_signature($id_petition);
    3230        }
    3331
     
    6058        if($set){
    6159                $c = $set;
    62                 unset($c['id_article']);
     60                unset($c['id_petition']);
    6361                unset($c['statut']);
    6462                unset($c['date_time']);
     
    7573        revision_signature($id_signature, $c);
    7674
    77         // Modification de statut, changement de rubrique ?
     75        // Modification de statut
    7876        $c = array();
    7977        foreach (array(
    80                 "date_time", 'statut', 'id_article'
     78                "date_time", 'statut', 'id_petition'
    8179        ) as $champ)
    8280                $c[$champ] = _request($champ,$set);
     
    8886/**
    8987 * Inserer une signature en base
    90  * @param <type> $id_article
    91  * @return <type>
     88 * @param int $id_petition
     89 * @return int
    9290 */
    93 function insert_signature($id_article) {
    94 
    95         // Si id_article vaut 0 ou n'est pas definie, echouer
    96         if (!$id_article = intval($id_article))
     91function insert_signature($id_petition) {
     92
     93        // Si $id_petition vaut 0 ou n'est pas definie, echouer
     94        if (!$id_petition = intval($id_petition))
    9795                return 0;
    9896
    9997        $champs = array(
    100                 'id_article' => $id_article,
     98                'id_petition' => $id_petition,
    10199                'statut' =>  'prepa',
    102100                'date_time' => date('Y-m-d H:i:s'));
     
    128126
    129127
    130 // $c est un array ('statut', 'id_article' = changement d'article)
     128// $c est un array ('statut', 'id_petition' = changement de petition)
    131129// il n'est pas autoriser de deplacer une signature
    132130// http://doc.spip.org/@instituer_signature
     
    136134        include_spip('inc/modifier');
    137135
    138         $row = sql_fetsel("statut, date_time, id_article", "spip_signatures", "id_signature=".intval($id_signature));
    139         $id_article= $row['id_article'];
     136        $row = sql_fetsel("S.statut, S.date_time, P.id_article", "spip_signatures AS S JOIN spip_petitions AS P ON S.id_petition=P.id_petition", "S.id_signature=".intval($id_signature));
    140137        $statut_ancien = $statut = $row['statut'];
    141138        $date_ancienne = $date = $row['date_time'];
  • _core_/plugins/petitions/action/relancer_signature.php

    r44724 r44981  
    2121        if (autoriser('relancer','signature',$id_signature)){
    2222                $row = sql_fetsel('*', 'spip_signatures', 'id_signature='.intval($id_signature));
    23                 $id_article = $row['id_article'];
    24                 if ($id_article AND autoriser('mordererpetition','article',$id_article)) {
     23                $id_article = sql_getfetsel('id_article','spip_petitions','id_petition='.intval($row['id_petition']));
     24                if ($id_article=intval($id_article)
     25                  AND autoriser('mordererpetition','article',$id_article)) {
    2526                        include_spip('action/editer_signature');
    2627                        include_spip('formulaires/signature');
  • _core_/plugins/petitions/action/supprimer_signature.php

    r44724 r44981  
    2020
    2121        if (autoriser('supprimer','signature',$id_signature)){
    22                 $id_article = sql_getfetsel('id_article','spip_signatures','id_signature='.intval($id_signature));
     22                $id_article = sql_getfetsel('P.id_article','spip_signatures AS S JOIN spip_petitions AS P ON S.id_petition=P.id_petition','S.id_signature='.intval($id_signature));
    2323                if ($id_article AND autoriser('mordererpetition','article',$id_article)) {
    2424                        include_spip('action/editer_signature');
  • _core_/plugins/petitions/base/petitions.php

    r44971 r44981  
    5151          'url_edit'=>'controler_petition',
    5252          'editable'=>'non',
    53           'principale' => 'non',
     53          'principale' => 'oui',
    5454                'page'=>'', // pas de page editoriale pour une petition
    5555
     
    5858
    5959                'field'=> array(
     60                        "id_petition"   => "bigint(21) NOT NULL",
    6061                        "id_article"    => "bigint(21) DEFAULT '0' NOT NULL",
    6162                        "email_unique"  => "CHAR (3) DEFAULT '' NOT NULL",
     
    6465                        "message"       => "CHAR (3) DEFAULT '' NOT NULL",
    6566                        "texte" => "LONGTEXT DEFAULT '' NOT NULL",
     67                        "statut"        => "VARCHAR (10) DEFAULT 'publie' NOT NULL",
    6668                        "maj"   => "TIMESTAMP"
    6769                ),
    6870                'key' => array(
    69                         "PRIMARY KEY"   => "id_article"
     71                        "PRIMARY KEY"   => "id_petition",
     72                        "UNIQUE id_article"     => "id_article"
     73                ),
     74                'statut' => array(
     75                        array('champ'=>'statut','publie'=>'publie,off','previsu'=>'publie,off','exception'=>array('statut')),
    7076                ),
    7177        );
     
    8995                'field'=> array(
    9096                        "id_signature"  => "bigint(21) NOT NULL",
    91                         "id_article"    => "bigint(21) DEFAULT '0' NOT NULL",
     97                        "id_petition"   => "bigint(21) DEFAULT '0' NOT NULL",
     98#                       "id_article"    => "bigint(21) DEFAULT '0' NOT NULL",
    9299                        "date_time"     => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
    93100                        "nom_email"     => "text DEFAULT '' NOT NULL",
     
    101108                'key' => array(
    102109                        "PRIMARY KEY"   => "id_signature",
    103                         "KEY id_article"        => "id_article",
     110                        "KEY id_petition"       => "id_petition",
     111#                       "KEY id_article"        => "id_article",
    104112                        "KEY statut" => "statut"
    105113                ),
    106114                'join' => array(
    107115                        "id_signature"=>"id_signature",
    108                         "id_article"=>"id_article"
     116                        "id_petition"=>"id_petition"
     117                ),
     118                'tables_jointures'=> array(
     119                        'petitions'
    109120                ),
    110121                'statut' => array(
    111122                        array('champ'=>'statut','publie'=>'publie','previsu'=>'publie','exception'=>array('statut','tout')),
     123                ),
     124                'rechercher_champs' => array(
     125                        'nom_email' => 2, 'ad_email' => 4,
     126                        'nom_site' => 2, 'url_site' => 4,
     127                        'message' => 1
    112128                ),
    113129        );
  • _core_/plugins/petitions/base/petitions_upgrade.php

    r43407 r44981  
    3131                        ecrire_meta($nom_meta_base_version,$current_version=$version_cible);
    3232                }
    33                 /*
    34                 # ajout du champ statut aux petitions
    35                 if (version_compare($current_version, '1.1','<')) {
    36                         sql_alter("TABLE `spip_petitions` ADD `statut` VARCHAR (25) DEFAULT 'publie' NOT NULL AFTER `texte`");
    37                         ecrire_meta($nom_meta_base_version,$current_version = $version_cible);
     33
     34                // maj des petitions
     35                if (spip_version_compare($current_version, '1.1.0','<')) {
     36                        sql_alter("TABLE spip_petitions DROP PRIMARY KEY");
     37                        ecrire_meta($nom_meta_base_version,$current_version = "1.1.0");
    3838                }
    39                 */
     39                if (spip_version_compare($current_version, '1.1.1','<')) {
     40                        sql_alter("TABLE spip_petitions ADD UNIQUE id_article (id_article)");
     41                        ecrire_meta($nom_meta_base_version,$current_version = "1.1.1");
     42                }
     43                if (spip_version_compare($current_version, '1.1.2','<')) {
     44                        sql_alter("TABLE spip_petitions ADD id_petition BIGINT(21) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST");
     45                        sql_alter("TABLE spip_petitions ADD PRIMARY KEY (id_petition)"); // securite
     46                        ecrire_meta($nom_meta_base_version,$current_version = "1.1.2");
     47                }
     48                if (spip_version_compare($current_version, '1.1.3','<')) {
     49                        sql_alter("TABLE spip_petitions ADD statut VARCHAR (10) DEFAULT 'publie' NOT NULL");
     50                        ecrire_meta($nom_meta_base_version,$current_version = "1.1.3");
     51                }
     52                if (spip_version_compare($current_version, '1.1.4','<')) {
     53                        sql_alter("TABLE spip_signatures ADD id_petition bigint(21) DEFAULT '0' NOT NULL");
     54                        sql_alter("TABLE spip_signatures ADD INDEX id_petition (id_petition)");
     55                        // marquer toutes les signatures a upgrader
     56                        sql_updateq('spip_signatures',array('id_petition'=>-1));
     57                        ecrire_meta($nom_meta_base_version,$current_version = "1.1.4");
     58                }
     59                if (spip_version_compare($current_version, '1.1.5','<')) {
     60
     61                        while ($rows = sql_allfetsel('DISTINCT id_article','spip_signatures','id_petition=-1','','','0,100')) {
     62                                $rows = array_map('reset',$rows);
     63                                foreach($rows as $id_article){
     64                                        $id_petition = sql_getfetsel('id_petition','spip_petitions','id_article='.intval($id_article));
     65                                        if (!$id_petition){
     66                                                include_spip('action/editer_petition');
     67                                                $id_petition = insert_petition($id_article);
     68                                                sql_updateq('spip_petitions',array('statut'=>'poubelle'),'id_petition='.$id_petition);
     69                                        }
     70                                        sql_updateq('spip_signatures',array('id_petition'=>$id_petition),'id_article='.$id_article);
     71                                }
     72                        }
     73                        ecrire_meta($nom_meta_base_version,$current_version = "1.1.5");
     74                }
     75                if (spip_version_compare($current_version, '1.1.6','<')) {
     76                        sql_alter("TABLE spip_signatures DROP INDEX id_article");
     77                        sql_alter("TABLE spip_signatures DROP id_article");
     78                        ecrire_meta($nom_meta_base_version,$current_version = "1.1.6");
     79                }
    4080        }
    4181}
  • _core_/plugins/petitions/formulaires/activer_petition_article.html

    r44729 r44981  
    33[(#URL_ECRIRE{controler_petition,id_article=#ID_ARTICLE}|icone_horizontale{#ENV{_controle_petition},petition})]
    44]
    5 
     5#SET{petition,#ENV{petition}|et{#ENV{petition}|table_valeur{statut}|=={publie}|oui}}
    66[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
    77[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
     
    1414                                <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{change_petition})</span>
    1515                                ]<select name='change_petition' id='change_petition'>
    16                                         <option value='off'[ (#ENV{petition}|oui)selected='selected']>
    17                                         [(#ENV{petition}|?{
     16                                        <option value='off'[ (#GET{petition}|non)selected='selected']>
     17                                        [(#GET{petition}|?{
    1818                                                [(#VAL{bouton_radio_supprimer_petition}|_T)]
    1919                                                ,
     
    2121                                        })]
    2222                                        </option>
    23                                         <option value='on'[ (#ENV{petition}|oui)selected='selected']>
    24                                         [(#ENV{petition}|?{
     23                                        <option value='on'[ (#GET{petition}|oui)selected='selected']>
     24                                        [(#GET{petition}|?{
    2525                                                [(#VAL{bouton_radio_petition_activee}|_T)]
    2626                                                ,
     
    3030                                </select>
    3131                        </li>
    32                         [(#ENV{petition}|oui)
    33                         <li class="configurer_email_unique[ (#ENV**{erreurs}|table_valeur{email_unique}|oui)erreur]">
     32                        [(#GET{petition}|oui)
     33                        <li class="editer_email_unique[ (#ENV**{erreurs}|table_valeur{email_unique}|oui)erreur]">
    3434                                <div class='choix'>
    35                                         <input type="checkbox" name="email_unique" id="email_unique"[ (#ENV{petition}|table_valeur{email_unique}|=={oui}|oui) checked="checked"]/>
     35                                        <input type="checkbox" name="email_unique" id="email_unique" value="oui"[ (#ENV{petition}|table_valeur{email_unique}|=={oui}|oui) checked="checked"] />
    3636                                        <label for="email_unique"><:petitions:bouton_checkbox_signature_unique_email:></label>
    3737                                </div>
    3838                        </li>
    39                         <li class="configurer_site_obli[ (#ENV**{erreurs}|table_valeur{site_obli}|oui)erreur]">
     39                        <li class="editer_site_obli[ (#ENV**{erreurs}|table_valeur{site_obli}|oui)erreur]">
    4040                                <div class='choix'>
    41                                         <input type="checkbox" name="site_obli" id="site_obli"[ (#ENV{petition}|table_valeur{site_obli}|=={oui}|oui) checked="checked"]/>
     41                                        <input type="checkbox" name="site_obli" id="site_obli" value="oui"[ (#ENV{petition}|table_valeur{site_obli}|=={oui}|oui) checked="checked"]/>
    4242                                        <label for="site_obli"><:petitions:bouton_checkbox_indiquer_site:></label>
    4343                                </div>
    4444                        </li>
    45                         <li class="configurer_siteunique[ (#ENV**{erreurs}|table_valeur{siteunique}|oui)erreur]">
     45                        <li class="editer_siteunique[ (#ENV**{erreurs}|table_valeur{siteunique}|oui)erreur]">
    4646                                <div class='choix'>
    47                                         <input type="checkbox" name="siteunique" id="siteunique"[ (#ENV{petition}|table_valeur{siteunique}|=={oui}|oui) checked="checked"]/>
     47                                        <input type="checkbox" name="siteunique" id="siteunique" value="oui"[ (#ENV{petition}|table_valeur{siteunique}|=={oui}|oui) checked="checked"]/>
    4848                                        <label for="siteunique"><:petitions:bouton_checkbox_signature_unique_site:></label>
    4949                                </div>
    5050                        </li>
    51                         <li class="configurer_message[ (#ENV**{erreurs}|table_valeur{message}|oui)erreur]">
     51                        <li class="editer_message[ (#ENV**{erreurs}|table_valeur{message}|oui)erreur]">
    5252                                <div class='choix'>
    53                                         <input type="checkbox" name="message" id="message"[ (#ENV{petition}|table_valeur{message}|=={oui}|oui) checked="checked"]/>
     53                                        <input type="checkbox" name="message" id="message" value="oui"[ (#ENV{petition}|table_valeur{message}|=={oui}|oui) checked="checked"]/>
    5454                                        <label for="message"><:petitions:bouton_checkbox_envoi_message:></label>
    5555                                </div>
    5656                        </li>
    57                         <li class="configurer_texte_petition[ (#ENV**{erreurs}|table_valeur{texte_petition}|oui)erreur]">
     57                        <li class="editer_texte_petition[ (#ENV**{erreurs}|table_valeur{texte_petition}|oui)erreur]">
    5858                                        <label for="texte_petition"><:petitions:texte_descriptif_petition:></label>[
    5959                                        <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{texte_petition})</span>
  • _core_/plugins/petitions/formulaires/activer_petition_article.php

    r43407 r44981  
    3030        include_spip('inc/presentation');
    3131        include_spip('base/abstract_sql');
    32         $nb_signatures = sql_countsel("spip_signatures", "id_article=$id_article");
     32        $nb_signatures = 0;
    3333        $petition = sql_fetsel("*", "spip_petitions", "id_article=$id_article");
    34        
     34        if ($petition)
     35                $nb_signatures = sql_countsel("spip_signatures", "id_petition=".intval($petition['id_petition']));
     36
    3537        $valeurs['id_article'] = $id_article;
    3638        $valeurs['petition'] = $petition;
     
    5456                switch(_request('change_petition')) {
    5557                case 'on':
    56                         $email_unique = (_request('email_unique') == 'on') ? 'oui' : 'non';
    57                         $site_obli = (_request('site_obli') == 'on') ? 'oui' : 'non';
    58                         $site_unique = (_request('site_unique') == 'on') ? 'oui' : 'non';
    59                         $message =  (_request('message') == 'on') ? 'oui' : 'non';
     58                        foreach(array('email_unique','site_obli','site_unique','message') as $k)
     59                                if (_request($k) != 'oui')
     60                                        set_request($k,'non');
    6061
    61                         include_spip('base/auxiliaires');
    62                         sql_replace('spip_petitions',
    63                                                   array('id_article' => $id_article,
    64                                                         'email_unique' => $email_unique,
    65                                                         'site_obli' => $site_obli,
    66                                                         'site_unique' => $site_unique,
    67                                                         'message' => $message),
    68                                                   $GLOBALS['tables_auxiliaires']['spip_petitions']);
    69                         include_spip('inc/modifier');
    70                         revision_petition($id_article,
    71                                 array('texte' => _request('texte_petition'))
     62                        include_spip('action/editer_petition');
     63                        if (!$id_petition=sql_getfetsel('id_petition','spip_petitions','id_article='.intval($id_article))){
     64                                $id_petition = insert_petition($id_article);
     65                        }
     66
     67                        petition_set(
     68                                $id_petition,
     69                          array('email_unique' => _request('email_unique'),
     70                                                        'site_obli' => _request('site_obli'),
     71                                                        'site_unique' => _request('site_unique'),
     72                                                        'message' => _request('message'),
     73                                'texte'=>_request('texte_petition'),
     74                                      'statut'=>'publie',
     75                          )
    7276                        );
    7377                        break;
    7478                case 'off':
    75                         sql_delete("spip_petitions", "id_article=$id_article");
     79                        if ($id_petition=sql_getfetsel('id_petition','spip_petitions','id_article='.intval($id_article))){
     80                                include_spip('action/editer_petition');
     81                                petition_set($id_petition,array('statut'=>'poubelle'));
     82                        }
    7683                        break;
    7784                }
     
    8289}
    8390
    84 
    85 // http://doc.spip.org/@revision_petition
    86 function revision_petition($id_article, $c=false) {
    87 
    88         modifier_contenu('petition', $id_article,
    89                 array(),
    90                 $c);
    91 }
    92 
    9391?>
  • _core_/plugins/petitions/formulaires/signature.html

    r41232 r44981  
    1 <div class="formulaire_spip formulaire_signature ajax" id="sp#ENV{id_article}">
     1<div class="formulaire_spip formulaire_signature ajax" id="sp#ENV{id_petition}">
    22
    33[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok,#ENV*{_confirm}|affiche_reponse_confirmation})</p>]
    44[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
    55[(#ENV{editable})
    6 <form method="post" action="#ENV{action}#sp#ENV{id_article}">
     6<form method="post" action="#ENV{action}#sp#ENV{id_petition}">
    77        #ACTION_FORMULAIRE{#ENV{action}}
    88       
  • _core_/plugins/petitions/formulaires/signature.php

    r44980 r44981  
    2020        if (isset($r['statut']) AND $r['statut']=='off')
    2121                return false;
     22        $id_petition = $r['id_petition'];
    2223
    2324        $valeurs = array(
    24                 'id_article' => $id_article,
     25                'id_petition' => $id_petition,
     26                'id_article' => $id_article, # pour compat
    2527                'session_nom' => sinon($GLOBALS['visiteur_session']['session_nom'],
    2628                        $GLOBALS['visiteur_session']['nom']),
     
    5153        $erreurs = array();
    5254        $oblis = array('session_email','session_email');
    53         $r = sql_fetsel('*','spip_petitions','id_article='.intval($id_article));
    54 
    55         if ($r['site_obli'] == 'oui'){
     55        include_spip('base/abstract_sql');
     56        $row = sql_fetsel('*','spip_petitions','id_article='.intval($id_article));
     57        if (!$row)
     58                $erreurs['message_erreur'] = _T('form_pet_probleme_technique');
     59        $id_petition = $row['id_petition'];
     60
     61        if ($row['site_obli'] == 'oui'){
    5662                $oblis[] = 'signature_nom_site';
    5763                $oblis[] = 'signature_url_site';
     
    8086                $erreurs['message_erreur'] = _T('form_pet_probleme_liens');
    8187        }
    82         if ($r['site_obli'] == 'oui'){
     88        if ($row['site_obli'] == 'oui'){
    8389                if (!vider_url($url_site = _request('signature_url_site'))) {
    8490                        $erreurs['signature_url_site'] = _T('form_indiquer_nom_site');
     
    9399        if (!count($erreurs)){
    94100                // tout le monde est la.
    95                 include_spip('base/abstract_sql');
    96                 $row = sql_fetsel('*', 'spip_petitions', "id_article=".intval($id_article));
    97 
    98                 if (!$row)
    99                         $erreurs['message_erreur'] = _T('form_pet_probleme_technique');
    100                 else {
    101                         $email_unique = $row['email_unique']  == "oui";
    102                         $site_unique = $row['site_unique']  == "oui";
    103                
    104                         // Refuser si deja signe par le mail ou le site quand demande
    105                         // Il y a un acces concurrent potentiel,
    106                         // mais ca n'est qu'un cas particulier de qq n'ayant jamais confirme'.
    107                         // On traite donc le probleme a la confirmation.
    108                
    109                         if ($email_unique) {
    110                                 $r = sql_countsel('spip_signatures', "id_article=$id_article AND ad_email=" . sql_quote($mail) . " AND statut='publie'");
    111                                 if ($r) $erreurs['message_erreur'] =  _T('form_pet_deja_signe');
    112                         }
    113                
    114                         if ($site_unique) {
    115                                 $r = sql_countsel('spip_signatures', "id_article=$id_article AND url_site=" . sql_quote($url_site) . " AND (statut='publie' OR statut='poubelle')");
    116                                 if ($r) $erreurs['message_erreur'] = _T('form_pet_site_deja_enregistre');
    117                         }
     101                $email_unique = $row['email_unique']  == "oui";
     102                $site_unique = $row['site_unique']  == "oui";
     103
     104                // Refuser si deja signe par le mail ou le site quand demande
     105                // Il y a un acces concurrent potentiel,
     106                // mais ca n'est qu'un cas particulier de qq n'ayant jamais confirme'.
     107                // On traite donc le probleme a la confirmation.
     108
     109                if ($email_unique) {
     110                        $r = sql_countsel('spip_signatures', "id_petition=".intval($id_petition)." AND ad_email=" . sql_quote($mail) . " AND statut='publie'");
     111                        if ($r) $erreurs['message_erreur'] =  _T('form_pet_deja_signe');
     112                }
     113
     114                if ($site_unique) {
     115                        $r = sql_countsel('spip_signatures', "id_petition=".intval($id_petition)." AND url_site=" . sql_quote($url_site) . " AND (statut='publie' OR statut='poubelle')");
     116                        if ($r) $erreurs['message_erreur'] = _T('form_pet_site_deja_enregistre');
    118117                }
    119118        }
     
    149148        // tout le monde est la.
    150149        // cela a ete verifie en amont, dans formulaires_signature_verifier()
    151         if (!$row = sql_fetsel('*', 'spip_petitions', "id_article=$id_article"))
     150        if (!$row = sql_fetsel('*', 'spip_petitions', "id_article=".intval($id_article))
    152151                return _T('form_pet_probleme_technique');
    153152
     
    158157        include_spip('action/editer_signature');
    159158
    160         $id_signature = insert_signature($id_article);
     159        $id_signature = insert_signature($row['id_petition']);
    161160        if (!$id_signature) return _T('form_pet_probleme_technique');
    162161
     
    215214        // Cas normal : envoi d'une demande de confirmation
    216215        //
    217         $row = sql_fetsel('titre,lang', 'spip_articles', "id_article=$id_article");
     216        $row = sql_fetsel('titre,lang', 'spip_articles', "id_article=".intval($id_article));
    218217        $lang = lang_select($row['lang']);
    219218        $titre = textebrut(typo($row['titre']));
  • _core_/plugins/petitions/petitions_autoriser.php

    r44726 r44981  
    2929 */
    3030function autoriser_signature_publier($faire, $type, $id, $qui, $opt) {
    31         $id_article = sql_getfetsel('id_article','spip_signatures','id_signature='.intval($id));
     31        $id_article = sql_getfetsel('P.id_article','spip_signatures AS S JOIN spip_petitions AS P ON P.id_petition=S.id_petition','S.id_signature='.intval($id));
    3232        return
    3333                autoriser('modererpetition', 'article', $id_article, $qui, $opt);
     
    3939 */
    4040function autoriser_signature_supprimer($faire, $type, $id, $qui, $opt) {
    41         $id_article = sql_getfetsel('id_article','spip_signatures','id_signature='.intval($id));
     41        $id_article = sql_getfetsel('P.id_article','spip_signatures AS S JOIN spip_petitions AS P ON P.id_petition=S.id_petition','S.id_signature='.intval($id));
    4242        return
    4343                autoriser('modererpetition', 'article', $id_article, $qui, $opt);
  • _core_/plugins/petitions/petitions_pipelines.php

    r43407 r44981  
    2828}
    2929
    30 /**
    31  * Liste et ponderation des champs pour la recherche
    32  *
    33  * @param array $tables
    34  * @return int
    35  */
    36 function petitions_rechercher_liste_des_champs($tables){
    37         $tables['signature'] = array(
    38                                 'nom_email' => 2, 'ad_email' => 4,
    39                                 'nom_site' => 2, 'url_site' => 4,
    40                                 'message' => 1
    41                         );
    42        
    43         return $tables;
    44 }
    4530
    4631# cette requete devrait figurer dans l'optimisation
  • _core_/plugins/petitions/plugin.xml

    r44971 r44981  
    22        <nom>P&#233;titions</nom>
    33        <auteur>Collectif SPIP</auteur>
    4         <version>1.1.1</version>
    5         <version_base>1.0</version_base>
     4        <version>1.2.0</version>
     5        <version_base>1.1.6</version_base>
    66        <etat>test</etat>
    77        <description>P&eacute;titions dans SPIP</description>
     
    3131        </pipeline>
    3232
    33         <pipeline>
    34                 <nom>rechercher_liste_des_champs</nom>
    35                 <inclure>petitions_pipelines.php</inclure>
    36         </pipeline>
    37        
    3833        <bouton id='controler_petition' parent='bando_activite' position="-1">
    3934                <icone>images/petition-16.png</icone>
  • _core_/plugins/petitions/prive/modeles/signature.html

    r44729 r44981  
    1313        [<div class='site'><:info_site_web:> <a class='ajax' href='[(#GET{self}|parametre_url{url_site,#URL_SITE})]' title='<:syndic:articles_meme_auteur|attribut_html:>' >(#NOM_SITE|sinon{#URL_SITE})</a></div>]
    1414        [<div class='ad_email'><:info_adresse_email:> <a class='ajax' href='[(#GET{self}|parametre_url{ad_email,#AD_EMAIL})]' title='<:syndic:articles_meme_auteur|attribut_html:>' >(#AD_EMAIL)</a></div>]
    15         <BOUCLE_art(ARTICLES){id_article}>
     15        <BOUCLE_art(ARTICLES){id_petition}>
    1616                <div class='reponse_a'>
    1717                        <p class="article"><:lien_reponse_article:> : <a href='[(#ID_ARTICLE|generer_url_entite{article})]'>#TITRE</a> [<a href='[(#GET{self}|parametre_url{id_article,#ID_ARTICLE})]' class="ajax"><:petitions:voir_signatures_objet:></a>]</p>
     
    2020                        </BOUCLE_rub>
    2121                </div>
     22                #SET{id_article,#ID_ARTICLE}
    2223        </BOUCLE_art>
    2324</div>
     
    2829
    2930[(#REM) Les boutons ---------------------------------------------------------]
    30 [(#INCLURE{fond=prive/modeles/signature-actions-#ENV{boutons,moderer}}{id_signature}{id_article}{statut}{self})]
     31[(#INCLURE{fond=prive/modeles/signature-actions-#ENV{boutons,moderer},id_signature,id_article=#ID_ARTICLE,statut,self})]
    3132</BOUCLE_signature>
Note: See TracChangeset for help on using the changeset viewer.