File tree Expand file tree Collapse file tree
tests/SegmentFieldModifier Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff 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 *
Original file line number Diff line number Diff line change 22
33namespace SilverStripe \Forms \SegmentFieldModifier ;
44
5+ use SilverStripe \Forms \Filter \SlugFilter ;
56use SS_HTTPRequest ;
6- use URLSegmentFilter ;
77
88class 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
Original file line number Diff line number Diff 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 /**
You can’t perform that action at this time.
0 commit comments