From ebba5cc9fc6ed3fb8db7d9208bc5a58683dba8c6 Mon Sep 17 00:00:00 2001 From: Damian Mooyman Date: Mon, 25 Jan 2016 11:57:26 +1300 Subject: [PATCH] BUG Fix blog date filtering for additional database server types --- .travis.yml | 2 +- code/model/Blog.php | 36 +++++++++++------------------------- composer.json | 2 +- tests/blog.yml | 2 +- 4 files changed, 14 insertions(+), 28 deletions(-) diff --git a/.travis.yml b/.travis.yml index bb726e5..2e60802 100755 --- a/.travis.yml +++ b/.travis.yml @@ -35,7 +35,7 @@ matrix: - php: 5.6 env: DB=PGSQL CORE_RELEASE=3.2 - php: 5.4 - env: DB=MYSQL + env: DB=SQLITE - php: 5.3 env: DB=MYSQL - php: hhvm diff --git a/code/model/Blog.php b/code/model/Blog.php index 14e9727..b095d66 100644 --- a/code/model/Blog.php +++ b/code/model/Blog.php @@ -473,35 +473,21 @@ class Blog extends Page implements PermissionProvider $query->innerJoin('BlogPost', sprintf('"SiteTree%s"."ID" = "BlogPost%s"."ID"', $stage, $stage)); - // getConn is deprecated, but not get_conn in 3.1 - $getConnectionMethod = 'getConn'; - if (method_exists('DB','get_conn')) { - $getConnectionMethod = 'get_conn'; - }; + $conn = DB::getConn(); + // Filter by year + $yearCond = $conn->formattedDatetimeClause('"BlogPost"."PublishDate"', '%Y'); + $query->where(sprintf('%s = \'%04d\'', $yearCond, Convert::raw2sql($year))); - if (DB::$getConnectionMethod() instanceof MySQLDatabase) { - $query->where(sprintf('YEAR("PublishDate") = \'%s\'', Convert::raw2sql($year))); + // Filter by month (if given) + if ($month) { + $monthCond = $conn->formattedDatetimeClause('"BlogPost"."PublishDate"', '%m'); + $query->where(sprintf('%s = \'%02d\'', $monthCond, Convert::raw2sql($month))); - if ($month) { - $query->where(sprintf('MONTH("PublishDate") = \'%s\'', Convert::raw2sql($month))); - - if ($day) { - $query->where(sprintf('DAY("PublishDate") = \'%s\'', Convert::raw2sql($day))); - } + if ($day) { + $dayCond = $conn->formattedDatetimeClause('"BlogPost"."PublishDate"', '%d'); + $query->where(sprintf('%s = \'%02d\'', $dayCond, Convert::raw2sql($day))); } - } elseif (DB::$getConnectionMethod() instanceof PostgreSQLDatabase) { - $where = sprintf('EXTRACT(YEAR FROM "PublishDate") = \'%s\'', Convert::raw2sql($year)); - - if ($month) { - $where .= sprintf(' AND EXTRACT(MONTH FROM "PublishDate") = \'%s\'', Convert::raw2sql($month)); - - if ($day) { - $where .= sprintf(' AND EXTRACT(DAY FROM "PublishDate") = \'%s\'', Convert::raw2sql($day)); - } - } - - $query->where($where); } diff --git a/composer.json b/composer.json index 5e7cc41..a6e6f03 100755 --- a/composer.json +++ b/composer.json @@ -8,7 +8,7 @@ ], "type": "silverstripe-module", "require": { - "silverstripe/cms": ">=3.1.0", + "silverstripe/cms": "^3.1.0", "silverstripe/lumberjack": "~1.1", "silverstripe/tagfield": "^1.0" }, diff --git a/tests/blog.yml b/tests/blog.yml index b4be745..a4cf2d2 100755 --- a/tests/blog.yml +++ b/tests/blog.yml @@ -7,7 +7,7 @@ Group: Title: Editors BlogUsers: Title: Blog Users - Code: BlogUsers + Code: blogusers Permission: Administrators: