2 commits - lib/kolab_sync_backend.php lib/kolab_sync_data.php lib/plugins
Aleksander Machniak
machniak at kolabsys.com
Wed Feb 4 18:58:49 CET 2015
lib/kolab_sync_backend.php | 9
lib/kolab_sync_data.php | 38 -
lib/plugins/kolab_auth/composer.json | 30 +
lib/plugins/kolab_auth/config.inc.php.dist | 55 +-
lib/plugins/kolab_auth/kolab_auth.php | 166 +++++--
lib/plugins/kolab_auth/kolab_auth_ldap.php | 12
lib/plugins/kolab_auth/localization/de_CH.inc | 7
lib/plugins/kolab_auth/localization/de_DE.inc | 8
lib/plugins/kolab_auth/localization/en_US.inc | 1
lib/plugins/kolab_auth/localization/fr_FR.inc | 8
lib/plugins/kolab_auth/localization/ja_JP.inc | 7
lib/plugins/kolab_auth/localization/nl_NL.inc | 7
lib/plugins/kolab_auth/localization/pl_PL.inc | 7
lib/plugins/kolab_auth/localization/ru_RU.inc | 8
lib/plugins/kolab_auth/package.xml | 63 --
lib/plugins/kolab_folders/composer.json | 26 +
lib/plugins/kolab_folders/config.inc.php.dist | 30 -
lib/plugins/kolab_folders/kolab_folders.js | 40 -
lib/plugins/kolab_folders/kolab_folders.php | 41 +
lib/plugins/kolab_folders/localization/de_CH.inc | 8
lib/plugins/kolab_folders/localization/de_DE.inc | 8
lib/plugins/kolab_folders/localization/en_US.inc | 1
lib/plugins/kolab_folders/localization/es_ES.inc | 21
lib/plugins/kolab_folders/localization/et_EE.inc | 25 +
lib/plugins/kolab_folders/localization/fr_FR.inc | 8
lib/plugins/kolab_folders/localization/ja_JP.inc | 8
lib/plugins/kolab_folders/localization/nl_NL.inc | 8
lib/plugins/kolab_folders/localization/pl_PL.inc | 8
lib/plugins/kolab_folders/localization/ru_RU.inc | 8
lib/plugins/kolab_folders/package.xml | 63 --
lib/plugins/libkolab/SQL/mysql.initial.sql | 18
lib/plugins/libkolab/SQL/mysql/2014112700.sql | 2
lib/plugins/libkolab/SQL/mysql/2015011600.sql | 8
lib/plugins/libkolab/SQL/oracle.initial.sql | 184 +++++++
lib/plugins/libkolab/SQL/oracle/2015011600.sql | 40 +
lib/plugins/libkolab/bin/readcache.sh | 150 ++++++
lib/plugins/libkolab/composer.json | 2
lib/plugins/libkolab/config.inc.php.dist | 27 -
lib/plugins/libkolab/js/folderlist.js | 104 ++++
lib/plugins/libkolab/lib/kolab_bonnie_api.php | 2
lib/plugins/libkolab/lib/kolab_format.php | 126 +++++
lib/plugins/libkolab/lib/kolab_format_configuration.php | 56 +-
lib/plugins/libkolab/lib/kolab_format_event.php | 12
lib/plugins/libkolab/lib/kolab_format_xcal.php | 11
lib/plugins/libkolab/lib/kolab_storage.php | 85 ++-
lib/plugins/libkolab/lib/kolab_storage_cache.php | 233 +++++++---
lib/plugins/libkolab/lib/kolab_storage_cache_configuration.php | 22
lib/plugins/libkolab/lib/kolab_storage_config.php | 185 +++++++
lib/plugins/libkolab/lib/kolab_storage_folder.php | 138 +++++
lib/plugins/libkolab/lib/kolab_storage_folder_api.php | 37 +
lib/plugins/libkolab/lib/kolab_storage_folder_user.php | 34 +
lib/plugins/libkolab/package.xml | 101 ----
lib/plugins/managesieve/Changelog | 11
lib/plugins/managesieve/composer.json | 4
lib/plugins/managesieve/config.inc.php.dist | 2
lib/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php | 103 ++--
lib/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php | 18
lib/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php | 222 +++++++--
lib/plugins/managesieve/localization/ar_SA.inc | 155 ++++++
lib/plugins/managesieve/localization/az_AZ.inc | 8
lib/plugins/managesieve/localization/be_BE.inc | 8
lib/plugins/managesieve/localization/bg_BG.inc | 29 -
lib/plugins/managesieve/localization/bs_BA.inc | 5
lib/plugins/managesieve/localization/ca_ES.inc | 46 +
lib/plugins/managesieve/localization/cs_CZ.inc | 40 +
lib/plugins/managesieve/localization/cy_GB.inc | 44 +
lib/plugins/managesieve/localization/da_DK.inc | 25 -
lib/plugins/managesieve/localization/de_CH.inc | 44 +
lib/plugins/managesieve/localization/de_DE.inc | 44 +
lib/plugins/managesieve/localization/el_GR.inc | 55 ++
lib/plugins/managesieve/localization/en_CA.inc | 29 -
lib/plugins/managesieve/localization/en_GB.inc | 44 +
lib/plugins/managesieve/localization/en_US.inc | 5
lib/plugins/managesieve/localization/es_419.inc | 5
lib/plugins/managesieve/localization/es_AR.inc | 5
lib/plugins/managesieve/localization/es_ES.inc | 44 +
lib/plugins/managesieve/localization/et_EE.inc | 8
lib/plugins/managesieve/localization/eu_ES.inc | 54 +-
lib/plugins/managesieve/localization/fa_IR.inc | 124 +++--
lib/plugins/managesieve/localization/fi_FI.inc | 79 +++
lib/plugins/managesieve/localization/fr_FR.inc | 184 ++++---
lib/plugins/managesieve/localization/gl_ES.inc | 26 -
lib/plugins/managesieve/localization/he_IL.inc | 44 +
lib/plugins/managesieve/localization/hr_HR.inc | 14
lib/plugins/managesieve/localization/hu_HU.inc | 44 +
lib/plugins/managesieve/localization/id_ID.inc | 3
lib/plugins/managesieve/localization/it_IT.inc | 44 +
lib/plugins/managesieve/localization/ja_JP.inc | 34 +
lib/plugins/managesieve/localization/km_KH.inc | 9
lib/plugins/managesieve/localization/ko_KR.inc | 108 +++-
lib/plugins/managesieve/localization/lt_LT.inc | 52 +-
lib/plugins/managesieve/localization/lv_LV.inc | 8
lib/plugins/managesieve/localization/nb_NO.inc | 19
lib/plugins/managesieve/localization/nl_NL.inc | 44 +
lib/plugins/managesieve/localization/pl_PL.inc | 44 +
lib/plugins/managesieve/localization/pt_BR.inc | 44 +
lib/plugins/managesieve/localization/pt_PT.inc | 44 +
lib/plugins/managesieve/localization/ro_RO.inc | 33 +
lib/plugins/managesieve/localization/ru_RU.inc | 5
lib/plugins/managesieve/localization/sk_SK.inc | 44 +
lib/plugins/managesieve/localization/sl_SI.inc | 8
lib/plugins/managesieve/localization/sv_SE.inc | 48 +-
lib/plugins/managesieve/localization/tr_TR.inc | 50 +-
lib/plugins/managesieve/localization/uk_UA.inc | 8
lib/plugins/managesieve/localization/vi_VN.inc | 29 -
lib/plugins/managesieve/localization/zh_CN.inc | 8
lib/plugins/managesieve/managesieve.js | 5
lib/plugins/managesieve/managesieve.php | 19
lib/plugins/managesieve/package.xml | 128 -----
lib/plugins/managesieve/skins/larry/managesieve.css | 11
lib/plugins/managesieve/tests/Managesieve.php | 2
lib/plugins/managesieve/tests/Parser.php | 4
lib/plugins/managesieve/tests/Tokenizer.php | 2
lib/plugins/managesieve/tests/Vacation.php | 4
114 files changed, 3504 insertions(+), 1235 deletions(-)
New commits:
commit 9ec1afd0a0c349a8a2c782f79ba97a84d3bcaeeb
Author: Aleksander Machniak <machniak at kolabsys.com>
Date: Wed Feb 4 12:00:44 2015 -0500
Handle kolab_storage errors correctly (#4418)
As we already found out (in #4378) kolab_storage did't prevent from sql errors
if some imap connection error happened. This is already fixed, however
syncroton need to use 'valid' flag implemented in kolab_storage_folder
to pass correct error codes to activesync client and to prevent from more issues.
diff --git a/lib/kolab_sync_backend.php b/lib/kolab_sync_backend.php
index 56a411d..a1c24a8 100644
--- a/lib/kolab_sync_backend.php
+++ b/lib/kolab_sync_backend.php
@@ -790,7 +790,7 @@ class kolab_sync_backend
// get all folders of specified type
$folderdata = $this->folder_meta();
- if (!is_array($folderdata)) {
+ if (!is_array($folderdata) || $id === null) {
return null;
}
@@ -802,10 +802,11 @@ class kolab_sync_backend
continue;
}
- $uid = self::folder_id($folder);
- $this->folder_uids[$folder] = $uid;
+ if ($uid = self::folder_id($folder)) {
+ $this->folder_uids[$folder] = $uid;
+ }
- if ($uid == $id) {
+ if ($uid === $id) {
$name = $folder;
}
}
diff --git a/lib/kolab_sync_data.php b/lib/kolab_sync_data.php
index 59bff31..ba09dd9 100644
--- a/lib/kolab_sync_data.php
+++ b/lib/kolab_sync_data.php
@@ -377,13 +377,12 @@ abstract class kolab_sync_data implements Syncroton_Data_IData
foreach ($folders as $folderid) {
$foldername = $this->backend->folder_id2name($folderid, $this->device->deviceid);
+ $folder = $this->getFolderObject($foldername);
- if ($foldername === null) {
- continue;
+ if (!$folder || !$folder->valid) {
+ throw new Syncroton_Exception_Status_ItemOperations(Syncroton_Exception_Status_ItemOperations::ITEM_SERVER_ERROR);
}
- $folder = $this->getFolderObject($foldername);
-
// Remove all entries
$folder->delete_all();
@@ -392,13 +391,12 @@ abstract class kolab_sync_data implements Syncroton_Data_IData
$list = $this->listFolders($folderid);
foreach ($list as $folderid => $folder) {
$foldername = $this->backend->folder_id2name($folderid, $this->device->deviceid);
+ $folder = $this->getFolderObject($foldername);
- if ($foldername === null) {
- continue;
+ if (!$folder || !$folder->valid) {
+ throw new Syncroton_Exception_Status_ItemOperations(Syncroton_Exception_Status_ItemOperations::ITEM_SERVER_ERROR);
}
- $folder = $this->getFolderObject($foldername);
-
// Remove all entries
$folder->delete_all();
}
@@ -545,9 +543,10 @@ abstract class kolab_sync_data implements Syncroton_Data_IData
foreach ($folders as $folder_id) {
$foldername = $this->backend->folder_id2name($folder_id, $this->device->deviceid);
+ $folder = $this->getFolderObject($foldername);
- if ($foldername === null || !($folder = $this->getFolderObject($foldername))) {
- continue;
+ if (!$folder || !$folder->valid) {
+ throw new Syncroton_Exception_Status(Syncroton_Exception_Status::SERVER_ERROR);
}
$found++;
@@ -911,14 +910,9 @@ abstract class kolab_sync_data implements Syncroton_Data_IData
foreach ($folders as $folderid) {
$foldername = $this->backend->folder_id2name($folderid, $this->device->deviceid);
+ $folder = $this->getFolderObject($foldername);
- if ($foldername === null) {
- continue;
- }
-
- $folder = $this->getFolderObject($foldername);
-
- if ($folder && ($object = $folder->get_object($entryid))) {
+ if ($folder && $folder->valid && ($object = $folder->get_object($entryid))) {
$object['_folderid'] = $folderid;
return $object;
@@ -950,7 +944,7 @@ abstract class kolab_sync_data implements Syncroton_Data_IData
$foldername = $this->backend->folder_id2name($folderid, $this->device->deviceid);
$folder = $this->getFolderObject($foldername);
- if ($folder && $folder->save($data)) {
+ if ($folder && $folder->valid && $folder->save($data)) {
if (!empty($tags)) {
$this->setKolabTags($data['uid'], $tags);
}
@@ -975,7 +969,7 @@ abstract class kolab_sync_data implements Syncroton_Data_IData
unset($data['categories']);
}
- if ($folder && $folder->save($data)) {
+ if ($folder && $folder->valid && $folder->save($data)) {
if (isset($tags)) {
$this->setKolabTags($data['uid'], $tags);
}
@@ -995,7 +989,7 @@ abstract class kolab_sync_data implements Syncroton_Data_IData
if ($object) {
$folder = $this->getFolderObject($object['_mailbox']);
- if ($folder && $folder->delete($entryid)) {
+ if ($folder && $folder->valid && $folder->delete($entryid)) {
if ($this->tag_categories) {
$this->setKolabTags($object['uid'], null);
}
@@ -1078,12 +1072,12 @@ abstract class kolab_sync_data implements Syncroton_Data_IData
*/
protected function getFolderObject($name)
{
- if ($name === null) {
+ if ($name === null || $name === '') {
return null;
}
if (!isset($this->folders[$name])) {
- $this->folders[$name] = kolab_storage::get_folder($name);
+ $this->folders[$name] = kolab_storage::get_folder($name, $this->modelName);
}
return $this->folders[$name];
commit e74dd441e5c64ea4dcd2db83f39b56f9ec1d1bfa
Author: Aleksander Machniak <machniak at kolabsys.com>
Date: Wed Feb 4 09:06:59 2015 -0500
Update kolab plugins and managesieve plugin
diff --git a/lib/plugins/kolab_auth/composer.json b/lib/plugins/kolab_auth/composer.json
new file mode 100644
index 0000000..3e7012f
--- /dev/null
+++ b/lib/plugins/kolab_auth/composer.json
@@ -0,0 +1,30 @@
+{
+ "name": "kolab/kolab_auth",
+ "type": "roundcube-plugin",
+ "description": "Kolab authentication",
+ "homepage": "http://git.kolab.org/roundcubemail-plugins-kolab/",
+ "license": "AGPLv3",
+ "version": "3.2.2",
+ "authors": [
+ {
+ "name": "Thomas Bruederli",
+ "email": "bruederli at kolabsys.com",
+ "role": "Lead"
+ },
+ {
+ "name": "Aleksander Machniak",
+ "email": "machniak at kolabsys.com",
+ "role": "Lead"
+ }
+ ],
+ "repositories": [
+ {
+ "type": "composer",
+ "url": "http://plugins.roundcube.net"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.0",
+ "roundcube/plugin-installer": ">=0.1.3"
+ }
+}
diff --git a/lib/plugins/kolab_auth/config.inc.php.dist b/lib/plugins/kolab_auth/config.inc.php.dist
index 785fb78..8c01d56 100644
--- a/lib/plugins/kolab_auth/config.inc.php.dist
+++ b/lib/plugins/kolab_auth/config.inc.php.dist
@@ -13,48 +13,55 @@
// With this %dc variable in base_dn and groups/base_dn will be
// replaced with DN string of resolved domain
//---------------------------------------------------------------------
-$rcmail_config['kolab_auth_addressbook'] = '';
+$config['kolab_auth_addressbook'] = '';
// This will overwrite defined filter
-$rcmail_config['kolab_auth_filter'] = '(&(objectClass=kolabInetOrgPerson)(|(uid=%u)(mail=%fu)(alias=%fu)))';
+$config['kolab_auth_filter'] = '(&(objectClass=kolabInetOrgPerson)(|(uid=%u)(mail=%fu)(alias=%fu)))';
-// Use this fields (from fieldmap configuration) to get authentication ID
-$rcmail_config['kolab_auth_login'] = 'email';
+// Use this field (from fieldmap configuration) to get authentication ID. Don't use an array here!
+$config['kolab_auth_login'] = 'email';
-// Use this fields (from fieldmap configuration) for default identity.
+// Use these fields (from fieldmap configuration) for default identity.
// If the value array contains more than one field, first non-empty will be used
// Note: These aren't LDAP attributes, but field names in config
// Note: If there's more than one email address, as many identities will be created
-$rcmail_config['kolab_auth_name'] = array('name', 'cn');
-$rcmail_config['kolab_auth_email'] = array('email');
-$rcmail_config['kolab_auth_organization'] = array('organization');
+$config['kolab_auth_name'] = array('name', 'cn');
+$config['kolab_auth_email'] = array('email');
+$config['kolab_auth_organization'] = array('organization');
+
+// Role field (from fieldmap configuration)
+$config['kolab_auth_role'] = 'role';
// Template for user names displayed in the UI.
// You can use all attributes from the 'fieldmap' property of the 'kolab_auth_addressbook' configuration
-$rcmail_config['kolab_auth_user_displayname'] = '{name} ({ou})';
+$config['kolab_auth_user_displayname'] = '{name} ({ou})';
// Login and password of the admin user. Enables "Login As" feature.
-$rcmail_config['kolab_auth_admin_login'] = '';
-$rcmail_config['kolab_auth_admin_password'] = '';
+$config['kolab_auth_admin_login'] = '';
+$config['kolab_auth_admin_password'] = '';
// Enable audit logging for abuse of administrative privileges.
-$rcmail_config['kolab_auth_auditlog'] = false;
-
-// Role field (from fieldmap configuration)
-$rcmail_config['kolab_auth_role'] = 'role';
-// The required value for the role attribute to contain should the user be allowed
-// to login as another user.
-$rcmail_config['kolab_auth_role_value'] = '';
+$config['kolab_auth_auditlog'] = false;
-// Administrative group name to which user must be assigned to
-// which adds privilege to login as another user.
-$rcmail_config['kolab_auth_group'] = '';
+// As set of rules to define the required rights on the target entry
+// which allow an admin user to login as another user (the target).
+// The effective rights value refers to either entry level attribute level rights:
+// * entry:[read|add|delete]
+// * attrib:<attribute-name>:[read|write|delete]
+$config['kolab_auth_admin_rights'] = array(
+ // Roundcube task => required effective right
+ 'settings' => 'entry:read',
+ 'mail' => 'entry:delete',
+ 'addressbook' => 'entry:delete',
+ // or use a wildcard entry like this:
+ '*' => 'entry:read',
+);
// Enable plugins on a role-by-role basis. In this example, the 'acl' plugin
// is enabled for people with a 'cn=professional-user,dc=mykolab,dc=ch' role.
//
// Note that this does NOT mean the 'acl' plugin is disabled for other people.
-$rcmail_config['kolab_auth_role_plugins'] = Array(
+$config['kolab_auth_role_plugins'] = Array(
'cn=professional-user,dc=mykolab,dc=ch' => Array(
'acl',
),
@@ -66,7 +73,7 @@ $rcmail_config['kolab_auth_role_plugins'] = Array(
// do not allow the setting to be controlled through the preferences, enable the
// html editor for professional users and allow them to override the setting in
// the preferences.
-$rcmail_config['kolab_auth_role_settings'] = Array(
+$config['kolab_auth_role_settings'] = Array(
'cn=professional-user,dc=mykolab,dc=ch' => Array(
'htmleditor' => Array(
'mode' => 'override',
@@ -79,6 +86,6 @@ $rcmail_config['kolab_auth_role_settings'] = Array(
// List of LDAP addressbooks (keys of ldap_public configuration array)
// for which base_dn variables (%dc, etc.) will be replaced according to authenticated user DN
// Note: special name '*' for all LDAP addressbooks
-$rcmail_config['kolab_auth_ldap_addressbooks'] = array('*');
+$config['kolab_auth_ldap_addressbooks'] = array('*');
?>
diff --git a/lib/plugins/kolab_auth/kolab_auth.php b/lib/plugins/kolab_auth/kolab_auth.php
index 2b685a7..033d5b1 100644
--- a/lib/plugins/kolab_auth/kolab_auth.php
+++ b/lib/plugins/kolab_auth/kolab_auth.php
@@ -83,8 +83,30 @@ class kolab_auth extends rcube_plugin
}
}
+ /**
+ * Startup hook handler
+ */
public function startup($args)
{
+ // Check access rights when logged in as another user
+ if (!empty($_SESSION['kolab_auth_admin']) && $args['task'] != 'login' && $args['task'] != 'logout') {
+ // access to specified task is forbidden,
+ // redirect to the first task on the list
+ if (!empty($_SESSION['kolab_auth_allowed_tasks'])) {
+ $tasks = (array)$_SESSION['kolab_auth_allowed_tasks'];
+ if (!in_array($args['task'], $tasks) && !in_array('*', $tasks)) {
+ header('Location: ?_task=' . array_shift($tasks));
+ die;
+ }
+
+ // add script that will remove disabled taskbar buttons
+ if (!in_array('*', $tasks)) {
+ $this->add_hook('render_page', array($this, 'render_page'));
+ }
+ }
+ }
+
+ // load per-user settings
$this->load_user_role_plugins_and_settings();
return $args;
@@ -103,21 +125,36 @@ class kolab_auth extends rcube_plugin
foreach ($args['result'] as $name => $config) {
if (in_array($name, $kolab_books) || in_array('*', $kolab_books)) {
- $args['result'][$name]['base_dn'] = self::parse_ldap_vars($config['base_dn']);
- $args['result'][$name]['search_base_dn'] = self::parse_ldap_vars($config['search_base_dn']);
- $args['result'][$name]['bind_dn'] = str_replace('%dn', $_SESSION['kolab_dn'], $config['bind_dn']);
-
- if (!empty($config['groups'])) {
- $args['result'][$name]['groups']['base_dn'] = self::parse_ldap_vars($config['groups']['base_dn']);
- }
+ $args['result'][$name] = $this->patch_ldap_config($config);
}
}
}
+ else if ($args['name'] == 'kolab_users_directory' && !empty($args['result'])) {
+ $args['result'] = $this->patch_ldap_config($args['result']);
+ }
return $args;
}
/**
+ * Helper method to patch the given LDAP directory config with user-specific values
+ */
+ protected function patch_ldap_config($config)
+ {
+ if (is_array($config)) {
+ $config['base_dn'] = self::parse_ldap_vars($config['base_dn']);
+ $config['search_base_dn'] = self::parse_ldap_vars($config['search_base_dn']);
+ $config['bind_dn'] = str_replace('%dn', $_SESSION['kolab_dn'], $config['bind_dn']);
+
+ if (!empty($config['groups'])) {
+ $config['groups']['base_dn'] = self::parse_ldap_vars($config['groups']['base_dn']);
+ }
+ }
+
+ return $config;
+ }
+
+ /**
* Modifies list of plugins and settings according to
* specified LDAP roles
*/
@@ -429,24 +466,69 @@ class kolab_auth extends rcube_plugin
return $args;
}
- // check if the original user has/belongs to administrative role/group
$isadmin = false;
- $group = $rcmail->config->get('kolab_auth_group');
- $role_dn = $rcmail->config->get('kolab_auth_role_value');
-
- // check role attribute
- if (!empty($role_attr) && !empty($role_dn) && !empty($record[$role_attr])) {
- $role_dn = $ldap->parse_vars($role_dn, $user, $host);
- if (in_array($role_dn, (array)$record[$role_attr])) {
- $isadmin = true;
+ $admin_rights = $rcmail->config->get('kolab_auth_admin_rights', array());
+
+ // @deprecated: fall-back to the old check if the original user has/belongs to administrative role/group
+ if (empty($admin_rights)) {
+ $group = $rcmail->config->get('kolab_auth_group');
+ $role_dn = $rcmail->config->get('kolab_auth_role_value');
+
+ // check role attribute
+ if (!empty($role_attr) && !empty($role_dn) && !empty($record[$role_attr])) {
+ $role_dn = $ldap->parse_vars($role_dn, $user, $host);
+ if (in_array($role_dn, (array)$record[$role_attr])) {
+ $isadmin = true;
+ }
+ }
+
+ // check group
+ if (!$isadmin && !empty($group)) {
+ $groups = $ldap->get_user_groups($record['dn'], $user, $host);
+ if (in_array($group, $groups)) {
+ $isadmin = true;
+ }
+ }
+
+ if ($isadmin) {
+ // user has admin privileges privilage, get "login as" user credentials
+ $target_entry = $ldap->get_user_record($loginas, $host);
+ $allowed_tasks = $rcmail->config->get('kolab_auth_allowed_tasks');
}
}
+ else {
+ // get "login as" user credentials
+ $target_entry = $ldap->get_user_record($loginas, $host);
+
+ if (!empty($target_entry)) {
+ // get effective rights to determine login-as permissions
+ $effective_rights = (array)$ldap->effective_rights($target_entry['dn']);
+
+ if (!empty($effective_rights)) {
+ $effective_rights['attrib'] = $effective_rights['attributeLevelRights'];
+ $effective_rights['entry'] = $effective_rights['entryLevelRights'];
+
+ // compare the rights with the permissions mapping
+ $allowed_tasks = array();
+ foreach ($admin_rights as $task => $perms) {
+ $perms_ = explode(':', $perms);
+ $type = array_shift($perms_);
+ $req = array_pop($perms_);
+ $attrib = array_pop($perms_);
+
+ if (array_key_exists($type, $effective_rights)) {
+ if ($type == 'entry' && in_array($req, $effective_rights[$type])) {
+ $allowed_tasks[] = $task;
+ }
+ else if ($type == 'attrib' && array_key_exists($attrib, $effective_rights[$type]) &&
+ in_array($req, $effective_rights[$type][$attrib])) {
+ $allowed_tasks[] = $task;
+ }
+ }
+ }
- // check group
- if (!$isadmin && !empty($group)) {
- $groups = $ldap->get_user_groups($record['dn'], $user, $host);
- if (in_array($group, $groups)) {
- $isadmin = true;
+ $isadmin = !empty($allowed_tasks);
+ }
}
}
@@ -458,22 +540,22 @@ class kolab_auth extends rcube_plugin
$origname = $user;
}
- $record = null;
-
- // user has the privilage, get "login as" user credentials
- if ($isadmin) {
- $record = $ldap->get_user_record($loginas, $host);
- }
+ if (!$isadmin || empty($target_entry)) {
+ $this->add_texts('localization/');
- if (empty($record)) {
$args['abort'] = true;
+ $args['error'] = $this->gettext(array(
+ 'name' => 'loginasnotallowed',
+ 'vars' => array('user' => Q($loginas)),
+ ));
+
$message = sprintf(
'Login failure for user %s (as user %s) from %s in session %s (error %s)',
$user,
$loginas,
rcube_utils::remote_ip(),
session_id(),
- "No user record found for '" . $loginas . "'"
+ "No privileges to login as '" . $loginas . "'"
);
rcube::write_log('userlogins', $message);
@@ -481,12 +563,16 @@ class kolab_auth extends rcube_plugin
return $args;
}
+ // replace $record with target entry
+ $record = $target_entry;
+
$args['user'] = $this->username = $loginas;
// Mark session to use SASL proxy for IMAP authentication
$_SESSION['kolab_auth_admin'] = strtolower($origname);
$_SESSION['kolab_auth_login'] = $rcmail->encrypt($admin_login);
$_SESSION['kolab_auth_password'] = $rcmail->encrypt($admin_pass);
+ $_SESSION['kolab_auth_allowed_tasks'] = $allowed_tasks;
}
// Store UID and DN of logged user in session for use by other plugins
@@ -634,6 +720,28 @@ class kolab_auth extends rcube_plugin
}
/**
+ * Action executed before the page is rendered to add an onload script
+ * that will remove all taskbar buttons for disabled tasks
+ */
+ public function render_page($args)
+ {
+ $rcmail = rcube::get_instance();
+ $tasks = (array)$_SESSION['kolab_auth_allowed_tasks'];
+ $tasks[] = 'logout';
+
+ // disable buttons in taskbar
+ $script = "
+ \$('a').filter(function() {
+ var ev = \$(this).attr('onclick');
+ return ev && ev.match(/'switch-task','([a-z]+)'/)
+ && \$.inArray(RegExp.\$1, " . json_encode($tasks) . ") < 0;
+ }).remove();
+ ";
+
+ $rcmail->output->add_script($script, 'docready');
+ }
+
+ /**
* Initializes LDAP object and connects to LDAP server
*/
public static function ldap()
diff --git a/lib/plugins/kolab_auth/kolab_auth_ldap.php b/lib/plugins/kolab_auth/kolab_auth_ldap.php
index 303bbf3..431133b 100644
--- a/lib/plugins/kolab_auth/kolab_auth_ldap.php
+++ b/lib/plugins/kolab_auth/kolab_auth_ldap.php
@@ -57,8 +57,6 @@ class kolab_auth_ldap extends rcube_ldap_generic
*/
private function _connect()
{
- $rcube = rcube::get_instance();
-
// try to connect + bind for every host configured
// with OpenLDAP 2.x ldap_connect() always succeeds but ldap_bind will fail if host isn't reachable
// see http://www.php.net/manual/en/function.ldap-connect.php
@@ -157,11 +155,10 @@ class kolab_auth_ldap extends rcube_ldap_generic
$groups = array();
foreach ($result as $entry) {
+ $dn = $entry['dn'];
$entry = rcube_ldap_generic::normalize_entry($entry);
- if (!$entry['dn']) {
- $entry['dn'] = key($result->entries(true));
- }
- $groups[$entry['dn']] = $entry[$name_attr];
+
+ $groups[$dn] = $entry[$name_attr];
}
return $groups;
@@ -310,7 +307,8 @@ class kolab_auth_ldap extends rcube_ldap_generic
if ($limit && $limit <= $i) {
break;
}
- $dn = key($result->entries(true));
+
+ $dn = $entry['dn'];
$entry = rcube_ldap_generic::normalize_entry($entry);
$list[$dn] = $this->field_mapping($dn, $entry);
$i++;
diff --git a/lib/plugins/kolab_auth/localization/de_CH.inc b/lib/plugins/kolab_auth/localization/de_CH.inc
index 5e85a01..0332070 100644
--- a/lib/plugins/kolab_auth/localization/de_CH.inc
+++ b/lib/plugins/kolab_auth/localization/de_CH.inc
@@ -1,3 +1,10 @@
<?php
+/**
+ * Localizations for the Kolab Auth plugin
+ *
+ * Copyright (C) 2014, Kolab Systems AG
+ *
+ * For translation see https://www.transifex.com/projects/p/kolab/resource/kolab_auth/
+ */
$labels['loginas'] = 'Anmelden als';
?>
diff --git a/lib/plugins/kolab_auth/localization/de_DE.inc b/lib/plugins/kolab_auth/localization/de_DE.inc
index 5e85a01..3918e6e 100644
--- a/lib/plugins/kolab_auth/localization/de_DE.inc
+++ b/lib/plugins/kolab_auth/localization/de_DE.inc
@@ -1,3 +1,11 @@
<?php
+/**
+ * Localizations for the Kolab Auth plugin
+ *
+ * Copyright (C) 2014, Kolab Systems AG
+ *
+ * For translation see https://www.transifex.com/projects/p/kolab/resource/kolab_auth/
+ */
$labels['loginas'] = 'Anmelden als';
+$labels['loginasnotallowed'] = 'Keine Privilegien zum Anmelden als $user';
?>
diff --git a/lib/plugins/kolab_auth/localization/en_US.inc b/lib/plugins/kolab_auth/localization/en_US.inc
index 2a7b246..4882bdc 100644
--- a/lib/plugins/kolab_auth/localization/en_US.inc
+++ b/lib/plugins/kolab_auth/localization/en_US.inc
@@ -9,5 +9,6 @@
*/
$labels['loginas'] = 'Login As';
+$labels['loginasnotallowed'] = 'No privileges to login as $user';
?>
diff --git a/lib/plugins/kolab_auth/localization/fr_FR.inc b/lib/plugins/kolab_auth/localization/fr_FR.inc
index 6f72695..6538f5b 100644
--- a/lib/plugins/kolab_auth/localization/fr_FR.inc
+++ b/lib/plugins/kolab_auth/localization/fr_FR.inc
@@ -1,3 +1,11 @@
<?php
+/**
+ * Localizations for the Kolab Auth plugin
+ *
+ * Copyright (C) 2014, Kolab Systems AG
+ *
+ * For translation see https://www.transifex.com/projects/p/kolab/resource/kolab_auth/
+ */
$labels['loginas'] = 'Se connecter en tant que';
+$labels['loginasnotallowed'] = 'Pas de privilège de se connecter comme $utilisateur';
?>
diff --git a/lib/plugins/kolab_auth/localization/ja_JP.inc b/lib/plugins/kolab_auth/localization/ja_JP.inc
index ed0358a..e360737 100644
--- a/lib/plugins/kolab_auth/localization/ja_JP.inc
+++ b/lib/plugins/kolab_auth/localization/ja_JP.inc
@@ -1,3 +1,10 @@
<?php
+/**
+ * Localizations for the Kolab Auth plugin
+ *
+ * Copyright (C) 2014, Kolab Systems AG
+ *
+ * For translation see https://www.transifex.com/projects/p/kolab/resource/kolab_auth/
+ */
$labels['loginas'] = 'ãã°ã¤ã³';
?>
diff --git a/lib/plugins/kolab_auth/localization/nl_NL.inc b/lib/plugins/kolab_auth/localization/nl_NL.inc
index a98283f..ea3a1c0 100644
--- a/lib/plugins/kolab_auth/localization/nl_NL.inc
+++ b/lib/plugins/kolab_auth/localization/nl_NL.inc
@@ -1,3 +1,10 @@
<?php
+/**
+ * Localizations for the Kolab Auth plugin
+ *
+ * Copyright (C) 2014, Kolab Systems AG
+ *
+ * For translation see https://www.transifex.com/projects/p/kolab/resource/kolab_auth/
+ */
$labels['loginas'] = 'Log in als';
?>
diff --git a/lib/plugins/kolab_auth/localization/pl_PL.inc b/lib/plugins/kolab_auth/localization/pl_PL.inc
index 124c373..ca67859 100644
--- a/lib/plugins/kolab_auth/localization/pl_PL.inc
+++ b/lib/plugins/kolab_auth/localization/pl_PL.inc
@@ -1,3 +1,10 @@
<?php
+/**
+ * Localizations for the Kolab Auth plugin
+ *
+ * Copyright (C) 2014, Kolab Systems AG
+ *
+ * For translation see https://www.transifex.com/projects/p/kolab/resource/kolab_auth/
+ */
$labels['loginas'] = 'Zaloguj jako';
?>
diff --git a/lib/plugins/kolab_auth/localization/ru_RU.inc b/lib/plugins/kolab_auth/localization/ru_RU.inc
index 9e28c12..ac9e5a7 100644
--- a/lib/plugins/kolab_auth/localization/ru_RU.inc
+++ b/lib/plugins/kolab_auth/localization/ru_RU.inc
@@ -1,3 +1,11 @@
<?php
+/**
+ * Localizations for the Kolab Auth plugin
+ *
+ * Copyright (C) 2014, Kolab Systems AG
+ *
+ * For translation see https://www.transifex.com/projects/p/kolab/resource/kolab_auth/
+ */
$labels['loginas'] = 'ÐойÑи как';
+$labels['loginasnotallowed'] = 'ÐÐµÑ Ð¿Ñивилегий войÑи как $user';
?>
diff --git a/lib/plugins/kolab_auth/package.xml b/lib/plugins/kolab_auth/package.xml
deleted file mode 100644
index 5a2093b..0000000
--- a/lib/plugins/kolab_auth/package.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<package 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" packagerversion="1.9.0" version="2.0" 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>kolab_auth</name>
- <uri>http://git.kolab.org/roundcubemail-plugins-kolab/</uri>
- <summary>Kolab Authentication</summary>
- <description>
- Authenticates on LDAP server, finds canonized authentication ID for IMAP
- and for new users creates identity based on LDAP information.
- Supports impersonate feature (login as another user). To use this feature
- imap_auth_type/smtp_auth_type must be set to DIGEST-MD5 or PLAIN.
- </description>
- <lead>
- <name>Aleksander Machniak</name>
- <user>machniak</user>
- <email>machniak at kolabsys.com</email>
- <active>yes</active>
- </lead>
- <date>2013-10-04</date>
- <version>
- <release>1.0</release>
- <api>1.0</api>
- </version>
- <stability>
- <release>stable</release>
- <api>stable</api>
- </stability>
- <license uri="http://www.gnu.org/licenses/agpl.html">GNU AGPLv3</license>
- <notes>-</notes>
- <contents>
- <dir baseinstalldir="/" name="/">
- <file name="kolab_auth.php" role="php">
- <tasks:replace from="@name@" to="name" type="package-info"/>
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="kolab_auth_ldap.php" role="php">
- <tasks:replace from="@name@" to="name" type="package-info"/>
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="config.inc.php.dist" role="data"></file>
- <file name="LICENSE" role="data"></file>
-
- <file name="localization/de_CH.inc" role="data"></file>
- <file name="localization/de_DE.inc" role="data"></file>
- <file name="localization/en_US.inc" role="data"></file>
- <file name="localization/pl_PL.inc" role="data"></file>
- </dir>
- <!-- / -->
- </contents>
- <dependencies>
- <required>
- <php>
- <min>5.2.1</min>
- </php>
- <pearinstaller>
- <min>1.7.0</min>
- </pearinstaller>
- </required>
- </dependencies>
- <phprelease/>
-</package>
diff --git a/lib/plugins/kolab_folders/composer.json b/lib/plugins/kolab_folders/composer.json
new file mode 100644
index 0000000..a4a9877
--- /dev/null
+++ b/lib/plugins/kolab_folders/composer.json
@@ -0,0 +1,26 @@
+{
+ "name": "kolab/kolab_folders",
+ "type": "roundcube-plugin",
+ "description": "Type-aware folder management/listing for Kolab",
+ "homepage": "http://git.kolab.org/roundcubemail-plugins-kolab/",
+ "license": "AGPLv3",
+ "version": "3.2.3",
+ "authors": [
+ {
+ "name": "Aleksander Machniak",
+ "email": "machniak at kolabsys.com",
+ "role": "Lead"
+ }
+ ],
+ "repositories": [
+ {
+ "type": "composer",
+ "url": "http://plugins.roundcube.net"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.0",
+ "roundcube/plugin-installer": ">=0.1.3",
+ "kolab/libkolab": ">=3.2.3"
+ }
+}
diff --git a/lib/plugins/kolab_folders/config.inc.php.dist b/lib/plugins/kolab_folders/config.inc.php.dist
index ffa1e15..0c9bd12 100644
--- a/lib/plugins/kolab_folders/config.inc.php.dist
+++ b/lib/plugins/kolab_folders/config.inc.php.dist
@@ -7,32 +7,30 @@
// Note: Mail folders will be also subscribed.
// Default Configuration folder
-$rcmail_config['kolab_folders_configuration_default'] = '';
+$config['kolab_folders_configuration_default'] = '';
// Default Calendar folder
-$rcmail_config['kolab_folders_event_default'] = '';
+$config['kolab_folders_event_default'] = '';
// Default Contacts (Addressbook) folder
-$rcmail_config['kolab_folders_contact_default'] = '';
+$config['kolab_folders_contact_default'] = '';
// Default Tasks folder
-$rcmail_config['kolab_folders_task_default'] = '';
+$config['kolab_folders_task_default'] = '';
// Default Notes folder
-$rcmail_config['kolab_folders_note_default'] = '';
+$config['kolab_folders_note_default'] = '';
// Default Journal folder
-$rcmail_config['kolab_folders_journal_default'] = '';
+$config['kolab_folders_journal_default'] = '';
// Default Files folder
-$rcmail_config['kolab_folders_file_default'] = '';
+$config['kolab_folders_file_default'] = '';
// Default FreeBusy folder
-$rcmail_config['kolab_folders_freebusy_default'] = '';
+$config['kolab_folders_freebusy_default'] = '';
// INBOX folder
-$rcmail_config['kolab_folders_mail_inbox'] = '';
+$config['kolab_folders_mail_inbox'] = '';
// Drafts folder
-$rcmail_config['kolab_folders_mail_drafts'] = '';
+$config['kolab_folders_mail_drafts'] = '';
// Sent folder
-$rcmail_config['kolab_folders_mail_sentitems'] = '';
+$config['kolab_folders_mail_sentitems'] = '';
// Trash folder
-$rcmail_config['kolab_folders_mail_wastebasket'] = '';
+$config['kolab_folders_mail_wastebasket'] = '';
// Others folders
-$rcmail_config['kolab_folders_mail_outbox'] = '';
-$rcmail_config['kolab_folders_mail_junkemail'] = '';
-
-?>
+$config['kolab_folders_mail_outbox'] = '';
+$config['kolab_folders_mail_junkemail'] = '';
diff --git a/lib/plugins/kolab_folders/kolab_folders.js b/lib/plugins/kolab_folders/kolab_folders.js
index ac50543..b9d9225 100644
--- a/lib/plugins/kolab_folders/kolab_folders.js
+++ b/lib/plugins/kolab_folders/kolab_folders.js
@@ -50,47 +50,23 @@ window.rcmail && rcmail.env.action == 'folders' && rcmail.addEventListener('init
});
window.rcmail && rcmail.env.action != 'folders' && $(document).ready(function() {
- // IE doesn't allow setting OPTION's display/visibility
- // We'll need to remove SELECT's options, see below
- if (bw.ie) {
- rcmail.env.subtype_html = $('#_subtype').html();
- }
-
// Add onchange handler for folder type SELECT, and call it on form init
$('#_ctype').change(function() {
var type = $(this).val(),
sub = $('#_subtype'),
- subtype = sub.val();
+ subtypes = rcmail.env.kolab_folder_subtypes[type] || {};
- // For IE we need to revert the whole SELECT to the original state
- if (bw.ie) {
- sub.html(rcmail.env.subtype_html).val(subtype);
- }
+ // reset subtype selector
+ sub.html('<option value=""></option>');
- // For non-mail folders we must hide mail-specific subtypes
- $('option', sub).each(function() {
- var opt = $(this), val = opt.val();
- if (val == '')
- return;
- // there's no mail.default
- if (val == 'default' && type != 'mail') {
- opt.show();
- return;
- };
-
- if (type == 'mail' && val != 'default')
- opt.show();
- else if (bw.ie)
- opt.remove();
- else
- opt.hide();
+ // append available subtypes for the given folder type
+ $.each(subtypes, function(val, label) {
+ $('<option>').attr('value', val).text(label).appendTo(sub);
});
// And re-set subtype
- if (type != 'mail' && subtype != '' && subtype != 'default') {
- sub.val('');
- }
- }).change();
+ sub.val(rcmail.env.kolab_folder_subtype);
+ });
});
function kolab_folders_filter(filter)
diff --git a/lib/plugins/kolab_folders/kolab_folders.php b/lib/plugins/kolab_folders/kolab_folders.php
index 510388c..b3c2e8e 100644
--- a/lib/plugins/kolab_folders/kolab_folders.php
+++ b/lib/plugins/kolab_folders/kolab_folders.php
@@ -27,7 +27,17 @@ class kolab_folders extends rcube_plugin
public $task = '?(?!login).*';
public $types = array('mail', 'event', 'journal', 'task', 'note', 'contact', 'configuration', 'file', 'freebusy');
- public $mail_types = array('inbox', 'drafts', 'sentitems', 'outbox', 'wastebasket', 'junkemail');
+ public $subtypes = array(
+ 'mail' => array('inbox', 'drafts', 'sentitems', 'outbox', 'wastebasket', 'junkemail'),
+ 'event' => array('default', 'confidential'),
+ 'task' => array('default', 'confidential'),
+ 'journal' => array('default'),
+ 'note' => array('default'),
+ 'contact' => array('default'),
+ 'configuration' => array('default'),
+ 'file' => array('default'),
+ 'freebusy' => array('default'),
+ );
public $act_types = array('event', 'task');
private $rc;
@@ -202,8 +212,8 @@ class kolab_folders extends rcube_plugin
$mbox = strlen($args['name']) ? $args['name'] : $args['parent_name'];
if (isset($_POST['_ctype'])) {
- $new_ctype = trim(get_input_value('_ctype', RCUBE_INPUT_POST));
- $new_subtype = trim(get_input_value('_subtype', RCUBE_INPUT_POST));
+ $new_ctype = trim(rcube_utils::get_input_value('_ctype', rcube_utils::INPUT_POST));
+ $new_subtype = trim(rcube_utils::get_input_value('_subtype', rcube_utils::INPUT_POST));
}
// Get type of the folder or the parent
@@ -248,6 +258,7 @@ class kolab_folders extends rcube_plugin
// build type SELECT fields
$type_select = new html_select(array('name' => '_ctype', 'id' => '_ctype'));
$sub_select = new html_select(array('name' => '_subtype', 'id' => '_subtype'));
+ $sub_select->add('', '');
foreach ($this->types as $type) {
$type_select->add($this->gettext('foldertype'.$type), $type);
@@ -257,10 +268,14 @@ class kolab_folders extends rcube_plugin
$type_select->add($ctype, $ctype);
}
- $sub_select->add('', '');
- $sub_select->add($this->gettext('default'), 'default');
- foreach ($this->mail_types as $type) {
- $sub_select->add($this->gettext($type), $type);
+ $sub_types = array();
+ foreach ($this->subtypes as $ftype => $subtypes) {
+ $sub_types[$ftype] = array_combine($subtypes, array_map(array($this, 'gettext'), $subtypes));
+
+ // fill options for the current folder type
+ if ($ftype == $ctype || $ftype == $new_ctype) {
+ $sub_select->add(array_values($sub_types[$ftype]), $subtypes);
+ }
}
$args['form']['props']['fieldsets']['settings']['content']['foldertype'] = array(
@@ -269,6 +284,9 @@ class kolab_folders extends rcube_plugin
. $sub_select->show(isset($new_subtype) ? $new_subtype : $subtype),
);
+ $this->rc->output->set_env('kolab_folder_subtypes', $sub_types);
+ $this->rc->output->set_env('kolab_folder_subtype', isset($new_subtype) ? $new_subtype : $subtype);
+
return $args;
}
@@ -283,8 +301,8 @@ class kolab_folders extends rcube_plugin
}
// Folder create/update with form
- $ctype = trim(get_input_value('_ctype', RCUBE_INPUT_POST));
- $subtype = trim(get_input_value('_subtype', RCUBE_INPUT_POST));
+ $ctype = trim(rcube_utils::get_input_value('_ctype', rcube_utils::INPUT_POST));
+ $subtype = trim(rcube_utils::get_input_value('_subtype', rcube_utils::INPUT_POST));
$mbox = $args['record']['name'];
$old_mbox = $args['record']['oldname'];
$subscribe = $args['record']['subscribe'];
@@ -312,7 +330,7 @@ class kolab_folders extends rcube_plugin
}
}
// Subtype sanity-checks
- else if ($subtype && ($ctype != 'mail' || !in_array($subtype, $this->mail_types))) {
+ else if ($subtype && (!($subtypes = $this->subtypes[$ctype]) || !in_array($subtype, $subtypes))) {
$subtype = '';
}
@@ -522,8 +540,7 @@ class kolab_folders extends rcube_plugin
// get configured defaults
foreach ($this->types as $type) {
- $subtypes = $type == 'mail' ? $this->mail_types : array('default');
- foreach ($subtypes as $subtype) {
+ foreach ((array)$this->subtypes[$type] as $subtype) {
$opt_name = 'kolab_folders_' . $type . '_' . $subtype;
if ($folder = $this->rc->config->get($opt_name)) {
// convert configuration value to UTF7-IMAP charset
diff --git a/lib/plugins/kolab_folders/localization/de_CH.inc b/lib/plugins/kolab_folders/localization/de_CH.inc
index ebac855..91c24d3 100644
--- a/lib/plugins/kolab_folders/localization/de_CH.inc
+++ b/lib/plugins/kolab_folders/localization/de_CH.inc
@@ -1,4 +1,11 @@
<?php
+/**
+ * Localizations for the Kolab Folders plugin
+ *
+ * Copyright (C) 2014, Kolab Systems AG
+ *
+ * For translation see https://www.transifex.com/projects/p/kolab/resource/kolab_folders/
+ */
$labels['folderctype'] = 'Ordnerinhalt';
$labels['foldertypemail'] = 'E-Mail';
$labels['foldertypeevent'] = 'Kalender';
@@ -16,5 +23,6 @@ $labels['sentitems'] = 'Gesendet';
$labels['outbox'] = 'Postausgang';
$labels['wastebasket'] = 'Gelöscht';
$labels['junkemail'] = 'Spam';
+$labels['confidential'] = 'Confidential';
$messages['defaultfolderexists'] = 'Es existiert bereits ein Standardordner für den angegebenen Typ';
?>
diff --git a/lib/plugins/kolab_folders/localization/de_DE.inc b/lib/plugins/kolab_folders/localization/de_DE.inc
index 9921e25..24749ad 100644
--- a/lib/plugins/kolab_folders/localization/de_DE.inc
+++ b/lib/plugins/kolab_folders/localization/de_DE.inc
@@ -1,4 +1,11 @@
<?php
+/**
+ * Localizations for the Kolab Folders plugin
+ *
+ * Copyright (C) 2014, Kolab Systems AG
+ *
+ * For translation see https://www.transifex.com/projects/p/kolab/resource/kolab_folders/
+ */
$labels['folderctype'] = 'Ordnerinhalt';
$labels['foldertypemail'] = 'E-Mail';
$labels['foldertypeevent'] = 'Kalender';
@@ -16,5 +23,6 @@ $labels['sentitems'] = 'Gesendet';
$labels['outbox'] = 'Postausgang';
$labels['wastebasket'] = 'Mülleimer';
$labels['junkemail'] = 'Spam';
+$labels['confidential'] = 'Vertraulich';
$messages['defaultfolderexists'] = 'Es gibt bereits einen Standardordner dieses Typs';
?>
diff --git a/lib/plugins/kolab_folders/localization/en_US.inc b/lib/plugins/kolab_folders/localization/en_US.inc
index 0d8d86c..0910d9d 100644
--- a/lib/plugins/kolab_folders/localization/en_US.inc
+++ b/lib/plugins/kolab_folders/localization/en_US.inc
@@ -28,6 +28,7 @@ $labels['sentitems'] = 'Sent';
$labels['outbox'] = 'Outbox';
$labels['wastebasket'] = 'Trash';
$labels['junkemail'] = 'Junk';
+$labels['confidential'] = 'Confidential';
$messages['defaultfolderexists'] = 'There is already default folder of specified type';
diff --git a/lib/plugins/kolab_folders/localization/es_ES.inc b/lib/plugins/kolab_folders/localization/es_ES.inc
index cdbc62c..b53712b 100644
--- a/lib/plugins/kolab_folders/localization/es_ES.inc
+++ b/lib/plugins/kolab_folders/localization/es_ES.inc
@@ -1,7 +1,28 @@
<?php
+/**
+ * Localizations for the Kolab Folders plugin
+ *
+ * Copyright (C) 2014, Kolab Systems AG
+ *
+ * For translation see https://www.transifex.com/projects/p/kolab/resource/kolab_folders/
+ */
+$labels['folderctype'] = 'Content type';
+$labels['foldertypemail'] = 'Mail';
$labels['foldertypeevent'] = 'Calendar';
+$labels['foldertypejournal'] = 'Journal';
$labels['foldertypetask'] = 'Tareas';
$labels['foldertypenote'] = 'Notas';
$labels['foldertypecontact'] = 'Contactos';
$labels['foldertypeconfiguration'] = 'Configuración';
+$labels['foldertypefile'] = 'Files';
+$labels['foldertypefreebusy'] = 'Free-Busy';
+$labels['default'] = 'Default';
+$labels['inbox'] = 'Inbox';
+$labels['drafts'] = 'Drafts';
+$labels['sentitems'] = 'Sent';
+$labels['outbox'] = 'Outbox';
+$labels['wastebasket'] = 'Trash';
+$labels['junkemail'] = 'Junk';
+$labels['confidential'] = 'Confidential';
+$messages['defaultfolderexists'] = 'There is already default folder of specified type';
?>
diff --git a/lib/plugins/kolab_folders/localization/et_EE.inc b/lib/plugins/kolab_folders/localization/et_EE.inc
index efb51b6..5a12004 100644
--- a/lib/plugins/kolab_folders/localization/et_EE.inc
+++ b/lib/plugins/kolab_folders/localization/et_EE.inc
@@ -1,3 +1,28 @@
<?php
+/**
+ * Localizations for the Kolab Folders plugin
+ *
+ * Copyright (C) 2014, Kolab Systems AG
+ *
+ * For translation see https://www.transifex.com/projects/p/kolab/resource/kolab_folders/
+ */
+$labels['folderctype'] = 'Content type';
+$labels['foldertypemail'] = 'Mail';
$labels['foldertypeevent'] = 'Calendar';
+$labels['foldertypejournal'] = 'Journal';
+$labels['foldertypetask'] = 'Tasks';
+$labels['foldertypenote'] = 'Notes';
+$labels['foldertypecontact'] = 'Contacts';
+$labels['foldertypeconfiguration'] = 'Configuration';
+$labels['foldertypefile'] = 'Files';
+$labels['foldertypefreebusy'] = 'Free-Busy';
+$labels['default'] = 'Default';
+$labels['inbox'] = 'Inbox';
+$labels['drafts'] = 'Drafts';
+$labels['sentitems'] = 'Sent';
+$labels['outbox'] = 'Outbox';
+$labels['wastebasket'] = 'Trash';
+$labels['junkemail'] = 'Junk';
+$labels['confidential'] = 'Confidential';
+$messages['defaultfolderexists'] = 'There is already default folder of specified type';
?>
diff --git a/lib/plugins/kolab_folders/localization/fr_FR.inc b/lib/plugins/kolab_folders/localization/fr_FR.inc
index ac3d2dd..41e506e 100644
--- a/lib/plugins/kolab_folders/localization/fr_FR.inc
+++ b/lib/plugins/kolab_folders/localization/fr_FR.inc
@@ -1,4 +1,11 @@
<?php
+/**
+ * Localizations for the Kolab Folders plugin
+ *
+ * Copyright (C) 2014, Kolab Systems AG
+ *
+ * For translation see https://www.transifex.com/projects/p/kolab/resource/kolab_folders/
+ */
$labels['folderctype'] = 'Type de contenu';
$labels['foldertypemail'] = 'Courriel';
$labels['foldertypeevent'] = 'Calendrier';
@@ -16,5 +23,6 @@ $labels['sentitems'] = 'Envoyés';
$labels['outbox'] = 'Courrier sortant';
$labels['wastebasket'] = 'Corbeille';
$labels['junkemail'] = 'Indésirables';
+$labels['confidential'] = 'Confidentiel';
$messages['defaultfolderexists'] = 'Il existe déjà un répertoire par défaut pour le type spécifié';
?>
diff --git a/lib/plugins/kolab_folders/localization/ja_JP.inc b/lib/plugins/kolab_folders/localization/ja_JP.inc
index 2ac10c2..6dfd611 100644
--- a/lib/plugins/kolab_folders/localization/ja_JP.inc
+++ b/lib/plugins/kolab_folders/localization/ja_JP.inc
@@ -1,4 +1,11 @@
<?php
+/**
+ * Localizations for the Kolab Folders plugin
+ *
+ * Copyright (C) 2014, Kolab Systems AG
+ *
+ * For translation see https://www.transifex.com/projects/p/kolab/resource/kolab_folders/
+ */
$labels['folderctype'] = 'ã³ã³ãã³ãã¿ã¤ã';
$labels['foldertypemail'] = 'ã¡ã¼ã«';
$labels['foldertypeevent'] = 'ã«ã¬ã³ãã¼';
@@ -16,5 +23,6 @@ $labels['sentitems'] = 'éä¿¡æ¸';
$labels['outbox'] = 'éä¿¡ç®±';
$labels['wastebasket'] = 'ãã¿ç®±';
$labels['junkemail'] = 'è¿·æã¡ã¼ã«';
+$labels['confidential'] = 'Confidential';
$messages['defaultfolderexists'] = 'æå®ããã¿ã¤ãã®åæãã©ã«ãã¯æ¢ã«ããã¾ãã';
?>
diff --git a/lib/plugins/kolab_folders/localization/nl_NL.inc b/lib/plugins/kolab_folders/localization/nl_NL.inc
index 4946a24..a80aca5 100644
--- a/lib/plugins/kolab_folders/localization/nl_NL.inc
+++ b/lib/plugins/kolab_folders/localization/nl_NL.inc
@@ -1,4 +1,11 @@
<?php
+/**
+ * Localizations for the Kolab Folders plugin
+ *
+ * Copyright (C) 2014, Kolab Systems AG
+ *
+ * For translation see https://www.transifex.com/projects/p/kolab/resource/kolab_folders/
+ */
$labels['folderctype'] = 'Inhoudstype';
$labels['foldertypemail'] = 'Mail';
$labels['foldertypeevent'] = 'Agenda';
@@ -16,5 +23,6 @@ $labels['sentitems'] = 'Verzonden';
$labels['outbox'] = 'Te versturen';
$labels['wastebasket'] = 'Prullenbak';
$labels['junkemail'] = 'Ongewenst';
+$labels['confidential'] = 'Vertrouwelijk';
$messages['defaultfolderexists'] = 'Er is reeds een standaard map voor dit type inhoud';
?>
diff --git a/lib/plugins/kolab_folders/localization/pl_PL.inc b/lib/plugins/kolab_folders/localization/pl_PL.inc
index 0b13bdd..8d9f61a 100644
--- a/lib/plugins/kolab_folders/localization/pl_PL.inc
+++ b/lib/plugins/kolab_folders/localization/pl_PL.inc
@@ -1,4 +1,11 @@
<?php
+/**
+ * Localizations for the Kolab Folders plugin
+ *
+ * Copyright (C) 2014, Kolab Systems AG
+ *
+ * For translation see https://www.transifex.com/projects/p/kolab/resource/kolab_folders/
+ */
$labels['folderctype'] = 'Typ treÅci';
$labels['foldertypemail'] = 'Poczta';
$labels['foldertypeevent'] = 'Kalendarz';
@@ -16,5 +23,6 @@ $labels['sentitems'] = 'WysÅane';
$labels['outbox'] = 'Poczta wychodzÄ
ca';
$labels['wastebasket'] = 'Kosz';
$labels['junkemail'] = 'Spam';
+$labels['confidential'] = 'Confidential';
$messages['defaultfolderexists'] = 'Folder domyÅlny wybranego typu już istnieje';
?>
diff --git a/lib/plugins/kolab_folders/localization/ru_RU.inc b/lib/plugins/kolab_folders/localization/ru_RU.inc
index 83df476..4e50bff 100644
--- a/lib/plugins/kolab_folders/localization/ru_RU.inc
+++ b/lib/plugins/kolab_folders/localization/ru_RU.inc
@@ -1,4 +1,11 @@
<?php
+/**
+ * Localizations for the Kolab Folders plugin
+ *
+ * Copyright (C) 2014, Kolab Systems AG
+ *
+ * For translation see https://www.transifex.com/projects/p/kolab/resource/kolab_folders/
+ */
$labels['folderctype'] = 'Тип ÑÑика';
$labels['foldertypemail'] = 'ÐоÑÑа';
$labels['foldertypeevent'] = 'ÐалендаÑÑ';
@@ -16,5 +23,6 @@ $labels['sentitems'] = 'ÐÑпÑавленнÑе';
$labels['outbox'] = 'ÐÑÑ
одÑÑие';
$labels['wastebasket'] = 'ÐоÑзина';
$labels['junkemail'] = 'Спам';
+$labels['confidential'] = 'ÐонÑиденÑиалÑно';
$messages['defaultfolderexists'] = 'Уже назнаÑен ÑÑик по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ñказанного Ñипа';
?>
diff --git a/lib/plugins/kolab_folders/package.xml b/lib/plugins/kolab_folders/package.xml
deleted file mode 100644
index b40acab..0000000
--- a/lib/plugins/kolab_folders/package.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<package 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" packagerversion="1.9.0" version="2.0" 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>kolab_folders</name>
- <uri>http://git.kolab.org/roundcubemail-plugins-kolab/</uri>
- <summary>Type-aware folder management/listing for Kolab</summary>
- <description>
- The plugin extends folders handling with features of the Kolab Suite
- according to specified format (http://www.kolab.org/doc/kolabformat-2.0-html).
- With this plugin enabled it is possible to:
- - set/get/change folder's type,
- - filter folders list by folder type,
- - style folders list rows (in folder manager),
- - create default folders with specified type.
- </description>
- <lead>
- <name>Aleksander Machniak</name>
- <user>machniak</user>
- <email>machniak at kolabsys.com</email>
- <active>yes</active>
- </lead>
- <date>2012-10.25</date>
- <version>
- <release>2.1</release>
- <api>2.0</api>
- </version>
- <stability>
- <release>stable</release>
- <api>stable</api>
- </stability>
- <license uri="http://www.gnu.org/licenses/agpl.html">GNU AGPLv3</license>
- <notes>-</notes>
- <contents>
- <dir baseinstalldir="/" name="/">
- <file name="kolab_folders.php" role="php">
- <tasks:replace from="@name@" to="name" type="package-info"/>
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="kolab_folders.js" role="data">
- <tasks:replace from="@name@" to="name" type="package-info"/>
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="config.inc.php.dist" role="data"></file>
- <file name="localization/en_US.inc" role="data"></file>
- <file name="localization/pl_PL.inc" role="data"></file>
- <file name="LICENSE" role="data"></file>
- </dir>
- <!-- / -->
- </contents>
- <dependencies>
- <required>
- <php>
- <min>5.2.1</min>
- </php>
- <pearinstaller>
- <min>1.7.0</min>
- </pearinstaller>
- </required>
- </dependencies>
- <phprelease />
-</package>
diff --git a/lib/plugins/libkolab/SQL/mysql.initial.sql b/lib/plugins/libkolab/SQL/mysql.initial.sql
index 2aa046d..98e7e78 100644
--- a/lib/plugins/libkolab/SQL/mysql.initial.sql
+++ b/lib/plugins/libkolab/SQL/mysql.initial.sql
@@ -31,7 +31,7 @@ CREATE TABLE `kolab_cache_contact` (
`changed` DATETIME DEFAULT NULL,
`data` LONGTEXT NOT NULL,
`xml` LONGBLOB NOT NULL,
- `tags` VARCHAR(255) NOT NULL,
+ `tags` TEXT NOT NULL,
`words` TEXT NOT NULL,
`type` VARCHAR(32) CHARACTER SET ascii NOT NULL,
`name` VARCHAR(255) NOT NULL,
@@ -55,7 +55,7 @@ CREATE TABLE `kolab_cache_event` (
`changed` DATETIME DEFAULT NULL,
`data` LONGTEXT NOT NULL,
`xml` LONGBLOB NOT NULL,
- `tags` VARCHAR(255) NOT NULL,
+ `tags` TEXT NOT NULL,
`words` TEXT NOT NULL,
`dtstart` DATETIME,
`dtend` DATETIME,
@@ -75,7 +75,7 @@ CREATE TABLE `kolab_cache_task` (
`changed` DATETIME DEFAULT NULL,
`data` LONGTEXT NOT NULL,
`xml` LONGBLOB NOT NULL,
- `tags` VARCHAR(255) NOT NULL,
+ `tags` TEXT NOT NULL,
`words` TEXT NOT NULL,
`dtstart` DATETIME,
`dtend` DATETIME,
@@ -95,7 +95,7 @@ CREATE TABLE `kolab_cache_journal` (
`changed` DATETIME DEFAULT NULL,
`data` LONGTEXT NOT NULL,
`xml` LONGBLOB NOT NULL,
- `tags` VARCHAR(255) NOT NULL,
+ `tags` TEXT NOT NULL,
`words` TEXT NOT NULL,
`dtstart` DATETIME,
`dtend` DATETIME,
@@ -115,7 +115,7 @@ CREATE TABLE `kolab_cache_note` (
`changed` DATETIME DEFAULT NULL,
`data` LONGTEXT NOT NULL,
`xml` LONGBLOB NOT NULL,
- `tags` VARCHAR(255) NOT NULL,
+ `tags` TEXT NOT NULL,
`words` TEXT NOT NULL,
CONSTRAINT `fk_kolab_cache_note_folder` FOREIGN KEY (`folder_id`)
REFERENCES `kolab_folders`(`folder_id`) ON DELETE CASCADE ON UPDATE CASCADE,
@@ -133,7 +133,7 @@ CREATE TABLE `kolab_cache_file` (
`changed` DATETIME DEFAULT NULL,
`data` LONGTEXT NOT NULL,
`xml` LONGBLOB NOT NULL,
- `tags` VARCHAR(255) NOT NULL,
+ `tags` TEXT NOT NULL,
`words` TEXT NOT NULL,
`filename` varchar(255) DEFAULT NULL,
CONSTRAINT `fk_kolab_cache_file_folder` FOREIGN KEY (`folder_id`)
@@ -153,7 +153,7 @@ CREATE TABLE `kolab_cache_configuration` (
`changed` DATETIME DEFAULT NULL,
`data` LONGTEXT NOT NULL,
`xml` LONGBLOB NOT NULL,
- `tags` VARCHAR(255) NOT NULL,
+ `tags` TEXT NOT NULL,
`words` TEXT NOT NULL,
`type` VARCHAR(32) CHARACTER SET ascii NOT NULL,
CONSTRAINT `fk_kolab_cache_configuration_folder` FOREIGN KEY (`folder_id`)
@@ -173,7 +173,7 @@ CREATE TABLE `kolab_cache_freebusy` (
`changed` DATETIME DEFAULT NULL,
`data` LONGTEXT NOT NULL,
`xml` LONGBLOB NOT NULL,
- `tags` VARCHAR(255) NOT NULL,
+ `tags` TEXT NOT NULL,
`words` TEXT NOT NULL,
`dtstart` DATETIME,
`dtend` DATETIME,
@@ -184,4 +184,4 @@ CREATE TABLE `kolab_cache_freebusy` (
) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
-INSERT INTO `system` (`name`, `value`) VALUES ('libkolab-version', '2014021000');
+INSERT INTO `system` (`name`, `value`) VALUES ('libkolab-version', '2015011600');
diff --git a/lib/plugins/libkolab/SQL/mysql/2014112700.sql b/lib/plugins/libkolab/SQL/mysql/2014112700.sql
new file mode 100644
index 0000000..90c77b8
--- /dev/null
+++ b/lib/plugins/libkolab/SQL/mysql/2014112700.sql
@@ -0,0 +1,2 @@
+-- delete cache entries for old folder identifiers
+DELETE FROM `kolab_folders` WHERE `resource` LIKE 'imap://anonymous@%';
diff --git a/lib/plugins/libkolab/SQL/mysql/2015011600.sql b/lib/plugins/libkolab/SQL/mysql/2015011600.sql
new file mode 100644
index 0000000..be523ae
--- /dev/null
+++ b/lib/plugins/libkolab/SQL/mysql/2015011600.sql
@@ -0,0 +1,8 @@
+ALTER TABLE `kolab_cache_contact` MODIFY `tags` text NOT NULL;
+ALTER TABLE `kolab_cache_event` MODIFY `tags` text NOT NULL;
+ALTER TABLE `kolab_cache_task` MODIFY `tags` text NOT NULL;
+ALTER TABLE `kolab_cache_journal` MODIFY `tags` text NOT NULL;
+ALTER TABLE `kolab_cache_note` MODIFY `tags` text NOT NULL;
+ALTER TABLE `kolab_cache_file` MODIFY `tags` text NOT NULL;
+ALTER TABLE `kolab_cache_configuration` MODIFY `tags` text NOT NULL;
+ALTER TABLE `kolab_cache_freebusy` MODIFY `tags` text NOT NULL;
diff --git a/lib/plugins/libkolab/SQL/oracle.initial.sql b/lib/plugins/libkolab/SQL/oracle.initial.sql
new file mode 100644
index 0000000..8f1ed64
--- /dev/null
+++ b/lib/plugins/libkolab/SQL/oracle.initial.sql
@@ -0,0 +1,184 @@
+/**
+ * libkolab database schema
+ *
+ * @version 1.1
+ * @author Aleksander Machniak
+ * @licence GNU AGPL
+ **/
+
+
+CREATE TABLE "kolab_folders" (
+ "folder_id" number NOT NULL PRIMARY KEY,
+ "resource" VARCHAR(255) NOT NULL,
+ "type" VARCHAR(32) NOT NULL,
+ "synclock" integer DEFAULT 0 NOT NULL,
+ "ctag" VARCHAR(40) DEFAULT NULL
+);
+
+CREATE INDEX "kolab_folders_resource_idx" ON "kolab_folders" ("resource", "type");
+
+CREATE SEQUENCE "kolab_folders_seq"
+ START WITH 1 INCREMENT BY 1 NOMAXVALUE;
+
+CREATE TRIGGER "kolab_folders_seq_trig"
+BEFORE INSERT ON "kolab_folders" FOR EACH ROW
+BEGIN
+ :NEW."folder_id" := "kolab_folders_seq".nextval;
+END;
+/
+
+CREATE TABLE "kolab_cache_contact" (
+ "folder_id" number NOT NULL
+ REFERENCES "kolab_folders" ("folder_id") ON DELETE CASCADE,
+ "msguid" number NOT NULL,
+ "uid" varchar(128) NOT NULL,
+ "created" timestamp DEFAULT NULL,
+ "changed" timestamp DEFAULT NULL,
+ "data" clob NOT NULL,
+ "xml" clob NOT NULL,
+ "tags" clob DEFAULT NULL,
+ "words" clob DEFAULT NULL,
+ "type" varchar(32) NOT NULL,
+ "name" varchar(255) DEFAULT NULL,
+ "firstname" varchar(255) DEFAULT NULL,
+ "surname" varchar(255) DEFAULT NULL,
+ "email" varchar(255) DEFAULT NULL,
+ PRIMARY KEY ("folder_id", "msguid")
+);
+
+CREATE INDEX "kolab_cache_contact_type_idx" ON "kolab_cache_contact" ("folder_id", "type");
+CREATE INDEX "kolab_cache_contact_uid2msguid" ON "kolab_cache_contact" ("folder_id", "uid", "msguid");
+
+
+CREATE TABLE "kolab_cache_event" (
+ "folder_id" number NOT NULL
+ REFERENCES "kolab_folders" ("folder_id") ON DELETE CASCADE,
+ "msguid" number NOT NULL,
+ "uid" varchar(128) NOT NULL,
+ "created" timestamp DEFAULT NULL,
+ "changed" timestamp DEFAULT NULL,
+ "data" clob NOT NULL,
+ "xml" clob NOT NULL,
+ "tags" clob DEFAULT NULL,
+ "words" clob DEFAULT NULL,
+ "dtstart" timestamp DEFAULT NULL,
+ "dtend" timestamp DEFAULT NULL,
+ PRIMARY KEY ("folder_id", "msguid")
+);
+
+CREATE INDEX "kolab_cache_event_uid2msguid" ON "kolab_cache_event" ("folder_id", "uid", "msguid");
+
+
+CREATE TABLE "kolab_cache_task" (
+ "folder_id" number NOT NULL
+ REFERENCES "kolab_folders" ("folder_id") ON DELETE CASCADE,
+ "msguid" number NOT NULL,
+ "uid" varchar(128) NOT NULL,
+ "created" timestamp DEFAULT NULL,
+ "changed" timestamp DEFAULT NULL,
+ "data" clob NOT NULL,
+ "xml" clob NOT NULL,
+ "tags" clob DEFAULT NULL,
+ "words" clob DEFAULT NULL,
+ "dtstart" timestamp DEFAULT NULL,
+ "dtend" timestamp DEFAULT NULL,
+ PRIMARY KEY ("folder_id", "msguid")
+);
+
+CREATE INDEX "kolab_cache_task_uid2msguid" ON "kolab_cache_task" ("folder_id", "uid", "msguid");
+
+
+CREATE TABLE "kolab_cache_journal" (
+ "folder_id" number NOT NULL
+ REFERENCES "kolab_folders" ("folder_id") ON DELETE CASCADE,
+ "msguid" number NOT NULL,
+ "uid" varchar(128) NOT NULL,
+ "created" timestamp DEFAULT NULL,
+ "changed" timestamp DEFAULT NULL,
+ "data" clob NOT NULL,
+ "xml" clob NOT NULL,
+ "tags" clob DEFAULT NULL,
+ "words" clob DEFAULT NULL,
+ "dtstart" timestamp DEFAULT NULL,
+ "dtend" timestamp DEFAULT NULL,
+ PRIMARY KEY ("folder_id", "msguid")
+);
+
+CREATE INDEX "kolab_cache_journal_uid2msguid" ON "kolab_cache_journal" ("folder_id", "uid", "msguid");
+
+
+CREATE TABLE "kolab_cache_note" (
+ "folder_id" number NOT NULL
+ REFERENCES "kolab_folders" ("folder_id") ON DELETE CASCADE,
+ "msguid" number NOT NULL,
+ "uid" varchar(128) NOT NULL,
+ "created" timestamp DEFAULT NULL,
+ "changed" timestamp DEFAULT NULL,
+ "data" clob NOT NULL,
+ "xml" clob NOT NULL,
+ "tags" clob DEFAULT NULL,
+ "words" clob DEFAULT NULL,
+ PRIMARY KEY ("folder_id", "msguid")
+);
+
+CREATE INDEX "kolab_cache_note_uid2msguid" ON "kolab_cache_note" ("folder_id", "uid", "msguid");
+
+
+CREATE TABLE "kolab_cache_file" (
+ "folder_id" number NOT NULL
+ REFERENCES "kolab_folders" ("folder_id") ON DELETE CASCADE,
+ "msguid" number NOT NULL,
+ "uid" varchar(128) NOT NULL,
+ "created" timestamp DEFAULT NULL,
+ "changed" timestamp DEFAULT NULL,
+ "data" clob NOT NULL,
+ "xml" clob NOT NULL,
+ "tags" clob DEFAULT NULL,
+ "words" clob DEFAULT NULL,
+ "filename" varchar(255) DEFAULT NULL,
+ PRIMARY KEY ("folder_id", "msguid")
+);
+
+CREATE INDEX "kolab_cache_file_filename" ON "kolab_cache_file" ("folder_id", "filename");
+CREATE INDEX "kolab_cache_file_uid2msguid" ON "kolab_cache_file" ("folder_id", "uid", "msguid");
+
+
+CREATE TABLE "kolab_cache_configuration" (
+ "folder_id" number NOT NULL
+ REFERENCES "kolab_folders" ("folder_id") ON DELETE CASCADE,
+ "msguid" number NOT NULL,
+ "uid" varchar(128) NOT NULL,
+ "created" timestamp DEFAULT NULL,
+ "changed" timestamp DEFAULT NULL,
+ "data" clob NOT NULL,
+ "xml" clob NOT NULL,
+ "tags" clob DEFAULT NULL,
+ "words" clob DEFAULT NULL,
+ "type" varchar(32) NOT NULL,
+ PRIMARY KEY ("folder_id", "msguid")
+);
+
+CREATE INDEX "kolab_cache_config_type" ON "kolab_cache_configuration" ("folder_id", "type");
+CREATE INDEX "kolab_cache_config_uid2msguid" ON "kolab_cache_configuration" ("folder_id", "uid", "msguid");
+
+
+CREATE TABLE "kolab_cache_freebusy" (
+ "folder_id" number NOT NULL
+ REFERENCES "kolab_folders" ("folder_id") ON DELETE CASCADE,
+ "msguid" number NOT NULL,
+ "uid" varchar(128) NOT NULL,
+ "created" timestamp DEFAULT NULL,
+ "changed" timestamp DEFAULT NULL,
+ "data" clob NOT NULL,
+ "xml" clob NOT NULL,
+ "tags" clob DEFAULT NULL,
+ "words" clob DEFAULT NULL,
+ "dtstart" timestamp DEFAULT NULL,
+ "dtend" timestamp DEFAULT NULL,
+ PRIMARY KEY("folder_id", "msguid")
+);
+
+CREATE INDEX "kolab_cache_fb_uid2msguid" ON "kolab_cache_freebusy" ("folder_id", "uid", "msguid");
+
+
+INSERT INTO "system" ("name", "value") VALUES ('libkolab-version', '2015011600');
diff --git a/lib/plugins/libkolab/SQL/oracle/2015011600.sql b/lib/plugins/libkolab/SQL/oracle/2015011600.sql
new file mode 100644
index 0000000..69f7953
--- /dev/null
+++ b/lib/plugins/libkolab/SQL/oracle/2015011600.sql
@@ -0,0 +1,40 @@
+-- direct change from varchar to clob does not work, need temp column (#4257)
+ALTER TABLE "kolab_cache_contact" ADD "tags1" clob DEFAULT NULL;
+UPDATE "kolab_cache_contact" SET "tags1" = "tags";
+ALTER TABLE "kolab_cache_contact" DROP COLUMN "tags";
+ALTER TABLE "kolab_cache_contact" RENAME COLUMN "tags1" TO "tags";
+
+ALTER TABLE "kolab_cache_event" ADD "tags1" clob DEFAULT NULL;
+UPDATE "kolab_cache_event" SET "tags1" = "tags";
+ALTER TABLE "kolab_cache_event" DROP COLUMN "tags";
+ALTER TABLE "kolab_cache_event" RENAME COLUMN "tags1" TO "tags";
+
+ALTER TABLE "kolab_cache_task" ADD "tags1" clob DEFAULT NULL;
+UPDATE "kolab_cache_task" SET "tags1" = "tags";
+ALTER TABLE "kolab_cache_task" DROP COLUMN "tags";
+ALTER TABLE "kolab_cache_task" RENAME COLUMN "tags1" TO "tags";
+
+ALTER TABLE "kolab_cache_journal" ADD "tags1" clob DEFAULT NULL;
+UPDATE "kolab_cache_journal" SET "tags1" = "tags";
+ALTER TABLE "kolab_cache_journal" DROP COLUMN "tags";
+ALTER TABLE "kolab_cache_journal" RENAME COLUMN "tags1" TO "tags";
+
+ALTER TABLE "kolab_cache_note" ADD "tags1" clob DEFAULT NULL;
+UPDATE "kolab_cache_note" SET "tags1" = "tags";
+ALTER TABLE "kolab_cache_note" DROP COLUMN "tags";
+ALTER TABLE "kolab_cache_note" RENAME COLUMN "tags1" TO "tags";
+
+ALTER TABLE "kolab_cache_file" ADD "tags1" clob DEFAULT NULL;
+UPDATE "kolab_cache_file" SET "tags1" = "tags";
+ALTER TABLE "kolab_cache_file" DROP COLUMN "tags";
+ALTER TABLE "kolab_cache_file" RENAME COLUMN "tags1" TO "tags";
+
+ALTER TABLE "kolab_cache_configuration" ADD "tags1" clob DEFAULT NULL;
+UPDATE "kolab_cache_configuration" SET "tags1" = "tags";
+ALTER TABLE "kolab_cache_configuration" DROP COLUMN "tags";
+ALTER TABLE "kolab_cache_configuration" RENAME COLUMN "tags1" TO "tags";
+
+ALTER TABLE "kolab_cache_freebusy" ADD "tags1" clob DEFAULT NULL;
+UPDATE "kolab_cache_freebusy" SET "tags1" = "tags";
+ALTER TABLE "kolab_cache_freebusy" DROP COLUMN "tags";
+ALTER TABLE "kolab_cache_freebusy" RENAME COLUMN "tags1" TO "tags";
diff --git a/lib/plugins/libkolab/bin/readcache.sh b/lib/plugins/libkolab/bin/readcache.sh
new file mode 100755
index 0000000..7e6a3a3
--- /dev/null
+++ b/lib/plugins/libkolab/bin/readcache.sh
@@ -0,0 +1,150 @@
+#!/usr/bin/env php
+<?php
+
+/**
+ * Kolab storage cache testing script
+ *
+ * @author Thomas Bruederli <bruederli at kolabsys.com>
+ *
+ * Copyright (C) 2014, Kolab Systems AG <contact at kolabsys.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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 Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+define('INSTALL_PATH', realpath('.') . '/' );
+ini_set('display_errors', 1);
+libxml_use_internal_errors(true);
+
+if (!file_exists(INSTALL_PATH . 'program/include/clisetup.php'))
+ die("Execute this from the Roundcube installation dir!\n\n");
+
+require_once INSTALL_PATH . 'program/include/clisetup.php';
+
+function print_usage()
+{
+ print "Usage: readcache.sh [OPTIONS] FOLDER\n";
+ print "-h, --host IMAP host name\n";
+ print "-l, --limit Limit the number of records to be listed\n";
+}
+
+// read arguments
+$opts = get_opt(array(
+ 'h' => 'host',
+ 'l' => 'limit',
+ 'v' => 'verbose',
+));
+
+$folder = $opts[0];
+$imap_host = $opts['host'];
+
+$rcmail = rcube::get_instance(rcube::INIT_WITH_DB | rcube::INIT_WITH_PLUGINS);
+
+if (empty($imap_host)) {
+ $default_host = $rcmail->config->get('default_host');
+ if (is_array($default_host)) {
+ list($k,$v) = each($default_host);
+ $imap_host = is_numeric($k) ? $v : $k;
+ }
+ else {
+ $imap_host = $default_host;
+ }
+
+ // strip protocol prefix
+ $imap_host = preg_replace('!^[a-z]+://!', '', $imap_host);
+}
+
+if (empty($folder) || empty($imap_host)) {
+ print_usage();
+ exit;
+}
+
+// connect to database
+$db = $rcmail->get_dbh();
+$db->db_connect('r');
+if (!$db->is_connected() || $db->is_error())
+ die("No DB connection\n");
+
+
+// resolve folder_id
+if (!is_numeric($folder)) {
+ if (strpos($folder, '@')) {
+ list($mailbox, $domain) = explode('@', $folder);
+ list($username, $subpath) = explode('/', preg_replace('!^user/!', '', $mailbox), 2);
+ $folder_uri = 'imap://' . urlencode($username.'@'.$domain) . '@' . $imap_host . '/' . $subpath;
+ }
+ else {
+ die("Invalid mailbox identifier! Example: user/john.doe/Calendar at example.org\n");
+ }
+
+ print "Resolving folder $folder_uri...";
+ $sql_result = $db->query('SELECT * FROM `kolab_folders` WHERE `resource`=?', $folder_uri);
+ if ($sql_result && ($folder_data = $db->fetch_assoc($sql_result))) {
+ $folder_id = $folder_data['folder_id'];
+ print $folder_id;
+ }
+ print "\n";
+}
+else {
+ $folder_id = intval($folder);
+ $sql_result = $db->query('SELECT * FROM `kolab_folders` WHERE `folder_id`=?', $folder_id);
+ if ($sql_result) {
+ $folder_data = $db->fetch_assoc($sql_result);
+ }
+}
+
+if (empty($folder_data)) {
+ die("Can't find cache mailbox for '$folder'\n");
+}
+
+print "Querying cache for folder $folder_id ($folder_data[type])...\n";
+
+$extra_cols = array(
+ 'event' => array('dtstart','dtend'),
+ 'contact' => array('type'),
+);
+
+$cache_table = $db->table_name('kolab_cache_' . $folder_data['type']);
+$extra_cols_ = $extra_cols[$folder_data['type']] ?: array();
+$sql_arr = $db->fetch_assoc($db->query("SELECT COUNT(*) as cnt FROM `$cache_table` WHERE `folder_id`=?", intval($folder_id)));
+
+print "CTag = " . $folder_data['ctag'] . "\n";
+print "Lock = " . $folder_data['synclock'] . "\n";
+print "Count = " . $sql_arr['cnt'] . "\n";
+print "----------------------------------------------------------------------------------\n";
+print "<MSG>\t<UUID>\t<CHANGED>\t<DATA>\t<XML>\t";
+print join("\t", array_map(function($c) { return '<' . strtoupper($c) . '>'; }, $extra_cols_));
+print "\n----------------------------------------------------------------------------------\n";
+
+$result = $db->limitquery("SELECT * FROM `$cache_table` WHERE `folder_id`=?", 0, $opts['limit'], intval($folder_id));
+while ($result && ($sql_arr = $db->fetch_assoc($result))) {
+ print $sql_arr['msguid'] . "\t" . $sql_arr['uid'] . "\t" . $sql_arr['changed'];
+
+ // try to unserialize data block
+ $object = @unserialize(@base64_decode($sql_arr['data']));
+ print "\t" . ($object === false ? 'FAIL!' : ($object['uid'] == $sql_arr['uid'] ? 'OK' : '!!!'));
+
+ // check XML validity
+ $xml = simplexml_load_string($sql_arr['xml']);
+ print "\t" . ($xml === false ? 'FAIL!' : 'OK');
+
+ // print extra cols
+ array_walk($extra_cols_, function($c) use ($sql_arr) {
+ print "\t" . $sql_arr[$c];
+ });
+
+ print "\n";
+}
+
+print "----------------------------------------------------------------------------------\n";
+echo "Done.\n";
diff --git a/lib/plugins/libkolab/composer.json b/lib/plugins/libkolab/composer.json
index 8926037..b458df6 100644
--- a/lib/plugins/libkolab/composer.json
+++ b/lib/plugins/libkolab/composer.json
@@ -4,7 +4,7 @@
"description": "Plugin to setup a basic environment for the interaction with a Kolab server.",
"homepage": "http://git.kolab.org/roundcubemail-plugins-kolab/",
"license": "AGPLv3",
- "version": "1.1.0",
+ "version": "3.2.3",
"authors": [
{
"name": "Thomas Bruederli",
diff --git a/lib/plugins/libkolab/config.inc.php.dist b/lib/plugins/libkolab/config.inc.php.dist
index b043bb7..7efa8d1 100644
--- a/lib/plugins/libkolab/config.inc.php.dist
+++ b/lib/plugins/libkolab/config.inc.php.dist
@@ -3,56 +3,57 @@
/* Configuration for libkolab */
// Enable caching of Kolab objects in local database
-$rcmail_config['kolab_cache'] = true;
+$config['kolab_cache'] = true;
// Specify format version to write Kolab objects (must be a string value!)
-$rcmail_config['kolab_format_version'] = '3.0';
+$config['kolab_format_version'] = '3.0';
// Optional override of the URL to read and trigger Free/Busy information of Kolab users
// Defaults to https://<imap-server->/freebusy
-$rcmail_config['kolab_freebusy_server'] = 'https://<some-host>/<freebusy-path>';
+$config['kolab_freebusy_server'] = null;
// Enables listing of only subscribed folders. This e.g. will limit
// folders in calendar view or available addressbooks
-$rcmail_config['kolab_use_subscriptions'] = false;
+$config['kolab_use_subscriptions'] = false;
// List any of 'personal','shared','other' namespaces to be excluded from groupware folder listing
// example: array('other');
-$rcmail_config['kolab_skip_namespace'] = null;
+$config['kolab_skip_namespace'] = null;
// Enables the use of displayname folder annotations as introduced in KEP:?
// for displaying resource folder names (experimental!)
-$rcmail_config['kolab_custom_display_names'] = false;
+$config['kolab_custom_display_names'] = false;
// Configuration of HTTP requests.
// See http://pear.php.net/manual/en/package.http.http-request2.config.php
// for list of supported configuration options (array keys)
-$rcmail_config['kolab_http_request'] = array();
+$config['kolab_http_request'] = array();
// When kolab_cache is enabled Roundcube's messages cache will be redundant
// when working on kolab folders. Here we can:
// 2 - bypass messages/indexes cache completely
// 1 - bypass only messages, but use index cache
-$rcmail_config['kolab_messages_cache_bypass'] = 0;
+$config['kolab_messages_cache_bypass'] = 0;
// LDAP directory to find avilable users for folder sharing.
// Either contains an array with LDAP addressbook configuration or refers to entry in $config['ldap_public'].
// If not specified, the configuraton from 'kolab_auth_addressbook' will be used.
-$rcmail_config['kolab_users_directory'] = null;
+// Should be provided for multi-domain setups with placeholders like %dc, %d, %u, %fu or %dn.
+$config['kolab_users_directory'] = null;
// Filter to be used for resolving user folders in LDAP.
// Defaults to the 'kolab_auth_filter' configuration option.
-$rcmail_config['kolab_users_filter'] = '(&(objectclass=kolabInetOrgPerson)(|(uid=%u)(mail=%fu)))';
+$config['kolab_users_filter'] = '(&(objectclass=kolabInetOrgPerson)(|(uid=%u)(mail=%fu)))';
// Which property of the LDAP user record to use for user folder mapping in IMAP.
// Defaults to the 'kolab_auth_login' configuration option.
-$rcmail_config['kolab_users_id_attrib'] = null;
+$config['kolab_users_id_attrib'] = null;
// Use these attributes when searching users in LDAP
-$rcmail_config['kolab_users_search_attrib'] = array('cn','mail','alias');
+$config['kolab_users_search_attrib'] = array('cn','mail','alias');
// JSON-RPC endpoint configuration of the Bonnie web service providing historic data for groupware objects
-$rcmail_config['kolab_bonnie_api'] = array(
+$config['kolab_bonnie_api'] = array(
'uri' => 'https://<kolab-hostname>:8080/api/rpc',
'user' => 'webclient',
'pass' => 'Welcome2KolabSystems',
diff --git a/lib/plugins/libkolab/js/folderlist.js b/lib/plugins/libkolab/js/folderlist.js
index 1c8ce2f..62a60ef 100644
--- a/lib/plugins/libkolab/js/folderlist.js
+++ b/lib/plugins/libkolab/js/folderlist.js
@@ -68,7 +68,7 @@ function kolab_folderlist(node, p)
id = li.attr('id').replace(new RegExp('^'+p.id_prefix), '');
if (p.id_decode)
id = p.id_decode(id);
- node = search_results_widget.get_node(id),
+ node = search_results_widget.get_node(id);
has_children = node.children && node.children.length;
e.stopPropagation();
@@ -81,6 +81,11 @@ function kolab_folderlist(node, p)
li.children().first()
.toggleClass('subscribed')
.find('input[type=checkbox]').get(0).checked = true;
+
+ if (has_children && search_results[id].group == 'other user') {
+ li.find('ul li > div').addClass('subscribed')
+ .find('a.subscribed').attr('aria-checked', 'true');;
+ }
}
else if (!this.checked) {
return;
@@ -97,6 +102,11 @@ function kolab_folderlist(node, p)
li.remove();
}
+ // set partial subscription status
+ if (search_results[id].subscribed && search_results[id].parent && search_results[id].group == 'other') {
+ parent_subscription_status($(me.get_item(id, true)));
+ }
+
// set focus to cloned checkbox
if (rcube_event.is_keyboard(e)) {
$(me.get_item(id, true)).find('input[type=checkbox]').first().focus();
@@ -149,7 +159,8 @@ function kolab_folderlist(node, p)
prop = search_results[id],
parent_id = prop.parent || null,
has_children = node.children && node.children.length,
- dom_node = has_children ? li.children().first().clone(true, true) : li.children().first();
+ dom_node = has_children ? li.children().first().clone(true, true) : li.children().first(),
+ childs = [];
// find parent node and insert at the right place
if (parent_id && me.get_node(parent_id)) {
@@ -171,18 +182,58 @@ function kolab_folderlist(node, p)
.removeClass('virtual');
}
else {
+ // copy childs, too
+ if (has_children && prop.group == 'other user') {
+ for (var cid, j=0; j < node.children.length; j++) {
+ if ((cid = node.children[j].id) && search_results[cid]) {
+ childs.push(search_results_widget.get_node(cid));
+ }
+ }
+ }
+
// move this result item to the main list widget
me.insert({
id: id,
classes: [ prop.group || '' ],
virtual: prop.virtual,
html: dom_node,
+ level: node.level,
+ collapsed: true,
+ children: childs
}, parent_id, prop.group);
}
delete prop.html;
prop.active = active;
me.triggerEvent('insert-item', { id: id, data: prop, item: li });
+
+ // register childs, too
+ if (childs.length) {
+ for (var cid, j=0; j < node.children.length; j++) {
+ if ((cid = node.children[j].id) && search_results[cid]) {
+ prop = search_results[cid];
+ delete prop.html;
+ prop.active = false;
+ me.triggerEvent('insert-item', { id: cid, data: prop });
+ }
+ }
+ }
+ }
+
+ // update the given item's parent's (partial) subscription state
+ function parent_subscription_status(li)
+ {
+ var top_li = li.closest(me.container.children('li')),
+ all_childs = $('li > div:not(.treetoggle)', top_li),
+ subscribed = all_childs.filter('.subscribed').length;
+
+ if (subscribed == 0) {
+ top_li.children('div:first').removeClass('subscribed partial');
+ }
+ else {
+ top_li.children('div:first')
+ .addClass('subscribed')[subscribed < all_childs.length ? 'addClass' : 'removeClass']('partial');
+ }
}
// do some magic when search is performed on the widget
@@ -239,25 +290,60 @@ function kolab_folderlist(node, p)
}
});
- this.container.on('click', 'a.subscribed, span.subscribed', function(e){
+ this.container.on('click', 'a.subscribed, span.subscribed', function(e) {
var li = $(this).closest('li'),
id = li.attr('id').replace(new RegExp('^'+p.id_prefix), ''),
- div = li.children().first();
+ div = li.children().first(),
+ is_subscribed;
- if (me.is_search())
- id = id.replace(/--xsR$/, '');
+ if (me.is_search()) {
+ id = id.replace(/--xsR$/, '');
+ li = $(me.get_item(id, true));
+ div = $(div).add(li.children().first());
+ }
if (p.id_decode)
id = p.id_decode(id);
div.toggleClass('subscribed');
- $(this).attr('aria-checked', div.hasClass('subscribed') ? 'true' : 'false');
- me.triggerEvent('subscribe', { id: id, subscribed: div.hasClass('subscribed'), item: li });
+ is_subscribed = div.hasClass('subscribed');
+ $(this).attr('aria-checked', is_subscribed ? 'true' : 'false');
+ me.triggerEvent('subscribe', { id: id, subscribed: is_subscribed, item: li });
+
+ // update subscribe state of all 'virtual user' child folders
+ if (li.hasClass('other user')) {
+ $('ul li > div', li).each(function() {
+ $(this)[is_subscribed ? 'addClass' : 'removeClass']('subscribed');
+ $('.subscribed', div).attr('aria-checked', is_subscribed ? 'true' : 'false');
+ });
+ div.removeClass('partial');
+ }
+ // propagate subscription state to parent 'virtual user' folder
+ else if (li.closest('li.other.user').length) {
+ parent_subscription_status(li);
+ }
e.stopPropagation();
return false;
- })
+ });
+
+ this.container.on('click', 'a.remove', function(e) {
+ var li = $(this).closest('li'),
+ id = li.attr('id').replace(new RegExp('^'+p.id_prefix), '');
+
+ if (me.is_search()) {
+ id = id.replace(/--xsR$/, '');
+ li = $(me.get_item(id, true));
+ }
+ if (p.id_decode)
+ id = p.id_decode(id);
+
+ me.triggerEvent('remove', { id: id, item: li });
+
+ e.stopPropagation();
+ return false;
+ });
}
// link prototype from base class
diff --git a/lib/plugins/libkolab/lib/kolab_bonnie_api.php b/lib/plugins/libkolab/lib/kolab_bonnie_api.php
index 23dafd8..e8ac131 100644
--- a/lib/plugins/libkolab/lib/kolab_bonnie_api.php
+++ b/lib/plugins/libkolab/lib/kolab_bonnie_api.php
@@ -36,7 +36,7 @@ class kolab_bonnie_api
*/
public function __construct($config)
{
- $this->config = $confg;
+ $this->config = $config;
$this->client = new kolab_bonnie_api_client($config['uri'], $config['timeout'] ?: 5, (bool)$config['debug']);
diff --git a/lib/plugins/libkolab/lib/kolab_format.php b/lib/plugins/libkolab/lib/kolab_format.php
index ae7705c..625483b 100644
--- a/lib/plugins/libkolab/lib/kolab_format.php
+++ b/lib/plugins/libkolab/lib/kolab_format.php
@@ -47,6 +47,117 @@ abstract class kolab_format
const KTYPE_PREFIX = 'application/x-vnd.kolab.';
const PRODUCT_ID = 'Roundcube-libkolab-1.1';
+ // mapping table for valid PHP timezones not supported by libkolabxml
+ // basically the entire list of ftp://ftp.iana.org/tz/data/backward
+ protected static $timezone_map = array(
+ 'Africa/Asmera' => 'Africa/Asmara',
+ 'Africa/Timbuktu' => 'Africa/Abidjan',
+ 'America/Argentina/ComodRivadavia' => 'America/Argentina/Catamarca',
+ 'America/Atka' => 'America/Adak',
+ 'America/Buenos_Aires' => 'America/Argentina/Buenos_Aires',
+ 'America/Catamarca' => 'America/Argentina/Catamarca',
+ 'America/Coral_Harbour' => 'America/Atikokan',
+ 'America/Cordoba' => 'America/Argentina/Cordoba',
+ 'America/Ensenada' => 'America/Tijuana',
+ 'America/Fort_Wayne' => 'America/Indiana/Indianapolis',
+ 'America/Indianapolis' => 'America/Indiana/Indianapolis',
+ 'America/Jujuy' => 'America/Argentina/Jujuy',
+ 'America/Knox_IN' => 'America/Indiana/Knox',
+ 'America/Louisville' => 'America/Kentucky/Louisville',
+ 'America/Mendoza' => 'America/Argentina/Mendoza',
+ 'America/Porto_Acre' => 'America/Rio_Branco',
+ 'America/Rosario' => 'America/Argentina/Cordoba',
+ 'America/Virgin' => 'America/Port_of_Spain',
+ 'Asia/Ashkhabad' => 'Asia/Ashgabat',
+ 'Asia/Calcutta' => 'Asia/Kolkata',
+ 'Asia/Chungking' => 'Asia/Shanghai',
+ 'Asia/Dacca' => 'Asia/Dhaka',
+ 'Asia/Katmandu' => 'Asia/Kathmandu',
+ 'Asia/Macao' => 'Asia/Macau',
+ 'Asia/Saigon' => 'Asia/Ho_Chi_Minh',
+ 'Asia/Tel_Aviv' => 'Asia/Jerusalem',
+ 'Asia/Thimbu' => 'Asia/Thimphu',
+ 'Asia/Ujung_Pandang' => 'Asia/Makassar',
+ 'Asia/Ulan_Bator' => 'Asia/Ulaanbaatar',
+ 'Atlantic/Faeroe' => 'Atlantic/Faroe',
+ 'Atlantic/Jan_Mayen' => 'Europe/Oslo',
+ 'Australia/ACT' => 'Australia/Sydney',
+ 'Australia/Canberra' => 'Australia/Sydney',
+ 'Australia/LHI' => 'Australia/Lord_Howe',
+ 'Australia/NSW' => 'Australia/Sydney',
+ 'Australia/North' => 'Australia/Darwin',
+ 'Australia/Queensland' => 'Australia/Brisbane',
+ 'Australia/South' => 'Australia/Adelaide',
+ 'Australia/Tasmania' => 'Australia/Hobart',
+ 'Australia/Victoria' => 'Australia/Melbourne',
+ 'Australia/West' => 'Australia/Perth',
+ 'Australia/Yancowinna' => 'Australia/Broken_Hill',
+ 'Brazil/Acre' => 'America/Rio_Branco',
+ 'Brazil/DeNoronha' => 'America/Noronha',
+ 'Brazil/East' => 'America/Sao_Paulo',
+ 'Brazil/West' => 'America/Manaus',
+ 'Canada/Atlantic' => 'America/Halifax',
+ 'Canada/Central' => 'America/Winnipeg',
+ 'Canada/East-Saskatchewan' => 'America/Regina',
+ 'Canada/Eastern' => 'America/Toronto',
+ 'Canada/Mountain' => 'America/Edmonton',
+ 'Canada/Newfoundland' => 'America/St_Johns',
+ 'Canada/Pacific' => 'America/Vancouver',
+ 'Canada/Saskatchewan' => 'America/Regina',
+ 'Canada/Yukon' => 'America/Whitehorse',
+ 'Chile/Continental' => 'America/Santiago',
+ 'Chile/EasterIsland' => 'Pacific/Easter',
+ 'Cuba' => 'America/Havana',
+ 'Egypt' => 'Africa/Cairo',
+ 'Eire' => 'Europe/Dublin',
+ 'Europe/Belfast' => 'Europe/London',
+ 'Europe/Tiraspol' => 'Europe/Chisinau',
+ 'GB' => 'Europe/London',
+ 'GB-Eire' => 'Europe/London',
+ 'Greenwich' => 'Etc/GMT',
+ 'Hongkong' => 'Asia/Hong_Kong',
+ 'Iceland' => 'Atlantic/Reykjavik',
+ 'Iran' => 'Asia/Tehran',
+ 'Israel' => 'Asia/Jerusalem',
+ 'Jamaica' => 'America/Jamaica',
+ 'Japan' => 'Asia/Tokyo',
+ 'Kwajalein' => 'Pacific/Kwajalein',
+ 'Libya' => 'Africa/Tripoli',
+ 'Mexico/BajaNorte' => 'America/Tijuana',
+ 'Mexico/BajaSur' => 'America/Mazatlan',
+ 'Mexico/General' => 'America/Mexico_City',
+ 'NZ' => 'Pacific/Auckland',
+ 'NZ-CHAT' => 'Pacific/Chatham',
+ 'Navajo' => 'America/Denver',
+ 'PRC' => 'Asia/Shanghai',
+ 'Pacific/Ponape' => 'Pacific/Pohnpei',
+ 'Pacific/Samoa' => 'Pacific/Pago_Pago',
+ 'Pacific/Truk' => 'Pacific/Chuuk',
+ 'Pacific/Yap' => 'Pacific/Chuuk',
+ 'Poland' => 'Europe/Warsaw',
+ 'Portugal' => 'Europe/Lisbon',
+ 'ROC' => 'Asia/Taipei',
+ 'ROK' => 'Asia/Seoul',
+ 'Singapore' => 'Asia/Singapore',
+ 'Turkey' => 'Europe/Istanbul',
+ 'UCT' => 'Etc/UCT',
+ 'US/Alaska' => 'America/Anchorage',
+ 'US/Aleutian' => 'America/Adak',
+ 'US/Arizona' => 'America/Phoenix',
+ 'US/Central' => 'America/Chicago',
+ 'US/East-Indiana' => 'America/Indiana/Indianapolis',
+ 'US/Eastern' => 'America/New_York',
+ 'US/Hawaii' => 'Pacific/Honolulu',
+ 'US/Indiana-Starke' => 'America/Indiana/Knox',
+ 'US/Michigan' => 'America/Detroit',
+ 'US/Mountain' => 'America/Denver',
+ 'US/Pacific' => 'America/Los_Angeles',
+ 'US/Samoa' => 'Pacific/Pago_Pago',
+ 'Universal' => 'Etc/UTC',
+ 'W-SU' => 'Europe/Moscow',
+ 'Zulu' => 'Etc/UTC',
+ );
+
/**
* Factory method to instantiate a kolab_format object of the given type and version
*
@@ -63,7 +174,7 @@ abstract class kolab_format
if (!self::supports($version))
return PEAR::raiseError("No support for Kolab format version " . $version);
- $type = preg_replace('/configuration\.[a-z.]+$/', 'configuration', $type);
+ $type = preg_replace('/configuration\.[a-z._]+$/', 'configuration', $type);
$suffix = preg_replace('/[^a-z]+/', '', $type);
$classname = 'kolab_format_' . $suffix;
if (class_exists($classname))
@@ -112,7 +223,7 @@ abstract class kolab_format
if ($tz) $datetime->setTimezone($tz);
}
else if (is_string($datetime) && strlen($datetime)) {
- $datetime = new DateTime($datetime, $tz ?: null);
+ $datetime = $tz ? new DateTime($datetime, $tz) : new DateTime($datetime);
}
}
catch (Exception $e) {}
@@ -123,10 +234,15 @@ abstract class kolab_format
if (!$dateonly)
$result->setTime($datetime->format('G'), $datetime->format('i'), $datetime->format('s'));
- if ($tz && in_array($tz->getName(), array('UTC', 'GMT', '+00:00', 'Z')))
+ if ($tz && in_array($tz->getName(), array('UTC', 'GMT', '+00:00', 'Z'))) {
$result->setUTC(true);
- else if ($tz !== false)
- $result->setTimezone($tz->getName());
+ }
+ else if ($tz !== false) {
+ $tzid = $tz->getName();
+ if (array_key_exists($tzid, self::$timezone_map))
+ $tzid = self::$timezone_map[$tzid];
+ $result->setTimezone($tzid);
+ }
}
return $result;
diff --git a/lib/plugins/libkolab/lib/kolab_format_configuration.php b/lib/plugins/libkolab/lib/kolab_format_configuration.php
index 17b46a7..ceb7ebb 100644
--- a/lib/plugins/libkolab/lib/kolab_format_configuration.php
+++ b/lib/plugins/libkolab/lib/kolab_format_configuration.php
@@ -24,7 +24,7 @@
class kolab_format_configuration extends kolab_format
{
- public $CTYPE = 'application/x-vnd.kolab.configuration';
+ public $CTYPE = 'application/vnd.kolab+xml';
public $CTYPEv2 = 'application/x-vnd.kolab.configuration';
protected $objclass = 'Configuration';
@@ -32,12 +32,14 @@ class kolab_format_configuration extends kolab_format
protected $write_func = 'writeConfiguration';
private $type_map = array(
- 'category' => Configuration::TypeCategoryColor,
- 'dictionary' => Configuration::TypeDictionary,
- 'relation' => Configuration::TypeRelation,
- 'snippet' => Configuration::TypeSnippet,
+ 'category' => Configuration::TypeCategoryColor,
+ 'dictionary' => Configuration::TypeDictionary,
+ 'file_driver' => Configuration::TypeFileDriver,
+ 'relation' => Configuration::TypeRelation,
+ 'snippet' => Configuration::TypeSnippet,
);
+ private $driver_settings_fields = array('host', 'port', 'username', 'password');
/**
* Set properties to the kolabformat object
@@ -46,9 +48,6 @@ class kolab_format_configuration extends kolab_format
*/
public function set(&$object)
{
- // set common object properties
- parent::set($object);
-
// read type-specific properties
switch ($object['type']) {
case 'dictionary':
@@ -63,6 +62,21 @@ class kolab_format_configuration extends kolab_format
$this->obj = new Configuration($categories);
break;
+ case 'file_driver':
+ $driver = new FileDriver($object['driver'], $object['title']);
+
+ $driver->setEnabled((bool) $object['enabled']);
+
+ foreach ($this->driver_settings_fields as $field) {
+ $value = $object[$field];
+ if ($value !== null) {
+ $driver->{'set' . ucfirst($field)}($value);
+ }
+ }
+
+ $this->obj = new Configuration($driver);
+ break;
+
case 'relation':
$relation = new Relation(strval($object['name']), strval($object['category']));
@@ -109,7 +123,12 @@ class kolab_format_configuration extends kolab_format
}
// adjust content-type string
- $this->CTYPE = $this->CTYPEv2 = 'application/x-vnd.kolab.configuration.' . $object['type'];
+ $this->CTYPEv2 = 'application/x-vnd.kolab.configuration.' . $object['type'];
+
+ // reset old object data, otherwise set() will overwrite current data (#4095)
+ $this->xmldata = null;
+ // set common object properties
+ parent::set($object);
// cache this data
$this->data = $object;
@@ -157,6 +176,19 @@ class kolab_format_configuration extends kolab_format
// TODO: implement this
break;
+ case 'file_driver':
+ $driver = $this->obj->fileDriver();
+
+ $object['driver'] = $driver->driver();
+ $object['title'] = $driver->title();
+ $object['enabled'] = $driver->enabled();
+
+ foreach ($this->driver_settings_fields as $field) {
+ $object[$field] = $driver->{$field}();
+ }
+
+ break;
+
case 'relation':
$relation = $this->obj->relation();
@@ -192,7 +224,7 @@ class kolab_format_configuration extends kolab_format
// adjust content-type string
if ($object['type']) {
- $this->CTYPE = $this->CTYPEv2 = 'application/x-vnd.kolab.configuration.' . $object['type'];
+ $this->CTYPEv2 = 'application/x-vnd.kolab.configuration.' . $object['type'];
}
$this->data = $object;
@@ -241,6 +273,10 @@ class kolab_format_configuration extends kolab_format
else if (!empty($member['params']['message-id'])) {
$words[] = $member['params']['message-id'];
}
+ else {
+ // derive message identifier from URI
+ $words[] = md5($url);
+ }
}
return $words;
diff --git a/lib/plugins/libkolab/lib/kolab_format_event.php b/lib/plugins/libkolab/lib/kolab_format_event.php
index c233f44..8cad89a 100644
--- a/lib/plugins/libkolab/lib/kolab_format_event.php
+++ b/lib/plugins/libkolab/lib/kolab_format_event.php
@@ -96,11 +96,13 @@ class kolab_format_event extends kolab_format_xcal
// save recurrence exceptions
if (is_array($object['recurrence']) && $object['recurrence']['EXCEPTIONS']) {
$vexceptions = new vectorevent;
- foreach((array)$object['recurrence']['EXCEPTIONS'] as $exception) {
+ foreach((array)$object['recurrence']['EXCEPTIONS'] as $i => $exception) {
$exevent = new kolab_format_event;
- $exevent->set($this->compact_exception($exception, $object)); // only save differing values
+ $exevent->set(($compacted = $this->compact_exception($exception, $object))); // only save differing values
$exevent->obj->setRecurrenceID(self::get_datetime($exception['start'], null, true), (bool)$exception['thisandfuture']);
$vexceptions->push($exevent->obj);
+ // write cleaned-up exception data back to memory/cache
+ $object['recurrence']['EXCEPTIONS'][$i] = $this->expand_exception($compacted, $object);
}
$this->obj->setExceptions($vexceptions);
}
@@ -217,6 +219,12 @@ class kolab_format_event extends kolab_format_xcal
}
}
+ foreach ($master as $prop => $value) {
+ if (isset($exception[$prop]) && gettype($exception[$prop]) == gettype($value) && $exception[$prop] == $value) {
+ unset($exception[$prop]);
+ }
+ }
+
return $exception;
}
diff --git a/lib/plugins/libkolab/lib/kolab_format_xcal.php b/lib/plugins/libkolab/lib/kolab_format_xcal.php
index 421ee92..ad54505 100644
--- a/lib/plugins/libkolab/lib/kolab_format_xcal.php
+++ b/lib/plugins/libkolab/lib/kolab_format_xcal.php
@@ -237,7 +237,7 @@ abstract class kolab_format_xcal extends kolab_format
if ($type == 'EMAIL') {
$valarm['attendees'] = array();
- $attvec = $this->obj->attendees();
+ $attvec = $alarm->attendees();
for ($j=0; $j < $attvec->size(); $j++) {
$cr = $attvec->get($j);
$valarm['attendees'][] = $cr->email();
@@ -364,14 +364,17 @@ abstract class kolab_format_xcal extends kolab_format
$cr = new ContactReference(ContactReference::EmailReference, $attendee['email']);
$cr->setName($attendee['name']);
+ // set attendee RSVP if missing
+ if (!isset($attendee['rsvp'])) {
+ $object['attendees'][$i]['rsvp'] = $attendee['rsvp'] = true;
+ }
+
$att = new Attendee;
$att->setContact($cr);
$att->setPartStat($this->part_status_map[$attendee['status']]);
$att->setRole($this->role_map[$attendee['role']] ? $this->role_map[$attendee['role']] : kolabformat::Required);
$att->setCutype($this->cutype_map[$attendee['cutype']] ? $this->cutype_map[$attendee['cutype']] : kolabformat::CutypeIndividual);
- $att->setRSVP((bool)$attendee['rsvp'] || $reschedule);
-
- $object['attendees'][$i]['rsvp'] = $attendee['rsvp'] || $reschedule;
+ $att->setRSVP((bool)$attendee['rsvp']);
if (!empty($attendee['delegated-from'])) {
$vdelegators = new vectorcontactref;
diff --git a/lib/plugins/libkolab/lib/kolab_storage.php b/lib/plugins/libkolab/lib/kolab_storage.php
index 7287fc2..47c1e4b 100644
--- a/lib/plugins/libkolab/lib/kolab_storage.php
+++ b/lib/plugins/libkolab/lib/kolab_storage.php
@@ -35,6 +35,11 @@ class kolab_storage
const UID_KEY_PRIVATE = '/private/vendor/kolab/uniqueid';
const UID_KEY_CYRUS = '/shared/vendor/cmu/cyrus-imapd/uniqueid';
+ const ERROR_IMAP_CONN = 1;
+ const ERROR_CACHE_DB = 2;
+ const ERROR_NO_PERMISSION = 3;
+ const ERROR_INVALID_FOLDER = 4;
+
public static $version = '3.0';
public static $last_error;
public static $encode_ids = false;
@@ -139,7 +144,6 @@ class kolab_storage
return self::$ldap;
}
-
/**
* Get a list of storage folders for the given data type
*
@@ -154,7 +158,7 @@ class kolab_storage
if (self::setup()) {
foreach ((array)self::list_folders('', '*', $type, $subscribed, $folderdata) as $foldername) {
- $folders[$foldername] = new kolab_storage_folder($foldername, $folderdata[$foldername]);
+ $folders[$foldername] = new kolab_storage_folder($foldername, $type, $folderdata[$foldername]);
}
}
@@ -171,26 +175,26 @@ class kolab_storage
{
if (self::setup()) {
foreach ((array)self::list_folders('', '*', $type . '.default', false, $folderdata) as $foldername) {
- return new kolab_storage_folder($foldername, $folderdata[$foldername]);
+ return new kolab_storage_folder($foldername, $type, $folderdata[$foldername]);
}
}
return null;
}
-
/**
* Getter for a specific storage folder
*
- * @param string IMAP folder to access (UTF7-IMAP)
+ * @param string IMAP folder to access (UTF7-IMAP)
+ * @param string Expected folder type
+ *
* @return object kolab_storage_folder The folder object
*/
- public static function get_folder($folder)
+ public static function get_folder($folder, $type = null)
{
- return self::setup() ? new kolab_storage_folder($folder) : null;
+ return self::setup() ? new kolab_storage_folder($folder, $type) : null;
}
-
/**
* Getter for a single Kolab object, identified by its UID.
* This will search all folders storing objects of the given type.
@@ -203,11 +207,11 @@ class kolab_storage
{
self::setup();
$folder = null;
- foreach ((array)self::list_folders('', '*', $type) as $foldername) {
+ foreach ((array)self::list_folders('', '*', $type, null, $folderdata) as $foldername) {
if (!$folder)
- $folder = new kolab_storage_folder($foldername);
+ $folder = new kolab_storage_folder($foldername, $type, $folderdata[$foldername]);
else
- $folder->set_folder($foldername);
+ $folder->set_folder($foldername, $type, $folderdata[$foldername]);
if ($object = $folder->get_object($uid, '*'))
return $object;
@@ -230,11 +234,11 @@ class kolab_storage
$folder = null;
$result = array();
- foreach ((array)self::list_folders('', '*', $type) as $foldername) {
+ foreach ((array)self::list_folders('', '*', $type, null, $folderdata) as $foldername) {
if (!$folder)
- $folder = new kolab_storage_folder($foldername);
+ $folder = new kolab_storage_folder($foldername, $type, $folderdata[$foldername]);
else
- $folder->set_folder($foldername);
+ $folder->set_folder($foldername, $type, $folderdata[$foldername]);
foreach ($folder->select($query, '*') as $object) {
$result[] = $object;
@@ -245,13 +249,16 @@ class kolab_storage
}
/**
- *
+ * Returns Free-busy server URL
*/
public static function get_freebusy_server()
{
- return unslashify(self::$config->get('kolab_freebusy_server', 'https://' . $_SESSION['imap_host'] . '/freebusy'));
- }
+ $url = 'https://' . $_SESSION['imap_host'] . '/freebusy';
+ $url = self::$config->get('kolab_freebusy_server', $url);
+ $url = rcube_utils::resolve_url($url);
+ return unslashify($url);
+ }
/**
* Compose an URL to query the free/busy status for the given user
@@ -261,7 +268,6 @@ class kolab_storage
return self::get_freebusy_server() . '/' . $email . '.ifb';
}
-
/**
* Creates folder ID from folder name
*
@@ -276,7 +282,6 @@ class kolab_storage
asciiwords(strtr($folder, '/.-', '___'));
}
-
/**
* Encode the given ID to a safe ascii representation
*
@@ -300,7 +305,6 @@ class kolab_storage
return base64_decode(str_pad(strtr($id, '-_', '+/'), strlen($id) % 4, '=', STR_PAD_RIGHT));
}
-
/**
* Return the (first) path of the requested IMAP namespace
*
@@ -403,13 +407,13 @@ class kolab_storage
'oldname' => $oldname, 'newname' => $newname));
$oldfolder = self::get_folder($oldname);
- $active = self::folder_is_active($oldname);
- $success = self::$imap->rename_folder($oldname, $newname);
+ $active = self::folder_is_active($oldname);
+ $success = self::$imap->rename_folder($oldname, $newname);
self::$last_error = self::$imap->get_error_str();
// pass active state to new folder name
if ($success && $active) {
- self::set_state($oldnam, false);
+ self::set_state($oldname, false);
self::set_state($newname, true);
}
@@ -901,7 +905,7 @@ class kolab_storage
!self::folder_is_subscribed($foldername, true) &&
!in_array(self::$imap->folder_namespace($foldername), (array)$exclude_ns)
) {
- $folders[] = new kolab_storage_folder($foldername, $folderdata[$foldername]);
+ $folders[] = new kolab_storage_folder($foldername, $type, $folderdata[$foldername]);
}
}
@@ -974,7 +978,7 @@ class kolab_storage
$parent_parent = join($delim, $path);
if (!$refs[$parent]) {
if ($folder->type && self::folder_type($parent) == $folder->type) {
- $refs[$parent] = new kolab_storage_folder($parent, $folder->type);
+ $refs[$parent] = new kolab_storage_folder($parent, $folder->type, $folder->type);
$refs[$parent]->parent = $parent_parent;
}
else if ($parent_parent == $other_ns) {
@@ -1049,7 +1053,8 @@ class kolab_storage
foreach ((array)self::$imap->get_metadata('%', $type_keys) as $folder => $metadata) {
if (!in_array($folder, $blacklist)) {
$folderdata[$folder] = $metadata;
- if ($data = self::$imap->get_metadata($folder.$delimiter.'*', $type_keys)) {
+ $opts = self::$imap->folder_attributes($folder);
+ if (!in_array('\\HasNoChildren', $opts) && ($data = self::$imap->get_metadata($folder.$delimiter.'*', $type_keys))) {
$folderdata += $data;
}
}
@@ -1085,7 +1090,7 @@ class kolab_storage
return $types[self::CTYPE_KEY_PRIVATE];
}
else if (!empty($types[self::CTYPE_KEY])) {
- list($ctype, $suffix) = explode('.', $types[self::CTYPE_KEY]);
+ list($ctype, ) = explode('.', $types[self::CTYPE_KEY]);
return $ctype;
}
return null;
@@ -1104,8 +1109,10 @@ class kolab_storage
self::setup();
// return in-memory cached result
- if (is_array(self::$typedata['*']) && array_key_exists($folder, self::$typedata['*'])) {
- return self::$typedata['*'][$folder];
+ foreach (self::$typedata as $typedata) {
+ if (array_key_exists($folder, $typedata)) {
+ return $typedata[$folder];
+ }
}
$metadata = self::$imap->get_metadata($folder, array(self::CTYPE_KEY, self::CTYPE_KEY_PRIVATE));
@@ -1190,7 +1197,7 @@ class kolab_storage
}
}
else if (self::$imap->subscribe($folder)) {
- self::$subscriptions === null;
+ self::$subscriptions = null;
return true;
}
@@ -1218,7 +1225,7 @@ class kolab_storage
return true;
}
else if (self::$imap->unsubscribe($folder)) {
- self::$subscriptions === null;
+ self::$subscriptions = null;
return true;
}
@@ -1461,7 +1468,7 @@ class kolab_storage
$user_attrib = self::$config->get('kolab_users_id_attrib', self::$config->get('kolab_auth_login', 'mail'));
array_walk($results, function(&$user, $dn) use ($root, $user_attrib) {
- list($localpart, $domain) = explode('@', $user[$user_attrib]);
+ list($localpart, ) = explode('@', $user[$user_attrib]);
$user['kolabtargetfolder'] = $root . $localpart;
});
@@ -1534,6 +1541,16 @@ class kolab_storage
$folders[$foldername] = new kolab_storage_folder_user($foldername, $other_ns);
}
}
+
+ // for every (subscribed) user folder, list all (unsubscribed) subfolders
+ foreach ($folders as $userfolder) {
+ foreach ((array)self::list_folders($userfolder->name . $delimiter, '*', $type, false, $folderdata) as $foldername) {
+ if (!$folders[$foldername]) {
+ $folders[$foldername] = new kolab_storage_folder($foldername, $type, $folderdata[$foldername]);
+ $userfolder->children[] = $folders[$foldername];
+ }
+ }
+ }
}
return $folders;
@@ -1549,8 +1566,6 @@ class kolab_storage
{
$db = rcmail::get_instance()->get_dbh();
$prefix = 'imap://' . urlencode($args['username']) . '@' . $args['host'] . '/%';
- $db->query("DELETE FROM " . $db->table_name('kolab_folders') . " WHERE resource LIKE ?", $prefix);
+ $db->query("DELETE FROM " . $db->table_name('kolab_folders', true) . " WHERE `resource` LIKE ?", $prefix);
}
-
}
-
diff --git a/lib/plugins/libkolab/lib/kolab_storage_cache.php b/lib/plugins/libkolab/lib/kolab_storage_cache.php
index d56f04d..227fa4e 100644
--- a/lib/plugins/libkolab/lib/kolab_storage_cache.php
+++ b/lib/plugins/libkolab/lib/kolab_storage_cache.php
@@ -26,6 +26,8 @@ class kolab_storage_cache
{
const DB_DATE_FORMAT = 'Y-m-d H:i:s';
+ public $sync_complete = false;
+
protected $db;
protected $imap;
protected $folder;
@@ -46,6 +48,7 @@ class kolab_storage_cache
protected $extra_cols = array();
protected $order_by = null;
protected $limit = null;
+ protected $error = 0;
/**
@@ -78,6 +81,7 @@ class kolab_storage_cache
$this->db = $rcmail->get_dbh();
$this->imap = $rcmail->get_storage();
$this->enabled = $rcmail->config->get('kolab_cache', false);
+ $this->folders_table = $this->db->table_name('kolab_folders');
if ($this->enabled) {
// always read folder cache and lock state from DB master
@@ -96,8 +100,7 @@ class kolab_storage_cache
*/
public function select_by_id($folder_id)
{
- $folders_table = $this->db->table_name('kolab_folders');
- $sql_arr = $this->db->fetch_assoc($this->db->query("SELECT * FROM $folders_table WHERE folder_id=?", $folder_id));
+ $sql_arr = $this->db->fetch_assoc($this->db->query("SELECT * FROM `{$this->folders_table}` WHERE `folder_id` = ?", $folder_id));
if ($sql_arr) {
$this->metadata = $sql_arr;
$this->folder_id = $sql_arr['folder_id'];
@@ -118,14 +121,13 @@ class kolab_storage_cache
{
$this->folder = $storage_folder;
- if (empty($this->folder->name)) {
+ if (empty($this->folder->name) || !$this->folder->valid) {
$this->ready = false;
return;
}
// compose fully qualified ressource uri for this instance
$this->resource_uri = $this->folder->get_resource_uri();
- $this->folders_table = $this->db->table_name('kolab_folders');
$this->cache_table = $this->db->table_name('kolab_cache_' . $this->folder->type);
$this->ready = $this->enabled && !empty($this->folder->type);
$this->folder_id = null;
@@ -149,6 +151,16 @@ class kolab_storage_cache
}
/**
+ * Returns code of last error
+ *
+ * @return int Error code
+ */
+ public function get_error()
+ {
+ return $this->error;
+ }
+
+ /**
* Synchronize local cache data with remote
*/
public function synchronize()
@@ -158,7 +170,14 @@ class kolab_storage_cache
return;
// increase time limit
- @set_time_limit($this->max_sync_lock_time);
+ @set_time_limit($this->max_sync_lock_time - 60);
+
+ // get effective time limit we have for synchronization (~70% of the execution time)
+ $time_limit = ini_get('max_execution_time') * 0.7;
+ $sync_start = time();
+
+ // assume sync will be completed
+ $this->sync_complete = true;
if (!$this->ready) {
// kolab cache is disabled, synchronize IMAP mailbox cache only
@@ -188,20 +207,26 @@ class kolab_storage_cache
// read cache index
$sql_result = $this->db->query(
- "SELECT msguid, uid FROM $this->cache_table WHERE folder_id=?",
+ "SELECT `msguid`, `uid` FROM `{$this->cache_table}` WHERE `folder_id` = ?",
$this->folder_id
);
$old_index = array();
while ($sql_arr = $this->db->fetch_assoc($sql_result)) {
$old_index[] = $sql_arr['msguid'];
- $this->uid2msg[$sql_arr['uid']] = $sql_arr['msguid'];
}
// fetch new objects from imap
+ $i = 0;
foreach (array_diff($imap_index, $old_index) as $msguid) {
if ($object = $this->folder->read_object($msguid, '*')) {
$this->_extended_insert($msguid, $object);
+
+ // check time limit and abort sync if running too long
+ if (++$i % 50 == 0 && time() - $sync_start > $time_limit) {
+ $this->sync_complete = false;
+ break;
+ }
}
}
$this->_extended_insert(0, null);
@@ -211,13 +236,15 @@ class kolab_storage_cache
if (!empty($del_index)) {
$quoted_ids = join(',', array_map(array($this->db, 'quote'), $del_index));
$this->db->query(
- "DELETE FROM $this->cache_table WHERE folder_id=? AND msguid IN ($quoted_ids)",
+ "DELETE FROM `{$this->cache_table}` WHERE `folder_id` = ? AND `msguid` IN ($quoted_ids)",
$this->folder_id
);
}
// update ctag value (will be written to database in _sync_unlock())
- $this->metadata['ctag'] = $this->folder->get_ctag();
+ if ($this->sync_complete) {
+ $this->metadata['ctag'] = $this->folder->get_ctag();
+ }
}
$this->bypass(false);
@@ -227,6 +254,7 @@ class kolab_storage_cache
}
}
+ $this->check_error();
$this->synched = time();
}
@@ -243,7 +271,12 @@ class kolab_storage_cache
{
// delegate to another cache instance
if ($foldername && $foldername != $this->folder->name) {
- return kolab_storage::get_folder($foldername)->cache->get($msguid, $type);
+ $success = false;
+ if ($targetfolder = kolab_storage::get_folder($foldername)) {
+ $success = $targetfolder->cache->get($msguid, $type);
+ $this->error = $targetfolder->cache->get_error();
+ }
+ return $success;
}
// load object if not in memory
@@ -252,8 +285,8 @@ class kolab_storage_cache
$this->_read_folder_data();
$sql_result = $this->db->query(
- "SELECT * FROM $this->cache_table ".
- "WHERE folder_id=? AND msguid=?",
+ "SELECT * FROM `{$this->cache_table}` ".
+ "WHERE `folder_id` = ? AND `msguid` = ?",
$this->folder_id,
$msguid
);
@@ -265,11 +298,14 @@ class kolab_storage_cache
// fetch from IMAP if not present in cache
if (empty($this->objects[$msguid])) {
- $result = $this->_fetch(array($msguid), $type, $foldername);
- $this->objects = array($msguid => $result[0]); // store only this object in memory (#2827)
+ if ($object = $this->folder->read_object($msguid, $type ?: '*', $foldername)) {
+ $this->objects = array($msguid => $object);
+ $this->set($msguid, $object);
+ }
}
}
+ $this->check_error();
return $this->objects[$msguid];
}
@@ -289,14 +325,17 @@ class kolab_storage_cache
// delegate to another cache instance
if ($foldername && $foldername != $this->folder->name) {
- kolab_storage::get_folder($foldername)->cache->set($msguid, $object);
- return;
+ if ($targetfolder = kolab_storage::get_folder($foldername)) {
+ $targetfolder->cache->set($msguid, $object);
+ $this->error = $targetfolder->cache->get_error();
+ }
+ return;
}
// remove old entry
if ($this->ready) {
$this->_read_folder_data();
- $this->db->query("DELETE FROM $this->cache_table WHERE folder_id=? AND msguid=?",
+ $this->db->query("DELETE FROM `{$this->cache_table}` WHERE `folder_id` = ? AND `msguid` = ?",
$this->folder_id, $msguid);
}
@@ -308,6 +347,8 @@ class kolab_storage_cache
// ...or set in-memory cache to false
$this->objects[$msguid] = $object;
}
+
+ $this->check_error();
}
@@ -343,13 +384,13 @@ class kolab_storage_cache
$cols[$idx] = "$col = ?";
}
- $query = "UPDATE $this->cache_table SET " . implode(', ', $cols)
- . " WHERE folder_id = ? AND msguid = ?";
+ $query = "UPDATE `{$this->cache_table}` SET " . implode(', ', $cols)
+ . " WHERE `folder_id` = ? AND `msguid` = ?";
$args[] = $this->folder_id;
$args[] = $olduid;
}
else {
- $query = "INSERT INTO $this->cache_table (created, " . implode(', ', $cols)
+ $query = "INSERT INTO `{$this->cache_table}` (`created`, " . implode(', ', $cols)
. ") VALUES (" . $this->db->now() . str_repeat(', ?', count($cols)) . ")";
}
@@ -366,6 +407,8 @@ class kolab_storage_cache
// keep a copy in memory for fast access
$this->objects = array($msguid => $object);
$this->uid2msg = array($object['uid'] => $msguid);
+
+ $this->check_error();
}
@@ -374,20 +417,21 @@ class kolab_storage_cache
*
* @param string Entry's IMAP message UID
* @param string Entry's Object UID
- * @param string Target IMAP folder to move it to
+ * @param object kolab_storage_folder Target storage folder instance
*/
- public function move($msguid, $uid, $target_folder)
+ public function move($msguid, $uid, $target)
{
if ($this->ready) {
- $target = kolab_storage::get_folder($target_folder);
+ // clear cached uid mapping and force new lookup
+ unset($target->cache->uid2msg[$uid]);
// resolve new message UID in target folder
if ($new_msguid = $target->cache->uid2msguid($uid)) {
$this->_read_folder_data();
$this->db->query(
- "UPDATE $this->cache_table SET folder_id=?, msguid=? ".
- "WHERE folder_id=? AND msguid=?",
+ "UPDATE `{$this->cache_table}` SET `folder_id` = ?, `msguid` = ? ".
+ "WHERE `folder_id` = ? AND `msguid` = ?",
$target->cache->get_folder_id(),
$new_msguid,
$this->folder_id,
@@ -404,13 +448,14 @@ class kolab_storage_cache
}
unset($this->uid2msg[$uid]);
+ $this->check_error();
}
/**
* Remove all objects from local cache
*/
- public function purge($type = null)
+ public function purge()
{
if (!$this->ready) {
return true;
@@ -419,7 +464,7 @@ class kolab_storage_cache
$this->_read_folder_data();
$result = $this->db->query(
- "DELETE FROM $this->cache_table WHERE folder_id=?",
+ "DELETE FROM `{$this->cache_table}` WHERE `folder_id` = ?",
$this->folder_id
);
@@ -437,15 +482,20 @@ class kolab_storage_cache
return;
}
- $target = kolab_storage::get_folder($new_folder);
+ if ($target = kolab_storage::get_folder($new_folder)) {
+ // resolve new message UID in target folder
+ $this->db->query(
+ "UPDATE `{$this->folders_table}` SET `resource` = ? ".
+ "WHERE `resource` = ?",
+ $target->get_resource_uri(),
+ $this->resource_uri
+ );
- // resolve new message UID in target folder
- $this->db->query(
- "UPDATE $this->folders_table SET resource=? ".
- "WHERE resource=?",
- $target->get_resource_uri(),
- $this->resource_uri
- );
+ $this->check_error();
+ }
+ else {
+ $this->error = kolab_storage::ERROR_IMAP_CONN;
+ }
}
/**
@@ -466,8 +516,8 @@ class kolab_storage_cache
// fetch full object data on one query if a small result set is expected
$fetchall = !$uids && ($this->limit ? $this->limit[0] : $this->count($query)) < 500;
- $sql_query = "SELECT " . ($fetchall ? '*' : 'msguid AS _msguid, uid') . " FROM $this->cache_table ".
- "WHERE folder_id=? " . $this->_sql_where($query);
+ $sql_query = "SELECT " . ($fetchall ? '*' : '`msguid` AS `_msguid`, `uid`') . " FROM `{$this->cache_table}` ".
+ "WHERE `folder_id` = ? " . $this->_sql_where($query);
if (!empty($this->order_by)) {
$sql_query .= ' ORDER BY ' . $this->order_by;
}
@@ -510,6 +560,7 @@ class kolab_storage_cache
}
if ($index->is_error()) {
+ $this->check_error();
if ($uids) {
return null;
}
@@ -532,6 +583,8 @@ class kolab_storage_cache
}
}
+ $this->check_error();
+
return $result;
}
@@ -549,8 +602,8 @@ class kolab_storage_cache
$this->_read_folder_data();
$sql_result = $this->db->query(
- "SELECT COUNT(*) AS numrows FROM $this->cache_table ".
- "WHERE folder_id=? " . $this->_sql_where($query),
+ "SELECT COUNT(*) AS `numrows` FROM `{$this->cache_table}` ".
+ "WHERE `folder_id` = ?" . $this->_sql_where($query),
$this->folder_id
);
@@ -574,6 +627,7 @@ class kolab_storage_cache
}
if ($index->is_error()) {
+ $this->check_error();
return null;
}
@@ -582,6 +636,7 @@ class kolab_storage_cache
$count = $index->count();
}
+ $this->check_error();
return $count;
}
@@ -591,7 +646,7 @@ class kolab_storage_cache
public function set_order_by($sortcols)
{
if (!empty($sortcols)) {
- $this->order_by = join(', ', (array)$sortcols);
+ $this->order_by = '`' . join('`, `', (array)$sortcols) . '`';
}
else {
$this->order_by = null;
@@ -787,6 +842,40 @@ class kolab_storage_cache
$line = '';
if ($object) {
$sql_data = $this->_serialize($object);
+
+ // Skip multifolder insert for Oracle, we can't put long data inline
+ if ($this->db->db_provider == 'oracle') {
+ $extra_cols = '';
+ if ($this->extra_cols) {
+ $extra_cols = array_map(function($n) { return "`{$n}`"; }, $this->extra_cols);
+ $extra_cols = ', ' . join(', ', $extra_cols);
+ $extra_args = str_repeat(', ?', count($this->extra_cols));
+ }
+
+ $params = array($this->folder_id, $msguid, $object['uid'], $sql_data['changed'],
+ $sql_data['data'], $sql_data['xml'], $sql_data['tags'], $sql_data['words']);
+
+ foreach ($this->extra_cols as $col) {
+ $params[] = $sql_data[$col];
+ }
+
+ $result = $this->db->query(
+ "INSERT INTO `{$this->cache_table}` "
+ . " (`folder_id`, `msguid`, `uid`, `created`, `changed`, `data`, `xml`, `tags`, `words` $extra_cols)"
+ . " VALUES (?, ?, ?, " . $this->db->now() . ", ?, ?, ?, ?, ? $extra_args)",
+ $params
+ );
+
+ if (!$this->db->affected_rows($result)) {
+ rcube::raise_error(array(
+ 'code' => 900, 'type' => 'php',
+ 'message' => "Failed to write to kolab cache"
+ ), true);
+ }
+
+ return;
+ }
+
$values = array(
$this->db->quote($this->folder_id),
$this->db->quote($msguid),
@@ -805,12 +894,18 @@ class kolab_storage_cache
}
if ($buffer && (!$msguid || (strlen($buffer) + strlen($line) > $this->max_sql_packet()))) {
- $extra_cols = $this->extra_cols ? ', ' . join(', ', $this->extra_cols) : '';
+ $extra_cols = '';
+ if ($this->extra_cols) {
+ $extra_cols = array_map(function($n) { return "`{$n}`"; }, $this->extra_cols);
+ $extra_cols = ', ' . join(', ', $extra_cols);
+ }
+
$result = $this->db->query(
- "INSERT INTO $this->cache_table ".
- " (folder_id, msguid, uid, created, changed, data, xml, tags, words $extra_cols)".
+ "INSERT INTO `{$this->cache_table}` ".
+ " (`folder_id`, `msguid`, `uid`, `created`, `changed`, `data`, `xml`, `tags`, `words` $extra_cols)".
" VALUES $buffer"
);
+
if (!$this->db->affected_rows($result)) {
rcube::raise_error(array(
'code' => 900, 'type' => 'php',
@@ -847,13 +942,20 @@ class kolab_storage_cache
if (!empty($this->folder_id) || !$this->ready)
return;
- $sql_arr = $this->db->fetch_assoc($this->db->query("SELECT folder_id, synclock, ctag FROM $this->folders_table WHERE resource=?", $this->resource_uri));
+ $sql_arr = $this->db->fetch_assoc($this->db->query(
+ "SELECT `folder_id`, `synclock`, `ctag`"
+ . " FROM `{$this->folders_table}` WHERE `resource` = ?",
+ $this->resource_uri
+ ));
+
if ($sql_arr) {
$this->metadata = $sql_arr;
$this->folder_id = $sql_arr['folder_id'];
}
else {
- $this->db->query("INSERT INTO $this->folders_table (resource, type) VALUES (?, ?)", $this->resource_uri, $this->folder->type);
+ $this->db->query("INSERT INTO `{$this->folders_table}` (`resource`, `type`)"
+ . " VALUES (?, ?)", $this->resource_uri, $this->folder->type);
+
$this->folder_id = $this->db->insert_id('kolab_folders');
$this->metadata = array();
}
@@ -868,24 +970,29 @@ class kolab_storage_cache
return;
$this->_read_folder_data();
- $sql_query = "SELECT synclock, ctag FROM $this->folders_table WHERE folder_id=?";
// abort if database is not set-up
if ($this->db->is_error()) {
+ $this->check_error();
$this->ready = false;
return;
}
- $this->synclock = true;
+ $read_query = "SELECT `synclock`, `ctag` FROM `{$this->folders_table}` WHERE `folder_id` = ?";
+ $write_query = "UPDATE `{$this->folders_table}` SET `synclock` = ? WHERE `folder_id` = ? AND `synclock` = ?";
- // wait if locked (expire locks after 10 minutes)
- while ($this->metadata && intval($this->metadata['synclock']) > 0 && $this->metadata['synclock'] + $this->max_sync_lock_time > time()) {
+ // wait if locked (expire locks after 10 minutes) ...
+ // ... or if setting lock fails (another process meanwhile set it)
+ while (
+ (intval($this->metadata['synclock']) + $this->max_sync_lock_time > time()) ||
+ (($res = $this->db->query($write_query, time(), $this->folder_id, intval($this->metadata['synclock']))) &&
+ !($affected = $this->db->affected_rows($res)))
+ ) {
usleep(500000);
- $this->metadata = $this->db->fetch_assoc($this->db->query($sql_query, $this->folder_id));
+ $this->metadata = $this->db->fetch_assoc($this->db->query($read_query, $this->folder_id));
}
- // set lock
- $this->db->query("UPDATE $this->folders_table SET synclock = ? WHERE folder_id = ?", time(), $this->folder_id);
+ $this->synclock = $affected > 0;
}
/**
@@ -897,7 +1004,7 @@ class kolab_storage_cache
return;
$this->db->query(
- "UPDATE $this->folders_table SET synclock = 0, ctag = ? WHERE folder_id = ?",
+ "UPDATE `{$this->folders_table}` SET `synclock` = 0, `ctag` = ? WHERE `folder_id` = ?",
$this->metadata['ctag'],
$this->folder_id
);
@@ -906,6 +1013,22 @@ class kolab_storage_cache
}
/**
+ * Check IMAP connection error state
+ */
+ protected function check_error()
+ {
+ if (($err_code = $this->imap->get_error_code()) < 0) {
+ $this->error = kolab_storage::ERROR_IMAP_CONN;
+ if (($res_code = $this->imap->get_response_code()) !== 0 && in_array($res_code, array(rcube_storage::NOPERM, rcube_storage::READONLY))) {
+ $this->error = kolab_storage::ERROR_NO_PERMISSION;
+ }
+ }
+ else if ($this->db->is_error()) {
+ $this->error = kolab_storage::ERROR_CACHE_DB;
+ }
+ }
+
+ /**
* Resolve an object UID into an IMAP message UID
*
* @param string Kolab object UID
@@ -919,8 +1042,8 @@ class kolab_storage_cache
$this->_read_folder_data();
$sql_result = $this->db->query(
- "SELECT msguid FROM $this->cache_table ".
- "WHERE folder_id=? AND uid=? ORDER BY msguid DESC",
+ "SELECT `msguid` FROM `{$this->cache_table}` ".
+ "WHERE `folder_id` = ? AND `uid` = ? ORDER BY `msguid` DESC",
$this->folder_id,
$uid
);
diff --git a/lib/plugins/libkolab/lib/kolab_storage_cache_configuration.php b/lib/plugins/libkolab/lib/kolab_storage_cache_configuration.php
index ec015dd..c3c7ac4 100644
--- a/lib/plugins/libkolab/lib/kolab_storage_cache_configuration.php
+++ b/lib/plugins/libkolab/lib/kolab_storage_cache_configuration.php
@@ -39,6 +39,28 @@ class kolab_storage_cache_configuration extends kolab_storage_cache
}
/**
+ * Select Kolab objects filtered by the given query
+ *
+ * @param array Pseudo-SQL query as list of filter parameter triplets
+ * @param boolean Set true to only return UIDs instead of complete objects
+ * @return array List of Kolab data objects (each represented as hash array) or UIDs
+ */
+ public function select($query = array(), $uids = false)
+ {
+ // modify query for IMAP search: query param 'type' is actually a subtype
+ if (!$this->ready) {
+ foreach ($query as $i => $tuple) {
+ if ($tuple[0] == 'type') {
+ $tuple[2] = 'configuration.' . $tuple[2];
+ $query[$i] = $tuple;
+ }
+ }
+ }
+
+ return parent::select($query, $uids);
+ }
+
+ /**
* Helper method to compose a valid SQL query from pseudo filter triplets
*/
protected function _sql_where($query)
diff --git a/lib/plugins/libkolab/lib/kolab_storage_config.php b/lib/plugins/libkolab/lib/kolab_storage_config.php
index 9bc5d50..036b827 100644
--- a/lib/plugins/libkolab/lib/kolab_storage_config.php
+++ b/lib/plugins/libkolab/lib/kolab_storage_config.php
@@ -125,6 +125,7 @@ class kolab_storage_config
}
foreach ($folder->select($filter) as $object) {
+ unset($object['_formatobj']);
$list[] = $object;
}
}
@@ -350,6 +351,8 @@ class kolab_storage_config
'params' => $params,
);
}
+
+ return false;
}
/**
@@ -626,20 +629,24 @@ class kolab_storage_config
// use faster method
if ($uid && $uid != '*') {
$filter[] = array('member', '=', $uid);
- return $this->get_objects($filter, $default);
+ $tags = $this->get_objects($filter, $default);
+ }
+ else {
+ $this->tags = $tags = $this->get_objects($filter, $default);
}
-
- $this->tags = $this->get_objects($filter, $default);
+ }
+ else {
+ $tags = $this->tags;
}
if ($uid === '*') {
- return $this->tags;
+ return $tags;
}
$result = array();
$search = self::build_member_url($uid);
- foreach ($this->tags as $tag) {
+ foreach ($tags as $tag) {
if (in_array($search, (array) $tag['members'])) {
$result[] = $tag;
}
@@ -649,6 +656,100 @@ class kolab_storage_config
}
/**
+ * Find objects linked with the given groupware object through a relation
+ *
+ * @param string Object UUID
+ * @param array List of related URIs
+ */
+ public function get_object_links($uid)
+ {
+ $links = array();
+ $object_uri = self::build_member_url($uid);
+
+ foreach ($this->get_relations_for_member($uid) as $relation) {
+ if (in_array($object_uri, (array) $relation['members'])) {
+ // make relation members up-to-date
+ kolab_storage_config::resolve_members($relation);
+
+ foreach ($relation['members'] as $member) {
+ if ($member != $object_uri) {
+ $links[] = $member;
+ }
+ }
+ }
+ }
+
+ return array_unique($links);
+ }
+
+ /**
+ *
+ */
+ public function save_object_links($uid, $links, $remove = array())
+ {
+ $object_uri = self::build_member_url($uid);
+ $relations = $this->get_relations_for_member($uid);
+ $done = false;
+
+ foreach ($relations as $relation) {
+ // make relation members up-to-date
+ kolab_storage_config::resolve_members($relation);
+
+ // remove and add links
+ $members = array_diff($relation['members'], (array)$remove);
+ $members = array_unique(array_merge($members, $links));
+
+ // make sure the object_uri is still a member
+ if (!in_array($object_uri, $members)) {
+ $members[$object_uri];
+ }
+
+ // remove relation if no other members remain
+ if (count($members) <= 1) {
+ $done = $this->delete($relation['uid']);
+ }
+ // update relation object if members changed
+ else if (count(array_diff($members, $relation['members'])) || count(array_diff($relation['members'], $members))) {
+ $relation['members'] = $members;
+ $done = $this->save($relation, 'relation');
+ $links = array();
+ }
+ // no changes, we're happy
+ else {
+ $done = true;
+ $links = array();
+ }
+ }
+
+ // create a new relation
+ if (!$done && !empty($links)) {
+ $relation = array(
+ 'members' => array_merge($links, array($object_uri)),
+ 'category' => 'generic',
+ );
+
+ $ret = $this->save($relation, 'relation');
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Find relation objects referring to specified note
+ */
+ public function get_relations_for_member($uid, $reltype = 'generic')
+ {
+ $default = true;
+ $filter = array(
+ array('type', '=', 'relation'),
+ array('category', '=', $reltype),
+ array('member', '=', $uid),
+ );
+
+ return $this->get_objects($filter, $default, 100);
+ }
+
+ /**
* Find kolab objects assigned to specified e-mail message
*
* @param rcube_message $message E-mail message
@@ -659,6 +760,8 @@ class kolab_storage_config
*/
public function get_message_relations($message, $folder, $type)
{
+ static $_cache = array();
+
$result = array();
$uids = array();
$default = true;
@@ -666,28 +769,42 @@ class kolab_storage_config
$filter = array(
array('type', '=', 'relation'),
array('category', '=', 'generic'),
- // @TODO: what if Message-Id (and Date) does not exist?
- array('member', '=', $message->get('message-id', false)),
);
- // get UIDs of assigned notes
- foreach ($this->get_objects($filter, $default) as $relation) {
- // we don't need to update members if the URI is found
- if (in_array($uri, $relation['members'])) {
- // update members...
- $messages = kolab_storage_config::resolve_members($relation);
- // ...and check again
- if (empty($messages[$folder]) || !in_array($message->uid, $messages[$folder])) {
- continue;
+ // query by message-id
+ $member_id = $message->get('message-id', false);
+ if (empty($member_id)) {
+ // derive message identifier from URI
+ $member_id = md5($uri);
+ }
+ $filter[] = array('member', '=', $member_id);
+
+ if (!isset($_cache[$uri])) {
+ // get UIDs of related groupware objects
+ foreach ($this->get_objects($filter, $default) as $relation) {
+ // we don't need to update members if the URI is found
+ if (!in_array($uri, $relation['members'])) {
+ // update members...
+ $messages = kolab_storage_config::resolve_members($relation);
+ // ...and check again
+ if (empty($messages[$folder]) || !in_array($message->uid, $messages[$folder])) {
+ continue;
+ }
}
- }
- // find note UID(s)
- foreach ($relation['members'] as $member) {
- if (strpos($member, 'urn:uuid:') === 0) {
- $uids[] = substr($member, 9);
+ // find groupware object UID(s)
+ foreach ($relation['members'] as $member) {
+ if (strpos($member, 'urn:uuid:') === 0) {
+ $uids[] = substr($member, 9);
+ }
}
}
+
+ // remember this lookup
+ $_cache[$uri] = $uids;
+ }
+ else {
+ $uids = $_cache[$uri];
}
// get kolab objects of specified type
@@ -720,4 +837,30 @@ class kolab_storage_config
return self::build_member_url($params);
}
+
+ /**
+ * Resolve the email message reference from the given URI
+ */
+ public function get_message_reference($uri, $rel = null)
+ {
+ if ($linkref = self::parse_member_url($uri)) {
+ $linkref['subject'] = $linkref['params']['subject'];
+ $linkref['uri'] = $uri;
+
+ $rcmail = rcube::get_instance();
+ if (method_exists($rcmail, 'url')) {
+ $linkref['mailurl'] = $rcmail->url(array(
+ 'task' => 'mail',
+ 'action' => 'show',
+ 'mbox' => $linkref['folder'],
+ 'uid' => $linkref['uid'],
+ 'rel' => $rel,
+ ));
+ }
+
+ unset($linkref['params']);
+ }
+
+ return $linkref;
+ }
}
diff --git a/lib/plugins/libkolab/lib/kolab_storage_folder.php b/lib/plugins/libkolab/lib/kolab_storage_folder.php
index ad6d5c0..ab3c63f 100644
--- a/lib/plugins/libkolab/lib/kolab_storage_folder.php
+++ b/lib/plugins/libkolab/lib/kolab_storage_folder.php
@@ -30,18 +30,28 @@ class kolab_storage_folder extends kolab_storage_folder_api
*/
public $cache;
- private $type_annotation;
- private $resource_uri;
+ /**
+ * Indicate validity status
+ * @var boolean
+ */
+ public $valid = false;
+
+ protected $error = 0;
+
+ protected $resource_uri;
/**
* Default constructor
+ *
+ * @param string The folder name/path
+ * @param string Expected folder type
*/
- function __construct($name, $type = null)
+ function __construct($name, $type = null, $type_annotation = null)
{
parent::__construct($name);
$this->imap->set_options(array('skip_deleted' => true));
- $this->set_folder($name, $type);
+ $this->set_folder($name, $type, $type_annotation);
}
@@ -49,29 +59,63 @@ class kolab_storage_folder extends kolab_storage_folder_api
* Set the IMAP folder this instance connects to
*
* @param string The folder name/path
+ * @param string Expected folder type
* @param string Optional folder type if known
*/
- public function set_folder($name, $type = null)
+ public function set_folder($name, $type = null, $type_annotation = null)
{
- $this->type_annotation = $type ? $type : kolab_storage::folder_type($name);
+ if (empty($type_annotation)) {
+ $type_annotation = kolab_storage::folder_type($name);
+ }
$oldtype = $this->type;
- list($this->type, $suffix) = explode('.', $this->type_annotation);
+ list($this->type, $suffix) = explode('.', $type_annotation);
$this->default = $suffix == 'default';
+ $this->subtype = $this->default ? '' : $suffix;
$this->name = $name;
$this->id = kolab_storage::folder_id($name);
+ $this->valid = !empty($this->type) && $this->type != 'mail' && (!$type || $this->type == $type);
+
+ if (!$this->valid) {
+ $this->error = $this->imap->get_error_code() < 0 ? kolab_storage::ERROR_IMAP_CONN : kolab_storage::ERROR_INVALID_FOLDER;
+ }
// reset cached object properties
$this->owner = $this->namespace = $this->resource_uri = $this->info = $this->idata = null;
- // get a new cache instance of folder type changed
- if (!$this->cache || $type != $oldtype)
+ // get a new cache instance if folder type changed
+ if (!$this->cache || $this->type != $oldtype)
$this->cache = kolab_storage_cache::factory($this);
+ else
+ $this->cache->set_folder($this);
$this->imap->set_folder($this->name);
- $this->cache->set_folder($this);
}
+ /**
+ * Returns code of last error
+ *
+ * @return int Error code
+ */
+ public function get_error()
+ {
+ return $this->error ?: $this->cache->get_error();
+ }
+
+ /**
+ * Check IMAP connection error state
+ */
+ public function check_error()
+ {
+ if (($err_code = $this->imap->get_error_code()) < 0) {
+ $this->error = kolab_storage::ERROR_IMAP_CONN;
+ if (($res_code = $this->imap->get_response_code()) !== 0 && in_array($res_code, array(rcube_storage::NOPERM, rcube_storage::READONLY))) {
+ $this->error = kolab_storage::ERROR_NO_PERMISSION;
+ }
+ }
+
+ return $this->error;
+ }
/**
* Compose a unique resource URI for this IMAP folder
@@ -96,7 +140,7 @@ class kolab_storage_folder extends kolab_storage_folder_api
}
// compose fully qualified ressource uri for this instance
- $this->resource_uri = 'imap://' . urlencode($this->get_owner()) . '@' . $this->imap->options['host'] . '/' . $subpath;
+ $this->resource_uri = 'imap://' . urlencode($this->get_owner(true)) . '@' . $this->imap->options['host'] . '/' . $subpath;
return $this->resource_uri;
}
@@ -118,9 +162,12 @@ class kolab_storage_folder extends kolab_storage_folder_api
// generate a folder UID and set it to IMAP
$uid = rtrim(chunk_split(md5($this->name . $this->get_owner() . uniqid('-', true)), 12, '-'), '-');
- $this->set_uid($uid);
+ if ($this->set_uid($uid)) {
+ return $uid;
+ }
- return $uid;
+ // create hash from folder name if we can't write the UID metadata
+ return md5($this->name . $this->get_owner());
}
/**
@@ -134,6 +181,8 @@ class kolab_storage_folder extends kolab_storage_folder_api
if (!($success = $this->set_metadata(array(kolab_storage::UID_KEY_SHARED => $uid)))) {
$success = $this->set_metadata(array(kolab_storage::UID_KEY_PRIVATE => $uid));
}
+
+ $this->check_error();
return $success;
}
@@ -143,6 +192,7 @@ class kolab_storage_folder extends kolab_storage_folder_api
public function get_ctag()
{
$fdata = $this->get_imap_data();
+ $this->check_error();
return sprintf('%d-%d-%d', $fdata['UIDVALIDITY'], $fdata['HIGHESTMODSEQ'], $fdata['UIDNEXT']);
}
@@ -200,6 +250,10 @@ class kolab_storage_folder extends kolab_storage_folder_api
*/
public function count($query = null)
{
+ if (!$this->valid) {
+ return 0;
+ }
+
// synchronize cache first
$this->cache->synchronize();
@@ -217,6 +271,10 @@ class kolab_storage_folder extends kolab_storage_folder_api
{
if (!$type) $type = $this->type;
+ if (!$this->valid) {
+ return array();
+ }
+
// synchronize caches
$this->cache->synchronize();
@@ -234,9 +292,14 @@ class kolab_storage_folder extends kolab_storage_folder_api
*/
public function select($query = array())
{
+ if (!$this->valid) {
+ return array();
+ }
+
// check query argument
- if (empty($query))
+ if (empty($query)) {
return $this->get_objects();
+ }
// synchronize caches
$this->cache->synchronize();
@@ -254,6 +317,10 @@ class kolab_storage_folder extends kolab_storage_folder_api
*/
public function get_uids($query = array())
{
+ if (!$this->valid) {
+ return array();
+ }
+
// synchronize caches
$this->cache->synchronize();
@@ -315,6 +382,10 @@ class kolab_storage_folder extends kolab_storage_folder_api
*/
public function get_object($uid, $type = null)
{
+ if (!$this->valid) {
+ return false;
+ }
+
// synchronize caches
$this->cache->synchronize();
@@ -344,7 +415,7 @@ class kolab_storage_folder extends kolab_storage_folder_api
*/
public function get_attachment($uid, $part, $mailbox = null, $print = false, $fp = null, $skip_charset_conv = false)
{
- if ($msguid = ($mailbox ? $uid : $this->cache->uid2msguid($uid))) {
+ if ($this->valid && ($msguid = ($mailbox ? $uid : $this->cache->uid2msguid($uid)))) {
$this->imap->set_folder($mailbox ? $mailbox : $this->name);
if (substr($part, 0, 2) == 'i:') {
@@ -356,7 +427,7 @@ class kolab_storage_folder extends kolab_storage_folder_api
$object['_formatobj']->get_attachments($object);
}
- foreach ($object['_attachments'] as $k => $attach) {
+ foreach ($object['_attachments'] as $attach) {
if ($attach['id'] == $part) {
if ($print) echo $attach['content'];
else if ($fp) fwrite($fp, $attach['content']);
@@ -388,6 +459,10 @@ class kolab_storage_folder extends kolab_storage_folder_api
*/
public function read_object($msguid, $type = null, $folder = null)
{
+ if (!$this->valid) {
+ return false;
+ }
+
if (!$type) $type = $this->type;
if (!$folder) $folder = $this->name;
@@ -440,7 +515,7 @@ class kolab_storage_folder extends kolab_storage_folder_api
// get XML part
foreach ((array)$message->attachments as $part) {
if (!$xml && ($part->mimetype == $content_type || preg_match('!application/([a-z.]+\+)?xml!', $part->mimetype))) {
- $xml = $part->body ? $part->body : $message->get_part_content($part->mime_id);
+ $xml = $message->get_part_body($part->mime_id, true);
}
else if ($part->filename || $part->content_id) {
$key = $part->content_id ? trim($part->content_id, '<>') : $part->filename;
@@ -533,6 +608,10 @@ class kolab_storage_folder extends kolab_storage_folder_api
*/
public function save(&$object, $type = null, $uid = null)
{
+ if (!$this->valid) {
+ return false;
+ }
+
if (!$type)
$type = $this->type;
@@ -728,6 +807,10 @@ class kolab_storage_folder extends kolab_storage_folder_api
*/
public function delete($object, $expunge = true)
{
+ if (!$this->valid) {
+ return false;
+ }
+
$msguid = is_array($object) ? $object['_msguid'] : $this->cache->uid2msguid($object);
$success = false;
@@ -755,6 +838,10 @@ class kolab_storage_folder extends kolab_storage_folder_api
*/
public function delete_all()
{
+ if (!$this->valid) {
+ return false;
+ }
+
$this->cache->purge();
$this->cache->bypass(true);
$result = $this->imap->clear_folder($this->name);
@@ -772,6 +859,10 @@ class kolab_storage_folder extends kolab_storage_folder_api
*/
public function undelete($uid)
{
+ if (!$this->valid) {
+ return false;
+ }
+
if ($msguid = $this->cache->uid2msguid($uid, true)) {
$this->cache->bypass(true);
$result = $this->imap->set_flag($msguid, 'UNDELETED', $this->name);
@@ -795,9 +886,16 @@ class kolab_storage_folder extends kolab_storage_folder_api
*/
public function move($uid, $target_folder)
{
+ if (!$this->valid) {
+ return false;
+ }
+
+ if (is_string($target_folder))
+ $target_folder = kolab_storage::get_folder($target_folder);
+
if ($msguid = $this->cache->uid2msguid($uid)) {
$this->cache->bypass(true);
- $result = $this->imap->move_message($msguid, $target_folder, $this->name);
+ $result = $this->imap->move_message($msguid, $target_folder->name, $this->name);
$this->cache->bypass(false);
if ($result) {
@@ -875,7 +973,7 @@ class kolab_storage_folder extends kolab_storage_folder_api
if (!empty($object['_attachments']) && ($mem_limit = parse_bytes(ini_get('memory_limit'))) > 0) {
$memory = function_exists('memory_get_usage') ? memory_get_usage() : 16*1024*1024; // safe value: 16MB
- foreach ($object['_attachments'] as $id => $attachment) {
+ foreach ($object['_attachments'] as $attachment) {
$memory += $attachment['size'];
}
@@ -1047,8 +1145,6 @@ class kolab_storage_folder extends kolab_storage_folder_api
*/
private function trigger_url($url, $auth_user = null, $auth_passwd = null)
{
- require_once('HTTP/Request2.php');
-
try {
$request = libkolab::http_request($url);
diff --git a/lib/plugins/libkolab/lib/kolab_storage_folder_api.php b/lib/plugins/libkolab/lib/kolab_storage_folder_api.php
index ef3309e..7280389 100644
--- a/lib/plugins/libkolab/lib/kolab_storage_folder_api.php
+++ b/lib/plugins/libkolab/lib/kolab_storage_folder_api.php
@@ -41,6 +41,12 @@ abstract class kolab_storage_folder_api
public $type;
/**
+ * The subtype of this folder.
+ * @var string
+ */
+ public $subtype;
+
+ /**
* Is this folder set to be the default for its type
* @var boolean
*/
@@ -79,9 +85,10 @@ abstract class kolab_storage_folder_api
/**
* Returns the owner of the folder.
*
+ * @param boolean Return a fully qualified owner name (i.e. including domain for shared folders)
* @return string The owner of this folder.
*/
- public function get_owner()
+ public function get_owner($fully_qualified = false)
{
// return cached value
if (isset($this->owner))
@@ -100,16 +107,21 @@ abstract class kolab_storage_folder_api
break;
default:
- list($prefix, $user) = explode($this->imap->get_hierarchy_delimiter(), $info['name']);
- if (strpos($user, '@') === false) {
- $domain = strstr($rcmail->get_user_name(), '@');
- if (!empty($domain))
- $user .= $domain;
- }
- $this->owner = $user;
+ list($prefix, $this->owner) = explode($this->imap->get_hierarchy_delimiter(), $info['name']);
+ $fully_qualified = true; // enforce email addresses (backwards compatibility)
break;
}
+ if ($fully_qualified && strpos($this->owner, '@') === false) {
+ // extract domain from current user name
+ $domain = strstr($rcmail->get_user_name(), '@');
+ // fall back to mail_domain config option
+ if (empty($domain) && ($mdomain = $rcmail->config->mail_domain($this->imap->options['host']))) {
+ $domain = '@' . $mdomain;
+ }
+ $this->owner .= $domain;
+ }
+
return $this->owner;
}
@@ -326,5 +338,14 @@ abstract class kolab_storage_folder_api
return $subscribed ? kolab_storage::folder_subscribe($this->name) : kolab_storage::folder_unsubscribe($this->name);
}
+ /**
+ * Return folder name as string representation of this object
+ *
+ * @return string Full IMAP folder name
+ */
+ public function __toString()
+ {
+ return $this->name;
+ }
}
diff --git a/lib/plugins/libkolab/lib/kolab_storage_folder_user.php b/lib/plugins/libkolab/lib/kolab_storage_folder_user.php
index 1c37da9..7c141c5 100644
--- a/lib/plugins/libkolab/lib/kolab_storage_folder_user.php
+++ b/lib/plugins/libkolab/lib/kolab_storage_folder_user.php
@@ -26,6 +26,7 @@ class kolab_storage_folder_user extends kolab_storage_folder_virtual
protected static $ldapcache = array();
public $ldaprec;
+ public $type;
/**
* Default constructor
@@ -85,13 +86,28 @@ class kolab_storage_folder_user extends kolab_storage_folder_virtual
}
/**
- * Check subscription status of this folder
+ * Check subscription status of this folder.
+ * Subscription of a virtual user folder depends on the subscriptions of subfolders.
*
* @return boolean True if subscribed, false if not
*/
public function is_subscribed()
{
- return kolab_storage::folder_is_subscribed($this->name, true);
+ if (!empty($this->type)) {
+ $children = $subscribed = 0;
+ $delimiter = $this->imap->get_hierarchy_delimiter();
+ foreach ((array)kolab_storage::list_folders($this->name . $delimiter, '*', $this->type, false) as $subfolder) {
+ if (kolab_storage::folder_is_subscribed($subfolder)) {
+ $subscribed++;
+ }
+ $children++;
+ }
+ if ($subscribed > 0) {
+ return $subscribed == $children ? true : 2;
+ }
+ }
+
+ return false;
}
/**
@@ -103,9 +119,17 @@ class kolab_storage_folder_user extends kolab_storage_folder_virtual
*/
public function subscribe($subscribed)
{
- return $subscribed ?
- kolab_storage::folder_subscribe($this->name, true) :
- kolab_storage::folder_unsubscribe($this->name, true);
+ $success = false;
+
+ // (un)subscribe all subfolders of a given type
+ if (!empty($this->type)) {
+ $delimiter = $this->imap->get_hierarchy_delimiter();
+ foreach ((array)kolab_storage::list_folders($this->name . $delimiter, '*', $this->type, false) as $subfolder) {
+ $success |= ($subscribed ? kolab_storage::folder_subscribe($subfolder) : kolab_storage::folder_unsubscribe($subfolder));
+ }
+ }
+
+ return $success;
}
}
\ No newline at end of file
diff --git a/lib/plugins/libkolab/package.xml b/lib/plugins/libkolab/package.xml
deleted file mode 100644
index cd3e3a0..0000000
--- a/lib/plugins/libkolab/package.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<package 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" packagerversion="1.9.0" version="2.0" 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>libkolab</name>
- <uri>http://git.kolab.org/roundcubemail-plugins-kolab/</uri>
- <summary>Kolab core library</summary>
- <description>Plugin to setup a basic environment for the interaction with a Kolab server.</description>
- <lead>
- <name>Thomas Bruederli</name>
- <user>bruederli</user>
- <email>bruederli at kolabsys.com</email>
- <active>yes</active>
- </lead>
- <developer>
- <name>Alensader Machniak</name>
- <user>machniak</user>
- <email>machniak at kolabsys.com</email>
- <active>yes</active>
- </developer>
- <date>2013-04-19</date>
- <version>
- <release>0.9</release>
- <api>0.9</api>
- </version>
- <stability>
- <release>stable</release>
- <api>stable</api>
- </stability>
- <license uri="http://www.gnu.org/licenses/agpl.html">GNU AGPLv3</license>
- <notes>-</notes>
- <contents>
- <dir baseinstalldir="/" name="/">
- <file name="libkolab.php" role="php">
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="lib/kolab_format.php" role="php">
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="lib/kolab_format_configuration.php" role="php">
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="lib/kolab_format_contact.php" role="php">
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="lib/kolab_format_distributionlist.php" role="php">
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="lib/kolab_format_event.php" role="php">
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="lib/kolab_format_file.php" role="php">
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="lib/kolab_format_journal.php" role="php">
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="lib/kolab_format_note.php" role="php">
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="lib/kolab_format_task.php" role="php">
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="lib/kolab_format_xcal.php" role="php">
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="lib/kolab_storage.php" role="php">
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="lib/kolab_storage_cache.php" role="php">
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="lib/kolab_storage_folder.php" role="php">
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="lib/kolab_date_recurrence.php" role="php">
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
-
- <file name="bin/modcache.php" role="php"></file>
-
- <file name="config.inc.php.dist" role="data"></file>
- <file name="LICENSE" role="data"></file>
- <file name="README" role="data"></file>
- <file name="UPGRADING" role="data"></file>
- </dir>
- <!-- / -->
- </contents>
- <dependencies>
- <required>
- <php>
- <min>5.3.1</min>
- </php>
- <pearinstaller>
- <min>1.7.0</min>
- </pearinstaller>
- </required>
- </dependencies>
- <phprelease/>
-</package>
diff --git a/lib/plugins/managesieve/Changelog b/lib/plugins/managesieve/Changelog
index 01afe69..5255d5b 100644
--- a/lib/plugins/managesieve/Changelog
+++ b/lib/plugins/managesieve/Changelog
@@ -1,6 +1,17 @@
+* version 8.2 [2015-01-14]
+-----------------------------------------------------------
+- Fix bug where actions without if/elseif/else in sieve scripts were skipped
+- Support "not allof" test as a negation of all sub-tests
+- Fix bug where vacation rule was saved to wrong script if managesieve_kolab_master=true
+- Improve procedure of script selection to write a vacation rule
+
+* version 8.1 [2014-12-09]
+-----------------------------------------------------------
+- Added simple API to manage vacation rule
- Fix missing css/js scripts in filter form in mail task
- Fix default vacation status (#1490019)
- Make possible to set vacation start/end date and time
+- Fix compatibility with contextmenu plugin
* version 8.0 [2014-07-16]
-----------------------------------------------------------
diff --git a/lib/plugins/managesieve/composer.json b/lib/plugins/managesieve/composer.json
index 51e76bc..6d640da 100644
--- a/lib/plugins/managesieve/composer.json
+++ b/lib/plugins/managesieve/composer.json
@@ -2,8 +2,8 @@
"name": "roundcube/managesieve",
"type": "roundcube-plugin",
"description": "Adds a possibility to manage Sieve scripts (incoming mail filters). It's clickable interface which operates on text scripts and communicates with server using managesieve protocol. Adds Filters tab in Settings.",
- "license": "GNU GPLv3+",
- "version": "7.2",
+ "license": "GPLv3+",
+ "version": "8.2",
"authors": [
{
"name": "Aleksander Machniak",
diff --git a/lib/plugins/managesieve/config.inc.php.dist b/lib/plugins/managesieve/config.inc.php.dist
index 1f20b5a..b9f9a50 100644
--- a/lib/plugins/managesieve/config.inc.php.dist
+++ b/lib/plugins/managesieve/config.inc.php.dist
@@ -31,7 +31,7 @@ $config['managesieve_usetls'] = false;
// Connection scket context options
// See http://php.net/manual/en/context.ssl.php
// The example below enables server certificate validation
-//$config['imap_conn_options'] = array(
+//$config['managesieve_conn_options'] = array(
// 'ssl' => array(
// 'verify_peer' => true,
// 'verify_depth' => 3,
diff --git a/lib/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php b/lib/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php
index 302c7c7..d412e17 100644
--- a/lib/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php
+++ b/lib/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php
@@ -5,8 +5,8 @@
*
* Engine part of Managesieve plugin implementing UI and backend access.
*
- * Copyright (C) 2008-2013, The Roundcube Dev Team
- * Copyright (C) 2011-2013, Kolab Systems AG
+ * Copyright (C) 2008-2014, The Roundcube Dev Team
+ * Copyright (C) 2011-2014, Kolab Systems AG
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -63,7 +63,7 @@ class rcube_sieve_engine
1 => 'notifyimportancehigh'
);
- const VERSION = '8.0';
+ const VERSION = '8.2';
const PROGNAME = 'Roundcube (Managesieve)';
const PORT = 4190;
@@ -220,14 +220,14 @@ class rcube_sieve_engine
*
* @return int Connection status: 0 on success, >0 on failure
*/
- public function load_script($script_name = null)
+ protected function load_script($script_name = null)
{
// Get list of scripts
$list = $this->list_scripts();
if ($script_name === null || $script_name === '') {
// get (first) active script
- if (!empty($this->active[0])) {
+ if (!empty($this->active)) {
$script_name = $this->active[0];
}
else if ($list) {
@@ -349,7 +349,7 @@ class rcube_sieve_engine
}
}
else if ($action == 'setact' && !$error) {
- $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_GPC, true);
+ $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_POST, true);
$result = $this->activate_script($script_name);
$kep14 = $this->rc->config->get('managesieve_kolab_master');
@@ -363,7 +363,7 @@ class rcube_sieve_engine
}
}
else if ($action == 'deact' && !$error) {
- $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_GPC, true);
+ $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_POST, true);
$result = $this->deactivate_script($script_name);
if ($result === true) {
@@ -376,7 +376,7 @@ class rcube_sieve_engine
}
}
else if ($action == 'setdel' && !$error) {
- $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_GPC, true);
+ $script_name = rcube_utils::get_input_value('_set', rcube_utils::INPUT_POST, true);
$result = $this->remove_script($script_name);
if ($result === true) {
@@ -419,14 +419,14 @@ class rcube_sieve_engine
$this->rc->output->command('managesieve_updatelist', 'list', array('list' => $result));
}
else if ($action == 'ruleadd') {
- $rid = rcube_utils::get_input_value('_rid', rcube_utils::INPUT_GPC);
+ $rid = rcube_utils::get_input_value('_rid', rcube_utils::INPUT_POST);
$id = $this->genid();
$content = $this->rule_div($fid, $id, false);
$this->rc->output->command('managesieve_rulefill', $content, $id, $rid);
}
else if ($action == 'actionadd') {
- $aid = rcube_utils::get_input_value('_aid', rcube_utils::INPUT_GPC);
+ $aid = rcube_utils::get_input_value('_aid', rcube_utils::INPUT_POST);
$id = $this->genid();
$content = $this->action_div($fid, $id, false);
@@ -1177,16 +1177,7 @@ class rcube_sieve_engine
function filter_frame($attrib)
{
- if (!$attrib['id'])
- $attrib['id'] = 'rcmfilterframe';
-
- $attrib['name'] = $attrib['id'];
-
- $this->rc->output->set_env('contentframe', $attrib['name']);
- $this->rc->output->set_env('blankpage', $attrib['src'] ?
- $this->rc->output->abs_url($attrib['src']) : 'program/resources/blank.gif');
-
- return $this->rc->output->frame($attrib);
+ return $this->rc->output->frame($attrib, true);
}
function filterset_form($attrib)
@@ -1279,8 +1270,11 @@ class rcube_sieve_engine
$out .= $hiddenfields->show();
// 'any' flag
- if (sizeof($scr['tests']) == 1 && $scr['tests'][0]['test'] == 'true' && !$scr['tests'][0]['not'])
+ if ((!isset($this->form) && empty($scr['tests']) && !empty($scr))
+ || (sizeof($scr['tests']) == 1 && $scr['tests'][0]['test'] == 'true' && !$scr['tests'][0]['not'])
+ ) {
$any = true;
+ }
// filter name input
$field_id = '_name';
@@ -1341,7 +1335,7 @@ class rcube_sieve_engine
$out .= sprintf("%s<label for=\"%s\">%s</label>\n",
$input_join, $field_id, rcube::Q($this->plugin->gettext('filterany')));
- $rows_num = isset($scr) ? sizeof($scr['tests']) : 1;
+ $rows_num = !empty($scr['tests']) ? sizeof($scr['tests']) : 1;
$out .= '<div id="rules"'.($any ? ' style="display: none"' : '').'>';
for ($x=0; $x<$rows_num; $x++)
@@ -1472,31 +1466,26 @@ class rcube_sieve_engine
$select_op->add(rcube::Q($this->plugin->gettext('valuenotequals')), 'value-ne');
}
+ $test = self::rule_test($rule);
+ $target = '';
+
// target(s) input
if (in_array($rule['test'], array('header', 'address', 'envelope'))) {
- $test = ($rule['not'] ? 'not' : '').($rule['type'] ? $rule['type'] : 'is');
$target = $rule['arg2'];
}
else if (in_array($rule['test'], array('body', 'date', 'currentdate'))) {
- $test = ($rule['not'] ? 'not' : '').($rule['type'] ? $rule['type'] : 'is');
$target = $rule['arg'];
}
else if ($rule['test'] == 'size') {
- $test = '';
- $target = '';
if (preg_match('/^([0-9]+)(K|M|G)?$/', $rule['arg'], $matches)) {
$sizetarget = $matches[1];
- $sizeitem = $matches[2];
+ $sizeitem = $matches[2];
}
else {
$sizetarget = $rule['arg'];
- $sizeitem = $rule['item'];
+ $sizeitem = $rule['item'];
}
}
- else {
- $test = ($rule['not'] ? 'not' : '').$rule['test'];
- $target = '';
- }
// (current)date part select
if (in_array('date', $this->exts) || in_array('currentdate', $this->exts)) {
@@ -1646,6 +1635,43 @@ class rcube_sieve_engine
return $out;
}
+ private static function rule_test(&$rule)
+ {
+ // first modify value/count tests with 'not' keyword
+ // we'll revert the meaning of operators
+ if ($rule['not'] && preg_match('/^(count|value)-([gteqnl]{2})/', $rule['type'], $m)) {
+ $rule['not'] = false;
+
+ switch ($m[2]) {
+ case 'gt': $rule['type'] = $m[1] . '-le'; break;
+ case 'ge': $rule['type'] = $m[1] . '-lt'; break;
+ case 'lt': $rule['type'] = $m[1] . '-ge'; break;
+ case 'le': $rule['type'] = $m[1] . '-gt'; break;
+ case 'eq': $rule['type'] = $m[1] . '-ne'; break;
+ case 'ne': $rule['type'] = $m[1] . '-eq'; break;
+ }
+ }
+ else if ($rule['not'] && $rule['test'] == 'size') {
+ $rule['not'] = false;
+ $rule['type'] = $rule['type'] == 'over' ? 'under' : 'over';
+ }
+
+ $set = array('header', 'address', 'envelope', 'body', 'date', 'currentdate');
+
+ // build test string supported by select element
+ if ($rule['size']) {
+ $test = $rule['type'];
+ }
+ else if (in_array($rule['test'], $set)) {
+ $test = ($rule['not'] ? 'not' : '') . ($rule['type'] ? $rule['type'] : 'is');
+ }
+ else {
+ $test = ($rule['not'] ? 'not' : '') . $rule['test'];
+ }
+
+ return $test;
+ }
+
function action_div($fid, $id, $div=true)
{
$action = isset($this->form) ? $this->form['actions'][$id] : $this->script[$fid]['actions'][$id];
@@ -2052,7 +2078,6 @@ class rcube_sieve_engine
// Handle active script(s) and list of scripts according to Kolab's KEP:14
if ($this->rc->config->get('managesieve_kolab_master')) {
-
// Skip protected names
foreach ((array)$this->list as $idx => $name) {
$_name = strtoupper($name);
@@ -2080,7 +2105,10 @@ class rcube_sieve_engine
foreach ($rules['actions'] as $action) {
if ($action['type'] == 'include' && empty($action['global'])) {
$name = preg_replace($filename_regex, '', $action['target']);
- $this->active[] = $name;
+ // make sure the script exist
+ if (in_array($name, $this->list)) {
+ $this->active[] = $name;
+ }
}
}
}
@@ -2114,6 +2142,11 @@ class rcube_sieve_engine
}
}
+ // reindex
+ if (!empty($this->list)) {
+ $this->list = array_values($this->list);
+ }
+
return $this->list;
}
@@ -2291,7 +2324,7 @@ class rcube_sieve_engine
$i = 1;
foreach ($this->script as $idx => $filter) {
- if ($filter['type'] != 'if') {
+ if (empty($filter['actions'])) {
continue;
}
$fname = $filter['name'] ? $filter['name'] : "#$i";
diff --git a/lib/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php b/lib/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php
index bc62d2f..518d79d 100644
--- a/lib/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php
+++ b/lib/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php
@@ -622,6 +622,7 @@ class rcube_sieve_script
$disabled = false;
$join = false;
+ $join_not = false;
// disabled rule (false + comment): if false # .....
if (preg_match('/^\s*false\s+#/i', $content)) {
@@ -650,15 +651,22 @@ class rcube_sieve_script
$not = false;
}
+ // we support "not allof" as a negation of allof sub-tests
+ if ($join_not) {
+ $not = !$not;
+ }
+
switch ($token) {
case 'allof':
- $join = true;
+ $join = true;
+ $join_not = $not;
break;
+
case 'anyof':
break;
case 'size':
- $test = array('test' => 'size', 'not' => $not);
+ $test = array('test' => 'size', 'not' => $not);
$test['arg'] = array_pop($tokens);
@@ -740,16 +748,16 @@ class rcube_sieve_script
break;
case 'exists':
- $tests[] = array('test' => 'exists', 'not' => $not,
+ $tests[] = array('test' => 'exists', 'not' => $not,
'arg' => array_pop($tokens));
break;
case 'true':
- $tests[] = array('test' => 'true', 'not' => $not);
+ $tests[] = array('test' => 'true', 'not' => $not);
break;
case 'false':
- $tests[] = array('test' => 'true', 'not' => !$not);
+ $tests[] = array('test' => 'true', 'not' => !$not);
break;
}
diff --git a/lib/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php b/lib/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php
index 10aaea0..28fd801 100644
--- a/lib/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php
+++ b/lib/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php
@@ -24,6 +24,8 @@
class rcube_sieve_vacation extends rcube_sieve_engine
{
protected $error;
+ protected $script_name;
+ protected $vacation = array();
function actions()
{
@@ -34,6 +36,7 @@ class rcube_sieve_vacation extends rcube_sieve_engine
$this->vacation_rule();
$this->vacation_post();
}
+
$this->plugin->add_label('vacation.saving');
$this->rc->output->add_handlers(array(
'vacationform' => array($this, 'vacation_form'),
@@ -43,15 +46,90 @@ class rcube_sieve_vacation extends rcube_sieve_engine
$this->rc->output->send('managesieve.vacation');
}
- private function vacation_rule()
+ /**
+ * Find and load sieve script with/for vacation rule
+ *
+ * @return int Connection status: 0 on success, >0 on failure
+ */
+ protected function load_script()
{
- $this->vacation = array();
+ if ($this->script_name !== null) {
+ return 0;
+ }
+
+ $list = $this->list_scripts();
+ $master = $this->rc->config->get('managesieve_kolab_master');
+ $included = array();
+
+ $this->script_name = false;
+
+ // first try the active script(s)...
+ if (!empty($this->active)) {
+ // Note: there can be more than one active script on KEP:14-enabled server
+ foreach ($this->active as $script) {
+ if ($this->sieve->load($script)) {
+ foreach ($this->sieve->script->as_array() as $rule) {
+ if (!empty($rule['actions'])) {
+ if ($rule['actions'][0]['type'] == 'vacation') {
+ $this->script_name = $script;
+ return 0;
+ }
+ else if (empty($master) && $rule['actions'][0]['type'] == 'include') {
+ $included[] = $rule['actions'][0]['target'];
+ }
+ }
+ }
+ }
+ }
+
+ // ...else try scripts included in active script (not for KEP:14)
+ foreach ($included as $script) {
+ if ($this->sieve->load($script)) {
+ foreach ($this->sieve->script->as_array() as $rule) {
+ if (!empty($rule['actions']) && $rule['actions'][0]['type'] == 'vacation') {
+ $this->script_name = $script;
+ return 0;
+ }
+ }
+ }
+ }
+ }
+
+ // try all other scripts
+ if (!empty($list)) {
+ // else try included scripts
+ foreach (array_diff($list, $included, $this->active) as $script) {
+ if ($this->sieve->load($script)) {
+ foreach ($this->sieve->script->as_array() as $rule) {
+ if (!empty($rule['actions']) && $rule['actions'][0]['type'] == 'vacation') {
+ $this->script_name = $script;
+ return 0;
+ }
+ }
+ }
+ }
+
+ // none of the scripts contains existing vacation rule
+ // use any (first) active or just existing script (in that order)
+ if (!empty($this->active)) {
+ $this->sieve->load($this->script_name = $this->active[0]);
+ }
+ else {
+ $this->sieve->load($this->script_name = $list[0]);
+ }
+ }
+
+ return $this->sieve->error();
+ }
- if (empty($this->active)) {
+ private function vacation_rule()
+ {
+ if ($this->script_name === false || $this->script_name === null || !$this->sieve->load($this->script_name)) {
return;
}
- $list = array();
+ $list = array();
+ $active = in_array($this->script_name, $this->active);
// find (first) vacation rule
foreach ($this->script as $idx => $rule) {
@@ -68,14 +146,14 @@ class rcube_sieve_vacation extends rcube_sieve_engine
$this->vacation = array_merge($rule['actions'][0], array(
'idx' => $idx,
- 'disabled' => $rule['disabled'],
+ 'disabled' => $rule['disabled'] || !$active,
'name' => $rule['name'],
'tests' => $rule['tests'],
'action' => $action ?: 'keep',
'target' => $target,
));
}
- else {
+ else if ($active) {
$list[$idx] = $rule['name'];
}
}
@@ -202,8 +280,6 @@ class rcube_sieve_vacation extends rcube_sieve_engine
$vacation_tests = $this->rc->config->get('managesieve_vacation_test', array(array('test' => 'true')));
}
- // @TODO: handle situation when there's no active script
-
if (!$error) {
$rule = $this->vacation;
$rule['type'] = 'if';
@@ -212,6 +288,7 @@ class rcube_sieve_vacation extends rcube_sieve_engine
$rule['tests'] = $vacation_tests;
$rule['join'] = $date_extension ? count($vacation_tests) > 1 : false;
$rule['actions'] = array($vacation_action);
+ $rule['after'] = $after;
if ($action && $action != 'keep') {
$rule['actions'][] = array(
@@ -221,40 +298,7 @@ class rcube_sieve_vacation extends rcube_sieve_engine
);
}
- // reset original vacation rule
- if (isset($this->vacation['idx'])) {
- $this->script[$this->vacation['idx']] = null;
- }
-
- // re-order rules if needed
- if (isset($after) && $after !== '') {
- // add at target position
- if ($after >= count($this->script) - 1) {
- $this->script[] = $rule;
- }
- else {
- $script = array();
-
- foreach ($this->script as $idx => $r) {
- if ($r) {
- $script[] = $r;
- }
-
- if ($idx == $after) {
- $script[] = $rule;
- }
- }
-
- $this->script = $script;
- }
- }
- else {
- array_unshift($this->script, $rule);
- }
-
- $this->sieve->script->content = array_values(array_filter($this->script));
-
- if ($this->save_script()) {
+ if ($this->save_vacation_script($rule)) {
$this->rc->output->show_message('managesieve.vacationsaved', 'confirmation');
$this->rc->output->send();
}
@@ -507,6 +551,87 @@ class rcube_sieve_vacation extends rcube_sieve_engine
}
/**
+ * Saves vacation script (adding some variables)
+ */
+ protected function save_vacation_script($rule)
+ {
+ // if script does not exist create a new one
+ if ($this->script_name === null || $this->script_name === false) {
+ $this->script_name = $this->rc->config->get('managesieve_script_name');
+ if (empty($this->script_name)) {
+ $this->script_name = 'roundcube';
+ }
+
+ $this->script = array($rule);
+ $script_active = false;
+ }
+ // if script exists
+ else {
+ $script_active = in_array($this->script_name, $this->active);
+
+ // re-order rules if needed
+ if (isset($rule['after']) && $rule['after'] !== '') {
+ // reset original vacation rule
+ if (isset($this->vacation['idx'])) {
+ $this->script[$this->vacation['idx']] = null;
+ }
+
+ // add at target position
+ if ($rule['after'] >= count($this->script) - 1) {
+ $this->script[] = $rule;
+ }
+ else {
+ $script = array();
+
+ foreach ($this->script as $idx => $r) {
+ if ($r) {
+ $script[] = $r;
+ }
+
+ if ($idx == $rule['after']) {
+ $script[] = $rule;
+ }
+ }
+
+ $this->script = $script;
+ }
+
+ $this->script = array_values(array_filter($this->script));
+ }
+ // update original vacation rule if it exists
+ else if (isset($this->vacation['idx'])) {
+ $this->script[$this->vacation['idx']] = $rule;
+ }
+ // otherwise put vacation rule on top
+ else {
+ array_unshift($this->script, $rule);
+ }
+
+ // if the script was not active, we need to de-activate
+ // all rules except the vacation rule, but only if it is not disabled
+ if (!$script_active && !$rule['disabled']) {
+ foreach ($this->script as $idx => $r) {
+ if (empty($r['actions']) || $r['actions'][0]['type'] != 'vacation') {
+ $this->script[$idx]['disabled'] = true;
+ }
+ }
+ }
+ }
+
+ $this->sieve->script->content = $this->script;
+
+ // save the script
+ $saved = $this->save_script($this->script_name);
+
+ // activate the script
+ if ($saved && !$script_active && !$rule['disabled']) {
+ $this->activate_script($this->script_name);
+ }
+
+ return $saved;
+ }
+
+ /**
* API: get vacation rule
*
* @return array Vacation rule information
@@ -684,8 +809,6 @@ class rcube_sieve_vacation extends rcube_sieve_engine
$vacation_tests = $this->rc->config->get('managesieve_vacation_test', array(array('test' => 'true')));
}
- // @TODO: handle situation when there's no active script
-
$rule = $this->vacation;
$rule['type'] = 'if';
$rule['name'] = $rule['name'] ?: 'Out-of-Office';
@@ -702,16 +825,7 @@ class rcube_sieve_vacation extends rcube_sieve_engine
);
}
- // reset original vacation rule
- if (isset($this->vacation['idx'])) {
- $this->script[$this->vacation['idx']] = null;
- }
-
- array_unshift($this->script, $rule);
-
- $this->sieve->script->content = array_values(array_filter($this->script));
-
- return $this->save_script();
+ return $this->save_vacation_script($rule);
}
/**
diff --git a/lib/plugins/managesieve/localization/ar_SA.inc b/lib/plugins/managesieve/localization/ar_SA.inc
index 8e6d841..88e8957 100644
--- a/lib/plugins/managesieve/localization/ar_SA.inc
+++ b/lib/plugins/managesieve/localization/ar_SA.inc
@@ -15,19 +15,174 @@
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/
+$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['filtermatches'] = 'ÙØ·Ø§Ø¨Ù Ø§ÙØªØ¹Ø¨Ùر';
+$labels['filternotmatches'] = 'ÙØ§ ÙØ·Ø§Ø¨Ù Ø§ÙØªØ¹Ø¨Ùر';
+$labels['filterregex'] = 'ÙØ·Ø§Ø¨Ù Ø§ÙØªØ¹Ø¨Ùر Ø§ÙØ¹Ø§Ø¯Ù';
+$labels['filternotregex'] = 'ÙØ§ ÙØ·Ø§Ø¨Ù Ø§ÙØªØ¹Ø¨Ùر Ø§ÙØ¹Ø§Ø¯Ù';
+$labels['filterunder'] = 'ØªØØª';
+$labels['filterover'] = 'Ø®ÙØ§Ù';
+$labels['addrule'] = 'Ø§Ø¶Ø§ÙØ© ÙØ§Ø¹Ø¯Ø©';
+$labels['delrule'] = 'ØØ°Ù ÙØ§Ø¹Ø¯Ø©';
+$labels['messagemoveto'] = 'ÙÙÙ Ø§ÙØ±Ø³Ø§Ù٠اÙÙ ';
+$labels['messageredirect'] = 'إعادة ØªÙØ¬ÙÙ Ø§ÙØ±Ø³Ø§ÙØ© اÙÙ ';
+$labels['messagecopyto'] = 'ÙØ³Ø® Ø§ÙØ±Ø³Ø§ÙØ© اÙÙ ';
+$labels['messagesendcopy'] = 'Ø§Ø±Ø³Ø§Ù ÙØ³Ø®Ø© Ù
Ù Ø§ÙØ±Ø³Ø§ÙØ© اÙÙ ';
+$labels['messagereply'] = 'Ø§ÙØ±Ø¯ Ù
ع Ø±Ø³Ø§ÙØ©';
$labels['messagedelete'] = 'ØØ°Ù Ø§ÙØ±Ø³Ø§ÙØ©';
+$labels['messagediscard'] = 'تجاÙÙ Ù
ع Ø§ÙØ±Ø³Ø§ÙØ©';
+$labels['messagekeep'] = 'Ø¥Ø¨ÙØ§Ø¡ Ø§ÙØ±Ø³Ø§ÙØ© ÙÙ Ø¹ÙØ¨Ø© اÙÙØ§Ø±Ø¯';
+$labels['messagesrules'] = 'ÙÙØ¨Ø±Ùد اÙÙØ§Ø±Ø¯:';
+$labels['messagesactions'] = '...تÙÙÙØ° اÙÙ
ÙØ§Ù
Ø§ÙØªØ§ÙÙØ©:';
$labels['add'] = 'Ø¥Ø¶Ø§ÙØ©';
$labels['del'] = 'ØØ°Ù';
+$labels['sender'] = 'اÙÙ
رسÙ';
$labels['recipient'] = 'Ù
ستÙÙ
';
+$labels['vacationaddr'] = 'Ø¹ÙØ§ÙÙÙ Ø§ÙØ¨Ø±Ùد Ø§ÙØ§ÙÙØªØ±ÙÙÙ(ÙØ©) Ø§ÙØ§Ø¶Ø§ÙÙØ©:';
+$labels['vacationdays'] = 'ÙÙ Ø§ÙØºØ§Ùب ÙÙ
Ø±Ø³Ø§ÙØ© ترس٠(Ø¨Ø§ÙØ§ÙاÙ
):';
+$labels['vacationinterval'] = 'ÙÙ
عدد Ø§ÙØ±Ø³Ø§Ø¦Ù اÙÙ
Ø±Ø³ÙØ© عادةÙ:';
+$labels['vacationreason'] = 'ÙØµ Ø§ÙØ±Ø³Ø§ÙØ© (بسبب Ø§ÙØ§Ø¬Ø§Ø²Ø©):';
+$labels['vacationsubject'] = 'Ù
ÙØ¶Ùع Ø§ÙØ±Ø³Ø§ÙØ©:';
+$labels['days'] = 'Ø§ÙØ§Ù
';
+$labels['seconds'] = 'Ø«ÙØ§ÙÙ';
+$labels['rulestop'] = 'اÙÙØ§Ù تÙÙÙÙ
اÙÙÙØ§Ø¹Ø¯';
+$labels['enable'] = 'ØªÙØ¹ÙÙ/تعطÙÙ';
+$labels['filterset'] = 'Ù
جÙ
ÙØ¹Ø© Ù
صÙÙØ§Ø©';
+$labels['filtersets'] = 'Ù
جÙ
ÙØ¹Ø© تصÙÙØ©';
+$labels['filtersetadd'] = 'Ø§Ø¶Ø§ÙØ© Ù
جÙ
ÙØ¹Ø© تصÙÙØ©';
+$labels['filtersetdel'] = 'ØØ°Ù Ù
جÙ
ÙØ¹Ø© Ø§ÙØªØµÙÙØ© Ø§ÙØØ§ÙÙØ©';
+$labels['filtersetact'] = 'ØªÙØ¹ÙÙ Ù
جÙ
ÙØ¹Ø© Ø§ÙØªØµÙÙØ© Ø§ÙØØ§ÙÙØ© ';
+$labels['filtersetdeact'] = 'تعطÙÙ Ù
جÙ
ÙØ¹Ø© Ø§ÙØªØµÙÙØ© Ø§ÙØØ§ÙÙØ© ';
+$labels['filterdef'] = 'تعرÙÙ Ø§ÙØªØµÙÙØ© ';
+$labels['filtersetname'] = 'اسÙ
Ù
جÙ
ÙØ¹Ø© Ø§ÙØªØµÙÙØ©';
+$labels['newfilterset'] = 'Ù
جÙ
ÙØ¹Ø© تصÙÙØ© Ø¬Ø¯ÙØ¯Ø©';
$labels['active'] = 'ÙØ´Ø·';
+$labels['none'] = 'ÙØ§Ø´ÙØ¡';
+$labels['fromset'] = 'Ù
Ù Ù
جÙ
ÙØ¹Ø©';
+$labels['fromfile'] = 'Ù
Ù Ù
ÙÙ';
+$labels['filterdisabled'] = 'تعطÙÙ Ø§ÙØªØµÙÙØ©';
+$labels['countisgreaterthan'] = 'Ø§ÙØ¹Ø¯Ø¯ Ø§ÙØ¨Ø± Ù
Ù ';
+$labels['countisgreaterthanequal'] = 'Ø§ÙØ¹Ø¯Ø¯ Ø§ÙØ¨Ø± Ù
Ù Ø§Ù ÙØ³Ø§ÙÙ ';
+$labels['countislessthan'] = 'Ø§ÙØ¹Ø¯Ø¯ اÙÙ Ù
Ù ';
+$labels['countislessthanequal'] = 'Ø§ÙØ¹Ø¯Ø¯ اÙÙ Ù
Ù Ø§Ù ÙØ³Ø§ÙÙ';
+$labels['countequals'] = 'Ø§ÙØ¹Ø¯Ø¯ ÙØ³Ø§ÙÙ ';
+$labels['countnotequals'] = 'Ø§ÙØ¹Ø¯Ø¯ ÙØ§ ÙØ³Ø§ÙÙ';
+$labels['valueisgreaterthan'] = 'اÙÙÙÙ
Ø© Ø§ÙØ¨Ø± Ù
Ù ';
+$labels['valueisgreaterthanequal'] = 'اÙÙÙÙ
Ø© Ø§ÙØ¨Ø± Ù
٠ا٠تساÙÙ';
+$labels['valueislessthan'] = 'اÙÙÙÙ
Ø© اÙÙ Ù
Ù ';
+$labels['valueislessthanequal'] = 'اÙÙÙÙ
Ø© اÙÙ Ù
Ù Ø§Ù ÙØ³Ø§ÙÙ';
+$labels['valueequals'] = 'اÙÙÙÙ
Ø© تساÙÙ';
+$labels['valuenotequals'] = 'اÙÙÙÙ
Ø© ÙØ§ تساÙÙ';
+$labels['setflags'] = 'ضع ÙØ³Ù
عÙÙ ÙØ°Ù Ø§ÙØ±Ø³Ø§ÙØ© ';
+$labels['addflags'] = 'Ø§Ø¶Ù ÙØ³Ù
عÙÙ ÙØ°Ù Ø§ÙØ±Ø³Ø§ÙØ© ';
+$labels['removeflags'] = 'Ø§ØØ°Ù اÙÙØ³Ù
اÙÙ
ÙØ¬Ùد عÙÙ ÙØ°Ù Ø§ÙØ±Ø³Ø§ÙØ© ';
+$labels['flagread'] = 'ÙØ±Ø§Ø¡Ø© ';
$labels['flagdeleted'] = 'Ù
ØØ°ÙÙ';
+$labels['flaganswered'] = 'Ù
جابة';
$labels['flagflagged'] = 'Ù
ÙØ³ÙÙ
';
$labels['flagdraft'] = 'Ù
Ø³ÙØ¯Ø©';
+$labels['setvariable'] = 'تعÙÙÙ Ù
ØªØºÙØ±';
+$labels['setvarname'] = 'اسÙ
اÙÙ
ØªØºÙØ±:';
+$labels['setvarvalue'] = 'ÙÙÙ
Ø© اÙÙ
ØªØºÙØ±:';
+$labels['setvarmodifiers'] = 'تعدÙÙØ§Øª:';
+$labels['varquotewildcard'] = 'Ø£ÙØªØ¨Ø³ Ø£ØØ±Ù خاصة';
+$labels['varlength'] = 'Ø§ÙØ·ÙÙ';
+$labels['notify'] = 'Ø§Ø±Ø³Ù ØªÙØ¨ÙØ©';
+$labels['notifyimportance'] = 'اÙÙ
ÙØ©:';
$labels['notifyimportancelow'] = 'Ù
ÙØ®Ùض';
$labels['notifyimportancenormal'] = 'عادÙ';
$labels['notifyimportancehigh'] = 'Ù
Ø±ØªÙØ¹';
+$labels['filtercreate'] = 'Ø§ÙØ´Ø¦ تصÙÙØ©';
+$labels['usedata'] = 'استخدÙ
Ø§ÙØ¨ÙØ§ÙØ§Øª Ø§ÙØªØ§ÙÙØ© Ù٠اÙÙÙØªØ±:';
+$labels['nextstep'] = 'Ø§ÙØ®Ø·ÙØ© Ø§ÙØªØ§ÙÙØ©';
+$labels['...'] = '...';
+$labels['currdate'] = 'Ø§ÙØªØ§Ø±ÙØ® Ø§ÙØØ§ÙÙ';
+$labels['datetest'] = 'Ø§ÙØªØ§Ø±ÙØ®';
+$labels['dateheader'] = 'Ø§ÙØ±Ø§Ø³:';
+$labels['year'] = 'Ø§ÙØ³ÙØ©';
+$labels['month'] = 'Ø´ÙØ±';
+$labels['day'] = 'ÙÙÙ
';
+$labels['date'] = 'Ø§ÙØªØ§Ø±ÙØ® (yyyy-mm-dd)';
+$labels['julian'] = 'Ø§ÙØªØ§Ø±ÙØ® (ÙÙÙÙØ§Ù)';
+$labels['hour'] = 'ساعات';
+$labels['minute'] = 'Ø¯ÙØ§Ø¦Ù';
+$labels['second'] = 'Ø«ÙØ§ÙÙ';
+$labels['time'] = 'اÙÙÙØª (hh:mm:ss)';
+$labels['iso8601'] = 'Ø§ÙØªØ§Ø±ÙØ® (ISO8601)';
+$labels['std11'] = 'Ø§ÙØªØ§Ø±ÙØ® (RFC2822)';
+$labels['zone'] = 'اÙÙ
ÙØ·ÙØ© Ø§ÙØ²Ù
ÙÙØ©';
+$labels['weekday'] = 'Ø§ÙØ§Ù
Ø§ÙØ¹Ù
Ù (0-6)';
$labels['advancedopts'] = 'Ø®ÙØ§Ø±Ø§Øª Ù
ØªÙØ¯ÙÙ
Ø©';
+$labels['body'] = 'ÙØµ';
$labels['address'] = 'Ø§ÙØ¹ÙÙØ§Ù';
+$labels['modifier'] = 'تعدÙÙ:';
+$labels['text'] = 'ÙØµ';
+$labels['contenttype'] = 'ÙÙØ¹ اÙÙ
ØØªÙÙ';
+$labels['modtype'] = 'ÙÙØ¹:';
$labels['allparts'] = 'اÙÙÙ';
$labels['domain'] = 'اÙÙ
جاÙ';
+$labels['localpart'] = 'Ø§ÙØ¬Ø²Ø¡ اÙÙ
ØÙÙ';
+$labels['user'] = 'Ù
ستخدÙ
';
+$labels['detail'] = 'ØªÙØ§ØµÙÙ';
+$labels['default'] = 'Ø§ÙØªØ±Ø§Ø¶Ù';
+$labels['index'] = 'اÙÙØ§Ø±Ø¯:';
+$labels['indexlast'] = 'تراجع';
+$labels['vacation'] = 'اجازة ';
+$labels['vacation.advanced'] = 'اعدادات Ù
ØªÙØ¯Ù
Ø©';
+$labels['vacation.subject'] = 'Ù
ÙØ¶Ùع';
+$labels['vacation.body'] = 'Ù
ØØªÙÙ ';
+$labels['vacation.status'] = 'Ø§ÙØØ§ÙØ© ';
+$labels['vacation.on'] = 'تشغÙÙ';
+$labels['vacation.off'] = 'اÙÙØ§Ù';
+$labels['vacation.addresses'] = 'Ø¹ÙØ§ÙÙÙÙÙ Ø§ÙØ§Ø¶Ø§ÙÙØ©';
+$labels['vacation.saving'] = 'ÙØªÙ
ØÙظ Ø§ÙØ¨ÙØ§ÙØ§Øª...';
+$messages['filterunknownerror'] = 'خطا ØºÙØ± Ù
عرÙÙ Ù
Ù Ø§ÙØ®Ø§Ø¯Ù
.';
+$messages['filterconnerror'] = 'ÙØ§ ÙÙ
ÙÙ Ø§ÙØ§ØªØµØ§Ù Ø¨Ø§ÙØ®Ø§Ø¯Ù
.';
+$messages['filterdeleteerror'] = 'ÙØ§ ÙÙ
ÙÙ ØØ°Ù Ø§ÙØªØµÙÙØ©.خطا ÙÙ Ø§ÙØ®Ø§Ø¯Ù
.';
+$messages['filterdeleted'] = 'تÙ
ØØ°Ù Ø§ÙØªØµÙÙØ© Ø¨ÙØ¬Ø§Ø.';
+$messages['filtersaved'] = 'تÙ
ØÙظ Ø§ÙØªØµÙÙØ© Ø¨ÙØ¬Ø§Ø.';
+$messages['filtersaveerror'] = 'ÙØ§ ÙÙ
ÙÙ ØÙظ Ø§ÙØªØµÙÙØ©.خطا ÙÙ Ø§ÙØ®Ø§Ø¯Ù
.';
+$messages['filterdeleteconfirm'] = 'ÙÙ ØªØ±ÙØ¯ ÙØ¹ÙØ§Ù ØØ°Ù Ø§ÙØªØµÙÙØ© اÙÙ
ØØ¯Ø¯Ø©Ø';
+$messages['ruledeleteconfirm'] = 'ÙÙ ØªØ±ÙØ¯ ÙØ¹ÙØ§Ù ØØ°Ù اÙÙÙØ§Ø¹Ø¯ اÙÙ
ØØ¯Ø¯Ø©Ø';
+$messages['actiondeleteconfirm'] = 'ÙÙ ØªØ±ÙØ¯ ÙØ¹ÙØ§Ù ØØ°Ù Ø§ÙØ§Ø¬Ø±Ø§Ø¡Ø§Øª اÙÙ
ØØ¯Ø¯Ø©Ø';
+$messages['forbiddenchars'] = 'Ø§ØØ±Ù Ù
ØØ¸Ùرة ÙÙ ÙØ°Ø§ Ø§ÙØÙÙ.';
+$messages['cannotbeempty'] = 'ÙØ§ ÙÙ
ÙÙ ØªØ±Ù Ø§ÙØÙÙ ÙØ§Ø±ØºØ§Ù';
+$messages['ruleexist'] = 'اسÙ
ÙØ°Ø© Ø§ÙØªØµÙÙØ© Ù
ÙØ¬Ùد Ù
Ø³Ø¨ÙØ§Ù';
+$messages['setactivateerror'] = 'ÙØ§ ÙÙ
ÙÙ ØªÙØ¹ÙÙ Ù
جÙ
ÙØ¹Ø© Ø§ÙØªØµÙÙØ© اÙÙ
ØØ¯Ø¯Ø©.خطا ÙÙ Ø§ÙØ®Ø§Ø¯Ù
.';
+$messages['setdeactivateerror'] = 'ÙØ§ ÙÙ
Ù٠تعطÙÙ Ù
جÙ
ÙØ¹Ø© Ø§ÙØªØµÙÙØ© اÙÙ
ØØ¯Ø¯Ø©.خطا ÙÙ Ø§ÙØ®Ø§Ø¯Ù
.';
+$messages['setdeleteerror'] = 'ÙØ§ ÙÙ
ÙÙ ØØ°Ù Ù
جÙ
ÙØ¹Ø© Ø§ÙØªØµÙÙØ© اÙÙ
ØØ¯Ø¯Ø©.خطا ÙÙ Ø§ÙØ®Ø§Ø¯Ù
.';
+$messages['setactivated'] = 'تÙ
ØªÙØ¹ÙÙ Ù
جÙ
ÙØ¹Ø© Ø§ÙØªØµÙÙØ© Ø¨ÙØ¬Ø§Ø.';
+$messages['setdeactivated'] = 'تÙ
تعطÙÙ Ù
جÙ
ÙØ¹Ø© Ø§ÙØªØµÙÙØ© Ø¨ÙØ¬Ø§Ø.';
+$messages['setdeleted'] = 'تÙ
ØØ°Ù Ù
جÙ
ÙØ¹Ø© Ø§ÙØªØµÙÙØ© Ø¨ÙØ¬Ø§Ø.';
+$messages['setdeleteconfirm'] = 'ÙÙ ØªØ±ÙØ¯ ÙØ¹ÙØ§Ù ØØ°Ù Ù
جÙ
ÙØ¹Ø§Øª Ø§ÙØªØµÙÙØ© اÙÙ
ØØ¯Ø¯Ø©Ø';
+$messages['setcreateerror'] = 'ÙØ§ ÙÙ
ÙÙ Ø§ÙØ´Ø§Ø¡ Ù
جÙ
ÙØ¹Ø© تصÙÙØ©.خطا ÙÙ Ø§ÙØ®Ø§Ø¯Ù
.';
+$messages['setcreated'] = 'تÙ
Ø§ÙØ´Ø§Ø¡ Ù
جÙ
ÙØ¹Ø© Ø§ÙØªØµÙÙØ© Ø¨ÙØ¬Ø§Ø.';
+$messages['activateerror'] = 'ÙØ§ ÙÙ
Ù٠تÙ
ÙÙÙ Ø§ÙØªØµÙÙØ©(ÙØ§Øª) اÙÙ
ØØ¯Ø¯Ø© .خطا ÙÙ Ø§ÙØ®Ø§Ø¯Ù
.';
+$messages['deactivateerror'] = 'ÙØ§ ÙÙ
Ù٠تعطÙÙ Ø§ÙØªØµÙÙØ©(ÙØ§Øª) اÙÙ
ØØ¯Ø¯Ø© .خطا ÙÙ Ø§ÙØ®Ø§Ø¯Ù
.';
+$messages['deactivated'] = 'تÙ
تعطÙ٠اÙÙ
صÙÙÙ(ÙØ§Ø©) Ø¨ÙØ¬Ø§Ø.';
+$messages['activated'] = 'تÙ
ØªÙØ¹Ù٠اÙÙ
صÙÙÙ(ÙØ§Ø©) Ø¨ÙØ¬Ø§Ø.';
+$messages['moved'] = 'تÙ
ÙÙÙ Ø§ÙØªØµÙÙØ© Ø¨ÙØ¬Ø§Ø.';
+$messages['moveerror'] = 'ÙØ§ ÙÙ
ÙÙ ÙÙÙ Ø§ÙØªØµÙÙØ§Ø© اÙÙ
ØØ¯Ø¯Ø©.خطا ÙÙ Ø§ÙØ®Ø§Ø¯Ù
.';
+$messages['nametoolong'] = 'Ø§ÙØ¥Ø³Ù
Ø·ÙÙ٠جداÙ';
+$messages['setexist'] = 'اÙÙ
جÙ
ÙØ¹Ø© Ù
ÙØ¬Ùدة Ù
Ø³Ø¨ÙØ§.';
+$messages['nodata'] = 'ÙØ¬Ø¨ ØªØØ¯Ùد Ù
ÙØ¶Ø¹ ÙØ§ØØ¯ عÙÙ Ø§ÙØ£ÙÙ!';
+$messages['invaliddateformat'] = 'ØªØ§Ø±ÙØ® ØºÙØ± صØÙØ Ø§Ù ÙÙØ¬Ø¯ خطا ÙÙ ØªÙØ³Ù اجزاء Ø§ÙØªØ§Ø±ÙØ®';
+$messages['saveerror'] = 'ÙØ§ ÙÙ
ÙÙ ØÙظ Ø§ÙØ¨ÙØ§ÙØ§Øª. خطا ÙÙ Ø§ÙØ®Ø§Ø¯Ù
.';
+$messages['vacationsaved'] = 'تÙ
ØÙظ ØªØ§Ø±ÙØ® Ø§ÙØ§Ø¬Ø§Ø²Ø© Ø¨ÙØ¬Ø§Ø.';
?>
diff --git a/lib/plugins/managesieve/localization/az_AZ.inc b/lib/plugins/managesieve/localization/az_AZ.inc
index d692b96..8aec7e3 100644
--- a/lib/plugins/managesieve/localization/az_AZ.inc
+++ b/lib/plugins/managesieve/localization/az_AZ.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'QÉbul edÉn';
$labels['vacationaddr'] = 'MÉnim ÉlavÉ e-poçt ünvan(lar)ım: ';
$labels['vacationdays'] = 'MÉktub neÃ§É müddÉtdÉn bir göndÉrilsin (gündÉ):';
$labels['vacationinterval'] = 'MÉktublar nÉ qÉdÉr sıx göndÉrilsin:';
-$labels['days'] = 'günlÉr';
-$labels['seconds'] = 'saniyÉlÉr';
$labels['vacationreason'] = 'MÉktubun mÉtni (sÉbÉb yoxdur):';
$labels['vacationsubject'] = 'MÉktubun mövzusu:';
+$labels['days'] = 'günlÉr';
+$labels['seconds'] = 'saniyÉlÉr';
$labels['rulestop'] = 'YerinÉ yetirmÉyi dayandır';
$labels['enable'] = 'Yandır/Söndür';
$labels['filterset'] = 'SüzgÉc dÉsti';
@@ -108,10 +108,6 @@ $labels['varupperfirst'] = 'yuxarı registrdÉ birinci simvol';
$labels['varquotewildcard'] = 'dırnaq simvolu';
$labels['varlength'] = 'uzunluq';
$labels['notify'] = 'BildiriÅ göndÉr';
-$labels['notifyaddress'] = 'Poçt ünvanı:';
-$labels['notifybody'] = 'BildiriÅ mÉtni';
-$labels['notifysubject'] = 'BildiriŠmövzusu';
-$labels['notifyfrom'] = 'BildiriÅi yolla:';
$labels['notifyimportance'] = 'Vaciblik';
$labels['notifyimportancelow'] = 'aÅaÄı';
$labels['notifyimportancenormal'] = 'normal';
diff --git a/lib/plugins/managesieve/localization/be_BE.inc b/lib/plugins/managesieve/localization/be_BE.inc
index 29c97ad..5a691cd 100644
--- a/lib/plugins/managesieve/localization/be_BE.inc
+++ b/lib/plugins/managesieve/localization/be_BE.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'ÐамÑ';
$labels['vacationaddr'] = 'ÐадаÑковÑ(Ñ) адÑаÑÑ Ñл. поÑÑÑ:';
$labels['vacationdays'] = 'Як ÑаÑÑа даÑÑлаÑÑ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½Ð½Ñ (Ñ Ð´Ð½ÑÑ
):';
$labels['vacationinterval'] = 'Як ÑаÑÑа даÑÑлаÑÑ Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½Ð½Ñ:';
-$labels['days'] = 'дзÑн';
-$labels['seconds'] = 'ÑекÑнд';
$labels['vacationreason'] = 'Цела Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½Ð½Ñ (пÑÑÑÑна вакаÑÑй):';
$labels['vacationsubject'] = 'ТÑма паведамленнÑ:';
+$labels['days'] = 'дзÑн';
+$labels['seconds'] = 'ÑекÑнд';
$labels['rulestop'] = 'ÐеÑаÑÑаÑÑ Ð²ÑконваÑÑ Ð¿ÑавеÑÐºÑ Ð¿ÑавÑлаÑ';
$labels['enable'] = 'УклÑÑÑÑÑ/ÐÑклÑÑÑÑÑ';
$labels['filterset'] = 'ÐÐ°Ð±Ð¾Ñ ÑÑлÑÑÑаÑ';
@@ -108,10 +108,6 @@ $labels['varupperfirst'] = 'пеÑÑÑ Ð·Ð½Ð°Ðº Ñ Ð²ÐµÑÑ
нÑм ÑÑгÑÑÑÑ
$labels['varquotewildcard'] = 'ÑлÑжбовÑÑ Ð·Ð½Ð°ÐºÑ Ð·Ð°Ð±ÑÑаÑÑ Ñ Ð°Ð¿Ð¾ÑÑÑаÑÑ';
$labels['varlength'] = 'даÑжÑнÑ';
$labels['notify'] = 'ÐаÑлаÑÑ Ð°Ð¿Ð°Ð²ÑÑÑÑнне';
-$labels['notifyaddress'] = 'Ðа Ñл. адÑаÑ:';
-$labels['notifybody'] = 'Цела апавÑÑÑÑннÑ:';
-$labels['notifysubject'] = 'ТÑма апавÑÑÑÑннÑ:';
-$labels['notifyfrom'] = 'ÐдпÑаÑнÑк апавÑÑÑÑннÑ:';
$labels['notifyimportance'] = 'ÐажнаÑÑÑ:';
$labels['notifyimportancelow'] = 'нÑзкаÑ';
$labels['notifyimportancenormal'] = 'звÑÑайнаÑ';
diff --git a/lib/plugins/managesieve/localization/bg_BG.inc b/lib/plugins/managesieve/localization/bg_BG.inc
index c9d06d2..432cb4f 100644
--- a/lib/plugins/managesieve/localization/bg_BG.inc
+++ b/lib/plugins/managesieve/localization/bg_BG.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'ÐолÑÑаÑел';
$labels['vacationaddr'] = 'Ðои допÑлниÑелни e-mail адÑеÑи:';
$labels['vacationdays'] = 'Ðолко ÑеÑÑо да пÑаÑа пиÑма (в дни):';
$labels['vacationinterval'] = 'Ðолко ÑеÑÑо да пÑаÑа пиÑма:';
-$labels['days'] = 'дни';
-$labels['seconds'] = 'ÑекÑнди';
$labels['vacationreason'] = 'ТекÑÑ Ð½Ð° пиÑмоÑо (пÑиÑина за ваканÑиÑÑа)';
$labels['vacationsubject'] = 'Ðаглавие на пиÑмоÑо';
+$labels['days'] = 'дни';
+$labels['seconds'] = 'ÑекÑнди';
$labels['rulestop'] = 'СпÑи пÑовеÑка на дÑÑги ÑÑловиÑ';
$labels['enable'] = 'ÐклÑÑи/ÐзклÑÑи';
$labels['filterset'] = 'ÐÐ°Ð±Ð¾Ñ ÑилÑÑи';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'пÑÑви знак Ñ Ð³Ð»Ð°Ð²Ð½Ð° бÑква';
$labels['varquotewildcard'] = 'ÑиÑиÑане на ÑпеÑиални знаÑи';
$labels['varlength'] = 'дÑлжина';
$labels['notify'] = 'ÐзпÑаÑи извеÑÑие';
-$labels['notifyaddress'] = 'Ðо e-mail адÑеÑ:';
-$labels['notifybody'] = 'ÐÑновен ÑекÑÑ Ð½Ð° извеÑÑиеÑо:';
-$labels['notifysubject'] = 'Ðаглавие на извеÑÑиеÑо:';
-$labels['notifyfrom'] = 'ÐодаÑел на извеÑÑиеÑо:';
+$labels['notifytarget'] = 'ÐзвеÑÑие кÑм:';
+$labels['notifymessage'] = 'СÑдÑÑжание на извеÑÑие (опÑионално):';
+$labels['notifyoptions'] = 'ÐпÑии на извеÑÑие (опÑионално):';
+$labels['notifyfrom'] = 'ÐзвеÑÑие Ð¾Ñ (опÑионално):';
$labels['notifyimportance'] = 'ÐÑиоÑиÑеÑ:';
$labels['notifyimportancelow'] = 'ниÑÑк';
$labels['notifyimportancenormal'] = 'ноÑмален';
$labels['notifyimportancehigh'] = 'виÑок';
+$labels['notifymethodmailto'] = 'Ðл. поÑа';
+$labels['notifymethodtel'] = 'ТелеÑон';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Ðзползвай за нов ÑилÑÑÑ';
$labels['usedata'] = 'Ðзползвай ÑледниÑе данни вÑв ÑилÑÑÑа:';
$labels['nextstep'] = 'СледваÑа ÑÑÑпка';
@@ -157,6 +160,18 @@ $labels['asciicasemap'] = 'без знаÑение малки/големи бÑ
$labels['asciinumeric'] = 'ÑиÑÑово';
$labels['index'] = 'индекÑ:';
$labels['indexlast'] = 'наобÑаÑно';
+$labels['vacation'] = 'ÐÑпÑÑк';
+$labels['vacation.reply'] = 'ÐиÑмо оÑговоÑ';
+$labels['vacation.advanced'] = 'РазÑиÑени наÑÑÑойки';
+$labels['vacation.subject'] = 'ÐÑноÑно';
+$labels['vacation.body'] = 'СÑдÑÑжание';
+$labels['vacation.status'] = 'СÑаÑÑÑ';
+$labels['vacation.on'] = 'Ðкл.';
+$labels['vacation.off'] = 'Ðзкл.';
+$labels['vacation.addresses'] = 'ÐоиÑе допÑлниÑелни адÑеÑи';
+$labels['vacation.interval'] = 'ÐнÑеÑвал на оÑговоÑ';
+$labels['vacation.after'] = 'ÐоÑÑави пÑавило за оÑпÑÑк Ñлед';
+$labels['vacation.saving'] = 'ÐÐ°Ð¿Ð¸Ñ Ð½Ð° данни...';
$messages['filterunknownerror'] = 'ÐеизвеÑÑна ÑÑÑвÑÑна гÑеÑка.';
$messages['filterconnerror'] = 'ÐеÑÑпеÑно ÑвÑÑзване Ñ managesieve ÑÑÑвÑÑа.';
$messages['filterdeleteerror'] = 'ÐевÑзможно изÑÑиване на ÑилÑÑÑа. ÐÑзникна ÑÑÑвÑÑна гÑеÑка.';
@@ -189,4 +204,6 @@ $messages['namereserved'] = 'РезеÑвиÑано име.';
$messages['setexist'] = 'ÐеÑе има ÑакÑв Ð½Ð°Ð±Ð¾Ñ ÑилÑÑи.';
$messages['nodata'] = 'Ðоне една позиÑÐ¸Ñ ÑÑÑбва да е избÑана!';
$messages['invaliddateformat'] = 'невалидна даÑа или ÑоÑÐ¼Ð°Ñ Ð½Ð° ÑаÑÑ Ð¾Ñ Ð´Ð°Ñа';
+$messages['saveerror'] = 'ÐевÑзможен Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° данни. ÐÑеÑка пÑи доÑÑÑп до ÑÑÑвÑÑ.';
+$messages['vacationsaved'] = 'ÐанниÑе за оÑпÑÑк Ñа запиÑани ÑÑпеÑно.';
?>
diff --git a/lib/plugins/managesieve/localization/bs_BA.inc b/lib/plugins/managesieve/localization/bs_BA.inc
index bee1aba..84a85a3 100644
--- a/lib/plugins/managesieve/localization/bs_BA.inc
+++ b/lib/plugins/managesieve/localization/bs_BA.inc
@@ -165,9 +165,8 @@ $labels['vacation.reply'] = 'Poruka sa odgovorom';
$labels['vacation.advanced'] = 'Napredmen postavke';
$labels['vacation.subject'] = 'Naslov';
$labels['vacation.body'] = 'Tijelo';
-$labels['vacation.dates'] = 'Vrijeme odmora';
-$labels['vacation.from'] = 'Od:';
-$labels['vacation.to'] = 'Do:';
+$labels['vacation.start'] = 'PoÄetak odmora';
+$labels['vacation.end'] = 'Kraj odmora';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'UkljuÄeno';
$labels['vacation.off'] = 'IskljuÄeno';
diff --git a/lib/plugins/managesieve/localization/ca_ES.inc b/lib/plugins/managesieve/localization/ca_ES.inc
index 5e54c6a..0dc6863 100644
--- a/lib/plugins/managesieve/localization/ca_ES.inc
+++ b/lib/plugins/managesieve/localization/ca_ES.inc
@@ -24,7 +24,7 @@ $labels['filterdel'] = 'Suprimeix el filtre';
$labels['moveup'] = 'Mou amunt';
$labels['movedown'] = 'Mou avall';
$labels['filterallof'] = 'que coincideixi amb totes les regles següents';
-$labels['filteranyof'] = 'que no coincideixi amb cap de les regles següents';
+$labels['filteranyof'] = 'que coincideixi amb qualsevol de les regles següents';
$labels['filterany'] = 'tots els missatges';
$labels['filtercontains'] = 'conté';
$labels['filternotcontains'] = 'no conté';
@@ -57,10 +57,10 @@ $labels['recipient'] = 'Destinatari';
$labels['vacationaddr'] = 'Les meves adreces de correu addicionals:';
$labels['vacationdays'] = 'Cada quan enviar un missatge (en dies):';
$labels['vacationinterval'] = 'Amb quina freqüència s\'han d\'enviar els missatges:';
-$labels['days'] = 'dies';
-$labels['seconds'] = 'segons';
$labels['vacationreason'] = 'Cos del missatge (raó de l\'absència):';
$labels['vacationsubject'] = 'Assumpte del missatge:';
+$labels['days'] = 'dies';
+$labels['seconds'] = 'segons';
$labels['rulestop'] = 'Deixa d\'avaluar regles';
$labels['enable'] = 'Habilita/Deshabilita';
$labels['filterset'] = 'Conjunt de filtres';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'el primer carà cter en majúscula';
$labels['varquotewildcard'] = 'engloba els carà cters especials amb cometes';
$labels['varlength'] = 'llargada';
$labels['notify'] = 'Envia notificació';
-$labels['notifyaddress'] = 'A l\'adreça de correu electrònic:';
-$labels['notifybody'] = 'Cos de la notificació:';
-$labels['notifysubject'] = 'Assumpte de la notificació:';
-$labels['notifyfrom'] = 'Remitent de la notificació:';
+$labels['notifytarget'] = 'Objectiu de la notificació:';
+$labels['notifymessage'] = 'Missatge de notificació (opcional):';
+$labels['notifyoptions'] = 'Opcions de notificació (opcional):';
+$labels['notifyfrom'] = 'Remitent de la notificació (opcional):';
$labels['notifyimportance'] = 'Importà ncia:';
$labels['notifyimportancelow'] = 'baixa';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
+$labels['notifymethodmailto'] = 'Correu electrònic';
+$labels['notifymethodtel'] = 'Telèfon';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crea filtre';
$labels['usedata'] = 'Fes servir les següents dades al filtre:';
$labels['nextstep'] = 'Següent pas';
@@ -157,6 +160,32 @@ $labels['asciicasemap'] = 'No distingeix entre majúscules i minúscules (ascii
$labels['asciinumeric'] = 'numèric (ascii-numeric)';
$labels['index'] = 'Ãndex:';
$labels['indexlast'] = 'cap enrere';
+$labels['vacation'] = 'Vacances';
+$labels['vacation.reply'] = 'Missatge de resposta';
+$labels['vacation.advanced'] = 'Parà metres avançats';
+$labels['vacation.subject'] = 'Assumpte';
+$labels['vacation.body'] = 'Cos';
+$labels['vacation.start'] = 'Inici de vacances';
+$labels['vacation.end'] = 'Finalització de vacances';
+$labels['vacation.status'] = 'Estat';
+$labels['vacation.on'] = 'Activat';
+$labels['vacation.off'] = 'Desactivat';
+$labels['vacation.addresses'] = 'Les meves adreces addicionals:';
+$labels['vacation.interval'] = 'Interval de resposta';
+$labels['vacation.after'] = 'Posa la regla de vacances després';
+$labels['vacation.saving'] = 'S\'estan desant les dades...';
+$labels['vacation.action'] = 'Acció pel missatge entrant';
+$labels['vacation.keep'] = 'Conserva';
+$labels['vacation.discard'] = 'Descarta';
+$labels['vacation.redirect'] = 'Redirigeix cap a';
+$labels['vacation.copy'] = 'Envia còpia a';
+$labels['arialabelfiltersetactions'] = 'Accions pel conjunt de filtres';
+$labels['arialabelfilteractions'] = 'Accions del filtre';
+$labels['arialabelfilterform'] = 'Propietats del filtre';
+$labels['ariasummaryfilterslist'] = 'Llistat de filtres';
+$labels['ariasummaryfiltersetslist'] = 'Llistat de conjunts de filtres';
+$labels['filterstitle'] = 'Edita els filtres pels missatges entrants';
+$labels['vacationtitle'] = 'Edita la norma "fora de l\'oficina"';
$messages['filterunknownerror'] = 'Error desconegut al servidor.';
$messages['filterconnerror'] = 'No s\'ha pogut connectar al servidor.';
$messages['filterdeleteerror'] = 'No s\'ha pogut suprimir el filtre. Hi ha hagut un error al servidor.';
@@ -189,4 +218,7 @@ $messages['namereserved'] = 'Nom reservat.';
$messages['setexist'] = 'El conjunt ja existeix.';
$messages['nodata'] = 'S\'ha de seleccionar com a mÃnim una posició!';
$messages['invaliddateformat'] = 'data no và lida o format no và lid';
+$messages['saveerror'] = 'No s\'han pogut desar les dades. Hi ha hagut un error al servidor.';
+$messages['vacationsaved'] = 'Les dades de les vacances s\'han desat correctament.';
+$messages['emptyvacationbody'] = 'Ãs obligatori definir el cos del missatge de vacances';
?>
diff --git a/lib/plugins/managesieve/localization/cs_CZ.inc b/lib/plugins/managesieve/localization/cs_CZ.inc
index d304da6..6db6bac 100644
--- a/lib/plugins/managesieve/localization/cs_CZ.inc
+++ b/lib/plugins/managesieve/localization/cs_CZ.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'PÅÃjemce';
$labels['vacationaddr'] = 'Moje dalšà e-mailová adresa(y):';
$labels['vacationdays'] = 'PoÄet dnů mezi automatickými odpovÄÄmi:';
$labels['vacationinterval'] = 'Prodleva mezi automatickými odpovÄÄmi:';
-$labels['days'] = 'dnů';
-$labels['seconds'] = 'sekund';
$labels['vacationreason'] = 'Zpráva (Důvod nepÅÃtomnosti):';
$labels['vacationsubject'] = 'PÅedmÄt zprávy:';
+$labels['days'] = 'dnů';
+$labels['seconds'] = 'sekund';
$labels['rulestop'] = 'Zastavit pravidla';
$labels['enable'] = 'Zapnout/Vypnout';
$labels['filterset'] = 'Sada filtrů';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'prvnà pÃsmeno velké';
$labels['varquotewildcard'] = 'uvodit speciálnà znaky uvozovkama';
$labels['varlength'] = 'délka';
$labels['notify'] = 'Odeslat oznámenÃ';
-$labels['notifyaddress'] = 'Na emailovou adresu:';
-$labels['notifybody'] = 'Zpráva oznámenÃ:';
-$labels['notifysubject'] = 'PÅedmÄt oznámenÃ:';
-$labels['notifyfrom'] = 'OdesÃlatel oznámenÃ:';
+$labels['notifytarget'] = 'CÃl oznámenÃ:';
+$labels['notifymessage'] = 'Zpráva oznámenà (nepovinné):';
+$labels['notifyoptions'] = 'Možnosti oznámenà (nepovinné):';
+$labels['notifyfrom'] = 'OdesÃlatel oznámenà (nepovinné):';
$labels['notifyimportance'] = 'Důležitost:';
$labels['notifyimportancelow'] = 'nÃzká';
$labels['notifyimportancenormal'] = 'normálnÃ';
$labels['notifyimportancehigh'] = 'vysoká';
+$labels['notifymethodmailto'] = 'E-mail';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'VytvoÅit filtr';
$labels['usedata'] = 'PoužÃt následujÃcà údaje ve filtru:';
$labels['nextstep'] = 'Dalšà krok';
@@ -157,6 +160,26 @@ $labels['asciicasemap'] = 'necitlivé na velikost pÃsmen (ascii-casemap)';
$labels['asciinumeric'] = 'ÄÃslené (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'pozpátku';
+$labels['vacation'] = 'Dovolená';
+$labels['vacation.reply'] = 'OdpovÄd';
+$labels['vacation.advanced'] = 'PokroÄilá nastavenÃ';
+$labels['vacation.subject'] = 'PÅedmÄt';
+$labels['vacation.body'] = 'TÄlo';
+$labels['vacation.start'] = 'ZaÄátek dovolené';
+$labels['vacation.end'] = 'Konec dovolené';
+$labels['vacation.status'] = 'Stav';
+$labels['vacation.on'] = 'Zapnuto';
+$labels['vacation.off'] = 'Vypnuto';
+$labels['vacation.addresses'] = 'Moje dalšà adresy:';
+$labels['vacation.interval'] = 'Doba mezi odpovÄÄmi';
+$labels['vacation.after'] = 'Uložit pravidlo o dovolené za';
+$labels['vacation.saving'] = 'Ukládám data...';
+$labels['vacation.keep'] = 'Zachovat';
+$labels['vacation.discard'] = 'Zrušit';
+$labels['vacation.copy'] = 'Odeslat kopii zprávy na';
+$labels['arialabelfilterform'] = 'Vlastnosti filtru';
+$labels['ariasummaryfilterslist'] = 'Seznam filtrů';
+$labels['ariasummaryfiltersetslist'] = 'Seznam sad filtrů';
$messages['filterunknownerror'] = 'Neznámá chyba serveru';
$messages['filterconnerror'] = 'Nebylo možné se pÅipojit k sieve serveru';
$messages['filterdeleteerror'] = 'Nebylo možné smazat filtr. DoÅ¡lo k chybÄ serveru.';
@@ -180,7 +203,7 @@ $messages['setcreateerror'] = 'Nelze vytvoÅit sadu filtrů. DoÅ¡lo k chybÄ ser
$messages['setcreated'] = 'Sada filtrů úspÄÅ¡nÄ vytvoÅena.';
$messages['activateerror'] = 'Nelze zapnout vybrané filtr/y. DoÅ¡lo k chybÄ serveru.';
$messages['deactivateerror'] = 'Nelze vypnout vybrané filtr/y. DoÅ¡lo k chybÄ serveru.';
-$messages['deactivated'] = 'Filtr/y úspÄÅ¡ne vypnuty.';
+$messages['deactivated'] = 'Filtr(y) úspÄÅ¡nÄ vypnuty.';
$messages['activated'] = 'Filtr/y úspÄÅ¡nÄ zapnuty.';
$messages['moved'] = 'Filtr byl úspÄÅ¡nÄ pÅesunut.';
$messages['moveerror'] = 'Nelze pÅesunout vybraný filtr. DoÅ¡lo k chybÄ serveru.';
@@ -189,4 +212,7 @@ $messages['namereserved'] = 'Vyhrazený název.';
$messages['setexist'] = 'Sada již existuje.';
$messages['nodata'] = 'Musà být vybrána minimálnÄ jedna pozice!';
$messages['invaliddateformat'] = 'Neplatné datum nebo Äást data';
+$messages['saveerror'] = 'Nebylo možné uložit data. DoÅ¡lo k chybÄ serveru.';
+$messages['vacationsaved'] = 'Data o dovolené byla uložena.';
+$messages['emptyvacationbody'] = 'TÄlo zprávy';
?>
diff --git a/lib/plugins/managesieve/localization/cy_GB.inc b/lib/plugins/managesieve/localization/cy_GB.inc
index a10205d..8d8d1a5 100644
--- a/lib/plugins/managesieve/localization/cy_GB.inc
+++ b/lib/plugins/managesieve/localization/cy_GB.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'Derbynnwr';
$labels['vacationaddr'] = 'Fy nghyfeiriad(au) ebost ychwanegol:';
$labels['vacationdays'] = 'Pa mor aml i ddanfon negeseuon (mewn dyddiau):';
$labels['vacationinterval'] = 'Pa mor aml i ddanfon negeseuon:';
-$labels['days'] = 'dyddiau';
-$labels['seconds'] = 'eiliadau';
$labels['vacationreason'] = 'Corff neges (rheswm ar wyliau):';
$labels['vacationsubject'] = 'Pwnc neges:';
+$labels['days'] = 'dyddiau';
+$labels['seconds'] = 'eiliadau';
$labels['rulestop'] = 'Stopio gwerthuso rheolau';
$labels['enable'] = 'Galluogi/Analluogi';
$labels['filterset'] = 'Set hidlyddion';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'llythyren gyntaf yn briflythyren';
$labels['varquotewildcard'] = 'dyfynnu nodau arbennig';
$labels['varlength'] = 'hyd';
$labels['notify'] = 'Anfon hysbysiad';
-$labels['notifyaddress'] = 'I gyfeiriad ebost:';
-$labels['notifybody'] = 'Corff hysbysiad:';
-$labels['notifysubject'] = 'Pwnc hysbysiad:';
-$labels['notifyfrom'] = 'Anfonwr hysbysiad:';
+$labels['notifytarget'] = 'Target hysbysu:';
+$labels['notifymessage'] = 'Neges hysbysu (dewisol):';
+$labels['notifyoptions'] = 'Dewisiadau hysbysu (dewisol):';
+$labels['notifyfrom'] = 'Anfonwr hysbysiad (dewisol):';
$labels['notifyimportance'] = 'Pwysigrwydd:';
$labels['notifyimportancelow'] = 'isel';
$labels['notifyimportancenormal'] = 'arferol';
$labels['notifyimportancehigh'] = 'uchel';
+$labels['notifymethodmailto'] = 'Ebost';
+$labels['notifymethodtel'] = 'Ffôn';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Creu hidlydd';
$labels['usedata'] = 'Defnyddio\'r wybodaeth ganlynol yn yr hidlydd:';
$labels['nextstep'] = 'Cam nesaf';
@@ -157,6 +160,32 @@ $labels['asciicasemap'] = 'maint llythrennau (ascii-casemap)';
$labels['asciinumeric'] = 'rhifau (ascii-numeric)';
$labels['index'] = 'mynegai:';
$labels['indexlast'] = 'o chwith';
+$labels['vacation'] = 'Gwyliau';
+$labels['vacation.reply'] = 'Neges ymateb';
+$labels['vacation.advanced'] = 'Gosodiadau uwch';
+$labels['vacation.subject'] = 'Pwnc';
+$labels['vacation.body'] = 'Corff';
+$labels['vacation.start'] = 'Dechrau gwyliau';
+$labels['vacation.end'] = 'Diwedd gwyliau';
+$labels['vacation.status'] = 'Statws';
+$labels['vacation.on'] = 'Ymlaen';
+$labels['vacation.off'] = 'I ffwrdd';
+$labels['vacation.addresses'] = 'Fy nghyfeiriadau ychwanegol';
+$labels['vacation.interval'] = 'Cyfnod ymateb';
+$labels['vacation.after'] = 'Rhoi rheol gwyliau ar ôl';
+$labels['vacation.saving'] = 'Yn cadw\'r data...';
+$labels['vacation.action'] = 'Gweithred neges i fewn';
+$labels['vacation.keep'] = 'Cadw';
+$labels['vacation.discard'] = 'Gwaredu';
+$labels['vacation.redirect'] = 'Ailgyfeirio i';
+$labels['vacation.copy'] = 'Danfon copi i';
+$labels['arialabelfiltersetactions'] = 'Gweithrediadau set hidlydd';
+$labels['arialabelfilteractions'] = 'Gweithrediadau hidlydd';
+$labels['arialabelfilterform'] = 'Nodweddion hidlydd';
+$labels['ariasummaryfilterslist'] = 'Rhestr o hidlyddion';
+$labels['ariasummaryfiltersetslist'] = 'Rhestr o setiau hidlyddion';
+$labels['filterstitle'] = 'Golygu hidlyddion ebost i fewn';
+$labels['vacationtitle'] = 'Golygu rheol allan-o\'r-swyddfa';
$messages['filterunknownerror'] = 'Gwall gweinydd anhysbys.';
$messages['filterconnerror'] = 'Methwyd cysylltu a\'r gweinydd.';
$messages['filterdeleteerror'] = 'Methwyd dileu hidlydd. Cafwydd gwall gweinydd.';
@@ -189,4 +218,7 @@ $messages['namereserved'] = 'Enw neilltuedig.';
$messages['setexist'] = 'Mae\'r set yn bodoli\'n barod.';
$messages['nodata'] = 'Rhaid dewis o leia un safle!';
$messages['invaliddateformat'] = 'Dyddiad neu fformat dyddiad annilys';
+$messages['saveerror'] = 'Methwyd cadw\'r data. Cafwyd gwall gweinydd.';
+$messages['vacationsaved'] = 'Cadwyd y data gwyliau yn llwyddiannus.';
+$messages['emptyvacationbody'] = 'Mae angen rhoi corff y neges wyliau!';
?>
diff --git a/lib/plugins/managesieve/localization/da_DK.inc b/lib/plugins/managesieve/localization/da_DK.inc
index b240741..ebf1cb0 100644
--- a/lib/plugins/managesieve/localization/da_DK.inc
+++ b/lib/plugins/managesieve/localization/da_DK.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'Modtager';
$labels['vacationaddr'] = 'Min(e) yderligere email-adresse(r):';
$labels['vacationdays'] = 'Hvor tit skal besked sendes (i dage):';
$labels['vacationinterval'] = 'Hvor tit skal besked sendes:';
-$labels['days'] = 'dage';
-$labels['seconds'] = 'sekunder';
$labels['vacationreason'] = 'Besked (ved ferie):';
$labels['vacationsubject'] = 'Besked emne:';
+$labels['days'] = 'dage';
+$labels['seconds'] = 'sekunder';
$labels['rulestop'] = 'Stop behandling af regler';
$labels['enable'] = 'Aktivér/Deaktivér';
$labels['filterset'] = 'Filter sæt';
@@ -108,14 +108,13 @@ $labels['varupperfirst'] = 'Første bogstav stort';
$labels['varquotewildcard'] = 'Sæt specialle tegn i citationstegn ';
$labels['varlength'] = 'længde';
$labels['notify'] = 'Send meddelelse';
-$labels['notifyaddress'] = 'Til e-mail adresse:';
-$labels['notifybody'] = 'meddelelses indhold:';
-$labels['notifysubject'] = 'Meddelelses emne:';
-$labels['notifyfrom'] = 'Meddelelses afsender:';
$labels['notifyimportance'] = 'Vigtighed:';
$labels['notifyimportancelow'] = 'lav';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'høj';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Opret filter';
$labels['usedata'] = 'Brug følgende data i filteret:';
$labels['nextstep'] = 'Næste trin';
@@ -157,6 +156,18 @@ $labels['asciicasemap'] = 'store og små bogstaver (ascii-bogstaver)';
$labels['asciinumeric'] = 'numerisk (ascii-numerisk)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'baglends';
+$labels['vacation'] = 'Ferie';
+$labels['vacation.reply'] = 'Svar besked';
+$labels['vacation.advanced'] = 'Avanceret indstillinger ';
+$labels['vacation.subject'] = 'Emne';
+$labels['vacation.start'] = 'Ferie star';
+$labels['vacation.end'] = 'Ferie slut';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.saving'] = 'Gemmer data...';
+$labels['vacation.keep'] = 'Behold';
+$labels['vacation.discard'] = 'Kasser';
+$labels['vacation.redirect'] = 'Omdiriger til ';
+$labels['vacation.copy'] = 'Send kopi til';
$messages['filterunknownerror'] = 'Ukendt server fejl.';
$messages['filterconnerror'] = 'Kan ikke forbinde til server.';
$messages['filterdeleteerror'] = 'Kunne ikke slette filter. Serverfejl opstod.';
@@ -189,4 +200,6 @@ $messages['namereserved'] = 'Reserveret navn.';
$messages['setexist'] = 'Filterv sæt eksisterer allerede';
$messages['nodata'] = 'Mindst en position skal vælges!';
$messages['invaliddateformat'] = 'Ugyldigt dato- eller tidsformat';
+$messages['saveerror'] = 'Kunne ikke gemme data. Server fejl';
+$messages['vacationsaved'] = 'Ferie data gemt';
?>
diff --git a/lib/plugins/managesieve/localization/de_CH.inc b/lib/plugins/managesieve/localization/de_CH.inc
index 234f313..13a4a67 100644
--- a/lib/plugins/managesieve/localization/de_CH.inc
+++ b/lib/plugins/managesieve/localization/de_CH.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'Empfänger';
$labels['vacationaddr'] = 'Meine weiteren E-Mail-Adressen:';
$labels['vacationdays'] = 'Antwort wird erneut gesendet nach (in Tagen):';
$labels['vacationinterval'] = 'Wie oft senden:';
-$labels['days'] = 'Tage';
-$labels['seconds'] = 'Sekunden';
$labels['vacationreason'] = 'Inhalt der Nachricht (Abwesenheitsgrund):';
$labels['vacationsubject'] = 'Betreff';
+$labels['days'] = 'Tage';
+$labels['seconds'] = 'Sekunden';
$labels['rulestop'] = 'Regelauswertung anhalten';
$labels['enable'] = 'Aktivieren/Deaktivieren';
$labels['filterset'] = 'Filtersätze';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'Erster Buchstabe gross';
$labels['varquotewildcard'] = 'Sonderzeichen auszeichnen';
$labels['varlength'] = 'Länge';
$labels['notify'] = 'Mitteilung senden';
-$labels['notifyaddress'] = 'Empfängeradresse:';
-$labels['notifybody'] = 'Mitteilungstext:';
-$labels['notifysubject'] = 'Mitteilungsbetreff:';
-$labels['notifyfrom'] = 'Absender:';
+$labels['notifytarget'] = 'Mitteilungsempfänger:';
+$labels['notifymessage'] = 'Mitteilungstext (optional):';
+$labels['notifyoptions'] = 'Mitteilungsoptionen (optional):';
+$labels['notifyfrom'] = 'Absender (optional):';
$labels['notifyimportance'] = 'Wichtigkeit:';
$labels['notifyimportancelow'] = 'tief';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'hoch';
+$labels['notifymethodmailto'] = 'E-Mail';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Filter erstellen';
$labels['usedata'] = 'Die folgenden Daten im Filter benutzen:';
$labels['nextstep'] = 'Nächster Schritt';
@@ -157,6 +160,32 @@ $labels['asciicasemap'] = 'Gross-/Kleinschreibung ignorieren';
$labels['asciinumeric'] = 'numerisch (ascii-numeric)';
$labels['index'] = 'Index:';
$labels['indexlast'] = 'rückwärts';
+$labels['vacation'] = 'Abwesenheit';
+$labels['vacation.reply'] = 'Antworte mit Nachricht';
+$labels['vacation.advanced'] = 'Erweiterte Einstellungen';
+$labels['vacation.subject'] = 'Betreff';
+$labels['vacation.body'] = 'Inhalt';
+$labels['vacation.start'] = 'Beginn der Abwesenheit';
+$labels['vacation.end'] = 'Ende der Abwesenheit';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'Ein';
+$labels['vacation.off'] = 'Aus';
+$labels['vacation.addresses'] = 'Meine weiteren E-Mail-Adressen';
+$labels['vacation.interval'] = 'Antwort-Intervall';
+$labels['vacation.after'] = 'Abwesenheitsregel einfügen nach';
+$labels['vacation.saving'] = 'Speichere Daten...';
+$labels['vacation.action'] = 'Aktion für eingehende Nachrichten';
+$labels['vacation.keep'] = 'Behalten';
+$labels['vacation.discard'] = 'Verwerfen';
+$labels['vacation.redirect'] = 'Weiterleiten an';
+$labels['vacation.copy'] = 'Kopie an';
+$labels['arialabelfiltersetactions'] = 'Filtersatz-Aktionen';
+$labels['arialabelfilteractions'] = 'Filteraktionen';
+$labels['arialabelfilterform'] = 'Filtereigenschaften';
+$labels['ariasummaryfilterslist'] = 'Filterliste';
+$labels['ariasummaryfiltersetslist'] = 'Filtersatzliste';
+$labels['filterstitle'] = 'Eingehende Nachrichtenfilter bearbeiten';
+$labels['vacationtitle'] = 'Abwesenheitsregel bearbeiten';
$messages['filterunknownerror'] = 'Unbekannter Serverfehler';
$messages['filterconnerror'] = 'Kann nicht zum Sieve-Server verbinden';
$messages['filterdeleteerror'] = 'Serverfehler beim Löschen des Filters.';
@@ -189,4 +218,7 @@ $messages['namereserved'] = 'Reservierter Name.';
$messages['setexist'] = 'Filtersatz existiert bereits.';
$messages['nodata'] = 'Mindestens eine Position muss ausgewählt werden!';
$messages['invaliddateformat'] = 'Ungültiges Datumsformat';
+$messages['saveerror'] = 'Fehler beim Speichern (Serverfehler)';
+$messages['vacationsaved'] = 'Abwesenheitsnotiz erfolgreich gespeichert.';
+$messages['emptyvacationbody'] = 'Mitteilungstext ist erforderlich!';
?>
diff --git a/lib/plugins/managesieve/localization/de_DE.inc b/lib/plugins/managesieve/localization/de_DE.inc
index 2eaa215..f57ffa3 100644
--- a/lib/plugins/managesieve/localization/de_DE.inc
+++ b/lib/plugins/managesieve/localization/de_DE.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'Empfänger';
$labels['vacationaddr'] = 'Meine zusätzliche E-Mail-Adresse(n):';
$labels['vacationdays'] = 'Wie oft sollen Nachrichten gesendet werden (in Tagen):';
$labels['vacationinterval'] = 'Wie oft sollen Nachrichten gesendet werden:';
-$labels['days'] = 'Tage';
-$labels['seconds'] = 'Sekunden';
$labels['vacationreason'] = 'Nachrichteninhalt (Abwesenheitsgrund):';
$labels['vacationsubject'] = 'Nachrichtenbetreff';
+$labels['days'] = 'Tage';
+$labels['seconds'] = 'Sekunden';
$labels['rulestop'] = 'Regelauswertung anhalten';
$labels['enable'] = 'Aktivieren/Deaktivieren';
$labels['filterset'] = 'Filtersätze';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'Erster Buchstabe groÃgeschrieben';
$labels['varquotewildcard'] = 'maskiere Sonderzeichen';
$labels['varlength'] = 'Länge';
$labels['notify'] = 'Sende Benachrichtigung';
-$labels['notifyaddress'] = 'An Email Adresse:';
-$labels['notifybody'] = 'Benachrichtigungs-Text:';
-$labels['notifysubject'] = 'Benachrichtigungs-Betreff:';
-$labels['notifyfrom'] = 'Benachrichtigungs-Absender:';
+$labels['notifytarget'] = 'Benachrichtigungs-Empfänger:';
+$labels['notifymessage'] = 'Inhalt der Benachrichtigung (optional):';
+$labels['notifyoptions'] = 'Optionen für die Benachrichtigung (optional)';
+$labels['notifyfrom'] = 'Absender der Benachrichtigung (optional):';
$labels['notifyimportance'] = 'Priorität:';
$labels['notifyimportancelow'] = 'niedrig';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'hoch';
+$labels['notifymethodmailto'] = 'E-Mail';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Filter erstellen';
$labels['usedata'] = 'Die folgenden Daten im Filter benutzen:';
$labels['nextstep'] = 'Nächster Schritt';
@@ -157,6 +160,32 @@ $labels['asciicasemap'] = 'GroÃ-/Kleinschreibung ignorieren';
$labels['asciinumeric'] = 'numerisch (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'rückwärts';
+$labels['vacation'] = 'Urlaub';
+$labels['vacation.reply'] = 'Antwort';
+$labels['vacation.advanced'] = 'Erweiterte Einstellungen';
+$labels['vacation.subject'] = 'Betreff';
+$labels['vacation.body'] = 'Hauptteil';
+$labels['vacation.start'] = 'Beginn des Urlaubs';
+$labels['vacation.end'] = 'Ende des Urlaubs';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'An';
+$labels['vacation.off'] = 'Aus';
+$labels['vacation.addresses'] = 'Meine weiteren Adressen';
+$labels['vacation.interval'] = 'Antwort Intervall';
+$labels['vacation.after'] = 'Setze Urlaubsregel nach';
+$labels['vacation.saving'] = 'Speichere Daten...';
+$labels['vacation.action'] = 'Eingehende Nachrichtaktion';
+$labels['vacation.keep'] = 'Behalten';
+$labels['vacation.discard'] = 'Verwerfen';
+$labels['vacation.redirect'] = 'Weiterleiten an';
+$labels['vacation.copy'] = 'Kopie senden an';
+$labels['arialabelfiltersetactions'] = 'Aktionen für Filtersätze';
+$labels['arialabelfilteractions'] = 'Aktionen für Filter';
+$labels['arialabelfilterform'] = 'Filtereigenschaften';
+$labels['ariasummaryfilterslist'] = 'Liste von Filtern';
+$labels['ariasummaryfiltersetslist'] = 'Liste von Filtersätzen';
+$labels['filterstitle'] = 'Eingehende Mailfilter bearbeiten';
+$labels['vacationtitle'] = 'Abwesendheitsregel bearbeiten';
$messages['filterunknownerror'] = 'Unbekannter Serverfehler';
$messages['filterconnerror'] = 'Kann keine Verbindung mit Managesieve-Server herstellen';
$messages['filterdeleteerror'] = 'Filter kann nicht gelöscht werden. Ein Serverfehler ist aufgetreten.';
@@ -189,4 +218,7 @@ $messages['namereserved'] = 'Reservierter Name.';
$messages['setexist'] = 'Filtersatz existiert bereits.';
$messages['nodata'] = 'Mindestens eine Position muss ausgewählt werden!';
$messages['invaliddateformat'] = 'Ungültiges Datum oder Teil-Format';
+$messages['saveerror'] = 'Ein Serverfehler ist aufgetreten, Speicherung war nicht möglich.';
+$messages['vacationsaved'] = 'Urlaubsdaten erfolgreich gespeichert.';
+$messages['emptyvacationbody'] = 'Inhalt der Abwesenheitsbenachrichtigung wird benötigt!';
?>
diff --git a/lib/plugins/managesieve/localization/el_GR.inc b/lib/plugins/managesieve/localization/el_GR.inc
index 73ec786..d1c7833 100644
--- a/lib/plugins/managesieve/localization/el_GR.inc
+++ b/lib/plugins/managesieve/localization/el_GR.inc
@@ -47,18 +47,20 @@ $labels['messagesendcopy'] = 'ÎÏοÏÏολη ÏÎ·Ï Î±Î½ÏιγÏαÏÎ·Ï Î¼Ï
$labels['messagereply'] = 'ÎÏάνÏηÏη με μήνÏ
μα';
$labels['messagedelete'] = 'ÎιαγÏαÏή μηνÏμαÏοÏ';
$labels['messagediscard'] = 'ÎÏÏÏÏιÏη με μήνÏ
μα';
+$labels['messagekeep'] = 'ÎιαÏήÏηÏη μηνÏμαÏÎ¿Ï ÏÏα ÎιÏεÏÏÏμενα';
$labels['messagesrules'] = 'Îια ειÏεÏÏÏμενα μηνÏμαÏα ÏοÏ
:';
$labels['messagesactions'] = '...εκÏÎλεÏη ÏÏν ÏαÏακάÏÏ ÎµÎ½ÎµÏγειÏν:';
$labels['add'] = 'Î ÏοÏθήκη';
$labels['del'] = 'ÎιαγÏαÏή';
$labels['sender'] = 'ÎÏοÏÏολÎαÏ';
$labels['recipient'] = 'ΠαÏαλήÏÏηÏ';
+$labels['vacationaddr'] = 'Î ÏÏÏθεÏÎµÏ Î´Î¹ÎµÏ
θÏνÏÎµÎ¹Ï email:';
$labels['vacationdays'] = 'ΣÏ
ÏνÏÏηÏα αÏοÏÏÎ¿Î»Î®Ï Î¼Î·Î½Ï
μάÏÏν (Ïε ημÎÏεÏ):';
$labels['vacationinterval'] = 'ΣÏ
ÏνÏÏηÏα αÏοÏÏÎ¿Î»Î®Ï Î¼Î·Î½Ï
μάÏÏν:';
-$labels['days'] = 'ημεÏεÏ';
-$labels['seconds'] = 'δεÏ
ÏεÏÏλεÏÏα';
$labels['vacationreason'] = 'ΣÏμα μηνÏμαÏÎ¿Ï (λÏÎ³Î¿Ï Î±ÏοÏ
ÏίαÏ):';
$labels['vacationsubject'] = 'ÎÎμα μηνÏμαÏοÏ: ';
+$labels['days'] = 'ημεÏεÏ';
+$labels['seconds'] = 'δεÏ
ÏεÏÏλεÏÏα';
$labels['rulestop'] = 'ΠαÏÏη εÏαλήθεÏ
ÏÎ·Ï ÎºÎ±Î½ÏνÏν';
$labels['enable'] = 'ÎνεÏγοÏοιηÏη/ÎÏενεÏγοÏοιηÏη';
$labels['filterset'] = 'ΦίλÏÏα';
@@ -106,14 +108,17 @@ $labels['varupperfirst'] = 'ÏÏÏÏÎ¿Ï ÏαÏακÏήÏÎ±Ï ÎºÎµÏαλαία
$labels['varquotewildcard'] = 'ÏαÏαθÎÏη ειδικÏν ÏαÏακÏήÏÏν';
$labels['varlength'] = 'ÎήκοÏ';
$labels['notify'] = 'ÎÏοÏÏολή ειδοÏοίηÏÎ·Ï ';
-$labels['notifyaddress'] = 'Σε διεÏθÏ
νÏη email:';
-$labels['notifybody'] = 'ÎÏγανιÏμÏÏ ÎµÎ¹Î´Î¿ÏοιηÏηÏ:';
-$labels['notifysubject'] = 'Îεμα ειδοÏοιηÏηÏ:';
-$labels['notifyfrom'] = 'ÎÏοÏÏÎ¿Î»ÎµÎ±Ï ÎµÎ¹Î´Î¿ÏοιηÏηÏ:';
+$labels['notifytarget'] = 'ΠαÏαλήÏÏÎ·Ï ÎµÎ¹Î´Î¿ÏοίηÏηÏ:';
+$labels['notifymessage'] = 'ÎήνÏ
μα ειδοÏοίηÏÎ·Ï (ÏÏοαιÏεÏικά):';
+$labels['notifyoptions'] = 'ÎÏιλογÎÏ ÎµÎ¹Î´Î¿ÏοίηÏÎ·Ï (ÏÏοαιÏεÏικά):';
+$labels['notifyfrom'] = 'ÎÏοÏÏολÎÎ±Ï ÎµÎ¹Î´Î¿ÏοίηÏÎ·Ï (ÏÏοαιÏεÏικά):';
$labels['notifyimportance'] = 'ΣημαÏία: ';
$labels['notifyimportancelow'] = 'Χαμηλή';
$labels['notifyimportancenormal'] = 'Îανονική';
$labels['notifyimportancehigh'] = 'Î¥Ïηλή';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'ΤηλÎÏÏνο';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'ÎημιοÏ
Ïγία ÏίλÏÏοÏ
';
$labels['usedata'] = 'ΧÏηÏιμοÏοιηÏη ακολοÏ
θÏν δεδομενÏν ÏÏο ÏιλÏÏο:';
$labels['nextstep'] = 'ÎÏομενο βημα';
@@ -155,27 +160,65 @@ $labels['asciicasemap'] = 'Ïεζά ή κεÏαλαία (ascii-casemap)';
$labels['asciinumeric'] = 'αÏιθμηÏÎ¹ÎºÏ (ascii-αÏιθμηÏικο)';
$labels['index'] = 'εÏ
ÏεÏήÏιο:';
$labels['indexlast'] = 'ÏÏÎ¿Ï Ïα ÏίÏÏ';
+$labels['vacation'] = 'ÎιακοÏÎÏ';
+$labels['vacation.reply'] = 'ÎήνÏ
μα αÏάνÏηÏηÏ';
+$labels['vacation.advanced'] = 'Î ÏοηγμÎÎ½ÎµÏ ÏÏ
θμίÏειÏ';
+$labels['vacation.subject'] = 'ÎÎμα';
+$labels['vacation.body'] = 'ΣÏμα';
+$labels['vacation.start'] = 'ÎναÏξη διακοÏÏν';
+$labels['vacation.end'] = 'Îήξη διακοÏÏν';
+$labels['vacation.status'] = 'ÎαÏάÏÏαÏη';
+$labels['vacation.on'] = 'ÎνεÏγÏ';
+$labels['vacation.off'] = 'ÎνενεÏγÏ';
+$labels['vacation.addresses'] = 'ÎÏιÏλÎον διεÏ
θÏνÏειÏ';
+$labels['vacation.interval'] = 'ÎιάÏÏημα αÏάνÏηÏηÏ';
+$labels['vacation.after'] = 'ÎιÏαγÏγή κανÏνα διακοÏÏν μεÏά αÏÏ';
+$labels['vacation.saving'] = 'ÎÏοθήκεÏ
Ïη δεδομÎνÏν...';
+$labels['vacation.action'] = 'ÎνÎÏγεια ειÏεÏÏÏμενοÏ
μηνÏμαÏοÏ';
+$labels['vacation.keep'] = 'ÎιαÏήÏηÏη';
+$labels['vacation.discard'] = 'ÎιαγÏαÏή';
+$labels['vacation.redirect'] = 'ÎνακαÏεÏθÏ
νÏη Ïε';
+$labels['vacation.copy'] = 'ÎÏοÏÏολή ανÏιγÏάÏοÏ
Ïε';
+$labels['arialabelfiltersetactions'] = 'ÎνÎÏÎ³ÎµÎ¹ÎµÏ Î¿Î¼Î¬Î´Î±Ï ÏίλÏÏÏν';
+$labels['arialabelfilteractions'] = 'ÎνÎÏÎ³ÎµÎ¹ÎµÏ ÏίλÏÏÏν';
+$labels['arialabelfilterform'] = 'ÎδιÏÏηÏÎµÏ ÏίλÏÏÏν';
+$labels['ariasummaryfilterslist'] = 'ÎίÏÏα ÏίλÏÏÏν';
+$labels['ariasummaryfiltersetslist'] = 'ÎίÏÏα ομάδÏν ÏίλÏÏÏν';
+$labels['filterstitle'] = 'ÎÏεξεÏγαÏία ÏίλÏÏÏν ειÏεÏÏÏÎ¼ÎµÎ½Î·Ï Î±Î»Î»Î·Î»Î¿Î³ÏαÏίαÏ';
+$labels['vacationtitle'] = 'ÎÏεξεÏγαÏία κανÏνα εκÏÏÏ-γÏαÏείοÏ
';
$messages['filterunknownerror'] = 'ÎγνÏÏÏο ÏÏάλμα διακομιÏÏή';
$messages['filterconnerror'] = 'ÎδÏ
ναμία ÏÏνδεÏÎ·Ï ÏÏον διακομιÏÏή managesieve';
+$messages['filterdeleteerror'] = 'ÎδÏ
ναμία διαγÏαÏÎ®Ï ÏίλÏÏοÏ
. Î ÏοÎκÏ
Ïε ÏÏάλμα ÏÏον διακομιÏÏή';
$messages['filterdeleted'] = 'Το ÏίλÏÏο διαγÏάÏηκε εÏιÏÏ
ÏÏÏ';
$messages['filtersaved'] = 'Το ÏίλÏÏο αÏοθηκεÏÏηκε εÏιÏÏ
ÏÏÏ';
+$messages['filtersaveerror'] = 'ÎδÏ
ναμία αÏοθήκεÏ
ÏÎ·Ï ÏίλÏÏοÏ
. Î ÏοÎκÏ
Ïε ÏÏάλμα ÏÏον διακομιÏÏή';
$messages['filterdeleteconfirm'] = 'ÎίÏÏε ÏίγοÏ
Ïοι ÏÏι θÎλεÏε να διαγÏάÏεÏε Ïο εÏιλεγμÎνο ÏίλÏÏο? ';
$messages['ruledeleteconfirm'] = 'ÎÎλεÏε ÏνÏÏÏ Î½Î± διαγÏάÏεÏε Ïον εÏιλεγμÎνο κανÏνα;';
$messages['actiondeleteconfirm'] = 'ÎÎλεÏε ÏνÏÏÏ Î½Î± διαγÏάÏεÏε Ïην εÏιλεγμÎνη ενÎÏγεια;';
$messages['forbiddenchars'] = 'Îη εÏιÏÏεÏÏοί ÏαÏακÏήÏÎµÏ ÏÏο Ïεδίο';
$messages['cannotbeempty'] = 'Το Ïεδίο δεν μÏοÏεί να είναι κενÏ';
$messages['ruleexist'] = 'ΦιλÏÏο με αÏ
Ïο Ïο Ïνομα Ï
ÏάÏÏει ήδη. ';
+$messages['setactivateerror'] = 'ÎδÏ
ναμία ενεÏγοÏοίηÏÎ·Ï ÎµÏιλεγμÎνÏν ομάδÏν ÏίλÏÏÏν. Î ÏοÎκÏ
Ïε ÏÏάλμα ÏÏον διακομιÏÏή.';
+$messages['setdeactivateerror'] = 'ÎδÏ
ναμία αÏενεÏγοÏοίηÏÎ·Ï ÎµÏιλεγμÎνÏν ομάδÏν ÏίλÏÏÏν. Î ÏοÎκÏ
Ïε ÏÏάλμα ÏÏον διακομιÏÏή.';
+$messages['setdeleteerror'] = 'ÎδÏ
ναμία διαγÏαÏÎ®Ï ÏÏν εÏιλεγμÎνÏν ομάδÏν ÏίλÏÏÏν. Î ÏοÎκÏ
Ïε ÏÏάλμα ÏÏον διακομιÏÏή';
$messages['setactivated'] = 'ΦίλÏÏα ενεÏγοÏοιήθηκαν με εÏιÏÏ
Ïία.';
$messages['setdeactivated'] = 'ΦίλÏÏα αÏενεÏγοÏοιήθηκαν με εÏιÏÏ
Ïία.';
$messages['setdeleted'] = 'Τα ÏίλÏÏα διαγÏάÏηκαν εÏιÏÏ
ÏÏÏ.';
$messages['setdeleteconfirm'] = 'ÎÎλεÏε ÏνÏÏÏ Î½Î± διαγÏάÏεÏε Ïα εÏιλεγμÎνα ÏιλÏÏα?';
+$messages['setcreateerror'] = 'ÎδÏ
ναμία δημιοÏ
ÏÎ³Î¯Î±Ï Î¿Î¼Î¬Î´Î±Ï ÏίλÏÏÏν. Î ÏοÎκÏ
Ïε ÏÏάλμα ÏÏον διακομιÏÏή.';
$messages['setcreated'] = 'Τα ÏιλÏÏα δημιοÏ
Ïγηθηκαν εÏιÏÏ
ÏÏÏ.';
+$messages['activateerror'] = 'ÎδÏ
ναμία ενεÏγοÏοίηÏÎ·Ï ÎµÏιλεγμÎνοÏ
ÏίλÏÏοÏ
(Ïν). Î ÏοÎκÏ
Ïε ÏÏάλμα ÏÏον διακομιÏÏή.';
+$messages['deactivateerror'] = 'ÎδÏ
ναμία αÏενεÏγοÏοίηÏÎ·Ï ÎµÏιλεγμÎνοÏ
ÏίλÏÏοÏ
(Ïν). Î ÏοÎκÏ
Ïε ÏÏάλμα ÏÏον διακομιÏÏή.';
$messages['deactivated'] = 'Το ÏιλÏÏο(α) αÏενεÏγοÏοιηθηκαν εÏιÏÏ
ÏÏÏ.';
$messages['activated'] = 'Το ÏίλÏÏο(α) ενεÏγοÏοιηθηκαν εÏιÏÏ
ÏÏÏ.';
$messages['moved'] = 'Το ÏίλÏÏο μεÏακινηθηκε εÏιÏÏ
ÏÏÏ.';
+$messages['moveerror'] = 'ÎδÏ
ναμία μεÏακίνηÏÎ·Ï ÎµÏιλεγμÎνοÏ
ÏίλÏÏοÏ
. Î ÏοÎκÏ
Ïε ÏÏάλμα ÏÏον διακομιÏÏή.';
$messages['nametoolong'] = 'Το Ïνομα είναι ÏÎ¿Î»Ï Î¼ÎµÎ³Î¬Î»Î¿.';
$messages['namereserved'] = 'ÎεÏμεÏ
μÎνο Ïνομα. ';
$messages['setexist'] = 'Set Ï
ÏάÏÏει ήδη. ';
$messages['nodata'] = 'ΤοÏ
λάÏιÏÏον μία θÎÏη ÏÏÎÏει να εÏιλεγεί!';
$messages['invaliddateformat'] = 'Îη ÎγκÏ
Ïη ημεÏομηνία ή η ημεÏομηνία μοÏÏÎ®Ï Ïμήμα';
+$messages['saveerror'] = 'ÎδÏναÏη η αÏοθήκεÏ
Ïη δεδομÎνÏν. Î ÏοÎκÏ
Ïε ÏÏάλμα ÏÏον διακομιÏÏή';
+$messages['vacationsaved'] = 'Τα δεδομÎνα διακοÏÏν αÏοθηκεÏÏηκαν εÏιÏÏ
ÏÏÏ.';
+$messages['emptyvacationbody'] = 'ÎÏαιÏείÏαι ÏÏμα για Ïο μήνÏ
μα διακοÏÏν!';
?>
diff --git a/lib/plugins/managesieve/localization/en_CA.inc b/lib/plugins/managesieve/localization/en_CA.inc
index 311e595..400f835 100644
--- a/lib/plugins/managesieve/localization/en_CA.inc
+++ b/lib/plugins/managesieve/localization/en_CA.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'Recipient';
$labels['vacationaddr'] = 'My additional e-mail address(es):';
$labels['vacationdays'] = 'How often send messages (in days):';
$labels['vacationinterval'] = 'How often send messages:';
-$labels['days'] = 'days';
-$labels['seconds'] = 'seconds';
$labels['vacationreason'] = 'Message body (vacation reason):';
$labels['vacationsubject'] = 'Message subject:';
+$labels['days'] = 'days';
+$labels['seconds'] = 'seconds';
$labels['rulestop'] = 'Stop evaluating rules';
$labels['enable'] = 'Enable/Disable';
$labels['filterset'] = 'Filters set';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'first character upper-case';
$labels['varquotewildcard'] = 'quote special characters';
$labels['varlength'] = 'length';
$labels['notify'] = 'Send notification';
-$labels['notifyaddress'] = 'To e-mail address:';
-$labels['notifybody'] = 'Notification body:';
-$labels['notifysubject'] = 'Notification subject:';
-$labels['notifyfrom'] = 'Notification sender:';
+$labels['notifytarget'] = 'Notification target:';
+$labels['notifymessage'] = 'Notification message (optional):';
+$labels['notifyoptions'] = 'Notification options (optional):';
+$labels['notifyfrom'] = 'Notification sender (optional):';
$labels['notifyimportance'] = 'Importance:';
$labels['notifyimportancelow'] = 'low';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'high';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Phone';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Create filter';
$labels['usedata'] = 'Use following data in the filter:';
$labels['nextstep'] = 'Next Step';
@@ -157,6 +160,18 @@ $labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'backwards';
+$labels['vacation'] = 'Vacation';
+$labels['vacation.reply'] = 'Reply message';
+$labels['vacation.advanced'] = 'Advanced settings';
+$labels['vacation.subject'] = 'Subject';
+$labels['vacation.body'] = 'Body';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'On';
+$labels['vacation.off'] = 'Off';
+$labels['vacation.addresses'] = 'My additional addresses';
+$labels['vacation.interval'] = 'Reply interval';
+$labels['vacation.after'] = 'Put vacation rule after';
+$labels['vacation.saving'] = 'Saving data...';
$messages['filterunknownerror'] = 'Unknown server error.';
$messages['filterconnerror'] = 'Unable to connect to server.';
$messages['filterdeleteerror'] = 'Unable to delete filter. Server error occurred.';
@@ -189,4 +204,6 @@ $messages['namereserved'] = 'Reserved name.';
$messages['setexist'] = 'Set already exists.';
$messages['nodata'] = 'At least one position must be selected!';
$messages['invaliddateformat'] = 'Invalid date or date part format';
+$messages['saveerror'] = 'Unable to save data. Server error occurred.';
+$messages['vacationsaved'] = 'Vacation data saved successfully.';
?>
diff --git a/lib/plugins/managesieve/localization/en_GB.inc b/lib/plugins/managesieve/localization/en_GB.inc
index f899e60..0cc8872 100644
--- a/lib/plugins/managesieve/localization/en_GB.inc
+++ b/lib/plugins/managesieve/localization/en_GB.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'Recipient';
$labels['vacationaddr'] = 'My additional e-mail address(es):';
$labels['vacationdays'] = 'How often send messages (in days):';
$labels['vacationinterval'] = 'How often send messages:';
-$labels['days'] = 'days';
-$labels['seconds'] = 'seconds';
$labels['vacationreason'] = 'Message body (vacation reason):';
$labels['vacationsubject'] = 'Message subject:';
+$labels['days'] = 'days';
+$labels['seconds'] = 'seconds';
$labels['rulestop'] = 'Stop evaluating rules';
$labels['enable'] = 'Enable/Disable';
$labels['filterset'] = 'Filters set';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'first character upper-case';
$labels['varquotewildcard'] = 'quote special characters';
$labels['varlength'] = 'length';
$labels['notify'] = 'Send notification';
-$labels['notifyaddress'] = 'To e-mail address:';
-$labels['notifybody'] = 'Notification body:';
-$labels['notifysubject'] = 'Notification subject:';
-$labels['notifyfrom'] = 'Notification sender:';
+$labels['notifytarget'] = 'Notification target:';
+$labels['notifymessage'] = 'Notification message (optional):';
+$labels['notifyoptions'] = 'Notification options (optional):';
+$labels['notifyfrom'] = 'Notification sender (optional):';
$labels['notifyimportance'] = 'Importance:';
$labels['notifyimportancelow'] = 'low';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'high';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Phone';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Create filter';
$labels['usedata'] = 'Use following data in the filter:';
$labels['nextstep'] = 'Next Step';
@@ -157,6 +160,32 @@ $labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'backwards';
+$labels['vacation'] = 'Vacation';
+$labels['vacation.reply'] = 'Reply message';
+$labels['vacation.advanced'] = 'Advanced settings';
+$labels['vacation.subject'] = 'Subject';
+$labels['vacation.body'] = 'Body';
+$labels['vacation.start'] = 'Vacation start';
+$labels['vacation.end'] = 'Vacation end';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'On';
+$labels['vacation.off'] = 'Off';
+$labels['vacation.addresses'] = 'My additional addresses';
+$labels['vacation.interval'] = 'Reply interval';
+$labels['vacation.after'] = 'Put vacation rule after';
+$labels['vacation.saving'] = 'Saving data...';
+$labels['vacation.action'] = 'Incoming message action';
+$labels['vacation.keep'] = 'Keep';
+$labels['vacation.discard'] = 'Discard';
+$labels['vacation.redirect'] = 'Redirect to';
+$labels['vacation.copy'] = 'Send copy to';
+$labels['arialabelfiltersetactions'] = 'Filter set actions';
+$labels['arialabelfilteractions'] = 'Filter actions';
+$labels['arialabelfilterform'] = 'Filter properties';
+$labels['ariasummaryfilterslist'] = 'List of filters';
+$labels['ariasummaryfiltersetslist'] = 'List of filter sets';
+$labels['filterstitle'] = 'Edit incoming mail filters';
+$labels['vacationtitle'] = 'Edit out-of-office rule';
$messages['filterunknownerror'] = 'Unknown server error';
$messages['filterconnerror'] = 'Unable to connect to managesieve server';
$messages['filterdeleteerror'] = 'Unable to delete filter. Server error occurred.';
@@ -189,4 +218,7 @@ $messages['namereserved'] = 'Reserved name.';
$messages['setexist'] = 'Set already exists.';
$messages['nodata'] = 'At least one position must be selected!';
$messages['invaliddateformat'] = 'Invalid date or date part format';
+$messages['saveerror'] = 'Unable to save data. Server error occurred.';
+$messages['vacationsaved'] = 'Vacation data saved successfully.';
+$messages['emptyvacationbody'] = 'Body of vacation message is required!';
?>
diff --git a/lib/plugins/managesieve/localization/en_US.inc b/lib/plugins/managesieve/localization/en_US.inc
index ac766f9..f455d55 100644
--- a/lib/plugins/managesieve/localization/en_US.inc
+++ b/lib/plugins/managesieve/localization/en_US.inc
@@ -167,9 +167,8 @@ $labels['vacation.reply'] = 'Reply message';
$labels['vacation.advanced'] = 'Advanced settings';
$labels['vacation.subject'] = 'Subject';
$labels['vacation.body'] = 'Body';
-$labels['vacation.dates'] = 'Vacation time';
-$labels['vacation.from'] = 'From:';
-$labels['vacation.to'] = 'To:';
+$labels['vacation.start'] = 'Vacation start';
+$labels['vacation.end'] = 'Vacation end';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'On';
$labels['vacation.off'] = 'Off';
diff --git a/lib/plugins/managesieve/localization/es_419.inc b/lib/plugins/managesieve/localization/es_419.inc
index 45b5dfb..6131895 100644
--- a/lib/plugins/managesieve/localization/es_419.inc
+++ b/lib/plugins/managesieve/localization/es_419.inc
@@ -165,9 +165,8 @@ $labels['vacation.reply'] = 'Responder mensaje';
$labels['vacation.advanced'] = 'Opciones avanzadas';
$labels['vacation.subject'] = 'Asunto';
$labels['vacation.body'] = 'Cuerpo';
-$labels['vacation.dates'] = 'Horario de vacaciones';
-$labels['vacation.from'] = 'De:';
-$labels['vacation.to'] = 'Para:';
+$labels['vacation.start'] = 'Inicio de vacaciones';
+$labels['vacation.end'] = 'Final de vacaciones';
$labels['vacation.status'] = 'Estado';
$labels['vacation.on'] = 'Encendido';
$labels['vacation.off'] = 'Apagado';
diff --git a/lib/plugins/managesieve/localization/es_AR.inc b/lib/plugins/managesieve/localization/es_AR.inc
index 6b3749d..6ac6533 100644
--- a/lib/plugins/managesieve/localization/es_AR.inc
+++ b/lib/plugins/managesieve/localization/es_AR.inc
@@ -165,9 +165,8 @@ $labels['vacation.reply'] = 'Responder mensaje';
$labels['vacation.advanced'] = 'Opciones avanzdas';
$labels['vacation.subject'] = 'Asunto';
$labels['vacation.body'] = 'Cuerpo';
-$labels['vacation.dates'] = 'PerÃodo de vacaciones';
-$labels['vacation.from'] = 'De:';
-$labels['vacation.to'] = 'Para:';
+$labels['vacation.start'] = 'Inicio de vacaciones';
+$labels['vacation.end'] = 'Final de vacaciones';
$labels['vacation.status'] = 'Estado';
$labels['vacation.on'] = 'On';
$labels['vacation.off'] = 'Off';
diff --git a/lib/plugins/managesieve/localization/es_ES.inc b/lib/plugins/managesieve/localization/es_ES.inc
index 91602ee..62f357b 100644
--- a/lib/plugins/managesieve/localization/es_ES.inc
+++ b/lib/plugins/managesieve/localization/es_ES.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'Destinatario';
$labels['vacationaddr'] = 'Mis direcciones adicionales de correo electrónico:';
$labels['vacationdays'] = 'Cada cuánto enviar mensajes (en dÃas):';
$labels['vacationinterval'] = 'Cada cuánto enviar mensajes:';
-$labels['days'] = 'dÃas';
-$labels['seconds'] = 'segundos';
$labels['vacationreason'] = 'Cuerpo del mensaje (razón de vacaciones):';
$labels['vacationsubject'] = 'Asunto del Mensaje:';
+$labels['days'] = 'dÃas';
+$labels['seconds'] = 'segundos';
$labels['rulestop'] = 'Parar de evaluar reglas';
$labels['enable'] = 'Habilitar/Deshabilitar';
$labels['filterset'] = 'Conjunto de filtros';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'inicial en mayúsculas';
$labels['varquotewildcard'] = 'entrecomillar caracteres especiales';
$labels['varlength'] = 'longitud';
$labels['notify'] = 'Enviar notificación';
-$labels['notifyaddress'] = 'A la dirección de correo:';
-$labels['notifybody'] = 'Cuerpo de la notificación:';
-$labels['notifysubject'] = 'Tema de la notificación:';
-$labels['notifyfrom'] = 'Remitente de la notificación:';
+$labels['notifytarget'] = 'Destino de la notificación:';
+$labels['notifymessage'] = 'Mensaje de notificación (opcional):';
+$labels['notifyoptions'] = 'Opciones de notificación (opcional):';
+$labels['notifyfrom'] = 'Remitente de la notificación (opcional):';
$labels['notifyimportance'] = 'Importancia:';
$labels['notifyimportancelow'] = 'baja';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
+$labels['notifymethodmailto'] = 'Correo electrónico';
+$labels['notifymethodtel'] = 'Teléfono';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crear Filtro';
$labels['usedata'] = 'Usar los siguientes datos en el filtro:';
$labels['nextstep'] = 'Siguiente paso';
@@ -157,6 +160,32 @@ $labels['asciicasemap'] = 'no sensible a mayúsculas (ascii-casemap)';
$labels['asciinumeric'] = 'numerico (ascii-numeric)';
$labels['index'] = 'Ãndice:';
$labels['indexlast'] = 'hacia atrás';
+$labels['vacation'] = 'Vacaciones';
+$labels['vacation.reply'] = 'Mensaje de respuesta';
+$labels['vacation.advanced'] = 'Configuración avanzada';
+$labels['vacation.subject'] = 'Asunto';
+$labels['vacation.body'] = 'Cuerpo';
+$labels['vacation.start'] = 'Comienzo de las vacaciones';
+$labels['vacation.end'] = 'Final de las vacaciones';
+$labels['vacation.status'] = 'Estado';
+$labels['vacation.on'] = 'Activado';
+$labels['vacation.off'] = 'Desactivado';
+$labels['vacation.addresses'] = 'Mis direcciones adicionales';
+$labels['vacation.interval'] = 'Intervalo de respuesta';
+$labels['vacation.after'] = 'Poner regla de vacaciones después de';
+$labels['vacation.saving'] = 'Guardando datos...';
+$labels['vacation.action'] = 'Acción de mensaje entrante';
+$labels['vacation.keep'] = 'Mantener';
+$labels['vacation.discard'] = 'Descartar';
+$labels['vacation.redirect'] = 'Redireccionar a';
+$labels['vacation.copy'] = 'Enviar copia a';
+$labels['arialabelfiltersetactions'] = 'Acciones de un paquete de filtros';
+$labels['arialabelfilteractions'] = 'Acciones de filtro';
+$labels['arialabelfilterform'] = 'Propiedades de filtro';
+$labels['ariasummaryfilterslist'] = 'Lista de filtros';
+$labels['ariasummaryfiltersetslist'] = 'Lista de paquetes de filtros';
+$labels['filterstitle'] = 'Editar filtros de mensajes entrantes';
+$labels['vacationtitle'] = 'Editar la regla fuera-de-la-oficina';
$messages['filterunknownerror'] = 'Error desconocido en el servidor.';
$messages['filterconnerror'] = 'No se ha podido conectar con el servidor managesieve.';
$messages['filterdeleteerror'] = 'No se ha podido borrar el filtro. Ha ocurrido un error en el servidor.';
@@ -189,4 +218,7 @@ $messages['namereserved'] = 'Nombre reservado.';
$messages['setexist'] = 'El conjunto ya existe.';
$messages['nodata'] = '¡Al menos una posición debe ser seleccionada!';
$messages['invaliddateformat'] = 'Fecha o formato de parte de la fecha no válido';
+$messages['saveerror'] = 'No fue posible guardar los datos. Ha ocurrido un error en el servidor.';
+$messages['vacationsaved'] = 'Datos de vacaciones guardados correctamente.';
+$messages['emptyvacationbody'] = '¡Hace falta un texto en el mensaje de vacaciones!';
?>
diff --git a/lib/plugins/managesieve/localization/et_EE.inc b/lib/plugins/managesieve/localization/et_EE.inc
index e8a3bd3..3957dcb 100644
--- a/lib/plugins/managesieve/localization/et_EE.inc
+++ b/lib/plugins/managesieve/localization/et_EE.inc
@@ -55,10 +55,10 @@ $labels['sender'] = 'Saatja';
$labels['recipient'] = 'Saaja';
$labels['vacationdays'] = 'Kui tihti kirju saata (päevades):';
$labels['vacationinterval'] = 'Kui tihti kirju saata:';
-$labels['days'] = 'päeva';
-$labels['seconds'] = 'sekundit';
$labels['vacationreason'] = 'Kirja sisu (puhkuse põhjus):';
$labels['vacationsubject'] = 'Kirja teema:';
+$labels['days'] = 'päeva';
+$labels['seconds'] = 'sekundit';
$labels['rulestop'] = 'Peata reeglite otsimine';
$labels['enable'] = 'Luba/keela';
$labels['filterset'] = 'Filtrite kogum';
@@ -106,10 +106,6 @@ $labels['varupperfirst'] = 'esimene märk on suurtäht';
$labels['varquotewildcard'] = 'tsiteeri erimärke';
$labels['varlength'] = 'pikkus';
$labels['notify'] = 'Saada teavitus';
-$labels['notifyaddress'] = 'Saaja e-posti aadress:';
-$labels['notifybody'] = 'Teavituse sisu:';
-$labels['notifysubject'] = 'Teavituse pealkiri:';
-$labels['notifyfrom'] = 'Teavituse saatja:';
$labels['notifyimportance'] = 'Tähtsus:';
$labels['notifyimportancelow'] = 'madal';
$labels['notifyimportancenormal'] = 'tavaline';
diff --git a/lib/plugins/managesieve/localization/eu_ES.inc b/lib/plugins/managesieve/localization/eu_ES.inc
index fe29e58..c9a39dc 100644
--- a/lib/plugins/managesieve/localization/eu_ES.inc
+++ b/lib/plugins/managesieve/localization/eu_ES.inc
@@ -32,10 +32,10 @@ $labels['filteris'] = 'honen berdina da';
$labels['filterisnot'] = 'ez da honen berdina';
$labels['filterexists'] = 'badago';
$labels['filternotexists'] = 'ez dago';
-$labels['filtermatches'] = 'bat datorren espresio';
-$labels['filternotmatches'] = 'bat ez datorren espresio';
-$labels['filterregex'] = 'bat datozen adierazpen erregularrak';
-$labels['filternotregex'] = 'bat ez datorren espresio erregularrak';
+$labels['filtermatches'] = 'bat datorren espresioa';
+$labels['filternotmatches'] = 'bat ez datorren espresioa';
+$labels['filterregex'] = 'bat datozen adierazpen erregularra';
+$labels['filternotregex'] = 'bat ez datorren espresio erregularra';
$labels['filterunder'] = 'azpian';
$labels['filterover'] = 'gainean';
$labels['addrule'] = 'Gehitu araua';
@@ -55,12 +55,12 @@ $labels['del'] = 'Ezabatu';
$labels['sender'] = 'Bidaltzailea';
$labels['recipient'] = 'Hartzailea';
$labels['vacationaddr'] = 'Nire helbide elektroniko osagarria(k):';
-$labels['vacationdays'] = 'Zer maiztasunarekin bidaltzen ditu mezuak (egunak)';
+$labels['vacationdays'] = 'Zenbatero bidali mezuak (egunak)';
$labels['vacationinterval'] = 'Zenbatero bidali mezuak:';
+$labels['vacationreason'] = 'Mezuaren gorputza (oporrak direla medio):';
+$labels['vacationsubject'] = 'Mezuaren gaia:';
$labels['days'] = 'egun';
$labels['seconds'] = 'segundo';
-$labels['vacationreason'] = 'Mezuaren gorputza (oporrak direla medio):';
-$labels['vacationsubject'] = 'Mezuaren izenburua:';
$labels['rulestop'] = 'Gelditu arauak ebaluatzen';
$labels['enable'] = 'Gaitu/Ezgaitu';
$labels['filterset'] = 'Iragazki-paketea';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'lehenengo karakterea maiuskulan';
$labels['varquotewildcard'] = 'aipatu karaktere bereziak';
$labels['varlength'] = 'luzera';
$labels['notify'] = 'Bidali jakinarazpena';
-$labels['notifyaddress'] = 'e-posta helbidera:';
-$labels['notifybody'] = 'Jakinarazpenaren gorputza:';
-$labels['notifysubject'] = 'Jakinarazpenaren subjektua:';
-$labels['notifyfrom'] = 'Jakinarazpenaren bidaltzailea:';
+$labels['notifytarget'] = 'Jakinarazpenaren xedea:';
+$labels['notifymessage'] = 'Jakinarazpenaren mezua (aukerakoa):';
+$labels['notifyoptions'] = 'Jakinarazpenaren aukerak (aukerakoa):';
+$labels['notifyfrom'] = 'Jakinarazpenaren bidaltzailea (aukerakoa):';
$labels['notifyimportance'] = 'Garrantzia:';
$labels['notifyimportancelow'] = 'baxua';
$labels['notifyimportancenormal'] = 'normala';
$labels['notifyimportancehigh'] = 'altua';
+$labels['notifymethodmailto'] = 'Helbide elektronikoa';
+$labels['notifymethodtel'] = 'Telefonoa';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Sortu iragazkia';
$labels['usedata'] = 'Erabili datorren data iragazkian:';
$labels['nextstep'] = 'Hurrengo urratsa';
@@ -157,6 +160,32 @@ $labels['asciicasemap'] = 'minuskulak eta maiuskulak (ascii-casemap)';
$labels['asciinumeric'] = 'numerikoa (ascii-numeric)';
$labels['index'] = 'indexatu:';
$labels['indexlast'] = 'atzeraka';
+$labels['vacation'] = 'Oporraldia';
+$labels['vacation.reply'] = 'Erantzun mezua';
+$labels['vacation.advanced'] = 'Ezarpen aurreratuak';
+$labels['vacation.subject'] = 'Gaia';
+$labels['vacation.body'] = 'Gorputza';
+$labels['vacation.start'] = 'Oporraldiaren hasiera';
+$labels['vacation.end'] = 'Oporraldiaren bukaera';
+$labels['vacation.status'] = 'Egoera';
+$labels['vacation.on'] = 'Piztuta';
+$labels['vacation.off'] = 'Itzalita';
+$labels['vacation.addresses'] = 'Nire helbide osagarriak';
+$labels['vacation.interval'] = 'Erantzun tartea';
+$labels['vacation.after'] = 'Jarri oporren erregela honen ondoren';
+$labels['vacation.saving'] = 'Datuak gordetzen...';
+$labels['vacation.action'] = 'Sarrerako mezuaren ekintza';
+$labels['vacation.keep'] = 'Mantendu';
+$labels['vacation.discard'] = 'Baztertu';
+$labels['vacation.redirect'] = 'Birbideratu hona';
+$labels['vacation.copy'] = 'Bidali kopia hona';
+$labels['arialabelfiltersetactions'] = 'Iragazki-paketearen ekintzak';
+$labels['arialabelfilteractions'] = 'Iragazki-ekintzak';
+$labels['arialabelfilterform'] = 'Iragazkiaren ezaugarriak';
+$labels['ariasummaryfilterslist'] = 'Iragazkien zerrenda';
+$labels['ariasummaryfiltersetslist'] = 'Iragazki-paketeen zerrenda';
+$labels['filterstitle'] = 'Editatu postaren sarrera-iragazkiak';
+$labels['vacationtitle'] = 'Bulegotik-kanpo -erantzun automatiko- araua';
$messages['filterunknownerror'] = 'Zerbitzari ezezaguna errorea';
$messages['filterconnerror'] = 'Ezin da konektatu zerbitzariarekin.';
$messages['filterdeleteerror'] = 'Ezin da ezabatu iragazkia. Errore bat gertatu da zerbitzarian.';
@@ -189,4 +218,7 @@ $messages['namereserved'] = 'Izen erreserbatua.';
$messages['setexist'] = 'Lehendik badago pakete hori.';
$messages['nodata'] = 'Gutxienez posizio bat hautatu behar da!';
$messages['invaliddateformat'] = 'Dataren edo dataren zati baten formatua ez da baliozkoa ';
+$messages['saveerror'] = 'Ezin dira datuak gorde. Errorea gertatu da zerbitzarian.';
+$messages['vacationsaved'] = 'Oporren data ongi gorde da.';
+$messages['emptyvacationbody'] = 'Beharrezkoa da oporraldiko mezua jartzea!';
?>
diff --git a/lib/plugins/managesieve/localization/fa_IR.inc b/lib/plugins/managesieve/localization/fa_IR.inc
index b938c58..65f2d0d 100644
--- a/lib/plugins/managesieve/localization/fa_IR.inc
+++ b/lib/plugins/managesieve/localization/fa_IR.inc
@@ -15,18 +15,18 @@
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/
-$labels['filters'] = 'صاÙÛâÙØ§';
-$labels['managefilters'] = 'Ù
Ø¯ÛØ±Ûت صاÙÛâÙØ§Û ÙØ§Ù
Ù ÙØ±ÙدÛ';
-$labels['filtername'] = 'ÙØ§Ù
صاÙÛ';
-$labels['newfilter'] = 'صاÙÛ Ø¬Ø¯ÛØ¯';
-$labels['filteradd'] = 'Ø§ÙØ²Ùد٠صاÙÛ';
-$labels['filterdel'] = 'ØØ°Ù صاÙÛ';
+$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['filtercontains'] = 'Ø¯Ø±Ø¨Ø±Ú¯ÛØ±ÙدÙ';
$labels['filternotcontains'] = 'بدÙÙ';
$labels['filteris'] = 'برابر است با';
$labels['filterisnot'] = 'برابر ÙÛØ³Øª با';
@@ -54,29 +54,29 @@ $labels['add'] = 'Ø§ÙØ²ÙدÙ';
$labels['del'] = 'ØØ°Ù';
$labels['sender'] = 'ÙØ±Ø³ØªÙدÙ';
$labels['recipient'] = 'Ú¯ÛØ±ÙدÙ';
-$labels['vacationaddr'] = 'آدرس(ÙØ§Û) اÛÙ
Û٠اضاÙÛ Ù
Ù:';
+$labels['vacationaddr'] = 'ÙØ´Ø§ÙÛ(ÙØ§Û) Ø±Ø§ÛØ§ÙاÙ
٠دÛگر Ù
Ù:';
$labels['vacationdays'] = 'Ù¾ÛØºØ§Ù
ÙØ§ در ÚÙ Ù
ÙØ§ÙØ¹Û ÙØ±Ø³ØªØ§Ø¯Ù Ø´Ø¯ÙØ¯ (در Ø±ÙØ²ÙاÛ):';
$labels['vacationinterval'] = 'Ù
ÙØ§ÙØ¹Û Ú©Ù Ù¾ÛØºØ§Ù
âÙØ§ ارسا٠Ù
ÛâØ´ÙÙØ¯:';
-$labels['days'] = 'Ø±ÙØ²Ùا';
-$labels['seconds'] = 'ثاÙÛÙâÙØ§';
$labels['vacationreason'] = 'بدÙÙ Ù¾ÛØºØ§Ù
(Ø¹ÙØª Ù
Ø³Ø§ÙØ±Øª):';
$labels['vacationsubject'] = 'Ù
ÙØ¶Ùع Ù¾ÛØºØ§Ù
:';
+$labels['days'] = 'Ø±ÙØ²Ùا';
+$labels['seconds'] = 'ثاÙÛÙâÙØ§';
$labels['rulestop'] = 'تÙÙÙ ÙÙØ§ÙÛÙ Ø§Ø±Ø²ÛØ§Ø¨Û';
$labels['enable'] = 'ÙØ¹Ø§Ù/ØºÛØ±ÙعاÙâØ³Ø§Ø²Û';
-$labels['filterset'] = 'Ù
جÙ
ÙØ¹Ù صاÙÛâÙØ§';
-$labels['filtersets'] = 'Ù
جÙ
ÙØ¹ÙâÙØ§Û صاÙÛâÙØ§';
-$labels['filtersetadd'] = 'Ø§ÙØ²Ùد٠Ù
جÙ
ÙØ¹Ù صاÙÛâÙØ§';
-$labels['filtersetdel'] = 'ØØ°Ù Ù
جÙ
ÙØ¹Ù صاÙÛâÙØ§Û جارÛ';
-$labels['filtersetact'] = 'ÙØ¹Ø§Ù کرد٠Ù
جÙ
ÙØ¹Ù صاÙÛâÙØ§Û جارÛ';
-$labels['filtersetdeact'] = 'ØºÛØ±Ùعا٠کرد٠Ù
جÙ
ÙØ¹Ù صاÙÛâÙØ§Û جارÛ';
-$labels['filterdef'] = 'تعرÛ٠صاÙÛ';
-$labels['filtersetname'] = 'ÙØ§Ù
Ù
جÙ
ÙØ¹Ù صاÙÛâÙØ§';
-$labels['newfilterset'] = 'Ù
جÙ
ÙØ¹Ù صاÙÛâÙØ§Û Ø¬Ø¯ÛØ¯';
+$labels['filterset'] = 'Ù
جÙ
ÙØ¹Ù Ù¾Ø§ÙØ§ÛÙâÙØ§';
+$labels['filtersets'] = 'Ù
جÙ
ÙØ¹ÙâÙØ§Û Ù¾Ø§ÙØ§ÛÙâÙØ§';
+$labels['filtersetadd'] = 'Ø§ÙØ²Ùد٠Ù
جÙ
ÙØ¹Ù Ù¾Ø§ÙØ§ÛÙâÙØ§';
+$labels['filtersetdel'] = 'ØØ°Ù Ù
جÙ
ÙØ¹Ù Ù¾Ø§ÙØ§ÛÙâÙØ§Û جارÛ';
+$labels['filtersetact'] = 'ÙØ¹Ø§Ù کرد٠Ù
جÙ
ÙØ¹Ù Ù¾Ø§ÙØ§ÛÙâÙØ§Û جارÛ';
+$labels['filtersetdeact'] = 'ØºÛØ±Ùعا٠کرد٠Ù
جÙ
ÙØ¹Ù Ù¾Ø§ÙØ§ÛÙâÙØ§Û جارÛ';
+$labels['filterdef'] = 'تعرÛÙ Ù¾Ø§ÙØ§ÛÙ';
+$labels['filtersetname'] = 'ÙØ§Ù
Ù
جÙ
ÙØ¹Ù Ù¾Ø§ÙØ§ÛÙâÙØ§';
+$labels['newfilterset'] = 'Ù
جÙ
ÙØ¹Ù Ù¾Ø§ÙØ§ÛÙâÙØ§Û Ø¬Ø¯ÛØ¯';
$labels['active'] = 'ÙØ¹Ø§Ù';
$labels['none'] = 'ÙÛÚâکداÙ
';
$labels['fromset'] = 'از Ù
جÙ
ÙØ¹Ù';
$labels['fromfile'] = 'از پرÙÙØ¯Ù';
-$labels['filterdisabled'] = 'صاÙÛ ØºÛØ±Ùعا٠شد';
+$labels['filterdisabled'] = 'Ù¾Ø§ÙØ§ÛÙ ØºÛØ±Ùعا٠شد';
$labels['countisgreaterthan'] = 'تعداد Ø¨ÛØ´ØªØ± است از';
$labels['countisgreaterthanequal'] = 'تعداد Ø¨ÛØ´ØªØ± ÛØ§ Ù
ساÙÛ Ø§Ø³Øª با';
$labels['countislessthan'] = 'تعداد Ú©Ù
تر است از';
@@ -108,16 +108,19 @@ $labels['varupperfirst'] = 'ØØ±Ù اÙ٠بزرگ';
$labels['varquotewildcard'] = 'ÙÙÙ ÙÙÙ Ú©Ø§Ø±Ø§Ú©ØªØ±ÙØ§Û خاص';
$labels['varlength'] = 'Ø·ÙÙ';
$labels['notify'] = 'ارسا٠تذکر';
-$labels['notifyaddress'] = 'ب٠آدرس پست اÙکترÙÙÛÚ©Û:';
-$labels['notifybody'] = 'بدÙ٠تذکر:';
-$labels['notifysubject'] = 'Ù
ÙØ¶Ùع تذکر:';
-$labels['notifyfrom'] = 'ÙØ±Ø³ØªÙد٠تذکر:';
+$labels['notifytarget'] = 'Ù
ÙØµØ¯ آگاÙâØ³Ø§Ø²Û:';
+$labels['notifymessage'] = 'Ù
ت٠آگاÙâØ³Ø§Ø²Û (ØªØ®ØªÛØ§Ø±Û):';
+$labels['notifyoptions'] = 'گزÛÙÙâÙØ§Û آگاÙâØ³Ø§Ø²Û (Ø§Ø®ØªÛØ§Ø±Û):';
+$labels['notifyfrom'] = 'ÙØ±Ø³ØªÙد٠آگاÙâØ³Ø§Ø²Û (Ø§Ø®ØªÛØ§Ø±Û):';
$labels['notifyimportance'] = 'اÙÙ
ÛØª:';
$labels['notifyimportancelow'] = 'Ú©Ù
';
$labels['notifyimportancenormal'] = 'Ù
عÙ
ÙÙÛ';
$labels['notifyimportancehigh'] = 'Ø²ÛØ§Ø¯';
-$labels['filtercreate'] = 'Ø§ÛØ¬Ø§Ø¯ صاÙÛ';
-$labels['usedata'] = 'Ø§Ø³ØªÙØ§Ø¯Ù از داد٠ذÛ٠در صاÙÛ:';
+$labels['notifymethodmailto'] = 'Ø±Ø§ÛØ§ÙاÙ
Ù';
+$labels['notifymethodtel'] = 'تÙÙÙ';
+$labels['notifymethodsms'] = 'Ù¾ÛØ§Ù
Ú©';
+$labels['filtercreate'] = 'Ø§ÛØ¬Ø§Ø¯ Ù¾Ø§ÙØ§ÛÙ';
+$labels['usedata'] = 'Ø§Ø³ØªÙØ§Ø¯Ù از داد٠ذÛ٠در Ù¾Ø§ÙØ§ÛÙ:';
$labels['nextstep'] = 'Ù
رØÙ٠بعدÛ';
$labels['...'] = '...';
$labels['currdate'] = 'ØªØ§Ø±ÛØ® جارÛ';
@@ -157,36 +160,65 @@ $labels['asciicasemap'] = 'ØØ³Ø§Ø³ Ø¨Ù ØØ±ÙÙ Ú©ÙÚÚ© ٠بزرگ (ascii-ca
$labels['asciinumeric'] = 'Ø¹Ø¯Ø¯Û (ascii-numeric)';
$labels['index'] = 'ÙÙØ±Ø³Øª:';
$labels['indexlast'] = 'Ø¨Ù Ø¹ÙØ¨';
+$labels['vacation'] = 'Ù
Ø³Ø§ÙØ±Øª';
+$labels['vacation.reply'] = 'پاسخ Ø¨Ù ÛØºØ§Ù
';
+$labels['vacation.advanced'] = 'ØªÙØ¸ÛÙ
ات Ù¾ÛØ´Ø±ÙتÙ';
+$labels['vacation.subject'] = 'Ù
ÙØ¶Ùع';
+$labels['vacation.body'] = 'بدÙÙ';
+$labels['vacation.start'] = 'Ø´Ø±ÙØ¹ تعطÛÙÛ';
+$labels['vacation.end'] = 'Ù¾Ø§ÛØ§Ù تعطÛÙÛ';
+$labels['vacation.status'] = 'ÙØ¶Ø¹Ûت';
+$labels['vacation.on'] = 'Ø±ÙØ´Ù';
+$labels['vacation.off'] = 'خاÙ
ÙØ´';
+$labels['vacation.addresses'] = 'ÙØ´Ø§ÙÛâÙØ§Û دÛگر Ù
Ù';
+$labels['vacation.interval'] = 'ÙØ§ØµÙ٠پاسخ';
+$labels['vacation.after'] = 'ÙØ±Ø§Ø± Ø¯Ø§Ø¯Ù ÙØ§ÙÙÙ Ù
Ø³Ø§ÙØ±Øª بعد از';
+$labels['vacation.saving'] = 'Ø°Ø®ÛØ±Ù دادÙâÙØ§...';
+$labels['vacation.action'] = 'Ú©ÙØ´ عÙ
Ùکرد ÙØ±ÙدÛ';
+$labels['vacation.keep'] = 'Ùگ٠داشتÙ';
+$labels['vacation.discard'] = 'Ø¯ÙØ± Ø§ÙØ¯Ø§Ø®ØªÙ';
+$labels['vacation.redirect'] = 'بازگرداÙÛ Ø¨Ù';
+$labels['vacation.copy'] = 'ارسا٠رÙÙÙØ´Øª بÙ';
+$labels['arialabelfiltersetactions'] = 'Ú©ÙØ´âÙØ§Û Ù
جÙ
ÙØ¹Ù Ù¾Ø§ÙØ§ÛÙ';
+$labels['arialabelfilteractions'] = 'Ú©ÙØ´âÙØ§Û Ù¾Ø§ÙØ§ÛÙ';
+$labels['arialabelfilterform'] = 'Ø®ØµÙØµÛات Ù¾Ø§ÙØ§ÛÙ';
+$labels['ariasummaryfilterslist'] = 'ÙÙØ±Ø³Øª Ù¾Ø§ÙØ§ÛÙâÙØ§';
+$labels['ariasummaryfiltersetslist'] = 'ÙÙØ±Ø³Øª Ù
جÙ
ÙØ¹Ù Ù¾Ø§ÙØ§ÛÙâÙØ§';
+$labels['filterstitle'] = 'ÙÛØ±Ø§ÛØ´ Ù¾Ø§ÙØ§ÛÙâÙØ§Û پست ÙØ±ÙدÛ';
+$labels['vacationtitle'] = 'ÙÛØ±Ø§ÛØ´ ÙÙØ´ Ø¨ÛØ±Ù٠از Ø¯ÙØªØ±';
$messages['filterunknownerror'] = 'Ø®Ø·Ø§Û Ø³Ø±ÙØ± ÙØ§Ù
عÙÙÙ
.';
$messages['filterconnerror'] = 'ÙØ§ØªÙاÙÛ Ø¯Ø± Ø§ØªØµØ§Ù Ø¨Ù Ø³Ø±ÙØ±.';
-$messages['filterdeleteerror'] = 'ÙØ§ØªÙاÙÛ Ø¯Ø± ØØ°Ù صاÙÛ. Ø®Ø·Ø§Û Ø³Ø±ÙØ± رخ داد.';
-$messages['filterdeleted'] = 'صاÙÛ Ø¨Ø§ Ù
ÙÙÙÛØª ØØ°Ù شد.';
-$messages['filtersaved'] = 'صاÙÛ Ø¨Ø§ Ù
ÙÙÙÛØª Ø°Ø®ÛØ±Ù شد.';
+$messages['filterdeleteerror'] = 'ÙØ§ØªÙاÙÛ Ø¯Ø± ØØ°Ù Ù¾Ø§ÙØ§ÛÙ. Ø®Ø·Ø§Û Ø³Ø±ÙØ± رخ داد.';
+$messages['filterdeleted'] = 'Ù¾Ø§ÙØ§Û٠با کاÙ
âÛØ§Ø¨Û ØØ°Ù شد.';
+$messages['filtersaved'] = 'Ù¾Ø§ÙØ§Û٠با کاÙ
âÛØ§Ø¨Û Ø°Ø®ÛØ±Ù شد.';
$messages['filtersaveerror'] = 'ÙØ§ØªÙاÙÛ Ø¯Ø± Ø°Ø®ÛØ±Ù ÙÛÙØªØ±. Ø®Ø·Ø§Û Ø³Ø±ÙØ± رخ داد.';
-$messages['filterdeleteconfirm'] = 'Ø¢ÛØ§ Ù
Ø·Ù
Ø¦Ù Ø¨Ù ØØ°Ù صاÙÛ Ø§ÙØªØ®Ø§Ø¨ Ø´Ø¯Ù ÙØ³ØªÛدØ';
+$messages['filterdeleteconfirm'] = 'Ø¢ÛØ§ Ù
Ø·Ù
Ø¦Ù Ø¨Ù ØØ°Ù Ù¾Ø§ÙØ§ÛÙ Ø§ÙØªØ®Ø§Ø¨ Ø´Ø¯Ù ÙØ³ØªÛدØ';
$messages['ruledeleteconfirm'] = 'Ø¢ÛØ§ Ù
Ø·Ù
Ø¦Ù ÙØ³ØªÛد Ú©Ù Ù
Û Ø®ÙØ§ÙÛØ¯ ÙØ§ÙÙÙ Ø§ÙØªØ®Ø§Ø¨ شد٠را ØØ°Ù Ú©ÙÛØ¯Ø';
$messages['actiondeleteconfirm'] = 'Ø¢ÛØ§ Ù
Ø·Ù
Ø¦Ù ÙØ³ØªÛد Ú©Ù Ù
Û Ø®ÙØ§ÙÛØ¯ عÙ
Ù Ø§ÙØªØ®Ø§Ø¨ شد٠را ØØ°Ù Ú©ÙÛØ¯.';
$messages['forbiddenchars'] = 'ØØ±ÙÙ Ù
Ù
ÙÙØ¹Ù در ÙÛÙØ¯.';
$messages['cannotbeempty'] = 'ÙÛÙØ¯ ÙÙ
Û ØªÙØ§Ùد خاÙÛ Ø¨Ø§Ø´Ø¯.';
-$messages['ruleexist'] = 'صاÙÛ Ø¨Ø§ اÛÙ ÙØ§Ù
Ù
شخص ÙØ¬Ùد دارد.';
-$messages['setactivateerror'] = 'ÙØ§ØªÙا٠در ÙØ¹Ø§Ù کرد٠Ù
جÙ
ÙØ¹Ù صاÙÛâÙØ§ Ø§ÙØªØ®Ø§Ø¨ شدÙ. Ø®Ø·Ø§Û Ø³Ø±ÙØ± رخ داد.';
-$messages['setdeactivateerror'] = 'ÙØ§ØªÙا٠در ØºÛØ±Ùعا٠کرد٠Ù
جÙ
ÙØ¹Ù صاÙÛâÙØ§ Ø§ÙØªØ®Ø§Ø¨ شدÙ. Ø®Ø·Ø§Û Ø³Ø±ÙØ± رخ داد.';
-$messages['setdeleteerror'] = 'ÙØ§ØªÙا٠در ØØ°Ù Ù
جÙ
ÙØ¹Ù صاÙÛâÙØ§ Ø§ÙØªØ®Ø§Ø¨ شدÙ. Ø®Ø·Ø§Û Ø³Ø±ÙØ± رخ داد.';
-$messages['setactivated'] = 'Ù
جÙ
ÙØ¹Ù صاÙÛâÙØ§ با Ù
ÙÙÙÛØª ÙØ¹Ø§Ù شد.';
-$messages['setdeactivated'] = 'Ù
جÙ
ÙØ¹Ù صاÙÛâÙØ§ با Ù
ÙÙÙÛØª ØºÛØ±Ùعا٠شد.';
-$messages['setdeleted'] = 'Ù
جÙ
ÙØ¹Ù صاÙÛâÙØ§ با Ù
ÙÙÙÛØª ØØ°Ù شد.';
-$messages['setdeleteconfirm'] = 'Ø¢ÛØ§ Ù
Ø·Ù
Ø¦Ù ÙØ³ØªÛد Ú©Ù Ù
ÛâØ®ÙØ§ÙÛØ¯ Ù
جÙ
ÙØ¹Ù صاÙÛâÙØ§ Ø§ÙØªØ®Ø§Ø¨ شد٠را ØØ°Ù Ú©ÙÛØ¯Ø';
-$messages['setcreateerror'] = 'ÙØ§ØªÙاÙÛ Ø¯Ø± Ø§ÛØ¬Ø§Ø¯ Ù
جÙ
ÙØ¹Ù صاÙÛâÙØ§. Ø®Ø·Ø§Û Ø³Ø±ÙØ± رخ داد.';
-$messages['setcreated'] = 'Ù
جÙ
ÙØ¹Ù صاÙÛâÙØ§ با Ù
ÙÙÙÛØª Ø§ÛØ¬Ø§Ø¯ شد.';
-$messages['activateerror'] = 'ÙØ§ØªÙاÙÛ Ø¯Ø± ÙØ¹Ø§Ù کرد٠صاÙÛ(ÙØ§Û) Ø§ÙØªØ®Ø§Ø¨ شدÙ. Ø®Ø·Ø§Û Ø³Ø±ÙØ± رخ داد.';
-$messages['deactivateerror'] = 'ÙØ§ØªÙاÙÛ Ø¯Ø± ØºÛØ±Ùعا٠کرد٠صاÙÛ(ÙØ§Û) Ø§ÙØªØ®Ø§Ø¨ شدÙ. Ø®Ø·Ø§Û Ø³Ø±ÙØ± رخ داد.';
-$messages['deactivated'] = 'صاÙÛ(ÙØ§) با Ù
ÙÙÙÛØª ÙØ¹Ø§Ù Ø´Ø¯ÙØ¯.';
-$messages['activated'] = 'صاÙÛ(ÙØ§) با Ù
ÙÙÙÛØª ØºÛØ±ÙØ¹Ø§Ù Ø´Ø¯ÙØ¯.';
-$messages['moved'] = 'صاÙÛ Ø¨Ø§ Ù
ÙÙÙÛØª Ù
ÙØªÙ٠شد.';
-$messages['moveerror'] = 'ÙØ§ØªÙاÙÛ Ø¯Ø± Ø§ÙØªÙا٠صاÙÛ Ø§ÙØªØ®Ø§Ø¨ شدÙ. Ø®Ø·Ø§Û Ø³Ø±ÙØ± رخ داد.';
+$messages['ruleexist'] = 'Ù¾Ø§ÙØ§Û٠با اÛÙ ÙØ§Ù
Ù
شخص ÙØ¬Ùد دارد.';
+$messages['setactivateerror'] = 'ÙØ§ØªÙا٠در ÙØ¹Ø§Ù کرد٠Ù
جÙ
ÙØ¹Ù Ù¾Ø§ÙØ§ÛÙâÙØ§ Ø§ÙØªØ®Ø§Ø¨ شدÙ. Ø®Ø·Ø§Û Ø³Ø±ÙØ± رخ داد.';
+$messages['setdeactivateerror'] = 'ÙØ§ØªÙا٠در ØºÛØ±Ùعا٠کرد٠Ù
جÙ
ÙØ¹Ù Ù¾Ø§ÙØ§ÛÙâÙØ§ Ø§ÙØªØ®Ø§Ø¨ شدÙ. Ø®Ø·Ø§Û Ø³Ø±ÙØ± رخ داد.';
+$messages['setdeleteerror'] = 'ÙØ§ØªÙا٠در ØØ°Ù Ù
جÙ
ÙØ¹Ù Ù¾Ø§ÙØ§ÛÙâÙØ§ Ø§ÙØªØ®Ø§Ø¨ شدÙ. Ø®Ø·Ø§Û Ø³Ø±ÙØ± رخ داد.';
+$messages['setactivated'] = 'Ù
جÙ
ÙØ¹Ù Ù¾Ø§ÙØ§ÛÙâÙØ§ با کاÙ
âÛØ§Ø¨Û ÙØ¹Ø§Ù شد.';
+$messages['setdeactivated'] = 'Ù
جÙ
ÙØ¹Ù Ù¾Ø§ÙØ§ÛÙâÙØ§ با کاÙ
âÛØ§Ø¨Û ØºÛØ±Ùعا٠شد.';
+$messages['setdeleted'] = 'Ù
جÙ
ÙØ¹Ù Ù¾Ø§ÙØ§ÛÙâÙØ§ با کاÙ
âÛØ§Ø¨Û ØØ°Ù شد.';
+$messages['setdeleteconfirm'] = 'Ø¢ÛØ§ Ù
Ø·Ù
Ø¦Ù ÙØ³ØªÛد Ú©Ù Ù
ÛâØ®ÙØ§ÙÛØ¯ Ù
جÙ
ÙØ¹Ù Ù¾Ø§ÙØ§ÛÙâÙØ§ Ø§ÙØªØ®Ø§Ø¨ شد٠را ØØ°Ù Ú©ÙÛØ¯Ø';
+$messages['setcreateerror'] = 'ÙØ§ØªÙاÙÛ Ø¯Ø± Ø§ÛØ¬Ø§Ø¯ Ù
جÙ
ÙØ¹Ù Ù¾Ø§ÙØ§ÛÙâÙØ§. Ø®Ø·Ø§Û Ø³Ø±ÙØ± رخ داد.';
+$messages['setcreated'] = 'Ù
جÙ
ÙØ¹Ù Ù¾Ø§ÙØ§ÛÙâÙØ§ با کاÙ
âÛØ§Ø¨Û Ø§ÛØ¬Ø§Ø¯ شد.';
+$messages['activateerror'] = 'ÙØ§ØªÙاÙÛ Ø¯Ø± ÙØ¹Ø§Ù Ú©Ø±Ø¯Ù Ù¾Ø§ÙØ§ÛÙ(ÙØ§Û) Ø§ÙØªØ®Ø§Ø¨ شدÙ. Ø®Ø·Ø§Û Ø³Ø±ÙØ± رخ داد.';
+$messages['deactivateerror'] = 'ÙØ§ØªÙاÙÛ Ø¯Ø± ØºÛØ±ÙØ¹Ø§Ù Ú©Ø±Ø¯Ù Ù¾Ø§ÙØ§ÛÙ(ÙØ§Û) Ø§ÙØªØ®Ø§Ø¨ شدÙ. Ø®Ø·Ø§Û Ø³Ø±ÙØ± رخ داد.';
+$messages['deactivated'] = 'Ù¾Ø§ÙØ§ÛÙ(ÙØ§) با کاÙ
âÛØ§Ø¨Û ÙØ¹Ø§Ù Ø´Ø¯ÙØ¯.';
+$messages['activated'] = 'Ù¾Ø§ÙØ§ÛÙ(ÙØ§) با کاÙ
âÛØ§Ø¨Û ØºÛØ±ÙØ¹Ø§Ù Ø´Ø¯ÙØ¯.';
+$messages['moved'] = 'Ù¾Ø§ÙØ§Û٠با کاÙ
âÛØ§Ø¨Û Ù
ÙØªÙ٠شد.';
+$messages['moveerror'] = 'ÙØ§ØªÙاÙÛ Ø¯Ø± Ø§ÙØªÙØ§Ù Ù¾Ø§ÙØ§ÛÙ Ø§ÙØªØ®Ø§Ø¨ شدÙ. Ø®Ø·Ø§Û Ø³Ø±ÙØ± رخ داد.';
$messages['nametoolong'] = 'ÙØ§Ù
Ø®ÛÙÛ Ø¨ÙÙØ¯.';
$messages['namereserved'] = 'ÙØ§Ù
رزر٠شدÙ.';
$messages['setexist'] = 'Ù
جÙ
ÙØ¹Ù در ØØ§Ù ØØ§Ø¶Ø± Ù
ÙØ¬Ùد است.';
$messages['nodata'] = 'ØØ¯Ø§ÙÙ Ø¨Ø§ÛØ¯ ÛÚ© Ù
ÙÙØ¹Ûت Ø¨Ø§ÛØ¯ Ø§ÙØªØ®Ø§Ø¨ Ø´ÙØ¯.';
$messages['invaliddateformat'] = 'ÙØ§Ùب ØªØ§Ø±ÛØ® اشتباÙ';
+$messages['saveerror'] = 'ÙØ§ØªÙاÙÛ Ø¯Ø± Ø°Ø®ÛØ±Ù Ø§Ø·ÙØ§Ø¹Ø§Øª. Ø®Ø·Ø§Û Ø³Ø±ÙØ± رخ داد.';
+$messages['vacationsaved'] = 'Ø§Ø·ÙØ§Ø¹Ø§Øª Ù
Ø³Ø§ÙØ±Øª با کاÙ
âÛØ§Ø¨Û Ø°Ø®ÛØ±Ù شد.';
+$messages['emptyvacationbody'] = 'Ù
ØªÙ Ù¾ÛØºØ§Ù
تعطÛÙÛ ÙØ§Ø²Ù
است!';
?>
diff --git a/lib/plugins/managesieve/localization/fi_FI.inc b/lib/plugins/managesieve/localization/fi_FI.inc
index 1bec7a3..ba10b1f 100644
--- a/lib/plugins/managesieve/localization/fi_FI.inc
+++ b/lib/plugins/managesieve/localization/fi_FI.inc
@@ -48,17 +48,48 @@ $labels['messagereply'] = 'Vastaa viestillä';
$labels['messagedelete'] = 'Poista viesti';
$labels['messagediscard'] = 'Hylkää viestillä';
$labels['messagekeep'] = 'Säilytä viesti saapuneissa';
+$labels['messagesrules'] = 'Saapuville viesteille:';
$labels['messagesactions'] = '...suorita seuraavat toiminnot:';
$labels['add'] = 'Lisää';
$labels['del'] = 'Poista';
$labels['sender'] = 'Lähettäjä';
$labels['recipient'] = 'Vastaanottaja';
+$labels['vacationaddr'] = 'Muut sähköpostiosoitteeni:';
+$labels['vacationreason'] = 'Viestin runko (loman syy):';
$labels['vacationsubject'] = 'Viestin aihe:';
$labels['days'] = 'päivää';
$labels['seconds'] = 'sekuntia';
+$labels['rulestop'] = 'Lopeta sääntöjen arviointi';
+$labels['enable'] = 'Ota käyttöön/poista käytöstä';
+$labels['filterset'] = 'Suodattimien asetus';
+$labels['filtersets'] = 'Suodattimen asetus';
+$labels['filtersetadd'] = 'Lisää suodatinasetus';
+$labels['filtersetdel'] = 'Poista nykyiset suodatinasetukset';
+$labels['filtersetact'] = 'Aktivoi nykyinen suodattimien asetus';
+$labels['filtersetdeact'] = 'Poista käytöstä nykyinen suodattimien asetus';
+$labels['filterdef'] = 'Suodattimen määrittely';
+$labels['filtersetname'] = 'Suodattimien asetuksen nimi';
+$labels['active'] = 'aktiivinen';
+$labels['none'] = 'Ei mikään';
+$labels['fromset'] = 'sarjasta';
+$labels['fromfile'] = 'tiedostosta';
+$labels['filterdisabled'] = 'Suodatin poistettu käytöstä';
+$labels['countisgreaterthan'] = 'määrä on suurempi kuin';
+$labels['countisgreaterthanequal'] = 'määrä on suurempi tai yhtä suuri kuin';
+$labels['countislessthan'] = 'määrä on vähemmän kuin';
+$labels['countislessthanequal'] = 'määrä on vähemmän tai yhtä suuri kuin';
+$labels['countequals'] = 'määrä on yhtä suuri kuin';
+$labels['countnotequals'] = 'määrä ei ole yhtä suuri kuin';
+$labels['valueisgreaterthan'] = 'arvo on suurempi kuin';
+$labels['valueisgreaterthanequal'] = 'arvo on suurempi kuin tai yhtä suuri kuin';
+$labels['valueislessthan'] = 'arvo on vähemmän kuin';
+$labels['valueislessthanequal'] = 'määrä on vähemmän tai yhtä suuri kuin';
+$labels['valueequals'] = 'arvo on yhtä suuri kuin';
+$labels['valuenotequals'] = 'arvo ei ole yhtä suuri kuin';
$labels['setflags'] = 'Aseta liput viestiin';
$labels['addflags'] = 'Lisää liput viestiin';
$labels['removeflags'] = 'Poista liput viestistä';
+$labels['flagread'] = 'Lue';
$labels['flagdeleted'] = 'Poistettu';
$labels['flaganswered'] = 'Vastattu';
$labels['flagflagged'] = 'Liputettu';
@@ -66,42 +97,84 @@ $labels['flagdraft'] = 'Luonnos';
$labels['setvariable'] = 'Aseta muuttuja';
$labels['setvarname'] = 'Muuttujan nimi:';
$labels['setvarvalue'] = 'Muuttujan arvo:';
+$labels['setvarmodifiers'] = 'Muuntimet:';
+$labels['varlower'] = 'pienellä kirjoitettu';
+$labels['varupper'] = 'isolla kirjoitettu';
+$labels['varlowerfirst'] = 'ensimmäinen merkki pienellä kirjoitettuna';
+$labels['varupperfirst'] = 'ensimmäinen merkki isolla kirjoitettuna';
+$labels['varquotewildcard'] = 'lainaa erikoismerkit';
+$labels['varlength'] = 'pituus';
+$labels['notify'] = 'Lähetä ilmoitus';
+$labels['notifytarget'] = 'Ilmoituksen kohde:';
+$labels['notifymessage'] = 'Ilmoituksen viesti (valinnainen):';
+$labels['notifyoptions'] = 'Ilmoituksen valinnat (valinnainen)';
+$labels['notifyfrom'] = 'Ilmoituksen lähettäjä (valinnainen):';
$labels['notifyimportance'] = 'Tärkeysaste:';
+$labels['notifyimportancelow'] = 'matala';
+$labels['notifyimportancenormal'] = 'normaali';
+$labels['notifyimportancehigh'] = 'korkea';
$labels['notifymethodmailto'] = 'Sähköposti';
$labels['notifymethodtel'] = 'Puhelin';
$labels['notifymethodsms'] = 'Tekstiviesti';
$labels['filtercreate'] = 'Luo suodatin';
+$labels['usedata'] = 'Käytä seuraavaa dataa suodattimessa:';
+$labels['nextstep'] = 'Seuraava vaihe';
$labels['...'] = '...';
+$labels['currdate'] = 'Nykyinen päivämäärä';
+$labels['datetest'] = 'Päivämäärä';
+$labels['dateheader'] = 'otsikko:';
$labels['year'] = 'vuosi';
$labels['month'] = 'kuukausi';
$labels['day'] = 'päivä';
+$labels['date'] = 'päivämäärä (vvvv-kk-pp)';
+$labels['julian'] = 'päivämäärä (juliaaninen)';
$labels['hour'] = 'tunti';
$labels['minute'] = 'minuutti';
$labels['second'] = 'sekunti';
$labels['time'] = 'aika (hh:mm:ss)';
+$labels['iso8601'] = 'päivämäärä (ISO8601)';
+$labels['std11'] = 'päivämäärä (RFC2882)';
$labels['zone'] = 'aikavyöhyke';
+$labels['weekday'] = 'viikonpäivä (0-6)';
$labels['advancedopts'] = 'Lisävalinnat';
+$labels['body'] = 'Runko';
$labels['address'] = 'osoite';
+$labels['envelope'] = 'kirjekuori';
+$labels['modifier'] = 'muuntaja:';
+$labels['text'] = 'teksti';
+$labels['undecoded'] = 'dekoodaamaton (raaka)';
+$labels['contenttype'] = 'sisällön tyyppi';
+$labels['modtype'] = 'tyyppi:';
$labels['allparts'] = 'kaikki';
+$labels['domain'] = 'domain';
+$labels['localpart'] = 'paikallinen osa';
$labels['user'] = 'käyttäjä';
+$labels['detail'] = 'yksityiskohta';
+$labels['comparator'] = 'vertailija:';
$labels['default'] = 'oletus';
$labels['vacation'] = 'Loma';
$labels['vacation.reply'] = 'Vastausviesti';
$labels['vacation.advanced'] = 'Lisäasetukset';
$labels['vacation.subject'] = 'Aihe';
$labels['vacation.body'] = 'Sisältö';
-$labels['vacation.dates'] = 'Loma-aika';
-$labels['vacation.from'] = 'Lähettäjä:';
-$labels['vacation.to'] = 'Vastaanottaja:';
$labels['vacation.status'] = 'Tila';
$labels['vacation.on'] = 'Päällä';
$labels['vacation.off'] = 'Pois';
$labels['vacation.saving'] = 'Tallennetaan tietoja...';
+$labels['vacation.action'] = 'Toiminto saapuvalle viestille';
+$labels['vacation.keep'] = 'Säilytä';
+$labels['vacation.discard'] = 'Hylkää';
+$labels['vacation.redirect'] = 'Ohjaa uudelleen osoitteeseen';
+$labels['vacation.copy'] = 'Lähetä kopio osoitteeseen';
$messages['filterunknownerror'] = 'Tuntematon palvelinvirhe.';
$messages['filterconnerror'] = 'Yhteys palvelimeen epäonnistui.';
$messages['filterdeleted'] = 'Suodatin poistettu onnistuneesti.';
+$messages['filtersaved'] = 'Suodatin tallennettu onnistuneesti.';
+$messages['filtersaveerror'] = 'Suodattimen tallennus epäonnistui palvelinvirheen vuoksi.';
$messages['filterdeleteconfirm'] = 'Haluatko varmasti poistaa valitun suodattimen?';
+$messages['forbiddenchars'] = 'Virheellisiä merkkejä kentässä.';
$messages['cannotbeempty'] = 'Kenttä ei voi olla tyhjä.';
+$messages['ruleexist'] = 'Suodatin samalla nimellä on jo olemassa.';
$messages['moved'] = 'Suodatin siirretty onnistuneesti.';
$messages['nametoolong'] = 'Nimi on liian pitkä.';
$messages['saveerror'] = 'Tietojen tallennus epäonnistui palvelinvirheen vuoksi.';
diff --git a/lib/plugins/managesieve/localization/fr_FR.inc b/lib/plugins/managesieve/localization/fr_FR.inc
index 67a73a9..6377d12 100644
--- a/lib/plugins/managesieve/localization/fr_FR.inc
+++ b/lib/plugins/managesieve/localization/fr_FR.inc
@@ -16,14 +16,14 @@
For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-managesieve/
*/
$labels['filters'] = 'Filtres';
-$labels['managefilters'] = 'Gérer les filtres sur les courriels entrants';
+$labels['managefilters'] = 'Gérer les filtres de courriels entrants';
$labels['filtername'] = 'Nom du filtre';
$labels['newfilter'] = 'Nouveau filtre';
$labels['filteradd'] = 'Ajouter un filtre';
$labels['filterdel'] = 'Supprimer le filtre';
$labels['moveup'] = 'Monter';
$labels['movedown'] = 'Descendre';
-$labels['filterallof'] = 'valident toutes les conditions suivantes';
+$labels['filterallof'] = 'correspondant à toutes les règles suivantes';
$labels['filteranyof'] = 'valident au moins une des conditions suivantes';
$labels['filterany'] = 'tous les messages';
$labels['filtercontains'] = 'contient';
@@ -32,16 +32,16 @@ $labels['filteris'] = 'est égal à ';
$labels['filterisnot'] = 'est différent de';
$labels['filterexists'] = 'existe';
$labels['filternotexists'] = 'n\'existe pas';
-$labels['filtermatches'] = 'concorde avec l\'expression';
-$labels['filternotmatches'] = 'ne concorde pas avec l\'expression';
-$labels['filterregex'] = 'concorde avec l\'expression régulière';
-$labels['filternotregex'] = 'ne concorde pas avec l\'expression régulière';
-$labels['filterunder'] = 'est plus petit que';
-$labels['filterover'] = 'est plus grand que';
+$labels['filtermatches'] = 'correspond à l\'expression';
+$labels['filternotmatches'] = 'ne correspond pas à l\'expression';
+$labels['filterregex'] = 'correspond à l\'expression rationnelle';
+$labels['filternotregex'] = 'ne correspond pas à l\'expression rationnelle';
+$labels['filterunder'] = 'plus petit que';
+$labels['filterover'] = '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['messageredirect'] = 'Rediriger le message à ';
$labels['messagecopyto'] = 'Copier le message vers';
$labels['messagesendcopy'] = 'Envoyer une copie du message à ';
$labels['messagereply'] = 'Répondre avec le message';
@@ -49,84 +49,87 @@ $labels['messagedelete'] = 'Supprimer le message';
$labels['messagediscard'] = 'Rejeter avec le message';
$labels['messagekeep'] = 'Conserver le message dans la boîte de réception';
$labels['messagesrules'] = 'Pour les courriels entrants :';
-$labels['messagesactions'] = '...exécuter les actions suivantes:';
+$labels['messagesactions'] = '...exécuter les actions suivantes :';
$labels['add'] = 'Ajouter';
$labels['del'] = 'Supprimer';
$labels['sender'] = 'Expéditeur';
$labels['recipient'] = 'Destinataire';
-$labels['vacationaddr'] = 'Adresse(s) e-mail additionnelle(s):';
-$labels['vacationdays'] = 'Ne pas renvoyer un message avant (jours) :';
-$labels['vacationinterval'] = 'Comment envoyer les messages :';
+$labels['vacationaddr'] = 'Mes adresses courriel additionnelles :';
+$labels['vacationdays'] = 'Fréquence d\'envoi des messages (en jours) :';
+$labels['vacationinterval'] = 'Fréquence d\'envoi des messages :';
+$labels['vacationreason'] = 'Corps du message (raison de l\'absence) :';
+$labels['vacationsubject'] = 'Objet du message :';
$labels['days'] = 'jours';
$labels['seconds'] = 'secondes';
-$labels['vacationreason'] = 'Corps du message (raison de l\'absence) :';
-$labels['vacationsubject'] = 'Sujet du message:';
-$labels['rulestop'] = 'Arrêter d\'évaluer les prochaines règles';
-$labels['enable'] = 'Activer/Désactiver';
-$labels['filterset'] = 'Groupe de filtres';
-$labels['filtersets'] = 'Groupes de filtres';
-$labels['filtersetadd'] = 'Ajouter un groupe de filtres';
-$labels['filtersetdel'] = 'Supprimer le groupe de filtres actuel';
-$labels['filtersetact'] = 'Activer le groupe de filtres actuel';
-$labels['filtersetdeact'] = 'Désactiver le groupe de filtres actuel';
+$labels['rulestop'] = 'Arrêter l\'évaluation des règles';
+$labels['enable'] = 'Activer/désactiver';
+$labels['filterset'] = 'Jeu de filtres';
+$labels['filtersets'] = 'Jeux de filtres';
+$labels['filtersetadd'] = 'Ajouter un jeu de filtres';
+$labels['filtersetdel'] = 'Supprimer le jeu de filtres actuel';
+$labels['filtersetact'] = 'Activer le jeu de filtres actuel';
+$labels['filtersetdeact'] = 'Désactiver le jeu de filtres actuel';
$labels['filterdef'] = 'Définition du filtre';
-$labels['filtersetname'] = 'Nom du groupe de filtres';
-$labels['newfilterset'] = 'Nouveau groupe de filtres';
-$labels['active'] = 'actif';
+$labels['filtersetname'] = 'Nom du jeu de filtres';
+$labels['newfilterset'] = 'Nouveau jeu de filtres';
+$labels['active'] = 'activer';
$labels['none'] = 'aucun';
-$labels['fromset'] = 'Ã partir du filtre';
+$labels['fromset'] = 'Ã partir du jeu';
$labels['fromfile'] = 'Ã partir du fichier';
$labels['filterdisabled'] = 'Filtre désactivé';
$labels['countisgreaterthan'] = 'total supérieur à ';
$labels['countisgreaterthanequal'] = 'total supérieur ou égal à ';
$labels['countislessthan'] = 'total inférieur à ';
-$labels['countislessthanequal'] = 'total inférieur à ';
+$labels['countislessthanequal'] = 'total inférieur ou égal à ';
$labels['countequals'] = 'total égal à ';
-$labels['countnotequals'] = 'le comptage n\'est pas égal à ';
+$labels['countnotequals'] = 'le nombre n\'est pas égal à ';
$labels['valueisgreaterthan'] = 'valeur supérieure à ';
$labels['valueisgreaterthanequal'] = 'valeur supérieure ou égale à ';
$labels['valueislessthan'] = 'valeur inférieure à ';
$labels['valueislessthanequal'] = 'valeur inférieure ou égale à ';
$labels['valueequals'] = 'valeur égale à ';
$labels['valuenotequals'] = 'la valeur n\'est pas égale à ';
-$labels['setflags'] = 'Mettre les marqueurs au message';
-$labels['addflags'] = 'Ajouter les marqueurs au message';
-$labels['removeflags'] = 'Supprimer les marqueurs du message';
+$labels['setflags'] = 'Définir les drapeaux pour le message';
+$labels['addflags'] = 'Ajouter les drapeaux au message';
+$labels['removeflags'] = 'Supprimer les drapeaux du message';
$labels['flagread'] = 'Lu';
$labels['flagdeleted'] = 'Supprimé';
-$labels['flaganswered'] = 'Répondu';
-$labels['flagflagged'] = 'Marqué';
+$labels['flaganswered'] = 'Réponse envoyée';
+$labels['flagflagged'] = 'Signalé';
$labels['flagdraft'] = 'Brouillon';
$labels['setvariable'] = 'Définir une variable';
$labels['setvarname'] = 'Nom de la variable :';
$labels['setvarvalue'] = 'Valeur de la variable :';
-$labels['setvarmodifiers'] = 'Modifications :';
+$labels['setvarmodifiers'] = 'Modificateurs :';
$labels['varlower'] = 'minuscule';
$labels['varupper'] = 'majuscule';
-$labels['varlowerfirst'] = 'premier caractère minuscule';
-$labels['varupperfirst'] = 'premier caractère majuscule';
-$labels['varquotewildcard'] = 'Ãchapper les caractères spéciaux';
+$labels['varlowerfirst'] = 'premier caractère en minuscule';
+$labels['varupperfirst'] = 'premier caractère en majuscule';
+$labels['varquotewildcard'] = 'citer les caractères spéciaux';
$labels['varlength'] = 'longueur';
$labels['notify'] = 'Envoyer la notification';
-$labels['notifyaddress'] = 'A l\'adresse e-mail :';
-$labels['notifybody'] = 'Corps de la notification :';
-$labels['notifysubject'] = 'Objet de la notification :';
-$labels['notifyfrom'] = 'Expéditeur de la notification :';
+$labels['notifytarget'] = 'Cible de la notification :';
+$labels['notifymessage'] = 'Message de notification (optionnel) :';
+$labels['notifyoptions'] = 'Options de notification (optionnel) :';
+$labels['notifyfrom'] = 'Expéditeur de la notification (optionnel) :';
$labels['notifyimportance'] = 'Importance :';
$labels['notifyimportancelow'] = 'faible';
-$labels['notifyimportancenormal'] = 'normal';
+$labels['notifyimportancenormal'] = 'normale';
$labels['notifyimportancehigh'] = 'haute';
+$labels['notifymethodmailto'] = 'Courriel';
+$labels['notifymethodtel'] = 'Téléphone';
+$labels['notifymethodsms'] = 'Message texte';
$labels['filtercreate'] = 'Créer un filtre';
-$labels['usedata'] = 'Utiliser les informations suivantes dans le filtre';
+$labels['usedata'] = 'Utiliser les données suivantes dans le filtre :';
$labels['nextstep'] = 'Ãtape suivante';
$labels['...'] = '...';
$labels['currdate'] = 'Date actuelle';
$labels['datetest'] = 'Date';
-$labels['dateheader'] = 'header:';
+$labels['dateheader'] = 'en-tête :';
$labels['year'] = 'année';
$labels['month'] = 'mois';
$labels['day'] = 'jour';
-$labels['date'] = 'date (yyyy-mm-dd)';
+$labels['date'] = 'date (aaaa-mm-jj)';
$labels['julian'] = 'date (julien)';
$labels['hour'] = 'heure';
$labels['minute'] = 'minute';
@@ -137,56 +140,85 @@ $labels['std11'] = 'date (RFC2822)';
$labels['zone'] = 'fuseau horaire';
$labels['weekday'] = 'jour de la semaine (0-6)';
$labels['advancedopts'] = 'Options avancées';
-$labels['body'] = 'Corps du message';
+$labels['body'] = 'Corps';
$labels['address'] = 'adresse';
$labels['envelope'] = 'enveloppe';
-$labels['modifier'] = 'modificateur:';
+$labels['modifier'] = 'modificateur :';
$labels['text'] = 'texte';
$labels['undecoded'] = 'non décodé (brut)';
$labels['contenttype'] = 'type de contenu';
-$labels['modtype'] = 'type:';
+$labels['modtype'] = 'type :';
$labels['allparts'] = 'tout';
$labels['domain'] = 'domaine';
$labels['localpart'] = 'partie locale';
$labels['user'] = 'utilisateur';
$labels['detail'] = 'détail';
-$labels['comparator'] = 'comparateur';
+$labels['comparator'] = 'comparateur :';
$labels['default'] = 'par défaut';
$labels['octet'] = 'strict (octet)';
$labels['asciicasemap'] = 'insensible à la casse (ascii-casemap)';
$labels['asciinumeric'] = 'numérique (ascii-numeric)';
-$labels['index'] = 'index:';
-$labels['indexlast'] = 'retour arrière';
-$messages['filterunknownerror'] = 'Erreur du serveur inconnue';
-$messages['filterconnerror'] = 'Connexion au serveur Managesieve impossible';
-$messages['filterdeleteerror'] = 'Impossible de supprimer le filtre. Une erreur serveur est survenue.';
-$messages['filterdeleted'] = 'Le filtre a bien été supprimé';
-$messages['filtersaved'] = 'Le filtre a bien été enregistré';
-$messages['filtersaveerror'] = 'Impossible de sauvegarder le filtre. Une erreur serveur est survenue.';
-$messages['filterdeleteconfirm'] = 'Voulez-vous vraiment supprimer le filtre sélectionné?';
-$messages['ruledeleteconfirm'] = 'Voulez-vous vraiment supprimer la règle sélectionnée?';
-$messages['actiondeleteconfirm'] = 'Voulez-vous vraiment supprimer l\'action sélectionnée?';
+$labels['index'] = 'index :';
+$labels['indexlast'] = 'Ã l\'envers';
+$labels['vacation'] = 'Vacances';
+$labels['vacation.reply'] = 'Message de réponse';
+$labels['vacation.advanced'] = 'Paramètres avancés';
+$labels['vacation.subject'] = 'Objet';
+$labels['vacation.body'] = 'Corps';
+$labels['vacation.start'] = 'Début de vacances';
+$labels['vacation.end'] = 'Fin de vacances';
+$labels['vacation.status'] = 'Ãtat';
+$labels['vacation.on'] = 'Arrêt';
+$labels['vacation.off'] = 'Marche';
+$labels['vacation.addresses'] = 'Mes adresses supplémentaires';
+$labels['vacation.interval'] = 'Plage de réponse';
+$labels['vacation.after'] = 'Mettre en place la règle de vacances après';
+$labels['vacation.saving'] = 'Enregistrement des données...';
+$labels['vacation.action'] = 'Action pour message entrant';
+$labels['vacation.keep'] = 'Garder';
+$labels['vacation.discard'] = 'Rejeter';
+$labels['vacation.redirect'] = 'Réacheminer à ';
+$labels['vacation.copy'] = 'Envoyer une copie à ';
+$labels['arialabelfiltersetactions'] = 'Actions des jeux de filtrage';
+$labels['arialabelfilteractions'] = 'Actions de filtrage';
+$labels['arialabelfilterform'] = 'Propriété du filtrage';
+$labels['ariasummaryfilterslist'] = 'Liste des filtres';
+$labels['ariasummaryfiltersetslist'] = 'Liste des jeux de filtrage';
+$labels['filterstitle'] = 'Modifier les filtres de courriels entrants';
+$labels['vacationtitle'] = 'Modifier la règle d\'absence du bureau';
+$messages['filterunknownerror'] = 'Erreur de serveur inconnue';
+$messages['filterconnerror'] = 'Connexion au serveur impossible.';
+$messages['filterdeleteerror'] = 'Impossible de supprimer le filtre. Une erreur de serveur est survenue.';
+$messages['filterdeleted'] = 'Le filtre a été supprimé avec succès.';
+$messages['filtersaved'] = 'Le filtre a été enregistré avec succès.';
+$messages['filtersaveerror'] = 'Impossible d\'enregistrer le filtre. Une erreur de serveur est survenue.';
+$messages['filterdeleteconfirm'] = 'Voulez-vous vraiment supprimer le filtre sélectionné ?';
+$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';
$messages['ruleexist'] = 'Un filtre existe déjà avec ce nom.';
-$messages['setactivateerror'] = 'Impossible d\'activer le set de filtres sélectionné. Une erreur serveur est survenue.';
-$messages['setdeactivateerror'] = 'Impossible de désactiver le set de filtres sélectionné. Une erreur serveur est survenue.';
-$messages['setdeleteerror'] = 'Impossible de supprimer les set de filtres sélectionné. Une erreur serveur est survenue.';
-$messages['setactivated'] = 'Le groupe de filtres a bien été activé.';
-$messages['setdeactivated'] = 'Le groupe de filtres a bien été désactivé.';
-$messages['setdeleted'] = 'Le groupe de filtres a bien été supprimé.';
-$messages['setdeleteconfirm'] = 'Voulez vous vraiment supprimer le groupe de filtres sélectionné ?';
-$messages['setcreateerror'] = 'Impossible de créer un set de filtres. Une erreur serveur est survenue.';
-$messages['setcreated'] = 'Le groupe de filtres a bien été créé.';
-$messages['activateerror'] = 'Impossible d\'activer le ou les filtres sélectionné(s). Une erreur serveur est survenue.';
-$messages['deactivateerror'] = 'Impossible de désactiver le ou les filtres sélectionné(s). Une erreur serveur est survenue.';
+$messages['setactivateerror'] = 'Impossible d\'activer le jeu de filtres sélectionné. Une erreur de serveur est survenue.';
+$messages['setdeactivateerror'] = 'Impossible de désactiver le jeu de filtres sélectionné. Une erreur de serveur est survenue.';
+$messages['setdeleteerror'] = 'Impossible de supprimer le jeu de filtres sélectionné. Une erreur de serveur est survenue.';
+$messages['setactivated'] = 'Le jeu de filtres a été activé avec succès.';
+$messages['setdeactivated'] = 'Le jeu de filtres a été désactivé avec succès.';
+$messages['setdeleted'] = 'Le jeu de filtres a été supprimé avec succès.';
+$messages['setdeleteconfirm'] = 'Voulez vous vraiment supprimer le jeu de filtres sélectionné ?';
+$messages['setcreateerror'] = 'Impossible de créer un jeu de filtres. Une erreur de serveur est survenue.';
+$messages['setcreated'] = 'Le jeu de filtres a été créé avec succès.';
+$messages['activateerror'] = 'Impossible d\'activer le/les filtre(s) sélectionné(s). Une erreur de serveur est survenue.';
+$messages['deactivateerror'] = 'Impossible de désactiver le/les filtre(s) sélectionné(s). Une erreur de serveur est survenue.';
$messages['deactivated'] = 'Filtre(s) désactivé(s) avec succès.';
$messages['activated'] = 'Filtre(s) activé(s) avec succès.';
$messages['moved'] = 'Filtre déplacé avec succès.';
-$messages['moveerror'] = 'Impossible de déplacer le filtre sélectionné. Une erreur serveur est survenue.';
+$messages['moveerror'] = 'Impossible de déplacer le filtre sélectionné. Une erreur de serveur est survenue.';
$messages['nametoolong'] = 'Nom trop long.';
$messages['namereserved'] = 'Nom réservé.';
-$messages['setexist'] = 'Ce groupe existe déjà .';
-$messages['nodata'] = 'Au moins un élément doit être selectionné !';
-$messages['invaliddateformat'] = 'Date non valide ou format d\'une partie de la date';
+$messages['setexist'] = 'Le jeu existe déjà .';
+$messages['nodata'] = 'Au moins un élément doit être sélectionné !';
+$messages['invaliddateformat'] = 'Format de date ou d\'une partie de la date invalide';
+$messages['saveerror'] = 'Impossible d\'enregistrer les données. Une erreur du serveur est survenue.';
+$messages['vacationsaved'] = 'Les données de vacances ont été enregistrées avec succès.';
+$messages['emptyvacationbody'] = 'Le corps du message de vacances est nécessaire !';
?>
diff --git a/lib/plugins/managesieve/localization/gl_ES.inc b/lib/plugins/managesieve/localization/gl_ES.inc
index f1f9d2f..cbe45ca 100644
--- a/lib/plugins/managesieve/localization/gl_ES.inc
+++ b/lib/plugins/managesieve/localization/gl_ES.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'Persoa destinataria';
$labels['vacationaddr'] = 'O(s) meu(s) outro (s) enderezo(s) de correo:';
$labels['vacationdays'] = 'Cada canto enviar mensaxes (en dÃas):';
$labels['vacationinterval'] = 'Con que frecuencia se van enviar mensaxes:';
-$labels['days'] = 'dÃas';
-$labels['seconds'] = 'segundos';
$labels['vacationreason'] = 'Corpo da mensaxe (por vacacións):';
$labels['vacationsubject'] = 'Asunto da mensaxe:';
+$labels['days'] = 'dÃas';
+$labels['seconds'] = 'segundos';
$labels['rulestop'] = 'Parar de avaliar regras';
$labels['enable'] = 'Activar/Desactivar';
$labels['filterset'] = 'Conxunto de filtros';
@@ -108,14 +108,13 @@ $labels['varupperfirst'] = 'primeira letra maiúscula';
$labels['varquotewildcard'] = 'poñer entre aspas caracteres especiais';
$labels['varlength'] = 'lonxitude';
$labels['notify'] = 'Enviar notificación';
-$labels['notifyaddress'] = 'A este enderezo de correo:';
-$labels['notifybody'] = 'Corpo da notificación:';
-$labels['notifysubject'] = 'Asunto da notificación:';
-$labels['notifyfrom'] = 'Remite da notificación:';
$labels['notifyimportance'] = 'Importancia:';
$labels['notifyimportancelow'] = 'baixa';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
+$labels['notifymethodmailto'] = 'Correo electrónico';
+$labels['notifymethodtel'] = 'Teléfono';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crear filtro';
$labels['usedata'] = 'Usar os seguintes datos no filtro:';
$labels['nextstep'] = 'Seguinte paso';
@@ -157,6 +156,21 @@ $labels['asciicasemap'] = 'non sensÃbel a maiúsculas/minúsculas (ascii-casema
$labels['asciinumeric'] = 'numérico (ascii-numerico)';
$labels['index'] = 'Ãndice:';
$labels['indexlast'] = 'atrás';
+$labels['vacation.reply'] = 'Respostar á mensaxe';
+$labels['vacation.advanced'] = 'Opcións avanzadas';
+$labels['vacation.subject'] = 'Asunto';
+$labels['vacation.body'] = 'Corpo';
+$labels['vacation.status'] = 'Estado';
+$labels['vacation.on'] = 'Activar';
+$labels['vacation.off'] = 'Desactivar';
+$labels['vacation.saving'] = 'Gardando datos...';
+$labels['vacation.keep'] = 'Manter';
+$labels['vacation.discard'] = 'Descartar';
+$labels['vacation.redirect'] = 'Redirixir a';
+$labels['vacation.copy'] = 'Enviar copia a';
+$labels['arialabelfilteractions'] = 'Accións de filtrado';
+$labels['arialabelfilterform'] = 'Propiedades dos filtros';
+$labels['ariasummaryfilterslist'] = 'Lista de filtros';
$messages['filterunknownerror'] = 'Erro descoñecido do servidor';
$messages['filterconnerror'] = 'ImposÃbel conectar co servidor.';
$messages['filterdeleteerror'] = 'Non se pode eliminar filtro. Produciuse un erro de servidor.';
diff --git a/lib/plugins/managesieve/localization/he_IL.inc b/lib/plugins/managesieve/localization/he_IL.inc
index f347d94..4e7b597 100644
--- a/lib/plugins/managesieve/localization/he_IL.inc
+++ b/lib/plugins/managesieve/localization/he_IL.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = '×× ××¢×';
$labels['vacationaddr'] = '×ת×××ת ×××"× × ×ספ×ת:';
$labels['vacationdays'] = '××××× ×ª××ר×ת ( ××××× ) ×ש××× ××××¢×ת:';
$labels['vacationinterval'] = '××××× ×ª××ר×ת ×ש××× ×××××¢×';
-$labels['days'] = '××××';
-$labels['seconds'] = '×©× ××ת';
$labels['vacationreason'] = '×××£ ×××××¢× (ס××ת ×××פש×):';
$labels['vacationsubject'] = '× ××©× ×××××¢×:';
+$labels['days'] = '××××';
+$labels['seconds'] = '×©× ××ת';
$labels['rulestop'] = 'עצ××¨× ×©× ×××× ×ª ××××××';
$labels['enable'] = '×פש×ר/× ××ר××';
$labels['filterset'] = '×§××צת ××¡× × ××';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = '××ª× ×ר×ש×× ××ת ×××××';
$labels['varquotewildcard'] = '×ª× ××××× ×ש ×ש×× ××× ×ר×××ת';
$labels['varlength'] = '××ר×';
$labels['notify'] = '×ש××× ×תר××';
-$labels['notifyaddress'] = '×× ×ת××ת ××"××:';
-$labels['notifybody'] = '×××£ ××תר××:';
-$labels['notifysubject'] = '× ××©× ××תר××:';
-$labels['notifyfrom'] = 'ש××× ××תר××:';
+$labels['notifytarget'] = '××¢× ×תר××:';
+$labels['notifymessage'] = '×××עת ×תר×× (רש×ת):';
+$labels['notifyoptions'] = '×פשר×××ת ×תר×× (רש×ת):';
+$labels['notifyfrom'] = 'ש××× ×תר×× (רש×ת):';
$labels['notifyimportance'] = '×ש×××ת:';
$labels['notifyimportancelow'] = '× ××××';
$labels['notifyimportancenormal'] = 'ר××××';
$labels['notifyimportancehigh'] = '×××××';
+$labels['notifymethodmailto'] = '××××´×';
+$labels['notifymethodtel'] = '××פ××';
+$labels['notifymethodsms'] = '×סר××';
$labels['filtercreate'] = '×צ×רת ××¡× ×';
$labels['usedata'] = 'ש×××ש ×××××¢ ש×××× ××צ×רת ×××¡× ×:';
$labels['nextstep'] = '××¦×¢× ×××';
@@ -157,6 +160,32 @@ $labels['asciicasemap'] = 'case insensitive (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = '××× ×קס:';
$labels['indexlast'] = '×××ר×';
+$labels['vacation'] = '××פש×';
+$labels['vacation.reply'] = '×××עת תש×××';
+$labels['vacation.advanced'] = '×××ר×ת ×תק×××ת';
+$labels['vacation.subject'] = '× ×ש×';
+$labels['vacation.body'] = '×××£ ×××××¢×';
+$labels['vacation.start'] = 'ת×ר×× ×ת×××';
+$labels['vacation.end'] = 'ת×ר×× ×¡×××';
+$labels['vacation.status'] = '×צ×';
+$labels['vacation.on'] = '××פע×';
+$labels['vacation.off'] = '××××';
+$labels['vacation.addresses'] = '×ת×××ת × ×ספ×ת ש××';
+$labels['vacation.interval'] = '×ר××× ××× ×ª×©×××ת';
+$labels['vacation.after'] = '×עתקת סר×× ××××¤×©× ××ר×';
+$labels['vacation.saving'] = 'ש××רת ××××¢...';
+$labels['vacation.action'] = 'פע××× ×¢× ××××¢× × ×× ×¡×ª';
+$labels['vacation.keep'] = '××ש××ר';
+$labels['vacation.discard'] = '××פ×ר';
+$labels['vacation.redirect'] = '××¤× ×× ××';
+$labels['vacation.copy'] = 'ש×××ת ×עתק ××';
+$labels['arialabelfiltersetactions'] = 'פע×××ת ×¢× ×§×××¦× ×©× ×××§× ×¡×× ××';
+$labels['arialabelfilteractions'] = 'פע×××ת ××¡× ×';
+$labels['arialabelfilterform'] = '××פ××× × ××¡× ×';
+$labels['ariasummaryfilterslist'] = 'רש××× ×©× ××¡× × ××';
+$labels['ariasummaryfiltersetslist'] = 'רש××ת ×§××צ×ת ×©× ×××§× ×¡×× ××';
+$labels['filterstitle'] = 'ער×× ××¡× × × ×××ר × ×× ×¡';
+$labels['vacationtitle'] = 'ער×× ××× ××××¥-××-×שר××';
$messages['filterunknownerror'] = 'ש×××ת שרת ×××ª× ×××רת.';
$messages['filterconnerror'] = '×× × ××ª× ××ת××ר ×שרת.';
$messages['filterdeleteerror'] = '×× × ××ª× ×××××§ ס×× ××. ש×××ת שרת.';
@@ -189,4 +218,7 @@ $messages['namereserved'] = '××©× ××× ×©××ר.';
$messages['setexist'] = '×ער×× ××ר ×§×××ת.';
$messages['nodata'] = '×××× ××××ר ××××§×× ××× ×פ××ת!';
$messages['invaliddateformat'] = 'ת×ר×× ×× ×××§× ×× ×¤×ר×× ×× ×ª×§××';
+$messages['saveerror'] = '×× × ××ª× ×ש××ר ×××××¢ ××©× ×©×××× ×©× ×שרת';
+$messages['vacationsaved'] = '×××עת ××××¤×©× × ×©××¨× ××צ×××';
+$messages['emptyvacationbody'] = '×××£ ×©× ×××עת ×××¤×©× × ×רש!';
?>
diff --git a/lib/plugins/managesieve/localization/hr_HR.inc b/lib/plugins/managesieve/localization/hr_HR.inc
index b3192ab..efcd4da 100644
--- a/lib/plugins/managesieve/localization/hr_HR.inc
+++ b/lib/plugins/managesieve/localization/hr_HR.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'Primatelj';
$labels['vacationaddr'] = 'Dodatna e-mail adresa(e):';
$labels['vacationdays'] = 'Koliko Äesto slati poruku (u danima):';
$labels['vacationinterval'] = 'Koliko Äesto slati poruku:';
-$labels['days'] = 'dana';
-$labels['seconds'] = 'sekundi';
$labels['vacationreason'] = 'Tijelo poruke (razlog odmora):';
$labels['vacationsubject'] = 'Naslov poruke:';
+$labels['days'] = 'dana';
+$labels['seconds'] = 'sekundi';
$labels['rulestop'] = 'Prekini izvoÄenje filtera';
$labels['enable'] = 'OmoguÄi/OnemoguÄi';
$labels['filterset'] = 'Grupa filtera';
@@ -108,10 +108,6 @@ $labels['varupperfirst'] = 'prvo slovo veliko';
$labels['varquotewildcard'] = 'Citiraj specijalne znakove';
$labels['varlength'] = 'duljina';
$labels['notify'] = 'Pošalji obavijest';
-$labels['notifyaddress'] = 'Na e-mail adresu:';
-$labels['notifybody'] = 'Tekst obavijesti:';
-$labels['notifysubject'] = 'Naslov obavijesti:';
-$labels['notifyfrom'] = 'Pošiljatelj obavijesti:';
$labels['notifyimportance'] = 'Važnost:';
$labels['notifyimportancelow'] = 'niska';
$labels['notifyimportancenormal'] = 'normalna';
@@ -157,6 +153,11 @@ $labels['asciicasemap'] = 'neosjetljivo na veliÄinu slova (ascii-casemap)';
$labels['asciinumeric'] = 'numeriÄki (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'unatrag';
+$labels['vacation.advanced'] = 'Napredne postavke';
+$labels['vacation.subject'] = 'Naslov';
+$labels['vacation.body'] = 'Tijelo poruke';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.saving'] = 'Spremanje podataka...';
$messages['filterunknownerror'] = 'Nepoznata greška na poslužitelju';
$messages['filterconnerror'] = 'NemoguÄe spajanje na poslužitelj (managesieve)';
$messages['filterdeleteerror'] = 'NemoguÄe brisanje filtera. GreÅ¡ka na poslužitelju.';
@@ -189,4 +190,5 @@ $messages['namereserved'] = 'Rezervirano ime.';
$messages['setexist'] = 'Skup veÄ postoji.';
$messages['nodata'] = 'Barem jedan pozicija mora biti odabrana!';
$messages['invaliddateformat'] = 'Neispravan datum ili dio datuma';
+$messages['saveerror'] = 'NemoguÄe spremiti podatke. GreÅ¡ka na poslužitelju.';
?>
diff --git a/lib/plugins/managesieve/localization/hu_HU.inc b/lib/plugins/managesieve/localization/hu_HU.inc
index afab3f3..eae7650 100644
--- a/lib/plugins/managesieve/localization/hu_HU.inc
+++ b/lib/plugins/managesieve/localization/hu_HU.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'CÃmzett';
$labels['vacationaddr'] = 'További e-mail cÃmeim:';
$labels['vacationdays'] = 'Válaszüzenet küldése ennyi naponként:';
$labels['vacationinterval'] = 'Milyen gyakran küld üzeneteket:';
-$labels['days'] = 'napok';
-$labels['seconds'] = 'másodpercek';
$labels['vacationreason'] = 'Levél szövege (automatikus válasz):';
$labels['vacationsubject'] = 'Ãzenet tárgya:';
+$labels['days'] = 'napok';
+$labels['seconds'] = 'másodpercek';
$labels['rulestop'] = 'Műveletek végrehajtásának befejezése';
$labels['enable'] = 'Bekapcsol/Kikapcsol';
$labels['filterset'] = 'Szűrök készlet';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'elsŠkarakter nagybetű';
$labels['varquotewildcard'] = 'speciális karakterek idézése';
$labels['varlength'] = 'hossz';
$labels['notify'] = 'ÃrtesÃtés küldése';
-$labels['notifyaddress'] = 'CÃmzett e-mail cÃme:';
-$labels['notifybody'] = 'ÃrtesÃtés levéltörzse:';
-$labels['notifysubject'] = 'ÃrtesÃtés tárgya:';
-$labels['notifyfrom'] = 'ÃrtesÃtés feladója:';
+$labels['notifytarget'] = 'ÃrtesÃtés célja:';
+$labels['notifymessage'] = 'ÃrtesÃtési üzenet (opcionális):';
+$labels['notifyoptions'] = 'ÃrtesÃtés opcióik (opcionális):';
+$labels['notifyfrom'] = 'ÃrtesÃtés feladója (opcionális):';
$labels['notifyimportance'] = 'Fontosság:';
$labels['notifyimportancelow'] = 'alacsony';
$labels['notifyimportancenormal'] = 'normál';
$labels['notifyimportancehigh'] = 'magas';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Telefonszám';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'SzűrŠlétrehozása';
$labels['usedata'] = 'A következÅ adatok használata a szűrÅben';
$labels['nextstep'] = 'KövetkezŠlépés';
@@ -157,6 +160,32 @@ $labels['asciicasemap'] = 'kis-nagybetüre nem érzékeny (ascii-casemap)';
$labels['asciinumeric'] = 'számszerü (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'visszafelé';
+$labels['vacation'] = 'Vakáció';
+$labels['vacation.reply'] = 'Válasz az üzenetre';
+$labels['vacation.advanced'] = 'Haladó beállÃtások';
+$labels['vacation.subject'] = 'Tárgy';
+$labels['vacation.body'] = 'Törzs';
+$labels['vacation.start'] = 'SzünidŠkezdete';
+$labels['vacation.end'] = 'SzünidŠvége';
+$labels['vacation.status'] = 'Ãllapot';
+$labels['vacation.on'] = 'Be';
+$labels['vacation.off'] = 'Ki';
+$labels['vacation.addresses'] = 'További cÃmeim';
+$labels['vacation.interval'] = 'Válasz intervallum';
+$labels['vacation.after'] = 'Rakd a szabadság szabályt ez után ';
+$labels['vacation.saving'] = 'Adatok mentése...';
+$labels['vacation.action'] = 'BeérkezŠüzenet akció';
+$labels['vacation.keep'] = 'Megtartás';
+$labels['vacation.discard'] = 'ÃrvénytelenÃt';
+$labels['vacation.redirect'] = 'ÃtÃrányÃtás ide';
+$labels['vacation.copy'] = 'Másolat kűldése ide';
+$labels['arialabelfiltersetactions'] = 'SzűrŠkészlet müveletek';
+$labels['arialabelfilteractions'] = 'SzűrŠmüveletek';
+$labels['arialabelfilterform'] = 'SzűrŠtulajdonságai';
+$labels['ariasummaryfilterslist'] = 'SzűrÅk listája';
+$labels['ariasummaryfiltersetslist'] = 'SzűrŠkészletek listája';
+$labels['filterstitle'] = 'BejövŠüzenetek szűrÅinek szerkesztése';
+$labels['vacationtitle'] = 'Irodán kiÃvül szabász szerkesztése';
$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';
@@ -189,4 +218,7 @@ $messages['namereserved'] = 'Nem használható (foglalt) név-';
$messages['setexist'] = 'A készlet már létezik.';
$messages['nodata'] = 'Legalább egyet ki kell választani.';
$messages['invaliddateformat'] = 'hibás dátum formátum';
+$messages['saveerror'] = 'Az adat mentése sikertelen. Szerverhiba történt';
+$messages['vacationsaved'] = 'Vakáció adatai sikeresen elmentve.';
+$messages['emptyvacationbody'] = 'A vakácÃó üzenet szövegtörzse kötelezÅ!';
?>
diff --git a/lib/plugins/managesieve/localization/id_ID.inc b/lib/plugins/managesieve/localization/id_ID.inc
index 59dadc7..b445ef6 100644
--- a/lib/plugins/managesieve/localization/id_ID.inc
+++ b/lib/plugins/managesieve/localization/id_ID.inc
@@ -165,9 +165,6 @@ $labels['vacation.reply'] = 'Balas pesan';
$labels['vacation.advanced'] = 'Pengaturan Lanjutan';
$labels['vacation.subject'] = 'Judul';
$labels['vacation.body'] = 'Isi';
-$labels['vacation.dates'] = 'Waktu Liburan';
-$labels['vacation.from'] = 'Pengirim:';
-$labels['vacation.to'] = 'Kepada:';
$labels['vacation.status'] = 'Status';
$labels['vacation.on'] = 'Nyala';
$labels['vacation.off'] = 'Mati';
diff --git a/lib/plugins/managesieve/localization/it_IT.inc b/lib/plugins/managesieve/localization/it_IT.inc
index b7fc970..b97fde8 100644
--- a/lib/plugins/managesieve/localization/it_IT.inc
+++ b/lib/plugins/managesieve/localization/it_IT.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'Destinatario';
$labels['vacationaddr'] = 'Account email aggiuntivo(i):';
$labels['vacationdays'] = 'Ogni quanti giorni ribadire il messaggio allo stesso mittente';
$labels['vacationinterval'] = 'Ogni quanto tempo inviare i messaggi:';
-$labels['days'] = 'giorni';
-$labels['seconds'] = 'secondi';
$labels['vacationreason'] = 'Corpo del messaggio (dettagli relativi all\'assenza):';
$labels['vacationsubject'] = 'Oggetto del messaggio';
+$labels['days'] = 'giorni';
+$labels['seconds'] = 'secondi';
$labels['rulestop'] = 'Non valutare le regole successive';
$labels['enable'] = 'Abilita/disabilita';
$labels['filterset'] = 'Gruppi di filtri';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'primo carattere maiuscolo';
$labels['varquotewildcard'] = 'caratteri speciali di quoting';
$labels['varlength'] = 'lunghezza';
$labels['notify'] = 'Invia notifica';
-$labels['notifyaddress'] = 'All\'indirizzo email:';
-$labels['notifybody'] = 'Corpo della notifica:';
-$labels['notifysubject'] = 'Oggetto della notifica:';
-$labels['notifyfrom'] = 'Mittente della notifica:';
+$labels['notifytarget'] = 'Destinatario della notifica';
+$labels['notifymessage'] = 'Messaggio di notifica (opzionale):';
+$labels['notifyoptions'] = 'Opzioni di notifica (opzionale):';
+$labels['notifyfrom'] = 'Mittente della notifica (opzionale):';
$labels['notifyimportance'] = 'Importanza:';
$labels['notifyimportancelow'] = 'bassa';
$labels['notifyimportancenormal'] = 'normale';
$labels['notifyimportancehigh'] = 'alta';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Telefono';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Crea filtro';
$labels['usedata'] = 'utilizza i seguenti dati nel filtro';
$labels['nextstep'] = 'passo successivo';
@@ -157,6 +160,32 @@ $labels['asciicasemap'] = 'non differenziare maiuscole/minuscole (ascii-casemap)
$labels['asciinumeric'] = 'numerico';
$labels['index'] = 'indice:';
$labels['indexlast'] = 'indietro';
+$labels['vacation'] = 'Vacanza';
+$labels['vacation.reply'] = 'Messaggio di risposta';
+$labels['vacation.advanced'] = 'Impostazioni avanzate';
+$labels['vacation.subject'] = 'Oggetto';
+$labels['vacation.body'] = 'Testo';
+$labels['vacation.start'] = 'Inizio vacanza';
+$labels['vacation.end'] = 'Fine vacanza';
+$labels['vacation.status'] = 'Stato';
+$labels['vacation.on'] = 'Attivato';
+$labels['vacation.off'] = 'Disattivato';
+$labels['vacation.addresses'] = 'I miei indirizzi aggiuntivi';
+$labels['vacation.interval'] = 'Intervallo di risposta';
+$labels['vacation.after'] = 'Imposta regola di vacanza dopo';
+$labels['vacation.saving'] = 'Salvataggio...';
+$labels['vacation.action'] = 'Azione messaggio in arrivo';
+$labels['vacation.keep'] = 'Mantieni';
+$labels['vacation.discard'] = 'Elimina';
+$labels['vacation.redirect'] = 'Ridireziona a';
+$labels['vacation.copy'] = 'Invia copia a';
+$labels['arialabelfiltersetactions'] = 'Azione settaggio dei filtri ';
+$labels['arialabelfilteractions'] = 'Azione Filtri';
+$labels['arialabelfilterform'] = 'Proprietà filtri';
+$labels['ariasummaryfilterslist'] = 'Lista dei filtri';
+$labels['ariasummaryfiltersetslist'] = 'Lista settaggio dei filtri';
+$labels['filterstitle'] = 'Modifica filtri dei messaggio in arrivo';
+$labels['vacationtitle'] = 'Modifica le regole del Risponditore automatico';
$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.';
@@ -189,4 +218,7 @@ $messages['namereserved'] = 'nome riservato';
$messages['setexist'] = 'Il gruppo esiste già ';
$messages['nodata'] = 'selezionare almeno una posizione';
$messages['invaliddateformat'] = 'Formato della data non valido';
+$messages['saveerror'] = 'Impossibile salvare i dati. Errore del server.';
+$messages['vacationsaved'] = 'Dati di vacanza salvati correttamente.';
+$messages['emptyvacationbody'] = 'Il testo del messaggio non puo\' essere vuoto!';
?>
diff --git a/lib/plugins/managesieve/localization/ja_JP.inc b/lib/plugins/managesieve/localization/ja_JP.inc
index 1fff7e3..db04084 100644
--- a/lib/plugins/managesieve/localization/ja_JP.inc
+++ b/lib/plugins/managesieve/localization/ja_JP.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'å®å
';
$labels['vacationaddr'] = 'My additional e-mail address(es):';
$labels['vacationdays'] = 'ã¡ãã»ã¼ã¸ã(1æ¥ã«)éä¿¡ããé »åº¦:';
$labels['vacationinterval'] = 'ã¡ãã»ã¼ã¸ãéä¿¡ããé »åº¦:';
-$labels['days'] = 'æ¥';
-$labels['seconds'] = 'ç§';
$labels['vacationreason'] = 'ã¡ãã»ã¼ã¸æ¬ä½(伿ã®çç±):';
$labels['vacationsubject'] = 'ã¡ãã»ã¼ã¸ã®ä»¶å:';
+$labels['days'] = 'æ¥';
+$labels['seconds'] = 'ç§';
$labels['rulestop'] = 'ã«ã¼ã«ã®è©ä¾¡ã忢';
$labels['enable'] = 'æå¹/ç¡å¹';
$labels['filterset'] = 'ãã£ã«ã¿ã¼ã»ãã';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'æåã®æåã大æå';
$labels['varquotewildcard'] = 'ç¹æ®æåãå¼ç¨å¦ç';
$labels['varlength'] = 'é·ã';
$labels['notify'] = 'éç¥ãéä¿¡';
-$labels['notifyaddress'] = 'éä¿¡å
ã®é»åã¡ã¼ã«ã¢ãã¬ã¹:';
-$labels['notifybody'] = 'éç¥ã®æ¬æ:';
-$labels['notifysubject'] = 'éç¥ã®ä»¶å:';
-$labels['notifyfrom'] = 'éç¥ã®éä¿¡è
:';
+$labels['notifytarget'] = 'éç¥ã®å¯¾è±¡:';
+$labels['notifymessage'] = 'éç¥ã®ã¡ãã»ã¼ã¸(ä»»æ):';
+$labels['notifyoptions'] = 'éç¥ã®ãªãã·ã§ã³(ä»»æ):';
+$labels['notifyfrom'] = 'éç¥ã®éä¿¡è
(ä»»æ):';
$labels['notifyimportance'] = 'éè¦åº¦:';
$labels['notifyimportancelow'] = 'ä½';
$labels['notifyimportancenormal'] = 'é常';
$labels['notifyimportancehigh'] = 'é«';
+$labels['notifymethodmailto'] = 'é»åã¡ã¼ã«';
+$labels['notifymethodtel'] = 'é»è©±';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'ãã£ã«ã¿ã¼ã使';
$labels['usedata'] = 'ãã£ã«ã¿ã¼ã§æ¬¡ã®ãã¼ã¿ã使ç¨';
$labels['nextstep'] = '次ã®ã¹ããã';
@@ -157,6 +160,23 @@ $labels['asciicasemap'] = '大æåå°æåãåºå¥ããªã(ascii-casemap)';
$labels['asciinumeric'] = 'æ°å¤(ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'backwards';
+$labels['vacation'] = '伿';
+$labels['vacation.reply'] = 'è¿ä¿¡ã®ã¡ãã»ã¼ã¸';
+$labels['vacation.advanced'] = '詳細ãªè¨å®';
+$labels['vacation.subject'] = 'ä»¶å';
+$labels['vacation.body'] = 'æ¬æ';
+$labels['vacation.status'] = 'ç¶æ
';
+$labels['vacation.on'] = 'ãªã³';
+$labels['vacation.off'] = 'ãªã';
+$labels['vacation.addresses'] = '追å ã®ã¢ãã¬ã¹';
+$labels['vacation.interval'] = 'è¿ä¿¡ã®éé';
+$labels['vacation.after'] = 'å¾ã«ä¼æã®ã«ã¼ã«ãè¨å
¥';
+$labels['vacation.saving'] = 'ãã¼ã¿ãä¿åä¸...';
+$labels['arialabelfiltersetactions'] = 'ãã£ã«ã¿ã¼ã»ããã®åä½';
+$labels['arialabelfilteractions'] = 'ãã£ã«ã¿ã¼ã®åä½';
+$labels['arialabelfilterform'] = 'ãã£ã«ã¿ã¼ã®ç¹æ§';
+$labels['ariasummaryfilterslist'] = 'ãã£ã«ã¿ã¼ã®ä¸è¦§';
+$labels['ariasummaryfiltersetslist'] = 'ãã£ã«ã¿ã¼ã»ããã®ä¸è¦§';
$messages['filterunknownerror'] = '䏿ãªãµã¼ãã¼ã®ã¨ã©ã¼ã§ãã';
$messages['filterconnerror'] = 'ãµã¼ãã«æ¥ç¶ã§ãã¾ããã';
$messages['filterdeleteerror'] = 'ãã£ã«ã¿ã¼ãåé¤ã§ãã¾ããããµã¼ãã¼ã§ã¨ã©ã¼ãçºçãã¾ããã';
@@ -189,4 +209,6 @@ $messages['namereserved'] = 'äºç´ããã¦ããååã§ãã';
$messages['setexist'] = 'ãã£ã«ã¿ã¼ã»ãããæ¢ã«åå¨ãã¾ãã';
$messages['nodata'] = 'å°ãªãã¨ã1ã¤ã®å ´æã鏿ããªããã°ãªãã¾ãã!';
$messages['invaliddateformat'] = 'ç¡å¹ãªæ¥ä»ã¾ãã¯æ¥ä»é¨åã®æ¸å¼';
+$messages['saveerror'] = 'ãã£ã«ã¿ã¼ã®ä¿åã§ãã¾ããããµã¼ãã¼ã§ã¨ã©ã¼ãçºçãã¾ããã';
+$messages['vacationsaved'] = '伿ã®ãã¼ã¿ãä¿åãã¾ããã';
?>
diff --git a/lib/plugins/managesieve/localization/km_KH.inc b/lib/plugins/managesieve/localization/km_KH.inc
index a6094be..9d3de70 100644
--- a/lib/plugins/managesieve/localization/km_KH.inc
+++ b/lib/plugins/managesieve/localization/km_KH.inc
@@ -51,16 +51,17 @@ $labels['del'] = 'áá»á';
$labels['sender'] = 'á¢áááâáááá¾';
$labels['recipient'] = 'á¢áááâááá½á';
$labels['vacationdays'] = 'áá¾âáááá¾âáá¶áâáá¹ááá¶ááâááá»áááá¶ (áááá»áâáá½áâáááá)á';
-$labels['days'] = 'áááá';
-$labels['seconds'] = 'áá·áá¶áá¸';
$labels['vacationreason'] = 'áá½âáá¶á (á ááá»ááâáá·áááááá¶á)á';
$labels['vacationsubject'] = 'ááááá¶áááâáá¶áá';
+$labels['days'] = 'áááá';
+$labels['seconds'] = 'áá·áá¶áá¸';
$labels['rulestop'] = 'áááâáá·áâáá
âáá¾âáááááááá';
$labels['enable'] = 'áá¾á/áá·á';
$labels['filterdef'] = 'á¢ááááááâááááá';
$labels['active'] = 'ááááá';
$labels['none'] = 'áááá¶á';
$labels['fromfile'] = 'áá¸âá¯ááá¶á';
+$labels['filterdisabled'] = 'áá¶áâáá·áâááááá';
$labels['valuenotequals'] = 'áááááâáá·áâáááá¾âáá¹á';
$labels['flagread'] = 'áá¶áâá¢á¶á';
$labels['flagdeleted'] = 'áá¶áâáá»á';
@@ -74,10 +75,6 @@ $labels['varlower'] = 'á¢ááááâáá¼á
';
$labels['varupper'] = 'á¢ááááâáá';
$labels['varlength'] = 'áááááá';
$labels['notify'] = 'áááá¾âáá¶áâáá¼áâáááá¹á';
-$labels['notifyaddress'] = 'áá
âá¢á¶áááááá¶áâá¢áá¸áááá';
-$labels['notifybody'] = 'áá½âáá¶áâáá¼áâáááá¹áá';
-$labels['notifysubject'] = 'ááááá¶áááâáá¶áâáá¼áâáááá¹áá';
-$labels['notifyfrom'] = 'á¢áááâáááá¾âáá¶áâáá¼áâáááá¹áá';
$labels['notifyimportance'] = 'áááá¶ááá';
$labels['notifyimportancelow'] = 'áá¶á';
$labels['notifyimportancenormal'] = 'áááááá¶';
diff --git a/lib/plugins/managesieve/localization/ko_KR.inc b/lib/plugins/managesieve/localization/ko_KR.inc
index b552fa9..e9497e7 100644
--- a/lib/plugins/managesieve/localization/ko_KR.inc
+++ b/lib/plugins/managesieve/localization/ko_KR.inc
@@ -18,18 +18,18 @@
$labels['filters'] = 'íí°';
$labels['managefilters'] = 'ìì ë©ì¼ íí° ê´ë¦¬';
$labels['filtername'] = 'íí°ëª
';
-$labels['newfilter'] = 'ì íí°';
+$labels['newfilter'] = 'ìë¡ì´ íí°';
$labels['filteradd'] = 'íí° ì¶ê°';
$labels['filterdel'] = 'íí° ìì ';
$labels['moveup'] = 'ìë¡ ì´ë';
$labels['movedown'] = 'ìëë¡ ì´ë';
-$labels['filterallof'] = 'ë¤ìì 모ë ê·ì¹ê³¼ ì¼ì¹í¨';
+$labels['filterallof'] = 'ë¤ì 모ë ê·ì¹ê³¼ ì¼ì¹í¨';
$labels['filteranyof'] = 'ë¤ì ê·ì¹ ì¤ íëë¼ë ì¼ì¹í¨';
$labels['filterany'] = '모ë ë©ìì§';
$labels['filtercontains'] = 'ë¤ìì í¬í¨í¨';
$labels['filternotcontains'] = 'ë¤ìì í¬í¨íì§ ìì';
-$labels['filteris'] = 'ë¤ìê³¼ ê°ì';
-$labels['filterisnot'] = 'ë¤ìê³¼ ê°ì§ ìì';
+$labels['filteris'] = 'ë¤ìê³¼ ì¼ì¹í¨';
+$labels['filterisnot'] = 'ë¤ìê³¼ ì¼ì¹íì§ ìì';
$labels['filterexists'] = 'ë¤ìì´ ì¡´ì¬í¨';
$labels['filternotexists'] = 'ë¤ìì´ ì¡´ì¬íì§ ìì';
$labels['filtermatches'] = 'ë¤ì ííìê³¼ ì¼ì¹í¨';
@@ -40,38 +40,39 @@ $labels['filterunder'] = 'ë¤ìë³´ë¤ ìëì';
$labels['filterover'] = 'ë¤ìë³´ë¤ ìì';
$labels['addrule'] = 'ê·ì¹ ì¶ê°';
$labels['delrule'] = 'ê·ì¹ ìì ';
-$labels['messagemoveto'] = 'ë©ìì§ë¥¼ ë¤ì ìì¹ë¡ ì´ëí¨';
-$labels['messageredirect'] = 'ë©ìì§ë¥¼ ë¤ì 주ìë¡ ì ì¡í¨';
-$labels['messagecopyto'] = 'ë©ìì§ë¥¼ ë¤ì ìì¹ë¡ ë³µì¬í¨';
-$labels['messagesendcopy'] = 'ë©ìì§ì ì¬ë³¸ì ë¤ì ìì¹ë¡ ë³´ë';
+$labels['messagemoveto'] = 'ë©ìì§ë¥¼ ë¤ì ìì¹ë¡ ì´ë';
+$labels['messageredirect'] = 'ë©ìì§ë¥¼ ë¤ì 주ìë¡ ì¬ì ì¡';
+$labels['messagecopyto'] = 'ë©ìì§ë¥¼ ë¤ì ìì¹ë¡ ë³µì¬';
+$labels['messagesendcopy'] = 'ë©ìì§ ì¬ë³¸ì ë¤ì ëììê² ë³´ë´ê¸°';
$labels['messagereply'] = 'ë¤ì ë©ìì§ë¡ íì ';
-$labels['messagedelete'] = 'ë©ìì§ë¥¼ ìì ';
+$labels['messagedelete'] = 'ë©ìì§ ìì ';
$labels['messagediscard'] = 'ë¤ì ë©ìì§ì í¨ê» í기';
$labels['messagekeep'] = 'ë©ìì§ë¥¼ ë°ì í¸ì§í¨ì ë³´ê´';
$labels['messagesrules'] = 'í´ë¹ ë°ì ë©ì¼:';
$labels['messagesactions'] = '...ë¤ì ëìì ì¤í:';
$labels['add'] = 'ì¶ê°';
$labels['del'] = 'ìì ';
-$labels['sender'] = 'ë°ì ì¸';
-$labels['recipient'] = 'ìì ì¸';
+$labels['sender'] = 'ë°ì¡ì';
+$labels['recipient'] = 'ìì ì';
+$labels['vacationaddr'] = 'ëì ì¶ê°ì ì¸ ì´ë©ì¼ 주ì:';
$labels['vacationdays'] = 'ë©ìì§ ë°ì 주기 (ì¼):';
$labels['vacationinterval'] = 'ë©ìì§ ë°ì 주기:';
-$labels['days'] = 'ì¼';
-$labels['seconds'] = 'ì´';
$labels['vacationreason'] = 'ë©ìì§ ë³¸ë¬¸ (í´ê° ì¬ì ):';
$labels['vacationsubject'] = 'ë©ìì§ ì 목:';
+$labels['days'] = 'ì¼';
+$labels['seconds'] = 'ì´';
$labels['rulestop'] = 'ê·ì¹ íê°ë¥¼ ì¤ë¨';
$labels['enable'] = 'íì±í/ë¹íì±í';
$labels['filterset'] = 'íí° ì¸í¸';
$labels['filtersets'] = 'íí° ì¸í¸';
$labels['filtersetadd'] = 'íí° ì¸í¸ ì¶ê°';
$labels['filtersetdel'] = 'íì¬ íí° ì¸í¸ë¥¼ ìì ';
-$labels['filtersetact'] = 'íì¬ íí° ì¸í¸ë¥¼ íì±í';
-$labels['filtersetdeact'] = 'íì¬ íí° ì¸í¸ë¥¼ ë¹íì±í';
+$labels['filtersetact'] = 'íì¬ íí° ì¸í¸ íì±í';
+$labels['filtersetdeact'] = 'íì¬ íí° ì¸í¸ ë¹íì±í';
$labels['filterdef'] = 'íí° ì ì';
$labels['filtersetname'] = 'íí° ì¸í¸ëª
';
$labels['newfilterset'] = 'ì íí° ì¸í¸';
-$labels['active'] = 'íì±';
+$labels['active'] = 'íì±íë¨';
$labels['none'] = 'ìì';
$labels['fromset'] = 'ì¸í¸ë¡ë¶í°';
$labels['fromfile'] = 'íì¼ë¡ë¶í°';
@@ -81,20 +82,20 @@ $labels['countisgreaterthanequal'] = 'ê°ìê° ë¤ìë³´ë¤ í¬ê±°ë ê°ì';
$labels['countislessthan'] = 'ê°ìê° ë¤ìë³´ë¤ ìì';
$labels['countislessthanequal'] = 'ê°ìê° ìê±°ë ê°ì';
$labels['countequals'] = 'ê°ìê° ë¤ìê³¼ ê°ì';
-$labels['countnotequals'] = 'ê°¯ìê° ë¤ìê³¼ ê°ì§ ìì';
+$labels['countnotequals'] = 'ê°ìê° ë¤ìê³¼ ì¼ì¹íì§ ìì';
$labels['valueisgreaterthan'] = 'ê°ì´ ë¤ìë³´ë¤ í¼';
$labels['valueisgreaterthanequal'] = 'ê°ì´ ë¤ìë³´ë¤ í¬ê±°ë ê°ì';
$labels['valueislessthan'] = 'ê°ì´ ë¤ìë³´ë¤ ìì';
$labels['valueislessthanequal'] = 'ê°ì´ ë¤ìë³´ë¤ ìê±°ë ê°ì';
$labels['valueequals'] = 'ê°ì´ ë¤ìê³¼ ê°ì';
-$labels['valuenotequals'] = 'ê°ì´ ë¤ìê³¼ ê°ì§ ìì';
-$labels['setflags'] = 'ë©ìì§ì ê¹ë°ì ì¤ì ';
+$labels['valuenotequals'] = 'ê°ì´ ë¤ìê³¼ ì¼ì¹íì§ ìì';
+$labels['setflags'] = 'ë©ìì§ë¥¼ ê¹ë°ë¡ íì';
$labels['addflags'] = 'ë©ìì§ì ê¹ë°ì ì¶ê°';
$labels['removeflags'] = 'ë©ìì§ìì ê¹ë°ì ì ê±°';
$labels['flagread'] = 'ì½ì';
$labels['flagdeleted'] = 'ìì ë¨';
$labels['flaganswered'] = 'ìëµí¨';
-$labels['flagflagged'] = 'ê¹ë°ì ì¶ê°í¨';
+$labels['flagflagged'] = 'ê¹ë°ë¡ íìí¨';
$labels['flagdraft'] = 'ìì ë³´ê´í¨';
$labels['setvariable'] = 'ë³ì ì¤ì ';
$labels['setvarname'] = 'ë³ìëª
:';
@@ -107,14 +108,17 @@ $labels['varupperfirst'] = '첫 문ì를 ë문ìë¡';
$labels['varquotewildcard'] = 'í¹ì 기í¸ë¥¼ ì¸ì©';
$labels['varlength'] = '길ì´';
$labels['notify'] = 'ì림 ë©ìì§ ë³´ë´ê¸°';
-$labels['notifyaddress'] = 'ëì ì´ë©ì¼ 주ì:';
-$labels['notifybody'] = 'ì림 ë©ìì§ ë³¸ë¬¸:';
-$labels['notifysubject'] = 'ì림 ë©ìì§ ì 목:';
-$labels['notifyfrom'] = 'ì림 ë©ìì§ ë°ì ì¸:';
+$labels['notifytarget'] = 'ì림 ëì:';
+$labels['notifymessage'] = 'ì림 ë©ìì§(ìµì
):';
+$labels['notifyoptions'] = 'ì림 ìµì
(ìµì
):';
+$labels['notifyfrom'] = 'ì림 ë°ì¡ì(ìµì
):';
$labels['notifyimportance'] = 'ì¤ìë:';
$labels['notifyimportancelow'] = 'ë®ì';
$labels['notifyimportancenormal'] = 'ë³´íµ';
$labels['notifyimportancehigh'] = 'ëì';
+$labels['notifymethodmailto'] = 'ì´ë©ì¼';
+$labels['notifymethodtel'] = 'ì í';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'íí° ìì±';
$labels['usedata'] = 'íí°ìì ë¤ì ë°ì´í°ë¥¼ ì¬ì©:';
$labels['nextstep'] = 'ë¤ì ë¨ê³';
@@ -141,7 +145,7 @@ $labels['address'] = '주ì';
$labels['envelope'] = 'ë´í¬';
$labels['modifier'] = 'ììì:';
$labels['text'] = 'í
ì¤í¸';
-$labels['undecoded'] = 'ìí¸íëì§ ìì (ììí)';
+$labels['undecoded'] = 'ìí¸íëì§ ìì(ììí)';
$labels['contenttype'] = 'ë´ì© ì í';
$labels['modtype'] = 'ì í:';
$labels['allparts'] = '모ë';
@@ -156,27 +160,65 @@ $labels['asciicasemap'] = 'ë/ì문ì êµ¬ë¶ (ascii-casemap)';
$labels['asciinumeric'] = 'ì«ì (ascii-numeric)';
$labels['index'] = 'ìì¸:';
$labels['indexlast'] = 'ìë°©í¥';
+$labels['vacation'] = 'í´ê°';
+$labels['vacation.reply'] = 'ë©ìì§ íì ';
+$labels['vacation.advanced'] = 'ê³ ê¸ ì¤ì ';
+$labels['vacation.subject'] = 'ì 목';
+$labels['vacation.body'] = '본문';
+$labels['vacation.start'] = 'í´ê° ìì';
+$labels['vacation.end'] = 'í´ê° ë';
+$labels['vacation.status'] = 'ìí';
+$labels['vacation.on'] = '켬';
+$labels['vacation.off'] = 'ë';
+$labels['vacation.addresses'] = 'ë´ ì¶ê°ì ì¸ ì£¼ì';
+$labels['vacation.interval'] = 'íì 주기';
+$labels['vacation.after'] = 'ë¤ì ì´íì í´ê° ê·ì¹ì ìì¹í¨';
+$labels['vacation.saving'] = 'ë°ì´í°ë¥¼ ì ì¥íë ì¤...';
+$labels['vacation.action'] = 'ìì ë©ìì§ ëì';
+$labels['vacation.keep'] = 'ë³´ê´';
+$labels['vacation.discard'] = 'í기';
+$labels['vacation.redirect'] = 'ì¬ì ì¡';
+$labels['vacation.copy'] = 'ì¬ë³¸ì ë¤ì ëììê² ì ì¡';
+$labels['arialabelfiltersetactions'] = 'íí° ì¸í¸ ëì';
+$labels['arialabelfilteractions'] = 'íí° ëì';
+$labels['arialabelfilterform'] = 'íí° ìì±';
+$labels['ariasummaryfilterslist'] = 'íí° ëª©ë¡';
+$labels['ariasummaryfiltersetslist'] = 'íí° ì¸í¸ 목ë¡';
+$labels['filterstitle'] = 'ìì ë©ì¼ íí° í¸ì§';
+$labels['vacationtitle'] = 'ì리ë¹ì ê·ì¹ í¸ì§';
$messages['filterunknownerror'] = 'ìì ìë ìë² ì¤ë¥.';
-$messages['filterconnerror'] = 'ìë²ì ì°ê²°í ì ìì.';
+$messages['filterconnerror'] = 'ìë²ì ì°ê²°í ì ììµëë¤.';
+$messages['filterdeleteerror'] = 'íí°ë¥¼ ìì í ì ììµëë¤. ìë² ì¤ë¥ê° ë°ìíìµëë¤.';
$messages['filterdeleted'] = 'íí°ê° ì±ê³µì ì¼ë¡ ìì ë¨.';
$messages['filtersaved'] = 'íí°ê° ì±ê³µì ì¼ë¡ ì ì¥ë¨.';
+$messages['filtersaveerror'] = 'íí°ë¥¼ ì ì¥í ì ììµëë¤. ìë² ì¤ë¥ê° ë°ìíìµëë¤.';
$messages['filterdeleteconfirm'] = 'ì ë§ë¡ ì íí íí°ë¥¼ ìì íìê² ìµëê¹?';
$messages['ruledeleteconfirm'] = 'ì ë§ë¡ ì íí ê·ì¹ì ìì íìê² ìµëê¹?';
$messages['actiondeleteconfirm'] = 'ì ë§ë¡ ì íí ëìì ìì íìê² ìµëê¹?';
-$messages['forbiddenchars'] = 'íëì ê¸ì§ë 문ìê° ì¡´ì¬í¨.';
-$messages['cannotbeempty'] = 'íëë ë¹ìë ì ìì.';
-$messages['ruleexist'] = 'ì§ì í ì´ë¦ì íí°ê° ì´ë¯¸ ì¡´ì¬í¨.';
+$messages['forbiddenchars'] = 'íëì ê¸ì§ë 문ìê° ì¡´ì¬í©ëë¤.';
+$messages['cannotbeempty'] = 'íëë ë¹ì´ë ì ììµëë¤.';
+$messages['ruleexist'] = 'ì§ì í ì´ë¦ì íí°ê° ì´ë¯¸ ì¡´ì¬í©ëë¤.';
+$messages['setactivateerror'] = 'ì íí íí° ì¸í¸ë¥¼ íì±íí ì ììµëë¤. ìë² ì¤ë¥ê° ë°ìíìµëë¤.';
+$messages['setdeactivateerror'] = 'ì íí íí° ì¸í¸ë¥¼ ë¹íì±íí ì ììµëë¤. ìë² ì¤ë¥ê° ë°ìíìµëë¤.';
+$messages['setdeleteerror'] = 'ì íí íí° ì¸í¸ë¥¼ ìì í ì ììµëë¤. ìë² ì¤ë¥ê° ë°ìíìµëë¤.';
$messages['setactivated'] = 'íí° ì¸í¸ê° ì±ê³µì ì¼ë¡ íì±íë¨.';
$messages['setdeactivated'] = 'íí° ì¸í¸ê° ì±ê³µì ì¼ë¡ ë¹íì±íë¨.';
$messages['setdeleted'] = 'íí° ì¸í¸ê° ì±ê³µì ì¼ë¡ ìì ë¨.';
$messages['setdeleteconfirm'] = 'ì ë§ë¡ ì íí íí° ì¸í¸ë¥¼ ìì íìê² ìµëê¹?';
+$messages['setcreateerror'] = 'ì íí íí° ì¸í¸ë¥¼ ìì±í ì ììµëë¤. ìë² ì¤ë¥ê° ë°ìíìµëë¤.';
$messages['setcreated'] = 'íí° ì¸í¸ê° ì±ê³µì ì¼ë¡ ìì±ë¨.';
+$messages['activateerror'] = 'ì íí íí°ë¥¼ íì±íí ì ììµëë¤. ìë² ì¤ë¥ê° ë°ìíìµëë¤.';
+$messages['deactivateerror'] = 'ì íí íí°ë¥¼ ë¹íì±íí ì ììµëë¤. ìë² ì¤ë¥ê° ë°ìíìµëë¤.';
$messages['deactivated'] = 'íí°ê° ì±ê³µì ì¼ë¡ ë¹íì±íë¨.';
$messages['activated'] = 'íí°ê° ì±ê³µì ì¼ë¡ íì±íë¨.';
-$messages['moved'] = 'íí°ê° ì±ê³µì ì¼ë¡ ì´ëí¨.';
-$messages['nametoolong'] = 'ì´ë¦ì´ ë무 ê¹.';
-$messages['namereserved'] = 'ìì½ë ì´ë¦.';
-$messages['setexist'] = 'ì¸í¸ê° ì´ë¯¸ ì¡´ì¬í¨.';
+$messages['moved'] = 'íí°ê° ì±ê³µì ì¼ë¡ ì´ëëììµëë¤.';
+$messages['moveerror'] = 'ì íí íí°ë¥¼ ì´ëí ì ììµëë¤. ìë² ì¤ë¥ê° ë°ìíìµëë¤.';
+$messages['nametoolong'] = 'ì´ë¦ì´ ë무 ê¹ëë¤.';
+$messages['namereserved'] = 'ìì½ë ì´ë¦ì
ëë¤.';
+$messages['setexist'] = 'ì¸í¸ê° ì´ë¯¸ ì¡´ì¬í©ëë¤.';
$messages['nodata'] = 'ìµì íëì ìì¹ê° ì íëì´ì¼ í©ëë¤!';
$messages['invaliddateformat'] = 'ì í¨íì§ ìì ë ì§ ëë ë ì§ ì¼ë¶ íì';
+$messages['saveerror'] = 'ë°ì´í°ë¥¼ ì ì¥í ì ììµëë¤.. ìë² ì¤ë¥ê° ë°ìíìµëë¤.';
+$messages['vacationsaved'] = 'í´ê° ë°ì´í°ê° ì±ê³µì ì¼ë¡ ì ì¥ë¨.';
+$messages['emptyvacationbody'] = 'í´ê° ë©ìì§ì ë³¸ë¬¸ì´ íìí©ëë¤!';
?>
diff --git a/lib/plugins/managesieve/localization/lt_LT.inc b/lib/plugins/managesieve/localization/lt_LT.inc
index 5dc81af..575e43c 100644
--- a/lib/plugins/managesieve/localization/lt_LT.inc
+++ b/lib/plugins/managesieve/localization/lt_LT.inc
@@ -46,6 +46,8 @@ $labels['messagecopyto'] = 'Kopijuoti laiÅ¡kÄ
į';
$labels['messagesendcopy'] = 'Nusiųsti laiÅ¡ko kopijÄ
';
$labels['messagereply'] = 'Atsakyti laišku';
$labels['messagedelete'] = 'PaÅ¡alinti laiÅ¡kÄ
';
+$labels['messagediscard'] = 'Panaikinti su laišku';
+$labels['messagekeep'] = 'Palikti laiÅ¡kÄ
gautųjų aplanke';
$labels['messagesrules'] = 'Gaunamiems laiškams:';
$labels['messagesactions'] = 'â¦vykdyti Å¡iuos veiksmus:';
$labels['add'] = 'PridÄti';
@@ -55,10 +57,10 @@ $labels['recipient'] = 'GavÄjas';
$labels['vacationaddr'] = 'Papildomas gavÄjų adresų sÄ
rašas:';
$labels['vacationdays'] = 'Kaip dažnai išsiųsti laiškus (dienomis):';
$labels['vacationinterval'] = 'Kaip dažnai siųsti laiškus:';
-$labels['days'] = 'd.';
-$labels['seconds'] = 'sek.';
$labels['vacationreason'] = 'Laiško tekstas';
$labels['vacationsubject'] = 'Laiško tema:';
+$labels['days'] = 'd.';
+$labels['seconds'] = 'sek.';
$labels['rulestop'] = 'Nutraukti taisyklių vykdymÄ
';
$labels['enable'] = 'Įjungti / išjungti';
$labels['filterset'] = 'Filtrų rinkinys';
@@ -106,14 +108,17 @@ $labels['varupperfirst'] = 'pirmoji raidÄ didžioji';
$labels['varquotewildcard'] = 'cituoti specialius simbolius';
$labels['varlength'] = 'ilgis';
$labels['notify'] = 'Siųsti priminimÄ
';
-$labels['notifyaddress'] = 'Kam, el. pašto adresas:';
-$labels['notifybody'] = 'Priminimo tekstas';
-$labels['notifysubject'] = 'Priminimo pavadinimas';
-$labels['notifyfrom'] = 'Priminimo siuntÄjas';
+$labels['notifytarget'] = 'Priminimo gavÄjas:';
+$labels['notifymessage'] = 'Priminimo laiškas (nebūtina):';
+$labels['notifyoptions'] = 'Priminimo nustatymai (nebūtina):';
+$labels['notifyfrom'] = 'Priminimo siuntÄjas (nebÅ«tina):';
$labels['notifyimportance'] = 'Svarbumas';
$labels['notifyimportancelow'] = 'žemas';
$labels['notifyimportancenormal'] = 'normalus';
$labels['notifyimportancehigh'] = 'aukštas';
+$labels['notifymethodmailto'] = 'El. paštas';
+$labels['notifymethodtel'] = 'Telefono numeris';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Kurti filtrÄ
';
$labels['usedata'] = 'Filtrui naudoti šiuos duomenis:';
$labels['nextstep'] = 'Kitas žingsnis';
@@ -155,27 +160,62 @@ $labels['asciicasemap'] = 'nepaisantis raidžių registro (âascii-casemapâ)'
$labels['asciinumeric'] = 'skaitinis (âascii-numericâ)';
$labels['index'] = 'turinys:';
$labels['indexlast'] = 'atbulai';
+$labels['vacation'] = 'Atostogos';
+$labels['vacation.reply'] = 'Atsakyti laišku';
+$labels['vacation.advanced'] = 'Papildomos nuostatos';
+$labels['vacation.subject'] = 'Tema';
+$labels['vacation.body'] = 'Laiško tekstas';
+$labels['vacation.status'] = 'Būsena';
+$labels['vacation.on'] = 'Įjungta';
+$labels['vacation.off'] = 'Išjungta';
+$labels['vacation.addresses'] = 'Mano papildomi adresai';
+$labels['vacation.interval'] = 'Atsakymo intervalas';
+$labels['vacation.after'] = 'Atostogų taisyklÄ pastatyti po';
+$labels['vacation.saving'] = 'Išsaugomi duomenys...';
+$labels['vacation.action'] = 'Veiksmas su gaunamais laiškais';
+$labels['vacation.keep'] = 'Palikti';
+$labels['vacation.discard'] = 'Panaikinti';
+$labels['vacation.redirect'] = 'Peradresuoti kam';
+$labels['vacation.copy'] = 'Siųsti kopijÄ
kam';
+$labels['arialabelfiltersetactions'] = 'Filtrų rinkinio veiksmai';
+$labels['arialabelfilteractions'] = 'Filtro veiksmai';
+$labels['arialabelfilterform'] = 'Filtro nustatymai';
+$labels['ariasummaryfilterslist'] = 'Filtrų sÄ
rašas';
+$labels['ariasummaryfiltersetslist'] = 'Filtrų rinkinių sÄ
rašas';
+$labels['filterstitle'] = 'Tvarkyti gaunamų laiškų filtrus';
+$labels['vacationtitle'] = 'Redaguoti ne-biure taisyklÄ';
$messages['filterunknownerror'] = 'Nežinoma serverio klaida.';
$messages['filterconnerror'] = 'Neįmanoma užmegzti ryšio su serveriu.';
+$messages['filterdeleteerror'] = 'Nepavyksta ištrinti filtro. Įvyko serverio klaida.';
$messages['filterdeleted'] = 'Filtras panaikintas sÄkmingai.';
$messages['filtersaved'] = 'Filtras sÄkmingai iÅ¡saugotas';
+$messages['filtersaveerror'] = 'Nepavyksta išsaugoti filtro. Įvyko serverio klaida.';
$messages['filterdeleteconfirm'] = 'Ar jÅ«s esate įsitikinÄs, jog norite panaikinti pasirinktus filtrus(-Ä
)?';
$messages['ruledeleteconfirm'] = 'Ar jÅ«s įsitikinÄs, jog norite panaikinti pasirinktÄ
taisyklÄ?';
$messages['actiondeleteconfirm'] = 'Ar jÅ«s įsitikinÄs, jog norite panaikinti pasirinktÄ
veiksmÄ
?';
$messages['forbiddenchars'] = 'Laukelyje yra draudžiamų simbolių.';
$messages['cannotbeempty'] = 'Laukelis negali bÅ«ti tuÅ¡Äias';
$messages['ruleexist'] = 'Filtras tokiu vardu jau yra.';
+$messages['setactivateerror'] = 'Neįmanoma aktyvuoti pasirinkto filtrų rinkinio. Įvyko serverio klaida.';
+$messages['setdeactivateerror'] = 'Neįmanoma išjungti pasirinkto filtrų rinkinio. Įvyko serverio klaida.';
+$messages['setdeleteerror'] = 'Neįmanoma panaikinti pasirinkto filtrų rinkinio. Įvyko serverio klaida.';
$messages['setactivated'] = 'Filtrų rinkinys sÄkmingai aktyvuotas.';
$messages['setdeactivated'] = 'Filtrų rinkinys sÄkmingai deaktyvuotas.';
$messages['setdeleted'] = 'Filtrų rinkinys sÄkmingai panaikintas.';
$messages['setdeleteconfirm'] = 'Ar jÅ«s esate tikri, jog norite panaikinti pasirinktÄ
filtrų rinkinį?';
+$messages['setcreateerror'] = 'Neįmanoma sukurti filtrų rinkinio. Įvyko serverio klaida.';
$messages['setcreated'] = 'Filtrų rinkinys sÄkmingai sukurtas.';
+$messages['activateerror'] = 'Neįmanoma įjungti pasirinktų filtrų(-o). Įvyko serverio klaida.';
+$messages['deactivateerror'] = 'Neįmanoma išjungti pasirinktų filtrų(-o). Įvyko serverio klaida.';
$messages['deactivated'] = 'Filtras(-as) sÄkmingai iÅ¡jungti.';
$messages['activated'] = 'Filtras(-as) sÄkmingai įjungti.';
$messages['moved'] = 'Filtrai perkelti sÄkmingai.';
+$messages['moveerror'] = 'Pasirinkto filtro perkelti neįmanoma. Įvyko serverio klaida.';
$messages['nametoolong'] = 'Vardas per ilgas.';
$messages['namereserved'] = 'Rezervuotas vardas.';
$messages['setexist'] = 'Rinkinys jau yra sukurtas.';
$messages['nodata'] = 'BÅ«tina pasirinkti bent vienÄ
pozicijÄ
!';
$messages['invaliddateformat'] = 'Neteisingas datos ar jos dalies formatas';
+$messages['saveerror'] = 'Nepavyksta išsaugoti duomenų. Įvyko serverio klaida.';
+$messages['vacationsaved'] = 'SÄkmingai iÅ¡saugoti atostogų duomenys.';
?>
diff --git a/lib/plugins/managesieve/localization/lv_LV.inc b/lib/plugins/managesieve/localization/lv_LV.inc
index 111f3b4..33c000e 100644
--- a/lib/plugins/managesieve/localization/lv_LV.inc
+++ b/lib/plugins/managesieve/localization/lv_LV.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'SaÅÄmÄjs';
$labels['vacationaddr'] = 'Mana(s) papildus e-pasta adrese(s):';
$labels['vacationdays'] = 'Cik bieži sÅ«tÄ« ziÅojumus (dienÄs):';
$labels['vacationinterval'] = 'Cik bieži sÅ«tÄ«t vÄstules:';
-$labels['days'] = 'dienas';
-$labels['seconds'] = 'sekundes';
$labels['vacationreason'] = 'AtvaļinÄjuma paziÅojuma teksts:';
$labels['vacationsubject'] = 'VÄstules tÄma:';
+$labels['days'] = 'dienas';
+$labels['seconds'] = 'sekundes';
$labels['rulestop'] = 'ApturÄt nosacÄ«jumu pÄrbaudi';
$labels['enable'] = 'IeslÄgt/IzslÄgt';
$labels['filterset'] = 'Filtru kopa';
@@ -108,10 +108,6 @@ $labels['varupperfirst'] = 'pirmais burts kÄ lielais burts';
$labels['varquotewildcard'] = '"citÄt" speciÄlÄs rakstzÄ«mes';
$labels['varlength'] = 'garums';
$labels['notify'] = 'SÅ«tÄ«t paziÅojumus';
-$labels['notifyaddress'] = 'Uz e-pasta adresi:';
-$labels['notifybody'] = 'PaziÅojuma teksts:';
-$labels['notifysubject'] = 'PaziÅojuma tÄma:';
-$labels['notifyfrom'] = 'PaziÅojuma sÅ«tÄ«tÄjs:';
$labels['notifyimportance'] = 'Svarīgums:';
$labels['notifyimportancelow'] = 'zems';
$labels['notifyimportancenormal'] = 'parasts';
diff --git a/lib/plugins/managesieve/localization/nb_NO.inc b/lib/plugins/managesieve/localization/nb_NO.inc
index e0a3448..c9224ae 100644
--- a/lib/plugins/managesieve/localization/nb_NO.inc
+++ b/lib/plugins/managesieve/localization/nb_NO.inc
@@ -47,18 +47,20 @@ $labels['messagesendcopy'] = 'Send en kopi av meldingen til';
$labels['messagereply'] = 'Svar med melding';
$labels['messagedelete'] = 'Slett melding';
$labels['messagediscard'] = 'Avvis med melding';
+$labels['messagekeep'] = 'Behold melding i innboks';
$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['vacationaddr'] = 'Tilleggs epost-adresse(r):';
$labels['vacationdays'] = 'Periode mellom meldinger (i dager):';
$labels['vacationinterval'] = 'Periode mellom meldinger:';
-$labels['days'] = 'dager';
-$labels['seconds'] = 'sekunder';
$labels['vacationreason'] = 'Innhold (begrunnelse for fravær)';
$labels['vacationsubject'] = 'Meldingsemne:';
+$labels['days'] = 'dager';
+$labels['seconds'] = 'sekunder';
$labels['rulestop'] = 'Stopp evaluering av regler';
$labels['enable'] = 'Aktiver/Deaktiver';
$labels['filterset'] = 'Filtersett';
@@ -106,10 +108,6 @@ $labels['varupperfirst'] = 'første tegn stor bokstav';
$labels['varquotewildcard'] = 'sitér spesialtegn';
$labels['varlength'] = 'lengde';
$labels['notify'] = 'Send melding';
-$labels['notifyaddress'] = 'Til e-postadresse:';
-$labels['notifybody'] = 'Varseltekst:';
-$labels['notifysubject'] = 'Varselemne:';
-$labels['notifyfrom'] = 'Varselavsender:';
$labels['notifyimportance'] = 'Viktighet:';
$labels['notifyimportancelow'] = 'lav';
$labels['notifyimportancenormal'] = 'normal';
@@ -157,22 +155,31 @@ $labels['index'] = 'index:';
$labels['indexlast'] = 'baklengs';
$messages['filterunknownerror'] = 'Ukjent problem med tjener.';
$messages['filterconnerror'] = 'Kunne ikke koble til tjeneren.';
+$messages['filterdeleteerror'] = 'Kunne ikke slette filter. Fikk feilmelding fra server.';
$messages['filterdeleted'] = 'Filteret er blitt slettet.';
$messages['filtersaved'] = 'Filteret er blitt lagret.';
+$messages['filtersaveerror'] = 'Kunne ikke lagre filter. Fikk feilmelding fra server.';
$messages['filterdeleteconfirm'] = 'Vil du virkelig slette det valgte filteret?';
$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.';
$messages['ruleexist'] = 'Det finnes allerede et filter med dette navnet.';
+$messages['setactivateerror'] = 'Kunne ikke aktivere valgte filtersett. Fikk feilmelding fra server.';
+$messages['setdeactivateerror'] = 'Kunne ikke deaktivere valgte filtersett. Fikk feilmelding fra server.';
+$messages['setdeleteerror'] = 'Kunne ikke slette valgte filtersett. Fikk feilmelding fra server.';
$messages['setactivated'] = 'Filtersett aktivert.';
$messages['setdeactivated'] = 'Filtersett deaktivert.';
$messages['setdeleted'] = 'Filtersett slettet.';
$messages['setdeleteconfirm'] = 'Er du sikker på at du vil slette det valgte filtersettet?';
+$messages['setcreateerror'] = 'Kunne ikke opprette filtersett. Fikk feilmelding fra server.';
$messages['setcreated'] = 'Filtersett opprettet.';
+$messages['activateerror'] = 'Kunne ikke aktivere valgte filter(e). Fikk feilmelding fra server.';
+$messages['deactivateerror'] = 'Kunne ikke deaktivere valgte filter(e). Fikk feilmelding fra server.';
$messages['deactivated'] = 'Filter skrudd på.';
$messages['activated'] = 'Filter skrudd av.';
$messages['moved'] = 'Filter ble flyttet.';
+$messages['moveerror'] = 'Kunne ikke flytte valgte filter. Fikk feilmelding fra server.';
$messages['nametoolong'] = 'Navnet er for langt.';
$messages['namereserved'] = 'Navnet er reservert.';
$messages['setexist'] = 'Settet eksisterer allerede.';
diff --git a/lib/plugins/managesieve/localization/nl_NL.inc b/lib/plugins/managesieve/localization/nl_NL.inc
index 97a4e16..b84b87e 100644
--- a/lib/plugins/managesieve/localization/nl_NL.inc
+++ b/lib/plugins/managesieve/localization/nl_NL.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'Ontvanger';
$labels['vacationaddr'] = 'Mijn extra e-mailadres(sen):';
$labels['vacationdays'] = 'Hoe vaak moet een bericht verstuurd worden (in dagen):';
$labels['vacationinterval'] = 'Hoe vaak moet een bericht verstuurd worden:';
-$labels['days'] = 'dagen';
-$labels['seconds'] = 'seconden';
$labels['vacationreason'] = 'Bericht (vakantiereden):';
$labels['vacationsubject'] = 'Onderwerp:';
+$labels['days'] = 'dagen';
+$labels['seconds'] = 'seconden';
$labels['rulestop'] = 'Stop met regels uitvoeren';
$labels['enable'] = 'In-/uitschakelen';
$labels['filterset'] = 'Filterset';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'eerste karakter als hoofdletter';
$labels['varquotewildcard'] = 'speciale karakters quoten';
$labels['varlength'] = 'lengte';
$labels['notify'] = 'Stuur melding';
-$labels['notifyaddress'] = 'Naar e-mailadres:';
-$labels['notifybody'] = 'Meldingsbericht:';
-$labels['notifysubject'] = 'Onderwerp van melding:';
-$labels['notifyfrom'] = 'Afzender:';
+$labels['notifytarget'] = 'Meldingsdoel:';
+$labels['notifymessage'] = 'Meldingsbericht (optioneel):';
+$labels['notifyoptions'] = 'Meldingsopties (optioneel):';
+$labels['notifyfrom'] = 'Meldingsafzender (optioneel):';
$labels['notifyimportance'] = 'Prioriteit:';
$labels['notifyimportancelow'] = 'laag';
$labels['notifyimportancenormal'] = 'normaal';
$labels['notifyimportancehigh'] = 'hoog';
+$labels['notifymethodmailto'] = 'E-mail';
+$labels['notifymethodtel'] = 'Telefoon';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Filter aanmaken';
$labels['usedata'] = 'Gebruik de volgende gegevens in het filter:';
$labels['nextstep'] = 'Volgende stap';
@@ -157,6 +160,32 @@ $labels['asciicasemap'] = 'hoofdletterongevoelig (ascii-casemap)';
$labels['asciinumeric'] = 'numeriek (ascii-numeriek)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'terugwaarts';
+$labels['vacation'] = 'Vakantie';
+$labels['vacation.reply'] = 'Antwoordbericht';
+$labels['vacation.advanced'] = 'Geavanceerde instellingen';
+$labels['vacation.subject'] = 'Onderwerp';
+$labels['vacation.body'] = 'Inhoud';
+$labels['vacation.start'] = 'Begin van vakantie';
+$labels['vacation.end'] = 'Einde van vakantie';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'Aan';
+$labels['vacation.off'] = 'Uit';
+$labels['vacation.addresses'] = 'Mijn extra e-mailadressen';
+$labels['vacation.interval'] = 'Antwoordinterval';
+$labels['vacation.after'] = 'Voeg een vakantieregel toe na';
+$labels['vacation.saving'] = 'Gegevens worden opgeslagen...';
+$labels['vacation.action'] = 'Actie voor inkomend bericht';
+$labels['vacation.keep'] = 'Bewaren';
+$labels['vacation.discard'] = 'Weggooien';
+$labels['vacation.redirect'] = 'Doorsturen naar';
+$labels['vacation.copy'] = 'Kopie sturen naar';
+$labels['arialabelfiltersetactions'] = 'Filtersetacties';
+$labels['arialabelfilteractions'] = 'Filteracties';
+$labels['arialabelfilterform'] = 'Filtereigenschappen';
+$labels['ariasummaryfilterslist'] = 'Filterlijst';
+$labels['ariasummaryfiltersetslist'] = 'Lijst met filtersets';
+$labels['filterstitle'] = 'Bewerk filters voor inkomende berichten';
+$labels['vacationtitle'] = 'Bewerk vakantieregel';
$messages['filterunknownerror'] = 'Onbekende fout';
$messages['filterconnerror'] = 'Kan geen verbinding maken met de managesieve server';
$messages['filterdeleteerror'] = 'Kan filter niet verwijderen. Er trad een serverfout op.';
@@ -189,4 +218,7 @@ $messages['namereserved'] = 'Gereserveerde naam.';
$messages['setexist'] = 'Filterset bestaat al.';
$messages['nodata'] = 'Tenminste één positie moet geselecteerd worden!';
$messages['invaliddateformat'] = 'Ongeldige datum of datumformaat';
+$messages['saveerror'] = 'Opslaan van de gegevens is mislukt. Er trad een serverfout op.';
+$messages['vacationsaved'] = 'Vakantiegegevens succesvol opgeslagen.';
+$messages['emptyvacationbody'] = 'Inhoud van vakantiebericht is verplicht!';
?>
diff --git a/lib/plugins/managesieve/localization/pl_PL.inc b/lib/plugins/managesieve/localization/pl_PL.inc
index 2759309..06c0a79 100644
--- a/lib/plugins/managesieve/localization/pl_PL.inc
+++ b/lib/plugins/managesieve/localization/pl_PL.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'Odbiorca';
$labels['vacationaddr'] = 'Moje dodatkowe adresy email:';
$labels['vacationdays'] = 'CzÄstotliwoÅÄ wysyÅania wiadomoÅci (w dniach):';
$labels['vacationinterval'] = 'Jak czÄsto wysyÅaÄ wiadomoÅci:';
-$labels['days'] = 'dni';
-$labels['seconds'] = 'sekundy';
$labels['vacationreason'] = 'TreÅÄ (przyczyna nieobecnoÅci):';
$labels['vacationsubject'] = 'Temat wiadomoÅci:';
+$labels['days'] = 'dni';
+$labels['seconds'] = 'sekundy';
$labels['rulestop'] = 'Przerwij przetwarzanie reguÅ';
$labels['enable'] = 'WÅÄ
cz/WyÅÄ
cz';
$labels['filterset'] = 'Zbiór filtrów';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'pierwsza wielka litera';
$labels['varquotewildcard'] = 'zamieÅ znaki specjalne';
$labels['varlength'] = 'dÅugoÅÄ';
$labels['notify'] = 'WyÅlij powiadomienie';
-$labels['notifyaddress'] = 'Na adres e-mail:';
-$labels['notifybody'] = 'TreÅÄ powiadomienia:';
-$labels['notifysubject'] = 'TytuÅ powiadomienia:';
-$labels['notifyfrom'] = 'Nadawca powiadomienia:';
+$labels['notifytarget'] = 'Odbiorca powiadomienia:';
+$labels['notifymessage'] = 'WiadomoÅÄ powiadomienia (opcjonalne):';
+$labels['notifyoptions'] = 'Opcje powiadomienia (opcjonalne):';
+$labels['notifyfrom'] = 'Nadawca powiadomienia (opcjonalne):';
$labels['notifyimportance'] = 'Priorytet:';
$labels['notifyimportancelow'] = 'niski';
$labels['notifyimportancenormal'] = 'normalny';
$labels['notifyimportancehigh'] = 'wysoki';
+$labels['notifymethodmailto'] = 'E-Mail';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Utwórz filtr';
$labels['usedata'] = 'Użyj nastÄpujÄ
cych danych do utworzenia filtra:';
$labels['nextstep'] = 'NastÄpny krok';
@@ -157,6 +160,32 @@ $labels['asciicasemap'] = 'nierozróżniajÄ
cy wielkoÅci liter (ascii-casemap)'
$labels['asciinumeric'] = 'numeryczny (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'wstecz';
+$labels['vacation'] = 'NieobecnoÅÄ';
+$labels['vacation.reply'] = 'Odpowiedź';
+$labels['vacation.advanced'] = 'Ustawienia zaawansowane';
+$labels['vacation.subject'] = 'Temat';
+$labels['vacation.body'] = 'TreÅÄ';
+$labels['vacation.start'] = 'PoczÄ
tek nieobecnoÅci';
+$labels['vacation.end'] = 'Koniec nieobecnoÅci';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'wÅÄ
czone';
+$labels['vacation.off'] = 'wyÅÄ
czone';
+$labels['vacation.addresses'] = 'Moje dodatkowe adresy';
+$labels['vacation.interval'] = 'CzÄstotliwoÅÄ odpowiedzi';
+$labels['vacation.after'] = 'UmieÅÄ reguÅÄ odpowiedzi po';
+$labels['vacation.saving'] = 'Zapisywanie danych...';
+$labels['vacation.action'] = 'Akcje wiadomoÅci przychodzÄ
cych';
+$labels['vacation.keep'] = 'Zachowaj';
+$labels['vacation.discard'] = 'OdrzuÄ';
+$labels['vacation.redirect'] = 'Przekaż do';
+$labels['vacation.copy'] = 'WyÅlij kopiÄ do';
+$labels['arialabelfiltersetactions'] = 'Zbiór filtrów akcji';
+$labels['arialabelfilteractions'] = 'Akcje filtrów';
+$labels['arialabelfilterform'] = 'Ustawienia filtrów';
+$labels['ariasummaryfilterslist'] = 'Spis filtrów';
+$labels['ariasummaryfiltersetslist'] = 'Lista zbiorów filtrów';
+$labels['filterstitle'] = 'ZarzÄ
dzaj filtrami wiadomoÅci przychodzÄ
cych';
+$labels['vacationtitle'] = 'ZarzÄ
dzaj asystentem nieobecnoÅci';
$messages['filterunknownerror'] = 'Nieznany bÅÄ
d serwera.';
$messages['filterconnerror'] = 'Nie można nawiÄ
zaÄ poÅÄ
czenia z serwerem.';
$messages['filterdeleteerror'] = 'Nie można usunÄ
Ä filtra. BÅÄ
d serwera.';
@@ -189,4 +218,7 @@ $messages['namereserved'] = 'Nazwa zarezerwowana.';
$messages['setexist'] = 'Zbiór już istnieje.';
$messages['nodata'] = 'Należy wybraÄ co najmniej jednÄ
pozycjÄ!';
$messages['invaliddateformat'] = 'NieprawidÅowy format daty lub fragmentu daty';
+$messages['saveerror'] = 'Nie można zapisaÄ danych. WystÄ
piÅ bÅÄ
d serwera.';
+$messages['vacationsaved'] = 'Dane nieobecnoÅci zapisano pomyÅlnie.';
+$messages['emptyvacationbody'] = 'TreÅÄ wiadomoÅci jest wymagana!';
?>
diff --git a/lib/plugins/managesieve/localization/pt_BR.inc b/lib/plugins/managesieve/localization/pt_BR.inc
index 063c60c..b0ccaf6 100644
--- a/lib/plugins/managesieve/localization/pt_BR.inc
+++ b/lib/plugins/managesieve/localization/pt_BR.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'Destinatário';
$labels['vacationaddr'] = 'Meu endereço de e-mail adicional:';
$labels['vacationdays'] = 'Enviar mensagens com que frequência (em dias):';
$labels['vacationinterval'] = 'Como geralmente enviam mensagens:';
-$labels['days'] = 'dias';
-$labels['seconds'] = 'segundos';
$labels['vacationreason'] = 'Corpo da mensagem (motivo de férias):';
$labels['vacationsubject'] = 'TÃtulo da mensagem:';
+$labels['days'] = 'dias';
+$labels['seconds'] = 'segundos';
$labels['rulestop'] = 'Parar de avaliar regras';
$labels['enable'] = 'Habilitar/Desabilitar';
$labels['filterset'] = 'Conjunto de filtros';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'primeiro caractere maiúsculo';
$labels['varquotewildcard'] = 'caracteres especiais de citação';
$labels['varlength'] = 'tamanho';
$labels['notify'] = 'Enviar notificação';
-$labels['notifyaddress'] = 'Para endereço de e-mail:';
-$labels['notifybody'] = 'Corpo da notificação:';
-$labels['notifysubject'] = 'TÃtulo da notificação:';
-$labels['notifyfrom'] = 'Remetente da notificação:';
+$labels['notifytarget'] = 'Destino da notificação:';
+$labels['notifymessage'] = 'Mensagem de notificação (opcional):';
+$labels['notifyoptions'] = 'Opções de notificação (opcional):';
+$labels['notifyfrom'] = 'Remetente da notificação (opcional):';
$labels['notifyimportance'] = 'Importância';
$labels['notifyimportancelow'] = 'baixa';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Telefone';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Criar filtro';
$labels['usedata'] = 'Usar os seguintes dados no filtro:';
$labels['nextstep'] = 'Próximo Passo';
@@ -157,6 +160,32 @@ $labels['asciicasemap'] = 'caso insensÃvel (mapa de caracteres ascii)';
$labels['asciinumeric'] = 'numérico (ascii-numeric)';
$labels['index'] = 'Ãndice:';
$labels['indexlast'] = 'retroceder';
+$labels['vacation'] = 'Férias';
+$labels['vacation.reply'] = 'Responder mensagem';
+$labels['vacation.advanced'] = 'Opções avançadas';
+$labels['vacation.subject'] = 'Assunto';
+$labels['vacation.body'] = 'Conteúdo';
+$labels['vacation.start'] = 'InÃcio das férias';
+$labels['vacation.end'] = 'Término das férias';
+$labels['vacation.status'] = 'Estado';
+$labels['vacation.on'] = 'Ligado';
+$labels['vacation.off'] = 'Desligado';
+$labels['vacation.addresses'] = 'Meus endereços de e-mail adicionais';
+$labels['vacation.interval'] = 'Intervalo de resposta';
+$labels['vacation.after'] = 'Colocar regra de férias após';
+$labels['vacation.saving'] = 'Salvando dados...';
+$labels['vacation.action'] = 'Ações para mensagens recebidas';
+$labels['vacation.keep'] = 'Manter';
+$labels['vacation.discard'] = 'Descartar';
+$labels['vacation.redirect'] = 'Redirecionar para';
+$labels['vacation.copy'] = 'Enviar cópia para';
+$labels['arialabelfiltersetactions'] = 'Ações do grupo de filtros';
+$labels['arialabelfilteractions'] = 'Ações do filtro';
+$labels['arialabelfilterform'] = 'Propriedades do filtro';
+$labels['ariasummaryfilterslist'] = 'Lista dos filtros';
+$labels['ariasummaryfiltersetslist'] = 'Lista de grupo de filtros';
+$labels['filterstitle'] = 'Editar filtro dos e-mails recebidos';
+$labels['vacationtitle'] = 'Editar regra de ausência';
$messages['filterunknownerror'] = 'Erro desconhecido de servidor';
$messages['filterconnerror'] = 'Não foi possÃvel conectar ao servidor managesieve';
$messages['filterdeleteerror'] = 'ImpossÃvel excluir o filtro. Ocorreu um erro no servidor.';
@@ -189,4 +218,7 @@ $messages['namereserved'] = 'Nome reservado.';
$messages['setexist'] = 'Conjunto já existe.';
$messages['nodata'] = 'Pelo menos uma posição precisa ser selecionada!';
$messages['invaliddateformat'] = 'Data inválida';
+$messages['saveerror'] = 'ImpossÃvel salvar dados. Ocorreu um erro no servidor.';
+$messages['vacationsaved'] = 'Dados de férias salvos com sucesso.';
+$messages['emptyvacationbody'] = 'Conteúdo da mensagem de férias necessário!';
?>
diff --git a/lib/plugins/managesieve/localization/pt_PT.inc b/lib/plugins/managesieve/localization/pt_PT.inc
index 4e93076..ec39542 100644
--- a/lib/plugins/managesieve/localization/pt_PT.inc
+++ b/lib/plugins/managesieve/localization/pt_PT.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'Destinatário';
$labels['vacationaddr'] = 'Os meus endereços de e-mail adicionais:';
$labels['vacationdays'] = 'Enviar mensagens com que frequência (em dias):';
$labels['vacationinterval'] = 'Com que frequência envia mensagens:';
-$labels['days'] = 'dias';
-$labels['seconds'] = 'segundos';
$labels['vacationreason'] = 'Conteúdo da mensagem (motivo da ausência):';
$labels['vacationsubject'] = 'Assunto da mensagem:';
+$labels['days'] = 'dias';
+$labels['seconds'] = 'segundos';
$labels['rulestop'] = 'Parar de avaliar regras';
$labels['enable'] = 'Activar/Desactivar';
$labels['filterset'] = 'Filtros definidos';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'primeira letra em maiúscula';
$labels['varquotewildcard'] = 'citar caracteres especiais';
$labels['varlength'] = 'tamanho';
$labels['notify'] = 'Enviar notificação';
-$labels['notifyaddress'] = 'Endereço de E-mail to:';
-$labels['notifybody'] = 'Corpo de Notificação:';
-$labels['notifysubject'] = 'Assunto Notificação:';
-$labels['notifyfrom'] = 'Remetente Notificação:';
+$labels['notifytarget'] = 'Destino da notificação:';
+$labels['notifymessage'] = 'Mensagem de notificação (opcional):';
+$labels['notifyoptions'] = 'Opções de notificação (opcional):';
+$labels['notifyfrom'] = 'Remetente da notificação (opcional):';
$labels['notifyimportance'] = 'Importância:';
$labels['notifyimportancelow'] = 'baixa';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'alta';
+$labels['notifymethodmailto'] = 'Email';
+$labels['notifymethodtel'] = 'Telefone';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Criar filtro';
$labels['usedata'] = 'Usar os seguintes dados no filtro:';
$labels['nextstep'] = 'Próximo passo';
@@ -157,6 +160,32 @@ $labels['asciicasemap'] = 'não sensÃvel a maiúsculas/minúsculas (caracteres
$labels['asciinumeric'] = 'numérico (numérico ascii)';
$labels['index'] = 'Ãndice:';
$labels['indexlast'] = 'retroceder';
+$labels['vacation'] = 'Férias';
+$labels['vacation.reply'] = 'Mensagem de resposta';
+$labels['vacation.advanced'] = 'Definições avançadas';
+$labels['vacation.subject'] = 'Assunto';
+$labels['vacation.body'] = 'Corpo da mensagem';
+$labels['vacation.start'] = 'InÃcio de férias';
+$labels['vacation.end'] = 'Fim de férias';
+$labels['vacation.status'] = 'Estado';
+$labels['vacation.on'] = 'Ligar';
+$labels['vacation.off'] = 'Desligar';
+$labels['vacation.addresses'] = 'Meus endereços adicionais';
+$labels['vacation.interval'] = 'Intervalo de resposta';
+$labels['vacation.after'] = 'Coloque regra de férias depois';
+$labels['vacation.saving'] = 'A guardar dados...';
+$labels['vacation.action'] = 'Acção para mensagem recebida';
+$labels['vacation.keep'] = 'Manter';
+$labels['vacation.discard'] = 'Rejeitar';
+$labels['vacation.redirect'] = 'Redireccionar para';
+$labels['vacation.copy'] = 'Enviar cópia para';
+$labels['arialabelfiltersetactions'] = 'Acções do conjunto de filtros';
+$labels['arialabelfilteractions'] = 'Acções dos filtros';
+$labels['arialabelfilterform'] = 'Propriedades dos filtro';
+$labels['ariasummaryfilterslist'] = 'Lista de filtros';
+$labels['ariasummaryfiltersetslist'] = 'Lista de conjuntos de filtros';
+$labels['filterstitle'] = 'Editar filtros de mensagens recebidas';
+$labels['vacationtitle'] = 'Editar regra de ausência do escritório';
$messages['filterunknownerror'] = 'Erro de servidor desconhecido';
$messages['filterconnerror'] = 'Não é possÃvel ligar ao servidor Sieve';
$messages['filterdeleteerror'] = 'Não foi possÃvel eliminar o filtro. Ocorreu um erro no servidor.';
@@ -189,4 +218,7 @@ $messages['namereserved'] = 'Nome invertido.';
$messages['setexist'] = 'O conjunto já existe.';
$messages['nodata'] = 'Deve selecionar pelo menos uma posição.';
$messages['invaliddateformat'] = 'Data ou formato de data inválido.';
+$messages['saveerror'] = 'Não foi possÃvel guardar os dados. Ocorreu um erro no servidor.';
+$messages['vacationsaved'] = 'Dados de férias guardados com sucesso.';
+$messages['emptyvacationbody'] = 'à necessário o corpo da mensagem de férias!';
?>
diff --git a/lib/plugins/managesieve/localization/ro_RO.inc b/lib/plugins/managesieve/localization/ro_RO.inc
index 2cddf36..017320e 100644
--- a/lib/plugins/managesieve/localization/ro_RO.inc
+++ b/lib/plugins/managesieve/localization/ro_RO.inc
@@ -54,13 +54,13 @@ $labels['add'] = 'Adauga';
$labels['del'] = 'Sterge';
$labels['sender'] = 'Expeditor';
$labels['recipient'] = 'Destinatar';
-$labels['vacationaddr'] = 'Adrese(le) mele de email suplimentare:';
+$labels['vacationaddr'] = 'Adresele mele de e-mail (adiţionale)';
$labels['vacationdays'] = 'Cat de des sa trimit mesajele (in zile):';
$labels['vacationinterval'] = 'Cât de des sÄ trimit mesaje:';
-$labels['days'] = 'zile';
-$labels['seconds'] = 'secunde';
$labels['vacationreason'] = 'Corpul mesajului (motivul vacantei):';
$labels['vacationsubject'] = 'Subiectul mesajului:';
+$labels['days'] = 'zile';
+$labels['seconds'] = 'secunde';
$labels['rulestop'] = 'Nu mai evalua reguli';
$labels['enable'] = 'Activeaza/Dezactiveaza';
$labels['filterset'] = 'Filtre setate';
@@ -108,10 +108,6 @@ $labels['varupperfirst'] = 'primul caracter cu litre mari';
$labels['varquotewildcard'] = 'caracterele speciale in citat';
$labels['varlength'] = 'lungime';
$labels['notify'] = 'Notificare trimitere';
-$labels['notifyaddress'] = 'La adresa de e-mail';
-$labels['notifybody'] = 'Mesajul de notificare:';
-$labels['notifysubject'] = 'Subiectul notificÄrii:';
-$labels['notifyfrom'] = 'Expeditorul notificÄrii:';
$labels['notifyimportance'] = 'ImportanÈa:';
$labels['notifyimportancelow'] = 'micÄ';
$labels['notifyimportancenormal'] = 'normalÄ';
@@ -157,27 +153,50 @@ $labels['asciicasemap'] = 'ignorÄ majusculele (ascii-casemap)';
$labels['asciinumeric'] = 'numeric (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'invers';
+$labels['vacation'] = 'Vacanta';
+$labels['vacation.reply'] = 'Raspunde mesajului';
+$labels['vacation.advanced'] = 'Setari avansate';
+$labels['vacation.subject'] = 'Subiect';
+$labels['vacation.body'] = 'Corp';
+$labels['vacation.status'] = 'Statut';
+$labels['vacation.on'] = 'Pe';
+$labels['vacation.off'] = 'De pe';
+$labels['vacation.addresses'] = 'Adresa mea aditionala';
+$labels['vacation.interval'] = 'Interval de raspundere';
+$labels['vacation.after'] = 'Pune regula de vacanta dupa';
+$labels['vacation.saving'] = 'Salvez datele...';
$messages['filterunknownerror'] = 'Eroare necunoscutÄ la server:';
$messages['filterconnerror'] = 'Nu mÄ pot conecta la server.';
+$messages['filterdeleteerror'] = 'Nu pot Återge filtrul. S-a produs o eroare la server.';
$messages['filterdeleted'] = 'Filtrul a fost Åters cu succes.';
$messages['filtersaved'] = 'Filtrul a fost salvat cu succes.';
+$messages['filtersaveerror'] = 'Nu am putut salva filtrul. S-a produs o eroare la server.';
$messages['filterdeleteconfirm'] = 'Chiar vrei sÄ Återgi filtrul selectat?';
$messages['ruledeleteconfirm'] = 'EÅti sigur cÄ vrei sÄ Återgi regula selectatÄ?';
$messages['actiondeleteconfirm'] = 'EÅti sigur cÄ vrei sÄ Återgi acÅ£iunea selectatÄ?';
$messages['forbiddenchars'] = 'Caractere nepermise în câmp.';
$messages['cannotbeempty'] = 'Câmpul nu poate fi gol.';
$messages['ruleexist'] = 'Filtrul cu numele specificat existÄ deja.';
+$messages['setactivateerror'] = 'Nu pot activa setul de filtre selectat. S-a produs o eroare la server.';
+$messages['setdeactivateerror'] = 'Nu pot dezactiva setul de filtre selectat. S-a produs o eroare la server.';
+$messages['setdeleteerror'] = 'Nu pot Återge setul de filtre selectat. S-a produs o eroare la server.';
$messages['setactivated'] = 'Setul de filtre activat cu succes.';
$messages['setdeactivated'] = 'Setul de filtre dezactivat cu succes.';
$messages['setdeleted'] = 'Setul de filtre Åters cu succes.';
$messages['setdeleteconfirm'] = 'EÅti sigur(Ä) cÄ vrei sÄ Återgi setul de filtre selectat?';
+$messages['setcreateerror'] = 'Nu am putut crea setul de filtre. S-a produs o eroare la server.';
$messages['setcreated'] = 'Setul de filtre creat cu succes.';
+$messages['activateerror'] = 'Nu am putut activa filtrul (filtrele) selectate. S-a produs o eroare la server.';
+$messages['deactivateerror'] = 'Nu am putut dezactiva filtrele (filtrele) selectate. S-a produs o eroare la server.';
$messages['deactivated'] = 'Filtrele au fost activate cu succes.';
$messages['activated'] = 'Filtrele au fost dezactivate cu succes.';
$messages['moved'] = 'Filtrele au fost mutate cu succes.';
+$messages['moveerror'] = 'Nu am putut muta filtrul selectat. S-a produs o eroare la server.';
$messages['nametoolong'] = 'Numele este prea lung.';
$messages['namereserved'] = 'Nume rezervat.';
$messages['setexist'] = 'Setul existÄ deja.';
$messages['nodata'] = 'Trebuie selectatÄ cel putin o poziÅ£ie!';
$messages['invaliddateformat'] = 'Data sau parte din data in format invalid';
+$messages['saveerror'] = 'Nu am putut salva datele. A aparut o eroare de server.';
+$messages['vacationsaved'] = 'Data de vacanta salvata cu succes';
?>
diff --git a/lib/plugins/managesieve/localization/ru_RU.inc b/lib/plugins/managesieve/localization/ru_RU.inc
index ea0ebd2..6714c4c 100644
--- a/lib/plugins/managesieve/localization/ru_RU.inc
+++ b/lib/plugins/managesieve/localization/ru_RU.inc
@@ -165,9 +165,8 @@ $labels['vacation.reply'] = 'ÐÑвеÑное ÑообÑение';
$labels['vacation.advanced'] = 'ÐополниÑелÑнÑе наÑÑÑойки';
$labels['vacation.subject'] = 'Тема';
$labels['vacation.body'] = 'Тело пиÑÑма';
-$labels['vacation.dates'] = 'ÐÑÐµÐ¼Ñ Ð¾ÑпÑÑка';
-$labels['vacation.from'] = 'ÐÑ:';
-$labels['vacation.to'] = 'ÐомÑ:';
+$labels['vacation.start'] = 'ÐаÑало оÑпÑÑка';
+$labels['vacation.end'] = 'ÐÐ¾Ð½ÐµÑ Ð¾ÑпÑÑка';
$labels['vacation.status'] = 'СоÑÑоÑние';
$labels['vacation.on'] = 'Ðкл.';
$labels['vacation.off'] = 'ÐÑкл.';
diff --git a/lib/plugins/managesieve/localization/sk_SK.inc b/lib/plugins/managesieve/localization/sk_SK.inc
index 9a75586..4cad13f 100644
--- a/lib/plugins/managesieve/localization/sk_SK.inc
+++ b/lib/plugins/managesieve/localization/sk_SK.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'PrÃjemca';
$labels['vacationaddr'] = 'Iná moja e-mailová adresa (adresy):';
$labels['vacationdays'] = 'Ako Äasto odosielaÅ¥ správy (v dÅoch):';
$labels['vacationinterval'] = 'Ako Äasto odosielaÅ¥ správy:';
-$labels['days'] = 'dnÃ';
-$labels['seconds'] = 'sekúnd';
$labels['vacationreason'] = 'Telo správy (dôvod neprÃtomnosti):';
$labels['vacationsubject'] = 'Predmet správy:';
+$labels['days'] = 'dnÃ';
+$labels['seconds'] = 'sekúnd';
$labels['rulestop'] = 'Koniec pravidiel';
$labels['enable'] = 'Zapnúť/vypnúť';
$labels['filterset'] = 'Súprava filtrov';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'prvé pÃsmeno veľké';
$labels['varquotewildcard'] = 'k špeciálnym znakom pridať úvodzovky';
$labels['varlength'] = 'dĺžka';
$labels['notify'] = 'Odoslať oznámenie';
-$labels['notifyaddress'] = 'Na e-mailovú adresu:';
-$labels['notifybody'] = 'Telo oznámenia:';
-$labels['notifysubject'] = 'Predmet oznámenia:';
-$labels['notifyfrom'] = 'Odosielateľ oznámenia:';
+$labels['notifytarget'] = 'Cieľ notifikácie:';
+$labels['notifymessage'] = 'NotifikaÄná správa (voliteľne):';
+$labels['notifyoptions'] = 'Nastavenia notifikácie (voliteľné):';
+$labels['notifyfrom'] = 'Odosielateľ notifikácie (voliteľne):';
$labels['notifyimportance'] = 'Priorita:';
$labels['notifyimportancelow'] = 'nÃzka';
$labels['notifyimportancenormal'] = 'normálna';
$labels['notifyimportancehigh'] = 'vysoká';
+$labels['notifymethodmailto'] = 'E-mail';
+$labels['notifymethodtel'] = 'Telefón';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Vytvoriť filter';
$labels['usedata'] = 'Použiť tieto údaje vo filtri:';
$labels['nextstep'] = 'Äalšà krok';
@@ -157,6 +160,32 @@ $labels['asciicasemap'] = 'nerozliÅ¡uje veľké a malé pÃsmená (ascii tabuľk
$labels['asciinumeric'] = 'numerické (ascii ÄÃsla)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'dozadu';
+$labels['vacation'] = 'Dovolenka';
+$labels['vacation.reply'] = 'OdpoveÄ na správu';
+$labels['vacation.advanced'] = 'PokroÄilé nastavenia';
+$labels['vacation.subject'] = 'Predmet';
+$labels['vacation.body'] = 'Telo';
+$labels['vacation.start'] = 'ZaÄiatok dovolenky';
+$labels['vacation.end'] = 'Koniec dovolenky';
+$labels['vacation.status'] = 'Stav';
+$labels['vacation.on'] = 'Zap.';
+$labels['vacation.off'] = 'Vyp.';
+$labels['vacation.addresses'] = 'Moje ÄalÅ¡ie adresy';
+$labels['vacation.interval'] = 'Interval odpovedania';
+$labels['vacation.after'] = 'Nastaviť pravidlo pre dovolenku po';
+$labels['vacation.saving'] = 'Ukladanie údajov...';
+$labels['vacation.action'] = 'Akcia pre prichádzajúcu správu';
+$labels['vacation.keep'] = 'Zachovať';
+$labels['vacation.discard'] = 'Vyhodiť do koša';
+$labels['vacation.redirect'] = 'Presmerovať na';
+$labels['vacation.copy'] = 'Poslať kópiu na';
+$labels['arialabelfiltersetactions'] = 'Akcie zo súpravy filtrov';
+$labels['arialabelfilteractions'] = 'Akcie filtra';
+$labels['arialabelfilterform'] = 'Nastavenia filtra';
+$labels['ariasummaryfilterslist'] = 'Zoznam filtrov';
+$labels['ariasummaryfiltersetslist'] = 'Zoznam súprav s filtrami';
+$labels['filterstitle'] = 'Upraviť filtre prichádzajúcich e-mailov';
+$labels['vacationtitle'] = 'UpraviÅ¥ pravidlo pre Äas mimo kancelárie';
$messages['filterunknownerror'] = 'Neznáma chyba servera.';
$messages['filterconnerror'] = 'Nepodarilo sa pripojiť k serveru.';
$messages['filterdeleteerror'] = 'Nemožno vymazať filter. Nastala chyba servera.';
@@ -189,4 +218,7 @@ $messages['namereserved'] = 'Rezervovaný názov.';
$messages['setexist'] = 'Súprava už existuje.';
$messages['nodata'] = 'AspoÅ jedna pozÃcia musà byÅ¥ zvolená!';
$messages['invaliddateformat'] = 'Neplatný formát dátumu alebo Äasti dátumu';
+$messages['saveerror'] = 'Ãdaje nemožno uložiÅ¥. Nastala chyba servera.';
+$messages['vacationsaved'] = 'Ãdaje o dovolenke boli úspeÅ¡ne uložené.';
+$messages['emptyvacationbody'] = 'MusÃte zadaÅ¥ telo správy, zobrazovanej v Äase neprÃtomnosti!';
?>
diff --git a/lib/plugins/managesieve/localization/sl_SI.inc b/lib/plugins/managesieve/localization/sl_SI.inc
index 2915684..f0e5159 100644
--- a/lib/plugins/managesieve/localization/sl_SI.inc
+++ b/lib/plugins/managesieve/localization/sl_SI.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'Prejemnik';
$labels['vacationaddr'] = 'Moji dodatni e-naslovi';
$labels['vacationdays'] = 'Kako pogosto naj bodo sporoÄila poslana (v dnevih):';
$labels['vacationinterval'] = 'SporoÄila poÅ¡lji na:';
-$labels['days'] = 'dni';
-$labels['seconds'] = 'sekund';
$labels['vacationreason'] = 'Vsebina sporoÄila (vzrok za odsotnost):';
$labels['vacationsubject'] = 'Zadeva sporoÄila';
+$labels['days'] = 'dni';
+$labels['seconds'] = 'sekund';
$labels['rulestop'] = 'Prekini z izvajanjem pravil';
$labels['enable'] = 'OmogoÄi/OnemogoÄi';
$labels['filterset'] = 'Nastavitev filtrov';
@@ -108,10 +108,6 @@ $labels['varupperfirst'] = 'prvi znak velika zaÄetnica';
$labels['varquotewildcard'] = 'citiraj posebne znake';
$labels['varlength'] = 'dolžina';
$labels['notify'] = 'Poštlji obvestilo';
-$labels['notifyaddress'] = 'Na elektronski naslov:';
-$labels['notifybody'] = 'Telo obvestila:';
-$labels['notifysubject'] = 'Zadeva obvestila:';
-$labels['notifyfrom'] = 'Pošiljatelj obvestila:';
$labels['notifyimportance'] = 'Pomembnost:';
$labels['notifyimportancelow'] = 'nizko';
$labels['notifyimportancenormal'] = 'obiÄajno';
diff --git a/lib/plugins/managesieve/localization/sv_SE.inc b/lib/plugins/managesieve/localization/sv_SE.inc
index 131d46c..ede13cb 100644
--- a/lib/plugins/managesieve/localization/sv_SE.inc
+++ b/lib/plugins/managesieve/localization/sv_SE.inc
@@ -19,7 +19,7 @@ $labels['filters'] = 'Filter';
$labels['managefilters'] = 'Administrera filter';
$labels['filtername'] = 'Filternamn';
$labels['newfilter'] = 'Nytt filter';
-$labels['filteradd'] = 'Lägg till filter';
+$labels['filteradd'] = 'Nytt filter';
$labels['filterdel'] = 'Ta bort filter';
$labels['moveup'] = 'Flytta upp filter';
$labels['movedown'] = 'Flytta ner filter';
@@ -57,15 +57,15 @@ $labels['recipient'] = 'Mottagare';
$labels['vacationaddr'] = 'Ytterligare mottagaradresser:';
$labels['vacationdays'] = 'Antal dagar mellan auto-svar:';
$labels['vacationinterval'] = 'Tid mellan auto-svar:';
+$labels['vacationreason'] = 'Meddelandetext (frånvaroanledning):';
+$labels['vacationsubject'] = 'Meddelandeämne:';
$labels['days'] = 'Dagar';
$labels['seconds'] = 'Sekunder';
-$labels['vacationreason'] = 'Meddelande i auto-svar:';
-$labels['vacationsubject'] = 'Meddelandeämne:';
$labels['rulestop'] = 'Avsluta filtrering';
$labels['enable'] = 'Aktivera/deaktivera';
$labels['filterset'] = 'Filtergrupp';
$labels['filtersets'] = 'Filtergrupper';
-$labels['filtersetadd'] = 'Lägg till filtergrupp';
+$labels['filtersetadd'] = 'Ny filtergrupp';
$labels['filtersetdel'] = 'Ta bort filtergrupp';
$labels['filtersetact'] = 'Aktivera filtergrupp';
$labels['filtersetdeact'] = 'Deaktivera filtergrupp';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'Första tecken versalt';
$labels['varquotewildcard'] = 'Koda specialtecken';
$labels['varlength'] = 'Längd';
$labels['notify'] = 'Skicka avisering';
-$labels['notifyaddress'] = 'Mottagaradress:';
-$labels['notifybody'] = 'Aviseringsmeddelande:';
-$labels['notifysubject'] = 'Aviseringsämne:';
-$labels['notifyfrom'] = 'Aviseringsavsändare:';
+$labels['notifytarget'] = 'Aviseringsmål:';
+$labels['notifymessage'] = 'Aviseringsmeddelande (valfritt):';
+$labels['notifyoptions'] = 'Aviseringstillval (valfritt):';
+$labels['notifyfrom'] = 'Aviseringsavsändare (valfri):';
$labels['notifyimportance'] = 'Prioritet:';
$labels['notifyimportancelow'] = 'LÃ¥g';
$labels['notifyimportancenormal'] = 'Normal';
$labels['notifyimportancehigh'] = 'Hög';
+$labels['notifymethodmailto'] = 'E-post';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Skapa filter';
$labels['usedata'] = 'Använd följande information i filtret:';
$labels['nextstep'] = 'Nästa steg';
@@ -157,6 +160,32 @@ $labels['asciicasemap'] = 'teckenlägesokänslig (ascii-casemap)';
$labels['asciinumeric'] = 'numerisk (ascii-numeric)';
$labels['index'] = 'index:';
$labels['indexlast'] = 'omvänd';
+$labels['vacation'] = 'Frånvaro';
+$labels['vacation.reply'] = 'Besvara meddelande';
+$labels['vacation.advanced'] = 'Avancerade inställningar';
+$labels['vacation.subject'] = 'Ãmne';
+$labels['vacation.body'] = 'Innehåll';
+$labels['vacation.start'] = 'Frånvaron börjar';
+$labels['vacation.end'] = 'Frånvaron slutar';
+$labels['vacation.status'] = 'Status';
+$labels['vacation.on'] = 'PÃ¥';
+$labels['vacation.off'] = 'Av';
+$labels['vacation.addresses'] = 'Ytterligare mottagaradresser';
+$labels['vacation.interval'] = 'Svarsintervall';
+$labels['vacation.after'] = 'Placera frånvaroregel efter';
+$labels['vacation.saving'] = 'Sparar data...';
+$labels['vacation.action'] = 'Hantering av inkommande meddelanden';
+$labels['vacation.keep'] = 'Behåll';
+$labels['vacation.discard'] = 'Förkasta';
+$labels['vacation.redirect'] = 'Ãndra mottagare till';
+$labels['vacation.copy'] = 'Skicka kopia till';
+$labels['arialabelfiltersetactions'] = 'Hantera filtergrupper';
+$labels['arialabelfilteractions'] = 'Hantera filter';
+$labels['arialabelfilterform'] = 'Filteregenskaper';
+$labels['ariasummaryfilterslist'] = 'Lista med filter';
+$labels['ariasummaryfiltersetslist'] = 'Lista med filtergrupper';
+$labels['filterstitle'] = 'Ãndra filter för inkommande meddelanden';
+$labels['vacationtitle'] = 'Ãndra regel för frÃ¥nvaromeddelande';
$messages['filterunknownerror'] = 'Okänt serverfel';
$messages['filterconnerror'] = 'Anslutning till serverns filtertjänst misslyckades';
$messages['filterdeleteerror'] = 'Filtret kunde inte tas bort på grund av serverfel';
@@ -189,4 +218,7 @@ $messages['namereserved'] = 'Reserverat namn.';
$messages['setexist'] = 'Filtergrupp finns redan.';
$messages['nodata'] = 'Minst en position måste väljas!';
$messages['invaliddateformat'] = 'Ogiltigt datum eller del av datumformat';
+$messages['saveerror'] = 'Datan kunde inte sparas på grund av serverfel.';
+$messages['vacationsaved'] = 'Frånvarodatan har sparats.';
+$messages['emptyvacationbody'] = 'Text för frånvaromeddelande saknas!';
?>
diff --git a/lib/plugins/managesieve/localization/tr_TR.inc b/lib/plugins/managesieve/localization/tr_TR.inc
index b0b09e1..c618386 100644
--- a/lib/plugins/managesieve/localization/tr_TR.inc
+++ b/lib/plugins/managesieve/localization/tr_TR.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'Alıcı';
$labels['vacationaddr'] = 'Ek e-posta adres(ler)im:';
$labels['vacationdays'] = 'Ne sıklıkla mesajlar gönderilir(gün)';
$labels['vacationinterval'] = 'Ne kadar sıklıkla mesaj gönderirsiniz:';
-$labels['days'] = 'günler';
-$labels['seconds'] = 'saniyeler';
$labels['vacationreason'] = 'Mesaj gövdesi(tatil sebebi):';
$labels['vacationsubject'] = 'Mesaj konusu:';
+$labels['days'] = 'günler';
+$labels['seconds'] = 'saniyeler';
$labels['rulestop'] = 'Kuralları deÄerlendirmeyi bitir';
$labels['enable'] = 'EtkinleÅtir/Etkisiz Kıl';
$labels['filterset'] = 'Filtre seti';
@@ -98,7 +98,7 @@ $labels['flaganswered'] = 'CevaplanmıÅ';
$labels['flagflagged'] = 'İÅaretli';
$labels['flagdraft'] = 'Taslak';
$labels['setvariable'] = 'DeÄiÅken tanımla';
-$labels['setvarname'] = 'DeÄiÅken adı';
+$labels['setvarname'] = 'DeÄiÅken adı:';
$labels['setvarvalue'] = 'DeÄiÅken deÄeri:';
$labels['setvarmodifiers'] = 'DeÄiÅtiriciler:';
$labels['varlower'] = 'küçük harf';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'İlk karakter büyük harf';
$labels['varquotewildcard'] = 'özel karakterleri tırnak içine al';
$labels['varlength'] = 'uzunluk';
$labels['notify'] = 'Bildirim gönder';
-$labels['notifyaddress'] = 'Alıcı e-posta adresi';
-$labels['notifybody'] = 'Bildirim gövdesi:';
-$labels['notifysubject'] = 'Bildirim konusu:';
-$labels['notifyfrom'] = 'Bildirim göndericisi:';
-$labels['notifyimportance'] = 'Ãnem derecesi';
+$labels['notifytarget'] = 'Bildirim hedefi:';
+$labels['notifymessage'] = 'Bildirim mesajı (tercihe baÄlı):';
+$labels['notifyoptions'] = 'Bildirim tercihleri (tercihe baÄlı):';
+$labels['notifyfrom'] = 'Bildirim göndericisi (tercihe baÄlı):';
+$labels['notifyimportance'] = 'Ãnem derecesi:';
$labels['notifyimportancelow'] = 'düÅük';
$labels['notifyimportancenormal'] = 'normal';
$labels['notifyimportancehigh'] = 'yüksek';
+$labels['notifymethodmailto'] = 'E-posta';
+$labels['notifymethodtel'] = 'Telefon';
+$labels['notifymethodsms'] = 'SMS';
$labels['filtercreate'] = 'Süzgeç oluÅtur';
$labels['usedata'] = 'AÅaÄıdaki verileri süzgeçte kullan';
$labels['nextstep'] = 'Sonraki adım';
@@ -157,11 +160,37 @@ $labels['asciicasemap'] = 'büyük küçük harf duyarsız(ascii-casemap)';
$labels['asciinumeric'] = 'sayı (ascii-numeric)';
$labels['index'] = 'indeks:';
$labels['indexlast'] = 'geriye yönelik';
+$labels['vacation'] = 'Tatil';
+$labels['vacation.reply'] = 'Cevap mesajı';
+$labels['vacation.advanced'] = 'GeliÅmiÅ seçenekler';
+$labels['vacation.subject'] = 'Konu';
+$labels['vacation.body'] = 'Gövde';
+$labels['vacation.start'] = 'Tatil baÅlangıcı';
+$labels['vacation.end'] = 'Tatil bitiÅi';
+$labels['vacation.status'] = 'Durum';
+$labels['vacation.on'] = 'Etkin';
+$labels['vacation.off'] = 'Devre dıÅı';
+$labels['vacation.addresses'] = 'Ek adresler';
+$labels['vacation.interval'] = 'Cevap aralıÄı';
+$labels['vacation.after'] = 'Åundan sonra tatil kuralı koy';
+$labels['vacation.saving'] = 'Veri kaydediliyor...';
+$labels['vacation.action'] = 'Gelen mesaj aksiyonu';
+$labels['vacation.keep'] = 'Koru';
+$labels['vacation.discard'] = 'Yoksay';
+$labels['vacation.redirect'] = 'Åuraya yönlendir';
+$labels['vacation.copy'] = 'Åuraya kopya gönder';
+$labels['arialabelfiltersetactions'] = 'Filtre seti aksiyonları';
+$labels['arialabelfilteractions'] = 'Filtre aksiyonları';
+$labels['arialabelfilterform'] = 'Filtre özellikleri';
+$labels['ariasummaryfilterslist'] = 'Filtre listesi';
+$labels['ariasummaryfiltersetslist'] = 'Filtre seti listesi';
+$labels['filterstitle'] = 'Gelen e-posta filtrelerini düzenle';
+$labels['vacationtitle'] = 'Ofis dıÅında kuralını düzenle';
$messages['filterunknownerror'] = 'Bilinmeyen sunucu hatası.';
$messages['filterconnerror'] = 'Sunucuya baÄlanamıyor.';
$messages['filterdeleteerror'] = 'Filtre silinemedi. Sunucuda hata oluÅtu.';
$messages['filterdeleted'] = 'Filtre baÅarıyla silindi.';
-$messages['filtersaved'] = 'Filter baÅarıyla kaydedildi.';
+$messages['filtersaved'] = 'Filtre baÅarıyla kaydedildi.';
$messages['filtersaveerror'] = 'Filtre kaydedilemedi. Sunucuda hata oluÅtu.';
$messages['filterdeleteconfirm'] = 'Seçilen filtreleri gerçekten silmek istiyor musun?';
$messages['ruledeleteconfirm'] = 'Seçili kuralları silmek istediÄinizden emin misiniz?';
@@ -189,4 +218,7 @@ $messages['namereserved'] = 'rezerve edilmiÅ isim.';
$messages['setexist'] = 'Set zaten var.';
$messages['nodata'] = 'En az bir pozisyon seçilmelidir.';
$messages['invaliddateformat'] = 'geçersiz tarih veya tarih biçimi';
+$messages['saveerror'] = 'Veri kaydedilemedi. Sunucuda hata oluÅtu.';
+$messages['vacationsaved'] = 'Tatil verisi baÅarıyla kaydedildi.';
+$messages['emptyvacationbody'] = 'Tatil mesajı metni gerekmektedir.';
?>
diff --git a/lib/plugins/managesieve/localization/uk_UA.inc b/lib/plugins/managesieve/localization/uk_UA.inc
index d85b03b..fce7867 100644
--- a/lib/plugins/managesieve/localization/uk_UA.inc
+++ b/lib/plugins/managesieve/localization/uk_UA.inc
@@ -52,10 +52,10 @@ $labels['sender'] = 'ÐÑдпÑавник';
$labels['recipient'] = 'ÐÑÑимÑваÑ';
$labels['vacationaddr'] = 'ÐодаÑкова адÑеÑа(и):';
$labels['vacationdays'] = 'Як ÑаÑÑо повÑоÑÑваÑи (Ñ Ð´Ð½ÑÑ
):';
-$labels['days'] = 'днÑв';
-$labels['seconds'] = 'ÑекÑнд';
$labels['vacationreason'] = 'ТекÑÑ Ð¿Ð¾Ð²ÑдомленнÑ:';
$labels['vacationsubject'] = 'Тема лиÑÑа:';
+$labels['days'] = 'днÑв';
+$labels['seconds'] = 'ÑекÑнд';
$labels['rulestop'] = 'ÐÑпиниÑи пеÑевÑÑÐºÑ Ð¿Ñавил';
$labels['enable'] = 'УвÑмкнÑÑи/ÐимкнÑни';
$labels['filterset'] = 'ÐабÑÑ ÑÑлÑÑÑÑв';
@@ -93,10 +93,6 @@ $labels['varlowerfirst'] = 'пеÑÑий Ñимвол в нижнÑÐ¾Ð¼Ñ Ñег
$labels['varupperfirst'] = 'пеÑÑий Ñимвол в веÑÑ
нÑÐ¾Ð¼Ñ ÑегÑÑÑÑÑ';
$labels['varlength'] = 'довжина';
$labels['notify'] = 'ÐадÑилаÑи ÑповÑÑеннÑ';
-$labels['notifyaddress'] = 'Ðа елекÑÑÐ¾Ð½Ð½Ñ Ð°Ð´ÑеÑÑ:';
-$labels['notifybody'] = 'ТÑло ÑповÑÑеннÑ:';
-$labels['notifysubject'] = 'Тема ÑповÑÑеннÑ:';
-$labels['notifyfrom'] = 'ÐÑдпÑавник ÑповÑÑеннÑ:';
$labels['filtercreate'] = 'СÑвоÑиÑи ÑÑлÑÑÑ';
$labels['nextstep'] = 'ÐаÑÑÑпний кÑок';
$labels['...'] = '...';
diff --git a/lib/plugins/managesieve/localization/vi_VN.inc b/lib/plugins/managesieve/localization/vi_VN.inc
index c791381..d22ff7e 100644
--- a/lib/plugins/managesieve/localization/vi_VN.inc
+++ b/lib/plugins/managesieve/localization/vi_VN.inc
@@ -57,10 +57,10 @@ $labels['recipient'] = 'Ngưá»i nháºn';
$labels['vacationaddr'] = '(Các) Äá»a chá» email bá» sung cá»§a tôi:';
$labels['vacationdays'] = 'Sá» lần gá»i thư (trong ngà y)';
$labels['vacationinterval'] = 'Tần suất gá»i thư:';
-$labels['days'] = 'ngà y';
-$labels['seconds'] = 'giây';
$labels['vacationreason'] = 'Ná»i dung chÃnh';
$labels['vacationsubject'] = 'Tiêu Äá» thư';
+$labels['days'] = 'ngà y';
+$labels['seconds'] = 'giây';
$labels['rulestop'] = 'Ngừng Äánh giá qui luáºt';
$labels['enable'] = 'KÃch hoạt/Không kÃch hoạt';
$labels['filterset'] = 'Äặt các bá» lá»c';
@@ -108,14 +108,17 @@ $labels['varupperfirst'] = 'chữ cái Äầu viết hoa';
$labels['varquotewildcard'] = 'trÃch dẫn ký tá»± Äặc biá»t';
$labels['varlength'] = 'Äá» dà i';
$labels['notify'] = 'Gá»i thông báo';
-$labels['notifyaddress'] = 'Gá»i Äến Äá»a chá» email:';
-$labels['notifybody'] = 'Ná»i dung thông báo:';
-$labels['notifysubject'] = 'Tiêu Äá» thông báo:';
-$labels['notifyfrom'] = 'Ngưá»i gá»i thông báo:';
+$labels['notifytarget'] = 'Mục tiêu thông báo:';
+$labels['notifymessage'] = 'Ná»i dung thông báo (tuỳ chá»n):';
+$labels['notifyoptions'] = 'Lá»±a chá»n thông báo (tuỳ chá»n):';
+$labels['notifyfrom'] = 'Ngưá»i gá»i thông báo (tuỳ chá»n):';
$labels['notifyimportance'] = 'Mức Äá» quan trá»ng:';
$labels['notifyimportancelow'] = 'thấp';
$labels['notifyimportancenormal'] = 'vừa phải';
$labels['notifyimportancehigh'] = 'cao';
+$labels['notifymethodmailto'] = 'Thư Äiá»n tá»';
+$labels['notifymethodtel'] = 'Äiá»n thoại';
+$labels['notifymethodsms'] = 'Tin nhắn';
$labels['filtercreate'] = 'Tạo bá» lá»c';
$labels['usedata'] = 'Dùng dữ liá»u trong bá» lá»c sau:';
$labels['nextstep'] = 'Bưá»c tiếp theo';
@@ -157,6 +160,18 @@ $labels['asciicasemap'] = 'Không phân biá»t chữ hoa chữ thưá»ng';
$labels['asciinumeric'] = 'Bảng mã ASCII';
$labels['index'] = 'chỠmục:';
$labels['indexlast'] = 'ngược';
+$labels['vacation'] = 'Thiết láºp tá»± Äá»ng trả lá»i trong kỳ nghá»';
+$labels['vacation.reply'] = 'Trả lá»i thư';
+$labels['vacation.advanced'] = 'Tùy chá»n tÃnh nÄng cao hÆ¡n';
+$labels['vacation.subject'] = 'Tiêu Äá»';
+$labels['vacation.body'] = 'Ná»i dung thư';
+$labels['vacation.status'] = 'Trạng thái';
+$labels['vacation.on'] = 'Báºt';
+$labels['vacation.off'] = 'Tắt';
+$labels['vacation.addresses'] = 'Các Äá»a chá» bá» sung cá»§a tôi';
+$labels['vacation.interval'] = 'Khoảng thá»i gian trả lá»i';
+$labels['vacation.after'] = 'Äặt quy Äá»nh kỳ nghá» sau';
+$labels['vacation.saving'] = 'Lưu lại dữ liá»u...';
$messages['filterunknownerror'] = 'Không tìm ÄÆ°á»£c lá»i máy chá»§';
$messages['filterconnerror'] = 'Không kết ná»i ÄÆ°á»£c vá»i máy chá»§.';
$messages['filterdeleteerror'] = 'Không thá» xóa bá» lá»c. Xuất hiá»n lá»i á» máy chá»§';
@@ -189,4 +204,6 @@ $messages['namereserved'] = 'Tên Äã ÄÆ°á»£c bảo vá»';
$messages['setexist'] = 'Thiết láºp Äã tá»n tại';
$messages['nodata'] = 'Ãt nhất má»t vá» trà phải ÄÆ°á»£c chá»n';
$messages['invaliddateformat'] = 'Lá»i không Äúng cú pháp ngà y hoặc nháºp ngà y sai';
+$messages['saveerror'] = 'Không thá» lưu trữ dữ liá»u. Xuất hiá»n lá»i á» máy chá»§.';
+$messages['vacationsaved'] = 'Thiết láºp kỳ nghá» Äã ÄÆ°á»£c lưu lại thà nh công.';
?>
diff --git a/lib/plugins/managesieve/localization/zh_CN.inc b/lib/plugins/managesieve/localization/zh_CN.inc
index 5c38cfe..a39b312 100644
--- a/lib/plugins/managesieve/localization/zh_CN.inc
+++ b/lib/plugins/managesieve/localization/zh_CN.inc
@@ -55,10 +55,10 @@ $labels['sender'] = 'å件人';
$labels['recipient'] = 'æ¶ä»¶äºº';
$labels['vacationdays'] = 'åéé®ä»¶é¢ç(åä½ï¼å¤©):';
$labels['vacationinterval'] = 'åéé®ä»¶é¢ç:';
-$labels['days'] = '天';
-$labels['seconds'] = 'ç§';
$labels['vacationreason'] = 'é®ä»¶æ£æ(åæåå )';
$labels['vacationsubject'] = 'é®ä»¶ä¸»é¢';
+$labels['days'] = '天';
+$labels['seconds'] = 'ç§';
$labels['rulestop'] = '忢è¯ä»·è§å';
$labels['enable'] = 'å¯ç¨/ç¦ç¨';
$labels['filterset'] = 'è¿æ»¤å¨è®¾ç½®';
@@ -104,10 +104,6 @@ $labels['varupperfirst'] = 'é¦åæ¯å¤§å';
$labels['varquotewildcard'] = 'å¼ç¨ç¹æ®å符';
$labels['varlength'] = 'é¿åº¦';
$labels['notify'] = 'åééç¥';
-$labels['notifyaddress'] = 'æ¶ä»¶å°åï¼';
-$labels['notifybody'] = 'éç¥æ£æï¼';
-$labels['notifysubject'] = 'éç¥ä¸»é¢';
-$labels['notifyfrom'] = 'éç¥çåé人ï¼';
$labels['notifyimportance'] = 'ä¼å
级ï¼';
$labels['notifyimportancelow'] = 'ä½';
$labels['notifyimportancenormal'] = 'ä¸';
diff --git a/lib/plugins/managesieve/managesieve.js b/lib/plugins/managesieve/managesieve.js
index cd0d5f3..4d60833 100644
--- a/lib/plugins/managesieve/managesieve.js
+++ b/lib/plugins/managesieve/managesieve.js
@@ -736,6 +736,9 @@ function smart_field_init(field)
if (field.attr('disabled'))
area.hide();
+ // disable the original field anyway, we don't want it in POST
+ else
+ field.prop('disabled', true);
field.after(area);
@@ -930,7 +933,7 @@ function sieve_form_init()
rcube_webmail.prototype.managesieve_create = function(force)
{
- if (!force && this.env.action != 'show' && !$('#'+this.env.contentframe).is(':visible')) {
+ if (!force && this.env.action != 'show') {
var uid = this.message_list.get_single_selection(),
lock = this.set_busy(true, 'loading');
diff --git a/lib/plugins/managesieve/managesieve.php b/lib/plugins/managesieve/managesieve.php
index 478f26b..f41394e 100644
--- a/lib/plugins/managesieve/managesieve.php
+++ b/lib/plugins/managesieve/managesieve.php
@@ -51,7 +51,9 @@ class managesieve extends rcube_plugin
}
else if ($this->rc->task == 'mail') {
// register message hook
- $this->add_hook('message_headers_output', array($this, 'mail_headers'));
+ if ($this->rc->action == 'show') {
+ $this->add_hook('message_headers_output', array($this, 'mail_headers'));
+ }
// inject Create Filter popup stuff
if (empty($this->rc->action) || $this->rc->action == 'show'
@@ -83,14 +85,10 @@ class managesieve extends rcube_plugin
// include styles
$skin_path = $this->local_skin_path();
if ($this->rc->task == 'settings' || $sieve_action) {
- if (is_file($this->home . "/$skin_path/managesieve.css")) {
- $this->include_stylesheet("$skin_path/managesieve.css");
- }
+ $this->include_stylesheet("$skin_path/managesieve.css");
}
else {
- if (is_file($this->home . "/$skin_path/managesieve_mail.css")) {
- $this->include_stylesheet("$skin_path/managesieve_mail.css");
- }
+ $this->include_stylesheet("$skin_path/managesieve_mail.css");
}
$this->ui_initialized = true;
@@ -192,9 +190,10 @@ class managesieve extends rcube_plugin
function managesieve_actions()
{
// handle fetching email headers for the new filter form
- if ($uid = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_GPC)) {
- $mailbox = $this->rc->get_storage()->get_folder();
- $message = new rcube_message($uid, $mailbox);
+ if ($uid = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST)) {
+ $uids = rcmail::get_uids();
+ $mailbox = key($uids);
+ $message = new rcube_message($uids[$mailbox][0], $mailbox);
$headers = $this->parse_headers($message->headers);
$this->rc->output->set_env('sieve_headers', $headers);
diff --git a/lib/plugins/managesieve/package.xml b/lib/plugins/managesieve/package.xml
deleted file mode 100644
index f4c4bb9..0000000
--- a/lib/plugins/managesieve/package.xml
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<package 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" packagerversion="1.9.0" version="2.0" 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>managesieve</name>
- <channel>pear.roundcube.net</channel>
- <summary>Sieve filters manager for Roundcube</summary>
- <description>
- Adds a possibility to manage Sieve scripts (incoming mail filters).
- It's clickable interface which operates on text scripts and communicates
- with server using managesieve protocol. Adds Filters tab in Settings.
- </description>
- <lead>
- <name>Aleksander Machniak</name>
- <user>alec</user>
- <email>alec at alec.pl</email>
- <active>yes</active>
- </lead>
- <date>2014-02-14</date>
- <version>
- <release>7.2</release>
- <api>7.0</api>
- </version>
- <stability>
- <release>stable</release>
- <api>stable</api>
- </stability>
- <license uri="http://www.gnu.org/licenses/gpl.html">GNU GPLv3+</license>
- <notes>-</notes>
- <contents>
- <dir baseinstalldir="/" name="/">
- <file name="managesieve.php" role="php">
- <tasks:replace from="@name@" to="name" type="package-info"/>
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="managesieve.js" role="data">
- <tasks:replace from="@name@" to="name" type="package-info"/>
- <tasks:replace from="@package_version@" to="version" type="package-info"/>
- </file>
- <file name="lib/Roundcube/rcube_sieve.php" role="php"></file>
- <file name="lib/Roundcube/rcube_sieve_engine.php" role="php"></file>
- <file name="lib/Roundcube/rcube_sieve_script.php" role="php"></file>
- <file name="lib/Net/Sieve.php" role="php"></file>
- <file name="localization/be_BE.inc" role="data"></file>
- <file name="localization/bg_BG.inc" role="data"></file>
- <file name="localization/bs_BA.inc" role="data"></file>
- <file name="localization/ca_ES_BA.inc" role="data"></file>
- <file name="localization/cs_CZ.inc" role="data"></file>
- <file name="localization/cy_GB.inc" role="data"></file>
- <file name="localization/da_DK.inc" role="data"></file>
- <file name="localization/de_CH.inc" role="data"></file>
- <file name="localization/de_DE.inc" role="data"></file>
- <file name="localization/el_GR.inc" role="data"></file>
- <file name="localization/en_GB.inc" role="data"></file>
- <file name="localization/en_US.inc" role="data"></file>
- <file name="localization/eo.inc" role="data"></file>
- <file name="localization/es_AR.inc" role="data"></file>
- <file name="localization/es_ES.inc" role="data"></file>
- <file name="localization/et_EE.inc" role="data"></file>
- <file name="localization/fa_IR.inc" role="data"></file>
- <file name="localization/fi_FI.inc" role="data"></file>
- <file name="localization/fr_FR.inc" role="data"></file>
- <file name="localization/gl_ES.inc" role="data"></file>
- <file name="localization/he_IL.inc" role="data"></file>
- <file name="localization/hr_HR.inc" role="data"></file>
- <file name="localization/hu_HU.inc" role="data"></file>
- <file name="localization/ia_IA.inc" role="data"></file>
- <file name="localization/id_ID.inc" role="data"></file>
- <file name="localization/it_IT.inc" role="data"></file>
- <file name="localization/ja_JP.inc" role="data"></file>
- <file name="localization/lt_LT.inc" role="data"></file>
- <file name="localization/lv_LV.inc" role="data"></file>
- <file name="localization/ml_ML.inc" role="data"></file>
- <file name="localization/mr_IN.inc" role="data"></file>
- <file name="localization/nb_NO.inc" role="data"></file>
- <file name="localization/nl_NL.inc" role="data"></file>
- <file name="localization/pl_PL.inc" role="data"></file>
- <file name="localization/pt_BR.inc" role="data"></file>
- <file name="localization/pt_PT.inc" role="data"></file>
- <file name="localization/ro_RO.inc" role="data"></file>
- <file name="localization/ru_RU.inc" role="data"></file>
- <file name="localization/si_LK.inc" role="data"></file>
- <file name="localization/sk_SK.inc" role="data"></file>
- <file name="localization/sl_SI.inc" role="data"></file>
- <file name="localization/sv_SE.inc" role="data"></file>
- <file name="localization/tr_TR.inc" role="data"></file>
- <file name="localization/uk_UA.inc" role="data"></file>
- <file name="localization/vi_VN.inc" role="data"></file>
- <file name="localization/zh_CN.inc" role="data"></file>
- <file name="localization/zh_TW.inc" role="data"></file>
- <file name="skins/classic/managesieve.css" role="data"></file>
- <file name="skins/classic/managesieve_mail.css" role="data"></file>
- <file name="skins/classic/templates/filteredit.html" role="data"></file>
- <file name="skins/classic/templates/managesieve.html" role="data"></file>
- <file name="skins/classic/templates/setedit.html" role="data"></file>
- <file name="skins/classic/images/add.png" role="data"></file>
- <file name="skins/classic/images/del.png" role="data"></file>
- <file name="skins/classic/images/down_small.gif" role="data"></file>
- <file name="skins/classic/images/erase.png" role="data"></file>
- <file name="skins/classic/images/filter.png" role="data"></file>
- <file name="skins/classic/images/up_small.gif" role="data"></file>
- <file name="skins/larry/managesieve.css" role="data"></file>
- <file name="skins/larry/managesieve_mail.css" role="data"></file>
- <file name="skins/larry/templates/filteredit.html" role="data"></file>
- <file name="skins/larry/templates/managesieve.html" role="data"></file>
- <file name="skins/larry/templates/setedit.html" role="data"></file>
- <file name="skins/larry/images/add.png" role="data"></file>
- <file name="skins/larry/images/del.png" role="data"></file>
- <file name="skins/larry/images/down_small.gif" role="data"></file>
- <file name="skins/larry/images/erase.png" role="data"></file>
- <file name="skins/larry/images/up_small.gif" role="data"></file>
- <file name="config.inc.php.dist" role="data"></file>
- </dir>
- <!-- / -->
- </contents>
- <dependencies>
- <required>
- <php>
- <min>5.2.1</min>
- </php>
- <pearinstaller>
- <min>1.7.0</min>
- </pearinstaller>
- </required>
- </dependencies>
- <phprelease/>
-</package>
diff --git a/lib/plugins/managesieve/skins/larry/managesieve.css b/lib/plugins/managesieve/skins/larry/managesieve.css
index 61d1c89..47e992c 100644
--- a/lib/plugins/managesieve/skins/larry/managesieve.css
+++ b/lib/plugins/managesieve/skins/larry/managesieve.css
@@ -309,19 +309,10 @@ a.button.disabled
max-width: 280px;
}
-html.mozilla #filter-form select
-{
- padding-top: 3px;
- padding-bottom: 3px;
-}
-
/* revert larry style button */
#filter-form input.button
{
- padding-bottom: 2px;
- padding-left: 5px;
- padding-right: 5px;
- padding-top: 2px;
+ padding: inherit;
}
fieldset
diff --git a/lib/plugins/managesieve/tests/Managesieve.php b/lib/plugins/managesieve/tests/Managesieve.php
index d802f56..6e930b8 100644
--- a/lib/plugins/managesieve/tests/Managesieve.php
+++ b/lib/plugins/managesieve/tests/Managesieve.php
@@ -5,7 +5,7 @@ class Managesieve_Plugin extends PHPUnit_Framework_TestCase
function setUp()
{
- include_once dirname(__FILE__) . '/../managesieve.php';
+ include_once __DIR__ . '/../managesieve.php';
}
/**
diff --git a/lib/plugins/managesieve/tests/Parser.php b/lib/plugins/managesieve/tests/Parser.php
index 9050f09..33edce0 100644
--- a/lib/plugins/managesieve/tests/Parser.php
+++ b/lib/plugins/managesieve/tests/Parser.php
@@ -5,7 +5,7 @@ class Parser extends PHPUnit_Framework_TestCase
function setUp()
{
- include_once dirname(__FILE__) . '/../lib/Roundcube/rcube_sieve_script.php';
+ include_once __DIR__ . '/../lib/Roundcube/rcube_sieve_script.php';
}
/**
@@ -34,7 +34,7 @@ class Parser extends PHPUnit_Framework_TestCase
*/
function data_parser()
{
- $dir_path = realpath(dirname(__FILE__) . '/src');
+ $dir_path = realpath(__DIR__ . '/src');
$dir = opendir($dir_path);
$result = array();
diff --git a/lib/plugins/managesieve/tests/Tokenizer.php b/lib/plugins/managesieve/tests/Tokenizer.php
index e71bae0..f50ed75 100644
--- a/lib/plugins/managesieve/tests/Tokenizer.php
+++ b/lib/plugins/managesieve/tests/Tokenizer.php
@@ -5,7 +5,7 @@ class Tokenizer extends PHPUnit_Framework_TestCase
function setUp()
{
- include_once dirname(__FILE__) . '/../lib/Roundcube/rcube_sieve_script.php';
+ include_once __DIR__ . '/../lib/Roundcube/rcube_sieve_script.php';
}
function data_tokenizer()
diff --git a/lib/plugins/managesieve/tests/Vacation.php b/lib/plugins/managesieve/tests/Vacation.php
index e34eb7a..942525c 100644
--- a/lib/plugins/managesieve/tests/Vacation.php
+++ b/lib/plugins/managesieve/tests/Vacation.php
@@ -5,8 +5,8 @@ class Managesieve_Vacation extends PHPUnit_Framework_TestCase
function setUp()
{
- include_once dirname(__FILE__) . '/../lib/Roundcube/rcube_sieve_engine.php';
- include_once dirname(__FILE__) . '/../lib/Roundcube/rcube_sieve_vacation.php';
+ include_once __DIR__ . '/../lib/Roundcube/rcube_sieve_engine.php';
+ include_once __DIR__ . '/../lib/Roundcube/rcube_sieve_vacation.php';
}
/**
More information about the commits
mailing list