1 <?php
2
3 class RedirectEntry extends DataObject {
4 static $db = array(
5 'OldURL' => 'Varchar(255)',
6 'NewURL' => 'Varchar(255)',
7 );
8
9 static $summary_fields = array('ID', 'OldURL', 'NewURL');
10
11 static $searchable_fields = array('OldURL', 'NewURL');
12
13 14 15 16 17
18
19 static function clear_url($url) {
20 if (substr($url, 0, 1) == '/') {
21 $url = substr($url, 1);
22 }
23 if (substr($url, -1, 1) == '/') {
24 $url = substr($url, 0, -1);
25 }
26 $p = strpos($url, '?');
27 if ($p !== false) {
28 $url = substr($url, 0, $p+1);
29 }
30 $url = preg_replace('!/index$!', '', $url);
31 return $url;
32 }
33
34 function validate() {
35 $this->OldURL = self::clear_url($this->OldURL);
36
37 if ($this->ID) {
38 if (!$this->OldURL || !$this->NewURL) {
39 return new ValidationResult(false, 'Both URLs must be set');
40 }
41 $other = DataObject::get_one('RedirectEntry', "OldURL = '{$this->OldURL}' and ID != {$this->ID}");
42 if ($other) {
43 return new ValidationResult(false, 'OldURL already used');
44 }
45 }
46
47 return parent::validate();
48 }
49
50 function onBeforeWrite() {
51 parent::onBeforeWrite();
52
53 if (substr($this->NewURL, 0, 1) == '/') {
54 $this->NewURL = substr($this->NewURL, 1);
55 }
56 $this->OldURL = self::clear_url($this->OldURL);
57 }
58 }
59
60 class RedirectEntry_Admin extends ModelAdmin {
61 static $url_segment = 'redirect';
62 static = 'Редиректы';
63 static $managed_models = 'RedirectEntry';
64
65 }
[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the
Silverstripe Forums to ask development related questions.
-