mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-24 17:04:14 +01:00
Created Stylite-EPL-9.2 branch
This commit is contained in:
parent
0c63c864e2
commit
8af064613c
2215
egw-pear/HTTP/WebDAV/Server.php
Normal file
2215
egw-pear/HTTP/WebDAV/Server.php
Normal file
File diff suppressed because it is too large
Load Diff
804
egw-pear/HTTP/WebDAV/Server/Filesystem.php
Normal file
804
egw-pear/HTTP/WebDAV/Server/Filesystem.php
Normal file
@ -0,0 +1,804 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once "HTTP/WebDAV/Server.php";
|
||||||
|
require_once "System.php";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filesystem access using WebDAV
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @author Hartmut Holzgraefe <hartmut@php.net>
|
||||||
|
* @version @package-version@
|
||||||
|
*/
|
||||||
|
class HTTP_WebDAV_Server_Filesystem extends HTTP_WebDAV_Server
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Root directory for WebDAV access
|
||||||
|
*
|
||||||
|
* Defaults to webserver document root (set by ServeRequest)
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $base = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MySQL Host where property and locking information is stored
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $db_host = "localhost";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MySQL database for property/locking information storage
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $db_name = "webdav";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MySQL table name prefix
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $db_prefix = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MySQL user for property/locking db access
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $db_user = "root";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MySQL password for property/locking db access
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $db_passwd = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Serve a webdav request
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @param string
|
||||||
|
*/
|
||||||
|
function ServeRequest($base = false)
|
||||||
|
{
|
||||||
|
// special treatment for litmus compliance test
|
||||||
|
// reply on its identifier header
|
||||||
|
// not needed for the test itself but eases debugging
|
||||||
|
foreach (apache_request_headers() as $key => $value) {
|
||||||
|
if (stristr($key, "litmus")) {
|
||||||
|
error_log("Litmus test $value");
|
||||||
|
header("X-Litmus-reply: ".$value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// set root directory, defaults to webserver document root if not set
|
||||||
|
if ($base) {
|
||||||
|
$this->base = realpath($base); // TODO throw if not a directory
|
||||||
|
} else if (!$this->base) {
|
||||||
|
$this->base = $this->_SERVER['DOCUMENT_ROOT'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// establish connection to property/locking db
|
||||||
|
mysql_connect($this->db_host, $this->db_user, $this->db_passwd) or die(mysql_error());
|
||||||
|
mysql_select_db($this->db_name) or die(mysql_error());
|
||||||
|
// TODO throw on connection problems
|
||||||
|
|
||||||
|
// let the base class do all the work
|
||||||
|
parent::ServeRequest();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No authentication is needed here
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @param string HTTP Authentication type (Basic, Digest, ...)
|
||||||
|
* @param string Username
|
||||||
|
* @param string Password
|
||||||
|
* @return bool true on successful authentication
|
||||||
|
*/
|
||||||
|
function check_auth($type, $user, $pass)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PROPFIND method handler
|
||||||
|
*
|
||||||
|
* @param array general parameter passing array
|
||||||
|
* @param array return array for file properties
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
function PROPFIND(&$options, &$files)
|
||||||
|
{
|
||||||
|
// get absolute fs path to requested resource
|
||||||
|
$fspath = $this->base . $options["path"];
|
||||||
|
|
||||||
|
// sanity check
|
||||||
|
if (!file_exists($fspath)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// prepare property array
|
||||||
|
$files["files"] = array();
|
||||||
|
|
||||||
|
// store information for the requested path itself
|
||||||
|
$files["files"][] = $this->fileinfo($options["path"]);
|
||||||
|
|
||||||
|
// information for contained resources requested?
|
||||||
|
if (!empty($options["depth"])) { // TODO check for is_dir() first?
|
||||||
|
|
||||||
|
// make sure path ends with '/'
|
||||||
|
$options["path"] = $this->_slashify($options["path"]);
|
||||||
|
|
||||||
|
// try to open directory
|
||||||
|
$handle = @opendir($fspath);
|
||||||
|
|
||||||
|
if ($handle) {
|
||||||
|
// ok, now get all its contents
|
||||||
|
while ($filename = readdir($handle)) {
|
||||||
|
if ($filename != "." && $filename != "..") {
|
||||||
|
$files["files"][] = $this->fileinfo($options["path"].$filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// TODO recursion needed if "Depth: infinite"
|
||||||
|
closedir($handle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ok, all done
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get properties for a single file/resource
|
||||||
|
*
|
||||||
|
* @param string resource path
|
||||||
|
* @return array resource properties
|
||||||
|
*/
|
||||||
|
function fileinfo($path)
|
||||||
|
{
|
||||||
|
// map URI path to filesystem path
|
||||||
|
$fspath = $this->base . $path;
|
||||||
|
|
||||||
|
// create result array
|
||||||
|
$info = array();
|
||||||
|
// TODO remove slash append code when base clase is able to do it itself
|
||||||
|
$info["path"] = is_dir($fspath) ? $this->_slashify($path) : $path;
|
||||||
|
$info["props"] = array();
|
||||||
|
|
||||||
|
// no special beautified displayname here ...
|
||||||
|
$info["props"][] = $this->mkprop("displayname", strtoupper($path));
|
||||||
|
|
||||||
|
// creation and modification time
|
||||||
|
$info["props"][] = $this->mkprop("creationdate", filectime($fspath));
|
||||||
|
$info["props"][] = $this->mkprop("getlastmodified", filemtime($fspath));
|
||||||
|
|
||||||
|
// type and size (caller already made sure that path exists)
|
||||||
|
if (is_dir($fspath)) {
|
||||||
|
// directory (WebDAV collection)
|
||||||
|
$info["props"][] = $this->mkprop("resourcetype", "collection");
|
||||||
|
$info["props"][] = $this->mkprop("getcontenttype", "httpd/unix-directory");
|
||||||
|
} else {
|
||||||
|
// plain file (WebDAV resource)
|
||||||
|
$info["props"][] = $this->mkprop("resourcetype", "");
|
||||||
|
if (is_readable($fspath)) {
|
||||||
|
$info["props"][] = $this->mkprop("getcontenttype", $this->_mimetype($fspath));
|
||||||
|
} else {
|
||||||
|
$info["props"][] = $this->mkprop("getcontenttype", "application/x-non-readable");
|
||||||
|
}
|
||||||
|
$info["props"][] = $this->mkprop("getcontentlength", filesize($fspath));
|
||||||
|
}
|
||||||
|
|
||||||
|
// get additional properties from database
|
||||||
|
$query = "SELECT ns, name, value
|
||||||
|
FROM {$this->db_prefix}properties
|
||||||
|
WHERE path = '$path'";
|
||||||
|
$res = mysql_query($query);
|
||||||
|
while ($row = mysql_fetch_assoc($res)) {
|
||||||
|
$info["props"][] = $this->mkprop($row["ns"], $row["name"], $row["value"]);
|
||||||
|
}
|
||||||
|
mysql_free_result($res);
|
||||||
|
|
||||||
|
return $info;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* detect if a given program is found in the search PATH
|
||||||
|
*
|
||||||
|
* helper function used by _mimetype() to detect if the
|
||||||
|
* external 'file' utility is available
|
||||||
|
*
|
||||||
|
* @param string program name
|
||||||
|
* @param string optional search path, defaults to $PATH
|
||||||
|
* @return bool true if executable program found in path
|
||||||
|
*/
|
||||||
|
function _can_execute($name, $path = false)
|
||||||
|
{
|
||||||
|
// path defaults to PATH from environment if not set
|
||||||
|
if ($path === false) {
|
||||||
|
$path = getenv("PATH");
|
||||||
|
}
|
||||||
|
|
||||||
|
// check method depends on operating system
|
||||||
|
if (!strncmp(PHP_OS, "WIN", 3)) {
|
||||||
|
// on Windows an appropriate COM or EXE file needs to exist
|
||||||
|
$exts = array(".exe", ".com");
|
||||||
|
$check_fn = "file_exists";
|
||||||
|
} else {
|
||||||
|
// anywhere else we look for an executable file of that name
|
||||||
|
$exts = array("");
|
||||||
|
$check_fn = "is_executable";
|
||||||
|
}
|
||||||
|
|
||||||
|
// now check the directories in the path for the program
|
||||||
|
foreach (explode(PATH_SEPARATOR, $path) as $dir) {
|
||||||
|
// skip invalid path entries
|
||||||
|
if (!file_exists($dir)) continue;
|
||||||
|
if (!is_dir($dir)) continue;
|
||||||
|
|
||||||
|
// and now look for the file
|
||||||
|
foreach ($exts as $ext) {
|
||||||
|
if ($check_fn("$dir/$name".$ext)) return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* try to detect the mime type of a file
|
||||||
|
*
|
||||||
|
* @param string file path
|
||||||
|
* @return string guessed mime type
|
||||||
|
*/
|
||||||
|
function _mimetype($fspath)
|
||||||
|
{
|
||||||
|
if (@is_dir($fspath)) {
|
||||||
|
// directories are easy
|
||||||
|
return "httpd/unix-directory";
|
||||||
|
} else if (function_exists("mime_content_type")) {
|
||||||
|
// use mime magic extension if available
|
||||||
|
$mime_type = mime_content_type($fspath);
|
||||||
|
} else if ($this->_can_execute("file")) {
|
||||||
|
// it looks like we have a 'file' command,
|
||||||
|
// lets see it it does have mime support
|
||||||
|
$fp = popen("file -i '$fspath' 2>/dev/null", "r");
|
||||||
|
$reply = fgets($fp);
|
||||||
|
pclose($fp);
|
||||||
|
|
||||||
|
// popen will not return an error if the binary was not found
|
||||||
|
// and find may not have mime support using "-i"
|
||||||
|
// so we test the format of the returned string
|
||||||
|
|
||||||
|
// the reply begins with the requested filename
|
||||||
|
if (!strncmp($reply, "$fspath: ", strlen($fspath)+2)) {
|
||||||
|
$reply = substr($reply, strlen($fspath)+2);
|
||||||
|
// followed by the mime type (maybe including options)
|
||||||
|
if (preg_match('|^[[:alnum:]_-]+/[[:alnum:]_-]+;?.*|', $reply, $matches)) {
|
||||||
|
$mime_type = $matches[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($mime_type)) {
|
||||||
|
// Fallback solution: try to guess the type by the file extension
|
||||||
|
// TODO: add more ...
|
||||||
|
// TODO: it has been suggested to delegate mimetype detection
|
||||||
|
// to apache but this has at least three issues:
|
||||||
|
// - works only with apache
|
||||||
|
// - needs file to be within the document tree
|
||||||
|
// - requires apache mod_magic
|
||||||
|
// TODO: can we use the registry for this on Windows?
|
||||||
|
// OTOH if the server is Windos the clients are likely to
|
||||||
|
// be Windows, too, and tend do ignore the Content-Type
|
||||||
|
// anyway (overriding it with information taken from
|
||||||
|
// the registry)
|
||||||
|
// TODO: have a seperate PEAR class for mimetype detection?
|
||||||
|
switch (strtolower(strrchr(basename($fspath), "."))) {
|
||||||
|
case ".html":
|
||||||
|
$mime_type = "text/html";
|
||||||
|
break;
|
||||||
|
case ".gif":
|
||||||
|
$mime_type = "image/gif";
|
||||||
|
break;
|
||||||
|
case ".jpg":
|
||||||
|
$mime_type = "image/jpeg";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$mime_type = "application/octet-stream";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $mime_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GET method handler
|
||||||
|
*
|
||||||
|
* @param array parameter passing array
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
function GET(&$options)
|
||||||
|
{
|
||||||
|
// get absolute fs path to requested resource
|
||||||
|
$fspath = $this->base . $options["path"];
|
||||||
|
|
||||||
|
// sanity check
|
||||||
|
if (!file_exists($fspath)) return false;
|
||||||
|
|
||||||
|
// is this a collection?
|
||||||
|
if (is_dir($fspath)) {
|
||||||
|
return $this->GetDir($fspath, $options);
|
||||||
|
}
|
||||||
|
|
||||||
|
// detect resource type
|
||||||
|
$options['mimetype'] = $this->_mimetype($fspath);
|
||||||
|
|
||||||
|
// detect modification time
|
||||||
|
// see rfc2518, section 13.7
|
||||||
|
// some clients seem to treat this as a reverse rule
|
||||||
|
// requiering a Last-Modified header if the getlastmodified header was set
|
||||||
|
$options['mtime'] = filemtime($fspath);
|
||||||
|
|
||||||
|
// detect resource size
|
||||||
|
$options['size'] = filesize($fspath);
|
||||||
|
|
||||||
|
// no need to check result here, it is handled by the base class
|
||||||
|
if (!($options['stream'] = fopen($fspath, "r")))
|
||||||
|
{
|
||||||
|
return '403 Forbidden';
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GET method handler for directories
|
||||||
|
*
|
||||||
|
* This is a very simple mod_index lookalike.
|
||||||
|
* See RFC 2518, Section 8.4 on GET/HEAD for collections
|
||||||
|
*
|
||||||
|
* @param string directory path
|
||||||
|
* @return void function has to handle HTTP response itself
|
||||||
|
*/
|
||||||
|
function GetDir($fspath, &$options)
|
||||||
|
{
|
||||||
|
$path = $this->_slashify($options["path"]);
|
||||||
|
if ($path != $options["path"]) {
|
||||||
|
header("Location: ".$this->base_uri.$path);
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// fixed width directory column format
|
||||||
|
$format = "%15s %-19s %-s\n";
|
||||||
|
|
||||||
|
$handle = @opendir($fspath);
|
||||||
|
if (!$handle) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "<html><head><title>Index of ".htmlspecialchars($options['path'])."</title></head>\n";
|
||||||
|
|
||||||
|
echo "<h1>Index of ".htmlspecialchars($options['path'])."</h1>\n";
|
||||||
|
|
||||||
|
echo "<pre>";
|
||||||
|
printf($format, "Size", "Last modified", "Filename");
|
||||||
|
echo "<hr>";
|
||||||
|
|
||||||
|
while ($filename = readdir($handle)) {
|
||||||
|
if ($filename != "." && $filename != "..") {
|
||||||
|
$fullpath = $fspath.$filename;
|
||||||
|
$name = htmlspecialchars($filename);
|
||||||
|
printf($format,
|
||||||
|
number_format(filesize($fullpath)),
|
||||||
|
strftime("%Y-%m-%d %H:%M:%S", filemtime($fullpath)),
|
||||||
|
"<a href='$name'>$name</a>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "</pre>";
|
||||||
|
|
||||||
|
closedir($handle);
|
||||||
|
|
||||||
|
echo "</html>\n";
|
||||||
|
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PUT method handler
|
||||||
|
*
|
||||||
|
* @param array parameter passing array
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
function PUT(&$options)
|
||||||
|
{
|
||||||
|
$fspath = $this->base . $options["path"];
|
||||||
|
|
||||||
|
if (!@is_dir(dirname($fspath))) {
|
||||||
|
return "409 Conflict";
|
||||||
|
}
|
||||||
|
|
||||||
|
$options["new"] = ! file_exists($fspath);
|
||||||
|
|
||||||
|
$fp = fopen($fspath, "w");
|
||||||
|
|
||||||
|
return $fp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MKCOL method handler
|
||||||
|
*
|
||||||
|
* @param array general parameter passing array
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
function MKCOL($options)
|
||||||
|
{
|
||||||
|
$path = $this->base .$options["path"];
|
||||||
|
$parent = dirname($path);
|
||||||
|
$name = basename($path);
|
||||||
|
|
||||||
|
if (!file_exists($parent)) {
|
||||||
|
return "409 Conflict";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_dir($parent)) {
|
||||||
|
return "403 Forbidden";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( file_exists($parent."/".$name) ) {
|
||||||
|
return "405 Method not allowed";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($this->_SERVER["CONTENT_LENGTH"])) { // no body parsing yet
|
||||||
|
return "415 Unsupported media type";
|
||||||
|
}
|
||||||
|
|
||||||
|
$stat = mkdir($parent."/".$name, 0777);
|
||||||
|
if (!$stat) {
|
||||||
|
return "403 Forbidden";
|
||||||
|
}
|
||||||
|
|
||||||
|
return ("201 Created");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DELETE method handler
|
||||||
|
*
|
||||||
|
* @param array general parameter passing array
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
function DELETE($options)
|
||||||
|
{
|
||||||
|
$path = $this->base . "/" .$options["path"];
|
||||||
|
|
||||||
|
if (!file_exists($path)) {
|
||||||
|
return "404 Not found";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_dir($path)) {
|
||||||
|
$query = "DELETE FROM {$this->db_prefix}properties
|
||||||
|
WHERE path LIKE '".$this->_slashify($options["path"])."%'";
|
||||||
|
mysql_query($query);
|
||||||
|
System::rm("-rf $path");
|
||||||
|
} else {
|
||||||
|
unlink($path);
|
||||||
|
}
|
||||||
|
$query = "DELETE FROM {$this->db_prefix}properties
|
||||||
|
WHERE path = '$options[path]'";
|
||||||
|
mysql_query($query);
|
||||||
|
|
||||||
|
return "204 No Content";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MOVE method handler
|
||||||
|
*
|
||||||
|
* @param array general parameter passing array
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
function MOVE($options)
|
||||||
|
{
|
||||||
|
return $this->COPY($options, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* COPY method handler
|
||||||
|
*
|
||||||
|
* @param array general parameter passing array
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
function COPY($options, $del=false)
|
||||||
|
{
|
||||||
|
// TODO Property updates still broken (Litmus should detect this?)
|
||||||
|
|
||||||
|
if (!empty($this->_SERVER["CONTENT_LENGTH"])) { // no body parsing yet
|
||||||
|
return "415 Unsupported media type";
|
||||||
|
}
|
||||||
|
|
||||||
|
// no copying to different WebDAV Servers yet
|
||||||
|
if (isset($options["dest_url"])) {
|
||||||
|
return "502 bad gateway";
|
||||||
|
}
|
||||||
|
|
||||||
|
$source = $this->base .$options["path"];
|
||||||
|
if (!file_exists($source)) return "404 Not found";
|
||||||
|
|
||||||
|
$dest = $this->base . $options["dest"];
|
||||||
|
$new = !file_exists($dest);
|
||||||
|
$existing_col = false;
|
||||||
|
|
||||||
|
if (!$new) {
|
||||||
|
if ($del && is_dir($dest)) {
|
||||||
|
if (!$options["overwrite"]) {
|
||||||
|
return "412 precondition failed";
|
||||||
|
}
|
||||||
|
$dest .= basename($source);
|
||||||
|
if (file_exists($dest)) {
|
||||||
|
$options["dest"] .= basename($source);
|
||||||
|
} else {
|
||||||
|
$new = true;
|
||||||
|
$existing_col = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$new) {
|
||||||
|
if ($options["overwrite"]) {
|
||||||
|
$stat = $this->DELETE(array("path" => $options["dest"]));
|
||||||
|
if (($stat{0} != "2") && (substr($stat, 0, 3) != "404")) {
|
||||||
|
return $stat;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return "412 precondition failed";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_dir($source) && ($options["depth"] != "infinity")) {
|
||||||
|
// RFC 2518 Section 9.2, last paragraph
|
||||||
|
return "400 Bad request";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($del) {
|
||||||
|
if (!rename($source, $dest)) {
|
||||||
|
return "500 Internal server error";
|
||||||
|
}
|
||||||
|
$destpath = $this->_unslashify($options["dest"]);
|
||||||
|
if (is_dir($source)) {
|
||||||
|
$query = "UPDATE {$this->db_prefix}properties
|
||||||
|
SET path = REPLACE(path, '".$options["path"]."', '".$destpath."')
|
||||||
|
WHERE path LIKE '".$this->_slashify($options["path"])."%'";
|
||||||
|
mysql_query($query);
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = "UPDATE {$this->db_prefix}properties
|
||||||
|
SET path = '".$destpath."'
|
||||||
|
WHERE path = '".$options["path"]."'";
|
||||||
|
mysql_query($query);
|
||||||
|
} else {
|
||||||
|
if (is_dir($source)) {
|
||||||
|
$files = System::find($source);
|
||||||
|
$files = array_reverse($files);
|
||||||
|
} else {
|
||||||
|
$files = array($source);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_array($files) || empty($files)) {
|
||||||
|
return "500 Internal server error";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
foreach ($files as $file) {
|
||||||
|
if (is_dir($file)) {
|
||||||
|
$file = $this->_slashify($file);
|
||||||
|
}
|
||||||
|
|
||||||
|
$destfile = str_replace($source, $dest, $file);
|
||||||
|
|
||||||
|
if (is_dir($file)) {
|
||||||
|
if (!is_dir($destfile)) {
|
||||||
|
// TODO "mkdir -p" here? (only natively supported by PHP 5)
|
||||||
|
if (!@mkdir($destfile)) {
|
||||||
|
return "409 Conflict";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!@copy($file, $destfile)) {
|
||||||
|
return "409 Conflict";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = "INSERT INTO {$this->db_prefix}properties
|
||||||
|
SELECT *
|
||||||
|
FROM {$this->db_prefix}properties
|
||||||
|
WHERE path = '".$options['path']."'";
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($new && !$existing_col) ? "201 Created" : "204 No Content";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PROPPATCH method handler
|
||||||
|
*
|
||||||
|
* @param array general parameter passing array
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
function PROPPATCH(&$options)
|
||||||
|
{
|
||||||
|
global $prefs, $tab;
|
||||||
|
|
||||||
|
$msg = "";
|
||||||
|
$path = $options["path"];
|
||||||
|
$dir = dirname($path)."/";
|
||||||
|
$base = basename($path);
|
||||||
|
|
||||||
|
foreach ($options["props"] as $key => $prop) {
|
||||||
|
if ($prop["ns"] == "DAV:") {
|
||||||
|
$options["props"][$key]['status'] = "403 Forbidden";
|
||||||
|
} else {
|
||||||
|
if (isset($prop["val"])) {
|
||||||
|
$query = "REPLACE INTO {$this->db_prefix}properties
|
||||||
|
SET path = '$options[path]'
|
||||||
|
, name = '$prop[name]'
|
||||||
|
, ns= '$prop[ns]'
|
||||||
|
, value = '$prop[val]'";
|
||||||
|
} else {
|
||||||
|
$query = "DELETE FROM {$this->db_prefix}properties
|
||||||
|
WHERE path = '$options[path]'
|
||||||
|
AND name = '$prop[name]'
|
||||||
|
AND ns = '$prop[ns]'";
|
||||||
|
}
|
||||||
|
mysql_query($query);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LOCK method handler
|
||||||
|
*
|
||||||
|
* @param array general parameter passing array
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
function LOCK(&$options)
|
||||||
|
{
|
||||||
|
// get absolute fs path to requested resource
|
||||||
|
$fspath = $this->base . $options["path"];
|
||||||
|
|
||||||
|
// TODO recursive locks on directories not supported yet
|
||||||
|
if (is_dir($fspath) && !empty($options["depth"])) {
|
||||||
|
return "409 Conflict";
|
||||||
|
}
|
||||||
|
|
||||||
|
$options["timeout"] = time()+300; // 5min. hardcoded
|
||||||
|
|
||||||
|
if (isset($options["update"])) { // Lock Update
|
||||||
|
$where = "WHERE path = '$options[path]' AND token = '$options[update]'";
|
||||||
|
|
||||||
|
$query = "SELECT owner, exclusivelock FROM {$this->db_prefix}locks $where";
|
||||||
|
$res = mysql_query($query);
|
||||||
|
$row = mysql_fetch_assoc($res);
|
||||||
|
mysql_free_result($res);
|
||||||
|
|
||||||
|
if (is_array($row)) {
|
||||||
|
$query = "UPDATE {$this->db_prefix}locks
|
||||||
|
SET expires = '$options[timeout]'
|
||||||
|
, modified = ".time()."
|
||||||
|
$where";
|
||||||
|
mysql_query($query);
|
||||||
|
|
||||||
|
$options['owner'] = $row['owner'];
|
||||||
|
$options['scope'] = $row["exclusivelock"] ? "exclusive" : "shared";
|
||||||
|
$options['type'] = $row["exclusivelock"] ? "write" : "read";
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = "INSERT INTO {$this->db_prefix}locks
|
||||||
|
SET token = '$options[locktoken]'
|
||||||
|
, path = '$options[path]'
|
||||||
|
, created = ".time()."
|
||||||
|
, modified = ".time()."
|
||||||
|
, owner = '$options[owner]'
|
||||||
|
, expires = '$options[timeout]'
|
||||||
|
, exclusivelock = " .($options['scope'] === "exclusive" ? "1" : "0")
|
||||||
|
;
|
||||||
|
mysql_query($query);
|
||||||
|
|
||||||
|
return mysql_affected_rows() ? "200 OK" : "409 Conflict";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UNLOCK method handler
|
||||||
|
*
|
||||||
|
* @param array general parameter passing array
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
function UNLOCK(&$options)
|
||||||
|
{
|
||||||
|
$query = "DELETE FROM {$this->db_prefix}locks
|
||||||
|
WHERE path = '$options[path]'
|
||||||
|
AND token = '$options[token]'";
|
||||||
|
mysql_query($query);
|
||||||
|
|
||||||
|
return mysql_affected_rows() ? "204 No Content" : "409 Conflict";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* checkLock() helper
|
||||||
|
*
|
||||||
|
* @param string resource path to check for locks
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
function checkLock($path)
|
||||||
|
{
|
||||||
|
$result = false;
|
||||||
|
|
||||||
|
$query = "SELECT owner, token, created, modified, expires, exclusivelock
|
||||||
|
FROM {$this->db_prefix}locks
|
||||||
|
WHERE path = '$path'
|
||||||
|
";
|
||||||
|
$res = mysql_query($query);
|
||||||
|
|
||||||
|
if ($res) {
|
||||||
|
$row = mysql_fetch_array($res);
|
||||||
|
mysql_free_result($res);
|
||||||
|
|
||||||
|
if ($row) {
|
||||||
|
$result = array( "type" => "write",
|
||||||
|
"scope" => $row["exclusivelock"] ? "exclusive" : "shared",
|
||||||
|
"depth" => 0,
|
||||||
|
"owner" => $row['owner'],
|
||||||
|
"token" => $row['token'],
|
||||||
|
"created" => $row['created'],
|
||||||
|
"modified" => $row['modified'],
|
||||||
|
"expires" => $row['expires']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* create database tables for property and lock storage
|
||||||
|
*
|
||||||
|
* @param void
|
||||||
|
* @return bool true on success
|
||||||
|
*/
|
||||||
|
function create_database()
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* indent-tabs-mode:nil
|
||||||
|
* End:
|
||||||
|
*/
|
237
egw-pear/HTTP/WebDAV/Tools/_parse_lockinfo.php
Normal file
237
egw-pear/HTTP/WebDAV/Tools/_parse_lockinfo.php
Normal file
@ -0,0 +1,237 @@
|
|||||||
|
<?php
|
||||||
|
//
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | PHP Version 4 |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | Copyright (c) 1997-2003 The PHP Group |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | This source file is subject to version 2.02 of the PHP license, |
|
||||||
|
// | that is bundled with this package in the file LICENSE, and is |
|
||||||
|
// | available at through the world-wide-web at |
|
||||||
|
// | http://www.php.net/license/2_02.txt. |
|
||||||
|
// | If you did not receive a copy of the PHP license and are unable to |
|
||||||
|
// | obtain it through the world-wide-web, please send a note to |
|
||||||
|
// | license@php.net so we can mail you a copy immediately. |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | Authors: Hartmut Holzgraefe <hholzgra@php.net> |
|
||||||
|
// | Christian Stocker <chregu@bitflux.ch> |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
//
|
||||||
|
// $Id: _parse_lockinfo.php,v 1.4 2006/10/10 11:53:17 hholzgra Exp $
|
||||||
|
//
|
||||||
|
|
||||||
|
/**
|
||||||
|
* helper class for parsing LOCK request bodies
|
||||||
|
*
|
||||||
|
* @package HTTP_WebDAV_Server
|
||||||
|
* @author Hartmut Holzgraefe <hholzgra@php.net>
|
||||||
|
* @version @package-version@
|
||||||
|
*/
|
||||||
|
class _parse_lockinfo
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* success state flag
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
var $success = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* lock type, currently only "write"
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
var $locktype = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* lock scope, "shared" or "exclusive"
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
var $lockscope = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* lock owner information
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
var $owner = "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* flag that is set during lock owner read
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $collect_owner = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor
|
||||||
|
*
|
||||||
|
* @param string path of stream to read
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function _parse_lockinfo($path)
|
||||||
|
{
|
||||||
|
// we assume success unless problems occur
|
||||||
|
$this->success = true;
|
||||||
|
|
||||||
|
// remember if any input was parsed
|
||||||
|
$had_input = false;
|
||||||
|
|
||||||
|
// open stream
|
||||||
|
$f_in = fopen($path, "r");
|
||||||
|
if (!$f_in) {
|
||||||
|
$this->success = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// create namespace aware parser
|
||||||
|
$xml_parser = xml_parser_create_ns("UTF-8", " ");
|
||||||
|
|
||||||
|
// set tag and data handlers
|
||||||
|
xml_set_element_handler($xml_parser,
|
||||||
|
array(&$this, "_startElement"),
|
||||||
|
array(&$this, "_endElement"));
|
||||||
|
xml_set_character_data_handler($xml_parser,
|
||||||
|
array(&$this, "_data"));
|
||||||
|
|
||||||
|
// we want a case sensitive parser
|
||||||
|
xml_parser_set_option($xml_parser,
|
||||||
|
XML_OPTION_CASE_FOLDING, false);
|
||||||
|
|
||||||
|
// parse input
|
||||||
|
while ($this->success && !feof($f_in)) {
|
||||||
|
$line = fgets($f_in);
|
||||||
|
if (is_string($line)) {
|
||||||
|
$had_input = true;
|
||||||
|
$this->success &= xml_parse($xml_parser, $line, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// finish parsing
|
||||||
|
if ($had_input) {
|
||||||
|
$this->success &= xml_parse($xml_parser, "", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if required tags where found
|
||||||
|
$this->success &= !empty($this->locktype);
|
||||||
|
$this->success &= !empty($this->lockscope);
|
||||||
|
|
||||||
|
// free parser resource
|
||||||
|
xml_parser_free($xml_parser);
|
||||||
|
|
||||||
|
// close input stream
|
||||||
|
fclose($f_in);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* tag start handler
|
||||||
|
*
|
||||||
|
* @param resource parser
|
||||||
|
* @param string tag name
|
||||||
|
* @param array tag attributes
|
||||||
|
* @return void
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _startElement($parser, $name, $attrs)
|
||||||
|
{
|
||||||
|
// namespace handling
|
||||||
|
if (strstr($name, " ")) {
|
||||||
|
list($ns, $tag) = explode(" ", $name);
|
||||||
|
} else {
|
||||||
|
$ns = "";
|
||||||
|
$tag = $name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ($this->collect_owner) {
|
||||||
|
// everything within the <owner> tag needs to be collected
|
||||||
|
$ns_short = "";
|
||||||
|
$ns_attr = "";
|
||||||
|
if ($ns) {
|
||||||
|
if ($ns == "DAV:") {
|
||||||
|
$ns_short = "D:";
|
||||||
|
} else {
|
||||||
|
$ns_attr = " xmlns='$ns'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->owner .= "<$ns_short$tag$ns_attr>";
|
||||||
|
} else if ($ns == "DAV:") {
|
||||||
|
// parse only the essential tags
|
||||||
|
switch ($tag) {
|
||||||
|
case "write":
|
||||||
|
$this->locktype = $tag;
|
||||||
|
break;
|
||||||
|
case "exclusive":
|
||||||
|
case "shared":
|
||||||
|
$this->lockscope = $tag;
|
||||||
|
break;
|
||||||
|
case "owner":
|
||||||
|
$this->collect_owner = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* data handler
|
||||||
|
*
|
||||||
|
* @param resource parser
|
||||||
|
* @param string data
|
||||||
|
* @return void
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _data($parser, $data)
|
||||||
|
{
|
||||||
|
// only the <owner> tag has data content
|
||||||
|
if ($this->collect_owner) {
|
||||||
|
$this->owner .= $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* tag end handler
|
||||||
|
*
|
||||||
|
* @param resource parser
|
||||||
|
* @param string tag name
|
||||||
|
* @return void
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _endElement($parser, $name)
|
||||||
|
{
|
||||||
|
// namespace handling
|
||||||
|
if (strstr($name, " ")) {
|
||||||
|
list($ns, $tag) = explode(" ", $name);
|
||||||
|
} else {
|
||||||
|
$ns = "";
|
||||||
|
$tag = $name;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <owner> finished?
|
||||||
|
if (($ns == "DAV:") && ($tag == "owner")) {
|
||||||
|
$this->collect_owner = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// within <owner> we have to collect everything
|
||||||
|
if ($this->collect_owner) {
|
||||||
|
$ns_short = "";
|
||||||
|
$ns_attr = "";
|
||||||
|
if ($ns) {
|
||||||
|
if ($ns == "DAV:") {
|
||||||
|
$ns_short = "D:";
|
||||||
|
} else {
|
||||||
|
$ns_attr = " xmlns='$ns'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->owner .= "</$ns_short$tag$ns_attr>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
251
egw-pear/HTTP/WebDAV/Tools/_parse_propfind.php
Normal file
251
egw-pear/HTTP/WebDAV/Tools/_parse_propfind.php
Normal file
@ -0,0 +1,251 @@
|
|||||||
|
<?php
|
||||||
|
//
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | PHP Version 4 |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | Copyright (c) 1997-2003 The PHP Group |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | This source file is subject to version 2.02 of the PHP license, |
|
||||||
|
// | that is bundled with this package in the file LICENSE, and is |
|
||||||
|
// | available at through the world-wide-web at |
|
||||||
|
// | http://www.php.net/license/2_02.txt. |
|
||||||
|
// | If you did not receive a copy of the PHP license and are unable to |
|
||||||
|
// | obtain it through the world-wide-web, please send a note to |
|
||||||
|
// | license@php.net so we can mail you a copy immediately. |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | Authors: Hartmut Holzgraefe <hholzgra@php.net> |
|
||||||
|
// | Christian Stocker <chregu@bitflux.ch> |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
//
|
||||||
|
// $Id: _parse_propfind.php,v 1.4 2006/10/10 11:53:17 hholzgra Exp $
|
||||||
|
//
|
||||||
|
|
||||||
|
/**
|
||||||
|
* helper class for parsing PROPFIND request bodies
|
||||||
|
*
|
||||||
|
* @package HTTP_WebDAV_Server
|
||||||
|
* @author Hartmut Holzgraefe <hholzgra@php.net>
|
||||||
|
* @version @package-version@
|
||||||
|
*/
|
||||||
|
class _parse_propfind
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* success state flag
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
var $success = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* found properties are collected here
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
var $props = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* found (CalDAV) filters are collected here
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
var $filters = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* found other tags, eg. CalDAV calendar-multiget href's
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
var $other = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* what we are currently parsing: props or filters
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $use = 'props';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Root tag, usually 'propfind' for PROPFIND, but can be eg. 'calendar-query' or 'calendar-multiget' for CalDAV REPORT
|
||||||
|
*
|
||||||
|
* @var array with keys 'name' and 'ns'
|
||||||
|
*/
|
||||||
|
var $root;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* internal tag nesting depth counter
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $depth = 0;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function _parse_propfind($path)
|
||||||
|
{
|
||||||
|
// success state flag
|
||||||
|
$this->success = true;
|
||||||
|
|
||||||
|
// property storage array
|
||||||
|
$this->props = array();
|
||||||
|
|
||||||
|
// internal tag depth counter
|
||||||
|
$this->depth = 0;
|
||||||
|
|
||||||
|
// remember if any input was parsed
|
||||||
|
$had_input = false;
|
||||||
|
|
||||||
|
// open input stream
|
||||||
|
$f_in = fopen($path, "r");
|
||||||
|
if (!$f_in) {
|
||||||
|
$this->success = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// create XML parser
|
||||||
|
$xml_parser = xml_parser_create_ns("UTF-8", " ");
|
||||||
|
|
||||||
|
// set tag and data handlers
|
||||||
|
xml_set_element_handler($xml_parser,
|
||||||
|
array(&$this, "_startElement"),
|
||||||
|
array(&$this, "_endElement"));
|
||||||
|
|
||||||
|
xml_set_character_data_handler($xml_parser,
|
||||||
|
array(&$this,'_charData')
|
||||||
|
);
|
||||||
|
|
||||||
|
// we want a case sensitive parser
|
||||||
|
xml_parser_set_option($xml_parser,
|
||||||
|
XML_OPTION_CASE_FOLDING, false);
|
||||||
|
|
||||||
|
|
||||||
|
// parse input
|
||||||
|
while ($this->success && !feof($f_in)) {
|
||||||
|
$line = fgets($f_in);
|
||||||
|
if (is_string($line)) {
|
||||||
|
$had_input = true;
|
||||||
|
$this->success &= xml_parse($xml_parser, $line, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// finish parsing
|
||||||
|
if ($had_input) {
|
||||||
|
$this->success &= xml_parse($xml_parser, "", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// free parser
|
||||||
|
xml_parser_free($xml_parser);
|
||||||
|
|
||||||
|
// close input stream
|
||||||
|
fclose($f_in);
|
||||||
|
|
||||||
|
// if no input was parsed it was a request
|
||||||
|
if(!count($this->props)) $this->props = "all"; // default
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* start tag handler
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @param resource parser
|
||||||
|
* @param string tag name
|
||||||
|
* @param array tag attributes
|
||||||
|
*/
|
||||||
|
function _startElement($parser, $name, $attrs)
|
||||||
|
{
|
||||||
|
// name space handling
|
||||||
|
if (strstr($name, " ")) {
|
||||||
|
list($ns, $tag) = explode(" ", $name);
|
||||||
|
if ($ns == "")
|
||||||
|
$this->success = false;
|
||||||
|
} else {
|
||||||
|
$ns = "";
|
||||||
|
$tag = $name;
|
||||||
|
}
|
||||||
|
|
||||||
|
// record root tag
|
||||||
|
if ($this->depth == 0) {
|
||||||
|
$this->root = array('name' => $tag, 'xmlns' => $ns);
|
||||||
|
}
|
||||||
|
|
||||||
|
// special tags at level 1: <allprop> and <propname>
|
||||||
|
if ($this->depth == 1) {
|
||||||
|
$this->use = 'props';
|
||||||
|
switch ($tag)
|
||||||
|
{
|
||||||
|
case "allprop":
|
||||||
|
$this->props = "all";
|
||||||
|
break;
|
||||||
|
case "propname":
|
||||||
|
$this->props = "names";
|
||||||
|
break;
|
||||||
|
case 'prop':
|
||||||
|
break;
|
||||||
|
case 'filter':
|
||||||
|
$this->use = 'filters';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$this->use = 'other';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// requested properties are found at level 2
|
||||||
|
// CalDAV filters can be at deeper levels too and we need the attrs, same for other tags (eg. multiget href's)
|
||||||
|
if ($this->depth == 2 || $this->use == 'filters' && $this->depth >= 2 || $this->use == 'other') {
|
||||||
|
$prop = array("name" => $tag);
|
||||||
|
if ($ns)
|
||||||
|
$prop["xmlns"] = $ns;
|
||||||
|
if ($this->use != 'props') {
|
||||||
|
$prop['attrs'] = $attrs;
|
||||||
|
$prop['depth'] = $this->depth;
|
||||||
|
}
|
||||||
|
// this can happen if we have allprop and prop in one propfind:
|
||||||
|
// <allprop /><prop><blah /></prop>, eg. blah is not automatic returned by allprop
|
||||||
|
if (!is_array($this->{$this->use}) && $this->{$this->use}) $this->{$this->use} = array($this->{$this->use});
|
||||||
|
$this->{$this->use}[] = $prop;
|
||||||
|
}
|
||||||
|
|
||||||
|
// increment depth count
|
||||||
|
$this->depth++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* end tag handler
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @param resource parser
|
||||||
|
* @param string tag name
|
||||||
|
*/
|
||||||
|
function _endElement($parser, $name)
|
||||||
|
{
|
||||||
|
// here we only need to decrement the depth count
|
||||||
|
$this->depth--;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* char data handler for non prop tags, eg. href's in CalDAV multiget, or filter contents
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @param resource parser
|
||||||
|
* @param string character data
|
||||||
|
*/
|
||||||
|
function _charData($parser, $data)
|
||||||
|
{
|
||||||
|
if ($this->use != 'props' && ($n = count($this->{$this->use})) && ($data = trim($data))) {
|
||||||
|
$this->{$this->use}[$n-1]['data'] = $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
223
egw-pear/HTTP/WebDAV/Tools/_parse_proppatch.php
Normal file
223
egw-pear/HTTP/WebDAV/Tools/_parse_proppatch.php
Normal file
@ -0,0 +1,223 @@
|
|||||||
|
<?php
|
||||||
|
//
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | PHP Version 4 |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | Copyright (c) 1997-2003 The PHP Group |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | This source file is subject to version 2.02 of the PHP license, |
|
||||||
|
// | that is bundled with this package in the file LICENSE, and is |
|
||||||
|
// | available at through the world-wide-web at |
|
||||||
|
// | http://www.php.net/license/2_02.txt. |
|
||||||
|
// | If you did not receive a copy of the PHP license and are unable to |
|
||||||
|
// | obtain it through the world-wide-web, please send a note to |
|
||||||
|
// | license@php.net so we can mail you a copy immediately. |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | Authors: Hartmut Holzgraefe <hholzgra@php.net> |
|
||||||
|
// | Christian Stocker <chregu@bitflux.ch> |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
//
|
||||||
|
// $Id: _parse_proppatch.php,v 1.6 2006/10/10 11:53:17 hholzgra Exp $
|
||||||
|
//
|
||||||
|
|
||||||
|
/**
|
||||||
|
* helper class for parsing PROPPATCH request bodies
|
||||||
|
*
|
||||||
|
* @package HTTP_WebDAV_Server
|
||||||
|
* @author Hartmut Holzgraefe <hholzgra@php.net>
|
||||||
|
* @version @package-version@
|
||||||
|
*/
|
||||||
|
class _parse_proppatch
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @var
|
||||||
|
* @access
|
||||||
|
*/
|
||||||
|
var $success;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @var
|
||||||
|
* @access
|
||||||
|
*/
|
||||||
|
var $props;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @var
|
||||||
|
* @access
|
||||||
|
*/
|
||||||
|
var $depth;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @var
|
||||||
|
* @access
|
||||||
|
*/
|
||||||
|
var $mode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @var
|
||||||
|
* @access
|
||||||
|
*/
|
||||||
|
var $current;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor
|
||||||
|
*
|
||||||
|
* @param string path of input stream
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function _parse_proppatch($path)
|
||||||
|
{
|
||||||
|
$this->success = true;
|
||||||
|
|
||||||
|
$this->depth = 0;
|
||||||
|
$this->props = array();
|
||||||
|
$had_input = false;
|
||||||
|
|
||||||
|
$f_in = fopen($path, "r");
|
||||||
|
if (!$f_in) {
|
||||||
|
$this->success = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$xml_parser = xml_parser_create_ns("UTF-8", " ");
|
||||||
|
|
||||||
|
xml_set_element_handler($xml_parser,
|
||||||
|
array(&$this, "_startElement"),
|
||||||
|
array(&$this, "_endElement"));
|
||||||
|
|
||||||
|
xml_set_character_data_handler($xml_parser,
|
||||||
|
array(&$this, "_data"));
|
||||||
|
|
||||||
|
xml_parser_set_option($xml_parser,
|
||||||
|
XML_OPTION_CASE_FOLDING, false);
|
||||||
|
|
||||||
|
while($this->success && !feof($f_in)) {
|
||||||
|
$line = fgets($f_in);
|
||||||
|
if (is_string($line)) {
|
||||||
|
$had_input = true;
|
||||||
|
$this->success &= xml_parse($xml_parser, $line, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($had_input) {
|
||||||
|
$this->success &= xml_parse($xml_parser, "", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
xml_parser_free($xml_parser);
|
||||||
|
|
||||||
|
fclose($f_in);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* tag start handler
|
||||||
|
*
|
||||||
|
* @param resource parser
|
||||||
|
* @param string tag name
|
||||||
|
* @param array tag attributes
|
||||||
|
* @return void
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _startElement($parser, $name, $attrs)
|
||||||
|
{
|
||||||
|
if (strstr($name, " ")) {
|
||||||
|
list($ns, $tag) = explode(" ", $name);
|
||||||
|
if ($ns == "")
|
||||||
|
$this->success = false;
|
||||||
|
} else {
|
||||||
|
$ns = "";
|
||||||
|
$tag = $name;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->depth == 1) {
|
||||||
|
$this->mode = $tag;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->depth == 3) {
|
||||||
|
$prop = array("name" => $tag);
|
||||||
|
$this->current = array("name" => $tag, "ns" => $ns, "status"=> 200);
|
||||||
|
if ($this->mode == "set") {
|
||||||
|
$this->current["val"] = ""; // default set val
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->depth >= 4) {
|
||||||
|
$this->current["val"] .= "<$tag";
|
||||||
|
if (isset($attr)) {
|
||||||
|
foreach ($attr as $key => $val) {
|
||||||
|
$this->current["val"] .= ' '.$key.'="'.str_replace('"','"', $val).'"';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->current["val"] .= ">";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$this->depth++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* tag end handler
|
||||||
|
*
|
||||||
|
* @param resource parser
|
||||||
|
* @param string tag name
|
||||||
|
* @return void
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _endElement($parser, $name)
|
||||||
|
{
|
||||||
|
if (strstr($name, " ")) {
|
||||||
|
list($ns, $tag) = explode(" ", $name);
|
||||||
|
if ($ns == "")
|
||||||
|
$this->success = false;
|
||||||
|
} else {
|
||||||
|
$ns = "";
|
||||||
|
$tag = $name;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->depth--;
|
||||||
|
|
||||||
|
if ($this->depth >= 4) {
|
||||||
|
$this->current["val"] .= "</$tag>";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->depth == 3) {
|
||||||
|
if (isset($this->current)) {
|
||||||
|
$this->props[] = $this->current;
|
||||||
|
unset($this->current);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* input data handler
|
||||||
|
*
|
||||||
|
* @param resource parser
|
||||||
|
* @param string data
|
||||||
|
* @return void
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _data($parser, $data)
|
||||||
|
{
|
||||||
|
if (isset($this->current)) {
|
||||||
|
$this->current["val"] .= $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Local variables:
|
||||||
|
* tab-width: 4
|
||||||
|
* c-basic-offset: 4
|
||||||
|
* indent-tabs-mode:nil
|
||||||
|
* End:
|
||||||
|
*/
|
824
egw-pear/Log.php
Normal file
824
egw-pear/Log.php
Normal file
@ -0,0 +1,824 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* $Header: /repository/pear/Log/Log.php,v 1.64 2006/10/08 23:03:15 jon Exp $
|
||||||
|
* $Horde: horde/lib/Log.php,v 1.15 2000/06/29 23:39:45 jon Exp $
|
||||||
|
*
|
||||||
|
* @version $Revision: 1.64 $
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
|
||||||
|
define('PEAR_LOG_EMERG', 0); /** System is unusable */
|
||||||
|
define('PEAR_LOG_ALERT', 1); /** Immediate action required */
|
||||||
|
define('PEAR_LOG_CRIT', 2); /** Critical conditions */
|
||||||
|
define('PEAR_LOG_ERR', 3); /** Error conditions */
|
||||||
|
define('PEAR_LOG_WARNING', 4); /** Warning conditions */
|
||||||
|
define('PEAR_LOG_NOTICE', 5); /** Normal but significant */
|
||||||
|
define('PEAR_LOG_INFO', 6); /** Informational */
|
||||||
|
define('PEAR_LOG_DEBUG', 7); /** Debug-level messages */
|
||||||
|
|
||||||
|
define('PEAR_LOG_ALL', bindec('11111111')); /** All messages */
|
||||||
|
define('PEAR_LOG_NONE', bindec('00000000')); /** No message */
|
||||||
|
|
||||||
|
/* Log types for PHP's native error_log() function. */
|
||||||
|
define('PEAR_LOG_TYPE_SYSTEM', 0); /** Use PHP's system logger */
|
||||||
|
define('PEAR_LOG_TYPE_MAIL', 1); /** Use PHP's mail() function */
|
||||||
|
define('PEAR_LOG_TYPE_DEBUG', 2); /** Use PHP's debugging connection */
|
||||||
|
define('PEAR_LOG_TYPE_FILE', 3); /** Append to a file */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Log:: class implements both an abstraction for various logging
|
||||||
|
* mechanisms and the Subject end of a Subject-Observer pattern.
|
||||||
|
*
|
||||||
|
* @author Chuck Hagenbuch <chuck@horde.org>
|
||||||
|
* @author Jon Parise <jon@php.net>
|
||||||
|
* @since Horde 1.3
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
class Log
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Indicates whether or not the log can been opened / connected.
|
||||||
|
*
|
||||||
|
* @var boolean
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_opened = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instance-specific unique identification number.
|
||||||
|
*
|
||||||
|
* @var integer
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_id = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The label that uniquely identifies this set of log messages.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_ident = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default priority to use when logging an event.
|
||||||
|
*
|
||||||
|
* @var integer
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_priority = PEAR_LOG_INFO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The bitmask of allowed log levels.
|
||||||
|
*
|
||||||
|
* @var integer
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_mask = PEAR_LOG_ALL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holds all Log_observer objects that wish to be notified of new messages.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_listeners = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maps canonical format keys to position arguments for use in building
|
||||||
|
* "line format" strings.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_formatMap = array('%{timestamp}' => '%1$s',
|
||||||
|
'%{ident}' => '%2$s',
|
||||||
|
'%{priority}' => '%3$s',
|
||||||
|
'%{message}' => '%4$s',
|
||||||
|
'%{file}' => '%5$s',
|
||||||
|
'%{line}' => '%6$s',
|
||||||
|
'%{function}' => '%7$s',
|
||||||
|
'%\{' => '%%{');
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempts to return a concrete Log instance of type $handler.
|
||||||
|
*
|
||||||
|
* @param string $handler The type of concrete Log subclass to return.
|
||||||
|
* Attempt to dynamically include the code for
|
||||||
|
* this subclass. Currently, valid values are
|
||||||
|
* 'console', 'syslog', 'sql', 'file', and 'mcal'.
|
||||||
|
*
|
||||||
|
* @param string $name The name of the actually log file, table, or
|
||||||
|
* other specific store to use. Defaults to an
|
||||||
|
* empty string, with which the subclass will
|
||||||
|
* attempt to do something intelligent.
|
||||||
|
*
|
||||||
|
* @param string $ident The identity reported to the log system.
|
||||||
|
*
|
||||||
|
* @param array $conf A hash containing any additional configuration
|
||||||
|
* information that a subclass might need.
|
||||||
|
*
|
||||||
|
* @param int $level Log messages up to and including this level.
|
||||||
|
*
|
||||||
|
* @return object Log The newly created concrete Log instance, or
|
||||||
|
* null on an error.
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.0
|
||||||
|
*/
|
||||||
|
function &factory($handler, $name = '', $ident = '', $conf = array(),
|
||||||
|
$level = PEAR_LOG_DEBUG)
|
||||||
|
{
|
||||||
|
$handler = strtolower($handler);
|
||||||
|
$class = 'Log_' . $handler;
|
||||||
|
$classfile = 'Log/' . $handler . '.php';
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Attempt to include our version of the named class, but don't treat
|
||||||
|
* a failure as fatal. The caller may have already included their own
|
||||||
|
* version of the named class.
|
||||||
|
*/
|
||||||
|
if (!class_exists($class)) {
|
||||||
|
include_once $classfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the class exists, return a new instance of it. */
|
||||||
|
if (class_exists($class)) {
|
||||||
|
$obj = new $class($name, $ident, $conf, $level);
|
||||||
|
return $obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
$null = null;
|
||||||
|
return $null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempts to return a reference to a concrete Log instance of type
|
||||||
|
* $handler, only creating a new instance if no log instance with the same
|
||||||
|
* parameters currently exists.
|
||||||
|
*
|
||||||
|
* You should use this if there are multiple places you might create a
|
||||||
|
* logger, you don't want to create multiple loggers, and you don't want to
|
||||||
|
* check for the existance of one each time. The singleton pattern does all
|
||||||
|
* the checking work for you.
|
||||||
|
*
|
||||||
|
* <b>You MUST call this method with the $var = &Log::singleton() syntax.
|
||||||
|
* Without the ampersand (&) in front of the method name, you will not get
|
||||||
|
* a reference, you will get a copy.</b>
|
||||||
|
*
|
||||||
|
* @param string $handler The type of concrete Log subclass to return.
|
||||||
|
* Attempt to dynamically include the code for
|
||||||
|
* this subclass. Currently, valid values are
|
||||||
|
* 'console', 'syslog', 'sql', 'file', and 'mcal'.
|
||||||
|
*
|
||||||
|
* @param string $name The name of the actually log file, table, or
|
||||||
|
* other specific store to use. Defaults to an
|
||||||
|
* empty string, with which the subclass will
|
||||||
|
* attempt to do something intelligent.
|
||||||
|
*
|
||||||
|
* @param string $ident The identity reported to the log system.
|
||||||
|
*
|
||||||
|
* @param array $conf A hash containing any additional configuration
|
||||||
|
* information that a subclass might need.
|
||||||
|
*
|
||||||
|
* @param int $level Log messages up to and including this level.
|
||||||
|
*
|
||||||
|
* @return object Log The newly created concrete Log instance, or
|
||||||
|
* null on an error.
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.0
|
||||||
|
*/
|
||||||
|
function &singleton($handler, $name = '', $ident = '', $conf = array(),
|
||||||
|
$level = PEAR_LOG_DEBUG)
|
||||||
|
{
|
||||||
|
static $instances;
|
||||||
|
if (!isset($instances)) $instances = array();
|
||||||
|
|
||||||
|
$signature = serialize(array($handler, $name, $ident, $conf, $level));
|
||||||
|
if (!isset($instances[$signature])) {
|
||||||
|
$instances[$signature] = &Log::factory($handler, $name, $ident,
|
||||||
|
$conf, $level);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $instances[$signature];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract implementation of the open() method.
|
||||||
|
* @since Log 1.0
|
||||||
|
*/
|
||||||
|
function open()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract implementation of the close() method.
|
||||||
|
* @since Log 1.0
|
||||||
|
*/
|
||||||
|
function close()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract implementation of the flush() method.
|
||||||
|
* @since Log 1.8.2
|
||||||
|
*/
|
||||||
|
function flush()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract implementation of the log() method.
|
||||||
|
* @since Log 1.0
|
||||||
|
*/
|
||||||
|
function log($message, $priority = null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A convenience function for logging a emergency event. It will log a
|
||||||
|
* message at the PEAR_LOG_EMERG log level.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message
|
||||||
|
* to log.
|
||||||
|
*
|
||||||
|
* @return boolean True if the message was successfully logged.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.7.0
|
||||||
|
*/
|
||||||
|
function emerg($message)
|
||||||
|
{
|
||||||
|
return $this->log($message, PEAR_LOG_EMERG);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A convenience function for logging an alert event. It will log a
|
||||||
|
* message at the PEAR_LOG_ALERT log level.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message
|
||||||
|
* to log.
|
||||||
|
*
|
||||||
|
* @return boolean True if the message was successfully logged.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.7.0
|
||||||
|
*/
|
||||||
|
function alert($message)
|
||||||
|
{
|
||||||
|
return $this->log($message, PEAR_LOG_ALERT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A convenience function for logging a critical event. It will log a
|
||||||
|
* message at the PEAR_LOG_CRIT log level.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message
|
||||||
|
* to log.
|
||||||
|
*
|
||||||
|
* @return boolean True if the message was successfully logged.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.7.0
|
||||||
|
*/
|
||||||
|
function crit($message)
|
||||||
|
{
|
||||||
|
return $this->log($message, PEAR_LOG_CRIT);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A convenience function for logging a error event. It will log a
|
||||||
|
* message at the PEAR_LOG_ERR log level.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message
|
||||||
|
* to log.
|
||||||
|
*
|
||||||
|
* @return boolean True if the message was successfully logged.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.7.0
|
||||||
|
*/
|
||||||
|
function err($message)
|
||||||
|
{
|
||||||
|
return $this->log($message, PEAR_LOG_ERR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A convenience function for logging a warning event. It will log a
|
||||||
|
* message at the PEAR_LOG_WARNING log level.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message
|
||||||
|
* to log.
|
||||||
|
*
|
||||||
|
* @return boolean True if the message was successfully logged.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.7.0
|
||||||
|
*/
|
||||||
|
function warning($message)
|
||||||
|
{
|
||||||
|
return $this->log($message, PEAR_LOG_WARNING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A convenience function for logging a notice event. It will log a
|
||||||
|
* message at the PEAR_LOG_NOTICE log level.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message
|
||||||
|
* to log.
|
||||||
|
*
|
||||||
|
* @return boolean True if the message was successfully logged.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.7.0
|
||||||
|
*/
|
||||||
|
function notice($message)
|
||||||
|
{
|
||||||
|
return $this->log($message, PEAR_LOG_NOTICE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A convenience function for logging a information event. It will log a
|
||||||
|
* message at the PEAR_LOG_INFO log level.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message
|
||||||
|
* to log.
|
||||||
|
*
|
||||||
|
* @return boolean True if the message was successfully logged.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.7.0
|
||||||
|
*/
|
||||||
|
function info($message)
|
||||||
|
{
|
||||||
|
return $this->log($message, PEAR_LOG_INFO);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A convenience function for logging a debug event. It will log a
|
||||||
|
* message at the PEAR_LOG_DEBUG log level.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message
|
||||||
|
* to log.
|
||||||
|
*
|
||||||
|
* @return boolean True if the message was successfully logged.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.7.0
|
||||||
|
*/
|
||||||
|
function debug($message)
|
||||||
|
{
|
||||||
|
return $this->log($message, PEAR_LOG_DEBUG);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the string representation of the message data.
|
||||||
|
*
|
||||||
|
* If $message is an object, _extractMessage() will attempt to extract
|
||||||
|
* the message text using a known method (such as a PEAR_Error object's
|
||||||
|
* getMessage() method). If a known method, cannot be found, the
|
||||||
|
* serialized representation of the object will be returned.
|
||||||
|
*
|
||||||
|
* If the message data is already a string, it will be returned unchanged.
|
||||||
|
*
|
||||||
|
* @param mixed $message The original message data. This may be a
|
||||||
|
* string or any object.
|
||||||
|
*
|
||||||
|
* @return string The string representation of the message.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _extractMessage($message)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* If we've been given an object, attempt to extract the message using
|
||||||
|
* a known method. If we can't find such a method, default to the
|
||||||
|
* "human-readable" version of the object.
|
||||||
|
*
|
||||||
|
* We also use the human-readable format for arrays.
|
||||||
|
*/
|
||||||
|
if (is_object($message)) {
|
||||||
|
if (method_exists($message, 'getmessage')) {
|
||||||
|
$message = $message->getMessage();
|
||||||
|
} else if (method_exists($message, 'tostring')) {
|
||||||
|
$message = $message->toString();
|
||||||
|
} else if (method_exists($message, '__tostring')) {
|
||||||
|
if (version_compare(PHP_VERSION, '5.0.0', 'ge')) {
|
||||||
|
$message = (string)$message;
|
||||||
|
} else {
|
||||||
|
$message = $message->__toString();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$message = print_r($message, true);
|
||||||
|
}
|
||||||
|
} else if (is_array($message)) {
|
||||||
|
if (isset($message['message'])) {
|
||||||
|
$message = $message['message'];
|
||||||
|
} else {
|
||||||
|
$message = print_r($message, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Otherwise, we assume the message is a string. */
|
||||||
|
return $message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Using debug_backtrace(), returns the file, line, and enclosing function
|
||||||
|
* name of the source code context from which log() was invoked.
|
||||||
|
*
|
||||||
|
* @param int $depth The initial number of frames we should step
|
||||||
|
* back into the trace.
|
||||||
|
*
|
||||||
|
* @return array Array containing three strings: the filename, the line,
|
||||||
|
* and the function name from which log() was called.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @since Log 1.9.4
|
||||||
|
*/
|
||||||
|
function _getBacktraceVars($depth)
|
||||||
|
{
|
||||||
|
/* Start by generating a backtrace from the current call (here). */
|
||||||
|
$backtrace = debug_backtrace();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we were ultimately invoked by the composite handler, we need to
|
||||||
|
* increase our depth one additional level to compensate.
|
||||||
|
*/
|
||||||
|
if (strcasecmp(@$backtrace[$depth+1]['class'], 'Log_composite') == 0) {
|
||||||
|
$depth++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We're interested in the frame which invoked the log() function, so
|
||||||
|
* we need to walk back some number of frames into the backtrace. The
|
||||||
|
* $depth parameter tells us where to start looking. We go one step
|
||||||
|
* further back to find the name of the encapsulating function from
|
||||||
|
* which log() was called.
|
||||||
|
*/
|
||||||
|
$file = @$backtrace[$depth]['file'];
|
||||||
|
$line = @$backtrace[$depth]['line'];
|
||||||
|
$func = @$backtrace[$depth + 1]['function'];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* However, if log() was called from one of our "shortcut" functions,
|
||||||
|
* we're going to need to go back an additional step.
|
||||||
|
*/
|
||||||
|
if (in_array($func, array('emerg', 'alert', 'crit', 'err', 'warning',
|
||||||
|
'notice', 'info', 'debug'))) {
|
||||||
|
$file = @$backtrace[$depth + 1]['file'];
|
||||||
|
$line = @$backtrace[$depth + 1]['line'];
|
||||||
|
$func = @$backtrace[$depth + 2]['function'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we couldn't extract a function name (perhaps because we were
|
||||||
|
* executed from the "main" context), provide a default value.
|
||||||
|
*/
|
||||||
|
if (is_null($func)) {
|
||||||
|
$func = '(none)';
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return a 3-tuple containing (file, line, function). */
|
||||||
|
return array($file, $line, $func);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Produces a formatted log line based on a format string and a set of
|
||||||
|
* variables representing the current log record and state.
|
||||||
|
*
|
||||||
|
* @return string Formatted log string.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @since Log 1.9.4
|
||||||
|
*/
|
||||||
|
function _format($format, $timestamp, $priority, $message)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* If the format string references any of the backtrace-driven
|
||||||
|
* variables (%5, %6, %7), generate the backtrace and fetch them.
|
||||||
|
*/
|
||||||
|
if (strpos($format, '%5') || strpos($format, '%6') || strpos($format, '%7')) {
|
||||||
|
list($file, $line, $func) = $this->_getBacktraceVars(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Build the formatted string. We use the sprintf() function's
|
||||||
|
* "argument swapping" capability to dynamically select and position
|
||||||
|
* the variables which will ultimately appear in the log string.
|
||||||
|
*/
|
||||||
|
return sprintf($format,
|
||||||
|
$timestamp,
|
||||||
|
$this->_ident,
|
||||||
|
$this->priorityToString($priority),
|
||||||
|
$message,
|
||||||
|
isset($file) ? $file : '',
|
||||||
|
isset($line) ? $line : '',
|
||||||
|
isset($func) ? $func : '');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the string representation of a PEAR_LOG_* integer constant.
|
||||||
|
*
|
||||||
|
* @param int $priority A PEAR_LOG_* integer constant.
|
||||||
|
*
|
||||||
|
* @return string The string representation of $level.
|
||||||
|
*
|
||||||
|
* @since Log 1.0
|
||||||
|
*/
|
||||||
|
function priorityToString($priority)
|
||||||
|
{
|
||||||
|
$levels = array(
|
||||||
|
PEAR_LOG_EMERG => 'emergency',
|
||||||
|
PEAR_LOG_ALERT => 'alert',
|
||||||
|
PEAR_LOG_CRIT => 'critical',
|
||||||
|
PEAR_LOG_ERR => 'error',
|
||||||
|
PEAR_LOG_WARNING => 'warning',
|
||||||
|
PEAR_LOG_NOTICE => 'notice',
|
||||||
|
PEAR_LOG_INFO => 'info',
|
||||||
|
PEAR_LOG_DEBUG => 'debug'
|
||||||
|
);
|
||||||
|
|
||||||
|
return $levels[$priority];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the the PEAR_LOG_* integer constant for the given string
|
||||||
|
* representation of a priority name. This function performs a
|
||||||
|
* case-insensitive search.
|
||||||
|
*
|
||||||
|
* @param string $name String containing a priority name.
|
||||||
|
*
|
||||||
|
* @return string The PEAR_LOG_* integer contstant corresponding
|
||||||
|
* the the specified priority name.
|
||||||
|
*
|
||||||
|
* @since Log 1.9.0
|
||||||
|
*/
|
||||||
|
function stringToPriority($name)
|
||||||
|
{
|
||||||
|
$levels = array(
|
||||||
|
'emergency' => PEAR_LOG_EMERG,
|
||||||
|
'alert' => PEAR_LOG_ALERT,
|
||||||
|
'critical' => PEAR_LOG_CRIT,
|
||||||
|
'error' => PEAR_LOG_ERR,
|
||||||
|
'warning' => PEAR_LOG_WARNING,
|
||||||
|
'notice' => PEAR_LOG_NOTICE,
|
||||||
|
'info' => PEAR_LOG_INFO,
|
||||||
|
'debug' => PEAR_LOG_DEBUG
|
||||||
|
);
|
||||||
|
|
||||||
|
return $levels[strtolower($name)];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculate the log mask for the given priority.
|
||||||
|
*
|
||||||
|
* This method may be called statically.
|
||||||
|
*
|
||||||
|
* @param integer $priority The priority whose mask will be calculated.
|
||||||
|
*
|
||||||
|
* @return integer The calculated log mask.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.7.0
|
||||||
|
*/
|
||||||
|
function MASK($priority)
|
||||||
|
{
|
||||||
|
return (1 << $priority);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculate the log mask for all priorities up to the given priority.
|
||||||
|
*
|
||||||
|
* This method may be called statically.
|
||||||
|
*
|
||||||
|
* @param integer $priority The maximum priority covered by this mask.
|
||||||
|
*
|
||||||
|
* @return integer The resulting log mask.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.7.0
|
||||||
|
*
|
||||||
|
* @deprecated deprecated since Log 1.9.4; use Log::MAX() instead
|
||||||
|
*/
|
||||||
|
function UPTO($priority)
|
||||||
|
{
|
||||||
|
return Log::MAX($priority);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculate the log mask for all priorities greater than or equal to the
|
||||||
|
* given priority. In other words, $priority will be the lowest priority
|
||||||
|
* matched by the resulting mask.
|
||||||
|
*
|
||||||
|
* This method may be called statically.
|
||||||
|
*
|
||||||
|
* @param integer $priority The minimum priority covered by this mask.
|
||||||
|
*
|
||||||
|
* @return integer The resulting log mask.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.9.4
|
||||||
|
*/
|
||||||
|
function MIN($priority)
|
||||||
|
{
|
||||||
|
return PEAR_LOG_ALL ^ ((1 << $priority) - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculate the log mask for all priorities less than or equal to the
|
||||||
|
* given priority. In other words, $priority will be the highests priority
|
||||||
|
* matched by the resulting mask.
|
||||||
|
*
|
||||||
|
* This method may be called statically.
|
||||||
|
*
|
||||||
|
* @param integer $priority The maximum priority covered by this mask.
|
||||||
|
*
|
||||||
|
* @return integer The resulting log mask.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.9.4
|
||||||
|
*/
|
||||||
|
function MAX($priority)
|
||||||
|
{
|
||||||
|
return ((1 << ($priority + 1)) - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set and return the level mask for the current Log instance.
|
||||||
|
*
|
||||||
|
* @param integer $mask A bitwise mask of log levels.
|
||||||
|
*
|
||||||
|
* @return integer The current level mask.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.7.0
|
||||||
|
*/
|
||||||
|
function setMask($mask)
|
||||||
|
{
|
||||||
|
$this->_mask = $mask;
|
||||||
|
|
||||||
|
return $this->_mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the current level mask.
|
||||||
|
*
|
||||||
|
* @return interger The current level mask.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.7.0
|
||||||
|
*/
|
||||||
|
function getMask()
|
||||||
|
{
|
||||||
|
return $this->_mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the given priority is included in the current level mask.
|
||||||
|
*
|
||||||
|
* @param integer $priority The priority to check.
|
||||||
|
*
|
||||||
|
* @return boolean True if the given priority is included in the current
|
||||||
|
* log mask.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @since Log 1.7.0
|
||||||
|
*/
|
||||||
|
function _isMasked($priority)
|
||||||
|
{
|
||||||
|
return (Log::MASK($priority) & $this->_mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the current default priority.
|
||||||
|
*
|
||||||
|
* @return integer The current default priority.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.8.4
|
||||||
|
*/
|
||||||
|
function getPriority()
|
||||||
|
{
|
||||||
|
return $this->_priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the default priority to the specified value.
|
||||||
|
*
|
||||||
|
* @param integer $priority The new default priority.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.8.4
|
||||||
|
*/
|
||||||
|
function setPriority($priority)
|
||||||
|
{
|
||||||
|
$this->_priority = $priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a Log_observer instance to the list of observers that are listening
|
||||||
|
* for messages emitted by this Log instance.
|
||||||
|
*
|
||||||
|
* @param object $observer The Log_observer instance to attach as a
|
||||||
|
* listener.
|
||||||
|
*
|
||||||
|
* @param boolean True if the observer is successfully attached.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.0
|
||||||
|
*/
|
||||||
|
function attach(&$observer)
|
||||||
|
{
|
||||||
|
if (!is_a($observer, 'Log_observer')) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_listeners[$observer->_id] = &$observer;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a Log_observer instance from the list of observers.
|
||||||
|
*
|
||||||
|
* @param object $observer The Log_observer instance to detach from
|
||||||
|
* the list of listeners.
|
||||||
|
*
|
||||||
|
* @param boolean True if the observer is successfully detached.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.0
|
||||||
|
*/
|
||||||
|
function detach($observer)
|
||||||
|
{
|
||||||
|
if (!is_a($observer, 'Log_observer') ||
|
||||||
|
!isset($this->_listeners[$observer->_id])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($this->_listeners[$observer->_id]);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Informs each registered observer instance that a new message has been
|
||||||
|
* logged.
|
||||||
|
*
|
||||||
|
* @param array $event A hash describing the log event.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _announce($event)
|
||||||
|
{
|
||||||
|
foreach ($this->_listeners as $id => $listener) {
|
||||||
|
if ($event['priority'] <= $this->_listeners[$id]->_priority) {
|
||||||
|
$this->_listeners[$id]->notify($event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates whether this is a composite class.
|
||||||
|
*
|
||||||
|
* @return boolean True if this is a composite class.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.0
|
||||||
|
*/
|
||||||
|
function isComposite()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets this Log instance's identification string.
|
||||||
|
*
|
||||||
|
* @param string $ident The new identification string.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.6.3
|
||||||
|
*/
|
||||||
|
function setIdent($ident)
|
||||||
|
{
|
||||||
|
$this->_ident = $ident;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the current identification string.
|
||||||
|
*
|
||||||
|
* @return string The current Log instance's identification string.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.6.3
|
||||||
|
*/
|
||||||
|
function getIdent()
|
||||||
|
{
|
||||||
|
return $this->_ident;
|
||||||
|
}
|
||||||
|
}
|
231
egw-pear/Log/composite.php
Normal file
231
egw-pear/Log/composite.php
Normal file
@ -0,0 +1,231 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* $Header: /repository/pear/Log/Log/composite.php,v 1.28 2006/06/29 07:12:34 jon Exp $
|
||||||
|
* $Horde: horde/lib/Log/composite.php,v 1.2 2000/06/28 21:36:13 jon Exp $
|
||||||
|
*
|
||||||
|
* @version $Revision: 1.28 $
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Log_composite:: class implements a Composite pattern which
|
||||||
|
* allows multiple Log implementations to receive the same events.
|
||||||
|
*
|
||||||
|
* @author Chuck Hagenbuch <chuck@horde.org>
|
||||||
|
* @author Jon Parise <jon@php.net>
|
||||||
|
*
|
||||||
|
* @since Horde 1.3
|
||||||
|
* @since Log 1.0
|
||||||
|
* @package Log
|
||||||
|
*
|
||||||
|
* @example composite.php Using the composite handler.
|
||||||
|
*/
|
||||||
|
class Log_composite extends Log
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Array holding all of the Log instances to which log events should be
|
||||||
|
* sent.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_children = array();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new composite Log object.
|
||||||
|
*
|
||||||
|
* @param boolean $name This parameter is ignored.
|
||||||
|
* @param boolean $ident This parameter is ignored.
|
||||||
|
* @param boolean $conf This parameter is ignored.
|
||||||
|
* @param boolean $level This parameter is ignored.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function Log_composite($name, $ident = '', $conf = array(),
|
||||||
|
$level = PEAR_LOG_DEBUG)
|
||||||
|
{
|
||||||
|
$this->_ident = $ident;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens all of the child instances.
|
||||||
|
*
|
||||||
|
* @return True if all of the child instances were successfully opened.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function open()
|
||||||
|
{
|
||||||
|
/* Attempt to open each of our children. */
|
||||||
|
$this->_opened = true;
|
||||||
|
foreach ($this->_children as $id => $child) {
|
||||||
|
$this->_opened &= $this->_children[$id]->open();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If all children were opened, return success. */
|
||||||
|
return $this->_opened;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes all of the child instances.
|
||||||
|
*
|
||||||
|
* @return True if all of the child instances were successfully closed.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function close()
|
||||||
|
{
|
||||||
|
/* Attempt to close each of our children. */
|
||||||
|
$closed = true;
|
||||||
|
foreach ($this->_children as $id => $child) {
|
||||||
|
$closed &= $this->_children[$id]->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Track the _opened state for consistency. */
|
||||||
|
$this->_opened = false;
|
||||||
|
|
||||||
|
/* If all children were closed, return success. */
|
||||||
|
return $closed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flushes all child instances. It is assumed that all of the children
|
||||||
|
* have been successfully opened.
|
||||||
|
*
|
||||||
|
* @return True if all of the child instances were successfully flushed.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.8.2
|
||||||
|
*/
|
||||||
|
function flush()
|
||||||
|
{
|
||||||
|
/* Attempt to flush each of our children. */
|
||||||
|
$flushed = true;
|
||||||
|
foreach ($this->_children as $id => $child) {
|
||||||
|
$flushed &= $this->_children[$id]->flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If all children were flushed, return success. */
|
||||||
|
return $flushed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends $message and $priority to each child of this composite. If the
|
||||||
|
* children aren't already open, they will be opened here.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message
|
||||||
|
* to log.
|
||||||
|
* @param string $priority (optional) The priority of the message.
|
||||||
|
* Valid values are: PEAR_LOG_EMERG,
|
||||||
|
* PEAR_LOG_ALERT, PEAR_LOG_CRIT,
|
||||||
|
* PEAR_LOG_ERR, PEAR_LOG_WARNING,
|
||||||
|
* PEAR_LOG_NOTICE, PEAR_LOG_INFO, and
|
||||||
|
* PEAR_LOG_DEBUG.
|
||||||
|
*
|
||||||
|
* @return boolean True if the entry is successfully logged.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function log($message, $priority = null)
|
||||||
|
{
|
||||||
|
/* If a priority hasn't been specified, use the default value. */
|
||||||
|
if ($priority === null) {
|
||||||
|
$priority = $this->_priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the handlers haven't been opened, attempt to open them now.
|
||||||
|
* However, we don't treat failure to open all of the handlers as a
|
||||||
|
* fatal error. We defer that consideration to the success of calling
|
||||||
|
* each handler's log() method below.
|
||||||
|
*/
|
||||||
|
if (!$this->_opened) {
|
||||||
|
$this->open();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Attempt to log the event using each of the children. */
|
||||||
|
$success = true;
|
||||||
|
foreach ($this->_children as $id => $child) {
|
||||||
|
$success &= $this->_children[$id]->log($message, $priority);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_announce(array('priority' => $priority, 'message' => $message));
|
||||||
|
|
||||||
|
/* Return success if all of the children logged the event. */
|
||||||
|
return $success;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if this is a composite.
|
||||||
|
*
|
||||||
|
* @return boolean True if this is a composite class.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function isComposite()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets this identification string for all of this composite's children.
|
||||||
|
*
|
||||||
|
* @param string $ident The new identification string.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.6.7
|
||||||
|
*/
|
||||||
|
function setIdent($ident)
|
||||||
|
{
|
||||||
|
/* Call our base class's setIdent() method. */
|
||||||
|
parent::setIdent($ident);
|
||||||
|
|
||||||
|
/* ... and then call setIdent() on all of our children. */
|
||||||
|
foreach ($this->_children as $id => $child) {
|
||||||
|
$this->_children[$id]->setIdent($ident);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a Log instance to the list of children.
|
||||||
|
*
|
||||||
|
* @param object $child The Log instance to add.
|
||||||
|
*
|
||||||
|
* @return boolean True if the Log instance was successfully added.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function addChild(&$child)
|
||||||
|
{
|
||||||
|
/* Make sure this is a Log instance. */
|
||||||
|
if (!is_a($child, 'Log')) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_children[$child->_id] = &$child;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a Log instance from the list of children.
|
||||||
|
*
|
||||||
|
* @param object $child The Log instance to remove.
|
||||||
|
*
|
||||||
|
* @return boolean True if the Log instance was successfully removed.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function removeChild($child)
|
||||||
|
{
|
||||||
|
if (!is_a($child, 'Log') || !isset($this->_children[$child->_id])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($this->_children[$child->_id]);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
204
egw-pear/Log/console.php
Normal file
204
egw-pear/Log/console.php
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* $Header: /repository/pear/Log/Log/console.php,v 1.23 2006/06/29 07:09:21 jon Exp $
|
||||||
|
*
|
||||||
|
* @version $Revision: 1.23 $
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Log_console class is a concrete implementation of the Log::
|
||||||
|
* abstract class which writes message to the text console.
|
||||||
|
*
|
||||||
|
* @author Jon Parise <jon@php.net>
|
||||||
|
* @since Log 1.1
|
||||||
|
* @package Log
|
||||||
|
*
|
||||||
|
* @example console.php Using the console handler.
|
||||||
|
*/
|
||||||
|
class Log_console extends Log
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Handle to the current output stream.
|
||||||
|
* @var resource
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_stream = STDOUT;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should the output be buffered or displayed immediately?
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_buffering = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String holding the buffered output.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_buffer = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String containing the format of a log line.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_lineFormat = '%1$s %2$s [%3$s] %4$s';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String containing the timestamp format. It will be passed directly to
|
||||||
|
* strftime(). Note that the timestamp string will generated using the
|
||||||
|
* current locale.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_timeFormat = '%b %d %H:%M:%S';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new Log_console object.
|
||||||
|
*
|
||||||
|
* @param string $name Ignored.
|
||||||
|
* @param string $ident The identity string.
|
||||||
|
* @param array $conf The configuration array.
|
||||||
|
* @param int $level Log messages up to and including this level.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function Log_console($name, $ident = '', $conf = array(),
|
||||||
|
$level = PEAR_LOG_DEBUG)
|
||||||
|
{
|
||||||
|
$this->_id = md5(microtime());
|
||||||
|
$this->_ident = $ident;
|
||||||
|
$this->_mask = Log::UPTO($level);
|
||||||
|
|
||||||
|
if (!empty($conf['stream'])) {
|
||||||
|
$this->_stream = $conf['stream'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($conf['buffering'])) {
|
||||||
|
$this->_buffering = $conf['buffering'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($conf['lineFormat'])) {
|
||||||
|
$this->_lineFormat = str_replace(array_keys($this->_formatMap),
|
||||||
|
array_values($this->_formatMap),
|
||||||
|
$conf['lineFormat']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($conf['timeFormat'])) {
|
||||||
|
$this->_timeFormat = $conf['timeFormat'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If output buffering has been requested, we need to register a
|
||||||
|
* shutdown function that will dump the buffer upon termination.
|
||||||
|
*/
|
||||||
|
if ($this->_buffering) {
|
||||||
|
register_shutdown_function(array(&$this, '_Log_console'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destructor
|
||||||
|
*/
|
||||||
|
function _Log_console()
|
||||||
|
{
|
||||||
|
$this->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open the output stream.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.9.7
|
||||||
|
*/
|
||||||
|
function open()
|
||||||
|
{
|
||||||
|
$this->_opened = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the output stream.
|
||||||
|
*
|
||||||
|
* This results in a call to flush().
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.9.0
|
||||||
|
*/
|
||||||
|
function close()
|
||||||
|
{
|
||||||
|
$this->flush();
|
||||||
|
$this->_opened = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flushes all pending ("buffered") data to the output stream.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.8.2
|
||||||
|
*/
|
||||||
|
function flush()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* If output buffering is enabled, dump the contents of the buffer to
|
||||||
|
* the output stream.
|
||||||
|
*/
|
||||||
|
if ($this->_buffering && (strlen($this->_buffer) > 0)) {
|
||||||
|
fwrite($this->_stream, $this->_buffer);
|
||||||
|
$this->_buffer = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
return fflush($this->_stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes $message to the text console. Also, passes the message
|
||||||
|
* along to any Log_observer instances that are observing this Log.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message to log.
|
||||||
|
* @param string $priority The priority of the message. Valid
|
||||||
|
* values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT,
|
||||||
|
* PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING,
|
||||||
|
* PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG.
|
||||||
|
* @return boolean True on success or false on failure.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function log($message, $priority = null)
|
||||||
|
{
|
||||||
|
/* If a priority hasn't been specified, use the default value. */
|
||||||
|
if ($priority === null) {
|
||||||
|
$priority = $this->_priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Abort early if the priority is above the maximum logging level. */
|
||||||
|
if (!$this->_isMasked($priority)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Extract the string representation of the message. */
|
||||||
|
$message = $this->_extractMessage($message);
|
||||||
|
|
||||||
|
/* Build the string containing the complete log line. */
|
||||||
|
$line = $this->_format($this->_lineFormat,
|
||||||
|
strftime($this->_timeFormat),
|
||||||
|
$priority, $message) . "\n";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If buffering is enabled, append this line to the output buffer.
|
||||||
|
* Otherwise, print the line to the output stream immediately.
|
||||||
|
*/
|
||||||
|
if ($this->_buffering) {
|
||||||
|
$this->_buffer .= $line;
|
||||||
|
} else {
|
||||||
|
fwrite($this->_stream, $line);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Notify observers about this log message. */
|
||||||
|
$this->_announce(array('priority' => $priority, 'message' => $message));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
230
egw-pear/Log/daemon.php
Normal file
230
egw-pear/Log/daemon.php
Normal file
@ -0,0 +1,230 @@
|
|||||||
|
<?php
|
||||||
|
// $Id: daemon.php,v 1.2 2005/02/26 14:48:58 chagenbu Exp $
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Log_daemon class is a concrete implementation of the Log::
|
||||||
|
* abstract class which sends messages to syslog daemon on UNIX-like machines.
|
||||||
|
* This class uses the syslog protocol: http://www.ietf.org/rfc/rfc3164.txt
|
||||||
|
*
|
||||||
|
* @author Bart van der Schans <schans@dds.nl>
|
||||||
|
* @version $Revision: 1.2 $
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
class Log_daemon extends Log
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Integer holding the log facility to use.
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $_name = LOG_DAEMON;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Var holding the resource pointer to the socket
|
||||||
|
* @var resource
|
||||||
|
*/
|
||||||
|
var $_socket;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The ip address or servername
|
||||||
|
* @see http://www.php.net/manual/en/transports.php
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $_ip = '127.0.0.1';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Protocol to use (tcp, udp, etc.)
|
||||||
|
* @see http://www.php.net/manual/en/transports.php
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $_proto = 'udp';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Port to connect to
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
var $_port = 514;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maximum message length in bytes
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
var $_maxsize = 4096;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Socket timeout in seconds
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
var $_timeout = 1;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new syslog object.
|
||||||
|
*
|
||||||
|
* @param string $name The syslog facility.
|
||||||
|
* @param string $ident The identity string.
|
||||||
|
* @param array $conf The configuration array.
|
||||||
|
* @param int $maxLevel Maximum level at which to log.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function Log_daemon($name, $ident = '', $conf = array(),
|
||||||
|
$level = PEAR_LOG_DEBUG)
|
||||||
|
{
|
||||||
|
/* Ensure we have a valid integer value for $name. */
|
||||||
|
if (empty($name) || !is_int($name)) {
|
||||||
|
$name = LOG_SYSLOG;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_id = md5(microtime());
|
||||||
|
$this->_name = $name;
|
||||||
|
$this->_ident = $ident;
|
||||||
|
$this->_mask = Log::UPTO($level);
|
||||||
|
|
||||||
|
if (isset($conf['ip'])) {
|
||||||
|
$this->_ip = $conf['ip'];
|
||||||
|
}
|
||||||
|
if (isset($conf['proto'])) {
|
||||||
|
$this->_proto = $conf['proto'];
|
||||||
|
}
|
||||||
|
if (isset($conf['port'])) {
|
||||||
|
$this->_port = $conf['port'];
|
||||||
|
}
|
||||||
|
if (isset($conf['maxsize'])) {
|
||||||
|
$this->_maxsize = $conf['maxsize'];
|
||||||
|
}
|
||||||
|
if (isset($conf['timeout'])) {
|
||||||
|
$this->_timeout = $conf['timeout'];
|
||||||
|
}
|
||||||
|
$this->_proto = $this->_proto . '://';
|
||||||
|
|
||||||
|
register_shutdown_function(array(&$this, '_Log_daemon'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destructor.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _Log_daemon()
|
||||||
|
{
|
||||||
|
$this->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens a connection to the system logger, if it has not already
|
||||||
|
* been opened. This is implicitly called by log(), if necessary.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function open()
|
||||||
|
{
|
||||||
|
if (!$this->_opened) {
|
||||||
|
$this->_opened = (bool)($this->_socket = @fsockopen(
|
||||||
|
$this->_proto . $this->_ip,
|
||||||
|
$this->_port,
|
||||||
|
$errno,
|
||||||
|
$errstr,
|
||||||
|
$this->_timeout));
|
||||||
|
}
|
||||||
|
return $this->_opened;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the connection to the system logger, if it is open.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function close()
|
||||||
|
{
|
||||||
|
if ($this->_opened) {
|
||||||
|
$this->_opened = false;
|
||||||
|
return fclose($this->_socket);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends $message to the currently open syslog connection. Calls
|
||||||
|
* open() if necessary. Also passes the message along to any Log_observer
|
||||||
|
* instances that are observing this Log.
|
||||||
|
*
|
||||||
|
* @param string $message The textual message to be logged.
|
||||||
|
* @param int $priority (optional) The priority of the message. Valid
|
||||||
|
* values are: LOG_EMERG, LOG_ALERT, LOG_CRIT,
|
||||||
|
* LOG_ERR, LOG_WARNING, LOG_NOTICE, LOG_INFO,
|
||||||
|
* and LOG_DEBUG. The default is LOG_INFO.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function log($message, $priority = null)
|
||||||
|
{
|
||||||
|
/* If a priority hasn't been specified, use the default value. */
|
||||||
|
if ($priority === null) {
|
||||||
|
$priority = $this->_priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Abort early if the priority is above the maximum logging level. */
|
||||||
|
if (!$this->_isMasked($priority)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the connection isn't open and can't be opened, return failure. */
|
||||||
|
if (!$this->_opened && !$this->open()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Extract the string representation of the message. */
|
||||||
|
$message = $this->_extractMessage($message);
|
||||||
|
|
||||||
|
/* Set the facility level. */
|
||||||
|
$facility_level = intval($this->_name) +
|
||||||
|
intval($this->_toSyslog($priority));
|
||||||
|
|
||||||
|
/* Prepend ident info. */
|
||||||
|
if (!empty($this->_ident)) {
|
||||||
|
$message = $this->_ident . ' ' . $message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check for message length. */
|
||||||
|
if (strlen($message) > $this->_maxsize) {
|
||||||
|
$message = substr($message, 0, ($this->_maxsize) - 10) . ' [...]';
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Write to socket. */
|
||||||
|
fwrite($this->_socket, '<' . $facility_level . '>' . $message . "\n");
|
||||||
|
|
||||||
|
$this->_announce(array('priority' => $priority, 'message' => $message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a PEAR_LOG_* constant into a syslog LOG_* constant.
|
||||||
|
*
|
||||||
|
* This function exists because, under Windows, not all of the LOG_*
|
||||||
|
* constants have unique values. Instead, the PEAR_LOG_* were introduced
|
||||||
|
* for global use, with the conversion to the LOG_* constants kept local to
|
||||||
|
* to the syslog driver.
|
||||||
|
*
|
||||||
|
* @param int $priority PEAR_LOG_* value to convert to LOG_* value.
|
||||||
|
*
|
||||||
|
* @return The LOG_* representation of $priority.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _toSyslog($priority)
|
||||||
|
{
|
||||||
|
static $priorities = array(
|
||||||
|
PEAR_LOG_EMERG => LOG_EMERG,
|
||||||
|
PEAR_LOG_ALERT => LOG_ALERT,
|
||||||
|
PEAR_LOG_CRIT => LOG_CRIT,
|
||||||
|
PEAR_LOG_ERR => LOG_ERR,
|
||||||
|
PEAR_LOG_WARNING => LOG_WARNING,
|
||||||
|
PEAR_LOG_NOTICE => LOG_NOTICE,
|
||||||
|
PEAR_LOG_INFO => LOG_INFO,
|
||||||
|
PEAR_LOG_DEBUG => LOG_DEBUG
|
||||||
|
);
|
||||||
|
|
||||||
|
/* If we're passed an unknown priority, default to LOG_INFO. */
|
||||||
|
if (!is_int($priority) || !in_array($priority, $priorities)) {
|
||||||
|
return LOG_INFO;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $priorities[$priority];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
141
egw-pear/Log/display.php
Normal file
141
egw-pear/Log/display.php
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* $Header: /repository/pear/Log/Log/display.php,v 1.9 2006/06/29 07:09:21 jon Exp $
|
||||||
|
*
|
||||||
|
* @version $Revision: 1.9 $
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Log_display class is a concrete implementation of the Log::
|
||||||
|
* abstract class which writes message into browser in usual PHP maner.
|
||||||
|
* This may be useful because when you use PEAR::setErrorHandling in
|
||||||
|
* PEAR_ERROR_CALLBACK mode error messages are not displayed by
|
||||||
|
* PHP error handler.
|
||||||
|
*
|
||||||
|
* @author Paul Yanchenko <pusher@inaco.ru>
|
||||||
|
* @since Log 1.8.0
|
||||||
|
* @package Log
|
||||||
|
*
|
||||||
|
* @example display.php Using the display handler.
|
||||||
|
*/
|
||||||
|
class Log_display extends Log
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* String to output before an error message
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_error_prepend = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String to output after an error message
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_error_append = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String used to represent a line break.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_linebreak = "<br />\n";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new Log_display object.
|
||||||
|
*
|
||||||
|
* @param string $name Ignored.
|
||||||
|
* @param string $ident The identity string.
|
||||||
|
* @param array $conf The configuration array.
|
||||||
|
* @param int $level Log messages up to and including this level.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function Log_display($name = '', $ident = '', $conf = array(),
|
||||||
|
$level = PEAR_LOG_DEBUG)
|
||||||
|
{
|
||||||
|
$this->_id = md5(microtime());
|
||||||
|
$this->_ident = $ident;
|
||||||
|
$this->_mask = Log::UPTO($level);
|
||||||
|
|
||||||
|
if (isset($conf['error_prepend'])) {
|
||||||
|
$this->_error_prepend = $conf['error_prepend'];
|
||||||
|
} else {
|
||||||
|
$this->_error_prepend = ini_get('error_prepend_string');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($conf['error_append'])) {
|
||||||
|
$this->_error_append = $conf['error_append'];
|
||||||
|
} else {
|
||||||
|
$this->_error_append = ini_get('error_append_string');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($conf['linebreak'])) {
|
||||||
|
$this->_linebreak = $conf['linebreak'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens the display handler.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.9.6
|
||||||
|
*/
|
||||||
|
function open()
|
||||||
|
{
|
||||||
|
$this->_opened = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the display handler.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.9.6
|
||||||
|
*/
|
||||||
|
function close()
|
||||||
|
{
|
||||||
|
$this->_opened = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes $message to the text browser. Also, passes the message
|
||||||
|
* along to any Log_observer instances that are observing this Log.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message to log.
|
||||||
|
* @param string $priority The priority of the message. Valid
|
||||||
|
* values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT,
|
||||||
|
* PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING,
|
||||||
|
* PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG.
|
||||||
|
* @return boolean True on success or false on failure.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function log($message, $priority = null)
|
||||||
|
{
|
||||||
|
/* If a priority hasn't been specified, use the default value. */
|
||||||
|
if ($priority === null) {
|
||||||
|
$priority = $this->_priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Abort early if the priority is above the maximum logging level. */
|
||||||
|
if (!$this->_isMasked($priority)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Extract the string representation of the message. */
|
||||||
|
$message = $this->_extractMessage($message);
|
||||||
|
|
||||||
|
/* Build and output the complete log line. */
|
||||||
|
echo $this->_error_prepend .
|
||||||
|
'<b>' . ucfirst($this->priorityToString($priority)) . '</b>: '.
|
||||||
|
nl2br(htmlspecialchars($message)) .
|
||||||
|
$this->_error_append . $this->_linebreak;
|
||||||
|
|
||||||
|
/* Notify observers about this log message. */
|
||||||
|
$this->_announce(array('priority' => $priority, 'message' => $message));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
127
egw-pear/Log/error_log.php
Normal file
127
egw-pear/Log/error_log.php
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* $Header: /repository/pear/Log/Log/error_log.php,v 1.8 2006/06/29 07:09:21 jon Exp $
|
||||||
|
*
|
||||||
|
* @version $Revision: 1.8 $
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Log_error_log class is a concrete implementation of the Log abstract
|
||||||
|
* class that logs messages using PHP's error_log() function.
|
||||||
|
*
|
||||||
|
* @author Jon Parise <jon@php.net>
|
||||||
|
* @since Log 1.7.0
|
||||||
|
* @package Log
|
||||||
|
*
|
||||||
|
* @example error_log.php Using the error_log handler.
|
||||||
|
*/
|
||||||
|
class Log_error_log extends Log
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The error_log() log type.
|
||||||
|
* @var integer
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_type = PEAR_LOG_TYPE_SYSTEM;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type-specific destination value.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_destination = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Additional headers to pass to the mail() function when the
|
||||||
|
* PEAR_LOG_TYPE_MAIL type is used.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_extra_headers = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new Log_error_log object.
|
||||||
|
*
|
||||||
|
* @param string $name Ignored.
|
||||||
|
* @param string $ident The identity string.
|
||||||
|
* @param array $conf The configuration array.
|
||||||
|
* @param int $level Log messages up to and including this level.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function Log_error_log($name, $ident = '', $conf = array(),
|
||||||
|
$level = PEAR_LOG_DEBUG)
|
||||||
|
{
|
||||||
|
$this->_id = md5(microtime());
|
||||||
|
$this->_type = $name;
|
||||||
|
$this->_ident = $ident;
|
||||||
|
$this->_mask = Log::UPTO($level);
|
||||||
|
|
||||||
|
if (!empty($conf['destination'])) {
|
||||||
|
$this->_destination = $conf['destination'];
|
||||||
|
}
|
||||||
|
if (!empty($conf['extra_headers'])) {
|
||||||
|
$this->_extra_headers = $conf['extra_headers'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens the handler.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.9.6
|
||||||
|
*/
|
||||||
|
function open()
|
||||||
|
{
|
||||||
|
$this->_opened = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the handler.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.9.6
|
||||||
|
*/
|
||||||
|
function close()
|
||||||
|
{
|
||||||
|
$this->_opened = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs $message using PHP's error_log() function. The message is also
|
||||||
|
* passed along to any Log_observer instances that are observing this Log.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message to log.
|
||||||
|
* @param string $priority The priority of the message. Valid
|
||||||
|
* values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT,
|
||||||
|
* PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING,
|
||||||
|
* PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG.
|
||||||
|
* @return boolean True on success or false on failure.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function log($message, $priority = null)
|
||||||
|
{
|
||||||
|
/* If a priority hasn't been specified, use the default value. */
|
||||||
|
if ($priority === null) {
|
||||||
|
$priority = $this->_priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Abort early if the priority is above the maximum logging level. */
|
||||||
|
if (!$this->_isMasked($priority)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Extract the string representation of the message. */
|
||||||
|
$message = $this->_extractMessage($message);
|
||||||
|
|
||||||
|
$success = error_log($this->_ident . ': ' . $message, $this->_type,
|
||||||
|
$this->_destination, $this->_extra_headers);
|
||||||
|
|
||||||
|
$this->_announce(array('priority' => $priority, 'message' => $message));
|
||||||
|
|
||||||
|
return $success;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
312
egw-pear/Log/file.php
Normal file
312
egw-pear/Log/file.php
Normal file
@ -0,0 +1,312 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* $Header: /repository/pear/Log/Log/file.php,v 1.45 2006/01/11 07:56:37 jon Exp $
|
||||||
|
*
|
||||||
|
* @version $Revision: 1.45 $
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Log_file class is a concrete implementation of the Log abstract
|
||||||
|
* class that logs messages to a text file.
|
||||||
|
*
|
||||||
|
* @author Jon Parise <jon@php.net>
|
||||||
|
* @author Roman Neuhauser <neuhauser@bellavista.cz>
|
||||||
|
* @since Log 1.0
|
||||||
|
* @package Log
|
||||||
|
*
|
||||||
|
* @example file.php Using the file handler.
|
||||||
|
*/
|
||||||
|
class Log_file extends Log
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* String containing the name of the log file.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_filename = 'php.log';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle to the log file.
|
||||||
|
* @var resource
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_fp = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should new log entries be append to an existing log file, or should the
|
||||||
|
* a new log file overwrite an existing one?
|
||||||
|
* @var boolean
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_append = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Should advisory file locking (i.e., flock()) be used?
|
||||||
|
* @var boolean
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_locking = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Integer (in octal) containing the log file's permissions mode.
|
||||||
|
* @var integer
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_mode = 0644;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Integer (in octal) specifying the file permission mode that will be
|
||||||
|
* used when creating directories that do not already exist.
|
||||||
|
* @var integer
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_dirmode = 0755;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String containing the format of a log line.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_lineFormat = '%1$s %2$s [%3$s] %4$s';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String containing the timestamp format. It will be passed directly to
|
||||||
|
* strftime(). Note that the timestamp string will generated using the
|
||||||
|
* current locale.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_timeFormat = '%b %d %H:%M:%S';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String containing the end-on-line character sequence.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_eol = "\n";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new Log_file object.
|
||||||
|
*
|
||||||
|
* @param string $name Ignored.
|
||||||
|
* @param string $ident The identity string.
|
||||||
|
* @param array $conf The configuration array.
|
||||||
|
* @param int $level Log messages up to and including this level.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function Log_file($name, $ident = '', $conf = array(),
|
||||||
|
$level = PEAR_LOG_DEBUG)
|
||||||
|
{
|
||||||
|
$this->_id = md5(microtime());
|
||||||
|
$this->_filename = $name;
|
||||||
|
$this->_ident = $ident;
|
||||||
|
$this->_mask = Log::UPTO($level);
|
||||||
|
|
||||||
|
if (isset($conf['append'])) {
|
||||||
|
$this->_append = $conf['append'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($conf['locking'])) {
|
||||||
|
$this->_locking = $conf['locking'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($conf['mode'])) {
|
||||||
|
if (is_string($conf['mode'])) {
|
||||||
|
$this->_mode = octdec($conf['mode']);
|
||||||
|
} else {
|
||||||
|
$this->_mode = $conf['mode'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($conf['dirmode'])) {
|
||||||
|
if (is_string($conf['dirmode'])) {
|
||||||
|
$this->_dirmode = octdec($conf['dirmode']);
|
||||||
|
} else {
|
||||||
|
$this->_dirmode = $conf['dirmode'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($conf['lineFormat'])) {
|
||||||
|
$this->_lineFormat = str_replace(array_keys($this->_formatMap),
|
||||||
|
array_values($this->_formatMap),
|
||||||
|
$conf['lineFormat']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($conf['timeFormat'])) {
|
||||||
|
$this->_timeFormat = $conf['timeFormat'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($conf['eol'])) {
|
||||||
|
$this->_eol = $conf['eol'];
|
||||||
|
} else {
|
||||||
|
$this->_eol = (strstr(PHP_OS, 'WIN')) ? "\r\n" : "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
register_shutdown_function(array(&$this, '_Log_file'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destructor
|
||||||
|
*/
|
||||||
|
function _Log_file()
|
||||||
|
{
|
||||||
|
if ($this->_opened) {
|
||||||
|
$this->close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the given directory path. If the parent directories don't
|
||||||
|
* already exist, they will be created, too.
|
||||||
|
*
|
||||||
|
* This implementation is inspired by Python's os.makedirs function.
|
||||||
|
*
|
||||||
|
* @param string $path The full directory path to create.
|
||||||
|
* @param integer $mode The permissions mode with which the
|
||||||
|
* directories will be created.
|
||||||
|
*
|
||||||
|
* @return True if the full path is successfully created or already
|
||||||
|
* exists.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _mkpath($path, $mode = 0700)
|
||||||
|
{
|
||||||
|
/* Separate the last pathname component from the rest of the path. */
|
||||||
|
$head = dirname($path);
|
||||||
|
$tail = basename($path);
|
||||||
|
|
||||||
|
/* Make sure we've split the path into two complete components. */
|
||||||
|
if (empty($tail)) {
|
||||||
|
$head = dirname($path);
|
||||||
|
$tail = basename($path);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Recurse up the path if our current segment does not exist. */
|
||||||
|
if (!empty($head) && !empty($tail) && !is_dir($head)) {
|
||||||
|
$this->_mkpath($head, $mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create this segment of the path. */
|
||||||
|
return @mkdir($head, $mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens the log file for output. If the specified log file does not
|
||||||
|
* already exist, it will be created. By default, new log entries are
|
||||||
|
* appended to the end of the log file.
|
||||||
|
*
|
||||||
|
* This is implicitly called by log(), if necessary.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function open()
|
||||||
|
{
|
||||||
|
if (!$this->_opened) {
|
||||||
|
/* If the log file's directory doesn't exist, create it. */
|
||||||
|
if (!is_dir(dirname($this->_filename))) {
|
||||||
|
$this->_mkpath($this->_filename, $this->_dirmode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Determine whether the log file needs to be created. */
|
||||||
|
$creating = !file_exists($this->_filename);
|
||||||
|
|
||||||
|
/* Obtain a handle to the log file. */
|
||||||
|
$this->_fp = fopen($this->_filename, ($this->_append) ? 'a' : 'w');
|
||||||
|
|
||||||
|
/* We consider the file "opened" if we have a valid file pointer. */
|
||||||
|
$this->_opened = ($this->_fp !== false);
|
||||||
|
|
||||||
|
/* Attempt to set the file's permissions if we just created it. */
|
||||||
|
if ($creating && $this->_opened) {
|
||||||
|
chmod($this->_filename, $this->_mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_opened;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the log file if it is open.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function close()
|
||||||
|
{
|
||||||
|
/* If the log file is open, close it. */
|
||||||
|
if ($this->_opened && fclose($this->_fp)) {
|
||||||
|
$this->_opened = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($this->_opened === false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flushes all pending data to the file handle.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.8.2
|
||||||
|
*/
|
||||||
|
function flush()
|
||||||
|
{
|
||||||
|
return fflush($this->_fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs $message to the output window. The message is also passed along
|
||||||
|
* to any Log_observer instances that are observing this Log.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message to log.
|
||||||
|
* @param string $priority The priority of the message. Valid
|
||||||
|
* values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT,
|
||||||
|
* PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING,
|
||||||
|
* PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG.
|
||||||
|
* @return boolean True on success or false on failure.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function log($message, $priority = null)
|
||||||
|
{
|
||||||
|
/* If a priority hasn't been specified, use the default value. */
|
||||||
|
if ($priority === null) {
|
||||||
|
$priority = $this->_priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Abort early if the priority is above the maximum logging level. */
|
||||||
|
if (!$this->_isMasked($priority)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the log file isn't already open, open it now. */
|
||||||
|
if (!$this->_opened && !$this->open()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Extract the string representation of the message. */
|
||||||
|
$message = $this->_extractMessage($message);
|
||||||
|
|
||||||
|
/* Build the string containing the complete log line. */
|
||||||
|
$line = $this->_format($this->_lineFormat,
|
||||||
|
strftime($this->_timeFormat),
|
||||||
|
$priority, $message) . $this->_eol;
|
||||||
|
|
||||||
|
/* If locking is enabled, acquire an exclusive lock on the file. */
|
||||||
|
if ($this->_locking) {
|
||||||
|
flock($this->_fp, LOCK_EX);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Write the log line to the log file. */
|
||||||
|
$success = (fwrite($this->_fp, $line) !== false);
|
||||||
|
|
||||||
|
/* Unlock the file now that we're finished writing to it. */
|
||||||
|
if ($this->_locking) {
|
||||||
|
flock($this->_fp, LOCK_UN);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Notify observers about this log message. */
|
||||||
|
$this->_announce(array('priority' => $priority, 'message' => $message));
|
||||||
|
|
||||||
|
return $success;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
246
egw-pear/Log/mail.php
Normal file
246
egw-pear/Log/mail.php
Normal file
@ -0,0 +1,246 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* $Header: /repository/pear/Log/Log/mail.php,v 1.24 2006/01/30 05:37:18 jon Exp $
|
||||||
|
*
|
||||||
|
* @version $Revision: 1.24 $
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Log_mail class is a concrete implementation of the Log:: abstract class
|
||||||
|
* which sends log messages to a mailbox.
|
||||||
|
* The mail is actually sent when you close() the logger, or when the destructor
|
||||||
|
* is called (when the script is terminated).
|
||||||
|
*
|
||||||
|
* PLEASE NOTE that you must create a Log_mail object using =&, like this :
|
||||||
|
* $logger =& Log::factory("mail", "recipient@example.com", ...)
|
||||||
|
*
|
||||||
|
* This is a PEAR requirement for destructors to work properly.
|
||||||
|
* See http://pear.php.net/manual/en/class.pear.php
|
||||||
|
*
|
||||||
|
* @author Ronnie Garcia <ronnie@mk2.net>
|
||||||
|
* @author Jon Parise <jon@php.net>
|
||||||
|
* @since Log 1.3
|
||||||
|
* @package Log
|
||||||
|
*
|
||||||
|
* @example mail.php Using the mail handler.
|
||||||
|
*/
|
||||||
|
class Log_mail extends Log
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* String holding the recipient's email address.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_recipient = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String holding the sender's email address.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_from = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String holding the email's subject.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_subject = '[Log_mail] Log message';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String holding an optional preamble for the log messages.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_preamble = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String containing the format of a log line.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_lineFormat = '%1$s %2$s [%3$s] %4$s';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String containing the timestamp format. It will be passed directly to
|
||||||
|
* strftime(). Note that the timestamp string will generated using the
|
||||||
|
* current locale.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_timeFormat = '%b %d %H:%M:%S';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String holding the mail message body.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_message = '';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new Log_mail object.
|
||||||
|
*
|
||||||
|
* Here is how you can customize the mail driver with the conf[] hash :
|
||||||
|
* $conf['from'] : the mail's "From" header line,
|
||||||
|
* $conf['subject'] : the mail's "Subject" line.
|
||||||
|
*
|
||||||
|
* @param string $name The filename of the logfile.
|
||||||
|
* @param string $ident The identity string.
|
||||||
|
* @param array $conf The configuration array.
|
||||||
|
* @param int $level Log messages up to and including this level.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function Log_mail($name, $ident = '', $conf = array(),
|
||||||
|
$level = PEAR_LOG_DEBUG)
|
||||||
|
{
|
||||||
|
$this->_id = md5(microtime());
|
||||||
|
$this->_recipient = $name;
|
||||||
|
$this->_ident = $ident;
|
||||||
|
$this->_mask = Log::UPTO($level);
|
||||||
|
|
||||||
|
if (!empty($conf['from'])) {
|
||||||
|
$this->_from = $conf['from'];
|
||||||
|
} else {
|
||||||
|
$this->_from = ini_get('sendmail_from');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($conf['subject'])) {
|
||||||
|
$this->_subject = $conf['subject'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($conf['preamble'])) {
|
||||||
|
$this->_preamble = $conf['preamble'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($conf['lineFormat'])) {
|
||||||
|
$this->_lineFormat = str_replace(array_keys($this->_formatMap),
|
||||||
|
array_values($this->_formatMap),
|
||||||
|
$conf['lineFormat']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($conf['timeFormat'])) {
|
||||||
|
$this->_timeFormat = $conf['timeFormat'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* register the destructor */
|
||||||
|
register_shutdown_function(array(&$this, '_Log_mail'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destructor. Calls close().
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _Log_mail()
|
||||||
|
{
|
||||||
|
$this->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts a new mail message.
|
||||||
|
* This is implicitly called by log(), if necessary.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function open()
|
||||||
|
{
|
||||||
|
if (!$this->_opened) {
|
||||||
|
if (!empty($this->_preamble)) {
|
||||||
|
$this->_message = $this->_preamble . "\r\n\r\n";
|
||||||
|
}
|
||||||
|
$this->_opened = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_opened;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the message, if it is open, and sends the mail.
|
||||||
|
* This is implicitly called by the destructor, if necessary.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function close()
|
||||||
|
{
|
||||||
|
if ($this->_opened) {
|
||||||
|
if (!empty($this->_message)) {
|
||||||
|
$headers = "From: $this->_from\r\n";
|
||||||
|
$headers .= "User-Agent: Log_mail";
|
||||||
|
|
||||||
|
if (mail($this->_recipient, $this->_subject, $this->_message,
|
||||||
|
$headers) == false) {
|
||||||
|
error_log("Log_mail: Failure executing mail()", 0);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clear the message string now that the email has been sent. */
|
||||||
|
$this->_message = '';
|
||||||
|
}
|
||||||
|
$this->_opened = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($this->_opened === false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flushes the log output by forcing the email message to be sent now.
|
||||||
|
* Events that are logged after flush() is called will be appended to a
|
||||||
|
* new email message.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.8.2
|
||||||
|
*/
|
||||||
|
function flush()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* It's sufficient to simply call close() to flush the output.
|
||||||
|
* The next call to log() will cause the handler to be reopened.
|
||||||
|
*/
|
||||||
|
return $this->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes $message to the currently open mail message.
|
||||||
|
* Calls open(), if necessary.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message to log.
|
||||||
|
* @param string $priority The priority of the message. Valid
|
||||||
|
* values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT,
|
||||||
|
* PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING,
|
||||||
|
* PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG.
|
||||||
|
* @return boolean True on success or false on failure.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function log($message, $priority = null)
|
||||||
|
{
|
||||||
|
/* If a priority hasn't been specified, use the default value. */
|
||||||
|
if ($priority === null) {
|
||||||
|
$priority = $this->_priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Abort early if the priority is above the maximum logging level. */
|
||||||
|
if (!$this->_isMasked($priority)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the message isn't open and can't be opened, return failure. */
|
||||||
|
if (!$this->_opened && !$this->open()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Extract the string representation of the message. */
|
||||||
|
$message = $this->_extractMessage($message);
|
||||||
|
|
||||||
|
/* Build the string containing the complete log line. */
|
||||||
|
$this->_message .= $this->_format($this->_lineFormat,
|
||||||
|
strftime($this->_timeFormat),
|
||||||
|
$priority, $message) . "\r\n";
|
||||||
|
|
||||||
|
/* Notify observers about this log message. */
|
||||||
|
$this->_announce(array('priority' => $priority, 'message' => $message));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
170
egw-pear/Log/mcal.php
Normal file
170
egw-pear/Log/mcal.php
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* $Header: /repository/pear/Log/Log/mcal.php,v 1.18 2005/02/26 14:48:58 chagenbu Exp $
|
||||||
|
* $Horde: horde/lib/Log/mcal.php,v 1.2 2000/06/28 21:36:13 jon Exp $
|
||||||
|
*
|
||||||
|
* @version $Revision: 1.18 $
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Log_mcal class is a concrete implementation of the Log::
|
||||||
|
* abstract class which sends messages to a local or remote calendar
|
||||||
|
* store accessed through MCAL.
|
||||||
|
*
|
||||||
|
* @author Chuck Hagenbuch <chuck@horde.org>
|
||||||
|
* @since Horde 1.3
|
||||||
|
* @since Log 1.0
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
class Log_mcal extends Log
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* holding the calendar specification to connect to.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_calendar = '{localhost/mstore}';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* holding the username to use.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_username = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* holding the password to use.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_password = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* holding the options to pass to the calendar stream.
|
||||||
|
* @var integer
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_options = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ResourceID of the MCAL stream.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_stream = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Integer holding the log facility to use.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_name = LOG_SYSLOG;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new Log_mcal object.
|
||||||
|
*
|
||||||
|
* @param string $name The category to use for our events.
|
||||||
|
* @param string $ident The identity string.
|
||||||
|
* @param array $conf The configuration array.
|
||||||
|
* @param int $level Log messages up to and including this level.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function Log_mcal($name, $ident = '', $conf = array(),
|
||||||
|
$level = PEAR_LOG_DEBUG)
|
||||||
|
{
|
||||||
|
$this->_id = md5(microtime());
|
||||||
|
$this->_name = $name;
|
||||||
|
$this->_ident = $ident;
|
||||||
|
$this->_mask = Log::UPTO($level);
|
||||||
|
$this->_calendar = $conf['calendar'];
|
||||||
|
$this->_username = $conf['username'];
|
||||||
|
$this->_password = $conf['password'];
|
||||||
|
$this->_options = $conf['options'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens a calendar stream, if it has not already been
|
||||||
|
* opened. This is implicitly called by log(), if necessary.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function open()
|
||||||
|
{
|
||||||
|
if (!$this->_opened) {
|
||||||
|
$this->_stream = mcal_open($this->_calendar, $this->_username,
|
||||||
|
$this->_password, $this->_options);
|
||||||
|
$this->_opened = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_opened;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the calendar stream, if it is open.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function close()
|
||||||
|
{
|
||||||
|
if ($this->_opened) {
|
||||||
|
mcal_close($this->_stream);
|
||||||
|
$this->_opened = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($this->_opened === false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs $message and associated information to the currently open
|
||||||
|
* calendar stream. Calls open() if necessary. Also passes the
|
||||||
|
* message along to any Log_observer instances that are observing
|
||||||
|
* this Log.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message to log.
|
||||||
|
* @param string $priority The priority of the message. Valid
|
||||||
|
* values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT,
|
||||||
|
* PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING,
|
||||||
|
* PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG.
|
||||||
|
* @return boolean True on success or false on failure.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function log($message, $priority = null)
|
||||||
|
{
|
||||||
|
/* If a priority hasn't been specified, use the default value. */
|
||||||
|
if ($priority === null) {
|
||||||
|
$priority = $this->_priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Abort early if the priority is above the maximum logging level. */
|
||||||
|
if (!$this->_isMasked($priority)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the connection isn't open and can't be opened, return failure. */
|
||||||
|
if (!$this->_opened && !$this->open()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Extract the string representation of the message. */
|
||||||
|
$message = $this->_extractMessage($message);
|
||||||
|
|
||||||
|
$date_str = date('Y:n:j:G:i:s');
|
||||||
|
$dates = explode(':', $date_str);
|
||||||
|
|
||||||
|
mcal_event_init($this->_stream);
|
||||||
|
mcal_event_set_title($this->_stream, $this->_ident);
|
||||||
|
mcal_event_set_category($this->_stream, $this->_name);
|
||||||
|
mcal_event_set_description($this->_stream, $message);
|
||||||
|
mcal_event_add_attribute($this->_stream, 'priority', $priority);
|
||||||
|
mcal_event_set_start($this->_stream, $dates[0], $dates[1], $dates[2],
|
||||||
|
$dates[3], $dates[4], $dates[5]);
|
||||||
|
mcal_event_set_end($this->_stream, $dates[0], $dates[1], $dates[2],
|
||||||
|
$dates[3], $dates[4], $dates[5]);
|
||||||
|
mcal_append_event($this->_stream);
|
||||||
|
|
||||||
|
$this->_announce(array('priority' => $priority, 'message' => $message));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
358
egw-pear/Log/mdb2.php
Normal file
358
egw-pear/Log/mdb2.php
Normal file
@ -0,0 +1,358 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* $Header: /repository/pear/Log/Log/mdb2.php,v 1.5 2006/01/08 03:35:44 jon Exp $
|
||||||
|
*
|
||||||
|
* @version $Revision: 1.5 $
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** PEAR's MDB2 package */
|
||||||
|
require_once 'MDB2.php';
|
||||||
|
MDB2::loadFile('Date');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Log_mdb2 class is a concrete implementation of the Log:: abstract class
|
||||||
|
* which sends messages to an SQL server. Each entry occupies a separate row
|
||||||
|
* in the database.
|
||||||
|
*
|
||||||
|
* This implementation uses PEAR's MDB2 database abstraction layer.
|
||||||
|
*
|
||||||
|
* CREATE TABLE log_table (
|
||||||
|
* id INT NOT NULL,
|
||||||
|
* logtime TIMESTAMP NOT NULL,
|
||||||
|
* ident CHAR(16) NOT NULL,
|
||||||
|
* priority INT NOT NULL,
|
||||||
|
* message VARCHAR(200),
|
||||||
|
* PRIMARY KEY (id)
|
||||||
|
* );
|
||||||
|
*
|
||||||
|
* @author Lukas Smith <smith@backendmedia.com>
|
||||||
|
* @author Jon Parise <jon@php.net>
|
||||||
|
* @since Log 1.9.0
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
class Log_mdb2 extends Log
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Variable containing the DSN information.
|
||||||
|
* @var mixed
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_dsn = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Array containing our set of DB configuration options.
|
||||||
|
* @var array
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_options = array('persistent' => true);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object holding the database handle.
|
||||||
|
* @var object
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_db = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resource holding the prepared statement handle.
|
||||||
|
* @var resource
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_statement = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flag indicating that we're using an existing database connection.
|
||||||
|
* @var boolean
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_existingConnection = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String holding the database table to use.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_table = 'log_table';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String holding the name of the ID sequence.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_sequence = 'log_id';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maximum length of the $ident string. This corresponds to the size of
|
||||||
|
* the 'ident' column in the SQL table.
|
||||||
|
* @var integer
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_identLimit = 16;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set of field types used in the database table.
|
||||||
|
* @var array
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_types = array(
|
||||||
|
'id' => 'integer',
|
||||||
|
'logtime' => 'timestamp',
|
||||||
|
'ident' => 'text',
|
||||||
|
'priority' => 'text',
|
||||||
|
'message' => 'clob'
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new sql logging object.
|
||||||
|
*
|
||||||
|
* @param string $name The target SQL table.
|
||||||
|
* @param string $ident The identification field.
|
||||||
|
* @param array $conf The connection configuration array.
|
||||||
|
* @param int $level Log messages up to and including this level.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function Log_mdb2($name, $ident = '', $conf = array(),
|
||||||
|
$level = PEAR_LOG_DEBUG)
|
||||||
|
{
|
||||||
|
$this->_id = md5(microtime());
|
||||||
|
$this->_table = $name;
|
||||||
|
$this->_mask = Log::UPTO($level);
|
||||||
|
|
||||||
|
/* If an options array was provided, use it. */
|
||||||
|
if (isset($conf['options']) && is_array($conf['options'])) {
|
||||||
|
$this->_options = $conf['options'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If a specific sequence name was provided, use it. */
|
||||||
|
if (!empty($conf['sequence'])) {
|
||||||
|
$this->_sequence = $conf['sequence'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If a specific sequence name was provided, use it. */
|
||||||
|
if (isset($conf['identLimit'])) {
|
||||||
|
$this->_identLimit = $conf['identLimit'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now that the ident limit is confirmed, set the ident string. */
|
||||||
|
$this->setIdent($ident);
|
||||||
|
|
||||||
|
/* If an existing database connection was provided, use it. */
|
||||||
|
if (isset($conf['db'])) {
|
||||||
|
$this->_db = &$conf['db'];
|
||||||
|
$this->_existingConnection = true;
|
||||||
|
$this->_opened = true;
|
||||||
|
} elseif (isset($conf['singleton'])) {
|
||||||
|
$this->_db = &MDB2::singleton($conf['singleton'], $this->_options);
|
||||||
|
$this->_existingConnection = true;
|
||||||
|
$this->_opened = true;
|
||||||
|
} else {
|
||||||
|
$this->_dsn = $conf['dsn'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens a connection to the database, if it has not already
|
||||||
|
* been opened. This is implicitly called by log(), if necessary.
|
||||||
|
*
|
||||||
|
* @return boolean True on success, false on failure.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function open()
|
||||||
|
{
|
||||||
|
if (!$this->_opened) {
|
||||||
|
/* Use the DSN and options to create a database connection. */
|
||||||
|
$this->_db = &MDB2::connect($this->_dsn, $this->_options);
|
||||||
|
if (PEAR::isError($this->_db)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create a prepared statement for repeated use in log(). */
|
||||||
|
if (!$this->_prepareStatement()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We now consider out connection open. */
|
||||||
|
$this->_opened = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_opened;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the connection to the database if it is still open and we were
|
||||||
|
* the ones that opened it. It is the caller's responsible to close an
|
||||||
|
* existing connection that was passed to us via $conf['db'].
|
||||||
|
*
|
||||||
|
* @return boolean True on success, false on failure.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function close()
|
||||||
|
{
|
||||||
|
/* If we have a statement object, free it. */
|
||||||
|
if (is_object($this->_statement)) {
|
||||||
|
$this->_statement->free();
|
||||||
|
$this->_statement = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we opened the database connection, disconnect it. */
|
||||||
|
if ($this->_opened && !$this->_existingConnection) {
|
||||||
|
$this->_opened = false;
|
||||||
|
return $this->_db->disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($this->_opened === false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets this Log instance's identification string. Note that this
|
||||||
|
* SQL-specific implementation will limit the length of the $ident string
|
||||||
|
* to sixteen (16) characters.
|
||||||
|
*
|
||||||
|
* @param string $ident The new identification string.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.8.5
|
||||||
|
*/
|
||||||
|
function setIdent($ident)
|
||||||
|
{
|
||||||
|
$this->_ident = substr($ident, 0, $this->_identLimit);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inserts $message to the currently open database. Calls open(),
|
||||||
|
* if necessary. Also passes the message along to any Log_observer
|
||||||
|
* instances that are observing this Log.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message to log.
|
||||||
|
* @param string $priority The priority of the message. Valid
|
||||||
|
* values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT,
|
||||||
|
* PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING,
|
||||||
|
* PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG.
|
||||||
|
* @return boolean True on success or false on failure.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function log($message, $priority = null)
|
||||||
|
{
|
||||||
|
/* If a priority hasn't been specified, use the default value. */
|
||||||
|
if ($priority === null) {
|
||||||
|
$priority = $this->_priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Abort early if the priority is above the maximum logging level. */
|
||||||
|
if (!$this->_isMasked($priority)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the connection isn't open and can't be opened, return failure. */
|
||||||
|
if (!$this->_opened && !$this->open()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we don't already have a statement object, create one. */
|
||||||
|
if (!is_object($this->_statement) && !$this->_prepareStatement()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Extract the string representation of the message. */
|
||||||
|
$message = $this->_extractMessage($message);
|
||||||
|
|
||||||
|
/* Build our set of values for this log entry. */
|
||||||
|
$values = array(
|
||||||
|
'id' => $this->_db->nextId($this->_sequence),
|
||||||
|
'logtime' => MDB2_Date::mdbNow(),
|
||||||
|
'ident' => $this->_ident,
|
||||||
|
'priority' => $priority,
|
||||||
|
'message' => $message
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Execute the SQL query for this log entry insertion. */
|
||||||
|
$this->_db->expectError(MDB2_ERROR_NOSUCHTABLE);
|
||||||
|
$result = &$this->_statement->execute($values);
|
||||||
|
$this->_db->popExpect();
|
||||||
|
|
||||||
|
/* Attempt to handle any errors. */
|
||||||
|
if (PEAR::isError($result)) {
|
||||||
|
/* We can only handle MDB2_ERROR_NOSUCHTABLE errors. */
|
||||||
|
if ($result->getCode() != MDB2_ERROR_NOSUCHTABLE) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Attempt to create the target table. */
|
||||||
|
if (!$this->_createTable()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Recreate our prepared statement resource. */
|
||||||
|
$this->_statement->free();
|
||||||
|
if (!$this->_prepareStatement()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Attempt to re-execute the insertion query. */
|
||||||
|
$result = $this->_statement->execute($values);
|
||||||
|
if (PEAR::isError($result)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_announce(array('priority' => $priority, 'message' => $message));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the log table in the database.
|
||||||
|
*
|
||||||
|
* @return boolean True on success or false on failure.
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _createTable()
|
||||||
|
{
|
||||||
|
$this->_db->loadModule('Manager', null, true);
|
||||||
|
$result = $this->_db->manager->createTable(
|
||||||
|
$this->_table,
|
||||||
|
array(
|
||||||
|
'id' => array('type' => $this->_types['id']),
|
||||||
|
'logtime' => array('type' => $this->_types['logtime']),
|
||||||
|
'ident' => array('type' => $this->_types['ident']),
|
||||||
|
'priority' => array('type' => $this->_types['priority']),
|
||||||
|
'message' => array('type' => $this->_types['message'])
|
||||||
|
)
|
||||||
|
);
|
||||||
|
if (PEAR::isError($result)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $this->_db->manager->createIndex(
|
||||||
|
$this->_table,
|
||||||
|
'unique_id',
|
||||||
|
array('fields' => array('id' => true), 'unique' => true)
|
||||||
|
);
|
||||||
|
if (PEAR::isError($result)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare the SQL insertion statement.
|
||||||
|
*
|
||||||
|
* @return boolean True if the statement was successfully created.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @since Log 1.9.0
|
||||||
|
*/
|
||||||
|
function _prepareStatement()
|
||||||
|
{
|
||||||
|
$this->_statement = &$this->_db->prepare(
|
||||||
|
'INSERT INTO ' . $this->_table .
|
||||||
|
' (id, logtime, ident, priority, message)' .
|
||||||
|
' VALUES(:id, :logtime, :ident, :priority, :message)',
|
||||||
|
$this->_types, MDB2_PREPARE_MANIP);
|
||||||
|
|
||||||
|
/* Return success if we didn't generate an error. */
|
||||||
|
return (PEAR::isError($this->_statement) === false);
|
||||||
|
}
|
||||||
|
}
|
91
egw-pear/Log/null.php
Normal file
91
egw-pear/Log/null.php
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* $Header: /repository/pear/Log/Log/null.php,v 1.5 2006/06/29 07:09:21 jon Exp $
|
||||||
|
*
|
||||||
|
* @version $Revision: 1.5 $
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Log_null class is a concrete implementation of the Log:: abstract
|
||||||
|
* class. It simply consumes log events.
|
||||||
|
*
|
||||||
|
* @author Jon Parise <jon@php.net>
|
||||||
|
* @since Log 1.8.2
|
||||||
|
* @package Log
|
||||||
|
*
|
||||||
|
* @example null.php Using the null handler.
|
||||||
|
*/
|
||||||
|
class Log_null extends Log
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Constructs a new Log_null object.
|
||||||
|
*
|
||||||
|
* @param string $name Ignored.
|
||||||
|
* @param string $ident The identity string.
|
||||||
|
* @param array $conf The configuration array.
|
||||||
|
* @param int $level Log messages up to and including this level.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function Log_null($name, $ident = '', $conf = array(),
|
||||||
|
$level = PEAR_LOG_DEBUG)
|
||||||
|
{
|
||||||
|
$this->_id = md5(microtime());
|
||||||
|
$this->_ident = $ident;
|
||||||
|
$this->_mask = Log::UPTO($level);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens the handler.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.9.6
|
||||||
|
*/
|
||||||
|
function open()
|
||||||
|
{
|
||||||
|
$this->_opened = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the handler.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.9.6
|
||||||
|
*/
|
||||||
|
function close()
|
||||||
|
{
|
||||||
|
$this->_opened = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simply consumes the log event. The message will still be passed
|
||||||
|
* along to any Log_observer instances that are observing this Log.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message to log.
|
||||||
|
* @param string $priority The priority of the message. Valid
|
||||||
|
* values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT,
|
||||||
|
* PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING,
|
||||||
|
* PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG.
|
||||||
|
* @return boolean True on success or false on failure.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function log($message, $priority = null)
|
||||||
|
{
|
||||||
|
/* If a priority hasn't been specified, use the default value. */
|
||||||
|
if ($priority === null) {
|
||||||
|
$priority = $this->_priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Abort early if the priority is above the maximum logging level. */
|
||||||
|
if (!$this->_isMasked($priority)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_announce(array('priority' => $priority, 'message' => $message));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
129
egw-pear/Log/observer.php
Normal file
129
egw-pear/Log/observer.php
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* $Header: /repository/pear/Log/Log/observer.php,v 1.18 2006/04/25 06:02:23 jon Exp $
|
||||||
|
* $Horde: horde/lib/Log/observer.php,v 1.5 2000/06/28 21:36:13 jon Exp $
|
||||||
|
*
|
||||||
|
* @version $Revision: 1.18 $
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Log_observer:: class implements the Observer end of a Subject-Observer
|
||||||
|
* pattern for watching log activity and taking actions on exceptional events.
|
||||||
|
*
|
||||||
|
* @author Chuck Hagenbuch <chuck@horde.org>
|
||||||
|
* @since Horde 1.3
|
||||||
|
* @since Log 1.0
|
||||||
|
* @package Log
|
||||||
|
*
|
||||||
|
* @example observer_mail.php An example Log_observer implementation.
|
||||||
|
*/
|
||||||
|
class Log_observer
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Instance-specific unique identification number.
|
||||||
|
*
|
||||||
|
* @var integer
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_id = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The minimum priority level of message that we want to hear about.
|
||||||
|
* PEAR_LOG_EMERG is the highest priority, so we will only hear messages
|
||||||
|
* with an integer priority value less than or equal to ours. It defaults
|
||||||
|
* to PEAR_LOG_INFO, which listens to everything except PEAR_LOG_DEBUG.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_priority = PEAR_LOG_INFO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new basic Log_observer instance.
|
||||||
|
*
|
||||||
|
* @param integer $priority The highest priority at which to receive
|
||||||
|
* log event notifications.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function Log_observer($priority = PEAR_LOG_INFO)
|
||||||
|
{
|
||||||
|
$this->_id = md5(microtime());
|
||||||
|
$this->_priority = $priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attempts to return a new concrete Log_observer instance of the requested
|
||||||
|
* type.
|
||||||
|
*
|
||||||
|
* @param string $type The type of concreate Log_observer subclass
|
||||||
|
* to return.
|
||||||
|
* @param integer $priority The highest priority at which to receive
|
||||||
|
* log event notifications.
|
||||||
|
* @param array $conf Optional associative array of additional
|
||||||
|
* configuration values.
|
||||||
|
*
|
||||||
|
* @return object The newly created concrete Log_observer
|
||||||
|
* instance, or null on an error.
|
||||||
|
*/
|
||||||
|
function &factory($type, $priority = PEAR_LOG_INFO, $conf = array())
|
||||||
|
{
|
||||||
|
$type = strtolower($type);
|
||||||
|
$class = 'Log_observer_' . $type;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the desired class already exists (because the caller has supplied
|
||||||
|
* it from some custom location), simply instantiate and return a new
|
||||||
|
* instance.
|
||||||
|
*/
|
||||||
|
if (class_exists($class)) {
|
||||||
|
$object = new $class($priority, $conf);
|
||||||
|
return $object;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Support both the new-style and old-style file naming conventions. */
|
||||||
|
$newstyle = true;
|
||||||
|
$classfile = dirname(__FILE__) . '/observer_' . $type . '.php';
|
||||||
|
|
||||||
|
if (!file_exists($classfile)) {
|
||||||
|
$classfile = 'Log/' . $type . '.php';
|
||||||
|
$newstyle = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Attempt to include our version of the named class, but don't treat
|
||||||
|
* a failure as fatal. The caller may have already included their own
|
||||||
|
* version of the named class.
|
||||||
|
*/
|
||||||
|
@include_once $classfile;
|
||||||
|
|
||||||
|
/* If the class exists, return a new instance of it. */
|
||||||
|
if (class_exists($class)) {
|
||||||
|
/* Support both new-style and old-style construction. */
|
||||||
|
if ($newstyle) {
|
||||||
|
$object = new $class($priority, $conf);
|
||||||
|
} else {
|
||||||
|
$object = new $class($priority);
|
||||||
|
}
|
||||||
|
return $object;
|
||||||
|
}
|
||||||
|
|
||||||
|
$null = null;
|
||||||
|
return $null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a stub method to make sure that Log_Observer classes do
|
||||||
|
* something when they are notified of a message. The default behavior
|
||||||
|
* is to just print the message, which is obviously not desireable in
|
||||||
|
* practically any situation - which is why you need to override this
|
||||||
|
* method. :)
|
||||||
|
*
|
||||||
|
* @param array $event A hash describing the log event.
|
||||||
|
*/
|
||||||
|
function notify($event)
|
||||||
|
{
|
||||||
|
print_r($event);
|
||||||
|
}
|
||||||
|
}
|
294
egw-pear/Log/sql.php
Normal file
294
egw-pear/Log/sql.php
Normal file
@ -0,0 +1,294 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* $Header: /repository/pear/Log/Log/sql.php,v 1.40 2006/01/03 04:12:45 jon Exp $
|
||||||
|
* $Horde: horde/lib/Log/sql.php,v 1.12 2000/08/16 20:27:34 chuck Exp $
|
||||||
|
*
|
||||||
|
* @version $Revision: 1.40 $
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We require the PEAR DB class. This is generally defined in the DB.php file,
|
||||||
|
* but it's possible that the caller may have provided the DB class, or a
|
||||||
|
* compatible wrapper (such as the one shipped with MDB2), so we first check
|
||||||
|
* for an existing 'DB' class before including 'DB.php'.
|
||||||
|
*/
|
||||||
|
if (!class_exists('DB')) {
|
||||||
|
require_once 'DB.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Log_sql class is a concrete implementation of the Log::
|
||||||
|
* abstract class which sends messages to an SQL server. Each entry
|
||||||
|
* occupies a separate row in the database.
|
||||||
|
*
|
||||||
|
* This implementation uses PHP's PEAR database abstraction layer.
|
||||||
|
*
|
||||||
|
* CREATE TABLE log_table (
|
||||||
|
* id INT NOT NULL,
|
||||||
|
* logtime TIMESTAMP NOT NULL,
|
||||||
|
* ident CHAR(16) NOT NULL,
|
||||||
|
* priority INT NOT NULL,
|
||||||
|
* message VARCHAR(200),
|
||||||
|
* PRIMARY KEY (id)
|
||||||
|
* );
|
||||||
|
*
|
||||||
|
* @author Jon Parise <jon@php.net>
|
||||||
|
* @since Horde 1.3
|
||||||
|
* @since Log 1.0
|
||||||
|
* @package Log
|
||||||
|
*
|
||||||
|
* @example sql.php Using the SQL handler.
|
||||||
|
*/
|
||||||
|
class Log_sql extends Log
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Variable containing the DSN information.
|
||||||
|
* @var mixed
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_dsn = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String containing the SQL insertion statement.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_sql = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Array containing our set of DB configuration options.
|
||||||
|
* @var array
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_options = array('persistent' => true);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object holding the database handle.
|
||||||
|
* @var object
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_db = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resource holding the prepared statement handle.
|
||||||
|
* @var resource
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_statement = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flag indicating that we're using an existing database connection.
|
||||||
|
* @var boolean
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_existingConnection = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String holding the database table to use.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_table = 'log_table';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String holding the name of the ID sequence.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_sequence = 'log_id';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maximum length of the $ident string. This corresponds to the size of
|
||||||
|
* the 'ident' column in the SQL table.
|
||||||
|
* @var integer
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_identLimit = 16;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new sql logging object.
|
||||||
|
*
|
||||||
|
* @param string $name The target SQL table.
|
||||||
|
* @param string $ident The identification field.
|
||||||
|
* @param array $conf The connection configuration array.
|
||||||
|
* @param int $level Log messages up to and including this level.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function Log_sql($name, $ident = '', $conf = array(),
|
||||||
|
$level = PEAR_LOG_DEBUG)
|
||||||
|
{
|
||||||
|
$this->_id = md5(microtime());
|
||||||
|
$this->_table = $name;
|
||||||
|
$this->_mask = Log::UPTO($level);
|
||||||
|
|
||||||
|
/* Now that we have a table name, assign our SQL statement. */
|
||||||
|
if (!empty($this->_sql)) {
|
||||||
|
$this->_sql = $conf['sql'];
|
||||||
|
} else {
|
||||||
|
$this->_sql = 'INSERT INTO ' . $this->_table .
|
||||||
|
' (id, logtime, ident, priority, message)' .
|
||||||
|
' VALUES(?, CURRENT_TIMESTAMP, ?, ?, ?)';
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If an options array was provided, use it. */
|
||||||
|
if (isset($conf['options']) && is_array($conf['options'])) {
|
||||||
|
$this->_options = $conf['options'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If a specific sequence name was provided, use it. */
|
||||||
|
if (!empty($conf['sequence'])) {
|
||||||
|
$this->_sequence = $conf['sequence'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If a specific sequence name was provided, use it. */
|
||||||
|
if (isset($conf['identLimit'])) {
|
||||||
|
$this->_identLimit = $conf['identLimit'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now that the ident limit is confirmed, set the ident string. */
|
||||||
|
$this->setIdent($ident);
|
||||||
|
|
||||||
|
/* If an existing database connection was provided, use it. */
|
||||||
|
if (isset($conf['db'])) {
|
||||||
|
$this->_db = &$conf['db'];
|
||||||
|
$this->_existingConnection = true;
|
||||||
|
$this->_opened = true;
|
||||||
|
} else {
|
||||||
|
$this->_dsn = $conf['dsn'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens a connection to the database, if it has not already
|
||||||
|
* been opened. This is implicitly called by log(), if necessary.
|
||||||
|
*
|
||||||
|
* @return boolean True on success, false on failure.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function open()
|
||||||
|
{
|
||||||
|
if (!$this->_opened) {
|
||||||
|
/* Use the DSN and options to create a database connection. */
|
||||||
|
$this->_db = &DB::connect($this->_dsn, $this->_options);
|
||||||
|
if (DB::isError($this->_db)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create a prepared statement for repeated use in log(). */
|
||||||
|
if (!$this->_prepareStatement()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We now consider out connection open. */
|
||||||
|
$this->_opened = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_opened;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the connection to the database if it is still open and we were
|
||||||
|
* the ones that opened it. It is the caller's responsible to close an
|
||||||
|
* existing connection that was passed to us via $conf['db'].
|
||||||
|
*
|
||||||
|
* @return boolean True on success, false on failure.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function close()
|
||||||
|
{
|
||||||
|
if ($this->_opened && !$this->_existingConnection) {
|
||||||
|
$this->_opened = false;
|
||||||
|
$this->_db->freePrepared($this->_statement);
|
||||||
|
return $this->_db->disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($this->_opened === false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets this Log instance's identification string. Note that this
|
||||||
|
* SQL-specific implementation will limit the length of the $ident string
|
||||||
|
* to sixteen (16) characters.
|
||||||
|
*
|
||||||
|
* @param string $ident The new identification string.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @since Log 1.8.5
|
||||||
|
*/
|
||||||
|
function setIdent($ident)
|
||||||
|
{
|
||||||
|
$this->_ident = substr($ident, 0, $this->_identLimit);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inserts $message to the currently open database. Calls open(),
|
||||||
|
* if necessary. Also passes the message along to any Log_observer
|
||||||
|
* instances that are observing this Log.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message to log.
|
||||||
|
* @param string $priority The priority of the message. Valid
|
||||||
|
* values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT,
|
||||||
|
* PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING,
|
||||||
|
* PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG.
|
||||||
|
* @return boolean True on success or false on failure.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function log($message, $priority = null)
|
||||||
|
{
|
||||||
|
/* If a priority hasn't been specified, use the default value. */
|
||||||
|
if ($priority === null) {
|
||||||
|
$priority = $this->_priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Abort early if the priority is above the maximum logging level. */
|
||||||
|
if (!$this->_isMasked($priority)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the connection isn't open and can't be opened, return failure. */
|
||||||
|
if (!$this->_opened && !$this->open()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we don't already have our statement object yet, create it. */
|
||||||
|
if (!is_object($this->_statement) && !$this->_prepareStatement()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Extract the string representation of the message. */
|
||||||
|
$message = $this->_extractMessage($message);
|
||||||
|
|
||||||
|
/* Build our set of values for this log entry. */
|
||||||
|
$id = $this->_db->nextId($this->_sequence);
|
||||||
|
$values = array($id, $this->_ident, $priority, $message);
|
||||||
|
|
||||||
|
/* Execute the SQL query for this log entry insertion. */
|
||||||
|
$result =& $this->_db->execute($this->_statement, $values);
|
||||||
|
if (DB::isError($result)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_announce(array('priority' => $priority, 'message' => $message));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare the SQL insertion statement.
|
||||||
|
*
|
||||||
|
* @return boolean True if the statement was successfully created.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
* @since Log 1.9.1
|
||||||
|
*/
|
||||||
|
function _prepareStatement()
|
||||||
|
{
|
||||||
|
$this->_statement = $this->_db->prepare($this->_sql);
|
||||||
|
|
||||||
|
/* Return success if we didn't generate an error. */
|
||||||
|
return (DB::isError($this->_statement) === false);
|
||||||
|
}
|
||||||
|
}
|
225
egw-pear/Log/sqlite.php
Normal file
225
egw-pear/Log/sqlite.php
Normal file
@ -0,0 +1,225 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* $Header: /repository/pear/Log/Log/sqlite.php,v 1.5 2005/12/05 05:38:31 jon Exp $
|
||||||
|
*
|
||||||
|
* @version $Revision: 1.5 $
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Log_sqlite class is a concrete implementation of the Log::
|
||||||
|
* abstract class which sends messages to an Sqlite database.
|
||||||
|
* Each entry occupies a separate row in the database.
|
||||||
|
*
|
||||||
|
* This implementation uses PHP native Sqlite functions.
|
||||||
|
*
|
||||||
|
* CREATE TABLE log_table (
|
||||||
|
* id INTEGER PRIMARY KEY NOT NULL,
|
||||||
|
* logtime NOT NULL,
|
||||||
|
* ident CHAR(16) NOT NULL,
|
||||||
|
* priority INT NOT NULL,
|
||||||
|
* message
|
||||||
|
* );
|
||||||
|
*
|
||||||
|
* @author Bertrand Mansion <bmansion@mamasam.com>
|
||||||
|
* @author Jon Parise <jon@php.net>
|
||||||
|
* @since Log 1.8.3
|
||||||
|
* @package Log
|
||||||
|
*
|
||||||
|
* @example sqlite.php Using the Sqlite handler.
|
||||||
|
*/
|
||||||
|
class Log_sqlite extends Log
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Array containing the connection defaults
|
||||||
|
* @var array
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_options = array('mode' => 0666,
|
||||||
|
'persistent' => false);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Object holding the database handle.
|
||||||
|
* @var object
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_db = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flag indicating that we're using an existing database connection.
|
||||||
|
* @var boolean
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_existingConnection = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String holding the database table to use.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_table = 'log_table';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new sql logging object.
|
||||||
|
*
|
||||||
|
* @param string $name The target SQL table.
|
||||||
|
* @param string $ident The identification field.
|
||||||
|
* @param mixed $conf Can be an array of configuration options used
|
||||||
|
* to open a new database connection
|
||||||
|
* or an already opened sqlite connection.
|
||||||
|
* @param int $level Log messages up to and including this level.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function Log_sqlite($name, $ident = '', &$conf, $level = PEAR_LOG_DEBUG)
|
||||||
|
{
|
||||||
|
$this->_id = md5(microtime());
|
||||||
|
$this->_table = $name;
|
||||||
|
$this->_ident = $ident;
|
||||||
|
$this->_mask = Log::UPTO($level);
|
||||||
|
|
||||||
|
if (is_array($conf)) {
|
||||||
|
foreach ($conf as $k => $opt) {
|
||||||
|
$this->_options[$k] = $opt;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// If an existing database connection was provided, use it.
|
||||||
|
$this->_db =& $conf;
|
||||||
|
$this->_existingConnection = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens a connection to the database, if it has not already
|
||||||
|
* been opened. This is implicitly called by log(), if necessary.
|
||||||
|
*
|
||||||
|
* @return boolean True on success, false on failure.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function open()
|
||||||
|
{
|
||||||
|
if (is_resource($this->_db)) {
|
||||||
|
$this->_opened = true;
|
||||||
|
return $this->_createTable();
|
||||||
|
} else {
|
||||||
|
/* Set the connection function based on the 'persistent' option. */
|
||||||
|
if (empty($this->_options['persistent'])) {
|
||||||
|
$connectFunction = 'sqlite_open';
|
||||||
|
} else {
|
||||||
|
$connectFunction = 'sqlite_popen';
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Attempt to connect to the database. */
|
||||||
|
if ($this->_db = $connectFunction($this->_options['filename'],
|
||||||
|
(int)$this->_options['mode'],
|
||||||
|
$error)) {
|
||||||
|
$this->_opened = true;
|
||||||
|
return $this->_createTable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_opened;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the connection to the database if it is still open and we were
|
||||||
|
* the ones that opened it. It is the caller's responsible to close an
|
||||||
|
* existing connection that was passed to us via $conf['db'].
|
||||||
|
*
|
||||||
|
* @return boolean True on success, false on failure.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function close()
|
||||||
|
{
|
||||||
|
/* We never close existing connections. */
|
||||||
|
if ($this->_existingConnection) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->_opened) {
|
||||||
|
$this->_opened = false;
|
||||||
|
sqlite_close($this->_db);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($this->_opened === false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inserts $message to the currently open database. Calls open(),
|
||||||
|
* if necessary. Also passes the message along to any Log_observer
|
||||||
|
* instances that are observing this Log.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message to log.
|
||||||
|
* @param string $priority The priority of the message. Valid
|
||||||
|
* values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT,
|
||||||
|
* PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING,
|
||||||
|
* PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG.
|
||||||
|
* @return boolean True on success or false on failure.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function log($message, $priority = null)
|
||||||
|
{
|
||||||
|
/* If a priority hasn't been specified, use the default value. */
|
||||||
|
if ($priority === null) {
|
||||||
|
$priority = $this->_priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Abort early if the priority is above the maximum logging level. */
|
||||||
|
if (!$this->_isMasked($priority)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the connection isn't open and can't be opened, return failure. */
|
||||||
|
if (!$this->_opened && !$this->open()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extract the string representation of the message.
|
||||||
|
$message = $this->_extractMessage($message);
|
||||||
|
|
||||||
|
// Build the SQL query for this log entry insertion.
|
||||||
|
$q = sprintf('INSERT INTO [%s] (logtime, ident, priority, message) ' .
|
||||||
|
"VALUES ('%s', '%s', %d, '%s')",
|
||||||
|
$this->_table,
|
||||||
|
strftime('%Y-%m-%d %H:%M:%S', time()),
|
||||||
|
sqlite_escape_string($this->_ident),
|
||||||
|
$priority,
|
||||||
|
sqlite_escape_string($message));
|
||||||
|
if (!($res = @sqlite_unbuffered_query($this->_db, $q))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$this->_announce(array('priority' => $priority, 'message' => $message));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether the log table exists and creates it if necessary.
|
||||||
|
*
|
||||||
|
* @return boolean True on success or false on failure.
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _createTable()
|
||||||
|
{
|
||||||
|
$q = "SELECT name FROM sqlite_master WHERE name='" . $this->_table .
|
||||||
|
"' AND type='table'";
|
||||||
|
|
||||||
|
$res = sqlite_query($this->_db, $q);
|
||||||
|
|
||||||
|
if (sqlite_num_rows($res) == 0) {
|
||||||
|
$q = 'CREATE TABLE [' . $this->_table . '] (' .
|
||||||
|
'id INTEGER PRIMARY KEY NOT NULL, ' .
|
||||||
|
'logtime NOT NULL, ' .
|
||||||
|
'ident CHAR(16) NOT NULL, ' .
|
||||||
|
'priority INT NOT NULL, ' .
|
||||||
|
'message)';
|
||||||
|
|
||||||
|
if (!($res = sqlite_unbuffered_query($this->_db, $q))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
160
egw-pear/Log/syslog.php
Normal file
160
egw-pear/Log/syslog.php
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* $Header: /repository/pear/Log/Log/syslog.php,v 1.23 2005/02/26 14:48:59 chagenbu Exp $
|
||||||
|
* $Horde: horde/lib/Log/syslog.php,v 1.6 2000/06/28 21:36:13 jon Exp $
|
||||||
|
*
|
||||||
|
* @version $Revision: 1.23 $
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Log_syslog class is a concrete implementation of the Log::
|
||||||
|
* abstract class which sends messages to syslog on UNIX-like machines
|
||||||
|
* (PHP emulates this with the Event Log on Windows machines).
|
||||||
|
*
|
||||||
|
* @author Chuck Hagenbuch <chuck@horde.org>
|
||||||
|
* @since Horde 1.3
|
||||||
|
* @since Log 1.0
|
||||||
|
* @package Log
|
||||||
|
*
|
||||||
|
* @example syslog.php Using the syslog handler.
|
||||||
|
*/
|
||||||
|
class Log_syslog extends Log
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Integer holding the log facility to use.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_name = LOG_SYSLOG;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new syslog object.
|
||||||
|
*
|
||||||
|
* @param string $name The syslog facility.
|
||||||
|
* @param string $ident The identity string.
|
||||||
|
* @param array $conf The configuration array.
|
||||||
|
* @param int $level Log messages up to and including this level.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function Log_syslog($name, $ident = '', $conf = array(),
|
||||||
|
$level = PEAR_LOG_DEBUG)
|
||||||
|
{
|
||||||
|
/* Ensure we have a valid integer value for $name. */
|
||||||
|
if (empty($name) || !is_int($name)) {
|
||||||
|
$name = LOG_SYSLOG;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_id = md5(microtime());
|
||||||
|
$this->_name = $name;
|
||||||
|
$this->_ident = $ident;
|
||||||
|
$this->_mask = Log::UPTO($level);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens a connection to the system logger, if it has not already
|
||||||
|
* been opened. This is implicitly called by log(), if necessary.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function open()
|
||||||
|
{
|
||||||
|
if (!$this->_opened) {
|
||||||
|
openlog($this->_ident, LOG_PID, $this->_name);
|
||||||
|
$this->_opened = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_opened;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the connection to the system logger, if it is open.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function close()
|
||||||
|
{
|
||||||
|
if ($this->_opened) {
|
||||||
|
closelog();
|
||||||
|
$this->_opened = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($this->_opened === false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends $message to the currently open syslog connection. Calls
|
||||||
|
* open() if necessary. Also passes the message along to any Log_observer
|
||||||
|
* instances that are observing this Log.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message to log.
|
||||||
|
* @param int $priority (optional) The priority of the message. Valid
|
||||||
|
* values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT,
|
||||||
|
* PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING,
|
||||||
|
* PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG.
|
||||||
|
* @return boolean True on success or false on failure.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function log($message, $priority = null)
|
||||||
|
{
|
||||||
|
/* If a priority hasn't been specified, use the default value. */
|
||||||
|
if ($priority === null) {
|
||||||
|
$priority = $this->_priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Abort early if the priority is above the maximum logging level. */
|
||||||
|
if (!$this->_isMasked($priority)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the connection isn't open and can't be opened, return failure. */
|
||||||
|
if (!$this->_opened && !$this->open()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Extract the string representation of the message. */
|
||||||
|
$message = $this->_extractMessage($message);
|
||||||
|
|
||||||
|
if (!syslog($this->_toSyslog($priority), $message)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_announce(array('priority' => $priority, 'message' => $message));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a PEAR_LOG_* constant into a syslog LOG_* constant.
|
||||||
|
*
|
||||||
|
* This function exists because, under Windows, not all of the LOG_*
|
||||||
|
* constants have unique values. Instead, the PEAR_LOG_* were introduced
|
||||||
|
* for global use, with the conversion to the LOG_* constants kept local to
|
||||||
|
* to the syslog driver.
|
||||||
|
*
|
||||||
|
* @param int $priority PEAR_LOG_* value to convert to LOG_* value.
|
||||||
|
*
|
||||||
|
* @return The LOG_* representation of $priority.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _toSyslog($priority)
|
||||||
|
{
|
||||||
|
static $priorities = array(
|
||||||
|
PEAR_LOG_EMERG => LOG_EMERG,
|
||||||
|
PEAR_LOG_ALERT => LOG_ALERT,
|
||||||
|
PEAR_LOG_CRIT => LOG_CRIT,
|
||||||
|
PEAR_LOG_ERR => LOG_ERR,
|
||||||
|
PEAR_LOG_WARNING => LOG_WARNING,
|
||||||
|
PEAR_LOG_NOTICE => LOG_NOTICE,
|
||||||
|
PEAR_LOG_INFO => LOG_INFO,
|
||||||
|
PEAR_LOG_DEBUG => LOG_DEBUG
|
||||||
|
);
|
||||||
|
|
||||||
|
/* If we're passed an unknown priority, default to LOG_INFO. */
|
||||||
|
if (!is_int($priority) || !in_array($priority, $priorities)) {
|
||||||
|
return LOG_INFO;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $priorities[$priority];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
269
egw-pear/Log/win.php
Normal file
269
egw-pear/Log/win.php
Normal file
@ -0,0 +1,269 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* $Header: /repository/pear/Log/Log/win.php,v 1.20 2006/07/26 05:21:47 jon Exp $
|
||||||
|
*
|
||||||
|
* @version $Revision: 1.20 $
|
||||||
|
* @package Log
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Log_win class is a concrete implementation of the Log abstract
|
||||||
|
* class that logs messages to a separate browser window.
|
||||||
|
*
|
||||||
|
* The concept for this log handler is based on part by Craig Davis' article
|
||||||
|
* entitled "JavaScript Power PHP Debugging:
|
||||||
|
*
|
||||||
|
* http://www.zend.com/zend/tut/tutorial-DebugLib.php
|
||||||
|
*
|
||||||
|
* @author Jon Parise <jon@php.net>
|
||||||
|
* @since Log 1.7.0
|
||||||
|
* @package Log
|
||||||
|
*
|
||||||
|
* @example win.php Using the window handler.
|
||||||
|
*/
|
||||||
|
class Log_win extends Log
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The name of the output window.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_name = 'LogWindow';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The title of the output window.
|
||||||
|
* @var string
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_title = 'Log Output Window';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mapping of log priorities to styles.
|
||||||
|
* @var array
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_styles = array(
|
||||||
|
PEAR_LOG_EMERG => 'color: red;',
|
||||||
|
PEAR_LOG_ALERT => 'color: orange;',
|
||||||
|
PEAR_LOG_CRIT => 'color: yellow;',
|
||||||
|
PEAR_LOG_ERR => 'color: green;',
|
||||||
|
PEAR_LOG_WARNING => 'color: blue;',
|
||||||
|
PEAR_LOG_NOTICE => 'color: indigo;',
|
||||||
|
PEAR_LOG_INFO => 'color: violet;',
|
||||||
|
PEAR_LOG_DEBUG => 'color: black;'
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String buffer that holds line that are pending output.
|
||||||
|
* @var array
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
var $_buffer = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new Log_win object.
|
||||||
|
*
|
||||||
|
* @param string $name Ignored.
|
||||||
|
* @param string $ident The identity string.
|
||||||
|
* @param array $conf The configuration array.
|
||||||
|
* @param int $level Log messages up to and including this level.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function Log_win($name, $ident = '', $conf = array(),
|
||||||
|
$level = PEAR_LOG_DEBUG)
|
||||||
|
{
|
||||||
|
$this->_id = md5(microtime());
|
||||||
|
$this->_name = $name;
|
||||||
|
$this->_ident = $ident;
|
||||||
|
$this->_mask = Log::UPTO($level);
|
||||||
|
|
||||||
|
if (isset($conf['title'])) {
|
||||||
|
$this->_title = $conf['title'];
|
||||||
|
}
|
||||||
|
if (isset($conf['styles']) && is_array($conf['styles'])) {
|
||||||
|
$this->_styles = $conf['styles'];
|
||||||
|
}
|
||||||
|
if (isset($conf['colors']) && is_array($conf['colors'])) {
|
||||||
|
foreach ($conf['colors'] as $level => $color) {
|
||||||
|
$this->_styles[$level] .= "color: $color;";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
register_shutdown_function(array(&$this, '_Log_win'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destructor
|
||||||
|
*/
|
||||||
|
function _Log_win()
|
||||||
|
{
|
||||||
|
if ($this->_opened || (count($this->_buffer) > 0)) {
|
||||||
|
$this->close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The first time open() is called, it will open a new browser window and
|
||||||
|
* prepare it for output.
|
||||||
|
*
|
||||||
|
* This is implicitly called by log(), if necessary.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function open()
|
||||||
|
{
|
||||||
|
if (!$this->_opened) {
|
||||||
|
$win = $this->_name;
|
||||||
|
$styles = $this->_styles;
|
||||||
|
|
||||||
|
if (!empty($this->_ident)) {
|
||||||
|
$identHeader = "$win.document.writeln('<th>Ident</th>')";
|
||||||
|
} else {
|
||||||
|
$identHeader = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
echo <<< EOT
|
||||||
|
<script language="JavaScript">
|
||||||
|
$win = window.open('', '{$this->_name}', 'toolbar=no,scrollbars,width=600,height=400');
|
||||||
|
$win.document.writeln('<html>');
|
||||||
|
$win.document.writeln('<head>');
|
||||||
|
$win.document.writeln('<title>{$this->_title}</title>');
|
||||||
|
$win.document.writeln('<style type="text/css">');
|
||||||
|
$win.document.writeln('body { font-family: monospace; font-size: 8pt; }');
|
||||||
|
$win.document.writeln('td,th { font-size: 8pt; }');
|
||||||
|
$win.document.writeln('td,th { border-bottom: #999999 solid 1px; }');
|
||||||
|
$win.document.writeln('td,th { border-right: #999999 solid 1px; }');
|
||||||
|
$win.document.writeln('tr { text-align: left; vertical-align: top; }');
|
||||||
|
$win.document.writeln('td.l0 { $styles[0] }');
|
||||||
|
$win.document.writeln('td.l1 { $styles[1] }');
|
||||||
|
$win.document.writeln('td.l2 { $styles[2] }');
|
||||||
|
$win.document.writeln('td.l3 { $styles[3] }');
|
||||||
|
$win.document.writeln('td.l4 { $styles[4] }');
|
||||||
|
$win.document.writeln('td.l5 { $styles[5] }');
|
||||||
|
$win.document.writeln('td.l6 { $styles[6] }');
|
||||||
|
$win.document.writeln('td.l7 { $styles[7] }');
|
||||||
|
$win.document.writeln('</style>');
|
||||||
|
$win.document.writeln('</head>');
|
||||||
|
$win.document.writeln('<body>');
|
||||||
|
$win.document.writeln('<table border="0" cellpadding="2" cellspacing="0">');
|
||||||
|
$win.document.writeln('<tr><th>Time</th>');
|
||||||
|
$identHeader
|
||||||
|
$win.document.writeln('<th>Priority</th><th width="100%">Message</th></tr>');
|
||||||
|
</script>
|
||||||
|
EOT;
|
||||||
|
$this->_opened = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_opened;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes the output stream if it is open. If there are still pending
|
||||||
|
* lines in the output buffer, the output window will be opened so that
|
||||||
|
* the buffer can be drained.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function close()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* If there are still lines waiting to be written, open the output
|
||||||
|
* window so that we can drain the buffer.
|
||||||
|
*/
|
||||||
|
if (!$this->_opened && (count($this->_buffer) > 0)) {
|
||||||
|
$this->open();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->_opened) {
|
||||||
|
$this->_writeln('</table>');
|
||||||
|
$this->_writeln('</body></html>');
|
||||||
|
$this->_opened = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($this->_opened === false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Writes a single line of text to the output window.
|
||||||
|
*
|
||||||
|
* @param string $line The line of text to write.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _writeln($line)
|
||||||
|
{
|
||||||
|
/* Add this line to our output buffer. */
|
||||||
|
$this->_buffer[] = $line;
|
||||||
|
|
||||||
|
/* Buffer the output until this page's headers have been sent. */
|
||||||
|
if (!headers_sent()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we haven't already opened the output window, do so now. */
|
||||||
|
if (!$this->_opened && !$this->open()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Drain the buffer to the output window. */
|
||||||
|
$win = $this->_name;
|
||||||
|
foreach ($this->_buffer as $line) {
|
||||||
|
echo "<script language='JavaScript'>\n";
|
||||||
|
echo "$win.document.writeln('" . addslashes($line) . "');\n";
|
||||||
|
echo "self.focus();\n";
|
||||||
|
echo "</script>\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now that the buffer has been drained, clear it. */
|
||||||
|
$this->_buffer = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs $message to the output window. The message is also passed along
|
||||||
|
* to any Log_observer instances that are observing this Log.
|
||||||
|
*
|
||||||
|
* @param mixed $message String or object containing the message to log.
|
||||||
|
* @param string $priority The priority of the message. Valid
|
||||||
|
* values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT,
|
||||||
|
* PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING,
|
||||||
|
* PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG.
|
||||||
|
* @return boolean True on success or false on failure.
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function log($message, $priority = null)
|
||||||
|
{
|
||||||
|
/* If a priority hasn't been specified, use the default value. */
|
||||||
|
if ($priority === null) {
|
||||||
|
$priority = $this->_priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Abort early if the priority is above the maximum logging level. */
|
||||||
|
if (!$this->_isMasked($priority)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Extract the string representation of the message. */
|
||||||
|
$message = $this->_extractMessage($message);
|
||||||
|
$message = preg_replace('/\r\n|\n|\r/', '<br />', $message);
|
||||||
|
|
||||||
|
list($usec, $sec) = explode(' ', microtime());
|
||||||
|
|
||||||
|
/* Build the output line that contains the log entry row. */
|
||||||
|
$line = '<tr>';
|
||||||
|
$line .= sprintf('<td>%s.%s</td>',
|
||||||
|
strftime('%H:%M:%S', $sec), substr($usec, 2, 2));
|
||||||
|
if (!empty($this->_ident)) {
|
||||||
|
$line .= '<td>' . $this->_ident . '</td>';
|
||||||
|
}
|
||||||
|
$line .= '<td>' . ucfirst($this->priorityToString($priority)) . '</td>';
|
||||||
|
$line .= sprintf('<td class="l%d">%s</td>', $priority, $message);
|
||||||
|
$line .= '</tr>';
|
||||||
|
|
||||||
|
$this->_writeln($line);
|
||||||
|
|
||||||
|
$this->_announce(array('priority' => $priority, 'message' => $message));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
2785
egw-pear/Net/IMAP.php
Normal file
2785
egw-pear/Net/IMAP.php
Normal file
File diff suppressed because it is too large
Load Diff
3405
egw-pear/Net/IMAPProtocol.php
Normal file
3405
egw-pear/Net/IMAPProtocol.php
Normal file
File diff suppressed because it is too large
Load Diff
1145
egw-pear/Net/Sieve.php
Normal file
1145
egw-pear/Net/Sieve.php
Normal file
File diff suppressed because it is too large
Load Diff
556
egw-pear/Net/Socket.php
Normal file
556
egw-pear/Net/Socket.php
Normal file
@ -0,0 +1,556 @@
|
|||||||
|
<?php
|
||||||
|
//
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | PHP Version 4 |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | Copyright (c) 1997-2003 The PHP Group |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | This source file is subject to version 2.0 of the PHP license, |
|
||||||
|
// | that is bundled with this package in the file LICENSE, and is |
|
||||||
|
// | available at through the world-wide-web at |
|
||||||
|
// | http://www.php.net/license/2_02.txt. |
|
||||||
|
// | If you did not receive a copy of the PHP license and are unable to |
|
||||||
|
// | obtain it through the world-wide-web, please send a note to |
|
||||||
|
// | license@php.net so we can mail you a copy immediately. |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
// | Authors: Stig Bakken <ssb@php.net> |
|
||||||
|
// | Chuck Hagenbuch <chuck@horde.org> |
|
||||||
|
// +----------------------------------------------------------------------+
|
||||||
|
//
|
||||||
|
// $Id: Socket.php,v 1.28 2006/12/13 21:32:03 cweiske Exp $
|
||||||
|
|
||||||
|
require_once 'PEAR.php';
|
||||||
|
|
||||||
|
define('NET_SOCKET_READ', 1);
|
||||||
|
define('NET_SOCKET_WRITE', 2);
|
||||||
|
define('NET_SOCKET_ERROR', 4);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generalized Socket class.
|
||||||
|
*
|
||||||
|
* @version 1.1
|
||||||
|
* @author Stig Bakken <ssb@php.net>
|
||||||
|
* @author Chuck Hagenbuch <chuck@horde.org>
|
||||||
|
*/
|
||||||
|
class Net_Socket extends PEAR {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Socket file pointer.
|
||||||
|
* @var resource $fp
|
||||||
|
*/
|
||||||
|
var $fp = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the socket is blocking. Defaults to true.
|
||||||
|
* @var boolean $blocking
|
||||||
|
*/
|
||||||
|
var $blocking = true;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the socket is persistent. Defaults to false.
|
||||||
|
* @var boolean $persistent
|
||||||
|
*/
|
||||||
|
var $persistent = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The IP address to connect to.
|
||||||
|
* @var string $addr
|
||||||
|
*/
|
||||||
|
var $addr = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The port number to connect to.
|
||||||
|
* @var integer $port
|
||||||
|
*/
|
||||||
|
var $port = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Number of seconds to wait on socket connections before assuming
|
||||||
|
* there's no more data. Defaults to no timeout.
|
||||||
|
* @var integer $timeout
|
||||||
|
*/
|
||||||
|
var $timeout = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Number of bytes to read at a time in readLine() and
|
||||||
|
* readAll(). Defaults to 2048.
|
||||||
|
* @var integer $lineLength
|
||||||
|
*/
|
||||||
|
var $lineLength = 2048;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connect to the specified port. If called when the socket is
|
||||||
|
* already connected, it disconnects and connects again.
|
||||||
|
*
|
||||||
|
* @param string $addr IP address or host name.
|
||||||
|
* @param integer $port TCP port number.
|
||||||
|
* @param boolean $persistent (optional) Whether the connection is
|
||||||
|
* persistent (kept open between requests
|
||||||
|
* by the web server).
|
||||||
|
* @param integer $timeout (optional) How long to wait for data.
|
||||||
|
* @param array $options See options for stream_context_create.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
* @return boolean | PEAR_Error True on success or a PEAR_Error on failure.
|
||||||
|
*/
|
||||||
|
function connect($addr, $port = 0, $persistent = null, $timeout = null, $options = null)
|
||||||
|
{
|
||||||
|
if (is_resource($this->fp)) {
|
||||||
|
@fclose($this->fp);
|
||||||
|
$this->fp = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$addr) {
|
||||||
|
return $this->raiseError('$addr cannot be empty');
|
||||||
|
} elseif (strspn($addr, '.0123456789') == strlen($addr) ||
|
||||||
|
strstr($addr, '/') !== false) {
|
||||||
|
$this->addr = $addr;
|
||||||
|
} else {
|
||||||
|
$this->addr = @gethostbyname($addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->port = $port % 65536;
|
||||||
|
|
||||||
|
if ($persistent !== null) {
|
||||||
|
$this->persistent = $persistent;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($timeout !== null) {
|
||||||
|
$this->timeout = $timeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
$errno = 0;
|
||||||
|
$errstr = '';
|
||||||
|
if ($options && function_exists('stream_socket_client')) {
|
||||||
|
if ($this->timeout) {
|
||||||
|
$timeout = $this->timeout;
|
||||||
|
} else {
|
||||||
|
$timeout = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$context = stream_context_create($options);
|
||||||
|
$flags = ($this->persistent === true ? STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT : STREAM_CLIENT_CONNECT);
|
||||||
|
$fp = @stream_socket_client($this->addr.':'.$this->port, $errno, $errstr, $timeout, $flags, $context);
|
||||||
|
} else {
|
||||||
|
$openfunc = $this->persistent ? 'pfsockopen' : 'fsockopen';
|
||||||
|
if ($this->timeout) {
|
||||||
|
$fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $this->timeout);
|
||||||
|
} else {
|
||||||
|
$fp = @$openfunc($this->addr, $this->port, $errno, $errstr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$fp) {
|
||||||
|
return $this->raiseError($errstr, $errno);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->fp = $fp;
|
||||||
|
|
||||||
|
return $this->setBlocking($this->blocking);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnects from the peer, closes the socket.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return mixed true on success or an error object otherwise
|
||||||
|
*/
|
||||||
|
function disconnect()
|
||||||
|
{
|
||||||
|
if (!is_resource($this->fp)) {
|
||||||
|
return $this->raiseError('not connected');
|
||||||
|
}
|
||||||
|
|
||||||
|
@fclose($this->fp);
|
||||||
|
$this->fp = null;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find out if the socket is in blocking mode.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return boolean The current blocking mode.
|
||||||
|
*/
|
||||||
|
function isBlocking()
|
||||||
|
{
|
||||||
|
return $this->blocking;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets whether the socket connection should be blocking or
|
||||||
|
* not. A read call to a non-blocking socket will return immediately
|
||||||
|
* if there is no data available, whereas it will block until there
|
||||||
|
* is data for blocking sockets.
|
||||||
|
*
|
||||||
|
* @param boolean $mode True for blocking sockets, false for nonblocking.
|
||||||
|
* @access public
|
||||||
|
* @return mixed true on success or an error object otherwise
|
||||||
|
*/
|
||||||
|
function setBlocking($mode)
|
||||||
|
{
|
||||||
|
if (!is_resource($this->fp)) {
|
||||||
|
return $this->raiseError('not connected');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->blocking = $mode;
|
||||||
|
socket_set_blocking($this->fp, $this->blocking);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the timeout value on socket descriptor,
|
||||||
|
* expressed in the sum of seconds and microseconds
|
||||||
|
*
|
||||||
|
* @param integer $seconds Seconds.
|
||||||
|
* @param integer $microseconds Microseconds.
|
||||||
|
* @access public
|
||||||
|
* @return mixed true on success or an error object otherwise
|
||||||
|
*/
|
||||||
|
function setTimeout($seconds, $microseconds)
|
||||||
|
{
|
||||||
|
if (!is_resource($this->fp)) {
|
||||||
|
return $this->raiseError('not connected');
|
||||||
|
}
|
||||||
|
|
||||||
|
return socket_set_timeout($this->fp, $seconds, $microseconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the file buffering size on the stream.
|
||||||
|
* See php's stream_set_write_buffer for more information.
|
||||||
|
*
|
||||||
|
* @param integer $size Write buffer size.
|
||||||
|
* @access public
|
||||||
|
* @return mixed on success or an PEAR_Error object otherwise
|
||||||
|
*/
|
||||||
|
function setWriteBuffer($size)
|
||||||
|
{
|
||||||
|
if (!is_resource($this->fp)) {
|
||||||
|
return $this->raiseError('not connected');
|
||||||
|
}
|
||||||
|
|
||||||
|
$returned = stream_set_write_buffer($this->fp, $code);
|
||||||
|
if ($returned == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return $this->raiseError('Cannot set write buffer.');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns information about an existing socket resource.
|
||||||
|
* Currently returns four entries in the result array:
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* timed_out (bool) - The socket timed out waiting for data<br>
|
||||||
|
* blocked (bool) - The socket was blocked<br>
|
||||||
|
* eof (bool) - Indicates EOF event<br>
|
||||||
|
* unread_bytes (int) - Number of bytes left in the socket buffer<br>
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return mixed Array containing information about existing socket resource or an error object otherwise
|
||||||
|
*/
|
||||||
|
function getStatus()
|
||||||
|
{
|
||||||
|
if (!is_resource($this->fp)) {
|
||||||
|
return $this->raiseError('not connected');
|
||||||
|
}
|
||||||
|
|
||||||
|
return socket_get_status($this->fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a specified line of data
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return $size bytes of data from the socket, or a PEAR_Error if
|
||||||
|
* not connected.
|
||||||
|
*/
|
||||||
|
function gets($size)
|
||||||
|
{
|
||||||
|
if (!is_resource($this->fp)) {
|
||||||
|
return $this->raiseError('not connected');
|
||||||
|
}
|
||||||
|
|
||||||
|
return @fgets($this->fp, $size);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read a specified amount of data. This is guaranteed to return,
|
||||||
|
* and has the added benefit of getting everything in one fread()
|
||||||
|
* chunk; if you know the size of the data you're getting
|
||||||
|
* beforehand, this is definitely the way to go.
|
||||||
|
*
|
||||||
|
* @param integer $size The number of bytes to read from the socket.
|
||||||
|
* @access public
|
||||||
|
* @return $size bytes of data from the socket, or a PEAR_Error if
|
||||||
|
* not connected.
|
||||||
|
*/
|
||||||
|
function read($size)
|
||||||
|
{
|
||||||
|
if (!is_resource($this->fp)) {
|
||||||
|
return $this->raiseError('not connected');
|
||||||
|
}
|
||||||
|
|
||||||
|
return @fread($this->fp, $size);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write a specified amount of data.
|
||||||
|
*
|
||||||
|
* @param string $data Data to write.
|
||||||
|
* @param integer $blocksize Amount of data to write at once.
|
||||||
|
* NULL means all at once.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return mixed true on success or an error object otherwise
|
||||||
|
*/
|
||||||
|
function write($data, $blocksize = null)
|
||||||
|
{
|
||||||
|
if (!is_resource($this->fp)) {
|
||||||
|
return $this->raiseError('not connected');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_null($blocksize) && !OS_WINDOWS) {
|
||||||
|
return fwrite($this->fp, $data);
|
||||||
|
} else {
|
||||||
|
if (is_null($blocksize)) {
|
||||||
|
$blocksize = 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
$pos = 0;
|
||||||
|
$size = strlen($data);
|
||||||
|
while ($pos < $size) {
|
||||||
|
$written = @fwrite($this->fp, substr($data, $pos, $blocksize));
|
||||||
|
if ($written === false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$pos += $written;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $pos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write a line of data to the socket, followed by a trailing "\r\n".
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return mixed fputs result, or an error
|
||||||
|
*/
|
||||||
|
function writeLine($data)
|
||||||
|
{
|
||||||
|
if (!is_resource($this->fp)) {
|
||||||
|
return $this->raiseError('not connected');
|
||||||
|
}
|
||||||
|
|
||||||
|
return fwrite($this->fp, $data . "\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests for end-of-file on a socket descriptor.
|
||||||
|
*
|
||||||
|
* Also returns true if the socket is disconnected.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
function eof()
|
||||||
|
{
|
||||||
|
return (!is_resource($this->fp) || feof($this->fp));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads a byte of data
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return 1 byte of data from the socket, or a PEAR_Error if
|
||||||
|
* not connected.
|
||||||
|
*/
|
||||||
|
function readByte()
|
||||||
|
{
|
||||||
|
if (!is_resource($this->fp)) {
|
||||||
|
return $this->raiseError('not connected');
|
||||||
|
}
|
||||||
|
|
||||||
|
return ord(@fread($this->fp, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads a word of data
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return 1 word of data from the socket, or a PEAR_Error if
|
||||||
|
* not connected.
|
||||||
|
*/
|
||||||
|
function readWord()
|
||||||
|
{
|
||||||
|
if (!is_resource($this->fp)) {
|
||||||
|
return $this->raiseError('not connected');
|
||||||
|
}
|
||||||
|
|
||||||
|
$buf = @fread($this->fp, 2);
|
||||||
|
return (ord($buf[0]) + (ord($buf[1]) << 8));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads an int of data
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return integer 1 int of data from the socket, or a PEAR_Error if
|
||||||
|
* not connected.
|
||||||
|
*/
|
||||||
|
function readInt()
|
||||||
|
{
|
||||||
|
if (!is_resource($this->fp)) {
|
||||||
|
return $this->raiseError('not connected');
|
||||||
|
}
|
||||||
|
|
||||||
|
$buf = @fread($this->fp, 4);
|
||||||
|
return (ord($buf[0]) + (ord($buf[1]) << 8) +
|
||||||
|
(ord($buf[2]) << 16) + (ord($buf[3]) << 24));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads a zero-terminated string of data
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return string, or a PEAR_Error if
|
||||||
|
* not connected.
|
||||||
|
*/
|
||||||
|
function readString()
|
||||||
|
{
|
||||||
|
if (!is_resource($this->fp)) {
|
||||||
|
return $this->raiseError('not connected');
|
||||||
|
}
|
||||||
|
|
||||||
|
$string = '';
|
||||||
|
while (($char = @fread($this->fp, 1)) != "\x00") {
|
||||||
|
$string .= $char;
|
||||||
|
}
|
||||||
|
return $string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads an IP Address and returns it in a dot formated string
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return Dot formated string, or a PEAR_Error if
|
||||||
|
* not connected.
|
||||||
|
*/
|
||||||
|
function readIPAddress()
|
||||||
|
{
|
||||||
|
if (!is_resource($this->fp)) {
|
||||||
|
return $this->raiseError('not connected');
|
||||||
|
}
|
||||||
|
|
||||||
|
$buf = @fread($this->fp, 4);
|
||||||
|
return sprintf("%s.%s.%s.%s", ord($buf[0]), ord($buf[1]),
|
||||||
|
ord($buf[2]), ord($buf[3]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read until either the end of the socket or a newline, whichever
|
||||||
|
* comes first. Strips the trailing newline from the returned data.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return All available data up to a newline, without that
|
||||||
|
* newline, or until the end of the socket, or a PEAR_Error if
|
||||||
|
* not connected.
|
||||||
|
*/
|
||||||
|
function readLine()
|
||||||
|
{
|
||||||
|
if (!is_resource($this->fp)) {
|
||||||
|
return $this->raiseError('not connected');
|
||||||
|
}
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
$line = '';
|
||||||
|
$timeout = time() + $this->timeout;
|
||||||
|
while (!feof($this->fp) && (!$this->timeout || time() < $timeout)) {
|
||||||
|
$line .= fgets($this->fp, $this->lineLength);
|
||||||
|
if (substr($line, -1) == "\n") {
|
||||||
|
ob_end_clean();
|
||||||
|
return rtrim($line, "\r\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ob_end_clean();
|
||||||
|
return $line;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read until the socket closes, or until there is no more data in
|
||||||
|
* the inner PHP buffer. If the inner buffer is empty, in blocking
|
||||||
|
* mode we wait for at least 1 byte of data. Therefore, in
|
||||||
|
* blocking mode, if there is no data at all to be read, this
|
||||||
|
* function will never exit (unless the socket is closed on the
|
||||||
|
* remote end).
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*
|
||||||
|
* @return string All data until the socket closes, or a PEAR_Error if
|
||||||
|
* not connected.
|
||||||
|
*/
|
||||||
|
function readAll()
|
||||||
|
{
|
||||||
|
if (!is_resource($this->fp)) {
|
||||||
|
return $this->raiseError('not connected');
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = '';
|
||||||
|
while (!feof($this->fp)) {
|
||||||
|
$data .= @fread($this->fp, $this->lineLength);
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Runs the equivalent of the select() system call on the socket
|
||||||
|
* with a timeout specified by tv_sec and tv_usec.
|
||||||
|
*
|
||||||
|
* @param integer $state Which of read/write/error to check for.
|
||||||
|
* @param integer $tv_sec Number of seconds for timeout.
|
||||||
|
* @param integer $tv_usec Number of microseconds for timeout.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return False if select fails, integer describing which of read/write/error
|
||||||
|
* are ready, or PEAR_Error if not connected.
|
||||||
|
*/
|
||||||
|
function select($state, $tv_sec, $tv_usec = 0)
|
||||||
|
{
|
||||||
|
if (!is_resource($this->fp)) {
|
||||||
|
return $this->raiseError('not connected');
|
||||||
|
}
|
||||||
|
|
||||||
|
$read = null;
|
||||||
|
$write = null;
|
||||||
|
$except = null;
|
||||||
|
if ($state & NET_SOCKET_READ) {
|
||||||
|
$read[] = $this->fp;
|
||||||
|
}
|
||||||
|
if ($state & NET_SOCKET_WRITE) {
|
||||||
|
$write[] = $this->fp;
|
||||||
|
}
|
||||||
|
if ($state & NET_SOCKET_ERROR) {
|
||||||
|
$except[] = $this->fp;
|
||||||
|
}
|
||||||
|
if (false === ($sr = stream_select($read, $write, $except, $tv_sec, $tv_usec))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = 0;
|
||||||
|
if (count($read)) {
|
||||||
|
$result |= NET_SOCKET_READ;
|
||||||
|
}
|
||||||
|
if (count($write)) {
|
||||||
|
$result |= NET_SOCKET_WRITE;
|
||||||
|
}
|
||||||
|
if (count($except)) {
|
||||||
|
$result |= NET_SOCKET_ERROR;
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
49
egw-pear/setup/setup.inc.php
Normal file
49
egw-pear/setup/setup.inc.php
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* eGroupWare - PEAR
|
||||||
|
*
|
||||||
|
* @link http://www.egroupware.org
|
||||||
|
* @package egw-pear
|
||||||
|
* @subpackage setup
|
||||||
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
$setup_info['egw-pear']['name'] = 'egw-pear';
|
||||||
|
$setup_info['egw-pear']['title'] = 'egw-pear';
|
||||||
|
$setup_info['egw-pear']['version'] = '1.4.000';
|
||||||
|
$setup_info['egw-pear']['app_order'] = 99;
|
||||||
|
$setup_info['egw-pear']['enable'] = 0; // no need to show anywhere in EGroupware
|
||||||
|
|
||||||
|
$setup_info['egw-pear']['author'] = array(
|
||||||
|
'name' => 'PEAR - PHP Extension and Application Repository',
|
||||||
|
'url' => 'http://pear.php.net',
|
||||||
|
);
|
||||||
|
$setup_info['egw-pear']['license'] = 'PHP';
|
||||||
|
$setup_info['egw-pear']['description'] =
|
||||||
|
'A place for PEAR modules modified for eGroupWare.';
|
||||||
|
|
||||||
|
$setup_info['egw-pear']['note'] =
|
||||||
|
'This application is a place for PEAR modules used by eGroupWare, which are NOT YET available from pear,
|
||||||
|
because we patched them somehow and the PEAR modules are not released upstream.
|
||||||
|
This application is under the LGPL license because the GPL is not compatible with the PHP license.
|
||||||
|
If the modules are available from PEAR they do NOT belong here anymore.';
|
||||||
|
|
||||||
|
$setup_info['egw-pear']['maintainer'] = array(
|
||||||
|
'name' => 'eGroupWare coreteam',
|
||||||
|
'email' => 'egroupware-developers@lists.sourceforge.net',
|
||||||
|
);
|
||||||
|
|
||||||
|
// installation checks for egw-pear
|
||||||
|
$setup_info['egw-pear']['check_install'] = array(
|
||||||
|
// we need pear itself to be installed
|
||||||
|
'' => array(
|
||||||
|
'func' => 'pear_check',
|
||||||
|
'from' => 'FeLaMiMail',
|
||||||
|
),
|
||||||
|
// Net_Socket is required from Net_IMAP & Net_Sieve
|
||||||
|
'Net_Socket' => array(
|
||||||
|
'func' => 'pear_check',
|
||||||
|
'from' => 'FeLaMiMail',
|
||||||
|
),
|
||||||
|
);
|
49
emailadmin/Changelog
Normal file
49
emailadmin/Changelog
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
2007-06-19 Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* added support for defining signature handling in emailadmin
|
||||||
|
|
||||||
|
2007-01-05 Lars Kneschke <lkneschke@metaways.de>
|
||||||
|
* improved parsing of content-type response
|
||||||
|
|
||||||
|
2007-01-03 Lars Kneschke <lkneschke@metaways.de>
|
||||||
|
* enabled renaming of dbmail accounts
|
||||||
|
* made SSL/TLS settings working again
|
||||||
|
|
||||||
|
2006-12-31 Lars Kneschke <lkneschke@metaways.de>
|
||||||
|
* major rewrite of the imap backend. the imap backend is not handled
|
||||||
|
by the php extension php-imap anymore, but the PEAR class Net_IMAP.
|
||||||
|
* improved handling of namespaces
|
||||||
|
* improved performance of most imap operations
|
||||||
|
* improved folderhandling
|
||||||
|
* make emailadmin dependent on egw-pear
|
||||||
|
|
||||||
|
20061010 lkneschke@metaways.de
|
||||||
|
|
||||||
|
- added support for dbmailuser schema
|
||||||
|
|
||||||
|
20060416 RalfBecker-AT-outdoor-training.de:
|
||||||
|
|
||||||
|
- added plesk plugin to create mail accounts and manage passwords, aliases
|
||||||
|
forwards and quota on a plesk system (tested with plesk7.5 Linux)
|
||||||
|
|
||||||
|
20051128
|
||||||
|
|
||||||
|
- added function to retrieve users profile based on applicationname and
|
||||||
|
groupmembership. No need to select profile as admin anymore.
|
||||||
|
|
||||||
|
20051120
|
||||||
|
|
||||||
|
- fixed opening "edit profile" dialog in new window
|
||||||
|
- fixed handling of groups in "edit profile" dialog
|
||||||
|
|
||||||
|
20051123
|
||||||
|
|
||||||
|
- polished gui a little bit. the gui looks much better now. at least i hope so :-)
|
||||||
|
- added option to define global used smtp auth options
|
||||||
|
- made multiple profiles useable. you can now assign profiles depending on
|
||||||
|
application name and group membership.
|
||||||
|
|
||||||
|
|
||||||
|
20051013
|
||||||
|
|
||||||
|
- Postfix LDAP users can now update there email forwardingaddress
|
||||||
|
themself(if enabled)
|
71
emailadmin/doc/dbmail.schema
Normal file
71
emailadmin/doc/dbmail.schema
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#
|
||||||
|
# dbmail-ldap v3 directory schema
|
||||||
|
#
|
||||||
|
# Based on the Qmail schema
|
||||||
|
# Modified for dbmail by Paul Stevens <paul@nfg.nl>
|
||||||
|
# Modified for dbmail by Lars Kneschke <lkneschke@metaways.de> too
|
||||||
|
#
|
||||||
|
# This schema depends on:
|
||||||
|
# - core.schema
|
||||||
|
# - cosine.schema
|
||||||
|
# - nis.schema
|
||||||
|
#
|
||||||
|
# This schema conflicts with
|
||||||
|
# - qmailuser.schema
|
||||||
|
|
||||||
|
# Attribute Type Definitions
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.12340.6.2.1.1 NAME 'mailQuota'
|
||||||
|
DESC 'The amount of space the user can use until all further messages get bounced.'
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.44
|
||||||
|
SINGLE-VALUE )
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.12340.6.2.1.2 NAME 'mailForwardingAddress'
|
||||||
|
DESC 'Address(es) to forward all incoming messages to.'
|
||||||
|
EQUALITY caseIgnoreIA5Match
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.12340.6.2.1.3 NAME 'mailHost'
|
||||||
|
DESC 'Name or address of the MTA host to use for recipient'
|
||||||
|
EQUALITY caseIgnoreIA5Match
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.12340.6.2.1.4 NAME 'dbmailUID'
|
||||||
|
DESC 'UID of the user on the mailsystem'
|
||||||
|
EQUALITY caseIgnoreIA5Match
|
||||||
|
SUBSTR caseIgnoreIA5SubstringsMatch
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
|
||||||
|
SINGLE-VALUE )
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.12340.6.2.1.5 NAME 'dbmailGID'
|
||||||
|
DESC 'GID of the user on the mailsystem'
|
||||||
|
EQUALITY caseIgnoreIA5Match
|
||||||
|
SUBSTR caseIgnoreIA5SubstringsMatch
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
|
||||||
|
SINGLE-VALUE )
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.12340.6.2.1.6 NAME 'mailAlternateAddress'
|
||||||
|
DESC 'Secondary (alias) mailaddresses for the same user'
|
||||||
|
EQUALITY caseIgnoreIA5Match
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.12340.6.2.1.7 NAME 'deliveryMode'
|
||||||
|
DESC 'multi field entries of: normal, forwardonly'
|
||||||
|
EQUALITY caseIgnoreMatch
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.44 SINGLE-VALUE )
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.12340.6.2.1.8 NAME 'accountStatus'
|
||||||
|
DESC 'The status of a user account: active, disabled'
|
||||||
|
EQUALITY caseIgnoreMatch
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.44 SINGLE-VALUE )
|
||||||
|
|
||||||
|
# Object Class Definitions
|
||||||
|
|
||||||
|
objectclass ( 1.3.6.1.4.1.12340.6.2.2.1 NAME 'dbmailUser'
|
||||||
|
DESC 'DBMail-LDAP User' SUP top AUXILIARY
|
||||||
|
MUST ( uid $ mail )
|
||||||
|
MAY ( userPassword $ uidNumber $ gidNumber $ mailQuota $ mailForwardingAddress $ mailHost $ mailAlternateAddress $ dbmailUID $ dbmailGID $ deliveryMode $ accountStatus ) )
|
||||||
|
|
||||||
|
objectclass ( 1.3.6.1.4.1.12340.6.2.2.2 NAME 'dbmailForwardingAddress'
|
||||||
|
DESC 'DBMail-LDAP Forwarding Address' SUP top AUXILIARY
|
||||||
|
MUST ( mail $ mailForwardingAddress ) )
|
754
emailadmin/doc/main.cf
Normal file
754
emailadmin/doc/main.cf
Normal file
@ -0,0 +1,754 @@
|
|||||||
|
# Global Postfix configuration file. This file lists only a subset
|
||||||
|
# of all 300+ parameters. See the sample-xxx.cf files for a full list.
|
||||||
|
#
|
||||||
|
# The general format is lines with parameter = value pairs. Lines
|
||||||
|
# that begin with whitespace continue the previous line. A value can
|
||||||
|
# contain references to other $names or ${name}s.
|
||||||
|
#
|
||||||
|
# NOTE - CHANGE NO MORE THAN 2-3 PARAMETERS AT A TIME, AND TEST IF
|
||||||
|
# POSTFIX STILL WORKS AFTER EVERY CHANGE.
|
||||||
|
|
||||||
|
# SOFT BOUNCE
|
||||||
|
#
|
||||||
|
# The soft_bounce parameter provides a limited safety net for
|
||||||
|
# testing. When soft_bounce is enabled, mail will remain queued that
|
||||||
|
# would otherwise bounce. This parameter disables locally-generated
|
||||||
|
# bounces, and prevents the SMTP server from rejecting mail permanently
|
||||||
|
# (by changing 5xx replies into 4xx replies). However, soft_bounce
|
||||||
|
# is no cure for address rewriting mistakes or mail routing mistakes.
|
||||||
|
#
|
||||||
|
#soft_bounce = no
|
||||||
|
|
||||||
|
# LOCAL PATHNAME INFORMATION
|
||||||
|
#
|
||||||
|
# The queue_directory specifies the location of the Postfix queue.
|
||||||
|
# This is also the root directory of Postfix daemons that run chrooted.
|
||||||
|
# See the files in examples/chroot-setup for setting up Postfix chroot
|
||||||
|
# environments on different UNIX systems.
|
||||||
|
#
|
||||||
|
queue_directory = /var/spool/postfix
|
||||||
|
|
||||||
|
# The command_directory parameter specifies the location of all
|
||||||
|
# postXXX commands.
|
||||||
|
#
|
||||||
|
command_directory = /usr/sbin
|
||||||
|
|
||||||
|
# The daemon_directory parameter specifies the location of all Postfix
|
||||||
|
# daemon programs (i.e. programs listed in the master.cf file). This
|
||||||
|
# directory must be owned by root.
|
||||||
|
#
|
||||||
|
daemon_directory = /usr/lib/postfix
|
||||||
|
|
||||||
|
# QUEUE AND PROCESS OWNERSHIP
|
||||||
|
#
|
||||||
|
# The mail_owner parameter specifies the owner of the Postfix queue
|
||||||
|
# and of most Postfix daemon processes. Specify the name of a user
|
||||||
|
# account THAT DOES NOT SHARE ITS USER OR GROUP ID WITH OTHER ACCOUNTS
|
||||||
|
# AND THAT OWNS NO OTHER FILES OR PROCESSES ON THE SYSTEM. In
|
||||||
|
# particular, don't specify nobody or daemon. PLEASE USE A DEDICATED
|
||||||
|
# USER.
|
||||||
|
#
|
||||||
|
mail_owner = postfix
|
||||||
|
|
||||||
|
# The default_privs parameter specifies the default rights used by
|
||||||
|
# the local delivery agent for delivery to external file or command.
|
||||||
|
# These rights are used in the absence of a recipient user context.
|
||||||
|
# DO NOT SPECIFY A PRIVILEGED USER OR THE POSTFIX OWNER.
|
||||||
|
#
|
||||||
|
#default_privs = nobody
|
||||||
|
|
||||||
|
# INTERNET HOST AND DOMAIN NAMES
|
||||||
|
#
|
||||||
|
# The myhostname parameter specifies the internet hostname of this
|
||||||
|
# mail system. The default is to use the fully-qualified domain name
|
||||||
|
# from gethostname(). $myhostname is used as a default value for many
|
||||||
|
# other configuration parameters.
|
||||||
|
#
|
||||||
|
#myhostname = host.domain.tld
|
||||||
|
#myhostname = virtual.domain.tld
|
||||||
|
|
||||||
|
# The mydomain parameter specifies the local internet domain name.
|
||||||
|
# The default is to use $myhostname minus the first component.
|
||||||
|
# $mydomain is used as a default value for many other configuration
|
||||||
|
# parameters.
|
||||||
|
#
|
||||||
|
#mydomain = domain.tld
|
||||||
|
|
||||||
|
# SENDING MAIL
|
||||||
|
#
|
||||||
|
# The myorigin parameter specifies the domain that locally-posted
|
||||||
|
# mail appears to come from. The default is to append $myhostname,
|
||||||
|
# which is fine for small sites. If you run a domain with multiple
|
||||||
|
# machines, you should (1) change this to $mydomain and (2) set up
|
||||||
|
# a domain-wide alias database that aliases each user to
|
||||||
|
# user@that.users.mailhost.
|
||||||
|
#
|
||||||
|
# For the sake of consistency between sender and recipient addresses,
|
||||||
|
# myorigin also specifies the default domain name that is appended
|
||||||
|
# to recipient addresses that have no @domain part.
|
||||||
|
#
|
||||||
|
#myorigin = $myhostname
|
||||||
|
#myorigin = $mydomain
|
||||||
|
|
||||||
|
# RECEIVING MAIL
|
||||||
|
|
||||||
|
# The inet_interfaces parameter specifies the network interface
|
||||||
|
# addresses that this mail system receives mail on. By default,
|
||||||
|
# the software claims all active interfaces on the machine. The
|
||||||
|
# parameter also controls delivery of mail to user@[ip.address].
|
||||||
|
#
|
||||||
|
# See also the proxy_interfaces parameter, for network addresses that
|
||||||
|
# are forwarded to us via a proxy or network address translator.
|
||||||
|
#
|
||||||
|
# Note: you need to stop/start Postfix when this parameter changes.
|
||||||
|
#
|
||||||
|
#inet_interfaces = all
|
||||||
|
#inet_interfaces = $myhostname
|
||||||
|
#inet_interfaces = $myhostname, localhost
|
||||||
|
|
||||||
|
# The proxy_interfaces parameter specifies the network interface
|
||||||
|
# addresses that this mail system receives mail on by way of a
|
||||||
|
# proxy or network address translation unit. This setting extends
|
||||||
|
# the address list specified with the inet_interfaces parameter.
|
||||||
|
#
|
||||||
|
# You must specify your proxy/NAT addresses when your system is a
|
||||||
|
# backup MX host for other domains, otherwise mail delivery loops
|
||||||
|
# will happen when the primary MX host is down.
|
||||||
|
#
|
||||||
|
#proxy_interfaces =
|
||||||
|
#proxy_interfaces = 1.2.3.4
|
||||||
|
|
||||||
|
# The mydestination parameter specifies the list of domains that this
|
||||||
|
# machine considers itself the final destination for.
|
||||||
|
#
|
||||||
|
# These domains are routed to the delivery agent specified with the
|
||||||
|
# local_transport parameter setting. By default, that is the UNIX
|
||||||
|
# compatible delivery agent that lookups all recipients in /etc/passwd
|
||||||
|
# and /etc/aliases or their equivalent.
|
||||||
|
#
|
||||||
|
# The default is $myhostname + localhost.$mydomain. On a mail domain
|
||||||
|
# gateway, you should also include $mydomain.
|
||||||
|
#
|
||||||
|
# Do not specify the names of virtual domains - those domains are
|
||||||
|
# specified elsewhere (see sample-virtual.cf).
|
||||||
|
#
|
||||||
|
# Do not specify the names of domains that this machine is backup MX
|
||||||
|
# host for. Specify those names via the relay_domains settings for
|
||||||
|
# the SMTP server, or use permit_mx_backup if you are lazy (see
|
||||||
|
# sample-smtpd.cf).
|
||||||
|
#
|
||||||
|
# The local machine is always the final destination for mail addressed
|
||||||
|
# to user@[the.net.work.address] of an interface that the mail system
|
||||||
|
# receives mail on (see the inet_interfaces parameter).
|
||||||
|
#
|
||||||
|
# Specify a list of host or domain names, /file/name or type:table
|
||||||
|
# patterns, separated by commas and/or whitespace. A /file/name
|
||||||
|
# pattern is replaced by its contents; a type:table is matched when
|
||||||
|
# a name matches a lookup key (the right-hand side is ignored).
|
||||||
|
# Continue long lines by starting the next line with whitespace.
|
||||||
|
#
|
||||||
|
# DO NOT LIST RELAY DESTINATIONS IN MYDESTINATION.
|
||||||
|
# SPECIFY RELAY DESTINATIONS IN RELAY_DOMAINS.
|
||||||
|
#
|
||||||
|
# See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS".
|
||||||
|
#
|
||||||
|
#mydestination = $myhostname, localhost.$mydomain
|
||||||
|
#mydestination = $myhostname, localhost.$mydomain $mydomain
|
||||||
|
#mydestination = $myhostname, localhost.$mydomain, $mydomain,
|
||||||
|
# mail.$mydomain, www.$mydomain, ftp.$mydomain
|
||||||
|
mydestination = $myhostname, localhost.$mydomain $mydomain,
|
||||||
|
kneschke.de, phpgw.de, egroupware.org, linux-at-work.de, lists.kneschke.de
|
||||||
|
|
||||||
|
# REJECTING MAIL FOR UNKNOWN LOCAL USERS
|
||||||
|
#
|
||||||
|
# The local_recipient_maps parameter specifies optional lookup tables
|
||||||
|
# with all names or addresses of users that are local with respect
|
||||||
|
# to $mydestination and $inet_interfaces.
|
||||||
|
#
|
||||||
|
# If this parameter is defined, then the SMTP server will reject
|
||||||
|
# mail for unknown local users. This parameter is defined by default.
|
||||||
|
#
|
||||||
|
# To turn off local recipient checking in the SMTP server, specify
|
||||||
|
# local_recipient_maps = (i.e. empty).
|
||||||
|
#
|
||||||
|
# The default setting assumes that you use the default Postfix local
|
||||||
|
# delivery agent for local delivery. You need to update the
|
||||||
|
# local_recipient_maps setting if:
|
||||||
|
#
|
||||||
|
# - You define $mydestination domain recipients in files other than
|
||||||
|
# /etc/passwd, /etc/aliases, or the $virtual_alias_maps files.
|
||||||
|
# For example, you define $mydestination domain recipients in
|
||||||
|
# the $virtual_mailbox_maps files.
|
||||||
|
#
|
||||||
|
# - You redefine the local delivery agent in master.cf.
|
||||||
|
#
|
||||||
|
# - You redefine the "local_transport" setting in main.cf.
|
||||||
|
#
|
||||||
|
# - You use the "luser_relay", "mailbox_transport", or "fallback_transport"
|
||||||
|
# feature of the Postfix local delivery agent (see sample-local.cf).
|
||||||
|
#
|
||||||
|
# Details are described in the LOCAL_RECIPIENT_README file.
|
||||||
|
#
|
||||||
|
# Beware: if the Postfix SMTP server runs chrooted, you probably have
|
||||||
|
# to access the passwd file via the proxymap service, in order to
|
||||||
|
# overcome chroot restrictions. The alternative, having a copy of
|
||||||
|
# the system passwd file in the chroot jail is just not practical.
|
||||||
|
#
|
||||||
|
# The right-hand side of the lookup tables is conveniently ignored.
|
||||||
|
# In the left-hand side, specify a bare username, an @domain.tld
|
||||||
|
# wild-card, or specify a user@domain.tld address.
|
||||||
|
#
|
||||||
|
#local_recipient_maps = unix:passwd.byname $alias_maps
|
||||||
|
#local_recipient_maps = proxy:unix:passwd.byname $alias_maps
|
||||||
|
#local_recipient_maps =
|
||||||
|
|
||||||
|
# The unknown_local_recipient_reject_code specifies the SMTP server
|
||||||
|
# response code when a recipient domain matches $mydestination or
|
||||||
|
# $inet_interfaces, while $local_recipient_maps is non-empty and the
|
||||||
|
# recipient address or address local-part is not found.
|
||||||
|
#
|
||||||
|
# The default setting is 550 (reject mail) but it is safer to start
|
||||||
|
# with 450 (try again later) until you are certain that your
|
||||||
|
# local_recipient_maps settings are OK.
|
||||||
|
#
|
||||||
|
unknown_local_recipient_reject_code = 550
|
||||||
|
#unknown_local_recipient_reject_code = 450
|
||||||
|
|
||||||
|
# TRUST AND RELAY CONTROL
|
||||||
|
|
||||||
|
# The mynetworks parameter specifies the list of "trusted" SMTP
|
||||||
|
# clients that have more privileges than "strangers".
|
||||||
|
#
|
||||||
|
# In particular, "trusted" SMTP clients are allowed to relay mail
|
||||||
|
# through Postfix. See the smtpd_recipient_restrictions parameter
|
||||||
|
# in file sample-smtpd.cf.
|
||||||
|
#
|
||||||
|
# You can specify the list of "trusted" network addresses by hand
|
||||||
|
# or you can let Postfix do it for you (which is the default).
|
||||||
|
#
|
||||||
|
# By default (mynetworks_style = subnet), Postfix "trusts" SMTP
|
||||||
|
# clients in the same IP subnetworks as the local machine.
|
||||||
|
# On Linux, this does works correctly only with interfaces specified
|
||||||
|
# with the "ifconfig" command.
|
||||||
|
#
|
||||||
|
# Specify "mynetworks_style = class" when Postfix should "trust" SMTP
|
||||||
|
# clients in the same IP class A/B/C networks as the local machine.
|
||||||
|
# Don't do this with a dialup site - it would cause Postfix to "trust"
|
||||||
|
# your entire provider's network. Instead, specify an explicit
|
||||||
|
# mynetworks list by hand, as described below.
|
||||||
|
#
|
||||||
|
# Specify "mynetworks_style = host" when Postfix should "trust"
|
||||||
|
# only the local machine.
|
||||||
|
#
|
||||||
|
#mynetworks_style = class
|
||||||
|
#mynetworks_style = subnet
|
||||||
|
#mynetworks_style = host
|
||||||
|
|
||||||
|
# Alternatively, you can specify the mynetworks list by hand, in
|
||||||
|
# which case Postfix ignores the mynetworks_style setting.
|
||||||
|
#
|
||||||
|
# Specify an explicit list of network/netmask patterns, where the
|
||||||
|
# mask specifies the number of bits in the network part of a host
|
||||||
|
# address.
|
||||||
|
#
|
||||||
|
# You can also specify the absolute pathname of a pattern file instead
|
||||||
|
# of listing the patterns here. Specify type:table for table-based lookups
|
||||||
|
# (the value on the table right-hand side is not used).
|
||||||
|
#
|
||||||
|
#mynetworks = 168.100.189.0/28, 127.0.0.0/8
|
||||||
|
#mynetworks = $config_directory/mynetworks
|
||||||
|
#mynetworks = hash:/etc/postfix/network_table
|
||||||
|
|
||||||
|
# The relay_domains parameter restricts what destinations this system will
|
||||||
|
# relay mail to. See the smtpd_recipient_restrictions restriction in the
|
||||||
|
# file sample-smtpd.cf for detailed information.
|
||||||
|
#
|
||||||
|
# By default, Postfix relays mail
|
||||||
|
# - from "trusted" clients (IP address matches $mynetworks) to any destination,
|
||||||
|
# - from "untrusted" clients to destinations that match $relay_domains or
|
||||||
|
# subdomains thereof, except addresses with sender-specified routing.
|
||||||
|
# The default relay_domains value is $mydestination.
|
||||||
|
#
|
||||||
|
# In addition to the above, the Postfix SMTP server by default accepts mail
|
||||||
|
# that Postfix is final destination for:
|
||||||
|
# - destinations that match $inet_interfaces,
|
||||||
|
# - destinations that match $mydestination
|
||||||
|
# - destinations that match $virtual_alias_domains,
|
||||||
|
# - destinations that match $virtual_mailbox_domains.
|
||||||
|
# These destinations do not need to be listed in $relay_domains.
|
||||||
|
#
|
||||||
|
# Specify a list of hosts or domains, /file/name patterns or type:name
|
||||||
|
# lookup tables, separated by commas and/or whitespace. Continue
|
||||||
|
# long lines by starting the next line with whitespace. A file name
|
||||||
|
# is replaced by its contents; a type:name table is matched when a
|
||||||
|
# (parent) domain appears as lookup key.
|
||||||
|
#
|
||||||
|
# NOTE: Postfix will not automatically forward mail for domains that
|
||||||
|
# list this system as their primary or backup MX host. See the
|
||||||
|
# permit_mx_backup restriction in the file sample-smtpd.cf.
|
||||||
|
#
|
||||||
|
#relay_domains = $mydestination
|
||||||
|
|
||||||
|
# INTERNET OR INTRANET
|
||||||
|
|
||||||
|
# The relayhost parameter specifies the default host to send mail to
|
||||||
|
# when no entry is matched in the optional transport(5) table. When
|
||||||
|
# no relayhost is given, mail is routed directly to the destination.
|
||||||
|
#
|
||||||
|
# On an intranet, specify the organizational domain name. If your
|
||||||
|
# internal DNS uses no MX records, specify the name of the intranet
|
||||||
|
# gateway host instead.
|
||||||
|
#
|
||||||
|
# In the case of SMTP, specify a domain, host, host:port, [host]:port,
|
||||||
|
# [address] or [address]:port; the form [host] turns off MX lookups.
|
||||||
|
#
|
||||||
|
# If you're connected via UUCP, see also the default_transport parameter.
|
||||||
|
#
|
||||||
|
#relayhost = $mydomain
|
||||||
|
#relayhost = gateway.my.domain
|
||||||
|
#relayhost = uucphost
|
||||||
|
#relayhost = [an.ip.add.ress]
|
||||||
|
|
||||||
|
# REJECTING UNKNOWN RELAY USERS
|
||||||
|
#
|
||||||
|
# The relay_recipient_maps parameter specifies optional lookup tables
|
||||||
|
# with all addresses in the domains that match $relay_domains.
|
||||||
|
#
|
||||||
|
# If this parameter is defined, then the SMTP server will reject
|
||||||
|
# mail for unknown relay users. This feature is off by default.
|
||||||
|
#
|
||||||
|
# The right-hand side of the lookup tables is conveniently ignored.
|
||||||
|
# In the left-hand side, specify an @domain.tld wild-card, or specify
|
||||||
|
# a user@domain.tld address.
|
||||||
|
#
|
||||||
|
#relay_recipient_maps = hash:/etc/postfix/relay_recipients
|
||||||
|
|
||||||
|
# INPUT RATE CONTROL
|
||||||
|
#
|
||||||
|
# The in_flow_delay configuration parameter implements mail input
|
||||||
|
# flow control. This feature is turned on by default, although it
|
||||||
|
# still needs further development (it's disabled on SCO UNIX due
|
||||||
|
# to an SCO bug).
|
||||||
|
#
|
||||||
|
# A Postfix process will pause for $in_flow_delay seconds before
|
||||||
|
# accepting a new message, when the message arrival rate exceeds the
|
||||||
|
# message delivery rate. With the default 100 SMTP server process
|
||||||
|
# limit, this limits the mail inflow to 100 messages a second more
|
||||||
|
# than the number of messages delivered per second.
|
||||||
|
#
|
||||||
|
# Specify 0 to disable the feature. Valid delays are 0..10.
|
||||||
|
#
|
||||||
|
#in_flow_delay = 1s
|
||||||
|
|
||||||
|
# ADDRESS REWRITING
|
||||||
|
#
|
||||||
|
# Insert text from sample-rewrite.cf if you need to do address
|
||||||
|
# masquerading.
|
||||||
|
#
|
||||||
|
# Insert text from sample-canonical.cf if you need to do address
|
||||||
|
# rewriting, or if you need username->Firstname.Lastname mapping.
|
||||||
|
|
||||||
|
# ADDRESS REDIRECTION (VIRTUAL DOMAIN)
|
||||||
|
#
|
||||||
|
# Insert text from sample-virtual.cf if you need virtual domain support.
|
||||||
|
|
||||||
|
# "USER HAS MOVED" BOUNCE MESSAGES
|
||||||
|
#
|
||||||
|
# Insert text from sample-relocated.cf if you need "user has moved"
|
||||||
|
# style bounce messages. Alternatively, you can bounce recipients
|
||||||
|
# with an SMTP server access table. See sample-smtpd.cf.
|
||||||
|
|
||||||
|
# TRANSPORT MAP
|
||||||
|
#
|
||||||
|
# Insert text from sample-transport.cf if you need explicit routing.
|
||||||
|
|
||||||
|
# ALIAS DATABASE
|
||||||
|
#
|
||||||
|
# The alias_maps parameter specifies the list of alias databases used
|
||||||
|
# by the local delivery agent. The default list is system dependent.
|
||||||
|
#
|
||||||
|
# On systems with NIS, the default is to search the local alias
|
||||||
|
# database, then the NIS alias database. See aliases(5) for syntax
|
||||||
|
# details.
|
||||||
|
#
|
||||||
|
# If you change the alias database, run "postalias /etc/aliases" (or
|
||||||
|
# wherever your system stores the mail alias file), or simply run
|
||||||
|
# "newaliases" to build the necessary DBM or DB file.
|
||||||
|
#
|
||||||
|
# It will take a minute or so before changes become visible. Use
|
||||||
|
# "postfix reload" to eliminate the delay.
|
||||||
|
#
|
||||||
|
#alias_maps = dbm:/etc/aliases
|
||||||
|
#alias_maps = hash:/etc/aliases
|
||||||
|
#alias_maps = hash:/etc/aliases, nis:mail.aliases
|
||||||
|
#alias_maps = netinfo:/aliases
|
||||||
|
|
||||||
|
# The alias_database parameter specifies the alias database(s) that
|
||||||
|
# are built with "newaliases" or "sendmail -bi". This is a separate
|
||||||
|
# configuration parameter, because alias_maps (see above) may specify
|
||||||
|
# tables that are not necessarily all under control by Postfix.
|
||||||
|
#
|
||||||
|
#alias_database = dbm:/etc/aliases
|
||||||
|
#alias_database = dbm:/etc/mail/aliases
|
||||||
|
#alias_database = hash:/etc/aliases
|
||||||
|
#alias_database = hash:/etc/aliases, hash:/opt/majordomo/aliases
|
||||||
|
|
||||||
|
# ADDRESS EXTENSIONS (e.g., user+foo)
|
||||||
|
#
|
||||||
|
# The recipient_delimiter parameter specifies the separator between
|
||||||
|
# user names and address extensions (user+foo). See canonical(5),
|
||||||
|
# local(8), relocated(5) and virtual(5) for the effects this has on
|
||||||
|
# aliases, canonical, virtual, relocated and .forward file lookups.
|
||||||
|
# Basically, the software tries user+foo and .forward+foo before
|
||||||
|
# trying user and .forward.
|
||||||
|
#
|
||||||
|
#recipient_delimiter = +
|
||||||
|
|
||||||
|
# DELIVERY TO MAILBOX
|
||||||
|
#
|
||||||
|
# The home_mailbox parameter specifies the optional pathname of a
|
||||||
|
# mailbox file relative to a user's home directory. The default
|
||||||
|
# mailbox file is /var/spool/mail/user or /var/mail/user. Specify
|
||||||
|
# "Maildir/" for qmail-style delivery (the / is required).
|
||||||
|
#
|
||||||
|
#home_mailbox = Mailbox
|
||||||
|
#home_mailbox = Maildir/
|
||||||
|
|
||||||
|
# The mail_spool_directory parameter specifies the directory where
|
||||||
|
# UNIX-style mailboxes are kept. The default setting depends on the
|
||||||
|
# system type.
|
||||||
|
#
|
||||||
|
#mail_spool_directory = /var/mail
|
||||||
|
#mail_spool_directory = /var/spool/mail
|
||||||
|
|
||||||
|
# The mailbox_command parameter specifies the optional external
|
||||||
|
# command to use instead of mailbox delivery. The command is run as
|
||||||
|
# the recipient with proper HOME, SHELL and LOGNAME environment settings.
|
||||||
|
# Exception: delivery for root is done as $default_user.
|
||||||
|
#
|
||||||
|
# Other environment variables of interest: USER (recipient username),
|
||||||
|
# EXTENSION (address extension), DOMAIN (domain part of address),
|
||||||
|
# and LOCAL (the address localpart).
|
||||||
|
#
|
||||||
|
# Unlike other Postfix configuration parameters, the mailbox_command
|
||||||
|
# parameter is not subjected to $parameter substitutions. This is to
|
||||||
|
# make it easier to specify shell syntax (see example below).
|
||||||
|
#
|
||||||
|
# Avoid shell meta characters because they will force Postfix to run
|
||||||
|
# an expensive shell process. Procmail alone is expensive enough.
|
||||||
|
#
|
||||||
|
# IF YOU USE THIS TO DELIVER MAIL SYSTEM-WIDE, YOU MUST SET UP AN
|
||||||
|
# ALIAS THAT FORWARDS MAIL FOR ROOT TO A REAL USER.
|
||||||
|
#
|
||||||
|
#mailbox_command = /some/where/procmail
|
||||||
|
#mailbox_command = /some/where/procmail -a "$EXTENSION"
|
||||||
|
|
||||||
|
# The mailbox_transport specifies the optional transport in master.cf
|
||||||
|
# to use after processing aliases and .forward files. This parameter
|
||||||
|
# has precedence over the mailbox_command, fallback_transport and
|
||||||
|
# luser_relay parameters.
|
||||||
|
#
|
||||||
|
# Specify a string of the form transport:nexthop, where transport is
|
||||||
|
# the name of a mail delivery transport defined in master.cf. The
|
||||||
|
# :nexthop part is optional. For more details see the sample transport
|
||||||
|
# configuration file.
|
||||||
|
#
|
||||||
|
# NOTE: if you use this feature for accounts not in the UNIX password
|
||||||
|
# file, then you must update the "local_recipient_maps" setting in
|
||||||
|
# the main.cf file, otherwise the SMTP server will reject mail for
|
||||||
|
# non-UNIX accounts with "User unknown in local recipient table".
|
||||||
|
#
|
||||||
|
#mailbox_transport = lmtp:unix:/file/name
|
||||||
|
mailbox_transport = lmtp:unix:/var/imap/socket/lmtp
|
||||||
|
#mailbox_transport = cyrus
|
||||||
|
|
||||||
|
# The fallback_transport specifies the optional transport in master.cf
|
||||||
|
# to use for recipients that are not found in the UNIX passwd database.
|
||||||
|
# This parameter has precedence over the luser_relay parameter.
|
||||||
|
#
|
||||||
|
# Specify a string of the form transport:nexthop, where transport is
|
||||||
|
# the name of a mail delivery transport defined in master.cf. The
|
||||||
|
# :nexthop part is optional. For more details see the sample transport
|
||||||
|
# configuration file.
|
||||||
|
#
|
||||||
|
# NOTE: if you use this feature for accounts not in the UNIX password
|
||||||
|
# file, then you must update the "local_recipient_maps" setting in
|
||||||
|
# the main.cf file, otherwise the SMTP server will reject mail for
|
||||||
|
# non-UNIX accounts with "User unknown in local recipient table".
|
||||||
|
#
|
||||||
|
#fallback_transport = lmtp:unix:/file/name
|
||||||
|
#fallback_transport = cyrus
|
||||||
|
#fallback_transport =
|
||||||
|
|
||||||
|
# The luser_relay parameter specifies an optional destination address
|
||||||
|
# for unknown recipients. By default, mail for unknown@$mydestination
|
||||||
|
# and unknown@[$inet_interfaces] is returned as undeliverable.
|
||||||
|
#
|
||||||
|
# The following expansions are done on luser_relay: $user (recipient
|
||||||
|
# username), $shell (recipient shell), $home (recipient home directory),
|
||||||
|
# $recipient (full recipient address), $extension (recipient address
|
||||||
|
# extension), $domain (recipient domain), $local (entire recipient
|
||||||
|
# localpart), $recipient_delimiter. Specify ${name?value} or
|
||||||
|
# ${name:value} to expand value only when $name does (does not) exist.
|
||||||
|
#
|
||||||
|
# luser_relay works only for the default Postfix local delivery agent.
|
||||||
|
#
|
||||||
|
# NOTE: if you use this feature for accounts not in the UNIX password
|
||||||
|
# file, then you must specify "local_recipient_maps =" (i.e. empty) in
|
||||||
|
# the main.cf file, otherwise the SMTP server will reject mail for
|
||||||
|
# non-UNIX accounts with "User unknown in local recipient table".
|
||||||
|
#
|
||||||
|
#luser_relay = $user@other.host
|
||||||
|
#luser_relay = $local@other.host
|
||||||
|
#luser_relay = admin+$local
|
||||||
|
|
||||||
|
# JUNK MAIL CONTROLS
|
||||||
|
#
|
||||||
|
# The controls listed here are only a very small subset. See the file
|
||||||
|
# sample-smtpd.cf for an elaborate list of anti-UCE controls.
|
||||||
|
|
||||||
|
# The header_checks parameter specifies an optional table with patterns
|
||||||
|
# that each logical message header is matched against, including
|
||||||
|
# headers that span multiple physical lines.
|
||||||
|
#
|
||||||
|
# By default, these patterns also apply to MIME headers and to the
|
||||||
|
# headers of attached messages. With older Postfix versions, MIME and
|
||||||
|
# attached message headers were treated as body text.
|
||||||
|
#
|
||||||
|
# For details, see the sample-filter.cf file.
|
||||||
|
#
|
||||||
|
#header_checks = regexp:/etc/postfix/header_checks
|
||||||
|
|
||||||
|
# FAST ETRN SERVICE
|
||||||
|
#
|
||||||
|
# Postfix maintains per-destination logfiles with information about
|
||||||
|
# deferred mail, so that mail can be flushed quickly with the SMTP
|
||||||
|
# "ETRN domain.tld" command, or by executing "sendmail -qRdomain.tld".
|
||||||
|
#
|
||||||
|
# By default, Postfix maintains deferred mail logfile information
|
||||||
|
# only for destinations that Postfix is willing to relay to (as
|
||||||
|
# specified in the relay_domains parameter). For other destinations,
|
||||||
|
# Postfix attempts to deliver ALL queued mail after receiving the
|
||||||
|
# SMTP "ETRN domain.tld" command, or after execution of "sendmail
|
||||||
|
# -qRdomain.tld". This can be slow when a lot of mail is queued.
|
||||||
|
#
|
||||||
|
# The fast_flush_domains parameter controls what destinations are
|
||||||
|
# eligible for this "fast ETRN/sendmail -qR" service.
|
||||||
|
#
|
||||||
|
#fast_flush_domains = $relay_domains
|
||||||
|
#fast_flush_domains =
|
||||||
|
|
||||||
|
# The disable_vrfy_command parameter allows you to disable the SMTP
|
||||||
|
# VRFY command. This stops some techniques used by spammers to harvest
|
||||||
|
# email addresses.
|
||||||
|
#
|
||||||
|
disable_vrfy_command = yes
|
||||||
|
|
||||||
|
# SHOW SOFTWARE VERSION OR NOT
|
||||||
|
#
|
||||||
|
# The smtpd_banner parameter specifies the text that follows the 220
|
||||||
|
# code in the SMTP server's greeting banner. Some people like to see
|
||||||
|
# the mail version advertised. By default, Postfix shows no version.
|
||||||
|
#
|
||||||
|
# You MUST specify $myhostname at the start of the text. That is an
|
||||||
|
# RFC requirement. Postfix itself does not care.
|
||||||
|
#
|
||||||
|
#smtpd_banner = $myhostname ESMTP $mail_name
|
||||||
|
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
|
||||||
|
|
||||||
|
# PARALLEL DELIVERY TO THE SAME DESTINATION
|
||||||
|
#
|
||||||
|
# How many parallel deliveries to the same user or domain? With local
|
||||||
|
# delivery, it does not make sense to do massively parallel delivery
|
||||||
|
# to the same user, because mailbox updates must happen sequentially,
|
||||||
|
# and expensive pipelines in .forward files can cause disasters when
|
||||||
|
# too many are run at the same time. With SMTP deliveries, 10
|
||||||
|
# simultaneous connections to the same domain could be sufficient to
|
||||||
|
# raise eyebrows.
|
||||||
|
#
|
||||||
|
# Each message delivery transport has its XXX_destination_concurrency_limit
|
||||||
|
# parameter. The default is $default_destination_concurrency_limit for
|
||||||
|
# most delivery transports. For the local delivery agent the default is 2.
|
||||||
|
|
||||||
|
#local_destination_concurrency_limit = 2
|
||||||
|
#default_destination_concurrency_limit = 20
|
||||||
|
|
||||||
|
# DEBUGGING CONTROL
|
||||||
|
#
|
||||||
|
# The debug_peer_level parameter specifies the increment in verbose
|
||||||
|
# logging level when an SMTP client or server host name or address
|
||||||
|
# matches a pattern in the debug_peer_list parameter.
|
||||||
|
#
|
||||||
|
debug_peer_level = 2
|
||||||
|
|
||||||
|
# The debug_peer_list parameter specifies an optional list of domain
|
||||||
|
# or network patterns, /file/name patterns or type:name tables. When
|
||||||
|
# an SMTP client or server host name or address matches a pattern,
|
||||||
|
# increase the verbose logging level by the amount specified in the
|
||||||
|
# debug_peer_level parameter.
|
||||||
|
#
|
||||||
|
#debug_peer_list = 127.0.0.1
|
||||||
|
#debug_peer_list = some.domain
|
||||||
|
|
||||||
|
# The debugger_command specifies the external command that is executed
|
||||||
|
# when a Postfix daemon program is run with the -D option.
|
||||||
|
#
|
||||||
|
# Use "command .. & sleep 5" so that the debugger can attach before
|
||||||
|
# the process marches on. If you use an X-based debugger, be sure to
|
||||||
|
# set up your XAUTHORITY environment variable before starting Postfix.
|
||||||
|
#
|
||||||
|
debugger_command =
|
||||||
|
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
|
||||||
|
xxgdb $daemon_directory/$process_name $process_id & sleep 5
|
||||||
|
|
||||||
|
# If you don't have X installed on the Postfix machine, try:
|
||||||
|
# debugger_command =
|
||||||
|
# PATH=/bin:/usr/bin:/usr/local/bin; export PATH; (echo cont;
|
||||||
|
# echo where) | gdb $daemon_directory/$process_name $process_id 2>&1
|
||||||
|
# >$config_directory/$process_name.$process_id.log & sleep 5
|
||||||
|
|
||||||
|
# INSTALL-TIME CONFIGURATION INFORMATION
|
||||||
|
#
|
||||||
|
# The following parameters are used when installing a new Postfix version.
|
||||||
|
#
|
||||||
|
# sendmail_path: The full pathname of the Postfix sendmail command.
|
||||||
|
# This is the Sendmail-compatible mail posting interface.
|
||||||
|
#
|
||||||
|
sendmail_path = /usr/sbin/sendmail
|
||||||
|
|
||||||
|
# newaliases_path: The full pathname of the Postfix newaliases command.
|
||||||
|
# This is the Sendmail-compatible command to build alias databases.
|
||||||
|
#
|
||||||
|
newaliases_path = /usr/bin/newaliases
|
||||||
|
|
||||||
|
# mailq_path: The full pathname of the Postfix mailq command. This
|
||||||
|
# is the Sendmail-compatible mail queue listing command.
|
||||||
|
#
|
||||||
|
mailq_path = /usr/bin/mailq
|
||||||
|
|
||||||
|
# setgid_group: The group for mail submission and queue management
|
||||||
|
# commands. This must be a group name with a numerical group ID that
|
||||||
|
# is not shared with other accounts, not even with the Postfix account.
|
||||||
|
#
|
||||||
|
setgid_group = postdrop
|
||||||
|
|
||||||
|
# manpage_directory: The location of the Postfix on-line manual pages.
|
||||||
|
#
|
||||||
|
manpage_directory = /usr/share/man
|
||||||
|
|
||||||
|
# sample_directory: The location of the Postfix sample configuration files.
|
||||||
|
#
|
||||||
|
sample_directory = /usr/share/doc/postfix-2.0.19/sample
|
||||||
|
|
||||||
|
# readme_directory: The location of the Postfix README files.
|
||||||
|
#
|
||||||
|
readme_directory = /usr/share/doc/postfix-2.0.19/readme
|
||||||
|
default_destination_concurrency_limit = 2
|
||||||
|
#alias_database = hash:/etc/mail/aliases
|
||||||
|
local_destination_concurrency_limit = 2
|
||||||
|
alias_maps = hash:/etc/mail/aliases
|
||||||
|
|
||||||
|
content_filter = smtp-amavis:[127.0.0.1]:10024
|
||||||
|
queue_minfree = 100000000
|
||||||
|
message_size_limit = 50000000
|
||||||
|
mailbox_size_limit = 500000000
|
||||||
|
smtpd_helo_required=yes
|
||||||
|
smtpd_helo_restrictions=permit_mynetworks, reject_invalid_hostname, reject_invalid_hostname
|
||||||
|
smtpd_sender_restrictions=permit_mynetworks, reject_unknown_sender_domain, reject_non_fqdn_sender
|
||||||
|
|
||||||
|
virtual_maps = ldap:aliases, ldap:mailboxes
|
||||||
|
|
||||||
|
aliases_server_host = 127.0.0.1
|
||||||
|
aliases_search_base = dc=domain,dc=loc
|
||||||
|
aliases_query_filter = (&(|(mail=%s)(mailalternateaddress=%s))(objectclass=posixaccount)(deliveryMode=forwardonly)(accountstatus=active))
|
||||||
|
aliases_bind_dn = cn=thepostfixadmin,dc=domain,dc=loc
|
||||||
|
aliases_bind_pw = thepassword
|
||||||
|
aliases_result_attribute = mailforwardingaddress
|
||||||
|
aliases_version = 3
|
||||||
|
|
||||||
|
mailboxes_server_host = 127.0.0.1
|
||||||
|
mailboxes_search_base = dc=domain,dc=loc
|
||||||
|
mailboxes_query_filter = (&(|(mail=%s)(mailalternateaddress=%s))(objectclass=posixaccount)(accountstatus=active))
|
||||||
|
mailboxes_bind_dn = cn=thepostfixadmin,dc=domain,dc=loc
|
||||||
|
mailboxes_bind_pw = thepassword
|
||||||
|
mailboxes_result_attribute = uid, mailforwardingaddress
|
||||||
|
mailboxes_version = 3
|
||||||
|
|
||||||
|
|
||||||
|
#SMTPD mit SASL-Authentification verwenden
|
||||||
|
smtpd_sasl_auth_enable = yes
|
||||||
|
|
||||||
|
#Zusatz-Optionen: Keine anonyme-Anmeldung verwenden
|
||||||
|
smtpd_sasl_security_options = noanonymous
|
||||||
|
|
||||||
|
#Wieder ein Workaround für ältere Clients und Outlook
|
||||||
|
broken_sasl_auth_clients = yes
|
||||||
|
|
||||||
|
# ODER meine Netze und SASL erlauben
|
||||||
|
smtpd_recipient_restrictions =
|
||||||
|
permit_mynetworks,
|
||||||
|
permit_sasl_authenticated,
|
||||||
|
reject_rbl_client relays.ordb.org,
|
||||||
|
reject_rbl_client sbl-xbl.spamhaus.org,
|
||||||
|
reject_rbl_client opm.blitzed.org,
|
||||||
|
reject_rbl_client dnsbl.njabl.org,
|
||||||
|
reject_rbl_client blackholes.wirehub.net,
|
||||||
|
reject_rbl_client list.dsbl.org,
|
||||||
|
reject_rbl_client dnsbl.sorbs.net,
|
||||||
|
reject_unauth_destination,
|
||||||
|
reject_non_fqdn_sender,
|
||||||
|
reject_non_fqdn_recipient,
|
||||||
|
reject_unauth_pipelining,
|
||||||
|
reject_unknown_sender_domain,
|
||||||
|
reject_unknown_recipient_domain
|
||||||
|
|
||||||
|
# reject_unknown_client
|
||||||
|
# reject_rbl_client proxies.relays.monkeys.com,
|
||||||
|
|
||||||
|
# incoming SSL
|
||||||
|
smtpd_use_tls = yes
|
||||||
|
#smtpd_tls_auth_only = yes
|
||||||
|
smtpd_tls_key_file = /etc/ssl/private/smtp.linux-at-work.de/smtp.linux-at-work.de.key
|
||||||
|
smtpd_tls_cert_file = /etc/ssl/private/smtp.linux-at-work.de/smtp.linux-at-work.de.crt
|
||||||
|
smtpd_tls_CAfile = /etc/ssl/certs/ca-cert.pem
|
||||||
|
smtpd_tls_loglevel = 1
|
||||||
|
smtpd_tls_received_header = yes
|
||||||
|
smtpd_tls_session_cache_timeout = 3600s
|
||||||
|
tls_random_source = dev:/dev/urandom
|
||||||
|
|
||||||
|
#outgoing SSL
|
||||||
|
smtp_tls_key_file = /etc/ssl/private/smtp.linux-at-work.de/smtp.linux-at-work.de.key
|
||||||
|
smtp_tls_cert_file = /etc/ssl/private/smtp.linux-at-work.de/smtp.linux-at-work.de.crt
|
||||||
|
smtp_tls_CAfile = /etc/ssl/certs/ca-cert.pem
|
||||||
|
smtp_tls_CApath = /etc/ssl/certs
|
||||||
|
smtp_tls_loglevel = 2
|
||||||
|
# The server and client negotiate a session, which takes some computer time
|
||||||
|
# and network bandwidth. The session is cached only in the smtpd process
|
||||||
|
# actually using this session and is lost when the process dies.
|
||||||
|
# To share the session information between the smtp processes, a disc based
|
||||||
|
# session cache can be used based on the SDBM databases (routines included
|
||||||
|
# in Postfix/TLS). Since concurrent writing must be supported, only SDBM
|
||||||
|
# can be used.
|
||||||
|
#
|
||||||
|
smtp_tls_session_cache_database = sdbm:/etc/postfix/smtp_scache
|
||||||
|
|
||||||
|
# By default TLS is disabled, so no difference to plain postfix is visible.
|
||||||
|
# If you enable TLS it will be used when offered by the server.
|
||||||
|
# WARNING: I didn't have access to other software (except those explicitely
|
||||||
|
# listed) to test the interaction. On corresponding mailing list
|
||||||
|
# there was a discussion going on about MS exchange servers offering
|
||||||
|
# STARTTLS even if it is not configured, so it might be wise to not
|
||||||
|
# use this option on your central mail hub, as you don't know in advance
|
||||||
|
# whether you are going to hit such host. Use the recipient/site specific
|
||||||
|
# options instead.
|
||||||
|
# HINT: I have it switched on on my mailservers and did experience one
|
||||||
|
# single failure since client side TLS is implemented. (There was one
|
||||||
|
# misconfired MS Exchange server; I contacted ths admin.) Hence, I am happy
|
||||||
|
# with it running all the time, but I am interested in testing anyway.
|
||||||
|
# You have been warned, however :-)
|
||||||
|
#
|
||||||
|
# In case of failure, a "4xx" code is issued and the mail stays in the queue.
|
||||||
|
#
|
||||||
|
# Explicitely switch it on here, if you want it.
|
||||||
|
#
|
||||||
|
#smtp_use_tls = yes
|
103
emailadmin/doc/qmailuser.schema
Normal file
103
emailadmin/doc/qmailuser.schema
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
#
|
||||||
|
# qmail-ldap v3 directory schema
|
||||||
|
#
|
||||||
|
# The offical qmail-ldap OID assigned by IANA is 7914
|
||||||
|
#
|
||||||
|
# Created by: David E. Storey <dave@tamos.net>
|
||||||
|
#
|
||||||
|
# Modified and included into qmail-ldap by Andre Oppermann <opi@nrg4u.com>
|
||||||
|
#
|
||||||
|
# Schema fixes by Mike Jackson <mjj@pp.fi>
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# This schema depends on:
|
||||||
|
# - core.schema
|
||||||
|
# - cosine.schema
|
||||||
|
# - nis.schema
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Example from new format
|
||||||
|
#
|
||||||
|
# attributetype ( 1.3.6.1.1.1.1.0 NAME 'uidNumber'
|
||||||
|
# DESC 'An integer uniquely identifying a user in an administrative domain'
|
||||||
|
# EQUALITY integerMatch
|
||||||
|
# SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
|
||||||
|
|
||||||
|
# Attribute Type Definitions
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.7914.1.2.1.1 NAME 'qmailUID'
|
||||||
|
DESC 'UID of the user on the mailsystem'
|
||||||
|
EQUALITY integerMatch
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.7914.1.2.1.2 NAME 'qmailGID'
|
||||||
|
DESC 'GID of the user on the mailsystem'
|
||||||
|
EQUALITY integerMatch
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.7914.1.2.1.3 NAME 'mailMessageStore'
|
||||||
|
DESC 'Path to the maildir/mbox on the mail system'
|
||||||
|
EQUALITY caseExactIA5Match
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.7914.1.2.1.4 NAME 'mailAlternateAddress'
|
||||||
|
DESC 'Secondary (alias) mailaddresses for the same user'
|
||||||
|
EQUALITY caseIgnoreIA5Match
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.7914.1.2.1.5 NAME 'mailQuota'
|
||||||
|
DESC 'The amount of space the user can use until all further messages get bounced.'
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.44 SINGLE-VALUE )
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.7914.1.2.1.6 NAME 'mailHost'
|
||||||
|
DESC 'On which qmail server the messagestore of this user is located.'
|
||||||
|
EQUALITY caseIgnoreIA5Match
|
||||||
|
SUBSTR caseIgnoreIA5SubstringsMatch
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} SINGLE-VALUE)
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.7914.1.2.1.7 NAME 'mailForwardingAddress'
|
||||||
|
DESC 'Address(es) to forward all incoming messages to.'
|
||||||
|
EQUALITY caseIgnoreIA5Match
|
||||||
|
SUBSTR caseIgnoreIA5SubstringsMatch
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.7914.1.2.1.8 NAME 'deliveryProgramPath'
|
||||||
|
DESC 'Program to execute for all incoming mails.'
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.44 SINGLE-VALUE )
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.7914.1.2.1.9 NAME 'qmailDotMode'
|
||||||
|
DESC 'Interpretation of .qmail files: both, dotonly, ldaponly, ldapwithprog, none'
|
||||||
|
EQUALITY caseIgnoreMatch
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.44 SINGLE-VALUE )
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.7914.1.2.1.10 NAME 'deliveryMode'
|
||||||
|
DESC 'multi field entries of: normal, forwardonly, nombox, localdelivery, reply, echo'
|
||||||
|
EQUALITY caseIgnoreMatch
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.44 )
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.7914.1.2.1.11 NAME 'mailReplyText'
|
||||||
|
DESC 'A reply text for every incoming message'
|
||||||
|
SUBSTR caseIgnoreSubstringsMatch
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{4096} SINGLE-VALUE )
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.7914.1.2.1.12 NAME 'accountStatus'
|
||||||
|
DESC 'The status of a user account: active, nopop, disabled, deleted'
|
||||||
|
EQUALITY caseIgnoreMatch
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.44 SINGLE-VALUE )
|
||||||
|
|
||||||
|
attributetype ( 1.3.6.1.4.1.7914.1.2.1.14 NAME 'qmailAccountPurge'
|
||||||
|
DESC 'The earliest date when a mailMessageStore will be purged'
|
||||||
|
EQUALITY numericStringMatch
|
||||||
|
SYNTAX 1.3.6.1.4.1.1466.115.121.1.36 SINGLE-VALUE )
|
||||||
|
|
||||||
|
# Object Class Definitions
|
||||||
|
|
||||||
|
objectclass ( 1.3.6.1.4.1.7914.1.2.2.1 NAME 'qmailUser'
|
||||||
|
DESC 'QMail-LDAP User' SUP top AUXILIARY
|
||||||
|
MUST ( mail $ uid )
|
||||||
|
MAY ( mailMessageStore $ homeDirectory $ userPassword $
|
||||||
|
mailAlternateAddress $ qmailUID $ qmailGID $ mailQuota $
|
||||||
|
mailHost $ mailForwardingAddress $ deliveryProgramPath $
|
||||||
|
qmailDotMode $ deliveryMode $ mailReplyText $
|
||||||
|
accountStatus $ qmailAccountPurge ) )
|
74
emailadmin/inc/class.ajaxemailadmin.inc.php
Normal file
74
emailadmin/inc/class.ajaxemailadmin.inc.php
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
<?php
|
||||||
|
/***************************************************************************\
|
||||||
|
* eGroupWare - EmailAdmin *
|
||||||
|
* http://www.linux-at-work.de *
|
||||||
|
* http://www.egroupware.org *
|
||||||
|
* Written by : Lars Kneschke [lkneschke@linux-at-work.de] *
|
||||||
|
* ------------------------------------------------- *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms of the GNU General Public License version 2 as published *
|
||||||
|
* by the Free Software Foundation. *
|
||||||
|
\***************************************************************************/
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
class ajaxemailadmin
|
||||||
|
{
|
||||||
|
function ajaxemailadmin()
|
||||||
|
{
|
||||||
|
$this->bo = new emailadmin_bo();
|
||||||
|
/* $this->bofelamimail =& CreateObject('felamimail.bofelamimail',$GLOBALS['egw']->translation->charset());
|
||||||
|
$this->uiwidgets =& CreateObject('felamimail.uiwidgets');
|
||||||
|
$this->bofelamimail->openConnection();
|
||||||
|
|
||||||
|
$this->sessionDataAjax = $GLOBALS['egw']->session->appsession('ajax_session_data');
|
||||||
|
$this->sessionData = $GLOBALS['egw']->session->appsession('session_data');
|
||||||
|
|
||||||
|
if(!isset($this->sessionDataAjax['folderName']))
|
||||||
|
$this->sessionDataAjax['folderName'] = 'INBOX';
|
||||||
|
|
||||||
|
$this->bofelamimail->openConnection($this->sessionDataAjax['folderName']);*/
|
||||||
|
}
|
||||||
|
|
||||||
|
function setOrder($_order)
|
||||||
|
{
|
||||||
|
$i = 0;
|
||||||
|
|
||||||
|
$order = explode(',',$_order);
|
||||||
|
|
||||||
|
foreach($order as $profileIDString)
|
||||||
|
{
|
||||||
|
// remove profile_ and just use the number
|
||||||
|
$profileID = (int)substr($profileIDString,8);
|
||||||
|
if($profileID > 0)
|
||||||
|
$newOrder[$i++] = $profileID;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->bo->setOrder($newOrder);
|
||||||
|
}
|
||||||
|
|
||||||
|
function addACL($_accountName, $_aclData)
|
||||||
|
{
|
||||||
|
if(!empty($_accountName))
|
||||||
|
{
|
||||||
|
$acl = implode('',(array)$_aclData['acl']);
|
||||||
|
$data = $this->bofelamimail->addACL($this->sessionDataAjax['folderName'], $_accountName, $acl);
|
||||||
|
#$response = new xajaxResponse();
|
||||||
|
#$response->addScript("window.close();");
|
||||||
|
#$response->addAssign("accountName", "value", $this->sessionDataAjax['folderName'].'-'.$_accountName.'-'.$acl);
|
||||||
|
#return $response->getXML();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateACLView()
|
||||||
|
{
|
||||||
|
$folderACL = $this->bofelamimail->getIMAPACL($this->sessionDataAjax['folderName']);
|
||||||
|
|
||||||
|
$response = new xajaxResponse();
|
||||||
|
$response->addAssign("aclTable", "innerHTML", $this->createACLTable($folderACL));
|
||||||
|
return $response->getXML();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
180
emailadmin/inc/class.cyrusimap.inc.php
Normal file
180
emailadmin/inc/class.cyrusimap.inc.php
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
<?php
|
||||||
|
/***************************************************************************\
|
||||||
|
* EGroupWare - EMailAdmin *
|
||||||
|
* http://www.egroupware.org *
|
||||||
|
* Written by : Lars Kneschke [lkneschke@linux-at-work.de] *
|
||||||
|
* ------------------------------------------------- *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms of the GNU General Public License as published by the *
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at your *
|
||||||
|
* option) any later version. *
|
||||||
|
\***************************************************************************/
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
include_once(EGW_SERVER_ROOT."/emailadmin/inc/class.defaultimap.inc.php");
|
||||||
|
|
||||||
|
class cyrusimap extends defaultimap
|
||||||
|
{
|
||||||
|
// mailbox delimiter
|
||||||
|
var $mailboxDelimiter = '.';
|
||||||
|
|
||||||
|
// mailbox prefix
|
||||||
|
var $mailboxPrefix = '';
|
||||||
|
|
||||||
|
var $enableCyrusAdmin = false;
|
||||||
|
|
||||||
|
var $cyrusAdminUsername;
|
||||||
|
|
||||||
|
var $cyrusAdminPassword;
|
||||||
|
|
||||||
|
var $enableSieve = false;
|
||||||
|
|
||||||
|
var $sieveHost;
|
||||||
|
|
||||||
|
var $sievePort;
|
||||||
|
|
||||||
|
function addAccount($_hookValues)
|
||||||
|
{
|
||||||
|
return $this->updateAccount($_hookValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteAccount($_hookValues)
|
||||||
|
{
|
||||||
|
if(!$this->enableCyrusAdmin) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($this->_connected === true) {
|
||||||
|
$this->disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
// we need a admin connection
|
||||||
|
if(!$this->openConnection(true)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$username = $_hookValues['account_lid'];
|
||||||
|
|
||||||
|
$mailboxName = $this->getUserMailboxString($username);
|
||||||
|
|
||||||
|
// give the admin account the rights to delete this mailbox
|
||||||
|
if(PEAR::isError($this->setACL($mailboxName, $this->adminUsername, 'lrswipcda'))) {
|
||||||
|
$this->disconnect();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(PEAR::isError($this->deleteMailbox($mailboxName))) {
|
||||||
|
$this->disconnect();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->disconnect();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create mailbox string from given mailbox-name and user-name
|
||||||
|
* @param string $_username
|
||||||
|
* @param string $_folderName=''
|
||||||
|
* @return string utf-7 encoded (done in getMailboxName)
|
||||||
|
*/
|
||||||
|
function getUserMailboxString($_username, $_folderName='')
|
||||||
|
{
|
||||||
|
$nameSpaces = $this->getNameSpaces();
|
||||||
|
|
||||||
|
if(!isset($nameSpaces['others'])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$_username = $this->getMailBoxUserName($_username);
|
||||||
|
$mailboxString = $nameSpaces['others'][0]['name'] . strtolower($_username) . (!empty($_folderName) ? $nameSpaces['others'][0]['delimiter'] . $_folderName : '');
|
||||||
|
|
||||||
|
if($this->loginType == 'vmailmgr' || $this->loginType == 'email') {
|
||||||
|
$mailboxString .= '@'.$this->domainName;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $mailboxString;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setUserData($_username, $_quota)
|
||||||
|
{
|
||||||
|
if(!$this->enableCyrusAdmin) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($this->_connected === true) {
|
||||||
|
$this->disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
// create a admin connection
|
||||||
|
if(!$this->openConnection(true)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$mailboxName = $this->getUserMailboxString($_username);
|
||||||
|
|
||||||
|
if((int)$_quota > 0) {
|
||||||
|
// enable quota
|
||||||
|
$quota_value = $this->setStorageQuota($mailboxName, (int)$_quota*1024);
|
||||||
|
} else {
|
||||||
|
// disable quota
|
||||||
|
$quota_value = $this->setStorageQuota($mailboxName, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->disconnect();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateAccount($_hookValues)
|
||||||
|
{
|
||||||
|
if(!$this->enableCyrusAdmin) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#_debug_array($_hookValues);
|
||||||
|
$username = $_hookValues['account_lid'];
|
||||||
|
if(isset($_hookValues['new_passwd'])) {
|
||||||
|
$userPassword = $_hookValues['new_passwd'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if($this->_connected === true) {
|
||||||
|
$this->disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
// we need a admin connection
|
||||||
|
if(!$this->openConnection(true)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the mailbox, with the account_lid, as it is passed from the hook values (gets transformed there if needed)
|
||||||
|
$mailboxName = $this->getUserMailboxString($username, $mailboxName);
|
||||||
|
// make sure we use the correct username here.
|
||||||
|
$username = $this->getMailBoxUserName($username);
|
||||||
|
$folderInfo = $this->getMailboxes('', $mailboxName, true);
|
||||||
|
if(empty($folderInfo)) {
|
||||||
|
if(!PEAR::isError($this->createMailbox($mailboxName))) {
|
||||||
|
if(PEAR::isError($this->setACL($mailboxName, $username, "lrswipcda"))) {
|
||||||
|
# log error message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->disconnect();
|
||||||
|
|
||||||
|
# this part got moved to FeLaMiMail
|
||||||
|
#// we can only subscribe to the folders, if we have the users password
|
||||||
|
#if(isset($_hookValues['new_passwd'])) {
|
||||||
|
# // subscribe to the folders
|
||||||
|
# if($mbox = @imap_open($this->getMailboxString(), $username, $userPassword)) {
|
||||||
|
# foreach($this->createMailboxes as $mailboxName) {
|
||||||
|
# $mailboxName = 'INBOX' . ($mailboxName ? $this->getDelimiter() .$mailboxName : '');
|
||||||
|
# imap_subscribe($mbox,$this->getMailboxString($mailboxName));
|
||||||
|
# }
|
||||||
|
# imap_close($mbox);
|
||||||
|
# } else {
|
||||||
|
# # log error message
|
||||||
|
# }
|
||||||
|
#}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
180
emailadmin/inc/class.dbmaildbmailuser.inc.php
Executable file
180
emailadmin/inc/class.dbmaildbmailuser.inc.php
Executable file
@ -0,0 +1,180 @@
|
|||||||
|
<?php
|
||||||
|
/***************************************************************************\
|
||||||
|
* EGroupWare - EMailAdmin *
|
||||||
|
* http://www.egroupware.org *
|
||||||
|
* Written by : Lars Kneschke [lkneschke@linux-at-work.de] *
|
||||||
|
* ------------------------------------------------- *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms of the GNU General Public License as published by the *
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at your *
|
||||||
|
* option) any later version. *
|
||||||
|
\***************************************************************************/
|
||||||
|
/* $Id: class.cyrusimap.inc.php,v 1.9 2005/12/02 15:44:31 ralfbecker Exp $ */
|
||||||
|
|
||||||
|
include_once(EGW_SERVER_ROOT."/emailadmin/inc/class.defaultimap.inc.php");
|
||||||
|
|
||||||
|
class dbmaildbmailuser extends defaultimap {
|
||||||
|
var $enableSieve = false;
|
||||||
|
|
||||||
|
var $sieveHost;
|
||||||
|
|
||||||
|
var $sievePort;
|
||||||
|
|
||||||
|
function addAccount($_hookValues) {
|
||||||
|
return $this->updateAccount($_hookValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
#function deleteAccount($_hookValues) {
|
||||||
|
#}
|
||||||
|
function getUserData($_username) {
|
||||||
|
$userData = array();
|
||||||
|
|
||||||
|
$ds = $GLOBALS['egw']->ldap->ldapConnect(
|
||||||
|
$GLOBALS['egw_info']['server']['ldap_host'],
|
||||||
|
$GLOBALS['egw_info']['server']['ldap_root_dn'],
|
||||||
|
$GLOBALS['egw_info']['server']['ldap_root_pw']
|
||||||
|
);
|
||||||
|
|
||||||
|
if(!is_resource($ds)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$filter = '(&(objectclass=posixaccount)(uid='. $_username .')(dbmailGID='. sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id'])) .'))';
|
||||||
|
$justthese = array('dn', 'objectclass', 'mailQuota');
|
||||||
|
if($sri = ldap_search($ds, $GLOBALS['egw_info']['server']['ldap_context'], $filter, $justthese)) {
|
||||||
|
|
||||||
|
if($info = ldap_get_entries($ds, $sri)) {
|
||||||
|
if(isset($info[0]['mailquota'][0])) {
|
||||||
|
$userData['quotaLimit'] = $info[0]['mailquota'][0] / 1048576;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $userData;
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateAccount($_hookValues) {
|
||||||
|
if(!$uidnumber = (int)$_hookValues['account_id']) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$ds = $GLOBALS['egw']->ldap->ldapConnect(
|
||||||
|
$GLOBALS['egw_info']['server']['ldap_host'],
|
||||||
|
$GLOBALS['egw_info']['server']['ldap_root_dn'],
|
||||||
|
$GLOBALS['egw_info']['server']['ldap_root_pw']
|
||||||
|
);
|
||||||
|
|
||||||
|
if(!is_resource($ds)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$filter = '(&(objectclass=posixaccount)(uidnumber='. $uidnumber .'))';
|
||||||
|
$justthese = array('dn', 'objectclass', 'dbmailUID', 'dbmailGID', 'mail');
|
||||||
|
$sri = ldap_search($ds, $GLOBALS['egw_info']['server']['ldap_context'], $filter, $justthese);
|
||||||
|
|
||||||
|
if($info = ldap_get_entries($ds, $sri)) {
|
||||||
|
if((!in_array('dbmailuser',$info[0]['objectclass']) && !in_array('dbmailUser',$info[0]['objectclass'])) && $info[0]['mail']) {
|
||||||
|
$newData['objectclass'] = $info[0]['objectclass'];
|
||||||
|
unset($newData['objectclass']['count']);
|
||||||
|
$newData['objectclass'][] = 'dbmailuser';
|
||||||
|
sort($newData['objectclass']);
|
||||||
|
$newData['dbmailGID'] = sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id']));
|
||||||
|
$newData['dbmailUID'] = (!empty($this->domainName)) ? $_hookValues['account_lid'] .'@'. $this->domainName : $_hookValues['account_lid'];
|
||||||
|
|
||||||
|
if(!ldap_modify($ds, $info[0]['dn'], $newData)) {
|
||||||
|
#print ldap_error($ds);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
$newData = array();
|
||||||
|
$newData['dbmailUID'] = (!empty($this->domainName)) ? $_hookValues['account_lid'] .'@'. $this->domainName : $_hookValues['account_lid'];
|
||||||
|
$newData['dbmailGID'] = sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id']));
|
||||||
|
|
||||||
|
if(!ldap_modify($ds, $info[0]['dn'], $newData)) {
|
||||||
|
print ldap_error($ds);
|
||||||
|
_debug_array($newData);
|
||||||
|
exit;
|
||||||
|
#return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setUserData($_username, $_quota) {
|
||||||
|
$ds = $GLOBALS['egw']->ldap->ldapConnect(
|
||||||
|
$GLOBALS['egw_info']['server']['ldap_host'],
|
||||||
|
$GLOBALS['egw_info']['server']['ldap_root_dn'],
|
||||||
|
$GLOBALS['egw_info']['server']['ldap_root_pw']
|
||||||
|
);
|
||||||
|
|
||||||
|
if(!is_resource($ds)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$filter = '(&(objectclass=posixaccount)(uid='. $_username .'))';
|
||||||
|
$justthese = array('dn', 'objectclass', 'dbmailGID', 'dbmailUID', 'mail');
|
||||||
|
$sri = ldap_search($ds, $GLOBALS['egw_info']['server']['ldap_context'], $filter, $justthese);
|
||||||
|
|
||||||
|
if($info = ldap_get_entries($ds, $sri)) {
|
||||||
|
$validLDAPConfig = false;
|
||||||
|
if(in_array('dbmailuser',$info[0]['objectclass']) || in_array('dbmailUser',$info[0]['objectclass'])) {
|
||||||
|
$validLDAPConfig = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!in_array('dbmailuser',$info[0]['objectclass']) && !in_array('dbmailUser',$info[0]['objectclass']) && $info[0]['mail']) {
|
||||||
|
$newData['objectclass'] = $info[0]['objectclass'];
|
||||||
|
unset($newData['objectclass']['count']);
|
||||||
|
$newData['objectclass'][] = 'dbmailUser';
|
||||||
|
sort($newData['objectclass']);
|
||||||
|
$newData['dbmailGID'] = sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id']));
|
||||||
|
$newData['dbmailUID'] = (!empty($this->domainName)) ? $_username .'@'. $this->domainName : $_username;
|
||||||
|
|
||||||
|
if(ldap_modify($ds, $info[0]['dn'], $newData)) {
|
||||||
|
$validLDAPConfig = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ((in_array('dbmailuser',$info[0]['objectclass']) || in_array('dbmailUser',$info[0]['objectclass'])) && !$info[0]['dbmailuid']) {
|
||||||
|
$newData = array();
|
||||||
|
$newData['dbmailUID'] = (!empty($this->domainName)) ? $_username .'@'. $this->domainName : $_username;
|
||||||
|
|
||||||
|
if(!ldap_modify($ds, $info[0]['dn'], $newData)) {
|
||||||
|
#print ldap_error($ds);
|
||||||
|
#return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((in_array('dbmailuser',$info[0]['objectclass']) || in_array('dbmailUser',$info[0]['objectclass'])) && !$info[0]['dbmailgid']) {
|
||||||
|
$newData = array();
|
||||||
|
$newData['dbmailGID'] = sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id']));
|
||||||
|
|
||||||
|
if(!ldap_modify($ds, $info[0]['dn'], $newData)) {
|
||||||
|
#print ldap_error($ds);
|
||||||
|
#return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($validLDAPConfig) {
|
||||||
|
$newData = array();
|
||||||
|
|
||||||
|
if((int)$_quota >= 0) {
|
||||||
|
$newData['mailQuota'] = (int)$_quota * 1048576;
|
||||||
|
} else {
|
||||||
|
$newData['mailQuota'] = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!ldap_modify($ds, $info[0]['dn'], $newData)) {
|
||||||
|
#print ldap_error($ds);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
158
emailadmin/inc/class.dbmailqmailuser.inc.php
Normal file
158
emailadmin/inc/class.dbmailqmailuser.inc.php
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
<?php
|
||||||
|
/***************************************************************************\
|
||||||
|
* EGroupWare - EMailAdmin *
|
||||||
|
* http://www.egroupware.org *
|
||||||
|
* Written by : Lars Kneschke [lkneschke@linux-at-work.de] *
|
||||||
|
* ------------------------------------------------- *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms of the GNU General Public License as published by the *
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at your *
|
||||||
|
* option) any later version. *
|
||||||
|
\***************************************************************************/
|
||||||
|
/* $Id: class.cyrusimap.inc.php,v 1.9 2005/12/02 15:44:31 ralfbecker Exp $ */
|
||||||
|
|
||||||
|
include_once(EGW_SERVER_ROOT."/emailadmin/inc/class.defaultimap.inc.php");
|
||||||
|
|
||||||
|
class dbmailqmailuser extends defaultimap {
|
||||||
|
var $enableSieve = false;
|
||||||
|
|
||||||
|
var $sieveHost;
|
||||||
|
|
||||||
|
var $sievePort;
|
||||||
|
|
||||||
|
function addAccount($_hookValues) {
|
||||||
|
return $this->updateAccount($_hookValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
#function deleteAccount($_hookValues) {
|
||||||
|
#}
|
||||||
|
function getUserData($_username) {
|
||||||
|
$userData = array();
|
||||||
|
|
||||||
|
$ds = $GLOBALS['egw']->ldap->ldapConnect(
|
||||||
|
$GLOBALS['egw_info']['server']['ldap_host'],
|
||||||
|
$GLOBALS['egw_info']['server']['ldap_root_dn'],
|
||||||
|
$GLOBALS['egw_info']['server']['ldap_root_pw']
|
||||||
|
);
|
||||||
|
|
||||||
|
if(!is_resource($ds)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$filter = '(&(objectclass=posixaccount)(uid='. $_username .')(qmailGID='. sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id'])) .'))';
|
||||||
|
$justthese = array('dn', 'objectclass', 'mailQuota');
|
||||||
|
if($sri = ldap_search($ds, $GLOBALS['egw_info']['server']['ldap_context'], $filter, $justthese)) {
|
||||||
|
|
||||||
|
if($info = ldap_get_entries($ds, $sri)) {
|
||||||
|
if(isset($info[0]['mailquota'][0])) {
|
||||||
|
$userData['quotaLimit'] = $info[0]['mailquota'][0] / 1048576;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $userData;
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateAccount($_hookValues) {
|
||||||
|
if(!$uidnumber = (int)$_hookValues['account_id']) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$ds = $GLOBALS['egw']->ldap->ldapConnect(
|
||||||
|
$GLOBALS['egw_info']['server']['ldap_host'],
|
||||||
|
$GLOBALS['egw_info']['server']['ldap_root_dn'],
|
||||||
|
$GLOBALS['egw_info']['server']['ldap_root_pw']
|
||||||
|
);
|
||||||
|
|
||||||
|
if(!is_resource($ds)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$filter = '(&(objectclass=posixaccount)(uidnumber='. $uidnumber .'))';
|
||||||
|
$justthese = array('dn', 'objectclass', 'qmailUID', 'qmailGID', 'mail');
|
||||||
|
$sri = ldap_search($ds, $GLOBALS['egw_info']['server']['ldap_context'], $filter, $justthese);
|
||||||
|
|
||||||
|
if($info = ldap_get_entries($ds, $sri)) {
|
||||||
|
if(!in_array('qmailuser',$info[0]['objectclass']) && $info[0]['email']) {
|
||||||
|
$newData['objectclass'] = $info[0]['objectclass'];
|
||||||
|
unset($newData['objectclass']['count']);
|
||||||
|
$newData['objectclass'][] = 'qmailuser';
|
||||||
|
sort($newData['objectclass']);
|
||||||
|
$newData['qmailGID'] = sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id']));
|
||||||
|
#$newData['qmailUID'] = (!empty($this->domainName)) ? $_username .'@'. $this->domainName : $_username;
|
||||||
|
|
||||||
|
ldap_modify($ds, $info[0]['dn'], $newData);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
$newData = array();
|
||||||
|
$newData['qmailGID'] = sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id']));
|
||||||
|
#$newData['qmailUID'] = (!empty($this->domainName)) ? $_username .'@'. $this->domainName : $_username;
|
||||||
|
|
||||||
|
if(!ldap_modify($ds, $info[0]['dn'], $newData)) {
|
||||||
|
#print ldap_error($ds);
|
||||||
|
#return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setUserData($_username, $_quota) {
|
||||||
|
$ds = $GLOBALS['egw']->ldap->ldapConnect(
|
||||||
|
$GLOBALS['egw_info']['server']['ldap_host'],
|
||||||
|
$GLOBALS['egw_info']['server']['ldap_root_dn'],
|
||||||
|
$GLOBALS['egw_info']['server']['ldap_root_pw']
|
||||||
|
);
|
||||||
|
|
||||||
|
if(!is_resource($ds)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$filter = '(&(objectclass=posixaccount)(uid='. $_username .'))';
|
||||||
|
$justthese = array('dn', 'objectclass', 'qmailGID', 'mail');
|
||||||
|
$sri = ldap_search($ds, $GLOBALS['egw_info']['server']['ldap_context'], $filter, $justthese);
|
||||||
|
|
||||||
|
if($info = ldap_get_entries($ds, $sri)) {
|
||||||
|
#_debug_array($info);
|
||||||
|
if(!in_array('qmailuser',$info[0]['objectclass']) && $info[0]['email']) {
|
||||||
|
$newData['objectclass'] = $info[0]['objectclass'];
|
||||||
|
unset($newData['objectclass']['count']);
|
||||||
|
$newData['objectclass'][] = 'qmailuser';
|
||||||
|
sort($newData['objectclass']);
|
||||||
|
$newData['qmailGID'] = sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id']));
|
||||||
|
|
||||||
|
ldap_modify($ds, $info[0]['dn'], $newData);
|
||||||
|
} else {
|
||||||
|
if (in_array('qmailuser',$info[0]['objectclass']) && !$info[0]['qmailgid']) {
|
||||||
|
$newData = array();
|
||||||
|
$newData['qmailGID'] = sprintf("%u", crc32($GLOBALS['egw_info']['server']['install_id']));
|
||||||
|
|
||||||
|
if(!ldap_modify($ds, $info[0]['dn'], $newData)) {
|
||||||
|
#print ldap_error($ds);
|
||||||
|
#return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$newData = array();
|
||||||
|
|
||||||
|
if((int)$_quota >= 0) {
|
||||||
|
$newData['mailQuota'] = (int)$_quota * 1048576;
|
||||||
|
} else {
|
||||||
|
$newData['mailQuota'] = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!ldap_modify($ds, $info[0]['dn'], $newData)) {
|
||||||
|
#print ldap_error($ds);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
552
emailadmin/inc/class.defaultimap.inc.php
Normal file
552
emailadmin/inc/class.defaultimap.inc.php
Normal file
@ -0,0 +1,552 @@
|
|||||||
|
<?php
|
||||||
|
/***************************************************************************\
|
||||||
|
* EGroupWare - EMailAdmin *
|
||||||
|
* http://www.egroupware.org *
|
||||||
|
* Written by : Lars Kneschke [lkneschke@linux-at-work.de] *
|
||||||
|
* ------------------------------------------------- *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms of the GNU General Public License as published by the *
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at your *
|
||||||
|
* option) any later version. *
|
||||||
|
\***************************************************************************/
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
require_once 'Net/IMAP.php';
|
||||||
|
|
||||||
|
define('IMAP_NAMESPACE_PERSONAL', 'personal');
|
||||||
|
define('IMAP_NAMESPACE_OTHERS' , 'others');
|
||||||
|
define('IMAP_NAMESPACE_SHARED' , 'shared');
|
||||||
|
define('IMAP_NAMESPACE_ALL' , 'all');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class holds all information about the imap connection.
|
||||||
|
* This is the base class for all other imap classes.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class defaultimap extends Net_IMAP
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* the password to be used for admin connections
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $adminPassword;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the username to be used for admin connections
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $adminUsername;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enable encryption
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
var $encryption;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the hostname/ip address of the imap server
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $host;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the password for the user
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $password;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the port of the imap server
|
||||||
|
*
|
||||||
|
* @var integer
|
||||||
|
*/
|
||||||
|
var $port = 143;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the username
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $username;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the domainname to be used for vmailmgr logins
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $domainName = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* validate ssl certificate
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
var $validatecert;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the mailbox delimiter
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $mailboxDelimiter = '/';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the mailbox prefix. maybe used by uw-imap only?
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $mailboxPrefix = '~/mail';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* is the mbstring extension available
|
||||||
|
*
|
||||||
|
* @var unknown_type
|
||||||
|
*/
|
||||||
|
var $mbAvailable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mailboxes which get automatic created for new accounts (INBOX == '')
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
var $imapLoginType;
|
||||||
|
var $defaultDomain;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* disable internal conversion from/to ut7
|
||||||
|
* get's used by Net_IMAP
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
var $_useUTF_7 = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* a debug switch
|
||||||
|
*/
|
||||||
|
var $debug = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the construtor
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function defaultimap()
|
||||||
|
{
|
||||||
|
if (function_exists('mb_convert_encoding')) {
|
||||||
|
$this->mbAvailable = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->restoreSessionData();
|
||||||
|
|
||||||
|
// construtor for Net_IMAP stuff
|
||||||
|
$this->Net_IMAPProtocol();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Magic method to re-connect with the imapserver, if the object get's restored from the session
|
||||||
|
*/
|
||||||
|
function __wakeup()
|
||||||
|
{
|
||||||
|
#$this->openConnection($this->isAdminConnection); // we need to re-connect
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* adds a account on the imap server
|
||||||
|
*
|
||||||
|
* @param array $_hookValues
|
||||||
|
* @return bool true on success, false on failure
|
||||||
|
*/
|
||||||
|
function addAccount($_hookValues)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* updates a account on the imap server
|
||||||
|
*
|
||||||
|
* @param array $_hookValues
|
||||||
|
* @return bool true on success, false on failure
|
||||||
|
*/
|
||||||
|
function updateAccount($_hookValues)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* deletes a account on the imap server
|
||||||
|
*
|
||||||
|
* @param array $_hookValues
|
||||||
|
* @return bool true on success, false on failure
|
||||||
|
*/
|
||||||
|
function deleteAccount($_hookValues)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function disconnect()
|
||||||
|
{
|
||||||
|
//error_log(__METHOD__.function_backtrace());
|
||||||
|
$retval = parent::disconnect();
|
||||||
|
if( PEAR::isError($retval)) error_log(__METHOD__.$retval->message);
|
||||||
|
$this->_connected = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* converts a foldername from current system charset to UTF7
|
||||||
|
*
|
||||||
|
* @param string $_folderName
|
||||||
|
* @return string the encoded foldername
|
||||||
|
*/
|
||||||
|
function encodeFolderName($_folderName)
|
||||||
|
{
|
||||||
|
if($this->mbAvailable) {
|
||||||
|
return mb_convert_encoding($_folderName, "UTF7-IMAP", $GLOBALS['egw']->translation->charset());
|
||||||
|
}
|
||||||
|
|
||||||
|
// if not
|
||||||
|
// we can encode only from ISO 8859-1
|
||||||
|
return imap_utf7_encode($_folderName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the supported capabilities of the imap server
|
||||||
|
* return false if the imap server does not support capabilities
|
||||||
|
*
|
||||||
|
* @return array the supported capabilites
|
||||||
|
*/
|
||||||
|
function getCapabilities()
|
||||||
|
{
|
||||||
|
if(!is_array($this->sessionData['capabilities'][$this->host])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->sessionData['capabilities'][$this->host];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return the delimiter used by the current imap server
|
||||||
|
*
|
||||||
|
* @return string the delimimiter
|
||||||
|
*/
|
||||||
|
function getDelimiter()
|
||||||
|
{
|
||||||
|
return isset($this->sessionData['delimiter'][$this->host]) ? $this->sessionData['delimiter'][$this->host] : $this->mailboxDelimiter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create transport string
|
||||||
|
*
|
||||||
|
* @return string the transportstring
|
||||||
|
*/
|
||||||
|
function _getTransportString()
|
||||||
|
{
|
||||||
|
if($this->encryption == 2) {
|
||||||
|
$connectionString = "tls://". $this->host;
|
||||||
|
} elseif($this->encryption == 3) {
|
||||||
|
$connectionString = "ssl://". $this->host;
|
||||||
|
} else {
|
||||||
|
// no tls
|
||||||
|
$connectionString = $this->host;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $connectionString;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the options array for SSL/TLS connections
|
||||||
|
*
|
||||||
|
* @return string the transportstring
|
||||||
|
*/
|
||||||
|
function _getTransportOptions()
|
||||||
|
{
|
||||||
|
if($this->validatecert === false) {
|
||||||
|
if($this->encryption == 2) {
|
||||||
|
return array(
|
||||||
|
'tls' => array(
|
||||||
|
'verify_peer' => false,
|
||||||
|
'allow_self_signed' => true,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} elseif($this->encryption == 3) {
|
||||||
|
return array(
|
||||||
|
'ssl' => array(
|
||||||
|
'verify_peer' => false,
|
||||||
|
'allow_self_signed' => true,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if($this->encryption == 2) {
|
||||||
|
return array(
|
||||||
|
'tls' => array(
|
||||||
|
'verify_peer' => true,
|
||||||
|
'allow_self_signed' => false,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
} elseif($this->encryption == 3) {
|
||||||
|
return array(
|
||||||
|
'ssl' => array(
|
||||||
|
'verify_peer' => true,
|
||||||
|
'allow_self_signed' => false,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get the effective Username for the Mailbox, as it is depending on the loginType
|
||||||
|
* @param string $_username
|
||||||
|
* @return string the effective username to be used to access the Mailbox
|
||||||
|
*/
|
||||||
|
function getMailBoxUserName($_username)
|
||||||
|
{
|
||||||
|
if ($this->loginType == 'email')
|
||||||
|
{
|
||||||
|
$_username = $_username;
|
||||||
|
$accountID = $GLOBALS['egw']->accounts->name2id($_username);
|
||||||
|
$accountemail = $GLOBALS['egw']->accounts->id2name($accountID,'account_email');
|
||||||
|
//$accountemail = $GLOBALS['egw']->accounts->read($GLOBALS['egw']->accounts->name2id($_username,'account_email'));
|
||||||
|
if (!empty($accountemail))
|
||||||
|
{
|
||||||
|
list($lusername,$domain) = explode('@',$accountemail,2);
|
||||||
|
if (strtolower($domain) == strtolower($this->domainName) && !empty($lusername))
|
||||||
|
{
|
||||||
|
$_username = $lusername;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $_username;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create mailbox string from given mailbox-name and user-name
|
||||||
|
*
|
||||||
|
* @param string $_folderName=''
|
||||||
|
* @return string utf-7 encoded (done in getMailboxName)
|
||||||
|
*/
|
||||||
|
function getUserMailboxString($_username, $_folderName='')
|
||||||
|
{
|
||||||
|
$nameSpaces = $this->getNameSpaces();
|
||||||
|
|
||||||
|
if(!isset($nameSpaces['others'])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$_username = $this->getMailBoxUserName($_username);
|
||||||
|
if($this->loginType == 'vmailmgr' || $this->loginType == 'email') {
|
||||||
|
$_username .= '@'. $this->domainName;
|
||||||
|
}
|
||||||
|
|
||||||
|
$mailboxString = $nameSpaces['others'][0]['name'] . $_username . (!empty($_folderName) ? $nameSpaces['others'][0]['delimiter'] . $_folderName : '');
|
||||||
|
|
||||||
|
return $mailboxString;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* get list of namespaces
|
||||||
|
*
|
||||||
|
* @return array array containing information about namespace
|
||||||
|
*/
|
||||||
|
function getNameSpaces()
|
||||||
|
{
|
||||||
|
if(!$this->_connected) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$retrieveDefault = false;
|
||||||
|
if($this->hasCapability('NAMESPACE')) {
|
||||||
|
$nameSpace = $this->getNamespace();
|
||||||
|
if( PEAR::isError($nameSpace)) {
|
||||||
|
if ($this->debug) error_log("emailadmin::defaultimap->getNameSpaces:".print_r($nameSpace,true));
|
||||||
|
$retrieveDefault = true;
|
||||||
|
} else {
|
||||||
|
$result = array();
|
||||||
|
|
||||||
|
$result['personal'] = $nameSpace['personal'];
|
||||||
|
|
||||||
|
if(is_array($nameSpace['others'])) {
|
||||||
|
$result['others'] = $nameSpace['others'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(is_array($nameSpace['shared'])) {
|
||||||
|
$result['shared'] = $nameSpace['shared'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!$this->hasCapability('NAMESPACE') || $retrieveDefault) {
|
||||||
|
$delimiter = $this->getHierarchyDelimiter();
|
||||||
|
if( PEAR::isError($delimiter)) $delimiter = '/';
|
||||||
|
|
||||||
|
$result['personal'] = array(
|
||||||
|
0 => array(
|
||||||
|
'name' => '',
|
||||||
|
'delimiter' => $delimiter
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the quota for given foldername
|
||||||
|
* gets quota for the current user only
|
||||||
|
*
|
||||||
|
* @param string $_folderName
|
||||||
|
* @return string the current quota for this folder
|
||||||
|
*/
|
||||||
|
# function getQuota($_folderName)
|
||||||
|
# {
|
||||||
|
# if(!is_resource($this->mbox)) {
|
||||||
|
# $this->openConnection();
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# if(function_exists('imap_get_quotaroot') && $this->supportsCapability('QUOTA')) {
|
||||||
|
# $quota = @imap_get_quotaroot($this->mbox, $this->encodeFolderName($_folderName));
|
||||||
|
# if(is_array($quota) && isset($quota['STORAGE'])) {
|
||||||
|
# return $quota['STORAGE'];
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# return false;
|
||||||
|
# }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return the quota for another user
|
||||||
|
* used by admin connections only
|
||||||
|
*
|
||||||
|
* @param string $_username
|
||||||
|
* @return string the quota for specified user
|
||||||
|
*/
|
||||||
|
function getQuotaByUser($_username)
|
||||||
|
{
|
||||||
|
$mailboxName = $this->getUserMailboxString($_username);
|
||||||
|
//error_log(__METHOD__.$mailboxName);
|
||||||
|
$storageQuota = $this->getStorageQuota($mailboxName);
|
||||||
|
//error_log(__METHOD__.$_username);
|
||||||
|
//error_log(__METHOD__.$mailboxName);
|
||||||
|
if ( PEAR::isError($storageQuota)) error_log(__METHOD__.$storageQuota->message);
|
||||||
|
if(is_array($storageQuota) && isset($storageQuota['QMAX'])) {
|
||||||
|
return (int)$storageQuota['QMAX'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns information about a user
|
||||||
|
* currently only supported information is the current quota
|
||||||
|
*
|
||||||
|
* @param string $_username
|
||||||
|
* @return array userdata
|
||||||
|
*/
|
||||||
|
function getUserData($_username)
|
||||||
|
{
|
||||||
|
if($this->_connected === true) {
|
||||||
|
//error_log(__METHOD__."try to disconnect");
|
||||||
|
$this->disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->openConnection(true);
|
||||||
|
$userData = array();
|
||||||
|
|
||||||
|
if($quota = $this->getQuotaByUser($_username)) {
|
||||||
|
$userData['quotaLimit'] = $quota / 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->disconnect();
|
||||||
|
|
||||||
|
return $userData;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* opens a connection to a imap server
|
||||||
|
*
|
||||||
|
* @param bool $_adminConnection create admin connection if true
|
||||||
|
*
|
||||||
|
* @return resource the imap connection
|
||||||
|
*/
|
||||||
|
function openConnection($_adminConnection=false)
|
||||||
|
{
|
||||||
|
//error_log(__METHOD__.function_backtrace());
|
||||||
|
unset($this->_connectionErrorObject);
|
||||||
|
|
||||||
|
if($_adminConnection) {
|
||||||
|
$username = $this->adminUsername;
|
||||||
|
$password = $this->adminPassword;
|
||||||
|
$options = '';
|
||||||
|
$this->isAdminConnection = true;
|
||||||
|
} else {
|
||||||
|
$username = $this->loginName;
|
||||||
|
$password = $this->password;
|
||||||
|
$options = $_options;
|
||||||
|
$this->isAdminConnection = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->setStreamContextOptions($this->_getTransportOptions());
|
||||||
|
$this->setTimeout(20);
|
||||||
|
if( PEAR::isError($status = parent::connect($this->_getTransportString(), $this->port, $this->encryption == 1)) ) {
|
||||||
|
error_log(__METHOD__."Could not connect");
|
||||||
|
error_log(__METHOD__.$status->message);
|
||||||
|
$this->_connectionErrorObject = $status;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if( PEAR::isError($status = parent::login($username, $password, TRUE, !$this->isAdminConnection)) ) {
|
||||||
|
error_log(__METHOD__."Could not log in");
|
||||||
|
error_log(__METHOD__.$status->message);
|
||||||
|
$this->_connectionErrorObject = $status;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* restore session variable
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function restoreSessionData()
|
||||||
|
{
|
||||||
|
$this->sessionData = $GLOBALS['egw']->session->appsession('imap_session_data');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* save session variable
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function saveSessionData()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw']->session->appsession('imap_session_data','',$this->sessionData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set userdata
|
||||||
|
*
|
||||||
|
* @param string $_username username of the user
|
||||||
|
* @param int $_quota quota in bytes
|
||||||
|
* @return bool true on success, false on failure
|
||||||
|
*/
|
||||||
|
function setUserData($_username, $_quota)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* check if imap server supports given capability
|
||||||
|
*
|
||||||
|
* @param string $_capability the capability to check for
|
||||||
|
* @return bool true if capability is supported, false if not
|
||||||
|
*/
|
||||||
|
function supportsCapability($_capability)
|
||||||
|
{
|
||||||
|
return $this->hasCapability($_capability);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
94
emailadmin/inc/class.defaultpop.inc.php
Normal file
94
emailadmin/inc/class.defaultpop.inc.php
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
<?php
|
||||||
|
/***************************************************************************\
|
||||||
|
* EGroupWare - EMailAdmin *
|
||||||
|
* http://www.egroupware.org *
|
||||||
|
* Written by : Lars Kneschke [lkneschke@linux-at-work.de] *
|
||||||
|
* ------------------------------------------------- *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms of the GNU General Public License as published by the *
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at your *
|
||||||
|
* option) any later version. *
|
||||||
|
\***************************************************************************/
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
class defaultpop
|
||||||
|
{
|
||||||
|
var $profileData;
|
||||||
|
|
||||||
|
function defaultpop($_profileData)
|
||||||
|
{
|
||||||
|
$this->profileData = $_profileData;
|
||||||
|
}
|
||||||
|
|
||||||
|
function addAccount($_hookValues)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteAccount($_hookValues)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function encodeFolderName($_folderName)
|
||||||
|
{
|
||||||
|
if($this->mbAvailable)
|
||||||
|
{
|
||||||
|
return mb_convert_encoding( $_folderName, "UTF7-IMAP", "ISO_8859-1" );
|
||||||
|
}
|
||||||
|
|
||||||
|
// if not
|
||||||
|
return imap_utf7_encode($_folderName);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMailboxString($_folderName='')
|
||||||
|
{
|
||||||
|
if($this->profileData['imapTLSEncryption'] == 'yes' &&
|
||||||
|
$this->profileData['imapTLSAuthentication'] == 'yes')
|
||||||
|
{
|
||||||
|
if(empty($this->profileData['imapPort']))
|
||||||
|
$port = '995';
|
||||||
|
else
|
||||||
|
$port = $this->profileData['imapPort'];
|
||||||
|
|
||||||
|
$mailboxString = sprintf("{%s:%s/pop3/ssl}%s",
|
||||||
|
$this->profileData['imapServer'],
|
||||||
|
$port,
|
||||||
|
$_folderName);
|
||||||
|
}
|
||||||
|
// don't check cert
|
||||||
|
elseif($this->profileData['imapTLSEncryption'] == 'yes')
|
||||||
|
{
|
||||||
|
if(empty($this->profileData['imapPort']))
|
||||||
|
$port = '995';
|
||||||
|
else
|
||||||
|
$port = $this->profileData['imapPort'];
|
||||||
|
|
||||||
|
$mailboxString = sprintf("{%s:%s/pop3/ssl/novalidate-cert}%s",
|
||||||
|
$this->profileData['imapServer'],
|
||||||
|
$port,
|
||||||
|
$_folderName);
|
||||||
|
}
|
||||||
|
// no tls
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(empty($this->profileData['imapPort']))
|
||||||
|
$port = '110';
|
||||||
|
else
|
||||||
|
$port = $this->profileData['imapPort'];
|
||||||
|
|
||||||
|
$mailboxString = sprintf("{%s:%s/pop3}%s",
|
||||||
|
$this->profileData['imapServer'],
|
||||||
|
$port,
|
||||||
|
$_folderName);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->encodeFolderName($mailboxString);
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateAccount($_hookValues)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
85
emailadmin/inc/class.defaultsmtp.inc.php
Normal file
85
emailadmin/inc/class.defaultsmtp.inc.php
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
<?php
|
||||||
|
/***************************************************************************\
|
||||||
|
* EGroupWare - EMailAdmin *
|
||||||
|
* http://www.egroupware.org *
|
||||||
|
* Written by : Lars Kneschke [lkneschke@linux-at-work.de] *
|
||||||
|
* ------------------------------------------------- *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms of the GNU General Public License as published by the *
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at your *
|
||||||
|
* option) any later version. *
|
||||||
|
\***************************************************************************/
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
class defaultsmtp
|
||||||
|
{
|
||||||
|
var $smtpAuth = false;
|
||||||
|
|
||||||
|
var $editForwardingAddress = false;
|
||||||
|
|
||||||
|
var $host;
|
||||||
|
|
||||||
|
var $port;
|
||||||
|
|
||||||
|
var $username;
|
||||||
|
|
||||||
|
var $password;
|
||||||
|
|
||||||
|
var $defaultDomain;
|
||||||
|
|
||||||
|
// the constructor
|
||||||
|
function defaultsmtp($defaultDomain=null)
|
||||||
|
{
|
||||||
|
$this->defaultDomain = $defaultDomain ? $defaultDomain : $GLOBALS['egw_info']['server']['mail_suffix'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// add a account
|
||||||
|
function addAccount($_hookValues)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete a account
|
||||||
|
function deleteAccount($_hookValues)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAccountEmailAddress($_accountName)
|
||||||
|
{
|
||||||
|
$accountID = $GLOBALS['egw']->accounts->name2id($_accountName);
|
||||||
|
$emailAddress = $GLOBALS['egw']->accounts->id2name($accountID,'account_email');
|
||||||
|
if(empty($emailAddress))
|
||||||
|
$emailAddress = $_accountName.'@'.$this->defaultDomain;
|
||||||
|
|
||||||
|
$realName = trim($GLOBALS['egw_info']['user']['firstname'] . (!empty($GLOBALS['egw_info']['user']['firstname']) ? ' ' : '') . $GLOBALS['egw_info']['user']['lastname']);
|
||||||
|
|
||||||
|
return array(
|
||||||
|
array(
|
||||||
|
'name' => $realName,
|
||||||
|
'address' => $emailAddress,
|
||||||
|
'type' => 'default'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getUserData($_uidnumber) {
|
||||||
|
$userData = array();
|
||||||
|
|
||||||
|
return $userData;
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveSMTPForwarding($_accountID, $_forwardingAddress, $_keepLocalCopy) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setUserData($_uidnumber, $_mailAlternateAddress, $_mailForwardingAddress, $_deliveryMode) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// update a account
|
||||||
|
function updateAccount($_hookValues) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
27
emailadmin/inc/class.ea_identity.inc.php
Normal file
27
emailadmin/inc/class.ea_identity.inc.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
/***************************************************************************\
|
||||||
|
* eGroupWare - EMailAdmin *
|
||||||
|
* http://www.egroupware.org *
|
||||||
|
* Written by : Lars Kneschke [lkneschke@egrouware.org] *
|
||||||
|
* ------------------------------------------------- *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms of the GNU General Public License as published by the *
|
||||||
|
* Free Software Foundation; version 2 of the License. *
|
||||||
|
\***************************************************************************/
|
||||||
|
/* $Id: class.bopreferences.inc.php,v 1.26 2005/11/28 18:00:18 lkneschke Exp $ */
|
||||||
|
|
||||||
|
class ea_identity
|
||||||
|
{
|
||||||
|
// email address of the user
|
||||||
|
var $emailAddress;
|
||||||
|
|
||||||
|
// real name of the user
|
||||||
|
var $realName;
|
||||||
|
|
||||||
|
// name of the organization
|
||||||
|
var $organization;
|
||||||
|
|
||||||
|
// the default identity
|
||||||
|
var $default = true;
|
||||||
|
}
|
||||||
|
?>
|
153
emailadmin/inc/class.ea_preferences.inc.php
Normal file
153
emailadmin/inc/class.ea_preferences.inc.php
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
<?php
|
||||||
|
/***************************************************************************\
|
||||||
|
* eGroupWare - EMailAdmin *
|
||||||
|
* http://www.egroupware.org *
|
||||||
|
* Written by : Lars Kneschke [lkneschke@egrouware.org] *
|
||||||
|
* ------------------------------------------------- *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms of the GNU General Public License as published by the *
|
||||||
|
* Free Software Foundation; version 2 of the License. *
|
||||||
|
\***************************************************************************/
|
||||||
|
/* $Id: class.bopreferences.inc.php,v 1.26 2005/11/28 18:00:18 lkneschke Exp $ */
|
||||||
|
|
||||||
|
class ea_preferences
|
||||||
|
{
|
||||||
|
// users identities
|
||||||
|
var $identities = array();
|
||||||
|
|
||||||
|
// users incoming server(imap/pop3)
|
||||||
|
var $ic_server = array();
|
||||||
|
|
||||||
|
// users outgoing server(smtp)
|
||||||
|
var $og_server = array();
|
||||||
|
|
||||||
|
// users preferences
|
||||||
|
var $preferences = array();
|
||||||
|
|
||||||
|
// enable userdefined accounts
|
||||||
|
var $userDefinedAccounts = false;
|
||||||
|
|
||||||
|
// enable userdefined signatures
|
||||||
|
var $ea_user_defined_signatures = false;
|
||||||
|
|
||||||
|
function getIdentity($_id = -1)
|
||||||
|
{
|
||||||
|
if($_id != -1)
|
||||||
|
{
|
||||||
|
return $this->identities[$_id];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return $this->identities;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getIncomingServer($_id = -1)
|
||||||
|
{
|
||||||
|
if($_id != -1)
|
||||||
|
{
|
||||||
|
return $this->ic_server[$_id];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return $this->ic_server;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getOutgoingServer($_id = -1)
|
||||||
|
{
|
||||||
|
if($_id != -1)
|
||||||
|
{
|
||||||
|
return $this->og_server[$_id];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return $this->og_server;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPreferences() {
|
||||||
|
return $this->preferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getUserEMailAddresses() {
|
||||||
|
$identities = $this->getIdentity();
|
||||||
|
|
||||||
|
if(count($identities) == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$userEMailAdresses = array();
|
||||||
|
|
||||||
|
foreach($identities as $identity) {
|
||||||
|
$userEMailAdresses[$identity->emailAddress] = $identity->realName;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $userEMailAdresses;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setIdentity($_identityObject, $_id = -1)
|
||||||
|
{
|
||||||
|
if(is_a($_identityObject, 'ea_identity'))
|
||||||
|
{
|
||||||
|
if($_id != -1)
|
||||||
|
{
|
||||||
|
$this->identities[$_id] = $_identityObject;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->identities[] = $_identityObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setIncomingServer($_serverObject, $_id = -1)
|
||||||
|
{
|
||||||
|
if(is_a($_serverObject, 'defaultimap'))
|
||||||
|
{
|
||||||
|
if($_id != -1)
|
||||||
|
{
|
||||||
|
$this->ic_server[$_id] = $_serverObject;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->ic_server[] = $_serverObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setOutgoingServer($_serverObject, $_id = -1)
|
||||||
|
{
|
||||||
|
if(is_a($_serverObject, 'defaultsmtp'))
|
||||||
|
{
|
||||||
|
if($_id != -1)
|
||||||
|
{
|
||||||
|
$this->og_server[$_id] = $_serverObject;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->og_server[] = $_serverObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setPreferences($_preferences)
|
||||||
|
{
|
||||||
|
$this->preferences = $_preferences;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
872
emailadmin/inc/class.emailadmin_bo.inc.php
Normal file
872
emailadmin/inc/class.emailadmin_bo.inc.php
Normal file
@ -0,0 +1,872 @@
|
|||||||
|
<?php
|
||||||
|
/***************************************************************************\
|
||||||
|
* eGroupWare *
|
||||||
|
* http://www.egroupware.org *
|
||||||
|
* http://www.linux-at-work.de *
|
||||||
|
* Written by : Lars Kneschke [lkneschke@linux-at-work.de] *
|
||||||
|
* ------------------------------------------------- *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms of the GNU General Public License as published by the *
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at your *
|
||||||
|
* option) any later version. *
|
||||||
|
\***************************************************************************/
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
class emailadmin_bo
|
||||||
|
{
|
||||||
|
var $sessionData;
|
||||||
|
#var $userSessionData;
|
||||||
|
var $LDAPData;
|
||||||
|
|
||||||
|
var $SMTPServerType = array(); // holds a list of config options
|
||||||
|
var $IMAPServerType = array(); // holds a list of config options
|
||||||
|
|
||||||
|
var $imapClass; // holds the imap/pop3 class
|
||||||
|
var $smtpClass; // holds the smtp class
|
||||||
|
|
||||||
|
|
||||||
|
function __construct($_profileID=-1,$_restoreSesssion=true)
|
||||||
|
{
|
||||||
|
$this->soemailadmin = new emailadmin_so();
|
||||||
|
|
||||||
|
$this->SMTPServerType = array(
|
||||||
|
'1' => array(
|
||||||
|
'fieldNames' => array(
|
||||||
|
'smtpServer',
|
||||||
|
'smtpPort',
|
||||||
|
'smtpAuth',
|
||||||
|
'ea_smtp_auth_username',
|
||||||
|
'ea_smtp_auth_password',
|
||||||
|
'smtpType'
|
||||||
|
),
|
||||||
|
'description' => lang('standard SMTP-Server'),
|
||||||
|
'classname' => 'defaultsmtp'
|
||||||
|
),
|
||||||
|
'2' => array(
|
||||||
|
'fieldNames' => array(
|
||||||
|
'smtpServer',
|
||||||
|
'smtpPort',
|
||||||
|
'smtpAuth',
|
||||||
|
'ea_smtp_auth_username',
|
||||||
|
'ea_smtp_auth_password',
|
||||||
|
'smtpType',
|
||||||
|
'editforwardingaddress',
|
||||||
|
'smtpLDAPServer',
|
||||||
|
'smtpLDAPAdminDN',
|
||||||
|
'smtpLDAPAdminPW',
|
||||||
|
'smtpLDAPBaseDN',
|
||||||
|
'smtpLDAPUseDefault'
|
||||||
|
),
|
||||||
|
'description' => 'Postfix (qmail Schema)',
|
||||||
|
'classname' => 'postfixldap'
|
||||||
|
),
|
||||||
|
'3' => array(
|
||||||
|
'fieldNames' => array(
|
||||||
|
'smtpServer',
|
||||||
|
'smtpPort',
|
||||||
|
'smtpAuth',
|
||||||
|
'ea_smtp_auth_username',
|
||||||
|
'ea_smtp_auth_password',
|
||||||
|
'smtpType',
|
||||||
|
),
|
||||||
|
'description' => 'Postfix (inetOrgPerson Schema)',
|
||||||
|
'classname' => 'postfixinetorgperson'
|
||||||
|
),
|
||||||
|
'4' => array(
|
||||||
|
'fieldNames' => array(
|
||||||
|
'smtpServer',
|
||||||
|
'smtpPort',
|
||||||
|
'smtpAuth',
|
||||||
|
'ea_smtp_auth_username',
|
||||||
|
'ea_smtp_auth_password',
|
||||||
|
'smtpType',
|
||||||
|
'editforwardingaddress',
|
||||||
|
),
|
||||||
|
'description' => 'Plesk SMTP-Server (Qmail)',
|
||||||
|
'classname' => 'smtpplesk'
|
||||||
|
),
|
||||||
|
'5' => array(
|
||||||
|
'fieldNames' => array(
|
||||||
|
'smtpServer',
|
||||||
|
'smtpPort',
|
||||||
|
'smtpAuth',
|
||||||
|
'ea_smtp_auth_username',
|
||||||
|
'ea_smtp_auth_password',
|
||||||
|
'smtpType',
|
||||||
|
'editforwardingaddress',
|
||||||
|
'smtpLDAPServer',
|
||||||
|
'smtpLDAPAdminDN',
|
||||||
|
'smtpLDAPAdminPW',
|
||||||
|
'smtpLDAPBaseDN',
|
||||||
|
'smtpLDAPUseDefault'
|
||||||
|
),
|
||||||
|
'description' => 'Postfix (dbmail Schema)',
|
||||||
|
'classname' => 'postfixdbmailuser'
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->IMAPServerType = array(
|
||||||
|
/* '1' => array(
|
||||||
|
'fieldNames' => array(
|
||||||
|
'imapServer',
|
||||||
|
'imapPort',
|
||||||
|
'imapType',
|
||||||
|
'imapLoginType',
|
||||||
|
'imapTLSEncryption',
|
||||||
|
'imapTLSAuthentication',
|
||||||
|
'imapoldcclient'
|
||||||
|
),
|
||||||
|
'description' => 'standard POP3 server',
|
||||||
|
'protocol' => 'pop3',
|
||||||
|
'classname' => 'defaultpop'
|
||||||
|
),*/
|
||||||
|
'2' => array(
|
||||||
|
'fieldNames' => array(
|
||||||
|
'imapServer',
|
||||||
|
'imapPort',
|
||||||
|
'imapType',
|
||||||
|
'imapLoginType',
|
||||||
|
'imapTLSEncryption',
|
||||||
|
'imapTLSAuthentication',
|
||||||
|
'imapoldcclient',
|
||||||
|
'imapAuthUsername',
|
||||||
|
'imapAuthPassword'
|
||||||
|
),
|
||||||
|
'description' => 'standard IMAP server',
|
||||||
|
'protocol' => 'imap',
|
||||||
|
'classname' => 'defaultimap'
|
||||||
|
),
|
||||||
|
'3' => array(
|
||||||
|
'fieldNames' => array(
|
||||||
|
'imapServer',
|
||||||
|
'imapPort',
|
||||||
|
'imapType',
|
||||||
|
'imapLoginType',
|
||||||
|
'imapTLSEncryption',
|
||||||
|
'imapTLSAuthentication',
|
||||||
|
'imapoldcclient',
|
||||||
|
'imapEnableCyrusAdmin',
|
||||||
|
'imapAdminUsername',
|
||||||
|
'imapAdminPW',
|
||||||
|
'imapEnableSieve',
|
||||||
|
'imapSieveServer',
|
||||||
|
'imapSievePort',
|
||||||
|
'imapAuthUsername',
|
||||||
|
'imapAuthPassword'
|
||||||
|
),
|
||||||
|
'description' => 'Cyrus IMAP Server',
|
||||||
|
'protocol' => 'imap',
|
||||||
|
'classname' => 'cyrusimap'
|
||||||
|
),
|
||||||
|
'4' => array(
|
||||||
|
'fieldNames' => array(
|
||||||
|
'imapServer',
|
||||||
|
'imapPort',
|
||||||
|
'imapType',
|
||||||
|
'imapLoginType',
|
||||||
|
'imapTLSEncryption',
|
||||||
|
'imapTLSAuthentication',
|
||||||
|
'imapoldcclient',
|
||||||
|
'imapEnableSieve',
|
||||||
|
'imapSieveServer',
|
||||||
|
'imapSievePort',
|
||||||
|
'imapAuthUsername',
|
||||||
|
'imapAuthPassword',
|
||||||
|
),
|
||||||
|
'description' => 'DBMail (qmailUser schema)',
|
||||||
|
'protocol' => 'imap',
|
||||||
|
'classname' => 'dbmailqmailuser'
|
||||||
|
),
|
||||||
|
'5' => array(
|
||||||
|
'fieldNames' => array(
|
||||||
|
'imapServer',
|
||||||
|
'imapPort',
|
||||||
|
'imapType',
|
||||||
|
'imapLoginType',
|
||||||
|
'imapTLSEncryption',
|
||||||
|
'imapTLSAuthentication',
|
||||||
|
'imapoldcclient',
|
||||||
|
'imapAuthUsername',
|
||||||
|
'imapAuthPassword'
|
||||||
|
),
|
||||||
|
'description' => 'Plesk IMAP Server (Courier)',
|
||||||
|
'protocol' => 'imap',
|
||||||
|
'classname' => 'pleskimap'
|
||||||
|
),
|
||||||
|
'6' => array(
|
||||||
|
'fieldNames' => array(
|
||||||
|
'imapServer',
|
||||||
|
'imapPort',
|
||||||
|
'imapType',
|
||||||
|
'imapLoginType',
|
||||||
|
'imapTLSEncryption',
|
||||||
|
'imapTLSAuthentication',
|
||||||
|
'imapoldcclient',
|
||||||
|
'imapEnableSieve',
|
||||||
|
'imapSieveServer',
|
||||||
|
'imapSievePort',
|
||||||
|
'imapAuthUsername',
|
||||||
|
'imapAuthPassword'
|
||||||
|
),
|
||||||
|
'description' => 'DBMail (dbmailUser schema)',
|
||||||
|
'protocol' => 'imap',
|
||||||
|
'classname' => 'dbmaildbmailuser'
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($_restoreSesssion && !(is_array($this->sessionData) && (count($this->sessionData)>0)) )
|
||||||
|
{
|
||||||
|
$this->restoreSessionData();
|
||||||
|
}
|
||||||
|
if ($_restoreSesssion===false && (is_array($this->sessionData) && (count($this->sessionData)>0)) )
|
||||||
|
{
|
||||||
|
// make sure session data will be created new
|
||||||
|
$this->sessionData = array();
|
||||||
|
self::saveSessionData();
|
||||||
|
}
|
||||||
|
#_debug_array($this->sessionData);
|
||||||
|
if($_profileID >= 0)
|
||||||
|
{
|
||||||
|
$this->profileID = $_profileID;
|
||||||
|
|
||||||
|
$this->profileData = $this->getProfile($_profileID);
|
||||||
|
|
||||||
|
// try autoloading class, if that fails include it from emailadmin
|
||||||
|
if (!class_exists($class = $this->IMAPServerType[$this->profileData['imapType']]['classname']))
|
||||||
|
{
|
||||||
|
include_once(EGW_INCLUDE_ROOT.'/emailadmin/inc/class.'.$class.'.inc.php');
|
||||||
|
}
|
||||||
|
$this->imapClass = new $class;
|
||||||
|
|
||||||
|
if (!class_exists($class = $this->SMTPServerType[$this->profileData['smtpType']]['classname']))
|
||||||
|
{
|
||||||
|
include_once(EGW_INCLUDE_ROOT.'/emailadmin/inc/class.'.$class.'.inc.php');
|
||||||
|
}
|
||||||
|
$this->smtpClass = new $class;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function addAccount($_hookValues)
|
||||||
|
{
|
||||||
|
if (is_object($this->imapClass))
|
||||||
|
{
|
||||||
|
#ExecMethod("emailadmin.".$this->imapClass.".addAccount",$_hookValues,3,$this->profileData);
|
||||||
|
$this->imapClass->addAccount($_hookValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_object($this->smtpClass))
|
||||||
|
{
|
||||||
|
#ExecMethod("emailadmin.".$this->smtpClass.".addAccount",$_hookValues,3,$this->profileData);
|
||||||
|
$this->smtpClass->addAccount($_hookValues);
|
||||||
|
}
|
||||||
|
$this->sessionData =array();
|
||||||
|
$this->saveSessionData();
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteAccount($_hookValues)
|
||||||
|
{
|
||||||
|
if (is_object($this->imapClass))
|
||||||
|
{
|
||||||
|
#ExecMethod("emailadmin.".$this->imapClass.".deleteAccount",$_hookValues,3,$this->profileData);
|
||||||
|
$this->imapClass->deleteAccount($_hookValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_object($this->smtpClass))
|
||||||
|
{
|
||||||
|
#ExecMethod("emailadmin.".$this->smtpClass.".deleteAccount",$_hookValues,3,$this->profileData);
|
||||||
|
$this->smtpClass->deleteAccount($_hookValues);
|
||||||
|
}
|
||||||
|
$this->sessionData = array();
|
||||||
|
$this->saveSessionData();
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteProfile($_profileID)
|
||||||
|
{
|
||||||
|
$this->soemailadmin->deleteProfile($_profileID);
|
||||||
|
$this->sessionData['profile'][$_profileID] = array();
|
||||||
|
$this->saveSessionData();
|
||||||
|
}
|
||||||
|
|
||||||
|
function encodeHeader($_string, $_encoding='q')
|
||||||
|
{
|
||||||
|
switch($_encoding)
|
||||||
|
{
|
||||||
|
case "q":
|
||||||
|
if(!preg_match("/[\x80-\xFF]/",$_string))
|
||||||
|
{
|
||||||
|
// nothing to quote, only 7 bit ascii
|
||||||
|
return $_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
$string = imap_8bit($_string);
|
||||||
|
$stringParts = explode("=\r\n",$string);
|
||||||
|
while(list($key,$value) = each($stringParts))
|
||||||
|
{
|
||||||
|
if(!empty($retString)) $retString .= " ";
|
||||||
|
$value = str_replace(" ","_",$value);
|
||||||
|
// imap_8bit does not convert "?"
|
||||||
|
// it does not need, but it should
|
||||||
|
$value = str_replace("?","=3F",$value);
|
||||||
|
$retString .= "=?".strtoupper($this->displayCharset)."?Q?" . $value. "?=";
|
||||||
|
}
|
||||||
|
#exit;
|
||||||
|
return $retString;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return $_string;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAccountEmailAddress($_accountName, $_profileID)
|
||||||
|
{
|
||||||
|
$profileData = $this->getProfile($_profileID);
|
||||||
|
|
||||||
|
#$smtpClass = $this->SMTPServerType[$profileData['smtpType']]['classname'];
|
||||||
|
$smtpClass = CreateObject('emailadmin.'.$this->SMTPServerType[$profileData['smtpType']]['classname']);
|
||||||
|
|
||||||
|
#return empty($smtpClass) ? False : ExecMethod("emailadmin.$smtpClass.getAccountEmailAddress",$_accountName,3,$profileData);
|
||||||
|
return is_object($smtpClass) ? $smtpClass->getAccountEmailAddress($_accountName) : False;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getFieldNames($_serverTypeID, $_class)
|
||||||
|
{
|
||||||
|
switch($_class)
|
||||||
|
{
|
||||||
|
case 'imap':
|
||||||
|
return $this->IMAPServerType[$_serverTypeID]['fieldNames'];
|
||||||
|
break;
|
||||||
|
case 'smtp':
|
||||||
|
return $this->SMTPServerType[$_serverTypeID]['fieldNames'];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# function getIMAPClass($_profileID)
|
||||||
|
# {
|
||||||
|
# if(!is_object($this->imapClass))
|
||||||
|
# {
|
||||||
|
# $profileData = $this->getProfile($_profileID);
|
||||||
|
# $this->imapClass = CreateObject('emailadmin.cyrusimap',$profileData);
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# return $this->imapClass;
|
||||||
|
# }
|
||||||
|
|
||||||
|
function getIMAPServerTypes() {
|
||||||
|
foreach($this->IMAPServerType as $key => $value) {
|
||||||
|
$retData[$key]['description'] = $value['description'];
|
||||||
|
$retData[$key]['protocol'] = $value['protocol'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $retData;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getLDAPStorageData($_serverid)
|
||||||
|
{
|
||||||
|
$storageData = $this->soemailadmin->getLDAPStorageData($_serverid);
|
||||||
|
return $storageData;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMailboxString($_folderName)
|
||||||
|
{
|
||||||
|
if (is_object($this->imapClass))
|
||||||
|
{
|
||||||
|
return ExecMethod("emailadmin.".$this->imapClass.".getMailboxString",$_folderName,3,$this->profileData);
|
||||||
|
return $this->imapClass->getMailboxString($_folderName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getProfile($_profileID)
|
||||||
|
{
|
||||||
|
if (!(is_array($this->sessionData) && (count($this->sessionData)>0))) $this->restoreSessionData();
|
||||||
|
if (is_array($this->sessionData) && (count($this->sessionData)>0) && $this->sessionData['profile'][$_profileID]) {
|
||||||
|
#error_log("sessionData Restored for Profile $_profileID <br>");
|
||||||
|
return $this->sessionData['profile'][$_profileID];
|
||||||
|
}
|
||||||
|
$profileData = $this->soemailadmin->getProfileList($_profileID);
|
||||||
|
$found = false;
|
||||||
|
if (is_array($profileData) && count($profileData))
|
||||||
|
{
|
||||||
|
foreach($profileData as $n => $data)
|
||||||
|
{
|
||||||
|
if ($data['ProfileID'] == $_profileID)
|
||||||
|
{
|
||||||
|
$found = $n;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($found === false) // no existing profile selected
|
||||||
|
{
|
||||||
|
if (is_array($profileData) && count($profileData)) { // if we have a profile use that
|
||||||
|
reset($profileData);
|
||||||
|
list($found,$data) = each($profileData);
|
||||||
|
$this->profileID = $_profileID = $data['profileID'];
|
||||||
|
} elseif ($GLOBALS['egw_info']['server']['smtp_server']) { // create a default profile, from the data in the api config
|
||||||
|
$this->profileID = $_profileID = $this->soemailadmin->addProfile(array(
|
||||||
|
'description' => $GLOBALS['egw_info']['server']['smtp_server'],
|
||||||
|
'defaultDomain' => $GLOBALS['egw_info']['server']['mail_suffix'],
|
||||||
|
'organisationName' => '',
|
||||||
|
'userDefinedAccounts' => '',
|
||||||
|
'userDefinedIdentities' => '',
|
||||||
|
),array(
|
||||||
|
'smtpServer' => $GLOBALS['egw_info']['server']['smtp_server'],
|
||||||
|
'smtpPort' => $GLOBALS['egw_info']['server']['smtp_port'],
|
||||||
|
'smtpAuth' => '',
|
||||||
|
'smtpType' => '1',
|
||||||
|
),array(
|
||||||
|
'imapServer' => $GLOBALS['egw_info']['server']['mail_server'] ?
|
||||||
|
$GLOBALS['egw_info']['server']['mail_server'] : $GLOBALS['egw_info']['server']['smtp_server'],
|
||||||
|
'imapPort' => '143',
|
||||||
|
'imapType' => '2', // imap
|
||||||
|
'imapLoginType' => $GLOBALS['egw_info']['server']['mail_login_type'] ?
|
||||||
|
$GLOBALS['egw_info']['server']['mail_login_type'] : 'standard',
|
||||||
|
'imapTLSEncryption' => '0',
|
||||||
|
'imapTLSAuthentication' => '',
|
||||||
|
'imapoldcclient' => '',
|
||||||
|
));
|
||||||
|
$profileData[$found = 0] = array(
|
||||||
|
'smtpType' => '1',
|
||||||
|
'imapType' => '2',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$fieldNames = array();
|
||||||
|
if (isset($profileData[$found]))
|
||||||
|
{
|
||||||
|
$fieldNames = array_merge($this->SMTPServerType[$profileData[$found]['smtpType']]['fieldNames'],
|
||||||
|
$this->IMAPServerType[$profileData[$found]['imapType']]['fieldNames']);
|
||||||
|
}
|
||||||
|
$fieldNames[] = 'description';
|
||||||
|
$fieldNames[] = 'defaultDomain';
|
||||||
|
$fieldNames[] = 'profileID';
|
||||||
|
$fieldNames[] = 'organisationName';
|
||||||
|
$fieldNames[] = 'userDefinedAccounts';
|
||||||
|
$fieldNames[] = 'userDefinedIdentities';
|
||||||
|
$fieldNames[] = 'ea_appname';
|
||||||
|
$fieldNames[] = 'ea_group';
|
||||||
|
$fieldNames[] = 'ea_user';
|
||||||
|
$fieldNames[] = 'ea_active';
|
||||||
|
$fieldNames[] = 'ea_user_defined_signatures';
|
||||||
|
$fieldNames[] = 'ea_default_signature';
|
||||||
|
$fieldNames[] = 'ea_stationery_active_templates';
|
||||||
|
|
||||||
|
$profileData = $this->soemailadmin->getProfile($_profileID, $fieldNames);
|
||||||
|
$profileData['imapTLSEncryption'] = ($profileData['imapTLSEncryption'] == 'yes' ? 1 : (int)$profileData['imapTLSEncryption']);
|
||||||
|
if(strlen($profileData['ea_stationery_active_templates']) > 0)
|
||||||
|
{
|
||||||
|
$profileData['ea_stationery_active_templates'] = unserialize($profileData['ea_stationery_active_templates']);
|
||||||
|
}
|
||||||
|
$this->sessionData['profile'][$_profileID] = $profileData;
|
||||||
|
$this->saveSessionData();
|
||||||
|
return $profileData;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getProfileList($_profileID='',$_appName=false,$_groupID=false,$_accountID=false)
|
||||||
|
{
|
||||||
|
if ($_appName!==false ||$_groupID!==false ||$_accountID!==false) {
|
||||||
|
return $this->soemailadmin->getProfileList($_profileID,false,$_appName,$_groupID,$_accountID);
|
||||||
|
} else {
|
||||||
|
return $this->soemailadmin->getProfileList($_profileID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getSMTPServerTypes()
|
||||||
|
{
|
||||||
|
foreach($this->SMTPServerType as $key => $value)
|
||||||
|
{
|
||||||
|
$retData[$key] = $value['description'];
|
||||||
|
}
|
||||||
|
return $retData;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getUserProfile($_appName='', $_groups='')
|
||||||
|
{
|
||||||
|
if (!(is_array($this->sessionData) && (count($this->sessionData)>0))) $this->restoreSessionData();
|
||||||
|
if (is_array($this->sessionData) && count($this->sessionData)>0 && $this->sessionData['ea_preferences']) {
|
||||||
|
#error_log("sessionData Restored for UserProfile<br>");
|
||||||
|
return $this->sessionData['ea_preferences'];
|
||||||
|
}
|
||||||
|
$appName = ($_appName != '' ? $_appName : $GLOBALS['egw_info']['flags']['currentapp']);
|
||||||
|
if(!is_array($_groups)) {
|
||||||
|
// initialize with 0 => means no group id
|
||||||
|
$groups = array(0);
|
||||||
|
// set the second entry to the users primary group
|
||||||
|
$groups[] = $GLOBALS['egw_info']['user']['account_primary_group'];
|
||||||
|
$userGroups = $GLOBALS['egw']->accounts->membership($GLOBALS['egw_info']['user']['account_id']);
|
||||||
|
foreach((array)$userGroups as $groupInfo) {
|
||||||
|
$groups[] = $groupInfo['account_id'];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$groups = $_groups;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($data = $this->soemailadmin->getUserProfile($appName, $groups,$GLOBALS['egw_info']['user']['account_id'])) {
|
||||||
|
|
||||||
|
$eaPreferences = CreateObject('emailadmin.ea_preferences');
|
||||||
|
|
||||||
|
// fetch the IMAP / incomming server data
|
||||||
|
$icClass = isset($this->IMAPServerType[$data['imapType']]) ? $this->IMAPServerType[$data['imapType']]['classname'] : 'defaultimap';
|
||||||
|
|
||||||
|
$icServer = CreateObject('emailadmin.'.$icClass);
|
||||||
|
$icServer->encryption = ($data['imapTLSEncryption'] == 'yes' ? 1 : (int)$data['imapTLSEncryption']);
|
||||||
|
$icServer->host = $data['imapServer'];
|
||||||
|
$icServer->port = $data['imapPort'];
|
||||||
|
$icServer->validatecert = $data['imapTLSAuthentication'] == 'yes';
|
||||||
|
$icServer->username = $GLOBALS['egw_info']['user']['account_lid'];
|
||||||
|
$icServer->password = $GLOBALS['egw_info']['user']['passwd'];
|
||||||
|
// restore the default loginType and check if there are forced/predefined user access Data ($imapAuthType may be set to admin)
|
||||||
|
list($data['imapLoginType'],$imapAuthType) = explode('#',$data['imapLoginType'],2);
|
||||||
|
$icServer->loginType = $data['imapLoginType'];
|
||||||
|
$icServer->domainName = $data['defaultDomain'];
|
||||||
|
$icServer->loginName = $data['imapLoginType'] == 'standard' ? $GLOBALS['egw_info']['user']['account_lid'] : $GLOBALS['egw_info']['user']['account_lid'].'@'.$data['defaultDomain'];
|
||||||
|
$icServer->enableCyrusAdmin = ($data['imapEnableCyrusAdmin'] == 'yes');
|
||||||
|
$icServer->adminUsername = $data['imapAdminUsername'];
|
||||||
|
$icServer->adminPassword = $data['imapAdminPW'];
|
||||||
|
$icServer->enableSieve = ($data['imapEnableSieve'] == 'yes');
|
||||||
|
$icServer->sievePort = $data['imapSievePort'];
|
||||||
|
if ($imapAuthType == 'admin') {
|
||||||
|
if (!empty($data['imapAuthUsername'])) $icServer->username = $icServer->loginName = $data['imapAuthUsername'];
|
||||||
|
if (!empty($data['imapAuthPassword'])) $icServer->password = $data['imapAuthPassword'];
|
||||||
|
}
|
||||||
|
if ($imapAuthType == 'email' || $icServer->loginType == 'email') {
|
||||||
|
$icServer->username = $icServer->loginName = $GLOBALS['egw_info']['user']['account_email'];
|
||||||
|
}
|
||||||
|
$eaPreferences->setIncomingServer($icServer);
|
||||||
|
|
||||||
|
// fetch the SMTP / outgoing server data
|
||||||
|
$ogClass = isset($this->SMTPServerType[$data['smtpType']]) ? $this->SMTPServerType[$data['smtpType']]['classname'] : 'defaultsmtp';
|
||||||
|
|
||||||
|
if (!class_exists($ogClass))
|
||||||
|
{
|
||||||
|
include_once(EGW_INCLUDE_ROOT.'/emailadmin/inc/class.'.$ogClass.'.inc.php');
|
||||||
|
}
|
||||||
|
$ogServer = new $ogClass($icServer->domainName);
|
||||||
|
$ogServer->host = $data['smtpServer'];
|
||||||
|
$ogServer->port = $data['smtpPort'];
|
||||||
|
$ogServer->editForwardingAddress = ($data['editforwardingaddress'] == 'yes');
|
||||||
|
$ogServer->smtpAuth = $data['smtpAuth'] == 'yes';
|
||||||
|
if($ogServer->smtpAuth) {
|
||||||
|
if(!empty($data['ea_smtp_auth_username'])) {
|
||||||
|
$ogServer->username = $data['ea_smtp_auth_username'];
|
||||||
|
} else {
|
||||||
|
// if we use special logintypes for IMAP, we assume this to be used for SMTP too
|
||||||
|
if ($imapAuthType == 'email' || $icServer->loginType == 'email') {
|
||||||
|
$ogServer->username = $GLOBALS['egw_info']['user']['account_email'];
|
||||||
|
} elseif ($icServer->loginType == 'vmailmgr') {
|
||||||
|
$ogServer->username = $GLOBALS['egw_info']['user']['account_lid'].'@'.$icServer->domainName;
|
||||||
|
} else {
|
||||||
|
$ogServer->username = $GLOBALS['egw_info']['user']['account_lid'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!empty($data['ea_smtp_auth_password'])) {
|
||||||
|
$ogServer->password = $data['ea_smtp_auth_password'];
|
||||||
|
} else {
|
||||||
|
$ogServer->password = $GLOBALS['egw_info']['user']['passwd'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$eaPreferences->setOutgoingServer($ogServer);
|
||||||
|
|
||||||
|
foreach($ogServer->getAccountEmailAddress($GLOBALS['egw_info']['user']['account_lid']) as $emailAddresses)
|
||||||
|
{
|
||||||
|
$identity = CreateObject('emailadmin.ea_identity');
|
||||||
|
$identity->emailAddress = $emailAddresses['address'];
|
||||||
|
$identity->realName = $emailAddresses['name'];
|
||||||
|
$identity->default = ($emailAddresses['type'] == 'default');
|
||||||
|
$identity->organization = $data['organisationName'];
|
||||||
|
|
||||||
|
$eaPreferences->setIdentity($identity);
|
||||||
|
}
|
||||||
|
|
||||||
|
$eaPreferences->userDefinedAccounts = ($data['userDefinedAccounts'] == 'yes');
|
||||||
|
$eaPreferences->userDefinedIdentities = ($data['userDefinedIdentities'] == 'yes');
|
||||||
|
$eaPreferences->ea_user_defined_signatures = ($data['ea_user_defined_signatures'] == 'yes');
|
||||||
|
$eaPreferences->ea_default_signature = $data['ea_default_signature'];
|
||||||
|
if(strlen($data['ea_stationery_active_templates']) > 0)
|
||||||
|
{
|
||||||
|
$eaPreferences->ea_stationery_active_templates = unserialize($data['ea_stationery_active_templates']);
|
||||||
|
}
|
||||||
|
$this->sessionData['ea_preferences'] = $eaPreferences;
|
||||||
|
$this->saveSessionData();
|
||||||
|
return $eaPreferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getUserData($_accountID)
|
||||||
|
{
|
||||||
|
|
||||||
|
if($userProfile = $this->getUserProfile('felamimail')) {
|
||||||
|
$icServer = $userProfile->getIncomingServer(0);
|
||||||
|
if(is_a($icServer, 'defaultimap') && $username = $GLOBALS['egw']->accounts->id2name($_accountID)) {
|
||||||
|
$icUserData = $icServer->getUserData($username);
|
||||||
|
}
|
||||||
|
|
||||||
|
$ogServer = $userProfile->getOutgoingServer(0);
|
||||||
|
if(is_a($ogServer, 'defaultsmtp')) {
|
||||||
|
$ogUserData = $ogServer->getUserData($_accountID);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $icUserData + $ogUserData;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function restoreSessionData()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_info']['flags']['autoload'] = array(__CLASS__,'autoload');
|
||||||
|
|
||||||
|
//echo function_backtrace()."<br>";
|
||||||
|
//unserializing the sessiondata, since they are serialized for objects sake
|
||||||
|
$this->sessionData = (array) unserialize($GLOBALS['egw']->session->appsession('session_data','emailadmin'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Autoload classes from emailadmin, 'til they get autoloading conform names
|
||||||
|
*
|
||||||
|
* @param string $class
|
||||||
|
*/
|
||||||
|
static function autoload($class)
|
||||||
|
{
|
||||||
|
if (file_exists($file=EGW_INCLUDE_ROOT.'/emailadmin/inc/class.'.$class.'.inc.php'))
|
||||||
|
{
|
||||||
|
include_once($file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveSMTPForwarding($_accountID, $_forwardingAddress, $_keepLocalCopy)
|
||||||
|
{
|
||||||
|
if (is_object($this->smtpClass))
|
||||||
|
{
|
||||||
|
#$smtpClass = CreateObject('emailadmin.'.$this->smtpClass,$this->profileID);
|
||||||
|
#$smtpClass->saveSMTPForwarding($_accountID, $_forwardingAddress, $_keepLocalCopy);
|
||||||
|
$this->smtpClass->saveSMTPForwarding($_accountID, $_forwardingAddress, $_keepLocalCopy);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* called by the validation hook in setup
|
||||||
|
*
|
||||||
|
* @param array $settings following keys: mail_server, mail_server_type {IMAP|IMAPS|POP-3|POP-3S},
|
||||||
|
* mail_login_type {standard|vmailmgr}, mail_suffix (domain), smtp_server, smpt_port, smtp_auth_user, smtp_auth_passwd
|
||||||
|
*/
|
||||||
|
function setDefaultProfile($settings)
|
||||||
|
{
|
||||||
|
if (($profiles = $this->soemailadmin->getProfileList(0,true)))
|
||||||
|
{
|
||||||
|
$profile = array_shift($profiles);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$profile = array(
|
||||||
|
'smtpType' => 1,
|
||||||
|
'description' => 'default profile (created by setup)',
|
||||||
|
'ea_appname' => '',
|
||||||
|
'ea_group' => 0,
|
||||||
|
'ea_user' => 0,
|
||||||
|
'ea_active' => 1,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (empty($settings['mail_server'])) $profile['userDefinedAccounts'] = 'yes';
|
||||||
|
if (empty($settings['mail_server'])) $profile['userDefinedIdentities'] == 'yes';
|
||||||
|
if (empty($settings['mail_server'])) $profile['ea_user_defined_signatures'] == 'yes';
|
||||||
|
|
||||||
|
}
|
||||||
|
foreach($to_parse = array(
|
||||||
|
'mail_server' => 'imapServer',
|
||||||
|
'mail_server_type' => array(
|
||||||
|
'imap' => array(
|
||||||
|
'imapType' => 2,
|
||||||
|
'imapPort' => 143,
|
||||||
|
'imapTLSEncryption' => 0,
|
||||||
|
),
|
||||||
|
'imaps' => array(
|
||||||
|
'imapType' => 2,
|
||||||
|
'imapPort' => 993,
|
||||||
|
'imapTLSEncryption' => '3',
|
||||||
|
),
|
||||||
|
/* 'pop3' => array(
|
||||||
|
'imapType' => 1,
|
||||||
|
'imapPort' => 110,
|
||||||
|
'imapTLSEncryption' => 0,
|
||||||
|
),
|
||||||
|
'pop3s' => array(
|
||||||
|
'imapType' => 1,
|
||||||
|
'imapPort' => 995,
|
||||||
|
'imapTLSEncryption' => '1',
|
||||||
|
),*/
|
||||||
|
),
|
||||||
|
'mail_login_type' => 'imapLoginType',
|
||||||
|
'mail_suffix' => 'defaultDomain',
|
||||||
|
'smtp_server' => 'smtpServer',
|
||||||
|
'smpt_port' => 'smtpPort',
|
||||||
|
'smtp_auth_user' => 'ea_smtp_auth_username',
|
||||||
|
'smtp_auth_passwd' => 'ea_smtp_auth_password',
|
||||||
|
) as $setup_name => $ea_name_data)
|
||||||
|
{
|
||||||
|
if (!is_array($ea_name_data))
|
||||||
|
{
|
||||||
|
$profile[$ea_name_data] = $settings[$setup_name];
|
||||||
|
if ($setup_name == 'smtp_auth_user') $profile['stmpAuth'] = !empty($settings['smtp_auth_user']);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach($ea_name_data as $setup_val => $ea_data)
|
||||||
|
{
|
||||||
|
if ($setup_val == $settings[$setup_name])
|
||||||
|
{
|
||||||
|
foreach($ea_data as $var => $val)
|
||||||
|
{
|
||||||
|
if ($var != 'imapType' || $val != 2 || $profile[$var] < 3) // dont kill special imap server types
|
||||||
|
{
|
||||||
|
$profile[$var] = $val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// merge the other not processed values unchanged
|
||||||
|
$profile = array_merge($profile,array_diff_assoc($settings,$to_parse));
|
||||||
|
|
||||||
|
$this->soemailadmin->updateProfile($profile);
|
||||||
|
$this->sessionData['profile'] = array();
|
||||||
|
$this->saveSessionData();
|
||||||
|
//echo "<p>EMailAdmin profile update: ".print_r($profile,true)."</p>\n"; exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveProfile($_globalSettings, $_smtpSettings, $_imapSettings)
|
||||||
|
{
|
||||||
|
if(!isset($_imapSettings['imapTLSAuthentication'])) {
|
||||||
|
$_imapSettings['imapTLSAuthentication'] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(is_array($_globalSettings['ea_stationery_active_templates']) && count($_globalSettings['ea_stationery_active_templates']) > 0)
|
||||||
|
{
|
||||||
|
$_globalSettings['ea_stationery_active_templates'] = serialize($_globalSettings['ea_stationery_active_templates']);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$_globalSettings['ea_stationery_active_templates'] = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!isset($_globalSettings['profileID'])) {
|
||||||
|
$_globalSettings['ea_order'] = count($this->getProfileList()) + 1;
|
||||||
|
$this->soemailadmin->addProfile($_globalSettings, $_smtpSettings, $_imapSettings);
|
||||||
|
} else {
|
||||||
|
$this->soemailadmin->updateProfile($_globalSettings, $_smtpSettings, $_imapSettings);
|
||||||
|
}
|
||||||
|
$all = $_globalSettings+$_smtpSettings+$_imapSettings;
|
||||||
|
if (!$all['ea_user'] && !$all['ea_group'] && !$all['ea_application']) // standard profile update eGW config
|
||||||
|
{
|
||||||
|
$new_config = array();
|
||||||
|
foreach(array(
|
||||||
|
'imapServer' => 'mail_server',
|
||||||
|
'imapType' => 'mail_server_type',
|
||||||
|
'imapLoginType' => 'mail_login_type',
|
||||||
|
'defaultDomain' => 'mail_suffix',
|
||||||
|
'smtpServer' => 'smtp_server',
|
||||||
|
'smtpPort' => 'smpt_port',
|
||||||
|
)+($all['smtpAuth'] ? array(
|
||||||
|
'ea_smtp_auth_username' => 'smtp_auth_user',
|
||||||
|
'ea_smtp_auth_password' => 'smtp_auth_passwd',
|
||||||
|
) : array()) as $ea_name => $config_name)
|
||||||
|
{
|
||||||
|
if (isset($all[$ea_name]))
|
||||||
|
{
|
||||||
|
if ($ea_name != 'imapType')
|
||||||
|
{
|
||||||
|
$new_config[$config_name] = $all[$ea_name];
|
||||||
|
}
|
||||||
|
else // imap type
|
||||||
|
{
|
||||||
|
$new_config[$config_name] = ($all['imapType'] == 1 ? 'pop3' : 'imap').($all['imapTLSEncryption'] ? 's' : '');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (count($new_config))
|
||||||
|
{
|
||||||
|
$config = CreateObject('phpgwapi.config','phpgwapi');
|
||||||
|
|
||||||
|
foreach($new_config as $name => $value)
|
||||||
|
{
|
||||||
|
$config->save_value($name,$value,'phpgwapi');
|
||||||
|
}
|
||||||
|
//echo "<p>eGW configuration update: ".print_r($new_config,true)."</p>\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->sessionData = array();
|
||||||
|
$this->saveSessionData();
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveSessionData()
|
||||||
|
{
|
||||||
|
// serializing the session data, for the sake of objects
|
||||||
|
$GLOBALS['egw']->session->appsession('session_data','emailadmin',serialize($this->sessionData));
|
||||||
|
#$GLOBALS['egw']->session->appsession('user_session_data','',$this->userSessionData);
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveUserData($_accountID, $_formData) {
|
||||||
|
|
||||||
|
if($userProfile = $this->getUserProfile('felamimail')) {
|
||||||
|
$ogServer = $userProfile->getOutgoingServer(0);
|
||||||
|
if(is_a($ogServer, 'defaultsmtp')) {
|
||||||
|
$ogServer->setUserData($_accountID,
|
||||||
|
(array)$_formData['mailAlternateAddress'],
|
||||||
|
(array)$_formData['mailForwardingAddress'],
|
||||||
|
$_formData['deliveryMode'],
|
||||||
|
$_formData['accountStatus'],
|
||||||
|
$_formData['mailLocalAddress']
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$icServer = $userProfile->getIncomingServer(0);
|
||||||
|
if(is_a($icServer, 'defaultimap') && $username = $GLOBALS['egw']->accounts->id2name($_accountID)) {
|
||||||
|
$icServer->setUserData($username, $_formData['quotaLimit']);
|
||||||
|
}
|
||||||
|
|
||||||
|
// calling a hook to allow other apps to monitor the changes
|
||||||
|
$_formData['account_id'] = $_accountID;
|
||||||
|
$_formData['location'] = 'editaccountemail';
|
||||||
|
$GLOBALS['egw']->hooks->process($_formData);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
$this->sessionData = array();
|
||||||
|
$this->saveSessionData();
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setOrder($_order) {
|
||||||
|
if(is_array($_order)) {
|
||||||
|
$this->soemailadmin->setOrder($_order);
|
||||||
|
}
|
||||||
|
$this->sessionData = array();
|
||||||
|
$this->saveSessionData();
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateAccount($_hookValues) {
|
||||||
|
if (is_object($this->imapClass)) {
|
||||||
|
#ExecMethod("emailadmin.".$this->imapClass.".updateAccount",$_hookValues,3,$this->profileData);
|
||||||
|
$this->imapClass->updateAccount($_hookValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_object($this->smtpClass)) {
|
||||||
|
#ExecMethod("emailadmin.".$this->smtpClass.".updateAccount",$_hookValues,3,$this->profileData);
|
||||||
|
$this->smtpClass->updateAccount($_hookValues);
|
||||||
|
}
|
||||||
|
$this->sessionData = array();
|
||||||
|
$this->saveSessionData();
|
||||||
|
}
|
||||||
|
}
|
121
emailadmin/inc/class.emailadmin_hooks.inc.php
Normal file
121
emailadmin/inc/class.emailadmin_hooks.inc.php
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* eGroupWare - eMailAdmin hooks
|
||||||
|
*
|
||||||
|
* @link http://www.egroupware.org
|
||||||
|
* @package emailadmin
|
||||||
|
* @author Klaus Leithoff <leithoff-AT-stylite.de>
|
||||||
|
* @copyright (c) 2008-8 by leithoff-At-stylite.de
|
||||||
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* diverse static emailadmin hooks
|
||||||
|
*/
|
||||||
|
class emailadmin_hooks
|
||||||
|
{
|
||||||
|
// hook to plug in into admin (managable) applications list
|
||||||
|
static function admin()
|
||||||
|
{
|
||||||
|
// Only Modify the $file and $title variables.....
|
||||||
|
$title = $appname = 'emailadmin';
|
||||||
|
$file = Array(
|
||||||
|
'Site Configuration' => $GLOBALS['egw']->link('/index.php','menuaction=emailadmin.emailadmin_ui.listProfiles')
|
||||||
|
);
|
||||||
|
|
||||||
|
//Do not modify below this line
|
||||||
|
display_section($appname,$title,$file);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hook called if account emailadim settings has to be modified
|
||||||
|
*
|
||||||
|
* @param array $data
|
||||||
|
* @param int $data['account_id'] numerical id
|
||||||
|
*/
|
||||||
|
static function edit_user($data)
|
||||||
|
{
|
||||||
|
#echo "called hook and function<br>";
|
||||||
|
#_debug_array($data);
|
||||||
|
|
||||||
|
if ($data['account_id'] && // can't set it on add
|
||||||
|
$GLOBALS['egw_info']['user']['apps']['emailadmin'])
|
||||||
|
{
|
||||||
|
$GLOBALS['menuData'][] = array(
|
||||||
|
'description' => 'eMailAdmin: User assigned Profile',
|
||||||
|
'url' => '/index.php',
|
||||||
|
'extradata' => 'menuaction=emailadmin.emailadmin_ui.listProfiles'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hook called after group emailadim settings has to be modified
|
||||||
|
*
|
||||||
|
* @param array $data
|
||||||
|
* @param int $data['account_id'] numerical id
|
||||||
|
*/
|
||||||
|
static function edit_group($data)
|
||||||
|
{
|
||||||
|
#echo "called hook and function<br>";
|
||||||
|
#_debug_array($data);
|
||||||
|
# somehow the $data var seems to be quite sparsely populated, so we dont check any further
|
||||||
|
if (#!empty($data['account_id']) && $data['account_id'] < 0 && // can't set it on add
|
||||||
|
$GLOBALS['egw_info']['user']['apps']['emailadmin'])
|
||||||
|
{
|
||||||
|
$GLOBALS['menuData'][] = array(
|
||||||
|
'description' => 'eMailAdmin: Group assigned Profile',
|
||||||
|
'url' => '/index.php',
|
||||||
|
'extradata' => 'menuaction=emailadmin.emailadmin_ui.listProfiles'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hook called before an account get deleted
|
||||||
|
*
|
||||||
|
* @param array $data
|
||||||
|
* @param int $data['account_id'] numerical id
|
||||||
|
* @param string $data['account_lid'] account-name
|
||||||
|
* @param int $data['new_owner'] account-id of new owner, or false if data should get deleted
|
||||||
|
*/
|
||||||
|
static function deleteaccount(array $data)
|
||||||
|
{
|
||||||
|
if((int)$data['account_id'] > 0 &&
|
||||||
|
$GLOBALS['egw_info']['user']['apps']['emailadmin'])
|
||||||
|
{
|
||||||
|
$boemailadmin = new emailadmin_bo();
|
||||||
|
$profileList = $boemailadmin->getProfileList($profileID,$appName,$groupID,(int) $data['account_id']);
|
||||||
|
if (is_array($profileList)) {
|
||||||
|
foreach ($profileList as $key => $value) {
|
||||||
|
$boemailadmin->deleteProfile($value['profileID']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hook called before a group get deleted
|
||||||
|
*
|
||||||
|
* @param array $data
|
||||||
|
* @param int $data['account_id'] numerical id
|
||||||
|
* @param string $data['account_name'] account-name
|
||||||
|
*/
|
||||||
|
static function deletegroup(array $data)
|
||||||
|
{
|
||||||
|
if ((int)$data['account_id'] < 0 &&
|
||||||
|
$GLOBALS['egw_info']['user']['apps']['emailadmin'])
|
||||||
|
{
|
||||||
|
$boemailadmin = new emailadmin_bo();
|
||||||
|
$profileList = $boemailadmin->getProfileList($profileID,$appName,(int) $data['account_id'],$accountID);
|
||||||
|
if (is_array($profileList)) {
|
||||||
|
foreach ($profileList as $key => $value) {
|
||||||
|
$boemailadmin->deleteProfile($value['profileID']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
474
emailadmin/inc/class.emailadmin_so.inc.php
Normal file
474
emailadmin/inc/class.emailadmin_so.inc.php
Normal file
@ -0,0 +1,474 @@
|
|||||||
|
<?php
|
||||||
|
/***************************************************************************\
|
||||||
|
* EGroupWare - EMailAdmin *
|
||||||
|
* http://www.egroupware.org *
|
||||||
|
* Written by : Lars Kneschke [lkneschke@egroupware.org] *
|
||||||
|
* ------------------------------------------------- *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms of the GNU General Public License as published by the *
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at your *
|
||||||
|
* option) any later version. *
|
||||||
|
\***************************************************************************/
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
class emailadmin_so
|
||||||
|
{
|
||||||
|
var $db;
|
||||||
|
var $table = 'egw_emailadmin';
|
||||||
|
var $db_cols = array(
|
||||||
|
'ea_profile_id' => 'profileID',
|
||||||
|
'ea_smtp_server' => 'smtpServer',
|
||||||
|
'ea_smtp_type' => 'smtpType',
|
||||||
|
'ea_smtp_port' => 'smtpPort',
|
||||||
|
'ea_smtp_auth' => 'smtpAuth',
|
||||||
|
'ea_editforwardingaddress' => 'editforwardingaddress',
|
||||||
|
'ea_smtp_ldap_server' => 'smtpLDAPServer',
|
||||||
|
'ea_smtp_ldap_basedn' => 'smtpLDAPBaseDN',
|
||||||
|
'ea_smtp_ldap_admindn' => 'smtpLDAPAdminDN',
|
||||||
|
'ea_smtp_ldap_adminpw' => 'smtpLDAPAdminPW',
|
||||||
|
'ea_smtp_ldap_use_default' => 'smtpLDAPUseDefault',
|
||||||
|
'ea_imap_server' => 'imapServer',
|
||||||
|
'ea_imap_type' => 'imapType',
|
||||||
|
'ea_imap_port' => 'imapPort',
|
||||||
|
'ea_imap_login_type' => 'imapLoginType',
|
||||||
|
'ea_imap_auth_username' => 'imapAuthUsername',
|
||||||
|
'ea_imap_auth_password' => 'imapAuthPassword',
|
||||||
|
'ea_imap_tsl_auth' => 'imapTLSAuthentication',
|
||||||
|
'ea_imap_tsl_encryption' => 'imapTLSEncryption',
|
||||||
|
'ea_imap_enable_cyrus' => 'imapEnableCyrusAdmin',
|
||||||
|
'ea_imap_admin_user' => 'imapAdminUsername',
|
||||||
|
'ea_imap_admin_pw' => 'imapAdminPW',
|
||||||
|
'ea_imap_enable_sieve' => 'imapEnableSieve',
|
||||||
|
'ea_imap_sieve_server' => 'imapSieveServer',
|
||||||
|
'ea_imap_sieve_port' => 'imapSievePort',
|
||||||
|
'ea_description' => 'description',
|
||||||
|
'ea_default_domain' => 'defaultDomain',
|
||||||
|
'ea_organisation_name' => 'organisationName',
|
||||||
|
'ea_user_defined_identities' => 'userDefinedIdentities',
|
||||||
|
'ea_user_defined_accounts' => 'userDefinedAccounts',
|
||||||
|
'ea_imapoldcclient' => 'imapoldcclient',
|
||||||
|
'ea_order' => 'ea_order',
|
||||||
|
'ea_active' => 'ea_active',
|
||||||
|
'ea_group' => 'ea_group',
|
||||||
|
'ea_user' => 'ea_user',
|
||||||
|
'ea_appname' => 'ea_appname',
|
||||||
|
'ea_smtp_auth_username' => 'ea_smtp_auth_username',
|
||||||
|
'ea_smtp_auth_password' => 'ea_smtp_auth_password',
|
||||||
|
'ea_user_defined_signatures' => 'ea_user_defined_signatures',
|
||||||
|
'ea_default_signature' => 'ea_default_signature',
|
||||||
|
'ea_stationery_active_templates' => 'ea_stationery_active_templates',
|
||||||
|
);
|
||||||
|
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
if (is_object($GLOBALS['egw_setup']->db))
|
||||||
|
{
|
||||||
|
$this->db = clone($GLOBALS['egw_setup']->db);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->db = clone($GLOBALS['egw']->db);
|
||||||
|
}
|
||||||
|
$this->db->set_app('emailadmin');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert array with internal values/names to db-column-names
|
||||||
|
*
|
||||||
|
* @param array $vals
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function vals2db($vals)
|
||||||
|
{
|
||||||
|
$cols = array();
|
||||||
|
foreach($vals as $key => $val)
|
||||||
|
{
|
||||||
|
if (($k = array_search($key,$this->db_cols)) === false) $k = $key;
|
||||||
|
|
||||||
|
$cols[$k] = $val;
|
||||||
|
}
|
||||||
|
return $cols;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert array with db-columns/-values to internal names
|
||||||
|
*
|
||||||
|
* @param array $vals
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function db2vals($cols)
|
||||||
|
{
|
||||||
|
$vals = array();
|
||||||
|
foreach($cols as $key => $val)
|
||||||
|
{
|
||||||
|
if (isset($this->db_cols[$key])) $key = $this->db_cols[$key];
|
||||||
|
|
||||||
|
$vals[$key] = $val;
|
||||||
|
}
|
||||||
|
return $vals;
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateProfile($_globalSettings, $_smtpSettings=array(), $_imapSettings=array())
|
||||||
|
{
|
||||||
|
$profileID = (int) $_globalSettings['profileID'];
|
||||||
|
unset($_globalSettings['profileID']);
|
||||||
|
|
||||||
|
$where = $profileID ? array('ea_profile_id' => $profileID) : false;
|
||||||
|
|
||||||
|
$this->db->insert($this->table,$this->vals2db($_smtpSettings+$_globalSettings+$_imapSettings),$where,__LINE__,__FILE__);
|
||||||
|
|
||||||
|
return $profileID ? $profileID : $this->db->get_last_insert_id($this->table,'ea_profile_id');
|
||||||
|
}
|
||||||
|
|
||||||
|
function addProfile($_globalSettings, $_smtpSettings, $_imapSettings)
|
||||||
|
{
|
||||||
|
unset($_globalSettings['profileID']); // just in case
|
||||||
|
|
||||||
|
return $this->updateProfile($_globalSettings, $_smtpSettings, $_imapSettings);
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteProfile($_profileID)
|
||||||
|
{
|
||||||
|
$this->db->delete($this->table,array('ea_profile_id' => $_profileID),__LINE__ , __FILE__);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getProfile($_profileID, $_fieldNames)
|
||||||
|
{
|
||||||
|
$_fieldNames = array_keys($this->vals2db(array_flip($_fieldNames)));
|
||||||
|
$this->db->select($this->table,$_fieldNames,array('ea_profile_id' => $_profileID), __LINE__, __FILE__);
|
||||||
|
|
||||||
|
if (($data = $this->db->row(true))) {
|
||||||
|
return $this->db2vals($data);
|
||||||
|
}
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getUserProfile($_appName, $_groups, $_user = NULL)
|
||||||
|
{
|
||||||
|
if(empty($_appName) || !is_array($_groups))
|
||||||
|
return false;
|
||||||
|
if (!empty($_user)) {
|
||||||
|
$where = $this->db->expression(
|
||||||
|
$this->table,'(',
|
||||||
|
array('ea_appname'=>$_appName),
|
||||||
|
' OR ea_appname IS NULL or ea_appname = \'\') and ',
|
||||||
|
'(',
|
||||||
|
array('ea_group'=>$_groups),
|
||||||
|
' OR ea_group IS NULL or ea_group = \'\') and ',
|
||||||
|
'(',
|
||||||
|
array('ea_user'=>$_user),
|
||||||
|
' OR ea_user IS NULL or ea_user = \'0\' or ea_user = \'\')'
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$where = $this->db->expression(
|
||||||
|
$this->table,'(',
|
||||||
|
array('ea_appname'=>$_appName),
|
||||||
|
' OR ea_appname IS NULL or ea_appname = \'\') and ',
|
||||||
|
'(',
|
||||||
|
array('ea_group'=>$_groups),
|
||||||
|
' OR ea_group IS NULL or ea_group = \'\')'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$anyValues = 0;
|
||||||
|
// retrieve the Global/Overall Settings
|
||||||
|
$this->db->select($this->table,'ea_profile_id',$where, __LINE__, __FILE__, false, 'ORDER BY ea_order', false, 1);
|
||||||
|
if (($data = $this->db->row(true))) {
|
||||||
|
$globalDefaults = $this->getProfile($data['ea_profile_id'], $this->db_cols);
|
||||||
|
$anyValues++;
|
||||||
|
} else {
|
||||||
|
error_log("emailadmin::emailadmin_so->getUserProfile, no Default configured");
|
||||||
|
$globalDefaults = array();
|
||||||
|
}
|
||||||
|
// retrieve application settings if set
|
||||||
|
if (strlen($_appName)>0) {
|
||||||
|
$this->db->select($this->table,'ea_profile_id',$this->db->expression($this->table,'(',array('ea_appname'=>$_appName),' and ea_active=1)'), __LINE__, __FILE__, false, 'ORDER BY ea_order', false, 1);
|
||||||
|
if (($data = $this->db->row(true))) {
|
||||||
|
$appDefaults = $this->getProfile($data['ea_profile_id'], $this->db_cols);
|
||||||
|
$globalDefaults = self::mergeProfileData($globalDefaults, $appDefaults);
|
||||||
|
$anyValues++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// retrieve primary-group settings if set
|
||||||
|
if (is_array($_groups) && $_groups[1] == $GLOBALS['egw_info']['user']['account_primary_group']) {
|
||||||
|
$this->db->select($this->table,'ea_profile_id',$this->db->expression($this->table,'(',array('ea_group'=>$_groups[1]),' and ea_active=1)'), __LINE__, __FILE__, false, 'ORDER BY ea_order', false, 1);
|
||||||
|
if (($data = $this->db->row(true))) {
|
||||||
|
$groupDefaults = $this->getProfile($data['ea_profile_id'], $this->db_cols);
|
||||||
|
$globalDefaults = self::mergeProfileData($globalDefaults, $groupDefaults);
|
||||||
|
$anyValues++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// retrieve usersettings if set
|
||||||
|
if (!empty($_user) && $_user != 0) {
|
||||||
|
$this->db->select($this->table,'ea_profile_id',$this->db->expression($this->table,'(',array('ea_user'=>$_user),' and ea_active=1)'), __LINE__, __FILE__, false, 'ORDER BY ea_order', false, 1);
|
||||||
|
if (($data = $this->db->row(true))) {
|
||||||
|
$userDefaults = $this->getProfile($data['ea_profile_id'], $this->db_cols);
|
||||||
|
$globalDefaults = self::mergeProfileData($globalDefaults, $userDefaults);
|
||||||
|
$anyValues++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($anyValues) {
|
||||||
|
return $globalDefaults;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* merge profile data.
|
||||||
|
* for each key of the mergeInTo Array check if there is a value set in the toMerge Array and replace it.
|
||||||
|
*/
|
||||||
|
static function mergeProfileData($mergeInTo, $toMerge)
|
||||||
|
{
|
||||||
|
if (is_array($toMerge) && count($toMerge)>0)
|
||||||
|
{
|
||||||
|
$allkeys = array_unique(array_keys($mergeInTo)+array_keys($toMerge));
|
||||||
|
foreach ($allkeys as $i => $key) {
|
||||||
|
if (!array_key_exists($key, $mergeInTo) && array_key_exists($key, $toMerge) && !empty($toMerge[$key]))
|
||||||
|
{
|
||||||
|
$mergeInTo[$key]=$toMerge[$key];
|
||||||
|
} else {
|
||||||
|
if (array_key_exists($key, $toMerge) && !empty($toMerge[$key]))
|
||||||
|
{
|
||||||
|
#error_log($key.'->'.$toMerge[$key]);
|
||||||
|
switch ($key) {
|
||||||
|
case 'imapLoginType':
|
||||||
|
// if the logintype is admin, it will be added to the default value
|
||||||
|
if ($toMerge[$key] =='admin' || $toMerge[$key] =='email') {
|
||||||
|
// take the first value found by explode, which is assumed the default value
|
||||||
|
list($mergeInTo[$key],$rest) = explode('#',$mergeInTo[$key],2);
|
||||||
|
$mergeInTo[$key] = $mergeInTo[$key].'#'.$toMerge[$key];
|
||||||
|
#error_log($mergeInTo[$key]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'imapServer':
|
||||||
|
case 'imapType':
|
||||||
|
case 'imapPort':
|
||||||
|
case 'imapTLSEncryption':
|
||||||
|
case 'imapTLSAuthentication':
|
||||||
|
case 'imapEnableCyrusAdmin':
|
||||||
|
case 'imapAdminUsername':
|
||||||
|
case 'imapAdminPW':
|
||||||
|
if (strlen($toMerge['imapServer'])>0) $mergeInTo[$key]=$toMerge[$key];
|
||||||
|
break;
|
||||||
|
case 'smtpPort':
|
||||||
|
case 'smtpType':
|
||||||
|
case 'smtpServer':
|
||||||
|
if (strlen($toMerge['smtpServer'])>0) $mergeInTo[$key]=$toMerge[$key];
|
||||||
|
break;
|
||||||
|
case 'smtpLDAPServer':
|
||||||
|
case 'smtpLDAPBaseDN':
|
||||||
|
case 'smtpLDAPAdminDN':
|
||||||
|
case 'smtpLDAPAdminPW':
|
||||||
|
case 'smtpLDAPUseDefault':
|
||||||
|
if (strlen($toMerge['smtpLDAPServer'])>0) $mergeInTo[$key]=$toMerge[$key];
|
||||||
|
break;
|
||||||
|
case 'ea_default_signature':
|
||||||
|
$testVal = $toMerge['ea_default_signature'];
|
||||||
|
//bofelamimail::getCleanHTML($testVal);
|
||||||
|
$testVal = html::purify($testVal);
|
||||||
|
if (strlen($testVal)>10 || $testVal != '<br>' || $testVal != '<br />') $mergeInTo[$key]=$toMerge[$key];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$mergeInTo[$key]=$toMerge[$key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $mergeInTo;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getProfileList($_profileID=0,$_defaultProfile=false,$_appName=false,$_groupID=false,$_accountID=false)
|
||||||
|
{
|
||||||
|
$where = false;
|
||||||
|
if ((int) $_profileID)
|
||||||
|
{
|
||||||
|
$where = array('ea_profile_id' => $_profileID);
|
||||||
|
}
|
||||||
|
elseif ($_defaultProfile)
|
||||||
|
{
|
||||||
|
$where['ea_appname'] = '';
|
||||||
|
$where['ea_group'] = 0;
|
||||||
|
$where['ea_user'] = 0;
|
||||||
|
}
|
||||||
|
elseif ($_appName)
|
||||||
|
{
|
||||||
|
$where['ea_appname'] = $_appName;
|
||||||
|
}
|
||||||
|
elseif ((int) $_groupID)
|
||||||
|
{
|
||||||
|
$where['ea_group'] = (int) $_groupID;
|
||||||
|
}
|
||||||
|
elseif ((int) $_accountID)
|
||||||
|
{
|
||||||
|
$where['ea_user'] = (int) $_accountID;
|
||||||
|
}
|
||||||
|
$this->db->select($this->table,'*',$where, __LINE__,__FILE__,false,(int) $_profileID ? '' : 'ORDER BY ea_order');
|
||||||
|
|
||||||
|
$serverList = false;
|
||||||
|
while (($row = $this->db->row(true)))
|
||||||
|
{
|
||||||
|
$serverList[] = $this->db2vals($row);
|
||||||
|
}
|
||||||
|
return $serverList;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getUserData($_accountID)
|
||||||
|
{
|
||||||
|
$ldap = $GLOBALS['egw']->common->ldapConnect();
|
||||||
|
|
||||||
|
if (($sri = @ldap_search($ldap,$GLOBALS['egw_info']['server']['ldap_context'],"(uidnumber=$_accountID)")))
|
||||||
|
{
|
||||||
|
$allValues = ldap_get_entries($ldap, $sri);
|
||||||
|
if ($allValues['count'] > 0)
|
||||||
|
{
|
||||||
|
#print "found something<br>";
|
||||||
|
$userData["mailLocalAddress"] = $allValues[0]["mail"][0];
|
||||||
|
$userData["mailAlternateAddress"] = $allValues[0]["mailalternateaddress"];
|
||||||
|
$userData["accountStatus"] = $allValues[0]["accountstatus"][0];
|
||||||
|
$userData["mailRoutingAddress"] = $allValues[0]["mailforwardingaddress"];
|
||||||
|
$userData["qmailDotMode"] = $allValues[0]["qmaildotmode"][0];
|
||||||
|
$userData["deliveryProgramPath"] = $allValues[0]["deliveryprogrampath"][0];
|
||||||
|
$userData["deliveryMode"] = $allValues[0]["deliverymode"][0];
|
||||||
|
|
||||||
|
unset($userData["mailAlternateAddress"]["count"]);
|
||||||
|
unset($userData["mailRoutingAddress"]["count"]);
|
||||||
|
|
||||||
|
return $userData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we did not return before, return false
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveUserData($_accountID, $_accountData)
|
||||||
|
{
|
||||||
|
$ldap = $GLOBALS['egw']->common->ldapConnect();
|
||||||
|
// need to be fixed
|
||||||
|
if(is_numeric($_accountID))
|
||||||
|
{
|
||||||
|
$filter = "uidnumber=$_accountID";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$filter = "uid=$_accountID";
|
||||||
|
}
|
||||||
|
|
||||||
|
$sri = @ldap_search($ldap,$GLOBALS['egw_info']['server']['ldap_context'],$filter);
|
||||||
|
if ($sri)
|
||||||
|
{
|
||||||
|
$allValues = ldap_get_entries($ldap, $sri);
|
||||||
|
$accountDN = $allValues[0]['dn'];
|
||||||
|
$uid = $allValues[0]['uid'][0];
|
||||||
|
$homedirectory = $allValues[0]['homedirectory'][0];
|
||||||
|
$objectClasses = $allValues[0]['objectclass'];
|
||||||
|
|
||||||
|
unset($objectClasses['count']);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty($homedirectory))
|
||||||
|
{
|
||||||
|
$homedirectory = "/home/".$uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
// the old code for qmail ldap
|
||||||
|
$newData = array
|
||||||
|
(
|
||||||
|
'mail' => $_accountData["mailLocalAddress"],
|
||||||
|
'mailAlternateAddress' => $_accountData["mailAlternateAddress"],
|
||||||
|
'mailRoutingAddress' => $_accountData["mailRoutingAddress"],
|
||||||
|
'homedirectory' => $homedirectory,
|
||||||
|
'mailMessageStore' => $homedirectory."/Maildir/",
|
||||||
|
'gidnumber' => '1000',
|
||||||
|
'qmailDotMode' => $_accountData["qmailDotMode"],
|
||||||
|
'deliveryProgramPath' => $_accountData["deliveryProgramPath"]
|
||||||
|
);
|
||||||
|
|
||||||
|
if(!in_array('qmailUser',$objectClasses) &&
|
||||||
|
!in_array('qmailuser',$objectClasses))
|
||||||
|
{
|
||||||
|
$objectClasses[] = 'qmailuser';
|
||||||
|
}
|
||||||
|
|
||||||
|
// the new code for postfix+cyrus+ldap
|
||||||
|
$newData = array
|
||||||
|
(
|
||||||
|
'mail' => $_accountData["mailLocalAddress"],
|
||||||
|
'accountStatus' => $_accountData["accountStatus"],
|
||||||
|
'objectclass' => $objectClasses
|
||||||
|
);
|
||||||
|
|
||||||
|
if(is_array($_accountData["mailAlternateAddress"]))
|
||||||
|
{
|
||||||
|
$newData['mailAlternateAddress'] = $_accountData["mailAlternateAddress"];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$newData['mailAlternateAddress'] = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
if($_accountData["accountStatus"] == 'active')
|
||||||
|
{
|
||||||
|
$newData['accountStatus'] = 'active';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$newData['accountStatus'] = 'disabled';
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!empty($_accountData["deliveryMode"]))
|
||||||
|
{
|
||||||
|
$newData['deliveryMode'] = $_accountData["deliveryMode"];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$newData['deliveryMode'] = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(is_array($_accountData["mailRoutingAddress"]))
|
||||||
|
{
|
||||||
|
$newData['mailForwardingAddress'] = $_accountData["mailRoutingAddress"];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$newData['mailForwardingAddress'] = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
#print "DN: $accountDN<br>";
|
||||||
|
ldap_mod_replace ($ldap, $accountDN, $newData);
|
||||||
|
#print ldap_error($ldap);
|
||||||
|
|
||||||
|
// also update the account_email field in egw_accounts
|
||||||
|
// when using sql account storage
|
||||||
|
if($GLOBALS['egw_info']['server']['account_repository'] == 'sql')
|
||||||
|
{
|
||||||
|
$this->db->update('egw_accounts',array(
|
||||||
|
'account_email' => $_accountData["mailLocalAddress"]
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'account_id' => $_accountID
|
||||||
|
),__LINE__,__FILE__
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setOrder($_order)
|
||||||
|
{
|
||||||
|
foreach($_order as $order => $profileID)
|
||||||
|
{
|
||||||
|
$this->db->update($this->table,array(
|
||||||
|
'ea_order' => $order,
|
||||||
|
),array(
|
||||||
|
'ea_profile_id' => $profileID,
|
||||||
|
),__LINE__, __FILE__);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
761
emailadmin/inc/class.emailadmin_ui.inc.php
Normal file
761
emailadmin/inc/class.emailadmin_ui.inc.php
Normal file
@ -0,0 +1,761 @@
|
|||||||
|
<?php
|
||||||
|
/***************************************************************************\
|
||||||
|
* EGroupWare - EMailAdmin *
|
||||||
|
* http://www.egroupware.org *
|
||||||
|
* Written by : Lars Kneschke [lkneschke@egroupware.org] *
|
||||||
|
* ------------------------------------------------- *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms of the GNU General Public License as published by the *
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at your *
|
||||||
|
* option) any later version. *
|
||||||
|
\***************************************************************************/
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
class emailadmin_ui
|
||||||
|
{
|
||||||
|
var $public_functions = array
|
||||||
|
(
|
||||||
|
'addProfile' => True,
|
||||||
|
'deleteProfile' => True,
|
||||||
|
'editProfile' => True,
|
||||||
|
'listProfiles' => True,
|
||||||
|
'saveProfile' => True
|
||||||
|
);
|
||||||
|
|
||||||
|
var $cats;
|
||||||
|
var $nextmatchs;
|
||||||
|
var $t;
|
||||||
|
var $boqmailldap;
|
||||||
|
|
||||||
|
function __construct()
|
||||||
|
{
|
||||||
|
$this->nextmatchs =& CreateObject('phpgwapi.nextmatchs');
|
||||||
|
$this->t =& CreateObject('phpgwapi.Template',EGW_APP_TPL);
|
||||||
|
#$this->boemailadmin =& CreateObject('emailadmin.bo');
|
||||||
|
$this->boemailadmin = new emailadmin_bo();
|
||||||
|
$this->css();
|
||||||
|
}
|
||||||
|
|
||||||
|
static function getAllGroups()
|
||||||
|
{
|
||||||
|
$allGroups = $GLOBALS['egw']->accounts->get_list('groups');
|
||||||
|
foreach($allGroups as $groupInfo)
|
||||||
|
{
|
||||||
|
$groups[$groupInfo['account_id']] = $groupInfo['account_lid'];
|
||||||
|
}
|
||||||
|
asort($groups);
|
||||||
|
|
||||||
|
$allGroups = array('' => lang('any group'));
|
||||||
|
foreach($groups as $groupID => $groupName)
|
||||||
|
{
|
||||||
|
$allGroups[$groupID] = $groupName;
|
||||||
|
}
|
||||||
|
return $allGroups;
|
||||||
|
}
|
||||||
|
|
||||||
|
static function getAllUsers()
|
||||||
|
{
|
||||||
|
$allUsers = $GLOBALS['egw']->accounts->get_list('accounts');
|
||||||
|
foreach($allUsers as $userInfo)
|
||||||
|
{
|
||||||
|
$users[$userInfo['account_id']] = $userInfo['account_lid'];
|
||||||
|
}
|
||||||
|
asort($users);
|
||||||
|
$allUsers = array('' => lang('any user'));
|
||||||
|
foreach($users as $userID => $userName)
|
||||||
|
{
|
||||||
|
$allUsers[$userID] = $userName;
|
||||||
|
}
|
||||||
|
return $allUsers;
|
||||||
|
}
|
||||||
|
|
||||||
|
static function getAllApps()
|
||||||
|
{
|
||||||
|
$applications = array(
|
||||||
|
'calendar' => $GLOBALS['egw_info']['apps']['calendar']['title'],
|
||||||
|
'felamimail' => $GLOBALS['egw_info']['apps']['felamimail']['title'],
|
||||||
|
);
|
||||||
|
asort($applications);
|
||||||
|
return $applications = array_merge(array('' => lang('any application')),$applications);
|
||||||
|
}
|
||||||
|
|
||||||
|
function addProfile()
|
||||||
|
{
|
||||||
|
if(is_int(intval($_GET['account_id'])) && !empty($_GET['account_id']))
|
||||||
|
{
|
||||||
|
if ( intval($_GET['account_id']) < 0 ) {
|
||||||
|
$groupID = intval($_GET['account_id']);
|
||||||
|
} else {
|
||||||
|
$accountID = intval($_GET['account_id']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$allGroups = self:: getAllGroups();
|
||||||
|
$allUsers = self::getAllUsers();
|
||||||
|
$applications = self::getAllApps();
|
||||||
|
$this->display_app_header();
|
||||||
|
|
||||||
|
$this->t->set_file(array("body" => "editprofile.tpl"));
|
||||||
|
$this->t->set_block('body','main');
|
||||||
|
|
||||||
|
$this->translate();
|
||||||
|
|
||||||
|
#$this->t->set_var('profile_name',$profileList[0]['description']);
|
||||||
|
$this->t->set_var('smtpActiveTab','1');
|
||||||
|
$this->t->set_var('imapActiveTab','2'); // IMAP
|
||||||
|
$this->t->set_var('application_select_box', html::select('globalsettings[ea_appname]','',$applications, true, "style='width: 250px;'"));
|
||||||
|
$this->t->set_var('group_select_box', html::select('globalsettings[ea_group]',($groupID ? $groupID :''),$allGroups, true, "style='width: 250px;'"));
|
||||||
|
$this->t->set_var('user_select_box', html::select('globalsettings[ea_user]',($accountID ? $accountID :''),$allUsers, true, "style='width: 250px;'"));
|
||||||
|
$this->t->set_var('selected_ea_active','checked="1"');
|
||||||
|
$this->t->set_var('value_description',($accountID ? $allUsers[$accountID]: ($groupID ? $allGroups[$groupID]: '')));
|
||||||
|
if ($accountID)
|
||||||
|
{
|
||||||
|
// some useful presets, if you want to create a user dedicated profile
|
||||||
|
$this->t->set_var('selected_smtpAuth','checked="1"');
|
||||||
|
$this->t->set_var('value_ea_smtp_auth_username',$allUsers[$accountID]);
|
||||||
|
$this->t->set_var('selected_imapLoginType_admin','selected="selected"');
|
||||||
|
$this->t->set_var('value_imapAuthUsername',$allUsers[$accountID]);
|
||||||
|
}
|
||||||
|
$linkData = array
|
||||||
|
(
|
||||||
|
'menuaction' => 'emailadmin.emailadmin_ui.saveProfile'
|
||||||
|
);
|
||||||
|
$this->t->set_var('action_url',$GLOBALS['egw']->link('/index.php',$linkData));
|
||||||
|
|
||||||
|
$linkData = array
|
||||||
|
(
|
||||||
|
'menuaction' => 'emailadmin.emailadmin_ui.listProfiles'
|
||||||
|
);
|
||||||
|
$this->t->set_var('back_url',$GLOBALS['egw']->link('/index.php',$linkData));
|
||||||
|
|
||||||
|
$this->t->set_var('smtptype',html::select(
|
||||||
|
'smtpsettings[smtpType]',
|
||||||
|
$profileData['smtpType'],
|
||||||
|
$this->boemailadmin->getSMTPServerTypes(),
|
||||||
|
true,
|
||||||
|
'style="width: 250px;" id="smtpselector" onchange="smtp.display(this.value);"'
|
||||||
|
));
|
||||||
|
|
||||||
|
foreach($this->boemailadmin->getIMAPServerTypes() as $key => $value) {
|
||||||
|
$imapServerTypes[$key] = $value['description'];
|
||||||
|
};
|
||||||
|
$selectFrom = html::select(
|
||||||
|
'imapsettings[imapType]',
|
||||||
|
'',
|
||||||
|
$imapServerTypes,
|
||||||
|
false,
|
||||||
|
// stupid tabs javascript assumes value=position in selectbox, here's a littel workaround ;-)
|
||||||
|
"style='width: 250px;' id='imapselector' onchange='var v=this.value; imap.display(this.value); this.value=v; ea_setIMAPDefaults(this.value);'"
|
||||||
|
);
|
||||||
|
$this->t->set_var('imaptype', $selectFrom);
|
||||||
|
|
||||||
|
$this->t->set_var('value_smtpPort', '25');
|
||||||
|
$this->t->set_var('value_imapPort', '110');
|
||||||
|
$this->t->set_var('value_imapSievePort', '2000');
|
||||||
|
|
||||||
|
// Stationery settings
|
||||||
|
$bostationery = new felamimail_bostationery();
|
||||||
|
$this->t->set_var('stored_templates', html::checkbox_multiselect(
|
||||||
|
'globalsettings[ea_stationery_active_templates]',0
|
||||||
|
,$bostationery->get_stored_templates(),true,'',3,true,'width: 100%;'));
|
||||||
|
$this->t->set_var(
|
||||||
|
'link_manage_templates',
|
||||||
|
html::a_href(
|
||||||
|
lang('manage stationery templates'),
|
||||||
|
'/index.php?menuaction=etemplate.editor.edit',
|
||||||
|
array('name' => 'felamimail.stationery'),
|
||||||
|
'target="_blank"'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->t->parse("out","main");
|
||||||
|
print $this->t->get('out','main');
|
||||||
|
}
|
||||||
|
|
||||||
|
function css()
|
||||||
|
{
|
||||||
|
#$appCSS =
|
||||||
|
$GLOBALS['egw_info']['flags']['css'] .=
|
||||||
|
'th.activetab
|
||||||
|
{
|
||||||
|
color:#000000;
|
||||||
|
background-color:#D3DCE3;
|
||||||
|
border-top-width : 1px;
|
||||||
|
border-top-style : solid;
|
||||||
|
border-top-color : Black;
|
||||||
|
border-left-width : 1px;
|
||||||
|
border-left-style : solid;
|
||||||
|
border-left-color : Black;
|
||||||
|
border-right-width : 1px;
|
||||||
|
border-right-style : solid;
|
||||||
|
border-right-color : Black;
|
||||||
|
}
|
||||||
|
|
||||||
|
th.inactivetab
|
||||||
|
{
|
||||||
|
color:#000000;
|
||||||
|
background-color:#E8F0F0;
|
||||||
|
border-bottom-width : 1px;
|
||||||
|
border-bottom-style : solid;
|
||||||
|
border-bottom-color : Black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.td_left { border-left : 1px solid Gray; border-top : 1px solid Gray; }
|
||||||
|
.td_right { border-right : 1px solid Gray; border-top : 1px solid Gray; }
|
||||||
|
|
||||||
|
div.activetab{ display:inline; }
|
||||||
|
div.inactivetab{ display:none; }';
|
||||||
|
|
||||||
|
#return $appCSS;
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteProfile()
|
||||||
|
{
|
||||||
|
$this->boemailadmin->deleteProfile($_GET['profileid']);
|
||||||
|
$this->listProfiles();
|
||||||
|
}
|
||||||
|
|
||||||
|
function display_app_header()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw']->js->validate_file('tabs','tabs');
|
||||||
|
$GLOBALS['egw_info']['flags']['include_xajax'] = True;
|
||||||
|
|
||||||
|
switch($_GET['menuaction'])
|
||||||
|
{
|
||||||
|
case 'emailadmin.emailadmin_ui.addProfile':
|
||||||
|
case 'emailadmin.emailadmin_ui.editProfile':
|
||||||
|
$GLOBALS['egw_info']['nofooter'] = true;
|
||||||
|
$GLOBALS['egw']->js->validate_file('jscode','editProfile','emailadmin');
|
||||||
|
$GLOBALS['egw']->js->set_onload('javascript:initAll();');
|
||||||
|
#$GLOBALS['egw']->js->set_onload('smtp.init();');
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'emailadmin.emailadmin_ui.listProfiles':
|
||||||
|
$GLOBALS['egw']->js->validate_file('jscode','listProfile','emailadmin');
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$GLOBALS['egw']->common->egw_header();
|
||||||
|
|
||||||
|
if($_GET['menuaction'] == 'emailadmin.emailadmin_ui.listProfiles' || $_GET['menuaction'] == 'emailadmin.emailadmin_ui.deleteProfile')
|
||||||
|
echo parse_navbar();
|
||||||
|
}
|
||||||
|
|
||||||
|
function editProfile($_profileID='') {
|
||||||
|
$allGroups = self:: getAllGroups();
|
||||||
|
$allUsers = self::getAllUsers();
|
||||||
|
$applications = self::getAllApps();
|
||||||
|
|
||||||
|
if($_profileID != '')
|
||||||
|
{
|
||||||
|
$profileID = $_profileID;
|
||||||
|
}
|
||||||
|
elseif(is_int(intval($_GET['profileid'])) && !empty($_GET['profileid']))
|
||||||
|
{
|
||||||
|
$profileID = intval($_GET['profileid']);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
$profileList = $this->boemailadmin->getProfileList($profileID);
|
||||||
|
$profileData = $this->boemailadmin->getProfile($profileID);
|
||||||
|
$this->display_app_header();
|
||||||
|
|
||||||
|
$this->t->set_file(array("body" => "editprofile.tpl"));
|
||||||
|
$this->t->set_block('body','main');
|
||||||
|
|
||||||
|
$this->translate();
|
||||||
|
|
||||||
|
foreach((array)$profileData as $key => $value) {
|
||||||
|
#print "$key $value<br>";
|
||||||
|
switch($key) {
|
||||||
|
case 'ea_default_signature':
|
||||||
|
// nothing to do here
|
||||||
|
break;
|
||||||
|
case 'ea_stationery_active_templates':
|
||||||
|
$activeTemplates = $value;
|
||||||
|
case 'imapTLSEncryption':
|
||||||
|
$this->t->set_var('checked_'. $key .'_'. $value,'checked="1"');
|
||||||
|
break;
|
||||||
|
case 'imapTLSAuthentication':
|
||||||
|
if(!$value) {
|
||||||
|
$this->t->set_var('selected_'.$key,'checked="1"');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'imapEnableCyrusAdmin':
|
||||||
|
case 'imapEnableSieve':
|
||||||
|
case 'smtpAuth':
|
||||||
|
case 'smtpLDAPUseDefault':
|
||||||
|
case 'userDefinedAccounts':
|
||||||
|
case 'userDefinedIdentities':
|
||||||
|
case 'ea_user_defined_signatures':
|
||||||
|
case 'ea_active':
|
||||||
|
case 'imapoldcclient':
|
||||||
|
case 'editforwardingaddress':
|
||||||
|
if($value == 'yes' || $value == 1) {
|
||||||
|
$this->t->set_var('selected_'.$key,'checked="1"');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'imapType':
|
||||||
|
case 'smtpType':
|
||||||
|
case 'imapLoginType':
|
||||||
|
$this->t->set_var('selected_'.$key.'_'.$value,'selected="1"');
|
||||||
|
break;
|
||||||
|
case 'ea_appname':
|
||||||
|
$this->t->set_var('application_select_box', html::select('globalsettings[ea_appname]',$value,$applications, true, "style='width: 250px;'"));
|
||||||
|
break;
|
||||||
|
case 'ea_group':
|
||||||
|
$this->t->set_var('group_select_box', html::select('globalsettings[ea_group]',$value,$allGroups, true, "style='width: 250px;'"));
|
||||||
|
break;
|
||||||
|
case 'ea_user':
|
||||||
|
$this->t->set_var('user_select_box', html::select('globalsettings[ea_user]',$value,$allUsers, true, "style='width: 250px;'"));
|
||||||
|
break;
|
||||||
|
case 'ea_smtp_auth_username':
|
||||||
|
#echo "<br>value_$key,$value";
|
||||||
|
list($username,$senderadress) = explode(';',$value,2);
|
||||||
|
if (!empty($senderadress)) $this->t->set_var('value_smtp_senderadress',$senderadress);
|
||||||
|
$this->t->set_var('value_'.$key,$username);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$this->t->set_var('value_'.$key,$value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$linkData = array
|
||||||
|
(
|
||||||
|
'menuaction' => 'emailadmin.emailadmin_ui.saveProfile',
|
||||||
|
'profileID' => $profileID
|
||||||
|
);
|
||||||
|
$this->t->set_var('action_url',$GLOBALS['egw']->link('/index.php',$linkData));
|
||||||
|
|
||||||
|
$linkData = array
|
||||||
|
(
|
||||||
|
'menuaction' => 'emailadmin.emailadmin_ui.listProfiles'
|
||||||
|
);
|
||||||
|
$this->t->set_var('back_url',$GLOBALS['egw']->link('/index.php',$linkData));
|
||||||
|
|
||||||
|
$this->t->set_var('smtptype',html::select(
|
||||||
|
'smtpsettings[smtpType]',
|
||||||
|
$profileData['smtpType'],
|
||||||
|
$this->boemailadmin->getSMTPServerTypes(),
|
||||||
|
true,
|
||||||
|
'style="width: 250px;" id="smtpselector" onchange="smtp.display(this.value);"'
|
||||||
|
));
|
||||||
|
foreach($this->boemailadmin->getIMAPServerTypes() as $key => $value) {
|
||||||
|
$imapServerTypes[$key] = $value['description'];
|
||||||
|
};
|
||||||
|
$selectFrom = html::select(
|
||||||
|
'imapsettings[imapType]',
|
||||||
|
$profileData['imapType'],
|
||||||
|
$imapServerTypes,
|
||||||
|
true,
|
||||||
|
// stupid tabs javascript assumes value=position in selectbox, here's a littel workaround ;-)
|
||||||
|
"style='width: 250px;' id='imapselector' onchange='var v = this.value; imap.display(this.value); this.value=v;'"
|
||||||
|
);
|
||||||
|
$this->t->set_var('imaptype', $selectFrom);
|
||||||
|
|
||||||
|
$style="width:100%; border:0px; height:150px;";
|
||||||
|
$this->t->set_var('signature', html::fckEditorQuick(
|
||||||
|
'globalsettings[ea_default_signature]', 'simple',
|
||||||
|
$profileData['ea_default_signature'], '150px')
|
||||||
|
);
|
||||||
|
|
||||||
|
// Stationery settings
|
||||||
|
$bostationery = new felamimail_bostationery();
|
||||||
|
$activeTemplates = is_array($activeTemplates) ? $activeTemplates : array();
|
||||||
|
$this->t->set_var('stored_templates', html::checkbox_multiselect(
|
||||||
|
'globalsettings[ea_stationery_active_templates]',$activeTemplates
|
||||||
|
,$bostationery->get_stored_templates(),true,'',3,true,'width: 100%;'));
|
||||||
|
$this->t->set_var(
|
||||||
|
'link_manage_templates',
|
||||||
|
html::a_href(
|
||||||
|
lang('manage stationery templates'),
|
||||||
|
'/index.php?menuaction=etemplate.editor.edit',
|
||||||
|
array('name' => 'felamimail.stationery'),
|
||||||
|
'target="_blank"'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->t->parse("out","main");
|
||||||
|
print $this->t->get('out','main');
|
||||||
|
}
|
||||||
|
|
||||||
|
function listProfiles()
|
||||||
|
{
|
||||||
|
$accountID = false;
|
||||||
|
$groupID = false;
|
||||||
|
$appName = '';
|
||||||
|
$profileID = '';
|
||||||
|
if(is_int(intval($_GET['account_id'])) && !empty($_GET['account_id']))
|
||||||
|
{
|
||||||
|
if ( intval($_GET['account_id']) < 0 ) {
|
||||||
|
$groupID = intval($_GET['account_id']);
|
||||||
|
} else {
|
||||||
|
$accountID = intval($_GET['account_id']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->display_app_header();
|
||||||
|
|
||||||
|
$this->t->set_file(array("body" => "listprofiles.tpl"));
|
||||||
|
$this->t->set_block('body','main');
|
||||||
|
|
||||||
|
$this->translate();
|
||||||
|
|
||||||
|
$profileList = $this->boemailadmin->getProfileList($profileID,$appName,$groupID,$accountID);
|
||||||
|
|
||||||
|
// create the data array
|
||||||
|
if ($profileList)
|
||||||
|
{
|
||||||
|
for ($i=0; $i < count($profileList); $i++)
|
||||||
|
{
|
||||||
|
$linkData = array
|
||||||
|
(
|
||||||
|
'menuaction' => 'emailadmin.emailadmin_ui.editProfile',
|
||||||
|
'nocache' => '1',
|
||||||
|
'tabpage' => '3',
|
||||||
|
'profileid' => $profileList[$i]['profileID']
|
||||||
|
);
|
||||||
|
$imapServerLink = '<a href="#" onclick="egw_openWindowCentered2(\''.$GLOBALS['egw']->link('/index.php',$linkData).'\',\'ea_editProfile\',700,600); return false;">'.$profileList[$i]['imapServer'].'</a>';
|
||||||
|
|
||||||
|
$linkData = array
|
||||||
|
(
|
||||||
|
'menuaction' => 'emailadmin.emailadmin_ui.editProfile',
|
||||||
|
'nocache' => '1',
|
||||||
|
'tabpage' => '1',
|
||||||
|
'profileid' => $profileList[$i]['profileID']
|
||||||
|
);
|
||||||
|
$descriptionLink = '<a href="#" onclick="egw_openWindowCentered2(\''.$GLOBALS['egw']->link('/index.php',$linkData).'\',\'ea_editProfile\',700,600); return false;">'.$profileList[$i]['description'].'</a>';
|
||||||
|
|
||||||
|
$linkData = array
|
||||||
|
(
|
||||||
|
'menuaction' => 'emailadmin.emailadmin_ui.editProfile',
|
||||||
|
'nocache' => '1',
|
||||||
|
'tabpage' => '2',
|
||||||
|
'profileid' => $profileList[$i]['profileID']
|
||||||
|
);
|
||||||
|
$smtpServerLink = '<a href="#" onclick="egw_openWindowCentered2(\''.$GLOBALS['egw']->link('/index.php',$linkData).'\',\'ea_editProfile\',700,600); return false;">'.$profileList[$i]['smtpServer'].'</a>';
|
||||||
|
|
||||||
|
$linkData = array
|
||||||
|
(
|
||||||
|
'menuaction' => 'emailadmin.emailadmin_ui.deleteProfile',
|
||||||
|
'profileid' => $profileList[$i]['profileID']
|
||||||
|
);
|
||||||
|
$deleteLink = '<a href="'.$GLOBALS['egw']->link('/index.php',$linkData).
|
||||||
|
'" onClick="return confirm(\''.lang('Do you really want to delete this Profile').'?\')">'.
|
||||||
|
lang('delete').'</a>';
|
||||||
|
|
||||||
|
$application = (empty($profileList[$i]['ea_appname']) ? lang('any application') : $GLOBALS['egw_info']['apps'][$profileList[$i]['ea_appname']]['title']);
|
||||||
|
$linkData = array
|
||||||
|
(
|
||||||
|
'menuaction' => 'emailadmin.emailadmin_ui.editProfile',
|
||||||
|
'nocache' => '1',
|
||||||
|
'tabpage' => '1',
|
||||||
|
'profileid' => $profileList[$i]['profileID']
|
||||||
|
);
|
||||||
|
$applicationLink = '<a href="#" onclick="egw_openWindowCentered2(\''.$GLOBALS['egw']->link('/index.php',$linkData).'\',\'ea_editProfile\',700,600); return false;">'.$application.'</a>';
|
||||||
|
|
||||||
|
$group = (empty($profileList[$i]['ea_group']) ? lang('any group') : $GLOBALS['egw']->accounts->id2name($profileList[$i]['ea_group']));
|
||||||
|
$user = (empty($profileList[$i]['ea_user']) ? lang('any user') : $GLOBALS['egw']->accounts->id2name($profileList[$i]['ea_user']));
|
||||||
|
$isactive = (empty($profileList[$i]['ea_active']) ? lang('inactive') : ($profileList[$i]['ea_active']>0 ? lang('active') : lang('inactive')));
|
||||||
|
$linkData = array
|
||||||
|
(
|
||||||
|
'menuaction' => 'emailadmin.emailadmin_ui.editProfile',
|
||||||
|
'nocache' => '1',
|
||||||
|
'tabpage' => '1',
|
||||||
|
'profileid' => $profileList[$i]['profileID']
|
||||||
|
);
|
||||||
|
$groupLink = '<a href="#" onclick="egw_openWindowCentered2(\''.$GLOBALS['egw']->link('/index.php',$linkData).'\',\'ea_editProfile\',700,600); return false;">'.$group.'</a>';
|
||||||
|
$userLink = '<a href="#" onclick="egw_openWindowCentered2(\''.$GLOBALS['egw']->link('/index.php',$linkData).'\',\'ea_editProfile\',700,600); return false;">'.$user.'</a>';
|
||||||
|
$activeLink = '<a href="#" onclick="egw_openWindowCentered2(\''.$GLOBALS['egw']->link('/index.php',$linkData).'\',\'ea_editProfile\',700,600); return false;">'.$isactive.'</a>';
|
||||||
|
$moveButtons = '<img src="'. $GLOBALS['egw']->common->image('phpgwapi', 'up') .'" onclick="moveUp(this)"> '.
|
||||||
|
'<img src="'. $GLOBALS['egw']->common->image('phpgwapi', 'down') .'" onclick="moveDown(this)">';
|
||||||
|
|
||||||
|
$data['profile_'.$profileList[$i]['profileID']] = array(
|
||||||
|
$descriptionLink,
|
||||||
|
$smtpServerLink,
|
||||||
|
$imapServerLink,
|
||||||
|
$applicationLink,
|
||||||
|
$groupLink,
|
||||||
|
$userLink,
|
||||||
|
$activeLink,
|
||||||
|
$deleteLink,
|
||||||
|
$moveButtons,
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (($accountID || !empty($groupID)) && count($profileList)==1)
|
||||||
|
{
|
||||||
|
$linkData = array
|
||||||
|
(
|
||||||
|
'menuaction' => 'emailadmin.emailadmin_ui.editProfile',
|
||||||
|
'nocache' => '1',
|
||||||
|
'tabpage' => '1',
|
||||||
|
'profileid' => $profileList[0]['profileID']
|
||||||
|
);
|
||||||
|
print "<script type=\"text/javascript\">".'egw_openWindowCentered2(\''.$GLOBALS['egw']->link('/index.php',$linkData).'\',\'ea_editProfile\',700,600);</script>';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ($accountID || !empty($groupID)) {
|
||||||
|
$linkData = array
|
||||||
|
(
|
||||||
|
'menuaction' => 'emailadmin.emailadmin_ui.addProfile',
|
||||||
|
'nocache' => '1',
|
||||||
|
'tabpage' => '1',
|
||||||
|
'account_id' => ($accountID ? $accountID : $groupID)
|
||||||
|
);
|
||||||
|
print "<script type=\"text/javascript\">".'egw_openWindowCentered2(\''.$GLOBALS['egw']->link('/index.php',$linkData).'\',\'ea_addProfile\',700,600);</script>';
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the array containing the table header
|
||||||
|
$rows = array(
|
||||||
|
lang('description'),
|
||||||
|
lang('smtp server name'),
|
||||||
|
lang('imap server name'),
|
||||||
|
lang('application'),
|
||||||
|
lang('group'),
|
||||||
|
lang('user'),
|
||||||
|
lang('active'),
|
||||||
|
lang('delete'),
|
||||||
|
lang('order'),
|
||||||
|
);
|
||||||
|
if ($accountID || !empty($groupID)) {
|
||||||
|
$linkData = array
|
||||||
|
(
|
||||||
|
'menuaction' => 'emailadmin.emailadmin_ui.listProfiles',
|
||||||
|
);
|
||||||
|
$listLink = '<a href="'.$GLOBALS['egw']->link('/index.php',$linkData).
|
||||||
|
'" onClick="return confirm(\''.lang('Do you really want to reset the filter for the Profile listing').'?\')">'.
|
||||||
|
lang('reset filter').'</a>';
|
||||||
|
|
||||||
|
if ($GLOBALS['egw_info']['user']['apps']['admin']) {
|
||||||
|
$linkData = array
|
||||||
|
(
|
||||||
|
'menuaction' => 'admin.uiaccounts.list_'.($accountID ? 'users' : 'groups'),
|
||||||
|
);
|
||||||
|
$listLink2 = '<a href="'.$GLOBALS['egw']->link('/index.php',$linkData).'">'.($accountID ? lang('Back to Admin/Userlist'): lang('Back to Admin/Grouplist')).'</a>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the table html code
|
||||||
|
$this->t->set_var('server_next_match',$this->nextMatchTable(
|
||||||
|
$rows,
|
||||||
|
$data,
|
||||||
|
lang('profile list').($accountID || !empty($groupID) ? ' '.($accountID ? lang('filtered by Account') : lang('filtered by Group')).' ['.$listLink.']'.' ['.$listLink2.']': ''),
|
||||||
|
$_start,
|
||||||
|
$_total,
|
||||||
|
$_menuAction)
|
||||||
|
);
|
||||||
|
|
||||||
|
$linkData = array
|
||||||
|
(
|
||||||
|
'menuaction' => 'emailadmin.emailadmin_ui.addProfile'
|
||||||
|
);
|
||||||
|
$this->t->set_var('add_link',$GLOBALS['egw']->link('/index.php',$linkData));
|
||||||
|
|
||||||
|
$this->t->parse("out","main");
|
||||||
|
|
||||||
|
print $this->t->get('out','main');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function nextMatchTable($_rows, $_data, $_description, $_start, $_total, $_menuAction)
|
||||||
|
{
|
||||||
|
$template =& CreateObject('phpgwapi.Template',EGW_APP_TPL);
|
||||||
|
$template->set_file(array("body" => "nextMatch.tpl"));
|
||||||
|
$template->set_block('body','row_list','rowList');
|
||||||
|
$template->set_block('body','header_row','headerRow');
|
||||||
|
|
||||||
|
$var = Array(
|
||||||
|
'th_bg' => $GLOBALS['egw_info']['theme']['th_bg'],
|
||||||
|
'left_next_matchs' => $this->nextmatchs->left('/index.php',$start,$total,'menuaction=emailadmin.emailadmin_ui.listServers'),
|
||||||
|
'right_next_matchs' => $this->nextmatchs->right('/admin/groups.php',$start,$total,'menuaction=emailadmin.emailadmin_ui.listServers'),
|
||||||
|
'lang_groups' => lang('user groups'),
|
||||||
|
'sort_name' => $this->nextmatchs->show_sort_order($sort,'account_lid',$order,'/index.php',lang('name'),'menuaction=emailadmin.emailadmin_ui.listServers'),
|
||||||
|
'description' => $_description,
|
||||||
|
'header_edit' => lang('Edit'),
|
||||||
|
'header_delete' => lang('Delete')
|
||||||
|
);
|
||||||
|
$template->set_var($var);
|
||||||
|
|
||||||
|
$data = '';
|
||||||
|
if(is_array($_rows))
|
||||||
|
{
|
||||||
|
foreach($_rows as $value)
|
||||||
|
{
|
||||||
|
$data .= "<td align='center'><b>$value</b></td>";
|
||||||
|
}
|
||||||
|
$template->set_var('header_row_data', $data);
|
||||||
|
$template->fp('headerRow','header_row',True);
|
||||||
|
#$template->fp('header_row','header_row',True);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(is_array($_data))
|
||||||
|
{
|
||||||
|
foreach($_data as $rowID => $value)
|
||||||
|
{
|
||||||
|
$data = '';
|
||||||
|
foreach($value as $rowData)
|
||||||
|
{
|
||||||
|
$data .= "<td align='center'>$rowData</td>";
|
||||||
|
}
|
||||||
|
$template->set_var('row_data', $data);
|
||||||
|
$template->set_var('row_id', $rowID);
|
||||||
|
$template->fp('rowList','row_list',True);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $template->fp('out','body');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveProfile()
|
||||||
|
{
|
||||||
|
$globalSettings = array();
|
||||||
|
$smtpSettings = array();
|
||||||
|
$imapSettings = array();
|
||||||
|
|
||||||
|
// try to get the profileID
|
||||||
|
if(is_int(intval($_GET['profileID'])) && !empty($_GET['profileID'])) {
|
||||||
|
$globalSettings['profileID'] = intval($_GET['profileID']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$globalSettings['description'] = $_POST['globalsettings']['description'];
|
||||||
|
$globalSettings['defaultDomain'] = $_POST['globalsettings']['defaultDomain'];
|
||||||
|
$globalSettings['organisationName'] = $_POST['globalsettings']['organisationName'];
|
||||||
|
$globalSettings['userDefinedAccounts'] = ($_POST['globalsettings']['userDefinedAccounts'] == 'yes' ? 'yes' : 'no' );
|
||||||
|
$globalSettings['userDefinedIdentities'] = ($_POST['globalsettings']['userDefinedIdentities'] == 'yes' ? 'yes' : 'no' );
|
||||||
|
$globalSettings['ea_active'] = ($_POST['globalsettings']['ea_active'] == 'yes' ? 1 : 0 );
|
||||||
|
$globalSettings['ea_user_defined_signatures'] = ($_POST['globalsettings']['ea_user_defined_signatures'] == 'yes' ? 'yes' : 'no' );
|
||||||
|
$globalSettings['ea_default_signature'] = $_POST['globalsettings']['ea_default_signature'];
|
||||||
|
$globalSettings['ea_appname'] = ($_POST['globalsettings']['ea_appname'] == 'any' ? '' : $_POST['globalsettings']['ea_appname']);
|
||||||
|
$globalSettings['ea_group'] = ($_POST['globalsettings']['ea_group'] == 'any' ? '' : (int)$_POST['globalsettings']['ea_group']);
|
||||||
|
$globalSettings['ea_user'] = ($_POST['globalsettings']['ea_user'] == 'any' ? '' : (int)$_POST['globalsettings']['ea_user']);
|
||||||
|
$globalSettings['ea_stationery_active_templates'] = $_POST['globalsettings']['ea_stationery_active_templates'];
|
||||||
|
|
||||||
|
// get the settings for the smtp server
|
||||||
|
$smtpType = $_POST['smtpsettings']['smtpType'];
|
||||||
|
foreach($this->boemailadmin->getFieldNames($smtpType,'smtp') as $key) {
|
||||||
|
$smtpSettings[$key] = $_POST['smtpsettings'][$smtpType][$key];
|
||||||
|
}
|
||||||
|
// append the email to be used as sender adress(, if set)
|
||||||
|
if (!empty($smtpSettings['ea_smtp_auth_username']) && isset($_POST['smtpsettings'][$smtpType]['smtp_senderadress']) && !empty($_POST['smtpsettings'][$smtpType]['smtp_senderadress'])) {
|
||||||
|
$smtpSettings['ea_smtp_auth_username'] .= ";".$_POST['smtpsettings'][$smtpType]['smtp_senderadress'];
|
||||||
|
}
|
||||||
|
$smtpSettings['smtpType'] = $smtpType;
|
||||||
|
|
||||||
|
#_debug_array($smtpSettings); exit;
|
||||||
|
|
||||||
|
// get the settings for the imap/pop3 server
|
||||||
|
$imapType = $_POST['imapsettings']['imapType'];
|
||||||
|
foreach($this->boemailadmin->getFieldNames($imapType,'imap') as $key) {
|
||||||
|
switch($key) {
|
||||||
|
case 'imapTLSAuthentication':
|
||||||
|
$imapSettings[$key] = !isset($_POST['imapsettings'][$imapType][$key]);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$imapSettings[$key] = $_POST['imapsettings'][$imapType][$key];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$imapSettings['imapType'] = $imapType;
|
||||||
|
|
||||||
|
#_debug_array($imapSettings);
|
||||||
|
|
||||||
|
$this->boemailadmin->saveProfile($globalSettings, $smtpSettings, $imapSettings);
|
||||||
|
|
||||||
|
print "<script type=\"text/javascript\">opener.location.reload(); window.close();</script>";
|
||||||
|
$GLOBALS['egw']->common->egw_exit();
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
function translate()
|
||||||
|
{
|
||||||
|
# skeleton
|
||||||
|
# $this->t->set_var('',lang(''));
|
||||||
|
$this->t->set_var('lang_server_name',lang('server name'));
|
||||||
|
$this->t->set_var('lang_server_description',lang('description'));
|
||||||
|
$this->t->set_var('lang_edit',lang('edit'));
|
||||||
|
$this->t->set_var('lang_save',lang('save'));
|
||||||
|
$this->t->set_var('lang_delete',lang('delete'));
|
||||||
|
$this->t->set_var('lang_back',lang('back'));
|
||||||
|
$this->t->set_var('lang_remove',lang('remove'));
|
||||||
|
$this->t->set_var('lang_ldap_server',lang('LDAP server'));
|
||||||
|
$this->t->set_var('lang_ldap_basedn',lang('LDAP basedn'));
|
||||||
|
$this->t->set_var('lang_ldap_server_admin',lang('admin dn'));
|
||||||
|
$this->t->set_var('lang_ldap_server_password',lang('admin password'));
|
||||||
|
$this->t->set_var('lang_add_profile',lang('add profile'));
|
||||||
|
$this->t->set_var('lang_domain_name',lang('domainname'));
|
||||||
|
$this->t->set_var('lang_SMTP_server_hostname_or_IP_address',lang('SMTP-Server hostname or IP address'));
|
||||||
|
$this->t->set_var('lang_SMTP_server_port',lang('SMTP-Server port'));
|
||||||
|
$this->t->set_var('lang_Use_SMTP_auth',lang('Use SMTP auth'));
|
||||||
|
$this->t->set_var('lang_Select_type_of_SMTP_Server',lang('Select type of SMTP Server'));
|
||||||
|
$this->t->set_var('lang_profile_name',lang('Profile Name'));
|
||||||
|
$this->t->set_var('lang_default_domain',lang('enter your default mail domain (from: user@domain)'));
|
||||||
|
$this->t->set_var('lang_organisation_name',lang('name of organisation'));
|
||||||
|
$this->t->set_var('lang_user_defined_accounts',lang('users can define their own emailaccounts'));
|
||||||
|
$this->t->set_var('lang_user_defined_identities',lang('users can define their own identities'));
|
||||||
|
$this->t->set_var('lang_user_defined_signatures',lang('users can define their own signatures'));
|
||||||
|
$this->t->set_var('lang_LDAP_server_hostname_or_IP_address',lang('LDAP server hostname or ip address'));
|
||||||
|
$this->t->set_var('lang_LDAP_server_admin_dn',lang('LDAP server admin DN'));
|
||||||
|
$this->t->set_var('lang_LDAP_server_admin_pw',lang('LDAP server admin password'));
|
||||||
|
$this->t->set_var('lang_LDAP_server_base_dn',lang('LDAP server accounts DN'));
|
||||||
|
$this->t->set_var('lang_use_LDAP_defaults',lang('use LDAP defaults'));
|
||||||
|
$this->t->set_var('lang_LDAP_settings',lang('LDAP settings'));
|
||||||
|
$this->t->set_var('lang_select_type_of_imap/pop3_server',lang('select type of IMAP server'));
|
||||||
|
$this->t->set_var('lang_pop3_server_hostname_or_IP_address',lang('POP3 server hostname or ip address'));
|
||||||
|
$this->t->set_var('lang_pop3_server_port',lang('POP3 server port'));
|
||||||
|
$this->t->set_var('lang_imap_server_hostname_or_IP_address',lang('IMAP server hostname or ip address'));
|
||||||
|
$this->t->set_var('lang_imap_server_port',lang('IMAP server port'));
|
||||||
|
$this->t->set_var('lang_use_tls_encryption',lang('use tls encryption'));
|
||||||
|
$this->t->set_var('lang_use_tls_authentication',lang('use tls authentication'));
|
||||||
|
$this->t->set_var('lang_sieve_settings',lang('Sieve settings'));
|
||||||
|
$this->t->set_var('lang_enable_sieve',lang('enable Sieve'));
|
||||||
|
$this->t->set_var('lang_sieve_server_hostname_or_ip_address',lang('Sieve server hostname or ip address'));
|
||||||
|
$this->t->set_var('lang_sieve_server_port',lang('Sieve server port'));
|
||||||
|
$this->t->set_var('lang_enable_cyrus_imap_administration',lang('enable Cyrus IMAP server administration'));
|
||||||
|
$this->t->set_var('lang_cyrus_imap_administration',lang('Cyrus IMAP server administration'));
|
||||||
|
$this->t->set_var('lang_admin_username',lang('admin username'));
|
||||||
|
$this->t->set_var('lang_admin_password',lang('admin password'));
|
||||||
|
$this->t->set_var('lang_imap_server_logintyp',lang('imap server logintyp'));
|
||||||
|
$this->t->set_var('lang_standard',lang('username (standard)'));
|
||||||
|
$this->t->set_var('lang_vmailmgr',lang('username@domainname (Virtual MAIL ManaGeR)'));
|
||||||
|
$this->t->set_var('lang_pre_2001_c_client',lang('IMAP C-Client Version < 2001'));
|
||||||
|
$this->t->set_var('lang_user_can_edit_forwarding_address',lang('user can edit forwarding address'));
|
||||||
|
$this->t->set_var('lang_can_be_used_by_application',lang('can be used by application'));
|
||||||
|
$this->t->set_var('lang_can_be_used_by_group',lang('can be used by group'));
|
||||||
|
$this->t->set_var('lang_smtp_auth',lang('smtp authentication'));
|
||||||
|
$this->t->set_var('lang_sender',lang('send using this eMail-Address'));
|
||||||
|
$this->t->set_var('lang_username',lang('username'));
|
||||||
|
$this->t->set_var('lang_password',lang('password'));
|
||||||
|
$this->t->set_var('lang_smtp_settings',lang('smtp settings'));
|
||||||
|
$this->t->set_var('lang_smtp_options',lang('smtp options'));
|
||||||
|
$this->t->set_var('lang_profile_access_rights',lang('profile access rights'));
|
||||||
|
$this->t->set_var('lang_global_settings',lang(''));
|
||||||
|
$this->t->set_var('lang_organisation',lang('organisation'));
|
||||||
|
$this->t->set_var('lang_global_options',lang('global options'));
|
||||||
|
$this->t->set_var('lang_server_settings',lang('server settings'));
|
||||||
|
$this->t->set_var('lang_encryption_settings',lang('encryption settings'));
|
||||||
|
$this->t->set_var('lang_no_encryption',lang('no encryption'));
|
||||||
|
$this->t->set_var('lang_encrypted_connection',lang('encrypted connection'));
|
||||||
|
$this->t->set_var('lang_do_not_validate_certificate',lang('do not validate certificate'));
|
||||||
|
$this->t->set_var('lang_vacation_requires_admin',lang('Vaction messages with start- and end-date require an admin account to be set!'));
|
||||||
|
$this->t->set_var('lang_can_be_used_by_user',lang('can be used by user'));
|
||||||
|
$this->t->set_var('lang_profile_isactive',lang('profile is active'));
|
||||||
|
$this->t->set_var('lang_defined_by_admin',lang('Username/Password defined by admin'));
|
||||||
|
$this->t->set_var('lang_Use_IMAP_auth', lang('Use predefined username and password defined below'));
|
||||||
|
$this->t->set_var('lang_stationery', lang('stationery'));
|
||||||
|
$this->t->set_var('lang_active_templates', lang('active templates'));
|
||||||
|
$this->t->set_var('lang_active_templates_description', lang('users can utilize these stationery templates'));
|
||||||
|
$this->t->set_var('lang_email',lang('use Users eMail-Address (as seen in Useraccount)'));
|
||||||
|
$this->t->set_var('',lang(''));
|
||||||
|
# $this->t->set_var('',lang(''));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
789
emailadmin/inc/class.imap_client.inc.php
Normal file
789
emailadmin/inc/class.imap_client.inc.php
Normal file
@ -0,0 +1,789 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
include_once('PEAR.php');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The IMP_IMAPClient:: class enables connection to an IMAP server through
|
||||||
|
* built-in PHP functions.
|
||||||
|
*
|
||||||
|
* TODO: This should eventually be moved to Horde 4.0/framework.
|
||||||
|
*
|
||||||
|
* $Horde: imp/lib/IMAP/Client.php,v 1.21.2.21 2006/03/30 10:15:31 selsky Exp $
|
||||||
|
*
|
||||||
|
* Copyright 2005-2006 Michael Slusarz <slusarz@horde.org>
|
||||||
|
*
|
||||||
|
* Based on code from:
|
||||||
|
* + auth.php (1.49)
|
||||||
|
* + imap_general.php (1.212)
|
||||||
|
* + strings.php (1.184.2.35)
|
||||||
|
* from the Squirrelmail project.
|
||||||
|
* Copyright (c) 1999-2005 The SquirrelMail Project Team
|
||||||
|
*
|
||||||
|
* See the enclosed file COPYING for license information (GPL). If you
|
||||||
|
* did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
|
||||||
|
*
|
||||||
|
* @author Michael Slusarz <slusarz@horde.org>
|
||||||
|
* @since IMP 4.1
|
||||||
|
* @package IMP
|
||||||
|
*/
|
||||||
|
class imap_client {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The list of capabilities of the IMAP server.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
var $_capability = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The hostname of the IMAP server to connect to.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $_host;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The last message returned from the server.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $_message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The namespace information.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
var $_namespace = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The port number of the IMAP server to connect to.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $_port;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The last response returned from the server.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $_response;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The unique session identifier ID to use when making an IMAP query.
|
||||||
|
*
|
||||||
|
* @var integer
|
||||||
|
*/
|
||||||
|
var $_sessionid = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The socket connection to the IMAP server.
|
||||||
|
*
|
||||||
|
* @var resource
|
||||||
|
*/
|
||||||
|
var $_stream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Are we using SSL to connect to the IMAP server?
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $_usessl = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Are we using TLS to connect to the IMAP server?
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
var $_usetls = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*
|
||||||
|
* @param string $host The address/hostname of the IMAP server.
|
||||||
|
* @param string $port The port to connect to on the IMAP server.
|
||||||
|
* @param string $protocol The protocol string (See, e.g., servers.php).
|
||||||
|
*/
|
||||||
|
function imap_client($host, $port, $protocol)
|
||||||
|
{
|
||||||
|
$this->_host = $host;
|
||||||
|
$this->_port = $port;
|
||||||
|
|
||||||
|
/* Split apart protocol string to discover if we need to use either
|
||||||
|
* SSL or TLS. */
|
||||||
|
$tmp = explode('/', strtolower($protocol));
|
||||||
|
if (in_array('tls', $tmp)) {
|
||||||
|
$this->_usetls = true;
|
||||||
|
} elseif (in_array('ssl', $tmp)) {
|
||||||
|
$this->_usessl = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Are we using TLS to connect and is it supported?
|
||||||
|
*
|
||||||
|
* @return mixed Returns true if TLS is being used to connect, false if
|
||||||
|
* is not, and PEAR_Error if we are attempting to use TLS
|
||||||
|
* and this version of PHP doesn't support it.
|
||||||
|
*/
|
||||||
|
function useTLS()
|
||||||
|
{
|
||||||
|
if ($this->_usetls) {
|
||||||
|
/* There is no way in PHP 4 to open a TLS connection to a
|
||||||
|
* non-secured port. See http://bugs.php.net/bug.php?id=26040 */
|
||||||
|
if (!function_exists('stream_socket_enable_crypto')) {
|
||||||
|
return PEAR::raiseError(lang("To use a TLS connection, you must be running a version of PHP 5.1.0 or higher."), 'horde.error');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_usetls;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates a new IMAP session ID by incrementing the last one used.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*
|
||||||
|
* @return string IMAP session id of the form 'A000'.
|
||||||
|
*/
|
||||||
|
function _generateSid()
|
||||||
|
{
|
||||||
|
return sprintf("A%03d", $this->_sessionid++);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform a command on the IMAP server.
|
||||||
|
* This command sets the $_response and $_message variable.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*
|
||||||
|
* @param string $query IMAP command.
|
||||||
|
*
|
||||||
|
* @return mixed Returns PEAR_Error on error. On success, returns an
|
||||||
|
* array of the IMAP return text.
|
||||||
|
*/
|
||||||
|
function _runCommand($query)
|
||||||
|
{
|
||||||
|
$message = $response = array();
|
||||||
|
|
||||||
|
$sid = $this->_generateSid();
|
||||||
|
fwrite($this->_stream, $sid . ' ' . $query . "\r\n");
|
||||||
|
$tag_uid_a = explode(' ', trim($sid));
|
||||||
|
$tag = $tag_uid_a[0];
|
||||||
|
|
||||||
|
$res = $this->_retrieveIMAPResponse($tag, $response, $message);
|
||||||
|
if (is_a($res, 'PEAR_Error')) {
|
||||||
|
$this->_message = $this->_response = '';
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* retrieve the response and the message */
|
||||||
|
$this->_response = $response[$tag];
|
||||||
|
$this->_message = $message[$tag];
|
||||||
|
|
||||||
|
return (!empty($res[$tag])) ? $res[$tag][0] : $res[$tag];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom fgets function - get a line from the IMAP server no matter how
|
||||||
|
* large the line may be.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*
|
||||||
|
* @return string The next line in the IMAP stream.
|
||||||
|
*/
|
||||||
|
function _fgets()
|
||||||
|
{
|
||||||
|
$buffer = 4096;
|
||||||
|
$offset = 0;
|
||||||
|
$results = '';
|
||||||
|
|
||||||
|
while (strpos($results, "\r\n", $offset) === false) {
|
||||||
|
if (!($read = fgets($this->_stream, $buffer))) {
|
||||||
|
$results = '';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if ($results != '') {
|
||||||
|
$offset = strlen($results) - 1;
|
||||||
|
}
|
||||||
|
$results .= $read;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $results;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads the output from the IMAP stream.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*
|
||||||
|
* @param string $tag The IMAP SID tag.
|
||||||
|
* @param array $response The response information.
|
||||||
|
* @param array $message The message information.
|
||||||
|
*
|
||||||
|
* @return mixed PEAR_Error on error, response string on success.
|
||||||
|
*/
|
||||||
|
function _retrieveIMAPResponse($tag, &$response, &$message)
|
||||||
|
{
|
||||||
|
$aResponse = $read = '';
|
||||||
|
$data = $resultlist = array();
|
||||||
|
$i = 0;
|
||||||
|
|
||||||
|
$read = $this->_fgets();
|
||||||
|
while ($read) {
|
||||||
|
$char = $read{0};
|
||||||
|
switch ($char) {
|
||||||
|
case '+':
|
||||||
|
default:
|
||||||
|
$read = $this->_fgets();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case $tag{0}:
|
||||||
|
/* Get the command. */
|
||||||
|
$arg = '';
|
||||||
|
$i = strlen($tag) + 1;
|
||||||
|
$s = substr($read, $i);
|
||||||
|
if (($j = strpos($s, ' ')) || ($j = strpos($s, "\n"))) {
|
||||||
|
$arg = substr($s, 0, $j);
|
||||||
|
}
|
||||||
|
$found_tag = substr($read, 0, $i - 1);
|
||||||
|
if ($found_tag) {
|
||||||
|
$response[$found_tag] = $arg;
|
||||||
|
$message[$found_tag] = trim(substr($read, $i + strlen($arg)));
|
||||||
|
if (!empty($data)) {
|
||||||
|
$resultlist[] = $data;
|
||||||
|
}
|
||||||
|
$aResponse[$found_tag] = $resultlist;
|
||||||
|
$data = $resultlist = array();
|
||||||
|
if ($found_tag == $tag) {
|
||||||
|
break 2;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$read = $this->_fgets();
|
||||||
|
if ($read === false) {
|
||||||
|
break 2; /* switch while */
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '*':
|
||||||
|
if (preg_match('/^\*\s\d+\sFETCH/', $read)) {
|
||||||
|
/* check for literal */
|
||||||
|
$s = substr($read, -3);
|
||||||
|
$fetch_data = array();
|
||||||
|
do {
|
||||||
|
/* Outer loop: continue until next untagged fetch
|
||||||
|
or tagged reponse. */
|
||||||
|
do {
|
||||||
|
/* Innerloop for fetching literals. with this
|
||||||
|
loop we prohibit that literal responses appear
|
||||||
|
in the outer loop so we can trust the untagged
|
||||||
|
and tagged info provided by $read. */
|
||||||
|
if ($s === "}\r\n") {
|
||||||
|
$j = strrpos($read, '{');
|
||||||
|
$iLit = substr($read, $j + 1, -3);
|
||||||
|
$fetch_data[] = $read;
|
||||||
|
$sLiteral = fread($this->_stream, $iLit);
|
||||||
|
if ($sLiteral === false) { /* error */
|
||||||
|
break 4; /* while while switch while */
|
||||||
|
}
|
||||||
|
/* backwards compattibility */
|
||||||
|
$aLiteral = explode("\n", $sLiteral);
|
||||||
|
|
||||||
|
unset($sLiteral);
|
||||||
|
|
||||||
|
foreach ($aLiteral as $line) {
|
||||||
|
$fetch_data[] = $line ."\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($aLiteral);
|
||||||
|
|
||||||
|
/* Next fgets belongs to this fetch because
|
||||||
|
we just got the exact literalsize and data
|
||||||
|
must follow to complete the response. */
|
||||||
|
$read = $this->_fgets();
|
||||||
|
if ($read === false) { /* error */
|
||||||
|
break 4; /* while while switch while */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$fetch_data[] = $read;
|
||||||
|
|
||||||
|
/* Retrieve next line and check in the while
|
||||||
|
statements if it belongs to this fetch
|
||||||
|
response. */
|
||||||
|
$read = $this->_fgets();
|
||||||
|
if ($read === false) { /* error */
|
||||||
|
break 4; /* while while switch while */
|
||||||
|
}
|
||||||
|
/* Check for next untagged reponse and break. */
|
||||||
|
if ($read{0} == '*') {
|
||||||
|
break 2;
|
||||||
|
}
|
||||||
|
$s = substr($read, -3);
|
||||||
|
} while ($s === "}\r\n");
|
||||||
|
|
||||||
|
$s = substr($read,-3);
|
||||||
|
} while (($read{0} !== '*') &&
|
||||||
|
(substr($read, 0, strlen($tag)) !== $tag));
|
||||||
|
|
||||||
|
$resultlist[] = $fetch_data;
|
||||||
|
unset($fetch_data);
|
||||||
|
} else {
|
||||||
|
$s = substr($read, -3);
|
||||||
|
do {
|
||||||
|
if ($s === "}\r\n") {
|
||||||
|
$j = strrpos($read, '{');
|
||||||
|
$iLit = substr($read, $j + 1, -3);
|
||||||
|
$data[] = $read;
|
||||||
|
$sLiteral = fread($this->_stream, $iLit);
|
||||||
|
if ($sLiteral === false) { /* error */
|
||||||
|
$read = false;
|
||||||
|
break 3; /* while switch while */
|
||||||
|
}
|
||||||
|
$data[] = $sLiteral;
|
||||||
|
$data[] = $this->_fgets();
|
||||||
|
} else {
|
||||||
|
$data[] = $read;
|
||||||
|
}
|
||||||
|
$read = $this->_fgets();
|
||||||
|
if ($read === false) {
|
||||||
|
break 3; /* while switch while */
|
||||||
|
} elseif ($read{0} == '*') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$s = substr($read,-3);
|
||||||
|
} while ($s === "}\r\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Error processing in case $read is false. */
|
||||||
|
if ($read === false) {
|
||||||
|
/* Try to retrieve an untagged bye respons from the results. */
|
||||||
|
$sResponse = array_pop($data);
|
||||||
|
if (($sResponse !== NULL) &&
|
||||||
|
(strpos($sResponse,'* BYE') !== false)) {
|
||||||
|
return PEAR::raiseError(lang("IMAP server closed the connection."), 'horde.error');
|
||||||
|
} else {
|
||||||
|
return PEAR::raiseError(lang("Connection dropped by IMAP server."), 'horde.error');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ($response[$tag]) {
|
||||||
|
case 'OK':
|
||||||
|
return $aResponse;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'NO':
|
||||||
|
/* Ignore this error from M$ exchange, it is not fatal (aka bug). */
|
||||||
|
if (strpos($message[$tag], 'command resulted in') === false) {
|
||||||
|
return PEAR::raiseError(sprintf(lang("Could not complete request. Reason Given: %s"), $message[$tag]), 'horde.error', null, null, $response[$tag]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'BAD':
|
||||||
|
return PEAR::raiseError(sprintf(lang("Bad or malformed request. Server Responded: %s"), $message[$tag]), 'horde.error', null, null, $response[$tag]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'BYE':
|
||||||
|
return PEAR::raiseError(sprintf(lang("IMAP Server closed the connection. Server Responded: %s"), $message[$tag]), 'horde.error', null, null, $response[$tag]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return PEAR::raiseError(sprintf(lang("Unknown IMAP response from the server. Server Responded: %s"), $message[$tag]), 'horde.error', null, null, $response[$tag]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connects to the IMAP server.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*
|
||||||
|
* @return mixed Returns true on success, PEAR_Error on error.
|
||||||
|
*/
|
||||||
|
function _createStream()
|
||||||
|
{
|
||||||
|
if (($this->_usessl || $this->_usetls) &&
|
||||||
|
!function_exists('openssl_pkcs7_sign')) {
|
||||||
|
return PEAR::raiseError(lang("If using SSL or TLS, you must have the PHP openssl extension loaded."), 'horde.error');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($res = $this->useTLS()) {
|
||||||
|
if (is_a($res, 'PEAR_Error')) {
|
||||||
|
return $res;
|
||||||
|
} else {
|
||||||
|
$this->_host = $this->_host . ':' . $this->_port;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->_usessl) {
|
||||||
|
$this->_host = 'ssl://' . $this->_host;
|
||||||
|
}
|
||||||
|
$error_number = $error_string = '';
|
||||||
|
$timeout = 10;
|
||||||
|
|
||||||
|
if ($this->_usetls) {
|
||||||
|
$this->_stream = stream_socket_client($this->_host, $error_number, $error_string, $timeout);
|
||||||
|
if (!$this->_stream) {
|
||||||
|
return PEAR::raiseError(sprintf(lang("Error connecting to IMAP server. %s : %s."), $error_number, $error_string), 'horde.error');
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Disregard any server information returned. */
|
||||||
|
fgets($this->_stream, 1024);
|
||||||
|
|
||||||
|
/* Send the STARTTLS command. */
|
||||||
|
fwrite($this->_stream, $this->_generateSid() . " STARTTLS\r\n");
|
||||||
|
|
||||||
|
/* Disregard any server information returned. */
|
||||||
|
fgets($this->_stream, 1024);
|
||||||
|
|
||||||
|
/* Switch over to a TLS connection. */
|
||||||
|
$res = stream_socket_enable_crypto($this->_stream, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
|
||||||
|
if (!$res) {
|
||||||
|
return PEAR::raiseError(lang("Could not open secure connection to the IMAP server. %s : %s."), 'horde.error');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$this->_stream = fsockopen($this->_host, $this->_port, $error_number, $error_string, $timeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Do some error correction */
|
||||||
|
if (!$this->_stream) {
|
||||||
|
return PEAR::raiseError(sprintf(lang("Error connecting to IMAP server. %s : %s."), $error_number, $error_string), 'horde.error');
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Disregard any server information. */
|
||||||
|
fgets($this->_stream, 1024);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log the user into the IMAP server.
|
||||||
|
*
|
||||||
|
* @param string $username Username.
|
||||||
|
* @param string $password Encrypted password.
|
||||||
|
*
|
||||||
|
* @return mixed True on success, PEAR_Error on error.
|
||||||
|
*/
|
||||||
|
function login($username, $password)
|
||||||
|
{
|
||||||
|
$res = $this->_createStream();
|
||||||
|
if (is_a($res, 'PEAR_Error')) {
|
||||||
|
#LK Horde::logMessage($res, __FILE__, __LINE__, PEAR_LOG_ERR);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
$imap_auth_mech = array();
|
||||||
|
|
||||||
|
/* Use md5 authentication, if available. But no need to use special
|
||||||
|
* authentication if we are already using an encrypted connection. */
|
||||||
|
$auth_methods = $this->queryCapability('AUTH');
|
||||||
|
if ((!$this->_usessl || !$this->_usetls) && !empty($auth_methods)) {
|
||||||
|
if (in_array('CRAM-MD5', $auth_methods)) {
|
||||||
|
$imap_auth_mech[] = 'cram-md5';
|
||||||
|
}
|
||||||
|
if (in_array('DIGEST-MD5', $auth_methods)) {
|
||||||
|
$imap_auth_mech[] = 'digest-md5';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Next, try 'PLAIN' authentication. */
|
||||||
|
if (!empty($auth_methods) && in_array('PLAIN', $auth_methods)) {
|
||||||
|
$imap_auth_mech[] = 'plain';
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fall back to 'LOGIN' if available. */
|
||||||
|
if (!$this->queryCapability('LOGINDISABLED')) {
|
||||||
|
$imap_auth_mech[] = 'login';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($imap_auth_mech)) {
|
||||||
|
return PEAR::raiseError(lang("No supported IMAP authentication method could be found."), 'horde.error');
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($imap_auth_mech as $method) {
|
||||||
|
$res = $this->_login($username, $password, $method);
|
||||||
|
if (!is_a($res, 'PEAR_Error')) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log the user into the IMAP server.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*
|
||||||
|
* @param string $username Username.
|
||||||
|
* @param string $password Encrypted password.
|
||||||
|
* @param string $method IMAP login method.
|
||||||
|
*
|
||||||
|
* @return mixed True on success, PEAR_Error on error.
|
||||||
|
*/
|
||||||
|
function _login($username, $password, $method)
|
||||||
|
{
|
||||||
|
switch ($method) {
|
||||||
|
case 'cram-md5':
|
||||||
|
case 'digest-md5':
|
||||||
|
/* If we don't have Auth_SASL package install, return error. */
|
||||||
|
if (!@include_once 'Auth/SASL.php') {
|
||||||
|
return PEAR::raiseError(lang("CRAM-MD5 or DIGEST-MD5 requires the Auth_SASL package to be installed."), 'horde.error');
|
||||||
|
}
|
||||||
|
|
||||||
|
$tag = $this->_generateSid();
|
||||||
|
fwrite($this->_stream, $tag . ' AUTHENTICATE ' . strtoupper($method) . "\r\n");
|
||||||
|
$challenge = explode(' ', $this->_fgets(), 3);
|
||||||
|
|
||||||
|
if ($method == 'cram-md5') {
|
||||||
|
$auth_sasl = Auth_SASL::factory('crammd5');
|
||||||
|
$response = $auth_sasl->getResponse($username, $password, base64_decode($challenge[1]));
|
||||||
|
fwrite($this->_stream, base64_encode($response) . "\r\n");
|
||||||
|
$read = $this->_fgets();
|
||||||
|
} elseif ($method == 'digest-md5') {
|
||||||
|
$auth_sasl = Auth_SASL::factory('digestmd5');
|
||||||
|
$response = $auth_sasl->getResponse($username, $password, base64_decode($challenge[1]), $this->_host, 'imap');
|
||||||
|
fwrite($this->_stream, base64_encode($response) . "\r\n");
|
||||||
|
$response = explode(' ', $this->_fgets());
|
||||||
|
$response = base64_decode($response[1]);
|
||||||
|
if (strpos($response, 'rspauth=') === false) {
|
||||||
|
return PEAR::raiseError(lang("Unexpected response from server to Digest-MD5 response."), 'horde.error');
|
||||||
|
}
|
||||||
|
fwrite($this->_stream, "\r\n");
|
||||||
|
$read = $this->_fgets();
|
||||||
|
} else {
|
||||||
|
return PEAR::raiseError(lang("The IMAP server does not appear to support the authentication method selected. Please contact your system administrator."), 'horde.error');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'login':
|
||||||
|
$tag = $this->_generateSid();
|
||||||
|
$query = $tag . " LOGIN $username {" . strlen($password) . "}\r\n";
|
||||||
|
fwrite($this->_stream, $query);
|
||||||
|
$read = $this->_fgets();
|
||||||
|
if (substr($read, 0, 1) == '+') {
|
||||||
|
fwrite($this->_stream, "$password\r\n");
|
||||||
|
$read = $this->_fgets();
|
||||||
|
} else {
|
||||||
|
return PEAR::raiseError(lang("Unexpected response from server to LOGIN command."), 'horde.error');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'plain':
|
||||||
|
$tag = $this->_generateSid();
|
||||||
|
$sasl = $this->queryCapability('SASL-IR');
|
||||||
|
$auth = base64_encode("$username\0$username\0$password");
|
||||||
|
if ($sasl) {
|
||||||
|
// IMAP Extension for SASL Initial Client Response
|
||||||
|
// <draft-siemborski-imap-sasl-initial-response-01b.txt>
|
||||||
|
$query = $tag . " AUTHENTICATE PLAIN $auth\r\n";
|
||||||
|
fwrite($this->_stream, $query);
|
||||||
|
$read = $this->_fgets();
|
||||||
|
} else {
|
||||||
|
$query = $tag . " AUTHENTICATE PLAIN\r\n";
|
||||||
|
fwrite($this->_stream, $query);
|
||||||
|
$read = $this->_fgets();
|
||||||
|
if (substr($read, 0, 1) == '+') {
|
||||||
|
fwrite($this->_stream, "$auth\r\n");
|
||||||
|
$read = $this->_fgets();
|
||||||
|
} else {
|
||||||
|
return PEAR::raiseError(lang("Unexpected response from server to AUTHENTICATE command."), 'horde.error');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check for failed login. */
|
||||||
|
$results = explode(' ', $read, 3);
|
||||||
|
$response = $results[1];
|
||||||
|
|
||||||
|
if ($response != 'OK') {
|
||||||
|
$message = !empty($results[2]) ? htmlspecialchars($results[2]) : lang("No message returned.");
|
||||||
|
|
||||||
|
switch ($response) {
|
||||||
|
case 'NO':
|
||||||
|
return PEAR::raiseError(sprintf(lang("Bad login name or password."), $message), 'horde.error');
|
||||||
|
|
||||||
|
case 'BAD':
|
||||||
|
default:
|
||||||
|
return PEAR::raiseError(sprintf(lang("Bad request: %s"), $message), 'horde.error');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Log out of the IMAP session.
|
||||||
|
*/
|
||||||
|
function logout()
|
||||||
|
{
|
||||||
|
/* Logout is not valid until the server returns 'BYE'
|
||||||
|
* If we don't have an imap_ stream we're already logged out */
|
||||||
|
if (isset($this->_stream) && $this->_stream) {
|
||||||
|
$this->_runCommand('LOGOUT');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the CAPABILITY string from the IMAP server.
|
||||||
|
*
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _capability()
|
||||||
|
{
|
||||||
|
if (!is_null($this->_capability)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_capability = array();
|
||||||
|
$read = $this->_runCommand('CAPABILITY');
|
||||||
|
if (is_a($read, 'PEAR_Error')) {
|
||||||
|
#LK Horde::logMessage($read, __FILE__, __LINE__, PEAR_LOG_ERR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$c = explode(' ', trim($read[0]));
|
||||||
|
for ($i = 2; $i < count($c); $i++) {
|
||||||
|
$cap_list = explode('=', $c[$i]);
|
||||||
|
if (isset($cap_list[1])) {
|
||||||
|
if (!isset($this->_capability[$cap_list[0]])) {
|
||||||
|
$this->_capability[$cap_list[0]] = array();
|
||||||
|
}
|
||||||
|
$this->_capability[$cap_list[0]][] = $cap_list[1];
|
||||||
|
} else {
|
||||||
|
$this->_capability[$cap_list[0]] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether the IMAP server supports the given capability.
|
||||||
|
*
|
||||||
|
* @param string $capability The capability string to query.
|
||||||
|
*
|
||||||
|
* @param mixed True if the server supports the queried capability,
|
||||||
|
* false if it doesn't, or an array if the capability can
|
||||||
|
* contain multiple values.
|
||||||
|
*/
|
||||||
|
function queryCapability($capability)
|
||||||
|
{
|
||||||
|
$this->_capability();
|
||||||
|
return isset($this->_capability[$capability]) ? $this->_capability[$capability] : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the NAMESPACE information from the IMAP server.
|
||||||
|
*
|
||||||
|
* @param array $additional If the server supports namespaces, any
|
||||||
|
* additional namespaces to add to the
|
||||||
|
* namespace list that are not broadcast by
|
||||||
|
* the server.
|
||||||
|
*
|
||||||
|
* @return array An array with the following format:
|
||||||
|
* <pre>
|
||||||
|
* Array
|
||||||
|
* (
|
||||||
|
* [foo] => Array
|
||||||
|
* (
|
||||||
|
* [name] => (string)
|
||||||
|
* [delimiter] => (string)
|
||||||
|
* [type] => 'personal' | 'others' | 'shared'
|
||||||
|
* [hidden] => (boolean)
|
||||||
|
* )
|
||||||
|
*
|
||||||
|
* [foo2] => Array
|
||||||
|
* (
|
||||||
|
* ...
|
||||||
|
* )
|
||||||
|
* )
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
function namespace($additional = array())
|
||||||
|
{
|
||||||
|
if (!is_null($this->_namespace)) {
|
||||||
|
return $this->_namespace;
|
||||||
|
}
|
||||||
|
|
||||||
|
$namespace_array = array(
|
||||||
|
1 => 'personal',
|
||||||
|
2 => 'others',
|
||||||
|
3 => 'shared'
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($this->queryCapability('NAMESPACE')) {
|
||||||
|
/*
|
||||||
|
* According to rfc2342 response from NAMESPACE command is:
|
||||||
|
* * NAMESPACE (PERSONAL NAMESPACES) (OTHER_USERS NAMESPACE) (SHARED NAMESPACES)
|
||||||
|
*/
|
||||||
|
$read = $this->_runCommand('NAMESPACE');
|
||||||
|
if (is_a($read, 'PEAR_Error')) {
|
||||||
|
#LK Horde::logMessage($read, __FILE__, __LINE__, PEAR_LOG_ERR);
|
||||||
|
return $read;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (eregi('\\* NAMESPACE +(\\( *\\(.+\\) *\\)|NIL) +(\\( *\\(.+\\) *\\)|NIL) +(\\( *\\(.+\\) *\\)|NIL)', $read[0], $data)) {
|
||||||
|
for ($i = 1; $i <= 3; $i++) {
|
||||||
|
if ($data[$i] == 'NIL') {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$pna = explode(')(', $data[$i]);
|
||||||
|
while (list($k, $v) = each($pna)) {
|
||||||
|
$lst = explode('"', $v);
|
||||||
|
$delimiter = (isset($lst[3])) ? $lst[3] : '';
|
||||||
|
$this->_namespace[$lst[1]] = array('name' => $lst[1], 'delimiter' => $delimiter, 'type' => $namespace_array[$i], 'hidden' => false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($additional as $val) {
|
||||||
|
/* Skip namespaces if we have already auto-detected them.
|
||||||
|
* Also, hidden namespaces cannot be empty. */
|
||||||
|
$val = trim($val);
|
||||||
|
if (empty($val) || isset($this->_namespace[$val])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$read = $this->_runCommand('LIST "" "' . $val . '"');
|
||||||
|
if (is_a($read, 'PEAR_Error')) {
|
||||||
|
#LK Horde::logMessage($read, __FILE__, __LINE__, PEAR_LOG_ERR);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
if (!empty($read) &&
|
||||||
|
preg_match("/^\* LIST \(.*\) \"(.*)\" \"?(.*?)\"?\s*$/", $read[0], $data) &&
|
||||||
|
($data[2] == $val)) {
|
||||||
|
$this->_namespace[$val] = array('name' => $val, 'delimiter' => $data[1], 'type' => $namespace_array[3], 'hidden' => true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$res = $this->_runCommand('LIST "" ""');
|
||||||
|
if (is_a($res, 'PEAR_Error')) {
|
||||||
|
#LK Horde::logMessage($res, __FILE__, __LINE__, PEAR_LOG_ERR);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
$quote_position = strpos($res[0], '"');
|
||||||
|
$this->_namespace[''] = array('name' => '', 'delimiter' => substr($res[0], $quote_position + 1 , 1), 'type' => $namespace_array[1], 'hidden' => false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->_namespace;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines whether the IMAP search command supports the optional
|
||||||
|
* charset provided.
|
||||||
|
*
|
||||||
|
* @param string $charset The character set to test.
|
||||||
|
*
|
||||||
|
* @return boolean True if the IMAP search command supports the charset.
|
||||||
|
*/
|
||||||
|
function searchCharset($charset)
|
||||||
|
{
|
||||||
|
$this->_runCommand('SELECT INBOX');
|
||||||
|
$read = $this->_runCommand('SEARCH CHARSET ' . $charset . ' TEXT "charsettest" 1');
|
||||||
|
return !is_a($read, 'PEAR_Error');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
458
emailadmin/inc/class.pleskimap.inc.php
Normal file
458
emailadmin/inc/class.pleskimap.inc.php
Normal file
@ -0,0 +1,458 @@
|
|||||||
|
<?php
|
||||||
|
/***************************************************************************\
|
||||||
|
* EGroupWare - EMailAdmin IMAP via Plesk *
|
||||||
|
* http://www.egroupware.org *
|
||||||
|
* Written and (c) 2006 by RalfBecker-AT-outdoor-training.de *
|
||||||
|
* ------------------------------------------------------------------------- *
|
||||||
|
* emailadmin plugin for plesk: *
|
||||||
|
* - tested with Plesk7.5 under Linux, but should work with other plesk *
|
||||||
|
* versions and Windows too as it uses plesks cli (command line interface) *
|
||||||
|
* - this plugin ONLY works if you have root access to the webserver !!! *
|
||||||
|
* - you need to have mail activated for the domain in plesk first *
|
||||||
|
* - you need to configure the path to plesk's mail.sh or mail.exe cli by *
|
||||||
|
* editing this file (search for psa_mail_script) for now *
|
||||||
|
* - to allow the webserver to use the mail cli under Linux you need to *
|
||||||
|
* install the sudo package and add the following line to your sudoers *
|
||||||
|
* file using the visudo command as root: *
|
||||||
|
* wwwrun ALL = NOPASSWD: /usr/local/psa/bin/mail.sh *
|
||||||
|
* Replace wwwrun with the user the webserver is running as and, if *
|
||||||
|
* necessary adapt the path to mail.sh. *
|
||||||
|
* PLEASE NOTE: This allows all webserver users to run the mail.sh script *
|
||||||
|
* and to change the mail configuration of ALL domains !!! *
|
||||||
|
* => as with the "LDAP, Postfix & Cyrus" plugin the plesk one creates mail *
|
||||||
|
* users and manages passwords, aliases, forwards and quota from within *
|
||||||
|
* eGroupWare - no need to additionally visit the plesk interface anymore *
|
||||||
|
* ------------------------------------------------------------------------- *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms of the GNU General Public License as published by the *
|
||||||
|
* Free Software Foundation; version 2 of the License. *
|
||||||
|
\***************************************************************************/
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
include_once(EGW_SERVER_ROOT."/emailadmin/inc/class.defaultimap.inc.php");
|
||||||
|
|
||||||
|
class pleskimap extends defaultimap
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string $psa_mail_script full path to Plesk's mail.sh (Linux including sudo!) or mail.exe (Windows) interface
|
||||||
|
*/
|
||||||
|
var $psa_mail_script = '/usr/bin/sudo /usr/local/psa/bin/mail.sh'; // 'C:/psa/bin/mail.exe'
|
||||||
|
/**
|
||||||
|
* @var boolean $allways_create_mailbox true = allways create a mailbox on user creation,
|
||||||
|
* false = only if a local email (no forward) is given. To use felamimail you need a mailbox!
|
||||||
|
*/
|
||||||
|
var $allways_create_mailbox = true;
|
||||||
|
/**
|
||||||
|
* @var array $create_folders=array('Send','Trash') folders to automatic create and subscribe on account creation
|
||||||
|
*/
|
||||||
|
var $create_folders = array('Sent','Trash');
|
||||||
|
/**
|
||||||
|
* @var string/boolean $error string with last error-message or false
|
||||||
|
*/
|
||||||
|
var $error = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a full mailbox or just forward, depending on the given email address
|
||||||
|
* If email matches the default domain, we create a full mailbox, otherwise we create a forward
|
||||||
|
*
|
||||||
|
* @param array $hookValues
|
||||||
|
* @param string $action='create'
|
||||||
|
* @return boolean true on success, false otherwise
|
||||||
|
*/
|
||||||
|
function addAccount($hookValues,$action='create')
|
||||||
|
{
|
||||||
|
//echo "<p>pleskimap::addAccount(".print_r($hookValues,true).")</p>\n";
|
||||||
|
|
||||||
|
$defaultDomain = $this->profileData['defaultDomain'] ? $this->profileData['defaultDomain'] :
|
||||||
|
$GLOBALS['egw_info']['server']['mail_suffix'];
|
||||||
|
|
||||||
|
$localEmail = $hookValues['account_lid'].'@'.$defaultDomain;
|
||||||
|
$aliases = $forwards = array();
|
||||||
|
|
||||||
|
// is the given email a local address from our default domain?
|
||||||
|
if (substr($hookValues['account_email'],-1-strlen($defaultDomain)) != '@'.$defaultDomain)
|
||||||
|
{
|
||||||
|
$forwards[] = $hookValues['account_email'];
|
||||||
|
}
|
||||||
|
elseif ($hookValues['account_email'] != $localEmail)
|
||||||
|
{
|
||||||
|
$aliases[] = $hookValues['account_email'];
|
||||||
|
}
|
||||||
|
// add a default alias with Firstname.Lastname
|
||||||
|
if (!in_array($alias=$hookValues['account_firstname'].'.'.$hookValues['account_lastname'],$aliases) &&
|
||||||
|
$this->is_email($alias))
|
||||||
|
{
|
||||||
|
$aliases[] = $alias;
|
||||||
|
}
|
||||||
|
$info = $this->plesk_mail($action,$hookValues['account_lid'],$hookValues['account_passwd'],
|
||||||
|
$action != 'create' && !$aliases ? null : $aliases,$forwards,$this->allways_create_mailbox);
|
||||||
|
|
||||||
|
if (!$info['SUCCESS']) return false;
|
||||||
|
|
||||||
|
if ($forwards && !$this->allways_create_mailbox) return true; // no mailbox created, only a forward
|
||||||
|
|
||||||
|
// create Sent & Trash mailboxes and subscribe them
|
||||||
|
if(($mbox = @imap_open ($this->getMailboxString(),$localEmail,$hookValues['account_passwd'])))
|
||||||
|
{
|
||||||
|
$list = imap_getmailboxes($mbox, $this->getMailboxString(),'INBOX');
|
||||||
|
$delimiter = isset($list[0]->delimiter) ? $list[0]->delimiter : '.';
|
||||||
|
imap_subscribe($mbox,$this->getMailboxString('INBOX'));
|
||||||
|
|
||||||
|
foreach($this->create_folders as $folder)
|
||||||
|
{
|
||||||
|
$mailBoxName = 'INBOX'.$delimiter.$folder;
|
||||||
|
if(imap_createmailbox($mbox,imap_utf7_encode('{'.$this->profileData['imapServer'].'}'.$mailBoxName)))
|
||||||
|
{
|
||||||
|
imap_subscribe($mbox,$this->getMailboxString($mailBoxName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
imap_close($mbox);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteAccount($hookValues)
|
||||||
|
{
|
||||||
|
//echo "<p>pleskimap::deleteAccount(".print_r($hookValues,true).")</p>\n";
|
||||||
|
|
||||||
|
return $this->plesk_mail('remove',$hookValues['account_lid']);
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateAccount($hookValues)
|
||||||
|
{
|
||||||
|
//echo "<p>pleskimap::updateAccount(".print_r($hookValues,true).")</p>\n";
|
||||||
|
|
||||||
|
if($hookValues['account_lid'] != $hookValues['old_loginid'])
|
||||||
|
{
|
||||||
|
$this->error = lang("Plesk can't rename users --> request ignored");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return $this->addAccount($hookValues,'update');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read data from the mail account
|
||||||
|
*
|
||||||
|
* @param string/int $accountID
|
||||||
|
* @return array/boolean with keys mailLocalAddress, mailAlternateAddress, accountStatus, mailRoutingAddress, ... or false if not found
|
||||||
|
*/
|
||||||
|
function getUserData($accountID)
|
||||||
|
{
|
||||||
|
//echo "<p>pleskimap::getUserData('$accountID')</p>\n";
|
||||||
|
|
||||||
|
if (!($info = $this->plesk_mail('info',$accountID))) return false;
|
||||||
|
//_debug_array($info);
|
||||||
|
|
||||||
|
$data = array(
|
||||||
|
'mailLocalAddress' => $info['Mailname'].'@'.$info['Domain'],
|
||||||
|
'mailAlternateAddress' => $info['Alias(es)'] ? explode(' ',$info['Alias(es)']) : array(),
|
||||||
|
'accountStatus' => $info['Mailbox'] == 'true' || $info['Redirect'] == 'true' ? 'active' : 'disabled',
|
||||||
|
'mailRoutingAddress' => $info['Redirect address'] ? explode(' ',$info['Redirect address']) : false,
|
||||||
|
'deliveryMode' => $info['Redirect'] == 'true' && $info['Mailbox'] == 'false' ? 'forwardOnly' : '',
|
||||||
|
// 'qmailDotMode' => false,
|
||||||
|
// 'deliveryProgramPath' => false,
|
||||||
|
'quotaLimit' => $info['Mbox quota'] == 'Unlimited' ? '' : $info['Mbox quota']/1024.0,
|
||||||
|
);
|
||||||
|
//_debug_array($data);
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save mail account data
|
||||||
|
*
|
||||||
|
* @param string/int $accountID
|
||||||
|
* @param array $accountData with keys mailLocalAddress, mailAlternateAddress, accountStatus, mailRoutingAddress, ...
|
||||||
|
* @return boolean true on success, false otherwise
|
||||||
|
*/
|
||||||
|
function saveUserData($accountID, $accountData)
|
||||||
|
{
|
||||||
|
//echo "<p>pleskimap::saveUserData('$accountID',".print_r($accountData,true).")</p>\n";
|
||||||
|
|
||||||
|
// not used: $accountData['accountStatus']=='active', $accountData['qmailDotMode'], $accountData['deliveryProgramPath']
|
||||||
|
$info = $this->plesk_mail('update',$accountID,null,
|
||||||
|
$accountData['mailAlternateAddress'] ? $accountData['mailAlternateAddress'] : array(),
|
||||||
|
$accountData['mailRoutingAddress'] ? $accountData['mailRoutingAddress'] : array(),
|
||||||
|
empty($accountData['deliveryMode']),
|
||||||
|
1024*(float)$accountData['quotaLimit'],$accountData['accountStatus']=='active');
|
||||||
|
|
||||||
|
if (!$info['SUCCSESS'])
|
||||||
|
{
|
||||||
|
if ($info) $this->error = implode(', ',$info);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* call plesk's mail command line interface
|
||||||
|
*
|
||||||
|
* Usage: mail.sh command <mail_name> [options]
|
||||||
|
*
|
||||||
|
* Available commands:
|
||||||
|
* --create or -c <mail>@<domain> creates mail account
|
||||||
|
* --update or -u <mail>@<domain> updates mail account parameters
|
||||||
|
* --remove or -r <mail>@<domain> removes mail account
|
||||||
|
* --info or -i <mail>@<domain> retrieves mail account information
|
||||||
|
* --on <domain> enables mail service for domain
|
||||||
|
* --off <domain> disables mail service for domain
|
||||||
|
* --help or -h displays this help page
|
||||||
|
*
|
||||||
|
* Available options:
|
||||||
|
* -cp_access <true|false> enables control panel access (default:
|
||||||
|
* true)
|
||||||
|
* -mailbox <true|false> creates/removes mailbox
|
||||||
|
* -passwd <passwd> sets mailbox password [see the note
|
||||||
|
* below for details]
|
||||||
|
* -boxpass <passwd> obsolete alias for option "passwd"
|
||||||
|
* (this option may be removed from
|
||||||
|
* future releases)
|
||||||
|
* -passwd_type <plain|crypt> specifies the type of mailbox
|
||||||
|
* password, ignored if no password
|
||||||
|
* specified [see the note below for
|
||||||
|
* details]
|
||||||
|
* -mbox_quota <KB> limits the mailbox quota to the
|
||||||
|
* desired amount
|
||||||
|
* -boxquota <KB> obsolete alias for option "mbox_quota"
|
||||||
|
* (this option may be removed from
|
||||||
|
* future releases)
|
||||||
|
* -aliases <add|del>:<name1[,name2]> adds or deletes mail
|
||||||
|
* alias(es) to/from mailname
|
||||||
|
* -mgroups <add|del>:<list1[,list2]> adds or removes mail name
|
||||||
|
* to/from mail group
|
||||||
|
* -redirect <true|false> switches mail redirect on/off
|
||||||
|
* -rediraddr <addr> sets redirect to address (required if
|
||||||
|
* redirect is enabled)
|
||||||
|
* -group <true|false> switches mail group on/off
|
||||||
|
* -groupmem <add|del>:<addr1[,addr2]> adds/removes address(-es)
|
||||||
|
* to/from mail group
|
||||||
|
* -repo <add|del>:<file1[,file2]> adds/removes file to/from
|
||||||
|
* attachments repository
|
||||||
|
* [deprecated, use
|
||||||
|
* autoresponder.sh]
|
||||||
|
* -autorsp <true|false> switches all autoresponders on/off
|
||||||
|
* [deprecated, use autoresponder.sh]
|
||||||
|
* -autoname <name> autoresponder name (required for all
|
||||||
|
* autoresponder options) [deprecated,
|
||||||
|
* use autoresponder.sh]
|
||||||
|
* -autostatus <true|false> switches on/off autoresponder with
|
||||||
|
* specified name (true) [deprecated,
|
||||||
|
* use autoresponder.sh]
|
||||||
|
* -autoreq <subj|body>:<string> or <always> defines the condition
|
||||||
|
* for the autoresponder
|
||||||
|
* to be activated
|
||||||
|
* whether the
|
||||||
|
* specified pattern is
|
||||||
|
* encountered in the
|
||||||
|
* subject or body, or
|
||||||
|
* to respond always
|
||||||
|
* [deprecated, use
|
||||||
|
* autoresponder.sh]
|
||||||
|
* -autosubj <original|string> the subject line to be set up into
|
||||||
|
* autoresponder ("Re: <incoming
|
||||||
|
* subject>") or a custom string
|
||||||
|
* [deprecated, use autoresponder.sh]
|
||||||
|
* -auto_replyto <string> return address that will be set up
|
||||||
|
* into the autoresponder's messages
|
||||||
|
* [deprecated, use autoresponder.sh]
|
||||||
|
* -autotext <string> autoresponder message text
|
||||||
|
* [deprecated, use autoresponder.sh]
|
||||||
|
* -autoatch <add|del>:<file1[,file2]> adds/removes autoresponder
|
||||||
|
* attachment files
|
||||||
|
* [deprecated, use
|
||||||
|
* autoresponder.sh]
|
||||||
|
* -autofrq <number> defines the maximum number of
|
||||||
|
* responses to a unique e-mail address
|
||||||
|
* per day [deprecated, use
|
||||||
|
* autoresponder.sh]
|
||||||
|
* -autostor <number> defines the number of unique addresses
|
||||||
|
* to be stored for autoresponder
|
||||||
|
* [deprecated, use autoresponder.sh]
|
||||||
|
* -autored <addr> defines the e-mail address to forward
|
||||||
|
* all incoming mail to [deprecated, use
|
||||||
|
* autoresponder.sh]
|
||||||
|
* -multiple-sessions <true|false> allow multiple sessions
|
||||||
|
*
|
||||||
|
* Note:
|
||||||
|
* For security reasons, you can transfer not encrypted passwords via environment
|
||||||
|
* variable PSA_PASSWORD, by specifying the empty value in the command line for
|
||||||
|
* the passwd arguments (like " -passwd ''") and setting the password value in
|
||||||
|
* the PSA_PASSWORD variable.
|
||||||
|
* Similarly, you can transfer the crypted password via the environment variable
|
||||||
|
* PSA_CRYPTED_PASSWORD, by specifying the empty value in the command line for
|
||||||
|
* the passwd arguments (like " -passwd ''") and by setting the password value in
|
||||||
|
* the PSA_CRYPTED_PASSWORD variable.
|
||||||
|
*
|
||||||
|
* Version: psa v7.5.0_build75041208.07 os_SuSE 9.1
|
||||||
|
*
|
||||||
|
* mail.sh --info account@domain.com
|
||||||
|
* Mailname: account
|
||||||
|
* Domain: domain.com
|
||||||
|
* Alias(es): Firstname.Lastname
|
||||||
|
* CP Access: true
|
||||||
|
* Mailbox: true
|
||||||
|
* Password: geheim
|
||||||
|
* Password type: plain
|
||||||
|
* Mbox quota: Unlimited
|
||||||
|
* Redirect: false
|
||||||
|
* Mailgroup: false
|
||||||
|
* File repository: Empty
|
||||||
|
* Autoresponder: false
|
||||||
|
* Antivirus mail
|
||||||
|
* checking: Disabled
|
||||||
|
*
|
||||||
|
* SUCCESS: Gathering information for 'account@domain.com' complete
|
||||||
|
*
|
||||||
|
* mail.sh --info bogus@domain.com
|
||||||
|
* An error occured during getting mailname information: Mailname 'bogus@domain.com' doesn't exists
|
||||||
|
*
|
||||||
|
* @param string $action 'info', 'create', 'update' or 'remove'
|
||||||
|
* @param string/int $account account_lid or numerical account_id
|
||||||
|
* @param string $password=null string with password or null to not change
|
||||||
|
* @param array $aliases=null array with aliases or null to not change the aliases
|
||||||
|
* @param array $forwards=null array of email address to forward or null to not change
|
||||||
|
* @param boolean $keepLocalCopy=null if forwarding keep a local copy or not, null = dont change
|
||||||
|
* @param int $quota_kb=null mailbox quota in kb
|
||||||
|
* @return boolean/array array with returned values or false otherwise, error-message in $this->error
|
||||||
|
*/
|
||||||
|
function plesk_mail($action,$account,$password=null,$aliases=null,$forwards=null,$keepLocalCopy=null,$quota_kb=null)
|
||||||
|
{
|
||||||
|
//echo "<p>smtpplesk::plesk_mail('$action','$account','$password',".print_r($aliases,true).",".print_r($forwards,true).",".(is_null($keepLocalCopy)?'':(int)$keepLocalCopy).",$quota_kb)</p>\n";
|
||||||
|
|
||||||
|
$this->error = false;
|
||||||
|
|
||||||
|
if (is_numeric($account))
|
||||||
|
{
|
||||||
|
$account_lid = $GLOBALS['egw']->accounts->id2name($account);
|
||||||
|
}
|
||||||
|
elseif ($GLOBALS['egw']->accounts->name2id($account))
|
||||||
|
{
|
||||||
|
$account_lid = $account;
|
||||||
|
}
|
||||||
|
if (!$account_lid)
|
||||||
|
{
|
||||||
|
$this->error = lang("Account '%1' not found !!!",$account);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!in_array($action,array('info','create','update','remove')))
|
||||||
|
{
|
||||||
|
$this->error = lang("Unsupported action '%1' !!!",$action);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$defaultDomain = $this->profileData['defaultDomain'] ? $this->profileData['defaultDomain'] :
|
||||||
|
$GLOBALS['egw_info']['server']['mail_suffix'];
|
||||||
|
|
||||||
|
if ($action == 'update' && !($info = $this->plesk_mail('info',$account)))
|
||||||
|
{
|
||||||
|
$action = 'create'; // mail-account does not yet exist --> create it
|
||||||
|
}
|
||||||
|
$localEmail = $account_lid.'@'.$defaultDomain;
|
||||||
|
$script = $this->psa_mail_script . ' --'.$action . ' ' . $localEmail;
|
||||||
|
|
||||||
|
if ($action != 'info')
|
||||||
|
{
|
||||||
|
// invalidate our cache
|
||||||
|
$GLOBALS['egw']->session->appsession('plesk-email-'.$account_lid,'emailadmin',false);
|
||||||
|
|
||||||
|
// we dont set passwords shorten then 5 chars, as it only give an error in plesk
|
||||||
|
if (!is_null($password) && $password)
|
||||||
|
{
|
||||||
|
if (strlen($password) < 5 || strpos($password,$account_lid) !== false)
|
||||||
|
{
|
||||||
|
$this->error = lang('Plesk requires passwords to have at least 5 characters and not contain the account-name --> password NOT set!!!');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$script .= ' -passwd \''.str_replace('\'','\\\'',$password).'\' -passwd_type plain';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($action == 'create' || !is_null($forwards) || !is_null($keepLocalCopy))
|
||||||
|
{
|
||||||
|
$script .= ' -mailbox '.(!$forwards || $keepLocalCopy ? 'true' : 'false');
|
||||||
|
}
|
||||||
|
// plesk allows only one forwarding address, we ignore everything but the first
|
||||||
|
if (!is_null($forwards) && (!$forwards || $this->is_email($forwards[0])))
|
||||||
|
{
|
||||||
|
$script .= ' -redirect '.(!$forwards ? 'false' : 'true -rediraddr '.$forwards[0]);
|
||||||
|
}
|
||||||
|
if ($action == 'update')
|
||||||
|
{
|
||||||
|
if (!is_null($aliases))
|
||||||
|
{
|
||||||
|
$existing_aliases = explode(' ',$info['Alias(es)']); // without domain!
|
||||||
|
$delete_aliases = array();
|
||||||
|
foreach($existing_aliases as $alias)
|
||||||
|
{
|
||||||
|
if ($alias && !in_array($alias,$aliases) && !in_array($alias.'@'.$defaultDomain,$aliases))
|
||||||
|
{
|
||||||
|
$delete_aliases[] = $alias;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($delete_aliases)
|
||||||
|
{
|
||||||
|
$script .= ' -aliases del:'.implode(',',$delete_aliases);
|
||||||
|
}
|
||||||
|
foreach($aliases as $n => $alias)
|
||||||
|
{
|
||||||
|
if (in_array($alias,$existing_aliases) || in_array(str_replace('@'.$defaultDomain,'',$alias),$existing_aliases))
|
||||||
|
{
|
||||||
|
unset($aliases[$n]); // no change
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!is_null($aliases) && count($aliases))
|
||||||
|
{
|
||||||
|
foreach($aliases as $alias)
|
||||||
|
{
|
||||||
|
if (!$this->is_email($alias)) return false; // security precausion
|
||||||
|
}
|
||||||
|
$script .= ' -aliases add:'.str_replace('@'.$defaultDomain,'',implode(',',$aliases));
|
||||||
|
}
|
||||||
|
if (!is_null($quota_kb) && (int)$quota_kb)
|
||||||
|
{
|
||||||
|
$script .= ' -mbox_quota '.(int)$quota_kb;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//echo "<p>$script</p>\n";
|
||||||
|
if (!($fp = popen($script.' 2>&1','r')))
|
||||||
|
{
|
||||||
|
$this->error = lang("Plesk mail script '%1' not found !!!",$this->psa_mail_script);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$values = array();
|
||||||
|
while(!feof($fp))
|
||||||
|
{
|
||||||
|
$line = trim(fgets($fp));
|
||||||
|
list($name,$value) = preg_split('/: */',$line,2);
|
||||||
|
if (!is_null($value) && strpos($name,'An error occured') === false && $name)
|
||||||
|
{
|
||||||
|
$values[$name] = $value;
|
||||||
|
}
|
||||||
|
elseif ($line)
|
||||||
|
{
|
||||||
|
$values[] = $line;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pclose($fp);
|
||||||
|
|
||||||
|
if (!$values['SUCCESS'])
|
||||||
|
{
|
||||||
|
$this->error = implode(', ',$values);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return $values;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* checks for valid email addresse (local mail address dont need a domain!)
|
||||||
|
*
|
||||||
|
* Important as we run shell scripts with the address and one could try to run arbitrary commands this way!!!
|
||||||
|
* We only allow letters a-z, numbers and the following other chars: _ . - @
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
function is_email($email)
|
||||||
|
{
|
||||||
|
return preg_match('/^[@a-z0-9_.-]+$/i',$email);
|
||||||
|
}
|
||||||
|
}
|
215
emailadmin/inc/class.postfixdbmailuser.inc.php
Executable file
215
emailadmin/inc/class.postfixdbmailuser.inc.php
Executable file
@ -0,0 +1,215 @@
|
|||||||
|
<?php
|
||||||
|
/***************************************************************************\
|
||||||
|
* EGroupWare - EMailAdmin *
|
||||||
|
* http://www.egroupware.org *
|
||||||
|
* Written by : Lars Kneschke [lkneschke@linux-at-work.de] *
|
||||||
|
* ------------------------------------------------- *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms of the GNU General Public License as published by the *
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at your *
|
||||||
|
* option) any later version. *
|
||||||
|
\***************************************************************************/
|
||||||
|
/* $Id: class.postfixldap.inc.php 22439 2006-09-16 09:19:43Z ralfbecker $ */
|
||||||
|
|
||||||
|
include_once(EGW_SERVER_ROOT."/emailadmin/inc/class.defaultsmtp.inc.php");
|
||||||
|
|
||||||
|
class postfixdbmailuser extends defaultsmtp
|
||||||
|
{
|
||||||
|
function addAccount($_hookValues)
|
||||||
|
{
|
||||||
|
$mailLocalAddress = $_hookValues['account_email'] ? $_hookValues['account_email'] :
|
||||||
|
$GLOBALS['egw']->common->email_address($_hookValues['account_firstname'],
|
||||||
|
$_hookValues['account_lastname'],$_hookValues['account_lid'],$this->defaultDomain);
|
||||||
|
|
||||||
|
$ds = $GLOBALS['egw']->common->ldapConnect();
|
||||||
|
|
||||||
|
$filter = "uid=".$_hookValues['account_lid'];
|
||||||
|
|
||||||
|
$sri = @ldap_search($ds,$GLOBALS['egw_info']['server']['ldap_context'],$filter);
|
||||||
|
if ($sri)
|
||||||
|
{
|
||||||
|
$allValues = ldap_get_entries($ds, $sri);
|
||||||
|
$accountDN = $allValues[0]['dn'];
|
||||||
|
$objectClasses = $allValues[0]['objectclass'];
|
||||||
|
|
||||||
|
unset($objectClasses['count']);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!in_array('dbmailUser',$objectClasses) &&
|
||||||
|
!in_array('dbmailuser',$objectClasses))
|
||||||
|
{
|
||||||
|
$objectClasses[] = 'dbmailuser';
|
||||||
|
}
|
||||||
|
|
||||||
|
// the new code for postfix+cyrus+ldap
|
||||||
|
$newData = array
|
||||||
|
(
|
||||||
|
'mail' => $mailLocalAddress,
|
||||||
|
'accountStatus' => 'active',
|
||||||
|
'objectclass' => $objectClasses
|
||||||
|
);
|
||||||
|
|
||||||
|
ldap_mod_replace ($ds, $accountDN, $newData);
|
||||||
|
#print ldap_error($ds);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAccountEmailAddress($_accountName)
|
||||||
|
{
|
||||||
|
$emailAddresses = array();
|
||||||
|
$ds = $GLOBALS['egw']->common->ldapConnect();
|
||||||
|
$filter = sprintf("(&(uid=%s)(objectclass=posixAccount))",$_accountName);
|
||||||
|
$attributes = array('dn','mail','mailAlternateAddress');
|
||||||
|
$sri = @ldap_search($ds, $GLOBALS['egw_info']['server']['ldap_context'], $filter, $attributes);
|
||||||
|
|
||||||
|
if ($sri)
|
||||||
|
{
|
||||||
|
$realName = trim($GLOBALS['egw_info']['user']['firstname'] . (!empty($GLOBALS['egw_info']['user']['firstname']) ? ' ' : '') . $GLOBALS['egw_info']['user']['lastname']);
|
||||||
|
$allValues = ldap_get_entries($ds, $sri);
|
||||||
|
if(isset($allValues[0]['mail'][0]))
|
||||||
|
{
|
||||||
|
$emailAddresses[] = array
|
||||||
|
(
|
||||||
|
'name' => $realName,
|
||||||
|
'address' => $allValues[0]['mail'][0],
|
||||||
|
'type' => 'default'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if($allValues[0]['mailalternateaddress']['count'] > 0)
|
||||||
|
{
|
||||||
|
$count = $allValues[0]['mailalternateaddress']['count'];
|
||||||
|
for($i=0; $i < $count; $i++)
|
||||||
|
{
|
||||||
|
$emailAddresses[] = array
|
||||||
|
(
|
||||||
|
'name' => $realName,
|
||||||
|
'address' => $allValues[0]['mailalternateaddress'][$i],
|
||||||
|
'type' => 'alternate'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $emailAddresses;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getUserData($_uidnumber) {
|
||||||
|
$userData = array();
|
||||||
|
|
||||||
|
$ldap = $GLOBALS['egw']->common->ldapConnect();
|
||||||
|
|
||||||
|
if (($sri = @ldap_search($ldap,$GLOBALS['egw_info']['server']['ldap_context'],"(uidnumber=$_uidnumber)")))
|
||||||
|
{
|
||||||
|
$allValues = ldap_get_entries($ldap, $sri);
|
||||||
|
if ($allValues['count'] > 0)
|
||||||
|
{
|
||||||
|
#print "found something<br>";
|
||||||
|
$userData["mailLocalAddress"] = $allValues[0]["mail"][0];
|
||||||
|
$userData["mailAlternateAddress"] = $allValues[0]["mailalternateaddress"];
|
||||||
|
$userData["accountStatus"] = $allValues[0]["accountstatus"][0];
|
||||||
|
$userData["mailForwardingAddress"] = $allValues[0]["mailforwardingaddress"];
|
||||||
|
$userData["deliveryProgramPath"] = $allValues[0]["deliveryprogrampath"][0];
|
||||||
|
$userData["deliveryMode"] = $allValues[0]["deliverymode"][0];
|
||||||
|
|
||||||
|
unset($userData["mailAlternateAddress"]["count"]);
|
||||||
|
unset($userData["mailForwardingAddress"]["count"]);
|
||||||
|
|
||||||
|
return $userData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $userData;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setUserData($_uidnumber, $_mailAlternateAddress, $_mailForwardingAddress, $_deliveryMode, $_accountStatus, $_mailLocalAddress) {
|
||||||
|
$filter = "uidnumber=$_uidnumber";
|
||||||
|
|
||||||
|
$ldap = $GLOBALS['egw']->common->ldapConnect();
|
||||||
|
|
||||||
|
$sri = @ldap_search($ldap,$GLOBALS['egw_info']['server']['ldap_context'],$filter);
|
||||||
|
if ($sri) {
|
||||||
|
$allValues = ldap_get_entries($ldap, $sri);
|
||||||
|
|
||||||
|
$accountDN = $allValues[0]['dn'];
|
||||||
|
$uid = $allValues[0]['uid'][0];
|
||||||
|
$objectClasses = $allValues[0]['objectclass'];
|
||||||
|
|
||||||
|
unset($objectClasses['count']);
|
||||||
|
|
||||||
|
if(!in_array('dbmailUser',$objectClasses) &&
|
||||||
|
!in_array('dbmailuser',$objectClasses))
|
||||||
|
{
|
||||||
|
$objectClasses[] = 'dbmailuser';
|
||||||
|
sort($objectClasses);
|
||||||
|
$newData['objectclass'] = $objectClasses;
|
||||||
|
}
|
||||||
|
|
||||||
|
sort($_mailAlternateAddress);
|
||||||
|
sort($_mailForwardingAddress);
|
||||||
|
|
||||||
|
$newData['mailalternateaddress'] = (array)$_mailAlternateAddress;
|
||||||
|
$newData['mailforwardingaddress'] = (array)$_mailForwardingAddress;
|
||||||
|
$newData['deliverymode'] = $_deliveryMode ? 'forwardOnly' : array();
|
||||||
|
$newData['accountstatus'] = $_accountStatus ? 'active' : array();
|
||||||
|
$newData['mail'] = $_mailLocalAddress;
|
||||||
|
|
||||||
|
ldap_mod_replace($ldap, $accountDN, $newData);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveSMTPForwarding($_accountID, $_forwardingAddress, $_keepLocalCopy)
|
||||||
|
{
|
||||||
|
$ds = $GLOBALS['egw']->common->ldapConnect();
|
||||||
|
$filter = sprintf("(&(uidnumber=%s)(objectclass=posixAccount))",$_accountID);
|
||||||
|
$attributes = array('dn','mailforwardingaddress','deliverymode','objectclass');
|
||||||
|
$sri = ldap_search($ds, $GLOBALS['egw_info']['server']['ldap_context'], $filter, $attributes);
|
||||||
|
|
||||||
|
if ($sri)
|
||||||
|
{
|
||||||
|
$newData = array();
|
||||||
|
$allValues = ldap_get_entries($ds, $sri);
|
||||||
|
|
||||||
|
$newData['objectclass'] = $allValues[0]['objectclass'];
|
||||||
|
|
||||||
|
unset($newData['objectclass']['count']);
|
||||||
|
|
||||||
|
if(!in_array('dbmailUser',$newData['objectclass']) &&
|
||||||
|
!in_array('dbmailuser',$newData['objectclass']))
|
||||||
|
{
|
||||||
|
$newData['objectclass'][] = 'dbmailuser';
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!empty($_forwardingAddress))
|
||||||
|
{
|
||||||
|
if(is_array($allValues[0]['mailforwardingaddress']))
|
||||||
|
{
|
||||||
|
$newData['mailforwardingaddress'] = $allValues[0]['mailforwardingaddress'];
|
||||||
|
unset($newData['mailforwardingaddress']['count']);
|
||||||
|
$newData['mailforwardingaddress'][0] = $_forwardingAddress;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$newData['mailforwardingaddress'][0] = $_forwardingAddress;
|
||||||
|
}
|
||||||
|
$newData['deliverymode'] = ($_keepLocalCopy == 'yes'? array() : 'forwardOnly');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$newData['mailforwardingaddress'] = array();
|
||||||
|
$newData['deliverymode'] = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
ldap_modify ($ds, $allValues[0]['dn'], $newData);
|
||||||
|
#print ldap_error($ds);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
139
emailadmin/inc/class.postfixinetorgperson.inc.php
Normal file
139
emailadmin/inc/class.postfixinetorgperson.inc.php
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* eGroupWare EmailAdmin - Postfix with inetOrgPerson schema
|
||||||
|
*
|
||||||
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||||
|
* @package emailadmin
|
||||||
|
* @link http://www.egroupware.org
|
||||||
|
* @author Ralf Becker <RalfBecker@outdoor-training.de>
|
||||||
|
* @author Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
include_once(EGW_SERVER_ROOT.'/emailadmin/inc/class.defaultsmtp.inc.php');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Postfix with inetOrgPerson schema (default for eGW accounts)
|
||||||
|
*
|
||||||
|
* Stores the aliases as aditional mail Attributes. The primary mail address is the first one.
|
||||||
|
*
|
||||||
|
* At the moment we support no forwarding with this schema and no disabling of an account
|
||||||
|
*/
|
||||||
|
class postfixinetorgperson extends defaultsmtp
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Add an account, nothing needed as we dont have to add an additional schema
|
||||||
|
*
|
||||||
|
* @param array $_hookValues
|
||||||
|
*/
|
||||||
|
function addAccount($_hookValues)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all email addresses of an account
|
||||||
|
*
|
||||||
|
* @param string $_accountName
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function getAccountEmailAddress($_accountName)
|
||||||
|
{
|
||||||
|
$emailAddresses = array();
|
||||||
|
$ds = $GLOBALS['egw']->common->ldapConnect();
|
||||||
|
$sri = @ldap_search($ds, $GLOBALS['egw_info']['server']['ldap_context'],"(&(uid=$_accountName)(objectclass=posixAccount))",array('dn','mail'));
|
||||||
|
|
||||||
|
if ($sri && ($allValues = ldap_get_entries($ds, $sri)) && is_array($allValues[0]['mail']))
|
||||||
|
{
|
||||||
|
$realName = trim($GLOBALS['egw_info']['user']['firstname'] . (!empty($GLOBALS['egw_info']['user']['firstname']) ? ' ' : '') . $GLOBALS['egw_info']['user']['lastname']);
|
||||||
|
foreach($allValues[0]['mail'] as $n => $mail)
|
||||||
|
{
|
||||||
|
if (!is_numeric($n)) continue;
|
||||||
|
|
||||||
|
$emailAddresses[] = array(
|
||||||
|
'name' => $realName,
|
||||||
|
'address' => $mail,
|
||||||
|
'type' => !$n ? 'default' : 'alternate',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//echo "<p>postfixinetorgperson::getAccountEmail($_accountName)"; _debug_array($emailAddresses);
|
||||||
|
return $emailAddresses;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the data of a given user
|
||||||
|
*
|
||||||
|
* @param int $_uidnumber numerical user-id
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function getUserData($_uidnumber)
|
||||||
|
{
|
||||||
|
$userdata = array();
|
||||||
|
$ldap = $GLOBALS['egw']->common->ldapConnect();
|
||||||
|
|
||||||
|
if (($sri = @ldap_search($ldap,$GLOBALS['egw_info']['server']['ldap_context'],'uidnumber='.(int)$_uidnumber,array('mail'))))
|
||||||
|
{
|
||||||
|
$allValues = ldap_get_entries($ldap, $sri);
|
||||||
|
if ($allValues['count'] > 0)
|
||||||
|
{
|
||||||
|
unset($allValues[0]['mail']['count']);
|
||||||
|
$userdata = array(
|
||||||
|
'mailLocalAddress' => array_shift($allValues[0]['mail']),
|
||||||
|
'mailAlternateAddress' => $allValues[0]['mail'],
|
||||||
|
'accountStatus' => 'active',
|
||||||
|
'mailForwardingAddress' => array(),
|
||||||
|
// 'deliveryMode' => ,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//echo "<p>postfixinetorgperson::getUserData($_uidnumber) = ".print_r($userdata,true)."</p>\n";
|
||||||
|
return $userdata;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the data of a given user
|
||||||
|
*
|
||||||
|
* @param int $_uidnumber numerical user-id
|
||||||
|
* @param array $_mailAlternateAddress
|
||||||
|
* @param array $_mailForwardingAddress
|
||||||
|
* @param string $_deliveryMode
|
||||||
|
* @param string $_accountStatus
|
||||||
|
* @param string $_mailLocalAddress
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
function setUserData($_uidnumber, $_mailAlternateAddress, $_mailForwardingAddress, $_deliveryMode, $_accountStatus, $_mailLocalAddress)
|
||||||
|
{
|
||||||
|
$filter = "uidnumber=$_uidnumber";
|
||||||
|
|
||||||
|
$ldap = $GLOBALS['egw']->common->ldapConnect();
|
||||||
|
|
||||||
|
if (($sri = @ldap_search($ldap,$GLOBALS['egw_info']['server']['ldap_context'],'uidnumber='.(int)$_uidnumber,array('dn'))))
|
||||||
|
{
|
||||||
|
$allValues = ldap_get_entries($ldap, $sri);
|
||||||
|
$accountDN = $allValues[0]['dn'];
|
||||||
|
|
||||||
|
sort($_mailAlternateAddress);
|
||||||
|
$newData['mail'] = array_values(array_unique(array_merge(array($_mailLocalAddress),$_mailAlternateAddress)));
|
||||||
|
|
||||||
|
// sort($_mailForwardingAddress);
|
||||||
|
// $newData['forwards'] = (array)$_mailForwardingAddress;
|
||||||
|
// $newData['active'] = $_accountStatus;
|
||||||
|
// $newData['mode'] = $_deliveryMode;
|
||||||
|
|
||||||
|
//echo "<p>postfixinetorgperson::setUserData($_uidnumber,...) setting $accountDN to ".print_r($newData,true)."</p>\n";
|
||||||
|
return ldap_mod_replace($ldap, $accountDN, $newData);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves the forwarding information
|
||||||
|
*
|
||||||
|
* @param int $_accountID
|
||||||
|
* @param string $_forwardingAddress
|
||||||
|
* @param string $_keepLocalCopy 'yes'
|
||||||
|
*/
|
||||||
|
function saveSMTPForwarding($_accountID, $_forwardingAddress, $_keepLocalCopy)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
257
emailadmin/inc/class.postfixldap.inc.php
Normal file
257
emailadmin/inc/class.postfixldap.inc.php
Normal file
@ -0,0 +1,257 @@
|
|||||||
|
<?php
|
||||||
|
/***************************************************************************\
|
||||||
|
* EGroupWare - EMailAdmin *
|
||||||
|
* http://www.egroupware.org *
|
||||||
|
* Written by : Lars Kneschke [lkneschke@linux-at-work.de] *
|
||||||
|
* ------------------------------------------------- *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms of the GNU General Public License as published by the *
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at your *
|
||||||
|
* option) any later version. *
|
||||||
|
\***************************************************************************/
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
include_once(EGW_SERVER_ROOT."/emailadmin/inc/class.defaultsmtp.inc.php");
|
||||||
|
|
||||||
|
class postfixldap extends defaultsmtp
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Hook called if account get's updated --> update the mailMessageStore attribute
|
||||||
|
*
|
||||||
|
* @param array $_hookValues
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
function addAccount($_hookValues)
|
||||||
|
{
|
||||||
|
$mailLocalAddress = $_hookValues['account_email'] ? $_hookValues['account_email'] :
|
||||||
|
$GLOBALS['egw']->common->email_address($_hookValues['account_firstname'],
|
||||||
|
$_hookValues['account_lastname'],$_hookValues['account_lid'],$this->defaultDomain);
|
||||||
|
|
||||||
|
$ds = $GLOBALS['egw']->common->ldapConnect();
|
||||||
|
|
||||||
|
$filter = "uid=".$_hookValues['account_lid'];
|
||||||
|
|
||||||
|
$sri = @ldap_search($ds,$GLOBALS['egw_info']['server']['ldap_context'],$filter);
|
||||||
|
if ($sri)
|
||||||
|
{
|
||||||
|
$allValues = ldap_get_entries($ds, $sri);
|
||||||
|
$accountDN = $allValues[0]['dn'];
|
||||||
|
$objectClasses = $allValues[0]['objectclass'];
|
||||||
|
|
||||||
|
unset($objectClasses['count']);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!in_array('qmailUser',$objectClasses) &&
|
||||||
|
!in_array('qmailuser',$objectClasses))
|
||||||
|
{
|
||||||
|
$objectClasses[] = 'qmailuser';
|
||||||
|
}
|
||||||
|
|
||||||
|
// the new code for postfix+cyrus+ldap
|
||||||
|
$newData = array
|
||||||
|
(
|
||||||
|
'mail' => $mailLocalAddress,
|
||||||
|
'accountStatus' => 'active',
|
||||||
|
'objectclass' => $objectClasses,
|
||||||
|
'mailMessageStore' => $_hookValues['account_lid'].'@'.$this->defaultDomain,
|
||||||
|
);
|
||||||
|
|
||||||
|
return ldap_mod_replace ($ds, $accountDN, $newData);
|
||||||
|
#print ldap_error($ds);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hook called if account get's updated --> update the mailMessageStore attribute
|
||||||
|
*
|
||||||
|
* @param array $_hookValues
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
function updateAccount($_hookValues)
|
||||||
|
{
|
||||||
|
$mailLocalAddress = $_hookValues['account_email'] ? $_hookValues['account_email'] :
|
||||||
|
$GLOBALS['egw']->common->email_address($_hookValues['account_firstname'],
|
||||||
|
$_hookValues['account_lastname'],$_hookValues['account_lid'],$this->defaultDomain);
|
||||||
|
|
||||||
|
$ds = $GLOBALS['egw']->common->ldapConnect();
|
||||||
|
$filter = "(&(uid=$_hookValues[account_lid])(objectclass=posixAccount))";
|
||||||
|
$attributes = array('dn','objectclass');
|
||||||
|
if (!($sri = @ldap_search($ds, $GLOBALS['egw_info']['server']['ldap_context'], $filter, $attributes)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$allValues = ldap_get_entries($ds, $sri);
|
||||||
|
$accountDN = $allValues[0]['dn'];
|
||||||
|
$objectClasses = $allValues[0]['objectclass'];
|
||||||
|
|
||||||
|
unset($objectClasses['count']);
|
||||||
|
|
||||||
|
if(!in_array('qmailUser',$objectClasses) && !in_array('qmailuser',$objectClasses))
|
||||||
|
{
|
||||||
|
$objectClasses[] = 'qmailuser';
|
||||||
|
// the new code for postfix+cyrus+ldap
|
||||||
|
$newData = array
|
||||||
|
(
|
||||||
|
'mail' => $mailLocalAddress,
|
||||||
|
'accountStatus' => 'active',
|
||||||
|
'objectclass' => $objectClasses,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$newData['mailMessageStore'] = $_hookValues['account_lid'].'@'.$this->defaultDomain;
|
||||||
|
|
||||||
|
return ldap_mod_replace ($ds, $accountDN, $newData);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAccountEmailAddress($_accountName)
|
||||||
|
{
|
||||||
|
$emailAddresses = array();
|
||||||
|
$ds = $GLOBALS['egw']->common->ldapConnect();
|
||||||
|
$filter = sprintf("(&(uid=%s)(objectclass=posixAccount))",$_accountName);
|
||||||
|
$attributes = array('dn','mail','mailAlternateAddress');
|
||||||
|
$sri = @ldap_search($ds, $GLOBALS['egw_info']['server']['ldap_context'], $filter, $attributes);
|
||||||
|
|
||||||
|
if ($sri)
|
||||||
|
{
|
||||||
|
$realName = trim($GLOBALS['egw_info']['user']['firstname'] . (!empty($GLOBALS['egw_info']['user']['firstname']) ? ' ' : '') . $GLOBALS['egw_info']['user']['lastname']);
|
||||||
|
$allValues = ldap_get_entries($ds, $sri);
|
||||||
|
if(isset($allValues[0]['mail'][0]))
|
||||||
|
{
|
||||||
|
$emailAddresses[] = array
|
||||||
|
(
|
||||||
|
'name' => $realName,
|
||||||
|
'address' => $allValues[0]['mail'][0],
|
||||||
|
'type' => 'default'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if($allValues[0]['mailalternateaddress']['count'] > 0)
|
||||||
|
{
|
||||||
|
$count = $allValues[0]['mailalternateaddress']['count'];
|
||||||
|
for($i=0; $i < $count; $i++)
|
||||||
|
{
|
||||||
|
$emailAddresses[] = array
|
||||||
|
(
|
||||||
|
'name' => $realName,
|
||||||
|
'address' => $allValues[0]['mailalternateaddress'][$i],
|
||||||
|
'type' => 'alternate'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $emailAddresses;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getUserData($_uidnumber)
|
||||||
|
{
|
||||||
|
$userData = array();
|
||||||
|
|
||||||
|
$ldap = $GLOBALS['egw']->common->ldapConnect();
|
||||||
|
|
||||||
|
if (($sri = @ldap_search($ldap,$GLOBALS['egw_info']['server']['ldap_context'],"(uidnumber=$_uidnumber)")))
|
||||||
|
{
|
||||||
|
$allValues = ldap_get_entries($ldap, $sri);
|
||||||
|
if ($allValues['count'] > 0)
|
||||||
|
{
|
||||||
|
#print "found something<br>";
|
||||||
|
$userData["mailLocalAddress"] = $allValues[0]["mail"][0];
|
||||||
|
$userData["mailAlternateAddress"] = $allValues[0]["mailalternateaddress"];
|
||||||
|
$userData["accountStatus"] = $allValues[0]["accountstatus"][0];
|
||||||
|
$userData["mailForwardingAddress"] = $allValues[0]["mailforwardingaddress"];
|
||||||
|
$userData["qmailDotMode"] = $allValues[0]["qmaildotmode"][0];
|
||||||
|
$userData["deliveryProgramPath"] = $allValues[0]["deliveryprogrampath"][0];
|
||||||
|
$userData["deliveryMode"] = $allValues[0]["deliverymode"][0];
|
||||||
|
|
||||||
|
unset($userData["mailAlternateAddress"]["count"]);
|
||||||
|
unset($userData["mailForwardingAddress"]["count"]);
|
||||||
|
|
||||||
|
return $userData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $userData;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setUserData($_uidnumber, $_mailAlternateAddress, $_mailForwardingAddress, $_deliveryMode, $_accountStatus, $_mailLocalAddress)
|
||||||
|
{
|
||||||
|
$filter = "uidnumber=$_uidnumber";
|
||||||
|
|
||||||
|
$ldap = $GLOBALS['egw']->common->ldapConnect();
|
||||||
|
|
||||||
|
if (!($sri = @ldap_search($ldap,$GLOBALS['egw_info']['server']['ldap_context'],$filter)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$allValues = ldap_get_entries($ldap, $sri);
|
||||||
|
|
||||||
|
$accountDN = $allValues[0]['dn'];
|
||||||
|
$uid = $allValues[0]['uid'][0];
|
||||||
|
$objectClasses = $allValues[0]['objectclass'];
|
||||||
|
|
||||||
|
unset($objectClasses['count']);
|
||||||
|
|
||||||
|
if(!in_array('qmailUser',$objectClasses) &&
|
||||||
|
!in_array('qmailuser',$objectClasses))
|
||||||
|
{
|
||||||
|
$objectClasses[] = 'qmailuser';
|
||||||
|
sort($objectClasses);
|
||||||
|
$newData['objectclass'] = $objectClasses;
|
||||||
|
}
|
||||||
|
|
||||||
|
sort($_mailAlternateAddress);
|
||||||
|
sort($_mailForwardingAddress);
|
||||||
|
|
||||||
|
$newData['mailalternateaddress'] = (array)$_mailAlternateAddress;
|
||||||
|
$newData['mailforwardingaddress'] = (array)$_mailForwardingAddress;
|
||||||
|
$newData['deliverymode'] = $_deliveryMode ? 'forwardOnly' : array();
|
||||||
|
$newData['accountstatus'] = $_accountStatus ? 'active' : array();
|
||||||
|
$newData['mail'] = $_mailLocalAddress;
|
||||||
|
$newData['mailMessageStore'] = $uid.'@'.$this->defaultDomain;
|
||||||
|
|
||||||
|
return ldap_mod_replace($ldap, $accountDN, $newData);
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveSMTPForwarding($_accountID, $_forwardingAddress, $_keepLocalCopy)
|
||||||
|
{
|
||||||
|
$ds = $GLOBALS['egw']->common->ldapConnect();
|
||||||
|
$filter = sprintf("(&(uidnumber=%s)(objectclass=posixAccount))",$_accountID);
|
||||||
|
$attributes = array('dn','mailforwardingaddress','deliverymode','objectclass');
|
||||||
|
|
||||||
|
if (!($sri = ldap_search($ds, $GLOBALS['egw_info']['server']['ldap_context'], $filter, $attributes)))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$newData = array();
|
||||||
|
$allValues = ldap_get_entries($ds, $sri);
|
||||||
|
|
||||||
|
$newData['objectclass'] = $allValues[0]['objectclass'];
|
||||||
|
|
||||||
|
unset($newData['objectclass']['count']);
|
||||||
|
|
||||||
|
if(!in_array('qmailUser',$newData['objectclass']) &&
|
||||||
|
!in_array('qmailuser',$newData['objectclass']))
|
||||||
|
{
|
||||||
|
$newData['objectclass'][] = 'qmailuser';
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!empty($_forwardingAddress))
|
||||||
|
{
|
||||||
|
if(is_array($allValues[0]['mailforwardingaddress']))
|
||||||
|
{
|
||||||
|
$newData['mailforwardingaddress'] = $allValues[0]['mailforwardingaddress'];
|
||||||
|
unset($newData['mailforwardingaddress']['count']);
|
||||||
|
}
|
||||||
|
$newData['mailforwardingaddress'][0] = $_forwardingAddress;
|
||||||
|
$newData['deliverymode'] = ($_keepLocalCopy == 'yes'? array() : 'forwardOnly');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$newData['mailforwardingaddress'] = array();
|
||||||
|
$newData['deliverymode'] = array();
|
||||||
|
}
|
||||||
|
|
||||||
|
return ldap_modify ($ds, $allValues[0]['dn'], $newData);
|
||||||
|
}
|
||||||
|
}
|
93
emailadmin/inc/class.smtpplesk.inc.php
Normal file
93
emailadmin/inc/class.smtpplesk.inc.php
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
<?php
|
||||||
|
/***************************************************************************\
|
||||||
|
* EGroupWare - EMailAdmin SMTP via Plesk *
|
||||||
|
* http://www.egroupware.org *
|
||||||
|
* Written and (c) 2006 by RalfBecker-AT-outdoor-training.de *
|
||||||
|
* ------------------------------------------------------------------------- *
|
||||||
|
* emailadmin plugin for plesk: *
|
||||||
|
* - tested with Plesk7.5 under Linux, but should work with other plesk *
|
||||||
|
* versions and Windows too as it uses plesks cli (command line interface) *
|
||||||
|
* - this plugin ONLY works if you have root access to the webserver !!! *
|
||||||
|
* - configuration instructions are in the class.pleskimap.inc.php *
|
||||||
|
* => as with the "LDAP, Postfix & Cyrus" plugin the plesk one creates mail *
|
||||||
|
* users and manages passwords, aliases, forwards and quota from within *
|
||||||
|
* eGroupWare - no need to additionally visit the plesk interface anymore *
|
||||||
|
* ------------------------------------------------------------------------- *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms of the GNU General Public License as published by the *
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at your *
|
||||||
|
* option) any later version. *
|
||||||
|
\***************************************************************************/
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
include_once(EGW_SERVER_ROOT."/emailadmin/inc/class.defaultsmtp.inc.php");
|
||||||
|
include_once(EGW_SERVER_ROOT."/emailadmin/inc/class.pleskimap.inc.php");
|
||||||
|
|
||||||
|
class smtpplesk extends defaultsmtp
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var string/boolean $error string with last error-message or false
|
||||||
|
*/
|
||||||
|
var $error = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* call plesk's mail command line interface
|
||||||
|
*
|
||||||
|
* The actual code is in the pleskimap class, to not double it.
|
||||||
|
*
|
||||||
|
* @param string $action 'info', 'create', 'update' or 'remove'
|
||||||
|
* @param string/int $account account_lid or numerical account_id
|
||||||
|
* @param string $password=null string with password or null to not change
|
||||||
|
* @param array $aliases=null array with aliases or null to not change the aliases
|
||||||
|
* @param string/boolean $forward=null email address to forward, false to not forward or null to not change
|
||||||
|
* @param boolean $keepLocalCopy=null if forwarding keep a local copy or not, null = dont change
|
||||||
|
* @param int $quota_kb=null mailbox quota in kb
|
||||||
|
* @return boolean/array array with returned values or false otherwise, error-message in $this->error
|
||||||
|
*/
|
||||||
|
function plesk_mail($action,$account,$password=null,$aliases=null,$forward=null,$keepLocalCopy=null,$quota_kb=null)
|
||||||
|
{
|
||||||
|
static $plesk;
|
||||||
|
if (!is_object($plesk))
|
||||||
|
{
|
||||||
|
$plesk = new pleskimap(null);
|
||||||
|
$this->error =& $plesk->error;
|
||||||
|
}
|
||||||
|
return $plesk->plesk_mail($action,$account,$password,$aliases,$forward,$keepLocalCopy,$quota_kb);
|
||||||
|
}
|
||||||
|
|
||||||
|
function addAccount($hookValues)
|
||||||
|
{
|
||||||
|
// account is added via pleskimap::addAccount();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the email address of the current user
|
||||||
|
*
|
||||||
|
* @param string/int $accountName account-id or -lis (name)
|
||||||
|
* @return array of arrays with keys name, address and type={default|alternate}
|
||||||
|
*/
|
||||||
|
function getAccountEmailAddress()
|
||||||
|
{
|
||||||
|
//echo "<p>smtpplesk::getAccountEmailAddress()</p>\n";
|
||||||
|
|
||||||
|
return array(array(
|
||||||
|
'name' => $GLOBALS['egw_info']['user']['fullname'],
|
||||||
|
'address' => $GLOBALS['egw_info']['user']['email'],
|
||||||
|
'type' => 'default'
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save SMTP forwarding address
|
||||||
|
*
|
||||||
|
* @param int $accountID user-id
|
||||||
|
* @param string $forwardingAddress email to forward to
|
||||||
|
* @param string $keepLocalCopy 'yes' or something else
|
||||||
|
*/
|
||||||
|
function saveSMTPForwarding($accountID, $forwardingAddress, $keepLocalCopy)
|
||||||
|
{
|
||||||
|
//echo "<p>smtpplesk::saveSMTPForwarding('$accountID','$forwardingAddress','$keepLocalCopy')</p>\n";
|
||||||
|
|
||||||
|
return $this->plesk_mail('update',$accountID,null,null,array($forwardingAddress),$keepLocalCopy == 'yes');
|
||||||
|
}
|
||||||
|
}
|
207
emailadmin/inc/class.uiuserdata.inc.php
Normal file
207
emailadmin/inc/class.uiuserdata.inc.php
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
<?php
|
||||||
|
/***************************************************************************\
|
||||||
|
* eGroupWare *
|
||||||
|
* http://www.egroupware.org *
|
||||||
|
* http://www.linux-at-work.de *
|
||||||
|
* Written by : Lars Kneschke [lkneschke@linux-at-work.de] *
|
||||||
|
* ------------------------------------------------- *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms of the GNU General Public License as published by the *
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at your *
|
||||||
|
* option) any later version. *
|
||||||
|
\***************************************************************************/
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
class uiuserdata
|
||||||
|
{
|
||||||
|
|
||||||
|
var $public_functions = array
|
||||||
|
(
|
||||||
|
'editUserData' => True,
|
||||||
|
'saveUserData' => True
|
||||||
|
);
|
||||||
|
|
||||||
|
function uiuserdata()
|
||||||
|
{
|
||||||
|
$this->t =& CreateObject('phpgwapi.Template',EGW_APP_TPL);
|
||||||
|
$this->boemailadmin = new emailadmin_bo();
|
||||||
|
}
|
||||||
|
|
||||||
|
function display_app_header()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw']->js->validate_file('jscode','editUserdata','emailadmin');
|
||||||
|
$GLOBALS['egw_info']['flags']['include_xajax'] = True;
|
||||||
|
|
||||||
|
$GLOBALS['egw']->common->egw_header();
|
||||||
|
echo parse_navbar();
|
||||||
|
}
|
||||||
|
|
||||||
|
function editUserData($_useCache='0')
|
||||||
|
{
|
||||||
|
$accountID = $_GET['account_id'];
|
||||||
|
$GLOBALS['account_id'] = $accountID;
|
||||||
|
|
||||||
|
$this->display_app_header();
|
||||||
|
|
||||||
|
$this->translate();
|
||||||
|
|
||||||
|
$this->t->set_file(array("editUserData" => "edituserdata.tpl"));
|
||||||
|
$this->t->set_block('editUserData','form','form');
|
||||||
|
$this->t->set_block('editUserData','link_row','link_row');
|
||||||
|
$this->t->set_var("th_bg",$GLOBALS['egw_info']["theme"]["th_bg"]);
|
||||||
|
$this->t->set_var("tr_color1",$GLOBALS['egw_info']["theme"]["row_on"]);
|
||||||
|
$this->t->set_var("tr_color2",$GLOBALS['egw_info']["theme"]["row_off"]);
|
||||||
|
|
||||||
|
$this->t->set_var("lang_email_config",lang("edit email settings"));
|
||||||
|
$this->t->set_var("lang_emailAddress",lang("email address"));
|
||||||
|
$this->t->set_var("lang_emailaccount_active",lang("email account active"));
|
||||||
|
$this->t->set_var("lang_mailAlternateAddress",lang("alternate email address"));
|
||||||
|
$this->t->set_var("lang_mailRoutingAddress",lang("forward email's to"));
|
||||||
|
$this->t->set_var("lang_forward_also_to",lang("forward also to"));
|
||||||
|
$this->t->set_var("lang_button",lang("save"));
|
||||||
|
$this->t->set_var("lang_deliver_extern",lang("deliver extern"));
|
||||||
|
$this->t->set_var("lang_deliver_extern",lang("deliver extern"));
|
||||||
|
$this->t->set_var("lang_edit_email_settings",lang("edit email settings"));
|
||||||
|
$this->t->set_var("lang_ready",lang("Done"));
|
||||||
|
$this->t->set_var("link_back",$GLOBALS['egw']->link('/admin/accounts.php'));
|
||||||
|
|
||||||
|
$linkData = array
|
||||||
|
(
|
||||||
|
'menuaction' => 'emailadmin.uiuserdata.saveUserData',
|
||||||
|
'account_id' => $accountID
|
||||||
|
);
|
||||||
|
$this->t->set_var("form_action", $GLOBALS['egw']->link('/index.php',$linkData));
|
||||||
|
|
||||||
|
$this->t->set_var('url_image_add',$GLOBALS['egw']->common->image('phpgwapi','new'));
|
||||||
|
$this->t->set_var('url_image_edit',$GLOBALS['egw']->common->image('phpgwapi','edit'));
|
||||||
|
$this->t->set_var('url_image_delete',$GLOBALS['egw']->common->image('phpgwapi','delete'));
|
||||||
|
|
||||||
|
// only when we show a existing user
|
||||||
|
if($userData = $this->boemailadmin->getUserData($accountID)) {
|
||||||
|
$addresses = array();
|
||||||
|
foreach((array)$userData['mailAlternateAddress'] as $data) {
|
||||||
|
$addresses[$data] = $data;
|
||||||
|
}
|
||||||
|
$this->t->set_var('selectbox_mailAlternateAddress', html::select(
|
||||||
|
'mailAlternateAddress',
|
||||||
|
'',
|
||||||
|
$addresses,
|
||||||
|
true,
|
||||||
|
"style='width: 100%;' id='mailAlternateAddress'",
|
||||||
|
5)
|
||||||
|
);
|
||||||
|
|
||||||
|
$addresses = array();
|
||||||
|
foreach((array)$userData['mailForwardingAddress'] as $data) {
|
||||||
|
$addresses[$data] = $data;
|
||||||
|
}
|
||||||
|
$this->t->set_var('selectbox_mailRoutingAddress', html::select(
|
||||||
|
'mailForwardingAddress',
|
||||||
|
'',
|
||||||
|
$addresses,
|
||||||
|
true,
|
||||||
|
"style='width: 100%;' id='mailRoutingAddress'",
|
||||||
|
5)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->t->set_var("quotaLimit",$userData["quotaLimit"]);
|
||||||
|
|
||||||
|
$this->t->set_var("mailLocalAddress",$userData["mailLocalAddress"]);
|
||||||
|
$this->t->set_var("mailAlternateAddress",'');
|
||||||
|
$this->t->set_var("mailRoutingAddress",'');
|
||||||
|
$this->t->set_var("selected_".$userData["qmailDotMode"],'selected');
|
||||||
|
$this->t->set_var("deliveryProgramPath",$userData["deliveryProgramPath"]);
|
||||||
|
|
||||||
|
$this->t->set_var("uid",rawurlencode($_accountData["dn"]));
|
||||||
|
if ($userData["accountStatus"] == "active")
|
||||||
|
$this->t->set_var("account_checked","checked");
|
||||||
|
if ($userData["deliveryMode"] == "forwardOnly")
|
||||||
|
$this->t->set_var("forwardOnly_checked","checked");
|
||||||
|
if ($_accountData["deliverExtern"] == "active")
|
||||||
|
$this->t->set_var("deliver_checked","checked");
|
||||||
|
} else {
|
||||||
|
$this->t->set_var("mailLocalAddress",'');
|
||||||
|
$this->t->set_var("mailAlternateAddress",'');
|
||||||
|
$this->t->set_var("mailRoutingAddress",'');
|
||||||
|
$this->t->set_var("options_mailAlternateAddress",lang('no alternate email address'));
|
||||||
|
$this->t->set_var("options_mailRoutingAddress",lang('no forwarding email address'));
|
||||||
|
$this->t->set_var("account_checked",'');
|
||||||
|
$this->t->set_var("forwardOnly_checked",'');
|
||||||
|
|
||||||
|
$this->t->set_var('selectbox_mailAlternateAddress', html::select(
|
||||||
|
'mailAlternateAddress',
|
||||||
|
'',
|
||||||
|
array(),
|
||||||
|
true,
|
||||||
|
"style='width: 100%;' id='mailAlternateAddress'",
|
||||||
|
5)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->t->set_var('selectbox_mailRoutingAddress', html::select(
|
||||||
|
'mailForwardingAddress',
|
||||||
|
'',
|
||||||
|
array(),
|
||||||
|
true,
|
||||||
|
"style='width: 100%;' id='mailRoutingAddress'",
|
||||||
|
5)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->t->set_var('quotaLimit','');
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the menu on the left, if needed
|
||||||
|
$menuClass =& CreateObject('admin.uimenuclass');
|
||||||
|
$this->t->set_var('rows',$menuClass->createHTMLCode('edit_user'));
|
||||||
|
|
||||||
|
$this->t->pparse("out","form");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveUserData()
|
||||||
|
{
|
||||||
|
if($_POST["accountStatus"] == "on") {
|
||||||
|
$accountStatus = "active";
|
||||||
|
}
|
||||||
|
|
||||||
|
if($_POST["forwardOnly"] == "on") {
|
||||||
|
$deliveryMode = "forwardOnly";
|
||||||
|
}
|
||||||
|
|
||||||
|
$formData = array (
|
||||||
|
'mailLocalAddress' => $_POST["mailLocalAddress"],
|
||||||
|
'mailAlternateAddress' => $_POST["mailAlternateAddress"],
|
||||||
|
'mailForwardingAddress' => $_POST["mailForwardingAddress"],
|
||||||
|
'quotaLimit' => $_POST["quotaLimit"],
|
||||||
|
'qmailDotMode' => $_POST["qmailDotMode"],
|
||||||
|
'deliveryProgramPath' => $_POST["deliveryProgramPath"],
|
||||||
|
'accountStatus' => $accountStatus,
|
||||||
|
'deliveryMode' => $deliveryMode
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->boemailadmin->saveUserData($_GET['account_id'], $formData);
|
||||||
|
|
||||||
|
// read date fresh from ldap storage
|
||||||
|
$this->editUserData();
|
||||||
|
}
|
||||||
|
|
||||||
|
function translate()
|
||||||
|
{
|
||||||
|
$this->t->set_var('th_bg',$GLOBALS['egw_info']['theme']['th_bg']);
|
||||||
|
|
||||||
|
$this->t->set_var('lang_add',lang('add'));
|
||||||
|
$this->t->set_var('lang_done',lang('Done'));
|
||||||
|
$this->t->set_var('lang_remove',lang('remove'));
|
||||||
|
$this->t->set_var('lang_remove',lang('remove'));
|
||||||
|
$this->t->set_var('lang_advanced_options',lang('advanced options'));
|
||||||
|
$this->t->set_var('lang_qmaildotmode',lang('qmaildotmode'));
|
||||||
|
$this->t->set_var('lang_default',lang('default'));
|
||||||
|
$this->t->set_var('lang_quota_settings',lang('quota settings'));
|
||||||
|
$this->t->set_var('lang_qoutainmbyte',lang('qouta size in MByte'));
|
||||||
|
$this->t->set_var('lang_inmbyte',lang('in MByte'));
|
||||||
|
$this->t->set_var('lang_0forunlimited',lang('leave empty for no quota'));
|
||||||
|
$this->t->set_var('lang_forward_only',lang('forward only'));
|
||||||
|
$this->t->set_var('lang_enter_new_address',lang('Add new email address:'));
|
||||||
|
$this->t->set_var('lang_update_current_address',lang('Update current email address:'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
26
emailadmin/index.php
Normal file
26
emailadmin/index.php
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
/**************************************************************************\
|
||||||
|
* EGroupWare - EMailAdmin *
|
||||||
|
* http://www.egroupware.org *
|
||||||
|
* Written by Lars Kneschke [lkneschke@egroupware.org] *
|
||||||
|
* ----------------------------------------------- *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms of the GNU General Public License as published by the *
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at your *
|
||||||
|
* option) any later version. *
|
||||||
|
\**************************************************************************/
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
$_GET['menuaction'] = 'emailadmin.emailadmin_ui.listProfiles';
|
||||||
|
|
||||||
|
$GLOBALS['egw_info'] = array(
|
||||||
|
'flags' => array(
|
||||||
|
'currentapp' => 'emailadmin',
|
||||||
|
'noheader' => True,
|
||||||
|
'nonavbar' => True,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
include('../header.inc.php');
|
||||||
|
|
||||||
|
execmethod('emailadmin.emailadmin_ui.listProfiles');
|
||||||
|
?>
|
42
emailadmin/js/jscode/editProfile.js
Normal file
42
emailadmin/js/jscode/editProfile.js
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
var tab = new Tabs(5,'activetab','inactivetab','tab','tabcontent','','','tabpage');
|
||||||
|
var smtp = new Tabs(5,'activetab','inactivetab','smtp','smtpcontent','smtpselector','','');
|
||||||
|
var imap = new Tabs(6,'activetab','inactivetab','imap','imapcontent','imapselector','','');
|
||||||
|
|
||||||
|
function initAll() {
|
||||||
|
tab.init();
|
||||||
|
smtp.init();
|
||||||
|
imap.init();
|
||||||
|
var imapType = document.getElementsByName("imapsettings[imapType]")[0];
|
||||||
|
var v=imapType.value; imap.display(imapType.value); imapType.value=v;
|
||||||
|
onchange_imapsettings(v, 'imapLoginType');
|
||||||
|
}
|
||||||
|
|
||||||
|
function ea_setIMAPDefaults(_imapType) {
|
||||||
|
var currentInput = document.getElementsByName("imapsettings[" + _imapType + "][imapPort]")[0];
|
||||||
|
onchange_imapsettings(_imapType, 'imapLoginType');
|
||||||
|
if(_imapType > 1) {
|
||||||
|
// imap
|
||||||
|
if(currentInput.value == '110') {
|
||||||
|
currentInput.value = '143';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// pop3
|
||||||
|
if(currentInput.value == '143') {
|
||||||
|
currentInput.value = '110';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function onchange_imapsettings(_imapType,_varname) {
|
||||||
|
var currentAuthType = document.getElementsByName("imapsettings[" + _imapType + "][" + _varname + "]")[0];
|
||||||
|
var imapuser = document.getElementsByName("imapsettings[" + _imapType + "][imapAuthUsername]")[0];
|
||||||
|
var imappw = document.getElementsByName("imapsettings[" + _imapType + "][imapAuthPassword]")[0];
|
||||||
|
|
||||||
|
if (currentAuthType.value == "admin") {
|
||||||
|
imapuser.disabled = false;
|
||||||
|
imappw.disabled = false;
|
||||||
|
} else {
|
||||||
|
imapuser.disabled=true;
|
||||||
|
imappw.disabled=true;
|
||||||
|
}
|
||||||
|
}
|
59
emailadmin/js/jscode/editUserdata.js
Normal file
59
emailadmin/js/jscode/editUserdata.js
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
function addRow(_selectBoxName, _prompt) {
|
||||||
|
result = prompt(_prompt, '');
|
||||||
|
|
||||||
|
if((result == '') || (result == null)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var newOption = new Option(result, result);
|
||||||
|
|
||||||
|
selectBox = document.getElementById(_selectBoxName);
|
||||||
|
var length = selectBox.length;
|
||||||
|
|
||||||
|
selectBox.options[length] = newOption;
|
||||||
|
selectBox.selectedIndex = length;
|
||||||
|
}
|
||||||
|
|
||||||
|
function editRow(_selectBoxName, _prompt) {
|
||||||
|
selectBox = document.getElementById(_selectBoxName);
|
||||||
|
|
||||||
|
selectedItem = selectBox.selectedIndex;
|
||||||
|
|
||||||
|
if(selectedItem != null && selectedItem != -1) {
|
||||||
|
value = selectBox.options[selectedItem].text;
|
||||||
|
result = prompt(_prompt, value);
|
||||||
|
|
||||||
|
if((result == '') || (result == null)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var newOption = new Option(result, result);
|
||||||
|
|
||||||
|
selectBox.options[selectedItem] = newOption;
|
||||||
|
selectBox.selectedIndex = selectedItem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeRow(_selectBoxName) {
|
||||||
|
selectBox = document.getElementById(_selectBoxName);
|
||||||
|
|
||||||
|
selectedItem = selectBox.selectedIndex;
|
||||||
|
if(selectedItem != null) {
|
||||||
|
selectBox.options[selectedItem] = null;
|
||||||
|
}
|
||||||
|
selectedItem--;
|
||||||
|
if(selectedItem >= 0) {
|
||||||
|
selectBox.selectedIndex = selectedItem;
|
||||||
|
} else if (selectBox.length > 0) {
|
||||||
|
selectBox.selectedIndex = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function selectAllOptions(_selectBoxName) {
|
||||||
|
selectBox = document.getElementById(_selectBoxName);
|
||||||
|
|
||||||
|
for(var i=0;i<selectBox.length;i++) {
|
||||||
|
selectBox[i].selected=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
56
emailadmin/js/jscode/listProfile.js
Normal file
56
emailadmin/js/jscode/listProfile.js
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
function getOrder(tableID) {
|
||||||
|
order = '';
|
||||||
|
|
||||||
|
table = document.getElementById(tableID);
|
||||||
|
inputElements = table.getElementsByTagName('tr');
|
||||||
|
for(i=0; i<inputElements.length; i++)
|
||||||
|
{
|
||||||
|
//alert(inputElements[i].value);
|
||||||
|
if(i>0)
|
||||||
|
order = order + ',';
|
||||||
|
order = order + inputElements[i].id;
|
||||||
|
}
|
||||||
|
|
||||||
|
return order;
|
||||||
|
}
|
||||||
|
|
||||||
|
function moveUp(node) {
|
||||||
|
// get the row node
|
||||||
|
thisRow = node.parentNode.parentNode;
|
||||||
|
if(thisRow.previousSibling)
|
||||||
|
{
|
||||||
|
currentNode = thisRow.previousSibling;
|
||||||
|
while(currentNode.nodeType != 1)
|
||||||
|
{
|
||||||
|
if(!currentNode.previousSibling)
|
||||||
|
return;
|
||||||
|
currentNode = currentNode.previousSibling;
|
||||||
|
}
|
||||||
|
thisRow.parentNode.insertBefore(thisRow,currentNode);
|
||||||
|
|
||||||
|
//getOrder('tabel1');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function moveDown(node) {
|
||||||
|
// get the row node
|
||||||
|
thisRow = node.parentNode.parentNode;
|
||||||
|
if(thisRow.nextSibling)
|
||||||
|
{
|
||||||
|
currentNode = thisRow.nextSibling;
|
||||||
|
while(currentNode.nodeType != 1)
|
||||||
|
{
|
||||||
|
if(!currentNode.nextSibling)
|
||||||
|
return;
|
||||||
|
currentNode = currentNode.nextSibling;
|
||||||
|
}
|
||||||
|
thisRow.parentNode.insertBefore(currentNode,thisRow);
|
||||||
|
|
||||||
|
//getOrder('tabel1');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveOrder()
|
||||||
|
{
|
||||||
|
xajax_doXMLHTTP("emailadmin.ajaxemailadmin.setOrder", getOrder('nextMatchBody'));
|
||||||
|
}
|
68
emailadmin/lang/egw_ca.lang
Normal file
68
emailadmin/lang/egw_ca.lang
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
add profile emailadmin ca Afegir perfil
|
||||||
|
admin dn emailadmin ca dn del administrador
|
||||||
|
admin password emailadmin ca Contrasenya del administrador
|
||||||
|
admin username emailadmin ca Mom d'usuari del administrador
|
||||||
|
advanced options emailadmin ca Opcions avançades
|
||||||
|
alternate email address emailadmin ca Adreça de correu alternativa
|
||||||
|
cyrus imap server emailadmin ca Servidor IMAP Cyrus
|
||||||
|
cyrus imap server administration emailadmin ca Administració del servidor IMAP Cyrus
|
||||||
|
default emailadmin ca predeterminada
|
||||||
|
deliver extern emailadmin ca entrega externa
|
||||||
|
do you really want to delete this profile emailadmin ca Realmente voleu esborrar aquest perfil?
|
||||||
|
domainname emailadmin ca Nom del domini
|
||||||
|
edit email settings emailadmin ca Editar configuració del compte
|
||||||
|
email account active emailadmin ca Compte de correu electrònic actiu
|
||||||
|
email address emailadmin ca Adreça de correu electrònic
|
||||||
|
enable cyrus imap server administration emailadmin ca activar administració del servidor Cyrus IMAP
|
||||||
|
enable sieve emailadmin ca Activar Sieve
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin ca Entreu el domini predeterminat (de usuari@domini)
|
||||||
|
forward also to emailadmin ca Reenviar també a
|
||||||
|
forward email's to emailadmin ca Reenviar correus a
|
||||||
|
forward only emailadmin ca Només reenviar
|
||||||
|
imap admin password admin ca Contrasenya de l'administrador IMAP
|
||||||
|
imap admin user admin ca Usuari administrador IMAP
|
||||||
|
imap c-client version < 2001 emailadmin ca Versió C-Client IMAP < 2001
|
||||||
|
imap server hostname or ip address emailadmin ca Servidor IMAP o adreça IP
|
||||||
|
imap server logintyp emailadmin ca Tipus de sessió del servidor IMAP
|
||||||
|
imap server port emailadmin ca Port del servidor IMAP
|
||||||
|
imap/pop3 server name emailadmin ca Nom del servidor POP/IMAP
|
||||||
|
in mbyte emailadmin ca en MBytes
|
||||||
|
ldap basedn emailadmin ca basedn per a LDAP
|
||||||
|
ldap server emailadmin ca Aervidor LDAP
|
||||||
|
ldap server accounts dn emailadmin ca Comptes DN del servidor LDAP
|
||||||
|
ldap server admin dn emailadmin ca Administrador DN del servidor LDAP
|
||||||
|
ldap server admin password emailadmin ca Contrasenya del administrador del servidor LDAP
|
||||||
|
ldap server hostname or ip address emailadmin ca Nom del servidor LDAP o adreça IP
|
||||||
|
ldap settings emailadmin ca Configuració LDAP
|
||||||
|
leave empty for no quota emailadmin ca Deixar en blanc per a no posar quota
|
||||||
|
mail settings admin ca Configuració del correu
|
||||||
|
name of organisation emailadmin ca Nom de l'organització
|
||||||
|
no alternate email address emailadmin ca sense adreça de correu alternativa
|
||||||
|
no forwarding email address emailadmin ca sense adreça de correu per a reenviar
|
||||||
|
pop3 server hostname or ip address emailadmin ca Nom del servidor POP3 o adreça IP
|
||||||
|
pop3 server port emailadmin ca Port del servidor POP3
|
||||||
|
postfix with ldap emailadmin ca Postfix amb LDAP
|
||||||
|
profile list emailadmin ca Llista de perfils
|
||||||
|
profile name emailadmin ca Nom del perfil
|
||||||
|
qmaildotmode emailadmin ca Modus de punt de qmail
|
||||||
|
qouta size in mbyte emailadmin ca Mida de la quota en MBytes
|
||||||
|
quota settings emailadmin ca Configuració de les quotas
|
||||||
|
remove emailadmin ca Esborrar
|
||||||
|
select type of imap/pop3 server emailadmin ca Seleccioneu el tipus de servidor IMAP/POP3
|
||||||
|
select type of smtp server emailadmin ca Seleccioneu el tipus de servidor SMTP
|
||||||
|
sieve server hostname or ip address emailadmin ca Nom del servidor Sieve o adreça IP
|
||||||
|
sieve server port emailadmin ca Port del servidor Sieve
|
||||||
|
sieve settings emailadmin ca Configuració de Sieve
|
||||||
|
smtp server name emailadmin ca Nom del servidor SMTP
|
||||||
|
smtp-server hostname or ip address emailadmin ca Nom del servidor SMTP o adreça IP
|
||||||
|
smtp-server port emailadmin ca Port del servidor SMTP
|
||||||
|
standard emailadmin ca Estàndar
|
||||||
|
standard imap server emailadmin ca Servidor IMAP estàndar
|
||||||
|
standard pop3 server emailadmin ca Servidor POP3 estàndar
|
||||||
|
standard smtp-server emailadmin ca Servidor SMTP estàndar
|
||||||
|
use ldap defaults emailadmin ca Usar les opcions predeterminades per LDAP
|
||||||
|
use smtp auth emailadmin ca Usar identificació SMTP
|
||||||
|
use tls authentication emailadmin ca Usar identificació TLS
|
||||||
|
use tls encryption emailadmin ca Usar xifrat TLS
|
||||||
|
users can define their own emailaccounts emailadmin ca Els usuaris poden definir els seus propis comptes de correu
|
||||||
|
virtual mail manager emailadmin ca Gestor de correu virtual
|
143
emailadmin/lang/egw_cs.lang
Normal file
143
emailadmin/lang/egw_cs.lang
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
account '%1' not found !!! emailadmin cs Účet '%1' nebyl nalezen !!!
|
||||||
|
active templates emailadmin cs Aktivní šablony
|
||||||
|
add new email address: emailadmin cs Přidat novou e-mailovou adresu:
|
||||||
|
add profile emailadmin cs Přidat profil
|
||||||
|
admin dn emailadmin cs Dn (distiguished name) administrátora
|
||||||
|
admin password emailadmin cs Heslo administrátora
|
||||||
|
admin username emailadmin cs Uživatelské jméno administrátora
|
||||||
|
advanced options emailadmin cs Rozšířené volby
|
||||||
|
alternate email address emailadmin cs Alternativní e-mailová adresa
|
||||||
|
any application emailadmin cs Kterákoli aplikace
|
||||||
|
any group emailadmin cs Kterákoli skupina
|
||||||
|
any user emailadmin cs Kterýkoli uživatel
|
||||||
|
back to admin/grouplist emailadmin cs Zpět na Administrátor/Skupiny uživatelů
|
||||||
|
back to admin/userlist emailadmin cs Zpět na Administrátor/Uživatelské účty
|
||||||
|
bad login name or password. emailadmin cs Chybné přihlašovací jméno nebo heslo.
|
||||||
|
bad or malformed request. server responded: %s emailadmin cs Chybný nebo špatně fomulovaný požadavek. Server odpověděl: %s
|
||||||
|
bad request: %s emailadmin cs Chybný požadavek: %s
|
||||||
|
can be used by application emailadmin cs Může být použit aplikací
|
||||||
|
can be used by group emailadmin cs Může být použit skupinou
|
||||||
|
can be used by user emailadmin cs Může být použit uživatelem
|
||||||
|
connection dropped by imap server. emailadmin cs Připojení ukončeno IMAP serverem.
|
||||||
|
could not complete request. reason given: %s emailadmin cs Nemohu dokončit požadavek. Důvod: %s
|
||||||
|
could not open secure connection to the imap server. %s : %s. emailadmin cs Nemohu otevřít zabezpečené připojení na IMAP server. %s : %s.
|
||||||
|
cram-md5 or digest-md5 requires the auth_sasl package to be installed. emailadmin cs CRAM-MD5 nebo DIGEST-MD5 vyžadují nainstalovaný balíček Auth_SASL.
|
||||||
|
cyrus imap server emailadmin cs Cyrus IMAP Server
|
||||||
|
cyrus imap server administration emailadmin cs Administrace Cyrus IMAP serveru
|
||||||
|
default emailadmin cs výchozí
|
||||||
|
deliver extern emailadmin cs doručit externě
|
||||||
|
do not validate certificate emailadmin cs Neověřovat certifikát
|
||||||
|
do you really want to delete this profile emailadmin cs Opravdu chcete smazat tento profil
|
||||||
|
do you really want to reset the filter for the profile listing emailadmin cs Opravdu chcete vyresetovat filtr pro seznam profilů
|
||||||
|
domainname emailadmin cs Doménové jméno
|
||||||
|
edit email settings emailadmin cs Editovat nastavení e-mailu
|
||||||
|
email account active emailadmin cs E-mailový účet aktivní
|
||||||
|
email address emailadmin cs E-mailová adresa
|
||||||
|
email settings common cs Nastavení e-mailu
|
||||||
|
emailadmin emailadmin cs Administrátor pošty
|
||||||
|
emailadmin: group assigned profile common cs Administrátor pošty: profil přidělený skupině
|
||||||
|
emailadmin: user assigned profile common cs Administrátor pošty: profil přidělený uživateli
|
||||||
|
enable cyrus imap server administration emailadmin cs Povolit administraci Cyrus IMAP serveru
|
||||||
|
enable sieve emailadmin cs Povolit Sieve
|
||||||
|
encrypted connection emailadmin cs Šifrované připojení
|
||||||
|
encryption settings emailadmin cs Nastavení šifrování
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin cs Zadejte Vaši výchozí poštovní doménu (z: uživatel@doména)
|
||||||
|
error connecting to imap server. %s : %s. emailadmin cs Chyba spojení na IMAP server. %s : %s.
|
||||||
|
error connecting to imap server: [%s] %s. emailadmin cs Chyba spojení na IMAP server: [%s] %s.
|
||||||
|
filtered by account emailadmin cs filtrováno podle účtu
|
||||||
|
filtered by group emailadmin cs filtrováno podle skupiny
|
||||||
|
forward also to emailadmin cs Přeposlat také na
|
||||||
|
forward email's to emailadmin cs Přeposílat e-maily na
|
||||||
|
forward only emailadmin cs Jen přeposlat
|
||||||
|
global options emailadmin cs Globální volby
|
||||||
|
if using ssl or tls, you must have the php openssl extension loaded. emailadmin cs Pokud chcete používat SSL nebo TLS, musíte mít nahráno openssl rozšíření PHP.
|
||||||
|
imap admin password admin cs Heslo IMAP administrátora
|
||||||
|
imap admin user admin cs Uživatelský účet IMAP administrátora
|
||||||
|
imap c-client version < 2001 emailadmin cs IMAP C-klient verze < 2001
|
||||||
|
imap server closed the connection. emailadmin cs IMAP server ukončil spojení.
|
||||||
|
imap server closed the connection. server responded: %s emailadmin cs IMAP server ukončil spojení. Server odpověděl: %s
|
||||||
|
imap server hostname or ip address emailadmin cs DNS jméno nebo IP adresa IMAP serveru
|
||||||
|
imap server logintyp emailadmin cs Typ přihlášení na IMAP server
|
||||||
|
imap server name emailadmin cs Název IMAP serveru
|
||||||
|
imap server port emailadmin cs Port IMAP serveru
|
||||||
|
imap/pop3 server name emailadmin cs Název IMAP/POP3 serveru
|
||||||
|
in mbyte emailadmin cs v MBytech
|
||||||
|
inactive emailadmin cs neaktivní
|
||||||
|
ldap basedn emailadmin cs LDAP basedn
|
||||||
|
ldap server emailadmin cs LDAP server
|
||||||
|
ldap server accounts dn emailadmin cs DN (distinguished name) účtů na LDAP serveru
|
||||||
|
ldap server admin dn emailadmin cs DN (distinguished name) administrátora LDAP serveru
|
||||||
|
ldap server admin password emailadmin cs Heslo administrátora LDAP serveru
|
||||||
|
ldap server hostname or ip address emailadmin cs DNS jméno nebo IP adresa LDAP serveru
|
||||||
|
ldap settings emailadmin cs LDAP nastavení
|
||||||
|
leave empty for no quota emailadmin cs ponechte prázdné, nechcete-li kvótu
|
||||||
|
mail settings admin cs Nastavení pošty
|
||||||
|
manage stationery templates emailadmin cs Spravovat šabony dopisů
|
||||||
|
name of organisation emailadmin cs Název organizace
|
||||||
|
no alternate email address emailadmin cs bez alternativní e-mailové adresy
|
||||||
|
no encryption emailadmin cs bez šifrování
|
||||||
|
no forwarding email address emailadmin cs bez e-mailové adresy pro přeposílání
|
||||||
|
no message returned. emailadmin cs Žádná zpráva se nevrátila.
|
||||||
|
no supported imap authentication method could be found. emailadmin cs Nebyla nalezena žádná podporovaná metoda IMAP autentikace.
|
||||||
|
order emailadmin cs Pořadí
|
||||||
|
organisation emailadmin cs Organizace
|
||||||
|
plesk can't rename users --> request ignored emailadmin cs Plesk nemůže přejmenovávat uživatele --> požadavek ignorován
|
||||||
|
plesk imap server (courier) emailadmin cs Plesk IMAP server (Courier)
|
||||||
|
plesk mail script '%1' not found !!! emailadmin cs Plesk poštovní skript '%1' nebyl nalezen !!!
|
||||||
|
plesk requires passwords to have at least 5 characters and not contain the account-name --> password not set!!! emailadmin cs Plesk vyžaduje, aby měla hesla nejméně 5 znaků a neobsahovala název účtu --> heslo nebylo nastaveno!!!
|
||||||
|
plesk smtp-server (qmail) emailadmin cs Plesk SMTP server (Qmail)
|
||||||
|
pop3 server hostname or ip address emailadmin cs DNS jméno nebo IP adresa POP3 serveru
|
||||||
|
pop3 server port emailadmin cs Port POP3 serveru
|
||||||
|
postfix with ldap emailadmin cs Postfix s LDAP
|
||||||
|
profile access rights emailadmin cs přístupová práva profilu
|
||||||
|
profile is active emailadmin cs Profil je aktivní
|
||||||
|
profile list emailadmin cs Seznam profilů
|
||||||
|
profile name emailadmin cs Název profilu
|
||||||
|
qmaildotmode emailadmin cs Tečkový režim Qmail
|
||||||
|
qouta size in mbyte emailadmin cs Velikost kvóty v MBytech
|
||||||
|
quota settings emailadmin cs Nastavení kvóty
|
||||||
|
remove emailadmin cs Odstranit
|
||||||
|
reset filter emailadmin cs vyresetovat filtr
|
||||||
|
select type of imap server emailadmin cs Vyberte typ IMAP serveru
|
||||||
|
select type of imap/pop3 server emailadmin cs Vyberte typ IMAP/POP3 serveru
|
||||||
|
select type of smtp server emailadmin cs Vyberte typ SMTP serveru
|
||||||
|
send using this email-address emailadmin cs Odeslat s touto e-mailovou adresou
|
||||||
|
server settings emailadmin cs Nastavení serveru
|
||||||
|
sieve server hostname or ip address emailadmin cs DNS jméno nebo IP adresa Sieve serveru
|
||||||
|
sieve server port emailadmin cs Port Sieve serveru
|
||||||
|
sieve settings emailadmin cs Nastavení sieve
|
||||||
|
smtp authentication emailadmin cs SMTP autentikace
|
||||||
|
smtp options emailadmin cs Volby SMTP
|
||||||
|
smtp server name emailadmin cs Jméno SMTP serveru
|
||||||
|
smtp settings emailadmin cs Nastavení SMTP
|
||||||
|
smtp-server hostname or ip address emailadmin cs DNS jméno nebo IP adresa SMTP serveru
|
||||||
|
smtp-server port emailadmin cs Port SMTP serveru
|
||||||
|
standard emailadmin cs Standardní
|
||||||
|
standard imap server emailadmin cs Standardní IMAP server
|
||||||
|
standard pop3 server emailadmin cs Standardní POP3 server
|
||||||
|
standard smtp-server emailadmin cs Standardní SMTP server
|
||||||
|
stationery emailadmin cs Dopisní papíry
|
||||||
|
the imap server does not appear to support the authentication method selected. please contact your system administrator. emailadmin cs Vypadá to, že IMAP server nepodporuje vybranou autentikační metodu. Zkontaktujte prosím Vašeho systémového administrátora.
|
||||||
|
this php has no imap support compiled in!! emailadmin cs Toto PHP nemá zkompilovanou podporu IMAPu.
|
||||||
|
to use a tls connection, you must be running a version of php 5.1.0 or higher. emailadmin cs Pro použití TLS připojení musíte provozovat verzi PHP 5.1.0 nebo vyšší.
|
||||||
|
unexpected response from server to authenticate command. emailadmin cs Neočekávaná odpověď serveru na příkaz AUTHENTICATE.
|
||||||
|
unexpected response from server to digest-md5 response. emailadmin cs Neočekávaná odpověď serveru na Digest-MD5 odpověď.
|
||||||
|
unexpected response from server to login command. emailadmin cs Neočekávaná odpověď serveru na příkaz LOGIN.
|
||||||
|
unknown imap response from the server. server responded: %s emailadmin cs Neznámá IMAP odpověď server. Odpověděl: %s
|
||||||
|
unsupported action '%1' !!! emailadmin cs Nepodporovaná akce '%1' !!!
|
||||||
|
update current email address: emailadmin cs Aktualizovat současnou e-mailovou adresu:
|
||||||
|
use ldap defaults emailadmin cs Použít výchozí hodnoty LDAP
|
||||||
|
use predefined username and password defined below emailadmin cs Použít předdefinované uživatelské jméno a heslo uvedené níže
|
||||||
|
use smtp auth emailadmin cs Použít SMTP autentikaci
|
||||||
|
use tls authentication emailadmin cs Použít TLS autentikaci
|
||||||
|
use tls encryption emailadmin cs Použít TLS šifrování
|
||||||
|
user can edit forwarding address emailadmin cs Uživatel smí editovat adresu pro přeposílání
|
||||||
|
username (standard) emailadmin cs uživatelské jméno (standardní)
|
||||||
|
username/password defined by admin emailadmin cs Uživatelské jméno/Heslo definované administrátorem
|
||||||
|
username@domainname (virtual mail manager) emailadmin cs uživatelskéjméno@doména (Virtuální správce pošty)
|
||||||
|
users can define their own emailaccounts emailadmin cs Uživatelé smí definovat vlastní poštovní účty
|
||||||
|
users can define their own identities emailadmin cs Uživatelé smí definovat své vlastní identity
|
||||||
|
users can define their own signatures emailadmin cs Uživatelé smí definovat své vlastní podpisy
|
||||||
|
users can utilize these stationery templates emailadmin cs Uživatelé mohou využívat tyto šablony dopisů
|
||||||
|
vaction messages with start- and end-date require an admin account to be set! emailadmin cs Automatické odpovědi v nepřítomnosti, které mají určeno počáteční a koncové datum, vyžadují nastavení administrátorského účtu.
|
||||||
|
virtual mail manager emailadmin cs Virtuální správce pošty
|
69
emailadmin/lang/egw_da.lang
Normal file
69
emailadmin/lang/egw_da.lang
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
add profile emailadmin da Tilføj Profil
|
||||||
|
admin dn emailadmin da admin dn
|
||||||
|
admin password emailadmin da admin adgangskode
|
||||||
|
admin passwort emailadmin da admin adgangskode
|
||||||
|
admin username emailadmin da admin brugernavn
|
||||||
|
advanced options emailadmin da avanceret indstillinger
|
||||||
|
alternate email address emailadmin da alternativ e-mail adresse
|
||||||
|
cyrus imap server emailadmin da Cyrus IMAP Server
|
||||||
|
cyrus imap server administration emailadmin da Cyrus IMAP server administration
|
||||||
|
default emailadmin da standart
|
||||||
|
deliver extern emailadmin da lever ekstern
|
||||||
|
do you really want to delete this profile emailadmin da Vil du virkelig slette denne profil
|
||||||
|
domainname emailadmin da domæne navn
|
||||||
|
edit email settings emailadmin da redigere e-mail indstillingerne
|
||||||
|
email account active emailadmin da e-mail konto aktiv
|
||||||
|
email address emailadmin da e-mail adresse
|
||||||
|
enable cyrus imap server administration emailadmin da aktivere Cyrus IMAP server administration
|
||||||
|
enable sieve emailadmin da aktiver Sieve
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin da Indtast dit standart post domæne (fra: bruger@domæne)
|
||||||
|
forward also to emailadmin da videresend også til
|
||||||
|
forward email's to emailadmin da videresend e-mails til
|
||||||
|
forward only emailadmin da videresend kun
|
||||||
|
imap admin password admin da IMAP admin adgangskode
|
||||||
|
imap admin user admin da IMAP admin bruger
|
||||||
|
imap c-client version < 2001 emailadmin da IMAP C-Klient Version < 2001
|
||||||
|
imap server hostname or ip address emailadmin da IMAP server domænenavn eller IP adresse
|
||||||
|
imap server logintyp emailadmin da IMAP server login type
|
||||||
|
imap server port emailadmin da IMAP server port
|
||||||
|
imap/pop3 server name emailadmin da IMAP/POP3 server navn
|
||||||
|
in mbyte emailadmin da i Megabytes
|
||||||
|
ldap basedn emailadmin da LDAP basedn
|
||||||
|
ldap server emailadmin da LDAP server
|
||||||
|
ldap server accounts dn emailadmin da LDAP server konto DN
|
||||||
|
ldap server admin dn emailadmin da LDAP server admin DN
|
||||||
|
ldap server admin password emailadmin da LDAP server admin adgangskode
|
||||||
|
ldap server hostname or ip address emailadmin da LDAP server domænenavn eller IP adresse
|
||||||
|
ldap settings emailadmin da LDAP indstillinger
|
||||||
|
leave empty for no quota emailadmin da efterlad tom hvis ingen citat
|
||||||
|
mail settings admin da Post indstillinger
|
||||||
|
name of organisation emailadmin da Navn på organisation
|
||||||
|
no alternate email address emailadmin da ingen alternativ e-mail adresse
|
||||||
|
no forwarding email address emailadmin da ingen viderestillet e-mail adresse
|
||||||
|
pop3 server hostname or ip address emailadmin da POP3 server domænenavn eller IP adresse
|
||||||
|
pop3 server port emailadmin da POP server port
|
||||||
|
postfix with ldap emailadmin da Postfix med LDAP
|
||||||
|
profile list emailadmin da Profil liste
|
||||||
|
profile name emailadmin da Profil navn
|
||||||
|
qmaildotmode emailadmin da qmaildotmode
|
||||||
|
qouta size in mbyte emailadmin da quota størrelse i Megabytes
|
||||||
|
quota settings emailadmin da quota indstillinger
|
||||||
|
remove emailadmin da fjern
|
||||||
|
select type of imap/pop3 server emailadmin da Vælg type IMAP/POP3 server
|
||||||
|
select type of smtp server emailadmin da Vælg time POP3 server
|
||||||
|
sieve server hostname or ip address emailadmin da Sieve server domænenavn eller IP adresse
|
||||||
|
sieve server port emailadmin da Sieve server port
|
||||||
|
sieve settings emailadmin da Sieve indstillinger
|
||||||
|
smtp server name emailadmin da SMTP server navn
|
||||||
|
smtp-server hostname or ip address emailadmin da SMTP server domænenavn eller IP adresse
|
||||||
|
smtp-server port emailadmin da SMTP server port
|
||||||
|
standard emailadmin da Standart
|
||||||
|
standard imap server emailadmin da Standart IMAP server
|
||||||
|
standard pop3 server emailadmin da Standart POP3 server
|
||||||
|
standard smtp-server emailadmin da Standart SMTP server
|
||||||
|
use ldap defaults emailadmin da brug LDAP standarter
|
||||||
|
use smtp auth emailadmin da Brug SMTP autorisation
|
||||||
|
use tls authentication emailadmin da Brug TLS autorisation
|
||||||
|
use tls encryption emailadmin da Brug TLS kryptering
|
||||||
|
users can define their own emailaccounts emailadmin da Brugere kan selv definere deres egne e-mail kontoer
|
||||||
|
virtual mail manager emailadmin da Virtuel post håndtering
|
143
emailadmin/lang/egw_de.lang
Normal file
143
emailadmin/lang/egw_de.lang
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
account '%1' not found !!! emailadmin de Benutzerkonto '%1' nicht gefunden !!!
|
||||||
|
active templates emailadmin de Aktive Vorlagen
|
||||||
|
add new email address: emailadmin de Neue EMailadresse hinzufügen
|
||||||
|
add profile emailadmin de Profil hinzufügen
|
||||||
|
admin dn emailadmin de Admin DN
|
||||||
|
admin password emailadmin de Admin Passwort
|
||||||
|
admin username emailadmin de Administrator Benutzername
|
||||||
|
advanced options emailadmin de erweiterte Einstellungen
|
||||||
|
alternate email address emailadmin de zusätzliche E-Mail-Adressen
|
||||||
|
any application emailadmin de jede Anwendung
|
||||||
|
any group emailadmin de jede Gruppe
|
||||||
|
any user emailadmin de jeder Benutzer
|
||||||
|
back to admin/grouplist emailadmin de Zurück zu: Admin/Gruppenverwaltung
|
||||||
|
back to admin/userlist emailadmin de Zurück zu: Admin/Benutzerverwaltung
|
||||||
|
bad login name or password. emailadmin de Falscher Benutzername oder Passwort.
|
||||||
|
bad or malformed request. server responded: %s emailadmin de Falsche oder ungültige Anfrage. Server antwortet: %s
|
||||||
|
bad request: %s emailadmin de Falsche Anfrage: %s
|
||||||
|
can be used by application emailadmin de Kann von folgender Anwendung verwendet werden
|
||||||
|
can be used by group emailadmin de Kann von folgender Gruppe verwendet werden
|
||||||
|
can be used by user emailadmin de Kann von folgendem Benutzer verwendet werden
|
||||||
|
connection dropped by imap server. emailadmin de Verbindung von IMAP-Server beendet.
|
||||||
|
could not complete request. reason given: %s emailadmin de Konnte Anfrage nicht beenden. Grund: %s
|
||||||
|
could not open secure connection to the imap server. %s : %s. emailadmin de Konnte keine sichere Verbindung zum IMAP Server aufbauen. %s: %s.
|
||||||
|
cram-md5 or digest-md5 requires the auth_sasl package to be installed. emailadmin de CRAM-MD5 oder DIGEST-MD5 erforder das das Auth_SASL Packet instaliert ist.
|
||||||
|
cyrus imap server emailadmin de Cyrus IMAP-Server
|
||||||
|
cyrus imap server administration emailadmin de Cyrus IMAP-Server Administration
|
||||||
|
default emailadmin de Vorgabe
|
||||||
|
deliver extern emailadmin de extern ausliefern
|
||||||
|
do not validate certificate emailadmin de Zertifikat nicht überprüfen
|
||||||
|
do you really want to delete this profile emailadmin de Wollen Sie dieses Profil wirklich löschen
|
||||||
|
do you really want to reset the filter for the profile listing emailadmin de Möchten Sie den Filter für die Profilliste wirklich zurücksetzen?
|
||||||
|
domainname emailadmin de Domänenname
|
||||||
|
edit email settings emailadmin de E-Mail-Einstellungen
|
||||||
|
email account active emailadmin de E-Mail-Konto aktiv
|
||||||
|
email address emailadmin de E-Mail-Adresse
|
||||||
|
email settings common de E-Mail-Konto
|
||||||
|
emailadmin emailadmin de EMailAdmin
|
||||||
|
emailadmin: group assigned profile common de eMailAdmin: Vordefiniertes Gruppenprofil
|
||||||
|
emailadmin: user assigned profile common de eMailAdmin: Vordefiniertes Benutzerprofil
|
||||||
|
enable cyrus imap server administration emailadmin de Cyrus IMAP-Server Administration aktivieren
|
||||||
|
enable sieve emailadmin de Sieve aktivieren
|
||||||
|
encrypted connection emailadmin de verschlüsselte Verbindung
|
||||||
|
encryption settings emailadmin de Verschlüsselungseinstellungen
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin de Standard E-Mail-Domain (Von: benutzer@domain)
|
||||||
|
error connecting to imap server. %s : %s. emailadmin de Fehler beim Verbinden mit dem IMAP Server. %s : %s.
|
||||||
|
error connecting to imap server: [%s] %s. emailadmin de Fehler beim Verbinden mit dem IMAP Server. [%s] %s.
|
||||||
|
filtered by account emailadmin de Suche nach Benutzerprofilen
|
||||||
|
filtered by group emailadmin de Suche nach Gruppenprofilen
|
||||||
|
forward also to emailadmin de zusätzlich weiterleiten
|
||||||
|
forward email's to emailadmin de E-Mails weiterleiten an
|
||||||
|
forward only emailadmin de nur weiterleiten
|
||||||
|
global options emailadmin de Globale Optionen
|
||||||
|
if using ssl or tls, you must have the php openssl extension loaded. emailadmin de Wenn Sie SSL oder TLS benutzern, müssen Sie die openssl PHP Erweiterung geladen haben.
|
||||||
|
imap admin password admin de IMAP Administrator Passwort
|
||||||
|
imap admin user admin de IMAP Administrator Benutzer
|
||||||
|
imap c-client version < 2001 emailadmin de IMAP C-Client Version < 2001
|
||||||
|
imap server closed the connection. emailadmin de IMAP Server hat die Verbindung beendet.
|
||||||
|
imap server closed the connection. server responded: %s emailadmin de IMAP Server hat die Verbindung beendet. Server Antwort: %s
|
||||||
|
imap server hostname or ip address emailadmin de IMAP-Server Hostname oder IP-Adresse
|
||||||
|
imap server logintyp emailadmin de IMAP-Server Loginverfahren
|
||||||
|
imap server name emailadmin de IMAP-Server Name
|
||||||
|
imap server port emailadmin de IMAP-Server Port
|
||||||
|
imap/pop3 server name emailadmin de IMAP/POP3-Server Name
|
||||||
|
in mbyte emailadmin de in MByte
|
||||||
|
inactive emailadmin de inaktiv
|
||||||
|
ldap basedn emailadmin de LDAP BaseDN
|
||||||
|
ldap server emailadmin de LDAP Server
|
||||||
|
ldap server accounts dn emailadmin de LDAP-Server Benutzerkonten DN
|
||||||
|
ldap server admin dn emailadmin de LDAP-Server Administrator DN
|
||||||
|
ldap server admin password emailadmin de LDAP-Server Administrator-Passwort
|
||||||
|
ldap server hostname or ip address emailadmin de LDAP-Server Hostname oder IP-Adresse
|
||||||
|
ldap settings emailadmin de LDAP-Einstellungen
|
||||||
|
leave empty for no quota emailadmin de leer lassen um Quota zu deaktivieren
|
||||||
|
mail settings admin de E-Mail-Einstellungen
|
||||||
|
manage stationery templates emailadmin de Briefpapiervorlagen verwalten
|
||||||
|
name of organisation emailadmin de Name der Organisation
|
||||||
|
no alternate email address emailadmin de keine zusätzlichen E-Mail-Adressen
|
||||||
|
no encryption emailadmin de keine Verschlüsselung
|
||||||
|
no forwarding email address emailadmin de keine Weiterleitungsadresse definiert
|
||||||
|
no message returned. emailadmin de Keine Nachricht zurückgeliefert.
|
||||||
|
no supported imap authentication method could be found. emailadmin de Keine unterstützte IMAP-Authentifizierungsmethode gefunden.
|
||||||
|
order emailadmin de Reihenfolge
|
||||||
|
organisation emailadmin de Organisation
|
||||||
|
plesk can't rename users --> request ignored emailadmin de Plesk kann keine Benutzer umbenennen --> Anforderung ignoriert
|
||||||
|
plesk imap server (courier) emailadmin de Plesk IMAP Server (Courier)
|
||||||
|
plesk mail script '%1' not found !!! emailadmin de Plesk Mail Skript '%1' nicht gefunden !!!
|
||||||
|
plesk requires passwords to have at least 5 characters and not contain the account-name --> password not set!!! emailadmin de Plesk verlangt, dass Passworte mindestens 5 Zeichen lang sind und nicht den Benutzernamen enthalten --> Passwort nicht gesetzt!!!
|
||||||
|
plesk smtp-server (qmail) emailadmin de Plesk SMTP-Server (Qmail)
|
||||||
|
pop3 server hostname or ip address emailadmin de POP3-Server Hostname oder IP-Adresse
|
||||||
|
pop3 server port emailadmin de POP3-Server Port
|
||||||
|
postfix with ldap emailadmin de Postfix mit LDAP
|
||||||
|
profile access rights emailadmin de Profilzugriffsrechte
|
||||||
|
profile is active emailadmin de Profil ist aktiv
|
||||||
|
profile list emailadmin de Profilliste
|
||||||
|
profile name emailadmin de Profilname
|
||||||
|
qmaildotmode emailadmin de qmaildotmode
|
||||||
|
qouta size in mbyte emailadmin de Quota Größe in MByte
|
||||||
|
quota settings emailadmin de Quota Einstellungen
|
||||||
|
remove emailadmin de Entfernen
|
||||||
|
reset filter emailadmin de Filter zurücksetzen
|
||||||
|
select type of imap server emailadmin de IMAP-Server Typ auswählen
|
||||||
|
select type of imap/pop3 server emailadmin de IMAP/POP3-Server Typ auswählen
|
||||||
|
select type of smtp server emailadmin de SMTP-Server Typ auswählen
|
||||||
|
send using this email-address emailadmin de zum Versenden wird diese E-Mail Adresse benutzt
|
||||||
|
server settings emailadmin de Server-Einstellungen
|
||||||
|
sieve server hostname or ip address emailadmin de Sieve-Server Hostname oder IP-Adresse
|
||||||
|
sieve server port emailadmin de Sieve-Server Port
|
||||||
|
sieve settings emailadmin de Sieve Einstellungen
|
||||||
|
smtp authentication emailadmin de SMTP Anmeldung
|
||||||
|
smtp options emailadmin de SMTP Optionen
|
||||||
|
smtp server name emailadmin de SMTP-Server Name
|
||||||
|
smtp settings emailadmin de SMTP Einstellungen
|
||||||
|
smtp-server hostname or ip address emailadmin de SMTP-Server Hostname oder IP-Adresse
|
||||||
|
smtp-server port emailadmin de SMTP-Server Port
|
||||||
|
standard emailadmin de Vorgabe
|
||||||
|
standard imap server emailadmin de Standard IMAP-Server
|
||||||
|
standard pop3 server emailadmin de Standard POP3-Server
|
||||||
|
standard smtp-server emailadmin de Standard SMTP-Server
|
||||||
|
stationery emailadmin de Briefpapier
|
||||||
|
the imap server does not appear to support the authentication method selected. please contact your system administrator. emailadmin de Der IMAP Server scheint die eingestellte Authentifizierungsmethode nicht zu unterstützen. Bitte fragen Sie ihren Systemadministrator.
|
||||||
|
this php has no imap support compiled in!! emailadmin de Dieses PHP hat keine IMAP Unterstützung!!!
|
||||||
|
to use a tls connection, you must be running a version of php 5.1.0 or higher. emailadmin de Um eine TLS Verbindung zu verwenden, benötigen Sie PHP 5.1.0 oder neuer.
|
||||||
|
unexpected response from server to authenticate command. emailadmin de Unerwartete Antwort des Servers auf das AUTHENTICATE Komando.
|
||||||
|
unexpected response from server to digest-md5 response. emailadmin de Unerwartete Antwort des Servers auf die Digest-MD5 Antwort.
|
||||||
|
unexpected response from server to login command. emailadmin de Unerwartete Antwort des Servers auf das LOGIN Komando.
|
||||||
|
unknown imap response from the server. server responded: %s emailadmin de Unbekannte IMAP Antwort vom Server. Server antwortet: %s
|
||||||
|
unsupported action '%1' !!! emailadmin de Nicht unterstützte Aktion '%1' !!!
|
||||||
|
update current email address: emailadmin de Aktualisiere aktuelle EMailadresse
|
||||||
|
use ldap defaults emailadmin de LDAP Standardeinstellungen benutzen
|
||||||
|
use predefined username and password defined below emailadmin de Verwende den unten vordefinierten Benutzernamen und Passwort
|
||||||
|
use smtp auth emailadmin de SMTP Auth benutzen
|
||||||
|
use tls authentication emailadmin de TLS Authentifizierung benutzen
|
||||||
|
use tls encryption emailadmin de TLS Verschlüsselung benutzen
|
||||||
|
user can edit forwarding address emailadmin de Anwender können ihre Weiterleitungsadresse bearbeiten
|
||||||
|
username (standard) emailadmin de Benutzername (Standard)
|
||||||
|
username/password defined by admin emailadmin de Benutzername/Passwort vordefiniert
|
||||||
|
username@domainname (virtual mail manager) emailadmin de Benutzername@Domänenname (Virtual MAIL ManaGeR)
|
||||||
|
users can define their own emailaccounts emailadmin de Anwender können ihre eigenen Konten definieren
|
||||||
|
users can define their own identities emailadmin de Anwender können ihre eigenen Identitäten definieren
|
||||||
|
users can define their own signatures emailadmin de Anwender können ihre eigenen Signaturen definieren
|
||||||
|
users can utilize these stationery templates emailadmin de Benutzer können diese Briefpapiervorlagen verwenden
|
||||||
|
vaction messages with start- and end-date require an admin account to be set! emailadmin de Urlaubsbenachrichtigungen mit Start- und Endedatum benötigen einen gesetzten Administrator Benutzer!
|
||||||
|
virtual mail manager emailadmin de Virtual MAIL ManaGeR
|
143
emailadmin/lang/egw_en.lang
Executable file
143
emailadmin/lang/egw_en.lang
Executable file
@ -0,0 +1,143 @@
|
|||||||
|
account '%1' not found !!! emailadmin en Account '%1' not found !!!
|
||||||
|
active templates emailadmin en Active templates
|
||||||
|
add new email address: emailadmin en Add new email address:
|
||||||
|
add profile emailadmin en Add Profile
|
||||||
|
admin dn emailadmin en Admin dn
|
||||||
|
admin password emailadmin en Admin password
|
||||||
|
admin username emailadmin en Admin username
|
||||||
|
advanced options emailadmin en Advanced options
|
||||||
|
alternate email address emailadmin en Alternate email address
|
||||||
|
any application emailadmin en Any application
|
||||||
|
any group emailadmin en Any group
|
||||||
|
any user emailadmin en any user
|
||||||
|
back to admin/grouplist emailadmin en Back to Admin/Grouplist
|
||||||
|
back to admin/userlist emailadmin en Back to Admin/Userlist
|
||||||
|
bad login name or password. emailadmin en Bad login name or password.
|
||||||
|
bad or malformed request. server responded: %s emailadmin en Bad or malformed request. Server Responded: %s
|
||||||
|
bad request: %s emailadmin en Bad request: %s
|
||||||
|
can be used by application emailadmin en Can be used by application
|
||||||
|
can be used by group emailadmin en Can be used by group
|
||||||
|
can be used by user emailadmin en can be used by user
|
||||||
|
connection dropped by imap server. emailadmin en Connection dropped by IMAP server.
|
||||||
|
could not complete request. reason given: %s emailadmin en Could not complete request. Reason Given: %s
|
||||||
|
could not open secure connection to the imap server. %s : %s. emailadmin en Could not open secure connection to the IMAP server. %s : %s.
|
||||||
|
cram-md5 or digest-md5 requires the auth_sasl package to be installed. emailadmin en CRAM-MD5 or DIGEST-MD5 requires the Auth_SASL package to be installed.
|
||||||
|
cyrus imap server emailadmin en Cyrus IMAP Server
|
||||||
|
cyrus imap server administration emailadmin en Cyrus IMAP server administration
|
||||||
|
default emailadmin en default
|
||||||
|
deliver extern emailadmin en deliver extern
|
||||||
|
do not validate certificate emailadmin en do not validate certificate
|
||||||
|
do you really want to delete this profile emailadmin en Do you really want to delete this Profile
|
||||||
|
do you really want to reset the filter for the profile listing emailadmin en Do you really want to reset the filter for the Profile listing
|
||||||
|
domainname emailadmin en Domainname
|
||||||
|
edit email settings emailadmin en Edit email settings
|
||||||
|
email account active emailadmin en Email account active
|
||||||
|
email address emailadmin en Email address
|
||||||
|
email settings common en Email settings
|
||||||
|
emailadmin emailadmin en EMailAdmin
|
||||||
|
emailadmin: group assigned profile common en eMailAdmin: Group assigned Profile
|
||||||
|
emailadmin: user assigned profile common en eMailAdmin: User assigned Profile
|
||||||
|
enable cyrus imap server administration emailadmin en enable Cyrus IMAP server administration
|
||||||
|
enable sieve emailadmin en Enable Sieve
|
||||||
|
encrypted connection emailadmin en encrypted connection
|
||||||
|
encryption settings emailadmin en Encryption settings
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin en Enter your default mail domain (from: user@domain)
|
||||||
|
error connecting to imap server. %s : %s. emailadmin en Error connecting to IMAP server. %s : %s.
|
||||||
|
error connecting to imap server: [%s] %s. emailadmin en Error connecting to IMAP server: [%s] %s.
|
||||||
|
filtered by account emailadmin en filtered by Account
|
||||||
|
filtered by group emailadmin en filtered by Group
|
||||||
|
forward also to emailadmin en Forward also to
|
||||||
|
forward email's to emailadmin en Forward email's to
|
||||||
|
forward only emailadmin en Forward only
|
||||||
|
global options emailadmin en Global options
|
||||||
|
if using ssl or tls, you must have the php openssl extension loaded. emailadmin en If using SSL or TLS, you must have the PHP openssl extension loaded.
|
||||||
|
imap admin password admin en IMAP admin password
|
||||||
|
imap admin user admin en IMAP admin user
|
||||||
|
imap c-client version < 2001 emailadmin en IMAP C-Client Version < 2001
|
||||||
|
imap server closed the connection. emailadmin en IMAP server closed the connection.
|
||||||
|
imap server closed the connection. server responded: %s emailadmin en IMAP Server closed the connection. Server Responded: %s
|
||||||
|
imap server hostname or ip address emailadmin en IMAP server hostname or ip address
|
||||||
|
imap server logintyp emailadmin en IMAP server login type
|
||||||
|
imap server name emailadmin en imap server name
|
||||||
|
imap server port emailadmin en IMAP server port
|
||||||
|
imap/pop3 server name emailadmin en IMAP/POP3 server name
|
||||||
|
in mbyte emailadmin en in MByte
|
||||||
|
inactive emailadmin en inactive
|
||||||
|
ldap basedn emailadmin en LDAP basedn
|
||||||
|
ldap server emailadmin en LDAP server
|
||||||
|
ldap server accounts dn emailadmin en LDAP server accounts DN
|
||||||
|
ldap server admin dn emailadmin en LDAP server admin DN
|
||||||
|
ldap server admin password emailadmin en LDAP server admin password
|
||||||
|
ldap server hostname or ip address emailadmin en LDAP server hostname or ip address
|
||||||
|
ldap settings emailadmin en LDAP settings
|
||||||
|
leave empty for no quota emailadmin en leave empty for no quota
|
||||||
|
mail settings admin en Mail settings
|
||||||
|
manage stationery templates emailadmin en Manage stationery templates
|
||||||
|
name of organisation emailadmin en Name of organization
|
||||||
|
no alternate email address emailadmin en no alternate email address
|
||||||
|
no encryption emailadmin en no encryption
|
||||||
|
no forwarding email address emailadmin en no forwarding email address
|
||||||
|
no message returned. emailadmin en No message returned.
|
||||||
|
no supported imap authentication method could be found. emailadmin en No supported IMAP authentication method could be found.
|
||||||
|
order emailadmin en Order
|
||||||
|
organisation emailadmin en Organisation
|
||||||
|
plesk can't rename users --> request ignored emailadmin en Plesk can't rename users --> request ignored
|
||||||
|
plesk imap server (courier) emailadmin en Plesk IMAP Server (Courier)
|
||||||
|
plesk mail script '%1' not found !!! emailadmin en Plesk mail script '%1' not found !!!
|
||||||
|
plesk requires passwords to have at least 5 characters and not contain the account-name --> password not set!!! emailadmin en Plesk requires passwords to have at least 5 characters and not contain the account-name --> password NOT set!!!
|
||||||
|
plesk smtp-server (qmail) emailadmin en Plesk SMTP-Server (Qmail)
|
||||||
|
pop3 server hostname or ip address emailadmin en POP3 server hostname or ip address
|
||||||
|
pop3 server port emailadmin en POP3 server port
|
||||||
|
postfix with ldap emailadmin en Postfix with LDAP
|
||||||
|
profile access rights emailadmin en profile access rights
|
||||||
|
profile is active emailadmin en profile is active
|
||||||
|
profile list emailadmin en Profile List
|
||||||
|
profile name emailadmin en Profile Name
|
||||||
|
qmaildotmode emailadmin en qmaildotmode
|
||||||
|
qouta size in mbyte emailadmin en Qouta size in MByte
|
||||||
|
quota settings emailadmin en Quota settings
|
||||||
|
remove emailadmin en Remove
|
||||||
|
reset filter emailadmin en reset filter
|
||||||
|
select type of imap server emailadmin en select type of IMAP server
|
||||||
|
select type of imap/pop3 server emailadmin en Select type of IMAP/POP3 server
|
||||||
|
select type of smtp server emailadmin en Select type of SMTP Server
|
||||||
|
send using this email-address emailadmin en send using this eMail-Address
|
||||||
|
server settings emailadmin en Server settings
|
||||||
|
sieve server hostname or ip address emailadmin en Sieve server hostname or ip address
|
||||||
|
sieve server port emailadmin en Sieve server port
|
||||||
|
sieve settings emailadmin en Sieve settings
|
||||||
|
smtp authentication emailadmin en SMTP authentication
|
||||||
|
smtp options emailadmin en SMTP options
|
||||||
|
smtp server name emailadmin en SMTP server name
|
||||||
|
smtp settings emailadmin en SMTP settings
|
||||||
|
smtp-server hostname or ip address emailadmin en SMTP server hostname or IP address
|
||||||
|
smtp-server port emailadmin en SMTP server port
|
||||||
|
standard emailadmin en Standard
|
||||||
|
standard imap server emailadmin en Standard IMAP server
|
||||||
|
standard pop3 server emailadmin en Standard POP3 server
|
||||||
|
standard smtp-server emailadmin en Standard SMTP server
|
||||||
|
stationery emailadmin en Stationery
|
||||||
|
the imap server does not appear to support the authentication method selected. please contact your system administrator. emailadmin en The IMAP server does not appear to support the authentication method selected. Please contact your system administrator.
|
||||||
|
this php has no imap support compiled in!! emailadmin en This PHP has no IMAP support compiled in!!
|
||||||
|
to use a tls connection, you must be running a version of php 5.1.0 or higher. emailadmin en To use a TLS connection, you must be running a version of PHP 5.1.0 or higher.
|
||||||
|
unexpected response from server to authenticate command. emailadmin en Unexpected response from server to AUTHENTICATE command.
|
||||||
|
unexpected response from server to digest-md5 response. emailadmin en Unexpected response from server to Digest-MD5 response.
|
||||||
|
unexpected response from server to login command. emailadmin en Unexpected response from server to LOGIN command.
|
||||||
|
unknown imap response from the server. server responded: %s emailadmin en Unknown IMAP response from the server. Server Responded: %s
|
||||||
|
unsupported action '%1' !!! emailadmin en Unsupported action '%1' !!!
|
||||||
|
update current email address: emailadmin en Update current email address:
|
||||||
|
use ldap defaults emailadmin en Use LDAP defaults
|
||||||
|
use predefined username and password defined below emailadmin en Use predefined username and password defined below
|
||||||
|
use smtp auth emailadmin en Use SMTP auth
|
||||||
|
use tls authentication emailadmin en Use TLS authentication
|
||||||
|
use tls encryption emailadmin en Use TLS encryption
|
||||||
|
user can edit forwarding address emailadmin en User can edit forwarding address
|
||||||
|
username (standard) emailadmin en username (standard)
|
||||||
|
username/password defined by admin emailadmin en Username/Password defined by admin
|
||||||
|
username@domainname (virtual mail manager) emailadmin en username@domainname (Virtual MAIL ManaGeR)
|
||||||
|
users can define their own emailaccounts emailadmin en Users can define their own email accounts
|
||||||
|
users can define their own identities emailadmin en users can define their own identities
|
||||||
|
users can define their own signatures emailadmin en users can define their own signatures
|
||||||
|
users can utilize these stationery templates emailadmin en Users can utilize these stationery templates
|
||||||
|
vaction messages with start- and end-date require an admin account to be set! emailadmin en Vacation messages with start- and end-date require an admin account to be set!
|
||||||
|
virtual mail manager emailadmin en Virtual MAIL ManaGeR
|
143
emailadmin/lang/egw_es-es.lang
Normal file
143
emailadmin/lang/egw_es-es.lang
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
account '%1' not found !!! emailadmin es-es ¡No se encontró la cuenta '%1'!
|
||||||
|
active templates emailadmin es-es Plantillas activas
|
||||||
|
add new email address: emailadmin es-es Añadir nueva dirección de correo
|
||||||
|
add profile emailadmin es-es Añadir perfil
|
||||||
|
admin dn emailadmin es-es dn del administrador
|
||||||
|
admin password emailadmin es-es contraseña del administrador
|
||||||
|
admin username emailadmin es-es usuario del administrador
|
||||||
|
advanced options emailadmin es-es opciones avanzadas
|
||||||
|
alternate email address emailadmin es-es dirección de correo alternativa
|
||||||
|
any application emailadmin es-es cualquier aplicación
|
||||||
|
any group emailadmin es-es cualquier grupo
|
||||||
|
any user emailadmin es-es cualquier usuario
|
||||||
|
back to admin/grouplist emailadmin es-es Volver a Administración/Lista de grupos
|
||||||
|
back to admin/userlist emailadmin es-es Volver a Administración/Lista de usuarios
|
||||||
|
bad login name or password. emailadmin es-es Nombre de usuario o contraseña incorrectos
|
||||||
|
bad or malformed request. server responded: %s emailadmin es-es Petición errónea o mal formado. El servidor respondió: %s
|
||||||
|
bad request: %s emailadmin es-es Petición errónea: %s
|
||||||
|
can be used by application emailadmin es-es puede usarse por la aplicación
|
||||||
|
can be used by group emailadmin es-es puede usarse por el grupo
|
||||||
|
can be used by user emailadmin es-es puede usarse por el usuario
|
||||||
|
connection dropped by imap server. emailadmin es-es El servidor IMAP ha interrumpido la conexión
|
||||||
|
could not complete request. reason given: %s emailadmin es-es No se pudo completar la solicitud. Motivo: %s
|
||||||
|
could not open secure connection to the imap server. %s : %s. emailadmin es-es No se pudo abrir una conexión segura con el servidor IMAP. %s: %s.
|
||||||
|
cram-md5 or digest-md5 requires the auth_sasl package to be installed. emailadmin es-es CRAM-MD5 o DIGEST-MD5 necesitan el paquete Auth_SASL para estar instalado.
|
||||||
|
cyrus imap server emailadmin es-es Servidor IMAP Cyrus
|
||||||
|
cyrus imap server administration emailadmin es-es Administración del servidor IMAP Cyrus
|
||||||
|
default emailadmin es-es predeterminada
|
||||||
|
deliver extern emailadmin es-es entrega externa
|
||||||
|
do not validate certificate emailadmin es-es No validar el certificado
|
||||||
|
do you really want to delete this profile emailadmin es-es ¿Realmente desea borrar este perfil?
|
||||||
|
do you really want to reset the filter for the profile listing emailadmin es-es Realmente desea restablecer el filtro para la lista de perfiles
|
||||||
|
domainname emailadmin es-es nombre del dominio
|
||||||
|
edit email settings emailadmin es-es editar configuración de la cuenta
|
||||||
|
email account active emailadmin es-es cuenta de correo electrónico activa
|
||||||
|
email address emailadmin es-es dirección de correo electrónico
|
||||||
|
email settings common es-es Configuración del correo electrónico
|
||||||
|
emailadmin emailadmin es-es Administración del correo electrónico
|
||||||
|
emailadmin: group assigned profile common es-es eMailAdmin: perfil asignado al grupo
|
||||||
|
emailadmin: user assigned profile common es-es eMailAdmin: perfil asignado al usuario
|
||||||
|
enable cyrus imap server administration emailadmin es-es activar administración del servidor Cyrus IMAP
|
||||||
|
enable sieve emailadmin es-es activar Sieve
|
||||||
|
encrypted connection emailadmin es-es conexión cifrada
|
||||||
|
encryption settings emailadmin es-es configuración del cifrado
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin es-es introduzca el dominio predeterminado (de usuario@dominio)
|
||||||
|
error connecting to imap server. %s : %s. emailadmin es-es Error al conectar con el servidor IMAP. %s: %s.
|
||||||
|
error connecting to imap server: [%s] %s. emailadmin es-es Error al conectar con el servidor IMAP: [%s] %s.
|
||||||
|
filtered by account emailadmin es-es filtrado por cuenta
|
||||||
|
filtered by group emailadmin es-es filtrado por grupo
|
||||||
|
forward also to emailadmin es-es reenviar también a
|
||||||
|
forward email's to emailadmin es-es reenviar correos a
|
||||||
|
forward only emailadmin es-es sólo reenviar
|
||||||
|
global options emailadmin es-es opciones globales
|
||||||
|
if using ssl or tls, you must have the php openssl extension loaded. emailadmin es-es Si usa SSL o TLS, debe tener cargada la extensión openssl de PHP.
|
||||||
|
imap admin password admin es-es contraseña del administrador IMAP
|
||||||
|
imap admin user admin es-es usuario administrador IMAP
|
||||||
|
imap c-client version < 2001 emailadmin es-es Versión C-Cliente IMAP < 2001
|
||||||
|
imap server closed the connection. emailadmin es-es El servidor IMAP cerró la conexión.
|
||||||
|
imap server closed the connection. server responded: %s emailadmin es-es El servidor IMAP cerró la conexión. El servidor respondió: %s
|
||||||
|
imap server hostname or ip address emailadmin es-es Servidor IMAP o dirección IP
|
||||||
|
imap server logintyp emailadmin es-es Tipo de sesión del servidor IMAP
|
||||||
|
imap server name emailadmin es-es Nombre del servidor IMAP
|
||||||
|
imap server port emailadmin es-es Puerto del servidor IMAP
|
||||||
|
imap/pop3 server name emailadmin es-es Nombre del servidor POP/IMAP
|
||||||
|
in mbyte emailadmin es-es en MBytes
|
||||||
|
inactive emailadmin es-es inactivo
|
||||||
|
ldap basedn emailadmin es-es basedn para LDAP
|
||||||
|
ldap server emailadmin es-es servidor LDAP
|
||||||
|
ldap server accounts dn emailadmin es-es DN para cuentas del servidor LDAP
|
||||||
|
ldap server admin dn emailadmin es-es DN del administrador del servidor LDAP
|
||||||
|
ldap server admin password emailadmin es-es contraseña del administrador del servidor LDAP
|
||||||
|
ldap server hostname or ip address emailadmin es-es Nombre del servidor LDAP o dirección IP
|
||||||
|
ldap settings emailadmin es-es Configuración LDAP
|
||||||
|
leave empty for no quota emailadmin es-es Dejar en blanco para no poner cuota
|
||||||
|
mail settings admin es-es Configuración del correo.
|
||||||
|
manage stationery templates emailadmin es-es Gestionar plantillas preimpresas
|
||||||
|
name of organisation emailadmin es-es Nombre de la organización
|
||||||
|
no alternate email address emailadmin es-es Sin dirección de correo alternativa
|
||||||
|
no encryption emailadmin es-es Sin cifrar
|
||||||
|
no forwarding email address emailadmin es-es Sin dirección de correo para reenviar
|
||||||
|
no message returned. emailadmin es-es No se devolvió ningún mensaje.
|
||||||
|
no supported imap authentication method could be found. emailadmin es-es No se pudo encontrar ningún método soportado de identificación IMAP.
|
||||||
|
order emailadmin es-es orden
|
||||||
|
organisation emailadmin es-es organización
|
||||||
|
plesk can't rename users --> request ignored emailadmin es-es Plesk no puede renombrar usuarios --> Se ignora la solicitud
|
||||||
|
plesk imap server (courier) emailadmin es-es Servidor IMAP Plesk (Courier)
|
||||||
|
plesk mail script '%1' not found !!! emailadmin es-es ¡No se encontró el script de correo de Plesk '%1'!
|
||||||
|
plesk requires passwords to have at least 5 characters and not contain the account-name --> password not set!!! emailadmin es-es Plesk requiere que las contraseñas tengan al menos 5 caracteres y no contengan el nombre de la cuenta --> NO se establece la contraseña
|
||||||
|
plesk smtp-server (qmail) emailadmin es-es Servidor SMTP de Plesk (Qmail)
|
||||||
|
pop3 server hostname or ip address emailadmin es-es Nombre del servidor POP3 o dirección IP
|
||||||
|
pop3 server port emailadmin es-es Puerto del servidor POP3
|
||||||
|
postfix with ldap emailadmin es-es Postfix con LDAP
|
||||||
|
profile access rights emailadmin es-es Derechos de acceso del perfil
|
||||||
|
profile is active emailadmin es-es el perfil está activo
|
||||||
|
profile list emailadmin es-es Lista de perfiles
|
||||||
|
profile name emailadmin es-es Nombre del perfil
|
||||||
|
qmaildotmode emailadmin es-es Modo de punto de qmail
|
||||||
|
qouta size in mbyte emailadmin es-es Tamaño de la cuota en MBytes
|
||||||
|
quota settings emailadmin es-es Configuración de las cuotas
|
||||||
|
remove emailadmin es-es borrar
|
||||||
|
reset filter emailadmin es-es restablecer filtro
|
||||||
|
select type of imap server emailadmin es-es Seleccione el tipo de servidor IMAP
|
||||||
|
select type of imap/pop3 server emailadmin es-es Seleccione el tipo de servidor IMAP/POP3
|
||||||
|
select type of smtp server emailadmin es-es Seleccione el tipo de servidor SMTP
|
||||||
|
send using this email-address emailadmin es-es enviar usando esta dirección de correo electrónico
|
||||||
|
server settings emailadmin es-es configuración del servidor
|
||||||
|
sieve server hostname or ip address emailadmin es-es Nombre del servidor Sieve o dirección IP
|
||||||
|
sieve server port emailadmin es-es Puerto del servidor Sieve
|
||||||
|
sieve settings emailadmin es-es Configuración de Sieve
|
||||||
|
smtp authentication emailadmin es-es identificación SMTP
|
||||||
|
smtp options emailadmin es-es opciones SMTP
|
||||||
|
smtp server name emailadmin es-es Nombre del servidor SMTP
|
||||||
|
smtp settings emailadmin es-es configuración SMTP
|
||||||
|
smtp-server hostname or ip address emailadmin es-es Nombre del servidor SMTP o dirección IP
|
||||||
|
smtp-server port emailadmin es-es Puerto del servidor SMTP
|
||||||
|
standard emailadmin es-es Estándar
|
||||||
|
standard imap server emailadmin es-es Servidor IMAP estándar
|
||||||
|
standard pop3 server emailadmin es-es Servidor POP3 estándar
|
||||||
|
standard smtp-server emailadmin es-es Servidor SMTP estándar
|
||||||
|
stationery emailadmin es-es material preimpreso
|
||||||
|
the imap server does not appear to support the authentication method selected. please contact your system administrator. emailadmin es-es El servidor IMAP no parece soportar el método de identificación seleccionado. Por favor, póngase en contacto el administrador de su sistema.
|
||||||
|
this php has no imap support compiled in!! emailadmin es-es ¡¡Esta instalación de PHP no tiene soporte IMAP!!
|
||||||
|
to use a tls connection, you must be running a version of php 5.1.0 or higher. emailadmin es-es Para usar una conexión TLS, debe ejecutar una versión de PHP 5.1.0 o superior.
|
||||||
|
unexpected response from server to authenticate command. emailadmin es-es Respuesta inesperada del servidor al comando AUTHENTICATE.
|
||||||
|
unexpected response from server to digest-md5 response. emailadmin es-es Respuesta inesperada del servidor a la respuesta Digest-MD5.
|
||||||
|
unexpected response from server to login command. emailadmin es-es Respuesta inesperada del servidor al comando LOGIN.
|
||||||
|
unknown imap response from the server. server responded: %s emailadmin es-es Respuesta IMAP desconocida del servidor. El servidor respondió: %s
|
||||||
|
unsupported action '%1' !!! emailadmin es-es ¡La acción '%1' no está soportada!
|
||||||
|
update current email address: emailadmin es-es Actualizar la dirección de correo actual:
|
||||||
|
use ldap defaults emailadmin es-es usar las opciones predeterminadas para LDAP
|
||||||
|
use predefined username and password defined below emailadmin es-es Usar el usuario predefinido y las contraseñas definidas debajo
|
||||||
|
use smtp auth emailadmin es-es Usar identificación SMTP
|
||||||
|
use tls authentication emailadmin es-es Usar identificación TLS
|
||||||
|
use tls encryption emailadmin es-es Usar cifrado TLS
|
||||||
|
user can edit forwarding address emailadmin es-es El usuario puede editar la dirección de reenvío
|
||||||
|
username (standard) emailadmin es-es usuario (estándar)
|
||||||
|
username/password defined by admin emailadmin es-es Usuario/contraseña definida por el administrador
|
||||||
|
username@domainname (virtual mail manager) emailadmin es-es usuario@dominio (Gestor de correo virtual)
|
||||||
|
users can define their own emailaccounts emailadmin es-es Los usuarios pueden definir sus propias cuentas de correo
|
||||||
|
users can define their own identities emailadmin es-es Los usuarios pueden definir sus propias identidades
|
||||||
|
users can define their own signatures emailadmin es-es Los usuarios pueden definir sus propias firmas
|
||||||
|
users can utilize these stationery templates emailadmin es-es Los usuarios pueden utilizar estas plantillas preimpresas
|
||||||
|
vaction messages with start- and end-date require an admin account to be set! emailadmin es-es Los mensajes con fecha de inicio y fin requieren establecer una cuenta de administrador
|
||||||
|
virtual mail manager emailadmin es-es Gestor de correo virtual
|
45
emailadmin/lang/egw_et.lang
Executable file
45
emailadmin/lang/egw_et.lang
Executable file
@ -0,0 +1,45 @@
|
|||||||
|
account '%1' not found !!! emailadmin et Kontot '%1' ei leitud !!!
|
||||||
|
add new email address: emailadmin et Lisa uus email aadress
|
||||||
|
add profile emailadmin et Lisa Profiil
|
||||||
|
admin password emailadmin et admin parool
|
||||||
|
admin username emailadmin et admin kasutajanimi
|
||||||
|
alternate email address emailadmin et Alternatiivne email aadress
|
||||||
|
bad login name or password. emailadmin et Vale kasutajanimi või parool
|
||||||
|
cyrus imap server emailadmin et Cyrus IMAP Server
|
||||||
|
cyrus imap server administration emailadmin et Cyrus IMAP server administreerimine
|
||||||
|
default emailadmin et vaikimisi
|
||||||
|
do not validate certificate emailadmin et ära valideeri sertifikaati
|
||||||
|
do you really want to delete this profile emailadmin et Tahad tõesti kustutada seda Profiili
|
||||||
|
domainname emailadmin et Doomeninimi
|
||||||
|
edit email settings emailadmin et muuda emaili setinguid
|
||||||
|
email account active emailadmin et email konto aktiivne
|
||||||
|
email address emailadmin et email aadress
|
||||||
|
email settings common et Email setingud
|
||||||
|
encrypted connection emailadmin et krüpteeritud ühendus
|
||||||
|
encryption settings emailadmin et Krüpteerimise setingud
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin et Sisesta oma vaikimisi mail doomen (kasutaja@doomen)
|
||||||
|
global options emailadmin et Globaalsed omadused
|
||||||
|
imap admin password admin et IMAP admin parool
|
||||||
|
imap admin user admin et IMAP admin kasutaja
|
||||||
|
imap c-client version < 2001 emailadmin et IMAP C-Client Versioon < 2001
|
||||||
|
imap server closed the connection. emailadmin et IMAP server sulges ühenduse.
|
||||||
|
imap server closed the connection. server responded: %s emailadmin et IMAP Server sulges ühenduse. Server Vastas: %s
|
||||||
|
imap server name emailadmin et imap serveri nimi
|
||||||
|
imap server port emailadmin et IMAP serveri port
|
||||||
|
imap/pop3 server name emailadmin et IMAP/POP3 server nimi
|
||||||
|
ldap settings emailadmin et LDAP setingud
|
||||||
|
mail settings admin et Mail setingud
|
||||||
|
no alternate email address emailadmin et pole alternatiivset email aadressi
|
||||||
|
no encryption emailadmin et ilna krüpteeringutta
|
||||||
|
organisation emailadmin et Organisatsioon
|
||||||
|
pop3 server port emailadmin et POP3 serveri port
|
||||||
|
remove emailadmin et eemalda
|
||||||
|
select type of imap server emailadmin et vali IMAP serveri tüüp
|
||||||
|
select type of imap/pop3 server emailadmin et vali IMAP/POP3 serveri tüüp
|
||||||
|
select type of smtp server emailadmin et Vali SMTP serveri tüüp
|
||||||
|
server settings emailadmin et Serveri setingud
|
||||||
|
sieve server port emailadmin et Sieve serveri port
|
||||||
|
sieve settings emailadmin et Sieve setingud
|
||||||
|
smtp server name emailadmin et SMTP serveri nimi
|
||||||
|
smtp settings emailadmin et SMTP setingud
|
||||||
|
smtp-server port emailadmin et SMTP serveri port
|
66
emailadmin/lang/egw_fa.lang
Normal file
66
emailadmin/lang/egw_fa.lang
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
add profile emailadmin fa افزودن مجموعه تنظیمات
|
||||||
|
admin dn emailadmin fa dn مدیر
|
||||||
|
admin password emailadmin fa گذرواژه مدیر
|
||||||
|
admin passwort emailadmin fa گذرواژه مدیر
|
||||||
|
admin username emailadmin fa نام کاربری مدیر
|
||||||
|
advanced options emailadmin fa تنظیمات پیشرفته
|
||||||
|
alternate email address emailadmin fa نشانی پست الکترونیکی دیگر
|
||||||
|
any application emailadmin fa همه کاربردها
|
||||||
|
any group emailadmin fa همه گروهها
|
||||||
|
can be used by application emailadmin fa استفاده شود توسط کاربرد
|
||||||
|
can be used by group emailadmin fa استفاده شود توسط گروه
|
||||||
|
default emailadmin fa پیش فرض
|
||||||
|
deliver extern emailadmin fa حمل بیرونی
|
||||||
|
do you really want to delete this profile emailadmin fa آیا واقعا می خواهید این مجموعه تنظیمات را حذف کنید؟
|
||||||
|
domainname emailadmin fa نام حوزه
|
||||||
|
edit email settings emailadmin fa ویرایش تنظیمات نامه الکترونیکی
|
||||||
|
email account active emailadmin fa حساب نامه الکترونیکی فعال
|
||||||
|
email address emailadmin fa نشانی الکترونیکی
|
||||||
|
emailadmin emailadmin fa مدیر رایانامه
|
||||||
|
enable sieve emailadmin fa فعالسازی Sieve
|
||||||
|
encryption settings emailadmin fa تنظیمات رمز نگاری
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin fa حوزه پیش فرض خود را وارد کنید:(مثلا: fgpars.net)
|
||||||
|
forward also to emailadmin fa همچنین ارسال به
|
||||||
|
forward email's to emailadmin fa ارسال نامه ها به
|
||||||
|
forward only emailadmin fa فقط ارسال به
|
||||||
|
global options emailadmin fa گزینه های عمومی
|
||||||
|
imap admin password admin fa گذرواژه مدیر IMAP
|
||||||
|
imap admin user admin fa کاربر مدیر IMAP
|
||||||
|
imap server hostname or ip address emailadmin fa نام میزبان یا نشانی IP کارگزار IMAP
|
||||||
|
imap server logintyp emailadmin fa نوع ورود کارگزار IMAP
|
||||||
|
imap server port emailadmin fa درگاه کارگزار IMAP
|
||||||
|
imap/pop3 server name emailadmin fa نام کارگزار IMAP/POP3
|
||||||
|
in mbyte emailadmin fa به مگابایت
|
||||||
|
leave empty for no quota emailadmin fa برای بدون سهمیه بودن، خالی بگذارید
|
||||||
|
mail settings admin fa تنظیمات نامه
|
||||||
|
name of organisation emailadmin fa نام سازمان
|
||||||
|
no alternate email address emailadmin fa بدون نشانی نامه الکترونیکی دیگر
|
||||||
|
no forwarding email address emailadmin fa بدون نشانی نامه الکترونیکی ارسال به دیگری
|
||||||
|
order emailadmin fa ترتیب
|
||||||
|
organisation emailadmin fa سازمان
|
||||||
|
pop3 server hostname or ip address emailadmin fa نام میزبان یا نشانی IP کارگزار POP3
|
||||||
|
pop3 server port emailadmin fa درگاه کارگزار POP3
|
||||||
|
profile access rights emailadmin fa حقوق دسترسی مجموعه تنظیمات
|
||||||
|
profile list emailadmin fa لیست مجموعه تنظیمات
|
||||||
|
profile name emailadmin fa نام مجموعه تنظیمات
|
||||||
|
qouta size in mbyte emailadmin fa اندازه سهمیه به مگابایت
|
||||||
|
quota settings emailadmin fa تنظیمات سهمیه
|
||||||
|
remove emailadmin fa حذف
|
||||||
|
select type of imap/pop3 server emailadmin fa نوع کارگزار IMAP/POP3 را انتخاب کنید
|
||||||
|
select type of smtp server emailadmin fa نوع کارگزار SMTP را انتخاب کنید
|
||||||
|
server settings emailadmin fa تنظیمات کارگزار
|
||||||
|
sieve server hostname or ip address emailadmin fa نام میزبان یا نشانی IP کارگزار Sieve
|
||||||
|
sieve server port emailadmin fa درگاه کارگزار Sieve
|
||||||
|
sieve settings emailadmin fa تنظیمات Sieve
|
||||||
|
smtp authentication emailadmin fa تصدیق smtp
|
||||||
|
smtp server name emailadmin fa نام کارگزار SMTP
|
||||||
|
smtp settings emailadmin fa تنظیمات smtp
|
||||||
|
smtp-server hostname or ip address emailadmin fa نشانی IP یا نام میزبان SMTP
|
||||||
|
smtp-server port emailadmin fa درگاه کارگزار SMTP
|
||||||
|
standard emailadmin fa استاندارد
|
||||||
|
standard imap server emailadmin fa کارگزار استاندارد IMAP
|
||||||
|
standard pop3 server emailadmin fa کارگزار استاندارد POP3
|
||||||
|
standard smtp-server emailadmin fa کارگزار استاندارد SMTP
|
||||||
|
use ldap defaults emailadmin fa از پیش فرضهای LDAP استفاده شود
|
||||||
|
use smtp auth emailadmin fa استفاده از تصدیق در SMTP
|
||||||
|
users can define their own emailaccounts emailadmin fa کاربران می توانند حسابهای کاربری را خودشان تعریف کنند
|
117
emailadmin/lang/egw_fi.lang
Normal file
117
emailadmin/lang/egw_fi.lang
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
account '%1' not found !!! emailadmin fi Tiliä '%1' ei löytynyt !!!
|
||||||
|
add new email address: emailadmin fi Lisää uusi sähköpostiosoite
|
||||||
|
add profile emailadmin fi Lisää profiili
|
||||||
|
admin dn emailadmin fi admin dn
|
||||||
|
admin password emailadmin fi admin salasana
|
||||||
|
admin username emailadmin fi admin käyttäjätunnus
|
||||||
|
advanced options emailadmin fi lisäasetukset
|
||||||
|
alternate email address emailadmin fi vaihtoehtoinen sähköpostiosoite
|
||||||
|
any application emailadmin fi Mikä vain sovellus
|
||||||
|
any group emailadmin fi Mikä vain ryhmä
|
||||||
|
bad login name or password. emailadmin fi Väärä käyttäjätunnus tai salasana
|
||||||
|
bad or malformed request. server responded: %s emailadmin fi Väärä tai viallinen pyyntö. Serveri palauttaa: %s
|
||||||
|
bad request: %s emailadmin fi Väärä pyyntö: %s
|
||||||
|
can be used by application emailadmin fi Voidaan käyttää sovelluksessa
|
||||||
|
can be used by group emailadmin fi Voidaan käyttää ryhmällä
|
||||||
|
connection dropped by imap server. emailadmin fi Yhteys IMAP palvelimeen katkesi.
|
||||||
|
could not complete request. reason given: %s emailadmin fi Pyyntöä ei voitu toteuttaa. Syynä oli: %s
|
||||||
|
could not open secure connection to the imap server. %s : %s. emailadmin fi Turvattua yhteyttä IMAP palvelimeen ei voitu avata. %s : %s.
|
||||||
|
cram-md5 or digest-md5 requires the auth_sasl package to be installed. emailadmin fi CRAM-MD5 tai DIGEST-MD5 käyttö edellyttää Auth_SASL paketin asentamista.
|
||||||
|
cyrus imap server emailadmin fi Cyrus IMAP -palvelin
|
||||||
|
cyrus imap server administration emailadmin fi Cyrus IMAP -palvelimen hallinta
|
||||||
|
default emailadmin fi oletus
|
||||||
|
deliver extern emailadmin fi deliver extern
|
||||||
|
do you really want to delete this profile emailadmin fi Haluatko varmasti poistaa tämän profiilin
|
||||||
|
domainname emailadmin fi verkkotunnus
|
||||||
|
edit email settings emailadmin fi muokkaa sähköpostin asetuksia
|
||||||
|
email account active emailadmin fi Sähköpostitunnus käytössä
|
||||||
|
email address emailadmin fi Sähköpostiosoite
|
||||||
|
email settings common fi Sähköpostin asetukset
|
||||||
|
emailadmin emailadmin fi Sähköpostin ylläpitäjä
|
||||||
|
enable cyrus imap server administration emailadmin fi ota Cyrus IMAP -palvelimen hallinta käyttöön
|
||||||
|
enable sieve emailadmin fi ota Sieve käyttöön
|
||||||
|
encryption settings emailadmin fi Encryptaus asetukset
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin fi Anna oletusverkkotunnus (lähettäjä: käyttäjä@verkkotunnus)
|
||||||
|
error connecting to imap server. %s : %s. emailadmin fi Virhe yhdistettäessä IMAP palvelimeen. %s : %s.
|
||||||
|
error connecting to imap server: [%s] %s. emailadmin fi Virhe yhdistettäessä IMAP palvelimeen. [%s] %s.
|
||||||
|
forward also to emailadmin fi lähetä kopio myös osoitteeseen
|
||||||
|
forward email's to emailadmin fi lähetä edelleen osoitteeseen
|
||||||
|
forward only emailadmin fi lähetä edelleen vain
|
||||||
|
global options emailadmin fi Yleiset asetukset
|
||||||
|
if using ssl or tls, you must have the php openssl extension loaded. emailadmin fi Jos käytät SSL tai TLS, sinulla pitää olla PHP openssl lisäosa ladattuna.
|
||||||
|
imap admin password admin fi IMAP admin salasana
|
||||||
|
imap admin user admin fi IMAP admin käyttäjätunnus
|
||||||
|
imap c-client version < 2001 emailadmin fi IMAP C-Client versio < 2001
|
||||||
|
imap server closed the connection. emailadmin fi IMAP palvelin katkaisi yhteyden.
|
||||||
|
imap server closed the connection. server responded: %s emailadmin fi IMAP palvelin katkaisi yhteyden. Palvelin vastaa: %s
|
||||||
|
imap server hostname or ip address emailadmin fi IMAP -palvelimen nimi tai IP-osoite
|
||||||
|
imap server logintyp emailadmin fi IMAP -palvelimen käyttäjätunnistus
|
||||||
|
imap server port emailadmin fi IMAP -palvelimen portti
|
||||||
|
imap/pop3 server name emailadmin fi IMAP / POP3 -palvelimen nimi
|
||||||
|
in mbyte emailadmin fi megatavua
|
||||||
|
ldap basedn emailadmin fi LDAP basedn
|
||||||
|
ldap server emailadmin fi LDAP -palvelin
|
||||||
|
ldap server accounts dn emailadmin fi LDAP tunnusten DN
|
||||||
|
ldap server admin dn emailadmin fi LDAP ylläpidon DN
|
||||||
|
ldap server admin password emailadmin fi LDAP hallinnan salasana
|
||||||
|
ldap server hostname or ip address emailadmin fi LDAP -palvelimen nimi tai IP-osoite
|
||||||
|
ldap settings emailadmin fi LDAP -asetukset
|
||||||
|
leave empty for no quota emailadmin fi jätä tyhjäksi, jos ei rajoiteta
|
||||||
|
mail settings admin fi Sähköpostin asetukset
|
||||||
|
name of organisation emailadmin fi Yrityksen nimi
|
||||||
|
no alternate email address emailadmin fi ei vahtoehtoista osoitetta
|
||||||
|
no encryption emailadmin fi Ei enkryptausta
|
||||||
|
no forwarding email address emailadmin fi ei edelleenlähetyksen osoitetta
|
||||||
|
no message returned. emailadmin fi Viestiä ei palautettu
|
||||||
|
no supported imap authentication method could be found. emailadmin fi Tuettua IMAP tunnistustapaa ei löydetty.
|
||||||
|
order emailadmin fi Tilaa
|
||||||
|
organisation emailadmin fi Organisaatio
|
||||||
|
plesk can't rename users --> request ignored emailadmin fi Plesk ei voi nimetä käyttäjiä --> pyyntö hylätty
|
||||||
|
plesk imap server (courier) emailadmin fi Plesk IMAP palvelin (Courier)
|
||||||
|
plesk mail script '%1' not found !!! emailadmin fi Plesk sähköpostiskriptiä '%1' ei löydy !!!
|
||||||
|
plesk requires passwords to have at least 5 characters and not contain the account-name --> password not set!!! emailadmin fi Plesk:n salasanassa pitää olla vähintään 5 merkkiä, eikä se saa olla käyttäjätilin nimi --> salasanaa EI ole asetettu !!!
|
||||||
|
plesk smtp-server (qmail) emailadmin fi Plesk SMTP-palvelin (Qmail)
|
||||||
|
pop3 server hostname or ip address emailadmin fi POP3 -palvelimen nimi tai IP-osoite
|
||||||
|
pop3 server port emailadmin fi POP3 -palvelimen portti
|
||||||
|
postfix with ldap emailadmin fi Postfix ja LDAP
|
||||||
|
profile access rights emailadmin fi profiilin pääsy oikeudet
|
||||||
|
profile list emailadmin fi Lista profiileista
|
||||||
|
profile name emailadmin fi Profiilin nimi
|
||||||
|
qmaildotmode emailadmin fi qmaildotmode
|
||||||
|
qouta size in mbyte emailadmin fi tallennuskiintiö Mt
|
||||||
|
quota settings emailadmin fi tallennuskiintiö
|
||||||
|
remove emailadmin fi poista
|
||||||
|
select type of imap/pop3 server emailadmin fi Valitse IMAP / POP3 -palvelimen tyyppi
|
||||||
|
select type of smtp server emailadmin fi Valitse SMTP -palvelimen tyyppi
|
||||||
|
server settings emailadmin fi Palvelimen asetukset
|
||||||
|
sieve server hostname or ip address emailadmin fi Sieve -palvelimen nimi tai IP-osoite
|
||||||
|
sieve server port emailadmin fi Sieve -palvelimen portti
|
||||||
|
sieve settings emailadmin fi Sieven asetukset
|
||||||
|
smtp authentication emailadmin fi SMTP tunnistus
|
||||||
|
smtp options emailadmin fi SMTP asetukset
|
||||||
|
smtp server name emailadmin fi SMTP -palvelimen nimi
|
||||||
|
smtp settings emailadmin fi SMTP asetukset
|
||||||
|
smtp-server hostname or ip address emailadmin fi SMTP -palvelimen nimi tai IP-osoite
|
||||||
|
smtp-server port emailadmin fi SMTP -palvelimen portti
|
||||||
|
standard emailadmin fi Vakio
|
||||||
|
standard imap server emailadmin fi Vakio IMAP -palvelin
|
||||||
|
standard pop3 server emailadmin fi Vakio POP3 -palvelin
|
||||||
|
standard smtp-server emailadmin fi Vakio SMTP -palvelin
|
||||||
|
the imap server does not appear to support the authentication method selected. please contact your system administrator. emailadmin fi IMAP palvelimelta ei löydy tukea valitulle tunnistus muodolle, ote yhteyttä järjestelmän pääkäyttäjään.
|
||||||
|
this php has no imap support compiled in!! emailadmin fi Tämä PHP ei sisällä IMAP tukea!!
|
||||||
|
to use a tls connection, you must be running a version of php 5.1.0 or higher. emailadmin fi Käyttääksesi TLS yhteyttä, sinulla pitää olla käytössä PHP 5.1.0 tai uudempi.
|
||||||
|
unexpected response from server to authenticate command. emailadmin fi Odottamaton vastaus palvelimen AUTHENTICATE komennolta.
|
||||||
|
unexpected response from server to digest-md5 response. emailadmin fi Odottamaton vastaus palvelimen Digest-MD5 vastauksesta.
|
||||||
|
unexpected response from server to login command. emailadmin fi Odottamaton vastaus palvelimen LOGIN komennolta.
|
||||||
|
unknown imap response from the server. server responded: %s emailadmin fi Tuntematon IMAP vastaus palvelimelta. Palvelin vastasi: %s
|
||||||
|
unsupported action '%1' !!! emailadmin fi Toiminto jota ei tueta '%1' !!!
|
||||||
|
update current email address: emailadmin fi Päivitä nykyinen sähköpostiosoite:
|
||||||
|
use ldap defaults emailadmin fi Käytä LDAP -oletuksia
|
||||||
|
use smtp auth emailadmin fi Käytä SMTP -käyttäjäntunnistusta
|
||||||
|
use tls authentication emailadmin fi Käytä TLS -käyttäjäntunnistusta
|
||||||
|
use tls encryption emailadmin fi Käytä TLS -salausta
|
||||||
|
user can edit forwarding address emailadmin fi Käyttäjä voi muokata eteenpäinlähetyksen osoitetta
|
||||||
|
username (standard) emailadmin fi käyttäjätunnus (standardi)
|
||||||
|
username@domainname (virtual mail manager) emailadmin fi käyttäjätunnus@palvelimennimi (Virtual MAIL ManaGeR)
|
||||||
|
users can define their own emailaccounts emailadmin fi Käyttäjät voivat määritellä omat postilaatikkonsa
|
||||||
|
virtual mail manager emailadmin fi Virtual MAIL ManaGeR
|
122
emailadmin/lang/egw_fr.lang
Normal file
122
emailadmin/lang/egw_fr.lang
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
account '%1' not found !!! emailadmin fr Le compte %1 n'a pas été trouvé!!!
|
||||||
|
add new email address: emailadmin fr Ajouter une nouvelle adresse email:
|
||||||
|
add profile emailadmin fr Ajouter un profil
|
||||||
|
admin dn emailadmin fr DN administrateur
|
||||||
|
admin password emailadmin fr Mot de passe administrateur
|
||||||
|
admin username emailadmin fr Nom d'utilisateur de l'administrateur
|
||||||
|
advanced options emailadmin fr Options avancées
|
||||||
|
alternate email address emailadmin fr Adresse email alternative
|
||||||
|
any application emailadmin fr Toutes les applications
|
||||||
|
any group emailadmin fr Tous les groupes
|
||||||
|
bad login name or password. emailadmin fr ID login ou mot de passe erroné
|
||||||
|
bad or malformed request. server responded: %s emailadmin fr Requête invalide ou erronnée. Réponse serveur: %s
|
||||||
|
bad request: %s emailadmin fr Requête invalide: %s
|
||||||
|
can be used by application emailadmin fr Peut être utilisée par application
|
||||||
|
can be used by group emailadmin fr Peut être utilisée par groupe
|
||||||
|
connection dropped by imap server. emailadmin fr Connexion interrompue par le Serveur IMAP.
|
||||||
|
could not complete request. reason given: %s emailadmin fr Impossible d'effectuer la requête. Raison invoquée: %s
|
||||||
|
could not open secure connection to the imap server. %s : %s. emailadmin fr Impossible d'ouvrir la connexion sécurisée avec le serveur IMAP. %s: %s
|
||||||
|
cram-md5 or digest-md5 requires the auth_sasl package to be installed. emailadmin fr CRAM-MD5 ou DIGEST-MD5 requiert l'installation du progiciel Auth_SASL
|
||||||
|
cyrus imap server emailadmin fr Serveur Cyrus IMAP
|
||||||
|
cyrus imap server administration emailadmin fr Administration du serveur Cyrus IMAP
|
||||||
|
default emailadmin fr défaut
|
||||||
|
deliver extern emailadmin fr Relai de messagerie
|
||||||
|
do not validate certificate emailadmin fr ne pas valider le certificat
|
||||||
|
do you really want to delete this profile emailadmin fr Voulez-vous vraiment supprimer ce profil?
|
||||||
|
domainname emailadmin fr Nom de domaine
|
||||||
|
edit email settings emailadmin fr Modifier les paramètres de messagerie
|
||||||
|
email account active emailadmin fr Compte de messagerie actif
|
||||||
|
email address emailadmin fr Adresse de messagerie
|
||||||
|
email settings common fr Paramètres de messagerie
|
||||||
|
emailadmin emailadmin fr Administration de la messagerie
|
||||||
|
enable cyrus imap server administration emailadmin fr Activer la gestion du serveur Cyrus IMAP
|
||||||
|
enable sieve emailadmin fr Activer Sieve
|
||||||
|
encrypted connection emailadmin fr connexion chiffrée
|
||||||
|
encryption settings emailadmin fr Paramètres de chiffrement
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin fr Introduisez votre domaine par défaut (utilisateur@domaine.com)
|
||||||
|
error connecting to imap server. %s : %s. emailadmin fr Erreur de connexion avec le serveur IMAP. %s: %s.
|
||||||
|
error connecting to imap server: [%s] %s. emailadmin fr Erreur de connexion avec le serveur IMAP. [%s] %s.
|
||||||
|
forward also to emailadmin fr Transférer aussi à
|
||||||
|
forward email's to emailadmin fr Transférer les emails à
|
||||||
|
forward only emailadmin fr Seulement transférer
|
||||||
|
global options emailadmin fr Options globales
|
||||||
|
if using ssl or tls, you must have the php openssl extension loaded. emailadmin fr Si vous utilisez SSl ou TLS, vous devez avoir chargé l'extension PHP openssl
|
||||||
|
imap admin password admin fr Mot de passe de l'administrateur IMAP
|
||||||
|
imap admin user admin fr ID administrateur IMAP
|
||||||
|
imap c-client version < 2001 emailadmin fr IMAP C-Client Version < 2001
|
||||||
|
imap server closed the connection. emailadmin fr Le serveur IMAP a interrompu la connexion.
|
||||||
|
imap server closed the connection. server responded: %s emailadmin fr Le serveur IMAP a interrompu la connexion. Réponse du serveur: %s.
|
||||||
|
imap server hostname or ip address emailadmin fr Nom du serveur IMAP ou adresse IP
|
||||||
|
imap server logintyp emailadmin fr Type d'authentification IMAP
|
||||||
|
imap server name emailadmin fr Nom du serveur IMAP
|
||||||
|
imap server port emailadmin fr Port IMAP
|
||||||
|
imap/pop3 server name emailadmin fr Nom du serveur IMAP/POP3
|
||||||
|
in mbyte emailadmin fr en Mo
|
||||||
|
ldap basedn emailadmin fr LDAP DN de base
|
||||||
|
ldap server emailadmin fr LDAP Serveur
|
||||||
|
ldap server accounts dn emailadmin fr LDAP DN contenant les comptes utilisateurs
|
||||||
|
ldap server admin dn emailadmin fr LDAP DN administrateur
|
||||||
|
ldap server admin password emailadmin fr LDAP Mot de passe administateur
|
||||||
|
ldap server hostname or ip address emailadmin fr LDAP Nom du serveur ou adresse IP
|
||||||
|
ldap settings emailadmin fr LDAP Paramètres
|
||||||
|
leave empty for no quota emailadmin fr Laisser vide pour ne pas avoir de quota
|
||||||
|
mail settings admin fr Paramètres de messagerie
|
||||||
|
name of organisation emailadmin fr Nom de l'entreprise
|
||||||
|
no alternate email address emailadmin fr Pas d'adresse email alternative
|
||||||
|
no encryption emailadmin fr pas de chiffrement
|
||||||
|
no forwarding email address emailadmin fr Pas d'adresse email de transfert
|
||||||
|
no message returned. emailadmin fr Aucun message n'est retourné.
|
||||||
|
no supported imap authentication method could be found. emailadmin fr Il n'a été trouvé aucune méthode d'authentification IMAP supportée
|
||||||
|
order emailadmin fr Ordre
|
||||||
|
organisation emailadmin fr Organisation
|
||||||
|
plesk can't rename users --> request ignored emailadmin fr Plesk ne peut pas renommer les utilisateurs --> requête ignorée
|
||||||
|
plesk imap server (courier) emailadmin fr Serveur IMAP Plesk (Courier)
|
||||||
|
plesk mail script '%1' not found !!! emailadmin fr Le script email Plesk '%1' introuvable!!!
|
||||||
|
plesk requires passwords to have at least 5 characters and not contain the account-name --> password not set!!! emailadmin fr Plesk requiert des mots de passe d'au moins 5 caractères qui ne comprennent pas le nom du compte --> le mot de passe n'est PAS fixé!!!
|
||||||
|
plesk smtp-server (qmail) emailadmin fr Serveur SMTP Plesk (Qmail)
|
||||||
|
pop3 server hostname or ip address emailadmin fr Nom ou adresse IP du POP3
|
||||||
|
pop3 server port emailadmin fr Port POP3
|
||||||
|
postfix with ldap emailadmin fr Postfix avec support LDAP
|
||||||
|
profile access rights emailadmin fr droits d'accès du profil
|
||||||
|
profile list emailadmin fr Liste des profils
|
||||||
|
profile name emailadmin fr Nom de profil
|
||||||
|
qmaildotmode emailadmin fr qmaildotmode
|
||||||
|
qouta size in mbyte emailadmin fr Taille du quota en Mo
|
||||||
|
quota settings emailadmin fr Paramètres de quota
|
||||||
|
remove emailadmin fr Supprimer
|
||||||
|
select type of imap server emailadmin fr Sélectionner le type de serveur IMAP
|
||||||
|
select type of imap/pop3 server emailadmin fr Sélectionner le type de serveur IMAP/POP3
|
||||||
|
select type of smtp server emailadmin fr Sélectionner le type de serveur SMTP
|
||||||
|
server settings emailadmin fr Configuration du serveur
|
||||||
|
sieve server hostname or ip address emailadmin fr Nom ou adresse IP du serveur Sieve
|
||||||
|
sieve server port emailadmin fr Port Sieve
|
||||||
|
sieve settings emailadmin fr Paramètres Sieve
|
||||||
|
smtp authentication emailadmin fr Authentication SMTP
|
||||||
|
smtp options emailadmin fr Options SMTP
|
||||||
|
smtp server name emailadmin fr Nom du serveur SMTP
|
||||||
|
smtp settings emailadmin fr Paramètres SMTP
|
||||||
|
smtp-server hostname or ip address emailadmin fr Nom ou adresse IP du serveur SMTP
|
||||||
|
smtp-server port emailadmin fr Port SMTP
|
||||||
|
standard emailadmin fr Standard
|
||||||
|
standard imap server emailadmin fr Serveur IMAP standard
|
||||||
|
standard pop3 server emailadmin fr Serveur POP3 standard
|
||||||
|
standard smtp-server emailadmin fr Serveur SMTP standard
|
||||||
|
the imap server does not appear to support the authentication method selected. please contact your system administrator. emailadmin fr Le serveur IMAP ne supporterait pas la méthode d'authentication sélectionnée. Veuillez contacter votre administrateur système.
|
||||||
|
this php has no imap support compiled in!! emailadmin fr Ce PHP ne comprend pas de support IMAP!!
|
||||||
|
to use a tls connection, you must be running a version of php 5.1.0 or higher. emailadmin fr Pour utiliser une connexion TLS, vous devez utiliser une version PHP 5.1.0 ou plus élevée.
|
||||||
|
unexpected response from server to authenticate command. emailadmin fr Réponse inattendue du serveur à la commande AUTHENTICATE.
|
||||||
|
unexpected response from server to digest-md5 response. emailadmin fr Réponse inattendue du serveur à la réponse Digest-MD5.
|
||||||
|
unexpected response from server to login command. emailadmin fr Réponse inattendue du serveur à la commande LOGIN.
|
||||||
|
unknown imap response from the server. server responded: %s emailadmin fr Réponse IMAP inconnue du serveur. Le serveur a répondu: %s
|
||||||
|
unsupported action '%1' !!! emailadmin fr Action '%1' non supportée!!!
|
||||||
|
update current email address: emailadmin fr Mettre à jour l'adresse email actuelle:
|
||||||
|
use ldap defaults emailadmin fr Utiliser les paramètres LDAP par défaut
|
||||||
|
use smtp auth emailadmin fr Utiliser l'authentification SMTP
|
||||||
|
use tls authentication emailadmin fr Utiliser l'authentification TLS
|
||||||
|
use tls encryption emailadmin fr Utiliser le cryptage TLS
|
||||||
|
user can edit forwarding address emailadmin fr L'utilisateur peut modifier l'adresse de transfert.
|
||||||
|
username (standard) emailadmin fr nom de l'utilisateur (standard)
|
||||||
|
username@domainname (virtual mail manager) emailadmin fr utilisateur@domaine (Virtual MAIL ManaGeR)
|
||||||
|
users can define their own emailaccounts emailadmin fr Les utilisateurs peuvent définir leurs propres comptes de messagerie
|
||||||
|
users can define their own signatures emailadmin fr les utilisateurs peuvent définir leurs propres signatures
|
||||||
|
virtual mail manager emailadmin fr Virtual MAIL ManaGeR
|
68
emailadmin/lang/egw_hr.lang
Executable file
68
emailadmin/lang/egw_hr.lang
Executable file
@ -0,0 +1,68 @@
|
|||||||
|
add profile emailadmin hr Add Profile
|
||||||
|
admin dn emailadmin hr admin dn
|
||||||
|
admin password emailadmin hr admin password
|
||||||
|
admin username emailadmin hr admin username
|
||||||
|
advanced options emailadmin hr advanced options
|
||||||
|
alternate email address emailadmin hr alternate email address
|
||||||
|
cyrus imap server emailadmin hr Cyrus IMAP Server
|
||||||
|
cyrus imap server administration emailadmin hr Cyrus IMAP server administration
|
||||||
|
default emailadmin hr default
|
||||||
|
deliver extern emailadmin hr deliver extern
|
||||||
|
do you really want to delete this profile emailadmin hr Do you really want to delete this Profile
|
||||||
|
domainname emailadmin hr domainname
|
||||||
|
edit email settings emailadmin hr edit email settings
|
||||||
|
email account active emailadmin hr email account active
|
||||||
|
email address emailadmin hr email address
|
||||||
|
enable cyrus imap server administration emailadmin hr enable Cyrus IMAP server administration
|
||||||
|
enable sieve emailadmin hr enable Sieve
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin hr Enter your default mail domain (from: user@domain)
|
||||||
|
forward also to emailadmin hr forward also to
|
||||||
|
forward email's to emailadmin hr forward email's to
|
||||||
|
forward only emailadmin hr forward only
|
||||||
|
imap admin password admin hr IMAP admin password
|
||||||
|
imap admin user admin hr IMAP admin user
|
||||||
|
imap server hostname or ip address emailadmin hr IMAP server hostname or ip address
|
||||||
|
imap server logintyp emailadmin hr IMAP server login type
|
||||||
|
imap server port emailadmin hr IMAP server port
|
||||||
|
imap/pop3 server name emailadmin hr IMAP/POP3 server name
|
||||||
|
in mbyte emailadmin hr in MByte
|
||||||
|
ldap basedn emailadmin hr LDAP basedn
|
||||||
|
ldap server emailadmin hr LDAP server
|
||||||
|
ldap server accounts dn emailadmin hr LDAP server accounts DN
|
||||||
|
ldap server admin dn emailadmin hr LDAP server admin DN
|
||||||
|
ldap server admin password emailadmin hr LDAP server admin password
|
||||||
|
ldap server hostname or ip address emailadmin hr LDAP server hostname or ip address
|
||||||
|
ldap settings emailadmin hr LDAP settings
|
||||||
|
leave empty for no quota emailadmin hr leave empty for no quota
|
||||||
|
mail settings admin hr Mail settings
|
||||||
|
name of organisation emailadmin hr Name of organization
|
||||||
|
no alternate email address emailadmin hr no alternate email address
|
||||||
|
no forwarding email address emailadmin hr no forwarding email address
|
||||||
|
pop3 server hostname or ip address emailadmin hr POP3 server hostname or ip address
|
||||||
|
pop3 server port emailadmin hr POP3 server port
|
||||||
|
postfix with ldap emailadmin hr Postfix with LDAP
|
||||||
|
profile list emailadmin hr Profile List
|
||||||
|
profile name emailadmin hr Profile Name
|
||||||
|
qmaildotmode emailadmin hr qmaildotmode
|
||||||
|
qouta size in mbyte emailadmin hr qouta size in MByte
|
||||||
|
quota settings emailadmin hr quota settings
|
||||||
|
remove emailadmin hr remove
|
||||||
|
select type of imap/pop3 server emailadmin hr Select type of IMAP/POP3 server
|
||||||
|
select type of smtp server emailadmin hr Select type of SMTP Server
|
||||||
|
sieve server hostname or ip address emailadmin hr Sieve server hostname or ip address
|
||||||
|
sieve server port emailadmin hr Sieve server port
|
||||||
|
sieve settings emailadmin hr Sieve settings
|
||||||
|
smtp server name emailadmin hr SMTP server name
|
||||||
|
smtp-server hostname or ip address emailadmin hr SMTP server hostname or IP address
|
||||||
|
smtp-server port emailadmin hr SMTP server port
|
||||||
|
standard emailadmin hr Standard
|
||||||
|
standard imap server emailadmin hr Standard IMAP server
|
||||||
|
standard pop3 server emailadmin hr Standard POP3 server
|
||||||
|
standard smtp-server emailadmin hr Standard SMTP server
|
||||||
|
use ldap defaults emailadmin hr use LDAP defaults
|
||||||
|
use smtp auth emailadmin hr Use SMTP auth
|
||||||
|
use tls authentication emailadmin hr Use TLS authentication
|
||||||
|
use tls encryption emailadmin hr Use TLS encryption
|
||||||
|
users can define their own emailaccounts emailadmin hr Users can define their own email accounts
|
||||||
|
virtual mail manager emailadmin hr Virtual MAIL ManaGeR
|
||||||
|
IMAP C-Client Version < 2001 emailadmin hr IMAP C-Client Version < 2001
|
143
emailadmin/lang/egw_hu.lang
Normal file
143
emailadmin/lang/egw_hu.lang
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
account '%1' not found !!! emailadmin hu '%1' felhasználói azonosító nem található!
|
||||||
|
active templates emailadmin hu Aktív vázlatok
|
||||||
|
add new email address: emailadmin hu Új email cím hozzáadása:
|
||||||
|
add profile emailadmin hu Profil hozzáadása
|
||||||
|
admin dn emailadmin hu Admin dn
|
||||||
|
admin password emailadmin hu adminisztrátor jelszava
|
||||||
|
admin username emailadmin hu adminisztrátor neve
|
||||||
|
advanced options emailadmin hu haladó beállítások
|
||||||
|
alternate email address emailadmin hu alternatív emailcím
|
||||||
|
any application emailadmin hu Bármelyik modul
|
||||||
|
any group emailadmin hu Bármelyik csoport
|
||||||
|
any user emailadmin hu bármely felhasználó
|
||||||
|
back to admin/grouplist emailadmin hu Vissza az csoportok adminisztráláshoz
|
||||||
|
back to admin/userlist emailadmin hu Vissza a felhasználók adminisztráláshoz
|
||||||
|
bad login name or password. emailadmin hu Hibás belépési név vagy jelszó.
|
||||||
|
bad or malformed request. server responded: %s emailadmin hu Hibás kérés. Szerver válasza: %s
|
||||||
|
bad request: %s emailadmin hu Hibás kérés: %s
|
||||||
|
can be used by application emailadmin hu Ez a modul használhatja
|
||||||
|
can be used by group emailadmin hu Ez a csoport használhatja
|
||||||
|
can be used by user emailadmin hu a felhasználó alkalmazhatja
|
||||||
|
connection dropped by imap server. emailadmin hu A kapcsolatot az IMAP szerver eldobta.
|
||||||
|
could not complete request. reason given: %s emailadmin hu Kérést nem lehet teljesíteni. Az ok: %s
|
||||||
|
could not open secure connection to the imap server. %s : %s. emailadmin hu Nem létesíthető titkos csatorna az IMAP szerverhez. %s : %s
|
||||||
|
cram-md5 or digest-md5 requires the auth_sasl package to be installed. emailadmin hu CRAM-MD5 vagy DIGEST-MD5 használatához az Auth_SASL csomagot telepíteni kell.
|
||||||
|
cyrus imap server emailadmin hu Cyrus IMAP-kiszolgáló
|
||||||
|
cyrus imap server administration emailadmin hu Cyrus IMAP-kiszolgáló adminisztrációja
|
||||||
|
default emailadmin hu Alapértelmezett
|
||||||
|
deliver extern emailadmin hu külső kézbesítés
|
||||||
|
do not validate certificate emailadmin hu ne ellenőrizze a tanúsítványt
|
||||||
|
do you really want to delete this profile emailadmin hu Valóban törölni kívánja ezt a profilt
|
||||||
|
do you really want to reset the filter for the profile listing emailadmin hu Valóban törölni szeretnéd a profillista szűrőt?
|
||||||
|
domainname emailadmin hu tartománynév
|
||||||
|
edit email settings emailadmin hu email beállítások szerkesztése
|
||||||
|
email account active emailadmin hu email azonosító aktív
|
||||||
|
email address emailadmin hu email cím
|
||||||
|
email settings common hu Email beállítások
|
||||||
|
emailadmin emailadmin hu EmailAdmin
|
||||||
|
emailadmin: group assigned profile common hu eMailAdmin: csoport a profilhoz hozzárendelve
|
||||||
|
emailadmin: user assigned profile common hu eMailAdmin: felhasználó a profilhoz hozzárendelve
|
||||||
|
enable cyrus imap server administration emailadmin hu Cyrus IMAP-kiszolgáló adminisztrációjának engedélyezése
|
||||||
|
enable sieve emailadmin hu Sieve engedélyezése
|
||||||
|
encrypted connection emailadmin hu titkosított kapcsolat
|
||||||
|
encryption settings emailadmin hu Titkosítás beállításai
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin hu Adja meg az alapértelmezett levelezési tartományt (a felhasználó@tartomány-ból)
|
||||||
|
error connecting to imap server. %s : %s. emailadmin hu Hiba történt az IMAP szerverhez csatlakozás közben. %s : %s
|
||||||
|
error connecting to imap server: [%s] %s. emailadmin hu Hiba történt az IMAP szerverhez csatlakozás közben. [%s ]: %s
|
||||||
|
filtered by account emailadmin hu Fiók szerint szűrve
|
||||||
|
filtered by group emailadmin hu Csoport szerint szűrve
|
||||||
|
forward also to emailadmin hu továbbítsd ide is
|
||||||
|
forward email's to emailadmin hu email továbbítása ide
|
||||||
|
forward only emailadmin hu továbbítás csak ide
|
||||||
|
global options emailadmin hu Globális opciók
|
||||||
|
if using ssl or tls, you must have the php openssl extension loaded. emailadmin hu SSL vagy TLS használatához a PHP openssl kiterjesztését telepíteni kell.
|
||||||
|
imap admin password admin hu IMAP adminisztrátor jelszava
|
||||||
|
imap admin user admin hu IMAP adminisztrátor felhasználóneve
|
||||||
|
imap c-client version < 2001 emailadmin hu IMAP C-Client verzió < 2001
|
||||||
|
imap server closed the connection. emailadmin hu Az IMAP szerver lezárta a kapcsolatot.
|
||||||
|
imap server closed the connection. server responded: %s emailadmin hu Az IMAP szerver lezárta a kapcsolatot: %s
|
||||||
|
imap server hostname or ip address emailadmin hu IMAP szerver hosztneve vagy IP címe
|
||||||
|
imap server logintyp emailadmin hu IMAP szerver bejelentkezési típusa
|
||||||
|
imap server name emailadmin hu IMAP szerver neve
|
||||||
|
imap server port emailadmin hu IMAP szerver portja
|
||||||
|
imap/pop3 server name emailadmin hu IMAP/POP3 szerver neve
|
||||||
|
in mbyte emailadmin hu MBájtban
|
||||||
|
inactive emailadmin hu inaktív
|
||||||
|
ldap basedn emailadmin hu LDAP basedn
|
||||||
|
ldap server emailadmin hu LDAP szerver
|
||||||
|
ldap server accounts dn emailadmin hu LDAP szerver accounts DN
|
||||||
|
ldap server admin dn emailadmin hu LDAP szerver admin DN
|
||||||
|
ldap server admin password emailadmin hu LDAP szerver adminisztrátorának jelszava
|
||||||
|
ldap server hostname or ip address emailadmin hu LDAP szerver hosztneve vagy IP címe
|
||||||
|
ldap settings emailadmin hu LDAP beállítások
|
||||||
|
leave empty for no quota emailadmin hu hagyja üresen a kvóta figyelmen kívül hagyásához
|
||||||
|
mail settings admin hu Levelezési beállítások
|
||||||
|
manage stationery templates emailadmin hu Irodaszer minták kezelése
|
||||||
|
name of organisation emailadmin hu Szervezet neve
|
||||||
|
no alternate email address emailadmin hu nincs alternatív email cím
|
||||||
|
no encryption emailadmin hu titkosítás nélkül
|
||||||
|
no forwarding email address emailadmin hu nincs továbbküldési email cím
|
||||||
|
no message returned. emailadmin hu Nincs visszaadott üzenet.
|
||||||
|
no supported imap authentication method could be found. emailadmin hu Nem található támogatott IMAP hitelesítés.
|
||||||
|
order emailadmin hu Rendezés
|
||||||
|
organisation emailadmin hu Szervezet
|
||||||
|
plesk can't rename users --> request ignored emailadmin hu A Plesk nem tudja átnevezni a felhasználókat -> kérés figyelmen kívül hagyva
|
||||||
|
plesk imap server (courier) emailadmin hu Plesk IMAP Szerver (Courier)
|
||||||
|
plesk mail script '%1' not found !!! emailadmin hu Plesk levél szkript '%1' nem található!!!
|
||||||
|
plesk requires passwords to have at least 5 characters and not contain the account-name --> password not set!!! emailadmin hu Plesk megköveteli, hogy a jelszó legalább 5 karakter legyen és ne tartalmazza a felhasználói nevet --> jelszó beállítása NEM történt meg!!!
|
||||||
|
plesk smtp-server (qmail) emailadmin hu Plesk SMTP-Szerver (Qmail)
|
||||||
|
pop3 server hostname or ip address emailadmin hu POP3 szerver hosztneve vagy IP címe
|
||||||
|
pop3 server port emailadmin hu POP3 szerver portja
|
||||||
|
postfix with ldap emailadmin hu Postfix LDAP-vel
|
||||||
|
profile access rights emailadmin hu profil elérési jogosultságok
|
||||||
|
profile is active emailadmin hu a profil inaktív
|
||||||
|
profile list emailadmin hu Profil lista
|
||||||
|
profile name emailadmin hu Profilnév
|
||||||
|
qmaildotmode emailadmin hu qmaildotmode
|
||||||
|
qouta size in mbyte emailadmin hu kvóta mérete Megabájtban
|
||||||
|
quota settings emailadmin hu kvóta beállításai
|
||||||
|
remove emailadmin hu eltávolítás
|
||||||
|
reset filter emailadmin hu szűrö törlése
|
||||||
|
select type of imap server emailadmin hu IMAP szerver típusának kiválasztása
|
||||||
|
select type of imap/pop3 server emailadmin hu Válassza ki az IMAP/POP3 szerver típusát
|
||||||
|
select type of smtp server emailadmin hu Válassza ki az SMTP szerver típusát
|
||||||
|
send using this email-address emailadmin hu Küldés erről az e-mail címről
|
||||||
|
server settings emailadmin hu Szerver beállítások
|
||||||
|
sieve server hostname or ip address emailadmin hu Sieve szerver hosztneve vagy IP címe
|
||||||
|
sieve server port emailadmin hu Sieve szerver port
|
||||||
|
sieve settings emailadmin hu SIEVE beállítások
|
||||||
|
smtp authentication emailadmin hu SMTP azonosítás
|
||||||
|
smtp options emailadmin hu SMTP opciók
|
||||||
|
smtp server name emailadmin hu SMTP szerver neve
|
||||||
|
smtp settings emailadmin hu SMTP beállítások
|
||||||
|
smtp-server hostname or ip address emailadmin hu SMTP szerver hosztneve vagy IP címe
|
||||||
|
smtp-server port emailadmin hu SMTP szerver portja
|
||||||
|
standard emailadmin hu Szabványos
|
||||||
|
standard imap server emailadmin hu Szabványos IMAP-kiszolgáló
|
||||||
|
standard pop3 server emailadmin hu Szabványos POP3-kiszolgáló
|
||||||
|
standard smtp-server emailadmin hu Szabványos SMTP-kiszolgáló
|
||||||
|
stationery emailadmin hu Irodaszer
|
||||||
|
the imap server does not appear to support the authentication method selected. please contact your system administrator. emailadmin hu Az IMAP szerver úgy tűnik nem támogatja a kiválasztott hitelesítést. Lépjen kapcsolatba az adminisztrátorral.
|
||||||
|
this php has no imap support compiled in!! emailadmin hu A használt PHP verzió nem tartalmaz IMAP támogatást! (telepíteni kell)
|
||||||
|
to use a tls connection, you must be running a version of php 5.1.0 or higher. emailadmin hu TLS kapcsolat használatához legalább PHP 5.1.0-val kell rendelkeznie.
|
||||||
|
unexpected response from server to authenticate command. emailadmin hu Váratlan válasz a szervertől az AUTHENTICATE parancsra.
|
||||||
|
unexpected response from server to digest-md5 response. emailadmin hu Váratlan válasz a szervertől a Digest-MD5 parancsra.
|
||||||
|
unexpected response from server to login command. emailadmin hu Váratlan válasz a szervertől a LOGIN parancsra.
|
||||||
|
unknown imap response from the server. server responded: %s emailadmin hu Váratlan válasz a szervertől: %s
|
||||||
|
unsupported action '%1' !!! emailadmin hu Nem támogatott művelet '%1' !!!
|
||||||
|
update current email address: emailadmin hu Jelenlegi email cím frissítése:
|
||||||
|
use ldap defaults emailadmin hu használja az LDAP alapbeállításokat
|
||||||
|
use predefined username and password defined below emailadmin hu Használd a lent megadott felhasználónevet és jelszót
|
||||||
|
use smtp auth emailadmin hu SMTP hitelesítés használata
|
||||||
|
use tls authentication emailadmin hu TLS hitelesítés használata
|
||||||
|
use tls encryption emailadmin hu TLS kódolás használata
|
||||||
|
user can edit forwarding address emailadmin hu Felhasználó szerkesztheti a továbbításkor a címeket
|
||||||
|
username (standard) emailadmin hu felhasználó név (standard)
|
||||||
|
username/password defined by admin emailadmin hu Az adminisztrátok által meghatározott felhasználó és jelszó
|
||||||
|
username@domainname (virtual mail manager) emailadmin hu felhasználónév@tartománynév (Virtual MAIL ManaGeR)
|
||||||
|
users can define their own emailaccounts emailadmin hu A felhasználók saját maguk állíthatják be az email postafiókjaikat
|
||||||
|
users can define their own identities emailadmin hu A felhasználók beállíthatják a saját azonosítójukat
|
||||||
|
users can define their own signatures emailadmin hu A felhasználók beállíthatják a saját aláírásukat
|
||||||
|
users can utilize these stationery templates emailadmin hu A felhasználók alkalmazhatják az irodaszer mintákat
|
||||||
|
vaction messages with start- and end-date require an admin account to be set! emailadmin hu A házon kívül üzenet érvényességi dátumának megadása adminisztrátor szintű hozzáférést igényel!
|
||||||
|
virtual mail manager emailadmin hu Virtuális MAIL ManaGeR
|
97
emailadmin/lang/egw_it.lang
Normal file
97
emailadmin/lang/egw_it.lang
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
account '%1' not found !!! emailadmin it Account '%1' non trovato !!!
|
||||||
|
add profile emailadmin it Aggiungi Profilo
|
||||||
|
admin dn emailadmin it dn amministratore
|
||||||
|
admin password emailadmin it password amministratore
|
||||||
|
admin username emailadmin it username amministratore
|
||||||
|
advanced options emailadmin it opzioni avanzate
|
||||||
|
alternate email address emailadmin it indirizzo email alternativo
|
||||||
|
any application emailadmin it ogni applicazione
|
||||||
|
any group emailadmin it ogni gruppo
|
||||||
|
bad login name or password. emailadmin it Nome utente o password errati.
|
||||||
|
bad or malformed request. server responded: %s emailadmin it Richiesta errata o mal composta. Il Server ha risposto: %s
|
||||||
|
bad request: %s emailadmin it Richiesta errata: %s
|
||||||
|
can be used by application emailadmin it può essere usato da applicazione
|
||||||
|
can be used by group emailadmin it può essere usato da gruppo
|
||||||
|
connection dropped by imap server. emailadmin it Connessione interrotta dal sever IMAP.
|
||||||
|
could not complete request. reason given: %s emailadmin it Impossibile completare la richiesta. Motivazione data: %s
|
||||||
|
could not open secure connection to the imap server. %s : %s. emailadmin it Non è possibile aprire una connessione sicura al server IMAP. %s : %s.
|
||||||
|
cram-md5 or digest-md5 requires the auth_sasl package to be installed. emailadmin it CRAM-MD5 o DIGEST-MD5 richiede che il pacchetto Auth_SASL sia installato.
|
||||||
|
cyrus imap server emailadmin it Server IMAP Cyrus
|
||||||
|
cyrus imap server administration emailadmin it Amministrazione Server IMAP Cyrus
|
||||||
|
default emailadmin it predefinito
|
||||||
|
do you really want to delete this profile emailadmin it Vuoi davvero cancellare questo Profilo
|
||||||
|
domainname emailadmin it nome dominio
|
||||||
|
edit email settings emailadmin it modifica impostazioni email
|
||||||
|
email account active emailadmin it account email attivo
|
||||||
|
email address emailadmin it indirizzo email
|
||||||
|
email settings common it Impostazioni email
|
||||||
|
emailadmin emailadmin it Gestione Email
|
||||||
|
enable cyrus imap server administration emailadmin it abilita amministrazione Server IMAP Cyrus
|
||||||
|
enable sieve emailadmin it abilita Sieve
|
||||||
|
encryption settings emailadmin it impostazioni cifratura
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin it Inserisci il tuo dominio di posta predefinito (da: utente@dominio)
|
||||||
|
error connecting to imap server. %s : %s. emailadmin it Errore in connessione al server IMAP. %s : %s.
|
||||||
|
error connecting to imap server: [%s] %s. emailadmin it Errore in connessione al server IMAP: [%s] %s.
|
||||||
|
forward also to emailadmin it Inoltra anche a
|
||||||
|
forward email's to emailadmin it Inoltra email a
|
||||||
|
forward only emailadmin it Inoltra solo
|
||||||
|
global options emailadmin it Opzioni globali
|
||||||
|
imap admin password admin it Password amministratore IMAP
|
||||||
|
imap admin user admin it User amministratore IMAP
|
||||||
|
imap c-client version < 2001 emailadmin it Versione C-Cliente < 2001
|
||||||
|
imap server hostname or ip address emailadmin it Nome Host o IP del server IMAP
|
||||||
|
imap server logintyp emailadmin it Tipo login server IMAP
|
||||||
|
imap server port emailadmin it Porta server IMAP
|
||||||
|
imap/pop3 server name emailadmin it Nome server IMAP/POP3
|
||||||
|
in mbyte emailadmin it in MByte
|
||||||
|
ldap basedn emailadmin it LDAP basedn
|
||||||
|
ldap server emailadmin it server LDAP
|
||||||
|
ldap server accounts dn emailadmin it DN account server LDAP
|
||||||
|
ldap server admin dn emailadmin it DN amministratore server LDAP
|
||||||
|
ldap server admin password emailadmin it password amministratore server LDAP
|
||||||
|
ldap server hostname or ip address emailadmin it Nome host o IP server LDAP
|
||||||
|
ldap settings emailadmin it impostazioni LDAP
|
||||||
|
leave empty for no quota emailadmin it lascia vuoto per nessuna quota
|
||||||
|
mail settings admin it Impostazioni Posta
|
||||||
|
name of organisation emailadmin it Nome dell'organizzazione
|
||||||
|
no alternate email address emailadmin it nessun indirizzo email alternativo
|
||||||
|
no forwarding email address emailadmin it nessun indirizzo email di inoltro
|
||||||
|
no message returned. emailadmin it nessun messaggio ricevuto
|
||||||
|
order emailadmin it ordine
|
||||||
|
organisation emailadmin it organizzazione
|
||||||
|
pop3 server hostname or ip address emailadmin it Nome host o IP server POP3
|
||||||
|
pop3 server port emailadmin it porta server POP3
|
||||||
|
postfix with ldap emailadmin it Postfix con LDAP
|
||||||
|
profile access rights emailadmin it diritti di accesso profilo
|
||||||
|
profile list emailadmin it Elenco Profili
|
||||||
|
profile name emailadmin it Nome Profilo
|
||||||
|
qmaildotmode emailadmin it qmaildotmode
|
||||||
|
qouta size in mbyte emailadmin it dimensione quota in MByte
|
||||||
|
quota settings emailadmin it impostazioni quota
|
||||||
|
remove emailadmin it rimuovi
|
||||||
|
select type of imap/pop3 server emailadmin it Seleziona il tipo si server IMAP/POP3
|
||||||
|
select type of smtp server emailadmin it Seleziona il tipo di server SMTP
|
||||||
|
server settings emailadmin it impostazioni server
|
||||||
|
sieve server hostname or ip address emailadmin it Nome host o IP server Sieve
|
||||||
|
sieve server port emailadmin it porta server Sieve
|
||||||
|
sieve settings emailadmin it impostazioni SIeve
|
||||||
|
smtp authentication emailadmin it autenticazione smtp
|
||||||
|
smtp options emailadmin it opzioni smtp
|
||||||
|
smtp server name emailadmin it nome server SMTP
|
||||||
|
smtp settings emailadmin it impostazioni smtp
|
||||||
|
smtp-server hostname or ip address emailadmin it Nome host o IP server SMTP
|
||||||
|
smtp-server port emailadmin it porta server SMTP
|
||||||
|
standard emailadmin it Standard
|
||||||
|
standard imap server emailadmin it Server IMAP standard
|
||||||
|
standard pop3 server emailadmin it Server POP3 standard
|
||||||
|
standard smtp-server emailadmin it Server SMTP standard
|
||||||
|
unsupported action '%1' !!! emailadmin it Azione non supportata '%1' !!!
|
||||||
|
use ldap defaults emailadmin it usa predefiniti LDAP
|
||||||
|
use smtp auth emailadmin it usa autenticazione SMTP
|
||||||
|
use tls authentication emailadmin it usa autenticazione TLS
|
||||||
|
use tls encryption emailadmin it usa crittografia TLS
|
||||||
|
user can edit forwarding address emailadmin it l'utente può modificare indirizzo di inoltro
|
||||||
|
username (standard) emailadmin it nome utente (standard)
|
||||||
|
username@domainname (virtual mail manager) emailadmin it nomeutente@nome dominio (ManaGeR MAIL Virtuale)
|
||||||
|
users can define their own emailaccounts emailadmin it Gli utenti possono definire i propri account email
|
||||||
|
virtual mail manager emailadmin it ManaGeR MAIL Virtuale
|
68
emailadmin/lang/egw_iw.lang
Executable file
68
emailadmin/lang/egw_iw.lang
Executable file
@ -0,0 +1,68 @@
|
|||||||
|
add profile emailadmin iw הוסף פרופיל
|
||||||
|
admin dn emailadmin iw של המנהל dn
|
||||||
|
admin password emailadmin iw סיסמת מנהל
|
||||||
|
admin username emailadmin iw שם משתמש של המנהל
|
||||||
|
advanced options emailadmin iw אופציות מתקדמות
|
||||||
|
alternate email address emailadmin iw כתובת דואר אלקטרוני חילופי
|
||||||
|
cyrus imap server emailadmin iw Cyrus IMAP שרת
|
||||||
|
cyrus imap server administration emailadmin iw Cyrus IMAP ניהול שרת
|
||||||
|
default emailadmin iw ברירת מחדל
|
||||||
|
deliver extern emailadmin iw מסירה חיצונית
|
||||||
|
do you really want to delete this profile emailadmin iw בטוח שברצונך למחוק פרופיל זה
|
||||||
|
domainname emailadmin iw שם הדומיין
|
||||||
|
edit email settings emailadmin iw ערוך הגדרות דואר אלקטרוני
|
||||||
|
email account active emailadmin iw חשבון דואר אלקטרוני פעיל
|
||||||
|
email address emailadmin iw כתובת דואר אלקטרוני
|
||||||
|
enable cyrus imap server administration emailadmin iw Cyrus IMAP איפשור ניהול שרת
|
||||||
|
enable sieve emailadmin iw Sieve אישפור
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin iw (user@domain :ציין את דומיין דואר המחדלי שלך (לדוגמא
|
||||||
|
forward also to emailadmin iw להעביר גם אל
|
||||||
|
forward email's to emailadmin iw להעביר דואר אלקטרוני אל
|
||||||
|
forward only emailadmin iw העבר בלבד
|
||||||
|
imap admin password admin iw IMAP סיסמת ניהול
|
||||||
|
imap admin user admin iw IMAP שם מנהל
|
||||||
|
imap c-client version < 2001 emailadmin iw IMAP C-Client Version < 2001
|
||||||
|
imap server hostname or ip address emailadmin iw שלו IP- או כתובת הIMAP שם שרת
|
||||||
|
imap server logintyp emailadmin iw IMAP סוג כניסה לשרת
|
||||||
|
imap server port emailadmin iw IMAP פורט שרת
|
||||||
|
imap/pop3 server name emailadmin iw IMAP/POP3 שם שרת
|
||||||
|
in mbyte emailadmin iw MB-ב
|
||||||
|
ldap basedn emailadmin iw dn הביסי של LDAP
|
||||||
|
ldap server emailadmin iw LDAP שרת
|
||||||
|
ldap server accounts dn emailadmin iw LDAP של שרת חשבונות DN
|
||||||
|
ldap server admin dn emailadmin iw LDAP מנהל שרת של DN
|
||||||
|
ldap server admin password emailadmin iw LDAP סיסמה של מנהל שרת
|
||||||
|
ldap server hostname or ip address emailadmin iw IP או כתובת LDAP שם שרת
|
||||||
|
ldap settings emailadmin iw LDAP הגדרות
|
||||||
|
leave empty for no quota emailadmin iw השאר ריק ללא הקצאה
|
||||||
|
mail settings admin iw הגדרות דואר
|
||||||
|
name of organisation emailadmin iw שם האירגון
|
||||||
|
no alternate email address emailadmin iw אין כתובת דואר אלקטרוני חלופי
|
||||||
|
no forwarding email address emailadmin iw אין כתובת להעברת דואר אלקטרוני
|
||||||
|
pop3 server hostname or ip address emailadmin iw IP או כתובת pop3 שם שרת
|
||||||
|
pop3 server port emailadmin iw POP3 פורט שרת
|
||||||
|
postfix with ldap emailadmin iw LDAP עם Postfix
|
||||||
|
profile list emailadmin iw רשימת פרופילים
|
||||||
|
profile name emailadmin iw שם פרופיל
|
||||||
|
qmaildotmode emailadmin iw qmaildotmode
|
||||||
|
qouta size in mbyte emailadmin iw MB-גודל הקצאה ב
|
||||||
|
quota settings emailadmin iw הגדרות הקצאה
|
||||||
|
remove emailadmin iw הסר
|
||||||
|
select type of imap/pop3 server emailadmin iw IMAP/POP3 בחר סוג שרת
|
||||||
|
select type of smtp server emailadmin iw SMTP בחר סוג שרת
|
||||||
|
sieve server hostname or ip address emailadmin iw IP או כתובת Sieve שם שרת
|
||||||
|
sieve server port emailadmin iw Sieve פורט שרת
|
||||||
|
sieve settings emailadmin iw Sieve הגדרות
|
||||||
|
smtp server name emailadmin iw SMTP שם שרת
|
||||||
|
smtp-server hostname or ip address emailadmin iw IP או כתובת SMTP שם שרת
|
||||||
|
smtp-server port emailadmin iw SMTP פורת שרת
|
||||||
|
standard emailadmin iw תקני
|
||||||
|
standard imap server emailadmin iw תקני IMAP שרת
|
||||||
|
standard pop3 server emailadmin iw תקני POP3 שרת
|
||||||
|
standard smtp-server emailadmin iw תקני SMTP שרת
|
||||||
|
use ldap defaults emailadmin iw LDAP השתמש בברירות מחדל של
|
||||||
|
use smtp auth emailadmin iw LDAP השתמש באימות משתמשים של
|
||||||
|
use tls authentication emailadmin iw TLS השתמש באימות
|
||||||
|
use tls encryption emailadmin iw TLS השתמש בהצפנת
|
||||||
|
users can define their own emailaccounts emailadmin iw משתמשים יכולים להגדיר בעצמם את חשבונות דואר האלקטרוני שלהם
|
||||||
|
virtual mail manager emailadmin iw מלהל דואר וירטואלי
|
1
emailadmin/lang/egw_lt.lang
Normal file
1
emailadmin/lang/egw_lt.lang
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
61
emailadmin/lang/egw_lv.lang
Normal file
61
emailadmin/lang/egw_lv.lang
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
add profile emailadmin lv Pievienot profilu
|
||||||
|
admin dn emailadmin lv administratora dn
|
||||||
|
admin password emailadmin lv administratora parole
|
||||||
|
admin username emailadmin lv administratora lietotājvārds
|
||||||
|
advanced options emailadmin lv uzlabotās iespējas
|
||||||
|
alternate email address emailadmin lv alternatīvas e-pasta adreses
|
||||||
|
cyrus imap server emailadmin lv Cyrus IMAP serveris
|
||||||
|
cyrus imap server administration emailadmin lv Cyrus IMAP servera administrēšana
|
||||||
|
default emailadmin lv noklusējums
|
||||||
|
do you really want to delete this profile emailadmin lv Vai tu tiešām vēlies dzēst šo profilu?
|
||||||
|
domainname emailadmin lv domēna vārds
|
||||||
|
edit email settings emailadmin lv rediģēt e-pasta uzstādījumus
|
||||||
|
email account active emailadmin lv e-pasta konts aktīvs
|
||||||
|
email address emailadmin lv e-pasta adrese
|
||||||
|
enable cyrus imap server administration emailadmin lv atļaut Cyrus IMAP servera administrēšanu
|
||||||
|
enable sieve emailadmin lv atļaut Sieve
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin lv Ievadi noklusēto pasta domēnu (no: lietotājs@domēns)
|
||||||
|
forward also to emailadmin lv pārsūtīt arī
|
||||||
|
forward email's to emailadmin lv pārsūtīt e-pasta vēstules
|
||||||
|
forward only emailadmin lv tikai pārsūtīt
|
||||||
|
imap admin password admin lv IMAP administratora parole
|
||||||
|
imap admin user admin lv IMAP administrators
|
||||||
|
imap c-client version < 2001 emailadmin lv IMAP C-Client Version <2001
|
||||||
|
imap server hostname or ip address emailadmin lv IMAP servera hosta vārds vai IP adrese
|
||||||
|
imap server logintyp emailadmin lv IMAP servera autorizācijas veids
|
||||||
|
imap server port emailadmin lv IMAP servera ports
|
||||||
|
imap/pop3 server name emailadmin lv IMAP/POP3 servera nosaukums
|
||||||
|
ldap basedn emailadmin lv LDAP bāzes dn
|
||||||
|
ldap server emailadmin lv LDAP serveris
|
||||||
|
ldap server accounts dn emailadmin lv LDAP servera konti DN
|
||||||
|
ldap server admin dn emailadmin lv LDAP servera administratora DN
|
||||||
|
ldap server admin password emailadmin lv LDAP servera administratora parole
|
||||||
|
ldap server hostname or ip address emailadmin lv LDAP servera hosta vārds vai IP adrese
|
||||||
|
ldap settings emailadmin lv LDAP uzstādījumi
|
||||||
|
mail settings admin lv Pasta uzstādījumi
|
||||||
|
name of organisation emailadmin lv Organizācijas nosaukums
|
||||||
|
no alternate email address emailadmin lv nav alternatīvas e-pasta adreses
|
||||||
|
no forwarding email address emailadmin lv nav pārsūtāmās e-pasta adreses
|
||||||
|
pop3 server hostname or ip address emailadmin lv POP3 servera hosta vārds vai IP adrese
|
||||||
|
pop3 server port emailadmin lv POP3 servera ports
|
||||||
|
profile list emailadmin lv Profila saraksts
|
||||||
|
profile name emailadmin lv Profila vārds
|
||||||
|
remove emailadmin lv pārvietot
|
||||||
|
select type of imap/pop3 server emailadmin lv Atzīmēt IMAP/POP3 servera tipu
|
||||||
|
select type of smtp server emailadmin lv Atzīmēt SMTP servera tipu
|
||||||
|
sieve server hostname or ip address emailadmin lv <b>?Sieve?</b> servera hosta vārds vai IP adrese
|
||||||
|
sieve server port emailadmin lv Sieve servera ports
|
||||||
|
sieve settings emailadmin lv Sieve uzstadījumi
|
||||||
|
smtp server name emailadmin lv SMTP servera nosaukums
|
||||||
|
smtp-server hostname or ip address emailadmin lv SMTP servera hosta vārds vai IP adrese
|
||||||
|
smtp-server port emailadmin lv SMTP servera ports
|
||||||
|
standard emailadmin lv Standarta
|
||||||
|
standard imap server emailadmin lv Standarta IMAP serveris
|
||||||
|
standard pop3 server emailadmin lv Standarta POP3 serveris
|
||||||
|
standard smtp-server emailadmin lv Standarta SMTP serveris
|
||||||
|
use ldap defaults emailadmin lv lieto LDAP noklusējumus
|
||||||
|
use smtp auth emailadmin lv Lieto SMTP autentifikāciju
|
||||||
|
use tls authentication emailadmin lv Lieto TLS autentifikāciju
|
||||||
|
use tls encryption emailadmin lv Lieto TLS šifrēšanu
|
||||||
|
users can define their own emailaccounts emailadmin lv LIetotāji paši var definēt savus e-pasta kontus
|
||||||
|
virtual mail manager emailadmin lv VIrtuālais MAIL ManaGeR
|
138
emailadmin/lang/egw_nl.lang
Normal file
138
emailadmin/lang/egw_nl.lang
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
account '%1' not found !!! emailadmin nl Account '%1' niet gevonden !!!
|
||||||
|
add new email address: emailadmin nl Voeg nieuw emailadres toe:
|
||||||
|
add profile emailadmin nl Profiel toevoegen
|
||||||
|
admin dn emailadmin nl admin dn
|
||||||
|
admin password emailadmin nl Admin wachtwoord
|
||||||
|
admin username emailadmin nl Admin gebruikersnaam
|
||||||
|
advanced options emailadmin nl Geavanceerde opties
|
||||||
|
alternate email address emailadmin nl Alternatief emailadres
|
||||||
|
any application emailadmin nl Iedere toepassing
|
||||||
|
any group emailadmin nl Iedere groep
|
||||||
|
any user emailadmin nl iedere gebruiker
|
||||||
|
back to admin/grouplist emailadmin nl Terug naar Beheer/Groepslijst
|
||||||
|
back to admin/userlist emailadmin nl Terug naar Beheer/Gebruikerslijst
|
||||||
|
bad login name or password. emailadmin nl Ongeldige login of paswoord
|
||||||
|
bad or malformed request. server responded: %s emailadmin nl Ongeldig of slecht geformuleerde aanvraag. Server reageerde: %s
|
||||||
|
bad request: %s emailadmin nl Slechte vraag: %s
|
||||||
|
can be used by application emailadmin nl Kan gebruikt worden door toepassing
|
||||||
|
can be used by group emailadmin nl Kan gebruikt worden door groep
|
||||||
|
can be used by user emailadmin nl kan door gebruiker gebruikt worden
|
||||||
|
connection dropped by imap server. emailadmin nl Verbinding viel uit door IMAP server
|
||||||
|
could not complete request. reason given: %s emailadmin nl Kan verzoek niet afmaken. Opgegeven reden: %s
|
||||||
|
could not open secure connection to the imap server. %s : %s. emailadmin nl Kon geen veilige verbinding openen met de IMAP server. %s : %s
|
||||||
|
cram-md5 or digest-md5 requires the auth_sasl package to be installed. emailadmin nl CRAM-MDS of DIGEST-MDS vereist de installatie van het Auth_SASL pakket.
|
||||||
|
cyrus imap server emailadmin nl Cyrus IMAP-server
|
||||||
|
cyrus imap server administration emailadmin nl Cyrus IMAP-serverbeheer
|
||||||
|
default emailadmin nl standaard
|
||||||
|
deliver extern emailadmin nl bezorg extern
|
||||||
|
do not validate certificate emailadmin nl het certificaat niet valideren
|
||||||
|
do you really want to delete this profile emailadmin nl Weet u zeker dat u dit profiel wilt verwijderen
|
||||||
|
do you really want to reset the filter for the profile listing emailadmin nl Wilt u werkelijk het filter voor de profielenlijst opnieuw instellen
|
||||||
|
domainname emailadmin nl Domeinnaam
|
||||||
|
edit email settings emailadmin nl Wijzig emailinstellingen
|
||||||
|
email account active emailadmin nl Emailaccount actief
|
||||||
|
email address emailadmin nl Emailadres
|
||||||
|
email settings common nl Emailinstellingen
|
||||||
|
emailadmin emailadmin nl EmailAdmin
|
||||||
|
emailadmin: group assigned profile common nl eMailAdmin: Groep heeft profiel toegewezen gekregen
|
||||||
|
emailadmin: user assigned profile common nl eMailAdmin: Gebruiker heeft profiel toegewezen gekregen
|
||||||
|
enable cyrus imap server administration emailadmin nl activier Cyrus IMAP serverbeheer
|
||||||
|
enable sieve emailadmin nl activeer Sieve
|
||||||
|
encrypted connection emailadmin nl versleutelde verbinding
|
||||||
|
encryption settings emailadmin nl encryptie instellingen
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin nl Voer uw standaard emaildomein in (uit: gebruiker@domein)
|
||||||
|
error connecting to imap server. %s : %s. emailadmin nl Fout verbinden met de IMAP server. %s : %s
|
||||||
|
error connecting to imap server: [%s] %s. emailadmin nl Fout verbinden met de IMAP server: [%s] %s
|
||||||
|
filtered by account emailadmin nl gefilterd op Account
|
||||||
|
filtered by group emailadmin nl gefilterd op Groep
|
||||||
|
forward also to emailadmin nl Ook doorsturen naar
|
||||||
|
forward email's to emailadmin nl Emails doorsturen naar
|
||||||
|
forward only emailadmin nl Alleen doorsturen
|
||||||
|
global options emailadmin nl Algemene opties
|
||||||
|
if using ssl or tls, you must have the php openssl extension loaded. emailadmin nl Indien SSL of TSL wordt gebruikt, moet u de PHP openssl extensie opgeladen hebben
|
||||||
|
imap admin password admin nl IMAP beheerders wachtwoord
|
||||||
|
imap admin user admin nl IMAP beheerdersgebruiker
|
||||||
|
imap c-client version < 2001 emailadmin nl IMAP C-Client Versie < 2001
|
||||||
|
imap server closed the connection. emailadmin nl IMAP server sloot de verbinding
|
||||||
|
imap server closed the connection. server responded: %s emailadmin nl IMAP Server sloot de verbinding. Server reageerde: %s
|
||||||
|
imap server hostname or ip address emailadmin nl IMAP-server hostnaam of IP-adres
|
||||||
|
imap server logintyp emailadmin nl IMAP-server logintype
|
||||||
|
imap server name emailadmin nl imap server naam
|
||||||
|
imap server port emailadmin nl IMAP-serverpoort
|
||||||
|
imap/pop3 server name emailadmin nl IMAP/POP3-servernaam
|
||||||
|
in mbyte emailadmin nl in MBytes
|
||||||
|
inactive emailadmin nl inactief
|
||||||
|
ldap basedn emailadmin nl LDAP basedn
|
||||||
|
ldap server emailadmin nl LDAP-server
|
||||||
|
ldap server accounts dn emailadmin nl LDAP server accounts DN
|
||||||
|
ldap server admin dn emailadmin nl LDAP server admin DN
|
||||||
|
ldap server admin password emailadmin nl LDAP-server admin wachtwoord
|
||||||
|
ldap server hostname or ip address emailadmin nl LDAP-serverhostnaam of IP-adres
|
||||||
|
ldap settings emailadmin nl LDAP-instellingen
|
||||||
|
leave empty for no quota emailadmin nl Laat leeg voor geen quota
|
||||||
|
mail settings admin nl Mailinstellingen
|
||||||
|
name of organisation emailadmin nl Naam van de Organisatie
|
||||||
|
no alternate email address emailadmin nl geen alternatief emailadres
|
||||||
|
no encryption emailadmin nl geen versleuteling
|
||||||
|
no forwarding email address emailadmin nl geen emailadres om naar door te sturen
|
||||||
|
no message returned. emailadmin nl Geen bericht teruggekomen.
|
||||||
|
no supported imap authentication method could be found. emailadmin nl Geen ondersteunde IMAP authenticatiemethode kon gevonden worden.
|
||||||
|
order emailadmin nl Volgorde
|
||||||
|
organisation emailadmin nl Organisatie
|
||||||
|
plesk can't rename users --> request ignored emailadmin nl Plesk kan gebruikers niet hernoemen --> verzoek genegeerd
|
||||||
|
plesk imap server (courier) emailadmin nl Plesk IMAP Server (Courier)
|
||||||
|
plesk mail script '%1' not found !!! emailadmin nl Plesk mail script '%1' niet gevonden !!!
|
||||||
|
plesk requires passwords to have at least 5 characters and not contain the account-name --> password not set!!! emailadmin nl Plesk vereist dat wachtwoorden minstens 5 karakters bevatten en niet de accountnaam mogen bevatten --> wachtwoord niet gewijzigd !!!
|
||||||
|
plesk smtp-server (qmail) emailadmin nl Plesk SMTP-Server (Qmail)
|
||||||
|
pop3 server hostname or ip address emailadmin nl POP3-server hostnaam of IP-adres
|
||||||
|
pop3 server port emailadmin nl POP3-serverpoort
|
||||||
|
postfix with ldap emailadmin nl Postfix met LDAP
|
||||||
|
profile access rights emailadmin nl profiel toegangsrechten
|
||||||
|
profile is active emailadmin nl profiel is actief
|
||||||
|
profile list emailadmin nl Profiellijst
|
||||||
|
profile name emailadmin nl Profielnaam
|
||||||
|
qmaildotmode emailadmin nl qmaildotmode
|
||||||
|
qouta size in mbyte emailadmin nl quota grootte in MBytes
|
||||||
|
quota settings emailadmin nl Quota-installingen
|
||||||
|
remove emailadmin nl Verwijderen
|
||||||
|
reset filter emailadmin nl filter opnieuw instellen
|
||||||
|
select type of imap server emailadmin nl selecteer IMAP servertype
|
||||||
|
select type of imap/pop3 server emailadmin nl Selecteer IMAP/POP3-servertype
|
||||||
|
select type of smtp server emailadmin nl Selecteer SMTP-servertype
|
||||||
|
server settings emailadmin nl server instellingen
|
||||||
|
sieve server hostname or ip address emailadmin nl Sieve-serverhostnaam of IP-adres
|
||||||
|
sieve server port emailadmin nl Sieve-serverpoort
|
||||||
|
sieve settings emailadmin nl Sieve instellingen
|
||||||
|
smtp authentication emailadmin nl SMTP authenticatie
|
||||||
|
smtp options emailadmin nl SMTP opties
|
||||||
|
smtp server name emailadmin nl SMTP-servernaam
|
||||||
|
smtp settings emailadmin nl SMTP instellingen
|
||||||
|
smtp-server hostname or ip address emailadmin nl SMTP-serverhostnaam of IP-adres
|
||||||
|
smtp-server port emailadmin nl SMTP-serverpoort
|
||||||
|
standard emailadmin nl Standaard
|
||||||
|
standard imap server emailadmin nl Standaard IMAP-server
|
||||||
|
standard pop3 server emailadmin nl Standaard POP3-server
|
||||||
|
standard smtp-server emailadmin nl Standaard SMTP-server
|
||||||
|
the imap server does not appear to support the authentication method selected. please contact your system administrator. emailadmin nl The IMAP server blijkt geen authenticatiemethode te ondersteunen. Gelieve uw systeembeheerder te contacteren.
|
||||||
|
this php has no imap support compiled in!! emailadmin nl Deze PHP heeft geen IMAP ondersteuning verzamelt in!!
|
||||||
|
to use a tls connection, you must be running a version of php 5.1.0 or higher. emailadmin nl Om een TLS verbinding te gebruiken, moet u een versie van PHP 5.1.0 of hoger gebruiken.
|
||||||
|
unexpected response from server to authenticate command. emailadmin nl Onverwachte reactie van de server om de opdracht te AUTHENTICEREN.
|
||||||
|
unexpected response from server to digest-md5 response. emailadmin nl Onverwachte reactie van de server op Digest-MD5 reactie.
|
||||||
|
unexpected response from server to login command. emailadmin nl Onverwachte reactie van de server op LOGIN opdracht.
|
||||||
|
unknown imap response from the server. server responded: %s emailadmin nl Onverwachte IMAP reactie van de server. Server reageerde: %s
|
||||||
|
unsupported action '%1' !!! emailadmin nl Niet-ondersteunde actie '%1'
|
||||||
|
update current email address: emailadmin nl Huidige emailadres bijwerken:
|
||||||
|
use ldap defaults emailadmin nl gebruik LDAP standaard instellingen
|
||||||
|
use predefined username and password defined below emailadmin nl Gebruik voorgekozen gebruikersnaam en wachtwoord zoals hieronder is ingesteld
|
||||||
|
use smtp auth emailadmin nl Gebruik SMTP authenticatie
|
||||||
|
use tls authentication emailadmin nl Gebruik TLS authenticatie
|
||||||
|
use tls encryption emailadmin nl Gebruik TLS-encryptie
|
||||||
|
user can edit forwarding address emailadmin nl Gebruiker kan het doorstuuradres aanpassen
|
||||||
|
username (standard) emailadmin nl gebruikersnaam (standaard)
|
||||||
|
username/password defined by admin emailadmin nl Gebruikersnaam/Wachtwoord ingesteld door beheerder
|
||||||
|
username@domainname (virtual mail manager) emailadmin nl gebruikersnaam@domeinnaam (Virtual MAIL ManaGeR)
|
||||||
|
users can define their own emailaccounts emailadmin nl Gebruikers kunnen hun eigen emailaccounts definiëren
|
||||||
|
users can define their own identities emailadmin nl gebruikers kunnen hun eigen identiteit instellen
|
||||||
|
users can define their own signatures emailadmin nl gebruikers kunnen hun eigen ondertekening instellen
|
||||||
|
vaction messages with start- and end-date require an admin account to be set! emailadmin nl Afwezigheidsmeldingen met een start- en einddatum vereisen dat een beheerders account is ingesteld!
|
||||||
|
virtual mail manager emailadmin nl Virtual MAIL ManaGeR
|
68
emailadmin/lang/egw_no.lang
Normal file
68
emailadmin/lang/egw_no.lang
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
add profile emailadmin no Legg til profil
|
||||||
|
admin dn emailadmin no Admin dn
|
||||||
|
admin password emailadmin no Admin passord
|
||||||
|
admin username emailadmin no Admin brukernavn
|
||||||
|
advanced options emailadmin no Avanserte valg
|
||||||
|
alternate email address emailadmin no Alternativ e-mailadresse
|
||||||
|
cyrus imap server emailadmin no Cyrus IMAP tjener
|
||||||
|
cyrus imap server administration emailadmin no Cyrys IMAP tjeneradministrasjon
|
||||||
|
default emailadmin no standard
|
||||||
|
deliver extern emailadmin no lever eksternt
|
||||||
|
do you really want to delete this profile emailadmin no Ønsker du virkelig å slette denne profilen
|
||||||
|
domainname emailadmin no Domenenavn
|
||||||
|
edit email settings emailadmin no Rediger e-mail oppsett
|
||||||
|
email account active emailadmin no E-mailkonto aktiv
|
||||||
|
email address emailadmin no E-mailadresse
|
||||||
|
enable cyrus imap server administration emailadmin no Tillat Cyrus IMAP-tjener administrasjon
|
||||||
|
enable sieve emailadmin no Tillat Sieve
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin no Registrer ditt standard Emaildomene (fra: bruker@domene)
|
||||||
|
forward also to emailadmin no videresend også til
|
||||||
|
forward email's to emailadmin no videresend e-mailer til
|
||||||
|
forward only emailadmin no bare videresending
|
||||||
|
imap admin password admin no IMAP Administrasjonspassord
|
||||||
|
imap admin user admin no IMAP Administrasjonsbruker
|
||||||
|
imap c-client version < 2001 emailadmin no IMAP C-klient versjon < 2001
|
||||||
|
imap server hostname or ip address emailadmin no Tjenernavn eller IP-adresse for IMAP tjener
|
||||||
|
imap server logintyp emailadmin no IMAP Tjener påloggingstype
|
||||||
|
imap server port emailadmin no IMAP Tjenerport
|
||||||
|
imap/pop3 server name emailadmin no IMAP/POP3 tjenernavn
|
||||||
|
in mbyte emailadmin no i MByte
|
||||||
|
ldap basedn emailadmin no LDAP basedn
|
||||||
|
ldap server emailadmin no LDAP Tjener
|
||||||
|
ldap server accounts dn emailadmin no LDAP Tjenerkonti DN
|
||||||
|
ldap server admin dn emailadmin no LDAP Tjeneradmin. DN
|
||||||
|
ldap server admin password emailadmin no LDAP Tjeneradmin. passord
|
||||||
|
ldap server hostname or ip address emailadmin no Tjenernavn eller IP-adresse for LDAP tjener
|
||||||
|
ldap settings emailadmin no LDAP Instillinger
|
||||||
|
leave empty for no quota emailadmin no La stå tomt for ingen begrensning.
|
||||||
|
mail settings admin no E-post innstillinger
|
||||||
|
name of organisation emailadmin no Navn på organisasjon
|
||||||
|
no alternate email address emailadmin no ingen alternativ e-mailadresse
|
||||||
|
no forwarding email address emailadmin no ingen e-mailadresse for videresending
|
||||||
|
pop3 server hostname or ip address emailadmin no Tjenernavn eller IP-adresse for POP3 tjener
|
||||||
|
pop3 server port emailadmin no POP3 Tjenerport
|
||||||
|
postfix with ldap emailadmin no Postfix med LDAP
|
||||||
|
profile list emailadmin no Profilliste
|
||||||
|
profile name emailadmin no Profilnavn
|
||||||
|
qmaildotmode emailadmin no qmaildotmodus
|
||||||
|
qouta size in mbyte emailadmin no Grense Str. i Mbyte
|
||||||
|
quota settings emailadmin no Grenseinstillinger
|
||||||
|
remove emailadmin no fjern
|
||||||
|
select type of imap/pop3 server emailadmin no Velg type for IMAP/POP3 Tjener
|
||||||
|
select type of smtp server emailadmin no Velg type SMTP Tjener
|
||||||
|
sieve server hostname or ip address emailadmin no Tjenernavn eller IP-adresse for Sieve-tjener
|
||||||
|
sieve server port emailadmin no Sieve tjenerport
|
||||||
|
sieve settings emailadmin no Sieve innstillinger
|
||||||
|
smtp server name emailadmin no SMTP Tjenernavn
|
||||||
|
smtp-server hostname or ip address emailadmin no Tjenernavn eller IP-Adresse for SMTP-Tjener
|
||||||
|
smtp-server port emailadmin no SMTP Tjenerport
|
||||||
|
standard emailadmin no standard
|
||||||
|
standard imap server emailadmin no Standard IMAP tjener
|
||||||
|
standard pop3 server emailadmin no Standard POP3 tjener
|
||||||
|
standard smtp-server emailadmin no Standard SMTP tjener
|
||||||
|
use ldap defaults emailadmin no Bruk LDAP standaroppsett
|
||||||
|
use smtp auth emailadmin no Bruk SMTP autentisering
|
||||||
|
use tls authentication emailadmin no Bruk TLS autentisering
|
||||||
|
use tls encryption emailadmin no Bruk TLS kryptering
|
||||||
|
users can define their own emailaccounts emailadmin no Brukere kan definere egne e-post kontoer
|
||||||
|
virtual mail manager emailadmin no Virtuell Mail Manager
|
108
emailadmin/lang/egw_pl.lang
Normal file
108
emailadmin/lang/egw_pl.lang
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
account '%1' not found !!! emailadmin pl Konto '%1' nie zostało znalezione!
|
||||||
|
add new email address: emailadmin pl Dodaj nowy adres poczty elektronicznej:
|
||||||
|
add profile emailadmin pl Dodaj profil
|
||||||
|
admin dn emailadmin pl DN (nazwa wyróżniająca) administratora
|
||||||
|
admin password emailadmin pl Hasło administratora
|
||||||
|
admin username emailadmin pl Nazwa użytkownika konta administratora
|
||||||
|
advanced options emailadmin pl Ustawienia zaawansowane
|
||||||
|
alternate email address emailadmin pl Alternatywny adres email
|
||||||
|
any application emailadmin pl Dowolna aplikacja
|
||||||
|
any group emailadmin pl Dowolna grupa
|
||||||
|
bad login name or password. emailadmin pl Zła nazwa użytkownika lub hasło
|
||||||
|
bad or malformed request. server responded: %s emailadmin pl Nieprawidłowe lub źle skonstruowane żądane. Serwer odpowiedział: %s
|
||||||
|
bad request: %s emailadmin pl Nieprawidłowe żądanie: %s
|
||||||
|
can be used by application emailadmin pl Może być używane przez aplikację
|
||||||
|
can be used by group emailadmin pl Może byc używane przez grupę
|
||||||
|
connection dropped by imap server. emailadmin pl Połączenie zerwane przez serwer IMAP
|
||||||
|
could not complete request. reason given: %s emailadmin pl Nie udało się zrealizować żądania. Powód: %s
|
||||||
|
could not open secure connection to the imap server. %s : %s. emailadmin pl Nie udało się stworzyć bezpiecznego połączenia do serwera IMAP. %s : %s.
|
||||||
|
cram-md5 or digest-md5 requires the auth_sasl package to be installed. emailadmin pl CRAM-MD5 lub DIGEST-MD5 wymagają, aby pakiet Auth_SASL (Perl) był zainstalowany
|
||||||
|
cyrus imap server emailadmin pl Serwer IMAP Cyrus
|
||||||
|
cyrus imap server administration emailadmin pl Administracja serwerem IMAP Cyrus
|
||||||
|
default emailadmin pl domyślny
|
||||||
|
deliver extern emailadmin pl dostarczanie na zewnątrz
|
||||||
|
do you really want to delete this profile emailadmin pl Czy na pewno chcesz usunąć ten profil?
|
||||||
|
domainname emailadmin pl Nazwa domeny
|
||||||
|
edit email settings emailadmin pl Edytuj ustawienia poczty elektronicznej
|
||||||
|
email account active emailadmin pl Konto poczty aktywne
|
||||||
|
email address emailadmin pl Adres poczty elektronicznej
|
||||||
|
email settings common pl Ustawienia poczty elektronicznej
|
||||||
|
emailadmin emailadmin pl Poczta Elektroniczna - Administracja
|
||||||
|
enable cyrus imap server administration emailadmin pl aktywuj administrację serwerem IMAP Cyrus
|
||||||
|
enable sieve emailadmin pl aktywuj sito (Sieve)
|
||||||
|
encryption settings emailadmin pl ustawienia szyfrowania
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin pl Wprowadź domyślną domenę pocztową (z użytkownik@domena)
|
||||||
|
error connecting to imap server. %s : %s. emailadmin pl Błąd połączenia do serwera IMAP. %s : %s
|
||||||
|
error connecting to imap server: [%s] %s. emailadmin pl Błąd połączenia do serwera IMAP. [%s] %s
|
||||||
|
forward also to emailadmin pl Prześlij również do
|
||||||
|
forward email's to emailadmin pl Prześlij wiadomości do
|
||||||
|
forward only emailadmin pl Prześlij tylko
|
||||||
|
global options emailadmin pl Ustawienia globalne
|
||||||
|
if using ssl or tls, you must have the php openssl extension loaded. emailadmin pl Jeżeli korzystasz z SSL lub TLS, musisz zapewnić obsługę OpenSSL w PHP.
|
||||||
|
imap admin password admin pl Hasło administratora IMAP
|
||||||
|
imap admin user admin pl Login administratora IMAP
|
||||||
|
imap c-client version < 2001 emailadmin pl Wersja C-Client IMAP < 2001
|
||||||
|
imap server closed the connection. emailadmin pl Serwer IMAP zakończył połączenie.
|
||||||
|
imap server closed the connection. server responded: %s emailadmin pl Serwer IMAP zakończył połączenie. Jego odpowiedź: %s
|
||||||
|
imap server hostname or ip address emailadmin pl Nazwa hosta lub IP serwera IMAP
|
||||||
|
imap server logintyp emailadmin pl Sposób logowania do serwera IMAP
|
||||||
|
imap server port emailadmin pl Port serwera IMAP
|
||||||
|
imap/pop3 server name emailadmin pl Nazwa serwera IMAP/POP3
|
||||||
|
in mbyte emailadmin pl w megabajtach
|
||||||
|
ldap basedn emailadmin pl Bazowy DN w LDAP
|
||||||
|
ldap server emailadmin pl Serwer LDAP
|
||||||
|
ldap server accounts dn emailadmin pl DN dla kont w LDAP
|
||||||
|
ldap server admin dn emailadmin pl DN administratora w LDAP
|
||||||
|
ldap server admin password emailadmin pl Hasło administratora serwera LDAP
|
||||||
|
ldap server hostname or ip address emailadmin pl Nazwa hosta lub IP serwera LDAP
|
||||||
|
ldap settings emailadmin pl Ustawienia LDAP
|
||||||
|
leave empty for no quota emailadmin pl zostaw puste aby wyłączyć quota
|
||||||
|
mail settings admin pl Ustawienia poczty elektronicznej
|
||||||
|
name of organisation emailadmin pl Nazwa lub organizacja
|
||||||
|
no alternate email address emailadmin pl brak zapasowego adresu e-mail
|
||||||
|
no encryption emailadmin pl brak szyfrowania
|
||||||
|
no forwarding email address emailadmin pl brak adresu poczty przesyłanej
|
||||||
|
no message returned. emailadmin pl Nie otrzymano wiadomości.
|
||||||
|
no supported imap authentication method could be found. emailadmin pl Nie znaleziono obsługiwanej metody autentykacji dla IMAP
|
||||||
|
order emailadmin pl Porządek
|
||||||
|
organisation emailadmin pl Organizacja
|
||||||
|
pop3 server hostname or ip address emailadmin pl Nazwa hosta lub IP serwera POP3
|
||||||
|
pop3 server port emailadmin pl Port serwera POP3
|
||||||
|
postfix with ldap emailadmin pl Postfix z LDAP
|
||||||
|
profile access rights emailadmin pl prawa dostępu do profilu
|
||||||
|
profile list emailadmin pl Lista profili
|
||||||
|
profile name emailadmin pl Nazwa Profilu
|
||||||
|
qouta size in mbyte emailadmin pl rozmiar quoty w megabajtach
|
||||||
|
quota settings emailadmin pl ustawnienia quoty
|
||||||
|
remove emailadmin pl Usuń
|
||||||
|
select type of imap/pop3 server emailadmin pl Wybierz rodzaj serwera IMAP/POP3
|
||||||
|
select type of smtp server emailadmin pl Wybierz rodzaj serwera SMTP
|
||||||
|
server settings emailadmin pl Ustawienia serwera
|
||||||
|
smtp authentication emailadmin pl Autentykacja SMTP
|
||||||
|
smtp options emailadmin pl Opcje SMTP
|
||||||
|
smtp server name emailadmin pl Nazwa serwera SMTP
|
||||||
|
smtp settings emailadmin pl Ustawienia SMTP
|
||||||
|
smtp-server hostname or ip address emailadmin pl Nazwa hosta lub IP serwera SMTP
|
||||||
|
smtp-server port emailadmin pl Port serwera SMTP
|
||||||
|
standard emailadmin pl Standard
|
||||||
|
standard imap server emailadmin pl Standardowy serwer IMAP
|
||||||
|
standard pop3 server emailadmin pl Standardowy serwer POP3
|
||||||
|
standard smtp-server emailadmin pl Standardowy serwer SMTP
|
||||||
|
the imap server does not appear to support the authentication method selected. please contact your system administrator. emailadmin pl Serwer IMAP nie obsługuje wskazanej metody autentykacji. Proszę skontaktować się z administratorem.
|
||||||
|
this php has no imap support compiled in!! emailadmin pl Interpreter PHP nie posiada obsługi IMAP!
|
||||||
|
to use a tls connection, you must be running a version of php 5.1.0 or higher. emailadmin pl Aby skorzystać z połączenia TLS, musisz posiadać wersję PHP 5.1.0 lub wyższą.
|
||||||
|
unexpected response from server to authenticate command. emailadmin pl Niespodziewana odpowiedź serwera na polecenie AUTHENTICATE.
|
||||||
|
unexpected response from server to digest-md5 response. emailadmin pl Niespodziewana odpowiedź serwera na zapytanie Digest-MD5
|
||||||
|
unexpected response from server to login command. emailadmin pl Niespodziewana odpowiedź serwera na polecenie LOGIN.
|
||||||
|
unknown imap response from the server. server responded: %s emailadmin pl Nieznana odpowiedź z serwera IMAP. Serwer przesłał: %s
|
||||||
|
unsupported action '%1' !!! emailadmin pl Operacja nieobsługiwana '%1'!
|
||||||
|
update current email address: emailadmin pl Uaktualnij bieżący adres pocztowy
|
||||||
|
use ldap defaults emailadmin pl Skorzystaj z domyślnych wartości LDAP
|
||||||
|
use smtp auth emailadmin pl Skorzystaj z autentykacji SMTP
|
||||||
|
use tls authentication emailadmin pl Skorzystaj z autentykacji TLS
|
||||||
|
use tls encryption emailadmin pl Skorzystaj z szyfrowania TLS
|
||||||
|
user can edit forwarding address emailadmin pl Użytkownik może zmieniać adres przekazywania
|
||||||
|
username (standard) emailadmin pl login (standardowo)
|
||||||
|
username@domainname (virtual mail manager) emailadmin pl login@domena (wirtualny zarządca kont)
|
||||||
|
users can define their own emailaccounts emailadmin pl Użytkownicy mogą definiować swoje własne konta poczty elektronicznej
|
||||||
|
virtual mail manager emailadmin pl Wirtualny Serwer Pocztowy - zarządca
|
138
emailadmin/lang/egw_pt-br.lang
Normal file
138
emailadmin/lang/egw_pt-br.lang
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
account '%1' not found !!! emailadmin pt-br Conta '%1' não encontrada !!!
|
||||||
|
add new email address: emailadmin pt-br Adicionar novo e-mail:
|
||||||
|
add profile emailadmin pt-br Adicionar Perfil
|
||||||
|
admin dn emailadmin pt-br dn do administrador
|
||||||
|
admin password emailadmin pt-br senha do administrador
|
||||||
|
admin username emailadmin pt-br nome de usuário do administrador
|
||||||
|
advanced options emailadmin pt-br opções avançadas
|
||||||
|
alternate email address emailadmin pt-br endereço de e-mail alternativo
|
||||||
|
any application emailadmin pt-br qualquer aplicação
|
||||||
|
any group emailadmin pt-br qualquer grupo
|
||||||
|
any user emailadmin pt-br qualquer usuário
|
||||||
|
back to admin/grouplist emailadmin pt-br Voltar para Administração/Lista de Grupos
|
||||||
|
back to admin/userlist emailadmin pt-br Voltar para Administração/Lista de Usuários
|
||||||
|
bad login name or password. emailadmin pt-br Nome de usuário ou senha inválido(s).
|
||||||
|
bad or malformed request. server responded: %s emailadmin pt-br Solicitação inválida. Resposta do servidor: %s
|
||||||
|
bad request: %s emailadmin pt-br Solicitação inválida: %s
|
||||||
|
can be used by application emailadmin pt-br pode ser usado pela aplicação
|
||||||
|
can be used by group emailadmin pt-br pode ser usado pelo grupo
|
||||||
|
can be used by user emailadmin pt-br pode ser usado pelo usuário
|
||||||
|
connection dropped by imap server. emailadmin pt-br Conexão interrompida pelo servidor IMAP.
|
||||||
|
could not complete request. reason given: %s emailadmin pt-br Não foi possível completar a solicitação. Resposta do servidor: %s
|
||||||
|
could not open secure connection to the imap server. %s : %s. emailadmin pt-br Não foi possível abrir conexão segura com o servidor IMAP. %s : %s.
|
||||||
|
cram-md5 or digest-md5 requires the auth_sasl package to be installed. emailadmin pt-br CRAM-MD5 ou DIGEST-MD5 necessitam que o pacote Auth_SASL esteja instalado.
|
||||||
|
cyrus imap server emailadmin pt-br Servidor Cyrus IMAP
|
||||||
|
cyrus imap server administration emailadmin pt-br Administração do Servidor Cyrus IMAP
|
||||||
|
default emailadmin pt-br padrão
|
||||||
|
deliver extern emailadmin pt-br entrega externa
|
||||||
|
do not validate certificate emailadmin pt-br não validar certificado
|
||||||
|
do you really want to delete this profile emailadmin pt-br Tem certeza que deseja remover esse perfil?
|
||||||
|
do you really want to reset the filter for the profile listing emailadmin pt-br Tem certeza que deseja reiniciar o filtro para a listagem do perfil
|
||||||
|
domainname emailadmin pt-br nome do domínio
|
||||||
|
edit email settings emailadmin pt-br editar configurações de e-mail
|
||||||
|
email account active emailadmin pt-br conta de e-mail ativa
|
||||||
|
email address emailadmin pt-br endrereço de e-mail
|
||||||
|
email settings common pt-br Configurações do E-mail
|
||||||
|
emailadmin emailadmin pt-br Administração do E-Mail
|
||||||
|
emailadmin: group assigned profile common pt-br Administração de eMail: Perfil de Grupo
|
||||||
|
emailadmin: user assigned profile common pt-br Administração de eMail: Perfil de Usuário
|
||||||
|
enable cyrus imap server administration emailadmin pt-br habilitar administração do Servidor Cyrus IMAP
|
||||||
|
enable sieve emailadmin pt-br habilitar Sieve
|
||||||
|
encrypted connection emailadmin pt-br conexão criptografada
|
||||||
|
encryption settings emailadmin pt-br configurações de criptografia
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin pt-br Entre com o domínio de e-mail padrão (de: usuario@dominio)
|
||||||
|
error connecting to imap server. %s : %s. emailadmin pt-br Erro conectando ao servidor IMAP. %s : %s.
|
||||||
|
error connecting to imap server: [%s] %s. emailadmin pt-br Erro conectando ao servidor IMAP: [%s] %s.
|
||||||
|
filtered by account emailadmin pt-br filtrado por Conta
|
||||||
|
filtered by group emailadmin pt-br filtrado por Grupo
|
||||||
|
forward also to emailadmin pt-br encaminhar também para
|
||||||
|
forward email's to emailadmin pt-br encaminhar mensagens para
|
||||||
|
forward only emailadmin pt-br encaminhar somente
|
||||||
|
global options emailadmin pt-br opções globais
|
||||||
|
if using ssl or tls, you must have the php openssl extension loaded. emailadmin pt-br Se estiver usando SSL ou TLS, você deverá ter a extensão PHP 'openssl' carretada.
|
||||||
|
imap admin password admin pt-br Senha do administrador IMAP
|
||||||
|
imap admin user admin pt-br Usuário administrador do IMAP
|
||||||
|
imap c-client version < 2001 emailadmin pt-br IMAP C-Cliente Versão < 2001
|
||||||
|
imap server closed the connection. emailadmin pt-br O servidor IMAP fechou a conexão.
|
||||||
|
imap server closed the connection. server responded: %s emailadmin pt-br O servidor IMAP fechou a conexão. Resposta do servidor: %s
|
||||||
|
imap server hostname or ip address emailadmin pt-br Nome ou IP do servidor IMAP
|
||||||
|
imap server logintyp emailadmin pt-br Tipo de login do servidor IMAP
|
||||||
|
imap server name emailadmin pt-br nome do servidor imap
|
||||||
|
imap server port emailadmin pt-br Porta do servidor IMAP
|
||||||
|
imap/pop3 server name emailadmin pt-br Nome do servidor IMAP/POP3
|
||||||
|
in mbyte emailadmin pt-br em Mbytes
|
||||||
|
inactive emailadmin pt-br inativo
|
||||||
|
ldap basedn emailadmin pt-br DN Base do LDAP
|
||||||
|
ldap server emailadmin pt-br Servidor LDAP
|
||||||
|
ldap server accounts dn emailadmin pt-br Contas DN de servidores LDAP
|
||||||
|
ldap server admin dn emailadmin pt-br Administrador DN de servidor LDAP
|
||||||
|
ldap server admin password emailadmin pt-br Senha do administrador DN de servidor LDAP
|
||||||
|
ldap server hostname or ip address emailadmin pt-br Nome ou endereço IP do servidor LDAP
|
||||||
|
ldap settings emailadmin pt-br Configurações do LDAP
|
||||||
|
leave empty for no quota emailadmin pt-br deixe em branco para nenhuma quota
|
||||||
|
mail settings admin pt-br Configurações de E-Mail
|
||||||
|
name of organisation emailadmin pt-br Nome da organização
|
||||||
|
no alternate email address emailadmin pt-br sem conta de e-mail alternativa
|
||||||
|
no encryption emailadmin pt-br sem criptografia
|
||||||
|
no forwarding email address emailadmin pt-br sem conta de e-mail para encaminhar
|
||||||
|
no message returned. emailadmin pt-br Nenhuma mensagem retornada.
|
||||||
|
no supported imap authentication method could be found. emailadmin pt-br Nenhum método de autenticação IMAP suportado pôde ser encontrado.
|
||||||
|
order emailadmin pt-br ordem
|
||||||
|
organisation emailadmin pt-br organização
|
||||||
|
plesk can't rename users --> request ignored emailadmin pt-br Plesk não pode renomear usuários --> solicitação ignorada
|
||||||
|
plesk imap server (courier) emailadmin pt-br Servidor IMAP Plesk (Courier)
|
||||||
|
plesk mail script '%1' not found !!! emailadmin pt-br Script de e-mail Plesk '%1' não encontrado !!!
|
||||||
|
plesk requires passwords to have at least 5 characters and not contain the account-name --> password not set!!! emailadmin pt-br Plesk exige que senhas tenha no mínimo 5 caracteres e não contenham o nome da conta --> senha NÃO configurada!!!
|
||||||
|
plesk smtp-server (qmail) emailadmin pt-br Servidor SMTP Plesk (Qmail)
|
||||||
|
pop3 server hostname or ip address emailadmin pt-br Nome ou endereço IP do servidor POP3
|
||||||
|
pop3 server port emailadmin pt-br Porta do servidor POP3
|
||||||
|
postfix with ldap emailadmin pt-br Postfix com LDAP
|
||||||
|
profile access rights emailadmin pt-br direito de acesso aos perfis
|
||||||
|
profile is active emailadmin pt-br perfil está ativo
|
||||||
|
profile list emailadmin pt-br Lista de perfis
|
||||||
|
profile name emailadmin pt-br Nome do perfil
|
||||||
|
qmaildotmode emailadmin pt-br modo dos arquivos qmail (.qmail)
|
||||||
|
qouta size in mbyte emailadmin pt-br tamanho da quota em MBytes
|
||||||
|
quota settings emailadmin pt-br configurações de quota
|
||||||
|
remove emailadmin pt-br remover
|
||||||
|
reset filter emailadmin pt-br reiniciar filtro
|
||||||
|
select type of imap server emailadmin pt-br selecione o tipo de servidor IMAP
|
||||||
|
select type of imap/pop3 server emailadmin pt-br Selecione o tipo de servidor IMAP/POP3
|
||||||
|
select type of smtp server emailadmin pt-br Selecione o tipo de servidor SMTP
|
||||||
|
server settings emailadmin pt-br configurações do servidor
|
||||||
|
sieve server hostname or ip address emailadmin pt-br Nome ou endereço IP do servidor Sieve
|
||||||
|
sieve server port emailadmin pt-br Porta do Servidor Sieve
|
||||||
|
sieve settings emailadmin pt-br Configurações Sieve
|
||||||
|
smtp authentication emailadmin pt-br autenticação smtp
|
||||||
|
smtp options emailadmin pt-br opções smtp
|
||||||
|
smtp server name emailadmin pt-br Nome do Servidor SMTP
|
||||||
|
smtp settings emailadmin pt-br configurações SMTP
|
||||||
|
smtp-server hostname or ip address emailadmin pt-br Nome ou endereço IP do servidor SMTP
|
||||||
|
smtp-server port emailadmin pt-br Porta do servidor SMTP
|
||||||
|
standard emailadmin pt-br Padrão
|
||||||
|
standard imap server emailadmin pt-br Servidor IMAP padrão
|
||||||
|
standard pop3 server emailadmin pt-br Servidor POP3 padrão
|
||||||
|
standard smtp-server emailadmin pt-br Servidor SMTP padrão
|
||||||
|
the imap server does not appear to support the authentication method selected. please contact your system administrator. emailadmin pt-br O servidor IMAP não parece suportar o método de autenticação selecionado. Por favor contacte o administrador do seu sistema.
|
||||||
|
this php has no imap support compiled in!! emailadmin pt-br Este PHP não tem suporte a IMAP compilado nele!
|
||||||
|
to use a tls connection, you must be running a version of php 5.1.0 or higher. emailadmin pt-br Para usar uma conexão TLS, você deve estar rodando PHP versão 5.1.0 ou maior.
|
||||||
|
unexpected response from server to authenticate command. emailadmin pt-br Resposta inesperada do servidor para o comando AUTHENTICATE.
|
||||||
|
unexpected response from server to digest-md5 response. emailadmin pt-br Resposta inesperada do servidor para a resposta Digest-MD5.
|
||||||
|
unexpected response from server to login command. emailadmin pt-br Resposta inesperada do servidor para o comando LOGIN.
|
||||||
|
unknown imap response from the server. server responded: %s emailadmin pt-br Resposta desconhecida do servidor IMAP. Resposta do servidor: %s
|
||||||
|
unsupported action '%1' !!! emailadmin pt-br Ação não suportada: '%1' !!!
|
||||||
|
update current email address: emailadmin pt-br Atualizar e-mail atual:
|
||||||
|
use ldap defaults emailadmin pt-br usar padrões LDAP
|
||||||
|
use predefined username and password defined below emailadmin pt-br Usar usuário e senha pré-definidos abaixo
|
||||||
|
use smtp auth emailadmin pt-br usar SMTP Autenticado
|
||||||
|
use tls authentication emailadmin pt-br Usar autenticação TLS
|
||||||
|
use tls encryption emailadmin pt-br Usar encriptação TLS
|
||||||
|
user can edit forwarding address emailadmin pt-br usuário pode editar endereço de encaminhamento
|
||||||
|
username (standard) emailadmin pt-br nome do usuário (padrão)
|
||||||
|
username/password defined by admin emailadmin pt-br Nome de usuário/Senha definidos pelo administrador
|
||||||
|
username@domainname (virtual mail manager) emailadmin pt-br nomedousuario@nomedodominio (Gerenciador Virtual Mail)
|
||||||
|
users can define their own emailaccounts emailadmin pt-br Os usuários podem definir sua próprias contas de correio
|
||||||
|
users can define their own identities emailadmin pt-br usuários podem definir suas próprias identidades
|
||||||
|
users can define their own signatures emailadmin pt-br usuários podem definir suas próprias assinaturas
|
||||||
|
vaction messages with start- and end-date require an admin account to be set! emailadmin pt-br Mensagens de ausência com datas de início e término necessitam de uma conta de administrador para serem definidas!
|
||||||
|
virtual mail manager emailadmin pt-br Gerenciador Virtual Mail
|
85
emailadmin/lang/egw_pt.lang
Normal file
85
emailadmin/lang/egw_pt.lang
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
add profile emailadmin pt Adicionar perfil
|
||||||
|
admin dn emailadmin pt DN do administrador
|
||||||
|
admin password emailadmin pt Senha do administrador
|
||||||
|
admin passwort emailadmin pt Senha do administrador
|
||||||
|
admin username emailadmin pt Nome do utilizador do administrador
|
||||||
|
advanced options emailadmin pt Opções avançadas
|
||||||
|
alternate email address emailadmin pt Endereço de correio electrónico alternativo
|
||||||
|
any application emailadmin pt Qualquer aplicação
|
||||||
|
any group emailadmin pt Qualquer grupo
|
||||||
|
can be used by application emailadmin pt Pode ser utilizado pela aplicação
|
||||||
|
can be used by group emailadmin pt Pode ser utilizado pelo grupo
|
||||||
|
cyrus imap server emailadmin pt Servidor IMAP Cyrus
|
||||||
|
cyrus imap server administration emailadmin pt Administração do servidor IMAP Cyrus
|
||||||
|
default emailadmin pt Por omissão
|
||||||
|
deliver extern emailadmin pt Entrega externa
|
||||||
|
do you really want to delete this profile emailadmin pt Deseja relamente eliminar este perfil
|
||||||
|
domainname emailadmin pt Nome de domínio
|
||||||
|
edit email settings emailadmin pt Editar configurações do correio electrónico
|
||||||
|
email account active emailadmin pt Conta de correio electrónico activa
|
||||||
|
email address emailadmin pt Endereço de correio electrónico
|
||||||
|
enable cyrus imap server administration emailadmin pt Activar administração do servidor IMAP Cyrus
|
||||||
|
enable sieve emailadmin pt Activar Sieve
|
||||||
|
encryption settings emailadmin pt Definições de cifragem
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin pt Insira o seu domínio de correio electrónico por omissão (de: utilizador@domínio)
|
||||||
|
forward also to emailadmin pt Reencaminhar também para
|
||||||
|
forward email's to emailadmin pt Reencaminhar mensagens para
|
||||||
|
forward only emailadmin pt Reencaminhar apenas
|
||||||
|
global options emailadmin pt Opções gerais
|
||||||
|
imap admin password admin pt Senha do administrador IMAP
|
||||||
|
imap admin user admin pt Utilizador do administrador IMAP
|
||||||
|
imap c-client version < 2001 emailadmin pt Versão C-Client IMAP < 2001
|
||||||
|
imap server hostname or ip address emailadmin pt Nome do servidor ou endereço IP do servidor IMAP
|
||||||
|
imap server logintyp emailadmin pt Tipo de acesso do servidor IMAP
|
||||||
|
imap server port emailadmin pt Porto do servidor IMAP
|
||||||
|
imap/pop3 server name emailadmin pt Nome do servidor IMAP/POP3
|
||||||
|
in mbyte emailadmin pt em MBytes
|
||||||
|
ldap basedn emailadmin pt Base DN LDAP
|
||||||
|
ldap server emailadmin pt Servidor LDAP
|
||||||
|
ldap server accounts dn emailadmin pt DN das contas de servidor LDAP
|
||||||
|
ldap server admin dn emailadmin pt DN do administrador de servidor LDAP
|
||||||
|
ldap server admin password emailadmin pt Senha do administrador de servidor LDAP
|
||||||
|
ldap server hostname or ip address emailadmin pt Nome do servidor ou endereço IP do servidor LDAP
|
||||||
|
ldap settings emailadmin pt Configurações do LDAP
|
||||||
|
leave empty for no quota emailadmin pt Deixar vazio para quota sem limites
|
||||||
|
mail settings admin pt Configurações do correio electrónico
|
||||||
|
name of organisation emailadmin pt Nome da empresa
|
||||||
|
no alternate email address emailadmin pt Sem endereço de correio electrónico alternativo
|
||||||
|
no forwarding email address emailadmin pt Sem endereço de correio electrónico para reencaminhamento
|
||||||
|
order emailadmin pt Ordem
|
||||||
|
organisation emailadmin pt Empresa
|
||||||
|
pop3 server hostname or ip address emailadmin pt Nome do servidor ou endereço IP do servidor POP3
|
||||||
|
pop3 server port emailadmin pt Porto de servidor POP3
|
||||||
|
postfix with ldap emailadmin pt Postfix com LDAP
|
||||||
|
profile access rights emailadmin pt Perfil de direitos de acesso
|
||||||
|
profile list emailadmin pt Lista de perfis
|
||||||
|
profile name emailadmin pt Nome do perfil
|
||||||
|
qmaildotmode emailadmin pt Quota do correio electrónico no modo Idot
|
||||||
|
qouta size in mbyte emailadmin pt Quota em MBytes
|
||||||
|
quota settings emailadmin pt Configurações da quota
|
||||||
|
remove emailadmin pt Remover
|
||||||
|
select type of imap/pop3 server emailadmin pt Seleccionar tipo de servidor IMAP/POP3
|
||||||
|
select type of smtp server emailadmin pt Seleccionar tipo de servidor SMTP
|
||||||
|
server settings emailadmin pt Definições do servidor
|
||||||
|
sieve server hostname or ip address emailadmin pt Nome do servidor ou endereço IP do servidor Sieve
|
||||||
|
sieve server port emailadmin pt Porto do servidor Sieve
|
||||||
|
sieve settings emailadmin pt Configurações do SIeve
|
||||||
|
smtp authentication emailadmin pt Autenticação SMTP
|
||||||
|
smtp options emailadmin pt Opções do SMTP
|
||||||
|
smtp server name emailadmin pt Nome do servidor SMTP
|
||||||
|
smtp settings emailadmin pt Definições do SMTP
|
||||||
|
smtp-server hostname or ip address emailadmin pt Nome do servidor ou endereço IP do servidor SMTP
|
||||||
|
smtp-server port emailadmin pt Porto do servidor SMTP
|
||||||
|
standard emailadmin pt Por omissão
|
||||||
|
standard imap server emailadmin pt Servidor IMAP por omissão
|
||||||
|
standard pop3 server emailadmin pt Servidor POP3 por omissão
|
||||||
|
standard smtp-server emailadmin pt Servidor SMTP por omissão
|
||||||
|
use ldap defaults emailadmin pt Utilizar definições por omissão do LDAP
|
||||||
|
use smtp auth emailadmin pt Utilizar autenticação SMTP
|
||||||
|
use tls authentication emailadmin pt Utilizar autenticação TLS
|
||||||
|
use tls encryption emailadmin pt Utilizar cifra TLS
|
||||||
|
user can edit forwarding address emailadmin pt O utilizador pode editar endereços reencaminhados
|
||||||
|
username (standard) emailadmin pt Nome de utilizador (por omissão)
|
||||||
|
username@domainname (virtual mail manager) emailadmin pt utilizador@dominio (Gestor virtual de correio electrónico)
|
||||||
|
users can define their own emailaccounts emailadmin pt Os utilizadores podem definir as suas contas de correio electrónico
|
||||||
|
virtual mail manager emailadmin pt Gestor virtual de correio electrónico
|
134
emailadmin/lang/egw_ru.lang
Normal file
134
emailadmin/lang/egw_ru.lang
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
account '%1' not found !!! emailadmin ru Учетная запись '%1' не найдена !!!
|
||||||
|
add new email address: emailadmin ru Добавить новый адрес эл. почты:
|
||||||
|
add profile emailadmin ru Добавить Профиль
|
||||||
|
admin dn emailadmin ru DN администратора
|
||||||
|
admin password emailadmin ru Пароль администратора
|
||||||
|
admin username emailadmin ru Имя входа администратора
|
||||||
|
advanced options emailadmin ru Расширенные настройки
|
||||||
|
alternate email address emailadmin ru Добавочный адрес эл. почты
|
||||||
|
any application emailadmin ru Любое приложение
|
||||||
|
any group emailadmin ru Любая группа
|
||||||
|
any user emailadmin ru любой пользователь
|
||||||
|
back to admin/userlist emailadmin ru Назад к Администрированию/Списку пользователей
|
||||||
|
bad login name or password. emailadmin ru Неверное имя пользователя или пароль.
|
||||||
|
bad or malformed request. server responded: %s emailadmin ru Неверный или нераспознанный запрос. Ответ Сервера: %s
|
||||||
|
bad request: %s emailadmin ru Неверный запрос: %s
|
||||||
|
can be used by application emailadmin ru Может быть использовано приложением
|
||||||
|
can be used by group emailadmin ru Может быть использовано группой
|
||||||
|
can be used by user emailadmin ru может быть использовано пользователем
|
||||||
|
connection dropped by imap server. emailadmin ru Соединение разорвано сервером IMAP
|
||||||
|
could not complete request. reason given: %s emailadmin ru Не могу завершить запрос. Возможная Причина: %s
|
||||||
|
could not open secure connection to the imap server. %s : %s. emailadmin ru Не могу установть защищенное соединение с сервером IMAP. %s : %s.
|
||||||
|
cram-md5 or digest-md5 requires the auth_sasl package to be installed. emailadmin ru CRAM-MD5 и DIGEST-MD5 требуют установленного пакета Auth_SASL.
|
||||||
|
cyrus imap server emailadmin ru IMAP сервер Cyrus
|
||||||
|
cyrus imap server administration emailadmin ru администрирование IMAP сервера Cyrus
|
||||||
|
default emailadmin ru по-умолчанию
|
||||||
|
deliver extern emailadmin ru доставить внешний (снаружи?)
|
||||||
|
do not validate certificate emailadmin ru не проверять сертификат
|
||||||
|
do you really want to delete this profile emailadmin ru Вы уверенны, что хотите удалить этот Профиль
|
||||||
|
do you really want to reset the filter for the profile listing emailadmin ru Вы уверены что хотите очистить фильтр для создания списка Профилей
|
||||||
|
domainname emailadmin ru ИмяДомена
|
||||||
|
edit email settings emailadmin ru Редактировать настройки почты
|
||||||
|
email account active emailadmin ru Учетная запись включена
|
||||||
|
email address emailadmin ru Адрес эл. почты
|
||||||
|
email settings common ru Настройки почты
|
||||||
|
emailadmin emailadmin ru АдминПочты
|
||||||
|
enable cyrus imap server administration emailadmin ru включить администрирование IMAP сервера Cyrus
|
||||||
|
enable sieve emailadmin ru Включить Sieve
|
||||||
|
encrypted connection emailadmin ru зашифрованное соединение
|
||||||
|
encryption settings emailadmin ru Настройки шифрования
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin ru Укажите ваш почтовый домен по умолчанию (от: user@domain)
|
||||||
|
error connecting to imap server. %s : %s. emailadmin ru Ошибка соединения с сервером IMAP. %s : %s.
|
||||||
|
error connecting to imap server: [%s] %s. emailadmin ru Ошибка соединения с сервером IMAP: [%s] %s.
|
||||||
|
filtered by account emailadmin ru отфильтровано по Учетной записи
|
||||||
|
forward also to emailadmin ru Направить также в
|
||||||
|
forward email's to emailadmin ru Направлять письма в
|
||||||
|
forward only emailadmin ru Только перенаправлять
|
||||||
|
global options emailadmin ru Общие настройки
|
||||||
|
if using ssl or tls, you must have the php openssl extension loaded. emailadmin ru При использовании SSL или TLS, у вас должен быть PHP с загруженным расширением openssl
|
||||||
|
imap admin password admin ru пароль администратора IMAP
|
||||||
|
imap admin user admin ru Пользователь IMAP с правами администратора(?)
|
||||||
|
imap c-client version < 2001 emailadmin ru Версия C-клиента IMAP < 2001
|
||||||
|
imap server closed the connection. emailadmin ru Сервер IMAP разорвал соединение.
|
||||||
|
imap server closed the connection. server responded: %s emailadmin ru Сервер IMAP разорвал соединение. Сервер сообщил: %s
|
||||||
|
imap server hostname or ip address emailadmin ru Имя сервера IMAP или его ip-адрес
|
||||||
|
imap server logintyp emailadmin ru Тип входа сервера IMAP
|
||||||
|
imap server name emailadmin ru Название сервера imap
|
||||||
|
imap server port emailadmin ru порт сервера IMAP
|
||||||
|
imap/pop3 server name emailadmin ru название сервера IMAP/POP3
|
||||||
|
in mbyte emailadmin ru в МБайтах
|
||||||
|
inactive emailadmin ru неактивно
|
||||||
|
ldap basedn emailadmin ru начальный DN LDAP
|
||||||
|
ldap server emailadmin ru сервер LDAP
|
||||||
|
ldap server accounts dn emailadmin ru DN учетных записей сервера LDAP
|
||||||
|
ldap server admin dn emailadmin ru DN администратора сервера LDAP
|
||||||
|
ldap server admin password emailadmin ru Пароль администратора сервера LDAP
|
||||||
|
ldap server hostname or ip address emailadmin ru Имя сервера LDAP или его ip-адрес
|
||||||
|
ldap settings emailadmin ru Настройки LDAP
|
||||||
|
leave empty for no quota emailadmin ru оставте пустым для отключения квотирования
|
||||||
|
mail settings admin ru Настройки почты
|
||||||
|
name of organisation emailadmin ru Название организации
|
||||||
|
no alternate email address emailadmin ru дополнительный эл. адрес не используется
|
||||||
|
no encryption emailadmin ru без шифрования
|
||||||
|
no forwarding email address emailadmin ru без адреса перенаправления
|
||||||
|
no message returned. emailadmin ru И никакого сообщения в ответ
|
||||||
|
no supported imap authentication method could be found. emailadmin ru Не ожет быть найден поддерживаемый метод авторизации IMAP.
|
||||||
|
order emailadmin ru Упорядочить
|
||||||
|
organisation emailadmin ru Организация
|
||||||
|
plesk can't rename users --> request ignored emailadmin ru Plesk не может переименовать пользователей --> запрос проигнорирован
|
||||||
|
plesk imap server (courier) emailadmin ru Сервер IMAP Plesk (Courier)
|
||||||
|
plesk mail script '%1' not found !!! emailadmin ru Не найден скрипт '%1' почты Plesk!!!
|
||||||
|
plesk requires passwords to have at least 5 characters and not contain the account-name --> password not set!!! emailadmin ru Plesk требует длины пароля не менее 5 символов не содержащий имени аккаунта --> пароль НЕ установлен!!!
|
||||||
|
plesk smtp-server (qmail) emailadmin ru Plesk SMTP сервер (Qmail)
|
||||||
|
pop3 server hostname or ip address emailadmin ru Имя компьютера или ip-адрес сервера POP3
|
||||||
|
pop3 server port emailadmin ru Порт сервера POP3
|
||||||
|
postfix with ldap emailadmin ru Postfix с LDAP
|
||||||
|
profile access rights emailadmin ru права доступа к профилю
|
||||||
|
profile is active emailadmin ru профиль активен
|
||||||
|
profile list emailadmin ru Список профиля
|
||||||
|
profile name emailadmin ru Название профиля
|
||||||
|
qmaildotmode emailadmin ru режим qmaildot
|
||||||
|
qouta size in mbyte emailadmin ru Размер квоты МБайт
|
||||||
|
quota settings emailadmin ru Настройки квотирования
|
||||||
|
remove emailadmin ru Удалить
|
||||||
|
reset filter emailadmin ru очистить фильтр
|
||||||
|
select type of imap server emailadmin ru выбор типа сервера IMAP
|
||||||
|
select type of imap/pop3 server emailadmin ru Выбор типасервера IMAP/POP3
|
||||||
|
select type of smtp server emailadmin ru Выбор типа сервера SMTP
|
||||||
|
server settings emailadmin ru Настройки сервера
|
||||||
|
sieve server hostname or ip address emailadmin ru Имя компьютера или IP-адрес сервера Sieve
|
||||||
|
sieve server port emailadmin ru Порт сервера Sieve
|
||||||
|
sieve settings emailadmin ru Настройки Sieve
|
||||||
|
smtp authentication emailadmin ru Авторизация SMTP
|
||||||
|
smtp options emailadmin ru Параметры SMTP
|
||||||
|
smtp server name emailadmin ru Имя сервера SMTP
|
||||||
|
smtp settings emailadmin ru Установки SMTP
|
||||||
|
smtp-server hostname or ip address emailadmin ru Имя компьютера или IP-адрес сервера SMTP
|
||||||
|
smtp-server port emailadmin ru Порт сервера SMTP
|
||||||
|
standard emailadmin ru Стандартный
|
||||||
|
standard imap server emailadmin ru Стандартный IMAP сервер
|
||||||
|
standard pop3 server emailadmin ru Стандартный POP3 сервер
|
||||||
|
standard smtp-server emailadmin ru Стандартный SMTP сервер
|
||||||
|
the imap server does not appear to support the authentication method selected. please contact your system administrator. emailadmin ru Сервер IMAP не сообщил о поддержке выбранного метода авторизации. Пожалуйста свяжитесь со своим системным администратором.
|
||||||
|
this php has no imap support compiled in!! emailadmin ru Эта версия PHP собрана без поддержки IMAP!!
|
||||||
|
to use a tls connection, you must be running a version of php 5.1.0 or higher. emailadmin ru Для использования соединения TLS, у вас должен быть запущен PHP 5.1.0 или выше.
|
||||||
|
unexpected response from server to authenticate command. emailadmin ru Непредусмотренный ответ сервера на команду AUTHENTICATE.
|
||||||
|
unexpected response from server to digest-md5 response. emailadmin ru Непредусмотренный ответ сервера на сигнал Digest-MD5.
|
||||||
|
unexpected response from server to login command. emailadmin ru Непредусмотренный ответ сервера на команду LOGIN.
|
||||||
|
unknown imap response from the server. server responded: %s emailadmin ru Неизвестный IMAP-ответ от сервера. Сервер сообщил: %s
|
||||||
|
unsupported action '%1' !!! emailadmin ru Неподдерживаемое действие '%1' !!!
|
||||||
|
update current email address: emailadmin ru Обновить текущий адрес эл.почты:
|
||||||
|
use ldap defaults emailadmin ru Использовать настройки LDAP по-умолчанию
|
||||||
|
use predefined username and password defined below emailadmin ru Использовать предопределенное имя пользователя и пароль указанный ниже
|
||||||
|
use smtp auth emailadmin ru Использовать авторизацию SMTP
|
||||||
|
use tls authentication emailadmin ru Использовать авторизацию TLS
|
||||||
|
use tls encryption emailadmin ru Исползовать шифрование TLS
|
||||||
|
user can edit forwarding address emailadmin ru Ползователь может редактировать адрес перенаправления
|
||||||
|
username (standard) emailadmin ru имя пользователя (стандартное)
|
||||||
|
username/password defined by admin emailadmin ru Имя пользователя/Пароль установлены администратором
|
||||||
|
username@domainname (virtual mail manager) emailadmin ru username@domainname (Менеджер Виртуальной ПОЧТЫ)
|
||||||
|
users can define their own emailaccounts emailadmin ru Пользователь может назначать свои собственные учетные записи эл. почты.
|
||||||
|
users can define their own identities emailadmin ru пользователи могут устанавливать свои собственные данные идентификации
|
||||||
|
users can define their own signatures emailadmin ru пользователи могут устанавливать свои собственные подписи
|
||||||
|
vaction messages with start- and end-date require an admin account to be set! emailadmin ru Vaction-сообщения (сообщения об отпуске? вакансиях? высвобождении? незанятых периодах? вовсе сообщения от объекта Java VAction? сообщения виртуальных действий?) с датами начала и окончания требуют установленной учетной записи администратора!
|
||||||
|
virtual mail manager emailadmin ru Менеджер Виртуальной ПОЧТЫ
|
139
emailadmin/lang/egw_sk.lang
Normal file
139
emailadmin/lang/egw_sk.lang
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
account '%1' not found !!! emailadmin sk Účet '%1' sa nenašiel !!!
|
||||||
|
add new email address: emailadmin sk Pridať novú E-mailovú adresu:
|
||||||
|
add profile emailadmin sk Pridať profil
|
||||||
|
admin dn emailadmin sk Správcov dn
|
||||||
|
admin password emailadmin sk Heslo správcu
|
||||||
|
admin username emailadmin sk Používateľské meno správcu
|
||||||
|
advanced options emailadmin sk Pokročilé možnosti
|
||||||
|
alternate email address emailadmin sk Alternatívna E-mailová adresa
|
||||||
|
any application emailadmin sk Ktorákoľvek aplikácia
|
||||||
|
any group emailadmin sk Ktorákoľvek skupina
|
||||||
|
any user emailadmin sk Ktorýkoľvek používateľ
|
||||||
|
back to admin/grouplist emailadmin sk Späť na Správu/Skupiny
|
||||||
|
back to admin/userlist emailadmin sk Späť na Správu/Používateľov
|
||||||
|
bad login name or password. emailadmin sk Chybné prihlasovacie meno alebo heslo.
|
||||||
|
bad or malformed request. server responded: %s emailadmin sk Chybná požiadavka. Odpoveď servera: %s
|
||||||
|
bad request: %s emailadmin sk Chybná požiadavka: %s
|
||||||
|
can be used by application emailadmin sk môže byť použité aplikáciou
|
||||||
|
can be used by group emailadmin sk môže byť použité skupinou
|
||||||
|
can be used by user emailadmin sk môže byť použité používateľom
|
||||||
|
connection dropped by imap server. emailadmin sk Spojenie prerušené IMAP serverom.
|
||||||
|
could not complete request. reason given: %s emailadmin sk Nemožno dokončiť požiadavku. Dôvod: %s
|
||||||
|
could not open secure connection to the imap server. %s : %s. emailadmin sk Nepodarilo sa nadviazať zabezpečené pripojenie k IMAP serveru. %s : %s.
|
||||||
|
cram-md5 or digest-md5 requires the auth_sasl package to be installed. emailadmin sk CRAM-MD5 alebo DIGEST-MD5 vyžaduje, aby bol nainštalovaný balík Auth_SASL.
|
||||||
|
cyrus imap server emailadmin sk Cyrus IMAP Server
|
||||||
|
cyrus imap server administration emailadmin sk Správa servera Cyrus IMAP
|
||||||
|
default emailadmin sk predvolené
|
||||||
|
deliver extern emailadmin sk doručiť extern
|
||||||
|
do not validate certificate emailadmin sk neoveriť certifikát
|
||||||
|
do you really want to delete this profile emailadmin sk Naozaj chcete odstrániť tento Profil
|
||||||
|
do you really want to reset the filter for the profile listing emailadmin sk Naozaj chcete vynulovať filter pre výpis profilu?
|
||||||
|
domainname emailadmin sk názov domény
|
||||||
|
edit email settings emailadmin sk upraviť nastavenia E-mailu
|
||||||
|
email account active emailadmin sk E-mailový účet je aktívny
|
||||||
|
email address emailadmin sk E-mailová adresa
|
||||||
|
email settings common sk Nastavenia E-mailu
|
||||||
|
emailadmin emailadmin sk EMailAdmin
|
||||||
|
emailadmin: group assigned profile common sk eMailAdmin: skupinovo priradený Profil
|
||||||
|
emailadmin: user assigned profile common sk eMailAdmin: používateľsky priradený Profil
|
||||||
|
enable cyrus imap server administration emailadmin sk zapnúť správu servera Cyrus IMAP
|
||||||
|
enable sieve emailadmin sk zapnúť Sieve
|
||||||
|
encrypted connection emailadmin sk šifrované spojenie
|
||||||
|
encryption settings emailadmin sk nastavenia šifrovania
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin sk Zadajte vašu predvolenú doménu (z tvaru: user@domain)
|
||||||
|
error connecting to imap server. %s : %s. emailadmin sk Chyba počas pripájania k IMAP serveru. %s : %s.
|
||||||
|
error connecting to imap server: [%s] %s. emailadmin sk Chyba počas pripájania k IMAP serveru: [%s] %s.
|
||||||
|
filtered by account emailadmin sk filtrované podľa Účtu
|
||||||
|
filtered by group emailadmin sk filtrované podľa Skupiny
|
||||||
|
forward also to emailadmin sk preposlať taktiež (komu)
|
||||||
|
forward email's to emailadmin sk preposlať emaily (kam)
|
||||||
|
forward only emailadmin sk preposlať iba
|
||||||
|
global options emailadmin sk Globálne možnosti
|
||||||
|
if using ssl or tls, you must have the php openssl extension loaded. emailadmin sk Ak používate SSL alebo TLS, musíte mať nahraté rozšírenie PHP openssl.
|
||||||
|
imap admin password admin sk heslo správcu IMAP
|
||||||
|
imap admin user admin sk používateľ pre správu IMAP
|
||||||
|
imap c-client version < 2001 emailadmin sk IMAP C-klient verzia < 2001
|
||||||
|
imap server closed the connection. emailadmin sk IMAP server ukončil spojenie.
|
||||||
|
imap server closed the connection. server responded: %s emailadmin sk IMAP server ukončil spojenie. Odpoveď servera: %s
|
||||||
|
imap server hostname or ip address emailadmin sk názov (hostname) alebo IP adresa IMAP servera
|
||||||
|
imap server logintyp emailadmin sk typ prihlásenia IMAP servera
|
||||||
|
imap server name emailadmin sk názov IMAP servera
|
||||||
|
imap server port emailadmin sk port IMAP servera
|
||||||
|
imap/pop3 server name emailadmin sk názov IMAP/POP3 servera
|
||||||
|
in mbyte emailadmin sk v Megabajtoch
|
||||||
|
inactive emailadmin sk neaktívne
|
||||||
|
ldap basedn emailadmin sk LDAP basedn
|
||||||
|
ldap server emailadmin sk LDAP server
|
||||||
|
ldap server accounts dn emailadmin sk DN účtov LDAP servera
|
||||||
|
ldap server admin dn emailadmin sk DN správcu LDAP servera
|
||||||
|
ldap server admin password emailadmin sk heslo správcu LDAP servera
|
||||||
|
ldap server hostname or ip address emailadmin sk názov (hostname) alebo IP adresa LDAP servera
|
||||||
|
ldap settings emailadmin sk nastavenia LDAP
|
||||||
|
leave empty for no quota emailadmin sk ak nechcete kvóty, ponechajte prázdne
|
||||||
|
mail settings admin sk nastavenia Pošty
|
||||||
|
name of organisation emailadmin sk Názov organizácie
|
||||||
|
no alternate email address emailadmin sk žiadna alternatívna E-mailová adresa
|
||||||
|
no encryption emailadmin sk bez šifrovania
|
||||||
|
no forwarding email address emailadmin sk žiadna emailová adresa pre preposielanie
|
||||||
|
no message returned. emailadmin sk Žiadne správy sa nevrátili.
|
||||||
|
no supported imap authentication method could be found. emailadmin sk Nenašiel som žiadnu podporovanú overovaciu metódu IMAP.
|
||||||
|
order emailadmin sk Poradie
|
||||||
|
organisation emailadmin sk Organizácia
|
||||||
|
plesk can't rename users --> request ignored emailadmin sk Plesk používatelia sa nedajú premenovať --> požiadavka ignorovaná
|
||||||
|
plesk imap server (courier) emailadmin sk Plesk IMAP Server (Courier)
|
||||||
|
plesk mail script '%1' not found !!! emailadmin sk Plesk mail script '%1' sa nenašlo !!!
|
||||||
|
plesk requires passwords to have at least 5 characters and not contain the account-name --> password not set!!! emailadmin sk Plesk vyžaduje, aby heslá mali aspoň 5 znakov a neobsahovali názov účtu --> heslo NEBOLO nastavené!!!
|
||||||
|
plesk smtp-server (qmail) emailadmin sk Plesk SMTP-Server (qmail)
|
||||||
|
pop3 server hostname or ip address emailadmin sk názov (hostname) alebo IP adresa POP3 servera
|
||||||
|
pop3 server port emailadmin sk port POP3 servera
|
||||||
|
postfix with ldap emailadmin sk Postfix + LDAP
|
||||||
|
profile access rights emailadmin sk prístupové práva profilu
|
||||||
|
profile is active emailadmin sk profil je aktívny
|
||||||
|
profile list emailadmin sk Zoznam profilov
|
||||||
|
profile name emailadmin sk Názov profilu
|
||||||
|
qmaildotmode emailadmin sk qmail bodkový režim
|
||||||
|
qouta size in mbyte emailadmin sk Neľkosť kvóty v Megabajtoch
|
||||||
|
quota settings emailadmin sk Nastavenia kvóty
|
||||||
|
remove emailadmin sk Odstrániť
|
||||||
|
reset filter emailadmin sk vynulovať filter
|
||||||
|
select type of imap server emailadmin sk Vyberte typ IMAP servera
|
||||||
|
select type of imap/pop3 server emailadmin sk Vyberte typ IMAP/POP3 servera
|
||||||
|
select type of smtp server emailadmin sk Vyberte typ SMTP servera
|
||||||
|
send using this email-address emailadmin sk odoslať pomocou tejto e-mailovej adresy
|
||||||
|
server settings emailadmin sk Nastavenia servera
|
||||||
|
sieve server hostname or ip address emailadmin sk Názov (hostname) alebo IP Sieve servera
|
||||||
|
sieve server port emailadmin sk Nort Sieve servera
|
||||||
|
sieve settings emailadmin sk Nastavenia Sieve
|
||||||
|
smtp authentication emailadmin sk SMTP overovanie
|
||||||
|
smtp options emailadmin sk SMTP možnosti
|
||||||
|
smtp server name emailadmin sk Názov SMTP servera
|
||||||
|
smtp settings emailadmin sk SMTP nastavenia
|
||||||
|
smtp-server hostname or ip address emailadmin sk názov (hostname) alebo IP adresa SMTP servera
|
||||||
|
smtp-server port emailadmin sk port SMTP servera
|
||||||
|
standard emailadmin sk Štandard
|
||||||
|
standard imap server emailadmin sk Štandardný IMAP server
|
||||||
|
standard pop3 server emailadmin sk Štandardný POP3 server
|
||||||
|
standard smtp-server emailadmin sk Štandardný SMTP server
|
||||||
|
the imap server does not appear to support the authentication method selected. please contact your system administrator. emailadmin sk Tento IMAP server, zdá sa, nepodporuje zvolenú overovaciu metódu. Prosím kontaktujte správcu systému.
|
||||||
|
this php has no imap support compiled in!! emailadmin sk Toto PHP nemá zakompilovanú podporu pre IMAP !!
|
||||||
|
to use a tls connection, you must be running a version of php 5.1.0 or higher. emailadmin sk Ak chcete používať pripojenie TLS, musíte fungovať na verzii PHP 5.1.0 alebo vyššej.
|
||||||
|
unexpected response from server to authenticate command. emailadmin sk Neočakávaná odpoveď od servera na príkaz AUTENTICATE.
|
||||||
|
unexpected response from server to digest-md5 response. emailadmin sk Neočakávaná odpoveď od servera na Digest-MD5 odpoveď.
|
||||||
|
unexpected response from server to login command. emailadmin sk Neočakávaná odpoveď od servera na príkaz LOGIN.
|
||||||
|
unknown imap response from the server. server responded: %s emailadmin sk Neznáma IMAP odpoveď od servera. Server odpovedal: %s
|
||||||
|
unsupported action '%1' !!! emailadmin sk Nepodporovaná akcia '%1' !!!
|
||||||
|
update current email address: emailadmin sk Aktualizovať súčasnú E-mailovú adresu:
|
||||||
|
use ldap defaults emailadmin sk Použiť predvolené hodnoty LDAP
|
||||||
|
use predefined username and password defined below emailadmin sk Použiť preddefinované používateľské meno a heslo, definované nižšie
|
||||||
|
use smtp auth emailadmin sk Použiť SMTP overovanie
|
||||||
|
use tls authentication emailadmin sk Použiť TLS overovanie
|
||||||
|
use tls encryption emailadmin sk Použiť TLS šifrovanie
|
||||||
|
user can edit forwarding address emailadmin sk Používateľ môže upraviť adresu preposielania
|
||||||
|
username (standard) emailadmin sk používateľské meno (štandardné)
|
||||||
|
username/password defined by admin emailadmin sk Používateľské meno/heslo definované správcom
|
||||||
|
username@domainname (virtual mail manager) emailadmin sk používateľ@doména (Virtuálny Mail ManaGeR)
|
||||||
|
users can define their own emailaccounts emailadmin sk Používatelia môžu definovať ich vlastné E-mailové účty
|
||||||
|
users can define their own identities emailadmin sk Používatelia môžu definovať svoje vlastné identity
|
||||||
|
users can define their own signatures emailadmin sk Používatelia môžu definovať svoje vlastné podpisy
|
||||||
|
vaction messages with start- and end-date require an admin account to be set! emailadmin sk Správy v neprítomnosti s počiatočným a koncovým dátumom vyžadujú, aby bol nastavený účet správcu!
|
||||||
|
virtual mail manager emailadmin sk Virtuálny MAIL ManaGeR
|
138
emailadmin/lang/egw_sl.lang
Normal file
138
emailadmin/lang/egw_sl.lang
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
account '%1' not found !!! emailadmin sl Račun '%1' ni bil najden!
|
||||||
|
add new email address: emailadmin sl Dodaj nov e-naslov:
|
||||||
|
add profile emailadmin sl Dodaj profil
|
||||||
|
admin dn emailadmin sl Oskrbnikov dn
|
||||||
|
admin password emailadmin sl Oskrbnikovo geslo
|
||||||
|
admin username emailadmin sl Oskrbnikovo uporabniško ime
|
||||||
|
advanced options emailadmin sl Napredne izbire
|
||||||
|
alternate email address emailadmin sl Alternativen E-naslov
|
||||||
|
any application emailadmin sl Katerakoli aplikacija
|
||||||
|
any group emailadmin sl Katerakoli skupina
|
||||||
|
any user emailadmin sl Katerikoli uporabnik
|
||||||
|
back to admin/grouplist emailadmin sl Nazaj na Admin/Seznam skupin
|
||||||
|
back to admin/userlist emailadmin sl Nazaj na Admin/Seznam uporabnikov
|
||||||
|
bad login name or password. emailadmin sl Napačno uporabniško ime ali geslo.
|
||||||
|
bad or malformed request. server responded: %s emailadmin sl Napačna ali napačno oblikovana zahteva. Odgovor strežnika: %s
|
||||||
|
bad request: %s emailadmin sl Napačna zahteva: %s
|
||||||
|
can be used by application emailadmin sl Je lahko uporabljen iz aplikacije
|
||||||
|
can be used by group emailadmin sl Je lahko uporabljen iz skupine
|
||||||
|
can be used by user emailadmin sl Lahko uporablja uporabnik
|
||||||
|
connection dropped by imap server. emailadmin sl Strežnik IMAP je prekinil povezavo.
|
||||||
|
could not complete request. reason given: %s emailadmin sl Ne morem dokončati zahteve. Podan vzrok: %s
|
||||||
|
could not open secure connection to the imap server. %s : %s. emailadmin sl Ne morem odpreti varne povezave s strežnikom IMAP. %s : %s.
|
||||||
|
cram-md5 or digest-md5 requires the auth_sasl package to be installed. emailadmin sl CRAM-MD5 ali DIGEST-MD5 zahteva, da je nameščen paket Auth_SASL.
|
||||||
|
cyrus imap server emailadmin sl Cyrus IMAP strežnik
|
||||||
|
cyrus imap server administration emailadmin sl Upravljanje Cyrus IMAP strežnika
|
||||||
|
default emailadmin sl Privzeto
|
||||||
|
deliver extern emailadmin sl Zunanja dostava
|
||||||
|
do not validate certificate emailadmin sl Ne preverjaj certifikata
|
||||||
|
do you really want to delete this profile emailadmin sl Ali res želite izbrisati ta profil?
|
||||||
|
do you really want to reset the filter for the profile listing emailadmin sl Res želite ponastaviti filter za listanje profilov?
|
||||||
|
domainname emailadmin sl Ime domene
|
||||||
|
edit email settings emailadmin sl Uredi nastavitve E-pošte
|
||||||
|
email account active emailadmin sl Nabiralnik E-pošte je aktiven
|
||||||
|
email address emailadmin sl E-naslov
|
||||||
|
email settings common sl Nastavitve E-pošte
|
||||||
|
emailadmin emailadmin sl EMailAdmin
|
||||||
|
emailadmin: group assigned profile common sl eMailAdmin: profil, dodeljen skupini
|
||||||
|
emailadmin: user assigned profile common sl eMailAdmin: profil, dodeljen uprabniku
|
||||||
|
enable cyrus imap server administration emailadmin sl Omogoči upravljanje Cyrus IMAP strežnika
|
||||||
|
enable sieve emailadmin sl Omogoči Sieve
|
||||||
|
encrypted connection emailadmin sl Kodirana povezava
|
||||||
|
encryption settings emailadmin sl Nastavitve šifriranja
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin sl Vnesite privzeto domeno (oblika: uporabnik@domena)
|
||||||
|
error connecting to imap server. %s : %s. emailadmin sl Napaka pri povezavi s strežnikom IMAP. %s: %s.
|
||||||
|
error connecting to imap server: [%s] %s. emailadmin sl Napaka pri povezavi s strežnikom IMAP: [%s] %s.
|
||||||
|
filtered by account emailadmin sl Filtrirano s strani računa
|
||||||
|
filtered by group emailadmin sl Filtrirano s strani skupine
|
||||||
|
forward also to emailadmin sl Posreduj tudi
|
||||||
|
forward email's to emailadmin sl Posreduj sporočila k
|
||||||
|
forward only emailadmin sl Samo posreduj
|
||||||
|
global options emailadmin sl Globalne možnosti
|
||||||
|
if using ssl or tls, you must have the php openssl extension loaded. emailadmin sl Če uporabljate SSL ali TLS, morate imeti naloženo razširitev PHP openssl
|
||||||
|
imap admin password admin sl Geslo oskrbnika IMAPa
|
||||||
|
imap admin user admin sl Uporabniško ime oskrbnika IMAP-a
|
||||||
|
imap c-client version < 2001 emailadmin sl IMAP C-klient različica pred 2001
|
||||||
|
imap server closed the connection. emailadmin sl Strežnik IMAP je prekinil povezavo.
|
||||||
|
imap server closed the connection. server responded: %s emailadmin sl Strežnik IMAP je prekinil povezavo. Odgovor strežnika: %s
|
||||||
|
imap server hostname or ip address emailadmin sl Ime ali IP strežnika IMAP
|
||||||
|
imap server logintyp emailadmin sl Način prijave strežnik IMAP
|
||||||
|
imap server name emailadmin sl Ime strežnika IMAP
|
||||||
|
imap server port emailadmin sl Vrata strežnika IMAP
|
||||||
|
imap/pop3 server name emailadmin sl Ime strežnika IMAP/POP3
|
||||||
|
in mbyte emailadmin sl v MB
|
||||||
|
inactive emailadmin sl Neaktivno
|
||||||
|
ldap basedn emailadmin sl Osnovni DN LDAP
|
||||||
|
ldap server emailadmin sl Strežnik LDAP
|
||||||
|
ldap server accounts dn emailadmin sl DN računov LDAP strežnika
|
||||||
|
ldap server admin dn emailadmin sl Oskrbnikov DN LDAP strežnika
|
||||||
|
ldap server admin password emailadmin sl Geslo oskrbnika LDAP strežnika
|
||||||
|
ldap server hostname or ip address emailadmin sl Ime ali IP strežnika LDAP
|
||||||
|
ldap settings emailadmin sl Nastavitve LDAP
|
||||||
|
leave empty for no quota emailadmin sl Pustite prazno za neomejeno
|
||||||
|
mail settings admin sl Nastavitve E-pošte
|
||||||
|
name of organisation emailadmin sl Ime organizacije
|
||||||
|
no alternate email address emailadmin sl Ni alternativnega E-naslova
|
||||||
|
no encryption emailadmin sl Brez šifriranja
|
||||||
|
no forwarding email address emailadmin sl Ni E-naslova za posredovanje
|
||||||
|
no message returned. emailadmin sl Ni vrnjenega sporočila.
|
||||||
|
no supported imap authentication method could be found. emailadmin sl Ni najdena metoda avtentikacije IMAP.
|
||||||
|
order emailadmin sl Vrstni red
|
||||||
|
organisation emailadmin sl Organizacija
|
||||||
|
plesk can't rename users --> request ignored emailadmin sl Plesk ne more preimenovati uporabnikov --> zahteva preslišana
|
||||||
|
plesk imap server (courier) emailadmin sl Strežnik Plesk IMAP (Courier)
|
||||||
|
plesk mail script '%1' not found !!! emailadmin sl Poštni skript Plesk '%1' ni bil najden!
|
||||||
|
plesk requires passwords to have at least 5 characters and not contain the account-name --> password not set!!! emailadmin sl Plesk zahteva geslo, dolga najmanj 5 znakov in ne sme vsebovati imena računa --> geslo ni bilo nastavljeno!
|
||||||
|
plesk smtp-server (qmail) emailadmin sl Strežnik Plesk IMAP (Qmail)
|
||||||
|
pop3 server hostname or ip address emailadmin sl Ime ali IP POP3 strežnika
|
||||||
|
pop3 server port emailadmin sl Vrata POP3 strežnika
|
||||||
|
postfix with ldap emailadmin sl Končnica pri LDAP
|
||||||
|
profile access rights emailadmin sl Pravice dostopa do profila
|
||||||
|
profile is active emailadmin sl Profil je aktiven
|
||||||
|
profile list emailadmin sl Seznam profilov
|
||||||
|
profile name emailadmin sl Ime profila
|
||||||
|
qmaildotmode emailadmin sl Način za qmaildot
|
||||||
|
qouta size in mbyte emailadmin sl Kvota v MB
|
||||||
|
quota settings emailadmin sl Nastavitvev kvote
|
||||||
|
remove emailadmin sl Odstrani
|
||||||
|
reset filter emailadmin sl Ponastavi filter
|
||||||
|
select type of imap server emailadmin sl Izberite vrsto strežnika IMAP
|
||||||
|
select type of imap/pop3 server emailadmin sl Izberite tip IMAP/POP3 strežnika
|
||||||
|
select type of smtp server emailadmin sl Izberite tip SMTP strežnika
|
||||||
|
server settings emailadmin sl Nastavitve strežnika
|
||||||
|
sieve server hostname or ip address emailadmin sl IP ali naslov strežnika za sito (Sieve)
|
||||||
|
sieve server port emailadmin sl Vrata strežnika za sito (Sieve)
|
||||||
|
sieve settings emailadmin sl Nastavitve sita (Sieve)
|
||||||
|
smtp authentication emailadmin sl SMTP avtentikacija
|
||||||
|
smtp options emailadmin sl SMTP možnosti
|
||||||
|
smtp server name emailadmin sl ime SMTP strežnika
|
||||||
|
smtp settings emailadmin sl SMTP nastavitve
|
||||||
|
smtp-server hostname or ip address emailadmin sl Ime ali IP SMTP strežnika
|
||||||
|
smtp-server port emailadmin sl Vrata SMTP strežnika
|
||||||
|
standard emailadmin sl Standarden
|
||||||
|
standard imap server emailadmin sl Standardni IMAP strežnik
|
||||||
|
standard pop3 server emailadmin sl Standardni POP3 strežnik
|
||||||
|
standard smtp-server emailadmin sl Standardni SMTP strežnik
|
||||||
|
the imap server does not appear to support the authentication method selected. please contact your system administrator. emailadmin sl Strežnik IMAP ne podpira izbrane metode avtentikacije. Kontaktirajte sistemskega upravitelja.
|
||||||
|
this php has no imap support compiled in!! emailadmin sl Ta PHP ne vsebuje podpore za IMAP!
|
||||||
|
to use a tls connection, you must be running a version of php 5.1.0 or higher. emailadmin sl Če želite uporabljati povezavo TLS, morate imeti nameščeno različico PHP 5.1.0 ali višjo.
|
||||||
|
unexpected response from server to authenticate command. emailadmin sl Nepričakovan odgovor strežnika na ukaz AUTHENTICATE.
|
||||||
|
unexpected response from server to digest-md5 response. emailadmin sl Nepričakovan odgovor strežnika na odgovor Digest-MD5.
|
||||||
|
unexpected response from server to login command. emailadmin sl Nepričakovan odgovor strežnika na ukaz LOGIN.
|
||||||
|
unknown imap response from the server. server responded: %s emailadmin sl Neznan odgovor IMAP s strani strežnika. Odgovor strežnika: %s
|
||||||
|
unsupported action '%1' !!! emailadmin sl Nepodprto dejanje '%1'!
|
||||||
|
update current email address: emailadmin sl Posodobi trenutni e-naslov:
|
||||||
|
use ldap defaults emailadmin sl Uporabi privzeto za LDAP
|
||||||
|
use predefined username and password defined below emailadmin sl Uporabi spodnje, vnaprej določeno uporabniško ime in geslo
|
||||||
|
use smtp auth emailadmin sl Uporabi SMTP avtentikacijo
|
||||||
|
use tls authentication emailadmin sl Uporabi TLS avtentikacijo
|
||||||
|
use tls encryption emailadmin sl Uporabi TLS enkripcijo
|
||||||
|
user can edit forwarding address emailadmin sl Uporabnik lahko določa posredovalni naslov
|
||||||
|
username (standard) emailadmin sl Uporabnik (standardno)
|
||||||
|
username/password defined by admin emailadmin sl Uporabniško ime/geslo dodeljeno s strani administratorja
|
||||||
|
username@domainname (virtual mail manager) emailadmin sl uporabnik@domena (Virtual MAIL ManaGeR)
|
||||||
|
users can define their own emailaccounts emailadmin sl Uporabniki lahko določajo lastne E-poštne predale
|
||||||
|
users can define their own identities emailadmin sl Uporabniki lahko določijo lastne identitete
|
||||||
|
users can define their own signatures emailadmin sl Uporabniki lahko določijo lastne podpise
|
||||||
|
vaction messages with start- and end-date require an admin account to be set! emailadmin sl Nastavitev sporočila o odsotnosti z začetnim in končnim datumom zahteva nastavljen administratorski račun!
|
||||||
|
virtual mail manager emailadmin sl Virtualni upravljalec E-pošte
|
68
emailadmin/lang/egw_sv.lang
Normal file
68
emailadmin/lang/egw_sv.lang
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
add profile emailadmin sv Skapa profil
|
||||||
|
admin dn emailadmin sv Admin dn
|
||||||
|
admin password emailadmin sv Admin lösenord
|
||||||
|
admin username emailadmin sv Admin användare
|
||||||
|
advanced options emailadmin sv Avanserade alternativ
|
||||||
|
alternate email address emailadmin sv Alternerande e-post adress
|
||||||
|
cyrus imap server emailadmin sv Cyrus IMAP Server
|
||||||
|
cyrus imap server administration emailadmin sv Cyrus IMAP server administration
|
||||||
|
default emailadmin sv Standard
|
||||||
|
deliver extern emailadmin sv Leverera extern
|
||||||
|
do you really want to delete this profile emailadmin sv Vill du verkligen radera profilen?
|
||||||
|
domainname emailadmin sv Domän namn
|
||||||
|
edit email settings emailadmin sv Redigera e-post alternativ
|
||||||
|
email account active emailadmin sv Aktivt e-post konto
|
||||||
|
email address emailadmin sv E-post adress
|
||||||
|
enable cyrus imap server administration emailadmin sv Aktivera Cyrus IMAP server administration
|
||||||
|
enable sieve emailadmin sv Aktivera Sieve
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin sv Standard e-post domän (från: user@domain)
|
||||||
|
forward also to emailadmin sv Vidarebefodra även till
|
||||||
|
forward email's to emailadmin sv Vidarebefodra e-post till
|
||||||
|
forward only emailadmin sv Vidarebefodra endast
|
||||||
|
imap admin password admin sv IMAP admin lösenord
|
||||||
|
imap admin user admin sv IMAP admin användare
|
||||||
|
imap c-client version < 2001 emailadmin sv IMAP C-Client version < 2001
|
||||||
|
imap server hostname or ip address emailadmin sv IMAP server hostnamn eller IP adress
|
||||||
|
imap server logintyp emailadmin sv IMAP server inloggnings typ
|
||||||
|
imap server port emailadmin sv IMAP server port
|
||||||
|
imap/pop3 server name emailadmin sv IMAP/POP3 server namn
|
||||||
|
in mbyte emailadmin sv i MByte
|
||||||
|
ldap basedn emailadmin sv LDAP basedn
|
||||||
|
ldap server emailadmin sv LDAP server
|
||||||
|
ldap server accounts dn emailadmin sv LDAP server konton DN
|
||||||
|
ldap server admin dn emailadmin sv LDAP server admin DN
|
||||||
|
ldap server admin password emailadmin sv LDAP server admin lösenord
|
||||||
|
ldap server hostname or ip address emailadmin sv LDAP server hostnamn eller IP adress
|
||||||
|
ldap settings emailadmin sv LDAP alternativ
|
||||||
|
leave empty for no quota emailadmin sv Lämna tomt för ingen kvot
|
||||||
|
mail settings admin sv E-post alternativ
|
||||||
|
name of organisation emailadmin sv Organisations namn
|
||||||
|
no alternate email address emailadmin sv Ingen alternerande e-post adress
|
||||||
|
no forwarding email address emailadmin sv Ingen e-post vidarebefodrings adress
|
||||||
|
pop3 server hostname or ip address emailadmin sv POP3 server hostnamn eller IP adress
|
||||||
|
pop3 server port emailadmin sv POP3 server port
|
||||||
|
postfix with ldap emailadmin sv Postfix med LDAP
|
||||||
|
profile list emailadmin sv Profil lista
|
||||||
|
profile name emailadmin sv Profil namn
|
||||||
|
qmaildotmode emailadmin sv qmaildotmode
|
||||||
|
qouta size in mbyte emailadmin sv Kvot storlek i Mb
|
||||||
|
quota settings emailadmin sv Kvot alternativ
|
||||||
|
remove emailadmin sv Radera
|
||||||
|
select type of imap/pop3 server emailadmin sv Välj typ av IMAP/POP3 server
|
||||||
|
select type of smtp server emailadmin sv Välj typ av SMTP Server
|
||||||
|
sieve server hostname or ip address emailadmin sv Sieve server hostnamn eller IP adress
|
||||||
|
sieve server port emailadmin sv Sieve server port
|
||||||
|
sieve settings emailadmin sv Sieve alternativ
|
||||||
|
smtp server name emailadmin sv SMTP server namn
|
||||||
|
smtp-server hostname or ip address emailadmin sv SMTP server hostnamn eller IP adress
|
||||||
|
smtp-server port emailadmin sv SMTP server port
|
||||||
|
standard emailadmin sv Standard
|
||||||
|
standard imap server emailadmin sv Standard IMAP server
|
||||||
|
standard pop3 server emailadmin sv Standard POP3 server
|
||||||
|
standard smtp-server emailadmin sv Standard SMTP server
|
||||||
|
use ldap defaults emailadmin sv använd LDAP standarder
|
||||||
|
use smtp auth emailadmin sv Använd SMTP autentisering
|
||||||
|
use tls authentication emailadmin sv Använd TLS autentisering
|
||||||
|
use tls encryption emailadmin sv Använd TLS kryptering
|
||||||
|
users can define their own emailaccounts emailadmin sv Användare kan definiera egna epost konton?
|
||||||
|
virtual mail manager emailadmin sv Virtuell E-post administration
|
121
emailadmin/lang/egw_zh-tw.lang
Normal file
121
emailadmin/lang/egw_zh-tw.lang
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
account '%1' not found !!! emailadmin zh-tw 找不到帳號 '%1'!
|
||||||
|
add new email address: emailadmin zh-tw 新增信箱:
|
||||||
|
add profile emailadmin zh-tw 新增資料
|
||||||
|
admin dn emailadmin zh-tw 管理 dn
|
||||||
|
admin password emailadmin zh-tw 管理密碼
|
||||||
|
admin username emailadmin zh-tw 管理帳號
|
||||||
|
advanced options emailadmin zh-tw 進階選項
|
||||||
|
alternate email address emailadmin zh-tw 替代郵件位址
|
||||||
|
any application emailadmin zh-tw 任何模組
|
||||||
|
any group emailadmin zh-tw 任何群組
|
||||||
|
bad login name or password. emailadmin zh-tw 帳號或密碼有誤。
|
||||||
|
bad or malformed request. server responded: %s emailadmin zh-tw 錯誤的請求,伺服器回應: %s
|
||||||
|
bad request: %s emailadmin zh-tw 錯誤的請求: %s
|
||||||
|
can be used by application emailadmin zh-tw 可以取用資料的模組
|
||||||
|
can be used by group emailadmin zh-tw 可以取用資料的群組
|
||||||
|
connection dropped by imap server. emailadmin zh-tw 連線被 IMAP 伺服器中斷了
|
||||||
|
could not complete request. reason given: %s emailadmin zh-tw 無法完成請求,理由: %s
|
||||||
|
could not open secure connection to the imap server. %s : %s. emailadmin zh-tw 無法開啟安全連線到 IMAP 伺服器。%s : %s.
|
||||||
|
cram-md5 or digest-md5 requires the auth_sasl package to be installed. emailadmin zh-tw CRAM-MD5 或 DIGEST-MD5 需要先安裝 Auth_SASL 才能使用。
|
||||||
|
cyrus imap server emailadmin zh-tw Cyrus IMAP伺服器
|
||||||
|
cyrus imap server administration emailadmin zh-tw Cyrus IMAP伺服器管理
|
||||||
|
default emailadmin zh-tw 預設
|
||||||
|
deliver extern emailadmin zh-tw 傳送到外部
|
||||||
|
do not validate certificate emailadmin zh-tw 沒有可用的執照
|
||||||
|
do you really want to delete this profile emailadmin zh-tw 您確定要刪除這個資料
|
||||||
|
domainname emailadmin zh-tw 網域名稱
|
||||||
|
edit email settings emailadmin zh-tw 編輯郵件設定
|
||||||
|
email account active emailadmin zh-tw 郵件帳號啟用
|
||||||
|
email address emailadmin zh-tw 郵件位址
|
||||||
|
email settings common zh-tw 郵件設定
|
||||||
|
emailadmin emailadmin zh-tw 郵件管理
|
||||||
|
enable cyrus imap server administration emailadmin zh-tw 啟用Cyrus IMAP伺服器管理
|
||||||
|
enable sieve emailadmin zh-tw 啟用Sieve
|
||||||
|
encrypted connection emailadmin zh-tw 加密連線
|
||||||
|
encryption settings emailadmin zh-tw 加密設定
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin zh-tw 輸入您的預設郵件網域(小老鼠後面所有字:帳號@網域)
|
||||||
|
error connecting to imap server. %s : %s. emailadmin zh-tw 連線到 IMAP 伺服器時發生錯誤。 %s : %s
|
||||||
|
error connecting to imap server: [%s] %s. emailadmin zh-tw 連線到 IMAP 伺服器時發生錯誤。 [%s] %s
|
||||||
|
forward also to emailadmin zh-tw 同時轉寄到
|
||||||
|
forward email's to emailadmin zh-tw 轉寄信件到
|
||||||
|
forward only emailadmin zh-tw 轉寄
|
||||||
|
global options emailadmin zh-tw 全域選項
|
||||||
|
if using ssl or tls, you must have the php openssl extension loaded. emailadmin zh-tw 如果使用 SSL 或 TLS,您必須先載入 PHP openssl 外掛。
|
||||||
|
imap admin password admin zh-tw IMAP管理者密碼
|
||||||
|
imap admin user admin zh-tw IMAP管理者帳號
|
||||||
|
imap c-client version < 2001 emailadmin zh-tw IMAP C-終端的版本小於2001
|
||||||
|
imap server closed the connection. emailadmin zh-tw IMAP伺服器關閉連線
|
||||||
|
imap server closed the connection. server responded: %s emailadmin zh-tw IMAP伺服器關閉連線,伺服器回應: %s
|
||||||
|
imap server hostname or ip address emailadmin zh-tw IMAP伺服器的主機名稱或是IP位址
|
||||||
|
imap server logintyp emailadmin zh-tw IMAP伺服器登入類型
|
||||||
|
imap server name emailadmin zh-tw IMAP伺服器名稱
|
||||||
|
imap server port emailadmin zh-tw IMAP伺服器連接埠
|
||||||
|
imap/pop3 server name emailadmin zh-tw IMAP/POP3伺服器名稱
|
||||||
|
in mbyte emailadmin zh-tw 以MB顯示
|
||||||
|
ldap basedn emailadmin zh-tw LDAP basedn
|
||||||
|
ldap server emailadmin zh-tw LDAP 伺服器
|
||||||
|
ldap server accounts dn emailadmin zh-tw LDAP 伺服器帳號 DN
|
||||||
|
ldap server admin dn emailadmin zh-tw LDAP 伺服器管理者 DN
|
||||||
|
ldap server admin password emailadmin zh-tw LDAP 伺服器管理者密碼
|
||||||
|
ldap server hostname or ip address emailadmin zh-tw LDAP 伺服器主機名稱或是IP位址
|
||||||
|
ldap settings emailadmin zh-tw LDAP 設定
|
||||||
|
leave empty for no quota emailadmin zh-tw 不填入任何資料表示無限制
|
||||||
|
mail settings admin zh-tw 郵件設定
|
||||||
|
name of organisation emailadmin zh-tw 組織名稱
|
||||||
|
no alternate email address emailadmin zh-tw 沒有可替換的郵件位址
|
||||||
|
no encryption emailadmin zh-tw 沒有加密
|
||||||
|
no forwarding email address emailadmin zh-tw 沒有轉寄郵件位址
|
||||||
|
no message returned. emailadmin zh-tw 沒有訊息回應。
|
||||||
|
no supported imap authentication method could be found. emailadmin zh-tw 找不到可以支援的 IMAP 認證方式。
|
||||||
|
order emailadmin zh-tw 順序
|
||||||
|
organisation emailadmin zh-tw 組織
|
||||||
|
plesk can't rename users --> request ignored emailadmin zh-tw Plesk 無法修改使用者名稱 --> 忽略
|
||||||
|
plesk imap server (courier) emailadmin zh-tw Plesk IMAP 伺服器(Courier)
|
||||||
|
plesk mail script '%1' not found !!! emailadmin zh-tw 找不到 Plesk 郵件指令 '%1' !
|
||||||
|
plesk requires passwords to have at least 5 characters and not contain the account-name --> password not set!!! emailadmin zh-tw Plesk 要求密碼至少必須有 5 個字元而且不能包含帳號名稱 --> 密碼沒有設定!
|
||||||
|
plesk smtp-server (qmail) emailadmin zh-tw Plesk SMTP伺服器 (Qmail)
|
||||||
|
pop3 server hostname or ip address emailadmin zh-tw POP3伺服器主機名稱或是IP位址
|
||||||
|
pop3 server port emailadmin zh-tw POP3伺服器連接埠
|
||||||
|
postfix with ldap emailadmin zh-tw 使用LDAP與 Postfix
|
||||||
|
profile access rights emailadmin zh-tw 存取資料權限
|
||||||
|
profile list emailadmin zh-tw 資料清單
|
||||||
|
profile name emailadmin zh-tw 資料名稱
|
||||||
|
qmaildotmode emailadmin zh-tw qmaildotmode
|
||||||
|
qouta size in mbyte emailadmin zh-tw 配額(MB)
|
||||||
|
quota settings emailadmin zh-tw 配額設定
|
||||||
|
remove emailadmin zh-tw 移除
|
||||||
|
select type of imap server emailadmin zh-tw 選擇IMAP伺服器類型
|
||||||
|
select type of imap/pop3 server emailadmin zh-tw 選擇IMAP/POP3伺服器的格式
|
||||||
|
select type of smtp server emailadmin zh-tw 選擇SMTP伺服器的格式
|
||||||
|
server settings emailadmin zh-tw 伺服器設定
|
||||||
|
sieve server hostname or ip address emailadmin zh-tw Sieve伺服器主機名稱或是IP位址
|
||||||
|
sieve server port emailadmin zh-tw Sieve伺服器連接埠
|
||||||
|
sieve settings emailadmin zh-tw Sieve設定
|
||||||
|
smtp authentication emailadmin zh-tw SMTP 認證
|
||||||
|
smtp options emailadmin zh-tw SMTP 選項
|
||||||
|
smtp server name emailadmin zh-tw SMTP伺服器名稱
|
||||||
|
smtp settings emailadmin zh-tw SMTP 設定
|
||||||
|
smtp-server hostname or ip address emailadmin zh-tw SMTP伺服器主機名稱或是IP位址
|
||||||
|
smtp-server port emailadmin zh-tw SMTP伺服器連接埠
|
||||||
|
standard emailadmin zh-tw 標準
|
||||||
|
standard imap server emailadmin zh-tw 標準IMAP伺服器
|
||||||
|
standard pop3 server emailadmin zh-tw 標準POP3伺服器
|
||||||
|
standard smtp-server emailadmin zh-tw 標準SMTP伺服器
|
||||||
|
the imap server does not appear to support the authentication method selected. please contact your system administrator. emailadmin zh-tw IMAP 伺服器不支援指定的認證方式,請聯絡您的系統管理員。
|
||||||
|
this php has no imap support compiled in!! emailadmin zh-tw 您的PHP並未編譯為支援IMAP的狀態
|
||||||
|
to use a tls connection, you must be running a version of php 5.1.0 or higher. emailadmin zh-tw 要使用 TLS 連線,您必須執行在 PHP 5.1.0 或是更新版本。
|
||||||
|
unexpected response from server to authenticate command. emailadmin zh-tw AUTHENTICATE 指令讓伺服器傳回不如預期的回應。
|
||||||
|
unexpected response from server to digest-md5 response. emailadmin zh-tw 伺服器傳回不如預期的 Digest-MD5 回應。
|
||||||
|
unexpected response from server to login command. emailadmin zh-tw 伺服器傳回不如預期的 LOGIN 指令。
|
||||||
|
unknown imap response from the server. server responded: %s emailadmin zh-tw 不知名的 IMAP 伺服器回應,回應內容: %s
|
||||||
|
unsupported action '%1' !!! emailadmin zh-tw 不支援 '%1' 這個操作!
|
||||||
|
update current email address: emailadmin zh-tw 更新目前信箱:
|
||||||
|
use ldap defaults emailadmin zh-tw 使用LDAP預設值
|
||||||
|
use smtp auth emailadmin zh-tw 使用SMTP認證
|
||||||
|
use tls authentication emailadmin zh-tw 使用TLS認證
|
||||||
|
use tls encryption emailadmin zh-tw 使用TLS加密
|
||||||
|
user can edit forwarding address emailadmin zh-tw 使用者可以編輯自動轉寄信箱
|
||||||
|
username (standard) emailadmin zh-tw 帳號(標準)
|
||||||
|
username@domainname (virtual mail manager) emailadmin zh-tw 帳號@網域(虛擬郵件管理)
|
||||||
|
users can define their own emailaccounts emailadmin zh-tw 使用者可以自行定義郵件帳號
|
||||||
|
virtual mail manager emailadmin zh-tw 虛擬郵件管理者
|
123
emailadmin/lang/egw_zh.lang
Normal file
123
emailadmin/lang/egw_zh.lang
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
account '%1' not found !!! emailadmin zh 帐户 '%1' 未发现!
|
||||||
|
add new email address: emailadmin zh 添加新邮箱地址:
|
||||||
|
add profile emailadmin zh 添加 profile
|
||||||
|
admin dn emailadmin zh 管理 DN
|
||||||
|
admin password emailadmin zh 管理密码
|
||||||
|
admin username emailadmin zh 管理帐户
|
||||||
|
advanced options emailadmin zh 高级选项
|
||||||
|
alternate email address emailadmin zh 候选邮箱地址
|
||||||
|
any application emailadmin zh 任何用用程序
|
||||||
|
any group emailadmin zh 任何组
|
||||||
|
bad login name or password. emailadmin zh 错误登录名和密码。
|
||||||
|
bad or malformed request. server responded: %s emailadmin zh 不正确的请求。服务器或应:%s
|
||||||
|
bad request: %s emailadmin zh 错误请求:%s
|
||||||
|
can be used by application emailadmin zh 可用于应用程序
|
||||||
|
can be used by group emailadmin zh 可用于群组
|
||||||
|
connection dropped by imap server. emailadmin zh 连接被 IMAP 服务器中断。
|
||||||
|
could not complete request. reason given: %s emailadmin zh 无法完成请求。原因是:%s
|
||||||
|
could not open secure connection to the imap server. %s : %s. emailadmin zh 无法打开到 IMAP 服务器的安全连接。%s:%s。
|
||||||
|
cram-md5 or digest-md5 requires the auth_sasl package to be installed. emailadmin zh CRAM-MD5 或 DIGEST-MD5 需要安装 auth_sasl 包。
|
||||||
|
cyrus imap server emailadmin zh Cyrus IMAP 服务器
|
||||||
|
cyrus imap server administration emailadmin zh Cyrus IMAP 服务器管理
|
||||||
|
default emailadmin zh 默认
|
||||||
|
deliver extern emailadmin zh 传送外部
|
||||||
|
do not validate certificate emailadmin zh 不确认证书
|
||||||
|
do you really want to delete this profile emailadmin zh 您确定要删除这个 profile 文件
|
||||||
|
domainname emailadmin zh 域名
|
||||||
|
edit email settings emailadmin zh 编辑邮箱设置
|
||||||
|
email account active emailadmin zh 邮箱帐户激活
|
||||||
|
email address emailadmin zh 邮箱地址
|
||||||
|
email settings common zh 邮箱设置
|
||||||
|
emailadmin emailadmin zh 邮箱管理
|
||||||
|
enable cyrus imap server administration emailadmin zh 启用 Cyrus IMAP 服务器管理
|
||||||
|
enable sieve emailadmin zh 启用过滤
|
||||||
|
encrypted connection emailadmin zh 加密连接
|
||||||
|
encryption settings emailadmin zh 加密设置
|
||||||
|
enter your default mail domain (from: user@domain) emailadmin zh 输入您的默认邮箱域 (比如:user@domain,取@之后的所有词或字母)
|
||||||
|
error connecting to imap server. %s : %s. emailadmin zh 连接到 IMAP 服务器错误。%s : %s。
|
||||||
|
error connecting to imap server: [%s] %s. emailadmin zh 连接到 IMAP 服务器错误:[%s] %s。
|
||||||
|
forward also to emailadmin zh 同时转发到
|
||||||
|
forward email's to emailadmin zh 转发邮件到
|
||||||
|
forward only emailadmin zh 转发
|
||||||
|
global options emailadmin zh 全局选项
|
||||||
|
if using ssl or tls, you must have the php openssl extension loaded. emailadmin zh 如果使用 SSL 或 TLS,您必须加载 PHP openssl 扩展。
|
||||||
|
imap admin password admin zh IMAP 管理者密码
|
||||||
|
imap admin user admin zh IMAP 管理者帐户
|
||||||
|
imap c-client version < 2001 emailadmin zh IMAP C-Clien 版本小 < 2001
|
||||||
|
imap server closed the connection. emailadmin zh IMAP 服务器关闭连接。
|
||||||
|
imap server closed the connection. server responded: %s emailadmin zh IMAP 服务器关闭连接。服务器回应:%s
|
||||||
|
imap server hostname or ip address emailadmin zh IMAP 服务器的主机名或 IP 地址
|
||||||
|
imap server logintyp emailadmin zh IMAP 服务器登录类型
|
||||||
|
imap server name emailadmin zh IMAP 服务器名
|
||||||
|
imap server port emailadmin zh IMAP 服务器端口号
|
||||||
|
imap/pop3 server name emailadmin zh IMAP / POP3 服务器名
|
||||||
|
in mbyte emailadmin zh 以 MB 表示
|
||||||
|
ldap basedn emailadmin zh LDAP basedn
|
||||||
|
ldap server emailadmin zh LDAP 服务器
|
||||||
|
ldap server accounts dn emailadmin zh LDAP 服务器帐户 DN
|
||||||
|
ldap server admin dn emailadmin zh LDAP 服务器管理员 DN
|
||||||
|
ldap server admin password emailadmin zh LDAP 服务器管管理员密码
|
||||||
|
ldap server hostname or ip address emailadmin zh LDAP 服务器主机名或 IP 地址
|
||||||
|
ldap settings emailadmin zh LDAP 设置
|
||||||
|
leave empty for no quota emailadmin zh 留空表示无限额
|
||||||
|
mail settings admin zh 邮箱设置
|
||||||
|
name of organisation emailadmin zh 组织名称
|
||||||
|
no alternate email address emailadmin zh 无备用邮箱地址
|
||||||
|
no encryption emailadmin zh 未加密
|
||||||
|
no forwarding email address emailadmin zh 没有转发邮件地址
|
||||||
|
no message returned. emailadmin zh 无返回消息。
|
||||||
|
no supported imap authentication method could be found. emailadmin zh 无支持 IMAP 认证的方法可以找到。
|
||||||
|
order emailadmin zh 排序
|
||||||
|
organisation emailadmin zh 组织
|
||||||
|
plesk can't rename users --> request ignored emailadmin zh Plesk 不能重命名用户 --> 请求忽略
|
||||||
|
plesk imap server (courier) emailadmin zh Plesk IMAP 服务器 (Courier)
|
||||||
|
plesk mail script '%1' not found !!! emailadmin zh Plesk 邮件脚本 '%1' 未找到!
|
||||||
|
plesk requires passwords to have at least 5 characters and not contain the account-name --> password not set!!! emailadmin zh Plesk 需要至少5个字符密码并且不包含帐户名 --> 密码未设置!
|
||||||
|
plesk smtp-server (qmail) emailadmin zh Plesk SMTP-Server (Qmail)
|
||||||
|
pop3 server hostname or ip address emailadmin zh POP3 服务器主机名或 IP 地址
|
||||||
|
pop3 server port emailadmin zh POP3 服务器端口号
|
||||||
|
postfix with ldap emailadmin zh LDAP 用于 Postfix
|
||||||
|
profile access rights emailadmin zh profile 访问权限
|
||||||
|
profile list emailadmin zh profile 列表
|
||||||
|
profile name emailadmin zh profile 名
|
||||||
|
qmaildotmode emailadmin zh qmaildotmode
|
||||||
|
qouta size in mbyte emailadmin zh 配额大小在 (MByte)
|
||||||
|
quota settings emailadmin zh 配额设置
|
||||||
|
remove emailadmin zh 移除
|
||||||
|
select type of imap server emailadmin zh 选择 IMAP 服务器类型
|
||||||
|
select type of imap/pop3 server emailadmin zh 选择 IMAP / POP3 服务器类型
|
||||||
|
select type of smtp server emailadmin zh 选择 SMAP 服务器类型
|
||||||
|
server settings emailadmin zh 服务器设置
|
||||||
|
sieve server hostname or ip address emailadmin zh Sieve 服务器主机名或 IP 地址
|
||||||
|
sieve server port emailadmin zh Sieve 服务器端口号
|
||||||
|
sieve settings emailadmin zh Sieve 设置
|
||||||
|
smtp authentication emailadmin zh SMTP 认证
|
||||||
|
smtp options emailadmin zh SMTP 选项
|
||||||
|
smtp server name emailadmin zh SMTP 服务器名
|
||||||
|
smtp settings emailadmin zh SMTP 设置
|
||||||
|
smtp-server hostname or ip address emailadmin zh SMTP 服务器主机名或 IP 地址
|
||||||
|
smtp-server port emailadmin zh SMTP 服务器端口号
|
||||||
|
standard emailadmin zh 标准
|
||||||
|
standard imap server emailadmin zh 标准 IMAP 服务器
|
||||||
|
standard pop3 server emailadmin zh 标准 POP3 服务器
|
||||||
|
standard smtp-server emailadmin zh 标准 SMTP 服务器
|
||||||
|
the imap server does not appear to support the authentication method selected. please contact your system administrator. emailadmin zh IMAP 服务器似乎不支持所选择的认证方法。请联系系统管理员。
|
||||||
|
this php has no imap support compiled in!! emailadmin zh PHP 没有 IMAP 支持的编译!
|
||||||
|
to use a tls connection, you must be running a version of php 5.1.0 or higher. emailadmin zh 未使用一个 TLS 连接,您必须运行 PHP 5.1.0 或更高版本。
|
||||||
|
unexpected response from server to authenticate command. emailadmin zh 服务器为 AUTHENTICATE 指令返回不当以外回应。
|
||||||
|
unexpected response from server to digest-md5 response. emailadmin zh 服务器为 Digest-MD5 返回意外的不当的回应。
|
||||||
|
unexpected response from server to login command. emailadmin zh 服务器为 LOGIN 指令返回意外的不当回应。
|
||||||
|
unknown imap response from the server. server responded: %s emailadmin zh INAP 服务器返回未知回应。服务器回应:%s
|
||||||
|
unsupported action '%1' !!! emailadmin zh 不支持 '%1' 的操作!
|
||||||
|
update current email address: emailadmin zh 更新当前邮件地址:
|
||||||
|
use ldap defaults emailadmin zh 使用 LDAP 默认值
|
||||||
|
use smtp auth emailadmin zh 使用 SMTP 认证
|
||||||
|
use tls authentication emailadmin zh 使用TLS 认证
|
||||||
|
use tls encryption emailadmin zh 使用TLS 加密
|
||||||
|
user can edit forwarding address emailadmin zh 用户可以编辑转发地址
|
||||||
|
username (standard) emailadmin zh 用户名(标准)
|
||||||
|
username@domainname (virtual mail manager) emailadmin zh 用户名@域 (虚拟邮箱管理)
|
||||||
|
users can define their own emailaccounts emailadmin zh 用户可以自定义邮箱账户
|
||||||
|
users can define their own signatures emailadmin zh 用户可以定义他们自己的签名
|
||||||
|
vaction messages with start- and end-date require an admin account to be set! emailadmin zh 需要一个 admin 帐户来设置 Vaction 消息与开始和结束日期!
|
||||||
|
virtual mail manager emailadmin zh 虚拟邮箱管理
|
70
emailadmin/setup/setup.inc.php
Normal file
70
emailadmin/setup/setup.inc.php
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* eGroupware EMailAdmin - Setup
|
||||||
|
*
|
||||||
|
* @link http://www.egroupware.org
|
||||||
|
* @author Lars Kneschke
|
||||||
|
* @author Klaus Leithoff <kl@stylite.de>
|
||||||
|
* @package emailadmin
|
||||||
|
* @subpackage setup
|
||||||
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
$setup_info['emailadmin']['name'] = 'emailadmin';
|
||||||
|
$setup_info['emailadmin']['title'] = 'EMailAdmin';
|
||||||
|
$setup_info['emailadmin']['version'] = '1.7.003';
|
||||||
|
$setup_info['emailadmin']['app_order'] = 10;
|
||||||
|
$setup_info['emailadmin']['enable'] = 2;
|
||||||
|
$setup_info['emailadmin']['index'] = 'emailadmin.emailadmin_ui.listProfiles';
|
||||||
|
|
||||||
|
$setup_info['emailadmin']['author'] = 'Lars Kneschke';
|
||||||
|
$setup_info['emailadmin']['license'] = 'GPL';
|
||||||
|
$setup_info['emailadmin']['description'] =
|
||||||
|
'A central Mailserver management application for EGroupWare.';
|
||||||
|
$setup_info['emailadmin']['note'] =
|
||||||
|
'';
|
||||||
|
$setup_info['emailadmin']['maintainer'] = array(
|
||||||
|
'name' => 'Leithoff, Klaus',
|
||||||
|
'email' => 'kl@stylite.de'
|
||||||
|
);
|
||||||
|
|
||||||
|
$setup_info['emailadmin']['tables'][] = 'egw_emailadmin';
|
||||||
|
|
||||||
|
/* The hooks this app includes, needed for hooks registration */
|
||||||
|
#$setup_info['emailadmin']['hooks'][] = 'preferences';
|
||||||
|
$setup_info['emailadmin']['hooks']['admin'] = 'emailadmin_hooks::admin';
|
||||||
|
$setup_info['emailadmin']['hooks']['edit_user'] = 'emailadmin_hooks::edit_user';
|
||||||
|
$setup_info['emailadmin']['hooks']['view_user'] = 'emailadmin_hooks::edit_user';
|
||||||
|
$setup_info['emailadmin']['hooks']['edit_group'] = 'emailadmin_hooks::edit_group';
|
||||||
|
$setup_info['emailadmin']['hooks']['group_manager'] = 'emailadmin_hooks::edit_group';
|
||||||
|
$setup_info['emailadmin']['hooks']['deleteaccount'] = 'emailadmin_hooks::deleteaccount';
|
||||||
|
$setup_info['emailadmin']['hooks']['deletegroup'] = 'emailadmin_hookss::deletegroup';
|
||||||
|
/* Dependencies for this app to work */
|
||||||
|
$setup_info['emailadmin']['depends'][] = array(
|
||||||
|
'appname' => 'phpgwapi',
|
||||||
|
'versions' => Array('1.3','1.4','1.5','1.6','1.7')
|
||||||
|
);
|
||||||
|
$setup_info['emailadmin']['depends'][] = array(
|
||||||
|
'appname' => 'egw-pear',
|
||||||
|
'versions' => Array('1.4.000','1.5','1.6','1.7')
|
||||||
|
);
|
||||||
|
// installation checks for felamimail
|
||||||
|
$setup_info['emailadmin']['check_install'] = array(
|
||||||
|
'' => array(
|
||||||
|
'func' => 'pear_check',
|
||||||
|
'from' => 'EMailAdmin',
|
||||||
|
),
|
||||||
|
'Auth_SASL' => array(
|
||||||
|
'func' => 'pear_check',
|
||||||
|
'from' => 'EMailAdmin',
|
||||||
|
),
|
||||||
|
'Net_IMAP' => array(
|
||||||
|
'func' => 'pear_check',
|
||||||
|
'from' => 'EMailAdmin',
|
||||||
|
),
|
||||||
|
'imap' => array(
|
||||||
|
'func' => 'extension_check',
|
||||||
|
'from' => 'EMailAdmin',
|
||||||
|
),
|
||||||
|
);
|
64
emailadmin/setup/tables_current.inc.php
Normal file
64
emailadmin/setup/tables_current.inc.php
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* eGroupware EMailAdmin - DB schema
|
||||||
|
*
|
||||||
|
* @link http://www.egroupware.org
|
||||||
|
* @author Lars Kneschke
|
||||||
|
* @author Klaus Leithoff <kl@stylite.de>
|
||||||
|
* @package emailadmin
|
||||||
|
* @subpackage setup
|
||||||
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
$phpgw_baseline = array(
|
||||||
|
'egw_emailadmin' => array(
|
||||||
|
'fd' => array(
|
||||||
|
'ea_profile_id' => array('type' => 'auto','nullable' => False),
|
||||||
|
'ea_smtp_server' => array('type' => 'varchar','precision' => '80'),
|
||||||
|
'ea_smtp_type' => array('type' => 'int','precision' => '4'),
|
||||||
|
'ea_smtp_port' => array('type' => 'int','precision' => '4'),
|
||||||
|
'ea_smtp_auth' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_editforwardingaddress' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_smtp_ldap_server' => array('type' => 'varchar','precision' => '80'),
|
||||||
|
'ea_smtp_ldap_basedn' => array('type' => 'varchar','precision' => '200'),
|
||||||
|
'ea_smtp_ldap_admindn' => array('type' => 'varchar','precision' => '200'),
|
||||||
|
'ea_smtp_ldap_adminpw' => array('type' => 'varchar','precision' => '30'),
|
||||||
|
'ea_smtp_ldap_use_default' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_imap_server' => array('type' => 'varchar','precision' => '80'),
|
||||||
|
'ea_imap_type' => array('type' => 'int','precision' => '4'),
|
||||||
|
'ea_imap_port' => array('type' => 'int','precision' => '4'),
|
||||||
|
'ea_imap_login_type' => array('type' => 'varchar','precision' => '20'),
|
||||||
|
'ea_imap_tsl_auth' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_imap_tsl_encryption' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_imap_enable_cyrus' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_imap_admin_user' => array('type' => 'varchar','precision' => '40'),
|
||||||
|
'ea_imap_admin_pw' => array('type' => 'varchar','precision' => '40'),
|
||||||
|
'ea_imap_enable_sieve' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_imap_sieve_server' => array('type' => 'varchar','precision' => '80'),
|
||||||
|
'ea_imap_sieve_port' => array('type' => 'int','precision' => '4'),
|
||||||
|
'ea_description' => array('type' => 'varchar','precision' => '200'),
|
||||||
|
'ea_default_domain' => array('type' => 'varchar','precision' => '100'),
|
||||||
|
'ea_organisation_name' => array('type' => 'varchar','precision' => '100'),
|
||||||
|
'ea_user_defined_identities' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_user_defined_accounts' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_imapoldcclient' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_order' => array('type' => 'int','precision' => '4'),
|
||||||
|
'ea_appname' => array('type' => 'varchar','precision' => '80'),
|
||||||
|
'ea_group' => array('type' => 'varchar','precision' => '80'),
|
||||||
|
'ea_user' => array('type' => 'varchar','precision' => '80'),
|
||||||
|
'ea_active' => array('type' => 'int','precision' => '4'),
|
||||||
|
'ea_smtp_auth_username' => array('type' => 'varchar','precision' => '80'),
|
||||||
|
'ea_smtp_auth_password' => array('type' => 'varchar','precision' => '80'),
|
||||||
|
'ea_user_defined_signatures' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_default_signature' => array('type' => 'text'),
|
||||||
|
'ea_imap_auth_username' => array('type' => 'varchar','precision' => '80'),
|
||||||
|
'ea_imap_auth_password' => array('type' => 'varchar','precision' => '80'),
|
||||||
|
'ea_stationery_active_templates' => array('type' => 'text')
|
||||||
|
),
|
||||||
|
'pk' => array('ea_profile_id'),
|
||||||
|
'fk' => array(),
|
||||||
|
'ix' => array('ea_appname','ea_group'),
|
||||||
|
'uc' => array()
|
||||||
|
)
|
||||||
|
);
|
282
emailadmin/setup/tables_update.inc.php
Normal file
282
emailadmin/setup/tables_update.inc.php
Normal file
@ -0,0 +1,282 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* eGroupware EMailAdmin - DB schema
|
||||||
|
*
|
||||||
|
* @link http://www.egroupware.org
|
||||||
|
* @author Lars Kneschke
|
||||||
|
* @author Klaus Leithoff <kl@stylite.de>
|
||||||
|
* @package emailadmin
|
||||||
|
* @subpackage setup
|
||||||
|
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
|
||||||
|
* @version $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
function emailadmin_upgrade0_0_3()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_emailadmin','smtpType', array('type' => 'int', 'precision' => 4));
|
||||||
|
|
||||||
|
return $setup_info['emailadmin']['currentver'] = '0.0.4';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade0_0_4()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_emailadmin','defaultDomain', array('type' => 'varchar', 'precision' => 100));
|
||||||
|
|
||||||
|
return $setup_info['emailadmin']['currentver'] = '0.0.5';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade0_0_5()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_emailadmin','organisationName', array('type' => 'varchar', 'precision' => 100));
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_emailadmin','userDefinedAccounts', array('type' => 'varchar', 'precision' => 3));
|
||||||
|
|
||||||
|
return $setup_info['emailadmin']['currentver'] = '0.0.6';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade0_0_6()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_emailadmin','oldimapcclient',array(
|
||||||
|
'type' => 'varchar',
|
||||||
|
'precision' => '3'
|
||||||
|
));
|
||||||
|
|
||||||
|
return $GLOBALS['setup_info']['emailadmin']['currentver'] = '0.0.007';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade0_0_007()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('phpgw_emailadmin','oldimapcclient','imapoldcclient');
|
||||||
|
|
||||||
|
return $GLOBALS['setup_info']['emailadmin']['currentver'] = '0.0.008';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade0_0_008()
|
||||||
|
{
|
||||||
|
return $GLOBALS['setup_info']['emailadmin']['currentver'] = '1.0.0';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade1_0_0()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_emailadmin','editforwardingaddress',array(
|
||||||
|
'type' => 'varchar',
|
||||||
|
'precision' => '3'
|
||||||
|
));
|
||||||
|
|
||||||
|
return $GLOBALS['setup_info']['emailadmin']['currentver'] = '1.0.1';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade1_0_1()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_emailadmin','ea_order', array('type' => 'int', 'precision' => 4));
|
||||||
|
|
||||||
|
return $GLOBALS['setup_info']['emailadmin']['currentver'] = '1.0.2';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade1_0_2()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_emailadmin','ea_appname', array('type' => 'varchar','precision' => '80'));
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('phpgw_emailadmin','ea_group', array('type' => 'varchar','precision' => '80'));
|
||||||
|
|
||||||
|
return $GLOBALS['setup_info']['emailadmin']['currentver'] = '1.0.3';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade1_0_3()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameTable('phpgw_emailadmin','egw_emailadmin');
|
||||||
|
|
||||||
|
return $GLOBALS['setup_info']['emailadmin']['currentver'] = '1.2';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade1_2()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','profileID','ea_profile_id');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','smtpServer','ea_smtp_server');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','smtpType','ea_smtp_type');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','smtpPort','ea_smtp_port');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','smtpAuth','ea_smtp_auth');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','editforwardingaddress','ea_editforwardingaddress');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','smtpLDAPServer','ea_smtp_ldap_server');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','smtpLDAPBaseDN','ea_smtp_ldap_basedn');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','smtpLDAPAdminDN','ea_smtp_ldap_admindn');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','smtpLDAPAdminPW','ea_smtp_ldap_adminpw');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','smtpLDAPUseDefault','ea_smtp_ldap_use_default');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','imapServer','ea_imap_server');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','imapType','ea_imap_type');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','imapPort','ea_imap_port');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','imapLoginType','ea_imap_login_type');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','imapTLSAuthentication','ea_imap_tsl_auth');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','imapTLSEncryption','ea_imap_tsl_encryption');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','imapEnableCyrusAdmin','ea_imap_enable_cyrus');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','imapAdminUsername','ea_imap_admin_user');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','imapAdminPW','ea_imap_admin_pw');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','imapEnableSieve','ea_imap_enable_sieve');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','imapSieveServer','ea_imap_sieve_server');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','imapSievePort','ea_imap_sieve_port');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','description','ea_description');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','defaultDomain','ea_default_domain');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','organisationName','ea_organisation_name');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','userDefinedAccounts','ea_user_defined_accounts');
|
||||||
|
$GLOBALS['egw_setup']->oProc->RenameColumn('egw_emailadmin','imapoldcclient','ea_imapoldcclient');
|
||||||
|
|
||||||
|
return $GLOBALS['setup_info']['emailadmin']['currentver'] = '1.2.001';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade1_2_001()
|
||||||
|
{
|
||||||
|
/* done by RefreshTable() anyway
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('egw_emailadmin','ea_smtp_auth_username',array(
|
||||||
|
'type' => 'varchar',
|
||||||
|
'precision' => '80'
|
||||||
|
));*/
|
||||||
|
/* done by RefreshTable() anyway
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('egw_emailadmin','ea_smtp_auth_password',array(
|
||||||
|
'type' => 'varchar',
|
||||||
|
'precision' => '80'
|
||||||
|
));*/
|
||||||
|
$GLOBALS['egw_setup']->oProc->RefreshTable('egw_emailadmin',array(
|
||||||
|
'fd' => array(
|
||||||
|
'ea_profile_id' => array('type' => 'auto','nullable' => False),
|
||||||
|
'ea_smtp_server' => array('type' => 'varchar','precision' => '80'),
|
||||||
|
'ea_smtp_type' => array('type' => 'int','precision' => '4'),
|
||||||
|
'ea_smtp_port' => array('type' => 'int','precision' => '4'),
|
||||||
|
'ea_smtp_auth' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_editforwardingaddress' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_smtp_ldap_server' => array('type' => 'varchar','precision' => '80'),
|
||||||
|
'ea_smtp_ldap_basedn' => array('type' => 'varchar','precision' => '200'),
|
||||||
|
'ea_smtp_ldap_admindn' => array('type' => 'varchar','precision' => '200'),
|
||||||
|
'ea_smtp_ldap_adminpw' => array('type' => 'varchar','precision' => '30'),
|
||||||
|
'ea_smtp_ldap_use_default' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_imap_server' => array('type' => 'varchar','precision' => '80'),
|
||||||
|
'ea_imap_type' => array('type' => 'int','precision' => '4'),
|
||||||
|
'ea_imap_port' => array('type' => 'int','precision' => '4'),
|
||||||
|
'ea_imap_login_type' => array('type' => 'varchar','precision' => '20'),
|
||||||
|
'ea_imap_tsl_auth' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_imap_tsl_encryption' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_imap_enable_cyrus' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_imap_admin_user' => array('type' => 'varchar','precision' => '40'),
|
||||||
|
'ea_imap_admin_pw' => array('type' => 'varchar','precision' => '40'),
|
||||||
|
'ea_imap_enable_sieve' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_imap_sieve_server' => array('type' => 'varchar','precision' => '80'),
|
||||||
|
'ea_imap_sieve_port' => array('type' => 'int','precision' => '4'),
|
||||||
|
'ea_description' => array('type' => 'varchar','precision' => '200'),
|
||||||
|
'ea_default_domain' => array('type' => 'varchar','precision' => '100'),
|
||||||
|
'ea_organisation_name' => array('type' => 'varchar','precision' => '100'),
|
||||||
|
'ea_user_defined_accounts' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_imapoldcclient' => array('type' => 'varchar','precision' => '3'),
|
||||||
|
'ea_order' => array('type' => 'int','precision' => '4'),
|
||||||
|
'ea_appname' => array('type' => 'varchar','precision' => '80'),
|
||||||
|
'ea_group' => array('type' => 'varchar','precision' => '80'),
|
||||||
|
'ea_smtp_auth_username' => array('type' => 'varchar','precision' => '80'),
|
||||||
|
'ea_smtp_auth_password' => array('type' => 'varchar','precision' => '80')
|
||||||
|
),
|
||||||
|
'pk' => array('ea_profile_id'),
|
||||||
|
'fk' => array(),
|
||||||
|
'ix' => array('ea_appname','ea_group'),
|
||||||
|
'uc' => array()
|
||||||
|
));
|
||||||
|
|
||||||
|
return $GLOBALS['setup_info']['emailadmin']['currentver'] = '1.2.002';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade1_2_002()
|
||||||
|
{
|
||||||
|
return $GLOBALS['setup_info']['emailadmin']['currentver'] = '1.4';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade1_4()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('egw_emailadmin','ea_user_defined_signatures',array(
|
||||||
|
'type' => 'varchar',
|
||||||
|
'precision' => '3'
|
||||||
|
));
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('egw_emailadmin','ea_default_signature',array(
|
||||||
|
'type' => 'varchar',
|
||||||
|
'precision' => '255'
|
||||||
|
));
|
||||||
|
|
||||||
|
return $GLOBALS['setup_info']['emailadmin']['currentver'] = '1.4.001';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade1_4_001()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('egw_emailadmin','ea_user_defined_identities',array(
|
||||||
|
'type' => 'varchar',
|
||||||
|
'precision' => '3'
|
||||||
|
));
|
||||||
|
|
||||||
|
return $GLOBALS['setup_info']['emailadmin']['currentver'] = '1.5.001';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade1_5_001()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('egw_emailadmin','ea_user',array(
|
||||||
|
'type' => 'varchar',
|
||||||
|
'precision' => '80'
|
||||||
|
));
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('egw_emailadmin','ea_active',array(
|
||||||
|
'type' => 'int',
|
||||||
|
'precision' => '4'
|
||||||
|
));
|
||||||
|
$GLOBALS['phpgw_setup']->oProc->query("UPDATE egw_emailadmin set ea_user='0', ea_active=1",__LINE__,__FILE__);
|
||||||
|
return $GLOBALS['setup_info']['emailadmin']['currentver'] = '1.5.002';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade1_5_002()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('egw_emailadmin','ea_imap_auth_username',array(
|
||||||
|
'type' => 'varchar',
|
||||||
|
'precision' => '80'
|
||||||
|
));
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('egw_emailadmin','ea_imap_auth_password',array(
|
||||||
|
'type' => 'varchar',
|
||||||
|
'precision' => '80'
|
||||||
|
));
|
||||||
|
return $GLOBALS['setup_info']['emailadmin']['currentver'] = '1.5.003';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade1_5_003()
|
||||||
|
{
|
||||||
|
return $GLOBALS['setup_info']['emailadmin']['currentver'] = '1.5.004';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade1_5_004()
|
||||||
|
{
|
||||||
|
return $GLOBALS['setup_info']['emailadmin']['currentver'] = '1.6';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function emailadmin_upgrade1_6()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_setup']->oProc->AlterColumn('egw_emailadmin','ea_default_signature',array(
|
||||||
|
'type' => 'text'
|
||||||
|
));
|
||||||
|
|
||||||
|
return $GLOBALS['setup_info']['emailadmin']['currentver'] = '1.6.001';
|
||||||
|
}
|
||||||
|
|
||||||
|
function emailadmin_upgrade1_6_001()
|
||||||
|
{
|
||||||
|
$GLOBALS['egw_setup']->oProc->AddColumn('egw_emailadmin','ea_stationery_active_templates',array(
|
||||||
|
'type' => 'text'
|
||||||
|
));
|
||||||
|
|
||||||
|
return $GLOBALS['setup_info']['emailadmin']['currentver'] = '1.7.003';
|
||||||
|
}
|
42
emailadmin/templates/default/config.tpl
Normal file
42
emailadmin/templates/default/config.tpl
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<!-- BEGIN header -->
|
||||||
|
<form method="POST" action="{action_url}">
|
||||||
|
<table border="0" align="center">
|
||||||
|
<tr bgcolor="{th_bg}">
|
||||||
|
<td colspan="2"><font color="{th_text}"> <b>{title}</b></font></td>
|
||||||
|
</tr>
|
||||||
|
<!-- END header -->
|
||||||
|
<!-- BEGIN body -->
|
||||||
|
<tr bgcolor="{row_on}">
|
||||||
|
<td colspan="2"> </td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr bgcolor="{row_off}">
|
||||||
|
<td colspan="2"> <b>{lang_Mail_settings}</b></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr bgcolor="{row_on}">
|
||||||
|
<td>{lang_IMAP_admin_user}:</td>
|
||||||
|
<td><input name="newsettings[imapAdminUser]" value="{value_imapAdminUser}"></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr bgcolor="{row_off}">
|
||||||
|
<td>{lang_IMAP_admin_password}:</td>
|
||||||
|
<td><input name="newsettings[imapAdminPassword]" value="{value_imapAdminPassword}"></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- END body -->
|
||||||
|
<!-- BEGIN footer -->
|
||||||
|
<tr bgcolor="{th_bg}">
|
||||||
|
<td colspan="2">
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2" align="center">
|
||||||
|
<input type="submit" name="submit" value="{lang_submit}">
|
||||||
|
<input type="submit" name="cancel" value="{lang_cancel}">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
<!-- END footer -->
|
64
emailadmin/templates/default/defaultpage.tpl
Normal file
64
emailadmin/templates/default/defaultpage.tpl
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
<!-- BEGIN main -->
|
||||||
|
<center>
|
||||||
|
<table border="0" cellspacing="1" cellpading="0" width="95%">
|
||||||
|
<tr>
|
||||||
|
<td width="10%" valign="top">
|
||||||
|
<table border="0" cellspacing="1" cellpading="0" width="100%">
|
||||||
|
{menu_rows}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{activation_rows}
|
||||||
|
<tr bgcolor="{done_row_color}">
|
||||||
|
<td>
|
||||||
|
<a href="{done_link}">{lang_done}</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td width="90%" valign="top">
|
||||||
|
<form action="{form_action}" method="post">
|
||||||
|
<table width="100%" cellspacing="1" cellpading="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Data
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</center>
|
||||||
|
<!-- END main -->
|
||||||
|
|
||||||
|
<!-- BEGIN menu_row -->
|
||||||
|
<tr bgcolor="{menu_row_color}">
|
||||||
|
<td>
|
||||||
|
<nobr><a href="{menu_link}">{menu_description}</a><nobr>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- END menu_row -->
|
||||||
|
|
||||||
|
<!-- BEGIN menu_row_bold -->
|
||||||
|
<tr bgcolor="{menu_row_color}">
|
||||||
|
<td>
|
||||||
|
<nobr><b><a href="{menu_link}">{menu_description}</a></b><nobr>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- END menu_row_bold -->
|
||||||
|
|
||||||
|
<!-- BEGIN activation_row -->
|
||||||
|
<tr bgcolor="{bg_01}">
|
||||||
|
<td>
|
||||||
|
<a href="{activation_link}">{lang_activate}</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- END activation_row -->
|
136
emailadmin/templates/default/domainnames.tpl
Normal file
136
emailadmin/templates/default/domainnames.tpl
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
<!-- BEGIN main -->
|
||||||
|
<center>
|
||||||
|
<table border="0" cellspacing="1" cellpading="0" width="95%">
|
||||||
|
<tr>
|
||||||
|
<td width="10%" valign="top">
|
||||||
|
<table border="0" cellspacing="1" cellpading="0" width="100%">
|
||||||
|
{menu_rows}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{activation_rows}
|
||||||
|
<tr bgcolor="{done_row_color}">
|
||||||
|
<td>
|
||||||
|
<a href="{done_link}">{lang_done}</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td width="90%" valign="top">
|
||||||
|
<table width="100%" cellspacing="1" cellpading="0" border="0">
|
||||||
|
<tr bgcolor="{th_bg}">
|
||||||
|
<td colspan="2">
|
||||||
|
Domains we receive email for
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<form action="{form_action}" method="post">
|
||||||
|
<tr bgcolor="{bg_01}">
|
||||||
|
<td width="50%" rowspan="5" align="center">
|
||||||
|
{rcpt_selectbox}
|
||||||
|
</td>
|
||||||
|
<td width="50%" align="center">
|
||||||
|
<input type="submit" value="{lang_remove} -->">
|
||||||
|
<input type="hidden" name="bo_action" value="remove_rcpthosts">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</form>
|
||||||
|
<tr bgcolor="{bg_02}">
|
||||||
|
<td width="50%" align="center">
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<form action="{form_action}" method="post">
|
||||||
|
<tr bgcolor="{bg_01}">
|
||||||
|
<td width="50%" align="center">
|
||||||
|
<input type="text" size="30" name="new_rcpthost">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{bg_02}">
|
||||||
|
<td width="50%" align="center">
|
||||||
|
<input type="checkbox" name="add_to_local">{lang_add_to_local}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{bg_01}">
|
||||||
|
<td width="50%" align="center">
|
||||||
|
<input type="submit" value="<-- {lang_add}">
|
||||||
|
<input type="hidden" name="bo_action" value="add_rcpthosts">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</form>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{th_bg}">
|
||||||
|
<td colspan="2">
|
||||||
|
Domains which email we handle local
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<form action="{form_action}" method="post">
|
||||||
|
<tr bgcolor="{bg_01}">
|
||||||
|
<td width="50%" rowspan="4" align="center">
|
||||||
|
{locals_selectbox}
|
||||||
|
</td>
|
||||||
|
<td width="50%" align="center">
|
||||||
|
<input type="submit" value="{lang_remove} -->">
|
||||||
|
<input type="hidden" name="bo_action" value="remove_locals">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</form>
|
||||||
|
<tr bgcolor="{bg_02}">
|
||||||
|
<td width="50%" align="center">
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<form action="{form_action}" method="post">
|
||||||
|
<tr bgcolor="{bg_01}">
|
||||||
|
<td width="50%" align="center">
|
||||||
|
<input type="text" size="30" name="new_local">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{bg_02}">
|
||||||
|
<td width="50%" align="center">
|
||||||
|
<input type="submit" value="<-- {lang_add}">
|
||||||
|
<input type="hidden" name="bo_action" value="add_locals">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</form>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
</center>
|
||||||
|
<!-- END main -->
|
||||||
|
|
||||||
|
<!-- BEGIN menu_row -->
|
||||||
|
<tr bgcolor="{menu_row_color}">
|
||||||
|
<td>
|
||||||
|
<nobr><a href="{menu_link}">{menu_description}</a><nobr>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- END menu_row -->
|
||||||
|
|
||||||
|
<!-- BEGIN menu_row_bold -->
|
||||||
|
<tr bgcolor="{menu_row_color}">
|
||||||
|
<td>
|
||||||
|
<nobr><b><a href="{menu_link}">{menu_description}</a></b><nobr>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- END menu_row_bold -->
|
||||||
|
|
||||||
|
<!-- BEGIN activation_row -->
|
||||||
|
<tr bgcolor="{bg_01}">
|
||||||
|
<td>
|
||||||
|
<a href="{activation_link}">{lang_activate}</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- END activation_row -->
|
1038
emailadmin/templates/default/editprofile.tpl
Executable file
1038
emailadmin/templates/default/editprofile.tpl
Executable file
File diff suppressed because it is too large
Load Diff
111
emailadmin/templates/default/edituserdata.tpl
Normal file
111
emailadmin/templates/default/edituserdata.tpl
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
<!-- BEGIN form -->
|
||||||
|
<script language="JavaScript1.2">
|
||||||
|
|
||||||
|
var langAddAddress="{lang_enter_new_address}";
|
||||||
|
var langModifyAddress="{lang_update_current_address}";
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<form method="POST" action="{form_action}">
|
||||||
|
<center>
|
||||||
|
<table border="0" width="95%">
|
||||||
|
<tr>
|
||||||
|
<td valign="top">
|
||||||
|
{rows}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<table border="0" width="100%" cellspacing="0" cellpadding="2">
|
||||||
|
<tr bgcolor="{th_bg}">
|
||||||
|
<td colspan="2">
|
||||||
|
<b>{lang_email_config}</b>
|
||||||
|
</td>
|
||||||
|
<td align="right">
|
||||||
|
{lang_emailaccount_active}
|
||||||
|
<input type="checkbox" name="accountStatus" {account_checked}>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{tr_color1}">
|
||||||
|
<td width="200">{lang_emailAddress}</td>
|
||||||
|
<td colspan="2">
|
||||||
|
<input name="mailLocalAddress" value="{mailLocalAddress}" style="width:350px;">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<tr bgcolor="{tr_color2}">
|
||||||
|
<td>{lang_mailAlternateAddress}</td>
|
||||||
|
<td align="center" style="width:350px;">
|
||||||
|
{selectbox_mailAlternateAddress}
|
||||||
|
</td>
|
||||||
|
<td align="left">
|
||||||
|
<button type="button" onclick="addRow('mailAlternateAddress', langAddAddress)"><img src="{url_image_add}" alt="{lang_add}" title="{lang_add}"></button><br>
|
||||||
|
<button type="button" onclick="editRow('mailAlternateAddress', langModifyAddress)"><img src="{url_image_edit}" alt="{lang_edit}" title="{lang_edit}"></button><br>
|
||||||
|
<button type="button" onclick="removeRow('mailAlternateAddress')"><img src="{url_image_delete}" alt="{lang_remove}" title="{lang_remove}"></button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<tr bgcolor="{tr_color1}">
|
||||||
|
<td>{lang_mailRoutingAddress}</td>
|
||||||
|
<td align="center">
|
||||||
|
{selectbox_mailRoutingAddress}
|
||||||
|
</td>
|
||||||
|
<td align="left">
|
||||||
|
<button type="button" onclick="addRow('mailRoutingAddress', langAddAddress)"><img src="{url_image_add}" alt="{lang_add}" title="{lang_add}"></button><br>
|
||||||
|
<button type="button" onclick="editRow('mailRoutingAddress', langModifyAddress)"><img src="{url_image_edit}" alt="{lang_edit}" title="{lang_edit}"></button><br>
|
||||||
|
<button type="button" onclick="removeRow('mailRoutingAddress')"><img src="{url_image_delete}" alt="{lang_remove}" title="{lang_remove}"></button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr bgcolor="{tr_color2}">
|
||||||
|
<td>
|
||||||
|
{lang_forward_only}
|
||||||
|
</td>
|
||||||
|
<td colspan="2">
|
||||||
|
<input type="checkbox" name="forwardOnly" {forwardOnly_checked}>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="3">
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{th_bg}">
|
||||||
|
<td colspan="3">
|
||||||
|
<b>{lang_quota_settings}</b>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{tr_color2}">
|
||||||
|
<td width="200">{lang_qoutainmbyte}</td>
|
||||||
|
<td colspan="2">
|
||||||
|
<input name="quotaLimit" value="{quotaLimit}" style="width:350px;"> ({lang_0forunlimited})
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3">
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<table border=0 width=100%>
|
||||||
|
<tr bgcolor="{tr_color1}">
|
||||||
|
<td align="right" colspan="2">
|
||||||
|
<input type="submit" name="save" value="{lang_button}" onclick="selectAllOptions('mailAlternateAddress'); selectAllOptions('mailRoutingAddress');">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</center>
|
||||||
|
</form>
|
||||||
|
<!-- END form -->
|
||||||
|
|
||||||
|
<!-- BEGIN link_row -->
|
||||||
|
<tr bgcolor="{tr_color}">
|
||||||
|
<td colspan="2"> <a href="{row_link}">{row_text}</a></td>
|
||||||
|
</tr>
|
||||||
|
<!-- END link_row -->
|
BIN
emailadmin/templates/default/images/navbar.png
Normal file
BIN
emailadmin/templates/default/images/navbar.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.0 KiB |
87
emailadmin/templates/default/ldapsettings.tpl
Normal file
87
emailadmin/templates/default/ldapsettings.tpl
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<!-- BEGIN main -->
|
||||||
|
<center>
|
||||||
|
<table border="0" cellspacing="1" cellpading="0" width="95%">
|
||||||
|
<tr>
|
||||||
|
<td width="90%" valign="top">
|
||||||
|
<form action="{form_action}" method="post">
|
||||||
|
<table border="0" cellspacing="1" cellpading="0" width="100%">
|
||||||
|
<tr bgcolor="{bg_01}">
|
||||||
|
<td>
|
||||||
|
{lang_server_name}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" size="50" name="qmail_servername" value="{qmail_servername}">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{bg_02}">
|
||||||
|
<td>
|
||||||
|
{lang_server_description}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" size="50" name="description" value="{description}">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{bg_01}">
|
||||||
|
<td>
|
||||||
|
{lang_ldap_server}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" size="50">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{bg_02}">
|
||||||
|
<td>
|
||||||
|
{lang_ldap_basedn}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" size="50" name="ldap_basedn" value="{ldap_basedn}">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{bg_01}">
|
||||||
|
<td>
|
||||||
|
{lang_ldap_server_admin}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" size="50">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{bg_02}">
|
||||||
|
<td>
|
||||||
|
{lang_ldap_server_password}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" size="50">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{bg_01}">
|
||||||
|
<td align="left">
|
||||||
|
<a href="{done_link}">{lang_back}</a>
|
||||||
|
</td>
|
||||||
|
<td align="right">
|
||||||
|
<input type="submit" name="save_ldap" value="{lang_save}">
|
||||||
|
<input type="hidden" name="bo_action" value="save_ldap">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</center>
|
||||||
|
<!-- END main -->
|
||||||
|
|
||||||
|
<!-- BEGIN menu_row -->
|
||||||
|
<tr bgcolor="{menu_row_color}">
|
||||||
|
<td>
|
||||||
|
<nobr><a href="{menu_link}">{menu_description}</a><nobr>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- END menu_row -->
|
||||||
|
|
||||||
|
<!-- BEGIN menu_row_bold -->
|
||||||
|
<tr bgcolor="{menu_row_color}">
|
||||||
|
<td>
|
||||||
|
<nobr><b><a href="{menu_link}">{menu_description}</a></b><nobr>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- END menu_row_bold -->
|
35
emailadmin/templates/default/listprofiles.tpl
Executable file
35
emailadmin/templates/default/listprofiles.tpl
Executable file
@ -0,0 +1,35 @@
|
|||||||
|
<!-- BEGIN main -->
|
||||||
|
<center>
|
||||||
|
|
||||||
|
<table width="90%" border="0" cellspacing="0" cellpading="5">
|
||||||
|
<tr>
|
||||||
|
<td width="33%">
|
||||||
|
|
||||||
|
</td>
|
||||||
|
<td width="33%" align="center">
|
||||||
|
|
||||||
|
</td>
|
||||||
|
<td width="33%" align="right">
|
||||||
|
<a href="#" onclick="egw_openWindowCentered2('{add_link}','ea_addProfile',700,600); return false;">{lang_add_profile}</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3">
|
||||||
|
{server_next_match}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" align="right">
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3" align="right">
|
||||||
|
<button onclick="saveOrder()">{lang_save}</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
</center>
|
||||||
|
<!-- END main -->
|
||||||
|
|
25
emailadmin/templates/default/listservers.tpl
Executable file
25
emailadmin/templates/default/listservers.tpl
Executable file
@ -0,0 +1,25 @@
|
|||||||
|
<!-- BEGIN main -->
|
||||||
|
<center>
|
||||||
|
|
||||||
|
<table width="90%" border="0" cellspacing="1" cellpading="1">
|
||||||
|
<tr>
|
||||||
|
<td width="33%">
|
||||||
|
|
||||||
|
</td>
|
||||||
|
<td width="33%" align="center">
|
||||||
|
<b>{lang_server_list}</b>
|
||||||
|
</td>
|
||||||
|
<td width="33%" align="right">
|
||||||
|
<a href="{add_link}">{lang_add_server}</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="3">
|
||||||
|
{server_next_match}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
</center>
|
||||||
|
<!-- END main -->
|
||||||
|
|
25
emailadmin/templates/default/nextMatch.tpl
Normal file
25
emailadmin/templates/default/nextMatch.tpl
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<!-- HELLO -->
|
||||||
|
<table width="100%" border="0" align="center">
|
||||||
|
<tr>
|
||||||
|
{left_next_matchs}
|
||||||
|
<td align="center"><b>{description}</b></td>
|
||||||
|
{right_next_matchs}
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table width="100%" border="0" cellspacing="1" cellpading="1">
|
||||||
|
<thead>
|
||||||
|
<!-- BEGIN header_row -->
|
||||||
|
<tr bgcolor="{th_bg}">
|
||||||
|
{header_row_data}
|
||||||
|
</tr>
|
||||||
|
<!-- END header_row -->
|
||||||
|
</thead>
|
||||||
|
<tbody id="nextMatchBody">
|
||||||
|
<!-- BEGIN row_list -->
|
||||||
|
<tr id="{row_id}" bgcolor="{row_color}">
|
||||||
|
{row_data}
|
||||||
|
</tr>
|
||||||
|
<!-- END row_list -->
|
||||||
|
</tbody>
|
||||||
|
</table>
|
138
emailadmin/templates/default/options.tpl
Normal file
138
emailadmin/templates/default/options.tpl
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
<!-- BEGIN main -->
|
||||||
|
<center>
|
||||||
|
<table border="0" cellspacing="1" cellpading="0" width="95%">
|
||||||
|
<tr>
|
||||||
|
<td width="10%" valign="top">
|
||||||
|
<table border="0" cellspacing="1" cellpading="0" width="100%">
|
||||||
|
{menu_rows}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{activation_rows}
|
||||||
|
<tr bgcolor="{done_row_color}">
|
||||||
|
<td>
|
||||||
|
<a href="{done_link}">{lang_done}</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td width="90%" valign="top">
|
||||||
|
<form action="{form_action}" method="post">
|
||||||
|
<table width="100%" cellspacing="1" cellpading="0" border="0">
|
||||||
|
<tr bgcolor="{th_bg}">
|
||||||
|
<td colspan="2">
|
||||||
|
ldaplocaldelivery
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{bg_01}">
|
||||||
|
<td>
|
||||||
|
{desc_ldaplocaldelivery}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{bg_02}">
|
||||||
|
<td>
|
||||||
|
<select name="ldaplocaldelivery">
|
||||||
|
<option value="0" {ldaplocaldelivery_0}>{lang_disabled}</option>
|
||||||
|
<option value="1" {ldaplocaldelivery_1}>{lang_enabled}</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{th_bg}">
|
||||||
|
<td colspan="2">
|
||||||
|
ldapdefaultdotmode
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{bg_01}">
|
||||||
|
<td>
|
||||||
|
{desc_ldapdefaultdotmode}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{bg_02}">
|
||||||
|
<td>
|
||||||
|
<select name="ldapdefaultdotmode">
|
||||||
|
<option value="both" {ldapdefaultdotmode_both}>both</option>
|
||||||
|
<option value="dotonly" {ldapdefaultdotmode_dotonly}>dotonly</option>
|
||||||
|
<option value="ldaponly" {ldapdefaultdotmode_ldaponly}>ldaponly</option>
|
||||||
|
<option value="ldapwithprog" {ldapdefaultdotmode_ldapwithprog}>ldapwithprog</option>
|
||||||
|
<option value="none" {ldapdefaultdotmode_none}>none</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{th_bg}">
|
||||||
|
<td colspan="2">
|
||||||
|
ldapbasedn
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{bg_01}">
|
||||||
|
<td>
|
||||||
|
{desc_ldapbasedn}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{bg_02}">
|
||||||
|
<td>
|
||||||
|
<input size="50" name="ldapbasedn" value="{ldapbasedn}">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{th_bg}">
|
||||||
|
<td colspan="2">
|
||||||
|
dirmaker
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr bgcolor="{th_bg}">
|
||||||
|
<td colspan="2">
|
||||||
|
ldapcluster
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</center>
|
||||||
|
<!-- END main -->
|
||||||
|
|
||||||
|
<!-- BEGIN menu_row -->
|
||||||
|
<tr bgcolor="{menu_row_color}">
|
||||||
|
<td>
|
||||||
|
<nobr><a href="{menu_link}">{menu_description}</a><nobr>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- END menu_row -->
|
||||||
|
|
||||||
|
<!-- BEGIN menu_row_bold -->
|
||||||
|
<tr bgcolor="{menu_row_color}">
|
||||||
|
<td>
|
||||||
|
<nobr><b><a href="{menu_link}">{menu_description}</a></b><nobr>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- END menu_row_bold -->
|
||||||
|
|
||||||
|
<!-- BEGIN activation_row -->
|
||||||
|
<tr bgcolor="{bg_01}">
|
||||||
|
<td>
|
||||||
|
<a href="{activation_link}">{lang_activate}</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- END activation_row -->
|
112
emailadmin/templates/default/smtprouting.tpl
Normal file
112
emailadmin/templates/default/smtprouting.tpl
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
<!-- BEGIN main -->
|
||||||
|
<center>
|
||||||
|
<table border="0" cellspacing="1" cellpading="0" width="95%">
|
||||||
|
<tr>
|
||||||
|
<td width="10%" valign="top">
|
||||||
|
<table border="0" cellspacing="1" cellpading="0" width="100%">
|
||||||
|
{menu_rows}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{activation_rows}
|
||||||
|
<tr bgcolor="{done_row_color}">
|
||||||
|
<td>
|
||||||
|
<a href="{done_link}">{lang_done}</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td width="90%" valign="top">
|
||||||
|
<table width="100%" cellspacing="1" cellpading="0" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<form action="{form_action}" method="post">
|
||||||
|
<table width="100%" cellspacing="1" cellpading="0" border="0">
|
||||||
|
<tr bgcolor="{th_bg}">
|
||||||
|
<td align="center">
|
||||||
|
{lang_domain_name}
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
{lang_remote_server}
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
{lang_remote_port}
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
{lang_delete}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{smtproute_rows}
|
||||||
|
<tr bgcolor="{last_row_color}">
|
||||||
|
<td align="center">
|
||||||
|
<input type="text" size="30" name="domain_name">
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<input type="text" size="30" name="remote_server">
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<input type="text" size="4" value="25" name="remote_port">
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<input type="submit" name="add_smtp_route" value="{lang_add}">
|
||||||
|
<input type="hidden" name="bo_action" value="add_smtproute">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</center>
|
||||||
|
<!-- END main -->
|
||||||
|
|
||||||
|
<!-- BEGIN menu_row -->
|
||||||
|
<tr bgcolor="{menu_row_color}">
|
||||||
|
<td>
|
||||||
|
<nobr><a href="{menu_link}">{menu_description}</a><nobr>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- END menu_row -->
|
||||||
|
|
||||||
|
<!-- BEGIN menu_row_bold -->
|
||||||
|
<tr bgcolor="{menu_row_color}">
|
||||||
|
<td>
|
||||||
|
<nobr><b><a href="{menu_link}">{menu_description}</a></b><nobr>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- END menu_row_bold -->
|
||||||
|
|
||||||
|
<!-- BEGIN activation_row -->
|
||||||
|
<tr bgcolor="{bg_01}">
|
||||||
|
<td>
|
||||||
|
<a href="{activation_link}">{lang_activate}</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- END activation_row -->
|
||||||
|
|
||||||
|
<!-- BEGIN smtproute_row -->
|
||||||
|
<tr bgcolor="{row_color}">
|
||||||
|
<td align="center">
|
||||||
|
{domain_name}
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
{remote_server}
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
{remote_port}
|
||||||
|
</td>
|
||||||
|
<td align="center">
|
||||||
|
<a href={delete_route_link}>{lang_delete}</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<!-- END smtproute_row -->
|
BIN
emailadmin/templates/jerryr/images/navbar-over.png
Normal file
BIN
emailadmin/templates/jerryr/images/navbar-over.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.0 KiB |
BIN
emailadmin/templates/jerryr/images/navbar.png
Normal file
BIN
emailadmin/templates/jerryr/images/navbar.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
280
felamimail/COPYING
Normal file
280
felamimail/COPYING
Normal file
@ -0,0 +1,280 @@
|
|||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||||
|
675 Mass Ave, Cambridge, MA 02139, USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Library General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
229
felamimail/Changelog
Normal file
229
felamimail/Changelog
Normal file
@ -0,0 +1,229 @@
|
|||||||
|
2007-06-19 Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* added support for signatures managed by admin aka forced signatures
|
||||||
|
|
||||||
|
2007-03-05 Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* fixed not working disabling of STARTTLS
|
||||||
|
* fixed borken FeLaMiMail preferences translations
|
||||||
|
* fixed full stop on Sieve connection error
|
||||||
|
* made INBOX counter on homepage working again (based on patch from Pavel Šorejs)
|
||||||
|
* display 0 instead of on empty folders (based on patch from Pavel Šorejs)
|
||||||
|
* removed some not longer needed files
|
||||||
|
|
||||||
|
2007-02-28 Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* rewrote logic to encode header, to handle wrongly encoded header
|
||||||
|
|
||||||
|
2007-02-26 Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* added support for messages containing only attachments (application/..., audio/...)
|
||||||
|
|
||||||
|
2007-02-16 Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* fix for loosing formating of centering, right-justification, text coloring and italics when composing from draft
|
||||||
|
* fixed my emailaddress in changelog file
|
||||||
|
|
||||||
|
2007-02-15 Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* enabled sieve support for custom email account settings
|
||||||
|
|
||||||
|
2007-02-14 Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* improved foldermanagement for server not supporting acl
|
||||||
|
* extended imap test script
|
||||||
|
|
||||||
|
2007-02-13 Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* updated imap server test script
|
||||||
|
|
||||||
|
2007-02-12 Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* added a script to test imap servers
|
||||||
|
|
||||||
|
2007-01-24 Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* removed some old code, which got not used anymore, but created problems (the blind gut of FeLaMiMail :-))
|
||||||
|
|
||||||
|
2007-01-13 Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* finally added support the in-reply-to header
|
||||||
|
|
||||||
|
2007-01-11 Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* added support for serverside sort
|
||||||
|
* you make one signature the default one
|
||||||
|
* added support for searching content of message body
|
||||||
|
|
||||||
|
2007-01-05 Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* fetch quota from imap server only, if imap server supports quota
|
||||||
|
* improved autocreation of folders
|
||||||
|
|
||||||
|
2006-12-31 Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* major rewrite of the imap backend. php-imap is mostly gone. all imap code
|
||||||
|
is now based on the PEAR class Net_IMAP
|
||||||
|
* drafts keep their formating
|
||||||
|
* saving a message is working now
|
||||||
|
* improved folder handling
|
||||||
|
* signatures can now be managed from IE too
|
||||||
|
* make FeLaMiMail dependent on egw-pear
|
||||||
|
|
||||||
|
2006-11-20 Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* passwords are now hidden, when editing account settings
|
||||||
|
|
||||||
|
2006-11-08 Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* edit signature is now using fckeditor too
|
||||||
|
* improved generating multipart messages again
|
||||||
|
|
||||||
|
2006-11-07 Lars Kneschke <l.kneschke@metaways.de>
|
||||||
|
* switched to fckeditor for writing html emails
|
||||||
|
* fixed login problem, when using userdefined accounts(loginname was not sent)
|
||||||
|
* improved generating multipart messages
|
||||||
|
|
||||||
|
20061027
|
||||||
|
- fixed printing when email conatains a cc
|
||||||
|
- signature description was always "undefined" when using internet explorer
|
||||||
|
- reorganized compose dialog a little bit. The folder select button as now
|
||||||
|
directly beside the select box for from, to, cc, reply to and folder
|
||||||
|
- fixed a JS error, when selecting the folder from the folder tree
|
||||||
|
|
||||||
|
20061026
|
||||||
|
- added some more logic, to also import the organisation, when importing addresses by
|
||||||
|
clicking at the icon behind the emailaddresses
|
||||||
|
|
||||||
|
20061025
|
||||||
|
- made printing working again
|
||||||
|
- fixed some IE only Javascript problems
|
||||||
|
|
||||||
|
20061004
|
||||||
|
- completly finnished rewrite of signature handling
|
||||||
|
- fixed display of messages. You get not the same font also used everwhere in eGW
|
||||||
|
|
||||||
|
20060928
|
||||||
|
- finished signature handling rewrite mostly. You can now define multiple signatures
|
||||||
|
and select them while writing a email.
|
||||||
|
|
||||||
|
20060914
|
||||||
|
- removed (temporarly) the dbcache. FeLaMiMail now works completly against the imapserver.
|
||||||
|
This requires a server with search and sort functionality. Big folders
|
||||||
|
should be displayed now very fast.
|
||||||
|
- you can sort by message status now
|
||||||
|
- updating trash folder counter and quota display when deleting messages
|
||||||
|
|
||||||
|
20060821
|
||||||
|
- added support for composing html emails
|
||||||
|
- fixed some minor internet explorer only display problems
|
||||||
|
- messages gets now displayed in a separate iframe. This allows to display html emails, whitout breaking css styles of the main display window. Also only the iframe gets a scrollbar now. That stops the "jumping buttons". In the past they were jumping to the left, when the email was to long and a scrollbar got displayed on the right.
|
||||||
|
|
||||||
|
20060802
|
||||||
|
- fixed bug [ 1487161 ] felamimail <> UTF-8 <> Postgres trouble
|
||||||
|
- fixed bug [ 1451287 ] Database error when accessing some folders
|
||||||
|
|
||||||
|
20060801
|
||||||
|
- added support for saving drafts
|
||||||
|
- removed debug code from the javascript code
|
||||||
|
- current inputfield is blinking now, when livesearch starts
|
||||||
|
- removed unneeded admin section
|
||||||
|
|
||||||
|
20051128
|
||||||
|
- fixed compose link in sidebox menu
|
||||||
|
- added action to cancel button on edit forwarding page
|
||||||
|
- removed admin section, any configuration is now done in emailadmin
|
||||||
|
|
||||||
|
20051121
|
||||||
|
- fixed the display of messages. messages now always open in new windows
|
||||||
|
- fixed navbar and replaced text with icons
|
||||||
|
|
||||||
|
20051120
|
||||||
|
- removed dependency on email
|
||||||
|
|
||||||
|
20051018
|
||||||
|
- fixed Bug where nodisplayable characters got displayed and broke caching
|
||||||
|
in the database
|
||||||
|
|
||||||
|
20051013
|
||||||
|
- added feature to let Postfix LDAP users edit there own email forwarding settings
|
||||||
|
feature can be enabled/disabled by settings in emailadmin
|
||||||
|
|
||||||
|
20051012
|
||||||
|
- fixed a bug, which triggered when compressing the folder
|
||||||
|
|
||||||
|
20051011
|
||||||
|
- fixed handling of "empty trash" and "compress folder"
|
||||||
|
the links got moved to the sidebox and are using ajax too
|
||||||
|
- fixed the header of the address row in the main view
|
||||||
|
the sent folder displays "to" all other folders are diplaying "from"
|
||||||
|
|
||||||
|
Version 1.0
|
||||||
|
- updated FeLaMiMail to use AJAX
|
||||||
|
- reworked the way the UI works. Most UI actions now don't need any reload
|
||||||
|
anymore.
|
||||||
|
|
||||||
|
Version 0.9.6
|
||||||
|
|
||||||
|
- displaying of subfolders with hyphen was broken Bug #1195101
|
||||||
|
- patch from Regis Regis Leroy to display counters on folders and improve
|
||||||
|
folder handling
|
||||||
|
- improved folder management. You can create now subfolders in the top
|
||||||
|
level. This should also improve support for UW IMAP
|
||||||
|
- fixed charset bug in folder management pages
|
||||||
|
- added support for javascript based folder tree
|
||||||
|
|
||||||
|
Version 0.9.5
|
||||||
|
|
||||||
|
- ported Smartsieve to FeLaMiMail
|
||||||
|
- added highlighting for quotes (copied from horde)
|
||||||
|
- fixed sorting
|
||||||
|
- added all needed options to preferences
|
||||||
|
- can now be sorted by size too
|
||||||
|
- forwarding messages now as message/rfc822
|
||||||
|
- improved mainview
|
||||||
|
- javascript selectbutton to select all messages
|
||||||
|
- fixed layout
|
||||||
|
- support colors from selected layout
|
||||||
|
- added support for emailadmin
|
||||||
|
- updated PHPMailer to version 0.7.1
|
||||||
|
- added support for localized smtp error messages
|
||||||
|
- improved mime type handling
|
||||||
|
- also forward attachments
|
||||||
|
- support for <20>... in folder names
|
||||||
|
- support html emails(most evil tags get removed)
|
||||||
|
- code cleanup
|
||||||
|
- added Sidebox for Idots
|
||||||
|
- added user defined EMail accounts again, can be deactivated by admin
|
||||||
|
|
||||||
|
Version 0.9.3/0.9.4
|
||||||
|
|
||||||
|
- added usefull error messsages, if login to imap server fails
|
||||||
|
- imaps support(encryption only and encryption with authentication)
|
||||||
|
- added smtp auth support
|
||||||
|
- print function; displays the page without the phpgw navbar, so will
|
||||||
|
print only the email
|
||||||
|
- removed old Squirrelmail code again
|
||||||
|
- the code to display emails is rewriten too, it's all based
|
||||||
|
on phpGW now
|
||||||
|
- rewrote folder management
|
||||||
|
- removed images, they where not always helpfull
|
||||||
|
|
||||||
|
- filter dialog improved again
|
||||||
|
- you can store multiple filters now
|
||||||
|
- added quicksearch
|
||||||
|
|
||||||
|
- integration of sieve-php
|
||||||
|
- you can manage sieve scripts on a sieve enables imap server
|
||||||
|
|
||||||
|
- internal code cleanup
|
||||||
|
- modified linux-at-work.de template
|
||||||
|
- updated preferences dialog to do it the phpgroupware way
|
||||||
|
- you can define a refresh time for the mailbox message list
|
||||||
|
- fixed a nasty bug, when replying to emails which contain " or , in the
|
||||||
|
to,cc or bcc fields
|
||||||
|
- fixed quoted printable en/decoding in the
|
||||||
|
headers/subject(it was time to read the rfc's :) )
|
||||||
|
- highlithing of web and email urls
|
||||||
|
- enabled vmailmgr login again
|
||||||
|
- don't halt smtp error messages anymore, but display the error
|
||||||
|
and go back to the compose window
|
||||||
|
- display the organization when showing the mail
|
||||||
|
- fixed download/save of attachment under IE and SSL
|
||||||
|
|
||||||
|
Version 0.9.2
|
||||||
|
|
||||||
|
- improved filter dialog
|
||||||
|
- added a easy way to enable/disable the filter
|
||||||
|
- you can search for from, to, subject
|
||||||
|
|
||||||
|
- updated the linux-at-work temmplate
|
||||||
|
|
||||||
|
- fixed some bugs, where the mainview where broken, because of missing templates
|
||||||
|
|
||||||
|
- the user preferences where not working correctly
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user