<?php require_once "inc/prerequisites.inc.php"; if ($_SESSION['mailcow_cc_role'] == "admin" || $_SESSION['mailcow_cc_role'] == "domainadmin") { require_once "inc/header.inc.php"; $_SESSION['return_to'] = $_SERVER['REQUEST_URI']; ?> <div class="container"> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title"><?=$lang['mailbox']['domains'];?> <span class="badge" id="numRowsDomain"></span></h3> <div class="pull-right"> <span class="clickable filter" data-toggle="tooltip" title="<?=$lang['mailbox']['filter_table'];?>" data-container="body"> <i class="glyphicon glyphicon-filter"></i> </span> <?php if ($_SESSION['mailcow_cc_role'] == "admin"): ?> <a href="/add.php?domain"><span class="glyphicon glyphicon-plus"></span></a> <?php endif; ?> </div> </div> <div class="panel-body"> <input type="text" class="form-control" id="domaintable-filter" data-action="filter" data-filters="#domaintable" placeholder="Filter" /> </div> <div class="table-responsive"> <table class="table table-striped sortable-theme-bootstrap" data-sortable id="domaintable"> <thead> <tr> <th class="sort-table" style="min-width: 86px;"><?=$lang['mailbox']['domain'];?></th> <th class="sort-table" style="min-width: 81px;"><?=$lang['mailbox']['aliases'];?></th> <th class="sort-table" style="min-width: 99px;"><?=$lang['mailbox']['mailboxes'];?></th> <th class="sort-table" style="min-width: 172px;"><?=$lang['mailbox']['mailbox_quota'];?></th> <th class="sort-table" style="min-width: 117px;"><?=$lang['mailbox']['domain_quota'];?></th> <?php if ($_SESSION['mailcow_cc_role'] == "admin"): ?> <th class="sort-table" style="min-width: 105px;"><?=$lang['mailbox']['backup_mx'];?></th> <?php endif; ?> <th class="sort-table" style="min-width: 76px;"><?=$lang['mailbox']['active'];?></th> <th style="text-align: right; min-width: 200px;" data-sortable="false"><?=$lang['mailbox']['action'];?></th> </tr> </thead> <tbody> <?php try { $stmt = $pdo->prepare("SELECT `domain`, `aliases`, `mailboxes`, `maxquota` * 1048576 AS `maxquota`, `quota` * 1048576 AS `quota`, CASE `backupmx` WHEN 1 THEN '".$lang['mailbox']['yes']."' ELSE '".$lang['mailbox']['no']."' END AS `backupmx`, CASE `active` WHEN 1 THEN '".$lang['mailbox']['yes']."' ELSE '".$lang['mailbox']['no']."' END AS `active` FROM `domain` WHERE `domain` IN ( SELECT `domain` FROM `domain_admins` WHERE `username`= :username AND `active`='1' ) OR 'admin'= :admin"); $stmt->execute(array( ':username' => $_SESSION['mailcow_cc_username'], ':admin' => $_SESSION['mailcow_cc_role'], )); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { $_SESSION['return'] = array( 'type' => 'danger', 'msg' => 'MySQL: '.$e ); return false; } if(!empty($rows)): while($row = array_shift($rows)): try { $stmt = $pdo->prepare("SELECT COUNT(*) AS `count` FROM `alias` WHERE `domain`= :domain AND `address` NOT IN ( SELECT `username` FROM `mailbox`)"); $stmt->execute(array(':domain' => $row['domain'])); $AliasData = $stmt->fetch(PDO::FETCH_ASSOC); $stmt = $pdo->prepare("SELECT COUNT(*) AS `count`, COALESCE(SUM(`quota`), '0') AS `quota` FROM `mailbox` WHERE `domain` = :domain"); $stmt->execute(array(':domain' => $row['domain'])); $MailboxData = $stmt->fetch(PDO::FETCH_ASSOC); } catch (PDOException $e) { $_SESSION['return'] = array( 'type' => 'danger', 'msg' => 'MySQL: '.$e ); return false; } ?> <tr id="data"> <td><?=htmlspecialchars($row['domain']);?></td> <td><?=intval($AliasData['count']);?> / <?=intval($row['aliases']);?></td> <td><?=$MailboxData['count'];?> / <?=$row['mailboxes'];?></td> <td><?=formatBytes(intval($row['maxquota']), 2);?></td> <td><?=formatBytes(intval($MailboxData['quota']), 2);?> / <?=formatBytes(intval($row['quota']));?></td> <?php if ($_SESSION['mailcow_cc_role'] == "admin"): ?> <td><?=$row['backupmx'];?></td> <?php endif; ?> <td><?=$row['active'];?></td> <?php if ($_SESSION['mailcow_cc_role'] == "admin"): ?> <td style="text-align: right;"> <div class="btn-group"> <a href="/edit.php?domain=<?=urlencode($row['domain']);?>" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> <?=$lang['mailbox']['edit'];?></a> <a href="/delete.php?domain=<?=urlencode($row['domain']);?>" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> <?=$lang['mailbox']['remove'];?></a> </div> </td> <?php else: ?> <td style="text-align: right;"> <div class="btn-group"> <a href="/edit.php?domain=<?=urlencode($row['domain']);?>" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> <?=$lang['mailbox']['edit'];?></a> </div> </td> </tr> <?php endif; endwhile; else: ?> <tr id="no-data"><td colspan="8" style="text-align: center; font-style: italic;"><?=$lang['mailbox']['no_record'];?></td></tr> <?php endif; ?> </tbody> <?php if ($_SESSION['mailcow_cc_role'] == "admin"): ?> <tfoot> <tr id="no-data"> <td colspan="8" style="text-align: center; font-style: normal; border-top: 1px solid #e7e7e7;"> <a href="/add.php?domain" class="btn btn-xs btn-primary"><span class="glyphicon glyphicon-plus"></span> <?=$lang['mailbox']['add_domain'];?></a> </td> </tr> </tfoot> <?php endif; ?> </table> </div> </div> </div> </div> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title"><?=$lang['mailbox']['domain_aliases'];?> <span class="badge" id="numRowsDomainAlias"></span></h3> <div class="pull-right"> <span class="clickable filter" data-toggle="tooltip" title="<?=$lang['mailbox']['filter_table'];?>" data-container="body"> <i class="glyphicon glyphicon-filter"></i> </span> <a href="/add.php?aliasdomain"><span class="glyphicon glyphicon-plus"></span></a> </div> </div> <div class="panel-body"> <input type="text" class="form-control" id="domainaliastable-filter" data-action="filter" data-filters="#domainaliastable" placeholder="Filter" /> </div> <div class="table-responsive"> <table class="table table-striped sortable-theme-bootstrap" data-sortable id="domainaliastable"> <thead> <tr> <th class="sort-table" style="min-width: 67px;"><?=$lang['mailbox']['alias'];?></th> <th class="sort-table" style="min-width: 127px;"><?=$lang['mailbox']['target_domain'];?></th> <th class="sort-table" style="min-width: 76px;"><?=$lang['mailbox']['active'];?></th> <th style="text-align: right; min-width: 200px;" data-sortable="false"><?=$lang['mailbox']['action'];?></th> </tr> </thead> <tbody> <?php try { $stmt = $pdo->prepare("SELECT `alias_domain`, `target_domain`, CASE `active` WHEN 1 THEN '".$lang['mailbox']['yes']."' ELSE '".$lang['mailbox']['no']."' END AS `active` FROM `alias_domain` WHERE `target_domain` IN ( SELECT `domain` FROM `domain_admins` WHERE `username`= :username AND `active`='1' ) OR 'admin' = :admin"); $stmt->execute(array( ':username' => $_SESSION['mailcow_cc_username'], ':admin' => $_SESSION['mailcow_cc_role'], )); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); } catch(PDOException $e) { $_SESSION['return'] = array( 'type' => 'danger', 'msg' => 'MySQL: '.$e ); } if(!empty($rows)): while($row = array_shift($rows)): ?> <tr id="data"> <td><?=htmlspecialchars($row['alias_domain']);?></td> <td><?=htmlspecialchars($row['target_domain']);?></td> <td><?=$row['active'];?></td> <td style="text-align: right;"> <div class="btn-group"> <a href="/edit.php?aliasdomain=<?=urlencode($row['alias_domain']);?>" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> <?=$lang['mailbox']['edit'];?></a> <a href="/delete.php?aliasdomain=<?=urlencode($row['alias_domain']);?>" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> <?=$lang['mailbox']['remove'];?></a> </div> </td> </tr> <?php endwhile; else: ?> <tr id="no-data"><td colspan="4" style="text-align: center; font-style: italic;"><?=$lang['mailbox']['no_record'];?></td></tr> <?php endif; ?> </tbody> <tfoot> <tr id="no-data"> <td colspan="8" style="text-align: center; border-top: 1px solid #e7e7e7;"> <a href="/add.php?aliasdomain" class="btn btn-xs btn-primary"><span class="glyphicon glyphicon-plus"></span> <?=$lang['mailbox']['add_domain_alias'];?></a> </td> </tr> </tfoot> </table> </div> </div> </div> </div> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title"><?=$lang['mailbox']['mailboxes'];?> <span class="badge" id="numRowsMailbox"></span></h3> <div class="pull-right"> <span class="clickable filter" data-toggle="tooltip" title="<?=$lang['mailbox']['filter_table'];?>" data-container="body"> <i class="glyphicon glyphicon-filter"></i> </span> <a href="/add.php?mailbox"><span class="glyphicon glyphicon-plus"></span></a> </div> </div> <div class="panel-body"> <input type="text" class="form-control" id="mailboxtable-filter" data-action="filter" data-filters="#mailboxtable" placeholder="Filter" /> </div> <div class="table-responsive"> <table class="table table-striped sortable-theme-bootstrap" data-sortable id="mailboxtable"> <thead> <tr> <th class="sort-table" style="min-width: 100px;"><?=$lang['mailbox']['username'];?></th> <th class="sort-table" style="min-width: 98px;"><?=$lang['mailbox']['fname'];?></th> <th class="sort-table" style="min-width: 86px;"><?=$lang['mailbox']['domain'];?></th> <th class="sort-table" style="min-width: 75px;"><?=$lang['mailbox']['quota'];?></th> <th class="sort-table" style="min-width: 99px;"><?=$lang['mailbox']['in_use'];?></th> <th class="sort-table" style="min-width: 100px;"><?=$lang['mailbox']['msg_num'];?></th> <th class="sort-table" style="min-width: 76px;"><?=$lang['mailbox']['active'];?></th> <th style="text-align: right; min-width: 200px;" data-sortable="false"><?=$lang['mailbox']['action'];?></th> </tr> </thead> <tbody> <?php try { $stmt = $pdo->prepare("SELECT `domain`.`backupmx`, `mailbox`.`username`, `mailbox`.`name`, CASE `mailbox`.`active` WHEN 1 THEN '".$lang['mailbox']['yes']."' ELSE '".$lang['mailbox']['no']."' END AS `active`, `mailbox`.`domain`, `mailbox`.`quota`, `quota2`.`bytes`, `quota2`.`messages` FROM `mailbox`, `quota2`, `domain` WHERE (`mailbox`.`username` = `quota2`.`username`) AND (`domain`.`domain` = `mailbox`.`domain`) AND (`mailbox`.`domain` IN ( SELECT `domain` FROM `domain_admins` WHERE `username`= :username AND `active`='1' ) OR 'admin' = :admin)"); $stmt->execute(array( ':username' => $_SESSION['mailcow_cc_username'], ':admin' => $_SESSION['mailcow_cc_role'], )); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { $_SESSION['return'] = array( 'type' => 'danger', 'msg' => 'MySQL: '.$e ); return false; } if(!empty($rows)): while($row = array_shift($rows)): ?> <tr id="data"> <?php if ($row['backupmx'] == "0"): ?> <td><?=htmlspecialchars($row['username']);?></td> <?php else: ?> <td><span data-toggle="tooltip" title="Relayed"><i class="glyphicon glyphicon-forward"></i> <?=htmlspecialchars($row['username']);?></span></td> <?php endif; ?> <td><?=htmlspecialchars($row['name'], ENT_QUOTES, 'UTF-8');?></td> <td><?=htmlspecialchars($row['domain']);?></td> <td><?=formatBytes(intval($row['bytes']), 2);?> / <?=formatBytes(intval($row['quota']), 2);?></td> <td style="min-width:120px;"> <?php $percentInUse = round((intval($row['bytes']) / intval($row['quota'])) * 100); if ($percentInUse >= 90) { $pbar = "progress-bar-danger"; } elseif ($percentInUse >= 75) { $pbar = "progress-bar-warning"; } else { $pbar = "progress-bar-success"; } ?> <div class="progress"> <div class="progress-bar <?=$pbar;?>" role="progressbar" aria-valuenow="<?=$percentInUse;?>" aria-valuemin="0" aria-valuemax="100" style="min-width:2em;width: <?=$percentInUse;?>%;"> <?=$percentInUse;?>% </div> </div> </td> <td><?=$row['messages'];?></td> <td><?=$row['active'];?></td> <td style="text-align: right;"> <div class="btn-group"> <a href="/edit.php?mailbox=<?=urlencode($row['username']);?>" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> <?=$lang['mailbox']['edit'];?></a> <a href="/delete.php?mailbox=<?=urlencode($row['username']);?>" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> <?=$lang['mailbox']['remove'];?></a> </div> </td> </tr> <?php endwhile; else: ?> <tr id="no-data"><td colspan="8" style="text-align: center; font-style: italic;"><?=$lang['mailbox']['no_record'];?></td></tr> <?php endif; ?> </tbody> <tfoot> <tr id="no-data"> <td colspan="8" style="text-align: center; border-top: 1px solid #e7e7e7;"> <a href="/add.php?mailbox" class="btn btn-xs btn-primary"><span class="glyphicon glyphicon-plus"></span> <?=$lang['mailbox']['add_mailbox'];?></a> </td> </tr> </tfoot> </table> </div> </div> </div> </div> <div class="row"> <div class="col-md-12"> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title"><?=$lang['mailbox']['aliases'];?> <span class="badge" id="numRowsAlias"></span></h3> <div class="pull-right"> <span class="clickable filter" data-toggle="tooltip" title="<?=$lang['mailbox']['filter_table'];?>" data-container="body"> <i class="glyphicon glyphicon-filter"></i> </span> <a href="/add.php?alias"><span class="glyphicon glyphicon-plus"></span></a> </div> </div> <div class="panel-body"> <input type="text" class="form-control" id="aliastable-filter" data-action="filter" data-filters="#aliastable" placeholder="Filter" /> </div> <div class="table-responsive"> <table class="table table-striped sortable-theme-bootstrap" data-sortable id="aliastable"> <thead> <tr> <th class="sort-table" style="min-width: 67px;"><?=$lang['mailbox']['alias'];?></th> <th class="sort-table" style="min-width: 119px;"><?=$lang['mailbox']['target_address'];?></th> <th class="sort-table" style="min-width: 86px;"><?=$lang['mailbox']['domain'];?></th> <th class="sort-table" style="min-width: 76px;"><?=$lang['mailbox']['active'];?></th> <th style="text-align: right; min-width: 200px;" data-sortable="false"><?=$lang['mailbox']['action'];?></th> </tr> </thead> <tbody> <?php try { $stmt = $pdo->prepare("SELECT `address`, `goto`, `domain`, CASE `active` WHEN 1 THEN '".$lang['mailbox']['yes']."' ELSE '".$lang['mailbox']['no']."' END AS `active` FROM alias WHERE ( `address` NOT IN ( SELECT `username` FROM `mailbox` ) AND `address` != `goto` ) AND (`domain` IN ( SELECT `domain` FROM `domain_admins` WHERE `username` = :username AND active='1' ) OR 'admin' = :admin)"); $stmt->execute(array( ':username' => $_SESSION['mailcow_cc_username'], ':admin' => $_SESSION['mailcow_cc_role'], )); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { $_SESSION['return'] = array( 'type' => 'danger', 'msg' => 'MySQL: '.$e ); return false; } if(!empty($rows)): while($row = array_shift($rows)): ?> <tr id="data"> <td> <?php if(!filter_var($row['address'], FILTER_VALIDATE_EMAIL)): ?> <span class="glyphicon glyphicon-pushpin" aria-hidden="true"></span> Catch-all @<?=htmlspecialchars($row['domain']);?> <?php else: echo htmlspecialchars($row['address']); endif; ?> </td> <td> <?php foreach(explode(",", $row['goto']) as $goto) { echo nl2br(htmlspecialchars($goto.PHP_EOL)); } ?> </td> <td><?=htmlspecialchars($row['domain']);?></td> <td><?=$row['active'];?></td> <td style="text-align: right;"> <div class="btn-group"> <a href="/edit.php?alias=<?=urlencode($row['address']);?>" class="btn btn-xs btn-default"><span class="glyphicon glyphicon-pencil"></span> <?=$lang['mailbox']['edit'];?></a> <a href="/delete.php?alias=<?=urlencode($row['address']);?>" class="btn btn-xs btn-danger"><span class="glyphicon glyphicon-trash"></span> <?=$lang['mailbox']['remove'];?></a> </div> </td> </tr> <?php endwhile; else: ?> <tr id="no-data"><td colspan="5" style="text-align: center; font-style: italic;"><?=$lang['mailbox']['no_record'];?></td></tr> <?php endif; ?> </tbody> <tfoot> <tr id="no-data"> <td colspan="8" style="text-align: center; border-top: 1px solid #e7e7e7;"> <a href="/add.php?alias" class="btn btn-xs btn-primary"><span class="glyphicon glyphicon-plus"></span> <?=$lang['mailbox']['add_alias'];?></a> </td> </tr> </tfoot> </table> </div> </div> </div> </div> </div> <!-- /container --> <script src="js/sorttable.js"></script> <script src="js/mailbox.js"></script> <?php require_once("inc/footer.inc.php"); } else { header('Location: /'); exit(); } ?>