diff --git a/admin_admins.php b/admin_admins.php
index 95ddfd3e..c18bb3fc 100644
--- a/admin_admins.php
+++ b/admin_admins.php
@@ -43,67 +43,71 @@ if ($page == 'admins' && $userinfo['change_serversettings'] == '1') {
'traffic_used' => $lng['customer']['traffic'] . ' (' . $lng['panel']['used'] . ')',
'deactivated' => $lng['admin']['deactivated']
);
- $paging = new \Froxlor\UI\Paging($userinfo, TABLE_PANEL_ADMINS, $fields);
+ try {
+ // get total count
+ $json_result = Admins::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 = Admins::getLocal($userinfo, $paging->getApiCommandParams())->listing();
+ } catch (Exception $e) {
+ \Froxlor\UI\Response::dynamic_error($e->getMessage());
+ }
+ $result = json_decode($json_result, true)['data'];
+
$admins = '';
- $result_stmt = Database::query("SELECT * FROM `" . TABLE_PANEL_ADMINS . "` " . $paging->getSqlWhere(false) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit());
- $numrows_admins = Database::num_rows();
- $paging->setEntries($numrows_admins);
$sortcode = $paging->getHtmlSortCode($lng, true);
$arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s);
$searchcode = $paging->getHtmlSearchCode($lng);
$pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s);
- $i = 0;
$count = 0;
$dec_places = Settings::Get('panel.decimal_places');
- while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) {
+ foreach ($result['list'] as $row) {
- if ($paging->checkDisplay($i)) {
+ $row['traffic_used'] = round($row['traffic_used'] / (1024 * 1024), $dec_places);
+ $row['traffic'] = round($row['traffic'] / (1024 * 1024), $dec_places);
+ $row['diskspace_used'] = round($row['diskspace_used'] / 1024, $dec_places);
+ $row['diskspace'] = round($row['diskspace'] / 1024, $dec_places);
- $row['traffic_used'] = round($row['traffic_used'] / (1024 * 1024), $dec_places);
- $row['traffic'] = round($row['traffic'] / (1024 * 1024), $dec_places);
- $row['diskspace_used'] = round($row['diskspace_used'] / 1024, $dec_places);
- $row['diskspace'] = round($row['diskspace'] / 1024, $dec_places);
-
- // percent-values for progressbar
- // For Disk usage
- if ($row['diskspace'] > 0) {
- $disk_percent = round(($row['diskspace_used'] * 100) / $row['diskspace'], 0);
- $disk_doublepercent = round($disk_percent * 2, 2);
- } else {
- $disk_percent = 0;
- $disk_doublepercent = 0;
- }
- // For Traffic usage
- if ($row['traffic'] > 0) {
- $traffic_percent = round(($row['traffic_used'] * 100) / $row['traffic'], 0);
- $traffic_doublepercent = round($traffic_percent * 2, 2);
- } else {
- $traffic_percent = 0;
- $traffic_doublepercent = 0;
- }
-
- // fix progress-bars if value is >100%
- if ($disk_percent > 100) {
- $disk_percent = 100;
- }
- if ($traffic_percent > 100) {
- $traffic_percent = 100;
- }
-
- $row = \Froxlor\PhpHelper::strReplaceArray('-1', 'UL', $row, 'customers domains diskspace traffic mysqls emails email_accounts email_forwarders email_quota ftps subdomains');
- $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
-
- $row['custom_notes'] = ($row['custom_notes'] != '') ? nl2br($row['custom_notes']) : '';
-
- eval("\$admins.=\"" . \Froxlor\UI\Template::getTemplate("admins/admins_admin") . "\";");
- $count ++;
+ // percent-values for progressbar
+ // For Disk usage
+ if ($row['diskspace'] > 0) {
+ $disk_percent = round(($row['diskspace_used'] * 100) / $row['diskspace'], 0);
+ $disk_doublepercent = round($disk_percent * 2, 2);
+ } else {
+ $disk_percent = 0;
+ $disk_doublepercent = 0;
}
- $i ++;
+ // For Traffic usage
+ if ($row['traffic'] > 0) {
+ $traffic_percent = round(($row['traffic_used'] * 100) / $row['traffic'], 0);
+ $traffic_doublepercent = round($traffic_percent * 2, 2);
+ } else {
+ $traffic_percent = 0;
+ $traffic_doublepercent = 0;
+ }
+
+ // fix progress-bars if value is >100%
+ if ($disk_percent > 100) {
+ $disk_percent = 100;
+ }
+ if ($traffic_percent > 100) {
+ $traffic_percent = 100;
+ }
+
+ $row = \Froxlor\PhpHelper::strReplaceArray('-1', 'UL', $row, 'customers domains diskspace traffic mysqls emails email_accounts email_forwarders email_quota ftps subdomains');
+ $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
+
+ $row['custom_notes'] = ($row['custom_notes'] != '') ? nl2br($row['custom_notes']) : '';
+
+ eval("\$admins.=\"" . \Froxlor\UI\Template::getTemplate("admins/admins_admin") . "\";");
+ $count ++;
}
- $admincount = $numrows_admins;
+ $admincount = $paging->getEntries();
eval("echo \"" . \Froxlor\UI\Template::getTemplate("admins/admins") . "\";");
} elseif ($action == 'su') {
diff --git a/admin_cronjobs.php b/admin_cronjobs.php
index b04a55c8..db528f09 100644
--- a/admin_cronjobs.php
+++ b/admin_cronjobs.php
@@ -17,8 +17,7 @@
define('AREA', 'admin');
require './lib/init.php';
-use Froxlor\Database\Database;
-use Froxlor\Api\Commands\Cronjobs as Cronjobs;
+use Froxlor\Api\Commands\Cronjobs;
if (isset($_POST['id'])) {
$id = intval($_POST['id']);
@@ -31,45 +30,47 @@ if ($page == 'cronjobs' || $page == 'overview') {
$log->logAction(\Froxlor\FroxlorLogger::ADM_ACTION, LOG_NOTICE, 'viewed admin_cronjobs');
$fields = array(
+ 'c.module' => 'Module',
'c.lastrun' => $lng['cron']['lastrun'],
'c.interval' => $lng['cron']['interval'],
'c.isactive' => $lng['cron']['isactive']
);
- $paging = new \Froxlor\UI\Paging($userinfo, TABLE_PANEL_CRONRUNS, $fields);
+ try {
+ // get total count
+ $json_result = Cronjobs::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 = Cronjobs::getLocal($userinfo, $paging->getApiCommandParams())->listing();
+ } catch (Exception $e) {
+ \Froxlor\UI\Response::dynamic_error($e->getMessage());
+ }
+ $result = json_decode($json_result, true)['data'];
$crons = '';
- $result_stmt = Database::prepare("SELECT `c`.* FROM `" . TABLE_PANEL_CRONRUNS . "` `c` ORDER BY `module` ASC, `cronfile` ASC");
- Database::pexecute($result_stmt);
- $paging->setEntries(Database::num_rows());
$sortcode = $paging->getHtmlSortCode($lng);
$arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s);
$searchcode = $paging->getHtmlSearchCode($lng);
$pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s);
- $i = 0;
$count = 0;
$cmod = '';
- while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) {
+ foreach ($result['list'] as $row) {
if ($cmod != $row['module']) {
$_mod = explode("/", $row['module']);
$module = ucfirst($_mod[1]);
eval("\$crons.=\"" . \Froxlor\UI\Template::getTemplate('cronjobs/cronjobs_cronjobmodule') . "\";");
$cmod = $row['module'];
}
- if ($paging->checkDisplay($i)) {
- $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
+ $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
+ $row['lastrun'] = date('d.m.Y H:i', $row['lastrun']);
+ $row['isactive'] = ((int) $row['isactive'] == 1) ? $lng['panel']['yes'] : $lng['panel']['no'];
+ $description = $lng['crondesc'][$row['desc_lng_key']];
- $row['lastrun'] = date('d.m.Y H:i', $row['lastrun']);
- $row['isactive'] = ((int) $row['isactive'] == 1) ? $lng['panel']['yes'] : $lng['panel']['no'];
-
- $description = $lng['crondesc'][$row['desc_lng_key']];
-
- eval("\$crons.=\"" . \Froxlor\UI\Template::getTemplate('cronjobs/cronjobs_cronjob') . "\";");
- $count ++;
- }
-
- $i ++;
+ eval("\$crons.=\"" . \Froxlor\UI\Template::getTemplate('cronjobs/cronjobs_cronjob') . "\";");
+ $count ++;
}
eval("echo \"" . \Froxlor\UI\Template::getTemplate('cronjobs/cronjobs') . "\";");
diff --git a/admin_customers.php b/admin_customers.php
index 39d961d0..f641684a 100644
--- a/admin_customers.php
+++ b/admin_customers.php
@@ -35,6 +35,7 @@ if ($page == 'customers' && $userinfo['customers'] != '0') {
unset($_SESSION['requestData']);
$log->logAction(\Froxlor\FroxlorLogger::ADM_ACTION, LOG_NOTICE, "viewed admin_customers");
+
$fields = array(
'c.loginname' => $lng['login']['username'],
'a.loginname' => $lng['admin']['admin'],
@@ -47,112 +48,109 @@ if ($page == 'customers' && $userinfo['customers'] != '0') {
'c.traffic' => $lng['customer']['traffic'],
'c.traffic_used' => $lng['customer']['traffic'] . ' (' . $lng['panel']['used'] . ')'
);
+ try {
+ // get total count
+ $json_result = Customers::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 = Customers::getLocal($userinfo, $paging->getApiCommandParams())->listing();
+ } catch (Exception $e) {
+ \Froxlor\UI\Response::dynamic_error($e->getMessage());
+ }
+ $result = json_decode($json_result, true)['data'];
- $paging = new \Froxlor\UI\Paging($userinfo, TABLE_PANEL_CUSTOMERS, $fields);
$customers = '';
- $result_stmt = Database::prepare("
- SELECT `c`.*, `a`.`loginname` AS `adminname`
- FROM `" . TABLE_PANEL_CUSTOMERS . "` `c`, `" . TABLE_PANEL_ADMINS . "` `a`
- WHERE " . ($userinfo['customers_see_all'] ? '' : " `c`.`adminid` = :adminid AND ") . "
- `c`.`adminid` = `a`.`adminid` " . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit());
- Database::pexecute($result_stmt, array(
- 'adminid' => $userinfo['adminid']
- ));
- $num_rows = Database::num_rows();
- $paging->setEntries($num_rows);
$sortcode = $paging->getHtmlSortCode($lng, true);
$arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s);
$searchcode = $paging->getHtmlSearchCode($lng);
$pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s);
- $i = 0;
$count = 0;
- while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) {
+ foreach ($result['list'] as $row) {
- if ($paging->checkDisplay($i)) {
+ $domains_stmt = Database::prepare("
+ SELECT COUNT(`id`) AS `domains`
+ FROM `" . TABLE_PANEL_DOMAINS . "`
+ WHERE `customerid` = :cid
+ AND `parentdomainid` = '0'
+ AND `id`<> :stdd
+ ");
+ Database::pexecute($domains_stmt, array(
+ 'cid' => $row['customerid'],
+ 'stdd' => $row['standardsubdomain']
+ ));
+ $domains = $domains_stmt->fetch(PDO::FETCH_ASSOC);
+ $row['domains'] = intval($domains['domains']);
+ $dec_places = Settings::Get('panel.decimal_places');
- $domains_stmt = Database::prepare("
- SELECT COUNT(`id`) AS `domains`
- FROM `" . TABLE_PANEL_DOMAINS . "`
- WHERE `customerid` = :cid
- AND `parentdomainid` = '0'
- AND `id`<> :stdd");
- Database::pexecute($domains_stmt, array(
- 'cid' => $row['customerid'],
- 'stdd' => $row['standardsubdomain']
- ));
- $domains = $domains_stmt->fetch(PDO::FETCH_ASSOC);
- $row['domains'] = intval($domains['domains']);
- $dec_places = Settings::Get('panel.decimal_places');
+ // get disk-space usages for web, mysql and mail
+ $usages_stmt = Database::prepare("
+ SELECT * FROM `" . TABLE_PANEL_DISKSPACE . "`
+ WHERE `customerid` = :cid
+ ORDER BY `stamp` DESC LIMIT 1
+ ");
+ $usages = Database::pexecute_first($usages_stmt, array(
+ 'cid' => $row['customerid']
+ ));
- // get disk-space usages for web, mysql and mail
- $usages_stmt = Database::prepare("SELECT * FROM `" . TABLE_PANEL_DISKSPACE . "` WHERE `customerid` = :cid ORDER BY `stamp` DESC LIMIT 1");
- $usages = Database::pexecute_first($usages_stmt, array(
- 'cid' => $row['customerid']
- ));
+ if ($usages) {
+ $row['webspace_used'] = round($usages['webspace'] / 1024, $dec_places);
+ $row['mailspace_used'] = round($usages['mail'] / 1024, $dec_places);
+ $row['dbspace_used'] = round($usages['mysql'] / 1024, $dec_places);
+ } else {
+ $row['webspace_used'] = 0;
+ $row['mailspace_used'] = 0;
+ $row['dbspace_used'] = 0;
+ }
+ $row['traffic_used'] = round($row['traffic_used'] / (1024 * 1024), $dec_places);
+ $row['traffic'] = round($row['traffic'] / (1024 * 1024), $dec_places);
+ $row['diskspace_used'] = round($row['diskspace_used'] / 1024, $dec_places);
+ $row['diskspace'] = round($row['diskspace'] / 1024, $dec_places);
+ $last_login = ((int) $row['lastlogin_succ'] == 0) ? $lng['panel']['neverloggedin'] : date('d.m.Y', $row['lastlogin_succ']);
- if ($usages)
- {
- $row['webspace_used'] = round($usages['webspace'] / 1024, $dec_places);
- $row['mailspace_used'] = round($usages['mail'] / 1024, $dec_places);
- $row['dbspace_used'] = round($usages['mysql'] / 1024, $dec_places);
- } else {
- $row['webspace_used'] = 0;
- $row['mailspace_used'] = 0;
- $row['dbspace_used'] = 0;
- }
- $row['traffic_used'] = round($row['traffic_used'] / (1024 * 1024), $dec_places);
- $row['traffic'] = round($row['traffic'] / (1024 * 1024), $dec_places);
- $row['diskspace_used'] = round($row['diskspace_used'] / 1024, $dec_places);
- $row['diskspace'] = round($row['diskspace'] / 1024, $dec_places);
- $last_login = ((int) $row['lastlogin_succ'] == 0) ? $lng['panel']['neverloggedin'] : date('d.m.Y', $row['lastlogin_succ']);
-
- /**
- * percent-values for progressbar
- */
- // For Disk usage
- if ($row['diskspace'] > 0) {
- $disk_percent = round(($row['diskspace_used'] * 100) / $row['diskspace'], 0);
- $disk_doublepercent = round($disk_percent * 2, 2);
- } else {
- $disk_percent = 0;
- $disk_doublepercent = 0;
- }
-
- if ($row['traffic'] > 0) {
- $traffic_percent = round(($row['traffic_used'] * 100) / $row['traffic'], 0);
- $traffic_doublepercent = round($traffic_percent * 2, 2);
- } else {
- $traffic_percent = 0;
- $traffic_doublepercent = 0;
- }
-
- $islocked = 0;
- if ($row['loginfail_count'] >= Settings::Get('login.maxloginattempts') && $row['lastlogin_fail'] > (time() - Settings::Get('login.deactivatetime'))) {
- $islocked = 1;
- }
-
- $row = \Froxlor\PhpHelper::strReplaceArray('-1', 'UL', $row, 'diskspace traffic mysqls emails email_accounts email_forwarders ftps subdomains');
- $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
-
- // fix progress-bars if value is >100%
- if ($disk_percent > 100) {
- $disk_percent = 100;
- }
- if ($traffic_percent > 100) {
- $traffic_percent = 100;
- }
-
- $row['custom_notes'] = ($row['custom_notes'] != '') ? nl2br($row['custom_notes']) : '';
-
- eval("\$customers.=\"" . \Froxlor\UI\Template::getTemplate("customers/customers_customer") . "\";");
- $count ++;
+ /**
+ * percent-values for progressbar
+ */
+ if ($row['diskspace'] > 0) {
+ $disk_percent = round(($row['diskspace_used'] * 100) / $row['diskspace'], 0);
+ $disk_doublepercent = round($disk_percent * 2, 2);
+ } else {
+ $disk_percent = 0;
+ $disk_doublepercent = 0;
+ }
+ if ($row['traffic'] > 0) {
+ $traffic_percent = round(($row['traffic_used'] * 100) / $row['traffic'], 0);
+ $traffic_doublepercent = round($traffic_percent * 2, 2);
+ } else {
+ $traffic_percent = 0;
+ $traffic_doublepercent = 0;
}
- $i ++;
+ $islocked = 0;
+ if ($row['loginfail_count'] >= Settings::Get('login.maxloginattempts') && $row['lastlogin_fail'] > (time() - Settings::Get('login.deactivatetime'))) {
+ $islocked = 1;
+ }
+
+ $row = \Froxlor\PhpHelper::strReplaceArray('-1', 'UL', $row, 'diskspace traffic mysqls emails email_accounts email_forwarders ftps subdomains');
+ $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
+
+ // fix progress-bars if value is >100%
+ if ($disk_percent > 100) {
+ $disk_percent = 100;
+ }
+ if ($traffic_percent > 100) {
+ $traffic_percent = 100;
+ }
+
+ $row['custom_notes'] = ($row['custom_notes'] != '') ? nl2br($row['custom_notes']) : '';
+
+ eval("\$customers.=\"" . \Froxlor\UI\Template::getTemplate("customers/customers_customer") . "\";");
+ $count ++;
}
- $customercount = $num_rows;
+ $customercount = $paging->getEntries();
eval("echo \"" . \Froxlor\UI\Template::getTemplate("customers/customers") . "\";");
} elseif ($action == 'su' && $id != 0) {
try {
diff --git a/admin_domains.php b/admin_domains.php
index 4324b25b..d7ae4d60 100644
--- a/admin_domains.php
+++ b/admin_domains.php
@@ -21,6 +21,7 @@ require './lib/init.php';
use Froxlor\Database\Database;
use Froxlor\Settings;
+use Froxlor\Api\Commands\Customers as Customers;
use Froxlor\Api\Commands\Domains as Domains;
if (isset($_POST['id'])) {
@@ -31,14 +32,8 @@ if (isset($_POST['id'])) {
if ($page == 'domains' || $page == 'overview') {
// Let's see how many customers we have
- $stmt = Database::prepare("
- SELECT COUNT(`customerid`) as `countcustomers` FROM `" . TABLE_PANEL_CUSTOMERS . "` " . ($userinfo['customers_see_all'] ? '' : " WHERE `adminid` = :adminid"));
- $params = array();
- if ($userinfo['customers_see_all'] == '0') {
- $params['adminid'] = $userinfo['adminid'];
- }
- $countcustomers = Database::pexecute_first($stmt, $params);
- $countcustomers = (int) $countcustomers['countcustomers'];
+ $json_result = Customers::getLocal($userinfo)->listingCount();
+ $countcustomers = json_decode($json_result, true)['data'];
if ($action == '') {
@@ -51,28 +46,27 @@ if ($page == 'domains' || $page == 'overview') {
'c.loginname' => $lng['login']['username'],
'd.aliasdomain' => $lng['domains']['aliasdomain']
);
- $paging = new \Froxlor\UI\Paging($userinfo, TABLE_PANEL_DOMAINS, $fields);
- $domains = "";
- $result_stmt = Database::prepare("
- SELECT `d`.*, `c`.`loginname`, `c`.`deactivated`, `c`.`name`, `c`.`firstname`, `c`.`company`, `c`.`standardsubdomain`, `ad`.`id` AS `aliasdomainid`, `ad`.`domain` AS `aliasdomain`
- FROM `" . TABLE_PANEL_DOMAINS . "` `d`
- LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` `c` USING(`customerid`)
- LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` `ad` ON `d`.`aliasdomain`=`ad`.`id`
- WHERE `d`.`parentdomainid`='0' " . ($userinfo['customers_see_all'] ? '' : " AND `d`.`adminid` = :adminid ") . " " . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit());
- $params = array();
- if ($userinfo['customers_see_all'] == '0') {
- $params['adminid'] = $userinfo['adminid'];
+ try {
+ // get total count
+ $json_result = Domains::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 = Domains::getLocal($userinfo, $paging->getApiCommandParams())->listing();
+ } catch (Exception $e) {
+ \Froxlor\UI\Response::dynamic_error($e->getMessage());
}
- Database::pexecute($result_stmt, $params);
- $numrows_domains = Database::num_rows();
- $paging->setEntries($numrows_domains);
+ $result = json_decode($json_result, true)['data'];
+
+ $domains = '';
$sortcode = $paging->getHtmlSortCode($lng);
$arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s);
$searchcode = $paging->getHtmlSearchCode($lng);
$pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s);
$domain_array = array();
- while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) {
+ foreach ($result['list'] as $row) {
formatDomainEntry($row, $idna_convert);
@@ -100,11 +94,10 @@ if ($page == 'domains' || $page == 'overview') {
krsort($domain_array);
}
- $i = 0;
$count = 0;
foreach ($domain_array as $row) {
- if (isset($row['domain']) && $row['domain'] != '' && $paging->checkDisplay($i)) {
+ if (isset($row['domain']) && $row['domain'] != '') {
$row['customername'] = \Froxlor\User::getCorrectFullUserDetails($row);
$row = \Froxlor\PhpHelper::htmlentitiesArray($row);
// display a nice list of IP's
@@ -112,10 +105,9 @@ if ($page == 'domains' || $page == 'overview') {
eval("\$domains.=\"" . \Froxlor\UI\Template::getTemplate("domains/domains_domain") . "\";");
$count ++;
}
- $i ++;
}
- $domainscount = $numrows_domains;
+ $domainscount = $paging->getEntries();
// Display the list
eval("echo \"" . \Froxlor\UI\Template::getTemplate("domains/domains") . "\";");
diff --git a/admin_ipsandports.php b/admin_ipsandports.php
index df6a735f..6b64ae8f 100644
--- a/admin_ipsandports.php
+++ b/admin_ipsandports.php
@@ -19,9 +19,8 @@
define('AREA', 'admin');
require './lib/init.php';
-use Froxlor\Database\Database;
use Froxlor\Settings;
-use Froxlor\Api\Commands\IpsAndPorts as IpsAndPorts;
+use Froxlor\Api\Commands\IpsAndPorts;
if (isset($_POST['id'])) {
$id = intval($_POST['id']);
@@ -43,29 +42,33 @@ if ($page == 'ipsandports' || $page == 'overview') {
'ip' => $lng['admin']['ipsandports']['ip'],
'port' => $lng['admin']['ipsandports']['port']
);
- $paging = new \Froxlor\UI\Paging($userinfo, TABLE_PANEL_IPSANDPORTS, $fields);
+ try {
+ // get total count
+ $json_result = IpsAndPorts::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 = IpsAndPorts::getLocal($userinfo, $paging->getApiCommandParams())->listing();
+ } catch (Exception $e) {
+ \Froxlor\UI\Response::dynamic_error($e->getMessage());
+ }
+ $result = json_decode($json_result, true)['data'];
+
$ipsandports = '';
- $result_stmt = Database::prepare("SELECT * FROM `" . TABLE_PANEL_IPSANDPORTS . "` " . $paging->getSqlWhere(false) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit());
- Database::pexecute($result_stmt);
- $paging->setEntries(Database::num_rows());
$sortcode = $paging->getHtmlSortCode($lng);
$arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s);
$searchcode = $paging->getHtmlSearchCode($lng);
$pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s);
- $i = 0;
$count = 0;
- while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) {
-
- if ($paging->checkDisplay($i)) {
- $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
- if (filter_var($row['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
- $row['ip'] = '[' . $row['ip'] . ']';
- }
- eval("\$ipsandports.=\"" . \Froxlor\UI\Template::getTemplate("ipsandports/ipsandports_ipandport") . "\";");
- $count ++;
+ foreach ($result['list'] as $row) {
+ $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
+ if (filter_var($row['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
+ $row['ip'] = '[' . $row['ip'] . ']';
}
- $i ++;
+ eval("\$ipsandports.=\"" . \Froxlor\UI\Template::getTemplate("ipsandports/ipsandports_ipandport") . "\";");
+ $count ++;
}
eval("echo \"" . \Froxlor\UI\Template::getTemplate("ipsandports/ipsandports") . "\";");
} elseif ($action == 'delete' && $id != 0) {
diff --git a/admin_logger.php b/admin_logger.php
index 3d317533..0bdf683f 100644
--- a/admin_logger.php
+++ b/admin_logger.php
@@ -19,7 +19,7 @@
define('AREA', 'admin');
require './lib/init.php';
-use Froxlor\Database\Database;
+use Froxlor\Api\Commands\SysLog;
if ($page == 'log' && $userinfo['change_serversettings'] == '1') {
if ($action == '') {
@@ -29,20 +29,25 @@ if ($page == 'log' && $userinfo['change_serversettings'] == '1') {
'user' => $lng['logger']['user'],
'text' => $lng['logger']['action']
);
- $paging = new \Froxlor\UI\Paging($userinfo, TABLE_PANEL_LOG, $fields, null, null, 0, 'desc', 30);
- $query = 'SELECT * FROM `' . TABLE_PANEL_LOG . '` ' . $paging->getSqlWhere(false) . ' ' . $paging->getSqlOrderBy();
- $result_stmt = Database::query($query . ' ' . $paging->getSqlLimit());
- $result_cnt_stmt = Database::query($query);
- $logs_count = $result_cnt_stmt->rowCount();
- $paging->setEntries($logs_count);
+ 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();
+ } 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();
- while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) {
-
+ foreach ($result['list'] as $row) {
if (! isset($clog[$row['action']]) || ! is_array($clog[$row['action']])) {
$clog[$row['action']] = array();
}
@@ -55,7 +60,6 @@ if ($page == 'log' && $userinfo['change_serversettings'] == '1') {
ksort($clog);
}
- $i = 0;
$count = 0;
$log_count = 0;
$log = '';
@@ -100,23 +104,20 @@ if ($page == 'log' && $userinfo['change_serversettings'] == '1') {
eval("\$log.=\"" . \Froxlor\UI\Template::getTemplate('logger/logger_log') . "\";");
$count ++;
$_action = $action;
- // }
- $i ++;
}
- $i ++;
}
eval("echo \"" . \Froxlor\UI\Template::getTemplate('logger/logger') . "\";");
} elseif ($action == 'truncate') {
if (isset($_POST['send']) && $_POST['send'] == 'send') {
- $truncatedate = time() - (60 * 10);
- $trunc_stmt = Database::prepare("
- DELETE FROM `" . TABLE_PANEL_LOG . "` WHERE `date` < :trunc");
- Database::pexecute($trunc_stmt, array(
- 'trunc' => $truncatedate
- ));
- $log->logAction(\Froxlor\FroxlorLogger::ADM_ACTION, LOG_WARNING, 'truncated the system-log (mysql)');
+ try {
+ SysLog::getLocal($userinfo, array(
+ 'min_to_keep' => 10
+ ))->delete();
+ } catch (Exception $e) {
+ \Froxlor\UI\Response::dynamic_error($e->getMessage());
+ }
\Froxlor\UI\Response::redirectTo($filename, array(
'page' => $page,
's' => $s
diff --git a/admin_phpsettings.php b/admin_phpsettings.php
index aba242d9..75c99fa6 100644
--- a/admin_phpsettings.php
+++ b/admin_phpsettings.php
@@ -52,7 +52,7 @@ if ($page == 'overview') {
$domains = "";
$subdomains_count = count($row['subdomains']);
foreach ($row['domains'] as $configdomain) {
- $domains .= $configdomain . "
";
+ $domains .= $idna_convert->decode($configdomain) . "
";
}
$count ++;
if ($subdomains_count == 0 && empty($domains)) {
diff --git a/admin_plans.php b/admin_plans.php
index 9ec62bb2..0bc3770e 100644
--- a/admin_plans.php
+++ b/admin_plans.php
@@ -38,33 +38,31 @@ if ($page == '' || $page == 'overview') {
'adminname' => $lng['admin']['admin'],
'p.ts' => $lng['admin']['plans']['last_update']
);
- $paging = new \Froxlor\UI\Paging($userinfo, TABLE_PANEL_PLANS, $fields);
+ try {
+ // get total count
+ $json_result = HostingPlans::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 = HostingPlans::getLocal($userinfo, $paging->getApiCommandParams())->listing();
+ } catch (Exception $e) {
+ \Froxlor\UI\Response::dynamic_error($e->getMessage());
+ }
+ $result = json_decode($json_result, true)['data'];
+
$plans = '';
- $result_stmt = Database::prepare("
- SELECT p.*, a.loginname as adminname
- FROM `" . TABLE_PANEL_PLANS . "` p, `" . TABLE_PANEL_ADMINS . "` a
- WHERE " . ($userinfo['customers_see_all'] ? '' : " `p`.`adminid` = :adminid AND ") . "
- `p`.`adminid` = `a`.`adminid` " . $paging->getSqlWhere(false) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit());
- Database::pexecute($result_stmt, array(
- 'adminid' => $userinfo['adminid']
- ));
- $paging->setEntries(Database::num_rows());
$sortcode = $paging->getHtmlSortCode($lng);
$arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s);
$searchcode = $paging->getHtmlSearchCode($lng);
$pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s);
- $i = 0;
$count = 0;
- while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) {
-
- if ($paging->checkDisplay($i)) {
- $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
- $row['ts_format'] = date("d.m.Y H:i", $row['ts']);
- eval("\$plans.=\"" . \Froxlor\UI\Template::getTemplate("plans/plans_plan") . "\";");
- $count ++;
- }
- $i ++;
+ foreach ($result['list'] as $row) {
+ $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
+ $row['ts_format'] = date("d.m.Y H:i", $row['ts']);
+ eval("\$plans.=\"" . \Froxlor\UI\Template::getTemplate("plans/plans_plan") . "\";");
+ $count ++;
}
eval("echo \"" . \Froxlor\UI\Template::getTemplate("plans/plans") . "\";");
diff --git a/customer_domains.php b/customer_domains.php
index e50173e1..43e0a819 100644
--- a/customer_domains.php
+++ b/customer_domains.php
@@ -44,144 +44,74 @@ if ($page == 'overview') {
$fields = array(
'd.domain' => $lng['domains']['domainname']
);
- $paging = new \Froxlor\UI\Paging($userinfo, TABLE_PANEL_DOMAINS, $fields);
- $domains_stmt = Database::prepare("SELECT `d`.`id`, `d`.`customerid`, `d`.`domain`, `d`.`documentroot`, `d`.`isbinddomain`, `d`.`isemaildomain`, `d`.`caneditdomain`, `d`.`iswildcarddomain`, `d`.`parentdomainid`, `d`.`letsencrypt`, `d`.`registration_date`, `d`.`termination_date`, `ad`.`id` AS `aliasdomainid`, `ad`.`domain` AS `aliasdomain`, `da`.`id` AS `domainaliasid`, `da`.`domain` AS `domainalias` FROM `" . TABLE_PANEL_DOMAINS . "` `d`
- LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` `ad` ON `d`.`aliasdomain`=`ad`.`id`
- LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` `da` ON `da`.`aliasdomain`=`d`.`id`
- WHERE `d`.`customerid`= :customerid
- AND `d`.`email_only`='0'
- AND `d`.`id` <> :standardsubdomain " . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit());
- Database::pexecute($domains_stmt, array(
- "customerid" => $userinfo['customerid'],
- "standardsubdomain" => $userinfo['standardsubdomain']
- ));
- $paging->setEntries(Database::num_rows());
+ try {
+ // get total count
+ $json_result = SubDomains::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 = SubDomains::getLocal($userinfo, $paging->getApiCommandParams())->listing();
+ } 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);
$domains = '';
$parentdomains_count = 0;
- $domains_count = 0;
+ $domains_count = $paging->getEntries();
$domain_array = array();
- while ($row = $domains_stmt->fetch(PDO::FETCH_ASSOC)) {
- $row['domain'] = $idna_convert->decode($row['domain']);
- $row['aliasdomain'] = $idna_convert->decode($row['aliasdomain']);
- $row['domainalias'] = $idna_convert->decode($row['domainalias']);
-
+ foreach ($result['list'] as $row) {
+ formatDomainEntry($row, $idna_convert);
if ($row['parentdomainid'] == '0' && $row['caneditdomain'] == '1') {
$parentdomains_count ++;
}
+ $domain_array[$row['parentdomainid']][] = $row;
+ }
- /**
- * check for set ssl-certs to show different state-icons
- */
- // nothing (ssl_global)
- $row['domain_hascert'] = 0;
- $ssl_stmt = Database::prepare("SELECT * FROM `" . TABLE_PANEL_DOMAIN_SSL_SETTINGS . "` WHERE `domainid` = :domainid");
- Database::pexecute($ssl_stmt, array(
- "domainid" => $row['id']
- ));
- $ssl_result = $ssl_stmt->fetch(PDO::FETCH_ASSOC);
- if (is_array($ssl_result) && isset($ssl_result['ssl_cert_file']) && $ssl_result['ssl_cert_file'] != '') {
- // own certificate (ssl_customer_green)
- $row['domain_hascert'] = 1;
- } else {
- // check if it's parent has one set (shared)
- if ($row['parentdomainid'] != 0) {
- $ssl_stmt = Database::prepare("SELECT * FROM `" . TABLE_PANEL_DOMAIN_SSL_SETTINGS . "` WHERE `domainid` = :domainid");
- Database::pexecute($ssl_stmt, array(
- "domainid" => $row['parentdomainid']
- ));
- $ssl_result = $ssl_stmt->fetch(PDO::FETCH_ASSOC);
- if (is_array($ssl_result) && isset($ssl_result['ssl_cert_file']) && $ssl_result['ssl_cert_file'] != '') {
- // parent has a certificate (ssl_shared)
- $row['domain_hascert'] = 2;
- }
- }
- }
-
- $row['termination_date'] = str_replace("0000-00-00", "", $row['termination_date']);
- if ($row['termination_date'] != "") {
- $cdate = strtotime($row['termination_date'] . " 23:59:59");
- $today = time();
-
- if ($cdate < $today) {
- $row['termination_css'] = 'domain-expired';
+ if (isset($domain_array[0])) {
+ foreach ($domain_array[0] as $pdomain) {
+ // PARENTDOMAIN
+ $row = \Froxlor\PhpHelper::htmlentitiesArray($pdomain);
+ if (Settings::Get('system.awstats_enabled') == '1') {
+ $statsapp = 'awstats';
} else {
- $row['termination_css'] = 'domain-canceled';
+ $statsapp = 'webalizer';
+ }
+ eval("\$domains.=\"" . \Froxlor\UI\Template::getTemplate("domains/domains_delimiter") . "\";");
+ // show docroot nicely
+ if (strpos($row['documentroot'], $userinfo['documentroot']) === 0) {
+ $row['documentroot'] = \Froxlor\FileDir::makeCorrectDir(str_replace($userinfo['documentroot'], "/", $row['documentroot']));
+ }
+ // get ssl-ips if activated
+ $show_ssledit = false;
+ if (Settings::Get('system.use_ssl') == '1' && \Froxlor\Domain\Domain::domainHasSslIpPort($row['id']) && $row['caneditdomain'] == '1' && $row['letsencrypt'] == 0) {
+ $show_ssledit = true;
+ }
+ eval("\$domains.=\"" . \Froxlor\UI\Template::getTemplate("domains/domains_domain") . "\";");
+
+ // every domain below the parentdomain
+ if (isset($domain_array[$pdomain['id']])) {
+ $mydomains = $domain_array[$pdomain['id']];
+ foreach ($mydomains as $row) {
+ // show docroot nicely
+ if (strpos($row['documentroot'], $userinfo['documentroot']) === 0) {
+ $row['documentroot'] = \Froxlor\FileDir::makeCorrectDir(str_replace($userinfo['documentroot'], "/", $row['documentroot']));
+ }
+ // get ssl-ips if activated
+ $show_ssledit = false;
+ if (Settings::Get('system.use_ssl') == '1' && \Froxlor\Domain\Domain::domainHasSslIpPort($row['id']) && $row['caneditdomain'] == '1' && $row['letsencrypt'] == 0) {
+ $show_ssledit = true;
+ }
+ eval("\$domains.=\"" . \Froxlor\UI\Template::getTemplate("domains/domains_domain") . "\";");
+ }
}
}
-
- $domains_count ++;
- $domain_array[$row['domain']] = $row;
- }
-
- ksort($domain_array);
- $domain_id_array = array();
- foreach ($domain_array as $sortkey => $row) {
- $domain_id_array[$row['id']] = $sortkey;
- }
-
- $domain_sort_array = array();
- foreach ($domain_array as $sortkey => $row) {
- if ($row['parentdomainid'] == 0) {
- $domain_sort_array[$sortkey][$sortkey] = $row;
- } else {
- // when searching and the results are subdomains only, we need to get
- // the parent domain to this subdomain
- if (! isset($domain_id_array[$row['parentdomainid']])) {
- $domain_id_array[$row['parentdomainid']] = "[parent-domain]";
- }
- $domain_sort_array[$domain_id_array[$row['parentdomainid']]][$sortkey] = $row;
- }
- }
-
- $domain_array = array();
-
- if ($paging->sortfield == 'd.domain' && $paging->sortorder == 'asc') {
- ksort($domain_sort_array);
- } elseif ($paging->sortfield == 'd.domain' && $paging->sortorder == 'desc') {
- krsort($domain_sort_array);
- }
-
- $i = 0;
- foreach ($domain_sort_array as $sortkey => $domain_array) {
- if ($paging->checkDisplay($i)) {
-
- if (isset($domain_array[$sortkey])) {
- $row = \Froxlor\PhpHelper::htmlentitiesArray($domain_array[$sortkey]);
- if (Settings::Get('system.awstats_enabled') == '1') {
- $statsapp = 'awstats';
- } else {
- $statsapp = 'webalizer';
- }
- eval("\$domains.=\"" . \Froxlor\UI\Template::getTemplate("domains/domains_delimiter") . "\";");
- }
-
- if ($paging->sortfield == 'd.domain' && $paging->sortorder == 'asc') {
- ksort($domain_array);
- } elseif ($paging->sortfield == 'd.domain' && $paging->sortorder == 'desc') {
- krsort($domain_array);
- }
-
- foreach ($domain_array as $row) {
- if (strpos($row['documentroot'], $userinfo['documentroot']) === 0) {
- $row['documentroot'] = \Froxlor\FileDir::makeCorrectDir(str_replace($userinfo['documentroot'], "/", $row['documentroot']));
- }
-
- // get ssl-ips if activated
- $show_ssledit = false;
- if (Settings::Get('system.use_ssl') == '1' && \Froxlor\Domain\Domain::domainHasSslIpPort($row['id']) && $row['caneditdomain'] == '1' && $row['letsencrypt'] == 0) {
- $show_ssledit = true;
- }
- $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
- eval("\$domains.=\"" . \Froxlor\UI\Template::getTemplate("domains/domains_domain") . "\";");
- }
- }
-
- $i += count($domain_array);
}
eval("echo \"" . \Froxlor\UI\Template::getTemplate("domains/domainlist") . "\";");
@@ -459,7 +389,9 @@ if ($page == 'overview') {
}
$alias_stmt = Database::prepare("SELECT COUNT(`id`) AS count FROM `" . TABLE_PANEL_DOMAINS . "` WHERE `aliasdomain`= :aliasdomain");
- $alias_check = Database::pexecute_first($alias_stmt, array("aliasdomain" => $result['id']));
+ $alias_check = Database::pexecute_first($alias_stmt, array(
+ "aliasdomain" => $result['id']
+ ));
$alias_check = $alias_check['count'];
$domainip = $result_ipandport['ip'];
@@ -547,3 +479,53 @@ if ($page == 'overview') {
require_once __DIR__ . '/logfiles_viewer.php';
}
+
+function formatDomainEntry(&$row, &$idna_convert)
+{
+ $row['domain'] = $idna_convert->decode($row['domain']);
+ $row['aliasdomain'] = $idna_convert->decode($row['aliasdomain']);
+ $row['domainalias'] = $idna_convert->decode($row['domainalias']);
+
+ /**
+ * check for set ssl-certs to show different state-icons
+ */
+ // nothing (ssl_global)
+ $row['domain_hascert'] = 0;
+ $ssl_stmt = Database::prepare("SELECT * FROM `" . TABLE_PANEL_DOMAIN_SSL_SETTINGS . "` WHERE `domainid` = :domainid");
+ Database::pexecute($ssl_stmt, array(
+ "domainid" => $row['id']
+ ));
+ $ssl_result = $ssl_stmt->fetch(PDO::FETCH_ASSOC);
+ if (is_array($ssl_result) && isset($ssl_result['ssl_cert_file']) && $ssl_result['ssl_cert_file'] != '') {
+ // own certificate (ssl_customer_green)
+ $row['domain_hascert'] = 1;
+ } else {
+ // check if it's parent has one set (shared)
+ if ($row['parentdomainid'] != 0) {
+ $ssl_stmt = Database::prepare("SELECT * FROM `" . TABLE_PANEL_DOMAIN_SSL_SETTINGS . "` WHERE `domainid` = :domainid");
+ Database::pexecute($ssl_stmt, array(
+ "domainid" => $row['parentdomainid']
+ ));
+ $ssl_result = $ssl_stmt->fetch(PDO::FETCH_ASSOC);
+ if (is_array($ssl_result) && isset($ssl_result['ssl_cert_file']) && $ssl_result['ssl_cert_file'] != '') {
+ // parent has a certificate (ssl_shared)
+ $row['domain_hascert'] = 2;
+ }
+ }
+ }
+
+ $row['termination_date'] = str_replace("0000-00-00", "", $row['termination_date']);
+
+ $row['termination_css'] = "";
+ if ($row['termination_date'] != "") {
+ $cdate = strtotime($row['termination_date'] . " 23:59:59");
+ $today = time();
+
+ if ($cdate < $today) {
+ $row['termination_css'] = 'domain-expired';
+ } else {
+ $row['termination_css'] = 'domain-canceled';
+ }
+ }
+}
+
diff --git a/customer_email.php b/customer_email.php
index 25d808ee..7c143301 100644
--- a/customer_email.php
+++ b/customer_email.php
@@ -19,6 +19,7 @@
define('AREA', 'customer');
require './lib/init.php';
+use Froxlor\Api\Commands\SubDomains;
use Froxlor\Database\Database;
use Froxlor\Settings;
use Froxlor\Api\Commands\Emails as Emails;
@@ -47,23 +48,27 @@ if ($page == 'overview') {
'm.email_full' => $lng['emails']['emailaddress'],
'm.destination' => $lng['emails']['forwarders']
);
- $paging = new \Froxlor\UI\Paging($userinfo, TABLE_MAIL_VIRTUAL, $fields);
- $result_stmt = Database::prepare('SELECT `m`.`id`, `m`.`domainid`, `m`.`email`, `m`.`email_full`, `m`.`iscatchall`, `u`.`quota`, `m`.`destination`, `m`.`popaccountid`, `d`.`domain`, `u`.`mboxsize` FROM `' . TABLE_MAIL_VIRTUAL . '` `m`
- LEFT JOIN `' . TABLE_PANEL_DOMAINS . '` `d` ON (`m`.`domainid` = `d`.`id`)
- LEFT JOIN `' . TABLE_MAIL_USERS . '` `u` ON (`m`.`popaccountid` = `u`.`id`)
- WHERE `m`.`customerid`= :customerid ' . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit());
- Database::pexecute($result_stmt, array(
- "customerid" => $userinfo['customerid']
- ));
- $emailscount = Database::num_rows();
- $paging->setEntries($emailscount);
+ try {
+ // get total count
+ $json_result = Emails::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 = Emails::getLocal($userinfo, $paging->getApiCommandParams())->listing();
+ } 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);
$emails = array();
+ $emailscount = $paging->getEntries();
- while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) {
+ foreach ($result['list'] as $row) {
if (! isset($emails[$row['domain']]) || ! is_array($emails[$row['domain']])) {
$emails[$row['domain']] = array();
}
@@ -77,7 +82,6 @@ if ($page == 'overview') {
ksort($emails);
}
- $i = 0;
$count = 0;
$accounts = '';
$emails_count = 0;
@@ -90,53 +94,51 @@ if ($page == 'overview') {
}
foreach ($emailaddresses as $row) {
- if ($paging->checkDisplay($i)) {
- if ($domainname != $idna_convert->decode($row['domain'])) {
- $domainname = $idna_convert->decode($row['domain']);
- eval("\$accounts.=\"" . \Froxlor\UI\Template::getTemplate("email/emails_domain") . "\";");
- }
-
- $emails_count ++;
- $row['email'] = $idna_convert->decode($row['email']);
- $row['email_full'] = $idna_convert->decode($row['email_full']);
- $row['destination'] = explode(' ', $row['destination']);
- uasort($row['destination'], 'strcasecmp');
-
- $dest_list = $row['destination'];
- foreach ($dest_list as $dest_id => $destination) {
- $row['destination'][$dest_id] = $idna_convert->decode($row['destination'][$dest_id]);
-
- if ($row['destination'][$dest_id] == $row['email_full']) {
- unset($row['destination'][$dest_id]);
- }
- }
-
- $destinations_count = count($row['destination']);
- $row['destination'] = implode(', ', $row['destination']);
-
- if (strlen($row['destination']) > 35) {
- $row['destination'] = substr($row['destination'], 0, 32) . '... (' . $destinations_count . ')';
- }
-
- $row['mboxsize'] = \Froxlor\PhpHelper::sizeReadable($row['mboxsize'], 'GiB', 'bi', '%01.' . (int) Settings::Get('panel.decimal_places') . 'f %s');
-
- $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
- eval("\$accounts.=\"" . \Froxlor\UI\Template::getTemplate("email/emails_email") . "\";");
- $count ++;
+ if ($domainname != $idna_convert->decode($row['domain'])) {
+ $domainname = $idna_convert->decode($row['domain']);
+ eval("\$accounts.=\"" . \Froxlor\UI\Template::getTemplate("email/emails_domain") . "\";");
}
- $i ++;
+ $emails_count ++;
+ $row['email'] = $idna_convert->decode($row['email']);
+ $row['email_full'] = $idna_convert->decode($row['email_full']);
+ $row['destination'] = explode(' ', $row['destination']);
+ uasort($row['destination'], 'strcasecmp');
+
+ $dest_list = $row['destination'];
+ foreach ($dest_list as $dest_id => $destination) {
+ $row['destination'][$dest_id] = $idna_convert->decode($row['destination'][$dest_id]);
+
+ if ($row['destination'][$dest_id] == $row['email_full']) {
+ unset($row['destination'][$dest_id]);
+ }
+ }
+
+ $destinations_count = count($row['destination']);
+ $row['destination'] = implode(', ', $row['destination']);
+
+ if (strlen($row['destination']) > 35) {
+ $row['destination'] = substr($row['destination'], 0, 32) . '... (' . $destinations_count . ')';
+ }
+
+ $row['mboxsize'] = \Froxlor\PhpHelper::sizeReadable($row['mboxsize'], 'GiB', 'bi', '%01.' . (int) Settings::Get('panel.decimal_places') . 'f %s');
+
+ $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
+ eval("\$accounts.=\"" . \Froxlor\UI\Template::getTemplate("email/emails_email") . "\";");
+ $count ++;
}
}
- $emaildomains_count_stmt = Database::prepare("SELECT COUNT(`id`) AS `count` FROM `" . TABLE_PANEL_DOMAINS . "`
- WHERE `customerid`= :customerid
- AND `isemaildomain`='1' ORDER BY `domain` ASC");
- Database::pexecute($emaildomains_count_stmt, array(
- "customerid" => $userinfo['customerid']
- ));
- $emaildomains_count = $emaildomains_count_stmt->fetch(PDO::FETCH_ASSOC);
- $emaildomains_count = $emaildomains_count['count'];
+ $json_result = SubDomains::getLocal($userinfo, [
+ 'sql_search' => [
+ 'd.isemaildomain' => [
+ 'value' => 1,
+ 'op' => '='
+ ]
+ ]
+ ])->listing();
+ $result = json_decode($json_result, true)['data'];
+ $emaildomains_count = $result['count'];
eval("echo \"" . \Froxlor\UI\Template::getTemplate("email/emails") . "\";");
} elseif ($action == 'delete' && $id != 0) {
diff --git a/customer_extras.php b/customer_extras.php
index d56b7a71..87db5b3d 100644
--- a/customer_extras.php
+++ b/customer_extras.php
@@ -19,7 +19,6 @@
define('AREA', 'customer');
require './lib/init.php';
-use Froxlor\Database\Database;
use Froxlor\Settings;
use Froxlor\Api\Commands\DirOptions as DirOptions;
use Froxlor\Api\Commands\DirProtections as DirProtections;
@@ -52,33 +51,34 @@ if ($page == 'overview') {
'username' => $lng['login']['username'],
'path' => $lng['panel']['path']
);
- $paging = new \Froxlor\UI\Paging($userinfo, TABLE_PANEL_HTPASSWDS, $fields);
- $result_stmt = Database::prepare("SELECT * FROM `" . TABLE_PANEL_HTPASSWDS . "`
- WHERE `customerid`= :customerid " . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit());
- Database::pexecute($result_stmt, array(
- "customerid" => $userinfo['customerid']
- ));
- $paging->setEntries(Database::num_rows());
+ try {
+ // get total count
+ $json_result = DirProtections::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 = DirProtections::getLocal($userinfo, $paging->getApiCommandParams())->listing();
+ } 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);
- $i = 0;
$count = 0;
$htpasswds = '';
- while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) {
- if ($paging->checkDisplay($i)) {
- if (strpos($row['path'], $userinfo['documentroot']) === 0) {
- $row['path'] = str_replace($userinfo['documentroot'], "/", $row['path']);
- }
- $row['path'] = \Froxlor\FileDir::makeCorrectDir($row['path']);
- $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
- eval("\$htpasswds.=\"" . \Froxlor\UI\Template::getTemplate("extras/htpasswds_htpasswd") . "\";");
- $count ++;
+ foreach ($result['list'] as $row) {
+ if (strpos($row['path'], $userinfo['documentroot']) === 0) {
+ $row['path'] = str_replace($userinfo['documentroot'], "/", $row['path']);
}
-
- $i ++;
+ $row['path'] = \Froxlor\FileDir::makeCorrectDir($row['path']);
+ $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
+ eval("\$htpasswds.=\"" . \Froxlor\UI\Template::getTemplate("extras/htpasswds_htpasswd") . "\";");
+ $count ++;
}
eval("echo \"" . \Froxlor\UI\Template::getTemplate("extras/htpasswds") . "\";");
@@ -192,39 +192,40 @@ if ($page == 'overview') {
'error500path' => $lng['extras']['error500path'],
'options_cgi' => $lng['extras']['execute_perl']
);
- $paging = new \Froxlor\UI\Paging($userinfo, TABLE_PANEL_HTACCESS, $fields);
- $result_stmt = Database::prepare("SELECT * FROM `" . TABLE_PANEL_HTACCESS . "`
- WHERE `customerid`= :customerid " . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit());
- Database::pexecute($result_stmt, array(
- "customerid" => $userinfo['customerid']
- ));
- $paging->setEntries(Database::num_rows());
+ try {
+ // get total count
+ $json_result = DirOptions::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 = DirOptions::getLocal($userinfo, $paging->getApiCommandParams())->listing();
+ } 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);
- $i = 0;
$count = 0;
$htaccess = '';
$cperlenabled = \Froxlor\Customer\Customer::customerHasPerlEnabled($userinfo['customerid']);
- while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) {
- if ($paging->checkDisplay($i)) {
- if (strpos($row['path'], $userinfo['documentroot']) === 0) {
- $row['path'] = str_replace($userinfo['documentroot'], "/", $row['path']);
- }
- $row['path'] = \Froxlor\FileDir::makeCorrectDir($row['path']);
- $row['options_indexes'] = str_replace('1', $lng['panel']['yes'], $row['options_indexes']);
- $row['options_indexes'] = str_replace('0', $lng['panel']['no'], $row['options_indexes']);
- $row['options_cgi'] = str_replace('1', $lng['panel']['yes'], $row['options_cgi']);
- $row['options_cgi'] = str_replace('0', $lng['panel']['no'], $row['options_cgi']);
- $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
- eval("\$htaccess.=\"" . \Froxlor\UI\Template::getTemplate("extras/htaccess_htaccess") . "\";");
- $count ++;
+ foreach ($result['list'] as $row) {
+ if (strpos($row['path'], $userinfo['documentroot']) === 0) {
+ $row['path'] = str_replace($userinfo['documentroot'], "/", $row['path']);
}
-
- $i ++;
+ $row['path'] = \Froxlor\FileDir::makeCorrectDir($row['path']);
+ $row['options_indexes'] = str_replace('1', $lng['panel']['yes'], $row['options_indexes']);
+ $row['options_indexes'] = str_replace('0', $lng['panel']['no'], $row['options_indexes']);
+ $row['options_cgi'] = str_replace('1', $lng['panel']['yes'], $row['options_cgi']);
+ $row['options_cgi'] = str_replace('0', $lng['panel']['no'], $row['options_cgi']);
+ $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
+ eval("\$htaccess.=\"" . \Froxlor\UI\Template::getTemplate("extras/htaccess_htaccess") . "\";");
+ $count ++;
}
eval("echo \"" . \Froxlor\UI\Template::getTemplate("extras/htaccess") . "\";");
diff --git a/customer_ftp.php b/customer_ftp.php
index 841f465c..4cbfa2b9 100644
--- a/customer_ftp.php
+++ b/customer_ftp.php
@@ -46,39 +46,36 @@ if ($page == 'overview') {
'homedir' => $lng['panel']['path'],
'description' => $lng['panel']['ftpdesc']
);
- $paging = new \Froxlor\UI\Paging($userinfo, TABLE_FTP_USERS, $fields);
-
- $result_stmt = Database::prepare("SELECT `id`, `username`, `description`, `homedir`, `shell` FROM `" . TABLE_FTP_USERS . "`
- WHERE `customerid`= :customerid " . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit());
- Database::pexecute($result_stmt, array(
- "customerid" => $userinfo['customerid']
- ));
- $ftps_count = Database::num_rows();
- $paging->setEntries($ftps_count);
+ try {
+ // get total count
+ $json_result = Ftps::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 = Ftps::getLocal($userinfo, $paging->getApiCommandParams())->listing();
+ } catch (Exception $e) {
+ \Froxlor\UI\Response::dynamic_error($e->getMessage());
+ }
+ $result = json_decode($json_result, true)['data'];
+ $ftps_count = $paging->getEntries();
$sortcode = $paging->getHtmlSortCode($lng);
$arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s);
$searchcode = $paging->getHtmlSearchCode($lng);
$pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s);
- $i = 0;
$count = 0;
$accounts = '';
- while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) {
- if ($paging->checkDisplay($i)) {
- if (strpos($row['homedir'], $userinfo['documentroot']) === 0) {
- $row['documentroot'] = str_replace($userinfo['documentroot'], "/", $row['homedir']);
- } else {
- $row['documentroot'] = $row['homedir'];
- }
-
- $row['documentroot'] = \Froxlor\FileDir::makeCorrectDir($row['documentroot']);
-
- $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
- eval("\$accounts.=\"" . \Froxlor\UI\Template::getTemplate('ftp/accounts_account') . "\";");
- $count ++;
+ foreach ($result['list'] as $row) {
+ if (strpos($row['homedir'], $userinfo['documentroot']) === 0) {
+ $row['documentroot'] = str_replace($userinfo['documentroot'], "/", $row['homedir']);
+ } else {
+ $row['documentroot'] = $row['homedir'];
}
-
- $i ++;
+ $row['documentroot'] = \Froxlor\FileDir::makeCorrectDir($row['documentroot']);
+ $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
+ eval("\$accounts.=\"" . \Froxlor\UI\Template::getTemplate('ftp/accounts_account') . "\";");
+ $count ++;
}
eval("echo \"" . \Froxlor\UI\Template::getTemplate('ftp/accounts') . "\";");
diff --git a/customer_logger.php b/customer_logger.php
index 197e99a2..2c4bb534 100644
--- a/customer_logger.php
+++ b/customer_logger.php
@@ -19,6 +19,7 @@
define('AREA', 'customer');
require './lib/init.php';
+use Froxlor\Api\Commands\SysLog;
use Froxlor\Database\Database;
use Froxlor\Settings;
@@ -35,26 +36,25 @@ if ($page == 'log') {
'user' => $lng['logger']['user'],
'text' => $lng['logger']['action']
);
- $paging = new \Froxlor\UI\Paging($userinfo, TABLE_PANEL_LOG, $fields, null, null, 0, 'desc', 30);
- $query = 'SELECT * FROM `' . TABLE_PANEL_LOG . '` WHERE `user` = :loginname ' . $paging->getSqlWhere(true) . ' ' . $paging->getSqlOrderBy();
- $result_stmt = Database::prepare($query . ' ' . $paging->getSqlLimit());
- Database::pexecute($result_stmt, array(
- "loginname" => $userinfo['loginname']
- ));
- $result_cnt_stmt = Database::prepare($query);
- Database::pexecute($result_cnt_stmt, array(
- "loginname" => $userinfo['loginname']
- ));
- $res_cnt = $result_cnt_stmt->fetch(PDO::FETCH_ASSOC);
- $logs_count = $result_cnt_stmt->rowCount();
- $paging->setEntries($logs_count);
+ 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();
+ } 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();
- while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) {
+ foreach ($result['list'] as $row) {
if (! isset($clog[$row['action']]) || ! is_array($clog[$row['action']])) {
$clog[$row['action']] = array();
@@ -68,7 +68,6 @@ if ($page == 'log') {
ksort($clog);
}
- $i = 0;
$count = 0;
$log_count = 0;
$log = '';
@@ -113,10 +112,7 @@ if ($page == 'log') {
eval("\$log.=\"" . \Froxlor\UI\Template::getTemplate('logger/logger_log') . "\";");
$count ++;
$_action = $action;
- // }
- $i ++;
}
- $i ++;
}
eval("echo \"" . \Froxlor\UI\Template::getTemplate('logger/logger') . "\";");
diff --git a/customer_mysql.php b/customer_mysql.php
index 62644137..08eca699 100644
--- a/customer_mysql.php
+++ b/customer_mysql.php
@@ -53,20 +53,24 @@ if ($page == 'overview') {
'databasename' => $lng['mysql']['databasename'],
'description' => $lng['mysql']['databasedescription']
);
- $paging = new \Froxlor\UI\Paging($userinfo, TABLE_PANEL_DATABASES, $fields);
- $result_stmt = Database::prepare("SELECT * FROM `" . TABLE_PANEL_DATABASES . "`
- WHERE `customerid`= :customerid " . $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit());
- Database::pexecute($result_stmt, array(
- "customerid" => $userinfo['customerid']
- ));
- $mysqls_count = Database::num_rows();
- $paging->setEntries($mysqls_count);
+ try {
+ // get total count
+ $json_result = Mysqls::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 = Mysqls::getLocal($userinfo, $paging->getApiCommandParams())->listing();
+ } catch (Exception $e) {
+ \Froxlor\UI\Response::dynamic_error($e->getMessage());
+ }
+ $result = json_decode($json_result, true)['data'];
+ $mysqls_count = $paging->getEntries();
$sortcode = $paging->getHtmlSortCode($lng);
$arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s);
$searchcode = $paging->getHtmlSearchCode($lng);
$pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s);
- $i = 0;
$count = 0;
$mysqls = '';
@@ -76,21 +80,18 @@ if ($page == 'overview') {
// Begin root-session
Database::needRoot(true);
- while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) {
- if ($paging->checkDisplay($i)) {
- $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
- $mbdata_stmt = Database::prepare("SELECT SUM(data_length + index_length) as MB FROM information_schema.TABLES
+ foreach ($result['list'] as $row) {
+ $row = \Froxlor\PhpHelper::htmlentitiesArray($row);
+ $mbdata_stmt = Database::prepare("SELECT SUM(data_length + index_length) as MB FROM information_schema.TABLES
WHERE table_schema = :table_schema
GROUP BY table_schema");
- Database::pexecute($mbdata_stmt, array(
- "table_schema" => $row['databasename']
- ));
- $mbdata = $mbdata_stmt->fetch(PDO::FETCH_ASSOC);
- $row['size'] = \Froxlor\PhpHelper::sizeReadable($mbdata['MB'], 'GiB', 'bi', '%01.' . (int) Settings::Get('panel.decimal_places') . 'f %s');
- eval("\$mysqls.=\"" . \Froxlor\UI\Template::getTemplate('mysql/mysqls_database') . "\";");
- $count ++;
- }
- $i ++;
+ Database::pexecute($mbdata_stmt, array(
+ "table_schema" => $row['databasename']
+ ));
+ $mbdata = $mbdata_stmt->fetch(PDO::FETCH_ASSOC);
+ $row['size'] = \Froxlor\PhpHelper::sizeReadable($mbdata['MB'], 'GiB', 'bi', '%01.' . (int) Settings::Get('panel.decimal_places') . 'f %s');
+ eval("\$mysqls.=\"" . \Froxlor\UI\Template::getTemplate('mysql/mysqls_database') . "\";");
+ $count ++;
}
Database::needRoot(false);
// End root-session
diff --git a/dns_editor.php b/dns_editor.php
index 77f121ef..a9df2eec 100644
--- a/dns_editor.php
+++ b/dns_editor.php
@@ -37,11 +37,16 @@ $ttl = isset($_POST['record']['ttl']) ? (int) $_POST['record']['ttl'] : 18000;
$domain = \Froxlor\Dns\Dns::getAllowedDomainEntry($domain_id, AREA, $userinfo);
// select all entries
-$sel_stmt = Database::prepare("SELECT * FROM `" . TABLE_DOMAIN_DNS . "` WHERE domain_id = :did");
-Database::pexecute($sel_stmt, array(
- 'did' => $domain_id
-));
-$dom_entries = $sel_stmt->fetchAll(PDO::FETCH_ASSOC);
+try {
+ // get list
+ $json_result = DomainZones::getLocal($userinfo, [
+ 'id' => $domain_id
+ ])->listing();
+} catch (Exception $e) {
+ \Froxlor\UI\Response::dynamic_error($e->getMessage());
+}
+$result = json_decode($json_result, true)['data'];
+$dom_entries = $result['list'];
$errors = "";
$success_message = "";
@@ -117,7 +122,7 @@ $type_select_values = array(
'RP',
'SRV',
'SSHFP',
- 'TXT',
+ 'TXT'
);
asort($type_select_values);
foreach ($type_select_values as $_type) {
diff --git a/lib/Froxlor/PhpHelper.php b/lib/Froxlor/PhpHelper.php
index 4a782460..2f4c4289 100644
--- a/lib/Froxlor/PhpHelper.php
+++ b/lib/Froxlor/PhpHelper.php
@@ -4,6 +4,36 @@ namespace Froxlor;
class PhpHelper
{
+ private static $sort_key = 'id';
+
+ private static $sort_type = SORT_STRING;
+
+ /**
+ * sort an array by either natural or string sort and a given index where the value for comparison is found
+ *
+ * @param array $list
+ * @param string $key
+ *
+ * @return boolean
+ */
+ public static function sortListBy(&$list, $key = 'id')
+ {
+ self::$sort_type = Settings::Get('panel.natsorting') == 1 ? SORT_NATURAL : SORT_STRING;
+ self::$sort_key = $key;
+ return usort($list, array(
+ 'self',
+ 'sortListByGivenKey'
+ ));
+ }
+
+ private static function sortListByGivenKey($a, $b)
+ {
+ if (self::$sort_type == SORT_NATURAL) {
+ return strnatcasecmp($a[self::$sort_key], $b[self::$sort_key]);
+ }
+ return strcasecmp($a[self::$sort_key], $b[self::$sort_key]);
+ }
+
/**
* Wrapper around htmlentities to handle arrays, with the advantage that you
* can select which fields should be handled by htmlentities
diff --git a/lib/Froxlor/UI/Pagination.php b/lib/Froxlor/UI/Pagination.php
new file mode 100644
index 00000000..9632c12b
--- /dev/null
+++ b/lib/Froxlor/UI/Pagination.php
@@ -0,0 +1,313 @@
+ (2010-)
+ * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt
+ * @package API
+ * @since 0.10.0
+ *
+ */
+
+/**
+ * Class to manage pagination, limiting and ordering
+ */
+class Pagination
+{
+
+ private $data = array();
+
+ private $fields = null;
+
+ public $sortorder = 'ASC';
+
+ public $sortfield = null;
+
+ private $searchtext = null;
+
+ private $searchfield = null;
+
+ private $is_search = false;
+
+ private $pageno = 0;
+
+ private $entries = 0;
+
+ /**
+ * Create new pagination object to search/filter, limit and sort Api-listing() calls
+ *
+ * @param array $userinfo
+ * @param array $fields
+ * @param number $total_entries
+ */
+ public function __construct($userinfo, $fields = array(), $total_entries = 0)
+ {
+ $this->fields = $fields;
+ $this->entries = $total_entries;
+ $this->pageno = 1;
+ // add default limitation by settings
+ $this->addLimit(\Froxlor\Settings::Get('panel.paging'));
+ // check search request
+ $this->searchtext = '';
+ if (count($fields) > 0) {
+ $orderfields = array_keys($fields);
+ $this->searchfield = $orderfields[0];
+ }
+ if (isset($_REQUEST['searchtext']) && (preg_match('/[-_@\p{L}\p{N}*.]+$/u', $_REQUEST['searchtext']) || $_REQUEST['searchtext'] === '')) {
+ $this->searchtext = trim($_REQUEST['searchtext']);
+ }
+ if (isset($_REQUEST['searchfield']) && isset($fields[$_REQUEST['searchfield']])) {
+ $this->searchfield = $_REQUEST['searchfield'];
+ }
+ if (! empty($this->searchtext) && ! empty($this->searchfield)) {
+ $this->addSearch($this->searchtext, $this->searchfield);
+ }
+
+ // check other ordering requests
+ if (isset($_REQUEST['sortorder']) && (strtolower($_REQUEST['sortorder']) == 'desc' || strtolower($_REQUEST['sortorder']) == 'asc')) {
+ $this->sortorder = strtoupper($_REQUEST['sortorder']);
+ }
+ if (isset($_REQUEST['sortfield']) && isset($fields[$_REQUEST['sortfield']])) {
+ $this->sortfield = $_REQUEST['sortfield'];
+ $this->addOrderBy($this->sortfield, $this->sortorder);
+ } else {
+ // add default ordering by given fields
+ if (count($fields) > 0) {
+ $orderfields = array_keys($fields);
+ $this->addOrderBy($orderfields[0]);
+ }
+ }
+
+ // check current page / pages
+ if (isset($_REQUEST['pageno']) && intval($_REQUEST['pageno']) != 0) {
+ $this->pageno = intval($_REQUEST['pageno']);
+ }
+ if (($this->pageno - 1) * \Froxlor\Settings::Get('panel.paging') > $this->entries) {
+ $this->pageno = 1;
+ }
+ $this->addOffset(($this->pageno - 1) * \Froxlor\Settings::Get('panel.paging'));
+ }
+
+ /**
+ * add a field for ordering
+ *
+ * @param string $field
+ * @param string $order
+ * optional, default 'ASC'
+ *
+ * @return \Froxlor\UI\Pagination
+ */
+ public function addOrderBy($field = null, $order = 'ASC')
+ {
+ if (! isset($this->data['sql_orderby'])) {
+ $this->data['sql_orderby'] = array();
+ }
+ $this->data['sql_orderby'][$field] = $order;
+ return $this;
+ }
+
+ /**
+ * add a limit
+ *
+ * @param number $limit
+ * optional, default 0
+ *
+ * @return \Froxlor\UI\Pagination
+ */
+ public function addLimit($limit = 0)
+ {
+ $this->data['sql_limit'] = (int) $limit;
+ return $this;
+ }
+
+ /**
+ * add an offset
+ *
+ * @param number $offset
+ * optional, default 0
+ *
+ * @return \Froxlor\UI\Pagination
+ */
+ public function addOffset($offset = 0)
+ {
+ $this->data['sql_offset'] = (int) $offset;
+ return $this;
+ }
+
+ /**
+ * add a search operation
+ *
+ * @param string $searchtext
+ * @param string $field
+ * @param string $operator
+ *
+ * @return \Froxlor\UI\Pagination
+ */
+ public function addSearch($searchtext = null, $field = null, $operator = null)
+ {
+ if (! isset($this->data['sql_search'])) {
+ $this->data['sql_search'] = array();
+ }
+ $this->data['sql_search'][$field] = [
+ 'value' => $searchtext,
+ 'op' => $operator
+ ];
+ // if a search is performed, the result-entries-count is irrelevant
+ // we do not want pagination
+ $this->is_search = true;
+ return $this;
+ }
+
+ /**
+ * return number of total entries the user can access from the current resource
+ *
+ * @return number
+ */
+ public function getEntries()
+ {
+ return $this->entries;
+ }
+
+ /**
+ * Returns html code for sorting field
+ *
+ * @param array $lng
+ * Language array
+ * @return string the html sortcode
+ */
+ public function getHtmlSortCode($lng, $break = false)
+ {
+ $sortcode = '';
+ $fieldoptions = '';
+ $orderoptions = '';
+
+ foreach ($this->fields as $fieldname => $fieldcaption) {
+ $fieldoptions .= HTML::makeoption($fieldcaption, $fieldname, $this->sortfield, true, true);
+ }
+
+ $breakorws = ($break ? '
' : ' ');
+ foreach (array(
+ 'asc' => $lng['panel']['ascending'],
+ 'desc' => $lng['panel']['descending']
+ ) as $sortordertype => $sortorderdescription) {
+ $orderoptions .= HTML::makeoption($sortorderdescription, $sortordertype, $this->sortorder, true, true);
+ }
+
+ eval("\$sortcode =\"" . Template::getTemplate("misc/htmlsortcode", '1') . "\";");
+ return $sortcode;
+ }
+
+ /**
+ * Returns html code for sorting arrows
+ *
+ * @param string $baseurl
+ * URL to use as base for links
+ * @param string $field
+ * If set, only this field will be returned
+ *
+ * @return mixed An array or a string (if field is set) of html code of arrows
+ */
+ public function getHtmlArrowCode($baseurl, $field = '')
+ {
+ global $theme;
+ if ($field != '' && isset($this->fields[$field])) {
+ $baseurl = htmlspecialchars($baseurl);
+ $fieldname = htmlspecialchars($field);
+ eval("\$arrowcode =\"" . Template::getTemplate("misc/htmlarrowcode", '1') . "\";");
+ } else {
+ $baseurl = htmlspecialchars($baseurl);
+ $arrowcode = array();
+ foreach ($this->fields as $fieldname => $fieldcaption) {
+ $fieldname = htmlspecialchars($fieldname);
+ eval("\$arrowcode[\$fieldname] =\"" . Template::getTemplate("misc/htmlarrowcode", '1') . "\";");
+ }
+ }
+ return $arrowcode;
+ }
+
+ /**
+ * Returns html code for searching field
+ *
+ * @param array $lng
+ * Language array
+ *
+ * @return string the html searchcode
+ */
+ public function getHtmlSearchCode($lng)
+ {
+ $searchcode = '';
+ $fieldoptions = '';
+ $searchtext = htmlspecialchars($this->searchtext);
+ foreach ($this->fields as $fieldname => $fieldcaption) {
+ $fieldoptions .= HTML::makeoption($fieldcaption, $fieldname, $this->searchfield, true, true);
+ }
+ eval("\$searchcode =\"" . Template::getTemplate("misc/htmlsearchcode", '1') . "\";");
+ return $searchcode;
+ }
+
+ /**
+ * Returns html code for paging
+ *
+ * @param string $baseurl
+ * URL to use as base for links
+ *
+ * @return string the html pagingcode
+ */
+ public function getHtmlPagingCode($baseurl)
+ {
+ if (\Froxlor\Settings::Get('panel.paging') == 0 || $this->is_search) {
+ return '';
+ } else {
+ $pages = intval($this->getEntries() / \Froxlor\Settings::Get('panel.paging'));
+ }
+
+ if ($this->getEntries() % \Froxlor\Settings::Get('panel.paging') != 0) {
+ $pages ++;
+ }
+
+ if ($pages > 1) {
+
+ $start = $this->pageno - 4;
+ if ($start < 1) {
+ $start = 1;
+ }
+
+ $stop = $this->pageno + 4;
+ if ($stop > $pages) {
+ $stop = $pages;
+ }
+
+ $pagingcode = '« < ';
+ for ($i = $start; $i <= $stop; $i ++) {
+ if ($i != $this->pageno) {
+ $pagingcode .= ' ' . $i . ' ';
+ } else {
+ $pagingcode .= ' ' . $i . ' ';
+ }
+ }
+ $pagingcode .= ' > »';
+ } else {
+ $pagingcode = '';
+ }
+
+ return $pagingcode;
+ }
+
+ /**
+ * return parameter array for API command parameters $sql_search, $sql_limit, $sql_offset and $sql_orderby
+ *
+ * @return array
+ */
+ public function getApiCommandParams()
+ {
+ return $this->data;
+ }
+}
diff --git a/lib/Froxlor/UI/Paging.php b/lib/Froxlor/UI/Paging.php
deleted file mode 100644
index 6b7e5ee7..00000000
--- a/lib/Froxlor/UI/Paging.php
+++ /dev/null
@@ -1,520 +0,0 @@
- (2003-2009)
- * @author Froxlor team (2010-)
- * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt
- * @package Classes
- *
- */
-
-/**
- * Class to manage paging system
- *
- * @package Functions
- */
-class Paging
-{
-
- /**
- * Userinfo
- *
- * @var array
- */
- private $userinfo = array();
-
- /**
- * MySQL-Table
- *
- * @var string
- */
- private $table = '';
-
- /**
- * Fields with description which should be selectable
- *
- * @var array
- */
- private $fields = array();
-
- /**
- * Entries per page
- *
- * @var int
- */
- private $entriesperpage = 0;
-
- /**
- * Number of entries of table
- *
- * @var int
- */
- private $entries = 0;
-
- /**
- * Sortorder, asc or desc
- *
- * @var string
- */
- public $sortorder = 'asc';
-
- /**
- * Sortfield
- *
- * @var string
- */
- public $sortfield = '';
-
- /**
- * Searchfield
- *
- * @var string
- */
- private $searchfield = '';
-
- /**
- * Searchtext
- *
- * @var string
- */
- private $searchtext = '';
-
- /**
- * Pagenumber
- *
- * @var int
- */
- private $pageno = 0;
-
- /**
- * Switch natsorting on/off
- *
- * @var bool
- */
- private $natSorting = false;
-
- private $limit = 0;
-
- /**
- * Class constructor.
- * Loads settings from request or from userdata and saves them to session.
- *
- * @param
- * array userinfo
- * @param
- * string Name of Table
- * @param
- * array Fields, in format array( 'fieldname_in_mysql' => 'field_caption' )
- * @param
- * int *deprecated* entries per page
- * @param
- * bool *deprecated* Switch natsorting on/off (global, affects all calls of sort)
- * @param int $default_field
- * default sorting-field-index
- * @param string $default_order
- * default sorting order 'asc' or 'desc'
- *
- */
- public function __construct($userinfo, $table, $fields, $entriesperpage = 0, $natSorting = false, $default_field = 0, $default_order = 'asc', $limit = 0)
- {
-
- // entries per page and natsorting-flag are not
- // passed as parameter anymore, because these are
- // from the settings anyway
- $entriesperpage = \Froxlor\Settings::Get('panel.paging');
- $natSorting = \Froxlor\Settings::Get('panel.natsorting');
-
- $this->userinfo = $userinfo;
-
- if (! is_array($this->userinfo['lastpaging'])) {
- $this->userinfo['lastpaging'] = json_decode($this->userinfo['lastpaging'], true);
- }
-
- $this->table = $table;
- $this->fields = $fields;
- $this->entriesperpage = $entriesperpage;
- $this->natSorting = $natSorting;
- $checklastpaging = (isset($this->userinfo['lastpaging']['table']) && $this->userinfo['lastpaging']['table'] == $this->table);
- $this->userinfo['lastpaging']['table'] = $this->table;
-
- if (isset($_REQUEST['sortorder']) && (strtolower($_REQUEST['sortorder']) == 'desc' || strtolower($_REQUEST['sortorder']) == 'asc')) {
- $this->sortorder = strtolower($_REQUEST['sortorder']);
- } else {
-
- if ($checklastpaging && isset($this->userinfo['lastpaging']['sortorder']) && (strtolower($this->userinfo['lastpaging']['sortorder']) == 'desc' || strtolower($this->userinfo['lastpaging']['sortorder']) == 'asc')) {
- $this->sortorder = strtolower($this->userinfo['lastpaging']['sortorder']);
- } else {
- $this->sortorder = $default_order;
- }
- }
-
- $this->userinfo['lastpaging']['sortorder'] = $this->sortorder;
-
- if (isset($_REQUEST['sortfield']) && isset($fields[$_REQUEST['sortfield']])) {
- $this->sortfield = $_REQUEST['sortfield'];
- } else {
- if ($checklastpaging && isset($this->userinfo['lastpaging']['sortfield']) && isset($fields[$this->userinfo['lastpaging']['sortfield']])) {
- $this->sortfield = $this->userinfo['lastpaging']['sortfield'];
- } else {
- $fieldnames = array_keys($fields);
- $this->sortfield = $fieldnames[$default_field];
- }
- }
-
- $this->userinfo['lastpaging']['sortfield'] = $this->sortfield;
-
- if (isset($_REQUEST['searchfield']) && isset($fields[$_REQUEST['searchfield']])) {
- $this->searchfield = $_REQUEST['searchfield'];
- } else {
- if ($checklastpaging && isset($this->userinfo['lastpaging']['searchfield']) && isset($fields[$this->userinfo['lastpaging']['searchfield']])) {
- $this->searchfield = $this->userinfo['lastpaging']['searchfield'];
- } else {
- $fieldnames = array_keys($fields);
- $this->searchfield = $fieldnames[0];
- }
- }
-
- $this->userinfo['lastpaging']['searchfield'] = $this->searchfield;
-
- if (isset($_REQUEST['searchtext']) && (preg_match('/[-_@\p{L}\p{N}*.]+$/u', $_REQUEST['searchtext']) || $_REQUEST['searchtext'] === '')) {
- $this->searchtext = trim($_REQUEST['searchtext']);
- } else {
- if ($checklastpaging && isset($this->userinfo['lastpaging']['searchtext']) && preg_match('/[-_@\p{L}\p{N}*.]+$/u', $this->userinfo['lastpaging']['searchtext'])) {
- $this->searchtext = $this->userinfo['lastpaging']['searchtext'];
- } else {
- $this->searchtext = '';
- }
- }
-
- $this->userinfo['lastpaging']['searchtext'] = $this->searchtext;
-
- if (isset($_REQUEST['pageno']) && intval($_REQUEST['pageno']) != 0) {
- $this->pageno = intval($_REQUEST['pageno']);
- } else {
- if ($checklastpaging && isset($this->userinfo['lastpaging']['pageno']) && intval($this->userinfo['lastpaging']['pageno']) != 0) {
- $this->pageno = intval($this->userinfo['lastpaging']['pageno']);
- } else {
- $this->pageno = 1;
- }
- }
-
- $this->userinfo['lastpaging']['pageno'] = $this->pageno;
- $upd_stmt = \Froxlor\Database\Database::prepare("
- UPDATE `" . TABLE_PANEL_SESSIONS . "` SET
- `lastpaging` = :lastpaging
- WHERE `hash` = :hash AND `userid` = :userid
- AND `ipaddress` = :ipaddr AND `useragent` = :ua
- AND `adminsession` = :adminsession
- ");
- $upd_data = array(
- 'lastpaging' => json_encode($this->userinfo['lastpaging']),
- 'hash' => $userinfo['hash'],
- 'userid' => $userinfo['userid'],
- 'ipaddr' => $userinfo['ipaddress'],
- 'ua' => $userinfo['useragent'],
- 'adminsession' => $userinfo['adminsession']
- );
- \Froxlor\Database\Database::pexecute($upd_stmt, $upd_data);
-
- $this->limit = $limit;
- }
-
- /**
- * Sets number of entries and adjusts pageno if the number of entries doesn't correspond to the pageno.
- *
- * @param
- * int entries
- */
- public function setEntries($entries)
- {
- $this->entries = $entries;
-
- if (($this->pageno - 1) * $this->entriesperpage > $this->entries) {
- $this->pageno = 1;
- }
-
- return true;
- }
-
- /**
- * Checks if a row should be displayed or not, used in loops
- *
- * @param
- * int number of row
- * @return bool to display or not to display, that's the question
- */
- public function checkDisplay($count)
- {
- $begin = (intval($this->pageno) - 1) * intval($this->entriesperpage);
- $end = (intval($this->pageno) * intval($this->entriesperpage));
- return (($count >= $begin && $count < $end) || $this->entriesperpage == 0);
- }
-
- /**
- * Returns condition code for sql query
- *
- * @param
- * bool should returned condition code start with WHERE (false) or AND (true)?
- * @return string the condition code
- */
- public function getSqlWhere($append = false)
- {
- if ($this->searchtext != '') {
- if ($append == true) {
- $condition = ' AND ';
- } else {
- $condition = ' WHERE ';
- }
-
- $searchfield = explode('.', $this->searchfield);
- foreach ($searchfield as $id => $field) {
- if (substr($field, - 1, 1) != '`') {
- $field .= '`';
- }
-
- if ($field[0] != '`') {
- $field = '`' . $field;
- }
-
- $searchfield[$id] = $field;
- }
-
- $searchfield = implode('.', $searchfield);
-
- $ops = array(
- '<',
- '>',
- '='
- );
-
- // check if we use an operator or not
- $useOper = 0;
- $oper = "=";
- if (in_array(substr($this->searchtext, 0, 1), $ops)) {
- $useOper = 1;
- $oper = substr($this->searchtext, 0, 1);
- }
-
- // check for diskspace and whether searchtext is a number
- // in any other case the logical-operators would make no sense
- if (strpos($searchfield, 'diskspace') > 0 && is_numeric(substr($this->searchtext, $useOper))) {
- // anything with diskspace is *1024
- $searchtext = ((int) substr($this->searchtext, $useOper)) * 1024;
- $useOper = 1;
- } elseif (strpos($searchfield, 'traffic') > 0 && is_numeric(substr($this->searchtext, $useOper))) {
- // anything with traffic is *1024*1024
- $searchtext = ((int) substr($this->searchtext, $useOper)) * 1024 * 1024;
- $useOper = 1;
- } else {
- // any other field
- $searchtext = substr($this->searchtext, $useOper);
- }
-
- if ($useOper == 1 && is_numeric(substr($this->searchtext, $useOper))) {
- // now as we use >, < or = we use the given operator and not LIKE
- $condition .= $searchfield . " " . $oper . " " . \Froxlor\Database\Database::quote($searchtext);
- } else {
- $searchtext = str_replace('*', '%', $this->searchtext);
- // append wildcards if user did not enter any
- if (strpos($searchtext, '%') === false)
- $searchtext = '%' . $searchtext . '%';
- $condition .= $searchfield . " LIKE " . \Froxlor\Database\Database::quote($searchtext);
- }
- } else {
- $condition = '';
- }
-
- return $condition;
- }
-
- /**
- * Returns "order by"-code for sql query
- *
- * @param
- * bool Switch natsorting on/off (local, affects just this call)
- * @return string the "order by"-code
- */
- public function getSqlOrderBy($natSorting = null)
- {
- $sortfield = explode('.', $this->sortfield);
- foreach ($sortfield as $id => $field) {
- if (substr($field, - 1, 1) != '`') {
- $field .= '`';
- }
-
- if ($field[0] != '`') {
- $field = '`' . $field;
- }
-
- $sortfield[$id] = $field;
- }
-
- $sortfield = implode('.', $sortfield);
- $sortorder = strtoupper($this->sortorder);
-
- if ($natSorting == true || ($natSorting === null && $this->natSorting == true)) {
- // Acts similar to php's natsort(), found in one comment at http://my.opera.com/cpr/blog/show.dml/160556
- $sortcode = "ORDER BY CONCAT( IF( ASCII( LEFT( " . $sortfield . ", 5 ) ) > 57,
- LEFT( " . $sortfield . ", 1 ), 0 ),
- IF( ASCII( RIGHT( " . $sortfield . ", 1 ) ) > 57,
- LPAD( " . $sortfield . ", 255, '0' ),
- LPAD( CONCAT( " . $sortfield . ", '-' ), 255, '0' )
- )) " . $sortorder;
- } else {
- $sortcode = 'ORDER BY ' . $sortfield . ' ' . $sortorder;
- }
-
- return $sortcode;
- }
-
- /**
- * Currently not used
- *
- * @return string always empty
- */
- public function getSqlLimit()
- {
- if ($this->limit > 0) {
- $_offset = ($this->pageno - 1) * $this->limit;
- return ' LIMIT ' . $_offset . ',' . $this->limit;
- }
- /**
- * currently not in use
- */
- return '';
- }
-
- /**
- * Returns html code for sorting field
- *
- * @param
- * array Language array
- * @return string the html sortcode
- */
- public function getHtmlSortCode($lng, $break = false)
- {
- $sortcode = '';
- $fieldoptions = '';
- $orderoptions = '';
-
- foreach ($this->fields as $fieldname => $fieldcaption) {
- $fieldoptions .= HTML::makeoption($fieldcaption, $fieldname, $this->sortfield, true, true);
- }
-
- $breakorws = ($break ? '
' : ' ');
- foreach (array(
- 'asc' => $lng['panel']['ascending'],
- 'desc' => $lng['panel']['descending']
- ) as $sortordertype => $sortorderdescription) {
- $orderoptions .= HTML::makeoption($sortorderdescription, $sortordertype, $this->sortorder, true, true);
- }
-
- eval("\$sortcode =\"" . Template::getTemplate("misc/htmlsortcode", '1') . "\";");
- return $sortcode;
- }
-
- /**
- * Returns html code for sorting arrows
- *
- * @param
- * string URL to use as base for links
- * @param
- * string If set, only this field will be returned
- * @return mixed An array or a string (if field is set) of html code of arrows
- */
- public function getHtmlArrowCode($baseurl, $field = '')
- {
- global $theme;
-
- if ($field != '' && isset($this->fields[$field])) {
- $baseurl = htmlspecialchars($baseurl);
- $fieldname = htmlspecialchars($field);
- eval("\$arrowcode =\"" . Template::getTemplate("misc/htmlarrowcode", '1') . "\";");
- } else {
- $baseurl = htmlspecialchars($baseurl);
- $arrowcode = array();
- foreach ($this->fields as $fieldname => $fieldcaption) {
- $fieldname = htmlspecialchars($fieldname);
- eval("\$arrowcode[\$fieldname] =\"" . Template::getTemplate("misc/htmlarrowcode", '1') . "\";");
- }
- }
-
- return $arrowcode;
- }
-
- /**
- * Returns html code for searching field
- *
- * @param
- * array Language array
- * @return string the html searchcode
- */
- public function getHtmlSearchCode($lng)
- {
- $searchcode = '';
- $fieldoptions = '';
- $searchtext = htmlspecialchars($this->searchtext);
- foreach ($this->fields as $fieldname => $fieldcaption) {
- $fieldoptions .= HTML::makeoption($fieldcaption, $fieldname, $this->searchfield, true, true);
- }
- eval("\$searchcode =\"" . Template::getTemplate("misc/htmlsearchcode", '1') . "\";");
- return $searchcode;
- }
-
- /**
- * Returns html code for paging
- *
- * @param
- * string URL to use as base for links
- * @return string the html pagingcode
- */
- public function getHtmlPagingCode($baseurl)
- {
- if ($this->entriesperpage == 0) {
- return '';
- } else {
- $pages = intval($this->entries / $this->entriesperpage);
- }
-
- if ($this->entries % $this->entriesperpage != 0) {
- $pages ++;
- }
-
- if ($pages > 1) {
-
- $start = $this->pageno - 4;
- if ($start < 1) {
- $start = 1;
- }
-
- $stop = $this->pageno + 4;
- if ($stop > $pages) {
- $stop = $pages;
- }
-
- $pagingcode = '« < ';
- for ($i = $start; $i <= $stop; $i ++) {
- if ($i != $this->pageno) {
- $pagingcode .= ' ' . $i . ' ';
- } else {
- $pagingcode .= ' ' . $i . ' ';
- }
- }
- $pagingcode .= ' > »';
- } else {
- $pagingcode = '';
- }
-
- return $pagingcode;
- }
-}
diff --git a/ssl_certificates.php b/ssl_certificates.php
index 7a699a78..0040d86c 100644
--- a/ssl_certificates.php
+++ b/ssl_certificates.php
@@ -19,7 +19,6 @@ if (! defined('AREA')) {
*
*/
-use Froxlor\Database\Database;
use Froxlor\Settings;
use Froxlor\Api\Commands\Certificates as Certificates;
@@ -47,35 +46,20 @@ $log->logAction(\Froxlor\FroxlorLogger::USR_ACTION, LOG_NOTICE, "viewed domains:
$fields = array(
'd.domain' => $lng['domains']['domainname']
);
-$paging = new \Froxlor\UI\Paging($userinfo, TABLE_PANEL_DOMAIN_SSL_SETTINGS, $fields);
-
-// select all my (accessable) certificates
-$certs_stmt_query = "SELECT s.*, d.domain, d.letsencrypt, c.customerid, c.loginname
- FROM `" . TABLE_PANEL_DOMAIN_SSL_SETTINGS . "` s
- LEFT JOIN `" . TABLE_PANEL_DOMAINS . "` d ON `d`.`id` = `s`.`domainid`
- LEFT JOIN `" . TABLE_PANEL_CUSTOMERS . "` c ON `c`.`customerid` = `d`.`customerid`
- WHERE ";
-
-$qry_params = array();
-
-if (AREA == 'admin' && $userinfo['customers_see_all'] == '0') {
- // admin with only customer-specific permissions
- $certs_stmt_query .= "d.adminid = :adminid ";
- $qry_params['adminid'] = $userinfo['adminid'];
-} elseif (AREA == 'customer') {
- // customer-area
- $certs_stmt_query .= "d.customerid = :cid ";
- $qry_params['cid'] = $userinfo['customerid'];
-} else {
- $certs_stmt_query .= "1 ";
+try {
+ // get total count
+ $json_result = Certificates::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 = Certificates::getLocal($userinfo, $paging->getApiCommandParams())->listing();
+} catch (Exception $e) {
+ \Froxlor\UI\Response::dynamic_error($e->getMessage());
}
+$result = json_decode($json_result, true)['data'];
-// sorting by domain-name
-$certs_stmt_query .= $paging->getSqlWhere(true) . " " . $paging->getSqlOrderBy() . " " . $paging->getSqlLimit();
-
-$certs_stmt = Database::prepare($certs_stmt_query);
-Database::pexecute($certs_stmt, $qry_params);
-$all_certs = $certs_stmt->fetchAll(PDO::FETCH_ASSOC);
+$all_certs = $result['list'];
$certificates = "";
if (count($all_certs) == 0) {
@@ -88,79 +72,73 @@ if (count($all_certs) == 0) {
$pagingcode = "";
eval("\$certificates.=\"" . \Froxlor\UI\Template::getTemplate("ssl_certificates/certs_error", true) . "\";");
} else {
- $paging->setEntries(count($all_certs));
$sortcode = $paging->getHtmlSortCode($lng);
$arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s);
$searchcode = $paging->getHtmlSearchCode($lng);
$pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s);
foreach ($all_certs as $idx => $cert) {
- if ($paging->checkDisplay($idx)) {
+ // respect froxlor-hostname
+ if ($cert['domainid'] == 0) {
+ $cert['domain'] = Settings::Get('system.hostname');
+ $cert['letsencrypt'] = Settings::Get('system.le_froxlor_enabled');
+ $cert['loginname'] = 'froxlor.panel';
+ }
- // respect froxlor-hostname
- if ($cert['domainid'] == 0) {
- $cert['domain'] = Settings::Get('system.hostname');
- $cert['letsencrypt'] = Settings::Get('system.le_froxlor_enabled');
- $cert['loginname'] = 'froxlor.panel';
+ if (empty($cert['domain']) || empty($cert['ssl_cert_file'])) {
+ // no domain found to the entry or empty entry - safely delete it from the DB
+ try {
+ Certificates::getLocal($userinfo, array(
+ 'id' => $cert['id']
+ ))->delete();
+ } catch (Exception $e) {
+ // do nothing
+ }
+ continue;
+ }
+
+ $cert_data = openssl_x509_parse($cert['ssl_cert_file']);
+
+ $cert['domain'] = $idna_convert->decode($cert['domain']);
+
+ $adminCustomerLink = "";
+ if (AREA == 'admin' && $cert['domainid'] > 0) {
+ if (! empty($cert['loginname'])) {
+ $adminCustomerLink = ' (' . $cert['loginname'] . ')';
+ }
+ }
+
+ if ($cert_data) {
+ $validFrom = date('d.m.Y H:i:s', $cert_data['validFrom_time_t']);
+ $validTo = date('d.m.Y H:i:s', $cert_data['validTo_time_t']);
+
+ $isValid = true;
+ if ($cert_data['validTo_time_t'] < time()) {
+ $isValid = false;
}
- if (empty($cert['domain']) || empty($cert['ssl_cert_file'])) {
- // no domain found to the entry or empty entry - safely delete it from the DB
- try {
- Certificates::getLocal($userinfo, array(
- 'id' => $cert['id']
- ))->delete();
- } catch (Exception $e) {
- // do nothing
- }
- continue;
- }
-
- $cert_data = openssl_x509_parse($cert['ssl_cert_file']);
-
- $cert['domain'] = $idna_convert->decode($cert['domain']);
-
- $adminCustomerLink = "";
- if (AREA == 'admin' && $cert['domainid'] > 0) {
- if (! empty($cert['loginname'])) {
- $adminCustomerLink = ' (' . $cert['loginname'] . ')';
- }
- }
-
- if ($cert_data) {
- $validFrom = date('d.m.Y H:i:s', $cert_data['validFrom_time_t']);
- $validTo = date('d.m.Y H:i:s', $cert_data['validTo_time_t']);
-
- $isValid = true;
- if ($cert_data['validTo_time_t'] < time()) {
- $isValid = false;
- }
-
- $san_list = "";
- if (isset($cert_data['extensions']['subjectAltName']) && ! empty($cert_data['extensions']['subjectAltName'])) {
- $SANs = explode(",", $cert_data['extensions']['subjectAltName']);
- $SANs = array_map('trim', $SANs);
- foreach ($SANs as $san) {
- $san = str_replace("DNS:", "", $san);
- if ($san != $cert_data['subject']['CN'] && strpos($san, "othername:") === false) {
- $san_list .= $san . "
";
- }
+ $san_list = "";
+ if (isset($cert_data['extensions']['subjectAltName']) && ! empty($cert_data['extensions']['subjectAltName'])) {
+ $SANs = explode(",", $cert_data['extensions']['subjectAltName']);
+ $SANs = array_map('trim', $SANs);
+ foreach ($SANs as $san) {
+ $san = str_replace("DNS:", "", $san);
+ if ($san != $cert_data['subject']['CN'] && strpos($san, "othername:") === false) {
+ $san_list .= $san . "
";
}
}
-
- $row = \Froxlor\PhpHelper::htmlentitiesArray($cert);
- eval("\$certificates.=\"" . \Froxlor\UI\Template::getTemplate("ssl_certificates/certs_cert", true) . "\";");
- } else {
- $message = sprintf($lng['domains']['ssl_certificate_error'], $cert['domain']);
- eval("\$certificates.=\"" . \Froxlor\UI\Template::getTemplate("ssl_certificates/certs_error", true) . "\";");
}
+
+ $row = \Froxlor\PhpHelper::htmlentitiesArray($cert);
+ eval("\$certificates.=\"" . \Froxlor\UI\Template::getTemplate("ssl_certificates/certs_cert", true) . "\";");
} else {
- continue;
+ $message = sprintf($lng['domains']['ssl_certificate_error'], $cert['domain']);
+ eval("\$certificates.=\"" . \Froxlor\UI\Template::getTemplate("ssl_certificates/certs_error", true) . "\";");
}
}
}