From bcaea3eafb7ac0421715409a2473e12b4f49dd57 Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Tue, 22 Dec 2009 21:07:44 +0000 Subject: [PATCH] BUGFIX Limiting BlogHolder->LandingPageFreshness to requests without a controller action only. Controller actions are not regarded as the "landing page", as they cause other views like 'tags' or 'rss', which shouldn't be filtered (from r96200) --- code/BlogTree.php | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/code/BlogTree.php b/code/BlogTree.php index 94e85de..7f55cc5 100644 --- a/code/BlogTree.php +++ b/code/BlogTree.php @@ -147,9 +147,10 @@ class BlogTree extends Page { * @param string tag Only get blog entries with this tag * @param string date Only get blog entries on this date - either a year, or a year-month eg '2008' or '2008-02' * @param callback retrieveCallback A function to call with pagetype, filter and limit for custom blog sorting or filtering + * @param string $where * @return DataObjectSet */ - public function Entries($limit = '', $tag = '', $date = '', $retrieveCallback = null) { + public function Entries($limit = '', $tag = '', $date = '', $retrieveCallback = null, $filter = '') { $tagCheck = ''; $dateCheck = ''; @@ -161,7 +162,7 @@ class BlogTree extends Page { $tagCheck = "AND `BlogEntry`.Tags LIKE '%$SQL_tag%'"; } } - + if ($date) { if(strpos($date, '-')) { $year = (int) substr($date, 0, strpos($date, '-')); @@ -185,14 +186,7 @@ class BlogTree extends Page { } } } - elseif ($this->LandingPageFreshness) { - if(defined('DB::USE_ANSI_SQL')) { - $dateCheck = "AND \"BlogEntry\".\"Date\" > NOW() - INTERVAL " . $this->LandingPageFreshness; - } else { - $dateCheck = "AND `BlogEntry`.Date > NOW() - INTERVAL " . $this->LandingPageFreshness; - } - } - + // Build a list of all IDs for BlogHolders that are children of us $holderIDs = $this->BlogHolderIDs(); @@ -200,10 +194,11 @@ class BlogTree extends Page { if (empty($holderIDs)) return false; // Otherwise, do the actual query + if($filter) $filter .= ' AND '; if(defined('DB::USE_ANSI_SQL')) { - $where = '"ParentID" IN (' . implode(',', $holderIDs) . ") $tagCheck $dateCheck"; + $filter .= '"ParentID" IN (' . implode(',', $holderIDs) . ") $tagCheck $dateCheck"; } else { - $where = 'ParentID IN (' . implode(',', $holderIDs) . ") $tagCheck $dateCheck"; + $filter .= '`ParentID` IN (' . implode(',', $holderIDs) . ") $tagCheck $dateCheck"; } if(defined('DB::USE_ANSI_SQL')) { @@ -213,8 +208,8 @@ class BlogTree extends Page { } // By specifying a callback, you can alter the SQL, or sort on something other than date. - if ($retrieveCallback) return call_user_func($retrieveCallback, 'BlogEntry', $where, $limit, $order); - else return DataObject::get('BlogEntry', $where, $order, '', $limit); + if ($retrieveCallback) return call_user_func($retrieveCallback, 'BlogEntry', $filter, $limit, $order); + else return DataObject::get('BlogEntry', $filter, $order, '', $limit); } } @@ -255,9 +250,20 @@ class BlogTree_Controller extends Page_Controller { function BlogEntries($limit = null) { if ($limit === null) $limit = BlogTree::$default_entries_limit; - + + // only use freshness if no action is present (might be displaying tags or rss) + if ($this->LandingPageFreshness && !$this->request->param('Action')) { + if(defined('DB::USE_ANSI_SQL')) { + $filter = "\"BlogEntry\".\"Date\" > NOW() - INTERVAL " . $this->LandingPageFreshness; + } else { + $filter = "`BlogEntry`.Date > NOW() - INTERVAL " . $this->LandingPageFreshness; + } + } else { + $filter = ''; + } + $start = isset($_GET['start']) ? (int) $_GET['start'] : 0; - return $this->Entries("$start,$limit", BlogURL::tag(), BlogURL::date()); + return $this->Entries("$start,$limit", BlogURL::tag(), BlogURL::date(), null, $filter); } function IncludeBlogRSS() { @@ -323,3 +329,4 @@ class BlogTree_Controller extends Page_Controller { return parent::defaultAction($action); } } +?> \ No newline at end of file