Commit 7ae17d0e authored by lrargerich's avatar lrargerich

Banning system added

parent 8e11d280
......@@ -1864,6 +1864,7 @@ tiki/lib/NNTP.php -text
tiki/lib/admin/adminlib.php -text
tiki/lib/bablotron.php -text
tiki/lib/backups/backupslib.php -text
tiki/lib/ban/banlib.php -text
tiki/lib/banners/bannerlib.php -text
tiki/lib/blogs/bloglib.php -text
tiki/lib/bookmarks/bookmarklib.php -text
......@@ -2431,6 +2432,7 @@ tiki/templates/tiki-admin-include-wiki-features.tpl -text
tiki/templates/tiki-admin-include-wiki-history.tpl -text
tiki/templates/tiki-admin-include-wiki.tpl -text
tiki/templates/tiki-admin.tpl -text
tiki/templates/tiki-admin_banning.tpl -text
tiki/templates/tiki-admin_categories.tpl -text
tiki/templates/tiki-admin_chart_items.tpl -text
tiki/templates/tiki-admin_charts.tpl -text
......@@ -2701,6 +2703,7 @@ tiki/tests/parse_data/test9 -text
tiki/tests/parse_data/test9.output -text
tiki/tiki-admin.php -text
tiki/tiki-admin_banners.php -text
tiki/tiki-admin_banning.php -text
tiki/tiki-admin_categories.php -text
tiki/tiki-admin_chart_items.php -text
tiki/tiki-admin_charts.php -text
......@@ -2911,7 +2914,6 @@ tiki/tiki-rename_page.php -text
tiki/tiki-rollback.php -text
tiki/tiki-search_stats.php -text
tiki/tiki-searchresults.php -text
tiki/tiki-section_options -text
tiki/tiki-section_options.php -text
tiki/tiki-send_blog_post.php -text
tiki/tiki-send_newsletters.php -text
......
### tiki banning system
INSERT INTO users_permissions(permName,type,permDesc,level) VALUES ('tiki_p_admin_banning','tiki','Can ban users or ips','admin');
drop table if exists tiki_banning;
create table tiki_banning(
banId integer(12) not null auto_increment,
mode enum('user','ip'),
title varchar(200),
ip1 varchar(3),
ip2 varchar(3),
ip3 varchar(3),
ip4 varchar(3),
user varchar(200),
date_from timestamp,
date_to timestamp,
use_dates char(1),
created integer(14),
message text,
primary key(banId)
);
drop table if exists tiki_banning_sections;
create table tiki_banning_sections(
banId integer(12) not null,
section varchar(100) not null,
primary key(banId,section)
);
### banning
alter table tiki_comments add user_ip varchar(15);
update tiki_comments set user_ip = '127.0.0.1';
### Forum attachments (!) ###
INSERT INTO users_permissions(permName,type,permDesc,level) VALUES ('tiki_p_forum_attach','forums','Can attach to forum posts','editor');
......
<?php
class BanLib extends TikiLib {
function BanLib($db)
{
# this is probably uneeded now
if(!$db) {
die("Invalid db object passed to BanLib constructor");
}
$this->db = $db;
}
function get_rule($banId)
{
$query = "select * from tiki_banning where banId=$banId";
$result = $this->query($query);
$res = $result->fetchRow(DB_FETCHMODE_ASSOC);
$aux=Array();
$query2="select section from tiki_banning_sections where banId=$banId";
$result2 = $this->query($query2);
$aux=Array();
while($res2 = $result2->fetchRow(DB_FETCHMODE_ASSOC)) {
$aux[]=$res2['section'];
}
$res['sections']=$aux;
return $res;
}
function remove_rule($banId)
{
$query = "delete from tiki_banning where banId=$banId";
$this->query($query);
$query="delete from tiki_banning_sections where banId=$banId";
$this->query($query);
}
function list_rules($offset,$maxRecords,$sort_mode,$find,$where='')
{
$sort_mode = str_replace("_"," ",$sort_mode);
if($find) {
$mid=" where ((message like '%".$find."%') or (title like '%".$find."%'))";
} else {
$mid="";
}
if($where) {
if($mid) {
$mid.= " and ($where) ";
} else {
$mid = "where ($where) ";
}
}
$query = "select * from tiki_banning $mid order by $sort_mode limit $offset,$maxRecords";
$query_cant = "select count(*) from tiki_banning $mid";
$result = $this->query($query);
$cant = $this->getOne($query_cant);
$ret = Array();
while($res = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
$aux=Array();
$query2="select * from tiki_banning_sections where banId=".$res['banId'];
$result2 = $this->query($query2);
while($res2 = $result2->fetchRow(DB_FETCHMODE_ASSOC)) {
$aux[]=$res2;
}
$res['sections']=$aux;
$ret[] = $res;
}
$retval = Array();
$retval["data"] = $ret;
$retval["cant"] = $cant;
$now = date("U");
$query = "select banId from tiki_banning where use_dates='y' and date_to < $now";
$result = $this->query($query);
while($res = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
$this->remove_rule($res['banId']);
}
return $retval;
}
/*
banId integer(12) not null auto_increment,
mode enum('user','ip'),
title varchar(200),
ip1 integer(3),
ip2 integer(3),
ip3 integer(3),
ip4 integer(3),
user varchar(200),
date_from timestamp,
date_to timestamp,
use_dates char(1),
message text,
primary key(banId)
*/
function replace_rule($banId,$mode,$title,$ip1,$ip2,$ip3,$ip4,$user,$date_from,$date_to,$use_dates,$message, $sections)
{
$message = addslashes($message);
$title = addslashes($title);
$user=addslashes($user);
if($banId) {
$query = " update tiki_banning set
title='$title',
ip1='$ip1',
ip2='$ip2',
ip3='$ip3',
ip4='$ip4',
user='$user',
date_from = $date_from,
date_to = $date_to,
user_dates = '$use_dates',
message = '$message'
where banId=$banId
";
$this->query($query);
} else {
$now=date("U");
$query = "insert into tiki_banning(mode,title,ip1,ip2,ip3,ip4,user,date_from,date_to,use_dates,message,created)
values('$mode','$title','$ip1','$ip2','$ip3','$ip4','$user',$date_from,$date_to,'$use_dates','$message',$now)";
$this->query($query);
$banId = $this->getOne("select max(banId) from tiki_banning where created=$now");
}
$query = "delete from tiki_banning_sections where banId=$banId";
$this->query($query);
foreach($sections as $section) {
$query = "insert into tiki_banning_sections(banId,section) values($banId,'$section')";
$this->query($query);
}
}
}
$banlib= new BanLib($dbTiki);
?>
\ No newline at end of file
......@@ -4,6 +4,7 @@
// This is just a test
class Comments extends TikiLib {
# var $db; // The PEAR db object used to access the database
var $time_control=0;
function Comments($db)
{
......@@ -707,6 +708,10 @@ class Comments extends TikiLib {
}
/*****************/
function set_time_control($time)
{
$this->time_control = $time;
}
function get_comments($objectId, $parentId, $offset = 0,$maxRecords = -1,$sort_mode = 'commentDate_desc', $find='', $threshold=0,$id=0)
{
......@@ -715,6 +720,12 @@ class Comments extends TikiLib {
if($sort_mode == 'points_desc') {
$sort_mode = 'average_desc';
}
if($this->time_control) {
$limit =date("U") - $this->time_control;
$time_cond = " and commentDate > $limit ";
} else {
$time_cond='';
}
$sort_mode = str_replace("_"," ",$sort_mode);
$old_sort_mode ='';
if(in_array($sort_mode,Array('replies desc','replies asc','lastPost desc','lastPost asc'))) {
......@@ -730,16 +741,16 @@ class Comments extends TikiLib {
} else {
$extra = '';
}
$query = "select count(*) from tiki_comments where object='$hash' and average<$threshold";
$query = "select count(*) from tiki_comments where object='$hash' and average<$threshold $time_cond";
$below = $this->getOne($query);
if($find) {
$mid=" where object='$hash' and parentId=$parentId and type='s' and average>=$threshold and (title like '%".$find."%' or data like '%".$find."%') ";
} else {
$mid=" where object='$hash' and parentId=$parentId and type='s' and average>=$threshold ";
}
$query = "select * from tiki_comments $mid $extra order by $sort_mode,threadId limit $offset,$maxRecords";
$query = "select * from tiki_comments $mid $extra $time_cond order by $sort_mode,threadId limit $offset,$maxRecords";
//print("$query<br/>");
$query_cant = "select count(*) from tiki_comments $mid";
$query_cant = "select count(*) from tiki_comments $mid $extra $time_cond";
$result = $this->query($query);
$cant = $this->getOne($query_cant);
$ret1 = Array();
......@@ -789,9 +800,9 @@ class Comments extends TikiLib {
} else {
$mid=" where object='$hash' and parentId=$parentId and type<>'s' and average>=$threshold ";
}
$query = "select * from tiki_comments $mid order by $sort_mode limit $offset,$maxRecords";
$query = "select * from tiki_comments $mid $extra $time_cond order by $sort_mode limit $offset,$maxRecords";
//print("$query<br/>");
$query_cant = "select count(*) from tiki_comments $mid";
$query_cant = "select count(*) from tiki_comments $mid $extra $time_cond";
$result = $this->query($query);
$cant += $this->getOne($query_cant);
while($res = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
......@@ -903,6 +914,10 @@ class Comments extends TikiLib {
if(!$userName) {
$_SESSION["lastPost"]=date("U");
}
if(!isset($_SERVER['REMOTE_ADDR'])) $_SERVER['REMOTE_ADDR']='127.0.0.1';
// Check for banned userName or banned IP or IP in banned range
// Check for duplicates.
$title = addslashes(strip_tags($title));
$data = addslashes($data);
......@@ -954,8 +969,8 @@ class Comments extends TikiLib {
if(!$result->numRows()) {
$now = date("U");
$object = md5($objectId);
$query = "insert into tiki_comments(object,commentDate,userName,title,data,votes,points,hash,parentId,average,hits,type,summary,smiley)
values('$object',$now,'$userName','$title','$data',0,0,'$hash',$parentId,0,0,'$type','$summary','$smiley')";
$query = "insert into tiki_comments(object,commentDate,userName,title,data,votes,points,hash,parentId,average,hits,type,summary,smiley,user_ip)
values('$object',$now,'$userName','$title','$data',0,0,'$hash',$parentId,0,0,'$type','$summary','$smiley','".$_SERVER["REMOTE_ADDR"]."')";
$result = $this->query($query);
} else {
......
......@@ -3,7 +3,7 @@
// HAWHAW: HTML and WML hybrid adapted webserver
// PHP class library
// Copyright (C) 2003 Norbert Huffschmid
// Last modified: 14. May 2003
// Last modified: 15. May 2003
// Tested with PHP 3.0.7, 3.0.13, 4.0.0 and 4.1.1
//
// This library is free software; you can redistribute it and/or modify it under the
......@@ -32,6 +32,7 @@
// - enhancement: HTML output for Reqwireless Browser
// - enhancement: HTML PDA output for Pendragon Browser
// - bugfix: check presence of text in HAW_text::create() with isset()
// - bugfix: create proper border attributes in HAW_table elements (HTML)
// miscellaneous constants
define("HAW_VERSION", "HAWHAW V4.10b");
......@@ -2764,7 +2765,7 @@ class HAW_table
if ($deck->ml == HAW_HTML)
{
// HTML
echo "<table border>\n";
echo "<table border=\"1\">\n";
}
elseif ($deck->ml == HAW_WML)
{
......@@ -4984,7 +4985,7 @@ class HAW_linkset
if ($deck->pureHTML)
{
// create links inside a table for big-screen HTML
echo "<table border cellpadding=\"4\"><tr><td>\n";
echo "<table border=\"1\" cellpadding=\"4\"><tr><td>\n";
// repeat size and face declarations in table element
if ($deck->size)
......
......@@ -3,7 +3,7 @@
// HAWIKI
// PHP wrapper class for HAWHAW-based wiki's
// Copyright (C) 2003 Norbert Huffschmid & TikiWiki project team
// Last modified: 14. May 2003
// Last modified: 15. May 2003
//
// This library is free software; you can redistribute it and/or modify it under the
// terms of the GNU Library General Public License as published by the Free Software
......@@ -97,6 +97,8 @@ class HAWIKI_wiki
var $deck; // HAW_deck object
var $wiki_string; // input in wiki syntax
var $wiki_base; // URL for WikiName links
var $home_url; // URL of home link
var $home_label; // label of home link
var $smiley_dir; // where smiley gif's are stored
var $yytext; // parser output
var $firstColumn; // flag to determine parser position
......@@ -127,7 +129,16 @@ class HAWIKI_wiki
function display()
{
// convert wiki text into HAWHAW object structure
// convert wiki text into HAWHAW object structure and create appropriate markup
if ($this->home_url && $this->home_label)
{
// create home link at top of deck
$homelink_top = new HAW_link($this->home_label, $this->home_url);
$homelink_top->set_br(2);
$this->deck->add_link($homelink_top);
}
$input = $this->wiki_string;
......@@ -412,11 +423,29 @@ class HAWIKI_wiki
HAWIKI_error(HAWIKI_ERROR_INVWIKISYNTAX); // script end
}
if ($this->home_url && $this->home_label)
{
// create home link at bottom of deck
$emptyline = new HAW_text("");
$this->deck->add_text($emptyline);
$homelink_bottom = new HAW_link($this->home_label, $this->home_url);
$this->deck->add_link($homelink_bottom);
}
// output appropriate markup language
$this->deck->create_page();
}
function set_homelink($label, $url)
{
$this->home_label = $label;
$this->home_url = $url;
}
function set_smiley_dir($dir)
{
$this->smiley_dir = $dir;
......
......@@ -77,6 +77,45 @@ class TikiLib {
return $this->getOne("select dsn from tiki_dsn where name='$name'");
}
/*shared*/ function check_rules($user,$section)
{
// Admin is never banned
if($user == 'admin' ) return false;
$ips = explode('.',$_SERVER["REMOTE_ADDR"]);
$now = date("U");
$query = "select tb.message,tb.user,tb.ip1,tb.ip2,tb.ip3,tb.ip4,tb.mode from tiki_banning tb, tiki_banning_sections tbs where tbs.banId=tb.banId and tbs.section='$section' and ( (tb.use_dates = 'n') or (tb.date_from <= $now and tb.date_to >= $now))";
$result = $this->query($query);
while($res = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
if(!$res['message']) {
$res['message']=tra('You are banned from').':'.$section;
}
if($user && $res['mode'] == 'user') {
// check user
$pattern = '/'.$res['user'].'/';
if(preg_match($pattern,$user)) {
return $res['message'];
}
} else {
// check ip
if(count($ips)==4) {
if(
($ips[0] == $res['ip1'] || $res['ip1']=='*')
&&
($ips[1] == $res['ip2'] || $res['ip2']=='*')
&&
($ips[2] == $res['ip3'] || $res['ip3']=='*')
&&
($ips[3] == $res['ip4'] || $res['ip4']=='*')
) {
return $res['message'];
}
}
}
}
return false;
}
/*shared*/ function replace_note($user,$noteId,$name,$data)
{
......
......@@ -17,6 +17,13 @@
$tiki_p_admin_drawings eq 'y' or
$tiki_p_admin_shoutbox eq 'y'
}
{if $feature_live_support eq 'y' and ($tiki_p_live_support_admin eq 'y' or $user_is_operator eq 'y')}
&nbsp;<a href="tiki-live_support_admin.php" class="linkmenu">{tr}Live support{/tr}</a><br/>
{/if}
{if $feature_banning eq 'y' and ($tiki_p_admin_banning eq 'y')}
&nbsp;<a href="tiki-admin_banning.php" class="linkmenu">{tr}Banning{/tr}</a><br/>
{/if}
{if $tiki_p_admin eq 'y'}
&nbsp;<a href="tiki-adminusers.php" class="linkmenu">{tr}Users{/tr}</a><br/>
&nbsp;<a href="tiki-admingroups.php" class="linkmenu">{tr}Groups{/tr}</a><br/>
......
......@@ -364,6 +364,10 @@
&nbsp;<a href="tiki-live_support_admin.php" class="linkmenu">{tr}Live support{/tr}</a><br/>
{/if}
{if $feature_banning eq 'y' and ($tiki_p_admin_banning eq 'y')}
&nbsp;<a href="tiki-admin_banning.php" class="linkmenu">{tr}Banning{/tr}</a><br/>
{/if}
{if $tiki_p_admin eq 'y'}
&nbsp;<a href="tiki-adminusers.php" class="linkmenu">{tr}Users{/tr}</a><br/>
&nbsp;<a href="tiki-admingroups.php" class="linkmenu">{tr}Groups{/tr}</a><br/>
......
......@@ -62,6 +62,7 @@
<tr><td class="form">{tr}Charts{/tr}:</td><td><input type="checkbox" name="feature_charts" {if $feature_charts eq 'y'}checked="checked"{/if}/></td></tr>
<tr><td class="form">{tr}User watches{/tr}:</td><td><input type="checkbox" name="feature_user_watches" {if $feature_user_watches eq 'y'}checked="checked"{/if}/></td></tr>
<tr><td class="form">{tr}Live support system{/tr}:</td><td><input type="checkbox" name="feature_live_support" {if $feature_live_support eq 'y'}checked="checked"{/if}/></td></tr>
<tr><td class="form">{tr}Banning system{/tr}:</td><td><input type="checkbox" name="feature_banning" {if $feature_banning eq 'y'}checked="checked"{/if}/></td></tr>
<tr><td align="center" class="form" colspan="2"><input type="submit" name="features" value="{tr}Set features{/tr}" /></td></tr>
</table>
</form>
......
<a class="pagetitle" href="tiki-admin_banning.php">{tr}Banning system{/tr}</a>
<br/><br/>
<h3>{tr}Add or edit a rule{/tr}</h3>
<form action="tiki-admin_banning.php" method="post">
<input type="hidden" name="banId" value="{$banId}" />
<table class="normal">
<tr>
<td class="formcolor">{tr}Rule title{/tr}</td>
<td class="formcolor">
<input type="text" name="title" value="{$info.title}" maxlength="200" />
</td>
</tr>
<tr>
<td class="formcolor">{tr}Username regex matching{/tr}:</td>
<td class="formcolor">
<input type="radio" name="mode" value="user" {if $info.mode eq 'user'}checked="checked"{/if} />
<input type="text" name="user" value="{$info.user}" />
</td>
</tr>
<tr>
<td class="formcolor">{tr}IP regex matching{/tr}:</td>
<td class="formcolor">
<input type="radio" name="mode" value="ip" {if $info.mode eq 'ip'}checked="checked"{/if} />
<input type="text" name="ip1" value="{$info.ip1}" size="3" />.
<input type="text" name="ip2" value="{$info.ip2}" size="3" />.
<input type="text" name="ip3" value="{$info.ip3}" size="3" />.
<input type="text" name="ip4" value="{$info.ip4}" size="3" />
</td>
</tr>
<tr>
<td class="formcolor">{tr}Banned from sections{/tr}:</td>
<td class="formcolor">
<table><tr>
{section name=ix loop=$sections}
<td class="formcolor">
<input type="checkbox" name="section[{$sections[ix]}]" {if in_array($sections[ix],$info.sections)}checked="checked"{/if} /> {$sections[ix]}
</td>
{* see if we should go to the next row *}
{if not ($smarty.section.ix.rownum mod 3)}
{if not $smarty.section.ix.last}
</tr><tr>
{/if}
{/if}
{if $smarty.section.ix.last}
{* pad the cells not yet created *}
{math equation = "n - a % n" n=3 a=$data|@count assign="cells"}
{if $cells ne $cols}
{section name=pad loop=$cells}
<td>&nbsp;</td>
{/section}
{/if}
</tr>
{/if}
{/section}
</table>
</td>
</tr>
<tr>
<td class="formcolor">{tr}Rule activated by dates{/tr}</td>
<td class="formcolor">
<input type="checkbox" name="use_dates" {if $info.use_dates eq 'y'}checked="checked"{/if} />
</td>
</tr>
<tr>
<td class="formcolor">{tr}Rule active from{/tr}</td>
<td class="formcolor">
{html_select_date prefix="date_from" time="$info.date_from"}
</td>
</tr>
<tr>
<td class="formcolor">{tr}Rule active until{/tr}</td>
<td class="formcolor">
{html_select_date prefix="date_to" time="$info.date_to"}
</td>
</tr>
<tr>
<td class="formcolor">{tr}Custom message to the user{/tr}</td>
<td class="formcolor">
<textarea rows="4" cols="40" name="message">{$info.message}</textarea>
</td>
</tr>
<tr>
<td class="formcolor">&nbsp;</td>
<td class="formcolor">
<input type="submit" name="save" value="{tr}save{/tr}" />
</td>
</tr>
</table>
</form>
<form method="post" action="tiki-admin_banning.php">
<input type="hidden" name="offset" value="{$offset}" />
<input type="hidden" name="sort_mode" value="{$sort_mode}" />
{tr}Find{/tr}:<input type="text" name="find" value="{$find}" />
</form>
<h3>{tr}Rules{/tr}:</h3>
<form method="post" action="tiki-admin_banning.php">
<input type="hidden" name="offset" value="{$offset}" />
<input type="hidden" name="find" value="{$find}" />
<input type="hidden" name="sort_mode" value="{$sort_mode}" />
<table class="normal">
<tr>
<td width="2%" class="heading"><input type="submit" name="del" value="{tr}x{/tr} " /></td>
<td class="heading">{tr}Title{/tr}</td>
<td width="" class="heading">{tr}User/IP{/tr}</a></td>
<td width="" class="heading">{tr}Sections{/tr}</a></td>
<td width="12%" class="heading">{tr}Action{/tr}</a></td>
</tr>
{cycle values="odd,even" print=false}
{section name=user loop=$items}
<tr>
<td class="{cycle advance=false}">
<input type="checkbox" name="delsec[{$items[user].banId}]" />
</td>
<td class="{cycle advance=false}">
<a href="tiki-admin_banning.php?banId={$items[user].banId}" class="link">
{$items[user].title}</a>
</td>
<td style="text-align:right;" class="{cycle advance=false}">
{if $items[user].mode eq 'user'}
{$items[user].user}
{else}
{$items[user].ip1}.{$items[user].ip2}.{$items[user].ip3}.{$items[user].ip4}
{/if}
</td>
<td style="text-align:right;" class="{cycle advance=false}">
{section name=ix loop=$items[user].sections}
{$items[user].sections[ix].section}{if not $smarty.section.ix.last},{/if}
{/section}
</td>
<td class="{cycle}">
<a href="tiki-admin_banning.php?offset={$offset}&amp;sort_mode={$sort_mode}&amp;find={$find}&amp;remove={$items[user].banId}" class="link"><img src='img/icons2/delete.gif' alt='{tr}delete{/tr}' title='{tr}delete{/tr}' border='0' /></a>
</td>
</tr>
{sectionelse}
<tr><td colspan="5" class="odd">{tr}No records found{/tr}</td></tr>
{/section}
</table>
</form>
<div class="mini">
<div align="center">
{if $prev_offset >= 0}
[<a class="prevnext" href="tiki-admin_banning.php?offset={$prev_offset}&amp;find={$find}">{tr}prev{/tr}</a>]&nbsp;
{/if}
{tr}Page{/tr}: {$actual_page}/{$cant_pages}
{if $next_offset >= 0}
&nbsp;[<a class="prevnext" href="tiki-admin_banning.php?offset={$next_offset}&amp;find={$find}">{tr}next{/tr}</a>]
{/if}
{if $direct_pagination eq 'y'}
<br/>
{section loop=$cant_pages name=foo}
{assign var=selector_offset value=$smarty.section.foo.index|times:$maxRecords}
<a class="prevnext" href="tiki-admin_banning.php offset=$selector_offset">
{$smarty.section.foo.index_next}</a>&nbsp;
{/section}
{/if}
</div>
</div>
......@@ -104,11 +104,11 @@
<td class="formcolor">
<table class="normal">
<tr>
<td>{tr}Replies{/tr}</td>
<td>{tr}Reads{/tr}</td>
<td>{tr}Points{/tr}</td>
<td>{tr}Last post{/tr}</td>
<td>{tr}author{/tr}</td>
<td class="formcolor">{tr}Replies{/tr}</td>
<td class="formcolor">{tr}Reads{/tr}</td>
<td class="formcolor">{tr}Points{/tr}</td>
<td class="formcolor">{tr}Last post{/tr}</td>
<td class="formcolor">{tr}author{/tr}</td>
</tr>
<tr>
<td><input type="checkbox" name="topics_list_replies" {if $topics_list_replies eq 'y'}checked="checked"{/if} /></td>
......@@ -131,10 +131,20 @@
<tr>
<td class="formcolor">{tr}Add messages from this email to the forum{/tr}</td>
<td class="formcolor">
{tr}POP3 server{/tr}:<input type="text" name="inbound_pop_server" value="{$inbound_pop_server}" />
<!--{tr}port{/tr}: <input type="text" name="inbound_pop_port" value="{$inbound_pop_port}" size="4" />--><br/>
{tr}User{/tr}: <input type="text" name="inbound_pop_user" value="{$inbound_pop_user}" /><br/>
{tr}Password{/tr}: <input type="text" name="inbound_pop_password" value="{$inbound_pop_password}"
<table>
<tr>
<td class="formcolor">{tr}POP3 server{/tr}:</td>
<td><input type="text" name="inbound_pop_server" value="{$inbound_pop_server}" /></td>
</tr>
<tr>
<td class="formcolor">{tr}User{/tr}:</td>
<td><input type="text" name="inbound_pop_user" value="{$inbound_pop_user}" /></td>
</tr>
<tr>
<td class="formcolor">{tr}Password{/tr}:</td>
<td><input type="text" name="inbound_pop_password" value="{$inbound_pop_password}" /></td>
</tr>
</table>
</td>
</tr>
<tr>
......@@ -149,14 +159,14 @@
<tr>
<td class="formcolor">{tr}User information display{/tr}</td>
<td class="formcolor">
<table>
<table width="100%">
<tr>
<td>{tr}avatar{/tr}</td>
<td>{tr}flag{/tr}</td>
<td>{tr}posts{/tr}</td>
<td>{tr}user level{/tr}</td>
<td>{tr}email{/tr}</td>
<td>{tr}online{/tr}</td>
<td class="formcolor">{tr}avatar{/tr}</td>
<td class="formcolor">{tr}flag{/tr}</td>