Skip to content

Commit 5e8a146

Browse files
committed
Minor improvements
1 parent f76c2b2 commit 5e8a146

5 files changed

Lines changed: 84 additions & 4 deletions

File tree

code/Filter.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace SilverStripe\Forms;
4+
5+
interface Filter {
6+
/**
7+
* Filters a value.
8+
*
9+
* @param string $value
10+
*
11+
* @return string
12+
*/
13+
public function filter($value);
14+
}

code/Filter/SlugFilter.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
namespace SilverStripe\Forms\Filter;
4+
5+
use SilverStripe\Forms\Filter;
6+
use URLSegmentFilter;
7+
8+
class SlugFilter extends URLSegmentFilter implements Filter {
9+
/**
10+
* @inheritdoc
11+
*
12+
* @see URLSegmentFilter::filter
13+
*
14+
* @param string $value
15+
*
16+
* @return string
17+
*/
18+
public function filter($value) {
19+
if(!$this->getAllowMultibyte()) {
20+
$transliterator = $this->getTransliterator();
21+
22+
if($transliterator) {
23+
$value = $transliterator->toASCII($value);
24+
}
25+
}
26+
27+
$replacements = $this->getReplacements();
28+
29+
if($this->getAllowMultibyte() && isset($replacements['/[^A-Za-z0-9\-]+/u'])) {
30+
unset($replacements['/[^A-Za-z0-9\-]+/u']);
31+
}
32+
33+
foreach($replacements as $regex => $replace) {
34+
$value = preg_replace($regex, $replace, $value);
35+
}
36+
37+
if($this->getAllowMultibyte()) {
38+
$value = rawurlencode($value);
39+
}
40+
41+
return $value;
42+
}
43+
}

code/SegmentField.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ class SegmentField extends TextField {
2323
*/
2424
protected $modifiers = array();
2525

26+
/**
27+
* @var string
28+
*/
29+
protected $preview = '';
30+
2631
/**
2732
* @param array $modifiers
2833
*
@@ -41,6 +46,24 @@ public function getModifiers() {
4146
return $this->modifiers;
4247
}
4348

49+
/**
50+
* @param string $preview
51+
*
52+
* @return $this
53+
*/
54+
public function setPreview($preview) {
55+
$this->preview = $preview;
56+
57+
return $this;
58+
}
59+
60+
/**
61+
* @return string
62+
*/
63+
public function Preview() {
64+
return $this->preview;
65+
}
66+
4467
/**
4568
* @inheritdoc
4669
*

code/SegmentFieldModifier/SlugSegmentFieldModifier.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
namespace SilverStripe\Forms\SegmentFieldModifier;
44

5+
use SilverStripe\Forms\Filter\SlugFilter;
56
use SS_HTTPRequest;
6-
use URLSegmentFilter;
77

88
class SlugSegmentFieldModifier extends AbstractSegmentFieldModifier {
99
/**
@@ -41,7 +41,7 @@ public function getPreview($value) {
4141
* @return string
4242
*/
4343
public function getSuggestion($value) {
44-
if($filtered = URLSegmentFilter::create()->filter($this->getValue())) {
44+
if($filtered = SlugFilter::create()->filter($this->getValue())) {
4545
return $value . $filtered;
4646
}
4747

tests/SegmentFieldModifier/SlugSegmentFieldModifierTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ public function testGetPreview() {
3333

3434
$modifier->setRequest($this->getNewRequestMock());
3535

36-
$this->assertEquals('this-is-a-long-value', $modifier->getPreview(''));
37-
$this->assertEquals('this-is-a-long-value', $modifier->getSuggestion(''));
36+
$this->assertEquals('This-is-a-LONG-value', $modifier->getPreview(''));
37+
$this->assertEquals('This-is-a-LONG-value', $modifier->getSuggestion(''));
3838
}
3939

4040
/**

0 commit comments

Comments
 (0)