b2evolution

Multilingual multiuser multiblog engine

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

Source for file _blog_main.inc.php

Documentation is available at _blog_main.inc.php

  1. <?php
  2. /**
  3.  * This file loads and initializes the blog to be displayed.
  4.  *
  5.  * This file is part of the b2evolution/evocms project - {@link http://b2evolution.net/}.
  6.  * See also {@link http://sourceforge.net/projects/evocms/}.
  7.  *
  8.  * @copyright (c)2003-2006 by Francois PLANQUE - {@link http://fplanque.net/}.
  9.  *  Parts of this file are copyright (c)2004-2005 by Daniel HAHLER - {@link http://thequod.de/contact}.
  10.  *  Parts of this file are copyright (c)2004-2005 by The University of North Carolina at Charlotte as
  11.  *  contributed by Jason Edgecombe {@link http://tst.uncc.edu/team/members/jason_bio.php}.
  12.  *
  13.  * @license http://b2evolution.net/about/license.html GNU General Public License (GPL)
  14.  *
  15.  *  {@internal Open Source relicensing agreement:
  16.  *  Daniel HAHLER grants Francois PLANQUE the right to license
  17.  *  Daniel HAHLER's contributions to this file and the b2evolution project
  18.  *  under any OSI approved OSS license (http://www.opensource.org/licenses/).
  19.  *
  20.  *  The University of North Carolina at Charlotte grants Francois PLANQUE the right to license
  21.  *  Jason EDGECOMBE's contributions to this file and the b2evolution project
  22.  *  under the GNU General Public License (http://www.opensource.org/licenses/gpl-license.php)
  23.  *  and the Mozilla Public License (http://www.opensource.org/licenses/mozilla1.1.php).
  24.  *  }}}
  25.  *
  26.  * @package main
  27.  *
  28.  *  {@internal Below is a list of authors who have contributed to design/coding of this file: }}
  29.  * @author blueyed: Daniel HAHLER
  30.  * @author fplanque: Francois PLANQUE
  31.  * @author jeffbearer: Jeff BEARER
  32.  * @author jwedgeco: Jason EDGECOMBE (for hire by UNC-Charlotte)
  33.  * @author edgester: Jason EDGECOMBE (personal contributions, not for hire)
  34.  *
  35.  *  {@internal Below is a list of former authors whose contributions to this file have been
  36.  *             either removed or redesigned and rewritten anew:
  37.  *             - cafelog (team)
  38.  *             - t3dworld
  39.  *  }}}
  40.  *
  41.  * @version $Id: _blog_main.inc.php,v 1.28.2.8 2006/12/01 01:57:49 fplanque Exp $
  42.  */
  43. if!defined('EVO_CONFIG_LOADED') ) die'Please, do not access this page directly.' );
  44.  
  45.  
  46. /**
  47.  * Initialize everything:
  48.  */
  49. require_once dirname(__FILE__).'/_main.inc.php';
  50. require_once $model_path.'items/_itemlist2.class.php';
  51.  
  52. $Timer->start'_blog_main.inc' );
  53.  
  54. // Getting GET or POST parameters:
  55. $Request->param'blog''integer'0true );  // Can't use $default_to_blog because the param must always be included in regenerate_url() when present
  56. $Request->param'p''integer'''true );              // Specific post number to display
  57. $Request->param'title''string'''true );                        // urtitle of post to display
  58. $Request->param'm''integer'''true );              // YearMonth(Day) to display
  59. $Request->param'w''integer'-1true );              // Week number
  60. $Request->param'dstart''integer'''true );         // YearMonth(Day) to start at
  61. $Request->param'unit''string'''true );            // list unit: 'posts' or 'days'
  62.  
  63. $Request->param'cat''/^[*\-]?([0-9]+(,[0-9]+)*)?$/'''true )// List of cats to restrict to
  64. $Request->param'catsel''array'array()true );  // Array of cats to restrict to
  65. foreach$catsel as $k => $v )
  66. // make sure this are all integers, to prevent SQL injection! TODO: use param( , 'array[integer]' )
  67.     $catsel[$k= (int)$v;
  68. }
  69. $Request->set_param'catsel'$catsel );
  70. // Let's compile those values right away (we use them in several different places):
  71. $cat_array array();
  72. $cat_modifier '';
  73. compile_cat_array$cat$catsel/* by ref */ $cat_array/* by ref */ $cat_modifier$blog == $blog );
  74.  
  75. $Request->param'author''/^-?[0-9]+(,[0-9]+)*$/'''true );         // List of authors to restrict to
  76.  
  77. $Request->param'order''string''DESC'true );       // ASC or DESC
  78. $Request->param'orderby''string'''true );         // list of fields to order by
  79.  
  80. $Request->param'posts''integer'0true );           // # of units to display on the page
  81. $Request->param'paged''integer'''true );          // List page number in paged display
  82.  
  83. $Request->param'poststart''integer'''true );      // Start results at this position
  84. $Request->param'postend''integer'''true );        // End results at this position
  85.  
  86. $Request->param's''string'''true );               // Search string
  87. $Request->param'sentence''string''AND'true );     // Search for sentence or for words
  88. $Request->param'exact''integer'''true );          // Require exact match of title or contents
  89.  
  90. $Request->param'preview''integer'0true );         // Is this preview ?
  91.  
  92. $Request->param'calendar''string'''true );        // Display a specific month in the calendar
  93.  
  94. $Request->param'page''integer'''true );
  95. $Request->param'more''integer'0true );
  96.  
  97. $Request->param'c''string'''true );
  98. $Request->param'tb''integer'0true );
  99. $Request->param'pb''integer'0true );
  100.  
  101. $Request->param'disp''string''posts'true );
  102. $Request->param'stats''integer');                 // deprecated
  103.  
  104. $Request->param'tempskin''string'''true );
  105.  
  106.  
  107. if!isset($timestamp_min) ) $timestamp_min '';
  108. if!isset($timestamp_max) ) $timestamp_max '';
  109.  
  110. if$preview )
  111. // Ignore this hit
  112.     $Hit->ignore true;
  113. }
  114.  
  115. ifempty($disp) )
  116. // Conversion support for old params:
  117.     if$c == 'last')
  118.     // Translate old last comments caller
  119.         $disp 'comments';
  120.     }
  121.     elseif$stats )
  122.     // Translate old stats caller
  123.         $disp 'stats';
  124.     }
  125. }
  126.  
  127. if$disp == 'stats' )
  128. {
  129.     require $view_path.'errors/_410_stats_gone.page.php'// error & exit
  130. }
  131.  
  132. // Getting current blog info:
  133. $Blog $BlogCache->get_by_ID$blog );
  134.  
  135.  
  136. /*
  137.     TODO: blueyed>> This should get moved as default to the locale detection in _main.inc.php,
  138.             as we only want to activate the I/O charset, which is probably the user's..
  139.             It prevents using a locale/charset in the front office, apart from the one given as default for the blog!!
  140. fp>there is no blog defined in _main and there should not be any
  141. blueyed> Sure, but that means we should either split it, or use the locale here only, if there's no-one given with higher priority.
  142. */
  143. // Activate matching locale:
  144. $Debuglog->add'Activating blog locale: '.$Blog->get('locale')'locale' );
  145. locale_activate$Blog->get('locale') );
  146.  
  147.  
  148. // Re-Init charset handling, in case current_charset has changed:
  149. ifinit_charsets$current_charset ) )
  150. {
  151.   // Reload Blog(s) (for encoding of name, tagline etc):
  152.   $BlogCache->clear();
  153.   $Blog $BlogCache->get_by_ID$blog );
  154.  
  155.   // old way ($blogparams), just in case:
  156.   $cache_blogs array();
  157. }
  158.  
  159.  
  160. // -------------------------
  161. // Extra path info decoding:
  162. // -------------------------
  163. ifisset$resolve_extra_path ) ) $resolve_extra_path true}
  164. if$resolve_extra_path )
  165. {
  166.     // Check and Remove blog base URI from ReqPath:
  167.     $blog_baseuri substr$Blog->get('baseurl')strlen$Blog->get('baseurlroot') ) );
  168.     $Debuglog->add'blog_baseuri: "'.$blog_baseuri.'"''params' );
  169.  
  170.     if( ($pos strpos$ReqPath$blog_baseuri )) !== false )
  171.     // note: $pos will typically be 0
  172.         $path_string substr$ReqPath$pos+strlen$blog_baseuri ) );
  173.  
  174.         $Debuglog->add'Extra path info found! path_string=' $path_string 'params' );
  175.         //echo "path=[$path_string]<br />";
  176.  
  177.         // Slice the path:
  178.         $path_split explode'/'$path_string20 );
  179.  
  180.         // Remove empty slots:
  181.         $path_elements array();
  182.         foreach$path_split as $path_element )
  183.         {
  184.             if!empty$path_element ) )
  185.             {
  186.                 $path_elements[$path_element;
  187.             }
  188.         }
  189.         // echo count( $path_elements );
  190.  
  191.         $path_error 0;
  192.         $i=0;
  193.         // echo $path_elements[$i];
  194.         ifisset$path_elements[$i&& preg_match'#.+\.php[0-9]?#'$path_elements[$i) ) // QUESTION: add "$" at the end of the pattern to avoid false matches?
  195.         // Ignore *.php
  196.             $i++;
  197.             $Debuglog->add'Ignoring *.php in extra path info' 'params' );
  198.         }
  199.  
  200.         ifisset$path_elements[$i&& preg_match'#^'.$Blog->get'stub' ).'(\.php)?$#'$path_elements[$i)  )
  201.         // Ignore stub file
  202.             $i++;
  203.             $Debuglog->add'Ignoring stub file in extra path info' 'params' );
  204.         }
  205.  
  206.         // echo $path_elements[$i];
  207.         ifisset$path_elements[$i) )
  208.         {
  209.             ifis_numeric$path_elements[$i) )
  210.             // We'll consider this to be the year
  211.                 $m $path_elements[$i++];
  212.                 $Debuglog->add'Setting year from extra path info. $m=' $m 'params' );
  213.  
  214.                 ifisset$path_elements[$i&& is_numeric$path_elements[$i) )
  215.                 // We'll consider this to be the month
  216.                     $m .= $path_elements[$i++];
  217.                     $Debuglog->add'Setting month from extra path info. $m=' $m 'params' );
  218.  
  219.                     ifisset$path_elements[$i&& is_numeric$path_elements[$i) )
  220.                     // We'll consider this to be the day
  221.                         $m .= $path_elements[$i++];
  222.                         $Debuglog->add'Setting day from extra path info. $m=' $m 'params' );
  223.  
  224.                         ifisset$path_elements[$i&& (!empty$path_elements[$i)) )
  225.                         // We'll consider this to be a ref to a post
  226.                             // We are accessing a post by permalink
  227.                             // Set a lot of defaults as if we had received a complex URL:
  228.                             $m '';
  229.                             $more 1// Display the extended entries' text
  230.                             $c 1;    // Display comments
  231.                             $tb 1;   // Display trackbacks
  232.                             $pb 1;   // Display pingbacks
  233.  
  234.                             ifpreg_match"#^p([0-9]+)$#"$path_elements[$i]$req_post ) )
  235.                             // The last param is of the form p000
  236.                                 // echo 'post number';
  237.                                 $p $req_post[1];        // Post to display
  238.                             }
  239.                             else
  240.                             // Last param is a string, we'll consider this to be a post urltitle
  241.                                 $title $path_elements[$i];
  242.                                 // echo 'post title : ', $title;
  243.                             }
  244.                         }
  245.                     }
  246.                 }
  247.                 elseifisset$path_elements[$i&& substr$path_elements[$i]0== 'w' )
  248.                 // We consider this a week number
  249.                     $w substr$path_elements[$i]1);
  250.                 }
  251.             }
  252.             else
  253.             {    // We did not get a number/year...
  254.                 $path_error 404;
  255.             }
  256.         }
  257.  
  258.         if$path_error == 404 )
  259.         {    // The request points to something we won't be able to resolve:
  260.  
  261.             // First check, if it's an old-style backoffice-Path (from a redirect-everything non-existing to index.php mod_rewrite rule):
  262.             ifstrpos$ReqPath'/admin/' === )
  263.             {
  264.                 // Redirect to admin url and pass request_uri as path_info, so it can be resolved by admin.php to the right menu entry:
  265.                 header'Location: '.$admin_url.'/'.substr($ReqURI7) );
  266.                 exit;
  267.             }
  268.  
  269.             require $view_path.'errors/_404_not_found.page.php'// error & exit
  270.         }
  271.     }
  272. }
  273.  
  274. if( (!empty($p)) || (!empty($title)) || (!empty($preview)) )
  275. // We are going to display a single post
  276.     $disp 'single';
  277. }
  278.  
  279. ifempty$disp ) )
  280. // default display:
  281.     $disp 'posts';
  282. }
  283.  
  284. if( ($disp == 'posts'|| ($disp == 'single') )
  285. // If we are going to display posts and not something special...
  286.  
  287.     // On single post requests, check if we're on the right blog!
  288.     if$redirect_to_postblog && $disp == 'single' && $preview )
  289.     // Yes we need to check.
  290.         if!empty($p) )
  291.             $Item $ItemCache->get_by_ID$pfalse );
  292.         else
  293.             $Item $ItemCache->get_by_urltitle$titlefalse );
  294.  
  295.         if( ($Item !== false&& ($Item->blog_ID != $blog) )
  296.         // We're on the wrong blog (probably an old permalink) let's redirect
  297.             $new_permalink $Item->get_permanent_url''''false'&' );
  298.  
  299.             header ("Location: $new_permalink");
  300.             exit();
  301.         }
  302.     }
  303.  
  304.     // Note: even if we request the same post, the following will do more restrictions (dates, etc.)
  305.     // TODO: There's a bug here with using $catsel (instead of $cat_array), which I've reported to dev-ML (don't remember). Francois, please look into it.
  306.     $MainList new ItemList(
  307.         $blog$show_statuses$p$m$w$cat$catsel$author$order,
  308.         $orderby$posts$paged$poststart$postend$s$sentence$exact,
  309.         $preview$unit$timestamp_min$timestamp_max$title$dstart );
  310.     $MainList->get_max_paged();
  311.  
  312.     // Old style globals for category.funcs:
  313.     $postIDlist $MainList->postIDlist;
  314.     $postIDarray $MainList->postIDarray;
  315. }
  316.  
  317. // Default display params:
  318.  
  319. // Displaying of blog list on templates?
  320. if!isset($display_blog_list) )
  321. // If not already set in stub:
  322.     $display_blog_list $Blog->get('disp_bloglist');
  323. }
  324.  
  325.  
  326. /*
  327.  * Now, we'll jump to displaying!
  328.  */
  329.  
  330. // Trigger plugin event:
  331. $Plugins->trigger_event'BeforeBlogDisplay' );
  332.  
  333. // Check if a temporary skin has been requested (used for RSS syndication for example):
  334. if!empty($tempskin) )
  335. {
  336.     // This will be handled like any other skin, except that it will not be stored in a cookie:
  337.     $skin $tempskin;
  338.     $default_skin '_rss'// That's gonna be the fallback for now.
  339.     // TODO [post-phoenix]: fp> decide when or when not you are allowed to override a 'force_skin' directive,
  340.     //   and when or when not you are allowed to fall back to $default_skin.
  341.     // TODO: dh> there should be no $default_skin and with an invalid $tempskin there should be rather a page with a notice/debug_die()
  342.   //       Use case: a Plugin registers a skin param and gets disabled some day: there should be an error instead of a default
  343. }
  344.  
  345. // Let's check if a skin has been forced in the stub file:
  346. // Note: URL skin requests are handled with param() 20 lines below
  347. // Note: with "register_globals = On" this may be set from URL.. (in which case the code 20 line sbelow becomes useless)
  348. //       blueyed>> You've said that it's not security issue etc.. but I still would init $skin in /conf/_advanced.php and use empty() here.
  349. if!isset$skin ) )
  350. // No skin forced in stub (not even '' for no-skin)...
  351.     $Debuglog->add'No skin forced.''skin' );
  352.     // We're going to need a default skin:
  353.     if(  ( !isset$default_skin ) )          // No default skin forced in stub
  354.         || !skin_exists$default_skin ) ) )  // Or the forced default does not exist
  355.     // Use default from the database
  356.         $default_skin $Blog->get('default_skin');
  357.     }
  358.  
  359.     if!skin_exists$default_skin || empty$default_skin ) )
  360.     // blog's default skin does not exist
  361.         // Because a lot of bloggers will set themseleves a cookie and delete the default skin,
  362.         // we have to make this fool proof extra checking!
  363.         printfT_('The default skin [%s] set for blog [%s] does not exist. It must be properly set in the <a %s>blog properties</a> or properly overriden in a stub file. Contact the <a %s>webmaster</a>...')$default_skin $Blog->dget('shortname')'href="'.$admin_url.'?ctrl=collections&amp;action=edit&amp;blog='.$Blog->ID.'"''href="mailto:'.$admin_email.'"');
  364.         debug_die();
  365.     }
  366.     $Debuglog->add'$default_skin = '.$default_skin'skin' );
  367.  
  368.     if$Blog->get('force_skin') )
  369.     // Blog params tell us to force the use of default skin
  370.         $skin $default_skin;
  371.         $Debuglog->add'Forced skin: '.$skin'skin' );
  372.     }
  373.     else
  374.     // Get the saved skin in cookie or default:
  375.         $Request->param$cookie_state'string'$default_skinfalsetrue )// override (in case there has been "param($cookie_state)" before, which set it already to '')
  376.         $Debuglog->add'Skin after looking at cookie: '.$$cookie_state'skin' );
  377.         // Get skin by params or default to cookie
  378.         // (if cookie was not set, the $$cookie_state contains default skin!)
  379.         $Request->param'skin''string'$$cookie_state );
  380.         $Debuglog->add'Skin after looking at params: '.$skin'skin' );
  381.     }
  382. }
  383.  
  384.  
  385. $Timer->pause'_blog_main.inc');
  386.  
  387.  
  388. // At this point $skin holds the name of the skin we want to use, or '' for no skin!
  389.  
  390. // check to see if we want to display the popup or the main template
  391. $Request->param'template''string''main'true );
  392.  
  393. if!empty$skin ) )
  394. // We want to display now:
  395.  
  396.     ifempty$tempskin )
  397.      && !empty($_GET['skin']|| !empty($_POST['skin') ) )
  398.     // We have just asked for a skin change explicitely
  399.         // Set a cookie to remember it:
  400.         // Including config and functions files   ??
  401.  
  402.         ifsetcookie$cookie_state$skin$cookie_expires$Blog->get('cookie_path')$Blog->get('cookie_domain')) )
  403.         // This damn failed !
  404.             echo "<p>setcookie failed!</p>";
  405.         }
  406.     }
  407.  
  408.     ifereg'([^-A-Za-z0-9._]|\.\.)'$skin ) )
  409.     {
  410.         // echo ("<p>Invalid skin name!</p>");
  411.         $skin $default_skin;
  412.     }
  413.     elseif!skin_exists($skin) )
  414.     {
  415.         // echo "<p>Oops, no such skin!</p>";
  416.         $skin $default_skin;
  417.     }
  418.  
  419.     // TODO: sanitize $template and allow any request on _xxx.tpl.php or sth like that.
  420.     if$template == 'popup' )
  421.     // Do the popup display
  422.         require$skins_path.$skin.'/_popup.php' );
  423.     }
  424.     else
  425.     // Do the main display
  426.         $Timer->start'skin/_main.inc' );
  427.         if$skin_provided_by_plugin skin_provided_by_plugin($skin) )
  428.         {
  429.             $Plugins->call_method$skin_provided_by_plugin'DisplaySkin'$tmp_params array('skin'=>$skin) );
  430.         }
  431.         else
  432.         {
  433.             require$skins_path.$skin.'/_main.php' );
  434.         }
  435.         $Timer->pause'skin/_main.inc' );
  436.     }
  437.  
  438.     // log the hit on this page (in case the skin hasn't already done so)
  439.     $Hit->log();
  440. }
  441. else
  442. // we don't want to use a skin
  443.     if$template == 'popup' )
  444.     // Do the popup display
  445.         require$skins_path.'_popup.php' );
  446.  
  447.         // log the hit on this page (in case the skin hasn't already done so)
  448.         $Hit->log();
  449.  
  450.         exit();
  451.     }
  452.  
  453.     $Debuglog->add'No skin or popup requested.''skin' );
  454.     // If we end up here the blog file should be a full template, not just a stub...
  455.     // Note: The full template SHOULD call $Hit->log();
  456. }
  457.  
  458.  
  459. /*
  460.  * $Log: _blog_main.inc.php,v $
  461.  * Revision 1.28.2.8  2006/12/01 01:57:49  fplanque
  462.  * security compliance
  463.  *
  464.  * Revision 1.28.2.7  2006/11/30 22:00:31  fplanque
  465.  * bleh!
  466.  *
  467.  * Revision 1.28.2.6  2006/11/04 19:54:51  fplanque
  468.  * Reinjected old Log blocks. Removing them from CVS was a bad idea -- especially since Daniel has decided branch 1.9 was his HEAD...
  469.  *
  470.  * Revision 1.28  2006/08/07 16:49:35  fplanque
  471.  * doc
  472.  *
  473.  * Revision 1.27  2006/08/07 00:32:07  blueyed
  474.  * Fixed previewing, if $redirect_to_postblog setting is used
  475.  *
  476.  * Revision 1.26  2006/07/24 00:05:44  fplanque
  477.  * cleaned up skins
  478.  *
  479.  * Revision 1.25  2006/07/06 19:59:08  fplanque
  480.  * better logs, better stats, better pruning
  481.  *
  482.  * Revision 1.24  2006/06/30 22:58:13  blueyed
  483.  * Abstracted charset conversation, not much tested.
  484.  *
  485.  * Revision 1.23  2006/05/29 19:54:45  fplanque
  486.  * no message
  487.  *
  488.  * Revision 1.22  2006/05/19 17:03:58  blueyed
  489.  * locale activation fix from v-1-8, abstraction of setting DB connection charset
  490.  *
  491.  * Revision 1.21  2006/05/14 17:59:59  blueyed
  492.  * "try/catch" SET NAMES (Thanks, bodo)
  493.  *
  494.  * Revision 1.20  2006/05/12 21:53:37  blueyed
  495.  * Fixes, cleanup, translation for plugins
  496.  *
  497.  * Revision 1.19  2006/05/05 15:46:03  blueyed
  498.  * Nasty bug that produces empty pages..
  499.  *
  500.  * Revision 1.18  2006/05/03 01:53:42  blueyed
  501.  * Encode subject in mails correctly (if mbstrings is available)
  502.  *
  503.  * Revision 1.17  2006/04/29 01:24:04  blueyed
  504.  * More decent charset support;
  505.  * unresolved issues include:
  506.  *  - front office still forces the blog's locale/charset!
  507.  *  - if there's content in utf8, it cannot get displayed with an I/O charset of latin1
  508.  *
  509.  * Revision 1.16  2006/04/24 17:54:18  blueyed
  510.  * todo
  511.  *
  512.  * Revision 1.15  2006/04/24 15:43:35  fplanque
  513.  * no message
  514.  *
  515.  * Revision 1.14  2006/04/21 17:05:08  blueyed
  516.  * cleanup
  517.  *
  518.  * Revision 1.13  2006/04/19 20:13:48  fplanque
  519.  * do not restrict to :// (does not catch subdomains, not even www.)
  520.  *
  521.  * Revision 1.12  2006/04/11 20:37:57  blueyed
  522.  * Re-activated /admin/-redirect
  523.  *
  524.  * Revision 1.11  2006/04/11 17:10:22  fplanque
  525.  * The view is not a place for redirects!
  526.  *
  527.  * Revision 1.10  2006/04/10 22:05:26  blueyed
  528.  * Fixed path to stats gone page
  529.  *
  530.  * Revision 1.8  2006/03/18 14:38:36  blueyed
  531.  * fix
  532.  *
  533.  * Revision 1.6  2006/03/16 23:33:53  blueyed
  534.  * Fixed path to 404-error-page
  535.  *
  536.  * Revision 1.5  2006/03/12 23:46:13  fplanque
  537.  * experimental
  538.  *
  539.  * Revision 1.4  2006/03/12 23:08:53  fplanque
  540.  * doc cleanup
  541.  *
  542.  * Revision 1.3  2006/03/12 03:48:51  blueyed
  543.  * bugfix
  544.  *
  545.  * Revision 1.2  2006/03/09 22:29:59  fplanque
  546.  * cleaned up permanent urls
  547.  *
  548.  * Revision 1.1  2006/02/23 21:11:55  fplanque
  549.  * File reorganization to MVC (Model View Controller) architecture.
  550.  * See index.hml files in folders.
  551.  * (Sorry for all the remaining bugs induced by the reorg... :/)
  552.  *
  553.  * Revision 1.45  2006/01/30 16:09:34  blueyed
  554.  * doc
  555.  *
  556.  * Revision 1.44  2006/01/26 21:27:21  blueyed
  557.  * add debug
  558.  *
  559.  * Revision 1.43  2006/01/26 19:27:58  fplanque
  560.  * no message
  561.  *
  562.  * Revision 1.42  2006/01/25 19:19:17  blueyed
  563.  * Fixes for blogurl handling. Thanks to BenFranske for pointing out the biggest issue (http://forums.b2evolution.net/viewtopic.php?t=6844)
  564.  *
  565.  * Revision 1.41  2006/01/22 22:41:59  blueyed
  566.  * Timer, doc
  567.  *
  568.  * Revision 1.40  2006/01/04 19:07:48  fplanque
  569.  * allow filtering on assignees
  570.  *
  571.  * Revision 1.39  2005/12/12 19:44:09  fplanque
  572.  * Use cached objects by reference instead of copying them!!
  573.  *
  574.  * Revision 1.38  2005/12/12 19:21:21  fplanque
  575.  * big merge; lots of small mods; hope I didn't make to many mistakes :]
  576.  *
  577.  * Revision 1.37  2005/12/11 19:59:51  blueyed
  578.  * Renamed gen_permalink() to get_permalink()
  579.  *
  580.  * Revision 1.36  2005/12/05 22:03:46  blueyed
  581.  * REmoved obsolete todo
  582.  *
  583.  * Revision 1.35  2005/12/05 12:15:32  fplanque
  584.  * bugfix
  585.  *
  586.  * Revision 1.34  2005/11/24 16:53:45  blueyed
  587.  * todo about 'siteurl'/'baseurl' issue
  588.  *
  589.  * Revision 1.33  2005/11/21 21:39:29  fplanque
  590.  * no message
  591.  *
  592.  * Revision 1.32  2005/11/21 16:52:31  fplanque
  593.  * okay, a TWO liner :P
  594.  *
  595.  * Revision 1.31  2005/11/21 16:46:47  fplanque
  596.  * I find it amazing how you guys can get into insanely overly complex overdesigned patterns! :/
  597.  * The $tempskin thing is a one liner!!
  598.  *
  599.  * Revision 1.30  2005/11/21 16:30:31  fplanque
  600.  * rolled back obscure mods (anything not fixing bugs has no reason for being here)
  601.  *
  602.  * Revision 1.29  2005/11/20 17:53:21  blueyed
  603.  * Better fix for generating static pages
  604.  *
  605.  * Revision 1.28  2005/11/19 01:39:02  blueyed
  606.  * Fix tempskin handling (patch by marian) and add debugging output (also to skin handling). Also, remove ereg() call that isn't necessary anymore when using basename_dironly()
  607.  *
  608.  * Revision 1.25  2005/11/14 18:57:05  blueyed
  609.  * Do not resolve extra path when generating static pages. This fixes the 404 error when generating static pages from the backoffice, but is not what we want for memcache'd pages really!
  610.  *
  611.  * Revision 1.24  2005/11/14 18:23:13  blueyed
  612.  * Remove experimental memcache support.
  613.  *
  614.  * Revision 1.23  2005/11/06 10:43:19  marian
  615.  * changes to make the multi-domain feature working
  616.  *
  617.  * Revision 1.22  2005/10/30 03:47:43  blueyed
  618.  * todo, question, indent
  619.  *
  620.  * Revision 1.21  2005/10/27 15:25:03  fplanque
  621.  * Normalization; doc; comments.
  622.  *
  623.  * Revision 1.20  2005/10/19 09:07:15  marian
  624.  * Changes regarding multi-domain feature
  625.  *
  626.  * Revision 1.19  2005/10/18 18:45:58  fplanque
  627.  * some rollbacks...
  628.  *
  629.  * Revision 1.18  2005/10/18 11:04:16  marian
  630.  * Added extra functionality to support multi-domain feature.
  631.  *
  632.  * Revision 1.17  2005/09/16 13:38:20  fplanque
  633.  * bugfix
  634.  *
  635.  * Revision 1.16  2005/09/14 18:10:47  fplanque
  636.  * bugfix
  637.  *
  638.  * Revision 1.15  2005/09/13 20:36:42  fplanque
  639.  * a little more antispam
  640.  *
  641.  * Revision 1.14  2005/08/25 19:02:10  fplanque
  642.  * categories plugin phase 2
  643.  *
  644.  * Revision 1.13  2005/08/25 16:06:45  fplanque
  645.  * Isolated compilation of categories to use in an ItemList.
  646.  * This was one of the oldest bugs on the list! :>
  647.  *
  648.  * Revision 1.12  2005/04/06 13:33:29  fplanque
  649.  * minor changes
  650.  *
  651.  * Revision 1.11  2005/04/05 13:44:22  jwedgeco
  652.  * Added experimental memcached support. Needs much more work. Use at your own risk.
  653.  *
  654.  * Revision 1.10  2005/03/10 16:08:39  fplanque
  655.  * added dstart param
  656.  *
  657.  * Revision 1.9  2005/03/09 20:29:39  fplanque
  658.  * added 'unit' param to allow choice between displaying x days or x posts
  659.  * deprecated 'paged' mode (ultimately, everything should be pageable)
  660.  *
  661.  * Revision 1.8  2005/02/28 01:32:32  blueyed
  662.  * Hitlog refactoring, part uno.
  663.  *
  664.  * Revision 1.7  2005/02/24 00:20:03  blueyed
  665.  * DB_USER is not always defined (scripts from /xmlsrc)
  666.  *
  667.  * Revision 1.6  2005/02/21 00:34:34  blueyed
  668.  * check for defined DB_USER!
  669.  *
  670.  * Revision 1.5  2005/02/15 22:05:03  blueyed
  671.  * Started moving obsolete functions to _obsolete092.php..
  672.  *
  673.  * Revision 1.4  2005/01/21 21:03:57  jwedgeco
  674.  * Added some debug statements to log the decoding of the date from the request uri.
  675.  *
  676.  * Revision 1.3  2004/12/20 19:49:24  fplanque
  677.  * cleanup & factoring
  678.  *
  679.  * Revision 1.2  2004/10/14 18:31:24  blueyed
  680.  * granting copyright
  681.  *
  682.  * Revision 1.1  2004/10/13 22:46:32  fplanque
  683.  * renamed [b2]evocore/*
  684.  *
  685.  * Revision 1.66  2004/10/11 18:49:10  fplanque
  686.  * Edited code documentation.
  687.  *
  688.  * Revision 1.42  2004/5/28 17:18:58  jeffbearer
  689.  * added function to keep the active session fresh, part of the who's online feature
  690.  */
  691. ?>

Documentation generated on Tue, 18 Dec 2007 19:12:04 +0100 by phpDocumentor 1.4.0