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

admin/downloads.php (1 issue)

Labels
Severity
1
<?php declare(strict_types=1);
2
3
use Xmf\Module\Admin;
4
use XoopsModules\Tag\Helper;
5
use XoopsModules\Tag\LinkHandler;
6
use XoopsModules\Tag\Tag;
7
use XoopsModules\Tag\TagHandler;
8
use XoopsModules\Tdmdownloads\Tree;
9
10
/**
11
 * TDMDownload
12
 *
13
 * You may not change or alter any portion of this comment or credits
14
 * of supporting developers from this source code or any supporting source code
15
 * which is considered copyrighted (c) material of the original comment or credit authors.
16
 * This program is distributed in the hope that it will be useful,
17
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19
 *
20
 * @copyright   Gregory Mage (Aka Mage)
21
 * @license     GNU GPL 2 (https://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
22
 * @author      Gregory Mage (Aka Mage)
23
 */
24
require __DIR__ . '/admin_header.php';
25
26
// Template
27
$templateMain = 'tdmdownloads_admin_downloads.tpl';
28
29
/** @var \XoopsModules\Tdmdownloads\Helper $helper */
30
$helper = \XoopsModules\Tdmdownloads\Helper::getInstance();
31
32
$myts = \MyTextSanitizer::getInstance();
33
34
//On recupere la valeur de l'argument op dans l'URL$
35
$op = \Xmf\Request::getCmd('op', 'list');
36
37
// compte le nombre de téléchargement non validé
38
$criteria = new \CriteriaCompo();
39
$criteria->add(new \Criteria('status', 0));
40
$downloads_waiting = $downloadsHandler->getCount($criteria);
41
42
$statusMenu = \Xmf\Request::getInt('statut_display', 1);
43
44
//Les valeurs de op qui vont permettre d'aller dans les differentes parties de la page
45
switch ($op) {
46
    // Vue liste
47
    case 'list':
48
        //Affichage de la partie haute de l'administration de Xoops
49
        xoops_cp_header();
50
        $adminObject = Admin::getInstance();
51
        $GLOBALS['xoopsTpl']->assign('navigation', $adminObject->displayNavigation(basename(__FILE__)));
52
        if (1 == $statusMenu) {
53
            $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_NEW, 'downloads.php?op=new_downloads', 'add');
54
55
            $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_NEW_MULTIUPLOAD, '../upload.php?op=list&amp;cat_cid=' . $catId, 'add');
56
57
            if (0 == $downloads_waiting) {
58
                $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add');
59
            } else {
60
                $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add', 'style="color : Red"');
61
            }
62
        } else {
63
            $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_LISTE, 'downloads.php?op=list', 'list');
64
65
            $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_NEW, 'downloads.php?op=new_downloads', 'add');
66
        }
67
        $GLOBALS['xoopsTpl']->assign('buttons', $adminObject->displayButton('left'));
68
69
        $limit         = $helper->getConfig('perpageadmin');
70
        $categoryArray = $categoryHandler->getAll();
71
        $numrowscat    = count($categoryArray);
72
73
        // redirection si il n'y a pas de catégories
74
        if (0 === $numrowscat) {
75
            redirect_header('category.php?op=new_cat', 2, _AM_TDMDOWNLOADS_REDIRECT_NOCAT);
76
        }
77
        $criteria = new \CriteriaCompo();
78
        // affiche uniquement les téléchargements activés
79
        if (\Xmf\Request::hasVar('statut_display', 'GET')) {
80
            if (0 === \Xmf\Request::getInt('statut_display', 0, 'GET')) {
81
                $criteria->add(new \Criteria('status', 0));
82
83
                $statusDisplay = 0;
84
            } else {
85
                $criteria->add(new \Criteria('status', 0, '!='));
86
87
                $statusDisplay = 1;
88
            }
89
        } else {
90
            $criteria->add(new \Criteria('status', 0, '!='));
91
92
            $statusDisplay = 1;
93
        }
94
        $documentSort  = 1;
95
        $documentOrder = 1;
96
        if (\Xmf\Request::hasVar('document_tri')) {
97
            if (1 == \Xmf\Request::getInt('document_tri')) {
98
                $criteria->setSort('date');
99
100
                $documentSort = 1;
101
            }
102
103
            if (2 == \Xmf\Request::getInt('document_tri')) {
104
                $criteria->setSort('title');
105
106
                $documentSort = 2;
107
            }
108
109
            if (3 == \Xmf\Request::getInt('document_tri')) {
110
                $criteria->setSort('hits');
111
112
                $documentSort = 3;
113
            }
114
115
            if (4 == \Xmf\Request::getInt('document_tri')) {
116
                $criteria->setSort('rating');
117
118
                $documentSort = 4;
119
            }
120
121
            if (5 == \Xmf\Request::getInt('document_tri')) {
122
                $criteria->setSort('cid');
123
124
                $documentSort = 5;
125
            }
126
        } else {
127
            $criteria->setSort('date');
128
        }
129
        if (\Xmf\Request::hasVar('document_order')) {
130
            if (1 == \Xmf\Request::getInt('document_order')) {
131
                $criteria->setOrder('DESC');
132
133
                $documentOrder = 1;
134
            }
135
136
            if (2 == \Xmf\Request::getInt('document_order')) {
137
                $criteria->setOrder('ASC');
138
139
                $documentOrder = 2;
140
            }
141
        } else {
142
            $criteria->setOrder('DESC');
143
        }
144
        $start = \Xmf\Request::getInt('start', 0);
145
        $criteria->setStart($start);
146
        $criteria->setLimit($limit);
147
        //pour faire une jointure de table
148
        $downloadsHandler->table_link   = $downloadsHandler->db->prefix('tdmdownloads_cat'); // Nom de la table en jointure
149
        $downloadsHandler->field_link   = 'cat_cid'; // champ de la table en jointure
150
        $downloadsHandler->field_object = 'cid'; // champ de la table courante
151
        $downloadsArray                 = $downloadsHandler->getByLink($criteria);
152
        $numrows                        = $downloadsHandler->getCount($criteria);
153
154
        $pagenav = '';
155
        if ($numrows > $limit) {
156
            $pagenav = new \XoopsPageNav($numrows, $limit, $start, 'start', 'op=list&document_tri=' . $documentSort . '&document_order=' . $documentOrder . '&statut_display=' . $statusDisplay);
157
158
            $GLOBALS['xoopsTpl']->assign('pagenav', $pagenav->renderNav(4));
159
        }
160
        //Affichage du tableau des téléchargements
161
        $GLOBALS['xoopsTpl']->append('downloads_count', $numrows);
162
        if ($numrows > 0) {
163
            $selectDocument = _AM_TDMDOWNLOADS_TRIPAR
164
                              . "<select name=\"document_tri\" id=\"document_tri\" onchange=\"location='"
165
                              . XOOPS_URL
166
                              . '/modules/'
167
                              . $xoopsModule->dirname()
168
                              . "/admin/downloads.php?statut_display=$statusDisplay&document_order=$documentOrder&document_tri='+this.options[this.selectedIndex].value\">";
169
170
            $selectDocument .= '<option value="1"' . (1 == $documentSort ? ' selected="selected"' : '') . '>' . _AM_TDMDOWNLOADS_FORMDATE . '</option>';
171
172
            $selectDocument .= '<option value="2"' . (2 == $documentSort ? ' selected="selected"' : '') . '>' . _AM_TDMDOWNLOADS_FORMTITLE . '</option>';
173
174
            $selectDocument .= '<option value="3"' . (3 == $documentSort ? ' selected="selected"' : '') . '>' . _AM_TDMDOWNLOADS_FORMHITS . '</option>';
175
176
            $selectDocument .= '<option value="4"' . (4 == $documentSort ? ' selected="selected"' : '') . '>' . _AM_TDMDOWNLOADS_FORMRATING . '</option>';
177
178
            $selectDocument .= '<option value="5"' . (5 == $documentSort ? ' selected="selected"' : '') . '>' . _AM_TDMDOWNLOADS_FORMCAT . '</option>';
179
180
            $selectDocument .= '</select> ';
181
182
            $GLOBALS['xoopsTpl']->assign('selectDocument', $selectDocument);
183
184
            $selectOrder = _AM_TDMDOWNLOADS_ORDER
185
                           . "<select name=\"order_tri\" id=\"order_tri\" onchange=\"location='"
186
                           . XOOPS_URL
187
                           . '/modules/'
188
                           . $xoopsModule->dirname()
189
                           . "/admin/downloads.php?statut_display=$statusDisplay&document_tri=$documentSort&document_order='+this.options[this.selectedIndex].value\">";
190
191
            $selectOrder .= '<option value="1"' . (1 == $documentOrder ? ' selected="selected"' : '') . '>DESC</option>';
192
193
            $selectOrder .= '<option value="2"' . (2 == $documentOrder ? ' selected="selected"' : '') . '>ASC</option>';
194
195
            $selectOrder .= '</select> ';
196
197
            $GLOBALS['xoopsTpl']->assign('selectOrder', $selectOrder);
198
199
            $mytree = new Tree($categoryArray, 'cat_cid', 'cat_pid');
200
201
            $class = 'odd';
202
203
            $downloads = [];
204
205
            foreach (array_keys($downloadsArray) as $i) {
206
                /** @var \XoopsModules\Tdmdownloads\Downloads[] $downloadsArray */
207
208
                $download = [
209
                    'category'       => $utility->getPathTree($mytree, $downloadsArray[$i]->getVar('cid'), $categoryArray, 'cat_title', $prefix = ' <img src="../assets/images/deco/arrow.gif"> '),
210
                    'cid'            => $downloadsArray[$i]->getVar('cid'),
211
                    'lid'            => $i,
212
                    'title'          => $downloadsArray[$i]->getVar('title'),
213
                    'hits'           => $downloadsArray[$i]->getVar('hits'),
214
                    'rating'         => number_format((float)$downloadsArray[$i]->getVar('rating'), 1),
215
                    'statut_display' => $statusDisplay,
216
                ];
217
218
                $GLOBALS['xoopsTpl']->append('downloads_list', $download);
219
220
                unset($download);
221
            }
222
        } else {
223
            $GLOBALS['xoopsTpl']->assign('message_erreur', _AM_TDMDOWNLOADS_ERREUR_NODOWNLOADSWAITING);
224
        }
225
        break;
226
    // vue création
227
    case 'new_downloads':
228
        //Affichage de la partie haute de l'administration de Xoops
229
        xoops_cp_header();
230
        $adminObject = Admin::getInstance();
231
        $GLOBALS['xoopsTpl']->assign('navigation', $adminObject->displayNavigation(basename(__FILE__)));
232
        $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_LISTE, 'downloads.php?op=list', 'list');
233
        $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_NEW, 'downloads.php?op=new_downloads', 'add');
234
        if (0 == $downloads_waiting) {
235
            $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add');
236
        } else {
237
            $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add', 'style="color : Red"');
238
        }
239
        $GLOBALS['xoopsTpl']->assign('buttons', $adminObject->displayButton('left'));
240
        //Affichage du formulaire de création des téléchargements
241
        /** @var \XoopsModules\Tdmdownloads\Downloads $obj */
242
        $obj = $downloadsHandler->create();
243
        /** @var \XoopsThemeForm $form */
244
        $form = $obj->getForm($donnee = [], false);
245
        $GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
246
        break;
247
    // Pour éditer un téléchargement
248
    case 'edit_downloads':
249
        //Affichage de la partie haute de l'administration de Xoops
250
        xoops_cp_header();
251
        $adminObject = Admin::getInstance();
252
        $GLOBALS['xoopsTpl']->assign('navigation', $adminObject->displayNavigation(basename(__FILE__)));
253
        $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_LISTE, 'downloads.php?op=list', 'list');
254
        $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_NEW, 'downloads.php?op=new_downloads', 'add');
255
256
        if (0 == $downloads_waiting) {
257
            $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add');
258
        } else {
259
            $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add', 'style="color : Red"');
260
        }
261
        $GLOBALS['xoopsTpl']->assign('buttons', $adminObject->displayButton('left'));
262
        //Affichage du formulaire de création des téléchargements
263
        $downloads_lid = \Xmf\Request::getInt('downloads_lid', 0, 'GET');
264
        /** @var \XoopsModules\Tdmdownloads\Downloads $obj */
265
        $obj  = $downloadsHandler->get($downloads_lid);
266
        $form = $obj->getForm($donnee = [], false);
267
        $GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
268
        break;
269
    // Pour supprimer un téléchargement
270
    case 'del_downloads':
271
        global $xoopsModule;
272
        $downloads_lid = \Xmf\Request::getInt('downloads_lid', 0, 'GET');
273
        $obj           = $downloadsHandler->get($downloads_lid);
274
        if (\Xmf\Request::hasVar('ok') && 1 == \Xmf\Request::getInt('ok')) {
275
            if (!$GLOBALS['xoopsSecurity']->check()) {
276
                redirect_header('downloads.php', 3, implode(',', $GLOBALS['xoopsSecurity']->getErrors()));
277
            }
278
279
            // permet d'extraire le nom du fichier
280
281
            $urlfile = substr_replace($obj->getVar('url'), '', 0, mb_strlen($uploadurl_downloads));
282
283
            if ($downloadsHandler->delete($obj)) {
284
                // permet de donner le chemin du fichier
285
286
                $urlfile = $uploaddir_downloads . $urlfile;
0 ignored issues
show
Are you sure $urlfile of type array|string can be used in concatenation? ( Ignorable by Annotation )

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

286
                $urlfile = $uploaddir_downloads . /** @scrutinizer ignore-type */ $urlfile;
Loading history...
287
288
                // si le fichier est sur le serveur il es détruit
289
290
                if (is_file($urlfile)) {
291
                    chmod($urlfile, 0777);
292
293
                    unlink($urlfile);
294
                }
295
296
                // supression des votes
297
298
                $criteria = new \CriteriaCompo();
299
300
                $criteria->add(new \Criteria('lid', $downloads_lid));
301
302
                $votedata = $ratingHandler->getAll($criteria);
303
304
                foreach (array_keys($votedata) as $i) {
305
                    /** @var \XoopsModules\Tdmdownloads\Rating[] $votedata */
306
307
                    $objvotedata = $ratingHandler->get($votedata[$i]->getVar('ratingid'));
308
309
                    $ratingHandler->delete($objvotedata) || $objvotedata->getHtmlErrors();
310
                }
311
312
                // supression des rapports de fichier brisé
313
314
                $criteria = new \CriteriaCompo();
315
316
                $criteria->add(new \Criteria('lid', $downloads_lid));
317
318
                $downloads_broken = $brokenHandler->getAll($criteria);
319
320
                foreach (array_keys($downloads_broken) as $i) {
321
                    /** @var \XoopsModules\Tdmdownloads\Broken[] $downloads_broken */
322
323
                    $objbroken = $brokenHandler->get($downloads_broken[$i]->getVar('reportid'));
324
325
                    $brokenHandler->delete($objbroken) || $objbroken->getHtmlErrors();
326
                }
327
328
                // supression des data des champs sup.
329
330
                $criteria = new \CriteriaCompo();
331
332
                $criteria->add(new \Criteria('lid', $downloads_lid));
333
334
                $downloads_fielddata = $fielddataHandler->getAll($criteria);
335
336
                foreach (array_keys($downloads_fielddata) as $i) {
337
                    /** @var \XoopsModules\Tdmdownloads\Fielddata[] $downloads_fielddata */
338
339
                    $objfielddata = $fielddataHandler->get($downloads_fielddata[$i]->getVar('iddata'));
340
341
                    $fielddataHandler->delete($objfielddata) || $objvfielddata->getHtmlErrors();
342
                }
343
344
                // supression des commentaires
345
346
                xoops_comment_delete($xoopsModule->getVar('mid'), $downloads_lid);
347
348
                //supression des tags
349
350
                if (1 == $helper->getConfig('usetag') && class_exists(LinkHandler::class)) {
351
                    /** @var \XoopsModules\Tag\LinkHandler $linkHandler */
352
353
                    $linkHandler = Helper::getInstance()->getHandler('Link');
354
355
                    $criteria = new \CriteriaCompo();
356
357
                    $criteria->add(new \Criteria('tag_itemid', $downloads_lid));
358
359
                    $downloadsTags = $linkHandler->getAll($criteria);
360
361
                    foreach (array_keys($downloadsTags) as $i) {
362
                        /** @var \XoopsModules\Tag\Link[] $downloadsTags */
363
364
                        $objtags = $linkHandler->get($downloadsTags[$i]->getVar('tl_id'));
365
366
                        $linkHandler->delete($objtags) || $objtags->getHtmlErrors();
367
                    }
368
                }
369
370
                redirect_header('downloads.php', 1, _AM_TDMDOWNLOADS_REDIRECT_DELOK);
371
            } else {
372
                $GLOBALS['xoopsTpl']->assign('message_erreur', $obj->getHtmlErrors());
373
            }
374
        } else {
375
            //Affichage de la partie haute de l'administration de Xoops
376
377
            xoops_cp_header();
378
379
            $adminObject = Admin::getInstance();
380
381
            $GLOBALS['xoopsTpl']->assign('navigation', $adminObject->displayNavigation(basename(__FILE__)));
382
383
            $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_LISTE, 'downloads.php?op=list', 'list');
384
385
            $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_NEW, 'downloads.php?op=new_downloads', 'add');
386
387
            if (0 == $downloads_waiting) {
388
                $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add');
389
            } else {
390
                $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add', 'style="color : Red"');
391
            }
392
393
            $adminObject->displayButton('left');
394
395
            xoops_confirm(
396
                ['ok' => 1, 'downloads_lid' => $downloads_lid, 'op' => 'del_downloads'],
397
                $_SERVER['REQUEST_URI'],
398
                sprintf(_AM_TDMDOWNLOADS_FORMSUREDEL, $obj->getVar('title')) . '<br><br>' . _AM_TDMDOWNLOADS_FORMWITHFILE . ' <b><a href="' . $obj->getVar('url') . '">' . $obj->getVar('url') . '</a></b><br>'
399
            );
400
        }
401
        break;
402
    // Pour voir les détails du téléchargement
403
    case 'view_downloads':
404
        //Affichage de la partie haute de l'administration de Xoops
405
        xoops_cp_header();
406
        $adminObject = Admin::getInstance();
407
        $GLOBALS['xoopsTpl']->assign('navigation', $adminObject->displayNavigation(basename(__FILE__)));
408
        $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_LISTE, 'downloads.php?op=list', 'list');
409
        $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_NEW, 'downloads.php?op=new_downloads', 'add');
410
        if (0 == $downloads_waiting) {
411
            $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add');
412
        } else {
413
            $adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add', 'style="color : Red"');
414
        }
415
        $GLOBALS['xoopsTpl']->assign('buttons', $adminObject->displayButton('left'));
416
        $GLOBALS['xoopsTpl']->assign('uploadurl_shots', $uploadurl_shots);
417
418
        $downloads_lid = \Xmf\Request::getInt('downloads_lid', 0, 'GET');
419
        //information du téléchargement
420
        $viewDownloads = $downloadsHandler->get($downloads_lid);
421
        //catégorie
422
        //$view_category = $categoryHandler->get($viewDownloads->getVar('cid'));
423
        $categoryArray = $categoryHandler->getAll();
424
        $mytree        = new Tree($categoryArray, 'cat_cid', 'cat_pid');
425
        // sortie des informations
426
        $downloads_title       = $viewDownloads->getVar('title');
427
        $downloads_description = $viewDownloads->getVar('description');
428
        //permet d'enlever [pagebreak] du texte
429
        $downloads_description = str_replace('[pagebreak]', '', $downloads_description);
430
431
        $category = $utility->getPathTree($mytree, $viewDownloads->getVar('cid'), $categoryArray, 'cat_title', $prefix = ' <img src="../assets/images/deco/arrow.gif"> ');
432
        // affichages des informations du téléchargement
433
        $download = [
434
            'title'       => $downloads_title,
435
            'description' => $downloads_description,
436
            'cid'         => $viewDownloads->getVar('cid'),
437
            'lid'         => $downloads_lid,
438
            'category'    => $category,
439
        ];
440
441
        $criteria = new \CriteriaCompo();
442
        $criteria->setSort('weight ASC, title');
443
        $criteria->setOrder('ASC');
444
        $criteria->add(new \Criteria('status', 1));
445
        $downloads_field = $fieldHandler->getAll($criteria);
446
        $fieldsList      = [];
447
        foreach (array_keys($downloads_field) as $i) {
448
            /** @var \XoopsModules\Tdmdownloads\Field[] $downloads_field */
449
450
            if (1 == $downloads_field[$i]->getVar('status_def')) {
451
                if (1 == $downloads_field[$i]->getVar('fid')) {
452
                    //page d'accueil
453
454
                    if ('' !== $viewDownloads->getVar('homepage')) {
455
                        $fieldsList[] = ['name' => _AM_TDMDOWNLOADS_FORMHOMEPAGE, 'value' => '<a href="' . $viewDownloads->getVar('homepage') . '">' . $viewDownloads->getVar('homepage') . '</a>'];
456
                    }
457
                }
458
459
                if (2 == $downloads_field[$i]->getVar('fid')) {
460
                    //version
461
462
                    if ('' !== $viewDownloads->getVar('version')) {
463
                        $fieldsList[] = ['name' => _AM_TDMDOWNLOADS_FORMVERSION, 'value' => $viewDownloads->getVar('version')];
464
                    }
465
                }
466
467
                if (3 == $downloads_field[$i]->getVar('fid')) {
468
                    //taille du fichier
469
470
                    if ('' !== $viewDownloads->getVar('size')) {
471
                        $fieldsList[] = ['name' => _AM_TDMDOWNLOADS_FORMSIZE, 'value' => $viewDownloads->getVar('size')];
472
                    }
473
                }
474
475
                if (4 == $downloads_field[$i]->getVar('fid')) {
476
                    //plateforme
477
478
                    if ('' !== $viewDownloads->getVar('platform')) {
479
                        $fieldsList[] = ['name' => _AM_TDMDOWNLOADS_FORMPLATFORM, 'value' => $viewDownloads->getVar('platform')];
480
                    }
481
                }
482
            } else {
483
                $contenu = '';
484
485
                $criteria = new \CriteriaCompo();
486
487
                $criteria->add(new \Criteria('lid', $downloads_lid));
488
489
                $criteria->add(new \Criteria('fid', $downloads_field[$i]->getVar('fid')));
490
491
                $downloadsfielddata = $fielddataHandler->getAll($criteria);
492
493
                foreach (array_keys($downloadsfielddata) as $j) {
494
                    /** @var \XoopsModules\Tdmdownloads\Fielddata[] $downloadsfielddata */
495
496
                    $contenu = $downloadsfielddata[$j]->getVar('data');
497
                }
498
499
                if ('' !== $contenu) {
500
                    $fieldsList[] = ['name' => $downloads_field[$i]->getVar('title'), 'value' => $contenu];
501
                }
502
            }
503
        }
504
        $download['fields_list'] = $fieldsList;
505
        // tags
506
        if (1 == $helper->getConfig('usetag') && class_exists(Tag::class)) {
507
            require_once XOOPS_ROOT_PATH . '/modules/tag/include/tagbar.php';
508
509
            $tags_array = tagBar($downloads_lid, 0);
510
511
            if (!empty($tags_array)) {
512
                $tags = '';
513
514
                foreach (array_keys($tags_array['tags']) as $i) {
515
                    $tags .= $tags_array['delimiter'] . ' ' . $tags_array['tags'][$i] . ' ';
516
                }
517
518
                $download['tags'] = ['title' => $tags_array['title'], 'value' => $tags];
519
            }
520
        }
521
        if ($helper->getConfig('useshots')) {
522
            if ('blank.gif' !== $viewDownloads->getVar('logourl')) {
523
                $download['logourl'] = $viewDownloads->getVar('logourl');
524
            }
525
        }
526
        $download['date']      = formatTimestamp($viewDownloads->getVar('date'));
527
        $download['submitter'] = XoopsUser::getUnameFromId($viewDownloads->getVar('submitter'));
528
        $download['hits']      = $viewDownloads->getVar('hits');
529
        $download['rating']    = number_format((float)$viewDownloads->getVar('rating'), 1);
530
        $download['votes']     = $viewDownloads->getVar('votes');
531
532
        if (true === $helper->getConfig('use_paypal') && '' !== $viewDownloads->getVar('paypal')) {
533
            $download['paypal'] = $viewDownloads->getVar('paypal');
534
        }
535
        $download['comments'] = $viewDownloads->getVar('comments');
536
537
        $GLOBALS['xoopsTpl']->assign('download', $download);
538
539
        // Utilisateur enregistré
540
        $ratings  = [];
541
        $criteria = new \CriteriaCompo();
542
        $criteria->add(new \Criteria('lid', $downloads_lid));
543
        $criteria->add(new \Criteria('ratinguser', 0, '!='));
544
        $votedataArray         = $ratingHandler->getAll($criteria);
545
        $votesTotal            = count($votedataArray);
546
        $ratings['user_total'] = $votesTotal;
547
        $userList              = [];
548
        foreach (array_keys($votedataArray) as $i) {
549
            /** @var \XoopsModules\Tdmdownloads\Rating[] $votedataArray */
550
551
            $userList[] = [
552
                'ratinguser'      => \XoopsUser::getUnameFromId($votedataArray[$i]->getVar('ratinguser')),
553
                'ratinghostname'  => $votedataArray[$i]->getVar('ratinghostname'),
554
                'rating'          => $votedataArray[$i]->getVar('rating'),
555
                'ratingtimestamp' => formatTimestamp($votedataArray[$i]->getVar('ratingtimestamp')),
556
                'myTextForm'      => myTextForm('downloads.php?op=del_vote&lid=' . $votedataArray[$i]->getVar('lid') . '&rid=' . $votedataArray[$i]->getVar('ratingid'), 'X'),
557
            ];
558
        }
559
        $ratings['user_list'] = $userList;
560
        // Utilisateur anonyme
561
        $criteria = new \CriteriaCompo();
562
        $criteria->add(new \Criteria('lid', $downloads_lid));
563
        $criteria->add(new \Criteria('ratinguser', 0));
564
        $votedataArray         = $ratingHandler->getAll($criteria);
565
        $votesTotal            = count($votedataArray);
566
        $ratings['anon_total'] = $votesTotal;
567
        $anon_list             = [];
568
        foreach (array_keys($votedataArray) as $i) {
569
            $anon_list[] = [
570
                'ratinghostname'  => $votedataArray[$i]->getVar('ratinghostname'),
571
                'rating'          => $votedataArray[$i]->getVar('rating'),
572
                'ratingtimestamp' => formatTimestamp($votedataArray[$i]->getVar('ratingtimestamp')),
573
                'myTextForm'      => myTextForm('downloads.php?op=del_vote&lid=' . $votedataArray[$i]->getVar('lid') . '&rid=' . $votedataArray[$i]->getVar('ratingid'), 'X'),
574
            ];
575
        }
576
        $ratings['anon_list']   = $anon_list;
577
        $ratings['votes_total'] = $ratings['user_total'] + $ratings['anon_total'];
578
        $GLOBALS['xoopsTpl']->assign('ratings', $ratings);
579
        $GLOBALS['xoopsTpl']->assign('download_detail', true);
580
        break;
581
    // permet de suprimmer un vote et de recalculer la note
582
    case 'del_vote':
583
        $objvotedata = $ratingHandler->get(\Xmf\Request::getInt('rid'));
584
        if ($ratingHandler->delete($objvotedata)) {
585
            $criteria = new \CriteriaCompo();
586
587
            $criteria->add(new \Criteria('lid', \Xmf\Request::getInt('lid')));
588
589
            $votedataArray = $ratingHandler->getAll($criteria);
590
591
            $votesTotal = $ratingHandler->getCount($criteria);
592
593
            $obj = $downloadsHandler->get(\Xmf\Request::getInt('lid'));
594
595
            if (0 === $votesTotal) {
596
                $obj->setVar('rating', number_format(0, 1));
597
598
                $obj->setVar('votes', 0);
599
600
                if ($downloadsHandler->insert($obj)) {
601
                    redirect_header('downloads.php?op=view_downloads&downloads_lid=' . \Xmf\Request::getInt('lid'), 1, _AM_TDMDOWNLOADS_REDIRECT_DELOK);
602
                }
603
            } else {
604
                $ratingTotal = 0;
605
606
                foreach (array_keys($votedataArray) as $i) {
607
                    /** @var \XoopsModules\Tdmdownloads\Rating[] $votedataArray */
608
609
                    $ratingTotal += $votedataArray[$i]->getVar('rating');
610
                }
611
612
                $rating = $ratingTotal / $votesTotal;
613
614
                $obj->setVar('rating', number_format((float)$rating, 1));
615
616
                $obj->setVar('votes', $votesTotal);
617
618
                if ($downloadsHandler->insert($obj)) {
619
                    redirect_header('downloads.php?op=view_downloads&downloads_lid=' . \Xmf\Request::getInt('lid'), 1, _AM_TDMDOWNLOADS_REDIRECT_DELOK);
620
                }
621
            }
622
623
            $GLOBALS['xoopsTpl']->assign('message_erreur', $obj->getHtmlErrors());
624
        }
625
        $GLOBALS['xoopsTpl']->assign('message_erreur', $objvotedata->getHtmlErrors());
626
        break;
627
    // Pour sauver un téléchargement
628
    case 'save_downloads':
629
        global $xoopsDB;
630
        require_once XOOPS_ROOT_PATH . '/class/uploader.php';
631
        xoops_cp_header();
632
        if (!$GLOBALS['xoopsSecurity']->check()) {
633
            redirect_header('downloads.php', 3, implode(',', $GLOBALS['xoopsSecurity']->getErrors()));
634
        }
635
        /** @var \XoopsModules\Tdmdownloads\Downloads $obj */
636
        if (\Xmf\Request::hasVar('lid')) {
637
            $obj = $downloadsHandler->get(\Xmf\Request::getInt('lid'));
638
        } else {
639
            $obj = $downloadsHandler->create();
640
        }
641
        $erreur       = false;
642
        $errorMessage = '';
643
        $donnee       = [];
644
        $obj->setVar('title', \Xmf\Request::getString('title', '', 'POST'));
645
        $obj->setVar('cid', \Xmf\Request::getInt('cid', 0, 'POST'));
646
        $obj->setVar('homepage', formatURL(\Xmf\Request::getUrl('homepage', '', 'POST')));
647
        $obj->setVar('version', \Xmf\Request::getString('version', '', 'POST'));
648
        $obj->setVar('paypal', \Xmf\Request::getString('paypal', '', 'POST'));
649
        if (\Xmf\Request::hasVar('platform', 'POST')) {
650
            $obj->setVar('platform', implode('|', \Xmf\Request::getString('platform', '', 'POST')));
651
        }
652
        $obj->setVar('description', \Xmf\Request::getString('description', '', 'POST'));
653
654
        if (\Xmf\Request::hasVar('submitter', 'POST')) {
655
            $obj->setVar('submitter', \Xmf\Request::getInt('submitter', 0, 'POST'));
656
657
            $donnee['submitter'] = \Xmf\Request::getInt('submitter', 0, 'POST');
658
        } else {
659
            $obj->setVar('submitter', !empty($xoopsUser) ? $xoopsUser->getVar('uid') : 0);
660
661
            $donnee['submitter'] = !empty($xoopsUser) ? $xoopsUser->getVar('uid') : 0;
662
        }
663
        if (\Xmf\Request::hasVar('downloads_modified')) {
664
            $obj->setVar('date', time());
665
666
            if (\Xmf\Request::hasVar('status', 'POST')) {
667
                $obj->setVar('status', 1);
668
669
                $donnee['status'] = 1;
670
            } else {
671
                $obj->setVar('status', 0);
672
673
                $donnee['status'] = 0;
674
            }
675
        } else {
676
            if (\Xmf\Request::hasVar('date_update', 'POST') && 'Y' === $_POST['date_update']) {
677
                $obj->setVar('date', strtotime($_POST['date']));
678
679
                if (\Xmf\Request::hasVar('status', 'POST')) {
680
                    $obj->setVar('status', 2);
681
682
                    $donnee['status'] = 1;
683
                } else {
684
                    $obj->setVar('status', 0);
685
686
                    $donnee['status'] = 0;
687
                }
688
            } else {
689
                if (\Xmf\Request::hasVar('status', 'POST')) {
690
                    $obj->setVar('status', 1);
691
692
                    $donnee['status'] = 1;
693
                } else {
694
                    $obj->setVar('status', 0);
695
696
                    $donnee['status'] = 0;
697
                }
698
699
                if (\Xmf\Request::hasVar('date', 'POST')) {
700
                    $obj->setVar('date', strtotime($_POST['date']));
701
                } else {
702
                    $obj->setVar('date', time());
703
                }
704
            }
705
            //$donnee['date_update'] = $_POST['date_update']; //no more used later
706
        }
707
        // erreur si la description est vide
708
        if (\Xmf\Request::hasVar('description', 'POST')) {
709
            if ('' === \Xmf\Request::getString('description', '')) {
710
                $erreur = true;
711
712
                $errorMessage .= _AM_TDMDOWNLOADS_ERREUR_NODESCRIPTION . '<br>';
713
            }
714
        }
715
        // erreur si la catégorie est vide
716
        if (\Xmf\Request::hasVar('cid', 'POST')) {
717
            if (0 == \Xmf\Request::getInt('cid', 0, 'POST')) {
718
                $erreur = true;
719
720
                $errorMessage .= _AM_TDMDOWNLOADS_ERREUR_NOCAT . '<br>';
721
            }
722
        }
723
        // pour enregistrer temporairement les valeur des champs sup
724
        $criteria = new \CriteriaCompo();
725
        $criteria->setSort('weight ASC, title');
726
        $criteria->setOrder('ASC');
727
        $downloads_field = $fieldHandler->getAll($criteria);
728
        foreach (array_keys($downloads_field) as $i) {
729
            /** @var \XoopsModules\Tdmdownloads\Field[] $downloads_field */
730
731
            if (0 == $downloads_field[$i]->getVar('status_def')) {
732
                $fieldName = 'champ' . $downloads_field[$i]->getVar('fid');
733
734
                $donnee[$fieldName] = \Xmf\Request::getString($fieldName, '', 'POST');
735
            }
736
        }
737
        // enregistrement temporaire des tags
738
        if (1 == $helper->getConfig('usetag') && class_exists(Tag::class)) {
739
            $donnee['TAG'] = $_POST['tag'];
740
        }
741
742
        if (true === $erreur) {
743
            $GLOBALS['xoopsTpl']->assign('message_erreur', $errorMessage);
744
745
            /** @var \XoopsThemeForm $form */
746
747
            $form = $obj->getForm($donnee, true);
748
749
            $GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
750
751
            break;
752
        }
753
        // Pour le fichier
754
        $mediaSize = 0;
755
        if (isset($_POST['xoops_upload_file'][0])) {
756
            $uploader = new \XoopsMediaUploader($uploaddir_downloads, $helper->getConfig('mimetypes'), $helper->getConfig('maxuploadsize'), null, null);
757
758
            if ($uploader->fetchMedia($_POST['xoops_upload_file'][0])) {
759
                if ($helper->getConfig('newnamedownload')) {
760
                    $uploader->setPrefix($helper->getConfig('prefixdownloads'));
761
                }
762
763
                $uploader->fetchMedia($_POST['xoops_upload_file'][0]);
764
765
                if (!$uploader->upload()) {
766
                    $errorMessage .= $uploader->getErrors() . '<br>';
767
768
                    $GLOBALS['xoopsTpl']->assign('message_erreur', $errorMessage);
769
770
                    $form = $obj->getForm($donnee, true);
771
772
                    $GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
773
774
                    break;
775
                }
776
777
                $mediaSize = $uploader->getMediaSize();
778
779
                $obj->setVar('url', $uploadurl_downloads . $uploader->getSavedFileName());
780
            } else {
781
                if ($_FILES['attachedfile']['name'] > '') {
782
                    // file name was given, but fetchMedia failed - show error when e.g. file size exceed maxuploadsize
783
784
                    $errorMessage .= $uploader->getErrors() . '<br>';
785
786
                    $GLOBALS['xoopsTpl']->assign('message_erreur', $errorMessage);
787
788
                    $form = $obj->getForm($donnee, true);
789
790
                    $GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
791
792
                    break;
793
                }
794
795
                $obj->setVar('url', \Xmf\Request::getUrl('url', '', 'POST'));
796
            }
797
        } else {
798
            $obj->setVar('url', \Xmf\Request::getUrl('url', '', 'POST'));
799
        }
800
        // Pour l'image
801
        if (isset($_POST['xoops_upload_file'][1])) {
802
            $uploader_2 = new \XoopsMediaUploader(
803
                $uploaddir_shots, [
804
                                    'image/gif',
805
                                    'image/jpeg',
806
                                    'image/pjpeg',
807
                                    'image/x-png',
808
                                    'image/png',
809
                                ], $helper->getConfig('maxuploadsize'), null, null
810
            );
811
812
            if ($uploader_2->fetchMedia($_POST['xoops_upload_file'][1])) {
813
                $uploader_2->setPrefix('downloads_');
814
815
                $uploader_2->fetchMedia($_POST['xoops_upload_file'][1]);
816
817
                if (!$uploader_2->upload()) {
818
                    $errorMessage .= $uploader_2->getErrors() . '<br>';
819
820
                    $GLOBALS['xoopsTpl']->assign('message_erreur', $errorMessage);
821
822
                    $form = $obj->getForm($donnee, true);
823
824
                    $GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
825
826
                    break;
827
                }
828
829
                $obj->setVar('logourl', $uploader_2->getSavedFileName());
830
            } else {
831
                if ($_FILES['attachedimage']['name'] > '') {
832
                    // file name was given, but fetchMedia failed - show error when e.g. file size exceed maxuploadsize
833
834
                    $errorMessage .= $uploader_2->getErrors() . '<br>';
835
836
                    $GLOBALS['xoopsTpl']->assign('message_erreur', $errorMessage);
837
838
                    $form = $obj->getForm($donnee, true);
839
840
                    $GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
841
842
                    break;
843
                }
844
845
                $obj->setVar('logourl', \Xmf\Request::getString('logo_img', '', 'POST'));
846
            }
847
        } else {
848
            $obj->setVar('logourl', \Xmf\Request::getString('logo_img', '', 'POST'));
849
        }
850
        //Automatic file size
851
        if ('' == Xmf\Request::getString('sizeValue', '')) {
852
            if (0 == $mediaSize) {
853
                $obj->setVar('size', $utility::getFileSize(Xmf\Request::getUrl('url', '')));
854
            } else {
855
                $obj->setVar('size', $utility::convertFileSize($mediaSize));
856
            }
857
        } else {
858
            $obj->setVar('size', Xmf\Request::getFloat('sizeValue', 0) . ' ' . Xmf\Request::getString('sizeType', ''));
859
        }
860
        $timeToRedirect = 2;
861
        if (0 == $obj->getVar('size')) {
862
            $obj->setVar('size', '');
863
864
            $error_message = _AM_TDMDOWNLOADS_ERREUR_SIZE;
865
866
            $timeToRedirect = 10;
867
        }
868
        // enregistrement
869
        if ($downloadsHandler->insert($obj)) {
870
            if (!\Xmf\Request::hasVar('downloads_modified')) {
871
                $lidDownloads = $obj->getNewEnreg($db);
872
            } else {
873
                $lidDownloads = \Xmf\Request::getInt('lid');
874
            }
875
876
            //tags
877
878
            if (1 == $helper->getConfig('usetag') && class_exists(TagHandler::class)) {
879
                /** @var \XoopsModules\Tag\TagHandler $tagHandler */
880
881
                $tagHandler = Helper::getInstance()->getHandler('Tag');
882
883
                $tagHandler->updateByItem($_POST['tag'], $lidDownloads, $moduleDirName, 0);
884
            }
885
886
            // Récupération des champs supplémentaires:
887
888
            $criteria = new \CriteriaCompo();
889
890
            $criteria->setSort('weight ASC, title');
891
892
            $criteria->setOrder('ASC');
893
894
            $downloads_field = $fieldHandler->getAll($criteria);
895
896
            foreach (array_keys($downloads_field) as $i) {
897
                if (0 == $downloads_field[$i]->getVar('status_def')) {
898
                    $iddata = 'iddata' . $downloads_field[$i]->getVar('fid');
899
900
                    if (\Xmf\Request::hasVar($iddata, 'POST')) {
901
                        if ('' === \Xmf\Request::getString($iddata, '')) {
902
                            $objdata = $fielddataHandler->create();
903
                        } else {
904
                            $objdata = $fielddataHandler->get(\Xmf\Request::getString($iddata, '', 'POST'));
905
                        }
906
                    } else {
907
                        $objdata = $fielddataHandler->create();
908
                    }
909
910
                    $fieldName = 'champ' . $downloads_field[$i]->getVar('fid');
911
912
                    $objdata->setVar('data', \Xmf\Request::getString($fieldName, '', 'POST'));
913
914
                    $objdata->setVar('lid', $lidDownloads);
915
916
                    $objdata->setVar('fid', $downloads_field[$i]->getVar('fid'));
917
918
                    $fielddataHandler->insert($objdata) || $objdata->getHtmlErrors();
919
                }
920
            }
921
922
            //permission pour télécharger
923
924
            if (2 == $helper->getConfig('permission_download')) {
925
                /** @var \XoopsGroupPermHandler $grouppermHandler */
926
927
                $grouppermHandler = xoops_getHandler('groupperm');
928
929
                $criteria = new \CriteriaCompo();
930
931
                $criteria->add(new \Criteria('gperm_itemid', $lidDownloads, '='));
932
933
                $criteria->add(new \Criteria('gperm_modid', $xoopsModule->getVar('mid'), '='));
934
935
                $criteria->add(new \Criteria('gperm_name', 'tdmdownloads_download_item', '='));
936
937
                $grouppermHandler->deleteAll($criteria);
938
939
                if (\Xmf\Request::hasVar('item_download', 'POST')) {
940
                    foreach ($_POST['item_download'] as $onegroup_id) {
941
                        $grouppermHandler->addRight('tdmdownloads_download_item', $lidDownloads, $onegroup_id, $xoopsModule->getVar('mid'));
942
                    }
943
                }
944
            }
945
946
            // pour les notifications uniquement lors d'un nouveau téléchargement
947
948
            if (\Xmf\Request::hasVar('downloads_modified')) {
949
                $tags = [];
950
951
                $tags['FILE_NAME'] = \Xmf\Request::getString('title', '', 'POST');
952
953
                $tags['FILE_URL'] = XOOPS_URL . '/modules/' . $moduleDirName . '/singlefile.php?cid=' . \Xmf\Request::getInt('cid', 0, 'POST') . '&amp;lid=' . $lidDownloads;
954
955
                $downloadscat_cat = $categoryHandler->get(\Xmf\Request::getInt('cid', 0, 'POST'));
956
957
                $tags['CATEGORY_NAME'] = $downloadscat_cat->getVar('cat_title');
958
959
                $tags['CATEGORY_URL'] = XOOPS_URL . '/modules/' . $moduleDirName . '/viewcat.php?cid=' . \Xmf\Request::getInt('cid', 0, 'POST');
960
961
                /** @var \XoopsNotificationHandler $notificationHandler */
962
963
                $notificationHandler = xoops_getHandler('notification');
964
965
                $notificationHandler->triggerEvent('global', 0, 'new_file', $tags);
966
967
                $notificationHandler->triggerEvent('category', \Xmf\Request::getInt('cid', 0, 'POST'), 'new_file', $tags);
968
            }
969
970
            redirect_header('downloads.php', $timeToRedirect, _AM_TDMDOWNLOADS_REDIRECT_SAVE . '<br><br>' . $error_message);
971
        }
972
        $GLOBALS['xoopsTpl']->assign('message_erreur', $obj->getHtmlErrors());
973
974
        $form = $obj->getForm($donnee, true);
975
        $GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
976
        break;
977
    // permet de valider un téléchargement proposé
978
    case 'update_status':
979
        $obj = $downloadsHandler->get(\Xmf\Request::getInt('downloads_lid'));
980
        $obj->setVar('status', 1);
981
        if ($downloadsHandler->insert($obj)) {
982
            redirect_header('downloads.php', 1, _AM_TDMDOWNLOADS_REDIRECT_SAVE);
983
        }
984
        $GLOBALS['xoopsTpl']->assign('message_erreur', $obj->getHtmlErrors());
985
        break;
986
    // permet de valider un téléchargement proposé
987
    case 'lock_status':
988
        $obj = $downloadsHandler->get(\Xmf\Request::getInt('downloads_lid'));
989
        $obj->setVar('status', 0);
990
        if ($downloadsHandler->insert($obj)) {
991
            redirect_header('downloads.php', 1, _AM_TDMDOWNLOADS_REDIRECT_DEACTIVATED);
992
        }
993
        $GLOBALS['xoopsTpl']->assign('message_erreur', $obj->getHtmlErrors());
994
        break;
995
}
996
997
// Local icons path
998
if (is_object($helper->getModule())) {
999
    $pathModIcon16 = $helper->getModule()->getInfo('modicons16');
1000
1001
    $pathModIcon32 = $helper->getModule()->getInfo('modicons32');
1002
1003
    $GLOBALS['xoopsTpl']->assign('pathModIcon16', XOOPS_URL . '/modules/' . $moduleDirName . '/' . $pathModIcon16);
1004
1005
    $GLOBALS['xoopsTpl']->assign('pathModIcon32', $pathModIcon32);
1006
}
1007
1008
//Affichage de la partie basse de l'administration de Xoops
1009
require_once __DIR__ . '/admin_footer.php';
1010