[ Index ] |
|
Code source de b2evolution 2.1.0-beta |
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-2007 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://evocms.cvs.sourceforge.net/) 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.43 2007/06/25 11:02:31 fplanque Exp $ 35 */ 36 if( !defined('EVO_MAIN_INIT') ) die( 'Please, do not access this page directly.' ); 37 38 39 load_funcs('_core/ui/results/_results.class.php'); 40 41 42 43 /** 44 * Archives Plugin 45 * 46 * This plugin displays 47 */ 48 class archives_plugin extends Plugin 49 { 50 /** 51 * Variables below MUST be overriden by plugin implementations, 52 * either in the subclass declaration or in the subclass constructor. 53 */ 54 55 var $name = 'Archives Widget'; 56 var $code = 'evo_Arch'; 57 var $priority = 50; 58 var $version = '1.9-dev'; 59 var $author = 'The b2evo Group'; 60 var $group = 'widget'; 61 62 63 /** 64 * Init 65 */ 66 function PluginInit( & $params ) 67 { 68 $this->short_desc = T_('This skin tag displays a list of post archives.'); 69 $this->long_desc = T_('Archives can be grouped monthly, daily, weekly or post by post.'); 70 71 $this->dbtable = 'T_items__item'; 72 $this->dbprefix = 'post_'; 73 $this->dbIDname = 'post_ID'; 74 } 75 76 77 /** 78 * Event handler: SkinTag 79 * 80 * @param array Associative array of parameters. Valid keys are: 81 * - 'block_start' : (Default: '<div class="bSideItem">') 82 * - 'block_end' : (Default: '</div>') 83 * - 'title' : (Default: T_('Archives')) 84 * - 'mode' : 'monthly'|'daily'|'weekly'|'postbypost' (Default: conf.) 85 * - 'sort_order' : 'date'|'title' (Default: date - used only if the mode is 'postbypost') 86 * - 'link_type' : 'canonic'|'context' (default: canonic) 87 * - 'context_isolation' : what params need override when changing date/range (Default: 'm,w,p,title,unit,dstart' ) 88 * - 'form' : true|false (default: false) 89 * - 'limit' : # of archive entries to display or '' (Default: 12) 90 * - 'more_link' : more link text (Default: 'More...') 91 * - 'list_start' : (Default '<ul>') 92 * - 'list_end' : (Default '</ul>') 93 * - 'line_start' : (Default '<li>') 94 * - 'line_end' : (Default '</li>') 95 * - 'day_date_format' : (Default: conf.) 96 * @return boolean did we display? 97 */ 98 function SkinTag( $params ) 99 { 100 global $month; 101 102 /** 103 * @todo get rid of this global: 104 */ 105 global $m; 106 107 /** 108 * @var Blog 109 */ 110 global $Blog; 111 112 if( empty($Blog) ) 113 { 114 return false; 115 } 116 117 /** 118 * Default params: 119 */ 120 // This is what will enclose the block in the skin: 121 if(!isset($params['block_start'])) $params['block_start'] = '<div class="bSideItem">'; 122 if(!isset($params['block_end'])) $params['block_end'] = "</div>\n"; 123 124 // Title: 125 if(!isset($params['block_title_start'])) $params['block_title_start'] = '<h3>'; 126 if(!isset($params['block_title_end'])) $params['block_title_end'] = '</h3>'; 127 if(!isset($params['title'])) $params['title'] = T_('Archives'); 128 129 // Archive mode: 130 if(!isset($params['mode'])) 131 $params['mode'] = $Blog->get_setting('archive_mode'); 132 133 //Sort order (used only in postbypost mode): 134 if($params['mode'] !='postbypost'){ 135 $params['sort_order'] = 'date'; 136 } 137 elseif(!isset($params['sort_order']) || $params['sort_order'] == '') { 138 $params['sort_order'] = 'date'; 139 } 140 141 // Link type: 142 if(!isset($params['link_type'])) $params['link_type'] = 'canonic'; 143 if(!isset($params['context_isolation'])) $params['context_isolation'] = 'm,w,p,title,unit,dstart'; 144 145 // Add form fields?: 146 if(!isset($params['form'])) 147 $params['form'] = false; 148 149 // Number of archive entries to display: 150 if(!isset($params['limit'])) $params['limit'] = 12; 151 152 // More link text: 153 if(!isset($params['more_link'])) $params['more_link'] = T_('More...'); 154 155 // This is what will enclose the list: 156 if(!isset($params['list_start'])) $params['list_start'] = '<ul>'; 157 if(!isset($params['list_end'])) $params['list_end'] = "</ul>\n"; 158 159 // This is what will separate the archive links: 160 if(!isset($params['line_start'])) $params['line_start'] = '<li>'; 161 if(!isset($params['line_end'])) $params['line_end'] = "</li>\n"; 162 163 // Daily archive date format? 164 if( (!isset($params['day_date_format'])) || ($params['day_date_format'] == '') ) 165 { 166 $dateformat = locale_datefmt(); 167 $params['day_date_format'] = $dateformat; 168 } 169 170 $ArchiveList = & new ArchiveList( $params['mode'], $params['limit'], $params['sort_order'], ($params['link_type'] == 'context'), 171 $this->dbtable, $this->dbprefix, $this->dbIDname ); 172 173 echo $params['block_start']; 174 175 if( !empty($params['title']) ) 176 { // We want to display a title for the widget block: 177 echo $params['block_title_start']; 178 echo $params['title']; 179 echo $params['block_title_end']; 180 } 181 182 echo $params['list_start']; 183 while( $ArchiveList->get_item( $arc_year, $arc_month, $arc_dayofmonth, $arc_w, $arc_count, $post_ID, $post_title) ) 184 { 185 echo $params['line_start']; 186 switch( $params['mode'] ) 187 { 188 case 'monthly': 189 // --------------------------------- MONTHLY ARCHIVES ------------------------------------- 190 $arc_m = $arc_year.zeroise($arc_month,2); 191 192 if( $params['form'] ) 193 { // We want a radio button: 194 echo '<input type="radio" name="m" value="'.$arc_m.'" class="checkbox"'; 195 if( $m == $arc_m ) echo ' checked="checked"' ; 196 echo ' /> '; 197 } 198 199 echo '<a href="'; 200 if( $params['link_type'] == 'context' ) 201 { // We want to preserve current browsing context: 202 echo regenerate_url( $params['context_isolation'], 'm='.$arc_m ); 203 } 204 else 205 { // We want to link to the absolute canonical URL for this archive: 206 echo $Blog->gen_archive_url( $arc_year, $arc_month ); 207 } 208 echo '">'; 209 210 echo T_($month[zeroise($arc_month,2)]),' ',$arc_year; 211 echo '</a> <span class="dimmed">('.$arc_count.')</span>'; 212 break; 213 214 case 'daily': 215 // --------------------------------- DAILY ARCHIVES --------------------------------------- 216 $arc_m = $arc_year.zeroise($arc_month,2).zeroise($arc_dayofmonth,2); 217 218 if( $params['form'] ) 219 { // We want a radio button: 220 echo '<input type="radio" name="m" value="'. $arc_m. '" class="checkbox"'; 221 if( $m == $arc_m ) echo ' checked="checked"' ; 222 echo ' /> '; 223 } 224 225 echo '<a href="'; 226 if( $params['link_type'] == 'context' ) 227 { // We want to preserve current browsing context: 228 echo regenerate_url( $params['context_isolation'], 'm='.$arc_m ); 229 } 230 else 231 { // We want to link to the absolute canonical URL for this archive: 232 echo $Blog->gen_archive_url( $arc_year, $arc_month, $arc_dayofmonth ); 233 } 234 echo '">'; 235 236 echo mysql2date($params['day_date_format'], $arc_year.'-'.zeroise($arc_month,2).'-'.zeroise($arc_dayofmonth,2).' 00:00:00'); 237 echo '</a> <span class="dimmed">('.$arc_count.')</span>'; 238 break; 239 240 case 'weekly': 241 // --------------------------------- WEEKLY ARCHIVES -------------------------------------- 242 echo '<a href="'; 243 if( $params['link_type'] == 'context' ) 244 { // We want to preserve current browsing context: 245 echo regenerate_url( $params['context_isolation'], 'm='.$arc_year.'&w='.$arc_w ); 246 } 247 else 248 { // We want to link to the absolute canonical URL for this archive: 249 echo $Blog->gen_archive_url( $arc_year, NULL, NULL, $arc_w ); 250 } 251 echo '">'; 252 echo $arc_year.', '.T_('week').' '.$arc_w; 253 echo '</a> <span class="dimmed">('.$arc_count.')</span>'; 254 break; 255 256 case 'postbypost': 257 default: 258 // -------------------------------- POST BY POST ARCHIVES --------------------------------- 259 echo '<a href="'; 260 if( $params['link_type'] == 'context' ) 261 { // We want to preserve current browsing context: 262 echo regenerate_url( $params['context_isolation'], 'p='.$post_ID ); 263 } 264 else 265 { // We want to link to the absolute (canonical) URL for this archive: 266 // fp> TODO: This is NOT canonical. To go to the canonical, we'd need a 'light' itemlist (which does not load too much data) 267 // fp> Note: there may be a "redirect to canonical" anyway. Not optimal, but at least this is less broken than it was before. 268 echo url_add_param( $Blog->get('url'), 'p='.$post_ID.'&more=1&c=1&tb=1&pb=1' ); 269 } 270 echo '">'; 271 if ($post_title) 272 { 273 echo strip_tags($post_title); 274 } 275 else 276 { 277 echo $post_ID; 278 } 279 echo '</a>'; 280 } 281 282 echo $params['line_end']; 283 } 284 285 // Display more link: 286 if( !empty($params['more_link']) ) 287 { 288 echo $params['line_start']; 289 echo '<a href="'; 290 $Blog->disp( 'arcdirurl', 'raw' ); 291 echo '">'.format_to_output($params['more_link']).'</a>'; 292 echo $params['line_end']; 293 } 294 295 echo $params['list_end']; 296 297 echo $params['block_end']; 298 299 return true; 300 } 301 } 302 303 304 /** 305 * Archive List Class 306 * 307 * @package evocore 308 */ 309 class ArchiveList extends Results 310 { 311 var $archive_mode; 312 var $arc_w_last; 313 314 /** 315 * Constructor 316 * 317 * Note: Weekly archives use MySQL's week numbering and MySQL default if applicable. 318 * In MySQL < 4.0.14, WEEK() always uses mode 0: Week starts on Sunday; 319 * Value range is 0 to 53; week 1 is the first week that starts in this year. 320 * 321 * @link http://dev.mysql.com/doc/mysql/en/date-and-time-functions.html 322 * 323 * @todo categories combined with 'ALL' are not supported (will output too many archives, 324 * some of which will resolve to no results). We need subqueries to support this efficiently. 325 * 326 * @param string 327 * @param integer 328 * @param boolean 329 */ 330 function ArchiveList( 331 $archive_mode = 'monthly', 332 $limit = 100, 333 $sort_order = 'date', 334 $preserve_context = false, 335 $dbtable = 'T_items__item', 336 $dbprefix = 'post_', 337 $dbIDname = 'ID' ) 338 { 339 global $DB; 340 global $blog, $cat, $catsel; 341 global $show_statuses; 342 global $author, $assgn, $status; 343 global $timestamp_min, $timestamp_max; 344 global $s, $sentence, $exact; 345 346 $this->dbtable = $dbtable; 347 $this->dbprefix = $dbprefix; 348 $this->dbIDname = $dbIDname; 349 $this->archive_mode = $archive_mode; 350 351 352 /* 353 * WE ARE GOING TO CONSTRUCT THE WHERE CLOSE... 354 */ 355 $this->ItemQuery = & new ItemQuery( $this->dbtable, $this->dbprefix, $this->dbIDname ); // TEMPORARY OBJ 356 357 // - - Select a specific Item: 358 // $this->ItemQuery->where_ID( $p, $title ); 359 360 if( $preserve_context ) 361 { // We want to preserve the current context: 362 // * - - Restrict to selected blog/categories: 363 $this->ItemQuery->where_chapter( $blog, $cat, $catsel ); 364 365 // * Restrict to the statuses we want to show: 366 $this->ItemQuery->where_visibility( $show_statuses ); 367 368 // Restrict to selected authors: 369 $this->ItemQuery->where_author( $author ); 370 371 // Restrict to selected assignees: 372 $this->ItemQuery->where_assignees( $assgn ); 373 374 // Restrict to selected satuses: 375 $this->ItemQuery->where_statuses( $status ); 376 377 // - - - + * * timestamp restrictions: 378 $this->ItemQuery->where_datestart( '', '', '', '', $timestamp_min, $timestamp_max ); 379 380 // Keyword search stuff: 381 $this->ItemQuery->where_keywords( $s, $sentence, $exact ); 382 } 383 else 384 { // We want to preserve only the minimal context: 385 // * - - Restrict to selected blog/categories: 386 $this->ItemQuery->where_chapter( $blog, '', array() ); 387 388 // * Restrict to the statuses we want to show: 389 $this->ItemQuery->where_visibility( $show_statuses ); 390 391 // - - - + * * timestamp restrictions: 392 $this->ItemQuery->where_datestart( '', '', '', '', $timestamp_min, $timestamp_max ); 393 } 394 395 396 $this->from = $this->ItemQuery->get_from(); 397 $this->where = $this->ItemQuery->get_where(); 398 $this->group_by = $this->ItemQuery->get_group_by(); 399 400 switch( $this->archive_mode ) 401 { 402 case 'monthly': 403 // ------------------------------ MONTHLY ARCHIVES ------------------------------------ 404 $sql = 'SELECT EXTRACT(YEAR FROM '.$this->dbprefix.'datestart) AS year, EXTRACT(MONTH FROM '.$this->dbprefix.'datestart) AS month, 405 COUNT(DISTINCT postcat_post_ID) AS count ' 406 .$this->from 407 .$this->where.' 408 GROUP BY year, month 409 ORDER BY year DESC, month DESC'; 410 break; 411 412 case 'daily': 413 // ------------------------------- DAILY ARCHIVES ------------------------------------- 414 $sql = 'SELECT EXTRACT(YEAR FROM '.$this->dbprefix.'datestart) AS year, MONTH('.$this->dbprefix.'datestart) AS month, 415 DAYOFMONTH('.$this->dbprefix.'datestart) AS day, 416 COUNT(DISTINCT postcat_post_ID) AS count ' 417 .$this->from 418 .$this->where.' 419 GROUP BY year, month, day 420 ORDER BY year DESC, month DESC, day DESC'; 421 break; 422 423 case 'weekly': 424 // ------------------------------- WEEKLY ARCHIVES ------------------------------------- 425 $sql = 'SELECT EXTRACT(YEAR FROM '.$this->dbprefix.'datestart) AS year, '. 426 $DB->week( $this->dbprefix.'datestart', locale_startofweek() ).' AS week, 427 COUNT(DISTINCT postcat_post_ID) AS count ' 428 .$this->from 429 .$this->where.' 430 GROUP BY year, week 431 ORDER BY year DESC, week DESC'; 432 break; 433 434 case 'postbypost': 435 default: 436 // ----------------------------- POSY BY POST ARCHIVES -------------------------------- 437 $sql = 'SELECT DISTINCT '.$this->dbIDname.', '.$this->dbprefix.'datestart, '.$this->dbprefix.'title ' 438 .$this->from 439 .$this->where 440 .$this->group_by.' 441 ORDER BY '; 442 if($sort_order == 'title'){ 443 $sql .= $this->dbprefix.'title ASC'; 444 } 445 else if($sort_order == 'date'){ 446 $sql .= $this->dbprefix.'datestart DESC'; 447 } 448 } 449 450 451 // dh> Temp fix for MySQL bug - apparently in/around 4.1.21/5.0.24. 452 // See http://forums.b2evolution.net/viewtopic.php?p=42529#42529 453 if( in_array($this->archive_mode, array('monthly', 'daily', 'weekly')) ) 454 { 455 $sql_version = $DB->get_var('SELECT VERSION()'); // fp> TODO: $DB->get_mysql_version() 456 if( version_compare($sql_version, '4', '>') ) 457 { 458 $sql = 'SELECT SQL_CALC_FOUND_ROWS '.substr( $sql, 7 ); // "SQL_CALC_FOUND_ROWS" available since MySQL 4 459 } 460 } 461 462 463 parent::Results( $sql, 'archivelist_', '', $limit ); 464 465 $this->restart(); 466 } 467 468 469 /** 470 * Count the number of rows of the SQL result 471 * 472 * These queries are complex enough for us not to have to rewrite them: 473 * dh> ??? 474 */ 475 function count_total_rows() 476 { 477 global $DB; 478 479 switch( $this->archive_mode ) 480 { 481 case 'monthly': 482 // ------------------------------ MONTHLY ARCHIVES ------------------------------------ 483 $sql_count = 'SELECT COUNT( DISTINCT EXTRACT(YEAR FROM '.$this->dbprefix.'datestart), EXTRACT(MONTH FROM '.$this->dbprefix.'datestart) ) ' 484 .$this->from 485 .$this->where; 486 break; 487 488 case 'daily': 489 // ------------------------------- DAILY ARCHIVES ------------------------------------- 490 $sql_count = 'SELECT COUNT( DISTINCT EXTRACT(YEAR FROM '.$this->dbprefix.'datestart), EXTRACT(MONTH FROM '.$this->dbprefix.'datestart), 491 EXTRACT(DAY FROM '.$this->dbprefix.'datestart) ) ' 492 .$this->from 493 .$this->where; 494 break; 495 496 case 'weekly': 497 // ------------------------------- WEEKLY ARCHIVES ------------------------------------- 498 $sql_count = 'SELECT COUNT( DISTINCT EXTRACT(YEAR FROM '.$this->dbprefix.'datestart), ' 499 .$DB->week( $this->dbprefix.'datestart', locale_startofweek() ).' ) ' 500 .$this->from 501 .$this->where; 502 break; 503 504 case 'postbypost': 505 default: 506 // ----------------------------- POSY BY POST ARCHIVES -------------------------------- 507 $sql_count = 'SELECT COUNT( DISTINCT '.$this->dbIDname.' ) ' 508 .$this->from 509 .$this->where 510 .$this->group_by; 511 } 512 513 // echo $sql_count; 514 515 $this->total_rows = $DB->get_var( $sql_count ); //count total rows 516 517 // echo 'total rows='.$this->total_rows; 518 } 519 520 521 /** 522 * Rewind resultset 523 */ 524 function restart() 525 { 526 // Make sure query has executed at least once: 527 $this->query(); 528 529 $this->current_idx = 0; 530 $this->arc_w_last = ''; 531 } 532 533 /** 534 * Getting next item in archive list 535 * 536 * WARNING: these are *NOT* Item objects! 537 */ 538 function get_item( & $arc_year, & $arc_month, & $arc_dayofmonth, & $arc_w, & $arc_count, & $post_ID, & $post_title ) 539 { 540 // echo 'getting next item<br />'; 541 542 if( $this->current_idx >= $this->result_num_rows ) 543 { // No more entry 544 return false; 545 } 546 547 $arc_row = $this->rows[ $this->current_idx++ ]; 548 549 switch( $this->archive_mode ) 550 { 551 case 'monthly': 552 $arc_year = $arc_row->year; 553 $arc_month = $arc_row->month; 554 $arc_count = $arc_row->count; 555 return true; 556 557 case 'daily': 558 $arc_year = $arc_row->year; 559 $arc_month = $arc_row->month; 560 $arc_dayofmonth = $arc_row->day; 561 $arc_count = $arc_row->count; 562 return true; 563 564 case 'weekly': 565 $arc_year = $arc_row->year; 566 $arc_w = $arc_row->week; 567 $arc_count = $arc_row->count; 568 return true; 569 570 case 'postbypost': 571 default: 572 $post_ID = $arc_row->post_ID; 573 $post_title = $arc_row->{$this->dbprefix.'title'}; 574 return true; 575 } 576 } 577 } 578 579 580 581 582 /* 583 * $Log: _archives.plugin.php,v $ 584 * Revision 1.43 2007/06/25 11:02:31 fplanque 585 * MODULES (refactored MVC) 586 * 587 * Revision 1.42 2007/05/14 02:43:06 fplanque 588 * Started renaming tables. There probably won't be a better time than 2.0. 589 * 590 * Revision 1.41 2007/05/07 18:03:27 fplanque 591 * cleaned up skin code a little 592 * 593 * Revision 1.40 2007/05/04 01:55:59 waltercruz 594 * Changing the MySQL date functions to the standart ones. 595 * Adding a sort_order parameter to archives plugins, to be used in postbypost mode, with two options: date (posts sorted by date DESC) and title (posts sorted by title ASC). 596 * 597 * Revision 1.39 2007/04/26 00:11:04 fplanque 598 * (c) 2007 599 * 600 * Revision 1.38 2007/03/25 10:20:02 fplanque 601 * cleaned up archive urls 602 * 603 * Revision 1.37 2007/01/13 18:36:24 fplanque 604 * renamed "Skin Tag" plugins into "Widget" plugins 605 * but otherwise they remain basically the same & compatible 606 * 607 * Revision 1.36 2007/01/13 16:55:00 blueyed 608 * Removed $DB member of Results class and use global $DB instead 609 * 610 * Revision 1.35 2006/12/26 03:19:12 fplanque 611 * assigned a few significant plugin groups 612 * 613 * Revision 1.34 2006/12/04 19:41:11 fplanque 614 * Each blog can now have its own "archive mode" settings 615 * 616 * Revision 1.33 2006/11/24 18:27:27 blueyed 617 * Fixed link to b2evo CVS browsing interface in file docblocks 618 * 619 * Revision 1.32 2006/11/02 19:49:22 fplanque 620 * no message 621 * 622 * Revision 1.31 2006/10/26 19:04:07 blueyed 623 * Make the SQL fix work.. 624 * 625 * Revision 1.30 2006/10/25 22:27:44 blueyed 626 * Fix for MySQL bug 627 * 628 * Revision 1.29 2006/09/10 20:59:19 fplanque 629 * extended extra path info setting 630 * 631 * Revision 1.28 2006/08/29 00:26:11 fplanque 632 * Massive changes rolling in ItemList2. 633 * This is somehow the meat of version 2.0. 634 * This branch has gone officially unstable at this point! :> 635 * 636 * Revision 1.27 2006/07/10 20:19:30 blueyed 637 * Fixed PluginInit behaviour. It now gets called on both installed and non-installed Plugins, but with the "is_installed" param appropriately set. 638 * 639 * Revision 1.26 2006/07/08 12:33:50 blueyed 640 * Fixed regression with Results' class adding an additional ORDER column to ItemList2's query 641 * 642 * Revision 1.25 2006/07/07 21:26:49 blueyed 643 * Bumped to 1.9-dev 644 * 645 * Revision 1.24 2006/06/20 00:53:07 blueyed 646 * require results class (through global)! 647 * 648 * Revision 1.23 2006/06/20 00:38:42 blueyed 649 * require results class! 650 * 651 * Revision 1.22 2006/06/16 21:30:57 fplanque 652 * Started clean numbering of plugin versions (feel free do add dots...) 653 * 654 * Revision 1.21 2006/05/30 19:39:55 fplanque 655 * plugin cleanup 656 * 657 * Revision 1.20 2006/04/19 20:14:03 fplanque 658 * do not restrict to :// (does not catch subdomains, not even www.) 659 * 660 * Revision 1.19 2006/03/12 23:09:27 fplanque 661 * doc cleanup 662 * 663 * Revision 1.18 2006/02/05 19:04:49 blueyed 664 * doc fixes 665 * 666 * Revision 1.17 2006/02/05 14:07:18 blueyed 667 * Fixed 'postbypost' archive mode. 668 * 669 * Revision 1.16 2006/01/04 20:34:51 fplanque 670 * allow filtering on extra statuses 671 * 672 * Revision 1.15 2005/12/22 23:13:40 blueyed 673 * Plugins' API changed and handling optimized 674 * 675 * Revision 1.14 2005/12/12 19:22:04 fplanque 676 * big merge; lots of small mods; hope I didn't make to many mistakes :] 677 * 678 * Revision 1.13 2005/11/01 17:47:37 yabs 679 * minor corrections to postbypost 680 * 681 * Revision 1.12 2005/10/03 18:10:08 fplanque 682 * renamed post_ID field 683 * 684 * Revision 1.11 2005/09/14 19:23:45 fplanque 685 * doc 686 * 687 * Revision 1.10 2005/09/06 19:38:29 fplanque 688 * bugfixes 689 * 690 * Revision 1.9 2005/09/06 17:14:12 fplanque 691 * stop processing early if referer spam has been detected 692 * 693 * Revision 1.8 2005/09/01 17:11:46 fplanque 694 * no message 695 * 696 * 697 * Merged in the contents of _archivelist.class.php; history below: 698 * 699 * Revision 1.11 2005/06/10 18:25:43 fplanque 700 * refactoring 701 * 702 * Revision 1.10 2005/05/24 15:26:52 fplanque 703 * cleanup 704 * 705 * Revision 1.9 2005/03/08 20:32:07 fplanque 706 * small fixes; slightly enhanced WEEK() handling 707 * 708 * Revision 1.8 2005/03/07 17:36:10 fplanque 709 * made more generic 710 * 711 * Revision 1.7 2005/02/28 09:06:32 blueyed 712 * removed constants for DB config (allows to override it from _config_TEST.php), introduced EVO_CONFIG_LOADED 713 * 714 * Revision 1.6 2005/01/03 15:17:52 fplanque 715 * no message 716 * 717 * Revision 1.5 2004/12/27 18:37:58 fplanque 718 * changed class inheritence 719 * 720 * Changed parent to Results!! 721 * 722 * Revision 1.4 2004/12/13 21:29:58 fplanque 723 * refactoring 724 * 725 * Revision 1.3 2004/11/09 00:25:11 blueyed 726 * minor translation changes (+MySQL spelling :/) 727 * 728 * Revision 1.2 2004/10/14 18:31:24 blueyed 729 * granting copyright 730 * 731 * Revision 1.1 2004/10/13 22:46:32 fplanque 732 * renamed [b2]evocore/* 733 * 734 * Revision 1.19 2004/10/11 19:02:04 fplanque 735 * Edited code documentation. 736 * 737 */ 738 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Thu Nov 29 23:58:50 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |