These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | namespace dominus77\sweetalert2; |
||
4 | |||
5 | use Yii; |
||
6 | use yii\bootstrap\Widget; |
||
7 | use yii\helpers\Json; |
||
8 | use yii\helpers\ArrayHelper; |
||
9 | use dominus77\sweetalert2\assets\SweetAlert2Asset; |
||
10 | use dominus77\sweetalert2\assets\AnimateCssAsset; |
||
11 | |||
12 | /** |
||
13 | * Alert widget renders a message from session flash or custom messages. |
||
14 | * @package dominus77\sweetalert2 |
||
15 | */ |
||
16 | class Alert extends Widget |
||
17 | { |
||
18 | //modal type |
||
19 | const TYPE_INFO = 'info'; |
||
20 | const TYPE_ERROR = 'error'; |
||
21 | const TYPE_SUCCESS = 'success'; |
||
22 | const TYPE_WARNING = 'warning'; |
||
23 | const TYPE_QUESTION = 'question'; |
||
24 | //input type |
||
25 | const INPUT_TYPE_TEXT = 'text'; |
||
26 | const INPUT_TYPE_EMAIL = 'email'; |
||
27 | const INPUT_TYPE_PASSWORD = 'password'; |
||
28 | const INPUT_TYPE_NUMBER = 'number'; |
||
29 | const INPUT_TYPE_RANGE = 'range'; |
||
30 | const INPUT_TYPE_TEXTAREA = 'textarea'; |
||
31 | const INPUT_TYPE_SELECT = 'select'; |
||
32 | const INPUT_TYPE_RADIO = 'radio'; |
||
33 | const INPUT_TYPE_CHECKBOX = 'checkbox'; |
||
34 | const INPUT_TYPE_FILE = 'file'; |
||
35 | |||
36 | /** |
||
37 | * All the flash messages stored for the session are displayed and removed from the session |
||
38 | * Defaults to false. |
||
39 | * @var bool |
||
40 | */ |
||
41 | public $useSessionFlash = false; |
||
42 | |||
43 | /** |
||
44 | * @var string alert callback |
||
45 | */ |
||
46 | public $callback = 'function() {}'; |
||
47 | |||
48 | /** |
||
49 | * Initializes the widget |
||
50 | */ |
||
51 | 4 | public function init() |
|
52 | { |
||
53 | 4 | parent::init(); |
|
54 | 4 | $this->registerAssets(); |
|
55 | 4 | } |
|
56 | |||
57 | /** |
||
58 | * @return string|void |
||
59 | */ |
||
60 | 3 | public function run() |
|
61 | { |
||
62 | 3 | if ($this->useSessionFlash) { |
|
63 | 2 | if($session = $this->getSession()) { |
|
64 | 2 | $flashes = $session->getAllFlashes(); |
|
65 | 2 | $steps = []; |
|
66 | 2 | foreach ($flashes as $type => $data) { |
|
67 | $data = (array)$data; |
||
68 | foreach ($data as $message) { |
||
69 | array_push($steps, ['type' => $type, 'text' => $message]); |
||
70 | } |
||
71 | $session->removeFlash($type); |
||
72 | } |
||
73 | 2 | if (!empty($steps)) { |
|
74 | if (!is_array($steps[0]['text'])) { |
||
75 | $this->initSwalQueue($steps); |
||
76 | } else { |
||
77 | $steps[0]['text']['type'] = isset($steps[0]['text']['type']) ? $steps[0]['text']['type'] : $steps[0]['type']; |
||
78 | if (isset($steps[0]['text']['animation']) && $steps[0]['text']['animation'] == false) { |
||
79 | if (isset($steps[0]['text']['customClass'])) { |
||
80 | $this->registerAnimate(); |
||
81 | } |
||
82 | } |
||
83 | $this->options = $steps[0]['text']; |
||
84 | $this->callback = isset($steps[1]['text']['callback']) ? $steps[1]['text']['callback'] : $this->callback; |
||
85 | 2 | $this->initSwal($this->getOptions(), $this->callback); |
|
86 | } |
||
87 | } |
||
88 | } |
||
89 | } else { |
||
90 | 1 | $this->initSwal($this->getOptions(), $this->callback); |
|
91 | } |
||
92 | 3 | } |
|
93 | |||
94 | /** |
||
95 | * Get widget options |
||
96 | * |
||
97 | * @return string |
||
98 | */ |
||
99 | 2 | public function getOptions() |
|
100 | { |
||
101 | 2 | if (isset($this->options['id'])) |
|
102 | 2 | unset($this->options['id']); |
|
103 | |||
104 | 2 | if (ArrayHelper::isIndexed($this->options)) { |
|
105 | 1 | $str = ''; |
|
106 | 1 | foreach ($this->options as $value) { |
|
107 | 1 | $str .= '"' . $value . '",'; |
|
108 | } |
||
109 | 1 | return chop($str, ' ,'); |
|
110 | } |
||
111 | 1 | return Json::encode($this->options); |
|
112 | } |
||
113 | |||
114 | /** |
||
115 | * @param array $steps |
||
116 | */ |
||
117 | protected function initSwalQueue($steps = []) |
||
118 | { |
||
119 | $view = $this->getView(); |
||
120 | $js = "swal.queue(" . Json::encode($steps) . ");"; |
||
121 | $this->view->registerJs($js, $view::POS_END); |
||
122 | } |
||
123 | |||
124 | /** |
||
125 | * @param string $options |
||
126 | * @param string $callback |
||
127 | */ |
||
128 | 1 | protected function initSwal($options = '', $callback = '') |
|
129 | { |
||
130 | 1 | $view = $this->getView(); |
|
131 | 1 | $js = "swal({$options}).then({$callback}).catch(swal.noop);"; |
|
132 | 1 | $this->view->registerJs($js, $view::POS_END); |
|
133 | 1 | } |
|
134 | |||
135 | /** |
||
136 | * Register Animate Assets |
||
137 | */ |
||
138 | 1 | protected function registerAnimate() |
|
139 | { |
||
140 | 1 | AnimateCssAsset::register($this->view); |
|
141 | 1 | } |
|
142 | |||
143 | /** |
||
144 | * Register client assets |
||
145 | */ |
||
146 | 4 | protected function registerAssets() |
|
147 | { |
||
148 | 4 | SweetAlert2Asset::register($this->view); |
|
149 | 4 | if (isset($this->options['animation']) && $this->options['animation'] == false) { |
|
150 | 1 | if (isset($this->options['customClass'])) { |
|
151 | 1 | $this->registerAnimate(); |
|
152 | } |
||
153 | } |
||
154 | 4 | } |
|
155 | |||
156 | /** |
||
157 | * @return \yii\web\Session |
||
158 | */ |
||
159 | 2 | private function getSession() |
|
160 | { |
||
161 | 2 | if($session = Yii::$app->getSession()) { |
|
0 ignored issues
–
show
|
|||
162 | 2 | return $session; |
|
163 | } |
||
164 | return false; |
||
0 ignored issues
–
show
The return type of
return false; (false ) is incompatible with the return type documented by dominus77\sweetalert2\Alert::getSession of type yii\web\Session .
If you return a value from a function or method, it should be a sub-type of the type that is given by the parent type f.e. an interface, or abstract method. This is more formally defined by the Lizkov substitution principle, and guarantees that classes that depend on the parent type can use any instance of a child type interchangably. This principle also belongs to the SOLID principles for object oriented design. Let’s take a look at an example: class Author {
private $name;
public function __construct($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
abstract class Post {
public function getAuthor() {
return 'Johannes';
}
}
class BlogPost extends Post {
public function getAuthor() {
return new Author('Johannes');
}
}
class ForumPost extends Post { /* ... */ }
function my_function(Post $post) {
echo strtoupper($post->getAuthor());
}
Our function ![]() |
|||
165 | } |
||
166 | } |
||
167 |
It seems like the method you are trying to call exists only in some of the possible types.
Let’s take a look at an example:
Available Fixes
Add an additional type-check:
Only allow a single type to be passed if the variable comes from a parameter: