Autore: Fabio Di Matteo
Ultima revisione: 17/09/2008
Potrebbe capitare di voler usare il software cms Dokuwiki per creare un blog e si potrebbe avere l'esigenza di attivare il plugin per i commenti (Discussion). E fin qui nulla di strano, tranne che non esiste un sistema di notifica dei commenti, ovvero se non si va a guardare nel blog non si sarà informati sull'invio di nuovi commenti.
Lo scopo di questa guida e' creare un sistema di notifica dei commenti e fare in modo che i commenti inviati vengano pubblicati solo dopo che l'amministratore li abbia moderati.
Il sistema di notifica dei commenti farà le seguenti cose:
Per prima cosa è necessario installare il plugin Discussion dopodichè si dovrà provvedere a modificare il file {dokuwiki}/lib/plugins/discussion/action.php
aggiungendo il codice qui sotto dentro la funzione function _notify($comment, $subscribers)
:
Ecco solo il codice da aggiungere,nella funzione function _notify($comment, $subscribers)
invece nel paragra successivo pubblico la funzione nella sua interezza (contenuta sempre nel file {dokuwiki}/lib/plugins/discussion/action.php
.
//Notifica sempre all'amministratore $replace = array( $ID, $conf['title'], strftime($conf['dformat'], $comment['date']['created']), $comment['user']['name'], $comment['raw'], wl($ID, '', true) . '#comment__' . $comment['cid'], wl($ID, 'do=unsubscribe&hash=' . $hash, true, '&'), DOKU_URL, ); $admin_mails="admin@fml.org"; $body = str_replace($search, $replace, $text); mail_send($admin_mails, $subject, $body, $conf['mailfrom']); //fine notifica all'amministratore
Non e' il caso di scrivere le istruzioni per implementare il sistema dei log, in quanto i log di tutti i commenti stanno nel file {dokuwiki}/data/meta/_comments.changes
.
Codice relativo alla versione al plugin Discussion 2008-08-08 .
function _notify($comment, $subscribers) { global $conf; global $ID; $text = io_readfile($this->localfn('subscribermail')); $subject = '['.$conf['title'].'] '.$this->getLang('mail_newcomment'); $search = array( '@PAGE@', '@TITLE@', '@DATE@', '@NAME@', '@TEXT@', '@COMMENTURL@', '@UNSUBSCRIBE@', '@DOKUWIKIURL@', ); // notify page subscribers if (($conf['subscribers']) && ($conf['notify'])) { $bcc = subscriber_addresslist($ID); $to = $conf['notify']; $replace = array( $ID, $conf['title'], strftime($conf['dformat'], $comment['date']['created']), $comment['user']['name'], $comment['raw'], wl($ID, '', true) . '#comment__' . $comment['cid'], wl($ID, 'do=unsubscribe', true, '&'), DOKU_URL, ); $body = str_replace($search, $replace, $text); mail_send($to, $subject, $body, $conf['mailfrom'], '', $bcc); } // notify comment subscribers if (!empty($subscribers)) { foreach($subscribers as $mail => $hash) { $to = $mail; $replace = array( $ID, $conf['title'], strftime($conf['dformat'], $comment['date']['created']), $comment['user']['name'], $comment['raw'], wl($ID, '', true) . '#comment__' . $comment['cid'], wl($ID, 'do=unsubscribe&hash=' . $hash, true, '&'), DOKU_URL, ); $body = str_replace($search, $replace, $text); mail_send($to, $subject, $body, $conf['mailfrom']); } } //Notifica sempre all'amministratore $replace = array( $ID, $conf['title'], strftime($conf['dformat'], $comment['date']['created']), $comment['user']['name'], $comment['raw'], wl($ID, '', true) . '#comment__' . $comment['cid'], wl($ID, 'do=unsubscribe&hash=' . $hash, true, '&'), DOKU_URL, ); $admin_mails="admin@fml.com"; $body = str_replace($search, $replace, $text); mail_send($admin_mails, $subject, $body, $conf['mailfrom']); //fine notifica all'amministratore }
Per far in modo che i commenti non vengano pubblicati immediatamente, ma piuttosto vengano resi invisibili in attesa della moderazione dell'amministratore e' sufficente editare il file action.php
nella funzione function _add($comment, $parent)
con le seguenti istruzioni
... // fill in the new comment $data['comments'][$cid] = array( 'user' => $comment['user'], 'date' => array('created' => $date), 'show' => false, 'raw' => $comment['raw'], 'xhtml' => $xhtml, 'parent' => $parent, 'replies' => array() ); ...
Da notare 'show' ⇒ false .