http://www.mediawiki.org/wiki/Special:Code/MediaWiki/82838
Revision: 82838
Author: reedy
Date: 2011-02-26 09:31:30 +0000 (Sat, 26 Feb 2011)
Log Message:
-----------
svn:eol-style native for r82829
Modified Paths:
--------------
trunk/extensions/SearchLog/SearchLog.php
Property Changed:
----------------
trunk/extensions/SearchLog/SearchLog.php
Modified: trunk/extensions/SearchLog/SearchLog.php
===================================================================
--- trunk/extensions/SearchLog/SearchLog.php 2011-02-26 09:24:29 UTC (rev
82837)
+++ trunk/extensions/SearchLog/SearchLog.php 2011-02-26 09:31:30 UTC (rev
82838)
@@ -1,140 +1,140 @@
-<?php
-# Extension:SearchLog{{php}}{{Category:Extensions|SearchLog}}
-# - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
-# - Author: [http://www.organicdesign.co.nz/nad User:Nad]
-# - Started: 2007-05-16
-
-if (!defined('MEDIAWIKI')) die('Not an entry point.');
-
-define('SEARCHLOG_VERSION','1.0.8, 2008-2-08');
-
-$wgSearchLogPath = dirname(__FILE__);
-$wgSearchLogFile =
"$wgSearchLogPath/logs/".preg_replace('/^www./','',$_SERVER['SERVER_NAME']);
-$wgSearchLogEntireLog = 'Entire log'; # Should be a message
-$wgSearchLogDateFormat = '%b %Y';
-$wgSearchLogReportHeading = "Search keywords used over '''\$1''' period"; #
Should be a message
-$wgSearchLogGroup = ''; # restrict viewing to a particular group by
setting this
-$wgExtensionFunctions[] = 'wfSetupSearchLog';
-
-$wgExtensionCredits['specialpage'][] = array(
- 'name' => 'Special:SearchLog',
- 'author' => '[http://www.organicdesign.co.nz/nad User:Nad]',
- 'description' => 'Logs usage of the search box and allows reporting of
keyword totals during given time periods',
- 'url' => 'http://www.mediawiki.org/wiki/Extension:SearchLog',
- 'version' => SEARCHLOG_VERSION
- );
-
-require_once "$IP/includes/SpecialPage.php";
-
-class SpecialSearchLog extends SpecialPage {
-
- # Constructor
- function SpecialSearchLog() {
- global $wgSearchLogGroup;
- SpecialPage::SpecialPage('SearchLog',$wgSearchLogGroup);
- }
-
- # Override SpecialPage::execute()
- function execute() {
- global
$wgOut,$wgSearchLogFile,$wgSearchLogEntireLog,$wgSearchLogReportHeading,$wgSearchLogDateFormat,$wgRequest;
- $this->setHeaders();
- $title = Title::makeTitle(NS_SPECIAL,'SearchLog');
- $period = isset($_REQUEST['period']) ? $_REQUEST['period'] :
false;
- $error = '';
-
- # Get the dates of the first and last entries for the dropdown
list range
- if ($fh = fopen($wgSearchLogFile,'r')) {
- if
(preg_match('/^([0-9]{4})([0-9]{2})[0-9]{2},/',fread($fh,16),$match))
list(,$y1,$m1) = $match;
- $len = fstat($fh);
- $len = $len['size'] % 1024;
- fseek($fh,-$len,SEEK_END);
- $end = explode("\n",fread($fh,$len));
- $end = $end[count($end)-2];
- if
(preg_match('/^([0-9]{4})([0-9]{2})[0-9]{2},/',$end,$match)) list(,$y2,$m2) =
$match;
- fclose($fh);
- }
-
- # Construct a list of months if first and last successfully
obtained
- $months = '';
- if ($y1 && $y2) while (($y1*100+$m1) <= ($y2*100+$m2)) {
- $p =
strftime($wgSearchLogDateFormat,mktime(0,0,0,$m1,1,$y1));
- $selected = $p == $period ? ' selected' : '';
- $months .= "<option$selected>$p</option>\n";
- if ($m1 == 12) { $m1 = 1; $y1++; } else $m1++;
- }
-
- # Render the months as a dropdown-list
- $wgOut->addHTML(
- "<fieldset><legend>Select time period:
</legend>"
- . wfElement('form',array('action' =>
$title->getLocalURL('action=submit'),'method' => 'POST'),null)
- . "<select
name=\"period\"><option>$wgSearchLogEntireLog</option>$months</select>"
- . wfElement('input',array('type' => 'submit'))
- . "<br /><br />"
- . wfCheckLabel("Display raw
Unicode","wpEscapeChars", "wpEscapeChars", $checked = true)
- . '</form></fieldset>'
- );
-
- # Generate a report if a period was specified
- if ($period === false) $period = $wgSearchLogEntireLog;
- if ($period) {
- $heading =
str_replace('$1',$period,$wgSearchLogReportHeading);
- $wgOut->addWikiText("== $heading ==",true);
- if ($fh = fopen($wgSearchLogFile,'r')) {
-
- # Scan the file and sum the search phrases over
the period
- $total = array();
- while (!feof($fh)) {
- if
(preg_match('/^([0-9]{4})([0-9]{2})([0-9]{2}),(.+?),(.+?),(.+?),(.+)$/',fgets($fh),$match))
{
-
list(,$y,$m,$d,$time,$user,$type,$phrase) = $match;
- $p =
strftime($wgSearchLogDateFormat,mktime(0,0,0,$m,1,$y));
- $i = strtolower(trim($phrase));
- if ($period ==
$wgSearchLogEntireLog || $period == $p) $total[$i] = isset($total[$i]) ?
++$total[$i] : 1;
- }
- }
- fclose($fh);
-
- # Render the totals in a table
- $table = "\n<table class=\"sortable\"
id=\"searchlog\">\n";
- $table .= "<tr><th>Search
phrase</th><th>Number of occurences during period</th></tr>";
- foreach ($total as $k => $v) {
- if($wgRequest->getBool('wpEscapeChars')) {
- $k = preg_replace("/&/", "&", $k);
- }
- $table .=
"<tr><td>[[$k]]</td><td>$v</td></tr>\n";
- }
- $table .= "</table>\n";
-
- } else $error = "Couldn't open log file
<tt>$wgSearchLogFile</tt>";
- if ($error) $wgOut->addWikiText($error,true);
- else $wgOut->addWikiText($table,true);
- }
- }
-
- }
-
-# Called from $wgExtensionFunctions array when initialising extensions
-function wfSetupSearchLog() {
- global $wgLanguageCode,$wgMessageCache,$wgSearchLogFile,$wgUser;
-
- # If a search has been posted, log the info
- if (isset($_REQUEST['search'])) {
- $search = $_REQUEST['search'];
- if (isset($_REQUEST['fulltext'])) $type = 'fulltext';
- elseif (isset($_REQUEST['go'])) $type = 'go';
- else $type = 'other';
-
- # Append the data to the file
- if (empty($search)) $search = $_REQUEST[$type];
- if ($fh = fopen($wgSearchLogFile,'a')) {
- $text =
date('Ymd,H:i:s,').$wgUser->getName().",$type,$search";
- fwrite($fh,"$text\n");
- fclose($fh);
- }
- }
-
- # Add the messages used by the specialpage
- $wgMessageCache->addMessages(array('searchlog' => 'Search Log'));
-
- # Add the specialpage to the environment
- SpecialPage::addPage(new SpecialSearchLog());
- }
+<?php
+# Extension:SearchLog{{php}}{{Category:Extensions|SearchLog}}
+# - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
+# - Author: [http://www.organicdesign.co.nz/nad User:Nad]
+# - Started: 2007-05-16
+
+if (!defined('MEDIAWIKI')) die('Not an entry point.');
+
+define('SEARCHLOG_VERSION','1.0.8, 2008-2-08');
+
+$wgSearchLogPath = dirname(__FILE__);
+$wgSearchLogFile =
"$wgSearchLogPath/logs/".preg_replace('/^www./','',$_SERVER['SERVER_NAME']);
+$wgSearchLogEntireLog = 'Entire log'; # Should be a message
+$wgSearchLogDateFormat = '%b %Y';
+$wgSearchLogReportHeading = "Search keywords used over '''\$1''' period"; #
Should be a message
+$wgSearchLogGroup = ''; # restrict viewing to a particular group by
setting this
+$wgExtensionFunctions[] = 'wfSetupSearchLog';
+
+$wgExtensionCredits['specialpage'][] = array(
+ 'name' => 'Special:SearchLog',
+ 'author' => '[http://www.organicdesign.co.nz/nad User:Nad]',
+ 'description' => 'Logs usage of the search box and allows reporting of
keyword totals during given time periods',
+ 'url' => 'http://www.mediawiki.org/wiki/Extension:SearchLog',
+ 'version' => SEARCHLOG_VERSION
+ );
+
+require_once "$IP/includes/SpecialPage.php";
+
+class SpecialSearchLog extends SpecialPage {
+
+ # Constructor
+ function SpecialSearchLog() {
+ global $wgSearchLogGroup;
+ SpecialPage::SpecialPage('SearchLog',$wgSearchLogGroup);
+ }
+
+ # Override SpecialPage::execute()
+ function execute() {
+ global
$wgOut,$wgSearchLogFile,$wgSearchLogEntireLog,$wgSearchLogReportHeading,$wgSearchLogDateFormat,$wgRequest;
+ $this->setHeaders();
+ $title = Title::makeTitle(NS_SPECIAL,'SearchLog');
+ $period = isset($_REQUEST['period']) ? $_REQUEST['period'] :
false;
+ $error = '';
+
+ # Get the dates of the first and last entries for the dropdown
list range
+ if ($fh = fopen($wgSearchLogFile,'r')) {
+ if
(preg_match('/^([0-9]{4})([0-9]{2})[0-9]{2},/',fread($fh,16),$match))
list(,$y1,$m1) = $match;
+ $len = fstat($fh);
+ $len = $len['size'] % 1024;
+ fseek($fh,-$len,SEEK_END);
+ $end = explode("\n",fread($fh,$len));
+ $end = $end[count($end)-2];
+ if
(preg_match('/^([0-9]{4})([0-9]{2})[0-9]{2},/',$end,$match)) list(,$y2,$m2) =
$match;
+ fclose($fh);
+ }
+
+ # Construct a list of months if first and last successfully
obtained
+ $months = '';
+ if ($y1 && $y2) while (($y1*100+$m1) <= ($y2*100+$m2)) {
+ $p =
strftime($wgSearchLogDateFormat,mktime(0,0,0,$m1,1,$y1));
+ $selected = $p == $period ? ' selected' : '';
+ $months .= "<option$selected>$p</option>\n";
+ if ($m1 == 12) { $m1 = 1; $y1++; } else $m1++;
+ }
+
+ # Render the months as a dropdown-list
+ $wgOut->addHTML(
+ "<fieldset><legend>Select time period:
</legend>"
+ . wfElement('form',array('action' =>
$title->getLocalURL('action=submit'),'method' => 'POST'),null)
+ . "<select
name=\"period\"><option>$wgSearchLogEntireLog</option>$months</select>"
+ . wfElement('input',array('type' => 'submit'))
+ . "<br /><br />"
+ . wfCheckLabel("Display raw
Unicode","wpEscapeChars", "wpEscapeChars", $checked = true)
+ . '</form></fieldset>'
+ );
+
+ # Generate a report if a period was specified
+ if ($period === false) $period = $wgSearchLogEntireLog;
+ if ($period) {
+ $heading =
str_replace('$1',$period,$wgSearchLogReportHeading);
+ $wgOut->addWikiText("== $heading ==",true);
+ if ($fh = fopen($wgSearchLogFile,'r')) {
+
+ # Scan the file and sum the search phrases over
the period
+ $total = array();
+ while (!feof($fh)) {
+ if
(preg_match('/^([0-9]{4})([0-9]{2})([0-9]{2}),(.+?),(.+?),(.+?),(.+)$/',fgets($fh),$match))
{
+
list(,$y,$m,$d,$time,$user,$type,$phrase) = $match;
+ $p =
strftime($wgSearchLogDateFormat,mktime(0,0,0,$m,1,$y));
+ $i = strtolower(trim($phrase));
+ if ($period ==
$wgSearchLogEntireLog || $period == $p) $total[$i] = isset($total[$i]) ?
++$total[$i] : 1;
+ }
+ }
+ fclose($fh);
+
+ # Render the totals in a table
+ $table = "\n<table class=\"sortable\"
id=\"searchlog\">\n";
+ $table .= "<tr><th>Search
phrase</th><th>Number of occurences during period</th></tr>";
+ foreach ($total as $k => $v) {
+ if($wgRequest->getBool('wpEscapeChars')) {
+ $k = preg_replace("/&/", "&", $k);
+ }
+ $table .=
"<tr><td>[[$k]]</td><td>$v</td></tr>\n";
+ }
+ $table .= "</table>\n";
+
+ } else $error = "Couldn't open log file
<tt>$wgSearchLogFile</tt>";
+ if ($error) $wgOut->addWikiText($error,true);
+ else $wgOut->addWikiText($table,true);
+ }
+ }
+
+ }
+
+# Called from $wgExtensionFunctions array when initialising extensions
+function wfSetupSearchLog() {
+ global $wgLanguageCode,$wgMessageCache,$wgSearchLogFile,$wgUser;
+
+ # If a search has been posted, log the info
+ if (isset($_REQUEST['search'])) {
+ $search = $_REQUEST['search'];
+ if (isset($_REQUEST['fulltext'])) $type = 'fulltext';
+ elseif (isset($_REQUEST['go'])) $type = 'go';
+ else $type = 'other';
+
+ # Append the data to the file
+ if (empty($search)) $search = $_REQUEST[$type];
+ if ($fh = fopen($wgSearchLogFile,'a')) {
+ $text =
date('Ymd,H:i:s,').$wgUser->getName().",$type,$search";
+ fwrite($fh,"$text\n");
+ fclose($fh);
+ }
+ }
+
+ # Add the messages used by the specialpage
+ $wgMessageCache->addMessages(array('searchlog' => 'Search Log'));
+
+ # Add the specialpage to the environment
+ SpecialPage::addPage(new SpecialSearchLog());
+ }
Property changes on: trunk/extensions/SearchLog/SearchLog.php
___________________________________________________________________
Added: svn:eol-style
+ native
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs