Passed
Pull Request — master (#88)
by Michael
13:07
created

submit.php (1 issue)

Labels
Severity
1
<?php declare(strict_types=1);
2
3
use XoopsModules\Tag\{
4
    Helper as TagHelper,
5
    Tag,
6
    TagHandler
7
};
8
use XoopsModules\Tdmdownloads\{
9
    Helper
10
};
11
12
/**
13
 * TDMDownload
14
 *
15
 * You may not change or alter any portion of this comment or credits
16
 * of supporting developers from this source code or any supporting source code
17
 * which is considered copyrighted (c) material of the original comment or credit authors.
18
 * This program is distributed in the hope that it will be useful,
19
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21
 *
22
 * @copyright   Gregory Mage (Aka Mage)
23
 * @license     GNU GPL 2 (https://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
24
 * @author      Gregory Mage (Aka Mage)
25
 */
26
require_once __DIR__ . '/header.php';
27
$moduleDirName = basename(__DIR__);
28
29
/** @var \XoopsModules\Tdmdownloads\Helper $helper */
30
$helper = Helper::getInstance();
31
// template d'affichage
32
$GLOBALS['xoopsOption']['template_main'] = 'tdmdownloads_submit.tpl';
33
require_once XOOPS_ROOT_PATH . '/header.php';
34
/** @var \xos_opal_Theme $xoTheme */
35
$xoTheme->addStylesheet(XOOPS_URL . '/modules/' . $moduleDirName . '/assets/css/styles.css', null);
36
37
//On recupere la valeur de l'argument op dans l'URL$
38
$op  = \Xmf\Request::getString('op', 'list');
39
$lid = \Xmf\Request::getInt('lid', 0, 'REQUEST');
40
41
// redirection si pas de droit pour poster
42
if (false === $perm_submit) {
43
    redirect_header('index.php', 2, _NOPERM);
44
}
45
// user must have perm to autoapprove if he want to modify, otherwise modfile.php must be used
46
if (false === $perm_autoapprove && $lid > 0) {
47
    redirect_header('index.php', 2, _NOPERM);
48
}
49
50
//Les valeurs de op qui vont permettre d'aller dans les differentes parties de la page
51
switch ($op) {
52
    // Vue liste
53
    case 'list':
54
        //navigation
55
        $navigation = _MD_TDMDOWNLOADS_SUBMIT_PROPOSER;
56
        $xoopsTpl->assign('navigation', $navigation);
57
        // référencement
58
        // titre de la page
59
        $titre = _MD_TDMDOWNLOADS_SUBMIT_PROPOSER . '&nbsp;-&nbsp;';
60
        $titre .= $xoopsModule->name();
61
        $xoopsTpl->assign('xoops_pagetitle', $titre);
62
        //description
63
        $xoTheme->addMeta('meta', 'description', strip_tags(_MD_TDMDOWNLOADS_SUBMIT_PROPOSER));
64
65
        //Affichage du formulaire de notation des téléchargements
66
        /** @var \XoopsModules\Tdmdownloads\Downloads $obj */
67
        $obj = $downloadsHandler->create();
68
        /** @var \XoopsThemeForm $form */
69
        $form = $obj->getForm($donnee = [], false);
70
        $xoopsTpl->assign('themeForm', $form->render());
71
        break;
72
    // save
73
    case 'save_downloads':
74
        require_once XOOPS_ROOT_PATH . '/class/uploader.php';
75
        $newUpload = true;
76
        /** @var \XoopsModules\Tdmdownloads\Downloads $obj */
77
        if (true === $perm_autoapprove && $lid > 0) {
78
            $obj = $downloadsHandler->get($lid);
79
80
            $newUpload = false;
81
        } else {
82
            $obj = $downloadsHandler->create();
83
        }
84
        $erreur       = false;
85
        $errorMessage = '';
86
        $donnee       = [];
87
        $obj->setVar('title', \Xmf\Request::getString('title', '', 'POST'));
88
        $donnee['title'] = \Xmf\Request::getString('title', '', 'POST');
89
        $obj->setVar('cid', \Xmf\Request::getString('cid', '', 'POST'));
90
        $donnee['cid'] = \Xmf\Request::getString('cid', '', 'POST');
91
        $obj->setVar('homepage', formatURL(\Xmf\Request::getString('homepage', '', 'POST')));
92
        $obj->setVar('version', \Xmf\Request::getString('version', '', 'POST'));
93
        $obj->setVar('paypal', \Xmf\Request::getString('paypal', '', 'POST'));
94
        if (\Xmf\Request::hasVar('platform', 'POST')) {
95
            $obj->setVar('platform', implode('|', \Xmf\Request::getString('platform', '', 'POST')));
0 ignored issues
show
Xmf\Request::getString('platform', '', 'POST') of type string is incompatible with the type array expected by parameter $pieces of implode(). ( Ignorable by Annotation )

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

95
            $obj->setVar('platform', implode('|', /** @scrutinizer ignore-type */ \Xmf\Request::getString('platform', '', 'POST')));
Loading history...
96
        }
97
        $obj->setVar('description', \Xmf\Request::getString('description', '', 'POST'));
98
        if (\Xmf\Request::hasVar('submitter', 'POST')) {
99
            $obj->setVar('submitter', \Xmf\Request::getString('submitter', '', 'POST'));
100
101
            $donnee['submitter'] = \Xmf\Request::getString('submitter', '', 'POST');
102
        } else {
103
            $obj->setVar('submitter', !empty($xoopsUser) ? $xoopsUser->getVar('uid') : 0);
104
105
            $donnee['submitter'] = !empty($xoopsUser) ? $xoopsUser->getVar('uid') : 0;
106
        }
107
        $obj->setVar('date', time());
108
        if (true === $perm_autoapprove) {
109
            $obj->setVar('status', 1);
110
        } else {
111
            $obj->setVar('status', 0);
112
        }
113
        if ($xoopsUser) {
114
            if ($xoopsUser->isAdmin($xoopsModule->mid())) {
115
                if (\Xmf\Request::hasVar('status', 'POST')) {
116
                    $obj->setVar('status', \Xmf\Request::getInt('status', 0, 'POST'));
117
118
                    $donnee['status'] = \Xmf\Request::getInt('status', 0, 'POST');
119
                } else {
120
                    $obj->setVar('status', 0);
121
122
                    $donnee['status'] = 0;
123
                }
124
            }
125
        }
126
        $donnee['date_update'] = 0;
127
        // erreur si la catégorie est vide
128
        if (\Xmf\Request::hasVar('cid', 'REQUEST')) {
129
            if (0 === \Xmf\Request::getInt('cid', 0, 'REQUEST')) {
130
                $erreur = true;
131
132
                $errorMessage .= _MD_TDMDOWNLOADS_ERREUR_NOCAT . '<br>';
133
            }
134
        }
135
        // erreur si le captcha est faux
136
        xoops_load('xoopscaptcha');
137
        $xoopsCaptcha = \XoopsCaptcha::getInstance();
138
        if (!$xoopsCaptcha->verify()) {
139
            $errorMessage .= $xoopsCaptcha->getMessage() . '<br>';
140
141
            $erreur = true;
142
        }
143
        // pour enregistrer temporairement les valeur des champs sup
144
        $criteria = new \CriteriaCompo();
145
        $criteria->setSort('weight ASC, title');
146
        $criteria->setOrder('ASC');
147
        $downloads_field = $fieldHandler->getAll($criteria);
148
        foreach (array_keys($downloads_field) as $i) {
149
            /** @var \XoopsModules\Tdmdownloads\Field[] $downloads_field */
150
151
            if (0 === $downloads_field[$i]->getVar('status_def')) {
152
                $fieldName = 'champ' . $downloads_field[$i]->getVar('fid');
153
154
                $donnee[$fieldName] = \Xmf\Request::getString($fieldName, '', 'POST');
155
            }
156
        }
157
        // enregistrement temporaire des tags
158
        if (1 == $helper->getConfig('usetag') && class_exists(Tag::class)) {
159
            $donnee['TAG'] = $_POST['tag'];
160
        }
161
        if (true === $erreur) {
162
            $xoopsTpl->assign('message_erreur', $errorMessage);
163
164
            /** @var \XoopsThemeForm $form */
165
166
            $form = $obj->getForm($donnee, true);
167
168
            $GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
169
170
            break;
171
        }
172
        $obj->setVar('size', \Xmf\Request::getString('size', '', 'POST') . ' ' . \Xmf\Request::getString('type_size', '', 'POST'));
173
        // Pour le fichier
174
        $mediaSize = 0;
175
        if (isset($_POST['xoops_upload_file'][0])) {
176
            $uploader = new \XoopsMediaUploader($uploaddir_downloads, $helper->getConfig('mimetypes'), $helper->getConfig('maxuploadsize'), null, null);
177
178
            if ($uploader->fetchMedia($_POST['xoops_upload_file'][0])) {
179
                if ($helper->getConfig('newnamedownload')) {
180
                    $uploader->setPrefix($helper->getConfig('prefixdownloads'));
181
                }
182
183
                $uploader->fetchMedia($_POST['xoops_upload_file'][0]);
184
185
                if (!$uploader->upload()) {
186
                    $errors = $uploader->getErrors();
187
188
                    redirect_header('javascript:history.go(-1)', 3, $errors);
189
                } else {
190
                    $mediaSize = $uploader->getMediaSize();
191
192
                    $obj->setVar('url', $uploadurl_downloads . $uploader->getSavedFileName());
193
                }
194
            } else {
195
                if ($_FILES['attachedfile']['name'] > '') {
196
                    // file name was given, but fetchMedia failed - show error when e.g. file size exceed maxuploadsize
197
198
                    $errorMessage .= $uploader->getErrors() . '<br>';
199
200
                    $GLOBALS['xoopsTpl']->assign('message_erreur', $errorMessage);
201
202
                    $form = $obj->getForm($donnee, true);
203
204
                    $GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
205
206
                    break;
207
                }
208
209
                $obj->setVar('url', \Xmf\Request::getString('url', '', 'REQUEST'));
210
            }
211
        } else {
212
            $obj->setVar('url', \Xmf\Request::getString('url', '', 'REQUEST'));
213
        }
214
        // Pour l'image
215
        if (isset($_POST['xoops_upload_file'][1])) {
216
            $uploader_2 = new \XoopsMediaUploader(
217
                $uploaddir_shots, [
218
                                    'image/gif',
219
                                    'image/jpeg',
220
                                    'image/pjpeg',
221
                                    'image/x-png',
222
                                    'image/png',
223
                                ], $helper->getConfig('maxuploadsize'), null, null
224
            );
225
226
            if ($uploader_2->fetchMedia($_POST['xoops_upload_file'][1])) {
227
                $uploader_2->setPrefix('downloads_');
228
229
                $uploader_2->fetchMedia($_POST['xoops_upload_file'][1]);
230
231
                if (!$uploader_2->upload()) {
232
                    $errors = $uploader_2->getErrors();
233
234
                    redirect_header('javascript:history.go(-1)', 3, $errors);
235
                } else {
236
                    $obj->setVar('logourl', $uploader_2->getSavedFileName());
237
                }
238
            } else {
239
                if ($_FILES['attachedimage']['name'] > '') {
240
                    // file name was given, but fetchMedia failed - show error when e.g. file size exceed maxuploadsize
241
242
                    $errorMessage .= $uploader_2->getErrors() . '<br>';
243
244
                    $GLOBALS['xoopsTpl']->assign('message_erreur', $errorMessage);
245
246
                    $form = $obj->getForm($donnee, true);
247
248
                    $GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
249
250
                    break;
251
                }
252
253
                $obj->setVar('logourl', \Xmf\Request::getString('logo_img', '', 'REQUEST'));
254
            }
255
        } else {
256
            $obj->setVar('logourl', \Xmf\Request::getString('logo_img', '', 'REQUEST'));
257
        }
258
        //Automatic file size
259
        if ('' == Xmf\Request::getString('sizeValue', '')) {
260
            if (0 == $mediaSize) {
261
                $obj->setVar('size', $utility::getFileSize(Xmf\Request::getUrl('url', '')));
262
            } else {
263
                $obj->setVar('size', $utility::convertFileSize($mediaSize));
264
            }
265
        } else {
266
            $obj->setVar('size', Xmf\Request::getFloat('sizeValue', 0) . ' ' . Xmf\Request::getString('sizeType', ''));
267
        }
268
        $timeToRedirect = 2;
269
        if (0 == $obj->getVar('size')) {
270
            $obj->setVar('size', '');
271
272
            $error_message = _AM_TDMDOWNLOADS_ERREUR_SIZE;
273
274
            $timeToRedirect = 10;
275
        }
276
        if ($downloadsHandler->insert($obj)) {
277
            if ($newUpload) {
278
                $lidDownloads = $obj->getNewEnreg($db);
279
            } else {
280
                $lidDownloads = $lid;
281
            }
282
283
            //tags
284
285
            if (1 == $helper->getConfig('usetag') && class_exists(TagHandler::class)) {
286
                /** @var \XoopsModules\Tag\TagHandler $tagHandler */
287
288
                $tagHandler = TagHelper::getInstance()->getHandler('Tag');
289
290
                $tagHandler->updateByItem($_POST['tag'], $lidDownloads, $moduleDirName, 0);
291
            }
292
293
            // Récupération des champs supplémentaires:
294
295
            $criteria = new \CriteriaCompo();
296
297
            $criteria->setSort('weight ASC, title');
298
299
            $criteria->setOrder('ASC');
300
301
            $downloads_field = $fieldHandler->getAll($criteria);
302
303
            foreach (array_keys($downloads_field) as $i) {
304
                if (0 === $downloads_field[$i]->getVar('status_def')) {
305
                    $objdata = $fielddataHandler->create();
306
307
                    $fieldName = 'champ' . $downloads_field[$i]->getVar('fid');
308
309
                    $objdata->setVar('data', \Xmf\Request::getString($fieldName, '', 'POST'));
310
311
                    $objdata->setVar('lid', $lidDownloads);
312
313
                    $objdata->setVar('fid', $downloads_field[$i]->getVar('fid'));
314
315
                    $fielddataHandler->insert($objdata) || $objdata->getHtmlErrors();
316
                }
317
            }
318
319
            if ($xoopsUser) {
320
                if ($xoopsUser->isAdmin($xoopsModule->mid())) {
321
                    //permission pour télécharger
322
323
                    if (1 == $helper->getConfig('permission_download')) {
324
                        /** @var \XoopsGroupPermHandler $grouppermHandler */
325
                        $grouppermHandler = xoops_getHandler('groupperm');
326
327
                        $criteria = new \CriteriaCompo();
328
329
                        $criteria->add(new \Criteria('gperm_itemid', $lidDownloads, '='));
330
331
                        $criteria->add(new \Criteria('gperm_modid', $xoopsModule->getVar('mid'), '='));
332
333
                        $criteria->add(new \Criteria('gperm_name', 'tdmdownloads_download_item', '='));
334
335
                        $grouppermHandler->deleteAll($criteria);
336
337
                        if (\Xmf\Request::hasVar('item_download', 'POST')) {
338
                            foreach ($_POST['item_download'] as $onegroup_id) {
339
                                $grouppermHandler->addRight('tdmdownloads_download_item', $lidDownloads, $onegroup_id, $xoopsModule->getVar('mid'));
340
                            }
341
                        }
342
                    }
343
                }
344
            }
345
346
            /** @var \XoopsNotificationHandler $notificationHandler */
347
348
            $notificationHandler = xoops_getHandler('notification');
349
350
            $tags = [];
351
352
            $tags['FILE_NAME'] = $donnee['title'];
353
354
            $tags['FILE_URL'] = XOOPS_URL . '/modules/' . $moduleDirName . '/singlefile.php?cid=' . $donnee['cid'] . '&lid=' . $lidDownloads;
355
356
            $downloadscat_cat = $categoryHandler->get($donnee['cid']);
357
358
            $tags['CATEGORY_NAME'] = $downloadscat_cat->getVar('cat_title');
359
360
            $tags['CATEGORY_URL'] = XOOPS_URL . '/modules/' . $moduleDirName . '/viewcat.php?cid=' . $donnee['cid'];
361
362
            if (true === $perm_autoapprove) {
363
                $notificationHandler->triggerEvent('global', 0, 'new_file', $tags);
364
365
                $notificationHandler->triggerEvent('category', $donnee['cid'], 'new_file', $tags);
366
367
                redirect_header('index.php', $timeToRedirect, _MD_TDMDOWNLOADS_SUBMIT_RECEIVED . '<br>' . _MD_TDMDOWNLOADS_SUBMIT_ISAPPROVED . '<br><br>' . $error_message);
368
369
                exit;
370
            }
371
372
            $tags['WAITINGFILES_URL'] = XOOPS_URL . '/modules/' . $moduleDirName . '/admin/index.php?op=listNewDownloads';
373
374
            $notificationHandler->triggerEvent('global', 0, 'file_submit', $tags);
375
376
            $notificationHandler->triggerEvent('category', $donnee['cid'], 'file_submit', $tags);
377
378
            redirect_header('index.php', $timeToRedirect, _MD_TDMDOWNLOADS_SUBMIT_RECEIVED . '<br><br>' . $error_message);
379
380
            exit;
381
        }
382
        $errors = $obj->getHtmlErrors();
383
384
        $form = $obj->getForm($donnee, true);
385
        $xoopsTpl->assign('themeForm', $form->render());
386
        break;
387
}
388
389
$GLOBALS['xoopsTpl']->assign('mod_url', XOOPS_URL . '/modules/' . $moduleDirName);
390
391
require XOOPS_ROOT_PATH . '/footer.php';
392