b2evolution

Multilingual multiuser multiblog engine

b2evolution Technical Documentation (Version 1.9) [ class tree: plugins ] [ index: plugins ] [ all elements ]

Source for file _archives.plugin.php

Documentation is available at _archives.plugin.php

  1. <?php
  2. /**
  3.  * This file implements the Archives plugin.
  4.  *
  5.  * Displays a list of post archives.
  6.  *
  7.  * This file is part of the b2evolution project - {@link http://b2evolution.net/}
  8.  *
  9.  * @copyright (c)2003-2006 by Francois PLANQUE - {@link http://fplanque.net/}
  10.  *  Parts of this file are copyright (c)2004-2006 by Daniel HAHLER - {@link http://thequod.de/contact}.
  11.  *
  12.  *  {@internal License choice
  13.  *  - If you have received this file as part of a package, please find the license.txt file in
  14.  *    the same folder or the closest folder above for complete license terms.
  15.  *  - If you have received this file individually (e-g: from http://cvs.sourceforge.net/viewcvs.py/evocms/)
  16.  *    then you must choose one of the following licenses before using the file:
  17.  *    - GNU General Public License 2 (GPL) - http://www.opensource.org/licenses/gpl-license.php
  18.  *    - Mozilla Public License 1.1 (MPL) - http://www.opensource.org/licenses/mozilla1.1.php
  19.  *  }}}
  20.  *
  21.  *  {@internal Open Source relicensing agreement:
  22.  *  Daniel HAHLER grants Francois PLANQUE the right to license
  23.  *  Daniel HAHLER's contributions to this file and the b2evolution project
  24.  *  under any OSI approved OSS license (http://www.opensource.org/licenses/).
  25.  *  }}}
  26.  *
  27.  * @package plugins
  28.  *
  29.  *  {@internal Below is a list of authors who have contributed to design/coding of this file: }}
  30.  * @author blueyed: Daniel HAHLER.
  31.  * @author fplanque: Francois PLANQUE - {@link http://fplanque.net/}
  32.  * @author cafelog (group)
  33.  *
  34.  * @version $Id: _archives.plugin.php,v 1.27.2.5 2006/12/26 03:18:50 fplanque Exp $
  35.  */
  36. if!defined('EVO_MAIN_INIT') ) die'Please, do not access this page directly.' );
  37.  
  38.  
  39. /**
  40.  * Required class
  41.  */
  42. require_once $GLOBALS['inc_path'].'_misc/_results.class.php';
  43.  
  44.  
  45. /**
  46.  * Archives Plugin
  47.  *
  48.  * This plugin displays
  49.  */
  50. class archives_plugin extends Plugin
  51. {
  52.     /**
  53.      * Variables below MUST be overriden by plugin implementations,
  54.      * either in the subclass declaration or in the subclass constructor.
  55.      */
  56.  
  57.     var $name = 'Archives Skin Tag';
  58.     var $code = 'evo_Arch';
  59.     var $priority = 50;
  60.     var $version = '1.9-dev';
  61.     var $author = 'The b2evo Group';
  62.     var $group = 'skin-tag';
  63.  
  64.  
  65.     /**
  66.      * Init
  67.      */
  68.     function PluginInit$params )
  69.     {
  70.         $this->short_desc = T_('This skin tag displays a list of post archives.');
  71.         $this->long_desc = T_('Archives can be grouped monthly, daily, weekly or post by post.');
  72.  
  73.         $this->dbtable 'T_posts';
  74.         $this->dbprefix 'post_';
  75.         $this->dbIDname 'post_ID';
  76.     }
  77.  
  78.  
  79.     /**
  80.      * Event handler: SkinTag
  81.      *
  82.      * @param array Associative array of parameters. Valid keys are:
  83.      *                 - 'block_start' : (Default: '<div class="bSideItem">')
  84.      *                 - 'block_end' : (Default: '</div>')
  85.      *                 - 'title' : (Default: '<h3>'.T_('Archives').'</h3>')
  86.      *                 - 'mode' : 'monthly'|'daily'|'weekly'|'postbypost' (Default: conf.)
  87.      *                 - 'link_type' : 'canonic'|'context' (default: canonic)
  88.      *                 - 'context_isolation' : what params need override when changing date/range (Default: 'm,w,p,title,unit,dstart' )
  89.      *                 - 'form' : true|false (default: false)
  90.      *                 - 'limit' : # of archive entries to display or '' (Default: 12)
  91.      *                 - 'more_link' : more link text (Default: 'More...')
  92.      *                 - 'list_start' : (Default '<ul>')
  93.      *                 - 'list_end' : (Default '</ul>')
  94.      *                 - 'line_start' : (Default '<li>')
  95.      *                 - 'line_end' : (Default '</li>')
  96.      *                 - 'day_date_format' : (Default: conf.)
  97.      * @return boolean did we display?
  98.      */
  99.     function SkinTag$params )
  100.     {
  101.          global $Settings$month;
  102.  
  103.         /**
  104.          * @todo get rid of these globals:
  105.          */
  106.         global $blog$Blog$m;
  107.  
  108.         /**
  109.          * Default params:
  110.          */
  111.         // This is what will enclose the block in the skin:
  112.         if(!isset($params['block_start'])) $params['block_start''<div class="bSideItem">';
  113.         if(!isset($params['block_end'])) $params['block_end'"</div>\n";
  114.  
  115.         // Title:
  116.         if(!isset($params['title']))
  117.             $params['title''<h3>'.T_('Archives').'</h3>';
  118.  
  119.         // Archive mode:
  120.         if(!isset($params['mode']))
  121.             $params['mode'$Settings->get('archive_mode');
  122.  
  123.         // Link type:
  124.         if(!isset($params['link_type'])) $params['link_type''canonic';
  125.         if(!isset($params['context_isolation'])) $params['context_isolation''m,w,p,title,unit,dstart';
  126.  
  127.         // Add form fields?:
  128.         if(!isset($params['form']))
  129.             $params['form'false;
  130.  
  131.         // Number of archive entries to display:
  132.         if(!isset($params['limit'])) $params['limit'12;
  133.  
  134.         // More link text:
  135.         if(!isset($params['more_link'])) $params['more_link'T_('More...');
  136.  
  137.         // This is what will enclose the list:
  138.         if(!isset($params['list_start'])) $params['list_start''<ul>';
  139.         if(!isset($params['list_end'])) $params['list_end'"</ul>\n";
  140.  
  141.         // This is what will separate the archive links:
  142.         if(!isset($params['line_start'])) $params['line_start''<li>';
  143.         if(!isset($params['line_end'])) $params['line_end'"</li>\n";
  144.  
  145.         // Daily archive date format?
  146.         if( (!isset($params['day_date_format'])) || ($params['day_date_format'== '') )
  147.         {
  148.              $dateformat locale_datefmt();
  149.             $params['day_date_format'$dateformat;
  150.         }
  151.  
  152.         $ArchiveList new ArchiveList$params['mode']$params['limit']($params['link_type'== 'context'),
  153.                                                                             $this->dbtable$this->dbprefix$this->dbIDname );
  154.  
  155.         echo $params['block_start'];
  156.  
  157.         echo $params['title'];
  158.  
  159.         echo $params['list_start'];
  160.         while$ArchiveList->get_item$arc_year$arc_month$arc_dayofmonth$arc_w$arc_count$post_ID$post_title) )
  161.         {
  162.             echo $params['line_start'];
  163.             switch$params['mode')
  164.             {
  165.                 case 'monthly':
  166.                     // --------------------------------- MONTHLY ARCHIVES -------------------------------------
  167.                     $arc_m $arc_year.zeroise($arc_month,2);
  168.  
  169.                     if$params['form')
  170.                     // We want a radio button:
  171.                         echo '<input type="radio" name="m" value="'.$arc_m.'" class="checkbox"';
  172.                         if$m == $arc_m echo ' checked="checked"' ;
  173.                         echo ' /> ';
  174.                     }
  175.  
  176.                     echo '<a href="';
  177.                     if$params['link_type'== 'context' )
  178.                     {    // We want to preserve current browsing context:
  179.                         echo regenerate_url$params['context_isolation']'m='.$arc_m );
  180.                     }
  181.                     else
  182.                     {    // We want to link to the absolute canonical URL for this archive:
  183.                         archive_link$arc_year$arc_month );
  184.                     }
  185.                     echo '">';
  186.  
  187.                     echo T_($month[zeroise($arc_month,2)]),' ',$arc_year;
  188.                     echo '</a> <span class="dimmed">('.$arc_count.')</span>';
  189.                     break;
  190.  
  191.                 case 'daily':
  192.                     // --------------------------------- DAILY ARCHIVES ---------------------------------------
  193.                     $arc_m $arc_year.zeroise($arc_month,2).zeroise($arc_dayofmonth,2);
  194.  
  195.                     if$params['form')
  196.                     // We want a radio button:
  197.                         echo '<input type="radio" name="m" value="'$arc_m'" class="checkbox"';
  198.                         if$m == $arc_m echo ' checked="checked"' ;
  199.                         echo ' /> ';
  200.                     }
  201.  
  202.                     echo '<a href="';
  203.                     if$params['link_type'== 'context' )
  204.                     {    // We want to preserve current browsing context:
  205.                         echo regenerate_url$params['context_isolation']'m='.$arc_m );
  206.                     }
  207.                     else
  208.                     {    // We want to link to the absolute canonical URL for this archive:
  209.                         archive_link$arc_year$arc_month$arc_dayofmonth );
  210.                     }
  211.                     echo '">';
  212.  
  213.                     echo mysql2date($params['day_date_format']$arc_year.'-'.zeroise($arc_month,2).'-'.zeroise($arc_dayofmonth,2).' 00:00:00');
  214.                     echo '</a> <span class="dimmed">('.$arc_count.')</span>';
  215.                     break;
  216.  
  217.                 case 'weekly':
  218.                     // --------------------------------- WEEKLY ARCHIVES --------------------------------------
  219.                     echo '<a href="';
  220.                     if$params['link_type'== 'context' )
  221.                     {    // We want to preserve current browsing context:
  222.                         echo regenerate_url$params['context_isolation']'m='.$arc_year.'&amp;w='.$arc_w );
  223.                     }
  224.                     else
  225.                     {    // We want to link to the absolute canonical URL for this archive:
  226.                         archive_link$arc_year''''$arc_w );
  227.                     }
  228.                     echo '">';
  229.                     echo $arc_year.', '.T_('week').' '.$arc_w;
  230.                     echo '</a> <span class="dimmed">('.$arc_count.')</span>';
  231.                     break;
  232.  
  233.                 case 'postbypost':
  234.                 default:
  235.                     // -------------------------------- POST BY POST ARCHIVES ---------------------------------
  236.                     echo '<a href="';
  237.                     if$params['link_type'== 'context' )
  238.                     {    // We want to preserve current browsing context:
  239.                         echo regenerate_url$params['context_isolation']'p='.$post_ID );
  240.                     }
  241.                     else
  242.                     {    // We want to link to the absolute canonical URL for this archive:
  243.                         echo get_permalink$Blog->get('url')$post_ID'id' );
  244.                     }
  245.                     echo '">';
  246.                     if ($post_title)
  247.                     {
  248.                         echo strip_tags($post_title);
  249.                     }
  250.                     else
  251.                     {
  252.                         echo $post_ID;
  253.                     }
  254.                     echo '</a>';
  255.             }
  256.  
  257.             echo $params['line_end'];
  258.         }
  259.  
  260.         // Display more link:
  261.         if!empty($params['more_link']) )
  262.         {
  263.             echo $params['line_start'];
  264.             echo '<a href="';
  265.             $Blog->disp'arcdirurl''raw' );
  266.             echo '">'.format_to_output($params['more_link']).'</a>';
  267.             echo $params['line_end'];
  268.         }
  269.  
  270.         echo $params['list_end'];
  271.  
  272.         echo $params['block_end'];
  273.  
  274.         return true;
  275.     }
  276. }
  277.  
  278.  
  279. /**
  280.  * Archive List Class
  281.  *
  282.  * @package evocore
  283.  */
  284. class ArchiveList extends Results
  285. {
  286.     var $archive_mode;
  287.     var $arc_w_last;
  288.  
  289.     /**
  290.      * Constructor
  291.      *
  292.      * Note: Weekly archives use MySQL's week numbering and MySQL default if applicable.
  293.      * In MySQL < 4.0.14, WEEK() always uses mode 0: Week starts on Sunday;
  294.      * Value range is 0 to 53; week 1 is the first week that starts in this year.
  295.      *
  296.      * @link http://dev.mysql.com/doc/mysql/en/date-and-time-functions.html
  297.      *
  298.      * @todo categories combined with 'ALL' are not supported (will output too many archives,
  299.      *  some of which will resolve to no results). We need subqueries to support this efficiently.
  300.      *
  301.      * @param string 
  302.      * @param integer 
  303.      * @param boolean 
  304.      */
  305.     function ArchiveList(
  306.         $archive_mode 'monthly',
  307.         $limit 100,
  308.         $preserve_context false,
  309.         $dbtable 'T_posts',
  310.         $dbprefix 'post_',
  311.         $dbIDname 'ID' )
  312.     {
  313.         global $DB$Settings;
  314.         global $blog$cat$catsel;
  315.         global $show_statuses;
  316.         global $author$assgn$status;
  317.         global $timestamp_min$timestamp_max;
  318.         global $s$sentence$exact;
  319.  
  320.         $this->dbtable $dbtable;
  321.         $this->dbprefix $dbprefix;
  322.         $this->dbIDname $dbIDname;
  323.         $this->archive_mode = $archive_mode;
  324.  
  325.  
  326.         /*
  327.          * WE ARE GOING TO CONSTRUCT THE WHERE CLOSE...
  328.          */
  329.         $this->ItemQuery new ItemQuery$this->dbtable$this->dbprefix$this->dbIDname )// TEMPORARY OBJ
  330.  
  331.         // - - Select a specific Item:
  332.         // $this->ItemQuery->where_ID( $p, $title );
  333.  
  334.         if$preserve_context )
  335.         {    // We want to preserve the current context:
  336.             // * - - Restrict to selected blog/categories:
  337.             $this->ItemQuery->where_chapter$blog$cat$catsel );
  338.  
  339.             // * Restrict to the statuses we want to show:
  340.             $this->ItemQuery->where_visibility$show_statuses );
  341.  
  342.             // Restrict to selected authors:
  343.             $this->ItemQuery->where_author$author );
  344.  
  345.             // Restrict to selected assignees:
  346.             $this->ItemQuery->where_assignees$assgn );
  347.  
  348.             // Restrict to selected satuses:
  349.             $this->ItemQuery->where_statuses$status );
  350.  
  351.             // - - - + * * timestamp restrictions:
  352.             $this->ItemQuery->where_datestart''''''''$timestamp_min$timestamp_max );
  353.  
  354.             // Keyword search stuff:
  355.             $this->ItemQuery->where_keywords$s$sentence$exact );
  356.         }
  357.         else
  358.         {    // We want to preserve only the minimal context:
  359.             // * - - Restrict to selected blog/categories:
  360.             $this->ItemQuery->where_chapter$blog''array() );
  361.  
  362.             // * Restrict to the statuses we want to show:
  363.             $this->ItemQuery->where_visibility$show_statuses );
  364.  
  365.             // - - - + * * timestamp restrictions:
  366.             $this->ItemQuery->where_datestart''''''''$timestamp_min$timestamp_max );
  367.         }
  368.  
  369.  
  370.         $this->from $this->ItemQuery->get_from();
  371.         $this->where $this->ItemQuery->get_where();
  372.         $this->group_by $this->ItemQuery->get_group_by();
  373.  
  374.         switch$this->archive_mode )
  375.         {
  376.             case 'monthly':
  377.                 // ------------------------------ MONTHLY ARCHIVES ------------------------------------
  378.                 $sql 'SELECT YEAR('.$this->dbprefix.'datestart) AS year, MONTH('.$this->dbprefix.'datestart) AS month,
  379.                                                                     COUNT(DISTINCT postcat_post_ID) AS count '
  380.                                                     .$this->from
  381.                                                     .$this->where.'
  382.                                                     GROUP BY year, month
  383.                                                     ORDER BY year DESC, month DESC';
  384.                 break;
  385.  
  386.             case 'daily':
  387.                 // ------------------------------- DAILY ARCHIVES -------------------------------------
  388.                 $sql 'SELECT YEAR('.$this->dbprefix.'datestart) AS year, MONTH('.$this->dbprefix.'datestart) AS month,
  389.                                                                     DAYOFMONTH('.$this->dbprefix.'datestart) AS day,
  390.                                                                     COUNT(DISTINCT postcat_post_ID) AS count '
  391.                                                     .$this->from
  392.                                                     .$this->where.'
  393.                                                     GROUP BY year, month, day
  394.                                                     ORDER BY year DESC, month DESC, day DESC';
  395.                 break;
  396.  
  397.             case 'weekly':
  398.                 // ------------------------------- WEEKLY ARCHIVES -------------------------------------
  399.                 $sql 'SELECT YEAR('.$this->dbprefix.'datestart) AS year, '.
  400.                                                             $DB->week$this->dbprefix.'datestart'locale_startofweek() ).' AS week,
  401.                                                             COUNT(DISTINCT postcat_post_ID) AS count '
  402.                                                     .$this->from
  403.                                                     .$this->where.'
  404.                                                     GROUP BY year, week
  405.                                                     ORDER BY year DESC, week DESC';
  406.                 break;
  407.  
  408.             case 'postbypost':
  409.             default:
  410.                 // ----------------------------- POSY BY POST ARCHIVES --------------------------------
  411.                 $sql 'SELECT DISTINCT '.$this->dbIDname.', '.$this->dbprefix.'datestart, '.$this->dbprefix.'title '
  412.                                                     .$this->from
  413.                                                     .$this->where
  414.                                                     .$this->group_by.'
  415.                                                     ORDER BY '.$this->dbprefix.'datestart DESC';
  416.         }
  417.  
  418.  
  419.         // dh> Temp fix for MySQL bug - apparently in/around 4.1.21/5.0.24.
  420.         // See http://forums.b2evolution.net/viewtopic.php?p=42529#42529
  421.         ifin_array($this->archive_modearray('monthly''daily''weekly')) )
  422.         {
  423.             $sql_version $DB->get_var('SELECT VERSION()');
  424.             ifversion_compare($sql_version'4''>') )
  425.             {
  426.                 $sql 'SELECT SQL_CALC_FOUND_ROWS '.substr$sql)// "SQL_CALC_FOUND_ROWS" available since MySQL 4
  427.             }
  428.         }
  429.  
  430.  
  431.         parent::Results$sql'archivelist_'''$limit );
  432.  
  433.         $this->restart();
  434.     }
  435.  
  436.  
  437.     /**
  438.      * Count the number of rows of the SQL result
  439.      *
  440.      * These queries are complex enough for us not to have to rewrite them:
  441.      */
  442.     function count_total_rows()
  443.     {
  444.         global $DB;
  445.  
  446.         switch$this->archive_mode )
  447.         {
  448.             case 'monthly':
  449.                 // ------------------------------ MONTHLY ARCHIVES ------------------------------------
  450.                 $sql_count 'SELECT COUNT( DISTINCT YEAR('.$this->dbprefix.'datestart), MONTH('.$this->dbprefix.'datestart) ) '
  451.                                                     .$this->from
  452.                                                     .$this->where;
  453.                 break;
  454.  
  455.             case 'daily':
  456.                 // ------------------------------- DAILY ARCHIVES -------------------------------------
  457.                 $sql_count 'SELECT COUNT( DISTINCT YEAR('.$this->dbprefix.'datestart), MONTH('.$this->dbprefix.'datestart),
  458.                                                                     DAYOFMONTH('.$this->dbprefix.'datestart) ) '
  459.                                                     .$this->from
  460.                                                     .$this->where;
  461.                 break;
  462.  
  463.             case 'weekly':
  464.                 // ------------------------------- WEEKLY ARCHIVES -------------------------------------
  465.                 $sql_count 'SELECT COUNT( DISTINCT YEAR('.$this->dbprefix.'datestart), '
  466.                                                     .$DB->week$this->dbprefix.'datestart'locale_startofweek() ).' ) '
  467.                                                     .$this->from
  468.                                                     .$this->where;
  469.                 break;
  470.  
  471.             case 'postbypost':
  472.             default:
  473.                 // ----------------------------- POSY BY POST ARCHIVES --------------------------------
  474.                 $sql_count 'SELECT COUNT( DISTINCT '.$this->dbIDname.' ) '
  475.                                                     .$this->from
  476.                                                     .$this->where
  477.                                                     .$this->group_by;
  478.         }
  479.  
  480.         // echo $sql_count;
  481.  
  482.         $this->total_rows $this->DB->get_var$sql_count )//count total rows
  483.  
  484.         // echo 'total rows='.$this->total_rows;
  485.     }
  486.  
  487.  
  488.     /**
  489.      * Rewind resultset
  490.      */
  491.     function restart()
  492.     {
  493.         // Make sure query has executed at least once:
  494.         $this->query();
  495.  
  496.         $this->current_idx 0;
  497.         $this->arc_w_last = '';
  498.     }
  499.  
  500.     /**
  501.      * Getting next item in archive list
  502.      *
  503.      * WARNING: these are *NOT* Item objects!
  504.      */
  505.     function get_item$arc_year$arc_month$arc_dayofmonth$arc_w$arc_count$post_ID$post_title )
  506.     {
  507.         // echo 'getting next item<br />';
  508.  
  509.         if$this->current_idx >= $this->result_num_rows )
  510.         {    // No more entry
  511.             return false;
  512.         }
  513.  
  514.         $arc_row $this->rows$this->current_idx++ ];
  515.  
  516.         switch$this->archive_mode )
  517.         {
  518.             case 'monthly':
  519.                 $arc_year  $arc_row->year;
  520.                 $arc_month $arc_row->month;
  521.                 $arc_count $arc_row->count;
  522.                 return true;
  523.  
  524.             case 'daily':
  525.                 $arc_year  $arc_row->year;
  526.                 $arc_month $arc_row->month;
  527.                 $arc_dayofmonth $arc_row->day;
  528.                 $arc_count $arc_row->count;
  529.                 return true;
  530.  
  531.             case 'weekly':
  532.                 $arc_year  $arc_row->year;
  533.                 $arc_w $arc_row->week;
  534.                 $arc_count $arc_row->count;
  535.                 return true;
  536.  
  537.             case 'postbypost':
  538.             default:
  539.                 $post_ID $arc_row->post_ID;
  540.                 $post_title $arc_row->{$this->dbprefix.'title'};
  541.                 return true;
  542.         }
  543.     }
  544. }
  545.  
  546.  
  547. /*
  548.  * $Log: _archives.plugin.php,v $
  549.  * Revision 1.27.2.5  2006/12/26 03:18:50  fplanque
  550.  * assigned a few significant plugin groups
  551.  *
  552.  * Revision 1.27.2.4  2006/11/04 19:55:11  fplanque
  553.  * Reinjected old Log blocks. Removing them from CVS was a bad idea -- especially since Daniel has decided branch 1.9 was his HEAD...
  554.  *
  555.  * Revision 1.27  2006/07/10 20:19:30  blueyed
  556.  * Fixed PluginInit behaviour. It now gets called on both installed and non-installed Plugins, but with the "is_installed" param appropriately set.
  557.  *
  558.  * Revision 1.26  2006/07/08 12:33:50  blueyed
  559.  * Fixed regression with Results' class adding an additional ORDER column to ItemList2's query
  560.  *
  561.  * Revision 1.25  2006/07/07 21:26:49  blueyed
  562.  * Bumped to 1.9-dev
  563.  *
  564.  * Revision 1.24  2006/06/20 00:53:07  blueyed
  565.  * require results class (through global)!
  566.  *
  567.  * Revision 1.23  2006/06/20 00:38:42  blueyed
  568.  * require results class!
  569.  *
  570.  * Revision 1.22  2006/06/16 21:30:57  fplanque
  571.  * Started clean numbering of plugin versions (feel free do add dots...)
  572.  *
  573.  * Revision 1.21  2006/05/30 19:39:55  fplanque
  574.  * plugin cleanup
  575.  *
  576.  * Revision 1.20  2006/04/19 20:14:03  fplanque
  577.  * do not restrict to :// (does not catch subdomains, not even www.)
  578.  *
  579.  * Revision 1.19  2006/03/12 23:09:27  fplanque
  580.  * doc cleanup
  581.  *
  582.  * Revision 1.18  2006/02/05 19:04:49  blueyed
  583.  * doc fixes
  584.  *
  585.  * Revision 1.17  2006/02/05 14:07:18  blueyed
  586.  * Fixed 'postbypost' archive mode.
  587.  *
  588.  * Revision 1.16  2006/01/04 20:34:51  fplanque
  589.  * allow filtering on extra statuses
  590.  *
  591.  * Revision 1.15  2005/12/22 23:13:40  blueyed
  592.  * Plugins' API changed and handling optimized
  593.  *
  594.  * Revision 1.14  2005/12/12 19:22:04  fplanque
  595.  * big merge; lots of small mods; hope I didn't make to many mistakes :]
  596.  *
  597.  * Revision 1.13  2005/11/01 17:47:37  yabs
  598.  * minor corrections to postbypost
  599.  *
  600.  * Revision 1.12  2005/10/03 18:10:08  fplanque
  601.  * renamed post_ID field
  602.  *
  603.  * Revision 1.11  2005/09/14 19:23:45  fplanque
  604.  * doc
  605.  *
  606.  * Revision 1.10  2005/09/06 19:38:29  fplanque
  607.  * bugfixes
  608.  *
  609.  * Revision 1.9  2005/09/06 17:14:12  fplanque
  610.  * stop processing early if referer spam has been detected
  611.  *
  612.  * Revision 1.8  2005/09/01 17:11:46  fplanque
  613.  * no message
  614.  *
  615.  *
  616.  * Merged in the contents of _archivelist.class.php; history below:
  617.  *
  618.  * Revision 1.11  2005/06/10 18:25:43  fplanque
  619.  * refactoring
  620.  *
  621.  * Revision 1.10  2005/05/24 15:26:52  fplanque
  622.  * cleanup
  623.  *
  624.  * Revision 1.9  2005/03/08 20:32:07  fplanque
  625.  * small fixes; slightly enhanced WEEK() handling
  626.  *
  627.  * Revision 1.8  2005/03/07 17:36:10  fplanque
  628.  * made more generic
  629.  *
  630.  * Revision 1.7  2005/02/28 09:06:32  blueyed
  631.  * removed constants for DB config (allows to override it from _config_TEST.php), introduced EVO_CONFIG_LOADED
  632.  *
  633.  * Revision 1.6  2005/01/03 15:17:52  fplanque
  634.  * no message
  635.  *
  636.  * Revision 1.5  2004/12/27 18:37:58  fplanque
  637.  * changed class inheritence
  638.  *
  639.  * Changed parent to Results!!
  640.  *
  641.  * Revision 1.4  2004/12/13 21:29:58  fplanque
  642.  * refactoring
  643.  *
  644.  * Revision 1.3  2004/11/09 00:25:11  blueyed
  645.  * minor translation changes (+MySQL spelling :/)
  646.  *
  647.  * Revision 1.2  2004/10/14 18:31:24  blueyed
  648.  * granting copyright
  649.  *
  650.  * Revision 1.1  2004/10/13 22:46:32  fplanque
  651.  * renamed [b2]evocore/*
  652.  *
  653.  * Revision 1.19  2004/10/11 19:02:04  fplanque
  654.  * Edited code documentation.
  655.  *
  656.  */
  657. ?>

Documentation generated on Tue, 18 Dec 2007 19:10:27 +0100 by phpDocumentor 1.4.0