admin/category.php
<?php
declare(strict_types=1);
use Xmf\Module\Admin;
use XoopsModules\Tag\Helper as TagHelper;
use XoopsModules\Tag\LinkHandler;
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_category.tpl';
/** @var \Helper $helper */
$helper = Helper::getInstance();
//On recupere la valeur de l'argument op dans l'URL$
$op = \Xmf\Request::getCmd('op', 'list');
//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();
$moduleDirName = basename(dirname(__DIR__));
$adminObject = Admin::getInstance();
$GLOBALS['xoopsTpl']->assign('navigation', $adminObject->displayNavigation(basename(__FILE__)));
$adminObject->addItemButton(_AM_TDMDOWNLOADS_CAT_NEW, 'category.php?op=new_cat', 'add');
$GLOBALS['xoopsTpl']->assign('buttons', $adminObject->displayButton('left'));
$GLOBALS['xoopsTpl']->assign('tdmdownloads_url', $helper->url());
$criteria = new \CriteriaCompo();
$criteria->setSort('cat_weight ASC, cat_title');
$criteria->setOrder('ASC');
$downloads_cat = $categoryHandler->getAll($criteria);
//Affichage du tableau
// if (count($downloads_cat) > 0) {
if (count($downloads_cat) > 0) {
$GLOBALS['xoopsTpl']->assign('categories_count', count($downloads_cat));
$mytree = new Tree($downloads_cat, 'cat_cid', 'cat_pid');
$category_ArrayTree = $mytree->makeArrayTree('cat_title', '<img src="../assets/images/deco/arrow.gif">');
$category = [];
foreach (array_keys($category_ArrayTree) as $i) {
/** @var \XoopsModules\Tdmdownloads\Category[] $downloads_cat */
$category = [
'cid' => $i,
'title' => $downloads_cat[$i]->getVar('cat_title'),
'category' => $category_ArrayTree[$i],
'cat_imgurl' => $uploadurl . $downloads_cat[$i]->getVar('cat_imgurl'),
'cat_description_main' => $downloads_cat[$i]->getVar('cat_description_main'),
'cat_weight' => $downloads_cat[$i]->getVar('cat_weight'),
];
$GLOBALS['xoopsTpl']->append('categories_list', $category);
unset($category);
}
}
break;
// vue création
case 'new_cat':
//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_CAT_LIST, 'category.php?op=list', 'list');
$GLOBALS['xoopsTpl']->assign('buttons', $adminObject->displayButton('left'));
//Affichage du formulaire de création des catégories
/** @var \XoopsModules\Tdmdownloads\Category $obj */
$obj = $categoryHandler->create();
$form = $obj->getForm();
$GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
break;
// Pour éditer une catégorie
case 'edit_cat':
//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_CAT_LIST, 'category.php?op=list', 'list');
$adminObject->addItemButton(_AM_TDMDOWNLOADS_CAT_NEW, 'category.php?op=new_cat', 'add');
$GLOBALS['xoopsTpl']->assign('buttons', $adminObject->displayButton('left'));
//Affichage du formulaire de création des catégories
$categoryId = \Xmf\Request::getInt('downloadscat_cid', 0, 'GET');
/** @var \XoopsModules\Tdmdownloads\Category $obj */
$obj = $categoryHandler->get($categoryId);
$form = $obj->getForm();
$GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
break;
// Pour supprimer une catégorie
case 'del_cat':
global $xoopsModule;
$categoryId = \Xmf\Request::getInt('downloadscat_cid', 0, 'GET');
/** @var \XoopsModules\Tdmdownloads\Category $obj */
$obj = $categoryHandler->get($categoryId);
if (\Xmf\Request::hasVar('ok', 'REQUEST') && 1 == \Xmf\Request::getInt('ok', 0, 'REQUEST')) {
if (!$GLOBALS['xoopsSecurity']->check()) {
redirect_header('category.php', 3, implode(',', $GLOBALS['xoopsSecurity']->getErrors()));
}
// supression des téléchargements de la catégorie
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('cid', $categoryId));
$downloadsArray = $downloadsHandler->getAll($criteria);
foreach (array_keys($downloadsArray) as $i) {
/** @var \XoopsModules\Tdmdownloads\Downloads[] $downloadsArray */
// supression des votes
$criteria_1 = new \CriteriaCompo();
$criteria_1->add(new \Criteria('lid', $downloadsArray[$i]->getVar('lid')));
$votedata = $ratingHandler->getAll($criteria_1);
foreach (array_keys($votedata) as $j) {
/** @var \XoopsModules\Tdmdownloads\Rating[] $votedata */
$objvotedata = $ratingHandler->get($votedata[$j]->getVar('ratingid'));
$ratingHandler->delete($objvotedata) || $objvotedata->getHtmlErrors();
}
// supression des rapports de fichier brisé
$criteria_2 = new \CriteriaCompo();
$criteria_2->add(new \Criteria('lid', $downloadsArray[$i]->getVar('lid')));
$downloads_broken = $brokenHandler->getAll($criteria_2);
foreach (array_keys($downloads_broken) as $j) {
/** @var \XoopsModules\Tdmdownloads\Broken[] $downloads_broken */
$objbroken = $brokenHandler->get($downloads_broken[$j]->getVar('reportid'));
$brokenHandler->delete($objbroken) || $objbroken->getHtmlErrors();
}
// supression des data des champs sup.
$criteria_3 = new \CriteriaCompo();
$criteria_3->add(new \Criteria('lid', $downloadsArray[$i]->getVar('lid')));
$downloads_fielddata = $fielddataHandler->getAll($criteria_3);
if ($fielddataHandler->getCount($criteria_3) > 0) {
foreach (array_keys($downloads_fielddata) as $j) {
/** @var \XoopsModules\Tdmdownloads\Fielddata[] $downloads_fielddata */
$objfielddata = $fielddataHandler->get($downloads_fielddata[$j]->getVar('iddata'));
$fielddataHandler->delete($objfielddata) || $objvfielddata->getHtmlErrors();
}
}
// supression des commentaires
if ($downloadsArray[$i]->getVar('comments') > 0) {
xoops_comment_delete($xoopsModule->getVar('mid'), $downloadsArray[$i]->getVar('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', $downloadsArray[$i]->getVar('lid')));
$downloadsTags = $linkHandler->getAll($criteria);
if (count($downloadsTags) > 0) {
foreach (array_keys($downloadsTags) as $j) {
/** @var \XoopsModules\Tag\Link[] $downloadsTags */
$objtags = $linkHandler->get($downloadsTags[$j]->getVar('tl_id'));
$linkHandler->delete($objtags) || $objtags->getHtmlErrors();
}
}
}
// supression du fichier
// pour extraire le nom du fichier
$urlfile = substr_replace($downloadsArray[$i]->getVar('url'), '', 0, mb_strlen($uploadurl_downloads));
// chemin du fichier
$urlfile = $uploaddir_downloads . $urlfile;
if (is_file($urlfile)) {
chmod($urlfile, 0777);
unlink($urlfile);
}
// supression du téléchargment
$objdownloads = $downloadsHandler->get($downloadsArray[$i]->getVar('lid'));
$downloadsHandler->delete($objdownloads) || $objdownloads->getHtmlErrors();
}
// supression des sous catégories avec leurs téléchargements
$downloadscatArray = $categoryHandler->getAll();
$mytree = new Tree($downloadscatArray, 'cat_cid', 'cat_pid');
$downloads_childcat = $mytree->getAllChild($categoryId);
foreach (array_keys($downloads_childcat) as $i) {
/** @var \XoopsModules\Tdmdownloads\Category[] $downloads_childcat */
// supression de la catégorie
$objchild = $categoryHandler->get($downloads_childcat[$i]->getVar('cat_cid'));
$categoryHandler->delete($objchild) || $objchild->getHtmlErrors();
// supression des téléchargements associés
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('cid', $downloads_childcat[$i]->getVar('cat_cid')));
$downloadsArray = $downloadsHandler->getAll($criteria);
foreach (array_keys($downloadsArray) as $j) {
// supression des votes
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('lid', $downloadsArray[$j]->getVar('lid')));
$votedata = $ratingHandler->getAll($criteria);
foreach (array_keys($votedata) as $k) {
$objvotedata = $ratingHandler->get($votedata[$k]->getVar('ratingid'));
$ratingHandler->delete($objvotedata) || $objvotedata->getHtmlErrors();
}
// supression des rapports de fichier brisé
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('lid', $downloadsArray[$j]->getVar('lid')));
$downloads_broken = $brokenHandler->getAll($criteria);
foreach (array_keys($downloads_broken) as $k) {
$objbroken = $brokenHandler->get($downloads_broken[$k]->getVar('reportid'));
$brokenHandler->delete($objbroken) || $objbroken->getHtmlErrors();
}
// supression des data des champs sup.
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('lid', $downloadsArray[$j]->getVar('lid')));
$downloads_fielddata = $fielddataHandler->getAll($criteria);
foreach (array_keys($downloads_fielddata) as $k) {
$objfielddata = $fielddataHandler->get($downloads_fielddata[$k]->getVar('iddata'));
$fielddataHandler->delete($objfielddata) || $objvfielddata->getHtmlErrors();
}
// supression des commentaires
if ($downloadsArray[$j]->getVar('comments') > 0) {
xoops_comment_delete($xoopsModule->getVar('mid'), $downloadsArray[$j]->getVar('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', $downloadsArray[$j]->getVar('lid')));
$downloadsTags = $linkHandler->getAll($criteria);
if (count($downloadsTags) > 0) {
foreach (array_keys($downloadsTags) as $k) {
$objtags = $linkHandler->get($downloadsTags[$k]->getVar('tl_id'));
$linkHandler->delete($objtags) || $objtags->getHtmlErrors();
}
}
}
// supression du fichier
$urlfile = substr_replace($downloadsArray[$j]->getVar('url'), '', 0, mb_strlen($uploadurl_downloads)); // pour extraire le nom du fichier
$urlfile = $uploaddir_downloads . $urlfile; // chemin du fichier
if (is_file($urlfile)) {
chmod($urlfile, 0777);
unlink($urlfile);
}
// supression du téléchargment
$objdownloads = $downloadsHandler->get($downloadsArray[$j]->getVar('lid'));
$downloadsHandler->delete($objdownloads) || $objdownloads->getHtmlErrors();
}
}
if ($categoryHandler->delete($obj)) {
redirect_header('category.php', 1, _AM_TDMDOWNLOADS_REDIRECT_DELOK);
} else {
$GLOBALS['xoopsTpl']->assign('message_erreur', $obj->getHtmlErrors());
}
} else {
$message = '';
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('cid', $categoryId));
$downloadsArray = $downloadsHandler->getAll($criteria);
if (count($downloadsArray) > 0) {
$message .= _AM_TDMDOWNLOADS_DELDOWNLOADS . '<br>';
foreach (array_keys($downloadsArray) as $i) {
/** @var \XoopsModules\Tdmdownloads\Downloads[] $downloadsArray */
$message .= '<span style="color : #ff0000">' . $downloadsArray[$i]->getVar('title') . '</span><br>';
}
}
$downloadscatArray = $categoryHandler->getAll();
$mytree = new Tree($downloadscatArray, 'cat_cid', 'cat_pid');
$downloads_childcat = $mytree->getAllChild($categoryId);
if (count($downloads_childcat) > 0) {
$message .= _AM_TDMDOWNLOADS_DELSOUSCAT . ' <br><br>';
foreach (array_keys($downloads_childcat) as $i) {
/** @var \XoopsModules\Tdmdownloads\Category[] $downloads_childcat */
$message .= '<b><span style="color : #ff0000">' . $downloads_childcat[$i]->getVar('cat_title') . '</span></b><br>';
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('cid', $downloads_childcat[$i]->getVar('cat_cid')));
$downloadsArray = $downloadsHandler->getAll($criteria);
if (count($downloadsArray) > 0) {
$message .= _AM_TDMDOWNLOADS_DELDOWNLOADS . '<br>';
foreach (array_keys($downloadsArray) as $k) {
$message .= '<span style="color: #ff0000;">' . $downloadsArray[$k]->getVar('title') . '</span><br>';
}
}
}
} else {
$message .= '';
}
//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_CAT_LIST, 'category.php?op=list', 'list');
$adminObject->addItemButton(_AM_TDMDOWNLOADS_CAT_NEW, 'category.php?op=new_cat', 'add');
$GLOBALS['xoopsTpl']->assign('buttons', $adminObject->displayButton('left'));
xoops_confirm(
[
'ok' => 1,
'downloadscat_cid' => $categoryId,
'op' => 'del_cat',
],
$_SERVER['REQUEST_URI'],
sprintf(_AM_TDMDOWNLOADS_FORMSUREDEL, $obj->getVar('cat_title')) . '<br><br>' . $message
);
}
break;
// Pour sauver une catégorie
case 'save_cat':
if (!$GLOBALS['xoopsSecurity']->check()) {
redirect_header('category.php', 3, implode(',', $GLOBALS['xoopsSecurity']->getErrors()));
}
xoops_cp_header();
$cat_cid = \Xmf\Request::getInt('cat_cid', 0, 'POST');
if (0 !== $cat_cid) {
$obj = $categoryHandler->get($cat_cid);
} else {
$obj = $categoryHandler->create();
}
$erreur = false;
$errorMessage = '';
// Récupération des variables:
// Pour l'image
require_once XOOPS_ROOT_PATH . '/class/uploader.php';
$uploader = new \XoopsMediaUploader(
$uploaddir, [
'image/gif',
'image/jpeg',
'image/pjpeg',
'image/x-png',
'image/png',
], $helper->getConfig('maxuploadsize'), null, null
);
if ($uploader->fetchMedia($_POST['xoops_upload_file'][0])) {
$uploader->setPrefix('downloads_');
$uploader->fetchMedia($_POST['xoops_upload_file'][0]);
if ($uploader->upload()) {
$obj->setVar('cat_imgurl', $uploader->getSavedFileName());
} else {
$errors = $uploader->getErrors();
redirect_header('javascript:history.go(-1)', 3, $errors);
}
} else {
$obj->setVar('cat_imgurl', \Xmf\Request::getString('downloadscat_img', '', 'REQUEST'));
}
// Pour les autres variables
$obj->setVar('cat_pid', \Xmf\Request::getInt('cat_pid', 0, 'POST')); //$_POST['cat_pid']);
$obj->setVar('cat_title', \Xmf\Request::getString('cat_title', '', 'POST')); //$_POST['cat_title']);
$obj->setVar('cat_description_main', \Xmf\Request::getString('cat_description_main', '', 'POST')); //$_POST['cat_description_main']);
$obj->setVar('cat_weight', \Xmf\Request::getInt('cat_weight', 0, 'POST'));
if (\Xmf\Request::hasVar('cat_cid', 'REQUEST')) {
if ($cat_cid === \Xmf\Request::getInt('cat_pid', 0, 'POST')) {
$erreur = true;
$errorMessage .= _AM_TDMDOWNLOADS_ERREUR_CAT;
}
}
if (true === $erreur) {
$GLOBALS['xoopsTpl']->assign('message_erreur', $errorMessage);
} else {
if ($categoryHandler->insert($obj)) {
/** @var \XoopsModules\Tdmdownloads\Category $obj */
$newcat_cid = $obj->getNewEnreg($db);
//permission pour voir
$perm_id = \Xmf\Request::hasVar('cat_cid', 'POST') ? $cat_cid : $newcat_cid;
/** @var \XoopsGroupPermHandler $grouppermHandler */
$grouppermHandler = xoops_getHandler('groupperm');
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('gperm_itemid', $perm_id, '='));
$criteria->add(new \Criteria('gperm_modid', $xoopsModule->getVar('mid'), '='));
$criteria->add(new \Criteria('gperm_name', 'tdmdownloads_view', '='));
$grouppermHandler->deleteAll($criteria);
if (\Xmf\Request::hasVar('groups_view', 'POST')) {
foreach ($_POST['groups_view'] as $onegroup_id) {
$grouppermHandler->addRight('tdmdownloads_view', $perm_id, $onegroup_id, $xoopsModule->getVar('mid'));
}
}
//permission pour editer
$perm_id = \Xmf\Request::getInt('cat_cid', $newcat_cid, 'POST');
/** @var \XoopsGroupPermHandler $grouppermHandler */
$grouppermHandler = xoops_getHandler('groupperm');
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('gperm_itemid', $perm_id, '='));
$criteria->add(new \Criteria('gperm_modid', $xoopsModule->getVar('mid'), '='));
$criteria->add(new \Criteria('gperm_name', 'tdmdownloads_submit', '='));
$grouppermHandler->deleteAll($criteria);
if (\Xmf\Request::hasVar('groups_submit', 'POST')) {
foreach ($_POST['groups_submit'] as $onegroup_id) {
$grouppermHandler->addRight('tdmdownloads_submit', $perm_id, $onegroup_id, $xoopsModule->getVar('mid'));
}
}
//permission pour télécharger
if (1 == $helper->getConfig('permission_download')) {
$perm_id = \Xmf\Request::getInt('cat_cid', $newcat_cid, 'POST');
/** @var \XoopsGroupPermHandler $grouppermHandler */
$grouppermHandler = xoops_getHandler('groupperm');
$criteria = new \CriteriaCompo();
$criteria->add(new \Criteria('gperm_itemid', $perm_id, '='));
$criteria->add(new \Criteria('gperm_modid', $xoopsModule->getVar('mid'), '='));
$criteria->add(new \Criteria('gperm_name', 'tdmdownloads_download', '='));
$grouppermHandler->deleteAll($criteria);
if (\Xmf\Request::hasVar('groups_download', 'POST')) {
foreach ($_POST['groups_download'] as $onegroup_id) {
$grouppermHandler->addRight('tdmdownloads_download', $perm_id, $onegroup_id, $xoopsModule->getVar('mid'));
}
}
}
//notification
if (!\Xmf\Request::hasVar('categorie_modified', 'POST')) {
$tags = [];
$tags['CATEGORY_NAME'] = \Xmf\Request::getString('cat_title', '', 'POST');
$tags['CATEGORY_URL'] = XOOPS_URL . '/modules/' . $moduleDirName . '/viewcat.php?cid=' . $newcat_cid;
/** @var \XoopsNotificationHandler $notificationHandler */
$notificationHandler = xoops_getHandler('notification');
$notificationHandler->triggerEvent('global', 0, 'new_category', $tags);
}
redirect_header('category.php?op=list', 1, _AM_TDMDOWNLOADS_REDIRECT_SAVE);
}
$GLOBALS['xoopsTpl']->assign('message_erreur', $obj->getHtmlErrors());
}
$form = $obj->getForm();
$GLOBALS['xoopsTpl']->assign('themeForm', $form->render());
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';