diff --git a/actions/admin/settings/100.panel.php b/actions/admin/settings/100.panel.php index d3a11445..d5be46cc 100644 --- a/actions/admin/settings/100.panel.php +++ b/actions/admin/settings/100.panel.php @@ -31,7 +31,7 @@ return array( 'type' => 'option', 'default' => 'English', 'option_mode' => 'one', - 'option_options_method' => 'getLanguages', + 'option_options_method' => array('\\Froxlor\\User', 'getLanguages'), 'save_method' => 'storeSettingField' ), 'panel_default_theme' => array( diff --git a/actions/admin/settings/130.webserver.php b/actions/admin/settings/130.webserver.php index 1001c03b..6585a571 100644 --- a/actions/admin/settings/130.webserver.php +++ b/actions/admin/settings/130.webserver.php @@ -348,7 +348,7 @@ return array( 'type' => 'option', 'default' => '1', 'option_mode' => 'one', - 'option_options_method' => 'getRedirectCodes', + 'option_options_method' => array('\\Froxlor\\Domain\\Domain', 'getRedirectCodes'), 'save_method' => 'storeSettingField' ) ) diff --git a/admin_admins.php b/admin_admins.php index 0070303b..dd39ed5c 100644 --- a/admin_admins.php +++ b/admin_admins.php @@ -92,8 +92,8 @@ if ($page == 'admins' && $userinfo['change_serversettings'] == '1') { $traffic_percent = 100; } - $row = str_replace_array('-1', 'UL', $row, 'customers domains diskspace traffic mysqls emails email_accounts email_forwarders email_quota ftps subdomains'); - $row = htmlentities_array($row); + $row = \Froxlor\PhpHelper::str_replace_array('-1', 'UL', $row, 'customers domains diskspace traffic mysqls emails email_accounts email_forwarders email_quota ftps subdomains'); + $row = \Froxlor\PhpHelper::htmlentities_array($row); $row['custom_notes'] = ($row['custom_notes'] != '') ? nl2br($row['custom_notes']) : ''; @@ -327,7 +327,7 @@ if ($page == 'admins' && $userinfo['change_serversettings'] == '1') { $ipaddress .= makeoption($row['ip'], $row['id'], $result['ip']); } - $result = htmlentities_array($result); + $result = \Froxlor\PhpHelper::htmlentities_array($result); $admin_edit_data = include_once dirname(__FILE__) . '/lib/formfields/admin/admin/formfield.admin_edit.php'; $admin_edit_form = \Froxlor\UI\HtmlForm::genHTMLForm($admin_edit_data); diff --git a/admin_cronjobs.php b/admin_cronjobs.php index 38ffbad3..f4f734ed 100644 --- a/admin_cronjobs.php +++ b/admin_cronjobs.php @@ -58,7 +58,7 @@ if ($page == 'cronjobs' || $page == 'overview') { $cmod = $row['module']; } if ($paging->checkDisplay($i)) { - $row = htmlentities_array($row); + $row = \Froxlor\PhpHelper::htmlentities_array($row); $row['lastrun'] = date('d.m.Y H:i', $row['lastrun']); $row['isactive'] = ((int) $row['isactive'] == 1) ? $lng['panel']['yes'] : $lng['panel']['no']; diff --git a/admin_customers.php b/admin_customers.php index 92b5bd79..c4eb3876 100644 --- a/admin_customers.php +++ b/admin_customers.php @@ -126,8 +126,8 @@ if ($page == 'customers' && $userinfo['customers'] != '0') { $islocked = 1; } - $row = str_replace_array('-1', 'UL', $row, 'diskspace traffic mysqls emails email_accounts email_forwarders ftps subdomains'); - $row = htmlentities_array($row); + $row = \Froxlor\PhpHelper::str_replace_array('-1', 'UL', $row, 'diskspace traffic mysqls emails email_accounts email_forwarders ftps subdomains'); + $row = \Froxlor\PhpHelper::htmlentities_array($row); // fix progress-bars if value is >100% if ($disk_percent > 100) { @@ -438,7 +438,7 @@ if ($page == 'customers' && $userinfo['customers'] != '0') { $result['mysqls'] = ''; } - $result = htmlentities_array($result); + $result = \Froxlor\PhpHelper::htmlentities_array($result); $gender_options = makeoption($lng['gender']['undef'], 0, ($result['gender'] == '0' ? true : false), true, true); $gender_options .= makeoption($lng['gender']['male'], 1, ($result['gender'] == '1' ? true : false), true, true); diff --git a/admin_domains.php b/admin_domains.php index bec5f65c..3fa10130 100644 --- a/admin_domains.php +++ b/admin_domains.php @@ -106,7 +106,7 @@ if ($page == 'domains' || $page == 'overview') { if (isset($row['domain']) && $row['domain'] != '' && $paging->checkDisplay($i)) { $row['customername'] = getCorrectFullUserDetails($row); - $row = htmlentities_array($row); + $row = \Froxlor\PhpHelper::htmlentities_array($row); // display a nice list of IP's $row['ipandport'] = str_replace("\n", "
", $row['ipandport']); eval("\$domains.=\"" . \Froxlor\UI\Template::getTemplate("domains/domains_domain") . "\";"); @@ -624,7 +624,7 @@ if ($page == 'domains' || $page == 'overview') { } } - $result = htmlentities_array($result); + $result = \Froxlor\PhpHelper::htmlentities_array($result); $domain_edit_data = include_once dirname(__FILE__) . '/lib/formfields/admin/domains/formfield.domains_edit.php'; $domain_edit_form = \Froxlor\UI\HtmlForm::genHTMLForm($domain_edit_data); @@ -667,7 +667,7 @@ if ($page == 'domains' || $page == 'overview') { } // update customer/admin counters - updateCounters(false); + \Froxlor\User::updateCounters(false); \Froxlor\System\Cronjob::inserttask('1'); \Froxlor\System\Cronjob::inserttask('4'); diff --git a/admin_index.php b/admin_index.php index 5dd4a1bf..44a79c67 100644 --- a/admin_index.php +++ b/admin_index.php @@ -115,7 +115,7 @@ if ($page == 'overview') { $userinfo['diskspace_used'] = round($userinfo['diskspace_used'] / 1024, $dec_places); $userinfo['traffic'] = round($userinfo['traffic'] / (1024 * 1024), $dec_places); $userinfo['traffic_used'] = round($userinfo['traffic_used'] / (1024 * 1024), $dec_places); - $userinfo = str_replace_array('-1', $lng['customer']['unlimited'], $userinfo, 'customers domains diskspace traffic mysqls emails email_accounts email_forwarders email_quota ftps subdomains'); + $userinfo = \Froxlor\PhpHelper::str_replace_array('-1', $lng['customer']['unlimited'], $userinfo, 'customers domains diskspace traffic mysqls emails email_accounts email_forwarders email_quota ftps subdomains'); $userinfo['custom_notes'] = ($userinfo['custom_notes'] != '') ? nl2br($userinfo['custom_notes']) : ''; diff --git a/admin_ipsandports.php b/admin_ipsandports.php index 929dcf11..56c4dec5 100644 --- a/admin_ipsandports.php +++ b/admin_ipsandports.php @@ -58,7 +58,7 @@ if ($page == 'ipsandports' || $page == 'overview') { while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) { if ($paging->checkDisplay($i)) { - $row = htmlentities_array($row); + $row = \Froxlor\PhpHelper::htmlentities_array($row); if (filter_var($row['ip'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { $row['ip'] = '[' . $row['ip'] . ']'; } @@ -146,7 +146,7 @@ if ($page == 'ipsandports' || $page == 'overview') { )); } else { - $result = htmlentities_array($result); + $result = \Froxlor\PhpHelper::htmlentities_array($result); $ipsandports_edit_data = include_once dirname(__FILE__) . '/lib/formfields/admin/ipsandports/formfield.ipsandports_edit.php'; $ipsandports_edit_form = \Froxlor\UI\HtmlForm::genHTMLForm($ipsandports_edit_data); diff --git a/admin_logger.php b/admin_logger.php index a3b1e3cc..737bf31b 100644 --- a/admin_logger.php +++ b/admin_logger.php @@ -63,7 +63,7 @@ if ($page == 'log' && $userinfo['change_serversettings'] == '1') { $_action = 0; foreach ($logrows as $row) { // if ($paging->checkDisplay($i)) { - $row = htmlentities_array($row); + $row = \Froxlor\PhpHelper::htmlentities_array($row); $row['date'] = date("d.m.y H:i:s", $row['date']); if ($_action != $action) { diff --git a/admin_message.php b/admin_message.php index c2a730f4..c03fc05e 100644 --- a/admin_message.php +++ b/admin_message.php @@ -64,7 +64,7 @@ if ($page == 'message') { $row['firstname'] = isset($row['firstname']) ? $row['firstname'] : ''; $row['company'] = isset($row['company']) ? $row['company'] : ''; - $mail->AddAddress($row['email'], getCorrectUserSalutation(array( + $mail->AddAddress($row['email'], \Froxlor\User::getCorrectUserSalutation(array( 'firstname' => $row['firstname'], 'name' => $row['name'], 'company' => $row['company'] diff --git a/admin_plans.php b/admin_plans.php index 65f40fe3..6f1ce9a1 100644 --- a/admin_plans.php +++ b/admin_plans.php @@ -58,7 +58,7 @@ if ($page == '' || $page == 'overview') { while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) { if ($paging->checkDisplay($i)) { - $row = htmlentities_array($row); + $row = \Froxlor\PhpHelper::htmlentities_array($row); $row['ts_format'] = date("d.m.Y H:i", $row['ts']); eval("\$plans.=\"" . \Froxlor\UI\Template::getTemplate("plans/plans_plan") . "\";"); $count ++; @@ -112,7 +112,7 @@ if ($page == '' || $page == 'overview') { $value_arr['diskspace'] = - 1; } - $value_arr['traffic'] = doubleval_ressource($_POST['traffic']); + $value_arr['traffic'] = $_POST['traffic']; if (isset($_POST['traffic_ul'])) { $value_arr['traffic'] = - 1; } @@ -271,7 +271,7 @@ if ($page == '' || $page == 'overview') { if ($result['name'] != '') { $result['value'] = json_decode($result['value'], true); - $result = htmlentities_array($result); + $result = \Froxlor\PhpHelper::htmlentities_array($result); foreach ($result['value'] as $index => $value) { $result[$index] = $value; @@ -290,7 +290,7 @@ if ($page == '' || $page == 'overview') { $value_arr['diskspace'] = - 1; } - $value_arr['traffic'] = doubleval_ressource($_POST['traffic']); + $value_arr['traffic'] = $_POST['traffic']; if (isset($_POST['traffic_ul'])) { $value_arr['traffic'] = - 1; } diff --git a/admin_settings.php b/admin_settings.php index 90677032..ce59db3c 100644 --- a/admin_settings.php +++ b/admin_settings.php @@ -163,7 +163,7 @@ if ($page == 'overview' && $userinfo['change_serversettings'] == '1') { if (isset($_POST['send']) && $_POST['send'] == 'send') { $log->logAction(ADM_ACTION, LOG_INFO, "updated resource-counters"); - $updatecounters = updateCounters(true); + $updatecounters = \Froxlor\User::updateCounters(true); $customers = ''; foreach ($updatecounters['customers'] as $customerid => $customer) { eval("\$customers.=\"" . \Froxlor\UI\Template::getTemplate("settings/updatecounters_row_customer") . "\";"); diff --git a/admin_templates.php b/admin_templates.php index 911fb8c3..f671774b 100644 --- a/admin_templates.php +++ b/admin_templates.php @@ -426,7 +426,7 @@ if ($action == '') { )); } else { - $result = htmlentities_array($result); + $result = \Froxlor\PhpHelper::htmlentities_array($result); $template = $lng['admin']['templates'][str_replace('_subject', '', $result['varname'])]; $subject = $result['value']; $result_stmt = Database::prepare(" @@ -442,7 +442,7 @@ if ($action == '') { // don't escape the already escaped language-string so save up before htmlentities() $language = $result['language']; - $result = htmlentities_array($result); + $result = \Froxlor\PhpHelper::htmlentities_array($result); $mailbody = $result['value']; $template_edit_data = include_once dirname(__FILE__) . '/lib/formfields/admin/templates/formfield.template_edit.php'; @@ -487,7 +487,7 @@ if ($action == '') { 's' => $s )); } else { - $row = htmlentities_array($row); + $row = \Froxlor\PhpHelper::htmlentities_array($row); $filetemplate_edit_data = include_once dirname(__FILE__) . '/lib/formfields/admin/templates/formfield.filetemplate_edit.php'; $filetemplate_edit_form = \Froxlor\UI\HtmlForm::genHTMLForm($filetemplate_edit_data); diff --git a/admin_updates.php b/admin_updates.php index 5b8e3966..989308db 100644 --- a/admin_updates.php +++ b/admin_updates.php @@ -64,7 +64,7 @@ if ($page == 'overview') { $redirect_url = 'admin_index.php?s=' . $s; eval("echo \"" . \Froxlor\UI\Template::getTemplate('update/update_end') . "\";"); - updateCounters(); + \Froxlor\User::updateCounters(); \Froxlor\System\Cronjob::inserttask('1'); @chmod('./lib/userdata.inc.php', 0440); diff --git a/api_keys.php b/api_keys.php index d7a177d4..eb73d710 100644 --- a/api_keys.php +++ b/api_keys.php @@ -206,7 +206,7 @@ if (count($all_keys) == 0) { } // escape stuff - $row = htmlentities_array($key); + $row = \Froxlor\PhpHelper::htmlentities_array($key); // shorten keys $row['_apikey'] = substr($row['apikey'], 0, 20) . '...'; diff --git a/customer_domains.php b/customer_domains.php index 76bced31..64d9d69a 100644 --- a/customer_domains.php +++ b/customer_domains.php @@ -151,7 +151,7 @@ if ($page == 'overview') { if ($paging->checkDisplay($i)) { if (isset($domain_array[$sortkey])) { - $row = htmlentities_array($domain_array[$sortkey]); + $row = \Froxlor\PhpHelper::htmlentities_array($domain_array[$sortkey]); if (Settings::Get('system.awstats_enabled') == '1') { $statsapp = 'awstats'; } else { @@ -176,7 +176,7 @@ if ($page == 'overview') { if (Settings::Get('system.use_ssl') == '1' && \Froxlor\Domain\Domain::domainHasSslIpPort($row['id']) && $row['caneditdomain'] == '1' && $row['letsencrypt'] == 0) { $show_ssledit = true; } - $row = htmlentities_array($row); + $row = \Froxlor\PhpHelper::htmlentities_array($row); eval("\$domains.=\"" . \Froxlor\UI\Template::getTemplate("domains/domains_domain") . "\";"); } } @@ -263,12 +263,12 @@ if ($page == 'overview') { )); while ($row_domain = $domains_stmt->fetch(PDO::FETCH_ASSOC)) { - $aliasdomains .= makeoption($idna_convert->decode($row_domain['domain']), $row_domain['id']); + $aliasdomains .= \Froxlor\UI\HTML::makeoption($idna_convert->decode($row_domain['domain']), $row_domain['id']); } $redirectcode = ''; if (Settings::Get('customredirect.enabled') == '1') { - $codes = getRedirectCodesArray(); + $codes = \Froxlor\Domain\Domain::getRedirectCodesArray(); foreach ($codes as $rc) { $redirectcode .= makeoption($rc['code'] . ' (' . $lng['redirect_desc'][$rc['desc']] . ')', $rc['id']); } @@ -369,7 +369,7 @@ if ($page == 'overview') { $domains .= makeoption($idna_convert->decode($row_domain['domain']), $row_domain['id'], $result['aliasdomain']); } - if (preg_match('/^https?\:\/\//', $result['documentroot']) && validateUrl($result['documentroot'])) { + if (preg_match('/^https?\:\/\//', $result['documentroot']) && \Froxlor\Validate\Form\Strings::validateUrl($result['documentroot'])) { if (Settings::Get('panel.pathedit') == 'Dropdown') { $urlvalue = $result['documentroot']; $pathSelect = \Froxlor\FileDir::makePathfield($userinfo['documentroot'], $userinfo['guid'], $userinfo['guid']); @@ -384,8 +384,8 @@ if ($page == 'overview') { $redirectcode = ''; if (Settings::Get('customredirect.enabled') == '1') { - $def_code = getDomainRedirectId($id); - $codes = getRedirectCodesArray(); + $def_code = \Froxlor\Domain\Domain::getDomainRedirectId($id); + $codes = \Froxlor\Domain\Domain::getRedirectCodesArray(); foreach ($codes as $rc) { $redirectcode .= makeoption($rc['code'] . ' (' . $lng['redirect_desc'][$rc['desc']] . ')', $rc['id'], $def_code); } @@ -411,7 +411,7 @@ if ($page == 'overview') { $result['temporary_ssl_redirect'] = $result['ssl_redirect']; $result['ssl_redirect'] = ($result['ssl_redirect'] == 0 ? 0 : 1); - $openbasedir = makeoption($lng['domain']['docroot'], 0, $result['openbasedir_path'], true) . makeoption($lng['domain']['homedir'], 1, $result['openbasedir_path'], true); + $openbasedir = \Froxlor\UI\HTML::makeoption($lng['domain']['docroot'], 0, $result['openbasedir_path'], true) . makeoption($lng['domain']['homedir'], 1, $result['openbasedir_path'], true); // create serveralias options $serveraliasoptions = ""; @@ -459,7 +459,7 @@ if ($page == 'overview') { } $domainip = $result_ipandport['ip']; - $result = htmlentities_array($result); + $result = \Froxlor\PhpHelper::htmlentities_array($result); $subdomain_edit_data = include_once dirname(__FILE__) . '/lib/formfields/customer/domains/formfield.domains_edit.php'; $subdomain_edit_form = \Froxlor\UI\HtmlForm::genHTMLForm($subdomain_edit_data); @@ -512,7 +512,7 @@ if ($page == 'overview') { $do_insert = true; } - $result = htmlentities_array($result); + $result = \Froxlor\PhpHelper::htmlentities_array($result); $ssleditor_data = include_once dirname(__FILE__) . '/lib/formfields/customer/domains/formfield.domain_ssleditor.php'; $ssleditor_form = \Froxlor\UI\HtmlForm::genHTMLForm($ssleditor_data); diff --git a/customer_email.php b/customer_email.php index b712edff..2aa52426 100644 --- a/customer_email.php +++ b/customer_email.php @@ -120,7 +120,7 @@ if ($page == 'overview') { $row['mboxsize'] = \Froxlor\PhpHelper::size_readable($row['mboxsize'], 'GiB', 'bi', '%01.' . (int) Settings::Get('panel.decimal_places') . 'f %s'); - $row = htmlentities_array($row); + $row = \Froxlor\PhpHelper::htmlentities_array($row); eval("\$accounts.=\"" . \Froxlor\UI\Template::getTemplate("email/emails_email") . "\";"); $count ++; } @@ -252,7 +252,7 @@ if ($page == 'overview') { } $destinations_count = count($result['destination']); - $result = htmlentities_array($result); + $result = \Froxlor\PhpHelper::htmlentities_array($result); $email_edit_data = include_once dirname(__FILE__) . '/lib/formfields/customer/email/formfield.emails_edit.php'; @@ -325,7 +325,7 @@ if ($page == 'overview') { } $result['email_full'] = $idna_convert->decode($result['email_full']); - $result = htmlentities_array($result); + $result = \Froxlor\PhpHelper::htmlentities_array($result); $quota = Settings::Get('system.mail_quota'); $account_add_data = include_once dirname(__FILE__) . '/lib/formfields/customer/email/formfield.emails_addaccount.php'; @@ -367,7 +367,7 @@ if ($page == 'overview') { )); } else { $result['email_full'] = $idna_convert->decode($result['email_full']); - $result = htmlentities_array($result); + $result = \Froxlor\PhpHelper::htmlentities_array($result); $account_changepw_data = include_once dirname(__FILE__) . '/lib/formfields/customer/email/formfield.emails_accountchangepasswd.php'; $account_changepw_form = \Froxlor\UI\HtmlForm::genHTMLForm($account_changepw_data); @@ -403,7 +403,7 @@ if ($page == 'overview') { )); } else { $result['email_full'] = $idna_convert->decode($result['email_full']); - $result = htmlentities_array($result); + $result = \Froxlor\PhpHelper::htmlentities_array($result); $quota_edit_data = include_once dirname(__FILE__) . '/lib/formfields/customer/email/formfield.emails_accountchangequota.php'; $quota_edit_form = \Froxlor\UI\HtmlForm::genHTMLForm($quota_edit_data); @@ -473,7 +473,7 @@ if ($page == 'overview') { )); } else { $result['email_full'] = $idna_convert->decode($result['email_full']); - $result = htmlentities_array($result); + $result = \Froxlor\PhpHelper::htmlentities_array($result); $forwarder_add_data = include_once dirname(__FILE__) . '/lib/formfields/customer/email/formfield.emails_addforwarder.php'; $forwarder_add_form = \Froxlor\UI\HtmlForm::genHTMLForm($forwarder_add_data); diff --git a/customer_extras.php b/customer_extras.php index f9cd01c1..baedab63 100644 --- a/customer_extras.php +++ b/customer_extras.php @@ -73,7 +73,7 @@ if ($page == 'overview') { $row['path'] = str_replace($userinfo['documentroot'], "/", $row['path']); } $row['path'] = \Froxlor\FileDir::makeCorrectDir($row['path']); - $row = htmlentities_array($row); + $row = \Froxlor\PhpHelper::htmlentities_array($row); eval("\$htpasswds.=\"" . \Froxlor\UI\Template::getTemplate("extras/htpasswds_htpasswd") . "\";"); $count ++; } @@ -163,7 +163,7 @@ if ($page == 'overview') { $result['path'] = str_replace($userinfo['documentroot'], "/", $result['path']); } - $result = htmlentities_array($result); + $result = \Froxlor\PhpHelper::htmlentities_array($result); $htpasswd_edit_data = include_once dirname(__FILE__) . '/lib/formfields/customer/extras/formfield.htpasswd_edit.php'; $htpasswd_edit_form = \Froxlor\UI\HtmlForm::genHTMLForm($htpasswd_edit_data); @@ -219,7 +219,7 @@ if ($page == 'overview') { $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 = htmlentities_array($row); + $row = \Froxlor\PhpHelper::htmlentities_array($row); eval("\$htaccess.=\"" . \Froxlor\UI\Template::getTemplate("extras/htaccess_htaccess") . "\";"); $count ++; } @@ -314,7 +314,7 @@ if ($page == 'overview') { * $options_indexes = makeyesno('options_indexes', '1', '0', $result['options_indexes']); * $options_cgi = makeyesno('options_cgi', '1', '0', $result['options_cgi']); */ - $result = htmlentities_array($result); + $result = \Froxlor\PhpHelper::htmlentities_array($result); $htaccess_edit_data = include_once dirname(__FILE__) . '/lib/formfields/customer/extras/formfield.htaccess_edit.php'; $htaccess_edit_form = \Froxlor\UI\HtmlForm::genHTMLForm($htaccess_edit_data); diff --git a/customer_ftp.php b/customer_ftp.php index 1688cfcb..78720651 100644 --- a/customer_ftp.php +++ b/customer_ftp.php @@ -73,7 +73,7 @@ if ($page == 'overview') { $row['documentroot'] = \Froxlor\FileDir::makeCorrectDir($row['documentroot']); - $row = htmlentities_array($row); + $row = \Froxlor\PhpHelper::htmlentities_array($row); eval("\$accounts.=\"" . \Froxlor\UI\Template::getTemplate('ftp/accounts_account') . "\";"); $count ++; } diff --git a/customer_index.php b/customer_index.php index 39e1d6ae..341593e7 100644 --- a/customer_index.php +++ b/customer_index.php @@ -100,7 +100,7 @@ if ($page == 'overview') { $userinfo['traffic'] = round($userinfo['traffic'] / (1024 * 1024), Settings::Get('panel.decimal_places')); $userinfo['traffic_used'] = round($userinfo['traffic_used'] / (1024 * 1024), Settings::Get('panel.decimal_places')); - $userinfo = str_replace_array('-1', $lng['customer']['unlimited'], $userinfo, 'diskspace traffic mysqls emails email_accounts email_forwarders email_quota ftps subdomains'); + $userinfo = \Froxlor\PhpHelper::str_replace_array('-1', $lng['customer']['unlimited'], $userinfo, 'diskspace traffic mysqls emails email_accounts email_forwarders email_quota ftps subdomains'); $userinfo['custom_notes'] = ($userinfo['custom_notes'] != '') ? nl2br($userinfo['custom_notes']) : ''; diff --git a/customer_logger.php b/customer_logger.php index 7f394d81..ebee83d2 100644 --- a/customer_logger.php +++ b/customer_logger.php @@ -76,7 +76,7 @@ if ($page == 'log') { $_action = 0; foreach ($logrows as $row) { // if ($paging->checkDisplay($i)) { - $row = htmlentities_array($row); + $row = \Froxlor\PhpHelper::htmlentities_array($row); $row['date'] = date("d.m.y H:i:s", $row['date']); if ($_action != $action) { diff --git a/customer_mysql.php b/customer_mysql.php index 61823d8d..ee582e4f 100644 --- a/customer_mysql.php +++ b/customer_mysql.php @@ -78,7 +78,7 @@ if ($page == 'overview') { Database::needRoot(true); while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) { if ($paging->checkDisplay($i)) { - $row = htmlentities_array($row); + $row = \Froxlor\PhpHelper::htmlentities_array($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"); diff --git a/index.php b/index.php index 18648b8c..c89d0c3e 100644 --- a/index.php +++ b/index.php @@ -287,7 +287,7 @@ if ($action == '2fa_entercode') { $mail->Subject = $lng['mails']['2fa']['subject']; $mail->AltBody = $mail_body; $mail->MsgHTML(str_replace("\n", "
", $mail_body)); - $mail->AddAddress($userinfo['email'], getCorrectUserSalutation($userinfo)); + $mail->AddAddress($userinfo['email'], \Froxlor\User::getCorrectUserSalutation($userinfo)); $mail->Send(); } catch (\PHPMailer\PHPMailer\Exception $e) { $mailerr_msg = $e->errorMessage(); @@ -480,7 +480,7 @@ if ($action == 'forgotpwd') { $activationlink = $protocol . '://' . $host . $port . $script . '?action=resetpwd&resetcode=' . $activationcode; $replace_arr = array( - 'SALUTATION' => getCorrectUserSalutation($user), + 'SALUTATION' => \Froxlor\User::getCorrectUserSalutation($user), 'USERNAME' => $loginname, 'LINK' => $activationlink ); @@ -516,7 +516,7 @@ if ($action == 'forgotpwd') { $mail->Subject = $mail_subject; $mail->AltBody = $mail_body; $mail->MsgHTML(str_replace("\n", "
", $mail_body)); - $mail->AddAddress($user['email'], getCorrectUserSalutation($user)); + $mail->AddAddress($user['email'], \Froxlor\User::getCorrectUserSalutation($user)); $mail->Send(); } catch (\PHPMailer\PHPMailer\Exception $e) { $mailerr_msg = $e->errorMessage(); diff --git a/lib/functions/froxlor/function.updateFunctions.php b/install/lib/updateFunctions.php similarity index 100% rename from lib/functions/froxlor/function.updateFunctions.php rename to install/lib/updateFunctions.php diff --git a/install/updatesql.php b/install/updatesql.php index b251a01b..bb023788 100644 --- a/install/updatesql.php +++ b/install/updatesql.php @@ -18,6 +18,8 @@ */ use Froxlor\FroxlorLogger; +require_once __DIR__ . '/lib/updateFunctions.php'; + if (! defined('_CRON_UPDATE')) { if (! defined('AREA') || (defined('AREA') && AREA != 'admin') || ! isset($userinfo['loginname']) || (isset($userinfo['loginname']) && $userinfo['loginname'] == '')) { header('Location: ../index.php'); diff --git a/lib/Froxlor/Api/Commands/Admins.php b/lib/Froxlor/Api/Commands/Admins.php index 289dba85..72abc358 100644 --- a/lib/Froxlor/Api/Commands/Admins.php +++ b/lib/Froxlor/Api/Commands/Admins.php @@ -737,7 +737,7 @@ class Admins extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEnt ), true, true); $this->logger()->logAction(ADM_ACTION, LOG_WARNING, "[API] deleted admin '" . $result['loginname'] . "'"); - updateCounters(); + \Froxlor\User::updateCounters(); return $this->response(200, "successfull", $result); } throw new \Exception("Not allowed to execute given command.", 403); diff --git a/lib/Froxlor/Api/Commands/Customers.php b/lib/Froxlor/Api/Commands/Customers.php index fedc4584..17526b09 100644 --- a/lib/Froxlor/Api/Commands/Customers.php +++ b/lib/Froxlor/Api/Commands/Customers.php @@ -666,7 +666,7 @@ class Customers extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resource 'FIRSTNAME' => $firstname, 'NAME' => $name, 'COMPANY' => $company, - 'SALUTATION' => getCorrectUserSalutation(array( + 'SALUTATION' => \Froxlor\User::getCorrectUserSalutation(array( 'firstname' => $firstname, 'name' => $name, 'company' => $company @@ -696,7 +696,7 @@ class Customers extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resource $this->mailer()->Subject = $mail_subject; $this->mailer()->AltBody = $mail_body; $this->mailer()->msgHTML(str_replace("\n", "
", $mail_body)); - $this->mailer()->addAddress($email, getCorrectUserSalutation(array( + $this->mailer()->addAddress($email, \Froxlor\User::getCorrectUserSalutation(array( 'firstname' => $firstname, 'name' => $name, 'company' => $company @@ -1662,7 +1662,7 @@ class Customers extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resource ), true, true); // now, recalculate the resource-usage for the old and the new admin - updateCounters(false); + \Froxlor\User::updateCounters(false); $this->logger()->logAction(ADM_ACTION, LOG_INFO, "[API] moved user '" . $c_result['loginname'] . "' from admin/reseller '" . $c_result['adminname'] . " to admin/reseller '" . $a_result['loginname'] . "'"); diff --git a/lib/Froxlor/Api/Commands/DirOptions.php b/lib/Froxlor/Api/Commands/DirOptions.php index 10af7a80..69c5ef9b 100644 --- a/lib/Froxlor/Api/Commands/DirOptions.php +++ b/lib/Froxlor/Api/Commands/DirOptions.php @@ -74,15 +74,15 @@ class DirOptions extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc $path = \Froxlor\FileDir::makeCorrectDir($customer['documentroot'] . '/' . $path); if (! empty($error404path)) { - $error404path = correctErrorDocument($error404path, true); + $error404path = $this->correctErrorDocument($error404path, true); } if (! empty($error403path)) { - $error403path = correctErrorDocument($error403path, true); + $error403path = $this->correctErrorDocument($error403path, true); } if (! empty($error500path)) { - $error500path = correctErrorDocument($error500path, true); + $error500path = $this->correctErrorDocument($error500path, true); } // check for duplicate path @@ -236,15 +236,15 @@ class DirOptions extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc $error500path = $this->getParam('error500path', true, $result['error500path']); if (! empty($error404path)) { - $error404path = correctErrorDocument($error404path, true); + $error404path = $this->correctErrorDocument($error404path, true); } if (! empty($error403path)) { - $error403path = correctErrorDocument($error403path, true); + $error403path = $this->correctErrorDocument($error403path, true); } if (! empty($error500path)) { - $error500path = correctErrorDocument($error500path, true); + $error500path = $this->correctErrorDocument($error500path, true); } if (($options_indexes != $result['options_indexes']) || ($error404path != $result['error404path']) || ($error403path != $result['error403path']) || ($error500path != $result['error500path']) || ($options_cgi != $result['options_cgi'])) { @@ -378,4 +378,46 @@ class DirOptions extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc \Froxlor\System\Cronjob::inserttask('1'); return $this->response(200, "successfull", $result); } + + /** + * this functions validates a given value as ErrorDocument + * refs #267 + * + * @param + * string error-document-string + * @param bool $throw_exception + * + * @return string error-document-string + * + */ + private function correctErrorDocument($errdoc = null, $throw_exception = false) + { + if ($errdoc !== null && $errdoc != '') { + // not a URL + if ((strtoupper(substr($errdoc, 0, 5)) != 'HTTP:' && strtoupper(substr($errdoc, 0, 6)) != 'HTTPS:') || ! \Froxlor\Validate\Form\Strings::validateUrl($errdoc)) { + // a file + if (substr($errdoc, 0, 1) != '"') { + $errdoc = \Froxlor\FileDir::makeCorrectFile($errdoc); + // apache needs a starting-slash (starting at the domains-docroot) + if (! substr($errdoc, 0, 1) == '/') { + $errdoc = '/' . $errdoc; + } + } // a string (check for ending ") + else { + // string won't work for lighty + if (Settings::Get('system.webserver') == 'lighttpd') { + \Froxlor\UI\Response::standard_error('stringerrordocumentnotvalidforlighty', '', $throw_exception); + } elseif (substr($errdoc, - 1) != '"') { + $errdoc .= '"'; + } + } + } else { + if (Settings::Get('system.webserver') == 'lighttpd') { + \Froxlor\UI\Response::standard_error('urlerrordocumentnotvalidforlighty', '', $throw_exception); + } + } + } + return $errdoc; + } + } diff --git a/lib/Froxlor/Api/Commands/Domains.php b/lib/Froxlor/Api/Commands/Domains.php index d0d48de8..a0f8073f 100644 --- a/lib/Froxlor/Api/Commands/Domains.php +++ b/lib/Froxlor/Api/Commands/Domains.php @@ -1617,7 +1617,7 @@ class Domains extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEn \Froxlor\System\Cronjob::inserttask('11', $result['domain']); $this->logger()->logAction(ADM_ACTION, LOG_INFO, "[API] deleted domain/subdomains (#" . $result['id'] . ")"); - updateCounters(); + \Froxlor\User::updateCounters(); \Froxlor\System\Cronjob::inserttask('1'); // Using nameserver, insert a task which rebuilds the server config \Froxlor\System\Cronjob::inserttask('4'); diff --git a/lib/Froxlor/Api/Commands/EmailAccounts.php b/lib/Froxlor/Api/Commands/EmailAccounts.php index 08f7e002..fb658843 100644 --- a/lib/Froxlor/Api/Commands/EmailAccounts.php +++ b/lib/Froxlor/Api/Commands/EmailAccounts.php @@ -213,7 +213,7 @@ class EmailAccounts extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Reso $_mailerror = false; $mailerr_msg = ""; try { - $this->mailer()->setFrom($admin['email'], getCorrectUserSalutation($admin)); + $this->mailer()->setFrom($admin['email'], \Froxlor\User::getCorrectUserSalutation($admin)); $this->mailer()->Subject = $mail_subject; $this->mailer()->AltBody = $mail_body; $this->mailer()->msgHTML(str_replace("\n", "
", $mail_body)); @@ -243,11 +243,11 @@ class EmailAccounts extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Reso $_mailerror = false; try { - $this->mailer()->setFrom($admin['email'], getCorrectUserSalutation($admin)); + $this->mailer()->setFrom($admin['email'], \Froxlor\User::getCorrectUserSalutation($admin)); $this->mailer()->Subject = $mail_subject; $this->mailer()->AltBody = $mail_body; $this->mailer()->msgHTML(str_replace("\n", "
", $mail_body)); - $this->mailer()->addAddress($idna_convert->encode($alternative_email), getCorrectUserSalutation($customer)); + $this->mailer()->addAddress($idna_convert->encode($alternative_email), \Froxlor\User::getCorrectUserSalutation($customer)); $this->mailer()->send(); } catch (\PHPMailer\PHPMailer\Exception $e) { $mailerr_msg = $e->errorMessage(); diff --git a/lib/Froxlor/Api/Commands/Ftps.php b/lib/Froxlor/Api/Commands/Ftps.php index 551ce3de..7db3f473 100644 --- a/lib/Froxlor/Api/Commands/Ftps.php +++ b/lib/Froxlor/Api/Commands/Ftps.php @@ -187,8 +187,8 @@ class Ftps extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEntit if ($sendinfomail == 1) { $replace_arr = array( - 'SALUTATION' => getCorrectUserSalutation($customer), - 'CUST_NAME' => getCorrectUserSalutation($customer), // < keep this for compatibility + 'SALUTATION' => \Froxlor\User::getCorrectUserSalutation($customer), + 'CUST_NAME' => \Froxlor\User::getCorrectUserSalutation($customer), // < keep this for compatibility 'USR_NAME' => $username, 'USR_PASS' => $password, 'USR_PATH' => \Froxlor\FileDir::makeCorrectDir(str_replace($customer['documentroot'], "/", $path)) @@ -204,7 +204,7 @@ class Ftps extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEntit $this->mailer()->Subject = $mail_subject; $this->mailer()->AltBody = $mail_body; $this->mailer()->msgHTML(str_replace("\n", "
", $mail_body)); - $this->mailer()->addAddress($customer['email'], getCorrectUserSalutation($customer)); + $this->mailer()->addAddress($customer['email'], \Froxlor\User::getCorrectUserSalutation($customer)); $this->mailer()->send(); } catch (\PHPMailer\PHPMailer\Exception $e) { $mailerr_msg = $e->errorMessage(); diff --git a/lib/Froxlor/Api/Commands/Mysqls.php b/lib/Froxlor/Api/Commands/Mysqls.php index 0b34b2a0..6fd4f951 100644 --- a/lib/Froxlor/Api/Commands/Mysqls.php +++ b/lib/Froxlor/Api/Commands/Mysqls.php @@ -127,8 +127,8 @@ class Mysqls extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEnt $userinfo = $customer; $replace_arr = array( - 'SALUTATION' => getCorrectUserSalutation($userinfo), - 'CUST_NAME' => getCorrectUserSalutation($userinfo), // < keep this for compatibility + 'SALUTATION' => \Froxlor\User::getCorrectUserSalutation($userinfo), + 'CUST_NAME' => \Froxlor\User::getCorrectUserSalutation($userinfo), // < keep this for compatibility 'DB_NAME' => $username, 'DB_PASS' => $password, 'DB_DESC' => $databasedescription, @@ -147,7 +147,7 @@ class Mysqls extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\ResourceEnt $this->mailer()->Subject = $mail_subject; $this->mailer()->AltBody = $mail_body; $this->mailer()->msgHTML(str_replace("\n", "
", $mail_body)); - $this->mailer()->addAddress($userinfo['email'], getCorrectUserSalutation($userinfo)); + $this->mailer()->addAddress($userinfo['email'], \Froxlor\User::getCorrectUserSalutation($userinfo)); $this->mailer()->send(); } catch (\PHPMailer\PHPMailer\Exception $e) { $mailerr_msg = $e->errorMessage(); diff --git a/lib/Froxlor/Api/Commands/SubDomains.php b/lib/Froxlor/Api/Commands/SubDomains.php index 035410db..6cfa5b85 100644 --- a/lib/Froxlor/Api/Commands/SubDomains.php +++ b/lib/Froxlor/Api/Commands/SubDomains.php @@ -302,7 +302,7 @@ class SubDomains extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc )); if ($_doredirect) { - addRedirectToDomain($subdomain_id, $redirectcode); + \Froxlor\Domain\Domain::addRedirectToDomain($subdomain_id, $redirectcode); } \Froxlor\System\Cronjob::inserttask('1'); @@ -470,7 +470,7 @@ class SubDomains extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc $isemaildomain = $this->getBoolParam('isemaildomain', true, $result['isemaildomain']); $openbasedir_path = $this->getParam('openbasedir_path', true, $result['openbasedir_path']); $phpsettingid = $this->getParam('phpsettingid', true, $result['phpsettingid']); - $redirectcode = $this->getParam('redirectcode', true, getDomainRedirectId($id)); + $redirectcode = $this->getParam('redirectcode', true, \Froxlor\Domain\Domain::getDomainRedirectId($id)); if (Settings::Get('system.use_ssl')) { $ssl_redirect = $this->getBoolParam('ssl_redirect', true, $result['ssl_redirect']); $letsencrypt = $this->getBoolParam('letsencrypt', true, $result['letsencrypt']); @@ -586,7 +586,7 @@ class SubDomains extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc // handle redirect if ($_doredirect) { - updateRedirectOfDomain($id, $redirectcode); + \Froxlor\Domain\Domain::updateRedirectOfDomain($id, $redirectcode); } if ($path != $result['documentroot'] || $isemaildomain != $result['isemaildomain'] || $wwwserveralias != $result['wwwserveralias'] || $iswildcarddomain != $result['iswildcarddomain'] || $aliasdomain != $result['aliasdomain'] || $openbasedir_path != $result['openbasedir_path'] || $ssl_redirect != $result['ssl_redirect'] || $letsencrypt != $result['letsencrypt'] || $hsts_maxage != $result['hsts'] || $hsts_sub != $result['hsts_sub'] || $hsts_preload != $result['hsts_preload'] || $phpsettingid != $result['phpsettingid']) { @@ -855,7 +855,7 @@ class SubDomains extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc { // check whether an URL was specified $_doredirect = false; - if (! empty($url) && validateUrl($url)) { + if (! empty($url) && \Froxlor\Validate\Form\Strings::validateUrl($url)) { $path = $url; $_doredirect = true; } else { @@ -863,7 +863,7 @@ class SubDomains extends \Froxlor\Api\ApiCommand implements \Froxlor\Api\Resourc } // check whether path is a real path - if (! preg_match('/^https?\:\/\//', $path) || ! validateUrl($path)) { + if (! preg_match('/^https?\:\/\//', $path) || ! \Froxlor\Validate\Form\Strings::validateUrl($path)) { if (strstr($path, ":") !== false) { \Froxlor\UI\Response::standard_error('pathmaynotcontaincolon', '', true); } diff --git a/lib/Froxlor/Cron/Http/Apache.php b/lib/Froxlor/Cron/Http/Apache.php index 70bddb49..a5f9a74f 100644 --- a/lib/Froxlor/Cron/Http/Apache.php +++ b/lib/Froxlor/Cron/Http/Apache.php @@ -144,7 +144,7 @@ class Apache extends HttpConfigBase foreach ($statusCodes as $statusCode) { if (Settings::Get('defaultwebsrverrhandler.err' . $statusCode) != '') { $defhandler = Settings::Get('defaultwebsrverrhandler.err' . $statusCode); - if (! validateUrl($defhandler)) { + if (! \Froxlor\Validate\Form\Strings::validateUrl($defhandler)) { if (substr($defhandler, 0, 1) != '"' && substr($defhandler, - 1, 1) != '"') { $defhandler = '"' . \Froxlor\FileDir::makeCorrectFile($defhandler) . '"'; } @@ -1025,7 +1025,7 @@ class Apache extends HttpConfigBase $corrected_docroot = $domain['documentroot']; // Get domain's redirect code - $code = getDomainRedirectCode($domain['id']); + $code = \Froxlor\Domain\Domain::getDomainRedirectCode($domain['id']); $modrew_red = ''; if ($code != '') { $modrew_red = ' [R=' . $code . ';L,NE]'; @@ -1190,7 +1190,7 @@ class Apache extends HttpConfigBase foreach ($statusCodes as $statusCode) { if (isset($row_diroptions['error' . $statusCode . 'path']) && $row_diroptions['error' . $statusCode . 'path'] != '') { $defhandler = $row_diroptions['error' . $statusCode . 'path']; - if (! validateUrl($defhandler)) { + if (! \Froxlor\Validate\Form\Strings::validateUrl($defhandler)) { if (substr($defhandler, 0, 1) != '"' && substr($defhandler, - 1, 1) != '"') { $defhandler = '"' . \Froxlor\FileDir::makeCorrectFile($defhandler) . '"'; } diff --git a/lib/Froxlor/Cron/Http/Lighttpd.php b/lib/Froxlor/Cron/Http/Lighttpd.php index ea933792..1d69a0c0 100644 --- a/lib/Froxlor/Cron/Http/Lighttpd.php +++ b/lib/Froxlor/Cron/Http/Lighttpd.php @@ -316,7 +316,7 @@ class Lighttpd extends HttpConfigBase } $defhandler = Settings::Get('defaultwebsrverrhandler.err404'); - if (! validateUrl($defhandler)) { + if (! \Froxlor\Validate\Form\Strings::validateUrl($defhandler)) { $defhandler = \Froxlor\FileDir::makeCorrectFile($defhandler); } $this->lighttpd_data[$vhost_filename] = 'server.error-handler-404 = "' . $defhandler . '"'; @@ -483,7 +483,7 @@ class Lighttpd extends HttpConfigBase $uri = $domain['documentroot']; // Get domain's redirect code - $code = getDomainRedirectCode($domain['id']); + $code = \Froxlor\Domain\Domain::getDomainRedirectCode($domain['id']); $vhost_content .= ' url.redirect-code = ' . $code . "\n"; $vhost_content .= ' url.redirect = (' . "\n"; @@ -701,7 +701,7 @@ class Lighttpd extends HttpConfigBase if (! empty($row['error404path'])) { $defhandler = $row['error404path']; - if (! validateUrl($defhandler)) { + if (! \Froxlor\Validate\Form\Strings::validateUrl($defhandler)) { $defhandler = \Froxlor\FileDir::makeCorrectFile($domain['documentroot'] . '/' . $defhandler); } $error_string .= ' server.error-handler-404 = "' . $defhandler . '"' . "\n\n"; diff --git a/lib/Froxlor/Cron/Http/Nginx.php b/lib/Froxlor/Cron/Http/Nginx.php index c6483096..3f7c39fb 100644 --- a/lib/Froxlor/Cron/Http/Nginx.php +++ b/lib/Froxlor/Cron/Http/Nginx.php @@ -116,7 +116,7 @@ class Nginx extends HttpConfigBase foreach ($statusCodes as $statusCode) { if (Settings::Get('defaultwebsrverrhandler.err' . $statusCode) != '') { $defhandler = Settings::Get('defaultwebsrverrhandler.err' . $statusCode); - if (! validateUrl($defhandler)) { + if (! \Froxlor\Validate\Form\Strings::validateUrl($defhandler)) { $defhandler = \Froxlor\FileDir::makeCorrectFile($defhandler); } $this->nginx_data[$vhosts_filename] .= 'error_page ' . $statusCode . ' ' . $defhandler . ';' . "\n"; @@ -499,7 +499,7 @@ class Nginx extends HttpConfigBase } // Get domain's redirect code - $code = getDomainRedirectCode($domain['id']); + $code = \Froxlor\Domain\Domain::getDomainRedirectCode($domain['id']); $vhost_content .= "\t" . 'if ($request_uri !~ ^/.well-known/acme-challenge/[-\w]+$) {' . "\n"; $vhost_content .= "\t\t" . 'return ' . $code . ' ' . $uri . '$request_uri;' . "\n"; @@ -703,7 +703,7 @@ class Nginx extends HttpConfigBase while ($row = $result_stmt->fetch(\PDO::FETCH_ASSOC)) { if (! empty($row['error404path'])) { $defhandler = $row['error404path']; - if (! validateUrl($defhandler)) { + if (! \Froxlor\Validate\Form\Strings::validateUrl($defhandler)) { $defhandler = \Froxlor\FileDir::makeCorrectFile($defhandler); } $path_options .= "\t" . 'error_page 404 ' . $defhandler . ';' . "\n"; @@ -711,7 +711,7 @@ class Nginx extends HttpConfigBase if (! empty($row['error403path'])) { $defhandler = $row['error403path']; - if (! validateUrl($defhandler)) { + if (! \Froxlor\Validate\Form\Strings::validateUrl($defhandler)) { $defhandler = \Froxlor\FileDir::makeCorrectFile($defhandler); } $path_options .= "\t" . 'error_page 403 ' . $defhandler . ';' . "\n"; @@ -719,7 +719,7 @@ class Nginx extends HttpConfigBase if (! empty($row['error500path'])) { $defhandler = $row['error500path']; - if (! validateUrl($defhandler)) { + if (! \Froxlor\Validate\Form\Strings::validateUrl($defhandler)) { $defhandler = \Froxlor\FileDir::makeCorrectFile($defhandler); } $path_options .= "\t" . 'error_page 500 502 503 504 ' . $defhandler . ';' . "\n"; diff --git a/lib/Froxlor/Cron/Traffic/ReportsCron.php b/lib/Froxlor/Cron/Traffic/ReportsCron.php index dbbc5ffc..d0580ba9 100644 --- a/lib/Froxlor/Cron/Traffic/ReportsCron.php +++ b/lib/Froxlor/Cron/Traffic/ReportsCron.php @@ -63,7 +63,7 @@ class ReportsCron extends \Froxlor\Cron\FroxlorCron 'company' => $row['company'] ); $replace_arr = array( - 'SALUTATION' => getCorrectUserSalutation($rep_userinfo), + 'SALUTATION' => \Froxlor\User::getCorrectUserSalutation($rep_userinfo), 'NAME' => $row['name'], // < keep this for compatibility 'TRAFFIC' => round(($row['traffic'] / 1024), 2), /* traffic is stored in KB, template uses MB */ 'TRAFFICUSED' => round(($row['traffic_used'] / 1024), 2), /* traffic is stored in KB, template uses MB */ @@ -362,7 +362,7 @@ class ReportsCron extends \Froxlor\Cron\FroxlorCron 'company' => $row['company'] ); $replace_arr = array( - 'SALUTATION' => getCorrectUserSalutation($rep_userinfo), + 'SALUTATION' => \Froxlor\User::getCorrectUserSalutation($rep_userinfo), 'NAME' => $row['name'], // < keep this for compatibility 'DISKAVAILABLE' => round(($row['diskspace'] / 1024), 2), /* traffic is stored in KB, template uses MB */ 'DISKUSED' => round($row['diskspace_used'] / 1024, 2), /* traffic is stored in KB, template uses MB */ diff --git a/lib/Froxlor/Domain/Domain.php b/lib/Froxlor/Domain/Domain.php index 30e97521..bb3bfcc6 100644 --- a/lib/Froxlor/Domain/Domain.php +++ b/lib/Froxlor/Domain/Domain.php @@ -6,6 +6,176 @@ use Froxlor\Database\Database; class Domain { + /** + * return an array of all enabled redirect-codes + * + * @return array array of enabled redirect-codes + */ + public static function getRedirectCodesArray() + { + $sql = "SELECT * FROM `" . TABLE_PANEL_REDIRECTCODES . "` WHERE `enabled` = '1' ORDER BY `id` ASC"; + $result_stmt = Database::query($sql); + + $codes = array(); + while ($rc = $result_stmt->fetch(\PDO::FETCH_ASSOC)) { + $codes[] = $rc; + } + + return $codes; + } + + /** + * return an array of all enabled redirect-codes + * for the settings form + * + * @param bool $add_desc + * optional, default true, add the code-description + * + * @return array array of enabled redirect-codes + */ + public static function getRedirectCodes($add_desc = true) + { + global $lng; + + $sql = "SELECT * FROM `" . TABLE_PANEL_REDIRECTCODES . "` WHERE `enabled` = '1' ORDER BY `id` ASC"; + $result_stmt = Database::query($sql); + + $codes = array(); + while ($rc = $result_stmt->fetch(\PDO::FETCH_ASSOC)) { + $codes[$rc['id']] = $rc['code']; + if ($add_desc) { + $codes[$rc['id']] .= ' (' . $lng['redirect_desc'][$rc['desc']] . ')'; + } + } + + return $codes; + } + + /** + * returns the redirect-code for a given + * domain-id + * + * @param integer $domainid + * id of the domain + * + * @return string redirect-code + */ + public static function getDomainRedirectCode($domainid = 0) + { + + // get system default + $default = '301'; + if (\Froxlor\Settings::Get('customredirect.enabled') == '1') { + $all_codes = self::getRedirectCodes(false); + $_default = $all_codes[\Froxlor\Settings::Get('customredirect.default')]; + $default = ($_default == '---') ? $default : $_default; + } + $code = $default; + if ($domainid > 0) { + + $result_stmt = Database::prepare(" + SELECT `r`.`code` as `redirect` + FROM `" . TABLE_PANEL_REDIRECTCODES . "` `r`, `" . TABLE_PANEL_DOMAINREDIRECTS . "` `rc` + WHERE `r`.`id` = `rc`.`rid` and `rc`.`did` = :domainid + "); + $result = Database::pexecute_first($result_stmt, array( + 'domainid' => $domainid + )); + + if (is_array($result) && isset($result['redirect'])) { + $code = ($result['redirect'] == '---') ? $default : $result['redirect']; + } + } + return $code; + } + + /** + * returns the redirect-id for a given + * domain-id + * + * @param integer $domainid + * id of the domain + * + * @return integer redirect-code-id + */ + public static function getDomainRedirectId($domainid = 0) + { + $code = 1; + if ($domainid > 0) { + $result_stmt = Database::prepare(" + SELECT `r`.`id` as `redirect` + FROM `" . TABLE_PANEL_REDIRECTCODES . "` `r`, `" . TABLE_PANEL_DOMAINREDIRECTS . "` `rc` + WHERE `r`.`id` = `rc`.`rid` and `rc`.`did` = :domainid + "); + $result = Database::pexecute_first($result_stmt, array( + 'domainid' => $domainid + )); + + if (is_array($result) && isset($result['redirect'])) { + $code = (int) $result['redirect']; + } + } + return $code; + } + + /** + * adds a redirectcode for a domain + * + * @param integer $domainid + * id of the domain to add the code for + * @param integer $redirect + * selected redirect-id + * + * @return null + */ + public static function addRedirectToDomain($domainid = 0, $redirect = 1) + { + if ($domainid > 0) { + $ins_stmt = Database::prepare(" + INSERT INTO `" . TABLE_PANEL_DOMAINREDIRECTS . "` SET `rid` = :rid, `did` = :did + "); + Database::pexecute($ins_stmt, array( + 'rid' => $redirect, + 'did' => $domainid + )); + } + } + + /** + * updates the redirectcode of a domain + * if redirect-code is false, nothing happens + * + * @param integer $domainid + * id of the domain to update + * @param integer $redirect + * selected redirect-id or false + * + * @return null + */ + public static function updateRedirectOfDomain($domainid = 0, $redirect = false) + { + if ($redirect == false) { + return; + } + + if ($domainid > 0) { + $del_stmt = Database::prepare(" + DELETE FROM `" . TABLE_PANEL_DOMAINREDIRECTS . "` WHERE `did` = :domainid + "); + Database::pexecute($del_stmt, array( + 'domainid' => $domainid + )); + + $ins_stmt = Database::prepare(" + INSERT INTO `" . TABLE_PANEL_DOMAINREDIRECTS . "` SET `rid` = :rid, `did` = :did + "); + Database::pexecute($ins_stmt, array( + 'rid' => $redirect, + 'did' => $domainid + )); + } + } + /** * check whether a domain has subdomains added as full-domains * #329 diff --git a/lib/Froxlor/PhpHelper.php b/lib/Froxlor/PhpHelper.php index 6c8b73b8..979fc842 100644 --- a/lib/Froxlor/PhpHelper.php +++ b/lib/Froxlor/PhpHelper.php @@ -4,6 +4,185 @@ namespace Froxlor; class PhpHelper { + /** + * Wrapper around htmlentities to handle arrays, with the advantage that you + * can select which fields should be handled by htmlentities + * + * @param array $subject + * The subject array + * @param string $fields + * The fields which should be checked for, separated by spaces + * @param int $quote_style + * See php documentation about this + * @param string $charset + * See php documentation about this + * + * @return array The array with htmlentitie'd strings + * @author Florian Lippert + */ + public static function htmlentities_array($subject, $fields = '', $quote_style = ENT_QUOTES, $charset = 'UTF-8') + { + if (is_array($subject)) { + if (! is_array($fields)) { + $fields = array_trim(explode(' ', $fields)); + } + + foreach ($subject as $field => $value) { + if ((! is_array($fields) || empty($fields)) || (is_array($fields) && ! empty($fields) && in_array($field, $fields))) { + // Just call ourselve to manage multi-dimensional arrays + $subject[$field] = self::htmlentities_array($subject[$field], $fields, $quote_style, $charset); + } + } + } else { + $subject = htmlentities($subject, $quote_style, $charset); + } + + return $subject; + } + + /** + * Replaces Strings in an array, with the advantage that you + * can select which fields should be str_replace'd + * + * @param + * mixed String or array of strings to search for + * @param + * mixed String or array to replace with + * @param + * array The subject array + * @param + * string The fields which should be checked for, separated by spaces + * @return array The str_replace'd array + * @author Florian Lippert + */ + public static function str_replace_array($search, $replace, $subject, $fields = '') + { + if (is_array($subject)) { + $fields = array_trim(explode(' ', $fields)); + foreach ($subject as $field => $value) { + if ((! is_array($fields) || empty($fields)) || (is_array($fields) && ! empty($fields) && in_array($field, $fields))) { + $subject[$field] = str_replace($search, $replace, $subject[$field]); + } + } + } else { + $subject = str_replace($search, $replace, $subject); + } + + return $subject; + } + + /** + * froxlor php error handler + * + * @param int $errno + * @param string $errstr + * @param string $errfile + * @param int $errline + * @param array $errcontext + * + * @return void|boolean + */ + public static function phpErrHandler($errno, $errstr, $errfile, $errline, $errcontext) + { + if (! (error_reporting() & $errno)) { + // This error code is not included in error_reporting + return; + } + + if (! isset($_SERVER['SHELL']) || (isset($_SERVER['SHELL']) && $_SERVER['SHELL'] == '')) { + global $theme; + + // fallback + if (empty($theme)) { + $theme = "Sparkle"; + } + // prevent possible file-path-disclosure + $errfile = str_replace(\Froxlor\Froxlor::getInstallDir(), "", $errfile); + // if we're not on the shell, output a nicer error-message + $err_hint = file_get_contents(\Froxlor\Froxlor::getInstallDir() . '/templates/' . $theme . '/misc/phperrornice.tpl'); + // replace values + $err_hint = str_replace("", '#' . $errno . ' ' . $errstr, $err_hint); + $err_hint = str_replace("", $errfile . ':' . $errline, $err_hint); + + // show + echo $err_hint; + // return true to ignore php standard error-handler + return true; + } + + // of on shell, use the php standard error-handler + return false; + } + + public static function loadConfigArrayDir() + { + // Workaround until we use gettext + global $lng, $theme; + + // we now use dynamic function parameters + // so we can read from more than one directory + // and still be valid for old calls + $numargs = func_num_args(); + if ($numargs <= 0) { + return null; + } + + // variable that holds all dirs that will + // be parsed for inclusion + $configdirs = array(); + // if one of the parameters is an array + // we assume that this is a list of + // setting-groups to be selected + $selection = null; + for ($x = 0; $x < $numargs; $x ++) { + $arg = func_get_arg($x); + if (is_array($arg) && isset($arg[0])) { + $selection = $arg; + } else { + $configdirs[] = $arg; + } + } + + $data = array(); + $data_files = array(); + $has_data = false; + + foreach ($configdirs as $data_dirname) { + if (is_dir($data_dirname)) { + $data_dirhandle = opendir($data_dirname); + while (false !== ($data_filename = readdir($data_dirhandle))) { + if ($data_filename != '.' && $data_filename != '..' && $data_filename != '' && substr($data_filename, - 4) == '.php') { + $data_files[] = $data_dirname . $data_filename; + } + } + $has_data = true; + } + } + + if ($has_data) { + sort($data_files); + foreach ($data_files as $data_filename) { + $data = array_merge_recursive($data, include ($data_filename)); + } + } + + // if we have specific setting-groups + // to select, we'll handle this here + // (this is for multiserver-client settings) + $_data = array(); + if ($selection != null && is_array($selection) && isset($selection[0])) { + $_data['groups'] = array(); + foreach ($data['groups'] as $group => $data) { + if (in_array($group, $selection)) { + $_data['groups'][$group] = $data; + } + } + $data = $_data; + } + + return $data; + } + /** * ipv6 aware gethostbynamel function * diff --git a/lib/Froxlor/UI/HTML.php b/lib/Froxlor/UI/HTML.php index ad990147..1e7652e9 100644 --- a/lib/Froxlor/UI/HTML.php +++ b/lib/Froxlor/UI/HTML.php @@ -4,6 +4,106 @@ namespace Froxlor\UI; class HTML { + /** + * Build Navigation Sidebar + * + * @param + * array navigation data + * @param + * array userinfo the userinfo of the user + * @return string the content of the navigation bar + * + * @author Florian Lippert + */ + public static function buildNavigation($navigation, $userinfo) + { + global $theme; + + $returnvalue = ''; + + // sanitize user-given input (url-manipulation) + if (isset($_GET['page']) && is_array($_GET['page'])) { + $_GET['page'] = (string) $_GET['page'][0]; + } + if (isset($_GET['action']) && is_array($_GET['action'])) { + $_GET['action'] = (string) $_GET['action'][0]; + } + + foreach ($navigation as $box) { + if ((! isset($box['show_element']) || $box['show_element'] === true) && (! isset($box['required_resources']) || $box['required_resources'] == '' || (isset($userinfo[$box['required_resources']]) && ((int) $userinfo[$box['required_resources']] > 0 || $userinfo[$box['required_resources']] == '-1')))) { + $navigation_links = ''; + foreach ($box['elements'] as $element_id => $element) { + if ((! isset($element['show_element']) || $element['show_element'] === true) && (! isset($element['required_resources']) || $element['required_resources'] == '' || (isset($userinfo[$element['required_resources']]) && ((int) $userinfo[$element['required_resources']] > 0 || $userinfo[$element['required_resources']] == '-1')))) { + $target = ''; + $active = ''; + $navurl = '#'; + if (isset($element['url']) && trim($element['url']) != '') { + // append sid only to local + + if (! preg_match('/^https?\:\/\//', $element['url']) && (isset($userinfo['hash']) && $userinfo['hash'] != '')) { + // generate sid with ? oder & + + if (strpos($element['url'], '?') !== false) { + $element['url'] .= '&s=' . $userinfo['hash']; + } else { + $element['url'] .= '?s=' . $userinfo['hash']; + } + } + + if (isset($element['new_window']) && $element['new_window'] == true) { + $target = ' target="_blank"'; + } + + if (isset($_GET['page']) && substr_count($element['url'], "page=" . $_GET['page']) > 0 && substr_count($element['url'], basename($_SERVER["SCRIPT_FILENAME"])) > 0 && isset($_GET['action']) && substr_count($element['url'], "action=" . $_GET['action']) > 0) { + $active = ' active'; + } elseif (isset($_GET['page']) && substr_count($element['url'], "page=" . $_GET['page']) > 0 && substr_count($element['url'], basename($_SERVER["SCRIPT_FILENAME"])) > 0 && substr_count($element['url'], "action=") == 0 && ! isset($_GET['action'])) { + $active = ' active'; + } + + $navurl = htmlspecialchars($element['url']); + $navlabel = $element['label']; + } else { + $navlabel = $element['label']; + } + + eval("\$navigation_links .= \"" . \Froxlor\UI\Template::getTemplate("navigation_link", 1) . "\";"); + } + } + + if ($navigation_links != '') { + $target = ''; + if (isset($box['url']) && trim($box['url']) != '') { + // append sid only to local + + if (! preg_match('/^https?\:\/\//', $box['url']) && (isset($userinfo['hash']) && $userinfo['hash'] != '')) { + // generate sid with ? oder & + + if (strpos($box['url'], '?') !== false) { + $box['url'] .= '&s=' . $userinfo['hash']; + } else { + $box['url'] .= '?s=' . $userinfo['hash']; + } + } + + if (isset($box['new_window']) && $box['new_window'] == true) { + $target = ' target="_blank"'; + } + + $navurl = htmlspecialchars($box['url']); + $navlabel = $box['label']; + } else { + $navurl = "#"; + $navlabel = $box['label']; + } + + eval("\$returnvalue .= \"" . \Froxlor\UI\Template::getTemplate("navigation_element", 1) . "\";"); + } + } + } + + return $returnvalue; + } + /** * Return HTML Code for a checkbox * diff --git a/lib/Froxlor/User.php b/lib/Froxlor/User.php new file mode 100644 index 00000000..0a17cf8e --- /dev/null +++ b/lib/Froxlor/User.php @@ -0,0 +1,346 @@ + + */ + public static function getCorrectFullUserDetails($userinfo) + { + $returnval = ''; + + if (isset($userinfo['firstname']) && isset($userinfo['name']) && isset($userinfo['company'])) { + if ($userinfo['company'] == '') { + $returnval = $userinfo['name'] . ', ' . $userinfo['firstname']; + } else { + if ($userinfo['name'] != '' && $userinfo['firstname'] != '') { + $returnval = $userinfo['name'] . ', ' . $userinfo['firstname'] . ' | ' . $userinfo['company']; + } else { + $returnval = $userinfo['company']; + } + } + } elseif (isset($userinfo['name'])) { + $returnval = $userinfo['name']; + } + + return $returnval; + } + + /** + * Returns correct user salutation, either "Firstname Name" or "Company" + * + * @param + * array An array with keys firstname, name and company + * @return string The correct salutation + * + * @author Florian Lippert + */ + public static function getCorrectUserSalutation($userinfo) + { + $returnval = ''; + + if (isset($userinfo['firstname']) && isset($userinfo['name']) && isset($userinfo['company'])) { + // Always prefer firstname name + + if ($userinfo['company'] != '' && $userinfo['name'] == '' && $userinfo['firstname'] == '') { + $returnval = $userinfo['company']; + } else { + $returnval = $userinfo['firstname'] . ' ' . $userinfo['name']; + } + } + + return $returnval; + } + + public static function getLanguages() + { + $result_stmt = \Froxlor\Database\Database::query("SELECT * FROM `" . TABLE_PANEL_LANGUAGE . "` "); + $languages_array = array(); + + while ($row = $result_stmt->fetch(\PDO::FETCH_ASSOC)) { + if (! isset($languages_array[$row['language']]) && ! in_array($row['language'], $languages_array)) { + $languages_array[$row['language']] = html_entity_decode($row['language']); + } + } + + return $languages_array; + } + + /** + * Function which updates all counters of used ressources in panel_admins and panel_customers + * + * @param + * bool Set to true to get an array with debug information + * @return array Contains debug information if parameter 'returndebuginfo' is set to true + * + * @author Florian Lippert (2003-2009) + * @author Froxlor team (2010-) + */ + public static function updateCounters($returndebuginfo = false) + { + $returnval = array(); + + if ($returndebuginfo === true) { + $returnval = array( + 'admins' => array(), + 'customers' => array() + ); + } + + // Customers + $customers_stmt = Database::prepare('SELECT * FROM `' . TABLE_PANEL_CUSTOMERS . '` ORDER BY `customerid`'); + Database::pexecute($customers_stmt); + + $admin_resources = array(); + while ($customer = $customers_stmt->fetch(\PDO::FETCH_ASSOC)) { + + $cur_adm = $customer['adminid']; + + // initialize admin-resources array for admin $customer['adminid'] + if (! isset($admin_resources[$cur_adm])) { + $admin_resources[$cur_adm] = array(); + } + + self::_addResourceCountEx($admin_resources[$cur_adm], $customer, 'diskspace_used', 'diskspace'); + self::_addResourceCountEx($admin_resources[$cur_adm], $customer, 'traffic_used', 'traffic_used'); // !!! yes, USED and USED + + foreach (array( + 'mysqls', + 'ftps', + 'emails', + 'email_accounts', + 'email_forwarders', + 'email_quota', + 'subdomains' + ) as $field) { + _addResourceCount($admin_resources[$cur_adm], $customer, $field . '_used', $field); + } + + $customer_mysqls_stmt = Database::prepare('SELECT COUNT(*) AS `number_mysqls` FROM `' . TABLE_PANEL_DATABASES . '` + WHERE `customerid` = :cid'); + $customer_mysqls = Database::pexecute_first($customer_mysqls_stmt, array( + "cid" => $customer['customerid'] + )); + $customer['mysqls_used_new'] = (int) $customer_mysqls['number_mysqls']; + + $customer_emails_stmt = Database::prepare('SELECT COUNT(*) AS `number_emails` FROM `' . TABLE_MAIL_VIRTUAL . '` + WHERE `customerid` = :cid'); + $customer_emails = Database::pexecute_first($customer_emails_stmt, array( + "cid" => $customer['customerid'] + )); + $customer['emails_used_new'] = (int) $customer_emails['number_emails']; + + $customer_emails_result_stmt = Database::prepare('SELECT `email`, `email_full`, `destination`, `popaccountid` AS `number_email_forwarders` FROM `' . TABLE_MAIL_VIRTUAL . '` + WHERE `customerid` = :cid'); + Database::pexecute($customer_emails_result_stmt, array( + "cid" => $customer['customerid'] + )); + $customer_email_forwarders = 0; + $customer_email_accounts = 0; + + while ($customer_emails_row = $customer_emails_result_stmt->fetch(\PDO::FETCH_ASSOC)) { + if ($customer_emails_row['destination'] != '') { + $customer_emails_row['destination'] = explode(' ', \Froxlor\FileDir::makeCorrectDestination($customer_emails_row['destination'])); + $customer_email_forwarders += count($customer_emails_row['destination']); + + if (in_array($customer_emails_row['email_full'], $customer_emails_row['destination'])) { + $customer_email_forwarders -= 1; + $customer_email_accounts ++; + } + } + } + + $customer['email_accounts_used_new'] = $customer_email_accounts; + $customer['email_forwarders_used_new'] = $customer_email_forwarders; + + $customer_ftps_stmt = Database::prepare('SELECT COUNT(*) AS `number_ftps` FROM `' . TABLE_FTP_USERS . '` WHERE `customerid` = :cid'); + $customer_ftps = Database::pexecute_first($customer_ftps_stmt, array( + "cid" => $customer['customerid'] + )); + $customer['ftps_used_new'] = ((int) $customer_ftps['number_ftps'] - 1); + + $customer_subdomains_stmt = Database::prepare('SELECT COUNT(*) AS `number_subdomains` FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `customerid` = :cid AND `parentdomainid` <> "0"'); + $customer_subdomains = Database::pexecute_first($customer_subdomains_stmt, array( + "cid" => $customer['customerid'] + )); + $customer['subdomains_used_new'] = (int) $customer_subdomains['number_subdomains']; + + $customer_email_quota_stmt = Database::prepare('SELECT SUM(`quota`) AS `email_quota` FROM `' . TABLE_MAIL_USERS . '` WHERE `customerid` = :cid'); + $customer_email_quota = Database::pexecute_first($customer_email_quota_stmt, array( + "cid" => $customer['customerid'] + )); + $customer['email_quota_used_new'] = (int) $customer_email_quota['email_quota']; + + $stmt = Database::prepare('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` + SET `mysqls_used` = :mysqls_used, + `emails_used` = :emails_used, + `email_accounts_used` = :email_accounts_used, + `email_forwarders_used` = :email_forwarders_used, + `email_quota_used` = :email_quota_used, + `ftps_used` = :ftps_used, + `subdomains_used` = :subdomains_used + WHERE `customerid` = :cid'); + $params = array( + "mysqls_used" => $customer['mysqls_used_new'], + "emails_used" => $customer['emails_used_new'], + "email_accounts_used" => $customer['email_accounts_used_new'], + "email_forwarders_used" => $customer['email_forwarders_used_new'], + "email_quota_used" => $customer['email_quota_used_new'], + "ftps_used" => $customer['ftps_used_new'], + "subdomains_used" => $customer['subdomains_used_new'], + "cid" => $customer['customerid'] + ); + Database::pexecute($stmt, $params); + + if ($returndebuginfo === true) { + $returnval['customers'][$customer['customerid']] = $customer; + } + } + + // Admins + $admins_stmt = Database::prepare('SELECT * FROM `' . TABLE_PANEL_ADMINS . '` ORDER BY `adminid`'); + Database::pexecute($admins_stmt, array()); + + while ($admin = $admins_stmt->fetch(\PDO::FETCH_ASSOC)) { + $admin_customers_stmt = Database::prepare('SELECT COUNT(*) AS `number_customers` FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `adminid` = :aid'); + $admin_customers = Database::pexecute_first($admin_customers_stmt, array( + "aid" => $admin['adminid'] + )); + $admin['customers_used_new'] = $admin_customers['number_customers']; + + $admin_domains_stmt = Database::prepare('SELECT COUNT(*) AS `number_domains` FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `adminid` = :aid AND `isemaildomain` = "1"'); + $admin_domains = Database::pexecute_first($admin_domains_stmt, array( + "aid" => $admin['adminid'] + )); + $admin['domains_used_new'] = $admin_domains['number_domains']; + + $cur_adm = $admin['adminid']; + + if (! isset($admin_resources[$cur_adm])) { + $admin_resources[$cur_adm] = array(); + } + + foreach (array( + 'diskspace_used', + 'traffic_used', + 'mysqls_used', + 'ftps_used', + 'emails_used', + 'email_accounts_used', + 'email_forwarders_used', + 'email_quota_used', + 'subdomains_used' + ) as $field) { + self::_initArrField($field, $admin_resources[$cur_adm], 0); + $admin[$field . '_new'] = $admin_resources[$cur_adm][$field]; + } + + $stmt = Database::prepare('UPDATE `' . TABLE_PANEL_ADMINS . '` + SET `customers_used` = :customers_used, + `domains_used` = :domains_used, + `diskspace_used` = :diskspace_used, + `mysqls_used` = :mysqls_used, + `emails_used` = :emails_used, + `email_accounts_used` = :email_accounts_used, + `email_forwarders_used` = :email_forwarders_used, + `email_quota_used` = :email_quota_used, + `ftps_used` = :ftps_used, + `subdomains_used` = :subdomains_used, + `traffic_used` = :traffic_used + WHERE `adminid` = :aid'); + + $params = array( + "customers_used" => $admin['customers_used_new'], + "domains_used" => $admin['domains_used_new'], + "diskspace_used" => $admin['diskspace_used_new'], + "mysqls_used" => $admin['mysqls_used_new'], + "emails_used" => $admin['emails_used_new'], + "email_accounts_used" => $admin['email_accounts_used_new'], + "email_forwarders_used" => $admin['email_forwarders_used_new'], + "email_quota_used" => $admin['email_quota_used_new'], + "ftps_used" => $admin['ftps_used_new'], + "subdomains_used" => $admin['subdomains_used_new'], + "traffic_used" => $admin['traffic_used_new'], + "aid" => $admin['adminid'] + ); + Database::pexecute($stmt, $params); + + if ($returndebuginfo === true) { + $returnval['admins'][$admin['adminid']] = $admin; + } + } + + return $returnval; + } + + /** + * if the customer does not have unlimited resources, add the used resources + * to the admin-resource-counter + * + * @param array $arr + * reference + * @param array $customer_arr + * @param string $used_field + * @param string $field + * + * @return void + */ + private static function _addResourceCount(&$arr, $customer_arr, $used_field = null, $field = null) + { + self::_initArrField($used_field, $arr, 0); + if ($customer_arr[$field] != '-1') { + $arr[$used_field] += intval($customer_arr[$used_field]); + } + } + + /** + * if the customer does not have unlimited resources, add the used resources + * to the admin-resource-counter + * Special function wrapper for diskspace and traffic as they need to + * be calculated otherwise to get the -1 for unlimited + * + * @param array $arr + * reference + * @param array $customer_arr + * @param string $used_field + * @param string $field + * + * @return void + */ + private static function _addResourceCountEx(&$arr, $customer_arr, $used_field = null, $field = null) + { + self::_initArrField($used_field, $arr, 0); + if ($field == 'diskspace' && ($customer_arr[$field] / 1024) != '-1') { + $arr[$used_field] += intval($customer_arr[$used_field]); + } elseif ($field == 'traffic_used') { + $arr[$used_field] += intval($customer_arr[$used_field]); + } + } + + /** + * initialize a field-value of an array if not yet initialized + * + * @param string $field + * @param array $arr + * reference + * @param int $init_value + * + * @return void + */ + private static function _initArrField($field = null, &$arr, $init_value = 0) + { + if (! isset($arr[$field])) { + $arr[$field] = $init_value; + } + } +} \ No newline at end of file diff --git a/lib/functions/formfields/hiddenstring/function.validateFormFieldString.php b/lib/functions/formfields/hiddenstring/function.validateFormFieldString.php index 99c093e8..8b2da25c 100644 --- a/lib/functions/formfields/hiddenstring/function.validateFormFieldString.php +++ b/lib/functions/formfields/hiddenstring/function.validateFormFieldString.php @@ -45,7 +45,7 @@ function validateFormFieldHiddenString($fieldname, $fielddata, $newfieldvalue) if (isset($fielddata['string_type']) && $fielddata['string_type'] == 'mail') { $returnvalue = (filter_var($newfieldvalue, FILTER_VALIDATE_EMAIL) == $newfieldvalue); } elseif (isset($fielddata['string_type']) && $fielddata['string_type'] == 'url') { - $returnvalue = validateUrl($newfieldvalue); + $returnvalue = \Froxlor\Validate\Form\Strings::validateUrl($newfieldvalue); } elseif (isset($fielddata['string_type']) && $fielddata['string_type'] == 'dir') { // add trailing slash to validate path if needed // refs #331 @@ -83,4 +83,4 @@ function validateFormFieldHiddenString($fieldname, $fielddata, $newfieldvalue) } else { return $returnvalue; } -} \ No newline at end of file +} diff --git a/lib/functions/froxlor/function.CorrectErrorDocument.php b/lib/functions/froxlor/function.CorrectErrorDocument.php deleted file mode 100644 index d20a4e26..00000000 --- a/lib/functions/froxlor/function.CorrectErrorDocument.php +++ /dev/null @@ -1,59 +0,0 @@ - (2010-) - * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt - * @package Functions - * - */ - -/** - * this functions validates a given value as ErrorDocument - * refs #267 - * - * @param - * string error-document-string - * @param bool $throw_exception - * - * @return string error-document-string - * - */ -function correctErrorDocument($errdoc = null, $throw_exception = false) -{ - $idna_convert = new idna_convert_wrapper(); - - if ($errdoc !== null && $errdoc != '') { - // not a URL - if ((strtoupper(substr($errdoc, 0, 5)) != 'HTTP:' && strtoupper(substr($errdoc, 0, 6)) != 'HTTPS:') || ! validateUrl($errdoc)) { - // a file - if (substr($errdoc, 0, 1) != '"') { - $errdoc = \Froxlor\FileDir::makeCorrectFile($errdoc); - // apache needs a starting-slash (starting at the domains-docroot) - if (! substr($errdoc, 0, 1) == '/') { - $errdoc = '/' . $errdoc; - } - } // a string (check for ending ") - else { - // string won't work for lighty - if (Settings::Get('system.webserver') == 'lighttpd') { - \Froxlor\UI\Response::standard_error('stringerrordocumentnotvalidforlighty', '', $throw_exception); - } elseif (substr($errdoc, - 1) != '"') { - $errdoc .= '"'; - } - } - } else { - if (Settings::Get('system.webserver') == 'lighttpd') { - \Froxlor\UI\Response::standard_error('urlerrordocumentnotvalidforlighty', '', $throw_exception); - } - } - } - return $errdoc; -} diff --git a/lib/functions/froxlor/function.getLanguages.php b/lib/functions/froxlor/function.getLanguages.php deleted file mode 100644 index d7b8c68a..00000000 --- a/lib/functions/froxlor/function.getLanguages.php +++ /dev/null @@ -1,31 +0,0 @@ - (2003-2009) - * @author Froxlor team (2010-) - * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt - * @package Functions - * - */ -function getLanguages() -{ - $result_stmt = Database::query("SELECT * FROM `" . TABLE_PANEL_LANGUAGE . "` "); - $languages_array = array(); - - while ($row = $result_stmt->fetch(PDO::FETCH_ASSOC)) { - if (! isset($languages_array[$row['language']]) && ! in_array($row['language'], $languages_array)) { - $languages_array[$row['language']] = html_entity_decode($row['language']); - } - } - - return $languages_array; -} diff --git a/lib/functions/froxlor/function.loadConfigArrayDir.php b/lib/functions/froxlor/function.loadConfigArrayDir.php deleted file mode 100644 index 8088b8dc..00000000 --- a/lib/functions/froxlor/function.loadConfigArrayDir.php +++ /dev/null @@ -1,87 +0,0 @@ - (2003-2009) - * @author Froxlor team (2010-) - * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt - * @package Functions - * - */ -function loadConfigArrayDir() -{ - - // Workaround until we use gettext - global $lng, $theme; - - // we now use dynamic function parameters - // so we can read from more than one directory - // and still be valid for old calls - $numargs = func_num_args(); - if ($numargs <= 0) { - return null; - } - - // variable that holds all dirs that will - // be parsed for inclusion - $configdirs = array(); - // if one of the parameters is an array - // we assume that this is a list of - // setting-groups to be selected - $selection = null; - for ($x = 0; $x < $numargs; $x ++) { - $arg = func_get_arg($x); - if (is_array($arg) && isset($arg[0])) { - $selection = $arg; - } else { - $configdirs[] = $arg; - } - } - - $data = array(); - $data_files = array(); - $has_data = false; - - foreach ($configdirs as $data_dirname) { - if (is_dir($data_dirname)) { - $data_dirhandle = opendir($data_dirname); - while (false !== ($data_filename = readdir($data_dirhandle))) { - if ($data_filename != '.' && $data_filename != '..' && $data_filename != '' && substr($data_filename, - 4) == '.php') { - $data_files[] = $data_dirname . $data_filename; - } - } - $has_data = true; - } - } - - if ($has_data) { - sort($data_files); - foreach ($data_files as $data_filename) { - $data = array_merge_recursive($data, include ($data_filename)); - } - } - - // if we have specific setting-groups - // to select, we'll handle this here - // (this is for multiserver-client settings) - $_data = array(); - if ($selection != null && is_array($selection) && isset($selection[0])) { - $_data['groups'] = array(); - foreach ($data['groups'] as $group => $data) { - if (in_array($group, $selection)) { - $_data['groups'][$group] = $data; - } - } - $data = $_data; - } - - return $data; -} diff --git a/lib/functions/froxlor/function.phpErrHandler.php b/lib/functions/froxlor/function.phpErrHandler.php deleted file mode 100644 index 3aa9c7c0..00000000 --- a/lib/functions/froxlor/function.phpErrHandler.php +++ /dev/null @@ -1,44 +0,0 @@ -", '#' . $errno . ' ' . $errstr, $err_hint); - $err_hint = str_replace("", $errfile . ':' . $errline, $err_hint); - - // show - echo $err_hint; - // return true to ignore php standard error-handler - return true; - } - - // of on shell, use the php standard error-handler - return false; -} diff --git a/lib/functions/froxlor/function.updateCounters.php b/lib/functions/froxlor/function.updateCounters.php deleted file mode 100644 index 580f3ba8..00000000 --- a/lib/functions/froxlor/function.updateCounters.php +++ /dev/null @@ -1,287 +0,0 @@ - (2003-2009) - * @author Froxlor team (2010-) - * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt - * @package Functions - * - */ -use Froxlor\Database\Database; - -/** - * Function which updates all counters of used ressources in panel_admins and panel_customers - * - * @param - * bool Set to true to get an array with debug information - * @return array Contains debug information if parameter 'returndebuginfo' is set to true - * - * @author Florian Lippert (2003-2009) - * @author Froxlor team (2010-) - */ -function updateCounters($returndebuginfo = false) -{ - $returnval = array(); - - if ($returndebuginfo === true) { - $returnval = array( - 'admins' => array(), - 'customers' => array() - ); - } - - // Customers - $customers_stmt = Database::prepare('SELECT * FROM `' . TABLE_PANEL_CUSTOMERS . '` ORDER BY `customerid`'); - Database::pexecute($customers_stmt); - - $admin_resources = array(); - while ($customer = $customers_stmt->fetch(PDO::FETCH_ASSOC)) { - - $cur_adm = $customer['adminid']; - - // initialize admin-resources array for admin $customer['adminid'] - if (! isset($admin_resources[$cur_adm])) { - $admin_resources[$cur_adm] = array(); - } - - _addResourceCountEx($admin_resources[$cur_adm], $customer, 'diskspace_used', 'diskspace'); - _addResourceCountEx($admin_resources[$cur_adm], $customer, 'traffic_used', 'traffic_used'); // !!! yes, USED and USED - - foreach (array( - 'mysqls', - 'ftps', - 'emails', - 'email_accounts', - 'email_forwarders', - 'email_quota', - 'subdomains' - ) as $field) { - _addResourceCount($admin_resources[$cur_adm], $customer, $field . '_used', $field); - } - - $customer_mysqls_stmt = Database::prepare('SELECT COUNT(*) AS `number_mysqls` FROM `' . TABLE_PANEL_DATABASES . '` - WHERE `customerid` = :cid'); - $customer_mysqls = Database::pexecute_first($customer_mysqls_stmt, array( - "cid" => $customer['customerid'] - )); - $customer['mysqls_used_new'] = (int) $customer_mysqls['number_mysqls']; - - $customer_emails_stmt = Database::prepare('SELECT COUNT(*) AS `number_emails` FROM `' . TABLE_MAIL_VIRTUAL . '` - WHERE `customerid` = :cid'); - $customer_emails = Database::pexecute_first($customer_emails_stmt, array( - "cid" => $customer['customerid'] - )); - $customer['emails_used_new'] = (int) $customer_emails['number_emails']; - - $customer_emails_result_stmt = Database::prepare('SELECT `email`, `email_full`, `destination`, `popaccountid` AS `number_email_forwarders` FROM `' . TABLE_MAIL_VIRTUAL . '` - WHERE `customerid` = :cid'); - Database::pexecute($customer_emails_result_stmt, array( - "cid" => $customer['customerid'] - )); - $customer_email_forwarders = 0; - $customer_email_accounts = 0; - - while ($customer_emails_row = $customer_emails_result_stmt->fetch(PDO::FETCH_ASSOC)) { - if ($customer_emails_row['destination'] != '') { - $customer_emails_row['destination'] = explode(' ', \Froxlor\FileDir::makeCorrectDestination($customer_emails_row['destination'])); - $customer_email_forwarders += count($customer_emails_row['destination']); - - if (in_array($customer_emails_row['email_full'], $customer_emails_row['destination'])) { - $customer_email_forwarders -= 1; - $customer_email_accounts ++; - } - } - } - - $customer['email_accounts_used_new'] = $customer_email_accounts; - $customer['email_forwarders_used_new'] = $customer_email_forwarders; - - $customer_ftps_stmt = Database::prepare('SELECT COUNT(*) AS `number_ftps` FROM `' . TABLE_FTP_USERS . '` WHERE `customerid` = :cid'); - $customer_ftps = Database::pexecute_first($customer_ftps_stmt, array( - "cid" => $customer['customerid'] - )); - $customer['ftps_used_new'] = ((int) $customer_ftps['number_ftps'] - 1); - - $customer_subdomains_stmt = Database::prepare('SELECT COUNT(*) AS `number_subdomains` FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `customerid` = :cid AND `parentdomainid` <> "0"'); - $customer_subdomains = Database::pexecute_first($customer_subdomains_stmt, array( - "cid" => $customer['customerid'] - )); - $customer['subdomains_used_new'] = (int) $customer_subdomains['number_subdomains']; - - $customer_email_quota_stmt = Database::prepare('SELECT SUM(`quota`) AS `email_quota` FROM `' . TABLE_MAIL_USERS . '` WHERE `customerid` = :cid'); - $customer_email_quota = Database::pexecute_first($customer_email_quota_stmt, array( - "cid" => $customer['customerid'] - )); - $customer['email_quota_used_new'] = (int) $customer_email_quota['email_quota']; - - $stmt = Database::prepare('UPDATE `' . TABLE_PANEL_CUSTOMERS . '` - SET `mysqls_used` = :mysqls_used, - `emails_used` = :emails_used, - `email_accounts_used` = :email_accounts_used, - `email_forwarders_used` = :email_forwarders_used, - `email_quota_used` = :email_quota_used, - `ftps_used` = :ftps_used, - `subdomains_used` = :subdomains_used - WHERE `customerid` = :cid'); - $params = array( - "mysqls_used" => $customer['mysqls_used_new'], - "emails_used" => $customer['emails_used_new'], - "email_accounts_used" => $customer['email_accounts_used_new'], - "email_forwarders_used" => $customer['email_forwarders_used_new'], - "email_quota_used" => $customer['email_quota_used_new'], - "ftps_used" => $customer['ftps_used_new'], - "subdomains_used" => $customer['subdomains_used_new'], - "cid" => $customer['customerid'] - ); - Database::pexecute($stmt, $params); - - if ($returndebuginfo === true) { - $returnval['customers'][$customer['customerid']] = $customer; - } - } - - // Admins - $admins_stmt = Database::prepare('SELECT * FROM `' . TABLE_PANEL_ADMINS . '` ORDER BY `adminid`'); - Database::pexecute($admins_stmt, array()); - - while ($admin = $admins_stmt->fetch(PDO::FETCH_ASSOC)) { - $admin_customers_stmt = Database::prepare('SELECT COUNT(*) AS `number_customers` FROM `' . TABLE_PANEL_CUSTOMERS . '` WHERE `adminid` = :aid'); - $admin_customers = Database::pexecute_first($admin_customers_stmt, array( - "aid" => $admin['adminid'] - )); - $admin['customers_used_new'] = $admin_customers['number_customers']; - - $admin_domains_stmt = Database::prepare('SELECT COUNT(*) AS `number_domains` FROM `' . TABLE_PANEL_DOMAINS . '` WHERE `adminid` = :aid AND `isemaildomain` = "1"'); - $admin_domains = Database::pexecute_first($admin_domains_stmt, array( - "aid" => $admin['adminid'] - )); - $admin['domains_used_new'] = $admin_domains['number_domains']; - - $cur_adm = $admin['adminid']; - - if (! isset($admin_resources[$cur_adm])) { - $admin_resources[$cur_adm] = array(); - } - - foreach (array( - 'diskspace_used', - 'traffic_used', - 'mysqls_used', - 'ftps_used', - 'emails_used', - 'email_accounts_used', - 'email_forwarders_used', - 'email_quota_used', - 'subdomains_used' - ) as $field) { - _initArrField($field, $admin_resources[$cur_adm], 0); - $admin[$field . '_new'] = $admin_resources[$cur_adm][$field]; - } - - $stmt = Database::prepare('UPDATE `' . TABLE_PANEL_ADMINS . '` - SET `customers_used` = :customers_used, - `domains_used` = :domains_used, - `diskspace_used` = :diskspace_used, - `mysqls_used` = :mysqls_used, - `emails_used` = :emails_used, - `email_accounts_used` = :email_accounts_used, - `email_forwarders_used` = :email_forwarders_used, - `email_quota_used` = :email_quota_used, - `ftps_used` = :ftps_used, - `subdomains_used` = :subdomains_used, - `traffic_used` = :traffic_used - WHERE `adminid` = :aid'); - - $params = array( - "customers_used" => $admin['customers_used_new'], - "domains_used" => $admin['domains_used_new'], - "diskspace_used" => $admin['diskspace_used_new'], - "mysqls_used" => $admin['mysqls_used_new'], - "emails_used" => $admin['emails_used_new'], - "email_accounts_used" => $admin['email_accounts_used_new'], - "email_forwarders_used" => $admin['email_forwarders_used_new'], - "email_quota_used" => $admin['email_quota_used_new'], - "ftps_used" => $admin['ftps_used_new'], - "subdomains_used" => $admin['subdomains_used_new'], - "traffic_used" => $admin['traffic_used_new'], - "aid" => $admin['adminid'] - ); - Database::pexecute($stmt, $params); - - if ($returndebuginfo === true) { - $returnval['admins'][$admin['adminid']] = $admin; - } - } - - return $returnval; -} - -/** - * initialize a field-value of an array if not yet initialized - * - * @param string $field - * @param array $arr - * reference - * @param int $init_value - * - * @return void - */ -function _initArrField($field = null, &$arr, $init_value = 0) -{ - if (! isset($arr[$field])) { - $arr[$field] = $init_value; - } -} - -/** - * if the customer does not have unlimited resources, add the used resources - * to the admin-resource-counter - * - * @param array $arr - * reference - * @param array $customer_arr - * @param string $used_field - * @param string $field - * - * @return void - */ -function _addResourceCount(&$arr, $customer_arr, $used_field = null, $field = null) -{ - _initArrField($used_field, $arr, 0); - if ($customer_arr[$field] != '-1') { - $arr[$used_field] += intval($customer_arr[$used_field]); - } -} - -/** - * if the customer does not have unlimited resources, add the used resources - * to the admin-resource-counter - * Special function wrapper for diskspace and traffic as they need to - * be calculated otherwise to get the -1 for unlimited - * - * @param array $arr - * reference - * @param array $customer_arr - * @param string $used_field - * @param string $field - * - * @return void - */ -function _addResourceCountEx(&$arr, $customer_arr, $used_field = null, $field = null) -{ - _initArrField($used_field, $arr, 0); - if ($field == 'diskspace' && ($customer_arr[$field] / 1024) != '-1') { - $arr[$used_field] += intval($customer_arr[$used_field]); - } elseif ($field == 'traffic_used') { - $arr[$used_field] += intval($customer_arr[$used_field]); - } -} diff --git a/lib/functions/output/function.RedirectCode.php b/lib/functions/output/function.RedirectCode.php deleted file mode 100644 index 5f91d5ae..00000000 --- a/lib/functions/output/function.RedirectCode.php +++ /dev/null @@ -1,185 +0,0 @@ - (2010-) - * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt - * @package Functions - */ - -/** - * return an array of all enabled redirect-codes - * - * @return array array of enabled redirect-codes - */ -function getRedirectCodesArray() -{ - $sql = "SELECT * FROM `" . TABLE_PANEL_REDIRECTCODES . "` WHERE `enabled` = '1' ORDER BY `id` ASC"; - $result_stmt = Database::query($sql); - - $codes = array(); - while ($rc = $result_stmt->fetch(PDO::FETCH_ASSOC)) { - $codes[] = $rc; - } - - return $codes; -} - -/** - * return an array of all enabled redirect-codes - * for the settings form - * - * @param bool $add_desc - * optional, default true, add the code-description - * - * @return array array of enabled redirect-codes - */ -function getRedirectCodes($add_desc = true) -{ - global $lng; - - $sql = "SELECT * FROM `" . TABLE_PANEL_REDIRECTCODES . "` WHERE `enabled` = '1' ORDER BY `id` ASC"; - $result_stmt = Database::query($sql); - - $codes = array(); - while ($rc = $result_stmt->fetch(PDO::FETCH_ASSOC)) { - $codes[$rc['id']] = $rc['code']; - if ($add_desc) { - $codes[$rc['id']] .= ' (' . $lng['redirect_desc'][$rc['desc']] . ')'; - } - } - - return $codes; -} - -/** - * returns the redirect-code for a given - * domain-id - * - * @param integer $domainid - * id of the domain - * - * @return string redirect-code - */ -function getDomainRedirectCode($domainid = 0) -{ - - // get system default - $default = '301'; - if (Settings::Get('customredirect.enabled') == '1') { - $all_codes = getRedirectCodes(false); - $_default = $all_codes[Settings::Get('customredirect.default')]; - $default = ($_default == '---') ? $default : $_default; - } - $code = $default; - if ($domainid > 0) { - - $result_stmt = Database::prepare(" - SELECT `r`.`code` as `redirect` - FROM `" . TABLE_PANEL_REDIRECTCODES . "` `r`, `" . TABLE_PANEL_DOMAINREDIRECTS . "` `rc` - WHERE `r`.`id` = `rc`.`rid` and `rc`.`did` = :domainid - "); - $result = Database::pexecute_first($result_stmt, array( - 'domainid' => $domainid - )); - - if (is_array($result) && isset($result['redirect'])) { - $code = ($result['redirect'] == '---') ? $default : $result['redirect']; - } - } - return $code; -} - -/** - * returns the redirect-id for a given - * domain-id - * - * @param integer $domainid - * id of the domain - * - * @return integer redirect-code-id - */ -function getDomainRedirectId($domainid = 0) -{ - $code = 1; - if ($domainid > 0) { - $result_stmt = Database::prepare(" - SELECT `r`.`id` as `redirect` - FROM `" . TABLE_PANEL_REDIRECTCODES . "` `r`, `" . TABLE_PANEL_DOMAINREDIRECTS . "` `rc` - WHERE `r`.`id` = `rc`.`rid` and `rc`.`did` = :domainid - "); - $result = Database::pexecute_first($result_stmt, array( - 'domainid' => $domainid - )); - - if (is_array($result) && isset($result['redirect'])) { - $code = (int) $result['redirect']; - } - } - return $code; -} - -/** - * adds a redirectcode for a domain - * - * @param integer $domainid - * id of the domain to add the code for - * @param integer $redirect - * selected redirect-id - * - * @return null - */ -function addRedirectToDomain($domainid = 0, $redirect = 1) -{ - if ($domainid > 0) { - $ins_stmt = Database::prepare(" - INSERT INTO `" . TABLE_PANEL_DOMAINREDIRECTS . "` SET `rid` = :rid, `did` = :did - "); - Database::pexecute($ins_stmt, array( - 'rid' => $redirect, - 'did' => $domainid - )); - } -} - -/** - * updates the redirectcode of a domain - * if redirect-code is false, nothing happens - * - * @param integer $domainid - * id of the domain to update - * @param integer $redirect - * selected redirect-id or false - * - * @return null - */ -function updateRedirectOfDomain($domainid = 0, $redirect = false) -{ - if ($redirect == false) { - return; - } - - if ($domainid > 0) { - $del_stmt = Database::prepare(" - DELETE FROM `" . TABLE_PANEL_DOMAINREDIRECTS . "` WHERE `did` = :domainid - "); - Database::pexecute($del_stmt, array( - 'domainid' => $domainid - )); - - $ins_stmt = Database::prepare(" - INSERT INTO `" . TABLE_PANEL_DOMAINREDIRECTS . "` SET `rid` = :rid, `did` = :did - "); - Database::pexecute($ins_stmt, array( - 'rid' => $redirect, - 'did' => $domainid - )); - } -} diff --git a/lib/functions/output/function.buildNavigation.php b/lib/functions/output/function.buildNavigation.php deleted file mode 100644 index aa03b2d2..00000000 --- a/lib/functions/output/function.buildNavigation.php +++ /dev/null @@ -1,118 +0,0 @@ - (2003-2009) - * @author Froxlor team (2010-) - * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt - * @package Functions - * - */ - -/** - * Build Navigation Sidebar - * - * @param - * array navigation data - * @param - * array userinfo the userinfo of the user - * @return string the content of the navigation bar - * - * @author Florian Lippert - */ -function buildNavigation($navigation, $userinfo) -{ - global $theme; - - $returnvalue = ''; - - // sanitize user-given input (url-manipulation) - if (isset($_GET['page']) && is_array($_GET['page'])) { - $_GET['page'] = (string) $_GET['page'][0]; - } - if (isset($_GET['action']) && is_array($_GET['action'])) { - $_GET['action'] = (string) $_GET['action'][0]; - } - - foreach ($navigation as $box) { - if ((! isset($box['show_element']) || $box['show_element'] === true) && (! isset($box['required_resources']) || $box['required_resources'] == '' || (isset($userinfo[$box['required_resources']]) && ((int) $userinfo[$box['required_resources']] > 0 || $userinfo[$box['required_resources']] == '-1')))) { - $navigation_links = ''; - foreach ($box['elements'] as $element_id => $element) { - if ((! isset($element['show_element']) || $element['show_element'] === true) && (! isset($element['required_resources']) || $element['required_resources'] == '' || (isset($userinfo[$element['required_resources']]) && ((int) $userinfo[$element['required_resources']] > 0 || $userinfo[$element['required_resources']] == '-1')))) { - $target = ''; - $active = ''; - $navurl = '#'; - if (isset($element['url']) && trim($element['url']) != '') { - // append sid only to local - - if (! preg_match('/^https?\:\/\//', $element['url']) && (isset($userinfo['hash']) && $userinfo['hash'] != '')) { - // generate sid with ? oder & - - if (strpos($element['url'], '?') !== false) { - $element['url'] .= '&s=' . $userinfo['hash']; - } else { - $element['url'] .= '?s=' . $userinfo['hash']; - } - } - - if (isset($element['new_window']) && $element['new_window'] == true) { - $target = ' target="_blank"'; - } - - if (isset($_GET['page']) && substr_count($element['url'], "page=" . $_GET['page']) > 0 && substr_count($element['url'], basename($_SERVER["SCRIPT_FILENAME"])) > 0 && isset($_GET['action']) && substr_count($element['url'], "action=" . $_GET['action']) > 0) { - $active = ' active'; - } elseif (isset($_GET['page']) && substr_count($element['url'], "page=" . $_GET['page']) > 0 && substr_count($element['url'], basename($_SERVER["SCRIPT_FILENAME"])) > 0 && substr_count($element['url'], "action=") == 0 && ! isset($_GET['action'])) { - $active = ' active'; - } - - $navurl = htmlspecialchars($element['url']); - $navlabel = $element['label']; - } else { - $navlabel = $element['label']; - } - - eval("\$navigation_links .= \"" . \Froxlor\UI\Template::getTemplate("navigation_link", 1) . "\";"); - } - } - - if ($navigation_links != '') { - $target = ''; - if (isset($box['url']) && trim($box['url']) != '') { - // append sid only to local - - if (! preg_match('/^https?\:\/\//', $box['url']) && (isset($userinfo['hash']) && $userinfo['hash'] != '')) { - // generate sid with ? oder & - - if (strpos($box['url'], '?') !== false) { - $box['url'] .= '&s=' . $userinfo['hash']; - } else { - $box['url'] .= '?s=' . $userinfo['hash']; - } - } - - if (isset($box['new_window']) && $box['new_window'] == true) { - $target = ' target="_blank"'; - } - - $navurl = htmlspecialchars($box['url']); - $navlabel = $box['label']; - } else { - $navurl = "#"; - $navlabel = $box['label']; - } - - eval("\$returnvalue .= \"" . \Froxlor\UI\Template::getTemplate("navigation_element", 1) . "\";"); - } - } - } - - return $returnvalue; -} diff --git a/lib/functions/output/function.getCorrectFullUserDetails.php b/lib/functions/output/function.getCorrectFullUserDetails.php deleted file mode 100644 index f4728582..00000000 --- a/lib/functions/output/function.getCorrectFullUserDetails.php +++ /dev/null @@ -1,48 +0,0 @@ - (2003-2009) - * @author Froxlor team (2010-) - * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt - * @package Functions - * - */ - -/** - * Returns full style user details "Name, Firstname | Company" - * - * @param - * array An array with keys firstname, name and company - * @return string The full details - * - * @author Florian Lippert - */ -function getCorrectFullUserDetails($userinfo) -{ - $returnval = ''; - - if (isset($userinfo['firstname']) && isset($userinfo['name']) && isset($userinfo['company'])) { - if ($userinfo['company'] == '') { - $returnval = $userinfo['name'] . ', ' . $userinfo['firstname']; - } else { - if ($userinfo['name'] != '' && $userinfo['firstname'] != '') { - $returnval = $userinfo['name'] . ', ' . $userinfo['firstname'] . ' | ' . $userinfo['company']; - } else { - $returnval = $userinfo['company']; - } - } - } elseif (isset($userinfo['name'])) { - $returnval = $userinfo['name']; - } - - return $returnval; -} diff --git a/lib/functions/output/function.getCorrectUserSalutation.php b/lib/functions/output/function.getCorrectUserSalutation.php deleted file mode 100644 index cd407349..00000000 --- a/lib/functions/output/function.getCorrectUserSalutation.php +++ /dev/null @@ -1,44 +0,0 @@ - (2003-2009) - * @author Froxlor team (2010-) - * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt - * @package Functions - * - */ - -/** - * Returns correct user salutation, either "Firstname Name" or "Company" - * - * @param - * array An array with keys firstname, name and company - * @return string The correct salutation - * - * @author Florian Lippert - */ -function getCorrectUserSalutation($userinfo) -{ - $returnval = ''; - - if (isset($userinfo['firstname']) && isset($userinfo['name']) && isset($userinfo['company'])) { - // Always prefer firstname name - - if ($userinfo['company'] != '' && $userinfo['name'] == '' && $userinfo['firstname'] == '') { - $returnval = $userinfo['company']; - } else { - $returnval = $userinfo['firstname'] . ' ' . $userinfo['name']; - } - } - - return $returnval; -} diff --git a/lib/functions/phphelpers/function.doubleval_ressource.php b/lib/functions/phphelpers/function.doubleval_ressource.php deleted file mode 100644 index e7ffb9db..00000000 --- a/lib/functions/phphelpers/function.doubleval_ressource.php +++ /dev/null @@ -1,38 +0,0 @@ - (2003-2009) - * @author Froxlor team (2010-) - * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt - * @package Functions - * - */ - -/** - * Returns a double of the given value which isn't negative. - * Returns -1 if the given value was -1. - * - * @param - * any The value - * @return double The positive value - * @author Florian Lippert - */ -function doubleval_ressource($the_value) -{ - $the_value = doubleval($the_value); - - if ($the_value < 0 && $the_value != '-1') { - $the_value *= - 1; - } - - return $the_value; -} diff --git a/lib/functions/phphelpers/function.html_entity_decode_array.php b/lib/functions/phphelpers/function.html_entity_decode_array.php deleted file mode 100644 index 0dab2248..00000000 --- a/lib/functions/phphelpers/function.html_entity_decode_array.php +++ /dev/null @@ -1,63 +0,0 @@ - (2003-2009) - * @author Froxlor team (2010-) - * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt - * @package Functions - * - */ - -/** - * Wrapper around html_entity_decode to handle arrays, with the advantage that you - * can select which fields should be handled by htmlentities and with advantage, - * that you can eliminate all html entities by setting complete=true - * - * @param - * array The subject array - * @param - * string The fields which should be checked for, separated by spaces - * @param - * bool Select true to use html_entity_decode_complete instead of html_entity_decode - * @param - * int See php documentation about this - * @param - * string See php documentation about this - * @return array The array with html_entity_decode'd strings - * @author Florian Lippert - */ -function html_entity_decode_array($subject, $fields = '', $complete = false, $quote_style = ENT_COMPAT, $charset = 'UTF-8') -{ - if (is_array($subject)) { - if (! is_array($fields)) { - $fields = array_trim(explode(' ', $fields)); - } - - foreach ($subject as $field => $value) { - if ((! is_array($fields) || empty($fields)) || (is_array($fields) && ! empty($fields) && in_array($field, $fields))) { - /** - * Just call ourselve to manage multi-dimensional arrays - */ - - $subject[$field] = html_entity_decode_array($subject[$field], $fields, $complete, $quote_style, $charset); - } - } - } else { - if ($complete == true) { - $subject = html_entity_decode_complete($subject, $quote_style, $charset); - } else { - $subject = html_entity_decode($subject, $quote_style, $charset); - } - } - - return $subject; -} diff --git a/lib/functions/phphelpers/function.html_entity_decode_complete.php b/lib/functions/phphelpers/function.html_entity_decode_complete.php deleted file mode 100644 index f50456f2..00000000 --- a/lib/functions/phphelpers/function.html_entity_decode_complete.php +++ /dev/null @@ -1,43 +0,0 @@ - (2003-2009) - * @author Froxlor team (2010-) - * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt - * @package Functions - * - */ - -/** - * Calls html_entity_decode in a loop until the result doesn't differ from original anymore - * - * @param - * string The string in which the html entities should be eliminated. - * @return string The cleaned string - * @author Florian Lippert - */ -function html_entity_decode_complete($string) -{ - global $theme; - - if ($theme == 'Classic') { - while ($string != html_entity_decode($string)) { - $string = html_entity_decode($string); - } - } else { - while ($string != html_entity_decode($string, ENT_COMPAT | ENT_HTML5, 'UTF-8')) { - $string = html_entity_decode($string, ENT_COMPAT | ENT_HTML5, 'UTF-8'); - } - } - - return $string; -} diff --git a/lib/functions/phphelpers/function.htmlentities_array.php b/lib/functions/phphelpers/function.htmlentities_array.php deleted file mode 100644 index 671b120a..00000000 --- a/lib/functions/phphelpers/function.htmlentities_array.php +++ /dev/null @@ -1,56 +0,0 @@ - (2003-2009) - * @author Froxlor team (2010-) - * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt - * @package Functions - * - */ - -/** - * Wrapper around htmlentities to handle arrays, with the advantage that you - * can select which fields should be handled by htmlentities - * - * @param - * array The subject array - * @param - * string The fields which should be checked for, separated by spaces - * @param - * int See php documentation about this - * @param - * string See php documentation about this - * @return array The array with htmlentitie'd strings - * @author Florian Lippert - */ -function htmlentities_array($subject, $fields = '', $quote_style = ENT_QUOTES, $charset = 'UTF-8') -{ - if (is_array($subject)) { - if (! is_array($fields)) { - $fields = array_trim(explode(' ', $fields)); - } - - foreach ($subject as $field => $value) { - if ((! is_array($fields) || empty($fields)) || (is_array($fields) && ! empty($fields) && in_array($field, $fields))) { - /** - * Just call ourselve to manage multi-dimensional arrays - */ - - $subject[$field] = htmlentities_array($subject[$field], $fields, $quote_style, $charset); - } - } - } else { - $subject = htmlentities($subject, $quote_style, $charset); - } - - return $subject; -} diff --git a/lib/functions/phphelpers/function.str_replace_array.php b/lib/functions/phphelpers/function.str_replace_array.php deleted file mode 100644 index efdaa9c0..00000000 --- a/lib/functions/phphelpers/function.str_replace_array.php +++ /dev/null @@ -1,49 +0,0 @@ - (2003-2009) - * @author Froxlor team (2010-) - * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt - * @package Functions - * - */ - -/** - * Replaces Strings in an array, with the advantage that you - * can select which fields should be str_replace'd - * - * @param - * mixed String or array of strings to search for - * @param - * mixed String or array to replace with - * @param - * array The subject array - * @param - * string The fields which should be checked for, separated by spaces - * @return array The str_replace'd array - * @author Florian Lippert - */ -function str_replace_array($search, $replace, $subject, $fields = '') -{ - if (is_array($subject)) { - $fields = array_trim(explode(' ', $fields)); - foreach ($subject as $field => $value) { - if ((! is_array($fields) || empty($fields)) || (is_array($fields) && ! empty($fields) && in_array($field, $fields))) { - $subject[$field] = str_replace($search, $replace, $subject[$field]); - } - } - } else { - $subject = str_replace($search, $replace, $subject); - } - - return $subject; -} diff --git a/lib/functions/phphelpers/function.stripslashes_array.php b/lib/functions/phphelpers/function.stripslashes_array.php deleted file mode 100644 index 2dfae6d7..00000000 --- a/lib/functions/phphelpers/function.stripslashes_array.php +++ /dev/null @@ -1,63 +0,0 @@ - (2003-2009) - * @author Froxlor team (2010-) - * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt - * @package Functions - * - */ - -/** - * Wrapper around stripslashes to handle arrays, with the advantage that you - * can select which fields should be handled by htmlentities and with advantage, - * that you can eliminate all slashes by setting complete=true - * - * @param - * array The subject array - * @param - * int See php documentation about this - * @param - * string See php documentation about this - * @param - * string The fields which should be checked for, separated by spaces - * @param - * bool Select true to use stripslashes_complete instead of stripslashes - * @return array The array with stripslashe'd strings - * @author Florian Lippert - */ -function stripslashes_array($subject, $fields = '', $complete = false) -{ - if (is_array($subject)) { - if (! is_array($fields)) { - $fields = array_trim(explode(' ', $fields)); - } - - foreach ($subject as $field => $value) { - if ((! is_array($fields) || empty($fields)) || (is_array($fields) && ! empty($fields) && in_array($field, $fields))) { - /** - * Just call ourselve to manage multi-dimensional arrays - */ - - $subject[$field] = stripslashes_array($subject[$field], $fields, $complete); - } - } - } else { - if ($complete == true) { - $subject = stripslashes_complete($subject); - } else { - $subject = stripslashes($subject); - } - } - - return $subject; -} diff --git a/lib/functions/phphelpers/function.stripslashes_complete.php b/lib/functions/phphelpers/function.stripslashes_complete.php deleted file mode 100644 index f9a4b7da..00000000 --- a/lib/functions/phphelpers/function.stripslashes_complete.php +++ /dev/null @@ -1,35 +0,0 @@ - (2003-2009) - * @author Froxlor team (2010-) - * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt - * @package Functions - * - */ - -/** - * Calls stripslashes in a loop until the result doesn't differ from original anymore - * - * @param - * string The string in which the slashes should be eliminated. - * @return string The cleaned string - * @author Florian Lippert - */ -function stripslashes_complete($string) -{ - while ($string != stripslashes($string)) { - $string = stripslashes($string); - } - - return $string; -} diff --git a/lib/functions/validate/function.buildValidMailFrom.php b/lib/functions/validate/function.buildValidMailFrom.php deleted file mode 100644 index 4d0b21b6..00000000 --- a/lib/functions/validate/function.buildValidMailFrom.php +++ /dev/null @@ -1,40 +0,0 @@ - (2003-2009) - * @author Froxlor team (2010-) - * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt - * @package Functions - * - */ - -/** - * Create a valid from/to - mailheader (remove carriage-returns) - * - * @param - * string The name of the recipient - * @param - * string The mailaddress - * @return string A valid header-entry - * @author Florian Aders - */ -function buildValidMailFrom($name, $mailaddress) -{ - $mailfrom = str_replace(array( - "\r", - "\n" - ), '', $name) . ' <' . str_replace(array( - "\r", - "\n" - ), '', $mailaddress) . '>'; - return $mailfrom; -} diff --git a/lib/init.php b/lib/init.php index 39549e69..381539c2 100644 --- a/lib/init.php +++ b/lib/init.php @@ -110,7 +110,10 @@ if (! isset($sql) || ! is_array($sql)) { * Includes the Functions */ require \Froxlor\Froxlor::getInstallDir() . '/lib/functions.php'; -@set_error_handler('phpErrHandler'); +@set_error_handler(array( + '\\Froxlor\\PhpHelper', + 'phpErrHandler' +)); /** * Includes the MySQL-Tabledefinitions etc. @@ -416,10 +419,10 @@ if (AREA == 'admin' || AREA == 'customer') { ) ) ); - $navigation = buildNavigation($navigation_data['admin'], $userinfo); + $navigation = \Froxlor\UI\HTML::buildNavigation($navigation_data['admin'], $userinfo); } else { - $navigation_data = loadConfigArrayDir('lib/navigation/'); - $navigation = buildNavigation($navigation_data[AREA], $userinfo); + $navigation_data = \Froxlor\PhpHelper::loadConfigArrayDir('lib/navigation/'); + $navigation = \Froxlor\UI\HTML::buildNavigation($navigation_data[AREA], $userinfo); } unset($navigation_data); } diff --git a/ssl_certificates.php b/ssl_certificates.php index d44f1825..554d7613 100644 --- a/ssl_certificates.php +++ b/ssl_certificates.php @@ -149,7 +149,7 @@ if (count($all_certs) == 0) { } } - $row = htmlentities_array($cert); + $row = \Froxlor\PhpHelper::htmlentities_array($cert); eval("\$certificates.=\"" . \Froxlor\UI\Template::getTemplate("ssl_certificates/certs_cert", true) . "\";"); } else { $message = sprintf($lng['domains']['ssl_certificate_error'], $cert['domain']);