SF.net SVN: postfixadmin: [363] trunk
Brought to you by:
christian_boltz,
gingerdog
|
From: <Gin...@us...> - 2008-05-21 21:05:44
|
Revision: 363
http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=363&view=rev
Author: GingerDog
Date: 2008-05-21 14:05:48 -0700 (Wed, 21 May 2008)
Log Message:
-----------
inital merge of lenix's patch for domain aliasing; I think list-virtual.php needs some attention, but I've run out of time right now; upgrade.php has been updated to create the tables correctly (tested on pgsql and mysql); functionality or php scripts not tested yet
Modified Paths:
--------------
trunk/DOCUMENTS/POSTFIX_CONF.txt
trunk/css/default.css
trunk/delete.php
trunk/edit-active.php
trunk/functions.inc.php
trunk/languages/en.lang
trunk/list-virtual.php
trunk/templates/list-virtual.php
trunk/upgrade.php
Added Paths:
-----------
trunk/templates/create-alias-domain.php
Modified: trunk/DOCUMENTS/POSTFIX_CONF.txt
===================================================================
--- trunk/DOCUMENTS/POSTFIX_CONF.txt 2008-05-21 11:22:09 UTC (rev 362)
+++ trunk/DOCUMENTS/POSTFIX_CONF.txt 2008-05-21 21:05:48 UTC (rev 363)
@@ -9,9 +9,14 @@
Its generally recommended to use proxy as well (which should also appear in
postconf -m) Three main.cf variables are involved:
-virtual_alias_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
-virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf
+virtual_alias_maps =
+ proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
+ proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
+ proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
+virtual_mailbox_maps =
+ proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
+ proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
Where you chose to store the .cf files doesn't really matter, but they will
have database passwords stored in plain text so they should be readable only
@@ -35,22 +40,35 @@
password = password
hosts = localhost
dbname = postfix
-query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
+query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
#expansion_limit = 100
+mysql_virtual_alias_domain_maps.cf:
+user = postfix
+password = password
+hosts = localhost
+dbname = postfix
+query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1
+mysql_virtual_alias_domain_catchall_maps.cf:
+# handles catch-all settings of target-domain
+user = postfix
+password = password
+hosts = localhost
+dbname = postfix
+query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1
+
mysql_virtual_domains_maps.cf:
user = postfix
password = password
hosts = localhost
dbname = postfix
-query = SELECT domain FROM domain WHERE domain='%u'
+query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
#query = SELECT domain FROM domain WHERE domain='%s'
#optional query to use when relaying for backup MX
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
#expansion_limit = 100
-
mysql_virtual_mailbox_maps.cf:
user = postfix
password = password
@@ -59,6 +77,13 @@
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'
#expansion_limit = 100
+mysql_virtual_alias_domain_mailbox_maps.cf:
+user = postfix
+password = password
+hosts = localhost
+dbname = postfix
+query = SELECT CONCAT(domain,'/',maildir) FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1
+
-------------------------
More information - HowTo docs that use PostfixAdmin
Modified: trunk/css/default.css
===================================================================
--- trunk/css/default.css 2008-05-21 11:22:09 UTC (rev 362)
+++ trunk/css/default.css 2008-05-21 21:05:48 UTC (rev 363)
@@ -110,6 +110,7 @@
position: absolute;
width: auto;
left: -999em;
+ background: #FFFFFF;
border:2px solid white;
border-top:none;
}
@@ -227,32 +228,32 @@
margin: 0 auto;
}
-#alias_table, #mailbox_table, #overview_table, #log_table, #admin_table {
+#alias_domain_table, #alias_table, #mailbox_table, #overview_table, #log_table, #admin_table {
width: 750px;
margin: 0px auto;
border: 1px solid #efefef;
}
-#alias_table .header, #mailbox_table .header, #overview_table .header, #log_table .header, #admin_table .header {
+#alias_domain_table .header, #alias_table .header, #mailbox_table .header, #overview_table .header, #log_table .header, #admin_table .header {
line-height: 20px;
background: #efefef;
color: black;
}
-#alias_table .hilightoff, #mailbox_table .hilightoff, #overview_table .hilightoff, #log_table .hilightoff, #admin_table .hilighoff {
+#alias_domain_table .hilightoff, #alias_table .hilightoff, #mailbox_table .hilightoff, #overview_table .hilightoff, #log_table .hilightoff, #admin_table .hilighoff {
background: white;
}
-#alias_table .hilighton, #mailbox_table .hilighton, #overview_table .hilighton, #log_table .hilighton, #admin_table .hilighton {
+#alias_domain_table .hilighton, #alias_table .hilighton, #mailbox_table .hilighton, #overview_table .hilighton, #log_table .hilighton, #admin_table .hilighton {
background: #D9FF43; /*#D6FF85;*/ /*#ffdddd;*/
}
-#alias_table tr:hover, #mailbox_table tr:hover, #overview_table tr:hover, #log_table tr:hover, #admin_table tr:hover {
+#alias_domain_table tr:hover, #alias_table tr:hover, #mailbox_table tr:hover, #overview_table tr:hover, #log_table tr:hover, #admin_table tr:hover {
background: #D9FF43; /*#D6FF85;*/ /*#ffdddd;*/
}
-#alias_table h3, #mailbox_table h3, #overview_table h3, #log_table h3, #admin_table h3 {
+#alias_domain_table h3, #alias_table h3, #mailbox_table h3, #overview_table h3, #log_table h3, #admin_table h3 {
background: silver;
text-align: left;
font-size: 12px;
Modified: trunk/delete.php
===================================================================
--- trunk/delete.php 2008-05-21 11:22:09 UTC (rev 362)
+++ trunk/delete.php 2008-05-21 21:05:48 UTC (rev 363)
@@ -70,6 +70,8 @@
$result_alias = db_delete ($table_alias,$fWhere,$fDelete);
$result_mailbox = db_delete ($table_mailbox,$fWhere,$fDelete);
$result_log = db_delete ($table_log,$fWhere,$fDelete);
+ $result_alias_domain = db_delete ($table_alias_domain,'alias_domain',$fDelete);
+ $result_target_domain = db_delete ($table_alias_domain,'target_domain',$fDelete);
if ($CONF['vacation'] == "YES")
{
$result_vacation = db_delete ($table_vacation,$fWhere,$fDelete);
@@ -88,6 +90,28 @@
}
} # ($fTable == "domain")
+elseif ($fTable == "alias_domain")
+{
+ if (!check_owner ($SESSID_USERNAME, $fDelete))
+ {
+ $error = 1;
+ $tMessage = $PALANG['pDelete_domain_alias_error'] . "<b>$fDelete</b>!</span>";
+ }
+
+ $result = db_delete ($table_alias_domain,'alias_domain',$fDelete);
+ if (!$result || !alias_domain_postdeletion($fDelete))
+ {
+ $error = 1;
+ $tMessage = $PALANG['pAdminDelete_alias_domain_error'];
+ }
+ else
+ {
+ db_log ($SESSID_USERNAME, $fDelete, 'delete_alias_domain', $fDelete);
+ $url = "list-virtual.php?domain=" . urlencode($_REQUEST['domain']);
+ header ("Location: $url");
+ }
+} # ($fTable == "alias_domain")
+
elseif ($fTable == "alias" or $fTable == "mailbox")
{
Modified: trunk/edit-active.php
===================================================================
--- trunk/edit-active.php 2008-05-21 11:22:09 UTC (rev 362)
+++ trunk/edit-active.php 2008-05-21 21:05:48 UTC (rev 363)
@@ -34,6 +34,7 @@
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
+ if (isset ($_GET['alias_domain'])) $fAliasDomain = escape_string ($_GET['alias_domain']);
if (isset ($_GET['username'])) $fUsername = escape_string ($_GET['username']);
if (isset ($_GET['alias'])) $fAlias = escape_string ($_GET['alias']); else $fAlias = escape_string ($_GET['username']);
if (isset ($_GET['domain'])) $fDomain = escape_string ($_GET['domain']);
@@ -47,6 +48,7 @@
else
{
$setSql=('pgsql'==$CONF['database_type']) ? 'active=NOT active' : 'active=1-active';
+ $setSql.=', modified=NOW()';
if ($fUsername != '')
{
$result = db_query ("UPDATE $table_mailbox SET $setSql WHERE username='$fUsername' AND domain='$fDomain'");
@@ -73,6 +75,19 @@
db_log ($SESSID_USERNAME, $fDomain, 'edit_alias_state', $fAlias);
}
}
+ if ($fAliasDomain != '')
+ {
+ $result = db_query ("UPDATE $table_alias_domain SET $setSql WHERE alias_domain='$fDomain'");
+ if ($result['rows'] != 1)
+ {
+ $error = 1;
+ $tMessage = $PALANG['pEdit_alias_domain_result_error'];
+ }
+ else
+ {
+ db_log ($SESSID_USERNAME, $fDomain, 'edit_alias_domain_state', $fDomain);
+ }
+ }
}
if ($error != 1)
Modified: trunk/functions.inc.php
===================================================================
--- trunk/functions.inc.php 2008-05-21 11:22:09 UTC (rev 362)
+++ trunk/functions.inc.php 2008-05-21 21:05:48 UTC (rev 363)
@@ -1636,10 +1636,14 @@
* Call: db_log (string username, string domain, string action, string data)
* Possible actions are:
* 'create_alias'
+ * 'create_alias_domain'
+ * 'create_mailbox'
* 'delete_alias'
+ * 'delete_alias_domain'
* 'delete_mailbox'
* 'edit_alias'
* 'edit_alias_state'
+ * 'edit_alias_domain_state'
* 'edit_mailbox'
* 'edit_mailbox_state'
* 'edit_password'
@@ -1650,7 +1654,7 @@
global $table_log;
$REMOTE_ADDR = $_SERVER['REMOTE_ADDR'];
- $action_list = array('create_alias', 'delete_alias', 'edit_alias', 'create_mailbox', 'delete_mailbox', 'edit_mailbox', 'edit_alias_state', 'edit_mailbox_state', 'edit_password');
+ $action_list = array('create_alias', 'create_alias_domain', 'delete_alias', 'delete_alias_domain', 'edit_alias', 'create_mailbox', 'delete_mailbox', 'edit_mailbox', 'edit_alias_state', 'edit_alias_domain_state', 'edit_mailbox_state', 'edit_password');
if(!in_array($action, $action_list)) {
die("Invalid log action : $action"); // could do with something better?
@@ -1814,6 +1818,42 @@
}
/*
+ Called after an alias_domain has been deleted in the DBMS.
+ Returns: boolean.
+ */
+function alias_domain_postdeletion($alias_domain)
+{
+ global $CONF;
+ $confpar='alias_domain_postdeletion_script';
+
+ if (!isset($CONF[$confpar]) || empty($CONF[$confpar]))
+ {
+ return true;
+ }
+
+ if (empty($alias_domain))
+ {
+ print '<p>Warning: empty alias_domain parameter.</p>';
+ return false;
+ }
+
+ $cmdarg1=escapeshellarg($alias_domain);
+ $command=$CONF[$confpar]." $cmdarg1";
+ $retval=0;
+ $output=array();
+ $firstline='';
+ $firstline=exec($command,$output,$retval);
+ if (0!=$retval)
+ {
+ error_log("Running $command yielded return value=$retval, first line of output=$firstline");
+ print '<p>WARNING: Problems running alias_domain postdeletion script!</p>';
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/*
Called by mailbox_postcreation() after a mailbox has been
created. Immediately returns, unless configuration indicates
that one or more sub-folders should be created.
@@ -2124,6 +2164,7 @@
$table_admin = table_by_key ('admin');
$table_alias = table_by_key ('alias');
+$table_alias_domain = table_by_key ('alias_domain');
$table_domain = table_by_key ('domain');
$table_domain_admins = table_by_key ('domain_admins');
$table_log = table_by_key ('log');
Modified: trunk/languages/en.lang
===================================================================
--- trunk/languages/en.lang 2008-05-21 11:22:09 UTC (rev 362)
+++ trunk/languages/en.lang 2008-05-21 21:05:48 UTC (rev 363)
@@ -31,6 +31,7 @@
$PALANG['pMenu_main'] = 'Main';
$PALANG['pMenu_overview'] = 'Overview';
$PALANG['pMenu_create_alias'] = 'Add Alias';
+$PALANG['pMenu_create_alias_domain'] = 'Add Alias Domain';
$PALANG['pMenu_create_mailbox'] = 'Add Mailbox';
$PALANG['pMenu_fetchmail'] = 'Fetch Email';
$PALANG['pMenu_sendmail'] = 'Send Email';
@@ -53,16 +54,21 @@
$PALANG['pOverview_up_arrow'] = 'Go Top';
$PALANG['pOverview_right_arrow'] = 'Next Page';
$PALANG['pOverview_left_arrow'] = 'Previous Page';
-$PALANG['pOverview_alias_title'] = ':: Alias';
+$PALANG['pOverview_alias_domain_title'] = ':: Domain Aliases';
+$PALANG['pOverview_alias_title'] = ':: Aliases';
$PALANG['pOverview_mailbox_title'] = ':: Mailboxes';
$PALANG['pOverview_button'] = 'Go';
$PALANG['pOverview_welcome'] = 'Overview for ';
+$PALANG['pOverview_alias_domain_aliases'] = 'Alias Domains';
+$PALANG['pOverview_alias_domain_target'] = '%s is an Alias Domain for:';
$PALANG['pOverview_alias_alias_count'] = 'Aliases';
$PALANG['pOverview_alias_mailbox_count'] = 'Mailboxes';
$PALANG['pOverview_alias_address'] = 'From';
$PALANG['pOverview_alias_goto'] = 'To';
$PALANG['pOverview_alias_modified'] = 'Last Modified';
+$PALANG['pOverview_alias_domain_modified'] = 'Last Modified';
$PALANG['pOverview_alias_active'] = 'Active';
+$PALANG['pOverview_alias_domain_active'] = 'Active';
$PALANG['pOverview_alias_edit'] = 'Alias';
$PALANG['and_x_more'] = '[and %s more...]';
$PALANG['pOverview_mailbox_username'] = 'Email';
@@ -76,6 +82,7 @@
$PALANG['pOverview_get_domain'] = 'Domain';
$PALANG['pOverview_get_aliases'] = 'Aliases';
+$PALANG['pOverview_get_alias_domains'] = 'Domain Aliases';
$PALANG['pOverview_get_mailboxes'] = 'Mailboxes';
$PALANG['pOverview_get_quota'] = 'Mailbox Quota (MB)';
$PALANG['pOverview_get_modified'] = 'Last Modified';
@@ -84,8 +91,21 @@
$PALANG['pDelete_delete_success'] = '%s deleted.';
$PALANG['pDelete_postdelete_error'] = '<span class="error_msg">Unable to remove mailbox ';
$PALANG['pDelete_domain_error'] = '<span class="error_msg">This domain is not yours ';
+$PALANG['pDelete_domain_alias_error'] = '<span class="error_msg">This domain is not yours ';
$PALANG['pDelete_alias_error'] = '<span class="error_msg">Unable to delete alias ';
+$PALANG['pCreate_alias_domain_welcome'] = 'Mirror addresses of one of your domains to another.';
+$PALANG['pCreate_alias_domain_alias'] = 'Alias Domain';
+$PALANG['pCreate_alias_domain_alias_text'] = 'The domain that mails come in for.';
+$PALANG['pCreate_alias_domain_target'] = 'Target Domain';
+$PALANG['pCreate_alias_domain_target_text'] = 'The domain where mails should go to.';
+$PALANG['pCreate_alias_domain_active'] = 'Active';
+$PALANG['pCreate_alias_domain_button'] = 'Add Alias Domain';
+$PALANG['pCreate_alias_domain_error1'] = 'You are not allowed to create the chosen configuration.';
+$PALANG['pCreate_alias_domain_error2'] = 'The chosen configuration is invalid, please choose a different one!';
+$PALANG['pCreate_alias_domain_error3'] = 'Database insert failed.';
+$PALANG['pCreate_alias_domain_success'] = 'The domain alias has been added to the alias domain table!';
+
$PALANG['pCreate_alias_welcome'] = 'Create a new alias for your domain.';
$PALANG['pCreate_alias_address'] = 'Alias';
$PALANG['pCreate_alias_address_text_error1'] = '<br /><span class="error_msg">The ALIAS is not valid!</span>';
@@ -98,7 +118,7 @@
$PALANG['pCreate_alias_goto_text_error'] = 'Where the email needs to go.<br /><span class="error_msg">The TO is not valid!</span>';
$PALANG['pCreate_alias_result_error'] = '<span class="error_msg">Unable to add the alias to the alias table!</span>';
$PALANG['pCreate_alias_result_success'] = 'The alias has been added to the alias table!';
-$PALANG['pCreate_alias_catchall_text'] = 'To create a catch-all use an "*" as alias.<br />For domain to domain forwarding use "*@domain.tld" as to.';
+$PALANG['pCreate_alias_catchall_text'] = 'To create a catch-all use an "*" as alias.'; # XXX don't propagate usage of *@target-domain.com for domain-aliasing any longer
$PALANG['pEdit_alias_welcome'] = 'Edit an alias for your domain.<br />One entry per line.';
$PALANG['pEdit_alias_address'] = 'Alias';
@@ -108,6 +128,7 @@
$PALANG['pEdit_alias_goto_text_error1'] = '<span class="error_msg">You didn\'t enter anything at To</span>';
$PALANG['pEdit_alias_goto_text_error2'] = '<span class="error_msg">The email address that you have entered is not valid: ';
$PALANG['pEdit_alias_domain_error'] = '<span class="error_msg">This domain is not yours: ';
+$PALANG['pEdit_alias_domain_result_error'] = '<span class="error_msg">Unable to modify the alias domain!</span>';
$PALANG['pEdit_alias_forward_and_store'] = 'Deliver to the local mailbox.';
$PALANG['pEdit_alias_forward_only'] = 'Forward to given email addresses only.';
$PALANG['pEdit_alias_button'] = 'Edit Alias';
@@ -180,9 +201,12 @@
$PALANG['pViewlog_action_edit_mailbox'] = 'edit mailbox';
$PALANG['pViewlog_action_edit_mailbox_state'] = 'edit mailbox active';
$PALANG['pViewlog_action_create_alias'] = 'create alias';
+$PALANG['pViewlog_action_create_alias_domain'] = 'create alias domain';
$PALANG['pViewlog_action_delete_alias'] = 'delete alias';
+$PALANG['pViewlog_action_delete_alias_domain'] = 'delete alias domain';
$PALANG['pViewlog_action_edit_alias'] = 'edit alias';
$PALANG['pViewlog_action_edit_alias_state'] = 'edit alias active';
+$PALANG['pViewlog_action_edit_alias_domain_state'] = 'edit alias domain active';
$PALANG['pViewlog_action_edit_password'] = 'change password';
$PALANG['pViewlog_button'] = 'Go';
@@ -260,6 +284,7 @@
$PALANG['pAdminCreate_domain_result_success'] = 'Domain has been added!';
$PALANG['pAdminDelete_domain_error'] = '<span class="error_msg">Unable to remove domain!</span>';
+$PALANG['pAdminDelete_alias_domain_error'] = '<span class="error_msg">Unable to remove domain alias!</span>';
$PALANG['pAdminEdit_domain_welcome'] = 'Edit a domain';
$PALANG['pAdminEdit_domain_domain'] = 'Domain';
Modified: trunk/list-virtual.php
===================================================================
--- trunk/list-virtual.php 2008-05-21 11:22:09 UTC (rev 362)
+++ trunk/list-virtual.php 2008-05-21 21:05:48 UTC (rev 363)
@@ -72,12 +72,54 @@
exit(0);
}
+
+# Alias-Domains
+# first try to get a list of other domains pointing
+# to this currently chosen one (aka. alias domains)
+$query = "SELECT $table_alias_domain.alias_domain,$table_alias_domain.target_domain,$table_alias_domain.modified,$table_alias_domain.active FROM $table_alias_domain WHERE target_domain='$fDomain' ORDER BY $table_alias_domain.alias_domain LIMIT $fDisplay, $page_size";
+if ('pgsql'==$CONF['database_type'])
+{
+ $query = "SELECT alias_domain,target_domain,extract(epoch from modified) as modified,active FROM $table_alias_domain WHERE target_domain='$fDomain' ORDER BY alias_domain LIMIT $page_size OFFSET $fDisplay";
+}
+$result = db_query ($query);
+if ($result['rows'] > 0)
+{
+ while ($row = db_array ($result['result']))
+ {
+ if ('pgsql'==$CONF['database_type'])
+ {
+ $row['modified']=gmstrftime('%c %Z',$row['modified']);
+ $row['active']=('t'==$row['active']) ? 1 : 0;
+ }
+ $tAliasDomains[] = $row;
+ }
+}
+# now let's see if the current domain itself is an alias for another domain
+$query = "SELECT $table_alias_domain.alias_domain,$table_alias_domain.target_domain,$table_alias_domain.modified,$table_alias_domain.active FROM $table_alias_domain WHERE alias_domain='$fDomain'";
+if ('pgsql'==$CONF['database_type'])
+{
+ $query = "SELECT alias_domain,target_domain,extract(epoch from modified) as modified,active FROM $table_alias_domain WHERE alias_domain='$fDomain'";
+}
+$result = db_query ($query);
+if ($result['rows'] > 0)
+{
+ if($row = db_array ($result['result']))
+ {
+ if ('pgsql'==$CONF['database_type'])
+ {
+ $row['modified']=gmstrftime('%c %Z',$row['modified']);
+ $row['active']=('t'==$row['active']) ? 1 : 0;
+ }
+ $tTargetDomain = $row;
+ }
+}
+
+
$query = "SELECT $table_alias.address,$table_alias.goto,$table_alias.modified,$table_alias.active FROM $table_alias LEFT JOIN $table_mailbox ON $table_alias.address=$table_mailbox.username WHERE $table_alias.domain='$fDomain' AND $table_mailbox.maildir IS NULL ORDER BY $table_alias.address LIMIT $fDisplay, $page_size";
if ('pgsql'==$CONF['database_type'])
{
$query = "SELECT address,goto,extract(epoch from modified) as modified,active FROM $table_alias WHERE domain='$fDomain' AND NOT EXISTS(SELECT 1 FROM $table_mailbox WHERE username=$table_alias.address) ORDER BY address LIMIT $page_size OFFSET $fDisplay";
}
-
$result = db_query ($query);
if ($result['rows'] > 0)
{
Added: trunk/templates/create-alias-domain.php
===================================================================
--- trunk/templates/create-alias-domain.php (rev 0)
+++ trunk/templates/create-alias-domain.php 2008-05-21 21:05:48 UTC (rev 363)
@@ -0,0 +1,49 @@
+<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?>
+<div id="edit_form">
+<form name="alias_domain" method="post">
+<table>
+ <tr>
+ <td colspan="3"><h3><?php print $PALANG['pCreate_alias_domain_welcome']; ?></h3></td>
+ </tr>
+ <tr>
+ <td><?php print $PALANG['pCreate_alias_domain_alias'] . ":"; ?></td>
+ <td>
+ <select class="flat" name="alias_domain">
+ <?php
+ foreach ($list_domains as $dom)
+ {
+ if (isset($list_aliases[$dom]) || in_array($dom,$list_aliases)) continue;
+ print "<option value=\"$dom\"".(($fAliasDomain == $dom) ? ' selected' : '').">$dom</option>\n";
+ }
+ ?>
+ </select>
+ <td><?php print $PALANG['pCreate_alias_domain_alias_text']; ?></td>
+ </tr>
+ <tr>
+ <td><?php print $PALANG['pCreate_alias_domain_target'] . ":"; ?></td>
+ <td>
+ <select class="flat" name="target_domain">
+ <?php
+ foreach ($list_domains as $dom)
+ {
+ if (isset($list_aliases[$dom])) continue;
+ print "<option value=\"$dom\"".(($fTargetDomain == $dom) ? ' selected' : '').">$dom</option>\n";
+ }
+ ?>
+ </select>
+ <td><?php print $PALANG['pCreate_alias_domain_target_text']; ?></td>
+ </tr>
+ <tr>
+ <td><?php print $PALANG['pCreate_alias_domain_active'] . ":"; ?></td>
+ <td><input class="flat" type="checkbox" name="active" value="1"<?php if ($fActive) { print ' checked'; } ?> /></td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td colspan="3" class="standout"><?php if ($error) { print '<span class="error_msg">'; } print $tMessage; if ($error) { print '</span>'; } ?></td>
+ </tr>
+ <tr>
+ <td colspan="3" class="hlp_center"><input class="button" type="submit" name="submit" value="<?php print $PALANG['pCreate_alias_domain_button']; ?>" /></td>
+ </tr>
+</table>
+</form>
+</div>
Modified: trunk/templates/list-virtual.php
===================================================================
--- trunk/templates/list-virtual.php 2008-05-21 11:22:09 UTC (rev 362)
+++ trunk/templates/list-virtual.php 2008-05-21 21:05:48 UTC (rev 363)
@@ -1,7 +1,7 @@
<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?>
<div id="overview">
-<form name="overview" method="post">
-<select name="fDomain" onChange="this.form.submit();">
+<form name="overview" method="get">
+<select name="domain" onChange="this.form.submit();">
<?php
$file = 'list-virtual.php';
@@ -71,6 +71,57 @@
}
print "</td></tr></table></div>\n";
+
+if ((sizeof ($tAliasDomains) > 0) || is_array ($tTargetDomain))
+{
+ print "<table id=\"alias_domain_table\">\n";
+ print " <tr>\n";
+ print " <td colspan=\"4\"><h3>" . $PALANG['pOverview_alias_domain_title'] . "</h3></td>";
+ print " </tr>";
+ if(sizeof ($tAliasDomains) > 0)
+ {
+ print " <tr class=\"header\">\n";
+ print " <td>" . sprintf($PALANG['pOverview_alias_domain_aliases'], $fDomain) . "</td>\n";
+ print " <td>" . $PALANG['pOverview_alias_domain_modified'] . "</td>\n";
+ print " <td>" . $PALANG['pOverview_alias_domain_active'] . "</td>\n";
+ print " <td> </td>\n";
+ print " </tr>\n";
+ for ($i = 0; $i < sizeof ($tAliasDomains); $i++)
+ {
+ print " <tr class=\"hilightoff\" onMouseOver=\"className='hilighton';\" onMouseOut=\"className='hilightoff';\">\n";
+ print " <td><a href=\"$file?domain=" . urlencode ($tAliasDomains[$i]['alias_domain']) . "&limit=" . $current_limit . "\">" . $tAliasDomains[$i]['alias_domain'] . "</a></td>\n";
+ print " <td>" . $tAliasDomains[$i]['modified'] . "</td>\n";
+ $active = ($tAliasDomains[$i]['active'] == 1) ? $PALANG['YES'] : $PALANG['NO'];
+ print " <td><a href=\"edit-active.php?alias_domain=true&domain=" . urlencode ($tAliasDomains[$i]['alias_domain']) . "&return=$file" . urlencode ( "?domain=" . $fDomain . "&limit=" . $current_limit) . "\">" . $active . "</a></td>\n";
+ print " <td><a href=\"delete.php?table=alias_domain&delete=" . urlencode ($tAliasDomains[$i]['alias_domain']) . "&domain=$fDomain" . "\"onclick=\"return confirm ('" . $PALANG['confirm'] . $PALANG['pOverview_get_alias_domains'] . ": ". $tAliasDomains[$i]['alias_domain'] . "')\">" . $PALANG['del'] . "</a></td>\n";
+ print " </tr>\n";
+ }
+ }
+
+ if(is_array($tTargetDomain))
+ {
+ print " <tr class=\"header\">\n";
+ print " <td>" . sprintf($PALANG['pOverview_alias_domain_target'], $fDomain) . "</td>\n";
+ print " <td>" . $PALANG['pOverview_alias_domain_modified'] . "</td>\n";
+ print " <td>" . $PALANG['pOverview_alias_domain_active'] . "</td>\n";
+ print " <td> </td>\n";
+ print " </tr>\n";
+ print " <tr class=\"hilightoff\" onMouseOver=\"className='hilighton';\" onMouseOut=\"className='hilightoff';\">\n";
+ print " <td><a href=\"$file?domain=" . urlencode ($tTargetDomain['target_domain']) . "&limit=" . $current_limit . "\">" . $tTargetDomain['target_domain'] . "</a></td>\n";
+ print " <td>" . $tTargetDomain['modified'] . "</td>\n";
+ $active = ($tTargetDomain['active'] == 1) ? $PALANG['YES'] : $PALANG['NO'];
+ print " <td><a href=\"edit-active.php?alias_domain=true&domain=" . urlencode ($fDomain) . "&return=$file" . urlencode ( "?domain=" . $fDomain . "&limit=" . $current_limit) . "\">" . $active . "</a></td>\n";
+ print " <td><a href=\"delete.php?table=alias_domain&delete=" . urlencode ($fDomain) . "&domain=" . urlencode ($fDomain) . "\" onclick=\"return confirm ('" . $PALANG['confirm'] . $PALANG['pOverview_get_alias_domains'] . ": " . htmlentities ($fDomain) . "')\">" . $PALANG['del'] . "</a></td>\n";
+ print " </tr>\n";
+
+ }
+ print "</table>\n";
+ if (!is_array($tTargetDomain))
+ {
+ print "<p><a href=\"create-alias-domain.php?target_domain=$fDomain\">" . $PALANG['pMenu_create_alias_domain'] . "</a>\n";
+ }
+}
+
if (sizeof ($tAlias) > 0)
{
print "<table id=\"alias_table\">\n";
Modified: trunk/upgrade.php
===================================================================
--- trunk/upgrade.php 2008-05-21 11:22:09 UTC (rev 362)
+++ trunk/upgrade.php 2008-05-21 21:05:48 UTC (rev 363)
@@ -534,6 +534,52 @@
$result = db_query_parsed("CREATE INDEX alias_address_active ON alias(address,active)");
}
+/**
+ * MySQL only alias_domain table
+ */
+function upgrade_300_mysql() {
+ $table_alias_domain = table_by_key('alias_domain');
+ // i just duplicate stuff from DATABASE_*.TXT over here?
+ if( $CONF['database_type'] == 'pgsql' ) {
+ // check if table already exists, if so, don't recreate it
+ $sql_table_exists =
+ "SELECT relname ".
+ " FROM pg_class ".
+ " WHERE relname = '$table_alias_domain'";
+ $res = db_query( $sql_table_exists );
+ if( $res['rows'] == 0 ) {
+ $sql_table_create =
+ "CREATE TABLE $table_alias_domain ( ".
+ " alias_domain character varying(255) NOT NULL REFERENCES domain(domain) ON DELETE CASCADE, ".
+ " target_domain character varying(255) NOT NULL REFERENCES domain(domain) ON DELETE CASCADE, ".
+ " created timestamp with time zone default now(), ".
+ " modified timestamp with time zone default now(), ".
+ " active boolean NOT NULL default true, ".
+ " Constraint \"alias_domain_pkey\" Primary Key (\"alias_domain\") ".
+ ")";
+ db_query( $sql_table_create );
+ $sql_table_index =
+ "CREATE INDEX alias_domain_active ON $table_alias_domain(alias_domain,active)";
+ db_query( $sql_table_index );
+ $sql_table_comment =
+ "COMMENT ON TABLE $table_alias_domain IS 'Postfix Admin - Domain Aliases'";
+ db_query( $sql_table_comment );
+ }
+ } else { // database-type mysql assumed
+ $sql_table_create =
+ "CREATE TABLE IF NOT EXISTS `$table_alias_domain` ( ".
+ " `alias_domain` varchar(255) NOT NULL default '', ".
+ " `target_domain` varchar(255) NOT NULL default '', ".
+ " `created` datetime NOT NULL default '0000-00-00 00:00:00', ".
+ " `modified` datetime NOT NULL default '0000-00-00 00:00:00', ".
+ " `active` tinyint(1) NOT NULL default '1', ".
+ " PRIMARY KEY (`alias_domain`), ".
+ " KEY `active` (`active`), ".
+ " KEY `target_domain` (`target_domain`) ".
+ ") TYPE=MyISAM COMMENT='Postfix Admin - Domain Aliases'";
+ db_query( $sql_table_create );
+ }
+}
$result = db_query_parsed("ALTER TABLE $table_domain_admins ALTER COLUMN username DROP DEFAULT");
$result = db_query_parsed("ALTER TABLE $table_domain_admins ALTER COLUMN domain DROP DEFAULT");
@@ -864,3 +910,46 @@
}
}
+/**
+ * Support alias_domain table
+ */
+function upgrade_362_mysql() {
+ # Table structure for table alias_domain
+ #
+ $table_alias_domain = table_by_key('alias_domain');
+ db_query_parsed("
+ CREATE TABLE IF NOT EXISTS $table_alias_domain (
+ `alias_domain` varchar(255) NOT NULL default '',
+ `target_domain` varchar(255) NOT NULL default '',
+ `created` datetime NOT NULL default '0000-00-00 00:00:00',
+ `modified` datetime NOT NULL default '0000-00-00 00:00:00',
+ `active` tinyint(1) NOT NULL default '1',
+ PRIMARY KEY (`alias_domain`),
+ KEY `active` (`active`),
+ KEY `target_domain` (`target_domain`)
+) TYPE=MyISAM COMMENT='Postfix Admin - Domain Aliases'");
+
+
+}
+
+/**
+ * Support alias_domain table
+ */
+function upgrade_362_pgsql() {
+ # Table structure for table alias_domain
+ $table_alias_domain = table_by_key('alias_domain');
+ $table_domain = table_by_key('domain');
+ if(_pgsql_object_exists($table_alias_domain)) {
+ return;
+ }
+ db_query_parsed(
+ "CREATE TABLE $table_alias_domain (
+ alias_domain character varying(255) NOT NULL REFERENCES $table_domain(domain) ON DELETE CASCADE,
+ target_domain character varying(255) NOT NULL REFERENCES $table_domain(domain) ON DELETE CASCADE,
+ created timestamp with time zone default now(),
+ modified timestamp with time zone default now(),
+ active boolean NOT NULL default true,
+ PRIMARY KEY(alias_domain))");
+ db_query_parsed("CREATE INDEX alias_domain_active ON $table_alias_domain(alias_domain,active)");
+ db_query_parsed("COMMENT ON TABLE $table_alias_domain IS 'Postfix Admin - Domain Aliases'");
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|