Passed
Push — master ( 05cb95...eed2c7 )
by Michael
02:06
created

PicturesHandler::receivePicture()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 47
Code Lines 30

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 30
dl 0
loc 47
rs 9.44
c 0
b 0
f 0
cc 3
nc 3
nop 9

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
namespace XoopsModules\Adslight;
4
5
/*
6
-------------------------------------------------------------------------
7
                     ADSLIGHT 2 : Module for Xoops
8
9
        Redesigned and ameliorate By Luc Bizet user at www.frxoops.org
10
        Started with the Classifieds module and made MANY changes
11
        Website : http://www.luc-bizet.fr
12
        Contact : [email protected]
13
-------------------------------------------------------------------------
14
             Original credits below Version History
15
##########################################################################
16
#                    Classified Module for Xoops                         #
17
#  By John Mordo user jlm69 at www.xoops.org and www.jlmzone.com         #
18
#      Started with the MyAds module and made MANY changes               #
19
##########################################################################
20
 Original Author: Pascal Le Boustouller
21
 Author Website : [email protected]
22
 Licence Type   : GPL
23
-------------------------------------------------------------------------
24
*/
25
26
use Xmf\Request;
27
use XoopsModules\Adslight;
28
29
/**
30
 * Protection against inclusion outside the site
31
 */
32
// defined('XOOPS_ROOT_PATH') || die('Restricted access');
33
34
/**
35
 * Includes of form objects and uploader
36
 */
37
require_once XOOPS_ROOT_PATH . '/class/uploader.php';
38
require_once XOOPS_ROOT_PATH . '/kernel/object.php';
39
require_once XOOPS_ROOT_PATH . '/class/xoopsformloader.php';
40
require_once XOOPS_ROOT_PATH . '/kernel/object.php';
41
42
// -------------------------------------------------------------------------
43
// ------------------light_pictures user handler class -------------------
44
// -------------------------------------------------------------------------
45
46
/**
47
 * PicturesHandler class definition
48
 *
49
 * This class provides simple mechanism to manage {@see Pictures} objects
50
 * and generate forms for inclusion
51
 *
52
 * @todo change this to a XoopsPersistableObjectHandler and remove 'most' method overloads
53
 */
54
class PicturesHandler extends \XoopsObjectHandler
55
{
56
    /**
57
     * Class constructor
58
     * @param \XoopsDatabase|null $db
59
     */
60
    public function __construct($db)
61
    {
62
        parent::__construct($db, 'adslight_pictures', Pictures::class, 'cod_img', 'title');
0 ignored issues
show
Bug introduced by
It seems like $db can also be of type null; however, parameter $db of XoopsObjectHandler::__construct() does only seem to accept XoopsDatabase, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

62
        parent::__construct(/** @scrutinizer ignore-type */ $db, 'adslight_pictures', Pictures::class, 'cod_img', 'title');
Loading history...
Unused Code introduced by
The call to XoopsObjectHandler::__construct() has too many arguments starting with 'adslight_pictures'. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

62
        parent::/** @scrutinizer ignore-call */ 
63
                __construct($db, 'adslight_pictures', Pictures::class, 'cod_img', 'title');

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress. Please note the @ignore annotation hint above.

Loading history...
63
    }
64
65
    /**
66
     * create a new light_pictures
67
     *
68
     * @param  bool $isNew flag the new objects as "new"?
69
     * @return \XoopsObject light_pictures
70
     */
71
    public function create($isNew = true)
72
    {
73
        $adslightPictures = new Adslight\Pictures();
74
        if ($isNew) {
75
            $adslightPictures->setNew();
76
        } else {
77
            $adslightPictures->unsetNew();
78
        }
79
80
        return $adslightPictures;
81
    }
82
83
    /**
84
     * retrieve a light_pictures
85
     *
86
     * @param int $id of the light_pictures
87
     * @param     $lid
88
     *
89
     * @return mixed reference to the {@link light_pictures} object, FALSE if failed
90
     */
91
    public function get($id, $lid = null)
92
    {
93
        global $moduleDirName;
94
95
        $sql = 'SELECT * FROM ' . $this->db->prefix('adslight_pictures') . ' WHERE cod_img=' . $id . ' AND lid=' . $lid . ' ';
96
        if (!$result = $this->db->query($sql)) {
97
            return false;
98
        }
99
        $numrows = $this->db->getRowsNum($result);
100
        if (1 == $numrows) {
101
            $adslightPictures = new Adslight\Pictures();
102
            $adslightPictures->assignVars($this->db->fetchArray($result));
103
104
            return $adslightPictures;
105
        }
106
107
        return false;
108
    }
109
110
    /**
111
     * insert a new AdslightPicture object into the database
112
     *
113
     * @param \XoopsObject $adslightPictures
114
     * @param bool        $force
115
     * @return bool FALSE if failed, TRUE if already present and unchanged or successful
116
     */
117
    public function insert(\XoopsObject $adslightPictures, $force = false)
118
    {
119
        global $xoopsConfig, $lid, $moduleDirName;
120
        if (!$adslightPictures instanceof Pictures) {
121
            return false;
122
        }
123
        if (!$adslightPictures->isDirty()) {
124
            return true;
125
        }
126
        if (!$adslightPictures->cleanVars()) {
127
            return false;
128
        }
129
        foreach ($adslightPictures->cleanVars as $k => $v) {
130
            ${$k} = $v;
131
        }
132
        $now = time();
133
        if ($adslightPictures->isNew()) {
134
            // add/modify of Pictures
135
            $adslightPictures = new Adslight\Pictures();
136
137
            $format = 'INSERT INTO `%s` (cod_img, title, date_added, date_modified, lid, uid_owner, url)';
138
            $format .= 'VALUES (%u, %s, %s, %s, %s, %s, %s)';
139
            $sql    = sprintf($format, $this->db->prefix('adslight_pictures'), $cod_img, $this->db->quoteString($title), $now, $now, $this->db->quoteString($lid), $this->db->quoteString($uid_owner), $this->db->quoteString($url));
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $title seems to be never defined.
Loading history...
Comprehensibility Best Practice introduced by
The variable $cod_img seems to be never defined.
Loading history...
Comprehensibility Best Practice introduced by
The variable $url seems to be never defined.
Loading history...
Comprehensibility Best Practice introduced by
The variable $uid_owner seems to be never defined.
Loading history...
140
            $force  = true;
141
        } else {
142
            $format = 'UPDATE `%s` SET ';
143
            $format .= 'cod_img=%u, title=%s, date_added=%s, date_modified=%s, lid=%s, uid_owner=%s, url=%s';
144
            $format .= ' WHERE cod_img = %u';
145
            $sql    = sprintf($format, $this->db->prefix('adslight_pictures'), $cod_img, $this->db->quoteString($title), $now, $now, $this->db->quoteString($lid), $this->db->quoteString($uid_owner), $this->db->quoteString($url), $cod_img);
146
        }
147
        if (false !== $force) {
148
            $result = $this->db->queryF($sql);
149
        } else {
150
            $result = $this->db->query($sql);
151
        }
152
        if (!$result) {
153
            return false;
154
        }
155
        if (empty($cod_img)) {
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $cod_img seems to never exist and therefore empty should always be true.
Loading history...
156
            $cod_img = $this->db->getInsertId();
157
        }
158
        $adslightPictures->assignVars([
159
                                          'cod_img' => $cod_img,
160
                                          'lid'     => $lid,
161
                                          'url'     => $url,
162
                                      ]);
163
164
        return true;
165
    }
166
167
    /**
168
     * delete Pictures object from the database
169
     *
170
     * @param  \XoopsObject $adslightPictures reference to the Pictures to delete
171
     * @param  bool        $force
172
     * @return bool        FALSE if failed.
173
     */
174
    public function delete(\XoopsObject $adslightPictures, $force = false)
175
    {
176
        global $moduleDirName;
177
178
        if (!$adslightPictures instanceof Pictures) {
179
            return false;
180
        }
181
        $sql = sprintf('DELETE FROM `%s` WHERE cod_img = %u', $this->db->prefix('adslight_pictures'), $adslightPictures->getVar('cod_img'));
0 ignored issues
show
Bug introduced by
It seems like $adslightPictures->getVar('cod_img') can also be of type array and array; however, parameter $args of sprintf() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

181
        $sql = sprintf('DELETE FROM `%s` WHERE cod_img = %u', $this->db->prefix('adslight_pictures'), /** @scrutinizer ignore-type */ $adslightPictures->getVar('cod_img'));
Loading history...
182
        if (false !== $force) {
183
            $result = $this->db->queryF($sql);
184
        } else {
185
            $result = $this->db->query($sql);
186
        }
187
        if (!$result) {
188
            return false;
189
        }
190
191
        return true;
192
    }
193
194
    /**
195
     * retrieve Pictures object(s) from the database
196
     *
197
     * @param  \CriteriaElement|\CriteriaCompo $criteria  {@link \CriteriaElement} conditions to be met
198
     * @param  bool            $id_as_key use the UID as key for the array?
199
     * @return array  array of {@link Pictures} objects
200
     */
201
    public function &getObjects(\CriteriaElement $criteria = null, $id_as_key = false)
202
    {
203
        global $moduleDirName;
204
205
        $ret   = [];
206
        $limit = $start = 0;
207
        $sql   = 'SELECT * FROM ' . $this->db->prefix('adslight_pictures');
208
        if (isset($criteria) && $criteria instanceof \CriteriaElement) {
209
            $sql .= ' ' . $criteria->renderWhere();
0 ignored issues
show
Bug introduced by
The method renderWhere() does not exist on CriteriaElement. Did you maybe mean render()? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

209
            $sql .= ' ' . $criteria->/** @scrutinizer ignore-call */ renderWhere();

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
210
            if ('' != $criteria->getSort()) {
211
                $sql .= ' ORDER BY ' . $criteria->getSort() . ' ' . $criteria->getOrder();
212
            }
213
            $limit = $criteria->getLimit();
214
            $start = $criteria->getStart();
215
        }
216
        $result = $this->db->query($sql, $limit, $start);
217
        if (!$result) {
218
            return $ret;
219
        }
220
        while (false !== ($myrow = $this->db->fetchArray($result))) {
221
            $adslightPictures = new Adslight\Pictures();
222
            $adslightPictures->assignVars($myrow);
223
            if (!$id_as_key) {
224
                $ret[] = $adslightPictures;
225
            } else {
226
                $ret[$myrow['cod_img']] = $adslightPictures;
227
            }
228
            unset($adslightPictures);
229
        }
230
231
        return $ret;
232
    }
233
234
    /**
235
     * count Pictures matching a condition
236
     *
237
     * @param  \CriteriaElement|\CriteriaCompo $criteria {@link \CriteriaElement} to match
238
     * @return int    count of Pictures
239
     */
240
    public function getCount(\CriteriaElement $criteria = null)
241
    {
242
        global $moduleDirName;
243
244
        $sql = 'SELECT COUNT(*) FROM ' . $this->db->prefix('adslight_pictures');
245
        if (isset($criteria) && $criteria instanceof \CriteriaElement) {
246
            $sql .= ' ' . $criteria->renderWhere();
247
        }
248
        $result = $this->db->query($sql);
249
        if (!$result) {
250
            return 0;
251
        }
252
        list($count) = $this->db->fetchRow($result);
253
254
        return $count;
255
    }
256
257
    /**
258
     * delete Pictures matching a set of conditions
259
     *
260
     * @param  \CriteriaElement $criteria {@link \CriteriaElement}
261
     * @return bool   FALSE if deletion failed
262
     */
263
    public function deleteAll(\CriteriaElement $criteria = null)
264
    {
265
        global $moduleDirName;
266
        $sql = 'DELETE FROM ' . $this->db->prefix('adslight_pictures');
267
        if (isset($criteria) && $criteria instanceof \CriteriaElement) {
268
            $sql .= ' ' . $criteria->renderWhere();
269
        }
270
        if (!$result = $this->db->query($sql)) {
0 ignored issues
show
Unused Code introduced by
The assignment to $result is dead and can be removed.
Loading history...
271
            return false;
272
        }
273
274
        return true;
275
    }
276
277
    /**
278
     * Render a form to send pictures
279
     *
280
     * @param int      $uid
281
     * @param int      $lid
282
     * @param int      $maxbytes the maximum size of a picture
283
     * @param \XoopsTpl $xoopsTpl the one in which the form will be rendered
284
     * @return bool   TRUE
285
     *
286
     * obs: Some functions wont work on php 4 so edit lines down under acording to your version
287
     */
288
    public function renderFormSubmit($uid, $lid, $maxbytes, $xoopsTpl)
289
    {
290
        global $moduleDirName, $main_lang, $xoopsUser;
291
        $uid        = (int)$uid;
292
        $lid        = (int)$lid;
293
        $form       = new \XoopsThemeForm(_ADSLIGHT_SUBMIT_PIC_TITLE, 'form_picture', XOOPS_URL . "/modules/adslight/add_photo.php?lid={$lid}&uid=" . $xoopsUser->getVar('uid'), 'post', true);
294
        $field_url  = new \XoopsFormFile(_ADSLIGHT_SELECT_PHOTO, 'sel_photo', 2000000);
295
        $field_desc = new \XoopsFormText(_ADSLIGHT_CAPTION, 'caption', 35, 55);
296
297
        $form->setExtra('enctype="multipart/form-data"');
298
        $button_send   = new \XoopsFormButton('', 'submit_button', _ADSLIGHT_UPLOADPICTURE, 'submit');
299
        $field_warning = new \XoopsFormLabel(sprintf(_ADSLIGHT_YOUCANUPLOAD, $maxbytes / 1024));
300
        $field_lid     = new \XoopsFormHidden('lid', $lid);
301
        $field_uid     = new \XoopsFormHidden('uid', $uid);
302
303
        $field_token = $GLOBALS['xoopsSecurity']->getTokenHTML();
304
305
        $form->addElement($field_warning);
306
        $form->addElement($field_url, true);
307
        $form->addElement($field_desc, true);
308
        $form->addElement($field_lid, true);
309
        $form->addElement($field_uid, true);
310
311
        $form->addElement($field_token, true);
312
313
        $form->addElement($button_send);
314
        if (str_replace('.', '', PHP_VERSION) > 499) {
315
            $form->assign($xoopsTpl);
316
        } else {
317
            $form->display();
318
        }
319
320
        return true;
321
    }
322
323
    /**
324
     * Render a form to edit the description of the pictures
325
     *
326
     * @param  string $caption  The description of the picture
327
     * @param  int    $cod_img  the id of the image in database
328
     * @param  string   $filename the url to the thumb of the image so it can be displayed
329
     * @return bool   TRUE
330
     */
331
    public function renderFormEdit($caption, $cod_img, $filename)
332
    {
333
        global $moduleDirName, $main_lang;
334
335
        $form       = new \XoopsThemeForm(_ADSLIGHT_EDIT_CAPTION, 'form_picture', 'editdesc.php', 'post', true);
336
        $field_desc = new \XoopsFormText($caption, 'caption', 35, 55);
337
        $form->setExtra('enctype="multipart/form-data"');
338
        $button_send = new \XoopsFormButton(_ADSLIGHT_EDIT, 'submit_button', _SUBMIT, 'submit');
339
        //@todo - replace alt with language string
340
        $field_warning = new \XoopsFormLabel("<img src='{$filename}' alt='sssss'>");
341
        $field_cod_img = new \XoopsFormHidden('cod_img', $cod_img);
342
        //    $field_lid = new \XoopsFormHidden('lid', $lid);
343
        $field_marker = new \XoopsFormHidden('marker', 1);
344
345
        $field_token = $GLOBALS['xoopsSecurity']->getTokenHTML();
346
347
        $form->addElement($field_warning);
348
        $form->addElement($field_desc);
349
        $form->addElement($field_cod_img);
350
        $form->addElement($field_marker);
351
        $form->addElement($field_token);
352
        $form->addElement($button_send);
353
        $form->display();
354
355
        return true;
356
    }
357
358
    /**
359
     * Upload the file and Save into database
360
     *
361
     * @param  string $title         A litle description of the file
362
     * @param  string $path_upload   The path to where the file should be uploaded
363
     * @param  int  $thumbwidth    the width in pixels that the thumbnail will have
364
     * @param  int  $thumbheight   the height in pixels that the thumbnail will have
365
     * @param  int  $pictwidth     the width in pixels that the pic will have
366
     * @param  int  $pictheight    the height in pixels that the pic will have
367
     * @param  int  $maxfilebytes  the maximum size a file can have to be uploaded in bytes
368
     * @param  int  $maxfilewidth  the maximum width in pixels that a pic can have
369
     * @param  int  $maxfileheight the maximum height in pixels that a pic can have
370
     * @return bool FALSE if upload fails or database fails
371
     */
372
    public function receivePicture($title, $path_upload, $thumbwidth, $thumbheight, $pictwidth, $pictheight, $maxfilebytes, $maxfilewidth, $maxfileheight)
373
    {
374
        global $xoopsDB, $lid;
375
        //busca id do user logado
376
        $uid = $GLOBALS['xoopsUser']->getVar('uid');
0 ignored issues
show
Unused Code introduced by
The assignment to $uid is dead and can be removed.
Loading history...
377
        $lid = Request::getInt('lid', 0, 'POST');
378
        //create a hash so it does not erase another file
379
        $hash1 = time();
380
        $hash  = mb_substr($hash1, 0, 4);
0 ignored issues
show
Unused Code introduced by
The assignment to $hash is dead and can be removed.
Loading history...
381
        // mimetypes and settings put this in admin part later
382
        $allowed_mimetypes = [
383
            'image/jpeg',
384
            'image/gif',
385
        ];
386
        $maxfilesize       = $maxfilebytes;
387
        // create the object to upload
388
        $uploader = new \XoopsMediaUploader($path_upload, $allowed_mimetypes, $maxfilesize, $maxfilewidth, $maxfileheight);
389
        // fetch the media
390
        if ($uploader->fetchMedia($_POST['xoops_upload_file'][0])) {
391
            //lets create a name for it
392
            $uploader->setPrefix("pic_{$lid}_");
393
            //now let s upload the file
394
            if (!$uploader->upload()) {
395
                // if there are errors lets return them
396
                echo '<div style="color:#FF0000; background-color:#FFEAF4; border-color:#FF0000; border-width:thick; border-style:solid; text-align:center;"><p>' . $uploader->getErrors() . '</p></div>';
397
398
                return false;
399
            }
400
            // now let s create a new object picture and set its variables
401
            $picture = $this->create();
402
            $url     = $uploader->getSavedFileName();
403
            $picture->setVar('url', $url);
404
            $picture->setVar('title', $title);
405
            $uid = $GLOBALS['xoopsUser']->getVar('uid');
406
            $lid = $lid;
407
            $picture->setVar('lid', $lid);
408
            $picture->setVar('uid_owner', $uid);
409
            $this->insert($picture);
410
            $saved_destination = $uploader->getSavedDestination();
411
            $this->resizeImage($saved_destination, $thumbwidth, $thumbheight, $pictwidth, $pictheight, $path_upload);
412
        } else {
413
            echo '<div style="color:#FF0000; background-color:#FFEAF4; border-color:#FF0000; border-width:thick; border-style:solid; text-align:center;"><p>' . $uploader->getErrors() . '</p></div>';
414
415
            return false;
416
        }
417
418
        return true;
419
    }
420
421
    /**
422
     * Resize a picture and save it to $path_upload
423
     *
424
     * @param  string $img         the path to the file
425
     * @param  int    $thumbwidth  the width in pixels that the thumbnail will have
426
     * @param  int    $thumbheight the height in pixels that the thumbnail will have
427
     * @param  int    $pictwidth   the width in pixels that the pic will have
428
     * @param  int    $pictheight  the height in pixels that the pic will have
429
     * @param  string $path_upload The path to where the files should be saved after resizing
430
     */
431
    public function resizeImage($img, $thumbwidth, $thumbheight, $pictwidth, $pictheight, $path_upload)
432
    {
433
        $img2   = $img;
434
        $path   = pathinfo($img);
435
        $img    = imagecreatefromjpeg($img);
436
        $xratio = $thumbwidth / imagesx($img);
0 ignored issues
show
Bug introduced by
It seems like $img can also be of type false; however, parameter $image of imagesx() does only seem to accept resource, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

436
        $xratio = $thumbwidth / imagesx(/** @scrutinizer ignore-type */ $img);
Loading history...
437
        $yratio = $thumbheight / imagesy($img);
0 ignored issues
show
Bug introduced by
It seems like $img can also be of type false; however, parameter $image of imagesy() does only seem to accept resource, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

437
        $yratio = $thumbheight / imagesy(/** @scrutinizer ignore-type */ $img);
Loading history...
438
        if ($xratio < 1 || $yratio < 1) {
439
            if ($xratio < $yratio) {
440
                $resized = imagecreatetruecolor($thumbwidth, floor(imagesy($img) * $xratio));
0 ignored issues
show
Bug introduced by
floor(imagesy($img) * $xratio) of type double is incompatible with the type integer expected by parameter $height of imagecreatetruecolor(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

440
                $resized = imagecreatetruecolor($thumbwidth, /** @scrutinizer ignore-type */ floor(imagesy($img) * $xratio));
Loading history...
441
            } else {
442
                $resized = imagecreatetruecolor(floor(imagesx($img) * $yratio), $thumbheight);
0 ignored issues
show
Bug introduced by
floor(imagesx($img) * $yratio) of type double is incompatible with the type integer expected by parameter $width of imagecreatetruecolor(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

442
                $resized = imagecreatetruecolor(/** @scrutinizer ignore-type */ floor(imagesx($img) * $yratio), $thumbheight);
Loading history...
443
            }
444
            imagecopyresampled($resized, $img, 0, 0, 0, 0, imagesx($resized) + 1, imagesy($resized) + 1, imagesx($img), imagesy($img));
0 ignored issues
show
Bug introduced by
It seems like $img can also be of type false; however, parameter $src_image of imagecopyresampled() does only seem to accept resource, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

444
            imagecopyresampled($resized, /** @scrutinizer ignore-type */ $img, 0, 0, 0, 0, imagesx($resized) + 1, imagesy($resized) + 1, imagesx($img), imagesy($img));
Loading history...
Bug introduced by
It seems like $resized can also be of type false; however, parameter $dst_image of imagecopyresampled() does only seem to accept resource, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

444
            imagecopyresampled(/** @scrutinizer ignore-type */ $resized, $img, 0, 0, 0, 0, imagesx($resized) + 1, imagesy($resized) + 1, imagesx($img), imagesy($img));
Loading history...
445
            imagejpeg($resized, "{$path_upload}/thumbs/thumb_{$path['basename']}");
0 ignored issues
show
Bug introduced by
It seems like $resized can also be of type false; however, parameter $image of imagejpeg() does only seem to accept resource, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

445
            imagejpeg(/** @scrutinizer ignore-type */ $resized, "{$path_upload}/thumbs/thumb_{$path['basename']}");
Loading history...
446
            imagedestroy($resized);
0 ignored issues
show
Bug introduced by
It seems like $resized can also be of type false; however, parameter $image of imagedestroy() does only seem to accept resource, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

446
            imagedestroy(/** @scrutinizer ignore-type */ $resized);
Loading history...
447
        } else {
448
            imagejpeg($img, "{$path_upload}/thumbs/thumb_{$path['basename']}");
449
        }
450
        imagedestroy($img);
451
        $path2   = pathinfo($img2);
452
        $img2    = imagecreatefromjpeg($img2);
453
        $xratio2 = $pictwidth / imagesx($img2);
454
        $yratio2 = $pictheight / imagesy($img2);
455
        if ($xratio2 < 1 || $yratio2 < 1) {
456
            if ($xratio2 < $yratio2) {
457
                $resized2 = imagecreatetruecolor($pictwidth, floor(imagesy($img2) * $xratio2));
458
            } else {
459
                $resized2 = imagecreatetruecolor(floor(imagesx($img2) * $yratio2), $pictheight);
460
            }
461
            imagecopyresampled($resized2, $img2, 0, 0, 0, 0, imagesx($resized2) + 1, imagesy($resized2) + 1, imagesx($img2), imagesy($img2));
462
            imagejpeg($resized2, "{$path_upload}/midsize/resized_{$path2['basename']}");
463
            imagedestroy($resized2);
464
        } else {
465
            imagejpeg($img2, "{$path_upload}/midsize/resized_{$path2['basename']}");
466
        }
467
        imagedestroy($img2);
468
    }
469
}
470