@@ -40,91 +40,15 @@ if ($page == 'overview') {
|
||||
} elseif ($page == 'emails') {
|
||||
if ($action == '') {
|
||||
$log->logAction(\Froxlor\FroxlorLogger::USR_ACTION, LOG_NOTICE, "viewed customer_email::emails");
|
||||
$fields = array(
|
||||
'd.domain_ace' => $lng['domains']['domainname'],
|
||||
'm.email_full' => $lng['emails']['emailaddress'],
|
||||
'm.destination' => $lng['emails']['forwarders']
|
||||
);
|
||||
|
||||
try {
|
||||
// get total count
|
||||
$json_result = Emails::getLocal($userinfo)->listingCount();
|
||||
$result = json_decode($json_result, true)['data'];
|
||||
// initialize pagination and filtering
|
||||
$paging = new \Froxlor\UI\Pagination($userinfo, $fields, $result);
|
||||
// get list
|
||||
$json_result = Emails::getLocal($userinfo, $paging->getApiCommandParams())->listing();
|
||||
$email_list_data = include_once dirname(__FILE__) . '/lib/tablelisting/customer/tablelisting.emails.php';
|
||||
$list = (new \Froxlor\UI\Collection(\Froxlor\Api\Commands\Emails::class, $userinfo))
|
||||
->withPagination($email_list_data['email_list']['columns'])
|
||||
->getList();
|
||||
} catch (Exception $e) {
|
||||
\Froxlor\UI\Response::dynamic_error($e->getMessage());
|
||||
}
|
||||
$result = json_decode($json_result, true)['data'];
|
||||
|
||||
$sortcode = $paging->getHtmlSortCode($lng);
|
||||
$arrowcode = $paging->getHtmlArrowCode($filename . '?page=' . $page . '&s=' . $s);
|
||||
$searchcode = $paging->getHtmlSearchCode($lng);
|
||||
$pagingcode = $paging->getHtmlPagingCode($filename . '?page=' . $page . '&s=' . $s);
|
||||
$emails = array();
|
||||
$emailscount = $paging->getEntries();
|
||||
|
||||
foreach ($result['list'] as $row) {
|
||||
if (! isset($emails[$row['domain']]) || ! is_array($emails[$row['domain']])) {
|
||||
$emails[$row['domain']] = array();
|
||||
}
|
||||
|
||||
$emails[$row['domain']][$row['email_full']] = $row;
|
||||
}
|
||||
|
||||
if ($paging->sortfield == 'd.domain_ace' && $paging->sortorder == 'desc') {
|
||||
krsort($emails);
|
||||
} else {
|
||||
ksort($emails);
|
||||
}
|
||||
|
||||
$count = 0;
|
||||
$accounts = '';
|
||||
$emails_count = 0;
|
||||
$domainname = '';
|
||||
foreach ($emails as $domainid => $emailaddresses) {
|
||||
if ($paging->sortfield == 'm.email_full' && $paging->sortorder == 'desc') {
|
||||
krsort($emailaddresses);
|
||||
} else {
|
||||
ksort($emailaddresses);
|
||||
}
|
||||
|
||||
foreach ($emailaddresses as $row) {
|
||||
if ($domainname != $idna_convert->decode($row['domain'])) {
|
||||
$domainname = $idna_convert->decode($row['domain']);
|
||||
eval("\$accounts.=\"" . \Froxlor\UI\Template::getTemplate("email/emails_domain") . "\";");
|
||||
}
|
||||
|
||||
$emails_count ++;
|
||||
$row['email'] = $idna_convert->decode($row['email']);
|
||||
$row['email_full'] = $idna_convert->decode($row['email_full']);
|
||||
$row['destination'] = explode(' ', $row['destination']);
|
||||
uasort($row['destination'], 'strcasecmp');
|
||||
|
||||
$dest_list = $row['destination'];
|
||||
foreach ($dest_list as $dest_id => $destination) {
|
||||
$row['destination'][$dest_id] = $idna_convert->decode($row['destination'][$dest_id]);
|
||||
|
||||
if ($row['destination'][$dest_id] == $row['email_full']) {
|
||||
unset($row['destination'][$dest_id]);
|
||||
}
|
||||
}
|
||||
|
||||
$destinations_count = count($row['destination']);
|
||||
$row['destination'] = implode(', ', $row['destination']);
|
||||
|
||||
if (strlen($row['destination']) > 35) {
|
||||
$row['destination'] = substr($row['destination'], 0, 32) . '... (' . $destinations_count . ')';
|
||||
}
|
||||
|
||||
$row['mboxsize'] = \Froxlor\PhpHelper::sizeReadable($row['mboxsize'], 'GiB', 'bi', '%01.' . (int) Settings::Get('panel.decimal_places') . 'f %s');
|
||||
|
||||
$row = \Froxlor\PhpHelper::htmlentitiesArray($row);
|
||||
eval("\$accounts.=\"" . \Froxlor\UI\Template::getTemplate("email/emails_email") . "\";");
|
||||
$count ++;
|
||||
}
|
||||
}
|
||||
|
||||
$result_stmt = Database::prepare("
|
||||
SELECT COUNT(`id`) as emaildomains
|
||||
@@ -136,7 +60,10 @@ if ($page == 'overview') {
|
||||
));
|
||||
$emaildomains_count = $result2['emaildomains'];
|
||||
|
||||
eval("echo \"" . \Froxlor\UI\Template::getTemplate("email/emails") . "\";");
|
||||
UI::twigBuffer('user/table.html.twig', [
|
||||
'listing' => \Froxlor\UI\Listing::format($list, $email_list_data['email_list']),
|
||||
]);
|
||||
UI::twigOutputBuffer();
|
||||
} elseif ($action == 'delete' && $id != 0) {
|
||||
try {
|
||||
$json_result = Emails::getLocal($userinfo, array(
|
||||
|
||||
35
lib/Froxlor/UI/Callbacks/Email.php
Normal file
35
lib/Froxlor/UI/Callbacks/Email.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace Froxlor\UI\Callbacks;
|
||||
|
||||
use Froxlor\Settings;
|
||||
use Froxlor\PhpHelper;
|
||||
|
||||
/**
|
||||
* This file is part of the Froxlor project.
|
||||
* Copyright (c) 2010 the Froxlor Team (see authors).
|
||||
*
|
||||
* For the full copyright and license information, please view the COPYING
|
||||
* file that was distributed with this source code. You can also view the
|
||||
* COPYING file online at http://files.froxlor.org/misc/COPYING.txt
|
||||
*
|
||||
* @copyright (c) the authors
|
||||
* @author Froxlor team <team@froxlor.org> (2010-)
|
||||
* @license GPLv2 http://files.froxlor.org/misc/COPYING.txt
|
||||
* @package Listing
|
||||
*
|
||||
*/
|
||||
|
||||
class Email
|
||||
{
|
||||
public static function account(string $data, array $attributes): mixed
|
||||
{
|
||||
return [
|
||||
'type' => 'booleanWithInfo',
|
||||
'data' => [
|
||||
'checked' => $data != 0,
|
||||
'info' => $data != 0 ? PhpHelper::sizeReadable($attributes['mboxsize'], 'GiB', 'bi', '%01.' . (int) Settings::Get('panel.decimal_places') . 'f %s') : ''
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -23,7 +23,7 @@ return array(
|
||||
'title' => $lng['emails']['account_add'],
|
||||
'image' => 'icons/email_add.png',
|
||||
'fields' => array(
|
||||
'email_full' => array(
|
||||
'emailaddr' => array(
|
||||
'label' => $lng['emails']['emailaddress'],
|
||||
'type' => 'label',
|
||||
'value' => $result['email_full']
|
||||
|
||||
@@ -23,7 +23,7 @@ return array(
|
||||
'title' => $lng['emails']['forwarder_add'],
|
||||
'image' => 'icons/autoresponder_add.png',
|
||||
'fields' => array(
|
||||
'email_full' => array(
|
||||
'emailaddr' => array(
|
||||
'label' => $lng['emails']['from'],
|
||||
'type' => 'label',
|
||||
'value' => $result['email_full']
|
||||
|
||||
83
lib/tablelisting/customer/tablelisting.emails.php
Normal file
83
lib/tablelisting/customer/tablelisting.emails.php
Normal file
@@ -0,0 +1,83 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This file is part of the Froxlor project.
|
||||
* Copyright (c) 2010 the Froxlor Team (see authors).
|
||||
*
|
||||
* For the full copyright and license information, please view the COPYING
|
||||
* file that was distributed with this source code. You can also view the
|
||||
* COPYING file online at http://files.froxlor.org/misc/COPYING.txt
|
||||
*
|
||||
* @copyright (c) the authors
|
||||
* @author Froxlor team <team@froxlor.org> (2010-)
|
||||
* @author Maurice Preuß <hello@envoyr.com>
|
||||
* @license GPLv2 http://files.froxlor.org/misc/COPYING.txt
|
||||
* @package Tabellisting
|
||||
*
|
||||
*/
|
||||
|
||||
use Froxlor\UI\Callbacks\Email;
|
||||
use Froxlor\UI\Callbacks\Text;
|
||||
use Froxlor\UI\Listing;
|
||||
|
||||
return [
|
||||
'email_list' => [
|
||||
'title' => $lng['menue']['email']['emails'],
|
||||
'icon' => 'fa-solid fa-envelope',
|
||||
'columns' => [
|
||||
'm.email_full' => [
|
||||
'label' => $lng['emails']['emailaddress'],
|
||||
'column' => 'email_full',
|
||||
],
|
||||
'm.destination' => [
|
||||
'label' => $lng['emails']['forwarders'],
|
||||
'column' => 'destination',
|
||||
// @todo formatting
|
||||
],
|
||||
'm.popaccountid' => [
|
||||
'label' => $lng['emails']['account'],
|
||||
'column' => 'popaccountid',
|
||||
'format_callback' => [Email::class, 'account'],
|
||||
],
|
||||
'm.iscatchall' => [
|
||||
'label' => $lng['emails']['catchall'],
|
||||
'column' => 'iscatchall',
|
||||
'format_callback' => [Text::class, 'boolean'],
|
||||
'visible' => \Froxlor\Settings::Get('catchall.catchall_enabled') == '1'
|
||||
],
|
||||
'm.quota' => [
|
||||
'label' => $lng['emails']['quota'],
|
||||
'column' => 'quota',
|
||||
'visible' => \Froxlor\Settings::Get('system.mail_quota_enabled') == '1'
|
||||
]
|
||||
],
|
||||
'visible_columns' => Listing::getVisibleColumnsForListing('email_list', [
|
||||
'm.email_full',
|
||||
'm.destination',
|
||||
'm.popaccountid',
|
||||
'm.iscatchall',
|
||||
'm.quota'
|
||||
]),
|
||||
'actions' => [
|
||||
'edit' => [
|
||||
'icon' => 'fa fa-edit',
|
||||
'href' => [
|
||||
'section' => 'email',
|
||||
'page' => 'emails',
|
||||
'action' => 'edit',
|
||||
'id' => ':id'
|
||||
],
|
||||
],
|
||||
'delete' => [
|
||||
'icon' => 'fa fa-trash',
|
||||
'class' => 'text-danger',
|
||||
'href' => [
|
||||
'section' => 'email',
|
||||
'page' => 'emails',
|
||||
'action' => 'delete',
|
||||
'id' => ':id'
|
||||
],
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
@@ -53,7 +53,7 @@
|
||||
{% if field.next_to is defined %}
|
||||
<div class="input-group">
|
||||
{% endif %}
|
||||
<input type="text" readonly class="form-control-plaintext" id="{{ id }}" value="{{ field.value }}">
|
||||
<input type="text" readonly class="form-control-plaintext" id="{{ id }}" name="{{ id }}" value="{{ field.value }}">
|
||||
{% if field.next_to is defined %}
|
||||
{% for nid, nfield in field.next_to %}
|
||||
{% if nfield.next_to_prefix is defined %}
|
||||
|
||||
@@ -18,6 +18,17 @@
|
||||
{% endif %}
|
||||
{% endmacro %}
|
||||
|
||||
{% macro booleanWithInfo(data) %}
|
||||
{% if (data.checked) %}
|
||||
<i class="fa fa-check-circle text-success"></i>
|
||||
{% else %}
|
||||
<i class="fa fa-times-circle text-danger"></i>
|
||||
{% endif %}
|
||||
{% if data.info is not empty %}
|
||||
{{ data.info }}
|
||||
{% endif %}
|
||||
{% endmacro %}
|
||||
|
||||
{% macro link(data) %}
|
||||
{% apply spaceless %}
|
||||
<a href="{{ data.href }}" {% if data.class is defined %}class="{{ data.class }}"{% endif %} {% if data.target is defined %}target="{{ data.target }}"{% endif %}>
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
{{ callbacks.progressbar(td.data.data) }}
|
||||
{% elseif td.data.type == 'boolean' %}
|
||||
{{ callbacks.boolean(td.data.data) }}
|
||||
{% elseif td.data.type == 'booleanWithInfo' %}
|
||||
{{ callbacks.booleanWithInfo(td.data.data) }}
|
||||
{% elseif td.data.type == 'link' %}
|
||||
{{ callbacks.link(td.data.data) }}
|
||||
{% elseif td.data.type == 'domainWithSan' %}
|
||||
|
||||
Reference in New Issue
Block a user