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->userinfo, 6))
{
$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);
}
}
}
Nuovo utente, del gruppo inattivo o escluso:
A questo punto, il prodotto è pronto per l'uso e non ci resta altro che provarlo!
Messaggio vBulletin