Ignore:
Timestamp:
12/17/10 16:18:21 (9 years ago)
Author:
b_b
Message:

on stocke en base les pings envoyés avec succès et on les affichent sous le formulaire dans les pages du privé

Location:
plugins_spip/trackbacks
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • plugins_spip/trackbacks/action/envoi_trackback.php

    r4631 r4636  
    44include_spip("inc/distant");
    55
    6 function action_envoi_trackback() {
    7        
     6function action_envoi_trackback_dist() {
     7
    88}
    99
    10 function envoi_trackback($ping, $datas) {
    11         //TODO:detection du charset distant et conversion si necessaire
     10function envoi_trackback($ping, $datas=false) {
     11        // recuperer les champs dans POST s'ils ne sont pas transmis
     12        if ($datas === false) {
     13                $datas = array();
     14                foreach (array(
     15                        'url', 'title', 'blog_name', 'excerpt', 'charset', 'utf8'
     16                ) as $champ) {
     17                        if (($a = _request($champ)) !== null) {
     18                                $datas[$champ] = $a;
     19                        }
     20                }
     21        }
     22       
     23        // couper l'intro si trop longue, utile ?
     24        if(strlen($datas['excerpt'])>255)
     25                $datas['excerpt'] = couper($datas['excerpt'], 244);
     26       
     27        // TODO : detection du charset distant et conversion si necessaire
    1228        $pageContents = recuperer_page($ping, true, true, 1048576, $datas);
     29       
     30        spip_log($pageContents,"trackbacks");
    1331       
    1432        $pattern = '|<response>.*<error>(.*)</error>(.*)'.
     
    1634                        '</response>|msU';
    1735       
    18         if (!preg_match($pattern,$pageContents,$matches))
    19         {
     36        if (!preg_match($pattern,$pageContents,$matches)) {
    2037                return array(false, _L('Source is not a ping URL'));
    2138        }
    2239
    23         # On continue, le match est OK
     40        // On continue, le match est OK
    2441        $ping_error = $matches[1];
    2542        $ping_msg = (!empty($matches[4])) ? $matches[4] : '';
     
    2845                return array(false, _L('Trackback error').' : '.$ping_msg);
    2946        } else {
    30                 # Oui ! Le trackback est passe ! champagne :))
    31                 # On va faire la notification
    32                 //$this->postPingNotify($post_id,$url); TODO historiser les ping reussi (et les echecs?)
     47                // Oui ! Le trackback est passe ! champagne :))
     48               
     49                $champs = array("url_ping"=>$ping, "date"=>"NOW()");
     50               
     51                // Envoyer aux plugins avant insertion en base
     52                $champs = pipeline('pre_insertion', array(
     53                        'args' => array(
     54                                'table' => 'spip_pings',
     55                        ),
     56                        'data' => $champs
     57                ));
     58               
     59                // enregistrer le ping en base
     60                $id_ping = sql_insertq("spip_pings", $champs);
     61               
     62                // lier le ping à l'objet
     63                if(intval(_request('id_objet')) && _request('objet'))
     64                        lier_trackback($id_ping, _request('objet'), _request('id_objet'));
     65               
    3366                return array(true, "Ok");
    3467        }
    3568}
     69
     70function lier_trackback($id_ping, $objet, $id_objet){
     71        $objet = objet_type($objet);
     72        if ($id_objet AND $id_ping
     73        AND preg_match('/^[a-z0-9_]+$/i', $objet) # securite
     74        AND !sql_getfetsel("id_ping", "spip_pings_liens", "id_ping=$id_ping AND id_objet=$id_objet AND objet=".sql_quote($objet))
     75        ) {
     76                sql_insertq('spip_pings_liens',
     77                        array('id_ping' => $id_ping,
     78                                'id_objet' => $id_objet,
     79                                'objet' => $objet));
     80        }
     81}
     82
    3683?>
  • plugins_spip/trackbacks/formulaires/trackbacks.html

    r4631 r4636  
    99                parametre : url d'action ]
    1010                #ACTION_FORMULAIRE{#ENV{action}}
    11                 [<input type="hidden" name="url" id="trackbacks_url" value="(#ENV**{url})" />]
    12                 [<input type="hidden" name="title" id="trackbacks_title" value="(#ENV**{title})" />]
    13                 [<input type="hidden" name="blog_name" id="trackbacks_blog_name" value="(#ENV**{blog_name})" />]
    14                 [<input type="hidden" name="charset" id="trackbacks_charset" value="(#ENV**{charset})" />]
    15                 [<input type="hidden" name="utf8" id="trackbacks_utf8" value="(#ENV**{utf8})" />]
    1611                <ul>
     12                        [(#SAISIE{hidden,objet})]
     13                        [(#SAISIE{hidden,id_objet})]
     14                        [(#SAISIE{hidden,url})]
     15                        [(#SAISIE{hidden,title})]
     16                        [(#SAISIE{hidden,blog_name})]
     17                        [(#SAISIE{hidden,charset})]
     18                        [(#SAISIE{hidden,utf8})]
    1719                        [(#SAISIE{textarea,list_urls,
    1820                                label=<:trackbacks:label_liste_pings:>,
  • plugins_spip/trackbacks/formulaires/trackbacks.php

    r4631 r4636  
    1111                }
    1212        }
    13        
     13        $valeurs['objet'] = $objet;
     14        $valeurs['id_objet'] = $id_objet;       
    1415        $valeurs['list_urls'] = implode("\n", $donnees['liste_urls']);
    1516        $valeurs['excerpt'] = $donnees['excerpt'];
    16        
    1717        $valeurs['resultat'] = '';
    1818        $valeurs['editable'] = true;
     
    3232        if ($list_urls = _request('list_urls')) {
    3333                include_spip('action/envoi_trackback');
    34                 // recuperer les valeurs du form
    35                 $requests = array(
    36                         'url',
    37                         'title',
    38                         'blog_name',
    39                         'excerpt',
    40                         'charset',
    41                         'utf8'
    42                 );
    43                 foreach($requests as $key) {
    44                         $datas[$key] = _request($key);
    45                 }
    46                 // couper l'intro si trop longue, utile ?
    47                 if(strlen($datas['excerpt'])>255)
    48                         $datas['excerpt'] = couper($datas['excerpt'], 244);
    49                
    5034                $resultats = array();
    51                 // eviter de ping en double
     35                // eviter de pinger en double
    5236                $urls = array_unique(explode("\n", $list_urls));
    5337                // gogogo on ping
    5438                foreach($urls as $ping) {
    55                         $resultats[$ping] = envoi_trackback(trim($ping), $datas);
     39                        $resultats[$ping] = envoi_trackback(trim($ping));
    5640                }
    5741                // afficher les resultats des pings
  • plugins_spip/trackbacks/prive/contenu/trackbacks_objet.html

    r4631 r4636  
    22        <div id="pave_trackbacks_depliable" class="bloc_depliable blocreplie ajax">
    33                #FORMULAIRE_TRACKBACKS{#ENV{objet},#ENV{id_objet}}
     4                <B_pings><ul>
     5                <BOUCLE_pings(PINGS){objet}{id_objet}>
     6                        <li>#DATE - #URL_PING</li>
     7                </BOUCLE_pings>
     8                </ul></B_pings>
    49                [<a href="(#URL_ECRIRE{controle_forum,mode=trackbacks}|parametre_url{[(#ENV{objet}|id_table_objet)],#ENV{id_objet}})"><:trackbacks:icone_suivi_cet_article:></a>]
    510        </div>
Note: See TracChangeset for help on using the changeset viewer.