diff --git a/src/Model/Blog.php b/src/Model/Blog.php index 0ea3047..b091366 100644 --- a/src/Model/Blog.php +++ b/src/Model/Blog.php @@ -17,6 +17,8 @@ use SilverStripe\Forms\NumericField; use SilverStripe\ORM\DataList; use SilverStripe\ORM\DataObject; use SilverStripe\ORM\DB; +use SilverStripe\ORM\HasManyList; +use SilverStripe\ORM\ManyManyList; use SilverStripe\ORM\SS_List; use SilverStripe\ORM\UnsavedRelationList; use SilverStripe\Security\Group; diff --git a/src/Model/BlogController.php b/src/Model/BlogController.php index fbff77c..c36cb16 100644 --- a/src/Model/BlogController.php +++ b/src/Model/BlogController.php @@ -267,9 +267,14 @@ class BlogController extends PageController $tag = $this->request->param('Tag'); if ($tag) { $filter = URLSegmentFilter::create(); + // url encode unless it's multibyte (already pre-encoded in the database) + // see https://github.com/silverstripe/silverstripe-cms/pull/2384 + if (!$filter->getAllowMultibyte()) { + $tag = rawurlencode($tag); + } return $dataRecord->Tags() - ->filter('URLSegment', [$tag, $filter->filter($tag)]) + ->filter('URLSegment', $tag) ->first(); } return null; @@ -289,9 +294,8 @@ class BlogController extends PageController if ($this->isRSS()) { return $this->rssFeed($this->blogPosts, $category->getLink()); - } else { - return $this->render(); } + return $this->render(); } $this->httpError(404, 'Not Found'); @@ -313,9 +317,14 @@ class BlogController extends PageController $category = $this->request->param('Category'); if ($category) { $filter = URLSegmentFilter::create(); + // url encode unless it's multibyte (already pre-encoded in the database) + // see https://github.com/silverstripe/silverstripe-cms/pull/2384 + if (!$filter->getAllowMultibyte()) { + $category = rawurlencode($category); + } return $dataRecord->Categories() - ->filter('URLSegment', [$category, $filter->filter($category)]) + ->filter('URLSegment', $category) ->first(); } return null; diff --git a/src/Model/BlogPost.php b/src/Model/BlogPost.php index 59dd3b4..ad071d1 100644 --- a/src/Model/BlogPost.php +++ b/src/Model/BlogPost.php @@ -16,6 +16,7 @@ use SilverStripe\Forms\ToggleCompositeField; use SilverStripe\ORM\ArrayList; use SilverStripe\ORM\FieldType\DBDatetime; use SilverStripe\ORM\FieldType\DBHTMLText; +use SilverStripe\ORM\ManyManyList; use SilverStripe\ORM\SS_List; use SilverStripe\ORM\UnsavedRelationList; use SilverStripe\Security\Group; @@ -25,7 +26,6 @@ use SilverStripe\Security\Security; use SilverStripe\TagField\TagField; use SilverStripe\Versioned\Versioned; use SilverStripe\View\ArrayData; -use SilverStripe\View\Parsers\ShortcodeParser; use SilverStripe\View\Requirements; /** diff --git a/tests/Model/BlogControllerFunctionalTest.php b/tests/Model/BlogControllerFunctionalTest.php new file mode 100644 index 0000000..c188bcb --- /dev/null +++ b/tests/Model/BlogControllerFunctionalTest.php @@ -0,0 +1,39 @@ +set(URLSegmentFilter::class, 'default_allow_multibyte', true); + i18n::set_locale('fa_IR'); + + parent::setUp(); + } + + public function testGetCategoriesWithMultibyteUrl() + { + $result = $this->get('my-blog/category/' . rawurlencode('آبید')); + + $this->assertEquals(200, $result->getStatusCode()); + $this->assertContains('آبید', $result->getBody()); + } + + public function testGetTagsWithMultibyteUrl() + { + $result = $this->get('my-blog/tag/' . rawurlencode('برتراند')); + + $this->assertEquals(200, $result->getStatusCode()); + $this->assertContains('برتراند', $result->getBody()); + } +} diff --git a/tests/Model/BlogControllerFunctionalTest.yml b/tests/Model/BlogControllerFunctionalTest.yml new file mode 100644 index 0000000..c29c0e3 --- /dev/null +++ b/tests/Model/BlogControllerFunctionalTest.yml @@ -0,0 +1,29 @@ +SilverStripe\Blog\Model\BlogCategory: + category_a: + Title: آبید + URLSegment: آبید + +SilverStripe\Blog\Model\BlogTag: + tag_a: + Title: برتراند + URLSegment: برتراند + +SilverStripe\Blog\Model\Blog: + blog_a: + URLSegment: my-blog + Title: My Blog + Categories: + - =>SilverStripe\Blog\Model\BlogCategory.category_a + Tags: + - =>SilverStripe\Blog\Model\BlogTag.tag_a + +SilverStripe\Blog\Model\BlogPost: + blogpost_a: + Title: My Blog Post + URLSegment: آبیدآبید + PublishDate: 2017-08-01 00:00:00 + Parent: =>SilverStripe\Blog\Model\Blog.blog_a + Categories: + - =>SilverStripe\Blog\Model\BlogCategory.category_a + Tags: + - =>SilverStripe\Blog\Model\BlogTag.tag_a