Completed
Push — master ( 881744...c0ab58 )
by Thomas
22s queued 15s
created

PureModal::setContent()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 5
rs 10
1
<?php
2
3
namespace LeKoala\PureModal;
4
5
use SilverStripe\Admin\ModelAdmin;
6
use SilverStripe\Control\Controller;
7
use SilverStripe\Forms\DatalessField;
8
use SilverStripe\Forms\FormField;
9
use SilverStripe\View\SSViewer;
10
11
/**
12
 * A simple pure css modal for usage in the cms
13
 *
14
 * If your content contains a form, it should be loaded through an iframe
15
 * because you cannot nest forms
16
 *
17
 * @author lekoala
18
 */
19
class PureModal extends DatalessField
20
{
21
    /**
22
     * @var string
23
     */
24
    protected $title;
25
26
    /**
27
     * @var string
28
     */
29
    protected $iframe;
30
31
    /**
32
     * @var bool
33
     */
34
    protected $iframeTop;
35
36
    public function __construct($name, $title, $content)
37
    {
38
        $this->setContent($content);
39
40
        parent::__construct($name, $title);
41
    }
42
43
    public function getAttributes()
44
    {
45
        $attrs = [];
46
        if ($this->getIframe()) {
47
            $attrs['onclick'] = "resizeIframe('" .$this->getIframeID(). "')";
48
        }
49
        return $attrs;
50
    }
51
52
    /**
53
     * Render a dialog
54
     *
55
     * @param Controller $controller
56
     * @param array $customFields
57
     * @return string
58
     */
59
    public static function renderDialog($controller, $customFields = null)
60
    {
61
        // Set empty content by default otherwise it will render the full page
62
        if (empty($customFields['Content'])) {
63
            $customFields['Content'] = '';
64
        }
65
66
        $templates = SSViewer::get_templates_by_class(static::class, '_Dialog', __CLASS__);
67
        $templatesWithSuffix = SSViewer::chooseTemplate($templates);
68
69
        return $controller->renderWith($templatesWithSuffix, $customFields);
70
    }
71
72
    /**
73
     * Sets the content of this field to a new value.
74
     *
75
     * @param string|FormField $content
76
     *
77
     * @return $this
78
     */
79
    public function setContent($content)
80
    {
81
        $this->content = $content;
0 ignored issues
show
Bug Best Practice introduced by
The property content does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
82
83
        return $this;
84
    }
85
86
    /**
87
     * @return string
88
     */
89
    public function getContent()
90
    {
91
        return $this->content;
92
    }
93
94
    /**
95
     * Build an url for the current controller and pass along some parameters
96
     *
97
     * If you want to call actions on a model, use getModelLink
98
     *
99
     * @param string $action
100
     * @param array $params
101
     * @return string
102
     */
103
    public function getControllerLink($action, array $params = null)
104
    {
105
        if ($params === null) {
106
            $params = [];
107
        }
108
        $ctrl = Controller::curr();
109
        if ($ctrl instanceof ModelAdmin) {
110
            $allParams = $ctrl->getRequest()->allParams();
111
            $modelClass = $ctrl->getRequest()->param('ModelClass');
112
            $action = $modelClass . '/' . $action;
113
            $params = array_merge($allParams, $params);
114
        }
115
        if (!empty($params)) {
116
            $action .= '?' . http_build_query($params);
117
        }
118
        return $ctrl->Link($action);
119
    }
120
121
    /**
122
     * @return string
123
     */
124
    public function getTitle()
125
    {
126
        return $this->title;
127
    }
128
129
    /**
130
     * @param string $title
131
     * @return $this
132
     */
133
    public function setTitle($title)
134
    {
135
        $this->title = $title;
136
137
        return $this;
138
    }
139
140
    /**
141
     * @return string
142
     */
143
    public function getIframe()
144
    {
145
        return $this->iframe;
146
    }
147
148
    /**
149
     * Link to iframe src
150
     *
151
     * @param string $iframe
152
     * @return $this
153
     */
154
    public function setIframe($iframe)
155
    {
156
        $this->iframe = $iframe;
157
158
        return $this;
159
    }
160
161
    /**
162
     * Helper for setIframe link using conventions
163
     *
164
     * @param string $action
165
     * @return $this
166
     */
167
    public function setIframeAction($action)
168
    {
169
        return $this->setIframe($this->getControllerLink($action));
170
    }
171
172
    /**
173
     * @return bool
174
     */
175
    public function getIframeTop()
176
    {
177
        return $this->iframeTop;
178
    }
179
180
    /**
181
     * Should the iframe be above the content
182
     *
183
     * @param bool $iframeTop
184
     * @return $this
185
     */
186
    public function setIframeTop($iframeTop)
187
    {
188
        $this->iframeTop = $iframeTop;
189
        return $this;
190
    }
191
192
    /**
193
     *
194
     * @return string
195
     */
196
    public function getModalID()
197
    {
198
        return 'modal_' . $this->name;
199
    }
200
201
    /**
202
     *
203
     * @return string
204
     */
205
    public function getIframeID()
206
    {
207
        return $this->getModalID() . '_iframe';
208
    }
209
}
210