Completed
Pull Request — master (#33)
by Robbie
03:14
created
src/IFramePage.php 1 patch
Indentation   +126 added lines, -126 removed lines patch added patch discarded remove patch
@@ -16,130 +16,130 @@
 block discarded – undo
16 16
 
17 17
 class IFramePage extends Page
18 18
 {
19
-    private static $db = array(
20
-        'IFrameURL' => 'Text',
21
-        'AutoHeight' => 'Boolean(1)',
22
-        'AutoWidth' => 'Boolean(1)',
23
-        'FixedHeight' => 'Int(500)',
24
-        'FixedWidth' => 'Int(0)',
25
-        'AlternateContent' => 'HTMLText',
26
-        'BottomContent' => 'HTMLText',
27
-        'ForceProtocol' => 'Varchar',
28
-    );
29
-
30
-    private static $defaults = array(
31
-        'AutoHeight' => '1',
32
-        'AutoWidth' => '1',
33
-        'FixedHeight' => '500',
34
-        'FixedWidth' => '0'
35
-    );
36
-
37
-    private static $table_name = 'IFramePage';
38
-
39
-    private static $description = 'Embeds an iframe into the body of the page.';
40
-
41
-    private static $singular_name = 'IFrame Page';
42
-
43
-    public function getCMSFields()
44
-    {
45
-        $fields = parent::getCMSFields();
46
-
47
-        $fields->removeFieldFromTab('Root.Main', 'Content');
48
-        $fields->addFieldToTab('Root.Main', $url = new TextField('IFrameURL', 'Iframe URL'));
49
-        $url->setRightTitle(
50
-            DBField::create_field(
51
-                'HTMLText',
52
-                'Can be absolute (<em>http://silverstripe.com</em>) or relative to this site (<em>about-us</em>).'
53
-            )
54
-        );
55
-        $fields->addFieldToTab(
56
-            'Root.Main',
57
-            DropdownField::create('ForceProtocol', 'Force protocol?')
58
-                ->setSource(array('http://' => 'http://', 'https://' => 'https://'))
59
-                ->setEmptyString('')
60
-                ->setDescription(
61
-                    'Avoids mixed content warnings when iframe content is just available under a specific protocol'
62
-                ),
63
-            'Metadata'
64
-        );
65
-        $fields->addFieldsToTab('Root.Main', [
66
-            CheckboxField::create('AutoHeight', 'Auto height (only works with same domain URLs)'),
67
-            CheckboxField::create('AutoWidth', 'Auto width (100% of the available space)'),
68
-            NumericField::create('FixedHeight', 'Fixed height (in pixels)'),
69
-            NumericField::create('FixedWidth', 'Fixed width (in pixels)'),
70
-            HtmlEditorField::create('Content', 'Content (appears above iframe)'),
71
-            HtmlEditorField::create('BottomContent', 'Content (appears below iframe)'),
72
-            HtmlEditorField::create('AlternateContent', 'Alternate Content (appears when user has iframes disabled)')
73
-        ]);
74
-
75
-        // Move the Metadata field to last position, but make a check for it's
76
-        // existence first.
77
-        //
78
-        // See https://github.com/silverstripe-labs/silverstripe-iframe/issues/18
79
-        $mainTab = $fields->findOrMakeTab('Root.Main');
80
-        $mainTabFields = $mainTab->FieldList();
81
-        $metaDataField = $mainTabFields->fieldByName('Metadata');
82
-        if ($metaDataField) {
83
-            $mainTabFields->removeByName('Metadata');
84
-            $mainTabFields->push($metaDataField);
85
-        }
86
-        return $fields;
87
-    }
88
-
89
-    /**
90
-     * Compute class from the size parameters.
91
-     */
92
-    public function getClass()
93
-    {
94
-        $class = '';
95
-        if ($this->AutoHeight) {
96
-            $class .= 'iframepage-height-auto';
97
-        }
98
-
99
-        return $class;
100
-    }
101
-
102
-    /**
103
-     * Compute style from the size parameters.
104
-     */
105
-    public function getStyle()
106
-    {
107
-        $style = '';
108
-
109
-        // Always add fixed height as a fallback if autosetting or JS fails.
110
-        $height = $this->FixedHeight;
111
-        if (!$height) {
112
-            $height = 800;
113
-        }
114
-        $style .= "height: {$height}px; ";
115
-
116
-        if ($this->AutoWidth) {
117
-            $style .= "width: 100%; ";
118
-        } elseif ($this->FixedWidth) {
119
-            $style .= "width: {$this->FixedWidth}px; ";
120
-        }
121
-
122
-        return $style;
123
-    }
124
-
125
-    /**
126
-     * Ensure that the IFrameURL is a valid url and prevents XSS
127
-     *
128
-     * @throws ValidationException
129
-     * @return ValidationResult
130
-     */
131
-    public function validate()
132
-    {
133
-        $result = parent::validate();
134
-
135
-        //whitelist allowed URL schemes
136
-        $allowed_schemes = array('http', 'https');
137
-        if ($matches = parse_url($this->IFrameURL)) {
138
-            if (isset($matches['scheme']) && !in_array($matches['scheme'], $allowed_schemes)) {
139
-                $result->addError(_t(__CLASS__ . '.VALIDATION_BANNEDURLSCHEME', "This URL scheme is not allowed."));
140
-            }
141
-        }
142
-
143
-        return $result;
144
-    }
19
+	private static $db = array(
20
+		'IFrameURL' => 'Text',
21
+		'AutoHeight' => 'Boolean(1)',
22
+		'AutoWidth' => 'Boolean(1)',
23
+		'FixedHeight' => 'Int(500)',
24
+		'FixedWidth' => 'Int(0)',
25
+		'AlternateContent' => 'HTMLText',
26
+		'BottomContent' => 'HTMLText',
27
+		'ForceProtocol' => 'Varchar',
28
+	);
29
+
30
+	private static $defaults = array(
31
+		'AutoHeight' => '1',
32
+		'AutoWidth' => '1',
33
+		'FixedHeight' => '500',
34
+		'FixedWidth' => '0'
35
+	);
36
+
37
+	private static $table_name = 'IFramePage';
38
+
39
+	private static $description = 'Embeds an iframe into the body of the page.';
40
+
41
+	private static $singular_name = 'IFrame Page';
42
+
43
+	public function getCMSFields()
44
+	{
45
+		$fields = parent::getCMSFields();
46
+
47
+		$fields->removeFieldFromTab('Root.Main', 'Content');
48
+		$fields->addFieldToTab('Root.Main', $url = new TextField('IFrameURL', 'Iframe URL'));
49
+		$url->setRightTitle(
50
+			DBField::create_field(
51
+				'HTMLText',
52
+				'Can be absolute (<em>http://silverstripe.com</em>) or relative to this site (<em>about-us</em>).'
53
+			)
54
+		);
55
+		$fields->addFieldToTab(
56
+			'Root.Main',
57
+			DropdownField::create('ForceProtocol', 'Force protocol?')
58
+				->setSource(array('http://' => 'http://', 'https://' => 'https://'))
59
+				->setEmptyString('')
60
+				->setDescription(
61
+					'Avoids mixed content warnings when iframe content is just available under a specific protocol'
62
+				),
63
+			'Metadata'
64
+		);
65
+		$fields->addFieldsToTab('Root.Main', [
66
+			CheckboxField::create('AutoHeight', 'Auto height (only works with same domain URLs)'),
67
+			CheckboxField::create('AutoWidth', 'Auto width (100% of the available space)'),
68
+			NumericField::create('FixedHeight', 'Fixed height (in pixels)'),
69
+			NumericField::create('FixedWidth', 'Fixed width (in pixels)'),
70
+			HtmlEditorField::create('Content', 'Content (appears above iframe)'),
71
+			HtmlEditorField::create('BottomContent', 'Content (appears below iframe)'),
72
+			HtmlEditorField::create('AlternateContent', 'Alternate Content (appears when user has iframes disabled)')
73
+		]);
74
+
75
+		// Move the Metadata field to last position, but make a check for it's
76
+		// existence first.
77
+		//
78
+		// See https://github.com/silverstripe-labs/silverstripe-iframe/issues/18
79
+		$mainTab = $fields->findOrMakeTab('Root.Main');
80
+		$mainTabFields = $mainTab->FieldList();
81
+		$metaDataField = $mainTabFields->fieldByName('Metadata');
82
+		if ($metaDataField) {
83
+			$mainTabFields->removeByName('Metadata');
84
+			$mainTabFields->push($metaDataField);
85
+		}
86
+		return $fields;
87
+	}
88
+
89
+	/**
90
+	 * Compute class from the size parameters.
91
+	 */
92
+	public function getClass()
93
+	{
94
+		$class = '';
95
+		if ($this->AutoHeight) {
96
+			$class .= 'iframepage-height-auto';
97
+		}
98
+
99
+		return $class;
100
+	}
101
+
102
+	/**
103
+	 * Compute style from the size parameters.
104
+	 */
105
+	public function getStyle()
106
+	{
107
+		$style = '';
108
+
109
+		// Always add fixed height as a fallback if autosetting or JS fails.
110
+		$height = $this->FixedHeight;
111
+		if (!$height) {
112
+			$height = 800;
113
+		}
114
+		$style .= "height: {$height}px; ";
115
+
116
+		if ($this->AutoWidth) {
117
+			$style .= "width: 100%; ";
118
+		} elseif ($this->FixedWidth) {
119
+			$style .= "width: {$this->FixedWidth}px; ";
120
+		}
121
+
122
+		return $style;
123
+	}
124
+
125
+	/**
126
+	 * Ensure that the IFrameURL is a valid url and prevents XSS
127
+	 *
128
+	 * @throws ValidationException
129
+	 * @return ValidationResult
130
+	 */
131
+	public function validate()
132
+	{
133
+		$result = parent::validate();
134
+
135
+		//whitelist allowed URL schemes
136
+		$allowed_schemes = array('http', 'https');
137
+		if ($matches = parse_url($this->IFrameURL)) {
138
+			if (isset($matches['scheme']) && !in_array($matches['scheme'], $allowed_schemes)) {
139
+				$result->addError(_t(__CLASS__ . '.VALIDATION_BANNEDURLSCHEME', "This URL scheme is not allowed."));
140
+			}
141
+		}
142
+
143
+		return $result;
144
+	}
145 145
 }
Please login to merge, or discard this patch.