From 0c93a5166b057518516943e99d107ac9ea2c83d7 Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Fri, 4 Mar 2022 10:21:45 +0100 Subject: [PATCH] admin_cronjobs form and admin/customer logger overview Signed-off-by: Michael Kaufmann --- admin_cronjobs.php | 28 ++---- admin_logger.php | 95 +++---------------- customer_logger.php | 92 ++---------------- lib/Froxlor/UI/Callbacks/SysLog.php | 28 ++++++ .../cronjobs/formfield.cronjobs_edit.php | 26 ++--- lib/tablelisting/tablelisting.syslog.php | 53 +++++++++++ 6 files changed, 123 insertions(+), 199 deletions(-) create mode 100644 lib/Froxlor/UI/Callbacks/SysLog.php create mode 100644 lib/tablelisting/tablelisting.syslog.php diff --git a/admin_cronjobs.php b/admin_cronjobs.php index 1fae1947..884b7f9b 100644 --- a/admin_cronjobs.php +++ b/admin_cronjobs.php @@ -66,30 +66,14 @@ if ($page == 'cronjobs' || $page == 'overview') { )); } else { - // interval - $interval_nfo = explode(' ', $result['interval']); - $interval_value = $interval_nfo[0]; - - $interval_interval = ''; - $interval_interval .= \Froxlor\UI\HTML::makeoption($lng['cronmgmt']['minutes'], 'MINUTE', $interval_nfo[1]); - $interval_interval .= \Froxlor\UI\HTML::makeoption($lng['cronmgmt']['hours'], 'HOUR', $interval_nfo[1]); - $interval_interval .= \Froxlor\UI\HTML::makeoption($lng['cronmgmt']['days'], 'DAY', $interval_nfo[1]); - $interval_interval .= \Froxlor\UI\HTML::makeoption($lng['cronmgmt']['weeks'], 'WEEK', $interval_nfo[1]); - $interval_interval .= \Froxlor\UI\HTML::makeoption($lng['cronmgmt']['months'], 'MONTH', $interval_nfo[1]); - // end of interval - - $change_cronfile = false; - if (substr($result['module'], 0, strpos($result['module'], '/')) != 'froxlor') { - $change_cronfile = true; - } - $cronjobs_edit_data = include_once dirname(__FILE__) . '/lib/formfields/admin/cronjobs/formfield.cronjobs_edit.php'; - $cronjobs_edit_form = \Froxlor\UI\HtmlForm::genHTMLForm($cronjobs_edit_data); - $title = $cronjobs_edit_data['cronjobs_edit']['title']; - $image = $cronjobs_edit_data['cronjobs_edit']['image']; - - eval("echo \"" . \Froxlor\UI\Template::getTemplate('cronjobs/cronjob_edit') . "\";"); + UI::twigBuffer('user/form.html.twig', [ + 'formaction' => $linker->getLink(array('section' => 'cronjobs', 'id' => $id)), + 'formdata' => $cronjobs_edit_data['cronjobs_edit'], + 'editid' => $id + ]); + UI::twigOutputBuffer(); } } } elseif ($action == 'delete' && $id != 0) { diff --git a/admin_logger.php b/admin_logger.php index b6e90399..ec40a21f 100644 --- a/admin_logger.php +++ b/admin_logger.php @@ -21,94 +21,29 @@ const AREA = 'admin'; require __DIR__ . '/lib/init.php'; use Froxlor\Api\Commands\SysLog; +use Froxlor\UI\Panel\UI; if ($page == 'log' && $userinfo['change_serversettings'] == '1') { if ($action == '') { - $fields = array( - 'date' => $lng['logger']['date'], - 'type' => $lng['logger']['type'], - 'user' => $lng['logger']['user'], - 'text' => $lng['logger']['action'] - ); try { - // get total count - $json_result = SysLog::getLocal($userinfo)->listingCount(); - $result = json_decode($json_result, true)['data']; - // initialize pagination and filtering - $paging = new \Froxlor\UI\Pagination($userinfo, $fields, $result); - // get list - $json_result = SysLog::getLocal($userinfo, $paging->getApiCommandParams())->listing(); + $syslog_list_data = include_once dirname(__FILE__) . '/lib/tablelisting/tablelisting.syslog.php'; + $collection = (new \Froxlor\UI\Collection(\Froxlor\Api\Commands\SysLog::class, $userinfo)) + ->addParam(['sql_orderby' => ['date' => 'DESC']]) + ->withPagination($syslog_list_data['syslog_list']['columns']); } catch (Exception $e) { \Froxlor\UI\Response::dynamic_error($e->getMessage()); } - $result = json_decode($json_result, true)['data']; - $sortcode = $paging->getHtmlSortCode($lng); - $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); - $searchcode = $paging->getHtmlSearchCode($lng); - $pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s); - $clog = array(); - foreach ($result['list'] as $row) { - if (! isset($clog[$row['action']]) || ! is_array($clog[$row['action']])) { - $clog[$row['action']] = array(); - } - $clog[$row['action']][$row['logid']] = $row; - } - - if ($paging->sortfield == 'date' && $paging->sortorder == 'desc') { - krsort($clog); - } else { - ksort($clog); - } - - $count = 0; - $log_count = 0; - $log = ''; - foreach ($clog as $action => $logrows) { - $_action = 0; - foreach ($logrows as $row) { - // if ($paging->checkDisplay($i)) { - $row = \Froxlor\PhpHelper::htmlentitiesArray($row); - $row['date'] = date("d.m.y H:i:s", $row['date']); - - if ($_action != $action) { - switch ($action) { - case \Froxlor\FroxlorLogger::USR_ACTION: - $_action = $lng['admin']['customer']; - break; - case \Froxlor\FroxlorLogger::RES_ACTION: - $_action = $lng['logger']['reseller']; - break; - case \Froxlor\FroxlorLogger::ADM_ACTION: - $_action = $lng['logger']['admin']; - break; - case \Froxlor\FroxlorLogger::CRON_ACTION: - $_action = $lng['logger']['cron']; - break; - case \Froxlor\FroxlorLogger::LOGIN_ACTION: - $_action = $lng['logger']['login']; - break; - case \Froxlor\FroxlorLogger::LOG_ERROR: - $_action = $lng['logger']['intern']; - break; - default: - $_action = $lng['logger']['unknown']; - break; - } - - $row['action'] = $_action; - eval("\$log.=\"" . \Froxlor\UI\Template::getTemplate('logger/logger_action') . "\";"); - } - - $log_count ++; - $row['type'] = \Froxlor\FroxlorLogger::getInstanceOf()->getLogLevelDesc($row['type']); - eval("\$log.=\"" . \Froxlor\UI\Template::getTemplate('logger/logger_log') . "\";"); - $count ++; - $_action = $action; - } - } - - eval("echo \"" . \Froxlor\UI\Template::getTemplate('logger/logger') . "\";"); + UI::twigBuffer('user/table.html.twig', [ + 'listing' => \Froxlor\UI\Listing::format($collection, $syslog_list_data['syslog_list']), + 'actions_links' => [[ + 'href' => $linker->getLink(['section' => 'logger', 'page' => 'log', 'action' => 'truncate']), + 'label' => $lng['logger']['truncate'], + 'icon' => 'fa-solid fa-recycle', + 'class' => 'btn-warning' + ]] + ]); + UI::twigOutputBuffer(); } elseif ($action == 'truncate') { if (isset($_POST['send']) && $_POST['send'] == 'send') { diff --git a/customer_logger.php b/customer_logger.php index 89cfb21f..04863261 100644 --- a/customer_logger.php +++ b/customer_logger.php @@ -19,8 +19,6 @@ const AREA = 'customer'; require __DIR__ . '/lib/init.php'; -use Froxlor\Api\Commands\SysLog; -use Froxlor\Database\Database; use Froxlor\Settings; use Froxlor\UI\Panel\UI; @@ -31,91 +29,17 @@ if (Settings::IsInList('panel.customer_hide_options', 'extras.logger')) { if ($page == 'log') { if ($action == '') { - $fields = array( - 'date' => $lng['logger']['date'], - 'type' => $lng['logger']['type'], - 'user' => $lng['logger']['user'], - 'text' => $lng['logger']['action'] - ); try { - // get total count - $json_result = SysLog::getLocal($userinfo)->listingCount(); - $result = json_decode($json_result, true)['data']; - // initialize pagination and filtering - $paging = new \Froxlor\UI\Pagination($userinfo, $fields, $result); - // get list - $json_result = SysLog::getLocal($userinfo, $paging->getApiCommandParams())->listing(); + $syslog_list_data = include_once dirname(__FILE__) . '/lib/tablelisting/tablelisting.syslog.php'; + $collection = (new \Froxlor\UI\Collection(\Froxlor\Api\Commands\SysLog::class, $userinfo)) + ->addParam(['sql_orderby' => ['date' => 'DESC']]) + ->withPagination($syslog_list_data['syslog_list']['columns']); } catch (Exception $e) { \Froxlor\UI\Response::dynamic_error($e->getMessage()); } - $result = json_decode($json_result, true)['data']; - $sortcode = $paging->getHtmlSortCode($lng); - $arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s); - $searchcode = $paging->getHtmlSearchCode($lng); - $pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s); - $clog = array(); - - foreach ($result['list'] as $row) { - - if (! isset($clog[$row['action']]) || ! is_array($clog[$row['action']])) { - $clog[$row['action']] = array(); - } - $clog[$row['action']][$row['logid']] = $row; - } - - if ($paging->sortfield == 'date' && $paging->sortorder == 'desc') { - krsort($clog); - } else { - ksort($clog); - } - - $count = 0; - $log_count = 0; - $log = ''; - foreach ($clog as $action => $logrows) { - $_action = 0; - foreach ($logrows as $row) { - // if ($paging->checkDisplay($i)) { - $row = \Froxlor\PhpHelper::htmlentitiesArray($row); - $row['date'] = date("d.m.y H:i:s", $row['date']); - - if ($_action != $action) { - switch ($action) { - case \Froxlor\FroxlorLogger::USR_ACTION: - $_action = $lng['admin']['customer']; - break; - case \Froxlor\FroxlorLogger::RES_ACTION: - $_action = $lng['logger']['reseller']; - break; - case \Froxlor\FroxlorLogger::ADM_ACTION: - $_action = $lng['logger']['admin']; - break; - case \Froxlor\FroxlorLogger::CRON_ACTION: - $_action = $lng['logger']['cron']; - break; - case \Froxlor\FroxlorLogger::LOGIN_ACTION: - $_action = $lng['logger']['login']; - break; - case \Froxlor\FroxlorLogger::LOG_ERROR: - $_action = $lng['logger']['intern']; - break; - default: - $_action = $lng['logger']['unknown']; - break; - } - - $row['action'] = $_action; - eval("\$log.=\"" . \Froxlor\UI\Template::getTemplate('logger/logger_action') . "\";"); - } - - $log_count ++; - $row['type'] = \Froxlor\FroxlorLogger::getInstanceOf()->getLogLevelDesc($row['type']); - eval("\$log.=\"" . \Froxlor\UI\Template::getTemplate('logger/logger_log') . "\";"); - $count ++; - $_action = $action; - } - } - - eval("echo \"" . \Froxlor\UI\Template::getTemplate('logger/logger') . "\";"); + UI::twigBuffer('user/table.html.twig', [ + 'listing' => \Froxlor\UI\Listing::format($collection, $syslog_list_data['syslog_list']) + ]); + UI::twigOutputBuffer(); } } diff --git a/lib/Froxlor/UI/Callbacks/SysLog.php b/lib/Froxlor/UI/Callbacks/SysLog.php new file mode 100644 index 00000000..52cc12b0 --- /dev/null +++ b/lib/Froxlor/UI/Callbacks/SysLog.php @@ -0,0 +1,28 @@ + (2010-) + * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt + * @package Froxlor\UI\Callbacks + * + */ +class SysLog +{ + + public static function typeDescription(array $attributes): string + { + return FroxlorLogger::getInstanceOf()->getLogLevelDesc($attributes['data']); + } +} diff --git a/lib/formfields/admin/cronjobs/formfield.cronjobs_edit.php b/lib/formfields/admin/cronjobs/formfield.cronjobs_edit.php index 75607699..28c37ecd 100644 --- a/lib/formfields/admin/cronjobs/formfield.cronjobs_edit.php +++ b/lib/formfields/admin/cronjobs/formfield.cronjobs_edit.php @@ -17,7 +17,7 @@ return array( 'cronjobs_edit' => array( 'title' => $lng['admin']['cronjob_edit'], - 'image' => 'icons/clock_edit.png', + 'image' => 'fa-solid fa-clock-rotate-left', 'sections' => array( 'section_a' => array( 'title' => $lng['cronjob']['cronjobsettings'], @@ -25,31 +25,31 @@ return array( 'fields' => array( 'cronfile' => array( 'label' => 'Cronjob', - 'type' => ($change_cronfile == 1 ? 'text' : 'label'), + 'type' => (substr($result['module'], 0, strpos($result['module'], '/')) != 'froxlor' ? 'text' : 'label'), 'value' => $result['cronfile'] ), 'isactive' => array( 'label' => $lng['admin']['activated'], 'type' => 'checkbox', - 'values' => array( - array( - 'label' => $lng['panel']['yes'], - 'value' => '1' - ) - ), - 'value' => array( - $result['isactive'] - ) + 'value' => '1', + 'checked' => $result['isactive'] ), 'interval_value' => array( 'label' => $lng['cronjob']['cronjobintervalv'], 'type' => 'text', - 'value' => $interval_value + 'value' => explode(' ', $result['interval'] ?? "5 MINUTE")[0] ?? "" ), 'interval_interval' => array( 'label' => $lng['cronjob']['cronjobinterval'], 'type' => 'select', - 'select_var' => $interval_interval + 'select_var' => [ + 'MINUTE' => $lng['cronmgmt']['minutes'], + 'HOUR' => $lng['cronmgmt']['hours'], + 'DAY' => $lng['cronmgmt']['days'], + 'WEEK' => $lng['cronmgmt']['weeks'], + 'MONTH' => $lng['cronmgmt']['months'] + ], + 'selected' => explode(' ', $result['interval'] ?? "5 MINUTE")[1] ?? null ) ) ) diff --git a/lib/tablelisting/tablelisting.syslog.php b/lib/tablelisting/tablelisting.syslog.php new file mode 100644 index 00000000..23037be8 --- /dev/null +++ b/lib/tablelisting/tablelisting.syslog.php @@ -0,0 +1,53 @@ + (2010-) + * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt + * @package Tabellisting + * + */ + +use Froxlor\UI\Callbacks\Text; +use Froxlor\UI\Callbacks\SysLog; +use Froxlor\UI\Listing; + +return [ + 'syslog_list' => [ + 'title' => $lng['menue']['logger']['logger'], + 'icon' => 'fa-solid fa-file-lines', + 'columns' => [ + 'date' => [ + 'label' => $lng['logger']['date'], + 'field' => 'date', + 'callback' => [Text::class, 'timestamp'], + ], + 'type' => [ + 'label' => $lng['logger']['type'], + 'field' => 'type', + 'callback' => [SysLog::class, 'typeDescription'], + ], + 'user' => [ + 'label' => $lng['logger']['user'], + 'field' => 'user', + ], + 'text' => [ + 'label' => $lng['logger']['action'], + 'field' => 'text', + ] + ], + 'visible_columns' => Listing::getVisibleColumnsForListing('syslog_list', [ + 'date', + 'type', + 'user', + 'text' + ]) + ] +];