• Come inviare una vBulletin Newsletter: Parte 2

    Per inviare le Newsletter ai nostri utenti vogliamo evitare di reinventare la ruota e utilizzare possibilmente un sistema di scrittura già esistente. Ci viene di aiuto il sistema dei messaggi privati, che permette di raggiungere tutti gli utenti. La configurazione limita però questo invio, perché è impensabile dover incollare i nomi di migliaia di destinatari.


    Nei primi tempi delle email era possibile usare l'utente "all" per indirizzare tutti gli utenti. Useremo lo stesso destinatario per il nostro plugin, con una sola limitazione: soltanto gli amministratori potranno inviare email a tutti!

    Il primo passo per la realizzazione del nostro progetto è la creazione del prodotto vBulletin, che facciamo dall'ACP, in Plugin & prodotti:




    Gestione prodotti, Aggiungi/importa prodotto (collegamento in basso):




    Nuovo prodotto:



    Dopo il salvataggio troviamo la base del nostro prodotto nella lista assieme a vBulletin. Il prodotto in sé non fa nulla, ma raggruppa l'insieme di plugin e definisce alcune caratteristiche globali, quali ad esempio l'ID univoco per il forum (pmall), titolo e descrizione. Prodotti avanzati possono contenere anche procedure di aggiornamento e modifiche al database, che in questo caso non sono necessarie. Inoltre si tratta di un prodotto che dovrebbe anche funzionare in vBulletin 3.8, per cui non abbiamo impostato alcun limite di versione.

    Ora passiamo alla creazione del plugin che effettua l'invio del messaggio privato a tutti gli utenti, se il mittente appartiene al gruppo degli amministratori e se il destinatario è "all":



    Nuovo plugin:



    Nei campi a disposizone selezioniamo innanzitutto il nostro prodotto e la locazione del hook (aggancio). Inoltre incolliamo il codice seguente nello spazio di testo, e attiviamo anche il plugin:

    Codice PHP:
    if(!$vbulletin->GPC['preview'] && ($pm['recipients'] == 'all;' || $pm['recipients'] == 'all') && is_member_of($vbulletin->userinfo6))
    {
        
    $pmdm->pre_save();
        
    $errors array_merge($errors$pmdm->errors);
        if(!empty(
    $errors))
        {
            
    define('PMPREVIEW'1);
            
    $preview construct_errors($errors);
            
    $_REQUEST['do'] = 'newpm';
        }
        else
        {
            
    $SQL "INSERT INTO " TABLE_PREFIX "pmtext (
                    fromuserid, 
                    fromusername, 
                    title, 
                    message, 
                    touserarray, 
                    iconid, 
                    dateline, 
                    showsignature, 
                    allowsmilie
                ) VALUES (
                    " 
    $vbulletin->userinfo['userid'] . ", 
                    '" 
    $vbulletin->db->escape_string($vbulletin->userinfo['username']) . "', 
                    '" 
    $vbulletin->db->escape_string($pm['title']) . "', 
                    '" 
    $vbulletin->db->escape_string($pm['message']) . "', 
                    'a:0:{}', 
                    " 
    $pm['iconid'] . ", 
                    " 
    TIMENOW ", 
                    1, 
                    1
                )"
    ;
            
    $vbulletin->db->query_write($SQL);
            if(
    $pmtextid $vbulletin->db->insert_id())
            {
                
    $SQL "SELECT userid
                    FROM " 
    TABLE_PREFIX "user";
                
    $rss $vbulletin->db->query_read($SQL);
                while(
    $rs $vbulletin->db->fetch_array($rss))
                {
                    
    $SQL "INSERT DELAYED INTO " TABLE_PREFIX "pm (
                            pmtextid, 
                            userid
                        ) VALUES (
                            
    $pmtextid
                            
    $rs[userid]
                        )"
    ;
                    
    $vbulletin->db->query_write($SQL);
                }
                
    $SQL "UPDATE " TABLE_PREFIX "user 
                    SET pmtotal=pmtotal+1, pmunread=pmunread+1"
    ;
                
    $vbulletin->db->query_write($SQL);
            }
        }

    Dopo il salvataggio, il nostro primo prodotto è pronto. Per farlo funzionare, è però necessario un ulteriore passo: dobbiamo creare l'utente con il nick "all", per evitare che qualcuno lo impersoni:



    Nuovo utente, del gruppo inattivo o escluso:






    A questo punto, il prodotto è pronto per l'uso e non ci resta altro che provarlo!
    Commenti 1 Commento
    1. L'avatar di Ricsca
      Ricsca -
      Ottimo tutorial.