Skip to content

Commit f68cd30

Browse files
authored
Merge pull request #70 from iMattPro/bugs
Fix ACP validation
2 parents 7ffb021 + a39818f commit f68cd30

File tree

4 files changed

+36
-20
lines changed

4 files changed

+36
-20
lines changed

event/listener.php

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -166,39 +166,55 @@ public function pwa_icon_name($value, $key)
166166
*/
167167
public function validate_pwa_options($event)
168168
{
169-
if ($event['config_definition']['validate'] !== 'pwa_options' || empty($event['cfg_array']['pwa_icon_small']) || empty($event['cfg_array']['pwa_icon_large']))
169+
// Ignore validation if icon fields are empty
170+
if ($event['config_definition']['validate'] !== 'pwa_options' || (empty($event['cfg_array']['pwa_icon_small']) && empty($event['cfg_array']['pwa_icon_large'])))
170171
{
171172
return;
172173
}
173174

174175
$value = $event['cfg_array'][$event['config_name']];
175-
$error = $event['error'];
176176

177-
$image = $this->root_path . $this->config['icons_path'] . '/' . $value;
178-
if (!file_exists($image))
177+
// Don't allow empty values, if one icon is set, both must be set.
178+
if (empty($value))
179179
{
180-
$error[] = $this->language->lang('PWA_IMAGE_NOT_FOUND', $value);
180+
$this->add_error($event, 'PWA_IMAGE_NOT_PROVIDED', $this->language->lang(strtoupper($event['config_name'])));
181+
return;
181182
}
182183

184+
// Check if image is valid
185+
$image = $this->root_path . $this->config['icons_path'] . '/' . $value;
183186
$image_info = $this->imagesize->getImageSize($image);
184187
if ($image_info !== false)
185188
{
186189
if (($event['config_name'] === 'pwa_icon_small' && $image_info['width'] !== 192 && $image_info['height'] !== 192) ||
187190
($event['config_name'] === 'pwa_icon_large' && $image_info['width'] !== 512 && $image_info['height'] !== 512))
188191
{
189-
$error[] = $this->language->lang('PWA_ICON_SIZE_INVALID', $value);
192+
$this->add_error($event, 'PWA_ICON_SIZE_INVALID', $value);
190193
}
191194

192195
if ($image_info['type'] !== IMAGETYPE_PNG)
193196
{
194-
$error[] = $this->language->lang('PWA_ICON_MIME_INVALID', $value);
197+
$this->add_error($event, 'PWA_ICON_MIME_INVALID', $value);
195198
}
196199
}
197200
else
198201
{
199-
$error[] = $this->language->lang('PWA_IMAGE_INVALID', $value);
202+
$this->add_error($event, 'PWA_IMAGE_INVALID', $value);
200203
}
204+
}
201205

206+
/**
207+
* Add errors to the error array
208+
*
209+
* @param \phpbb\event\data $event
210+
* @param string $error_key
211+
* @param string $param
212+
* @return void
213+
*/
214+
protected function add_error($event, $error_key, $param = null)
215+
{
216+
$error = $event['error'];
217+
$error[] = $this->language->lang($error_key, $param);
202218
$event['error'] = $error;
203219
}
204220
}

language/en/webpushnotifications_common_acp.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@
4545
'PWA_ICON_SMALL_EXPLAIN' => 'File name of a 192px x 192px PNG image. This file must be uploaded to your board’s <samp>icons</samp> directory.',
4646
'PWA_ICON_LARGE' => 'Large mobile device icon',
4747
'PWA_ICON_LARGE_EXPLAIN' => 'File name of a 512px x 512px PNG image. This file must be uploaded to your board’s <samp>icons</samp> directory.',
48-
'PWA_ICON_SIZE_INVALID' => '%s does not have the correct image dimensions.',
49-
'PWA_ICON_MIME_INVALID' => '%s must be a PNG image file.',
50-
'PWA_IMAGE_INVALID' => '%s does not appear to be a valid image file.',
51-
'PWA_IMAGE_NOT_FOUND' => '%s could not be found.',
48+
'PWA_ICON_SIZE_INVALID' => '“%s” does not have the correct image dimensions.',
49+
'PWA_ICON_MIME_INVALID' => '“%s” must be a PNG image file.',
50+
'PWA_IMAGE_INVALID' => '“%s” does not appear to be a valid image file.',
51+
'PWA_IMAGE_NOT_PROVIDED' => '%s field must not be empty. All icon fields must contain and image.',
5252
]);

language/ru/webpushnotifications_common_acp.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@
4545
'PWA_ICON_SMALL_EXPLAIN' => 'Имя файла изображения формата PNG размером 192 x 192 пикселя. Файл изображения должен быть загружен на сервер в папку <samp>images/icons</samp>.',
4646
'PWA_ICON_LARGE' => 'Большой значок для мобильного устройства',
4747
'PWA_ICON_LARGE_EXPLAIN' => 'Имя файла изображения формата PNG размером 512 x 512 пикселей. Файл изображения должен быть загружен на сервер в папку <samp>images/icons</samp>.',
48-
'PWA_ICON_SIZE_INVALID' => 'Изображение %s имеет некорректные размеры.',
49-
'PWA_ICON_MIME_INVALID' => 'Файл изображения %s должен иметь формат PNG.',
50-
'PWA_IMAGE_INVALID' => 'Файл %s не яввляется файлом изображения.',
51-
'PWA_IMAGE_NOT_FOUND' => 'Файл %s не найден.',
48+
'PWA_ICON_SIZE_INVALID' => 'Изображение «%s» имеет некорректные размеры.',
49+
'PWA_ICON_MIME_INVALID' => 'Файл изображения «%s» должен иметь формат PNG.',
50+
'PWA_IMAGE_INVALID' => 'Файл «%s» не яввляется файлом изображения.',
51+
'PWA_IMAGE_NOT_PROVIDED' => 'Настройка «%s» не может быть пустой. Необходимо задать все пути к значкам для мобильного устройства.',
5252
]);

tests/event/listener_test.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -310,19 +310,19 @@ public function validate_pwa_options_data()
310310
return [
311311
[
312312
['pwa_icon_small' => '192.png', 'pwa_icon_large' => '512.png'],
313-
['PWA_IMAGE_NOT_FOUND'],
313+
[],
314314
],
315315
[
316316
['pwa_icon_small' => '1.png', 'pwa_icon_large' => '512.png'],
317-
['PWA_IMAGE_NOT_FOUND', 'PWA_ICON_SIZE_INVALID'],
317+
['PWA_ICON_SIZE_INVALID'],
318318
],
319319
[
320320
['pwa_icon_small' => '1.png', 'pwa_icon_large' => '12.png'],
321-
['PWA_IMAGE_NOT_FOUND', 'PWA_ICON_SIZE_INVALID'],
321+
['PWA_ICON_SIZE_INVALID'],
322322
],
323323
[
324324
['pwa_icon_small' => '192.jpg', 'pwa_icon_large' => '512.gif'],
325-
['PWA_IMAGE_NOT_FOUND', 'PWA_ICON_MIME_INVALID'],
325+
['PWA_ICON_MIME_INVALID'],
326326
],
327327
[
328328
['pwa_icon_small' => '', 'pwa_icon_large' => ''],

0 commit comments

Comments
 (0)