admin/category.php
<?php declare(strict_types=1);
use Xmf\Module\Admin;
use Xmf\Request;
use XoopsModules\Songlist\{
Form\FormController,
Helper,
Category,
CategoryHandler,
Uploader
};
/** @var Category $category */
require __DIR__ . '/header.php';
xoops_loadLanguage('admin', 'songlist');
xoops_cp_header();
$op = Request::getString('op', 'category', 'REQUEST');
$fct = Request::getString('fct', 'list', 'REQUEST');
$limit = Request::getInt('limit', 30, 'REQUEST');
$start = Request::getInt('start', 0, 'REQUEST');
$order = Request::getString('order', 'DESC', 'REQUEST');
$sort = Request::getString('sort', 'created', 'REQUEST');
$filter = Request::getString('filter', '1,1', 'REQUEST');
switch ($op) {
default:
case 'category':
switch ($fct) {
default:
case 'list':
$adminObject = Admin::getInstance();
$adminObject->displayNavigation(basename(__FILE__));
/** @var CategoryHandler $categoryHandler */
$categoryHandler = Helper::getInstance()->getHandler('Category');
$criteria = $categoryHandler->getFilterCriteria($GLOBALS['filter']);
$ttl = $categoryHandler->getCount($criteria);
$GLOBALS['sort'] = Request::getString('sort', 'created', 'REQUEST');;
$pagenav = new \XoopsPageNav($ttl, $GLOBALS['limit'], $GLOBALS['start'], 'start', 'limit=' . $GLOBALS['limit'] . '&sort=' . $GLOBALS['sort'] . '&order=' . $GLOBALS['order'] . '&op=' . $GLOBALS['op'] . '&fct=' . $GLOBALS['fct'] . '&filter=' . $GLOBALS['filter']);
$GLOBALS['xoopsTpl']->assign('pagenav', $pagenav->renderNav());
foreach ($categoryHandler->filterFields() as $id => $key) {
$GLOBALS['xoopsTpl']->assign(
\mb_strtolower(str_replace('-', '_', $key) . '_th'),
'<a href="'
. $_SERVER['SCRIPT_NAME']
. '?start='
. $GLOBALS['start']
. '&limit='
. $GLOBALS['limit']
. '&sort='
. $key
. '&order='
. (($key == $GLOBALS['sort']) ? ('DESC' === $GLOBALS['order'] ? 'ASC' : 'DESC') : $GLOBALS['order'])
. '&op='
. $GLOBALS['op']
. '&filter='
. $GLOBALS['filter']
. '">'
. (defined('_AM_SONGLIST_TH_' . \mb_strtoupper(str_replace('-', '_', $key))) ? constant('_AM_SONGLIST_TH_' . \mb_strtoupper(str_replace('-', '_', $key))) : '_AM_SONGLIST_TH_' . \mb_strtoupper(str_replace('-', '_', $key)))
. '</a>'
);
$GLOBALS['xoopsTpl']->assign('filter_' . \mb_strtolower(str_replace('-', '_', $key)) . '_th', $categoryHandler->getFilterForm($GLOBALS['filter'], $key, $GLOBALS['sort'], $GLOBALS['op'], $GLOBALS['fct']));
}
$GLOBALS['xoopsTpl']->assign('limit', $GLOBALS['limit']);
$GLOBALS['xoopsTpl']->assign('start', $GLOBALS['start']);
$GLOBALS['xoopsTpl']->assign('order', $GLOBALS['order']);
$GLOBALS['xoopsTpl']->assign('sort', $GLOBALS['sort']);
$GLOBALS['xoopsTpl']->assign('filter', $GLOBALS['filter']);
$GLOBALS['xoopsTpl']->assign('xoConfig', $GLOBALS['songlistModuleConfig']);
$criteria->setStart($GLOBALS['start']);
$criteria->setLimit($GLOBALS['limit']);
$criteria->setSort('`' . $GLOBALS['sort'] . '`');
$criteria->setOrder($GLOBALS['order']);
$categorys = $categoryHandler->getObjects($criteria, true);
foreach ($categorys as $cid => $category) {
if (is_object($category)) {
$GLOBALS['xoopsTpl']->append('categories', $category->toArray());
}
}
$GLOBALS['xoopsTpl']->assign('form', FormController::getFormCategory(false));
$GLOBALS['xoopsTpl']->assign('php_self', $_SERVER['SCRIPT_NAME']);
$GLOBALS['xoopsTpl']->display('db:songlist_cpanel_category_list.tpl');
break;
case 'new':
case 'edit':
$adminObject = Admin::getInstance();
$adminObject->displayNavigation(basename(__FILE__));
$categoryHandler = Helper::getInstance()->getHandler('Category');
if (Request::hasVar('id', 'REQUEST')) {
$category = $categoryHandler->get(Request::getInt('id', 0, 'REQUEST'));
} else {
$category = $categoryHandler->create();
}
$GLOBALS['xoopsTpl']->assign('form', $category->getForm());
$GLOBALS['xoopsTpl']->assign('php_self', $_SERVER['SCRIPT_NAME']);
$GLOBALS['xoopsTpl']->display('db:songlist_cpanel_category_edit.tpl');
break;
case 'save':
$categoryHandler = Helper::getInstance()->getHandler('Category');
$id = 0;
$id = Request::getInt('id', 0, 'REQUEST');
if ($id) {
$category = $categoryHandler->get($id);
} else {
$category = $categoryHandler->create();
}
$category->setVars($_POST[$id]);
if (!$id = $categoryHandler->insert($category)) {
redirect_header($_SERVER['SCRIPT_NAME'] . '?op=' . $GLOBALS['op'] . '&fct=list&limit=' . $GLOBALS['limit'] . '&start=' . $GLOBALS['start'] . '&order=' . $GLOBALS['order'] . '&sort=' . $GLOBALS['sort'] . '&filter=' . $GLOBALS['filter'], 10, _AM_SONGLIST_MSG_CATEGORY_FAILEDTOSAVE);
exit(0);
}
if (Request::hasVar('image', 'FILES') && !empty($_FILES['image']['name'])) {
// if (!is_dir($GLOBALS['xoops']->path($GLOBALS['songlistModuleConfig']['upload_areas']))) {
// foreach (explode('\\', $GLOBALS['xoops']->path($GLOBALS['songlistModuleConfig']['upload_areas'])) as $folders) {
// foreach (explode('/', $folders) as $folder) {
// $path .= DS . $folder;
// if (!mkdir($path, 0777) && !is_dir($path)) {
// throw new \RuntimeException(sprintf('Directory "%s" was not created', $path));
// }
// }
// }
// }
// require_once $GLOBALS['xoops']->path('modules/songlist/include/uploader.php');
$category = $categoryHandler->get($id);
$uploader = new Uploader(
$GLOBALS['xoops']->path($GLOBALS['songlistModuleConfig']['upload_areas']),
explode('|', $GLOBALS['songlistModuleConfig']['allowed_mimetype']),
$GLOBALS['songlistModuleConfig']['filesize_upload'],
0,
0,
explode('|', $GLOBALS['songlistModuleConfig']['allowed_extensions'])
);
try {
$uploader->setPrefix(mb_substr(md5((string)microtime(true)), random_int(0, 20), 13));
} catch (Exception $e) {
}
if ($uploader->fetchMedia('image')) {
if (!$uploader->upload()) {
$adminObject = Admin::getInstance();
$adminObject->displayNavigation(basename(__FILE__));
echo $uploader->getErrors();
require __DIR__ . '/admin_footer.php';
exit(0);
}
if (mb_strlen($category->getVar('image'))) {
unlink($GLOBALS['xoops']->path($category->getVar('path')) . $category->getVar('image'));
}
$category->setVar('path', $GLOBALS['songlistModuleConfig']['upload_areas']);
$category->setVar('image', $uploader->getSavedFileName());
@$categoryHandler->insert($category);
} else {
$adminObject = Admin::getInstance();
$adminObject->displayNavigation(basename(__FILE__));
echo $uploader->getErrors();
require __DIR__ . '/admin_footer.php';
exit(0);
}
}
if ('new' === $_REQUEST['state'][$_REQUEST['id']]) {
redirect_header(
$_SERVER['SCRIPT_NAME'] . '?op=' . $GLOBALS['op'] . '&fct=edit&id=' . $_REQUEST['id'] . '&limit=' . $GLOBALS['limit'] . '&start=' . $GLOBALS['start'] . '&order=' . $GLOBALS['order'] . '&sort=' . $GLOBALS['sort'] . '&filter=' . $GLOBALS['filter'],
10,
_AM_SONGLIST_MSG_CATEGORY_SAVEDOKEY
);
} else {
redirect_header($_SERVER['SCRIPT_NAME'] . '?op=' . $GLOBALS['op'] . '&fct=list&limit=' . $GLOBALS['limit'] . '&start=' . $GLOBALS['start'] . '&order=' . $GLOBALS['order'] . '&sort=' . $GLOBALS['sort'] . '&filter=' . $GLOBALS['filter'], 10, _AM_SONGLIST_MSG_CATEGORY_SAVEDOKEY);
}
exit(0);
case 'savelist':
$categoryHandler = Helper::getInstance()->getHandler('Category');
foreach ($_REQUEST['id'] as $id) {
$category = $categoryHandler->get($id);
$category->setVars($_POST[$id]);
if (!$categoryHandler->insert($category)) {
redirect_header(
$_SERVER['SCRIPT_NAME'] . '?op=' . $GLOBALS['op'] . '&fct=list&limit=' . $GLOBALS['limit'] . '&start=' . $GLOBALS['start'] . '&order=' . $GLOBALS['order'] . '&sort=' . $GLOBALS['sort'] . '&filter=' . $GLOBALS['filter'],
10,
_AM_SONGLIST_MSG_CATEGORY_FAILEDTOSAVE
);
exit(0);
}
}
redirect_header($_SERVER['SCRIPT_NAME'] . '?op=' . $GLOBALS['op'] . '&fct=list&limit=' . $GLOBALS['limit'] . '&start=' . $GLOBALS['start'] . '&order=' . $GLOBALS['order'] . '&sort=' . $GLOBALS['sort'] . '&filter=' . $GLOBALS['filter'], 10, _AM_SONGLIST_MSG_CATEGORY_SAVEDOKEY);
exit(0);
case 'delete':
$categoryHandler = Helper::getInstance()->getHandler('Category');
$id = 0;
if (Request::hasVar('id', 'POST') && $id = Request::getInt('id', 0, 'POST')) {
$category = $categoryHandler->get($id);
if (!$categoryHandler->delete($category)) {
redirect_header(
$_SERVER['SCRIPT_NAME'] . '?op=' . $GLOBALS['op'] . '&fct=list&limit=' . $GLOBALS['limit'] . '&start=' . $GLOBALS['start'] . '&order=' . $GLOBALS['order'] . '&sort=' . $GLOBALS['sort'] . '&filter=' . $GLOBALS['filter'],
10,
_AM_SONGLIST_MSG_CATEGORY_FAILEDTODELETE
);
exit(0);
}
redirect_header($_SERVER['SCRIPT_NAME'] . '?op=' . $GLOBALS['op'] . '&fct=list&limit=' . $GLOBALS['limit'] . '&start=' . $GLOBALS['start'] . '&order=' . $GLOBALS['order'] . '&sort=' . $GLOBALS['sort'] . '&filter=' . $GLOBALS['filter'], 10, _AM_SONGLIST_MSG_CATEGORY_DELETED);
exit(0);
}
$category = $categoryHandler->get(Request::getInt('id', 0, 'REQUEST'));
xoops_confirm(
['id' => $_REQUEST['id'], 'op' => $_REQUEST['op'], 'fct' => $_REQUEST['fct'], 'limit' => $_REQUEST['limit'], 'start' => $_REQUEST['start'], 'order' => $_REQUEST['order'], 'sort' => $_REQUEST['sort'], 'filter' => $_REQUEST['filter']],
$_SERVER['SCRIPT_NAME'],
sprintf(_AM_SONGLIST_MSG_CATEGORY_DELETE, $category->getVar('name'))
);
break;
}
}
xoops_cp_footer();