diff --git a/ecrire/action/editer_signatures.php b/ecrire/action/editer_signatures.php index df5812370eb1f959a9272fcfc8fd7cb962cfcf0e..8a25d53f87d31a29cd9e043ff163f5fd780f1fec 100644 --- a/ecrire/action/editer_signatures.php +++ b/ecrire/action/editer_signatures.php @@ -12,8 +12,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return; - -// Modifier le reglage des forums publics de l'article x // http://doc.spip.org/@action_editer_signatures_dist function action_editer_signatures_dist() { @@ -25,6 +23,10 @@ function action_editer_signatures_dist() } else action_editer_signatures_post($r); } +// mettre un signature a la poubelle +// ou l'en sortir +// ou relancer le signataire. + // http://doc.spip.org/@action_editer_signatures_post function action_editer_signatures_post($r) { @@ -32,10 +34,23 @@ function action_editer_signatures_post($r) if ($id < 0){ $id = 0 - $id; - $result_forum = sql_updateq("spip_signatures", array("statut" => 'poubelle'), "id_signature=$id"); + sql_updateq("spip_signatures", array("statut" => 'poubelle'), "id_signature=$id"); } elseif ($id > 0){ - $result_forum = sql_updateq("spip_signatures", array("statut" => 'publie'), "id_signature=$id"); + $row = sql_fetsel('*', 'spip_signatures', "id_signature=$id"); + if ($row['statut']=='poubelle') + sql_updateq("spip_signatures", array("statut" => 'publie'), "id_signature=$id"); + else { + include_spip('balise/formulaire_signature'); + include_spip('inc/texte'); + + charger_generer_url(); + $id_article = $row['id_article']; + $url = $GLOBALS['meta']['adresse_site'] . '/' . generer_url_article($id_article); + if (signature_a_confirmer($id_article, $url, $row['nom_email'], $row['ad_email'], $row['nom_site'], $row['url_site'], $row['message'], $row['lang'], $row['statut'])) + sql_update("spip_signatures", array("date_time" => 'NOW()'), "id_signature=$id"); + $id = 0; + } } diff --git a/ecrire/balise/formulaire_signature.php b/ecrire/balise/formulaire_signature.php index c4f0f08bc027ebfc14a04f3e77f394ebb9cd4d6a..10a88812aad0e965b9f64e720924b784faaf8e09 100644 --- a/ecrire/balise/formulaire_signature.php +++ b/ecrire/balise/formulaire_signature.php @@ -155,13 +155,13 @@ function reponse_confirmation($var_confirm = '') { if ($email_unique) { - $r = sql_select('id_signature', 'spip_signatures', "id_article=$id_article AND ad_email=" . sql_quote($adresse_email) . " AND statut='publie'","","date_time desc"); + $r = "id_article=$id_article AND ad_email=" . sql_quote($adresse_email); if (signature_entrop($r)) $confirm = _T('form_pet_deja_signe'); } if ($site_unique) { - $r = sql_select('id_signature', 'spip_signatures', "id_article=$id_article AND url_site=" . sql_quote($url_site) . " AND (statut='publie' OR statut='poubelle')",'',"date_time desc"); + $r = "id_article=$id_article AND url_site=" . sql_quote($url_site); if (signature_entrop($r)) $confirm = _T('form_pet_site_deja_enregistre'); } @@ -179,18 +179,16 @@ function reponse_confirmation($var_confirm = '') { // // http://doc.spip.org/@inc_controler_signature_dist -function inc_controler_signature_dist($id_article, $nom_email, $adresse_email, $message, $nom_site, $url_site, $url_page) { +function inc_controler_signature_dist($id_article, $nom, $mail, $message, $site, $url_site, $url_page) { include_spip('inc/texte'); include_spip('inc/filtres'); - $envoyer_mail = charger_fonction('envoyer_mail','inc'); - - if (strlen($nom_email) < 2) + if (strlen($nom) < 2) return _T('form_indiquer_nom'); - elseif ($adresse_email == _T('info_mail_fournisseur')) - return _T('form_indiquer_email'); - elseif (!email_valide($adresse_email)) + elseif ($mail == _T('info_mail_fournisseur')) + return _T('form_indiquer'); + elseif (!email_valide($mail)) return _T('form_email_non_valide'); elseif (strlen(_request('nobot')) OR (@preg_match_all(',\bhref=[\'"]?http,i', // bug PHP @@ -198,24 +196,20 @@ function inc_controler_signature_dist($id_article, $nom_email, $adresse_email, $ # , PREG_PATTERN_ORDER ) >2)) { + #$envoyer_mail = charger_fonction('envoyer_mail','inc'); #envoyer_mail('email_moderateur@example.tld', 'spam intercepte', var_export($_POST,1)); return _T('form_pet_probleme_liens'); } // tout le monde est la. - $row = sql_fetch(sql_select('titre,lang', 'spip_articles', "id_article=$id_article")); - $lang = lang_select($row['lang']); - $titre = textebrut(typo($row['titre'])); - if ($lang) lang_select(); - $result_petition = sql_select('*', 'spip_petitions', "id_article=$id_article"); if (!$row = sql_fetch($result_petition)) return _T('form_pet_probleme_technique'); if ($row['site_obli'] == "oui") { - if (!strlen($nom_site) + if (!strlen($site) OR !vider_url($url_site)) { return _T('form_indiquer_nom_site'); } @@ -233,7 +227,7 @@ function inc_controler_signature_dist($id_article, $nom_email, $adresse_email, $ // On traite donc le probleme a la confirmation. if ($email_unique) { - $r = sql_countsel('spip_signatures', "id_article=$id_article AND ad_email=" . sql_quote($adresse_email) . " AND statut='publie'"); + $r = sql_countsel('spip_signatures', "id_article=$id_article AND ad_email=" . sql_quote($mail) . " AND statut='publie'"); if ($r) return _T('form_pet_deja_signe'); } @@ -244,37 +238,56 @@ function inc_controler_signature_dist($id_article, $nom_email, $adresse_email, $ if ($r) return _T('form_pet_site_deja_enregistre'); } - // preparer l'url de confirmation $passw = test_pass(); - $url = parametre_url($url_page, 'var_confirm',$passw,'&'); - if ($lang != $GLOBALS['meta']['langue_site']) - $url = parametre_url($url, "lang", $row['lang'],'&'); - $url .= "#sp$id_article"; - - $messagex = _T('form_pet_mail_confirmation', array('titre' => $titre, 'nom_email' => $nom_email, 'nom_site' => $nom_site, 'url_site' => $url_site, 'url' => $url, 'message' => $message)); - - if (!$envoyer_mail($adresse_email, _T('form_pet_confirmation')." ".$titre, $messagex)) + if (!signature_a_confirmer($id_article, $url_page, $nom, $mail, $site, $url_site, $message, $lang, $passw)) return _T('form_pet_probleme_technique'); $id_signature = sql_insertq('spip_signatures', array( 'id_article' => $id_article, 'date_time' => 'NOW()', 'statut' => $passw, - 'ad_email' => $adresse_email, + 'ad_email' => $mail, 'url_site' => $url_site)); if (!$id_signature) return _T('form_pet_probleme_technique'); include_spip('inc/modifier'); revision_signature($id_signature, array( - 'nom_email' => $nom_email, - 'ad_email' => $adresse_email, + 'nom_email' => $nom, + 'ad_email' => $mail, 'message' => $message, - 'nom_site' => $nom_site, + 'nom_site' => $site, 'url_site' => $url_site )); return _T('form_pet_envoi_mail_confirmation'); } +function signature_a_confirmer($id_article, $url_page, $nom, $mail, $site, $url, $msg, $lang, $passw) +{ + $row = sql_fetsel('titre,lang', 'spip_articles', "id_article=$id_article"); + $lang = lang_select($row['lang']); + $titre = textebrut(typo($row['titre'])); + if ($lang) lang_select(); + + if ($lang != $GLOBALS['meta']['langue_site']) + $url_page = parametre_url($url_page, "lang", $lang,'&'); + + $url_page = parametre_url($url_page, 'var_confirm', $passw, '&') + . "#sp$id_article"; + + $r = _T('form_pet_mail_confirmation', + array('titre' => $titre, + 'nom_email' => $nom, + 'nom_site' => $site, + 'url_site' => $url, + 'url' => $url_page, + 'message' => $msg)); + + $titre = _T('form_pet_confirmation')." ". $titre; + $envoyer_mail = charger_fonction('envoyer_mail','inc'); + return $envoyer_mail($mail,$titre, $r); + +} + // Pour eviter le recours a un verrou (qui bloque l'acces a la base), // on commence par inserer systematiquement la signature // puis on demande toutes celles ayant la propriete devant etre unique @@ -283,8 +296,10 @@ function inc_controler_signature_dist($id_article, $nom_email, $adresse_email, $ // deja detruits. Bizarre ? C'est mieux que de bloquer! // http://doc.spip.org/@signature_entrop -function signature_entrop($query) +function signature_entrop($where) { + $query = sql_select('id_signature', 'spip_signatures', $where . " AND statut='publie'",'',"date_time desc"); + $entrop = ''; $n = sql_count($query); if ($n>1) { $entrop = array(); @@ -292,10 +307,11 @@ function signature_entrop($query) $r = sql_fetch($query); $entrop[]=$r['id_signature']; } - if ($entrop) - sql_delete('spip_signatures', - "id_signature IN (" . join(',',$entrop) .')'); + $entrop = " OR (id_signature IN (" . join(',',$entrop) .'))'; } + + sql_delete('spip_signatures', "($where AND statut<>'publie')$entrop"); + return $entrop; } diff --git a/ecrire/exec/controle_petition.php b/ecrire/exec/controle_petition.php index 1c716322e1826f01071130483096371d84573b9d..d7e42cfad154efeb015daf5362b5c6a420a1187b 100644 --- a/ecrire/exec/controle_petition.php +++ b/ecrire/exec/controle_petition.php @@ -14,10 +14,16 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // http://doc.spip.org/@exec_controle_petition_dist function exec_controle_petition_dist() +{ + exec_controle_petition_args(intval(_request('id_article')), + _request('type'), + intval(_request('debut'))); +} + +function exec_controle_petition_args($id_article, $type, $debut) { include_spip('inc/presentation'); - $id_article = intval(_request('id_article')); $titre =' '; $statut='new'; if ($id_article) { @@ -37,38 +43,48 @@ function exec_controle_petition_dist() AND autoriser('modererpetition', 'article', $id_article) ) )) { - include_spip('inc/minipres'); - echo minipres();} + include_spip('inc/minipres'); + echo minipres();} else { - - $debut = intval(_request('debut')); - $signatures = charger_fonction('signatures', 'inc'); - $r = $signatures('controle_petition', $id_article, $debut, "(statut='publie' OR statut='poubelle')", "date_time DESC", - 10); + 10, + $type); if (_request('var_ajaxcharset')) ajax_retour($r); - else { + else controle_petition_page($id_article, $debut, $type, $titre, $statut, $r); + } +} - $commencer_page = charger_fonction('commencer_page', 'inc'); - echo $commencer_page(_T('titre_page_controle_petition'), "forum", "suivi-petition"); - echo debut_gauche('', true); +function controle_petition_page($id_article, $debut, $type, $titre, $statut, $r) +{ + $args = ($id_article ? "id_article=$id_article" :'') + . ($debut ? "debut=$debut" : '') + . '&type='; + + $commencer_page = charger_fonction('commencer_page', 'inc'); + echo $commencer_page(_T('titre_page_controle_petition'), "forum", "suivi-petition"); + echo debut_gauche('', true); - echo debut_droite('', true); + echo debut_droite('', true); - echo gros_titre(_T('titre_suivi_petition'),'', false); + echo gros_titre(_T('titre_suivi_petition'),'', false); - if (!$titre) - echo _T('trad_article_inexistant'); - else { - if ($id_article) { - echo "<a href='", + echo debut_onglet(); + echo onglet(_L('Signatures confirmées'), generer_url_ecrire('controle_petition', $args . "public"), "public", $type=='public', "forum-public-24.gif"); + echo onglet(_L('Signatures en attente de validation'), generer_url_ecrire('controle_petition', $args . "interne"), "interne", $type=='interne', "forum-interne-24.gif"); + echo fin_onglet(), '<br /><br />'; + + if (!$titre) + echo _T('trad_article_inexistant'); + else { + if ($id_article) { + echo "<a href='", (($statut == 'publie') ? generer_url_action('redirect', "id_article=$id_article") : generer_url_ecrire('articles', "id_article=$id_article")), @@ -79,14 +95,11 @@ function exec_controle_petition_dist() _T('info_numero_abbreviation'), $id_article, ")</span>"; - } - $a = "editer_signature-" . $id_article; - - echo "<div id='", $a, "' class='serif2'>", $r, "</div>"; - } - echo fin_gauche(), fin_page(); } + $a = "editer_signature-" . $id_article; + + echo "<div id='", $a, "' class='serif2'>", $r, "</div>"; } + echo fin_gauche(), fin_page(); } - ?> diff --git a/ecrire/inc/signatures.php b/ecrire/inc/signatures.php index 290d4082c8eb22c5643cc07e332b7c29977d15c7..54cbccd50e235b5fc489a41b62d8f559b0f4c95d 100644 --- a/ecrire/inc/signatures.php +++ b/ecrire/inc/signatures.php @@ -19,12 +19,12 @@ function message_de_signature($row) } // http://doc.spip.org/@inc_signatures_dist -function inc_signatures_dist($script, $id, $debut, $where, $order, $limit='') { - +function inc_signatures_dist($script, $id, $debut, $where, $order, $limit='', $type='') { charger_generer_url(); # filtre de duree (a remplacer par une vraie pagination) #$where .= ($where ? " AND " : "") . "date_time>DATE_SUB(NOW(),INTERVAL 180 DAY)"; + if ($type == 'interne') $where = "NOT($where)"; if ($id) { $args = "id_article=$id&"; $where .= " AND id_article=$id"; @@ -36,7 +36,6 @@ function inc_signatures_dist($script, $id, $debut, $where, $order, $limit='') { $res = navigation_pagination($t, $nb_aff, generer_url_ecrire($script, $args), false, 'debut'); } else $res = ''; - $limit = (!$limit AND !$debut) ? '' : (($debut ? "$debut," : "") . $limit); $request = sql_select('*', 'spip_signatures', $where, '', $order, $limit); @@ -44,13 +43,13 @@ function inc_signatures_dist($script, $id, $debut, $where, $order, $limit='') { $res .= '<br />'; while($row=sql_fetch($request)){ - $res .= '<br />' . signatures_edit($script, $id, $debut, $row); + $res .= '<br />' . signatures_edit($script, $id, $debut, $row, $type); } return $res; } // http://doc.spip.org/@signatures_edit -function signatures_edit($script, $id, $debut, $row) { +function signatures_edit($script, $id, $debut, $row, $type) { $id_signature = $row['id_signature']; $id_article = $row['id_article']; @@ -62,13 +61,15 @@ function signatures_edit($script, $id, $debut, $row) { $statut = $row['statut']; $arg = ($statut=="publie") ? "-$id_signature" : $id_signature; + + $retour = redirige_action_auteur('editer_signatures', $arg, $script, "id_article=$id_article&debut=$debut&type=$type#signature$id_signature"); $res = ""; if ($statut=="poubelle"){ $res .= "<table width='100%' cellpadding='2' cellspacing='0' border='0'><tr><td style='background-color: #ff0000'>"; } - $res .= "<table width='100%' cellpadding='3' cellspacing='0'><tr><td class='verdana2 toile_foncee' style='color: white;'><b>" + $res .= "<table id='signature$id_signature' width='100%' cellpadding='3' cellspacing='0'><tr><td class='verdana2 toile_foncee' style='color: white;'><b>" . ($nom_site ? "$nom_site / " : "") . $nom_email . "</b></td></tr>" @@ -76,19 +77,24 @@ function signatures_edit($script, $id, $debut, $row) { if ($statut=="publie"){ $res .= icone_inline (_T('icone_supprimer_signature'), - redirige_action_auteur('editer_signatures', $arg, $script, "id_article=$id&debut=$debut"), + $retour, "forum-interne-24.gif", "supprimer.gif", "right", false); } elseif ($statut=="poubelle"){ $res .= icone_inline (_T('icone_valider_signature'), - redirige_action_auteur('editer_signatures', $arg, $script, "id_article=$id&debut=$debut"), + $retour, + "forum-interne-24.gif", + "creer.gif", + "right", + false); + } else $res .= icone_inline (_L('relancer le signataire'), + $retour, "forum-interne-24.gif", "creer.gif", "right", false); - } $res .= "<span class='spip_small'>".date_interface($date_time)."</span><br />"; if ($statut=="poubelle"){