additional removes for new language mgmt; combined pre-requirement checks for cli commands; removed updaters for 0.9.x and 0.10.x (the last 0.10.x will be upgradable to 0.11.x of course)
Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
This commit is contained in:
48
lib/Froxlor/Cli/CliCommand.php
Normal file
48
lib/Froxlor/Cli/CliCommand.php
Normal file
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This file is part of the Froxlor project.
|
||||
* Copyright (c) 2010 the Froxlor Team (see authors).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* 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. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you can also view it online at
|
||||
* http://files.froxlor.org/misc/COPYING.txt
|
||||
*
|
||||
* @copyright the authors
|
||||
* @author Froxlor team <team@froxlor.org>
|
||||
* @license http://files.froxlor.org/misc/COPYING.txt GPLv2
|
||||
*/
|
||||
|
||||
namespace Froxlor\Cli;
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Froxlor\Froxlor;
|
||||
|
||||
class CliCommand extends Command
|
||||
{
|
||||
|
||||
protected function validateRequirements(InputInterface $input, OutputInterface $output): int
|
||||
{
|
||||
if (!file_exists(Froxlor::getInstallDir() . '/lib/userdata.inc.php')) {
|
||||
$output->writeln("<error>Could not find froxlor's userdata.inc.php file. You should use this script only with an installed froxlor system.</>");
|
||||
return self::INVALID;
|
||||
}
|
||||
if (Froxlor::hasUpdates() || Froxlor::hasDbUpdates()) {
|
||||
$output->writeln("<error>It seems that the froxlor files have been updated. Please login and finish the update procedure.</>");
|
||||
return self::INVALID;
|
||||
}
|
||||
return self::SUCCESS;
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,30 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This file is part of the Froxlor project.
|
||||
* Copyright (c) 2010 the Froxlor Team (see authors).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* 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. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you can also view it online at
|
||||
* http://files.froxlor.org/misc/COPYING.txt
|
||||
*
|
||||
* @copyright the authors
|
||||
* @author Froxlor team <team@froxlor.org>
|
||||
* @license http://files.froxlor.org/misc/COPYING.txt GPLv2
|
||||
*/
|
||||
|
||||
namespace Froxlor\Cli;
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
@@ -15,21 +37,7 @@ use Froxlor\SImExporter;
|
||||
use Froxlor\Database\Database;
|
||||
use Froxlor\Config\ConfigParser;
|
||||
|
||||
/**
|
||||
* This file is part of the Froxlor project.
|
||||
* Copyright (c) 2022 the Froxlor Team (see authors).
|
||||
*
|
||||
* For the full copyright and license information, please view the COPYING
|
||||
* file that was distributed with this source code. You can also view the
|
||||
* COPYING file online at http://files.froxlor.org/misc/COPYING.txt
|
||||
*
|
||||
* @copyright (c) the authors
|
||||
* @author Froxlor team <team@froxlor.org> (2018-)
|
||||
* @license GPLv2 http://files.froxlor.org/misc/COPYING.txt
|
||||
* @package Cron
|
||||
*
|
||||
*/
|
||||
final class ConfigServices extends Command
|
||||
final class ConfigServices extends CliCommand
|
||||
{
|
||||
|
||||
protected function configure()
|
||||
@@ -37,33 +45,37 @@ final class ConfigServices extends Command
|
||||
$this->setName('froxlor:config-services');
|
||||
$this->setDescription('Configure system services');
|
||||
$this->addOption('create', 'c', InputOption::VALUE_NONE, 'Create a services list configuration for the --apply option.')
|
||||
->addOption('apply', 'a', InputOption::VALUE_REQUIRED, 'Configure your services by given configuration file. To create one run the command with the --create option.')
|
||||
->addOption('apply', 'a', InputOption::VALUE_REQUIRED, 'Configure your services by given configuration file/string. To create one run the command with the --create option.')
|
||||
->addOption('list', 'l', InputOption::VALUE_NONE, 'Output the services that are going to be configured using a given config file (--apply option). No services will be configured.')
|
||||
->addOption('daemon', 'd', InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'When used with --apply you can specify one or multiple daemons. These will be the only services that get configured.')
|
||||
->addOption('import-settings', 'i', InputOption::VALUE_REQUIRED, 'Import settings from another froxlor installation. This can be done standalone or in addition to --apply.');
|
||||
->addOption('import-settings', 'i', InputOption::VALUE_REQUIRED, 'Import settings from another froxlor installation. This can be done standalone or in addition to --apply.')
|
||||
->addOption('yes-to-all', 'A', InputOption::VALUE_NONE, 'Install packages without asking questions');
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
global $lng;
|
||||
|
||||
if (!file_exists(Froxlor::getInstallDir() . '/lib/userdata.inc.php')) {
|
||||
$output->writeln("<error>Could not find froxlor's userdata.inc.php file. You should use this script only with an installed froxlor system.</>");
|
||||
$result = self::SUCCESS;
|
||||
|
||||
$result = $this->validateRequirements($input, $output);
|
||||
|
||||
if ($result == self::SUCCESS && $input->getOption('import-settings') == false && $input->getOption('create') == false && $input->getOption('apply') == false) {
|
||||
$output->writeln('<error>No option given to do something, exiting.</>');
|
||||
return self::INVALID;
|
||||
}
|
||||
|
||||
if ($input->getOption('import-settings') == false && $input->getOption('create') == false && $input->getOption('apply') == false) {
|
||||
$output->writeln('<error>No option given to do something, exiting.</>');
|
||||
return self::INVALID;
|
||||
if ($result == self::SUCCESS && $input->getOption('yes-to-all')) {
|
||||
putenv("DEBIAN_FRONTEND=noninteractive");
|
||||
exec("echo 'APT::Get::Assume-Yes \"true\";' > /tmp/_tmp_apt.conf");
|
||||
putenv("APT_CONFIG=/tmp/_tmp_apt.conf");
|
||||
}
|
||||
|
||||
include_once Froxlor::getInstallDir() . 'lng/english.lng.php';
|
||||
include_once Froxlor::getInstallDir() . 'lng/lng_references.php';
|
||||
|
||||
$result = self::SUCCESS;
|
||||
|
||||
// import settings if given
|
||||
if ($input->getOption('import-settings')) {
|
||||
if ($result == self::SUCCESS && $input->getOption('import-settings')) {
|
||||
$result = $this->importSettings($input, $output);
|
||||
}
|
||||
|
||||
@@ -79,6 +91,12 @@ final class ConfigServices extends Command
|
||||
}
|
||||
}
|
||||
|
||||
if ($input->getOption('yes-to-all')) {
|
||||
putenv("DEBIAN_FRONTEND");
|
||||
unlink("/tmp/_tmp_apt.conf");
|
||||
putenv("APT_CONFIG");
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
@@ -112,7 +130,7 @@ final class ConfigServices extends Command
|
||||
// get configparser object
|
||||
$dist = new ConfigParser($_distribution);
|
||||
// get distro-info
|
||||
$dist_display = $this->getCompleteDistroName($dist);
|
||||
$dist_display = $dist->getCompleteDistroName();
|
||||
// store in tmp array
|
||||
$distributions_select_data[$dist_display] = str_replace(".xml", "", strtolower(basename($_distribution)));
|
||||
|
||||
@@ -152,6 +170,10 @@ final class ConfigServices extends Command
|
||||
$default_daemon = "";
|
||||
$table_rows = [];
|
||||
$valid_options = [];
|
||||
if ($si != 'system') {
|
||||
$table_rows[] = ['x', 'No'];
|
||||
$valid_options[] = 'x';
|
||||
}
|
||||
foreach ($daemons as $di => $dd) {
|
||||
$title = $dd->title;
|
||||
if ($dd->default) {
|
||||
@@ -161,10 +183,6 @@ final class ConfigServices extends Command
|
||||
$table_rows[] = [$di, $title];
|
||||
$valid_options[] = $di;
|
||||
}
|
||||
if ($si != 'system') {
|
||||
$table_rows[] = ['x', 'No'];
|
||||
$valid_options[] = 'x';
|
||||
}
|
||||
$io->table(
|
||||
['Value', 'Name'],
|
||||
$table_rows
|
||||
@@ -213,28 +231,37 @@ final class ConfigServices extends Command
|
||||
{
|
||||
$applyFile = $input->getOption('apply');
|
||||
|
||||
if (strtoupper(substr($applyFile, 0, 4)) == 'HTTP') {
|
||||
$output->writeln("Config file seems to be an URL, trying to download");
|
||||
$target = "/tmp/froxlor-config-" . time() . ".json";
|
||||
if (@file_exists($target)) {
|
||||
@unlink($target);
|
||||
}
|
||||
$this->downloadFile($applyFile, $target);
|
||||
$applyFile = $target;
|
||||
}
|
||||
if (!is_file($applyFile)) {
|
||||
$output->writeln('<error>Given config file is not a file</>');
|
||||
return self::INVALID;
|
||||
} elseif (!file_exists($applyFile)) {
|
||||
$output->writeln('<error>Given config file cannot be found (' . $applyFile . ')</>');
|
||||
return self::INVALID;
|
||||
} elseif (!is_readable($applyFile)) {
|
||||
$output->writeln('<error>Given config file cannot be read (' . $applyFile . ')</>');
|
||||
return self::INVALID;
|
||||
// check if plain JSON
|
||||
$decoded_config = json_decode($applyFile);
|
||||
$skipFileCheck = false;
|
||||
if (json_last_error() == JSON_ERROR_NONE) {
|
||||
$skipFileCheck = true;
|
||||
}
|
||||
|
||||
$config = file_get_contents($applyFile);
|
||||
$decoded_config = json_decode($config, true);
|
||||
if (!$skipFileCheck) {
|
||||
if (strtoupper(substr($applyFile, 0, 4)) == 'HTTP') {
|
||||
$output->writeln("Config file seems to be an URL, trying to download");
|
||||
$target = "/tmp/froxlor-config-" . time() . ".json";
|
||||
if (@file_exists($target)) {
|
||||
@unlink($target);
|
||||
}
|
||||
$this->downloadFile($applyFile, $target);
|
||||
$applyFile = $target;
|
||||
}
|
||||
if (!is_file($applyFile)) {
|
||||
$output->writeln('<error>Given config file is not a file</>');
|
||||
return self::INVALID;
|
||||
} elseif (!file_exists($applyFile)) {
|
||||
$output->writeln('<error>Given config file cannot be found (' . $applyFile . ')</>');
|
||||
return self::INVALID;
|
||||
} elseif (!is_readable($applyFile)) {
|
||||
$output->writeln('<error>Given config file cannot be read (' . $applyFile . ')</>');
|
||||
return self::INVALID;
|
||||
}
|
||||
|
||||
$config = file_get_contents($applyFile);
|
||||
$decoded_config = json_decode($config, true);
|
||||
}
|
||||
|
||||
if ($input->getOption('list') != false) {
|
||||
$table_rows = [];
|
||||
@@ -416,22 +443,6 @@ final class ConfigServices extends Command
|
||||
return $replace_arr;
|
||||
}
|
||||
|
||||
private function getCompleteDistroName($cparser)
|
||||
{
|
||||
// get distro-info
|
||||
$dist_display = $cparser->distributionName;
|
||||
if ($cparser->distributionCodename != '') {
|
||||
$dist_display .= " " . $cparser->distributionCodename;
|
||||
}
|
||||
if ($cparser->distributionVersion != '') {
|
||||
$dist_display .= " (" . $cparser->distributionVersion . ")";
|
||||
}
|
||||
if ($cparser->deprecated) {
|
||||
$dist_display .= " [deprecated]";
|
||||
}
|
||||
return $dist_display;
|
||||
}
|
||||
|
||||
private function importSettings(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$importFile = $input->getOption('import-settings');
|
||||
|
||||
@@ -1,8 +1,30 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This file is part of the Froxlor project.
|
||||
* Copyright (c) 2010 the Froxlor Team (see authors).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* 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. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you can also view it online at
|
||||
* http://files.froxlor.org/misc/COPYING.txt
|
||||
*
|
||||
* @copyright the authors
|
||||
* @author Froxlor team <team@froxlor.org>
|
||||
* @license http://files.froxlor.org/misc/COPYING.txt GPLv2
|
||||
*/
|
||||
|
||||
namespace Froxlor\Cli;
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
@@ -11,21 +33,7 @@ use Froxlor\FileDir;
|
||||
use Froxlor\Settings;
|
||||
use Froxlor\Database\Database;
|
||||
|
||||
/**
|
||||
* This file is part of the Froxlor project.
|
||||
* Copyright (c) 2022 the Froxlor Team (see authors).
|
||||
*
|
||||
* For the full copyright and license information, please view the COPYING
|
||||
* file that was distributed with this source code. You can also view the
|
||||
* COPYING file online at http://files.froxlor.org/misc/COPYING.txt
|
||||
*
|
||||
* @copyright (c) the authors
|
||||
* @author Froxlor team <team@froxlor.org> (2018-)
|
||||
* @license GPLv2 http://files.froxlor.org/misc/COPYING.txt
|
||||
* @package Cron
|
||||
*
|
||||
*/
|
||||
final class PhpSessionclean extends Command
|
||||
final class PhpSessionclean extends CliCommand
|
||||
{
|
||||
|
||||
protected function configure()
|
||||
@@ -37,23 +45,24 @@ final class PhpSessionclean extends Command
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
if (!file_exists(Froxlor::getInstallDir() . '/lib/userdata.inc.php')) {
|
||||
$output->writeln("<error>Could not find froxlor's userdata.inc.php file. You should use this script only with an installed froxlor system.</>");
|
||||
return self::INVALID;
|
||||
}
|
||||
$result = $this->validateRequirements($input, $output);
|
||||
|
||||
if ((int) Settings::Get('phpfpm.enabled') == 1) {
|
||||
if ($input->hasArgument('max-lifetime') && is_numeric($input->getArgument('max-lifetime')) && $input->getArgument('max-lifetime') > 0) {
|
||||
$this->cleanSessionfiles((int)$input->getArgument('max-lifetime'));
|
||||
if ($result == self::SUCCESS) {
|
||||
if ((int) Settings::Get('phpfpm.enabled') == 1) {
|
||||
if ($input->hasArgument('max-lifetime') && is_numeric($input->getArgument('max-lifetime')) && $input->getArgument('max-lifetime') > 0) {
|
||||
$this->cleanSessionfiles((int)$input->getArgument('max-lifetime'));
|
||||
} else {
|
||||
// use default max-lifetime value
|
||||
$this->cleanSessionfiles();
|
||||
}
|
||||
$result = self::SUCCESS;
|
||||
} else {
|
||||
// use default max-lifetime value
|
||||
$this->cleanSessionfiles();
|
||||
// php-fpm not enabled
|
||||
$output->writeln('<comment>PHP-FPM not enabled for this installation.</comment>');
|
||||
$result = self::INVALID;
|
||||
}
|
||||
return self::SUCCESS;
|
||||
}
|
||||
// php-fpm not enabled
|
||||
$output->writeln('<comment>PHP-FPM not enabled for this installation.</comment>');
|
||||
return self::INVALID;
|
||||
return $result;
|
||||
}
|
||||
|
||||
private function cleanSessionfiles(int $maxlifetime = 1440)
|
||||
|
||||
@@ -1,30 +1,37 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This file is part of the Froxlor project.
|
||||
* Copyright (c) 2010 the Froxlor Team (see authors).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* 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. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you can also view it online at
|
||||
* http://files.froxlor.org/misc/COPYING.txt
|
||||
*
|
||||
* @copyright the authors
|
||||
* @author Froxlor team <team@froxlor.org>
|
||||
* @license http://files.froxlor.org/misc/COPYING.txt GPLv2
|
||||
*/
|
||||
|
||||
namespace Froxlor\Cli;
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Style\SymfonyStyle;
|
||||
use Froxlor\Froxlor;
|
||||
use Froxlor\Database\Database;
|
||||
|
||||
/**
|
||||
* This file is part of the Froxlor project.
|
||||
* Copyright (c) 2022 the Froxlor Team (see authors).
|
||||
*
|
||||
* For the full copyright and license information, please view the COPYING
|
||||
* file that was distributed with this source code. You can also view the
|
||||
* COPYING file online at http://files.froxlor.org/misc/COPYING.txt
|
||||
*
|
||||
* @copyright (c) the authors
|
||||
* @author Froxlor team <team@froxlor.org> (2018-)
|
||||
* @license GPLv2 http://files.froxlor.org/misc/COPYING.txt
|
||||
* @package Cron
|
||||
*
|
||||
*/
|
||||
final class SwitchServerIp extends Command
|
||||
final class SwitchServerIp extends CliCommand
|
||||
{
|
||||
|
||||
protected function configure()
|
||||
@@ -37,21 +44,18 @@ final class SwitchServerIp extends Command
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
if (!file_exists(Froxlor::getInstallDir() . '/lib/userdata.inc.php')) {
|
||||
$output->writeln("<error>Could not find froxlor's userdata.inc.php file. You should use this script only with an installed froxlor system.</>");
|
||||
return self::INVALID;
|
||||
}
|
||||
$result = self::SUCCESS;
|
||||
|
||||
if ($input->getOption('list') == false && $input->getOption('switch') == false) {
|
||||
$result = $this->validateRequirements($input, $output);
|
||||
|
||||
if ($result == self::SUCCESS && $input->getOption('list') == false && $input->getOption('switch') == false) {
|
||||
$output->writeln('<error>Either --list or --switch option must be provided. Nothing to do, exiting.</>');
|
||||
return self::INVALID;
|
||||
$result = self::INVALID;
|
||||
}
|
||||
|
||||
$io = new SymfonyStyle($input, $output);
|
||||
|
||||
$result = self::SUCCESS;
|
||||
|
||||
if ($input->getOption('list')) {
|
||||
if ($result == self::SUCCESS && $input->getOption('list')) {
|
||||
|
||||
$sel_stmt = Database::prepare("SELECT * FROM panel_ipsandports ORDER BY ip ASC, port ASC");
|
||||
Database::pexecute($sel_stmt);
|
||||
@@ -67,7 +71,7 @@ final class SwitchServerIp extends Command
|
||||
);
|
||||
}
|
||||
|
||||
if ($input->getOption('switch')) {
|
||||
if ($result == self::SUCCESS && $input->getOption('switch')) {
|
||||
$result = $this->switchIPs($input, $output);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,19 +2,25 @@
|
||||
|
||||
/**
|
||||
* This file is part of the Froxlor project.
|
||||
* Copyright (c) 2003-2009 the SysCP Team (see authors).
|
||||
* Copyright (c) 2010 the Froxlor Team (see authors).
|
||||
*
|
||||
* For the full copyright and license information, please view the COPYING
|
||||
* file that was distributed with this source code. You can also view the
|
||||
* COPYING file online at http://files.froxlor.org/misc/COPYING.txt
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* @copyright (c) the authors
|
||||
* @author Florian Lippert <flo@syscp.org> (2003-2009)
|
||||
* @author Froxlor team <team@froxlor.org> (2010-)
|
||||
* @license GPLv2 http://files.froxlor.org/misc/COPYING.txt
|
||||
* @package System
|
||||
* 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. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, you can also view it online at
|
||||
* http://files.froxlor.org/misc/COPYING.txt
|
||||
*
|
||||
* @copyright the authors
|
||||
* @author Froxlor team <team@froxlor.org>
|
||||
* @license http://files.froxlor.org/misc/COPYING.txt GPLv2
|
||||
*/
|
||||
|
||||
const TABLE_FTP_GROUPS = 'ftp_groups';
|
||||
@@ -37,7 +43,6 @@ const TABLE_PANEL_TEMPLATES = 'panel_templates';
|
||||
const TABLE_PANEL_TRAFFIC = 'panel_traffic';
|
||||
const TABLE_PANEL_TRAFFIC_ADMINS = 'panel_traffic_admins';
|
||||
const TABLE_PANEL_DISKSPACE = 'panel_diskspace';
|
||||
const TABLE_PANEL_LANGUAGE = 'panel_languages';
|
||||
const TABLE_PANEL_IPSANDPORTS = 'panel_ipsandports';
|
||||
const TABLE_PANEL_LOG = 'panel_syslog';
|
||||
const TABLE_PANEL_PHPCONFIGS = 'panel_phpconfigs';
|
||||
|
||||
Reference in New Issue
Block a user