Какие инструменты доступны для обобщения изменений в MediaWiki? - PullRequest
1 голос
/ 03 марта 2011

Мы используем MediaWiki на работе, и чтобы поощрять его более широкое использование, я хочу настроить еженедельное сводное электронное письмо о последних изменениях в записях, но я не смог ничего найти в Интернете. Существуют ли доступные инструменты для сбора изменений недели в вики и их обобщения?

Я хочу настроить скрипт, который собирает, скажем, 5 отредактированных страниц, 5 отредактированных страниц и, возможно, три случайных страницы. Надежда состоит в том, что люди увидят что-то новое, о чем они не знают, или обновят страницу, которая может не вызывать особой заботы.

Ответы [ 2 ]

0 голосов
/ 03 марта 2011

Что-то, что я бросил вместе только на днях. Быстро и грязно, просто читает последние изменения и предоставляет ссылки на самые популярные из них числа всем, у кого есть адрес электронной почты в базе данных. Установить как работу cron. Очевидно, я запутал URL компании, имя базы данных, пользователя и пароль.

#!/usr/local/bin/php.cli
<?php
/*
*   File                :
*   Function(s)         :
*   Calls/Invokes       :
*   Called By           :
*   Parameters/Input    : 
*   Requires            : 
*   Purpose             : 
*   Date                : 
*
*/

$ToAddr = 'thedeveloper@somewhere.com';
$subject = 'Wiki - Recent Changes Notice';
$dtFormat = "Y/m/d H:i:s";
$message = 'Hello from somewhere.com at ' . date($dtFormat) . "\n\n";

    $headers = 'From: DontReply@somewhere.com' . "\n" .
    'Reply-To: webmaster@somewhere.com' . "\n" .
    'X-Mailer: PHP/' . phpversion();

    $host = 'localhost';


    $db   = 'name_of_database_wikidb';
    $rc_Table = 'recentchanges';    
    $user = 'tester';   
    $pass = 'password'; // to mySql
    $link_preface = 'http://www.somewhere.com/wiki/';
    $NumDays = 5;

    $output = '';
    $output = '<html><head><title>SQL Mail Test</title></head><body>';

    $link = mysql_connect($host, $user, $pass);
    if ( !$link ) { return "<hr><b>Error while connecting to host \"$host\" !</b><hr>"; }
    mysql_select_db($db, $link);


    $theList = get_Email_List($query, $link);

        $query = 'SELECT rc_title AS Page, rc_user_text AS Editor, 
                  DATE_FORMAT(rc_timestamp,"%d/%m/%Y %T") AS "When", 
                  rc_comment AS Notes FROM ' . $rc_Table . ' 
                  WHERE DATE_SUB(CURDATE(),INTERVAL ' . $NumDays . ' DAY) <= date(rc_timestamp) 
                  and rc_title not like "Junk%"
                  and rc_title not like "Sandbox"
                  GROUP BY Page 
                  ORDER BY rc_timestamp DESC';

        $result = mysql_query($query, $link);
        if (!$result){
            $message  = 'Invalid query: ' . mysql_error() . "\n";
            $message .= 'Whole query: ' . $query;
            die($message);
        }

        if (mysql_num_rows($result) <> 0) {
            $output .= "<table>";
            $output .= "<tr>";
            $output .= "<td width=\"300px\">";
            $output .= "</td>";
            $output .= "<td>";
            $output .= "<br>";
            $output .= "<table border=1>";
            $output .= "<th><b>Page</b></th>";
            $output .= "<th><b>Editor</b></th>";
            $output .= "<th><b>When</b></th>";
            $output .= "<th><b>Notes</b></th>";


            $fp = @fopen('specialnotice.txt', 'r');
            if (!$fp) {
                //$message .=  "\n" .' No Special Notice Today.';
            }
            else {
                clearstatcache();
                $message .= 'Special Notice:' . "\n\n";             
                while (!feof($fp)) {
                    $message .=  fgets($fp, 4096);          
                }           
                echo '</textarea>';
                fclose($fp);
                $message .= "\n";               
            }

            $message .= "\n" .'This is your daily notice of Recently Changed or New pages for the past ' . $NumDays . ' days:' . "\n\n";

            $line = mysql_fetch_array($result, MYSQL_ASSOC);        
            mysql_data_seek($result, 0);
            while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
                $output .= "<tr>";        
                $numf = mysql_num_fields($result);
                for ($i=0; $i < $numf; $i++); {
                    $output .= "<td><a href=" . '"' . $link_preface . "$line[Page]". '"' .">$line[Page]</a></td>";
                    $output .= "<td>$line[Editor]</td>";                    
                    $output .= "<td>$line[When]</td>";
                    $output .= "<td>$line[Notes]</td>";

                    $message .= $link_preface . "$line[Page]";                  
                    /*
                    $message .= '<html><body><a href=';
                    $message .= '"'. $link_preface . $line[Page].'">';
                    $message .=  $line[Page] .  '</a></body></html>';
                    */
                    $message .= ' by ' . $line[Editor] .',';                    
                    $message .= ' At: ' . $line[When];                  
                    $message .= ' Notes: ' . $line[Notes];
                    $message .= "\n";
                }            
                $output .= "</tr>";
            }           
            $output .= "</table>";
            $output .= "<br>";          
            $output .= "</td>";
            $output .= "</tr>";
            $output .= "</table>";
            $output .= '</body></html>';

        }
        else {
            $output .= "Sorry, nada. ";

        }   
    #echo $output;    

    mysql_close($link);

#   $message = $output; // check html output
    $result = 'Failure';
    $dummy = mail($theList, $subject, $message, $headers); // send regular article list to mailing list
#   $dummy = mail($ToAddr, $subject, $message, $headers);  // send regular article list to developer
#   $dummy = mail($ToAddr, $subject, $theList, $headers);  // send mailing list to developer
    if ($dummy){
        $result = 'Success';
    }   
    $output2 = '    ';
    $output2 .= '   
    <html>
    <head>
      <title>Mail Test</title>
    </head>
    <body>';
      $output2 .= $result;
      $output2 .= ' at ' . date($dtFormat);
      $output2 .= '
    </body>
    </html>
    ';
    echo $output2;    

    function get_Email_List($query, $link) {

        $query = 'SELECT CAST(user_email AS CHAR(100) CHARACTER SET utf8) as addr FROM `user` WHERE 1';
        $result = mysql_query($query, $link);
        $emails = ' ';
        if (!$result){
            $message  = 'Invalid query: ' . mysql_error() . "\n";
            $message .= 'Whole query: ' . $query;
            die($message);
        }

        if (mysql_num_rows($result) <> 0) {     
            $line = mysql_fetch_array($result, MYSQL_ASSOC);        
            mysql_data_seek($result, 0);
            while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
                if (!empty($line[addr])) {
                   $emails .= $line[addr] . ',';
                }
            }       
            $emails = rtrim($emails, ',');          
            $emails = ltrim($emails, ',');          
        }
        return $emails;
    }
?>
0 голосов
/ 03 марта 2011

Вы можете настроить RSS-канал в MediaWiki и соответствующего потребителя (большинство браузеров имеют программы чтения RSS-каналов), а затем суммировать интересные события для вашей еженедельной электронной почты.

Я редактирую Википедию и использую RSS для отслеживания элементов в моем списке наблюдения. Отлично работает!

...