admin/downloads.php
<?php
declare(strict_types=1);
use Xmf\Module\Admin;
use XoopsModules\Tag\{
Helper as TagHelper,
LinkHandler,
Tag,
TagHandler
};
use XoopsModules\Tdmdownloads\{
Helper,
Tree
};
/**
* TDMDownload
*
* You may not change or alter any portion of this comment or credits
* of supporting developers from this source code or any supporting source code
* which is considered copyrighted (c) material of the original comment or credit authors.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* @copyright Gregory Mage (Aka Mage)
* @license GNU GPL 2 (https://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
* @author Gregory Mage (Aka Mage)
*/
require __DIR__ . '/admin_header.php';
// Template
$templateMain = 'tdmdownloads_admin_downloads.tpl';
$helper = Helper::getInstance();
$myts = \MyTextSanitizer::getInstance();
//On recupere la valeur de l'argument op dans l'URL$
$op = \Xmf\Request::getCmd('op', 'list');
$catId = \Xmf\Request::getInt('cat_cid', 0);
// compte le nombre de téléchargement non validé
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('status', 0));
$downloads_waiting = $downloadsHandler->getCount($criteria);
$statusMenu = \Xmf\Request::getInt('statut_display', 1);
//Les valeurs de op qui vont permettre d'aller dans les differentes parties de la page
switch ($op) {
// Vue liste
case 'list':
//Affichage de la partie haute de l'administration de Xoops
xoops_cp_header();
$adminObject = Admin::getInstance();
$GLOBALS['xoopsTpl']->assign('navigation', $adminObject->displayNavigation(basename(__FILE__)));
if (1 == $statusMenu) {
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_NEW, 'downloads.php?op=new_downloads', 'add');
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_NEW_MULTIUPLOAD, '../upload.php?op=list&cat_cid=' . $catId, 'add');
if (0 == $downloads_waiting) {
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add');
} else {
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add', 'style="color : Red"');
}
} else {
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_LISTE, 'downloads.php?op=list', 'list');
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_NEW, 'downloads.php?op=new_downloads', 'add');
}
$GLOBALS['xoopsTpl']->assign('buttons', $adminObject->displayButton('left'));
$limit = $helper->getConfig('perpageadmin');
$categoryArray = $categoryHandler->getAll();
$numrowscat = count($categoryArray);
// redirection si il n'y a pas de catégories
if (0 === $numrowscat) {
redirect_header('category.php?op=new_cat', 2, _AM_TDMDOWNLOADS_REDIRECT_NOCAT);
}
$criteria = new \CriteriaCompo();
// affiche uniquement les téléchargements activés
if (\Xmf\Request::hasVar('statut_display', 'GET')) {
if (0 === \Xmf\Request::getInt('statut_display', 0, 'GET')) {
$criteria->add(new \Criteria('status', 0));
$statusDisplay = 0;
} else {
$criteria->add(new \Criteria('status', 0, '!='));
$statusDisplay = 1;
}
} else {
$criteria->add(new \Criteria('status', 0, '!='));
$statusDisplay = 1;
}
$documentSort = 1;
$documentOrder = 1;
if (\Xmf\Request::hasVar('document_tri')) {
if (1 == \Xmf\Request::getInt('document_tri')) {
$criteria->setSort('date');
$documentSort = 1;
}
if (2 == \Xmf\Request::getInt('document_tri')) {
$criteria->setSort('title');
$documentSort = 2;
}
if (3 == \Xmf\Request::getInt('document_tri')) {
$criteria->setSort('hits');
$documentSort = 3;
}
if (4 == \Xmf\Request::getInt('document_tri')) {
$criteria->setSort('rating');
$documentSort = 4;
}
if (5 == \Xmf\Request::getInt('document_tri')) {
$criteria->setSort('cid');
$documentSort = 5;
}
} else {
$criteria->setSort('date');
}
if (\Xmf\Request::hasVar('document_order')) {
if (1 == \Xmf\Request::getInt('document_order')) {
$criteria->setOrder('DESC');
$documentOrder = 1;
}
if (2 == \Xmf\Request::getInt('document_order')) {
$criteria->setOrder('ASC');
$documentOrder = 2;
}
} else {
$criteria->setOrder('DESC');
}
$start = \Xmf\Request::getInt('start', 0);
$criteria->setStart($start);
$criteria->setLimit($limit);
//pour faire une jointure de table
$downloadsHandler->table_link = $downloadsHandler->db->prefix('tdmdownloads_cat'); // Nom de la table en jointure
$downloadsHandler->field_link = 'cat_cid'; // champ de la table en jointure
$downloadsHandler->field_object = 'cid'; // champ de la table courante
$downloadsArray = $downloadsHandler->getByLink($criteria);
$numrows = $downloadsHandler->getCount($criteria);
$pagenav = '';
if ($numrows > $limit) {
$pagenav = new \XoopsPageNav($numrows, $limit, $start, 'start', 'op=list&document_tri=' . $documentSort . '&document_order=' . $documentOrder . '&statut_display=' . $statusDisplay);
$GLOBALS['xoopsTpl']->assign('pagenav', $pagenav->renderNav(4));
}
//Affichage du tableau des téléchargements
$GLOBALS['xoopsTpl']->append('downloads_count', $numrows);
if ($numrows > 0) {
$selectDocument = _AM_TDMDOWNLOADS_TRIPAR
. "<select name=\"document_tri\" id=\"document_tri\" onchange=\"location='"
. XOOPS_URL
. '/modules/'
. $xoopsModule->dirname()
. "/admin/downloads.php?statut_display=$statusDisplay&document_order=$documentOrder&document_tri='+this.options[this.selectedIndex].value\">";
$selectDocument .= '<option value="1"' . (1 == $documentSort ? ' selected="selected"' : '') . '>' . _AM_TDMDOWNLOADS_FORMDATE . '</option>';
$selectDocument .= '<option value="2"' . (2 == $documentSort ? ' selected="selected"' : '') . '>' . _AM_TDMDOWNLOADS_FORMTITLE . '</option>';
$selectDocument .= '<option value="3"' . (3 == $documentSort ? ' selected="selected"' : '') . '>' . _AM_TDMDOWNLOADS_FORMHITS . '</option>';
$selectDocument .= '<option value="4"' . (4 == $documentSort ? ' selected="selected"' : '') . '>' . _AM_TDMDOWNLOADS_FORMRATING . '</option>';
$selectDocument .= '<option value="5"' . (5 == $documentSort ? ' selected="selected"' : '') . '>' . _AM_TDMDOWNLOADS_FORMCAT . '</option>';
$selectDocument .= '</select> ';
$GLOBALS['xoopsTpl']->assign('selectDocument', $selectDocument);
$selectOrder = _AM_TDMDOWNLOADS_ORDER
. "<select name=\"order_tri\" id=\"order_tri\" onchange=\"location='"
. XOOPS_URL
. '/modules/'
. $xoopsModule->dirname()
. "/admin/downloads.php?statut_display=$statusDisplay&document_tri=$documentSort&document_order='+this.options[this.selectedIndex].value\">";
$selectOrder .= '<option value="1"' . (1 == $documentOrder ? ' selected="selected"' : '') . '>DESC</option>';
$selectOrder .= '<option value="2"' . (2 == $documentOrder ? ' selected="selected"' : '') . '>ASC</option>';
$selectOrder .= '</select> ';
$GLOBALS['xoopsTpl']->assign('selectOrder', $selectOrder);
$mytree = new Tree($categoryArray, 'cat_cid', 'cat_pid');
$class = 'odd';
$downloads = [];
foreach (array_keys($downloadsArray) as $i) {
/** @var \XoopsModules\Tdmdownloads\Downloads[] $downloadsArray */
$download = [
'category' => $utility::getPathTree($mytree, $downloadsArray[$i]->getVar('cid'), $categoryArray, 'cat_title', $prefix = ' <img src="../assets/images/deco/arrow.gif"> '),
'cid' => $downloadsArray[$i]->getVar('cid'),
'lid' => $i,
'title' => $downloadsArray[$i]->getVar('title'),
'hits' => $downloadsArray[$i]->getVar('hits'),
'rating' => number_format((float)$downloadsArray[$i]->getVar('rating'), 1),
'statut_display' => $statusDisplay,
];
$GLOBALS['xoopsTpl']->append('downloads_list', $download);
unset($download);
}
} else {
$GLOBALS['xoopsTpl']->assign('message_erreur', _AM_TDMDOWNLOADS_ERREUR_NODOWNLOADSWAITING);
}
break;
// vue création
case 'new_downloads':
//Affichage de la partie haute de l'administration de Xoops
xoops_cp_header();
$adminObject = Admin::getInstance();
$GLOBALS['xoopsTpl']->assign('navigation', $adminObject->displayNavigation(basename(__FILE__)));
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_LISTE, 'downloads.php?op=list', 'list');
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_NEW, 'downloads.php?op=new_downloads', 'add');
if (0 == $downloads_waiting) {
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add');
} else {
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add', 'style="color : Red"');
}
$GLOBALS['xoopsTpl']->assign('buttons', $adminObject->displayButton('left'));
//Affichage du formulaire de création des téléchargements
/** @var \XoopsModules\Tdmdownloads\Downloads $obj */
$obj = $downloadsHandler->create();
$form = $obj->getForm($donnee = [], false);
$GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
break;
// Pour éditer un téléchargement
case 'edit_downloads':
//Affichage de la partie haute de l'administration de Xoops
xoops_cp_header();
$adminObject = Admin::getInstance();
$GLOBALS['xoopsTpl']->assign('navigation', $adminObject->displayNavigation(basename(__FILE__)));
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_LISTE, 'downloads.php?op=list', 'list');
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_NEW, 'downloads.php?op=new_downloads', 'add');
if (0 == $downloads_waiting) {
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add');
} else {
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add', 'style="color : Red"');
}
$GLOBALS['xoopsTpl']->assign('buttons', $adminObject->displayButton('left'));
//Affichage du formulaire de création des téléchargements
$downloads_lid = \Xmf\Request::getInt('downloads_lid', 0, 'GET');
/** @var \XoopsModules\Tdmdownloads\Downloads $obj */
$obj = $downloadsHandler->get($downloads_lid);
$form = $obj->getForm($donnee = [], false);
$GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
break;
// Pour supprimer un téléchargement
case 'del_downloads':
global $xoopsModule;
$downloads_lid = \Xmf\Request::getInt('downloads_lid', 0, 'GET');
$obj = $downloadsHandler->get($downloads_lid);
if (\Xmf\Request::hasVar('ok') && 1 == \Xmf\Request::getInt('ok')) {
if (!$GLOBALS['xoopsSecurity']->check()) {
redirect_header('downloads.php', 3, implode(',', $GLOBALS['xoopsSecurity']->getErrors()));
}
// permet d'extraire le nom du fichier
$urlfile = substr_replace($obj->getVar('url'), '', 0, mb_strlen($uploadurl_downloads));
if ($downloadsHandler->delete($obj)) {
// permet de donner le chemin du fichier
$urlfile = $uploaddir_downloads . $urlfile;
// si le fichier est sur le serveur il es détruit
if (is_file($urlfile)) {
chmod($urlfile, 0777);
unlink($urlfile);
}
// supression des votes
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('lid', $downloads_lid));
$votedata = $ratingHandler->getAll($criteria);
foreach (array_keys($votedata) as $i) {
/** @var \XoopsModules\Tdmdownloads\Rating[] $votedata */
$objvotedata = $ratingHandler->get($votedata[$i]->getVar('ratingid'));
$ratingHandler->delete($objvotedata) || $objvotedata->getHtmlErrors();
}
// supression des rapports de fichier brisé
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('lid', $downloads_lid));
$downloads_broken = $brokenHandler->getAll($criteria);
foreach (array_keys($downloads_broken) as $i) {
/** @var \XoopsModules\Tdmdownloads\Broken[] $downloads_broken */
$objbroken = $brokenHandler->get($downloads_broken[$i]->getVar('reportid'));
$brokenHandler->delete($objbroken) || $objbroken->getHtmlErrors();
}
// supression des data des champs sup.
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('lid', $downloads_lid));
$downloads_fielddata = $fielddataHandler->getAll($criteria);
foreach (array_keys($downloads_fielddata) as $i) {
/** @var \XoopsModules\Tdmdownloads\Fielddata[] $downloads_fielddata */
$objfielddata = $fielddataHandler->get($downloads_fielddata[$i]->getVar('iddata'));
$fielddataHandler->delete($objfielddata) || $objvfielddata->getHtmlErrors();
}
// supression des commentaires
xoops_comment_delete($xoopsModule->getVar('mid'), $downloads_lid);
//supression des tags
if (1 == $helper->getConfig('usetag') && class_exists(LinkHandler::class)) {
/** @var \XoopsModules\Tag\LinkHandler $linkHandler */
$linkHandler = TagHelper::getInstance()->getHandler('Link');
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('tag_itemid', $downloads_lid));
$downloadsTags = $linkHandler->getAll($criteria);
foreach (array_keys($downloadsTags) as $i) {
/** @var \XoopsModules\Tag\Link[] $downloadsTags */
$objtags = $linkHandler->get($downloadsTags[$i]->getVar('tl_id'));
$linkHandler->delete($objtags) || $objtags->getHtmlErrors();
}
}
redirect_header('downloads.php', 1, _AM_TDMDOWNLOADS_REDIRECT_DELOK);
} else {
$GLOBALS['xoopsTpl']->assign('message_erreur', $obj->getHtmlErrors());
}
} else {
//Affichage de la partie haute de l'administration de Xoops
xoops_cp_header();
$adminObject = Admin::getInstance();
$GLOBALS['xoopsTpl']->assign('navigation', $adminObject->displayNavigation(basename(__FILE__)));
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_LISTE, 'downloads.php?op=list', 'list');
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_NEW, 'downloads.php?op=new_downloads', 'add');
if (0 == $downloads_waiting) {
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add');
} else {
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add', 'style="color : Red"');
}
$adminObject->displayButton('left');
xoops_confirm(
['ok' => 1, 'downloads_lid' => $downloads_lid, 'op' => 'del_downloads'],
$_SERVER['REQUEST_URI'],
sprintf(_AM_TDMDOWNLOADS_FORMSUREDEL, $obj->getVar('title')) . '<br><br>' . _AM_TDMDOWNLOADS_FORMWITHFILE . ' <b><a href="' . $obj->getVar('url') . '">' . $obj->getVar('url') . '</a></b><br>'
);
}
break;
// Pour voir les détails du téléchargement
case 'view_downloads':
//Affichage de la partie haute de l'administration de Xoops
xoops_cp_header();
$adminObject = Admin::getInstance();
$GLOBALS['xoopsTpl']->assign('navigation', $adminObject->displayNavigation(basename(__FILE__)));
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_LISTE, 'downloads.php?op=list', 'list');
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_NEW, 'downloads.php?op=new_downloads', 'add');
if (0 == $downloads_waiting) {
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add');
} else {
$adminObject->addItemButton(_AM_TDMDOWNLOADS_DOWNLOADS_WAIT, 'downloads.php?op=list&statut_display=0', 'add', 'style="color : Red"');
}
$GLOBALS['xoopsTpl']->assign('buttons', $adminObject->displayButton('left'));
$GLOBALS['xoopsTpl']->assign('uploadurl_shots', $uploadurl_shots);
$downloads_lid = \Xmf\Request::getInt('downloads_lid', 0, 'GET');
//information du téléchargement
$viewDownloads = $downloadsHandler->get($downloads_lid);
//catégorie
//$view_category = $categoryHandler->get($viewDownloads->getVar('cid'));
$categoryArray = $categoryHandler->getAll();
$mytree = new Tree($categoryArray, 'cat_cid', 'cat_pid');
// sortie des informations
$downloads_title = $viewDownloads->getVar('title');
$downloads_description = $viewDownloads->getVar('description');
//permet d'enlever [pagebreak] du texte
$downloads_description = str_replace('[pagebreak]', '', $downloads_description);
$category = $utility::getPathTree($mytree, $viewDownloads->getVar('cid'), $categoryArray, 'cat_title', $prefix = ' <img src="../assets/images/deco/arrow.gif"> ');
// affichages des informations du téléchargement
$download = [
'title' => $downloads_title,
'description' => $downloads_description,
'cid' => $viewDownloads->getVar('cid'),
'lid' => $downloads_lid,
'category' => $category,
];
$criteria = new \CriteriaCompo();
$criteria->setSort('weight ASC, title');
$criteria->setOrder('ASC');
$criteria->add(new \Criteria('status', 1));
$downloads_field = $fieldHandler->getAll($criteria);
$fieldsList = [];
foreach (array_keys($downloads_field) as $i) {
/** @var \XoopsModules\Tdmdownloads\Field[] $downloads_field */
if (1 == $downloads_field[$i]->getVar('status_def')) {
if (1 == $downloads_field[$i]->getVar('fid')) {
//page d'accueil
if ('' !== $viewDownloads->getVar('homepage')) {
$fieldsList[] = ['name' => _AM_TDMDOWNLOADS_FORMHOMEPAGE, 'value' => '<a href="' . $viewDownloads->getVar('homepage') . '">' . $viewDownloads->getVar('homepage') . '</a>'];
}
}
if (2 == $downloads_field[$i]->getVar('fid')) {
//version
if ('' !== $viewDownloads->getVar('version')) {
$fieldsList[] = ['name' => _AM_TDMDOWNLOADS_FORMVERSION, 'value' => $viewDownloads->getVar('version')];
}
}
if (3 == $downloads_field[$i]->getVar('fid')) {
//taille du fichier
if ('' !== $viewDownloads->getVar('size')) {
$fieldsList[] = ['name' => _AM_TDMDOWNLOADS_FORMSIZE_WHEN_SUBMIT, 'value' => $viewDownloads->getVar('size')];
}
}
if (4 == $downloads_field[$i]->getVar('fid')) {
//plateforme
if ('' !== $viewDownloads->getVar('platform')) {
$fieldsList[] = ['name' => _AM_TDMDOWNLOADS_FORMPLATFORM, 'value' => $viewDownloads->getVar('platform')];
}
}
} else {
$contenu = '';
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('lid', $downloads_lid));
$criteria->add(new \Criteria('fid', $downloads_field[$i]->getVar('fid')));
$downloadsfielddata = $fielddataHandler->getAll($criteria);
foreach (array_keys($downloadsfielddata) as $j) {
/** @var \XoopsModules\Tdmdownloads\Fielddata[] $downloadsfielddata */
$contenu = $downloadsfielddata[$j]->getVar('data');
}
if ('' !== $contenu) {
$fieldsList[] = ['name' => $downloads_field[$i]->getVar('title'), 'value' => $contenu];
}
}
}
$download['fields_list'] = $fieldsList;
// tags
if (1 == $helper->getConfig('usetag') && class_exists(Tag::class)) {
require_once XOOPS_ROOT_PATH . '/modules/tag/include/tagbar.php';
$tags_array = tagBar($downloads_lid, 0);
if (!empty($tags_array)) {
$tags = '';
foreach (array_keys($tags_array['tags']) as $i) {
$tags .= $tags_array['delimiter'] . ' ' . $tags_array['tags'][$i] . ' ';
}
$download['tags'] = ['title' => $tags_array['title'], 'value' => $tags];
}
}
if ($helper->getConfig('useshots')) {
if ('blank.gif' !== $viewDownloads->getVar('logourl')) {
$download['logourl'] = $viewDownloads->getVar('logourl');
}
}
$download['date'] = formatTimestamp($viewDownloads->getVar('date'));
$download['submitter'] = XoopsUser::getUnameFromId($viewDownloads->getVar('submitter'));
$download['hits'] = $viewDownloads->getVar('hits');
$download['rating'] = number_format((float)$viewDownloads->getVar('rating'), 1);
$download['votes'] = $viewDownloads->getVar('votes');
if (true === $helper->getConfig('use_paypal') && '' !== $viewDownloads->getVar('paypal')) {
$download['paypal'] = $viewDownloads->getVar('paypal');
}
$download['comments'] = $viewDownloads->getVar('comments');
$GLOBALS['xoopsTpl']->assign('download', $download);
// Utilisateur enregistré
$ratings = [];
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('lid', $downloads_lid));
$criteria->add(new \Criteria('ratinguser', 0, '!='));
$votedataArray = $ratingHandler->getAll($criteria);
$votesTotal = count($votedataArray);
$ratings['user_total'] = $votesTotal;
$userList = [];
foreach (array_keys($votedataArray) as $i) {
/** @var \XoopsModules\Tdmdownloads\Rating[] $votedataArray */
$userList[] = [
'ratinguser' => \XoopsUser::getUnameFromId($votedataArray[$i]->getVar('ratinguser')),
'ratinghostname' => $votedataArray[$i]->getVar('ratinghostname'),
'rating' => $votedataArray[$i]->getVar('rating'),
'ratingtimestamp' => formatTimestamp($votedataArray[$i]->getVar('ratingtimestamp')),
'myTextForm' => myTextForm('downloads.php?op=del_vote&lid=' . $votedataArray[$i]->getVar('lid') . '&rid=' . $votedataArray[$i]->getVar('ratingid'), 'X'),
];
}
$ratings['user_list'] = $userList;
// Utilisateur anonyme
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('lid', $downloads_lid));
$criteria->add(new \Criteria('ratinguser', 0));
$votedataArray = $ratingHandler->getAll($criteria);
$votesTotal = count($votedataArray);
$ratings['anon_total'] = $votesTotal;
$anon_list = [];
foreach (array_keys($votedataArray) as $i) {
$anon_list[] = [
'ratinghostname' => $votedataArray[$i]->getVar('ratinghostname'),
'rating' => $votedataArray[$i]->getVar('rating'),
'ratingtimestamp' => formatTimestamp($votedataArray[$i]->getVar('ratingtimestamp')),
'myTextForm' => myTextForm('downloads.php?op=del_vote&lid=' . $votedataArray[$i]->getVar('lid') . '&rid=' . $votedataArray[$i]->getVar('ratingid'), 'X'),
];
}
$ratings['anon_list'] = $anon_list;
$ratings['votes_total'] = $ratings['user_total'] + $ratings['anon_total'];
$GLOBALS['xoopsTpl']->assign('ratings', $ratings);
$GLOBALS['xoopsTpl']->assign('download_detail', true);
break;
// permet de suprimmer un vote et de recalculer la note
case 'del_vote':
$objvotedata = $ratingHandler->get(\Xmf\Request::getInt('rid'));
if ($ratingHandler->delete($objvotedata)) {
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('lid', \Xmf\Request::getInt('lid')));
$votedataArray = $ratingHandler->getAll($criteria);
$votesTotal = $ratingHandler->getCount($criteria);
$obj = $downloadsHandler->get(\Xmf\Request::getInt('lid'));
if (0 === $votesTotal) {
$obj->setVar('rating', number_format(0, 1));
$obj->setVar('votes', 0);
if ($downloadsHandler->insert($obj)) {
redirect_header('downloads.php?op=view_downloads&downloads_lid=' . \Xmf\Request::getInt('lid'), 1, _AM_TDMDOWNLOADS_REDIRECT_DELOK);
}
} else {
$ratingTotal = 0;
foreach (array_keys($votedataArray) as $i) {
/** @var \XoopsModules\Tdmdownloads\Rating[] $votedataArray */
$ratingTotal += $votedataArray[$i]->getVar('rating');
}
$rating = $ratingTotal / $votesTotal;
$obj->setVar('rating', number_format((float)$rating, 1));
$obj->setVar('votes', $votesTotal);
if ($downloadsHandler->insert($obj)) {
redirect_header('downloads.php?op=view_downloads&downloads_lid=' . \Xmf\Request::getInt('lid'), 1, _AM_TDMDOWNLOADS_REDIRECT_DELOK);
}
}
$GLOBALS['xoopsTpl']->assign('message_erreur', $obj->getHtmlErrors());
}
$GLOBALS['xoopsTpl']->assign('message_erreur', $objvotedata->getHtmlErrors());
break;
// Pour sauver un téléchargement
case 'save_downloads':
global $xoopsDB;
require_once XOOPS_ROOT_PATH . '/class/uploader.php';
xoops_cp_header();
if (!$GLOBALS['xoopsSecurity']->check()) {
redirect_header('downloads.php', 3, implode(',', $GLOBALS['xoopsSecurity']->getErrors()));
}
/** @var \XoopsModules\Tdmdownloads\Downloads $obj */
if (\Xmf\Request::hasVar('lid')) {
$obj = $downloadsHandler->get(\Xmf\Request::getInt('lid'));
} else {
$obj = $downloadsHandler->create();
}
$erreur = false;
$errorMessage = '';
$donnee = [];
$obj->setVar('title', \Xmf\Request::getString('title', '', 'POST'));
$obj->setVar('cid', \Xmf\Request::getInt('cid', 0, 'POST'));
$obj->setVar('homepage', formatURL(\Xmf\Request::getUrl('homepage', '', 'POST')));
$obj->setVar('version', \Xmf\Request::getString('version', '', 'POST'));
$obj->setVar('paypal', \Xmf\Request::getString('paypal', '', 'POST'));
if (\Xmf\Request::hasVar('platform', 'POST')) {
$obj->setVar('platform', implode('|', \Xmf\Request::getArray('platform', [], 'POST')));
}
$obj->setVar('description', \Xmf\Request::getString('description', '', 'POST'));
if (\Xmf\Request::hasVar('submitter', 'POST')) {
$obj->setVar('submitter', \Xmf\Request::getInt('submitter', 0, 'POST'));
$donnee['submitter'] = \Xmf\Request::getInt('submitter', 0, 'POST');
} else {
$obj->setVar('submitter', !empty($xoopsUser) ? $xoopsUser->getVar('uid') : 0);
$donnee['submitter'] = !empty($xoopsUser) ? $xoopsUser->getVar('uid') : 0;
}
if (\Xmf\Request::hasVar('downloads_modified')) {
$obj->setVar('date', time());
if (\Xmf\Request::hasVar('status', 'POST')) {
$obj->setVar('status', 1);
$donnee['status'] = 1;
} else {
$obj->setVar('status', 0);
$donnee['status'] = 0;
}
} elseif (\Xmf\Request::hasVar('date_update', 'POST') && 'Y' === $_POST['date_update']) {
$obj->setVar('date', strtotime($_POST['date']));
if (\Xmf\Request::hasVar('status', 'POST')) {
$obj->setVar('status', 2);
$donnee['status'] = 1;
} else {
$obj->setVar('status', 0);
$donnee['status'] = 0;
}
} else {
if (\Xmf\Request::hasVar('status', 'POST')) {
$obj->setVar('status', 1);
$donnee['status'] = 1;
} else {
$obj->setVar('status', 0);
$donnee['status'] = 0;
}
if (\Xmf\Request::hasVar('date', 'POST')) {
$obj->setVar('date', strtotime($_POST['date']));
} else {
$obj->setVar('date', time());
}
//$donnee['date_update'] = $_POST['date_update']; //no more used later
}
// erreur si la description est vide
if (\Xmf\Request::hasVar('description', 'POST')) {
if ('' === \Xmf\Request::getString('description', '')) {
$erreur = true;
$errorMessage .= _AM_TDMDOWNLOADS_ERREUR_NODESCRIPTION . '<br>';
}
}
// erreur si la catégorie est vide
if (\Xmf\Request::hasVar('cid', 'POST')) {
if (0 == \Xmf\Request::getInt('cid', 0, 'POST')) {
$erreur = true;
$errorMessage .= _AM_TDMDOWNLOADS_ERREUR_NOCAT . '<br>';
}
}
// pour enregistrer temporairement les valeur des champs sup
$criteria = new \CriteriaCompo();
$criteria->setSort('weight ASC, title');
$criteria->setOrder('ASC');
$downloads_field = $fieldHandler->getAll($criteria);
foreach (array_keys($downloads_field) as $i) {
/** @var \XoopsModules\Tdmdownloads\Field[] $downloads_field */
if (0 == $downloads_field[$i]->getVar('status_def')) {
$fieldName = 'champ' . $downloads_field[$i]->getVar('fid');
$donnee[$fieldName] = \Xmf\Request::getString($fieldName, '', 'POST');
}
}
// enregistrement temporaire des tags
if (1 == $helper->getConfig('usetag') && class_exists(Tag::class)) {
$donnee['TAG'] = $_POST['tag'];
}
if (true === $erreur) {
$GLOBALS['xoopsTpl']->assign('message_erreur', $errorMessage);
/** @var \XoopsThemeForm $form */
$form = $obj->getForm($donnee, true);
$GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
break;
}
// Pour le fichier
$mediaSize = 0;
if (isset($_POST['xoops_upload_file'][0])) {
$uploader = new \XoopsMediaUploader($uploaddir_downloads, $helper->getConfig('mimetypes'), $helper->getConfig('maxuploadsize'), null, null);
if ($uploader->fetchMedia($_POST['xoops_upload_file'][0])) {
if ($helper->getConfig('newnamedownload')) {
$uploader->setPrefix($helper->getConfig('prefixdownloads'));
}
$uploader->fetchMedia($_POST['xoops_upload_file'][0]);
if (!$uploader->upload()) {
$errorMessage .= $uploader->getErrors() . '<br>';
$GLOBALS['xoopsTpl']->assign('message_erreur', $errorMessage);
$form = $obj->getForm($donnee, true);
$GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
break;
}
$mediaSize = $uploader->getMediaSize();
$obj->setVar('url', $uploadurl_downloads . $uploader->getSavedFileName());
} else {
if ($_FILES['attachedfile']['name'] > '') {
// file name was given, but fetchMedia failed - show error when e.g. file size exceed maxuploadsize
$errorMessage .= $uploader->getErrors() . '<br>';
$GLOBALS['xoopsTpl']->assign('message_erreur', $errorMessage);
$form = $obj->getForm($donnee, true);
$GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
break;
}
$obj->setVar('url', \Xmf\Request::getUrl('url', '', 'POST'));
}
} else {
$obj->setVar('url', \Xmf\Request::getUrl('url', '', 'POST'));
}
// Pour l'image
if (isset($_POST['xoops_upload_file'][1])) {
$uploader_2 = new \XoopsMediaUploader(
$uploaddir_shots, [
'image/gif',
'image/jpeg',
'image/pjpeg',
'image/x-png',
'image/png',
], $helper->getConfig('maxuploadsize'), null, null
);
if ($uploader_2->fetchMedia($_POST['xoops_upload_file'][1])) {
$uploader_2->setPrefix('downloads_');
$uploader_2->fetchMedia($_POST['xoops_upload_file'][1]);
if (!$uploader_2->upload()) {
$errorMessage .= $uploader_2->getErrors() . '<br>';
$GLOBALS['xoopsTpl']->assign('message_erreur', $errorMessage);
$form = $obj->getForm($donnee, true);
$GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
break;
}
$obj->setVar('logourl', $uploader_2->getSavedFileName());
} else {
if ($_FILES['attachedimage']['name'] > '') {
// file name was given, but fetchMedia failed - show error when e.g. file size exceed maxuploadsize
$errorMessage .= $uploader_2->getErrors() . '<br>';
$GLOBALS['xoopsTpl']->assign('message_erreur', $errorMessage);
$form = $obj->getForm($donnee, true);
$GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
break;
}
$obj->setVar('logourl', \Xmf\Request::getString('logo_img', '', 'POST'));
}
} else {
$obj->setVar('logourl', \Xmf\Request::getString('logo_img', '', 'POST'));
}
//Automatic file size
if ('' == Xmf\Request::getString('sizeValue', '')) {
if (0 == $mediaSize) {
$obj->setVar('size', $utility::getFileSize(Xmf\Request::getUrl('url', '')));
} else {
$obj->setVar('size', $utility::convertFileSize($mediaSize));
}
} else {
$obj->setVar('size', Xmf\Request::getFloat('sizeValue', 0) . ' ' . Xmf\Request::getString('sizeType', ''));
}
$timeToRedirect = 2;
if (0 == $obj->getVar('size')) {
$obj->setVar('size', '');
$error_message = _AM_TDMDOWNLOADS_ERREUR_SIZE;
$timeToRedirect = 10;
}
// enregistrement
if ($downloadsHandler->insert($obj)) {
if (\Xmf\Request::hasVar('downloads_modified')) {
$lidDownloads = \Xmf\Request::getInt('lid');
} else {
$lidDownloads = $obj->getNewEnreg($db);
}
//tags
if (1 == $helper->getConfig('usetag') && class_exists(TagHandler::class)) {
/** @var \XoopsModules\Tag\TagHandler $tagHandler */
$tagHandler = TagHelper::getInstance()->getHandler('Tag');
$tagHandler->updateByItem($_POST['tag'], $lidDownloads, $moduleDirName, 0);
}
// Récupération des champs supplémentaires:
$criteria = new \CriteriaCompo();
$criteria->setSort('weight ASC, title');
$criteria->setOrder('ASC');
$downloads_field = $fieldHandler->getAll($criteria);
foreach (array_keys($downloads_field) as $i) {
if (0 == $downloads_field[$i]->getVar('status_def')) {
$iddata = 'iddata' . $downloads_field[$i]->getVar('fid');
if (\Xmf\Request::hasVar($iddata, 'POST')) {
if ('' === \Xmf\Request::getString($iddata, '')) {
$objdata = $fielddataHandler->create();
} else {
$objdata = $fielddataHandler->get(\Xmf\Request::getString($iddata, '', 'POST'));
}
} else {
$objdata = $fielddataHandler->create();
}
$fieldName = 'champ' . $downloads_field[$i]->getVar('fid');
$objdata->setVar('data', \Xmf\Request::getString($fieldName, '', 'POST'));
$objdata->setVar('lid', $lidDownloads);
$objdata->setVar('fid', $downloads_field[$i]->getVar('fid'));
$fielddataHandler->insert($objdata) || $objdata->getHtmlErrors();
}
}
//permission pour télécharger
if (2 == $helper->getConfig('permission_download')) {
/** @var \XoopsGroupPermHandler $grouppermHandler */
$grouppermHandler = xoops_getHandler('groupperm');
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('gperm_itemid', $lidDownloads, '='));
$criteria->add(new \Criteria('gperm_modid', $xoopsModule->getVar('mid'), '='));
$criteria->add(new \Criteria('gperm_name', 'tdmdownloads_download_item', '='));
$grouppermHandler->deleteAll($criteria);
if (\Xmf\Request::hasVar('item_download', 'POST')) {
foreach ($_POST['item_download'] as $onegroup_id) {
$grouppermHandler->addRight('tdmdownloads_download_item', $lidDownloads, $onegroup_id, $xoopsModule->getVar('mid'));
}
}
}
// pour les notifications uniquement lors d'un nouveau téléchargement
if (\Xmf\Request::hasVar('downloads_modified')) {
$tags = [];
$tags['FILE_NAME'] = \Xmf\Request::getString('title', '', 'POST');
$tags['FILE_URL'] = XOOPS_URL . '/modules/' . $moduleDirName . '/singlefile.php?cid=' . \Xmf\Request::getInt('cid', 0, 'POST') . '&lid=' . $lidDownloads;
$downloadscat_cat = $categoryHandler->get(\Xmf\Request::getInt('cid', 0, 'POST'));
$tags['CATEGORY_NAME'] = $downloadscat_cat->getVar('cat_title');
$tags['CATEGORY_URL'] = XOOPS_URL . '/modules/' . $moduleDirName . '/viewcat.php?cid=' . \Xmf\Request::getInt('cid', 0, 'POST');
/** @var \XoopsNotificationHandler $notificationHandler */
$notificationHandler = xoops_getHandler('notification');
$notificationHandler->triggerEvent('global', 0, 'new_file', $tags);
$notificationHandler->triggerEvent('category', \Xmf\Request::getInt('cid', 0, 'POST'), 'new_file', $tags);
}
redirect_header('downloads.php', $timeToRedirect, _AM_TDMDOWNLOADS_REDIRECT_SAVE . '<br><br>' . $error_message);
}
$GLOBALS['xoopsTpl']->assign('message_erreur', $obj->getHtmlErrors());
$form = $obj->getForm($donnee, true);
$GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
break;
// permet de valider un téléchargement proposé
case 'update_status':
$obj = $downloadsHandler->get(\Xmf\Request::getInt('downloads_lid'));
$obj->setVar('status', 1);
if ($downloadsHandler->insert($obj)) {
redirect_header('downloads.php', 1, _AM_TDMDOWNLOADS_REDIRECT_SAVE);
}
$GLOBALS['xoopsTpl']->assign('message_erreur', $obj->getHtmlErrors());
break;
// permet de valider un téléchargement proposé
case 'lock_status':
$obj = $downloadsHandler->get(\Xmf\Request::getInt('downloads_lid'));
$obj->setVar('status', 0);
if ($downloadsHandler->insert($obj)) {
redirect_header('downloads.php', 1, _AM_TDMDOWNLOADS_REDIRECT_DEACTIVATED);
}
$GLOBALS['xoopsTpl']->assign('message_erreur', $obj->getHtmlErrors());
break;
}
// Local icons path
if (is_object($helper->getModule())) {
$pathModIcon16 = $helper->getModule()->getInfo('modicons16');
$pathModIcon32 = $helper->getModule()->getInfo('modicons32');
$GLOBALS['xoopsTpl']->assign('pathModIcon16', XOOPS_URL . '/modules/' . $moduleDirName . '/' . $pathModIcon16);
$GLOBALS['xoopsTpl']->assign('pathModIcon32', $pathModIcon32);
}
//Affichage de la partie basse de l'administration de Xoops
require_once __DIR__ . '/admin_footer.php';