Revision [7913]
This is an old revision of AdvancedReferrersHandler made by DarTar on 2005-05-05 13:46:44.
Advanced Referrers Handler
See also:
Documentation: AdvancedReferrersHandlerInfo.The referrer lists generated by WikkaWiki on high-traffic servers become easily unmanageable, due to their ever growing size. Of course you can limit the volume of the referrers by changing the referrer_purge_time in the ConfigurationOptions. To increase the legibility of the referrer list without purging the DB, I've modified the referrer handlers to allow searching and filtering the list.
Preview
Here's an example of how the new interface looks like:
External pages linking to HomePage (last 7 days) (see list of domains):
Note to spammers: This page is not indexed by search engines, so don't waste your time.
[View global referring sites | View global referrers | View referrer blacklist]
Note to spammers: This page is not indexed by search engines, so don't waste your time.
[View global referring sites | View global referrers | View referrer blacklist]
The code
First you will need to modify the LoadReferrers() function in wikka.php:
original
- function LoadReferrers($tag = "")
- {
- return $this->LoadAll("select referrer, count(referrer) as num from ".$this->config["table_prefix"]."referrers ".($tag = trim($tag) ? "where page_tag = '".mysql_real_escape_string($tag)."'" : "")." group by referrer order by num desc");
- }
modified
- function LoadReferrers($tag = '', $query)
- {
- return $this->LoadAll("SELECT referrer, COUNT(referrer) AS num FROM ".$this->config["table_prefix"]."referrers WHERE ".(($tag = trim($tag))? "page_tag = '".mysql_real_escape_string($tag)."'" : "1").$query);
- }
Then, you'll have to replace the referrers.php and referrers_sites.php files (in the ./handlers/page/ folder) with the following:
referrers.php
- <div class="page">
- <?php
- /**
- * Display, filter and search the referrer list for the current page
- *
- * Usage: append /referrers to the URL of the page
- *
- * This handler allows users to display, filter and search the referrer list for
- * the current page and for the whole site. Current search criteria include strings,
- * number of hits, reference period.
- *
- * @package Handlers
- * @subpackage
- * @name referrers
- *
- * @author {@link http://wikka.jsnx.com/DarTar Dario Taraborelli} - code cleanup, search/filter functionality added.
- * @version 0.1
- * @since Wikka 1.1.6.X
- *
- */
- //constants
- //initializing variables
- $q = ''; #search string
- $qo = ''; #search string option
- $h = ''; #hits number
- $ho = ''; #hits option
- $option = '';
- $hits_option = '';
- $n ='';
- $days = '';
- $max_days = $this->GetConfigValue('referrers_purge_time');
- $query = '';
- $global = '';
- //getting POST parameters
- // restrict MySQL query by search string, time and number of hits
- $option = ($qo == '1')? 'LIKE' : 'NOT LIKE'; #set search string operator
- $hits_option = ($ho == '1')? '>' : '<'; #set hits operator
- // build query from chunks
- //$query = 'WHERE ';
- //$query .= ($tag = trim($tag) ? 'page_tag = "'.mysql_real_escape_string($tag).'"' : '1'); #filter by tag
- $query .= ' AND TO_DAYS(NOW()) - TO_DAYS(time) <= '.mysql_real_escape_string($days); #filter by time
- $query .= ' GROUP BY referrer ';
- $query .= ' ORDER BY num desc'; # set order
- $IsAdmin = $this->IsAdmin();
- if ($global == 1)
- {
- $title = "Sites linking to this wiki ".
- ($days ? " (last ".($days == 1 ? "24 hours" : $days." days").")" : "")." (<a href=\"".$this->Href("referrers_sites", "", "global=1")."\">see list of domains</a>):";
- $referrers = $this->LoadReferrers('', $query);
- }
- else
- {
- ($days ? " (last ".($days == 1 ? "24 hours" : $days." days").")" : "")." (<a href=\"".$this->Href("referrers_sites")."\">see list of domains</a>):";
- $referrers = $this->LoadReferrers($this->GetPageTag(), $query);
- }
- print("<strong>$title</strong><br />\n");
- print("<em>Note to spammers: This page is not indexed by search engines, so don't waste your time.</em><br />");
- //print 'Query: '.$query.'<br />'; #debug
- //print 'Global: '.$global; #debug
- //print links
- if ($global == 1)
- {
- print("<br />[<a href=\"".$this->href("referrers_sites")."\">View referring sites for ".$this->GetPageTag()." only</a> | <a href=\"".$this->href("referrers")."\">View referrers for ".$this->GetPageTag()." only</a> | <a href=\"".$this->href("review_blacklist")."\">View referrer blacklist</a>]<br /><br />");
- }
- else
- {
- print("<br />[<a href=\"".$this->href("referrers_sites", "", "global=1")."\">View global referring sites</a> | <a href=\"".$this->href("referrers", "", "global=1")."\">View global referrers</a> | <a href=\"".$this->href("review_blacklist")."\">View referrer blacklist</a>]<br /><br />");
- }
- // build form
- $form = $this->FormOpen('referrers','','post');
- $form .= '<table style="border: 1px solid #666; padding: 2pt; margin: 5pt">';
- $form .= '<tr><td><strong>Display referrers</strong></td>';
- $form .= '<td><select name="qo" title="Select search option">';
- $form .= '<option value="1" '.(($qo == '1')? 'selected = "selected"' : '').'>containing</option>';
- $form .= '<option value="0" '.(($qo == '0')? 'selected = "selected"' : '').'>not containing</option>';
- $form .= '</select> ';
- $form .= 'string: <input type ="text" name="q" title="Enter a search string" size="10" maxlength="50" value="'.$q.'"/></td><tr>';
- $form .= '<tr><td></td><td>with ';
- $form .= '<select name="ho" title="Select filter option">';
- $form .= '<option value="1" '.(($ho == '1')? 'selected = "selected"' : '').'>more</option>';
- $form .= '<option value="0" '.(($ho == '0')? 'selected = "selected"' : '').'>less</option>';
- $form .= '</select> ';
- $form .= ' than: <input type ="text" name="h" title="Enter number of hits" size="10" maxlength="5" value="'.$h.'"/> hits</td></tr>';
- $form .= '<tr><td></td><td>for the last <select name="days" title="Select time interval">';
- // build drop-down menu
- for ($n = 1; $n < ($max_days+RECORD_LIMIT_STEP); $n+=RECORD_LIMIT_STEP) {
- $selected = ($n == $days)? 'selected="selected"' : '';
- $form .= '<option value="'.$n.'" '.$selected.'>'.$n.'</option>';
- }
- $form .= '</select> days</td></tr>';
- $form .= '<tr><td></td><td><input type="submit" value="Submit" title="Click to query the referrer list" accesskey="a" /></td></tr>';
- $form .= '</table>';
- $form .= '<input type="hidden" name="global" value="'.$global.'" />';
- $form .= $this->FormClose();
- echo $form;
- echo '<p> </p>';
- if ($this->GetUser()) {
- if ($referrers)
- {
- print("<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
- foreach ($referrers as $referrer)
- {
- print("<tr>");
- print("<td width=\"30\" align=\"right\" valign=\"top\" style=\"padding-right: 10px\">".$referrer["num"]."</td>");
- print("<td valign=\"top\"><a href=\"".$this->htmlspecialchars_ent($referrer["referrer"])."\">".$this->htmlspecialchars_ent($referrer["referrer"])."</a> ".($IsAdmin ? "[<a href=\"".$this->href("delete_referrer", "", "spam_link=").$this->htmlspecialchars_ent($referrer["referrer"])."&redirect=".$this->GetMethod()."\">Blacklist</a>]" : "")."</td>");
- print("</tr>\n");
- }
- print("</table>\n");
- }
- else
- {
- print("<em>None</em><br />\n");
- }
- } else {
- print("<em>You need to login to see referring sites</em><br />\n");
- }
- if ($global == 1)
- {
- print("<br />[<a href=\"".$this->href("referrers_sites")."\">View referring sites for ".$this->GetPageTag()." only</a> | <a href=\"".$this->href("referrers")."\">View referrers for ".$this->GetPageTag()." only</a> | <a href=\"".$this->href("review_blacklist")."\">View referrer blacklist</a>]");
- }
- else
- {
- print("<br />[<a href=\"".$this->href("referrers_sites", "", "global=1")."\">View global referring sites</a> | <a href=\"".$this->href("referrers", "", "global=1")."\">View global referrers</a> | <a href=\"".$this->href("review_blacklist")."\">View referrer blacklist</a>]");
- }
- ?>
- </div>
referrers_sites.php
- <div class="page">
- <?php
- /**
- * Display, filter and search the domain list for the current page
- *
- * Usage: append /referrers_sites to the URL of the page
- *
- * This handler allows users to display, filter and search the referrer list for
- * the current page and for the whole site. Current search criteria include strings,
- * number of hits, reference period.
- *
- * @package Handlers
- * @subpackage
- * @name referrers_sites
- *
- * @author {@link http://wikka.jsnx.com/DarTar Dario Taraborelli} - code cleanup, search/filter functionality added.
- * @version 0.1
- * @since Wikka 1.1.6.X
- *
- */
- //constants
- //initializing variables
- $q = ''; #search string
- $qo = ''; #search string option
- $h = ''; #hits number
- $ho = ''; #hits option
- $option = '';
- $hits_option = '';
- $n ='';
- $days = '';
- $max_days = $this->GetConfigValue('referrers_purge_time');
- $query = '';
- $global = '';
- //getting POST parameters
- // restrict MySQL query by search string, time and number of hits
- $option = ($qo == '1')? 'LIKE' : 'NOT LIKE'; #set search string operator
- $hits_option = ($ho == '1')? '>=' : '<='; #set hits operator
- // build query from chunks
- //$query = 'WHERE ';
- //$query .= ($tag = trim($tag) ? 'page_tag = "'.mysql_real_escape_string($tag).'"' : '1'); #filter by tag
- $query .= ' AND TO_DAYS(NOW()) - TO_DAYS(time) <= '.mysql_real_escape_string($days); #filter by time
- $query .= ' GROUP BY referrer ';
- $query .= ' ORDER BY num desc'; # set order
- $IsAdmin = $this->IsAdmin();
- if ($global == 1)
- {
- $title = "Domains/sites linking to this wiki ".
- ($days ? " (last ".($days == 1 ? "24 hours" : $days." days").")" : "")." (<a href=\"".$this->Href("referrers", "", "global=1")."\">see list of different URLs</a>):";
- $referrers = $this->LoadReferrers('', $query);
- }
- else
- {
- ($days ? " (last ".($days == 1 ? "24 hours" : $days." days").")" : "")." (<a href=\"".$this->Href("referrers")."\">see list of different URLs</a>):";
- $referrers = $this->LoadReferrers($this->GetPageTag(), $query);
- }
- print("<strong>$title</strong><br />\n");
- print("<em>Note to spammers: This page is not indexed by search engines, so don't waste your time.</em><br />");
- //print 'Query: '.$query.'<br />'; #debug
- //print 'Global: '.$global; #debug
- //print links
- if ($global == 1)
- {
- print("<br />[<a href=\"".$this->Href("referrers_sites")."\">View referring sites for ".$this->GetPageTag()." only</a> | <a href=\"".$this->Href("referrers")."\">View referrers for ".$this->GetPageTag()." only</a> | <a href=\"".$this->Href("review_blacklist")."\">View referrer blacklist</a>]<br /><br />");
- }
- else
- {
- print("<br />[<a href=\"".$this->Href("referrers_sites", "", "global=1")."\">View global referring sites</a> | <a href=\"".$this->Href("referrers", "", "global=1")."\">View global referrers</a> | <a href=\"".$this->Href("review_blacklist")."\">View referrer blacklist</a>]<br /><br />");
- }
- // build form
- $form = $this->FormOpen('referrers_sites','','post');
- $form .= '<table style="border: 1px solid #666; padding: 2pt; margin: 5pt">';
- $form .= '<tr><td><strong>Display domains</strong></td>';
- $form .= '<td><select name="qo" title="Select search option">';
- $form .= '<option value="1" '.(($qo == '1')? 'selected = "selected"' : '').'>containing</option>';
- $form .= '<option value="0" '.(($qo == '0')? 'selected = "selected"' : '').'>not containing</option>';
- $form .= '</select> ';
- $form .= 'string: <input type ="text" name="q" title="Enter a search string" size="10" maxlength="50" value="'.$q.'"/></td><tr>';
- $form .= '<tr><td></td><td>with ';
- $form .= '<select name="ho" title="Select filter option">';
- $form .= '<option value="1" '.(($ho == '1')? 'selected = "selected"' : '').'>more</option>';
- $form .= '<option value="0" '.(($ho == '0')? 'selected = "selected"' : '').'>less</option>';
- $form .= '</select> ';
- $form .= ' than: <input type ="text" name="h" title="Enter number of hits" size="10" maxlength="5" value="'.$h.'"/> hits</td></tr>';
- $form .= '<tr><td></td><td>for the last <select name="days" title="Select time interval">';
- // build drop-down menu
- for ($n = 1; $n < ($max_days+RECORD_LIMIT_STEP); $n+=RECORD_LIMIT_STEP) {
- $selected = ($n == $days)? 'selected="selected"' : '';
- $form .= '<option value="'.$n.'" '.$selected.'>'.$n.'</option>';
- }
- $form .= '</select> days</td></tr>';
- $form .= '<tr><td></td><td><input type="submit" value="Submit" title="Click to query the referrer list" accesskey="a" /></td></tr>';
- $form .= '</table>';
- $form .= '<input type="hidden" name="global" value="'.$global.'" />';
- $form .= $this->FormClose();
- echo $form;
- echo '<p> </p>';
- if ($this->GetUser()) {
- if ($referrers)
- {
- {
- $temp_parse_url = ($temp_parse_url["host"] != "") ? strtolower(preg_replace("/^www\./Ui", "", $temp_parse_url["host"])) : "unknown";
- {
- $referrer_sites["$temp_parse_url"] += $referrers[$a]["num"];
- }
- else
- {
- $referrer_sites["$temp_parse_url"] = $referrers[$a]["num"];
- }
- }
- print("<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
- foreach ($referrer_sites as $site => $site_count)
- {
- print("<tr>");
- print("<td width=\"30\" align=\"right\" valign=\"top\" style=\"padding-right: 10px\">$site_count</td>");
- print("<td valign=\"top\">" . (($site != "unknown") ? "<a href=\"http://".$this->htmlspecialchars_ent($site)."\">".$this->htmlspecialchars_ent($site)."</a>" : $site) . "</a> ".($IsAdmin ? "[<a href=\"".$this->href("delete_referrer", "", "spam_site=").$this->htmlspecialchars_ent($site)."&redirect=".$this->GetMethod()."\">Blacklist</a>]" : "")."</td>");
- print("</tr>\n");
- }
- print("</table>\n");
- }
- else
- {
- print("<em>None</em><br />\n");
- }
- } else {
- print("<em>You need to login to see referring sites</em><br />\n");
- }
- if ($global == 1)
- {
- print("<br />[<a href=\"".$this->Href("referrers_sites")."\">View referring sites for ".$this->GetPageTag()." only</a> | <a href=\"".$this->Href("referrers")."\">View referrers for ".$this->GetPageTag()." only</a> | <a href=\"".$this->Href("review_blacklist")."\">View referrer blacklist</a>]");
- }
- else
- {
- print("<br />[<a href=\"".$this->Href("referrers_sites", "", "global=1")."\">View global referring sites</a> | <a href=\"".$this->Href("referrers", "", "global=1")."\">View global referrers</a> | <a href=\"".$this->Href("review_blacklist")."\">View referrer blacklist</a>]");
- }
- ?>
- </div>
CategoryDevelopment