From 8043515fdf3771f0336cbc1f0a94b6dd9b9d6889 Mon Sep 17 00:00:00 2001 From: Christian Boltz Date: Mon, 6 Apr 2015 14:17:25 +0000 Subject: [PATCH] migrate search input field to use search[_], and use list.tpl for alias domains User-visible changes: - alias domain list can be downloaded as CSV - no more search highlighting for alias domains list-virtual.php: - expect $search to be an array - change alias domain handling to use list.php instead of list-virtual_alias_domain.tpl, and move some logic from the template to list-virtual.php. (The template file is kept as list.tpl wrapper.) - adopt mailbox and alias search to $search[_] - adopt pagebrowser to $search[_] list-virtual_alias_domain.tpl: - replace custom output generation with {include 'list.php'} and some variable assignments PFAHandler.php: - add $this->id_field to $this->msg (avoids another smarty template variable) configs/menu.conf: - change input name to search[_] list-virtual_alias.tpl, list-virtual_mailbox.tpl: - adopt to $search[_] by setting $search in a backwards-compatible way list.tpl: - add special handling for aliasdomain.target_domain linking git-svn-id: https://svn.code.sf.net/p/postfixadmin/code/trunk@1773 a1433add-5e2c-0410-b055-b7f2511e0802 --- configs/menu.conf | 2 +- list-virtual.php | 63 ++++++++++++++++++------- model/PFAHandler.php | 1 + templates/list-virtual_alias.tpl | 6 +++ templates/list-virtual_alias_domain.tpl | 51 +++----------------- templates/list-virtual_mailbox.tpl | 6 +++ templates/list.tpl | 2 + 7 files changed, 68 insertions(+), 63 deletions(-) diff --git a/configs/menu.conf b/configs/menu.conf index cc35fa42..f4524064 100644 --- a/configs/menu.conf +++ b/configs/menu.conf @@ -39,7 +39,7 @@ tr_hilightoff = +form_search =
[adminlistadmin] url_edit_admin = edit.php?table=admin diff --git a/list-virtual.php b/list-virtual.php index d7d33d92..f08801b9 100644 --- a/list-virtual.php +++ b/list-virtual.php @@ -38,7 +38,10 @@ if (safesession('list-virtual:domain') != $fDomain) { unset($_SESSION['list-virtual:limit']); } $fDisplay = (int) safepost('limit', safeget('limit', safesession('list-virtual:limit'))); -$search = safepost('search', safeget('search', '')); # not remembered in the session +$search = safepost('search', safeget('search', array())); # not remembered in the session +if (!is_array($search)) { + die(Config::Lang('invalid_parameter')); +} if (count($list_domains) == 0) { if (authentication_has_role('global-admin')) { @@ -85,23 +88,43 @@ $_SESSION['list-virtual:limit'] = $fDisplay; # if (Config::bool('alias_domain')) { - if ($search == "") { + $handler = new AliasdomainHandler(0, $admin_username); + $aliasdomain_data = array( + 'struct' => $handler->getStruct(), + 'msg' => $handler->getMsg(), + 'formconf' => $handler->webformConfig(), + ); + $aliasdomain_data['msg']['show_simple_search'] = False; # hide search box + + $aliasdomain_data['msg']['can_create'] = 1; + + # hide create button if all domains (of this admin) are already used as alias domains + $handler->getList(""); + if ( count($handler->result()) + 1 >= count($list_domains) ) $aliasdomain_data['msg']['can_create'] = 0; # all domains (of this admin) are already alias domains + + # get the really requested list + if (count($search) == 0) { $list_param = "alias_domain='$fDomain' OR target_domain='$fDomain'"; } else { - $list_param = "alias_domain LIKE '%$search%' OR target_domain LIKE '%$search%'"; + $list_param = $search; } - $handler = new AliasdomainHandler(0, $admin_username); $handler->getList($list_param); $tAliasDomains = $handler->result(); - $can_create_alias_domain = 1; foreach ($tAliasDomains as $row) { - if ($row['alias_domain'] == $fDomain) $can_create_alias_domain = 0; # domain is already an alias domain + if ($row['alias_domain'] == $fDomain) { + $aliasdomain_data['struct']['target_domain']['linkto'] = 'target'; + if (count($search) == 0) { + $aliasdomain_data['struct']['alias_domain']['linkto'] = ''; + $aliasdomain_data['msg']['can_create'] = 0; # domain is already an alias domain + } + } + } + + if (count($search) > 0) { + $aliasdomain_data['struct']['target_domain']['linkto'] = 'target'; } - # set $can_create_alias_domain = 0 if all domains (of this admin) are already used as alias domains - $handler->getList(""); - if ( count($handler->result()) + 1 >= count($list_domains) ) $can_create_alias_domain = 0; # all domains (of this admin) are already alias domains } # @@ -111,11 +134,12 @@ if (Config::bool('alias_domain')) { $table_alias = table_by_key('alias'); $table_mailbox = table_by_key('mailbox'); -if ($search == "") { +if (count($search) == 0 || !isset($search['_'])) { $list_param = "domain='$fDomain'"; $sql_domain = " $table_alias.domain='$fDomain' "; } else { - $list_param = "(address LIKE '%$search%' OR goto LIKE '%$search%')"; + $searchterm = escape_string($search['_']); + $list_param = "(address LIKE '%$searchterm%' OR goto LIKE '%$searchterm%')"; $sql_domain = db_in_clause("$table_alias.domain", $list_domains); } @@ -140,13 +164,14 @@ $sql_where = " WHERE "; $sql_order = " ORDER BY $table_mailbox.username "; $sql_limit = " LIMIT $page_size OFFSET $fDisplay"; -if ($search == "") { +if (count($search) == 0 || !isset($search['_'])) { $sql_where .= " $table_mailbox.domain='$fDomain' "; } else { + $searchterm = escape_string($search['_']); $sql_where .= db_in_clause("$table_mailbox.domain", $list_domains) . " "; - $sql_where .= " AND ( $table_mailbox.username LIKE '%$search%' OR $table_mailbox.name LIKE '%$search%' "; + $sql_where .= " AND ( $table_mailbox.username LIKE '%$searchterm%' OR $table_mailbox.name LIKE '%$searchterm%' "; if ($display_mailbox_aliases) { - $sql_where .= " OR $table_alias.goto LIKE '%$search%' "; + $sql_where .= " OR $table_alias.goto LIKE '%$searchterm%' "; } $sql_where .= " ) "; # $search is already escaped } @@ -311,10 +336,10 @@ class cNav_bar $this->limit = $aLimit; $this->page_size = $aPage_size; $this->pages = $aPages; - if ($aSearch == "") { - $this->search = ""; + if (is_array($aSearch) && isset($aSearch['_']) && $aSearch['_'] != "") { + $this->search = "&search[_]=" . htmlentities($aSearch['_']); } else { - $this->search = "&search=" . htmlentities($aSearch); + $this->search = ""; } $this->url = ''; $this->fInit = false; @@ -408,6 +433,7 @@ $fDomain = htmlentities($fDomain, ENT_QUOTES); if(empty($_GET['domain'])) { $_GET['domain'] = ''; } +$smarty->assign ('admin_list', array()); $smarty->assign ('select_options', select_options ($list_domains, array ($fDomain)), false); $smarty->assign ('nav_bar_alias', array ('top' => $nav_bar_alias->display_top (), 'bottom' => $nav_bar_alias->display_bottom ()), false); $smarty->assign ('nav_bar_mailbox', array ('top' => $nav_bar_mailbox->display_top (), 'bottom' => $nav_bar_mailbox->display_bottom ()), false); @@ -425,7 +451,8 @@ $smarty->assign ('tDisplay_next_show', $tDisplay_next_show); $smarty->assign ('tDisplay_next', $tDisplay_next); $smarty->assign ('tAliasDomains', $tAliasDomains); -$smarty->assign ('can_create_alias_domain', $can_create_alias_domain); +$smarty->assign ('aliasdomain_data', $aliasdomain_data); + $smarty->assign ('tAlias', $tAlias); $smarty->assign ('gen_show_status', $gen_show_status, false); $smarty->assign ('check_alias_owner', $check_alias_owner); diff --git a/model/PFAHandler.php b/model/PFAHandler.php index 1ca81e22..4d91ad75 100644 --- a/model/PFAHandler.php +++ b/model/PFAHandler.php @@ -194,6 +194,7 @@ abstract class PFAHandler { } $this->initMsg(); + $this->msg['id_field'] = $this->id_field; $this->msg['show_simple_search'] = count($this->searchfields) > 0; } diff --git a/templates/list-virtual_alias.tpl b/templates/list-virtual_alias.tpl index 24dd25cb..e92d4b66 100644 --- a/templates/list-virtual_alias.tpl +++ b/templates/list-virtual_alias.tpl @@ -1,3 +1,9 @@ +{if isset($search._)} + {assign var="search" value=$search._} +{else} + {assign var="search" value=''} +{/if} + {#tr_header#} {if $CONF.show_status===YES} diff --git a/templates/list-virtual_alias_domain.tpl b/templates/list-virtual_alias_domain.tpl index 10548212..ae2a6ccc 100644 --- a/templates/list-virtual_alias_domain.tpl +++ b/templates/list-virtual_alias_domain.tpl @@ -1,46 +1,9 @@ {*** Domain Aliases ***} - - - - - {if $tAliasDomains|@count>0} - {if $tAliasDomains|@count>0} {* -> HAT alias-domains *} - {#tr_header#} - - - - - - - - {foreach from=$tAliasDomains item=item} - {#tr_hilightoff#} - - - - - - - - {/foreach} - {/if} - {/if} -
{$PALANG.pOverview_alias_domain_title}
{$PALANG.pOverview_alias_address}{$PALANG.to}{$PALANG.last_modified}{$PALANG.active}  
{if $item.alias_domain != $fDomain}{/if} - {if $search eq ""} - {$item.alias_domain} - {else} - {$item.alias_domain|replace:$search:"$search"} - {/if} - {if $item.alias_domain != $fDomain}{/if}{if $item.target_domain != $fDomain}{/if} - {if $search eq ""} - {$item.target_domain} - {else} - {$item.target_domain|replace:$search:"$search"} - {/if} - {if $item.target_domain != $fDomain}{/if}{$item.modified}{if $item.active==1}{$PALANG.YES}{else}{$PALANG.NO}{/if}{$PALANG.edit}{$PALANG.del}
-{if $can_create_alias_domain} -
-
{$PALANG.add_alias_domain}
-{/if} +{assign var="table" value='aliasdomain'} +{assign var="struct" value=$aliasdomain_data.struct} +{assign var="msg" value=$aliasdomain_data.msg} +{assign var="id_field" value=$msg.id_field} +{assign var="formconf" value=$aliasdomain_data.formconf} +{assign var="items" value=$tAliasDomains} +{include 'list.tpl'} diff --git a/templates/list-virtual_mailbox.tpl b/templates/list-virtual_mailbox.tpl index 9113dcc7..0b19628b 100644 --- a/templates/list-virtual_mailbox.tpl +++ b/templates/list-virtual_mailbox.tpl @@ -1,3 +1,9 @@ +{if isset($search._)} + {assign var="search" value=$search._} +{else} + {assign var="search" value=''} +{/if} + {#tr_header#} {if $CONF.show_status===YES}{/if} {$PALANG.pOverview_mailbox_username} diff --git a/templates/list.tpl b/templates/list.tpl index 71f9845d..b36669bd 100644 --- a/templates/list.tpl +++ b/templates/list.tpl @@ -58,6 +58,8 @@ {if $table == 'foo' && $key == 'bar'} Special handling (td content) for {$table} / {$key} + {elseif $table == 'aliasdomain' && $key == 'target_domain' && $struct.target_domain.linkto == 'target'} + {$item.target_domain} {* {elseif $table == 'domain' && $key == 'domain'} {$item.domain} *}