SF.net SVN: postfixadmin: [140] trunk
Brought to you by:
christian_boltz,
gingerdog
|
From: <chr...@us...> - 2007-10-07 23:12:05
|
Revision: 140
http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=140&view=rev
Author: christian_boltz
Date: 2007-10-07 16:12:07 -0700 (Sun, 07 Oct 2007)
Log Message:
-----------
- 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
Modified Paths:
--------------
trunk/languages/de.lang
trunk/languages/en.lang
Added Paths:
-----------
trunk/fetchmail.php
trunk/templates/fetchmail.tpl
Added: trunk/fetchmail.php
===================================================================
--- trunk/fetchmail.php (rev 0)
+++ trunk/fetchmail.php 2007-10-07 23:12:07 UTC (rev 140)
@@ -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");
+
+?>
Modified: trunk/languages/de.lang
===================================================================
--- trunk/languages/de.lang 2007-10-07 19:52:40 UTC (rev 139)
+++ trunk/languages/de.lang 2007-10-07 23:12:07 UTC (rev 140)
@@ -25,6 +25,7 @@
$PALANG['pMenu_overview'] = 'Überblick';
$PALANG['pMenu_create_alias'] = 'Alias hinzufügen';
$PALANG['pMenu_create_mailbox'] = 'Mailbox hinzufügen';
+$PALANG['pMenu_fetchmail'] = 'E-Mail Abruf bearbeiten';
$PALANG['pMenu_sendmail'] = 'Email versenden';
$PALANG['pMenu_password'] = 'Passwort ändern';
$PALANG['pMenu_viewlog'] = 'Log ansehen';
@@ -32,7 +33,7 @@
$PALANG['pMain_welcome'] = 'Willkommen zu Postfix Admin!';
$PALANG['pMain_overview'] = 'Listet Ihre Aliase und Mailboxen auf. Sie können sie hier editieren und löschen.';
-$PALANG['pMain_create_alias'] = 'Fügt einen neuen Alias für Ihre Domain hinzu.';
+$PALANG['pMain_create_alias'] = 'Fügt einen neuen Alias für Ihre Domain hinzu.';
$PALANG['pMain_create_mailbox'] = 'Legt eine neue Mailbox für Ihre Domain an.';
$PALANG['pMain_sendmail'] = 'Versenden Sie eine Email.';
$PALANG['pMain_password'] = 'Ändern Sie Ihr Admin-Passwort.';
@@ -280,24 +281,28 @@
$PALANG['pUsersVacation_subject_text'] = 'Ich bin weg...';
$PALANG['pUsersVacation_body'] = 'Text';
$PALANG['pUsersVacation_body_text'] = <<<EOM
-Ich bin vom <date> bis <date> nicht zu Hause / im Büro.
-In dringenden Fällen setzen Sie sich bitte mit <contact person> in Verbindung.
-Vielen Dank für Ihr Verständniss.
+Ich bin vom <date> bis <date> nicht zu Hause / im Büro.
+In dringenden Fällen setzen Sie sich bitte mit <contact person> in Verbindung.
+Vielen Dank für Ihr Verständnis.
EOM;
$PALANG['pUsersVacation_button_away'] = 'Ich gehe weg';
$PALANG['pUsersVacation_button_back'] = 'Ich bin zurück';
$PALANG['pUsersVacation_result_error'] = '<span class="error_msg">Konnte Ihre Automatische Antwort nicht einstellen!</span>';
$PALANG['pUsersVacation_result_success'] = 'Ihre Automatische Antwort wurde gelöscht!';
-$PALANG['pCreate_dbLog_createmailbox'] = 'Mailbox hinzufügen';
-$PALANG['pCreate_dbLog_createalias'] = 'Alias hinzufügen';
-$PALANG['pDelete_dbLog_deletealias'] = 'Alias löschen';
-$PALANG['pDelete_dbLog_deletemailbox'] = 'Mailbox löschen';
+$PALANG['pCreate_dbLog_createmailbox'] = 'Mailbox hinzufügen';
+$PALANG['pCreate_dbLog_createalias'] = 'Alias hinzuü\xBCgen';
+$PALANG['pDelete_dbLog_deletealias'] = 'Alias lüschen';
+$PALANG['pDelete_dbLog_deletemailbox'] = 'Mailbox löschen';
-$PALANG['pEdit_dbLog_editactive'] = 'Aktiv-Status ändern';
+$PALANG['pEdit_dbLog_editactive'] = 'Aktiv-Status ändern';
$PALANG['pEdit_dbLog_editalias'] = 'Alias bearbeiten';
$PALANG['pEdit_dbLog_editmailbox'] = 'Mailbox bearbeiten';
$PALANG['pSearch'] = 'suche';
$PALANG['pSearch_welcome'] = 'Suche nach: ';
+
+$PALANG['pFetchmail_welcome'] = 'E-Mail Abruf für: ';
+$PALANG['pFetchmail_new_entry'] = 'Neuer Eintrag';
+
?>
Modified: trunk/languages/en.lang
===================================================================
--- trunk/languages/en.lang 2007-10-07 19:52:40 UTC (rev 139)
+++ trunk/languages/en.lang 2007-10-07 23:12:07 UTC (rev 140)
@@ -28,6 +28,7 @@
$PALANG['pMenu_overview'] = 'Overview';
$PALANG['pMenu_create_alias'] = 'Add Alias';
$PALANG['pMenu_create_mailbox'] = 'Add Mailbox';
+$PALANG['pMenu_fetchmail'] = 'Fetch Email';
$PALANG['pMenu_sendmail'] = 'Send Email';
$PALANG['pMenu_password'] = 'Password';
$PALANG['pMenu_viewlog'] = 'View Log';
@@ -354,4 +355,8 @@
$PALANG['pStatus_popimap'] = 'POP/IMAP ';
$PALANG['pPasswordTooShort'] = "Password is too short - requires %s characters";
+
+$PALANG['pFetchmail_welcome'] = 'Fetch mail for:';
+$PALANG['pFetchmail_new_entry'] = 'New entry';
+
?>
Added: trunk/templates/fetchmail.tpl
===================================================================
--- trunk/templates/fetchmail.tpl (rev 0)
+++ trunk/templates/fetchmail.tpl 2007-10-07 23:12:07 UTC (rev 140)
@@ -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>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|