Passed
Pull Request — master (#88)
by Michael
02:56
created

submit.php (1 issue)

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

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