moved plugins

release-0.6
till 15 years ago
parent 0f8ff20ae2
commit 63a3dc5fde

@ -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'] = '封存';
?>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 977 B

Binary file not shown.

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 &copy; 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;
}

Binary file not shown.

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;
?>

File diff suppressed because it is too large Load Diff

@ -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,50 +0,0 @@
<?php
$labels = array();
$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,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,56 +0,0 @@
<?php
// Antonis Kanouras (2009-10-22)
$labels = array();
$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'] = 'Πρόσθετη λίστα email παραληπτών (διαχωρισμένη με κόμματα):';
$labels['vacationdays'] = 'Συχνότητα αποστολής μηνυμάτων (σε ημέρες):';
$labels['vacationreason'] = 'Σώμα μηνύματος (λόγος απουσίας):';
$labels['rulestop'] = 'Παύση επαλήθευσης κανόνων';
$messages = array();
$messages['filterunknownerror'] = 'Άγνωστο σφάλμα διακομιστή';
$messages['filterconnerror'] = 'Αδυναμία σύνδεσης στον διακομιστή managesieve';
$messages['filterdeleteerror'] = 'Αδυναμία διαγραφής φίλτρου. Προέκυψε σφάλμα στον διακομιστή';
$messages['filterdeleted'] = 'Το φίλτρο διαγράφηκε επιτυχώς';
$messages['filterconfirmdelete'] = 'Θέλετε όντως να διαγράψετε το επιλεγμένο φίλτρο;';
$messages['filtersaved'] = 'Το φίλτρο αποθηκεύτηκε επιτυχώς';
$messages['filtersaveerror'] = 'Αδυναμία αποθήκευσης φίλτρου. Προέκυψε σφάλμα στον διακομιστή';
$messages['ruledeleteconfirm'] = 'Θέλετε όντως να διαγράψετε τον επιλεγμένο κανόνα;';
$messages['actiondeleteconfirm'] = 'Θέλετε όντως να διαγράψετε την επιλεγμένη ενέργεια;';
$messages['forbiddenchars'] = 'Μη επιτρεπτοί χαρακτήρες στο πεδίο';
$messages['cannotbeempty'] = 'Το πεδίο δεν μπορεί να είναι κενό';
?>

@ -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,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'] = 'Невозможно подсоединится к серверу фильтров';
$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'] = '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,54 +0,0 @@
<?php
$labels = array();
$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['filterdeleteconfirm'] = 'Ви дійсно хочете видалити вибраний фільтр?';
$messages['filtersaved'] = 'Фільтр успішно збережено.';
$messages['filtersaveerror'] = 'Неможливо зберегти фільтр. Помилка сервера.';
$messages['ruledeleteconfirm'] = 'Ви дійсно хочете видалити вибране правило?';
$messages['actiondeleteconfirm'] = 'Ви дійсно хочете видалити вибрану дію?';
$messages['forbiddenchars'] = 'Введено заборонений символ.';
$messages['cannotbeempty'] = 'Поле не може бути пустим.';
?>

@ -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);
};
}

File diff suppressed because it is too large Load Diff

@ -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;
}

Binary file not shown.

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();
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

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;
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save