Browse Source
- initial version of fetchmail support (by Viktor Gotwig,info AT symateam.de)
- initial version of fetchmail support (by Viktor Gotwig,info AT symateam.de)
(see postfixadmin-devel mailinglist for detailed description and known problems, subject "fetchmail support") - encoded some german umlauts as htmlentities git-svn-id: https://svn.code.sf.net/p/postfixadmin/code/trunk@140 a1433add-5e2c-0410-b055-b7f2511e0802postfixadmin-2.3
4 changed files with 348 additions and 9 deletions
@ -0,0 +1,174 @@ |
|||
<?php |
|||
/** |
|||
* Postfix Admin |
|||
* |
|||
* LICENSE |
|||
* This source file is subject to the GPL license that is bundled with |
|||
* this package in the file LICENSE.TXT. |
|||
* |
|||
* Further details on the project are available at : |
|||
* http://www.postfixadmin.com or http://postfixadmin.sf.net |
|||
* |
|||
* @version $Id$ |
|||
* @license GNU GPL v2 or later. |
|||
* |
|||
* File: fetchmail.php |
|||
* Responsible for setting up fetchmail |
|||
* |
|||
* @version $Id$ |
|||
* @license GNU GPL v2 or later. |
|||
* |
|||
* Template Variables: |
|||
* |
|||
* TODO |
|||
* |
|||
* Form POST \ GET Variables: |
|||
* |
|||
* TODO |
|||
*/ |
|||
|
|||
/* new sql table: fetchmail |
|||
|
|||
create table fetchmail( |
|||
id int(11) unsigned not null auto_increment, |
|||
mailbox varchar(255) not null default '', |
|||
src_server varchar(255) not null default '', |
|||
src_auth enum('password','kerberos_v5','kerberos','kerberos_v4','gssapi','cram-md5','otp','ntlm','msn','ssh','any'), |
|||
src_user varchar(255) not null default '', |
|||
src_password varchar(255) not null default '', |
|||
src_folder varchar(255) not null default '', |
|||
pool_time int(11) unsigned not null default 10, |
|||
fetchall tinyint(1) unsigned not null default 0, |
|||
keep tinyint(1) unsigned not null default 0, |
|||
protocol enum('POP3','IMAP','POP2','ETRN','AUTO'), |
|||
extra_options text, |
|||
returned_text text, |
|||
mda varchar(255) not null default '', |
|||
date timestamp(14), |
|||
primary key(id) |
|||
); |
|||
|
|||
*/ |
|||
|
|||
require_once('common.php'); |
|||
|
|||
authentication_require_role('admin'); |
|||
|
|||
$fm_struct=array( // list($editible,$view,$type,$title,$comment)
|
|||
"id" =>array(0,1,'id', 'ID','Record ID'), |
|||
"mailbox" =>array(1,1,'enum', 'Mailbox','Local mailbox'), |
|||
"src_server" =>array(1,1,'text', 'Server','Remote Server'), |
|||
"src_auth" =>array(1,1,'enum', 'Auth Type','Mostly password'), |
|||
"src_user" =>array(1,1,'text', 'User','Remote User'), |
|||
"src_password" =>array(1,1,'password', 'Password','Remote Password'), |
|||
"src_folder" =>array(1,1,'text', 'Folder','Remote Folder'), |
|||
"pool_time" =>array(1,1,'num', 'Poll','Poll Time (min)'), |
|||
"fetchall" =>array(1,1,'bool', 'Fetch All','Retrieve both old (seen) and new messages'), |
|||
"keep" =>array(1,1,'bool', 'Keep','Keep retrieved messages on the remote mailserver'), |
|||
"protocol" =>array(1,1,'enum', 'Protocol','Protocol to use'), |
|||
"extra_options" =>array(1,1,'longtext', 'Extra Options','Extra fetchmail Options'), |
|||
"mda" =>array(1,1,'longtext', 'MDA','Mail Delivery Agent'), |
|||
"date" =>array(0,1,'text', 'Date','Date of last pooling/configuration change'), |
|||
"returned_text" =>array(0,1,'longtext', 'Returned Text','Text message from last pooling'), |
|||
); |
|||
|
|||
$SESSID_USERNAME = authentication_get_username(); |
|||
if (!$SESSID_USERNAME ) |
|||
exit; |
|||
|
|||
$fm_defaults=array( |
|||
"id" =>0, |
|||
"mailbox" => array($SESSID_USERNAME), |
|||
"pool_time" =>10, |
|||
"src_auth" => |
|||
array('password','kerberos_v5','kerberos','kerberos_v4','gssapi','cram-md5','otp','ntlm','msn','ssh','any'), |
|||
"protocol" => |
|||
array('POP3','IMAP','POP2','ETRN','AUTO'), |
|||
); |
|||
|
|||
|
|||
$list_domains = list_domains_for_admin ($SESSID_USERNAME); |
|||
$user_domains=implode("','",array_values($list_domains)); |
|||
$sql="SELECT username FROM mailbox WHERE domain in ('".$user_domains."')"; |
|||
|
|||
$res = db_query ($sql); |
|||
if ($res['rows'] > 0){ |
|||
$fm_defaults["mailbox"]=array(); |
|||
while ($name = db_array ($res['result'])){ |
|||
$fm_defaults["mailbox"][] = $name["username"]; |
|||
} |
|||
} |
|||
else{ |
|||
$fm_defaults["mailbox"]=array(); |
|||
$fm_defaults["mailbox"][]=$SESSID_USERNAME; |
|||
} |
|||
|
|||
$new=$_REQUEST["new"]; |
|||
$edit=(int)$_REQUEST["edit"]; |
|||
$delete=$_REQUEST["delete"]; |
|||
$save=$_REQUEST["save"]; |
|||
$cancel=$_REQUEST["cancel"]; |
|||
|
|||
if ($cancel){ |
|||
$edit=0; |
|||
} |
|||
elseif($edit && $save){ |
|||
$_vals=array(); |
|||
foreach($fm_struct as $key=>$row){ |
|||
list($editible,$view,$type,$title,$comment)=$row; |
|||
if ($editible){ |
|||
$func="_inp_".$type; |
|||
$val=$_REQUEST[$key]; |
|||
if ($type!="password" || substr($val,0,1)!="*"){ |
|||
$_vals[]=$key."='".mysql_escape_string( |
|||
function_exists($func) |
|||
?$func($val) |
|||
:$val)."'"; |
|||
} |
|||
} |
|||
} |
|||
$sql="UPDATE fetchmail SET ".implode(",",$_vals).",returned_text='' WHERE id=".$edit; |
|||
$res= db_query ($sql); |
|||
} |
|||
elseif($delete){ |
|||
db_query ("delete from fetchmail WHERE id=".$edit); |
|||
} |
|||
elseif ($new){ |
|||
$_keys=array(); |
|||
$_vals=array(); |
|||
foreach($fm_defaults as $key=>$val){ |
|||
$_keys[]=$key; |
|||
$_vals[]="'".(is_array($val)?$val[0]:mysql_escape_string($val))."'"; |
|||
} |
|||
$sql="INSERT fetchmail (".implode(",",$_keys).") VALUES (".implode(",",$_vals).")"; |
|||
$res= db_query ($sql); |
|||
$sql="SELECT id FROM fetchmail order by id desc limit 1"; |
|||
$res= db_query ($sql); |
|||
list($edit)=mysql_fetch_row($res['result']); |
|||
} |
|||
|
|||
$res = db_query ("SELECT ".implode(",",array_keys($fm_struct))." FROM fetchmail order by id desc"); |
|||
if ($res['rows'] > 0){ |
|||
while ($row = db_array ($res['result'])){ |
|||
$tFmail[] = $row; |
|||
} |
|||
} |
|||
|
|||
function _inp_num($val){ |
|||
return (int)($val); |
|||
} |
|||
|
|||
function _inp_bool($val){ |
|||
return $val?1:0; |
|||
} |
|||
|
|||
function _inp_password($val){ |
|||
return base64_encode($val); |
|||
} |
|||
|
|||
include ("./templates/header.tpl"); |
|||
include ("./templates/menu.tpl"); |
|||
include ("./templates/fetchmail.tpl"); |
|||
include ("./templates/footer.tpl"); |
|||
|
|||
?>
|
|||
@ -0,0 +1,155 @@ |
|||
<div id="overview"> |
|||
<form name="overview" method="post"> |
|||
|
|||
<?php |
|||
|
|||
$headers=array(); |
|||
foreach($fm_struct as $row){ |
|||
list($editible,$view,$type,$title,$comment)=$row; |
|||
if ($view){ |
|||
$headers[]=$row; |
|||
} |
|||
} |
|||
|
|||
print "<table id=\"log_table\" border=0>\n"; |
|||
print " <tr>\n"; |
|||
print " <td colspan=\"".(sizeof($headers)-1)."\"><h3>".$PALANG['pFetchmail_welcome'].$user_domains."</h3></td>\n"; |
|||
print " <td align=right><a href='?new=1'>>> ".$PALANG['pFetchmail_new_entry']."</a></td>\n"; |
|||
print " </tr>\n"; |
|||
print " <tr class=\"header\">\n"; |
|||
foreach($headers as $row){ |
|||
list($editible,$view,$type,$title,$comment)=$row; |
|||
print " <td>" . $title . "</td>\n"; |
|||
} |
|||
print " </tr>\n"; |
|||
|
|||
if (sizeof ($tFmail) > 0){ |
|||
foreach($tFmail as $row){ |
|||
if ($edit && $edit==$row["id"]){ |
|||
print "<tr><td colspan=".sizeof($headers).">".fetchmail_edit_row($row)."</td></tr>\n"; |
|||
} |
|||
else{ |
|||
print " <tr class=\"hilightoff\" onMouseOver=\"className='hilighton';\" onMouseOut=\"className='hilightoff';\">\n"; |
|||
foreach($row as $key=>$val){ |
|||
list($editible,$view,$type,$title,$comment)=$fm_struct[$key]; |
|||
if ($view){ |
|||
$func="_listview_".$type; |
|||
print " <td nowrap>" . (function_exists($func)?$func($val):$val) . "</td>\n"; |
|||
} |
|||
} |
|||
print " </tr>\n"; |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
function fetchmail_edit_row($data=array()){ |
|||
global $fm_struct,$fm_defaults; |
|||
$id=$data["id"]; |
|||
$_id=$data["id"]*100+1; |
|||
$ret="<table cellspacing=1 cellpadding=0 border=0 width=100%>"; |
|||
foreach($fm_struct as $key=>$struct){ |
|||
list($editible,$view,$type,$title,$comment)=$struct; |
|||
if ($editible){ |
|||
$ret.="<tr><td align=left valign=top><label for=${_id} style='width:20em;'>${title}: </label></td>"; |
|||
$ret.="<td align=left style='padding-left:.25em;padding-right:.25em;background-color:white;'>"; |
|||
$func="_edit_".$type; |
|||
if (! function_exists($func)) |
|||
$func="_edit_text"; |
|||
$val=isset($data[$key]) |
|||
?$data[$key] |
|||
:(! is_array($fm_defaults[$key]) |
|||
?$fm_defaults[$key] |
|||
:'' |
|||
); |
|||
$ret.=$func($_id++,$key,$fm_defaults[$key],$val); |
|||
$ret.="</td><td align=left valign=top><i> ${comment}</i></td></tr>\n"; |
|||
} |
|||
elseif($view){ |
|||
$func="_view_".$type; |
|||
$val=isset($data[$key]) |
|||
?(function_exists($func) |
|||
?$func($data[$key]) |
|||
:nl2br($data[$key]) |
|||
) |
|||
:"--x--"; |
|||
$ret.="<tr><td align=left valign=top>${title}: </label></td>"; |
|||
$ret.="<td align=left valign=top style='padding-left:.25em;padding-right:.25em;background-color:white;'>".$val; |
|||
$ret.="</td><td align=left valign=top><i> ${comment}</i></td></tr>\n"; |
|||
} |
|||
} |
|||
$ret.="<tr><td align=left><input type=submit name=cancel value='Abbrechen'></td><td align=right><input type=submit name=save value='Save'></td><td align=right><input type=submit name=delete value='Delete'>"; |
|||
if ($id){ |
|||
$ret.="<input type=hidden name=edit value='${id}'>"; |
|||
} |
|||
$ret.="</td></tr>\n"; |
|||
$ret.="</table>\n"; |
|||
return $ret; |
|||
} |
|||
|
|||
function _edit_text($id,$key,$def_vals,$val=""){ |
|||
$val=htmlspecialchars($val); |
|||
return "<input type=text name=${key} id=${id} value='${val}'>"; |
|||
} |
|||
|
|||
function _edit_password($id,$key,$def_vals,$val=""){ |
|||
$val=preg_replace("{.}","*",$val); |
|||
return "<input type=password name=${key} id=${id} value='${val}'>"; |
|||
} |
|||
|
|||
function _edit_num($id,$key,$def_vals,$val=""){ |
|||
$val=(int)($val); |
|||
return "<input type=text name=${key} id=${id} value='${val}'>"; |
|||
} |
|||
|
|||
function _edit_bool($id,$key,$def_vals,$val=""){ |
|||
$ret="<input type=checkbox name=${key} id=${id}"; |
|||
if ($val) |
|||
$ret.=" checked"; |
|||
$ret.=">"; |
|||
return $ret; |
|||
} |
|||
|
|||
function _edit_longtext($id,$key,$def_vals,$val=""){ |
|||
$val=htmlspecialchars($val); |
|||
return "<textarea name=${key} id=${id} rows=2 style='width:20em;'>${val}</textarea>"; |
|||
} |
|||
|
|||
function _edit_enum($id,$key,$def_vals,$val=""){ |
|||
$ret="<select name=${key} id=${id}>"; |
|||
foreach($def_vals as $opt_val){ |
|||
$ret.="<option"; |
|||
if ($opt_val==$val) |
|||
$ret.=" selected"; |
|||
$ret.=">${opt_val}</option>\n"; |
|||
} |
|||
$ret.="</select>\n"; |
|||
return $ret; |
|||
} |
|||
|
|||
function _listview_id($val){ |
|||
return "<a href='?edit=${val}'> ${val} </a>"; |
|||
} |
|||
|
|||
function _listview_bool($val){ |
|||
return $val?"+":""; |
|||
} |
|||
|
|||
function _listview_longtext($val){ |
|||
return strlen($val)?"Text - ".strlen($val)." chars":"--x--"; |
|||
} |
|||
|
|||
function _listview_text($val){ |
|||
return sizeof($val)?$val:"--x--"; |
|||
} |
|||
|
|||
function _listview_password($val){ |
|||
return preg_replace("{.}","*",$val); |
|||
} |
|||
|
|||
|
|||
?> |
|||
</table> |
|||
<p /> |
|||
</form> |
|||
</div> |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue