Compare commits
22 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a37d795ff3 | ||
|
|
d9331cca61 | ||
|
|
f169129e27 | ||
|
|
746548492b | ||
|
|
4ad8b62576 | ||
|
|
1eed3d1166 | ||
|
|
6a32720c9a | ||
|
|
e389ae4bf8 | ||
|
|
970ecb469e | ||
|
|
7e57352bc0 | ||
|
|
e3d42a3f62 | ||
|
|
456a287621 | ||
|
|
eff630da8d | ||
|
|
aa45a0302e | ||
|
|
aa14487995 | ||
|
|
10b52486b5 | ||
|
|
0af655f106 | ||
|
|
665c87cca7 | ||
|
|
1c50838d37 | ||
|
|
ac5bc78e12 | ||
|
|
a5e6ef674f | ||
|
|
03bc94e69c |
@@ -107,7 +107,7 @@ if ($page == 'admins' && $userinfo['change_serversettings'] == '1') {
|
||||
$count ++;
|
||||
}
|
||||
|
||||
$admincount = $paging->getEntries();
|
||||
$admincount = $result['count'] . " / " . $paging->getEntries();
|
||||
eval("echo \"" . \Froxlor\UI\Template::getTemplate("admins/admins") . "\";");
|
||||
} elseif ($action == 'su') {
|
||||
|
||||
|
||||
@@ -150,7 +150,7 @@ if ($page == 'customers' && $userinfo['customers'] != '0') {
|
||||
$count ++;
|
||||
}
|
||||
|
||||
$customercount = $paging->getEntries();
|
||||
$customercount = $result['count'] . " / " . $paging->getEntries();
|
||||
eval("echo \"" . \Froxlor\UI\Template::getTemplate("customers/customers") . "\";");
|
||||
} elseif ($action == 'su' && $id != 0) {
|
||||
try {
|
||||
|
||||
@@ -80,7 +80,7 @@ if ($page == 'domains' || $page == 'overview') {
|
||||
$count++;
|
||||
}
|
||||
|
||||
$domainscount = $paging->getEntries();
|
||||
$domainscount = $result['count'] . " / " . $paging->getEntries();
|
||||
|
||||
// Display the list
|
||||
eval("echo \"" . \Froxlor\UI\Template::getTemplate("domains/domains") . "\";");
|
||||
|
||||
@@ -133,10 +133,10 @@ if ($page == 'overview') {
|
||||
FROM `" . TABLE_PANEL_DOMAINS . "`
|
||||
WHERE `customerid`= :cid AND `isemaildomain` = '1'
|
||||
");
|
||||
$result = Database::pexecute_first($result_stmt, array(
|
||||
$result2 = Database::pexecute_first($result_stmt, array(
|
||||
"cid" => $userinfo['customerid']
|
||||
));
|
||||
$emaildomains_count = $result['emaildomains'];
|
||||
$emaildomains_count = $result2['emaildomains'];
|
||||
|
||||
eval("echo \"" . \Froxlor\UI\Template::getTemplate("email/emails") . "\";");
|
||||
} elseif ($action == 'delete' && $id != 0) {
|
||||
|
||||
@@ -85,10 +85,12 @@ if ($page == 'overview') {
|
||||
$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(
|
||||
$mbdata = Database::pexecute_first($mbdata_stmt, array(
|
||||
"table_schema" => $row['databasename']
|
||||
));
|
||||
$mbdata = $mbdata_stmt->fetch(PDO::FETCH_ASSOC);
|
||||
if (!$mbdata) {
|
||||
$mbdata = array('MB' => 0);
|
||||
}
|
||||
$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 ++;
|
||||
|
||||
@@ -86,22 +86,18 @@ if (! is_null($month) && ! is_null($year)) {
|
||||
|
||||
if (extension_loaded('bcmath')) {
|
||||
$traf['ftptext'] = bcdiv($row['ftp_up'], 1024, Settings::Get('panel.decimal_places')) . " MiB up/ " . bcdiv($row['ftp_down'], 1024, Settings::Get('panel.decimal_places')) . " MiB down (FTP)";
|
||||
$traf['httptext'] = bcdiv($http, 1024, Settings::Get('panel.decimal_places')) . " MiB (HTTP)";
|
||||
$traf['mailtext'] = bcdiv($mail, 1024, Settings::Get('panel.decimal_places')) . " MiB (Mail)";
|
||||
$traf['ftp'] = bcdiv($ftp, 1024, Settings::Get('panel.decimal_places'));
|
||||
$traf['http'] = bcdiv($http, 1024, Settings::Get('panel.decimal_places'));
|
||||
$traf['mail'] = bcdiv($mail, 1024, Settings::Get('panel.decimal_places'));
|
||||
$traf['byte'] = bcdiv($traf['byte'], 1024, Settings::Get('panel.decimal_places'));
|
||||
} else {
|
||||
$traf['ftptext'] = round($row['ftp_up'] / 1024, Settings::Get('panel.decimal_places')) . " MiB up/ " . round($row['ftp_down'] / 1024, Settings::Get('panel.decimal_places')) . " MiB down (FTP)";
|
||||
$traf['httptext'] = round($http / 1024, Settings::Get('panel.decimal_places')) . " MiB (HTTP)";
|
||||
$traf['mailtext'] = round($mail / 1024, Settings::Get('panel.decimal_places')) . " MiB (Mail)";
|
||||
$traf['http'] = round($http, Settings::Get('panel.decimal_places'));
|
||||
$traf['ftp'] = round($ftp, Settings::Get('panel.decimal_places'));
|
||||
$traf['mail'] = round($mail, Settings::Get('panel.decimal_places'));
|
||||
$traf['byte'] = round($traf['byte'] / 1024, Settings::Get('panel.decimal_places'));
|
||||
$traf['ftp'] = round($ftp / 1024, Settings::Get('panel.decimal_places'));
|
||||
}
|
||||
|
||||
getReadableTraffic($traf,'httptext', $http, 1024, "MiB (HTTP)");
|
||||
getReadableTraffic($traf,'http', $http, 1024);
|
||||
getReadableTraffic($traf,'mailtext', $mail, 1024, "MiB (Mail)");
|
||||
getReadableTraffic($traf,'mail', $mail, 1024);
|
||||
getReadableTraffic($traf,'byte', $traf['byte'], (1024 * 1024));
|
||||
|
||||
eval("\$traffic.=\"" . \Froxlor\UI\Template::getTemplate('traffic/traffic_month') . "\";");
|
||||
$show = $lng['traffic']['months'][intval($row['month'])] . ' ' . $row['year'];
|
||||
}
|
||||
@@ -142,22 +138,18 @@ if (! is_null($month) && ! is_null($year)) {
|
||||
|
||||
if (extension_loaded('bcmath')) {
|
||||
$traf['ftptext'] = bcdiv($ftp_up, 1024, Settings::Get('panel.decimal_places')) . " MiB up/ " . bcdiv($ftp_down, 1024, Settings::Get('panel.decimal_places')) . " MiB down (FTP)";
|
||||
$traf['httptext'] = bcdiv($http, 1024, Settings::Get('panel.decimal_places')) . " MiB (HTTP)";
|
||||
$traf['mailtext'] = bcdiv($mail, 1024, Settings::Get('panel.decimal_places')) . " MiB (Mail)";
|
||||
$traf['ftp'] = bcdiv(($ftp_up + $ftp_down), 1024, Settings::Get('panel.decimal_places'));
|
||||
$traf['http'] = bcdiv($http, 1024, Settings::Get('panel.decimal_places'));
|
||||
$traf['mail'] = bcdiv($mail, 1024, Settings::Get('panel.decimal_places'));
|
||||
$traf['byte'] = bcdiv($traf['byte'], 1024 * 1024, Settings::Get('panel.decimal_places'));
|
||||
} else {
|
||||
$traf['ftptext'] = round($ftp_up / 1024, Settings::Get('panel.decimal_places')) . " MiB up/ " . round($ftp_down / 1024, Settings::Get('panel.decimal_places')) . " MiB down (FTP)";
|
||||
$traf['httptext'] = round($http / 1024, Settings::Get('panel.decimal_places')) . " MiB (HTTP)";
|
||||
$traf['mailtext'] = round($mail / 1024, Settings::Get('panel.decimal_places')) . " MiB (Mail)";
|
||||
$traf['ftp'] = round(($ftp_up + $ftp_down) / 1024, Settings::Get('panel.decimal_places'));
|
||||
$traf['http'] = round($http / 1024, Settings::Get('panel.decimal_places'));
|
||||
$traf['mail'] = round($mail / 1024, Settings::Get('panel.decimal_places'));
|
||||
$traf['byte'] = round($traf['byte'] / (1024 * 1024), Settings::Get('panel.decimal_places'));
|
||||
}
|
||||
|
||||
getReadableTraffic($traf,'httptext', $http, 1024, "MiB (HTTP)");
|
||||
getReadableTraffic($traf,'http', $http, 1024);
|
||||
getReadableTraffic($traf,'mailtext', $mail, 1024, "MiB (Mail)");
|
||||
getReadableTraffic($traf,'mail', $mail, 1024);
|
||||
getReadableTraffic($traf,'byte', $traf['byte'], (1024 * 1024));
|
||||
|
||||
eval("\$traffic.=\"" . \Froxlor\UI\Template::getTemplate('traffic/traffic_traffic') . "\";");
|
||||
}
|
||||
|
||||
@@ -167,3 +159,12 @@ if (! is_null($month) && ! is_null($year)) {
|
||||
|
||||
eval("echo \"" . \Froxlor\UI\Template::getTemplate('traffic/traffic') . "\";");
|
||||
}
|
||||
|
||||
function getReadableTraffic(&$traf, $index, $value, $divisor, $desc = "")
|
||||
{
|
||||
if (extension_loaded('bcmath')) {
|
||||
$traf[$index] = bcdiv($value, $divisor,Settings::Get('panel.decimal_places')).(!empty($desc) ? " ".$desc : "");
|
||||
} else {
|
||||
$traf[$index] = round($value / $divisor, Settings::Get('panel.decimal_places')).(!empty($desc) ? " ".$desc : "");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -704,8 +704,8 @@ opcache.interned_strings_buffer'),
|
||||
('panel', 'password_special_char', '!?<>§$%+#=@'),
|
||||
('panel', 'customer_hide_options', ''),
|
||||
('panel', 'is_configured', '0'),
|
||||
('panel', 'version', '0.10.19'),
|
||||
('panel', 'db_version', '202005150');
|
||||
('panel', 'version', '0.10.21'),
|
||||
('panel', 'db_version', '202009070');
|
||||
|
||||
|
||||
DROP TABLE IF EXISTS `panel_tasks`;
|
||||
@@ -786,23 +786,6 @@ CREATE TABLE `panel_diskspace` (
|
||||
|
||||
|
||||
|
||||
DROP TABLE IF EXISTS `panel_diskspace_admins`;
|
||||
CREATE TABLE `panel_diskspace_admins` (
|
||||
`id` int(11) unsigned NOT NULL auto_increment,
|
||||
`adminid` int(11) unsigned NOT NULL default '0',
|
||||
`year` int(4) unsigned zerofill NOT NULL default '0000',
|
||||
`month` int(2) unsigned zerofill NOT NULL default '00',
|
||||
`day` int(2) unsigned zerofill NOT NULL default '00',
|
||||
`stamp` int(11) unsigned NOT NULL default '0',
|
||||
`webspace` bigint(30) unsigned NOT NULL default '0',
|
||||
`mail` bigint(30) unsigned NOT NULL default '0',
|
||||
`mysql` bigint(30) unsigned NOT NULL default '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `adminid` (`adminid`)
|
||||
) ENGINE=InnoDB CHARSET=utf8 COLLATE=utf8_general_ci;
|
||||
|
||||
|
||||
|
||||
DROP TABLE IF EXISTS `panel_languages`;
|
||||
CREATE TABLE `panel_languages` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
|
||||
@@ -649,3 +649,36 @@ if (\Froxlor\Froxlor::isFroxlorVersion('0.10.18')) {
|
||||
showUpdateStep("Updating from 0.10.18 to 0.10.19", false);
|
||||
\Froxlor\Froxlor::updateToVersion('0.10.19');
|
||||
}
|
||||
|
||||
if (\Froxlor\Froxlor::isDatabaseVersion('202005150')) {
|
||||
|
||||
showUpdateStep("Add new performance indexes", true);
|
||||
Database::query("ALTER TABLE panel_customers ADD INDEX guid (guid);");
|
||||
Database::query("ALTER TABLE panel_tasks ADD INDEX type (type);");
|
||||
Database::query("ALTER TABLE mail_users ADD INDEX username (username);");
|
||||
Database::query("ALTER TABLE mail_users ADD INDEX imap (imap);");
|
||||
Database::query("ALTER TABLE mail_users ADD INDEX pop3 (pop3);");
|
||||
Database::query("ALTER TABLE ftp_groups ADD INDEX gid (gid);");
|
||||
lastStepStatus(0);
|
||||
|
||||
\Froxlor\Froxlor::updateToDbVersion('202007240');
|
||||
}
|
||||
|
||||
if (\Froxlor\Froxlor::isFroxlorVersion('0.10.19')) {
|
||||
showUpdateStep("Updating from 0.10.19 to 0.10.20", false);
|
||||
\Froxlor\Froxlor::updateToVersion('0.10.20');
|
||||
}
|
||||
|
||||
if (\Froxlor\Froxlor::isDatabaseVersion('202007240')) {
|
||||
|
||||
showUpdateStep("Removing old unused table", true);
|
||||
Database::query("DROP TABLE IF EXISTS `panel_diskspace_admins`;");
|
||||
lastStepStatus(0);
|
||||
|
||||
\Froxlor\Froxlor::updateToDbVersion('202009070');
|
||||
}
|
||||
|
||||
if (\Froxlor\Froxlor::isFroxlorVersion('0.10.20')) {
|
||||
showUpdateStep("Updating from 0.10.20 to 0.10.21", false);
|
||||
\Froxlor\Froxlor::updateToVersion('0.10.21');
|
||||
}
|
||||
|
||||
4
js/html5shiv.min.js
vendored
4
js/html5shiv.min.js
vendored
@@ -1,4 +1,4 @@
|
||||
/**
|
||||
* @preserve HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
|
||||
* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
|
||||
*/
|
||||
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.2",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b)}(this,document);
|
||||
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);
|
||||
4
js/jquery.min.js
vendored
4
js/jquery.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -730,14 +730,6 @@ class Admins extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEnt
|
||||
'adminid' => $id
|
||||
), true, true);
|
||||
|
||||
// delete the diskspace usage
|
||||
$del_stmt = Database::prepare("
|
||||
DELETE FROM `" . TABLE_PANEL_DISKSPACE_ADMINS . "` WHERE `adminid` = :adminid
|
||||
");
|
||||
Database::pexecute($del_stmt, array(
|
||||
'adminid' => $id
|
||||
), true, true);
|
||||
|
||||
// set admin-id of the old admin's customer to current admins
|
||||
$upd_stmt = Database::prepare("
|
||||
UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET
|
||||
|
||||
@@ -51,7 +51,7 @@ class IpsAndPorts extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resour
|
||||
$query_fields = array();
|
||||
$result_stmt = Database::prepare("
|
||||
SELECT * FROM `" . TABLE_PANEL_IPSANDPORTS . "` " . $ip_where . $this->getSearchWhere($query_fields, $append_where) . $this->getOrderBy() . $this->getLimit());
|
||||
Database::pexecute($result_stmt, null, true, true);
|
||||
Database::pexecute($result_stmt, $query_fields, true, true);
|
||||
$result = array();
|
||||
while ($row = $result_stmt->fetch(\PDO::FETCH_ASSOC)) {
|
||||
$result[] = $row;
|
||||
|
||||
@@ -36,7 +36,7 @@ class SubDomains extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc
|
||||
* @param string $url
|
||||
* optional, overwrites path value with an URL to generate a redirect, alternatively use the path parameter also for URLs
|
||||
* @param int $openbasedir_path
|
||||
* optional, either 0 for customers-homedir or 1 for domains-docroot
|
||||
* optional, either 0 for domains-docroot or 1 for customers-homedir
|
||||
* @param int $phpsettingid
|
||||
* optional, php-settings-id, if empty the $domain value is used
|
||||
* @param int $redirectcode
|
||||
@@ -450,7 +450,7 @@ class SubDomains extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc
|
||||
* @param bool $isemaildomain
|
||||
* optional
|
||||
* @param int $openbasedir_path
|
||||
* optional, either 0 for customers-homedir or 1 for domains-docroot
|
||||
* optional, either 0 for domains-docroot or 1 for customers-homedir
|
||||
* @param int $phpsettingid
|
||||
* optional, php-settings-id, if empty the $domain value is used
|
||||
* @param int $redirectcode
|
||||
|
||||
@@ -195,18 +195,18 @@ abstract class DnsBase
|
||||
|
||||
while ($domain = $result_domains_stmt->fetch(\PDO::FETCH_ASSOC)) {
|
||||
|
||||
$privkey_filename = \Froxlor\FileDir::makeCorrectFile(Settings::Get('dkim.dkim_prefix') . '/dkim_' . $domain['dkim_id']);
|
||||
$pubkey_filename = \Froxlor\FileDir::makeCorrectFile(Settings::Get('dkim.dkim_prefix') . '/dkim_' . $domain['dkim_id'] . '.public');
|
||||
$privkey_filename = \Froxlor\FileDir::makeCorrectFile(Settings::Get('dkim.dkim_prefix') . '/dkim' . $domain['dkim_id']);
|
||||
$pubkey_filename = \Froxlor\FileDir::makeCorrectFile(Settings::Get('dkim.dkim_prefix') . '/dkim' . $domain['dkim_id'] . '.public');
|
||||
|
||||
if ($domain['dkim_privkey'] == '' || $domain['dkim_pubkey'] == '') {
|
||||
$max_dkim_id_stmt = Database::query("SELECT MAX(`dkim_id`) as `max_dkim_id` FROM `" . TABLE_PANEL_DOMAINS . "`");
|
||||
$max_dkim_id = $max_dkim_id_stmt->fetch(\PDO::FETCH_ASSOC);
|
||||
$domain['dkim_id'] = (int) $max_dkim_id['max_dkim_id'] + 1;
|
||||
$privkey_filename = \Froxlor\FileDir::makeCorrectFile(Settings::Get('dkim.dkim_prefix') . '/dkim_' . $domain['dkim_id']);
|
||||
$privkey_filename = \Froxlor\FileDir::makeCorrectFile(Settings::Get('dkim.dkim_prefix') . '/dkim' . $domain['dkim_id']);
|
||||
\Froxlor\FileDir::safe_exec('openssl genrsa -out ' . escapeshellarg($privkey_filename) . ' ' . Settings::Get('dkim.dkim_keylength'));
|
||||
$domain['dkim_privkey'] = file_get_contents($privkey_filename);
|
||||
\Froxlor\FileDir::safe_exec("chmod 0640 " . escapeshellarg($privkey_filename));
|
||||
$pubkey_filename = \Froxlor\FileDir::makeCorrectFile(Settings::Get('dkim.dkim_prefix') . '/dkim_' . $domain['dkim_id'] . '.public');
|
||||
$pubkey_filename = \Froxlor\FileDir::makeCorrectFile(Settings::Get('dkim.dkim_prefix') . '/dkim' . $domain['dkim_id'] . '.public');
|
||||
\Froxlor\FileDir::safe_exec('openssl rsa -in ' . escapeshellarg($privkey_filename) . ' -pubout -outform pem -out ' . escapeshellarg($pubkey_filename));
|
||||
$domain['dkim_pubkey'] = file_get_contents($pubkey_filename);
|
||||
\Froxlor\FileDir::safe_exec("chmod 0664 " . escapeshellarg($pubkey_filename));
|
||||
|
||||
@@ -413,7 +413,8 @@ class Apache extends HttpConfigBase
|
||||
$this->virtualhosts_data[$vhosts_filename] .= $this->processSpecialConfigTemplate($row_ipsandports['ssl_specialsettings'], $domain, $row_ipsandports['ip'], $row_ipsandports['port'], $row_ipsandports['ssl'] == '1') . "\n";
|
||||
}
|
||||
|
||||
if ($row_ipsandports['ssl_cert_file'] == '') {
|
||||
// check for required fallback
|
||||
if (($row_ipsandports['ssl_cert_file'] == '' || ! file_exists($row_ipsandports['ssl_cert_file'])) && (Settings::Get('system.le_froxlor_enabled') == '0' || $this->froxlorVhostHasLetsEncryptCert() == false)) {
|
||||
$row_ipsandports['ssl_cert_file'] = Settings::Get('system.ssl_cert_file');
|
||||
if (! file_exists($row_ipsandports['ssl_cert_file'])) {
|
||||
// explicitly disable ssl for this vhost
|
||||
@@ -950,7 +951,7 @@ class Apache extends HttpConfigBase
|
||||
}
|
||||
|
||||
if ($ssl_vhost === true && $domain['ssl'] == '1' && Settings::Get('system.use_ssl') == '1') {
|
||||
if ($domain['ssl_cert_file'] == '') {
|
||||
if ($domain['ssl_cert_file'] == '' || ! file_exists($domain['ssl_cert_file'])) {
|
||||
$domain['ssl_cert_file'] = Settings::Get('system.ssl_cert_file');
|
||||
if (! file_exists($domain['ssl_cert_file'])) {
|
||||
// explicitly disable ssl for this vhost
|
||||
|
||||
@@ -59,8 +59,11 @@ class AcmeSh extends \Froxlor\Cron\FroxlorCron
|
||||
// Let's Encrypt cronjob is combined with regeneration of webserver configuration files.
|
||||
// For debugging purposes you can use the --debug switch and the --force switch to run the cron manually.
|
||||
// check whether we MIGHT need to run although there is no task to regenerate config-files
|
||||
$needRenew = self::issueDomains();
|
||||
if ($needRenew || self::issueFroxlorVhost()) {
|
||||
$issue_froxlor = self::issueFroxlorVhost();
|
||||
$issue_domains = self::issueDomains();
|
||||
$renew_froxlor = self::renewFroxlorVhost();
|
||||
$renew_domains = self::renewDomains(true);
|
||||
if ($issue_froxlor || !empty($issue_domains) || !empty($renew_froxlor) || $renew_domains) {
|
||||
// insert task to generate certificates and vhost-configs
|
||||
\Froxlor\System\Cronjob::inserttask(1);
|
||||
}
|
||||
@@ -396,8 +399,8 @@ class AcmeSh extends \Froxlor\Cron\FroxlorCron
|
||||
");
|
||||
$froxlor_ssl = Database::pexecute_first($froxlor_ssl_settings_stmt);
|
||||
// also check for possible existing certificate
|
||||
if ($froxlor_ssl || (! $froxlor_ssl && ! self::checkFsFilesAreNewer(Settings::Get('system.hostname'), date('Y-m-d H:i:s', 0)))) {
|
||||
return ($froxlor_ssl ? $froxlor_ssl : true);
|
||||
if ($froxlor_ssl && self::checkFsFilesAreNewer(Settings::Get('system.hostname'), $froxlor_ssl['expirationdate'])) {
|
||||
return $froxlor_ssl;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
@@ -406,7 +409,7 @@ class AcmeSh extends \Froxlor\Cron\FroxlorCron
|
||||
/**
|
||||
* get a list of domains that have a lets encrypt certificate (possible renew)
|
||||
*/
|
||||
private static function renewDomains()
|
||||
private static function renewDomains($check = false)
|
||||
{
|
||||
$certificates_stmt = Database::query("
|
||||
SELECT
|
||||
@@ -434,6 +437,14 @@ class AcmeSh extends \Froxlor\Cron\FroxlorCron
|
||||
");
|
||||
$renew_certs = $certificates_stmt->fetchAll(\PDO::FETCH_ASSOC);
|
||||
if ($renew_certs) {
|
||||
if ($check) {
|
||||
foreach ($renew_certs as $cert) {
|
||||
if (self::checkFsFilesAreNewer($cert['domain'], $cert['expirationdate'])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return $renew_certs;
|
||||
}
|
||||
return array();
|
||||
@@ -491,7 +502,7 @@ class AcmeSh extends \Froxlor\Cron\FroxlorCron
|
||||
|
||||
if (is_dir($certificate_folder) && file_exists($ssl_file) && is_readable($ssl_file)) {
|
||||
$cert_data = openssl_x509_parse(file_get_contents($ssl_file));
|
||||
if ($cert_data['validTo_time_t'] > strtotime($cert_date)) {
|
||||
if ($cert_data && $cert_data['validTo_time_t'] > strtotime($cert_date)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -188,7 +188,8 @@ class Lighttpd extends HttpConfigBase
|
||||
$this->lighttpd_data[$vhost_filename] .= $this->processSpecialConfigTemplate($row_ipsandports['ssl_specialsettings'], $domain, $row_ipsandports['ip'], $row_ipsandports['port'], $row_ipsandports['ssl'] == '1') . "\n";
|
||||
}
|
||||
|
||||
if ($row_ipsandports['ssl_cert_file'] == '') {
|
||||
// check for required fallback
|
||||
if (($row_ipsandports['ssl_cert_file'] == '' || ! file_exists($row_ipsandports['ssl_cert_file'])) && (Settings::Get('system.le_froxlor_enabled') == '0' || $this->froxlorVhostHasLetsEncryptCert() == false)) {
|
||||
$row_ipsandports['ssl_cert_file'] = Settings::Get('system.ssl_cert_file');
|
||||
if (! file_exists($row_ipsandports['ssl_cert_file'])) {
|
||||
// explicitly disable ssl for this vhost
|
||||
@@ -555,7 +556,7 @@ class Lighttpd extends HttpConfigBase
|
||||
$ssl_settings = '';
|
||||
|
||||
if ($ssl_vhost === true && $domain['ssl'] == '1' && (int) Settings::Get('system.use_ssl') == 1) {
|
||||
if ($domain['ssl_cert_file'] == '') {
|
||||
if ($domain['ssl_cert_file'] == '' || ! file_exists($domain['ssl_cert_file'])) {
|
||||
$domain['ssl_cert_file'] = Settings::Get('system.ssl_cert_file');
|
||||
if (! file_exists($domain['ssl_cert_file'])) {
|
||||
// explicitly disable ssl for this vhost
|
||||
|
||||
@@ -155,7 +155,8 @@ class Nginx extends HttpConfigBase
|
||||
// we know whether it's an ssl vhost or not
|
||||
$ssl_vhost = false;
|
||||
if ($row_ipsandports['ssl'] == '1') {
|
||||
if ($row_ipsandports['ssl_cert_file'] == '') {
|
||||
// check for required fallback
|
||||
if (($row_ipsandports['ssl_cert_file'] == '' || ! file_exists($row_ipsandports['ssl_cert_file'])) && (Settings::Get('system.le_froxlor_enabled') == '0' || $this->froxlorVhostHasLetsEncryptCert() == false)) {
|
||||
$row_ipsandports['ssl_cert_file'] = Settings::Get('system.ssl_cert_file');
|
||||
if (! file_exists($row_ipsandports['ssl_cert_file'])) {
|
||||
// explicitly disable ssl for this vhost
|
||||
@@ -659,7 +660,7 @@ class Nginx extends HttpConfigBase
|
||||
{
|
||||
$sslsettings = '';
|
||||
|
||||
if ($domain_or_ip['ssl_cert_file'] == '') {
|
||||
if ($domain_or_ip['ssl_cert_file'] == '' || ! file_exists($domain_or_ip['ssl_cert_file'])) {
|
||||
$domain_or_ip['ssl_cert_file'] = Settings::Get('system.ssl_cert_file');
|
||||
if (! file_exists($domain_or_ip['ssl_cert_file'])) {
|
||||
// explicitly disable ssl for this vhost
|
||||
|
||||
@@ -108,6 +108,11 @@ class PhpInterface
|
||||
$this->_php_configs_cache[$php_config_id]['fpm_settings'] = Database::pexecute_first($stmt, array(
|
||||
'id' => $this->_php_configs_cache[$php_config_id]['fpmsettingid']
|
||||
));
|
||||
// override fpm daemon settings if set in php-config
|
||||
if ($this->_php_configs_cache[$php_config_id]['override_fpmconfig'] == 1) {
|
||||
$this->_php_configs_cache[$php_config_id]['fpm_settings']['limit_extensions'] = $this->_php_configs_cache[$php_config_id]['limit_extensions'];
|
||||
$this->_php_configs_cache[$php_config_id]['fpm_settings']['idle_timeout'] = $this->_php_configs_cache[$php_config_id]['idle_timeout'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -570,29 +570,6 @@ class TrafficCron extends \Froxlor\Cron\FroxlorCron
|
||||
}
|
||||
|
||||
if (isset($admin_diskspace[$row['adminid']])) {
|
||||
|
||||
$ins_data = array(
|
||||
'adminid' => $row['adminid'],
|
||||
'year' => date('Y', time()),
|
||||
'month' => date('m', time()),
|
||||
'day' => date('d', time()),
|
||||
'stamp' => time(),
|
||||
'webspace' => $admin_diskspace[$row['adminid']]['webspace'],
|
||||
'mail' => $admin_diskspace[$row['adminid']]['mail'],
|
||||
'mysql' => $admin_diskspace[$row['adminid']]['mysql']
|
||||
);
|
||||
$ins_stmt = Database::prepare("
|
||||
INSERT INTO `" . TABLE_PANEL_DISKSPACE_ADMINS . "` SET
|
||||
`adminid` = :adminid,
|
||||
`year` = :year,
|
||||
`month` = :month,
|
||||
`day` = :day,
|
||||
`stamp` = :stamp,
|
||||
`webspace` = :webspace,
|
||||
`mail` = :mail,
|
||||
`mysql` = :mysql
|
||||
");
|
||||
|
||||
$upd_data = array(
|
||||
'diskspace' => $admin_diskspace[$row['adminid']]['all'],
|
||||
'adminid' => $row['adminid']
|
||||
|
||||
@@ -144,7 +144,7 @@ class Dns
|
||||
}
|
||||
if (Settings::Get('dkim.use_dkim') == '1') {
|
||||
// check for DKIM content later
|
||||
self::addRequiredEntry('dkim_' . $domain['dkim_id'] . '._domainkey', 'TXT', $required_entries);
|
||||
self::addRequiredEntry('dkim' . $domain['dkim_id'] . '._domainkey', 'TXT', $required_entries);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -283,7 +283,7 @@ class Dns
|
||||
if ($record == '@SPF@') {
|
||||
$txt_content = Settings::Get('spf.spf_entry');
|
||||
$zonerecords[] = new DnsEntry('@', 'TXT', self::encloseTXTContent($txt_content));
|
||||
} elseif ($record == 'dkim_' . $domain['dkim_id'] . '._domainkey' && ! empty($dkim_entries)) {
|
||||
} elseif ($record == 'dkim' . $domain['dkim_id'] . '._domainkey' && ! empty($dkim_entries)) {
|
||||
// check for multiline entry
|
||||
$multiline = false;
|
||||
if (substr($dkim_entries[0], 0, 1) == '(') {
|
||||
|
||||
@@ -7,10 +7,10 @@ final class Froxlor
|
||||
{
|
||||
|
||||
// Main version variable
|
||||
const VERSION = '0.10.19';
|
||||
const VERSION = '0.10.21';
|
||||
|
||||
// Database version (YYYYMMDDC where C is a daily counter)
|
||||
const DBVERSION = '202005150';
|
||||
const DBVERSION = '202009070';
|
||||
|
||||
// Distribution branding-tag (used for Debian etc.)
|
||||
const BRANDING = '';
|
||||
|
||||
@@ -164,6 +164,9 @@ class Pagination
|
||||
// if a search is performed, the result-entries-count is irrelevant
|
||||
// we do not want pagination
|
||||
$this->is_search = true;
|
||||
// unset any limit as we do not have pagination when showing search-results
|
||||
unset($this->data['sql_limit']);
|
||||
unset($this->data['sql_offset']);
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,6 @@ define('TABLE_PANEL_TEMPLATES', 'panel_templates');
|
||||
define('TABLE_PANEL_TRAFFIC', 'panel_traffic');
|
||||
define('TABLE_PANEL_TRAFFIC_ADMINS', 'panel_traffic_admins');
|
||||
define('TABLE_PANEL_DISKSPACE', 'panel_diskspace');
|
||||
define('TABLE_PANEL_DISKSPACE_ADMINS', 'panel_diskspace_admins');
|
||||
define('TABLE_PANEL_LANGUAGE', 'panel_languages');
|
||||
define('TABLE_PANEL_IPSANDPORTS', 'panel_ipsandports');
|
||||
define('TABLE_PANEL_LOG', 'panel_syslog');
|
||||
|
||||
28
templates/Sparkle/assets/js/traffic.js
vendored
28
templates/Sparkle/assets/js/traffic.js
vendored
@@ -19,8 +19,8 @@ $(document).ready(function() {
|
||||
} else {
|
||||
ticks.push([i, $(row).children().first().html()]);
|
||||
}
|
||||
ftp.push([i, parseFloat(ftpd / 1024)]);
|
||||
http.push([i, parseFloat(httpd / 1024)]);
|
||||
ftp.push([i, parseFloat(ftpd)]);
|
||||
http.push([i, parseFloat(httpd)]);
|
||||
mail.push([i, parseFloat(maild)]);
|
||||
i++;
|
||||
});
|
||||
@@ -107,24 +107,16 @@ $(document).ready(function() {
|
||||
"font-size": "11px"
|
||||
}).appendTo("body");
|
||||
|
||||
$("#ftpchart, #httpchart").bind("plothover", function(event, pos, item) {
|
||||
$("#ftpchart, #httpchart, #mailchart").bind("plothover", function(event, pos, item) {
|
||||
if (item) {
|
||||
var y = item.datapoint[1].toFixed(2);
|
||||
var y = item.datapoint[1];
|
||||
var unit = 'MiB';
|
||||
if (y > 1024) {
|
||||
y /= 1024;
|
||||
unit = 'GiB';
|
||||
}
|
||||
|
||||
$("#tooltip").html(item.series.label + ": " + y + " GiB").css({
|
||||
top: item.pageY + 5,
|
||||
left: item.pageX - $("#tooltip").width() / 2
|
||||
}).fadeIn(200);
|
||||
} else {
|
||||
$("#tooltip").hide();
|
||||
}
|
||||
});
|
||||
|
||||
$("#mailchart").bind("plothover", function(event, pos, item) {
|
||||
if (item) {
|
||||
var y = item.datapoint[1].toFixed(2);
|
||||
|
||||
$("#tooltip").html(item.series.label + ": " + y + " MiB").css({
|
||||
$("#tooltip").html(item.series.label + ": " + y.toFixed(2) + " " + unit).css({
|
||||
top: item.pageY + 5,
|
||||
left: item.pageX - $("#tooltip").width() / 2
|
||||
}).fadeIn(200);
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<header>
|
||||
<h2>
|
||||
<img src="templates/{$theme}/assets/img/icons/domains_big.png" alt="" />
|
||||
{$lng['domains']['domainsettings']} ({$domains_count})
|
||||
{$lng['domains']['domainsettings']} ({$result['count']} / {$domains_count})
|
||||
</h2>
|
||||
</header>
|
||||
|
||||
|
||||
2
templates/Sparkle/customer/email/emails.tpl
vendored
2
templates/Sparkle/customer/email/emails.tpl
vendored
@@ -3,7 +3,7 @@
|
||||
<header>
|
||||
<h2>
|
||||
<img src="templates/{$theme}/assets/img/icons/emails_big.png" alt="" />
|
||||
{$lng['menue']['email']['emails']} ({$emailscount})
|
||||
{$lng['menue']['email']['emails']} ({$result['count']} / {$emailscount})
|
||||
</h2>
|
||||
</header>
|
||||
|
||||
|
||||
2
templates/Sparkle/customer/ftp/accounts.tpl
vendored
2
templates/Sparkle/customer/ftp/accounts.tpl
vendored
@@ -3,7 +3,7 @@
|
||||
<header>
|
||||
<h2>
|
||||
<img src="templates/{$theme}/assets/img/icons/group_edit_big.png" alt="" />
|
||||
{$lng['menue']['ftp']['accounts']} ({$ftps_count})
|
||||
{$lng['menue']['ftp']['accounts']} ({$result['count']} / {$ftps_count})
|
||||
</h2>
|
||||
</header>
|
||||
|
||||
|
||||
2
templates/Sparkle/customer/mysql/mysqls.tpl
vendored
2
templates/Sparkle/customer/mysql/mysqls.tpl
vendored
@@ -3,7 +3,7 @@
|
||||
<header>
|
||||
<h2>
|
||||
<img src="templates/{$theme}/assets/img/icons/mysql_big.png" alt="" />
|
||||
{$lng['menue']['mysql']['databases']} ({$mysqls_count})
|
||||
{$lng['menue']['mysql']['databases']} ({$result['count']} / {$mysqls_count})
|
||||
</h2>
|
||||
</header>
|
||||
|
||||
|
||||
@@ -63,7 +63,6 @@ Database::query("TRUNCATE TABLE `" . TABLE_FTP_QUOTATALLIES . "`;");
|
||||
Database::query("TRUNCATE TABLE `" . TABLE_MAIL_VIRTUAL . "`;");
|
||||
Database::query("TRUNCATE TABLE `" . TABLE_MAIL_USERS . "`;");
|
||||
Database::query("TRUNCATE TABLE `" . TABLE_PANEL_DISKSPACE . "`;");
|
||||
Database::query("TRUNCATE TABLE `" . TABLE_PANEL_DISKSPACE_ADMINS . "`;");
|
||||
Database::query("TRUNCATE TABLE `" . TABLE_PANEL_TRAFFIC . "`;");
|
||||
Database::query("TRUNCATE TABLE `" . TABLE_PANEL_TRAFFIC_ADMINS . "`;");
|
||||
Database::query("TRUNCATE TABLE `" . TABLE_PANEL_TASKS . "`;");
|
||||
|
||||
Reference in New Issue
Block a user