diff --git a/.travis.yml b/.travis.yml index 651cf6c..a10d844 100755 --- a/.travis.yml +++ b/.travis.yml @@ -14,7 +14,7 @@ before_install: env: global: - - DB=MYSQL CORE_RELEASE=3.1 + - DB=MYSQL CORE_RELEASE=3.6 # Turn coverage off by default, as it's expensive time wise - COVERAGE=0 @@ -27,13 +27,13 @@ matrix: - php: 5.6 env: DB=MYSQL COVERAGE=1 - php: 5.5 - env: DB=MYSQL - - php: 5.6 - env: DB=PGSQL - - php: 5.6 env: DB=MYSQL CORE_RELEASE=3.2 - php: 5.6 - env: DB=PGSQL CORE_RELEASE=3.2 + env: DB=PGSQL CORE_RELEASE=3.3 + - php: 5.6 + env: DB=MYSQL CORE_RELEASE=3.4 + - php: 5.6 + env: DB=PGSQL CORE_RELEASE=3.5 - php: 5.4 env: DB=SQLITE - php: 5.3 diff --git a/code/widgets/BlogArchiveWidget.php b/code/widgets/BlogArchiveWidget.php index e6b7b8f..711c939 100644 --- a/code/widgets/BlogArchiveWidget.php +++ b/code/widgets/BlogArchiveWidget.php @@ -92,27 +92,28 @@ class BlogArchiveWidget extends Widget $publishDate = DB::get_conn()->formattedDatetimeClause('"PublishDate"', $format); $fields = array( 'PublishDate' => $publishDate, - 'Total' => "Count('PublishDate')" + 'Total' => "COUNT('\"PublishDate\"')" ); $stage = Versioned::current_stage(); - $suffix = ($stage == 'Stage') ? '' : "_{$stage}"; - $query = SQLSelect::create($fields, "BlogPost{$suffix}") + $suffix = ($stage === 'Live') ? '_Live' : ''; + $query = SQLSelect::create($fields, '"BlogPost' . $suffix . '"') ->addGroupBy($publishDate) - ->addOrderBy('PublishDate Desc') - ->addWhere(array('PublishDate < ?' => SS_Datetime::now()->Format('Y-m-d'))); + ->addOrderBy('"PublishDate" DESC') + ->addWhere(array('"PublishDate" < ?' => SS_Datetime::now()->Format('Y-m-d'))); $posts = $query->execute(); $result = new ArrayList(); while ($next = $posts->next()) { - $date = Date::create(); - $date->setValue(strtotime($next['PublishDate'])); - $year = $date->Format('Y'); - if ($this->ArchiveType == 'Yearly') { + $year = $next['PublishDate']; $month = null; $title = $year; } else { + $date = Date::create(); + $date->setValue(strtotime($next['PublishDate'])); + + $year = $date->Format('Y'); $month = $date->Format('m'); $title = $date->FormatI18N('%B %Y'); } @@ -124,6 +125,7 @@ class BlogArchiveWidget extends Widget } $this->extend('updateGetArchive', $result); + return $result; } } diff --git a/composer.json b/composer.json index 8c8909a..dd97754 100755 --- a/composer.json +++ b/composer.json @@ -1,39 +1,39 @@ { - "name": "silverstripe/blog", - "description": "A fresh take on blogging in Silverstripe set out to tackle the issue of a cluttered Site Tree.", - "keywords": [ - "silverstripe", - "blog", - "news" - ], - "type": "silverstripe-module", - "require": { - "silverstripe/cms": "^3.1.0", - "silverstripe/lumberjack": "~1.1", - "silverstripe/tagfield": "^1.0" - }, - "require-dev": { - "phpunit/PHPUnit": "~3.7@stable" - }, - "extra": { - "branch-alias": { - "2.x-dev": "2.5.x-dev" - } - }, - "license": "BSD-2-Clause", - "authors": [ - { - "name": "Michael Strong", - "email": "github@michaelstrong.co.uk" - } - ], - "suggest": { - "silverstripe/widgets": "Some widgets come with the blog which are compatible with the widgets module.", - "silverstripe/comments": "This module adds comments to your blog." - }, - "replace": { - "micmania1/silverstripe-blog": "*" - }, - "minimum-stability": "dev", - "prefer-stable": true + "name": "silverstripe/blog", + "description": "A fresh take on blogging in Silverstripe set out to tackle the issue of a cluttered Site Tree.", + "keywords": [ + "silverstripe", + "blog", + "news" + ], + "type": "silverstripe-module", + "require": { + "silverstripe/cms": "^3.2.0", + "silverstripe/lumberjack": "~1.1", + "silverstripe/tagfield": "^1.0" + }, + "require-dev": { + "phpunit/PHPUnit": "~3.7@stable" + }, + "extra": { + "branch-alias": { + "2.x-dev": "2.5.x-dev" + } + }, + "license": "BSD-2-Clause", + "authors": [ + { + "name": "Michael Strong", + "email": "github@michaelstrong.co.uk" + } + ], + "suggest": { + "silverstripe/widgets": "Some widgets come with the blog which are compatible with the widgets module.", + "silverstripe/comments": "This module adds comments to your blog." + }, + "replace": { + "micmania1/silverstripe-blog": "*" + }, + "minimum-stability": "dev", + "prefer-stable": true } diff --git a/tests/Widgets/BlogArchiveWidgetTest.php b/tests/Widgets/BlogArchiveWidgetTest.php new file mode 100644 index 0000000..7f93de4 --- /dev/null +++ b/tests/Widgets/BlogArchiveWidgetTest.php @@ -0,0 +1,71 @@ +markTestSkipped('Test requires silverstripe/widgets to be installed.'); + } + + SS_Datetime::set_mock_now('2017-09-20 00:00:00'); + + parent::setUp(); + } + + public function tearDown() + { + parent::tearDown(); + + SS_Datetime::clear_mock_now(); + } + + public function testArchiveMonthlyFromStage() + { + $widget = $this->objFromFixture('BlogArchiveWidget', 'archive-monthly'); + $archive = $widget->getArchive(); + + $this->assertInstanceOf('SS_List', $archive); + $this->assertCount(3, $archive); + $this->assertDOSContains(array( + array('Title' => 'August 2017'), + array('Title' => 'September 2017'), + array('Title' => 'May 2015'), + ), $archive); + } + + public function testArchiveMonthlyFromLive() + { + $original = Versioned::current_stage(); + + $this->objFromFixture('BlogPost', 'post-b')->doPublish(); + Versioned::reading_stage('Live'); + + $widget = $this->objFromFixture('BlogArchiveWidget', 'archive-monthly'); + $archive = $widget->getArchive(); + + $this->assertCount(1, $archive); + $this->assertDOSContains(array( + array('Title' => 'August 2017'), + ), $archive); + + Versioned::reading_stage($original); + } + + public function testArchiveYearly() + { + $widget = $this->objFromFixture('BlogArchiveWidget', 'archive-yearly'); + $archive = $widget->getArchive(); + + $this->assertInstanceOf('SS_List', $archive); + $this->assertCount(2, $archive); + $this->assertDOSContains(array( + array('Title' => '2017'), + array('Title' => '2015'), + ), $archive); + } +} diff --git a/tests/Widgets/BlogArchiveWidgetTest.yml b/tests/Widgets/BlogArchiveWidgetTest.yml new file mode 100644 index 0000000..4126956 --- /dev/null +++ b/tests/Widgets/BlogArchiveWidgetTest.yml @@ -0,0 +1,27 @@ +Blog: + my-blog: + Title: My Blog + +BlogPost: + post-a: + Title: September Digest + PublishDate: 2017-09-01 00:00:00 + ParentID: =>Blog.my-blog + post-b: + Title: August is Awesome + PublishDate: 2017-08-01 00:00:00 + ParentID: =>Blog.my-blog + post-c: + Title: 2015 is so two years ago + PublishDate: 2015-05-02 00:01:02 + ParentID: =>Blog.my-blog + +BlogArchiveWidget: + archive-monthly: + NumberToDisplay: 5 + ArchiveType: Monthly + BlogID: =>Blog.my-blog + archive-yearly: + NumberToDisplay: 5 + ArchiveType: Yearly + BlogID: =>Blog.my-blog