moved plugins
@ -1,43 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Additional Message Headers
|
||||
*
|
||||
* Very simple plugin which will add additional headers
|
||||
* to or remove them from outgoing messages.
|
||||
*
|
||||
* Enable the plugin in config/main.inc.php and add your desired headers:
|
||||
* $rcmail_config['additional_message_headers'] = array('User-Agent');
|
||||
*
|
||||
* @version @package_version@
|
||||
* @author Ziba Scott
|
||||
* @website http://roundcube.net
|
||||
*/
|
||||
class additional_message_headers extends rcube_plugin
|
||||
{
|
||||
public $task = 'mail';
|
||||
|
||||
function init()
|
||||
{
|
||||
$this->add_hook('outgoing_message_headers', array($this, 'message_headers'));
|
||||
}
|
||||
|
||||
function message_headers($args)
|
||||
{
|
||||
$this->load_config();
|
||||
|
||||
// additional email headers
|
||||
$additional_headers = rcmail::get_instance()->config->get('additional_message_headers',array());
|
||||
foreach($additional_headers as $header=>$value){
|
||||
if (null === $value) {
|
||||
unset($args['headers'][$header]);
|
||||
} else {
|
||||
$args['headers'][$header] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
return $args;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
@ -1,47 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<package packagerversion="1.9.0" version="2.0" xmlns="http://pear.php.net/dtd/package-2.0" xmlns:tasks="http://pear.php.net/dtd/tasks-1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pear.php.net/dtd/tasks-1.0
|
||||
http://pear.php.net/dtd/tasks-1.0.xsd
|
||||
http://pear.php.net/dtd/package-2.0
|
||||
http://pear.php.net/dtd/package-2.0.xsd">
|
||||
<name>additional_message_headers</name>
|
||||
<channel>pear.roundcube.net</channel>
|
||||
<summary>Additional message headers for RoundCube</summary>
|
||||
<description>Very simple plugin which will add additional headers to or remove them from outgoing messages.</description>
|
||||
<lead>
|
||||
<name>Ziba Scott</name>
|
||||
<user>ziba</user>
|
||||
<email>email@example.org</email>
|
||||
<active>yes</active>
|
||||
</lead>
|
||||
<date>2010-01-16</date>
|
||||
<time>18:19:33</time>
|
||||
<version>
|
||||
<release>1.1.0</release>
|
||||
<api>1.1.0</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<license uri="http://www.gnu.org/licenses/gpl-2.0.html">GNU GPL v2</license>
|
||||
<notes>-</notes>
|
||||
<contents>
|
||||
<dir baseinstalldir="/" name="/">
|
||||
<file name="additional_message_headers.php" role="php">
|
||||
<tasks:replace from="@name@" to="name" type="package-info" />
|
||||
<tasks:replace from="@package_version@" to="version" type="package-info" />
|
||||
</file>
|
||||
</dir> <!-- / -->
|
||||
</contents>
|
||||
<dependencies>
|
||||
<required>
|
||||
<php>
|
||||
<min>5.2.1</min>
|
||||
</php>
|
||||
<pearinstaller>
|
||||
<min>1.7.0</min>
|
||||
</pearinstaller>
|
||||
</required>
|
||||
</dependencies>
|
||||
<phprelease />
|
||||
</package>
|
@ -1,36 +0,0 @@
|
||||
/*
|
||||
* Archive plugin script
|
||||
* @version 1.2
|
||||
*/
|
||||
|
||||
function rcmail_archive(prop)
|
||||
{
|
||||
if (!rcmail.env.uid && (!rcmail.message_list || !rcmail.message_list.get_selection().length))
|
||||
return;
|
||||
|
||||
var uids = rcmail.env.uid ? rcmail.env.uid : rcmail.message_list.get_selection().join(',');
|
||||
|
||||
rcmail.set_busy(true, 'loading');
|
||||
rcmail.http_post('plugin.archive', '_uid='+uids+'&_mbox='+urlencode(rcmail.env.mailbox), true);
|
||||
}
|
||||
|
||||
// callback for app-onload event
|
||||
if (window.rcmail) {
|
||||
rcmail.addEventListener('init', function(evt) {
|
||||
|
||||
// register command (directly enable in message view mode)
|
||||
rcmail.register_command('plugin.archive', rcmail_archive, (rcmail.env.uid && rcmail.env.mailbox != rcmail.env.archive_folder));
|
||||
|
||||
// add event-listener to message list
|
||||
if (rcmail.message_list)
|
||||
rcmail.message_list.addEventListener('select', function(list){
|
||||
rcmail.enable_command('plugin.archive', (list.get_selection().length > 0 && rcmail.env.mailbox != rcmail.env.archive_folder));
|
||||
});
|
||||
|
||||
// set css style for archive folder
|
||||
var li;
|
||||
if (rcmail.env.archive_folder && rcmail.env.archive_folder_icon && (li = rcmail.get_folder_li(rcmail.env.archive_folder)))
|
||||
$(li).css('background-image', 'url(' + rcmail.env.archive_folder_icon + ')');
|
||||
})
|
||||
}
|
||||
|
@ -1,144 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Archive
|
||||
*
|
||||
* Plugin that adds a new button to the mailbox toolbar
|
||||
* to move messages to a (user selectable) archive folder.
|
||||
*
|
||||
* @version 1.4
|
||||
* @author Andre Rodier, Thomas Bruederli
|
||||
*/
|
||||
class archive extends rcube_plugin
|
||||
{
|
||||
public $task = 'mail|settings';
|
||||
|
||||
function init()
|
||||
{
|
||||
$rcmail = rcmail::get_instance();
|
||||
|
||||
$this->register_action('plugin.archive', array($this, 'request_action'));
|
||||
|
||||
// There is no "Archived flags"
|
||||
// $GLOBALS['IMAP_FLAGS']['ARCHIVED'] = 'Archive';
|
||||
if ($rcmail->task == 'mail' && ($rcmail->action == '' || $rcmail->action == 'show')
|
||||
&& ($archive_folder = $rcmail->config->get('archive_mbox'))) {
|
||||
$skin_path = $this->local_skin_path();
|
||||
|
||||
$this->include_script('archive.js');
|
||||
$this->add_texts('localization', true);
|
||||
$this->add_button(
|
||||
array(
|
||||
'command' => 'plugin.archive',
|
||||
'imagepas' => $skin_path.'/archive_pas.png',
|
||||
'imageact' => $skin_path.'/archive_act.png',
|
||||
'title' => 'buttontitle',
|
||||
'domain' => $this->ID,
|
||||
),
|
||||
'toolbar');
|
||||
|
||||
// register hook to localize the archive folder
|
||||
$this->add_hook('render_mailboxlist', array($this, 'render_mailboxlist'));
|
||||
|
||||
// set env variable for client
|
||||
$rcmail->output->set_env('archive_folder', $archive_folder);
|
||||
$rcmail->output->set_env('archive_folder_icon', $this->url($skin_path.'/foldericon.png'));
|
||||
|
||||
// add archive folder to the list of default mailboxes
|
||||
if (($default_folders = $rcmail->config->get('default_imap_folders')) && !in_array($archive_folder, $default_folders)) {
|
||||
$default_folders[] = $archive_folder;
|
||||
$rcmail->config->set('default_imap_folders', $default_folders);
|
||||
}
|
||||
}
|
||||
else if ($rcmail->task == 'settings') {
|
||||
$dont_override = $rcmail->config->get('dont_override', array());
|
||||
if (!in_array('archive_mbox', $dont_override)) {
|
||||
$this->add_hook('user_preferences', array($this, 'prefs_table'));
|
||||
$this->add_hook('save_preferences', array($this, 'save_prefs'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function render_mailboxlist($p)
|
||||
{
|
||||
$rcmail = rcmail::get_instance();
|
||||
$archive_folder = $rcmail->config->get('archive_mbox');
|
||||
|
||||
// set localized name for the configured archive folder
|
||||
if ($archive_folder) {
|
||||
if (isset($p['list'][$archive_folder]))
|
||||
$p['list'][$archive_folder]['name'] = $this->gettext('archivefolder');
|
||||
else // search in subfolders
|
||||
$this->_mod_folder_name($p['list'], $archive_folder, $this->gettext('archivefolder'));
|
||||
}
|
||||
|
||||
return $p;
|
||||
}
|
||||
|
||||
function _mod_folder_name(&$list, $folder, $new_name)
|
||||
{
|
||||
foreach ($list as $idx => $item) {
|
||||
if ($item['id'] == $folder) {
|
||||
$list[$idx]['name'] = $new_name;
|
||||
return true;
|
||||
} else if (!empty($item['folders']))
|
||||
if ($this->_mod_folder_name($list[$idx]['folders'], $folder, $new_name))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function request_action()
|
||||
{
|
||||
$this->add_texts('localization');
|
||||
|
||||
$uids = get_input_value('_uid', RCUBE_INPUT_POST);
|
||||
$mbox = get_input_value('_mbox', RCUBE_INPUT_POST);
|
||||
|
||||
$rcmail = rcmail::get_instance();
|
||||
|
||||
// There is no "Archive flags", but I left this line in case it may be useful
|
||||
// $rcmail->imap->set_flag($uids, 'ARCHIVE');
|
||||
|
||||
if (($archive_mbox = $rcmail->config->get('archive_mbox')) && $mbox != $archive_mbox) {
|
||||
$rcmail->output->command('move_messages', $archive_mbox);
|
||||
$rcmail->output->command('display_message', $this->gettext('archived'), 'confirmation');
|
||||
}
|
||||
|
||||
$rcmail->output->send();
|
||||
}
|
||||
|
||||
function prefs_table($args)
|
||||
{
|
||||
global $CURR_SECTION;
|
||||
|
||||
if ($args['section'] == 'folders') {
|
||||
$this->add_texts('localization');
|
||||
|
||||
$rcmail = rcmail::get_instance();
|
||||
|
||||
// load folders list when needed
|
||||
if ($CURR_SECTION)
|
||||
$select = rcmail_mailbox_select(array('noselection' => '---', 'realnames' => true,
|
||||
'maxlength' => 30, 'exceptions' => array('INBOX')));
|
||||
else
|
||||
$select = new html_select();
|
||||
|
||||
$args['blocks']['main']['options']['archive_mbox'] = array(
|
||||
'title' => $this->gettext('archivefolder'),
|
||||
'content' => $select->show($rcmail->config->get('archive_mbox'), array('name' => "_archive_mbox"))
|
||||
);
|
||||
}
|
||||
|
||||
return $args;
|
||||
}
|
||||
|
||||
function save_prefs($args)
|
||||
{
|
||||
if ($args['section'] == 'folders') {
|
||||
$args['prefs']['archive_mbox'] = get_input_value('_archive_mbox', RCUBE_INPUT_POST);
|
||||
return $args;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
|
||||
+-----------------------------------------------------------------------+
|
||||
| language/cs_CZ/labels.inc |
|
||||
| |
|
||||
| Language file of the RoundCube archive plugin |
|
||||
| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
|
||||
| Licensed under the GNU GPL |
|
||||
| |
|
||||
+-----------------------------------------------------------------------+
|
||||
| Author: Milan Kozak <hodza@hodza.net> |
|
||||
+-----------------------------------------------------------------------+
|
||||
|
||||
@version $Id: labels.inc 2993 2009-09-26 18:32:07Z alec $
|
||||
|
||||
*/
|
||||
|
||||
$labels = array();
|
||||
$labels['buttontitle'] = 'Archivovat zprávu';
|
||||
$labels['archived'] = 'Úspěšně vloženo do archivu';
|
||||
$labels['archivefolder'] = 'Archiv';
|
||||
|
||||
?>
|
@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['buttontitle'] = 'Nachricht archivieren';
|
||||
$labels['archived'] = 'Nachricht erfolgreich archiviert';
|
||||
$labels['archivefolder'] = 'Archiv';
|
||||
|
||||
?>
|
@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['buttontitle'] = 'Nachricht archivieren';
|
||||
$labels['archived'] = 'Nachricht erfolgreich archiviert';
|
||||
$labels['archivefolder'] = 'Archiv';
|
||||
|
||||
?>
|
@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['buttontitle'] = 'Archive this message';
|
||||
$labels['archived'] = 'Successfully archived';
|
||||
$labels['archivefolder'] = 'Archive';
|
||||
|
||||
?>
|
@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['buttontitle'] = 'Arhiveeri see kiri';
|
||||
$labels['archived'] = 'Edukalt arhiveeritud';
|
||||
$labels['archivefolder'] = 'Arhiveeri';
|
||||
|
||||
?>
|
@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['buttontitle'] = 'Archiver ce message';
|
||||
$labels['archived'] = 'Message archivé avec success';
|
||||
$labels['archivefolder'] = 'Archive';
|
||||
|
||||
?>
|
@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['buttontitle'] = 'Przenieś do archiwum';
|
||||
$labels['archived'] = 'Pomyślnie zarchiwizowano';
|
||||
$labels['archivefolder'] = 'Archiwum';
|
||||
|
||||
?>
|
@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['buttontitle'] = 'Переместить выбранное в архив';
|
||||
$labels['archived'] = 'Перенесено в Архив';
|
||||
$labels['archivefolder'] = 'Архив';
|
||||
|
||||
?>
|
@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['buttontitle'] = '封存此信件';
|
||||
$labels['archived'] = '已成功封存';
|
||||
$labels['archivefolder'] = '封存';
|
||||
|
||||
?>
|
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 977 B |
Before Width: | Height: | Size: 3.2 KiB |
@ -1,45 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Sample plugin to try out some hooks.
|
||||
* This performs an automatic login if accessed from localhost
|
||||
*/
|
||||
class autologon extends rcube_plugin
|
||||
{
|
||||
public $task = 'login';
|
||||
|
||||
function init()
|
||||
{
|
||||
$this->add_hook('startup', array($this, 'startup'));
|
||||
$this->add_hook('authenticate', array($this, 'authenticate'));
|
||||
}
|
||||
|
||||
function startup($args)
|
||||
{
|
||||
$rcmail = rcmail::get_instance();
|
||||
|
||||
// change action to login
|
||||
if (empty($_SESSION['user_id']) && !empty($_GET['_autologin']) && $this->is_localhost())
|
||||
$args['action'] = 'login';
|
||||
|
||||
return $args;
|
||||
}
|
||||
|
||||
function authenticate($args)
|
||||
{
|
||||
if (!empty($_GET['_autologin']) && $this->is_localhost()) {
|
||||
$args['user'] = 'me';
|
||||
$args['pass'] = '******';
|
||||
$args['host'] = 'localhost';
|
||||
}
|
||||
|
||||
return $args;
|
||||
}
|
||||
|
||||
function is_localhost()
|
||||
{
|
||||
return $_SERVER['REMOTE_ADDR'] == '::1' || $_SERVER['REMOTE_ADDR'] == '127.0.0.1';
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,156 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Filesystem Attachments
|
||||
*
|
||||
* This plugin which provides database backed storage for temporary
|
||||
* attachment file handling. The primary advantage of this plugin
|
||||
* is its compatibility with round-robin dns multi-server roundcube
|
||||
* installations.
|
||||
*
|
||||
* This plugin relies on the core filesystem_attachments plugin
|
||||
*
|
||||
* @author Ziba Scott <ziba@umich.edu>
|
||||
*
|
||||
*/
|
||||
require_once('plugins/filesystem_attachments/filesystem_attachments.php');
|
||||
class database_attachments extends filesystem_attachments
|
||||
{
|
||||
|
||||
// A prefix for the cache key used in the session and in the key field of the cache table
|
||||
private $cache_prefix = "db_attach";
|
||||
|
||||
/**
|
||||
* Helper method to generate a unique key for the given attachment file
|
||||
*/
|
||||
private function _key($filepath)
|
||||
{
|
||||
return $this->cache_prefix.md5(mktime().$filepath.$_SESSION['user_id']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save a newly uploaded attachment
|
||||
*/
|
||||
function upload($args)
|
||||
{
|
||||
$args['status'] = false;
|
||||
$rcmail = rcmail::get_instance();
|
||||
$key = $this->_key($args['path']);
|
||||
$data = base64_encode(file_get_contents($args['path']));
|
||||
|
||||
$status = $rcmail->db->query(
|
||||
"INSERT INTO ".get_table_name('cache')."
|
||||
(created, user_id, cache_key, data)
|
||||
VALUES (".$rcmail->db->now().", ?, ?, ?)",
|
||||
$_SESSION['user_id'],
|
||||
$key,
|
||||
$data);
|
||||
|
||||
if ($status) {
|
||||
$args['id'] = $key;
|
||||
$args['status'] = true;
|
||||
unset($args['path']);
|
||||
}
|
||||
|
||||
return $args;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save an attachment from a non-upload source (draft or forward)
|
||||
*/
|
||||
function save($args)
|
||||
{
|
||||
$args['status'] = false;
|
||||
$rcmail = rcmail::get_instance();
|
||||
|
||||
$key = $this->_key($args['name']);
|
||||
|
||||
if ($args['path'])
|
||||
$args['data'] = file_get_contents($args['path']);
|
||||
|
||||
$data = base64_encode($args['data']);
|
||||
|
||||
$status = $rcmail->db->query(
|
||||
"INSERT INTO ".get_table_name('cache')."
|
||||
(created, user_id, cache_key, data)
|
||||
VALUES (".$rcmail->db->now().", ?, ?, ?)",
|
||||
$_SESSION['user_id'],
|
||||
$key,
|
||||
$data);
|
||||
|
||||
if ($status) {
|
||||
$args['id'] = $key;
|
||||
$args['status'] = true;
|
||||
}
|
||||
|
||||
return $args;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove an attachment from storage
|
||||
* This is triggered by the remove attachment button on the compose screen
|
||||
*/
|
||||
function remove($args)
|
||||
{
|
||||
$args['status'] = false;
|
||||
$rcmail = rcmail::get_instance();
|
||||
$status = $rcmail->db->query(
|
||||
"DELETE FROM ".get_table_name('cache')."
|
||||
WHERE user_id=?
|
||||
AND cache_key=?",
|
||||
$_SESSION['user_id'],
|
||||
$args['id']);
|
||||
|
||||
if ($status) {
|
||||
$args['status'] = true;
|
||||
}
|
||||
|
||||
return $args;
|
||||
}
|
||||
|
||||
/**
|
||||
* When composing an html message, image attachments may be shown
|
||||
* For this plugin, $this->get_attachment will check the file and
|
||||
* return it's contents
|
||||
*/
|
||||
function display($args)
|
||||
{
|
||||
return $this->get_attachment($args);
|
||||
}
|
||||
|
||||
/**
|
||||
* When displaying or sending the attachment the file contents are fetched
|
||||
* using this method. This is also called by the display_attachment hook.
|
||||
*/
|
||||
function get_attachment($args)
|
||||
{
|
||||
$rcmail = rcmail::get_instance();
|
||||
|
||||
$sql_result = $rcmail->db->query(
|
||||
"SELECT cache_id, data
|
||||
FROM ".get_table_name('cache')."
|
||||
WHERE user_id=?
|
||||
AND cache_key=?",
|
||||
$_SESSION['user_id'],
|
||||
$args['id']);
|
||||
|
||||
if ($sql_arr = $rcmail->db->fetch_assoc($sql_result)) {
|
||||
$args['data'] = base64_decode($sql_arr['data']);
|
||||
$args['status'] = true;
|
||||
}
|
||||
|
||||
return $args;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete all temp files associated with this user
|
||||
*/
|
||||
function cleanup($args)
|
||||
{
|
||||
$rcmail = rcmail::get_instance();
|
||||
$rcmail->db->query(
|
||||
"DELETE FROM ".get_table_name('cache')."
|
||||
WHERE user_id=?
|
||||
AND cache_key like '{$this->cache_prefix}%'",
|
||||
$_SESSION['user_id']);
|
||||
}
|
||||
}
|
@ -1,146 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Debug Logger
|
||||
*
|
||||
* Enhanced logging for debugging purposes. It is not recommened
|
||||
* to be enabled on production systems without testing because of
|
||||
* the somewhat increased memory, cpu and disk i/o overhead.
|
||||
*
|
||||
* Debug Logger listens for existing console("message") calls and
|
||||
* introduces start and end tags as well as free form tagging
|
||||
* which can redirect messages to files. The resulting log files
|
||||
* provide timing and tag quantity results.
|
||||
*
|
||||
* Enable the plugin in config/main.inc.php and add your desired
|
||||
* log types and files.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Ziba Scott
|
||||
* @website http://roundcube.net
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* config/main.inc.php:
|
||||
*
|
||||
* // $rcmail_config['debug_logger'][type of logging] = name of file in log_dir
|
||||
* // The 'master' log includes timing information
|
||||
* $rcmail_config['debug_logger']['master'] = 'master';
|
||||
* // If you want sql messages to also go into a separate file
|
||||
* $rcmail_config['debug_logger']['sql'] = 'sql';
|
||||
*
|
||||
* index.php (just after $RCMAIL->plugins->init()):
|
||||
*
|
||||
* console("my test","start");
|
||||
* console("my message");
|
||||
* console("my sql calls","start");
|
||||
* console("cp -r * /dev/null","shell exec");
|
||||
* console("select * from example","sql");
|
||||
* console("select * from example","sql");
|
||||
* console("select * from example","sql");
|
||||
* console("end");
|
||||
* console("end");
|
||||
*
|
||||
*
|
||||
* logs/master (after reloading the main page):
|
||||
*
|
||||
* [17-Feb-2009 16:51:37 -0500] start: Task: mail.
|
||||
* [17-Feb-2009 16:51:37 -0500] start: my test
|
||||
* [17-Feb-2009 16:51:37 -0500] my message
|
||||
* [17-Feb-2009 16:51:37 -0500] shell exec: cp -r * /dev/null
|
||||
* [17-Feb-2009 16:51:37 -0500] start: my sql calls
|
||||
* [17-Feb-2009 16:51:37 -0500] sql: select * from example
|
||||
* [17-Feb-2009 16:51:37 -0500] sql: select * from example
|
||||
* [17-Feb-2009 16:51:37 -0500] sql: select * from example
|
||||
* [17-Feb-2009 16:51:37 -0500] end: my sql calls - 0.0018 seconds shell exec: 1, sql: 3,
|
||||
* [17-Feb-2009 16:51:37 -0500] end: my test - 0.0055 seconds shell exec: 1, sql: 3,
|
||||
* [17-Feb-2009 16:51:38 -0500] end: Task: mail. - 0.8854 seconds shell exec: 1, sql: 3,
|
||||
*
|
||||
* logs/sql (after reloading the main page):
|
||||
*
|
||||
* [17-Feb-2009 16:51:37 -0500] sql: select * from example
|
||||
* [17-Feb-2009 16:51:37 -0500] sql: select * from example
|
||||
* [17-Feb-2009 16:51:37 -0500] sql: select * from example
|
||||
*/
|
||||
class debug_logger extends rcube_plugin
|
||||
{
|
||||
function init()
|
||||
{
|
||||
require_once(dirname(__FILE__).'/runlog/runlog.php');
|
||||
$this->runlog = new runlog();
|
||||
|
||||
if(!rcmail::get_instance()->config->get('log_dir')){
|
||||
rcmail::get_instance()->config->set('log_dir',INSTALL_PATH.'logs');
|
||||
}
|
||||
|
||||
$log_config = rcmail::get_instance()->config->get('debug_logger',array());
|
||||
|
||||
foreach($log_config as $type=>$file){
|
||||
$this->runlog->set_file(rcmail::get_instance()->config->get('log_dir').'/'.$file, $type);
|
||||
}
|
||||
|
||||
$start_string = "";
|
||||
$action = rcmail::get_instance()->action;
|
||||
$task = rcmail::get_instance()->task;
|
||||
if($action){
|
||||
$start_string .= "Action: ".$action.". ";
|
||||
}
|
||||
if($task){
|
||||
$start_string .= "Task: ".$task.". ";
|
||||
}
|
||||
$this->runlog->start($start_string);
|
||||
|
||||
$this->add_hook('console', array($this, 'console'));
|
||||
$this->add_hook('authenticate', array($this, 'authenticate'));
|
||||
}
|
||||
|
||||
function authenticate($args){
|
||||
$this->runlog->note('Authenticating '.$args['user'].'@'.$args['host']);
|
||||
return $args;
|
||||
}
|
||||
|
||||
function console($args){
|
||||
$note = $args[0];
|
||||
$type = $args[1];
|
||||
|
||||
|
||||
if(!isset($args[1])){
|
||||
// This could be extended to detect types based on the
|
||||
// file which called console. For now only rcube_imap.inc is supported
|
||||
$bt = debug_backtrace();
|
||||
$file = $bt[3]['file'];
|
||||
switch(basename($file)){
|
||||
case 'rcube_imap.php':
|
||||
$type = 'imap';
|
||||
break;
|
||||
default:
|
||||
$type = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
switch($note){
|
||||
case 'end':
|
||||
$type = 'end';
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
switch($type){
|
||||
case 'start':
|
||||
$this->runlog->start($note);
|
||||
break;
|
||||
case 'end':
|
||||
$this->runlog->end();
|
||||
break;
|
||||
default:
|
||||
$this->runlog->note($note, $type);
|
||||
break;
|
||||
}
|
||||
return $args;
|
||||
}
|
||||
|
||||
function __destruct(){
|
||||
$this->runlog->end();
|
||||
}
|
||||
}
|
||||
?>
|
@ -1,227 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* runlog
|
||||
*
|
||||
* @author Ziba Scott <ziba@umich.edu>
|
||||
*/
|
||||
class runlog {
|
||||
|
||||
private $start_time = FALSE;
|
||||
|
||||
private $parent_stack = array();
|
||||
|
||||
public $print_to_console = FALSE;
|
||||
|
||||
private $file_handles = array();
|
||||
|
||||
private $indent = 0;
|
||||
|
||||
public $threshold = 0;
|
||||
|
||||
public $tag_count = array();
|
||||
|
||||
public $timestamp = "d-M-Y H:i:s O";
|
||||
|
||||
public $max_line_size = 150;
|
||||
|
||||
private $run_log = array();
|
||||
|
||||
function runlog()
|
||||
{
|
||||
$this->start_time = microtime( TRUE );
|
||||
}
|
||||
|
||||
public function start( $name, $tag = FALSE )
|
||||
{
|
||||
$this->run_log[] = array( 'type' => 'start',
|
||||
'tag' => $tag,
|
||||
'index' => count($this->run_log),
|
||||
'value' => $name,
|
||||
'time' => microtime( TRUE ),
|
||||
'parents' => $this->parent_stack,
|
||||
'ended' => false,
|
||||
);
|
||||
$this->parent_stack[] = $name;
|
||||
|
||||
$this->print_to_console("start: ".$name, $tag, 'start');
|
||||
$this->print_to_file("start: ".$name, $tag, 'start');
|
||||
$this->indent++;
|
||||
}
|
||||
|
||||
public function end()
|
||||
{
|
||||
$name = array_pop( $this->parent_stack );
|
||||
foreach ( $this->run_log as $k => $entry ) {
|
||||
if ( $entry['value'] == $name && $entry['type'] == 'start' && $entry['ended'] == false) {
|
||||
$lastk = $k;
|
||||
}
|
||||
}
|
||||
$start = $this->run_log[$lastk]['time'];
|
||||
$this->run_log[$lastk]['duration'] = microtime( TRUE ) - $start;
|
||||
$this->run_log[$lastk]['ended'] = true;
|
||||
|
||||
$this->run_log[] = array( 'type' => 'end',
|
||||
'tag' => $this->run_log[$lastk]['tag'],
|
||||
'index' => $lastk,
|
||||
'value' => $name,
|
||||
'time' => microtime( TRUE ),
|
||||
'duration' => microtime( TRUE ) - $start,
|
||||
'parents' => $this->parent_stack,
|
||||
);
|
||||
$this->indent--;
|
||||
if($this->run_log[$lastk]['duration'] >= $this->threshold){
|
||||
$tag_report = "";
|
||||
foreach($this->tag_count as $tag=>$count){
|
||||
$tag_report .= "$tag: $count, ";
|
||||
}
|
||||
if(!empty($tag_report)){
|
||||
// $tag_report = "\n$tag_report\n";
|
||||
}
|
||||
$end_txt = sprintf("end: $name - %0.4f seconds $tag_report", $this->run_log[$lastk]['duration'] );
|
||||
$this->print_to_console($end_txt, $this->run_log[$lastk]['tag'] , 'end');
|
||||
$this->print_to_file($end_txt, $this->run_log[$lastk]['tag'], 'end');
|
||||
}
|
||||
}
|
||||
|
||||
public function increase_tag_count($tag){
|
||||
if(!isset($this->tag_count[$tag])){
|
||||
$this->tag_count[$tag] = 0;
|
||||
}
|
||||
$this->tag_count[$tag]++;
|
||||
}
|
||||
|
||||
public function get_text(){
|
||||
$text = "";
|
||||
foreach($this->run_log as $entry){
|
||||
$text .= str_repeat(" ",count($entry['parents']));
|
||||
if($entry['tag'] != 'text'){
|
||||
$text .= $entry['tag'].': ';
|
||||
}
|
||||
$text .= $entry['value'];
|
||||
|
||||
if($entry['tag'] == 'end'){
|
||||
$text .= sprintf(" - %0.4f seconds", $entry['duration'] );
|
||||
}
|
||||
|
||||
$text .= "\n";
|
||||
}
|
||||
return $text;
|
||||
}
|
||||
|
||||
public function set_file($filename, $tag = 'master'){
|
||||
if(!isset($this->file_handle[$tag])){
|
||||
$this->file_handles[$tag] = fopen($filename, 'a');
|
||||
if(!$this->file_handles[$tag]){
|
||||
trigger_error('Could not open file for writing: '.$filename);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function note( $msg, $tag = FALSE )
|
||||
{
|
||||
if($tag){
|
||||
$this->increase_tag_count($tag);
|
||||
}
|
||||
if ( is_array( $msg )) {
|
||||
$msg = '<pre>' . print_r( $msg, TRUE ) . '</pre>';
|
||||
}
|
||||
$this->debug_messages[] = $msg;
|
||||
$this->run_log[] = array( 'type' => 'note',
|
||||
'tag' => $tag ? $tag:"text",
|
||||
'value' => htmlentities($msg),
|
||||
'time' => microtime( TRUE ),
|
||||
'parents' => $this->parent_stack,
|
||||
);
|
||||
|
||||
$this->print_to_file($msg, $tag);
|
||||
$this->print_to_console($msg, $tag);
|
||||
|
||||
}
|
||||
|
||||
public function print_to_file($msg, $tag = FALSE, $type = FALSE){
|
||||
if(!$tag){
|
||||
$file_handle_tag = 'master';
|
||||
}
|
||||
else{
|
||||
$file_handle_tag = $tag;
|
||||
}
|
||||
if($file_handle_tag != 'master' && isset($this->file_handles[$file_handle_tag])){
|
||||
$buffer = $this->get_indent();
|
||||
$buffer .= "$msg\n";
|
||||
if(!empty($this->timestamp)){
|
||||
$buffer = sprintf("[%s] %s",date($this->timestamp, mktime()), $buffer);
|
||||
}
|
||||
fwrite($this->file_handles[$file_handle_tag], wordwrap($buffer, $this->max_line_size, "\n "));
|
||||
}
|
||||
if(isset($this->file_handles['master']) && $this->file_handles['master']){
|
||||
$buffer = $this->get_indent();
|
||||
if($tag){
|
||||
$buffer .= "$tag: ";
|
||||
}
|
||||
$msg = str_replace("\n","",$msg);
|
||||
$buffer .= "$msg";
|
||||
if(!empty($this->timestamp)){
|
||||
$buffer = sprintf("[%s] %s",date($this->timestamp, mktime()), $buffer);
|
||||
}
|
||||
if(strlen($buffer) > $this->max_line_size){
|
||||
$buffer = substr($buffer,0,$this->max_line_size - 3)."...";
|
||||
}
|
||||
fwrite($this->file_handles['master'], $buffer."\n");
|
||||
}
|
||||
}
|
||||
|
||||
public function print_to_console($msg, $tag=FALSE){
|
||||
if($this->print_to_console){
|
||||
if(is_array($this->print_to_console)){
|
||||
if(in_array($tag, $this->print_to_console)){
|
||||
echo $this->get_indent();
|
||||
if($tag){
|
||||
echo "$tag: ";
|
||||
}
|
||||
echo "$msg\n";
|
||||
}
|
||||
}
|
||||
else{
|
||||
echo $this->get_indent();
|
||||
if($tag){
|
||||
echo "$tag: ";
|
||||
}
|
||||
echo "$msg\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function print_totals(){
|
||||
$totals = array();
|
||||
foreach ( $this->run_log as $k => $entry ) {
|
||||
if ( $entry['type'] == 'start' && $entry['ended'] == true) {
|
||||
$totals[$entry['value']]['duration'] += $entry['duration'];
|
||||
$totals[$entry['value']]['count'] += 1;
|
||||
}
|
||||
}
|
||||
if($this->file_handle){
|
||||
foreach($totals as $name=>$details){
|
||||
fwrite($this->file_handle,$name.": ".number_format($details['duration'],4)."sec, ".$details['count']." calls \n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function get_indent(){
|
||||
$buf = "";
|
||||
for($i = 0; $i < $this->indent; $i++){
|
||||
$buf .= " ";
|
||||
}
|
||||
return $buf;
|
||||
}
|
||||
|
||||
|
||||
function __destruct(){
|
||||
foreach($this->file_handles as $handle){
|
||||
fclose($handle);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -1,39 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Display Emoticons
|
||||
*
|
||||
* Sample plugin to replace emoticons in plain text message body with real icons
|
||||
*
|
||||
* @version 1.0.1
|
||||
* @author Thomas Bruederli
|
||||
* @website http://roundcube.net
|
||||
*/
|
||||
class emoticons extends rcube_plugin
|
||||
{
|
||||
public $task = 'mail';
|
||||
private $map;
|
||||
|
||||
function init()
|
||||
{
|
||||
$this->task = 'mail';
|
||||
$this->add_hook('message_part_after', array($this, 'replace'));
|
||||
|
||||
$this->map = array(
|
||||
':)' => html::img(array('src' => './program/js/tiny_mce/plugins/emotions/img/smiley-smile.gif', 'alt' => ':)')),
|
||||
':-)' => html::img(array('src' => './program/js/tiny_mce/plugins/emotions/img/smiley-smile.gif', 'alt' => ':-)')),
|
||||
':(' => html::img(array('src' => './program/js/tiny_mce/plugins/emotions/img/smiley-cry.gif', 'alt' => ':(')),
|
||||
':-(' => html::img(array('src' => './program/js/tiny_mce/plugins/emotions/img/smiley-cry.gif', 'alt' => ':-(')),
|
||||
);
|
||||
}
|
||||
|
||||
function replace($args)
|
||||
{
|
||||
if ($args['type'] == 'plain')
|
||||
return array('body' => strtr($args['body'], $this->map));
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,42 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Sample plugin to add a new address book
|
||||
* with just a static list of contacts
|
||||
*/
|
||||
class example_addressbook extends rcube_plugin
|
||||
{
|
||||
private $abook_id = 'static';
|
||||
|
||||
public function init()
|
||||
{
|
||||
$this->add_hook('address_sources', array($this, 'address_sources'));
|
||||
$this->add_hook('get_address_book', array($this, 'get_address_book'));
|
||||
|
||||
// use this address book for autocompletion queries
|
||||
// (maybe this should be configurable by the user?)
|
||||
$config = rcmail::get_instance()->config;
|
||||
$sources = $config->get('autocomplete_addressbooks', array('sql'));
|
||||
if (!in_array($this->abook_id, $sources)) {
|
||||
$sources[] = $this->abook_id;
|
||||
$config->set('autocomplete_addressbooks', $sources);
|
||||
}
|
||||
}
|
||||
|
||||
public function address_sources($p)
|
||||
{
|
||||
$p['sources'][$this->abook_id] = array('id' => $this->abook_id, 'name' => 'Static List', 'readonly' => true);
|
||||
return $p;
|
||||
}
|
||||
|
||||
public function get_address_book($p)
|
||||
{
|
||||
if ($p['id'] == $this->abook_id) {
|
||||
require_once(dirname(__FILE__) . '/example_addressbook_backend.php');
|
||||
$p['instance'] = new example_addressbook_backend;
|
||||
}
|
||||
|
||||
return $p;
|
||||
}
|
||||
|
||||
}
|
@ -1,72 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Example backend class for a custom address book
|
||||
*
|
||||
* This one just holds a static list of address records
|
||||
*
|
||||
* @author Thomas Bruederli
|
||||
*/
|
||||
class example_addressbook_backend extends rcube_addressbook
|
||||
{
|
||||
public $primary_key = 'ID';
|
||||
public $readonly = true;
|
||||
|
||||
private $filter;
|
||||
private $result;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->ready = true;
|
||||
}
|
||||
|
||||
public function set_search_set($filter)
|
||||
{
|
||||
$this->filter = $filter;
|
||||
}
|
||||
|
||||
public function get_search_set()
|
||||
{
|
||||
return $this->filter;
|
||||
}
|
||||
|
||||
public function reset()
|
||||
{
|
||||
$this->result = null;
|
||||
$this->filter = null;
|
||||
}
|
||||
|
||||
public function list_records($cols=null, $subset=0)
|
||||
{
|
||||
$this->result = $this->count();
|
||||
$this->result->add(array('ID' => '111', 'name' => "Example Contact", 'firstname' => "Example", 'surname' => "Contact", 'email' => "example@roundcube.net"));
|
||||
|
||||
return $this->result;
|
||||
}
|
||||
|
||||
public function search($fields, $value, $strict=false, $select=true)
|
||||
{
|
||||
// no search implemented, just list all records
|
||||
return $this->list_records();
|
||||
}
|
||||
|
||||
public function count()
|
||||
{
|
||||
return new rcube_result_set(1, ($this->list_page-1) * $this->page_size);
|
||||
}
|
||||
|
||||
public function get_result()
|
||||
{
|
||||
return $this->result;
|
||||
}
|
||||
|
||||
public function get_record($id, $assoc=false)
|
||||
{
|
||||
$this->list_records();
|
||||
$first = $this->result->first();
|
||||
$sql_arr = $first['ID'] == $id ? $first : null;
|
||||
|
||||
return $assoc && $sql_arr ? $sql_arr : $this->result;
|
||||
}
|
||||
|
||||
}
|
@ -1,155 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Filesystem Attachments
|
||||
*
|
||||
* This is a core plugin which provides basic, filesystem based
|
||||
* attachment temporary file handling. This includes storing
|
||||
* attachments of messages currently being composed, writing attachments
|
||||
* to disk when drafts with attachments are re-opened and writing
|
||||
* attachments to disk for inline display in current html compositions.
|
||||
*
|
||||
* Developers may wish to extend this class when creating attachment
|
||||
* handler plugins:
|
||||
* require_once('plugins/filesystem_attachments/filesystem_attachments.php');
|
||||
* class myCustom_attachments extends filesystem_attachments
|
||||
*
|
||||
* @author Ziba Scott <ziba@umich.edu>
|
||||
* @author Thomas Bruederli <roundcube@gmail.com>
|
||||
*
|
||||
*/
|
||||
class filesystem_attachments extends rcube_plugin
|
||||
{
|
||||
public $task = 'mail';
|
||||
|
||||
function init()
|
||||
{
|
||||
// Save a newly uploaded attachment
|
||||
$this->add_hook('upload_attachment', array($this, 'upload'));
|
||||
|
||||
// Save an attachment from a non-upload source (draft or forward)
|
||||
$this->add_hook('save_attachment', array($this, 'save'));
|
||||
|
||||
// Remove an attachment from storage
|
||||
$this->add_hook('remove_attachment', array($this, 'remove'));
|
||||
|
||||
// When composing an html message, image attachments may be shown
|
||||
$this->add_hook('display_attachment', array($this, 'display'));
|
||||
|
||||
// Get the attachment from storage and place it on disk to be sent
|
||||
$this->add_hook('get_attachment', array($this, 'get_attachment'));
|
||||
|
||||
// Delete all temp files associated with this user
|
||||
$this->add_hook('cleanup_attachments', array($this, 'cleanup'));
|
||||
$this->add_hook('kill_session', array($this, 'cleanup'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Save a newly uploaded attachment
|
||||
*/
|
||||
function upload($args)
|
||||
{
|
||||
$args['status'] = false;
|
||||
$rcmail = rcmail::get_instance();
|
||||
|
||||
// use common temp dir for file uploads
|
||||
$temp_dir = $rcmail->config->get('temp_dir');
|
||||
$tmpfname = tempnam($temp_dir, 'rcmAttmnt');
|
||||
|
||||
if (move_uploaded_file($args['path'], $tmpfname) && file_exists($tmpfname)) {
|
||||
$args['id'] = $this->file_id();
|
||||
$args['path'] = $tmpfname;
|
||||
$args['status'] = true;
|
||||
|
||||
// Note the file for later cleanup
|
||||
$_SESSION['plugins']['filesystem_attachments']['tmp_files'][] = $tmpfname;
|
||||
}
|
||||
|
||||
return $args;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save an attachment from a non-upload source (draft or forward)
|
||||
*/
|
||||
function save($args)
|
||||
{
|
||||
$args['status'] = false;
|
||||
|
||||
if (!$args['path']) {
|
||||
$rcmail = rcmail::get_instance();
|
||||
$temp_dir = $rcmail->config->get('temp_dir');
|
||||
$tmp_path = tempnam($temp_dir, 'rcmAttmnt');
|
||||
|
||||
if ($fp = fopen($tmp_path, 'w')) {
|
||||
fwrite($fp, $args['data']);
|
||||
fclose($fp);
|
||||
$args['path'] = $tmp_path;
|
||||
} else
|
||||
return $args;
|
||||
}
|
||||
|
||||
$args['id'] = $this->file_id();
|
||||
$args['status'] = true;
|
||||
|
||||
// Note the file for later cleanup
|
||||
$_SESSION['plugins']['filesystem_attachments']['tmp_files'][] = $args['path'];
|
||||
|
||||
return $args;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove an attachment from storage
|
||||
* This is triggered by the remove attachment button on the compose screen
|
||||
*/
|
||||
function remove($args)
|
||||
{
|
||||
$args['status'] = @unlink($args['path']);
|
||||
return $args;
|
||||
}
|
||||
|
||||
/**
|
||||
* When composing an html message, image attachments may be shown
|
||||
* For this plugin, the file is already in place, just check for
|
||||
* the existance of the proper metadata
|
||||
*/
|
||||
function display($args)
|
||||
{
|
||||
$args['status'] = file_exists($args['path']);
|
||||
return $args;
|
||||
}
|
||||
|
||||
/**
|
||||
* This attachment plugin doesn't require any steps to put the file
|
||||
* on disk for use. This stub function is kept here to make this
|
||||
* class handy as a parent class for other plugins which may need it.
|
||||
*/
|
||||
function get_attachment($args)
|
||||
{
|
||||
return $args;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete all temp files associated with this user
|
||||
*/
|
||||
function cleanup($args)
|
||||
{
|
||||
// $_SESSION['compose']['attachments'] is not a complete record of
|
||||
// temporary files because loading a draft or starting a forward copies
|
||||
// the file to disk, but does not make an entry in that array
|
||||
if (is_array($_SESSION['plugins']['filesystem_attachments']['tmp_files'])){
|
||||
foreach ($_SESSION['plugins']['filesystem_attachments']['tmp_files'] as $filename){
|
||||
if(file_exists($filename)){
|
||||
unlink($filename);
|
||||
}
|
||||
}
|
||||
unset($_SESSION['plugins']['filesystem_attachments']['tmp_files']);
|
||||
}
|
||||
return $args;
|
||||
}
|
||||
|
||||
function file_id()
|
||||
{
|
||||
$userid = rcmail::get_instance()->user->ID;
|
||||
list($usec, $sec) = explode(' ', microtime());
|
||||
return preg_replace('/[^0-9]/', '', $userid . $sec . $usec);
|
||||
}
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
// Help content iframe source
|
||||
// $rcmail_config['help_source'] = 'http://trac.roundcube.net/wiki';
|
||||
$rcmail_config['help_source'] = '';
|
||||
|
||||
?>
|
||||
|
@ -1,39 +0,0 @@
|
||||
<div id="helpabout">
|
||||
<h3 align="center">Copyright © 2005-2009, The Roundcube Dev Team</h3>
|
||||
|
||||
<p>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.
|
||||
</p>
|
||||
<p>
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
</p>
|
||||
<p>
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
</p>
|
||||
|
||||
<div align="center">
|
||||
<h3>Project management and administration</h3>
|
||||
<b>Thomas Bruederli (thomasb)</b> - Project leader and head developer<br />
|
||||
<b>Till Klampäckel (till)</b> - Co-leader<br />
|
||||
<b>Brett Patterson</b> - Forum administrator<br />
|
||||
<b>Adam Grelck</b> - Trac administrator<br />
|
||||
<b>Jason Fesler</b> - Mailing list administrator<br />
|
||||
<b>Brennan Stehling</b> - Mentor, Coordinator
|
||||
|
||||
<h3>Developers</h3>
|
||||
<b>Eric Stadtherr (estadtherr)</b><br />
|
||||
<b>Robin Elfrink (robin, wobin)</b><br />
|
||||
<b>Rich Sandberg (richs)</b><br />
|
||||
<b>Tomasz Pajor (tomekp)</b><br />
|
||||
<b>Fourat Zouari (fourat.zouari)</b><br />
|
||||
<b>Aleksander Machniak (alec)</b>
|
||||
|
||||
<p><br/>Website: <a href="http://roundcube.net">roundcube.net</a></p>
|
||||
</div>
|
||||
</div>
|
@ -1,387 +0,0 @@
|
||||
<div id="helplicense">
|
||||
<h3>GNU GENERAL PUBLIC LICENSE</h3>
|
||||
<p>
|
||||
Version 2, June 1991
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
</pre>
|
||||
|
||||
<h3>Preamble</h3>
|
||||
|
||||
<p>
|
||||
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 Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
</p>
|
||||
|
||||
|
||||
<h3>TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</h3>
|
||||
|
||||
|
||||
<p>
|
||||
<strong>0.</strong>
|
||||
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".
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>1.</strong>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>2.</strong>
|
||||
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:
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt></dt>
|
||||
<dd>
|
||||
<strong>a)</strong>
|
||||
You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
</dd>
|
||||
<dt></dt>
|
||||
<dd>
|
||||
<strong>b)</strong>
|
||||
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.
|
||||
</dd>
|
||||
<dt></dt>
|
||||
<dd>
|
||||
<strong>c)</strong>
|
||||
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.)
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>3.</strong>
|
||||
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:
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt></dt>
|
||||
<dd>
|
||||
<strong>a)</strong>
|
||||
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,
|
||||
</dd>
|
||||
<dt></dt>
|
||||
<dd>
|
||||
<strong>b)</strong>
|
||||
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,
|
||||
</dd>
|
||||
<dt></dt>
|
||||
<dd>
|
||||
<strong>c)</strong>
|
||||
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.)
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>4.</strong>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>5.</strong>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>6.</strong>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>7.</strong>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>8.</strong>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>9.</strong>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>10.</strong>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p><strong>NO WARRANTY</strong></p>
|
||||
|
||||
<p>
|
||||
<strong>11.</strong>
|
||||
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.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>12.</strong>
|
||||
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.
|
||||
</p>
|
||||
</div>
|
@ -1,96 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Help Plugin
|
||||
*
|
||||
* @author Aleksander 'A.L.E.C' Machniak
|
||||
* @licence GNU GPL
|
||||
*
|
||||
* Configuration (see config.inc.php.dist)
|
||||
*
|
||||
**/
|
||||
|
||||
class help extends rcube_plugin
|
||||
{
|
||||
// all task excluding 'login' and 'logout'
|
||||
public $task = '?(?!login|logout).*';
|
||||
|
||||
function init()
|
||||
{
|
||||
$rcmail = rcmail::get_instance();
|
||||
|
||||
$this->add_texts('localization/', false);
|
||||
|
||||
// register actions
|
||||
$this->register_action('plugin.help', array($this, 'action'));
|
||||
$this->register_action('plugin.helpabout', array($this, 'action'));
|
||||
$this->register_action('plugin.helplicense', array($this, 'action'));
|
||||
|
||||
// add taskbar button
|
||||
$this->add_button(array(
|
||||
'name' => 'helptask',
|
||||
'class' => 'button-help',
|
||||
'label' => 'help.help',
|
||||
'href' => './?_task=dummy&_action=plugin.help',
|
||||
), 'taskbar');
|
||||
|
||||
$skin = $rcmail->config->get('skin');
|
||||
if (!file_exists($this->home."/skins/$skin/help.css"))
|
||||
$skin = 'default';
|
||||
|
||||
// add style for taskbar button (must be here) and Help UI
|
||||
$this->include_stylesheet("skins/$skin/help.css");
|
||||
}
|
||||
|
||||
function action()
|
||||
{
|
||||
$rcmail = rcmail::get_instance();
|
||||
|
||||
$this->load_config();
|
||||
|
||||
// register UI objects
|
||||
$rcmail->output->add_handlers(array(
|
||||
'helpcontent' => array($this, 'content'),
|
||||
));
|
||||
|
||||
if ($rcmail->action == 'plugin.helpabout')
|
||||
$rcmail->output->set_pagetitle($this->gettext('about'));
|
||||
else if ($rcmail->action == 'plugin.helplicense')
|
||||
$rcmail->output->set_pagetitle($this->gettext('license'));
|
||||
else
|
||||
$rcmail->output->set_pagetitle($this->gettext('help'));
|
||||
|
||||
$rcmail->output->send('help.help');
|
||||
}
|
||||
|
||||
function content($attrib)
|
||||
{
|
||||
$rcmail = rcmail::get_instance();
|
||||
|
||||
if ($rcmail->action == 'plugin.helpabout') {
|
||||
return @file_get_contents($this->home.'/content/about.html');
|
||||
}
|
||||
else if ($rcmail->action == 'plugin.helplicense') {
|
||||
return @file_get_contents($this->home.'/content/license.html');
|
||||
}
|
||||
|
||||
// default content: iframe
|
||||
|
||||
if ($src = $rcmail->config->get('help_source'))
|
||||
$attrib['src'] = $src;
|
||||
|
||||
if (empty($attrib['id']))
|
||||
$attrib['id'] = 'rcmailhelpcontent';
|
||||
|
||||
// allow the following attributes to be added to the <iframe> tag
|
||||
$attrib_str = create_attrib_string($attrib, array('id', 'class', 'style', 'src', 'width', 'height', 'frameborder'));
|
||||
$framename = $attrib['id'];
|
||||
|
||||
$out = sprintf('<iframe name="%s"%s></iframe>'."\n", $framename, $attrib_str);
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -1,25 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
|
||||
+-----------------------------------------------------------------------+
|
||||
| language/cs_CZ/labels.inc |
|
||||
| |
|
||||
| Language file of the RoundCube help plugin |
|
||||
| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
|
||||
| Licensed under the GNU GPL |
|
||||
| |
|
||||
+-----------------------------------------------------------------------+
|
||||
| Author: Milan Kozak <hodza@hodza.net> |
|
||||
+-----------------------------------------------------------------------+
|
||||
|
||||
@version $Id: labels.inc 2993 2009-09-26 18:32:07Z alec $
|
||||
|
||||
*/
|
||||
|
||||
$labels = array();
|
||||
$labels['help'] = 'Nápověda';
|
||||
$labels['about'] = 'O aplikaci';
|
||||
$labels['license'] = 'Licence';
|
||||
|
||||
?>
|
@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['help'] = 'Help';
|
||||
$labels['about'] = 'About';
|
||||
$labels['license'] = 'License';
|
||||
|
||||
?>
|
@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['help'] = 'Help';
|
||||
$labels['about'] = 'About';
|
||||
$labels['license'] = 'License';
|
||||
|
||||
?>
|
@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['help'] = 'Abi';
|
||||
$labels['about'] = 'Roundcube info';
|
||||
$labels['license'] = 'Litsents';
|
||||
|
||||
?>
|
@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['help'] = 'Segítség';
|
||||
$labels['about'] = 'Névjegy';
|
||||
$labels['license'] = 'Licenc';
|
||||
|
||||
?>
|
@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['help'] = 'Pomoc';
|
||||
$labels['about'] = 'O programie';
|
||||
$labels['license'] = 'Licencja';
|
||||
|
||||
?>
|
@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['help'] = 'Hjälp';
|
||||
$labels['about'] = 'Om';
|
||||
$labels['license'] = 'Licens';
|
||||
|
||||
?>
|
@ -1,38 +0,0 @@
|
||||
/***** RoundCube|Mail Help task styles *****/
|
||||
|
||||
#taskbar a.button-help
|
||||
{
|
||||
background-image: url('help.gif');
|
||||
}
|
||||
|
||||
#help-box
|
||||
{
|
||||
position: absolute;
|
||||
bottom: 30px;
|
||||
top: 95px;
|
||||
left: 20px;
|
||||
right: 20px;
|
||||
border: 1px solid #999999;
|
||||
overflow: auto;
|
||||
background-color: #F2F2F2;
|
||||
/* IE hack */
|
||||
height: expression((parseInt(document.documentElement.clientHeight)-125)+'px');
|
||||
width: expression((parseInt(document.documentElement.clientWight)-40)+'px');
|
||||
}
|
||||
|
||||
#helplicense, #helpabout
|
||||
{
|
||||
width: 46em;
|
||||
padding: 1em 2em;
|
||||
}
|
||||
|
||||
#helplicense a, #helpabout a
|
||||
{
|
||||
color: #900;
|
||||
}
|
||||
|
||||
#helpabout
|
||||
{
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 898 B |
@ -1,38 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title><roundcube:object name="pagetitle" /></title>
|
||||
<roundcube:include file="/includes/links.html" />
|
||||
<link rel="stylesheet" type="text/css" href="/this/help.css" />
|
||||
<link rel="stylesheet" type="text/css" href="/settings.css" />
|
||||
<script type="text/javascript">
|
||||
function help_init_settings_tabs()
|
||||
{
|
||||
var tab = '#helptabdefault';
|
||||
if (window.rcmail && rcmail.env.action) {
|
||||
var action = rcmail.env.action.replace(/^plugin\.help/, '');
|
||||
tab = '#helptab' + (action ? action : 'default');
|
||||
}
|
||||
$(tab).addClass('tablink-selected');
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<roundcube:include file="/includes/taskbar.html" />
|
||||
<roundcube:include file="/includes/header.html" />
|
||||
|
||||
<div id="tabsbar">
|
||||
<span id="helptabdefault" class="tablink"><roundcube:button name="helpdefault" href="?_task=dummy&_action=plugin.help" type="link" label="help.help" title="help.help" /></span>
|
||||
<span id="helptababout" class="tablink"><roundcube:button name="helpabout" href="?_task=dummy&_action=plugin.helpabout" type="link" label="help.about" title="help.about" class="tablink" /></span>
|
||||
<span id="helptablicense" class="tablink"><roundcube:button name="helplicense" href="?_task=dummy&_action=plugin.helplicense" type="link" label="help.license" title="help.license" class="tablink" /></span>
|
||||
<roundcube:container name="helptabs" id="helptabsbar" />
|
||||
<script type="text/javascript"> if (window.rcmail) rcmail.add_onload(help_init_settings_tabs);</script>
|
||||
</div>
|
||||
|
||||
<div id="help-box">
|
||||
<roundcube:object name="helpcontent" id="helpcontentframe" width="100%" height="100%" frameborder="0" src="/watermark.html" />
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -1,44 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* HTTP Basic Authentication
|
||||
*
|
||||
* Make use of an existing HTTP authentication and perform login with the existing user credentials
|
||||
*
|
||||
* @version 1.1
|
||||
* @author Thomas Bruederli
|
||||
*/
|
||||
class http_authentication extends rcube_plugin
|
||||
{
|
||||
public $task = 'login';
|
||||
|
||||
function init()
|
||||
{
|
||||
$this->add_hook('startup', array($this, 'startup'));
|
||||
$this->add_hook('authenticate', array($this, 'authenticate'));
|
||||
}
|
||||
|
||||
function startup($args)
|
||||
{
|
||||
// change action to login
|
||||
if (empty($args['action']) && empty($_SESSION['user_id'])
|
||||
&& !empty($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_PW']))
|
||||
$args['action'] = 'login';
|
||||
|
||||
return $args;
|
||||
}
|
||||
|
||||
function authenticate($args)
|
||||
{
|
||||
if (!empty($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_PW'])) {
|
||||
$args['user'] = $_SERVER['PHP_AUTH_USER'];
|
||||
$args['pass'] = $_SERVER['PHP_AUTH_PW'];
|
||||
}
|
||||
|
||||
$args['cookiecheck'] = false;
|
||||
|
||||
return $args;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,118 +0,0 @@
|
||||
* version 2.3 [2010-03-18]
|
||||
-----------------------------------------------------------
|
||||
- Added import from Horde-INGO
|
||||
- Support for more than one match using if+stop instead of if+elsif structures (#1486078)
|
||||
- Support for selectively disabling rules within a single sieve script (#1485882)
|
||||
- Added vertical splitter
|
||||
|
||||
* version 2.2 [2010-02-06]
|
||||
-----------------------------------------------------------
|
||||
- Fix handling of "<>" characters in filter names (#1486477)
|
||||
|
||||
* version 2.1 [2010-01-12]
|
||||
-----------------------------------------------------------
|
||||
- Fix "require" structure generation when many modules are used
|
||||
- Fix problem with '<' and '>' characters in header tests
|
||||
|
||||
* version 2.0 [2009-11-02]
|
||||
-----------------------------------------------------------
|
||||
- Added 'managesieve_debug' option
|
||||
- Added multi-script support
|
||||
- Small css improvements + sprite image buttons
|
||||
- PEAR::NetSieve 1.2.0b1
|
||||
|
||||
* version 1.7 [2009-09-20]
|
||||
-----------------------------------------------------------
|
||||
- Support multiple managesieve hosts using %h variable
|
||||
in managesieve_host option
|
||||
- Fix first rule deleting (#1486140)
|
||||
|
||||
* version 1.6 [2009-09-08]
|
||||
-----------------------------------------------------------
|
||||
- Fix warning when importing squirrelmail rules
|
||||
- Fix handling of "true" as "anyof (true)" test
|
||||
|
||||
* version 1.5 [2009-09-04]
|
||||
-----------------------------------------------------------
|
||||
- Added es_ES, ua_UA localizations
|
||||
- Added 'managesieve_mbox_encoding' option
|
||||
|
||||
* version 1.4 [2009-07-29]
|
||||
-----------------------------------------------------------
|
||||
- Updated PEAR::Net_Sieve to 1.1.7
|
||||
|
||||
* version 1.3 [2009-07-24]
|
||||
-----------------------------------------------------------
|
||||
- support more languages
|
||||
- support config.inc.php file
|
||||
|
||||
* version 1.2 [2009-06-28]
|
||||
-----------------------------------------------------------
|
||||
- Support IMAP namespaces in fileinto (#1485943)
|
||||
- Added it_IT localization
|
||||
|
||||
* version 1.1 [2009-05-27]
|
||||
-----------------------------------------------------------
|
||||
- Added new icons
|
||||
- Added support for headers lists (coma-separated) in rules
|
||||
- Added de_CH localization
|
||||
|
||||
* version 1.0 [2009-05-21]
|
||||
-----------------------------------------------------------
|
||||
- Rewritten using plugin API
|
||||
- Added hu_HU localization (Tamas Tevesz)
|
||||
|
||||
* version beta7 (svn-r2300) [2009-03-01]
|
||||
-----------------------------------------------------------
|
||||
- Added SquirrelMail script auto-import (Jonathan Ernst)
|
||||
- Added 'vacation' support (Jonathan Ernst & alec)
|
||||
- Added 'stop' support (Jonathan Ernst)
|
||||
- Added option for extensions disabling (Jonathan Ernst & alec)
|
||||
- Added fi_FI, nl_NL, bg_BG localization
|
||||
- Small style fixes
|
||||
|
||||
* version 0.2-stable1 (svn-r2205) [2009-01-03]
|
||||
-----------------------------------------------------------
|
||||
- Fix moving down filter row
|
||||
- Fixes for compressed js files in stable release package
|
||||
- Created patch for svn version r2205
|
||||
|
||||
* version 0.2-stable [2008-12-31]
|
||||
-----------------------------------------------------------
|
||||
- Added ru_RU, fr_FR, zh_CN translation
|
||||
- Fixes for Roundcube 0.2-stable
|
||||
|
||||
* version rc0.2beta [2008-09-21]
|
||||
-----------------------------------------------------------
|
||||
- Small css fixes for IE
|
||||
- Fixes for Roundcube 0.2-beta
|
||||
|
||||
* version beta6 [2008-08-08]
|
||||
-----------------------------------------------------------
|
||||
- Added de_DE translation
|
||||
- Fix for Roundcube r1634
|
||||
|
||||
* version beta5 [2008-06-10]
|
||||
-----------------------------------------------------------
|
||||
- Fixed 'exists' operators
|
||||
- Fixed 'not*' operators for custom headers
|
||||
- Fixed filters deleting
|
||||
|
||||
* version beta4 [2008-06-09]
|
||||
-----------------------------------------------------------
|
||||
- Fix for Roundcube r1490
|
||||
|
||||
* version beta3 [2008-05-22]
|
||||
-----------------------------------------------------------
|
||||
- Fixed textarea error class setting
|
||||
- Added pagetitle setting
|
||||
- Added option 'managesieve_replace_delimiter'
|
||||
- Fixed errors on IE (still need some css fixes)
|
||||
|
||||
* version beta2 [2008-05-20]
|
||||
-----------------------------------------------------------
|
||||
- Use 'if' only for first filter and 'elsif' for the rest
|
||||
|
||||
* version beta1 [2008-05-15]
|
||||
-----------------------------------------------------------
|
||||
- Initial version for Roundcube r1388.
|
@ -1,37 +0,0 @@
|
||||
<?php
|
||||
|
||||
// managesieve server port
|
||||
$rcmail_config['managesieve_port'] = 2000;
|
||||
|
||||
// managesieve server address, default is localhost.
|
||||
// Use %h variable as replacement for user's IMAP hostname
|
||||
$rcmail_config['managesieve_host'] = 'localhost';
|
||||
|
||||
// use or not TLS for managesieve server connection
|
||||
// it's because I've problems with TLS and dovecot's managesieve plugin
|
||||
// and it's not needed on localhost
|
||||
$rcmail_config['managesieve_usetls'] = false;
|
||||
|
||||
// default contents of filters script (eg. default spam filter)
|
||||
$rcmail_config['managesieve_default'] = '/etc/dovecot/sieve/global';
|
||||
|
||||
// Sieve RFC says that we should use UTF-8 endcoding for mailbox names,
|
||||
// but some implementations does not covert UTF-8 to modified UTF-7.
|
||||
// Defaults to UTF7-IMAP
|
||||
$rcmail_config['managesieve_mbox_encoding'] = 'UTF-8';
|
||||
|
||||
// I need this because my dovecot (with listescape plugin) uses
|
||||
// ':' delimiter, but creates folders with dot delimiter
|
||||
$rcmail_config['managesieve_replace_delimiter'] = '';
|
||||
|
||||
// disabled sieve extensions (body, copy, date, editheader, encoded-character,
|
||||
// envelope, environment, ereject, fileinto, ihave, imap4flags, index,
|
||||
// mailbox, mboxmetadata, regex, reject, relational, servermetadata,
|
||||
// spamtest, spamtestplus, subaddress, vacation, variables, virustest, etc.
|
||||
// Note: not all extensions are implemented
|
||||
$rcmail_config['managesieve_disabled_extensions'] = array();
|
||||
|
||||
// Enables debugging of conversation with sieve server. Logs it into <log_dir>/sieve
|
||||
$rcmail_config['managesieve_debug'] = false;
|
||||
|
||||
?>
|
@ -1,875 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Classes for managesieve operations (using PEAR::Net_Sieve)
|
||||
|
||||
Author: Aleksander Machniak <alec@alec.pl>
|
||||
|
||||
$Id$
|
||||
|
||||
*/
|
||||
|
||||
// Sieve Language Basics: http://www.ietf.org/rfc/rfc5228.txt
|
||||
|
||||
define('SIEVE_ERROR_CONNECTION', 1);
|
||||
define('SIEVE_ERROR_LOGIN', 2);
|
||||
define('SIEVE_ERROR_NOT_EXISTS', 3); // script not exists
|
||||
define('SIEVE_ERROR_INSTALL', 4); // script installation
|
||||
define('SIEVE_ERROR_ACTIVATE', 5); // script activation
|
||||
define('SIEVE_ERROR_DELETE', 6); // script deletion
|
||||
define('SIEVE_ERROR_INTERNAL', 7); // internal error
|
||||
define('SIEVE_ERROR_OTHER', 255); // other/unknown error
|
||||
|
||||
|
||||
class rcube_sieve
|
||||
{
|
||||
private $sieve; // Net_Sieve object
|
||||
private $error = false; // error flag
|
||||
private $list = array(); // scripts list
|
||||
|
||||
public $script; // rcube_sieve_script object
|
||||
public $current; // name of currently loaded script
|
||||
private $disabled; // array of disabled extensions
|
||||
|
||||
/**
|
||||
* Object constructor
|
||||
*
|
||||
* @param string Username (to managesieve login)
|
||||
* @param string Password (to managesieve login)
|
||||
* @param string Managesieve server hostname/address
|
||||
* @param string Managesieve server port number
|
||||
* @param string Enable/disable TLS use
|
||||
* @param array Disabled extensions
|
||||
*/
|
||||
public function __construct($username, $password='', $host='localhost', $port=2000,
|
||||
$usetls=true, $disabled=array(), $debug=false)
|
||||
{
|
||||
$this->sieve = new Net_Sieve();
|
||||
|
||||
if ($debug)
|
||||
$this->sieve->setDebug(true, array($this, 'debug_handler'));
|
||||
|
||||
if (PEAR::isError($this->sieve->connect($host, $port, NULL, $usetls)))
|
||||
return $this->_set_error(SIEVE_ERROR_CONNECTION);
|
||||
|
||||
if (PEAR::isError($this->sieve->login($username, $password)))
|
||||
return $this->_set_error(SIEVE_ERROR_LOGIN);
|
||||
|
||||
$this->disabled = $disabled;
|
||||
}
|
||||
|
||||
public function __destruct() {
|
||||
$this->sieve->disconnect();
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter for error code
|
||||
*/
|
||||
public function error()
|
||||
{
|
||||
return $this->error ? $this->error : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves current script into server
|
||||
*/
|
||||
public function save($name = null)
|
||||
{
|
||||
if (!$this->sieve)
|
||||
return $this->_set_error(SIEVE_ERROR_INTERNAL);
|
||||
|
||||
if (!$this->script)
|
||||
return $this->_set_error(SIEVE_ERROR_INTERNAL);
|
||||
|
||||
if (!$name)
|
||||
$name = $this->current;
|
||||
|
||||
$script = $this->script->as_text();
|
||||
|
||||
if (!$script)
|
||||
$script = '/* empty script */';
|
||||
|
||||
if (PEAR::isError($this->sieve->installScript($name, $script)))
|
||||
return $this->_set_error(SIEVE_ERROR_INSTALL);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves text script into server
|
||||
*/
|
||||
public function save_script($name, $content = null)
|
||||
{
|
||||
if (!$this->sieve)
|
||||
return $this->_set_error(SIEVE_ERROR_INTERNAL);
|
||||
|
||||
if (!$content)
|
||||
$content = '/* empty script */';
|
||||
|
||||
if (PEAR::isError($this->sieve->installScript($name, $content)))
|
||||
return $this->_set_error(SIEVE_ERROR_INSTALL);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Activates specified script
|
||||
*/
|
||||
public function activate($name = null)
|
||||
{
|
||||
if (!$this->sieve)
|
||||
return $this->_set_error(SIEVE_ERROR_INTERNAL);
|
||||
|
||||
if (!$name)
|
||||
$name = $this->current;
|
||||
|
||||
if (PEAR::isError($this->sieve->setActive($name)))
|
||||
return $this->_set_error(SIEVE_ERROR_ACTIVATE);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes specified script
|
||||
*/
|
||||
public function remove($name = null)
|
||||
{
|
||||
if (!$this->sieve)
|
||||
return $this->_set_error(SIEVE_ERROR_INTERNAL);
|
||||
|
||||
if (!$name)
|
||||
$name = $this->current;
|
||||
|
||||
// script must be deactivated first
|
||||
if ($name == $this->sieve->getActive())
|
||||
if (PEAR::isError($this->sieve->setActive('')))
|
||||
return $this->_set_error(SIEVE_ERROR_DELETE);
|
||||
|
||||
if (PEAR::isError($this->sieve->removeScript($name)))
|
||||
return $this->_set_error(SIEVE_ERROR_DELETE);
|
||||
|
||||
if ($name == $this->current)
|
||||
$this->current = null;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets list of supported by server Sieve extensions
|
||||
*/
|
||||
public function get_extensions()
|
||||
{
|
||||
if (!$this->sieve)
|
||||
return $this->_set_error(SIEVE_ERROR_INTERNAL);
|
||||
|
||||
$ext = $this->sieve->getExtensions();
|
||||
// we're working on lower-cased names
|
||||
$ext = array_map('strtolower', (array) $ext);
|
||||
|
||||
if ($this->script) {
|
||||
$supported = $this->script->get_extensions();
|
||||
foreach ($ext as $idx => $ext_name)
|
||||
if (!in_array($ext_name, $supported))
|
||||
unset($ext[$idx]);
|
||||
}
|
||||
|
||||
return array_values($ext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets list of scripts from server
|
||||
*/
|
||||
public function get_scripts()
|
||||
{
|
||||
if (!$this->list) {
|
||||
|
||||
if (!$this->sieve)
|
||||
return $this->_set_error(SIEVE_ERROR_INTERNAL);
|
||||
|
||||
$this->list = $this->sieve->listScripts();
|
||||
|
||||
if (PEAR::isError($this->list))
|
||||
return $this->_set_error(SIEVE_ERROR_OTHER);
|
||||
}
|
||||
|
||||
return $this->list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns active script name
|
||||
*/
|
||||
public function get_active()
|
||||
{
|
||||
if (!$this->sieve)
|
||||
return $this->_set_error(SIEVE_ERROR_INTERNAL);
|
||||
|
||||
return $this->sieve->getActive();
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads script by name
|
||||
*/
|
||||
public function load($name)
|
||||
{
|
||||
if (!$this->sieve)
|
||||
return $this->_set_error(SIEVE_ERROR_INTERNAL);
|
||||
|
||||
if ($this->current == $name)
|
||||
return true;
|
||||
|
||||
$script = $this->sieve->getScript($name);
|
||||
|
||||
if (PEAR::isError($script))
|
||||
return $this->_set_error(SIEVE_ERROR_OTHER);
|
||||
|
||||
// try to parse from Roundcube format
|
||||
$this->script = new rcube_sieve_script($script, $this->disabled);
|
||||
|
||||
// ... else try to import from different formats
|
||||
if (empty($this->script->content)) {
|
||||
$script = $this->_import_rules($script);
|
||||
$this->script = new rcube_sieve_script($script, $this->disabled);
|
||||
}
|
||||
|
||||
// replace all elsif with if+stop, we support only ifs
|
||||
foreach ($this->script->content as $idx => $rule) {
|
||||
if (!isset($this->script->content[$idx+1])
|
||||
|| preg_match('/^else|elsif$/', $this->script->content[$idx+1]['type'])) {
|
||||
// 'stop' not found?
|
||||
if (!preg_match('/^(stop|vacation)$/', $rule['actions'][count($rule['actions'])-1]['type'])) {
|
||||
$this->script->content[$idx]['actions'][] = array(
|
||||
'type' => 'stop'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->current = $name;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates empty script or copy of other script
|
||||
*/
|
||||
public function copy($name, $copy)
|
||||
{
|
||||
if (!$this->sieve)
|
||||
return $this->_set_error(SIEVE_ERROR_INTERNAL);
|
||||
|
||||
if ($copy) {
|
||||
$content = $this->sieve->getScript($copy);
|
||||
|
||||
if (PEAR::isError($content))
|
||||
return $this->_set_error(SIEVE_ERROR_OTHER);
|
||||
}
|
||||
|
||||
return $this->save_script($name, $content);
|
||||
}
|
||||
|
||||
|
||||
private function _import_rules($script)
|
||||
{
|
||||
$i = 0;
|
||||
$name = array();
|
||||
|
||||
// Squirrelmail (Avelsieve)
|
||||
if ($tokens = preg_split('/(#START_SIEVE_RULE.*END_SIEVE_RULE)\n/', $script, -1, PREG_SPLIT_DELIM_CAPTURE)) {
|
||||
foreach($tokens as $token) {
|
||||
if (preg_match('/^#START_SIEVE_RULE.*/', $token, $matches)) {
|
||||
$name[$i] = "unnamed rule ".($i+1);
|
||||
$content .= "# rule:[".$name[$i]."]\n";
|
||||
}
|
||||
elseif (isset($name[$i])) {
|
||||
$content .= "if $token\n";
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Horde (INGO)
|
||||
else if ($tokens = preg_split('/(# .+)\r?\n/i', $script, -1, PREG_SPLIT_DELIM_CAPTURE)) {
|
||||
foreach($tokens as $token) {
|
||||
if (preg_match('/^# (.+)/i', $token, $matches)) {
|
||||
$name[$i] = $matches[1];
|
||||
$content .= "# rule:[" . $name[$i] . "]\n";
|
||||
}
|
||||
elseif (isset($name[$i])) {
|
||||
$token = str_replace(":comparator \"i;ascii-casemap\" ", "", $token);
|
||||
$content .= $token . "\n";
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
private function _set_error($error)
|
||||
{
|
||||
$this->error = $error;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is our own debug handler for connection
|
||||
* @access public
|
||||
*/
|
||||
public function debug_handler(&$sieve, $message)
|
||||
{
|
||||
write_log('sieve', preg_replace('/\r\n$/', '', $message));
|
||||
}
|
||||
}
|
||||
|
||||
class rcube_sieve_script
|
||||
{
|
||||
public $content = array(); // script rules array
|
||||
|
||||
private $supported = array( // extensions supported by class
|
||||
'fileinto',
|
||||
'reject',
|
||||
'ereject',
|
||||
'vacation', // RFC5230
|
||||
// TODO: (most wanted first) body, imapflags, notify, regex
|
||||
);
|
||||
|
||||
/**
|
||||
* Object constructor
|
||||
*
|
||||
* @param string Script's text content
|
||||
* @param array Disabled extensions
|
||||
*/
|
||||
public function __construct($script, $disabled=NULL)
|
||||
{
|
||||
if (!empty($disabled))
|
||||
foreach ($disabled as $ext)
|
||||
if (($idx = array_search($ext, $this->supported)) !== false)
|
||||
unset($this->supported[$idx]);
|
||||
|
||||
$this->content = $this->_parse_text($script);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds script contents as text to the script array (at the end)
|
||||
*
|
||||
* @param string Text script contents
|
||||
*/
|
||||
public function add_text($script)
|
||||
{
|
||||
$content = $this->_parse_text($script);
|
||||
$result = false;
|
||||
|
||||
// check existsing script rules names
|
||||
foreach ($this->content as $idx => $elem) {
|
||||
$names[$elem['name']] = $idx;
|
||||
}
|
||||
|
||||
foreach ($content as $elem) {
|
||||
if (!isset($names[$elem['name']])) {
|
||||
array_push($this->content, $elem);
|
||||
$result = true;
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds rule to the script (at the end)
|
||||
*
|
||||
* @param string Rule name
|
||||
* @param array Rule content (as array)
|
||||
*/
|
||||
public function add_rule($content)
|
||||
{
|
||||
// TODO: check this->supported
|
||||
array_push($this->content, $content);
|
||||
return sizeof($this->content)-1;
|
||||
}
|
||||
|
||||
public function delete_rule($index)
|
||||
{
|
||||
if(isset($this->content[$index])) {
|
||||
unset($this->content[$index]);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public function size()
|
||||
{
|
||||
return sizeof($this->content);
|
||||
}
|
||||
|
||||
public function update_rule($index, $content)
|
||||
{
|
||||
// TODO: check this->supported
|
||||
if ($this->content[$index]) {
|
||||
$this->content[$index] = $content;
|
||||
return $index;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns script as text
|
||||
*/
|
||||
public function as_text()
|
||||
{
|
||||
$script = '';
|
||||
$exts = array();
|
||||
$idx = 0;
|
||||
|
||||
// rules
|
||||
foreach ($this->content as $rule) {
|
||||
$extension = '';
|
||||
$tests = array();
|
||||
$i = 0;
|
||||
|
||||
// header
|
||||
$script .= '# rule:[' . $rule['name'] . "]\n";
|
||||
|
||||
// constraints expressions
|
||||
foreach ($rule['tests'] as $test) {
|
||||
$tests[$i] = '';
|
||||
switch ($test['test']) {
|
||||
case 'size':
|
||||
$tests[$i] .= ($test['not'] ? 'not ' : '');
|
||||
$tests[$i] .= 'size :' . ($test['type']=='under' ? 'under ' : 'over ') . $test['arg'];
|
||||
break;
|
||||
case 'true':
|
||||
$tests[$i] .= ($test['not'] ? 'not true' : 'true');
|
||||
break;
|
||||
case 'exists':
|
||||
$tests[$i] .= ($test['not'] ? 'not ' : '');
|
||||
if (is_array($test['arg']))
|
||||
$tests[$i] .= 'exists ["' . implode('", "', $this->_escape_string($test['arg'])) . '"]';
|
||||
else
|
||||
$tests[$i] .= 'exists "' . $this->_escape_string($test['arg']) . '"';
|
||||
break;
|
||||
case 'header':
|
||||
$tests[$i] .= ($test['not'] ? 'not ' : '');
|
||||
$tests[$i] .= 'header :' . $test['type'];
|
||||
if (is_array($test['arg1']))
|
||||
$tests[$i] .= ' ["' . implode('", "', $this->_escape_string($test['arg1'])) . '"]';
|
||||
else
|
||||
$tests[$i] .= ' "' . $this->_escape_string($test['arg1']) . '"';
|
||||
if (is_array($test['arg2']))
|
||||
$tests[$i] .= ' ["' . implode('", "', $this->_escape_string($test['arg2'])) . '"]';
|
||||
else
|
||||
$tests[$i] .= ' "' . $this->_escape_string($test['arg2']) . '"';
|
||||
break;
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
|
||||
// $script .= ($idx>0 ? 'els' : '').($rule['join'] ? 'if allof (' : 'if anyof (');
|
||||
// disabled rule: if false #....
|
||||
$script .= 'if' . ($rule['disabled'] ? ' false #' : '');
|
||||
$script .= $rule['join'] ? ' allof (' : ' anyof (';
|
||||
if (sizeof($tests) > 1)
|
||||
$script .= implode(",\n\t", $tests);
|
||||
else if (sizeof($tests))
|
||||
$script .= $tests[0];
|
||||
else
|
||||
$script .= 'true';
|
||||
$script .= ")\n{\n";
|
||||
|
||||
// action(s)
|
||||
foreach ($rule['actions'] as $action) {
|
||||
switch ($action['type']) {
|
||||
case 'fileinto':
|
||||
$extension = 'fileinto';
|
||||
$script .= "\tfileinto \"" . $this->_escape_string($action['target']) . "\";\n";
|
||||
break;
|
||||
case 'redirect':
|
||||
$script .= "\tredirect \"" . $this->_escape_string($action['target']) . "\";\n";
|
||||
break;
|
||||
case 'reject':
|
||||
case 'ereject':
|
||||
$extension = $action['type'];
|
||||
if (strpos($action['target'], "\n")!==false)
|
||||
$script .= "\t".$action['type']." text:\n" . $action['target'] . "\n.\n;\n";
|
||||
else
|
||||
$script .= "\t".$action['type']." \"" . $this->_escape_string($action['target']) . "\";\n";
|
||||
break;
|
||||
case 'keep':
|
||||
case 'discard':
|
||||
case 'stop':
|
||||
$script .= "\t" . $action['type'] .";\n";
|
||||
break;
|
||||
case 'vacation':
|
||||
$extension = 'vacation';
|
||||
$script .= "\tvacation";
|
||||
if ($action['days'])
|
||||
$script .= " :days " . $action['days'];
|
||||
if ($action['addresses'])
|
||||
$script .= " :addresses " . $this->_print_list($action['addresses']);
|
||||
if ($action['subject'])
|
||||
$script .= " :subject \"" . $this->_escape_string($action['subject']) . "\"";
|
||||
if ($action['handle'])
|
||||
$script .= " :handle \"" . $this->_escape_string($action['handle']) . "\"";
|
||||
if ($action['from'])
|
||||
$script .= " :from \"" . $this->_escape_string($action['from']) . "\"";
|
||||
if ($action['mime'])
|
||||
$script .= " :mime";
|
||||
if (strpos($action['reason'], "\n")!==false)
|
||||
$script .= " text:\n" . $action['reason'] . "\n.\n;\n";
|
||||
else
|
||||
$script .= " \"" . $this->_escape_string($action['reason']) . "\";\n";
|
||||
break;
|
||||
}
|
||||
|
||||
if ($extension && !isset($exts[$extension]))
|
||||
$exts[$extension] = $extension;
|
||||
}
|
||||
|
||||
$script .= "}\n";
|
||||
$idx++;
|
||||
}
|
||||
|
||||
// requires
|
||||
if (sizeof($exts))
|
||||
$script = 'require ["' . implode('","', $exts) . "\"];\n" . $script;
|
||||
|
||||
return $script;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns script object
|
||||
*
|
||||
*/
|
||||
public function as_array()
|
||||
{
|
||||
return $this->content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns array of supported extensions
|
||||
*
|
||||
*/
|
||||
public function get_extensions()
|
||||
{
|
||||
return array_values($this->supported);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts text script to rules array
|
||||
*
|
||||
* @param string Text script
|
||||
*/
|
||||
private function _parse_text($script)
|
||||
{
|
||||
$i = 0;
|
||||
$content = array();
|
||||
|
||||
// remove C comments
|
||||
$script = preg_replace('|/\*.*?\*/|sm', '', $script);
|
||||
|
||||
// tokenize rules
|
||||
if ($tokens = preg_split('/(# rule:\[.*\])\r?\n/', $script, -1, PREG_SPLIT_DELIM_CAPTURE)) {
|
||||
foreach($tokens as $token) {
|
||||
if (preg_match('/^# rule:\[(.*)\]/', $token, $matches)) {
|
||||
$content[$i]['name'] = $matches[1];
|
||||
}
|
||||
elseif (isset($content[$i]['name']) && sizeof($content[$i]) == 1) {
|
||||
if ($rule = $this->_tokenize_rule($token)) {
|
||||
$content[$i] = array_merge($content[$i], $rule);
|
||||
$i++;
|
||||
}
|
||||
else // unknown rule format
|
||||
unset($content[$i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert text script fragment to rule object
|
||||
*
|
||||
* @param string Text rule
|
||||
*/
|
||||
private function _tokenize_rule($content)
|
||||
{
|
||||
$result = NULL;
|
||||
|
||||
if (preg_match('/^(if|elsif|else)\s+((true|false|not\s+true|allof|anyof|exists|header|not|size)(.*))\s+\{(.*)\}$/sm',
|
||||
trim($content), $matches)) {
|
||||
|
||||
$tests = trim($matches[2]);
|
||||
|
||||
// disabled rule (false + comment): if false #.....
|
||||
if ($matches[3] == 'false') {
|
||||
$tests = preg_replace('/^false\s+#\s+/', '', $tests);
|
||||
$disabled = true;
|
||||
}
|
||||
else
|
||||
$disabled = false;
|
||||
|
||||
list($tests, $join) = $this->_parse_tests($tests);
|
||||
$actions = $this->_parse_actions(trim($matches[5]));
|
||||
|
||||
if ($tests && $actions)
|
||||
$result = array(
|
||||
'type' => $matches[1],
|
||||
'tests' => $tests,
|
||||
'actions' => $actions,
|
||||
'join' => $join,
|
||||
'disabled' => $disabled,
|
||||
);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse body of actions section
|
||||
*
|
||||
* @param string Text body
|
||||
* @return array Array of parsed action type/target pairs
|
||||
*/
|
||||
private function _parse_actions($content)
|
||||
{
|
||||
$result = NULL;
|
||||
|
||||
// supported actions
|
||||
$patterns[] = '^\s*discard;';
|
||||
$patterns[] = '^\s*keep;';
|
||||
$patterns[] = '^\s*stop;';
|
||||
$patterns[] = '^\s*redirect\s+(.*?[^\\\]);';
|
||||
if (in_array('fileinto', $this->supported))
|
||||
$patterns[] = '^\s*fileinto\s+(.*?[^\\\]);';
|
||||
if (in_array('reject', $this->supported)) {
|
||||
$patterns[] = '^\s*reject\s+text:(.*)\n\.\n;';
|
||||
$patterns[] = '^\s*reject\s+(.*?[^\\\]);';
|
||||
$patterns[] = '^\s*ereject\s+text:(.*)\n\.\n;';
|
||||
$patterns[] = '^\s*ereject\s+(.*?[^\\\]);';
|
||||
}
|
||||
if (in_array('vacation', $this->supported))
|
||||
$patterns[] = '^\s*vacation\s+(.*?[^\\\]);';
|
||||
|
||||
$pattern = '/(' . implode('$)|(', $patterns) . '$)/ms';
|
||||
|
||||
// parse actions body
|
||||
if (preg_match_all($pattern, $content, $mm, PREG_SET_ORDER)) {
|
||||
foreach ($mm as $m) {
|
||||
$content = trim($m[0]);
|
||||
|
||||
if(preg_match('/^(discard|keep|stop)/', $content, $matches)) {
|
||||
$result[] = array('type' => $matches[1]);
|
||||
}
|
||||
elseif(preg_match('/^fileinto/', $content)) {
|
||||
$result[] = array('type' => 'fileinto', 'target' => $this->_parse_string($m[sizeof($m)-1]));
|
||||
}
|
||||
elseif(preg_match('/^redirect/', $content)) {
|
||||
$result[] = array('type' => 'redirect', 'target' => $this->_parse_string($m[sizeof($m)-1]));
|
||||
}
|
||||
elseif(preg_match('/^(reject|ereject)\s+(.*);$/sm', $content, $matches)) {
|
||||
$result[] = array('type' => $matches[1], 'target' => $this->_parse_string($matches[2]));
|
||||
}
|
||||
elseif(preg_match('/^vacation\s+(.*);$/sm', $content, $matches)) {
|
||||
$vacation = array('type' => 'vacation');
|
||||
|
||||
if (preg_match('/:(days)\s+([0-9]+)/', $content, $vm)) {
|
||||
$vacation['days'] = $vm[2];
|
||||
$content = preg_replace('/:(days)\s+([0-9]+)/', '', $content);
|
||||
}
|
||||
if (preg_match('/:(subject)\s+(".*?[^\\\]")/', $content, $vm)) {
|
||||
$vacation['subject'] = $vm[2];
|
||||
$content = preg_replace('/:(subject)\s+(".*?[^\\\]")/', '', $content);
|
||||
}
|
||||
if (preg_match('/:(addresses)\s+\[(.*?[^\\\])\]/', $content, $vm)) {
|
||||
$vacation['addresses'] = $this->_parse_list($vm[2]);
|
||||
$content = preg_replace('/:(addresses)\s+\[(.*?[^\\\])\]/', '', $content);
|
||||
}
|
||||
if (preg_match('/:(handle)\s+(".*?[^\\\]")/', $content, $vm)) {
|
||||
$vacation['handle'] = $vm[2];
|
||||
$content = preg_replace('/:(handle)\s+(".*?[^\\\]")/', '', $content);
|
||||
}
|
||||
if (preg_match('/:(from)\s+(".*?[^\\\]")/', $content, $vm)) {
|
||||
$vacation['from'] = $vm[2];
|
||||
$content = preg_replace('/:(from)\s+(".*?[^\\\]")/', '', $content);
|
||||
}
|
||||
|
||||
$content = preg_replace('/^vacation/', '', $content);
|
||||
$content = preg_replace('/;$/', '', $content);
|
||||
$content = trim($content);
|
||||
|
||||
if (preg_match('/^:(mime)/', $content, $vm)) {
|
||||
$vacation['mime'] = true;
|
||||
$content = preg_replace('/^:mime/', '', $content);
|
||||
}
|
||||
|
||||
$vacation['reason'] = $this->_parse_string($content);
|
||||
|
||||
$result[] = $vacation;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse test/conditions section
|
||||
*
|
||||
* @param string Text
|
||||
*/
|
||||
private function _parse_tests($content)
|
||||
{
|
||||
$result = NULL;
|
||||
|
||||
// lists
|
||||
if (preg_match('/^(allof|anyof)\s+\((.*)\)$/sm', $content, $matches)) {
|
||||
$content = $matches[2];
|
||||
$join = $matches[1]=='allof' ? true : false;
|
||||
}
|
||||
else
|
||||
$join = false;
|
||||
|
||||
// supported tests regular expressions
|
||||
// TODO: comparators, envelope
|
||||
$patterns[] = '(not\s+)?(exists)\s+\[(.*?[^\\\])\]';
|
||||
$patterns[] = '(not\s+)?(exists)\s+(".*?[^\\\]")';
|
||||
$patterns[] = '(not\s+)?(true)';
|
||||
$patterns[] = '(not\s+)?(size)\s+:(under|over)\s+([0-9]+[KGM]{0,1})';
|
||||
$patterns[] = '(not\s+)?(header)\s+:(contains|is|matches)\s+\[(.*?[^\\\]")\]\s+\[(.*?[^\\\]")\]';
|
||||
$patterns[] = '(not\s+)?(header)\s+:(contains|is|matches)\s+(".*?[^\\\]")\s+(".*?[^\\\]")';
|
||||
$patterns[] = '(not\s+)?(header)\s+:(contains|is|matches)\s+\[(.*?[^\\\]")\]\s+(".*?[^\\\]")';
|
||||
$patterns[] = '(not\s+)?(header)\s+:(contains|is|matches)\s+(".*?[^\\\]")\s+\[(.*?[^\\\]")\]';
|
||||
|
||||
// join patterns...
|
||||
$pattern = '/(' . implode(')|(', $patterns) . ')/';
|
||||
|
||||
// ...and parse tests list
|
||||
if (preg_match_all($pattern, $content, $matches, PREG_SET_ORDER)) {
|
||||
foreach ($matches as $match) {
|
||||
$size = sizeof($match);
|
||||
|
||||
if (preg_match('/^(not\s+)?size/', $match[0])) {
|
||||
$result[] = array(
|
||||
'test' => 'size',
|
||||
'not' => $match[$size-4] ? true : false,
|
||||
'type' => $match[$size-2], // under/over
|
||||
'arg' => $match[$size-1], // value
|
||||
);
|
||||
}
|
||||
elseif (preg_match('/^(not\s+)?header/', $match[0])) {
|
||||
$result[] = array(
|
||||
'test' => 'header',
|
||||
'not' => $match[$size-5] ? true : false,
|
||||
'type' => $match[$size-3], // is/contains/matches
|
||||
'arg1' => $this->_parse_list($match[$size-2]), // header(s)
|
||||
'arg2' => $this->_parse_list($match[$size-1]), // string(s)
|
||||
);
|
||||
}
|
||||
elseif (preg_match('/^(not\s+)?exists/', $match[0])) {
|
||||
$result[] = array(
|
||||
'test' => 'exists',
|
||||
'not' => $match[$size-3] ? true : false,
|
||||
'arg' => $this->_parse_list($match[$size-1]), // header(s)
|
||||
);
|
||||
}
|
||||
elseif (preg_match('/^(not\s+)?true/', $match[0])) {
|
||||
$result[] = array(
|
||||
'test' => 'true',
|
||||
'not' => $match[$size-2] ? true : false,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return array($result, $join);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse string value
|
||||
*
|
||||
* @param string Text
|
||||
*/
|
||||
private function _parse_string($content)
|
||||
{
|
||||
$text = '';
|
||||
$content = trim($content);
|
||||
|
||||
if (preg_match('/^text:(.*)\.$/sm', $content, $matches))
|
||||
$text = trim($matches[1]);
|
||||
elseif (preg_match('/^"(.*)"$/', $content, $matches))
|
||||
$text = str_replace('\"', '"', $matches[1]);
|
||||
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Escape special chars in string value
|
||||
*
|
||||
* @param string Text
|
||||
*/
|
||||
private function _escape_string($content)
|
||||
{
|
||||
$replace['/"/'] = '\\"';
|
||||
|
||||
if (is_array($content)) {
|
||||
for ($x=0, $y=sizeof($content); $x<$y; $x++)
|
||||
$content[$x] = preg_replace(array_keys($replace), array_values($replace), $content[$x]);
|
||||
|
||||
return $content;
|
||||
}
|
||||
else
|
||||
return preg_replace(array_keys($replace), array_values($replace), $content);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse string or list of strings to string or array of strings
|
||||
*
|
||||
* @param string Text
|
||||
*/
|
||||
private function _parse_list($content)
|
||||
{
|
||||
$result = array();
|
||||
|
||||
for ($x=0, $len=strlen($content); $x<$len; $x++) {
|
||||
switch ($content[$x]) {
|
||||
case '\\':
|
||||
$str .= $content[++$x];
|
||||
break;
|
||||
case '"':
|
||||
if (isset($str)) {
|
||||
$result[] = $str;
|
||||
unset($str);
|
||||
}
|
||||
else
|
||||
$str = '';
|
||||
break;
|
||||
default:
|
||||
if(isset($str))
|
||||
$str .= $content[$x];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (sizeof($result)>1)
|
||||
return $result;
|
||||
elseif (sizeof($result) == 1)
|
||||
return $result[0];
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert array of elements to list of strings
|
||||
*
|
||||
* @param string Text
|
||||
*/
|
||||
private function _print_list($list)
|
||||
{
|
||||
$list = (array) $list;
|
||||
foreach($list as $idx => $val)
|
||||
$list[$idx] = $this->_escape_string($val);
|
||||
|
||||
return '["' . implode('","', $list) . '"]';
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
@ -1,61 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Czech translation for Roundcube managesieve plugin
|
||||
*
|
||||
* @version 1.0 (2009-09-29)
|
||||
* @author Daniel Kolar <kolar@g2n.cz>
|
||||
*
|
||||
*/
|
||||
|
||||
$labels['filters'] = 'Filtry';
|
||||
$labels['managefilters'] = 'Nastavení filtrů';
|
||||
$labels['filtername'] = 'Název filtru';
|
||||
$labels['newfilter'] = 'Nový filtr';
|
||||
$labels['filteradd'] = 'Přidej filtr';
|
||||
$labels['filterdel'] = 'Smaž filtr';
|
||||
$labels['moveup'] = 'Posunout nahoru';
|
||||
$labels['movedown'] = 'Posunout dolů';
|
||||
$labels['filterallof'] = 'Odpovídají všechny pravidla';
|
||||
$labels['filteranyof'] = 'Odpovídá kterékoliv pravidlo';
|
||||
$labels['filterany'] = 'Všechny zprávy';
|
||||
$labels['filtercontains'] = 'obsahuje';
|
||||
$labels['filternotcontains'] = 'neobsahuje';
|
||||
$labels['filteris'] = 'odpovídá';
|
||||
$labels['filterisnot'] = 'neodpovídá';
|
||||
$labels['filterexists'] = 'existuje';
|
||||
$labels['filternotexists'] = 'neexistuje';
|
||||
$labels['filterunder'] = 'pod';
|
||||
$labels['filterover'] = 'nad';
|
||||
$labels['addrule'] = 'Přidej pravidlo';
|
||||
$labels['delrule'] = 'Smaž pravidlo';
|
||||
$labels['messagemoveto'] = 'Přesuň zprávu do';
|
||||
$labels['messageredirect'] = 'Přeposlat zprávu na';
|
||||
$labels['messagereply'] = 'Odpovědět se zprávou';
|
||||
$labels['messagedelete'] = 'Smazat zprávu';
|
||||
$labels['messagediscard'] = 'Smazat se zprávou';
|
||||
$labels['messagesrules'] = 'Pravidla pro příchozí zprávu:';
|
||||
$labels['messagesactions'] = '...vykonej následující akce:';
|
||||
$labels['add'] = 'Přidej';
|
||||
$labels['del'] = 'Smaž';
|
||||
$labels['sender'] = 'Odesílatel';
|
||||
$labels['recipient'] = 'Příjemce';
|
||||
$labels['vacationaddresses'] = 'Seznam příjemců, kterým nebude zpráva odeslána (oddělené čárkou):';
|
||||
$labels['vacationdays'] = 'Počet dnů mezi automatickými odpověďmi:';
|
||||
$labels['vacationreason'] = 'Zpráva (Důvod nepřítomnosti):';
|
||||
$labels['rulestop'] = 'Zastavit pravidla';
|
||||
|
||||
$messages = array();
|
||||
$messages['filterunknownerror'] = 'Neznámá chyba serveru';
|
||||
$messages['filterconnerror'] = 'Nebylo možné se připojit k sieve serveru';
|
||||
$messages['filterdeleteerror'] = 'Nebylo možné smazat filtr. Server nahlásil chybu';
|
||||
$messages['filterdeleted'] = 'Filtr byl smazán';
|
||||
$messages['filterdeleteconfirm'] = 'Opravdu chcete smazat vybraný filtr?';
|
||||
$messages['filtersaved'] = 'Filtr byl uložen';
|
||||
$messages['filtersaveerror'] = 'Nebylo možné uložit filtr. Server nahlásil chybu.';
|
||||
$messages['ruledeleteconfirm'] = 'Jste si jisti, že chcete smazat vybrané pravidlo?';
|
||||
$messages['actiondeleteconfirm'] = 'Jste si jisti, že chcete smazat vybranou akci?';
|
||||
$messages['forbiddenchars'] = 'Zakázané znaky v poli';
|
||||
$messages['cannotbeempty'] = 'Pole nemůže být prázdné';
|
||||
|
||||
?>
|
@ -1,52 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels['filters'] = 'Filter';
|
||||
$labels['managefilters'] = 'Verwalte eingehende Nachrichtenfilter';
|
||||
$labels['filtername'] = 'Filtername';
|
||||
$labels['newfilter'] = 'Neuer Filter';
|
||||
$labels['filteradd'] = 'Filter hinzufügen';
|
||||
$labels['filterdel'] = 'Filter löschen';
|
||||
$labels['moveup'] = 'Nach oben';
|
||||
$labels['movedown'] = 'Nach unten';
|
||||
$labels['filterallof'] = 'UND (alle Regeln müssen zutreffen)';
|
||||
$labels['filteranyof'] = 'ODER (eine der Regeln muss zutreffen';
|
||||
$labels['filterany'] = 'Für alle Nachrichten';
|
||||
$labels['filtercontains'] = 'enthält';
|
||||
$labels['filternotcontains'] = 'enthält nicht';
|
||||
$labels['filteris'] = 'ist gleich';
|
||||
$labels['filterisnot'] = 'ist ungleich';
|
||||
$labels['filterexists'] = 'ist vorhanden';
|
||||
$labels['filternotexists'] = 'nicht vorhanden';
|
||||
$labels['filterunder'] = 'unter';
|
||||
$labels['filterover'] = 'über';
|
||||
$labels['addrule'] = 'Regel hinzufügen';
|
||||
$labels['delrule'] = 'Regel löschen';
|
||||
$labels['messagemoveto'] = 'Verschiebe Nachricht nach';
|
||||
$labels['messageredirect'] = 'Leite Nachricht um nach';
|
||||
$labels['messagereply'] = 'Antworte mit Nachricht';
|
||||
$labels['messagedelete'] = 'Nachricht löschen';
|
||||
$labels['messagediscard'] = 'Discard with message';
|
||||
$labels['messagesrules'] = 'Für eingehende Nachrichten:';
|
||||
$labels['messagesactions'] = 'Führe folgende Aktionen aus:';
|
||||
$labels['add'] = 'Hinzufügen';
|
||||
$labels['del'] = 'Löschen';
|
||||
$labels['sender'] = 'Absender';
|
||||
$labels['recipient'] = 'Empfänger';
|
||||
$labels['vacationaddresses'] = 'Zusätzliche Liste von Empfängern (Komma getrennt):';
|
||||
$labels['vacationdays'] = 'Antwort wird erneut gesendet nach (in Tagen):';
|
||||
$labels['vacationreason'] = 'Inhalt der Nachricht (Abwesenheitsgrund):';
|
||||
$labels['rulestop'] = 'Regelauswertung anhalten';
|
||||
|
||||
$messages['filterunknownerror'] = 'Unbekannter Serverfehler';
|
||||
$messages['filterconnerror'] = 'Kann nicht zum Sieve-Server verbinden';
|
||||
$messages['filterdeleteerror'] = 'Fehler beim des löschen Filters. Serverfehler';
|
||||
$messages['filterdeleted'] = 'Filter erfolgreich gelöscht';
|
||||
$messages['filterdeleteconfirm'] = 'Möchten Sie den Filter löschen ?';
|
||||
$messages['filtersaved'] = 'Filter gespeichert';
|
||||
$messages['filtersaveerror'] = 'Serverfehler, konnte den Filter nicht speichern.';
|
||||
$messages['ruledeleteconfirm'] = 'Sicher, dass Sie die Regel löschen wollen?';
|
||||
$messages['actiondeleteconfirm'] = 'Sicher, dass Sie die ausgewaehlte Aktion löschen wollen?';
|
||||
$messages['forbiddenchars'] = 'Unerlaubte Zeichen im Feld';
|
||||
$messages['cannotbeempty'] = 'Feld darf nicht leer sein';
|
||||
|
||||
?>
|
@ -1,53 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels['filters'] = 'Filter';
|
||||
$labels['managefilters'] = 'Verwalte eingehende Nachrichtenfilter';
|
||||
$labels['filtername'] = 'Filtername';
|
||||
$labels['newfilter'] = 'Neuer Filter';
|
||||
$labels['filteradd'] = 'Filter hinzufügen';
|
||||
$labels['filterdel'] = 'Filter löschen';
|
||||
$labels['moveup'] = 'Nach oben';
|
||||
$labels['movedown'] = 'Nach unten';
|
||||
$labels['filterallof'] = 'trifft auf alle folgenden Regeln zu';
|
||||
$labels['filteranyof'] = 'trifft auf eine der folgenden Regeln zu';
|
||||
$labels['filterany'] = 'alle Nachrichten';
|
||||
$labels['filtercontains'] = 'enthält';
|
||||
$labels['filternotcontains'] = 'enthält nicht';
|
||||
$labels['filteris'] = 'ist gleich';
|
||||
$labels['filterisnot'] = 'ist ungleich';
|
||||
$labels['filterexists'] = 'vorhanden';
|
||||
$labels['filternotexists'] = 'nicht vorhanden';
|
||||
$labels['filterunder'] = 'unter';
|
||||
$labels['filterover'] = 'über';
|
||||
$labels['addrule'] = 'Regel hinzufügen';
|
||||
$labels['delrule'] = 'Regel löschen';
|
||||
$labels['messagemoveto'] = 'Verschiebe Nachricht nach';
|
||||
$labels['messageredirect'] = 'Leite Nachricht um nach';
|
||||
$labels['messagereply'] = 'Antworte mit Nachricht';
|
||||
$labels['messagedelete'] = 'Nachricht löschen';
|
||||
$labels['messagediscard'] = 'Weise ab mit Nachricht';
|
||||
$labels['messagesrules'] = 'Für eingehende Nachrichten:';
|
||||
$labels['messagesactions'] = '...führe folgende Aktionen aus:';
|
||||
$labels['add'] = 'Hinzufügen';
|
||||
$labels['del'] = 'Löschen';
|
||||
$labels['sender'] = 'Absender';
|
||||
$labels['recipient'] = 'Empfänger';
|
||||
$labels['vacationaddresses'] = 'Zusätzliche Liste von eMail-Empfängern (Komma getrennt):';
|
||||
$labels['vacationdays'] = 'Wie oft sollen Nachrichten gesendet werden (in Tagen):';
|
||||
$labels['vacationreason'] = 'Inhalt der Nachricht (Abwesenheitsgrund):';
|
||||
$labels['rulestop'] = 'Regelauswertung anhalten';
|
||||
|
||||
$messages = array();
|
||||
$messages['filterunknownerror'] = 'Unbekannter Serverfehler';
|
||||
$messages['filterconnerror'] = 'Kann nicht zum Sieve-Server verbinden';
|
||||
$messages['filterdeleteerror'] = 'Fehler beim Löschen des Filters. Serverfehler';
|
||||
$messages['filterdeleted'] = 'Filter erfolgreich gelöscht';
|
||||
$messages['filterdeleteconfirm'] = 'Möchten Sie den Filter löschen?';
|
||||
$messages['filtersaved'] = 'Filter gespeichert';
|
||||
$messages['filtersaveerror'] = 'Serverfehler, konnte den Filter nicht speichern.';
|
||||
$messages['ruledeleteconfirm'] = 'Sicher, dass Sie die Regel löschen wollen?';
|
||||
$messages['actiondeleteconfirm'] = 'Sicher, dass Sie die ausgewählte Aktion löschen wollen?';
|
||||
$messages['forbiddenchars'] = 'Unerlaubte Zeichen im Feld';
|
||||
$messages['cannotbeempty'] = 'Feld darf nicht leer sein';
|
||||
|
||||
?>
|
@ -1,53 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels['filters'] = 'Filters';
|
||||
$labels['managefilters'] = 'Manage incoming mail filters';
|
||||
$labels['filtername'] = 'Filter name';
|
||||
$labels['newfilter'] = 'New filter';
|
||||
$labels['filteradd'] = 'Add filter';
|
||||
$labels['filterdel'] = 'Delete filter';
|
||||
$labels['moveup'] = 'Move up';
|
||||
$labels['movedown'] = 'Move down';
|
||||
$labels['filterallof'] = 'matching all of the following rules';
|
||||
$labels['filteranyof'] = 'matching any of the following rules';
|
||||
$labels['filterany'] = 'all messages';
|
||||
$labels['filtercontains'] = 'contains';
|
||||
$labels['filternotcontains'] = 'not contains';
|
||||
$labels['filteris'] = 'is equal to';
|
||||
$labels['filterisnot'] = 'is not equal to';
|
||||
$labels['filterexists'] = 'exists';
|
||||
$labels['filternotexists'] = 'not exists';
|
||||
$labels['filterunder'] = 'under';
|
||||
$labels['filterover'] = 'over';
|
||||
$labels['addrule'] = 'Add rule';
|
||||
$labels['delrule'] = 'Delete rule';
|
||||
$labels['messagemoveto'] = 'Move message to';
|
||||
$labels['messageredirect'] = 'Redirect message to';
|
||||
$labels['messagereply'] = 'Reply with message';
|
||||
$labels['messagedelete'] = 'Delete message';
|
||||
$labels['messagediscard'] = 'Discard with message';
|
||||
$labels['messagesrules'] = 'For incoming mail:';
|
||||
$labels['messagesactions'] = '...execute the following actions:';
|
||||
$labels['add'] = 'Add';
|
||||
$labels['del'] = 'Delete';
|
||||
$labels['sender'] = 'Sender';
|
||||
$labels['recipient'] = 'Recipient';
|
||||
$labels['vacationaddresses'] = 'Additional list of recipient e-mails (comma separated):';
|
||||
$labels['vacationdays'] = 'How often send messages (in days):';
|
||||
$labels['vacationreason'] = 'Message body (vacation reason):';
|
||||
$labels['rulestop'] = 'Stop evaluating rules';
|
||||
|
||||
$messages = array();
|
||||
$messages['filterunknownerror'] = 'Unknown server error';
|
||||
$messages['filterconnerror'] = 'Unable to connect to managesieve server';
|
||||
$messages['filterdeleteerror'] = 'Unable to delete filter. Server error occured';
|
||||
$messages['filterdeleted'] = 'Filter deleted successfully';
|
||||
$messages['filterdeleteconfirm'] = 'Do you really want to delete selected filter?';
|
||||
$messages['filtersaved'] = 'Filter saved successfully';
|
||||
$messages['filtersaveerror'] = 'Unable to save filter. Server error occured.';
|
||||
$messages['ruledeleteconfirm'] = 'Are you sure, you want to delete selected rule?';
|
||||
$messages['actiondeleteconfirm'] = 'Are you sure, you want to delete selected action?';
|
||||
$messages['forbiddenchars'] = 'Forbidden characters in field';
|
||||
$messages['cannotbeempty'] = 'Field cannot be empty';
|
||||
|
||||
?>
|
@ -1,73 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels['filters'] = 'Filters';
|
||||
$labels['managefilters'] = 'Manage incoming mail filters';
|
||||
$labels['filtername'] = 'Filter name';
|
||||
$labels['newfilter'] = 'New filter';
|
||||
$labels['filteradd'] = 'Add filter';
|
||||
$labels['filterdel'] = 'Delete filter';
|
||||
$labels['moveup'] = 'Move up';
|
||||
$labels['movedown'] = 'Move down';
|
||||
$labels['filterallof'] = 'matching all of the following rules';
|
||||
$labels['filteranyof'] = 'matching any of the following rules';
|
||||
$labels['filterany'] = 'all messages';
|
||||
$labels['filtercontains'] = 'contains';
|
||||
$labels['filternotcontains'] = 'not contains';
|
||||
$labels['filteris'] = 'is equal to';
|
||||
$labels['filterisnot'] = 'is not equal to';
|
||||
$labels['filterexists'] = 'exists';
|
||||
$labels['filternotexists'] = 'not exists';
|
||||
$labels['filterunder'] = 'under';
|
||||
$labels['filterover'] = 'over';
|
||||
$labels['addrule'] = 'Add rule';
|
||||
$labels['delrule'] = 'Delete rule';
|
||||
$labels['messagemoveto'] = 'Move message to';
|
||||
$labels['messageredirect'] = 'Redirect message to';
|
||||
$labels['messagereply'] = 'Reply with message';
|
||||
$labels['messagedelete'] = 'Delete message';
|
||||
$labels['messagediscard'] = 'Discard with message';
|
||||
$labels['messagesrules'] = 'For incoming mail:';
|
||||
$labels['messagesactions'] = '...execute the following actions:';
|
||||
$labels['add'] = 'Add';
|
||||
$labels['del'] = 'Delete';
|
||||
$labels['sender'] = 'Sender';
|
||||
$labels['recipient'] = 'Recipient';
|
||||
$labels['vacationaddresses'] = 'Additional list of recipient e-mails (comma separated):';
|
||||
$labels['vacationdays'] = 'How often send messages (in days):';
|
||||
$labels['vacationreason'] = 'Message body (vacation reason):';
|
||||
$labels['rulestop'] = 'Stop evaluating rules';
|
||||
$labels['filterset'] = 'Filters set';
|
||||
$labels['filtersetadd'] = 'Add filters set';
|
||||
$labels['filtersetdel'] = 'Delete current filters set';
|
||||
$labels['filtersetact'] = 'Activate current filters set';
|
||||
$labels['filterdef'] = 'Filter definition';
|
||||
$labels['filtersetname'] = 'Filters set name';
|
||||
$labels['newfilterset'] = 'New filters set';
|
||||
$labels['active'] = 'active';
|
||||
$labels['copyfromset'] = 'Copy filters from set';
|
||||
$labels['none'] = '- none -';
|
||||
$labels['filterdisabled'] = 'Filter disabled';
|
||||
|
||||
$messages = array();
|
||||
$messages['filterunknownerror'] = 'Unknown server error';
|
||||
$messages['filterconnerror'] = 'Unable to connect to managesieve server';
|
||||
$messages['filterdeleteerror'] = 'Unable to delete filter. Server error occured';
|
||||
$messages['filterdeleted'] = 'Filter deleted successfully';
|
||||
$messages['filtersaved'] = 'Filter saved successfully';
|
||||
$messages['filtersaveerror'] = 'Unable to save filter. Server error occured';
|
||||
$messages['filterdeleteconfirm'] = 'Do you really want to delete selected filter?';
|
||||
$messages['ruledeleteconfirm'] = 'Are you sure, you want to delete selected rule?';
|
||||
$messages['actiondeleteconfirm'] = 'Are you sure, you want to delete selected action?';
|
||||
$messages['forbiddenchars'] = 'Forbidden characters in field';
|
||||
$messages['cannotbeempty'] = 'Field cannot be empty';
|
||||
$messages['setactivateerror'] = 'Unable to activate selected filters set. Server error occured';
|
||||
$messages['setdeleteerror'] = 'Unable to delete selected filters set. Server error occured';
|
||||
$messages['setactivated'] = 'Filters set activated successfully';
|
||||
$messages['setdeleted'] = 'Filters set deleted successfully';
|
||||
$messages['setdeleteconfirm'] = 'Are you sure, you want to delete selected filters set?';
|
||||
$messages['setcreateerror'] = 'Unable to create filters set. Server error occured';
|
||||
$messages['setcreated'] = 'Filters set created successfully';
|
||||
$messages['emptyname'] = 'Unable to create filters set. Empty set name';
|
||||
$messages['nametoolong'] = 'Unable to create filters set. Name too long'
|
||||
|
||||
?>
|
@ -1,54 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['filters'] = 'Filtros';
|
||||
$labels['managefilters'] = 'Administrar filtros de correo entrante';
|
||||
$labels['filtername'] = 'Nombre del filtro';
|
||||
$labels['newfilter'] = 'Nuevo filtro';
|
||||
$labels['filteradd'] = 'Agregar filtro';
|
||||
$labels['filterdel'] = 'Eliminar filtro';
|
||||
$labels['moveup'] = 'Mover arriba';
|
||||
$labels['movedown'] = 'Mover abajo';
|
||||
$labels['filterallof'] = 'coinidir con todas las reglas siguientes';
|
||||
$labels['filteranyof'] = 'coincidir con alguna de las reglas siguientes';
|
||||
$labels['filterany'] = 'todos los mensajes';
|
||||
$labels['filtercontains'] = 'contiene';
|
||||
$labels['filternotcontains'] = 'no contiene';
|
||||
$labels['filteris'] = 'es igual a';
|
||||
$labels['filterisnot'] = 'no es igual a';
|
||||
$labels['filterexists'] = 'existe';
|
||||
$labels['filternotexists'] = 'no existe';
|
||||
$labels['filterunder'] = 'bajo';
|
||||
$labels['filterover'] = 'sobre';
|
||||
$labels['addrule'] = 'Agregar regla';
|
||||
$labels['delrule'] = 'Eliminar regla';
|
||||
$labels['messagemoveto'] = 'Mover mensaje a';
|
||||
$labels['messageredirect'] = 'Redirigir mensaje a';
|
||||
$labels['messagereply'] = 'Responder con un mensaje';
|
||||
$labels['messagedelete'] = 'Eliminar mensaje';
|
||||
$labels['messagediscard'] = 'Descartar con un mensaje';
|
||||
$labels['messagesrules'] = 'Para el correo entrante:';
|
||||
$labels['messagesactions'] = '... ejecutar las siguientes acciones:';
|
||||
$labels['add'] = 'Agregar';
|
||||
$labels['del'] = 'Eliminar';
|
||||
$labels['sender'] = 'Remitente';
|
||||
$labels['recipient'] = 'Destinatario';
|
||||
$labels['vacationaddresses'] = 'Lista de direcciones de correo de destinatarios adicionales (separados por comas):';
|
||||
$labels['vacationdays'] = 'Cada cuanto enviar mensajes (en días):';
|
||||
$labels['vacationreason'] = 'Cuerpo del mensaje (razón de vacaciones):';
|
||||
$labels['rulestop'] = 'Parar de evaluar reglas';
|
||||
|
||||
$messages = array();
|
||||
$messages['filterunknownerror'] = 'Error desconocido de servidor';
|
||||
$messages['filterconnerror'] = 'Imposible conectar con el servidor managesieve';
|
||||
$messages['filterdeleteerror'] = 'Imposible borrar filtro. Ha ocurrido un error en el servidor';
|
||||
$messages['filterdeleted'] = 'Filtro borrado satisfactoriamente';
|
||||
$messages['filterdeleteconfirm'] = '¿Realmente desea borrar el filtro seleccionado?';
|
||||
$messages['filtersaved'] = 'Filtro guardado satisfactoriamente';
|
||||
$messages['filtersaveerror'] = 'Imposible guardar ell filtro. Ha ocurrido un error en el servidor';
|
||||
$messages['ruledeleteconfirm'] = '¿Está seguro de que desea borrar la regla seleccionada?';
|
||||
$messages['actiondeleteconfirm'] = '¿Está seguro de que desea borrar la acción seleccionada?';
|
||||
$messages['forbiddenchars'] = 'Caracteres prohibidos en el campo';
|
||||
$messages['cannotbeempty'] = 'El campo no puede estar vacío';
|
||||
|
||||
?>
|
@ -1,53 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels['filters'] = 'Filtrid';
|
||||
$labels['managefilters'] = 'Halda sisenevate kirjade filtreid';
|
||||
$labels['filtername'] = 'Filtri nimi';
|
||||
$labels['newfilter'] = 'Uus filter';
|
||||
$labels['filteradd'] = 'Lisa filter';
|
||||
$labels['filterdel'] = 'Kustuta filter';
|
||||
$labels['moveup'] = 'Liiguta üles';
|
||||
$labels['movedown'] = 'Liiguta alla';
|
||||
$labels['filterallof'] = 'vastab kõikidele järgnevatele reeglitele';
|
||||
$labels['filteranyof'] = 'vastab mõnele järgnevatest reeglitest';
|
||||
$labels['filterany'] = 'kõik kirjad';
|
||||
$labels['filtercontains'] = 'sisaldab';
|
||||
$labels['filternotcontains'] = 'ei sisalda';
|
||||
$labels['filteris'] = 'on võrdne kui';
|
||||
$labels['filterisnot'] = 'ei ole võrdne kui';
|
||||
$labels['filterexists'] = 'on olemas';
|
||||
$labels['filternotexists'] = 'pole olemas';
|
||||
$labels['filterunder'] = 'alt';
|
||||
$labels['filterover'] = 'üle';
|
||||
$labels['addrule'] = 'Lisa reegel';
|
||||
$labels['delrule'] = 'Kustuta reegel';
|
||||
$labels['messagemoveto'] = 'Liiguta kiri';
|
||||
$labels['messageredirect'] = 'Suuna kiri ümber';
|
||||
$labels['messagereply'] = 'Vasta kirjaga';
|
||||
$labels['messagedelete'] = 'Kustuta kiri';
|
||||
$labels['messagediscard'] = 'Viska ära teatega';
|
||||
$labels['messagesrules'] = 'Siseneva kirja puhul, mis:';
|
||||
$labels['messagesactions'] = '...käivita järgnevad tegevused:';
|
||||
$labels['add'] = 'Lisa';
|
||||
$labels['del'] = 'Kustuta';
|
||||
$labels['sender'] = 'Saatja';
|
||||
$labels['recipient'] = 'Saaja';
|
||||
$labels['vacationaddresses'] = 'Lisanimekiri saaja e-posti aadressidest (komadega eraldatud):';
|
||||
$labels['vacationdays'] = 'Kui tihti kirju saata (päevades):';
|
||||
$labels['vacationreason'] = 'Kirja sisu (puhkuse põhjus):';
|
||||
$labels['rulestop'] = 'Peata reeglite otsimine';
|
||||
|
||||
$messages = array();
|
||||
$messages['filterunknownerror'] = 'Tundmatu serveri tõrge';
|
||||
$messages['filterconnerror'] = 'Managesieve serveriga ühendumine nurjus';
|
||||
$messages['filterdeleteerror'] = 'Filtri kustutamine nurjus. Ilmnes serveri tõrge.';
|
||||
$messages['filterdeleted'] = 'Filter edukalt kustutatud';
|
||||
$messages['filterdeleteconfirm'] = 'Soovid valitud filtri kustutada?';
|
||||
$messages['filtersaved'] = 'Filter edukalt salvestatud';
|
||||
$messages['filtersaveerror'] = 'Filtri salvestamine nurjus. Ilmnes serveri tõrge.';
|
||||
$messages['ruledeleteconfirm'] = 'Soovid valitud reegli kustutada?';
|
||||
$messages['actiondeleteconfirm'] = 'Soovid valitud tegevuse kustutada?';
|
||||
$messages['forbiddenchars'] = 'Väljal on lubamatu märk';
|
||||
$messages['cannotbeempty'] = 'Väli ei või tühi olla';
|
||||
|
||||
?>
|
@ -1,49 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels['filters'] = 'Suodattimet';
|
||||
$labels['managefilters'] = 'Muokkaa saapuvan sähköpostin suodattimia';
|
||||
$labels['filtername'] = 'Suodattimen nimi';
|
||||
$labels['newfilter'] = 'Uusi suodatin';
|
||||
$labels['filteradd'] = 'Lisää suodatin';
|
||||
$labels['filterdel'] = 'Poista suodatin';
|
||||
$labels['moveup'] = 'Siirrä ylös';
|
||||
$labels['movedown'] = 'Siirrä alas';
|
||||
$labels['filterallof'] = 'Täsmää kaikkien sääntöjen mukaan';
|
||||
$labels['filteranyof'] = 'Täsmää minkä tahansa sääntöjen mukaan';
|
||||
$labels['filterany'] = 'Kaikki viestit';
|
||||
$labels['filtercontains'] = 'Sisältää';
|
||||
$labels['filternotcontains'] = 'Ei Sisällä';
|
||||
$labels['filteris'] = 'on samanlainen kuin';
|
||||
$labels['filterisnot'] = 'ei ole samanlainen kuin';
|
||||
$labels['filterexists'] = 'on olemassa';
|
||||
$labels['filternotexists'] = 'ei ole olemassa';
|
||||
$labels['filterunder'] = 'alla';
|
||||
$labels['filterover'] = 'yli';
|
||||
$labels['addrule'] = 'Lisää sääntö';
|
||||
$labels['delrule'] = 'Poista sääntö';
|
||||
$labels['messagemoveto'] = 'Siirrä viesti';
|
||||
$labels['messageredirect'] = 'Uudelleen ohjaa viesti';
|
||||
$labels['messagereply'] = 'Vastaa viestin kanssa';
|
||||
$labels['messagedelete'] = 'Poista viesti';
|
||||
$labels['messagediscard'] = 'Hylkää viesti';
|
||||
$labels['messagesrules'] = 'Saapuva sähköposti';
|
||||
$labels['messagesactions'] = 'Suorita seuraavat tapahtumat';
|
||||
$labels['add'] = 'Lisää';
|
||||
$labels['del'] = 'Poista';
|
||||
$labels['sender'] = 'Lähettäjä';
|
||||
$labels['recipient'] = 'Vastaanottaja';
|
||||
|
||||
$messages = array();
|
||||
$messages['filterunknownerror'] = 'Tuntematon palvelin virhe';
|
||||
$messages['filterconnerror'] = 'Yhdistäminen palvelimeen epäonnistui';
|
||||
$messages['filterdeleteerror'] = 'Suodattimen poistaminen epäonnistui. Palvelin virhe';
|
||||
$messages['filterdeleted'] = 'Suodatin poistettu';
|
||||
$messages['filterdeleteconfirm'] = 'Haluatko varmasti poistaa valitut suodattimet?';
|
||||
$messages['filtersaved'] = 'Suodatin tallennettu';
|
||||
$messages['filtersaveerror'] = 'Suodattimen tallennus epäonnistui. Palvelin virhe';
|
||||
$messages['ruledeleteconfirm'] = 'Haluatko poistaa valitut säännöt?';
|
||||
$messages['actiondeleteconfirm'] = 'Haluatko poistaa valitut tapahtumat?';
|
||||
$messages['forbiddenchars'] = 'Sisältää kiellettyjä kirjaimia';
|
||||
$messages['cannotbeempty'] = 'Kenttä ei voi olla tyhjä';
|
||||
|
||||
?>
|
@ -1,53 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels['filters'] = 'Filtres';
|
||||
$labels['managefilters'] = 'Gestion des filtres sur les mails entrants';
|
||||
$labels['filtername'] = 'Nom du filtre';
|
||||
$labels['newfilter'] = 'Nouveau filtre';
|
||||
$labels['filteradd'] = 'Ajouter un filtre';
|
||||
$labels['filterdel'] = 'Supprimer un filtre';
|
||||
$labels['moveup'] = 'Monter';
|
||||
$labels['movedown'] = 'Descendre';
|
||||
$labels['filterallof'] = 'valident toutes les conditions suivantes';
|
||||
$labels['filteranyof'] = 'valident au moins une des conditions suivantes';
|
||||
$labels['filterany'] = 'tous les messages';
|
||||
$labels['filtercontains'] = 'contient';
|
||||
$labels['filternotcontains'] = 'ne contient pas';
|
||||
$labels['filteris'] = 'est ';
|
||||
$labels['filterisnot'] = 'n\'est pas';
|
||||
$labels['filterexists'] = 'existe';
|
||||
$labels['filternotexists'] = 'n\'existe pas';
|
||||
$labels['filterunder'] = 'est plus petit que';
|
||||
$labels['filterover'] = 'est plus grand que';
|
||||
$labels['addrule'] = 'Ajouter une règle';
|
||||
$labels['delrule'] = 'Supprimer une règle';
|
||||
$labels['messagemoveto'] = 'Déplacer le message vers';
|
||||
$labels['messageredirect'] = 'Transférer le message à';
|
||||
$labels['messagereply'] = 'Répondre avec le message';
|
||||
$labels['messagedelete'] = 'Supprimer le message';
|
||||
$labels['messagediscard'] = 'Rejeter avec le message';
|
||||
$labels['messagesrules'] = 'Pour les mails entrants:';
|
||||
$labels['messagesactions'] = '...exécuter les actions suivantes:';
|
||||
$labels['add'] = 'Ajouter';
|
||||
$labels['del'] = 'Supprimer';
|
||||
$labels['sender'] = 'Expéditeur';
|
||||
$labels['recipient'] = 'Destinataire';
|
||||
$labels['vacationaddresses'] = 'Liste des destinataires (séparés par une virgule) :';
|
||||
$labels['vacationdays'] = 'Ne pas renvoyer un message avant (jours) :';
|
||||
$labels['vacationreason'] = 'Corps du message (raison de l\'absence) :';
|
||||
$labels['rulestop'] = 'Arrêter d\'évaluer les prochaines règles';
|
||||
|
||||
$messages = array();
|
||||
$messages['filterunknownerror'] = 'Erreur du serveur inconnue';
|
||||
$messages['filterconnerror'] = 'Connexion au serveur Managesieve impossible';
|
||||
$messages['filterdeleteerror'] = 'Suppression du filtre impossible. Le serveur à produit une erreur';
|
||||
$messages['filterdeleted'] = 'Le filtre a bien été supprimé';
|
||||
$messages['filterdeleteconfirm'] = 'Voulez-vous vraiment supprimer le filtre sélectionné?';
|
||||
$messages['filtersaved'] = 'Le filtre a bien été enregistré';
|
||||
$messages['filtersaveerror'] = 'Enregistrement du filtre impossibe. Le serveur à produit une erreur';
|
||||
$messages['ruledeleteconfirm'] = 'Voulez-vous vraiment supprimer la règle sélectionnée?';
|
||||
$messages['actiondeleteconfirm'] = 'Voulez-vous vraiment supprimer l\'action sélectionnée?';
|
||||
$messages['forbiddenchars'] = 'Caractères interdits dans le champ';
|
||||
$messages['cannotbeempty'] = 'Le champ ne peut pas être vide';
|
||||
|
||||
?>
|
@ -1,54 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['filters'] = 'Üzenetszűrők';
|
||||
$labels['managefilters'] = 'Bejövő üzenetek szűrői';
|
||||
$labels['filtername'] = 'Szűrő neve';
|
||||
$labels['newfilter'] = 'Új szűrő';
|
||||
$labels['filteradd'] = 'Szűrő hozzáadása';
|
||||
$labels['filterdel'] = 'Szűrő törlése';
|
||||
$labels['moveup'] = 'Mozgatás felfelé';
|
||||
$labels['movedown'] = 'Mozgatás lefelé';
|
||||
$labels['filterallof'] = 'A következők mind illeszkedjenek';
|
||||
$labels['filteranyof'] = 'A következők bármelyike illeszkedjen';
|
||||
$labels['filterany'] = 'Minden üzenet illeszkedjen';
|
||||
$labels['filtercontains'] = 'tartalmazza';
|
||||
$labels['filternotcontains'] = 'nem tartalmazza';
|
||||
$labels['filteris'] = 'megegyezik';
|
||||
$labels['filterisnot'] = 'nem egyezik meg';
|
||||
$labels['filterexists'] = 'létezik';
|
||||
$labels['filternotexists'] = 'nem létezik';
|
||||
$labels['filterunder'] = 'alatta';
|
||||
$labels['filterover'] = 'felette';
|
||||
$labels['addrule'] = 'Szabály hozzáadása';
|
||||
$labels['delrule'] = 'Szabály törlése';
|
||||
$labels['messagemoveto'] = 'Üzenet áthelyezése ide:';
|
||||
$labels['messageredirect'] = 'Üzenet továbbítása ide:';
|
||||
$labels['messagereply'] = 'Válaszüzenet küldése (autoreply)';
|
||||
$labels['messagedelete'] = 'Üzenet törlése';
|
||||
$labels['messagediscard'] = 'Válaszüzenet küldése, a levél törlése';
|
||||
$labels['messagesrules'] = 'Az adott tulajdonságú beérkezett üzenetekre:';
|
||||
$labels['messagesactions'] = '... a következő műveletek végrehajtása:';
|
||||
$labels['add'] = 'Hozzáadás';
|
||||
$labels['del'] = 'Törlés';
|
||||
$labels['sender'] = 'Feladó';
|
||||
$labels['recipient'] = 'Címzett';
|
||||
$labels['vacationaddresses'] = 'További címzettek (vesszővel elválasztva):';
|
||||
$labels['vacationdays'] = 'Válaszüzenet küldése ennyi naponként:';
|
||||
$labels['vacationreason'] = 'Levél szövege (automatikus válasz):';
|
||||
$labels['rulestop'] = 'Műveletek végrehajtásának befejezése';
|
||||
|
||||
$messages = array();
|
||||
$messages['filterunknownerror'] = 'Ismeretlen szerverhiba';
|
||||
$messages['filterconnerror'] = 'Nem tudok a szűrőszerverhez kapcsolódni';
|
||||
$messages['filterdeleteerror'] = 'A szűrőt nem lehet törölni, szerverhiba történt';
|
||||
$messages['filterdeleted'] = 'A szűrő törlése sikeres';
|
||||
$messages['filterdeleteconfirm'] = 'Biztosan törli ezt a szűrőt?';
|
||||
$messages['filtersaved'] = 'A szűrő mentése sikeres';
|
||||
$messages['filtersaveerror'] = 'A szűrő mentése sikertelen, szerverhiba történt';
|
||||
$messages['ruledeleteconfirm'] = 'Biztosan törli ezt a szabályt?';
|
||||
$messages['actiondeleteconfirm'] = 'Biztosan törli ezt a műveletet?';
|
||||
$messages['forbiddenchars'] = 'Érvénytelen karakter a mezőben';
|
||||
$messages['cannotbeempty'] = 'A mező nem lehet üres';
|
||||
|
||||
?>
|
@ -1,54 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['filters'] = 'Filtri';
|
||||
$labels['managefilters'] = 'Gestione dei filtri per la posta in arrivo';
|
||||
$labels['filtername'] = 'Nome del filtro';
|
||||
$labels['newfilter'] = 'Nuovo filtro';
|
||||
$labels['filteradd'] = 'Aggiungi filtro';
|
||||
$labels['filterdel'] = 'Elimina filtro';
|
||||
$labels['moveup'] = 'Sposta sopra';
|
||||
$labels['movedown'] = 'Sposta sotto';
|
||||
$labels['filterallof'] = 'che soddisfa tutte le regole seguenti';
|
||||
$labels['filteranyof'] = 'che soddisfa una qualsiasi delle regole seguenti';
|
||||
$labels['filterany'] = 'tutti i messaggi';
|
||||
$labels['filtercontains'] = 'contiene';
|
||||
$labels['filternotcontains'] = 'non contiene';
|
||||
$labels['filteris'] = 'è uguale a';
|
||||
$labels['filterisnot'] = 'è diverso da';
|
||||
$labels['filterexists'] = 'esiste';
|
||||
$labels['filternotexists'] = 'non esiste';
|
||||
$labels['filterunder'] = 'sotto';
|
||||
$labels['filterover'] = 'sopra';
|
||||
$labels['addrule'] = 'Aggiungi regola';
|
||||
$labels['delrule'] = 'Elimina regola';
|
||||
$labels['messagemoveto'] = 'Sposta il messaggio in';
|
||||
$labels['messageredirect'] = 'Inoltra il messaggio a';
|
||||
$labels['messagereply'] = 'Rispondi con il messaggio';
|
||||
$labels['messagedelete'] = 'Elimina il messaggio';
|
||||
$labels['messagediscard'] = 'Rifiuta con messaggio';
|
||||
$labels['messagesrules'] = 'Per la posta in arrivo';
|
||||
$labels['messagesactions'] = '...esegui le seguenti azioni:';
|
||||
$labels['add'] = 'Aggiungi';
|
||||
$labels['del'] = 'Elimina';
|
||||
$labels['sender'] = 'Mittente';
|
||||
$labels['recipient'] = 'Destinatario';
|
||||
$labels['vacationaddresses'] = 'Lista di indirizzi e-mail di destinatari addizionali (separati da virgola):';
|
||||
$labels['vacationdays'] = 'Ogni quanti giorni ribadire il messaggio allo stesso mittente';
|
||||
$labels['vacationreason'] = 'Corpo del messaggio (dettagli relativi all\'assenza):';
|
||||
$labels['rulestop'] = 'Non valutare le regole successive';
|
||||
|
||||
$messages = array();
|
||||
$messages['filterunknownerror'] = 'Errore sconosciuto del server';
|
||||
$messages['filterconnerror'] = 'Collegamento al server managesieve fallito';
|
||||
$messages['filterdeleteerror'] = 'Eliminazione del filtro fallita. Si è verificato un errore nel server';
|
||||
$messages['filterdeleted'] = 'Filtro eliminato con successo';
|
||||
$messages['filterdeleteconfirm'] = 'Vuoi veramente eliminare il filtro selezionato?';
|
||||
$messages['filtersaved'] = 'Filtro salvato con successo';
|
||||
$messages['filtersaveerror'] = 'Salvataggio del filtro fallito. Si è verificato un errore nel server';
|
||||
$messages['ruledeleteconfirm'] = 'Sei sicuro di voler eliminare la regola selezionata?';
|
||||
$messages['actiondeleteconfirm'] = 'Sei sicuro di voler eliminare l\'azione selezionata?';
|
||||
$messages['forbiddenchars'] = 'Caratteri non consentiti nel campo';
|
||||
$messages['cannotbeempty'] = 'Il campo non può essere vuoto';
|
||||
|
||||
?>
|
@ -1,54 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['filters'] = 'Filtre';
|
||||
$labels['managefilters'] = 'Rediger filter for innkommende e-post';
|
||||
$labels['filtername'] = 'Filternavn';
|
||||
$labels['newfilter'] = 'Nytt filter';
|
||||
$labels['filteradd'] = 'Legg til filter';
|
||||
$labels['filterdel'] = 'Slett filter';
|
||||
$labels['moveup'] = 'Flytt opp';
|
||||
$labels['movedown'] = 'Flytt ned';
|
||||
$labels['filterallof'] = 'som treffer alle følgende regler';
|
||||
$labels['filteranyof'] = 'som treffer en av følgende regler';
|
||||
$labels['filterany'] = 'og alle meldinger';
|
||||
$labels['filtercontains'] = 'inneholder';
|
||||
$labels['filternotcontains'] = 'ikke innehold';
|
||||
$labels['filteris'] = 'er';
|
||||
$labels['filterisnot'] = 'ikke er';
|
||||
$labels['filterexists'] = 'eksisterer';
|
||||
$labels['filternotexists'] = 'ikke eksisterer';
|
||||
$labels['filterunder'] = 'under';
|
||||
$labels['filterover'] = 'over';
|
||||
$labels['addrule'] = 'Legg til regel';
|
||||
$labels['delrule'] = 'Slett regel';
|
||||
$labels['messagemoveto'] = 'Flytt meldingen til';
|
||||
$labels['messageredirect'] = 'Videresend meldingen til';
|
||||
$labels['messagereply'] = 'Svar med melding';
|
||||
$labels['messagedelete'] = 'Slett melding';
|
||||
$labels['messagediscard'] = 'Avvis med melding';
|
||||
$labels['messagesrules'] = 'For innkommende e-post';
|
||||
$labels['messagesactions'] = '...gjør følgende';
|
||||
$labels['add'] = 'Legg til';
|
||||
$labels['del'] = 'Slett';
|
||||
$labels['sender'] = 'Avsender';
|
||||
$labels['recipient'] = 'Mottaker';
|
||||
$labels['vacationaddresses'] = 'Liste med mottakeradresser (adskilt med komma):';
|
||||
$labels['vacationdays'] = 'Periode mellom meldinger (i dager):';
|
||||
$labels['vacationreason'] = 'Innhold (begrunnelse for fravær)';
|
||||
$labels['rulestop'] = 'Stopp evaluering av regler';
|
||||
|
||||
$messages = array();
|
||||
$messages['filterunknownerror'] = 'Ukjent problem med tjener';
|
||||
$messages['filterconnerror'] = 'Kunne ikke koble til MANAGESIEVE-tjener';
|
||||
$messages['filterdeleteerror'] = 'Kunne ikke slette filter. Det dukket opp en feil på tjeneren.';
|
||||
$messages['filterdeleted'] = 'Filteret er blitt slettet';
|
||||
$messages['filterconfirmdelete'] = 'Er du sikker på at du vil slette følgende filter?';
|
||||
$messages['filtersaved'] = 'Filter er blitt lagret';
|
||||
$messages['filtersaveerror'] = 'Kunne ikke lagre filteret. Det dukket opp en feil på tjeneren.';
|
||||
$messages['ruledeleteconfirm'] = 'Er du sikker på at du vil slette valgte regel?';
|
||||
$messages['actiondeleteconfirm'] = 'Er du sikker på at du vil slette valgte hendelse?';
|
||||
$messages['forbiddenchars'] = 'Ugyldige tegn i felt';
|
||||
$messages['cannotbeempty'] = 'Feltet kan ikke stå tomt';
|
||||
|
||||
?>
|
@ -1,49 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels['filters'] = 'Filters';
|
||||
$labels['managefilters'] = 'Beheer inkomende mail filters';
|
||||
$labels['filtername'] = 'Filternaam';
|
||||
$labels['newfilter'] = 'Nieuw filter';
|
||||
$labels['filteradd'] = 'Filter toevoegen';
|
||||
$labels['filterdel'] = 'Filter verwijderen';
|
||||
$labels['moveup'] = 'Omhoog';
|
||||
$labels['movedown'] = 'Omlaag';
|
||||
$labels['filterallof'] = 'die voldoen aan alle volgende regels';
|
||||
$labels['filteranyof'] = 'die voldoen aan een van de volgende regels';
|
||||
$labels['filterany'] = 'alle berichten';
|
||||
$labels['filtercontains'] = 'bevat';
|
||||
$labels['filternotcontains'] = 'bevat niet';
|
||||
$labels['filteris'] = 'is gelijk aan';
|
||||
$labels['filterisnot'] = 'is niet gelijk aan';
|
||||
$labels['filterexists'] = 'bestaat';
|
||||
$labels['filternotexists'] = 'bestaat niet';
|
||||
$labels['filterunder'] = 'onder';
|
||||
$labels['filterover'] = 'over';
|
||||
$labels['addrule'] = 'Regel toevoegen';
|
||||
$labels['delrule'] = 'Regel verwijderen';
|
||||
$labels['messagemoveto'] = 'Verplaats bericht naar';
|
||||
$labels['messageredirect'] = 'Redirect bericht naar';
|
||||
$labels['messagereply'] = 'Beantwoord met bericht';
|
||||
$labels['messagedelete'] = 'Verwijder bericht';
|
||||
$labels['messagediscard'] = 'Wijs af met bericht';
|
||||
$labels['messagesrules'] = 'Voor binnenkomende e-mail';
|
||||
$labels['messagesactions'] = '...voer de volgende acties uit';
|
||||
$labels['add'] = 'Toevoegen';
|
||||
$labels['del'] = 'Verwijderen';
|
||||
$labels['sender'] = 'Afzender';
|
||||
$labels['recipient'] = 'Ontvanger';
|
||||
|
||||
$messages = array();
|
||||
$messages['filterunknownerror'] = 'Onbekende fout';
|
||||
$messages['filterconnerror'] = 'Kan geen verbinding maken met de managesieve server';
|
||||
$messages['filterdeleteerror'] = 'Kan filter niet verwijderen. Er is een fout opgetreden';
|
||||
$messages['filterdeleted'] = 'Filter succesvol verwijderd';
|
||||
$messages['filterdeleteconfirm'] = 'Weet je zeker dat je het geselecteerde filter wilt verwijderen?';
|
||||
$messages['filtersaved'] = 'Filter succesvol opgeslagen';
|
||||
$messages['filtersaveerror'] = 'Kan filter niet opslaan. Er is een fout opgetreden.';
|
||||
$messages['ruledeleteconfirm'] = 'Weet je zeker dat je de geselecteerde regel wilt verwijderen?';
|
||||
$messages['actiondeleteconfirm'] = 'Weet je zeker dat je de geselecteerde actie wilt verwijderen?';
|
||||
$messages['forbiddenchars'] = 'Verboden karakters in het veld';
|
||||
$messages['cannotbeempty'] = 'Veld mag niet leeg zijn';
|
||||
|
||||
?>
|
@ -1,74 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['filters'] = 'Filtry';
|
||||
$labels['managefilters'] = 'Zarządzaj filtrami wiadomości przychodzących';
|
||||
$labels['filtername'] = 'Nazwa filtru';
|
||||
$labels['newfilter'] = 'Nowy filtr';
|
||||
$labels['filteradd'] = 'Dodaj filtr';
|
||||
$labels['filterdel'] = 'Usuń filtr';
|
||||
$labels['moveup'] = 'Przenieś wyżej';
|
||||
$labels['movedown'] = 'Przenieś niżej';
|
||||
$labels['filterallof'] = 'spełniające wszystkie poniższe kryteria';
|
||||
$labels['filteranyof'] = 'spełniające dowolne z poniższych kryteriów';
|
||||
$labels['filterany'] = 'wszystkich';
|
||||
$labels['filtercontains'] = 'zawiera';
|
||||
$labels['filternotcontains'] = 'nie zawiera';
|
||||
$labels['filteris'] = 'jest równe';
|
||||
$labels['filterisnot'] = 'nie jest równe';
|
||||
$labels['filterexists'] = 'istnieje';
|
||||
$labels['filternotexists'] = 'nie istnieje';
|
||||
$labels['filterunder'] = 'poniżej';
|
||||
$labels['filterover'] = 'ponad';
|
||||
$labels['addrule'] = 'Dodaj regułę';
|
||||
$labels['delrule'] = 'Usuń regułę';
|
||||
$labels['messagemoveto'] = 'Przenieś wiadomość do';
|
||||
$labels['messageredirect'] = 'Przekaż wiadomość na konto';
|
||||
$labels['messagereply'] = 'Odpowiedz wiadomością o treści';
|
||||
$labels['messagedelete'] = 'Usuń wiadomość';
|
||||
$labels['messagediscard'] = 'Odrzuć z komunikatem';
|
||||
$labels['messagesrules'] = 'W stosunku do przychodzących wiadomości:';
|
||||
$labels['messagesactions'] = '...wykonaj następujące czynności:';
|
||||
$labels['add'] = 'Dodaj';
|
||||
$labels['del'] = 'Usuń';
|
||||
$labels['sender'] = 'Nadawca';
|
||||
$labels['recipient'] = 'Odbiorca';
|
||||
$labels['rulestop'] = 'Przerwij przetwarzanie reguł';
|
||||
$labels['vacationdays'] = 'Częstotliwość wysyłania wiadomości (w dniach):';
|
||||
$labels['vacationaddresses'] = 'Lista dodatkowych adresów odbiorców (oddzielonych przecinkami):';
|
||||
$labels['vacationreason'] = 'Treść (przyczyna nieobecności):';
|
||||
$labels['filterset'] = 'Zbiór filtrów';
|
||||
$labels['filtersetadd'] = 'Dodaj zbiór filtrów';
|
||||
$labels['filtersetdel'] = 'Usuń bierzący zbiór filtrów';
|
||||
$labels['filtersetact'] = 'Aktywuj bierzący zbiór filtrów';
|
||||
$labels['filterdef'] = 'Definicja filtra';
|
||||
$labels['filtersetname'] = 'Nazwa zbioru filtrów';
|
||||
$labels['newfilterset'] = 'Nowy zbiór filtrów';
|
||||
$labels['active'] = 'aktywny';
|
||||
$labels['copyfromset'] = 'Skopiuj filtry ze zbioru';
|
||||
$labels['none'] = '- brak -';
|
||||
$labels['filterdisabled'] = 'Filtr wyłączony';
|
||||
|
||||
$messages = array();
|
||||
$messages['filterunknownerror'] = 'Nieznany błąd serwera';
|
||||
$messages['filterconnerror'] = 'Nie można nawiązać połączenia z serwerem managesieve';
|
||||
$messages['filterdeleteerror'] = 'Nie można usunąć filtra. Wystąpił błąd serwera';
|
||||
$messages['filterdeleted'] = 'Filtr został usunięty pomyślnie';
|
||||
$messages['filterdeleteconfirm'] = 'Czy na pewno chcesz usunąć wybrany filtr?';
|
||||
$messages['filtersaved'] = 'Filtr został zapisany pomyślnie';
|
||||
$messages['filtersaveerror'] = 'Nie można zapisać filtra. Wystąpił błąd serwera.';
|
||||
$messages['ruledeleteconfirm'] = 'Czy na pewno chcesz usunąć wybraną regułę?';
|
||||
$messages['actiondeleteconfirm'] = 'Czy na pewno usunąć wybraną akcję?';
|
||||
$messages['forbiddenchars'] = 'Pole zawiera niedozwolone znaki';
|
||||
$messages['cannotbeempty'] = 'Pole nie może być puste';
|
||||
$messages['setactivateerror'] = 'Nie można aktywować wybranego zbioru filtrów. Błąd serwera';
|
||||
$messages['setdeleteerror'] = 'Nie można usunąć wybranego zbioru filtrów. Błąd serwera';
|
||||
$messages['setactivated'] = 'Zbiór filtrów został aktywowany pomyślnie';
|
||||
$messages['setdeleted'] = 'Zbiór filtrów został usunięty pomyślnie';
|
||||
$messages['setdeleteconfirm'] = 'Czy na pewno chcesz usunąć wybrany zbiór filtrów?';
|
||||
$messages['setcreateerror'] = 'Nie można utworzyć zbioru filtrów. Błąd serwera';
|
||||
$messages['setcreated'] = 'Zbiór filtrów został utworzony pomyślnie';
|
||||
$messages['emptyname'] = 'Nie można utworzyć zbioru filtrów. Pusta nazwa zbioru';
|
||||
$messages['nametoolong'] = 'Nie można utworzyć zbioru filtrów. Nazwa zbyt długa'
|
||||
|
||||
?>
|
@ -1,53 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels['filters'] = 'Filtros';
|
||||
$labels['managefilters'] = 'Gerenciar filtros de entrada de e-mail';
|
||||
$labels['filtername'] = 'Nome do filtro';
|
||||
$labels['newfilter'] = 'Novo filtro';
|
||||
$labels['filteradd'] = 'Adicionar filtro';
|
||||
$labels['filterdel'] = 'Excluir filtro';
|
||||
$labels['moveup'] = 'Mover para cima';
|
||||
$labels['movedown'] = 'Mover para baixo';
|
||||
$labels['filterallof'] = 'casando todas as seguintes regras';
|
||||
$labels['filteranyof'] = 'casando qualquer das seguintes regras';
|
||||
$labels['filterany'] = 'todas as mensagens';
|
||||
$labels['filtercontains'] = 'contem';
|
||||
$labels['filternotcontains'] = 'não contem';
|
||||
$labels['filteris'] = 'é igual a';
|
||||
$labels['filterisnot'] = 'não é igual a';
|
||||
$labels['filterexists'] = 'existe';
|
||||
$labels['filternotexists'] = 'não existe';
|
||||
$labels['filterunder'] = 'inferior a';
|
||||
$labels['filterover'] = 'superior a';
|
||||
$labels['addrule'] = 'Adicionar regra';
|
||||
$labels['delrule'] = 'Excluir regra';
|
||||
$labels['messagemoveto'] = 'Mover mensagem para';
|
||||
$labels['messageredirect'] = 'Redirecionar mensagem para';
|
||||
$labels['messagereply'] = 'Responder com mensagem';
|
||||
$labels['messagedelete'] = 'Excluir mensagem';
|
||||
$labels['messagediscard'] = 'Descartar com mensagem';
|
||||
$labels['messagesrules'] = 'Para e-mails recebidos:';
|
||||
$labels['messagesactions'] = '...execute as seguintes ações:';
|
||||
$labels['add'] = 'Adicionar';
|
||||
$labels['del'] = 'Excluir';
|
||||
$labels['sender'] = 'Remetente';
|
||||
$labels['recipient'] = 'Destinatário';
|
||||
$labels['vacationaddresses'] = 'Lista adicional de e-mails de remetente (separado por vírgula):';
|
||||
$labels['vacationdays'] = 'Enviar mensagens com que frequência (em dias):';
|
||||
$labels['vacationreason'] = 'Corpo da mensagem (motivo de férias):';
|
||||
$labels['rulestop'] = 'Parar de avaliar regras';
|
||||
|
||||
$messages = array();
|
||||
$messages['filterunknownerror'] = 'Erro desconhecido de servidor';
|
||||
$messages['filterconnerror'] = 'Não foi possível conectar ao servidor managesieve';
|
||||
$messages['filterdeleteerror'] = 'Não foi possível excluir filtro. Occorreu um erro de servidor';
|
||||
$messages['filterdeleted'] = 'Filtro excluído com sucesso';
|
||||
$messages['filterdeleteconfirm'] = 'Deseja realmente excluir o filtro selecionado?';
|
||||
$messages['filtersaved'] = 'Filtro gravado com sucesso';
|
||||
$messages['filtersaveerror'] = 'Não foi possível gravar filtro. Occoreu um erro de servidor.';
|
||||
$messages['ruledeleteconfirm'] = 'Deseja realmente excluir a regra selecionada?';
|
||||
$messages['actiondeleteconfirm'] = 'Deseja realmente excluir a ação selecionada?';
|
||||
$messages['forbiddenchars'] = 'Caracteres não permitidos no campo';
|
||||
$messages['cannotbeempty'] = 'Campo não pode ficar em branco';
|
||||
|
||||
?>
|
@ -1,53 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels['filters'] = 'Pravila';
|
||||
$labels['managefilters'] = 'Uredi sporočilna pravila';
|
||||
$labels['filtername'] = 'Ime pravila';
|
||||
$labels['newfilter'] = 'Novo pravilo';
|
||||
$labels['filteradd'] = 'Dodaj pravilo';
|
||||
$labels['filterdel'] = 'Izbriši pravilo';
|
||||
$labels['moveup'] = 'Pomakni se više';
|
||||
$labels['movedown'] = 'Pomakni se niže';
|
||||
$labels['filterallof'] = 'izpolnjeni morajo biti vsi pogoji';
|
||||
$labels['filteranyof'] = 'izpolnjen mora biti vsaj eden od navedenih pogojev';
|
||||
$labels['filterany'] = 'pogoj velja za vsa sporočila';
|
||||
$labels['filtercontains'] = 'vsebuje';
|
||||
$labels['filternotcontains'] = 'ne vsebuje';
|
||||
$labels['filteris'] = 'je enak/a';
|
||||
$labels['filterisnot'] = 'ni enak/a';
|
||||
$labels['filterexists'] = 'obstaja';
|
||||
$labels['filternotexists'] = 'ne obstaja';
|
||||
$labels['filterunder'] = 'pod';
|
||||
$labels['filterover'] = 'nad';
|
||||
$labels['addrule'] = 'Dodaj pravilo';
|
||||
$labels['delrule'] = 'Izbriši pravilo';
|
||||
$labels['messagemoveto'] = 'Premakni sporočilo v';
|
||||
$labels['messageredirect'] = 'Preusmeri sporočilo v';
|
||||
$labels['messagereply'] = 'Odgovori s sporočilom';
|
||||
$labels['messagedelete'] = 'Izbriši sporočilo';
|
||||
$labels['messagediscard'] = 'Zavrži s sporočilom';
|
||||
$labels['messagesrules'] = 'Določi pravila za dohodno pošto:';
|
||||
$labels['messagesactions'] = '...izvrši naslednja dejanja:';
|
||||
$labels['add'] = 'Dodaj';
|
||||
$labels['del'] = 'Izbriši';
|
||||
$labels['sender'] = 'Pošiljatelj';
|
||||
$labels['recipient'] = 'Prejemnik';
|
||||
$labels['vacationaddresses'] = 'Dodaten seznam naslovov prejemnikov (ločenih z vejico):';
|
||||
$labels['vacationdays'] = 'Kako pogosto naj bodo sporočila poslana (v dnevih):';
|
||||
$labels['vacationreason'] = 'Vsebina sporočila (vzrok za odsotnost):';
|
||||
$labels['rulestop'] = 'Prekini z izvajanjem pravil';
|
||||
|
||||
$messages = array();
|
||||
$messages['filterunknownerror'] = 'Prišlo je do neznane napake.';
|
||||
$messages['filterconnerror'] = 'Povezave s strežnikom (managesieve) ni bilo mogoče vzpostaviti';
|
||||
$messages['filterdeleteerror'] = 'Pravila ni bilo mogoče izbrisati. Prišlo je do napake.';
|
||||
$messages['filterdeleted'] = 'Pravilo je bilo uspešno izbrisano.';
|
||||
$messages['filterdeleteconfirm'] = 'Ste prepričani, da želite izbrisati izbrano pravilo?';
|
||||
$messages['filtersaved'] = 'Pravilo je bilo uspešno shranjeno';
|
||||
$messages['filtersaveerror'] = 'Pravilo ni bilo shranjeno. Prišlo je do napake.';
|
||||
$messages['ruledeleteconfirm'] = 'Ste prepričani, da želite izbrisati izbrano pravilo?';
|
||||
$messages['actiondeleteconfirm'] = 'Ste prepričani, da želite izbrisati izbrano dejanje?';
|
||||
$messages['forbiddenchars'] = 'V polju so neveljavni znaki';
|
||||
$messages['cannotbeempty'] = 'Polje ne sme biti prazno';
|
||||
|
||||
?>
|
@ -1,54 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['filters'] = 'Filter';
|
||||
$labels['managefilters'] = 'Administrera filter';
|
||||
$labels['filtername'] = 'Filternamn';
|
||||
$labels['newfilter'] = 'Nytt filter';
|
||||
$labels['filteradd'] = 'Lägg till filter';
|
||||
$labels['filterdel'] = 'Ta bort filter';
|
||||
$labels['moveup'] = 'Flytta upp filter';
|
||||
$labels['movedown'] = 'Flytta ner filter';
|
||||
$labels['filterallof'] = 'Filtrera på alla följande regler';
|
||||
$labels['filteranyof'] = 'Filtrera på någon av följande regler';
|
||||
$labels['filterany'] = 'Filtrera alla meddelanden';
|
||||
$labels['filtercontains'] = 'innehåller';
|
||||
$labels['filternotcontains'] = 'inte innehåller';
|
||||
$labels['filteris'] = 'är lika med';
|
||||
$labels['filterisnot'] = 'är inte lika med';
|
||||
$labels['filterexists'] = 'finns';
|
||||
$labels['filternotexists'] = 'inte finns';
|
||||
$labels['filterunder'] = 'under';
|
||||
$labels['filterover'] = 'över';
|
||||
$labels['addrule'] = 'Lägg till regel';
|
||||
$labels['delrule'] = 'Ta bort regel';
|
||||
$labels['messagemoveto'] = 'Flytta meddelande till';
|
||||
$labels['messageredirect'] = 'Ändra mottagare till';
|
||||
$labels['messagereply'] = 'Besvara meddelande';
|
||||
$labels['messagedelete'] = 'Ta bort meddelande';
|
||||
$labels['messagediscard'] = 'Avböj med felmeddelande';
|
||||
$labels['messagesrules'] = 'För inkommande meddelande';
|
||||
$labels['messagesactions'] = 'Utför följande åtgärd';
|
||||
$labels['add'] = 'Lägg till';
|
||||
$labels['del'] = 'Ta bort';
|
||||
$labels['sender'] = 'Avsändare';
|
||||
$labels['recipient'] = 'Mottagare';
|
||||
$labels['vacationaddresses'] = 'Ytterligare mottagaradresser (avdelade med kommatecken)';
|
||||
$labels['vacationdays'] = 'Antal dagar mellan auto-svar';
|
||||
$labels['vacationreason'] = 'Meddelande i auto-svar';
|
||||
$labels['rulestop'] = 'Avsluta filtrering';
|
||||
|
||||
$messages = array();
|
||||
$messages['filterunknownerror'] = 'Okänt serverfel';
|
||||
$messages['filterconnerror'] = 'Anslutning till serverns filtertjänst misslyckades';
|
||||
$messages['filterdeleteerror'] = 'Filtret kunde inte tas bort på grund av serverfel';
|
||||
$messages['filterdeleted'] = 'Filtret är borttaget';
|
||||
$messages['filterdeleteconfirm'] = 'Vill du ta bort det markerade filtret?';
|
||||
$messages['filtersaved'] = 'Filtret har sparats';
|
||||
$messages['filtersaveerror'] = 'Filtret kunde inte sparas på grund av serverfel';
|
||||
$messages['ruledeleteconfirm'] = 'Vill du ta bort filterregeln?';
|
||||
$messages['actiondeleteconfirm'] = 'Vill du ta bort filteråtgärden?';
|
||||
$messages['forbiddenchars'] = 'Otillåtet tecken i fältet';
|
||||
$messages['cannotbeempty'] = 'Fältet kan inte lämnas tomt';
|
||||
|
||||
?>
|
@ -1,49 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels['filters'] = '过滤器';
|
||||
$labels['managefilters'] = '管理邮件过滤器';
|
||||
$labels['filtername'] = '过滤器名称';
|
||||
$labels['newfilter'] = '新建过滤器';
|
||||
$labels['filteradd'] = '添加过滤器';
|
||||
$labels['filterdel'] = '删除过滤器';
|
||||
$labels['moveup'] = '上移';
|
||||
$labels['movedown'] = '下移';
|
||||
$labels['filterallof'] = '匹配所有规则';
|
||||
$labels['filteranyof'] = '匹配任意一条规则';
|
||||
$labels['filterany'] = '所有邮件';
|
||||
$labels['filtercontains'] = '包含';
|
||||
$labels['filternotcontains'] = '不包含';
|
||||
$labels['filteris'] = '等于';
|
||||
$labels['filterisnot'] = '不等于';
|
||||
$labels['filterexists'] = '存在';
|
||||
$labels['filternotexists'] = '不存在';
|
||||
$labels['filterunder'] = '小于';
|
||||
$labels['filterover'] = '大于';
|
||||
$labels['addrule'] = '添加规则';
|
||||
$labels['delrule'] = '删除规则';
|
||||
$labels['messagemoveto'] = '将邮件移动到';
|
||||
$labels['messageredirect'] = '将邮件转发到';
|
||||
$labels['messagereply'] = '回复以下信息';
|
||||
$labels['messagedelete'] = '删除邮件';
|
||||
$labels['messagediscard'] = '丢弃邮件并回复以下信息';
|
||||
$labels['messagesrules'] = '对收取的邮件应用规则:';
|
||||
$labels['messagesactions'] = '...执行以下动作:';
|
||||
$labels['add'] = '添加';
|
||||
$labels['del'] = '删除';
|
||||
$labels['sender'] = '发件人';
|
||||
$labels['recipient'] = '收件人';
|
||||
|
||||
$messages = array();
|
||||
$messages['filterunknownerror'] = '未知的服务器错误';
|
||||
$messages['filterconnerror'] = '无法连接到 managesieve 服务器';
|
||||
$messages['filterdeleteerror'] = '无法删除过滤器。服务器错误';
|
||||
$messages['filterdeleted'] = '过滤器已成功删除';
|
||||
$messages['filterdeleteconfirm'] = '您确定要删除所选择的过滤器吗?';
|
||||
$messages['filtersaved'] = '过滤器已成功保存。';
|
||||
$messages['filtersaveerror'] = '无法保存过滤器。服务器错误';
|
||||
$messages['ruledeleteconfirm'] = '您确定要删除所选择的规则吗?';
|
||||
$messages['actiondeleteconfirm'] = '您确定要删除所选择的动作吗?';
|
||||
$messages['forbiddenchars'] = '内容中包含禁用的字符';
|
||||
$messages['cannotbeempty'] = '内容不能为空';
|
||||
|
||||
?>
|
@ -1,53 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels['filters'] = '篩選器';
|
||||
$labels['managefilters'] = '設定篩選器';
|
||||
$labels['filtername'] = '篩選器名稱';
|
||||
$labels['newfilter'] = '建立新篩選器';
|
||||
$labels['filteradd'] = '增加篩選器';
|
||||
$labels['filterdel'] = '刪除篩選器';
|
||||
$labels['moveup'] = '上移';
|
||||
$labels['movedown'] = '下移';
|
||||
$labels['filterallof'] = '符合所有規則';
|
||||
$labels['filteranyof'] = '符合任一條規則';
|
||||
$labels['filterany'] = '所有信件';
|
||||
$labels['filtercontains'] = '包含';
|
||||
$labels['filternotcontains'] = '不包含';
|
||||
$labels['filteris'] = '等於';
|
||||
$labels['filterisnot'] = '不等於';
|
||||
$labels['filterexists'] = '存在';
|
||||
$labels['filternotexists'] = '不存在';
|
||||
$labels['filterunder'] = '小於';
|
||||
$labels['filterover'] = '大於';
|
||||
$labels['addrule'] = '新增規則';
|
||||
$labels['delrule'] = '刪除規則';
|
||||
$labels['messagemoveto'] = '將信件移至';
|
||||
$labels['messageredirect'] = '將信件轉寄至';
|
||||
$labels['messagereply'] = '以下列內容回覆';
|
||||
$labels['messagedelete'] = '刪除信件';
|
||||
$labels['messagediscard'] = '刪除信件並以下列內容回覆';
|
||||
$labels['messagesrules'] = '對新收到的信件:';
|
||||
$labels['messagesactions'] = '執行下列動作:';
|
||||
$labels['add'] = '新增';
|
||||
$labels['del'] = '刪除';
|
||||
$labels['sender'] = '寄件者';
|
||||
$labels['recipient'] = '收件者';
|
||||
$labels['vacationaddresses'] = '其他收件者(用半形逗號隔開):';
|
||||
$labels['vacationdays'] = '多久回覆一次(單位:天):';
|
||||
$labels['vacationreason'] = '信件內容(休假原因):';
|
||||
$labels['rulestop'] = '停止評估規則';
|
||||
|
||||
$messages = array();
|
||||
$messages['filterunknownerror'] = '未知的伺服器錯誤';
|
||||
$messages['filterconnerror'] = '無法與伺服器連線';
|
||||
$messages['filterdeleteerror'] = '無法刪除篩選器。發生伺服器錯誤';
|
||||
$messages['filterdeleted'] = '成功刪除篩選器';
|
||||
$messages['filterconfirmdelete'] = '您確定要刪除選擇的篩選器嗎?';
|
||||
$messages['filtersaved'] = '成功儲存篩選器。';
|
||||
$messages['filtersaveerror'] = '無法儲存篩選器。發生伺服器錯誤';
|
||||
$messages['ruledeleteconfirm'] = '您確定要刪除選的規則嗎?';
|
||||
$messages['actiondeleteconfirm'] = '您確定要刪除選擇的動作嗎?';
|
||||
$messages['forbiddenchars'] = '內容包含禁用字元';
|
||||
$messages['cannotbeempty'] = '內容不能為空白';
|
||||
|
||||
?>
|
@ -1,479 +0,0 @@
|
||||
/* Sieve Filters (tab) */
|
||||
|
||||
if (window.rcmail) {
|
||||
rcmail.addEventListener('init', function(evt) {
|
||||
// <span id="settingstabdefault" class="tablink"><roundcube:button command="preferences" type="link" label="preferences" title="editpreferences" /></span>
|
||||
var tab = $('<span>').attr('id', 'settingstabpluginmanagesieve').addClass('tablink');
|
||||
|
||||
var button = $('<a>').attr('href', rcmail.env.comm_path+'&_action=plugin.managesieve')
|
||||
.attr('title', rcmail.gettext('managesieve.managefilters'))
|
||||
.html(rcmail.gettext('managesieve.filters'))
|
||||
.bind('click', function(e){ return rcmail.command('plugin.managesieve', this) })
|
||||
.appendTo(tab);
|
||||
|
||||
// add button and register commands
|
||||
rcmail.add_element(tab, 'tabs');
|
||||
rcmail.register_command('plugin.managesieve', function() { rcmail.goto_url('plugin.managesieve') }, true);
|
||||
rcmail.register_command('plugin.managesieve-save', function() { rcmail.managesieve_save() }, true);
|
||||
rcmail.register_command('plugin.managesieve-add', function() { rcmail.managesieve_add() }, true);
|
||||
rcmail.register_command('plugin.managesieve-del', function() { rcmail.managesieve_del() }, true);
|
||||
rcmail.register_command('plugin.managesieve-up', function() { rcmail.managesieve_up() }, true);
|
||||
rcmail.register_command('plugin.managesieve-down', function() { rcmail.managesieve_down() }, true);
|
||||
rcmail.register_command('plugin.managesieve-set', function() { rcmail.managesieve_set() }, true);
|
||||
rcmail.register_command('plugin.managesieve-setadd', function() { rcmail.managesieve_setadd() }, true);
|
||||
rcmail.register_command('plugin.managesieve-setdel', function() { rcmail.managesieve_setdel() }, true);
|
||||
rcmail.register_command('plugin.managesieve-setact', function() { rcmail.managesieve_setact() }, true);
|
||||
|
||||
if (rcmail.env.action == 'plugin.managesieve')
|
||||
{
|
||||
if (rcmail.gui_objects.sieveform) {
|
||||
rcmail.enable_command('plugin.managesieve-save', true);
|
||||
}
|
||||
else {
|
||||
rcmail.enable_command('plugin.managesieve-del', 'plugin.managesieve-up',
|
||||
'plugin.managesieve-down', false);
|
||||
rcmail.enable_command('plugin.managesieve-add', 'plugin.managesieve-setadd', !rcmail.env.sieveconnerror);
|
||||
rcmail.enable_command('plugin.managesieve-set', rcmail.gui_objects.filtersetslist != null);
|
||||
rcmail.enable_command('plugin.managesieve-setact',
|
||||
(rcmail.gui_objects.filtersetslist && rcmail.gui_objects.filtersetslist.length > 1
|
||||
&& rcmail.gui_objects.filtersetslist.value != rcmail.env.active_set));
|
||||
rcmail.enable_command('plugin.managesieve-setdel',
|
||||
(rcmail.gui_objects.filtersetslist && rcmail.gui_objects.filtersetslist.length > 1));
|
||||
}
|
||||
if (rcmail.gui_objects.filterslist) {
|
||||
var p = rcmail;
|
||||
rcmail.filters_list = new rcube_list_widget(rcmail.gui_objects.filterslist, {multiselect:false, draggable:false, keyboard:false});
|
||||
rcmail.filters_list.addEventListener('select', function(o){ p.managesieve_select(o); });
|
||||
rcmail.filters_list.init();
|
||||
rcmail.filters_list.focus();
|
||||
}
|
||||
}
|
||||
if (rcmail.gui_objects.sieveform && rcmail.env.rule_disabled)
|
||||
$('#disabled').attr('checked', true);
|
||||
});
|
||||
|
||||
/*********************************************************/
|
||||
/********* Managesieve filters methods *********/
|
||||
/*********************************************************/
|
||||
|
||||
rcube_webmail.prototype.managesieve_add = function()
|
||||
{
|
||||
this.load_managesieveframe();
|
||||
this.filters_list.clear_selection();
|
||||
};
|
||||
|
||||
rcube_webmail.prototype.managesieve_del = function()
|
||||
{
|
||||
var id = this.filters_list.get_single_selection();
|
||||
|
||||
if (confirm(this.get_label('managesieve.filterdeleteconfirm')))
|
||||
this.http_request('plugin.managesieve',
|
||||
'_act=delete&_fid='+this.filters_list.rows[id].uid, true);
|
||||
};
|
||||
|
||||
rcube_webmail.prototype.managesieve_up = function()
|
||||
{
|
||||
var id = this.filters_list.get_single_selection();
|
||||
this.http_request('plugin.managesieve',
|
||||
'_act=up&_fid='+this.filters_list.rows[id].uid, true);
|
||||
};
|
||||
|
||||
rcube_webmail.prototype.managesieve_down = function()
|
||||
{
|
||||
var id = this.filters_list.get_single_selection();
|
||||
this.http_request('plugin.managesieve',
|
||||
'_act=down&_fid='+this.filters_list.rows[id].uid, true);
|
||||
};
|
||||
|
||||
rcube_webmail.prototype.managesieve_rowid = function(id)
|
||||
{
|
||||
var rows = this.filters_list.rows;
|
||||
|
||||
for (var i=0; i<rows.length; i++)
|
||||
if (rows[i] != null && rows[i].uid == id)
|
||||
return i;
|
||||
}
|
||||
|
||||
rcube_webmail.prototype.managesieve_updatelist = function(action, name, id, disabled)
|
||||
{
|
||||
this.set_busy(true);
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case 'delete':
|
||||
this.filters_list.remove_row(this.managesieve_rowid(id));
|
||||
this.filters_list.clear_selection();
|
||||
this.enable_command('plugin.managesieve-del', 'plugin.managesieve-up', 'plugin.managesieve-down', false);
|
||||
this.show_contentframe(false);
|
||||
|
||||
// re-numbering filters
|
||||
var rows = this.filters_list.rows;
|
||||
for (var i=0; i<rows.length; i++)
|
||||
{
|
||||
if (rows[i] != null && rows[i].uid > id)
|
||||
rows[i].uid = rows[i].uid-1;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'down':
|
||||
var rows = this.filters_list.rows;
|
||||
var from, fromstatus, status;
|
||||
|
||||
// we need only to replace filter names...
|
||||
for (var i=0; i<rows.length; i++)
|
||||
{
|
||||
if (rows[i]==null) { // removed row
|
||||
continue;
|
||||
} else if (rows[i].uid == id) {
|
||||
from = rows[i].obj;
|
||||
fromstatus = $(from).hasClass('disabled');
|
||||
} else if (rows[i].uid == id+1){
|
||||
name = rows[i].obj.cells[0].innerHTML;
|
||||
status = $(rows[i].obj).hasClass('disabled');
|
||||
rows[i].obj.cells[0].innerHTML = from.cells[0].innerHTML;
|
||||
from.cells[0].innerHTML = name;
|
||||
$(from)[status?'addClass':'removeClass']('disabled');
|
||||
$(rows[i].obj)[fromstatus?'addClass':'removeClass']('disabled');
|
||||
this.filters_list.highlight_row(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
// ... and disable/enable Down button
|
||||
this.filters_listbuttons();
|
||||
break;
|
||||
|
||||
case 'up':
|
||||
var rows = this.filters_list.rows;
|
||||
var from, status, fromstatus;
|
||||
|
||||
// we need only to replace filter names...
|
||||
for (var i=0; i<rows.length; i++)
|
||||
{
|
||||
if (rows[i]==null) { // removed row
|
||||
continue;
|
||||
} else if (rows[i].uid == id-1) {
|
||||
from = rows[i].obj;
|
||||
fromstatus = $(from).hasClass('disabled');
|
||||
this.filters_list.highlight_row(i);
|
||||
} else if (rows[i].uid == id) {
|
||||
name = rows[i].obj.cells[0].innerHTML;
|
||||
status = $(rows[i].obj).hasClass('disabled');
|
||||
rows[i].obj.cells[0].innerHTML = from.cells[0].innerHTML;
|
||||
from.cells[0].innerHTML = name;
|
||||
$(from)[status?'addClass':'removeClass']('disabled');
|
||||
$(rows[i].obj)[fromstatus?'addClass':'removeClass']('disabled');
|
||||
break;
|
||||
}
|
||||
}
|
||||
// ... and disable/enable Up button
|
||||
this.filters_listbuttons();
|
||||
break;
|
||||
|
||||
case 'update':
|
||||
var rows = parent.rcmail.filters_list.rows;
|
||||
for (var i=0; i<rows.length; i++)
|
||||
if (rows[i] && rows[i].uid == id)
|
||||
{
|
||||
rows[i].obj.cells[0].innerHTML = name;
|
||||
if (disabled)
|
||||
$(rows[i].obj).addClass('disabled');
|
||||
else
|
||||
$(rows[i].obj).removeClass('disabled');
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'add':
|
||||
var row, new_row, td;
|
||||
var list = parent.rcmail.filters_list;
|
||||
|
||||
if (!list)
|
||||
break;
|
||||
|
||||
for (var i=0; i<list.rows.length; i++)
|
||||
if (list.rows[i] != null && String(list.rows[i].obj.id).match(/^rcmrow/))
|
||||
row = list.rows[i].obj;
|
||||
|
||||
if (row)
|
||||
{
|
||||
new_row = parent.document.createElement('tr');
|
||||
new_row.id = 'rcmrow'+id;
|
||||
td = parent.document.createElement('td');
|
||||
new_row.appendChild(td);
|
||||
list.insert_row(new_row, false);
|
||||
if (disabled)
|
||||
$(new_row).addClass('disabled');
|
||||
|
||||
if (row.cells[0].className)
|
||||
td.className = row.cells[0].className;
|
||||
|
||||
td.innerHTML = name;
|
||||
list.highlight_row(id);
|
||||
|
||||
parent.rcmail.enable_command('plugin.managesieve-del', 'plugin.managesieve-up', true);
|
||||
}
|
||||
else // refresh whole page
|
||||
parent.rcmail.goto_url('plugin.managesieve');
|
||||
break;
|
||||
}
|
||||
|
||||
this.set_busy(false);
|
||||
|
||||
};
|
||||
|
||||
rcube_webmail.prototype.managesieve_select = function(list)
|
||||
{
|
||||
var id = list.get_single_selection();
|
||||
if (id != null)
|
||||
this.load_managesieveframe(list.rows[id].uid);
|
||||
};
|
||||
|
||||
rcube_webmail.prototype.managesieve_save = function()
|
||||
{
|
||||
if (parent.rcmail && parent.rcmail.filters_list && this.gui_objects.sieveform.name != 'filtersetform')
|
||||
{
|
||||
var id = parent.rcmail.filters_list.get_single_selection();
|
||||
if (id != null)
|
||||
this.gui_objects.sieveform.elements['_fid'].value = parent.rcmail.filters_list.rows[id].uid;
|
||||
}
|
||||
this.gui_objects.sieveform.submit();
|
||||
};
|
||||
|
||||
// load filter frame
|
||||
rcube_webmail.prototype.load_managesieveframe = function(id)
|
||||
{
|
||||
if (typeof(id) != 'undefined' && id != null)
|
||||
{
|
||||
this.enable_command('plugin.managesieve-del', true);
|
||||
this.filters_listbuttons();
|
||||
}
|
||||
else
|
||||
this.enable_command('plugin.managesieve-up', 'plugin.managesieve-down', 'plugin.managesieve-del', false);
|
||||
|
||||
if (this.env.contentframe && window.frames && window.frames[this.env.contentframe])
|
||||
{
|
||||
target = window.frames[this.env.contentframe];
|
||||
this.set_busy(true, 'loading');
|
||||
target.location.href = this.env.comm_path+'&_action=plugin.managesieve&_framed=1&_fid='+id;
|
||||
}
|
||||
};
|
||||
|
||||
// enable/disable Up/Down buttons
|
||||
rcube_webmail.prototype.filters_listbuttons = function()
|
||||
{
|
||||
var id = this.filters_list.get_single_selection();
|
||||
var rows = this.filters_list.rows;
|
||||
|
||||
for (var i=0; i<rows.length; i++)
|
||||
{
|
||||
if (rows[i] == null) { // removed row
|
||||
} else if (i == id) {
|
||||
this.enable_command('plugin.managesieve-up', false);
|
||||
break;
|
||||
} else {
|
||||
this.enable_command('plugin.managesieve-up', true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (var i=rows.length-1; i>0; i--)
|
||||
{
|
||||
if (rows[i] == null) { // removed row
|
||||
} else if (i == id) {
|
||||
this.enable_command('plugin.managesieve-down', false);
|
||||
break;
|
||||
} else {
|
||||
this.enable_command('plugin.managesieve-down', true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// operations on filters form
|
||||
rcube_webmail.prototype.managesieve_ruleadd = function(id)
|
||||
{
|
||||
this.http_post('plugin.managesieve', '_act=ruleadd&_rid='+id);
|
||||
};
|
||||
|
||||
rcube_webmail.prototype.managesieve_rulefill = function(content, id, after)
|
||||
{
|
||||
if (content != '')
|
||||
{
|
||||
// create new element
|
||||
var div = document.getElementById('rules');
|
||||
var row = document.createElement('div');
|
||||
|
||||
this.managesieve_insertrow(div, row, after);
|
||||
// fill row after inserting (for IE)
|
||||
row.setAttribute('id', 'rulerow'+id);
|
||||
row.className = 'rulerow';
|
||||
row.innerHTML = content;
|
||||
|
||||
this.managesieve_formbuttons(div);
|
||||
}
|
||||
};
|
||||
|
||||
rcube_webmail.prototype.managesieve_ruledel = function(id)
|
||||
{
|
||||
if (confirm(this.get_label('managesieve.ruledeleteconfirm')))
|
||||
{
|
||||
var row = document.getElementById('rulerow'+id);
|
||||
row.parentNode.removeChild(row);
|
||||
this.managesieve_formbuttons(document.getElementById('rules'));
|
||||
}
|
||||
};
|
||||
|
||||
rcube_webmail.prototype.managesieve_actionadd = function(id)
|
||||
{
|
||||
this.http_post('plugin.managesieve', '_act=actionadd&_aid='+id);
|
||||
};
|
||||
|
||||
rcube_webmail.prototype.managesieve_actionfill = function(content, id, after)
|
||||
{
|
||||
if (content != '')
|
||||
{
|
||||
var div = document.getElementById('actions');
|
||||
var row = document.createElement('div');
|
||||
|
||||
this.managesieve_insertrow(div, row, after);
|
||||
// fill row after inserting (for IE)
|
||||
row.className = 'actionrow';
|
||||
row.setAttribute('id', 'actionrow'+id);
|
||||
row.innerHTML = content;
|
||||
|
||||
this.managesieve_formbuttons(div);
|
||||
}
|
||||
};
|
||||
|
||||
rcube_webmail.prototype.managesieve_actiondel = function(id)
|
||||
{
|
||||
if (confirm(this.get_label('managesieve.actiondeleteconfirm')))
|
||||
{
|
||||
var row = document.getElementById('actionrow'+id);
|
||||
row.parentNode.removeChild(row);
|
||||
this.managesieve_formbuttons(document.getElementById('actions'));
|
||||
}
|
||||
};
|
||||
|
||||
// insert rule/action row in specified place on the list
|
||||
rcube_webmail.prototype.managesieve_insertrow = function(div, row, after)
|
||||
{
|
||||
for (var i=0; i<div.childNodes.length; i++)
|
||||
{
|
||||
if (div.childNodes[i].id == (div.id == 'rules' ? 'rulerow' : 'actionrow') + after)
|
||||
break;
|
||||
}
|
||||
|
||||
if (div.childNodes[i+1])
|
||||
div.insertBefore(row, div.childNodes[i+1]);
|
||||
else
|
||||
div.appendChild(row);
|
||||
}
|
||||
|
||||
// update Delete buttons status
|
||||
rcube_webmail.prototype.managesieve_formbuttons = function(div)
|
||||
{
|
||||
var buttons = new Array();
|
||||
var i, j=0;
|
||||
// count and get buttons
|
||||
for (i=0; i<div.childNodes.length; i++)
|
||||
{
|
||||
if (div.id == 'rules' && div.childNodes[i].id)
|
||||
{
|
||||
if (/rulerow/.test(div.childNodes[i].id))
|
||||
buttons.push('ruledel' + div.childNodes[i].id.replace(/rulerow/, ''));
|
||||
}
|
||||
else if (div.childNodes[i].id)
|
||||
{
|
||||
if (/actionrow/.test(div.childNodes[i].id))
|
||||
buttons.push( 'actiondel' + div.childNodes[i].id.replace(/actionrow/, ''));
|
||||
}
|
||||
}
|
||||
|
||||
for (i=0; i<buttons.length; i++)
|
||||
{
|
||||
var button = document.getElementById(buttons[i]);
|
||||
if (i>0 || buttons.length>1)
|
||||
{
|
||||
$(button).removeClass('disabled');
|
||||
button.removeAttribute('disabled');
|
||||
}
|
||||
else
|
||||
{
|
||||
$(button).addClass('disabled');
|
||||
button.setAttribute('disabled', true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Set change
|
||||
rcube_webmail.prototype.managesieve_set = function()
|
||||
{
|
||||
var script = $(this.gui_objects.filtersetslist).val();
|
||||
location.href = this.env.comm_path+'&_action=plugin.managesieve&_sid='+script;
|
||||
};
|
||||
|
||||
// Set activate
|
||||
rcube_webmail.prototype.managesieve_setact = function()
|
||||
{
|
||||
if (!this.gui_objects.filtersetslist)
|
||||
return false;
|
||||
|
||||
var script = this.gui_objects.filtersetslist.value;
|
||||
this.http_post('plugin.managesieve', '_act=setact&_set='+script);
|
||||
};
|
||||
|
||||
// Set activate flag in sets list after set activation
|
||||
rcube_webmail.prototype.managesieve_reset = function(name)
|
||||
{
|
||||
if (!this.gui_objects.filtersetslist || !name)
|
||||
return false;
|
||||
|
||||
var opts = this.gui_objects.filtersetslist.getElementsByTagName('option');
|
||||
var regx = new RegExp(RegExp.escape(' (' + this.get_label('managesieve.active') + ')'));
|
||||
|
||||
for (var x=1; x<opts.length; x++)
|
||||
if (opts[x].value != name && opts[x].innerHTML.match(regx))
|
||||
opts[x].innerHTML = opts[x].innerHTML.replace(regx, '');
|
||||
else if (opts[x].value == name)
|
||||
opts[x].innerHTML = opts[x].innerHTML + ' (' + this.get_label('managesieve.active') + ')';
|
||||
};
|
||||
|
||||
// Set delete
|
||||
rcube_webmail.prototype.managesieve_setdel = function()
|
||||
{
|
||||
if (!this.gui_objects.filtersetslist)
|
||||
return false;
|
||||
|
||||
if (!confirm(this.get_label('managesieve.setdeleteconfirm')))
|
||||
return false;
|
||||
|
||||
var script = this.gui_objects.filtersetslist.value;
|
||||
this.http_post('plugin.managesieve', '_act=setdel&_set='+script);
|
||||
};
|
||||
|
||||
// Set add
|
||||
rcube_webmail.prototype.managesieve_setadd = function()
|
||||
{
|
||||
this.filters_list.clear_selection();
|
||||
this.enable_command('plugin.managesieve-up', 'plugin.managesieve-down', 'plugin.managesieve-del', false);
|
||||
|
||||
if (this.env.contentframe && window.frames && window.frames[this.env.contentframe])
|
||||
{
|
||||
target = window.frames[this.env.contentframe];
|
||||
this.set_busy(true, 'loading');
|
||||
target.location.href = this.env.comm_path+'&_action=plugin.managesieve&_framed=1&_newset=1';
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
rcube_webmail.prototype.managesieve_reload = function(set)
|
||||
{
|
||||
this.env.reload_set = set;
|
||||
window.setTimeout(function() {
|
||||
location.href = rcmail.env.comm_path + '&_action=plugin.managesieve'
|
||||
+ (rcmail.env.reload_set ? '&_sid=' + rcmail.env.reload_set : '')
|
||||
}, 500);
|
||||
};
|
||||
|
||||
}
|
@ -1,268 +0,0 @@
|
||||
/***** RoundCube|Filters styles *****/
|
||||
|
||||
|
||||
#filterslist
|
||||
{
|
||||
position: absolute;
|
||||
left: 20px;
|
||||
top: 120px;
|
||||
bottom: 30px;
|
||||
border: 1px solid #999999;
|
||||
background-color: #F9F9F9;
|
||||
overflow: auto;
|
||||
/* css hack for IE */
|
||||
height: expression((parseInt(document.documentElement.clientHeight)-155)+'px');
|
||||
}
|
||||
|
||||
#filters-table
|
||||
{
|
||||
width: 100%;
|
||||
table-layout: fixed;
|
||||
/* css hack for IE */
|
||||
width: expression(document.getElementById('filterslist').clientWidth);
|
||||
}
|
||||
|
||||
#filters-table tbody td
|
||||
{
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#filters-table tbody tr.disabled td
|
||||
{
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
#filtersbuttons
|
||||
{
|
||||
position: absolute;
|
||||
left: 20px;
|
||||
top: 85px;
|
||||
}
|
||||
|
||||
#filtersetsbuttons
|
||||
{
|
||||
position: absolute;
|
||||
left: 230px;
|
||||
top: 85px;
|
||||
}
|
||||
|
||||
#filtersbuttons a,
|
||||
#filtersetsbuttons a
|
||||
{
|
||||
display: block;
|
||||
float: left;
|
||||
}
|
||||
|
||||
#filtersbuttons a.button,
|
||||
#filtersbuttons a.buttonPas,
|
||||
#filtersetsbuttons a.button,
|
||||
#filtersetsbuttons a.buttonPas
|
||||
{
|
||||
display: block;
|
||||
float: left;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
padding: 0;
|
||||
margin-right: 3px;
|
||||
overflow: hidden;
|
||||
background: url('managesieve_toolbar.png') 0 0 no-repeat transparent;
|
||||
opacity: 0.99; /* this is needed to make buttons appear correctly in Chrome */
|
||||
}
|
||||
|
||||
#filtersbuttons a.buttonPas,
|
||||
#filtersetsbuttons a.buttonPas
|
||||
{
|
||||
filter: alpha(opacity=35);
|
||||
opacity: 0.35;
|
||||
}
|
||||
|
||||
#filtersbuttons a.add {
|
||||
background-position: 0px 0px;
|
||||
}
|
||||
|
||||
#filtersbuttons a.addsel {
|
||||
background-position: 0 -32px;
|
||||
}
|
||||
|
||||
#filtersbuttons a.del {
|
||||
background-position: -32px 0px;
|
||||
}
|
||||
|
||||
#filtersbuttons a.delsel {
|
||||
background-position: -32px -32px;
|
||||
}
|
||||
|
||||
#filtersbuttons a.up {
|
||||
background-position: -64px 0px;
|
||||
}
|
||||
|
||||
#filtersbuttons a.upsel {
|
||||
background-position: -64px -32px;
|
||||
}
|
||||
|
||||
#filtersbuttons a.down {
|
||||
background-position: -96px 0px;
|
||||
}
|
||||
|
||||
#filtersbuttons a.downsel {
|
||||
background-position: -96px -32px;
|
||||
}
|
||||
|
||||
#filtersetsbuttons a.setadd {
|
||||
background-position: -128px 0px;
|
||||
}
|
||||
|
||||
#filtersetsbuttons a.setaddsel {
|
||||
background-position: -128px -32px;
|
||||
}
|
||||
|
||||
#filtersetsbuttons a.setdel {
|
||||
background-position: -160px 0px;
|
||||
}
|
||||
|
||||
#filtersetsbuttons a.setdelsel {
|
||||
background-position: -160px -32px;
|
||||
}
|
||||
|
||||
#filtersetsbuttons a.setset {
|
||||
background-position: -192px 0px;
|
||||
}
|
||||
|
||||
#filtersetsbuttons a.setsetsel {
|
||||
background-position: -192px -32px;
|
||||
}
|
||||
|
||||
#filtersetselect
|
||||
{
|
||||
position: absolute;
|
||||
left: 360px;
|
||||
top: 90px;
|
||||
}
|
||||
|
||||
#filter-box
|
||||
{
|
||||
position: absolute;
|
||||
top: 120px;
|
||||
right: 20px;
|
||||
bottom: 30px;
|
||||
border: 1px solid #999999;
|
||||
overflow: hidden;
|
||||
/* css hack for IE */
|
||||
width: expression((parseInt(document.documentElement.clientWidth)-30-parseInt(document.getElementById('filterslist').offsetLeft)-parseInt(document.getElementById('filterslist').offsetWidth))+'px');
|
||||
height: expression((parseInt(document.documentElement.clientHeight)-155)+'px');
|
||||
}
|
||||
|
||||
#filter-frame
|
||||
{
|
||||
background-color: #F9F9F9;
|
||||
border: none;
|
||||
}
|
||||
|
||||
body.iframe
|
||||
{
|
||||
background-color: #F9F9F9;
|
||||
min-width: 740px;
|
||||
width: expression(Math.max(740, document.documentElement.clientWidth)+'px');
|
||||
}
|
||||
|
||||
#filter-form
|
||||
{
|
||||
min-width: 650px;
|
||||
white-space: nowrap;
|
||||
background-color: #F9F9F9;
|
||||
padding: 20px 10px 10px 10px;
|
||||
}
|
||||
|
||||
fieldset
|
||||
{
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
legend, label
|
||||
{
|
||||
color: #666666;
|
||||
}
|
||||
|
||||
#rules, #actions
|
||||
{
|
||||
margin-top: 5px;
|
||||
padding: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
div.rulerow, div.actionrow
|
||||
{
|
||||
width: auto;
|
||||
padding: 2px;
|
||||
white-space: nowrap;
|
||||
border: 1px solid white;
|
||||
}
|
||||
|
||||
div.rulerow:hover, div.actionrow:hover
|
||||
{
|
||||
padding: 2px;
|
||||
white-space: nowrap;
|
||||
background: #F2F2F2;
|
||||
border: 1px solid silver;
|
||||
}
|
||||
|
||||
div.rulerow table, div.actionrow table
|
||||
{
|
||||
padding: 0px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
td.rowbuttons
|
||||
{
|
||||
text-align: right;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
td.rowactions, td.rowtargets
|
||||
{
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
input.disabled, input.disabled:hover
|
||||
{
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
input.error, textarea.error
|
||||
{
|
||||
background-color: #FFFF88;
|
||||
}
|
||||
|
||||
input.box,
|
||||
input.radio
|
||||
{
|
||||
border: 0;
|
||||
}
|
||||
|
||||
span.label
|
||||
{
|
||||
color: #666666;
|
||||
font-size: 10px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
#footer
|
||||
{
|
||||
padding-top: 5px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#footer .footerleft
|
||||
{
|
||||
padding-left: 2px;
|
||||
white-space: nowrap;
|
||||
float: left;
|
||||
}
|
||||
|
||||
#footer .footerright
|
||||
{
|
||||
padding-right: 2px;
|
||||
white-space: nowrap;
|
||||
text-align: right;
|
||||
float: right;
|
||||
}
|
Before Width: | Height: | Size: 9.3 KiB |
@ -1,117 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title><roundcube:object name="pagetitle" /></title>
|
||||
<roundcube:include file="/includes/links.html" />
|
||||
<link rel="stylesheet" type="text/css" href="/this/managesieve.css" />
|
||||
</head>
|
||||
<body class="iframe">
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
function header_select(id)
|
||||
{
|
||||
var obj = document.getElementById('header'+id);
|
||||
|
||||
if (obj.value == 'size')
|
||||
{
|
||||
document.getElementById('rule_size' + id).style.display = 'inline';
|
||||
document.getElementById('rule_op' + id).style.display = 'none';
|
||||
document.getElementById('rule_target' + id).style.display = 'none';
|
||||
document.getElementById('custom_header' + id).style.display = 'none';
|
||||
}
|
||||
else
|
||||
{
|
||||
if (obj.value != '...')
|
||||
document.getElementById('custom_header' + id).style.display = 'none';
|
||||
else
|
||||
document.getElementById('custom_header' + id).style.display = 'inline';
|
||||
|
||||
document.getElementById('rule_size' + id).style.display = 'none';
|
||||
document.getElementById('rule_op' + id).style.display = 'inline';
|
||||
rule_op_select(id);
|
||||
}
|
||||
}
|
||||
|
||||
function rule_op_select(id)
|
||||
{
|
||||
var obj = document.getElementById('rule_op'+id);
|
||||
|
||||
if (obj.value == 'exists' || obj.value == 'notexists')
|
||||
{
|
||||
document.getElementById('rule_target' + id).style.display = 'none';
|
||||
}
|
||||
else
|
||||
{
|
||||
document.getElementById('rule_target' + id).style.display = 'inline';
|
||||
}
|
||||
}
|
||||
|
||||
function action_type_select(id)
|
||||
{
|
||||
var obj = document.getElementById('action_type'+id);
|
||||
|
||||
if (obj.value == 'fileinto')
|
||||
{
|
||||
document.getElementById('action_mailbox' + id).style.display = 'inline';
|
||||
document.getElementById('action_target' + id).style.display = 'none';
|
||||
document.getElementById('action_target_area' + id).style.display = 'none';
|
||||
document.getElementById('action_vacation' + id).style.display = 'none';
|
||||
}
|
||||
else if (obj.value == 'redirect')
|
||||
{
|
||||
document.getElementById('action_target' + id).style.display = 'inline';
|
||||
document.getElementById('action_mailbox' + id).style.display = 'none';
|
||||
document.getElementById('action_target_area' + id).style.display = 'none';
|
||||
document.getElementById('action_vacation' + id).style.display = 'none';
|
||||
}
|
||||
else if (obj.value.match(/^reject|ereject$/))
|
||||
{
|
||||
document.getElementById('action_target_area' + id).style.display = 'inline';
|
||||
document.getElementById('action_vacation' + id).style.display = 'none';
|
||||
document.getElementById('action_target' + id).style.display = 'none';
|
||||
document.getElementById('action_mailbox' + id).style.display = 'none';
|
||||
}
|
||||
else if (obj.value == 'vacation')
|
||||
{
|
||||
document.getElementById('action_vacation' + id).style.display = 'inline';
|
||||
document.getElementById('action_target_area' + id).style.display = 'none';
|
||||
document.getElementById('action_target' + id).style.display = 'none';
|
||||
document.getElementById('action_mailbox' + id).style.display = 'none';
|
||||
}
|
||||
else // discard, keep, stop
|
||||
{
|
||||
document.getElementById('action_target_area' + id).style.display = 'none';
|
||||
document.getElementById('action_vacation' + id).style.display = 'none';
|
||||
document.getElementById('action_target' + id).style.display = 'none';
|
||||
document.getElementById('action_mailbox' + id).style.display = 'none';
|
||||
}
|
||||
}
|
||||
|
||||
function rule_join_radio(value)
|
||||
{
|
||||
document.getElementById('rules').style.display = (value=='any' ? 'none' : 'block');
|
||||
}
|
||||
</script>
|
||||
|
||||
<div id="filter-title" class="boxtitle"><roundcube:label name="managesieve.filterdef" /></div>
|
||||
|
||||
<div id="filter-form">
|
||||
<roundcube:object name="filterform" />
|
||||
|
||||
<div id="footer">
|
||||
<div class="footerleft">
|
||||
<roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
|
||||
</div>
|
||||
<div class="footerright">
|
||||
<label for="disabled"><roundcube:label name="managesieve.filterdisabled" /></label>
|
||||
<input type="checkbox" id="disabled" name="_disabled" value="1" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
@ -1,53 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title><roundcube:object name="pagetitle" /></title>
|
||||
<roundcube:include file="/includes/links.html" />
|
||||
<link rel="stylesheet" type="text/css" href="/this/managesieve.css" />
|
||||
<script type="text/javascript" src="/functions.js"></script>
|
||||
<script type="text/javascript" src="/splitter.js"></script>
|
||||
|
||||
<style type="text/css">
|
||||
#filterslist { width: <roundcube:exp expression="!empty(cookie:sieveviewsplitter) ? cookie:sieveviewsplitter-5 : 210" />px; }
|
||||
#filter-box { left: <roundcube:exp expression="!empty(cookie:sieveviewsplitter) ? cookie:sieveviewsplitter+5 : 220" />px;
|
||||
<roundcube:exp expression="browser:ie ? ('width:expression((parseInt(this.parentNode.offsetWidth)-'.(!empty(cookie:sieveviewsplitter) ? cookie:sieveviewsplitter+5 : 220).')+\\'px\\');') : ''" />
|
||||
}
|
||||
</style>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<roundcube:include file="/includes/taskbar.html" />
|
||||
<roundcube:include file="/includes/header.html" />
|
||||
<roundcube:include file="/includes/settingstabs.html" />
|
||||
|
||||
<div id="filtersbuttons">
|
||||
<roundcube:button command="plugin.managesieve-add" type="link" class="buttonPas add" classSel="button addsel" classAct="button add" title="managesieve.filteradd" content=" " />
|
||||
<roundcube:button command="plugin.managesieve-del" type="link" class="buttonPas del" classSel="button delsel" classAct="button del" title="managesieve.filterdel" content=" " />
|
||||
<roundcube:button command="plugin.managesieve-up" type="link" class="buttonPas up" classSel="button upsel" classAct="button up" title="managesieve.moveup" content=" " />
|
||||
<roundcube:button command="plugin.managesieve-down" type="link" class="buttonPas down" classSel="button downsel" classAct="button down" title="managesieve.movedown" content=" " />
|
||||
</div>
|
||||
|
||||
<div id="filtersetsbuttons">
|
||||
<roundcube:button command="plugin.managesieve-setadd" type="link" class="buttonPas setadd" classSel="button setaddsel" classAct="button setadd" title="managesieve.filtersetadd" content=" " />
|
||||
<roundcube:button command="plugin.managesieve-setdel" type="link" class="buttonPas setdel" classSel="button setdelsel" classAct="button setdel" title="managesieve.filtersetdel" content=" " />
|
||||
<roundcube:button command="plugin.managesieve-setact" type="link" class="buttonPas setset" classSel="button setsetsel" classAct="button setset" title="managesieve.filtersetact" content=" " />
|
||||
</div>
|
||||
<div id="filtersetselect">
|
||||
<roundcube:label name="managesieve.filterset" />:
|
||||
<roundcube:object name="filtersetslist" id="filtersets-select" />
|
||||
</div>
|
||||
|
||||
<div id="filterslist">
|
||||
<roundcube:object name="filterslist" id="filters-table" class="records-table" cellspacing="0" summary="Filters list" />
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
var sieveviewsplit = new rcube_splitter({id:'sieveviewsplitter', p1: 'filterslist', p2: 'filter-box', orientation: 'v', relative: true, start: 215});
|
||||
rcmail.add_onload('sieveviewsplit.init()');
|
||||
</script>
|
||||
<div id="filter-box">
|
||||
<roundcube:object name="filterframe" id="filter-frame" width="100%" height="100%" frameborder="0" src="/watermark.html" />
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -1,24 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title><roundcube:object name="pagetitle" /></title>
|
||||
<roundcube:include file="/includes/links.html" />
|
||||
<link rel="stylesheet" type="text/css" href="/this/managesieve.css" />
|
||||
</head>
|
||||
<body class="iframe">
|
||||
|
||||
<div id="filter-title" class="boxtitle"><roundcube:label name="managesieve.newfilterset" /></div>
|
||||
|
||||
<div id="filter-form">
|
||||
<roundcube:object name="filtersetform" />
|
||||
|
||||
<p>
|
||||
<roundcube:button command="plugin.managesieve-save" type="input" class="button mainaction" label="save" />
|
||||
</p>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
@ -1,24 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
|
||||
+-----------------------------------------------------------------------+
|
||||
| language/cs_CZ/labels.inc |
|
||||
| |
|
||||
| Language file of the RoundCube markasjunk plugin |
|
||||
| Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
|
||||
| Licensed under the GNU GPL |
|
||||
| |
|
||||
+-----------------------------------------------------------------------+
|
||||
| Author: Milan Kozak <hodza@hodza.net> |
|
||||
+-----------------------------------------------------------------------+
|
||||
|
||||
@version $Id: labels.inc 2993 2009-09-26 18:32:07Z alec $
|
||||
|
||||
*/
|
||||
|
||||
$labels = array();
|
||||
$labels['buttontitle'] = 'Označit jako Spam';
|
||||
$labels['reportedasjunk'] = 'Úspěšně nahlášeno jako Spam';
|
||||
|
||||
?>
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['buttontitle'] = 'Mark as Junk';
|
||||
$labels['reportedasjunk'] = 'Successfully reported as Junk';
|
||||
|
||||
?>
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['buttontitle'] = 'Märgista Rämpsuks';
|
||||
$labels['reportedasjunk'] = 'Edukalt Rämpsuks märgitud';
|
||||
|
||||
?>
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['buttontitle'] = 'Oznacz jako SPAM';
|
||||
$labels['reportedasjunk'] = 'Pomyślnie oznaczono jako SPAM';
|
||||
|
||||
?>
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['buttontitle'] = 'Переместить в "СПАМ"';
|
||||
$labels['reportedasjunk'] = 'Перемещено в "СПАМ"';
|
||||
|
||||
?>
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['buttontitle'] = 'Märk som skräp';
|
||||
$labels['reportedasjunk'] = 'Framgångsrikt rapporterat som skräp';
|
||||
|
||||
?>
|
@ -1,28 +0,0 @@
|
||||
/* Mark-as-Junk plugin script */
|
||||
|
||||
function rcmail_markasjunk(prop)
|
||||
{
|
||||
if (!rcmail.env.uid && (!rcmail.message_list || !rcmail.message_list.get_selection().length))
|
||||
return;
|
||||
|
||||
var uids = rcmail.env.uid ? rcmail.env.uid : rcmail.message_list.get_selection().join(',');
|
||||
|
||||
rcmail.set_busy(true, 'loading');
|
||||
rcmail.http_post('plugin.markasjunk', '_uid='+uids+'&_mbox='+urlencode(rcmail.env.mailbox), true);
|
||||
}
|
||||
|
||||
// callback for app-onload event
|
||||
if (window.rcmail) {
|
||||
rcmail.addEventListener('init', function(evt) {
|
||||
|
||||
// register command (directly enable in message view mode)
|
||||
rcmail.register_command('plugin.markasjunk', rcmail_markasjunk, rcmail.env.uid);
|
||||
|
||||
// add event-listener to message list
|
||||
if (rcmail.message_list)
|
||||
rcmail.message_list.addEventListener('select', function(list){
|
||||
rcmail.enable_command('plugin.markasjunk', list.get_selection().length > 0);
|
||||
});
|
||||
})
|
||||
}
|
||||
|
@ -1,56 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Mark as Junk
|
||||
*
|
||||
* Sample plugin that adds a new button to the mailbox toolbar
|
||||
* to mark the selected messages as Junk and move them to the Junk folder
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Thomas Bruederli
|
||||
*/
|
||||
class markasjunk extends rcube_plugin
|
||||
{
|
||||
public $task = 'mail';
|
||||
|
||||
function init()
|
||||
{
|
||||
$rcmail = rcmail::get_instance();
|
||||
|
||||
$this->register_action('plugin.markasjunk', array($this, 'request_action'));
|
||||
|
||||
if ($rcmail->action == '' || $rcmail->action == 'show') {
|
||||
$skin_path = $this->local_skin_path();
|
||||
$this->include_script('markasjunk.js');
|
||||
$this->add_texts('localization', true);
|
||||
$this->add_button(array(
|
||||
'command' => 'plugin.markasjunk',
|
||||
'imagepas' => $skin_path.'/junk_pas.png',
|
||||
'imageact' => $skin_path.'/junk_act.png',
|
||||
'title' => 'markasjunk.buttontitle'), 'toolbar');
|
||||
}
|
||||
}
|
||||
|
||||
function request_action()
|
||||
{
|
||||
$this->add_texts('localization');
|
||||
|
||||
$GLOBALS['IMAP_FLAGS']['JUNK'] = 'Junk';
|
||||
$GLOBALS['IMAP_FLAGS']['NONJUNK'] = 'NonJunk';
|
||||
|
||||
$uids = get_input_value('_uid', RCUBE_INPUT_POST);
|
||||
$mbox = get_input_value('_mbox', RCUBE_INPUT_POST);
|
||||
|
||||
$rcmail = rcmail::get_instance();
|
||||
$rcmail->imap->unset_flag($uids, 'NONJUNK');
|
||||
$rcmail->imap->set_flag($uids, 'JUNK');
|
||||
|
||||
if (($junk_mbox = $rcmail->config->get('junk_mbox')) && $mbox != $junk_mbox) {
|
||||
$rcmail->output->command('move_messages', $junk_mbox);
|
||||
}
|
||||
|
||||
$rcmail->output->command('display_message', $this->gettext('reportedasjunk'), 'confirmation');
|
||||
$rcmail->output->send();
|
||||
}
|
||||
|
||||
}
|
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.9 KiB |
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['identitydialogtitle'] = 'Prosím doplňte své jméno a e-mail';
|
||||
$labels['identitydialoghint'] = 'Tento dialog se objeví pouze při prvním přihlášení.';
|
||||
|
||||
?>
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['identitydialogtitle'] = 'Bitte vervollständigen Sie Ihre Absender-Informationen';
|
||||
$labels['identitydialoghint'] = 'Dieser Dialog erscheint nur einmal beim ersten Login.';
|
||||
|
||||
?>
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['identitydialogtitle'] = 'Bitte vervollständigen Sie Ihre Absender-Informationen';
|
||||
$labels['identitydialoghint'] = 'Dieser Dialog erscheint nur einmal beim ersten Login.';
|
||||
|
||||
?>
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['identitydialogtitle'] = 'Please complete your sender identity';
|
||||
$labels['identitydialoghint'] = 'This box only appears once at the first login.';
|
||||
|
||||
?>
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['identitydialogtitle'] = 'Por favor completa tus datos';
|
||||
$labels['identitydialoghint'] = 'Este diálogo sólo aparece la primera vez que te conectas.';
|
||||
|
||||
?>
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['identitydialogtitle'] = 'Palun täida oma saatja identiteet';
|
||||
$labels['identitydialoghint'] = 'See kast ilmub ainult esimesel sisselogimisel.';
|
||||
|
||||
?>
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['identitydialogtitle'] = 'Per favore completa le informazioni riguardo la tua identità';
|
||||
$labels['identitydialoghint'] = 'Questa finestra comparirà una volta sola al primo accesso';
|
||||
|
||||
?>
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['identitydialogtitle'] = 'Uzupełnij tożsamość nadawcy';
|
||||
$labels['identitydialoghint'] = 'To okno pojawia się tylko przy pierwszym logowaniu.';
|
||||
|
||||
?>
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['identitydialogtitle'] = 'Пожалуйста, укажите Ваше имя.';
|
||||
$labels['identitydialoghint'] = 'Данное сообщение отображается только при первом входе.';
|
||||
|
||||
?>
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['identitydialogtitle'] = 'Vänligen fyll i namn och avsändaradress under personliga inställningar';
|
||||
$labels['identitydialoghint'] = 'Informationen visas endast vid första inloggningen.';
|
||||
|
||||
?>
|
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
$labels = array();
|
||||
$labels['identitydialogtitle'] = '請完成您的身份資訊';
|
||||
$labels['identitydialoghint'] = '此視窗只會於第一次登入時出現。';
|
||||
|
||||
?>
|
@ -1,109 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Present identities settings dialog to new users
|
||||
*
|
||||
* When a new user is created, this plugin checks the default identity
|
||||
* and sets a session flag in case it is incomplete. An overlay box will appear
|
||||
* on the screen until the user has reviewed/completed his identity.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Thomas Bruederli
|
||||
*/
|
||||
class new_user_dialog extends rcube_plugin
|
||||
{
|
||||
public $task = 'login|mail';
|
||||
|
||||
function init()
|
||||
{
|
||||
$this->add_hook('create_identity', array($this, 'create_identity'));
|
||||
|
||||
// register additional hooks if session flag is set
|
||||
if ($_SESSION['plugin.newuserdialog']) {
|
||||
$this->add_hook('render_page', array($this, 'render_page'));
|
||||
$this->register_action('plugin.newusersave', array($this, 'save_data'));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check newly created identity at first login
|
||||
*/
|
||||
function create_identity($p)
|
||||
{
|
||||
// set session flag when a new user was created and the default identity seems to be incomplete
|
||||
if ($p['login'] && !$p['complete'])
|
||||
$_SESSION['plugin.newuserdialog'] = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback function when HTML page is rendered
|
||||
* We'll add an overlay box here.
|
||||
*/
|
||||
function render_page($p)
|
||||
{
|
||||
if ($_SESSION['plugin.newuserdialog']) {
|
||||
$this->add_texts('localization');
|
||||
|
||||
$rcmail = rcmail::get_instance();
|
||||
$identity = $rcmail->user->get_identity();
|
||||
$identities_level = intval($rcmail->config->get('identities_level', 0));
|
||||
|
||||
// compose user-identity dialog
|
||||
$table = new html_table(array('cols' => 2));
|
||||
|
||||
$table->add('title', $this->gettext('name'));
|
||||
$table->add(null, html::tag('input', array('type' => "text", 'name' => "_name", 'value' => $identity['name'])));
|
||||
|
||||
$table->add('title', $this->gettext('email'));
|
||||
$table->add(null, html::tag('input', array('type' => "text", 'name' => "_email", 'value' => $identity['email'], 'disabled' => ($identities_level == 1 || $identities_level == 3))));
|
||||
|
||||
// add overlay input box to html page
|
||||
$rcmail->output->add_footer(html::div(array('id' => "newuseroverlay"),
|
||||
html::tag('form', array(
|
||||
'action' => $rcmail->url('plugin.newusersave'),
|
||||
'method' => "post"),
|
||||
html::tag('h3', null, Q($this->gettext('identitydialogtitle'))) .
|
||||
html::p('hint', Q($this->gettext('identitydialoghint'))) .
|
||||
$table->show() .
|
||||
html::p(array('class' => "formbuttons"),
|
||||
html::tag('input', array('type' => "submit", 'class' => "button mainaction", 'value' => $this->gettext('save'))))
|
||||
)
|
||||
));
|
||||
|
||||
$this->include_stylesheet('newuserdialog.css');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handler for submitted form
|
||||
*
|
||||
* Check fields and save to default identity if valid.
|
||||
* Afterwards the session flag is removed and we're done.
|
||||
*/
|
||||
function save_data()
|
||||
{
|
||||
$rcmail = rcmail::get_instance();
|
||||
$identity = $rcmail->user->get_identity();
|
||||
$identities_level = intval($rcmail->config->get('identities_level', 0));
|
||||
|
||||
$save_data = array(
|
||||
'name' => get_input_value('_name', RCUBE_INPUT_POST),
|
||||
'email' => get_input_value('_email', RCUBE_INPUT_POST),
|
||||
);
|
||||
|
||||
// don't let the user alter the e-mail address if disabled by config
|
||||
if ($identities_level == 1 || $identities_level == 3)
|
||||
$save_data['email'] = $identity['email'];
|
||||
|
||||
// save data if not empty
|
||||
if (!empty($save_data['name']) && !empty($save_data['email'])) {
|
||||
$rcmail->user->update_identity($identity['identity_id'], $save_data);
|
||||
$rcmail->session->remove('plugin.newuserdialog');
|
||||
}
|
||||
|
||||
$rcmail->output->redirect('');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -1,59 +0,0 @@
|
||||
/** Styles for the new-user-dialog overlay box */
|
||||
|
||||
#newuseroverlay {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
z-index: 10000;
|
||||
background: rgba(0,0,0,0.5) !important;
|
||||
background: #333;
|
||||
|
||||
/** IE hacks */
|
||||
filter: alpha(opacity=90);
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";
|
||||
width: expression(document.documentElement.clientWidth+'px');
|
||||
height: expression(document.documentElement.clientHeight+'px');
|
||||
}
|
||||
|
||||
#newuseroverlay h3 {
|
||||
color: #333;
|
||||
font-size: normal;
|
||||
margin-top: 0.5em;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
#newuseroverlay p.hint {
|
||||
margin-top: 0.5em;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
#newuseroverlay form {
|
||||
width: 32em;
|
||||
margin: 8em auto;
|
||||
padding: 1em 2em;
|
||||
background: #F6F6F6;
|
||||
border: 2px solid #555;
|
||||
border-radius: 6px;
|
||||
-moz-border-radius: 6px;
|
||||
-webkit-border-radius: 6px;
|
||||
}
|
||||
|
||||
#newuseroverlay table td.title
|
||||
{
|
||||
color: #666;
|
||||
text-align: right;
|
||||
padding-right: 1em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
#newuseroverlay table td input
|
||||
{
|
||||
width: 20em;
|
||||
}
|
||||
|
||||
#newuseroverlay .formbuttons {
|
||||
margin-top: 1.5em;
|
||||
text-align: center;
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* New user identity
|
||||
*
|
||||
* Populates a new user's default identity from LDAP on their first visit.
|
||||
*
|
||||
* This plugin requires that a working public_ldap directory be configured.
|
||||
*
|
||||
* @version 1.0
|
||||
* @author Kris Steinhoff
|
||||
*
|
||||
* Example configuration:
|
||||
*
|
||||
* // The id of the address book to use to automatically set a new
|
||||
* // user's full name in their new identity. (This should be an
|
||||
* // string, which refers to the $rcmail_config['ldap_public'] array.)
|
||||
* $rcmail_config['new_user_identity_addressbook'] = 'People';
|
||||
*
|
||||
* // When automatically setting a new users's full name in their
|
||||
* // new identity, match the user's login name against this field.
|
||||
* $rcmail_config['new_user_identity_match'] = 'uid';
|
||||
*/
|
||||
class new_user_identity extends rcube_plugin
|
||||
{
|
||||
public $task = 'login';
|
||||
|
||||
function init()
|
||||
{
|
||||
$this->add_hook('create_user', array($this, 'lookup_user_name'));
|
||||
}
|
||||
|
||||
function lookup_user_name($args)
|
||||
{
|
||||
$rcmail = rcmail::get_instance();
|
||||
if ($addressbook = $rcmail->config->get('new_user_identity_addressbook')) {
|
||||
$match = $rcmail->config->get('new_user_identity_match');
|
||||
$ldap = $rcmail->get_address_book($addressbook);
|
||||
$ldap->prop['search_fields'] = array($match);
|
||||
$results = $ldap->search($match, $args['user'], TRUE);
|
||||
if (count($results->records) == 1) {
|
||||
$args['user_name'] = $results->records[0]['name'];
|
||||
}
|
||||
}
|
||||
return $args;
|
||||
}
|
||||
}
|
||||
?>
|
@ -1,200 +0,0 @@
|
||||
-----------------------------------------------------------------------
|
||||
Password Plugin for Roundcube
|
||||
-----------------------------------------------------------------------
|
||||
|
||||
Plugin that adds a possibility to change user password using many
|
||||
methods (drivers) via Settings/Password tab.
|
||||
|
||||
-----------------------------------------------------------------------
|
||||
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.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
@version 1.2
|
||||
@author Aleksander 'A.L.E.C' Machniak <alec@alec.pl>
|
||||
@author <see driver files for driver authors>
|
||||
-----------------------------------------------------------------------
|
||||
|
||||
1. Configuration
|
||||
2. Drivers
|
||||
2.1. Database (sql)
|
||||
2.2. Cyrus/SASL (sasl)
|
||||
2.3. Poppassd/Courierpassd (poppassd)
|
||||
2.4. LDAP (ldap)
|
||||
2.5. DirectAdmin Control Panel
|
||||
2.6. cPanel
|
||||
2.7. XIMSS (Communigate)
|
||||
3. Driver API
|
||||
|
||||
|
||||
1. Configuration
|
||||
----------------
|
||||
|
||||
Copy config.inc.php.dist to config.inc.php and set the options as described
|
||||
within the file.
|
||||
|
||||
|
||||
2. Drivers
|
||||
----------
|
||||
|
||||
Password plugin supports many password change mechanisms which are
|
||||
handled by included drivers. Just pass driver name in 'password_driver' option.
|
||||
|
||||
|
||||
2.1. Database (sql)
|
||||
-------------------
|
||||
|
||||
You can specify which database to connect by 'password_db_dsn' option and
|
||||
what SQL query to execute by 'password_query'. See main.inc.php file for
|
||||
more info.
|
||||
|
||||
Example implementations of an update_passwd function:
|
||||
|
||||
- This is for use with LMS (http://lms.org.pl) database and postgres:
|
||||
|
||||
CREATE OR REPLACE FUNCTION update_passwd(hash text, account text) RETURNS integer AS $$
|
||||
DECLARE
|
||||
res integer;
|
||||
BEGIN
|
||||
UPDATE passwd SET password = hash
|
||||
WHERE login = split_part(account, '@', 1)
|
||||
AND domainid = (SELECT id FROM domains WHERE name = split_part(account, '@', 2))
|
||||
RETURNING id INTO res;
|
||||
RETURN res;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
||||
|
||||
- This is for use with a SELECT update_passwd(%o,%c,%u) query
|
||||
Updates the password only when the old password matches the MD5 password
|
||||
in the database
|
||||
|
||||
CREATE FUNCTION update_password (oldpass text, cryptpass text, user text) RETURNS text
|
||||
MODIFIES SQL DATA
|
||||
BEGIN
|
||||
DECLARE currentsalt varchar(20);
|
||||
DECLARE error text;
|
||||
SET error = 'incorrect current password';
|
||||
SELECT substring_index(substr(user.password,4),_latin1'$',1) INTO currentsalt FROM users WHERE username=user;
|
||||
SELECT '' INTO error FROM users WHERE username=user AND password=ENCRYPT(oldpass,currentsalt);
|
||||
UPDATE users SET password=cryptpass WHERE username=user AND password=ENCRYPT(oldpass,currentsalt);
|
||||
RETURN error;
|
||||
END
|
||||
|
||||
Example SQL UPDATEs:
|
||||
|
||||
- Plain text passwords:
|
||||
UPDATE users SET password=%p WHERE username=%u AND password=%o AND domain=%h LIMIT 1
|
||||
|
||||
- Crypt text passwords:
|
||||
UPDATE users SET password=%c WHERE username=%u LIMIT 1
|
||||
|
||||
- Use a MYSQL crypt function (*nix only) with random 8 character salt
|
||||
UPDATE users SET password=ENCRYPT(%p,concat(_utf8'$1$',right(md5(rand()),8),_utf8'$')) WHERE username=%u LIMIT 1
|
||||
|
||||
- MD5 stored passwords:
|
||||
UPDATE users SET password=MD5(%p) WHERE username=%u AND password=MD5(%o) LIMIT 1
|
||||
|
||||
|
||||
2.2. Cyrus/SASL (sasl)
|
||||
----------------------
|
||||
|
||||
Cyrus SASL database authentication allows your Cyrus+RoundCube
|
||||
installation to host mail users without requiring a Unix Shell account!
|
||||
|
||||
This driver only covers the "sasldb" case when using Cyrus SASL. Kerberos
|
||||
and PAM authentication mechanisms will require other techniques to enable
|
||||
user password manipulations.
|
||||
|
||||
Cyrus SASL includes a shell utility called "saslpasswd" for manipulating
|
||||
user passwords in the "sasldb" database. This plugin attempts to use
|
||||
this utility to perform password manipulations required by your webmail
|
||||
users without any administrative interaction. Unfortunately, this
|
||||
scheme requires that the "saslpasswd" utility be run as the "cyrus"
|
||||
user - kind of a security problem since we have chosen to SUID a small
|
||||
script which will allow this to happen.
|
||||
|
||||
This driver is based on the Squirrelmail Change SASL Password Plugin.
|
||||
See http://www.squirrelmail.org/plugin_view.php?id=107 for details.
|
||||
|
||||
Installation:
|
||||
|
||||
Change into the drivers directory. Edit the chgsaslpasswd.c file as is
|
||||
documented within it.
|
||||
|
||||
Compile the wrapper program:
|
||||
gcc -o chgsaslpasswd chgsaslpasswd.c
|
||||
|
||||
Chown the compiled chgsaslpasswd binary to the cyrus user and group
|
||||
that your browser runs as, then chmod them to 4550.
|
||||
|
||||
For example, if your cyrus user is 'cyrus' and the apache server group is
|
||||
'nobody' (I've been told Redhat runs Apache as user 'apache'):
|
||||
|
||||
chown cyrus:nobody chgsaslpasswd
|
||||
chmod 4550 chgsaslpasswd
|
||||
|
||||
Stephen Carr has suggested users should try to run the scripts on a test
|
||||
account as the cyrus user eg;
|
||||
|
||||
su cyrus -c "./chgsaslpasswd -p test_account"
|
||||
|
||||
This will allow you to make sure that the script will work for your setup.
|
||||
Should the script not work, make sure that:
|
||||
1) the user the script runs as has access to the saslpasswd|saslpasswd2
|
||||
file and proper permissions
|
||||
2) make sure the user in the chgsaslpasswd.c file is set correctly.
|
||||
This could save you some headaches if you are the paranoid type.
|
||||
|
||||
|
||||
2.3. Poppassd/Courierpassd (poppassd)
|
||||
-------------------------------------
|
||||
|
||||
You can specify which host to connect to via 'password_pop_host' and
|
||||
what port via 'password_pop_port'. See config.inc.php file for more info.
|
||||
|
||||
|
||||
2.4. LDAP (ldap)
|
||||
----------------
|
||||
|
||||
See config.inc.php file. Requires PEAR::Net_LDAP2 package.
|
||||
|
||||
|
||||
2.5. DirectAdmin Control Panel
|
||||
-------------------------------------
|
||||
|
||||
You can specify which host to connect to via 'password_directadmin_host'
|
||||
and what port via 'password_direactadmin_port'. See config.inc.php file
|
||||
for more info.
|
||||
|
||||
|
||||
2.6. cPanel
|
||||
-----------
|
||||
|
||||
You can specify parameters for HTTP connection to cPanel's admin
|
||||
interface. See config.inc.php file for more info.
|
||||
|
||||
|
||||
2.7. XIMSS (Communigate)
|
||||
-------------------------------------
|
||||
|
||||
You can specify which host and port to connect to via 'password_ximss_host'
|
||||
and 'password_ximss_port'. See config.inc.php file for more info.
|
||||
|
||||
|
||||
3. Driver API
|
||||
-------------
|
||||
|
||||
Driver file (<driver_name>.php) must define 'password_save' function with
|
||||
two arguments. First - current password, second - new password. Function
|
||||
may return PASSWORD_SUCCESS on success or any of PASSWORD_CONNECT_ERROR,
|
||||
PASSWORD_CRYPT_ERROR, PASSWORD_ERROR when driver was unable to change password.
|
||||
See existing drivers in drivers/ directory for examples.
|
@ -1,191 +0,0 @@
|
||||
<?php
|
||||
|
||||
// Password Plugin options
|
||||
// -----------------------
|
||||
// A driver to use for password change. Default: "sql".
|
||||
// Current possibilities: 'directadmin', 'ldap', 'poppassd', 'sasl', 'sql', 'vpopmaild', 'cpanel'
|
||||
$rcmail_config['password_driver'] = 'sql';
|
||||
|
||||
// Determine whether current password is required to change password.
|
||||
// Default: false.
|
||||
$rcmail_config['password_confirm_current'] = true;
|
||||
|
||||
// Require the new password to be a certain length.
|
||||
// set to blank to allow passwords of any length
|
||||
$rcmail_config['password_minimum_length'] = 0;
|
||||
|
||||
// Require the new password to contain a letter and punctuation character
|
||||
// Change to false to remove this check.
|
||||
$rcmail_config['password_require_nonalpha'] = false;
|
||||
|
||||
|
||||
// SQL Driver options
|
||||
// ------------------
|
||||
// PEAR database DSN for performing the query. By default
|
||||
// Roundcube DB settings are used.
|
||||
$rcmail_config['password_db_dsn'] = '';
|
||||
|
||||
// The SQL query used to change the password.
|
||||
// The query can contain the following macros that will be expanded as follows:
|
||||
// %p is replaced with the plaintext new password
|
||||
// %c is replaced with the crypt version of the new password, MD5 if available
|
||||
// otherwise DES.
|
||||
// %o is replaced with the password before the change
|
||||
// %n is replaced with the hashed version of the new password
|
||||
// %q is replaced with the hashed password before the change
|
||||
// %h is replaced with the imap host (from the session info)
|
||||
// %u is replaced with the username (from the session info)
|
||||
// %l is replaced with the local part of the username
|
||||
// (in case the username is an email address)
|
||||
// %d is replaced with the domain part of the username
|
||||
// (in case the username is an email address)
|
||||
// Escaping of macros is handled by this module.
|
||||
// Default: "SELECT update_passwd(%c, %u)"
|
||||
$rcmail_config['password_query'] = 'SELECT update_passwd(%c, %u)';
|
||||
|
||||
// Using a password hash for %n and %q variables.
|
||||
// Determine which hashing algorithm should be used to generate
|
||||
// the hashed new and current password for using them within the
|
||||
// SQL query. Requires PHP's 'hash' extension.
|
||||
$rcmail_config['password_hash_algorithm'] = 'sha1';
|
||||
|
||||
// You can also decide whether the hash should be provided
|
||||
// as hex string or in base64 encoded format.
|
||||
$rcmail_config['password_hash_base64'] = false;
|
||||
|
||||
|
||||
// Poppassd Driver options
|
||||
// -----------------------
|
||||
// The host which changes the password
|
||||
$rcmail_config['password_pop_host'] = 'localhost';
|
||||
|
||||
// TCP port used for poppassd connections
|
||||
$rcmail_config['password_pop_port'] = 106;
|
||||
|
||||
|
||||
// SASL Driver options
|
||||
// -------------------
|
||||
// Additional arguments for the saslpasswd2 call
|
||||
$rcmail_config['password_saslpasswd_args'] = '';
|
||||
|
||||
|
||||
// LDAP Driver options
|
||||
// -------------------
|
||||
// LDAP server name to connect to.
|
||||
// You can provide one or several hosts in an array in which case the hosts are tried from left to right.
|
||||
// Exemple: array('ldap1.exemple.com', 'ldap2.exemple.com');
|
||||
// Default: 'localhost'
|
||||
$rcmail_config['password_ldap_host'] = 'localhost';
|
||||
|
||||
// LDAP server port to connect to
|
||||
// Default: '389'
|
||||
$rcmail_config['password_ldap_port'] = '389';
|
||||
|
||||
// TLS is started after connecting
|
||||
// Using TLS for password modification is recommanded.
|
||||
// Default: false
|
||||
$rcmail_config['password_ldap_starttls'] = false;
|
||||
|
||||
// LDAP version
|
||||
// Default: '3'
|
||||
$rcmail_config['password_ldap_version'] = '3';
|
||||
|
||||
// LDAP base name (root directory)
|
||||
// Exemple: 'dc=exemple,dc=com'
|
||||
$rcmail_config['password_ldap_basedn'] = 'dc=exemple,dc=com';
|
||||
|
||||
// LDAP connection method
|
||||
// There is two connection method for changing a user's LDAP password.
|
||||
// 'user': use user credential (recommanded, require password_confirm_current=true)
|
||||
// 'admin': use admin credential (this mode require password_ldap_adminDN and password_ldap_adminPW)
|
||||
// Default: 'user'
|
||||
$rcmail_config['password_ldap_method'] = 'user';
|
||||
|
||||
// LDAP Admin DN
|
||||
// Used only in admin connection mode
|
||||
// Default: null
|
||||
$rcmail_config['password_ldap_adminDN'] = null;
|
||||
|
||||
// LDAP Admin Password
|
||||
// Used only in admin connection mode
|
||||
// Default: null
|
||||
$rcmail_config['password_ldap_adminPW'] = null;
|
||||
|
||||
// LDAP user DN mask
|
||||
// The user's DN is mandatory and as we only have his login,
|
||||
// we need to re-create his DN using a mask
|
||||
// '%login' will be replaced by the current roundcube user's login
|
||||
// '%name' will be replaced by the current roundcube user's name part
|
||||
// '%domain' will be replaced by the current roundcube user's domain part
|
||||
// Exemple: 'uid=%login,ou=people,dc=exemple,dc=com'
|
||||
$rcmail_config['password_ldap_userDN_mask'] = 'uid=%login,ou=people,dc=exemple,dc=com';
|
||||
|
||||
// LDAP password hash type
|
||||
// Standard LDAP encryption type which must be one of: crypt,
|
||||
// ext_des, md5crypt, blowfish, md5, sha, smd5, ssha, or clear.
|
||||
// Please note that most encodage types require external libraries
|
||||
// to be included in your PHP installation, see function hashPassword in drivers/ldap.php for more info.
|
||||
// Default: 'crypt'
|
||||
$rcmail_config['password_ldap_encodage'] = 'crypt';
|
||||
|
||||
// LDAP password attribute
|
||||
// Name of the ldap's attribute used for storing user password
|
||||
// Default: 'userPassword'
|
||||
$rcmail_config['password_ldap_pwattr'] = 'userPassword';
|
||||
|
||||
// LDAP password force replace
|
||||
// Force LDAP replace in cases where ACL allows only replace not read
|
||||
// See http://pear.php.net/package/Net_LDAP2/docs/latest/Net_LDAP2/Net_LDAP2_Entry.html#methodreplace
|
||||
// Default: true
|
||||
$rcmail_config['password_ldap_force_replace'] = true;
|
||||
|
||||
|
||||
// DirectAdmin Driver options
|
||||
// --------------------------
|
||||
// The host which changes the password
|
||||
// Use 'ssl://serverip' instead of 'tcp://serverip' when running DirectAdmin over SSL.
|
||||
$rcmail_config['password_directadmin_host'] = 'tcp://localhost';
|
||||
|
||||
// TCP port used for DirectAdmin connections
|
||||
$rcmail_config['password_directadmin_port'] = 2222;
|
||||
|
||||
|
||||
// vpopmaild Driver options
|
||||
// -----------------------
|
||||
// The host which changes the password
|
||||
$rcmail_config['password_vpopmaild_host'] = 'localhost';
|
||||
|
||||
// TCP port used for vpopmaild connections
|
||||
$rcmail_config['password_vpopmaild_port'] = 89;
|
||||
|
||||
|
||||
// cPanel Driver options
|
||||
// --------------------------
|
||||
// The cPanel Host name
|
||||
$rcmail_config['password_cpanel_host'] = 'host.domain.com';
|
||||
|
||||
// The cPanel admin username
|
||||
$rcmail_config['password_cpanel_username'] = 'username';
|
||||
|
||||
// The cPanel admin password
|
||||
$rcmail_config['password_cpanel_password'] = 'password';
|
||||
|
||||
// The cPanel port to use
|
||||
$rcmail_config['password_cpanel_port'] = 2082;
|
||||
|
||||
// Using ssl for cPanel connections?
|
||||
$rcmail_config['password_cpanel_ssl'] = true;
|
||||
|
||||
// The cPanel theme in use
|
||||
$rcmail_config['password_cpanel_theme'] = 'x';
|
||||
|
||||
|
||||
// XIMSS (Communigate server) Driver options
|
||||
// -----------------------------------------
|
||||
// Host name of the Communigate server
|
||||
$rcmail_config['password_ximss_host'] = 'mail.example.com';
|
||||
|
||||
// XIMSS port on Communigate server
|
||||
$rcmail_config['password_ximss_port'] = 11024;
|
||||
|
||||
?>
|
@ -1,29 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
|
||||
// set the UID this script will run as (cyrus user)
|
||||
#define UID 96
|
||||
// set the path to saslpasswd or saslpasswd2
|
||||
#define CMD "/usr/sbin/saslpasswd2"
|
||||
|
||||
/* INSTALLING:
|
||||
gcc -o chgsaslpasswd chgsaslpasswd.c
|
||||
chown cyrus.apache chgsaslpasswd
|
||||
strip chgsaslpasswd
|
||||
chmod 4550 chgsaslpasswd
|
||||
*/
|
||||
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
int rc,cc;
|
||||
|
||||
cc = setuid(UID);
|
||||
rc = execvp(CMD, argv);
|
||||
if ((rc != 0) || (cc != 0))
|
||||
{
|
||||
fprintf(stderr, "__ %s: failed %d %d\n", argv[0], rc, cc);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|