From b0d8f6cd469bb3beb05ad899fb1e172a53151803 Mon Sep 17 00:00:00 2001 From: carazzim0 Date: Thu, 16 Feb 2017 19:55:04 +0100 Subject: [PATCH 01/59] add static address for nginx --- docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yml b/docker-compose.yml index 34b917f6..26c78fdf 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -222,6 +222,7 @@ services: restart: always networks: mailcow-network: + ipv4_address: 172.22.1.251 aliases: - nginx From d295435cad0381f08fe92ced9589ad9a5bfe253d Mon Sep 17 00:00:00 2001 From: carazzim0 Date: Thu, 16 Feb 2017 19:55:07 +0100 Subject: [PATCH 02/59] use ip address instead of alias name --- data/conf/rspamd/lua/rspamd.local.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/conf/rspamd/lua/rspamd.local.lua b/data/conf/rspamd/lua/rspamd.local.lua index 0d74e9d0..341046d4 100644 --- a/data/conf/rspamd/lua/rspamd.local.lua +++ b/data/conf/rspamd/lua/rspamd.local.lua @@ -12,13 +12,13 @@ rspamd_config.MAILCOW_MOO = function (task) end local modify_subject_map = rspamd_config:add_map({ - url = 'http://nginx:8081/tags.php', + url = 'http://172.22.1.251:8081/tags.php', type = 'map', description = 'Map of users to use subject tags for' }) local auth_domain_map = rspamd_config:add_map({ - url = 'http://nginx:8081/authoritative.php', + url = 'http://172.22.1.251:8081/authoritative.php', type = 'map', description = 'Map of domains we are authoritative for' }) From f6241619df52d3cd99f99bf757d91309d74cd89d Mon Sep 17 00:00:00 2001 From: andryyy Date: Thu, 16 Feb 2017 20:20:27 +0100 Subject: [PATCH 03/59] Reset first --- data/conf/rspamd/lua/rspamd.local.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/data/conf/rspamd/lua/rspamd.local.lua b/data/conf/rspamd/lua/rspamd.local.lua index 341046d4..c1480461 100644 --- a/data/conf/rspamd/lua/rspamd.local.lua +++ b/data/conf/rspamd/lua/rspamd.local.lua @@ -25,6 +25,7 @@ local auth_domain_map = rspamd_config:add_map({ rspamd_config.ADD_DELIMITER_TAG = { callback = function(task) + tag = nil local util = require("rspamd_util") local rspamd_logger = require "rspamd_logger" From f13df1ec4606303f793533d772d61593d75146d8 Mon Sep 17 00:00:00 2001 From: andryyy Date: Sat, 18 Feb 2017 20:29:15 +0100 Subject: [PATCH 04/59] Add mraptor to rspamd --- data/Dockerfiles/rspamd/Dockerfile | 4 ++- data/conf/rspamd/lua/rspamd.local.lua | 36 +++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/data/Dockerfiles/rspamd/Dockerfile b/data/Dockerfiles/rspamd/Dockerfile index d4d4508d..028f2abb 100644 --- a/data/Dockerfiles/rspamd/Dockerfile +++ b/data/Dockerfiles/rspamd/Dockerfile @@ -12,12 +12,14 @@ RUN dpkg-divert --local --rename --add /sbin/initctl \ RUN apt-key adv --fetch-keys http://rspamd.com/apt-stable/gpg.key \ && echo "deb http://rspamd.com/apt-stable/ xenial main" > /etc/apt/sources.list.d/rspamd.list \ && apt-get update \ - && apt-get -y install rspamd ca-certificates + && apt-get -y install rspamd ca-certificates python-pip RUN echo '.include $LOCAL_CONFDIR/local.d/rspamd.conf.local' > /etc/rspamd/rspamd.conf.local # "Hardcoded" - we need them RUN echo 'settings = "http://nginx:8081/settings.php";' > /etc/rspamd/modules.d/settings.conf +RUN pip install -U oletools + CMD ["/usr/bin/rspamd","-f", "-u", "_rspamd", "-g", "_rspamd"] RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* diff --git a/data/conf/rspamd/lua/rspamd.local.lua b/data/conf/rspamd/lua/rspamd.local.lua index c1480461..b3f96f64 100644 --- a/data/conf/rspamd/lua/rspamd.local.lua +++ b/data/conf/rspamd/lua/rspamd.local.lua @@ -74,3 +74,39 @@ rspamd_config.ADD_DELIMITER_TAG = { return false end } + +rspamd_config.MRAPTOR = { + callback = function(task) + local parts = task:get_parts() + local rspamd_logger = require "rspamd_logger" + local rspamd_regexp = require "rspamd_regexp" + + if parts then + for _,p in ipairs(parts) do + local mtype,subtype = p:get_type() + local re = rspamd_regexp.create_cached('/(office|word|excel)/i') + if re:match(subtype) then + local content = tostring(p:get_content()) + local filename = p:get_filename() + + local file = os.tmpname() + f = io.open(file, "a+") + f:write(content) + f:close() + + local scan = assert(io.popen('PATH=/usr/bin:/usr/local/bin mraptor ' .. file .. '> /dev/null 2>&1; echo $?', 'r')) + local result = scan:read('*all') + local exit_code = string.match(result, "%d+") + rspamd_logger.infox(exit_code) + scan:close() + + if exit_code == "20" then + rspamd_logger.infox("Reject dangerous macro in office file " .. filename) + task:set_pre_result(rspamd_actions['reject'], 'Dangerous macro in office file ' .. filename) + end + + end + end + end + end +} From 47a7aa78079f60e2af4635b5f7f147c57a0391ed Mon Sep 17 00:00:00 2001 From: andryyy Date: Tue, 21 Feb 2017 22:26:14 +0100 Subject: [PATCH 05/59] Not of any use as of today --- docker-compose.yml | 13 +++++++++++++ generate_config.sh | 3 +++ 2 files changed, 16 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 26c78fdf..3eaa2b47 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -201,6 +201,19 @@ services: aliases: - memcached +# clamav-mailcow: +# build: ./data/Dockerfiles/clamav +# depends_on: +# - pdns-mailcow +# restart: always +# dns: +# - 172.22.1.250 +# dns_search: mailcow-network +# networks: +# mailcow-network: +# aliases: +# - clamav + nginx-mailcow: depends_on: - sogo-mailcow diff --git a/generate_config.sh b/generate_config.sh index 213bdcdb..3e08ae80 100755 --- a/generate_config.sh +++ b/generate_config.sh @@ -16,8 +16,11 @@ if [ -z "$MAILCOW_HOSTNAME" ]; then read -p "Hostname (FQDN): " -ei "mx.example.org" MAILCOW_HOSTNAME fi +[[ -a /etc/timezone ]] && TZ=$(cat /etc/timezone) if [ -z "$TZ" ]; then read -p "Timezone: " -ei "Europe/Berlin" TZ +else + read -p "Timezone: " -ei ${TZ} TZ fi cat << EOF > mailcow.conf From 76426b65b2a976cd2420830c9b3d27d987f39e49 Mon Sep 17 00:00:00 2001 From: andryyy Date: Tue, 21 Feb 2017 22:26:20 +0100 Subject: [PATCH 06/59] Not of any use as of today --- data/Dockerfiles/clamav/Dockerfile | 44 ++++++++++++++++++++++++++++ data/Dockerfiles/clamav/bootstrap.sh | 35 ++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100755 data/Dockerfiles/clamav/Dockerfile create mode 100755 data/Dockerfiles/clamav/bootstrap.sh diff --git a/data/Dockerfiles/clamav/Dockerfile b/data/Dockerfiles/clamav/Dockerfile new file mode 100755 index 00000000..e043b98a --- /dev/null +++ b/data/Dockerfiles/clamav/Dockerfile @@ -0,0 +1,44 @@ +FROM debian:latest +MAINTAINER https://m-ko.de Markus Kosmal + +# Debian Base to use +ENV DEBIAN_VERSION jessie + +# initial install of av daemon +RUN echo "deb http://http.debian.net/debian/ $DEBIAN_VERSION main contrib non-free" > /etc/apt/sources.list && \ + echo "deb http://http.debian.net/debian/ $DEBIAN_VERSION-updates main contrib non-free" >> /etc/apt/sources.list && \ + echo "deb http://security.debian.org/ $DEBIAN_VERSION/updates main contrib non-free" >> /etc/apt/sources.list && \ + apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y -qq \ + clamav-daemon \ + clamav-freshclam \ + libclamunrar7 \ + wget && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# initial update of av databases +RUN wget -O /var/lib/clamav/main.cvd http://database.clamav.net/main.cvd && \ + wget -O /var/lib/clamav/daily.cvd http://database.clamav.net/daily.cvd && \ + wget -O /var/lib/clamav/bytecode.cvd http://database.clamav.net/bytecode.cvd && \ + chown clamav:clamav /var/lib/clamav/*.cvd + +# permission juggling +RUN mkdir /var/run/clamav && \ + chown clamav:clamav /var/run/clamav && \ + chmod 750 /var/run/clamav + +# av configuration update +RUN sed -i 's/^Foreground .*$/Foreground true/g' /etc/clamav/clamd.conf && \ + echo "TCPSocket 3310" >> /etc/clamav/clamd.conf && \ + sed -i 's/^Foreground .*$/Foreground true/g' /etc/clamav/freshclam.conf + +# volume provision +VOLUME ["/var/lib/clamav"] + +# port provision +EXPOSE 3310 + +# av daemon bootstrapping +ADD bootstrap.sh / +CMD ["/bootstrap.sh"] diff --git a/data/Dockerfiles/clamav/bootstrap.sh b/data/Dockerfiles/clamav/bootstrap.sh new file mode 100755 index 00000000..635e93ea --- /dev/null +++ b/data/Dockerfiles/clamav/bootstrap.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# bootstrap clam av service and clam av database updater shell script +# presented by mko (Markus Kosmal) +set -m + +# start clam service itself and the updater in background as daemon +freshclam -d & +clamd & + +# recognize PIDs +pidlist=`jobs -p` + +# initialize latest result var +latest_exit=0 + +# define shutdown helper +function shutdown() { + trap "" SUBS + + for single in $pidlist; do + if ! kill -0 $pidlist 2>/dev/null; then + wait $pidlist + exitcode=$? + fi + done + + kill $pidlist 2>/dev/null +} + +# run shutdown +trap terminate SUBS +wait + +# return received result +exit $latest_exit From 0eb932b3ab2e135a249ec77a2ee5a4b82f13f3a5 Mon Sep 17 00:00:00 2001 From: andryyy Date: Tue, 21 Feb 2017 22:27:11 +0100 Subject: [PATCH 07/59] Show spam aliases # --- data/web/inc/functions.inc.php | 70 +- data/web/inc/vars.inc.php | 2 + data/web/js/mailbox.js | 8 +- data/web/lang/lang.de.php | 3 +- data/web/lang/lang.en.php | 3 +- data/web/mailbox.php | 2 + data/web/rc/.htaccess | 87 + data/web/rc/CHANGELOG | 2413 +++++ data/web/rc/INSTALL | 269 + data/web/rc/LICENSE | 674 ++ data/web/rc/README.md | 93 + data/web/rc/SQL/mssql.initial.sql | 400 + data/web/rc/SQL/mssql/2009103100.sql | 87 + data/web/rc/SQL/mssql/2010100600.sql | 9 + data/web/rc/SQL/mssql/2011011200.sql | 10 + data/web/rc/SQL/mssql/2011092800.sql | 127 + data/web/rc/SQL/mssql/2011111600.sql | 4 + data/web/rc/SQL/mssql/2011121400.sql | 9 + data/web/rc/SQL/mssql/2012051800.sql | 18 + data/web/rc/SQL/mssql/2012080700.sql | 8 + data/web/rc/SQL/mssql/2013011000.sql | 14 + data/web/rc/SQL/mssql/2013042700.sql | 1 + data/web/rc/SQL/mssql/2013052500.sql | 17 + data/web/rc/SQL/mssql/2013061000.sql | 44 + data/web/rc/SQL/mssql/2014042900.sql | 1 + data/web/rc/SQL/mssql/2015030800.sql | 1 + data/web/rc/SQL/mssql/2015111100.sql | 4 + data/web/rc/SQL/mssql/2016081200.sql | 2 + data/web/rc/SQL/mssql/2016100900.sql | 2 + data/web/rc/SQL/mssql/2016112200.sql | 36 + data/web/rc/SQL/mysql.initial.sql | 212 + data/web/rc/SQL/mysql/2008030300.sql | 16 + data/web/rc/SQL/mysql/2008040500.sql | 9 + data/web/rc/SQL/mysql/2008060900.sql | 4 + data/web/rc/SQL/mysql/2008092100.sql | 20 + data/web/rc/SQL/mysql/2009090400.sql | 12 + data/web/rc/SQL/mysql/2009103100.sql | 52 + data/web/rc/SQL/mysql/2010042300.sql | 4 + data/web/rc/SQL/mysql/2010100600.sql | 8 + data/web/rc/SQL/mysql/2011011200.sql | 8 + data/web/rc/SQL/mysql/2011092800.sql | 67 + data/web/rc/SQL/mysql/2011111600.sql | 3 + data/web/rc/SQL/mysql/2011121400.sql | 22 + data/web/rc/SQL/mysql/2012080700.sql | 5 + data/web/rc/SQL/mysql/2013011000.sql | 7 + data/web/rc/SQL/mysql/2013042700.sql | 1 + data/web/rc/SQL/mysql/2013052500.sql | 7 + data/web/rc/SQL/mysql/2013061000.sql | 24 + data/web/rc/SQL/mysql/2014042900.sql | 1 + data/web/rc/SQL/mysql/2015030800.sql | 1 + data/web/rc/SQL/mysql/2015111100.sql | 3 + data/web/rc/SQL/mysql/2016081200.sql | 1 + data/web/rc/SQL/mysql/2016100900.sql | 1 + data/web/rc/SQL/mysql/2016112200.sql | 24 + data/web/rc/SQL/oracle.initial.sql | 220 + data/web/rc/SQL/oracle/2015030800.sql | 1 + data/web/rc/SQL/oracle/2015111100.sql | 2 + data/web/rc/SQL/oracle/2016081200.sql | 1 + data/web/rc/SQL/oracle/2016100900.sql | 1 + data/web/rc/SQL/oracle/2016112200.sql | 23 + data/web/rc/SQL/postgres.initial.sql | 291 + data/web/rc/SQL/postgres/2008030300.sql | 18 + data/web/rc/SQL/postgres/2008060900.sql | 3 + data/web/rc/SQL/postgres/2008092100.sql | 14 + data/web/rc/SQL/postgres/2009090400.sql | 6 + data/web/rc/SQL/postgres/2009103100.sql | 32 + data/web/rc/SQL/postgres/2010042300.sql | 4 + data/web/rc/SQL/postgres/2010100600.sql | 7 + data/web/rc/SQL/postgres/2011011200.sql | 7 + data/web/rc/SQL/postgres/2011092800.sql | 64 + data/web/rc/SQL/postgres/2011111600.sql | 3 + data/web/rc/SQL/postgres/2011121400.sql | 5 + data/web/rc/SQL/postgres/2012080700.sql | 7 + data/web/rc/SQL/postgres/2013011000.sql | 4 + data/web/rc/SQL/postgres/2013042700.sql | 14 + data/web/rc/SQL/postgres/2013052500.sql | 8 + data/web/rc/SQL/postgres/2013061000.sql | 24 + data/web/rc/SQL/postgres/2014042900.sql | 1 + data/web/rc/SQL/postgres/2015030800.sql | 1 + data/web/rc/SQL/postgres/2015111100.sql | 2 + data/web/rc/SQL/postgres/2016081200.sql | 1 + data/web/rc/SQL/postgres/2016100900.sql | 1 + data/web/rc/SQL/postgres/2016112200.sql | 21 + data/web/rc/SQL/sqlite.initial.sql | 203 + data/web/rc/SQL/sqlite/2008030300.sql | 25 + data/web/rc/SQL/sqlite/2008060900.sql | 3 + data/web/rc/SQL/sqlite/2008092100.sql | 4 + data/web/rc/SQL/sqlite/2009090400.sql | 8 + data/web/rc/SQL/sqlite/2009103100.sql | 61 + data/web/rc/SQL/sqlite/2010042300.sql | 35 + data/web/rc/SQL/sqlite/2010100600.sql | 40 + data/web/rc/SQL/sqlite/2011011200.sql | 41 + data/web/rc/SQL/sqlite/2011092800.sql | 54 + data/web/rc/SQL/sqlite/2011111600.sql | 11 + data/web/rc/SQL/sqlite/2011121400.sql | 38 + data/web/rc/SQL/sqlite/2012080700.sql | 44 + data/web/rc/SQL/sqlite/2013011000.sql | 6 + data/web/rc/SQL/sqlite/2013011700.sql | 2 + data/web/rc/SQL/sqlite/2013042700.sql | 1 + data/web/rc/SQL/sqlite/2013052500.sql | 8 + data/web/rc/SQL/sqlite/2013061000.sql | 48 + data/web/rc/SQL/sqlite/2014042900.sql | 1 + data/web/rc/SQL/sqlite/2015030800.sql | 1 + data/web/rc/SQL/sqlite/2015111100.sql | 35 + data/web/rc/SQL/sqlite/2016081200.sql | 9 + data/web/rc/SQL/sqlite/2016100900.sql | 0 data/web/rc/SQL/sqlite/2016112200.sql | 21 + data/web/rc/UPGRADING | 79 + data/web/rc/bin/cleandb.sh | 33 + data/web/rc/bin/cssshrink.sh | 62 + data/web/rc/bin/decrypt.sh | 67 + data/web/rc/bin/deluser.sh | 125 + data/web/rc/bin/dumpschema.sh | 97 + data/web/rc/bin/gc.sh | 39 + data/web/rc/bin/indexcontacts.sh | 29 + data/web/rc/bin/initdb.sh | 42 + data/web/rc/bin/installto.sh | 106 + data/web/rc/bin/jsshrink.sh | 75 + data/web/rc/bin/makedoc.sh | 24 + data/web/rc/bin/moduserprefs.sh | 68 + data/web/rc/bin/msgexport.sh | 143 + data/web/rc/bin/msgimport.sh | 113 + data/web/rc/bin/update.sh | 271 + data/web/rc/bin/updatecss.sh | 122 + data/web/rc/bin/updatedb.sh | 42 + data/web/rc/composer.json-dist | 43 + data/web/rc/config/.htaccess | 7 + data/web/rc/config/config.inc.php | 31 + data/web/rc/config/config.inc.php.sample | 85 + data/web/rc/config/defaults.inc.php | 1237 +++ data/web/rc/config/mimetypes.php | 58 + data/web/rc/index.php | 324 + data/web/rc/installer/check.php | 263 + data/web/rc/installer/client.js | 51 + data/web/rc/installer/config.php | 696 ++ data/web/rc/installer/images/add.png | Bin 0 -> 653 bytes .../rc/installer/images/banner_gradient.gif | Bin 0 -> 506 bytes .../rc/installer/images/banner_schraffur.gif | Bin 0 -> 12454 bytes data/web/rc/installer/images/delete.png | Bin 0 -> 637 bytes data/web/rc/installer/images/error.png | Bin 0 -> 565 bytes .../rc/installer/images/roundcube_logo.png | Bin 0 -> 6478 bytes data/web/rc/installer/index.php | 183 + data/web/rc/installer/styles.css | 235 + data/web/rc/installer/test.php | 445 + data/web/rc/logs/.htaccess | 7 + data/web/rc/plugins/acl/acl.js | 389 + data/web/rc/plugins/acl/acl.min.js | 15 + data/web/rc/plugins/acl/acl.php | 781 ++ data/web/rc/plugins/acl/composer.json | 24 + data/web/rc/plugins/acl/config.inc.php.dist | 33 + .../web/rc/plugins/acl/localization/ar_SA.inc | 91 + data/web/rc/plugins/acl/localization/ast.inc | 80 + .../web/rc/plugins/acl/localization/az_AZ.inc | 91 + .../web/rc/plugins/acl/localization/be_BE.inc | 98 + .../web/rc/plugins/acl/localization/bg_BG.inc | 98 + data/web/rc/plugins/acl/localization/br.inc | 98 + .../web/rc/plugins/acl/localization/bs_BA.inc | 98 + .../web/rc/plugins/acl/localization/ca_ES.inc | 98 + .../web/rc/plugins/acl/localization/cs_CZ.inc | 98 + .../web/rc/plugins/acl/localization/cy_GB.inc | 98 + .../web/rc/plugins/acl/localization/da_DK.inc | 93 + .../web/rc/plugins/acl/localization/de_CH.inc | 98 + .../web/rc/plugins/acl/localization/de_DE.inc | 98 + .../web/rc/plugins/acl/localization/el_GR.inc | 98 + .../web/rc/plugins/acl/localization/en_CA.inc | 94 + .../web/rc/plugins/acl/localization/en_GB.inc | 98 + .../web/rc/plugins/acl/localization/en_US.inc | 108 + data/web/rc/plugins/acl/localization/eo.inc | 63 + .../rc/plugins/acl/localization/es_419.inc | 98 + .../web/rc/plugins/acl/localization/es_AR.inc | 98 + .../web/rc/plugins/acl/localization/es_ES.inc | 98 + .../web/rc/plugins/acl/localization/et_EE.inc | 98 + .../web/rc/plugins/acl/localization/eu_ES.inc | 98 + .../web/rc/plugins/acl/localization/fa_AF.inc | 26 + .../web/rc/plugins/acl/localization/fa_IR.inc | 98 + .../web/rc/plugins/acl/localization/fi_FI.inc | 55 + .../web/rc/plugins/acl/localization/fo_FO.inc | 98 + .../web/rc/plugins/acl/localization/fr_FR.inc | 98 + .../web/rc/plugins/acl/localization/fy_NL.inc | 23 + .../web/rc/plugins/acl/localization/gl_ES.inc | 98 + .../web/rc/plugins/acl/localization/he_IL.inc | 98 + .../web/rc/plugins/acl/localization/hr_HR.inc | 90 + .../web/rc/plugins/acl/localization/hu_HU.inc | 98 + .../web/rc/plugins/acl/localization/hy_AM.inc | 98 + data/web/rc/plugins/acl/localization/ia.inc | 98 + .../web/rc/plugins/acl/localization/id_ID.inc | 98 + .../web/rc/plugins/acl/localization/is_IS.inc | 21 + .../web/rc/plugins/acl/localization/it_IT.inc | 98 + .../web/rc/plugins/acl/localization/ja_JP.inc | 98 + .../web/rc/plugins/acl/localization/ka_GE.inc | 21 + .../web/rc/plugins/acl/localization/km_KH.inc | 74 + .../web/rc/plugins/acl/localization/ko_KR.inc | 98 + data/web/rc/plugins/acl/localization/ku.inc | 89 + .../web/rc/plugins/acl/localization/ku_IQ.inc | 26 + .../web/rc/plugins/acl/localization/lb_LU.inc | 69 + .../web/rc/plugins/acl/localization/lt_LT.inc | 98 + .../web/rc/plugins/acl/localization/lv_LV.inc | 98 + .../web/rc/plugins/acl/localization/mn_MN.inc | 49 + .../web/rc/plugins/acl/localization/nb_NO.inc | 91 + .../web/rc/plugins/acl/localization/nl_BE.inc | 20 + .../web/rc/plugins/acl/localization/nl_NL.inc | 98 + .../web/rc/plugins/acl/localization/nn_NO.inc | 88 + .../web/rc/plugins/acl/localization/pl_PL.inc | 98 + .../web/rc/plugins/acl/localization/pt_BR.inc | 98 + .../web/rc/plugins/acl/localization/pt_PT.inc | 98 + .../web/rc/plugins/acl/localization/ro_RO.inc | 94 + .../web/rc/plugins/acl/localization/ru_RU.inc | 98 + .../web/rc/plugins/acl/localization/sk_SK.inc | 98 + .../web/rc/plugins/acl/localization/sl_SI.inc | 98 + .../web/rc/plugins/acl/localization/sq_AL.inc | 96 + .../web/rc/plugins/acl/localization/sr_CS.inc | 52 + .../web/rc/plugins/acl/localization/sv_SE.inc | 98 + .../web/rc/plugins/acl/localization/th_TH.inc | 49 + data/web/rc/plugins/acl/localization/ti.inc | 66 + .../web/rc/plugins/acl/localization/tr_TR.inc | 98 + data/web/rc/plugins/acl/localization/tzl.inc | 24 + .../web/rc/plugins/acl/localization/uk_UA.inc | 98 + .../web/rc/plugins/acl/localization/vi_VN.inc | 98 + .../web/rc/plugins/acl/localization/zh_CN.inc | 98 + .../web/rc/plugins/acl/localization/zh_TW.inc | 89 + data/web/rc/plugins/acl/skins/classic/acl.css | 98 + .../rc/plugins/acl/skins/classic/acl.min.css | 1 + .../acl/skins/classic/images/enabled.png | Bin 0 -> 674 bytes .../acl/skins/classic/images/partial.png | Bin 0 -> 389 bytes .../acl/skins/classic/templates/table.html | 46 + data/web/rc/plugins/acl/skins/larry/acl.css | 124 + .../rc/plugins/acl/skins/larry/acl.min.css | 1 + .../acl/skins/larry/images/enabled.png | Bin 0 -> 674 bytes .../acl/skins/larry/images/partial.png | Bin 0 -> 389 bytes .../acl/skins/larry/templates/table.html | 30 + data/web/rc/plugins/acl/tests/Acl.php | 23 + .../additional_message_headers.php | 37 + .../additional_message_headers/composer.json | 24 + .../config.inc.php.dist | 14 + .../tests/AdditionalMessageHeaders.php | 23 + data/web/rc/plugins/archive/archive.js | 64 + data/web/rc/plugins/archive/archive.min.js | 19 + data/web/rc/plugins/archive/archive.php | 453 + data/web/rc/plugins/archive/composer.json | 29 + .../rc/plugins/archive/localization/ar_SA.inc | 31 + .../rc/plugins/archive/localization/ast.inc | 31 + .../rc/plugins/archive/localization/az_AZ.inc | 31 + .../rc/plugins/archive/localization/be_BE.inc | 31 + .../rc/plugins/archive/localization/bg_BG.inc | 32 + .../rc/plugins/archive/localization/br.inc | 31 + .../rc/plugins/archive/localization/bs_BA.inc | 31 + .../rc/plugins/archive/localization/ca_ES.inc | 31 + .../rc/plugins/archive/localization/cs_CZ.inc | 31 + .../rc/plugins/archive/localization/cy_GB.inc | 32 + .../rc/plugins/archive/localization/da_DK.inc | 32 + .../rc/plugins/archive/localization/de_CH.inc | 32 + .../rc/plugins/archive/localization/de_DE.inc | 32 + .../rc/plugins/archive/localization/el_GR.inc | 31 + .../rc/plugins/archive/localization/en_CA.inc | 31 + .../rc/plugins/archive/localization/en_GB.inc | 31 + .../rc/plugins/archive/localization/en_US.inc | 35 + .../rc/plugins/archive/localization/eo.inc | 22 + .../plugins/archive/localization/es_419.inc | 31 + .../rc/plugins/archive/localization/es_AR.inc | 31 + .../rc/plugins/archive/localization/es_ES.inc | 32 + .../rc/plugins/archive/localization/et_EE.inc | 31 + .../rc/plugins/archive/localization/eu_ES.inc | 31 + .../rc/plugins/archive/localization/fa_AF.inc | 26 + .../rc/plugins/archive/localization/fa_IR.inc | 31 + .../rc/plugins/archive/localization/fi_FI.inc | 32 + .../rc/plugins/archive/localization/fo_FO.inc | 31 + .../rc/plugins/archive/localization/fr_FR.inc | 32 + .../rc/plugins/archive/localization/gl_ES.inc | 31 + .../rc/plugins/archive/localization/he_IL.inc | 32 + .../rc/plugins/archive/localization/hr_HR.inc | 31 + .../rc/plugins/archive/localization/hu_HU.inc | 32 + .../rc/plugins/archive/localization/hy_AM.inc | 31 + .../rc/plugins/archive/localization/ia.inc | 31 + .../rc/plugins/archive/localization/id_ID.inc | 32 + .../rc/plugins/archive/localization/it_IT.inc | 32 + .../rc/plugins/archive/localization/ja_JP.inc | 32 + .../rc/plugins/archive/localization/km_KH.inc | 31 + .../rc/plugins/archive/localization/ko_KR.inc | 32 + .../rc/plugins/archive/localization/ku.inc | 31 + .../rc/plugins/archive/localization/ku_IQ.inc | 22 + .../rc/plugins/archive/localization/lb_LU.inc | 31 + .../rc/plugins/archive/localization/lt_LT.inc | 31 + .../rc/plugins/archive/localization/lv_LV.inc | 31 + .../rc/plugins/archive/localization/ml_IN.inc | 22 + .../rc/plugins/archive/localization/mn_MN.inc | 31 + .../rc/plugins/archive/localization/mr_IN.inc | 22 + .../rc/plugins/archive/localization/nb_NO.inc | 31 + .../rc/plugins/archive/localization/nl_NL.inc | 31 + .../rc/plugins/archive/localization/nn_NO.inc | 31 + .../rc/plugins/archive/localization/pl_PL.inc | 32 + .../rc/plugins/archive/localization/pt_BR.inc | 32 + .../rc/plugins/archive/localization/pt_PT.inc | 32 + .../rc/plugins/archive/localization/ro_RO.inc | 31 + .../rc/plugins/archive/localization/ru_RU.inc | 32 + .../rc/plugins/archive/localization/si_LK.inc | 22 + .../rc/plugins/archive/localization/sk_SK.inc | 32 + .../rc/plugins/archive/localization/sl_SI.inc | 32 + .../rc/plugins/archive/localization/sq_AL.inc | 32 + .../rc/plugins/archive/localization/sr_CS.inc | 31 + .../rc/plugins/archive/localization/sv_SE.inc | 32 + .../rc/plugins/archive/localization/tr_TR.inc | 32 + .../rc/plugins/archive/localization/tzl.inc | 19 + .../rc/plugins/archive/localization/uk_UA.inc | 32 + .../rc/plugins/archive/localization/vi_VN.inc | 31 + .../rc/plugins/archive/localization/zh_CN.inc | 31 + .../rc/plugins/archive/localization/zh_TW.inc | 31 + .../plugins/archive/skins/classic/archive.css | 10 + .../archive/skins/classic/archive.min.css | 1 + .../archive/skins/classic/archive_act.png | Bin 0 -> 3663 bytes .../archive/skins/classic/archive_pas.png | Bin 0 -> 977 bytes .../archive/skins/classic/foldericon.png | Bin 0 -> 3312 bytes .../rc/plugins/archive/skins/larry/.gitignore | 0 data/web/rc/plugins/archive/tests/Archive.php | 23 + .../attachment_reminder.js | 83 + .../attachment_reminder.min.js | 20 + .../attachment_reminder.php | 83 + .../plugins/attachment_reminder/composer.json | 29 + .../localization/ar_SA.inc | 20 + .../attachment_reminder/localization/ast.inc | 20 + .../localization/az_AZ.inc | 20 + .../localization/be_BE.inc | 20 + .../localization/bg_BG.inc | 20 + .../attachment_reminder/localization/br.inc | 20 + .../localization/bs_BA.inc | 20 + .../localization/ca_ES.inc | 20 + .../localization/cs_CZ.inc | 20 + .../localization/cy_GB.inc | 20 + .../localization/da_DK.inc | 20 + .../localization/de_CH.inc | 20 + .../localization/de_DE.inc | 20 + .../localization/el_GR.inc | 20 + .../localization/en_CA.inc | 20 + .../localization/en_GB.inc | 20 + .../localization/en_US.inc | 22 + .../localization/es_419.inc | 20 + .../localization/es_AR.inc | 20 + .../localization/es_ES.inc | 20 + .../localization/et_EE.inc | 20 + .../localization/eu_ES.inc | 20 + .../localization/fa_AF.inc | 20 + .../localization/fa_IR.inc | 20 + .../localization/fi_FI.inc | 20 + .../localization/fo_FO.inc | 20 + .../localization/fr_FR.inc | 20 + .../localization/gl_ES.inc | 20 + .../localization/he_IL.inc | 20 + .../localization/hr_HR.inc | 20 + .../localization/hu_HU.inc | 20 + .../attachment_reminder/localization/ia.inc | 20 + .../localization/id_ID.inc | 20 + .../localization/it_IT.inc | 20 + .../localization/ja_JP.inc | 20 + .../localization/km_KH.inc | 20 + .../localization/kn_IN.inc | 18 + .../localization/ko_KR.inc | 20 + .../attachment_reminder/localization/ku.inc | 20 + .../localization/ku_IQ.inc | 19 + .../localization/lb_LU.inc | 20 + .../localization/lt_LT.inc | 20 + .../localization/lv_LV.inc | 20 + .../localization/ml_IN.inc | 19 + .../localization/mn_MN.inc | 20 + .../localization/nb_NO.inc | 20 + .../localization/nl_NL.inc | 20 + .../localization/pl_PL.inc | 20 + .../localization/pt_BR.inc | 20 + .../localization/pt_PT.inc | 20 + .../localization/ro_RO.inc | 20 + .../localization/ru_RU.inc | 20 + .../localization/sk_SK.inc | 20 + .../localization/sl_SI.inc | 20 + .../localization/sq_AL.inc | 20 + .../localization/sr_CS.inc | 20 + .../localization/sv_SE.inc | 20 + .../localization/tr_TR.inc | 20 + .../localization/uk_UA.inc | 20 + .../localization/vi_VN.inc | 20 + .../localization/zh_CN.inc | 20 + .../localization/zh_TW.inc | 20 + data/web/rc/plugins/autologon/autologon.php | 48 + data/web/rc/plugins/autologon/composer.json | 24 + .../rc/plugins/autologon/tests/Autologon.php | 23 + .../database_attachments/composer.json | 30 + .../database_attachments/config.inc.php.dist | 16 + .../database_attachments.php | 187 + .../tests/DatabaseAttachments.php | 23 + .../web/rc/plugins/debug_logger/composer.json | 24 + .../rc/plugins/debug_logger/debug_logger.php | 149 + .../rc/plugins/debug_logger/runlog/runlog.php | 233 + .../debug_logger/tests/DebugLogger.php | 23 + data/web/rc/plugins/emoticons/composer.json | 29 + .../rc/plugins/emoticons/config.inc.php.dist | 7 + data/web/rc/plugins/emoticons/emoticons.php | 185 + .../rc/plugins/emoticons/emoticons_engine.php | 152 + .../plugins/emoticons/localization/en_US.inc | 23 + .../rc/plugins/emoticons/tests/Emoticons.php | 22 + .../emoticons/tests/EmoticonsEngine.php | 48 + data/web/rc/plugins/enigma/README | 64 + data/web/rc/plugins/enigma/composer.json | 29 + .../web/rc/plugins/enigma/config.inc.php.dist | 62 + data/web/rc/plugins/enigma/enigma.js | 625 ++ data/web/rc/plugins/enigma/enigma.min.js | 31 + data/web/rc/plugins/enigma/enigma.php | 529 + data/web/rc/plugins/enigma/home/.htaccess | 7 + .../rc/plugins/enigma/lib/enigma_driver.php | 134 + .../enigma/lib/enigma_driver_gnupg.php | 512 + .../enigma/lib/enigma_driver_phpssl.php | 224 + .../rc/plugins/enigma/lib/enigma_engine.php | 1395 +++ .../rc/plugins/enigma/lib/enigma_error.php | 56 + data/web/rc/plugins/enigma/lib/enigma_key.php | 167 + .../enigma/lib/enigma_mime_message.php | 294 + .../plugins/enigma/lib/enigma_signature.php | 32 + .../rc/plugins/enigma/lib/enigma_subkey.php | 79 + data/web/rc/plugins/enigma/lib/enigma_ui.php | 1238 +++ .../rc/plugins/enigma/lib/enigma_userid.php | 25 + .../rc/plugins/enigma/localization/bg_BG.inc | 121 + .../web/rc/plugins/enigma/localization/br.inc | 117 + .../rc/plugins/enigma/localization/cs_CZ.inc | 115 + .../rc/plugins/enigma/localization/cy_GB.inc | 121 + .../rc/plugins/enigma/localization/da_DK.inc | 22 + .../rc/plugins/enigma/localization/de_CH.inc | 113 + .../rc/plugins/enigma/localization/de_DE.inc | 121 + .../rc/plugins/enigma/localization/el_GR.inc | 118 + .../rc/plugins/enigma/localization/en_GB.inc | 112 + .../rc/plugins/enigma/localization/en_US.inc | 137 + .../rc/plugins/enigma/localization/es_ES.inc | 121 + .../rc/plugins/enigma/localization/eu_ES.inc | 81 + .../rc/plugins/enigma/localization/fi_FI.inc | 105 + .../rc/plugins/enigma/localization/fo_FO.inc | 108 + .../rc/plugins/enigma/localization/fr_FR.inc | 123 + .../rc/plugins/enigma/localization/he_IL.inc | 121 + .../rc/plugins/enigma/localization/hr_HR.inc | 19 + .../rc/plugins/enigma/localization/hu_HU.inc | 123 + .../rc/plugins/enigma/localization/id_ID.inc | 120 + .../rc/plugins/enigma/localization/is_IS.inc | 21 + .../rc/plugins/enigma/localization/it_IT.inc | 64 + .../rc/plugins/enigma/localization/ja_JP.inc | 121 + .../rc/plugins/enigma/localization/ka_GE.inc | 19 + .../rc/plugins/enigma/localization/ko_KR.inc | 121 + .../rc/plugins/enigma/localization/lt_LT.inc | 120 + .../rc/plugins/enigma/localization/lv_LV.inc | 112 + .../rc/plugins/enigma/localization/nl_BE.inc | 21 + .../rc/plugins/enigma/localization/nl_NL.inc | 120 + .../rc/plugins/enigma/localization/pl_PL.inc | 121 + .../rc/plugins/enigma/localization/pt_BR.inc | 121 + .../rc/plugins/enigma/localization/pt_PT.inc | 123 + .../rc/plugins/enigma/localization/ru_RU.inc | 121 + .../rc/plugins/enigma/localization/sk_SK.inc | 121 + .../rc/plugins/enigma/localization/sq_AL.inc | 123 + .../rc/plugins/enigma/localization/sv_SE.inc | 121 + .../rc/plugins/enigma/localization/tr_TR.inc | 123 + .../rc/plugins/enigma/localization/uk_UA.inc | 121 + .../rc/plugins/enigma/localization/zh_CN.inc | 121 + data/web/rc/plugins/enigma/openpgp.min.js | 27 + .../plugins/enigma/skins/classic/enigma.css | 226 + .../enigma/skins/classic/enigma.min.css | 1 + .../plugins/enigma/skins/classic/enigma.png | Bin 0 -> 1592 bytes .../enigma/skins/classic/enigma_error.png | Bin 0 -> 1960 bytes .../rc/plugins/enigma/skins/classic/key.png | Bin 0 -> 1743 bytes .../plugins/enigma/skins/classic/key_add.png | Bin 0 -> 1967 bytes .../enigma/skins/classic/keys_toolbar.png | Bin 0 -> 14977 bytes .../skins/classic/templates/keycreate.html | 22 + .../skins/classic/templates/keyimport.html | 16 + .../skins/classic/templates/keyinfo.html | 16 + .../enigma/skins/classic/templates/keys.html | 94 + .../rc/plugins/enigma/skins/larry/enigma.css | 177 + .../plugins/enigma/skins/larry/enigma.min.css | 1 + .../enigma/skins/larry/enigma_icons.png | Bin 0 -> 5774 bytes .../skins/larry/templates/keycreate.html | 22 + .../skins/larry/templates/keyimport.html | 18 + .../enigma/skins/larry/templates/keyinfo.html | 18 + .../enigma/skins/larry/templates/keys.html | 91 + data/web/rc/plugins/enigma/tests/Enigma.php | 23 + .../plugins/example_addressbook/composer.json | 24 + .../example_addressbook.php | 53 + .../example_addressbook_backend.php | 116 + .../tests/ExampleAddressbook.php | 23 + .../filesystem_attachments/composer.json | 29 + .../filesystem_attachments.php | 185 + .../tests/FilesystemAttachments.php | 23 + data/web/rc/plugins/help/composer.json | 24 + data/web/rc/plugins/help/config.inc.php.dist | 38 + data/web/rc/plugins/help/content/license.html | 689 ++ data/web/rc/plugins/help/help.js | 38 + data/web/rc/plugins/help/help.min.js | 18 + data/web/rc/plugins/help/help.php | 164 + .../rc/plugins/help/localization/ar_SA.inc | 21 + data/web/rc/plugins/help/localization/ast.inc | 21 + .../rc/plugins/help/localization/az_AZ.inc | 21 + .../rc/plugins/help/localization/be_BE.inc | 21 + .../rc/plugins/help/localization/bg_BG.inc | 22 + data/web/rc/plugins/help/localization/br.inc | 22 + .../rc/plugins/help/localization/bs_BA.inc | 22 + .../rc/plugins/help/localization/ca_ES.inc | 21 + .../rc/plugins/help/localization/cs_CZ.inc | 22 + .../rc/plugins/help/localization/cy_GB.inc | 22 + .../rc/plugins/help/localization/da_DK.inc | 21 + .../rc/plugins/help/localization/de_CH.inc | 22 + .../rc/plugins/help/localization/de_DE.inc | 22 + .../rc/plugins/help/localization/el_GR.inc | 22 + .../rc/plugins/help/localization/en_CA.inc | 21 + .../rc/plugins/help/localization/en_GB.inc | 22 + .../rc/plugins/help/localization/en_US.inc | 25 + data/web/rc/plugins/help/localization/eo.inc | 21 + .../rc/plugins/help/localization/es_419.inc | 21 + .../rc/plugins/help/localization/es_AR.inc | 21 + .../rc/plugins/help/localization/es_ES.inc | 22 + .../rc/plugins/help/localization/et_EE.inc | 21 + .../rc/plugins/help/localization/eu_ES.inc | 22 + .../rc/plugins/help/localization/fa_AF.inc | 21 + .../rc/plugins/help/localization/fa_IR.inc | 21 + .../rc/plugins/help/localization/fi_FI.inc | 22 + .../rc/plugins/help/localization/fo_FO.inc | 22 + .../rc/plugins/help/localization/fr_FR.inc | 22 + .../rc/plugins/help/localization/fy_NL.inc | 21 + .../rc/plugins/help/localization/gl_ES.inc | 21 + .../rc/plugins/help/localization/he_IL.inc | 22 + .../rc/plugins/help/localization/hr_HR.inc | 21 + .../rc/plugins/help/localization/hu_HU.inc | 22 + .../rc/plugins/help/localization/hy_AM.inc | 21 + data/web/rc/plugins/help/localization/ia.inc | 22 + .../rc/plugins/help/localization/id_ID.inc | 22 + .../rc/plugins/help/localization/is_IS.inc | 22 + .../rc/plugins/help/localization/it_IT.inc | 22 + .../rc/plugins/help/localization/ja_JP.inc | 22 + .../rc/plugins/help/localization/km_KH.inc | 21 + .../rc/plugins/help/localization/kn_IN.inc | 20 + .../rc/plugins/help/localization/ko_KR.inc | 22 + data/web/rc/plugins/help/localization/ku.inc | 21 + .../rc/plugins/help/localization/ku_IQ.inc | 21 + .../rc/plugins/help/localization/lb_LU.inc | 21 + .../rc/plugins/help/localization/lt_LT.inc | 22 + .../rc/plugins/help/localization/lv_LV.inc | 22 + .../rc/plugins/help/localization/ml_IN.inc | 21 + .../rc/plugins/help/localization/mn_MN.inc | 22 + .../rc/plugins/help/localization/nb_NO.inc | 21 + .../rc/plugins/help/localization/nl_BE.inc | 22 + .../rc/plugins/help/localization/nl_NL.inc | 22 + .../rc/plugins/help/localization/nn_NO.inc | 21 + .../rc/plugins/help/localization/pl_PL.inc | 22 + .../rc/plugins/help/localization/pt_BR.inc | 22 + .../rc/plugins/help/localization/pt_PT.inc | 22 + .../rc/plugins/help/localization/ro_RO.inc | 21 + .../rc/plugins/help/localization/ru_RU.inc | 22 + .../rc/plugins/help/localization/sk_SK.inc | 22 + .../rc/plugins/help/localization/sl_SI.inc | 22 + .../rc/plugins/help/localization/sq_AL.inc | 22 + .../rc/plugins/help/localization/sr_CS.inc | 22 + .../rc/plugins/help/localization/sv_SE.inc | 22 + data/web/rc/plugins/help/localization/ti.inc | 21 + .../rc/plugins/help/localization/tr_TR.inc | 22 + data/web/rc/plugins/help/localization/tzl.inc | 20 + .../rc/plugins/help/localization/uk_UA.inc | 22 + .../rc/plugins/help/localization/vi_VN.inc | 21 + .../rc/plugins/help/localization/zh_CN.inc | 22 + .../rc/plugins/help/localization/zh_TW.inc | 21 + .../rc/plugins/help/skins/classic/help.css | 43 + .../rc/plugins/help/skins/classic/help.gif | Bin 0 -> 898 bytes .../plugins/help/skins/classic/help.min.css | 1 + .../help/skins/classic/templates/help.html | 41 + data/web/rc/plugins/help/skins/larry/help.css | 44 + .../rc/plugins/help/skins/larry/help.min.css | 1 + data/web/rc/plugins/help/skins/larry/help.png | Bin 0 -> 2876 bytes .../web/rc/plugins/help/skins/larry/icons.psd | Bin 0 -> 339722 bytes .../help/skins/larry/templates/help.html | 31 + data/web/rc/plugins/help/tests/Help.php | 23 + .../rc/plugins/hide_blockquote/composer.json | 24 + .../hide_blockquote/hide_blockquote.js | 63 + .../hide_blockquote/hide_blockquote.min.js | 19 + .../hide_blockquote/hide_blockquote.php | 77 + .../hide_blockquote/localization/ar_SA.inc | 21 + .../hide_blockquote/localization/ast.inc | 21 + .../hide_blockquote/localization/az_AZ.inc | 21 + .../hide_blockquote/localization/be_BE.inc | 21 + .../hide_blockquote/localization/bg_BG.inc | 21 + .../hide_blockquote/localization/br.inc | 21 + .../hide_blockquote/localization/bs_BA.inc | 21 + .../hide_blockquote/localization/ca_ES.inc | 21 + .../hide_blockquote/localization/cs_CZ.inc | 21 + .../hide_blockquote/localization/cy_GB.inc | 21 + .../hide_blockquote/localization/da_DK.inc | 21 + .../hide_blockquote/localization/de_CH.inc | 21 + .../hide_blockquote/localization/de_DE.inc | 21 + .../hide_blockquote/localization/el_GR.inc | 21 + .../hide_blockquote/localization/en_CA.inc | 21 + .../hide_blockquote/localization/en_GB.inc | 21 + .../hide_blockquote/localization/en_US.inc | 24 + .../hide_blockquote/localization/eo.inc | 21 + .../hide_blockquote/localization/es_419.inc | 21 + .../hide_blockquote/localization/es_AR.inc | 21 + .../hide_blockquote/localization/es_ES.inc | 21 + .../hide_blockquote/localization/et_EE.inc | 21 + .../hide_blockquote/localization/eu_ES.inc | 21 + .../hide_blockquote/localization/fa_IR.inc | 21 + .../hide_blockquote/localization/fi_FI.inc | 21 + .../hide_blockquote/localization/fo_FO.inc | 21 + .../hide_blockquote/localization/fr_FR.inc | 21 + .../hide_blockquote/localization/gl_ES.inc | 21 + .../hide_blockquote/localization/he_IL.inc | 21 + .../hide_blockquote/localization/hr_HR.inc | 21 + .../hide_blockquote/localization/hu_HU.inc | 21 + .../hide_blockquote/localization/hy_AM.inc | 21 + .../hide_blockquote/localization/ia.inc | 21 + .../hide_blockquote/localization/id_ID.inc | 21 + .../hide_blockquote/localization/is_IS.inc | 21 + .../hide_blockquote/localization/it_IT.inc | 21 + .../hide_blockquote/localization/ja_JP.inc | 21 + .../hide_blockquote/localization/ka_GE.inc | 19 + .../hide_blockquote/localization/km_KH.inc | 21 + .../hide_blockquote/localization/ko_KR.inc | 21 + .../hide_blockquote/localization/ku.inc | 21 + .../hide_blockquote/localization/lb_LU.inc | 21 + .../hide_blockquote/localization/lt_LT.inc | 21 + .../hide_blockquote/localization/lv_LV.inc | 21 + .../hide_blockquote/localization/ml_IN.inc | 21 + .../hide_blockquote/localization/mn_MN.inc | 21 + .../hide_blockquote/localization/nb_NO.inc | 21 + .../hide_blockquote/localization/nl_BE.inc | 20 + .../hide_blockquote/localization/nl_NL.inc | 21 + .../hide_blockquote/localization/nn_NO.inc | 21 + .../hide_blockquote/localization/pl_PL.inc | 21 + .../hide_blockquote/localization/pt_BR.inc | 21 + .../hide_blockquote/localization/pt_PT.inc | 21 + .../hide_blockquote/localization/ro_RO.inc | 21 + .../hide_blockquote/localization/ru_RU.inc | 21 + .../hide_blockquote/localization/sk_SK.inc | 21 + .../hide_blockquote/localization/sl_SI.inc | 21 + .../hide_blockquote/localization/sq_AL.inc | 21 + .../hide_blockquote/localization/sr_CS.inc | 21 + .../hide_blockquote/localization/sv_SE.inc | 21 + .../hide_blockquote/localization/tr_TR.inc | 21 + .../hide_blockquote/localization/tzl.inc | 20 + .../hide_blockquote/localization/uk_UA.inc | 21 + .../hide_blockquote/localization/vi_VN.inc | 21 + .../hide_blockquote/localization/zh_CN.inc | 21 + .../hide_blockquote/localization/zh_TW.inc | 21 + .../hide_blockquote/skins/larry/style.css | 31 + .../hide_blockquote/skins/larry/style.min.css | 1 + .../hide_blockquote/tests/HideBlockquote.php | 23 + .../plugins/http_authentication/composer.json | 24 + .../http_authentication/config.inc.php.dist | 9 + .../http_authentication.php | 106 + .../plugins/http_authentication/logout.html | 29 + .../tests/HttpAuthentication.php | 23 + data/web/rc/plugins/identicon/composer.json | 25 + data/web/rc/plugins/identicon/identicon.php | 78 + .../rc/plugins/identicon/identicon_engine.php | 175 + .../rc/plugins/identicon/tests/Identicon.php | 22 + .../rc/plugins/identity_select/composer.json | 24 + .../identity_select/identity_select.php | 94 + .../identity_select/tests/IdentitySelect.php | 22 + data/web/rc/plugins/jqueryui/README | 31 + data/web/rc/plugins/jqueryui/composer.json | 29 + .../rc/plugins/jqueryui/config.inc.php.dist | 12 + data/web/rc/plugins/jqueryui/jqueryui.php | 137 + .../jqueryui/js/i18n/jquery-ui-i18n.js | 1677 +++ .../js/i18n/jquery.ui.datepicker-af.js | 25 + .../js/i18n/jquery.ui.datepicker-ar-DZ.js | 25 + .../js/i18n/jquery.ui.datepicker-ar.js | 25 + .../js/i18n/jquery.ui.datepicker-az.js | 25 + .../js/i18n/jquery.ui.datepicker-bg.js | 26 + .../js/i18n/jquery.ui.datepicker-bs.js | 25 + .../js/i18n/jquery.ui.datepicker-ca.js | 25 + .../js/i18n/jquery.ui.datepicker-cs.js | 25 + .../js/i18n/jquery.ui.datepicker-cy-GB.js | 25 + .../js/i18n/jquery.ui.datepicker-da.js | 25 + .../js/i18n/jquery.ui.datepicker-de-CH.js | 24 + .../js/i18n/jquery.ui.datepicker-de.js | 25 + .../js/i18n/jquery.ui.datepicker-el.js | 25 + .../js/i18n/jquery.ui.datepicker-en-AU.js | 25 + .../js/i18n/jquery.ui.datepicker-en-GB.js | 25 + .../js/i18n/jquery.ui.datepicker-en-NZ.js | 25 + .../js/i18n/jquery.ui.datepicker-eo.js | 25 + .../js/i18n/jquery.ui.datepicker-es.js | 25 + .../js/i18n/jquery.ui.datepicker-et.js | 25 + .../js/i18n/jquery.ui.datepicker-eu.js | 25 + .../js/i18n/jquery.ui.datepicker-fa.js | 61 + .../js/i18n/jquery.ui.datepicker-fi.js | 25 + .../js/i18n/jquery.ui.datepicker-fo.js | 25 + .../js/i18n/jquery.ui.datepicker-fr-CH.js | 25 + .../js/i18n/jquery.ui.datepicker-fr.js | 27 + .../js/i18n/jquery.ui.datepicker-gl.js | 25 + .../js/i18n/jquery.ui.datepicker-he.js | 25 + .../js/i18n/jquery.ui.datepicker-hi.js | 25 + .../js/i18n/jquery.ui.datepicker-hr.js | 25 + .../js/i18n/jquery.ui.datepicker-hu.js | 25 + .../js/i18n/jquery.ui.datepicker-hy.js | 25 + .../js/i18n/jquery.ui.datepicker-id.js | 25 + .../js/i18n/jquery.ui.datepicker-is.js | 25 + .../js/i18n/jquery.ui.datepicker-it.js | 25 + .../js/i18n/jquery.ui.datepicker-ja.js | 25 + .../js/i18n/jquery.ui.datepicker-ka.js | 23 + .../js/i18n/jquery.ui.datepicker-kk.js | 25 + .../js/i18n/jquery.ui.datepicker-km.js | 25 + .../js/i18n/jquery.ui.datepicker-ko.js | 25 + .../js/i18n/jquery.ui.datepicker-kz.js | 25 + .../js/i18n/jquery.ui.datepicker-lb.js | 25 + .../js/i18n/jquery.ui.datepicker-lt.js | 25 + .../js/i18n/jquery.ui.datepicker-lv.js | 25 + .../js/i18n/jquery.ui.datepicker-mk.js | 25 + .../js/i18n/jquery.ui.datepicker-ml.js | 25 + .../js/i18n/jquery.ui.datepicker-ms.js | 25 + .../js/i18n/jquery.ui.datepicker-nl-BE.js | 25 + .../js/i18n/jquery.ui.datepicker-nl.js | 25 + .../js/i18n/jquery.ui.datepicker-no.js | 25 + .../js/i18n/jquery.ui.datepicker-pl.js | 25 + .../js/i18n/jquery.ui.datepicker-pt-BR.js | 25 + .../js/i18n/jquery.ui.datepicker-pt.js | 24 + .../js/i18n/jquery.ui.datepicker-rm.js | 23 + .../js/i18n/jquery.ui.datepicker-ro.js | 28 + .../js/i18n/jquery.ui.datepicker-ru.js | 25 + .../js/i18n/jquery.ui.datepicker-sk.js | 25 + .../js/i18n/jquery.ui.datepicker-sl.js | 26 + .../js/i18n/jquery.ui.datepicker-sq.js | 25 + .../js/i18n/jquery.ui.datepicker-sr-SR.js | 25 + .../js/i18n/jquery.ui.datepicker-sr.js | 25 + .../js/i18n/jquery.ui.datepicker-sv.js | 25 + .../js/i18n/jquery.ui.datepicker-ta.js | 25 + .../js/i18n/jquery.ui.datepicker-th.js | 25 + .../js/i18n/jquery.ui.datepicker-tj.js | 25 + .../js/i18n/jquery.ui.datepicker-tr.js | 25 + .../js/i18n/jquery.ui.datepicker-uk.js | 26 + .../js/i18n/jquery.ui.datepicker-vi.js | 25 + .../js/i18n/jquery.ui.datepicker-zh-CN.js | 25 + .../js/i18n/jquery.ui.datepicker-zh-HK.js | 25 + .../js/i18n/jquery.ui.datepicker-zh-TW.js | 25 + .../js/jquery-ui-accessible-datepicker.js | 237 + .../rc/plugins/jqueryui/js/jquery-ui.min.js | 228 + .../jqueryui/js/jquery.minicolors.min.js | 11 + .../rc/plugins/jqueryui/js/jquery.tagedit.js | 683 ++ .../rc/plugins/jqueryui/tests/Jqueryui.php | 23 + .../themes/classic/images/buttongradient.png | Bin 0 -> 193 bytes .../themes/classic/images/listheader.png | Bin 0 -> 356 bytes .../images/ui-icons_444444_256x240.png | Bin 0 -> 6992 bytes .../images/ui-icons_555555_256x240.png | Bin 0 -> 6988 bytes .../images/ui-icons_777620_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_777777_256x240.png | Bin 0 -> 6999 bytes .../images/ui-icons_cc0000_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 6299 bytes .../jqueryui/themes/classic/jquery-ui.css | 1356 +++ .../themes/classic/jquery-ui.css.diff | 172 + .../themes/larry/images/animated-overlay.gif | Bin 0 -> 1738 bytes .../themes/larry/images/jquery.minicolors.png | Bin 0 -> 68627 bytes .../themes/larry/images/ui-dialog-close.png | Bin 0 -> 644 bytes .../larry/images/ui-icons-datepicker.png | Bin 0 -> 323 bytes .../larry/images/ui-icons_444444_256x240.png | Bin 0 -> 6992 bytes .../larry/images/ui-icons_555555_256x240.png | Bin 0 -> 6988 bytes .../larry/images/ui-icons_777620_256x240.png | Bin 0 -> 4549 bytes .../larry/images/ui-icons_777777_256x240.png | Bin 0 -> 6999 bytes .../larry/images/ui-icons_cc0000_256x240.png | Bin 0 -> 4549 bytes .../larry/images/ui-icons_ffffff_256x240.png | Bin 0 -> 6299 bytes .../jqueryui/themes/larry/jquery-ui.css | 1620 +++ .../jqueryui/themes/larry/jquery-ui.css.diff | 556 + .../themes/larry/jquery.minicolors.css | 327 + .../plugins/jqueryui/themes/larry/tagedit.css | 105 + .../krb_authentication/config.inc.php.dist | 13 + .../krb_authentication/krb_authentication.php | 109 + .../tests/KrbAuthentication.php | 23 + data/web/rc/plugins/managesieve/Changelog | 363 + .../codemirror/addon/selection/active-line.js | 74 + .../addon/selection/mark-selection.js | 118 + .../addon/selection/selection-pointer.js | 98 + .../managesieve/codemirror/lib/codemirror.css | 341 + .../managesieve/codemirror/lib/codemirror.js | 9109 ++++++++++++++++ .../codemirror/lib/codemirror.min.js | 301 + .../codemirror/mode/sieve/index.html | 93 + .../codemirror/mode/sieve/sieve.js | 193 + data/web/rc/plugins/managesieve/composer.json | 33 + .../plugins/managesieve/config.inc.php.dist | 108 + .../helpdocs/en_US/settings-filters.rst | 55 + .../helpdocs/en_US/settings-vacation.rst | 58 + .../helpdocs/po/settings-filters.pot | 113 + .../helpdocs/po/settings-vacation.pot | 93 + .../managesieve/lib/Roundcube/rcube_sieve.php | 456 + .../lib/Roundcube/rcube_sieve_engine.php | 2743 +++++ .../lib/Roundcube/rcube_sieve_script.php | 1323 +++ .../lib/Roundcube/rcube_sieve_vacation.php | 935 ++ .../managesieve/localization/ar_SA.inc | 186 + .../plugins/managesieve/localization/ast.inc | 50 + .../managesieve/localization/az_AZ.inc | 187 + .../managesieve/localization/be_BE.inc | 187 + .../managesieve/localization/bg_BG.inc | 240 + .../plugins/managesieve/localization/br.inc | 237 + .../managesieve/localization/bs_BA.inc | 223 + .../managesieve/localization/ca_ES.inc | 222 + .../managesieve/localization/cs_CZ.inc | 229 + .../managesieve/localization/cy_GB.inc | 240 + .../managesieve/localization/da_DK.inc | 204 + .../managesieve/localization/de_CH.inc | 238 + .../managesieve/localization/de_DE.inc | 240 + .../managesieve/localization/el_GR.inc | 237 + .../managesieve/localization/en_CA.inc | 207 + .../managesieve/localization/en_GB.inc | 237 + .../managesieve/localization/en_US.inc | 245 + .../plugins/managesieve/localization/eo.inc | 51 + .../managesieve/localization/es_419.inc | 222 + .../managesieve/localization/es_AR.inc | 222 + .../managesieve/localization/es_ES.inc | 240 + .../managesieve/localization/et_EE.inc | 177 + .../managesieve/localization/eu_ES.inc | 223 + .../managesieve/localization/fa_AF.inc | 85 + .../managesieve/localization/fa_IR.inc | 222 + .../managesieve/localization/fi_FI.inc | 193 + .../managesieve/localization/fo_FO.inc | 225 + .../managesieve/localization/fr_FR.inc | 240 + .../managesieve/localization/fy_NL.inc | 41 + .../managesieve/localization/gl_ES.inc | 205 + .../managesieve/localization/he_IL.inc | 238 + .../managesieve/localization/hr_HR.inc | 193 + .../managesieve/localization/hu_HU.inc | 240 + .../managesieve/localization/hy_AM.inc | 138 + .../plugins/managesieve/localization/ia.inc | 223 + .../managesieve/localization/id_ID.inc | 238 + .../managesieve/localization/is_IS.inc | 22 + .../managesieve/localization/it_IT.inc | 231 + .../managesieve/localization/ja_JP.inc | 240 + .../managesieve/localization/ka_GE.inc | 22 + .../managesieve/localization/km_KH.inc | 116 + .../managesieve/localization/ko_KR.inc | 232 + .../plugins/managesieve/localization/ku.inc | 88 + .../managesieve/localization/lb_LU.inc | 49 + .../managesieve/localization/lt_LT.inc | 234 + .../managesieve/localization/lv_LV.inc | 235 + .../managesieve/localization/ml_IN.inc | 147 + .../managesieve/localization/mn_MN.inc | 48 + .../managesieve/localization/mr_IN.inc | 34 + .../managesieve/localization/nb_NO.inc | 187 + .../managesieve/localization/nl_BE.inc | 20 + .../managesieve/localization/nl_NL.inc | 238 + .../managesieve/localization/nn_NO.inc | 152 + .../managesieve/localization/pl_PL.inc | 240 + .../managesieve/localization/pt_BR.inc | 238 + .../managesieve/localization/pt_PT.inc | 240 + .../managesieve/localization/ro_RO.inc | 200 + .../managesieve/localization/ru_RU.inc | 240 + .../managesieve/localization/si_LK.inc | 42 + .../managesieve/localization/sk_SK.inc | 240 + .../managesieve/localization/sl_SI.inc | 240 + .../managesieve/localization/sq_AL.inc | 234 + .../managesieve/localization/sr_CS.inc | 54 + .../managesieve/localization/sv_SE.inc | 240 + .../managesieve/localization/th_TH.inc | 45 + .../managesieve/localization/tr_TR.inc | 240 + .../plugins/managesieve/localization/tzl.inc | 39 + .../managesieve/localization/uk_UA.inc | 238 + .../managesieve/localization/vi_VN.inc | 207 + .../managesieve/localization/zh_CN.inc | 238 + .../managesieve/localization/zh_TW.inc | 171 + .../web/rc/plugins/managesieve/managesieve.js | 1177 +++ .../rc/plugins/managesieve/managesieve.min.js | 68 + .../rc/plugins/managesieve/managesieve.php | 291 + .../managesieve/skins/classic/images/add.png | Bin 0 -> 280 bytes .../managesieve/skins/classic/images/del.png | Bin 0 -> 247 bytes .../skins/classic/images/down_small.gif | Bin 0 -> 106 bytes .../skins/classic/images/erase.png | Bin 0 -> 453 bytes .../skins/classic/images/filter.png | Bin 0 -> 547 bytes .../skins/classic/images/up_small.gif | Bin 0 -> 106 bytes .../managesieve/skins/classic/managesieve.css | 481 + .../skins/classic/managesieve.min.css | 1 + .../skins/classic/managesieve_mail.css | 62 + .../skins/classic/managesieve_mail.min.css | 1 + .../skins/classic/templates/filteredit.html | 32 + .../skins/classic/templates/managesieve.html | 88 + .../skins/classic/templates/setedit.html | 23 + .../skins/classic/templates/seteditraw.html | 23 + .../skins/classic/templates/vacation.html | 31 + .../managesieve/skins/larry/images/add.png | Bin 0 -> 280 bytes .../managesieve/skins/larry/images/del.png | Bin 0 -> 247 bytes .../skins/larry/images/down_small.gif | Bin 0 -> 106 bytes .../managesieve/skins/larry/images/erase.png | Bin 0 -> 453 bytes .../skins/larry/images/up_small.gif | Bin 0 -> 106 bytes .../skins/larry/images/vacation_icons.png | Bin 0 -> 767 bytes .../managesieve/skins/larry/managesieve.css | 492 + .../skins/larry/managesieve.min.css | 1 + .../skins/larry/managesieve_mail.css | 62 + .../skins/larry/managesieve_mail.min.css | 1 + .../skins/larry/templates/filteredit.html | 32 + .../skins/larry/templates/managesieve.html | 82 + .../skins/larry/templates/setedit.html | 24 + .../skins/larry/templates/seteditraw.html | 24 + .../skins/larry/templates/vacation.html | 32 + .../plugins/managesieve/tests/Managesieve.php | 23 + .../rc/plugins/managesieve/tests/Parser.php | 62 + .../plugins/managesieve/tests/Tokenizer.php | 33 + .../rc/plugins/managesieve/tests/Vacation.php | 66 + .../rc/plugins/managesieve/tests/src/parser | 52 + .../plugins/managesieve/tests/src/parser.out | 52 + .../plugins/managesieve/tests/src/parser_body | 17 + .../plugins/managesieve/tests/src/parser_date | 21 + .../managesieve/tests/src/parser_duplicate | 16 + .../managesieve/tests/src/parser_enotify_a | 19 + .../managesieve/tests/src/parser_enotify_b | 18 + .../managesieve/tests/src/parser_imapflags | 7 + .../managesieve/tests/src/parser_include | 7 + .../managesieve/tests/src/parser_index | 24 + .../managesieve/tests/src/parser_kep14 | 2 + .../managesieve/tests/src/parser_kep14.out | 3 + .../managesieve/tests/src/parser_nesting | 25 + .../managesieve/tests/src/parser_nesting.out | 9 + .../managesieve/tests/src/parser_notify_a | 18 + .../managesieve/tests/src/parser_notify_b | 17 + .../managesieve/tests/src/parser_prefix | 5 + .../managesieve/tests/src/parser_relational | 6 + .../managesieve/tests/src/parser_subaddress | 11 + .../managesieve/tests/src/parser_vacation | 12 + .../tests/src/parser_vacation_seconds | 12 + .../managesieve/tests/src/parser_variables | 24 + data/web/rc/plugins/markasjunk/composer.json | 24 + .../rc/plugins/markasjunk/localization/ar.inc | 20 + .../plugins/markasjunk/localization/ar_SA.inc | 21 + .../plugins/markasjunk/localization/ast.inc | 21 + .../plugins/markasjunk/localization/az_AZ.inc | 21 + .../plugins/markasjunk/localization/be_BE.inc | 21 + .../plugins/markasjunk/localization/bg_BG.inc | 21 + .../rc/plugins/markasjunk/localization/br.inc | 21 + .../plugins/markasjunk/localization/bs_BA.inc | 21 + .../plugins/markasjunk/localization/ca_ES.inc | 21 + .../plugins/markasjunk/localization/cs_CZ.inc | 21 + .../plugins/markasjunk/localization/cy_GB.inc | 21 + .../plugins/markasjunk/localization/da_DK.inc | 21 + .../plugins/markasjunk/localization/de_CH.inc | 21 + .../plugins/markasjunk/localization/de_DE.inc | 21 + .../plugins/markasjunk/localization/el_GR.inc | 21 + .../plugins/markasjunk/localization/en_CA.inc | 21 + .../plugins/markasjunk/localization/en_GB.inc | 21 + .../plugins/markasjunk/localization/en_US.inc | 24 + .../rc/plugins/markasjunk/localization/eo.inc | 21 + .../markasjunk/localization/es_419.inc | 21 + .../plugins/markasjunk/localization/es_AR.inc | 21 + .../plugins/markasjunk/localization/es_ES.inc | 21 + .../plugins/markasjunk/localization/et_EE.inc | 21 + .../plugins/markasjunk/localization/eu_ES.inc | 21 + .../plugins/markasjunk/localization/fa_AF.inc | 21 + .../plugins/markasjunk/localization/fa_IR.inc | 21 + .../plugins/markasjunk/localization/fi_FI.inc | 21 + .../plugins/markasjunk/localization/fo_FO.inc | 21 + .../plugins/markasjunk/localization/fr_FR.inc | 21 + .../plugins/markasjunk/localization/fy_NL.inc | 19 + .../plugins/markasjunk/localization/gl_ES.inc | 21 + .../plugins/markasjunk/localization/he_IL.inc | 21 + .../plugins/markasjunk/localization/hr_HR.inc | 21 + .../plugins/markasjunk/localization/hu_HU.inc | 21 + .../plugins/markasjunk/localization/hy_AM.inc | 21 + .../rc/plugins/markasjunk/localization/ia.inc | 21 + .../plugins/markasjunk/localization/id_ID.inc | 21 + .../plugins/markasjunk/localization/is_IS.inc | 21 + .../plugins/markasjunk/localization/it_IT.inc | 21 + .../plugins/markasjunk/localization/ja_JP.inc | 21 + .../plugins/markasjunk/localization/km_KH.inc | 21 + .../plugins/markasjunk/localization/ko_KR.inc | 21 + .../rc/plugins/markasjunk/localization/ku.inc | 21 + .../plugins/markasjunk/localization/lb_LU.inc | 21 + .../plugins/markasjunk/localization/lt_LT.inc | 21 + .../plugins/markasjunk/localization/lv_LV.inc | 21 + .../plugins/markasjunk/localization/ml_IN.inc | 21 + .../plugins/markasjunk/localization/mn_MN.inc | 21 + .../plugins/markasjunk/localization/mr_IN.inc | 20 + .../plugins/markasjunk/localization/nb_NO.inc | 21 + .../plugins/markasjunk/localization/nl_BE.inc | 21 + .../plugins/markasjunk/localization/nl_NL.inc | 21 + .../plugins/markasjunk/localization/nn_NO.inc | 21 + .../plugins/markasjunk/localization/pl_PL.inc | 21 + .../plugins/markasjunk/localization/pt_BR.inc | 21 + .../plugins/markasjunk/localization/pt_PT.inc | 21 + .../plugins/markasjunk/localization/ro_RO.inc | 21 + .../plugins/markasjunk/localization/ru_RU.inc | 21 + .../plugins/markasjunk/localization/si_LK.inc | 20 + .../plugins/markasjunk/localization/sk_SK.inc | 21 + .../plugins/markasjunk/localization/sl_SI.inc | 21 + .../plugins/markasjunk/localization/sq_AL.inc | 21 + .../plugins/markasjunk/localization/sr_CS.inc | 21 + .../plugins/markasjunk/localization/sv_SE.inc | 21 + .../plugins/markasjunk/localization/tr_TR.inc | 21 + .../plugins/markasjunk/localization/uk_UA.inc | 21 + .../plugins/markasjunk/localization/vi_VN.inc | 21 + .../plugins/markasjunk/localization/zh_CN.inc | 21 + .../plugins/markasjunk/localization/zh_TW.inc | 21 + data/web/rc/plugins/markasjunk/markasjunk.js | 43 + .../rc/plugins/markasjunk/markasjunk.min.js | 18 + data/web/rc/plugins/markasjunk/markasjunk.php | 77 + .../markasjunk/skins/classic/junk_act.png | Bin 0 -> 1995 bytes .../markasjunk/skins/classic/junk_pas.png | Bin 0 -> 1988 bytes .../markasjunk/skins/classic/markasjunk.css | 6 + .../skins/classic/markasjunk.min.css | 1 + .../plugins/markasjunk/skins/larry/.gitignore | 0 .../plugins/markasjunk/tests/Markasjunk.php | 23 + .../rc/plugins/new_user_dialog/composer.json | 24 + .../new_user_dialog/localization/ar.inc | 20 + .../new_user_dialog/localization/ar_SA.inc | 20 + .../new_user_dialog/localization/ast.inc | 20 + .../new_user_dialog/localization/az_AZ.inc | 20 + .../new_user_dialog/localization/be_BE.inc | 20 + .../new_user_dialog/localization/bg_BG.inc | 20 + .../new_user_dialog/localization/br.inc | 20 + .../new_user_dialog/localization/bs_BA.inc | 20 + .../new_user_dialog/localization/ca_ES.inc | 20 + .../new_user_dialog/localization/cs_CZ.inc | 20 + .../new_user_dialog/localization/cy_GB.inc | 20 + .../new_user_dialog/localization/da_DK.inc | 20 + .../new_user_dialog/localization/de_CH.inc | 20 + .../new_user_dialog/localization/de_DE.inc | 20 + .../new_user_dialog/localization/el_GR.inc | 20 + .../new_user_dialog/localization/en_CA.inc | 20 + .../new_user_dialog/localization/en_GB.inc | 20 + .../new_user_dialog/localization/en_US.inc | 23 + .../new_user_dialog/localization/eo.inc | 20 + .../new_user_dialog/localization/es_419.inc | 20 + .../new_user_dialog/localization/es_AR.inc | 20 + .../new_user_dialog/localization/es_ES.inc | 20 + .../new_user_dialog/localization/et_EE.inc | 20 + .../new_user_dialog/localization/eu_ES.inc | 20 + .../new_user_dialog/localization/fa_AF.inc | 20 + .../new_user_dialog/localization/fa_IR.inc | 20 + .../new_user_dialog/localization/fi_FI.inc | 20 + .../new_user_dialog/localization/fo_FO.inc | 20 + .../new_user_dialog/localization/fr_FR.inc | 20 + .../new_user_dialog/localization/gl_ES.inc | 20 + .../new_user_dialog/localization/he_IL.inc | 20 + .../new_user_dialog/localization/hr_HR.inc | 20 + .../new_user_dialog/localization/hu_HU.inc | 20 + .../new_user_dialog/localization/hy_AM.inc | 20 + .../new_user_dialog/localization/ia.inc | 20 + .../new_user_dialog/localization/id_ID.inc | 20 + .../new_user_dialog/localization/it_IT.inc | 20 + .../new_user_dialog/localization/ja_JP.inc | 20 + .../new_user_dialog/localization/km_KH.inc | 20 + .../new_user_dialog/localization/ko_KR.inc | 20 + .../new_user_dialog/localization/ku.inc | 20 + .../new_user_dialog/localization/ku_IQ.inc | 20 + .../new_user_dialog/localization/lb_LU.inc | 20 + .../new_user_dialog/localization/lt_LT.inc | 20 + .../new_user_dialog/localization/lv_LV.inc | 20 + .../new_user_dialog/localization/ml_IN.inc | 20 + .../new_user_dialog/localization/mn_MN.inc | 20 + .../new_user_dialog/localization/mr_IN.inc | 20 + .../new_user_dialog/localization/nb_NO.inc | 20 + .../new_user_dialog/localization/nl_BE.inc | 20 + .../new_user_dialog/localization/nl_NL.inc | 20 + .../new_user_dialog/localization/nn_NO.inc | 20 + .../new_user_dialog/localization/pl_PL.inc | 20 + .../new_user_dialog/localization/pt_BR.inc | 20 + .../new_user_dialog/localization/pt_PT.inc | 20 + .../new_user_dialog/localization/ro_RO.inc | 20 + .../new_user_dialog/localization/ru_RU.inc | 20 + .../new_user_dialog/localization/sk_SK.inc | 20 + .../new_user_dialog/localization/sl_SI.inc | 20 + .../new_user_dialog/localization/sq_AL.inc | 20 + .../new_user_dialog/localization/sr_CS.inc | 20 + .../new_user_dialog/localization/sv_SE.inc | 20 + .../new_user_dialog/localization/tr_TR.inc | 20 + .../new_user_dialog/localization/uk_UA.inc | 20 + .../new_user_dialog/localization/vi_VN.inc | 20 + .../new_user_dialog/localization/zh_CN.inc | 20 + .../new_user_dialog/localization/zh_TW.inc | 20 + .../new_user_dialog/new_user_dialog.php | 174 + .../plugins/new_user_dialog/newuserdialog.css | 39 + .../new_user_dialog/newuserdialog.min.css | 1 + .../new_user_dialog/tests/NewUserDialog.php | 23 + .../plugins/new_user_identity/composer.json | 24 + .../new_user_identity/config.inc.php.dist | 15 + .../new_user_identity/new_user_identity.php | 132 + .../tests/NewUserIdentity.php | 23 + .../rc/plugins/newmail_notifier/composer.json | 24 + .../newmail_notifier/config.inc.php.dist | 15 + .../rc/plugins/newmail_notifier/favicon.ico | Bin 0 -> 1734 bytes .../newmail_notifier/localization/ar_SA.inc | 28 + .../newmail_notifier/localization/ast.inc | 28 + .../newmail_notifier/localization/az_AZ.inc | 28 + .../newmail_notifier/localization/be_BE.inc | 28 + .../newmail_notifier/localization/bg_BG.inc | 28 + .../newmail_notifier/localization/br.inc | 28 + .../newmail_notifier/localization/bs_BA.inc | 28 + .../newmail_notifier/localization/ca_ES.inc | 28 + .../newmail_notifier/localization/cs_CZ.inc | 28 + .../newmail_notifier/localization/cy_GB.inc | 28 + .../newmail_notifier/localization/da_DK.inc | 28 + .../newmail_notifier/localization/de_CH.inc | 28 + .../newmail_notifier/localization/de_DE.inc | 28 + .../newmail_notifier/localization/el_GR.inc | 28 + .../newmail_notifier/localization/en_CA.inc | 28 + .../newmail_notifier/localization/en_GB.inc | 28 + .../newmail_notifier/localization/en_US.inc | 30 + .../newmail_notifier/localization/eo.inc | 27 + .../newmail_notifier/localization/es_419.inc | 28 + .../newmail_notifier/localization/es_AR.inc | 28 + .../newmail_notifier/localization/es_ES.inc | 28 + .../newmail_notifier/localization/et_EE.inc | 28 + .../newmail_notifier/localization/eu_ES.inc | 28 + .../newmail_notifier/localization/fa_IR.inc | 28 + .../newmail_notifier/localization/fi_FI.inc | 28 + .../newmail_notifier/localization/fo_FO.inc | 28 + .../newmail_notifier/localization/fr_FR.inc | 28 + .../newmail_notifier/localization/fy_NL.inc | 20 + .../newmail_notifier/localization/gl_ES.inc | 28 + .../newmail_notifier/localization/he_IL.inc | 28 + .../newmail_notifier/localization/hr_HR.inc | 28 + .../newmail_notifier/localization/hu_HU.inc | 28 + .../newmail_notifier/localization/hy_AM.inc | 28 + .../newmail_notifier/localization/ia.inc | 28 + .../newmail_notifier/localization/id_ID.inc | 28 + .../newmail_notifier/localization/it_IT.inc | 28 + .../newmail_notifier/localization/ja_JP.inc | 28 + .../newmail_notifier/localization/km_KH.inc | 28 + .../newmail_notifier/localization/ko_KR.inc | 28 + .../newmail_notifier/localization/ku.inc | 28 + .../newmail_notifier/localization/ku_IQ.inc | 19 + .../newmail_notifier/localization/lb_LU.inc | 28 + .../newmail_notifier/localization/lt_LT.inc | 28 + .../newmail_notifier/localization/lv_LV.inc | 28 + .../newmail_notifier/localization/ml_IN.inc | 28 + .../newmail_notifier/localization/mn_MN.inc | 28 + .../newmail_notifier/localization/mr_IN.inc | 23 + .../newmail_notifier/localization/nb_NO.inc | 28 + .../newmail_notifier/localization/nl_BE.inc | 28 + .../newmail_notifier/localization/nl_NL.inc | 28 + .../newmail_notifier/localization/nn_NO.inc | 27 + .../newmail_notifier/localization/pl_PL.inc | 28 + .../newmail_notifier/localization/pt_BR.inc | 28 + .../newmail_notifier/localization/pt_PT.inc | 28 + .../newmail_notifier/localization/ro_RO.inc | 28 + .../newmail_notifier/localization/ru_RU.inc | 28 + .../newmail_notifier/localization/si_LK.inc | 19 + .../newmail_notifier/localization/sk_SK.inc | 28 + .../newmail_notifier/localization/sl_SI.inc | 28 + .../newmail_notifier/localization/sq_AL.inc | 28 + .../newmail_notifier/localization/sr_CS.inc | 28 + .../newmail_notifier/localization/sv_SE.inc | 28 + .../newmail_notifier/localization/ti.inc | 27 + .../newmail_notifier/localization/tr_TR.inc | 28 + .../newmail_notifier/localization/uk_UA.inc | 28 + .../newmail_notifier/localization/vi_VN.inc | 28 + .../newmail_notifier/localization/zh_CN.inc | 28 + .../newmail_notifier/localization/zh_TW.inc | 28 + data/web/rc/plugins/newmail_notifier/mail.png | Bin 0 -> 1408 bytes .../newmail_notifier/newmail_notifier.js | 160 + .../newmail_notifier/newmail_notifier.min.js | 24 + .../newmail_notifier/newmail_notifier.php | 215 + .../rc/plugins/newmail_notifier/overlay.ico | Bin 0 -> 1150 bytes .../web/rc/plugins/newmail_notifier/sound.mp3 | Bin 0 -> 7488 bytes .../web/rc/plugins/newmail_notifier/sound.wav | Bin 0 -> 10444 bytes .../tests/NewmailNotifier.php | 23 + data/web/rc/plugins/password/README | 387 + data/web/rc/plugins/password/composer.json | 24 + data/web/rc/plugins/password/config.inc.php | 489 + .../rc/plugins/password/config.inc.php.dist | 483 + .../rc/plugins/password/drivers/chpasswd.php | 54 + .../rc/plugins/password/drivers/cpanel.php | 115 + .../password/drivers/cpanel_webmail.php | 148 + .../rc/plugins/password/drivers/dbmail.php | 59 + .../plugins/password/drivers/directadmin.php | 502 + .../password/drivers/domainfactory.php | 100 + .../rc/plugins/password/drivers/expect.php | 73 + .../rc/plugins/password/drivers/gearman.php | 70 + .../web/rc/plugins/password/drivers/hmail.php | 76 + .../rc/plugins/password/drivers/kpasswd.php | 45 + data/web/rc/plugins/password/drivers/ldap.php | 223 + .../plugins/password/drivers/ldap_ppolicy.php | 96 + .../plugins/password/drivers/ldap_simple.php | 238 + data/web/rc/plugins/password/drivers/pam.php | 58 + .../web/rc/plugins/password/drivers/plesk.php | 241 + .../rc/plugins/password/drivers/poppassd.php | 86 + .../plugins/password/drivers/pw_usermod.php | 56 + data/web/rc/plugins/password/drivers/sasl.php | 60 + data/web/rc/plugins/password/drivers/smb.php | 74 + data/web/rc/plugins/password/drivers/sql.php | 172 + .../plugins/password/drivers/virtualmin.php | 94 + .../rc/plugins/password/drivers/vpopmaild.php | 71 + .../web/rc/plugins/password/drivers/ximss.php | 89 + .../web/rc/plugins/password/drivers/xmail.php | 119 + .../password/helpers/change_ldap_pass.pl | 87 + .../plugins/password/helpers/chgdbmailusers.c | 29 + .../plugins/password/helpers/chgsaslpasswd.c | 29 + .../password/helpers/chgvirtualminpasswd.c | 28 + .../password/helpers/chpass-wrapper.py | 32 + .../password/helpers/dovecot_hmacmd5.php | 191 + .../rc/plugins/password/helpers/passwd-expect | 267 + .../rc/plugins/password/localization/ar.inc | 30 + .../plugins/password/localization/ar_SA.inc | 30 + .../rc/plugins/password/localization/ast.inc | 31 + .../plugins/password/localization/az_AZ.inc | 30 + .../plugins/password/localization/be_BE.inc | 32 + .../plugins/password/localization/bg_BG.inc | 37 + .../rc/plugins/password/localization/br.inc | 33 + .../plugins/password/localization/bs_BA.inc | 32 + .../plugins/password/localization/ca_ES.inc | 32 + .../plugins/password/localization/cs_CZ.inc | 33 + .../plugins/password/localization/cy_GB.inc | 37 + .../plugins/password/localization/da_DK.inc | 37 + .../plugins/password/localization/de_CH.inc | 33 + .../plugins/password/localization/de_DE.inc | 37 + .../plugins/password/localization/el_GR.inc | 33 + .../plugins/password/localization/en_CA.inc | 30 + .../plugins/password/localization/en_GB.inc | 33 + .../plugins/password/localization/en_US.inc | 42 + .../rc/plugins/password/localization/eo.inc | 30 + .../plugins/password/localization/es_419.inc | 32 + .../plugins/password/localization/es_AR.inc | 32 + .../plugins/password/localization/es_ES.inc | 37 + .../plugins/password/localization/et_EE.inc | 32 + .../plugins/password/localization/eu_ES.inc | 33 + .../plugins/password/localization/fa_AF.inc | 30 + .../plugins/password/localization/fa_IR.inc | 32 + .../plugins/password/localization/fi_FI.inc | 33 + .../plugins/password/localization/fo_FO.inc | 33 + .../plugins/password/localization/fr_FR.inc | 37 + .../plugins/password/localization/fy_NL.inc | 18 + .../plugins/password/localization/gl_ES.inc | 32 + .../plugins/password/localization/he_IL.inc | 37 + .../plugins/password/localization/hr_HR.inc | 33 + .../plugins/password/localization/hu_HU.inc | 37 + .../plugins/password/localization/hy_AM.inc | 33 + .../rc/plugins/password/localization/ia.inc | 33 + .../plugins/password/localization/id_ID.inc | 37 + .../plugins/password/localization/is_IS.inc | 33 + .../plugins/password/localization/it_IT.inc | 37 + .../plugins/password/localization/ja_JP.inc | 37 + .../plugins/password/localization/km_KH.inc | 30 + .../plugins/password/localization/ko_KR.inc | 37 + .../rc/plugins/password/localization/ku.inc | 32 + .../plugins/password/localization/ku_IQ.inc | 29 + .../plugins/password/localization/lb_LU.inc | 30 + .../plugins/password/localization/lt_LT.inc | 33 + .../plugins/password/localization/lv_LV.inc | 33 + .../plugins/password/localization/ml_IN.inc | 32 + .../plugins/password/localization/mn_MN.inc | 32 + .../plugins/password/localization/nb_NO.inc | 30 + .../plugins/password/localization/nl_BE.inc | 33 + .../plugins/password/localization/nl_NL.inc | 33 + .../plugins/password/localization/nn_NO.inc | 30 + .../plugins/password/localization/pl_PL.inc | 37 + .../plugins/password/localization/pt_BR.inc | 37 + .../plugins/password/localization/pt_PT.inc | 37 + .../plugins/password/localization/ro_RO.inc | 32 + .../plugins/password/localization/ru_RU.inc | 37 + .../plugins/password/localization/sk_SK.inc | 37 + .../plugins/password/localization/sl_SI.inc | 37 + .../plugins/password/localization/sq_AL.inc | 37 + .../plugins/password/localization/sr_CS.inc | 32 + .../plugins/password/localization/sv_SE.inc | 37 + .../plugins/password/localization/th_TH.inc | 37 + .../rc/plugins/password/localization/ti.inc | 30 + .../plugins/password/localization/tr_TR.inc | 37 + .../plugins/password/localization/uk_UA.inc | 37 + .../plugins/password/localization/vi_VN.inc | 30 + .../plugins/password/localization/zh_CN.inc | 33 + .../plugins/password/localization/zh_TW.inc | 32 + data/web/rc/plugins/password/password.js | 54 + data/web/rc/plugins/password/password.min.js | 18 + data/web/rc/plugins/password/password.php | 679 ++ .../rc/plugins/password/tests/Password.php | 77 + .../redundant_attachments/composer.json | 30 + .../redundant_attachments/config.inc.php.dist | 17 + .../redundant_attachments.php | 237 + .../tests/RedundantAttachments.php | 23 + .../show_additional_headers/composer.json | 24 + .../show_additional_headers.php | 50 + .../tests/ShowAdditionalHeaders.php | 23 + .../squirrelmail_usercopy/composer.json | 24 + .../squirrelmail_usercopy/config.inc.php.dist | 28 + .../squirrelmail_usercopy.php | 260 + .../tests/SquirrelmailUsercopy.php | 23 + .../subscriptions_option/composer.json | 29 + .../localization/ar_SA.inc | 19 + .../subscriptions_option/localization/ast.inc | 19 + .../localization/az_AZ.inc | 19 + .../localization/be_BE.inc | 19 + .../localization/bg_BG.inc | 19 + .../subscriptions_option/localization/br.inc | 19 + .../localization/bs_BA.inc | 19 + .../localization/ca_ES.inc | 19 + .../localization/cs_CZ.inc | 19 + .../localization/cy_GB.inc | 19 + .../localization/da_DK.inc | 19 + .../localization/de_CH.inc | 19 + .../localization/de_DE.inc | 19 + .../localization/el_GR.inc | 19 + .../localization/en_CA.inc | 19 + .../localization/en_GB.inc | 19 + .../localization/en_US.inc | 22 + .../subscriptions_option/localization/eo.inc | 19 + .../localization/es_419.inc | 19 + .../localization/es_AR.inc | 19 + .../localization/es_ES.inc | 19 + .../localization/et_EE.inc | 19 + .../localization/eu_ES.inc | 19 + .../localization/fa_AF.inc | 19 + .../localization/fa_IR.inc | 19 + .../localization/fi_FI.inc | 19 + .../localization/fo_FO.inc | 19 + .../localization/fr_FR.inc | 19 + .../localization/gl_ES.inc | 19 + .../localization/he_IL.inc | 19 + .../localization/hr_HR.inc | 19 + .../localization/hu_HU.inc | 19 + .../localization/hy_AM.inc | 19 + .../subscriptions_option/localization/ia.inc | 19 + .../localization/id_ID.inc | 19 + .../localization/is_IS.inc | 19 + .../localization/it_IT.inc | 19 + .../localization/ja_JP.inc | 19 + .../localization/km_KH.inc | 19 + .../localization/ko_KR.inc | 19 + .../subscriptions_option/localization/ku.inc | 19 + .../localization/lb_LU.inc | 19 + .../localization/lt_LT.inc | 19 + .../localization/lv_LV.inc | 19 + .../localization/ml_IN.inc | 19 + .../localization/mn_MN.inc | 19 + .../localization/nb_NO.inc | 19 + .../localization/nl_NL.inc | 19 + .../localization/nn_NO.inc | 19 + .../localization/pl_PL.inc | 19 + .../localization/pt_BR.inc | 19 + .../localization/pt_PT.inc | 19 + .../localization/ro_RO.inc | 19 + .../localization/ru_RU.inc | 19 + .../localization/sk_SK.inc | 19 + .../localization/sl_SI.inc | 19 + .../localization/sq_AL.inc | 19 + .../localization/sr_CS.inc | 19 + .../localization/sv_SE.inc | 19 + .../localization/tr_TR.inc | 19 + .../localization/uk_UA.inc | 19 + .../localization/vi_VN.inc | 19 + .../localization/zh_CN.inc | 19 + .../localization/zh_TW.inc | 19 + .../subscriptions_option.php | 94 + .../tests/SubscriptionsOption.php | 23 + data/web/rc/plugins/userinfo/composer.json | 24 + .../rc/plugins/userinfo/localization/ar.inc | 21 + .../plugins/userinfo/localization/ar_SA.inc | 22 + .../rc/plugins/userinfo/localization/ast.inc | 22 + .../plugins/userinfo/localization/az_AZ.inc | 22 + .../plugins/userinfo/localization/be_BE.inc | 22 + .../plugins/userinfo/localization/bg_BG.inc | 22 + .../rc/plugins/userinfo/localization/br.inc | 22 + .../plugins/userinfo/localization/bs_BA.inc | 22 + .../plugins/userinfo/localization/ca_ES.inc | 22 + .../plugins/userinfo/localization/cs_CZ.inc | 22 + .../plugins/userinfo/localization/cy_GB.inc | 22 + .../plugins/userinfo/localization/da_DK.inc | 22 + .../plugins/userinfo/localization/de_CH.inc | 22 + .../plugins/userinfo/localization/de_DE.inc | 22 + .../plugins/userinfo/localization/el_GR.inc | 22 + .../plugins/userinfo/localization/en_CA.inc | 22 + .../plugins/userinfo/localization/en_GB.inc | 22 + .../plugins/userinfo/localization/en_US.inc | 25 + .../rc/plugins/userinfo/localization/eo.inc | 22 + .../plugins/userinfo/localization/es_419.inc | 22 + .../plugins/userinfo/localization/es_AR.inc | 22 + .../plugins/userinfo/localization/es_ES.inc | 22 + .../plugins/userinfo/localization/et_EE.inc | 22 + .../plugins/userinfo/localization/eu_ES.inc | 22 + .../plugins/userinfo/localization/fa_AF.inc | 22 + .../plugins/userinfo/localization/fa_IR.inc | 22 + .../plugins/userinfo/localization/fi_FI.inc | 22 + .../plugins/userinfo/localization/fo_FO.inc | 22 + .../plugins/userinfo/localization/fr_FR.inc | 22 + .../plugins/userinfo/localization/fy_NL.inc | 19 + .../plugins/userinfo/localization/gl_ES.inc | 22 + .../plugins/userinfo/localization/he_IL.inc | 22 + .../plugins/userinfo/localization/hr_HR.inc | 22 + .../plugins/userinfo/localization/hu_HU.inc | 22 + .../plugins/userinfo/localization/hy_AM.inc | 22 + .../rc/plugins/userinfo/localization/ia.inc | 22 + .../plugins/userinfo/localization/id_ID.inc | 22 + .../plugins/userinfo/localization/is_IS.inc | 22 + .../plugins/userinfo/localization/it_IT.inc | 22 + .../plugins/userinfo/localization/ja_JP.inc | 22 + .../plugins/userinfo/localization/km_KH.inc | 22 + .../plugins/userinfo/localization/ko_KR.inc | 22 + .../rc/plugins/userinfo/localization/ku.inc | 22 + .../plugins/userinfo/localization/ku_IQ.inc | 22 + .../plugins/userinfo/localization/lb_LU.inc | 22 + .../plugins/userinfo/localization/lt_LT.inc | 22 + .../plugins/userinfo/localization/lv_LV.inc | 22 + .../plugins/userinfo/localization/ml_IN.inc | 22 + .../plugins/userinfo/localization/mn_MN.inc | 22 + .../plugins/userinfo/localization/mr_IN.inc | 20 + .../plugins/userinfo/localization/nb_NO.inc | 22 + .../plugins/userinfo/localization/nl_BE.inc | 22 + .../plugins/userinfo/localization/nl_NL.inc | 22 + .../plugins/userinfo/localization/nn_NO.inc | 22 + .../plugins/userinfo/localization/pl_PL.inc | 22 + .../plugins/userinfo/localization/pt_BR.inc | 22 + .../plugins/userinfo/localization/pt_PT.inc | 22 + .../plugins/userinfo/localization/ro_RO.inc | 22 + .../plugins/userinfo/localization/ru_RU.inc | 22 + .../plugins/userinfo/localization/sk_SK.inc | 22 + .../plugins/userinfo/localization/sl_SI.inc | 22 + .../plugins/userinfo/localization/sq_AL.inc | 22 + .../plugins/userinfo/localization/sr_CS.inc | 22 + .../plugins/userinfo/localization/sv_SE.inc | 22 + .../rc/plugins/userinfo/localization/ti.inc | 22 + .../plugins/userinfo/localization/tr_TR.inc | 22 + .../plugins/userinfo/localization/uk_UA.inc | 22 + .../plugins/userinfo/localization/vi_VN.inc | 22 + .../plugins/userinfo/localization/zh_CN.inc | 22 + .../plugins/userinfo/localization/zh_TW.inc | 22 + .../rc/plugins/userinfo/tests/Userinfo.php | 23 + data/web/rc/plugins/userinfo/userinfo.js | 18 + data/web/rc/plugins/userinfo/userinfo.min.js | 1 + data/web/rc/plugins/userinfo/userinfo.php | 54 + .../plugins/vcard_attachments/composer.json | 29 + .../vcard_attachments/localization/ar.inc | 20 + .../vcard_attachments/localization/ar_SA.inc | 20 + .../vcard_attachments/localization/ast.inc | 20 + .../vcard_attachments/localization/az_AZ.inc | 20 + .../vcard_attachments/localization/be_BE.inc | 20 + .../vcard_attachments/localization/bg_BG.inc | 20 + .../vcard_attachments/localization/br.inc | 20 + .../vcard_attachments/localization/bs_BA.inc | 20 + .../vcard_attachments/localization/ca_ES.inc | 20 + .../vcard_attachments/localization/cs_CZ.inc | 20 + .../vcard_attachments/localization/cy_GB.inc | 20 + .../vcard_attachments/localization/da_DK.inc | 20 + .../vcard_attachments/localization/de_CH.inc | 20 + .../vcard_attachments/localization/de_DE.inc | 20 + .../vcard_attachments/localization/el_GR.inc | 20 + .../vcard_attachments/localization/en_CA.inc | 20 + .../vcard_attachments/localization/en_GB.inc | 20 + .../vcard_attachments/localization/en_US.inc | 25 + .../vcard_attachments/localization/eo.inc | 20 + .../vcard_attachments/localization/es_419.inc | 20 + .../vcard_attachments/localization/es_AR.inc | 20 + .../vcard_attachments/localization/es_ES.inc | 20 + .../vcard_attachments/localization/et_EE.inc | 20 + .../vcard_attachments/localization/eu_ES.inc | 20 + .../vcard_attachments/localization/fa_IR.inc | 20 + .../vcard_attachments/localization/fi_FI.inc | 20 + .../vcard_attachments/localization/fo_FO.inc | 20 + .../vcard_attachments/localization/fr_FR.inc | 20 + .../vcard_attachments/localization/gl_ES.inc | 20 + .../vcard_attachments/localization/he_IL.inc | 20 + .../vcard_attachments/localization/hr_HR.inc | 20 + .../vcard_attachments/localization/hu_HU.inc | 20 + .../vcard_attachments/localization/hy_AM.inc | 20 + .../vcard_attachments/localization/ia.inc | 20 + .../vcard_attachments/localization/id_ID.inc | 20 + .../vcard_attachments/localization/it_IT.inc | 20 + .../vcard_attachments/localization/ja_JP.inc | 20 + .../vcard_attachments/localization/km_KH.inc | 20 + .../vcard_attachments/localization/ko_KR.inc | 20 + .../vcard_attachments/localization/ku.inc | 20 + .../vcard_attachments/localization/lb_LU.inc | 20 + .../vcard_attachments/localization/lt_LT.inc | 20 + .../vcard_attachments/localization/lv_LV.inc | 20 + .../vcard_attachments/localization/ml_IN.inc | 20 + .../vcard_attachments/localization/mn_MN.inc | 20 + .../vcard_attachments/localization/mr_IN.inc | 20 + .../vcard_attachments/localization/nb_NO.inc | 20 + .../vcard_attachments/localization/nl_NL.inc | 20 + .../vcard_attachments/localization/nn_NO.inc | 20 + .../vcard_attachments/localization/pl_PL.inc | 20 + .../vcard_attachments/localization/pt_BR.inc | 20 + .../vcard_attachments/localization/pt_PT.inc | 20 + .../vcard_attachments/localization/ro_RO.inc | 20 + .../vcard_attachments/localization/ru_RU.inc | 20 + .../vcard_attachments/localization/si_LK.inc | 20 + .../vcard_attachments/localization/sk_SK.inc | 20 + .../vcard_attachments/localization/sl_SI.inc | 20 + .../vcard_attachments/localization/sq_AL.inc | 20 + .../vcard_attachments/localization/sr_CS.inc | 20 + .../vcard_attachments/localization/sv_SE.inc | 20 + .../vcard_attachments/localization/tr_TR.inc | 20 + .../vcard_attachments/localization/uk_UA.inc | 20 + .../vcard_attachments/localization/vi_VN.inc | 20 + .../vcard_attachments/localization/zh_CN.inc | 20 + .../vcard_attachments/localization/zh_TW.inc | 20 + .../vcard_attachments/skins/classic/style.css | 29 + .../skins/classic/style.min.css | 1 + .../vcard_attachments/skins/classic/vcard.png | Bin 0 -> 493 bytes .../skins/classic/vcard_add_contact.png | Bin 0 -> 1361 bytes .../vcard_attachments/skins/larry/style.css | 21 + .../skins/larry/style.min.css | 1 + .../vcard_attachments/skins/larry/vcard.png | Bin 0 -> 493 bytes .../skins/larry/vcard_add_contact.png | Bin 0 -> 1859 bytes .../tests/VcardAttachments.php | 23 + .../vcard_attachments/vcard_attachments.php | 327 + .../plugins/vcard_attachments/vcardattach.js | 72 + .../vcard_attachments/vcardattach.min.js | 19 + .../rc/plugins/virtuser_file/composer.json | 24 + .../virtuser_file/tests/VirtuserFile.php | 23 + .../plugins/virtuser_file/virtuser_file.php | 104 + .../rc/plugins/virtuser_query/composer.json | 24 + .../virtuser_query/tests/VirtuserQuery.php | 23 + .../plugins/virtuser_query/virtuser_query.php | 164 + data/web/rc/plugins/zipdownload/README | 34 + data/web/rc/plugins/zipdownload/composer.json | 30 + .../plugins/zipdownload/config.inc.php.dist | 18 + .../plugins/zipdownload/localization/ar.inc | 18 + .../zipdownload/localization/ar_SA.inc | 18 + .../plugins/zipdownload/localization/ast.inc | 22 + .../zipdownload/localization/az_AZ.inc | 18 + .../zipdownload/localization/be_BE.inc | 22 + .../zipdownload/localization/bg_BG.inc | 22 + .../plugins/zipdownload/localization/br.inc | 22 + .../zipdownload/localization/bs_BA.inc | 22 + .../zipdownload/localization/ca_ES.inc | 22 + .../zipdownload/localization/cs_CZ.inc | 22 + .../zipdownload/localization/cy_GB.inc | 22 + .../zipdownload/localization/da_DK.inc | 22 + .../zipdownload/localization/de_CH.inc | 22 + .../zipdownload/localization/de_DE.inc | 22 + .../zipdownload/localization/el_GR.inc | 22 + .../zipdownload/localization/en_CA.inc | 22 + .../zipdownload/localization/en_GB.inc | 22 + .../zipdownload/localization/en_US.inc | 24 + .../plugins/zipdownload/localization/eo.inc | 18 + .../zipdownload/localization/es_419.inc | 22 + .../zipdownload/localization/es_AR.inc | 22 + .../zipdownload/localization/es_ES.inc | 22 + .../zipdownload/localization/et_EE.inc | 22 + .../zipdownload/localization/eu_ES.inc | 22 + .../zipdownload/localization/fa_AF.inc | 18 + .../zipdownload/localization/fa_IR.inc | 22 + .../zipdownload/localization/fi_FI.inc | 22 + .../zipdownload/localization/fo_FO.inc | 22 + .../zipdownload/localization/fr_FR.inc | 22 + .../zipdownload/localization/fy_NL.inc | 18 + .../zipdownload/localization/gl_ES.inc | 22 + .../zipdownload/localization/he_IL.inc | 22 + .../zipdownload/localization/hr_HR.inc | 18 + .../zipdownload/localization/hu_HU.inc | 22 + .../zipdownload/localization/hy_AM.inc | 18 + .../plugins/zipdownload/localization/ia.inc | 22 + .../zipdownload/localization/id_ID.inc | 22 + .../zipdownload/localization/is_IS.inc | 22 + .../zipdownload/localization/it_IT.inc | 22 + .../zipdownload/localization/ja_JP.inc | 22 + .../zipdownload/localization/km_KH.inc | 18 + .../zipdownload/localization/ko_KR.inc | 22 + .../plugins/zipdownload/localization/ku.inc | 22 + .../zipdownload/localization/ku_IQ.inc | 22 + .../zipdownload/localization/lb_LU.inc | 22 + .../zipdownload/localization/lt_LT.inc | 22 + .../zipdownload/localization/lv_LV.inc | 22 + .../zipdownload/localization/ml_IN.inc | 22 + .../zipdownload/localization/mn_MN.inc | 22 + .../zipdownload/localization/nb_NO.inc | 22 + .../zipdownload/localization/nl_NL.inc | 22 + .../zipdownload/localization/nn_NO.inc | 18 + .../zipdownload/localization/pl_PL.inc | 22 + .../zipdownload/localization/pt_BR.inc | 22 + .../zipdownload/localization/pt_PT.inc | 22 + .../zipdownload/localization/ro_RO.inc | 18 + .../zipdownload/localization/ru_RU.inc | 22 + .../zipdownload/localization/sk_SK.inc | 22 + .../zipdownload/localization/sl_SI.inc | 22 + .../zipdownload/localization/sq_AL.inc | 22 + .../zipdownload/localization/sr_CS.inc | 22 + .../zipdownload/localization/sv_SE.inc | 22 + .../zipdownload/localization/tr_TR.inc | 22 + .../zipdownload/localization/uk_UA.inc | 22 + .../zipdownload/localization/vi_VN.inc | 22 + .../zipdownload/localization/zh_CN.inc | 22 + .../zipdownload/localization/zh_TW.inc | 22 + .../plugins/zipdownload/skins/classic/zip.png | Bin 0 -> 546 bytes .../zipdownload/skins/classic/zipdownload.css | 8 + .../skins/classic/zipdownload.min.css | 1 + .../zipdownload/skins/larry/zipdownload.css | 14 + .../skins/larry/zipdownload.min.css | 1 + .../plugins/zipdownload/tests/Zipdownload.php | 23 + .../web/rc/plugins/zipdownload/zipdownload.js | 99 + .../rc/plugins/zipdownload/zipdownload.min.js | 20 + .../rc/plugins/zipdownload/zipdownload.php | 362 + data/web/rc/program/include/clisetup.php | 32 + data/web/rc/program/include/iniset.php | 82 + data/web/rc/program/include/rcmail.php | 2524 +++++ .../rc/program/include/rcmail_html_page.php | 48 + .../web/rc/program/include/rcmail_install.php | 835 ++ data/web/rc/program/include/rcmail_output.php | 118 + .../rc/program/include/rcmail_output_cli.php | 88 + .../rc/program/include/rcmail_output_html.php | 2119 ++++ .../rc/program/include/rcmail_output_json.php | 260 + .../include/rcmail_string_replacer.php | 64 + data/web/rc/program/include/rcmail_utils.php | 372 + data/web/rc/program/js/app.js | 9407 +++++++++++++++++ data/web/rc/program/js/app.min.js | 343 + data/web/rc/program/js/common.js | 791 ++ data/web/rc/program/js/common.min.js | 52 + data/web/rc/program/js/editor.js | 854 ++ data/web/rc/program/js/editor.min.js | 56 + data/web/rc/program/js/googiespell.js | 1152 ++ data/web/rc/program/js/googiespell.min.js | 72 + data/web/rc/program/js/jquery.min.js | 38 + data/web/rc/program/js/jstz.min.js | 36 + data/web/rc/program/js/list.js | 1836 ++++ data/web/rc/program/js/list.min.js | 82 + data/web/rc/program/js/publickey.js | 483 + data/web/rc/program/js/publickey.min.js | 37 + data/web/rc/program/js/tinymce/langs/ar.js | 220 + data/web/rc/program/js/tinymce/langs/az.js | 219 + data/web/rc/program/js/tinymce/langs/be.js | 230 + data/web/rc/program/js/tinymce/langs/bg_BG.js | 219 + data/web/rc/program/js/tinymce/langs/bs.js | 219 + data/web/rc/program/js/tinymce/langs/ca.js | 219 + data/web/rc/program/js/tinymce/langs/cs.js | 219 + data/web/rc/program/js/tinymce/langs/cs_CZ.js | 219 + data/web/rc/program/js/tinymce/langs/cy.js | 219 + data/web/rc/program/js/tinymce/langs/da.js | 219 + data/web/rc/program/js/tinymce/langs/de.js | 219 + data/web/rc/program/js/tinymce/langs/de_AT.js | 219 + data/web/rc/program/js/tinymce/langs/el.js | 230 + data/web/rc/program/js/tinymce/langs/en_CA.js | 219 + data/web/rc/program/js/tinymce/langs/en_GB.js | 219 + data/web/rc/program/js/tinymce/langs/eo.js | 219 + data/web/rc/program/js/tinymce/langs/es.js | 219 + data/web/rc/program/js/tinymce/langs/es_MX.js | 219 + data/web/rc/program/js/tinymce/langs/et.js | 219 + data/web/rc/program/js/tinymce/langs/eu.js | 219 + data/web/rc/program/js/tinymce/langs/fa.js | 220 + data/web/rc/program/js/tinymce/langs/fa_IR.js | 220 + data/web/rc/program/js/tinymce/langs/fi.js | 219 + data/web/rc/program/js/tinymce/langs/fo.js | 219 + data/web/rc/program/js/tinymce/langs/fr_CH.js | 219 + data/web/rc/program/js/tinymce/langs/fr_FR.js | 219 + data/web/rc/program/js/tinymce/langs/ga.js | 219 + data/web/rc/program/js/tinymce/langs/gd.js | 219 + data/web/rc/program/js/tinymce/langs/gl.js | 219 + data/web/rc/program/js/tinymce/langs/he_IL.js | 220 + data/web/rc/program/js/tinymce/langs/hi_IN.js | 219 + data/web/rc/program/js/tinymce/langs/hr.js | 219 + data/web/rc/program/js/tinymce/langs/hu_HU.js | 219 + data/web/rc/program/js/tinymce/langs/hy.js | 219 + data/web/rc/program/js/tinymce/langs/id.js | 219 + data/web/rc/program/js/tinymce/langs/is_IS.js | 219 + data/web/rc/program/js/tinymce/langs/it.js | 219 + data/web/rc/program/js/tinymce/langs/ja.js | 219 + data/web/rc/program/js/tinymce/langs/ka_GE.js | 219 + data/web/rc/program/js/tinymce/langs/kab.js | 219 + data/web/rc/program/js/tinymce/langs/km_KH.js | 219 + data/web/rc/program/js/tinymce/langs/ko_KR.js | 219 + data/web/rc/program/js/tinymce/langs/ku.js | 219 + data/web/rc/program/js/tinymce/langs/ku_IQ.js | 219 + data/web/rc/program/js/tinymce/langs/lb.js | 219 + data/web/rc/program/js/tinymce/langs/lt.js | 219 + data/web/rc/program/js/tinymce/langs/lv.js | 219 + data/web/rc/program/js/tinymce/langs/mk_MK.js | 219 + data/web/rc/program/js/tinymce/langs/ml_IN.js | 219 + data/web/rc/program/js/tinymce/langs/nb_NO.js | 219 + data/web/rc/program/js/tinymce/langs/nl.js | 219 + data/web/rc/program/js/tinymce/langs/oc.js | 219 + data/web/rc/program/js/tinymce/langs/pl.js | 219 + data/web/rc/program/js/tinymce/langs/pt_BR.js | 219 + data/web/rc/program/js/tinymce/langs/pt_PT.js | 219 + .../web/rc/program/js/tinymce/langs/readme.md | 3 + data/web/rc/program/js/tinymce/langs/ro.js | 219 + data/web/rc/program/js/tinymce/langs/ru.js | 219 + data/web/rc/program/js/tinymce/langs/sk.js | 219 + data/web/rc/program/js/tinymce/langs/sl_SI.js | 219 + data/web/rc/program/js/tinymce/langs/sv_SE.js | 230 + data/web/rc/program/js/tinymce/langs/ta.js | 219 + data/web/rc/program/js/tinymce/langs/ta_IN.js | 219 + data/web/rc/program/js/tinymce/langs/tg.js | 219 + data/web/rc/program/js/tinymce/langs/th_TH.js | 219 + data/web/rc/program/js/tinymce/langs/tr.js | 219 + data/web/rc/program/js/tinymce/langs/tr_TR.js | 219 + data/web/rc/program/js/tinymce/langs/tt.js | 219 + data/web/rc/program/js/tinymce/langs/ug.js | 219 + data/web/rc/program/js/tinymce/langs/uk.js | 219 + data/web/rc/program/js/tinymce/langs/uk_UA.js | 219 + data/web/rc/program/js/tinymce/langs/vi.js | 219 + data/web/rc/program/js/tinymce/langs/vi_VN.js | 219 + data/web/rc/program/js/tinymce/langs/zh_CN.js | 219 + data/web/rc/program/js/tinymce/langs/zh_TW.js | 219 + .../js/tinymce/plugins/advlist/plugin.min.js | 1 + .../js/tinymce/plugins/anchor/plugin.min.js | 1 + .../js/tinymce/plugins/autolink/plugin.min.js | 1 + .../tinymce/plugins/autoresize/plugin.min.js | 1 + .../js/tinymce/plugins/autosave/plugin.min.js | 1 + .../js/tinymce/plugins/bbcode/plugin.min.js | 1 + .../js/tinymce/plugins/charmap/plugin.min.js | 1 + .../js/tinymce/plugins/code/plugin.min.js | 1 + .../tinymce/plugins/codesample/css/prism.css | 138 + .../tinymce/plugins/codesample/plugin.dev.js | 141 + .../tinymce/plugins/codesample/plugin.min.js | 1 + .../tinymce/plugins/colorpicker/plugin.min.js | 1 + .../tinymce/plugins/contextmenu/plugin.min.js | 1 + .../plugins/directionality/plugin.min.js | 1 + .../plugins/emoticons/img/smiley-cool.gif | Bin 0 -> 354 bytes .../plugins/emoticons/img/smiley-cry.gif | Bin 0 -> 329 bytes .../emoticons/img/smiley-embarassed.gif | Bin 0 -> 331 bytes .../emoticons/img/smiley-foot-in-mouth.gif | Bin 0 -> 342 bytes .../plugins/emoticons/img/smiley-frown.gif | Bin 0 -> 340 bytes .../plugins/emoticons/img/smiley-innocent.gif | Bin 0 -> 336 bytes .../plugins/emoticons/img/smiley-kiss.gif | Bin 0 -> 338 bytes .../plugins/emoticons/img/smiley-laughing.gif | Bin 0 -> 343 bytes .../emoticons/img/smiley-money-mouth.gif | Bin 0 -> 321 bytes .../plugins/emoticons/img/smiley-sealed.gif | Bin 0 -> 323 bytes .../plugins/emoticons/img/smiley-smile.gif | Bin 0 -> 344 bytes .../emoticons/img/smiley-surprised.gif | Bin 0 -> 338 bytes .../emoticons/img/smiley-tongue-out.gif | Bin 0 -> 328 bytes .../emoticons/img/smiley-undecided.gif | Bin 0 -> 337 bytes .../plugins/emoticons/img/smiley-wink.gif | Bin 0 -> 350 bytes .../plugins/emoticons/img/smiley-yell.gif | Bin 0 -> 336 bytes .../tinymce/plugins/emoticons/plugin.min.js | 1 + .../js/tinymce/plugins/example/dialog.html | 8 + .../js/tinymce/plugins/example/plugin.min.js | 1 + .../plugins/example_dependency/plugin.min.js | 1 + .../js/tinymce/plugins/fullpage/plugin.min.js | 1 + .../tinymce/plugins/fullscreen/plugin.min.js | 1 + .../js/tinymce/plugins/hr/plugin.min.js | 1 + .../js/tinymce/plugins/image/plugin.min.js | 1 + .../tinymce/plugins/imagetools/plugin.min.js | 1 + .../tinymce/plugins/importcss/plugin.min.js | 1 + .../plugins/insertdatetime/plugin.min.js | 1 + .../js/tinymce/plugins/layer/plugin.min.js | 1 + .../plugins/legacyoutput/plugin.min.js | 1 + .../js/tinymce/plugins/link/plugin.min.js | 1 + .../js/tinymce/plugins/lists/plugin.min.js | 1 + .../js/tinymce/plugins/media/plugin.min.js | 1 + .../tinymce/plugins/nonbreaking/plugin.min.js | 1 + .../tinymce/plugins/noneditable/plugin.min.js | 1 + .../tinymce/plugins/pagebreak/plugin.min.js | 1 + .../js/tinymce/plugins/paste/plugin.dev.js | 143 + .../js/tinymce/plugins/paste/plugin.min.js | 1 + .../js/tinymce/plugins/preview/plugin.min.js | 1 + .../js/tinymce/plugins/print/plugin.min.js | 1 + .../js/tinymce/plugins/save/plugin.min.js | 1 + .../plugins/searchreplace/plugin.min.js | 1 + .../plugins/spellchecker/plugin.dev.js | 139 + .../plugins/spellchecker/plugin.min.js | 1 + .../js/tinymce/plugins/tabfocus/plugin.min.js | 1 + .../js/tinymce/plugins/table/plugin.dev.js | 143 + .../js/tinymce/plugins/table/plugin.min.js | 2 + .../js/tinymce/plugins/template/plugin.min.js | 1 + .../tinymce/plugins/textcolor/plugin.min.js | 1 + .../tinymce/plugins/textpattern/plugin.min.js | 1 + .../js/tinymce/plugins/toc/plugin.min.js | 1 + .../plugins/visualblocks/css/visualblocks.css | 135 + .../plugins/visualblocks/plugin.min.js | 1 + .../tinymce/plugins/visualchars/plugin.min.js | 1 + .../tinymce/plugins/wordcount/plugin.min.js | 1 + .../skins/lightgray/AbsoluteLayout.less | 17 + .../tinymce/skins/lightgray/Animations.less | 10 + .../js/tinymce/skins/lightgray/Arrows.less | 115 + .../js/tinymce/skins/lightgray/Button.less | 175 + .../tinymce/skins/lightgray/ButtonGroup.less | 71 + .../js/tinymce/skins/lightgray/Checkbox.less | 49 + .../js/tinymce/skins/lightgray/ColorBox.less | 6 + .../tinymce/skins/lightgray/ColorButton.less | 72 + .../tinymce/skins/lightgray/ColorPicker.less | 80 + .../js/tinymce/skins/lightgray/ComboBox.less | 97 + .../js/tinymce/skins/lightgray/Container.less | 9 + .../skins/lightgray/Content.Inline.less | 4 + .../skins/lightgray/Content.Objects.less | 178 + .../js/tinymce/skins/lightgray/Content.less | 27 + .../js/tinymce/skins/lightgray/CropRect.less | 62 + .../js/tinymce/skins/lightgray/FieldSet.less | 15 + .../js/tinymce/skins/lightgray/FitLayout.less | 9 + .../tinymce/skins/lightgray/FloatPanel.less | 69 + .../tinymce/skins/lightgray/FlowLayout.less | 36 + .../js/tinymce/skins/lightgray/Icons.Ie7.less | 136 + .../js/tinymce/skins/lightgray/Icons.less | 182 + .../js/tinymce/skins/lightgray/Iframe.less | 6 + .../tinymce/skins/lightgray/ImagePanel.less | 25 + .../js/tinymce/skins/lightgray/InfoBox.less | 71 + .../js/tinymce/skins/lightgray/Label.less | 38 + .../js/tinymce/skins/lightgray/ListBox.less | 26 + .../js/tinymce/skins/lightgray/Menu.less | 34 + .../js/tinymce/skins/lightgray/MenuBar.less | 32 + .../tinymce/skins/lightgray/MenuButton.less | 34 + .../js/tinymce/skins/lightgray/MenuItem.less | 176 + .../js/tinymce/skins/lightgray/Mixins.less | 54 + .../tinymce/skins/lightgray/Notification.less | 142 + .../js/tinymce/skins/lightgray/Panel.less | 7 + .../js/tinymce/skins/lightgray/Path.less | 45 + .../js/tinymce/skins/lightgray/Progress.less | 34 + .../js/tinymce/skins/lightgray/Radio.less | 1 + .../js/tinymce/skins/lightgray/Reset.less | 32 + .../tinymce/skins/lightgray/ResizeHandle.less | 18 + .../tinymce/skins/lightgray/Scrollable.less | 44 + .../js/tinymce/skins/lightgray/SelectBox.less | 6 + .../js/tinymce/skins/lightgray/Sidebar.less | 49 + .../js/tinymce/skins/lightgray/Slider.less | 33 + .../js/tinymce/skins/lightgray/Spacer.less | 5 + .../tinymce/skins/lightgray/SplitButton.less | 49 + .../tinymce/skins/lightgray/StackLayout.less | 5 + .../js/tinymce/skins/lightgray/TabPanel.less | 44 + .../js/tinymce/skins/lightgray/TextBox.less | 41 + .../js/tinymce/skins/lightgray/Throbber.less | 19 + .../js/tinymce/skins/lightgray/TinyMCE.less | 159 + .../js/tinymce/skins/lightgray/ToolTip.less | 133 + .../js/tinymce/skins/lightgray/Variables.less | 218 + .../js/tinymce/skins/lightgray/Window.less | 127 + .../skins/lightgray/content.inline.min.css | 1 + .../tinymce/skins/lightgray/content.min.css | 1 + .../skins/lightgray/fonts/tinymce-small.eot | Bin 0 -> 9492 bytes .../skins/lightgray/fonts/tinymce-small.svg | 63 + .../skins/lightgray/fonts/tinymce-small.ttf | Bin 0 -> 9304 bytes .../skins/lightgray/fonts/tinymce-small.woff | Bin 0 -> 9380 bytes .../tinymce/skins/lightgray/fonts/tinymce.eot | Bin 0 -> 17572 bytes .../tinymce/skins/lightgray/fonts/tinymce.svg | 131 + .../tinymce/skins/lightgray/fonts/tinymce.ttf | Bin 0 -> 17408 bytes .../skins/lightgray/fonts/tinymce.woff | Bin 0 -> 17484 bytes .../js/tinymce/skins/lightgray/img/anchor.gif | Bin 0 -> 53 bytes .../js/tinymce/skins/lightgray/img/loader.gif | Bin 0 -> 2608 bytes .../js/tinymce/skins/lightgray/img/object.gif | Bin 0 -> 152 bytes .../js/tinymce/skins/lightgray/img/trans.gif | Bin 0 -> 43 bytes .../js/tinymce/skins/lightgray/skin.dev.less | 48 + .../tinymce/skins/lightgray/skin.ie7.dev.less | 47 + .../js/tinymce/skins/lightgray/skin.ie7.less | 2777 +++++ .../tinymce/skins/lightgray/skin.ie7.min.css | 1 + .../js/tinymce/skins/lightgray/skin.less | 2874 +++++ .../js/tinymce/skins/lightgray/skin.min.css | 1 + .../js/tinymce/themes/inlite/theme.min.js | 1 + .../js/tinymce/themes/modern/theme.min.js | 1 + data/web/rc/program/js/tinymce/tinymce.min.js | 31 + data/web/rc/program/js/treelist.js | 1198 +++ data/web/rc/program/js/treelist.min.js | 54 + data/web/rc/program/lib/Roundcube/README.md | 111 + .../rc/program/lib/Roundcube/bootstrap.php | 469 + data/web/rc/program/lib/Roundcube/html.php | 950 ++ data/web/rc/program/lib/Roundcube/rcube.php | 1713 +++ .../lib/Roundcube/rcube_addressbook.php | 705 ++ .../lib/Roundcube/rcube_base_replacer.php | 123 + .../program/lib/Roundcube/rcube_browser.php | 69 + .../rc/program/lib/Roundcube/rcube_cache.php | 667 ++ .../lib/Roundcube/rcube_cache_shared.php | 657 ++ .../program/lib/Roundcube/rcube_charset.php | 802 ++ .../rc/program/lib/Roundcube/rcube_config.php | 717 ++ .../program/lib/Roundcube/rcube_contacts.php | 1039 ++ .../lib/Roundcube/rcube_content_filter.php | 57 + .../program/lib/Roundcube/rcube_csv2vcard.php | 663 ++ .../web/rc/program/lib/Roundcube/rcube_db.php | 1367 +++ .../program/lib/Roundcube/rcube_db_mssql.php | 190 + .../program/lib/Roundcube/rcube_db_mysql.php | 239 + .../program/lib/Roundcube/rcube_db_oracle.php | 618 ++ .../program/lib/Roundcube/rcube_db_pgsql.php | 233 + .../program/lib/Roundcube/rcube_db_sqlite.php | 161 + .../program/lib/Roundcube/rcube_db_sqlsrv.php | 57 + .../program/lib/Roundcube/rcube_enriched.php | 150 + .../program/lib/Roundcube/rcube_html2text.php | 722 ++ .../rc/program/lib/Roundcube/rcube_image.php | 460 + .../rc/program/lib/Roundcube/rcube_imap.php | 4403 ++++++++ .../lib/Roundcube/rcube_imap_cache.php | 1297 +++ .../lib/Roundcube/rcube_imap_generic.php | 4094 +++++++ .../lib/Roundcube/rcube_imap_search.php | 229 + .../rc/program/lib/Roundcube/rcube_ldap.php | 2141 ++++ .../lib/Roundcube/rcube_ldap_generic.php | 366 + .../program/lib/Roundcube/rcube_message.php | 1110 ++ .../lib/Roundcube/rcube_message_header.php | 325 + .../lib/Roundcube/rcube_message_part.php | 94 + .../rc/program/lib/Roundcube/rcube_mime.php | 878 ++ .../lib/Roundcube/rcube_mime_decode.php | 399 + .../rc/program/lib/Roundcube/rcube_output.php | 286 + .../rc/program/lib/Roundcube/rcube_plugin.php | 451 + .../lib/Roundcube/rcube_plugin_api.php | 671 ++ .../lib/Roundcube/rcube_result_index.php | 419 + .../Roundcube/rcube_result_multifolder.php | 348 + .../lib/Roundcube/rcube_result_set.php | 118 + .../lib/Roundcube/rcube_result_thread.php | 649 ++ .../program/lib/Roundcube/rcube_session.php | 687 ++ .../lib/Roundcube/rcube_session_db.php | 178 + .../lib/Roundcube/rcube_session_memcache.php | 179 + .../lib/Roundcube/rcube_session_php.php | 76 + .../lib/Roundcube/rcube_session_redis.php | 209 + .../rc/program/lib/Roundcube/rcube_smtp.php | 486 + .../lib/Roundcube/rcube_spellcheck_atd.php | 202 + .../Roundcube/rcube_spellcheck_enchant.php | 181 + .../lib/Roundcube/rcube_spellcheck_engine.php | 89 + .../lib/Roundcube/rcube_spellcheck_googie.php | 177 + .../lib/Roundcube/rcube_spellcheck_pspell.php | 187 + .../lib/Roundcube/rcube_spellchecker.php | 418 + .../program/lib/Roundcube/rcube_storage.php | 980 ++ .../lib/Roundcube/rcube_string_replacer.php | 257 + .../program/lib/Roundcube/rcube_text2html.php | 317 + .../lib/Roundcube/rcube_tnef_decoder.php | 341 + .../rc/program/lib/Roundcube/rcube_user.php | 842 ++ .../rc/program/lib/Roundcube/rcube_utils.php | 1295 +++ .../rc/program/lib/Roundcube/rcube_vcard.php | 904 ++ .../program/lib/Roundcube/rcube_washtml.php | 796 ++ .../web/rc/program/localization/ar/labels.inc | 123 + .../rc/program/localization/ar_SA/labels.inc | 490 + .../program/localization/ar_SA/messages.inc | 184 + .../rc/program/localization/ast/labels.inc | 557 + .../rc/program/localization/ast/messages.inc | 175 + .../rc/program/localization/az_AZ/labels.inc | 524 + .../program/localization/az_AZ/messages.inc | 171 + .../rc/program/localization/be_BE/labels.inc | 512 + .../program/localization/be_BE/messages.inc | 175 + .../rc/program/localization/ber/labels.inc | 17 + .../rc/program/localization/bg_BG/labels.inc | 610 ++ .../program/localization/bg_BG/messages.inc | 210 + .../rc/program/localization/bn_BD/labels.inc | 246 + .../program/localization/bn_BD/messages.inc | 79 + .../web/rc/program/localization/br/labels.inc | 600 ++ .../rc/program/localization/br/messages.inc | 205 + .../rc/program/localization/bs_BA/labels.inc | 582 + .../program/localization/bs_BA/messages.inc | 185 + .../rc/program/localization/ca_ES/labels.inc | 598 ++ .../program/localization/ca_ES/messages.inc | 175 + .../rc/program/localization/cs_CZ/labels.inc | 601 ++ .../program/localization/cs_CZ/messages.inc | 205 + .../rc/program/localization/cy_GB/labels.inc | 610 ++ .../program/localization/cy_GB/messages.inc | 210 + .../rc/program/localization/da_DK/labels.inc | 584 + .../program/localization/da_DK/messages.inc | 197 + .../program/localization/de_CH/csv2vcard.inc | 99 + .../rc/program/localization/de_CH/labels.inc | 601 ++ .../program/localization/de_CH/messages.inc | 206 + .../program/localization/de_DE/csv2vcard.inc | 101 + .../rc/program/localization/de_DE/labels.inc | 611 ++ .../program/localization/de_DE/messages.inc | 210 + .../rc/program/localization/el_GR/labels.inc | 600 ++ .../program/localization/el_GR/messages.inc | 205 + .../rc/program/localization/en_CA/labels.inc | 491 + .../program/localization/en_CA/messages.inc | 173 + .../rc/program/localization/en_GB/labels.inc | 600 ++ .../program/localization/en_GB/messages.inc | 205 + .../program/localization/en_US/csv2vcard.inc | 112 + .../rc/program/localization/en_US/labels.inc | 679 ++ .../program/localization/en_US/messages.inc | 212 + .../web/rc/program/localization/eo/labels.inc | 336 + .../rc/program/localization/eo/messages.inc | 78 + .../rc/program/localization/es_419/labels.inc | 578 + .../program/localization/es_419/messages.inc | 175 + .../rc/program/localization/es_AR/labels.inc | 579 + .../program/localization/es_AR/messages.inc | 175 + .../program/localization/es_ES/csv2vcard.inc | 101 + .../rc/program/localization/es_ES/labels.inc | 610 ++ .../program/localization/es_ES/messages.inc | 210 + .../rc/program/localization/et_EE/labels.inc | 572 + .../program/localization/et_EE/messages.inc | 175 + .../rc/program/localization/eu_ES/labels.inc | 603 ++ .../program/localization/eu_ES/messages.inc | 205 + .../rc/program/localization/fa_AF/labels.inc | 275 + .../program/localization/fa_AF/messages.inc | 129 + .../rc/program/localization/fa_IR/labels.inc | 540 + .../program/localization/fa_IR/messages.inc | 176 + .../program/localization/fi_FI/csv2vcard.inc | 49 + .../rc/program/localization/fi_FI/labels.inc | 601 ++ .../program/localization/fi_FI/messages.inc | 206 + .../rc/program/localization/fo_FO/labels.inc | 600 ++ .../program/localization/fo_FO/messages.inc | 206 + .../program/localization/fr_FR/csv2vcard.inc | 85 + .../rc/program/localization/fr_FR/labels.inc | 612 ++ .../program/localization/fr_FR/messages.inc | 210 + .../rc/program/localization/fy_NL/labels.inc | 141 + .../program/localization/fy_NL/messages.inc | 21 + .../rc/program/localization/ga_IE/labels.inc | 430 + .../program/localization/ga_IE/messages.inc | 174 + .../rc/program/localization/gl_ES/labels.inc | 552 + .../program/localization/gl_ES/messages.inc | 175 + .../rc/program/localization/he_IL/labels.inc | 607 ++ .../program/localization/he_IL/messages.inc | 210 + .../rc/program/localization/hi_IN/labels.inc | 185 + .../program/localization/hi_IN/messages.inc | 69 + .../rc/program/localization/hr_HR/labels.inc | 490 + .../program/localization/hr_HR/messages.inc | 172 + .../rc/program/localization/hu_HU/labels.inc | 611 ++ .../program/localization/hu_HU/messages.inc | 210 + .../rc/program/localization/hy_AM/labels.inc | 466 + .../program/localization/hy_AM/messages.inc | 148 + .../web/rc/program/localization/ia/labels.inc | 581 + .../rc/program/localization/ia/messages.inc | 196 + .../rc/program/localization/id_ID/labels.inc | 606 ++ .../program/localization/id_ID/messages.inc | 205 + data/web/rc/program/localization/index.inc | 169 + .../rc/program/localization/is_IS/labels.inc | 533 + .../program/localization/is_IS/messages.inc | 129 + .../program/localization/it_IT/csv2vcard.inc | 99 + .../rc/program/localization/it_IT/labels.inc | 609 ++ .../program/localization/it_IT/messages.inc | 206 + .../rc/program/localization/ja_JP/labels.inc | 611 ++ .../program/localization/ja_JP/messages.inc | 210 + .../rc/program/localization/ka_GE/labels.inc | 424 + .../program/localization/ka_GE/messages.inc | 168 + .../rc/program/localization/km_KH/labels.inc | 426 + .../program/localization/km_KH/messages.inc | 139 + .../rc/program/localization/kn_IN/labels.inc | 164 + .../program/localization/kn_IN/messages.inc | 51 + .../rc/program/localization/ko_KR/labels.inc | 605 ++ .../program/localization/ko_KR/messages.inc | 207 + .../web/rc/program/localization/ku/labels.inc | 361 + .../rc/program/localization/ku/messages.inc | 103 + .../rc/program/localization/ku_IQ/labels.inc | 95 + .../program/localization/ku_IQ/messages.inc | 19 + .../rc/program/localization/lb_LU/labels.inc | 503 + .../program/localization/lb_LU/messages.inc | 175 + .../rc/program/localization/lt_LT/labels.inc | 601 ++ .../program/localization/lt_LT/messages.inc | 206 + .../rc/program/localization/lv_LV/labels.inc | 600 ++ .../program/localization/lv_LV/messages.inc | 205 + .../rc/program/localization/mk_MK/labels.inc | 266 + .../program/localization/mk_MK/messages.inc | 118 + .../rc/program/localization/ml_IN/labels.inc | 274 + .../program/localization/ml_IN/messages.inc | 40 + .../rc/program/localization/mn_MN/labels.inc | 48 + .../program/localization/mn_MN/messages.inc | 48 + .../rc/program/localization/mr_IN/labels.inc | 374 + .../program/localization/mr_IN/messages.inc | 107 + .../rc/program/localization/ms_MY/labels.inc | 273 + .../program/localization/ms_MY/messages.inc | 70 + .../rc/program/localization/nb_NO/labels.inc | 491 + .../program/localization/nb_NO/messages.inc | 171 + .../rc/program/localization/ne_NP/labels.inc | 204 + .../program/localization/ne_NP/messages.inc | 66 + .../rc/program/localization/nl_BE/labels.inc | 442 + .../program/localization/nl_BE/messages.inc | 187 + .../rc/program/localization/nl_NL/labels.inc | 601 ++ .../program/localization/nl_NL/messages.inc | 206 + .../rc/program/localization/nn_NO/labels.inc | 459 + .../program/localization/nn_NO/messages.inc | 154 + .../program/localization/pl_PL/csv2vcard.inc | 55 + .../rc/program/localization/pl_PL/labels.inc | 611 ++ .../program/localization/pl_PL/messages.inc | 210 + .../web/rc/program/localization/ps/labels.inc | 246 + .../rc/program/localization/ps/messages.inc | 79 + .../program/localization/pt_BR/csv2vcard.inc | 101 + .../rc/program/localization/pt_BR/labels.inc | 605 ++ .../program/localization/pt_BR/messages.inc | 210 + .../rc/program/localization/pt_PT/labels.inc | 611 ++ .../program/localization/pt_PT/messages.inc | 210 + .../rc/program/localization/ro_RO/labels.inc | 490 + .../program/localization/ro_RO/messages.inc | 175 + .../program/localization/ru_RU/csv2vcard.inc | 45 + .../rc/program/localization/ru_RU/labels.inc | 610 ++ .../program/localization/ru_RU/messages.inc | 210 + .../rc/program/localization/si_LK/labels.inc | 310 + .../program/localization/si_LK/messages.inc | 84 + .../program/localization/sk_SK/csv2vcard.inc | 84 + .../rc/program/localization/sk_SK/labels.inc | 610 ++ .../program/localization/sk_SK/messages.inc | 210 + .../rc/program/localization/sl_SI/labels.inc | 593 ++ .../program/localization/sl_SI/messages.inc | 200 + .../rc/program/localization/sq_AL/labels.inc | 600 ++ .../program/localization/sq_AL/messages.inc | 210 + .../rc/program/localization/sr_CS/labels.inc | 518 + .../program/localization/sr_CS/messages.inc | 189 + .../rc/program/localization/sv_SE/labels.inc | 610 ++ .../program/localization/sv_SE/messages.inc | 210 + .../rc/program/localization/ta_IN/labels.inc | 266 + .../program/localization/ta_IN/messages.inc | 94 + .../rc/program/localization/th_TH/labels.inc | 304 + .../program/localization/th_TH/messages.inc | 82 + .../web/rc/program/localization/ti/labels.inc | 62 + .../rc/program/localization/ti/messages.inc | 23 + .../rc/program/localization/tr_TR/labels.inc | 611 ++ .../program/localization/tr_TR/messages.inc | 210 + .../rc/program/localization/tzl/labels.inc | 119 + .../rc/program/localization/uk_UA/labels.inc | 605 ++ .../program/localization/uk_UA/messages.inc | 206 + .../rc/program/localization/ur_PK/labels.inc | 49 + .../rc/program/localization/uz/messages.inc | 51 + .../rc/program/localization/vi_VN/labels.inc | 530 + .../program/localization/vi_VN/messages.inc | 175 + .../rc/program/localization/zh_CN/labels.inc | 601 ++ .../program/localization/zh_CN/messages.inc | 206 + .../program/localization/zh_TW/csv2vcard.inc | 90 + .../rc/program/localization/zh_TW/labels.inc | 561 + .../program/localization/zh_TW/messages.inc | 175 + data/web/rc/program/resources/blank.gif | Bin 0 -> 54 bytes data/web/rc/program/resources/blank.tiff | Bin 0 -> 270 bytes data/web/rc/program/resources/blank.webp | Bin 0 -> 86 bytes data/web/rc/program/resources/blocked.gif | Bin 0 -> 118 bytes data/web/rc/program/resources/dummy.pdf | Bin 0 -> 1058 bytes .../rc/program/resources/tinymce/browser.css | 90 + .../rc/program/resources/tinymce/content.css | 24 + .../rc/program/resources/tinymce/video.png | Bin 0 -> 463 bytes .../web/rc/program/steps/addressbook/copy.inc | 128 + .../rc/program/steps/addressbook/delete.inc | 154 + .../web/rc/program/steps/addressbook/edit.inc | 275 + .../rc/program/steps/addressbook/export.inc | 176 + .../web/rc/program/steps/addressbook/func.inc | 977 ++ .../rc/program/steps/addressbook/groups.inc | 154 + .../rc/program/steps/addressbook/import.inc | 344 + .../web/rc/program/steps/addressbook/list.inc | 75 + .../rc/program/steps/addressbook/mailto.inc | 76 + .../web/rc/program/steps/addressbook/move.inc | 214 + .../rc/program/steps/addressbook/photo.inc | 99 + .../rc/program/steps/addressbook/print.inc | 138 + .../rc/program/steps/addressbook/qrcode.inc | 75 + .../web/rc/program/steps/addressbook/save.inc | 265 + .../rc/program/steps/addressbook/search.inc | 354 + .../web/rc/program/steps/addressbook/show.inc | 208 + .../web/rc/program/steps/addressbook/undo.inc | 54 + .../steps/addressbook/upload_photo.inc | 91 + data/web/rc/program/steps/mail/addcontact.inc | 93 + .../web/rc/program/steps/mail/attachments.inc | 291 + .../rc/program/steps/mail/autocomplete.inc | 194 + .../rc/program/steps/mail/check_recent.inc | 157 + data/web/rc/program/steps/mail/compose.inc | 1896 ++++ data/web/rc/program/steps/mail/copy.inc | 62 + data/web/rc/program/steps/mail/folders.inc | 87 + data/web/rc/program/steps/mail/func.inc | 2369 +++++ data/web/rc/program/steps/mail/get.inc | 730 ++ data/web/rc/program/steps/mail/getunread.inc | 56 + data/web/rc/program/steps/mail/headers.inc | 56 + data/web/rc/program/steps/mail/import.inc | 197 + data/web/rc/program/steps/mail/list.inc | 147 + .../rc/program/steps/mail/list_contacts.inc | 126 + data/web/rc/program/steps/mail/mark.inc | 173 + data/web/rc/program/steps/mail/move_del.inc | 179 + data/web/rc/program/steps/mail/pagenav.inc | 66 + data/web/rc/program/steps/mail/search.inc | 248 + .../rc/program/steps/mail/search_contacts.inc | 121 + data/web/rc/program/steps/mail/sendmail.inc | 963 ++ data/web/rc/program/steps/mail/sendmdn.inc | 43 + data/web/rc/program/steps/mail/show.inc | 346 + data/web/rc/program/steps/mail/viewsource.inc | 83 + data/web/rc/program/steps/settings/about.inc | 103 + .../rc/program/steps/settings/edit_folder.inc | 321 + .../program/steps/settings/edit_identity.inc | 192 + .../rc/program/steps/settings/edit_prefs.inc | 87 + .../program/steps/settings/edit_response.inc | 107 + .../web/rc/program/steps/settings/folders.inc | 521 + data/web/rc/program/steps/settings/func.inc | 1422 +++ .../rc/program/steps/settings/identities.inc | 66 + .../rc/program/steps/settings/responses.inc | 131 + .../rc/program/steps/settings/save_folder.inc | 202 + .../program/steps/settings/save_identity.inc | 266 + .../rc/program/steps/settings/save_prefs.inc | 223 + data/web/rc/program/steps/settings/upload.inc | 144 + data/web/rc/program/steps/utils/error.inc | 168 + data/web/rc/program/steps/utils/html2text.inc | 31 + data/web/rc/program/steps/utils/killcache.inc | 55 + data/web/rc/program/steps/utils/modcss.inc | 83 + data/web/rc/program/steps/utils/save_pref.inc | 68 + data/web/rc/program/steps/utils/spell.inc | 64 + .../web/rc/program/steps/utils/spell_html.inc | 57 + data/web/rc/program/steps/utils/text2html.inc | 28 + data/web/rc/public_html/.htaccess | 1 + data/web/rc/public_html/index.php | 27 + data/web/rc/public_html/plugins | 1 + data/web/rc/public_html/program/js | 1 + data/web/rc/public_html/program/resources | 1 + data/web/rc/public_html/skins | 1 + data/web/rc/skins/classic/README | 23 + data/web/rc/skins/classic/addressbook.css | 476 + data/web/rc/skins/classic/addressbook.min.css | 1 + data/web/rc/skins/classic/common.css | 1621 +++ data/web/rc/skins/classic/common.min.css | 1 + data/web/rc/skins/classic/embed.css | 39 + data/web/rc/skins/classic/embed.min.css | 1 + data/web/rc/skins/classic/functions.js | 1110 ++ data/web/rc/skins/classic/functions.min.js | 59 + data/web/rc/skins/classic/googiespell.css | 118 + data/web/rc/skins/classic/googiespell.min.css | 1 + .../rc/skins/classic/images/abook_toolbar.png | Bin 0 -> 4881 bytes .../skins/classic/images/buttons/add_act.png | Bin 0 -> 138 bytes .../skins/classic/images/buttons/add_pas.png | Bin 0 -> 154 bytes .../skins/classic/images/buttons/add_sel.png | Bin 0 -> 126 bytes .../rc/skins/classic/images/buttons/bg.gif | Bin 0 -> 196 bytes data/web/rc/skins/classic/images/cleardot.png | Bin 0 -> 68 bytes .../rc/skins/classic/images/contactgroup.png | Bin 0 -> 876 bytes .../rc/skins/classic/images/contactpic.png | Bin 0 -> 309 bytes data/web/rc/skins/classic/images/dbutton.png | Bin 0 -> 230 bytes data/web/rc/skins/classic/images/dimple.png | Bin 0 -> 158 bytes .../rc/skins/classic/images/display/icons.gif | Bin 0 -> 2329 bytes .../rc/skins/classic/images/display/icons.png | Bin 0 -> 4201 bytes .../skins/classic/images/display/loading.gif | Bin 0 -> 2710 bytes .../classic/images/display/loading_blue.gif | Bin 0 -> 688 bytes data/web/rc/skins/classic/images/favicon.ico | Bin 0 -> 34494 bytes data/web/rc/skins/classic/images/filedrop.png | Bin 0 -> 581 bytes .../images/googiespell/change_lang.gif | Bin 0 -> 110 bytes .../classic/images/googiespell/indicator.gif | Bin 0 -> 722 bytes .../skins/classic/images/googiespell/ok.gif | Bin 0 -> 143 bytes .../classic/images/googiespell/spellc.gif | Bin 0 -> 354 bytes .../skins/classic/images/icons/attachment.png | Bin 0 -> 516 bytes .../rc/skins/classic/images/icons/blank.gif | Bin 0 -> 54 bytes .../skins/classic/images/icons/collapsed.png | Bin 0 -> 97 bytes .../classic/images/icons/columnpicker.gif | Bin 0 -> 132 bytes .../rc/skins/classic/images/icons/delete.png | Bin 0 -> 740 bytes .../rc/skins/classic/images/icons/deleted.png | Bin 0 -> 304 bytes .../web/rc/skins/classic/images/icons/dot.png | Bin 0 -> 100 bytes .../skins/classic/images/icons/down_small.gif | Bin 0 -> 105 bytes .../skins/classic/images/icons/expanded.png | Bin 0 -> 89 bytes .../rc/skins/classic/images/icons/extwin.png | Bin 0 -> 167 bytes .../rc/skins/classic/images/icons/flagged.png | Bin 0 -> 527 bytes .../rc/skins/classic/images/icons/folders.png | Bin 0 -> 5218 bytes .../skins/classic/images/icons/forwarded.png | Bin 0 -> 180 bytes .../images/icons/forwarded_replied.png | Bin 0 -> 214 bytes .../rc/skins/classic/images/icons/glass.png | Bin 0 -> 302 bytes .../skins/classic/images/icons/glass_roll.png | Bin 0 -> 355 bytes .../classic/images/icons/groupactions.png | Bin 0 -> 604 bytes .../rc/skins/classic/images/icons/html.png | Bin 0 -> 164 bytes .../rc/skins/classic/images/icons/minus.gif | Bin 0 -> 82 bytes .../rc/skins/classic/images/icons/plus.gif | Bin 0 -> 85 bytes .../rc/skins/classic/images/icons/rename.png | Bin 0 -> 649 bytes .../rc/skins/classic/images/icons/replied.png | Bin 0 -> 176 bytes .../rc/skins/classic/images/icons/reset.gif | Bin 0 -> 164 bytes .../skins/classic/images/icons/silhouette.png | Bin 0 -> 183 bytes .../rc/skins/classic/images/icons/sort.gif | Bin 0 -> 144 bytes .../rc/skins/classic/images/icons/text.png | Bin 0 -> 150 bytes .../skins/classic/images/icons/unflagged.png | Bin 0 -> 248 bytes .../rc/skins/classic/images/icons/unread.png | Bin 0 -> 240 bytes .../classic/images/icons/unread_children.png | Bin 0 -> 248 bytes .../skins/classic/images/icons/up_small.gif | Bin 0 -> 106 bytes .../rc/skins/classic/images/listheader.gif | Bin 0 -> 314 bytes .../rc/skins/classic/images/mail_footer.png | Bin 0 -> 774 bytes .../rc/skins/classic/images/mail_toolbar.png | Bin 0 -> 13035 bytes .../skins/classic/images/messageactions.png | Bin 0 -> 2615 bytes .../rc/skins/classic/images/messageicons.png | Bin 0 -> 2511 bytes data/web/rc/skins/classic/images/pagenav.gif | Bin 0 -> 355 bytes .../rc/skins/classic/images/quota-colors.png | Bin 0 -> 219 bytes data/web/rc/skins/classic/images/quota.png | Bin 0 -> 212 bytes .../skins/classic/images/roundcube_logo.png | Bin 0 -> 3789 bytes .../rc/skins/classic/images/searchfield.gif | Bin 0 -> 313 bytes .../web/rc/skins/classic/images/tabs-left.gif | Bin 0 -> 219 bytes .../rc/skins/classic/images/tabs-right.gif | Bin 0 -> 733 bytes data/web/rc/skins/classic/images/taskbar.png | Bin 0 -> 1640 bytes .../web/rc/skins/classic/images/taskicons.gif | Bin 0 -> 1519 bytes .../web/rc/skins/classic/images/taskicons.png | Bin 0 -> 1349 bytes data/web/rc/skins/classic/images/tree.gif | Bin 0 -> 92 bytes .../web/rc/skins/classic/images/watermark.gif | Bin 0 -> 9288 bytes .../web/rc/skins/classic/includes/header.html | 2 + data/web/rc/skins/classic/includes/links.html | 9 + .../classic/includes/messagetoolbar.html | 66 + .../skins/classic/includes/settingstabs.html | 6 + .../rc/skins/classic/includes/taskbar.html | 7 + data/web/rc/skins/classic/mail.css | 1891 ++++ data/web/rc/skins/classic/mail.min.css | 1 + data/web/rc/skins/classic/meta.json | 6 + data/web/rc/skins/classic/print.css | 225 + data/web/rc/skins/classic/print.min.css | 1 + data/web/rc/skins/classic/safari.css | 22 + data/web/rc/skins/classic/safari.min.css | 1 + data/web/rc/skins/classic/settings.css | 281 + data/web/rc/skins/classic/settings.min.css | 1 + data/web/rc/skins/classic/splitter.js | 222 + data/web/rc/skins/classic/splitter.min.js | 26 + .../web/rc/skins/classic/templates/about.html | 42 + .../skins/classic/templates/addressbook.html | 129 + .../rc/skins/classic/templates/compose.html | 236 + .../rc/skins/classic/templates/contact.html | 32 + .../skins/classic/templates/contactadd.html | 44 + .../skins/classic/templates/contactedit.html | 44 + .../skins/classic/templates/contactprint.html | 20 + .../classic/templates/contactsearch.html | 18 + .../web/rc/skins/classic/templates/error.html | 16 + .../skins/classic/templates/folderedit.html | 26 + .../rc/skins/classic/templates/folders.html | 75 + .../skins/classic/templates/identities.html | 44 + .../skins/classic/templates/identityedit.html | 31 + .../classic/templates/importcontacts.html | 26 + .../web/rc/skins/classic/templates/login.html | 52 + data/web/rc/skins/classic/templates/mail.html | 212 + .../rc/skins/classic/templates/message.html | 89 + .../skins/classic/templates/messageerror.html | 69 + .../skins/classic/templates/messagepart.html | 80 + .../classic/templates/messagepreview.html | 44 + .../skins/classic/templates/messageprint.html | 19 + .../rc/skins/classic/templates/plugin.html | 23 + .../skins/classic/templates/responseedit.html | 24 + .../rc/skins/classic/templates/responses.html | 44 + .../rc/skins/classic/templates/settings.html | 39 + .../skins/classic/templates/settingsedit.html | 22 + data/web/rc/skins/classic/thumbnail.png | Bin 0 -> 2105 bytes data/web/rc/skins/classic/watermark.html | 15 + data/web/rc/skins/larry/README | 22 + data/web/rc/skins/larry/addressbook.css | 414 + data/web/rc/skins/larry/addressbook.min.css | 1 + data/web/rc/skins/larry/embed.css | 34 + data/web/rc/skins/larry/embed.min.css | 1 + data/web/rc/skins/larry/googiespell.css | 94 + data/web/rc/skins/larry/googiespell.min.css | 1 + data/web/rc/skins/larry/images/addcontact.png | Bin 0 -> 265 bytes data/web/rc/skins/larry/images/ajaxloader.gif | Bin 0 -> 1434 bytes .../rc/skins/larry/images/ajaxloader_dark.gif | Bin 0 -> 1849 bytes data/web/rc/skins/larry/images/buttons.png | Bin 0 -> 15893 bytes .../rc/skins/larry/images/contactgroup.png | Bin 0 -> 935 bytes data/web/rc/skins/larry/images/contactpic.png | Bin 0 -> 831 bytes .../rc/skins/larry/images/contactpic_32px.png | Bin 0 -> 274 bytes .../rc/skins/larry/images/contactpic_48px.png | Bin 0 -> 353 bytes data/web/rc/skins/larry/images/favicon.ico | Bin 0 -> 34494 bytes data/web/rc/skins/larry/images/filedrop.png | Bin 0 -> 415 bytes data/web/rc/skins/larry/images/filetypes.png | Bin 0 -> 4718 bytes .../larry/images/googiespell/change_lang.gif | Bin 0 -> 110 bytes .../larry/images/googiespell/indicator.gif | Bin 0 -> 722 bytes .../rc/skins/larry/images/googiespell/ok.gif | Bin 0 -> 160 bytes .../skins/larry/images/googiespell/spellc.gif | Bin 0 -> 354 bytes data/web/rc/skins/larry/images/linen.jpg | Bin 0 -> 14157 bytes .../rc/skins/larry/images/linen_header.jpg | Bin 0 -> 580 bytes .../web/rc/skins/larry/images/linen_login.jpg | Bin 0 -> 10363 bytes data/web/rc/skins/larry/images/listicons.png | Bin 0 -> 12614 bytes .../rc/skins/larry/images/login_shadow.png | Bin 0 -> 591 bytes data/web/rc/skins/larry/images/messages.png | Bin 0 -> 1430 bytes .../rc/skins/larry/images/messages_dark.png | Bin 0 -> 1424 bytes .../rc/skins/larry/images/overflowshadow.png | Bin 0 -> 201 bytes data/web/rc/skins/larry/images/quota.png | Bin 0 -> 4967 bytes .../rc/skins/larry/images/roundcube_logo.png | Bin 0 -> 3792 bytes data/web/rc/skins/larry/images/selector.png | Bin 0 -> 178 bytes data/web/rc/skins/larry/images/splitter.png | Bin 0 -> 134 bytes data/web/rc/skins/larry/images/watermark.jpg | Bin 0 -> 5000 bytes data/web/rc/skins/larry/includes/footer.html | 5 + data/web/rc/skins/larry/includes/header.html | 44 + data/web/rc/skins/larry/includes/links.html | 9 + .../rc/skins/larry/includes/mailtoolbar.html | 62 + .../rc/skins/larry/includes/settingstabs.html | 9 + data/web/rc/skins/larry/mail.css | 1593 +++ data/web/rc/skins/larry/mail.min.css | 1 + data/web/rc/skins/larry/meta.json | 6 + data/web/rc/skins/larry/print.css | 206 + data/web/rc/skins/larry/print.min.css | 1 + data/web/rc/skins/larry/settings.css | 368 + data/web/rc/skins/larry/settings.min.css | 1 + data/web/rc/skins/larry/styles.css | 3190 ++++++ data/web/rc/skins/larry/styles.min.css | 1 + data/web/rc/skins/larry/templates/about.html | 32 + .../rc/skins/larry/templates/addressbook.html | 145 + .../web/rc/skins/larry/templates/compose.html | 229 + .../web/rc/skins/larry/templates/contact.html | 36 + .../rc/skins/larry/templates/contactedit.html | 48 + .../skins/larry/templates/contactprint.html | 20 + .../skins/larry/templates/contactsearch.html | 21 + data/web/rc/skins/larry/templates/error.html | 19 + .../rc/skins/larry/templates/folderedit.html | 25 + .../web/rc/skins/larry/templates/folders.html | 69 + .../rc/skins/larry/templates/identities.html | 41 + .../skins/larry/templates/identityedit.html | 22 + .../skins/larry/templates/importcontacts.html | 37 + data/web/rc/skins/larry/templates/login.html | 55 + data/web/rc/skins/larry/templates/mail.html | 270 + .../web/rc/skins/larry/templates/message.html | 112 + .../skins/larry/templates/messageerror.html | 56 + .../rc/skins/larry/templates/messagepart.html | 86 + .../skins/larry/templates/messagepreview.html | 82 + .../skins/larry/templates/messageprint.html | 19 + data/web/rc/skins/larry/templates/plugin.html | 28 + .../skins/larry/templates/responseedit.html | 22 + .../rc/skins/larry/templates/responses.html | 42 + .../rc/skins/larry/templates/settings.html | 39 + .../skins/larry/templates/settingsedit.html | 22 + data/web/rc/skins/larry/thumbnail.png | Bin 0 -> 1995 bytes data/web/rc/skins/larry/ui.js | 1515 +++ data/web/rc/skins/larry/ui.min.js | 68 + data/web/rc/skins/larry/watermark.html | 20 + data/web/rc/temp/.htaccess | 7 + data/web/rc/vendor/autoload.php | 7 + data/web/rc/vendor/bin/composer-php | 15 + data/web/rc/vendor/bin/composer-php.bat | 11 + data/web/rc/vendor/bin/crypt-gpg-pinentry | 1 + data/web/rc/vendor/bin/rcubeinitdb.sh | 1 + data/web/rc/vendor/composer/ClassLoader.php | 441 + data/web/rc/vendor/composer/LICENSE | 21 + .../rc/vendor/composer/autoload_classmap.php | 90 + .../vendor/composer/autoload_namespaces.php | 13 + data/web/rc/vendor/composer/autoload_psr4.php | 10 + data/web/rc/vendor/composer/autoload_real.php | 56 + .../rc/vendor/composer/autoload_static.php | 146 + data/web/rc/vendor/composer/include_paths.php | 20 + data/web/rc/vendor/composer/installed.json | 624 ++ data/web/rc/vendor/endroid/qrcode/.travis.yml | 18 + data/web/rc/vendor/endroid/qrcode/LICENSE | 19 + data/web/rc/vendor/endroid/qrcode/README.md | 57 + .../endroid/qrcode/assets/data/qrv10_0.dat | Bin 0 -> 8340 bytes .../endroid/qrcode/assets/data/qrv10_1.dat | Bin 0 -> 8339 bytes .../endroid/qrcode/assets/data/qrv10_2.dat | Bin 0 -> 8343 bytes .../endroid/qrcode/assets/data/qrv10_3.dat | Bin 0 -> 8343 bytes .../endroid/qrcode/assets/data/qrv11_0.dat | Bin 0 -> 9732 bytes .../endroid/qrcode/assets/data/qrv11_1.dat | Bin 0 -> 9731 bytes .../endroid/qrcode/assets/data/qrv11_2.dat | Bin 0 -> 9738 bytes .../endroid/qrcode/assets/data/qrv11_3.dat | Bin 0 -> 9735 bytes .../endroid/qrcode/assets/data/qrv12_0.dat | Bin 0 -> 11223 bytes .../endroid/qrcode/assets/data/qrv12_1.dat | Bin 0 -> 11219 bytes .../endroid/qrcode/assets/data/qrv12_2.dat | Bin 0 -> 11226 bytes .../endroid/qrcode/assets/data/qrv12_3.dat | Bin 0 -> 11225 bytes .../endroid/qrcode/assets/data/qrv13_0.dat | Bin 0 -> 12808 bytes .../endroid/qrcode/assets/data/qrv13_1.dat | Bin 0 -> 12803 bytes .../endroid/qrcode/assets/data/qrv13_2.dat | Bin 0 -> 12815 bytes .../endroid/qrcode/assets/data/qrv13_3.dat | Bin 0 -> 12811 bytes .../endroid/qrcode/assets/data/qrv14_0.dat | Bin 0 -> 13993 bytes .../endroid/qrcode/assets/data/qrv14_1.dat | Bin 0 -> 13988 bytes .../endroid/qrcode/assets/data/qrv14_2.dat | Bin 0 -> 14000 bytes .../endroid/qrcode/assets/data/qrv14_3.dat | Bin 0 -> 14000 bytes .../endroid/qrcode/assets/data/qrv15_0.dat | Bin 0 -> 15770 bytes .../endroid/qrcode/assets/data/qrv15_1.dat | Bin 0 -> 15766 bytes .../endroid/qrcode/assets/data/qrv15_2.dat | Bin 0 -> 15778 bytes .../endroid/qrcode/assets/data/qrv15_3.dat | Bin 0 -> 15772 bytes .../endroid/qrcode/assets/data/qrv16_0.dat | Bin 0 -> 17642 bytes .../endroid/qrcode/assets/data/qrv16_1.dat | Bin 0 -> 17638 bytes .../endroid/qrcode/assets/data/qrv16_2.dat | Bin 0 -> 17648 bytes .../endroid/qrcode/assets/data/qrv16_3.dat | Bin 0 -> 17649 bytes .../endroid/qrcode/assets/data/qrv17_0.dat | Bin 0 -> 19611 bytes .../endroid/qrcode/assets/data/qrv17_1.dat | Bin 0 -> 19606 bytes .../endroid/qrcode/assets/data/qrv17_2.dat | Bin 0 -> 19619 bytes .../endroid/qrcode/assets/data/qrv17_3.dat | Bin 0 -> 19616 bytes .../endroid/qrcode/assets/data/qrv18_0.dat | Bin 0 -> 21677 bytes .../endroid/qrcode/assets/data/qrv18_1.dat | Bin 0 -> 21670 bytes .../endroid/qrcode/assets/data/qrv18_2.dat | Bin 0 -> 21685 bytes .../endroid/qrcode/assets/data/qrv18_3.dat | Bin 0 -> 21682 bytes .../endroid/qrcode/assets/data/qrv19_0.dat | Bin 0 -> 23838 bytes .../endroid/qrcode/assets/data/qrv19_1.dat | Bin 0 -> 23831 bytes .../endroid/qrcode/assets/data/qrv19_2.dat | Bin 0 -> 23849 bytes .../endroid/qrcode/assets/data/qrv19_3.dat | Bin 0 -> 23845 bytes .../endroid/qrcode/assets/data/qrv1_0.dat | Bin 0 -> 656 bytes .../endroid/qrcode/assets/data/qrv1_1.dat | Bin 0 -> 656 bytes .../endroid/qrcode/assets/data/qrv1_2.dat | Bin 0 -> 656 bytes .../endroid/qrcode/assets/data/qrv1_3.dat | Bin 0 -> 656 bytes .../endroid/qrcode/assets/data/qrv20_0.dat | Bin 0 -> 26096 bytes .../endroid/qrcode/assets/data/qrv20_1.dat | Bin 0 -> 26088 bytes .../endroid/qrcode/assets/data/qrv20_2.dat | Bin 0 -> 26105 bytes .../endroid/qrcode/assets/data/qrv20_3.dat | Bin 0 -> 26100 bytes .../endroid/qrcode/assets/data/qrv21_0.dat | Bin 0 -> 27804 bytes .../endroid/qrcode/assets/data/qrv21_1.dat | Bin 0 -> 27795 bytes .../endroid/qrcode/assets/data/qrv21_2.dat | Bin 0 -> 27812 bytes .../endroid/qrcode/assets/data/qrv21_3.dat | Bin 0 -> 27810 bytes .../endroid/qrcode/assets/data/qrv22_0.dat | Bin 0 -> 30252 bytes .../endroid/qrcode/assets/data/qrv22_1.dat | 209 + .../endroid/qrcode/assets/data/qrv22_2.dat | Bin 0 -> 30269 bytes .../endroid/qrcode/assets/data/qrv22_3.dat | Bin 0 -> 30258 bytes .../endroid/qrcode/assets/data/qrv23_0.dat | Bin 0 -> 32797 bytes .../endroid/qrcode/assets/data/qrv23_1.dat | 217 + .../endroid/qrcode/assets/data/qrv23_2.dat | Bin 0 -> 32809 bytes .../endroid/qrcode/assets/data/qrv23_3.dat | Bin 0 -> 32804 bytes .../endroid/qrcode/assets/data/qrv24_0.dat | Bin 0 -> 35439 bytes .../endroid/qrcode/assets/data/qrv24_1.dat | 225 + .../endroid/qrcode/assets/data/qrv24_2.dat | Bin 0 -> 35451 bytes .../endroid/qrcode/assets/data/qrv24_3.dat | Bin 0 -> 35446 bytes .../endroid/qrcode/assets/data/qrv25_0.dat | 233 + .../endroid/qrcode/assets/data/qrv25_1.dat | 233 + .../endroid/qrcode/assets/data/qrv25_2.dat | Bin 0 -> 38190 bytes .../endroid/qrcode/assets/data/qrv25_3.dat | Bin 0 -> 38184 bytes .../endroid/qrcode/assets/data/qrv26_0.dat | 241 + .../endroid/qrcode/assets/data/qrv26_1.dat | 241 + .../endroid/qrcode/assets/data/qrv26_2.dat | Bin 0 -> 41024 bytes .../endroid/qrcode/assets/data/qrv26_3.dat | 241 + .../endroid/qrcode/assets/data/qrv27_0.dat | 249 + .../endroid/qrcode/assets/data/qrv27_1.dat | 249 + .../endroid/qrcode/assets/data/qrv27_2.dat | 249 + .../endroid/qrcode/assets/data/qrv27_3.dat | 249 + .../endroid/qrcode/assets/data/qrv28_0.dat | 257 + .../endroid/qrcode/assets/data/qrv28_1.dat | 257 + .../endroid/qrcode/assets/data/qrv28_2.dat | 257 + .../endroid/qrcode/assets/data/qrv28_3.dat | 257 + .../endroid/qrcode/assets/data/qrv29_0.dat | 265 + .../endroid/qrcode/assets/data/qrv29_1.dat | 265 + .../endroid/qrcode/assets/data/qrv29_2.dat | 265 + .../endroid/qrcode/assets/data/qrv29_3.dat | 265 + .../endroid/qrcode/assets/data/qrv2_0.dat | Bin 0 -> 1109 bytes .../endroid/qrcode/assets/data/qrv2_1.dat | Bin 0 -> 1109 bytes .../endroid/qrcode/assets/data/qrv2_2.dat | Bin 0 -> 1109 bytes .../endroid/qrcode/assets/data/qrv2_3.dat | Bin 0 -> 1109 bytes .../endroid/qrcode/assets/data/qrv30_0.dat | 273 + .../endroid/qrcode/assets/data/qrv30_1.dat | 273 + .../endroid/qrcode/assets/data/qrv30_2.dat | 273 + .../endroid/qrcode/assets/data/qrv30_3.dat | 273 + .../endroid/qrcode/assets/data/qrv31_0.dat | 281 + .../endroid/qrcode/assets/data/qrv31_1.dat | 281 + .../endroid/qrcode/assets/data/qrv31_2.dat | 281 + .../endroid/qrcode/assets/data/qrv31_3.dat | 281 + .../endroid/qrcode/assets/data/qrv32_0.dat | 289 + .../endroid/qrcode/assets/data/qrv32_1.dat | 289 + .../endroid/qrcode/assets/data/qrv32_2.dat | 289 + .../endroid/qrcode/assets/data/qrv32_3.dat | 289 + .../endroid/qrcode/assets/data/qrv33_0.dat | 297 + .../endroid/qrcode/assets/data/qrv33_1.dat | 297 + .../endroid/qrcode/assets/data/qrv33_2.dat | 297 + .../endroid/qrcode/assets/data/qrv33_3.dat | 297 + .../endroid/qrcode/assets/data/qrv34_0.dat | 305 + .../endroid/qrcode/assets/data/qrv34_1.dat | 305 + .../endroid/qrcode/assets/data/qrv34_2.dat | 305 + .../endroid/qrcode/assets/data/qrv34_3.dat | 305 + .../endroid/qrcode/assets/data/qrv35_0.dat | 313 + .../endroid/qrcode/assets/data/qrv35_1.dat | 313 + .../endroid/qrcode/assets/data/qrv35_2.dat | 313 + .../endroid/qrcode/assets/data/qrv35_3.dat | 313 + .../endroid/qrcode/assets/data/qrv36_0.dat | 321 + .../endroid/qrcode/assets/data/qrv36_1.dat | 321 + .../endroid/qrcode/assets/data/qrv36_2.dat | 321 + .../endroid/qrcode/assets/data/qrv36_3.dat | 321 + .../endroid/qrcode/assets/data/qrv37_0.dat | 329 + .../endroid/qrcode/assets/data/qrv37_1.dat | 329 + .../endroid/qrcode/assets/data/qrv37_2.dat | 329 + .../endroid/qrcode/assets/data/qrv37_3.dat | 329 + .../endroid/qrcode/assets/data/qrv38_0.dat | 337 + .../endroid/qrcode/assets/data/qrv38_1.dat | 337 + .../endroid/qrcode/assets/data/qrv38_2.dat | 337 + .../endroid/qrcode/assets/data/qrv38_3.dat | 337 + .../endroid/qrcode/assets/data/qrv39_0.dat | 345 + .../endroid/qrcode/assets/data/qrv39_1.dat | 345 + .../endroid/qrcode/assets/data/qrv39_2.dat | 345 + .../endroid/qrcode/assets/data/qrv39_3.dat | 345 + .../endroid/qrcode/assets/data/qrv3_0.dat | Bin 0 -> 1733 bytes .../endroid/qrcode/assets/data/qrv3_1.dat | Bin 0 -> 1733 bytes .../endroid/qrcode/assets/data/qrv3_2.dat | Bin 0 -> 1734 bytes .../endroid/qrcode/assets/data/qrv3_3.dat | Bin 0 -> 1734 bytes .../endroid/qrcode/assets/data/qrv40_0.dat | 353 + .../endroid/qrcode/assets/data/qrv40_1.dat | 353 + .../endroid/qrcode/assets/data/qrv40_2.dat | 353 + .../endroid/qrcode/assets/data/qrv40_3.dat | 353 + .../endroid/qrcode/assets/data/qrv4_0.dat | Bin 0 -> 2454 bytes .../endroid/qrcode/assets/data/qrv4_1.dat | Bin 0 -> 2453 bytes .../endroid/qrcode/assets/data/qrv4_2.dat | Bin 0 -> 2456 bytes .../endroid/qrcode/assets/data/qrv4_3.dat | Bin 0 -> 2454 bytes .../endroid/qrcode/assets/data/qrv5_0.dat | Bin 0 -> 3270 bytes .../endroid/qrcode/assets/data/qrv5_1.dat | Bin 0 -> 3269 bytes .../endroid/qrcode/assets/data/qrv5_2.dat | Bin 0 -> 3272 bytes .../endroid/qrcode/assets/data/qrv5_3.dat | Bin 0 -> 3272 bytes .../endroid/qrcode/assets/data/qrv6_0.dat | Bin 0 -> 4184 bytes .../endroid/qrcode/assets/data/qrv6_1.dat | Bin 0 -> 4182 bytes .../endroid/qrcode/assets/data/qrv6_2.dat | Bin 0 -> 4184 bytes .../endroid/qrcode/assets/data/qrv6_3.dat | Bin 0 -> 4184 bytes .../endroid/qrcode/assets/data/qrv7_0.dat | Bin 0 -> 4739 bytes .../endroid/qrcode/assets/data/qrv7_1.dat | Bin 0 -> 4737 bytes .../endroid/qrcode/assets/data/qrv7_2.dat | Bin 0 -> 4740 bytes .../endroid/qrcode/assets/data/qrv7_3.dat | Bin 0 -> 4741 bytes .../endroid/qrcode/assets/data/qrv8_0.dat | Bin 0 -> 5843 bytes .../endroid/qrcode/assets/data/qrv8_1.dat | Bin 0 -> 5841 bytes .../endroid/qrcode/assets/data/qrv8_2.dat | Bin 0 -> 5845 bytes .../endroid/qrcode/assets/data/qrv8_3.dat | Bin 0 -> 5845 bytes .../endroid/qrcode/assets/data/qrv9_0.dat | Bin 0 -> 7044 bytes .../endroid/qrcode/assets/data/qrv9_1.dat | Bin 0 -> 7041 bytes .../endroid/qrcode/assets/data/qrv9_2.dat | Bin 0 -> 7047 bytes .../endroid/qrcode/assets/data/qrv9_3.dat | Bin 0 -> 7047 bytes .../endroid/qrcode/assets/data/qrvfr1.dat | 21 + .../endroid/qrcode/assets/data/qrvfr10.dat | 57 + .../endroid/qrcode/assets/data/qrvfr11.dat | 61 + .../endroid/qrcode/assets/data/qrvfr12.dat | 65 + .../endroid/qrcode/assets/data/qrvfr13.dat | 69 + .../endroid/qrcode/assets/data/qrvfr14.dat | 73 + .../endroid/qrcode/assets/data/qrvfr15.dat | 77 + .../endroid/qrcode/assets/data/qrvfr16.dat | 81 + .../endroid/qrcode/assets/data/qrvfr17.dat | 85 + .../endroid/qrcode/assets/data/qrvfr18.dat | 89 + .../endroid/qrcode/assets/data/qrvfr19.dat | 93 + .../endroid/qrcode/assets/data/qrvfr2.dat | 25 + .../endroid/qrcode/assets/data/qrvfr20.dat | 97 + .../endroid/qrcode/assets/data/qrvfr21.dat | 101 + .../endroid/qrcode/assets/data/qrvfr22.dat | 105 + .../endroid/qrcode/assets/data/qrvfr23.dat | 109 + .../endroid/qrcode/assets/data/qrvfr24.dat | 113 + .../endroid/qrcode/assets/data/qrvfr25.dat | 117 + .../endroid/qrcode/assets/data/qrvfr26.dat | 121 + .../endroid/qrcode/assets/data/qrvfr27.dat | 125 + .../endroid/qrcode/assets/data/qrvfr28.dat | 129 + .../endroid/qrcode/assets/data/qrvfr29.dat | 133 + .../endroid/qrcode/assets/data/qrvfr3.dat | 29 + .../endroid/qrcode/assets/data/qrvfr30.dat | 137 + .../endroid/qrcode/assets/data/qrvfr31.dat | 141 + .../endroid/qrcode/assets/data/qrvfr32.dat | 145 + .../endroid/qrcode/assets/data/qrvfr33.dat | 149 + .../endroid/qrcode/assets/data/qrvfr34.dat | 153 + .../endroid/qrcode/assets/data/qrvfr35.dat | 157 + .../endroid/qrcode/assets/data/qrvfr36.dat | 161 + .../endroid/qrcode/assets/data/qrvfr37.dat | 165 + .../endroid/qrcode/assets/data/qrvfr38.dat | 169 + .../endroid/qrcode/assets/data/qrvfr39.dat | 173 + .../endroid/qrcode/assets/data/qrvfr4.dat | 33 + .../endroid/qrcode/assets/data/qrvfr40.dat | 177 + .../endroid/qrcode/assets/data/qrvfr5.dat | 37 + .../endroid/qrcode/assets/data/qrvfr6.dat | 41 + .../endroid/qrcode/assets/data/qrvfr7.dat | 45 + .../endroid/qrcode/assets/data/qrvfr8.dat | 49 + .../endroid/qrcode/assets/data/qrvfr9.dat | 53 + .../endroid/qrcode/assets/data/rsc10.dat | 11 + .../endroid/qrcode/assets/data/rsc13.dat | 14 + .../endroid/qrcode/assets/data/rsc15.dat | 17 + .../endroid/qrcode/assets/data/rsc16.dat | 17 + .../endroid/qrcode/assets/data/rsc17.dat | 18 + .../endroid/qrcode/assets/data/rsc18.dat | 19 + .../endroid/qrcode/assets/data/rsc20.dat | 21 + .../endroid/qrcode/assets/data/rsc22.dat | 23 + .../endroid/qrcode/assets/data/rsc24.dat | 25 + .../endroid/qrcode/assets/data/rsc26.dat | 27 + .../endroid/qrcode/assets/data/rsc28.dat | 29 + .../endroid/qrcode/assets/data/rsc30.dat | 31 + .../endroid/qrcode/assets/data/rsc32.dat | 33 + .../endroid/qrcode/assets/data/rsc34.dat | 36 + .../endroid/qrcode/assets/data/rsc36.dat | 73 + .../endroid/qrcode/assets/data/rsc40.dat | 41 + .../endroid/qrcode/assets/data/rsc42.dat | 43 + .../endroid/qrcode/assets/data/rsc44.dat | 45 + .../endroid/qrcode/assets/data/rsc46.dat | 47 + .../endroid/qrcode/assets/data/rsc48.dat | 49 + .../endroid/qrcode/assets/data/rsc50.dat | 51 + .../endroid/qrcode/assets/data/rsc52.dat | 106 + .../endroid/qrcode/assets/data/rsc54.dat | 55 + .../endroid/qrcode/assets/data/rsc56.dat | 57 + .../endroid/qrcode/assets/data/rsc58.dat | 59 + .../endroid/qrcode/assets/data/rsc60.dat | 61 + .../endroid/qrcode/assets/data/rsc62.dat | 63 + .../endroid/qrcode/assets/data/rsc64.dat | 66 + .../endroid/qrcode/assets/data/rsc66.dat | 68 + .../endroid/qrcode/assets/data/rsc68.dat | 69 + .../endroid/qrcode/assets/data/rsc7.dat | 8 + .../endroid/qrcode/assets/font/opensans.ttf | Bin 0 -> 217360 bytes .../vendor/endroid/qrcode/assets/image/b.png | Bin 0 -> 851 bytes .../vendor/endroid/qrcode/assets/image/d.png | Bin 0 -> 848 bytes .../endroid/qrcode/assets/image/logo.png | Bin 0 -> 7448 bytes .../endroid/qrcode/assets/image/qrv1.png | Bin 0 -> 137 bytes .../endroid/qrcode/assets/image/qrv10.png | Bin 0 -> 227 bytes .../endroid/qrcode/assets/image/qrv11.png | Bin 0 -> 223 bytes .../endroid/qrcode/assets/image/qrv12.png | Bin 0 -> 224 bytes .../endroid/qrcode/assets/image/qrv13.png | Bin 0 -> 225 bytes .../endroid/qrcode/assets/image/qrv14.png | Bin 0 -> 232 bytes .../endroid/qrcode/assets/image/qrv15.png | Bin 0 -> 233 bytes .../endroid/qrcode/assets/image/qrv16.png | Bin 0 -> 231 bytes .../endroid/qrcode/assets/image/qrv17.png | Bin 0 -> 228 bytes .../endroid/qrcode/assets/image/qrv18.png | Bin 0 -> 238 bytes .../endroid/qrcode/assets/image/qrv19.png | Bin 0 -> 242 bytes .../endroid/qrcode/assets/image/qrv2.png | Bin 0 -> 155 bytes .../endroid/qrcode/assets/image/qrv20.png | Bin 0 -> 239 bytes .../endroid/qrcode/assets/image/qrv21.png | Bin 0 -> 255 bytes .../endroid/qrcode/assets/image/qrv22.png | Bin 0 -> 241 bytes .../endroid/qrcode/assets/image/qrv23.png | Bin 0 -> 236 bytes .../endroid/qrcode/assets/image/qrv24.png | Bin 0 -> 263 bytes .../endroid/qrcode/assets/image/qrv25.png | Bin 0 -> 262 bytes .../endroid/qrcode/assets/image/qrv26.png | Bin 0 -> 258 bytes .../endroid/qrcode/assets/image/qrv27.png | Bin 0 -> 257 bytes .../endroid/qrcode/assets/image/qrv28.png | Bin 0 -> 252 bytes .../endroid/qrcode/assets/image/qrv29.png | Bin 0 -> 248 bytes .../endroid/qrcode/assets/image/qrv3.png | Bin 0 -> 154 bytes .../endroid/qrcode/assets/image/qrv30.png | Bin 0 -> 275 bytes .../endroid/qrcode/assets/image/qrv31.png | Bin 0 -> 271 bytes .../endroid/qrcode/assets/image/qrv32.png | Bin 0 -> 283 bytes .../endroid/qrcode/assets/image/qrv33.png | Bin 0 -> 265 bytes .../endroid/qrcode/assets/image/qrv34.png | Bin 0 -> 268 bytes .../endroid/qrcode/assets/image/qrv35.png | Bin 0 -> 261 bytes .../endroid/qrcode/assets/image/qrv36.png | Bin 0 -> 282 bytes .../endroid/qrcode/assets/image/qrv37.png | Bin 0 -> 286 bytes .../endroid/qrcode/assets/image/qrv38.png | Bin 0 -> 285 bytes .../endroid/qrcode/assets/image/qrv39.png | Bin 0 -> 278 bytes .../endroid/qrcode/assets/image/qrv4.png | Bin 0 -> 161 bytes .../endroid/qrcode/assets/image/qrv40.png | Bin 0 -> 277 bytes .../endroid/qrcode/assets/image/qrv5.png | Bin 0 -> 160 bytes .../endroid/qrcode/assets/image/qrv6.png | Bin 0 -> 165 bytes .../endroid/qrcode/assets/image/qrv7.png | Bin 0 -> 204 bytes .../endroid/qrcode/assets/image/qrv8.png | Bin 0 -> 222 bytes .../endroid/qrcode/assets/image/qrv9.png | Bin 0 -> 223 bytes .../rc/vendor/endroid/qrcode/composer.json | 37 + .../rc/vendor/endroid/qrcode/phpunit.xml.dist | 8 + .../Exceptions/DataDoesntExistsException.php | 14 + .../FreeTypeLibraryMissingException.php | 14 + .../ImageFunctionFailedException.php | 14 + .../ImageFunctionUnknownException.php | 14 + .../Exceptions/ImageSizeTooLargeException.php | 14 + .../Exceptions/VersionTooLargeException.php | 14 + .../rc/vendor/endroid/qrcode/src/QrCode.php | 1561 +++ .../endroid/qrcode/tests/QrCodeTest.php | 99 + data/web/rc/vendor/kolab/net_ldap3/.arcconfig | 3 + data/web/rc/vendor/kolab/net_ldap3/LICENSE | 674 ++ .../rc/vendor/kolab/net_ldap3/composer.json | 39 + .../vendor/kolab/net_ldap3/lib/Net/LDAP3.php | 3132 ++++++ .../kolab/net_ldap3/lib/Net/LDAP3/Result.php | 178 + .../pear-pear.php.net/Auth_SASL/Auth/SASL.php | 125 + .../Auth_SASL/Auth/SASL/Anonymous.php | 71 + .../Auth_SASL/Auth/SASL/Common.php | 105 + .../Auth_SASL/Auth/SASL/CramMD5.php | 68 + .../Auth_SASL/Auth/SASL/DigestMD5.php | 197 + .../Auth_SASL/Auth/SASL/External.php | 63 + .../Auth_SASL/Auth/SASL/Login.php | 65 + .../Auth_SASL/Auth/SASL/Plain.php | 63 + .../Auth_SASL/Auth/SASL/SCRAM.php | 306 + .../Console/CommandLine.php | 1305 +++ .../Console/CommandLine/Action.php | 142 + .../Console/CommandLine/Action/Callback.php | 80 + .../Console/CommandLine/Action/Counter.php | 86 + .../Console/CommandLine/Action/Help.php | 60 + .../Console/CommandLine/Action/List.php | 73 + .../Console/CommandLine/Action/Password.php | 90 + .../Console/CommandLine/Action/StoreArray.php | 78 + .../Console/CommandLine/Action/StoreFalse.php | 64 + .../Console/CommandLine/Action/StoreFloat.php | 76 + .../Console/CommandLine/Action/StoreInt.php | 76 + .../CommandLine/Action/StoreString.php | 62 + .../Console/CommandLine/Action/StoreTrue.php | 63 + .../Console/CommandLine/Action/Version.php | 60 + .../Console/CommandLine/Argument.php | 102 + .../Console/CommandLine/Command.php | 76 + .../CommandLine/CustomMessageProvider.php | 66 + .../Console/CommandLine/Element.php | 151 + .../Console/CommandLine/Exception.php | 97 + .../Console/CommandLine/MessageProvider.php | 56 + .../CommandLine/MessageProvider/Default.php | 153 + .../Console/CommandLine/Option.php | 366 + .../Console/CommandLine/Outputter.php | 63 + .../Console/CommandLine/Outputter/Default.php | 82 + .../Console/CommandLine/Renderer.php | 71 + .../Console/CommandLine/Renderer/Default.php | 430 + .../Console/CommandLine/Result.php | 71 + .../Console/CommandLine/XmlParser.php | 318 + .../Console_CommandLine/data/xmlschema.rng | 234 + .../pear-pear.php.net/Crypt_GPG/Crypt/GPG.php | 2155 ++++ .../Crypt_GPG/Crypt/GPG/Engine.php | 2048 ++++ .../Crypt_GPG/Crypt/GPG/Exceptions.php | 597 ++ .../Crypt_GPG/Crypt/GPG/Key.php | 241 + .../Crypt_GPG/Crypt/GPG/KeyGenerator.php | 683 ++ .../Crypt_GPG/Crypt/GPG/PinEntry.php | 853 ++ .../Crypt_GPG/Crypt/GPG/ProcessControl.php | 152 + .../Crypt_GPG/Crypt/GPG/ProcessHandler.php | 893 ++ .../Crypt_GPG/Crypt/GPG/Signature.php | 426 + .../Crypt/GPG/SignatureCreationInfo.php | 224 + .../Crypt_GPG/Crypt/GPG/SubKey.php | 715 ++ .../Crypt_GPG/Crypt/GPG/UserId.php | 378 + .../Crypt_GPG/Crypt/GPGAbstract.php | 448 + .../Crypt_GPG/bin/crypt-gpg-pinentry | 33 + .../data/Crypt_GPG/data/pinentry-cli.xml | 18 + .../pear-pear.php.net/Mail_Mime/Mail/mime.php | 1626 +++ .../Mail_Mime/Mail/mimePart.php | 1249 +++ .../pear-pear.php.net/Net_IDNA2/Net/IDNA2.php | 3402 ++++++ .../Net_IDNA2/Net/IDNA2/Exception.php | 4 + .../Net/IDNA2/Exception/Nameprep.php | 6 + .../pear-pear.php.net/Net_LDAP2/Net/LDAP2.php | 1802 ++++ .../Net_LDAP2/Net/LDAP2/Entry.php | 1096 ++ .../Net_LDAP2/Net/LDAP2/Filter.php | 675 ++ .../Net_LDAP2/Net/LDAP2/LDIF.php | 925 ++ .../Net_LDAP2/Net/LDAP2/RootDSE.php | 240 + .../Net_LDAP2/Net/LDAP2/Schema.php | 622 ++ .../Net/LDAP2/SchemaCache.interface.php | 59 + .../Net_LDAP2/Net/LDAP2/Search.php | 631 ++ .../Net/LDAP2/SimpleFileSchemaCache.php | 97 + .../Net_LDAP2/Net/LDAP2/Util.php | 620 ++ .../pear-pear.php.net/Net_SMTP/Net/SMTP.php | 1254 +++ .../Net_Socket/Net/Socket.php | 686 ++ .../rc/vendor/pear/console_getopt/.travis.yml | 9 + .../pear/console_getopt/Console/Getopt.php | 360 + .../web/rc/vendor/pear/console_getopt/LICENSE | 25 + .../rc/vendor/pear/console_getopt/README.rst | 26 + .../vendor/pear/console_getopt/composer.json | 35 + .../rc/vendor/pear/console_getopt/package.xml | 269 + .../vendor/pear/pear-core-minimal/README.rst | 26 + .../pear/pear-core-minimal/composer.json | 32 + .../pear-core-minimal/copy-from-pear-core.sh | 5 + .../pear/pear-core-minimal/src/OS/Guess.php | 337 + .../pear/pear-core-minimal/src/PEAR.php | 1112 ++ .../pear/pear-core-minimal/src/PEAR/Error.php | 14 + .../pear-core-minimal/src/PEAR/ErrorStack.php | 979 ++ .../pear/pear-core-minimal/src/System.php | 622 ++ .../rc/vendor/pear/pear_exception/.travis.yml | 7 + .../web/rc/vendor/pear/pear_exception/LICENSE | 27 + .../pear/pear_exception/PEAR/Exception.php | 456 + .../vendor/pear/pear_exception/composer.json | 43 + .../rc/vendor/pear/pear_exception/package.xml | 120 + .../rc/vendor/roundcube/net_sieve/.travis.yml | 10 + .../rc/vendor/roundcube/net_sieve/Sieve.php | 1334 +++ .../vendor/roundcube/net_sieve/composer.json | 56 + .../rc/vendor/roundcube/net_sieve/package.xml | 460 + .../roundcube/net_sieve/tests/SieveTest.php | 271 + .../roundcube/net_sieve/tests/config.php.dist | 5 + .../roundcube/net_sieve/tests/largescript.siv | 6689 ++++++++++++ .../roundcube/plugin-installer/README.md | 46 + .../roundcube/plugin-installer/composer.json | 33 + .../Roundcube/Composer/PluginInstaller.php | 266 + .../plugin-installer/src/bin/rcubeinitdb.sh | 130 + 2737 files changed, 357639 insertions(+), 22 deletions(-) create mode 100644 data/web/rc/.htaccess create mode 100644 data/web/rc/CHANGELOG create mode 100644 data/web/rc/INSTALL create mode 100644 data/web/rc/LICENSE create mode 100644 data/web/rc/README.md create mode 100644 data/web/rc/SQL/mssql.initial.sql create mode 100644 data/web/rc/SQL/mssql/2009103100.sql create mode 100644 data/web/rc/SQL/mssql/2010100600.sql create mode 100644 data/web/rc/SQL/mssql/2011011200.sql create mode 100644 data/web/rc/SQL/mssql/2011092800.sql create mode 100644 data/web/rc/SQL/mssql/2011111600.sql create mode 100644 data/web/rc/SQL/mssql/2011121400.sql create mode 100644 data/web/rc/SQL/mssql/2012051800.sql create mode 100644 data/web/rc/SQL/mssql/2012080700.sql create mode 100644 data/web/rc/SQL/mssql/2013011000.sql create mode 100644 data/web/rc/SQL/mssql/2013042700.sql create mode 100644 data/web/rc/SQL/mssql/2013052500.sql create mode 100644 data/web/rc/SQL/mssql/2013061000.sql create mode 100644 data/web/rc/SQL/mssql/2014042900.sql create mode 100644 data/web/rc/SQL/mssql/2015030800.sql create mode 100644 data/web/rc/SQL/mssql/2015111100.sql create mode 100644 data/web/rc/SQL/mssql/2016081200.sql create mode 100644 data/web/rc/SQL/mssql/2016100900.sql create mode 100644 data/web/rc/SQL/mssql/2016112200.sql create mode 100644 data/web/rc/SQL/mysql.initial.sql create mode 100644 data/web/rc/SQL/mysql/2008030300.sql create mode 100644 data/web/rc/SQL/mysql/2008040500.sql create mode 100644 data/web/rc/SQL/mysql/2008060900.sql create mode 100644 data/web/rc/SQL/mysql/2008092100.sql create mode 100644 data/web/rc/SQL/mysql/2009090400.sql create mode 100644 data/web/rc/SQL/mysql/2009103100.sql create mode 100644 data/web/rc/SQL/mysql/2010042300.sql create mode 100644 data/web/rc/SQL/mysql/2010100600.sql create mode 100644 data/web/rc/SQL/mysql/2011011200.sql create mode 100644 data/web/rc/SQL/mysql/2011092800.sql create mode 100644 data/web/rc/SQL/mysql/2011111600.sql create mode 100644 data/web/rc/SQL/mysql/2011121400.sql create mode 100644 data/web/rc/SQL/mysql/2012080700.sql create mode 100644 data/web/rc/SQL/mysql/2013011000.sql create mode 100644 data/web/rc/SQL/mysql/2013042700.sql create mode 100644 data/web/rc/SQL/mysql/2013052500.sql create mode 100644 data/web/rc/SQL/mysql/2013061000.sql create mode 100644 data/web/rc/SQL/mysql/2014042900.sql create mode 100644 data/web/rc/SQL/mysql/2015030800.sql create mode 100644 data/web/rc/SQL/mysql/2015111100.sql create mode 100644 data/web/rc/SQL/mysql/2016081200.sql create mode 100644 data/web/rc/SQL/mysql/2016100900.sql create mode 100644 data/web/rc/SQL/mysql/2016112200.sql create mode 100644 data/web/rc/SQL/oracle.initial.sql create mode 100644 data/web/rc/SQL/oracle/2015030800.sql create mode 100644 data/web/rc/SQL/oracle/2015111100.sql create mode 100644 data/web/rc/SQL/oracle/2016081200.sql create mode 100644 data/web/rc/SQL/oracle/2016100900.sql create mode 100644 data/web/rc/SQL/oracle/2016112200.sql create mode 100644 data/web/rc/SQL/postgres.initial.sql create mode 100644 data/web/rc/SQL/postgres/2008030300.sql create mode 100644 data/web/rc/SQL/postgres/2008060900.sql create mode 100644 data/web/rc/SQL/postgres/2008092100.sql create mode 100644 data/web/rc/SQL/postgres/2009090400.sql create mode 100644 data/web/rc/SQL/postgres/2009103100.sql create mode 100644 data/web/rc/SQL/postgres/2010042300.sql create mode 100644 data/web/rc/SQL/postgres/2010100600.sql create mode 100644 data/web/rc/SQL/postgres/2011011200.sql create mode 100644 data/web/rc/SQL/postgres/2011092800.sql create mode 100644 data/web/rc/SQL/postgres/2011111600.sql create mode 100644 data/web/rc/SQL/postgres/2011121400.sql create mode 100644 data/web/rc/SQL/postgres/2012080700.sql create mode 100644 data/web/rc/SQL/postgres/2013011000.sql create mode 100644 data/web/rc/SQL/postgres/2013042700.sql create mode 100644 data/web/rc/SQL/postgres/2013052500.sql create mode 100644 data/web/rc/SQL/postgres/2013061000.sql create mode 100644 data/web/rc/SQL/postgres/2014042900.sql create mode 100644 data/web/rc/SQL/postgres/2015030800.sql create mode 100644 data/web/rc/SQL/postgres/2015111100.sql create mode 100644 data/web/rc/SQL/postgres/2016081200.sql create mode 100644 data/web/rc/SQL/postgres/2016100900.sql create mode 100644 data/web/rc/SQL/postgres/2016112200.sql create mode 100644 data/web/rc/SQL/sqlite.initial.sql create mode 100644 data/web/rc/SQL/sqlite/2008030300.sql create mode 100644 data/web/rc/SQL/sqlite/2008060900.sql create mode 100644 data/web/rc/SQL/sqlite/2008092100.sql create mode 100644 data/web/rc/SQL/sqlite/2009090400.sql create mode 100644 data/web/rc/SQL/sqlite/2009103100.sql create mode 100644 data/web/rc/SQL/sqlite/2010042300.sql create mode 100644 data/web/rc/SQL/sqlite/2010100600.sql create mode 100644 data/web/rc/SQL/sqlite/2011011200.sql create mode 100644 data/web/rc/SQL/sqlite/2011092800.sql create mode 100644 data/web/rc/SQL/sqlite/2011111600.sql create mode 100644 data/web/rc/SQL/sqlite/2011121400.sql create mode 100644 data/web/rc/SQL/sqlite/2012080700.sql create mode 100644 data/web/rc/SQL/sqlite/2013011000.sql create mode 100644 data/web/rc/SQL/sqlite/2013011700.sql create mode 100644 data/web/rc/SQL/sqlite/2013042700.sql create mode 100644 data/web/rc/SQL/sqlite/2013052500.sql create mode 100644 data/web/rc/SQL/sqlite/2013061000.sql create mode 100644 data/web/rc/SQL/sqlite/2014042900.sql create mode 100644 data/web/rc/SQL/sqlite/2015030800.sql create mode 100644 data/web/rc/SQL/sqlite/2015111100.sql create mode 100644 data/web/rc/SQL/sqlite/2016081200.sql create mode 100644 data/web/rc/SQL/sqlite/2016100900.sql create mode 100644 data/web/rc/SQL/sqlite/2016112200.sql create mode 100644 data/web/rc/UPGRADING create mode 100755 data/web/rc/bin/cleandb.sh create mode 100755 data/web/rc/bin/cssshrink.sh create mode 100755 data/web/rc/bin/decrypt.sh create mode 100755 data/web/rc/bin/deluser.sh create mode 100755 data/web/rc/bin/dumpschema.sh create mode 100755 data/web/rc/bin/gc.sh create mode 100755 data/web/rc/bin/indexcontacts.sh create mode 100755 data/web/rc/bin/initdb.sh create mode 100755 data/web/rc/bin/installto.sh create mode 100755 data/web/rc/bin/jsshrink.sh create mode 100755 data/web/rc/bin/makedoc.sh create mode 100755 data/web/rc/bin/moduserprefs.sh create mode 100755 data/web/rc/bin/msgexport.sh create mode 100755 data/web/rc/bin/msgimport.sh create mode 100755 data/web/rc/bin/update.sh create mode 100755 data/web/rc/bin/updatecss.sh create mode 100755 data/web/rc/bin/updatedb.sh create mode 100644 data/web/rc/composer.json-dist create mode 100644 data/web/rc/config/.htaccess create mode 100644 data/web/rc/config/config.inc.php create mode 100644 data/web/rc/config/config.inc.php.sample create mode 100644 data/web/rc/config/defaults.inc.php create mode 100644 data/web/rc/config/mimetypes.php create mode 100644 data/web/rc/index.php create mode 100644 data/web/rc/installer/check.php create mode 100644 data/web/rc/installer/client.js create mode 100644 data/web/rc/installer/config.php create mode 100755 data/web/rc/installer/images/add.png create mode 100644 data/web/rc/installer/images/banner_gradient.gif create mode 100644 data/web/rc/installer/images/banner_schraffur.gif create mode 100755 data/web/rc/installer/images/delete.png create mode 100755 data/web/rc/installer/images/error.png create mode 100644 data/web/rc/installer/images/roundcube_logo.png create mode 100644 data/web/rc/installer/index.php create mode 100644 data/web/rc/installer/styles.css create mode 100644 data/web/rc/installer/test.php create mode 100644 data/web/rc/logs/.htaccess create mode 100644 data/web/rc/plugins/acl/acl.js create mode 100644 data/web/rc/plugins/acl/acl.min.js create mode 100644 data/web/rc/plugins/acl/acl.php create mode 100644 data/web/rc/plugins/acl/composer.json create mode 100644 data/web/rc/plugins/acl/config.inc.php.dist create mode 100644 data/web/rc/plugins/acl/localization/ar_SA.inc create mode 100644 data/web/rc/plugins/acl/localization/ast.inc create mode 100644 data/web/rc/plugins/acl/localization/az_AZ.inc create mode 100644 data/web/rc/plugins/acl/localization/be_BE.inc create mode 100644 data/web/rc/plugins/acl/localization/bg_BG.inc create mode 100644 data/web/rc/plugins/acl/localization/br.inc create mode 100644 data/web/rc/plugins/acl/localization/bs_BA.inc create mode 100644 data/web/rc/plugins/acl/localization/ca_ES.inc create mode 100644 data/web/rc/plugins/acl/localization/cs_CZ.inc create mode 100644 data/web/rc/plugins/acl/localization/cy_GB.inc create mode 100644 data/web/rc/plugins/acl/localization/da_DK.inc create mode 100644 data/web/rc/plugins/acl/localization/de_CH.inc create mode 100644 data/web/rc/plugins/acl/localization/de_DE.inc create mode 100644 data/web/rc/plugins/acl/localization/el_GR.inc create mode 100644 data/web/rc/plugins/acl/localization/en_CA.inc create mode 100644 data/web/rc/plugins/acl/localization/en_GB.inc create mode 100644 data/web/rc/plugins/acl/localization/en_US.inc create mode 100644 data/web/rc/plugins/acl/localization/eo.inc create mode 100644 data/web/rc/plugins/acl/localization/es_419.inc create mode 100644 data/web/rc/plugins/acl/localization/es_AR.inc create mode 100644 data/web/rc/plugins/acl/localization/es_ES.inc create mode 100644 data/web/rc/plugins/acl/localization/et_EE.inc create mode 100644 data/web/rc/plugins/acl/localization/eu_ES.inc create mode 100644 data/web/rc/plugins/acl/localization/fa_AF.inc create mode 100644 data/web/rc/plugins/acl/localization/fa_IR.inc create mode 100644 data/web/rc/plugins/acl/localization/fi_FI.inc create mode 100644 data/web/rc/plugins/acl/localization/fo_FO.inc create mode 100644 data/web/rc/plugins/acl/localization/fr_FR.inc create mode 100644 data/web/rc/plugins/acl/localization/fy_NL.inc create mode 100644 data/web/rc/plugins/acl/localization/gl_ES.inc create mode 100644 data/web/rc/plugins/acl/localization/he_IL.inc create mode 100644 data/web/rc/plugins/acl/localization/hr_HR.inc create mode 100644 data/web/rc/plugins/acl/localization/hu_HU.inc create mode 100644 data/web/rc/plugins/acl/localization/hy_AM.inc create mode 100644 data/web/rc/plugins/acl/localization/ia.inc create mode 100644 data/web/rc/plugins/acl/localization/id_ID.inc create mode 100644 data/web/rc/plugins/acl/localization/is_IS.inc create mode 100644 data/web/rc/plugins/acl/localization/it_IT.inc create mode 100644 data/web/rc/plugins/acl/localization/ja_JP.inc create mode 100644 data/web/rc/plugins/acl/localization/ka_GE.inc create mode 100644 data/web/rc/plugins/acl/localization/km_KH.inc create mode 100644 data/web/rc/plugins/acl/localization/ko_KR.inc create mode 100644 data/web/rc/plugins/acl/localization/ku.inc create mode 100644 data/web/rc/plugins/acl/localization/ku_IQ.inc create mode 100644 data/web/rc/plugins/acl/localization/lb_LU.inc create mode 100644 data/web/rc/plugins/acl/localization/lt_LT.inc create mode 100644 data/web/rc/plugins/acl/localization/lv_LV.inc create mode 100644 data/web/rc/plugins/acl/localization/mn_MN.inc create mode 100644 data/web/rc/plugins/acl/localization/nb_NO.inc create mode 100644 data/web/rc/plugins/acl/localization/nl_BE.inc create mode 100644 data/web/rc/plugins/acl/localization/nl_NL.inc create mode 100644 data/web/rc/plugins/acl/localization/nn_NO.inc create mode 100644 data/web/rc/plugins/acl/localization/pl_PL.inc create mode 100644 data/web/rc/plugins/acl/localization/pt_BR.inc create mode 100644 data/web/rc/plugins/acl/localization/pt_PT.inc create mode 100644 data/web/rc/plugins/acl/localization/ro_RO.inc create mode 100644 data/web/rc/plugins/acl/localization/ru_RU.inc create mode 100644 data/web/rc/plugins/acl/localization/sk_SK.inc create mode 100644 data/web/rc/plugins/acl/localization/sl_SI.inc create mode 100644 data/web/rc/plugins/acl/localization/sq_AL.inc create mode 100644 data/web/rc/plugins/acl/localization/sr_CS.inc create mode 100644 data/web/rc/plugins/acl/localization/sv_SE.inc create mode 100644 data/web/rc/plugins/acl/localization/th_TH.inc create mode 100644 data/web/rc/plugins/acl/localization/ti.inc create mode 100644 data/web/rc/plugins/acl/localization/tr_TR.inc create mode 100644 data/web/rc/plugins/acl/localization/tzl.inc create mode 100644 data/web/rc/plugins/acl/localization/uk_UA.inc create mode 100644 data/web/rc/plugins/acl/localization/vi_VN.inc create mode 100644 data/web/rc/plugins/acl/localization/zh_CN.inc create mode 100644 data/web/rc/plugins/acl/localization/zh_TW.inc create mode 100644 data/web/rc/plugins/acl/skins/classic/acl.css create mode 100644 data/web/rc/plugins/acl/skins/classic/acl.min.css create mode 100644 data/web/rc/plugins/acl/skins/classic/images/enabled.png create mode 100644 data/web/rc/plugins/acl/skins/classic/images/partial.png create mode 100644 data/web/rc/plugins/acl/skins/classic/templates/table.html create mode 100644 data/web/rc/plugins/acl/skins/larry/acl.css create mode 100644 data/web/rc/plugins/acl/skins/larry/acl.min.css create mode 100644 data/web/rc/plugins/acl/skins/larry/images/enabled.png create mode 100644 data/web/rc/plugins/acl/skins/larry/images/partial.png create mode 100644 data/web/rc/plugins/acl/skins/larry/templates/table.html create mode 100644 data/web/rc/plugins/acl/tests/Acl.php create mode 100644 data/web/rc/plugins/additional_message_headers/additional_message_headers.php create mode 100644 data/web/rc/plugins/additional_message_headers/composer.json create mode 100644 data/web/rc/plugins/additional_message_headers/config.inc.php.dist create mode 100644 data/web/rc/plugins/additional_message_headers/tests/AdditionalMessageHeaders.php create mode 100644 data/web/rc/plugins/archive/archive.js create mode 100644 data/web/rc/plugins/archive/archive.min.js create mode 100644 data/web/rc/plugins/archive/archive.php create mode 100644 data/web/rc/plugins/archive/composer.json create mode 100644 data/web/rc/plugins/archive/localization/ar_SA.inc create mode 100644 data/web/rc/plugins/archive/localization/ast.inc create mode 100644 data/web/rc/plugins/archive/localization/az_AZ.inc create mode 100644 data/web/rc/plugins/archive/localization/be_BE.inc create mode 100644 data/web/rc/plugins/archive/localization/bg_BG.inc create mode 100644 data/web/rc/plugins/archive/localization/br.inc create mode 100644 data/web/rc/plugins/archive/localization/bs_BA.inc create mode 100644 data/web/rc/plugins/archive/localization/ca_ES.inc create mode 100644 data/web/rc/plugins/archive/localization/cs_CZ.inc create mode 100644 data/web/rc/plugins/archive/localization/cy_GB.inc create mode 100644 data/web/rc/plugins/archive/localization/da_DK.inc create mode 100644 data/web/rc/plugins/archive/localization/de_CH.inc create mode 100644 data/web/rc/plugins/archive/localization/de_DE.inc create mode 100644 data/web/rc/plugins/archive/localization/el_GR.inc create mode 100644 data/web/rc/plugins/archive/localization/en_CA.inc create mode 100644 data/web/rc/plugins/archive/localization/en_GB.inc create mode 100644 data/web/rc/plugins/archive/localization/en_US.inc create mode 100644 data/web/rc/plugins/archive/localization/eo.inc create mode 100644 data/web/rc/plugins/archive/localization/es_419.inc create mode 100644 data/web/rc/plugins/archive/localization/es_AR.inc create mode 100644 data/web/rc/plugins/archive/localization/es_ES.inc create mode 100644 data/web/rc/plugins/archive/localization/et_EE.inc create mode 100644 data/web/rc/plugins/archive/localization/eu_ES.inc create mode 100644 data/web/rc/plugins/archive/localization/fa_AF.inc create mode 100644 data/web/rc/plugins/archive/localization/fa_IR.inc create mode 100644 data/web/rc/plugins/archive/localization/fi_FI.inc create mode 100644 data/web/rc/plugins/archive/localization/fo_FO.inc create mode 100644 data/web/rc/plugins/archive/localization/fr_FR.inc create mode 100644 data/web/rc/plugins/archive/localization/gl_ES.inc create mode 100644 data/web/rc/plugins/archive/localization/he_IL.inc create mode 100644 data/web/rc/plugins/archive/localization/hr_HR.inc create mode 100644 data/web/rc/plugins/archive/localization/hu_HU.inc create mode 100644 data/web/rc/plugins/archive/localization/hy_AM.inc create mode 100644 data/web/rc/plugins/archive/localization/ia.inc create mode 100644 data/web/rc/plugins/archive/localization/id_ID.inc create mode 100644 data/web/rc/plugins/archive/localization/it_IT.inc create mode 100644 data/web/rc/plugins/archive/localization/ja_JP.inc create mode 100644 data/web/rc/plugins/archive/localization/km_KH.inc create mode 100644 data/web/rc/plugins/archive/localization/ko_KR.inc create mode 100644 data/web/rc/plugins/archive/localization/ku.inc create mode 100644 data/web/rc/plugins/archive/localization/ku_IQ.inc create mode 100644 data/web/rc/plugins/archive/localization/lb_LU.inc create mode 100644 data/web/rc/plugins/archive/localization/lt_LT.inc create mode 100644 data/web/rc/plugins/archive/localization/lv_LV.inc create mode 100644 data/web/rc/plugins/archive/localization/ml_IN.inc create mode 100644 data/web/rc/plugins/archive/localization/mn_MN.inc create mode 100644 data/web/rc/plugins/archive/localization/mr_IN.inc create mode 100644 data/web/rc/plugins/archive/localization/nb_NO.inc create mode 100644 data/web/rc/plugins/archive/localization/nl_NL.inc create mode 100644 data/web/rc/plugins/archive/localization/nn_NO.inc create mode 100644 data/web/rc/plugins/archive/localization/pl_PL.inc create mode 100644 data/web/rc/plugins/archive/localization/pt_BR.inc create mode 100644 data/web/rc/plugins/archive/localization/pt_PT.inc create mode 100644 data/web/rc/plugins/archive/localization/ro_RO.inc create mode 100644 data/web/rc/plugins/archive/localization/ru_RU.inc create mode 100644 data/web/rc/plugins/archive/localization/si_LK.inc create mode 100644 data/web/rc/plugins/archive/localization/sk_SK.inc create mode 100644 data/web/rc/plugins/archive/localization/sl_SI.inc create mode 100644 data/web/rc/plugins/archive/localization/sq_AL.inc create mode 100644 data/web/rc/plugins/archive/localization/sr_CS.inc create mode 100644 data/web/rc/plugins/archive/localization/sv_SE.inc create mode 100644 data/web/rc/plugins/archive/localization/tr_TR.inc create mode 100644 data/web/rc/plugins/archive/localization/tzl.inc create mode 100644 data/web/rc/plugins/archive/localization/uk_UA.inc create mode 100644 data/web/rc/plugins/archive/localization/vi_VN.inc create mode 100644 data/web/rc/plugins/archive/localization/zh_CN.inc create mode 100644 data/web/rc/plugins/archive/localization/zh_TW.inc create mode 100644 data/web/rc/plugins/archive/skins/classic/archive.css create mode 100644 data/web/rc/plugins/archive/skins/classic/archive.min.css create mode 100644 data/web/rc/plugins/archive/skins/classic/archive_act.png create mode 100644 data/web/rc/plugins/archive/skins/classic/archive_pas.png create mode 100644 data/web/rc/plugins/archive/skins/classic/foldericon.png create mode 100644 data/web/rc/plugins/archive/skins/larry/.gitignore create mode 100644 data/web/rc/plugins/archive/tests/Archive.php create mode 100644 data/web/rc/plugins/attachment_reminder/attachment_reminder.js create mode 100644 data/web/rc/plugins/attachment_reminder/attachment_reminder.min.js create mode 100644 data/web/rc/plugins/attachment_reminder/attachment_reminder.php create mode 100644 data/web/rc/plugins/attachment_reminder/composer.json create mode 100644 data/web/rc/plugins/attachment_reminder/localization/ar_SA.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/ast.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/az_AZ.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/be_BE.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/bg_BG.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/br.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/bs_BA.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/ca_ES.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/cs_CZ.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/cy_GB.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/da_DK.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/de_CH.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/de_DE.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/el_GR.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/en_CA.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/en_GB.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/en_US.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/es_419.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/es_AR.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/es_ES.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/et_EE.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/eu_ES.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/fa_AF.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/fa_IR.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/fi_FI.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/fo_FO.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/fr_FR.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/gl_ES.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/he_IL.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/hr_HR.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/hu_HU.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/ia.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/id_ID.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/it_IT.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/ja_JP.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/km_KH.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/kn_IN.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/ko_KR.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/ku.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/ku_IQ.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/lb_LU.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/lt_LT.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/lv_LV.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/ml_IN.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/mn_MN.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/nb_NO.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/nl_NL.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/pl_PL.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/pt_BR.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/pt_PT.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/ro_RO.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/ru_RU.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/sk_SK.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/sl_SI.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/sq_AL.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/sr_CS.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/sv_SE.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/tr_TR.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/uk_UA.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/vi_VN.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/zh_CN.inc create mode 100644 data/web/rc/plugins/attachment_reminder/localization/zh_TW.inc create mode 100644 data/web/rc/plugins/autologon/autologon.php create mode 100644 data/web/rc/plugins/autologon/composer.json create mode 100644 data/web/rc/plugins/autologon/tests/Autologon.php create mode 100644 data/web/rc/plugins/database_attachments/composer.json create mode 100644 data/web/rc/plugins/database_attachments/config.inc.php.dist create mode 100644 data/web/rc/plugins/database_attachments/database_attachments.php create mode 100644 data/web/rc/plugins/database_attachments/tests/DatabaseAttachments.php create mode 100644 data/web/rc/plugins/debug_logger/composer.json create mode 100644 data/web/rc/plugins/debug_logger/debug_logger.php create mode 100644 data/web/rc/plugins/debug_logger/runlog/runlog.php create mode 100644 data/web/rc/plugins/debug_logger/tests/DebugLogger.php create mode 100644 data/web/rc/plugins/emoticons/composer.json create mode 100644 data/web/rc/plugins/emoticons/config.inc.php.dist create mode 100644 data/web/rc/plugins/emoticons/emoticons.php create mode 100644 data/web/rc/plugins/emoticons/emoticons_engine.php create mode 100644 data/web/rc/plugins/emoticons/localization/en_US.inc create mode 100644 data/web/rc/plugins/emoticons/tests/Emoticons.php create mode 100644 data/web/rc/plugins/emoticons/tests/EmoticonsEngine.php create mode 100644 data/web/rc/plugins/enigma/README create mode 100644 data/web/rc/plugins/enigma/composer.json create mode 100644 data/web/rc/plugins/enigma/config.inc.php.dist create mode 100644 data/web/rc/plugins/enigma/enigma.js create mode 100644 data/web/rc/plugins/enigma/enigma.min.js create mode 100644 data/web/rc/plugins/enigma/enigma.php create mode 100644 data/web/rc/plugins/enigma/home/.htaccess create mode 100644 data/web/rc/plugins/enigma/lib/enigma_driver.php create mode 100644 data/web/rc/plugins/enigma/lib/enigma_driver_gnupg.php create mode 100644 data/web/rc/plugins/enigma/lib/enigma_driver_phpssl.php create mode 100644 data/web/rc/plugins/enigma/lib/enigma_engine.php create mode 100644 data/web/rc/plugins/enigma/lib/enigma_error.php create mode 100644 data/web/rc/plugins/enigma/lib/enigma_key.php create mode 100644 data/web/rc/plugins/enigma/lib/enigma_mime_message.php create mode 100644 data/web/rc/plugins/enigma/lib/enigma_signature.php create mode 100644 data/web/rc/plugins/enigma/lib/enigma_subkey.php create mode 100644 data/web/rc/plugins/enigma/lib/enigma_ui.php create mode 100644 data/web/rc/plugins/enigma/lib/enigma_userid.php create mode 100644 data/web/rc/plugins/enigma/localization/bg_BG.inc create mode 100644 data/web/rc/plugins/enigma/localization/br.inc create mode 100644 data/web/rc/plugins/enigma/localization/cs_CZ.inc create mode 100644 data/web/rc/plugins/enigma/localization/cy_GB.inc create mode 100644 data/web/rc/plugins/enigma/localization/da_DK.inc create mode 100644 data/web/rc/plugins/enigma/localization/de_CH.inc create mode 100644 data/web/rc/plugins/enigma/localization/de_DE.inc create mode 100644 data/web/rc/plugins/enigma/localization/el_GR.inc create mode 100644 data/web/rc/plugins/enigma/localization/en_GB.inc create mode 100644 data/web/rc/plugins/enigma/localization/en_US.inc create mode 100644 data/web/rc/plugins/enigma/localization/es_ES.inc create mode 100644 data/web/rc/plugins/enigma/localization/eu_ES.inc create mode 100644 data/web/rc/plugins/enigma/localization/fi_FI.inc create mode 100644 data/web/rc/plugins/enigma/localization/fo_FO.inc create mode 100644 data/web/rc/plugins/enigma/localization/fr_FR.inc create mode 100644 data/web/rc/plugins/enigma/localization/he_IL.inc create mode 100644 data/web/rc/plugins/enigma/localization/hr_HR.inc create mode 100644 data/web/rc/plugins/enigma/localization/hu_HU.inc create mode 100644 data/web/rc/plugins/enigma/localization/id_ID.inc create mode 100644 data/web/rc/plugins/enigma/localization/is_IS.inc create mode 100644 data/web/rc/plugins/enigma/localization/it_IT.inc create mode 100644 data/web/rc/plugins/enigma/localization/ja_JP.inc create mode 100644 data/web/rc/plugins/enigma/localization/ka_GE.inc create mode 100644 data/web/rc/plugins/enigma/localization/ko_KR.inc create mode 100644 data/web/rc/plugins/enigma/localization/lt_LT.inc create mode 100644 data/web/rc/plugins/enigma/localization/lv_LV.inc create mode 100644 data/web/rc/plugins/enigma/localization/nl_BE.inc create mode 100644 data/web/rc/plugins/enigma/localization/nl_NL.inc create mode 100644 data/web/rc/plugins/enigma/localization/pl_PL.inc create mode 100644 data/web/rc/plugins/enigma/localization/pt_BR.inc create mode 100644 data/web/rc/plugins/enigma/localization/pt_PT.inc create mode 100644 data/web/rc/plugins/enigma/localization/ru_RU.inc create mode 100644 data/web/rc/plugins/enigma/localization/sk_SK.inc create mode 100644 data/web/rc/plugins/enigma/localization/sq_AL.inc create mode 100644 data/web/rc/plugins/enigma/localization/sv_SE.inc create mode 100644 data/web/rc/plugins/enigma/localization/tr_TR.inc create mode 100644 data/web/rc/plugins/enigma/localization/uk_UA.inc create mode 100644 data/web/rc/plugins/enigma/localization/zh_CN.inc create mode 100644 data/web/rc/plugins/enigma/openpgp.min.js create mode 100644 data/web/rc/plugins/enigma/skins/classic/enigma.css create mode 100644 data/web/rc/plugins/enigma/skins/classic/enigma.min.css create mode 100644 data/web/rc/plugins/enigma/skins/classic/enigma.png create mode 100644 data/web/rc/plugins/enigma/skins/classic/enigma_error.png create mode 100644 data/web/rc/plugins/enigma/skins/classic/key.png create mode 100644 data/web/rc/plugins/enigma/skins/classic/key_add.png create mode 100644 data/web/rc/plugins/enigma/skins/classic/keys_toolbar.png create mode 100644 data/web/rc/plugins/enigma/skins/classic/templates/keycreate.html create mode 100644 data/web/rc/plugins/enigma/skins/classic/templates/keyimport.html create mode 100644 data/web/rc/plugins/enigma/skins/classic/templates/keyinfo.html create mode 100644 data/web/rc/plugins/enigma/skins/classic/templates/keys.html create mode 100644 data/web/rc/plugins/enigma/skins/larry/enigma.css create mode 100644 data/web/rc/plugins/enigma/skins/larry/enigma.min.css create mode 100644 data/web/rc/plugins/enigma/skins/larry/enigma_icons.png create mode 100644 data/web/rc/plugins/enigma/skins/larry/templates/keycreate.html create mode 100644 data/web/rc/plugins/enigma/skins/larry/templates/keyimport.html create mode 100644 data/web/rc/plugins/enigma/skins/larry/templates/keyinfo.html create mode 100644 data/web/rc/plugins/enigma/skins/larry/templates/keys.html create mode 100644 data/web/rc/plugins/enigma/tests/Enigma.php create mode 100644 data/web/rc/plugins/example_addressbook/composer.json create mode 100644 data/web/rc/plugins/example_addressbook/example_addressbook.php create mode 100644 data/web/rc/plugins/example_addressbook/example_addressbook_backend.php create mode 100644 data/web/rc/plugins/example_addressbook/tests/ExampleAddressbook.php create mode 100644 data/web/rc/plugins/filesystem_attachments/composer.json create mode 100644 data/web/rc/plugins/filesystem_attachments/filesystem_attachments.php create mode 100644 data/web/rc/plugins/filesystem_attachments/tests/FilesystemAttachments.php create mode 100644 data/web/rc/plugins/help/composer.json create mode 100644 data/web/rc/plugins/help/config.inc.php.dist create mode 100644 data/web/rc/plugins/help/content/license.html create mode 100644 data/web/rc/plugins/help/help.js create mode 100644 data/web/rc/plugins/help/help.min.js create mode 100644 data/web/rc/plugins/help/help.php create mode 100644 data/web/rc/plugins/help/localization/ar_SA.inc create mode 100644 data/web/rc/plugins/help/localization/ast.inc create mode 100644 data/web/rc/plugins/help/localization/az_AZ.inc create mode 100644 data/web/rc/plugins/help/localization/be_BE.inc create mode 100644 data/web/rc/plugins/help/localization/bg_BG.inc create mode 100644 data/web/rc/plugins/help/localization/br.inc create mode 100644 data/web/rc/plugins/help/localization/bs_BA.inc create mode 100644 data/web/rc/plugins/help/localization/ca_ES.inc create mode 100644 data/web/rc/plugins/help/localization/cs_CZ.inc create mode 100644 data/web/rc/plugins/help/localization/cy_GB.inc create mode 100644 data/web/rc/plugins/help/localization/da_DK.inc create mode 100644 data/web/rc/plugins/help/localization/de_CH.inc create mode 100644 data/web/rc/plugins/help/localization/de_DE.inc create mode 100644 data/web/rc/plugins/help/localization/el_GR.inc create mode 100644 data/web/rc/plugins/help/localization/en_CA.inc create mode 100644 data/web/rc/plugins/help/localization/en_GB.inc create mode 100644 data/web/rc/plugins/help/localization/en_US.inc create mode 100644 data/web/rc/plugins/help/localization/eo.inc create mode 100644 data/web/rc/plugins/help/localization/es_419.inc create mode 100644 data/web/rc/plugins/help/localization/es_AR.inc create mode 100644 data/web/rc/plugins/help/localization/es_ES.inc create mode 100644 data/web/rc/plugins/help/localization/et_EE.inc create mode 100644 data/web/rc/plugins/help/localization/eu_ES.inc create mode 100644 data/web/rc/plugins/help/localization/fa_AF.inc create mode 100644 data/web/rc/plugins/help/localization/fa_IR.inc create mode 100644 data/web/rc/plugins/help/localization/fi_FI.inc create mode 100644 data/web/rc/plugins/help/localization/fo_FO.inc create mode 100644 data/web/rc/plugins/help/localization/fr_FR.inc create mode 100644 data/web/rc/plugins/help/localization/fy_NL.inc create mode 100644 data/web/rc/plugins/help/localization/gl_ES.inc create mode 100644 data/web/rc/plugins/help/localization/he_IL.inc create mode 100644 data/web/rc/plugins/help/localization/hr_HR.inc create mode 100644 data/web/rc/plugins/help/localization/hu_HU.inc create mode 100644 data/web/rc/plugins/help/localization/hy_AM.inc create mode 100644 data/web/rc/plugins/help/localization/ia.inc create mode 100644 data/web/rc/plugins/help/localization/id_ID.inc create mode 100644 data/web/rc/plugins/help/localization/is_IS.inc create mode 100644 data/web/rc/plugins/help/localization/it_IT.inc create mode 100644 data/web/rc/plugins/help/localization/ja_JP.inc create mode 100644 data/web/rc/plugins/help/localization/km_KH.inc create mode 100644 data/web/rc/plugins/help/localization/kn_IN.inc create mode 100644 data/web/rc/plugins/help/localization/ko_KR.inc create mode 100644 data/web/rc/plugins/help/localization/ku.inc create mode 100644 data/web/rc/plugins/help/localization/ku_IQ.inc create mode 100644 data/web/rc/plugins/help/localization/lb_LU.inc create mode 100644 data/web/rc/plugins/help/localization/lt_LT.inc create mode 100644 data/web/rc/plugins/help/localization/lv_LV.inc create mode 100644 data/web/rc/plugins/help/localization/ml_IN.inc create mode 100644 data/web/rc/plugins/help/localization/mn_MN.inc create mode 100644 data/web/rc/plugins/help/localization/nb_NO.inc create mode 100644 data/web/rc/plugins/help/localization/nl_BE.inc create mode 100644 data/web/rc/plugins/help/localization/nl_NL.inc create mode 100644 data/web/rc/plugins/help/localization/nn_NO.inc create mode 100644 data/web/rc/plugins/help/localization/pl_PL.inc create mode 100644 data/web/rc/plugins/help/localization/pt_BR.inc create mode 100644 data/web/rc/plugins/help/localization/pt_PT.inc create mode 100644 data/web/rc/plugins/help/localization/ro_RO.inc create mode 100644 data/web/rc/plugins/help/localization/ru_RU.inc create mode 100644 data/web/rc/plugins/help/localization/sk_SK.inc create mode 100644 data/web/rc/plugins/help/localization/sl_SI.inc create mode 100644 data/web/rc/plugins/help/localization/sq_AL.inc create mode 100644 data/web/rc/plugins/help/localization/sr_CS.inc create mode 100644 data/web/rc/plugins/help/localization/sv_SE.inc create mode 100644 data/web/rc/plugins/help/localization/ti.inc create mode 100644 data/web/rc/plugins/help/localization/tr_TR.inc create mode 100644 data/web/rc/plugins/help/localization/tzl.inc create mode 100644 data/web/rc/plugins/help/localization/uk_UA.inc create mode 100644 data/web/rc/plugins/help/localization/vi_VN.inc create mode 100644 data/web/rc/plugins/help/localization/zh_CN.inc create mode 100644 data/web/rc/plugins/help/localization/zh_TW.inc create mode 100644 data/web/rc/plugins/help/skins/classic/help.css create mode 100644 data/web/rc/plugins/help/skins/classic/help.gif create mode 100644 data/web/rc/plugins/help/skins/classic/help.min.css create mode 100644 data/web/rc/plugins/help/skins/classic/templates/help.html create mode 100644 data/web/rc/plugins/help/skins/larry/help.css create mode 100644 data/web/rc/plugins/help/skins/larry/help.min.css create mode 100644 data/web/rc/plugins/help/skins/larry/help.png create mode 100644 data/web/rc/plugins/help/skins/larry/icons.psd create mode 100644 data/web/rc/plugins/help/skins/larry/templates/help.html create mode 100644 data/web/rc/plugins/help/tests/Help.php create mode 100644 data/web/rc/plugins/hide_blockquote/composer.json create mode 100644 data/web/rc/plugins/hide_blockquote/hide_blockquote.js create mode 100644 data/web/rc/plugins/hide_blockquote/hide_blockquote.min.js create mode 100644 data/web/rc/plugins/hide_blockquote/hide_blockquote.php create mode 100644 data/web/rc/plugins/hide_blockquote/localization/ar_SA.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/ast.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/az_AZ.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/be_BE.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/bg_BG.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/br.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/bs_BA.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/ca_ES.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/cs_CZ.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/cy_GB.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/da_DK.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/de_CH.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/de_DE.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/el_GR.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/en_CA.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/en_GB.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/en_US.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/eo.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/es_419.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/es_AR.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/es_ES.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/et_EE.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/eu_ES.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/fa_IR.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/fi_FI.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/fo_FO.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/fr_FR.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/gl_ES.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/he_IL.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/hr_HR.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/hu_HU.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/hy_AM.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/ia.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/id_ID.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/is_IS.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/it_IT.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/ja_JP.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/ka_GE.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/km_KH.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/ko_KR.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/ku.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/lb_LU.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/lt_LT.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/lv_LV.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/ml_IN.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/mn_MN.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/nb_NO.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/nl_BE.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/nl_NL.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/nn_NO.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/pl_PL.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/pt_BR.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/pt_PT.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/ro_RO.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/ru_RU.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/sk_SK.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/sl_SI.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/sq_AL.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/sr_CS.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/sv_SE.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/tr_TR.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/tzl.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/uk_UA.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/vi_VN.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/zh_CN.inc create mode 100644 data/web/rc/plugins/hide_blockquote/localization/zh_TW.inc create mode 100644 data/web/rc/plugins/hide_blockquote/skins/larry/style.css create mode 100644 data/web/rc/plugins/hide_blockquote/skins/larry/style.min.css create mode 100644 data/web/rc/plugins/hide_blockquote/tests/HideBlockquote.php create mode 100644 data/web/rc/plugins/http_authentication/composer.json create mode 100644 data/web/rc/plugins/http_authentication/config.inc.php.dist create mode 100644 data/web/rc/plugins/http_authentication/http_authentication.php create mode 100644 data/web/rc/plugins/http_authentication/logout.html create mode 100644 data/web/rc/plugins/http_authentication/tests/HttpAuthentication.php create mode 100644 data/web/rc/plugins/identicon/composer.json create mode 100644 data/web/rc/plugins/identicon/identicon.php create mode 100644 data/web/rc/plugins/identicon/identicon_engine.php create mode 100644 data/web/rc/plugins/identicon/tests/Identicon.php create mode 100644 data/web/rc/plugins/identity_select/composer.json create mode 100644 data/web/rc/plugins/identity_select/identity_select.php create mode 100644 data/web/rc/plugins/identity_select/tests/IdentitySelect.php create mode 100644 data/web/rc/plugins/jqueryui/README create mode 100644 data/web/rc/plugins/jqueryui/composer.json create mode 100644 data/web/rc/plugins/jqueryui/config.inc.php.dist create mode 100644 data/web/rc/plugins/jqueryui/jqueryui.php create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery-ui-i18n.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-af.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ar-DZ.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ar.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-az.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-bg.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-bs.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ca.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-cs.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-cy-GB.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-da.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-de-CH.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-de.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-el.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-en-AU.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-en-GB.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-en-NZ.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-eo.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-es.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-et.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-eu.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-fa.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-fi.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-fo.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-fr-CH.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-fr.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-gl.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-he.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-hi.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-hr.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-hu.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-hy.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-id.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-is.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-it.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ja.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ka.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-kk.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-km.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ko.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-kz.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-lb.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-lt.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-lv.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-mk.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ml.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ms.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-nl-BE.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-nl.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-no.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-pl.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-pt-BR.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-pt.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-rm.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ro.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ru.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-sk.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-sl.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-sq.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-sr-SR.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-sr.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-sv.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-ta.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-th.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-tj.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-tr.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-uk.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-vi.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-zh-CN.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-zh-HK.js create mode 100644 data/web/rc/plugins/jqueryui/js/i18n/jquery.ui.datepicker-zh-TW.js create mode 100644 data/web/rc/plugins/jqueryui/js/jquery-ui-accessible-datepicker.js create mode 100644 data/web/rc/plugins/jqueryui/js/jquery-ui.min.js create mode 100644 data/web/rc/plugins/jqueryui/js/jquery.minicolors.min.js create mode 100644 data/web/rc/plugins/jqueryui/js/jquery.tagedit.js create mode 100644 data/web/rc/plugins/jqueryui/tests/Jqueryui.php create mode 100644 data/web/rc/plugins/jqueryui/themes/classic/images/buttongradient.png create mode 100644 data/web/rc/plugins/jqueryui/themes/classic/images/listheader.png create mode 100644 data/web/rc/plugins/jqueryui/themes/classic/images/ui-icons_444444_256x240.png create mode 100644 data/web/rc/plugins/jqueryui/themes/classic/images/ui-icons_555555_256x240.png create mode 100644 data/web/rc/plugins/jqueryui/themes/classic/images/ui-icons_777620_256x240.png create mode 100644 data/web/rc/plugins/jqueryui/themes/classic/images/ui-icons_777777_256x240.png create mode 100644 data/web/rc/plugins/jqueryui/themes/classic/images/ui-icons_cc0000_256x240.png create mode 100644 data/web/rc/plugins/jqueryui/themes/classic/images/ui-icons_ffffff_256x240.png create mode 100644 data/web/rc/plugins/jqueryui/themes/classic/jquery-ui.css create mode 100644 data/web/rc/plugins/jqueryui/themes/classic/jquery-ui.css.diff create mode 100644 data/web/rc/plugins/jqueryui/themes/larry/images/animated-overlay.gif create mode 100644 data/web/rc/plugins/jqueryui/themes/larry/images/jquery.minicolors.png create mode 100644 data/web/rc/plugins/jqueryui/themes/larry/images/ui-dialog-close.png create mode 100644 data/web/rc/plugins/jqueryui/themes/larry/images/ui-icons-datepicker.png create mode 100644 data/web/rc/plugins/jqueryui/themes/larry/images/ui-icons_444444_256x240.png create mode 100644 data/web/rc/plugins/jqueryui/themes/larry/images/ui-icons_555555_256x240.png create mode 100644 data/web/rc/plugins/jqueryui/themes/larry/images/ui-icons_777620_256x240.png create mode 100644 data/web/rc/plugins/jqueryui/themes/larry/images/ui-icons_777777_256x240.png create mode 100644 data/web/rc/plugins/jqueryui/themes/larry/images/ui-icons_cc0000_256x240.png create mode 100644 data/web/rc/plugins/jqueryui/themes/larry/images/ui-icons_ffffff_256x240.png create mode 100644 data/web/rc/plugins/jqueryui/themes/larry/jquery-ui.css create mode 100644 data/web/rc/plugins/jqueryui/themes/larry/jquery-ui.css.diff create mode 100644 data/web/rc/plugins/jqueryui/themes/larry/jquery.minicolors.css create mode 100644 data/web/rc/plugins/jqueryui/themes/larry/tagedit.css create mode 100644 data/web/rc/plugins/krb_authentication/config.inc.php.dist create mode 100644 data/web/rc/plugins/krb_authentication/krb_authentication.php create mode 100644 data/web/rc/plugins/krb_authentication/tests/KrbAuthentication.php create mode 100644 data/web/rc/plugins/managesieve/Changelog create mode 100644 data/web/rc/plugins/managesieve/codemirror/addon/selection/active-line.js create mode 100644 data/web/rc/plugins/managesieve/codemirror/addon/selection/mark-selection.js create mode 100644 data/web/rc/plugins/managesieve/codemirror/addon/selection/selection-pointer.js create mode 100644 data/web/rc/plugins/managesieve/codemirror/lib/codemirror.css create mode 100644 data/web/rc/plugins/managesieve/codemirror/lib/codemirror.js create mode 100644 data/web/rc/plugins/managesieve/codemirror/lib/codemirror.min.js create mode 100644 data/web/rc/plugins/managesieve/codemirror/mode/sieve/index.html create mode 100644 data/web/rc/plugins/managesieve/codemirror/mode/sieve/sieve.js create mode 100644 data/web/rc/plugins/managesieve/composer.json create mode 100644 data/web/rc/plugins/managesieve/config.inc.php.dist create mode 100644 data/web/rc/plugins/managesieve/helpdocs/en_US/settings-filters.rst create mode 100644 data/web/rc/plugins/managesieve/helpdocs/en_US/settings-vacation.rst create mode 100644 data/web/rc/plugins/managesieve/helpdocs/po/settings-filters.pot create mode 100644 data/web/rc/plugins/managesieve/helpdocs/po/settings-vacation.pot create mode 100644 data/web/rc/plugins/managesieve/lib/Roundcube/rcube_sieve.php create mode 100644 data/web/rc/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php create mode 100644 data/web/rc/plugins/managesieve/lib/Roundcube/rcube_sieve_script.php create mode 100644 data/web/rc/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php create mode 100644 data/web/rc/plugins/managesieve/localization/ar_SA.inc create mode 100644 data/web/rc/plugins/managesieve/localization/ast.inc create mode 100644 data/web/rc/plugins/managesieve/localization/az_AZ.inc create mode 100644 data/web/rc/plugins/managesieve/localization/be_BE.inc create mode 100644 data/web/rc/plugins/managesieve/localization/bg_BG.inc create mode 100644 data/web/rc/plugins/managesieve/localization/br.inc create mode 100644 data/web/rc/plugins/managesieve/localization/bs_BA.inc create mode 100644 data/web/rc/plugins/managesieve/localization/ca_ES.inc create mode 100644 data/web/rc/plugins/managesieve/localization/cs_CZ.inc create mode 100644 data/web/rc/plugins/managesieve/localization/cy_GB.inc create mode 100644 data/web/rc/plugins/managesieve/localization/da_DK.inc create mode 100644 data/web/rc/plugins/managesieve/localization/de_CH.inc create mode 100644 data/web/rc/plugins/managesieve/localization/de_DE.inc create mode 100644 data/web/rc/plugins/managesieve/localization/el_GR.inc create mode 100644 data/web/rc/plugins/managesieve/localization/en_CA.inc create mode 100644 data/web/rc/plugins/managesieve/localization/en_GB.inc create mode 100644 data/web/rc/plugins/managesieve/localization/en_US.inc create mode 100644 data/web/rc/plugins/managesieve/localization/eo.inc create mode 100644 data/web/rc/plugins/managesieve/localization/es_419.inc create mode 100644 data/web/rc/plugins/managesieve/localization/es_AR.inc create mode 100644 data/web/rc/plugins/managesieve/localization/es_ES.inc create mode 100644 data/web/rc/plugins/managesieve/localization/et_EE.inc create mode 100644 data/web/rc/plugins/managesieve/localization/eu_ES.inc create mode 100644 data/web/rc/plugins/managesieve/localization/fa_AF.inc create mode 100644 data/web/rc/plugins/managesieve/localization/fa_IR.inc create mode 100644 data/web/rc/plugins/managesieve/localization/fi_FI.inc create mode 100644 data/web/rc/plugins/managesieve/localization/fo_FO.inc create mode 100644 data/web/rc/plugins/managesieve/localization/fr_FR.inc create mode 100644 data/web/rc/plugins/managesieve/localization/fy_NL.inc create mode 100644 data/web/rc/plugins/managesieve/localization/gl_ES.inc create mode 100644 data/web/rc/plugins/managesieve/localization/he_IL.inc create mode 100644 data/web/rc/plugins/managesieve/localization/hr_HR.inc create mode 100644 data/web/rc/plugins/managesieve/localization/hu_HU.inc create mode 100644 data/web/rc/plugins/managesieve/localization/hy_AM.inc create mode 100644 data/web/rc/plugins/managesieve/localization/ia.inc create mode 100644 data/web/rc/plugins/managesieve/localization/id_ID.inc create mode 100644 data/web/rc/plugins/managesieve/localization/is_IS.inc create mode 100644 data/web/rc/plugins/managesieve/localization/it_IT.inc create mode 100644 data/web/rc/plugins/managesieve/localization/ja_JP.inc create mode 100644 data/web/rc/plugins/managesieve/localization/ka_GE.inc create mode 100644 data/web/rc/plugins/managesieve/localization/km_KH.inc create mode 100644 data/web/rc/plugins/managesieve/localization/ko_KR.inc create mode 100644 data/web/rc/plugins/managesieve/localization/ku.inc create mode 100644 data/web/rc/plugins/managesieve/localization/lb_LU.inc create mode 100644 data/web/rc/plugins/managesieve/localization/lt_LT.inc create mode 100644 data/web/rc/plugins/managesieve/localization/lv_LV.inc create mode 100644 data/web/rc/plugins/managesieve/localization/ml_IN.inc create mode 100644 data/web/rc/plugins/managesieve/localization/mn_MN.inc create mode 100644 data/web/rc/plugins/managesieve/localization/mr_IN.inc create mode 100644 data/web/rc/plugins/managesieve/localization/nb_NO.inc create mode 100644 data/web/rc/plugins/managesieve/localization/nl_BE.inc create mode 100644 data/web/rc/plugins/managesieve/localization/nl_NL.inc create mode 100644 data/web/rc/plugins/managesieve/localization/nn_NO.inc create mode 100644 data/web/rc/plugins/managesieve/localization/pl_PL.inc create mode 100644 data/web/rc/plugins/managesieve/localization/pt_BR.inc create mode 100644 data/web/rc/plugins/managesieve/localization/pt_PT.inc create mode 100644 data/web/rc/plugins/managesieve/localization/ro_RO.inc create mode 100644 data/web/rc/plugins/managesieve/localization/ru_RU.inc create mode 100644 data/web/rc/plugins/managesieve/localization/si_LK.inc create mode 100644 data/web/rc/plugins/managesieve/localization/sk_SK.inc create mode 100644 data/web/rc/plugins/managesieve/localization/sl_SI.inc create mode 100644 data/web/rc/plugins/managesieve/localization/sq_AL.inc create mode 100644 data/web/rc/plugins/managesieve/localization/sr_CS.inc create mode 100644 data/web/rc/plugins/managesieve/localization/sv_SE.inc create mode 100644 data/web/rc/plugins/managesieve/localization/th_TH.inc create mode 100644 data/web/rc/plugins/managesieve/localization/tr_TR.inc create mode 100644 data/web/rc/plugins/managesieve/localization/tzl.inc create mode 100644 data/web/rc/plugins/managesieve/localization/uk_UA.inc create mode 100644 data/web/rc/plugins/managesieve/localization/vi_VN.inc create mode 100644 data/web/rc/plugins/managesieve/localization/zh_CN.inc create mode 100644 data/web/rc/plugins/managesieve/localization/zh_TW.inc create mode 100644 data/web/rc/plugins/managesieve/managesieve.js create mode 100644 data/web/rc/plugins/managesieve/managesieve.min.js create mode 100644 data/web/rc/plugins/managesieve/managesieve.php create mode 100644 data/web/rc/plugins/managesieve/skins/classic/images/add.png create mode 100644 data/web/rc/plugins/managesieve/skins/classic/images/del.png create mode 100644 data/web/rc/plugins/managesieve/skins/classic/images/down_small.gif create mode 100644 data/web/rc/plugins/managesieve/skins/classic/images/erase.png create mode 100644 data/web/rc/plugins/managesieve/skins/classic/images/filter.png create mode 100644 data/web/rc/plugins/managesieve/skins/classic/images/up_small.gif create mode 100644 data/web/rc/plugins/managesieve/skins/classic/managesieve.css create mode 100644 data/web/rc/plugins/managesieve/skins/classic/managesieve.min.css create mode 100644 data/web/rc/plugins/managesieve/skins/classic/managesieve_mail.css create mode 100644 data/web/rc/plugins/managesieve/skins/classic/managesieve_mail.min.css create mode 100644 data/web/rc/plugins/managesieve/skins/classic/templates/filteredit.html create mode 100644 data/web/rc/plugins/managesieve/skins/classic/templates/managesieve.html create mode 100644 data/web/rc/plugins/managesieve/skins/classic/templates/setedit.html create mode 100644 data/web/rc/plugins/managesieve/skins/classic/templates/seteditraw.html create mode 100644 data/web/rc/plugins/managesieve/skins/classic/templates/vacation.html create mode 100644 data/web/rc/plugins/managesieve/skins/larry/images/add.png create mode 100644 data/web/rc/plugins/managesieve/skins/larry/images/del.png create mode 100644 data/web/rc/plugins/managesieve/skins/larry/images/down_small.gif create mode 100644 data/web/rc/plugins/managesieve/skins/larry/images/erase.png create mode 100644 data/web/rc/plugins/managesieve/skins/larry/images/up_small.gif create mode 100644 data/web/rc/plugins/managesieve/skins/larry/images/vacation_icons.png create mode 100644 data/web/rc/plugins/managesieve/skins/larry/managesieve.css create mode 100644 data/web/rc/plugins/managesieve/skins/larry/managesieve.min.css create mode 100644 data/web/rc/plugins/managesieve/skins/larry/managesieve_mail.css create mode 100644 data/web/rc/plugins/managesieve/skins/larry/managesieve_mail.min.css create mode 100644 data/web/rc/plugins/managesieve/skins/larry/templates/filteredit.html create mode 100644 data/web/rc/plugins/managesieve/skins/larry/templates/managesieve.html create mode 100644 data/web/rc/plugins/managesieve/skins/larry/templates/setedit.html create mode 100644 data/web/rc/plugins/managesieve/skins/larry/templates/seteditraw.html create mode 100644 data/web/rc/plugins/managesieve/skins/larry/templates/vacation.html create mode 100644 data/web/rc/plugins/managesieve/tests/Managesieve.php create mode 100644 data/web/rc/plugins/managesieve/tests/Parser.php create mode 100644 data/web/rc/plugins/managesieve/tests/Tokenizer.php create mode 100644 data/web/rc/plugins/managesieve/tests/Vacation.php create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser.out create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_body create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_date create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_duplicate create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_enotify_a create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_enotify_b create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_imapflags create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_include create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_index create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_kep14 create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_kep14.out create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_nesting create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_nesting.out create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_notify_a create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_notify_b create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_prefix create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_relational create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_subaddress create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_vacation create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_vacation_seconds create mode 100644 data/web/rc/plugins/managesieve/tests/src/parser_variables create mode 100644 data/web/rc/plugins/markasjunk/composer.json create mode 100644 data/web/rc/plugins/markasjunk/localization/ar.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/ar_SA.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/ast.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/az_AZ.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/be_BE.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/bg_BG.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/br.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/bs_BA.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/ca_ES.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/cs_CZ.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/cy_GB.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/da_DK.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/de_CH.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/de_DE.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/el_GR.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/en_CA.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/en_GB.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/en_US.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/eo.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/es_419.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/es_AR.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/es_ES.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/et_EE.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/eu_ES.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/fa_AF.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/fa_IR.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/fi_FI.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/fo_FO.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/fr_FR.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/fy_NL.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/gl_ES.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/he_IL.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/hr_HR.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/hu_HU.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/hy_AM.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/ia.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/id_ID.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/is_IS.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/it_IT.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/ja_JP.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/km_KH.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/ko_KR.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/ku.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/lb_LU.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/lt_LT.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/lv_LV.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/ml_IN.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/mn_MN.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/mr_IN.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/nb_NO.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/nl_BE.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/nl_NL.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/nn_NO.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/pl_PL.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/pt_BR.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/pt_PT.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/ro_RO.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/ru_RU.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/si_LK.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/sk_SK.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/sl_SI.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/sq_AL.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/sr_CS.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/sv_SE.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/tr_TR.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/uk_UA.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/vi_VN.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/zh_CN.inc create mode 100644 data/web/rc/plugins/markasjunk/localization/zh_TW.inc create mode 100644 data/web/rc/plugins/markasjunk/markasjunk.js create mode 100644 data/web/rc/plugins/markasjunk/markasjunk.min.js create mode 100644 data/web/rc/plugins/markasjunk/markasjunk.php create mode 100644 data/web/rc/plugins/markasjunk/skins/classic/junk_act.png create mode 100644 data/web/rc/plugins/markasjunk/skins/classic/junk_pas.png create mode 100644 data/web/rc/plugins/markasjunk/skins/classic/markasjunk.css create mode 100644 data/web/rc/plugins/markasjunk/skins/classic/markasjunk.min.css create mode 100644 data/web/rc/plugins/markasjunk/skins/larry/.gitignore create mode 100644 data/web/rc/plugins/markasjunk/tests/Markasjunk.php create mode 100644 data/web/rc/plugins/new_user_dialog/composer.json create mode 100644 data/web/rc/plugins/new_user_dialog/localization/ar.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/ar_SA.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/ast.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/az_AZ.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/be_BE.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/bg_BG.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/br.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/bs_BA.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/ca_ES.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/cs_CZ.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/cy_GB.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/da_DK.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/de_CH.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/de_DE.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/el_GR.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/en_CA.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/en_GB.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/en_US.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/eo.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/es_419.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/es_AR.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/es_ES.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/et_EE.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/eu_ES.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/fa_AF.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/fa_IR.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/fi_FI.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/fo_FO.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/fr_FR.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/gl_ES.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/he_IL.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/hr_HR.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/hu_HU.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/hy_AM.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/ia.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/id_ID.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/it_IT.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/ja_JP.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/km_KH.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/ko_KR.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/ku.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/ku_IQ.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/lb_LU.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/lt_LT.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/lv_LV.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/ml_IN.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/mn_MN.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/mr_IN.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/nb_NO.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/nl_BE.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/nl_NL.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/nn_NO.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/pl_PL.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/pt_BR.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/pt_PT.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/ro_RO.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/ru_RU.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/sk_SK.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/sl_SI.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/sq_AL.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/sr_CS.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/sv_SE.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/tr_TR.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/uk_UA.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/vi_VN.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/zh_CN.inc create mode 100644 data/web/rc/plugins/new_user_dialog/localization/zh_TW.inc create mode 100644 data/web/rc/plugins/new_user_dialog/new_user_dialog.php create mode 100644 data/web/rc/plugins/new_user_dialog/newuserdialog.css create mode 100644 data/web/rc/plugins/new_user_dialog/newuserdialog.min.css create mode 100644 data/web/rc/plugins/new_user_dialog/tests/NewUserDialog.php create mode 100644 data/web/rc/plugins/new_user_identity/composer.json create mode 100644 data/web/rc/plugins/new_user_identity/config.inc.php.dist create mode 100644 data/web/rc/plugins/new_user_identity/new_user_identity.php create mode 100644 data/web/rc/plugins/new_user_identity/tests/NewUserIdentity.php create mode 100644 data/web/rc/plugins/newmail_notifier/composer.json create mode 100644 data/web/rc/plugins/newmail_notifier/config.inc.php.dist create mode 100644 data/web/rc/plugins/newmail_notifier/favicon.ico create mode 100644 data/web/rc/plugins/newmail_notifier/localization/ar_SA.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/ast.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/az_AZ.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/be_BE.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/bg_BG.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/br.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/bs_BA.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/ca_ES.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/cs_CZ.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/cy_GB.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/da_DK.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/de_CH.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/de_DE.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/el_GR.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/en_CA.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/en_GB.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/en_US.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/eo.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/es_419.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/es_AR.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/es_ES.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/et_EE.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/eu_ES.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/fa_IR.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/fi_FI.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/fo_FO.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/fr_FR.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/fy_NL.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/gl_ES.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/he_IL.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/hr_HR.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/hu_HU.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/hy_AM.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/ia.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/id_ID.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/it_IT.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/ja_JP.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/km_KH.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/ko_KR.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/ku.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/ku_IQ.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/lb_LU.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/lt_LT.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/lv_LV.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/ml_IN.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/mn_MN.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/mr_IN.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/nb_NO.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/nl_BE.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/nl_NL.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/nn_NO.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/pl_PL.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/pt_BR.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/pt_PT.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/ro_RO.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/ru_RU.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/si_LK.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/sk_SK.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/sl_SI.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/sq_AL.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/sr_CS.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/sv_SE.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/ti.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/tr_TR.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/uk_UA.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/vi_VN.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/zh_CN.inc create mode 100644 data/web/rc/plugins/newmail_notifier/localization/zh_TW.inc create mode 100644 data/web/rc/plugins/newmail_notifier/mail.png create mode 100644 data/web/rc/plugins/newmail_notifier/newmail_notifier.js create mode 100644 data/web/rc/plugins/newmail_notifier/newmail_notifier.min.js create mode 100644 data/web/rc/plugins/newmail_notifier/newmail_notifier.php create mode 100644 data/web/rc/plugins/newmail_notifier/overlay.ico create mode 100644 data/web/rc/plugins/newmail_notifier/sound.mp3 create mode 100644 data/web/rc/plugins/newmail_notifier/sound.wav create mode 100644 data/web/rc/plugins/newmail_notifier/tests/NewmailNotifier.php create mode 100644 data/web/rc/plugins/password/README create mode 100644 data/web/rc/plugins/password/composer.json create mode 100644 data/web/rc/plugins/password/config.inc.php create mode 100644 data/web/rc/plugins/password/config.inc.php.dist create mode 100644 data/web/rc/plugins/password/drivers/chpasswd.php create mode 100644 data/web/rc/plugins/password/drivers/cpanel.php create mode 100644 data/web/rc/plugins/password/drivers/cpanel_webmail.php create mode 100644 data/web/rc/plugins/password/drivers/dbmail.php create mode 100644 data/web/rc/plugins/password/drivers/directadmin.php create mode 100644 data/web/rc/plugins/password/drivers/domainfactory.php create mode 100644 data/web/rc/plugins/password/drivers/expect.php create mode 100644 data/web/rc/plugins/password/drivers/gearman.php create mode 100644 data/web/rc/plugins/password/drivers/hmail.php create mode 100644 data/web/rc/plugins/password/drivers/kpasswd.php create mode 100644 data/web/rc/plugins/password/drivers/ldap.php create mode 100644 data/web/rc/plugins/password/drivers/ldap_ppolicy.php create mode 100644 data/web/rc/plugins/password/drivers/ldap_simple.php create mode 100644 data/web/rc/plugins/password/drivers/pam.php create mode 100644 data/web/rc/plugins/password/drivers/plesk.php create mode 100644 data/web/rc/plugins/password/drivers/poppassd.php create mode 100644 data/web/rc/plugins/password/drivers/pw_usermod.php create mode 100644 data/web/rc/plugins/password/drivers/sasl.php create mode 100644 data/web/rc/plugins/password/drivers/smb.php create mode 100644 data/web/rc/plugins/password/drivers/sql.php create mode 100644 data/web/rc/plugins/password/drivers/virtualmin.php create mode 100644 data/web/rc/plugins/password/drivers/vpopmaild.php create mode 100644 data/web/rc/plugins/password/drivers/ximss.php create mode 100644 data/web/rc/plugins/password/drivers/xmail.php create mode 100644 data/web/rc/plugins/password/helpers/change_ldap_pass.pl create mode 100644 data/web/rc/plugins/password/helpers/chgdbmailusers.c create mode 100644 data/web/rc/plugins/password/helpers/chgsaslpasswd.c create mode 100644 data/web/rc/plugins/password/helpers/chgvirtualminpasswd.c create mode 100644 data/web/rc/plugins/password/helpers/chpass-wrapper.py create mode 100644 data/web/rc/plugins/password/helpers/dovecot_hmacmd5.php create mode 100644 data/web/rc/plugins/password/helpers/passwd-expect create mode 100644 data/web/rc/plugins/password/localization/ar.inc create mode 100644 data/web/rc/plugins/password/localization/ar_SA.inc create mode 100644 data/web/rc/plugins/password/localization/ast.inc create mode 100644 data/web/rc/plugins/password/localization/az_AZ.inc create mode 100644 data/web/rc/plugins/password/localization/be_BE.inc create mode 100644 data/web/rc/plugins/password/localization/bg_BG.inc create mode 100644 data/web/rc/plugins/password/localization/br.inc create mode 100644 data/web/rc/plugins/password/localization/bs_BA.inc create mode 100644 data/web/rc/plugins/password/localization/ca_ES.inc create mode 100644 data/web/rc/plugins/password/localization/cs_CZ.inc create mode 100644 data/web/rc/plugins/password/localization/cy_GB.inc create mode 100644 data/web/rc/plugins/password/localization/da_DK.inc create mode 100644 data/web/rc/plugins/password/localization/de_CH.inc create mode 100644 data/web/rc/plugins/password/localization/de_DE.inc create mode 100644 data/web/rc/plugins/password/localization/el_GR.inc create mode 100644 data/web/rc/plugins/password/localization/en_CA.inc create mode 100644 data/web/rc/plugins/password/localization/en_GB.inc create mode 100644 data/web/rc/plugins/password/localization/en_US.inc create mode 100644 data/web/rc/plugins/password/localization/eo.inc create mode 100644 data/web/rc/plugins/password/localization/es_419.inc create mode 100644 data/web/rc/plugins/password/localization/es_AR.inc create mode 100644 data/web/rc/plugins/password/localization/es_ES.inc create mode 100644 data/web/rc/plugins/password/localization/et_EE.inc create mode 100644 data/web/rc/plugins/password/localization/eu_ES.inc create mode 100644 data/web/rc/plugins/password/localization/fa_AF.inc create mode 100644 data/web/rc/plugins/password/localization/fa_IR.inc create mode 100644 data/web/rc/plugins/password/localization/fi_FI.inc create mode 100644 data/web/rc/plugins/password/localization/fo_FO.inc create mode 100644 data/web/rc/plugins/password/localization/fr_FR.inc create mode 100644 data/web/rc/plugins/password/localization/fy_NL.inc create mode 100644 data/web/rc/plugins/password/localization/gl_ES.inc create mode 100644 data/web/rc/plugins/password/localization/he_IL.inc create mode 100644 data/web/rc/plugins/password/localization/hr_HR.inc create mode 100644 data/web/rc/plugins/password/localization/hu_HU.inc create mode 100644 data/web/rc/plugins/password/localization/hy_AM.inc create mode 100644 data/web/rc/plugins/password/localization/ia.inc create mode 100644 data/web/rc/plugins/password/localization/id_ID.inc create mode 100644 data/web/rc/plugins/password/localization/is_IS.inc create mode 100644 data/web/rc/plugins/password/localization/it_IT.inc create mode 100644 data/web/rc/plugins/password/localization/ja_JP.inc create mode 100644 data/web/rc/plugins/password/localization/km_KH.inc create mode 100644 data/web/rc/plugins/password/localization/ko_KR.inc create mode 100644 data/web/rc/plugins/password/localization/ku.inc create mode 100644 data/web/rc/plugins/password/localization/ku_IQ.inc create mode 100644 data/web/rc/plugins/password/localization/lb_LU.inc create mode 100644 data/web/rc/plugins/password/localization/lt_LT.inc create mode 100644 data/web/rc/plugins/password/localization/lv_LV.inc create mode 100644 data/web/rc/plugins/password/localization/ml_IN.inc create mode 100644 data/web/rc/plugins/password/localization/mn_MN.inc create mode 100644 data/web/rc/plugins/password/localization/nb_NO.inc create mode 100644 data/web/rc/plugins/password/localization/nl_BE.inc create mode 100644 data/web/rc/plugins/password/localization/nl_NL.inc create mode 100644 data/web/rc/plugins/password/localization/nn_NO.inc create mode 100644 data/web/rc/plugins/password/localization/pl_PL.inc create mode 100644 data/web/rc/plugins/password/localization/pt_BR.inc create mode 100644 data/web/rc/plugins/password/localization/pt_PT.inc create mode 100644 data/web/rc/plugins/password/localization/ro_RO.inc create mode 100644 data/web/rc/plugins/password/localization/ru_RU.inc create mode 100644 data/web/rc/plugins/password/localization/sk_SK.inc create mode 100644 data/web/rc/plugins/password/localization/sl_SI.inc create mode 100644 data/web/rc/plugins/password/localization/sq_AL.inc create mode 100644 data/web/rc/plugins/password/localization/sr_CS.inc create mode 100644 data/web/rc/plugins/password/localization/sv_SE.inc create mode 100644 data/web/rc/plugins/password/localization/th_TH.inc create mode 100644 data/web/rc/plugins/password/localization/ti.inc create mode 100644 data/web/rc/plugins/password/localization/tr_TR.inc create mode 100644 data/web/rc/plugins/password/localization/uk_UA.inc create mode 100644 data/web/rc/plugins/password/localization/vi_VN.inc create mode 100644 data/web/rc/plugins/password/localization/zh_CN.inc create mode 100644 data/web/rc/plugins/password/localization/zh_TW.inc create mode 100644 data/web/rc/plugins/password/password.js create mode 100644 data/web/rc/plugins/password/password.min.js create mode 100644 data/web/rc/plugins/password/password.php create mode 100644 data/web/rc/plugins/password/tests/Password.php create mode 100644 data/web/rc/plugins/redundant_attachments/composer.json create mode 100644 data/web/rc/plugins/redundant_attachments/config.inc.php.dist create mode 100644 data/web/rc/plugins/redundant_attachments/redundant_attachments.php create mode 100644 data/web/rc/plugins/redundant_attachments/tests/RedundantAttachments.php create mode 100644 data/web/rc/plugins/show_additional_headers/composer.json create mode 100644 data/web/rc/plugins/show_additional_headers/show_additional_headers.php create mode 100644 data/web/rc/plugins/show_additional_headers/tests/ShowAdditionalHeaders.php create mode 100644 data/web/rc/plugins/squirrelmail_usercopy/composer.json create mode 100644 data/web/rc/plugins/squirrelmail_usercopy/config.inc.php.dist create mode 100644 data/web/rc/plugins/squirrelmail_usercopy/squirrelmail_usercopy.php create mode 100644 data/web/rc/plugins/squirrelmail_usercopy/tests/SquirrelmailUsercopy.php create mode 100644 data/web/rc/plugins/subscriptions_option/composer.json create mode 100644 data/web/rc/plugins/subscriptions_option/localization/ar_SA.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/ast.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/az_AZ.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/be_BE.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/bg_BG.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/br.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/bs_BA.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/ca_ES.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/cs_CZ.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/cy_GB.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/da_DK.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/de_CH.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/de_DE.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/el_GR.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/en_CA.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/en_GB.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/en_US.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/eo.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/es_419.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/es_AR.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/es_ES.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/et_EE.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/eu_ES.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/fa_AF.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/fa_IR.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/fi_FI.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/fo_FO.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/fr_FR.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/gl_ES.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/he_IL.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/hr_HR.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/hu_HU.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/hy_AM.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/ia.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/id_ID.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/is_IS.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/it_IT.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/ja_JP.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/km_KH.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/ko_KR.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/ku.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/lb_LU.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/lt_LT.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/lv_LV.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/ml_IN.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/mn_MN.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/nb_NO.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/nl_NL.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/nn_NO.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/pl_PL.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/pt_BR.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/pt_PT.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/ro_RO.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/ru_RU.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/sk_SK.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/sl_SI.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/sq_AL.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/sr_CS.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/sv_SE.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/tr_TR.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/uk_UA.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/vi_VN.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/zh_CN.inc create mode 100644 data/web/rc/plugins/subscriptions_option/localization/zh_TW.inc create mode 100644 data/web/rc/plugins/subscriptions_option/subscriptions_option.php create mode 100644 data/web/rc/plugins/subscriptions_option/tests/SubscriptionsOption.php create mode 100644 data/web/rc/plugins/userinfo/composer.json create mode 100644 data/web/rc/plugins/userinfo/localization/ar.inc create mode 100644 data/web/rc/plugins/userinfo/localization/ar_SA.inc create mode 100644 data/web/rc/plugins/userinfo/localization/ast.inc create mode 100644 data/web/rc/plugins/userinfo/localization/az_AZ.inc create mode 100644 data/web/rc/plugins/userinfo/localization/be_BE.inc create mode 100644 data/web/rc/plugins/userinfo/localization/bg_BG.inc create mode 100644 data/web/rc/plugins/userinfo/localization/br.inc create mode 100644 data/web/rc/plugins/userinfo/localization/bs_BA.inc create mode 100644 data/web/rc/plugins/userinfo/localization/ca_ES.inc create mode 100644 data/web/rc/plugins/userinfo/localization/cs_CZ.inc create mode 100644 data/web/rc/plugins/userinfo/localization/cy_GB.inc create mode 100644 data/web/rc/plugins/userinfo/localization/da_DK.inc create mode 100644 data/web/rc/plugins/userinfo/localization/de_CH.inc create mode 100644 data/web/rc/plugins/userinfo/localization/de_DE.inc create mode 100644 data/web/rc/plugins/userinfo/localization/el_GR.inc create mode 100644 data/web/rc/plugins/userinfo/localization/en_CA.inc create mode 100644 data/web/rc/plugins/userinfo/localization/en_GB.inc create mode 100644 data/web/rc/plugins/userinfo/localization/en_US.inc create mode 100644 data/web/rc/plugins/userinfo/localization/eo.inc create mode 100644 data/web/rc/plugins/userinfo/localization/es_419.inc create mode 100644 data/web/rc/plugins/userinfo/localization/es_AR.inc create mode 100644 data/web/rc/plugins/userinfo/localization/es_ES.inc create mode 100644 data/web/rc/plugins/userinfo/localization/et_EE.inc create mode 100644 data/web/rc/plugins/userinfo/localization/eu_ES.inc create mode 100644 data/web/rc/plugins/userinfo/localization/fa_AF.inc create mode 100644 data/web/rc/plugins/userinfo/localization/fa_IR.inc create mode 100644 data/web/rc/plugins/userinfo/localization/fi_FI.inc create mode 100644 data/web/rc/plugins/userinfo/localization/fo_FO.inc create mode 100644 data/web/rc/plugins/userinfo/localization/fr_FR.inc create mode 100644 data/web/rc/plugins/userinfo/localization/fy_NL.inc create mode 100644 data/web/rc/plugins/userinfo/localization/gl_ES.inc create mode 100644 data/web/rc/plugins/userinfo/localization/he_IL.inc create mode 100644 data/web/rc/plugins/userinfo/localization/hr_HR.inc create mode 100644 data/web/rc/plugins/userinfo/localization/hu_HU.inc create mode 100644 data/web/rc/plugins/userinfo/localization/hy_AM.inc create mode 100644 data/web/rc/plugins/userinfo/localization/ia.inc create mode 100644 data/web/rc/plugins/userinfo/localization/id_ID.inc create mode 100644 data/web/rc/plugins/userinfo/localization/is_IS.inc create mode 100644 data/web/rc/plugins/userinfo/localization/it_IT.inc create mode 100644 data/web/rc/plugins/userinfo/localization/ja_JP.inc create mode 100644 data/web/rc/plugins/userinfo/localization/km_KH.inc create mode 100644 data/web/rc/plugins/userinfo/localization/ko_KR.inc create mode 100644 data/web/rc/plugins/userinfo/localization/ku.inc create mode 100644 data/web/rc/plugins/userinfo/localization/ku_IQ.inc create mode 100644 data/web/rc/plugins/userinfo/localization/lb_LU.inc create mode 100644 data/web/rc/plugins/userinfo/localization/lt_LT.inc create mode 100644 data/web/rc/plugins/userinfo/localization/lv_LV.inc create mode 100644 data/web/rc/plugins/userinfo/localization/ml_IN.inc create mode 100644 data/web/rc/plugins/userinfo/localization/mn_MN.inc create mode 100644 data/web/rc/plugins/userinfo/localization/mr_IN.inc create mode 100644 data/web/rc/plugins/userinfo/localization/nb_NO.inc create mode 100644 data/web/rc/plugins/userinfo/localization/nl_BE.inc create mode 100644 data/web/rc/plugins/userinfo/localization/nl_NL.inc create mode 100644 data/web/rc/plugins/userinfo/localization/nn_NO.inc create mode 100644 data/web/rc/plugins/userinfo/localization/pl_PL.inc create mode 100644 data/web/rc/plugins/userinfo/localization/pt_BR.inc create mode 100644 data/web/rc/plugins/userinfo/localization/pt_PT.inc create mode 100644 data/web/rc/plugins/userinfo/localization/ro_RO.inc create mode 100644 data/web/rc/plugins/userinfo/localization/ru_RU.inc create mode 100644 data/web/rc/plugins/userinfo/localization/sk_SK.inc create mode 100644 data/web/rc/plugins/userinfo/localization/sl_SI.inc create mode 100644 data/web/rc/plugins/userinfo/localization/sq_AL.inc create mode 100644 data/web/rc/plugins/userinfo/localization/sr_CS.inc create mode 100644 data/web/rc/plugins/userinfo/localization/sv_SE.inc create mode 100644 data/web/rc/plugins/userinfo/localization/ti.inc create mode 100644 data/web/rc/plugins/userinfo/localization/tr_TR.inc create mode 100644 data/web/rc/plugins/userinfo/localization/uk_UA.inc create mode 100644 data/web/rc/plugins/userinfo/localization/vi_VN.inc create mode 100644 data/web/rc/plugins/userinfo/localization/zh_CN.inc create mode 100644 data/web/rc/plugins/userinfo/localization/zh_TW.inc create mode 100644 data/web/rc/plugins/userinfo/tests/Userinfo.php create mode 100644 data/web/rc/plugins/userinfo/userinfo.js create mode 100644 data/web/rc/plugins/userinfo/userinfo.min.js create mode 100644 data/web/rc/plugins/userinfo/userinfo.php create mode 100644 data/web/rc/plugins/vcard_attachments/composer.json create mode 100644 data/web/rc/plugins/vcard_attachments/localization/ar.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/ar_SA.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/ast.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/az_AZ.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/be_BE.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/bg_BG.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/br.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/bs_BA.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/ca_ES.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/cs_CZ.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/cy_GB.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/da_DK.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/de_CH.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/de_DE.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/el_GR.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/en_CA.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/en_GB.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/en_US.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/eo.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/es_419.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/es_AR.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/es_ES.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/et_EE.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/eu_ES.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/fa_IR.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/fi_FI.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/fo_FO.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/fr_FR.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/gl_ES.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/he_IL.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/hr_HR.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/hu_HU.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/hy_AM.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/ia.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/id_ID.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/it_IT.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/ja_JP.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/km_KH.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/ko_KR.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/ku.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/lb_LU.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/lt_LT.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/lv_LV.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/ml_IN.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/mn_MN.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/mr_IN.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/nb_NO.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/nl_NL.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/nn_NO.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/pl_PL.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/pt_BR.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/pt_PT.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/ro_RO.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/ru_RU.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/si_LK.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/sk_SK.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/sl_SI.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/sq_AL.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/sr_CS.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/sv_SE.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/tr_TR.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/uk_UA.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/vi_VN.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/zh_CN.inc create mode 100644 data/web/rc/plugins/vcard_attachments/localization/zh_TW.inc create mode 100644 data/web/rc/plugins/vcard_attachments/skins/classic/style.css create mode 100644 data/web/rc/plugins/vcard_attachments/skins/classic/style.min.css create mode 100644 data/web/rc/plugins/vcard_attachments/skins/classic/vcard.png create mode 100644 data/web/rc/plugins/vcard_attachments/skins/classic/vcard_add_contact.png create mode 100644 data/web/rc/plugins/vcard_attachments/skins/larry/style.css create mode 100644 data/web/rc/plugins/vcard_attachments/skins/larry/style.min.css create mode 100644 data/web/rc/plugins/vcard_attachments/skins/larry/vcard.png create mode 100644 data/web/rc/plugins/vcard_attachments/skins/larry/vcard_add_contact.png create mode 100644 data/web/rc/plugins/vcard_attachments/tests/VcardAttachments.php create mode 100644 data/web/rc/plugins/vcard_attachments/vcard_attachments.php create mode 100644 data/web/rc/plugins/vcard_attachments/vcardattach.js create mode 100644 data/web/rc/plugins/vcard_attachments/vcardattach.min.js create mode 100644 data/web/rc/plugins/virtuser_file/composer.json create mode 100644 data/web/rc/plugins/virtuser_file/tests/VirtuserFile.php create mode 100644 data/web/rc/plugins/virtuser_file/virtuser_file.php create mode 100644 data/web/rc/plugins/virtuser_query/composer.json create mode 100644 data/web/rc/plugins/virtuser_query/tests/VirtuserQuery.php create mode 100644 data/web/rc/plugins/virtuser_query/virtuser_query.php create mode 100644 data/web/rc/plugins/zipdownload/README create mode 100644 data/web/rc/plugins/zipdownload/composer.json create mode 100644 data/web/rc/plugins/zipdownload/config.inc.php.dist create mode 100644 data/web/rc/plugins/zipdownload/localization/ar.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/ar_SA.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/ast.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/az_AZ.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/be_BE.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/bg_BG.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/br.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/bs_BA.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/ca_ES.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/cs_CZ.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/cy_GB.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/da_DK.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/de_CH.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/de_DE.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/el_GR.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/en_CA.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/en_GB.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/en_US.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/eo.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/es_419.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/es_AR.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/es_ES.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/et_EE.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/eu_ES.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/fa_AF.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/fa_IR.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/fi_FI.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/fo_FO.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/fr_FR.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/fy_NL.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/gl_ES.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/he_IL.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/hr_HR.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/hu_HU.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/hy_AM.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/ia.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/id_ID.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/is_IS.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/it_IT.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/ja_JP.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/km_KH.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/ko_KR.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/ku.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/ku_IQ.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/lb_LU.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/lt_LT.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/lv_LV.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/ml_IN.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/mn_MN.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/nb_NO.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/nl_NL.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/nn_NO.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/pl_PL.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/pt_BR.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/pt_PT.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/ro_RO.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/ru_RU.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/sk_SK.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/sl_SI.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/sq_AL.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/sr_CS.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/sv_SE.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/tr_TR.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/uk_UA.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/vi_VN.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/zh_CN.inc create mode 100644 data/web/rc/plugins/zipdownload/localization/zh_TW.inc create mode 100644 data/web/rc/plugins/zipdownload/skins/classic/zip.png create mode 100644 data/web/rc/plugins/zipdownload/skins/classic/zipdownload.css create mode 100644 data/web/rc/plugins/zipdownload/skins/classic/zipdownload.min.css create mode 100644 data/web/rc/plugins/zipdownload/skins/larry/zipdownload.css create mode 100644 data/web/rc/plugins/zipdownload/skins/larry/zipdownload.min.css create mode 100644 data/web/rc/plugins/zipdownload/tests/Zipdownload.php create mode 100644 data/web/rc/plugins/zipdownload/zipdownload.js create mode 100644 data/web/rc/plugins/zipdownload/zipdownload.min.js create mode 100644 data/web/rc/plugins/zipdownload/zipdownload.php create mode 100644 data/web/rc/program/include/clisetup.php create mode 100644 data/web/rc/program/include/iniset.php create mode 100644 data/web/rc/program/include/rcmail.php create mode 100644 data/web/rc/program/include/rcmail_html_page.php create mode 100644 data/web/rc/program/include/rcmail_install.php create mode 100644 data/web/rc/program/include/rcmail_output.php create mode 100644 data/web/rc/program/include/rcmail_output_cli.php create mode 100644 data/web/rc/program/include/rcmail_output_html.php create mode 100644 data/web/rc/program/include/rcmail_output_json.php create mode 100644 data/web/rc/program/include/rcmail_string_replacer.php create mode 100644 data/web/rc/program/include/rcmail_utils.php create mode 100644 data/web/rc/program/js/app.js create mode 100644 data/web/rc/program/js/app.min.js create mode 100644 data/web/rc/program/js/common.js create mode 100644 data/web/rc/program/js/common.min.js create mode 100644 data/web/rc/program/js/editor.js create mode 100644 data/web/rc/program/js/editor.min.js create mode 100644 data/web/rc/program/js/googiespell.js create mode 100644 data/web/rc/program/js/googiespell.min.js create mode 100644 data/web/rc/program/js/jquery.min.js create mode 100644 data/web/rc/program/js/jstz.min.js create mode 100644 data/web/rc/program/js/list.js create mode 100644 data/web/rc/program/js/list.min.js create mode 100644 data/web/rc/program/js/publickey.js create mode 100644 data/web/rc/program/js/publickey.min.js create mode 100644 data/web/rc/program/js/tinymce/langs/ar.js create mode 100644 data/web/rc/program/js/tinymce/langs/az.js create mode 100644 data/web/rc/program/js/tinymce/langs/be.js create mode 100644 data/web/rc/program/js/tinymce/langs/bg_BG.js create mode 100644 data/web/rc/program/js/tinymce/langs/bs.js create mode 100644 data/web/rc/program/js/tinymce/langs/ca.js create mode 100644 data/web/rc/program/js/tinymce/langs/cs.js create mode 100644 data/web/rc/program/js/tinymce/langs/cs_CZ.js create mode 100644 data/web/rc/program/js/tinymce/langs/cy.js create mode 100644 data/web/rc/program/js/tinymce/langs/da.js create mode 100644 data/web/rc/program/js/tinymce/langs/de.js create mode 100644 data/web/rc/program/js/tinymce/langs/de_AT.js create mode 100644 data/web/rc/program/js/tinymce/langs/el.js create mode 100644 data/web/rc/program/js/tinymce/langs/en_CA.js create mode 100644 data/web/rc/program/js/tinymce/langs/en_GB.js create mode 100644 data/web/rc/program/js/tinymce/langs/eo.js create mode 100644 data/web/rc/program/js/tinymce/langs/es.js create mode 100644 data/web/rc/program/js/tinymce/langs/es_MX.js create mode 100644 data/web/rc/program/js/tinymce/langs/et.js create mode 100644 data/web/rc/program/js/tinymce/langs/eu.js create mode 100644 data/web/rc/program/js/tinymce/langs/fa.js create mode 100644 data/web/rc/program/js/tinymce/langs/fa_IR.js create mode 100644 data/web/rc/program/js/tinymce/langs/fi.js create mode 100644 data/web/rc/program/js/tinymce/langs/fo.js create mode 100644 data/web/rc/program/js/tinymce/langs/fr_CH.js create mode 100644 data/web/rc/program/js/tinymce/langs/fr_FR.js create mode 100644 data/web/rc/program/js/tinymce/langs/ga.js create mode 100644 data/web/rc/program/js/tinymce/langs/gd.js create mode 100644 data/web/rc/program/js/tinymce/langs/gl.js create mode 100644 data/web/rc/program/js/tinymce/langs/he_IL.js create mode 100644 data/web/rc/program/js/tinymce/langs/hi_IN.js create mode 100644 data/web/rc/program/js/tinymce/langs/hr.js create mode 100644 data/web/rc/program/js/tinymce/langs/hu_HU.js create mode 100644 data/web/rc/program/js/tinymce/langs/hy.js create mode 100644 data/web/rc/program/js/tinymce/langs/id.js create mode 100644 data/web/rc/program/js/tinymce/langs/is_IS.js create mode 100644 data/web/rc/program/js/tinymce/langs/it.js create mode 100644 data/web/rc/program/js/tinymce/langs/ja.js create mode 100644 data/web/rc/program/js/tinymce/langs/ka_GE.js create mode 100644 data/web/rc/program/js/tinymce/langs/kab.js create mode 100644 data/web/rc/program/js/tinymce/langs/km_KH.js create mode 100644 data/web/rc/program/js/tinymce/langs/ko_KR.js create mode 100644 data/web/rc/program/js/tinymce/langs/ku.js create mode 100644 data/web/rc/program/js/tinymce/langs/ku_IQ.js create mode 100644 data/web/rc/program/js/tinymce/langs/lb.js create mode 100644 data/web/rc/program/js/tinymce/langs/lt.js create mode 100644 data/web/rc/program/js/tinymce/langs/lv.js create mode 100644 data/web/rc/program/js/tinymce/langs/mk_MK.js create mode 100644 data/web/rc/program/js/tinymce/langs/ml_IN.js create mode 100644 data/web/rc/program/js/tinymce/langs/nb_NO.js create mode 100644 data/web/rc/program/js/tinymce/langs/nl.js create mode 100644 data/web/rc/program/js/tinymce/langs/oc.js create mode 100644 data/web/rc/program/js/tinymce/langs/pl.js create mode 100644 data/web/rc/program/js/tinymce/langs/pt_BR.js create mode 100644 data/web/rc/program/js/tinymce/langs/pt_PT.js create mode 100644 data/web/rc/program/js/tinymce/langs/readme.md create mode 100644 data/web/rc/program/js/tinymce/langs/ro.js create mode 100644 data/web/rc/program/js/tinymce/langs/ru.js create mode 100644 data/web/rc/program/js/tinymce/langs/sk.js create mode 100644 data/web/rc/program/js/tinymce/langs/sl_SI.js create mode 100644 data/web/rc/program/js/tinymce/langs/sv_SE.js create mode 100644 data/web/rc/program/js/tinymce/langs/ta.js create mode 100644 data/web/rc/program/js/tinymce/langs/ta_IN.js create mode 100644 data/web/rc/program/js/tinymce/langs/tg.js create mode 100644 data/web/rc/program/js/tinymce/langs/th_TH.js create mode 100644 data/web/rc/program/js/tinymce/langs/tr.js create mode 100644 data/web/rc/program/js/tinymce/langs/tr_TR.js create mode 100644 data/web/rc/program/js/tinymce/langs/tt.js create mode 100644 data/web/rc/program/js/tinymce/langs/ug.js create mode 100644 data/web/rc/program/js/tinymce/langs/uk.js create mode 100644 data/web/rc/program/js/tinymce/langs/uk_UA.js create mode 100644 data/web/rc/program/js/tinymce/langs/vi.js create mode 100644 data/web/rc/program/js/tinymce/langs/vi_VN.js create mode 100644 data/web/rc/program/js/tinymce/langs/zh_CN.js create mode 100644 data/web/rc/program/js/tinymce/langs/zh_TW.js create mode 100644 data/web/rc/program/js/tinymce/plugins/advlist/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/anchor/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/autolink/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/autoresize/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/autosave/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/bbcode/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/charmap/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/code/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/codesample/css/prism.css create mode 100644 data/web/rc/program/js/tinymce/plugins/codesample/plugin.dev.js create mode 100644 data/web/rc/program/js/tinymce/plugins/codesample/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/colorpicker/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/contextmenu/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/directionality/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/emoticons/img/smiley-cool.gif create mode 100644 data/web/rc/program/js/tinymce/plugins/emoticons/img/smiley-cry.gif create mode 100644 data/web/rc/program/js/tinymce/plugins/emoticons/img/smiley-embarassed.gif create mode 100644 data/web/rc/program/js/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif create mode 100644 data/web/rc/program/js/tinymce/plugins/emoticons/img/smiley-frown.gif create mode 100644 data/web/rc/program/js/tinymce/plugins/emoticons/img/smiley-innocent.gif create mode 100644 data/web/rc/program/js/tinymce/plugins/emoticons/img/smiley-kiss.gif create mode 100644 data/web/rc/program/js/tinymce/plugins/emoticons/img/smiley-laughing.gif create mode 100644 data/web/rc/program/js/tinymce/plugins/emoticons/img/smiley-money-mouth.gif create mode 100644 data/web/rc/program/js/tinymce/plugins/emoticons/img/smiley-sealed.gif create mode 100644 data/web/rc/program/js/tinymce/plugins/emoticons/img/smiley-smile.gif create mode 100644 data/web/rc/program/js/tinymce/plugins/emoticons/img/smiley-surprised.gif create mode 100644 data/web/rc/program/js/tinymce/plugins/emoticons/img/smiley-tongue-out.gif create mode 100644 data/web/rc/program/js/tinymce/plugins/emoticons/img/smiley-undecided.gif create mode 100644 data/web/rc/program/js/tinymce/plugins/emoticons/img/smiley-wink.gif create mode 100644 data/web/rc/program/js/tinymce/plugins/emoticons/img/smiley-yell.gif create mode 100644 data/web/rc/program/js/tinymce/plugins/emoticons/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/example/dialog.html create mode 100644 data/web/rc/program/js/tinymce/plugins/example/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/example_dependency/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/fullpage/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/fullscreen/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/hr/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/image/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/imagetools/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/importcss/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/insertdatetime/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/layer/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/legacyoutput/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/link/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/lists/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/media/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/nonbreaking/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/noneditable/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/pagebreak/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/paste/plugin.dev.js create mode 100644 data/web/rc/program/js/tinymce/plugins/paste/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/preview/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/print/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/save/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/searchreplace/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/spellchecker/plugin.dev.js create mode 100644 data/web/rc/program/js/tinymce/plugins/spellchecker/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/tabfocus/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/table/plugin.dev.js create mode 100644 data/web/rc/program/js/tinymce/plugins/table/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/template/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/textcolor/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/textpattern/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/toc/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/visualblocks/css/visualblocks.css create mode 100644 data/web/rc/program/js/tinymce/plugins/visualblocks/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/visualchars/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/plugins/wordcount/plugin.min.js create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/AbsoluteLayout.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Animations.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Arrows.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Button.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/ButtonGroup.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Checkbox.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/ColorBox.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/ColorButton.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/ColorPicker.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/ComboBox.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Container.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Content.Inline.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Content.Objects.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Content.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/CropRect.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/FieldSet.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/FitLayout.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/FloatPanel.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/FlowLayout.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Icons.Ie7.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Icons.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Iframe.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/ImagePanel.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/InfoBox.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Label.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/ListBox.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Menu.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/MenuBar.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/MenuButton.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/MenuItem.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Mixins.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Notification.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Panel.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Path.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Progress.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Radio.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Reset.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/ResizeHandle.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Scrollable.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/SelectBox.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Sidebar.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Slider.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Spacer.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/SplitButton.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/StackLayout.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/TabPanel.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/TextBox.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Throbber.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/TinyMCE.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/ToolTip.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Variables.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/Window.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/content.inline.min.css create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/content.min.css create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce-small.eot create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce-small.svg create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce-small.woff create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce.eot create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce.svg create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce.ttf create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce.woff create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/img/anchor.gif create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/img/loader.gif create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/img/object.gif create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/img/trans.gif create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/skin.dev.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/skin.ie7.dev.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/skin.ie7.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/skin.ie7.min.css create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/skin.less create mode 100644 data/web/rc/program/js/tinymce/skins/lightgray/skin.min.css create mode 100644 data/web/rc/program/js/tinymce/themes/inlite/theme.min.js create mode 100644 data/web/rc/program/js/tinymce/themes/modern/theme.min.js create mode 100644 data/web/rc/program/js/tinymce/tinymce.min.js create mode 100644 data/web/rc/program/js/treelist.js create mode 100644 data/web/rc/program/js/treelist.min.js create mode 100644 data/web/rc/program/lib/Roundcube/README.md create mode 100644 data/web/rc/program/lib/Roundcube/bootstrap.php create mode 100644 data/web/rc/program/lib/Roundcube/html.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_addressbook.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_base_replacer.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_browser.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_cache.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_cache_shared.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_charset.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_config.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_contacts.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_content_filter.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_csv2vcard.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_db.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_db_mssql.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_db_mysql.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_db_oracle.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_db_pgsql.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_db_sqlite.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_db_sqlsrv.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_enriched.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_html2text.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_image.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_imap.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_imap_cache.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_imap_generic.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_imap_search.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_ldap.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_ldap_generic.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_message.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_message_header.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_message_part.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_mime.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_mime_decode.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_output.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_plugin.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_plugin_api.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_result_index.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_result_multifolder.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_result_set.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_result_thread.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_session.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_session_db.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_session_memcache.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_session_php.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_session_redis.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_smtp.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_spellcheck_atd.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_spellcheck_enchant.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_spellcheck_engine.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_spellcheck_googie.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_spellcheck_pspell.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_spellchecker.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_storage.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_string_replacer.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_text2html.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_tnef_decoder.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_user.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_utils.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_vcard.php create mode 100644 data/web/rc/program/lib/Roundcube/rcube_washtml.php create mode 100644 data/web/rc/program/localization/ar/labels.inc create mode 100644 data/web/rc/program/localization/ar_SA/labels.inc create mode 100644 data/web/rc/program/localization/ar_SA/messages.inc create mode 100644 data/web/rc/program/localization/ast/labels.inc create mode 100644 data/web/rc/program/localization/ast/messages.inc create mode 100644 data/web/rc/program/localization/az_AZ/labels.inc create mode 100644 data/web/rc/program/localization/az_AZ/messages.inc create mode 100644 data/web/rc/program/localization/be_BE/labels.inc create mode 100644 data/web/rc/program/localization/be_BE/messages.inc create mode 100644 data/web/rc/program/localization/ber/labels.inc create mode 100644 data/web/rc/program/localization/bg_BG/labels.inc create mode 100644 data/web/rc/program/localization/bg_BG/messages.inc create mode 100644 data/web/rc/program/localization/bn_BD/labels.inc create mode 100644 data/web/rc/program/localization/bn_BD/messages.inc create mode 100644 data/web/rc/program/localization/br/labels.inc create mode 100644 data/web/rc/program/localization/br/messages.inc create mode 100644 data/web/rc/program/localization/bs_BA/labels.inc create mode 100644 data/web/rc/program/localization/bs_BA/messages.inc create mode 100644 data/web/rc/program/localization/ca_ES/labels.inc create mode 100644 data/web/rc/program/localization/ca_ES/messages.inc create mode 100644 data/web/rc/program/localization/cs_CZ/labels.inc create mode 100644 data/web/rc/program/localization/cs_CZ/messages.inc create mode 100644 data/web/rc/program/localization/cy_GB/labels.inc create mode 100644 data/web/rc/program/localization/cy_GB/messages.inc create mode 100644 data/web/rc/program/localization/da_DK/labels.inc create mode 100644 data/web/rc/program/localization/da_DK/messages.inc create mode 100644 data/web/rc/program/localization/de_CH/csv2vcard.inc create mode 100644 data/web/rc/program/localization/de_CH/labels.inc create mode 100644 data/web/rc/program/localization/de_CH/messages.inc create mode 100644 data/web/rc/program/localization/de_DE/csv2vcard.inc create mode 100644 data/web/rc/program/localization/de_DE/labels.inc create mode 100644 data/web/rc/program/localization/de_DE/messages.inc create mode 100644 data/web/rc/program/localization/el_GR/labels.inc create mode 100644 data/web/rc/program/localization/el_GR/messages.inc create mode 100644 data/web/rc/program/localization/en_CA/labels.inc create mode 100644 data/web/rc/program/localization/en_CA/messages.inc create mode 100644 data/web/rc/program/localization/en_GB/labels.inc create mode 100644 data/web/rc/program/localization/en_GB/messages.inc create mode 100644 data/web/rc/program/localization/en_US/csv2vcard.inc create mode 100644 data/web/rc/program/localization/en_US/labels.inc create mode 100644 data/web/rc/program/localization/en_US/messages.inc create mode 100644 data/web/rc/program/localization/eo/labels.inc create mode 100644 data/web/rc/program/localization/eo/messages.inc create mode 100644 data/web/rc/program/localization/es_419/labels.inc create mode 100644 data/web/rc/program/localization/es_419/messages.inc create mode 100644 data/web/rc/program/localization/es_AR/labels.inc create mode 100644 data/web/rc/program/localization/es_AR/messages.inc create mode 100644 data/web/rc/program/localization/es_ES/csv2vcard.inc create mode 100644 data/web/rc/program/localization/es_ES/labels.inc create mode 100644 data/web/rc/program/localization/es_ES/messages.inc create mode 100644 data/web/rc/program/localization/et_EE/labels.inc create mode 100644 data/web/rc/program/localization/et_EE/messages.inc create mode 100644 data/web/rc/program/localization/eu_ES/labels.inc create mode 100644 data/web/rc/program/localization/eu_ES/messages.inc create mode 100644 data/web/rc/program/localization/fa_AF/labels.inc create mode 100644 data/web/rc/program/localization/fa_AF/messages.inc create mode 100644 data/web/rc/program/localization/fa_IR/labels.inc create mode 100644 data/web/rc/program/localization/fa_IR/messages.inc create mode 100644 data/web/rc/program/localization/fi_FI/csv2vcard.inc create mode 100644 data/web/rc/program/localization/fi_FI/labels.inc create mode 100644 data/web/rc/program/localization/fi_FI/messages.inc create mode 100644 data/web/rc/program/localization/fo_FO/labels.inc create mode 100644 data/web/rc/program/localization/fo_FO/messages.inc create mode 100644 data/web/rc/program/localization/fr_FR/csv2vcard.inc create mode 100644 data/web/rc/program/localization/fr_FR/labels.inc create mode 100644 data/web/rc/program/localization/fr_FR/messages.inc create mode 100644 data/web/rc/program/localization/fy_NL/labels.inc create mode 100644 data/web/rc/program/localization/fy_NL/messages.inc create mode 100644 data/web/rc/program/localization/ga_IE/labels.inc create mode 100644 data/web/rc/program/localization/ga_IE/messages.inc create mode 100644 data/web/rc/program/localization/gl_ES/labels.inc create mode 100644 data/web/rc/program/localization/gl_ES/messages.inc create mode 100644 data/web/rc/program/localization/he_IL/labels.inc create mode 100644 data/web/rc/program/localization/he_IL/messages.inc create mode 100644 data/web/rc/program/localization/hi_IN/labels.inc create mode 100644 data/web/rc/program/localization/hi_IN/messages.inc create mode 100644 data/web/rc/program/localization/hr_HR/labels.inc create mode 100644 data/web/rc/program/localization/hr_HR/messages.inc create mode 100644 data/web/rc/program/localization/hu_HU/labels.inc create mode 100644 data/web/rc/program/localization/hu_HU/messages.inc create mode 100644 data/web/rc/program/localization/hy_AM/labels.inc create mode 100644 data/web/rc/program/localization/hy_AM/messages.inc create mode 100644 data/web/rc/program/localization/ia/labels.inc create mode 100644 data/web/rc/program/localization/ia/messages.inc create mode 100644 data/web/rc/program/localization/id_ID/labels.inc create mode 100644 data/web/rc/program/localization/id_ID/messages.inc create mode 100644 data/web/rc/program/localization/index.inc create mode 100644 data/web/rc/program/localization/is_IS/labels.inc create mode 100644 data/web/rc/program/localization/is_IS/messages.inc create mode 100644 data/web/rc/program/localization/it_IT/csv2vcard.inc create mode 100644 data/web/rc/program/localization/it_IT/labels.inc create mode 100644 data/web/rc/program/localization/it_IT/messages.inc create mode 100644 data/web/rc/program/localization/ja_JP/labels.inc create mode 100644 data/web/rc/program/localization/ja_JP/messages.inc create mode 100644 data/web/rc/program/localization/ka_GE/labels.inc create mode 100644 data/web/rc/program/localization/ka_GE/messages.inc create mode 100644 data/web/rc/program/localization/km_KH/labels.inc create mode 100644 data/web/rc/program/localization/km_KH/messages.inc create mode 100644 data/web/rc/program/localization/kn_IN/labels.inc create mode 100644 data/web/rc/program/localization/kn_IN/messages.inc create mode 100644 data/web/rc/program/localization/ko_KR/labels.inc create mode 100644 data/web/rc/program/localization/ko_KR/messages.inc create mode 100644 data/web/rc/program/localization/ku/labels.inc create mode 100644 data/web/rc/program/localization/ku/messages.inc create mode 100644 data/web/rc/program/localization/ku_IQ/labels.inc create mode 100644 data/web/rc/program/localization/ku_IQ/messages.inc create mode 100644 data/web/rc/program/localization/lb_LU/labels.inc create mode 100644 data/web/rc/program/localization/lb_LU/messages.inc create mode 100644 data/web/rc/program/localization/lt_LT/labels.inc create mode 100644 data/web/rc/program/localization/lt_LT/messages.inc create mode 100644 data/web/rc/program/localization/lv_LV/labels.inc create mode 100644 data/web/rc/program/localization/lv_LV/messages.inc create mode 100644 data/web/rc/program/localization/mk_MK/labels.inc create mode 100644 data/web/rc/program/localization/mk_MK/messages.inc create mode 100644 data/web/rc/program/localization/ml_IN/labels.inc create mode 100644 data/web/rc/program/localization/ml_IN/messages.inc create mode 100644 data/web/rc/program/localization/mn_MN/labels.inc create mode 100644 data/web/rc/program/localization/mn_MN/messages.inc create mode 100644 data/web/rc/program/localization/mr_IN/labels.inc create mode 100644 data/web/rc/program/localization/mr_IN/messages.inc create mode 100644 data/web/rc/program/localization/ms_MY/labels.inc create mode 100644 data/web/rc/program/localization/ms_MY/messages.inc create mode 100644 data/web/rc/program/localization/nb_NO/labels.inc create mode 100644 data/web/rc/program/localization/nb_NO/messages.inc create mode 100644 data/web/rc/program/localization/ne_NP/labels.inc create mode 100644 data/web/rc/program/localization/ne_NP/messages.inc create mode 100644 data/web/rc/program/localization/nl_BE/labels.inc create mode 100644 data/web/rc/program/localization/nl_BE/messages.inc create mode 100644 data/web/rc/program/localization/nl_NL/labels.inc create mode 100644 data/web/rc/program/localization/nl_NL/messages.inc create mode 100644 data/web/rc/program/localization/nn_NO/labels.inc create mode 100644 data/web/rc/program/localization/nn_NO/messages.inc create mode 100644 data/web/rc/program/localization/pl_PL/csv2vcard.inc create mode 100644 data/web/rc/program/localization/pl_PL/labels.inc create mode 100644 data/web/rc/program/localization/pl_PL/messages.inc create mode 100644 data/web/rc/program/localization/ps/labels.inc create mode 100644 data/web/rc/program/localization/ps/messages.inc create mode 100644 data/web/rc/program/localization/pt_BR/csv2vcard.inc create mode 100644 data/web/rc/program/localization/pt_BR/labels.inc create mode 100644 data/web/rc/program/localization/pt_BR/messages.inc create mode 100644 data/web/rc/program/localization/pt_PT/labels.inc create mode 100644 data/web/rc/program/localization/pt_PT/messages.inc create mode 100644 data/web/rc/program/localization/ro_RO/labels.inc create mode 100644 data/web/rc/program/localization/ro_RO/messages.inc create mode 100644 data/web/rc/program/localization/ru_RU/csv2vcard.inc create mode 100644 data/web/rc/program/localization/ru_RU/labels.inc create mode 100644 data/web/rc/program/localization/ru_RU/messages.inc create mode 100644 data/web/rc/program/localization/si_LK/labels.inc create mode 100644 data/web/rc/program/localization/si_LK/messages.inc create mode 100644 data/web/rc/program/localization/sk_SK/csv2vcard.inc create mode 100644 data/web/rc/program/localization/sk_SK/labels.inc create mode 100644 data/web/rc/program/localization/sk_SK/messages.inc create mode 100644 data/web/rc/program/localization/sl_SI/labels.inc create mode 100644 data/web/rc/program/localization/sl_SI/messages.inc create mode 100644 data/web/rc/program/localization/sq_AL/labels.inc create mode 100644 data/web/rc/program/localization/sq_AL/messages.inc create mode 100644 data/web/rc/program/localization/sr_CS/labels.inc create mode 100644 data/web/rc/program/localization/sr_CS/messages.inc create mode 100644 data/web/rc/program/localization/sv_SE/labels.inc create mode 100644 data/web/rc/program/localization/sv_SE/messages.inc create mode 100644 data/web/rc/program/localization/ta_IN/labels.inc create mode 100644 data/web/rc/program/localization/ta_IN/messages.inc create mode 100644 data/web/rc/program/localization/th_TH/labels.inc create mode 100644 data/web/rc/program/localization/th_TH/messages.inc create mode 100644 data/web/rc/program/localization/ti/labels.inc create mode 100644 data/web/rc/program/localization/ti/messages.inc create mode 100644 data/web/rc/program/localization/tr_TR/labels.inc create mode 100644 data/web/rc/program/localization/tr_TR/messages.inc create mode 100644 data/web/rc/program/localization/tzl/labels.inc create mode 100644 data/web/rc/program/localization/uk_UA/labels.inc create mode 100644 data/web/rc/program/localization/uk_UA/messages.inc create mode 100644 data/web/rc/program/localization/ur_PK/labels.inc create mode 100644 data/web/rc/program/localization/uz/messages.inc create mode 100644 data/web/rc/program/localization/vi_VN/labels.inc create mode 100644 data/web/rc/program/localization/vi_VN/messages.inc create mode 100644 data/web/rc/program/localization/zh_CN/labels.inc create mode 100644 data/web/rc/program/localization/zh_CN/messages.inc create mode 100644 data/web/rc/program/localization/zh_TW/csv2vcard.inc create mode 100644 data/web/rc/program/localization/zh_TW/labels.inc create mode 100644 data/web/rc/program/localization/zh_TW/messages.inc create mode 100644 data/web/rc/program/resources/blank.gif create mode 100644 data/web/rc/program/resources/blank.tiff create mode 100644 data/web/rc/program/resources/blank.webp create mode 100644 data/web/rc/program/resources/blocked.gif create mode 100644 data/web/rc/program/resources/dummy.pdf create mode 100644 data/web/rc/program/resources/tinymce/browser.css create mode 100644 data/web/rc/program/resources/tinymce/content.css create mode 100644 data/web/rc/program/resources/tinymce/video.png create mode 100644 data/web/rc/program/steps/addressbook/copy.inc create mode 100644 data/web/rc/program/steps/addressbook/delete.inc create mode 100644 data/web/rc/program/steps/addressbook/edit.inc create mode 100644 data/web/rc/program/steps/addressbook/export.inc create mode 100644 data/web/rc/program/steps/addressbook/func.inc create mode 100644 data/web/rc/program/steps/addressbook/groups.inc create mode 100644 data/web/rc/program/steps/addressbook/import.inc create mode 100644 data/web/rc/program/steps/addressbook/list.inc create mode 100644 data/web/rc/program/steps/addressbook/mailto.inc create mode 100644 data/web/rc/program/steps/addressbook/move.inc create mode 100644 data/web/rc/program/steps/addressbook/photo.inc create mode 100644 data/web/rc/program/steps/addressbook/print.inc create mode 100644 data/web/rc/program/steps/addressbook/qrcode.inc create mode 100644 data/web/rc/program/steps/addressbook/save.inc create mode 100644 data/web/rc/program/steps/addressbook/search.inc create mode 100644 data/web/rc/program/steps/addressbook/show.inc create mode 100644 data/web/rc/program/steps/addressbook/undo.inc create mode 100644 data/web/rc/program/steps/addressbook/upload_photo.inc create mode 100644 data/web/rc/program/steps/mail/addcontact.inc create mode 100644 data/web/rc/program/steps/mail/attachments.inc create mode 100644 data/web/rc/program/steps/mail/autocomplete.inc create mode 100644 data/web/rc/program/steps/mail/check_recent.inc create mode 100644 data/web/rc/program/steps/mail/compose.inc create mode 100644 data/web/rc/program/steps/mail/copy.inc create mode 100644 data/web/rc/program/steps/mail/folders.inc create mode 100644 data/web/rc/program/steps/mail/func.inc create mode 100644 data/web/rc/program/steps/mail/get.inc create mode 100644 data/web/rc/program/steps/mail/getunread.inc create mode 100644 data/web/rc/program/steps/mail/headers.inc create mode 100644 data/web/rc/program/steps/mail/import.inc create mode 100644 data/web/rc/program/steps/mail/list.inc create mode 100644 data/web/rc/program/steps/mail/list_contacts.inc create mode 100644 data/web/rc/program/steps/mail/mark.inc create mode 100644 data/web/rc/program/steps/mail/move_del.inc create mode 100644 data/web/rc/program/steps/mail/pagenav.inc create mode 100644 data/web/rc/program/steps/mail/search.inc create mode 100644 data/web/rc/program/steps/mail/search_contacts.inc create mode 100644 data/web/rc/program/steps/mail/sendmail.inc create mode 100644 data/web/rc/program/steps/mail/sendmdn.inc create mode 100644 data/web/rc/program/steps/mail/show.inc create mode 100644 data/web/rc/program/steps/mail/viewsource.inc create mode 100644 data/web/rc/program/steps/settings/about.inc create mode 100644 data/web/rc/program/steps/settings/edit_folder.inc create mode 100644 data/web/rc/program/steps/settings/edit_identity.inc create mode 100644 data/web/rc/program/steps/settings/edit_prefs.inc create mode 100644 data/web/rc/program/steps/settings/edit_response.inc create mode 100644 data/web/rc/program/steps/settings/folders.inc create mode 100644 data/web/rc/program/steps/settings/func.inc create mode 100644 data/web/rc/program/steps/settings/identities.inc create mode 100644 data/web/rc/program/steps/settings/responses.inc create mode 100644 data/web/rc/program/steps/settings/save_folder.inc create mode 100644 data/web/rc/program/steps/settings/save_identity.inc create mode 100644 data/web/rc/program/steps/settings/save_prefs.inc create mode 100644 data/web/rc/program/steps/settings/upload.inc create mode 100644 data/web/rc/program/steps/utils/error.inc create mode 100644 data/web/rc/program/steps/utils/html2text.inc create mode 100644 data/web/rc/program/steps/utils/killcache.inc create mode 100644 data/web/rc/program/steps/utils/modcss.inc create mode 100644 data/web/rc/program/steps/utils/save_pref.inc create mode 100644 data/web/rc/program/steps/utils/spell.inc create mode 100644 data/web/rc/program/steps/utils/spell_html.inc create mode 100644 data/web/rc/program/steps/utils/text2html.inc create mode 120000 data/web/rc/public_html/.htaccess create mode 100644 data/web/rc/public_html/index.php create mode 120000 data/web/rc/public_html/plugins create mode 120000 data/web/rc/public_html/program/js create mode 120000 data/web/rc/public_html/program/resources create mode 120000 data/web/rc/public_html/skins create mode 100644 data/web/rc/skins/classic/README create mode 100644 data/web/rc/skins/classic/addressbook.css create mode 100644 data/web/rc/skins/classic/addressbook.min.css create mode 100644 data/web/rc/skins/classic/common.css create mode 100644 data/web/rc/skins/classic/common.min.css create mode 100644 data/web/rc/skins/classic/embed.css create mode 100644 data/web/rc/skins/classic/embed.min.css create mode 100644 data/web/rc/skins/classic/functions.js create mode 100644 data/web/rc/skins/classic/functions.min.js create mode 100644 data/web/rc/skins/classic/googiespell.css create mode 100644 data/web/rc/skins/classic/googiespell.min.css create mode 100644 data/web/rc/skins/classic/images/abook_toolbar.png create mode 100644 data/web/rc/skins/classic/images/buttons/add_act.png create mode 100644 data/web/rc/skins/classic/images/buttons/add_pas.png create mode 100644 data/web/rc/skins/classic/images/buttons/add_sel.png create mode 100644 data/web/rc/skins/classic/images/buttons/bg.gif create mode 100644 data/web/rc/skins/classic/images/cleardot.png create mode 100644 data/web/rc/skins/classic/images/contactgroup.png create mode 100644 data/web/rc/skins/classic/images/contactpic.png create mode 100644 data/web/rc/skins/classic/images/dbutton.png create mode 100644 data/web/rc/skins/classic/images/dimple.png create mode 100644 data/web/rc/skins/classic/images/display/icons.gif create mode 100644 data/web/rc/skins/classic/images/display/icons.png create mode 100644 data/web/rc/skins/classic/images/display/loading.gif create mode 100644 data/web/rc/skins/classic/images/display/loading_blue.gif create mode 100644 data/web/rc/skins/classic/images/favicon.ico create mode 100644 data/web/rc/skins/classic/images/filedrop.png create mode 100644 data/web/rc/skins/classic/images/googiespell/change_lang.gif create mode 100644 data/web/rc/skins/classic/images/googiespell/indicator.gif create mode 100644 data/web/rc/skins/classic/images/googiespell/ok.gif create mode 100644 data/web/rc/skins/classic/images/googiespell/spellc.gif create mode 100644 data/web/rc/skins/classic/images/icons/attachment.png create mode 100644 data/web/rc/skins/classic/images/icons/blank.gif create mode 100644 data/web/rc/skins/classic/images/icons/collapsed.png create mode 100644 data/web/rc/skins/classic/images/icons/columnpicker.gif create mode 100644 data/web/rc/skins/classic/images/icons/delete.png create mode 100644 data/web/rc/skins/classic/images/icons/deleted.png create mode 100644 data/web/rc/skins/classic/images/icons/dot.png create mode 100644 data/web/rc/skins/classic/images/icons/down_small.gif create mode 100644 data/web/rc/skins/classic/images/icons/expanded.png create mode 100644 data/web/rc/skins/classic/images/icons/extwin.png create mode 100644 data/web/rc/skins/classic/images/icons/flagged.png create mode 100644 data/web/rc/skins/classic/images/icons/folders.png create mode 100644 data/web/rc/skins/classic/images/icons/forwarded.png create mode 100644 data/web/rc/skins/classic/images/icons/forwarded_replied.png create mode 100644 data/web/rc/skins/classic/images/icons/glass.png create mode 100644 data/web/rc/skins/classic/images/icons/glass_roll.png create mode 100644 data/web/rc/skins/classic/images/icons/groupactions.png create mode 100644 data/web/rc/skins/classic/images/icons/html.png create mode 100644 data/web/rc/skins/classic/images/icons/minus.gif create mode 100644 data/web/rc/skins/classic/images/icons/plus.gif create mode 100644 data/web/rc/skins/classic/images/icons/rename.png create mode 100644 data/web/rc/skins/classic/images/icons/replied.png create mode 100644 data/web/rc/skins/classic/images/icons/reset.gif create mode 100644 data/web/rc/skins/classic/images/icons/silhouette.png create mode 100644 data/web/rc/skins/classic/images/icons/sort.gif create mode 100644 data/web/rc/skins/classic/images/icons/text.png create mode 100644 data/web/rc/skins/classic/images/icons/unflagged.png create mode 100644 data/web/rc/skins/classic/images/icons/unread.png create mode 100644 data/web/rc/skins/classic/images/icons/unread_children.png create mode 100644 data/web/rc/skins/classic/images/icons/up_small.gif create mode 100644 data/web/rc/skins/classic/images/listheader.gif create mode 100644 data/web/rc/skins/classic/images/mail_footer.png create mode 100644 data/web/rc/skins/classic/images/mail_toolbar.png create mode 100644 data/web/rc/skins/classic/images/messageactions.png create mode 100644 data/web/rc/skins/classic/images/messageicons.png create mode 100644 data/web/rc/skins/classic/images/pagenav.gif create mode 100644 data/web/rc/skins/classic/images/quota-colors.png create mode 100644 data/web/rc/skins/classic/images/quota.png create mode 100644 data/web/rc/skins/classic/images/roundcube_logo.png create mode 100644 data/web/rc/skins/classic/images/searchfield.gif create mode 100644 data/web/rc/skins/classic/images/tabs-left.gif create mode 100644 data/web/rc/skins/classic/images/tabs-right.gif create mode 100644 data/web/rc/skins/classic/images/taskbar.png create mode 100644 data/web/rc/skins/classic/images/taskicons.gif create mode 100644 data/web/rc/skins/classic/images/taskicons.png create mode 100644 data/web/rc/skins/classic/images/tree.gif create mode 100644 data/web/rc/skins/classic/images/watermark.gif create mode 100644 data/web/rc/skins/classic/includes/header.html create mode 100644 data/web/rc/skins/classic/includes/links.html create mode 100644 data/web/rc/skins/classic/includes/messagetoolbar.html create mode 100644 data/web/rc/skins/classic/includes/settingstabs.html create mode 100644 data/web/rc/skins/classic/includes/taskbar.html create mode 100644 data/web/rc/skins/classic/mail.css create mode 100644 data/web/rc/skins/classic/mail.min.css create mode 100644 data/web/rc/skins/classic/meta.json create mode 100644 data/web/rc/skins/classic/print.css create mode 100644 data/web/rc/skins/classic/print.min.css create mode 100644 data/web/rc/skins/classic/safari.css create mode 100644 data/web/rc/skins/classic/safari.min.css create mode 100644 data/web/rc/skins/classic/settings.css create mode 100644 data/web/rc/skins/classic/settings.min.css create mode 100644 data/web/rc/skins/classic/splitter.js create mode 100644 data/web/rc/skins/classic/splitter.min.js create mode 100644 data/web/rc/skins/classic/templates/about.html create mode 100644 data/web/rc/skins/classic/templates/addressbook.html create mode 100644 data/web/rc/skins/classic/templates/compose.html create mode 100644 data/web/rc/skins/classic/templates/contact.html create mode 100644 data/web/rc/skins/classic/templates/contactadd.html create mode 100644 data/web/rc/skins/classic/templates/contactedit.html create mode 100644 data/web/rc/skins/classic/templates/contactprint.html create mode 100644 data/web/rc/skins/classic/templates/contactsearch.html create mode 100644 data/web/rc/skins/classic/templates/error.html create mode 100644 data/web/rc/skins/classic/templates/folderedit.html create mode 100644 data/web/rc/skins/classic/templates/folders.html create mode 100644 data/web/rc/skins/classic/templates/identities.html create mode 100644 data/web/rc/skins/classic/templates/identityedit.html create mode 100644 data/web/rc/skins/classic/templates/importcontacts.html create mode 100644 data/web/rc/skins/classic/templates/login.html create mode 100644 data/web/rc/skins/classic/templates/mail.html create mode 100644 data/web/rc/skins/classic/templates/message.html create mode 100644 data/web/rc/skins/classic/templates/messageerror.html create mode 100644 data/web/rc/skins/classic/templates/messagepart.html create mode 100644 data/web/rc/skins/classic/templates/messagepreview.html create mode 100644 data/web/rc/skins/classic/templates/messageprint.html create mode 100644 data/web/rc/skins/classic/templates/plugin.html create mode 100644 data/web/rc/skins/classic/templates/responseedit.html create mode 100644 data/web/rc/skins/classic/templates/responses.html create mode 100644 data/web/rc/skins/classic/templates/settings.html create mode 100644 data/web/rc/skins/classic/templates/settingsedit.html create mode 100644 data/web/rc/skins/classic/thumbnail.png create mode 100644 data/web/rc/skins/classic/watermark.html create mode 100644 data/web/rc/skins/larry/README create mode 100644 data/web/rc/skins/larry/addressbook.css create mode 100644 data/web/rc/skins/larry/addressbook.min.css create mode 100644 data/web/rc/skins/larry/embed.css create mode 100644 data/web/rc/skins/larry/embed.min.css create mode 100644 data/web/rc/skins/larry/googiespell.css create mode 100644 data/web/rc/skins/larry/googiespell.min.css create mode 100644 data/web/rc/skins/larry/images/addcontact.png create mode 100644 data/web/rc/skins/larry/images/ajaxloader.gif create mode 100644 data/web/rc/skins/larry/images/ajaxloader_dark.gif create mode 100644 data/web/rc/skins/larry/images/buttons.png create mode 100644 data/web/rc/skins/larry/images/contactgroup.png create mode 100644 data/web/rc/skins/larry/images/contactpic.png create mode 100644 data/web/rc/skins/larry/images/contactpic_32px.png create mode 100644 data/web/rc/skins/larry/images/contactpic_48px.png create mode 100644 data/web/rc/skins/larry/images/favicon.ico create mode 100644 data/web/rc/skins/larry/images/filedrop.png create mode 100644 data/web/rc/skins/larry/images/filetypes.png create mode 100644 data/web/rc/skins/larry/images/googiespell/change_lang.gif create mode 100644 data/web/rc/skins/larry/images/googiespell/indicator.gif create mode 100644 data/web/rc/skins/larry/images/googiespell/ok.gif create mode 100644 data/web/rc/skins/larry/images/googiespell/spellc.gif create mode 100644 data/web/rc/skins/larry/images/linen.jpg create mode 100644 data/web/rc/skins/larry/images/linen_header.jpg create mode 100644 data/web/rc/skins/larry/images/linen_login.jpg create mode 100644 data/web/rc/skins/larry/images/listicons.png create mode 100644 data/web/rc/skins/larry/images/login_shadow.png create mode 100644 data/web/rc/skins/larry/images/messages.png create mode 100644 data/web/rc/skins/larry/images/messages_dark.png create mode 100644 data/web/rc/skins/larry/images/overflowshadow.png create mode 100644 data/web/rc/skins/larry/images/quota.png create mode 100644 data/web/rc/skins/larry/images/roundcube_logo.png create mode 100644 data/web/rc/skins/larry/images/selector.png create mode 100644 data/web/rc/skins/larry/images/splitter.png create mode 100644 data/web/rc/skins/larry/images/watermark.jpg create mode 100644 data/web/rc/skins/larry/includes/footer.html create mode 100644 data/web/rc/skins/larry/includes/header.html create mode 100644 data/web/rc/skins/larry/includes/links.html create mode 100644 data/web/rc/skins/larry/includes/mailtoolbar.html create mode 100644 data/web/rc/skins/larry/includes/settingstabs.html create mode 100644 data/web/rc/skins/larry/mail.css create mode 100644 data/web/rc/skins/larry/mail.min.css create mode 100644 data/web/rc/skins/larry/meta.json create mode 100644 data/web/rc/skins/larry/print.css create mode 100644 data/web/rc/skins/larry/print.min.css create mode 100644 data/web/rc/skins/larry/settings.css create mode 100644 data/web/rc/skins/larry/settings.min.css create mode 100644 data/web/rc/skins/larry/styles.css create mode 100644 data/web/rc/skins/larry/styles.min.css create mode 100644 data/web/rc/skins/larry/templates/about.html create mode 100644 data/web/rc/skins/larry/templates/addressbook.html create mode 100644 data/web/rc/skins/larry/templates/compose.html create mode 100644 data/web/rc/skins/larry/templates/contact.html create mode 100644 data/web/rc/skins/larry/templates/contactedit.html create mode 100644 data/web/rc/skins/larry/templates/contactprint.html create mode 100644 data/web/rc/skins/larry/templates/contactsearch.html create mode 100644 data/web/rc/skins/larry/templates/error.html create mode 100644 data/web/rc/skins/larry/templates/folderedit.html create mode 100644 data/web/rc/skins/larry/templates/folders.html create mode 100644 data/web/rc/skins/larry/templates/identities.html create mode 100644 data/web/rc/skins/larry/templates/identityedit.html create mode 100644 data/web/rc/skins/larry/templates/importcontacts.html create mode 100644 data/web/rc/skins/larry/templates/login.html create mode 100644 data/web/rc/skins/larry/templates/mail.html create mode 100644 data/web/rc/skins/larry/templates/message.html create mode 100644 data/web/rc/skins/larry/templates/messageerror.html create mode 100644 data/web/rc/skins/larry/templates/messagepart.html create mode 100644 data/web/rc/skins/larry/templates/messagepreview.html create mode 100644 data/web/rc/skins/larry/templates/messageprint.html create mode 100644 data/web/rc/skins/larry/templates/plugin.html create mode 100644 data/web/rc/skins/larry/templates/responseedit.html create mode 100644 data/web/rc/skins/larry/templates/responses.html create mode 100644 data/web/rc/skins/larry/templates/settings.html create mode 100644 data/web/rc/skins/larry/templates/settingsedit.html create mode 100644 data/web/rc/skins/larry/thumbnail.png create mode 100644 data/web/rc/skins/larry/ui.js create mode 100644 data/web/rc/skins/larry/ui.min.js create mode 100644 data/web/rc/skins/larry/watermark.html create mode 100644 data/web/rc/temp/.htaccess create mode 100644 data/web/rc/vendor/autoload.php create mode 100755 data/web/rc/vendor/bin/composer-php create mode 100755 data/web/rc/vendor/bin/composer-php.bat create mode 120000 data/web/rc/vendor/bin/crypt-gpg-pinentry create mode 120000 data/web/rc/vendor/bin/rcubeinitdb.sh create mode 100644 data/web/rc/vendor/composer/ClassLoader.php create mode 100644 data/web/rc/vendor/composer/LICENSE create mode 100644 data/web/rc/vendor/composer/autoload_classmap.php create mode 100644 data/web/rc/vendor/composer/autoload_namespaces.php create mode 100644 data/web/rc/vendor/composer/autoload_psr4.php create mode 100644 data/web/rc/vendor/composer/autoload_real.php create mode 100644 data/web/rc/vendor/composer/autoload_static.php create mode 100644 data/web/rc/vendor/composer/include_paths.php create mode 100644 data/web/rc/vendor/composer/installed.json create mode 100644 data/web/rc/vendor/endroid/qrcode/.travis.yml create mode 100644 data/web/rc/vendor/endroid/qrcode/LICENSE create mode 100644 data/web/rc/vendor/endroid/qrcode/README.md create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv10_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv10_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv10_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv10_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv11_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv11_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv11_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv11_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv12_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv12_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv12_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv12_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv13_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv13_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv13_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv13_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv14_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv14_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv14_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv14_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv15_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv15_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv15_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv15_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv16_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv16_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv16_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv16_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv17_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv17_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv17_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv17_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv18_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv18_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv18_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv18_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv19_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv19_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv19_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv19_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv1_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv1_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv1_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv1_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv20_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv20_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv20_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv20_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv21_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv21_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv21_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv21_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv22_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv22_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv22_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv22_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv23_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv23_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv23_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv23_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv24_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv24_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv24_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv24_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv25_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv25_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv25_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv25_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv26_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv26_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv26_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv26_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv27_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv27_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv27_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv27_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv28_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv28_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv28_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv28_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv29_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv29_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv29_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv29_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv2_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv2_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv2_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv2_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv30_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv30_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv30_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv30_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv31_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv31_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv31_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv31_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv32_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv32_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv32_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv32_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv33_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv33_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv33_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv33_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv34_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv34_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv34_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv34_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv35_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv35_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv35_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv35_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv36_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv36_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv36_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv36_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv37_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv37_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv37_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv37_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv38_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv38_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv38_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv38_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv39_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv39_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv39_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv39_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv3_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv3_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv3_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv3_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv40_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv40_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv40_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv40_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv4_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv4_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv4_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv4_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv5_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv5_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv5_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv5_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv6_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv6_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv6_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv6_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv7_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv7_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv7_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv7_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv8_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv8_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv8_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv8_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv9_0.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv9_1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv9_2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrv9_3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr1.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr10.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr11.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr12.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr13.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr14.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr15.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr16.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr17.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr18.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr19.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr2.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr20.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr21.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr22.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr23.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr24.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr25.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr26.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr27.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr28.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr29.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr3.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr30.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr31.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr32.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr33.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr34.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr35.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr36.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr37.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr38.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr39.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr4.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr40.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr5.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr6.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr7.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr8.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/qrvfr9.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc10.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc13.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc15.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc16.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc17.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc18.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc20.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc22.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc24.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc26.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc28.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc30.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc32.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc34.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc36.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc40.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc42.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc44.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc46.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc48.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc50.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc52.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc54.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc56.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc58.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc60.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc62.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc64.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc66.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc68.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/data/rsc7.dat create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/font/opensans.ttf create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/b.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/d.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/logo.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv1.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv10.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv11.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv12.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv13.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv14.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv15.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv16.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv17.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv18.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv19.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv2.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv20.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv21.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv22.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv23.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv24.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv25.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv26.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv27.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv28.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv29.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv3.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv30.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv31.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv32.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv33.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv34.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv35.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv36.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv37.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv38.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv39.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv4.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv40.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv5.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv6.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv7.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv8.png create mode 100755 data/web/rc/vendor/endroid/qrcode/assets/image/qrv9.png create mode 100755 data/web/rc/vendor/endroid/qrcode/composer.json create mode 100644 data/web/rc/vendor/endroid/qrcode/phpunit.xml.dist create mode 100755 data/web/rc/vendor/endroid/qrcode/src/Exceptions/DataDoesntExistsException.php create mode 100755 data/web/rc/vendor/endroid/qrcode/src/Exceptions/FreeTypeLibraryMissingException.php create mode 100755 data/web/rc/vendor/endroid/qrcode/src/Exceptions/ImageFunctionFailedException.php create mode 100755 data/web/rc/vendor/endroid/qrcode/src/Exceptions/ImageFunctionUnknownException.php create mode 100755 data/web/rc/vendor/endroid/qrcode/src/Exceptions/ImageSizeTooLargeException.php create mode 100755 data/web/rc/vendor/endroid/qrcode/src/Exceptions/VersionTooLargeException.php create mode 100755 data/web/rc/vendor/endroid/qrcode/src/QrCode.php create mode 100755 data/web/rc/vendor/endroid/qrcode/tests/QrCodeTest.php create mode 100644 data/web/rc/vendor/kolab/net_ldap3/.arcconfig create mode 100644 data/web/rc/vendor/kolab/net_ldap3/LICENSE create mode 100644 data/web/rc/vendor/kolab/net_ldap3/composer.json create mode 100644 data/web/rc/vendor/kolab/net_ldap3/lib/Net/LDAP3.php create mode 100644 data/web/rc/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Auth_SASL/Auth/SASL.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Auth_SASL/Auth/SASL/Anonymous.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Auth_SASL/Auth/SASL/Common.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Auth_SASL/Auth/SASL/CramMD5.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Auth_SASL/Auth/SASL/DigestMD5.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Auth_SASL/Auth/SASL/External.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Auth_SASL/Auth/SASL/Login.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Auth_SASL/Auth/SASL/Plain.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Auth_SASL/Auth/SASL/SCRAM.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Action.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Action/Callback.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Action/Counter.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Action/Help.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Action/List.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Action/Password.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Action/StoreArray.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Action/StoreFalse.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Action/StoreFloat.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Action/StoreInt.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Action/StoreString.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Action/StoreTrue.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Action/Version.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Argument.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Command.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/CustomMessageProvider.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Element.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Exception.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/MessageProvider.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/MessageProvider/Default.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Option.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Outputter.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Outputter/Default.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Renderer.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Renderer/Default.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/Result.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/Console/CommandLine/XmlParser.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Console_CommandLine/data/Console_CommandLine/data/xmlschema.rng create mode 100644 data/web/rc/vendor/pear-pear.php.net/Crypt_GPG/Crypt/GPG.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Crypt_GPG/Crypt/GPG/Engine.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Crypt_GPG/Crypt/GPG/Exceptions.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Crypt_GPG/Crypt/GPG/Key.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Crypt_GPG/Crypt/GPG/KeyGenerator.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Crypt_GPG/Crypt/GPG/PinEntry.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Crypt_GPG/Crypt/GPG/ProcessControl.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Crypt_GPG/Crypt/GPG/ProcessHandler.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Crypt_GPG/Crypt/GPG/Signature.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Crypt_GPG/Crypt/GPG/SignatureCreationInfo.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Crypt_GPG/Crypt/GPG/SubKey.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Crypt_GPG/Crypt/GPG/UserId.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Crypt_GPG/Crypt/GPGAbstract.php create mode 100755 data/web/rc/vendor/pear-pear.php.net/Crypt_GPG/bin/crypt-gpg-pinentry create mode 100644 data/web/rc/vendor/pear-pear.php.net/Crypt_GPG/data/Crypt_GPG/data/pinentry-cli.xml create mode 100644 data/web/rc/vendor/pear-pear.php.net/Mail_Mime/Mail/mime.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Mail_Mime/Mail/mimePart.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Net_IDNA2/Net/IDNA2.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Net_IDNA2/Net/IDNA2/Exception.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Net_IDNA2/Net/IDNA2/Exception/Nameprep.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Net_LDAP2/Net/LDAP2.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Net_LDAP2/Net/LDAP2/Entry.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Net_LDAP2/Net/LDAP2/Filter.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Net_LDAP2/Net/LDAP2/LDIF.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Net_LDAP2/Net/LDAP2/RootDSE.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Net_LDAP2/Net/LDAP2/Schema.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Net_LDAP2/Net/LDAP2/SchemaCache.interface.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Net_LDAP2/Net/LDAP2/Search.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Net_LDAP2/Net/LDAP2/SimpleFileSchemaCache.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Net_LDAP2/Net/LDAP2/Util.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Net_SMTP/Net/SMTP.php create mode 100644 data/web/rc/vendor/pear-pear.php.net/Net_Socket/Net/Socket.php create mode 100644 data/web/rc/vendor/pear/console_getopt/.travis.yml create mode 100644 data/web/rc/vendor/pear/console_getopt/Console/Getopt.php create mode 100644 data/web/rc/vendor/pear/console_getopt/LICENSE create mode 100644 data/web/rc/vendor/pear/console_getopt/README.rst create mode 100644 data/web/rc/vendor/pear/console_getopt/composer.json create mode 100644 data/web/rc/vendor/pear/console_getopt/package.xml create mode 100644 data/web/rc/vendor/pear/pear-core-minimal/README.rst create mode 100644 data/web/rc/vendor/pear/pear-core-minimal/composer.json create mode 100755 data/web/rc/vendor/pear/pear-core-minimal/copy-from-pear-core.sh create mode 100644 data/web/rc/vendor/pear/pear-core-minimal/src/OS/Guess.php create mode 100644 data/web/rc/vendor/pear/pear-core-minimal/src/PEAR.php create mode 100644 data/web/rc/vendor/pear/pear-core-minimal/src/PEAR/Error.php create mode 100644 data/web/rc/vendor/pear/pear-core-minimal/src/PEAR/ErrorStack.php create mode 100644 data/web/rc/vendor/pear/pear-core-minimal/src/System.php create mode 100644 data/web/rc/vendor/pear/pear_exception/.travis.yml create mode 100644 data/web/rc/vendor/pear/pear_exception/LICENSE create mode 100644 data/web/rc/vendor/pear/pear_exception/PEAR/Exception.php create mode 100644 data/web/rc/vendor/pear/pear_exception/composer.json create mode 100644 data/web/rc/vendor/pear/pear_exception/package.xml create mode 100644 data/web/rc/vendor/roundcube/net_sieve/.travis.yml create mode 100644 data/web/rc/vendor/roundcube/net_sieve/Sieve.php create mode 100644 data/web/rc/vendor/roundcube/net_sieve/composer.json create mode 100644 data/web/rc/vendor/roundcube/net_sieve/package.xml create mode 100644 data/web/rc/vendor/roundcube/net_sieve/tests/SieveTest.php create mode 100644 data/web/rc/vendor/roundcube/net_sieve/tests/config.php.dist create mode 100644 data/web/rc/vendor/roundcube/net_sieve/tests/largescript.siv create mode 100644 data/web/rc/vendor/roundcube/plugin-installer/README.md create mode 100644 data/web/rc/vendor/roundcube/plugin-installer/composer.json create mode 100644 data/web/rc/vendor/roundcube/plugin-installer/src/Roundcube/Composer/PluginInstaller.php create mode 100755 data/web/rc/vendor/roundcube/plugin-installer/src/bin/rcubeinitdb.sh diff --git a/data/web/inc/functions.inc.php b/data/web/inc/functions.inc.php index fef6760e..0311671c 100644 --- a/data/web/inc/functions.inc.php +++ b/data/web/inc/functions.inc.php @@ -253,6 +253,8 @@ function edit_admin_account($postarray) { } $username = $postarray['admin_user']; $username_now = $_SESSION['mailcow_cc_username']; + $password = $postarray['admin_pass']; + $password2 = $postarray['admin_pass2']; if (!ctype_alnum(str_replace(array('_', '.', '-'), '', $username)) || empty ($username)) { $_SESSION['return'] = array( @@ -262,15 +264,22 @@ function edit_admin_account($postarray) { return false; } - if (!empty($postarray['admin_pass']) && !empty($postarray['admin_pass2'])) { - if ($postarray['admin_pass'] != $postarray['admin_pass2']) { + if (!empty($password) && !empty($password2)) { + if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password)) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' => sprintf($lang['danger']['password_complexity']) + ); + return false; + } + if ($password != $password2) { $_SESSION['return'] = array( 'type' => 'danger', 'msg' => sprintf($lang['danger']['password_mismatch']) ); return false; } - $password_hashed = hash_password($postarray['admin_pass']); + $password_hashed = hash_password($password); try { $stmt = $pdo->prepare("UPDATE `admin` SET `modified` = :modified, @@ -585,9 +594,7 @@ function edit_user_account($postarray) { ); return false; } - if (strlen($password_new) < "6" || - !preg_match('/[A-Za-z]/', $password_new) || - !preg_match('/[0-9]/', $password_new)) { + if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password_new)) { $_SESSION['return'] = array( 'type' => 'danger', 'msg' => sprintf($lang['danger']['password_complexity']) @@ -1515,7 +1522,7 @@ function add_domain_admin($postarray) { global $pdo; $username = strtolower(trim($postarray['username'])); $password = $postarray['password']; - $password2 = $postarray['password2']; + $password2 = $postarray['password2']; isset($postarray['active']) ? $active = '1' : $active = '0'; if ($_SESSION['mailcow_cc_role'] != "admin") { $_SESSION['return'] = array( @@ -1571,6 +1578,13 @@ function add_domain_admin($postarray) { } } if (!empty($password) && !empty($password2)) { + if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password)) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' => sprintf($lang['danger']['password_complexity']) + ); + return false; + } if ($password != $password2) { $_SESSION['return'] = array( 'type' => 'danger', @@ -2169,6 +2183,13 @@ function edit_domain_admin($postarray) { } if (!empty($password) && !empty($password2)) { + if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password)) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' => sprintf($lang['danger']['password_complexity']) + ); + return false; + } if ($password != $password2) { $_SESSION['return'] = array( 'type' => 'danger', @@ -2262,14 +2283,12 @@ function edit_domain_admin($postarray) { ); return false; } - if (strlen($password_new) < "6" || - !preg_match('/[A-Za-z]/', $password_new) || - !preg_match('/[0-9]/', $password_new)) { - $_SESSION['return'] = array( - 'type' => 'danger', - 'msg' => sprintf($lang['danger']['password_complexity']) - ); - return false; + if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password_new)) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' => sprintf($lang['danger']['password_complexity']) + ); + return false; } $password_hashed = hash_password($password_new); try { @@ -2991,6 +3010,13 @@ function mailbox_add_mailbox($postarray) { } if (!empty($password) && !empty($password2)) { + if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password)) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' => sprintf($lang['danger']['password_complexity']) + ); + return false; + } if ($password != $password2) { $_SESSION['return'] = array( 'type' => 'danger', @@ -3735,6 +3761,13 @@ function mailbox_edit_mailbox($postarray) { } } if (!empty($password) && !empty($password2)) { + if (!preg_match('/' . $GLOBALS['PASSWD_REGEP'] . '/', $password)) { + $_SESSION['return'] = array( + 'type' => 'danger', + 'msg' => sprintf($lang['danger']['password_complexity']) + ); + return false; + } if ($password != $password2) { $_SESSION['return'] = array( 'type' => 'danger', @@ -4313,9 +4346,13 @@ function mailbox_get_mailbox_details($mailbox) { $DomainQuota = $stmt->fetch(PDO::FETCH_ASSOC); $stmt = $pdo->prepare("SELECT COALESCE(SUM(`quota`), 0) as `in_use` FROM `mailbox` WHERE `kind` NOT REGEXP 'location|thing|group' AND `domain` = :domain AND `username` != :username"); - $stmt->execute(array(':domain' => $row['domain'], ':username' => $row['username'])); + $stmt->execute(array(':domain' => $row['domain'], ':username' => $mailbox)); $MailboxUsage = $stmt->fetch(PDO::FETCH_ASSOC); + $stmt = $pdo->prepare("SELECT IFNULL(COUNT(`address`), 0) AS `sa_count` FROM `spamalias` WHERE `address` = :address"); + $stmt->execute(array(':address' => $mailbox)); + $SpamaliasUsage = $stmt->fetch(PDO::FETCH_ASSOC); + $mailboxdata['max_new_quota'] = ($DomainQuota['quota'] * 1048576) - $MailboxUsage['in_use']; if ($mailboxdata['max_new_quota'] > ($DomainQuota['maxquota'] * 1048576)) { $mailboxdata['max_new_quota'] = ($DomainQuota['maxquota'] * 1048576); @@ -4331,6 +4368,7 @@ function mailbox_get_mailbox_details($mailbox) { $mailboxdata['quota_used'] = intval($row['bytes']); $mailboxdata['percent_in_use'] = round((intval($row['bytes']) / intval($row['quota'])) * 100); $mailboxdata['messages'] = $row['messages']; + $mailboxdata['spam_aliases'] = $SpamaliasUsage['sa_count']; if ($mailboxdata['percent_in_use'] >= 90) { $mailboxdata['percent_class'] = "danger"; } diff --git a/data/web/inc/vars.inc.php b/data/web/inc/vars.inc.php index b8270ba7..db3f4219 100644 --- a/data/web/inc/vars.inc.php +++ b/data/web/inc/vars.inc.php @@ -35,4 +35,6 @@ $DEFAULT_LANG = "en"; // See https://bootswatch.com/ $DEFAULT_THEME = "lumen"; +// Password complexity as regular expression +$PASSWD_REGEP = '.{4,}'; ?> diff --git a/data/web/js/mailbox.js b/data/web/js/mailbox.js index d12a37c3..eedd51cb 100644 --- a/data/web/js/mailbox.js +++ b/data/web/js/mailbox.js @@ -18,10 +18,10 @@ $(document).ready(function() { return this.each(function(){ $(this).on('keyup', function(e){ var $this = $(this), - search = $this.val().toLowerCase(), - target = $this.attr('data-filters'), - $target = $(target), - $rows = $target.find('tbody #data'); + search = $this.val().toLowerCase(), + target = $this.attr('data-filters'), + $target = $(target), + $rows = $target.find('tbody #data'); $target.find('tbody .filterTable_no_results').remove(); if(search == '') { $target.find('tbody #no-data').show(); diff --git a/data/web/lang/lang.de.php b/data/web/lang/lang.de.php index f63f1557..7b0f122f 100644 --- a/data/web/lang/lang.de.php +++ b/data/web/lang/lang.de.php @@ -57,7 +57,7 @@ $lang['danger']['exit_code_not_null'] = 'Fehler: Exit-Code ist %d'; $lang['danger']['mailbox_not_available'] = 'Mailbox nicht verfĂĽgbar'; $lang['danger']['username_invalid'] = 'Benutzername kann nicht verwendet werden'; $lang['danger']['password_mismatch'] = 'Passwort-Wiederholung stimmt nicht ĂĽberein'; -$lang['danger']['password_complexity'] = 'Passwort entspricht nicht den Vorgaben (Klein- und GroĂźschreibung und mindestens eine Ziffer, mindestens 6 Zeichen lang)'; +$lang['danger']['password_complexity'] = 'Passwort entspricht nicht den Richtlinien'; $lang['danger']['password_empty'] = 'Passwort darf nicht leer sein'; $lang['danger']['login_failed'] = 'Anmeldung fehlgeschlagen'; $lang['danger']['mailbox_invalid'] = 'Mailboxname ist ungĂĽltig'; @@ -207,6 +207,7 @@ $lang['header']['logged_in_as_logout'] = 'Eingeloggt als %s (abmelden)'; $lang['header']['logged_in_as_logout_dual'] = 'Eingeloggt als %s [%s]'; $lang['header']['locale'] = 'Sprache'; $lang['mailbox']['domain'] = 'Domain'; +$lang['mailbox']['spam_aliases'] = 'Temp. Alias'; $lang['mailbox']['alias'] = 'Alias'; $lang['mailbox']['aliases'] = 'Aliasse'; $lang['mailbox']['multiple_bookings'] = 'Mehrfachbuchen'; diff --git a/data/web/lang/lang.en.php b/data/web/lang/lang.en.php index 7abafe13..e4966855 100644 --- a/data/web/lang/lang.en.php +++ b/data/web/lang/lang.en.php @@ -59,7 +59,7 @@ $lang['danger']['exit_code_not_null'] = "Error: Exit code was %d"; $lang['danger']['mailbox_not_available'] = "Mailbox not available"; $lang['danger']['username_invalid'] = "Username cannot be used"; $lang['danger']['password_mismatch'] = "Confirmation password is not identical"; -$lang['danger']['password_complexity'] = "Password does not meet requirements (upper and lowercase letters and at least one number, min. 6 characters long)"; +$lang['danger']['password_complexity'] = "Password does not meet the policy"; $lang['danger']['password_empty'] = "Password must not be empty"; $lang['danger']['login_failed'] = "Login failed"; $lang['danger']['mailbox_invalid'] = "Mailbox name is invalid"; @@ -209,6 +209,7 @@ $lang['header']['logged_in_as_logout'] = 'Logged in as %s (logout)'; $lang['header']['logged_in_as_logout_dual'] = 'Logged in as %s [%s]'; $lang['header']['locale'] = 'Language'; $lang['mailbox']['domain'] = 'Domain'; +$lang['mailbox']['spam_aliases'] = 'Temp. alias'; $lang['mailbox']['multiple_bookings'] = 'Multiple bookings'; $lang['mailbox']['kind'] = 'Kind'; $lang['mailbox']['description'] = 'Description'; diff --git a/data/web/mailbox.php b/data/web/mailbox.php index 08798ffe..faa8c4c0 100644 --- a/data/web/mailbox.php +++ b/data/web/mailbox.php @@ -137,6 +137,7 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI']; + @@ -156,6 +157,7 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI']; / +
diff --git a/data/web/rc/.htaccess b/data/web/rc/.htaccess new file mode 100644 index 00000000..feea19a2 --- /dev/null +++ b/data/web/rc/.htaccess @@ -0,0 +1,87 @@ +# WARNING: For PHP 7 the module name in the line below need to be modified! + +php_flag display_errors Off +php_flag log_errors On +# php_value error_log logs/errors + +php_value upload_max_filesize 5M +php_value post_max_size 6M +php_value memory_limit 64M + +php_flag zlib.output_compression Off +php_flag suhosin.session.encrypt Off + +#php_value session.cookie_path / +#php_value session.hash_function sha256 +php_flag session.auto_start Off +php_value session.gc_maxlifetime 21600 +php_value session.gc_divisor 500 +php_value session.gc_probability 1 + + + +Options +SymLinksIfOwnerMatch +RewriteEngine On +RewriteRule ^favicon\.ico$ skins/larry/images/favicon.ico + +# security rules: +# - deny access to files not containing a dot or starting with a dot +# in all locations except installer directory +RewriteRule ^(?!installer|\.well-known\/|[a-zA-Z0-9]{16})(\.?[^\.]+)$ - [F] +# - deny access to some locations +RewriteRule ^/?(\.git|\.tx|SQL|bin|config|logs|temp|tests|program\/(include|lib|localization|steps)) - [F] +# - deny access to some documentation files +RewriteRule /?(README\.md|composer\.json-dist|composer\.json|package\.xml|Dockerfile)$ - [F] + + + +SetOutputFilter DEFLATE + + + +ExpiresActive On +ExpiresDefault "access plus 1 month" + + +FileETag MTime Size + + +Options -Indexes + + + +# Disable page indexing +Header set X-Robots-Tag "noindex, nofollow" + +# replace 'append' with 'merge' for Apache version 2.2.9 and later +#Header append Cache-Control public env=!NO_CACHE + +# Optional security header +# Only increased security if the browser support those features +# Be careful! Testing is required! They should be adusted to your intallation / user environment + +# HSTS - HTTP Strict Transport Security +#Header always set Strict-Transport-Security "max-age=31536000; preload" env=HTTPS + +# HPKP - HTTP Public Key Pinning +# Only template - fill with your values +#Header always set Public-Key-Pins "max-age=3600; report-uri=\"\"; pin-sha256=\"\"; pin-sha256=\"\"" env=HTTPS + +# X-Xss-Protection +# This header is used to configure the built in reflective XSS protection found in Internet Explorer, Chrome and Safari (Webkit). +#Header set X-XSS-Protection "1; mode=block" + +# X-Frame-Options +# The X-Frame-Options header (RFC), or XFO header, protects your visitors against clickjacking attacks +# Already set by php code! Do not activate both options +#Header set X-Frame-Options SAMEORIGIN + +# X-Content-Type-Options +# It prevents Google Chrome and Internet Explorer from trying to mime-sniff the content-type of a response away from the one being declared by the server. +#Header set X-Content-Type-Options: "nosniff" + +# CSP - Content Security Policy +# for better privacy/security ask browsers to not set the Referer +# more flags for script, stylesheets and images available, read RFC for more information +#Header set Content-Security-Policy "referrer no-referrer" + diff --git a/data/web/rc/CHANGELOG b/data/web/rc/CHANGELOG new file mode 100644 index 00000000..a679ee21 --- /dev/null +++ b/data/web/rc/CHANGELOG @@ -0,0 +1,2413 @@ +CHANGELOG Roundcube Webmail +=========================== + +RELEASE 1.3-beta +---------------- +- Nicely handle contact deletion on contact edit (#5522) +- vcard_attachments: Add possibility to attach contact vCard to composed message (#4997) +- Preserve message internal/received date on import in mbox format (#5559) +- Zipdownload: Fix date format in mbox "From line" +- Possibility to display QR code for contacts data (#5030) +- Added identicon plugin +- Widescreen layout aka three column view (#5093) +- Unify automatic marking as \Seen in preview pane, full-page and extwin views (#5071) +- Disable double-click on the list when preview pane is on (#5199) +- Support hostname and hostname:port in force_https option (#5511) +- Support ALLOW-FROM in x_frame_options (#5122) +- Allow to omit a subject when sending an email (#5068) +- Warn about too many disclosed recipients in composed email [max_disclosed_recipients] (#5132) +- identity_select: Support Received header (#5085) +- Plugin API: Added get_compose_responses hook (#5457) +- Display error when trying to upload more files than specified in max_file_uploads (#5483) +- Add missing sql upgrade file for 'ip' column resize in session table (#5465) +- Do not show inline images of unsupported mimetype (#5463) +- Password: Added replacement variables support in password_pop_host (#5539) +- Password: Don't store passwords in temp files when using dovecotpw (#5531) +- Password: Added LDAP PPolicy driver (#5364) +- Password: Added cpanel_webmail driver (#5549) +- Password: Added possibility to nicely redirect from other plugins on password expiration (#5468) +- Implement separate action to mark all messages in a folder as \Seen (#5006) +- Implement marking as \Seen in all folders or in a folder and its subfolders (#5076) +- Archive: Don't reload messages list when it's not needed (#5225) +- Archive: Add option to automatically mark archived messages as \Seen (#5142) +- Improve randomness of password salts and random hashes (#5266) +- Password/cPanel: Add support for hash authentication and reseller accounts (#5252) +- Support host-specific imap_conn_options/smtp_conn_options/managesieve_conn_options (#5136) +- Center and scale images in attachment preview frame (#5421) +- Added max_message_size option enforced when attaching files to a composed message (#4993) +- Added Search button in quick search menus (#5312) +- Implement "one click" attachment/messages/photo upload (#5024) +- Squirrelmail_usercopy: Add option to define character set of data files +- Removed useless 'created' column from 'session' table (#5389) +- Dropped legacy browsers support (#5167) + - Removed legacy_browser plugin + - Removed hacks for IE < 10 + - Update to jQuery 3.1.1 and jQuery-UI 1.12.0 + - compile .min.js files with ECMASCRIPT5 option +- Require PHP >= 5.4 +- Add possibility to preview and download attachments in mail compose (#5053) +- Add possibility to rename attachments in mail compose (#4996) +- Remove backward compatibility "layer" of bc.php (#4902) +- Support WEBP images in mail messages (#5362) +- Support MathML in HTML message preview (#5182) +- Rename Addressbook to Contacts (#5233) +- Remove PHP mail() support, smtp_server is required now (#5340) +- Display full message subject in onmouseover on truncated subject in mail view (#5346) +- Enigma: Support GnuPG 2.1 (#5313) +- Enigma: Support key generation for multiple identities (#5383) +- Enigma: Import keys from key-server(s) (#5286) +- Enigma: Search missing public keys on a key-server in mail compose (#5286) +- Enigma: Delete user keys when using deluser.sh script +- Enigma: Fix redundant list-secret-keys/list-public-keys calls on signing/encryption +- Enigma: Implement PGP encryption and signing in one go (#5302) +- Enigma: Display signature verification status for encrypted+signed messages (#5302) +- Display different attachment icon on encrypted messages +- Display different confirmation text when moving messages to Trash (#5220) +- Indicate that a collapsed thread has flagged children (#5013) +- Implemented message/rfc822 attachment preview +- Update to jsTimezoneDetect 1.0.6 +- Managesieve: Add (optional) RAW script editor (#5414) +- Managesieve: Add option to automatically set vacation :from address (#5428) +- Managesieve: Support 'string' test from variables extension [RFC 5229] (#5248) +- Managesieve: Support 'duplicate' extension [RFC 7352] +- Managesieve: Unhide advanced rule controls if there are inputs with errors +- Managesieve: Display warning message when filter form contains errors +- Control search engine crawlers via X-Robots-Tag header instead of and robots.txt (#5098) +- Fixed redundancy in sql caching system and compatibility with Galera Cluster (#5439) + - Removed redundant 'created' column from cache and cache_shared tables + - Removed use of redundant data records + - Added missing primary keys (dictionary, cache, cache_shared tables) +- Fix so templating system does not mess with external (e.g. email) content (#5499) +- Fix redundant keep-alive/refresh after session error on compose page (#5500) +- Managesieve: Fix handling of scripts with nested rules (#5540) +- Fix variable substitution in ldap host for some use-cases, e.g. new_user_identity (#5544) +- Enigma: Fix PHP fatal error when decrypting a message with invalid signature (#5555) +- Fix adding images to new identity signatures +- Fix rsync error handling in installto.sh script (#5562) +- Fix some advanced search issues with multiple addressbooks (#5572) +- Fix so group/addressbook selection is retained on page refresh + +RELEASE 1.2.3 +------------- +- Searching in both contacts and groups when LDAP addressbook with group_filters option is used +- Fix vulnerability in handling of mail()'s 5th argument +- Fix To: header encoding in mail sent with mail() method (#5475) +- Fix flickering of header topline in min-mode (#5426) +- Fix bug where folders list would scroll to top when clicking on subscription checkbox (#5447) +- Fix decoding of GB2312/GBK text when iconv is not installed (#5448) +- Fix regression where creation of default folders wasn't functioning without prefix (#5460) +- Enigma: Fix bug where last records on keys list were hidden (#5461) +- Enigma: Fix key search with keyword containing non-ascii characters (#5459) +- Fix bug where deleting folders with subfolders could fail in some cases (#5466) +- Fix bug where IMAP password could be exposed via error message (#5472) +- Fix bug where it wasn't possible to store more that 2MB objects in memcache/apc, + Added memcache_max_allowed_packet and apc_max_allowed_packet settings (#5452) +- Fix "Illegal string offset" warning in rcube::log_bug() on PHP 7.1 (#5508) +- Fix storing "empty" values in rcube_cache/rcube_cache_shared (#5519) +- Fix missing content check when image resize fails on attachment thumbnail generation (#5485) +- Fix displaying attached images with wrong Content-Type specified (#5527) + +RELEASE 1.2.2 +------------- +- Enigma: Add possibility to configure gpg-agent binary location (enigma_pgp_agent) +- Enigma: Fix signature verification with some IMAP servers, e.g. Gmail, DBMail (#5371) +- Enigma: Make recipient key searches case-insensitive (#5434) +- Fix regression in resizing JPEG images with Imagick (#5376) +- Managesieve: Fix parsing of vacation date-time with non-default date_format (#5372) +- Use SymLinksIfOwnerMatch in .htaccess instead of FollowSymLinks disabled on some hosts for security reasons (#5370) +- Wash position:fixed style in HTML mail for better security (#5264) +- Fix bug where memcache_debug didn't work for session operations +- Fix bug where Message-ID domain part was tied to username instead of current identity (#5385) +- Fix bug where blocked.gif couldn't be attached to reply/forward with insecure content +- Fix E_DEPRECATED warning when using Auth_SASL::factory() (#5401) +- Fix bug where names of downloaded files could be malformed when derived from the message subject (#5404) +- Fix so "All" messages selection is resetted on search reset (#5413) +- Fix bug where folder creation could fail if personal namespace contained more than one entry (#5403) +- Fix error causing empty INBOX listing in Firefox when using an URL with user:password specified (#5400) +- Fix PHP warning when handling shared namespace with empty prefix (#5420) +- Fix so folders list is scrolled to the selected folder on page load (#5424) +- Fix so when moving to Trash we make sure the folder exists (#5192) +- Fix displaying size of attachments with zero size +- Fix so "Action disabled" error uses more appropriate 404 code (#5440) + +RELEASE 1.2.1 +------------- +- Update TinyMCE to version 4.3.13 (#5309) +- Fix bug where errors could have been not logged when per_user_logging=true +- Fix bug where message list columns could be in wrong order after column drag-n-drop and list sorting +- Fix so minified publickey.js (with cache-buster) is used when available (#5254) +- Fix (replace) application/x-tar file extension test as it might not exist in nginx config (#5253) +- Fix PHP warning when password_hosts is set, but is not an array (#5260) +- Fix redundant keep-alive requests when session_lifetime is greater than ~20000 (#5273) +- Fix so subfolders of INBOX can be set as Archive (#5274) +- Fix bug where multi-folder search could choose a wrong folder in "this and subfolders" scope (#5282) +- Fix bug where multi-folder search didn't work for unsubscribed INBOX (#5259) +- Fix bug where "no body" alert could be displayed when sending mailvelope email +- Enigma: Fix keys import from inside of an encrypted message (#5285) +- Enigma: Fix malformed signed messages with force_7bit=true (#5292) +- Enigma: Add possibility to configure gpg binary location (enigma_pgp_binary) +- Enigma: Add possibility to export private keys (#5321) +- Fix searching by email address in contacts with multiple addresses (#5291) +- Fix handling of --delete argument in moduserprefs.sh script (#5296) +- Workaround PHP issue by calling closelog() on script shutdown when using log_driver=syslog (#5289) +- Fix so upgrade script makes sure program/lib directory does not contain old libraries (#5287) +- Fix subscription checkbox state on error in folder subscribe/unsubscribe action (#5243) +- Fix bug where microsecond format in logged date didn't work in some cases +- Fix conflict in new_user_dialog and password_force_new_user settings (#5275) +- Don't create multipart/alternative messages with empty text/plain part (#5283) +- Use contact_search_name format in popup on results in compose contacts search +- Fix handling of 'mailto' and 'error' arguments in message_before_send hook (#5347) +- Fix missing localization of HTML editor when assets_dir != INSTALL_PATH +- Fix handling of blockquote tags with mixed case on html2text conversion (#5363) +- Fix javascript errors in IE on page with iframe that points to another domain + +RELEASE 1.2.0 +------------- +- Enigma: Added enigma_debug option +- Fix message list multi-select/deselect issue (#5219) +- Fix bug where getting HTML editor content could steal focus from other form controls (#5223) +- Fix bug where contact search menu fields where always unchecked in Larry skin +- Fix autoloading of 'html' class +- Fix bug where Encrypt button appears when switching editor to HTML (#5235) +- Fix XSS issue in href attribute on area tag (#5240) + +RELEASE 1.2-rc +-------------- +- Managesieve: Refactored script parser to be 100x faster +- Enigma: added option to force users to use signing/encryption +- Enigma: Added option to attach public keys to sent mail (#5152) +- Enigma: Handle messages with text before an encrypted block (#5149) +- Enigma: Handle encrypted/signed content inside message/rfc822 attachments +- Enigma: Fix missing html/plain switch on multipart/signed messages (#4963) +- Enigma: Disable format=flowed for signed plain text messages (#4960) +- Enigma: Fix handling of encrypted + signed messages (#4950) +- Enigma: Fix invalid boundary use in signed messages structure +- Enable use of TLSv1.1 and TLSv1.2 for IMAP (#4955) +- Save copy of original .htaccess file when using installto.sh script (#4947) +- Fix regression where some message attachments could be missing on edit/forward (#4939) +- Fix regression in displaying contents of message/rfc822 parts (#4937) +- Fix handling of message/rfc822 attachments on replies and forwards (#4938) +- Fix PDF support detection in Firefox > 19 (#4941) +- Fix path traversal vulnerability in setting a skin [CVE-2015-8770] (#4945) +- Fix so drag-n-drop of text (e.g. recipient addresses) on compose page actually works (#4944) +- Fix .htaccess rewrite rules to not block .well-known URIs (#4943) +- Fix mail view scaling on iOS (#4915) +- Fix PHP7 warning "session_start(): Session callback expects true/false return value" (#4948) +- Fix XSS issue in SVG images handling [CVE-2015-8864, CVE-2016-4068] (#4949) +- Fix missing language name in "Add to Dictionary" request in HTML mode (#4951) +- Fix (again) security issue in DBMail driver of password plugin [CVE-2015-2181] (#4958) +- Fix bug where Archive/Junk buttons were not active after page jump with select=all mode (#4961) +- Fix bug in long recipients list parsing for cases where recipient name contained @-char (#4964) +- Plugin API: Added addressbook_export hook +- Fix additional_message_headers plugin compatibility with Mail_Mime >= 1.9 (#4966) +- Hide DSN option in Preferences when smtp_server is not used (#4967) +- Fix handling of body parameter in mail compose request +- Protect download urls against CSRF using unique request tokens [CVE-2016-4069] (#4957) +- newmail_notifier: Refactor desktop notifications +- Fix so contactlist_fields option can be set via config file +- Fix so SPECIAL-USE assignments are forced only until user sets special folders (#4782) +- Fix performance in reverting order of THREAD result +- Fix converting mail addresses with @www. into mailto links (#5197) + +RELEASE 1.2-beta +---------------- +- Update TinyMCE to version 4.2 +- Added support for Redis session handler +- Removed some deprecated methods: https://github.com/roundcube/roundcubemail/commit/454b0b1c +- Remove backward compatibility "layer" of bc.php (#4902) +- Add possibility to define date format in write operations for ldap attributes (#3956) +- Display attachment size in compose (#1329) +- Added possibility to drag-n-drop attachments from mail preview to compose window +- Implemented mail messages searching with predefined date interval +- PGP encryption support via Mailvelope integration +- PGP encryption support via Enigma plugin +- PHP7 compatibility fixes (#4836) +- Security: Added brute-force attack prevention via login rate limit (#4922) +- Security: Added options to validate username/password on logon (#4884) +- Security: Improve randomness of security tokens (#4899) +- Security: Use random security tokens instead of hashes based on encryption key (#4829) +- Security: Improved encrypt/decrypt methods with option to choose the cipher_method (#4492) +- Make optional adding of standard signature separator - sig_separator (#3276) +- Optimize folder_size() on Cyrus IMAP by using special folder annotation (#4894) +- Make optional hidding of folders with name starting with a dot - imap_skip_hidden_folders (#4870) +- Add option to enable HTML editor always, except when replying to plain text messages (#4352) +- Emoticons: Added option to switch on/off emoticons in compose editor (#2076) +- Emoticons: Added option to switch on/off emoticons in plain text messages +- Emoticons: All emoticons-related functionality is handled by the plugin now +- Installer: Add button to save generated config file in system temp directory (#3553) +- Remove common subject prefixes Re:, Re[x]:, Re-x: on reply (#4882) +- Added GSSAPI/Kerberos authentication plugin - krb_authentication +- Password: Allow temporarily disabling the plugin functionality with a notice +- Require Mbstring and OpenSSL extensions (#5166) +- Add --config and --type options to moduserprefs.sh script (#4651) +- Implemented memcache_debug and apc_debug options +- Installer: Remove system() function use (#4695) +- Password plugin: Added 'kpasswd' driver by Peter Allgeyer +- Add initdb.sh to create database from initial.sql script with prefix support (#4722) +- Plugin API: Added disabled_plugins an disabled_buttons options in html_editor hook +- Plugin API: Added html2text hook +- Plugin API: Added message_part_body hook +- Plugin API: Added message_ready hook +- Plugin API: Add special onload() method to execute plugin actions before startup (session and GUI initialization) +- Implemented UI element to jump to specified page of the messages list (#1677) +- Fix searching of contacts to allow remote images for known senders (#4886) +- Fix bug where clicking date column with 'arrival' sorting would switch to sorting by 'date' (#4690) +- Fix bug where message content could overlap attachments list in Larry skin (#4876) +- Fix so microseconds macro (u) in log_date_format works (#4855) +- Fix so unrecognized TNEF attachments are displayed on the list of attachments (#5138) +- Fix so database_attachments::cleanup() does not remove attachments from other sessions (#4907) +- Fix responses list update issue after response name change (#4917) +- Fix bug where message preview was unintentionally reset on check-recent action (#4921) +- Fix bug where HTML messages with invalid/excessive css styles couldn't be displayed (#4905) +- Fix redundant blank lines when using HTML and top posting (#4927) +- Fix redundant blank lines on start of text after html to text conversion (#4928) +- Fix HTML sanitizer to skip in output (#4932) +- Fix invalid LDAP query in ACL user autocompletion (#4934) + +RELEASE 1.1.3 +------------- +- Fix closing of nested menus (#4854) +- Fix so E_DEPRECATED errors from PEAR libs are ignored by error_reporting change (#4770) +- Fix compatibility with PHP 5.3 in rcube_ldap class (#4842) +- Get rid of Mail_mimeDecode package dependency (#4836) +- Fix "Importing..." message does not hide on error (#4840) +- Fix Compose action in addressbook for results from multiple addressbooks (#4834) +- Fix bug where some messages in multi-folder search couldn't be viewed/printed/downloaded (#4843) +- Fix unintentional messages list page change on page switch in compose addressbook (#4844) +- Fix race-condition in saving user preferences and loading plugin config (#4845) +- Fix so plain text signature field uses monospace font (#4848) +- Fix so links with href == content aren't added to links list on html to text conversion (#4847) +- Fix handling of non-break spaces in html to text conversion (#4849) +- Fix self-reply detection issues (#4852) +- Fix multi-folder search result sorting by arrival date (#4858) +- Fix so *-request@ addresses in Sender: header are also ignored on reply-all (#4860) +- Update to TinyMCE 4.1.10 (#5164) +- Fix draft removal after a message is sent and storing sent message is disabled (#4869) +- Fix so imap folder attribute comparisons are case-insensitive (#4868) +- Fix bug where new messages weren't added to the list in search mode +- Fix wrong positioning of message list header on page scroll in Webkit browsers (#4646) +- Fix some javascript errors in rare situations (#4853) +- Fix error when using back button after sending an email (#4628) +- Fix removing signature when switching to identity with an empty sig in HTML mode (#4872) +- Disable links list generation on html-to-text conversion of identities or composed message (#4850) +- Fix "washing" of style elements wrapped into many lines +- Fix so input field (e.g. search box) does not loose focus on list load (#4862) +- Fix so css of one html part does not apply to other text parts on message display (#4887) +- Fix XSS issue in drag-n-drop file uploads [CVE-2015-8105] (#4900) +- Fix handling of plus character in mailto: links (#4891) +- Fix so adding CC/BCC recipients from the sidebar unhides compose form fields in Classic skin (#4874) +- Fix so gc.sh script removes also expired sessions from sql database (#4893) +- Fix support for Mozilla-based browsers, e.g. Pale Moon (#4895) +- Fix various issues with Turkish (and similar) locales (#4896) +- Fix so In-Reply-To header is set also for MDN receipts (#4897) +- Fix missing HTTP_X_FORWARDED_FOR address in generated Received header +- Fix issue where Content-Length of some attachments could be set to wrong value causing browser errors (#4877) + +RELEASE 1.1.2 +------------- +- Add new plugin hook 'identity_create_after' providing the ID of the inserted identity (#4807) +- Add option to place signature at bottom of the quoted text even in top-posting mode [sig_below] +- Fix handling of %-encoded entities in mailto: URLs (#4799) +- Fix zipped messages downloads after selecting all messages in a folder (#4797) +- Fix vpopmaild driver of password plugin +- Fix PHP warning: Non-static method PEAR::setErrorHandling() should not be called statically (#4798) +- Fix tables listing routine on mysql and postgres so it skips system or other database tables and views (#4796) +- Fix message list header in classic skin on window resize in Internet Explorer (#4732) +- Fix so text/calendar parts are listed as attachments even if not marked as such (#4795) +- Fix lack of signature separator for plain text signatures in html mode (#4802) +- Fix font artifact in Google Chrome on Windows (#4803) +- Fix bug where forced extwin page reload could exit from the extwin mode (#4801) +- Fix bug where some unrelated attachments in multipart/related message were not listed (#4805) +- Fix mouseup event handling when dragging a list record (#4808) +- Fix bug where preview_pane setting wasn't always saved into user preferences (#4809) +- Fix bug where messages count was not updated after message move/delete with skip_deleted=false (#4814) +- Fix security issue in contact photo handling (#4817) +- Fix possible memcache/apc cache data consistency issues (#4820) +- Fix bug where imap_conn_options were ignored in IMAP connection test (#4822) +- Fix bug where some files could have "executable" extension when stored in temp folder (#4815) +- Fix attached file path unsetting in database_attachments plugin (#4823) +- Fix issues when using moduserprefs.sh without --user argument (#4825) +- Fix potential info disclosure issue by protecting directory access (#4816) +- Fix blank image in html_signature when saving identity changes (#4833) +- Installer: Use openssl_random_pseudo_bytes() (if available) to generate des_key (#4827) +- Fix XSS vulnerability in _mbox argument handling (#4837) + +RELEASE 1.1.1 +------------- +- ACL: Allow other plugins to adjust the list of permissions and groups to edit +- Add possibility to print contact information (of a single contact) +- Add possibility to configure max_allowed_packet value for all database engines (#4772) +- Improved handling of storage errors after message is sent +- Update to TinyMCE 4.1.9 +- Unified request* event arguments handling, added support for _unlock and _action parameters +- Security: Generate random hash for the per-user local storage prefix (#4768) +- Fix refreshing of drafts list when sending a message which was saved in meantime (#4745) +- Fix saving/sending emoticon images when assets_dir is set +- Fix PHP fatal error when visiting Vacation interface and there's no sieve script yet (#4778) +- Fix setting max packet size for DB caches and check packet size also in shared cache +- Fix needless security warning on BMP attachments display (#4771) +- Fix handling of some improper constructs in format=flowed text as per the RFC3676[4.5] (#4773) +- Fix performance of rcube_db_mysql::get_variable() +- Fix missing or not up-to-date CATEGORIES entry in vCard export (#4766) +- Fix fatal errors on systems without mbstring extension or mb_regex_encoding() function (#4769) +- Fix cursor position on reply below the quote in HTML mode (#4759) +- Fix so "over quota" errors are displayed also in message compose page +- Fix duplicate entries supression in autocomplete result (#4776) +- Fix "Non-static method PEAR::isError() should not be called statically" errors (#4770) +- Fix parsing invalid HTML messages with BOM after (#4777) +- Fix duplicate entry on timezones list in rcube_config::timezone_name_from_abbr() (#4779) +- Fix so localized folder name is displayed in multi-folder search result (#4750) +- Fix javascript error after creating a folder which is a subfolder of another one (#4781) +- Fix bug where subject of sent/saved message was removed if mbstring wasn't installed (#4780) +- Fix missing vcard_attachment icon on messages list (#4783) +- Fix storing signatures with big images in MySQL database (#4785) +- Fix Opera browser detection in javascript (#4786) +- Fix so search filter, scope and fields are reset on folder change +- Fix rows count when messages search fails (#4760) +- Fix bug where spellchecking in HTML editor do not work after switching editor type more than once (#4789) +- Fix bug where TinyMCE area height was too small on slow network connection (#4788) +- Fix backtick character handling in sql queries (#4790) +- Fix redirect URL for attachments loaded in an iframe when behind a proxy (#4724) +- Fix menu container references to point to the actual
    element (#4791) +- Fix javascripts errors in IE8 - lack of Event.which, focusing a hidden element (#4793) + +RELEASE 1.1.0 +------------- +- Make SMTP error log more verbose - include server response and error code +- Fix download options menu (added by zipdownload plugin) in classic skin (#4740) +- Fix blocked.gif image usage with assets_dir set +- Fix bug where max_group_members was ignored when adding a new contact (#4733) +- Hide MDN and DSN options in compose if disabled by admin (#4735) +- Fix checks based on window.ActiveXObject in IE > 10 +- Fix XSS issue in style attribute handling [CVE-2015-1433] (#4739) +- Fix bug where Drafts list wasn't updated on draft-save action in new window (#4737) +- Fix so "set as default" option is hidden if identities_level > 1 (#4738) +- Fix bug where search was reset after returning from compose visited for reply +- Fix javascript error in "IE 8.0/Tablet PC" browser (#4730) +- Fix bug where Reply-To address was ignored on reply to messages sent by self (#4742) +- Fix bug where empty fieldmap config entries caused empty results of ldap search (#4741) +- Fix bug where drafts list wasn't refreshed after draft message was sent from another window (#4745) +- Fix keyboard navigation and css in datepicker widget across many Firefox versions +- Fix false warning when opening attached text/plain files (#4748) +- Fix bug where signature could have been inserted twice after plain-to-html switch (#4746) +- Fix security issue in DBMail driver of password plugin (#4757) +- Enable FollowSymLinks option in .htaccess file which is required by rewrite rules (#4754) +- Fix so JSON.parse() errors on localStorage items are ignored (#4752) + +RELEASE 1.1-rc +-------------- +- Update jQuery to version 2.1.3 +- Allow to override any config option through env variables +- Improve system security by using optional special URL with security token - use_secure_urls +- Allow to define separate server/path for image/js/css files - assets_url/assets_dir +- Sync vendor folder if exists in source package (#4700) +- Avoid useless reloading list when resetting search with active filter (#4654) +- Fix invalid folder selection if clicked while busy (#4709) +- Fix import of multiple contact email addresses from Outlook-csv format (#4714) +- Fix drag-n-drop to folders expanded while dragging (#4708) +- Fix import of multiple contact groups from Google-csv format (#4710) +- Fix import of contacts with multiple email addresses from Google-csv format (#4719) +- Fix bugs where CSRF attacks were still possible on some requests [CVE-2014-9587] +- Fix some rcube_utils::anytodatetime() corner cases with timezone mismatches (#4712) +- Improve move-to and contact-export button in classic skin (#4713) +- Fix wrong icon for download button in classic skin +- Fix bug where sent message was saved in Sent folder even if disabled by user (#4729) + +RELEASE 1.1-beta +---------------- +- Fix skin path handling in plugin context (#4111) +- Prevent memory exhaustion on image resizing with GD on Windows (#4580) +- Add plugin hook for database table name lookups as requested in #4538 +- Added Oracle database support +- Support contacts import in GMail CSV format +- Added namespace filter in Folder Manager +- Added folder searching in Folder Manager +- Fix restoring draft messages from localStorage if editor mode differs (#4631) +- Added config option/user preference to disable saving messages in localStorage (#4606) +- Added config option 'imap_log_session' to enable Roundcube <-> IMAP session ID logging +- Added config option 'log_session_id' to control the lengh of the session identifer in logs +- Implemented 'storage_connected' API hook after successful IMAP login (#4638) +- Intergrate Net_LDAP3 and rcube_ldap_generic classes +- Add option (disabled_actions) to disable UI elements/actions (#4478) +- Support password encryption using openssl extension (#4614) +- Create/rename groups in UI dialogs (#4592) +- Added 'contact_search_name' option to define autocompletion entry format +- Display quota information for current folder not INBOX only (#3442) +- Support images in HTML signatures (#3917) +- Display full quota information in popup (#2103, #2746) +- Mail compose: Selecting contact inserts recipient to previously focused input - to/cc/bcc accordingly (#4487) +- Close "no subject" prompt with Enter key (#4463) +- Password: Add option to force new users to change their password (#2963) +- Improve support for screen readers and assistive technology using WCAG 2.0 and WAI ARIA standards +- Enable basic keyboard navigation throughout the UI (#3333) +- Select/scroll to previously selected message when returning from message page (#4146) +- Display a warning if popup window was blocked (#4472) +- Remove (was: ...) from message subject on reply (#4359) +- Update to TinyMCE 4.1 (#4168) +- Enable autolink plugin in TinyMCE (#4029) +- Support image operations with Imagick extension (#4498) +- Support upload progress with session.upload_progress and PECL uploadprogress module (#3934) +- Make identity name field optional (#4435) +- Utility script to remove user records from the local database +- Plugin API: Added message_saved hook (#4503) +- Plugin API: Added imap_search_before hook +- Support messages import from zip archives +- Zipdownload: Added mbox format support (#2354) +- Drop support for IE6, move IE7/IE8 support to legacy_browser plugin +- Update to jQuery-2.1.1 +- Search across multiple folders (#1676) +- Improve UI integration of ACL settings +- Drop support for PHP < 5.3.7 +- Set In-Reply-To and References for forwarded messages (#4465) +- Removed redundant default_folders config option (#4500) +- Implemented IMAP SPECIAL-USE extension support [RFC6154] (#3326) +- Optimize some framed pages content for better performance (#4517) +- Improve text messages display and conversion to HTML (#4091) +- Don't remove links when html signature is converted to text (#4473) +- Fix page title when using search filter (#4636) +- Fix mbox files import +- Fix some character sets detection (#4694) +- Fix so attachment charset is set in headers of forward/draft message (#4676) +- Fix bug where wrong charset could be used for text attachment preview page (#4674) + +RELEASE 1.0.5 +------------- +- Fix wrong icon for download button in classic skin +- Fix checks based on window.ActiveXObject in IE > 10 +- Fix XSS issue in style attribute handling (#4739) +- Fix bug where Drafts list wasn't updated on draft-save action in new window (#4737) +- Fix so "set as default" option is hidden if identities_level > 1 (#4738) +- Fix javascript error in "IE 8.0/Tablet PC" browser (#4730) +- Fix bug where empty fieldmap config entries caused empty results of ldap search (#4741) +- Fix bug where sent message was saved in Sent folder even if disabled by user (#4729) + +RELEASE 1.0.4 +------------- +- Disable TinyMCE contextmenu plugin as there are more cons than pros in using it (#4684) +- Fix bug where show_real_foldernames setting wasn't honored on compose page (#4705) +- Fix issue where Archive folder wasn't protected in Folder Manager (#4706) +- Fix compatibility with PHP 5.2. in rcube_imap_generic (#4682) +- Fix setting flags on servers with no PERMANENTFLAGS response (#4667) +- Fix regression in SHAA password generation in ldap driver of password plugin (#4670) +- Fix displaying of HTML messages with absolutely positioned elements in Larry skin (#4672) +- Fix font style display issue in HTML messages with styled elements (#4671) +- Fix download of attachments that are part of TNEF message (#4668) +- Fix handling of uuencoded messages if messages_cache is enabled (#4675) +- Fix handling of base64-encoded attachments with extra spaces (#4678) +- Fix handling of UNKNOWN-CTE response, try do decode content client-side (#4650) +- Fix bug where creating subfolders in shared folders wasn't possible without ACL extension (#4680) +- Fix reply scrolling issue with text mode and start message below the quote (#4681) +- Fix possible issues in skin/skin_path config handling (#4689) +- Fix lack of delimiter for recipient addresses in smtp_log (#4703) +- Fix generation of Blowfish-based password hashes (#4721) +- Fix bugs where CSRF attacks were still possible on some requests [CVE-2014-9587] + +RELEASE 1.0.3 +------------- +- Initialize HTML editor before restoring a message from localStorage (#4631) +- Add 'sig_max_lines' config option to default config file (#5162) +- Add config option to specify IMAP connection socket parameters - imap_conn_options (#4589) +- Add option to set default message list mode - default_list_mode (#3157) +- Enable contextmenu plugin for TinyMCE editor (#3062) +- Fix insert-signature command in external compose window if opened from inline compose screen (#4663) +- Fix some mime-type to extension mapping checks in Installer (#4610) +- Fix errors when using localStorage in Safari's private browsing mode (#4619) +- Fix bug where $Forwarded flag was being set even if server didn't support it (#4621) +- Fix various iCloud vCard issues, added fallback for external photos (#4617) +- Fix invalid Content-Type header when send_format_flowed=false (#4616) +- Fix errors when adding/updating contacts in active search (#4630) +- Fix incorrect thumbnail rotation with GD and exif orientation data (#4641) +- Fix contacts list update after adding/deleting/moving a contact (#4640, #4644) +- Fix handling of email addresses with quoted domain part (#4647) +- Fix comm_path update on task switch (#4648) +- Fix error in MSSQL update script 2013061000.sql (#4658) +- Fix validation of email addresses with IDNA domains (#4661) + +RELEASE 1.0.2 +------------- +- Fix storing unsaved drafts in localStorage (#4529) +- Add configurable LDAP_OPT_DEREF option (#4546) +- Fix so when switching editor mode original version of signature is used (#4032) +- Fix unintentional draft autosave request if autosave is disabled (#4550) +- Fix malformed References: header in send/saved mail (#4552) +- Fix handling unicode characters in links (#4555) +- Fix incorrect handling of HTML comments in messages sanitization code (#4558) +- Fix so current page is reset on list-mode change (#4561) +- Fix so responses menu hides on click in classic skin (#4566) +- Fix unintentional line-height style modification in HTML messages (#4567) +- Fix broken normalize_string(), add support for ISO-8859-2 (#4568) +- Support csv contacts import in German localization (#4570) +- Fix so message list and counters are updated when a message is opened in new window (#4569) +- Fix malformed recipient name when composing a message by clicking on mailto link (#4583) +- Fix list reload after sending message in another window (#4576) +- Fix so address format errors are ignored when saving a draft (#4594) +- Fix incorrect label translation in return receipt (#4598) +- Fix security issue in delete-response action - allow only ajax request +- Fix Delete button state after deleting identity/response (#4603) +- Fix bug where contacts with no email address were listed on compose addressbook (#4602) +- Fix images import from various vCard formats (#4604) +- Fix sorting messages by size on servers without SORT capability (#4608) + +RELEASE 1.0.1 +------------- +- Support 'error' and 'body_file' return attribs in 'message_before_send' hook (#4467) +- Apply user-specific replacements to group's base_dn property (#4512) +- Fix missing email address when importing contacts from outlook csv (#4535) +- Fix bug where "With attachment" option in search filter wasn't selected after return from mail view (#4508) +- Fix "washing" of unicoded style attributes (#4510) +- Fix unintentional redirect from compose page in Webkit browsers (#4516) +- Fix messages index cache update under some conditions (e.g. proxy) (#4505) +- Fix lack of translation of special folders in some configurations (#4520) +- Fix XSS issue in plain text spellchecker (#4524) +- Fix invalid page title for some folders (1489804) +- Fix redundant alert message on over-size uploads (#4528) +- Fix next message display after removing a message (#4521) +- Fix missing Mail-Followup-To header in sent mail (#4534) +- Fix error when spell-checking an empty text (#4536) +- Avoid popupmenus being closed when scrollbar is clicked (#4537) +- Add proxy_whitelist configuration option (#4496) +- Fix identities_level=4 handling in new_user_dialog plugin (#4540) +- Fix various db_prefix issues (#4539) +- Fix too small length of users.preferences column data type on MySQL +- Fix redundant warning when switching from html to text in empty editor (#4530) +- Fix invalid host validation on login (#4541) +- Fix IMAP connection test in installer so it is aware of imap_auth_type (#4502) + +RELEASE 1.0.0 +------------- +- Added toolbar button to move message in message view +- Fix style of disabled protocol handler link on IE (#4460) +- Fix message import dialog when no file is selected (#4488) +- Fix opening compose screen in new window after saving as draft (#4479) +- Fix directories check in Installer on Windows (#4462) +- Fix issue when default_addressbook option is set to integer value (#4379) +- Fix Opera > 15 detection (#4455) +- Fix security issue in DomainFactory driver of Password plugin +- Fix invalid X-Draft-Info on forwarded message draft (#4464) +- Fix regression in handling of 'attachments' result in message_compose hook (#4474) +- Fix issue where msgexport.sh printed the message to STDOUT instead of a file (#4476) +- Fix fatal error in database_attachments plugin under some conditions (#4495) + +RELEASE 1.0-rc +-------------- +- Small CSS fix with message notice boxes in Larry skin (#4429) +- Include groups in contacts search on mail compose (#4186) +- Add mime-type mapping for .7z files (#4436) +- Invoke update scripts with php to circumvent execution restrictions (#4330) +- Fix drag & drop message/contact moving on touch device (#4395) +- Fix canned responses in HTML mode (#4446) +- Check/create default folders on every login not only the first (#4391) +- Update to jQuery-1.11.0 and jQuery-UI-1.9.2 +- Support SMTP socket context options via new config option 'smtp_conn_options' +- Fix compatibility with PHP 5.2 in html.php file (#4438) +- Remove expand/collapse with plus/minus keys (on numeric keypad) (#4437) +- Fix issue where filesystem path was added to all-attachments (zip) file (#4433) +- Fix case-sensitivity of email addresses handling on compose (#1899) +- Don't alter Message-ID of a draft when sending (#4381) +- Fix issue where deprecated syntax for HTML lists was not handled properly (#3975) +- Display different icons when Trash folder is empty or full (#2108) +- Remember last position of more headers switch (#3660) +- Fix so message flags modified by another client are applied on the list on refresh (#1639) +- Fix broken text/* attachments when forwarding/editing a message (#4393) +- Improved minified files handling, added css minification (#3041) +- Fix handling of X-Forwarded-For header with multiple addresses (#4424) +- Fix border issue on folders list in classic skin (#4419) +- Implemented menu actions to copy/move messages, added folder-selector widget (#863) +- Fix security rules in .htaccess preventing access to base URL without the ending slash (#4422) +- Fix regression where only first new folder was placed in correct place on the list (#4418) +- Fix issue where children of selected and collapsed thread were skipped on various actions (#4410) +- Fix issue where groups were not deleted when "Replace entire addressbook" option on contacts import was used (#4388) +- Fix unreliable mimetype tests in Installer (#4408) +- Fix performance of listing writeable folders (#4406) + +RELEASE 1.0-beta +---------------- +- Fix handling of invalid closing tags in HTML messages (#4403) +- Set real content-type for file downloads (#4400) +- Update TinyMCE to version 3.5.10 (#4401) +- Fix keyboard navigation in list widgets (#4367) +- Allow plugins to grab the reference of opened windows (#4383) +- Larry skin: Improved status message display for better visibility (#4115) +- Fix Internet Explorer 11 detection (#4397) +- Fix date column width to fit the widest possible date format (#4354) +- Move certain user preference options to a collapsed "advanced" block (#4015) +- Add file type icons for Powerpoint and Open Office presentations (#4269) +- Fix operations on folders with trailing spaces in name (#4387) +- Improve identity selection based on From: header (#4360) +- Fix issue where mails with inline images of the same name contained only the first image multiple times (#4378) +- Use left/right arrow keys to collapse/expand thread and spacebar to select a row, change Ctrl key behavior (#4367) +- Fix an issue where using arrow keys to go up a list can result in selected message being under headers (#4375) +- Fix an issue where Home/End keys don't focus list row properly, don't scrollTo properly (#4370) +- Add an option to disable smart Reply-List behaviour - reply_all_mode (#3953) +- Fix an issue where pressing minus key on contacts list was hiding list records (#4368) +- Fix an issue where shift + arrow-up key wasn't selecting all messages in collapsed thread (#4371) +- Added icon for priority column in messages list header (#4275) +- New feature "Canned Responses" to save and recall boilerplate text snippets +- Fix HTML part detection when encapsulated inside multipart/signed (#4357) +- Add spellchecker backend for the After the Deadline service +- Replace markdown-style [1] link indexes in plain text email bodies +- Improved mailto: link arguments handling (#4351) +- Use DOMDocument LIBXML_PARSEHUGE and LIBXML_COMPACT options if possible (#4316) +- Support HTTP_HOST, SERVER_NAME and SERVER_ADDR values in include_host_config feature +- Make default font size for HTML messages configurable (request #118) +- Fix XSS issue in addressbook group name field [CVE-2013-5646] (#4337) +- After message is sent refresh messages list of replied message folder (#4282) +- Add option force specified domain in user login - username_domain_forced (#4290) +- Add option to import Vcards with group assignments +- Save groups membership in Vcard export (#3801) +- Workaround broken PHP function timezone_name_from_abbr (#4289) +- Make cached message size limit configurable - messages_cache_threshold (#4326) +- Log also failed logins to userlogins log +- Add temp_dir_ttl configuration option (#4318) +- Allow setting INBOX as Sent folder (#4264) +- Fix replacement variables in user-specific base_dn in some LDAP requests (#4299) +- Fix image scaling issues when image has only one dimension smaller than the limit (#4296) +- Fix issue where uploaded photo was lost when contact form did not validate (#4296) +- Move identity selection based on non-standard headers into (new) identity_select plugin (#3835) +- Fix downloading binary files with (wrong) text/* content-type (#4292) +- Respect HTTP_X_FORWARDED_FOR and HTTP_X_REAL_IP variables for session IP check +- Simplified configuration by merging it into one file + defaults (#3156) +- Make message list header stay on top when scrolling (#353) +- Add support for 'enchant' spellcheck engine +- Check filetype detection in installer and update script (#4252) +- Fix folder names truncation in Classic skin (#4265) +- Make possible to disable some (broken) IMAP extensions with imap_disable_caps option (#4245) +- Contacts drag-n-drop default action is to move contacts (#3962) +- Added possibility to choose to move or copy contacts from drag-n-drop menu (#3962) +- Fix Close link and remove About link on error pages (#4201) +- Improved/unified attachment preview screen, added print button +- Fix lack of space between searchfiler and quicksearchbar in Larry skin (#4233) +- Cache LDAP's user_specific search and use vlv for better performance (#4247) +- LDAP: auto-detect and use VLV indices for all search operations +- LDAP: additional group configuration options for address books +- LDAP: separated address book implementation from a generic LDAP wrapper class +- Allow address books to browse a multi-level group hierarchy in the contacts list +- Fix session issues when local and database time differs (#2401) +- Fix thread cache syncronization/validation (#4150) +- Added feature to import messages to the currently selected folder +- Add option show_real_foldernames to disable localization of special folders +- Fix database cache expunge issues (#4229) +- Fix date format issues on MS SQL Server (#4078) +- Add imap_cache_ttl option to configure TTL of imap_cache +- Make LDAP cache engine configurable via ldap_cache and ldap_cache_ttl options +- Fix "duplicate entry" errors on inserts to imap cache tables (#4228) +- Improved handling of Reply-To/Bcc addresses of identity in compose form (#4142) +- Added user preference to open all popups as standard windows +- Implemented shared cache (rcube_cache_shared) +- Change Reply-All button label/title when mailing list is detected (#4092) +- Fix SMTP connection using IPv6 address in smtp_server option (#4147) +- Added attachment_reminder plugin +- Make PHP code eval() free, use create_function() +- Add option to display email address together with a name in mail preview (#3952) +- Support CSV import from Atmail (#4161) +- Add db_prefix configuration option in place of db_table_*/db_sequence_* options +- Make possible to use db_prefix for schema initialization in Installer (#4175) +- Fix updatedb.sh script so it recognizes also table prefix for external DDL files +- Fix parsing invalid date string (#4155) +- Add "with attachment" option to messages list filter (#1795) +- Call resize handler in intervals to prevent lags and double onresize calls in Chrome (#4137) +- Add rel="noreferrer" for links in displayed messages (#4976) +- Add ability to toggle between HTML and text while viewing a message (#3005) +- Remove "HTML message" from attachments list while viewing a message in text mode (#3005) +- Support IMAP MOVE extension [RFC 6851] +- Add attachment menu with Open and Download options (#4116) +- Display user-friendly message on IMAP "over quota" errors (#914) +- Extended archive plugin with user-configurable options to store messages into subfolders +- Fix export of selected contacts from search result (#4070) +- Feature to export only selected contacts from addressbook (by Phil Weir) + +RELEASE 0.9.5 +------------- +- Fix failing vCard import when email address field contains spaces (#4363) +- Fix default spell-check configuration after Google suspended their spell service +- Fix vulnerability in handling _session argument of utils/save-prefs [CVE-2013-6172] (#4362) +- Fix iframe onload for upload errors handling (#4361) +- Fix address matching in Return-Path header on identity selection (#4358) +- Fix text wrapping issue with long unwrappable lines (#4356) +- Fixed issues where HTML comments inside style tag would hang Internet Explorer +- Hide Delivery Status Notification option when smtp_server is unset (#4339) +- Display full attachment name using title attribute when name is too long to display (#4328) +- Fix attachment icon issue when rare font/language is used (#4334) +- Fix expanded thread root message styling after refreshing messages list (#4335) +- Fix issue where From address was removed from Cc and Bcc fields when editing a draft (#4327) +- Fix error_reporting directive check (#4331) +- Fix de_DE localization of "About" label in Help plugin (#4333) + +RELEASE 0.9.4 +------------- +- Make identities matching case insensitive (#1881) +- Fix issue where too big message data was stored in cache causing sql errors (#4325) +- Fix iframe scrollbars on webkit desktop browsers (#4319) +- Fix issue where legacy config was overriden by default config (#4305) +- Fix newmail_notifier issue where favicon wasn't changed back to default (#4324) +- Fix setting of Junk and NonJunk flags by markasjunk plugin (#4303) +- Fix lack of Reply-To address in header of forwarded message body (#4314) +- Fix bugs when invoking contact creation form when read-only addressbook is selected (#4313) +- Fix identity selection on reply (#4308) +- Fix so additional headers are added to all messages sent (#4302) +- Fix display issue after moving folder in Folder Manager (#4310) +- Fix handling of non-default date formats (#4311) +- Fix unquoted path in PREG expression on Windows (#4307) +- Fix wrong close tag in /template/mail.html (#4312) + +RELEASE 0.9.3 +------------- +- Fix setting refresh_interval to "Never" in Preferences (#4304) +- Fixed iframe scrolling on touch devices +- Optimized message list for touch devices +- Fix purge action in folder manager (#4300) +- Fix base URL resolving on attribute values with no quotes (#4297) +- Fix wrong handling of links with '|' character (#4298) +- Fix colorspace issue on image conversion using ImageMagick (#4294) +- Fix XSS vulnerability when editing a message "as new" or draft [CVE-2013-5645] (#4283) +- Fix XSS vulnerability when saving HTML signatures [CVE-2013-5645] (#4283) +- Fix rewrite rule in .htaccess (#4278) +- Fix detecting Turkish language in ISO-8859-9 encoding (#4284) +- Fix identity-selection using Return-Path headers (#4279) +- Fix parsing of links with ... in URL (#4251) +- Fix compose priority selector when opening in new window (#4286) +- Fix bug where signature wasn't changed on identity selection when editing a draft (#4272) +- Fix IMAP SETMETADATA parameters quoting (#4274) +- Fix "could not load message" error on valid empty message body (#4271) +- Fix handling of message/rfc822 attachments on message forward and edit (#4262) +- Fix parsing of square bracket characters in IMAP response strings (#4267) +- Don't clear References and in-Reply-To when a message is "edited as new" (#4263) +- Fix messages list sorting with THREAD=REFS +- Remove deprecated (in PHP 5.5) PREG /e modifier usage (#4239) +- Fix empty messages list when register_globals is enabled (#4232) +- Fix so valid and set date.timezone is not required by installer checks (#4242) +- Canonize boolean ini_get() results (#4249) +- Fix so install do not fail when one of DB driver checks fails but other drivers exist (#4240) +- Fix so exported vCard specifies encoding in v3-compatible format (#4244) + +RELEASE 0.9.2 +------------- +- Fix image thumbnails display in print mode (#4220) +- Fix height of message headers block (#4200) +- Fix timeout issue on drag&drop uploads (#4238) +- Fix default sorting of threaded list when THREAD=REFS isn't supported +- Fix list mode switch to 'List' after saving list settings in Larry skin (#4236) +- Fix error when there's no writeable addressbook source (#4235) +- Fix zipdownload plugin issue with filenames charset (#4231) +- Fix so non-inline images aren't skipped on forward (#4230) +- Fix "null" instead of empty string on messages list in IE10 (#4227) +- Fix legacy options handling +- Fix so bounces addresses in Sender headers are skipped on Reply-All (#4140) +- Fix bug where serialized strings were truncated in PDO::quote() (#4226) +- Fix displaying messages with invalid self-closing HTML tags (#4223) +- Fix PHP warning when responding to a message with many Return-Path headers (#4222) +- Fix unintentional compose window resize (#4206) +- Fix performance regression in text wrapping function (#4219) +- Fix connection to posgtres db using unix socket (#4218) +- Fix handling of comma when adding contact from contacts widget (#4199) +- Fix bug where a message was opened in both preview pane and new window on double-click (#4212) +- Fix fatal error when xdebug.max_nesting_level was exceeded in rcube_washtml (#4202) +- Fix PHP warning in html_table::set_row_attribs() in PHP 5.4 (#4194) +- Fix invalid option selected in default_font selector when font is unset (#4204) +- Fix displaying contact with ID divisible by 100 in sql addressbook (#4211) +- Fix browser warnings on PDF plugin detection (#4209) +- Fix fatal error when parsing UUencoded messages (#4210) + +RELEASE 0.9.1 +------------- +- Better German labels for from/to to avoid conflicts with 'sender' (#4188) +- Fix problem where security warning was displayed for valid images with image/jpg type (#4196) +- Fix handling of invalid email addresses in headers (#4193) +- Fix IMAP connection issue with default_socket_timeout < 0 and imap_timeout < 0 (#4191) +- Fix various PHP code bugs found using static analysis (#4190) +- Fix backslash character handling on vCard import (#4189) +- Fix csv import from Thunderbird with French localization (#4170) +- Fix messages list focus issue in Opera and Webkit (#4169) +- Fix Reply-To header handling in Reply-All action (#4157) +- Fix so Sender: address is added to Cc: field on reply to all (#4140) +- Fix so addressbook_search_mode works also for group search (#4183) +- Fix removal of a contact from a group in LDAP addressbook (#4185) +- Inlcude SQL query in the log on SQL error (#4172) +- Fix handling untagged responses in IMAP FETCH - "could not load message" error (#4180) +- Fix very small window size in Chrome (#4087) +- Fix list page reset when viewing a message in Larry skin (#4182) +- Fix min_refresh_interval handling on preferences save (#4179) +- Fix PDF support detection for Firefox PDF.js (#4113) +- Fix possible collision in generated thumbnail cache key (#4177) +- Fix exit code on bootsrap errors in CLI mode (#4160) +- Fix error handling in CLI mode, use STDERR and non-empty exit code (#5161) +- Fix error when using check_referer=true +- Fix incorrect handling of some specific links (#4171) +- Fix incorrect handling of leading spaces in text wrapping +- Fix unintentional messages list jumps on click in Internet Explorer (#4167) +- Fix list of required configuration options (#4166) +- Fix DB error when creating a new contact and a group is selected (#4164) +- Fix handling of deprecated boolean value of reply_mode option (#4165) + +RELEASE 0.9.0 +------------- +- Fix display of HTML entities in protected folder name (#4159) +- Set minimal permissions to temp files (#4131) +- Improve content check for embedded images without filename (#4151) +- Fix handling of invalid characters in message headers and output (#4153) +- Fix selecting collapsed rows on select-all (#4156) +- Avoid race-conditions with concurrent attachment uploads (#3739) +- Fix possible header duplicates when using additional headers (#4154) +- Fix session issues with use_https=true (#4125) +- Fix blockquote width in sent mail (#4152) +- Fix keyboard events on list widgets in Internet Explorer (#4148) + +RELEASE 0.9-rc2 +--------------- +- Fix security issue in save-pref command +- Remove sig_above configuration option, use reply_mode only (#4135) +- Refresh current folder in opener window after draft save or message sent (#4132) +- Fix saving draft just after entering compose window (#4141) +- Fix javascript error in IE9 when loading form with placeholders into an iframe (#4138) +- Fix handling of some conditional comment tags in HTML message (#4136) +- Fix so forward as attachment works if additional attachment is added by message_compose hook (#4134) +- Better handling of session errors in ajax requests (#4105) +- Fix HTML part detection for some specific message structures (#4130) +- Don't show fake address - phishing prevention (#4120) +- Fix forward as attachment bug with editormode != 1 (#4129) +- Fix LIMIT/OFFSET queries handling on MS SQL Server (#4123) +- Fix so task name can really contain all from a-z0-9_- characters (#4095) +- Fix javascript errors when working in a page opened with taget="_blank" +- Mention SQLite database format change in UPGRADING file (#4122) +- Increase maxlength to 254 chars for email input fields in addressbook (#4126) +- Fix thumbnail size when GD extension is used for image resize (#4124) +- Display notice that message is encrypted also for application/pkcs7-mime messages (#3815) + +RELEASE 0.9-rc +-------------- +- Fix plain text spellchecker incorrect highlighting in non-ASCII text (#4114) +- Add workaround for invalid message charset detection by IMAP servers (#4112) +- Fix NUL characters in content-type of ms-tnef attachment (#4108) +- Fix regression in handling LDAP contact identifiers (#4104) +- Updated translations from Transifex +- Fix buggy error template in a frame (#4092) +- Add addressbook widget on compose page in classic skin +- Add search box to compose address book widget (#3710) +- Fix login in case when default_host is an array with one element (#4085) +- Use LDAP fallback hosts on connect + bind instead of ldap_connect() only. +- Add config option for LDAP bind timeout (sets LDAP_OPT_NETWORK_TIMEOUT option) +- Submit Addressbook advanced search form with Enter key (#3843) +- Also block remote images in HTML part view (#4013) +- Improved database schema upgrade procedure, added updatedb.sh script +- Force autocommit mode in mysql database driver (#4068) + +RELEASE 0.9-beta +---------------- +- Fix searching by date in address book (#4058) +- Improve charset detection by prioritizing charset according to user language (#2032) +- Fix handling of escaped separator in vCard file (#4064) +- Add option to use envelope From address for MDN responses (#4052) +- Add possibility to search in message body only (#3977) +- Support "multipart/relative" as an alias for "multipart/related" type (#4057) +- Display PGP/MIME signature attachments as "Digital Signature" (#3845) +- Workaround UW-IMAP bug where hierarchy separator is added to the shared folder name (#4051) +- Fix version comparisons with -stable suffix (#4050) +- Add unsupported alternative parts to attachments list (#4046) +- Add Compose button on message view page (#3959) +- Display 'Sender' header in message preview +- Plugin API: Added message_before_send hook +- Fix contact copy/add-to-group operations on search result (#4042) +- Use matching identity in MDN response (#4043) +- Fix handling of signatures on draft edit (#3996) +- Fix so compacting of non-empty folder is possible also when messages list is empty (#4039) +- Allow forwarding of multiple emails (#2941) +- Fix big memory consumption of DB layer (#4037) +- Fix broken message/part bodies when FETCH response contains more untagged lines (#4020) +- Fix empty email on identities list after identity update (#4018) +- Add new identities_level: (4) one identity with possibility to edit only signature +- Use Delivered-To and Envelope-To headers for identity selection (#4024, #3835) +- Fix XSS vulnerability using Flash files (#4014) +- Always save drafts with format=flowed in order to keep original line wraps (#3997) +- Select default_addressbook on the list in Address Book (#3624) +- Fix so mobile phone has TYPE=CELL in exported vCard (#4004) +- Support contacts import from CSV file (#2605) +- Improved keep-alive action. Now the interval is based on session_lifetime (#3799) +- Added cross-task 'refresh' request for system state updates (#3799) +- Renamed config options: keep_alive to refresh_interval, min_keep_alive to min_refresh_interval +- Fix handling of text/enriched content on message reply/forward/edit +- Option to display attached images as thumbnails below message body +- Upgraded to jQuery 1.8.3 and jQuery UI 1.9.1 +- Add config option to automatically generate LDAP attributes for new entries +- Add user settings to open message view and compose form in new windows (#1886) +- Better client-side timezone detection using the jsTimezoneDetect library (#3947) +- Add option to disable saving sent mail in Sent folder - no_save_sent_messages (#3923) +- Fix handling dont_override with message_sort_col and message_sort_order settings (#3970) +- Fix handling of URLs with asterisk characters (#3969) +- Remove automatic to-lowercase conversion of usernames (#3941) +- Plugin API: Add 'email_list' argument for identities data in user_create hook +- Integrated zipdownload plugin to download all attachments (#617) +- Fix HTML special characters handling in message list/header display (#3812) +- List related text/html part as attachment in plain text mode (#3918) +- Use IMAP BINARY (RFC3516) extension to fetch message/part bodies +- Fix folder creation under public namespace root (#3910) +- Fix so "Edit as new" on draft creates a new message (#3924) +- Fix invalid error message on deleting mail from read only folder (#3929) +- Replace data URIs of images (pasted in HTML editor) with inline attachments (#3795) +- Remove (too big) min-width on mail screen +- Added template object 'frame' +- Add option to enable HTML editor on forwarding (#3807) +- Add option to not include original message on reply, rename option top_posting to reply_mode (#1615) +- Added session_path config option and unified cookies settings in javascript +- Added "Undeleted" option to messages list filter +- Rewritten test scripts for PHPUnit +- Add new DB abstraction layer based on PHP PDO, supporting SQLite3 (#3668) +- Removed PEAR::MDB2 package +- Removed users.alias column, added option ('user_aliases') + to use email address from identities as username (#3851) +- Removed redundant cache.cache_id column (#3817) +- Fix order of attachments in sent mail (#3740) +- Fix Shift + delete button does not permanently delete messages (#3598) +- Add Content-Length for attachments where possible (#1880) +- Fix attachment sizes in message print page and attachment preview page (#3805) +- Add mail attachments using drag & drop on HTML5 enabled browsers +- Add workaround for invalid BODYSTRUCTURE response - parse message with Mail_mimeDecode package (#1966) +- Display Tiff as Jpeg in browsers without Tiff support (#3757) +- Don't display Pdf/Tiff/Flash attachments inline without browser support (#3757, #3394) +- Add is_escaped attribute for html_select and html_textarea (#3782) +- Fix issue where draft auto-save wasn't executed after some inactivity time +- Add vCard import from multiple files at once (#3458) +- Roundcube Framework: + Add possibility to replace IMAP driver with custom class + Add IMAP auto-connection feature, improving performance with caching enabled + Replace imap_init hook with storage_init (with additional 'driver' argument) + Improved performance by caching IMAP server's capabilities in session + Unified global functions naming (rcube_ prefix) + Better classes separation + Framework files moved to lib/Roundcube + +RELEASE 0.8.5 +------------- +- Fix #countcontrols issue in IE<=8 when text is very long (#4060) +- Fix unwanted horizontal scrollbar in message preview header (#4044) +- Add workaround for IE<=8 bug where Content-Disposition:inline was ignored (#4028) +- Fix XSS vulnerability in vbscript: and data:text links handling [CVE-2012-6121] (#4033) +- Fix absolute positioning in HTML messages (#4007) +- Fix cache (in)validation after setting \Deleted flag +- Fix keybord events on messages list in opera browser (#4011) +- Fix selection of collapsed thread rows (#3978) +- Fix wrapping of quoted text with format=flowed (#3561) + +RELEASE 0.8.4 +------------- +- Fix regression where unintentional page reload was done after request abort (#3999) +- Fix XSS vulnerability in handling of text/enriched messages (#4000) +- Fix handling of 'media' attribute on linked css (#3989) +- Fix excessive LFs at the end of composed message with top_posting=true (#3995) +- Fix bug where leading blanks were stripped from quoted lines (#3994) + +RELEASE 0.8.3 +------------- +- Fix AREA links handling (#3992) +- Fix possible HTTP DoS on error in keep-alive requests (#3983) +- Fix compatybility with MDB2 2.5.0b4 (#3982) +- Fix a bug where saving a message in INBOX wasn't possible +- Fix HTML part detection in messages with attachments (#3976) +- Fix bug where wrong words were highlighted on spell-before-send check +- Fix scrolling quirk in email preview frame using Opera 12 (#3973) +- Fix displaying of multipart/alternative messages with empty parts (#3961) +- Fix threaded list sorting on PHP < 5.2.9 (#3960) +- Fix Warning: htmlspecialchars(): charset `RCMAIL_CHARSET' not supported warning in Installer (#3958) + +RELEASE 0.8.2 +------------- +- Fix XSS vulnerability from HTTP User-Agent header (#3954) +- Force fonts in compose fields to be all the same (#3926) +- Fix handling vCard entries with TEL;TYPE=CELL (#3949) +- Fix error where session wasn't updated after folder rename/delete (#3928) +- Fix PLAIN authentication for some IMAP servers (#3916) +- Fix encoding vCard file when contains PHOTO;ENCODING=b (#3922) +- Fix focus issue in IE when selecting message row (#3881) +- Add full headers view in message preview window (#3823) +- Fix message display page issues - unified with message preview (#3856, #3895) +- Fix displaying all headers when they contain malformed characters (#3911) +- Fix decoding of HTML messages with UTF-16 charset specified (#3902) +- Fix quota capability detection so it can be overwritten by a plugin (#3903) +- Fix identity selection on reply (#3516) +- Fix Larry's messages list filter in IE (#3890) +- Fix more IE issues by disabling Compat. mode with X-UA-Compatible meta tag (#3886) +- Fix setting locales under Solaris - use additional .UTF-8 suffix (#3887) +- Fix email address validation for addresses with IP address in domain part +- Fix Larry skin issues in IE7 compat. mode (#3879) +- Fix so subscribed non-existing/non-accessible shared folder can be unsubscribed + +RELEASE 0.8.1 +------------- +- Fix bug where domain name was converted to lower-case even with login_lc=false (#3859) +- Fix lower-casing email address on replies (#3863) +- Fix line separator in exported messages (#3866) +- Fix XSS issue where plain signatures wasn't secured in HTML mode [CVE-2012-4668] (#3875) +- Fix XSS issue where href="javascript:" wasn't secured [CVE-2012-3508] (#3875) +- Fix impossible to create message with empty plain text part (#3873) +- Fix stripped apostrophes when replying in plain text to HTML message (#3869) +- Fix inactive Save search option after advanced search (#3870) +- Fix Remove from group option is active for contact search result (#3871) +- Disable autocapitalization in login form on iPad/iPhone (#3872) +- Fix focus on the list when list row is clicked (#3865) +- Added separate From and To columns apart from smart From/To column (#2970) +- Fix fallback to Larry skin when configured skin isn't available (#3857) +- Fix (workaround) delete operations with some versions of memcache (#3858) +- Fix (disable) request validation for spell and spell_html actions + +RELEASE 0.8.0 +------------- +- Don't show product version on login screen (can be enabled by config) +- Renamed old default skin to 'classic'. Larry is the new default skin. +- Support connections to memcached socket file (#3848) +- Enable TinyMCE inlinepopups plugin +- Update to TinyMCE 3.5.6 +- Correctly escape localized labels in javascript variable (#3842) +- Update Net_SMTP/Auth_SASL packages to fix Digest-MD5/Cram-MD5 authentication (#3846) +- Don't add attachments content into reply/forward/draft message body (#3837) +- Fix 'no connection' errors on page unloads (#3832) +- Plugin API: Add 'unauthenticated' hook (#3545) +- Show explicit error message when provided hostname is invalid (#3834) +- Fix wrong compose screen elements focus in IE9 (#3826) +- Fix fatal error when date.timezone isn't set (#3831) +- Update to TinyMCE 3.5.4.1 +- Better icons with distinct shapes for priority columns (#3706) +- Show dedicated icon for multipart/report messages (#3813) +- Properly hide text of icon links/buttons (#3820) +- Fix handling of unitless CSS size values in HTML message (#3821) +- Fix removing contact photo using LDAP addressbook (#3737) +- Fix storing X-ANNIVERSARY date in vCard format (#3816) +- Update to Mail_Mime-1.8.5 (#3810) +- Fix XSS vulnerability in message subject handling using Larry skin [CVE-2012-3507] (#3809) +- Fix handling of links with various URI schemes e.g. "skype:" (#3521) +- Fix handling of links inside PRE elements on html to text conversion +- Fix indexing of links on html to text conversion +- Decode header value in rcube_mime::get() by default (#3803) +- Fix errors with enabled PHP magic_quotes_sybase option (#3798) +- Fix SQL query for contacts listing on MS SQL Server (#3797) +- Fix window.resize handler on IE8 and Opera (#3758) +- Don't let error message popups cover the login form (#3794) +- Update to TinyMCE 3.5.2 +- Don't show errors when moving contacts into groups they are already in (#3788) +- Make folders with unread messages in subfolders bold again (#2892) +- Abbreviate long attachment file names with ellipsis (#3793) +- Fix html2text conversion of strong|b|a|th|h tags when used in upper case +- Add listcontrols template container in Larry skin (#3792) +- Fix host autoselection when default_host is an array (#3790) +- Move messages forwarding mode setting into Preferences +- Fix HTML entities handling in HTML editor (#3780) +- Fix listing shared folders on Courier IMAP (#3767) + +RELEASE 0.8-rc +-------------- +- Added new translations in Belarusian, Interlingua and Malayalam +- Flipped compose options arrow (#3772) +- Fix handling of large uuencode attachments (#3771) +- Fix handling of "usemap" attribute (#3770) +- Fix handling of some HTML tags e.g. IMG (#3769) +- Use similar language as a fallback for plugin localization (#3726) +- Fix issue where signature wasn't re-added on draft compose (#3659) +- Update to TinyMCE 3.5 (#3762) +- Fixed multi-threaded autocompletion when number of threads > number of sources +- Allow to configure the number of values allowed for each LDAP attribute +- Support for serialized LDAP address values (usually delimited with a $) +- Less restrictive session auth checks, repeat keep-alive requests on failure (#3755) +- Fix redirect to mail/compose on re-login (#3585) +- Add IE8 hack for messages list issue (#3317) +- Fix handling errors on draft auto-save +- Fix importing vCard photo with ENCODING param specified (#3746) +- Support mutliple name/email pairs for Bcc and Reply-To identity settings (#3752) +- Set flexible width to login form fields (#3735) +- Fix re-draw bug on list columns change in IE8 (#3318) +- Allow mass-removal of addresses from a group (#3259) +- Fix removing all contacts on import to LDAP addressbook +- Fix so "Back" from compose/show doesn't reset search request (#3594) +- Add option to delete messages instead of moving to Trash when in Junk folder (#2805) +- Fix invisible cursor when replying to a html message (#3100) +- Reset IP stored in session when destroying session data (#3485) +- Fix bug where memory_limit = -1 wasn't handled properly +- Support LDAP RFC2256's country object class read/write (#3535) +- Upgraded to jQuery 1.7.2 +- Image resize with GD extension (#3712) +- Fix lack of warning when switching task in compose window (#3725) +- Fix bug where it wasn't possible to enter ( or & characters in autocomplete fields +- Request all needed fields from address book backends (#3721) +- Unified (single) spellchecker button +- Scroll long lists on drag&drop (#2249) +- Copy all skins in installto script (#3705) + +RELEASE 0.8-beta +---------------- +- Upgraded to jQuery 1.7.1 (#3673) and jQuery UI 1.8.18 +- Add Russian to the spellchecker languages list (#3542) +- Remember custom skin selection after logout (#3688) +- Make sure About tab is always the last tab (#3609) +- Fix issue with folder creation under INBOX. namespace (#3683) +- Added mailto: protocol handler registration link in User Preferences (#2729) +- Handle identity details box with an iframe (#3066) +- Fix issue where some text from original message was missing on reply (#3675) +- Fix autoselect_host() for login (#3639) +- Changed license to GNU GPLv3+ with exceptions for skins & plugins +- Added address book widget on compose screen +- Use proper timezones from PHP's internal timezonedb (#1973) +- Add separate pagesize setting for mail messages and contacts (#3617) +- Deprecate $DB, $USER, $IMAP global variables, Use $RCMAIL instead +- Add option to set default font for HTML message (#894) +- Fix issues with big memory allocation of IMAP results +- Prevent from memory_limit exceeding when trying to parse big messages bodies (#3164) +- Add possibility to add SASL mechanisms for SMTP in smtp_connect hook (#3399) +- Mark (with different color) folders with recent messages (#2479) +- Added About tab in Settings +- TinyMCE updated to 3.4.6 + +RELEASE 0.7.2 +------------- +- Fix encoding of attachment with comma in name (#3717) +- Fix handling of % character in IMAP protocol (#3711) +- Fix duplicate names handling in addressbook searches (#3704) +- Fix displaying of HTML messages from Disqus (#3702) +- Disable E_STRICT warnings on PHP 5.4 +- Prevent from folder selection on virtual folder collapsing (#3681) +- Fix automatic unsubscribe of non-existent folders +- Fix double-quotes handling in recipient names +- User configurable setting how to display contact names in list +- Make contacts list sorting configurable for the admin/user +- Fix parse errors in DDL files for MS SQL Server +- Revert SORT=DISPLAY support, removed by mistake (#3664) +- Add lost translation label in de_DE (#3654) +- Fix drafts update issues when edited from preview pane (#3653) +- Fix wrong variable name in rcube_ldap.php (#3643) +- Make mime type detection based on filename extension to be case-insensitive +- Fix failure on MySQL database upgrade from 0.7 - text column can't have default value (#3642) + + +RELEASE 0.7.1 +------------- +- Fix bug in handling of base href and inline content (#3634) +- Fix SQL Error when saving a contact with many email addresses (#3630) +- Fix strict email address searching if contact has more than one address +- Remove duplicated 'organization' label (#3631) +- Fix so editor selector is hidden when 'htmleditor' is listed in 'dont_override' +- Fix wrong (long) label usage (#3627) +- Fix handling of INBOX's subfolders in special folders config (#3623) +- Add ifModule statement for setting Options -Indexes in .htaccess file (#3620) +- Fix crashes with eAccelerator (#3608) +- Fix searching on IMAP servers without CHARSET specifier support (#3619) +- Fix expanding folders during drag&drop (#3611) +- Fix wrong postgres sequence name in upgrade from 0.6 +- Fix broken CREATE INDEX queries in SQLite DDL files (#3607) + +RELEASE 0.7 +----------- +- Make Roundcube render the Email Standards Project Acid Test correctly +- Replace prompt() with jQuery UI dialog (#1603) +- Fix navigation in messages search results +- Improved handling of some malformed values encoded with quoted-printable (#3590) +- Add possibility to do LDAP bind before searching for bind DN +- Fix handling of empty tags in HTML messages (#3584) +- Add content filter for embedded attachments to protect from XSS on IE [CVE-2012-1253] (#3372) +- Use strpos() instead of strstr() when possible (#3581) +- Fix handling HTML entities when converting HTML to text (#3582) +- Fix fit_string_to_size() renders browser and ui unresponsive (#3577) +- Fix handling of invalid characters in request (#3536) +- Fix merging some configuration options in update.sh script (#2181) +- Fix so TEXT key will remove all HEADER keys in IMAP SEARCH (#3578) +- Fix handling contact photo url with https:// prefix (#3575) +- Fix possible infinite redirect on attachment preview (#3572) +- Improved clickjacking protection for browsers which don't support X-Frame-Options headers +- Fixed bug where similar folder names were highlighted wrong (#3345) +- Fixed bug in handling link with '!' character in it (#3569) +- Fixed bug where session ID's length was limited to 40 characters (#3570) +- TinyMCE security issue: removed moxieplayer (embedding flv and mp4 is not supported anymore) + +RELEASE 0.7-beta +---------------- +- Fix handling of HTML form elements in messages (#1604) +- Fix regression in setting recipient to self when replying to a Sent message (#3101) +- Fix listing of folders in hidden namespaces (#2895) +- Don't consider \Noselect flag when building folders tree (#3448) +- Fix sorting autocomplete results (#3504) +- Add option to set session name (#2630) +- Add option to skip alternative email addresses in autocompletion +- Fix inconsistent behaviour of Compose button in Drafts folder, add Edit button for drafts +- Fix problem with parsing HTML message body with non-unicode characters (#3312) +- Add option to define matching method for addressbook search (#2720, #3378) +- Make email recipients separator configurable +- Fix so folders with \Noinferiors attribute aren't listed in parent selector +- Fix handling of curly brackets in URLs (#3555) +- Fix handling of dates (birthday/anniversary) in contact data (#3552) +- Fix error on opening searched LDAP contact (#3550) +- Fix redundant line break in flowed format (#3551) +- Fix IDN address validation issue (#3544) +- Fix JS error when dst_active checkbox doesn't exist (#3540) +- Autocomplete LDAP records when adding contacts from mail (#3498) +- Plugin API: added 'ready' hook (#3492) +- Ignore DSN request when it isn't supported by SMTP server (#3300) +- Make sure LDAP name fields aren't arrays (#3523) +- Fixed imap test to non-default port when using ssl (#3532) +- Force all files to be overwritten when updating (#3531) +- Fix issue where it wasn't possible to change list view mode in folder manager for INBOX (#3522) +- Fix namespace handling in special folders settings (#3527) +- Disable time limit for CLI scripts (#3524) +- Fix misleading display when chaning editor type (#3519) +- Add loading indicator on contact delete +- Fix bug where after delete message rows can be added to the list of another folder (#3263) +- Add notice on autocompletion that not all records were displayed +- Add option 'searchonly' for LDAP address books +- Add Priority filter to the messages list +- Cache synchronization using QRESYNC/CONDSTORE +- Trigger 'new_messages' hook for all checked folders (#3503) +- Make date/time format user configurable; drop 'date_today' config option +- Fix setting title for truncated subject in IE (#3141) +- Fix displaying multipart/alternative messages with only one part (#3400) +- Rewritten messages caching: + Indexes are stored in a separate table, so there's no need to store all messages in a folder + Added threads data caching + Flags are stored separately, so flag change doesn't cause DELETE+INSERT, just UPDATE +- Improved FETCH response handling +- Improvements in response tokenization method +- Use 'From' and 'To' labels instead of 'Sender' and 'Recipient' +- Fix username case-insensitivity issue in MySQL (#3462) +- Addressbook Saved Searches +- Added spellchecker exceptions dictionary (shared or per-user) +- Added possibility to ignore words containing caps, numbers, symbols (spellcheck_ignore_* options) +- Added 'priority' column on messages list (#2884) +- Localize forwarded message header (#3487) + +RELEASE 0.6 +----------- +- Fix bug where the last identity is used on reply (#3516) +- Fix locked folder rename option on servers supporting RFC2086 only (#3508) +- Fix session race conditions when composing new messages +- Fix encoding of LDAP contacts identifiers (#3501) +- jQuery 1.6.4 +- Fix handling of binary attachments encoded with quoted-printable (#3494) +- Fix text-overflow:ellipsis issues on messages list in FF7 and Webkit (#3490) +- Fix handling of links with IP address +- Fix compacting folder resets message list filter (#3499) + +RELEASE 0.6-rc +---------------- +- Send X-Frame-Options headers to protect from clickjacking (#3079) +- Fallback to mail_domain in LDAP variable replacements; added 'host' to 'user_create' hook arguments (#3464) +- Fixed wrong vCard type parameter mobile (#3496) +- Fixed vCard WORKFAX issue (#3476) +- Add vCard's Profile URL support (#3491) +- jQuery 1.6.3 +- Fix imap_cache setting to values other than 'db' (#3489) +- Fix handling of attachments inside message/rfc822 parts (#3466) +- Make list of mimetypes that open in preview window configurable (#3175) +- Added plugin hook 'message_part_get' for attachment downloads +- Added unique connection identifier to IMAP debug messages +- Fix image type check for contact photo uploads + +RELEASE 0.6-beta +---------------- +- Fixed selecting identity on reply/forward (#3434) +- Add option to hide selected LDAP addressbook on the list +- Add client-side checking of uploaded files size +- Add newlines between organization, department, jobtitle (#3468) +- Recalculate date when replying to a message and localize the cite header (#3212) +- Fix handling of email addresses with quoted local part (#3401) +- Fix EOL character in vCard exports (#3357) +- Added optional "multithreading" autocomplete feature +- Plugin API: Added 'config_get' hook +- Fixed new_user_identity plugin to work with updated rcube_ldap class (#3443) +- Plugin API: added folder_delete and folder_rename hooks +- Added possibility to undo last contact delete operation +- Fix sorting of contact groups after group create (#3258) +- Add optional textual upload progress indicator (#2330) +- Fix parsing URLs containing commas (#3425) +- Added vertical splitter for books/groups list in addressbook (#3389) +- Improved namespace roots handling in folder manager +- Added searching in all addressbook sources +- Added addressbook source selection in contacts import +- Implement LDAPv3 Virtual List View (VLV) for paged results listing +- Use 'address_template' config option when adding a new address block (#3406) +- Added addressbook advanced search +- Add popup with basic fields selection for addressbook search +- Case-insensitive matching in autocompletion (#3398) +- Added option to force spellchecking before sending a message (#1862) +- Fix handling of "<" character in contact data, search fields and folder names (#3349) +- Fix saving "<" character in identity name and organization fields (#3349) +- Added option to specify to which address book add new contacts +- Added plugin hook for keep-alive requests +- Store user preferences in session when write-master is not available and session is stored in memcache, write them later +- Improve performence of folder manager operations +- Fix default_port option handling in Installer when config.inc.php file exists (#3390) +- Removed option focus_on_new_message, added newmail_notifier plugin +- Added general rcube_cache class with Memcache and APC support +- Improved caching performance by skipping writes of unchanged data +- Option enable_caching replaced by imap_cache and messages_cache options +- Fix WORKFAX saving in address book (#3380) +- Add forward-as-attachment feature +- jQuery-1.6.2 (#5158, #3154) +- Improve display name composition when saving contacts (#3153) +- Fix problems with subfolders of INBOX folder on some IMAP servers (#3247) +- Fix handling of folders that doesn't belong to any namespace (#3184) +- Enable multiselection for attachments uploading in capable browsers (#2266) +- Add possibility to change HTML editor configuration by skin +- Fix a bug where selecting too many contacts would produce too large URI request (#3369) +- Improve performance by including files with absolute path (#3337) +- Move folder name truncation to client/skin (#1822) +- Added plugin hook for request token creation +- Replace LDAP vars in group queries (#3329) +- Fix vcard folding with uncode characters (#3353) +- Keep all submitted data if contact form validation fails (#3350) +- Handle uncode strings in rcube_addressbook::normalize_string() (#3351) +- Fix handling of debug_level=4 in ajax requests (#3327) +- Enable TinyMCE's contextmenu (#3062) +- Allow multiple concurrent compose sessions +- New config option for custom logo +- Allow skins to define/override texts with +- Add simple ACL rights/namespace handling in folder manager +- Force IE to send referers (#3306) +- Better display of vcard import results (#1861) +- Improved vcard import +- Interactive update script with improved DB schema check +- Fix problem with contactgroupmembers table creation on MySQL 4.x, add index on contact_id column +- Add LDAP SASL bind and proxy authentication (#2810) +- Replying to a sent message puts the old recipient as the new recipient (#3101) +- Fulltext search over (almost) all data for contacts +- Extend address book with rich contact information + +RELEASE 0.5.4 +------------- +- Fix XSS vulnerability in UI messages [CVE-2011-2937] (#3469) + +RELEASE 0.5.3 +------------- +- Fix identities "reply-to" and "bcc" fields have a bogus value when left empty (#3405) +- Fix issue which cases IMAP disconnection when encrypt() method was used (#3374) +- Fix some CSS issues in Settings for Internet Explorer +- Fixed handling of folder with name "0" in folder selector +- Fix bug where messages were deleted instead moved to trash folder after Shift key was used (#3376) +- Fix relative URLs handling according to a in HTML (#3368) +- Fix handling of top-level domains with more than 5 chars or unicode chars (#3366) +- Fix usage of non-standard HTTP error codes (#3297) +- Fix PHP warning on mistaken in_array() usage (#3375) + +RELEASE 0.5.2 +------------- +- TinyMCE 3.4.2 now compatible with IE9 +- PEAR::Net_SMTP 1.5.2, fixed timeout issue (#3332) +- Fix bug where template name without plugin prefix was used in render_page hook +- Support 'abort' and 'result' response in 'preferences_save' hook, add error handling +- Fix bug where some content would cause hang on html2text conversion (#3348) +- Improve space-stuffing handling in format=flowed messages (#3346) +- Fix bug where some dates would produce SQL error in MySQL (#3342) +- Added workaround for some IMAP server with broken STATUS response (#3344) +- Fix bug where default_charset was not used for text messages (#3328) +- Stateless request tokens. No keep-alive necessary on login page (#3325) +- Force names of unique constraints in PostgreSQL DDL +- Add code for prevention from IMAP connection hangs when server closes socket unexpectedly +- Remove redundant DELETE query (for old session deletion) on login +- Get around unreliable rand() and mt_rand() in session ID generation (#2516) +- Fix some emails are not shown using Cyrus IMAP (#3316) +- Fix handling of mime-encoded words with non-integral number of octets in a word (#3301) +- Fix parsing links with non-printable characters inside (#3305) +- Fixed de_CH Localization bugs (#3279) +- Add variable for 'Today' label in date_today option (#2394) +- Fix dont_override setting does not override existing user preferences (#3205) +- Use only one from IMAP authentication methods to prevent login delays (1487784) +- Support strftime format in date_today option +- Fix SQL query in rcube_user::query() so it uses index on MySQL again +- Removed redundant tags from contact add/edit pages +- Fix CSS error in contact details screen on IE7 (#3281) + +RELEASE 0.5.1 +------------- +- Fix handling of attachments with invalid content type (#3275) +- Add workaround for DBMail's bug http://www.dbmail.org/mantis/view.php?id=881 (#3274) +- Use IMAP's ID extension (RFC2971) to print more info into debug log +- Security: add optional referer check to prevent CSRF in GET requests +- Fix email_dns_check setting not used for identities/contacts (#3251) +- Fix ICANN example addresses doesn't validate (#3253) +- Security: protect login form submission from CSRF [CVE-2011-1491] +- Security: prevent from relaying malicious requests through modcss.inc [CVE-2011-1492] +- Fix handling of non-image attachments in multipart/related messages (#3261) +- Fix IDNA support when IDN/INTL modules are in use (#3253) +- Fix handling of invalid HTML comments in messages (#3269) +- Fix parsing FETCH response for very long headers (#3264) +- Fix add/remove columns in message list when message_sort_order isn't set (#3262) +- Check mime headers before attempt to parse them (#3256) +- Quote header values in show_additional_headers plugin (#3255) +- Fix settings UI on IE 6 (#3246) +- Remove double borders in folder listing (#3236) +- Separate full message headers UI element from headers table (#3238) +- Add part MIME ID to message_part_* hooks (#3241) +- Improve parsing of MS Outlook vCards (#3239) +- Updated PEAR::Net_Socket to 1.0.10 +- Updated PEAR::Net_IDNA2 to 0.1.1 +- Fix handling of comments inside an email address spec. (#3210) +- Show full mail subject as title when hovering a cut subject link (#3141) +- Fix randomly disappearing folders list in IE (#3231) +- Fix list column add/removal in IE (#3230) +- Fix login redirect issues (#3221) +- Require PHP 5.2.1 or greater +- Fix %h/%z variables in username_domain option (#3228) +- Workaround for setting charset in case of malformed bodystructure response (#3227) +- Fix impossible to subscribe to protected folders (#3199) +- Fix setting timezone in Preferences (#3232) + +RELEASE 0.5 +----------- +- Fix double-login/session issue (#3124) +- Wrap HTML parts with and add Doctype declaration (#3119) +- Make rcube_autoload silently skip unknown classes (#3128) +- Fix charset detection in vcards with encoded values (#1934) +- Better CSS cursors for splitters (#2954) +- Show the same message only once (#3186) +- Fix namespaces handling (#3192) +- Add handling of multifolder METADATA/ANNOTATION responses +- Fix handling of INBOX when personal namespace prefix is non-empty (#3200) +- Fix handling square brackets in links (#3209) +- Add description of 'use_https' option in main.inc.php.dist file + +RELEASE 0.5-RC +-------------- +- Plugin API: Add 'pass' argument in 'authenticate' hook (#3147) +- Fix attachments of type message/rfc822 are not listed on attachments list +- Add 'login_lc' config option for case-insensitive authentication (#3131) +- Fix window is blur'ed in IE when selecting a message (#3161) +- Fix cursor position on compose form in Webkit browsers (#2796) +- Fix setting charset of attachment filenames (#3136) +- Allow setting autocomplete attribute for all inputs separately (#3158) +- New Folder Manager UI +- Fix invalid Request when creating a folder (#3165) +- Add folder size and quota indicator in folder manager (#2112) +- Add possibility to move a subfolder into root folder (#2890) +- Fix copying all messages in a folder copies only messages from current page +- Improve performance of moving or copying of all messages in a folder +- Fix plaintext versions of HTML messages don't contain placeholders for emotions (#1657) +- Improve performance of folder rename and delete actions +- Better support for READ-ONLY and NOPERM responses handling (#3108) +- Add confirmation message on purge/expunge command response +- Fix handling of untagged responses for AUTHENTICATE command (#3171) +- Add username and IP address to log message on unsuccessful login (#3176) +- Improved Mail-Followup-To and Mail-Reply-To headers handling +- Fix charset conversion for text attachments without charset specification (#3181) + +RELEASE 0.5-BETA +---------------- +- Make session data storage more robust against garbage session data (#3148) +- Config option for autocomplete on login screen +- Allow plugin templates to include local files (#3146) +- List groups in address detail view and allow to subscribe/unsubscribe from there (#2862) +- Messages caching: performance improvements, fixed syncing, fixes related with #2857 +- Add link to identities in compose window (#2843) +- Add Internationalized Domain Name (IDNA) support (#729) +- Add option to automatically send read notifications for known senders (#2199) +- Add option to "Return receipt" will be always checked (#2571) +- Fix HTML to plain text conversion doesn't handle citation blocks (#2992) +- Use custom sorting when SORT is disabled by IMAP admin (#3020) +- Allow setting some washtml options from plugin (#2727) +- Add option do bind for an individual LDAP address book (#3048) +- Change reply prefix to display email address only if sender name doesn't exist (#2709) +- Plugin API: improved 'abort' flag handling, added 'result' item in some hooks (#2988) +- Fix mailto optional params in plain text messages aren't handled (#3071) +- Add Reply-to-List feature (#977) +- Add Mail-Followup-To/Mail-Reply-To support (#1937) +- Fix confirmation message isn't displayed after sending mail on Chrome (#2437) +- Fix keyboard doesn't work with autocomplete list with Chrome (#3073) +- Improve tabs to fixed width and add tabs in identities info (#3030) +- Add unique index on users.username+users.mail_host +- Make htmleditor option more consistent and add option to use HTML on reply to HTML message (#2164) +- Use empty envelope sender address for message disposition notifications (RFC 2298.3) +- Support SMTP Delivery Status Notifications - RFC 3461 (#2409) +- Use css sprite image for messages list +- Add (different) attachment icon for messages of type multipart/report (#2426) +- Prevent from inserting empty link when composing HTML message (#3007) +- Add caching support in id2uid and uid2id functions (#3065) +- Add SASL proxy authentication for SMTP (#2811) +- Improve displaying of UI messages (#3033) +- Fix double e-mail filed in identity form (#3088) +- Display IMAP errors for LIST/THREAD/SEARCH commands (#2981) +- Add LITERAL+ (IMAP4 non-synchronizing literals) support (RFC 2088) +- Add separate column for message status icon (#2788) +- Add ACL extension support into IMAP classes (RFC 4314) +- Add ANNOTATEMORE extension support into IMAP classes (draft-daboo-imap-annotatemore) +- Add METADATA extension support into IMAP classes (RFC 5464) +- Fix decoding of e-mail address strings in message headers (#3097) +- Fix handling of attachments when Content-Disposition is not inline nor attachment (#3086) +- Improve performance of unseen messages counting (#3090) +- Improve performance of messages counting using ESEARCH extension (RFC4731) +- Add LIST-STATUS support in rcube_imap_generic class (RFC 5819) +- Add SASL-IR support in IMAP (RFC 4959) +- Add LOGINDISABLED support (RFC 2595) +- Add support for AUTH=PLAIN in IMAP authentication +- Re-implemented SMTP proxy authentication support +- Add support for IMAP proxy authentication (#2808) +- Add support for AUTH=DIGEST-MD5 in IMAP (RFC 2831) +- Fix parent folder with unread subfolder not bold when message is open (#3104) +- Add basic IMAP LIST's \Noselect option support +- Add support for selection options from LIST-EXTENDED extension (RFC 5258) +- Don't list subscribed but non-existent folders (#2474) +- Fix handling of URLs with tilde (~) or semicolon (;) character (#3110, #3111) +- Plugin API: added 'contact_form' hook +- Add SORT=DISPLAY support (RFC 5957) +- Plugin API: add possibility to disable plugin in AJAX mode, 'noajax' property +- Plugin API: add possibility to disable plugin in framed mode, 'noframe' property +- Improve performance of setting IMAP flags using .SILENT suffix +- Improve performance of message cache status checking with skip_disabled=true +- Support contact's email addresses up to 255 characters long (#3116) +- Add option to place replies in the folder of the message being replied to (#2248) +- Add missing confirmation/error messages on contact/group/message actions (#2935) +- Add 'loading' message on message move/copy/delete/mark actions +- Improve responsiveness of messages displaying (#3039) +- Add option for minimum length of autocomplete's string (#2625) +- Fix operations on messages in unsubscribed folder (#3126) +- Add support for shared folders (#525) +- Fix handling of folders with name "0" (#3133) +- Fix handling of folders with "<>" characters in name +- jQuery 1.4.4 +- Fix handling of HTML entity strings in plain text messages +- Fix focused elements aren't unfocused when clicking on the list (#3137) +- Fix error in MSSQL DDL scripts (#3130) +- Lock submit button in onsubmit event on login page (#3078) +- Don't set attachment's charset in Content-type header (#3136) +- Fix handling of message bodies (quoted-printable encoded) with NULL characters (#2448) +- Add workaround for MSOE's multipart/related messages with non-related attachments + +RELEASE 0.4.2 +------------- +- Fix handling of backslash as IMAP delimiter +- Fix charset replacement in HTML message bodies (#3067) +- Fix: contact group input is empty when using rename action more than once on the same group record +- Fix "Server Error! (Not Found)" when using utils/save-pref action (#3069) +- Fix handling of Thunderbird's vCards (#3070) + +RELEASE 0.4.1 +------------- +- Fix space-stuffing in format=flowed messages (#3064) +- Fix msgexport.sh now using the new imap wrapper +- Avoid displaying password on shell (#3010) +- Only lower-case user name if first login attempt failed (#2600) +- Make alias setting in squirrelmail_usercopy plugin configurable (patch by pommi, #3056) +- Prevent from saving a non-existing skin path in user prefs (#3004) +- Improve handling of single-part messages with bogus BODYSTRUCTURE (#2976) +- Fix path to SQL files when using pgsql/mysqli/sqlsrv drivers (#2979) +- Fix upgrade script for SQLite (#2980) +- Fixes in SQL init script + added update script for MSSQL database +- Remove redundant date in syslog messages (#3008) +- Fix contacts list page controls when a group is selected (#3009) +- Fix SMTP test in Installer (#3014) +- Fix "Select all" causes message to be opened in folder with exactly one message (#2987) +- Fix Tab key doesn't work in HTML editor in Google Chrome (#2995) +- Fix TinyMCE uses zh_CN when zh_TW locale is set (#2998) +- Fix TinyMCE buttons are hidden in Opera (#2993) +- Fix JS error on IE when trying to send HTML message with enabled spellchecker (#3006) +- Display inline images with known extensions and non-image content-type (#3002) +- Fix "Threaded" checkbox after subfolder creation (#2997) +- Fix timezone string in sent mail (#3021) +- Show disabled checkboxes for protected folders instead of dots (#1898) +- Added fieldsets in Identity form, added 'identity_form' hook +- Re-added 'Close' button in upload form (#2999, #2917) +- Fix handling of charsets with LATIN-* label +- Fix messages background image handling in some cases (#3043) +- Fix format=flowed handling (#3042) +- Fix when IMAP connection fails in 'get' action session shouldn't be destroyed (#3046) +- Fix list_cols is not updated after column dragging (#3050) +- Support %z variable in host configuration options (#3054) + +RELEASE 0.4 +----------- +- Fix disapearing upload form disapears when user selects a file on Safari (#2917) +- Don't replace error messages with loading info (#2534) +- Fix JS errors on compose mode switch (#2952) +- Fix message structure parsing when it lacks optional fields (#2960) +- Include all recipients in sendmail log +- Support HTTP_X_FORWARDED_PROTO header for HTTPS detecting (#2950) +- Fix default IMAP port configuration (#2948) +- Create Sent folder when starting to compose a new message (#2900) +- Fix handling of messages with Content-Type: application/* and no filename (#840) +- Improved compose screen: resizable body and attachments list, vertical splitter, options menu +- Fix RC forgets search results (#722) +- TinyMCE 3.3.7 +- Improve parsing of styled empty tags in HTML messages (#2908) +- Add %dc variable support in base_dn/bind_dn config (#2881) +- Add button to hide/unhide the preview pane (#955) +- Fix no-cache headers on https to prevent content caching by proxies (#2897) +- Fix attachment filenames broken with TNEF decoder using long filenames (#2894) +- Use user's timezone in Date header, not server's timezone (#2393) +- Add option to set separate footer for HTML messages (#2784) +- Add real SMTP error description to displayed error messages (#2233) +- Fix some IMAP errors handling when opening the message (#1848) +- Fix related parts aren't displayed when got mimetype other than image/* (#2629) +- Multiple identity and database support for squirrelmail_usercopy plugin (#2686) +- Support dynamic hostname (%d/%n) variables in configuration options (#1843) +- Add 'messages_list' hook (#2504) +- Add request* event triggers in http_post/http_request (#2340) +- Fix use RFC-compliant line-delimiter when saving messages on IMAP (#2828) +- Add 'imap_timeout' option (#2869) +- Fix forwarding of messages with winmail attachments +- Fix handling of uuencoded attachments in message body (#2163) +- Added list_mailboxes hook in rcube_imap::list_unsubscribed() (#2791) +- Fix wrong message on file upload error (#2839) +- Add support for data URI scheme [RFC2397] (#2851) +- Added 'actionbefore', 'actionafter', 'responsebefore', 'responseafter' events +- Fix double-addition of e-mail domain to content ID in HTML images +- Read and send messages with format=flowed (#1052), fixes word wrapping issues (#2703) +- Fix duplicated attachments when forwarding a message (#2670) +- Fix message/rfc822 attachments containing only attachments are not parsed properly (#2854) +- Fix %00 character in winmail.dat attachments names (#2850) +- Fix handling errors of folder deletion (#2821) +- Parse untagged CAPABILITY response for LOGIN command (#2853) +- Renamed all php-cli scripts to use .sh extension +- Some files from /bin + spellchecking actions moved to the new 'utils' task +- Added thread tree icons +- Extend contact groups support (#2802) +- Fix check-recent action issues and performance (#2690) +- Fix messages order after checking for recent (#1249) +- Fix autocomplete shows entries without email (#2640) +- Fix listupdate event doesn't trigger on search response (#2824) +- Fix select_all_mode value after selecting a message (#2834) +- Set focus to editor on reply in HTML mode (#2768) +- Fix composing in HTML jumps cursor to body instead of recipients (#2796) +- Allow columns order change per user - drag&drop (#2124) +- Add References header in read receipt (#2801) +- Fix database constraint violation when opening a message (#2814) +- Add 'loading' message while login is in progress (#2790) +- Fix quota_zero_as_unlimited (#2786) +- Fix folder subscription checking (#2804) +- Fix INBOX appears (sometimes) twice in mailbox list (#2794) +- Fix listing of attachments of some types e.g. "x-epoc/x-sisx-app" (#2779) +- Fix DB Schema checking when some db_table_* options are not set (#2780) + +RELEASE 0.4-beta +---------------- +- Add sizelimit and timelimit variables in LDAP config (#2704) +- Hide IMAP host dropdown when single host is defined (#2553) +- Add images pre-loading on login page (#623) +- Add HTTP_X_REAL_IP and HTTP_X_FORWARDED_FOR to successful logins log (#2634) +- Fix setting spellcheck languages with extended codes (#2747) +- Fix messages list scrolling in FF3.6 (#2657) +- Fix quicksearch input focus (#2770) +- Always set changed date when flagging a DB record as deleted + provide a cleanup script +- Fix address book/group selection (#2760) +- Assign newly created contacts to the active group (#2764) +- Added option not to mark messages as read when viewed in preview pane (#1513) +- Allow plugins modify the Sent folder when composing (#2708) +- Added optional (max_recipients) support to restrict total number of recipients per message (#1167) +- Re-organize editor buttons, add blockquote and search buttons +- Make possible to write inside or after a quoted html message (#1878) +- Fix bugs on unexpected IMAP connection close (#2449, #2507) +- Iloha's imap.inc rewritten into rcube_imap_generic class +- Added contact groups in address book (not finished yet) +- Added PageUp/PageDown/Home/End keys support on lists (#2627) +- Added possibility to select all messages in a folder (#1312) +- Added 'imap_force_caps' option for after-login CAPABILITY checking (#2087) +- Password: Support dovecotpw encryption +- TinyMCE 3.3.1 +- Implemented messages copying using drag&drop + SHIFT (#863) +- Improved performance of folders operations (#2689) +- Fix blocked.gif attachment is not attached to the message (#2685) +- Managesieve: import from Horde-INGO +- Managesieve: support for more than one match (#2362) +- Managesieve: support for selectively disabling rules within a single sieve script (#2198) +- Threaded message listing now available +- Added sorting by ARRIVAL and CC +- Message list columns configurable by the user +- Removed 'index_sort' option, now we're using empty 'message_sort_col' for this +- virtuser_query: support other identity data (#2413) +- Options virtuser_* replaced with virtuser_* plugins +- Plugin API: Implemented 'email2user' and 'user2email' hooks +- Fix forwarding message omits CC header (#2538) +- Add 'default_charset' option to user preferences (#1855) +- Add 'delete_always' option to user preferences +- Support/Require tls:// prefix in 'smtp_server' option for TLS connections +- Fix inconsistent behaviour of 'delete_always' option (#2533) +- Fix deleting all messages from last list page (#2528) +- Flag original messages when sending a draft (#2458) +- Changed signature separator when top-posting (#2555) +- Let the admin define defaults for search modifiers (#2211) +- Fix long e-mail addresses validation (#2641) +- Remember search modifiers in user prefs (#2411) +- Added force_7bit option to force MIME encoding of plain/text messages (#2679) +- Use case sensitive check when checking for default folders (#2567) +- Fix checking for new mail: now checks unseen count of inbox (#2123) +- Improve performance by avoiding unnecessary updates to the session table (#2552) +- Fix invalid tags which cause HTML message rendering problems (#2687) +- Fix CVE-2010-0464: Disable DNS prefetching (#2639) +- Fix Received headers to behave better with SpamAssassin (#2682) +- Password: Make passwords encoding consistent with core, add 'password_charset' global option (#2658) +- Fix adding contacts SQL error on mysql (#2645) +- Squirrelmail_usercopy: support reply-to field (#2678) +- Fix IE spellcheck suggestion popup issue (#2656) +- Fix email address auto-completion shows regexp pattern (#2498) +- Fix merging of configuration parameters: user prefs always survive (#2584) +- Fix quota indicator value after folder purge/expunge (#2671) +- Fix external mailto links support for use as protocol handler (#2328) +- Fix attachment excessive memory use, support messages of any size (#1245) +- Fix setting task name according to auth state +- Password: fix vpopmaild driver (#2662) +- Add workaround for MySQL bug [http://bugs.mysql.com/bug.php?id=46293] (#2659) +- Fix quoted text wrapping when replying to an HTML email in plain text (#897) +- Fix handling of extended mailto links (with params) (#2573) +- Fix sorting by date of messages without date header on servers without SORT (#2521) +- Fix inconsistency when not using default table names (#2652) +- Fix folder rename/delete buttons do not appear on creation of first folder (#2653) +- Fix character set conversion fails on systems where iconv doesn't accept //IGNORE (#2590) +- Log in performance: Create default folders on first login only +- Import contacts into the selected address book (by Phil Weir) +- Add support for MDB2's 'sqlsrv' driver (#2602) +- Use jQuery-1.4 +- Removed problematic browser-caching of messages +- Fix incompatybility with suhosin.executor.disable_emodifier (#2549) +- Use PLAIN auth when CRAM fails and imap_auth_type='check' (#2587) +- Fix removal of tag from HTML messages (#2629) +- Fix 'force_https' to specified port when URL contains a port number (#2612) +- Fix to-text converting of HTML entities inside b/strong/th/hX tags (#2621) +- Bug in spellchecker suggestions when server charset != UTF8 (#2607) +- Managesieve: Fix requires generation for multiple actions (#2603) +- Fix LDAP problem with special characters in RDN (#2548) +- Improved handling of message parts of type message/rfc822 +- Plugin API: added 'quota' hook +- Fix parsing conditional comments in HTML messages (#2569) +- Use built-in json_encode() for proper JSON format in AJAX replies +- Allow setting only selected params in 'message_compose' hook (#2543) +- Plugin API: added 'message_compose_body' hook (#2520) +- Fix counters of all folders are checked in 'getunread' action with check_all_folders disabled (#2399) +- Fix displaying alternative parts in messages of type message/rfc822 (#2488) +- Fix possible messages exposure when using Roundcube behind a proxy (#2516) +- Fix unicode para and line separators in javascript response (#2542) +- Additional_message_headers: allow unsetting headers, support plugin's config file (#2505) +- Fix displaying of hidden directories in skins list (#2535) +- Fix open_basedir restriction error when reading skins list (#2537) +- Fix pasting from Office apps into html editor (#2508) +- Fix empty <a> tags parsing (#2509) +- Don't cut off attachment names when using non-RFC2231 encoding (#1912) +- Allow inserting signatures above replied message body (#991) +- Managesieve 2.0: multi-script support +- Fix imap_auth_type regression (#2502) + +RELEASE 0.3.1 +------------------ +- Specify toolbar container in compose template (#2489) +- Fix $_SERVER['HTTPS'] check for SSL forcing on IIS (#2486) +- Avoid unnecessary page loads for selected tab (#2324) +- Fix quota indicator issues by content generation on client-size (#2454, #2470) +- Don't display disabled sections in Settings (#2380) +- Added server-side e-mail address validation with 'email_dns_check' option (#2175) +- Fix login page loading into an iframe when session expires (#2253) +- Allow setting port number in 'force_https' option (#2373) +- Option 'force_https' replaced by 'force_https' plugin +- Fix IE issue with non-UTF-8 characters in AJAX response (#2422) +- Partially fixed "empty body" issue by showing raw body of malformed message (#2427) +- Fix importing/sending to email address with whitespace (#2467) +- Added XIMSS (CommuniGate) driver for Password plugin +- Fix newly attached files are not saved in drafts w/o editing any text (#2457) +- Added attachment upload indicator with parallel upload (#2344) +- Use default_charset for bodies of messages without charset definition (#2446) +- Password: added cPanel driver +- Fix return to first page from e-mail screen (#2385) +- Fix handling HTML comments in HTML messages (#2448) +- Fix folder/messagelist controls alignment - icons used (#2356) +- Fix LDAP addressbook shows 'Contact not found' error sometimes (#2438) +- Fix cache status checking + improve cache operations performance (#2384) +- Prevent from setting INBOX as any of special folders (#2390) +- Fix regular expression for e-mail address (#2417) +- Fix Received header format +- Implemented sorting by message index - added 'index_sort' option (#2240) +- Fix dl() use in installer (#2415) +- Added 'ldap_debug' option +- Fix "Empty startup greeting" bug (#2369) +- Fix setting user name in 'new_user_identity' plugin (#2405) +- Fix incorrect count of new messages in folder list when using multiple IMAP clients (#2289) +- Fix all folders checking for new messages with disabled caching (#2399) +- Support skins in 'archive' and 'markasjunk' plugins +- Added 'html_editor' hook (#2353) +- Fix DB constraint violation when populating messages cache (#2338) +- Password: added password strength options (#2348) +- Fix LDAP partial result warning (#1928) +- Fix delete in message view deletes permanently with flag_for_deletion=true (#2382) +- Use faster/secure mt_rand() (#2376) +- Fix roundcube hangs on empty inbox with bincimapd (#2375) +- Fix wrong headers for IE on servers without $_SERVER['HTTPS'] (#2232) +- Force IE style headers for attachments in non-HTTPS session, 'use_https' option (#2023) +- Check 'post_max_size' for upload max filesize (#2372) +- Password Plugin: Fix %d inserts username instead of domain (#2371) +- Fix rcube_mdb2::affected_rows() (#2366) + +RELEASE 0.3-stable +------------------ +- Fix gn and givenName should be synonymous in LDAP addressbook (#2208) +- Add mail_domain to LDAP email entries without @ sign (#1652) +- Fix saving empty values in LDAP contact data (#2113) +- Fix LDAP contact update when RDN field is changed (#2119) +- Fix LDAP attributes case senitivity problems (#2155) +- Fix LDAP addressbook browsing when only one directory is used (#2314) +- Fix endless loop on error response for APPEND command (#2346) +- Don't require date.timezone setting in installer (#2284) +- Fix date sorting problem with Courier IMAP server (#2351) +- Unselect pressed buttons on mouse up (#2283) +- Don't set php_value error_log in .htaccess but mention in INSTALL (#2230) +- Fix too small status/flag/attachment columns in Safari 4 (#2349) +- Fix selection disabling while dragging splitter in webkit browsers (#2342) +- Added 'new_messages' plugin hook (#2298) +- Added 'logout_after' plugin hook (#2333) +- Added 'message_compose' hook +- Added 'imap_connect' hook (#2256) +- Fix vcard_attachments plugin (#2326) +- Updated PEAR::Auth_SASL to 1.0.3 version +- Use sequence names only with PostgreSQL (#2310) +- Re-designed User Preferences interface +- Fix MS SQL DDL (#2312) +- Fix rcube_mdb2.php: call to setCharset not implemented in mssql driver (#2311) +- Added 'display_next' option +- Fix rcube_mdb2::unixtimestamp for MS SQL (#2308) +- Fix HTML washing to respect character encoding +- Fix endless loop in iil_C_Login() with Courier IMAP (#2303) +- Fix #messagemenu display on IE (#2299) +- Speedup UI by using sprites for (toolbar) buttons +- Fix charset names with X- prefix handling +- Fix displaying of HTML messages with unknown/malformed tags (#2296) + +RELEASE 0.3-RC1 +--------------- +- Fix import of vCard entries with params (#1857) +- Fix HTML messages output with empty block elements (#2271) +- Use request tokens to protect POST requests from CSRF [CVE-2009-4076, CVE-2009-4077] +- Added hook when killing a session +- Added hook to write_log function (#2268) +- Performance improvements by use UID commands (#2046) +- Fix HTML editor tabIndex setting (#2269) +- Added 'imap_debug' and 'smtp_debug' options +- Support strftime's format modifiers in date_* options (#1354) +- Support %h variable in 'smtp_server' option (#2101) +- Show SMTP errors in browser (#2233) +- Allow WBR tag in HTML message (#2259) +- Use spl_autoload_register() instead of __autoload (#2250) +- Add hook for identities listing (#2257) +- Trigger hook 'smtp_connect' when opening an SMTP connection (#2255) +- Added config option to enforce HTTPS connections +- Fix non-unicode characters caching in unicode database (#1209) +- Performance improvements of messages caching +- Fix empty Date header issue (#2229) +- Open collapsed folders during drag & drop (#2221) +- Fixed link text replacements (#2120) +- Also trigger 'insertrow' events on page load (#2151) +- No link on subject in IE browsers (#1438) +- Fixed filename encoding according to RFC2231 (#2192) +- Added message Edit feature (#727, #1101) +- Fix message Etag generation for counter issues (#1996) +- Fix messages searching on MailEnable IMAP (#2097) +- Fixed many 'skip_deleted' issues (#2006) +- Fixed messages list sorting on servers without SORT capability +- Colorized signatures in plain text messages +- Reviewed/fixed skip_deleted/read_when_deleted/flag_for_deletion options handling in UI +- Fix displaying of big maximum upload filesize (#2205) +- Added possibility to invert messages selection +- After move/delete from 'show' action display next message instead of messages list (#2203) +- Fixed problem with double quote at the end of folder name (#2200) +- Speedup UI by using CSS sprites and etags/expires/deflate in Apache config (#1397,#2128) +- Support UID EXPUNGE: remove only moved/deleted messages +- Add drag cancelling with ESC key (#1036) +- Support initial identity name from virtuser_query (#807) +- Added message menu, removed Print and Source buttons +- Added possibility to save message as .eml file (#2178) +- Added 1 minute interval in autosave options (#2173) +- Support UTF-7 encoding in messages (#2156) +- Better support for malformed character names (#2093) + +RELEASE 0.3-BETA +---------------- +- Plugin API + jQuery engine +- Added possibility to encrypt received header, option 'http_received_header_encrypt', + added some more logic in encrypt/decrypt functions for security +- Fix Answered/Forwarded flag setting for messages in subfolders +- Fix autocomplete problem with capital letters (#2122) +- Support UUencode content encoding (#2163) +- Minimize chance of race condition in session handling (#1260) +- Fix session handling on non-session SQL query error (#2078) +- Fix html editor mode setting when reopening draft message (#2158) +- Added quick search box menu (#1010) +- Fix wrong column sort order icons (#2149) +- Updated TinyMCE to 3.2.3 version +- Fix attachment names encoding when charset isn't specified in attachment part (#1483) +- Fix message normal priority problem (#2146) +- Fix autocomplete spinning wheel does not disappear (#2132) +- Added log_date_format option (#2060) +- Fix text wrapping in HTML editor after switching from plain text to HTML (#1917) +- Fix auto-complete function hangs with plus sign (#2141) +- Fix AJAX requests errors handler (#1503) +- Speed up message list displaying on IE +- Fix read/write database recognition (#2137) + +RELEASE 0.2.2 +------------- +- Fix quicksearchbox look in Chrome and Konqueror (#1380) +- Fix UTF-8 byte-order mark removing (#1911) +- Fix folders subscribtions on Konqueror (#1380) +- Fix debug console on Konqueror and Safari +- Fix messagelist focus issue when modifying status of selected messages (#2134) +- Support STARTTLS in IMAP connection (#1714) +- Fix DEL key problem in search boxes (#1923) +- Support several e-mail addresses per user from virtuser_file (#2036) +- Fix drag&drop with scrolling on IE (#2117) +- Fix adding signature separator in html mode (#1768) +- Fix opening attachment marks message as read (#2131) +- Fix 'temp_dir' does not support relative path under Windows (#1157) +- Fix "Initialize Database" button missing from installer (#2130) +- Fix compose window doesn't fit 1024x768 window (#1807) +- Fix service not available error when pressing back from compose dialog (#1942) +- Fix using mail() on Windows (#2111) +- Fix word wrapping in message-part's <PRE>s for printing (#2118) +- Fix incorrect word wrapping in outgoing plaintext multibyte messages (#2062) +- Fix double footer in HTML message with embedded images +- Fix TNEF implementation bug (#2107) +- Fix incorrect row id parsing for LDAP contacts list (#2116) +- Fix 'mode' parameter in sqlite DSN (#2106) + +RELEASE 0.2.1 +------------------ +- Use US-ASCII as failover when Unicode searching fails (#2097) +- Fix errors handling in IMAP command continuations (#2097) +- Fix FETCH result parsing for servers returning flags at the end of result (#2098) +- Fix datetime columns defaults in mysql's DDL (#2012) +- Fix attaching more than nine inline images (#2094) +- Support 'UNICODE-1-1-UTF-7' alias for UTF-7 encoding (#2093) +- Fix mime-type detection using a hard-coded map (#1735) +- Don't return empty string if charset conversion failed (#2092) +- Disable concurrent autocomplete query results display (#2082) +- Fix new lines stripped from message footer (#2088) +- Fix IE problem with mouse click autocomplete (#2080) +- Fix html body washing on reply/forward + fix attachments handling (#2034) +- Fix multiple recipients input parsing (#2077) +- Fix replying to message with html attachment (#2034) +- Use default_charset for messages without specified charset (#2027, #1484961) +- Support non-standard "GMT-XXXX" literal in date header (#2074) +- Added TNEF support to decode MS Outlook attachments (winmail.dat) +- Fix "value continuation" MIME headers by adding required semicolon (#2073) +- Fix pressing select all/unread multiple times (#2069) +- Fix selecting all unread does not honor new messages (#2070) +- Fix some base64 encoded attachments handling (#2071) +- Support NGINX as IMAP backend: better BAD response handling (#2066) +- Performance fix: don't fetch attachment parts headers twice to parse filename +- Fix checking for recent messages on various IMAP servers (#2055) +- Performance fix: Don't fetch quota and recent messages in "message view" mode +- Fix displaying of alternative-inside-alternative messages (#2061) +- Fix MDNSent flag checking, use arbitrary keywords (asterisk) flag (#2059) +- Fix creation of folders with '&' sign in name +- Fix parsing of email addresses without angle brackets (#2048) +- Save spellcheck corrections when switching from plain to html editor (and spellchecking is on) +- Fix large search results on server without SORT capability (#2031) +- Get rid of preg_replace() with eval modifier and create_function usage (#2042) +- Bring back <base> and <link> tags in HTML messages +- Fix XSS vulnerability through background attributes [CVE-2009-0413] +- Fix problems with backslash as IMAP hierarchy delimiter (#1116) +- Secure vcard export by getting rid of preg's 'e' modifier use (#2045) +- Fix authentication when submitting form with existing session (#2037) +- Allow absolute URLs to images in HTML messages/sigs (#2029) +- Fix message body which contains both inline attachments and emotions +- Fix SQL query execution errors handling in rcube_mdb2 class (#1907) +- Fix address names with '@' sign handling (#2022) +- Improve messages display performance +- Fix messages searching with 'to:' modifier + +RELEASE 0.2-STABLE +------------------ +- Fix mark popup in IE 7 (#1785) +- Fix line-break issue when copy & paste in Firefox (#1832) +- Fix autocomplete "unknown server error" (#2008) +- Fix STARTTLS before AUTH in SMTP connection (#1415) +- Support multiple quota values in QUOTAROOT resonse (#1999) +- Only abbreviate file name for IE < 7 browsers (#1548) +- Performance: allow setting imap rootdir and delimiter before connect (#1628) +- Fix sorting of folders with more than 2 levels (#1953) +- Fix search results page jumps in LDAP addressbook (#1689) +- Fix empty line before the signature in IE (#1769) +- Fix horizontal scrollbar in preview pane on IE (#1228) +- Add Robots meta tag in login page and installer (#1385) +- Added 'show_images' option, removed 'addrbook_show_images' (#1977) +- Option to check for new mails in all folders (#1053) +- Don't set client busy when checking for new messages (#1706) +- Allow UTF-8 folder names in config (#1960) +- Add junk_mbox option configuration in installer (#1960) +- Do serverside addressbook queries for autocompletion (#1925) +- Allow setting attachment col position in 'list_cols' option +- Allow override 'list_cols' via skin (#1958) +- Fix 'cache' table cleanup on session destroy (#1913) +- Increase speed of session destroy and garbage clean up +- Fix session timeout when DB server got clock skew (#1890) +- Fix handling of some malformed messages (#1099) +- Speed up raw message body handling +- Better HTML entities conversion in html2text (#1916) +- Fix big memory consumption and speed up searching on servers without SORT capability +- Fix setting locale to tr_TR, ku and az_AZ (#1872) +- Use SORT for searching on servers with SORT capability +- Added message status filter +- Fix empty file sending (#1801) +- Improved searching with many criterias (calling one SEARCH command) +- Fix HTML editor initialization on IE (#1731) +- Add warning when switching editor mode from html to plain (#1888) +- Make identities list scrollable (#1930) +- Fix problem with numeric folder names (#1922) +- Added BYE response simple support to prevent from endless loops in imap.inc (#777) +- Fix unread message unintentionally marked as read if read_when_deleted=true (#1819) +- Remove port number from SERVER_NAME in smtp_helo_host (#1915) +- Don't send disposition notification receipts for messages marked as 'read' (#1918) +- Added 'keep_alive' and 'min_keep_alive' options (#1777) +- Added option 'identities_level', removed 'multiple_identities' +- Allow deleting identities when multiple_identities=false (#1840) +- Added option focus_on_new_message (#1789) +- Fix html2text class autoloading on Windows (#1904) +- Fix html signature formatting when identity save error occurred (#1833) +- Add feedback and set busy when moving folder (#1897) +- Fix 'Empty' link visibility for some languages e.g. Slovak (#1889) +- Fix messages count bar overlapping (#1703) +- Fix adding signature in drafts compose mode (#1884) +- Fix iil_C_Sort() to support very long and/or divided responses (#1713) +- Fix matching case sensitivity when setting identity on reply (#1881) +- Prefer default identity on reply +- Fix imap searching on ISMail server (#1870) +- Add css class for flagged messages (#1868) +- Write username instead of id in sendmail log (#1879) +- Fix htmlspecialchars() use for PHP version < 5.2.3 (#1877) +- Fix js keywords escaping in json_serialize() for IE/Opera (#1874) +- Added bin/killcache.php script (#1839) +- Add support for SJIS, GB2312, BIG5 in rc_detect_encoding() +- Fix vCard file encoding detection for non-UTF-8 strings (#1820) +- Add 'skip_deleted' option in User Preferences (#1850) +- Minimize "inline" javascript scripts use (#1838) +- Fix css class setting for folders with names matching defined classes names (#1772) +- Fix race conditions when changing mailbox +- Fix spellchecking when switching to html editor (#1779) +- Fix compose window width/height (#1807) +- Allow calling msgimport.sh/msgexport.sh from any directory (#1837) +- Localized filesize units (#1760) +- Better handling of "no identity" and "no email in identity" situations (#1592) +- Added 'mime_param_folding' option with possibility to choose long/non-ascii attachment names encoding eg. to be readable in MS Outlook/OE (#1743) +- Added "advanced options" feature in User Preferences +- Fix unread counter when displaying cached massage in preview panel (#1720) +- Fix htmleditor spellchecking on MS Windows (#1808) +- Fix problem with non-ascii attachment names in Mail_mime (#1700, #1576) +- Fix language autodetection (#1812) +- Fix button label in folders management (#1816) +- Fix collapsed folder not indicating unread msgs count of all subfolders (#1814) +- Fix handling of apostrophes in filenames decoded according to rfc2231 + +RELEASE 0.2-BETA +---------------- +- Made config files location configurable (#1664) +- Reduced memory footprint when forwarding attachments (#1764) +- Allow and use spellcheck attribute for input/textarea fields (#1545) +- Added icons for forwarded/forwarded+replied messages (#1691) +- Added Reply-To to forwarded emails (#1739) +- Display progress message for folders create/delete/rename (#1774) +- Smart Tags and NOBR tag support in html messages (#1780, #1748) +- Redesign of the identities settings (#836) +- Add config option to disable creation/deletion of identities (#1139) +- Added 'sendmail_delay' option to restrict messages sending interval (#1135) +- Added vertical splitter for folders list resizing +- Added possibility to view all headers in message view +- Fixed splitter drag/resize on Opera (#1626) +- Fixed quota img height/width setting from template (#1396) +- Refactor drag & drop functionality. Don't rely on browser events anymore (#1108) +- Insert "virtual" folders in subscription list (#1333) +- Added link to open message in new window +- Enable export of address book contacts as vCard +- Add feature to import contacts from vcard files (#395) +- Respect Content-Location headers in multipart/related messages according to RFC2110 (#1464) +- Allowed max. attachment size now indicated in compose screen (#1523) +- Also capture backspace key in list mode (#1186) +- Allow application/pgp parts to be displayed (#1309) +- Correctly handle options in mailto-links (#1671) +- Immediately save sort_col/sort_order in user prefs (#1698) +- Truncate very long (above 50 characters) attachment filenames when displaying +- Allow to auto-detect client language if none set (#1095) +- Auto-detect the client timezone (user configurable) +- Add RFC2231 header value continuations support for attachment filenames + hack for servers that not support that feature +- Fix Reply-To header displaying (#1738) +- Mark form buttons that provide the most obvious operation (mainaction) +- Added option 'quota_zero_as_unlimited' (#1206) +- Added PRE handling in html2text class (#1301) +- Added folder hierarchy collapsing +- Added options to use syslog instead of log file (#1389) +- Added Logging & Debugging section in Installer +- Fix In-Reply-To and References headers when composing saved draft message (#1718) +- Fix html message charset conversion for charsets with underline (#1717) +- Fix buttons status after contacts deletion (#1675) +- Fix escaping of To: and From: fields when building message body for reply or forward in the HTML editor (#1432) +- Use current mailbox name in template (#1690) +- Better fix for skipping untagged responses (#1694) +- Added pspell support patch by Kris Steinhoff (#781) +- Enable spellchecker for HTML editor (#1589) +- Respect spellcheck_uri in tinyMCE spellchecker (#941) +- Case insensitive contacts searching using PostgreSQL (#1692) +- Make default imap folders configurable for each user (#1558) +- Save outgoing mail to selectable folder (#1324581) +- Fix hiding of mark menu when clicking th button again (#1463) +- Use long date format in print mode (#1643) +- Updated TinyMCE to version 3.1.0.1 +- Re-enable autocomplete attribute for login form (#1661) +- Check PERMANENTFLAGS before saving $MDNSent flag (#1478, #1485163) +- Added flag column on messages list (#1220) +- Patched Mail/MimePart.php (http://pear.php.net/bugs/bug.php?id=14232) +- Allow trash/junk subfolders to be purged (#1568) +- Store compose parameters in session and redirect to a unique URL +- Fixed CRAM-MD5 authentication (#1364) +- Fixed forwarding messages with one HTML attachment (#1103) +- Fixed encoding of message/rfc822 attachments and image/pjpeg handling (#1439) +- Added option to select skin in user preferences +- Added option to configure displaying of attached images below the message body +- Added option to display images in messages from known senders (#1204) +- User preferences grouped in more fieldsets +- Fix corrupted MIME headers of messages in Sent folder (#1587) +- Fixed bug in MDB2 package: http://pear.php.net/bugs/bug.php?id=14124 +- Use keypress instead of keydown to select list's row (#1362) +- Don't call expunge and don't remove message row after message move if flag_for_deletion is set to true (#1505) + +RELEASE 0.2-ALPHA +----------------- +- Added option to disable autocompletion from selected LDAP address books (#1445) +- TLS support in LDAP connections: 'use_tls' property (#1581) +- Fixed removing messages from search set after deleting them (#1583) +- imap.inc: Fixed iil_C_FetchStructureString() to handle many + literal strings in response (#1483) +- Support for subfolders in default/protected folders (#1250) +- Disallowed delimiter in folder name (#1351) +- Support " and \ in folder names +- Escape \ in login (#1214) +- Better HTML sanitization with the DOM-based washtml script (#1276) +- Fixed sorting of folders with non-ascii characters +- Fixed Mysql DDL for default identities creation (#1554) +- In Preferences added possibility to configure 'read_when_deleted', + 'mdn_requests', 'flag_for_deletion' options +- Made IMAP auth type configurable (#683) +- Fixed empty values with FROM_UNIXTIME() in rcube_mdb2 (#1540) +- Fixed attachment list on IE 6/7 (#1355) +- Fixed JavaScript in compose.html that shows cc/bcc fields if populated +- Make password input fields of type password in installer (#1417) +- Don't attempt to delete cache entries if enable_caching is FALSE (#1537) +- Optimized messages sorting on servers without sort capability (#1535) +- Corrected message headers decoding when charset isn't specified and improved + support for native languages (#1536, #1534) +- Expanded LDAP configuration options to support LDAP server writes. +- Installer: encode special characters in DB username/password (#1529) +- Fixed management of folders with national characters in names (#1526, #1504) +- Fixed identities saving when using MDB2 pgsql driver (#1525) +- Fixed BCC header reset (#1501) +- Improved messages list performance - patch from Justin Heesemann +- Append skin_path to images location only when it starts with '/' sign (#1398) +- Fix IMAP response in message body when message has no body (#1479) +- Fixed non-RFC dates formatting (#1429) +- Fixed typo in set_charset() (#1498) +- Decode entities when inserting HTML signature to plain text message (#1497) +- HTML editing is now working with PHP5 updates and TinyMCE v3.0.6 +- Fixed signature loading on Windows (#1169) +- Added language support to HTML editing (#1401) +- Fixed remove signature when replying (#446) +- Fixed problem with line with a space at the end (#1440) +- Fixed <!DOCTYPE> tag filtering (#1066) +- Fixed <?xml> tag filtering (#1075) +- Added sections (fieldset+label) in Settings interface +- Mark as read in one action with message preview (#1486) +- Deleted redundant quota reads (#1486) +- Added options for empty trash and expunge inbox on logout (#707) +- Removed lines wrapping when displaying message +- Fixed month localization +- Changed codebase to PHP5 with autoloader + +RELEASE 0.1.1 +------------- +- Clear selection when selecting single item (#1461) +- Remove hard-coded image size in skin templates (#1423) +- Database schema improvements (dropped unnecessary indexes) +- Fixed creating a new folder with a comma in its name (#1263) +- Fixed sorting of messages when default mailbox is empty (#1020) +- Improve message previewpane - less loading (#1019) +- Fixed login form autoompletion (#1378) +- Fixed virtuser_query option for mdb2 backend (#1409) +- Fixed attachment resoting from Drafts when message body was empty (#1144) +- Fixed usage of ob_gzhandler (#1390) +- Fixed message part window in IE6 (#1211) +- Fixed decoding of mime-encoded strings (#938) +- Fixed some iconv/mb_string problems (#1202) +- Correctly quote mailbox name when using in URL (#1016) +- Fixed "headers already sent" errors (#1399) + +RELEASE 0.1-STABLE +------------------ +- Added interactive installer script +- Fix folder adding/renaming inspired by #1349 +- Localize folder name in page title (#1338) +- Fix code using wrong variable name (#818) +- Allow to send mail with BCC recipients only +- condense TinyMCE toolbar down to one line, removing table buttons (#1306) +- Add function to mark the selected messages as read/unread (#641) +- Also do charset decoding as suggested in RFC 2231 (fix #1022) +- Show message count in folder list and hint when creating a subfolder +- Distinguish ssl and tls for imap connections (#1252) +- Added some charset aliases to fix typical mis-labelling (#1185) +- Remember decision to display images for a certain message during session (#1310) +- Truncate attachment filenames to 55 characters due to an IE bug (#1313) +- Make sending of read receipts configurable +- Respect config when localize folder names (#1280) +- Also respect receipt and priority settings when re-opening a draft message +- Remember search results (closes #722), patch by the_glu +- Add Received header on outgoing mail +- Upgrade to TinyMCE 2.1.3 +- Allow inserting image attachments into HTML messages while composing (#1179) +- Implement Message-Disposition-Notification (Receipts) +- Fix overriding of session vars when register_globals is on (#1255) +- Fix bug with case-sensitive folder names (#973) +- Don't create default folders by default +- Fixed some potential security risks (audited by Andris) +- Only show new messages if they match the current search (#925) +- Switch to/from when searcing in Sent folder (#1177) +- Correctly read the References header (#1236) +- Unset old cookie before sending a new value (#1232) +- Correctly decode attachments when downloading them (#1235 and #1484642) +- Suppress IE errors when clearing attachments form (#1043) +- Log error when login fails due to auto_create_user turned off +- Filter linked/imported CSS files (closes #844) +- Improve message compose screen (closes #1060) +- Select next row after removing one from list (#1063) + +RELEASE 0.1-RC2 +--------------- +- Enable drag-&-dropping of folders to a new parent and allow to create subfolders (#637) +- Suppress IE errors when clearing attachments form (#1043) +- Set preferences field in user table to NULL (#1062) +- Log error when login fails due to auto_create_user turned off +- Filter linked/imported CSS files (closes #844) +- Improve message compose screen (closes #1060) +- Select next row after removing one from list (#1063) +- Make smtp HELO/EHLO hostname configurable (#851) +- IPv6 Compatability (#1023), Patch #1484373 +- Unlock interface when message sending fails (#1188) +- Eval PHP code in template includes (if configured) +- Show message when folder is empty. Mo more static text in table (#1068) +- Only display unread count in page title when new messages arrived +- Fixed wrong delete button tooltip (#785) +- Fixed charset encoding bug (#1091) +- Applied patch for LDAP version (#1175) +- Improved XHTML validation +- Fix message list selection (#1174) +- Better fix lowercased usernames (#1120) +- Update pngbehavior Script as suggested in #1134 +- Fixed moving/deleting messages when more than 1 is selected +- Applied patch for LDAP contacts listing by Glen Ogilvie +- Applied patch for more address fields in LDAP contacts (#1074) +- Add alternative for getallheaders() (fix #1146) +- Identify mailboxes case-sensitive +- Sort mailbox list case-insensitive (closes #1032) +- Fix display of multipart messages from Apple Mail (closes #823) +- Protect AJAX request from being fetched by a foreign site (XSS) +- Make autocomplete for loginform configurable by the skin template +- Fix compose function from address book (closes #1089) +- Added //IGNORE to iconv call (patch #1086, closes #821) +- Check if mbstring supports charset (#1003 and #1004) +- Prefer iconv over mbstring (as suggested in #1004) +- Check filesize of template includes (#1079) +- Fixed bug with buttons not dimming/enabling properly after switching folders +- Fixed compose window becoming unresponsive after saving a draft (#1132) +- Re-enabled "Back" button in compose window now that bug #1132 is fixed +- Fixed unresponsive interface issue when downloading attachments (#1138) +- Lowered status message time from 5 to 3 seconds to improve responsiveness +- Raised .htaccess upload_max_filesize from 2M to 5M to differ from default php.ini +- Increased "mailboxcontrols" mail.css width from 160 to 170px to fix non-english languages (#1140) +- Fix status message bug #1114 with regard to #1041 +- Fix address adding bug reported by David Koblas +- Applied socket error patch by Thomas Mangin +- Pass-by-reference workarround for PHP5 in sendmail.inc +- Fixed buggy imap_root settings (closes #1056) +- Prevent default events on subject links (#1071) +- Use HTTP-POST requests for actions that change state + +RELEASE 0.1-RC1 +--------------- +- Use global filters and bind username/ for Ldap searches (#909) +- Hide quota display if imap server does not support it +- Hide address groups if no LDAP servers configured +- Add link to message subjects (closes #982) +- Better SQL query for contact listing/search (closes #1051) +- Fixed marking as read in preview pane (closes #1048) +- CSS hack to display attachments correctly in IE6 +- Wrap message body text (closes #901) +- LDAP access is back in address book (closes #864) +- Added search function for contacts +- New Template parsing and output encoding +- Fixed bugs #884 and #793 +- Fixed message moving procedure (closes #1013) +- Fixed display of multiple attachments (closes #647) +- Fixed check for new messages (closes #1015) +- List attachments without filename +- New session authentication: Change sessid cookie when login, authentication with sessauth cookie is now configurable. + Should close bugs #774 and #1484299 +- Correctly translate mailbox names (closes #993) +- Quote e-mail address links (closes #1007) +- Updated PEAR::Mail_mime package +- Accept single quotes for HTML attributes when modifying message body (thanks Jason) +- Sanitize input for new users/identities (thanks Colin Alston) +- Don't download HTML message parts +- Convert HTML parts to plaintext if 'prefer_html' is off +- Correctly parse message/rfc822 parts (closes #838) +- Also use user_id for unique key in messages table (closes #857) +- Hide contacts drop down on blur (closes #946) +- Make entries in contacts drop down clickable +- Turn off browser autocompletion on login page +- Quote <? in text/html message parts +- Hide border around radio buttons +- Applied patch for attachment download by crichardson (closes #943) +- Fixed bug in Postgres DB handling (closes #852) +- Fixed bug of invalid calls to fetchRow() in rcube_db.inc (closes #996) +- Fixed array_merge bug (closes #997) +- Fixed flag for deletion in list view (closes #987) +- Finally support semicolons as recipient separator (closes ##976) +- Fixed message headers (subject) encoding +- check if safe mode is on or not (closes #990) +- Show "no subject" in message list if subject is missing (closes #971) +- Solved page caching of message preview (closes #905) +- Only use gzip compression if configured (closes #967) +- Fixed priority selector issue (#903) +- Fixed some CSS issues in default skin (closes #951 and #911) +- Prevent from double quoting of numeric HTML character references (closes #978) +- Fixed display of HTML message attachments (closes #927) +- Applied patch for preview caching (closes #933) +- Added error handling for attachment uploads +- Use multibyte safe string functions where necessary (closes #798) +- Applied security patch to validate the submitted host value (by Kees Cook) +- Applied security patch to validate input values when deleting contacts (by Kees Cook) +- Applied security patch that sanitizes emoticon paths when attaching them (by Kees Cook) +- Applied a patch to more aggressively sanitize a HTML message +- Visualize blocked images in HTML messages +- Fixed wrong message listing when showing search results (closes #890) +- Show remote images when opening HTML message part as attachment +- Improve memory usage when sending mail (closes #871) +- Mark messages as read once the preview is loaded (closes #1484132) +- Include smtp final response in log (closes #862) +- Corrected date string in sent message header (closes #887) +- Correclty choose "To" column in sent and draft mailboxes (closes #769) +- Changed srong tooltips for message browse buttons (closes #757) +- Fixed signature delimeter character to be standard (Bug #830) +- Fixed XSS vulnerability (Bug #877) +- Remove newlines from mail headers (Bug #827) +- Selection issues when moving/deleting (Bug #837) +- Applied patch of Clement Moulin for imap host auto-selection +- ISO-encode IMAP password for plaintext login (Bugs #792 & #723) +- Fixed folder name encoding in subscription list (Bug #879) +- Fixed JS errors in identity list (Bug #885) +- Translate foldernames in folder form (closes #879) +- Added first and last buttons to message list, address book + and message detail +- Pressing Shift-Del bypasses Trash folder +- Enable purge command for Junk folder +- Fetch all aliases if virtuser_query is used instead +- Re-enabled multi select of contacts (Bug #817) +- Enable contact editing right after creation (Bug #644) +- Correct UTF-7 to UTF-8 conversion if mbstring is not available +- Fixed IMAP fetch of message body (Bug #819) +- Fixed safe_mode problems (Bug #539) +- Fixed wrong header encoding (Bug #1483976) +- Made automatic draft saving configurable +- Fixed JS bug when renaming folders (Bug #799) +- Added quota display as image (by Brett Patterson) +- Corrected creation of a message-id +- New indentation for quoted message text +- Improved HTML validity +- Fixed URL character set (Ticket #616) +- Fixed saving of contact into MySQL from LDAP query results (Ticket #681) +- Fixed folder renaming: unsubscribe before rename (Bug #750) +- Finalized new message parsing (+ chaching) +- Fixed wrong usage of mbstring (Bug #645) +- Set default spelling language (Ticket #764) +- Added support for Nox Spell Server +- Re-built message parsing (Bug #422) + Now based on the message structure delivered by the IMAP server. +- Fixed some XSS and SQL injection issues +- Fixed charset problems with folder renaming diff --git a/data/web/rc/INSTALL b/data/web/rc/INSTALL new file mode 100644 index 00000000..85ea3173 --- /dev/null +++ b/data/web/rc/INSTALL @@ -0,0 +1,269 @@ +INTRODUCTION +============ + +This file describes the basic steps to install Roundcube Webmail on your +web server. For additional information, please also consult the project's +wiki page at https://github.com/roundcube/roundcubemail/wiki + + +REQUIREMENTS +============ + +* An IMAP, HTTP and SMTP server +* .htaccess support allowing overrides for DirectoryIndex +* PHP Version 5.4 or greater including: + - PCRE, DOM, JSON, Session, Sockets, OpenSSL, Mbstring (required) + - PHP PDO with driver for either MySQL, PostgreSQL, SQL Server, Oracle or SQLite (required) + - Iconv, Zip, Fileinfo, Intl, Exif (recommended) + - LDAP for LDAP addressbook support (optional) +* PEAR and PEAR packages distributed with Roundcube or external: + - Mail_Mime 1.10.0 or newer + - Net_SMTP 1.7.1 or newer + - Net_Socket 1.0.12 or newer + - Net_IDNA2 0.1.1 or newer + - Auth_SASL 1.0.6 or newer + - Net_Sieve 1.3.2 or newer (for managesieve plugin) + - Crypt_GPG 1.6.0 or newer (for enigma plugin) + - Endroid/QrCode 1.6.0 or newer (https://github.com/endroid/QrCode) +* php.ini options (see .htaccess file): + - error_reporting E_ALL & ~E_NOTICE & ~E_STRICT + - memory_limit > 16MB (increase as suitable to support large attachments) + - file_uploads enabled (for attachment upload features) + - session.auto_start disabled + - suhosin.session.encrypt disabled + - mbstring.func_overload disabled +* A MySQL, PostgreSQL, MS SQL Server (2005 or newer), Oracle database + or SQLite support in PHP - with permission to create tables +* Composer installed either locally or globally (optional, for plugin installation) + + +INSTALLATION +============ + +1. Decompress and put this folder somewhere inside your document root +2. In case you don't use the so-called "complete" release package, + you have to install PHP and javascript dependencies. + 2.1. Install PHP dependencies using composer: + - get composer from https://getcomposer.org/download/ + - rename the composer.json-dist file into composer.json + - if you want to use LDAP address books, enable the LDAP libraries in your + composer.json file by moving the items from "suggest" to the "require" + section (remove the explanation texts after the version!). + - run `php composer.phar install --no-dev` + 2.2. Install Javascript dependencies by executing `bin/install-jsdeps.sh` script. +3. Make sure that the following directories (and the files within) + are writable by the webserver + - /temp + - /logs +4. Create a new database and a database user for Roundcube (see DATABASE SETUP) +5. Point your browser to http://url-to-roundcube/installer/ +6. Follow the instructions of the install script (or see MANUAL CONFIGURATION) +7. After creating and testing the configuration, remove the installer directory +8. Check Known Issues section of this file + + +CONFIGURATION HINTS +=================== + +IMPORTANT! Read all comments in defaults.inc.php, understand them +and configure your installation to be not surprised by default behaviour. + +Roundcube writes internal errors to the 'errors' log file located in the logs +directory which can be configured in config/config.inc.php. If you want ordinary +PHP errors to be logged there as well, enable the 'php_value error_log' line +in the .htaccess file and set the path to the log file accordingly. + +By default the session_path settings of PHP are not modified by Roundcube. +However if you want to limit the session cookies to the directory where +Roundcube resides you can uncomment and configure the according line +in the .htaccess file. + + +DATABASE SETUP +============== + +Note: Database for Roundcube must use UTF-8 character set. +Note: See defaults.inc.php file for examples of DSN configuration. + +* MySQL +------- +Setting up the mysql database can be done by creating an empty database, +importing the table layout and granting the proper permissions to the +roundcube user. Here is an example of that procedure: + +# mysql +> CREATE DATABASE roundcubemail /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; +> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost + IDENTIFIED BY 'password'; +> quit + +# mysql roundcubemail < SQL/mysql.initial.sql + +Note 1: 'password' is the master password for the roundcube user. It is strongly +recommended you replace this with a more secure password. Please keep in +mind: You need to specify this password later in 'config/db.inc.php'. + + +* SQLite +-------- +Versions of sqlite database engine older than 3 aren't supported. +Database file and structure is created automatically by Roundcube. +Make sure your configuration points to some file location and that the +webserver can write to the file and the directory containing the file. + + +* PostgreSQL +------------ +To use Roundcube with PostgreSQL support you have to follow these +simple steps, which have to be done as the postgres system user (or +which ever is the database superuser): + +$ createuser -P roundcube +$ createdb -O roundcube -E UNICODE roundcubemail +$ psql -U roundcube -f SQL/postgres.initial.sql roundcubemail + +Note: in some system configurations you might need to add '-U postgres' to +createuser and createdb commands. + + +* Microsoft SQL Server +---------------------- +Language/locale of the database must be set to us_english (1033). More info +on this at https://github.com/roundcube/roundcubemail/issues/4078. + + +Database cleaning +----------------- +To keep your database slick and clean we recommend to periodically execute +bin/cleandb.sh which finally removes all records that are marked as deleted. +Best solution is to install a cronjob running this script daily. + + +MANUAL CONFIGURATION +==================== + +First of all, copy the sample configuration file config/config.inc.php.sample +to config/config.inc.php and make the necessary adjustments according to your +environment and your needs. More configuration options can be copied from the +config/defaults.inc.php file into your local config.inc.php file as needed. +Read the comments above the individual configuration options to find out what +they do or read https://github.com/roundcube/roundcubemail/wiki/Installation +for even more guidance. + +You can also modify the default .htaccess file. This is necessary to +increase the allowed size of file attachments, for example: + php_value upload_max_filesize 2M + + +SECURE YOUR INSTALLATION +======================== + +Access through the webserver to the following directories should be denied: + + /config + /temp + /logs + +Roundcube uses .htaccess files to protect these directories, so be sure to +allow override of the Limit directives to get them taken into account. The +package also ships a .htaccess file in the root directory which defines some +rewrite rules. In order to properly secure your installation, please enable +mod_rewrite for Apache webserver and double check access to the above listed +directories and their contents is denied. + +NOTE: In Apache 2.4, support for .htaccess files has been disabled by +default. Therefore you first need to enable this in your Apache main or +virtual host config by with: + + AllowOverride all + + +UPGRADING +========= + +If you already have a previous version of Roundcube installed, +please refer to the instructions in UPGRADING guide. + + +OPTIMISING +========== + +There are two forms of optimisation here, compression and caching, both aimed +at increasing an end user's experience using Roundcube Webmail. Compression +allows the static web pages to be delivered with less bandwidth. The index.php +of Roundcube Webmail already enables compression on its output. The settings +below allow compression to occur for all static files. Caching sets HTTP +response headers that enable a user's web client to understand what is static +and how to cache it. + +The caching directives used are: + * Etags - sets at tag so the client can request is the page has changed + * Cache-control - defines the age of the page and that the page is 'public' + This enables clients to cache javascript files that don't have private + information between sessions even if using HTTPS. It also allows proxies + to share the same cached page between users. + * Expires - provides another hint to increase the lifetime of static pages. + +For more information refer to RFC 2616. + +Side effects: +------------- +These directives are designed for production use. If you are using this in +a development environment you may get horribly confused if your webclient +is caching stuff that you changed on the server. Disabling the expires +parts below should save you some grief. + +If you are changing the skins, it is recommended that you copy content to +a different directory apart from 'default'. + +Apache: +------- +To enable these features in apache the following modules need to be enabled: + * mod_deflate + * mod_expires + * mod_headers + +The optimisation is already included in the .htaccess file in the top +directory of your installation. + +If you are using Apache version 2.2.9 and later, in the .htaccess file +change the 'append' word to 'merge' for a more correct response. Keeping +as 'append' shouldn't cause any problems though changing to merge will +eliminate the possibility of duplicate 'public' headers in Cache-control. + +Lighttpd: +--------- +With Lightty the addition of Expire: tags by mod_expire is incompatible with +the addition of "Cache-control: public". Using Cache-control 'public' is +used below as it is assumed to give a better caching result. + +Enable modules in server.modules: + "mod_setenv" + "mod_compress" + +Mod_compress is a server side cache of compressed files to improve its performance. + +$HTTP["host"] == "www.example.com" { + + static-file.etags = "enable" + # http://redmine.lighttpd.net/projects/lighttpd/wiki/Etag.use-mtimeDetails + etag.use-mtime = "enable" + + # http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModSetEnv + $HTTP["url"] =~ "^/roundcubemail/(plugins|skins|program)" { + setenv.add-response-header = ( "Cache-Control" => "public, max-age=2592000") + } + + # http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModCompress + # set compress.cache-dir to somewhere outside the docroot. + compress.cache-dir = var.statedir + "/cache/compress" + + compress.filetype = ("text/plain", "text/html", "text/javascript", "text/css", "text/xml", "image/gif", "image/png") +} + + +KNOWN ISSUES +============ + +Installations with uw-imap server should set imap_disabled_caps = array('ESEARCH') +in main configuration file. ESEARCH implementation in this server is broken (#1489184). diff --git a/data/web/rc/LICENSE b/data/web/rc/LICENSE new file mode 100644 index 00000000..94a9ed02 --- /dev/null +++ b/data/web/rc/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/data/web/rc/README.md b/data/web/rc/README.md new file mode 100644 index 00000000..0837fec0 --- /dev/null +++ b/data/web/rc/README.md @@ -0,0 +1,93 @@ +Roundcube Webmail +================= +[roundcube.net](http://roundcube.net) + + +INTRODUCTION +------------ +Roundcube Webmail is a browser-based multilingual IMAP client with an +application-like user interface. It provides full functionality you expect +from an email client, including MIME support, address book, folder management, +message searching and spell checking. Roundcube Webmail is written in PHP and +requires the MySQL, PostgreSQL or SQLite database. With its plugin API it is +easily extendable and the user interface is fully customizable using skins +which are pure XHTML and CSS 2. + +The code is mainly written in PHP and is designed to run on a webserver. +It includes other open-source classes/libraries from [PEAR][pear], +an IMAP library derived from [IlohaMail][iloha] the [TinyMCE][tinymce] rich +text editor, [Googiespell][googiespell] library for spell checking or +the [WASHTML][washtml] sanitizer by Frederic Motte. + +The current default skin 'Larry' was kindly created by FLINT / BĂĽro fĂĽr +Gestaltung, Berne, Switzerland. + + +INSTALLATION +------------ +For detailed instructions on how to install Roundcube webmail on your server, +please refer to the INSTALL document in the same directory as this document. + +If you're updating an older version of Roundcube please follow the steps +described in the UPGRADING file. + + +LICENSE +------- +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License (**with exceptions +for skins & plugins**) 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 General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see [www.gnu.org/licenses/][gpl]. + +This file forms part of the Roundcube Webmail Software for which the +following exception is added: Plugins and Skins which merely make +function calls to the Roundcube Webmail Software, and for that purpose +include it by reference shall not be considered modifications of +the software. + +If you wish to use this file in another project or create a modified +version that will not be part of the Roundcube Webmail Software, you +may remove the exception above and use this source code under the +original version of the license. + +For more details about licensing and the exceptions for skins and plugins +see [roundcube.net/license][license] + + +CONTRIBUTION +------------ +Want to help make Roundcube the best webmail solution ever? +Roundcube is open source software. Our developers and contributors all +are volunteers and we're always looking for new additions and resources. +For more information visit [roundcube.net/contribute][contrib] + + +CONTACT +------- +For bug reports or feature requests please refer to the tracking system +at [Github][githubissues] or subscribe to our mailing list. +See [roundcube.net/support][support] for details. + +You're always welcome to send a message to the project admin: +hello(at)roundcube(dot)net + + +[pear]: http://pear.php.net +[iloha]: http://sourceforge.net/projects/ilohamail/ +[tinymce]: http://www.tinymce.com/ +[googiespell]: http://orangoo.com/labs/GoogieSpell/ +[washtml]: http://www.ubixis.com/washtml/ +[kmgerich]: http://kmgerich.com/ +[gpl]: http://www.gnu.org/licenses/ +[license]: http://roundcube.net/license +[contrib]: http://roundcube.net/contribute +[support]: http://roundcube.net/support +[githubissues]: https://github.com/roundcube/roundcubemail/issues \ No newline at end of file diff --git a/data/web/rc/SQL/mssql.initial.sql b/data/web/rc/SQL/mssql.initial.sql new file mode 100644 index 00000000..219aaa77 --- /dev/null +++ b/data/web/rc/SQL/mssql.initial.sql @@ -0,0 +1,400 @@ +CREATE TABLE [dbo].[cache] ( + [user_id] [int] NOT NULL , + [cache_key] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [expires] [datetime] NULL , + [data] [text] COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +CREATE TABLE [dbo].[cache_shared] ( + [cache_key] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL , + [expires] [datetime] NULL , + [data] [text] COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +CREATE TABLE [dbo].[cache_index] ( + [user_id] [int] NOT NULL , + [mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [expires] [datetime] NULL , + [valid] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL , + [data] [text] COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +CREATE TABLE [dbo].[cache_thread] ( + [user_id] [int] NOT NULL , + [mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [expires] [datetime] NULL , + [data] [text] COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +CREATE TABLE [dbo].[cache_messages] ( + [user_id] [int] NOT NULL , + [mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [uid] [int] NOT NULL , + [expires] [datetime] NULL , + [data] [text] COLLATE Latin1_General_CI_AI NOT NULL , + [flags] [int] NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +CREATE TABLE [dbo].[contacts] ( + [contact_id] [int] IDENTITY (1, 1) NOT NULL , + [user_id] [int] NOT NULL , + [changed] [datetime] NOT NULL , + [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL , + [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [email] [varchar] (8000) COLLATE Latin1_General_CI_AI NOT NULL , + [firstname] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [surname] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [vcard] [text] COLLATE Latin1_General_CI_AI NULL , + [words] [text] COLLATE Latin1_General_CI_AI NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +CREATE TABLE [dbo].[contactgroups] ( + [contactgroup_id] [int] IDENTITY (1, 1) NOT NULL , + [user_id] [int] NOT NULL , + [changed] [datetime] NOT NULL , + [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL , + [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] +GO + +CREATE TABLE [dbo].[contactgroupmembers] ( + [contactgroup_id] [int] NOT NULL , + [contact_id] [int] NOT NULL , + [created] [datetime] NOT NULL +) ON [PRIMARY] +GO + +CREATE TABLE [dbo].[identities] ( + [identity_id] [int] IDENTITY (1, 1) NOT NULL , + [user_id] [int] NOT NULL , + [changed] [datetime] NOT NULL , + [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL , + [standard] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL , + [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [organization] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [email] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [reply-to] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [bcc] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [signature] [text] COLLATE Latin1_General_CI_AI NULL, + [html_signature] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +CREATE TABLE [dbo].[session] ( + [sess_id] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [created] [datetime] NOT NULL , + [changed] [datetime] NULL , + [ip] [varchar] (40) COLLATE Latin1_General_CI_AI NOT NULL , + [vars] [text] COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +CREATE TABLE [dbo].[users] ( + [user_id] [int] IDENTITY (1, 1) NOT NULL , + [username] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [mail_host] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [created] [datetime] NOT NULL , + [last_login] [datetime] NULL , + [failed_login] [datetime] NULL , + [failed_login_counter] [int] NULL , + [language] [varchar] (5) COLLATE Latin1_General_CI_AI NULL , + [preferences] [text] COLLATE Latin1_General_CI_AI NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +CREATE TABLE [dbo].[dictionary] ( + [user_id] [int] , + [language] [varchar] (5) COLLATE Latin1_General_CI_AI NOT NULL , + [data] [text] COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +CREATE TABLE [dbo].[searches] ( + [search_id] [int] IDENTITY (1, 1) NOT NULL , + [user_id] [int] NOT NULL , + [type] [tinyint] NOT NULL , + [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [data] [text] COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +CREATE TABLE [dbo].[system] ( + [name] [varchar] (64) COLLATE Latin1_General_CI_AI NOT NULL , + [value] [text] COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +ALTER TABLE [dbo].[cache] WITH NOCHECK ADD + PRIMARY KEY CLUSTERED + ( + [user_id],[cache_key] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[cache_shared] WITH NOCHECK ADD + PRIMARY KEY CLUSTERED + ( + [cache_key] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[cache_index] WITH NOCHECK ADD + PRIMARY KEY CLUSTERED + ( + [user_id],[mailbox] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[cache_thread] WITH NOCHECK ADD + PRIMARY KEY CLUSTERED + ( + [user_id],[mailbox] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[cache_messages] WITH NOCHECK ADD + PRIMARY KEY CLUSTERED + ( + [user_id],[mailbox],[uid] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[contacts] WITH NOCHECK ADD + CONSTRAINT [PK_contacts_contact_id] PRIMARY KEY CLUSTERED + ( + [contact_id] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[contactgroups] WITH NOCHECK ADD + CONSTRAINT [PK_contactgroups_contactgroup_id] PRIMARY KEY CLUSTERED + ( + [contactgroup_id] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[contactgroupmembers] WITH NOCHECK ADD + CONSTRAINT [PK_contactgroupmembers_id] PRIMARY KEY CLUSTERED + ( + [contactgroup_id], [contact_id] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[identities] WITH NOCHECK ADD + PRIMARY KEY CLUSTERED + ( + [identity_id] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[session] WITH NOCHECK ADD + CONSTRAINT [PK_session_sess_id] PRIMARY KEY CLUSTERED + ( + [sess_id] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[users] WITH NOCHECK ADD + CONSTRAINT [PK_users_user_id] PRIMARY KEY CLUSTERED + ( + [user_id] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[searches] WITH NOCHECK ADD + CONSTRAINT [PK_searches_search_id] PRIMARY KEY CLUSTERED + ( + [search_id] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[system] WITH NOCHECK ADD + CONSTRAINT [PK_system_name] PRIMARY KEY CLUSTERED + ( + [name] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[cache] ADD + CONSTRAINT [DF_cache_user_id] DEFAULT ('0') FOR [user_id], + CONSTRAINT [DF_cache_cache_key] DEFAULT ('') FOR [cache_key], +GO + +ALTER TABLE [dbo].[cache_index] ADD + CONSTRAINT [DF_cache_index_valid] DEFAULT ('0') FOR [valid] +GO + +ALTER TABLE [dbo].[cache_messages] ADD + CONSTRAINT [DF_cache_messages_flags] DEFAULT (0) FOR [flags] +GO + +CREATE INDEX [IX_cache_shared_cache_key] ON [dbo].[cache_shared]([cache_key]) ON [PRIMARY] +GO + +CREATE INDEX [IX_cache_index_user_id] ON [dbo].[cache_index]([user_id]) ON [PRIMARY] +GO + +CREATE INDEX [IX_cache_thread_user_id] ON [dbo].[cache_thread]([user_id]) ON [PRIMARY] +GO + +CREATE INDEX [IX_cache_messages_user_id] ON [dbo].[cache_messages]([user_id]) ON [PRIMARY] +GO + +CREATE INDEX [IX_cache_expires] ON [dbo].[cache]([expires]) ON [PRIMARY] +GO + +CREATE INDEX [IX_cache_shared_expires] ON [dbo].[cache_shared]([expires]) ON [PRIMARY] +GO + +CREATE INDEX [IX_cache_index_expires] ON [dbo].[cache_index]([expires]) ON [PRIMARY] +GO + +CREATE INDEX [IX_cache_thread_expires] ON [dbo].[cache_thread]([expires]) ON [PRIMARY] +GO + +CREATE INDEX [IX_cache_messages_expires] ON [dbo].[cache_messages]([expires]) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[contacts] ADD + CONSTRAINT [DF_contacts_user_id] DEFAULT (0) FOR [user_id], + CONSTRAINT [DF_contacts_changed] DEFAULT (getdate()) FOR [changed], + CONSTRAINT [DF_contacts_del] DEFAULT ('0') FOR [del], + CONSTRAINT [DF_contacts_name] DEFAULT ('') FOR [name], + CONSTRAINT [DF_contacts_email] DEFAULT ('') FOR [email], + CONSTRAINT [DF_contacts_firstname] DEFAULT ('') FOR [firstname], + CONSTRAINT [DF_contacts_surname] DEFAULT ('') FOR [surname], + CONSTRAINT [CK_contacts_del] CHECK ([del] = '1' or [del] = '0') +GO + +CREATE INDEX [IX_contacts_user_id] ON [dbo].[contacts]([user_id]) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[contactgroups] ADD + CONSTRAINT [DF_contactgroups_user_id] DEFAULT (0) FOR [user_id], + CONSTRAINT [DF_contactgroups_changed] DEFAULT (getdate()) FOR [changed], + CONSTRAINT [DF_contactgroups_del] DEFAULT ('0') FOR [del], + CONSTRAINT [DF_contactgroups_name] DEFAULT ('') FOR [name], + CONSTRAINT [CK_contactgroups_del] CHECK ([del] = '1' or [del] = '0') +GO + +CREATE INDEX [IX_contactgroups_user_id] ON [dbo].[contactgroups]([user_id]) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[contactgroupmembers] ADD + CONSTRAINT [DF_contactgroupmembers_contactgroup_id] DEFAULT (0) FOR [contactgroup_id], + CONSTRAINT [DF_contactgroupmembers_contact_id] DEFAULT (0) FOR [contact_id], + CONSTRAINT [DF_contactgroupmembers_created] DEFAULT (getdate()) FOR [created] +GO + +CREATE INDEX [IX_contactgroupmembers_contact_id] ON [dbo].[contactgroupmembers]([contact_id]) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[identities] ADD + CONSTRAINT [DF_identities_user] DEFAULT ('0') FOR [user_id], + CONSTRAINT [DF_identities_del] DEFAULT ('0') FOR [del], + CONSTRAINT [DF_identities_standard] DEFAULT ('0') FOR [standard], + CONSTRAINT [DF_identities_name] DEFAULT ('') FOR [name], + CONSTRAINT [DF_identities_organization] DEFAULT ('') FOR [organization], + CONSTRAINT [DF_identities_email] DEFAULT ('') FOR [email], + CONSTRAINT [DF_identities_reply] DEFAULT ('') FOR [reply-to], + CONSTRAINT [DF_identities_bcc] DEFAULT ('') FOR [bcc], + CONSTRAINT [DF_identities_html_signature] DEFAULT ('0') FOR [html_signature], + CHECK ([standard] = '1' or [standard] = '0'), + CHECK ([del] = '1' or [del] = '0') +GO + +CREATE INDEX [IX_identities_user_id] ON [dbo].[identities]([user_id]) ON [PRIMARY] +GO +CREATE INDEX [IX_identities_email] ON [dbo].[identities]([email],[del]) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[session] ADD + CONSTRAINT [DF_session_sess_id] DEFAULT ('') FOR [sess_id], + CONSTRAINT [DF_session_ip] DEFAULT ('') FOR [ip] +GO + +CREATE INDEX [IX_session_changed] ON [dbo].[session]([changed]) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[users] ADD + CONSTRAINT [DF_users_username] DEFAULT ('') FOR [username], + CONSTRAINT [DF_users_mail_host] DEFAULT ('') FOR [mail_host], + CONSTRAINT [DF_users_created] DEFAULT (getdate()) FOR [created] +GO + +CREATE UNIQUE INDEX [IX_users_username] ON [dbo].[users]([username],[mail_host]) ON [PRIMARY] +GO + +CREATE UNIQUE INDEX [IX_dictionary_user_language] ON [dbo].[dictionary]([user_id],[language]) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[searches] ADD + CONSTRAINT [DF_searches_user] DEFAULT (0) FOR [user_id], + CONSTRAINT [DF_searches_type] DEFAULT (0) FOR [type] +GO + +CREATE UNIQUE INDEX [IX_searches_user_type_name] ON [dbo].[searches]([user_id],[type],[name]) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[identities] ADD CONSTRAINT [FK_identities_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [FK_contacts_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[contactgroups] ADD CONSTRAINT [FK_contactgroups_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[cache] ADD CONSTRAINT [FK_cache_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[cache_index] ADD CONSTRAINT [FK_cache_index_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[cache_thread] ADD CONSTRAINT [FK_cache_thread_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[cache_messages] ADD CONSTRAINT [FK_cache_messages_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[contactgroupmembers] ADD CONSTRAINT [FK_contactgroupmembers_contactgroup_id] + FOREIGN KEY ([contactgroup_id]) REFERENCES [dbo].[contactgroups] ([contactgroup_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[searches] ADD CONSTRAINT [FK_searches_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +-- Use trigger instead of foreign key (#1487112) +-- "Introducing FOREIGN KEY constraint ... may cause cycles or multiple cascade paths." +CREATE TRIGGER [contact_delete_member] ON [dbo].[contacts] + AFTER DELETE AS + DELETE FROM [dbo].[contactgroupmembers] + WHERE [contact_id] IN (SELECT [contact_id] FROM deleted) +GO + +INSERT INTO [dbo].[system] ([name], [value]) VALUES ('roundcube-version', '2016112200') +GO + \ No newline at end of file diff --git a/data/web/rc/SQL/mssql/2009103100.sql b/data/web/rc/SQL/mssql/2009103100.sql new file mode 100644 index 00000000..646fe38a --- /dev/null +++ b/data/web/rc/SQL/mssql/2009103100.sql @@ -0,0 +1,87 @@ +-- Updates from version 0.3.1 + +ALTER TABLE [dbo].[messages] ADD CONSTRAINT [FK_messages_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[cache] ADD CONSTRAINT [FK_cache_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [FK_contacts_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[identities] ADD CONSTRAINT [FK_identities_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[identities] ADD [changed] [datetime] NULL +GO + +CREATE TABLE [dbo].[contactgroups] ( + [contactgroup_id] [int] IDENTITY (1, 1) NOT NULL , + [user_id] [int] NOT NULL , + [changed] [datetime] NOT NULL , + [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL , + [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] +GO + +CREATE TABLE [dbo].[contactgroupmembers] ( + [contactgroup_id] [int] NOT NULL , + [contact_id] [int] NOT NULL , + [created] [datetime] NOT NULL +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[contactgroups] WITH NOCHECK ADD + CONSTRAINT [PK_contactgroups_contactgroup_id] PRIMARY KEY CLUSTERED + ( + [contactgroup_id] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[contactgroupmembers] WITH NOCHECK ADD + CONSTRAINT [PK_contactgroupmembers_id] PRIMARY KEY CLUSTERED + ( + [contactgroup_id], [contact_id] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[contactgroups] ADD + CONSTRAINT [DF_contactgroups_user_id] DEFAULT (0) FOR [user_id], + CONSTRAINT [DF_contactgroups_changed] DEFAULT (getdate()) FOR [changed], + CONSTRAINT [DF_contactgroups_del] DEFAULT ('0') FOR [del], + CONSTRAINT [DF_contactgroups_name] DEFAULT ('') FOR [name], + CONSTRAINT [CK_contactgroups_del] CHECK ([del] = '1' or [del] = '0') +GO + +CREATE INDEX [IX_contactgroups_user_id] ON [dbo].[contacts]([user_id]) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[contactgroupmembers] ADD + CONSTRAINT [DF_contactgroupmembers_contactgroup_id] DEFAULT (0) FOR [contactgroup_id], + CONSTRAINT [DF_contactgroupmembers_contact_id] DEFAULT (0) FOR [contact_id], + CONSTRAINT [DF_contactgroupmembers_created] DEFAULT (getdate()) FOR [created] +GO + +ALTER TABLE [dbo].[contactgroupmembers] ADD CONSTRAINT [FK_contactgroupmembers_contactgroup_id] + FOREIGN KEY ([contactgroup_id]) REFERENCES [dbo].[contactgroups] ([contactgroup_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +CREATE TRIGGER [contact_delete_member] ON [dbo].[contacts] + AFTER DELETE AS + DELETE FROM [dbo].[contactgroupmembers] + WHERE [contact_id] IN (SELECT [contact_id] FROM deleted) +GO + +ALTER TABLE [dbo].[contactgroups] ADD CONSTRAINT [FK_contactgroups_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO diff --git a/data/web/rc/SQL/mssql/2010100600.sql b/data/web/rc/SQL/mssql/2010100600.sql new file mode 100644 index 00000000..fb045e30 --- /dev/null +++ b/data/web/rc/SQL/mssql/2010100600.sql @@ -0,0 +1,9 @@ +-- Updates from version 0.4.2 + +DROP INDEX [IX_users_username] +GO +CREATE UNIQUE INDEX [IX_users_username] ON [dbo].[users]([username],[mail_host]) ON [PRIMARY] +GO +ALTER TABLE [dbo].[contacts] ALTER COLUMN [email] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL +GO + \ No newline at end of file diff --git a/data/web/rc/SQL/mssql/2011011200.sql b/data/web/rc/SQL/mssql/2011011200.sql new file mode 100644 index 00000000..8715455d --- /dev/null +++ b/data/web/rc/SQL/mssql/2011011200.sql @@ -0,0 +1,10 @@ +-- Updates from version 0.5.x + +ALTER TABLE [dbo].[contacts] ADD [words] [text] COLLATE Latin1_General_CI_AI NULL +GO +CREATE INDEX [IX_contactgroupmembers_contact_id] ON [dbo].[contactgroupmembers]([contact_id]) ON [PRIMARY] +GO +DELETE FROM [dbo].[messages] +GO +DELETE FROM [dbo].[cache] +GO diff --git a/data/web/rc/SQL/mssql/2011092800.sql b/data/web/rc/SQL/mssql/2011092800.sql new file mode 100644 index 00000000..00f79bbc --- /dev/null +++ b/data/web/rc/SQL/mssql/2011092800.sql @@ -0,0 +1,127 @@ +-- Updates from version 0.6 + +CREATE TABLE [dbo].[dictionary] ( + [user_id] [int] , + [language] [varchar] (5) COLLATE Latin1_General_CI_AI NOT NULL , + [data] [text] COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO +CREATE UNIQUE INDEX [IX_dictionary_user_language] ON [dbo].[dictionary]([user_id],[language]) ON [PRIMARY] +GO + +CREATE TABLE [dbo].[searches] ( + [search_id] [int] IDENTITY (1, 1) NOT NULL , + [user_id] [int] NOT NULL , + [type] [tinyint] NOT NULL , + [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [data] [text] COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +ALTER TABLE [dbo].[searches] WITH NOCHECK ADD + CONSTRAINT [PK_searches_search_id] PRIMARY KEY CLUSTERED + ( + [search_id] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[searches] ADD + CONSTRAINT [DF_searches_user] DEFAULT (0) FOR [user_id], + CONSTRAINT [DF_searches_type] DEFAULT (0) FOR [type], +GO + +CREATE UNIQUE INDEX [IX_searches_user_type_name] ON [dbo].[searches]([user_id],[type],[name]) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[searches] ADD CONSTRAINT [FK_searches_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +DROP TABLE [dbo].[messages] +GO +CREATE TABLE [dbo].[cache_index] ( + [user_id] [int] NOT NULL , + [mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [changed] [datetime] NOT NULL , + [valid] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL , + [data] [text] COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +CREATE TABLE [dbo].[cache_thread] ( + [user_id] [int] NOT NULL , + [mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [changed] [datetime] NOT NULL , + [data] [text] COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +CREATE TABLE [dbo].[cache_messages] ( + [user_id] [int] NOT NULL , + [mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [uid] [int] NOT NULL , + [changed] [datetime] NOT NULL , + [data] [text] COLLATE Latin1_General_CI_AI NOT NULL , + [flags] [int] NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +ALTER TABLE [dbo].[cache_index] WITH NOCHECK ADD + PRIMARY KEY CLUSTERED + ( + [user_id],[mailbox] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[cache_thread] WITH NOCHECK ADD + PRIMARY KEY CLUSTERED + ( + [user_id],[mailbox] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[cache_messages] WITH NOCHECK ADD + PRIMARY KEY CLUSTERED + ( + [user_id],[mailbox],[uid] + ) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[cache_index] ADD + CONSTRAINT [DF_cache_index_changed] DEFAULT (getdate()) FOR [changed], + CONSTRAINT [DF_cache_index_valid] DEFAULT ('0') FOR [valid] +GO + +CREATE INDEX [IX_cache_index_user_id] ON [dbo].[cache_index]([user_id]) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[cache_thread] ADD + CONSTRAINT [DF_cache_thread_changed] DEFAULT (getdate()) FOR [changed] +GO + +CREATE INDEX [IX_cache_thread_user_id] ON [dbo].[cache_thread]([user_id]) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[cache_messages] ADD + CONSTRAINT [DF_cache_messages_changed] DEFAULT (getdate()) FOR [changed], + CONSTRAINT [DF_cache_messages_flags] DEFAULT (0) FOR [flags] +GO + +CREATE INDEX [IX_cache_messages_user_id] ON [dbo].[cache_messages]([user_id]) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[cache_index] ADD CONSTRAINT [FK_cache_index_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[cache_thread] ADD CONSTRAINT [FK_cache_thread_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO + +ALTER TABLE [dbo].[cache_messages] ADD CONSTRAINT [FK_cache_messages_user_id] + FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id]) + ON DELETE CASCADE ON UPDATE CASCADE +GO diff --git a/data/web/rc/SQL/mssql/2011111600.sql b/data/web/rc/SQL/mssql/2011111600.sql new file mode 100644 index 00000000..38787760 --- /dev/null +++ b/data/web/rc/SQL/mssql/2011111600.sql @@ -0,0 +1,4 @@ +-- Updates from version 0.7-beta + +ALTER TABLE [dbo].[session] ALTER COLUMN [sess_id] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL +GO diff --git a/data/web/rc/SQL/mssql/2011121400.sql b/data/web/rc/SQL/mssql/2011121400.sql new file mode 100644 index 00000000..fde63ea7 --- /dev/null +++ b/data/web/rc/SQL/mssql/2011121400.sql @@ -0,0 +1,9 @@ +-- Updates from version 0.7 + +ALTER TABLE [dbo].[contacts] DROP CONSTRAINT [DF_contacts_email] +GO +ALTER TABLE [dbo].[contacts] ALTER COLUMN [email] [text] COLLATE Latin1_General_CI_AI NOT NULL +GO +ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [DF_contacts_email] DEFAULT ('') FOR [email] +GO + \ No newline at end of file diff --git a/data/web/rc/SQL/mssql/2012051800.sql b/data/web/rc/SQL/mssql/2012051800.sql new file mode 100644 index 00000000..8dcf7bfc --- /dev/null +++ b/data/web/rc/SQL/mssql/2012051800.sql @@ -0,0 +1,18 @@ +-- Updates from version 0.8-rc + +ALTER TABLE [dbo].[contacts] DROP CONSTRAINT [DF_contacts_email] +GO +ALTER TABLE [dbo].[contacts] ALTER COLUMN [email] [varchar] (8000) COLLATE Latin1_General_CI_AI NOT NULL +GO +ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [DF_contacts_email] DEFAULT ('') FOR [email] +GO + +-- Updates from version 0.8 + +ALTER TABLE [dbo].[cache] DROP COLUMN [cache_id] +GO +ALTER TABLE [dbo].[users] DROP COLUMN [alias] +GO +CREATE INDEX [IX_identities_email] ON [dbo].[identities]([email],[del]) ON [PRIMARY] +GO + \ No newline at end of file diff --git a/data/web/rc/SQL/mssql/2012080700.sql b/data/web/rc/SQL/mssql/2012080700.sql new file mode 100644 index 00000000..33e6133b --- /dev/null +++ b/data/web/rc/SQL/mssql/2012080700.sql @@ -0,0 +1,8 @@ +-- Updates from version 0.8 + +ALTER TABLE [dbo].[cache] DROP COLUMN [cache_id] +GO +ALTER TABLE [dbo].[users] DROP COLUMN [alias] +GO +CREATE INDEX [IX_identities_email] ON [dbo].[identities]([email],[del]) ON [PRIMARY] +GO diff --git a/data/web/rc/SQL/mssql/2013011000.sql b/data/web/rc/SQL/mssql/2013011000.sql new file mode 100644 index 00000000..2eb51e6b --- /dev/null +++ b/data/web/rc/SQL/mssql/2013011000.sql @@ -0,0 +1,14 @@ +-- Upgrades from 0.9-beta + +CREATE TABLE [dbo].[system] ( + [name] [varchar] (64) COLLATE Latin1_General_CI_AI NOT NULL , + [value] [text] COLLATE Latin1_General_CI_AI +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +ALTER TABLE [dbo].[system] WITH NOCHECK ADD + CONSTRAINT [PK_system_name] PRIMARY KEY CLUSTERED + ( + [name] + ) ON [PRIMARY] +GO diff --git a/data/web/rc/SQL/mssql/2013042700.sql b/data/web/rc/SQL/mssql/2013042700.sql new file mode 100644 index 00000000..fe6741a0 --- /dev/null +++ b/data/web/rc/SQL/mssql/2013042700.sql @@ -0,0 +1 @@ +-- empty \ No newline at end of file diff --git a/data/web/rc/SQL/mssql/2013052500.sql b/data/web/rc/SQL/mssql/2013052500.sql new file mode 100644 index 00000000..6a7e31d4 --- /dev/null +++ b/data/web/rc/SQL/mssql/2013052500.sql @@ -0,0 +1,17 @@ +CREATE TABLE [dbo].[cache_shared] ( + [cache_key] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL , + [created] [datetime] NOT NULL , + [data] [text] COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +ALTER TABLE [dbo].[cache_shared] ADD + CONSTRAINT [DF_cache_shared_created] DEFAULT (getdate()) FOR [created] +GO + +CREATE INDEX [IX_cache_shared_cache_key] ON [dbo].[cache_shared]([cache_key]) ON [PRIMARY] +GO + +CREATE INDEX [IX_cache_shared_created] ON [dbo].[cache_shared]([created]) ON [PRIMARY] +GO + diff --git a/data/web/rc/SQL/mssql/2013061000.sql b/data/web/rc/SQL/mssql/2013061000.sql new file mode 100644 index 00000000..5e8b791f --- /dev/null +++ b/data/web/rc/SQL/mssql/2013061000.sql @@ -0,0 +1,44 @@ +ALTER TABLE [dbo].[cache] ADD [expires] [datetime] NULL +GO +ALTER TABLE [dbo].[cache_shared] ADD [expires] [datetime] NULL +GO +ALTER TABLE [dbo].[cache_index] ADD [expires] [datetime] NULL +GO +ALTER TABLE [dbo].[cache_thread] ADD [expires] [datetime] NULL +GO +ALTER TABLE [dbo].[cache_messages] ADD [expires] [datetime] NULL +GO + +UPDATE [dbo].[cache] SET [expires] = DATEADD(second, 604800, [created]) +GO +UPDATE [dbo].[cache_shared] SET [expires] = DATEADD(second, 604800, [created]) +GO +UPDATE [dbo].[cache_index] SET [expires] = DATEADD(second, 604800, [changed]) +GO +UPDATE [dbo].[cache_thread] SET [expires] = DATEADD(second, 604800, [changed]) +GO +UPDATE [dbo].[cache_messages] SET [expires] = DATEADD(second, 604800, [changed]) +GO + +DROP INDEX [IX_cache_created] +GO +DROP INDEX [IX_cache_shared_created] +GO +ALTER TABLE [dbo].[cache_index] DROP COLUMN [changed] +GO +ALTER TABLE [dbo].[cache_thread] DROP COLUMN [changed] +GO +ALTER TABLE [dbo].[cache_messages] DROP COLUMN [changed] +GO + +CREATE INDEX [IX_cache_expires] ON [dbo].[cache]([expires]) ON [PRIMARY] +GO +CREATE INDEX [IX_cache_shared_expires] ON [dbo].[cache_shared]([expires]) ON [PRIMARY] +GO +CREATE INDEX [IX_cache_index_expires] ON [dbo].[cache_index]([expires]) ON [PRIMARY] +GO +CREATE INDEX [IX_cache_thread_expires] ON [dbo].[cache_thread]([expires]) ON [PRIMARY] +GO +CREATE INDEX [IX_cache_messages_expires] ON [dbo].[cache_messages]([expires]) ON [PRIMARY] +GO + \ No newline at end of file diff --git a/data/web/rc/SQL/mssql/2014042900.sql b/data/web/rc/SQL/mssql/2014042900.sql new file mode 100644 index 00000000..fe6741a0 --- /dev/null +++ b/data/web/rc/SQL/mssql/2014042900.sql @@ -0,0 +1 @@ +-- empty \ No newline at end of file diff --git a/data/web/rc/SQL/mssql/2015030800.sql b/data/web/rc/SQL/mssql/2015030800.sql new file mode 100644 index 00000000..fe6741a0 --- /dev/null +++ b/data/web/rc/SQL/mssql/2015030800.sql @@ -0,0 +1 @@ +-- empty \ No newline at end of file diff --git a/data/web/rc/SQL/mssql/2015111100.sql b/data/web/rc/SQL/mssql/2015111100.sql new file mode 100644 index 00000000..11c9da3c --- /dev/null +++ b/data/web/rc/SQL/mssql/2015111100.sql @@ -0,0 +1,4 @@ +ALTER TABLE [dbo].[users] ADD [failed_login] [datetime] NULL +GO +ALTER TABLE [dbo].[users] ADD [failed_login_counter] [int] NULL +GO diff --git a/data/web/rc/SQL/mssql/2016081200.sql b/data/web/rc/SQL/mssql/2016081200.sql new file mode 100644 index 00000000..3f866c39 --- /dev/null +++ b/data/web/rc/SQL/mssql/2016081200.sql @@ -0,0 +1,2 @@ +ALTER TABLE [dbo].[session] DROP COLUMN [created] +GO diff --git a/data/web/rc/SQL/mssql/2016100900.sql b/data/web/rc/SQL/mssql/2016100900.sql new file mode 100644 index 00000000..38b359a4 --- /dev/null +++ b/data/web/rc/SQL/mssql/2016100900.sql @@ -0,0 +1,2 @@ +ALTER TABLE [dbo].[session] ALTER COLUMN [ip] [varchar] (40) COLLATE Latin1_General_CI_AI NOT NULL +GO diff --git a/data/web/rc/SQL/mssql/2016112200.sql b/data/web/rc/SQL/mssql/2016112200.sql new file mode 100644 index 00000000..14d29b44 --- /dev/null +++ b/data/web/rc/SQL/mssql/2016112200.sql @@ -0,0 +1,36 @@ +DROP TABLE [dbo].[cache] +GO +DROP TABLE [dbo].[cache_shared] +GO + +CREATE TABLE [dbo].[cache] ( + [user_id] [int] NOT NULL , + [cache_key] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL , + [expires] [datetime] NULL , + [data] [text] COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO +CREATE TABLE [dbo].[cache_shared] ( + [cache_key] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL , + [expires] [datetime] NULL , + [data] [text] COLLATE Latin1_General_CI_AI NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO +ALTER TABLE [dbo].[cache] ADD + CONSTRAINT [DF_cache_user_id] DEFAULT ('0') FOR [user_id], + CONSTRAINT [DF_cache_cache_key] DEFAULT ('') FOR [cache_key], +GO +CREATE INDEX [IX_cache_expires] ON [dbo].[cache]([expires]) ON [PRIMARY] +GO +CREATE INDEX [IX_cache_shared_expires] ON [dbo].[cache_shared]([expires]) ON [PRIMARY] +GO +ALTER TABLE [dbo].[cache] WITH NOCHECK ADD + PRIMARY KEY CLUSTERED ( + [user_id],[cache_key] + ) ON [PRIMARY] +GO +ALTER TABLE [dbo].[cache_shared] WITH NOCHECK ADD + PRIMARY KEY CLUSTERED ( + [cache_key] + ) ON [PRIMARY] +GO diff --git a/data/web/rc/SQL/mysql.initial.sql b/data/web/rc/SQL/mysql.initial.sql new file mode 100644 index 00000000..c3ce7074 --- /dev/null +++ b/data/web/rc/SQL/mysql.initial.sql @@ -0,0 +1,212 @@ +-- Roundcube Webmail initial database structure + + +/*!40014 SET FOREIGN_KEY_CHECKS=0 */; + +-- Table structure for table `session` + +CREATE TABLE `session` ( + `sess_id` varchar(128) NOT NULL, + `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + `ip` varchar(40) NOT NULL, + `vars` mediumtext NOT NULL, + PRIMARY KEY(`sess_id`), + INDEX `changed_index` (`changed`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + + +-- Table structure for table `users` + +CREATE TABLE `users` ( + `user_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `username` varchar(128) BINARY NOT NULL, + `mail_host` varchar(128) NOT NULL, + `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + `last_login` datetime DEFAULT NULL, + `failed_login` datetime DEFAULT NULL, + `failed_login_counter` int(10) UNSIGNED DEFAULT NULL, + `language` varchar(5), + `preferences` longtext, + PRIMARY KEY(`user_id`), + UNIQUE `username` (`username`, `mail_host`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + + +-- Table structure for table `cache` + +CREATE TABLE `cache` ( + `user_id` int(10) UNSIGNED NOT NULL, + `cache_key` varchar(128) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL, + `expires` datetime DEFAULT NULL, + `data` longtext NOT NULL, + PRIMARY KEY (`user_id`, `cache_key`), + CONSTRAINT `user_id_fk_cache` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `expires_index` (`expires`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + + +-- Table structure for table `cache_shared` + +CREATE TABLE `cache_shared` ( + `cache_key` varchar(255) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL, + `expires` datetime DEFAULT NULL, + `data` longtext NOT NULL, + PRIMARY KEY (`cache_key`), + INDEX `expires_index` (`expires`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + + +-- Table structure for table `cache_index` + +CREATE TABLE `cache_index` ( + `user_id` int(10) UNSIGNED NOT NULL, + `mailbox` varchar(255) BINARY NOT NULL, + `expires` datetime DEFAULT NULL, + `valid` tinyint(1) NOT NULL DEFAULT '0', + `data` longtext NOT NULL, + CONSTRAINT `user_id_fk_cache_index` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `expires_index` (`expires`), + PRIMARY KEY (`user_id`, `mailbox`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + + +-- Table structure for table `cache_thread` + +CREATE TABLE `cache_thread` ( + `user_id` int(10) UNSIGNED NOT NULL, + `mailbox` varchar(255) BINARY NOT NULL, + `expires` datetime DEFAULT NULL, + `data` longtext NOT NULL, + CONSTRAINT `user_id_fk_cache_thread` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `expires_index` (`expires`), + PRIMARY KEY (`user_id`, `mailbox`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + + +-- Table structure for table `cache_messages` + +CREATE TABLE `cache_messages` ( + `user_id` int(10) UNSIGNED NOT NULL, + `mailbox` varchar(255) BINARY NOT NULL, + `uid` int(11) UNSIGNED NOT NULL DEFAULT '0', + `expires` datetime DEFAULT NULL, + `data` longtext NOT NULL, + `flags` int(11) NOT NULL DEFAULT '0', + CONSTRAINT `user_id_fk_cache_messages` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `expires_index` (`expires`), + PRIMARY KEY (`user_id`, `mailbox`, `uid`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + + +-- Table structure for table `contacts` + +CREATE TABLE `contacts` ( + `contact_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + `del` tinyint(1) NOT NULL DEFAULT '0', + `name` varchar(128) NOT NULL DEFAULT '', + `email` text NOT NULL, + `firstname` varchar(128) NOT NULL DEFAULT '', + `surname` varchar(128) NOT NULL DEFAULT '', + `vcard` longtext NULL, + `words` text NULL, + `user_id` int(10) UNSIGNED NOT NULL, + PRIMARY KEY(`contact_id`), + CONSTRAINT `user_id_fk_contacts` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `user_contacts_index` (`user_id`,`del`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + +-- Table structure for table `contactgroups` + +CREATE TABLE `contactgroups` ( + `contactgroup_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` int(10) UNSIGNED NOT NULL, + `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + `del` tinyint(1) NOT NULL DEFAULT '0', + `name` varchar(128) NOT NULL DEFAULT '', + PRIMARY KEY(`contactgroup_id`), + CONSTRAINT `user_id_fk_contactgroups` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `contactgroups_user_index` (`user_id`,`del`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + +CREATE TABLE `contactgroupmembers` ( + `contactgroup_id` int(10) UNSIGNED NOT NULL, + `contact_id` int(10) UNSIGNED NOT NULL, + `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + PRIMARY KEY (`contactgroup_id`, `contact_id`), + CONSTRAINT `contactgroup_id_fk_contactgroups` FOREIGN KEY (`contactgroup_id`) + REFERENCES `contactgroups`(`contactgroup_id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `contact_id_fk_contacts` FOREIGN KEY (`contact_id`) + REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `contactgroupmembers_contact_index` (`contact_id`) +) /*!40000 ENGINE=INNODB */; + + +-- Table structure for table `identities` + +CREATE TABLE `identities` ( + `identity_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` int(10) UNSIGNED NOT NULL, + `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + `del` tinyint(1) NOT NULL DEFAULT '0', + `standard` tinyint(1) NOT NULL DEFAULT '0', + `name` varchar(128) NOT NULL, + `organization` varchar(128) NOT NULL DEFAULT '', + `email` varchar(128) NOT NULL, + `reply-to` varchar(128) NOT NULL DEFAULT '', + `bcc` varchar(128) NOT NULL DEFAULT '', + `signature` longtext, + `html_signature` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY(`identity_id`), + CONSTRAINT `user_id_fk_identities` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `user_identities_index` (`user_id`, `del`), + INDEX `email_identities_index` (`email`, `del`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + + +-- Table structure for table `dictionary` + +CREATE TABLE `dictionary` ( + `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, -- redundant, for compat. with Galera Cluster + `user_id` int(10) UNSIGNED DEFAULT NULL, -- NULL here is for "shared dictionaries" + `language` varchar(5) NOT NULL, + `data` longtext NOT NULL, + CONSTRAINT `user_id_fk_dictionary` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + UNIQUE `uniqueness` (`user_id`, `language`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + + +-- Table structure for table `searches` + +CREATE TABLE `searches` ( + `search_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` int(10) UNSIGNED NOT NULL, + `type` int(3) NOT NULL DEFAULT '0', + `name` varchar(128) NOT NULL, + `data` text, + PRIMARY KEY(`search_id`), + CONSTRAINT `user_id_fk_searches` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + UNIQUE `uniqueness` (`user_id`, `type`, `name`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + + +-- Table structure for table `system` + +CREATE TABLE `system` ( + `name` varchar(64) NOT NULL, + `value` mediumtext, + PRIMARY KEY(`name`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + +/*!40014 SET FOREIGN_KEY_CHECKS=1 */; + +INSERT INTO system (name, value) VALUES ('roundcube-version', '2016112200'); diff --git a/data/web/rc/SQL/mysql/2008030300.sql b/data/web/rc/SQL/mysql/2008030300.sql new file mode 100644 index 00000000..9a3d0484 --- /dev/null +++ b/data/web/rc/SQL/mysql/2008030300.sql @@ -0,0 +1,16 @@ +-- Updates from version 0.1-stable + +TRUNCATE TABLE `messages`; + +ALTER TABLE `messages` + DROP INDEX `idx`, + DROP INDEX `uid`; + +ALTER TABLE `cache` + DROP INDEX `cache_key`, + DROP INDEX `session_id`, + ADD INDEX `user_cache_index` (`user_id`,`cache_key`); + +ALTER TABLE `users` + ADD INDEX `username_index` (`username`), + ADD INDEX `alias_index` (`alias`); diff --git a/data/web/rc/SQL/mysql/2008040500.sql b/data/web/rc/SQL/mysql/2008040500.sql new file mode 100644 index 00000000..f538f637 --- /dev/null +++ b/data/web/rc/SQL/mysql/2008040500.sql @@ -0,0 +1,9 @@ +-- Updates from version 0.1.1 + +ALTER TABLE `identities` + MODIFY `signature` text, + MODIFY `bcc` varchar(128) NOT NULL DEFAULT '', + MODIFY `reply-to` varchar(128) NOT NULL DEFAULT '', + MODIFY `organization` varchar(128) NOT NULL DEFAULT '', + MODIFY `name` varchar(128) NOT NULL, + MODIFY `email` varchar(128) NOT NULL; diff --git a/data/web/rc/SQL/mysql/2008060900.sql b/data/web/rc/SQL/mysql/2008060900.sql new file mode 100644 index 00000000..9f8de0a5 --- /dev/null +++ b/data/web/rc/SQL/mysql/2008060900.sql @@ -0,0 +1,4 @@ +-- Updates from version 0.2-alpha + +ALTER TABLE `messages` + ADD INDEX `created_index` (`created`); diff --git a/data/web/rc/SQL/mysql/2008092100.sql b/data/web/rc/SQL/mysql/2008092100.sql new file mode 100644 index 00000000..3989c75f --- /dev/null +++ b/data/web/rc/SQL/mysql/2008092100.sql @@ -0,0 +1,20 @@ +-- Updates from version 0.2-beta (InnoDB required) + +ALTER TABLE `cache` + DROP `session_id`; + +ALTER TABLE `session` + ADD INDEX `changed_index` (`changed`); + +ALTER TABLE `cache` + ADD INDEX `created_index` (`created`); + +ALTER TABLE `users` + CHANGE `language` `language` varchar(5); + +ALTER TABLE `cache` ENGINE=InnoDB; +ALTER TABLE `session` ENGINE=InnoDB; +ALTER TABLE `messages` ENGINE=InnoDB; +ALTER TABLE `users` ENGINE=InnoDB; +ALTER TABLE `contacts` ENGINE=InnoDB; +ALTER TABLE `identities` ENGINE=InnoDB; diff --git a/data/web/rc/SQL/mysql/2009090400.sql b/data/web/rc/SQL/mysql/2009090400.sql new file mode 100644 index 00000000..fd31bed5 --- /dev/null +++ b/data/web/rc/SQL/mysql/2009090400.sql @@ -0,0 +1,12 @@ +-- Updates from version 0.3-stable + +TRUNCATE `messages`; + +ALTER TABLE `messages` + ADD INDEX `index_index` (`user_id`, `cache_key`, `idx`); + +ALTER TABLE `session` + CHANGE `vars` `vars` MEDIUMTEXT NOT NULL; + +ALTER TABLE `contacts` + ADD INDEX `user_contacts_index` (`user_id`,`email`); diff --git a/data/web/rc/SQL/mysql/2009103100.sql b/data/web/rc/SQL/mysql/2009103100.sql new file mode 100644 index 00000000..aafbe238 --- /dev/null +++ b/data/web/rc/SQL/mysql/2009103100.sql @@ -0,0 +1,52 @@ +-- Updates from version 0.3.1 +-- WARNING: Make sure that all tables are using InnoDB engine!!! +-- If not, use: ALTER TABLE xxx ENGINE=InnoDB; + +/* MySQL bug workaround: http://bugs.mysql.com/bug.php?id=46293 */ +/*!40014 SET FOREIGN_KEY_CHECKS=0 */; + +ALTER TABLE `messages` DROP FOREIGN KEY `user_id_fk_messages`; +ALTER TABLE `cache` DROP FOREIGN KEY `user_id_fk_cache`; +ALTER TABLE `contacts` DROP FOREIGN KEY `user_id_fk_contacts`; +ALTER TABLE `identities` DROP FOREIGN KEY `user_id_fk_identities`; + +ALTER TABLE `messages` ADD CONSTRAINT `user_id_fk_messages` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE `cache` ADD CONSTRAINT `user_id_fk_cache` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE `contacts` ADD CONSTRAINT `user_id_fk_contacts` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE `identities` ADD CONSTRAINT `user_id_fk_identities` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE; + +ALTER TABLE `contacts` ALTER `name` SET DEFAULT ''; +ALTER TABLE `contacts` ALTER `firstname` SET DEFAULT ''; +ALTER TABLE `contacts` ALTER `surname` SET DEFAULT ''; + +ALTER TABLE `identities` ADD INDEX `user_identities_index` (`user_id`, `del`); +ALTER TABLE `identities` ADD `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00' AFTER `user_id`; + +CREATE TABLE `contactgroups` ( + `contactgroup_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0', + `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + `del` tinyint(1) NOT NULL DEFAULT '0', + `name` varchar(128) NOT NULL DEFAULT '', + PRIMARY KEY(`contactgroup_id`), + CONSTRAINT `user_id_fk_contactgroups` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `contactgroups_user_index` (`user_id`,`del`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + +CREATE TABLE `contactgroupmembers` ( + `contactgroup_id` int(10) UNSIGNED NOT NULL, + `contact_id` int(10) UNSIGNED NOT NULL DEFAULT '0', + `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + PRIMARY KEY (`contactgroup_id`, `contact_id`), + CONSTRAINT `contactgroup_id_fk_contactgroups` FOREIGN KEY (`contactgroup_id`) + REFERENCES `contactgroups`(`contactgroup_id`) ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT `contact_id_fk_contacts` FOREIGN KEY (`contact_id`) + REFERENCES `contacts`(`contact_id`) ON DELETE CASCADE ON UPDATE CASCADE +) /*!40000 ENGINE=INNODB */; + +/*!40014 SET FOREIGN_KEY_CHECKS=1 */; diff --git a/data/web/rc/SQL/mysql/2010042300.sql b/data/web/rc/SQL/mysql/2010042300.sql new file mode 100644 index 00000000..8b90af45 --- /dev/null +++ b/data/web/rc/SQL/mysql/2010042300.sql @@ -0,0 +1,4 @@ +-- Updates from version 0.4-beta + +ALTER TABLE `users` CHANGE `last_login` `last_login` datetime DEFAULT NULL; +UPDATE `users` SET `last_login` = NULL WHERE `last_login` = '1000-01-01 00:00:00'; diff --git a/data/web/rc/SQL/mysql/2010100600.sql b/data/web/rc/SQL/mysql/2010100600.sql new file mode 100644 index 00000000..ca0fec85 --- /dev/null +++ b/data/web/rc/SQL/mysql/2010100600.sql @@ -0,0 +1,8 @@ +-- Updates from version 0.4.2 + +ALTER TABLE `users` DROP INDEX `username_index`; +ALTER TABLE `users` ADD UNIQUE `username` (`username`, `mail_host`); + +ALTER TABLE `contacts` MODIFY `email` varchar(255) NOT NULL; + +TRUNCATE TABLE `messages`; diff --git a/data/web/rc/SQL/mysql/2011011200.sql b/data/web/rc/SQL/mysql/2011011200.sql new file mode 100644 index 00000000..6597034c --- /dev/null +++ b/data/web/rc/SQL/mysql/2011011200.sql @@ -0,0 +1,8 @@ +-- Updates from version 0.5.x + +ALTER TABLE `contacts` ADD `words` TEXT NULL AFTER `vcard`; +ALTER TABLE `contacts` CHANGE `vcard` `vcard` LONGTEXT /*!40101 CHARACTER SET utf8 */ NULL DEFAULT NULL; +ALTER TABLE `contactgroupmembers` ADD INDEX `contactgroupmembers_contact_index` (`contact_id`); + +TRUNCATE TABLE `messages`; +TRUNCATE TABLE `cache`; diff --git a/data/web/rc/SQL/mysql/2011092800.sql b/data/web/rc/SQL/mysql/2011092800.sql new file mode 100644 index 00000000..6b7cbe1f --- /dev/null +++ b/data/web/rc/SQL/mysql/2011092800.sql @@ -0,0 +1,67 @@ +-- Updates from version 0.6 + +/*!40014 SET FOREIGN_KEY_CHECKS=0 */; + +ALTER TABLE `users` CHANGE `alias` `alias` varchar(128) BINARY NOT NULL; +ALTER TABLE `users` CHANGE `username` `username` varchar(128) BINARY NOT NULL; + +CREATE TABLE `dictionary` ( + `user_id` int(10) UNSIGNED DEFAULT NULL, + `language` varchar(5) NOT NULL, + `data` longtext NOT NULL, + CONSTRAINT `user_id_fk_dictionary` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + UNIQUE `uniqueness` (`user_id`, `language`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + +CREATE TABLE `searches` ( + `search_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, + `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0', + `type` int(3) NOT NULL DEFAULT '0', + `name` varchar(128) NOT NULL, + `data` text, + PRIMARY KEY(`search_id`), + CONSTRAINT `user_id_fk_searches` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + UNIQUE `uniqueness` (`user_id`, `type`, `name`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + +DROP TABLE `messages`; + +CREATE TABLE `cache_index` ( + `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0', + `mailbox` varchar(255) BINARY NOT NULL, + `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + `valid` tinyint(1) NOT NULL DEFAULT '0', + `data` longtext NOT NULL, + CONSTRAINT `user_id_fk_cache_index` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `changed_index` (`changed`), + PRIMARY KEY (`user_id`, `mailbox`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + +CREATE TABLE `cache_thread` ( + `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0', + `mailbox` varchar(255) BINARY NOT NULL, + `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + `data` longtext NOT NULL, + CONSTRAINT `user_id_fk_cache_thread` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `changed_index` (`changed`), + PRIMARY KEY (`user_id`, `mailbox`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + +CREATE TABLE `cache_messages` ( + `user_id` int(10) UNSIGNED NOT NULL DEFAULT '0', + `mailbox` varchar(255) BINARY NOT NULL, + `uid` int(11) UNSIGNED NOT NULL DEFAULT '0', + `changed` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + `data` longtext NOT NULL, + `flags` int(11) NOT NULL DEFAULT '0', + CONSTRAINT `user_id_fk_cache_messages` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `changed_index` (`changed`), + PRIMARY KEY (`user_id`, `mailbox`, `uid`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + +/*!40014 SET FOREIGN_KEY_CHECKS=1 */; diff --git a/data/web/rc/SQL/mysql/2011111600.sql b/data/web/rc/SQL/mysql/2011111600.sql new file mode 100644 index 00000000..6f53daa9 --- /dev/null +++ b/data/web/rc/SQL/mysql/2011111600.sql @@ -0,0 +1,3 @@ +-- Updates from version 0.7-beta + +ALTER TABLE `session` CHANGE `sess_id` `sess_id` varchar(128) NOT NULL; diff --git a/data/web/rc/SQL/mysql/2011121400.sql b/data/web/rc/SQL/mysql/2011121400.sql new file mode 100644 index 00000000..5aee8060 --- /dev/null +++ b/data/web/rc/SQL/mysql/2011121400.sql @@ -0,0 +1,22 @@ +-- Updates from version 0.7 + +/*!40014 SET FOREIGN_KEY_CHECKS=0 */; + +ALTER TABLE `contacts` DROP FOREIGN KEY `user_id_fk_contacts`; +ALTER TABLE `contacts` DROP INDEX `user_contacts_index`; +ALTER TABLE `contacts` MODIFY `email` text NOT NULL; +ALTER TABLE `contacts` ADD INDEX `user_contacts_index` (`user_id`,`del`); +ALTER TABLE `contacts` ADD CONSTRAINT `user_id_fk_contacts` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE; + +ALTER TABLE `cache` ALTER `user_id` DROP DEFAULT; +ALTER TABLE `cache_index` ALTER `user_id` DROP DEFAULT; +ALTER TABLE `cache_thread` ALTER `user_id` DROP DEFAULT; +ALTER TABLE `cache_messages` ALTER `user_id` DROP DEFAULT; +ALTER TABLE `contacts` ALTER `user_id` DROP DEFAULT; +ALTER TABLE `contactgroups` ALTER `user_id` DROP DEFAULT; +ALTER TABLE `contactgroupmembers` ALTER `contact_id` DROP DEFAULT; +ALTER TABLE `identities` ALTER `user_id` DROP DEFAULT; +ALTER TABLE `searches` ALTER `user_id` DROP DEFAULT; + +/*!40014 SET FOREIGN_KEY_CHECKS=1 */; diff --git a/data/web/rc/SQL/mysql/2012080700.sql b/data/web/rc/SQL/mysql/2012080700.sql new file mode 100644 index 00000000..789b7122 --- /dev/null +++ b/data/web/rc/SQL/mysql/2012080700.sql @@ -0,0 +1,5 @@ +-- Updates from version 0.8 + +ALTER TABLE `cache` DROP COLUMN `cache_id`; +ALTER TABLE `users` DROP COLUMN `alias`; +ALTER TABLE `identities` ADD INDEX `email_identities_index` (`email`, `del`); diff --git a/data/web/rc/SQL/mysql/2013011000.sql b/data/web/rc/SQL/mysql/2013011000.sql new file mode 100644 index 00000000..d1ea001d --- /dev/null +++ b/data/web/rc/SQL/mysql/2013011000.sql @@ -0,0 +1,7 @@ +-- Upgrade from 0.9-beta + +CREATE TABLE IF NOT EXISTS `system` ( + `name` varchar(64) NOT NULL, + `value` mediumtext, + PRIMARY KEY(`name`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; diff --git a/data/web/rc/SQL/mysql/2013042700.sql b/data/web/rc/SQL/mysql/2013042700.sql new file mode 100644 index 00000000..fe6741a0 --- /dev/null +++ b/data/web/rc/SQL/mysql/2013042700.sql @@ -0,0 +1 @@ +-- empty \ No newline at end of file diff --git a/data/web/rc/SQL/mysql/2013052500.sql b/data/web/rc/SQL/mysql/2013052500.sql new file mode 100644 index 00000000..b5f72b8a --- /dev/null +++ b/data/web/rc/SQL/mysql/2013052500.sql @@ -0,0 +1,7 @@ +CREATE TABLE `cache_shared` ( + `cache_key` varchar(255) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL, + `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00', + `data` longtext NOT NULL, + INDEX `created_index` (`created`), + INDEX `cache_key_index` (`cache_key`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; diff --git a/data/web/rc/SQL/mysql/2013061000.sql b/data/web/rc/SQL/mysql/2013061000.sql new file mode 100644 index 00000000..54041b34 --- /dev/null +++ b/data/web/rc/SQL/mysql/2013061000.sql @@ -0,0 +1,24 @@ +ALTER TABLE `cache` ADD `expires` datetime DEFAULT NULL; +ALTER TABLE `cache_shared` ADD `expires` datetime DEFAULT NULL; +ALTER TABLE `cache_index` ADD `expires` datetime DEFAULT NULL; +ALTER TABLE `cache_thread` ADD `expires` datetime DEFAULT NULL; +ALTER TABLE `cache_messages` ADD `expires` datetime DEFAULT NULL; + +-- initialize expires column with created/changed date + 7days +UPDATE `cache` SET `expires` = `created` + interval 604800 second; +UPDATE `cache_shared` SET `expires` = `created` + interval 604800 second; +UPDATE `cache_index` SET `expires` = `changed` + interval 604800 second; +UPDATE `cache_thread` SET `expires` = `changed` + interval 604800 second; +UPDATE `cache_messages` SET `expires` = `changed` + interval 604800 second; + +ALTER TABLE `cache` DROP INDEX `created_index`; +ALTER TABLE `cache_shared` DROP INDEX `created_index`; +ALTER TABLE `cache_index` DROP `changed`; +ALTER TABLE `cache_thread` DROP `changed`; +ALTER TABLE `cache_messages` DROP `changed`; + +ALTER TABLE `cache` ADD INDEX `expires_index` (`expires`); +ALTER TABLE `cache_shared` ADD INDEX `expires_index` (`expires`); +ALTER TABLE `cache_index` ADD INDEX `expires_index` (`expires`); +ALTER TABLE `cache_thread` ADD INDEX `expires_index` (`expires`); +ALTER TABLE `cache_messages` ADD INDEX `expires_index` (`expires`); diff --git a/data/web/rc/SQL/mysql/2014042900.sql b/data/web/rc/SQL/mysql/2014042900.sql new file mode 100644 index 00000000..9d93716d --- /dev/null +++ b/data/web/rc/SQL/mysql/2014042900.sql @@ -0,0 +1 @@ +ALTER TABLE `users` CHANGE `preferences` `preferences` longtext; diff --git a/data/web/rc/SQL/mysql/2015030800.sql b/data/web/rc/SQL/mysql/2015030800.sql new file mode 100644 index 00000000..5ff6f149 --- /dev/null +++ b/data/web/rc/SQL/mysql/2015030800.sql @@ -0,0 +1 @@ +ALTER TABLE `identities` CHANGE `signature` `signature` longtext; diff --git a/data/web/rc/SQL/mysql/2015111100.sql b/data/web/rc/SQL/mysql/2015111100.sql new file mode 100644 index 00000000..08ea8fce --- /dev/null +++ b/data/web/rc/SQL/mysql/2015111100.sql @@ -0,0 +1,3 @@ +ALTER TABLE `users` + ADD `failed_login` datetime DEFAULT NULL, + ADD `failed_login_counter` int(10) UNSIGNED DEFAULT NULL; diff --git a/data/web/rc/SQL/mysql/2016081200.sql b/data/web/rc/SQL/mysql/2016081200.sql new file mode 100644 index 00000000..aa09087a --- /dev/null +++ b/data/web/rc/SQL/mysql/2016081200.sql @@ -0,0 +1 @@ +ALTER TABLE `session` DROP COLUMN `created`; diff --git a/data/web/rc/SQL/mysql/2016100900.sql b/data/web/rc/SQL/mysql/2016100900.sql new file mode 100644 index 00000000..ea096e9f --- /dev/null +++ b/data/web/rc/SQL/mysql/2016100900.sql @@ -0,0 +1 @@ +ALTER TABLE `session` MODIFY `ip` varchar(40) NOT NULL; diff --git a/data/web/rc/SQL/mysql/2016112200.sql b/data/web/rc/SQL/mysql/2016112200.sql new file mode 100644 index 00000000..62c97494 --- /dev/null +++ b/data/web/rc/SQL/mysql/2016112200.sql @@ -0,0 +1,24 @@ +ALTER TABLE `dictionary` ADD COLUMN `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; -- redundant, for compat. with Galera Cluster + +DROP TABLE `cache`; +DROP TABLE `cache_shared`; + +CREATE TABLE `cache` ( + `user_id` int(10) UNSIGNED NOT NULL, + `cache_key` varchar(128) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL, + `expires` datetime DEFAULT NULL, + `data` longtext NOT NULL, + PRIMARY KEY (`user_id`, `cache_key`), + CONSTRAINT `user_id_fk_cache` FOREIGN KEY (`user_id`) + REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE, + INDEX `expires_index` (`expires`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; + + +CREATE TABLE `cache_shared` ( + `cache_key` varchar(255) /*!40101 CHARACTER SET ascii COLLATE ascii_general_ci */ NOT NULL, + `expires` datetime DEFAULT NULL, + `data` longtext NOT NULL, + PRIMARY KEY (`cache_key`), + INDEX `expires_index` (`expires`) +) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; diff --git a/data/web/rc/SQL/oracle.initial.sql b/data/web/rc/SQL/oracle.initial.sql new file mode 100644 index 00000000..164ae713 --- /dev/null +++ b/data/web/rc/SQL/oracle.initial.sql @@ -0,0 +1,220 @@ +-- Roundcube Webmail initial database structure +-- This was tested with Oracle 11g + +CREATE TABLE "users" ( + "user_id" integer PRIMARY KEY, + "username" varchar(128) NOT NULL, + "mail_host" varchar(128) NOT NULL, + "created" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "last_login" timestamp with time zone DEFAULT NULL, + "failed_login" timestamp with time zone DEFAULT NULL, + "failed_login_counter" integer DEFAULT NULL, + "language" varchar(5), + "preferences" long DEFAULT NULL, + CONSTRAINT "users_username_key" UNIQUE ("username", "mail_host") +); + +CREATE SEQUENCE "users_seq" + START WITH 1 INCREMENT BY 1 NOMAXVALUE; + +CREATE TRIGGER "users_seq_trig" +BEFORE INSERT ON "users" FOR EACH ROW +BEGIN + :NEW."user_id" := "users_seq".nextval; +END; +/ + +CREATE TABLE "session" ( + "sess_id" varchar(128) NOT NULL PRIMARY KEY, + "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "ip" varchar(41) NOT NULL, + "vars" long NOT NULL +); + +CREATE INDEX "session_changed_idx" ON "session" ("changed"); + + +CREATE TABLE "identities" ( + "identity_id" integer PRIMARY KEY, + "user_id" integer NOT NULL + REFERENCES "users" ("user_id") ON DELETE CASCADE, + "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "del" smallint DEFAULT 0 NOT NULL, + "standard" smallint DEFAULT 0 NOT NULL, + "name" varchar(128) NOT NULL, + "organization" varchar(128), + "email" varchar(128) NOT NULL, + "reply-to" varchar(128), + "bcc" varchar(128), + "signature" long, + "html_signature" integer DEFAULT 0 NOT NULL +); + +CREATE INDEX "identities_user_id_idx" ON "identities" ("user_id", "del"); +CREATE INDEX "identities_email_idx" ON "identities" ("email", "del"); + +CREATE SEQUENCE "identities_seq" + START WITH 1 INCREMENT BY 1 NOMAXVALUE; + +CREATE TRIGGER "identities_seq_trig" +BEFORE INSERT ON "identities" FOR EACH ROW +BEGIN + :NEW."identity_id" := "identities_seq".nextval; +END; +/ + +CREATE TABLE "contacts" ( + "contact_id" integer PRIMARY KEY, + "user_id" integer NOT NULL + REFERENCES "users" ("user_id") ON DELETE CASCADE, + "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "del" smallint DEFAULT 0 NOT NULL, + "name" varchar(128) DEFAULT NULL, + "email" varchar(4000) DEFAULT NULL, + "firstname" varchar(128) DEFAULT NULL, + "surname" varchar(128) DEFAULT NULL, + "vcard" long, + "words" varchar(4000) +); + +CREATE INDEX "contacts_user_id_idx" ON "contacts" ("user_id", "del"); + +CREATE SEQUENCE "contacts_seq" + START WITH 1 INCREMENT BY 1 NOMAXVALUE; + +CREATE TRIGGER "contacts_seq_trig" +BEFORE INSERT ON "contacts" FOR EACH ROW +BEGIN + :NEW."contact_id" := "contacts_seq".nextval; +END; +/ + +CREATE TABLE "contactgroups" ( + "contactgroup_id" integer PRIMARY KEY, + "user_id" integer NOT NULL + REFERENCES "users" ("user_id") ON DELETE CASCADE, + "changed" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "del" smallint DEFAULT 0 NOT NULL, + "name" varchar(128) NOT NULL +); + +CREATE INDEX "contactgroups_user_id_idx" ON "contactgroups" ("user_id", "del"); + +CREATE SEQUENCE "contactgroups_seq" + START WITH 1 INCREMENT BY 1 NOMAXVALUE; + +CREATE TRIGGER "contactgroups_seq_trig" +BEFORE INSERT ON "contactgroups" FOR EACH ROW +BEGIN + :NEW."contactgroup_id" := "contactgroups_seq".nextval; +END; +/ + +CREATE TABLE "contactgroupmembers" ( + "contactgroup_id" integer NOT NULL + REFERENCES "contactgroups" ("contactgroup_id") ON DELETE CASCADE, + "contact_id" integer NOT NULL + REFERENCES "contacts" ("contact_id") ON DELETE CASCADE, + "created" timestamp with time zone DEFAULT current_timestamp NOT NULL, + PRIMARY KEY ("contactgroup_id", "contact_id") +); + +CREATE INDEX "contactgroupmembers_idx" ON "contactgroupmembers" ("contact_id"); + + +CREATE TABLE "cache" ( + "user_id" integer NOT NULL + REFERENCES "users" ("user_id") ON DELETE CASCADE, + "cache_key" varchar(128) NOT NULL, + "expires" timestamp with time zone DEFAULT NULL, + "data" long NOT NULL, + PRIMARY KEY ("user_id", "cache_key") +); + +CREATE INDEX "cache_expires_idx" ON "cache" ("expires"); + + +CREATE TABLE "cache_shared" ( + "cache_key" varchar(255) NOT NULL, + "expires" timestamp with time zone DEFAULT NULL, + "data" long NOT NULL, + PRIMARY KEY ("cache_key") +); + +CREATE INDEX "cache_shared_expires_idx" ON "cache_shared" ("expires"); + + +CREATE TABLE "cache_index" ( + "user_id" integer NOT NULL + REFERENCES "users" ("user_id") ON DELETE CASCADE, + "mailbox" varchar(255) NOT NULL, + "expires" timestamp with time zone DEFAULT NULL, + "valid" smallint DEFAULT 0 NOT NULL, + "data" long NOT NULL, + PRIMARY KEY ("user_id", "mailbox") +); + +CREATE INDEX "cache_index_expires_idx" ON "cache_index" ("expires"); + + +CREATE TABLE "cache_thread" ( + "user_id" integer NOT NULL + REFERENCES "users" ("user_id") ON DELETE CASCADE, + "mailbox" varchar(255) NOT NULL, + "expires" timestamp with time zone DEFAULT NULL, + "data" long NOT NULL, + PRIMARY KEY ("user_id", "mailbox") +); + +CREATE INDEX "cache_thread_expires_idx" ON "cache_thread" ("expires"); + + +CREATE TABLE "cache_messages" ( + "user_id" integer NOT NULL + REFERENCES "users" ("user_id") ON DELETE CASCADE, + "mailbox" varchar(255) NOT NULL, + "uid" integer NOT NULL, + "expires" timestamp with time zone DEFAULT NULL, + "data" long NOT NULL, + "flags" integer DEFAULT 0 NOT NULL, + PRIMARY KEY ("user_id", "mailbox", "uid") +); + +CREATE INDEX "cache_messages_expires_idx" ON "cache_messages" ("expires"); + + +CREATE TABLE "dictionary" ( + "user_id" integer DEFAULT NULL + REFERENCES "users" ("user_id") ON DELETE CASCADE, + "language" varchar(5) NOT NULL, + "data" long DEFAULT NULL, + CONSTRAINT "dictionary_user_id_lang_key" UNIQUE ("user_id", "language") +); + + +CREATE TABLE "searches" ( + "search_id" integer PRIMARY KEY, + "user_id" integer NOT NULL + REFERENCES "users" ("user_id") ON DELETE CASCADE, + "type" smallint DEFAULT 0 NOT NULL, + "name" varchar(128) NOT NULL, + "data" long NOT NULL, + CONSTRAINT "searches_user_id_key" UNIQUE ("user_id", "type", "name") +); + +CREATE SEQUENCE "searches_seq" + START WITH 1 INCREMENT BY 1 NOMAXVALUE; + +CREATE TRIGGER "searches_seq_trig" +BEFORE INSERT ON "searches" FOR EACH ROW +BEGIN + :NEW."search_id" := "searches_seq".nextval; +END; +/ + +CREATE TABLE "system" ( + "name" varchar(64) NOT NULL PRIMARY KEY, + "value" long +); + +INSERT INTO "system" ("name", "value") VALUES ('roundcube-version', '2016112200'); diff --git a/data/web/rc/SQL/oracle/2015030800.sql b/data/web/rc/SQL/oracle/2015030800.sql new file mode 100644 index 00000000..fe6741a0 --- /dev/null +++ b/data/web/rc/SQL/oracle/2015030800.sql @@ -0,0 +1 @@ +-- empty \ No newline at end of file diff --git a/data/web/rc/SQL/oracle/2015111100.sql b/data/web/rc/SQL/oracle/2015111100.sql new file mode 100644 index 00000000..010203f9 --- /dev/null +++ b/data/web/rc/SQL/oracle/2015111100.sql @@ -0,0 +1,2 @@ +ALTER TABLE "users" ADD "failed_login" timestamp with time zone DEFAULT NULL; +ALTER TABLE "users" ADD "failed_login_counter" integer DEFAULT NULL; diff --git a/data/web/rc/SQL/oracle/2016081200.sql b/data/web/rc/SQL/oracle/2016081200.sql new file mode 100644 index 00000000..aacfe418 --- /dev/null +++ b/data/web/rc/SQL/oracle/2016081200.sql @@ -0,0 +1 @@ +ALTER TABLE "session" DROP COLUMN "created"; diff --git a/data/web/rc/SQL/oracle/2016100900.sql b/data/web/rc/SQL/oracle/2016100900.sql new file mode 100644 index 00000000..030f169e --- /dev/null +++ b/data/web/rc/SQL/oracle/2016100900.sql @@ -0,0 +1 @@ +ALTER TABLE "session" MODIFY "ip" varchar(41) NOT NULL; diff --git a/data/web/rc/SQL/oracle/2016112200.sql b/data/web/rc/SQL/oracle/2016112200.sql new file mode 100644 index 00000000..3aab2651 --- /dev/null +++ b/data/web/rc/SQL/oracle/2016112200.sql @@ -0,0 +1,23 @@ +DROP TABLE "cache"; +DROP TABLE "cache_shared"; + +CREATE TABLE "cache" ( + "user_id" integer NOT NULL + REFERENCES "users" ("user_id") ON DELETE CASCADE, + "cache_key" varchar(128) NOT NULL, + "expires" timestamp with time zone DEFAULT NULL, + "data" long NOT NULL, + PRIMARY KEY ("user_id", "cache_key") +); + +CREATE INDEX "cache_expires_idx" ON "cache" ("expires"); + + +CREATE TABLE "cache_shared" ( + "cache_key" varchar(255) NOT NULL, + "expires" timestamp with time zone DEFAULT NULL, + "data" long NOT NULL, + PRIMARY KEY ("cache_key") +); + +CREATE INDEX "cache_shared_expires_idx" ON "cache_shared" ("expires"); diff --git a/data/web/rc/SQL/postgres.initial.sql b/data/web/rc/SQL/postgres.initial.sql new file mode 100644 index 00000000..13549969 --- /dev/null +++ b/data/web/rc/SQL/postgres.initial.sql @@ -0,0 +1,291 @@ +-- Roundcube Webmail initial database structure + +-- +-- Sequence "users_seq" +-- Name: users_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE users_seq + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + +-- +-- Table "users" +-- Name: users; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE users ( + user_id integer DEFAULT nextval('users_seq'::text) PRIMARY KEY, + username varchar(128) DEFAULT '' NOT NULL, + mail_host varchar(128) DEFAULT '' NOT NULL, + created timestamp with time zone DEFAULT now() NOT NULL, + last_login timestamp with time zone DEFAULT NULL, + failed_login timestamp with time zone DEFAULT NULL, + failed_login_counter integer DEFAULT NULL, + "language" varchar(5), + preferences text DEFAULT ''::text NOT NULL, + CONSTRAINT users_username_key UNIQUE (username, mail_host) +); + + +-- +-- Table "session" +-- Name: session; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE "session" ( + sess_id varchar(128) DEFAULT '' PRIMARY KEY, + changed timestamp with time zone DEFAULT now() NOT NULL, + ip varchar(41) NOT NULL, + vars text NOT NULL +); + +CREATE INDEX session_changed_idx ON session (changed); + + +-- +-- Sequence "identities_seq" +-- Name: identities_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE identities_seq + START WITH 1 + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + +-- +-- Table "identities" +-- Name: identities; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE identities ( + identity_id integer DEFAULT nextval('identities_seq'::text) PRIMARY KEY, + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + changed timestamp with time zone DEFAULT now() NOT NULL, + del smallint DEFAULT 0 NOT NULL, + standard smallint DEFAULT 0 NOT NULL, + name varchar(128) NOT NULL, + organization varchar(128), + email varchar(128) NOT NULL, + "reply-to" varchar(128), + bcc varchar(128), + signature text, + html_signature integer DEFAULT 0 NOT NULL +); + +CREATE INDEX identities_user_id_idx ON identities (user_id, del); +CREATE INDEX identities_email_idx ON identities (email, del); + + +-- +-- Sequence "contacts_seq" +-- Name: contacts_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE contacts_seq + START WITH 1 + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + +-- +-- Table "contacts" +-- Name: contacts; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE contacts ( + contact_id integer DEFAULT nextval('contacts_seq'::text) PRIMARY KEY, + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + changed timestamp with time zone DEFAULT now() NOT NULL, + del smallint DEFAULT 0 NOT NULL, + name varchar(128) DEFAULT '' NOT NULL, + email text DEFAULT '' NOT NULL, + firstname varchar(128) DEFAULT '' NOT NULL, + surname varchar(128) DEFAULT '' NOT NULL, + vcard text, + words text +); + +CREATE INDEX contacts_user_id_idx ON contacts (user_id, del); + +-- +-- Sequence "contactgroups_seq" +-- Name: contactgroups_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE contactgroups_seq + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + +-- +-- Table "contactgroups" +-- Name: contactgroups; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE contactgroups ( + contactgroup_id integer DEFAULT nextval('contactgroups_seq'::text) PRIMARY KEY, + user_id integer NOT NULL + REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE, + changed timestamp with time zone DEFAULT now() NOT NULL, + del smallint NOT NULL DEFAULT 0, + name varchar(128) NOT NULL DEFAULT '' +); + +CREATE INDEX contactgroups_user_id_idx ON contactgroups (user_id, del); + +-- +-- Table "contactgroupmembers" +-- Name: contactgroupmembers; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE contactgroupmembers ( + contactgroup_id integer NOT NULL + REFERENCES contactgroups(contactgroup_id) ON DELETE CASCADE ON UPDATE CASCADE, + contact_id integer NOT NULL + REFERENCES contacts(contact_id) ON DELETE CASCADE ON UPDATE CASCADE, + created timestamp with time zone DEFAULT now() NOT NULL, + PRIMARY KEY (contactgroup_id, contact_id) +); + +CREATE INDEX contactgroupmembers_contact_id_idx ON contactgroupmembers (contact_id); + +-- +-- Table "cache" +-- Name: cache; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE "cache" ( + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + cache_key varchar(128) DEFAULT '' NOT NULL, + expires timestamp with time zone DEFAULT NULL, + data text NOT NULL, + PRIMARY KEY (user_id, cache_key) +); + +CREATE INDEX cache_expires_idx ON "cache" (expires); + +-- +-- Table "cache_shared" +-- Name: cache_shared; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE "cache_shared" ( + cache_key varchar(255) NOT NULL PRIMARY KEY, + expires timestamp with time zone DEFAULT NULL, + data text NOT NULL +); + +CREATE INDEX cache_shared_expires_idx ON "cache_shared" (expires); + +-- +-- Table "cache_index" +-- Name: cache_index; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE cache_index ( + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + mailbox varchar(255) NOT NULL, + expires timestamp with time zone DEFAULT NULL, + valid smallint NOT NULL DEFAULT 0, + data text NOT NULL, + PRIMARY KEY (user_id, mailbox) +); + +CREATE INDEX cache_index_expires_idx ON cache_index (expires); + +-- +-- Table "cache_thread" +-- Name: cache_thread; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE cache_thread ( + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + mailbox varchar(255) NOT NULL, + expires timestamp with time zone DEFAULT NULL, + data text NOT NULL, + PRIMARY KEY (user_id, mailbox) +); + +CREATE INDEX cache_thread_expires_idx ON cache_thread (expires); + +-- +-- Table "cache_messages" +-- Name: cache_messages; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE cache_messages ( + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + mailbox varchar(255) NOT NULL, + uid integer NOT NULL, + expires timestamp with time zone DEFAULT NULL, + data text NOT NULL, + flags integer NOT NULL DEFAULT 0, + PRIMARY KEY (user_id, mailbox, uid) +); + +CREATE INDEX cache_messages_expires_idx ON cache_messages (expires); + +-- +-- Table "dictionary" +-- Name: dictionary; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE dictionary ( + user_id integer DEFAULT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + "language" varchar(5) NOT NULL, + data text NOT NULL, + CONSTRAINT dictionary_user_id_language_key UNIQUE (user_id, "language") +); + +-- +-- Sequence "searches_seq" +-- Name: searches_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE searches_seq + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + +-- +-- Table "searches" +-- Name: searches; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE searches ( + search_id integer DEFAULT nextval('searches_seq'::text) PRIMARY KEY, + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + "type" smallint DEFAULT 0 NOT NULL, + name varchar(128) NOT NULL, + data text NOT NULL, + CONSTRAINT searches_user_id_key UNIQUE (user_id, "type", name) +); + + +-- +-- Table "system" +-- Name: system; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE "system" ( + name varchar(64) NOT NULL PRIMARY KEY, + value text +); + +INSERT INTO system (name, value) VALUES ('roundcube-version', '2016112200'); diff --git a/data/web/rc/SQL/postgres/2008030300.sql b/data/web/rc/SQL/postgres/2008030300.sql new file mode 100644 index 00000000..67a8f158 --- /dev/null +++ b/data/web/rc/SQL/postgres/2008030300.sql @@ -0,0 +1,18 @@ +-- Updates from version 0.1-stable to 0.1.1 + +CREATE INDEX cache_user_id_idx ON cache (user_id, cache_key); +CREATE INDEX contacts_user_id_idx ON contacts (user_id); +CREATE INDEX identities_user_id_idx ON identities (user_id); + +CREATE INDEX users_username_id_idx ON users (username); +CREATE INDEX users_alias_id_idx ON users (alias); + +-- added ON DELETE/UPDATE actions +ALTER TABLE messages DROP CONSTRAINT messages_user_id_fkey; +ALTER TABLE messages ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE identities DROP CONSTRAINT identities_user_id_fkey; +ALTER TABLE identities ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE contacts DROP CONSTRAINT contacts_user_id_fkey; +ALTER TABLE contacts ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE; +ALTER TABLE cache DROP CONSTRAINT cache_user_id_fkey; +ALTER TABLE cache ADD FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/data/web/rc/SQL/postgres/2008060900.sql b/data/web/rc/SQL/postgres/2008060900.sql new file mode 100644 index 00000000..7c60a442 --- /dev/null +++ b/data/web/rc/SQL/postgres/2008060900.sql @@ -0,0 +1,3 @@ +-- Updates from version 0.2-alpha + +CREATE INDEX messages_created_idx ON messages (created); diff --git a/data/web/rc/SQL/postgres/2008092100.sql b/data/web/rc/SQL/postgres/2008092100.sql new file mode 100644 index 00000000..6cd19290 --- /dev/null +++ b/data/web/rc/SQL/postgres/2008092100.sql @@ -0,0 +1,14 @@ +-- Updates from version 0.2-beta + +ALTER TABLE cache DROP session_id; + +CREATE INDEX session_changed_idx ON session (changed); +CREATE INDEX cache_created_idx ON "cache" (created); + +ALTER TABLE users ALTER "language" DROP NOT NULL; +ALTER TABLE users ALTER "language" DROP DEFAULT; + +ALTER TABLE identities ALTER del TYPE smallint; +ALTER TABLE identities ALTER standard TYPE smallint; +ALTER TABLE contacts ALTER del TYPE smallint; +ALTER TABLE messages ALTER del TYPE smallint; diff --git a/data/web/rc/SQL/postgres/2009090400.sql b/data/web/rc/SQL/postgres/2009090400.sql new file mode 100644 index 00000000..8eb4949e --- /dev/null +++ b/data/web/rc/SQL/postgres/2009090400.sql @@ -0,0 +1,6 @@ +-- Updates from version 0.3-stable + +TRUNCATE messages; +CREATE INDEX messages_index_idx ON messages (user_id, cache_key, idx); +DROP INDEX contacts_user_id_idx; +CREATE INDEX contacts_user_id_idx ON contacts (user_id, email); diff --git a/data/web/rc/SQL/postgres/2009103100.sql b/data/web/rc/SQL/postgres/2009103100.sql new file mode 100644 index 00000000..2350f79f --- /dev/null +++ b/data/web/rc/SQL/postgres/2009103100.sql @@ -0,0 +1,32 @@ +-- Updates from version 0.3.1 + +DROP INDEX identities_user_id_idx; +CREATE INDEX identities_user_id_idx ON identities (user_id, del); + +ALTER TABLE identities ADD changed timestamp with time zone DEFAULT now() NOT NULL; + +CREATE SEQUENCE contactgroups_ids + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + +CREATE TABLE contactgroups ( + contactgroup_id integer DEFAULT nextval('contactgroups_ids'::text) PRIMARY KEY, + user_id integer NOT NULL + REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE, + changed timestamp with time zone DEFAULT now() NOT NULL, + del smallint NOT NULL DEFAULT 0, + name varchar(128) NOT NULL DEFAULT '' +); + +CREATE INDEX contactgroups_user_id_idx ON contactgroups (user_id, del); + +CREATE TABLE contactgroupmembers ( + contactgroup_id integer NOT NULL + REFERENCES contactgroups(contactgroup_id) ON DELETE CASCADE ON UPDATE CASCADE, + contact_id integer NOT NULL + REFERENCES contacts(contact_id) ON DELETE CASCADE ON UPDATE CASCADE, + created timestamp with time zone DEFAULT now() NOT NULL, + PRIMARY KEY (contactgroup_id, contact_id) +); diff --git a/data/web/rc/SQL/postgres/2010042300.sql b/data/web/rc/SQL/postgres/2010042300.sql new file mode 100644 index 00000000..bc9bd826 --- /dev/null +++ b/data/web/rc/SQL/postgres/2010042300.sql @@ -0,0 +1,4 @@ +-- Updates from version 0.4-beta + +ALTER TABLE users ALTER last_login DROP NOT NULL; +ALTER TABLE users ALTER last_login SET DEFAULT NULL; diff --git a/data/web/rc/SQL/postgres/2010100600.sql b/data/web/rc/SQL/postgres/2010100600.sql new file mode 100644 index 00000000..8dfcc12d --- /dev/null +++ b/data/web/rc/SQL/postgres/2010100600.sql @@ -0,0 +1,7 @@ +-- Updates from version 0.4.2 + +DROP INDEX users_username_id_idx; +ALTER TABLE users ADD CONSTRAINT users_username_key UNIQUE (username, mail_host); +ALTER TABLE contacts ALTER email TYPE varchar(255); + +TRUNCATE messages; diff --git a/data/web/rc/SQL/postgres/2011011200.sql b/data/web/rc/SQL/postgres/2011011200.sql new file mode 100644 index 00000000..db468d8e --- /dev/null +++ b/data/web/rc/SQL/postgres/2011011200.sql @@ -0,0 +1,7 @@ +-- Updates from version 0.5.x + +ALTER TABLE contacts ADD words TEXT NULL; +CREATE INDEX contactgroupmembers_contact_id_idx ON contactgroupmembers (contact_id); + +TRUNCATE messages; +TRUNCATE cache; diff --git a/data/web/rc/SQL/postgres/2011092800.sql b/data/web/rc/SQL/postgres/2011092800.sql new file mode 100644 index 00000000..fac3cd37 --- /dev/null +++ b/data/web/rc/SQL/postgres/2011092800.sql @@ -0,0 +1,64 @@ +-- Updates from version 0.6 + +CREATE TABLE dictionary ( + user_id integer DEFAULT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + "language" varchar(5) NOT NULL, + data text NOT NULL, + CONSTRAINT dictionary_user_id_language_key UNIQUE (user_id, "language") +); + +CREATE SEQUENCE search_ids + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + +CREATE TABLE searches ( + search_id integer DEFAULT nextval('search_ids'::text) PRIMARY KEY, + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + "type" smallint DEFAULT 0 NOT NULL, + name varchar(128) NOT NULL, + data text NOT NULL, + CONSTRAINT searches_user_id_key UNIQUE (user_id, "type", name) +); + +DROP SEQUENCE message_ids; +DROP TABLE messages; + +CREATE TABLE cache_index ( + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + mailbox varchar(255) NOT NULL, + changed timestamp with time zone DEFAULT now() NOT NULL, + valid smallint NOT NULL DEFAULT 0, + data text NOT NULL, + PRIMARY KEY (user_id, mailbox) +); + +CREATE INDEX cache_index_changed_idx ON cache_index (changed); + +CREATE TABLE cache_thread ( + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + mailbox varchar(255) NOT NULL, + changed timestamp with time zone DEFAULT now() NOT NULL, + data text NOT NULL, + PRIMARY KEY (user_id, mailbox) +); + +CREATE INDEX cache_thread_changed_idx ON cache_thread (changed); + +CREATE TABLE cache_messages ( + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + mailbox varchar(255) NOT NULL, + uid integer NOT NULL, + changed timestamp with time zone DEFAULT now() NOT NULL, + data text NOT NULL, + flags integer NOT NULL DEFAULT 0, + PRIMARY KEY (user_id, mailbox, uid) +); + +CREATE INDEX cache_messages_changed_idx ON cache_messages (changed); diff --git a/data/web/rc/SQL/postgres/2011111600.sql b/data/web/rc/SQL/postgres/2011111600.sql new file mode 100644 index 00000000..a382ba0b --- /dev/null +++ b/data/web/rc/SQL/postgres/2011111600.sql @@ -0,0 +1,3 @@ +-- Updates from version 0.7-beta + +ALTER TABLE "session" ALTER sess_id TYPE varchar(128); diff --git a/data/web/rc/SQL/postgres/2011121400.sql b/data/web/rc/SQL/postgres/2011121400.sql new file mode 100644 index 00000000..81a0cb88 --- /dev/null +++ b/data/web/rc/SQL/postgres/2011121400.sql @@ -0,0 +1,5 @@ +-- Updates from version 0.7 + +DROP INDEX contacts_user_id_idx; +CREATE INDEX contacts_user_id_idx ON contacts USING btree (user_id, del); +ALTER TABLE contacts ALTER email TYPE text; diff --git a/data/web/rc/SQL/postgres/2012080700.sql b/data/web/rc/SQL/postgres/2012080700.sql new file mode 100644 index 00000000..41f60168 --- /dev/null +++ b/data/web/rc/SQL/postgres/2012080700.sql @@ -0,0 +1,7 @@ +-- Updates from version 0.8 + +ALTER TABLE cache DROP COLUMN cache_id; +DROP SEQUENCE cache_ids; + +ALTER TABLE users DROP COLUMN alias; +CREATE INDEX identities_email_idx ON identities (email, del); diff --git a/data/web/rc/SQL/postgres/2013011000.sql b/data/web/rc/SQL/postgres/2013011000.sql new file mode 100644 index 00000000..a8cf917d --- /dev/null +++ b/data/web/rc/SQL/postgres/2013011000.sql @@ -0,0 +1,4 @@ +CREATE TABLE "system" ( + name varchar(64) NOT NULL PRIMARY KEY, + value text +); diff --git a/data/web/rc/SQL/postgres/2013042700.sql b/data/web/rc/SQL/postgres/2013042700.sql new file mode 100644 index 00000000..bbd56751 --- /dev/null +++ b/data/web/rc/SQL/postgres/2013042700.sql @@ -0,0 +1,14 @@ +ALTER SEQUENCE user_ids RENAME TO users_seq; +ALTER TABLE users ALTER COLUMN user_id SET DEFAULT nextval('users_seq'::text); + +ALTER SEQUENCE identity_ids RENAME TO identities_seq; +ALTER TABLE identities ALTER COLUMN identity_id SET DEFAULT nextval('identities_seq'::text); + +ALTER SEQUENCE contact_ids RENAME TO contacts_seq; +ALTER TABLE contacts ALTER COLUMN contact_id SET DEFAULT nextval('contacts_seq'::text); + +ALTER SEQUENCE contactgroups_ids RENAME TO contactgroups_seq; +ALTER TABLE contactgroups ALTER COLUMN contactgroup_id SET DEFAULT nextval('contactgroups_seq'::text); + +ALTER SEQUENCE search_ids RENAME TO searches_seq; +ALTER TABLE searches ALTER COLUMN search_id SET DEFAULT nextval('searches_seq'::text); diff --git a/data/web/rc/SQL/postgres/2013052500.sql b/data/web/rc/SQL/postgres/2013052500.sql new file mode 100644 index 00000000..471e5717 --- /dev/null +++ b/data/web/rc/SQL/postgres/2013052500.sql @@ -0,0 +1,8 @@ +CREATE TABLE "cache_shared" ( + cache_key varchar(255) NOT NULL, + created timestamp with time zone DEFAULT now() NOT NULL, + data text NOT NULL +); + +CREATE INDEX cache_shared_cache_key_idx ON "cache_shared" (cache_key); +CREATE INDEX cache_shared_created_idx ON "cache_shared" (created); diff --git a/data/web/rc/SQL/postgres/2013061000.sql b/data/web/rc/SQL/postgres/2013061000.sql new file mode 100644 index 00000000..9db0ebcd --- /dev/null +++ b/data/web/rc/SQL/postgres/2013061000.sql @@ -0,0 +1,24 @@ +ALTER TABLE "cache" ADD expires timestamp with time zone DEFAULT NULL; +ALTER TABLE "cache_shared" ADD expires timestamp with time zone DEFAULT NULL; +ALTER TABLE "cache_index" ADD expires timestamp with time zone DEFAULT NULL; +ALTER TABLE "cache_thread" ADD expires timestamp with time zone DEFAULT NULL; +ALTER TABLE "cache_messages" ADD expires timestamp with time zone DEFAULT NULL; + +-- initialize expires column with created/changed date + 7days +UPDATE "cache" SET expires = created + interval '604800 seconds'; +UPDATE "cache_shared" SET expires = created + interval '604800 seconds'; +UPDATE "cache_index" SET expires = changed + interval '604800 seconds'; +UPDATE "cache_thread" SET expires = changed + interval '604800 seconds'; +UPDATE "cache_messages" SET expires = changed + interval '604800 seconds'; + +DROP INDEX cache_created_idx; +DROP INDEX cache_shared_created_idx; +ALTER TABLE "cache_index" DROP "changed"; +ALTER TABLE "cache_thread" DROP "changed"; +ALTER TABLE "cache_messages" DROP "changed"; + +CREATE INDEX cache_expires_idx ON "cache" (expires); +CREATE INDEX cache_shared_expires_idx ON "cache_shared" (expires); +CREATE INDEX cache_index_expires_idx ON "cache_index" (expires); +CREATE INDEX cache_thread_expires_idx ON "cache_thread" (expires); +CREATE INDEX cache_messages_expires_idx ON "cache_messages" (expires); diff --git a/data/web/rc/SQL/postgres/2014042900.sql b/data/web/rc/SQL/postgres/2014042900.sql new file mode 100644 index 00000000..fe6741a0 --- /dev/null +++ b/data/web/rc/SQL/postgres/2014042900.sql @@ -0,0 +1 @@ +-- empty \ No newline at end of file diff --git a/data/web/rc/SQL/postgres/2015030800.sql b/data/web/rc/SQL/postgres/2015030800.sql new file mode 100644 index 00000000..fe6741a0 --- /dev/null +++ b/data/web/rc/SQL/postgres/2015030800.sql @@ -0,0 +1 @@ +-- empty \ No newline at end of file diff --git a/data/web/rc/SQL/postgres/2015111100.sql b/data/web/rc/SQL/postgres/2015111100.sql new file mode 100644 index 00000000..3eea6d59 --- /dev/null +++ b/data/web/rc/SQL/postgres/2015111100.sql @@ -0,0 +1,2 @@ +ALTER TABLE "users" ADD failed_login timestamp with time zone DEFAULT NULL; +ALTER TABLE "users" ADD failed_login_counter integer DEFAULT NULL; diff --git a/data/web/rc/SQL/postgres/2016081200.sql b/data/web/rc/SQL/postgres/2016081200.sql new file mode 100644 index 00000000..7235b402 --- /dev/null +++ b/data/web/rc/SQL/postgres/2016081200.sql @@ -0,0 +1 @@ +ALTER TABLE "session" DROP COLUMN created; diff --git a/data/web/rc/SQL/postgres/2016100900.sql b/data/web/rc/SQL/postgres/2016100900.sql new file mode 100644 index 00000000..8eb7eeda --- /dev/null +++ b/data/web/rc/SQL/postgres/2016100900.sql @@ -0,0 +1 @@ +ALTER TABLE session ALTER COLUMN ip TYPE character varying(41); diff --git a/data/web/rc/SQL/postgres/2016112200.sql b/data/web/rc/SQL/postgres/2016112200.sql new file mode 100644 index 00000000..34af9712 --- /dev/null +++ b/data/web/rc/SQL/postgres/2016112200.sql @@ -0,0 +1,21 @@ +DROP TABLE "cache"; +DROP TABLE "cache_shared"; + +CREATE TABLE "cache" ( + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + cache_key varchar(128) DEFAULT '' NOT NULL, + expires timestamp with time zone DEFAULT NULL, + data text NOT NULL, + PRIMARY KEY (user_id, cache_key) +); + +CREATE INDEX cache_expires_idx ON "cache" (expires); + +CREATE TABLE "cache_shared" ( + cache_key varchar(255) NOT NULL PRIMARY KEY, + expires timestamp with time zone DEFAULT NULL, + data text NOT NULL +); + +CREATE INDEX cache_shared_expires_idx ON "cache_shared" (expires); diff --git a/data/web/rc/SQL/sqlite.initial.sql b/data/web/rc/SQL/sqlite.initial.sql new file mode 100644 index 00000000..03dd432e --- /dev/null +++ b/data/web/rc/SQL/sqlite.initial.sql @@ -0,0 +1,203 @@ +-- Roundcube Webmail initial database structure + +-- +-- Table structure for table contacts and related +-- + +CREATE TABLE contacts ( + contact_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL, + changed datetime NOT NULL default '0000-00-00 00:00:00', + del tinyint NOT NULL default '0', + name varchar(128) NOT NULL default '', + email text NOT NULL default '', + firstname varchar(128) NOT NULL default '', + surname varchar(128) NOT NULL default '', + vcard text NOT NULL default '', + words text NOT NULL default '' +); + +CREATE INDEX ix_contacts_user_id ON contacts(user_id, del); + + +CREATE TABLE contactgroups ( + contactgroup_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL default '0', + changed datetime NOT NULL default '0000-00-00 00:00:00', + del tinyint NOT NULL default '0', + name varchar(128) NOT NULL default '' +); + +CREATE INDEX ix_contactgroups_user_id ON contactgroups(user_id, del); + + +CREATE TABLE contactgroupmembers ( + contactgroup_id integer NOT NULL, + contact_id integer NOT NULL default '0', + created datetime NOT NULL default '0000-00-00 00:00:00', + PRIMARY KEY (contactgroup_id, contact_id) +); + +CREATE INDEX ix_contactgroupmembers_contact_id ON contactgroupmembers (contact_id); + +-- +-- Table structure for table identities +-- + +CREATE TABLE identities ( + identity_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL default '0', + changed datetime NOT NULL default '0000-00-00 00:00:00', + del tinyint NOT NULL default '0', + standard tinyint NOT NULL default '0', + name varchar(128) NOT NULL default '', + organization varchar(128) default '', + email varchar(128) NOT NULL default '', + "reply-to" varchar(128) NOT NULL default '', + bcc varchar(128) NOT NULL default '', + signature text NOT NULL default '', + html_signature tinyint NOT NULL default '0' +); + +CREATE INDEX ix_identities_user_id ON identities(user_id, del); +CREATE INDEX ix_identities_email ON identities(email, del); + +-- +-- Table structure for table users +-- + +CREATE TABLE users ( + user_id integer NOT NULL PRIMARY KEY, + username varchar(128) NOT NULL default '', + mail_host varchar(128) NOT NULL default '', + created datetime NOT NULL default '0000-00-00 00:00:00', + last_login datetime DEFAULT NULL, + failed_login datetime DEFAULT NULL, + failed_login_counter integer DEFAULT NULL, + language varchar(5), + preferences text NOT NULL default '' +); + +CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host); + +-- +-- Table structure for table session +-- + +CREATE TABLE session ( + sess_id varchar(128) NOT NULL PRIMARY KEY, + changed datetime NOT NULL default '0000-00-00 00:00:00', + ip varchar(40) NOT NULL default '', + vars text NOT NULL +); + +CREATE INDEX ix_session_changed ON session (changed); + +-- +-- Table structure for table dictionary +-- + +CREATE TABLE dictionary ( + user_id integer DEFAULT NULL, + "language" varchar(5) NOT NULL, + data text NOT NULL +); + +CREATE UNIQUE INDEX ix_dictionary_user_language ON dictionary (user_id, "language"); + +-- +-- Table structure for table searches +-- + +CREATE TABLE searches ( + search_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL DEFAULT '0', + "type" smallint NOT NULL DEFAULT '0', + name varchar(128) NOT NULL, + data text NOT NULL +); + +CREATE UNIQUE INDEX ix_searches_user_type_name ON searches (user_id, type, name); + +-- +-- Table structure for table cache +-- + +CREATE TABLE cache ( + user_id integer NOT NULL default 0, + cache_key varchar(128) NOT NULL default '', + expires datetime DEFAULT NULL, + data text NOT NULL, + PRIMARY KEY (user_id, cache_key) +); + +CREATE INDEX ix_cache_expires ON cache(expires); + +-- +-- Table structure for table cache_shared +-- + +CREATE TABLE cache_shared ( + cache_key varchar(255) NOT NULL, + expires datetime DEFAULT NULL, + data text NOT NULL, + PRIMARY KEY (cache_key) +); + +CREATE INDEX ix_cache_shared_expires ON cache_shared(expires); + +-- +-- Table structure for table cache_index +-- + +CREATE TABLE cache_index ( + user_id integer NOT NULL, + mailbox varchar(255) NOT NULL, + expires datetime DEFAULT NULL, + valid smallint NOT NULL DEFAULT '0', + data text NOT NULL, + PRIMARY KEY (user_id, mailbox) +); + +CREATE INDEX ix_cache_index_expires ON cache_index (expires); + +-- +-- Table structure for table cache_thread +-- + +CREATE TABLE cache_thread ( + user_id integer NOT NULL, + mailbox varchar(255) NOT NULL, + expires datetime DEFAULT NULL, + data text NOT NULL, + PRIMARY KEY (user_id, mailbox) +); + +CREATE INDEX ix_cache_thread_expires ON cache_thread (expires); + +-- +-- Table structure for table cache_messages +-- + +CREATE TABLE cache_messages ( + user_id integer NOT NULL, + mailbox varchar(255) NOT NULL, + uid integer NOT NULL, + expires datetime DEFAULT NULL, + data text NOT NULL, + flags integer NOT NULL DEFAULT '0', + PRIMARY KEY (user_id, mailbox, uid) +); + +CREATE INDEX ix_cache_messages_expires ON cache_messages (expires); + +-- +-- Table structure for table system +-- + +CREATE TABLE system ( + name varchar(64) NOT NULL PRIMARY KEY, + value text NOT NULL +); + +INSERT INTO system (name, value) VALUES ('roundcube-version', '2016112200'); diff --git a/data/web/rc/SQL/sqlite/2008030300.sql b/data/web/rc/SQL/sqlite/2008030300.sql new file mode 100644 index 00000000..b5b4890b --- /dev/null +++ b/data/web/rc/SQL/sqlite/2008030300.sql @@ -0,0 +1,25 @@ +-- Updates from version 0.1-stable to 0.1.1 + +DROP TABLE messages; + +CREATE TABLE messages ( + message_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL default '0', + del tinyint NOT NULL default '0', + cache_key varchar(128) NOT NULL default '', + created datetime NOT NULL default '0000-00-00 00:00:00', + idx integer NOT NULL default '0', + uid integer NOT NULL default '0', + subject varchar(255) NOT NULL default '', + "from" varchar(255) NOT NULL default '', + "to" varchar(255) NOT NULL default '', + "cc" varchar(255) NOT NULL default '', + "date" datetime NOT NULL default '0000-00-00 00:00:00', + size integer NOT NULL default '0', + headers text NOT NULL, + structure text +); + +CREATE INDEX ix_messages_user_cache_uid ON messages(user_id,cache_key,uid); +CREATE INDEX ix_users_username ON users(username); +CREATE INDEX ix_users_alias ON users(alias); diff --git a/data/web/rc/SQL/sqlite/2008060900.sql b/data/web/rc/SQL/sqlite/2008060900.sql new file mode 100644 index 00000000..157029c2 --- /dev/null +++ b/data/web/rc/SQL/sqlite/2008060900.sql @@ -0,0 +1,3 @@ +-- Updates from version 0.2-alpha + +CREATE INDEX ix_messages_created ON messages (created); diff --git a/data/web/rc/SQL/sqlite/2008092100.sql b/data/web/rc/SQL/sqlite/2008092100.sql new file mode 100644 index 00000000..8bc081c7 --- /dev/null +++ b/data/web/rc/SQL/sqlite/2008092100.sql @@ -0,0 +1,4 @@ +-- Updates from version 0.2-beta + +CREATE INDEX ix_session_changed ON session (changed); +CREATE INDEX ix_cache_created ON cache (created); diff --git a/data/web/rc/SQL/sqlite/2009090400.sql b/data/web/rc/SQL/sqlite/2009090400.sql new file mode 100644 index 00000000..c8a53edf --- /dev/null +++ b/data/web/rc/SQL/sqlite/2009090400.sql @@ -0,0 +1,8 @@ +-- Updates from version 0.3-stable + +DELETE FROM messages; +DROP INDEX ix_messages_user_cache_uid; +CREATE UNIQUE INDEX ix_messages_user_cache_uid ON messages (user_id,cache_key,uid); +CREATE INDEX ix_messages_index ON messages (user_id,cache_key,idx); +DROP INDEX ix_contacts_user_id; +CREATE INDEX ix_contacts_user_id ON contacts(user_id, email); diff --git a/data/web/rc/SQL/sqlite/2009103100.sql b/data/web/rc/SQL/sqlite/2009103100.sql new file mode 100644 index 00000000..bd7b1741 --- /dev/null +++ b/data/web/rc/SQL/sqlite/2009103100.sql @@ -0,0 +1,61 @@ +-- Updates from version 0.3.1 + +-- ALTER TABLE identities ADD COLUMN changed datetime NOT NULL default '0000-00-00 00:00:00'; -- + +CREATE TABLE temp_identities ( + identity_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL default '0', + standard tinyint NOT NULL default '0', + name varchar(128) NOT NULL default '', + organization varchar(128) default '', + email varchar(128) NOT NULL default '', + "reply-to" varchar(128) NOT NULL default '', + bcc varchar(128) NOT NULL default '', + signature text NOT NULL default '', + html_signature tinyint NOT NULL default '0' +); +INSERT INTO temp_identities (identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature) + SELECT identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature + FROM identities WHERE del=0; + +DROP INDEX ix_identities_user_id; +DROP TABLE identities; + +CREATE TABLE identities ( + identity_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL default '0', + changed datetime NOT NULL default '0000-00-00 00:00:00', + del tinyint NOT NULL default '0', + standard tinyint NOT NULL default '0', + name varchar(128) NOT NULL default '', + organization varchar(128) default '', + email varchar(128) NOT NULL default '', + "reply-to" varchar(128) NOT NULL default '', + bcc varchar(128) NOT NULL default '', + signature text NOT NULL default '', + html_signature tinyint NOT NULL default '0' +); +CREATE INDEX ix_identities_user_id ON identities(user_id, del); + +INSERT INTO identities (identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature) + SELECT identity_id, user_id, standard, name, organization, email, "reply-to", bcc, signature, html_signature + FROM temp_identities; + +DROP TABLE temp_identities; + +CREATE TABLE contactgroups ( + contactgroup_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL default '0', + changed datetime NOT NULL default '0000-00-00 00:00:00', + del tinyint NOT NULL default '0', + name varchar(128) NOT NULL default '' +); + +CREATE INDEX ix_contactgroups_user_id ON contactgroups(user_id, del); + +CREATE TABLE contactgroupmembers ( + contactgroup_id integer NOT NULL, + contact_id integer NOT NULL default '0', + created datetime NOT NULL default '0000-00-00 00:00:00', + PRIMARY KEY (contactgroup_id, contact_id) +); diff --git a/data/web/rc/SQL/sqlite/2010042300.sql b/data/web/rc/SQL/sqlite/2010042300.sql new file mode 100644 index 00000000..1a9023cf --- /dev/null +++ b/data/web/rc/SQL/sqlite/2010042300.sql @@ -0,0 +1,35 @@ +-- Updates from version 0.4-beta + +CREATE TABLE tmp_users ( + user_id integer NOT NULL PRIMARY KEY, + username varchar(128) NOT NULL default '', + mail_host varchar(128) NOT NULL default '', + alias varchar(128) NOT NULL default '', + created datetime NOT NULL default '0000-00-00 00:00:00', + last_login datetime NOT NULL default '0000-00-00 00:00:00', + language varchar(5), + preferences text NOT NULL default '' +); + +INSERT INTO tmp_users (user_id, username, mail_host, alias, created, last_login, language, preferences) + SELECT user_id, username, mail_host, alias, created, last_login, language, preferences FROM users; + +DROP TABLE users; + +CREATE TABLE users ( + user_id integer NOT NULL PRIMARY KEY, + username varchar(128) NOT NULL default '', + mail_host varchar(128) NOT NULL default '', + alias varchar(128) NOT NULL default '', + created datetime NOT NULL default '0000-00-00 00:00:00', + last_login datetime DEFAULT NULL, + language varchar(5), + preferences text NOT NULL default '' +); + +INSERT INTO users (user_id, username, mail_host, alias, created, last_login, language, preferences) + SELECT user_id, username, mail_host, alias, created, last_login, language, preferences FROM tmp_users; + +CREATE INDEX ix_users_username ON users(username); +CREATE INDEX ix_users_alias ON users(alias); +DROP TABLE tmp_users; diff --git a/data/web/rc/SQL/sqlite/2010100600.sql b/data/web/rc/SQL/sqlite/2010100600.sql new file mode 100644 index 00000000..5c7259f3 --- /dev/null +++ b/data/web/rc/SQL/sqlite/2010100600.sql @@ -0,0 +1,40 @@ +-- Updates from version 0.4.2 + +DROP INDEX ix_users_username; +CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host); + +CREATE TABLE contacts_tmp ( + contact_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL default '0', + changed datetime NOT NULL default '0000-00-00 00:00:00', + del tinyint NOT NULL default '0', + name varchar(128) NOT NULL default '', + email varchar(255) NOT NULL default '', + firstname varchar(128) NOT NULL default '', + surname varchar(128) NOT NULL default '', + vcard text NOT NULL default '' +); + +INSERT INTO contacts_tmp (contact_id, user_id, changed, del, name, email, firstname, surname, vcard) + SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts; + +DROP TABLE contacts; +CREATE TABLE contacts ( + contact_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL default '0', + changed datetime NOT NULL default '0000-00-00 00:00:00', + del tinyint NOT NULL default '0', + name varchar(128) NOT NULL default '', + email varchar(255) NOT NULL default '', + firstname varchar(128) NOT NULL default '', + surname varchar(128) NOT NULL default '', + vcard text NOT NULL default '' +); + +INSERT INTO contacts (contact_id, user_id, changed, del, name, email, firstname, surname, vcard) + SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts_tmp; + +CREATE INDEX ix_contacts_user_id ON contacts(user_id, email); +DROP TABLE contacts_tmp; + +DELETE FROM messages; diff --git a/data/web/rc/SQL/sqlite/2011011200.sql b/data/web/rc/SQL/sqlite/2011011200.sql new file mode 100644 index 00000000..4cca7407 --- /dev/null +++ b/data/web/rc/SQL/sqlite/2011011200.sql @@ -0,0 +1,41 @@ +-- Updates from version 0.5.x + +CREATE TABLE contacts_tmp ( + contact_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL default '0', + changed datetime NOT NULL default '0000-00-00 00:00:00', + del tinyint NOT NULL default '0', + name varchar(128) NOT NULL default '', + email varchar(255) NOT NULL default '', + firstname varchar(128) NOT NULL default '', + surname varchar(128) NOT NULL default '', + vcard text NOT NULL default '' +); + +INSERT INTO contacts_tmp (contact_id, user_id, changed, del, name, email, firstname, surname, vcard) + SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts; + +DROP TABLE contacts; +CREATE TABLE contacts ( + contact_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL default '0', + changed datetime NOT NULL default '0000-00-00 00:00:00', + del tinyint NOT NULL default '0', + name varchar(128) NOT NULL default '', + email varchar(255) NOT NULL default '', + firstname varchar(128) NOT NULL default '', + surname varchar(128) NOT NULL default '', + vcard text NOT NULL default '', + words text NOT NULL default '' +); + +INSERT INTO contacts (contact_id, user_id, changed, del, name, email, firstname, surname, vcard) + SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard FROM contacts_tmp; + +CREATE INDEX ix_contacts_user_id ON contacts(user_id, email); +DROP TABLE contacts_tmp; + + +DELETE FROM messages; +DELETE FROM cache; +CREATE INDEX ix_contactgroupmembers_contact_id ON contactgroupmembers (contact_id); diff --git a/data/web/rc/SQL/sqlite/2011092800.sql b/data/web/rc/SQL/sqlite/2011092800.sql new file mode 100644 index 00000000..27dbffc1 --- /dev/null +++ b/data/web/rc/SQL/sqlite/2011092800.sql @@ -0,0 +1,54 @@ +-- Updates from version 0.6 + +CREATE TABLE dictionary ( + user_id integer DEFAULT NULL, + "language" varchar(5) NOT NULL, + data text NOT NULL +); + +CREATE UNIQUE INDEX ix_dictionary_user_language ON dictionary (user_id, "language"); + +CREATE TABLE searches ( + search_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL DEFAULT '0', + "type" smallint NOT NULL DEFAULT '0', + name varchar(128) NOT NULL, + data text NOT NULL +); + +CREATE UNIQUE INDEX ix_searches_user_type_name ON searches (user_id, type, name); + +DROP TABLE messages; + +CREATE TABLE cache_index ( + user_id integer NOT NULL, + mailbox varchar(255) NOT NULL, + changed datetime NOT NULL default '0000-00-00 00:00:00', + valid smallint NOT NULL DEFAULT '0', + data text NOT NULL, + PRIMARY KEY (user_id, mailbox) +); + +CREATE INDEX ix_cache_index_changed ON cache_index (changed); + +CREATE TABLE cache_thread ( + user_id integer NOT NULL, + mailbox varchar(255) NOT NULL, + changed datetime NOT NULL default '0000-00-00 00:00:00', + data text NOT NULL, + PRIMARY KEY (user_id, mailbox) +); + +CREATE INDEX ix_cache_thread_changed ON cache_thread (changed); + +CREATE TABLE cache_messages ( + user_id integer NOT NULL, + mailbox varchar(255) NOT NULL, + uid integer NOT NULL, + changed datetime NOT NULL default '0000-00-00 00:00:00', + data text NOT NULL, + flags integer NOT NULL DEFAULT '0', + PRIMARY KEY (user_id, mailbox, uid) +); + +CREATE INDEX ix_cache_messages_changed ON cache_messages (changed); diff --git a/data/web/rc/SQL/sqlite/2011111600.sql b/data/web/rc/SQL/sqlite/2011111600.sql new file mode 100644 index 00000000..cea0d129 --- /dev/null +++ b/data/web/rc/SQL/sqlite/2011111600.sql @@ -0,0 +1,11 @@ +-- Updates from version 0.7-beta + +DROP TABLE session; +CREATE TABLE session ( + sess_id varchar(128) NOT NULL PRIMARY KEY, + created datetime NOT NULL default '0000-00-00 00:00:00', + changed datetime NOT NULL default '0000-00-00 00:00:00', + ip varchar(40) NOT NULL default '', + vars text NOT NULL +); +CREATE INDEX ix_session_changed ON session (changed); diff --git a/data/web/rc/SQL/sqlite/2011121400.sql b/data/web/rc/SQL/sqlite/2011121400.sql new file mode 100644 index 00000000..9d922767 --- /dev/null +++ b/data/web/rc/SQL/sqlite/2011121400.sql @@ -0,0 +1,38 @@ +-- Updates from version 0.7 + +CREATE TABLE contacts_tmp ( + contact_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL, + changed datetime NOT NULL default '0000-00-00 00:00:00', + del tinyint NOT NULL default '0', + name varchar(128) NOT NULL default '', + email text NOT NULL default '', + firstname varchar(128) NOT NULL default '', + surname varchar(128) NOT NULL default '', + vcard text NOT NULL default '', + words text NOT NULL default '' +); + +INSERT INTO contacts_tmp (contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words) + SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words FROM contacts; + +DROP TABLE contacts; + +CREATE TABLE contacts ( + contact_id integer NOT NULL PRIMARY KEY, + user_id integer NOT NULL, + changed datetime NOT NULL default '0000-00-00 00:00:00', + del tinyint NOT NULL default '0', + name varchar(128) NOT NULL default '', + email text NOT NULL default '', + firstname varchar(128) NOT NULL default '', + surname varchar(128) NOT NULL default '', + vcard text NOT NULL default '', + words text NOT NULL default '' +); + +INSERT INTO contacts (contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words) + SELECT contact_id, user_id, changed, del, name, email, firstname, surname, vcard, words FROM contacts_tmp; + +CREATE INDEX ix_contacts_user_id ON contacts(user_id, del); +DROP TABLE contacts_tmp; diff --git a/data/web/rc/SQL/sqlite/2012080700.sql b/data/web/rc/SQL/sqlite/2012080700.sql new file mode 100644 index 00000000..c6ede89e --- /dev/null +++ b/data/web/rc/SQL/sqlite/2012080700.sql @@ -0,0 +1,44 @@ +-- Updates from version 0.8 + +DROP TABLE cache; +CREATE TABLE cache ( + user_id integer NOT NULL default 0, + cache_key varchar(128) NOT NULL default '', + created datetime NOT NULL default '0000-00-00 00:00:00', + data text NOT NULL +); + +CREATE INDEX ix_cache_user_cache_key ON cache(user_id, cache_key); +CREATE INDEX ix_cache_created ON cache(created); + +CREATE TABLE tmp_users ( + user_id integer NOT NULL PRIMARY KEY, + username varchar(128) NOT NULL default '', + mail_host varchar(128) NOT NULL default '', + created datetime NOT NULL default '0000-00-00 00:00:00', + last_login datetime DEFAULT NULL, + language varchar(5), + preferences text NOT NULL default '' +); + +INSERT INTO tmp_users (user_id, username, mail_host, created, last_login, language, preferences) + SELECT user_id, username, mail_host, created, last_login, language, preferences FROM users; + +DROP TABLE users; + +CREATE TABLE users ( + user_id integer NOT NULL PRIMARY KEY, + username varchar(128) NOT NULL default '', + mail_host varchar(128) NOT NULL default '', + created datetime NOT NULL default '0000-00-00 00:00:00', + last_login datetime DEFAULT NULL, + language varchar(5), + preferences text NOT NULL default '' +); + +INSERT INTO users (user_id, username, mail_host, created, last_login, language, preferences) + SELECT user_id, username, mail_host, created, last_login, language, preferences FROM tmp_users; + +CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host); + +CREATE INDEX ix_identities_email ON identities(email, del); diff --git a/data/web/rc/SQL/sqlite/2013011000.sql b/data/web/rc/SQL/sqlite/2013011000.sql new file mode 100644 index 00000000..ec261a63 --- /dev/null +++ b/data/web/rc/SQL/sqlite/2013011000.sql @@ -0,0 +1,6 @@ +-- Updates from version 0.9-beta + +CREATE TABLE IF NOT EXISTS system ( + name varchar(64) NOT NULL PRIMARY KEY, + value text NOT NULL +); diff --git a/data/web/rc/SQL/sqlite/2013011700.sql b/data/web/rc/SQL/sqlite/2013011700.sql new file mode 100644 index 00000000..533e70fa --- /dev/null +++ b/data/web/rc/SQL/sqlite/2013011700.sql @@ -0,0 +1,2 @@ +-- drop temp table created in 2012080700.sql +DROP TABLE IF EXISTS tmp_users; diff --git a/data/web/rc/SQL/sqlite/2013042700.sql b/data/web/rc/SQL/sqlite/2013042700.sql new file mode 100644 index 00000000..fe6741a0 --- /dev/null +++ b/data/web/rc/SQL/sqlite/2013042700.sql @@ -0,0 +1 @@ +-- empty \ No newline at end of file diff --git a/data/web/rc/SQL/sqlite/2013052500.sql b/data/web/rc/SQL/sqlite/2013052500.sql new file mode 100644 index 00000000..19ae1b11 --- /dev/null +++ b/data/web/rc/SQL/sqlite/2013052500.sql @@ -0,0 +1,8 @@ +CREATE TABLE cache_shared ( + cache_key varchar(255) NOT NULL, + created datetime NOT NULL default '0000-00-00 00:00:00', + data text NOT NULL +); + +CREATE INDEX ix_cache_shared_cache_key ON cache_shared(cache_key); +CREATE INDEX ix_cache_shared_created ON cache_shared(created); diff --git a/data/web/rc/SQL/sqlite/2013061000.sql b/data/web/rc/SQL/sqlite/2013061000.sql new file mode 100644 index 00000000..3c6b43ea --- /dev/null +++ b/data/web/rc/SQL/sqlite/2013061000.sql @@ -0,0 +1,48 @@ +DROP TABLE cache_index; +DROP TABLE cache_thread; +DROP TABLE cache_messages; + +ALTER TABLE cache ADD expires datetime DEFAULT NULL; +DROP INDEX ix_cache_created; + +ALTER TABLE cache_shared ADD expires datetime DEFAULT NULL; +DROP INDEX ix_cache_shared_created; + +UPDATE cache SET expires = datetime(created, '+604800 seconds'); +UPDATE cache_shared SET expires = datetime(created, '+604800 seconds'); + +CREATE INDEX ix_cache_expires ON cache(expires); +CREATE INDEX ix_cache_shared_expires ON cache_shared(expires); + +CREATE TABLE cache_index ( + user_id integer NOT NULL, + mailbox varchar(255) NOT NULL, + expires datetime DEFAULT NULL, + valid smallint NOT NULL DEFAULT '0', + data text NOT NULL, + PRIMARY KEY (user_id, mailbox) +); + +CREATE INDEX ix_cache_index_expires ON cache_index (expires); + +CREATE TABLE cache_thread ( + user_id integer NOT NULL, + mailbox varchar(255) NOT NULL, + expires datetime DEFAULT NULL, + data text NOT NULL, + PRIMARY KEY (user_id, mailbox) +); + +CREATE INDEX ix_cache_thread_expires ON cache_thread (expires); + +CREATE TABLE cache_messages ( + user_id integer NOT NULL, + mailbox varchar(255) NOT NULL, + uid integer NOT NULL, + expires datetime DEFAULT NULL, + data text NOT NULL, + flags integer NOT NULL DEFAULT '0', + PRIMARY KEY (user_id, mailbox, uid) +); + +CREATE INDEX ix_cache_messages_expires ON cache_messages (expires); diff --git a/data/web/rc/SQL/sqlite/2014042900.sql b/data/web/rc/SQL/sqlite/2014042900.sql new file mode 100644 index 00000000..fe6741a0 --- /dev/null +++ b/data/web/rc/SQL/sqlite/2014042900.sql @@ -0,0 +1 @@ +-- empty \ No newline at end of file diff --git a/data/web/rc/SQL/sqlite/2015030800.sql b/data/web/rc/SQL/sqlite/2015030800.sql new file mode 100644 index 00000000..fe6741a0 --- /dev/null +++ b/data/web/rc/SQL/sqlite/2015030800.sql @@ -0,0 +1 @@ +-- empty \ No newline at end of file diff --git a/data/web/rc/SQL/sqlite/2015111100.sql b/data/web/rc/SQL/sqlite/2015111100.sql new file mode 100644 index 00000000..34df0ead --- /dev/null +++ b/data/web/rc/SQL/sqlite/2015111100.sql @@ -0,0 +1,35 @@ +CREATE TABLE tmp_users ( + user_id integer NOT NULL PRIMARY KEY, + username varchar(128) NOT NULL default '', + mail_host varchar(128) NOT NULL default '', + created datetime NOT NULL default '0000-00-00 00:00:00', + last_login datetime DEFAULT NULL, + failed_login datetime DEFAULT NULL, + failed_login_counter integer DEFAULT NULL, + language varchar(5), + preferences text NOT NULL default '' +); + +INSERT INTO tmp_users (user_id, username, mail_host, created, last_login, language, preferences) + SELECT user_id, username, mail_host, created, last_login, language, preferences FROM users; + +DROP TABLE users; + +CREATE TABLE users ( + user_id integer NOT NULL PRIMARY KEY, + username varchar(128) NOT NULL default '', + mail_host varchar(128) NOT NULL default '', + created datetime NOT NULL default '0000-00-00 00:00:00', + last_login datetime DEFAULT NULL, + failed_login datetime DEFAULT NULL, + failed_login_counter integer DEFAULT NULL, + language varchar(5), + preferences text NOT NULL default '' +); + +INSERT INTO users (user_id, username, mail_host, created, last_login, language, preferences) + SELECT user_id, username, mail_host, created, last_login, language, preferences FROM tmp_users; + +CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host); + +DROP TABLE tmp_users; diff --git a/data/web/rc/SQL/sqlite/2016081200.sql b/data/web/rc/SQL/sqlite/2016081200.sql new file mode 100644 index 00000000..8c3a3f18 --- /dev/null +++ b/data/web/rc/SQL/sqlite/2016081200.sql @@ -0,0 +1,9 @@ +DROP TABLE session; +CREATE TABLE session ( + sess_id varchar(128) NOT NULL PRIMARY KEY, + changed datetime NOT NULL default '0000-00-00 00:00:00', + ip varchar(40) NOT NULL default '', + vars text NOT NULL +); + +CREATE INDEX ix_session_changed ON session (changed); diff --git a/data/web/rc/SQL/sqlite/2016100900.sql b/data/web/rc/SQL/sqlite/2016100900.sql new file mode 100644 index 00000000..e69de29b diff --git a/data/web/rc/SQL/sqlite/2016112200.sql b/data/web/rc/SQL/sqlite/2016112200.sql new file mode 100644 index 00000000..c185493a --- /dev/null +++ b/data/web/rc/SQL/sqlite/2016112200.sql @@ -0,0 +1,21 @@ +DROP TABLE cache; +DROP TABLE cache_shared; + +CREATE TABLE cache ( + user_id integer NOT NULL default 0, + cache_key varchar(128) NOT NULL default '', + expires datetime DEFAULT NULL, + data text NOT NULL, + PRIMARY KEY (user_id, cache_key) +); + +CREATE INDEX ix_cache_expires ON cache(expires); + +CREATE TABLE cache_shared ( + cache_key varchar(255) NOT NULL, + expires datetime DEFAULT NULL, + data text NOT NULL, + PRIMARY KEY (cache_key) +); + +CREATE INDEX ix_cache_shared_expires ON cache_shared(expires); diff --git a/data/web/rc/UPGRADING b/data/web/rc/UPGRADING new file mode 100644 index 00000000..fe0ad4d1 --- /dev/null +++ b/data/web/rc/UPGRADING @@ -0,0 +1,79 @@ +UPGRADING instructions +====================== + +Follow these instructions if upgrading from a previous version +of Roundcube Webmail. We recommend to carefully backup the existing +installation as well as the database before going through the following steps. + +Using the update script +----------------------- +There is a shell script (for unix based systems) that does the job for you. +To use it, unpack the archive of the new Roundcube version to a temporary location +(don't replace the Roundcube installation you want to update) +and cd into that directory. From there, run the following command in a shell: + + ./bin/installto.sh <TARGET-FOLDER> + +For <TARGET-FOLDER> you specify the path to the Roundcube installation +which should be updated. The update script will then copy all new files to the +target location and check and update the configuration and database schema. +After all is done, the temporary folder with the new Roundcube files can be +removed again. + +WARNING: See Post-Upgrade Activities section below. + + +Updating manually +----------------- +If you don't have shell access to the Roundcube installation or if not running +it on a unix system, you need to do the following operations by hand: + +1. Replace index.php and all files in + - ./bin/ + - ./SQL/ + - ./program/ + - ./installer/ +2. Replace the configuration defaults files: + - config/defaults.inc.php + - config/mimetypes.php +3. rsync the contents of the following folders from your installation + directory into the target folder: + ./skins/ + ./plugins/ + ./vendor/ +4a. If you previously installed plugins through composer, update dependencies + by running `php composer.phar update --no-dev` +4b. Install/update dependencies using composer: + - get composer from https://getcomposer.org/download/ + - rename the composer.json-dist file into composer.json + - if you want to use LDAP address books, enable the LDAP libraries in your + composer.json file by moving the items from "suggest" to the "require" + section (remove the explanation texts after the version!). + - run `php composer.phar install --no-dev` +5. Run `./bin/update.sh` from the commandline OR + open http://url-to-roundcube/installer/ in a browser and choose "3 Test config". + To enable the latter one, you have to temporary set 'enable_installer' + to true in your local config/config.inc.php file. + WARNING: See SQLite database upgrade below. +6. Let the update script/installer check your configuration and + update your config files and database schema as suggested by the updater. +7. Make sure 'enable_installer' is set to false again. +8. See Post-Upgrade Activities section. + + +Post-Upgrade Activities +----------------------- +1. Check .htaccess settings (some php settings could become required) +2. If you're using build-in addressbook, run indexing script /bin/indexcontacts.sh. +3. When upgrading from version older than 0.6-beta you should make sure + your folder settings contain namespace prefix. For example Courier users + should add INBOX. prefix to folder names in main configuration file. +4. Check system requirements in INSTALL file. + +SQLite database upgrade +----------------------- +Versions older than 0.9 were supporting SQLite v2 only. Newer versions require +database in v3 format. The best what you can do is to convert database file +to the new format using command line tools: + +sqlite OLD.DB .dump | sqlite3 NEW.DB diff --git a/data/web/rc/bin/cleandb.sh b/data/web/rc/bin/cleandb.sh new file mode 100755 index 00000000..0bf71ea6 --- /dev/null +++ b/data/web/rc/bin/cleandb.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env php +<?php +/* + +-----------------------------------------------------------------------+ + | bin/cleandb.sh | + | | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2010-2015, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + | PURPOSE: | + | Finally remove all db records marked as deleted some time ago | + | | + +-----------------------------------------------------------------------+ + | Author: Thomas Bruederli <roundcube@gmail.com> | + +-----------------------------------------------------------------------+ +*/ + +define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); + +require INSTALL_PATH.'program/include/clisetup.php'; + +if (!empty($_SERVER['argv'][1])) + $days = intval($_SERVER['argv'][1]); +else + $days = 7; + +rcmail_utils::db_clean($days); + +?> diff --git a/data/web/rc/bin/cssshrink.sh b/data/web/rc/bin/cssshrink.sh new file mode 100755 index 00000000..604a0467 --- /dev/null +++ b/data/web/rc/bin/cssshrink.sh @@ -0,0 +1,62 @@ +#!/bin/sh +PWD=`dirname "$0"` +JAR_DIR='/tmp' +VERSION='2.4.8' +COMPILER_URL="https://github.com/yui/yuicompressor/releases/download/v${VERSION}/yuicompressor-${VERSION}.zip" + +do_shrink() { + rm -f "$2" + java -jar $JAR_DIR/yuicompressor.jar -v -o "$2" "$1" +} + +if [ ! -w "$JAR_DIR" ]; then + JAR_DIR=$PWD +fi + +if java -version >/dev/null 2>&1; then + : +else + echo "Java not found. Please ensure that the 'java' program is in your PATH." + exit 1 +fi + +if [ ! -r "$JAR_DIR/yuicompressor.jar" ]; then + if which wget >/dev/null 2>&1 && which unzip >/dev/null 2>&1; then + wget "$COMPILER_URL" -O "/tmp/$$.zip" + elif which curl >/dev/null 2>&1 && which unzip >/dev/null 2>&1; then + curl "$COMPILER_URL" -o "/tmp/$$.zip" + else + echo "Please download $COMPILER_URL and extract compiler.jar to $JAR_DIR/." + exit 1 + fi + (cd $JAR_DIR && unzip "/tmp/$$.zip" && mv "yuicompressor-${VERSION}.jar" "yuicompressor.jar") + rm -f "/tmp/$$.zip" +fi + +# compress single file from argument +if [ $# -gt 0 ]; then + CSS_FILE="$1" + + echo "Shrinking $CSS_FILE" + minfile=`echo $CSS_FILE | sed -e 's/\.css$/\.min\.css/'` + do_shrink "$CSS_FILE" "$minfile" + exit +fi + +DIRS="$PWD/../skins/* $PWD/../plugins/* $PWD/../plugins/*/skins/*" +# default: compress application scripts +for dir in $DIRS; do + for file in $dir/*.css; do + echo "$file" | grep -e '.min.css$' >/dev/null + if [ $? -eq 0 ]; then + continue + fi + if [ ! -f "$file" ]; then + continue + fi + + echo "Shrinking $file" + minfile=`echo $file | sed -e 's/\.css$/\.min\.css/'` + do_shrink "$file" "$minfile" + done +done diff --git a/data/web/rc/bin/decrypt.sh b/data/web/rc/bin/decrypt.sh new file mode 100755 index 00000000..dd452597 --- /dev/null +++ b/data/web/rc/bin/decrypt.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env php +<?php +/* + +-----------------------------------------------------------------------+ + | bin/decrypt.sh | + | | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2005-2009, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + | PURPOSE: | + | Decrypt the encrypted parts of the HTTP Received: headers | + | | + +-----------------------------------------------------------------------+ + | Author: Tomas Tevesz <ice@extreme.hu> | + +-----------------------------------------------------------------------+ +*/ + +/** + * If http_received_header_encrypt is configured, the IP address and the + * host name of the added Received: header is encrypted with 3DES, to + * protect information that some could consider sensitve, yet their + * availability is a must in some circumstances. + * + * Such an encrypted Received: header might look like: + * + * Received: from DzgkvJBO5+bw+oje5JACeNIa/uSI4mRw2cy5YoPBba73eyBmjtyHnQ== + * [my0nUbjZXKtl7KVBZcsvWOxxtyVFxza4] + * with HTTP/1.1 (POST); Thu, 14 May 2009 19:17:28 +0200 + * + * In this example, the two encrypted components are the sender host name + * (DzgkvJBO5+bw+oje5JACeNIa/uSI4mRw2cy5YoPBba73eyBmjtyHnQ==) and the IP + * address (my0nUbjZXKtl7KVBZcsvWOxxtyVFxza4). + * + * Using this tool, they can be decrypted into plain text: + * + * $ bin/decrypt.sh 'my0nUbjZXKtl7KVBZcsvWOxxtyVFxza4' \ + * > 'DzgkvJBO5+bw+oje5JACeNIa/uSI4mRw2cy5YoPBba73eyBmjtyHnQ==' + * 84.3.187.208 + * 5403BBD0.catv.pool.telekom.hu + * $ + * + * Thus it is known that this particular message was sent by 84.3.187.208, + * having, at the time of sending, the name of 5403BBD0.catv.pool.telekom.hu. + * + * If (most likely binary) junk is shown, then + * - either the encryption password has, between the time the mail was sent + * and 'now', changed, or + * - you are dealing with counterfeit header data. + */ + +define('INSTALL_PATH', realpath(__DIR__ .'/..') . '/'); + +require INSTALL_PATH . 'program/include/clisetup.php'; + +if ($argc < 2) { + die("Usage: " . basename($argv[0]) . " encrypted-hdr-part [encrypted-hdr-part ...]\n"); +} + +$RCMAIL = rcube::get_instance(); + +for ($i = 1; $i < $argc; $i++) { + printf("%s\n", $RCMAIL->decrypt($argv[$i])); +}; diff --git a/data/web/rc/bin/deluser.sh b/data/web/rc/bin/deluser.sh new file mode 100755 index 00000000..06505ef5 --- /dev/null +++ b/data/web/rc/bin/deluser.sh @@ -0,0 +1,125 @@ +#!/usr/bin/env php +<?php + +/* + +-----------------------------------------------------------------------+ + | bin/deluser.sh | + | | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2014, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + | PURPOSE: | + | Utility script to remove all data related to a certain user | + | from the local database. | + +-----------------------------------------------------------------------+ + | Author: Thomas Bruederli <thomas@roundcube.net> | + +-----------------------------------------------------------------------+ +*/ + +define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); + +require_once INSTALL_PATH . 'program/include/clisetup.php'; + +function print_usage() +{ + print "Usage: deluser.sh [--host=mail_host] username\n"; + print "--host=HOST The IMAP hostname or IP the given user is related to\n"; +} + +function _die($msg, $usage=false) +{ + fputs(STDERR, $msg . "\n"); + if ($usage) print_usage(); + exit(1); +} + +$rcmail = rcube::get_instance(); + +// get arguments +$args = rcube_utils::get_opt(array('h' => 'host')); +$username = trim($args[0]); + +if (empty($username)) { + _die("Missing required parameters", true); +} + +if (empty($args['host'])) { + $hosts = $rcmail->config->get('default_host', ''); + if (is_string($hosts)) { + $args['host'] = $hosts; + } + else if (is_array($hosts) && count($hosts) == 1) { + $args['host'] = reset($hosts); + } + else { + _die("Specify a host name", true); + } + + // host can be a URL like tls://192.168.12.44 + $host_url = parse_url($args['host']); + if ($host_url['host']) { + $args['host'] = $host_url['host']; + } +} + +// connect to DB +$db = $rcmail->get_dbh(); +$db->db_connect('w'); +$transaction = false; + +if (!$db->is_connected() || $db->is_error()) { + _die("No DB connection\n" . $db->is_error()); +} + +// find user in loca database +$user = rcube_user::query($username, $args['host']); + +if (!$user) { + die("User not found.\n"); +} + +// inform plugins about approaching user deletion +$plugin = $rcmail->plugins->exec_hook('user_delete_prepare', array('user' => $user, 'username' => $username, 'host' => $args['host'])); + +// let plugins cleanup their own user-related data +if (!$plugin['abort']) { + $transaction = $db->startTransaction(); + $plugin = $rcmail->plugins->exec_hook('user_delete', $plugin); +} + +if ($plugin['abort']) { + if ($transaction) { + $db->rollbackTransaction(); + } + _die("User deletion aborted by plugin"); +} + +// deleting the user record should be sufficient due to ON DELETE CASCADE foreign key references +// but not all database backends actually support this so let's do it by hand +foreach (array('identities','contacts','contactgroups','dictionary','cache','cache_index','cache_messages','cache_thread','searches','users') as $table) { + $db->query('DELETE FROM ' . $db->table_name($table, true) . ' WHERE `user_id` = ?', $user->ID); +} + +if ($db->is_error()) { + $rcmail->plugins->exec_hook('user_delete_rollback', $plugin); + _die("DB error occurred: " . $db->is_error()); +} +else { + // inform plugins about executed user deletion + $plugin = $rcmail->plugins->exec_hook('user_delete_commit', $plugin); + + if ($plugin['abort']) { + unset($plugin['abort']); + $db->rollbackTransaction(); + $rcmail->plugins->exec_hook('user_delete_rollback', $plugin); + } + else { + $db->endTransaction(); + echo "Successfully deleted user $user->ID\n"; + } +} + diff --git a/data/web/rc/bin/dumpschema.sh b/data/web/rc/bin/dumpschema.sh new file mode 100755 index 00000000..32c90ac1 --- /dev/null +++ b/data/web/rc/bin/dumpschema.sh @@ -0,0 +1,97 @@ +#!/usr/bin/env php +<?php +/* + +-----------------------------------------------------------------------+ + | bin/dumpschema.sh | + | | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2005-2009, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + | PURPOSE: | + | Dumps database schema in XML format using MDB2_Schema | + | | + +-----------------------------------------------------------------------+ + | Author: Thomas Bruederli <roundcube@gmail.com> | + +-----------------------------------------------------------------------+ +*/ + +define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); + +require INSTALL_PATH.'program/include/clisetup.php'; + +/** callback function for schema dump **/ +function print_schema($dump) +{ + foreach ((array)$dump as $part) + echo $dump . "\n"; +} + +$config = new rcube_config(); + +// don't allow public access if not in devel_mode +if (!$config->get('devel_mode') && $_SERVER['REMOTE_ADDR']) { + header("HTTP/1.0 401 Access denied"); + die("Access denied!"); +} + +$options = array( + 'use_transactions' => false, + 'log_line_break' => "\n", + 'idxname_format' => '%s', + 'debug' => false, + 'quote_identifier' => true, + 'force_defaults' => false, + 'portability' => false, +); + +$dsnw = $config->get('db_dsnw'); +$dsn_array = MDB2::parseDSN($dsnw); + +// set options for postgres databases +if ($dsn_array['phptype'] == 'pgsql') { + $options['disable_smart_seqname'] = true; + $options['seqname_format'] = '%s'; +} + +$schema =& MDB2_Schema::factory($dsnw, $options); +$schema->db->supported['transactions'] = false; + + +// send as text/xml when opened in browser +if ($_SERVER['REMOTE_ADDR']) + header('Content-Type: text/xml'); + + +if (PEAR::isError($schema)) { + $error = $schema->getMessage() . ' ' . $schema->getUserInfo(); +} +else { + $dump_config = array( + // 'output_mode' => 'file', + 'output' => 'print_schema', + ); + + $definition = $schema->getDefinitionFromDatabase(); + $definition['charset'] = 'utf8'; + + if (PEAR::isError($definition)) { + $error = $definition->getMessage() . ' ' . $definition->getUserInfo(); + } + else { + $operation = $schema->dumpDatabase($definition, $dump_config, MDB2_SCHEMA_DUMP_STRUCTURE); + if (PEAR::isError($operation)) { + $error = $operation->getMessage() . ' ' . $operation->getUserInfo(); + } + } +} + +$schema->disconnect(); + +if ($error && !$_SERVER['REMOTE_ADDR']) + fputs(STDERR, $error); + +?> diff --git a/data/web/rc/bin/gc.sh b/data/web/rc/bin/gc.sh new file mode 100755 index 00000000..cde6debf --- /dev/null +++ b/data/web/rc/bin/gc.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env php +<?php +/* + +-----------------------------------------------------------------------+ + | bin/gc.sh | + | | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + | PURPOSE: | + | Trigger garbage collecting routines manually (e.g. via cronjob) | + | | + +-----------------------------------------------------------------------+ + | Author: Thomas Bruederli <roundcube@gmail.com> | + +-----------------------------------------------------------------------+ +*/ + +define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); + +require INSTALL_PATH.'program/include/clisetup.php'; + +$rcmail = rcube::get_instance(); + +$session_driver = $rcmail->config->get('session_storage', 'db'); +$session_lifetime = $rcmail->config->get('session_lifetime', 0) * 60 * 2; + +// Clean expired SQL sessions +if ($session_driver == 'db' && $session_lifetime) { + $db = $rcmail->get_dbh(); + $db->query("DELETE FROM " . $db->table_name('session') + . " WHERE changed < " . $db->now(-$session_lifetime)); +} + +// Clean caches and temp directory +$rcmail->gc(); diff --git a/data/web/rc/bin/indexcontacts.sh b/data/web/rc/bin/indexcontacts.sh new file mode 100755 index 00000000..760e5379 --- /dev/null +++ b/data/web/rc/bin/indexcontacts.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env php +<?php +/* + +-----------------------------------------------------------------------+ + | bin/indexcontacts.sh | + | | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2011, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + | PURPOSE: | + | Update the fulltext index for all contacts of the internal | + | address book. | + +-----------------------------------------------------------------------+ + | Author: Thomas Bruederli <roundcube@gmail.com> | + +-----------------------------------------------------------------------+ +*/ + +define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); + +require_once INSTALL_PATH.'program/include/clisetup.php'; +ini_set('memory_limit', -1); + +rcmail_utils::indexcontacts(); + +?> diff --git a/data/web/rc/bin/initdb.sh b/data/web/rc/bin/initdb.sh new file mode 100755 index 00000000..fd22007d --- /dev/null +++ b/data/web/rc/bin/initdb.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env php +<?php +/* + +-----------------------------------------------------------------------+ + | bin/initdb.sh | + | | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2010-2015, The Roundcube Dev Team | + | Copyright (C) 2010-2015, Kolab Systems AG | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + | PURPOSE: | + | Create database schema | + +-----------------------------------------------------------------------+ + | Author: Aleksander Machniak <alec@alec.pl> | + +-----------------------------------------------------------------------+ +*/ + +define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); + +require_once INSTALL_PATH . 'program/include/clisetup.php'; + +// get arguments +$opts = rcube_utils::get_opt(array( + 'd' => 'dir', +)); + +if (empty($opts['dir'])) { + rcube::raise_error("Database schema directory not specified (--dir).", false, true); +} + +// Check if directory exists +if (!file_exists($opts['dir'])) { + rcube::raise_error("Specified database schema directory doesn't exist.", false, true); +} + +rcmail_utils::db_init($opts['dir']); + +?> diff --git a/data/web/rc/bin/installto.sh b/data/web/rc/bin/installto.sh new file mode 100755 index 00000000..27594b63 --- /dev/null +++ b/data/web/rc/bin/installto.sh @@ -0,0 +1,106 @@ +#!/usr/bin/env php +<?php +/* + +-----------------------------------------------------------------------+ + | bin/installto.sh | + | | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2014-2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + | PURPOSE: | + | Update an existing Roundcube installation with files from | + | this version | + +-----------------------------------------------------------------------+ + | Author: Thomas Bruederli <roundcube@gmail.com> | + +-----------------------------------------------------------------------+ +*/ + +define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); + +require_once INSTALL_PATH . 'program/include/clisetup.php'; + +$target_dir = unslashify($_SERVER['argv'][1]); + +if (empty($target_dir) || !is_dir(realpath($target_dir))) + rcube::raise_error("Invalid target: not a directory\nUsage: installto.sh <TARGET>", false, true); + +// read version from iniset.php +$iniset = @file_get_contents($target_dir . '/program/include/iniset.php'); +if (!preg_match('/define\(.RCMAIL_VERSION.,\s*.([0-9.]+[a-z-]*)/', $iniset, $m)) + rcube::raise_error("No valid Roundcube installation found at $target_dir", false, true); + +$oldversion = $m[1]; + +if (version_compare(version_parse($oldversion), version_parse(RCMAIL_VERSION), '>=')) + rcube::raise_error("Installation at target location is up-to-date!", false, true); + +echo "Upgrading from $oldversion. Do you want to continue? (y/N)\n"; +$input = trim(fgets(STDIN)); + +if (strtolower($input) == 'y') { + echo "Copying files to target location..."; + + // Save a copy of original .htaccess file (#1490623) + if (file_exists("$target_dir/.htaccess")) { + $htaccess_copied = copy("$target_dir/.htaccess", "$target_dir/.htaccess.orig"); + } + + $dirs = array('program','installer','bin','SQL','plugins','skins'); + if (is_dir(INSTALL_PATH . 'vendor') && !is_file(INSTALL_PATH . 'composer.json')) { + $dirs[] = 'vendor'; + } + foreach ($dirs as $dir) { + // @FIXME: should we use --delete for all directories? + $delete = in_array($dir, array('program', 'installer')) ? '--delete ' : ''; + $command = "rsync -aC --out-format \"%n\" " . $delete . INSTALL_PATH . "$dir/* $target_dir/$dir/"; + if (!system($command, $ret) || $ret > 0) { + rcube::raise_error("Failed to execute command: $command", false, true); + } + } + foreach (array('index.php','.htaccess','config/defaults.inc.php','composer.json-dist','CHANGELOG','README.md','UPGRADING','LICENSE','INSTALL') as $file) { + $command = "rsync -a --out-format \"%n\" " . INSTALL_PATH . "$file $target_dir/$file"; + if (file_exists(INSTALL_PATH . $file) && (!system($command, $ret) || $ret > 0)) { + rcube::raise_error("Failed to execute command: $command", false, true); + } + } + + // remove old (<1.0) .htaccess file + @unlink("$target_dir/program/.htaccess"); + echo "done."; + + // Inform the user about .htaccess change + if (!empty($htaccess_copied)) { + if (file_get_contents("$target_dir/.htaccess") != file_get_contents("$target_dir/.htaccess.orig")) { + echo "\n!! Old .htaccess file saved as .htaccess.orig !!"; + } + else { + @unlink("$target_dir/.htaccess.orig"); + } + } + + echo "\n\n"; + + if (is_dir("$target_dir/skins/default")) { + echo "Removing old default skin..."; + system("rm -rf $target_dir/skins/default $target_dir/plugins/jqueryui/themes/default"); + foreach (glob(INSTALL_PATH . "plugins/*/skins") as $plugin_skin_dir) { + $plugin_skin_dir = preg_replace('!^.*' . INSTALL_PATH . '!', '', $plugin_skin_dir); + if (is_dir("$target_dir/$plugin_skin_dir/classic")) + system("rm -rf $target_dir/$plugin_skin_dir/default"); + } + echo "done.\n\n"; + } + + echo "Running update script at target...\n"; + system("cd $target_dir && php bin/update.sh --version=$oldversion"); + echo "All done.\n"; +} +else { + echo "Update cancelled. See ya!\n"; +} + +?> diff --git a/data/web/rc/bin/jsshrink.sh b/data/web/rc/bin/jsshrink.sh new file mode 100755 index 00000000..0484aa4e --- /dev/null +++ b/data/web/rc/bin/jsshrink.sh @@ -0,0 +1,75 @@ +#!/bin/sh +PWD=`dirname "$0"` +JS_DIR="$PWD/../program/js" +JAR_DIR='/tmp' +LANG_IN='ECMASCRIPT5' +CLOSURE_COMPILER_URL='http://dl.google.com/closure-compiler/compiler-latest.zip' + +do_shrink() { + rm -f "$2" + # copy the first comment block with license information for LibreJS + grep -q '@lic' $1 && sed -n '/\/\*/,/\*\// { p; /\*\//q; }' $1 > $2 + java -jar $JAR_DIR/compiler.jar --compilation_level=SIMPLE_OPTIMIZATIONS --js="$1" --language_in="$3" >> $2 +} + +if [ ! -d "$JS_DIR" ]; then + echo "Directory $JS_DIR not found." + exit 1 +fi + +if [ ! -w "$JAR_DIR" ]; then + JAR_DIR=$PWD +fi + +if java -version >/dev/null 2>&1; then + : +else + echo "Java not found. Please ensure that the 'java' program is in your PATH." + exit 1 +fi + +if [ ! -r "$JAR_DIR/compiler.jar" ]; then + if which wget >/dev/null 2>&1 && which unzip >/dev/null 2>&1; then + wget "$CLOSURE_COMPILER_URL" -O "/tmp/$$.zip" + elif which curl >/dev/null 2>&1 && which unzip >/dev/null 2>&1; then + curl "$CLOSURE_COMPILER_URL" -o "/tmp/$$.zip" + else + echo "Please download $CLOSURE_COMPILER_URL and extract compiler.jar to $JAR_DIR/." + exit 1 + fi + (cd $JAR_DIR && unzip -p "/tmp/$$.zip" "*.jar" > "$JAR_DIR/compiler.jar") + rm -f "/tmp/$$.zip" +fi + +# compress single file from argument +if [ $# -gt 0 ]; then + JS_DIR=`dirname "$1"` + JS_FILE="$1" + + if [ $# -gt 1 ]; then + LANG_IN="$2" + fi + + echo "Shrinking $JS_FILE" + minfile=`echo $JS_FILE | sed -e 's/\.js$/\.min\.js/'` + do_shrink "$JS_FILE" "$minfile" "$LANG_IN" + exit +fi + +DIRS="$PWD/../program/js $PWD/../skins/* $PWD/../plugins/* $PWD/../plugins/*/skins/* $PWD/../plugins/managesieve/codemirror/lib" +# default: compress application scripts +for dir in $DIRS; do + for file in $dir/*.js; do + echo "$file" | grep -e '.min.js$' >/dev/null + if [ $? -eq 0 ]; then + continue + fi + if [ ! -f "$file" ]; then + continue + fi + + echo "Shrinking $file" + minfile=`echo $file | sed -e 's/\.js$/\.min\.js/'` + do_shrink "$file" "$minfile" "$LANG_IN" + done +done diff --git a/data/web/rc/bin/makedoc.sh b/data/web/rc/bin/makedoc.sh new file mode 100755 index 00000000..3602c3a6 --- /dev/null +++ b/data/web/rc/bin/makedoc.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +TITLE="Roundcube Webmail" +PACKAGES="Webmail" + +INSTALL_PATH="`dirname $0`/.." +PATH_PROJECT=$INSTALL_PATH/program/include +PATH_FRAMEWORK=$INSTALL_PATH/program/lib/Roundcube +PATH_DOCS=$INSTALL_PATH/doc/phpdoc +BIN_PHPDOC="`/usr/bin/which phpdoc`" + +if [ ! -x "$BIN_PHPDOC" ] +then + echo "phpdoc not found: $BIN_PHPDOC" + exit 1 +fi + +OUTPUTFORMAT=HTML +TEMPLATE=responsive-twig + +# make documentation +$BIN_PHPDOC -d $PATH_PROJECT,$PATH_FRAMEWORK -t $PATH_DOCS --title "$TITLE" --defaultpackagename $PACKAGES \ + --template=$TEMPLATE + diff --git a/data/web/rc/bin/moduserprefs.sh b/data/web/rc/bin/moduserprefs.sh new file mode 100755 index 00000000..94f9ec29 --- /dev/null +++ b/data/web/rc/bin/moduserprefs.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env php +<?php +/* + +-----------------------------------------------------------------------+ + | bin/moduserprefs.sh | + | | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2012-2015, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + | PURPOSE: | + | Bulk-change settings stored in user preferences | + +-----------------------------------------------------------------------+ + | Author: Thomas Bruederli <roundcube@gmail.com> | + +-----------------------------------------------------------------------+ +*/ + +define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); + +require_once INSTALL_PATH.'program/include/clisetup.php'; + +function print_usage() +{ + print "Usage: moduserprefs.sh [options] pref-name [pref-value]\n"; + print "Options:\n"; + print " --user=user-id User ID in local database\n"; + print " --config=path Location of additional configuration file\n"; + print " --delete Unset the given preference\n"; + print " --type=type Pref-value type: int, bool, string\n"; +} + + +// get arguments +$args = rcube_utils::get_opt(array( + 'u' => 'user', + 'd' => 'delete:bool', + 't' => 'type', + 'c' => 'config', +)); + +if ($_SERVER['argv'][1] == 'help') { + print_usage(); + exit; +} +else if (empty($args[0]) || (empty($args[1]) && empty($args['delete']))) { + print "Missing required parameters.\n"; + print_usage(); + exit; +} + +$pref_name = trim($args[0]); +$pref_value = $args['delete'] ? null : trim($args[1]); + +if ($pref_value === null) { + $args['type'] = null; +} + +if ($args['config']) { + $rcube = rcube::get_instance(); + $rcube->config->load_from_file($args['config']); +} + +rcmail_utils::mod_pref($pref_name, $pref_value, $args['user'], $args['type']); + +?> diff --git a/data/web/rc/bin/msgexport.sh b/data/web/rc/bin/msgexport.sh new file mode 100755 index 00000000..f76aefe8 --- /dev/null +++ b/data/web/rc/bin/msgexport.sh @@ -0,0 +1,143 @@ +#!/usr/bin/env php +<?php + +define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); +ini_set('memory_limit', -1); + +require_once INSTALL_PATH.'program/include/clisetup.php'; + +function print_usage() +{ + print "Usage: msgexport -h imap-host -u user-name -m mailbox name\n"; + print "--host IMAP host\n"; + print "--user IMAP user name\n"; + print "--mbox Folder name, set to '*' for all\n"; + print "--file Output file\n"; +} + +function vputs($str) +{ + $out = $GLOBALS['args']['file'] ? STDOUT : STDERR; + fwrite($out, $str); +} + +function progress_update($pos, $max) +{ + $percent = round(100 * $pos / $max); + vputs(sprintf("%3d%% [%-51s] %d/%d\033[K\r", $percent, @str_repeat('=', $percent / 2) . '>', $pos, $max)); +} + +function export_mailbox($mbox, $filename) +{ + global $IMAP; + + $IMAP->set_folder($mbox); + + $index = $IMAP->index($mbox, null, 'ASC'); + $count = $index->count(); + $index = $index->get(); + + vputs("Getting message list of {$mbox}..."); + vputs("$count messages\n"); + + if ($filename) + { + if (!($out = fopen($filename, 'w'))) + { + vputs("Cannot write to output file\n"); + return; + } + vputs("Writing to $filename\n"); + } + else + $out = STDOUT; + + for ($i = 0; $i < $count; $i++) + { + $headers = $IMAP->get_message_headers($index[$i]); + $from = current(rcube_mime::decode_address_list($headers->from, 1, false)); + + fwrite($out, sprintf("From %s %s UID %d\n", $from['mailto'], $headers->date, $headers->uid)); + $IMAP->get_raw_body($headers->uid, $out); + fwrite($out, "\n\n\n"); + + progress_update($i+1, $count); + } + vputs("\ncomplete.\n"); + + if ($filename) + fclose($out); +} + + +// get arguments +$opts = array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'm' => 'mbox', 'f' => 'file'); +$args = rcube_utils::get_opt($opts) + array('host' => 'localhost', 'mbox' => 'INBOX'); + +if ($_SERVER['argv'][1] == 'help') +{ + print_usage(); + exit; +} +else if (!$args['host']) +{ + vputs("Missing required parameters.\n"); + print_usage(); + exit; +} + +// prompt for username if not set +if (empty($args['user'])) +{ + vputs("IMAP user: "); + $args['user'] = trim(fgets(STDIN)); +} + +// prompt for password +$args['pass'] = rcube_utils::prompt_silent("Password: "); + + +// parse $host URL +$a_host = parse_url($args['host']); +if ($a_host['host']) +{ + $host = $a_host['host']; + $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? TRUE : FALSE; + $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : 143); +} +else +{ + $host = $args['host']; + $imap_port = 143; +} + +// instantiate IMAP class +$IMAP = new rcube_imap(null); + +// try to connect to IMAP server +if ($IMAP->connect($host, $args['user'], $args['pass'], $imap_port, $imap_ssl)) +{ + vputs("IMAP login successful.\n"); + + $filename = null; + $mailboxes = $args['mbox'] == '*' ? $IMAP->list_folders(null) : array($args['mbox']); + + foreach ($mailboxes as $mbox) + { + if ($args['file']) + $filename = preg_replace('/\.[a-z0-9]{3,4}$/i', '', $args['file']) . asciiwords($mbox) . '.mbox'; + else if ($args['mbox'] == '*') + $filename = asciiwords($mbox) . '.mbox'; + + if ($args['mbox'] == '*' && in_array(strtolower($mbox), array('junk','spam','trash'))) + continue; + + export_mailbox($mbox, $filename); + } +} +else +{ + vputs("IMAP login failed.\n"); +} + +?> diff --git a/data/web/rc/bin/msgimport.sh b/data/web/rc/bin/msgimport.sh new file mode 100755 index 00000000..0c72622c --- /dev/null +++ b/data/web/rc/bin/msgimport.sh @@ -0,0 +1,113 @@ +#!/usr/bin/env php +<?php + +define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); +ini_set('memory_limit', -1); + +require_once INSTALL_PATH.'program/include/clisetup.php'; + +function print_usage() +{ + print "Usage: msgimport -h imap-host -u user-name -m mailbox -f message-file\n"; + print "--host IMAP host\n"; + print "--user IMAP user name\n"; + print "--mbox Target mailbox\n"; + print "--file Message file to upload\n"; +} + + +// get arguments +$opts = array('h' => 'host', 'u' => 'user', 'p' => 'pass', 'm' => 'mbox', 'f' => 'file'); +$args = rcube_utils::get_opt($opts) + array('host' => 'localhost', 'mbox' => 'INBOX'); + +if ($_SERVER['argv'][1] == 'help') +{ + print_usage(); + exit; +} +else if (!($args['host'] && $args['file'])) +{ + print "Missing required parameters.\n"; + print_usage(); + exit; +} +else if (!is_file($args['file'])) +{ + rcube::raise_error("Cannot read message file.", false, true); +} + +// prompt for username if not set +if (empty($args['user'])) +{ + //fwrite(STDOUT, "Please enter your name\n"); + echo "IMAP user: "; + $args['user'] = trim(fgets(STDIN)); +} + +// prompt for password +if (empty($args['pass'])) +{ + $args['pass'] = rcube_utils::prompt_silent("Password: "); +} + +// parse $host URL +$a_host = parse_url($args['host']); +if ($a_host['host']) +{ + $host = $a_host['host']; + $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? TRUE : FALSE; + $imap_port = isset($a_host['port']) ? $a_host['port'] : ($imap_ssl ? 993 : 143); +} +else +{ + $host = $args['host']; + $imap_port = 143; +} + +// instantiate IMAP class +$IMAP = new rcube_imap(null); + +// try to connect to IMAP server +if ($IMAP->connect($host, $args['user'], $args['pass'], $imap_port, $imap_ssl)) +{ + print "IMAP login successful.\n"; + print "Uploading messages...\n"; + + $count = 0; + $message = $lastline = ''; + + $fp = fopen($args['file'], 'r'); + while (($line = fgets($fp)) !== false) + { + if (preg_match('/^From\s+-/', $line) && $lastline == '') + { + if (!empty($message)) + { + if ($IMAP->save_message($args['mbox'], rtrim($message))) + $count++; + else + rcube::raise_error("Failed to save message to {$args['mbox']}", false, true); + $message = ''; + } + continue; + } + + $message .= $line; + $lastline = rtrim($line); + } + + if (!empty($message) && $IMAP->save_message($args['mbox'], rtrim($message))) + $count++; + + // upload message from file + if ($count) + print "$count messages successfully added to {$args['mbox']}.\n"; + else + print "Adding messages failed!\n"; +} +else +{ + rcube::raise_error("IMAP login failed.", false, true); +} + +?> diff --git a/data/web/rc/bin/update.sh b/data/web/rc/bin/update.sh new file mode 100755 index 00000000..15a4b572 --- /dev/null +++ b/data/web/rc/bin/update.sh @@ -0,0 +1,271 @@ +#!/usr/bin/env php +<?php +/* + +-----------------------------------------------------------------------+ + | bin/update.sh | + | | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2010-2015, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + | PURPOSE: | + | Check local configuration and database schema after upgrading | + | to a new version | + +-----------------------------------------------------------------------+ + | Author: Thomas Bruederli <roundcube@gmail.com> | + +-----------------------------------------------------------------------+ +*/ + +define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); + +require_once INSTALL_PATH . 'program/include/clisetup.php'; + +// get arguments +$opts = rcube_utils::get_opt(array('v' => 'version', 'y' => 'accept:bool')); + +// ask user if no version is specified +if (!$opts['version']) { + echo "What version are you upgrading from? Type '?' if you don't know.\n"; + if (($input = trim(fgets(STDIN))) && preg_match('/^[0-9.]+[a-z-]*$/', $input)) + $opts['version'] = $input; + else + $opts['version'] = RCMAIL_VERSION; +} + +$RCI = rcmail_install::get_instance(); +$RCI->load_config(); + +if ($RCI->configured) { + $success = true; + + if (($messages = $RCI->check_config()) || $RCI->legacy_config) { + $success = false; + $err = 0; + + // list old/replaced config options + if (is_array($messages['replaced'])) { + echo "WARNING: Replaced config options:\n"; + echo "(These config options have been replaced or renamed)\n"; + + foreach ($messages['replaced'] as $msg) { + echo "- '" . $msg['prop'] . "' was replaced by '" . $msg['replacement'] . "'\n"; + $err++; + } + echo "\n"; + } + + // list obsolete config options (just a notice) + if (is_array($messages['obsolete'])) { + echo "NOTICE: Obsolete config options:\n"; + echo "(You still have some obsolete or inexistent properties set. This isn't a problem but should be noticed)\n"; + + foreach ($messages['obsolete'] as $msg) { + echo "- '" . $msg['prop'] . ($msg['name'] ? "': " . $msg['name'] : "'") . "\n"; + $err++; + } + echo "\n"; + } + + if (!$err && $RCI->legacy_config) { + echo "WARNING: Your configuration needs to be migrated!\n"; + echo "We changed the configuration files structure and your two config files main.inc.php and db.inc.php have to be merged into one single file.\n"; + $err++; + } + + // ask user to update config files + if ($err) { + if (!$opts['accept']) { + echo "Do you want me to fix your local configuration? (y/N)\n"; + $input = trim(fgets(STDIN)); + } + + // positive: let's merge the local config with the defaults + if ($opts['accept'] || strtolower($input) == 'y') { + $error = $written = false; + + // backup current config + echo ". backing up the current config file(s)...\n"; + + foreach (array('config', 'main', 'db') as $file) { + if (file_exists(RCMAIL_CONFIG_DIR . '/' . $file . '.inc.php')) { + if (!copy(RCMAIL_CONFIG_DIR . '/' . $file . '.inc.php', RCMAIL_CONFIG_DIR . '/' . $file . '.old.php')) { + $error = true; + } + } + } + + if (!$error) { + $RCI->merge_config(); + echo ". writing " . RCMAIL_CONFIG_DIR . "/config.inc.php...\n"; + $written = $RCI->save_configfile($RCI->create_config()); + } + + // Success! + if ($written) { + echo "Done.\n"; + echo "Your configuration files are now up-to-date!\n"; + + if ($messages['missing']) { + echo "But you still need to add the following missing options:\n"; + foreach ($messages['missing'] as $msg) + echo "- '" . $msg['prop'] . ($msg['name'] ? "': " . $msg['name'] : "'") . "\n"; + } + + if ($RCI->legacy_config) { + foreach (array('main', 'db') as $file) { + @unlink(RCMAIL_CONFIG_DIR . '/' . $file . '.inc.php'); + } + } + } + else { + echo "Failed to write config file(s)!\n"; + echo "Grant write privileges to the current user or update the files manually according to the above messages.\n"; + } + } + else { + echo "Please update your config files manually according to the above messages.\n"; + } + } + + // check dependencies based on the current configuration + if (is_array($messages['dependencies'])) { + echo "WARNING: Dependency check failed!\n"; + echo "(Some of your configuration settings require other options to be configured or additional PHP modules to be installed)\n"; + + foreach ($messages['dependencies'] as $msg) { + echo "- " . $msg['prop'] . ': ' . $msg['explain'] . "\n"; + } + echo "Please fix your config files and run this script again!\n"; + echo "See ya.\n"; + } + } + + // check file type detection + if ($RCI->check_mime_detection()) { + echo "WARNING: File type detection doesn't work properly!\n"; + echo "Please check the 'mime_magic' config option or the finfo functions of PHP and run this script again.\n"; + } + if ($RCI->check_mime_extensions()) { + echo "WARNING: Mimetype to file extension mapping doesn't work properly!\n"; + echo "Please check the 'mime_types' config option and run this script again.\n"; + } + + // check database schema + if ($RCI->config['db_dsnw']) { + echo "Executing database schema update.\n"; + $success = rcmail_utils::db_update(INSTALL_PATH . 'SQL', 'roundcube', $opts['version'], + array('errors' => true)); + } + + // update composer dependencies + if (is_file(INSTALL_PATH . 'composer.json') && is_readable(INSTALL_PATH . 'composer.json-dist')) { + $composer_data = json_decode(file_get_contents(INSTALL_PATH . 'composer.json'), true); + $composer_template = json_decode(file_get_contents(INSTALL_PATH . 'composer.json-dist'), true); + $comsposer_json = null; + + // update the require section with the new dependencies + if (is_array($composer_data['require']) && is_array($composer_template['require'])) { + $composer_data['require'] = array_merge($composer_data['require'], $composer_template['require']); + + // remove obsolete packages + $old_packages = array( + 'pear/mail_mime', + 'pear/mail_mime-decode', + 'pear/net_smtp', + 'pear/net_sieve', + 'pear-pear.php.net/net_sieve', + ); + foreach ($old_packages as $pkg) { + if (array_key_exists($pkg, $composer_data['require'])) { + unset($composer_data['require'][$pkg]); + } + } + } + + // update the repositories section with the new dependencies + if (is_array($composer_template['repositories'])) { + if (!is_array($composer_data['repositories'])) { + $composer_data['repositories'] = array(); + } + + foreach ($composer_template['repositories'] as $repo) { + $rkey = $repo['type'] . preg_replace('/^https?:/', '', $repo['url']) . $repo['package']['name']; + $existing = false; + foreach ($composer_data['repositories'] as $k => $_repo) { + if ($rkey == $_repo['type'] . preg_replace('/^https?:/', '', $_repo['url']) . $_repo['package']['name']) { + // switch to https:// + if (isset($_repo['url']) && strpos($_repo['url'], 'http://') === 0) + $composer_data['repositories'][$k]['url'] = 'https:' . substr($_repo['url'], 5); + $existing = true; + break; + } + // remove old repos + else if (strpos($_repo['url'], 'git://git.kolab.org') === 0) { + unset($composer_data['repositories'][$k]); + } + else if ($_repo['type'] == 'package' && $_repo['package']['name'] == 'Net_SMTP') { + unset($composer_data['repositories'][$k]); + } + } + if (!$existing) { + $composer_data['repositories'][] = $repo; + } + } + + $composer_data['repositories'] = array_values($composer_data['repositories']); + } + + // use the JSON encoder from the Composer package + if (is_file('composer.phar')) { + include 'phar://composer.phar/src/Composer/Json/JsonFile.php'; + $comsposer_json = \Composer\Json\JsonFile::encode($composer_data); + } + // PHP 5.4's json_encode() does the job, too + else if (defined('JSON_PRETTY_PRINT')) { + $comsposer_json = json_encode($composer_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); + } + else { + $success = false; + $comsposer_json = null; + } + + // write updated composer.json back to disk + if ($comsposer_json && is_writeable(INSTALL_PATH . 'composer.json')) { + $success &= (bool)file_put_contents(INSTALL_PATH . 'composer.json', $comsposer_json); + } + else { + echo "WARNING: unable to update composer.json!\n"; + echo "Please replace the 'require' section in your composer.json with the following:\n"; + + $require_json = ''; + foreach ($composer_data['require'] as $pkg => $ver) { + $require_json .= sprintf(' "%s": "%s",'."\n", $pkg, $ver); + } + + echo ' "require": {'."\n"; + echo rtrim($require_json, ",\n"); + echo "\n }\n\n"; + } + + echo "NOTE: Update dependencies by running `php composer.phar update --no-dev`\n"; + } + + // index contacts for fulltext searching + if ($opts['version'] && version_compare(version_parse($opts['version']), '0.6.0', '<')) { + rcmail_utils::indexcontacts(); + } + + if ($success) { + echo "This instance of Roundcube is up-to-date.\n"; + echo "Have fun!\n"; + } +} +else { + echo "This instance of Roundcube is not yet configured!\n"; + echo "Open http://url-to-roundcube/installer/ in your browser and follow the instuctions.\n"; +} + +?> diff --git a/data/web/rc/bin/updatecss.sh b/data/web/rc/bin/updatecss.sh new file mode 100755 index 00000000..6ecfeac9 --- /dev/null +++ b/data/web/rc/bin/updatecss.sh @@ -0,0 +1,122 @@ +#!/usr/bin/env php +<?php +/* + +-----------------------------------------------------------------------+ + | bin/updatecss.sh | + | | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2010-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + | PURPOSE: | + | Update cache-baster marks for css background images | + +-----------------------------------------------------------------------+ + | Author: Aleksander Machniak <alec@alec.pl> | + +-----------------------------------------------------------------------+ +*/ + +define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); + +require_once INSTALL_PATH . 'program/include/clisetup.php'; + +// get arguments +$opts = rcube_utils::get_opt(array( + 'd' => 'dir', +)); + +if (empty($opts['dir'])) { + print "Skin directory not specified (--dir). Using skins/ and plugins/*/skins/.\n"; + + $dir = INSTALL_PATH . 'skins'; + $dir_p = INSTALL_PATH . 'plugins'; + $skins = glob("$dir/*", GLOB_ONLYDIR); + $skins_p = glob("$dir_p/*/skins/*", GLOB_ONLYDIR); + + $dirs = array_merge($skins, $skins_p); +} +// Check if directory exists +else if (!file_exists($opts['dir'])) { + rcube::raise_error("Specified directory doesn't exist.", false, true); +} +else { + $dirs = array($opts['dir']); +} + +foreach ($dirs as $dir) { + $img_dir = $dir . '/images'; + if (!file_exists($img_dir)) { + continue; + } + + $files = get_files($dir); + $images = get_images($img_dir); + $find = array(); + $replace = array(); + + // build regexps array + foreach ($images as $path => $sum) { + $path_ex = str_replace('.', '\\.', $path); + $find[] = "#url\(['\"]?images/$path_ex(\?v=[a-f0-9-\.]+)?['\"]?\)#"; + $replace[] = "url(images/$path?v=$sum)"; + } + + foreach ($files as $file) { + $file = $dir . '/' . $file; + print "File: $file\n"; + $content = file_get_contents($file); + $content = preg_replace($find, $replace, $content, -1, $count); + if ($count) { + file_put_contents($file, $content); + } + } +} + + +function get_images($dir) +{ + $images = array(); + $dh = opendir($dir); + + while ($file = readdir($dh)) { + if (preg_match('/^(.+)\.(gif|ico|png|jpg|jpeg)$/', $file, $m)) { + $filepath = "$dir/$file"; + $images[$file] = substr(md5_file($filepath), 0, 4) . '.' . filesize($filepath); + print "Image: $filepath ({$images[$file]})\n"; + } + else if ($file != '.' && $file != '..' && is_dir($dir . '/' . $file)) { + foreach (get_images($dir . '/' . $file) as $img => $sum) { + $images[$file . '/' . $img] = $sum; + } + } + } + + closedir($dh); + + return $images; +} + +function get_files($dir) +{ + $files = array(); + $dh = opendir($dir); + + while ($file = readdir($dh)) { + if (preg_match('/^(.+)\.(css|html)$/', $file, $m)) { + $files[] = $file; + } + else if ($file != '.' && $file != '..' && is_dir($dir . '/' . $file)) { + foreach (get_files($dir . '/' . $file) as $f) { + $files[] = $file . '/' . $f; + } + } + } + + closedir($dh); + + return $files; +} + +?> diff --git a/data/web/rc/bin/updatedb.sh b/data/web/rc/bin/updatedb.sh new file mode 100755 index 00000000..7e4f0f52 --- /dev/null +++ b/data/web/rc/bin/updatedb.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env php +<?php +/* + +-----------------------------------------------------------------------+ + | bin/updatedb.sh | + | | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2010-2012, The Roundcube Dev Team | + | Copyright (C) 2010-2012, Kolab Systems AG | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + | PURPOSE: | + | Update database schema | + +-----------------------------------------------------------------------+ + | Author: Aleksander Machniak <alec@alec.pl> | + +-----------------------------------------------------------------------+ +*/ + +define('INSTALL_PATH', realpath(__DIR__ . '/..') . '/' ); + +require_once INSTALL_PATH . 'program/include/clisetup.php'; + +// get arguments +$opts = rcube_utils::get_opt(array( + 'v' => 'version', + 'd' => 'dir', + 'p' => 'package', +)); + +if (empty($opts['dir'])) { + rcube::raise_error("Database schema directory not specified (--dir).", false, true); +} +if (empty($opts['package'])) { + rcube::raise_error("Database schema package name not specified (--package).", false, true); +} + +rcmail_utils::db_update($opts['dir'], $opts['package'], $opts['version'], array('errors' => true)); + +?> diff --git a/data/web/rc/composer.json-dist b/data/web/rc/composer.json-dist new file mode 100644 index 00000000..43bd20c9 --- /dev/null +++ b/data/web/rc/composer.json-dist @@ -0,0 +1,43 @@ +{ + "name": "roundcube/roundcubemail", + "description": "The Roundcube Webmail suite", + "license": "GPL-3.0+", + "repositories": [ + { + "type": "pear", + "url": "https://pear.php.net/" + }, + { + "type": "composer", + "url": "https://plugins.roundcube.net/" + }, + { + "type": "vcs", + "url": "https://github.com/roundcube/Net_Sieve.git" + }, + { + "type": "vcs", + "url": "https://git.kolab.org/diffusion/PNL/php-net_ldap.git" + } + ], + "require": { + "php": ">=5.4.0", + "pear/pear-core-minimal": "~1.10.1", + "roundcube/plugin-installer": "~0.1.6", + "pear-pear.php.net/net_socket": "~1.0.12", + "pear-pear.php.net/auth_sasl": "~1.0.6", + "pear-pear.php.net/net_idna2": "~0.1.1", + "pear-pear.php.net/mail_mime": "~1.10.0", + "pear-pear.php.net/net_smtp": "~1.7.1", + "pear-pear.php.net/crypt_gpg": "~1.6.0@beta", + "roundcube/net_sieve": "~1.5.0", + "endroid/qrcode": "~1.6.5" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "suggest": { + "pear-pear.php.net/net_ldap2": "~2.2.0 required for connecting to LDAP address books", + "kolab/Net_LDAP3": "dev-master required for connecting to LDAP address books" + } +} diff --git a/data/web/rc/config/.htaccess b/data/web/rc/config/.htaccess new file mode 100644 index 00000000..43e24edc --- /dev/null +++ b/data/web/rc/config/.htaccess @@ -0,0 +1,7 @@ +# deny webserver access to this directory +<ifModule mod_authz_core.c> + Require all denied +</ifModule> +<ifModule !mod_authz_core.c> + Deny from all +</ifModule> diff --git a/data/web/rc/config/config.inc.php b/data/web/rc/config/config.inc.php new file mode 100644 index 00000000..a0fb5f2e --- /dev/null +++ b/data/web/rc/config/config.inc.php @@ -0,0 +1,31 @@ +<?php +error_reporting(0); +if (!file_exists('/tmp/mime.types')) { +file_put_contents("/tmp/mime.types", fopen("http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types", 'r')); +} +$config = array(); +$config['db_dsnw'] = 'mysql://' . getenv('DBUSER') . ':' . getenv('DBPASS') . '@mysql/' . getenv('DBNAME'); +$config['default_host'] = 'tls://dovecot'; +$config['default_port'] = '143'; +$config['smtp_server'] = 'tls://postfix'; +$config['smtp_port'] = 587; +$config['smtp_user'] = '%u'; +$config['smtp_pass'] = '%p'; +$config['support_url'] = ''; +$config['product_name'] = 'Roundcube Webmail'; +$config['des_key'] = 'rcmail-!24ByteDESkey*Str'; +$config['log_dir'] = '/dev/null'; +$config['temp_dir'] = '/tmp'; +$config['plugins'] = array( + 'archive', + 'password', +); +$config['skin'] = 'larry'; +$config['mime_types'] = '/tmp/mime.types'; +$config['imap_conn_options'] = array( + 'ssl' => array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true) +); +$config['smtp_conn_options'] = array( + 'ssl' => array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true) +); +$config['enable_installer'] = false; diff --git a/data/web/rc/config/config.inc.php.sample b/data/web/rc/config/config.inc.php.sample new file mode 100644 index 00000000..77f36726 --- /dev/null +++ b/data/web/rc/config/config.inc.php.sample @@ -0,0 +1,85 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | Local configuration for the Roundcube Webmail installation. | + | | + | This is a sample configuration file only containing the minimum | + | setup required for a functional installation. Copy more options | + | from defaults.inc.php to this file to override the defaults. | + | | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2005-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + +-----------------------------------------------------------------------+ +*/ + +$config = array(); + +// Database connection string (DSN) for read+write operations +// Format (compatible with PEAR MDB2): db_provider://user:password@host/database +// Currently supported db_providers: mysql, pgsql, sqlite, mssql, sqlsrv, oracle +// For examples see http://pear.php.net/manual/en/package.database.mdb2.intro-dsn.php +// NOTE: for SQLite use absolute path (Linux): 'sqlite:////full/path/to/sqlite.db?mode=0646' +// or (Windows): 'sqlite:///C:/full/path/to/sqlite.db' +$config['db_dsnw'] = 'mysql://roundcube:pass@localhost/roundcubemail'; + +// The mail host chosen to perform the log-in. +// Leave blank to show a textbox at login, give a list of hosts +// to display a pulldown menu or set one host as string. +// To use SSL/TLS connection, enter hostname with prefix ssl:// or tls:// +// Supported replacement variables: +// %n - hostname ($_SERVER['SERVER_NAME']) +// %t - hostname without the first part +// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part) +// %s - domain name after the '@' from e-mail address provided at login screen +// For example %n = mail.domain.tld, %t = domain.tld +$config['default_host'] = 'localhost'; + +// SMTP server host (for sending mails). +// To use SSL/TLS connection, enter hostname with prefix ssl:// or tls:// +// Supported replacement variables: +// %h - user's IMAP hostname +// %n - hostname ($_SERVER['SERVER_NAME']) +// %t - hostname without the first part +// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part) +// %z - IMAP domain (IMAP hostname without the first part) +// For example %n = mail.domain.tld, %t = domain.tld +$config['smtp_server'] = 'localhost'; + +// SMTP port (default is 25; use 587 for STARTTLS or 465 for the +// deprecated SSL over SMTP (aka SMTPS)) +$config['smtp_port'] = 25; + +// SMTP username (if required) if you use %u as the username Roundcube +// will use the current username for login +$config['smtp_user'] = '%u'; + +// SMTP password (if required) if you use %p as the password Roundcube +// will use the current user's password for login +$config['smtp_pass'] = '%p'; + +// provide an URL where a user can get support for this Roundcube installation +// PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE! +$config['support_url'] = ''; + +// Name your service. This is displayed on the login screen and in the window title +$config['product_name'] = 'Roundcube Webmail'; + +// this key is used to encrypt the users imap password which is stored +// in the session record (and the client cookie if remember password is enabled). +// please provide a string of exactly 24 chars. +// YOUR KEY MUST BE DIFFERENT THAN THE SAMPLE VALUE FOR SECURITY REASONS +$config['des_key'] = 'rcmail-!24ByteDESkey*Str'; + +// List of active plugins (in plugins/ directory) +$config['plugins'] = array( + 'archive', + 'zipdownload', +); + +// skin name: folder from skins/ +$config['skin'] = 'larry'; diff --git a/data/web/rc/config/defaults.inc.php b/data/web/rc/config/defaults.inc.php new file mode 100644 index 00000000..5ef1a295 --- /dev/null +++ b/data/web/rc/config/defaults.inc.php @@ -0,0 +1,1237 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | Main configuration file with default settings | + | | + | This file is part of the Roundcube Webmail client | + | Copyright (C) 2005-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + +-----------------------------------------------------------------------+ +*/ + +$config = array(); + +// ---------------------------------- +// SQL DATABASE +// ---------------------------------- + +// Database connection string (DSN) for read+write operations +// Format (compatible with PEAR MDB2): db_provider://user:password@host/database +// Currently supported db_providers: mysql, pgsql, sqlite, mssql, sqlsrv, oracle +// For examples see http://pear.php.net/manual/en/package.database.mdb2.intro-dsn.php +// NOTE: for SQLite use absolute path (Linux): 'sqlite:////full/path/to/sqlite.db?mode=0646' +// or (Windows): 'sqlite:///C:/full/path/to/sqlite.db' +$config['db_dsnw'] = 'mysql://roundcube:@localhost/roundcubemail'; + +// Database DSN for read-only operations (if empty write database will be used) +// useful for database replication +$config['db_dsnr'] = ''; + +// Disable the use of already established dsnw connections for subsequent reads +$config['db_dsnw_noread'] = false; + +// use persistent db-connections +// beware this will not "always" work as expected +// see: http://www.php.net/manual/en/features.persistent-connections.php +$config['db_persistent'] = false; + +// you can define specific table (and sequence) names prefix +$config['db_prefix'] = ''; + +// Mapping of table names and connections to use for ALL operations. +// This can be used in a setup with replicated databases and a DB master +// where read/write access to cache tables should not go to master. +$config['db_table_dsn'] = array( +// 'cache' => 'r', +// 'cache_index' => 'r', +// 'cache_thread' => 'r', +// 'cache_messages' => 'r', +); + +// It is possible to specify database variable values e.g. some limits here. +// Use them if your server is not MySQL or for better performance. +// For example Roundcube uses max_allowed_packet value (in bytes) +// which limits query size for database cache operations. +$config['db_max_allowed_packet'] = null; + + +// ---------------------------------- +// LOGGING/DEBUGGING +// ---------------------------------- + +// system error reporting, sum of: 1 = log; 4 = show +$config['debug_level'] = 1; + +// log driver: 'syslog' or 'file'. +$config['log_driver'] = 'file'; + +// date format for log entries +// (read http://php.net/manual/en/function.date.php for all format characters) +$config['log_date_format'] = 'd-M-Y H:i:s O'; + +// length of the session ID to prepend each log line with +// set to 0 to avoid session IDs being logged. +$config['log_session_id'] = 8; + +// Syslog ident string to use, if using the 'syslog' log driver. +$config['syslog_id'] = 'roundcube'; + +// Syslog facility to use, if using the 'syslog' log driver. +// For possible values see installer or http://php.net/manual/en/function.openlog.php +$config['syslog_facility'] = LOG_USER; + +// Activate this option if logs should be written to per-user directories. +// Data will only be logged if a directry <log_dir>/<username>/ exists and is writable. +$config['per_user_logging'] = false; + +// Log sent messages to <log_dir>/sendmail or to syslog +$config['smtp_log'] = true; + +// Log successful/failed logins to <log_dir>/userlogins or to syslog +$config['log_logins'] = false; + +// Log session authentication errors to <log_dir>/session or to syslog +$config['log_session'] = false; + +// Log SQL queries to <log_dir>/sql or to syslog +$config['sql_debug'] = false; + +// Log IMAP conversation to <log_dir>/imap or to syslog +$config['imap_debug'] = false; + +// Log LDAP conversation to <log_dir>/ldap or to syslog +$config['ldap_debug'] = false; + +// Log SMTP conversation to <log_dir>/smtp or to syslog +$config['smtp_debug'] = false; + +// Log Memcache conversation to <log_dir>/memcache or to syslog +$config['memcache_debug'] = false; + +// Log APC conversation to <log_dir>/apc or to syslog +$config['apc_debug'] = false; + + +// ---------------------------------- +// IMAP +// ---------------------------------- + +// The mail host chosen to perform the log-in. +// Leave blank to show a textbox at login, give a list of hosts +// to display a pulldown menu or set one host as string. +// To use SSL/TLS connection, enter hostname with prefix ssl:// or tls:// +// Supported replacement variables: +// %n - hostname ($_SERVER['SERVER_NAME']) +// %t - hostname without the first part +// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part) +// %s - domain name after the '@' from e-mail address provided at login screen +// For example %n = mail.domain.tld, %t = domain.tld +// WARNING: After hostname change update of mail_host column in users table is +// required to match old user data records with the new host. +$config['default_host'] = 'localhost'; + +// TCP port used for IMAP connections +$config['default_port'] = 143; + +// IMAP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or null to use +// best server supported one) +$config['imap_auth_type'] = null; + +// IMAP socket context options +// See http://php.net/manual/en/context.ssl.php +// The example below enables server certificate validation +//$config['imap_conn_options'] = array( +// 'ssl' => array( +// 'verify_peer' => true, +// 'verify_depth' => 3, +// 'cafile' => '/etc/openssl/certs/ca.crt', +// ), +// ); +// Note: These can be also specified as an array of options indexed by hostname +$config['imap_conn_options'] = null; + +// IMAP connection timeout, in seconds. Default: 0 (use default_socket_timeout) +$config['imap_timeout'] = 0; + +// Optional IMAP authentication identifier to be used as authorization proxy +$config['imap_auth_cid'] = null; + +// Optional IMAP authentication password to be used for imap_auth_cid +$config['imap_auth_pw'] = null; + +// If you know your imap's folder delimiter, you can specify it here. +// Otherwise it will be determined automatically +$config['imap_delimiter'] = null; + +// If you know your imap's folder vendor, you can specify it here. +// Otherwise it will be determined automatically. Use lower-case +// identifiers, e.g. 'dovecot', 'cyrus', 'gmail', 'hmail', 'uw-imap'. +$config['imap_vendor'] = null; + +// If IMAP server doesn't support NAMESPACE extension, but you're +// using shared folders or personal root folder is non-empty, you'll need to +// set these options. All can be strings or arrays of strings. +// Folders need to be ended with directory separator, e.g. "INBOX." +// (special directory "~" is an exception to this rule) +// These can be used also to overwrite server's namespaces +$config['imap_ns_personal'] = null; +$config['imap_ns_other'] = null; +$config['imap_ns_shared'] = null; + +// By default IMAP capabilities are readed after connection to IMAP server +// In some cases, e.g. when using IMAP proxy, there's a need to refresh the list +// after login. Set to True if you've got this case. +$config['imap_force_caps'] = false; + +// By default list of subscribed folders is determined using LIST-EXTENDED +// extension if available. Some servers (dovecot 1.x) returns wrong results +// for shared namespaces in this case. https://github.com/roundcube/roundcubemail/issues/2474 +// Enable this option to force LSUB command usage instead. +// Deprecated: Use imap_disabled_caps = array('LIST-EXTENDED') +$config['imap_force_lsub'] = false; + +// Some server configurations (e.g. Courier) doesn't list folders in all namespaces +// Enable this option to force listing of folders in all namespaces +$config['imap_force_ns'] = false; + +// Some servers return hidden folders (name starting witha dot) +// from user home directory. IMAP RFC does not forbid that. +// Enable this option to hide them and disable possibility to create such. +$config['imap_skip_hidden_folders'] = false; + +// List of disabled imap extensions. +// Use if your IMAP server has broken implementation of some feature +// and you can't remove it from CAPABILITY string on server-side. +// For example UW-IMAP server has broken ESEARCH. +// Note: Because the list is cached, re-login is required after change. +$config['imap_disabled_caps'] = array(); + +// Log IMAP session identifers after each IMAP login. +// This is used to relate IMAP session with Roundcube user sessions +$config['imap_log_session'] = false; + +// Type of IMAP indexes cache. Supported values: 'db', 'apc' and 'memcache'. +$config['imap_cache'] = null; + +// Enables messages cache. Only 'db' cache is supported. +// This requires an IMAP server that supports QRESYNC and CONDSTORE +// extensions (RFC7162). See synchronize() in program/lib/Roundcube/rcube_imap_cache.php +// for further info, or if you experience syncing problems. +$config['messages_cache'] = false; + +// Lifetime of IMAP indexes cache. Possible units: s, m, h, d, w +$config['imap_cache_ttl'] = '10d'; + +// Lifetime of messages cache. Possible units: s, m, h, d, w +$config['messages_cache_ttl'] = '10d'; + +// Maximum cached message size in kilobytes. +// Note: On MySQL this should be less than (max_allowed_packet - 30%) +$config['messages_cache_threshold'] = 50; + + +// ---------------------------------- +// SMTP +// ---------------------------------- + +// SMTP server host (for sending mails). +// To use SSL/TLS connection, enter hostname with prefix ssl:// or tls:// +// Supported replacement variables: +// %h - user's IMAP hostname +// %n - hostname ($_SERVER['SERVER_NAME']) +// %t - hostname without the first part +// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part) +// %z - IMAP domain (IMAP hostname without the first part) +// For example %n = mail.domain.tld, %t = domain.tld +$config['smtp_server'] = 'localhost'; + +// SMTP port (default is 25; use 587 for STARTTLS or 465 for the +// deprecated SSL over SMTP (aka SMTPS)) +$config['smtp_port'] = 25; + +// SMTP username (if required) if you use %u as the username Roundcube +// will use the current username for login +$config['smtp_user'] = ''; + +// SMTP password (if required) if you use %p as the password Roundcube +// will use the current user's password for login +$config['smtp_pass'] = ''; + +// SMTP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or empty to use +// best server supported one) +$config['smtp_auth_type'] = ''; + +// Optional SMTP authentication identifier to be used as authorization proxy +$config['smtp_auth_cid'] = null; + +// Optional SMTP authentication password to be used for smtp_auth_cid +$config['smtp_auth_pw'] = null; + +// SMTP HELO host +// Hostname to give to the remote server for SMTP 'HELO' or 'EHLO' messages +// Leave this blank and you will get the server variable 'server_name' or +// localhost if that isn't defined. +$config['smtp_helo_host'] = ''; + +// SMTP connection timeout, in seconds. Default: 0 (use default_socket_timeout) +// Note: There's a known issue where using ssl connection with +// timeout > 0 causes connection errors (https://bugs.php.net/bug.php?id=54511) +$config['smtp_timeout'] = 0; + +// SMTP socket context options +// See http://php.net/manual/en/context.ssl.php +// The example below enables server certificate validation, and +// requires 'smtp_timeout' to be non zero. +// $config['smtp_conn_options'] = array( +// 'ssl' => array( +// 'verify_peer' => true, +// 'verify_depth' => 3, +// 'cafile' => '/etc/openssl/certs/ca.crt', +// ), +// ); +// Note: These can be also specified as an array of options indexed by hostname +$config['smtp_conn_options'] = null; + + +// ---------------------------------- +// LDAP +// ---------------------------------- + +// Type of LDAP cache. Supported values: 'db', 'apc' and 'memcache'. +$config['ldap_cache'] = 'db'; + +// Lifetime of LDAP cache. Possible units: s, m, h, d, w +$config['ldap_cache_ttl'] = '10m'; + + +// ---------------------------------- +// CACHE(S) +// ---------------------------------- + +// Use these hosts for accessing memcached +// Define any number of hosts in the form of hostname:port or unix:///path/to/socket.file +$config['memcache_hosts'] = null; // e.g. array( 'localhost:11211', '192.168.1.12:11211', 'unix:///var/tmp/memcached.sock' ); + +// Controls the use of a persistent connections to memcache servers +// See http://php.net/manual/en/memcache.addserver.php +$config['memcache_pconnect'] = true; + +// Value in seconds which will be used for connecting to the daemon +// See http://php.net/manual/en/memcache.addserver.php +$config['memcache_timeout'] = 1; + +// Controls how often a failed server will be retried (value in seconds). +// Setting this parameter to -1 disables automatic retry. +// See http://php.net/manual/en/memcache.addserver.php +$config['memcache_retry_interval'] = 15; + +// use these hosts for accessing Redis. +// Currently only one host is supported. cluster support may come in a future release. +// You can pass 4 fields, host, port, database and password. +// Unset fields will be set to the default values host=127.0.0.1, port=6379, database=0, password= (empty) +$config['redis_hosts'] = null; // e.g. array( 'localhost:6379' ); array( '192.168.1.1:6379:1:secret' ); + +// Maximum size of an object in memcache (in bytes). Default: 2MB +$config['memcache_max_allowed_packet'] = '2M'; + +// Maximum size of an object in APC cache (in bytes). Default: 2MB +$config['apc_max_allowed_packet'] = '2M'; + + +// ---------------------------------- +// SYSTEM +// ---------------------------------- + +// THIS OPTION WILL ALLOW THE INSTALLER TO RUN AND CAN EXPOSE SENSITIVE CONFIG DATA. +// ONLY ENABLE IT IF YOU'RE REALLY SURE WHAT YOU'RE DOING! +$config['enable_installer'] = false; + +// don't allow these settings to be overriden by the user +$config['dont_override'] = array(); + +// List of disabled UI elements/actions +$config['disabled_actions'] = array(); + +// define which settings should be listed under the 'advanced' block +// which is hidden by default +$config['advanced_prefs'] = array(); + +// provide an URL where a user can get support for this Roundcube installation +// PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE! +$config['support_url'] = ''; + +// replace Roundcube logo with this image +// specify an URL relative to the document root of this Roundcube installation +// an array can be used to specify different logos for specific template files, '*' for default logo +// for example array("*" => "/images/roundcube_logo.png", "messageprint" => "/images/roundcube_logo_print.png") +$config['skin_logo'] = null; + +// automatically create a new Roundcube user when log-in the first time. +// a new user will be created once the IMAP login succeeds. +// set to false if only registered users can use this service +$config['auto_create_user'] = true; + +// Enables possibility to log in using email address from user identities +$config['user_aliases'] = false; + +// use this folder to store log files +// must be writeable for the user who runs PHP process (Apache user if mod_php is being used) +// This is used by the 'file' log driver. +$config['log_dir'] = RCUBE_INSTALL_PATH . 'logs/'; + +// use this folder to store temp files +// must be writeable for the user who runs PHP process (Apache user if mod_php is being used) +$config['temp_dir'] = RCUBE_INSTALL_PATH . 'temp/'; + +// expire files in temp_dir after 48 hours +// possible units: s, m, h, d, w +$config['temp_dir_ttl'] = '48h'; + +// Enforce connections over https +// With this option enabled, all non-secure connections will be redirected. +// It can be also a port number, hostname or hostname:port if they are +// different than default HTTP_HOST:443 +$config['force_https'] = false; + +// tell PHP that it should work as under secure connection +// even if it doesn't recognize it as secure ($_SERVER['HTTPS'] is not set) +// e.g. when you're running Roundcube behind a https proxy +// this option is mutually exclusive to 'force_https' and only either one of them should be set to true. +$config['use_https'] = false; + +// Allow browser-autocompletion on login form. +// 0 - disabled, 1 - username and host only, 2 - username, host, password +$config['login_autocomplete'] = 0; + +// Forces conversion of logins to lower case. +// 0 - disabled, 1 - only domain part, 2 - domain and local part. +// If users authentication is case-insensitive this must be enabled. +// Note: After enabling it all user records need to be updated, e.g. with query: +// UPDATE users SET username = LOWER(username); +$config['login_lc'] = 2; + +// Maximum length (in bytes) of logon username and password. +$config['login_username_maxlen'] = 1024; +$config['login_password_maxlen'] = 1024; + +// Logon username filter. Regular expression for use with preg_match(). +// Example: '/^[a-z0-9_@.-]+$/' +$config['login_username_filter'] = null; + +// Brute-force attacks prevention. +// The value specifies maximum number of failed logon attempts per minute. +$config['login_rate_limit'] = 3; + +// Includes should be interpreted as PHP files +$config['skin_include_php'] = false; + +// display software version on login screen +$config['display_version'] = false; + +// Session lifetime in minutes +$config['session_lifetime'] = 10; + +// Session domain: .example.org +$config['session_domain'] = ''; + +// Session name. Default: 'roundcube_sessid' +$config['session_name'] = null; + +// Session authentication cookie name. Default: 'roundcube_sessauth' +$config['session_auth_name'] = null; + +// Session path. Defaults to PHP session.cookie_path setting. +$config['session_path'] = null; + +// Backend to use for session storage. Can either be 'db' (default), 'redis', 'memcache', or 'php' +// +// If set to 'memcache', a list of servers need to be specified in 'memcache_hosts' +// Make sure the Memcache extension (http://pecl.php.net/package/memcache) version >= 2.0.0 is installed +// +// If set to 'redis', a server needs to be specified in 'redis_hosts' +// Make sure the Redis extension (http://pecl.php.net/package/redis) version >= 2.0.0 is installed +// +// Setting this value to 'php' will use the default session save handler configured in PHP +$config['session_storage'] = 'db'; + +// check client IP in session authorization +$config['ip_check'] = false; + +// List of trusted proxies +// X_FORWARDED_* and X_REAL_IP headers are only accepted from these IPs +$config['proxy_whitelist'] = array(); + +// check referer of incoming requests +$config['referer_check'] = false; + +// X-Frame-Options HTTP header value sent to prevent from Clickjacking. +// Possible values: sameorigin|deny|allow-from <uri>. +// Set to false in order to disable sending the header. +$config['x_frame_options'] = 'sameorigin'; + +// This key is used for encrypting purposes, like storing of imap password +// in the session. For historical reasons it's called DES_key, but it's used +// with any configured cipher_method (see below). +$config['des_key'] = 'rcmail-!24ByteDESkey*Str'; + +// Encryption algorithm. You can use any method supported by openssl. +// Default is set for backward compatibility to DES-EDE3-CBC, +// but you can choose e.g. AES-256-CBC which we consider a better choice. +$config['cipher_method'] = 'DES-EDE3-CBC'; + +// Automatically add this domain to user names for login +// Only for IMAP servers that require full e-mail addresses for login +// Specify an array with 'host' => 'domain' values to support multiple hosts +// Supported replacement variables: +// %h - user's IMAP hostname +// %n - hostname ($_SERVER['SERVER_NAME']) +// %t - hostname without the first part +// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part) +// %z - IMAP domain (IMAP hostname without the first part) +// For example %n = mail.domain.tld, %t = domain.tld +$config['username_domain'] = ''; + +// Force domain configured in username_domain to be used for login. +// Any domain in username will be replaced by username_domain. +$config['username_domain_forced'] = false; + +// This domain will be used to form e-mail addresses of new users +// Specify an array with 'host' => 'domain' values to support multiple hosts +// Supported replacement variables: +// %h - user's IMAP hostname +// %n - http hostname ($_SERVER['SERVER_NAME']) +// %d - domain (http hostname without the first part) +// %z - IMAP domain (IMAP hostname without the first part) +// For example %n = mail.domain.tld, %t = domain.tld +$config['mail_domain'] = ''; + +// Password character set. +// If your authentication backend supports it, use "UTF-8". +// Otherwise, use the appropriate character set. +// Defaults to ISO-8859-1 for backward compatibility. +$config['password_charset'] = 'ISO-8859-1'; + +// How many seconds must pass between emails sent by a user +$config['sendmail_delay'] = 0; + +// Message size limit. Note that SMTP server(s) may use a different value. +// This limit is verified when user attaches files to a composed message. +// Size in bytes (possible unit suffix: K, M, G) +$config['max_message_size'] = '100M'; + +// Maximum number of recipients per message (including To, Cc, Bcc). +// Default: 0 (no limit) +$config['max_recipients'] = 0; + +// Maximum number of recipients per message exluding Bcc header. +// This is a soft limit, which means we only display a warning to the user. +// Default: 5 +$config['max_disclosed_recipients'] = 5; + +// Maximum allowed number of members of an address group. Default: 0 (no limit) +// If 'max_recipients' is set this value should be less or equal +$config['max_group_members'] = 0; + +// Name your service. This is displayed on the login screen and in the window title +$config['product_name'] = 'Roundcube Webmail'; + +// Add this user-agent to message headers when sending +$config['useragent'] = 'Roundcube Webmail/'.RCMAIL_VERSION; + +// try to load host-specific configuration +// see https://github.com/roundcube/roundcubemail/wiki/Configuration:-Multi-Domain-Setup +// for more details +$config['include_host_config'] = false; + +// path to a text file which will be added to each sent message +// paths are relative to the Roundcube root folder +$config['generic_message_footer'] = ''; + +// path to a text file which will be added to each sent HTML message +// paths are relative to the Roundcube root folder +$config['generic_message_footer_html'] = ''; + +// add a received header to outgoing mails containing the creators IP and hostname +$config['http_received_header'] = false; + +// Whether or not to encrypt the IP address and the host name +// these could, in some circles, be considered as sensitive information; +// however, for the administrator, these could be invaluable help +// when tracking down issues. +$config['http_received_header_encrypt'] = false; + +// number of chars allowed for line when wrapping text. +// text wrapping is done when composing/sending messages +$config['line_length'] = 72; + +// send plaintext messages as format=flowed +$config['send_format_flowed'] = true; + +// According to RFC2298, return receipt envelope sender address must be empty. +// If this option is true, Roundcube will use user's identity as envelope sender for MDN responses. +$config['mdn_use_from'] = false; + +// Set identities access level: +// 0 - many identities with possibility to edit all params +// 1 - many identities with possibility to edit all params but not email address +// 2 - one identity with possibility to edit all params +// 3 - one identity with possibility to edit all params but not email address +// 4 - one identity with possibility to edit only signature +$config['identities_level'] = 0; + +// Maximum size of uploaded image in kilobytes +// Images (in html signatures) are stored in database as data URIs +$config['identity_image_size'] = 64; + +// Mimetypes supported by the browser. +// attachments of these types will open in a preview window +// either a comma-separated list or an array: 'text/plain,text/html,text/xml,image/jpeg,image/gif,image/png,application/pdf' +$config['client_mimetypes'] = null; # null == default + +// Path to a local mime magic database file for PHPs finfo extension. +// Set to null if the default path should be used. +$config['mime_magic'] = null; + +// Absolute path to a local mime.types mapping table file. +// This is used to derive mime-types from the filename extension or vice versa. +// Such a file is usually part of the apache webserver. If you don't find a file named mime.types on your system, +// download it from http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types +$config['mime_types'] = null; + +// path to imagemagick identify binary (if not set we'll use Imagick or GD extensions) +$config['im_identify_path'] = null; + +// path to imagemagick convert binary (if not set we'll use Imagick or GD extensions) +$config['im_convert_path'] = null; + +// Size of thumbnails from image attachments displayed below the message content. +// Note: whether images are displayed at all depends on the 'inline_images' option. +// Set to 0 to display images in full size. +$config['image_thumbnail_size'] = 240; + +// maximum size of uploaded contact photos in pixel +$config['contact_photo_size'] = 160; + +// Enable DNS checking for e-mail address validation +$config['email_dns_check'] = false; + +// Disables saving sent messages in Sent folder (like gmail) (Default: false) +// Note: useful when SMTP server stores sent mail in user mailbox +$config['no_save_sent_messages'] = false; + +// Improve system security by using special URL with security token. +// This can be set to a number defining token length. Default: 16. +// Warning: This requires http server configuration. Sample: +// RewriteRule ^/roundcubemail/[a-zA-Z0-9]{16}/(.*) /roundcubemail/$1 [PT] +// Alias /roundcubemail /var/www/roundcubemail/ +// Note: Use assets_path to not prevent the browser from caching assets +$config['use_secure_urls'] = false; + +// Allows to define separate server/path for image/js/css files +// Warning: If the domain is different cross-domain access to some +// resources need to be allowed +// Sample: +// <FilesMatch ".(eot|ttf|woff)"> +// Header set Access-Control-Allow-Origin "*" +// </FilesMatch> +$config['assets_path'] = ''; + +// While assets_path is for the browser, assets_dir informs +// PHP code about the location of asset files in filesystem +$config['assets_dir'] = ''; + + +// ---------------------------------- +// PLUGINS +// ---------------------------------- + +// List of active plugins (in plugins/ directory) +$config['plugins'] = array(); + +// ---------------------------------- +// USER INTERFACE +// ---------------------------------- + +// default messages sort column. Use empty value for default server's sorting, +// or 'arrival', 'date', 'subject', 'from', 'to', 'fromto', 'size', 'cc' +$config['message_sort_col'] = ''; + +// default messages sort order +$config['message_sort_order'] = 'DESC'; + +// These cols are shown in the message list. Available cols are: +// subject, from, to, fromto, cc, replyto, date, size, status, flag, attachment, priority +$config['list_cols'] = array('subject', 'status', 'fromto', 'date', 'size', 'flag', 'attachment'); + +// the default locale setting (leave empty for auto-detection) +// RFC1766 formatted language name like en_US, de_DE, de_CH, fr_FR, pt_BR +$config['language'] = null; + +// use this format for date display (date or strftime format) +$config['date_format'] = 'Y-m-d'; + +// give this choice of date formats to the user to select from +// Note: do not use ambiguous formats like m/d/Y +$config['date_formats'] = array('Y-m-d', 'Y/m/d', 'Y.m.d', 'd-m-Y', 'd/m/Y', 'd.m.Y', 'j.n.Y'); + +// use this format for time display (date or strftime format) +$config['time_format'] = 'H:i'; + +// give this choice of time formats to the user to select from +$config['time_formats'] = array('G:i', 'H:i', 'g:i a', 'h:i A'); + +// use this format for short date display (derived from date_format and time_format) +$config['date_short'] = 'D H:i'; + +// use this format for detailed date/time formatting (derived from date_format and time_format) +$config['date_long'] = 'Y-m-d H:i'; + +// store draft message is this mailbox +// leave blank if draft messages should not be stored +// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) +$config['drafts_mbox'] = 'Drafts'; + +// store spam messages in this mailbox +// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) +$config['junk_mbox'] = 'Junk'; + +// store sent message is this mailbox +// leave blank if sent messages should not be stored +// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) +$config['sent_mbox'] = 'Sent'; + +// move messages to this folder when deleting them +// leave blank if they should be deleted directly +// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) +$config['trash_mbox'] = 'Trash'; + +// automatically create the above listed default folders on user login +$config['create_default_folders'] = false; + +// protect the default folders from renames, deletes, and subscription changes +$config['protect_default_folders'] = true; + +// Disable localization of the default folder names listed above +$config['show_real_foldernames'] = false; + +// if in your system 0 quota means no limit set this option to true +$config['quota_zero_as_unlimited'] = false; + +// Make use of the built-in spell checker. It is based on GoogieSpell. +$config['enable_spellcheck'] = true; + +// Enables spellchecker exceptions dictionary. +// Setting it to 'shared' will make the dictionary shared by all users. +$config['spellcheck_dictionary'] = false; + +// Set the spell checking engine. Possible values: +// - 'googie' - the default (also used for connecting to Nox Spell Server, see 'spellcheck_uri' setting) +// - 'pspell' - requires the PHP Pspell module and aspell installed +// - 'enchant' - requires the PHP Enchant module +// - 'atd' - install your own After the Deadline server or check with the people at http://www.afterthedeadline.com before using their API +// Since Google shut down their public spell checking service, the default settings +// connect to http://spell.roundcube.net which is a hosted service provided by Roundcube. +// You can connect to any other googie-compliant service by setting 'spellcheck_uri' accordingly. +$config['spellcheck_engine'] = 'googie'; + +// For locally installed Nox Spell Server or After the Deadline services, +// please specify the URI to call it. +// Get Nox Spell Server from http://orangoo.com/labs/?page_id=72 or +// the After the Deadline package from http://www.afterthedeadline.com. +// Leave empty to use the public API of service.afterthedeadline.com +$config['spellcheck_uri'] = ''; + +// These languages can be selected for spell checking. +// Configure as a PHP style hash array: array('en'=>'English', 'de'=>'Deutsch'); +// Leave empty for default set of available language. +$config['spellcheck_languages'] = NULL; + +// Makes that words with all letters capitalized will be ignored (e.g. GOOGLE) +$config['spellcheck_ignore_caps'] = false; + +// Makes that words with numbers will be ignored (e.g. g00gle) +$config['spellcheck_ignore_nums'] = false; + +// Makes that words with symbols will be ignored (e.g. g@@gle) +$config['spellcheck_ignore_syms'] = false; + +// Use this char/string to separate recipients when composing a new message +$config['recipients_separator'] = ','; + +// Number of lines at the end of a message considered to contain the signature. +// Increase this value if signatures are not properly detected and colored +$config['sig_max_lines'] = 15; + +// don't let users set pagesize to more than this value if set +$config['max_pagesize'] = 200; + +// Minimal value of user's 'refresh_interval' setting (in seconds) +$config['min_refresh_interval'] = 60; + +// Enables files upload indicator. Requires APC installed and enabled apc.rfc1867 option. +// By default refresh time is set to 1 second. You can set this value to true +// or any integer value indicating number of seconds. +$config['upload_progress'] = false; + +// Specifies for how many seconds the Undo button will be available +// after object delete action. Currently used with supporting address book sources. +// Setting it to 0, disables the feature. +$config['undo_timeout'] = 0; + +// A static list of canned responses which are immutable for the user +$config['compose_responses_static'] = array( +// array('name' => 'Canned Response 1', 'text' => 'Static Response One'), +// array('name' => 'Canned Response 2', 'text' => 'Static Response Two'), +); + +// ---------------------------------- +// ADDRESSBOOK SETTINGS +// ---------------------------------- + +// This indicates which type of address book to use. Possible choises: +// 'sql' (default), 'ldap' and ''. +// If set to 'ldap' then it will look at using the first writable LDAP +// address book as the primary address book and it will not display the +// SQL address book in the 'Address Book' view. +// If set to '' then no address book will be displayed or only the +// addressbook which is created by a plugin (like CardDAV). +$config['address_book_type'] = 'sql'; + +// In order to enable public ldap search, configure an array like the Verisign +// example further below. if you would like to test, simply uncomment the example. +// Array key must contain only safe characters, ie. a-zA-Z0-9_ +$config['ldap_public'] = array(); + +// If you are going to use LDAP for individual address books, you will need to +// set 'user_specific' to true and use the variables to generate the appropriate DNs to access it. +// +// The recommended directory structure for LDAP is to store all the address book entries +// under the users main entry, e.g.: +// +// o=root +// ou=people +// uid=user@domain +// mail=contact@contactdomain +// +// So the base_dn would be uid=%fu,ou=people,o=root +// The bind_dn would be the same as based_dn or some super user login. +/* + * example config for Verisign directory + * +$config['ldap_public']['Verisign'] = array( + 'name' => 'Verisign.com', + // Replacement variables supported in host names: + // %h - user's IMAP hostname + // %n - hostname ($_SERVER['SERVER_NAME']) + // %t - hostname without the first part + // %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part) + // %z - IMAP domain (IMAP hostname without the first part) + // For example %n = mail.domain.tld, %t = domain.tld + 'hosts' => array('directory.verisign.com'), + 'port' => 389, + 'use_tls' => false, + 'ldap_version' => 3, // using LDAPv3 + 'network_timeout' => 10, // The timeout (in seconds) for connect + bind arrempts. This is only supported in PHP >= 5.3.0 with OpenLDAP 2.x + 'user_specific' => false, // If true the base_dn, bind_dn and bind_pass default to the user's IMAP login. + // When 'user_specific' is enabled following variables can be used in base_dn/bind_dn config: + // %fu - The full username provided, assumes the username is an email + // address, uses the username_domain value if not an email address. + // %u - The username prior to the '@'. + // %d - The domain name after the '@'. + // %dc - The domain name hierarchal string e.g. "dc=test,dc=domain,dc=com" + // %dn - DN found by ldap search when search_filter/search_base_dn are used + 'base_dn' => '', + 'bind_dn' => '', + 'bind_pass' => '', + // It's possible to bind for an individual address book + // The login name is used to search for the DN to bind with + 'search_base_dn' => '', + 'search_filter' => '', // e.g. '(&(objectClass=posixAccount)(uid=%u))' + // DN and password to bind as before searching for bind DN, if anonymous search is not allowed + 'search_bind_dn' => '', + 'search_bind_pw' => '', + // Base DN and filter used for resolving the user's domain root DN which feeds the %dc variables + // Leave empty to skip this lookup and derive the root DN from the username domain + 'domain_base_dn' => '', + 'domain_filter' => '', + // Optional map of replacement strings => attributes used when binding for an individual address book + 'search_bind_attrib' => array(), // e.g. array('%udc' => 'ou') + // Default for %dn variable if search doesn't return DN value + 'search_dn_default' => '', + // Optional authentication identifier to be used as SASL authorization proxy + // bind_dn need to be empty + 'auth_cid' => '', + // SASL authentication method (for proxy auth), e.g. DIGEST-MD5 + 'auth_method' => '', + // Indicates if the addressbook shall be hidden from the list. + // With this option enabled you can still search/view contacts. + 'hidden' => false, + // Indicates if the addressbook shall not list contacts but only allows searching. + 'searchonly' => false, + // Indicates if we can write to the LDAP directory or not. + // If writable is true then these fields need to be populated: + // LDAP_Object_Classes, required_fields, LDAP_rdn + 'writable' => false, + // To create a new contact these are the object classes to specify + // (or any other classes you wish to use). + 'LDAP_Object_Classes' => array('top', 'inetOrgPerson'), + // The RDN field that is used for new entries, this field needs + // to be one of the search_fields, the base of base_dn is appended + // to the RDN to insert into the LDAP directory. + 'LDAP_rdn' => 'cn', + // The required fields needed to build a new contact as required by + // the object classes (can include additional fields not required by the object classes). + 'required_fields' => array('cn', 'sn', 'mail'), + 'search_fields' => array('mail', 'cn'), // fields to search in + // mapping of contact fields to directory attributes + // 1. for every attribute one can specify the number of values (limit) allowed. + // default is 1, a wildcard * means unlimited + // 2. another possible parameter is separator character for composite fields + // 3. it's possible to define field format for write operations, e.g. for date fields + // example: 'birthday:date[YmdHis\\Z]' + 'fieldmap' => array( + // Roundcube => LDAP:limit + 'name' => 'cn', + 'surname' => 'sn', + 'firstname' => 'givenName', + 'jobtitle' => 'title', + 'email' => 'mail:*', + 'phone:home' => 'homePhone', + 'phone:work' => 'telephoneNumber', + 'phone:mobile' => 'mobile', + 'phone:pager' => 'pager', + 'phone:workfax' => 'facsimileTelephoneNumber', + 'street' => 'street', + 'zipcode' => 'postalCode', + 'region' => 'st', + 'locality' => 'l', + // if you country is a complex object, you need to configure 'sub_fields' below + 'country' => 'c', + 'organization' => 'o', + 'department' => 'ou', + 'jobtitle' => 'title', + 'notes' => 'description', + 'photo' => 'jpegPhoto', + // these currently don't work: + // 'manager' => 'manager', + // 'assistant' => 'secretary', + ), + // Map of contact sub-objects (attribute name => objectClass(es)), e.g. 'c' => 'country' + 'sub_fields' => array(), + // Generate values for the following LDAP attributes automatically when creating a new record + 'autovalues' => array( + // 'uid' => 'md5(microtime())', // You may specify PHP code snippets which are then eval'ed + // 'mail' => '{givenname}.{sn}@mydomain.com', // or composite strings with placeholders for existing attributes + ), + 'sort' => 'cn', // The field to sort the listing by. + 'scope' => 'sub', // search mode: sub|base|list + 'filter' => '(objectClass=inetOrgPerson)', // used for basic listing (if not empty) and will be &'d with search queries. example: status=act + 'fuzzy_search' => true, // server allows wildcard search + 'vlv' => false, // Enable Virtual List View to more efficiently fetch paginated data (if server supports it) + 'vlv_search' => false, // Use Virtual List View functions for autocompletion searches (if server supports it) + 'numsub_filter' => '(objectClass=organizationalUnit)', // with VLV, we also use numSubOrdinates to query the total number of records. Set this filter to get all numSubOrdinates attributes for counting + 'config_root_dn' => 'cn=config', // Root DN to search config entries (e.g. vlv indexes) + 'sizelimit' => '0', // Enables you to limit the count of entries fetched. Setting this to 0 means no limit. + 'timelimit' => '0', // Sets the number of seconds how long is spend on the search. Setting this to 0 means no limit. + 'referrals' => false, // Sets the LDAP_OPT_REFERRALS option. Mostly used in multi-domain Active Directory setups + 'dereference' => 0, // Sets the LDAP_OPT_DEREF option. One of: LDAP_DEREF_NEVER, LDAP_DEREF_SEARCHING, LDAP_DEREF_FINDING, LDAP_DEREF_ALWAYS + // Used where addressbook contains aliases to objects elsewhere in the LDAP tree. + + // definition for contact groups (uncomment if no groups are supported) + // for the groups base_dn, the user replacements %fu, %u, $d and %dc work as for base_dn (see above) + // if the groups base_dn is empty, the contact base_dn is used for the groups as well + // -> in this case, assure that groups and contacts are separated due to the concernig filters! + 'groups' => array( + 'base_dn' => '', + 'scope' => 'sub', // Search mode: sub|base|list + 'filter' => '(objectClass=groupOfNames)', + 'object_classes' => array('top', 'groupOfNames'), // Object classes to be assigned to new groups + 'member_attr' => 'member', // Name of the default member attribute, e.g. uniqueMember + 'name_attr' => 'cn', // Attribute to be used as group name + 'email_attr' => 'mail', // Group email address attribute (e.g. for mailing lists) + 'member_filter' => '(objectclass=*)', // Optional filter to use when querying for group members + 'vlv' => false, // Use VLV controls to list groups + 'class_member_attr' => array( // Mapping of group object class to member attribute used in these objects + 'groupofnames' => 'member', + 'groupofuniquenames' => 'uniquemember' + ), + ), + // this configuration replaces the regular groups listing in the directory tree with + // a hard-coded list of groups, each listing entries with the configured base DN and filter. + // if the 'groups' option from above is set, it'll be shown as the first entry with the name 'Groups' + 'group_filters' => array( + 'departments' => array( + 'name' => 'Company Departments', + 'scope' => 'list', + 'base_dn' => 'ou=Groups,dc=mydomain,dc=com', + 'filter' => '(|(objectclass=groupofuniquenames)(objectclass=groupofurls))', + 'name_attr' => 'cn', + ), + 'customers' => array( + 'name' => 'Customers', + 'scope' => 'sub', + 'base_dn' => 'ou=Customers,dc=mydomain,dc=com', + 'filter' => '(objectClass=inetOrgPerson)', + 'name_attr' => 'sn', + ), + ), +); +*/ + +// An ordered array of the ids of the addressbooks that should be searched +// when populating address autocomplete fields server-side. ex: array('sql','Verisign'); +$config['autocomplete_addressbooks'] = array('sql'); + +// The minimum number of characters required to be typed in an autocomplete field +// before address books will be searched. Most useful for LDAP directories that +// may need to do lengthy results building given overly-broad searches +$config['autocomplete_min_length'] = 1; + +// Number of parallel autocomplete requests. +// If there's more than one address book, n parallel (async) requests will be created, +// where each request will search in one address book. By default (0), all address +// books are searched in one request. +$config['autocomplete_threads'] = 0; + +// Max. numer of entries in autocomplete popup. Default: 15. +$config['autocomplete_max'] = 15; + +// show address fields in this order +// available placeholders: {street}, {locality}, {zipcode}, {country}, {region} +$config['address_template'] = '{street}<br/>{locality} {zipcode}<br/>{country} {region}'; + +// Matching mode for addressbook search (including autocompletion) +// 0 - partial (*abc*), default +// 1 - strict (abc) +// 2 - prefix (abc*) +// Note: For LDAP sources fuzzy_search must be enabled to use 'partial' or 'prefix' mode +$config['addressbook_search_mode'] = 0; + +// List of fields used on contacts list and for autocompletion searches +// Warning: These are field names not LDAP attributes (see 'fieldmap' setting)! +$config['contactlist_fields'] = array('name', 'firstname', 'surname', 'email'); + +// Template of contact entry on the autocompletion list. +// You can use contact fields as: name, email, organization, department, etc. +// See program/steps/addressbook/func.inc for a list +$config['contact_search_name'] = '{name} <{email}>'; + +// ---------------------------------- +// USER PREFERENCES +// ---------------------------------- + +// Use this charset as fallback for message decoding +$config['default_charset'] = 'ISO-8859-1'; + +// skin name: folder from skins/ +$config['skin'] = 'larry'; + +// Enables using standard browser windows (that can be handled as tabs) +// instead of popup windows +$config['standard_windows'] = false; + +// show up to X items in messages list view +$config['mail_pagesize'] = 50; + +// show up to X items in contacts list view +$config['addressbook_pagesize'] = 50; + +// sort contacts by this col (preferably either one of name, firstname, surname) +$config['addressbook_sort_col'] = 'surname'; + +// the way how contact names are displayed in the list +// 0: display name +// 1: (prefix) firstname middlename surname (suffix) +// 2: (prefix) surname firstname middlename (suffix) +// 3: (prefix) surname, firstname middlename (suffix) +$config['addressbook_name_listing'] = 0; + +// use this timezone to display date/time +// valid timezone identifers are listed here: php.net/manual/en/timezones.php +// 'auto' will use the browser's timezone settings +$config['timezone'] = 'auto'; + +// prefer displaying HTML messages +$config['prefer_html'] = true; + +// display remote inline images +// 0 - Never, always ask +// 1 - Ask if sender is not in address book +// 2 - Always show inline images +$config['show_images'] = 0; + +// open messages in new window +$config['message_extwin'] = false; + +// open message compose form in new window +$config['compose_extwin'] = false; + +// compose html formatted messages by default +// 0 - never, +// 1 - always, +// 2 - on reply to HTML message, +// 3 - on forward or reply to HTML message +// 4 - always, except when replying to plain text message +$config['htmleditor'] = 0; + +// save copies of compose messages in the browser's local storage +// for recovery in case of browser crashes and session timeout. +$config['compose_save_localstorage'] = true; + +// show pretty dates as standard +$config['prettydate'] = true; + +// save compose message every 300 seconds (5min) +$config['draft_autosave'] = 300; + +// Interface layout. Default: 'widescreen'. +// 'widescreen' - three columns +// 'desktop' - two columns, preview on bottom +// 'list' - two columns, no preview +$config['layout'] = 'widescreen'; + +// Mark as read when viewing a message (delay in seconds) +// Set to -1 if messages should not be marked as read +$config['mail_read_time'] = 0; + +// Clear Trash on logout +$config['logout_purge'] = false; + +// Compact INBOX on logout +$config['logout_expunge'] = false; + +// Display attached images below the message body +$config['inline_images'] = true; + +// Encoding of long/non-ascii attachment names: +// 0 - Full RFC 2231 compatible +// 1 - RFC 2047 for 'name' and RFC 2231 for 'filename' parameter (Thunderbird's default) +// 2 - Full 2047 compatible +$config['mime_param_folding'] = 1; + +// Set true if deleted messages should not be displayed +// This will make the application run slower +$config['skip_deleted'] = false; + +// Set true to Mark deleted messages as read as well as deleted +// False means that a message's read status is not affected by marking it as deleted +$config['read_when_deleted'] = true; + +// Set to true to never delete messages immediately +// Use 'Purge' to remove messages marked as deleted +$config['flag_for_deletion'] = false; + +// Default interval for auto-refresh requests (in seconds) +// These are requests for system state updates e.g. checking for new messages, etc. +// Setting it to 0 disables the feature. +$config['refresh_interval'] = 60; + +// If true all folders will be checked for recent messages +$config['check_all_folders'] = false; + +// If true, after message delete/move, the next message will be displayed +$config['display_next'] = true; + +// Default messages listing mode. One of 'threads' or 'list'. +$config['default_list_mode'] = 'list'; + +// 0 - Do not expand threads +// 1 - Expand all threads automatically +// 2 - Expand only threads with unread messages +$config['autoexpand_threads'] = 0; + +// When replying: +// -1 - don't cite the original message +// 0 - place cursor below the original message +// 1 - place cursor above original message (top posting) +$config['reply_mode'] = 0; + +// When replying strip original signature from message +$config['strip_existing_sig'] = true; + +// Show signature: +// 0 - Never +// 1 - Always +// 2 - New messages only +// 3 - Forwards and Replies only +$config['show_sig'] = 1; + +// By default the signature is placed depending on cursor position (reply_mode). +// Sometimes it might be convenient to start the reply on top but keep +// the signature below the quoted text (sig_below = true). +$config['sig_below'] = false; + +// Enables adding of standard separator to the signature +$config['sig_separator'] = true; + +// Use MIME encoding (quoted-printable) for 8bit characters in message body +$config['force_7bit'] = false; + +// Defaults of the search field configuration. +// The array can contain a per-folder list of header fields which should be considered when searching +// The entry with key '*' stands for all folders which do not have a specific list set. +// Please note that folder names should to be in sync with $config['*_mbox'] options +$config['search_mods'] = null; // Example: array('*' => array('subject'=>1, 'from'=>1), 'Sent' => array('subject'=>1, 'to'=>1)); + +// Defaults of the addressbook search field configuration. +$config['addressbook_search_mods'] = null; // Example: array('name'=>1, 'firstname'=>1, 'surname'=>1, 'email'=>1, '*'=>1); + +// 'Delete always' +// This setting reflects if mail should be always deleted +// when moving to Trash fails. This is necessary in some setups +// when user is over quota and Trash is included in the quota. +$config['delete_always'] = false; + +// Directly delete messages in Junk instead of moving to Trash +$config['delete_junk'] = false; + +// Behavior if a received message requests a message delivery notification (read receipt) +// 0 = ask the user, 1 = send automatically, 2 = ignore (never send or ask) +// 3 = send automatically if sender is in addressbook, otherwise ask the user +// 4 = send automatically if sender is in addressbook, otherwise ignore +$config['mdn_requests'] = 0; + +// Return receipt checkbox default state +$config['mdn_default'] = 0; + +// Delivery Status Notification checkbox default state +// Note: This can be used only if smtp_server is non-empty +$config['dsn_default'] = 0; + +// Place replies in the folder of the message being replied to +$config['reply_same_folder'] = false; + +// Sets default mode of Forward feature to "forward as attachment" +$config['forward_attachment'] = false; + +// Defines address book (internal index) to which new contacts will be added +// By default it is the first writeable addressbook. +// Note: Use '0' for built-in address book. +$config['default_addressbook'] = null; + +// Enables spell checking before sending a message. +$config['spellcheck_before_send'] = false; + +// Skip alternative email addresses in autocompletion (show one address per contact) +$config['autocomplete_single'] = false; + +// Default font for composed HTML message. +// Supported values: Andale Mono, Arial, Arial Black, Book Antiqua, Courier New, +// Georgia, Helvetica, Impact, Tahoma, Terminal, Times New Roman, Trebuchet MS, Verdana +$config['default_font'] = 'Verdana'; + +// Default font size for composed HTML message. +// Supported sizes: 8pt, 10pt, 12pt, 14pt, 18pt, 24pt, 36pt +$config['default_font_size'] = '10pt'; + +// Enables display of email address with name instead of a name (and address in title) +$config['message_show_email'] = false; + +// Default behavior of Reply-All button: +// 0 - Reply-All always +// 1 - Reply-List if mailing list is detected +$config['reply_all_mode'] = 0; diff --git a/data/web/rc/config/mimetypes.php b/data/web/rc/config/mimetypes.php new file mode 100644 index 00000000..5fe3467b --- /dev/null +++ b/data/web/rc/config/mimetypes.php @@ -0,0 +1,58 @@ +<?php + +/** + * Local mapping file to specify mime-types based on common file-name extensions + * + * Please note that this mapping takes precedence over the content-based mime-type detection + * and should only contain mappings which cannot be detected properly from the file contents. + */ + +return array( + 'xls' => 'application/vnd.ms-excel', + 'xlm' => 'application/vnd.ms-excel', + 'xla' => 'application/vnd.ms-excel', + 'xlc' => 'application/vnd.ms-excel', + 'xlt' => 'application/vnd.ms-excel', + 'xlw' => 'application/vnd.ms-excel', + 'pdf' => 'application/pdf', + 'ppt' => 'application/vnd.ms-powerpoint', + 'pps' => 'application/vnd.ms-powerpoint', + 'pot' => 'application/vnd.ms-powerpoint', + 'doc' => 'application/msword', + 'dot' => 'application/msword', + 'odc' => 'application/vnd.oasis.opendocument.chart', + 'otc' => 'application/vnd.oasis.opendocument.chart-template', + 'odf' => 'application/vnd.oasis.opendocument.formula', + 'otf' => 'application/vnd.oasis.opendocument.formula-template', + 'odg' => 'application/vnd.oasis.opendocument.graphics', + 'otg' => 'application/vnd.oasis.opendocument.graphics-template', + 'odi' => 'application/vnd.oasis.opendocument.image', + 'oti' => 'application/vnd.oasis.opendocument.image-template', + 'odp' => 'application/vnd.oasis.opendocument.presentation', + 'otp' => 'application/vnd.oasis.opendocument.presentation-template', + 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', + 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', + 'odt' => 'application/vnd.oasis.opendocument.text', + 'otm' => 'application/vnd.oasis.opendocument.text-master', + 'ott' => 'application/vnd.oasis.opendocument.text-template', + 'oth' => 'application/vnd.oasis.opendocument.text-web', + 'docm' => 'application/vnd.ms-word.document.macroEnabled.12', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'dotm' => 'application/vnd.ms-word.template.macroEnabled.12', + 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', + 'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12', + 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', + 'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12', + 'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xps' => 'application/vnd.ms-xpsdocument', + 'rar' => 'application/x-rar-compressed', + '7z' => 'application/x-7z-compressed', + 's7z' => 'application/x-7z-compressed', + 'vcf' => 'text/vcard', + 'ics' => 'text/calendar', +); + +?> diff --git a/data/web/rc/index.php b/data/web/rc/index.php new file mode 100644 index 00000000..2efa1522 --- /dev/null +++ b/data/web/rc/index.php @@ -0,0 +1,324 @@ +<?php +/** + +-------------------------------------------------------------------------+ + | Roundcube Webmail IMAP Client | + | Version 1.3-beta | + | | + | Copyright (C) 2005-2017, The Roundcube Dev Team | + | | + | This program is free software: you can redistribute it and/or modify | + | it under the terms of the GNU General Public License (with exceptions | + | for skins & plugins) as published by the Free Software Foundation, | + | either version 3 of the License, or (at your option) any later version. | + | | + | This file forms part of the Roundcube Webmail Software for which the | + | following exception is added: Plugins and Skins which merely make | + | function calls to the Roundcube Webmail Software, and for that purpose | + | include it by reference shall not be considered modifications of | + | the software. | + | | + | If you wish to use this file in another project or create a modified | + | version that will not be part of the Roundcube Webmail Software, you | + | may remove the exception above and use this source code under the | + | original version of the license. | + | | + | This program is distributed in the hope that it will be useful, | + | but WITHOUT ANY WARRANTY; without even the implied warranty of | + | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | + | GNU General Public License for more details. | + | | + | You should have received a copy of the GNU General Public License | + | along with this program. If not, see http://www.gnu.org/licenses/. | + | | + +-------------------------------------------------------------------------+ + | Author: Thomas Bruederli <roundcube@gmail.com> | + | Author: Aleksander Machniak <alec@alec.pl> | + +-------------------------------------------------------------------------+ +*/ + +// include environment +require_once 'program/include/iniset.php'; + +// init application, start session, init output class, etc. +$RCMAIL = rcmail::get_instance(0, $GLOBALS['env']); + +// Make the whole PHP output non-cacheable (#1487797) +$RCMAIL->output->nocacheing_headers(); +$RCMAIL->output->common_headers(); + +// turn on output buffering +ob_start(); + +// check if config files had errors +if ($err_str = $RCMAIL->config->get_error()) { + rcmail::raise_error(array( + 'code' => 601, + 'type' => 'php', + 'message' => $err_str), false, true); +} + +// check DB connections and exit on failure +if ($err_str = $RCMAIL->db->is_error()) { + rcmail::raise_error(array( + 'code' => 603, + 'type' => 'db', + 'message' => $err_str), false, true); +} + +// error steps +if ($RCMAIL->action == 'error' && !empty($_GET['_code'])) { + rcmail::raise_error(array('code' => hexdec($_GET['_code'])), false, true); +} + +// check if https is required (for login) and redirect if necessary +if (empty($_SESSION['user_id']) && ($force_https = $RCMAIL->config->get('force_https', false))) { + // force_https can be true, <hostname>, <hostname>:<port>, <port> + if (!is_bool($force_https)) { + list($host, $port) = explode(':', $force_https); + + if (is_numeric($host) && empty($port)) { + $port = $host; + $host = ''; + } + } + + if (!rcube_utils::https_check($port ?: 443)) { + if (empty($host)) { + $host = preg_replace('/:[0-9]+$/', '', $_SERVER['HTTP_HOST']); + } + if ($port && $port != 443) { + $host .= ':' . $port; + } + + header('Location: https://' . $host . $_SERVER['REQUEST_URI']); + exit; + } +} + +// trigger startup plugin hook +$startup = $RCMAIL->plugins->exec_hook('startup', array('task' => $RCMAIL->task, 'action' => $RCMAIL->action)); +$RCMAIL->set_task($startup['task']); +$RCMAIL->action = $startup['action']; + +// try to log in +if ($RCMAIL->task == 'login' && $RCMAIL->action == 'login') { + $request_valid = $_SESSION['temp'] && $RCMAIL->check_request(); + $pass_charset = $RCMAIL->config->get('password_charset', 'ISO-8859-1'); + + // purge the session in case of new login when a session already exists + $RCMAIL->kill_session(); + + $auth = $RCMAIL->plugins->exec_hook('authenticate', array( + 'host' => $RCMAIL->autoselect_host(), + 'user' => trim(rcube_utils::get_input_value('_user', rcube_utils::INPUT_POST)), + 'pass' => rcube_utils::get_input_value('_pass', rcube_utils::INPUT_POST, true, $pass_charset), + 'valid' => $request_valid, + 'cookiecheck' => true, + )); + + // Login + if ($auth['valid'] && !$auth['abort'] + && $RCMAIL->login($auth['user'], $auth['pass'], $auth['host'], $auth['cookiecheck']) + ) { + // create new session ID, don't destroy the current session + // it was destroyed already by $RCMAIL->kill_session() above + $RCMAIL->session->remove('temp'); + $RCMAIL->session->regenerate_id(false); + + // send auth cookie if necessary + $RCMAIL->session->set_auth_cookie(); + + // log successful login + $RCMAIL->log_login(); + + // restore original request parameters + $query = array(); + if ($url = rcube_utils::get_input_value('_url', rcube_utils::INPUT_POST)) { + parse_str($url, $query); + + // prevent endless looping on login page + if ($query['_task'] == 'login') { + unset($query['_task']); + } + + // prevent redirect to compose with specified ID (#1488226) + if ($query['_action'] == 'compose' && !empty($query['_id'])) { + $query = array('_action' => 'compose'); + } + } + + // allow plugins to control the redirect url after login success + $redir = $RCMAIL->plugins->exec_hook('login_after', $query + array('_task' => 'mail')); + unset($redir['abort'], $redir['_err']); + + // send redirect + $OUTPUT->redirect($redir, 0, true); + } + else { + if (!$auth['valid']) { + $error_code = rcmail::ERROR_INVALID_REQUEST; + } + else { + $error_code = is_numeric($auth['error']) ? $auth['error'] : $RCMAIL->login_error(); + } + + $error_labels = array( + rcmail::ERROR_STORAGE => 'storageerror', + rcmail::ERROR_COOKIES_DISABLED => 'cookiesdisabled', + rcmail::ERROR_INVALID_REQUEST => 'invalidrequest', + rcmail::ERROR_INVALID_HOST => 'invalidhost', + rcmail::ERROR_RATE_LIMIT => 'accountlocked', + ); + + $error_message = !empty($auth['error']) && !is_numeric($auth['error']) ? $auth['error'] : ($error_labels[$error_code] ?: 'loginfailed'); + + $OUTPUT->show_message($error_message, 'warning'); + + // log failed login + $RCMAIL->log_login($auth['user'], true, $error_code); + + $RCMAIL->plugins->exec_hook('login_failed', array( + 'code' => $error_code, 'host' => $auth['host'], 'user' => $auth['user'])); + + $RCMAIL->kill_session(); + } +} + +// end session +else if ($RCMAIL->task == 'logout' && isset($_SESSION['user_id'])) { + $RCMAIL->request_security_check($mode = rcube_utils::INPUT_GET); + + $userdata = array( + 'user' => $_SESSION['username'], + 'host' => $_SESSION['storage_host'], + 'lang' => $RCMAIL->user->language, + ); + + $OUTPUT->show_message('loggedout'); + + $RCMAIL->logout_actions(); + $RCMAIL->kill_session(); + $RCMAIL->plugins->exec_hook('logout_after', $userdata); +} + +// check session and auth cookie +else if ($RCMAIL->task != 'login' && $_SESSION['user_id']) { + if (!$RCMAIL->session->check_auth()) { + $RCMAIL->kill_session(); + $session_error = true; + } +} + +// not logged in -> show login page +if (empty($RCMAIL->user->ID)) { + // log session failures + $task = rcube_utils::get_input_value('_task', rcube_utils::INPUT_GPC); + + if ($task && !in_array($task, array('login','logout')) + && !$session_error && ($sess_id = $_COOKIE[ini_get('session.name')]) + ) { + $RCMAIL->session->log("Aborted session $sess_id; no valid session data found"); + $session_error = true; + } + + if ($session_error || $_REQUEST['_err'] == 'session') { + $OUTPUT->show_message('sessionerror', 'error', null, true, -1); + } + + if ($OUTPUT->ajax_call || $OUTPUT->get_env('framed')) { + $OUTPUT->command('session_error', $RCMAIL->url(array('_err' => 'session'))); + $OUTPUT->send('iframe'); + } + + // check if installer is still active + if ($RCMAIL->config->get('enable_installer') && is_readable('./installer/index.php')) { + $OUTPUT->add_footer(html::div(array('style' => "background:#ef9398; border:2px solid #dc5757; padding:0.5em; margin:2em auto; width:50em"), + html::tag('h2', array('style' => "margin-top:0.2em"), "Installer script is still accessible") . + html::p(null, "The install script of your Roundcube installation is still stored in its default location!") . + html::p(null, "Please <b>remove</b> the whole <tt>installer</tt> folder from the Roundcube directory because + these files may expose sensitive configuration data like server passwords and encryption keys + to the public. Make sure you cannot access the <a href=\"./installer/\">installer script</a> from your browser.") + )); + } + + $plugin = $RCMAIL->plugins->exec_hook('unauthenticated', array('task' => 'login', 'error' => $session_error)); + + $RCMAIL->set_task($plugin['task']); + + $OUTPUT->send($plugin['task']); +} +else { + // CSRF prevention + $RCMAIL->request_security_check(); + + // check access to disabled actions + $disabled_actions = (array) $RCMAIL->config->get('disabled_actions'); + if (in_array($RCMAIL->task . '.' . ($RCMAIL->action ?: 'index'), $disabled_actions)) { + rcube::raise_error(array( + 'code' => 404, 'type' => 'php', + 'message' => "Action disabled"), true, true); + } +} + +// we're ready, user is authenticated and the request is safe +$plugin = $RCMAIL->plugins->exec_hook('ready', array('task' => $RCMAIL->task, 'action' => $RCMAIL->action)); +$RCMAIL->set_task($plugin['task']); +$RCMAIL->action = $plugin['action']; + +// handle special actions +if ($RCMAIL->action == 'keep-alive') { + $OUTPUT->reset(); + $RCMAIL->plugins->exec_hook('keep_alive', array()); + $OUTPUT->send(); +} +else if ($RCMAIL->action == 'save-pref') { + include INSTALL_PATH . 'program/steps/utils/save_pref.inc'; +} + + +// include task specific functions +if (is_file($incfile = INSTALL_PATH . 'program/steps/'.$RCMAIL->task.'/func.inc')) { + include_once $incfile; +} + +// allow 5 "redirects" to another action +$redirects = 0; $incstep = null; +while ($redirects < 5) { + // execute a plugin action + if (preg_match('/^plugin\./', $RCMAIL->action)) { + $RCMAIL->plugins->exec_action($RCMAIL->action); + break; + } + // execute action registered to a plugin task + else if ($RCMAIL->plugins->is_plugin_task($RCMAIL->task)) { + if (!$RCMAIL->action) $RCMAIL->action = 'index'; + $RCMAIL->plugins->exec_action($RCMAIL->task.'.'.$RCMAIL->action); + break; + } + // try to include the step file + else if (($stepfile = $RCMAIL->get_action_file()) + && is_file($incfile = INSTALL_PATH . 'program/steps/'.$RCMAIL->task.'/'.$stepfile) + ) { + // include action file only once (in case it don't exit) + include_once $incfile; + $redirects++; + } + else { + break; + } +} + +if ($RCMAIL->action == 'refresh') { + $RCMAIL->plugins->exec_hook('refresh', array('last' => intval(rcube_utils::get_input_value('_last', rcube_utils::INPUT_GPC)))); +} + +// parse main template (default) +$OUTPUT->send($RCMAIL->task); + +// if we arrive here, something went wrong +rcmail::raise_error(array( + 'code' => 404, + 'type' => 'php', + 'line' => __LINE__, + 'file' => __FILE__, + 'message' => "Invalid request"), true, true); diff --git a/data/web/rc/installer/check.php b/data/web/rc/installer/check.php new file mode 100644 index 00000000..8dfa3b37 --- /dev/null +++ b/data/web/rc/installer/check.php @@ -0,0 +1,263 @@ +<?php + +if (!class_exists('rcmail_install', false) || !is_object($RCI)) { + die("Not allowed! Please open installer/index.php instead."); +} + +?> +<form action="index.php" method="get"> +<?php + +$required_php_exts = array( + 'PCRE' => 'pcre', + 'DOM' => 'dom', + 'Session' => 'session', + 'XML' => 'xml', + 'JSON' => 'json', + 'PDO' => 'PDO', + 'Multibyte' => 'mbstring', + 'OpenSSL' => 'openssl', +); + +$optional_php_exts = array( + 'FileInfo' => 'fileinfo', + 'Libiconv' => 'iconv', + 'Intl' => 'intl', + 'Exif' => 'exif', + 'LDAP' => 'ldap', +); + +$required_libs = array( + 'PEAR' => 'pear.php.net', + 'Auth_SASL' => 'pear.php.net', + 'Net_SMTP' => 'pear.php.net', + 'Net_IDNA2' => 'pear.php.net', + 'Mail_mime' => 'pear.php.net', +); + +$optional_libs = array( + 'Net_LDAP3' => 'git.kolab.org', +); + +$ini_checks = array( + 'file_uploads' => 1, + 'session.auto_start' => 0, + 'mbstring.func_overload' => 0, + 'suhosin.session.encrypt' => 0, +); + +$optional_checks = array( + // required for utils/modcss.inc, should we require this? + 'allow_url_fopen' => 1, + 'date.timezone' => '-VALID-', +); + +$source_urls = array( + 'Sockets' => 'http://www.php.net/manual/en/book.sockets.php', + 'Session' => 'http://www.php.net/manual/en/book.session.php', + 'PCRE' => 'http://www.php.net/manual/en/book.pcre.php', + 'FileInfo' => 'http://www.php.net/manual/en/book.fileinfo.php', + 'Libiconv' => 'http://www.php.net/manual/en/book.iconv.php', + 'Multibyte' => 'http://www.php.net/manual/en/book.mbstring.php', + 'OpenSSL' => 'http://www.php.net/manual/en/book.openssl.php', + 'JSON' => 'http://www.php.net/manual/en/book.json.php', + 'DOM' => 'http://www.php.net/manual/en/book.dom.php', + 'Intl' => 'http://www.php.net/manual/en/book.intl.php', + 'Exif' => 'http://www.php.net/manual/en/book.exif.php', + 'oci8' => 'http://www.php.net/manual/en/book.oci8.php', + 'PDO' => 'http://www.php.net/manual/en/book.pdo.php', + 'LDAP' => 'http://www.php.net/manual/en/book.ldap.php', + 'pdo_mysql' => 'http://www.php.net/manual/en/ref.pdo-mysql.php', + 'pdo_pgsql' => 'http://www.php.net/manual/en/ref.pdo-pgsql.php', + 'pdo_sqlite' => 'http://www.php.net/manual/en/ref.pdo-sqlite.php', + 'pdo_sqlite2' => 'http://www.php.net/manual/en/ref.pdo-sqlite.php', + 'pdo_sqlsrv' => 'http://www.php.net/manual/en/ref.pdo-sqlsrv.php', + 'pdo_dblib' => 'http://www.php.net/manual/en/ref.pdo-dblib.php', + 'PEAR' => 'http://pear.php.net', + 'Net_SMTP' => 'http://pear.php.net/package/Net_SMTP', + 'Mail_mime' => 'http://pear.php.net/package/Mail_mime', + 'Net_IDNA2' => 'http://pear.php.net/package/Net_IDNA2', + 'Net_LDAP3' => 'https://git.kolab.org/diffusion/PNL', +); + +echo '<input type="hidden" name="_step" value="' . ($RCI->configured ? 3 : 2) . '" />'; +?> + +<h3>Checking PHP version</h3> +<?php + +define('MIN_PHP_VERSION', '5.4.0'); +if (version_compare(PHP_VERSION, MIN_PHP_VERSION, '>=')) { + $RCI->pass('Version', 'PHP ' . PHP_VERSION . ' detected'); +} else { + $RCI->fail('Version', 'PHP Version ' . MIN_PHP_VERSION . ' or greater is required ' . PHP_VERSION . ' detected'); +} +?> + +<h3>Checking PHP extensions</h3> +<p class="hint">The following modules/extensions are <em>required</em> to run Roundcube:</p> +<?php + +// get extensions location +$ext_dir = ini_get('extension_dir'); + +$prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : ''; +foreach ($required_php_exts as $name => $ext) { + if (extension_loaded($ext)) { + $RCI->pass($name); + } else { + $_ext = $ext_dir . '/' . $prefix . $ext . '.' . PHP_SHLIB_SUFFIX; + $msg = @is_readable($_ext) ? 'Could be loaded. Please add in php.ini' : ''; + $RCI->fail($name, $msg, $source_urls[$name]); + } + echo '<br />'; +} + +?> + +<p class="hint">The next couple of extensions are <em>optional</em> and recommended to get the best performance:</p> +<?php + +foreach ($optional_php_exts as $name => $ext) { + if (extension_loaded($ext)) { + $RCI->pass($name); + } + else { + $_ext = $ext_dir . '/' . $prefix . $ext . '.' . PHP_SHLIB_SUFFIX; + $msg = @is_readable($_ext) ? 'Could be loaded. Please add in php.ini' : ''; + $RCI->na($name, $msg, $source_urls[$name]); + } + echo '<br />'; +} + +?> + + +<h3>Checking available databases</h3> +<p class="hint">Check which of the supported extensions are installed. At least one of them is required.</p> + +<?php + +$prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : ''; +foreach ($RCI->supported_dbs as $database => $ext) { + if (extension_loaded($ext)) { + $RCI->pass($database); + $found_db_driver = true; + } + else { + $_ext = $ext_dir . '/' . $prefix . $ext . '.' . PHP_SHLIB_SUFFIX; + $msg = @is_readable($_ext) ? 'Could be loaded. Please add in php.ini' : ''; + $RCI->na($database, $msg, $source_urls[$ext]); + } + echo '<br />'; +} +if (empty($found_db_driver)) { + $RCI->failures++; +} + +?> + + +<h3>Check for required 3rd party libs</h3> +<p class="hint">This also checks if the include path is set correctly.</p> + +<?php + +foreach ($required_libs as $classname => $vendor) { + if (class_exists($classname)) { + $RCI->pass($classname); + } + else { + $RCI->fail($classname, "Failed to load class $classname from $vendor", $source_urls[$classname]); + } + echo "<br />"; +} + +foreach ($optional_libs as $classname => $vendor) { + if (class_exists($classname)) { + $RCI->pass($classname); + } + else { + $RCI->na($classname, "Recommended to install $classname from $vendor", $source_urls[$classname]); + } + echo "<br />"; +} + +?> + +<h3>Checking php.ini/.htaccess settings</h3> +<p class="hint">The following settings are <em>required</em> to run Roundcube:</p> + +<?php + +foreach ($ini_checks as $var => $val) { + $status = ini_get($var); + if ($val === '-NOTEMPTY-') { + if (empty($status)) { + $RCI->fail($var, "empty value detected"); + } + else { + $RCI->pass($var); + } + } + else if (filter_var($status, FILTER_VALIDATE_BOOLEAN) == $val) { + $RCI->pass($var); + } + else { + $RCI->fail($var, "is '$status', should be '$val'"); + } + echo '<br />'; +} +?> + +<p class="hint">The following settings are <em>optional</em> and recommended:</p> + +<?php + +foreach ($optional_checks as $var => $val) { + $status = ini_get($var); + if ($val === '-NOTEMPTY-') { + if (empty($status)) { + $RCI->optfail($var, "Could be set"); + } else { + $RCI->pass($var); + } + echo '<br />'; + continue; + } + if ($val === '-VALID-') { + if ($var == 'date.timezone') { + try { + $tz = new DateTimeZone($status); + $RCI->pass($var); + } + catch (Exception $e) { + $RCI->optfail($var, empty($status) ? "not set" : "invalid value detected: $status"); + } + } + else { + $RCI->pass($var); + } + } + else if (filter_var($status, FILTER_VALIDATE_BOOLEAN) == $val) { + $RCI->pass($var); + } + else { + $RCI->optfail($var, "is '$status', could be '$val'"); + } + echo '<br />'; +} +?> + +<?php + +if ($RCI->failures) { + echo '<p class="warning">Sorry but your webserver does not meet the requirements for Roundcube!<br /> + Please install the missing modules or fix the php.ini settings according to the above check results.<br /> + Hint: only checks showing <span class="fail">NOT OK</span> need to be fixed.</p>'; +} +echo '<p><br /><input type="submit" value="NEXT" ' . ($RCI->failures ? 'disabled' : '') . ' /></p>'; + +?> + +</form> diff --git a/data/web/rc/installer/client.js b/data/web/rc/installer/client.js new file mode 100644 index 00000000..b6095a91 --- /dev/null +++ b/data/web/rc/installer/client.js @@ -0,0 +1,51 @@ +/* + +-----------------------------------------------------------------------+ + | Roundcube installer cleint function | + | | + | This file is part of the Roundcube web development suite | + | Copyright (C) 2009-2012, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + | Author: Thomas Bruederli <roundcube@gmail.com> | + +-----------------------------------------------------------------------+ +*/ + +function toggleblock(id, link) +{ + var block = document.getElementById(id); + + return false; +} + + +function addhostfield() +{ + var container = document.getElementById('defaulthostlist'); + var row = document.createElement('div'); + var input = document.createElement('input'); + var link = document.createElement('a'); + + input.name = '_default_host[]'; + input.size = '30'; + link.href = '#'; + link.onclick = function() { removehostfield(this.parentNode); return false }; + link.className = 'removelink'; + link.innerHTML = 'remove'; + + row.appendChild(input); + row.appendChild(link); + container.appendChild(row); +} + + +function removehostfield(row) +{ + var container = document.getElementById('defaulthostlist'); + container.removeChild(row); +} + + diff --git a/data/web/rc/installer/config.php b/data/web/rc/installer/config.php new file mode 100644 index 00000000..95057ef3 --- /dev/null +++ b/data/web/rc/installer/config.php @@ -0,0 +1,696 @@ +<?php + +if (!class_exists('rcmail_install', false) || !is_object($RCI)) { + die("Not allowed! Please open installer/index.php instead."); +} + +// register these boolean fields +$RCI->bool_config_props = array( + 'ip_check' => 1, + 'enable_spellcheck' => 1, + 'auto_create_user' => 1, + 'smtp_log' => 1, + 'prefer_html' => 1, + 'debug_level' => 1, +); + +// allow the current user to get to the next step +$_SESSION['allowinstaller'] = true; + +if (!empty($_POST['submit'])) { + $_SESSION['config'] = $RCI->create_config(); + + if ($RCI->save_configfile($_SESSION['config'])) { + echo '<p class="notice">The config file was saved successfully into <tt>'.RCMAIL_CONFIG_DIR.'</tt> directory of your Roundcube installation.'; + + if ($RCI->legacy_config) { + echo '<br/><br/>Afterwards, please <b>remove</b> the old configuration files <tt>main.inc.php</tt> and <tt>db.inc.php</tt> from the config directory.'; + } + + echo '</p>'; + } + else { + if (($dir = sys_get_temp_dir()) && @is_writable($dir)) { + echo '<iframe name="getconfig" style="display:none"></iframe>'; + echo '<form id="getconfig_form" action="index.php" method="get" target="getconfig" style="display:none">'; + echo '<input name="_getconfig" value="2" /></form>'; + + $button_txt = html::quote('Save in ' . $dir); + $save_button = ' <input type="button" onclick="document.getElementById(\'getconfig_form\').submit()" value="' . $button_txt . '" />'; + } + + echo '<p class="notice">Copy or download the following configuration and save it'; + echo ' as <tt><b>config.inc.php</b></tt> within the <tt>'.RCUBE_CONFIG_DIR.'</tt> directory of your Roundcube installation.<br/>'; + echo ' Make sure that there are no characters outside the <tt><?php ?></tt> brackets when saving the file.'; + echo ' <input type="button" onclick="location.href=\'index.php?_getconfig=1\'" value="Download" />'; + echo $save_button; + + if ($RCI->legacy_config) { + echo '<br/><br/>Afterwards, please <b>remove</b> the old configuration files <tt>main.inc.php</tt> and <tt>db.inc.php</tt> from the config directory.'; + } + + echo '</p>'; + + $textbox = new html_textarea(array('rows' => 16, 'cols' => 60, 'class' => "configfile")); + echo $textbox->show(($_SESSION['config'])); + } + + echo '<p class="hint">Of course there are more options to configure. + Have a look at the defaults.inc.php file or visit <a href="https://github.com/roundcube/roundcubemail/wiki/Configuration" target="_blank">Howto_Config</a> to find out.</p>'; + + echo '<p><input type="button" onclick="location.href=\'./index.php?_step=3\'" value="CONTINUE" /></p>'; + + // echo '<style type="text/css"> .configblock { display:none } </style>'; + echo "\n<hr style='margin-bottom:1.6em' />\n"; +} + +?> +<form action="index.php" method="post"> +<input type="hidden" name="_step" value="2" /> + +<fieldset> +<legend>General configuration</legend> +<dl class="configblock"> + +<dt class="propname">product_name</dt> +<dd> +<?php + +$input_prodname = new html_inputfield(array('name' => '_product_name', 'size' => 30, 'id' => "cfgprodname")); +echo $input_prodname->show($RCI->getprop('product_name')); + +?> +<div>The name of your service (used to compose page titles)</div> +</dd> + +<dt class="propname">support_url</dt> +<dd> +<?php + +$input_support = new html_inputfield(array('name' => '_support_url', 'size' => 50, 'id' => "cfgsupporturl")); +echo $input_support->show($RCI->getprop('support_url')); + +?> +<div>Provide an URL where a user can get support for this Roundcube installation.<br/>PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE!</div> +<p class="hint">Enter an absolute URL (including http://) to a support page/form or a mailto: link.</p> +</dd> + +<dt class="propname">skin_logo</dt> +<dd> +<?php + +$input_skin = new html_inputfield(array('name' => '_skin_logo', 'size' => 50, 'id' => "cfgskinlogo")); +echo $input_skin->show($RCI->getprop('skin_logo')); + +?> +<div>Custom image to display instead of the Roundcube logo.</div> +<p class="hint">Enter a URL relative to the document root of this Roundcube installation.</p> +</dd> + +<dt class="propname">temp_dir</dt> +<dd> +<?php + +$input_tempdir = new html_inputfield(array('name' => '_temp_dir', 'size' => 30, 'id' => "cfgtempdir")); +echo $input_tempdir->show($RCI->getprop('temp_dir')); + +?> +<div>Use this folder to store temp files (must be writeable for webserver)</div> +</dd> + +<dt class="propname">des_key</dt> +<dd> +<?php + +$input_deskey = new html_inputfield(array('name' => '_des_key', 'size' => 30, 'id' => "cfgdeskey")); +echo $input_deskey->show($RCI->getprop('des_key')); + +?> +<div>This key is used to encrypt the users imap password before storing in the session record</div> +<p class="hint">It's a random generated string to ensure that every installation has its own key.</p> +</dd> + +<dt class="propname">ip_check</dt> +<dd> +<?php + +$check_ipcheck = new html_checkbox(array('name' => '_ip_check', 'id' => "cfgipcheck")); +echo $check_ipcheck->show(intval($RCI->getprop('ip_check')), array('value' => 1)); + +?> +<label for="cfgipcheck">Check client IP in session authorization</label><br /> + +<p class="hint">This increases security but can cause sudden logouts when someone uses a proxy with changing IPs.</p> +</dd> + + +<dt class="propname">enable_spellcheck</dt> +<dd> +<?php +$check_spell = new html_checkbox(array('name' => '_enable_spellcheck', 'id' => "cfgspellcheck")); +echo $check_spell->show(intval($RCI->getprop('enable_spellcheck')), array('value' => 1)); +?> +<label for="cfgspellcheck">Make use of the spell checker</label><br /> +</dd> + +<dt class="propname">spellcheck_engine</dt> +<dd> +<?php +$select_spell = new html_select(array('name' => '_spellcheck_engine', 'id' => "cfgspellcheckengine")); +if (extension_loaded('pspell')) + $select_spell->add('Pspell', 'pspell'); +if (extension_loaded('enchant')) + $select_spell->add('Enchant', 'enchant'); +$select_spell->add('Googie', 'googie'); +$select_spell->add('ATD', 'atd'); + +echo $select_spell->show($RCI->is_post ? $_POST['_spellcheck_engine'] : 'pspell'); + +?> +<label for="cfgspellcheckengine">Which spell checker to use</label><br /> + +<p class="hint">Googie implies that the message content will be sent to external server to check the spelling.</p> +</dd> + +<dt class="propname">identities_level</dt> +<dd> +<?php + +$input_ilevel = new html_select(array('name' => '_identities_level', 'id' => "cfgidentitieslevel")); +$input_ilevel->add('many identities with possibility to edit all params', 0); +$input_ilevel->add('many identities with possibility to edit all params but not email address', 1); +$input_ilevel->add('one identity with possibility to edit all params', 2); +$input_ilevel->add('one identity with possibility to edit all params but not email address', 3); +$input_ilevel->add('one identity with possibility to edit only signature', 4); +echo $input_ilevel->show($RCI->getprop('identities_level'), 0); + +?> +<div>Level of identities access</div> +<p class="hint">Defines what users can do with their identities.</p> +</dd> + +</dl> +</fieldset> + +<fieldset> +<legend>Logging & Debugging</legend> +<dl class="loggingblock"> + +<dt class="propname">debug_level</dt> +<dd> +<?php + +$value = $RCI->getprop('debug_level'); +$check_debug = new html_checkbox(array('name' => '_debug_level[]')); +echo $check_debug->show(($value & 1) ? 1 : 0 , array('value' => 1, 'id' => 'cfgdebug1')); +echo '<label for="cfgdebug1">Log errors</label><br />'; + +echo $check_debug->show(($value & 4) ? 4 : 0, array('value' => 4, 'id' => 'cfgdebug4')); +echo '<label for="cfgdebug4">Print errors (to the browser)</label><br />'; + +?> +</dd> + +<dt class="propname">log_driver</dt> +<dd> +<?php + +$select_log_driver = new html_select(array('name' => '_log_driver', 'id' => "cfglogdriver")); +$select_log_driver->add(array('file', 'syslog'), array('file', 'syslog')); +echo $select_log_driver->show($RCI->getprop('log_driver', 'file')); + +?> +<div>How to do logging? 'file' - write to files in the log directory, 'syslog' - use the syslog facility.</div> +</dd> + +<dt class="propname">log_dir</dt> +<dd> +<?php + +$input_logdir = new html_inputfield(array('name' => '_log_dir', 'size' => 30, 'id' => "cfglogdir")); +echo $input_logdir->show($RCI->getprop('log_dir')); + +?> +<div>Use this folder to store log files (must be writeable for webserver). Note that this only applies if you are using the 'file' log_driver.</div> +</dd> + +<dt class="propname">syslog_id</dt> +<dd> +<?php + +$input_syslogid = new html_inputfield(array('name' => '_syslog_id', 'size' => 30, 'id' => "cfgsyslogid")); +echo $input_syslogid->show($RCI->getprop('syslog_id', 'roundcube')); + +?> +<div>What ID to use when logging with syslog. Note that this only applies if you are using the 'syslog' log_driver.</div> +</dd> + +<dt class="propname">syslog_facility</dt> +<dd> +<?php + +$input_syslogfacility = new html_select(array('name' => '_syslog_facility', 'id' => "cfgsyslogfacility")); +$input_syslogfacility->add('user-level messages', LOG_USER); +$input_syslogfacility->add('mail subsystem', LOG_MAIL); +$input_syslogfacility->add('local level 0', LOG_LOCAL0); +$input_syslogfacility->add('local level 1', LOG_LOCAL1); +$input_syslogfacility->add('local level 2', LOG_LOCAL2); +$input_syslogfacility->add('local level 3', LOG_LOCAL3); +$input_syslogfacility->add('local level 4', LOG_LOCAL4); +$input_syslogfacility->add('local level 5', LOG_LOCAL5); +$input_syslogfacility->add('local level 6', LOG_LOCAL6); +$input_syslogfacility->add('local level 7', LOG_LOCAL7); +echo $input_syslogfacility->show($RCI->getprop('syslog_facility'), LOG_USER); + +?> +<div>What ID to use when logging with syslog. Note that this only applies if you are using the 'syslog' log_driver.</div> +</dd> + + + + +</dl> +</fieldset> + + +<fieldset> +<legend>Database setup</legend> +<dl class="configblock" id="cgfblockdb"> +<dt class="propname">db_dsnw</dt> +<dd> +<p>Database settings for read/write operations:</p> +<?php + +$select_dbtype = new html_select(array('name' => '_dbtype', 'id' => "cfgdbtype")); +foreach ($RCI->supported_dbs as $database => $ext) { + if (extension_loaded($ext)) { + $select_dbtype->add($database, substr($ext, 4)); + } +} + +$input_dbhost = new html_inputfield(array('name' => '_dbhost', 'size' => 20, 'id' => "cfgdbhost")); +$input_dbname = new html_inputfield(array('name' => '_dbname', 'size' => 20, 'id' => "cfgdbname")); +$input_dbuser = new html_inputfield(array('name' => '_dbuser', 'size' => 20, 'id' => "cfgdbuser")); +$input_dbpass = new html_inputfield(array('name' => '_dbpass', 'size' => 20, 'id' => "cfgdbpass")); + +$dsnw = rcube_db::parse_dsn($RCI->getprop('db_dsnw')); + +echo $select_dbtype->show($RCI->is_post ? $_POST['_dbtype'] : $dsnw['phptype']); +echo '<label for="cfgdbtype">Database type</label><br />'; +echo $input_dbhost->show($RCI->is_post ? $_POST['_dbhost'] : $dsnw['hostspec']); +echo '<label for="cfgdbhost">Database server (omit for sqlite)</label><br />'; +echo $input_dbname->show($RCI->is_post ? $_POST['_dbname'] : $dsnw['database']); +echo '<label for="cfgdbname">Database name (use absolute path and filename for sqlite)</label><br />'; +echo $input_dbuser->show($RCI->is_post ? $_POST['_dbuser'] : $dsnw['username']); +echo '<label for="cfgdbuser">Database user name (needs write permissions)(omit for sqlite)</label><br />'; +echo $input_dbpass->show($RCI->is_post ? $_POST['_dbpass'] : $dsnw['password']); +echo '<label for="cfgdbpass">Database password (omit for sqlite)</label><br />'; + +?> +</dd> + +<dt class="propname">db_prefix</dt> +<dd> +<?php + +$input_prefix = new html_inputfield(array('name' => '_db_prefix', 'size' => 20, 'id' => "cfgdbprefix")); +echo $input_prefix->show($RCI->getprop('db_prefix')); + +?> +<div>Optional prefix that will be added to database object names (tables and sequences).</div> +</dd> + +</dl> +</fieldset> + + +<fieldset> +<legend>IMAP Settings</legend> +<dl class="configblock" id="cgfblockimap"> +<dt class="propname">default_host</dt> +<dd> +<div>The IMAP host(s) chosen to perform the log-in</div> +<div id="defaulthostlist"> +<?php + +$text_imaphost = new html_inputfield(array('name' => '_default_host[]', 'size' => 30)); +$default_hosts = $RCI->get_hostlist(); + +if (empty($default_hosts)) + $default_hosts = array(''); + +$i = 0; +foreach ($default_hosts as $host) { + echo '<div id="defaulthostentry'.$i.'">' . $text_imaphost->show($host); + if ($i++ > 0) + echo '<a href="#" onclick="removehostfield(this.parentNode);return false" class="removelink" title="Remove this entry">remove</a>'; + echo '</div>'; +} + +?> +</div> +<div><a href="javascript:addhostfield()" class="addlink" title="Add another field">add</a></div> + +<p class="hint">Leave blank to show a textbox at login. To use SSL/IMAPS connection, type ssl://hostname</p> +</dd> + +<dt class="propname">default_port</dt> +<dd> +<?php + +$text_imapport = new html_inputfield(array('name' => '_default_port', 'size' => 6, 'id' => "cfgimapport")); +echo $text_imapport->show($RCI->getprop('default_port')); + +?> +<div>TCP port used for IMAP connections</div> +</dd> + +<dt class="propname">username_domain</dt> +<dd> +<?php + +$text_userdomain = new html_inputfield(array('name' => '_username_domain', 'size' => 30, 'id' => "cfguserdomain")); +echo $text_userdomain->show($RCI->getprop('username_domain')); + +?> +<div>Automatically add this domain to user names for login</div> + +<p class="hint">Only for IMAP servers that require full e-mail addresses for login</p> +</dd> + +<dt class="propname">auto_create_user</dt> +<dd> +<?php + +$check_autocreate = new html_checkbox(array('name' => '_auto_create_user', 'id' => "cfgautocreate")); +echo $check_autocreate->show(intval($RCI->getprop('auto_create_user')), array('value' => 1)); + +?> +<label for="cfgautocreate">Automatically create a new Roundcube user when log-in the first time</label><br /> + +<p class="hint">A user is authenticated by the IMAP server but it requires a local record to store settings +and contacts. With this option enabled a new user record will automatically be created once the IMAP login succeeds.</p> + +<p class="hint">If this option is disabled, the login only succeeds if there's a matching user-record in the local Roundcube database +what means that you have to create those records manually or disable this option after the first login.</p> +</dd> + +<dt class="propname">sent_mbox</dt> +<dd> +<?php + +$text_sentmbox = new html_inputfield(array('name' => '_sent_mbox', 'size' => 20, 'id' => "cfgsentmbox")); +echo $text_sentmbox->show($RCI->getprop('sent_mbox')); + +?> +<div>Store sent messages in this folder</div> + +<p class="hint">Leave blank if sent messages should not be stored. Note: folder must include namespace prefix if any.</p> +</dd> + +<dt class="propname">trash_mbox</dt> +<dd> +<?php + +$text_trashmbox = new html_inputfield(array('name' => '_trash_mbox', 'size' => 20, 'id' => "cfgtrashmbox")); +echo $text_trashmbox->show($RCI->getprop('trash_mbox')); + +?> +<div>Move messages to this folder when deleting them</div> + +<p class="hint">Leave blank if they should be deleted directly. Note: folder must include namespace prefix if any.</p> +</dd> + +<dt class="propname">drafts_mbox</dt> +<dd> +<?php + +$text_draftsmbox = new html_inputfield(array('name' => '_drafts_mbox', 'size' => 20, 'id' => "cfgdraftsmbox")); +echo $text_draftsmbox->show($RCI->getprop('drafts_mbox')); + +?> +<div>Store draft messages in this folder</div> + +<p class="hint">Leave blank if they should not be stored. Note: folder must include namespace prefix if any.</p> +</dd> + +<dt class="propname">junk_mbox</dt> +<dd> +<?php + +$text_junkmbox = new html_inputfield(array('name' => '_junk_mbox', 'size' => 20, 'id' => "cfgjunkmbox")); +echo $text_junkmbox->show($RCI->getprop('junk_mbox')); + +?> +<div>Store spam messages in this folder</div> + +<p class="hint">Note: folder must include namespace prefix if any.</p> +</dd> + +</dd> +</dl> +</fieldset> + + +<fieldset> +<legend>SMTP Settings</legend> +<dl class="configblock" id="cgfblocksmtp"> +<dt class="propname">smtp_server</dt> +<dd> +<?php + +$text_smtphost = new html_inputfield(array('name' => '_smtp_server', 'size' => 30, 'id' => "cfgsmtphost")); +echo $text_smtphost->show($RCI->getprop('smtp_server', 'localhost')); + +?> +<div>Use this host for sending mails</div> + +<p class="hint">To use SSL connection, set ssl://smtp.host.com.</p> +</dd> + +<dt class="propname">smtp_port</dt> +<dd> +<?php + +$text_smtpport = new html_inputfield(array('name' => '_smtp_port', 'size' => 6, 'id' => "cfgsmtpport")); +echo $text_smtpport->show($RCI->getprop('smtp_port')); + +?> +<div>SMTP port (default is 25; 465 for SSL; 587 for submission)</div> +</dd> + +<dt class="propname">smtp_user/smtp_pass</dt> +<dd> +<?php + +$text_smtpuser = new html_inputfield(array('name' => '_smtp_user', 'size' => 20, 'id' => "cfgsmtpuser")); +$text_smtppass = new html_inputfield(array('name' => '_smtp_pass', 'size' => 20, 'id' => "cfgsmtppass")); +echo $text_smtpuser->show($RCI->getprop('smtp_user')); +echo $text_smtppass->show($RCI->getprop('smtp_pass')); + +?> +<div>SMTP username and password (if required)</div> +<p> +<?php + +$check_smtpuser = new html_checkbox(array('name' => '_smtp_user_u', 'id' => "cfgsmtpuseru")); +echo $check_smtpuser->show($RCI->getprop('smtp_user') == '%u' || $_POST['_smtp_user_u'] ? 1 : 0, array('value' => 1)); + +?> +<label for="cfgsmtpuseru">Use the current IMAP username and password for SMTP authentication</label> +</p> +</dd> +<!-- +<dt class="propname">smtp_auth_type</dt> +<dd> +<?php +/* +$select_smtpauth = new html_select(array('name' => '_smtp_auth_type', 'id' => "cfgsmtpauth")); +$select_smtpauth->add(array('(auto)', 'PLAIN', 'DIGEST-MD5', 'CRAM-MD5', 'LOGIN'), array('0', 'PLAIN', 'DIGEST-MD5', 'CRAM-MD5', 'LOGIN')); +echo $select_smtpauth->show(intval($RCI->getprop('smtp_auth_type'))); +*/ +?> +<div>Method to authenticate at the SMTP server. Choose (auto) if you don't know what this is</div> +</dd> +--> +<dt class="propname">smtp_log</dt> +<dd> +<?php + +$check_smtplog = new html_checkbox(array('name' => '_smtp_log', 'id' => "cfgsmtplog")); +echo $check_smtplog->show(intval($RCI->getprop('smtp_log')), array('value' => 1)); + +?> +<label for="cfgsmtplog">Log sent messages in <tt>{log_dir}/sendmail</tt> or to syslog.</label><br /> +</dd> + +</dl> +</fieldset> + + +<fieldset> +<legend>Display settings & user prefs</legend> +<dl class="configblock" id="cgfblockdisplay"> + +<dt class="propname">language <span class="userconf">*</span></dt> +<dd> +<?php + +$input_locale = new html_inputfield(array('name' => '_language', 'size' => 6, 'id' => "cfglocale")); +echo $input_locale->show($RCI->getprop('language')); + +?> +<div>The default locale setting. This also defines the language of the login screen.<br/>Leave it empty to auto-detect the user agent language.</div> +<p class="hint">Enter a <a href="http://www.faqs.org/rfcs/rfc1766">RFC1766</a> formatted language name. Examples: en_US, de_DE, de_CH, fr_FR, pt_BR</p> +</dd> + +<dt class="propname">skin <span class="userconf">*</span></dt> +<dd> +<?php + +$input_skin = new html_select(array('name' => '_skin', 'id' => "cfgskin")); +$input_skin->add($RCI->list_skins()); +echo $input_skin->show($RCI->getprop('skin')); + +?> +<div>Name of interface skin (folder in /skins)</div> +</dd> + +<dt class="propname">mail_pagesize <span class="userconf">*</span></dt> +<dd> +<?php + +$pagesize = $RCI->getprop('mail_pagesize'); +if (!$pagesize) { + $pagesize = $RCI->getprop('pagesize'); +} +$input_pagesize = new html_inputfield(array('name' => '_mail_pagesize', 'size' => 6, 'id' => "cfgmailpagesize")); +echo $input_pagesize->show($pagesize); + +?> +<div>Show up to X items in the mail messages list view.</div> +</dd> + +<dt class="propname">addressbook_pagesize <span class="userconf">*</span></dt> +<dd> +<?php + +$pagesize = $RCI->getprop('addressbook_pagesize'); +if (!$pagesize) { + $pagesize = $RCI->getprop('pagesize'); +} +$input_pagesize = new html_inputfield(array('name' => '_addressbook_pagesize', 'size' => 6, 'id' => "cfgabookpagesize")); +echo $input_pagesize->show($pagesize); + +?> +<div>Show up to X items in the contacts list view.</div> +</dd> + +<dt class="propname">prefer_html <span class="userconf">*</span></dt> +<dd> +<?php + +$check_htmlview = new html_checkbox(array('name' => '_prefer_html', 'id' => "cfghtmlview", 'value' => 1)); +echo $check_htmlview->show(intval($RCI->getprop('prefer_html'))); + +?> +<label for="cfghtmlview">Prefer displaying HTML messages</label><br /> +</dd> + +<dt class="propname">htmleditor <span class="userconf">*</span></dt> +<dd> +<label for="cfghtmlcompose">Compose HTML formatted messages</label> +<?php + +$select_htmlcomp = new html_select(array('name' => '_htmleditor', 'id' => "cfghtmlcompose")); +$select_htmlcomp->add('never', 0); +$select_htmlcomp->add('always', 1); +$select_htmlcomp->add('on reply to HTML message only', 2); +echo $select_htmlcomp->show(intval($RCI->getprop('htmleditor'))); + +?> +</dd> + +<dt class="propname">draft_autosave <span class="userconf">*</span></dt> +<dd> +<label for="cfgautosave">Save compose message every</label> +<?php + +$select_autosave = new html_select(array('name' => '_draft_autosave', 'id' => 'cfgautosave')); +$select_autosave->add('never', 0); +foreach (array(1, 3, 5, 10) as $i => $min) + $select_autosave->add("$min min", $min*60); + +echo $select_autosave->show(intval($RCI->getprop('draft_autosave'))); + +?> +</dd> + +<dt class="propname">mdn_requests <span class="userconf">*</span></dt> +<dd> +<?php + +$mdn_opts = array( + 0 => 'ask the user', + 1 => 'send automatically', + 3 => 'send receipt to user contacts, otherwise ask the user', + 4 => 'send receipt to user contacts, otherwise ignore', + 2 => 'ignore', +); + +$select_mdnreq = new html_select(array('name' => '_mdn_requests', 'id' => "cfgmdnreq")); +$select_mdnreq->add(array_values($mdn_opts), array_keys($mdn_opts)); +echo $select_mdnreq->show(intval($RCI->getprop('mdn_requests'))); + +?> +<div>Behavior if a received message requests a message delivery notification (read receipt)</div> +</dd> + +<dt class="propname">mime_param_folding <span class="userconf">*</span></dt> +<dd> +<?php + +$select_param_folding = new html_select(array('name' => '_mime_param_folding', 'id' => "cfgmimeparamfolding")); +$select_param_folding->add('Full RFC 2231 (Roundcube, Thunderbird)', '0'); +$select_param_folding->add('RFC 2047/2231 (MS Outlook, OE)', '1'); +$select_param_folding->add('Full RFC 2047 (deprecated)', '2'); + +echo $select_param_folding->show(strval($RCI->getprop('mime_param_folding'))); + +?> +<div>How to encode attachment long/non-ascii names</div> +</dd> + +</dl> + +<p class="hint"><span class="userconf">*</span>  These settings are defaults for the user preferences</p> +</fieldset> + + +<fieldset> +<legend>Plugins</legend> +<dl class="configblock" id="cgfblockdisplay"> + +<?php +$plugins = $RCI->list_plugins(); +foreach($plugins as $p) +{ + $p_check = new html_checkbox(array('name' => '_plugins_'.$p['name'], 'id' => 'cfgplugin_'.$p['name'], 'value' => $p['name'])); + echo '<dt class="propname"><label>'; + echo $p_check->show($p['enabled'] ? $p['name'] : 0); + echo ' ' . $p['name'] . '</label></dt><dd>'; + echo '<label for="cfgplugin_'.$p['name'].'" class="hint">' . $p['desc'] . '</label><br/></dd>'; +} + +?> +</dl> + +<p class="hint">Please consider checking dependencies of enabled plugins</p> +</fieldset> + +<?php + +echo '<p><input type="submit" name="submit" value="' . ($RCI->configured ? 'UPDATE' : 'CREATE') . ' CONFIG" ' . ($RCI->failures ? 'disabled' : '') . ' /></p>'; + +?> +</form> diff --git a/data/web/rc/installer/images/add.png b/data/web/rc/installer/images/add.png new file mode 100755 index 0000000000000000000000000000000000000000..d72c566a8c66c046fcbbc3297399051458a346bb GIT binary patch literal 653 zcmV;80&@L{P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00071Nkl<ZcmZPg z|NlQl7()QSCp|Q_5(Quw{x9j~+P3Z5w#}$+SO&Fi+qN~CYunqeXKD|Y&wD6r@K6h{ zb7cotJ5js}yFUSC)_=T<%_;W+6Sh;Xf!b~Xg5A}_YF*!F4##5PeFrALj9~avA8P3m zaO)glo2B#KGEGB$z1f6a{x+ye@bb3`O>e7_MI|70PKJ^fS?K!M3PHOsjFX@I)lYb! zz9Ar}cV`j&u4X<Ts$a86nvF)xP&g!m!H`V~5jQD-WIPBpFH69#vxk=A&bz0vH(09y zf;sY@5X^iZCnLroc0z!NUM^OikRe|Lbl8K_<BX~oh0spEi3d?vIIDr6Do3iCE+kXU zhG>9~(7pipHaV?$*cIx-yU_&h^#)Lm2@&1J!)?h0YBj(qxBcJzx*GB+A;Esw>2aym z1*gpx`IAYwCOq?hHQ-lb`M-kBgJ6UW{-Ecs0d})B3MLbAG5o|@z_ZYlQVa?pn}~p4 zw>@0i%wbuexdAf2Tb(}SgCP(%`{QiLk+mhb<QZ~o3e-_a=fk(n0<O)*%$hd@oT_x- zQDcD0`D|R5p23O018bXTpRLQX%FuepuCqfqmAkTGi_p1>{EJv06?0i|$k$`=yCdAa ztPK~*H07zfVdBHTK9v@zA`!)47}$+g2&lJ!VjvWi1l#B9-~|7`UxL-Qy~;YuyXxw) zo9~|}uR_|+M)s%-*&{MUH2dJ1_!NWRug43+nwk72IVyYh+t#}DSlxE$H2ZARZuHr_ nMgO*OqfV_sy$06IL=gr6K}O3Tl)a@z00000NkvXXu0mjfy4^eY literal 0 HcmV?d00001 diff --git a/data/web/rc/installer/images/banner_gradient.gif b/data/web/rc/installer/images/banner_gradient.gif new file mode 100644 index 0000000000000000000000000000000000000000..8ab1b06304d35a8ca4cec9d2822b535eed434d2c GIT binary patch literal 506 zcmV<W0R{d?Nk%w1VG00J0K@<Q>h}HS^!@Mn{p0fe-SGY2@crBF{o(Tc<n;aJ^ZnTF z{qgwy==J^a`Tgwn{pt1n-0%JB_5JSm{pa-k<n#UB@crWQ{o3yR?f3oQ@%`KH{n_sQ z*zNuB`2F(v{nzdNA^8LV00000EC2ui015z7000I5peK%GX`X1gj4SIk;tIds(%5a? z?C-tUokj2$Y!q*uU1ymT0+Yt2QMeQclFX{s+PQWlT`N~Y7F#6(G<mINug_#m94*HP zFmefAkMCm~eSm?0gbs#yg@6D6e;AAoi-wAgkc$8jn2QmbnVg)Mpq&5@n537a52FvO zs|*ti4-Bxfv97PLvbM6fxf8d)zQMr469K*f#>mPE2?5Q_&dklu0SL?#*wGXT*xlRQ z+Y|%c*W=#e1LNuG78dCg?E~%b^6>5P_ZA2D`|bS)2Qp*;I56Nqfd~^S3}`T60fY|~ zW+?EmLWPJEGg#bsaic~89794N0J5Y>kPt?9l3baxWl91sN4|uq!KF->HFM@Puv3Fi z4LpBpxF8g0P@V=Z@Vr2j>4gnLH$0u{)G1V}8?tKE`cx|i1spbn&C22H*9{8Neg#`r w0ot%>)hhVV7VL+)W!I+tK({Pk4t((f4$QZ(;lqd%D_+dF@!`CX^M(KbJEvw58UO$Q literal 0 HcmV?d00001 diff --git a/data/web/rc/installer/images/banner_schraffur.gif b/data/web/rc/installer/images/banner_schraffur.gif new file mode 100644 index 0000000000000000000000000000000000000000..50182b4d6a6ddcb5c70c98f91e8e321daf408081 GIT binary patch literal 12454 zcmV;XFj>z>Nk%w1VRiyg0K@<Q-0Ab;?e*F2{nhIE>Gl2X_Wa@T{nh63?e+Q9==JdU z{pj)b-thh9@%i2D_~i5b+3fo1^7z*5``6{~=k)#R^!nTH{o(KW=I{2{>i6#V{nqRH z*yr%<^Z3{8{qp(!A^8LV00000EC2ui0CoaU000I5;3tk`X`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEE<o<q;kn@I-k&}bV{vSuh^`1%k6r<;IMd1E}PE^nj$S)kKAqc2R@h6 z@Amv#AK&}?fOUU@fp{Ytd>@E|YixLqi-dC;gOQ4M1tSQVA_bfuo|>PbouddN1*fH` zqphs3bEKf32&x~oZMY)3x3;)xyurT1n#8-ty~WDMZ5<uU$;{HX&%4#pAI{Lc9k$)u z$idg&BIMZOn&avt+U4u+?C;s?Z0+-N_wf4p{Pu4oa{j4N5l~>GIF8^Ptdp=ILWF4+ zN>oVEA;X6kGb&iLG13}Jjo2Wfq!G@@I3zp&MvSDPWt##b6?#0_Q3N8Gvp9LexwDi` zQax`0-Lxx|f>b|M?MxH2DN#^F6>L&fi>j`w$E<42%C*;4saM0E0{a!K*K!D|neC>Q zoHGPzy1~s>D{k63&eUEdS2Zr*yL9zdV~cihJGp47woBVqRbF?7BSW67;PE`kmnUc5 zoYyaA%b>Lt3^JPF9*YxEy9vp#VZ@59U$2IJk#$LnElK9K>9UUQnIH@FZYdI{A`P67 z>oz%@<;ImHJ<XLqXDU-tQ;R0`+3BfMxJPyMJPNdYCbC_zqW20+Y<jV4%*uDazVF%l zjIFhOR=Msx$D+Mu&0GRr28>&}gf<xeU<KxPUxA=8$lzfVM&=o0YbdDMW0g5`A!ikC z7$S%rd}tXRffxi(8!w=^Vrm%C#M+D%$rfXcw?RZBY__qMTN=on*Ah<3LH8O@93l4_ za-A^w5lA(u)JAhe5~m1GQkAFFQ=8}{9+yLHx#f03joF=;XIAGPeru{X-&SYUSC^b{ zuH~VD9ex(zo)+Sn7J(A-hZu>4xdWhMX_?5Uh$R|GqGyUWs^EorGD@k2c}9v?h?P28 z&1-)o6q_S`gfyEZ5kYjDsiuy~s*JM5>guaD(Ym9lh^!&pN5Yk|h$q33G9<4*!L*T4 zz)k{`l2_(Bq_0f%h7>TV=;}%Td|=L%9auPZd7ZXkp66z@y%=j<mSeq%EqM0zg<gMS z$+fPUh=N<9RNZ9gpPk@!mT89oO6uXi9BN1?!2=ikO@D&&nPI{mL;z`}l|>+_#fnOd z@Vyapd}nA9&!e%$7kex)e<V|8vBscTJjcp-xr}GZnc_KcZLYC8>S=`7G3%=z@p#fD zvNn=ru0F1o>y$<V{T$Fg)+QWJ*OF)KQb!SIHLua_dhFFo9vd8!R~j3nu3AqWUn;S% zU8c3*Nw;>~o50;3yZhF?b(ZE{3ze~K>C0}u@ZNo(wuCdb?&4%&d#{^-)pGK~CR4s? z<r`0|aKoHa?m5N&hMqA0#vhQJVFV#N!*ax*cf5w_72k{c$gFo5GU~FsY<n8G^Im($ zFJnwF>YvjrI?KWvuRF{YM-V*bPPZEU^wawWb&??=9d!0aHtjvGTGJH1_D>tlkh4f* zjrG|%S!=e}!u?vc`c((nw)|InJ?y*ZQWqY()%qXfQUSoe;SF4ItD3tO=pTP64lMln zlj9gCFM#O_bD|quzaWM|4z|u=nG2!lI*2*uMQmir8yyCTr-0eLE@Cemm<wA-ywasG zcgV|~>}1F~kv)ud$OGc*SlGK3)^3KXdm##Gw?mE*QHCs}o)o7jz3)BgN$AVs_kPq7 z^chWSTvSOHvG~RRGLG>%>C0dKa;3hs&98oMRHOUmxHq-!je&H_BjXkrz*?AVPI%PS zFZkH6MB(dkgv;OsKZrp?I?#g*W27WEcDYH8(2|h6q!E`mL>vy0lQi5RC}&7YBAQZ% zO8lfMH@V6gE`Ws#h~*k$xqw+lpq2`FB`#?>OIgxzm%h9uFo)SoV&>A9yga7HsL0G_ zo{@{t1fw*yD8^?_lZ@7+W;D?UHaXVujckk~9qAX&HI8$BfYciU|A;qs?lGMQoSPuy zX+aSV?17rhXTmB_0ZUeZgq?h$6Pt+1)d6&O!}BB!M`=oiI<%Dyh3G>UDp6Y+Gnp7g zrbaKi(PDc4^q3qC=|^L!v1AH!q~%NL_E<$eXJT`kSRBbTWoou-X7i;p&8AF=LqBi! z^qf8w=Qo3zKY9kTagEc!QI`tOca}&4ozVb4D}V@o-s_+J>`+!az|S>I)vH{6*j5K- zRYdsfp98g|@S+O4;~}DmNL;I2S2xj8)-|HJyyYj~`bvo6(yn`@XbU?E(vcE2qqWok zVhtNoL@c(jkbSIVJF3`NI`*&&7|9ehtG)1XFQxH&Cj9F6qxg*^w07iTXtSoxAF1}5 z${|jWZX(p3&^CTQ4U!ynJ0xHY^=n0aCtQ?Ti<VTyxW!E>9ud(O;vSH>faGdbyDC-b zD&VXC*Zt>4unN|(a!k9~-70mbYF6;t^{owU31BIzft78<bqhuBL)%L{`ert-D7^10 zm#E(Qy0E={9jty$nOIl8QoRA*@9Pd+*vby`vYB;oOBU;3k5)Lcl;x#_K?>nwcKE`R zO{|6~JYvgYSiiE&jf$Ox#w;SuwJ?t9PIF`0*>;h}yNd0QbX+7Ihjzz6?rn~*rP~_| z8Mweb^45xMH6h<t$+qQflgTq&eh#;}$93*>5n$X3u#39Ol?p$rnp`Vycg#}lYId&* zUan>ptu4WBS<~EsIFEPC;q9-)=)33H$yd)C@iU(T``<$Q7j=LZEG-cnfe9bjz8hKp zG=LjD=*l*Fu#^_GE&<JFMn^iuk`A?HCA?u#i<HABcJzZuz32v;TGgulw1`1H>Jp=P z)(=MYt4lp<Bd>VHGXAx&U5i^_DQ8!9jPh)kP2=9K7$!FUwQZMNV`KC7+PRIgwu!uL zWE;ENM-CEIi92pDk2}j&jxz$vz3wibySPgAGMV3fZtbSI-2a>|RV!ofuio3v<K}9e z`TbNk$Jx4E%`~DbE$D_X+~Eq3xSl!f=lEXumJ(Oyhe^8NJ~P<X{f)4KI}Kow*ZSlp zPr0mD?rIb7`sFB(HHS5TfdycoB^b#0WpA$7nnzmaGq1VGYwlR0(|puIcQnuca~|QE zFJ0$7=XorpZu6bv9O^J0w$^97bswA7+S3MmY_;umCp-J>${xG5iv(_LfBWslj=S00 z-t9Bv`|beG`@hr7<-Plxy#LO#-|>u9y#pTb1|K}$2QP7wLww?nf4JluZ)lM(T++g1 z^n`B-VOU#Q^Q?X}#yt=7l#@Q@p*MZ%Pp^8XUw!FFhkDMXE_<X`{pd}vJ?)?V^xQW+ z_OLfO?{R*6roVo|y2p9fm(Tni%l+ER20Ps6K7F@8pY8=1w<ol3Y`|}y`o-oxzOP^X z!=u^!i$}lV&(Hq!M<D&@Uw8!`9)Emiy8U*h{Ny43_{i&@@{d+}jz($!qDFwI_i~)a zYDSlItA~5Ur+SjcfG|gOzn6Q%M{2Wod{L)?#z%9q_kq2~fyMWM7RZ4hXo9{cf*06< z8R&seS7SK#b;AaOFbIBAQ+>9z6LF`5JP0h<_jTkKKk9dHH%L|4R{_9+gz#5x-PeA? zF;!29e~O13>UV@oxPFV*aQx&6{nv&2=YLQ5aH98xUig1{CL9izSp^_~61Ij17;|n2 zfwcy8p|*g)_j;aSb1Rs0!qI|$sB>$`ha2dECWrx^@P~#-hy{R%S670BsECNzhbQ=m zvnPprn23x>iIZ4~i@1q=*ol}3f<B02&sJ^D7lX6ag9ShUx}}Q$ItYF?_=>#sinOST zcNc}XXoXbhgi}a_z6ga=XocH1X1dsm<W-DAIDZj<hN#1gjaC3<IC0R}jQ)3qe8!9m zARPO}g}0=Qh_;5!2#y9AVY8EmvE+>e*Z`&%hsY624RCtzh<n<&0Po0-ilvV22z-`U zh=+KBpokn92#WnUeE+D41euAI2#JEohyv+?``C~O`GEn@5&?h#0U#U!P>~pEkykg7 zoj8#m2$B|gbBmaf$5#LuDUv3Mk`)P%7TJ#~>5&#GlYm%}Bw3LcnTp3&i#$noKDdgk z=m`XHgQ^%L1Td7Uc$B&ol&iQCNZE?6_>@h#6I)1xx_FiUP$-O8xrJM4gjtDxxQL6p zh=f`RmSstdUrCIQH;v24mS^aeY{`vnS&nX5a&pOqmgR<XnU}hBm*A*|!gQBCmyL^< zm+EMUi>Quy*Z>V+j)ZA*k9m$B*qClene-TsoS2z_sF{eFke(@u0$GrpIgpn4kO9e= zF4>u%c$%BJny%TI8R-crd5A5^k{4N$w>gr17@H{hk{Xbah>4RFxstO<b1ONMvT2gP z8Jor#oU(VEFNvG78J)<voVSUSMCpp!xt%<Slt77;-uazI37%7Vl;P==Lx~(m>6G8* zo$D!-I+&JZd5rQojJa5!XE~ovn4k6;mi+mjSxJ}w0ve73I+p}`payE7gejos2#u17 zad_F5efgJ;S)t%anHa#Bp1_!h$)WAo0G$b<8%mEON|_*Pq8YlO8XB6T$)c}Gnl7rE zG76)tIioR3nhtrR4w<8zIGeVaoY%>lK8l?`TBJiNq(~a1&KaakiX2DEq(B;_Mw+Bj zI;7G0q)y76TDqM>37+ohp5^(T<|&k4N}gtlp74pD;K`L)NdRp6rurGD{RyCOI;W^3 zr`h*@!`PPinU;LYl?CdTff|>DI;f~)nIuY~(-@hE+Lr2Qnce81j~S^EkfJwwsV$nJ z7%HNe`l6j`qnYZdp$eOzN}U?XqNi$;FiD&LunDD8>Z(s#rBwQ=vI?uS8mqLLtGK$W zx7w>gx}{U8rCvI$WJ;{xS**x<tjap3%POYj$(3%3lzm#KTIr^Eil21(m3o?|bIGOz z%1=Z2e%(5*8yb!cfS`hkpy7(Hg&L0Z_?RpDsEcW$4N6NR%BUk+svY`?APTCS+OIS! zs;@beqZ+XK3ZuX|ourza!Fj4ZN}VrB00~>9J?g8q8l@6zvAU|Uyvn3Q*|8V9v9>z0 zAq%p$*`;9$lxWJH=E<xTAf_<er7ydl(JHfD8m+}@v*rn{F*}qqJCqc_ra`-k6)?1J z8nj0Vg-1&PM;Wv)dxR8VpGga@*7~&n5kLXUNB~!xphsDbTHB0Yo3&djmrbj#1#qqn zu?uH|Z?@p`V|%9!hFq7jg`1i+YXo3>~Bwt1_fdW*NK2)K7Uumr%F1pA_e%ddo6 ziHWPPhdZN<`?!ybu&J7)9~+w)dy$#DiYEJ{m#ew6xw)JBqoW(EqMMSRTdPMIx~9vz z8M(TaTe`2Cxu09Rv`V|Q`>L=T0JiJ8yi2;Mo2zH~oh?hVH(R_(YrMsagvoon&fBuz z$-F<CeaMTvKuG~iyR=P<y;GaL*z3Jii@nVIy+F&o1VFy$%e@6a0dl*(bsM*hnZEH$ zzUzy%<r}r<+W<@pjqF>t*^9UTUE96@ytff>l!6PuVLOxvyufmMw+(#28tTA*8^H`5 zzXzP53JjtKtig$^x0<@ab~}3poO2_L0g@ZJC@jK_yNV)wqo+H&sEfP4ySux~xt4pf zGK{%1oVzjH!>^0OKFqs0EW|-f!$WMtL=3|^ti(yJZsL5##t%*0a+x>U@=S6sbX zyv1DH#a{fyU|hUR>%HcSzGhs;XiUaxyuE9Dx8|$AcB{YM`@nP@$NJl}bqvCKEWvwR z!F`;^d>qJrEXaVoz!*HZCY-`_oXGuJ!j7E6Bn-)ktiqHW$(20GkzB+>T*aKc$)2pq zpnS!l?8Kie%BD=pqrAHR03gHwu*yfd$^h`n0T9a)>&gVs%0z6-txU_itje^Uk-u!q z!2HU(Jj=4o%B@Vyxtz<t9L8Uqz0Qoh=v%$e%*Ey_&24<f*__5~+|B9xzjvI!cFVrt zJkH^ay>^_=d(6J-Ovvp#$nadq^8C()Y{`*)qDM)|9IV0|n$MQp075*I{+!4-xw;ma z&lNe){v6Pme9E1i%B76T4js`CJ<$+-(G%Uvx17uy&CABT(a7x4ysXO{t<ktl%)va; zD(%ZGUCSx0%(6VvAuY?%Y|Y%fy*O>2H$BZQJI3D3)7u=>KfTjLUCw{p&g^{DecZq9 ztkg~Y)bUKuQoYCjm#ol*yU+HF$y$xjM10VR+tmR*yEzxuq&(IYEzxLw)@n`BY>m-r z-PSN%(sI4h9gWg<UDtSR(sO;+dQI1T&DVRK*Ma@lf=$cktJ63Q&1Kxv-21&_tj$9$ z)ZZN0lr7F1%)N4q$8(I?4Gh`r%-K^7)pd-{a?8%?%(Q-N+D;A67ZBR`OaQIj&KS_z z`Ha<=%+Ql8)>&=U1-;1>fV#hJ(Zc=KLCmyneb&bPy20JV*z3cwOaZXm(yPqMA3e+< zZQOFb%)X4hguTm5``6Gt*y8=%-96XeJ>GU5-hRE;>J8WcaNg_v-i4jMTin=<eb|nj z-)XGh`TfoR{H@K8E!m8@#^fB}a$MkUeBc9a+2V}a3l6}l&Bvzg;CEcXq%Fq~p5X%? z;Zc3zM|lAkz{s>s0kQqzv<=%EUg9W@;U})bHhI1;{?+Gu$xJ(vT)n%^O~uQd<Gj1v zRh--b0OUCC<G!7eLY}!ie&ogN<2%0N9Sz^-9pvp@*Xj-BRX*SCo#lNE<xgJaSMJ?i z4(8td<>+15@a^6x&E4$X%TvDPPfq1q?&bci*mKU`b^hOz?bvrtzI^`Q{oUZ7eZCLy z;2S>Z72dxSF6au5;RUYY7{1|n>*1<B;gcTely2#fF2RzH>5$$47jWU&+u9e9zaY-E zApYt9uwClx{OKgF>PAlD6`A80fW0$m+#z1$8A<E0{?$Ov<1n7<wA<uH9_&jF+{T{k z!miw}4$RG+%+QVO%ueLiJ<C%5>SFHf*Z$sKKIYus%2uB3YOd|wF7DXA=H9;T=g#JF zKJMY3=IBoD@c!-TKJVmB?`Qtz>>lR!uH}B-=l%Zg03YxI@7SIG=nsI}gO1J#f9ak6 zy`28&5HHRUzv%@J>I^^e7ccP^Z|SFQ>Z;!Ht<LHoKk}+R+dZC<tiJ5fzVa!*^40G0 zzy9(vpX5lM>?iN?NpABwKg-&#@;!g<(cbMRzwhIIzU=<)@*eL<kM#Pk^hf{nL?8A4 zPA~Q0UiD31^-B-+Q@`~_AN2zd@CP682OswOP4@lX01N-{8(-*XzxEif_80H=a!=wF zANTCr+M)jOdN1;OpZ6_4^TO`x$bJDhuk(hl@_>){J74%(kM)h8^;8e}TkrUh|M->< z031O1lfUg8AnqKH`4sT^pfCE^OZuVz`K6Egr$73tZ~Cs^`mH|!6Oj6|ANmt8`nR9@ ztiSuT-}@AB`@FyUx<CBFU;G@9`^FFZpfB)a|Gi}Y0M8%&&QAehZ}!kX{my^=?3?z5 zp7z?0_89K{at!@%U-xj&n5@q6AMfd;o&M|}@}d6zqVD(f5C8U0@*-dOihub3`VRs@ zKvCjYilnKg=()P=+rofN+5mo2`L6ePz94XD6e5esACuTTDx=S(v&Z3(u2>33*v($E zye_c2)q>Aq?i$Tj!_(jiX~LmXCiePTkGJEw>7D7-?d9DW{uSmi-Vw$%5-w6^F+PxF zVs4UbdOm<sfMSY<mXeNkhK{b9rcyLCtjdze8jQx4%5LV48g#~PUR;RA{=x=RTm(Nf z3>PnB4*xzFJS$%h6F+E^baOw06Jw8elY0+Kr;DSH!@Q?Fn1I5M$kX5lV6HqkIOxm! zCyL)Z3jZ8nasXfkzyLSoQStEriYST`lVGwaabv`X6rEgDvL#2xFCjtyeFV@Z%mX)Q zTCU`P$z{x$S8T?CDf5jeEjZ=8!HLO_B2YvdO&H3E=mS4W=`>v`wGvWMOpjvK^HfpM zs+?GX1$!#&C$VG2l5N#$7pPmfimfsrx0Kwr)y{%yaO{FLbkx2XaMreOGr<(BT~L>p z-8piKABzK}P4c?Q=ORar;ewuseVy+$>|DYhD1QhIlJ579GeFZM6gE_dQg)932=Cnn zAba9&k|8VFKpFfuagI7p63OUsILYMBeM1orz~*r?C8xv0uJZWyG(vd>)!Fl=&Y$JQ zhxb`N{mr24v7EmH)oIkE^^Iypir+r{{)O&)bya@;C8ZyLPU#o_U|I_@*r0<C+Eq<m z)lev*TXJ3KR)iJ~=GJ7~SR+}8n0;8{h$U8*;$kSSs3K)8!uX<$;KbJ2XY+u@8fUke zR$6L3s>b7wKQdP&b_!`{q;yN3)FgCDItk^INm9w=lvYAX21?{zft`9^b^(fdD#;Wd zmuHp<W}0Y<$)=fW!f6zjcC;DieRmSLpPqPX#V3D#=IQ62f%*rbp@$+07KR-%%Auo+ zJ~|;{GqOmjizHrJDW)-QYAL559<(Dps|CcPZ9d*+n~<xb+G>!lUKwSTvSK-FthY*; ztF5}$YNeZM)*0-Z!U8+2vBla^CVf}@sVto>0ZJYqV)n`ZEVX}PJ1C&rW-F+-gmSB` zeGqDxSGkJjwIHPDvcgtdD@rOUUm|Ac;e>o$n5n*>?&~R~4)Dw41+0<?u)qBb>?)9| zDm)~?Ktk+r!@2QFtHrqPnsKieSB&w-#e)2+$aaQI@|pIjH|@9KuH3E4{oNt1%q{OJ z-^}24OK!Zr>^vAN@oEUPT^DlG=!cMMYNEX!_S>n`pr)oNz>7^SnZe*Z9JR!+B7EDx zS%W>X*jz{aaK~qB%yHTttL<x<+qLOsnAr*U_HZQ=J2J7)ru?kRHlO!5-+aeRv*9@3 z%rfGKE8h6HKUYZBE$a#$X}yh7ez}DB9-Zlk)-VnKFTXJ&2IDPBS9UePUT^KsysnR3 zcI^J#B0Jfw<Ibu9w)0Nf?r3kE!!2wRZ{+a6M`^N5254z4+~qN^_p#Ea9J2w7UvU6_ z&ZZfz0SEZ)c;YUL&p7$#k3VR=kVeikhC;tT`J(gFU)TE<%0Er%)o41YIC5zNL+RKb z=r}jP0RFF2r90gKWw$%pJuop3bbwq;Q$gQZ@OBi`U^RM2!3ow5gSqRV#6TFN3x2Ri z6C`1k3?RIdxDai}n@$XANRk@L1!Fn1!43g1!)n~{g~E$rnp7eeEgbPC(Ic4=b#e<e zJ@E=jjMEaU;gc#l@p>FMz%32{zFQ=#8eY`@UQ@g%mkF4$Dc0NK1kMOPF@EuSanytM zuBQhu-qDWO!eblt$VWbo?~LB_gCNgW$ZF(qe)x+YBOB?+`aLp|@{6DT0=U3ST5>X& ztRyE5=t%%}5|p1rObQ{GK?{N~m8e{$DO*{}SE4YMs&u6+SqaNo-qMz}^j#2nh{GBJ z(U(K)r4N5e%wYO3Bt2ZFGL>meVFrhYRy5)gr)bS;RuP*>)TR`<$pLF-ahu|lViw0J z7jw#yi{FbQI=$G(cA9aWTzmjL)d{|L#*>hKOy@cCs82Mi^PgyRV;>1wpF*B<j&n?; zBpd3`heGsy3>f7^IX6*Jf|3DpVE{+}Gm6nmPE@12(_ck5dQk(E6q6^NXfA1q%U!lK zrZAo9OKYl217x6;#k9c(b+c0kWT1i>D5gJx`plg|6RE`<>Qa-M!=XM^smsJE0E{|J zXnqr?U3h9%%`nxf8g-~f9cNd&N!Dwg6`Kbz>lV=(&$MPQiT3Q~TJ0H6@CB5ecipR9 z`<hU{^7DKC-0M3BDo;1swXlHwr$Pg2Sae2Iq8JjXWFyN+%085%BE3LI5wqD)qO_7H z<*Z0GyU~H2R-`wb+66x=Q=7VUwXvP;Yge07n#%Tr8Gxz_f%?>*@|LMn-K|uqiqx=H zRW8EC>29OyT%0B#0m^kMbfruGRjUd!0Zr{{2Doco4m1~=-OXxut(yR|uGOt&T`yYM z%HHqMm9GiSYCZpI-*wXWuJHxzJ^NYE#v<0g{ama+ADhSi+R?EJMyMR|xnRNe(Xx{4 zEJ`VCVTWS&!lmu3X+3*digMPZn_cN>LtNn$G62Ob-LQ&rOIsJ$_QkN(?QL-i!QC2l zl{IE%j(r=$u!a|`$_;XOmumwcV;8wiRq~K`N@SxZAOqF~Ky-I#-Q8Zf%Ftb^l#h5` zFOT)h28ix^!E0VIliABzJ#SaznSk_q^N4WXqB`k(&i&rEzK7kjp8G6cKIb#gicM%i z2b)(1-&dgjwda8!`)76kN_eu9<uGPZD&k95xU`neG^RV8Qqp#s(i<Lis96l-Q_mRH zxmC4{WsBq?ht<b8hBd93OXDQhde$y1GH-><T&wc>)z{5+u;minGf!E|+RgHrp&Vsn zYZuyUR<^P^fNU?Dx65PhF1GXh=x^tjzi$4vxXbNra|0UPepWZR&+TqNZ~C&5zHCP| zOKMKz+ta4icfCbjYK_`E)AlZ{0|1_4gZI1Om|k^?TkT4X<`&|#Y<P?*NO6=}@Zz|X z_-kj)09}K;xgQrfjx`$c44AywzfQTZOa5z=di>-tSGmkb9@gk;^w`k8_L!^8fMe&} z=Rp6tvJa4epdY>e=g3C-&YP}uXdi&1Mvr>B-OYe{YINQ9y*gjBE?=%weT-fYyBEif zQnAZ(>}Ice+S`uyx0fC4TgSSH_uX%V2b|vn-+SKqj`zI_yzhIrxZeTp55RM@-~kVO z!4+?s#2@~p7oU8_A5U?PL*DU+zdYw3Kf%mr9)%pQAOtM#d4E6v<E6(q?QG7`nwQ-5 zFJHOqYajdD@Amb%w>hkJk7VBipY~B^_Uog}^5P$z=u1~VM|IA8=09EeC<XfWaDH{1 zE4}&FpZeL~tbOTTAN+4l{+qc7cByyW?Pff`+|QqO_hTLYaff@<*)Mjvr(5mqH|PG> zzi#yRRpAN$-~bX}0UF=|+MDAg;O1EX12kagIlu#M9!FWg10EdcL0;mO9tJu91W4fK zb)e>H-UF822Z|sEZeHn~AOu1H2139FGJpzlROz)~ioM_r!XWC+U<cwL%GuuT;hql$ zA@Kd65CY*58etL=;Si1-`B|To`QXq+nG)Kb^+}->Vxbdi;rDUj^Oc{}c^~_YUl)2& z@=YE3nPC`yA=jDV{JCNM-CrEOApp{${mr2r!r>jtVIJ~f9qyqY>fs$C;2;uWAr_(q zL?8uLpdvnC1va7uMxX^Qq5~?P15P3$HX;nZAPFX74Bj9mDxL?1q6O3-CgPyx)!+-J zA`iy@AS;F-<fUQ`e&P#;;w;)?EaKuR;$SWo;SwUDFH#{B3ga*KV(m>K@-?57b>S68 zq45!2Gj5?5X5lhUqcle2(4FD+_2JJM9U#J?8iwH?YNI!jBOaEcIHF@9Zeu#GqdNMb zAr71c9^wEtB0NgsBjO_?>Z2v*BR}q=BkrRr?&3gtVk(j%1>Pb-3S>blWI{6JLv|o9 zE@VVDWDV|?MB1VcF62TEV=xk9M*?F=7Nam$;}u>b7D6L6rld7e<4L+?OM>AxuAv;Z zVH>vNO`fAWn&VEgV@~2EPX;19`rRYi+dUR#QA(m_O`;<H<5D`MQTk(40;E)4;z3&f zqCq}lDNf=>IwV(O<X2W?SU#jziX}&8Kq{W)>wV%`Y9s^*;VkZ+TWVxlj^sz$rAOkW zNP^@@mSkVPBufIONy21c`Xx2iUv&LsPXc9P>ZD>iW@AF;PYR_{_TyAqW>pepQ&MJS zV&*@3AO*7GW%i>7N}yFv<t8?zR)XbNc4cd>CRwuPYj!0Nx+M|HrCM4fT{7Wqeq3$V zWnTU!5gua`79Vg9XY37Maq8Y*3MOGPXJI<$U^eG;LMLMS<aI74c0ML!a%UaZ<9G61 zQr4p-@*`(1q9Zn-Xf|bfswY+AV|ofe3sxX$k|IFXX9JSv4Bn>)$|otxCj<!p014)& ze<I{(lBIwC=Plx=YwqHLf+d2M<qaaJgEnXpR$xb7=v_7-NLoP2b?99>U=VI75{{@7 zHlq=mXfh@r6lx!eBIAdqqy-#X1DYg_R%dkCs7vOk15)P}$|#Pq<c~h*(FtiwR-j;7 zKsJh9l18RaHsE$@rx(5FdD<s>S}B#5XL(-fmQpE~dg+&fX_ca9e14{XE~o&^V1Uji zY62)}#;2OL>3qiLnxd%%1ZXTeqAEJ*o<e9rt|@5><b(>Uo(}3JLg<7tB%%_kp8Bbu zcBorsXa+>;q{1kr;@G6x+=!wajE3lLS!(W8YNm#&hhA!>nre*->5=09T&l8abV+KF zrmFJg=#I*2tKw*^&S;U=DyrscuL7yBCV;92EAzoB(AlaM3Tv_!>#YJSkNzsNLTj+% z>Z$_ktRCyE?rNB7tCy<jwr**+IwH7w>$q;|q6z?<8tS5^D}er~oC4~)zH7X;YoW?3 zz0Rw;)+@f=E4=P&zVd6KzG|rotf!jlzy>VA8tkVY?7~{=01SY_LhOe=?5RepvR3Q0 zV(i6gY{h0Q$8M~&eyqiM?8t&F$%<^rqU_14Y{#Z7%c?55!t9t<V1TMAxSngb+HB2^ z>AB7<&t9px;;hf!tjyZ!zv`>KBJI&Ct<f^AzdCKdLT%DEZPYIREyETp!eXt}ChXN} zEx`@|!hUT9e(kF|EZKUk*E+1&rmY2(t=M|4$+~RZhOFGe?cCaJ-QsP_-mTu|?aJ<L z%))HY)~wJ9ZqE+x;r48}5^lKKso^Sa;ySLK&Z*QsE#*?})LL%lE^Xx!DqChKpq}N0 zV(tsRD(Ob;)}n6KMr`U@t;0^N>t1NsvhCVtz}hCj+J5cp)~?#V>g`T!?UF6+_ATA= zZSnf;@cu3F9<T8#Z}TSaw}Pp-TB*%8uH;7U&`K`NV(<16F5+hI^>(k}YOnXcY0-}E z`EoA$?yCf>@0zkNnF8tt0ICF}FKN<mzJ{)UZoqt=<(=mLuUzsk=<e^MzN@4Pfaj9p zZUrdouI}!d>e#xi*#@la4(!C<uC&6gj1B<EZm`<EF7AS`1&6Q)t1SlGF7o!R03>h7 zsxS&O?+Ux{^2%@vOY7s3E6`3a(SGj^b1%={?D&H3_>yn<@-PwiaKGMZ(<ZUgF7f52 z?*P9b`|2;$#wYz2tprFh1jug%((eFwF&A4gDPr+_Zot7paR%(~0lVb_8>;-0W*HB# zz(VQ)Z?OezKpETVMdq;rcPQ>UFa*!;2Q#by<ZcAVZtx!L@6xXAGO`If@{w+Efch>Z zi*N!2=muNx?Nah4YjDYa@BmzL2h;G$N^%MxTPa)r^0A&Pu%a?5C+jFXZ*;jbET1wh z%d#rduqz9xBx`T>_V5o6?GKBu5c@JP|F8#m01yLnF&lF;FS9cnGcyY_G=J}#dLaCs zt14#m3vM%jVl%xq@i%KTnMyzsCo?va=>XsH``+;eoNGJZ=^b<N9l!Gil(QY%vz=mb zIST+h_cJ~Bvjn8EK;N@H^D`P7Fhakx0v|9MFLVYhFdp|aLto^%D)c|QbB6*n05|jm zgEHIhE+IQ?D1)*{fAYCzu<N4qNFVS>2l7fktVxqJ33u`;-*R-7^afk93P-X?@3c<a zbg+(cF7GlS%W^LB^iLo4j2iV$*D_N>^-@d!wNp=ZP+Rpb7j;xqwNO9xRNHA+r!rVu zHByUp3oo-YL-RDJbu?4+xt_BCB=b4HHC)qmT|@I+-|RUvGcq4@UIX)7<8?G!02X`m z{p#}=3&8zuGe1j!2YB;16ZW|(Haa`@V{>z2Uv?B{Gh+MmI!iV{x3isgHfYl`KD#qU z*K-<&HfsNKLEG~}mo)HNG)31gN|&)kyYv9uc1uIFOcOFd%XUMbHXH}&2C%eo=QK;J zv~MqWN~f(!+i7zvcWzI2a(}Ye-tJgm@KpmfQI~aB$Mh+uYEp-?Qd4zFgSD!ncTYbx zdoyb!W3^akwO5n1SI_rWe|1&Y_fE6_^;-M)e;YGj!?l1Tb71>*fFCnpzqNo5cwWnO zT^G1pE4W)jIAGswWTP_#G`3`8v1DKNJ})+hzpn>$I5~H7h+{TmXLgCxFF(ugaFaHS z%Xn(jIBSpgjN5pO*SK-_cJ0RYaVxh&6EZ_DcW_I0PS^HtTQ^LvG>k9#OEY(MGkKIR zIh9ZOkzcu#`}TM1H%_mzdvCRNXZL=Kd6<*=nO|^zn|DyF`InpdcY}GE1NfZN`F}6? zo%i*C%Qb=9HGvEGWz#jD>$!syI$T4*o;&!SEBZULc%$>PhBJ1f7j~ncHi%boqz|{F zi}<D|wxrj%ZsYik@3@Ztb4mOEGpLU`j-z_1<92fQcG*t3k+bw}{dkYhx|U1#tK<5v zSGmLfG_PlQud}r8279qv`LRp)nxlD_Gy9u2yPPk(vr9X)*K(a(`?VYMWk>j+C$^u< z^`T3+H*fp6gFCk)^J9Cvp{KjLOZYh-y11A7wqtRn3pA(CJEOaJy>~iezxKY{d%s)y zz5DyX6STeSyQufGZm0S?D}2H``KQyf2i&o#llrMwJV0YPvID!u3;U9LK*odo#$)oA zuXo2^`IsmBO8>gaZ@I`1JIbT{t~<5J$9!`C`pT>PloLD0UwK>~IECA_Gvl?-2e^e3 zI?*?Ci%Yg+Cv#)(xw!xTInxg~KQnz?JN?vWGl{$Ph8H-1I=0i3c-R~IhF^WBpEDNA z^@hVW+IM=UZ$L5|G>wz^YfF5;dv@E4c+=N=-Shi~-?-lQJ>cW}XK%Q}4tK-rwy7h& zabG#(e>~%}dcqGtGOxPp!u`dAa^0VH<=-*fJ1jCEIps_F$B#7WvwX;({^y%MT&wiz zuRhN+cXTE5cDH=y`+ClMKzmO<>02`Ilf39xIqmB-<;!yJZ!qwqwCq#)>?=3SPd-xL ze(p>4^WVP4Cpd*KID#{Hg9H786TP7Sb@<nHV>|sm7dVScec6+EIiGuhufO}Bz1FY& zh95fngT1*ExP~|Xz5A0t2zY`-3LXgwqbHuMD!JZP3LDMdn@De_L{rfuKimvwtC4)R zV3RpC4Ou|wO|+EWgvi@~H~0#|%)$0JkcL^|^myZLi{u`;Ev)v<%sjY>tkM>UcT@(~ z_f@wxwn!(aDCUUAm<Bo5h#5&}CrCM%*!d_Kw>dd_St&Y@Fqh!w%4+E;kl?CPOB!iA zwz~?tdJ9Y`g3E#%%u2iH3R)Xzs~F4jVp9Dw-D1)rqK)lst-^hsy{*!{?Hw~svR!iG z?oHJl^Fu@>&OV}aQg1Kw-XaFQcQ9nIyJt^eyM9#i$t#q@iH?Z$CcfJ-1BjG^H;5#` zSS2FHjuc`4NCeVwM-z`0dr&db(o7&fkhJJgHFC=nFgG&|$~ltHEH6U%)HyWljwY36 zex+Jd(^6DbnyR8g_35f7sZ{@%@>z2jSE!-LetqiHYt>I#Wt|$EOYPNZ*2G~uM>kx& zZ+fYf+xsmrx^(x}sf%||pE?rs7zbQ@FtKCBSkx)jyV%8#c83oWq^!^Iz<~fklRR-| z%1(%=7hgdQ^2*1TOdPkatkPo05vgImc6oaxq8x<aJjK{lt0d$?=@?fl*R5HnY@j}8 z6clK6>ez{cdOa%osiairj(;0|YANdK)56^jpZxUgY~Rbm+YK+^{MzaQzWbkkcY%YB zfVSEH2GBd5K_(hP4XwkEg7v&G*?|!zSYc!uLdIb~Ft~G&f(<d414<ChmQil6EkT<W z>YTP)ODpzf4{$)ZHj+k1;8>y_J=i2tki1nQ!E{;4#~ylzjK$P^N1+8DS4+NST$JZI z>By8uPDK-XSbmu#nDKcTrd9T#x8Hw)#Ur4abOE^6Ic<)!W`iQSz~PA4ELd4)e(HHA zL3bV);)Z}Gh+#g38f0jojTUMmix&l%BBe5_Bxy?~0(WVTmTvl6q`!^oqi-OAs@;y1 zmUm_*^tD=Mb<BMi=B(bChozRk*b1waWc~JQti2AqoUFe7;%2hSF3W7Q&Z_xnw0REy zDlMRdPJ6Aj)l!S?w%Ky4?X;(L${M-ml4>cs<*Ivbs_mxhF1zx&YgCoQig~ZFWFE_J zzWwg&Z@_OoOK`ykAKYxW3Wv)uxDI~{v9}U0{P4sLNBrWv@NT?rydHD>ZpR>NEON;q zpG>kvW~2&m%lNvi@5?gBoCv};-;8t4|6zQw#T8S`^Upm4?Q_sZ7tK-1N`Gwf(jzmC zGSp5tEp^pTUrjaEQEUC0&R%~FHrPiKP4>`c3yt>JXRDny(q&T{o7Gv*y*1ra*Nykx zddr<R-@k<oc;JEu&UWE$uYGviZyUaN;*2BSxVU?B?RVvrUv9VMnMX8u=bnEf4*H&u kkFGfBkC%@6>8d-<dgP|J{<`b8shW}Gr@ja~+#vt}JBWy?;{X5v literal 0 HcmV?d00001 diff --git a/data/web/rc/installer/images/delete.png b/data/web/rc/installer/images/delete.png new file mode 100755 index 0000000000000000000000000000000000000000..672e3586733884271060e9c7715c0937127d13b0 GIT binary patch literal 637 zcmV-@0)qXCP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0006+Nkl<ZcmZPg z|NlQl7()QiIXN)N4F_=av(&b2D|gxR+OFMXYumPM+qT!nv}+f?vwfL)!@T#mMWt$D zmMbW|T&mRx1)-lpUg(E_rTr?%p+567o75PvDpjOWE_eLiv=;G4caiw?8i`kr5x#s9 zmPulKV3UrwEP^cSl#@*|c{q6HB>w5XBYE>Il7}`Rxn~vroY;-O&u+p!cM@Lbj19lc z97&c7n3c-Ld9pop>=6EGKO?zw8T=bG2&|oh_+||f8)?K>&p`a@aah#?Jj)nnf090^ zaY-Ograg-&{Qdl<V8qxa8s3%D5nZe-M`*SH@pFgqenNjdWb~&?0tUH68##9b$y0ma zUp*7QIE*R@&J-ZLb^+X)S-4O3)|LdcGGR1v;~bKkH1IE(gz7$b);M_OYy|df#oY<r zqa}f#0!}n`>Hy+PCn35}T4TT?W+JeAD{d2=O9S8dOs#kI0>n1Z2u)?>|5!CS6X0Jo z7nZrxadS-j(j|Q6X42a9F^HZz2){5LUU6zA*^xOGj_g!K4(-EZqARYCZe6;GA32Q1 z?|7u$s^B4V`ar>kd6-0@m^B`b^s#vm2p`;wuUtmHY`-$5Rp~M2^Co*7`6_Ev*d$^i za`XUvOKG?TIdHPF;9X21ynipgu~KktbenLVOjdc7pJxsypQa6VyiV;4*PQ9_Zd_M@ zZPsKw7}q6Vc9hE1Jf=sC0Zkqfy{WroPwkzQZlT*_I)<)~Z?C;JwheV<WQ*z^Q^Uyx X9n#LZ(Ja5U00000NkvXXu0mjfa4aVJ literal 0 HcmV?d00001 diff --git a/data/web/rc/installer/images/error.png b/data/web/rc/installer/images/error.png new file mode 100755 index 0000000000000000000000000000000000000000..15291e62aaf752cad4e3bf21252be68d6473a264 GIT binary patch literal 565 zcmV-50?Pe~P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0005}Nkl<ZcmbtT z1FRT95PgSl+qP}QNo{_FwGlU{ZQHhOJE(2jxZ9atwzgif97|zl{0~(81P`{CYWKI4 z9KW}zXxE($g&KYW9X|mJ9%<`eHHn45tLtl802uej9$1z=iKx;!wjCTp>w^XLzOg*p z^N$sfpqUP#WiE=ULU;0nV?>!JTT1>&!QG8T=}c7BC8jxy2Qy$kSqIm+N|2xySLUUr z|279qG}}48vr6W3T-dl!{>9eIg?nmO?ZM#zqX3lr)Pp<g3d(Fe3X+_{>fqJ2&R~XI zudnxqOLTSE`Ii)*pAuL00|ippnTSR@Mm7eS4*-(VauFGz*Jt4t-vlIR;F)nz&fh7p z2vZ$H8+qAzM8deg6ad5C-4T#rytzFF4nCn)KAHxZuZ?bBDY&&dFPe$!x+b)Qcy$K! za=#=7q=vvZF;IE|dJW^zT6kx-fcfTam!mzrqdzHNL35pBTkA~EA)Z;nOw#J5oo8_O z<V^r9|IA05p{Ot5li%6ad}9m;0L5yM>Y7{XYTuHPFrV#!ac`EiPQ+kVq^znj6n+b4 zVcor9AJHGj$Cu&B*_}0X5@Ni2bcGbsoeQm100~8b1j|jXPaldc0*YGV(TQzCl&cHV zW|E*v76h`^m!~iU#2W*qwS-(I#9LGTlPTA%{~qUebCwbP?5$Lt00000NkvXXu0mjf D)J6lV literal 0 HcmV?d00001 diff --git a/data/web/rc/installer/images/roundcube_logo.png b/data/web/rc/installer/images/roundcube_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a96aea911cd65e37ed2c1907a9f2d2b59119ac92 GIT binary patch literal 6478 zcmV-U8L{SxP)<h;3K|Lk000e1NJLTq007be001`#1^@s6c@PwH000>kNkl<ZcmeF2 z18`*98inr!ui|Ihwr$(CZCj;lb8OpjnlaisXvQ|yUHw;|v5mc|zH0aIs~`L11}iEm zDk>@}dF0XLx#XSX<K$E1gXGoZDWsUFsHmJEkI6~%5W#7%lV6b+6BQK|rjUG>7zAZy zWq9ptUyDzE@{{=1x4wlR{_uzR@sEFu?|=XM`07`_f)9T1gLuw!o^zyBE6B^pbsH6x zSCUqOm%Z#|`0a0hi@WZ=8{4;UhuiIj$K!#|>xJLvhu7yrXIB?&HXBy0T801r|Nr>x zXFrSLq9RMEACc=WDk>i*c=D5<jGJ%18P(O*=<Mu-m*O-wHNoz1prN4wwRNPn7Bw|B zsNrp0eLeWPysxgd4r^Ag!Dl}E8B3;zNItnPqN4J3f=_+w(`asPLNFMFj}@n>sTobp z&1h+9&C!BpLUG`7x!}yoWwTMPI+4p}bD+Jg9S*w_x7>OQii?Z0GVQotWKvNQNgJ0* zXAp@*(ZNd8!M2SRN$B!;q~iDk0R(b*{eHA}bckpUrxUh@2B}VUl*(qev+e7|=FOY& z^rt^PE7NY7y;M}LRf+QQ^6-y;{u5(kW6%wQ(s&^iiJ}mZCKw7K8jV8N4a5@(B$G*) z@i_RL2-ect3YXh0)u}!!6JhHo-?L}W9!sVjq==}fTvPc7!B2kj6O50KV_<L)fnbmo zDS}Wq49X*fc|R75!Js(FWD1$?ZgltdBAv+~&ga762)epFXl7+{vNF}@Dihm19IUJq z=~k{>iIS3%tW38O6_sly&n9^N>tBxyg<z0KCK07Dx~?Op#Y7%K)8si;Af!@Bq|+H> z(rMnN<T;8bRjDJ_<~dz1sY;xgM5HQKrpd`k{PLH-1gjrJU=@{XAo*ki&xdf}zyUCr znVA(S4AX>>z10n9h9Lr37{ui3iA0<vU>Jr-#)>72iLS0LSx7WCHo_(gi0o#s7Q1%s zqG%p@|BGMzV%g@Y7Ek3`$lHh<u5vB{gSojmuuUTgk`*c|k%)9cG)<T4#kNk`KTD)G zZtR+JEuPFt6lphSq=QwJSXfxV-~RSD6ciL>Mfw9#QMqbUKsJ|`m&+lmmHGL3Y3)c( zBon4#%JRV=$4V57X^2oHnWZ>a`Tc&`?6JL*#e+Myc;Lc;%Z9z!wR;c0J0b6V>QkR; zRV5Xbt2WOdc<+1PhrYgkSYfr0C4$J5NXV_p#e%_GgO3f7OT>c6q-&6hlwC}OLb4Y3 zP$aI(S(V!4oXO#Eh)6qk?!vzP`=tdO9v;SrKJ+0=qz@C73zYZec#itLU6Op>Iy15a zvNAj}0+Z6j(;1RR{E$c_cdPStjY7o?LYczR=wXq(-a{faQ6#&~j>>}vS(zH-yosAV zXq523|NS4^yF%-1N#z0sIsT}AZx=mzWOHe0DIR+0AuyPoorRUz?3|QJ<w!zAA|@rG zSR#_ZIm$2-d_I8~r3%HO2(a3C`~ix@IjOx}u6nTB?b7N+_?nk96eW|hrWJ=*;e$j) ziFDQF5d_b8#xrn$m12Bi0u$uO433T>V#J{*QzQu?A-B+Y8>K*zxQVc7AZ$<~-9R9! z!55Cg!}+J3Ri}vy2anIss%1boO}SEnZJ#V7c5;KaVdF+T_A!r<zgu<bkP_)?%o7M+ z{?eC9br_~JnZ91k%+7$p+yXE?H;=K2adh|hOBIT-`b3Rv<%v@wN}(G>M~DP94S|RV zgbs?+?(xFU#|A%_85l&8w;E@wP&CGh6+trvTfKHIHf`F3CqL;)*57R(SwTKdo=QrH ziW2FHOa=K88NMMeA8-HICz0S{VPJ3w@k}?;J-ry8oWeXsn$68j*8DU*GlL<{PThTd zZ1>WLN-IY(I2-x1=SLxK?Ra0OFsYs%^bQV+M4Ypvf@#SlMdWArp56QR;lbrAuy)NF zy!12QLjE&efV@XP35$x$aKzvBBzX@}Q6gP2DJ7pGVS<7uKM#3t{RBRC%Yzu<fA~Ji zVWhjIjpJqxecY(caArDL=oKa=CowQIBpW`1l4STDLt|qY9vesB0H5#e<8%EoTWPFj zI%lnbrlYdKhL!8q<AJ41v4Xtij_r8#UzgyK-@OUtpZXPw-}G@Tdfw|%{+ySg;?a-A zBKeVauIg2kNLRphbWI}A6Q70Rw|^dw{@zU}`qiEI&@Fc$#sBbw<Ksy5bi>TGU|~%c zq1f_aYI+8z$^u~(6Gk~_4N@kGg#Mu+5i&*5G&7D)UjUW$Hay(kSwOdO^jo}!uwx67 zlu2a<mm4Uk%-}MnwS!F^R2)u>VRkG-%x)?N%%m7(2OXJ0MVA@;F~fZ~t4YtkIaTLV z_4z!vPjk-i>`K-CcV~9)-kJZb)1vJq*u2Go)Qn7IY|h4c@!2p=ONDt_Hq3E_h?rB1 zlNRoPb@et_uDk|8o_0UaTje523ULY|e<JN_Cr%wUqDsTs1XjiGVvhe-k@`(hT!X4u zh)s%NCsrRjtI<oG7{&G51j=g^SiK2JaUD@aQT)5VK9oC16G4daWDFklBqCl~3iHeY zm|ow6LDBKJZgB!y*}?z7VcVDN_@8kY#x)}?wf#QlJ<P;u!?fT1>5up;e?ynj-hAMq zEnVqf0L$O0q(A)W&-gu^==c0x&+q?$Z+m*^NZ)F44l^CTzpWk4#wL{2)WT6xhV=YG z3Mm6CGIKCu)+!jMtcPi;9pSO*7%?-SA}Ynm#i<xD{A7rBKZ(di>y(hN%0d&3ik~3G z-zTVajvp&_0vR8l&^AR32QjK*itl>}ywFXoit{TvwbyIVe;*~z1uwWsq)N1k`|Gd! zJw*^Sa0mw8^cW&uUIz1wB8n)FB1(g4@&<%YOvb4*<|3`!iQjPU^Vx5HhtD|_W6E0- z6VuyTy8ClF%6Amm?<p3|ap+Rt@OKoQ_S+9M2m4S<B)r2#*`sg2i-UZ-p`A&L*0wh6 zV*0zWr3KE0MpV?*VGA9}&iRp@ZZvIU21eKtV4AoV5mPo{I7M{(${iRJp9Rxn<8Z=| zaEP`Tpy-%C`UHxUI!q673gNir<9ks^cIg`IBA&yC8*V4EXlw#~XLQT)6mi_*JBJhp zB&HXI<n~gZ6zMv8WKk>buZSayi*@v^goXwOKXaz#T%2~t^Dw=<0uhrkVVa%~)3nWe z>T^HV4%3v46w^u!8n*;bt<A<!X4^hF<{;lvNK86VAexZ4#h3h^E`vY*=`R!#hi$+6 zJwE4ex;b2Xhncw}Z@&Y&4u@_>wUl=!*N@sdJDK|Kz<vs8Z)+=Dd-ix7sk#PlY~2of zPA)d(=HlihYhipn35E%4F??DUZd*};TNkEb_=M#cJo*s?_0tw>vq^}z8|5ZOFGH7Z z>4wU`vq(2Ir5A)`mBgyL28+T8++KbYMS2v%l;c<xZq-99y&@!aeQc6IEPmZz-<@eh zP|yh&apBdtdUXp%+S_p5N+-^nSBw!evMHoAiipsajIXUj#N@TOWKJfM-z-P_k)vD} zVrGpZ`S6Rcn0WY1d%J<ogKwAur)%N2fA~FzZNJgxJs(j>On-weB(iqz;t&PZb@-?z zCU<8S_P4iTHyx?L<wEt&dTcMRK;E0huoo0yQECQGpO%7%2`ee0bc|ZM4Yx1O!0@pP zDXw)Gbmb^ff4Zww9J&TJs)s?!xq{r0{TGsN*J}9*F<az^hN1&|6OvIUkZwhsDEUd= zOG0uh=bhdi#U?wa@Ap@k-bTpqGhvP^!H9%rSdtrY^_tzdEp<0Wu5seBCB-;xS|*0Y zrs70f8X}Xn;F;7SBy1@`)xK67qRYJV@#lD#qI&Pxy3uD8)EA#qJm26;@&*59iCH?& z0xMq)dWSEqzQu*u!(3N7$l+bbTkpbs<Sn#z9Yo84HZ;<Ws^~`BYwA!?T8?yP>{i$_ zal?`{7$&X8FbezT<YL^Juo=T%Sq#Igi7-!Eg@KmKAnJaFT*)4lT}z!tRV?xi^IJ&j zYn6-J%MjD%b^fOw0^0nDW7W}HLQ;2Xb-Owh$IEl%6d%&u2r-?^r#h1gOPXPtUjx&E zS`1rMhjWr#xN+TH+?TNrw{39Zx@FrjW^Fkh&n(4j1v@Y!e=F9MRH16`0l4W<hu)*x zP$2Jo{3+e)3v_et^d5(N{EW9h`V>b#{1}Hm_y`9nq|SHWM;qry`{_t~ImC0dcfv_w zRxwkzgKk6-VPioN;?pv4SE8Lm%`A-@legmTq+ARemjGjQB243#!8CRe`kj0hMBO74 z!!7lV^x=ke`zs_rk9R7s%ZE;^jH4*MJV#O%$sMiw_zE|QAx=LM4+9B8B1XV4J_F{& zJuuCskml8D80Xf)z|Y179PTY`#;DZ&xIe!W_vE_~UEG5B(w&&Sr5v-0wjtS3j-1+^ zC~w}2mi8{V`L;p_-&*LRSi0UJZ@-65zEjuEte@sU2M=RUM;BbJZZvUTRNdr4ab+#? zca&mdkpuJ6axi{<ChlLIgHz@dA!6Eg+_0=1_bz_}BVv}qIBq#i(J3%b=8*G|NeCGl z0oLUZ2~`Toucx?lOdk-EuTNe@`$%#6fRKFX(2@FM6!+I6Ctn0TzNf;4kiyJd;9LiD z@;*9Joxn*k5pD?#^LAqBym}ZGHE{Un!qpr1;n^KsSWw@A<l5axEU(9cZ54<sEWzS8 zO0lfC0;#3dD6FkVaeWiEH8f*Kg9|0DT_|mC;pZk4RXdSgR)w_f<ycnmCT6GSV^V4^ zUR<AxsP*}HY(oJqSXhLxsoQYl%0?~-J8;s()i6$62h*grFiltm^Rx_vS)W31NU->~ z@L2vI3kd?dA3{>Z>C-|oDuiUwtsz0eNn-r?Cx#I`Bm&_tETfPPctk|eXe_8F4WyAY z!L+zhbEgP8RajgV2Gg}JNp<6?@}r2YJAwsu9avSrAFFGdvACob(~39*%-@dKW8`rt zSg@VLL6W--vAM;VknO;@%?`Yjz6H;bXVTupQyIm0BE1+-XKckaOC1QGS&W;O*W;m; zTX5>cL>R^`W%_$1C?rDh&o0D}kq<+(MeNTJQq0c~Qc52clG{fov3NPByN@}NTF~By zaWT@G7bNWZ^(TLX6f|%!!k<_~A$15BYVbhu5bhK0^G@RQ4E^SldDRHx(C@_MdvHZ| z2ktEH!o!Y(m{55LOPac{p}8F!n)V^S+J)C0wHTXUf#<Ty@M3lu#^zOEY(XWd!b{wL ziTf|)RpR-aGDKzVz}3sQB4Rd&b1PkVe0?#_d@Y{qTL~P_C2?Mq3=@ZU=GWH3JY@q0 zo^usMn_Q(9l5bfsZ>8JI*j<XF6oT7dA$dz4C^Bt|hlmu%Pa*k`J&aOiF?~3vMZUk1 zpyU*|KP8xK3JM89*u7I=UUo=0P!n+p0X1@;ENt+&)Z995$=q5&4TpU-IEBN#bM5W8 zF1HQW=ejYbpaTzYJ&5RvgIM5f$2wOVR_)w}*(Hs5^^F=lol}M9a;xyHMkSukt-urH zetRh{PudPcTp6xg(Tt}yZHHyb5`>RkMDb8WuO@4ABNOLH=GQkO?4}11<oRR2#Uw-_ zB&9IqH3(l*<!(tJsw|=7zbvFERSYj{E8Tu1V2q+3PGXm?MG}azJtJkI`*a=Nv#(Cc zsZ?>C0$<jW<_0nTklS8@dBqWraD)p{KsxHhkk6^3PEgB^U#&UT8LRf;vaAk_ETE|J z+B9L^QrL;Rw;aUFWgS?;Io0~+4y<lCfVk3Tyj)m^r}HZjMPc2#p#m2tmEp|zGK^f? zf~V6;aPCx!=;ehJPy)q65yhmCWptwr2*2kQ1os;N)?u3@BA+{F)PK1CVwDykjXtbb zD1_*zkbLhncKLU`5T{4A5H7W+mxr8EkVeJzsu$(ubtKuP)g_u>@W`iOUiA(|p$Ul` zcOo)hh)6~!EX}Fn>R_0|)cO3KI5BBA&fRbTSEL`nwK;9LA&=W^H*U)15b(_|Jiomi zb8F~Qu1+kd+K(3sU38#oT$)meJJNRH8GAX-ofc0K(TSoHH311IqIEDlISV2E2Z7gq zl!W{K2C@3p92<!wMlTaotD<8-9AlLyxzbb9Zy_mOg^}j~QBr3SF_du};#i}oPmC1D zt$1j3i(?`MF_K7PRGBzkeJr~6mgCs}!}}W}4gcggDL?1mVi<Jo12C_C8>YnlOe(be zFq|Vg(db=CZ0C|W{65a<VU9;oM(uMg%yBz0jN%;5q2jQ3rq`G3hG|hV#nyzA7Q1i? zxpd`TJeAi9TSYsb%GrZwGiz|()I??y<LN?46puD1@-S%)j4v-i|6wOW)b}DEvr=j? zDG)b-MbQBjF(P|ONXlzayoTgM9K};!)uxKhFOLNLj-$91KeLrXNM=ZAC<b406C%d0 z@gx-z_Ig<4qL?U@`9J1D$KdBUGEZ#hk~vPYljy`Xm)Hce_}%OV7-u)aXd`jW{JsU( zuI$1y8O=C<Iz=>=E;NA-G@e8+qln0aRowosw;1l~jlXH}`j)ZuG*qsTD`WJ6kR*3Z zkvpK|4vM0V<HMWi{$7Vg7J?+?C?7I=PDLDlvUiyT!DQemXCeGC8;nznV2<Afb5bjv zq(z9RPA4QGpt(Bc97iXt+4bCS;FkNdxQ%P1a2iOHhZ!z@--1!A595~P3WSfFM<-fF zmQy@r+zO9~rfx#mb$3G4c@pW>5-A!zMr@6~hY-U;qKMJk#i}Fn|1eIZe7wJH>c`&@ zSrl>n5z`dXP7p-;4IYdkqn?7{<<**i%*)$hO4_SA6di^*1wv2)AtFINC?tUp(#%F~ zn}`t6G%~dr*7Zkl{k&orj=9lz3TFb(JJGW>&)AHi))%zv5~A<(B~Sw84pK-!5E{Zc z)I~QV{1F>Fe=)OrofK3X1=S=3Mdk@%&6Au-qh1@z(S?MNj?n}ngv6oU^j)|=^)N1{ zU<_lAxzIX_X)U)D(ad~AJQ$1M(Ej3o-u%ldff6X^lj-C$f?(4B)bll$GQOG$b8;)p z%Q`417sXN|)|Ki+!of*&LekvnxR4qtATqrPbR%w?$sRnBb_nOsN`vtgI#Kj`3TX|@ z({f;ZF%h8=X7C#RPR!&NSpp?cOyo9FDTaOQ*uydS(lLm5Vm{0Z8!0HdRD6r(OcWKV zC3O%92f=YyYJ_kkkBDN)w0(GC^Ff>*yVm1I(d(Gz&g9T;9R{3nk(8nPWtTt+lu&Xm zSwKJ#JYWz8oOU6??-~p9>=KxkwNp@gJTJS>ts!;#>>kmCB*gT?{D{u87ty(07&dvC zXGk|G4d$s?7!-LM#JL_Nff6Xcx-x`Bk@pDrni2ZZrNXYd1I7t<&Y>u#1j5B!3Q3oU z5LvrfL?j!G(_J_<t`#q3w$Xu>GP$q;=GYtz9sRTxm+_a9-Y$U>6B7esAt(Houo1i1 zcM=xA<3Vg$MC@M)ELV^k0)h~}wlnCgi(%lfk1w}+9BN^U=RLkSEfr2EqS<5?g+wu( zv#1SEZgkO&mcsmc7Q*kJh~VH5h`0kuUoHV5sqtS(LO3?D|Em#_49jq`nt&jP3@{GE z(7RrRaoQG7mT$>k3ThW!%H_%A(UlCGD_xe-j)zuP(T&!?@MIi9!@?nw93%Yf99n_E zt?MWt-D2BAtm6Af(k=boD!%I>AWo_B@^L-lv*P^v4#FbNBd`;z?ws9TVmiHaxD>JP z5FFpP5hHQy>#k@Mr}TR#0fFwCY*Iaq3P<v(&Ghl5|87^+R~+w_j@Pb90AdkwAh7ij zQN2Vu2?+Z2?~fsocf;`VS_-Hd<^(rPiw{sxEil*``JSB{cdaO4HZUFoPPITBcd5T3 zvJeof+{jX6*+{q8@76VRimpRL+-M`|5wYcAheJBf%lW+vN&3B8ca16HSc}x@++I4U zzCJzV1l@Jpbsap4bSv7#DG9<MIfRjbSfut*3CXuM6YV59lDfVkwwK{15%I(WK-b2W zKIBq2kvsx|5Hj%WD-iy`EEp%h0dssS42hi>!!@K)@dX%o{*}_}KmG~Hs%v2RGekq_ z1!p9X=oZJhb#c0-MwUB<=wOQTOG1**qrXNe2K0Ct;`E4^4xQNCx();h%TKh4Q=C`s z%r=3(gF4hg^1aOzLQ>V&qPsTvp%5iIs_a~S36|4IEct*Si1as|gs{=iV(3d7@Nn)C zT=m$?5F(mR<kIVo)T4XCM@cSVm4;B=3P%z{GUfRriRHKpdO45Yk({z4O0K0RMRz>+ zrC3DgNIi-+Q3*+_uO#$HrI37RGlh^;^>s@74!K?=N+&$Y_4^(yL&?3w@q<eZ3d6Z0 z?}hk(A0-fV>BTvcRrkFRj9N(2yaU9hm?Nd=zxN^}Z*wG@VvZzt=qPDEBh48Ub0oEp zEc!MRIF&;3q0QuT>*{1z)>odti8@R55~7u_rSBsaSmVgw3CQBUouLX4pzmk<Zta7q o-T(mt^o<J%5Fj9=009F04=3LzeI1bLZU6uP07*qoM6N<$f<Fmar~m)} literal 0 HcmV?d00001 diff --git a/data/web/rc/installer/index.php b/data/web/rc/installer/index.php new file mode 100644 index 00000000..1199923f --- /dev/null +++ b/data/web/rc/installer/index.php @@ -0,0 +1,183 @@ +<?php + +/** + +-------------------------------------------------------------------------+ + | Roundcube Webmail setup tool | + | Version 1.3-git | + | | + | Copyright (C) 2009-2015, The Roundcube Dev Team | + | | + | This program is free software: you can redistribute it and/or modify | + | it under the terms of the GNU General Public License (with exceptions | + | for skins & plugins) as published by the Free Software Foundation, | + | either version 3 of the License, or (at your option) any later version. | + | | + | This file forms part of the Roundcube Webmail Software for which the | + | following exception is added: Plugins and Skins which merely make | + | function calls to the Roundcube Webmail Software, and for that purpose | + | include it by reference shall not be considered modifications of | + | the software. | + | | + | If you wish to use this file in another project or create a modified | + | version that will not be part of the Roundcube Webmail Software, you | + | may remove the exception above and use this source code under the | + | original version of the license. | + | | + | This program is distributed in the hope that it will be useful, | + | but WITHOUT ANY WARRANTY; without even the implied warranty of | + | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | + | GNU General Public License for more details. | + | | + | You should have received a copy of the GNU General Public License | + | along with this program. If not, see http://www.gnu.org/licenses/. | + | | + +-------------------------------------------------------------------------+ + | Author: Thomas Bruederli <roundcube@gmail.com> | + +-------------------------------------------------------------------------+ +*/ + +ini_set('error_reporting', E_ALL &~ (E_NOTICE | E_STRICT)); +ini_set('display_errors', 1); + +define('INSTALL_PATH', realpath(__DIR__ . '/../').'/'); +define('RCUBE_INSTALL_PATH', INSTALL_PATH); +define('RCUBE_CONFIG_DIR', INSTALL_PATH . 'config/'); + +$include_path = INSTALL_PATH . 'program/lib' . PATH_SEPARATOR; +$include_path .= INSTALL_PATH . 'program/include' . PATH_SEPARATOR; +$include_path .= ini_get('include_path'); + +set_include_path($include_path); + +// include composer autoloader (if available) +if (@file_exists(INSTALL_PATH . 'vendor/autoload.php')) { + require INSTALL_PATH . 'vendor/autoload.php'; +} + +require_once 'Roundcube/bootstrap.php'; + +if (function_exists('session_start')) + session_start(); + +$RCI = rcmail_install::get_instance(); +$RCI->load_config(); + +if (isset($_GET['_getconfig'])) { + $filename = 'config.inc.php'; + if (!empty($_SESSION['config']) && $_GET['_getconfig'] == 2) { + $path = sys_get_temp_dir() . DIRECTORY_SEPARATOR . $filename; + @unlink($path); + file_put_contents($path, $_SESSION['config']); + exit; + } + else if (!empty($_SESSION['config'])) { + header('Content-type: text/plain'); + header('Content-Disposition: attachment; filename="'.$filename.'"'); + echo $_SESSION['config']; + exit; + } + else { + header('HTTP/1.0 404 Not found'); + die("The requested configuration was not found. Please run the installer from the beginning."); + } +} + +if ($RCI->configured && ($RCI->getprop('enable_installer') || $_SESSION['allowinstaller']) && + !empty($_GET['_mergeconfig'])) { + $filename = 'config.inc.php'; + + header('Content-type: text/plain'); + header('Content-Disposition: attachment; filename="'.$filename.'"'); + + $RCI->merge_config(); + echo $RCI->create_config(); + exit; +} + +// go to 'check env' step if we have a local configuration +if ($RCI->configured && empty($_REQUEST['_step'])) { + header("Location: ./?_step=1"); + exit; +} + +?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> +<title>Roundcube Webmail Installer + + + + + + + + + + + + +
    + +configured && !$RCI->getprop('enable_installer') && !$_SESSION['allowinstaller']) { + // header("HTTP/1.0 404 Not Found"); + if ($RCI->configured && $RCI->legacy_config) { + echo '

    Your configuration needs to be migrated!

    '; + echo '

    We changed the configuration files structure and your installation needs to be updated accordingly.

    '; + echo '

    Please run the bin/update.sh script from the command line or set

      $rcube_config[\'enable_installer\'] = true;

    '; + echo ' in your RCUBE_CONFIG_DIR/main.inc.php to let the installer help you migrating it.

    '; + } + else { + echo '

    The installer is disabled!

    '; + echo '

    To enable it again, set $config[\'enable_installer\'] = true; in RCUBE_CONFIG_DIR/config.inc.php

    '; + } + echo '
    '; + exit; + } + +?> + +

    Roundcube Webmail Installer

    + +
      + './check.php', + 2 => './config.php', + 3 => './test.php', + ); + + if (!in_array($RCI->step, array_keys($include_steps))) { + $RCI->step = 1; + } + + foreach (array('Check environment', 'Create config', 'Test config') as $i => $item) { + $j = $i + 1; + $link = ($RCI->step >= $j || $RCI->configured) ? '' . rcube::Q($item) . '' : rcube::Q($item); + printf('
    1. %s
    2. ', $j+1, $RCI->step > $j ? ' passed' : ($RCI->step == $j ? ' current' : ''), $link); + } +?> +
    + +step]; + +?> +
+ + + + diff --git a/data/web/rc/installer/styles.css b/data/web/rc/installer/styles.css new file mode 100644 index 00000000..06f49e37 --- /dev/null +++ b/data/web/rc/installer/styles.css @@ -0,0 +1,235 @@ +body { + background: white; + font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; + font-size: small; + color: black; + margin: 0; +} + +#banner { + position: relative; + height: 58px; + margin: 0 0 1em 0; + padding: 10px 20px; + background: url('images/banner_gradient.gif') top left repeat-x #d8edfd; + overflow: hidden; +} + +#banner .banner-bg { + position: absolute; + top: 0; + right: 0; + width: 630px; + height: 78px; + background: url('images/banner_schraffur.gif') top right no-repeat; + z-index: 0; +} + +#banner .banner-logo { + position: absolute; + top: 10px; + left: 20px; + z-index: 4; +} + +#banner .banner-logo a { + border: 0; +} + +#topnav { + position: absolute; + top: 3.6em; + right: 20px; +} + +#topnav a { + color: #666; +} + +#content { + margin: 2em 20px; +} + +#footer { + margin: 2em 20px 1em 20px; + padding-top: 0.6em; + font-size: smaller; + text-align: center; + border-top: 1px dotted #999; +} + +#progress { + margin-bottom: 2em; + border: 1px solid #aaa; + background-color: #f9f9f9; +} + +#progress:after { + content: "."; + display: block; + height: 0; + font-size: 0; + clear: both; + visibility: hidden; +} + +#progress li { + float: left; + color: #999; + padding: 1em 5em 1em 0.2em; +} + +#progress li a { + color: #999; + text-decoration: none; +} + +#progress li a:hover { + text-decoration: underline; +} + +#progress li.current { + color: #000; + font-weight: bold; +} + +#progress li.passed, +#progress li.passed a, +#progress li.current a { + color: #333; +} + +fieldset { + margin-bottom: 1.5em; + border: 1px solid #aaa; + background-color: #f9f9f9; +} + +fieldset p.hint { + margin-top: 0.5em; +} + +legend { + font-size: 1.1em; + font-weight: bold; +} + +textarea.configfile { + background-color: #f9f9f9; + font-family: monospace; + font-size: 9pt; + width: 100%; + height: 30em; +} + +.propname { + font-family: monospace; + font-size: 9pt; + margin-top: 1em; + margin-bottom: 0.6em; +} + +dd div { + margin-top: 0.3em; +} + +dd label { + padding-left: 0.5em; +} + +th { + text-align: left; +} + +ul li { + margin: 0.3em 0 0.4em -1em; +} + +ul li ul li { + margin-bottom: 0.2em; +} + +h3 { + font-size: 1.1em; + margin-top: 1.5em; + margin-bottom: 0.6em; +} + +h4 { + margin-bottom: 0.2em; +} + +a.blocktoggle { + color: #666; + text-decoration: none; +} + +a.addlink { + color: #999; + font-size: 0.9em; + padding: 1px 0 1px 20px; + background: url('images/add.png') top left no-repeat; + text-decoration: none; +} + +a.removelink { + color: #999; + font-size: 0.9em; + padding: 1px 0 1px 24px; + background: url('images/delete.png') 4px 0 no-repeat; + text-decoration: none; +} + +.hint { + color: #666; + font-size: 0.95em; +} + +.success { + color: #006400; + font-weight: bold !important; +} + +.fail { + color: #ff0000 !important; + font-weight: bold !important; +} + +.na { + color: #f60; + font-weight: bold; +} + +.indent { + padding-left: 0.8em; +} + +.notice { + padding: 1em; + background-color: #f7fdcb; + border: 2px solid #c2d071; +} + +.suggestion { + padding: 0.6em; + background-color: #ebebeb; + border: 1px solid #999; +} + +p.warning, +div.warning { + padding: 1em; + background-color: #ef9398; + border: 2px solid #dc5757; +} + +h3.warning { + color: #c00; + background: url('images/error.png') top left no-repeat; + padding-left: 24px; +} + +.userconf { + color: #00c; + font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; +} diff --git a/data/web/rc/installer/test.php b/data/web/rc/installer/test.php new file mode 100644 index 00000000..a79adc17 --- /dev/null +++ b/data/web/rc/installer/test.php @@ -0,0 +1,445 @@ + +
+ +

Check config file

+load_config_file(RCUBE_CONFIG_DIR . 'defaults.inc.php'); + if (!empty($config)) { + $RCI->pass('defaults.inc.php'); + } + else { + $RCI->fail('defaults.inc.php', 'Syntax error'); + } +} +else { + $RCI->fail('defaults.inc.php', 'Unable to read default config file?'); +} +echo '
'; + +if ($read_config = is_readable(RCUBE_CONFIG_DIR . 'config.inc.php')) { + $config = $RCI->load_config_file(RCUBE_CONFIG_DIR . 'config.inc.php'); + if (!empty($config)) { + $RCI->pass('config.inc.php'); + } + else { + $RCI->fail('config.inc.php', 'Syntax error'); + } +} +else { + $RCI->fail('config.inc.php', 'Unable to read file. Did you create the config file?'); +} +echo '
'; + + +if ($RCI->configured && ($messages = $RCI->check_config())) { + if (is_array($messages['replaced'])) { + echo '

Replaced config options

'; + echo '

The following config options have been replaced or renamed. '; + echo 'Please update them accordingly in your config files.

'; + + echo '
    '; + foreach ($messages['replaced'] as $msg) { + echo html::tag('li', null, html::span('propname', $msg['prop']) . + ' was replaced by ' . html::span('propname', $msg['replacement'])); + } + echo '
'; + } + + if (is_array($messages['obsolete'])) { + echo '

Obsolete config options

'; + echo '

You still have some obsolete or inexistent properties set. This isn\'t a problem but should be noticed.

'; + + echo '
    '; + foreach ($messages['obsolete'] as $msg) { + echo html::tag('li', null, html::span('propname', $msg['prop']) . ($msg['name'] ? ': ' . $msg['name'] : '')); + } + echo '
'; + } + + echo '

OK, lazy people can download the updated config file here: '; + echo html::a(array('href' => './?_mergeconfig=1'), 'config.inc.php') . '  '; + echo "

"; + + if (is_array($messages['dependencies'])) { + echo '

Dependency check failed

'; + echo '

Some of your configuration settings require other options to be configured or additional PHP modules to be installed

'; + + echo '
    '; + foreach ($messages['dependencies'] as $msg) { + echo html::tag('li', null, html::span('propname', $msg['prop']) . ': ' . $msg['explain']); + } + echo '
'; + } +} + +?> + +

Check if directories are writable

+

Roundcube may need to write/save files into these directories

+config['temp_dir'] ? $RCI->config['temp_dir'] : 'temp'; +if ($RCI->config['log_driver'] != 'syslog') + $dirs[] = $RCI->config['log_dir'] ? $RCI->config['log_dir'] : 'logs'; + +foreach ($dirs as $dir) { + $dirpath = rcube_utils::is_absolute_path($dir) ? $dir : INSTALL_PATH . $dir; + if (is_writable(realpath($dirpath))) { + $RCI->pass($dir); + $pass = true; + } + else { + $RCI->fail($dir, 'not writeable for the webserver'); + } + echo '
'; +} + +if (!$pass) { + echo '

Use chmod or chown to grant write privileges to the webserver

'; +} + +?> + +

Check DB config

+configured) { + if (!empty($RCI->config['db_dsnw'])) { + $DB = rcube_db::factory($RCI->config['db_dsnw'], '', false); + $DB->set_debug((bool)$RCI->config['sql_debug']); + $DB->db_connect('w'); + + if (!($db_error_msg = $DB->is_error())) { + $RCI->pass('DSN (write)'); + echo '
'; + $db_working = true; + } + else { + $RCI->fail('DSN (write)', $db_error_msg); + echo '

Make sure that the configured database exists and that the user has write privileges
'; + echo 'DSN: ' . $RCI->config['db_dsnw'] . '

'; + } + } + else { + $RCI->fail('DSN (write)', 'not set'); + } +} +else { + $RCI->fail('DSN (write)', 'Could not read config file'); +} + +// initialize db with schema found in /SQL/* +if ($db_working && $_POST['initdb']) { + if (!($success = $RCI->init_db($DB))) { + $db_working = false; + echo '

Please try to inizialize the database manually as described in the INSTALL guide. + Make sure that the configured database extists and that the user as write privileges

'; + } +} + +else if ($db_working && $_POST['updatedb']) { + if (!($success = $RCI->update_db($_POST['version']))) { + echo '

Database schema update failed.

'; + } +} + +// test database +if ($db_working) { + $db_read = $DB->query("SELECT count(*) FROM " . $DB->quote_identifier($RCI->config['db_prefix'] . 'users')); + if ($DB->is_error()) { + $RCI->fail('DB Schema', "Database not initialized"); + echo '

'; + $db_working = false; + } + else if ($err = $RCI->db_schema_check($DB, $update = !empty($_POST['updatedb']))) { + $RCI->fail('DB Schema', "Database schema differs"); + echo '
  • ' . join("
  • \n
  • ", $err) . "
"; + $select = $RCI->versions_select(array('name' => 'version')); + $select->add('0.9 or newer', ''); + echo '

You should run the update queries to get the schema fixed.

Version to update from: ' . $select->show() . ' 

'; + $db_working = false; + } + else { + $RCI->pass('DB Schema'); + echo '
'; + } +} + +// more database tests +if ($db_working) { + // write test + $insert_id = md5(uniqid()); + $db_write = $DB->query("INSERT INTO " . $DB->quote_identifier($RCI->config['db_prefix'] . 'session') + . " (`sess_id`, `changed`, `ip`, `vars`) VALUES (?, ".$DB->now().", '127.0.0.1', 'foo')", $insert_id); + + if ($db_write) { + $RCI->pass('DB Write'); + $DB->query("DELETE FROM " . $DB->quote_identifier($RCI->config['db_prefix'] . 'session') + . " WHERE `sess_id` = ?", $insert_id); + } + else { + $RCI->fail('DB Write', $RCI->get_error()); + } + echo '
'; + + // check timezone settings + $tz_db = 'SELECT ' . $DB->unixtimestamp($DB->now()) . ' AS tz_db'; + $tz_db = $DB->query($tz_db); + $tz_db = $DB->fetch_assoc($tz_db); + $tz_db = (int) $tz_db['tz_db']; + $tz_local = (int) time(); + $tz_diff = $tz_local - $tz_db; + + // sometimes db and web servers are on separate hosts, so allow a 30 minutes delta + if (abs($tz_diff) > 1800) { + $RCI->fail('DB Time', "Database time differs {$td_ziff}s from PHP time"); + } + else { + $RCI->pass('DB Time'); + } +} + +?> + +

Test filetype detection

+ +check_mime_detection()) { + $RCI->fail('Fileinfo/mime_content_type configuration'); + if (!empty($RCI->config['mime_magic'])) { + echo '

Try setting the mime_magic config option to null.

'; + } + else { + echo '

Check the Fileinfo functions of your PHP installation.
'; + echo 'The path to the magic.mime file can be set using the mime_magic config option in Roundcube.

'; + } +} +else { + $RCI->pass('Fileinfo/mime_content_type configuration'); + echo "
"; +} + + +if ($errors = $RCI->check_mime_extensions()) { + $RCI->fail('Mimetype to file extension mapping'); + echo '

Please set a valid path to your webserver\'s mime.types file to the mime_types config option.
'; + echo 'If you can\'t find such a file, download it from svn.apache.org.

'; +} +else { + $RCI->pass('Mimetype to file extension mapping'); + echo "
"; +} + +?> + + +

Test SMTP config

+ +

+Server: getprop('smtp_server', 'localhost')); ?>
+Port: getprop('smtp_port'); ?>
+ +getprop('smtp_server')) { + $user = $RCI->getprop('smtp_user', '(none)'); + $pass = $RCI->getprop('smtp_pass', '(none)'); + + if ($user == '%u') { + $user_field = new html_inputfield(array('name' => '_smtp_user')); + $user = $user_field->show($_POST['_smtp_user']); + } + if ($pass == '%p') { + $pass_field = new html_passwordfield(array('name' => '_smtp_pass')); + $pass = $pass_field->show(); + } + + echo "User: $user
"; + echo "Password: $pass
"; +} + +$from_field = new html_inputfield(array('name' => '_from', 'id' => 'sendmailfrom')); +$to_field = new html_inputfield(array('name' => '_to', 'id' => 'sendmailto')); + +?> +

+ +Trying to send email...
'; + + $from = idn_to_ascii(trim($_POST['_from'])); + $to = idn_to_ascii(trim($_POST['_to'])); + + if (preg_match('/^' . $RCI->email_pattern . '$/i', $from) && + preg_match('/^' . $RCI->email_pattern . '$/i', $to) + ) { + $headers = array( + 'From' => $from, + 'To' => $to, + 'Subject' => 'Test message from Roundcube', + ); + + $body = 'This is a test to confirm that Roundcube can send email.'; + + // send mail using configured SMTP server + $CONFIG = $RCI->config; + + if (!empty($_POST['_smtp_user'])) { + $CONFIG['smtp_user'] = $_POST['_smtp_user']; + } + if (!empty($_POST['_smtp_pass'])) { + $CONFIG['smtp_pass'] = $_POST['_smtp_pass']; + } + + $mail_object = new Mail_mime(); + $send_headers = $mail_object->headers($headers); + $head = $mail_object->txtHeaders($send_headers); + + $SMTP = new rcube_smtp(); + $SMTP->connect(rcube_utils::parse_host($RCI->getprop('smtp_server')), + $RCI->getprop('smtp_port'), $CONFIG['smtp_user'], $CONFIG['smtp_pass']); + + $status = $SMTP->send_mail($headers['From'], $headers['To'], $head, $body); + $smtp_response = $SMTP->get_response(); + + if ($status) { + $RCI->pass('SMTP send'); + } + else { + $RCI->fail('SMTP send', join('; ', $smtp_response)); + } + } + else { + $RCI->fail('SMTP send', 'Invalid sender or recipient'); + } + + echo '

'; +} + +?> + + + + + + + + + + + + +
show($_POST['_from']); ?>
show($_POST['_to']); ?>
+ +

+ + +

Test IMAP config

+ +get_hostlist(); +if (!empty($default_hosts)) { + $host_field = new html_select(array('name' => '_host', 'id' => 'imaphost')); + $host_field->add($default_hosts); +} +else { + $host_field = new html_inputfield(array('name' => '_host', 'id' => 'imaphost')); +} + +$user_field = new html_inputfield(array('name' => '_user', 'id' => 'imapuser')); +$pass_field = new html_passwordfield(array('name' => '_pass', 'id' => 'imappass')); + +?> + + + + + + + + + + + + + + + + + + + + +
show($_POST['_host']); ?>
Portgetprop('default_port'); ?>
show($_POST['_user']); ?>
show(); ?>
+ +Connecting to ' . rcube::Q($_POST['_host']) . '...
'; + + $imap_host = trim($_POST['_host']); + $imap_port = $RCI->getprop('default_port'); + $a_host = parse_url($imap_host); + + if ($a_host['host']) { + $imap_host = $a_host['host']; + $imap_ssl = (isset($a_host['scheme']) && in_array($a_host['scheme'], array('ssl','imaps','tls'))) ? $a_host['scheme'] : null; + if (isset($a_host['port'])) + $imap_port = $a_host['port']; + else if ($imap_ssl && $imap_ssl != 'tls' && (!$imap_port || $imap_port == 143)) + $imap_port = 993; + } + + $imap_host = idn_to_ascii($imap_host); + $imap_user = idn_to_ascii($_POST['_user']); + + $imap = new rcube_imap(null); + $imap->set_options(array( + 'auth_type' => $RCI->getprop('imap_auth_type'), + 'debug' => $RCI->getprop('imap_debug'), + 'socket_options' => $RCI->getprop('imap_conn_options'), + )); + + if ($imap->connect($imap_host, $imap_user, $_POST['_pass'], $imap_port, $imap_ssl)) { + $RCI->pass('IMAP connect', 'SORT capability: ' . ($imap->get_capability('SORT') ? 'yes' : 'no')); + $imap->close(); + } + else { + $RCI->fail('IMAP connect', $RCI->get_error()); + } +} + +?> + +

+ +
+ +
+ +

+ +After completing the installation and the final tests please remove the whole +installer folder from the document root of the webserver or make sure that +enable_installer option in config.inc.php is disabled.
+
+ +These files may expose sensitive configuration data like server passwords and encryption keys +to the public. Make sure you cannot access this installer from your browser. + +

diff --git a/data/web/rc/logs/.htaccess b/data/web/rc/logs/.htaccess new file mode 100644 index 00000000..43e24edc --- /dev/null +++ b/data/web/rc/logs/.htaccess @@ -0,0 +1,7 @@ +# deny webserver access to this directory + + Require all denied + + + Deny from all + diff --git a/data/web/rc/plugins/acl/acl.js b/data/web/rc/plugins/acl/acl.js new file mode 100644 index 00000000..1b92ed86 --- /dev/null +++ b/data/web/rc/plugins/acl/acl.js @@ -0,0 +1,389 @@ +/** + * ACL plugin script + */ + +if (window.rcmail) { + rcmail.addEventListener('init', function() { + if (rcmail.gui_objects.acltable) { + rcmail.acl_list_init(); + // enable autocomplete on user input + if (rcmail.env.acl_users_source) { + var inst = rcmail.is_framed() ? parent.rcmail : rcmail; + inst.init_address_input_events($('#acluser'), {action:'settings/plugin.acl-autocomplete'}); + + // pass config settings and localized texts to autocomplete context + inst.set_env({ autocomplete_max:rcmail.env.autocomplete_max, autocomplete_min_length:rcmail.env.autocomplete_min_length }); + inst.add_label('autocompletechars', rcmail.labels.autocompletechars); + inst.add_label('autocompletemore', rcmail.labels.autocompletemore); + + // fix inserted value + inst.addEventListener('autocomplete_insert', function(e) { + if (e.field.id != 'acluser') + return; + + e.field.value = e.insert.replace(/[ ,;]+$/, ''); + }); + } + } + + rcmail.enable_command('acl-create', 'acl-save', 'acl-cancel', 'acl-mode-switch', true); + rcmail.enable_command('acl-delete', 'acl-edit', false); + + if (rcmail.env.acl_advanced) + $('#acl-switch').addClass('selected'); + }); +} + +// Display new-entry form +rcube_webmail.prototype.acl_create = function() +{ + this.acl_init_form(); +} + +// Display ACL edit form +rcube_webmail.prototype.acl_edit = function() +{ + // @TODO: multi-row edition + var id = this.acl_list.get_single_selection(); + if (id) + this.acl_init_form(id); +} + +// ACL entry delete +rcube_webmail.prototype.acl_delete = function() +{ + var users = this.acl_get_usernames(); + + if (users && users.length && confirm(this.get_label('acl.deleteconfirm'))) { + this.http_post('settings/plugin.acl', { + _act: 'delete', + _user: users.join(','), + _mbox: this.env.mailbox + }, + this.set_busy(true, 'acl.deleting')); + } +} + +// Save ACL data +rcube_webmail.prototype.acl_save = function() +{ + var data, type, rights = '', user = $('#acluser', this.acl_form).val(); + + $((this.env.acl_advanced ? '#advancedrights :checkbox' : '#simplerights :checkbox'), this.acl_form).map(function() { + if (this.checked) + rights += this.value; + }); + + if (type = $('input:checked[name=usertype]', this.acl_form).val()) { + if (type != 'user') + user = type; + } + + if (!user) { + alert(this.get_label('acl.nouser')); + return; + } + if (!rights) { + alert(this.get_label('acl.norights')); + return; + } + + data = { + _act: 'save', + _user: user, + _acl: rights, + _mbox: this.env.mailbox + } + + if (this.acl_id) { + data._old = this.acl_id; + } + + this.http_post('settings/plugin.acl', data, this.set_busy(true, 'acl.saving')); +} + +// Cancel/Hide form +rcube_webmail.prototype.acl_cancel = function() +{ + this.ksearch_blur(); + this.acl_popup.dialog('close'); +} + +// Update data after save (and hide form) +rcube_webmail.prototype.acl_update = function(o) +{ + // delete old row + if (o.old) + this.acl_remove_row(o.old); + // make sure the same ID doesn't exist + else if (this.env.acl[o.id]) + this.acl_remove_row(o.id); + + // add new row + this.acl_add_row(o, true); + // hide autocomplete popup + this.ksearch_blur(); + // hide form + this.acl_popup.dialog('close'); +} + +// Switch table display mode +rcube_webmail.prototype.acl_mode_switch = function(elem) +{ + this.env.acl_advanced = !this.env.acl_advanced; + this.enable_command('acl-delete', 'acl-edit', false); + this.http_request('settings/plugin.acl', '_act=list' + + '&_mode='+(this.env.acl_advanced ? 'advanced' : 'simple') + + '&_mbox='+urlencode(this.env.mailbox), + this.set_busy(true, 'loading')); +} + +// ACL table initialization +rcube_webmail.prototype.acl_list_init = function() +{ + var method = this.env.acl_advanced ? 'addClass' : 'removeClass'; + + $('#acl-switch')[method]('selected'); + $(this.gui_objects.acltable)[method]('advanced'); + + this.acl_list = new rcube_list_widget(this.gui_objects.acltable, + {multiselect: true, draggable: false, keyboard: true}); + this.acl_list.addEventListener('select', function(o) { rcmail.acl_list_select(o); }) + .addEventListener('dblclick', function(o) { rcmail.acl_list_dblclick(o); }) + .addEventListener('keypress', function(o) { rcmail.acl_list_keypress(o); }) + .init(); +} + +// ACL table row selection handler +rcube_webmail.prototype.acl_list_select = function(list) +{ + rcmail.enable_command('acl-delete', list.selection.length > 0); + rcmail.enable_command('acl-edit', list.selection.length == 1); + list.focus(); +} + +// ACL table double-click handler +rcube_webmail.prototype.acl_list_dblclick = function(list) +{ + this.acl_edit(); +} + +// ACL table keypress handler +rcube_webmail.prototype.acl_list_keypress = function(list) +{ + if (list.key_pressed == list.ENTER_KEY) + this.command('acl-edit'); + else if (list.key_pressed == list.DELETE_KEY || list.key_pressed == list.BACKSPACE_KEY) + if (!this.acl_form || !this.acl_form.is(':visible')) + this.command('acl-delete'); +} + +// Reloads ACL table +rcube_webmail.prototype.acl_list_update = function(html) +{ + $(this.gui_objects.acltable).html(html); + this.acl_list_init(); +} + +// Returns names of users in selected rows +rcube_webmail.prototype.acl_get_usernames = function() +{ + var users = [], n, len, cell, row, + list = this.acl_list, + selection = list.get_selection(); + + for (n=0, len=selection.length; n= 0) { + users.push(selection[n]); + } + else if (row = list.rows[selection[n]]) { + cell = $('td.user', row.obj); + if (cell.length == 1) + users.push(cell.text()); + } + } + + return users; +} + +// Removes ACL table row +rcube_webmail.prototype.acl_remove_row = function(id) +{ + var list = this.acl_list; + + list.remove_row(id); + list.clear_selection(); + + // we don't need it anymore (remove id conflict) + $('#rcmrow'+id).remove(); + this.env.acl[id] = null; + + this.enable_command('acl-delete', list.selection.length > 0); + this.enable_command('acl-edit', list.selection.length == 1); +} + +// Adds ACL table row +rcube_webmail.prototype.acl_add_row = function(o, sel) +{ + var n, len, ids = [], spec = [], id = o.id, list = this.acl_list, + items = this.env.acl_advanced ? [] : this.env.acl_items, + table = this.gui_objects.acltable, + row = $('thead > tr', table).clone(); + + // Update new row + $('th', row).map(function() { + var td = $(''), + title = $(this).attr('title'), + cl = this.className.replace(/^acl/, ''); + + if (title) + td.attr('title', title); + + if (items && items[cl]) + cl = items[cl]; + + if (cl == 'user') + td.addClass(cl).append($('').text(o.username)); + else + td.addClass(this.className + ' ' + rcmail.acl_class(o.acl, cl)).text(''); + + $(this).replaceWith(td); + }); + + row.attr('id', 'rcmrow'+id); + row = row.get(0); + + this.env.acl[id] = o.acl; + + // sorting... (create an array of user identifiers, then sort it) + for (n in this.env.acl) { + if (this.env.acl[n]) { + if (this.env.acl_specials.length && $.inArray(n, this.env.acl_specials) >= 0) + spec.push(n); + else + ids.push(n); + } + } + ids.sort(); + // specials on the top + ids = spec.concat(ids); + + // find current id + for (n=0, len=ids.length; n -1) + found++; + + if (found == len) + return 'enabled'; + else if (found) + return 'partial'; + + return 'disabled'; +} diff --git a/data/web/rc/plugins/acl/acl.min.js b/data/web/rc/plugins/acl/acl.min.js new file mode 100644 index 00000000..bc18a2e6 --- /dev/null +++ b/data/web/rc/plugins/acl/acl.min.js @@ -0,0 +1,15 @@ +window.rcmail&&rcmail.addEventListener("init",function(){if(rcmail.gui_objects.acltable&&(rcmail.acl_list_init(),rcmail.env.acl_users_source)){var a=rcmail.is_framed()?parent.rcmail:rcmail;a.init_address_input_events($("#acluser"),{action:"settings/plugin.acl-autocomplete"});a.set_env({autocomplete_max:rcmail.env.autocomplete_max,autocomplete_min_length:rcmail.env.autocomplete_min_length});a.add_label("autocompletechars",rcmail.labels.autocompletechars);a.add_label("autocompletemore",rcmail.labels.autocompletemore); +a.addEventListener("autocomplete_insert",function(a){"acluser"==a.field.id&&(a.field.value=a.insert.replace(/[ ,;]+$/,""))})}rcmail.enable_command("acl-create","acl-save","acl-cancel","acl-mode-switch",!0);rcmail.enable_command("acl-delete","acl-edit",!1);rcmail.env.acl_advanced&&$("#acl-switch").addClass("selected")});rcube_webmail.prototype.acl_create=function(){this.acl_init_form()};rcube_webmail.prototype.acl_edit=function(){var a=this.acl_list.get_single_selection();a&&this.acl_init_form(a)}; +rcube_webmail.prototype.acl_delete=function(){var a=this.acl_get_usernames();a&&a.length&&confirm(this.get_label("acl.deleteconfirm"))&&this.http_post("settings/plugin.acl",{_act:"delete",_user:a.join(","),_mbox:this.env.mailbox},this.set_busy(!0,"acl.deleting"))}; +rcube_webmail.prototype.acl_save=function(){var a,b="",c=$("#acluser",this.acl_form).val();$(this.env.acl_advanced?"#advancedrights :checkbox":"#simplerights :checkbox",this.acl_form).map(function(){this.checked&&(b+=this.value)});(a=$("input:checked[name=usertype]",this.acl_form).val())&&"user"!=a&&(c=a);c?b?(a={_act:"save",_user:c,_acl:b,_mbox:this.env.mailbox},this.acl_id&&(a._old=this.acl_id),this.http_post("settings/plugin.acl",a,this.set_busy(!0,"acl.saving"))):alert(this.get_label("acl.norights")): +alert(this.get_label("acl.nouser"))};rcube_webmail.prototype.acl_cancel=function(){this.ksearch_blur();this.acl_popup.dialog("close")};rcube_webmail.prototype.acl_update=function(a){a.old?this.acl_remove_row(a.old):this.env.acl[a.id]&&this.acl_remove_row(a.id);this.acl_add_row(a,!0);this.ksearch_blur();this.acl_popup.dialog("close")}; +rcube_webmail.prototype.acl_mode_switch=function(a){this.env.acl_advanced=!this.env.acl_advanced;this.enable_command("acl-delete","acl-edit",!1);this.http_request("settings/plugin.acl","_act=list&_mode="+(this.env.acl_advanced?"advanced":"simple")+"&_mbox="+urlencode(this.env.mailbox),this.set_busy(!0,"loading"))}; +rcube_webmail.prototype.acl_list_init=function(){var a=this.env.acl_advanced?"addClass":"removeClass";$("#acl-switch")[a]("selected");$(this.gui_objects.acltable)[a]("advanced");this.acl_list=new rcube_list_widget(this.gui_objects.acltable,{multiselect:!0,draggable:!1,keyboard:!0});this.acl_list.addEventListener("select",function(a){rcmail.acl_list_select(a)}).addEventListener("dblclick",function(a){rcmail.acl_list_dblclick(a)}).addEventListener("keypress",function(a){rcmail.acl_list_keypress(a)}).init()}; +rcube_webmail.prototype.acl_list_select=function(a){rcmail.enable_command("acl-delete",0 tr",this.gui_objects.acltable).clone();$("th",g).map(function(){var b=$(""),c=$(this).attr("title"),d=this.className.replace(/^acl/,"");c&&b.attr("title",c);k&&k[d]&&(d=k[d]);"user"==d?b.addClass(d).append($("").text(a.username)):b.addClass(this.className+" "+rcmail.acl_class(a.acl,d)).text("");$(this).replaceWith(b)});g.attr("id","rcmrow"+ +f);g=g.get(0);this.env.acl[f]=a.acl;for(c in this.env.acl)this.env.acl[c]&&(this.env.acl_specials.length&&0<=$.inArray(c,this.env.acl_specials)?e.push(c):d.push(c));d.sort();d=e.concat(d);c=0;for(e=d.length;c$.inArray(a,this.env.acl_specials)?d=$("td.user",c).text():f=a):b.filter(function(){return this.id.match(/^acl([lrs]|read)$/)}).prop("checked",!0);g.val(d);$("input[value="+f+"]").prop("checked",!0);this.acl_id=a;var d={},l=this,h=document.body;d[this.get_label("save")]=function(a){l.command("acl-save")};d[this.get_label("cancel")]=function(a){l.command("acl-cancel")};this.acl_popup=this.show_popup_dialog(this.acl_form.show(),a?this.get_label("acl.editperms"): +this.get_label("acl.newuser"),d,{button_classes:["mainaction"],modal:!0,closeOnEscape:!0,close:function(a,b){(l.is_framed()?parent.rcmail:l).ksearch_hide();l.acl_form.appendTo(h).hide();$(this).remove();window.focus()}});"user"==f?g.focus():$("input:checked",n).focus()};rcube_webmail.prototype.acl_class=function(a,b){var c,e,d=0;a=String(a);b=String(b);c=0;for(e=b.length;c + * + * Copyright (C) 2011-2012, 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 + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + */ + +class acl extends rcube_plugin +{ + public $task = 'settings|addressbook|calendar'; + + private $rc; + private $supported = null; + private $mbox; + private $ldap; + private $specials = array('anyone', 'anonymous'); + + /** + * Plugin initialization + */ + function init() + { + $this->rc = rcmail::get_instance(); + + // Register hooks + $this->add_hook('folder_form', array($this, 'folder_form')); + // kolab_addressbook plugin + $this->add_hook('addressbook_form', array($this, 'folder_form')); + $this->add_hook('calendar_form_kolab', array($this, 'folder_form')); + // Plugin actions + $this->register_action('plugin.acl', array($this, 'acl_actions')); + $this->register_action('plugin.acl-autocomplete', array($this, 'acl_autocomplete')); + } + + /** + * Handler for plugin actions (AJAX) + */ + function acl_actions() + { + $action = trim(rcube_utils::get_input_value('_act', rcube_utils::INPUT_GPC)); + + // Connect to IMAP + $this->rc->storage_init(); + + // Load localization and configuration + $this->add_texts('localization/'); + $this->load_config(); + + if ($action == 'save') { + $this->action_save(); + } + else if ($action == 'delete') { + $this->action_delete(); + } + else if ($action == 'list') { + $this->action_list(); + } + + // Only AJAX actions + $this->rc->output->send(); + } + + /** + * Handler for user login autocomplete request + */ + function acl_autocomplete() + { + $this->load_config(); + + $search = rcube_utils::get_input_value('_search', rcube_utils::INPUT_GPC, true); + $reqid = rcube_utils::get_input_value('_reqid', rcube_utils::INPUT_GPC); + $users = array(); + $keys = array(); + + if ($this->init_ldap()) { + $max = (int) $this->rc->config->get('autocomplete_max', 15); + $mode = (int) $this->rc->config->get('addressbook_search_mode'); + + $this->ldap->set_pagesize($max); + $result = $this->ldap->search('*', $search, $mode); + + foreach ($result->records as $record) { + $user = $record['uid']; + + if (is_array($user)) { + $user = array_filter($user); + $user = $user[0]; + } + + if ($user) { + $display = rcube_addressbook::compose_search_name($record); + $user = array('name' => $user, 'display' => $display); + $users[] = $user; + $keys[] = $display ?: $user['name']; + } + } + + if ($this->rc->config->get('acl_groups')) { + $prefix = $this->rc->config->get('acl_group_prefix'); + $group_field = $this->rc->config->get('acl_group_field', 'name'); + $result = $this->ldap->list_groups($search, $mode); + + foreach ($result as $record) { + $group = $record['name']; + $group_id = is_array($record[$group_field]) ? $record[$group_field][0] : $record[$group_field]; + + if ($group) { + $users[] = array('name' => ($prefix ?: '') . $group_id, 'display' => $group, 'type' => 'group'); + $keys[] = $group; + } + } + } + } + + if (count($users)) { + // sort users index + asort($keys, SORT_LOCALE_STRING); + // re-sort users according to index + foreach ($keys as $idx => $val) { + $keys[$idx] = $users[$idx]; + } + $users = array_values($keys); + } + + $this->rc->output->command('ksearch_query_results', $users, $search, $reqid); + $this->rc->output->send(); + } + + /** + * Handler for 'folder_form' hook + * + * @param array $args Hook arguments array (form data) + * + * @return array Hook arguments array + */ + function folder_form($args) + { + $mbox_imap = $args['options']['name']; + $myrights = $args['options']['rights']; + + // Edited folder name (empty in create-folder mode) + if (!strlen($mbox_imap)) { + return $args; + } +/* + // Do nothing on protected folders (?) + if ($args['options']['protected']) { + return $args; + } +*/ + // Get MYRIGHTS + if (empty($myrights)) { + return $args; + } + + // Load localization and include scripts + $this->load_config(); + $this->specials = $this->rc->config->get('acl_specials', $this->specials); + $this->add_texts('localization/', array('deleteconfirm', 'norights', + 'nouser', 'deleting', 'saving', 'newuser', 'editperms')); + $this->rc->output->add_label('save', 'cancel'); + $this->include_script('acl.js'); + $this->rc->output->include_script('list.js'); + $this->include_stylesheet($this->local_skin_path().'/acl.css'); + + // add Info fieldset if it doesn't exist + if (!isset($args['form']['props']['fieldsets']['info'])) + $args['form']['props']['fieldsets']['info'] = array( + 'name' => $this->rc->gettext('info'), + 'content' => array()); + + // Display folder rights to 'Info' fieldset + $args['form']['props']['fieldsets']['info']['content']['myrights'] = array( + 'label' => rcube::Q($this->gettext('myrights')), + 'value' => $this->acl2text($myrights) + ); + + // Return if not folder admin + if (!in_array('a', $myrights)) { + return $args; + } + + // The 'Sharing' tab + $this->mbox = $mbox_imap; + $this->rc->output->set_env('acl_users_source', (bool) $this->rc->config->get('acl_users_source')); + $this->rc->output->set_env('mailbox', $mbox_imap); + $this->rc->output->add_handlers(array( + 'acltable' => array($this, 'templ_table'), + 'acluser' => array($this, 'templ_user'), + 'aclrights' => array($this, 'templ_rights'), + )); + + $this->rc->output->set_env('autocomplete_max', (int)$this->rc->config->get('autocomplete_max', 15)); + $this->rc->output->set_env('autocomplete_min_length', $this->rc->config->get('autocomplete_min_length')); + $this->rc->output->add_label('autocompletechars', 'autocompletemore'); + + $args['form']['sharing'] = array( + 'name' => rcube::Q($this->gettext('sharing')), + 'content' => $this->rc->output->parse('acl.table', false, false), + ); + + return $args; + } + + /** + * Creates ACL rights table + * + * @param array $attrib Template object attributes + * + * @return string HTML Content + */ + function templ_table($attrib) + { + if (empty($attrib['id'])) + $attrib['id'] = 'acl-table'; + + $out = $this->list_rights($attrib); + + $this->rc->output->add_gui_object('acltable', $attrib['id']); + + return $out; + } + + /** + * Creates ACL rights form (rights list part) + * + * @param array $attrib Template object attributes + * + * @return string HTML Content + */ + function templ_rights($attrib) + { + // Get supported rights + $supported = $this->rights_supported(); + + // give plugins the opportunity to adjust this list + $data = $this->rc->plugins->exec_hook('acl_rights_supported', + array('rights' => $supported, 'folder' => $this->mbox, 'labels' => array())); + $supported = $data['rights']; + + // depending on server capability either use 'te' or 'd' for deleting msgs + $deleteright = implode(array_intersect(str_split('ted'), $supported)); + + $out = ''; + $ul = ''; + $input = new html_checkbox(); + + // Advanced rights + $attrib['id'] = 'advancedrights'; + foreach ($supported as $key => $val) { + $id = "acl$val"; + $ul .= html::tag('li', null, + $input->show('', array( + 'name' => "acl[$val]", 'value' => $val, 'id' => $id)) + . html::label(array('for' => $id, 'title' => $this->gettext('longacl'.$val)), + $this->gettext('acl'.$val))); + } + + $out = html::tag('ul', $attrib, $ul, html::$common_attrib); + + // Simple rights + $ul = ''; + $attrib['id'] = 'simplerights'; + $items = array( + 'read' => 'lrs', + 'write' => 'wi', + 'delete' => $deleteright, + 'other' => preg_replace('/[lrswi'.$deleteright.']/', '', implode($supported)), + ); + + // give plugins the opportunity to adjust this list + $data = $this->rc->plugins->exec_hook('acl_rights_simple', + array('rights' => $items, 'folder' => $this->mbox, 'labels' => array(), 'titles' => array())); + + foreach ($data['rights'] as $key => $val) { + $id = "acl$key"; + $ul .= html::tag('li', null, + $input->show('', array( + 'name' => "acl[$val]", 'value' => $val, 'id' => $id)) + . html::label(array('for' => $id, 'title' => $data['titles'][$key] ?: $this->gettext('longacl'.$key)), + $data['labels'][$key] ?: $this->gettext('acl'.$key))); + } + + $out .= "\n" . html::tag('ul', $attrib, $ul, html::$common_attrib); + + $this->rc->output->set_env('acl_items', $data['rights']); + + return $out; + } + + /** + * Creates ACL rights form (user part) + * + * @param array $attrib Template object attributes + * + * @return string HTML Content + */ + function templ_user($attrib) + { + // Create username input + $attrib['name'] = 'acluser'; + + $textfield = new html_inputfield($attrib); + + $fields['user'] = html::label(array('for' => $attrib['id']), $this->gettext('username')) + . ' ' . $textfield->show(); + + // Add special entries + if (!empty($this->specials)) { + foreach ($this->specials as $key) { + $fields[$key] = html::label(array('for' => 'id'.$key), $this->gettext($key)); + } + } + + $this->rc->output->set_env('acl_specials', $this->specials); + + // Create list with radio buttons + if (count($fields) > 1) { + $ul = ''; + $radio = new html_radiobutton(array('name' => 'usertype')); + foreach ($fields as $key => $val) { + $ul .= html::tag('li', null, $radio->show($key == 'user' ? 'user' : '', + array('value' => $key, 'id' => 'id'.$key)) + . $val); + } + + $out = html::tag('ul', array('id' => 'usertype', 'class' => $attrib['class']), $ul, html::$common_attrib); + } + // Display text input alone + else { + $out = $fields['user']; + } + + return $out; + } + + /** + * Creates ACL rights table + * + * @param array $attrib Template object attributes + * + * @return string HTML Content + */ + private function list_rights($attrib=array()) + { + // Get ACL for the folder + $acl = $this->rc->storage->get_acl($this->mbox); + + if (!is_array($acl)) { + $acl = array(); + } + + // Keep special entries (anyone/anonymous) on top of the list + if (!empty($this->specials) && !empty($acl)) { + foreach ($this->specials as $key) { + if (isset($acl[$key])) { + $acl_special[$key] = $acl[$key]; + unset($acl[$key]); + } + } + } + + // Sort the list by username + uksort($acl, 'strnatcasecmp'); + + if (!empty($acl_special)) { + $acl = array_merge($acl_special, $acl); + } + + // Get supported rights and build column names + $supported = $this->rights_supported(); + + // give plugins the opportunity to adjust this list + $data = $this->rc->plugins->exec_hook('acl_rights_supported', + array('rights' => $supported, 'folder' => $this->mbox, 'labels' => array())); + $supported = $data['rights']; + + // depending on server capability either use 'te' or 'd' for deleting msgs + $deleteright = implode(array_intersect(str_split('ted'), $supported)); + + // Use advanced or simple (grouped) rights + $advanced = $this->rc->config->get('acl_advanced_mode'); + + if ($advanced) { + $items = array(); + foreach ($supported as $sup) { + $items[$sup] = $sup; + } + } + else { + $items = array( + 'read' => 'lrs', + 'write' => 'wi', + 'delete' => $deleteright, + 'other' => preg_replace('/[lrswi'.$deleteright.']/', '', implode($supported)), + ); + + // give plugins the opportunity to adjust this list + $data = $this->rc->plugins->exec_hook('acl_rights_simple', + array('rights' => $items, 'folder' => $this->mbox, 'labels' => array())); + $items = $data['rights']; + } + + // Create the table + $attrib['noheader'] = true; + $table = new html_table($attrib); + + // Create table header + $table->add_header('user', $this->gettext('identifier')); + foreach (array_keys($items) as $key) { + $label = $data['labels'][$key] ?: $this->gettext('shortacl'.$key); + $table->add_header(array('class' => 'acl'.$key, 'title' => $label), $label); + } + + $js_table = array(); + foreach ($acl as $user => $rights) { + if ($this->rc->storage->conn->user == $user) { + continue; + } + + // filter out virtual rights (c or d) the server may return + $userrights = array_intersect($rights, $supported); + $userid = rcube_utils::html_identifier($user); + + if (!empty($this->specials) && in_array($user, $this->specials)) { + $user = $this->gettext($user); + } + + $table->add_row(array('id' => 'rcmrow'.$userid)); + $table->add('user', html::a(array('id' => 'rcmlinkrow'.$userid), rcube::Q($user))); + + foreach ($items as $key => $right) { + $in = $this->acl_compare($userrights, $right); + switch ($in) { + case 2: $class = 'enabled'; break; + case 1: $class = 'partial'; break; + default: $class = 'disabled'; break; + } + $table->add('acl' . $key . ' ' . $class, ''); + } + + $js_table[$userid] = implode($userrights); + } + + $this->rc->output->set_env('acl', $js_table); + $this->rc->output->set_env('acl_advanced', $advanced); + + $out = $table->show(); + + return $out; + } + + /** + * Handler for ACL update/create action + */ + private function action_save() + { + $mbox = trim(rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST, true)); // UTF7-IMAP + $user = trim(rcube_utils::get_input_value('_user', rcube_utils::INPUT_POST)); + $acl = trim(rcube_utils::get_input_value('_acl', rcube_utils::INPUT_POST)); + $oldid = trim(rcube_utils::get_input_value('_old', rcube_utils::INPUT_POST)); + + $acl = array_intersect(str_split($acl), $this->rights_supported()); + $users = $oldid ? array($user) : explode(',', $user); + $result = 0; + + foreach ($users as $user) { + $user = trim($user); + $prefix = $this->rc->config->get('acl_groups') ? $this->rc->config->get('acl_group_prefix') : ''; + + if ($prefix && strpos($user, $prefix) === 0) { + $username = $user; + } + else if (!empty($this->specials) && in_array($user, $this->specials)) { + $username = $this->gettext($user); + } + else if (!empty($user)) { + if (!strpos($user, '@') && ($realm = $this->get_realm())) { + $user .= '@' . rcube_utils::idn_to_ascii(preg_replace('/^@/', '', $realm)); + } + $username = $user; + } + + if (!$acl || !$user || !strlen($mbox)) { + continue; + } + + $user = $this->mod_login($user); + $username = $this->mod_login($username); + + if ($user != $_SESSION['username'] && $username != $_SESSION['username']) { + if ($this->rc->storage->set_acl($mbox, $user, $acl)) { + $ret = array('id' => rcube_utils::html_identifier($user), + 'username' => $username, 'acl' => implode($acl), 'old' => $oldid); + $this->rc->output->command('acl_update', $ret); + $result++; + } + } + } + + if ($result) { + $this->rc->output->show_message($oldid ? 'acl.updatesuccess' : 'acl.createsuccess', 'confirmation'); + } + else { + $this->rc->output->show_message($oldid ? 'acl.updateerror' : 'acl.createerror', 'error'); + } + } + + /** + * Handler for ACL delete action + */ + private function action_delete() + { + $mbox = trim(rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST, true)); //UTF7-IMAP + $user = trim(rcube_utils::get_input_value('_user', rcube_utils::INPUT_POST)); + + $user = explode(',', $user); + + foreach ($user as $u) { + $u = trim($u); + if ($this->rc->storage->delete_acl($mbox, $u)) { + $this->rc->output->command('acl_remove_row', rcube_utils::html_identifier($u)); + } + else { + $error = true; + } + } + + if (!$error) { + $this->rc->output->show_message('acl.deletesuccess', 'confirmation'); + } + else { + $this->rc->output->show_message('acl.deleteerror', 'error'); + } + } + + /** + * Handler for ACL list update action (with display mode change) + */ + private function action_list() + { + if (in_array('acl_advanced_mode', (array)$this->rc->config->get('dont_override'))) { + return; + } + + $this->mbox = trim(rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_GPC, true)); // UTF7-IMAP + $advanced = trim(rcube_utils::get_input_value('_mode', rcube_utils::INPUT_GPC)); + $advanced = $advanced == 'advanced'; + + // Save state in user preferences + $this->rc->user->save_prefs(array('acl_advanced_mode' => $advanced)); + + $out = $this->list_rights(); + + $out = preg_replace(array('/^]+>/', '/<\/table>$/'), '', $out); + + $this->rc->output->command('acl_list_update', $out); + } + + /** + * Creates
    list with descriptive access rights + * + * @param array $rights MYRIGHTS result + * + * @return string HTML content + */ + function acl2text($rights) + { + if (empty($rights)) { + return ''; + } + + $supported = $this->rights_supported(); + $list = array(); + $attrib = array( + 'name' => 'rcmyrights', + 'style' => 'margin:0; padding:0 15px;', + ); + + foreach ($supported as $right) { + if (in_array($right, $rights)) { + $list[] = html::tag('li', null, rcube::Q($this->gettext('acl' . $right))); + } + } + + if (count($list) == count($supported)) + return rcube::Q($this->gettext('aclfull')); + + return html::tag('ul', $attrib, implode("\n", $list)); + } + + /** + * Compares two ACLs (according to supported rights) + * + * @param array $acl1 ACL rights array (or string) + * @param array $acl2 ACL rights array (or string) + * + * @param int Comparision result, 2 - full match, 1 - partial match, 0 - no match + */ + function acl_compare($acl1, $acl2) + { + if (!is_array($acl1)) $acl1 = str_split($acl1); + if (!is_array($acl2)) $acl2 = str_split($acl2); + + $rights = $this->rights_supported(); + + $acl1 = array_intersect($acl1, $rights); + $acl2 = array_intersect($acl2, $rights); + $res = array_intersect($acl1, $acl2); + + $cnt1 = count($res); + $cnt2 = count($acl2); + + if ($cnt1 == $cnt2) + return 2; + else if ($cnt1) + return 1; + else + return 0; + } + + /** + * Get list of supported access rights (according to RIGHTS capability) + * + * @return array List of supported access rights abbreviations + */ + function rights_supported() + { + if ($this->supported !== null) { + return $this->supported; + } + + $capa = $this->rc->storage->get_capability('RIGHTS'); + + if (is_array($capa)) { + $rights = strtolower($capa[0]); + } + else { + $rights = 'cd'; + } + + return $this->supported = str_split('lrswi' . $rights . 'pa'); + } + + /** + * Username realm detection. + * + * @return string Username realm (domain) + */ + private function get_realm() + { + // When user enters a username without domain part, realm + // allows to add it to the username (and display correct username in the table) + + if (isset($_SESSION['acl_username_realm'])) { + return $_SESSION['acl_username_realm']; + } + + // find realm in username of logged user (?) + list($name, $domain) = explode('@', $_SESSION['username']); + + // Use (always existent) ACL entry on the INBOX for the user to determine + // whether or not the user ID in ACL entries need to be qualified and how + // they would need to be qualified. + if (empty($domain)) { + $acl = $this->rc->storage->get_acl('INBOX'); + if (is_array($acl)) { + $regexp = '/^' . preg_quote($_SESSION['username'], '/') . '@(.*)$/'; + foreach (array_keys($acl) as $name) { + if (preg_match($regexp, $name, $matches)) { + $domain = $matches[1]; + break; + } + } + } + } + + return $_SESSION['acl_username_realm'] = $domain; + } + + /** + * Initializes autocomplete LDAP backend + */ + private function init_ldap() + { + if ($this->ldap) { + return $this->ldap->ready; + } + + // get LDAP config + $config = $this->rc->config->get('acl_users_source'); + + if (empty($config)) { + return false; + } + + // not an array, use configured ldap_public source + if (!is_array($config)) { + $ldap_config = (array) $this->rc->config->get('ldap_public'); + $config = $ldap_config[$config]; + } + + $uid_field = $this->rc->config->get('acl_users_field', 'mail'); + $filter = $this->rc->config->get('acl_users_filter'); + + if (empty($uid_field) || empty($config)) { + return false; + } + + // get name attribute + if (!empty($config['fieldmap'])) { + $name_field = $config['fieldmap']['name']; + } + // ... no fieldmap, use the old method + if (empty($name_field)) { + $name_field = $config['name_field']; + } + + // add UID field to fieldmap, so it will be returned in a record with name + $config['fieldmap']['name'] = $name_field; + $config['fieldmap']['uid'] = $uid_field; + + // search in UID and name fields + // $name_field can be in a form of : (#1490591) + $name_field = preg_replace('/:.*$/', '', $name_field); + $search = array_unique(array($name_field, $uid_field)); + + $config['search_fields'] = $search; + $config['required_fields'] = array($uid_field); + + // set search filter + if ($filter) { + $config['filter'] = $filter; + } + + // disable vlv + $config['vlv'] = false; + + // Initialize LDAP connection + $this->ldap = new rcube_ldap($config, + $this->rc->config->get('ldap_debug'), + $this->rc->config->mail_domain($_SESSION['imap_host'])); + + return $this->ldap->ready; + } + + /** + * Modify user login according to 'login_lc' setting + */ + protected function mod_login($user) + { + $login_lc = $this->rc->config->get('login_lc'); + + if ($login_lc === true || $login_lc == 2) { + $user = mb_strtolower($user); + } + // lowercase domain name + else if ($login_lc && strpos($user, '@')) { + list($local, $domain) = explode('@', $user); + $user = $local . '@' . mb_strtolower($domain); + } + + return $user; + } +} diff --git a/data/web/rc/plugins/acl/composer.json b/data/web/rc/plugins/acl/composer.json new file mode 100644 index 00000000..aa87f543 --- /dev/null +++ b/data/web/rc/plugins/acl/composer.json @@ -0,0 +1,24 @@ +{ + "name": "roundcube/acl", + "type": "roundcube-plugin", + "description": "IMAP Folders Access Control Lists Management (RFC4314, RFC2086).", + "license": "GPLv3+", + "version": "1.6", + "authors": [ + { + "name": "Aleksander Machniak", + "email": "alec@alec.pl", + "role": "Lead" + } + ], + "repositories": [ + { + "type": "composer", + "url": "http://plugins.roundcube.net" + } + ], + "require": { + "php": ">=5.3.0", + "roundcube/plugin-installer": ">=0.1.3" + } +} diff --git a/data/web/rc/plugins/acl/config.inc.php.dist b/data/web/rc/plugins/acl/config.inc.php.dist new file mode 100644 index 00000000..ed700026 --- /dev/null +++ b/data/web/rc/plugins/acl/config.inc.php.dist @@ -0,0 +1,33 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'مشارŮŘ©'; +$labels['myrights'] = 'Ř­Ů‚ŮŮ‚ الŮصŮŮ„'; +$labels['username'] = 'مستخدم:'; +$labels['advanced'] = 'Ůضع Ů…ŘŞŮ‚ŘŻŮ…'; +$labels['newuser'] = 'اضاŮŘ© مدخل'; +$labels['editperms'] = 'تعديل الصلاحيات'; +$labels['actions'] = 'اجراءات Ř­Ů‚ŮŮ‚ الŮصŮŮ„...'; +$labels['anyone'] = 'ŮŮ„ المستخدمين(اي شخص)'; +$labels['anonymous'] = 'ضي٠(مجهŮŮ„)'; +$labels['identifier'] = 'معرŮ'; +$labels['acll'] = 'بحث'; +$labels['aclr'] = 'قراءة الرسائل'; +$labels['acls'] = 'ابقاء حالة الزيارة'; +$labels['aclw'] = 'اŮتب رمز'; +$labels['acli'] = 'ادخل (نسخ الى)'; +$labels['aclp'] = 'نشر'; +$labels['aclc'] = 'إنشاء مجلدات Ůرعية'; +$labels['aclk'] = 'إنشاء مجلدات Ůرعية'; +$labels['acld'] = 'حذ٠الرسائل'; +$labels['aclt'] = 'حذ٠الرسائل'; +$labels['acle'] = 'Ř­ŮŹŘ°Ů'; +$labels['aclx'] = 'حذ٠المجلد'; +$labels['acla'] = 'ادارة'; +$labels['aclfull'] = 'ŘŞŘ­ŮŮ… Ůامل'; +$labels['aclother'] = 'اخرى'; +$labels['aclread'] = 'قراءة '; +$labels['aclwrite'] = 'Ůتابة'; +$labels['acldelete'] = 'Ř­Ř°Ů'; +$labels['shortacll'] = 'بحث'; +$labels['shortaclr'] = 'قراءة '; +$labels['shortacls'] = 'ابقاء'; +$labels['shortaclw'] = 'قراءة'; +$labels['shortacli'] = 'ادراج'; +$labels['shortaclp'] = 'نشر'; +$labels['shortaclc'] = 'أنشئ'; +$labels['shortaclk'] = 'أنشئ'; +$labels['shortacld'] = 'Ř­Ř°Ů'; +$labels['shortaclt'] = 'Ř­Ř°Ů'; +$labels['shortacle'] = 'Ř­ŮŹŘ°Ů'; +$labels['shortaclx'] = 'حذ٠المجلد'; +$labels['shortacla'] = 'ادارة'; +$labels['shortaclother'] = 'اخرى'; +$labels['shortaclread'] = 'قراءة '; +$labels['shortaclwrite'] = 'Ůتابة'; +$labels['shortacldelete'] = 'Ř­Ř°Ů'; +$labels['longacll'] = 'المجلد مرئي ŮŮŠ القائمة ŮبالامŮان ايضا الاشتراŮ'; +$labels['longaclr'] = 'من الممŮن ŮŘŞŘ­ المجلد للقراءة'; +$labels['longacls'] = 'Ůسم الزيارة ŮŮŠ الرسائل بالامŮان تغييره'; +$labels['longaclw'] = 'Ůسم ŮالŮلمات الرئيسية ŮŮŠ الرسائل ŮŠŮ…Ůن تغييره, ماعدا الزيارة Ůالحذ٠'; +$labels['longacli'] = 'بالامŮان Ůتابة الرسائل Ůنسخها الى هذا المجلد'; +$labels['longaclp'] = 'بالامŮان نشر الرسائل الى هذ المجلد'; +$labels['longaclc'] = 'بالامŮان انشاء المجلدات ( ا٠اعادة التسمية ) مباشرة ŘŞŘ­ŘŞ هذا المجلد'; +$labels['longaclk'] = 'بالامŮان انشاء المجلدات ( ا٠اعادة التسمية ) مباشرة ŘŞŘ­ŘŞ هذا المجلد'; +$labels['longacld'] = 'Ř­Ř°Ů Ůسم الرسائل من الممŮن تغييرة'; +$labels['longaclt'] = 'Ř­Ř°Ů Ůسم الرسائل من الممŮن تغييرة'; +$labels['longacle'] = 'بالامŮان شطب الرسائل'; +$labels['longaclx'] = 'هذا المجلد بالامŮان Ř­Ř°ŮŘ© ا٠اعادة تسميته'; +$labels['longacla'] = 'Ř­Ů‚ŮŮ‚ الŮصŮŮ„ لهذا المجلد بالامŮان تغييره'; +$labels['longaclfull'] = 'التحŮŮ… الŮامل يتضمن ادارة المجلدات'; +$labels['longaclread'] = 'من الممŮن ŮŘŞŘ­ المجلد للقراءة'; +$labels['longaclwrite'] = 'لا ŮŠŮ…Ůن Ůضع علامة على الرسائل, Ůتبت ا٠نسخة الى هذا المجلد'; +$labels['longacldelete'] = 'لا ŮŠŮ…Ůن حذ٠الرسائل'; +$messages['deleting'] = 'جاري Ř­Ř°Ů Ř­Ů‚ŮŮ‚ الŮصŮŮ„...'; +$messages['saving'] = 'جاري Ř­Ůظ Ř­Ů‚ŮŮ‚ الŮصŮŮ„...'; +$messages['updatesuccess'] = 'ŘŞŮ… تغيير Ř­Ů‚ŮŮ‚ الŮصŮŮ„ بنجاح'; +$messages['deletesuccess'] = 'ŘŞŮ… Ř­Ř°Ů Ř­Ů‚ŮŮ‚ الŮصŮŮ„ بنجاح'; +$messages['createsuccess'] = 'ŘŞŮ… اضاŮŘ© Ř­Ů‚ŮŮ‚ الŮصŮŮ„ بنجاح'; +$messages['updateerror'] = 'لا ŮŠŮ…Ůن ŘŞŘ­ŘŻŮŠŘ« Ř­Ů‚ŮŮ‚ الŮصŮŮ„'; +$messages['deleteerror'] = 'لا ŮŠŮ…Ůن Ř­Ř°Ů Ř­Ů‚ŮŮ‚ الŮصŮŮ„'; +$messages['createerror'] = 'لا ŮŠŮ…Ůن اضاŮŘ© Ř­Ů‚ŮŮ‚ الŮصŮŮ„'; +$messages['deleteconfirm'] = 'هل تريد Ůعلاً Ř­Ř°Ů Ř­Ů‚ŮŮ‚ الŮصŮŮ„ Ů„Ů€ المستخدمين المحددين Řź'; +$messages['norights'] = 'Ů„Ů… ŮŠŘŞŮ… ŘŞŘ­ŘŻŮŠŘŻ Ř­Ů‚ŮŮ‚ ŮصŮŮ„!'; +$messages['nouser'] = 'Ů„Ů… ŮŠŘŞŮ… ŘŞŘ­ŘŻŮŠŘŻ اسم مستخدم!'; +?> diff --git a/data/web/rc/plugins/acl/localization/ast.inc b/data/web/rc/plugins/acl/localization/ast.inc new file mode 100644 index 00000000..2932d3bd --- /dev/null +++ b/data/web/rc/plugins/acl/localization/ast.inc @@ -0,0 +1,80 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'ComparticiĂłn'; +$labels['myrights'] = 'Drechos d\'accesu'; +$labels['username'] = 'Usuariu:'; +$labels['advanced'] = 'Mou avanzáu'; +$labels['newuser'] = 'Amestar entrada'; +$labels['editperms'] = 'Editar permisos'; +$labels['actions'] = 'AiciĂłn de drechos d\'accesu...'; +$labels['anyone'] = 'Tolos usuarios (toos)'; +$labels['anonymous'] = 'Convidaos (anĂłnimos)'; +$labels['identifier'] = 'Identificador'; +$labels['acll'] = 'Guetar'; +$labels['aclr'] = 'Lleer mensaxes'; +$labels['acls'] = 'Estáu Caltener Vistu'; +$labels['aclw'] = 'Escribir banderes'; +$labels['acli'] = 'Inxertar (copiar a)'; +$labels['aclc'] = 'Crear subcarpetes'; +$labels['aclk'] = 'Crear subcarpetes'; +$labels['acld'] = 'Desaniciar mensaxes'; +$labels['aclt'] = 'Desaniciar mensaxes'; +$labels['acle'] = 'Desanciar'; +$labels['aclx'] = 'Desaniciar carpeta'; +$labels['acla'] = 'Alministrar'; +$labels['aclfull'] = 'Control total'; +$labels['aclother'] = 'Otru'; +$labels['aclread'] = 'Lleer'; +$labels['aclwrite'] = 'Escribir'; +$labels['acldelete'] = 'Desaniciar'; +$labels['shortacll'] = 'Guetar'; +$labels['shortaclr'] = 'Lleer'; +$labels['shortacls'] = 'Caltener'; +$labels['shortaclw'] = 'Escribir'; +$labels['shortacli'] = 'Inxertar'; +$labels['shortaclc'] = 'Crear'; +$labels['shortaclk'] = 'Crear'; +$labels['shortacld'] = 'Desaniciar'; +$labels['shortaclt'] = 'Desaniciar'; +$labels['shortacle'] = 'Desaniciar'; +$labels['shortaclx'] = 'Desaniciu de carpeta'; +$labels['shortacla'] = 'Alministrar'; +$labels['shortaclother'] = 'Otru'; +$labels['shortaclread'] = 'Lleer'; +$labels['shortaclwrite'] = 'Escribir'; +$labels['shortacldelete'] = 'Desaniciar'; +$labels['longacll'] = 'La carpeta ye visible nes llistes y pue soscribise a'; +$labels['longaclr'] = 'La carpeta nun pue abrise pa leer'; +$labels['longaclx'] = 'La carpeta pue desaniciase o renomase'; +$labels['longacla'] = 'Puen camudase los drechos d\'accesu de la carpeta'; +$labels['longaclfull'] = 'Control completu incluyendo l\'alminitraciĂłn de carpeta'; +$labels['longaclread'] = 'La carpeta pue abrise pa llectura'; +$labels['longaclwrite'] = 'Los mensaxes puen conseñase, escribise o copiase a la carpeta'; +$labels['longacldelete'] = 'Los mensaxes puen desaniciase'; +$labels['longaclother'] = 'Otros drechos d\'accesu'; +$labels['ariasummaryacltable'] = 'Llista de drechos d\'accesu'; +$messages['deleting'] = 'Desaniciando los drechos d\'accesu...'; +$messages['saving'] = 'Guardando los drechos d\'accesu...'; +$messages['updatesuccess'] = 'Camudaos con Ă©situ los drechos d\'accesu'; +$messages['deletesuccess'] = 'Desaniciaos con Ă©situ los drechos d\'accesu'; +$messages['createsuccess'] = 'Amestaos con Ă©situ los drechos d\'accesu'; +$messages['updateerror'] = 'Nun puen anovase los drechos d\'accesu'; +$messages['deleteerror'] = 'Nun puen desaniciase los drechos d\'accesu'; +$messages['createerror'] = 'Nun puen amestase los drechos d\'accesu'; +$messages['deleteconfirm'] = 'ÂżDe xuru quies desaniciar los drechos d\'accesu al(a los) usuariu(os) esbilláu(os)?'; +?> diff --git a/data/web/rc/plugins/acl/localization/az_AZ.inc b/data/web/rc/plugins/acl/localization/az_AZ.inc new file mode 100644 index 00000000..9bf23d4f --- /dev/null +++ b/data/web/rc/plugins/acl/localization/az_AZ.inc @@ -0,0 +1,91 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'PaylaĹźma'; +$labels['myrights'] = 'GiriĹź hĂĽququ'; +$labels['username'] = 'Ä°stifadəçi:'; +$labels['advanced'] = 'Ekspert rejimi'; +$labels['newuser'] = 'SahÉ™ É™lavÉ™ et'; +$labels['editperms'] = 'Cavabları redaktÉ™ et'; +$labels['actions'] = 'GiriĹź hĂĽququ ilÉ™ hÉ™rÉ™kÉ™t...'; +$labels['anyone'] = 'BĂĽtĂĽn istifadəçilÉ™r (istÉ™nilÉ™n)'; +$labels['anonymous'] = 'Qonaqlar (anonimlÉ™r)'; +$labels['identifier'] = 'Ä°dentifikator'; +$labels['acll'] = 'Baxış'; +$labels['aclr'] = 'MÉ™ktubu oxu'; +$labels['acls'] = 'Oxunulan kimi saxla'; +$labels['aclw'] = 'Yazı bayrağı'; +$labels['acli'] = 'ĆŹlavÉ™ et (kopyala)'; +$labels['aclp'] = 'Yazı'; +$labels['aclc'] = 'Qovluqaltı yarat'; +$labels['aclk'] = 'Qovluqaltı yarat'; +$labels['acld'] = 'MÉ™ktubu sil'; +$labels['aclt'] = 'MÉ™ktubu sil'; +$labels['acle'] = 'Poz'; +$labels['aclx'] = 'QovluÄźu sil'; +$labels['acla'] = 'Ä°darÉ™'; +$labels['aclfull'] = 'Tam idarÉ™'; +$labels['aclother'] = 'DigÉ™r'; +$labels['aclread'] = 'Oxu'; +$labels['aclwrite'] = 'Yaz'; +$labels['acldelete'] = 'Sil'; +$labels['shortacll'] = 'Baxış'; +$labels['shortaclr'] = 'Oxu'; +$labels['shortacls'] = 'Saxla'; +$labels['shortaclw'] = 'Yaz'; +$labels['shortacli'] = 'Yerləşdir'; +$labels['shortaclp'] = 'Yazı'; +$labels['shortaclc'] = 'Yarat'; +$labels['shortaclk'] = 'Yarat'; +$labels['shortacld'] = 'Sil'; +$labels['shortaclt'] = 'Sil'; +$labels['shortacle'] = 'Poz'; +$labels['shortaclx'] = 'QovluÄźun silinmÉ™si'; +$labels['shortacla'] = 'Ä°darÉ™'; +$labels['shortaclother'] = 'DigÉ™r'; +$labels['shortaclread'] = 'Oxu'; +$labels['shortaclwrite'] = 'Yaz'; +$labels['shortacldelete'] = 'Sil'; +$labels['longacll'] = 'Qovluq siyahıda görĂĽnĂĽr vÉ™ yazılmaÄźa hazırdır'; +$labels['longaclr'] = 'Bu qovluq oxunmaq üçün açıla bilÉ™r'; +$labels['longacls'] = 'Oxunulan flaqı dÉ™yiĹźdirilÉ™ bilÉ™r'; +$labels['longaclw'] = 'Oxunulan vÉ™ silinÉ™nlÉ™rdÉ™n baĹźqa flaqlar vÉ™ açar sözlÉ™ri dÉ™yiĹźdirilÉ™ bilÉ™r'; +$labels['longacli'] = 'MÉ™ktub qovluÄźa yazıla vÉ™ ya saxlanıla bilÉ™r'; +$labels['longaclp'] = 'MÉ™ktub bu qovluÄźa göndÉ™rilÉ™ bilÉ™r'; +$labels['longaclc'] = 'Qovluqaltları bu qovluqda yaradıla vÉ™ ya adı dÉ™yiĹźdirilÉ™ bilÉ™r'; +$labels['longaclk'] = 'Qovluqaltları bu qovluqda yaradıla vÉ™ ya adı dÉ™yiĹźdirilÉ™ bilÉ™r'; +$labels['longacld'] = 'SilinÉ™n flaqı dÉ™yiĹźdirilÉ™ bilÉ™r'; +$labels['longaclt'] = 'SilinÉ™n flaqı dÉ™yiĹźdirilÉ™ bilÉ™r'; +$labels['longacle'] = 'MÉ™ktublar pozula bilÉ™r'; +$labels['longaclx'] = 'Bu qovluq silinÉ™ vÉ™ ya adı dÉ™yiĹźdirilÉ™ bilÉ™r'; +$labels['longacla'] = 'Bu qovluÄźa giriĹź hĂĽququ dÉ™yiĹźdirilÉ™ bilÉ™r'; +$labels['longaclfull'] = 'QovluÄźun idarÉ™si ilÉ™ birlikdÉ™, tam giriĹź.'; +$labels['longaclread'] = 'Bu qovluq oxunmaq üçün açıla bilÉ™r'; +$labels['longaclwrite'] = 'MÉ™ktubu bu qovluÄźa qeyd etmÉ™k, yazmaq vÉ™ kopyalamaq olar'; +$labels['longacldelete'] = 'MÉ™ktubu silmÉ™k olar'; +$messages['deleting'] = 'GiriĹź hĂĽququnun silinmÉ™si...'; +$messages['saving'] = 'GiriĹź hĂĽququnun saxlanılması...'; +$messages['updatesuccess'] = 'GiriĹź hĂĽququ dÉ™yiĹźdirildi'; +$messages['deletesuccess'] = 'GiriĹź hĂĽququ silindi'; +$messages['createsuccess'] = 'GiriĹź hĂĽququ É™lavÉ™ edildi'; +$messages['updateerror'] = 'HĂĽquqları yenilÉ™mÉ™k alınmadı'; +$messages['deleteerror'] = 'GiriĹź hĂĽququnu silmÉ™k mĂĽmkĂĽn deyil'; +$messages['createerror'] = 'GiriĹź hĂĽququnu É™lavÉ™ etmÉ™k mĂĽmkĂĽn deyil'; +$messages['deleteconfirm'] = 'SeçilmiĹź istifadəçilÉ™rin giriĹź hĂĽququnu silmÉ™kdÉ™ É™minsiniz?'; +$messages['norights'] = 'GiriĹź hĂĽquqları göstÉ™rilmÉ™yib!'; +$messages['nouser'] = 'Ä°stifadəçi adı tÉ™yin olunmayıb!'; +?> diff --git a/data/web/rc/plugins/acl/localization/be_BE.inc b/data/web/rc/plugins/acl/localization/be_BE.inc new file mode 100644 index 00000000..4aac05b6 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/be_BE.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'СŃмеŃны Đ´ĐľŃŃ‚ŃĐż'; +$labels['myrights'] = 'Правы Đ´ĐľŃŃ‚ŃĐżŃ'; +$labels['username'] = 'КарыŃтальнік:'; +$labels['advanced'] = 'ПаŃыраны рэжым'; +$labels['newuser'] = 'Дадаць запіŃ'; +$labels['editperms'] = 'Рэдагаваць правы Đ´ĐľŃŃ‚ŃĐżŃ'; +$labels['actions'] = 'Дзеянні Đ· правамі Đ´ĐľŃŃ‚ŃĐżŃ...'; +$labels['anyone'] = 'ĐŁŃе карыŃтальнікі (любыя)'; +$labels['anonymous'] = 'Đ“ĐľŃці (ананімныя)'; +$labels['identifier'] = 'Ідэнтыфікатар'; +$labels['acll'] = 'ПоŃŃĐş'; +$labels['aclr'] = 'Прачытаць паведамленні'; +$labels['acls'] = 'ПакінŃць ŃŃ‚Đ°Đ˝ Бачанае'; +$labels['aclw'] = 'Флагі запіŃвання'; +$labels['acli'] = 'ĐŁŃтавіць (капіраваць Ń)'; +$labels['aclp'] = 'Đдправіць'; +$labels['aclc'] = 'Стварыць Ńкладзеныя папкі'; +$labels['aclk'] = 'Стварыць Ńкладзеныя папкі'; +$labels['acld'] = 'Выдаліць паведамленні'; +$labels['aclt'] = 'Выдаліць паведамленні'; +$labels['acle'] = 'ЗніŃчыць паведамленні'; +$labels['aclx'] = 'Выдаліць папкŃ'; +$labels['acla'] = 'ĐдмініŃтраваць'; +$labels['acln'] = 'Đнатаваць паведамленні'; +$labels['aclfull'] = 'Поўны Đ´ĐľŃŃ‚ŃĐż'; +$labels['aclother'] = 'ІнŃае'; +$labels['aclread'] = 'Чытанне'; +$labels['aclwrite'] = 'ЗапіŃ'; +$labels['acldelete'] = 'Выдаленне'; +$labels['shortacll'] = 'ПоŃŃĐş'; +$labels['shortaclr'] = 'Чытанне'; +$labels['shortacls'] = 'ПакінŃць'; +$labels['shortaclw'] = 'ЗапіŃванне'; +$labels['shortacli'] = 'Даданне'; +$labels['shortaclp'] = 'Đдпраўленне'; +$labels['shortaclc'] = 'Стварэнне'; +$labels['shortaclk'] = 'Стварэнне'; +$labels['shortacld'] = 'Выдаленне'; +$labels['shortaclt'] = 'Выдаленне'; +$labels['shortacle'] = 'ЗніŃчэнне'; +$labels['shortaclx'] = 'Выдаленне папкі'; +$labels['shortacla'] = 'ĐдмініŃтраванне'; +$labels['shortacln'] = 'Đнатаваць'; +$labels['shortaclother'] = 'ІнŃае'; +$labels['shortaclread'] = 'Чытанне'; +$labels['shortaclwrite'] = 'ЗапіŃ'; +$labels['shortacldelete'] = 'Выдаленне'; +$labels['longacll'] = 'ĐźĐ°ĐżĐşŃ ĐĽĐľĐ¶Đ˝Đ° пабачыць Ń ŃпіŃĐ°Ń… Ń– падпіŃацца на яе'; +$labels['longaclr'] = 'ĐźĐ°ĐżĐşŃ ĐĽĐľĐ¶Đ˝Đ° адкрыць для чытання'; +$labels['longacls'] = 'На паведамленнях можна пераключаць флаг Бачанае'; +$labels['longaclw'] = 'На паведамленнях можна мяняць ключавыя Ńловы Ń– пераключаць флагі, апроч Бачанае Ń– Выдаленае'; +$labels['longacli'] = 'Паведамленні могŃць быць запіŃаныя альбо Ńкапіяваныя Ńž папкŃ'; +$labels['longaclp'] = 'Паведамленні могŃць быць адпраўленыя Ńž гэтŃŃŽ папкŃ'; +$labels['longaclc'] = 'Папкі могŃць быць Ńтвораны (альбо перайменаваны) наўпроŃŃ‚ пад гэтай папкай'; +$labels['longaclk'] = 'Папкі могŃць быць Ńтвораны (альбо перайменаваны) наўпроŃŃ‚ пад гэтай папкай'; +$labels['longacld'] = 'На паведамленнях можна пераключаць флаг Выдаленае'; +$labels['longaclt'] = 'На паведамленнях можна пераключаць флаг Выдаленае'; +$labels['longacle'] = 'Паведамленні могŃць быць зніŃчаны'; +$labels['longaclx'] = 'ĐźĐ°ĐżĐşŃ ĐĽĐľĐ¶Đ˝Đ° выдаліць альбо перайменаваць'; +$labels['longacla'] = 'Правы Đ´ĐľŃŃ‚ŃĐżŃ Đ˝Đ° ĐżĐ°ĐżĐşŃ ĐĽĐľĐ¶Đ˝Đ° змяняць'; +$labels['longacln'] = 'Đнатацыі паведамленняў (ŃŃпольныя метаданыя) можна змяняць'; +$labels['longaclfull'] = 'Поўны Đ´ĐľŃŃ‚ŃĐż, Ńключна Đ· Đ°Đ´ĐĽŃ–Đ˝Ńтраваннем папкі'; +$labels['longaclread'] = 'ĐźĐ°ĐżĐşŃ ĐĽĐľĐ¶Đ˝Đ° адкрыць для чытання'; +$labels['longaclwrite'] = 'Паведамленні могŃць быць пазначаныя, запіŃаныя альбо Ńкапіяваныя Ńž папкŃ'; +$labels['longacldelete'] = 'Паведамленні можна выдаліць'; +$labels['longaclother'] = 'ІнŃŃ‹ŃŹ правы Đ´ĐľŃŃ‚ŃĐżŃ'; +$labels['ariasummaryacltable'] = 'ĐˇĐżŃ–Ń ĐżŃ€Đ°Đ˛ĐľŃž Đ´ĐľŃŃ‚ŃĐżŃ'; +$labels['arialabelaclactions'] = 'ĐˇĐżŃ–Ń Đ´Đ·ĐµŃŹĐ˝Đ˝ŃŹŃž'; +$labels['arialabelaclform'] = 'Форма правоў Đ´ĐľŃŃ‚ŃĐżŃ'; +$messages['deleting'] = 'Правы Đ´ĐľŃŃ‚ŃĐżŃ Đ˛Ń‹Đ´Đ°Đ»ŃŹŃŽŃ†Ń†Đ°...'; +$messages['saving'] = 'Правы Đ´ĐľŃŃ‚ŃĐżŃ Đ·Đ°Ń…ĐľŃžĐ˛Đ°ŃŽŃ†Ń†Đ°...'; +$messages['updatesuccess'] = 'Правы Đ´ĐľŃŃ‚ŃĐżŃ Đ·ĐĽĐµĐ˝ĐµĐ˝Ń‹'; +$messages['deletesuccess'] = 'Правы Đ´ĐľŃŃ‚ŃĐżŃ Đ˛Ń‹Đ´Đ°Đ»ĐµĐ˝Ń‹'; +$messages['createsuccess'] = 'Правы Đ´ĐľŃŃ‚ŃĐżŃ Đ´Đ°Đ´Đ°Đ´Đ·ĐµĐ˝Ń‹'; +$messages['updateerror'] = 'Не ўдалоŃŃŹ абнавіць правы Đ´ĐľŃŃ‚ŃĐżŃ'; +$messages['deleteerror'] = 'Не ўдалоŃŃŹ выдаліць правы Đ´ĐľŃŃ‚ŃĐżŃ'; +$messages['createerror'] = 'Не ўдалоŃŃŹ дадаць правы Đ´ĐľŃŃ‚ŃĐżŃ'; +$messages['deleteconfirm'] = 'ĐťĐ°ĐżŃ€Đ°ŃžĐ´Ń Đ˛Ń‹Đ´Đ°Đ»Ń–Ń†ŃŚ правы Đ´ĐľŃŃ‚ŃĐżŃ Đ´Đ»ŃŹ вылŃчанага карыŃтальніка(Ńž)?'; +$messages['norights'] = 'Жадных правоў не зададзена!'; +$messages['nouser'] = 'Жадных імёнаў карыŃтальнікаў не зададзена!'; +?> diff --git a/data/web/rc/plugins/acl/localization/bg_BG.inc b/data/web/rc/plugins/acl/localization/bg_BG.inc new file mode 100644 index 00000000..ac4f4e75 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/bg_BG.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Споделяне'; +$labels['myrights'] = 'Права Đ·Đ° Đ´ĐľŃŃ‚ŃŠĐż'; +$labels['username'] = 'Потребител:'; +$labels['advanced'] = 'Đ Đ°Đ·Ńирен режим'; +$labels['newuser'] = 'Добавяне на запиŃ'; +$labels['editperms'] = 'Редакция на права'; +$labels['actions'] = 'ДейŃтвия на права Đ·Đ° Đ´ĐľŃŃ‚ŃŠĐż...'; +$labels['anyone'] = 'Đ’Ńички потребители (който и Đ´Đ° е)'; +$labels['anonymous'] = 'Đ“ĐľŃти (анонимни)'; +$labels['identifier'] = 'Đндентификатор'; +$labels['acll'] = 'ПретърŃване'; +$labels['aclr'] = 'Четене на пиŃĐĽĐ°'; +$labels['acls'] = 'Запазване на Видяно'; +$labels['aclw'] = 'ЗапиŃване на флагове'; +$labels['acli'] = 'Вмъкване (Копиране в)'; +$labels['aclp'] = 'Đзпращане'; +$labels['aclc'] = 'Създаване на подпапки'; +$labels['aclk'] = 'Създаване на подпапки'; +$labels['acld'] = 'Đзтриване на пиŃĐĽĐ°'; +$labels['aclt'] = 'Đзтриване на пиŃĐĽĐľ'; +$labels['acle'] = 'Заличаване'; +$labels['aclx'] = 'Đзтриване на папка'; +$labels['acla'] = 'ĐдминиŃтриране'; +$labels['acln'] = 'Đнотиране на пиŃĐĽĐ°'; +$labels['aclfull'] = 'Пълен контрол'; +$labels['aclother'] = 'ДрŃги'; +$labels['aclread'] = 'Четене'; +$labels['aclwrite'] = 'ПиŃане'; +$labels['acldelete'] = 'Đзтриване'; +$labels['shortacll'] = 'ТърŃене'; +$labels['shortaclr'] = 'Четене'; +$labels['shortacls'] = 'Запазване'; +$labels['shortaclw'] = 'ПиŃане'; +$labels['shortacli'] = 'Вмъкване'; +$labels['shortaclp'] = 'Đзпращане'; +$labels['shortaclc'] = 'Създаване'; +$labels['shortaclk'] = 'Създаване'; +$labels['shortacld'] = 'Đзтриване'; +$labels['shortaclt'] = 'Đзтриване'; +$labels['shortacle'] = 'Заличаване'; +$labels['shortaclx'] = 'Đзтриване на папка'; +$labels['shortacla'] = 'ĐдминиŃтриране'; +$labels['shortacln'] = 'Đнотирай'; +$labels['shortaclother'] = 'ДрŃги'; +$labels['shortaclread'] = 'Четене'; +$labels['shortaclwrite'] = 'ПиŃане'; +$labels['shortacldelete'] = 'Đзтриване'; +$labels['longacll'] = 'Папката е видима в ŃпиŃъците и може Đ´Đ° Ńе абонирате'; +$labels['longaclr'] = 'Папката може Đ´Đ° бъде отворена Đ·Đ° четене'; +$labels['longacls'] = 'Флаг Видяно може Đ´Đ° бъде променен.'; +$labels['longaclw'] = 'Флаговете и кл. Đ´Ńми Đ·Đ° пиŃĐĽĐ°Ń‚Đ° могат Đ´Đ° бъдат променяни, без Видяно и Đзтрито.'; +$labels['longacli'] = 'ПиŃĐĽĐ°Ń‚Đ° могат Đ´Đ° бъдат пиŃани или копирани към папката.'; +$labels['longaclp'] = 'ПиŃĐĽĐ°Ń‚Đ° могат Đ´Đ° бъдат пиŃани в папката'; +$labels['longaclc'] = 'Папките могат Đ´Đ° бъдат Ńъздавани (или преименŃвани) директно в тази папка'; +$labels['longaclk'] = 'Папките могат Đ´Đ° бъдат Ńъздавани (или преименŃвани) в тази ĐľŃновна папка'; +$labels['longacld'] = 'Флагът Đзтрито може Đ´Đ° бъде променян'; +$labels['longaclt'] = 'Флагът Đзтрито може Đ´Đ° бъде променян'; +$labels['longacle'] = 'ПиŃĐĽĐ°Ń‚Đ° могат Đ´Đ° бъдат заличавани'; +$labels['longaclx'] = 'Папката може Đ´Đ° бъде изтривана или преименŃвана'; +$labels['longacla'] = 'Правата Đ·Đ° Đ´ĐľŃŃ‚ŃŠĐż Đ´Đľ папката могат Đ´Đ° бъдат променяни'; +$labels['longacln'] = 'Могат Đ´Đ° Ńе променят Ńподелените метаданни (антоции) на пиŃĐĽĐ°Ń‚Đ°'; +$labels['longaclfull'] = 'Пълен контрол, включително и админиŃтриране на папките'; +$labels['longaclread'] = 'Папката може Đ´Đ° бъде отворена Đ·Đ° четене'; +$labels['longaclwrite'] = 'ПиŃĐĽĐ°Ń‚Đ° могат Đ´Đ° бъдат маркирани, запиŃвани или копирани в папката'; +$labels['longacldelete'] = 'ПиŃĐĽĐ°Ń‚Đ° могат Đ´Đ° бъдат изтривани'; +$labels['longaclother'] = 'ДрŃги права Đ·Đ° Đ´ĐľŃŃ‚ŃŠĐż'; +$labels['ariasummaryacltable'] = 'СпиŃŃŠĐş Ń ĐżŃ€Đ°Đ˛Đ° Đ·Đ° Đ´ĐľŃŃ‚ŃŠĐż'; +$labels['arialabelaclactions'] = 'СпиŃŃŠĐş Ń Đ´ĐµĐąŃтвия'; +$labels['arialabelaclform'] = 'Форма Ń ĐżŃ€Đ°Đ˛Đ° Đ·Đ° Đ´ĐľŃŃ‚ŃŠĐż'; +$messages['deleting'] = 'Đзтриване на права Đ·Đ° Đ´ĐľŃŃ‚ŃŠĐż...'; +$messages['saving'] = 'Запазване на права Đ·Đ° Đ´ĐľŃŃ‚ŃŠĐż...'; +$messages['updatesuccess'] = 'Правата Đ·Đ° Đ´ĐľŃŃ‚ŃŠĐż ŃĐ° променени ŃŃпеŃно'; +$messages['deletesuccess'] = 'Правата Đ·Đ° Đ´ĐľŃŃ‚ŃŠĐż ŃĐ° изтрити ŃŃпеŃно'; +$messages['createsuccess'] = 'Правата Đ·Đ° Đ´ĐľŃŃ‚ŃŠĐż ŃĐ° добавени ŃŃпеŃно'; +$messages['updateerror'] = 'Невъзможно модифициране на правата Đ·Đ° Đ´ĐľŃŃ‚ŃŠĐż'; +$messages['deleteerror'] = 'Невъзможно изтриване на права Đ·Đ° Đ´ĐľŃŃ‚ŃŠĐż'; +$messages['createerror'] = 'Невъзможно добавяне на права Đ·Đ° Đ´ĐľŃŃ‚ŃŠĐż'; +$messages['deleteconfirm'] = 'СигŃрни ли Ńте, че желаете Đ´Đ° премахнате правата Đ·Đ° Đ´ĐľŃŃ‚ŃŠĐż от избраните потребители?'; +$messages['norights'] = 'Няма Ńказани права!'; +$messages['nouser'] = 'Няма Ńказано потребителŃко име!'; +?> diff --git a/data/web/rc/plugins/acl/localization/br.inc b/data/web/rc/plugins/acl/localization/br.inc new file mode 100644 index 00000000..409ea485 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/br.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Rannañ'; +$labels['myrights'] = 'AotreoĂą mont e-barzh'; +$labels['username'] = 'Implijer:'; +$labels['advanced'] = 'Mod kempleshoc\'h'; +$labels['newuser'] = 'Ouzhpennañ un elfenn'; +$labels['editperms'] = 'Embann an aotreoĂą'; +$labels['actions'] = 'AotreoĂą mont e-barzh'; +$labels['anyone'] = 'An holl implijerien (neb hini)'; +$labels['anonymous'] = 'Kouvidi (dizanv)'; +$labels['identifier'] = 'Naoudi'; +$labels['acll'] = 'Taol sell'; +$labels['aclr'] = 'KemennadennoĂą lennet'; +$labels['acls'] = 'Derc\'hel ar stad "Gwelet"'; +$labels['aclw'] = 'BannieloĂą skrivañ'; +$labels['acli'] = 'Enlakaat (Eilañ an digoradur)'; +$labels['aclp'] = 'Postañ'; +$labels['aclc'] = 'Krouiñ isteuliadoĂą'; +$labels['aclk'] = 'Krouiñ isteuliadoĂą'; +$labels['acld'] = 'Dilemel kemennadennoĂą'; +$labels['aclt'] = 'Dilemel kemennadennoĂą'; +$labels['acle'] = 'Skarzhañ'; +$labels['aclx'] = 'Dilemel an teuliad'; +$labels['acla'] = 'Ardeiñ'; +$labels['acln'] = 'Notennaouiñ kemennadennoĂą'; +$labels['aclfull'] = 'Reoliadur a-bezh'; +$labels['aclother'] = 'All'; +$labels['aclread'] = 'Lenn'; +$labels['aclwrite'] = 'Skrivañ'; +$labels['acldelete'] = 'Dilemel'; +$labels['shortacll'] = 'Teurel ur sell'; +$labels['shortaclr'] = 'Lenn'; +$labels['shortacls'] = 'Derc\'hel'; +$labels['shortaclw'] = 'Skrivañ'; +$labels['shortacli'] = 'Enlakaat'; +$labels['shortaclp'] = 'Postañ'; +$labels['shortaclc'] = 'Krouiñ'; +$labels['shortaclk'] = 'Krouiñ'; +$labels['shortacld'] = 'Dilemel'; +$labels['shortaclt'] = 'Dilemel'; +$labels['shortacle'] = 'Skarzhañ'; +$labels['shortaclx'] = 'Dilemel an teuliad'; +$labels['shortacla'] = 'Ardeiñ'; +$labels['shortacln'] = 'Notennaouiñ'; +$labels['shortaclother'] = 'TraoĂą all'; +$labels['shortaclread'] = 'Lenn'; +$labels['shortaclwrite'] = 'Skrivañ'; +$labels['shortacldelete'] = 'Dilemel'; +$labels['longacll'] = 'Gwelus eo an teuliad-se er rolloĂą ha gallout a reer bezañ koumanantet dezhañ'; +$labels['longaclr'] = 'Gallout a reer digeriñ an teuliad-mañ evit e lenn'; +$labels['longacls'] = 'Gallout a reer kemmañ ar bannieloĂą "Kemennadenn gwelet"'; +$labels['longaclw'] = 'Gallout a reer kemmañ an bannieloĂą kemennadennoĂą hag ar gerioĂą-alc\'hwez, war-bouez "Gwelet" ha "Dilamet"'; +$labels['longacli'] = 'Gallout a ra ar c\'hemennadennoĂą bezañ skrivet be eilet en teuliad'; +$labels['longaclp'] = 'Gallout a reer postañ kemennadennoĂą d\'an teuliad-mañ'; +$labels['longaclc'] = 'Gallout a reer krouiñ (pe adenvel) teuliadoĂą en teuliad war-eeun'; +$labels['longaclk'] = 'Gallout a reer krouiñ (pe adenvel) teuliadoĂą en teuliad war-eeun'; +$labels['longacld'] = 'Gallout a reer kemmañ ar banniel ""Kemennadenn dilamet"'; +$labels['longaclt'] = 'Gallout a reer kemmañ ar banniel ""Kemennadenn dilamet"'; +$labels['longacle'] = 'Gallout a reer skarzhañ ar c\'hemennadennoĂą'; +$labels['longaclx'] = 'Gallout a ra bezañ dilamet pe adanvet an teuliad'; +$labels['longacla'] = 'Gallout a reer kemmañ aotreoĂą haeziñ an teuliad'; +$labels['longacln'] = 'MetaroadennoĂą rannet (notennoĂą) ar c\'hemennadennoĂą a c\'hell bezañ kemmet'; +$labels['longaclfull'] = 'Reoliadur a-bezh, ardeiñ an teuliad en o zouez'; +$labels['longaclread'] = 'Gallout a reer digeriñ an teuliad evit e lenn'; +$labels['longaclwrite'] = 'Gallout a reer merkañ, skrivañ pe eilañ kemennadennoĂą d\'an teuliad'; +$labels['longacldelete'] = 'Gallout a reer dilemel ar c\'hemennadennoĂą'; +$labels['longaclother'] = 'AotreoĂą haeziñ all'; +$labels['ariasummaryacltable'] = 'Roll an aotreoĂą haeziñ'; +$labels['arialabelaclactions'] = 'Roll ar gweredoĂą'; +$labels['arialabelaclform'] = 'AotreoĂą haeziñ a-berzh'; +$messages['deleting'] = 'O tilemel an aotreoĂą haeziñ...'; +$messages['saving'] = 'Oc\'h enrollañ an aotreoĂą haeziñ...'; +$messages['updatesuccess'] = 'Kemmet an aotreoĂą haeziñ gant berzh'; +$messages['deletesuccess'] = 'Dilamet an aotreoĂą haeziñ gant berzh'; +$messages['createsuccess'] = 'Ouzhpennet an aotreoĂą haeziñ gant berzh'; +$messages['updateerror'] = 'N\'haller ket hizivaat an aotreoĂą haeziñ'; +$messages['deleteerror'] = 'N\'haller ket dilemel an aotreoĂą haeziñ'; +$messages['createerror'] = 'N\'haller ket ouzhpennañ aotreoĂą haeziñ'; +$messages['deleteconfirm'] = 'Sur oc\'h e fell deoc\'h dilemel aotreoĂą haeziñ an arveriaded diuzet?'; +$messages['norights'] = 'Aotre ebet erspizet!'; +$messages['nouser'] = 'Anv arveriad ebet erspizet!'; +?> diff --git a/data/web/rc/plugins/acl/localization/bs_BA.inc b/data/web/rc/plugins/acl/localization/bs_BA.inc new file mode 100644 index 00000000..371dd17a --- /dev/null +++ b/data/web/rc/plugins/acl/localization/bs_BA.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Razmjena'; +$labels['myrights'] = 'Prava pristupa'; +$labels['username'] = 'Korisnik:'; +$labels['advanced'] = 'Napredni mod'; +$labels['newuser'] = 'Dodaj unos'; +$labels['editperms'] = 'Uredi dozvole'; +$labels['actions'] = 'Akcije za prava pristupa...'; +$labels['anyone'] = 'Svi korisnici (bilo ko)'; +$labels['anonymous'] = 'Gosti (anonimno)'; +$labels['identifier'] = 'Identifikator'; +$labels['acll'] = 'PronaÄ‘i'; +$labels['aclr'] = 'ProÄŤitaj poruke'; +$labels['acls'] = 'ZadrĹľi stanje pregleda'; +$labels['aclw'] = 'Oznake za pisanje'; +$labels['acli'] = 'Umetni (Kopiraj u)'; +$labels['aclp'] = 'Objavi'; +$labels['aclc'] = 'Napravi podfoldere'; +$labels['aclk'] = 'Napravi podfoldere'; +$labels['acld'] = 'Obriši poruke'; +$labels['aclt'] = 'Obriši poruke'; +$labels['acle'] = 'Izbriši'; +$labels['aclx'] = 'Obriši folder'; +$labels['acla'] = 'Administracija'; +$labels['acln'] = 'ObiljeĹľi poruke'; +$labels['aclfull'] = 'Puna kontrola'; +$labels['aclother'] = 'Ostalo'; +$labels['aclread'] = 'ProÄŤitano'; +$labels['aclwrite'] = 'Piši'; +$labels['acldelete'] = 'Obriši'; +$labels['shortacll'] = 'PronaÄ‘i'; +$labels['shortaclr'] = 'ProÄŤitano'; +$labels['shortacls'] = 'ZadrĹľi'; +$labels['shortaclw'] = 'Piši'; +$labels['shortacli'] = 'Umetni'; +$labels['shortaclp'] = 'Objavi'; +$labels['shortaclc'] = 'Kreiraj'; +$labels['shortaclk'] = 'Kreiraj'; +$labels['shortacld'] = 'Obriši'; +$labels['shortaclt'] = 'Obriši'; +$labels['shortacle'] = 'Izbriši'; +$labels['shortaclx'] = 'Brisanje foldera'; +$labels['shortacla'] = 'Administracija'; +$labels['shortacln'] = 'ObiljeĹľli'; +$labels['shortaclother'] = 'Ostalo'; +$labels['shortaclread'] = 'ProÄŤitano'; +$labels['shortaclwrite'] = 'Piši'; +$labels['shortacldelete'] = 'Obriši'; +$labels['longacll'] = 'Ovaj folder je vidljiv u listama i moguće je izvršiti pretplatu na njega'; +$labels['longaclr'] = 'Folder je moguće otvoriti radi ÄŤitanja'; +$labels['longacls'] = 'Oznaka ÄŤitanja za poruke se moĹľe promijeniti'; +$labels['longaclw'] = 'Oznake za poruke i kljuÄŤne rijeÄŤi je moguće promijeniti, osim za pregledano i obrisano'; +$labels['longacli'] = 'Moguće je kopirati i zapisivati poruke u folder'; +$labels['longaclp'] = 'Moguće je objavljivati poruke u ovaj folder'; +$labels['longaclc'] = 'Moguće je kreirati (ili preimenovati) foldere diretno ispod ovog foldera'; +$labels['longaclk'] = 'Moguće je kreirati (ili preimenovati) foldere diretno ispod ovog foldera'; +$labels['longacld'] = 'Oznaka za obrisane poruke se moĹľe mijenjati'; +$labels['longaclt'] = 'Oznaka za obrisane poruke se moĹľe mijenjati'; +$labels['longacle'] = 'Poruke je moguće obrisati'; +$labels['longaclx'] = 'Folder je moguće obrisati ili preimenovati'; +$labels['longacla'] = 'Pristupna prava foldera je moguće promijeniti'; +$labels['longacln'] = 'Dijeljeni podaci (obiljeĹľavanja) poruka mogu se mijenjati'; +$labels['longaclfull'] = 'Puna kontrola ukljuÄŤujući i administraciju foldera'; +$labels['longaclread'] = 'Folder je moguće otvoriti radi ÄŤitanja'; +$labels['longaclwrite'] = 'Moguće je oznaÄŤavati, zapisivati i kopirati poruke u folder'; +$labels['longacldelete'] = 'Moguće je obrisati poruke'; +$labels['longaclother'] = 'Ostala prava pristupa'; +$labels['ariasummaryacltable'] = 'Lista prava pristupa'; +$labels['arialabelaclactions'] = 'Lista akcija'; +$labels['arialabelaclform'] = 'Obrazac za prava pristupa'; +$messages['deleting'] = 'Brišem prava pristupa...'; +$messages['saving'] = 'Snimam prava pristupa...'; +$messages['updatesuccess'] = 'Prava pristupa su uspješno promijenjena'; +$messages['deletesuccess'] = 'Prava pristupa su uspješno obrisana'; +$messages['createsuccess'] = 'Prava pristupa su uspješno dodana'; +$messages['updateerror'] = 'Nije moguće aĹľurirati prava pristupa'; +$messages['deleteerror'] = 'Nije moguće obrisati prava pristupa'; +$messages['createerror'] = 'Nije moguće dodati prava pristupa'; +$messages['deleteconfirm'] = 'Jeste li sigurni da Ĺľelite ukloniti prava pristupa za odabrane korisnike?'; +$messages['norights'] = 'Niste odabrali prava pristupa!'; +$messages['nouser'] = 'Niste odabrali korisniÄŤko ime!'; +?> diff --git a/data/web/rc/plugins/acl/localization/ca_ES.inc b/data/web/rc/plugins/acl/localization/ca_ES.inc new file mode 100644 index 00000000..b9df1209 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/ca_ES.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Comparteix'; +$labels['myrights'] = 'Permisos d\'accĂ©s'; +$labels['username'] = 'Usuari:'; +$labels['advanced'] = 'Mode Avançat'; +$labels['newuser'] = 'Afegeix una entrada'; +$labels['editperms'] = 'Editar Permisos'; +$labels['actions'] = 'Accions dels permisos d\'accĂ©s...'; +$labels['anyone'] = 'Tots els usuaris (qualsevol)'; +$labels['anonymous'] = 'Convidats (anònim)'; +$labels['identifier'] = 'Identificador'; +$labels['acll'] = 'Cerca'; +$labels['aclr'] = 'Llegeix missatges'; +$labels['acls'] = 'Conserva\'l com a llegit'; +$labels['aclw'] = 'Marques d\'escriptura'; +$labels['acli'] = 'Insereix (Copia dins)'; +$labels['aclp'] = 'Envia l\'entrada'; +$labels['aclc'] = 'Crea subcarpetes'; +$labels['aclk'] = 'Crea subcarpetes'; +$labels['acld'] = 'Suprimeix missatges'; +$labels['aclt'] = 'Suprimeix missatges'; +$labels['acle'] = 'Buida'; +$labels['aclx'] = 'Suprimeix carpeta'; +$labels['acla'] = 'Administra'; +$labels['acln'] = 'Anota missatges'; +$labels['aclfull'] = 'Control total'; +$labels['aclother'] = 'Un altre'; +$labels['aclread'] = 'Lectura'; +$labels['aclwrite'] = 'Escriptura'; +$labels['acldelete'] = 'Suprimeix'; +$labels['shortacll'] = 'Cerca'; +$labels['shortaclr'] = 'Lectura'; +$labels['shortacls'] = 'Conserva'; +$labels['shortaclw'] = 'Escriptura'; +$labels['shortacli'] = 'Insereix'; +$labels['shortaclp'] = 'Envia l\'entrada'; +$labels['shortaclc'] = 'Crea'; +$labels['shortaclk'] = 'Crea'; +$labels['shortacld'] = 'Suprimeix'; +$labels['shortaclt'] = 'Suprimeix'; +$labels['shortacle'] = 'Buida'; +$labels['shortaclx'] = 'Suprimeix carpeta'; +$labels['shortacla'] = 'Administra'; +$labels['shortacln'] = 'Anota'; +$labels['shortaclother'] = 'Un altre'; +$labels['shortaclread'] = 'Lectura'; +$labels['shortaclwrite'] = 'Escriptura'; +$labels['shortacldelete'] = 'Suprimeix'; +$labels['longacll'] = 'La carpeta Ă©s visible a les llistes i s\'hi pot subscriure'; +$labels['longaclr'] = 'La carpeta pot ser oberta per llegir'; +$labels['longacls'] = 'Els missatges marcats com a Llegit poden ser canviats'; +$labels['longaclw'] = 'Les marques i les paraules clau dels missatges poden ser canviats, excepte els Llegit i Suprimit'; +$labels['longacli'] = 'Els missatges poden ser escrits i copiats a la carpeta'; +$labels['longaclp'] = 'Els missatges poden ser enviats a aquesta carpeta'; +$labels['longaclc'] = 'Es poden crear (or reanomenar) carpetes directament sota aquesta carpeta'; +$labels['longaclk'] = 'Es poden crear (or reanomenar) carpetes directament sota aquesta carpeta'; +$labels['longacld'] = 'Els missatges amb l\'indicador Suprimit poden ser canviats'; +$labels['longaclt'] = 'Els missatges amb l\'indicador Suprimit poden ser canviats'; +$labels['longacle'] = 'Els missatges poden ser purgats'; +$labels['longaclx'] = 'La carpeta pot ser suprimida o reanomenada'; +$labels['longacla'] = 'Els permisos d\'accĂ©s a la carpeta poden ser canviats'; +$labels['longacln'] = 'Les metadades compartides dels missatges (anotacions) poden ser canviades'; +$labels['longaclfull'] = 'Control total fins i tot la gestiĂł de carpetes'; +$labels['longaclread'] = 'La carpeta pot ser oberta per llegir'; +$labels['longaclwrite'] = 'Els missatges poden ser marcats, escrits o copiats a la carpeta'; +$labels['longacldelete'] = 'Els missatges poden ser suprimits'; +$labels['longaclother'] = 'Altres drets d\'accĂ©s'; +$labels['ariasummaryacltable'] = 'Llista els drets d\'accĂ©s'; +$labels['arialabelaclactions'] = 'Llista les accions'; +$labels['arialabelaclform'] = 'Formulari de drets d\'accĂ©s'; +$messages['deleting'] = 'S\'estan suprimint els permisos d\'accĂ©s...'; +$messages['saving'] = 'S\'estan desant els permisos d\'accĂ©s...'; +$messages['updatesuccess'] = 'Els permisos d\'accĂ©s han estat canviats correctament'; +$messages['deletesuccess'] = 'Els permisos d\'accĂ©s han estat suprimits correctament'; +$messages['createsuccess'] = 'Els permisos d\'accĂ©s han estat afegits correctament'; +$messages['updateerror'] = 'No s\'han pogut actualitzar els permisos d\'accĂ©s'; +$messages['deleteerror'] = 'No s\'han pogut suprimir els permisos d\'accĂ©s'; +$messages['createerror'] = 'No s\'han pogut afegir els permisos d\'accĂ©s'; +$messages['deleteconfirm'] = 'Esteu segurs que voleu suprimir els permisos d\'accĂ©s de l\'usuari o usuaris seleccionats?'; +$messages['norights'] = 'No s\'ha especificat cap permĂ­s'; +$messages['nouser'] = 'No s\'ha especificat cap nom d\'usuari'; +?> diff --git a/data/web/rc/plugins/acl/localization/cs_CZ.inc b/data/web/rc/plugins/acl/localization/cs_CZ.inc new file mode 100644 index 00000000..aa9eba16 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/cs_CZ.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'SdĂ­lenĂ­'; +$labels['myrights'] = 'Přístupová práva'; +$labels['username'] = 'UĹľivatel:'; +$labels['advanced'] = 'PokroÄŤilĂ˝ reĹľim'; +$labels['newuser'] = 'PĹ™idat záznam'; +$labels['editperms'] = 'Upravit oprávnÄ›nĂ­'; +$labels['actions'] = 'PřístupovĂ© právo akce ...'; +$labels['anyone'] = 'Všichni uĹľivatelĂ© (kdokoli)'; +$labels['anonymous'] = 'HostĂ© (anonymnĂ­)'; +$labels['identifier'] = 'Identifikátor'; +$labels['acll'] = 'Vyhledat'; +$labels['aclr'] = 'ÄŚĂ­st zprávy'; +$labels['acls'] = 'Ponechat stav PĹ™eÄŤteno'; +$labels['aclw'] = 'Zapsat oznaÄŤenĂ­'; +$labels['acli'] = 'VloĹľit (KopĂ­rovat do)'; +$labels['aclp'] = 'Odeslat'; +$labels['aclc'] = 'VytvoĹ™it podsloĹľky'; +$labels['aclk'] = 'VytvoĹ™it podsloĹľky'; +$labels['acld'] = 'Smazat zprávy'; +$labels['aclt'] = 'Smazat zprávy'; +$labels['acle'] = 'Vyprázdnit'; +$labels['aclx'] = 'Smazat sloĹľku'; +$labels['acla'] = 'Spravovat'; +$labels['acln'] = 'OznaÄŤit zprávy poznámkou'; +$labels['aclfull'] = 'PlnĂ˝ přístup'; +$labels['aclother'] = 'OstatnĂ­'; +$labels['aclread'] = 'ÄŚĂ­st'; +$labels['aclwrite'] = 'Zapsat'; +$labels['acldelete'] = 'Smazat'; +$labels['shortacll'] = 'Vyhledat'; +$labels['shortaclr'] = 'ÄŚĂ­st'; +$labels['shortacls'] = 'Zachovat'; +$labels['shortaclw'] = 'Zapsat'; +$labels['shortacli'] = 'VloĹľit'; +$labels['shortaclp'] = 'Odeslat'; +$labels['shortaclc'] = 'VytvoĹ™it'; +$labels['shortaclk'] = 'VytvoĹ™it'; +$labels['shortacld'] = 'Smazat'; +$labels['shortaclt'] = 'Smazat'; +$labels['shortacle'] = 'Vyprázdnit'; +$labels['shortaclx'] = 'Mazat sloĹľky'; +$labels['shortacla'] = 'Spravovat'; +$labels['shortacln'] = 'OznaÄŤit poznámkou'; +$labels['shortaclother'] = 'OstatnĂ­'; +$labels['shortaclread'] = 'ÄŚĂ­st'; +$labels['shortaclwrite'] = 'Zapsat'; +$labels['shortacldelete'] = 'Smazat'; +$labels['longacll'] = 'SloĹľka je viditelná v seznamu a mĹŻĹľe bĂ˝t pĹ™ihlášena'; +$labels['longaclr'] = 'SloĹľka mĹŻĹľe bĂ˝t otevĹ™ena pro ÄŤtenĂ­'; +$labels['longacls'] = 'OznaÄŤená zpráva byla zmÄ›nÄ›na'; +$labels['longaclw'] = 'ZnaÄŤky a klĂ­ÄŤová slova u zpráv je moĹľnĂ© mÄ›nit, kromÄ› příznaku PĹ™eÄŤteno a Smazáno'; +$labels['longacli'] = 'Zpráva mĹŻĹľe bĂ˝t napsána nebo zkopĂ­rována do sloĹľky'; +$labels['longaclp'] = 'Zpráva mĹŻĹľe bĂ˝t odeslána do tĂ©to sloĹľky'; +$labels['longaclc'] = 'SloĹľka mĹŻĹľe bĂ˝t vytvoĹ™ena (nebo pĹ™ejmenována) pĹ™imo v tĂ©to sloĹľce'; +$labels['longaclk'] = 'SloĹľka mĹŻĹľe bĂ˝t vytvoĹ™ena (nebo pĹ™ejmenována) pĹ™imo v tĂ©to sloĹľce'; +$labels['longacld'] = 'Příznak smazanĂ© zprávy mĹŻĹľe bĂ˝t zmÄ›nÄ›n'; +$labels['longaclt'] = 'Příznak smazanĂ© zprávy mĹŻĹľe bĂ˝t zmÄ›nÄ›n'; +$labels['longacle'] = 'Zpráva mĹŻĹľe bĂ˝t smazána'; +$labels['longaclx'] = 'SloĹľka mĹŻĹľe bĂ˝t smazána nebo pĹ™ejmenována'; +$labels['longacla'] = 'Přístupová práva sloĹľky mohou bĂ˝t zmÄ›nÄ›na'; +$labels['longacln'] = 'Zprávamy sdĂ­lenĂ© metadata (poznámky) mohou bĂ˝t zmÄ›nÄ›ny'; +$labels['longaclfull'] = 'PlnĂ˝ přístup vÄŤetnÄ› správy sloĹľky'; +$labels['longaclread'] = 'SloĹľka mĹŻĹľe bĂ˝t otevĹ™ena pro ÄŤtenĂ­'; +$labels['longaclwrite'] = 'Zpráva mĹŻĹľe bĂ˝t oznaÄŤena, napsána nebo zkopĂ­rována do sloĹľky'; +$labels['longacldelete'] = 'Zprávy mohou bĂ˝t smazány'; +$labels['longaclother'] = 'Jiná přístupová oprávnÄ›nĂ­'; +$labels['ariasummaryacltable'] = 'Seznam oprávnÄ›nĂ­'; +$labels['arialabelaclactions'] = 'Seznam akcĂ­'; +$labels['arialabelaclform'] = 'Formulář pro přístupová oprávnÄ›nĂ­'; +$messages['deleting'] = 'OdstraĹuji přístupová práva...'; +$messages['saving'] = 'Ukládám přístupová práva...'; +$messages['updatesuccess'] = 'Přístupová práva byla ĂşspěšnÄ› zmÄ›nÄ›na'; +$messages['deletesuccess'] = 'Přístupová práva byla ĂşspěšnÄ› odstranÄ›na'; +$messages['createsuccess'] = 'Přístupová práva byla ĂşspěšnÄ› pĹ™idána'; +$messages['updateerror'] = 'Ăšprava přístupovĂ˝ch práv se nezdaĹ™ila'; +$messages['deleteerror'] = 'SmazánĂ­ přístupovĂ˝ch práv se nezdaĹ™ilo'; +$messages['createerror'] = 'PĹ™idánĂ­ přístupovĂ˝ch práv se nezdaĹ™ilo'; +$messages['deleteconfirm'] = 'Opravdu si pĹ™ejete odstranit přístupová práva pro vybranĂ©(ho) uĹľivatele?'; +$messages['norights'] = 'Nejsou specifikována žádná práva!'; +$messages['nouser'] = 'NenĂ­ specifikováno uĹľivatelskĂ© jmĂ©no!'; +?> diff --git a/data/web/rc/plugins/acl/localization/cy_GB.inc b/data/web/rc/plugins/acl/localization/cy_GB.inc new file mode 100644 index 00000000..816d6335 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/cy_GB.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Rhannu'; +$labels['myrights'] = 'Hawliau Mynediad'; +$labels['username'] = 'Defnyddiwr:'; +$labels['advanced'] = 'Modd uwch'; +$labels['newuser'] = 'Ychwanegu cofnod'; +$labels['editperms'] = 'Golygu hawliau'; +$labels['actions'] = 'Gweithredoedd hawl mynediad...'; +$labels['anyone'] = 'Pob defnyddiwr (unrhywun)'; +$labels['anonymous'] = 'Gwestai (anhysbys)'; +$labels['identifier'] = 'Dynodwr'; +$labels['acll'] = 'Chwilio'; +$labels['aclr'] = 'Darllen negeseuon'; +$labels['acls'] = 'Cadw stad Gwelwyd'; +$labels['aclw'] = 'Fflagiau ysgrifennu'; +$labels['acli'] = 'Mewnosod (CopĂŻo fewn i)'; +$labels['aclp'] = 'Postio'; +$labels['aclc'] = 'Creu is-ffolderi'; +$labels['aclk'] = 'Creu is-ffolderi'; +$labels['acld'] = 'Dileu negeseuon'; +$labels['aclt'] = 'Dileu negeseuon'; +$labels['acle'] = 'Dileu'; +$labels['aclx'] = 'Dileu ffolder'; +$labels['acla'] = 'Gweinyddu'; +$labels['acln'] = 'Anodi negeseuon'; +$labels['aclfull'] = 'Rheolaeth lawn'; +$labels['aclother'] = 'Arall'; +$labels['aclread'] = 'Darllen'; +$labels['aclwrite'] = 'Ysgrifennu'; +$labels['acldelete'] = 'Dileu'; +$labels['shortacll'] = 'Chwilio'; +$labels['shortaclr'] = 'Darllen'; +$labels['shortacls'] = 'Cadw'; +$labels['shortaclw'] = 'Ysgrifennu'; +$labels['shortacli'] = 'Mewnosod'; +$labels['shortaclp'] = 'Postio'; +$labels['shortaclc'] = 'Creu'; +$labels['shortaclk'] = 'Creu'; +$labels['shortacld'] = 'Dileu'; +$labels['shortaclt'] = 'Dileu'; +$labels['shortacle'] = 'Dileu'; +$labels['shortaclx'] = 'Dileu ffolder'; +$labels['shortacla'] = 'Gweinyddu'; +$labels['shortacln'] = 'Anodi'; +$labels['shortaclother'] = 'Arall'; +$labels['shortaclread'] = 'Darllen'; +$labels['shortaclwrite'] = 'Ysgrifennu'; +$labels['shortacldelete'] = 'Dileu'; +$labels['longacll'] = 'Mae\'r ffolder hwn i\'w weld ar y rhestrau a mae\'n bosib tanysgrifio iddo'; +$labels['longaclr'] = 'Gellir agor y ffolder hwn i\'w ddarllen'; +$labels['longacls'] = 'Gellir newid y fflag negeseuon Gwelwyd'; +$labels['longaclw'] = 'Gellir newid y fflagiau negeseuon a allweddeiriau, heblaw Gwelwyd a DilĂ«uwyd'; +$labels['longacli'] = 'Gellir ysgrifennu neu copĂŻo negeseuon i\'r ffolder'; +$labels['longaclp'] = 'Gellir postio negeseuon i\'r ffolder hwn'; +$labels['longaclc'] = 'Gellir creu (neu ail-enwi) ffolderi yn uniongyrchol o dan y ffolder hwn'; +$labels['longaclk'] = 'Gellir creu (neu ail-enwi) ffolderi yn uniongyrchol o dan y ffolder hwn'; +$labels['longacld'] = 'Gellir newid fflag neges Dileu'; +$labels['longaclt'] = 'Gellir newid fflag neges Dileu'; +$labels['longacle'] = 'Gellir gwaredu negeseuon'; +$labels['longaclx'] = 'Gellir dileu neu ail-enwi\'r ffolder'; +$labels['longacla'] = 'Gellir newid hawliau mynediad y ffolder'; +$labels['longacln'] = 'Gellir newid negeseuon metadata (anodiadau) a rannwyd'; +$labels['longaclfull'] = 'Rheolaeth lawn yn cynnwys rheolaeth ffolderi'; +$labels['longaclread'] = 'Gellir agor y ffolder hwn i\'w ddarllen'; +$labels['longaclwrite'] = 'Gellir nodi, ysgrifennu neu copĂŻo negeseuon i\'r ffolder'; +$labels['longacldelete'] = 'Gellir dileu negeseuon'; +$labels['longaclother'] = 'Hawliau mynediad eraill'; +$labels['ariasummaryacltable'] = 'Rhestr o hawliau mynediad'; +$labels['arialabelaclactions'] = 'Rhestru gweithrediadau'; +$labels['arialabelaclform'] = 'Ffurflen hawliau mynediad'; +$messages['deleting'] = 'Yn dileu hawliau mynediad...'; +$messages['saving'] = 'Yn cadw hawliau mynediad...'; +$messages['updatesuccess'] = 'Wedi newid hawliau mynediad yn llwyddiannus'; +$messages['deletesuccess'] = 'Wedi dileu hawliau mynediad yn llwyddiannus'; +$messages['createsuccess'] = 'Wedi ychwanegu hawliau mynediad yn llwyddiannus'; +$messages['updateerror'] = 'Methwyd diweddaru hawliau mynediad'; +$messages['deleteerror'] = 'Methwyd dileu hawliau mynediad'; +$messages['createerror'] = 'Methwyd ychwanegu hawliau mynediad'; +$messages['deleteconfirm'] = 'Ydych chi\'n siwr eich bod am ddileu hawliau mynediad y defnyddiwr/wyr ddewiswyd?'; +$messages['norights'] = 'Nid oes hawliau wedi eu nodi!'; +$messages['nouser'] = 'Nid oes enw defnyddiwr wedi ei nodi!'; +?> diff --git a/data/web/rc/plugins/acl/localization/da_DK.inc b/data/web/rc/plugins/acl/localization/da_DK.inc new file mode 100644 index 00000000..cbb07706 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/da_DK.inc @@ -0,0 +1,93 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Deling'; +$labels['myrights'] = 'Adgangrettigheder'; +$labels['username'] = 'Bruger:'; +$labels['advanced'] = 'Avanceret tilstand'; +$labels['newuser'] = 'Tilføj indgang'; +$labels['editperms'] = 'Rediger tilladelser'; +$labels['actions'] = 'Tilgangsrettigheder...'; +$labels['anyone'] = 'Alle brugere'; +$labels['anonymous'] = 'Gæst (anonym)'; +$labels['identifier'] = 'Identifikator'; +$labels['acll'] = 'SlĂĄ op'; +$labels['aclr'] = 'Læs beskeder'; +$labels['acls'] = 'Behold læst-status'; +$labels['aclw'] = 'Skriv flag'; +$labels['acli'] = 'Indsæt (kopier ind i)'; +$labels['aclp'] = 'Send'; +$labels['aclc'] = 'Opret undermapper'; +$labels['aclk'] = 'Opret undermapper'; +$labels['acld'] = 'Slet beskeder'; +$labels['aclt'] = 'Slet beskeder'; +$labels['acle'] = 'Udslet'; +$labels['aclx'] = 'Slet mappe'; +$labels['acla'] = 'Administrer'; +$labels['acln'] = 'Annoter beskeder'; +$labels['aclfull'] = 'Fuld kontrol'; +$labels['aclother'] = 'Andet'; +$labels['aclread'] = 'Læse'; +$labels['aclwrite'] = 'Skrive'; +$labels['acldelete'] = 'Slet'; +$labels['shortacll'] = 'SlĂĄ op'; +$labels['shortaclr'] = 'Læse'; +$labels['shortacls'] = 'Behold'; +$labels['shortaclw'] = 'Skrive'; +$labels['shortacli'] = 'Indsæt'; +$labels['shortaclp'] = 'Send'; +$labels['shortaclc'] = 'Opret'; +$labels['shortaclk'] = 'Opret'; +$labels['shortacld'] = 'Slet'; +$labels['shortaclt'] = 'Slet'; +$labels['shortacle'] = 'Udslet'; +$labels['shortaclx'] = 'Slet mappe'; +$labels['shortacla'] = 'Administrer'; +$labels['shortacln'] = 'Annoter'; +$labels['shortaclother'] = 'Andet'; +$labels['shortaclread'] = 'Læse'; +$labels['shortaclwrite'] = 'Skrive'; +$labels['shortacldelete'] = 'Slet'; +$labels['longacll'] = 'Mappen er synlig pĂĄ listen og kan abonneres pĂĄ'; +$labels['longaclr'] = 'Mappen kan ĂĄbnes for læsning'; +$labels['longacls'] = 'Beskeders Læst-flag kan ændres'; +$labels['longaclw'] = 'Beskeders flag og nøgleord kan ændres med undtagelse af Læst og Slettet'; +$labels['longacli'] = 'Beskeder kan blive skrevet eller kopieret til mappen'; +$labels['longaclp'] = 'Beskeder kan sendes til denne mappe'; +$labels['longaclc'] = 'Mapper kan blive oprettet (eller omdøbt) direkte under denne mappe'; +$labels['longaclk'] = 'Mapper kan blive oprettet (eller omdøbt) direkte under denne mappe'; +$labels['longacld'] = 'Beskeders Slet-flag kan ændres'; +$labels['longaclt'] = 'Beskeders Slet-flag kan ændres'; +$labels['longacle'] = 'Beskeder kan slettes'; +$labels['longaclx'] = 'Mappen kan blive slettet eller omdøbt'; +$labels['longacla'] = 'Mappen adgangsrettigheder kan ændres'; +$labels['longaclfull'] = 'Fuld kontrol inklusiv mappeadministration'; +$labels['longaclread'] = 'Mappen kan ĂĄbnes for læsning'; +$labels['longaclwrite'] = 'Beskeder kan blive markeret, skrevet eller kopieret til mappen'; +$labels['longacldelete'] = 'Beskeder kan slettes'; +$messages['deleting'] = 'Slette rettigheder...'; +$messages['saving'] = 'Gemme rettigheder...'; +$messages['updatesuccess'] = 'Tilgangsrettighederne blev ændret'; +$messages['deletesuccess'] = 'Sletterettigheder blev ændret'; +$messages['createsuccess'] = 'Tilgangsrettigheder blev tilføjet'; +$messages['updateerror'] = 'Kunne ikke opdatere adgangsrettigheder'; +$messages['deleteerror'] = 'Kunne ikke slette tilgangsrettigheder'; +$messages['createerror'] = 'Kunne ikke tilføje tilgangsrettigheder'; +$messages['deleteconfirm'] = 'Er du sikker pĂĄ, at du vil slette tilgangsrettigheder fra de(n) valgte bruger(e)?'; +$messages['norights'] = 'Der er ikke specificeret nogle rettigheder!'; +$messages['nouser'] = 'Der er ikke angiver et brugernavn!'; +?> diff --git a/data/web/rc/plugins/acl/localization/de_CH.inc b/data/web/rc/plugins/acl/localization/de_CH.inc new file mode 100644 index 00000000..9e4f3b26 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/de_CH.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Freigabe'; +$labels['myrights'] = 'Zugriffsrechte'; +$labels['username'] = 'Benutzer:'; +$labels['advanced'] = 'Expertenmodus'; +$labels['newuser'] = 'Eintrag hinzufĂĽgen'; +$labels['editperms'] = 'Zugriffsrechte bearbeiten'; +$labels['actions'] = 'Zugriffsrechte Aktionen...'; +$labels['anyone'] = 'Alle Benutzer (anyone)'; +$labels['anonymous'] = 'Gäste (anonymous)'; +$labels['identifier'] = 'Bezeichnung'; +$labels['acll'] = 'Sichtbar'; +$labels['aclr'] = 'Nachrichten lesen'; +$labels['acls'] = 'Lesestatus ändern'; +$labels['aclw'] = 'Flags schreiben'; +$labels['acli'] = 'Nachrichten hinzufĂĽgen'; +$labels['aclp'] = 'Senden an'; +$labels['aclc'] = 'Unterordner erstellen'; +$labels['aclk'] = 'Unterordner erstellen'; +$labels['acld'] = 'Nachrichten als gelöscht markieren'; +$labels['aclt'] = 'Nachrichten als gelöscht markieren'; +$labels['acle'] = 'EndgĂĽltig löschen'; +$labels['aclx'] = 'Ordner löschen'; +$labels['acla'] = 'Verwalten'; +$labels['acln'] = 'Nachrichten auszeichnen'; +$labels['aclfull'] = 'Vollzugriff'; +$labels['aclother'] = 'Andere'; +$labels['aclread'] = 'Lesen'; +$labels['aclwrite'] = 'Schreiben'; +$labels['acldelete'] = 'Löschen'; +$labels['shortacll'] = 'Sichtbar'; +$labels['shortaclr'] = 'Lesen'; +$labels['shortacls'] = 'Behalte'; +$labels['shortaclw'] = 'Schreiben'; +$labels['shortacli'] = 'HinzufĂĽgen'; +$labels['shortaclp'] = 'Senden an'; +$labels['shortaclc'] = 'Erstellen'; +$labels['shortaclk'] = 'Erstellen'; +$labels['shortacld'] = 'Löschen'; +$labels['shortaclt'] = 'Löschen'; +$labels['shortacle'] = 'EndgĂĽltig löschen'; +$labels['shortaclx'] = 'Ordner löschen'; +$labels['shortacla'] = 'Verwalten'; +$labels['shortacln'] = 'Auszeichnen'; +$labels['shortaclother'] = 'Andere'; +$labels['shortaclread'] = 'Lesen'; +$labels['shortaclwrite'] = 'Schreiben'; +$labels['shortacldelete'] = 'Löschen'; +$labels['longacll'] = 'Der Ordner ist sichtbar und kann abonniert werden'; +$labels['longaclr'] = 'Der Ordnerinhalt kann gelesen werden'; +$labels['longacls'] = 'Der Lesestatus von Nachrichten kann geändert werden'; +$labels['longaclw'] = 'Alle Nachrichten-Flags und SchlĂĽsselwörter ausser "Gelesen" und "Gelöscht" können geändert werden'; +$labels['longacli'] = 'Nachrichten können in diesen Ordner kopiert oder verschoben werden'; +$labels['longaclp'] = 'Nachrichten können an diesen Ordner gesendet werden'; +$labels['longaclc'] = 'Unterordner können in diesem Ordner erstellt oder umbenannt werden'; +$labels['longaclk'] = 'Unterordner können in diesem Ordner erstellt oder umbenannt werden'; +$labels['longacld'] = 'Der "gelöscht" Status von Nachrichten kann geändert werden'; +$labels['longaclt'] = 'Der "gelöscht" Status von Nachrichten kann geändert werden'; +$labels['longacle'] = 'Als "gelöscht" markierte Nachrichten können entfernt werden'; +$labels['longaclx'] = 'Der Ordner kann gelöscht oder umbenannt werden'; +$labels['longacla'] = 'Die Zugriffsrechte des Ordners können geändert werden'; +$labels['longacln'] = 'Geteilte Nachrichten-Auszeichnungen (Metadaten) können nicht geändert werden'; +$labels['longaclfull'] = 'Vollzugriff inklusive Ordner-Verwaltung'; +$labels['longaclread'] = 'Der Ordnerinhalt kann gelesen werden'; +$labels['longaclwrite'] = 'Nachrichten können markiert, an den Ordner gesendet und in den Ordner kopiert oder verschoben werden'; +$labels['longacldelete'] = 'Nachrichten können gelöscht werden'; +$labels['longaclother'] = 'Andere Zugriffsrechte '; +$labels['ariasummaryacltable'] = 'Liste der Zugriffsrechte'; +$labels['arialabelaclactions'] = 'Listen-Aktionen'; +$labels['arialabelaclform'] = 'Zugriffsrechte (Formular)'; +$messages['deleting'] = 'Zugriffsrechte werden entzogen...'; +$messages['saving'] = 'Zugriffsrechte werden gespeichert...'; +$messages['updatesuccess'] = 'Zugriffsrechte erfolgreich geändert'; +$messages['deletesuccess'] = 'Zugriffsrechte erfolgreich entzogen'; +$messages['createsuccess'] = 'Zugriffsrechte erfolgreich hinzugefĂĽgt'; +$messages['updateerror'] = 'Zugriffsrechte konnten nicht geändert werden'; +$messages['deleteerror'] = 'Zugriffsrechte konnten nicht entzogen werden'; +$messages['createerror'] = 'Zugriffsrechte konnten nicht gewährt werden'; +$messages['deleteconfirm'] = 'Sind Sie sicher, dass Sie die Zugriffsrechte den ausgewählten Benutzern entziehen möchten?'; +$messages['norights'] = 'Es wurden keine Zugriffsrechte ausgewählt!'; +$messages['nouser'] = 'Es wurde kein Benutzer ausgewählt!'; +?> diff --git a/data/web/rc/plugins/acl/localization/de_DE.inc b/data/web/rc/plugins/acl/localization/de_DE.inc new file mode 100644 index 00000000..3de7b332 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/de_DE.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Freigabe'; +$labels['myrights'] = 'Zugriffsrechte'; +$labels['username'] = 'Benutzer:'; +$labels['advanced'] = 'Erweiterter Modus'; +$labels['newuser'] = 'Eintrag hinzufĂĽgen'; +$labels['editperms'] = 'Zugriffsrechte bearbeiten'; +$labels['actions'] = 'Zugriffsrechteaktionen …'; +$labels['anyone'] = 'Alle Benutzer (anyone)'; +$labels['anonymous'] = 'Gäste (anonymous)'; +$labels['identifier'] = 'Bezeichnung'; +$labels['acll'] = 'Sichtbar'; +$labels['aclr'] = 'Nachrichten lesen'; +$labels['acls'] = 'Lesestatus ändern'; +$labels['aclw'] = 'Flags schreiben'; +$labels['acli'] = 'Nachrichten hinzufĂĽgen'; +$labels['aclp'] = 'Senden an'; +$labels['aclc'] = 'Unterordner erstellen'; +$labels['aclk'] = 'Unterordner erstellen'; +$labels['acld'] = 'Nachrichten als gelöscht markieren'; +$labels['aclt'] = 'Nachrichten als gelöscht markieren'; +$labels['acle'] = 'EndgĂĽltig löschen'; +$labels['aclx'] = 'Ordner löschen'; +$labels['acla'] = 'Verwalten'; +$labels['acln'] = 'Nachrichten kommentieren'; +$labels['aclfull'] = 'Vollzugriff'; +$labels['aclother'] = 'Andere'; +$labels['aclread'] = 'Lesen'; +$labels['aclwrite'] = 'Schreiben'; +$labels['acldelete'] = 'Löschen'; +$labels['shortacll'] = 'Sichtbar'; +$labels['shortaclr'] = 'Lesen'; +$labels['shortacls'] = 'Lesestatus'; +$labels['shortaclw'] = 'Schreiben'; +$labels['shortacli'] = 'HinzufĂĽgen'; +$labels['shortaclp'] = 'Senden an'; +$labels['shortaclc'] = 'Erstellen'; +$labels['shortaclk'] = 'Erstellen'; +$labels['shortacld'] = 'Löschen'; +$labels['shortaclt'] = 'Löschen'; +$labels['shortacle'] = 'EndgĂĽltig löschen'; +$labels['shortaclx'] = 'Ordner löschen'; +$labels['shortacla'] = 'Verwalten'; +$labels['shortacln'] = 'Kommentieren'; +$labels['shortaclother'] = 'Andere'; +$labels['shortaclread'] = 'Lesen'; +$labels['shortaclwrite'] = 'Schreiben'; +$labels['shortacldelete'] = 'Löschen'; +$labels['longacll'] = 'Der Ordner ist sichtbar und kann abonniert werden'; +$labels['longaclr'] = 'Der Ordnerinhalt kann gelesen werden'; +$labels['longacls'] = 'Der Lesestatus von Nachrichten kann geändert werden'; +$labels['longaclw'] = 'Alle Nachrichten-Flags und SchlĂĽsselwörter auĂźer "Gelesen" und "Gelöscht" können geändert werden'; +$labels['longacli'] = 'Nachrichten können in diesen Ordner kopiert oder verschoben werden'; +$labels['longaclp'] = 'Nachrichten können an diesen Ordner gesendet werden'; +$labels['longaclc'] = 'Unterordner können in diesem Ordner erstellt oder umbenannt werden'; +$labels['longaclk'] = 'Unterordner können in diesem Ordner erstellt oder umbenannt werden'; +$labels['longacld'] = 'Der "gelöscht" Status von Nachrichten kann geändert werden'; +$labels['longaclt'] = 'Der "gelöscht" Status von Nachrichten kann geändert werden'; +$labels['longacle'] = 'Als "gelöscht" markiert Nachrichten können gelöscht werden.'; +$labels['longaclx'] = 'Der Ordner kann gelöscht oder umbenannt werden'; +$labels['longacla'] = 'Die Zugriffsrechte des Ordners können geändert werden'; +$labels['longacln'] = 'Nachrichten Metadaten (Vermerke) können geändert werden'; +$labels['longaclfull'] = 'Vollzugriff inklusive Ordner-Verwaltung'; +$labels['longaclread'] = 'Der Ordnerinhalt kann gelesen werden'; +$labels['longaclwrite'] = 'Nachrichten können markiert, an den Ordner gesendet und in den Ordner kopiert oder verschoben werden'; +$labels['longacldelete'] = 'Nachrichten können gelöscht werden'; +$labels['longaclother'] = 'Andere Zugriffsrechte'; +$labels['ariasummaryacltable'] = 'Liste von Zugriffsrechten'; +$labels['arialabelaclactions'] = 'Aktionen anzeigen'; +$labels['arialabelaclform'] = 'Zugriffsrechteformular'; +$messages['deleting'] = 'Zugriffsrechte werden entzogen...'; +$messages['saving'] = 'Zugriffsrechte werden gewährt...'; +$messages['updatesuccess'] = 'Zugriffsrechte erfolgreich geändert'; +$messages['deletesuccess'] = 'Zugriffsrechte erfolgreich entzogen'; +$messages['createsuccess'] = 'Zugriffsrechte erfolgreich gewährt'; +$messages['updateerror'] = 'Zugriffsrechte konnten nicht geändert werden'; +$messages['deleteerror'] = 'Zugriffsrechte konnten nicht entzogen werden'; +$messages['createerror'] = 'Zugriffsrechte konnten nicht gewährt werden'; +$messages['deleteconfirm'] = 'Sind Sie sicher, daĂź Sie die Zugriffsrechte den ausgewählten Benutzern entziehen möchten?'; +$messages['norights'] = 'Es wurden keine Zugriffsrechte ausgewählt!'; +$messages['nouser'] = 'Es wurde kein Benutzer ausgewählt!'; +?> diff --git a/data/web/rc/plugins/acl/localization/el_GR.inc b/data/web/rc/plugins/acl/localization/el_GR.inc new file mode 100644 index 00000000..0ba63463 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/el_GR.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Κοινή χĎήĎη'; +$labels['myrights'] = 'Δικαιώματα ΠĎĎŚĎβαĎης '; +$labels['username'] = 'ΧĎήĎτης:'; +$labels['advanced'] = 'ΠĎοηγμένη λειτουĎγία'; +$labels['newuser'] = 'ΠĎÎżĎθήκη καταχώĎηĎης '; +$labels['editperms'] = 'Μεταβολή δικαιωμάτων'; +$labels['actions'] = 'ΕνέĎγειες δικαιωμάτων Ď€ĎĎŚĎβαĎης...'; +$labels['anyone'] = 'Όλοι οι χĎήĎτες (οποιοĎδήποτε)'; +$labels['anonymous'] = 'ΕπιĎκέπτες (ανώνυμοι)'; +$labels['identifier'] = 'ΑναγνωĎÎąĎτικό'; +$labels['acll'] = 'ΑναζήτηĎη'; +$labels['aclr'] = 'ΔιαβάĎτε τα μηνύματα '; +$labels['acls'] = 'ΔιατήĎηĎη κατάĎταĎης ανάγνωĎης'; +$labels['aclw'] = 'ΡυθμίĎεις εγγĎαφής'; +$labels['acli'] = 'ΕιĎάγωγη (ΑντιγĎαφή Ďε) '; +$labels['aclp'] = 'ΚαταχώĎηĎη'; +$labels['aclc'] = 'ΔημιουĎγία υποφακέλων'; +$labels['aclk'] = 'ΔημιουĎγία υποφακέλων'; +$labels['acld'] = 'ΔιαγĎαφή μηνυμάτων'; +$labels['aclt'] = 'ΔιαγĎαφή μηνυμάτων'; +$labels['acle'] = 'Απαλοιφή'; +$labels['aclx'] = 'ΔιαγĎαφή φακέλου'; +$labels['acla'] = 'ΔιαχείĎÎąĎη'; +$labels['acln'] = 'ΠĎÎżĎθήκη υπομνήματος Ďτα μηνύματα'; +$labels['aclfull'] = 'ΠλήĎης Ď€ĎĎŚĎβαĎη'; +$labels['aclother'] = 'Άλλο'; +$labels['aclread'] = 'ΑνάγνωĎη'; +$labels['aclwrite'] = 'ΕγγĎαφή'; +$labels['acldelete'] = 'ΔιαγĎαφή'; +$labels['shortacll'] = 'ΑναζήτηĎη'; +$labels['shortaclr'] = 'ΑνάγνωĎη'; +$labels['shortacls'] = 'ΤήĎηĎη'; +$labels['shortaclw'] = 'ΕγγĎαφή'; +$labels['shortacli'] = 'ΕιĎαγωγή'; +$labels['shortaclp'] = 'ΚαταχώĎηĎη'; +$labels['shortaclc'] = 'ΔημιουĎγία'; +$labels['shortaclk'] = 'ΔημιουĎγία'; +$labels['shortacld'] = 'ΔιαγĎαφή'; +$labels['shortaclt'] = 'ΔιαγĎαφή'; +$labels['shortacle'] = 'Απαλοιφή'; +$labels['shortaclx'] = 'ΔιαγĎαφή φακέλου'; +$labels['shortacla'] = 'ΔιαχείĎÎąĎη'; +$labels['shortacln'] = 'ΠĎÎżĎθήκη υπομνήματος'; +$labels['shortaclother'] = 'Άλλο'; +$labels['shortaclread'] = 'ΑνάγνωĎη'; +$labels['shortaclwrite'] = 'ΕγγĎαφή'; +$labels['shortacldelete'] = 'ΔιαγĎαφή'; +$labels['longacll'] = 'Îź φάκελος είναι ÎżĎατός Ďτους καταλόγους και μποĎείτε να εγγĎαφείτε Ďε αυτόν'; +$labels['longaclr'] = 'Îź φάκελος μποĎεί να Ď€ĎÎżĎπελαĎτεί για ανάγνωĎη '; +$labels['longacls'] = 'Η κατάĎταĎη ανάγνωĎης μηνυμάτων μποĎεί να αλλαχθεί'; +$labels['longaclw'] = 'ΜποĎούν να μεταβληθούν οι καταĎτάĎεις μηνυμάτων και οι λέξεις κλειδιά, εκτός από τις καταĎτάĎεις ΑνάγνωĎης και ΔιαγĎαφής'; +$labels['longacli'] = 'Τα μηνύματα μποĎούν να εγγĎαφούν ή να αντιγĎαφούν Ďτον φάκελο '; +$labels['longaclp'] = 'Τα μηνύματα μποĎούν να τοποθετηθούν Ďε αυτόν Ď„Îż φάκελο '; +$labels['longaclc'] = 'ΜποĎούν να δημιουĎγηθούν (ή να μετονομαĎτούν) φάκελοι ακĎιβώς κάτω από αυτόν τον φάκελο '; +$labels['longaclk'] = 'ΜποĎούν να δημιουĎγηθούν (ή να μετονομαĎτούν) φάκελοι ακĎιβώς κάτω από αυτόν τον φάκελο '; +$labels['longacld'] = 'Η κατάĎταĎη διαγĎαφής μηνυμάτων μποĎεί να μεταβληθεί'; +$labels['longaclt'] = 'Η κατάĎταĎη διαγĎαφής μηνυμάτων μποĎεί να μεταβληθεί'; +$labels['longacle'] = 'Τα μηνύματα μποĎούν να απαλειφθούν'; +$labels['longaclx'] = 'Îź φάκελος μποĎεί να μετονομαĎθεί ή να διαγĎαφεί'; +$labels['longacla'] = 'Τα δικαιώματα Ď€ĎĎŚĎβαĎης Ďτον φάκελο μποĎούν να μεταβληθούν'; +$labels['longacln'] = 'Το διαμοιĎαζόμενο υπόμνημα των μηνυμάτων είναι δυνατό να μεταβληθεί'; +$labels['longaclfull'] = 'ΠλήĎης έλεγχος ĎυμπεĎιλαμβανόμενης της διαχείĎÎąĎης φακέλων'; +$labels['longaclread'] = 'Îź φάκελος είναι δυνατό να Ď€ĎÎżĎπελαĎτεί για ανάγνωĎη'; +$labels['longaclwrite'] = 'Τα μηνύματα μποĎούν να Ďημαδεύονται, να εγγĎάφονται ή να αντιγĎάφονται Ďτον φάκελο'; +$labels['longacldelete'] = 'Τα μηνύματα μποĎούν να διαγĎαφούν'; +$labels['longaclother'] = 'Άλλα δικαιώματα Ď€ĎĎŚĎβαĎης'; +$labels['ariasummaryacltable'] = 'ΛίĎτα δικαιωμάτων Ď€ĎĎŚĎβαĎης'; +$labels['arialabelaclactions'] = 'ΛίĎτα ενεĎγειών'; +$labels['arialabelaclform'] = 'ΦόĎμα δικαιωμάτων Ď€ĎĎŚĎβαĎης'; +$messages['deleting'] = 'ΔιαγĎαφή των δικαιωμάτων Ď€ĎĎŚĎβαĎης...'; +$messages['saving'] = 'ΑποθήκευĎη δικαιώματων Ď€ĎĎŚĎβαĎης...'; +$messages['updatesuccess'] = 'Επιτυχής μεταβολή των δικαιωμάτων Ď€ĎĎŚĎβαĎης'; +$messages['deletesuccess'] = 'Επιτυχής διαγĎαφή των δικαιωμάτων Ď€ĎĎŚĎβαĎης'; +$messages['createsuccess'] = 'Επιτυχής Ď€ĎÎżĎθήκη δικαιωμάτων Ď€ĎĎŚĎβαĎης'; +$messages['updateerror'] = 'Δεν είναι δυνατή η ενημέĎωĎη των δικαιωμάτων Ď€ĎĎŚĎβαĎης'; +$messages['deleteerror'] = 'Δεν είναι δυνατή η διαγĎαφή των δικαιωμάτων Ď€ĎĎŚĎβαĎης '; +$messages['createerror'] = 'Δεν είναι δυνατή η Ď€ĎÎżĎθήκη δικαιωμάτων Ď€ĎĎŚĎβαĎης '; +$messages['deleteconfirm'] = 'ΕίĎτε βέβαιοι ĎŚĎ„Îą θέλετε να καταĎγήĎετε τα δικαιώματα Ď€ĎĎŚĎβαĎης του επιλεγμένου(ων) χĎήĎτη(ών);'; +$messages['norights'] = 'Κανένα δικαίωμα δεν έχει καθοĎÎąĎτεί!'; +$messages['nouser'] = 'Το όνομα χĎήĎτη δεν έχει καθοĎÎąĎτεί! '; +?> diff --git a/data/web/rc/plugins/acl/localization/en_CA.inc b/data/web/rc/plugins/acl/localization/en_CA.inc new file mode 100644 index 00000000..ae9cb8bb --- /dev/null +++ b/data/web/rc/plugins/acl/localization/en_CA.inc @@ -0,0 +1,94 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Sharing'; +$labels['myrights'] = 'Access Rights'; +$labels['username'] = 'User:'; +$labels['advanced'] = 'Advanced mode'; +$labels['newuser'] = 'Add entry'; +$labels['editperms'] = 'Edit permissions'; +$labels['actions'] = 'Access right actions...'; +$labels['anyone'] = 'All users (anyone)'; +$labels['anonymous'] = 'Guests (anonymous)'; +$labels['identifier'] = 'Identifier'; +$labels['acll'] = 'Lookup'; +$labels['aclr'] = 'Read messages'; +$labels['acls'] = 'Keep Seen state'; +$labels['aclw'] = 'Write flags'; +$labels['acli'] = 'Insert (Copy into)'; +$labels['aclp'] = 'Post'; +$labels['aclc'] = 'Create subfolders'; +$labels['aclk'] = 'Create subfolders'; +$labels['acld'] = 'Delete messages'; +$labels['aclt'] = 'Delete messages'; +$labels['acle'] = 'Expunge'; +$labels['aclx'] = 'Delete folder'; +$labels['acla'] = 'Administer'; +$labels['acln'] = 'Annotate messages'; +$labels['aclfull'] = 'Full control'; +$labels['aclother'] = 'Other'; +$labels['aclread'] = 'Read'; +$labels['aclwrite'] = 'Write'; +$labels['acldelete'] = 'Delete'; +$labels['shortacll'] = 'Lookup'; +$labels['shortaclr'] = 'Read'; +$labels['shortacls'] = 'Keep'; +$labels['shortaclw'] = 'Write'; +$labels['shortacli'] = 'Insert'; +$labels['shortaclp'] = 'Post'; +$labels['shortaclc'] = 'Create'; +$labels['shortaclk'] = 'Create'; +$labels['shortacld'] = 'Delete'; +$labels['shortaclt'] = 'Delete'; +$labels['shortacle'] = 'Expunge'; +$labels['shortaclx'] = 'Folder delete'; +$labels['shortacla'] = 'Administer'; +$labels['shortacln'] = 'Annotate'; +$labels['shortaclother'] = 'Other'; +$labels['shortaclread'] = 'Read'; +$labels['shortaclwrite'] = 'Write'; +$labels['shortacldelete'] = 'Delete'; +$labels['longacll'] = 'The folder is visible on lists and can be subscribed to'; +$labels['longaclr'] = 'The folder can be opened for reading'; +$labels['longacls'] = 'Messages Seen flag can be changed'; +$labels['longaclw'] = 'Messages flags and keywords can be changed, except Seen and Deleted'; +$labels['longacli'] = 'Messages can be written or copied to the folder'; +$labels['longaclp'] = 'Messages can be posted to this folder'; +$labels['longaclc'] = 'Folders can be created (or renamed) directly under this folder'; +$labels['longaclk'] = 'Folders can be created (or renamed) directly under this folder'; +$labels['longacld'] = 'Messages Delete flag can be changed'; +$labels['longaclt'] = 'Messages Delete flag can be changed'; +$labels['longacle'] = 'Messages can be expunged'; +$labels['longaclx'] = 'The folder can be deleted or renamed'; +$labels['longacla'] = 'The folder access rights can be changed'; +$labels['longacln'] = 'Messages shared metadata (annotations) can be changed'; +$labels['longaclfull'] = 'Full control including folder administration'; +$labels['longaclread'] = 'The folder can be opened for reading'; +$labels['longaclwrite'] = 'Messages can be marked, written or copied to the folder'; +$labels['longacldelete'] = 'Messages can be deleted'; +$messages['deleting'] = 'Deleting access rights...'; +$messages['saving'] = 'Saving access rights...'; +$messages['updatesuccess'] = 'Successfully changed access rights'; +$messages['deletesuccess'] = 'Successfully deleted access rights'; +$messages['createsuccess'] = 'Successfully added access rights'; +$messages['updateerror'] = 'Unable to update access rights'; +$messages['deleteerror'] = 'Unable to delete access rights'; +$messages['createerror'] = 'Unable to add access rights'; +$messages['deleteconfirm'] = 'Are you sure, you want to remove access rights of selected user(s)?'; +$messages['norights'] = 'No rights has been specified!'; +$messages['nouser'] = 'No username has been specified!'; +?> diff --git a/data/web/rc/plugins/acl/localization/en_GB.inc b/data/web/rc/plugins/acl/localization/en_GB.inc new file mode 100644 index 00000000..cd6393a6 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/en_GB.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Sharing'; +$labels['myrights'] = 'Access Rights'; +$labels['username'] = 'User:'; +$labels['advanced'] = 'Advanced mode'; +$labels['newuser'] = 'Add entry'; +$labels['editperms'] = 'Edit permissions'; +$labels['actions'] = 'Access right actions...'; +$labels['anyone'] = 'All users (anyone)'; +$labels['anonymous'] = 'Guests (anonymous)'; +$labels['identifier'] = 'Identifier'; +$labels['acll'] = 'Look-up'; +$labels['aclr'] = 'Read messages'; +$labels['acls'] = 'Keep Seen state'; +$labels['aclw'] = 'Write flags'; +$labels['acli'] = 'Insert (copy into)'; +$labels['aclp'] = 'Post'; +$labels['aclc'] = 'Create sub-folders'; +$labels['aclk'] = 'Create sub-folders'; +$labels['acld'] = 'Delete messages'; +$labels['aclt'] = 'Delete messages'; +$labels['acle'] = 'Expunge'; +$labels['aclx'] = 'Delete folder'; +$labels['acla'] = 'Administer'; +$labels['acln'] = 'Annotate messages'; +$labels['aclfull'] = 'Full control'; +$labels['aclother'] = 'Other'; +$labels['aclread'] = 'Read'; +$labels['aclwrite'] = 'Write'; +$labels['acldelete'] = 'Delete'; +$labels['shortacll'] = 'Look-up'; +$labels['shortaclr'] = 'Read'; +$labels['shortacls'] = 'Keep'; +$labels['shortaclw'] = 'Write'; +$labels['shortacli'] = 'Insert'; +$labels['shortaclp'] = 'Post'; +$labels['shortaclc'] = 'Create'; +$labels['shortaclk'] = 'Create'; +$labels['shortacld'] = 'Delete'; +$labels['shortaclt'] = 'Delete'; +$labels['shortacle'] = 'Expunge'; +$labels['shortaclx'] = 'Folder delete'; +$labels['shortacla'] = 'Administer'; +$labels['shortacln'] = 'Annotate'; +$labels['shortaclother'] = 'Other'; +$labels['shortaclread'] = 'Read'; +$labels['shortaclwrite'] = 'Write'; +$labels['shortacldelete'] = 'Delete'; +$labels['longacll'] = 'The folder is visible on lists and can be subscribed to.'; +$labels['longaclr'] = 'The folder can be opened for reading'; +$labels['longacls'] = 'Messages Seen flag can be changed'; +$labels['longaclw'] = 'Messages flags and keywords can be changed, except Seen and Deleted.'; +$labels['longacli'] = 'Messages can be written or copied to the folder'; +$labels['longaclp'] = 'Messages can be posted to this folder'; +$labels['longaclc'] = 'Folders can be created (or renamed) directly under this folder'; +$labels['longaclk'] = 'Folders can be created (or renamed) directly under this folder'; +$labels['longacld'] = 'Messages Delete flag can be changed'; +$labels['longaclt'] = 'Messages Delete flag can be changed'; +$labels['longacle'] = 'Messages can be expunged'; +$labels['longaclx'] = 'The folder can be deleted or renamed'; +$labels['longacla'] = 'The folder access rights can be changed'; +$labels['longacln'] = 'Messages shared metadata (annotations) can be changed'; +$labels['longaclfull'] = 'Full control including folder administration'; +$labels['longaclread'] = 'The folder can be opened for reading'; +$labels['longaclwrite'] = 'Messages can be marked, written or copied to the folder'; +$labels['longacldelete'] = 'Messages can be deleted'; +$labels['longaclother'] = 'Other access rights'; +$labels['ariasummaryacltable'] = 'List of access rights'; +$labels['arialabelaclactions'] = 'List actions'; +$labels['arialabelaclform'] = 'Access rights form'; +$messages['deleting'] = 'Deleting access rights...'; +$messages['saving'] = 'Saving access rights...'; +$messages['updatesuccess'] = 'Successfully changed access rights'; +$messages['deletesuccess'] = 'Successfully deleted access rights'; +$messages['createsuccess'] = 'Successfully added access rights'; +$messages['updateerror'] = 'Unable to update access rights'; +$messages['deleteerror'] = 'Unable to delete access rights'; +$messages['createerror'] = 'Unable to add access rights'; +$messages['deleteconfirm'] = 'Are you sure, you want to remove access rights of selected user(s)?'; +$messages['norights'] = 'No rights has been specified!'; +$messages['nouser'] = 'No username has been specified!'; +?> diff --git a/data/web/rc/plugins/acl/localization/en_US.inc b/data/web/rc/plugins/acl/localization/en_US.inc new file mode 100644 index 00000000..ff8dde76 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/en_US.inc @@ -0,0 +1,108 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ + +$labels['sharing'] = 'Sharing'; +$labels['myrights'] = 'Access Rights'; +$labels['username'] = 'User:'; +$labels['advanced'] = 'Advanced mode'; +$labels['newuser'] = 'Add entry'; +$labels['editperms'] = 'Edit permissions'; +$labels['actions'] = 'Access right actions...'; +$labels['anyone'] = 'All users (anyone)'; +$labels['anonymous'] = 'Guests (anonymous)'; +$labels['identifier'] = 'Identifier'; + +$labels['acll'] = 'Lookup'; +$labels['aclr'] = 'Read messages'; +$labels['acls'] = 'Keep Seen state'; +$labels['aclw'] = 'Write flags'; +$labels['acli'] = 'Insert (Copy into)'; +$labels['aclp'] = 'Post'; +$labels['aclc'] = 'Create subfolders'; +$labels['aclk'] = 'Create subfolders'; +$labels['acld'] = 'Delete messages'; +$labels['aclt'] = 'Delete messages'; +$labels['acle'] = 'Expunge'; +$labels['aclx'] = 'Delete folder'; +$labels['acla'] = 'Administer'; +$labels['acln'] = 'Annotate messages'; + +$labels['aclfull'] = 'Full control'; +$labels['aclother'] = 'Other'; +$labels['aclread'] = 'Read'; +$labels['aclwrite'] = 'Write'; +$labels['acldelete'] = 'Delete'; + +$labels['shortacll'] = 'Lookup'; +$labels['shortaclr'] = 'Read'; +$labels['shortacls'] = 'Keep'; +$labels['shortaclw'] = 'Write'; +$labels['shortacli'] = 'Insert'; +$labels['shortaclp'] = 'Post'; +$labels['shortaclc'] = 'Create'; +$labels['shortaclk'] = 'Create'; +$labels['shortacld'] = 'Delete'; +$labels['shortaclt'] = 'Delete'; +$labels['shortacle'] = 'Expunge'; +$labels['shortaclx'] = 'Folder delete'; +$labels['shortacla'] = 'Administer'; +$labels['shortacln'] = 'Annotate'; + +$labels['shortaclother'] = 'Other'; +$labels['shortaclread'] = 'Read'; +$labels['shortaclwrite'] = 'Write'; +$labels['shortacldelete'] = 'Delete'; + +$labels['longacll'] = 'The folder is visible on lists and can be subscribed to'; +$labels['longaclr'] = 'The folder can be opened for reading'; +$labels['longacls'] = 'Messages Seen flag can be changed'; +$labels['longaclw'] = 'Messages flags and keywords can be changed, except Seen and Deleted'; +$labels['longacli'] = 'Messages can be written or copied to the folder'; +$labels['longaclp'] = 'Messages can be posted to this folder'; +$labels['longaclc'] = 'Folders can be created (or renamed) directly under this folder'; +$labels['longaclk'] = 'Folders can be created (or renamed) directly under this folder'; +$labels['longacld'] = 'Messages Delete flag can be changed'; +$labels['longaclt'] = 'Messages Delete flag can be changed'; +$labels['longacle'] = 'Messages can be expunged'; +$labels['longaclx'] = 'The folder can be deleted or renamed'; +$labels['longacla'] = 'The folder access rights can be changed'; +$labels['longacln'] = 'Messages shared metadata (annotations) can be changed'; + +$labels['longaclfull'] = 'Full control including folder administration'; +$labels['longaclread'] = 'The folder can be opened for reading'; +$labels['longaclwrite'] = 'Messages can be marked, written or copied to the folder'; +$labels['longacldelete'] = 'Messages can be deleted'; +$labels['longaclother'] = 'Other access rights'; + +$labels['ariasummaryacltable'] = 'List of access rights'; +$labels['arialabelaclactions'] = 'List actions'; +$labels['arialabelaclform'] = 'Access rights form'; + +$messages['deleting'] = 'Deleting access rights...'; +$messages['saving'] = 'Saving access rights...'; +$messages['updatesuccess'] = 'Successfully changed access rights'; +$messages['deletesuccess'] = 'Successfully deleted access rights'; +$messages['createsuccess'] = 'Successfully added access rights'; +$messages['updateerror'] = 'Unable to update access rights'; +$messages['deleteerror'] = 'Unable to delete access rights'; +$messages['createerror'] = 'Unable to add access rights'; +$messages['deleteconfirm'] = 'Are you sure, you want to remove access rights of selected user(s)?'; +$messages['norights'] = 'No rights has been specified!'; +$messages['nouser'] = 'No username has been specified!'; + +?> diff --git a/data/web/rc/plugins/acl/localization/eo.inc b/data/web/rc/plugins/acl/localization/eo.inc new file mode 100644 index 00000000..e06a38ff --- /dev/null +++ b/data/web/rc/plugins/acl/localization/eo.inc @@ -0,0 +1,63 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Kunhavigado'; +$labels['myrights'] = 'Atingrajtoj'; +$labels['username'] = 'Uzanto:'; +$labels['newuser'] = 'Aldoni eron'; +$labels['actions'] = 'Agoj de atingrajtoj...'; +$labels['anyone'] = 'Äiuj uzantoj (iu ajn)'; +$labels['anonymous'] = 'Gasto (sennome)'; +$labels['identifier'] = 'Identigilo'; +$labels['acll'] = 'Elserĉo'; +$labels['aclr'] = 'Legi mesaÄťojn'; +$labels['acls'] = 'Manteni legitan staton'; +$labels['acli'] = 'Enmeti (alglui)'; +$labels['aclp'] = 'AfiĹťi'; +$labels['aclc'] = 'Krei subdosierujojn'; +$labels['aclk'] = 'Krei subdosierujojn'; +$labels['acld'] = 'Forigi mesaÄťojn'; +$labels['aclt'] = 'Forigi mesaÄťojn'; +$labels['aclx'] = 'Forigi dosierujon'; +$labels['acla'] = 'Administri'; +$labels['aclfull'] = 'Plena kontrolo'; +$labels['aclother'] = 'Alia'; +$labels['aclread'] = 'Legi'; +$labels['aclwrite'] = 'Skribi'; +$labels['acldelete'] = 'Forigi'; +$labels['shortacll'] = 'Elserĉo'; +$labels['shortaclr'] = 'Legi'; +$labels['shortacls'] = 'Manteni'; +$labels['shortaclw'] = 'Skribi'; +$labels['shortacli'] = 'Enmeti'; +$labels['shortaclp'] = 'AfiĹťi'; +$labels['shortaclc'] = 'Krei'; +$labels['shortaclk'] = 'Krei'; +$labels['shortacld'] = 'Forigi'; +$labels['shortaclt'] = 'Forigi'; +$labels['shortaclx'] = 'Forigo de dosierujo'; +$labels['shortacla'] = 'Administri'; +$labels['shortaclother'] = 'Alia'; +$labels['shortaclread'] = 'Legi'; +$labels['shortaclwrite'] = 'Skribi'; +$labels['shortacldelete'] = 'Forigi'; +$labels['longacll'] = 'La dosierujo videblas en listoj kaj oni povas aboni al Äťi'; +$labels['longaclr'] = 'La dosierujo malfermeblas por legado'; +$labels['longacli'] = 'MesaÄťoj skribeblas aĹ­ kopieblas en la dosierujo'; +$labels['longaclp'] = 'MesaÄťoj afiĹťeblas en ĉi tiu dosierujo'; +$labels['longaclread'] = 'La dosierujo malfermeblas por legado'; +?> diff --git a/data/web/rc/plugins/acl/localization/es_419.inc b/data/web/rc/plugins/acl/localization/es_419.inc new file mode 100644 index 00000000..3ec167c6 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/es_419.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Compartiendo'; +$labels['myrights'] = 'Permisos de acceso'; +$labels['username'] = 'Usuario:'; +$labels['advanced'] = 'Modo avanzado'; +$labels['newuser'] = 'Añadir entrada'; +$labels['editperms'] = 'Editar permisos'; +$labels['actions'] = 'Acciones de derecho de acceso...'; +$labels['anyone'] = 'Todos los usuarios (cualquiera)'; +$labels['anonymous'] = 'Invitados (anĂłnimos)'; +$labels['identifier'] = 'Identificador'; +$labels['acll'] = 'BĂşsqueda'; +$labels['aclr'] = 'Leer mensajes'; +$labels['acls'] = 'Mantener estado de visto'; +$labels['aclw'] = 'Etiquetas de escritura'; +$labels['acli'] = 'Insertar (copiar a)'; +$labels['aclp'] = 'Publicar'; +$labels['aclc'] = 'Crear subcarpetas'; +$labels['aclk'] = 'Crear subcarpetas'; +$labels['acld'] = 'Eliminar mensajes'; +$labels['aclt'] = 'Eliminar mensajes'; +$labels['acle'] = 'Borrar'; +$labels['aclx'] = 'Eliminar carpeta'; +$labels['acla'] = 'Administrar'; +$labels['acln'] = 'Anotar mensajes'; +$labels['aclfull'] = 'Control total'; +$labels['aclother'] = 'Otro'; +$labels['aclread'] = 'Leer'; +$labels['aclwrite'] = 'Escribir'; +$labels['acldelete'] = 'Eliminar'; +$labels['shortacll'] = 'BĂşsqueda'; +$labels['shortaclr'] = 'Leer'; +$labels['shortacls'] = 'Mantener'; +$labels['shortaclw'] = 'Escribir'; +$labels['shortacli'] = 'Insertar'; +$labels['shortaclp'] = 'Publicar'; +$labels['shortaclc'] = 'Crear'; +$labels['shortaclk'] = 'Crear'; +$labels['shortacld'] = 'Eliminar'; +$labels['shortaclt'] = 'Eliminar'; +$labels['shortacle'] = 'Borrar'; +$labels['shortaclx'] = 'Eliminar carpeta'; +$labels['shortacla'] = 'Administrar'; +$labels['shortacln'] = 'Anotar'; +$labels['shortaclother'] = 'Otro'; +$labels['shortaclread'] = 'Leer'; +$labels['shortaclwrite'] = 'Escribir'; +$labels['shortacldelete'] = 'Eliminar'; +$labels['longacll'] = 'La carpeta es visible en listas y se la puede suscribir'; +$labels['longaclr'] = 'La carpeta puede ser abierta para lectura'; +$labels['longacls'] = 'Etiqueta de mensajes leĂ­dos puede ser cambiada'; +$labels['longaclw'] = 'Las etiquetas de mensajes y palabras clave puede ser cambiada, excepto LeĂ­dos y Eliminados'; +$labels['longacli'] = 'Se pueden escribir o copiar mensajes a la carpeta'; +$labels['longaclp'] = 'Los mensajes pueden ser publicados en esta carpeta'; +$labels['longaclc'] = 'Las carpetas pueden ser creadas (o renombradas) directamente desde esta carpeta'; +$labels['longaclk'] = 'Las carpetas pueden ser creadas (o renombradas) directamente desde esta carpeta'; +$labels['longacld'] = 'La etiqueta de mensajes eliminados puede ser cambiada'; +$labels['longaclt'] = 'La etiqueta de mensajes eliminados puede ser cambiada'; +$labels['longacle'] = 'Los mensajes pueden ser borrados'; +$labels['longaclx'] = 'La carpeta puede ser eliminada o renombrada'; +$labels['longacla'] = 'Los derechos de acceso de la carpeta pueden ser cambiados'; +$labels['longacln'] = 'Los metadatos compartidos de los mensajes (anotaciones) puede ser cambiado'; +$labels['longaclfull'] = 'Control total incluyendo administraciĂłn de carpetas'; +$labels['longaclread'] = 'La carpeta puede ser abierta para lectura'; +$labels['longaclwrite'] = 'Los mensajes pueden ser marcados, escritos o copiados a la carpeta'; +$labels['longacldelete'] = 'Los mensajes pueden ser eliminados'; +$labels['longaclother'] = 'Otros derechos de acceso'; +$labels['ariasummaryacltable'] = 'Lista de derechos de acceso'; +$labels['arialabelaclactions'] = 'Listar acciones'; +$labels['arialabelaclform'] = 'Formulario de derechos de acceso'; +$messages['deleting'] = 'Derechos de acceso de eliminaciĂłn...'; +$messages['saving'] = 'Guardando derechos de acceso...'; +$messages['updatesuccess'] = 'Se han cambiado los derechos de acceso exitosamente'; +$messages['deletesuccess'] = 'Se han eliminado los derechos de acceso exitosamente'; +$messages['createsuccess'] = 'Se han agregado los derechos de acceso exitosamente'; +$messages['updateerror'] = 'No es posible actualizar los derechos de acceso'; +$messages['deleteerror'] = 'No es posible eliminar los derechos de acceso'; +$messages['createerror'] = 'No es posible agregar los derechos de acceso'; +$messages['deleteconfirm'] = 'ÂżEstás seguro de que deseas eliminar los derechos de acceso a usuario(s) seleccionado(s)?'; +$messages['norights'] = '¡No se hace especificado un derecho!'; +$messages['nouser'] = '¡No se ha especificado un nombre de usuario!'; +?> diff --git a/data/web/rc/plugins/acl/localization/es_AR.inc b/data/web/rc/plugins/acl/localization/es_AR.inc new file mode 100644 index 00000000..8ed9f12f --- /dev/null +++ b/data/web/rc/plugins/acl/localization/es_AR.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Compartiendo'; +$labels['myrights'] = 'Permisos de acceso'; +$labels['username'] = 'Usuario:'; +$labels['advanced'] = 'Modo avanzado'; +$labels['newuser'] = 'Agregar entrada'; +$labels['editperms'] = 'Editar permisos'; +$labels['actions'] = 'Acciones para los permisos de acceso...'; +$labels['anyone'] = 'Todos los usuarios (cualquiera)'; +$labels['anonymous'] = 'Invitado (anonimo)'; +$labels['identifier'] = 'Identificacion'; +$labels['acll'] = 'Buscar'; +$labels['aclr'] = 'Leer mensajes'; +$labels['acls'] = 'Mantener como visualizado'; +$labels['aclw'] = 'Escribir marcadores'; +$labels['acli'] = 'Insertar (Copiar en)'; +$labels['aclp'] = 'Publicar'; +$labels['aclc'] = 'Crear subcarpetas'; +$labels['aclk'] = 'Crear subcarpetas'; +$labels['acld'] = 'Eliminar mensajes'; +$labels['aclt'] = 'Eliminar mensajes'; +$labels['acle'] = 'Descartar'; +$labels['aclx'] = 'Eliminar carpeta'; +$labels['acla'] = 'Administrar'; +$labels['acln'] = 'Anotar mensajes'; +$labels['aclfull'] = 'Control total'; +$labels['aclother'] = 'Otro'; +$labels['aclread'] = 'Leer'; +$labels['aclwrite'] = 'Escribir'; +$labels['acldelete'] = 'Eliminar'; +$labels['shortacll'] = 'Buscar'; +$labels['shortaclr'] = 'Leer'; +$labels['shortacls'] = 'Mantener'; +$labels['shortaclw'] = 'Escribir'; +$labels['shortacli'] = 'Insertar'; +$labels['shortaclp'] = 'Publicar'; +$labels['shortaclc'] = 'Crear'; +$labels['shortaclk'] = 'Crear'; +$labels['shortacld'] = 'Eliminar'; +$labels['shortaclt'] = 'Eliminar'; +$labels['shortacle'] = 'Descartar'; +$labels['shortaclx'] = 'Borrado de carpeta'; +$labels['shortacla'] = 'Administrar'; +$labels['shortacln'] = 'Anotar'; +$labels['shortaclother'] = 'Otro'; +$labels['shortaclread'] = 'Leer'; +$labels['shortaclwrite'] = 'Escribir'; +$labels['shortacldelete'] = 'Eliminar'; +$labels['longacll'] = 'La carpeta es visible en listas y es posible suscribirse a ella'; +$labels['longaclr'] = 'La carpeta se puede abirir para lectura'; +$labels['longacls'] = 'El marcador de Mensajes Vistos puede ser modificado'; +$labels['longaclw'] = 'Los marcadores de mensajes y palabras clave se pueden modificar, excepto Visto y Eliminado'; +$labels['longacli'] = 'En esta carpeta se pueden escribir o copiar mensajes'; +$labels['longaclp'] = 'En esta carpeta se pueden publicar mensajes'; +$labels['longaclc'] = 'Debajo de esta carpeta se puede crear (o renombrar) otras carpetas directamente'; +$labels['longaclk'] = 'Debajo de esta carpeta se puede crear (o renombrar) otras carpetas directamente'; +$labels['longacld'] = 'El marcador de Mensaje Eliminado puede ser modificado'; +$labels['longaclt'] = 'El marcador de Mensaje Eliminado puede ser modificado'; +$labels['longacle'] = 'Los mensajes pueden ser descartados'; +$labels['longaclx'] = 'La carpeta puede ser eliminada o renombrada'; +$labels['longacla'] = 'Los permisos de acceso de esta carpeta pueden ser modificados'; +$labels['longacln'] = 'La metainformaciĂłn de mensajes compartidos (anotaciones) puede ser cambiada'; +$labels['longaclfull'] = 'Control total incluyendo la administracion de carpeta'; +$labels['longaclread'] = 'La carpeta se puede abrir para lectura'; +$labels['longaclwrite'] = 'En esta carpeta los mensajes pueden ser marcados, escritos o copiados'; +$labels['longacldelete'] = 'Los mensajes se pueden eliminar'; +$labels['longaclother'] = 'Otros permisos de acceso'; +$labels['ariasummaryacltable'] = 'Listado de permisos de acceso'; +$labels['arialabelaclactions'] = 'Listar acciones'; +$labels['arialabelaclform'] = 'Formulario de permisos de acceso'; +$messages['deleting'] = 'Eliminando permisos de acceso...'; +$messages['saving'] = 'Salvando permisos de acceso...'; +$messages['updatesuccess'] = 'Permisos de acceso modificados satisfactoriamente'; +$messages['deletesuccess'] = 'Permisos de acceso eliminados correctamente'; +$messages['createsuccess'] = 'Permisos de acceso agregados satisfactoriamente'; +$messages['updateerror'] = 'No se pudieron actualizar los permisos de acceso'; +$messages['deleteerror'] = 'No se pueden eliminar los permisos de acceso'; +$messages['createerror'] = 'No se pueden agregar los permisos de acceso'; +$messages['deleteconfirm'] = 'Estas seguro que queres remover los permisos de acceso a el/los usuario(s) seleccionado/s?'; +$messages['norights'] = 'Ningun permiso ha sido especificado!'; +$messages['nouser'] = 'Ningun nombre de usuario ha sido especificado!'; +?> diff --git a/data/web/rc/plugins/acl/localization/es_ES.inc b/data/web/rc/plugins/acl/localization/es_ES.inc new file mode 100644 index 00000000..c90c3e5b --- /dev/null +++ b/data/web/rc/plugins/acl/localization/es_ES.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Compartir'; +$labels['myrights'] = 'Permisos de acceso'; +$labels['username'] = 'Usuario:'; +$labels['advanced'] = 'Modo avanzado'; +$labels['newuser'] = 'Añadir una entrada'; +$labels['editperms'] = 'Editar permisos'; +$labels['actions'] = 'Acciones sobre los permisos de acceso…'; +$labels['anyone'] = 'Todos los usuarios (cualquiera)'; +$labels['anonymous'] = 'Invitados (anĂłnimo)'; +$labels['identifier'] = 'Identificador'; +$labels['acll'] = 'BĂşsqueda'; +$labels['aclr'] = 'Leer mensajes'; +$labels['acls'] = 'Mantener como "LeĂ­do'; +$labels['aclw'] = 'Escribir etiquetas'; +$labels['acli'] = 'Insertar (Copiar dentro)'; +$labels['aclp'] = 'Enviar'; +$labels['aclc'] = 'Crear subcarpetas'; +$labels['aclk'] = 'Crear subcarpetas'; +$labels['acld'] = 'Borrar mensajes'; +$labels['aclt'] = 'Borrar mensajes'; +$labels['acle'] = 'Expurgar'; +$labels['aclx'] = 'Borrar carpeta'; +$labels['acla'] = 'Administrar'; +$labels['acln'] = 'Anotar mensajes'; +$labels['aclfull'] = 'Control total'; +$labels['aclother'] = 'Otro'; +$labels['aclread'] = 'Leer'; +$labels['aclwrite'] = 'Escribir'; +$labels['acldelete'] = 'Borrar'; +$labels['shortacll'] = 'BĂşsqueda'; +$labels['shortaclr'] = 'Leer'; +$labels['shortacls'] = 'Conservar'; +$labels['shortaclw'] = 'Escribir'; +$labels['shortacli'] = 'Insertar'; +$labels['shortaclp'] = 'Enviar'; +$labels['shortaclc'] = 'Crear'; +$labels['shortaclk'] = 'Crear'; +$labels['shortacld'] = 'Borrar'; +$labels['shortaclt'] = 'Borrar'; +$labels['shortacle'] = 'Expurgar'; +$labels['shortaclx'] = 'Borrar carpeta'; +$labels['shortacla'] = 'Administrar'; +$labels['shortacln'] = 'Anotar'; +$labels['shortaclother'] = 'Otro'; +$labels['shortaclread'] = 'Leer'; +$labels['shortaclwrite'] = 'Escribir'; +$labels['shortacldelete'] = 'Borrar'; +$labels['longacll'] = 'La carpeta es visible en las listas y es posible suscribirse a ella'; +$labels['longaclr'] = 'Se puede abrir la carpeta para leer'; +$labels['longacls'] = 'Se pueden cambiar los mensajes con la etiqueta "LeĂ­do'; +$labels['longaclw'] = 'Las etiquetas de mensaje y las palabras clave se pueden cambiar, excepto "LeĂ­do" y "Borrado'; +$labels['longacli'] = 'Se pueden escribir mensajes o copiarlos a la carpeta'; +$labels['longaclp'] = 'Se pueden enviar mensajes a esta carpeta'; +$labels['longaclc'] = 'Se pueden crear (o renombrar) carpetas directamente bajo esta carpeta'; +$labels['longaclk'] = 'Se pueden crear (o renombrar) carpetas directamente bajo esta carpeta'; +$labels['longacld'] = 'No se pueden cambiar los mensajes etiquetados como "Borrado'; +$labels['longaclt'] = 'No se pueden cambiar los mensajes etiquetados como "Borrado'; +$labels['longacle'] = 'No se pueden expurgar los mensajes'; +$labels['longaclx'] = 'La carpeta se puede borrar o renombrar'; +$labels['longacla'] = 'Se pueden cambiar los permisos de acceso'; +$labels['longacln'] = 'Los metadatos compartidos de los mensajes (anotaciones) pueden cambiarse'; +$labels['longaclfull'] = 'Control total, incluyendo la gestiĂłn de carpetas'; +$labels['longaclread'] = 'Se puede abrir la carpeta para leer'; +$labels['longaclwrite'] = 'Se pueden etiquetar, escribir o copiar mensajes a la carpeta'; +$labels['longacldelete'] = 'Los mensajes se pueden borrar'; +$labels['longaclother'] = 'Otros derechos de acceso'; +$labels['ariasummaryacltable'] = 'Lista de derechos de acceso'; +$labels['arialabelaclactions'] = 'Lista de acciones'; +$labels['arialabelaclform'] = 'Formulario de derechos de acceso'; +$messages['deleting'] = 'Borrando permisos de acceso…'; +$messages['saving'] = 'Guardando permisos de acceso…'; +$messages['updatesuccess'] = 'Se han cambiado los permisos de acceso'; +$messages['deletesuccess'] = 'Se han borrado los permisos de acceso'; +$messages['createsuccess'] = 'Se han añadido los permisos de acceso'; +$messages['updateerror'] = 'No ha sido posible actualizar los derechos de acceso'; +$messages['deleteerror'] = 'No se han podido borrar los permisos de acceso'; +$messages['createerror'] = 'No se han podido añadir los permisos de acceso'; +$messages['deleteconfirm'] = 'ÂżSeguro que quiere borrar los permisos de acceso del usuairo seleccionado?'; +$messages['norights'] = 'No se han especificado los permisos de acceso'; +$messages['nouser'] = 'No se ha especificado un nombre de usuario'; +?> diff --git a/data/web/rc/plugins/acl/localization/et_EE.inc b/data/web/rc/plugins/acl/localization/et_EE.inc new file mode 100644 index 00000000..ecd5f7e8 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/et_EE.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Jagamine'; +$labels['myrights'] = 'Ligipääsuõigused'; +$labels['username'] = 'Kasutaja:'; +$labels['advanced'] = 'laiendatud reĹľiim'; +$labels['newuser'] = 'Lisa sissekanne'; +$labels['editperms'] = 'Muuda õigusi'; +$labels['actions'] = 'Ligipääsuõiguste toimingud...'; +$labels['anyone'] = 'Kõik kasutajad'; +$labels['anonymous'] = 'KĂĽlalised (anonĂĽĂĽmsed)'; +$labels['identifier'] = 'Tuvastaja'; +$labels['acll'] = 'Ăślevaade'; +$labels['aclr'] = 'Lugeda kirju'; +$labels['acls'] = 'Hoia nähtud olekut'; +$labels['aclw'] = 'Salvesta lipud'; +$labels['acli'] = 'Sisesta (kopeeri)'; +$labels['aclp'] = 'Postita'; +$labels['aclc'] = 'Luua alamkaustu'; +$labels['aclk'] = 'Luua alamkaustu'; +$labels['acld'] = 'Kustutada kirju'; +$labels['aclt'] = 'Kustutada kirju'; +$labels['acle'] = 'Eemalda'; +$labels['aclx'] = 'Kustutada kausta'; +$labels['acla'] = 'Administreerida'; +$labels['acln'] = 'Annoteeri kirja'; +$labels['aclfull'] = 'Täis kontroll'; +$labels['aclother'] = 'Muu'; +$labels['aclread'] = 'Loe'; +$labels['aclwrite'] = 'Kirjuta'; +$labels['acldelete'] = 'Kustuta'; +$labels['shortacll'] = 'Ăślevaade'; +$labels['shortaclr'] = 'Loe'; +$labels['shortacls'] = 'Säilita'; +$labels['shortaclw'] = 'Kirjuta'; +$labels['shortacli'] = 'Lisa'; +$labels['shortaclp'] = 'Postita'; +$labels['shortaclc'] = 'Loo'; +$labels['shortaclk'] = 'Loo'; +$labels['shortacld'] = 'Kustuta'; +$labels['shortaclt'] = 'Kustuta'; +$labels['shortacle'] = 'Eemalda'; +$labels['shortaclx'] = 'Kausta kustutamine'; +$labels['shortacla'] = 'Administreerida'; +$labels['shortacln'] = 'Annoteeri'; +$labels['shortaclother'] = 'Muu'; +$labels['shortaclread'] = 'Loe'; +$labels['shortaclwrite'] = 'Kirjuta'; +$labels['shortacldelete'] = 'Kustuta'; +$labels['longacll'] = 'See kaust on nimekirjas nähtav ja seda saab tellida'; +$labels['longaclr'] = 'Kausta saab lugemiseks avada'; +$labels['longacls'] = 'Kirja loetuse lippu saab muuta'; +$labels['longaclw'] = 'Kirja lippe ja otsingusõnu saab muuta, väljaarvatud loetud ja kustutatud'; +$labels['longacli'] = 'Kirju saab salvestada ja kopeerida antud kausta'; +$labels['longaclp'] = 'Kirju saab postitada antud kausta'; +$labels['longaclc'] = 'Kaustasi saab luua (või ĂĽmber nimetada) otse siia kausta alla.'; +$labels['longaclk'] = 'Kaustu saab luua (või ĂĽmber nimetada) otse siia kausta alla'; +$labels['longacld'] = 'Kirja kustutamis lippu saab muuta'; +$labels['longaclt'] = 'Kirja kustutamis lippu saab muuta'; +$labels['longacle'] = 'Kirju saab eemaldada'; +$labels['longaclx'] = 'Seda kausta ei saa kustutada ega ĂĽmber nimetada'; +$labels['longacla'] = 'Selle kausta ligipääsuõigusi saab muuta'; +$labels['longacln'] = 'Kirja jagatud metainfot (annotatsioonid) saab muuta'; +$labels['longaclfull'] = 'Täielik kontroll koos kaustade haldamisega'; +$labels['longaclread'] = 'Kausta saab lugemiseks avada'; +$labels['longaclwrite'] = 'Kirju saab märgistada, salvestada või kopeerida kausta'; +$labels['longacldelete'] = 'Kirju saab kustutada'; +$labels['longaclother'] = 'Muud ligipääsu õigused'; +$labels['ariasummaryacltable'] = 'Nimekir ligipääsu õigustest'; +$labels['arialabelaclactions'] = 'Näita tegevusi'; +$labels['arialabelaclform'] = 'Ligipääsu õiguste vorm'; +$messages['deleting'] = 'Ligipääsuõiguste kustutamine...'; +$messages['saving'] = 'Ligipääsuõiguste salvestamine...'; +$messages['updatesuccess'] = 'Ligipääsuõigused on muudetud'; +$messages['deletesuccess'] = 'Ligipääsuõigused on kustutatud'; +$messages['createsuccess'] = 'Ligipääsuõigused on lisatud'; +$messages['updateerror'] = 'Ligipääsuõiguste uuendamine nurjus'; +$messages['deleteerror'] = 'Ligipääsuõiguste kustutamine nurjus'; +$messages['createerror'] = 'Ligipääsuõiguste andmine nurjus'; +$messages['deleteconfirm'] = 'Oled sa kindel, et sa soovid valitudkasutaja(te) õiguseid kustutada?'; +$messages['norights'] = 'Ă•igusi pole määratud!'; +$messages['nouser'] = 'Kasutajanime pole määratud!'; +?> diff --git a/data/web/rc/plugins/acl/localization/eu_ES.inc b/data/web/rc/plugins/acl/localization/eu_ES.inc new file mode 100644 index 00000000..8625f4d7 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/eu_ES.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Partekatzen'; +$labels['myrights'] = 'Sarbide-eskubideak'; +$labels['username'] = 'Erabiltzailea:'; +$labels['advanced'] = 'modu aurreratua'; +$labels['newuser'] = 'Gehitu sarrera'; +$labels['editperms'] = 'Editatu baimenak'; +$labels['actions'] = 'Sarbide-eskubideen ekintzak...'; +$labels['anyone'] = 'Erabiltzaile guztiak (edozein)'; +$labels['anonymous'] = 'Gonbidatuak (anonimo)'; +$labels['identifier'] = 'Identifikatzailea'; +$labels['acll'] = 'Bilatu'; +$labels['aclr'] = 'Irakurri mezuak'; +$labels['acls'] = 'Mantendu ikusita egoera'; +$labels['aclw'] = 'Idatzi banderak'; +$labels['acli'] = 'Txertatu (kopiatu barnean)'; +$labels['aclp'] = 'Posta'; +$labels['aclc'] = 'Sortu azpikarpetak'; +$labels['aclk'] = 'Sortu azpikarpetak'; +$labels['acld'] = 'Ezabatu mezuak'; +$labels['aclt'] = 'Ezabatu mezuak'; +$labels['acle'] = 'Kendu'; +$labels['aclx'] = 'Ezabatu karpeta'; +$labels['acla'] = 'Administratu'; +$labels['acln'] = 'Idatzi mezuak'; +$labels['aclfull'] = 'Kontrol osoa'; +$labels['aclother'] = 'Beste'; +$labels['aclread'] = 'Irakurri'; +$labels['aclwrite'] = 'Idatzi'; +$labels['acldelete'] = 'Ezabatu'; +$labels['shortacll'] = 'Bilatu'; +$labels['shortaclr'] = 'Irakurri'; +$labels['shortacls'] = 'Mantendu'; +$labels['shortaclw'] = 'Idatzi'; +$labels['shortacli'] = 'Txertatu'; +$labels['shortaclp'] = 'Bidali'; +$labels['shortaclc'] = 'Sortu'; +$labels['shortaclk'] = 'Sortu'; +$labels['shortacld'] = 'Ezabatu'; +$labels['shortaclt'] = 'Ezabatu'; +$labels['shortacle'] = 'Kendu'; +$labels['shortaclx'] = 'Ezabatu karpeta'; +$labels['shortacla'] = 'Administratu'; +$labels['shortacln'] = 'Idatzi'; +$labels['shortaclother'] = 'Beste'; +$labels['shortaclread'] = 'Irakurri'; +$labels['shortaclwrite'] = 'Idatzi'; +$labels['shortacldelete'] = 'Ezabatu'; +$labels['longacll'] = 'Karpeta hau zerrendan ikusgai dago eta harpidetzen ahal zara'; +$labels['longaclr'] = 'Karpeta ireki daiteke irakurtzeko'; +$labels['longacls'] = 'Mezuen ikusita bandera aldatu daiteke'; +$labels['longaclw'] = 'Mezuen banderak eta gako-hitzak alda daitezke, ikusita eta ezabatuta salbu'; +$labels['longacli'] = 'Mezuak karpetara idatzi edo kopiatu daitezke'; +$labels['longaclp'] = 'Mezuak bidali daitezke karpeta honetara'; +$labels['longaclc'] = 'Karpetak sor daitezke (edo berrizendatu) zuzenean karpeta honetan'; +$labels['longaclk'] = 'Karpetak sor daitezke (edo berrizendatu) karpeta honetan'; +$labels['longacld'] = 'Mezuen ezabatu bandera alda daiteke'; +$labels['longaclt'] = 'Mezuen ezabatu bandera alda daiteke'; +$labels['longacle'] = 'Mezuak betiko ezaba daitezke'; +$labels['longaclx'] = 'Karpeta ezaba edo berrizenda daiteke'; +$labels['longacla'] = 'Karpetaren sarbide eskubideak alda daitezke'; +$labels['longacln'] = 'Partekatutatko mezuen metadatuak (oharrak) alda daitezke'; +$labels['longaclfull'] = 'Kontrol osoa, karpetaren administrazioa barne'; +$labels['longaclread'] = 'Karpeta ireki daiteke irakurtzeko'; +$labels['longaclwrite'] = 'Mezuak marka, idatzi edo kopia daitezke karpetara'; +$labels['longacldelete'] = 'Mezuak ezaba daitezke'; +$labels['longaclother'] = 'Beste sarbide-eskubideak'; +$labels['ariasummaryacltable'] = 'Sarbide-eskubideen zerrenda'; +$labels['arialabelaclactions'] = 'Zerrendatu ekintzak'; +$labels['arialabelaclform'] = 'Sarbide-eskubideen formularioa'; +$messages['deleting'] = 'Sarbide-eskubideak ezabatzen...'; +$messages['saving'] = 'Sarbide-eskubideak gordetzen...'; +$messages['updatesuccess'] = 'Sarbide-eskubideak ongi aldatu dira'; +$messages['deletesuccess'] = 'Sarbide-eskubideak ongi ezabatu dira'; +$messages['createsuccess'] = 'Sarbide-eskubideak ongi gehitu dira'; +$messages['updateerror'] = 'Ezin dira eguneratu sarbide-eskubideak'; +$messages['deleteerror'] = 'Ezin dira ezabatu sarbide-eskubideak'; +$messages['createerror'] = 'Ezin dira gehitu sarbide-eskubideak'; +$messages['deleteconfirm'] = 'Seguru zaude hautatutako erabiltzaile(ar)en sarbide-eskubideak ezabatu nahi duzula?'; +$messages['norights'] = 'Eskubideak ez dira zehaztu!'; +$messages['nouser'] = 'Erabiltzaile-izana ez da zehaztu!'; +?> diff --git a/data/web/rc/plugins/acl/localization/fa_AF.inc b/data/web/rc/plugins/acl/localization/fa_AF.inc new file mode 100644 index 00000000..cb051f6c --- /dev/null +++ b/data/web/rc/plugins/acl/localization/fa_AF.inc @@ -0,0 +1,26 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'اشتراک گذاری'; +$labels['username'] = 'کاربر:'; +$labels['newuser'] = 'اŮزŮدن مدخل'; +$labels['aclw'] = 'نŮشتن نشانه ها'; +$labels['aclp'] = 'ارسال'; +$labels['acla'] = 'مدیر'; +$labels['aclfull'] = 'کنترل کامل'; +$labels['aclother'] = 'دیگر'; +?> diff --git a/data/web/rc/plugins/acl/localization/fa_IR.inc b/data/web/rc/plugins/acl/localization/fa_IR.inc new file mode 100644 index 00000000..7b22c406 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/fa_IR.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'اشتراک‌گذاری'; +$labels['myrights'] = 'Ř­Ů‚ŮŮ‚ دسترسی'; +$labels['username'] = 'کاربر:'; +$labels['advanced'] = 'حالت پیشرŮته'; +$labels['newuser'] = 'اŮزŮدن ŮرŮŘŻŰŚ'; +$labels['editperms'] = 'Ůیرایش مجŮزها'; +$labels['actions'] = 'Ůعالیت‌های Ř­Ů‚ دسترسی...'; +$labels['anyone'] = 'همه‌ی کاربران (هر کسی)'; +$labels['anonymous'] = 'مهمان‌ها (ناشناس)'; +$labels['identifier'] = 'شناساگر'; +$labels['acll'] = 'یاŮتن'; +$labels['aclr'] = 'پیغام‌های Ř®Ůانده شده'; +$labels['acls'] = 'نگه داشتن حالت بازدید'; +$labels['aclw'] = 'پرچم‌های نŮشتن'; +$labels['acli'] = 'Ůارد کردن (رŮنŮŘ´ŘŞ در)'; +$labels['aclp'] = 'نŮشته'; +$labels['aclc'] = 'ایجاد زیرپŮشه‌ها'; +$labels['aclk'] = 'ایجاد زیرپŮشه‌ها'; +$labels['acld'] = 'حذ٠پیغام‌ها'; +$labels['aclt'] = 'حذ٠پیغام‌ها'; +$labels['acle'] = 'پاک کردن'; +$labels['aclx'] = 'Ř­Ř°Ů ŮľŮشه'; +$labels['acla'] = 'اداره کردن'; +$labels['acln'] = 'حاشیه نŮیسی پیغام ها'; +$labels['aclfull'] = 'کنترل کامل'; +$labels['aclother'] = 'دیگر'; +$labels['aclread'] = 'Ř®Ůاندن'; +$labels['aclwrite'] = 'نŮشتن'; +$labels['acldelete'] = 'حذ٠کردن'; +$labels['shortacll'] = 'یاŮتن'; +$labels['shortaclr'] = 'Ř®Ůاندن'; +$labels['shortacls'] = 'نگه داشتن'; +$labels['shortaclw'] = 'نŮشتن'; +$labels['shortacli'] = 'جاگذارى'; +$labels['shortaclp'] = 'پست کردن'; +$labels['shortaclc'] = 'ایجاد'; +$labels['shortaclk'] = 'ایجاد'; +$labels['shortacld'] = 'Ř­Ř°Ů'; +$labels['shortaclt'] = 'Ř­Ř°Ů'; +$labels['shortacle'] = 'پاک کردن'; +$labels['shortaclx'] = 'Ř­Ř°Ů ŮľŮشه'; +$labels['shortacla'] = 'اداره کردن'; +$labels['shortacln'] = 'حاشیه نŮیسی'; +$labels['shortaclother'] = 'دیگر'; +$labels['shortaclread'] = 'Ř®Ůاندن'; +$labels['shortaclwrite'] = 'نŮشتن'; +$labels['shortacldelete'] = 'حذ٠کردن'; +$labels['longacll'] = 'ŮľŮشه در Ůهرست‌ها قابل مشاهده است ٠می‌تŮاند مشترک آن Ř´ŘŻ'; +$labels['longaclr'] = 'ŮľŮشه می‌تŮاند برای Ř®Ůاندن باز Ř´ŮŘŻ'; +$labels['longacls'] = 'پرچم بازدید پیغام‌ها می‌تŮاند تغییر داده Ř´ŮŘŻ'; +$labels['longaclw'] = 'پرچم Ů Ú©Ů„ŰŚŘŻŮاÚه پیغام‌ها می‌تŮاند تغییر داده Ř´ŮŘŻŘŚ به غیر از بازدید Ů Ř­Ř°Ů'; +$labels['longacli'] = 'پیغام‌ها می‌تŮانند کپی یا نŮشته Ř´Ůند به ŮľŮشه'; +$labels['longaclp'] = 'پیغام‌ها می‌تŮانند پست Ř´Ůند به این ŮľŮشه'; +$labels['longaclc'] = 'ŮľŮشه‌ها می‌تŮانند ایجاد Ř´Ůند (تغییر نام داد Ř´Ůند) به Ř·Ůر مستقیم در این ŮľŮشه'; +$labels['longaclk'] = 'ŮľŮشه‌ها می‌تŮانند ایجاد Ř´Ůند (تغییر نام داد Ř´Ůند) به Ř·Ůر مستقیم در این ŮľŮشه'; +$labels['longacld'] = 'پرچم حذ٠پیغام‌ها می‌تŮاند تغییر داده Ř´ŮŘŻ'; +$labels['longaclt'] = 'پرچم حذ٠پیغام‌ها می‌تŮاند تغییر داده Ř´ŮŘŻ'; +$labels['longacle'] = 'پیغام‌ها می‌تŮانند Ř­Ř°Ů Ř´Ůند'; +$labels['longaclx'] = 'ŮľŮشه می‌تŮاند حذ٠یا تغییر نام داده Ř´ŮŘŻ'; +$labels['longacla'] = 'Ř­Ů‚ŮŮ‚ دسترسی ŮľŮشه می‌تŮاند تغییر داده Ř´ŮŘŻ'; +$labels['longacln'] = 'اطلاعات متا اشتراک گذاشته شده پیغام‌ها (حاشیه‌ها) می‌تŮاند تغییر داده Ř´Ůند'; +$labels['longaclfull'] = 'کنترل کامل شما مدیریت ŮľŮشه'; +$labels['longaclread'] = 'ŮľŮشه می‌تŮاند برای Ř®Ůاندن باز Ř´ŮŘŻ'; +$labels['longaclwrite'] = 'پیغام‌ها می‌تŮانند علامتگذاری، نŮشته ٠یا کپی Ř´Ůند در ŮľŮشه'; +$labels['longacldelete'] = 'پیغام‌ها می‌تŮانند Ř­Ř°Ů Ř´Ůند'; +$labels['longaclother'] = 'Ů‚Ůانین دسترسی دیگر'; +$labels['ariasummaryacltable'] = 'Ůهرست Ů‚Ůانین دسترسی'; +$labels['arialabelaclactions'] = 'Ůهرست کنش‌ها'; +$labels['arialabelaclform'] = 'Ůرم Ů‚Ůانین دسترسی'; +$messages['deleting'] = 'حذ٠کردن Ř­Ů‚ŮŮ‚ دسترسی...'; +$messages['saving'] = 'ذخیره Ř­Ů‚ŮŮ‚ دسترسی...'; +$messages['updatesuccess'] = 'Ř­Ů‚ŮŮ‚ دسترسی با کام‌یابی تغییر کردند'; +$messages['deletesuccess'] = 'Ř­Ů‚ŮŮ‚ دسترسی با کام‌یابی حذ٠شدند'; +$messages['createsuccess'] = 'Ř­Ů‚ŮŮ‚ دسترسی با کام‌یابی اضاŮه شدند'; +$messages['updateerror'] = 'ناتŮانی در رŮزآمد کردن Ř­Ů‚ŮŮ‚ دسترسی'; +$messages['deleteerror'] = 'ناتŮانی در Ř­Ř°Ů Ř­Ů‚ŮŮ‚ دسترسی'; +$messages['createerror'] = 'ناتŮانی در اضاŮه کردن Ř­Ů‚ŮŮ‚ دسترسی'; +$messages['deleteconfirm'] = 'آیا شما مطمئن هستید که می‌خŮاهید Ř­Ů‚ŮŮ‚ دسترسی را برای کاربر(ان) انتخاب شده حذ٠نمایید؟'; +$messages['norights'] = 'هیچ Ř­Ů‚ŰŚ مشخص نشده است!'; +$messages['nouser'] = 'هیج نام‌کاربری‌ای مشخص نشده است!'; +?> diff --git a/data/web/rc/plugins/acl/localization/fi_FI.inc b/data/web/rc/plugins/acl/localization/fi_FI.inc new file mode 100644 index 00000000..27510e84 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/fi_FI.inc @@ -0,0 +1,55 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Jakaminen'; +$labels['myrights'] = 'Käyttöoikeudet'; +$labels['username'] = 'Käyttäjä:'; +$labels['editperms'] = 'Muokkaa oikeuksia'; +$labels['anyone'] = 'Kaikki käyttäjät (kuka tahansa)'; +$labels['anonymous'] = 'Vieraat (anonyymit)'; +$labels['aclc'] = 'Luo alikansioita'; +$labels['aclk'] = 'Luo alikansioita'; +$labels['acld'] = 'Poista viestejä'; +$labels['aclt'] = 'Poista viestejä'; +$labels['aclx'] = 'Poista kansio'; +$labels['aclfull'] = 'Täydet käyttöoikeudet'; +$labels['aclother'] = 'Muu'; +$labels['aclread'] = 'Luku'; +$labels['aclwrite'] = 'Kirjoitus'; +$labels['acldelete'] = 'Poisto'; +$labels['shortaclc'] = 'Luo'; +$labels['shortaclk'] = 'Luo'; +$labels['shortacld'] = 'Poista'; +$labels['shortaclt'] = 'Poista'; +$labels['shortaclother'] = 'Muu'; +$labels['shortaclread'] = 'Luku'; +$labels['shortaclwrite'] = 'Kirjoitus'; +$labels['shortacldelete'] = 'Poisto'; +$labels['longaclr'] = 'Kansion voi avata lukua varten'; +$labels['longaclx'] = 'Kansio voidaan poistaa tai nimetä uudelleen'; +$labels['longacla'] = 'Kansion käyttöoikeuksia voi muuttaa'; +$messages['deleting'] = 'Poistetaan käyttöoikeuksia...'; +$messages['saving'] = 'Tallennetaan käyttöoikeuksia...'; +$messages['updatesuccess'] = 'Käyttöoikeuksia muutettiin onnistuneesti'; +$messages['deletesuccess'] = 'Käyttöoikeuksia poistettiin onnistuneesti'; +$messages['createsuccess'] = 'Käyttöoikeuksia lisättiin onnistuneesti'; +$messages['updateerror'] = 'Käyttöoikeuksien päivitys epäonnistui'; +$messages['deleteerror'] = 'Käyttöoikeuksien poistaminen epäonnistui'; +$messages['createerror'] = 'Käyttöoikeuksien lisääminen epäonnistui'; +$messages['norights'] = 'Oikeuksia ei ole määritelty!'; +$messages['nouser'] = 'Käyttäjänimeä ei ole määritelty!'; +?> diff --git a/data/web/rc/plugins/acl/localization/fo_FO.inc b/data/web/rc/plugins/acl/localization/fo_FO.inc new file mode 100644 index 00000000..80c233cd --- /dev/null +++ b/data/web/rc/plugins/acl/localization/fo_FO.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Deiling'; +$labels['myrights'] = 'Atgongdar-rættindi'; +$labels['username'] = 'BrĂşkari:'; +$labels['advanced'] = 'VĂ­Ă°kaĂ° Ăştgáva'; +$labels['newuser'] = 'Legg inn'; +$labels['editperms'] = 'Broyt atgonguloyvi'; +$labels['actions'] = 'Stillingar til atgongu-rættindi'; +$labels['anyone'] = 'Allir brĂşkarir (øll)'; +$labels['anonymous'] = 'Gestir (dulnevnd)'; +$labels['identifier'] = 'dátuheiti'; +$labels['acll'] = 'Slá upp'; +$labels['aclr'] = 'Les boĂ°'; +$labels['acls'] = 'Varveit lisna støðu'; +$labels['aclw'] = 'HvĂ­t Fløgg'; +$labels['acli'] = 'Inn'; +$labels['aclp'] = 'Send'; +$labels['aclc'] = 'Ger undurmappur'; +$labels['aclk'] = 'Ger undurmappur'; +$labels['acld'] = 'Strika boĂ°'; +$labels['aclt'] = 'Strika boĂ°'; +$labels['acle'] = 'Strika Ăşt'; +$labels['aclx'] = 'Strika mappu'; +$labels['acla'] = 'Umsit'; +$labels['acln'] = 'ViĂ°merk boĂ°'; +$labels['aclfull'] = 'Full stĂ˝ring'; +$labels['aclother'] = 'AnnaĂ°'; +$labels['aclread'] = 'Les'; +$labels['aclwrite'] = 'Skriva'; +$labels['acldelete'] = 'Strika'; +$labels['shortacll'] = 'Slá upp'; +$labels['shortaclr'] = 'Les'; +$labels['shortacls'] = 'Varveit'; +$labels['shortaclw'] = 'Skriva'; +$labels['shortacli'] = 'Legg inn'; +$labels['shortaclp'] = 'Send'; +$labels['shortaclc'] = 'Stovna'; +$labels['shortaclk'] = 'Stovna'; +$labels['shortacld'] = 'Strika'; +$labels['shortaclt'] = 'Strika'; +$labels['shortacle'] = 'Strika Ăşt'; +$labels['shortaclx'] = 'Strika mappu'; +$labels['shortacla'] = 'Umsit'; +$labels['shortacln'] = 'ViĂ°merk'; +$labels['shortaclother'] = 'AnnaĂ°'; +$labels['shortaclread'] = 'Les'; +$labels['shortaclwrite'] = 'Skriva'; +$labels['shortacldelete'] = 'Strika'; +$labels['longacll'] = 'Mappan er sjĂłnlig á listum og til ber at tekna seg fyri hana'; +$labels['longaclr'] = 'Mappan kann verĂ°a opna til lesná'; +$labels['longacls'] = 'ViĂ°merki iĂ° vĂ­sur á lisin boĂ° kann broytast'; +$labels['longaclw'] = 'BoĂ° viĂ°merki og lyklaorĂ° kunnu øll broytast, undantikiĂ° Sæð og Strika'; +$labels['longacli'] = 'BoĂ° kunnu verĂ°a skriva og flutt til eina aĂ°ra mappu'; +$labels['longaclp'] = 'BoĂ° kunnu verĂ°a send til hesa mappu'; +$labels['longaclc'] = 'Mappur kunnu verĂ°a stovnaĂ°ar (ella umdoyptar) beinleiĂ°is undir hesu mappu'; +$labels['longaclk'] = 'Mappur kunnu verĂ°a stovnaĂ°ar (ella umdoyptar) beinleiĂ°is undir hesu mappu'; +$labels['longacld'] = 'ViĂ°merki iĂ° vĂ­sur á strika boĂ° kann broytast'; +$labels['longaclt'] = 'ViĂ°merki iĂ° vĂ­sur á strika boĂ° kann broytast'; +$labels['longacle'] = 'BoĂ° kunnu verĂ°a strika Ăşt'; +$labels['longaclx'] = 'Mappan kann verĂ°a strika ella umdoypt'; +$labels['longacla'] = 'Atgongdu-rættindini til hesa mappu kunnu broytast'; +$labels['longacln'] = '"Metadata" (viĂ°merking) av boĂ°um kann broytast'; +$labels['longaclfull'] = 'Full stĂ˝ring, Ă­rokna mappu-umsiting'; +$labels['longaclread'] = 'Mappan kann latast upp til lesná'; +$labels['longaclwrite'] = 'BoĂ° kunnu verĂ°a viĂ°merkt, skriva ella avritast til mappuna'; +$labels['longacldelete'] = 'BoĂ° kunnu verĂ°a strikaĂ°'; +$labels['longaclother'] = 'AĂ°rar heimildir'; +$labels['ariasummaryacltable'] = 'Listi yvir brĂşkara heimildum'; +$labels['arialabelaclactions'] = 'VĂ­s gerĂ°ir'; +$labels['arialabelaclform'] = 'Heimilda frymil'; +$messages['deleting'] = 'Strikar atgongu-rættindi...'; +$messages['saving'] = 'Goymur atgongu-rættindi...'; +$messages['updatesuccess'] = 'Atgongu-rættindi broytt væleyndaĂ°'; +$messages['deletesuccess'] = 'Atgongu-rættindi strika væleyndaĂ°'; +$messages['createsuccess'] = 'Atgongu-rættindi stovna væleyndaĂ°'; +$messages['updateerror'] = 'Til ber ikki at dagføra atgongu-rættindi'; +$messages['deleteerror'] = 'Til ber ikki at strika atgongu-rættindi'; +$messages['createerror'] = 'Til ber ikki at leggja aftrat atgongu-rættindi'; +$messages['deleteconfirm'] = 'Ert tĂş vĂ­s/ur Ă­ at tĂş ynskir at strika atgongu-rættindini hjá valdum brĂşkar(um)?'; +$messages['norights'] = 'Eingi rættindi tilskila!'; +$messages['nouser'] = 'Einki brĂşkaranavn var tilskila!'; +?> diff --git a/data/web/rc/plugins/acl/localization/fr_FR.inc b/data/web/rc/plugins/acl/localization/fr_FR.inc new file mode 100644 index 00000000..fdfb2054 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/fr_FR.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Partage'; +$labels['myrights'] = 'Droits d\'accès'; +$labels['username'] = 'Utilisateur :'; +$labels['advanced'] = 'Mode avancĂ©'; +$labels['newuser'] = 'Ajouter une entrĂ©e'; +$labels['editperms'] = 'Modifier les permissions'; +$labels['actions'] = 'Actions des droits d\'accès...'; +$labels['anyone'] = 'Tous les utilisateurs (n\'importe qui)'; +$labels['anonymous'] = 'InvitĂ©s (anonyme)'; +$labels['identifier'] = 'Identifiant'; +$labels['acll'] = 'Consultation'; +$labels['aclr'] = 'Lire les courriels'; +$labels['acls'] = 'Garder l\'Ă©tat « vu »'; +$labels['aclw'] = 'Drapeaux d\'Ă©criture'; +$labels['acli'] = 'InsĂ©rer (copier dans)'; +$labels['aclp'] = 'Publier'; +$labels['aclc'] = 'CrĂ©er des sous-dossiers'; +$labels['aclk'] = 'CrĂ©er des sous-dossiers'; +$labels['acld'] = 'Supprimer des courriels'; +$labels['aclt'] = 'Supprimer des courriels'; +$labels['acle'] = 'Purger'; +$labels['aclx'] = 'Supprimer un dossier'; +$labels['acla'] = 'Administrer'; +$labels['acln'] = 'Annoter les courriels'; +$labels['aclfull'] = 'ContrĂ´le total'; +$labels['aclother'] = 'Autre'; +$labels['aclread'] = 'Lecture'; +$labels['aclwrite'] = 'Écriture'; +$labels['acldelete'] = 'Supprimer'; +$labels['shortacll'] = 'Consultation'; +$labels['shortaclr'] = 'Lecture'; +$labels['shortacls'] = 'Conserver'; +$labels['shortaclw'] = 'Écriture'; +$labels['shortacli'] = 'InsĂ©rer'; +$labels['shortaclp'] = 'Publier'; +$labels['shortaclc'] = 'CrĂ©er'; +$labels['shortaclk'] = 'CrĂ©er'; +$labels['shortacld'] = 'Supprimer'; +$labels['shortaclt'] = 'Supprimer'; +$labels['shortacle'] = 'Purger'; +$labels['shortaclx'] = 'Suppression de dossier'; +$labels['shortacla'] = 'Administrer'; +$labels['shortacln'] = 'Annoter'; +$labels['shortaclother'] = 'Autre'; +$labels['shortaclread'] = 'Lecture'; +$labels['shortaclwrite'] = 'Écriture'; +$labels['shortacldelete'] = 'Supprimer'; +$labels['longacll'] = 'Ce dossier est visible dans les listes et on peut s\'y abonner'; +$labels['longaclr'] = 'Le dossier peut-ĂŞtre ouvert en lecture'; +$labels['longacls'] = 'Le drapeau Vu des courriels peut-ĂŞtre changĂ©e'; +$labels['longaclw'] = 'Les drapeaux et mots-clĂ©s des courriels peuvent ĂŞtre changĂ©s, sauf pour Vu et SupprimĂ©'; +$labels['longacli'] = 'Les courriels peuvent-ĂŞtre Ă©crits ou copiĂ©s dans le dossier'; +$labels['longaclp'] = 'Les courriels peuvent-ĂŞtre publiĂ©s dans ce dossier'; +$labels['longaclc'] = 'Les dossiers peuvent-ĂŞtre crĂ©Ă©s (ou renommĂ©s) directement depuis ce dossier'; +$labels['longaclk'] = 'Les dossiers peuvent-ĂŞtre crĂ©Ă©s (ou renommĂ©s) directement depuis ce dossier'; +$labels['longacld'] = 'Le drapeau de suppression des courriels peut-ĂŞtre modifiĂ©e'; +$labels['longaclt'] = 'Le drapeau de suppression des courriels peut-ĂŞtre modifiĂ©e'; +$labels['longacle'] = 'Les courriels peuvent-ĂŞtre purgĂ©s'; +$labels['longaclx'] = 'Le dossier peut-ĂŞtre supprimĂ© ou renommĂ©'; +$labels['longacla'] = 'Les droits d\'accès du dossier peuvent ĂŞtre modifiĂ©s'; +$labels['longacln'] = 'Les mĂ©tadonnĂ©es partagĂ©es des courriels (annotations) peuvent ĂŞtre changĂ©es'; +$labels['longaclfull'] = 'ContrĂ´le total, incluant l\'administration des dossiers'; +$labels['longaclread'] = 'Le dossier peut-ĂŞtre ouvert en lecture'; +$labels['longaclwrite'] = 'Les courriels peuvent-ĂŞtre marquĂ©s, Ă©crits ou copiĂ©s dans ce dossier'; +$labels['longacldelete'] = 'Les courriels peuvent ĂŞtre supprimĂ©s'; +$labels['longaclother'] = 'Autres droits d\'accès'; +$labels['ariasummaryacltable'] = 'Liste de droits d\'accès'; +$labels['arialabelaclactions'] = 'Lister les actions'; +$labels['arialabelaclform'] = 'Formulaire de droits d\'accès'; +$messages['deleting'] = 'Suppression des droits d\'accès…'; +$messages['saving'] = 'Enregistrement des droits d\'accès…'; +$messages['updatesuccess'] = 'Les droits d\'accès ont Ă©tĂ© changĂ©s avec succès'; +$messages['deletesuccess'] = 'Les droits d\'accès ont Ă©tĂ© supprimĂ©s avec succès'; +$messages['createsuccess'] = 'Les droits d\'accès ont Ă©tĂ© ajoutĂ©s avec succès'; +$messages['updateerror'] = 'Impossible de mettre Ă  jour les droits d\'accès'; +$messages['deleteerror'] = 'Impossible de supprimer les droits d\'accès'; +$messages['createerror'] = 'Impossible d\'ajouter des droits d\'accès'; +$messages['deleteconfirm'] = 'ĂŠtes-vous sĂ»r de vouloir retirer les droits d\'accès des utilisateurs sĂ©lectionnĂ©s ?'; +$messages['norights'] = 'Aucun droit n\'a Ă©tĂ© spĂ©cifiĂ© !'; +$messages['nouser'] = 'Aucun nom d\'utilisateur n\'a Ă©tĂ© spĂ©cifiĂ© !'; +?> diff --git a/data/web/rc/plugins/acl/localization/fy_NL.inc b/data/web/rc/plugins/acl/localization/fy_NL.inc new file mode 100644 index 00000000..aba20494 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/fy_NL.inc @@ -0,0 +1,23 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['username'] = 'BrĂ»ker:'; +$labels['acldelete'] = 'Fuortsmite'; +$labels['shortacld'] = 'Fuortsmite'; +$labels['shortaclt'] = 'Fuortsmite'; +$labels['shortacldelete'] = 'Fuortsmite'; +?> diff --git a/data/web/rc/plugins/acl/localization/gl_ES.inc b/data/web/rc/plugins/acl/localization/gl_ES.inc new file mode 100644 index 00000000..c1841f5a --- /dev/null +++ b/data/web/rc/plugins/acl/localization/gl_ES.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Compartindo'; +$labels['myrights'] = 'Permisos de acceso'; +$labels['username'] = 'Utente:'; +$labels['advanced'] = 'Modo avanzado'; +$labels['newuser'] = 'Engadir entrada'; +$labels['editperms'] = 'Editar permisos'; +$labels['actions'] = 'AcciĂłns sobre os Permisos de acceso...'; +$labels['anyone'] = 'Todas as persoas usuarias (calquera)'; +$labels['anonymous'] = 'Persoas convidadas (anĂłnimo)'; +$labels['identifier'] = 'Identificador'; +$labels['acll'] = 'Bloquear'; +$labels['aclr'] = 'Ler mensaxes'; +$labels['acls'] = 'Manter estado actividade'; +$labels['aclw'] = 'Marcas de lectura'; +$labels['acli'] = 'Engadir (Copiar en)'; +$labels['aclp'] = 'EnvĂ­o'; +$labels['aclc'] = 'Crear subcartafoles'; +$labels['aclk'] = 'Crear subcartafoles'; +$labels['acld'] = 'Borrar mensaxes'; +$labels['aclt'] = 'Borrar mensaxes'; +$labels['acle'] = 'Expurga'; +$labels['aclx'] = 'Eliminar cartafol'; +$labels['acla'] = 'Administrar'; +$labels['acln'] = 'Crear anotaciĂłns para as mensaxes'; +$labels['aclfull'] = 'Control total'; +$labels['aclother'] = 'Outros'; +$labels['aclread'] = 'Lectura'; +$labels['aclwrite'] = 'Escritura'; +$labels['acldelete'] = 'Borrado'; +$labels['shortacll'] = 'Buscar'; +$labels['shortaclr'] = 'Ler'; +$labels['shortacls'] = 'Manter'; +$labels['shortaclw'] = 'Escribir'; +$labels['shortacli'] = 'Inserir'; +$labels['shortaclp'] = 'Publicar'; +$labels['shortaclc'] = 'Crear'; +$labels['shortaclk'] = 'Crear'; +$labels['shortacld'] = 'Eliminar'; +$labels['shortaclt'] = 'Eliminar'; +$labels['shortacle'] = 'Expurga'; +$labels['shortaclx'] = 'Eliminar cartafol'; +$labels['shortacla'] = 'Administrar'; +$labels['shortacln'] = 'Crear anotaciĂłn'; +$labels['shortaclother'] = 'Outros'; +$labels['shortaclread'] = 'Lectura'; +$labels['shortaclwrite'] = 'Escritura'; +$labels['shortacldelete'] = 'Eliminar'; +$labels['longacll'] = 'O cartafol Ă© visĂ­bel e pode ser subscrito'; +$labels['longaclr'] = 'PĂłdese abrir o cartafol para lectura'; +$labels['longacls'] = 'PĂłdese mudar o marcador de Mensaxes Enviadas'; +$labels['longaclw'] = 'PĂłdense mudar marcadores e palabras chave agás Vistas e Borradas'; +$labels['longacli'] = 'PĂłdense escreber ou copiar as mensaxes a este cartafol'; +$labels['longaclp'] = 'PĂłdense enviar as mensaxes a este cartafol'; +$labels['longaclc'] = 'PĂłdense crear (ou renomear) os cartafoles directamente baixo deste cartafol'; +$labels['longaclk'] = 'PĂłdense crear (ou renomear) os cartafoles directamente baixo deste cartafol'; +$labels['longacld'] = 'PĂłdense mudar as mensaxes coa marca Eliminar'; +$labels['longaclt'] = 'PĂłdense mudar as mensaxes coa marca Eliminar'; +$labels['longacle'] = 'As mensaxes poden ser expurgadas'; +$labels['longaclx'] = 'PĂłdese borrar ou renomear o cartafol'; +$labels['longacla'] = 'PĂłdense mudar os permisos de acceso ao cartafol'; +$labels['longacln'] = 'PĂłdense trocar as anotaciĂłns das mensaxes'; +$labels['longaclfull'] = 'Control total inclĂşe administraciĂłn de cartafoles'; +$labels['longaclread'] = 'PĂłdese abrir o cartafol para lectura'; +$labels['longaclwrite'] = 'PĂłdense marcar, escribir ou copiar as mensaxes no cartafol'; +$labels['longacldelete'] = 'PĂłdense borrar as mensaxes'; +$labels['longaclother'] = 'Outros dereitos de acceso'; +$labels['ariasummaryacltable'] = 'Lista de dereitos de acceso'; +$labels['arialabelaclactions'] = 'AcciĂłns de lista'; +$labels['arialabelaclform'] = 'Formulario de dereitos de acceso'; +$messages['deleting'] = 'Borrando permisos de acceso...'; +$messages['saving'] = 'Gardando permisos de acceso...'; +$messages['updatesuccess'] = 'Mudados con Ă©xito os permisos de acceso'; +$messages['deletesuccess'] = 'Borrados con Ă©xito os permisos de acceso'; +$messages['createsuccess'] = 'Engadidos con Ă©xito os permisos de acceso'; +$messages['updateerror'] = 'Non se poden actualizar os permisos de acceso'; +$messages['deleteerror'] = 'Non se poden borrar os permisos de acceso'; +$messages['createerror'] = 'Non se poden engadir permisos de acceso'; +$messages['deleteconfirm'] = 'De certo que queres eliminar os permisos de acceso da(s) persoa(s) usuaria(s) escollida(s)?'; +$messages['norights'] = 'Non se especificaron permisos!'; +$messages['nouser'] = 'Non se especificou o nome da persoa usuaria!'; +?> diff --git a/data/web/rc/plugins/acl/localization/he_IL.inc b/data/web/rc/plugins/acl/localization/he_IL.inc new file mode 100644 index 00000000..e2bc2269 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/he_IL.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'שיתוף'; +$labels['myrights'] = 'זכויות גישה'; +$labels['username'] = 'משתמש:'; +$labels['advanced'] = 'מצב מתקדם'; +$labels['newuser'] = 'הוסף ערך'; +$labels['editperms'] = 'עריכת הרש×ות'; +$labels['actions'] = 'פעולות על זכויות גישה...'; +$labels['anyone'] = 'כל המשתמשים (כל ×חד)'; +$labels['anonymous'] = '×ורחים (×נונימי)'; +$labels['identifier'] = 'מזהה'; +$labels['acll'] = 'חיפוש'; +$labels['aclr'] = 'קרי×ת הודעות'; +$labels['acls'] = 'שמירה על ס××וס נר××”'; +$labels['aclw'] = 'דגלי כתיבה'; +$labels['acli'] = 'הוספה בין ערכים (העתקה לתוך)'; +$labels['aclp'] = 'פרסום'; +$labels['aclc'] = 'יצירת תת־תיקיות'; +$labels['aclk'] = 'יצירת תת־תיקיות'; +$labels['acld'] = 'מחיקת הודעות'; +$labels['aclt'] = 'מחיקת הודעות'; +$labels['acle'] = 'ניקוי רשומות שבו×לו'; +$labels['aclx'] = 'מחיקת תיקיה'; +$labels['acla'] = 'מנהל'; +$labels['acln'] = 'הוספה של הערת תיוג להודעות'; +$labels['aclfull'] = 'שלי××” מל××”'; +$labels['aclother'] = '×חר'; +$labels['aclread'] = 'קרי××”'; +$labels['aclwrite'] = 'כתיבה'; +$labels['acldelete'] = 'מחיקה'; +$labels['shortacll'] = 'חיפוש'; +$labels['shortaclr'] = 'קרי××”'; +$labels['shortacls'] = 'להש×יר'; +$labels['shortaclw'] = 'כתיבה'; +$labels['shortacli'] = 'הוספה בין ערכים'; +$labels['shortaclp'] = 'פרסום'; +$labels['shortaclc'] = 'יצירה'; +$labels['shortaclk'] = 'יצירה'; +$labels['shortacld'] = 'מחיקה'; +$labels['shortaclt'] = 'מחיקה'; +$labels['shortacle'] = 'ניקוי רשומות שבו×לו'; +$labels['shortaclx'] = 'מחיקת תיקיה'; +$labels['shortacla'] = 'מנהל'; +$labels['shortacln'] = 'הוספה של הערת תיוג'; +$labels['shortaclother'] = '×חר'; +$labels['shortaclread'] = 'קרי××”'; +$labels['shortaclwrite'] = 'כתיבה'; +$labels['shortacldelete'] = 'מחיקה'; +$labels['longacll'] = 'התיקיה תר××” ברשימות וניתן ×™×”×™×” להרשם ×ליה'; +$labels['longaclr'] = 'ניתן לפתוח ×ת התיקיה ×•×ś×§×¨×•× ×‘×”'; +$labels['longacls'] = 'ניתן לשנות דגל נר××” בהודעות'; +$labels['longaclw'] = 'ניתן לשנות דגלים ומילות מפתח בהודעות, ×ś×ž×˘× × ×¨××” ונמחק'; +$labels['longacli'] = 'ניתן לכתוב הודעות לתיקיה ×ו למוחקן'; +$labels['longaclp'] = 'ניתן לפרסם הודעות לתוך תיקיה זו'; +$labels['longaclc'] = 'ניתן ליצור (×ו לשנות שם) תיקיות, ישירות תחת תיקיה זו'; +$labels['longaclk'] = 'ניתן ליצור (×ו לשנות שם) תיקיות, ישירות תחת תיקיה זו'; +$labels['longacld'] = 'ניתן לשנות דגל נמחק של הודעות'; +$labels['longaclt'] = 'ניתן לשנות דגל נמחק של הודעות'; +$labels['longacle'] = 'ניתן לנקות הודעות שסומנו כמבו×לות'; +$labels['longaclx'] = 'ניתן למחוק תיקיה זו ×ו לשנות שמה'; +$labels['longacla'] = 'ניתן לשנות זכויות גישה של תיקיה זו'; +$labels['longacln'] = 'ניתן לשנות הערות תיוג המשותפות להודעות'; +$labels['longaclfull'] = 'שלי××” מל××” כולל ניהול התיקיה'; +$labels['longaclread'] = 'ניתן לפתוח ×ת התיקיה ×•×ś×§×¨×•× ×‘×”'; +$labels['longaclwrite'] = 'ניתן לסמן, לכתוב ×ו להעתיק הודעות לתיקיה זו'; +$labels['longacldelete'] = 'ניתן למחוק הודעות'; +$labels['longaclother'] = 'זכויות גישה ×חרות'; +$labels['ariasummaryacltable'] = 'רשימת זכויות גישה'; +$labels['arialabelaclactions'] = 'רשימת פעולות'; +$labels['arialabelaclform'] = '×ופס זכויות גישה'; +$messages['deleting'] = 'זכויות גישה נמחקות...'; +$messages['saving'] = 'זכויות גישה נשמרות...'; +$messages['updatesuccess'] = 'זכויות גישה שונו בהצלחה'; +$messages['deletesuccess'] = 'זכויות גישה נמחקו בהצלחה'; +$messages['createsuccess'] = 'זכויות גישה נוספו בהצלחה'; +$messages['updateerror'] = '×ś× × ×™×Ş×ź לעדכן הרש×ות גישה'; +$messages['deleteerror'] = '×ś× × ×™×Ş×ź למחוק זכויות גישה'; +$messages['createerror'] = '×ś× × ×™×Ş×ź להוסיף זכויות גישה'; +$messages['deleteconfirm'] = '×”×ם וד××™ שברצונך להסיר זכויות גישה של המשתמש(ים) שנבחרו?'; +$messages['norights'] = '×ś× ×¦×•×™× ×• זכויות גישה כלשהן !'; +$messages['nouser'] = '×ś× ×¦×•×™×ź שם משתמש כלשהו!'; +?> diff --git a/data/web/rc/plugins/acl/localization/hr_HR.inc b/data/web/rc/plugins/acl/localization/hr_HR.inc new file mode 100644 index 00000000..1feef241 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/hr_HR.inc @@ -0,0 +1,90 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Dijeljenje'; +$labels['myrights'] = 'Prava pristupa'; +$labels['username'] = 'Korisnik:'; +$labels['newuser'] = 'Dodaj unos/pravilo'; +$labels['editperms'] = 'Uredi dozvole'; +$labels['actions'] = 'Akcije prava pristupa...'; +$labels['anyone'] = 'Svi korisnici (anyone)'; +$labels['anonymous'] = 'Gosti (anonymous)'; +$labels['identifier'] = 'Identifikator'; +$labels['acll'] = 'Pretraga'; +$labels['aclr'] = 'ProÄŤitaj poruke'; +$labels['acls'] = 'ZadrĹľi u stanju "ViÄ‘eno"'; +$labels['aclw'] = 'Zapiši oznake'; +$labels['acli'] = 'Umetni (kopiraj u)'; +$labels['aclp'] = 'Pošalji'; +$labels['aclc'] = 'Napravi podmapu'; +$labels['aclk'] = 'Napravi podmapu'; +$labels['acld'] = 'Obriši poruke'; +$labels['aclt'] = 'Obriši poruke'; +$labels['acle'] = 'Trajno obriši'; +$labels['aclx'] = 'Obriši mapu'; +$labels['acla'] = 'Administriraj'; +$labels['aclfull'] = 'Potpuna kontrola'; +$labels['aclother'] = 'Drugo'; +$labels['aclread'] = 'ÄŚitanje'; +$labels['aclwrite'] = 'Pisanje'; +$labels['acldelete'] = 'Obriši'; +$labels['shortacll'] = 'PretraĹľi'; +$labels['shortaclr'] = 'ÄŚitaj'; +$labels['shortacls'] = 'ZadrĹľi'; +$labels['shortaclw'] = 'Piši'; +$labels['shortacli'] = 'Umetni'; +$labels['shortaclp'] = 'Pošalji'; +$labels['shortaclc'] = 'Stvori'; +$labels['shortaclk'] = 'Stvori'; +$labels['shortacld'] = 'Obriši'; +$labels['shortaclt'] = 'Obriši'; +$labels['shortacle'] = 'Trajno obriši'; +$labels['shortaclx'] = 'Obriši mapu'; +$labels['shortacla'] = 'Administriraj'; +$labels['shortaclother'] = 'Drugo'; +$labels['shortaclread'] = 'ÄŚitanje'; +$labels['shortaclwrite'] = 'Pisanje'; +$labels['shortacldelete'] = 'Brisanje'; +$labels['longacll'] = 'Mapa je vidljiva u listi i moĹľe se na nju pretplatiti'; +$labels['longaclr'] = 'Mapa moĹľe biti otvorena za ÄŤitanje'; +$labels['longacls'] = 'Oznaku "ViÄ‘eno" je moguće mijenjati u porukama'; +$labels['longaclw'] = 'Oznake i kljuÄŤne rijeÄŤi, osim oznaka "ViÄ‘eno" i "Obrisano", se mogu mijenjati'; +$labels['longacli'] = 'Poruke mogu biti pohranjene ili kopirane u mapu'; +$labels['longaclp'] = 'Poruke mogu biti postavljene u mapu'; +$labels['longaclc'] = 'Mape pod ovom mapom se mogu stvarati (i preimenovati)'; +$labels['longaclk'] = 'Mape pod ovom mapom se mogu stvarati (i preimenovati)'; +$labels['longacld'] = 'Oznaku "Obrisano" je moguće mijenjati u porukama'; +$labels['longaclt'] = 'Oznaku "Obrisano" je moguće mijenjati u porukama'; +$labels['longacle'] = 'Poruke mogu biti izbrisane'; +$labels['longaclx'] = 'Mapa moĹľe biti obrisana ili preimenovana'; +$labels['longacla'] = 'Prava pristupa nad mapom se mogu mijenjati'; +$labels['longaclfull'] = 'Potpuna kontrola ukljuÄŤujući administraciju mapa'; +$labels['longaclread'] = 'Mapa moĹľe biti otvorena za ÄŤitanje'; +$labels['longaclwrite'] = 'Poruke mogu biti oznaÄŤene, pohranjene ili kopirane u mapu'; +$labels['longacldelete'] = 'Poruke mogu biti obrisane'; +$messages['deleting'] = 'Brišem prava pristupa...'; +$messages['saving'] = 'Pohranjujem prava pristupa'; +$messages['updatesuccess'] = 'Prava pristupa uspješno promjenjena'; +$messages['deletesuccess'] = 'Prava pristupa uspješno obrisana'; +$messages['createsuccess'] = 'Prava pristupa uspješno dodana'; +$messages['updateerror'] = 'Ne mogu pohraniti vCard'; +$messages['deleteerror'] = 'Ne mogu obrisati prava pristupa'; +$messages['createerror'] = 'Ne mogu dodati prava pristupa'; +$messages['deleteconfirm'] = 'Jeste li sigurni da Ĺľelite obrisati prava pristupa za odabranog korisnika(e)?'; +$messages['norights'] = 'Nije navedeno pravo pristupa!'; +$messages['nouser'] = 'Nije navedeno korisniÄŤko ime!'; +?> diff --git a/data/web/rc/plugins/acl/localization/hu_HU.inc b/data/web/rc/plugins/acl/localization/hu_HU.inc new file mode 100644 index 00000000..61aee9cd --- /dev/null +++ b/data/web/rc/plugins/acl/localization/hu_HU.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Megosztás'; +$labels['myrights'] = 'HozzáfĂ©rĂ©si jogok'; +$labels['username'] = 'FelhasználĂł:'; +$labels['advanced'] = 'HaladĂł mĂłd'; +$labels['newuser'] = 'Elem hozzáadása'; +$labels['editperms'] = 'Jogosultságok szerkesztĂ©se'; +$labels['actions'] = 'HozzáfĂ©rĂ©si jogok mĂĽveletei..'; +$labels['anyone'] = 'Minden felhasználĂł (bárki)'; +$labels['anonymous'] = 'VendĂ©gek (nĂ©vtelen)'; +$labels['identifier'] = 'AzonosĂ­tĂł'; +$labels['acll'] = 'KeresĂ©s'; +$labels['aclr'] = 'Ăśzenetek olvasása'; +$labels['acls'] = 'Olvasottsági állapot megtartása'; +$labels['aclw'] = 'Ăśzenet jelölĂ©se'; +$labels['acli'] = 'BeillesztĂ©s (Bemásolás)'; +$labels['aclp'] = 'BejegyzĂ©s'; +$labels['aclc'] = 'Almappa lĂ©trehozás'; +$labels['aclk'] = 'Almappa lĂ©trehozás'; +$labels['acld'] = 'Ăśzenetek törlĂ©se'; +$labels['aclt'] = 'Ăśzenetek törlĂ©se'; +$labels['acle'] = 'Törölt ĂĽzenetek eltávolĂ­tása'; +$labels['aclx'] = 'Mappa törlĂ©s'; +$labels['acla'] = 'Adminisztrátor'; +$labels['acln'] = 'Ăśzenetekhez cĂ­mkĂ©zĂ©s'; +$labels['aclfull'] = 'Teljes hozzáfĂ©rĂ©s'; +$labels['aclother'] = 'EgyĂ©b'; +$labels['aclread'] = 'Olvasás'; +$labels['aclwrite'] = 'ĂŤrás'; +$labels['acldelete'] = 'TörlĂ©s'; +$labels['shortacll'] = 'KeresĂ©s'; +$labels['shortaclr'] = 'Olvasás'; +$labels['shortacls'] = 'Megtartás'; +$labels['shortaclw'] = 'ĂŤrás'; +$labels['shortacli'] = 'BeszĂşrás'; +$labels['shortaclp'] = 'BejegyzĂ©s'; +$labels['shortaclc'] = 'LĂ©trehozás'; +$labels['shortaclk'] = 'LĂ©trehozás'; +$labels['shortacld'] = 'TörlĂ©s'; +$labels['shortaclt'] = 'TörlĂ©s'; +$labels['shortacle'] = 'Törölt ĂĽzenetek eltávolĂ­tása'; +$labels['shortaclx'] = 'Mappa törlĂ©se'; +$labels['shortacla'] = 'Adminisztrátor'; +$labels['shortacln'] = 'CimkĂ©zĂ©s'; +$labels['shortaclother'] = 'EgyĂ©b'; +$labels['shortaclread'] = 'Olvasás'; +$labels['shortaclwrite'] = 'ĂŤrás'; +$labels['shortacldelete'] = 'TörlĂ©s'; +$labels['longacll'] = 'A mappa láthatĂł a listán Ă©s fel tudsz rá iratkozni.'; +$labels['longaclr'] = 'A mappa olvasásra megnyithatĂł'; +$labels['longacls'] = 'Az ĂĽzenet megtekintĂ©si állapota mĂłdosĂ­thatĂł'; +$labels['longaclw'] = 'Az ĂĽzenetek jelölĂ©sei Ă©s kulcsszavai mĂłdosĂ­thatĂłak, kivĂ©ve az olvasottsági állapotot Ă©s az ĂĽzenet törölt állapotát.'; +$labels['longacli'] = 'Ăśzenetek irhatĂłak Ă©s máolshatĂłak a mappába.'; +$labels['longaclp'] = 'Ebbe a mappába tudsz ĂĽzeneteket tenni.'; +$labels['longaclc'] = 'Mappák lĂ©trehozhazĂłak (átnevezhetĹ‘ek) ez alatt a mappa alatt.'; +$labels['longaclk'] = 'Mappák lĂ©trehozhazĂłak (átnevezhetĹ‘ek) ez alatt a mappa alatt.'; +$labels['longacld'] = 'Ăśzenet törölve jelzĹ‘ mĂłdosithatĂł.'; +$labels['longaclt'] = 'Ăśzenet törölve jelzĹ‘ mĂłdosithatĂł.'; +$labels['longacle'] = 'Az ĂĽzenetek vĂ©glegesen eltávolĂ­thatĂłak'; +$labels['longaclx'] = 'A mappa törölhetĹ‘ vagy átnevezhetĹ‘'; +$labels['longacla'] = 'A mappa hozzáfĂ©rĂ©si jogai mĂłdosĂ­thatĂłak'; +$labels['longacln'] = 'Ăśzenetek megosztott metaadatai(cimkĂ©i) mĂłdosĂ­thatoak'; +$labels['longaclfull'] = 'Teljes hozzáfĂ©rĂ©s beleĂ©rtve a mappák kezelĂ©sĂ©t'; +$labels['longaclread'] = 'A mappa olvasásra megnyithatĂł'; +$labels['longaclwrite'] = 'Az ĂĽzenetek megjelölhetök, irhatĂłk Ă©s másolhatĂłk ebbe a mappába'; +$labels['longacldelete'] = 'Az ĂĽzenetek törölhetĹ‘ek'; +$labels['longaclother'] = 'EgyĂ©bb hozzáfĂ©rĂ©si jogok'; +$labels['ariasummaryacltable'] = 'HozzáfĂ©rĂ©si jogok listája'; +$labels['arialabelaclactions'] = 'Listázási mĂĽveletek'; +$labels['arialabelaclform'] = 'HozzáfĂ©rĂ©si jogok űrlap'; +$messages['deleting'] = 'HozzáfĂ©rĂ©si jogok törlĂ©se...'; +$messages['saving'] = 'HozzáfĂ©rĂ©si jogok mentĂ©se...'; +$messages['updatesuccess'] = 'A hozzáfĂ©rĂ©si jogok sikeresen mĂłdosultak.'; +$messages['deletesuccess'] = 'A hozzáfĂ©rĂ©si jogok törlĂ©se sikeresen megtörtĂ©nt.'; +$messages['createsuccess'] = 'A hozzáfĂ©rĂ©si jogok hozzáadása sikeresen megtörtĂ©nt.'; +$messages['updateerror'] = 'Nem sikerĂĽlt mĂłdosĂ­tani a hozzáfĂ©rĂ©si jogokat.'; +$messages['deleteerror'] = 'Nem sikerĂĽlt törölni a hozzáfĂ©rĂ©si jogokat.'; +$messages['createerror'] = 'Nem sikerĂĽlt a hozzáfĂ©rĂ©si jogok hozzáadása'; +$messages['deleteconfirm'] = 'Biztosan eltávolĂ­tja a kiválasztott felhasználĂł(k) hozzáfĂ©rĂ©si jogait?'; +$messages['norights'] = 'Nincsennek jogok megadva.'; +$messages['nouser'] = 'A felhasználĂłnĂ©v nincs megadva.'; +?> diff --git a/data/web/rc/plugins/acl/localization/hy_AM.inc b/data/web/rc/plugins/acl/localization/hy_AM.inc new file mode 100644 index 00000000..62f081fe --- /dev/null +++ b/data/web/rc/plugins/acl/localization/hy_AM.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'ÔżŐ«Ő˝ŐľŐĄŐ¬'; +$labels['myrights'] = 'Ő„Ő¸Ö‚ŐżÖ„Ő« Ő«Ö€ŐˇŐľŐ¸Ö‚Ő¶Ö„Ő¶ŐĄÖ€'; +$labels['username'] = 'Ő•ŐŁŐżŐˇŐżŐĄÖ€`'; +$labels['advanced'] = 'Ô±ŐĽŐˇŐ»ŐˇŐ¤ŐĄŐ´ ŐĽŐĄŐŞŐ«Ő´'; +$labels['newuser'] = 'Ô±ŐľŐĄŐ¬ŐˇÖŐ¶ŐĄŐ¬ ŐŁÖ€ŐˇŐĽŐ¸Ö‚Ő´'; +$labels['editperms'] = 'Ô˝Ő´Ő˘ŐˇŐŁÖ€ŐĄŐ¬ Ő©Ő¸Ö‚ŐµŐ¬ŐżŐľŐ¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¶ŐĄÖ€Ő¨'; +$labels['actions'] = 'Ő„Ő¸Ö‚ŐżÖ„Ő« Ő«Ö€ŐˇŐľŐ¸Ö‚Ő¶Ö„Ő¶ŐĄÖ€Ő« գործողություններ…'; +$labels['anyone'] = 'Ô˛Ő¸Ő¬Ő¸Ö€ Ö…ŐŁŐżŐľŐ¸Ő˛Ő¶ŐĄÖ€Ő¨ (ÖŐˇŐ¶ŐŻŐˇÖŐˇŐ®)'; +$labels['anonymous'] = 'Ő€ŐµŐ¸Ö‚Ö€ŐĄÖ€Ő¨ (ŐˇŐ¶ŐˇŐ¶Ő¸Ö‚Ő¶)'; +$labels['identifier'] = 'Ő†ŐŻŐˇÖ€ŐˇŐŁÖ€Ő«Őą'; +$labels['acll'] = 'Ő“Ő¶ŐżÖ€Ő¸Ö‚Ő´'; +$labels['aclr'] = 'ÔżŐˇÖ€Ő¤ŐˇŐ¬ Ő°ŐˇŐ˛Ő¸Ö€Ő¤ŐˇŐŁÖ€Ő¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¶ŐĄÖ€Ő¨'; +$labels['acls'] = 'ŐŠŐˇŐ°ŐşŐˇŐ¶ŐĄŐ¬ Ő¤Ő«ŐżŐ´ŐˇŐ¶ ŐŻŐˇÖ€ŐŁŐˇŐľŐ«ŐłŐˇŐŻŐ¨'; +$labels['aclw'] = 'ÔłÖ€ŐˇŐĽŐ´ŐˇŐ¶ Ő¶Ő·Ő¸Ö‚Ő´Ő¶ŐĄÖ€'; +$labels['acli'] = 'Ő†ŐĄÖ€Ő¤Ő¶ŐĄŐ¬ (ŐŠŐˇŐżŐłŐĄŐ¶ŐĄŐ¬ Ő¶ŐĄÖ€Ő˝)'; +$labels['aclp'] = 'Ő€Ö€ŐˇŐşŐˇÖ€ŐˇŐŻŐĄŐ¬'; +$labels['aclc'] = 'ŐŤŐżŐĄŐ˛Ő®ŐĄŐ¬ ŐĄŐ¶Ő©ŐˇŐşŐˇŐ¶ŐˇŐŻŐ¶ŐĄÖ€'; +$labels['aclk'] = 'ŐŤŐżŐĄŐ˛Ő®ŐĄŐ¬ ŐĄŐ¶Ő©ŐˇŐşŐˇŐ¶ŐˇŐŻŐ¶ŐĄÖ€'; +$labels['acld'] = 'Ő‹Ő¶Ő»ŐĄŐ¬ Ő°ŐˇŐ˛Ő¸Ö€Ő¤ŐˇŐŁÖ€Ő¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¶ŐĄÖ€Ő¨'; +$labels['aclt'] = 'Ő‹Ő¶Ő»ŐĄŐ¬ Ő°ŐˇŐ˛Ő¸Ö€Ő¤ŐˇŐŁÖ€Ő¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¶ŐĄÖ€Ő¨'; +$labels['acle'] = 'Ő€ŐĄŐĽŐˇÖŐ¶ŐĄŐ¬'; +$labels['aclx'] = 'Ő‹Ő¶Ő»ŐĄŐ¬ ŐşŐˇŐ¶ŐˇŐŻŐ¨'; +$labels['acla'] = 'ÔżŐˇŐĽŐˇŐľŐˇÖ€ŐĄŐ¬'; +$labels['acln'] = 'ÔľŐˇŐ¶Ő¸Ő©ŐˇŐŁÖ€ŐĄŐ¬ Ő°ŐˇŐ˛Ő¸Ö€Ő¤ŐˇŐŁÖ€Ő¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¶ŐĄÖ€Ő¨'; +$labels['aclfull'] = 'ÔĽÖ€Ő«Őľ ŐľŐĄÖ€ŐˇŐ°Ő˝ŐŻŐ¸Ö‚Ő´'; +$labels['aclother'] = 'Ô±ŐµŐ¬'; +$labels['aclread'] = 'ÔżŐˇÖ€Ő¤ŐˇŐ¬'; +$labels['aclwrite'] = 'ÔłÖ€ŐĄŐ¬'; +$labels['acldelete'] = 'Ő‹Ő¶Ő»ŐĄŐ¬'; +$labels['shortacll'] = 'Ő“Ő¶ŐżÖ€Ő¸Ö‚Ő´'; +$labels['shortaclr'] = 'ÔżŐˇÖ€Ő¤ŐˇŐ¬'; +$labels['shortacls'] = 'ŐŠŐˇŐ°ŐĄŐ¬'; +$labels['shortaclw'] = 'ÔłÖ€ŐĄŐ¬'; +$labels['shortacli'] = 'Ő†ŐĄÖ€Ő¤Ő¶ŐĄŐ¬'; +$labels['shortaclp'] = 'Ő€Ö€ŐˇŐşŐˇÖ€ŐˇŐŻŐĄŐ¬'; +$labels['shortaclc'] = 'ŐŤŐżŐĄŐ˛Ő®ŐĄŐ¬'; +$labels['shortaclk'] = 'ŐŤŐżŐĄŐ˛Ő®ŐĄŐ¬'; +$labels['shortacld'] = 'Ő‹Ő¶Ő»ŐĄŐ¬'; +$labels['shortaclt'] = 'Ő‹Ő¶Ő»ŐĄŐ¬'; +$labels['shortacle'] = 'Ő€ŐĄŐĽŐˇÖŐ¶ŐĄŐ¬'; +$labels['shortaclx'] = 'ŐŠŐˇŐ¶ŐˇŐŻŐ« Ő»Ő¶Ő»Ő¸Ö‚Ő´'; +$labels['shortacla'] = 'ÔżŐˇŐĽŐˇŐľŐˇÖ€ŐĄŐ¬'; +$labels['shortacln'] = 'ÔľŐˇŐ¶Ő¸Ő©ŐˇŐŁÖ€ŐĄŐ¬'; +$labels['shortaclother'] = 'Ô±ŐµŐ¬'; +$labels['shortaclread'] = 'ÔżŐˇÖ€Ő¤ŐˇŐ¬'; +$labels['shortaclwrite'] = 'ÔłÖ€ŐĄŐ¬'; +$labels['shortacldelete'] = 'Ő‹Ő¶Ő»ŐĄŐ¬'; +$labels['longacll'] = 'ŐŠŐˇŐ¶ŐˇŐŻŐ¨ ŐĄÖ€Ö‡Ő¸Ö‚Ő´ Ő§ ÖŐ¸Ö‚ÖŐˇŐŻŐ¶ŐĄÖ€Ő¸Ö‚Ő´ Ö‡ Ő¶Ö€ŐˇŐ¶ Ő°Ő¶ŐˇÖ€ŐˇŐľŐ¸Ö€ Ő§ Ő˘ŐˇŐŞŐˇŐ¶Ő¸Ö€Ő¤ŐˇŐŁÖ€ŐľŐĄŐ¬'; +$labels['longaclr'] = 'ŐŠŐˇŐ¶ŐˇŐŻŐ¨ ŐŻŐˇÖ€Ő¸Ő˛ Ő§ Ő˘ŐˇÖŐľŐĄŐ¬ Ő¨Ő¶Ő©ŐĄÖ€ÖŐ´ŐˇŐ¶ Ő°ŐˇŐ´ŐˇÖ€'; +$labels['longacls'] = 'ŐŹŐĄŐ˝ŐľŐˇŐ® Ő°ŐˇŐ˛Ő¸Ö€Ő¤ŐˇŐŁÖ€Ő¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¶ŐĄÖ€Ő« Ő¶Ő·Ő¸Ö‚Ő´Ő¨ ŐŻŐˇÖ€Ő¸Ő˛ Ő§ ÖŐ¸ÖŐ¸Ő­ŐľŐĄŐ¬'; +$labels['longaclw'] = 'Ő€ŐˇŐ˛Ő¸Ö€Ő¤ŐˇŐŁÖ€Ő¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¶ŐĄÖ€Ő« Ő¶Ő·Ő¸Ö‚Ő´Ő¶ŐĄÖ€Ő¨ Ö‡ Ő°Ő«Ő´Ő¶ŐˇŐ˘ŐˇŐĽŐĄÖ€Ő¨ ŐŻŐˇÖ€Ő¸Ő˛ ŐĄŐ¶ ÖŐ¸ÖŐ¸Ő­ŐľŐĄŐ¬, Ő˘ŐˇÖŐˇŐĽŐ¸Ö‚Ő©ŐµŐˇŐ´Ő˘ ŐŹŐĄŐ˝ŐˇŐ® Ö‡ Ő‹Ő¶Ő»ŐľŐˇŐ® Ő¶Ő·Ő¸Ö‚Ő´Ő¶ŐĄÖ€Ő«'; +$labels['longacli'] = 'Ő€ŐˇŐ˛Ő¸Ö€Ő¤ŐˇŐŁÖ€Ő¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¶ŐĄÖ€Ő¨ ŐŻŐˇÖ€Ő¸Ő˛ ŐĄŐ¶ ŐŁÖ€ŐľŐĄŐ¬ Ö‡ ŐşŐˇŐżŐłŐĄŐ¶ŐľŐĄŐ¬ ŐşŐˇŐ¶ŐˇŐŻŐ« Ő´ŐĄŐ»'; +$labels['longaclp'] = 'Ő€ŐˇŐ˛Ő¸Ö€Ő¤ŐˇŐŁÖ€Ő¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¶ŐĄÖ€Ő¨ ŐŻŐˇÖ€Ő¸Ő˛ ŐĄŐ¶ Ő°Ö€ŐˇŐşŐˇÖ€ŐˇŐŻŐľŐĄŐ¬ ŐˇŐµŐ˝ ŐşŐˇŐ¶ŐˇŐŻŐ¸Ö‚Ő´'; +$labels['longaclc'] = 'ŐŠŐˇŐ¶ŐˇŐŻŐ¶ŐĄÖ€Ő¨ ŐŻŐˇÖ€Ő¸Ő˛ ŐĄŐ¶ Ő˝ŐżŐĄŐ˛Ő®ŐľŐĄŐ¬ (ŐŻŐˇŐ´ ŐľŐĄÖ€ŐˇŐ¶ŐľŐˇŐ¶ŐľŐĄŐ¬) ŐˇŐµŐ˝ ŐşŐˇŐ¶ŐˇŐŻŐ¸Ö‚Ő´'; +$labels['longaclk'] = 'ŐŠŐˇŐ¶ŐˇŐŻŐ¶ŐĄÖ€Ő¨ ŐŻŐˇÖ€Ő¸Ő˛ ŐĄŐ¶ Ő˝ŐżŐĄŐ˛Ő®ŐľŐĄŐ¬ (ŐŻŐˇŐ´ ŐľŐĄÖ€ŐˇŐ¶ŐľŐˇŐ¶ŐľŐĄŐ¬) ŐˇŐµŐ˝ ŐşŐˇŐ¶ŐˇŐŻŐ¸Ö‚Ő´'; +$labels['longacld'] = 'Ő€ŐˇŐ˛Ő¸Ö€Ő¤ŐˇŐŁÖ€Ő¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¶ŐĄÖ€Ő« Ő‹Ő¶Ő»ŐĄŐ¬ Ő¶Ő·Ő¸Ö‚Ő´Ő¨ ŐŻŐˇÖ€Ő¸Ő˛ Ő§ ÖŐ¸ÖŐ¸Ő­ŐľŐĄŐ¬'; +$labels['longaclt'] = 'Ő€ŐˇŐ˛Ő¸Ö€Ő¤ŐˇŐŁÖ€Ő¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¶ŐĄÖ€Ő« Ő‹Ő¶Ő»ŐĄŐ¬ Ő¶Ő·Ő¸Ö‚Ő´Ő¨ ŐŻŐˇÖ€Ő¸Ő˛ Ő§ ÖŐ¸ÖŐ¸Ő­ŐľŐĄŐ¬'; +$labels['longacle'] = 'Ő€ŐˇŐ˛Ő¸Ö€Ő¤ŐˇŐŁÖ€Ő¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¶ŐĄÖ€Ő¨ ŐŻŐˇÖ€Ő¸Ő˛ ŐĄŐ¶ Ő°ŐĄŐĽŐˇÖŐľŐĄŐ¬'; +$labels['longaclx'] = 'ŐŠŐˇŐ¶ŐˇŐŻŐ¨ ŐŻŐˇÖ€Ő¸Ő˛ Ő§ Ő»Ő¶Ő»ŐľŐĄŐ¬ ŐŻŐˇŐ´ ŐľŐĄÖ€ŐˇŐ¶ŐľŐˇŐ¶ŐľŐĄŐ¬'; +$labels['longacla'] = 'ŐŠŐˇŐ¶ŐˇŐŻŐ« Ő´Ő¸Ö‚ŐżÖ„Ő« Ő«Ö€ŐˇŐľŐ¸Ö‚Ő¶Ö„Ő¶ŐĄÖ€Ő¨ ŐŻŐˇÖ€Ő¸Ő˛ ŐĄŐ¶ ÖŐ¸ÖŐ¸Ő­ŐľŐĄŐ¬'; +$labels['longacln'] = 'Ő€ŐˇŐ˛Ő¸Ö€Ő¤ŐˇŐŁÖ€Ő¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¶ŐĄÖ€Ő« Ő˘ŐˇŐ·Ő­ŐľŐˇŐ® ŐżŐľŐµŐˇŐ¬Ő¶ŐĄÖ€Ő¨ (Ő®ŐˇŐ¶Ő¸Ő©ŐˇŐŁÖ€Ő¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¶ŐĄÖ€Ő¨) ŐŻŐˇÖ€Ő¸Ő˛ ŐĄŐ¶ ÖŐ¸ÖŐ¸Ő­ŐľŐĄŐ¬'; +$labels['longaclfull'] = 'ÔĽÖ€Ő«Őľ ŐľŐĄÖ€ŐˇŐ°Ő˝ŐŻŐ¸Ö‚Ő´ Ő¶ŐĄÖ€ŐˇŐĽŐµŐˇŐ¬ ŐşŐˇŐ¶ŐˇŐŻŐ¶ŐĄÖ€Ő« ŐŻŐˇŐĽŐˇŐľŐˇÖ€Ő¸Ö‚Ő´Ő¨'; +$labels['longaclread'] = 'ŐŠŐˇŐ¶ŐˇŐŻŐ¨ ŐŻŐˇÖ€Ő¸Ő˛ Ő§ Ő˘ŐˇÖŐľŐĄŐ¬ Ő¨Ő¶Ő©ŐĄÖ€ÖŐ´ŐˇŐ¶ Ő°ŐˇŐ´ŐˇÖ€'; +$labels['longaclwrite'] = 'Ő€ŐˇŐ˛Ő¸Ö€Ő¤ŐˇŐŁÖ€Ő¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¶ŐĄÖ€Ő¨ ŐŻŐˇÖ€Ő¸Ő˛ ŐĄŐ¶ Ő¶Ő·ŐľŐĄŐ¬, Ő˝ŐżŐĄŐ˛Ő®ŐľŐĄŐ¬ Ö‡ ŐşŐˇŐżŐłŐĄŐ¶ŐľŐĄŐ¬ ŐˇŐµŐ˝ ŐşŐˇŐ¶ŐˇŐŻŐ¸Ö‚Ő´'; +$labels['longacldelete'] = 'Ő€ŐˇŐ˛Ő¸Ö€Ő¤ŐˇŐŁÖ€Ő¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¶ŐĄÖ€Ő¨ ŐŻŐˇÖ€Ő¸Ő˛ ŐĄŐ¶ Ő»Ő¶Ő»ŐľŐĄŐ¬'; +$labels['longaclother'] = 'Ő„Ő¸Ö‚ŐżÖ„Ő« ŐˇŐµŐ¬ Ő«Ö€ŐˇŐľŐ¸Ö‚Ő¶Ö„Ő¶ŐĄÖ€Ő¨'; +$labels['ariasummaryacltable'] = 'Ő„Ő¸Ö‚ŐżÖ„Ő« Ő«Ö€ŐˇŐľŐ¸Ö‚Ő¶Ö„Ő¶ŐĄÖ€Ő« ÖŐ¸Ö‚ÖŐˇŐŻŐ¨'; +$labels['arialabelaclactions'] = 'ÔłŐ¸Ö€Ő®Ő¸Ő˛Ő¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¶ŐĄÖ€Ő« ÖŐ¸Ö‚ÖŐˇŐŻŐ¨'; +$labels['arialabelaclform'] = 'Ő„Ő¸Ö‚ŐżÖ„Ő« Ő«Ö€ŐˇŐľŐ¸Ö‚Ő¶Ö„Ő¶ŐĄÖ€Ő« Ő˘Ő¬ŐˇŐ¶ŐŻ'; +$messages['deleting'] = 'Ő‹Ő¶Ő»ŐľŐ¸Ö‚Ő´ ŐĄŐ¶ Ő´Ő¸Ö‚ŐżÖ„Ő« իրավունքները…'; +$messages['saving'] = 'ŐŠŐˇŐ°ŐşŐˇŐ¶ŐľŐ¸Ö‚Ő´ ŐĄŐ¶ Ő´Ő¸Ö‚ŐżÖ„Ő« իրավունքները…'; +$messages['updatesuccess'] = 'Ő„Ő¸Ö‚ŐżÖ„Ő« Ő«Ö€ŐˇŐľŐ¸Ö‚Ő¶Ö„Ő¶ŐĄÖ€Ő¨ Ő˘ŐˇÖ€ŐĄŐ°ŐˇŐ»Ő¸Ő˛ ÖŐ¸ÖŐ¸Ő­ŐľŐĄÖŐ«Ő¶Ö‰'; +$messages['deletesuccess'] = 'Ő„Ő¸Ö‚ŐżÖ„Ő« Ő«Ö€ŐˇŐľŐ¸Ö‚Ő¶Ö„Ő¶ŐĄÖ€Ő¨ Ő˘ŐˇÖ€ŐĄŐ°ŐˇŐ»Ő¸Ő˛ Ő»Ő¶Ő»ŐľŐĄÖŐ«Ő¶Ö‰'; +$messages['createsuccess'] = 'Ő„Ő¸Ö‚ŐżÖ„Ő« Ő«Ö€ŐˇŐľŐ¸Ö‚Ő¶Ö„Ő¶ŐĄÖ€Ő¨ Ő˘ŐˇÖ€ŐĄŐ°ŐˇŐ»Ő¸Ő˛ ŐˇŐľŐĄŐ¬ŐˇÖŐľŐĄÖŐľŐ«Ő¶Ö‰'; +$messages['updateerror'] = 'Ő„Ő¸Ö‚ŐżÖ„Ő« Ő«Ö€ŐˇŐľŐ¸Ö‚Ő¶Ö„Ő¶ŐĄÖ€Ő« Ő©ŐˇÖ€Ő´ŐˇÖŐ¸Ö‚Ő´Ő¨ ŐˇŐ¶Ő»ŐˇŐżŐĄŐ¬'; +$messages['deleteerror'] = 'Ő„Ő¸Ö‚ŐżÖ„Ő« Ő«Ö€ŐˇŐľŐ¸Ö‚Ő¶Ö„Ő¶ŐĄÖ€Ő¨ Ő»Ő¶Ő»Ő¸Ö‚Ő´Ő¨ Ő±ŐˇŐ­Ő¸Ő˛ŐľŐĄÖÖ‰'; +$messages['createerror'] = 'Ő„Ő¸Ö‚ŐżÖ„Ő« Ő«Ö€ŐˇŐľŐ¸Ö‚Ő¶Ö„Ő¶ŐĄÖ€Ő¨ ŐˇŐľŐĄŐ¬ŐˇÖŐ¸Ö‚Ő´Ő¨ Ő±ŐˇŐ­Ő¸Ő˛ŐľŐĄÖÖ‰'; +$messages['deleteconfirm'] = 'Ô´Ő¸Ö‚Ö„ ŐľŐ˝ŐżŐˇŐžŐ° Ő§Ö„, Ő¸Ö€ ÖŐˇŐ¶ŐŻŐˇŐ¶Ő¸Ö‚Ő´ ŐĄÖ„ Ő¶Ő·ŐľŐˇŐ® Ö…ŐŁŐżŐľŐ¸Ő˛Ő¶ŐĄÖ€Ő«Ő¶ Ő¦Ö€ŐŻŐĄŐ¬ Ő´Ő¸Ö‚ŐżÖ„Ő« Ő«Ö€ŐˇŐľŐ¸Ö‚Ő¶Ö„Ő¶ŐĄÖ€Ő«ÖÖ‰'; +$messages['norights'] = 'ŐŐą Ő´Ő« Ő«Ö€ŐˇŐľŐ¸Ö‚Ő¶Ö„ ŐąŐ«Ő› Ő¶Ő·ŐľŐĄŐ¬Ö‰'; +$messages['nouser'] = 'Ő•ŐŁŐżŐľŐ¸Ő˛Ő« ŐˇŐ¶Ő¸Ö‚Ő¶Ő¨ ŐąŐ«Ő› Ő¶Ő·ŐľŐĄŐ¬Ö‰'; +?> diff --git a/data/web/rc/plugins/acl/localization/ia.inc b/data/web/rc/plugins/acl/localization/ia.inc new file mode 100644 index 00000000..c3627389 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/ia.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Uso in commun'; +$labels['myrights'] = 'Derectos de accesso'; +$labels['username'] = 'Usator:'; +$labels['advanced'] = 'Modo avantiate'; +$labels['newuser'] = 'Adder entrata'; +$labels['editperms'] = 'Modificar permissiones'; +$labels['actions'] = 'Actiones de derecto de accesso...'; +$labels['anyone'] = 'Tote le usatores (non importa qui)'; +$labels['anonymous'] = 'Hospites (anonyme)'; +$labels['identifier'] = 'Identificator'; +$labels['acll'] = 'Cercar'; +$labels['aclr'] = 'Leger messages'; +$labels['acls'] = 'Retener le stato Vidite'; +$labels['aclw'] = 'Signales de scriptura'; +$labels['acli'] = 'Inserer (copiar in)'; +$labels['aclp'] = 'Inviar'; +$labels['aclc'] = 'Crear subdossieres'; +$labels['aclk'] = 'Crear subdossieres'; +$labels['acld'] = 'Deler messages'; +$labels['aclt'] = 'Deler messages'; +$labels['acle'] = 'Expunger'; +$labels['aclx'] = 'Deler dossier'; +$labels['acla'] = 'Administrar'; +$labels['acln'] = 'Annotar messages'; +$labels['aclfull'] = 'Controlo total'; +$labels['aclother'] = 'Altere'; +$labels['aclread'] = 'Leger'; +$labels['aclwrite'] = 'Scriber'; +$labels['acldelete'] = 'Deler'; +$labels['shortacll'] = 'Cercar'; +$labels['shortaclr'] = 'Leger'; +$labels['shortacls'] = 'Retener'; +$labels['shortaclw'] = 'Scriber'; +$labels['shortacli'] = 'Inserer'; +$labels['shortaclp'] = 'Inviar'; +$labels['shortaclc'] = 'Crear'; +$labels['shortaclk'] = 'Crear'; +$labels['shortacld'] = 'Deler'; +$labels['shortaclt'] = 'Deler'; +$labels['shortacle'] = 'Expunger'; +$labels['shortaclx'] = 'Deletion de dossier'; +$labels['shortacla'] = 'Administrar'; +$labels['shortacln'] = 'Annotar'; +$labels['shortaclother'] = 'Altere'; +$labels['shortaclread'] = 'Leger'; +$labels['shortaclwrite'] = 'Scriber'; +$labels['shortacldelete'] = 'Deler'; +$labels['longacll'] = 'Le dossier es visibile in listas e on pote subscriber se a illo'; +$labels['longaclr'] = 'Le dossier pote esser aperite pro lectura'; +$labels['longacls'] = 'Le signal "Vidite" de messages pote esser cambiate'; +$labels['longaclw'] = 'Le signales e parolas-clave de messages pote esser cambiate, excepte "Vidite" e "Delite"'; +$labels['longacli'] = 'Messages pote esser scribite o copiate al dossier'; +$labels['longaclp'] = 'Messages pote esser inviate a iste dossier'; +$labels['longaclc'] = 'Dossieres pote esser create (o renominate) directemente sub iste dossier'; +$labels['longaclk'] = 'Dossieres pote esser create (o renominate) directemente sub iste dossier'; +$labels['longacld'] = 'Le signal "Deler" de messages pote esser cambiate'; +$labels['longaclt'] = 'Le signal "Deler" de messages pote esser cambiate'; +$labels['longacle'] = 'Messages pote esser expungite'; +$labels['longaclx'] = 'Le dossier pote esser delite o renominate'; +$labels['longacla'] = 'Le derectos de accesso del dossier pote esser cambiate'; +$labels['longacln'] = 'Le metadatos commun (annotationes) de messages pote esser cambiate'; +$labels['longaclfull'] = 'Controlo total incluse le administration de dossieres'; +$labels['longaclread'] = 'Le dossier pote esser aperite pro lectura'; +$labels['longaclwrite'] = 'Messages pote esser marcate, scribite o copiate al dossier'; +$labels['longacldelete'] = 'Messages pote esser delite'; +$labels['longaclother'] = 'Altere derectos de accesso'; +$labels['ariasummaryacltable'] = 'Lista de derectos de accesso'; +$labels['arialabelaclactions'] = 'Listar actiones'; +$labels['arialabelaclform'] = 'Formulario de derectos de accesso'; +$messages['deleting'] = 'A deler derectos de accesso...'; +$messages['saving'] = 'A salveguardar derectos de accesso...'; +$messages['updatesuccess'] = 'Le derectos de accesso ha essite cambiate'; +$messages['deletesuccess'] = 'Le derectos de accesso ha essite delite'; +$messages['createsuccess'] = 'Le derectos de accesso ha essite addite'; +$messages['updateerror'] = 'Impossibile actualisar le derectos de accesso'; +$messages['deleteerror'] = 'Impossibile deler derectos de accesso'; +$messages['createerror'] = 'Impossibile adder derectos de accesso'; +$messages['deleteconfirm'] = 'Es vos secur de voler remover le derectos de accesso del usator(es) seligite?'; +$messages['norights'] = 'Nulle derecto ha essite specificate.'; +$messages['nouser'] = 'Nulle nomine de usator ha essite specificate.'; +?> diff --git a/data/web/rc/plugins/acl/localization/id_ID.inc b/data/web/rc/plugins/acl/localization/id_ID.inc new file mode 100644 index 00000000..b33597d2 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/id_ID.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Berbagi'; +$labels['myrights'] = 'Hak Akses'; +$labels['username'] = 'Pengguna:'; +$labels['advanced'] = 'Mode Lanjut'; +$labels['newuser'] = 'Tambahkan entri'; +$labels['editperms'] = 'Ubah izin'; +$labels['actions'] = 'Aksi hak akses...'; +$labels['anyone'] = 'Semua pengguna (siapa saja)'; +$labels['anonymous'] = 'Para tamu (anonim)'; +$labels['identifier'] = 'Yang mengidentifikasi'; +$labels['acll'] = 'Cari'; +$labels['aclr'] = 'Baca pesan'; +$labels['acls'] = 'Jaga status terbaca'; +$labels['aclw'] = 'Membuat tanda'; +$labels['acli'] = 'Sisipkan (Salin kedalam)'; +$labels['aclp'] = 'Tulisan'; +$labels['aclc'] = 'Buat subfolder'; +$labels['aclk'] = 'Buat subfolder'; +$labels['acld'] = 'Hapus pesan'; +$labels['aclt'] = 'Hapus pesan'; +$labels['acle'] = 'Menghapus'; +$labels['aclx'] = 'Hapus folder'; +$labels['acla'] = 'Kelola'; +$labels['acln'] = 'Berikan keterangan pesan'; +$labels['aclfull'] = 'Kendali penuh'; +$labels['aclother'] = 'Lainnya'; +$labels['aclread'] = 'Baca'; +$labels['aclwrite'] = 'Tulis'; +$labels['acldelete'] = 'Hapus'; +$labels['shortacll'] = 'Cari'; +$labels['shortaclr'] = 'Baca'; +$labels['shortacls'] = 'Simpan'; +$labels['shortaclw'] = 'Tulis'; +$labels['shortacli'] = 'Sisipkan'; +$labels['shortaclp'] = 'Tulisan'; +$labels['shortaclc'] = 'Buat'; +$labels['shortaclk'] = 'Buat'; +$labels['shortacld'] = 'Hapus'; +$labels['shortaclt'] = 'Hapus'; +$labels['shortacle'] = 'Buang'; +$labels['shortaclx'] = 'Hapus folder'; +$labels['shortacla'] = 'Kelola'; +$labels['shortacln'] = 'Berikan keterangan'; +$labels['shortaclother'] = 'Lainnya'; +$labels['shortaclread'] = 'Baca'; +$labels['shortaclwrite'] = 'Tulis'; +$labels['shortacldelete'] = 'Hapus'; +$labels['longacll'] = 'Folder terlihat di daftar dan dapat dijadikan langganan'; +$labels['longaclr'] = 'Folder dapat dibuka untuk dibaca'; +$labels['longacls'] = 'Tanda pesan terbaca dapat diubah'; +$labels['longaclw'] = 'Tanda pesan dan kata kunci dapat diubah, kecuali Terbaca dan Terhapus'; +$labels['longacli'] = 'Pesan dapat ditulis atau disalin kedalam folder'; +$labels['longaclp'] = 'Pesan dapat dikirim ke folder ini'; +$labels['longaclc'] = 'Folder dapat dibuat (atau diubah namanya) langsung dari folder ini'; +$labels['longaclk'] = 'Folder dapat dibuat (atau diubah namanya) langsung dari folder ini'; +$labels['longacld'] = 'Tanda hapus pesan dapat diubah'; +$labels['longaclt'] = 'Tanda hapus pesan dapat diubah'; +$labels['longacle'] = 'Pesan dapat dibuang'; +$labels['longaclx'] = 'Folder dapat dihapus atau diubah namanya'; +$labels['longacla'] = 'Hak akses folder dapat diubah'; +$labels['longacln'] = 'Metadata pesan bersama (penjelasan) dapat diubah'; +$labels['longaclfull'] = 'Kendali penuh penuh termasuk administrasi'; +$labels['longaclread'] = 'Folder dapat dibuka untuk dibaca'; +$labels['longaclwrite'] = 'Pesan dapat ditandai, ditulis atau disalin kedalam folder'; +$labels['longacldelete'] = 'Pesan dapat dihapus'; +$labels['longaclother'] = 'Hak akses lainnya'; +$labels['ariasummaryacltable'] = 'Daftar hak akses'; +$labels['arialabelaclactions'] = 'Aksi daftar'; +$labels['arialabelaclform'] = 'Formulir hak akses'; +$messages['deleting'] = 'Menghapus hak akses...'; +$messages['saving'] = 'Menyimpan hak akses...'; +$messages['updatesuccess'] = 'Hak akses berhasil diubah'; +$messages['deletesuccess'] = 'Hak akses berhasil dihapus'; +$messages['createsuccess'] = 'Hak akses berhasil ditambahkan'; +$messages['updateerror'] = 'Tidak dapat memperbaharui hak akses'; +$messages['deleteerror'] = 'Tidak dapat menghapus hak akses'; +$messages['createerror'] = 'Tidak dapat menambah hak akses'; +$messages['deleteconfirm'] = 'Apakah Anda yakin ingin menghapus hak akses dari user terpilih?'; +$messages['norights'] = 'Hak belum ditentukan!'; +$messages['nouser'] = 'Username belum ditentukan!'; +?> diff --git a/data/web/rc/plugins/acl/localization/is_IS.inc b/data/web/rc/plugins/acl/localization/is_IS.inc new file mode 100644 index 00000000..df8d40bb --- /dev/null +++ b/data/web/rc/plugins/acl/localization/is_IS.inc @@ -0,0 +1,21 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['aclread'] = 'LesiĂ°'; +$labels['shortaclr'] = 'LesiĂ°'; +$labels['shortaclread'] = 'LesiĂ°'; +?> diff --git a/data/web/rc/plugins/acl/localization/it_IT.inc b/data/web/rc/plugins/acl/localization/it_IT.inc new file mode 100644 index 00000000..8ec70720 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/it_IT.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Condivisione'; +$labels['myrights'] = 'Diritti d\'accesso'; +$labels['username'] = 'Utente:'; +$labels['advanced'] = 'ModalitĂ  avanzata'; +$labels['newuser'] = 'Aggiungi voce'; +$labels['editperms'] = 'Modifica permessi'; +$labels['actions'] = 'Azioni permessi d\'accesso...'; +$labels['anyone'] = 'Tutti gli utenti'; +$labels['anonymous'] = 'Osptiti (anonimi)'; +$labels['identifier'] = 'Identificatore'; +$labels['acll'] = 'Ricerca'; +$labels['aclr'] = 'Leggi messaggi'; +$labels['acls'] = 'Mantieni lo stato Visto'; +$labels['aclw'] = 'Flag di scrittura'; +$labels['acli'] = 'Inserisci (Copia in)'; +$labels['aclp'] = 'Invio'; +$labels['aclc'] = 'Crea sottocartelle'; +$labels['aclk'] = 'Crea sottocartelle'; +$labels['acld'] = 'Elimina messaggi'; +$labels['aclt'] = 'Elimina messaggi'; +$labels['acle'] = 'Elimina'; +$labels['aclx'] = 'Elimina cartella'; +$labels['acla'] = 'Amministra'; +$labels['acln'] = 'Annota messaggi'; +$labels['aclfull'] = 'Controllo completo'; +$labels['aclother'] = 'Altro'; +$labels['aclread'] = 'Lettura'; +$labels['aclwrite'] = 'Scrittura'; +$labels['acldelete'] = 'Elimina'; +$labels['shortacll'] = 'Ricerca'; +$labels['shortaclr'] = 'Lettura'; +$labels['shortacls'] = 'Mantieni'; +$labels['shortaclw'] = 'Scrivi'; +$labels['shortacli'] = 'Inserisci'; +$labels['shortaclp'] = 'Invio'; +$labels['shortaclc'] = 'Crea'; +$labels['shortaclk'] = 'Crea'; +$labels['shortacld'] = 'Elimina'; +$labels['shortaclt'] = 'Elimina'; +$labels['shortacle'] = 'Elimina'; +$labels['shortaclx'] = 'Elimina cartella'; +$labels['shortacla'] = 'Amministra'; +$labels['shortacln'] = 'Annota'; +$labels['shortaclother'] = 'Altro'; +$labels['shortaclread'] = 'Lettura'; +$labels['shortaclwrite'] = 'Scrittura'; +$labels['shortacldelete'] = 'Elimina'; +$labels['longacll'] = 'La cartella è visibile sulle liste e può essere sottoscritta'; +$labels['longaclr'] = 'Questa cartella può essere aperta in lettura'; +$labels['longacls'] = 'Il flag Messaggio Visto può essere cambiato'; +$labels['longaclw'] = 'I flag dei messaggi e le keywords possono essere cambiati, ad esclusione di Visto ed Eliminato'; +$labels['longacli'] = 'I messaggi possono essere scritti o copiati nella cartella'; +$labels['longaclp'] = 'I messaggi possono essere inviati a questa cartella'; +$labels['longaclc'] = 'Possono essere create (o rinominata) cartelle direttamente in questa cartella.'; +$labels['longaclk'] = 'Possono essere create (o rinominata) cartelle direttamente in questa cartella.'; +$labels['longacld'] = 'Il flag Messaggio Eliminato può essere cambiato'; +$labels['longaclt'] = 'Il flag Messaggio Eliminato può essere cambiato'; +$labels['longacle'] = 'I messaggi possono essere cancellati'; +$labels['longaclx'] = 'La cartella può essere eliminata o rinominata'; +$labels['longacla'] = 'I diritti di accesso della cartella possono essere cambiati'; +$labels['longacln'] = 'I metadati (annotazioni) dei messaggi condivisi possono essere modificati'; +$labels['longaclfull'] = 'Controllo completo incluso cartella di amministrazione'; +$labels['longaclread'] = 'Questa cartella può essere aperta in lettura'; +$labels['longaclwrite'] = 'I messaggi possono essere marcati, scritti o copiati nella cartella'; +$labels['longacldelete'] = 'I messaggi possono essere eliminati'; +$labels['longaclother'] = 'Altri diritti di accesso'; +$labels['ariasummaryacltable'] = 'Elenco dei diritti di accesso'; +$labels['arialabelaclactions'] = 'Lista azioni'; +$labels['arialabelaclform'] = 'Modulo di accesso'; +$messages['deleting'] = 'Sto eliminando i diritti di accesso...'; +$messages['saving'] = 'Sto salvando i diritti di accesso...'; +$messages['updatesuccess'] = 'I diritti d\'accesso sono stati cambiati'; +$messages['deletesuccess'] = 'I diritti d\'accesso sono stati eliminati'; +$messages['createsuccess'] = 'I diritti d\'accesso sono stati aggiunti'; +$messages['updateerror'] = 'Impossibile aggiornare i diritti d\'accesso'; +$messages['deleteerror'] = 'Impossibile eliminare i diritti d\'accesso'; +$messages['createerror'] = 'Impossibile aggiungere i diritti d\'accesso'; +$messages['deleteconfirm'] = 'Sei sicuro, vuoi rimuovere i diritti d\'accesso degli utenti selezionati?'; +$messages['norights'] = 'Nessun diritto specificato!'; +$messages['nouser'] = 'Lo username non è stato specificato!'; +?> diff --git a/data/web/rc/plugins/acl/localization/ja_JP.inc b/data/web/rc/plugins/acl/localization/ja_JP.inc new file mode 100644 index 00000000..52c5940e --- /dev/null +++ b/data/web/rc/plugins/acl/localization/ja_JP.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = '共有'; +$labels['myrights'] = 'アクセス権'; +$labels['username'] = 'ă¦ăĽă‚¶ăĽ:'; +$labels['advanced'] = 'č©łç´°ăŞă˘ăĽă‰'; +$labels['newuser'] = '項目を追加'; +$labels['editperms'] = '編集ă®ć¨©é™'; +$labels['actions'] = 'アクセス権ă®ĺ‹•ä˝ś...'; +$labels['anyone'] = '(誰ă§ă‚‚)ă™ăąă¦ă®ă¦ăĽă‚¶ăĽ'; +$labels['anonymous'] = 'ゲスă(匿ĺŤ)'; +$labels['identifier'] = 'č­ĺĄĺ­'; +$labels['acll'] = '検索'; +$labels['aclr'] = 'ăˇăă‚»ăĽă‚¸ă‚’読む'; +$labels['acls'] = '既読ă®çŠ¶ć…‹ă‚’äżťćŚ'; +$labels['aclw'] = '書ăŤčľĽăżă•ă©ăă‚°'; +$labels['acli'] = '挿入(中ă«č¤‡čŁ˝)'; +$labels['aclp'] = '投稿'; +$labels['aclc'] = 'サă–ă•ă‚©ă«ă€ă‚’作ć'; +$labels['aclk'] = 'サă–ă•ă‚©ă«ă€ă‚’作ć'; +$labels['acld'] = 'ăˇăă‚»ăĽă‚¸ă‚’削除'; +$labels['aclt'] = 'ăˇăă‚»ăĽă‚¸ă‚’削除'; +$labels['acle'] = '抹ć¶'; +$labels['aclx'] = 'ă•ă‚©ă«ă€ăĽă‚’削除'; +$labels['acla'] = '管ç†'; +$labels['acln'] = 'ăˇăă‚»ăĽă‚¸ă«ćł¨é‡'; +$labels['aclfull'] = '完全ăŞĺ¶ĺľˇ'; +$labels['aclother'] = 'ăťă®ä»–'; +$labels['aclread'] = '読ăżčľĽăż'; +$labels['aclwrite'] = '書ăŤčľĽăż'; +$labels['acldelete'] = '削除'; +$labels['shortacll'] = '検索'; +$labels['shortaclr'] = '読ăżčľĽăż'; +$labels['shortacls'] = 'äżťćŚ'; +$labels['shortaclw'] = '書ăŤčľĽăż'; +$labels['shortacli'] = '挿入'; +$labels['shortaclp'] = '投稿'; +$labels['shortaclc'] = '作ć'; +$labels['shortaclk'] = '作ć'; +$labels['shortacld'] = '削除'; +$labels['shortaclt'] = '削除'; +$labels['shortacle'] = '抹ć¶'; +$labels['shortaclx'] = 'ă•ă‚©ă«ă€ăĽă®ĺ‰Šé™¤'; +$labels['shortacla'] = '管ç†'; +$labels['shortacln'] = '注é‡'; +$labels['shortaclother'] = 'ăťă®ä»–'; +$labels['shortaclread'] = '読ăżčľĽăż'; +$labels['shortaclwrite'] = '書ăŤčľĽăż'; +$labels['shortacldelete'] = '削除'; +$labels['longacll'] = 'ă•ă‚©ă«ă€ăĽă‚’ăŞă‚ąăă«č¦‹ăă‚‹ă‚ă†ă«ă—ă¦ç™»éŚ˛ĺŹŻč˝:'; +$labels['longaclr'] = 'ă•ă‚©ă«ă€ăĽă‚’読むă“ă¨ă‚’可č˝'; +$labels['longacls'] = 'ăˇăă‚»ăĽă‚¸ă®ć—˘čŞ­ă®ă•ă©ăă‚°ă®ĺ¤‰ć›´ă‚’可č˝'; +$labels['longaclw'] = '既読ă¨ĺ‰Šé™¤ă®ă•ă©ăグを除ăŹă€ăˇăă‚»ăĽă‚¸ă®ă•ă©ăă‚°ă¨ă‚­ăĽăŻăĽă‰ă®ĺ¤‰ć›´ă‚’可č˝'; +$labels['longacli'] = 'ăˇăă‚»ăĽă‚¸ă«ć›¸ăŤčľĽăżă¨ă•ă‚©ă«ă€ăĽă¸ă®č¤‡čŁ˝ă‚’可č˝'; +$labels['longaclp'] = 'ăˇăă‚»ăĽă‚¸ă‚’ă“ă®ă•ă‚©ă«ă€ăĽă«ćŠ•ç¨żă‚’可č˝'; +$labels['longaclc'] = 'ă“ă®ă•ă‚©ă«ă€ăĽă®ç›´ä¸‹ă«ă•ă‚©ă«ă€ăĽă®ä˝śćă¨ĺŤĺ‰Ťă®ĺ¤‰ć›´ă‚’可č˝'; +$labels['longaclk'] = 'ă“ă®ă•ă‚©ă«ă€ăĽă®ç›´ä¸‹ă«ă•ă‚©ă«ă€ăĽă®ä˝śćă¨ĺŤĺ‰Ťă®ĺ¤‰ć›´ă‚’可č˝'; +$labels['longacld'] = 'ăˇăă‚»ăĽă‚¸ă®ĺ‰Šé™¤ă•ă©ăă‚°ă®ĺ¤‰ć›´ă‚’可č˝'; +$labels['longaclt'] = 'ăˇăă‚»ăĽă‚¸ă®ĺ‰Šé™¤ă•ă©ăă‚°ă®ĺ¤‰ć›´ă‚’可č˝'; +$labels['longacle'] = 'ăˇăă‚»ăĽă‚¸ă®ćŠąć¶ă‚’可č˝'; +$labels['longaclx'] = 'ă“ă®ă•ă‚©ă«ă€ăĽă®ĺ‰Šé™¤ă‚„ĺŤĺ‰Ťă®ĺ¤‰ć›´ă‚’可č˝'; +$labels['longacla'] = 'ă•ă‚©ă«ă€ăĽă®ă‚˘ă‚Żă‚»ă‚ąć¨©ă®ĺ¤‰ć›´ă‚’可č˝'; +$labels['longacln'] = 'ăˇăă‚»ăĽă‚¸ă®ĺ…±ćś‰ă•ă‚Śă‚‹ăˇă‚żă‡ăĽă‚ż(注é‡)ă®ĺ¤‰ć›´ă‚’可č˝'; +$labels['longaclfull'] = 'ă•ă‚©ă«ă€ăĽă®ç®ˇç†ă‚’ĺ«ă‚ăźĺ®Śĺ…¨ăŞĺ¶ĺľˇă‚’可č˝'; +$labels['longaclread'] = 'ă•ă‚©ă«ă€ăĽă‚’読むă“ă¨ă‚’可č˝'; +$labels['longaclwrite'] = 'ăˇăă‚»ăĽă‚¸ă«ăžăĽă‚Żă®č¨­ĺ®šă€ć›¸ăŤčľĽăżă€ă•ă‚©ă«ă€ăĽă«č¤‡čŁ˝ă‚’可č˝'; +$labels['longacldelete'] = 'ăˇăă‚»ăĽă‚¸ă®ĺ‰Šé™¤ă‚’可č˝'; +$labels['longaclother'] = 'ä»–ă®ă‚˘ă‚Żă‚»ă‚ąć¨©'; +$labels['ariasummaryacltable'] = 'アクセス権ă®ä¸€č¦§'; +$labels['arialabelaclactions'] = '動作を一覧'; +$labels['arialabelaclform'] = 'アクセス権ă®ć¬„'; +$messages['deleting'] = 'アクセス権を削除中...'; +$messages['saving'] = 'アクセス権を保ĺ­ä¸­...'; +$messages['updatesuccess'] = 'アクセス権を変更ă—ăľă—ăźă€‚'; +$messages['deletesuccess'] = 'アクセス権を削除ă—ăľă—ăźă€‚'; +$messages['createsuccess'] = 'アクセス権を追加ă—ăľă—ăźă€‚'; +$messages['updateerror'] = 'アクセス権を更新ă§ăŤăľă›ă‚“。'; +$messages['deleteerror'] = 'アクセス権を削除ă§ăŤăľă›ă‚“。'; +$messages['createerror'] = 'アクセス権を追加ă§ăŤăľă›ă‚“。'; +$messages['deleteconfirm'] = 'é¸ćŠžă—ăźă¦ăĽă‚¶ăĽă®ă‚˘ă‚Żă‚»ă‚ąä»¶ă‚’本当ă«ĺ‰Šé™¤ă—ăźă„ă§ă™ă‹?'; +$messages['norights'] = '何ă®ć¨©é™ă‚‚指定ă•ă‚Śă¦ă„ăľă›ă‚“!'; +$messages['nouser'] = 'ă¦ăĽă‚¶ăĽĺŤă‚’指定ă—ă¦ă„ăľă›ă‚“!'; +?> diff --git a/data/web/rc/plugins/acl/localization/ka_GE.inc b/data/web/rc/plugins/acl/localization/ka_GE.inc new file mode 100644 index 00000000..064a3946 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/ka_GE.inc @@ -0,0 +1,21 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['aclread'] = 'á¬áá™áá—á®á•á'; +$labels['shortaclr'] = 'á¬áá™áá—á®á•á'; +$labels['shortaclread'] = 'á¬áá™áá—á®á•á'; +?> diff --git a/data/web/rc/plugins/acl/localization/km_KH.inc b/data/web/rc/plugins/acl/localization/km_KH.inc new file mode 100644 index 00000000..8310d4e8 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/km_KH.inc @@ -0,0 +1,74 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'ការ​ចែក​រំលែក'; +$labels['myrights'] = 'សិទ្ធិ​ចូល'; +$labels['username'] = 'អ្នក​ប្រើ៖'; +$labels['advanced'] = 'បែប​កážáź’រិត​ážáź’áž–ážźáź‹'; +$labels['newuser'] = 'បន្ážáź‚ážâ€‹áž’ាតុ'; +$labels['actions'] = 'សកážáź’ážáž—ាព​សិទ្ធិ​ចូល...'; +$labels['anyone'] = 'អ្នក​ប្រើ​ទាំង​អស់ (នរណា​ážáź’នាក់)'; +$labels['anonymous'] = 'ភ្ញៀវ (អនាážáž·áž€)'; +$labels['acll'] = 'ស្វែងរក'; +$labels['aclr'] = 'អាន​សារ'; +$labels['acli'] = 'បញ្ចូល (áž…ážáź’លង​ážáž€â€‹ážŠáž¶áž€áź‹)'; +$labels['aclp'] = 'ប្រកាស'; +$labels['aclc'] = 'បង្កើត​ážážŹâ€‹ážšáž„'; +$labels['aclk'] = 'បង្កើត​ážážŹâ€‹ážšáž„'; +$labels['acld'] = 'លុប​សារ'; +$labels['aclt'] = 'លុប​សារ'; +$labels['acle'] = 'ដកចáźáž‰'; +$labels['aclx'] = 'លុប​ážážŹ'; +$labels['acla'] = 'អភិបាល'; +$labels['aclfull'] = 'បញ្ជា​ទាំង​អស់'; +$labels['aclother'] = 'áž•áź’ážźáźáž„áź—'; +$labels['aclread'] = 'អាន'; +$labels['aclwrite'] = 'ážźážšážźáźážš'; +$labels['acldelete'] = 'លុប'; +$labels['shortacll'] = 'ស្វែងរក'; +$labels['shortaclr'] = 'អាន'; +$labels['shortacls'] = 'រក្សា'; +$labels['shortaclw'] = 'ážźážšážźáźážš'; +$labels['shortacli'] = 'បញ្ចូល'; +$labels['shortaclp'] = 'ប្រកាស'; +$labels['shortaclc'] = 'បង្កើត'; +$labels['shortaclk'] = 'បង្កើត'; +$labels['shortacld'] = 'លុប'; +$labels['shortaclt'] = 'លុប'; +$labels['shortacle'] = 'ដកចáźáž‰'; +$labels['shortaclx'] = 'ការ​លុប​ážážŹ'; +$labels['shortacla'] = 'អភិបាល'; +$labels['shortaclother'] = 'áž•áź’ážźáźáž„áź—'; +$labels['shortaclread'] = 'អាន'; +$labels['shortaclwrite'] = 'ážźážšážźáźážš'; +$labels['shortacldelete'] = 'លុប'; +$labels['longaclr'] = 'ážážŹâ€‹áž“áźáź‡â€‹áž˘áž¶áž…​បើក​សážáź’រាប់​អាន'; +$labels['longacle'] = 'សារ​នáźáź‡â€‹áž˘áž¶áž…​ត្រូវ​បាន​ដក​ចáźáž‰'; +$labels['longaclx'] = 'ážážŹâ€‹áž“áźáź‡ អាច​ត្រូវ​បាន​លុប ឬ​ ប្ដូរ​ážáź’ážáź„ះ'; +$labels['longacla'] = 'សិទ្ធិ​ចូល​ទៅ​កាន់​ážážŹâ€‹áž“áźáź‡â€‹áž˘áž¶áž…​ត្រូវ​បាន​​ផ្លាស់​ប្ដូរ​'; +$labels['longacldelete'] = 'សារ​នáźáź‡â€‹áž˘áž¶áž…​ត្រូវ​បាន​លុប'; +$messages['deleting'] = 'កំពុង​លុប​សិទ្ធិ​ចូល...'; +$messages['saving'] = 'រក្សា​ទុក​សិទ្ធិ​ចូល...'; +$messages['deletesuccess'] = 'លុប​សិទ្ធិ​ចូល​ដោយ​ជោគជáźáž™â€‹'; +$messages['createsuccess'] = 'បន្ážáź‚ážâ€‹ážźáž·áž‘្ធិ​ចូល​ដោយ​ជោគជáźáž™'; +$messages['updateerror'] = 'ážáž·áž“​អាច​ធ្វើ​បច្ចុប្បន្នភាព​សិទ្ធិ​ចូល'; +$messages['deleteerror'] = 'ážáž·áž“​អាច​លុប​សិទ្ធិ​ចូល'; +$messages['createerror'] = 'ážáž·áž“​អាច​បន្ážáź‚ážâ€‹ážźáž·áž‘្ធិ​ចូល'; +$messages['deleteconfirm'] = 'តើ​អ្នក​ពិត​ជា​ចង់​ដក​សិទ្ធ​ចូល​ពី​អ្នក​ប្រើប្រាស់​ដែល​បាន​រើស​ážáź‚áž“áž‘áź?'; +$messages['norights'] = 'ážáž·áž“​បាន​បញ្ជាក់​សិទ្ធិ​ច្បាស់​លាស់!'; +$messages['nouser'] = 'ážáž·áž“​បាន​បញ្ជាក់​ážáź’ážáź„ះ​អ្នក​ប្រើ!'; +?> diff --git a/data/web/rc/plugins/acl/localization/ko_KR.inc b/data/web/rc/plugins/acl/localization/ko_KR.inc new file mode 100644 index 00000000..60b4b302 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/ko_KR.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = '공유'; +$labels['myrights'] = 'ě ‘ę·Ľ 권한'; +$labels['username'] = '사용ěž:'; +$labels['advanced'] = '고급 모드'; +$labels['newuser'] = 'ěž…ë Ąë‚´ěš© 추가'; +$labels['editperms'] = '권한 ěě •'; +$labels['actions'] = 'ě ‘ę·Ľ 권한 동작...'; +$labels['anyone'] = '모든 ě‚¬ěš©ěž (아무ë‚)'; +$labels['anonymous'] = 'ë°©ë¬¸ěž (익명)'; +$labels['identifier'] = 'ě‹ťëł„ěž'; +$labels['acll'] = '조회'; +$labels['aclr'] = '읽은 메시지'; +$labels['acls'] = '읽은 ěíś ěś ě§€'; +$labels['aclw'] = '쓰기 ęąë°ś'; +$labels['acli'] = '삽입 (복사할 ěś„ěą)'; +$labels['aclp'] = '게시'; +$labels['aclc'] = 'í•ěś„ 폴더 ěťě„±'; +$labels['aclk'] = 'í•ěś„ 폴더 ěťě„±'; +$labels['acld'] = '메시지 ě‚­ě ś'; +$labels['aclt'] = '메시지 ě‚­ě ś'; +$labels['acle'] = 'ě구 ě śę±°'; +$labels['aclx'] = '폴더 ě‚­ě ś'; +$labels['acla'] = '관리'; +$labels['acln'] = 'ë©”ě‹śě§€ě— ěŁĽě„ť 추가'; +$labels['aclfull'] = '전체 ě śě–´ 권한'; +$labels['aclother'] = '기í€'; +$labels['aclread'] = '읽음'; +$labels['aclwrite'] = '쓰기'; +$labels['acldelete'] = 'ě‚­ě ś'; +$labels['shortacll'] = '조회'; +$labels['shortaclr'] = '읽음'; +$labels['shortacls'] = 'ëł´ę´€'; +$labels['shortaclw'] = '쓰기'; +$labels['shortacli'] = '삽입'; +$labels['shortaclp'] = '게시'; +$labels['shortaclc'] = 'ěťě„±'; +$labels['shortaclk'] = 'ěťě„±'; +$labels['shortacld'] = 'ě‚­ě ś'; +$labels['shortaclt'] = 'ě‚­ě ś'; +$labels['shortacle'] = '지움'; +$labels['shortaclx'] = '폴더 ě‚­ě ś'; +$labels['shortacla'] = '관리'; +$labels['shortacln'] = '주석 추가'; +$labels['shortaclother'] = '기í€'; +$labels['shortaclread'] = '읽기'; +$labels['shortaclwrite'] = '쓱'; +$labels['shortacldelete'] = 'ě‚­ě ś'; +$labels['longacll'] = '폴더가 ëŞ©ëˇťě— ë‚í€ë‚ęł  다음 사용ěžę°€ 구독할 ě ěžěťŚ:'; +$labels['longaclr'] = '읽기 ěś„í•´ 폴더를 ě—´ ě ěžěťŚ'; +$labels['longacls'] = '읽은 메시지 ęąë°śěť´ ëł€ę˛˝ë  ě ěžěťŚ'; +$labels['longaclw'] = '메시지 ęąë°ś ë°Ź 키워드를 변경할 ě ěžěťŚ, 다만 읽음 ë°Ź ě‚­ě śë¨ěť€ 제외ë¨'; +$labels['longacli'] = '메시지를 íŹ´ëŤ”ě— ëłµě‚¬í•ę±°ë‚ 작성할 ě ěžěťŚ'; +$labels['longaclp'] = '메시지가 ěť´ íŹ´ëŤ”ě— ę˛Śě‹śë  ě ěžěťŚ'; +$labels['longaclc'] = 'ěť´ íŹ´ëŤ”ěť ë°”ëˇś ě•„ëžě— 폴더를 ěťě„±(ë는 이름 변경)í•  ě ěžěťŚ'; +$labels['longaclk'] = 'ěť´ íŹ´ëŤ”ěť ë°”ëˇś ě•„ëžě— 폴더를 ěťě„±(ë는 이름 변경)í•  ě ěžěťŚ'; +$labels['longacld'] = '메시지 ě‚­ě ś ęąë°śěť´ ëł€ę˛˝ë  ě ěžěťŚ'; +$labels['longaclt'] = '메시지 ě‚­ě ś ęąë°śěť´ ëł€ę˛˝ë  ě ěžěťŚ'; +$labels['longacle'] = '메시지가 ě구 ě śę±°ë  ě ěžěťŚ'; +$labels['longaclx'] = '폴더를 ě‚­ě śí•ę±°ë‚ 이름을 변경 í•  ě ěžěťŚ'; +$labels['longacla'] = 'íŹ´ëŤ”ěť ě ‘ę·Ľ 권한을 변경할 ě ěžěťŚ'; +$labels['longacln'] = 'ęłµěś ëś ë©”í€ëŤ°ěť´í„°(주석)은 ëł€ę˛˝ë  ě ěžěŠµë‹ë‹¤'; +$labels['longaclfull'] = '폴더 관리를 포함한 전체 ě śě–´ 권한'; +$labels['longaclread'] = '폴더를 ě—´ě–´ 읽을 ě ěžěťŚ'; +$labels['longaclwrite'] = '메시지를 í‘śě‹śí•ę±°ë‚, 폴더로 이동 ë는 복사할 ě ěžěťŚ'; +$labels['longacldelete'] = '메시지를 ě‚­ě śí•  ě ěžěťŚ'; +$labels['longaclother'] = 'ę¸°í€ ě ‘ę·Ľ 권한'; +$labels['ariasummaryacltable'] = 'ě ‘ę·Ľ 권한 목록'; +$labels['arialabelaclactions'] = '목록 동작'; +$labels['arialabelaclform'] = 'ě ‘ę·Ľ 권한 ě–‘ě‹ť'; +$messages['deleting'] = 'ě ‘ę·Ľ 권한을 ě‚­ě śí•ëŠ” 중...'; +$messages['saving'] = 'ě ‘ę·Ľ 권한을 저장í•ëŠ” 중...'; +$messages['updatesuccess'] = 'ě ‘ę·Ľ 권한을 성공ě ěśĽëˇś 변경함'; +$messages['deletesuccess'] = 'ě ‘ę·Ľ 권한을 성공ě ěśĽëˇś 삭제함.'; +$messages['createsuccess'] = 'ě ‘ę·Ľ 권한을 성공ě ěśĽëˇś 추가함.'; +$messages['updateerror'] = 'ě ‘ę·Ľ 권한을 업데이트 í•  ě 없음'; +$messages['deleteerror'] = 'ě ‘ę·Ľ 권한을 ě‚­ě śí•  ě 없음'; +$messages['createerror'] = 'ě ‘ę·Ľ 권한을 추가할 ě 없음'; +$messages['deleteconfirm'] = 'ě •ë§ëˇś ě„ íťí•ś 사용ěžěť ě ‘ę·Ľ 권한을 ě‚­ě śí•ě‹śę˛ ěŠµë‹ęąŚ?'; +$messages['norights'] = 'ě§€ě •ëś ę¶Śí•śěť´ 없음!'; +$messages['nouser'] = 'ě§€ě •ëś ě‚¬ěš©ěžëŞ…ěť´ 없음!'; +?> diff --git a/data/web/rc/plugins/acl/localization/ku.inc b/data/web/rc/plugins/acl/localization/ku.inc new file mode 100644 index 00000000..77464626 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/ku.inc @@ -0,0 +1,89 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Parvekirin'; +$labels['myrights'] = 'MafĂŞn TĂŞketinĂŞ'; +$labels['username'] = 'BikarhĂŞner:'; +$labels['advanced'] = 'Moda pĂŞĹźketĂ®'; +$labels['newuser'] = 'TĂŞketinek zĂŞde bike'; +$labels['editperms'] = 'DestĂ»rdayĂ®nan Sererast Bike'; +$labels['actions'] = 'DigihĂ®je tevgerĂŞn çê..'; +$labels['anyone'] = 'HemĂ» bikarhĂŞner (her kes)'; +$labels['anonymous'] = 'MĂŞvan (gelĂŞrĂ®)'; +$labels['identifier'] = 'DanasĂ®ner'; +$labels['acll'] = 'LĂŞ bigere'; +$labels['aclr'] = 'Peyaman bixwĂ®ne'; +$labels['aclw'] = 'Alayan binivĂ®se'; +$labels['acli'] = 'TĂŞxe (Heman bike li)'; +$labels['aclp'] = 'ĹžandĂ®'; +$labels['aclc'] = 'Bindosyeyan çêke'; +$labels['aclk'] = 'Bindosyeyan çêke'; +$labels['acld'] = 'Peyaman binivĂ®se'; +$labels['aclt'] = 'Peyaman jĂŞ bibe'; +$labels['acle'] = 'JĂŞ derxĂ®ne'; +$labels['aclx'] = 'DosyeyĂŞ jĂŞ bibe'; +$labels['acla'] = 'BirĂŞvebir'; +$labels['acln'] = 'Bi nîşeyan peyaman rave bike'; +$labels['aclfull'] = 'Tam venĂŞrĂ®n'; +$labels['aclother'] = 'ĂŠn din'; +$labels['aclread'] = 'BixwĂ®ne'; +$labels['aclwrite'] = 'BinivĂ®se'; +$labels['acldelete'] = 'JĂŞ bibe'; +$labels['shortacll'] = 'LĂŞ bigere'; +$labels['shortaclr'] = 'BixwĂ®ne'; +$labels['shortacls'] = 'BihĂŞle'; +$labels['shortaclw'] = 'BinivĂ®se'; +$labels['shortacli'] = 'Tev bike'; +$labels['shortaclp'] = 'ĹžandĂ®'; +$labels['shortaclc'] = 'Çêke'; +$labels['shortaclk'] = 'Çêke'; +$labels['shortacld'] = 'JĂŞ bibe'; +$labels['shortaclt'] = 'JĂŞ bibe'; +$labels['shortacle'] = 'JĂŞ derxĂ®ne'; +$labels['shortaclx'] = 'Dosye-jĂŞbirin'; +$labels['shortacla'] = 'BikarhĂŞner'; +$labels['shortacln'] = 'Bi nîşeyan rave bike'; +$labels['shortaclother'] = 'ĂŠn din'; +$labels['shortaclread'] = 'BixwĂ®ne'; +$labels['shortaclwrite'] = 'BinivĂ®se'; +$labels['shortacldelete'] = 'JĂŞ bibe'; +$labels['longaclr'] = 'Dosye ji bo xwendinĂŞ dikare bĂŞ vekirin'; +$labels['longacls'] = 'Alaya peyamĂŞn DĂ®tĂ® dikare bĂŞte guhartin'; +$labels['longaclc'] = 'Dosye dikarin bin vĂŞ dosyeyĂŞ bĂŞne çêkirin (an jĂ® binavkirin)'; +$labels['longaclk'] = 'Dosye dikarin bin vĂŞ dosyeyĂŞ bĂŞne çêkirin (an jĂ® binavkirin)'; +$labels['longaclx'] = 'Dosye dikare bĂŞ jĂŞbirin an jĂ® binavkirin'; +$labels['longacla'] = 'MafĂŞ gihîştina dosyeyĂŞ dikare bĂŞ guhartin'; +$labels['longaclfull'] = 'Tam venĂŞrĂ®n bi birĂŞvebirina dosyeyĂŞ'; +$labels['longaclread'] = 'Dosye ji bo xwendinĂŞ dikare bĂŞ vekirin'; +$labels['longaclwrite'] = 'Peyam dikarin kopiyĂ® dosyeyĂŞ bĂŞn kirin, nîşankirin, nivĂ®sandin.'; +$labels['longacldelete'] = 'HĂŞmĂ® peyam dikarin werin jĂŞbirin'; +$labels['longaclother'] = 'MafĂŞn din ĂŞn tĂŞketinĂŞ'; +$labels['ariasummaryacltable'] = 'LĂ®steya mafĂŞn tĂŞketinĂŞ'; +$labels['arialabelaclactions'] = 'Tevgeran liste bike'; +$labels['arialabelaclform'] = 'Forma mafĂŞn tĂŞketinĂŞ'; +$messages['deleting'] = 'MafĂŞn tĂŞketinĂŞ tĂŞn jĂŞbirin...'; +$messages['saving'] = 'MafĂŞn tĂŞketinĂŞ tĂŞn tomarkirin...'; +$messages['updatesuccess'] = 'MafĂŞn tĂŞketinĂŞ bi serkeftin hatin guhartin'; +$messages['deletesuccess'] = 'MafĂŞn tĂŞketinĂŞ bi serkeftin hatin jĂŞbirin'; +$messages['createsuccess'] = 'MafĂŞn tĂŞketinĂŞ bi serkeftin hatin tevkirin'; +$messages['updateerror'] = 'NĂ»kirina mafĂŞn tĂŞketinĂŞ bigire'; +$messages['deleteerror'] = 'JĂŞbirina mafĂŞn tĂŞketinĂŞ bigire'; +$messages['createerror'] = 'Tevkirina mafĂŞn tĂŞketinĂŞ bigire'; +$messages['deleteconfirm'] = 'Tu ewle yĂ®, dixwazĂ® mafĂŞn tĂŞketinĂŞ yĂŞn bikarhĂŞnerĂŞ(n) bijartĂ® rakĂ®?'; +$messages['norights'] = 'Tu maf nehat diyarkirin!'; +$messages['nouser'] = 'Tu bikarhĂŞner nehat diyarkirin!'; +?> diff --git a/data/web/rc/plugins/acl/localization/ku_IQ.inc b/data/web/rc/plugins/acl/localization/ku_IQ.inc new file mode 100644 index 00000000..bc80848b --- /dev/null +++ b/data/web/rc/plugins/acl/localization/ku_IQ.inc @@ -0,0 +1,26 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'هاŮبەشکردن'; +$labels['username'] = 'بەکارهێنەر:'; +$labels['advanced'] = 'Ř´ŰŽŮازی پێشکەŮŘŞŮŮ'; +$labels['shortaclc'] = 'درŮستکردن'; +$labels['shortaclk'] = 'درŮستکردن'; +$labels['shortacld'] = 'سڕینەŮŰ•'; +$labels['shortaclt'] = 'سڕینەŮŰ•'; +$labels['shortaclx'] = 'سڕینەŮŰ•ŰŚ بŮخچە'; +?> diff --git a/data/web/rc/plugins/acl/localization/lb_LU.inc b/data/web/rc/plugins/acl/localization/lb_LU.inc new file mode 100644 index 00000000..ec48b199 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/lb_LU.inc @@ -0,0 +1,69 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Sharing'; +$labels['myrights'] = 'ZougrĂ«ffsrechter'; +$labels['username'] = 'Benotzer:'; +$labels['advanced'] = 'AvancĂ©ierte Modus'; +$labels['newuser'] = 'Element dobäisetzen'; +$labels['actions'] = 'Optioune fir d\'ZougrĂ«ffsrechter'; +$labels['anyone'] = 'All d\'Benotzer (jiddwereen)'; +$labels['anonymous'] = 'Gaascht (anonym)'; +$labels['identifier'] = 'Identifiant'; +$labels['acll'] = 'Noschloen'; +$labels['aclr'] = 'MessagĂ« liesen'; +$labels['acls'] = 'Lies-Status behalen'; +$labels['acld'] = 'MessagĂ« läschen'; +$labels['aclt'] = 'MessagĂ« läschen'; +$labels['acle'] = 'Ausläschen'; +$labels['aclx'] = 'Dossier läschen'; +$labels['acla'] = 'AdministrĂ©ieren'; +$labels['aclfull'] = 'Voll Kontroll'; +$labels['aclother'] = 'Aner'; +$labels['aclread'] = 'Liesen'; +$labels['aclwrite'] = 'Schreiwen'; +$labels['acldelete'] = 'Läschen'; +$labels['shortacll'] = 'Noschloen'; +$labels['shortaclr'] = 'Liesen'; +$labels['shortacls'] = 'Halen'; +$labels['shortaclw'] = 'Schreiwen'; +$labels['shortacli'] = 'Drasetze'; +$labels['shortaclp'] = 'SchĂ©cken'; +$labels['shortaclc'] = 'Erstellen'; +$labels['shortaclk'] = 'Erstellen'; +$labels['shortacld'] = 'Läschen'; +$labels['shortaclt'] = 'Läschen'; +$labels['shortacle'] = 'Ausläschen'; +$labels['shortaclx'] = 'Dossier läschen'; +$labels['shortacla'] = 'AdministrĂ©ieren'; +$labels['shortaclother'] = 'Aner'; +$labels['shortaclread'] = 'Liesen'; +$labels['shortaclwrite'] = 'Schreiwen'; +$labels['shortacldelete'] = 'Läschen'; +$labels['longacldelete'] = 'MessagĂ« kĂ«nne geläscht ginn'; +$messages['deleting'] = 'ZougrĂ«ffsrechter gi geläscht...'; +$messages['saving'] = 'ZougrĂ«ffsrechter gi gespäichert...'; +$messages['updatesuccess'] = 'Rechter erfollegräich geännert'; +$messages['deletesuccess'] = 'Rechter erfollegräich geläscht'; +$messages['createsuccess'] = 'Rechter erfollegräich dobäigesat'; +$messages['updateerror'] = 'D\'ZougrĂ«ffsrechter kĂ«nnen net aktualisĂ©iert ginn'; +$messages['deleteerror'] = 'Rechter kĂ«nnen net geläscht ginn'; +$messages['createerror'] = 'ZougrĂ«ffsrechter kĂ«nnen net dobäigesat ginn'; +$messages['deleteconfirm'] = 'Bass du dir sĂ©cher, dass du d\'ZougrĂ«ffsrechter fir dĂ©i ausgewielte Benotzer wĂ«lls ewechhuelen?'; +$messages['norights'] = 'Et goufe keng Rechter uginn! '; +$messages['nouser'] = 'Et gouf kee Benotzernumm uginn!'; +?> diff --git a/data/web/rc/plugins/acl/localization/lt_LT.inc b/data/web/rc/plugins/acl/localization/lt_LT.inc new file mode 100644 index 00000000..cea41d6d --- /dev/null +++ b/data/web/rc/plugins/acl/localization/lt_LT.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Dalinimasis'; +$labels['myrights'] = 'Prieigos teisÄ—s'; +$labels['username'] = 'Vartotojas:'; +$labels['advanced'] = 'PaĹľengusio vartotojo rÄ—Ĺľimas'; +$labels['newuser'] = 'PridÄ—ti ÄŻrašą'; +$labels['editperms'] = 'Tvarkyti leidimus'; +$labels['actions'] = 'Prieigos teisiĹł veiksmai...'; +$labels['anyone'] = 'Visi vartotojai (bet kas)'; +$labels['anonymous'] = 'SveÄŤias (anonimas)'; +$labels['identifier'] = 'Identifikatorius'; +$labels['acll'] = 'Paieška'; +$labels['aclr'] = 'Perskaityti pranešimus'; +$labels['acls'] = 'Palikti bĹ«senÄ… "Ĺ˝iĹ«rÄ—tas"'; +$labels['aclw'] = 'Ä®rašyti vÄ—liavÄ—les'; +$labels['acli'] = 'Ä®terpti (kopijuoti ÄŻ)'; +$labels['aclp'] = 'Ä®rašas'; +$labels['aclc'] = 'Kurti poaplankius'; +$labels['aclk'] = 'Kurti poaplankius'; +$labels['acld'] = 'Ištrinti Ĺľinutes'; +$labels['aclt'] = 'Ištrinti Ĺľinutes'; +$labels['acle'] = 'Išbraukti'; +$labels['aclx'] = 'Ištrinti aplankÄ…'; +$labels['acla'] = 'Valdyti'; +$labels['acln'] = 'Anotuoti laiškus'; +$labels['aclfull'] = 'Visiška kontrolÄ—'; +$labels['aclother'] = 'Kita'; +$labels['aclread'] = 'Skaityti'; +$labels['aclwrite'] = 'Ä®rašyti'; +$labels['acldelete'] = 'Trinti'; +$labels['shortacll'] = 'Paieška'; +$labels['shortaclr'] = 'Skaityti'; +$labels['shortacls'] = 'Palikti'; +$labels['shortaclw'] = 'Ä®rašyti'; +$labels['shortacli'] = 'Ä®terpti'; +$labels['shortaclp'] = 'Ä®rašas'; +$labels['shortaclc'] = 'Sukurti'; +$labels['shortaclk'] = 'Sukurti'; +$labels['shortacld'] = 'Trinti'; +$labels['shortaclt'] = 'Trinti'; +$labels['shortacle'] = 'Išbraukti'; +$labels['shortaclx'] = 'Ištrinti aplankÄ…'; +$labels['shortacla'] = 'Valdyti'; +$labels['shortacln'] = 'Anotuoti'; +$labels['shortaclother'] = 'Kita'; +$labels['shortaclread'] = 'Skaityti'; +$labels['shortaclwrite'] = 'Ä®rašyti'; +$labels['shortacldelete'] = 'Trinti'; +$labels['longacll'] = 'Aplankas yra matomas sÄ…rašuose ir gali bĹ«ti prenumeruojamas'; +$labels['longaclr'] = 'AplankÄ… galima perĹľiĹ«rÄ—ti'; +$labels['longacls'] = 'PranešimĹł vÄ—liavÄ—lÄ— "Matyta" gali bĹ«ti pakeista'; +$labels['longaclw'] = 'PranešimĹł vÄ—liavÄ—lÄ—s ir raktaĹľodĹľiai gali bĹ«ti pakeisti, išskyrus "Matytas" ir "Ištrintas"'; +$labels['longacli'] = 'Pranešimai gali bĹ«ti ÄŻrašyti arba nukopijuoti ÄŻ aplankÄ…'; +$labels['longaclp'] = 'Ä® šį aplankÄ… galima dÄ—ti laiškus.'; +$labels['longaclc'] = 'Nauji aplankai gali bĹ«ti kuriami (arba pervadinami) šioje direktorijoje'; +$labels['longaclk'] = 'Nauji aplankai gali bĹ«ti kuriami (arba pervadinami) šioje direktorijoje'; +$labels['longacld'] = 'PranešimĹł vÄ—liavÄ—lÄ— "Ištrintas" gali bĹ«ti pakeista'; +$labels['longaclt'] = 'PranešimĹł vÄ—liavÄ—lÄ— "Ištrintas" gali bĹ«ti pakeista'; +$labels['longacle'] = 'Pranešimai gali bĹ«ti išbraukti'; +$labels['longaclx'] = 'Aplankas gali bĹ«ti pašalintas arba pervadintas'; +$labels['longacla'] = 'Aplanko prieigos teisÄ—s gali bĹ«ti pakeistos'; +$labels['longacln'] = 'Bendrieji laiškĹł meta-duomenys (anotacijos) gali bĹ«ti pakeisti'; +$labels['longaclfull'] = 'Visiška kontrolÄ— ÄŻskaitant aplanko administravimÄ…'; +$labels['longaclread'] = 'AplankÄ… galima perĹľiĹ«rÄ—ti'; +$labels['longaclwrite'] = 'Pranešimai gali bĹ«ti paĹľymÄ—ti, ÄŻrašyti arba nukopijuoti ÄŻ aplankÄ…'; +$labels['longacldelete'] = 'Pranešimai gali bĹ«ti ištrinti'; +$labels['longaclother'] = 'Kitos prieigos teisÄ—s'; +$labels['ariasummaryacltable'] = 'Prieigos teisiĹł sÄ…rašas'; +$labels['arialabelaclactions'] = 'Rodyti veiksmus'; +$labels['arialabelaclform'] = 'Prieigos teisiĹł forma'; +$messages['deleting'] = 'Panaikinamos prieigos teisÄ—s'; +$messages['saving'] = 'Išsaugomos prieigos teisÄ—s'; +$messages['updatesuccess'] = 'Prieigos teisÄ—s sÄ—kmingai pakeistos'; +$messages['deletesuccess'] = 'Prieigos teisÄ—s sÄ—kmingai panaikintos'; +$messages['createsuccess'] = 'Prieigos teisÄ—s sÄ—kmingai pridÄ—tos'; +$messages['updateerror'] = 'Nepavyko pakeisti prieigos teisiĹł'; +$messages['deleteerror'] = 'NeÄŻmanoma panaikinti prieigos teises'; +$messages['createerror'] = 'Neišeina pridÄ—ti prieigos teises'; +$messages['deleteconfirm'] = 'Ar jĹ«s esate ÄŻsitikinÄ™, jog norite panaikinti prieigos teises paĹľymÄ—tiems vartotojams(-ui)?'; +$messages['norights'] = 'Nenurodytos jokios teisÄ—s!'; +$messages['nouser'] = 'Nenurodytas joks vartotojas!'; +?> diff --git a/data/web/rc/plugins/acl/localization/lv_LV.inc b/data/web/rc/plugins/acl/localization/lv_LV.inc new file mode 100644 index 00000000..961be910 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/lv_LV.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'DalīšanÄs'; +$labels['myrights'] = 'PiekÄĽuves tiesÄ«bas'; +$labels['username'] = 'LietotÄjs:'; +$labels['advanced'] = 'PaplašinÄtais režīms'; +$labels['newuser'] = 'Pievienot ierakstu'; +$labels['editperms'] = 'RediÄŁÄ“t piejas'; +$labels['actions'] = 'DarbÄ«bas ar piekÄĽuves tiesÄ«bÄm...'; +$labels['anyone'] = 'Visi lietotÄji (ikviens)'; +$labels['anonymous'] = 'Viesi (anonÄ«mie)'; +$labels['identifier'] = 'Identifikators'; +$labels['acll'] = 'Atrast'; +$labels['aclr'] = 'LasÄ«t ziņojumus'; +$labels['acls'] = 'PaturÄ“t "RedzÄ“tÄ" statusu'; +$labels['aclw'] = 'SaglabÄt atzÄ«mes'; +$labels['acli'] = 'Ievietot (IekopÄ“t)'; +$labels['aclp'] = 'NosĹ«tÄ«t'; +$labels['aclc'] = 'Izveidot apakšmapes'; +$labels['aclk'] = 'Izveidot apakšmapes'; +$labels['acld'] = 'DzÄ“st ziņojumus'; +$labels['aclt'] = 'DzÄ“st ziņojumus'; +$labels['acle'] = 'IzdzÄ“st'; +$labels['aclx'] = 'DzÄ“st mapi'; +$labels['acla'] = 'PÄrvaldÄ«t'; +$labels['acln'] = 'AnotÄ“t e-pastus'; +$labels['aclfull'] = 'Pilna kontrole'; +$labels['aclother'] = 'Cits'; +$labels['aclread'] = 'LasÄ«t'; +$labels['aclwrite'] = 'RakstÄ«t'; +$labels['acldelete'] = 'DzÄ“st'; +$labels['shortacll'] = 'Atrast'; +$labels['shortaclr'] = 'LasÄ«t'; +$labels['shortacls'] = 'PaturÄ“t'; +$labels['shortaclw'] = 'RakstÄ«t'; +$labels['shortacli'] = 'Ievietot'; +$labels['shortaclp'] = 'NosĹ«tÄ«t'; +$labels['shortaclc'] = 'Izveidot'; +$labels['shortaclk'] = 'Izveidot'; +$labels['shortacld'] = 'DzÄ“st'; +$labels['shortaclt'] = 'DzÄ“st'; +$labels['shortacle'] = 'IzdzÄ“st'; +$labels['shortaclx'] = 'Mapes dzēšana'; +$labels['shortacla'] = 'PÄrvaldÄ«t'; +$labels['shortacln'] = 'AnotÄ“t'; +$labels['shortaclother'] = 'Cits'; +$labels['shortaclread'] = 'LasÄ«t'; +$labels['shortaclwrite'] = 'RakstÄ«t'; +$labels['shortacldelete'] = 'DzÄ“st'; +$labels['longacll'] = 'Mape ir redzama kopÄ“jÄ mapju sarakstÄ un var tikt abonÄ“ta'; +$labels['longaclr'] = 'Ĺ i mape var tikt atvÄ“rta lasīšanai'; +$labels['longacls'] = 'Ziņojumu "RedzÄ“ts" atzÄ«me var tik mainÄ«ta'; +$labels['longaclw'] = 'Ziņojumu atzÄ«mes, izņemot "RedzÄ“ts" un "DzÄ“sts", un atslÄ“gvÄrdi var tik mainÄ«ti'; +$labels['longacli'] = 'Ziņojumi var tikt ierakstÄ«ti vai pÄrkopÄ“ti uz šo mapi'; +$labels['longaclp'] = 'VÄ“stules var tikt ievietotas šajÄ mapÄ“'; +$labels['longaclc'] = 'Zem šīs mapes pa tiešo var tikt izveidotas (vai pÄrsauktas) citas mapes'; +$labels['longaclk'] = 'Zem šīs mapes pa tiešo var tikt izveidotas (vai pÄrsauktas) citas mapes'; +$labels['longacld'] = 'Ziņojumu "DzÄ“st" atzÄ«me var tikt mainÄ«ta'; +$labels['longaclt'] = 'Ziņojumu "DzÄ“st" atzÄ«me var tikt mainÄ«ta'; +$labels['longacle'] = 'VÄ“stules var tikt izdzÄ“stas'; +$labels['longaclx'] = 'Mape var tikt gan dzÄ“sta, gan pÄrdÄ“vÄ“ta'; +$labels['longacla'] = 'Mapes pieejas tiesÄ«bas var tikt izmainÄ«tas'; +$labels['longacln'] = 'E-pastu koplietotie meta dati (anotÄcijas) var tikt mainÄ«ti'; +$labels['longaclfull'] = 'Pilna kontrole, iekÄĽaujot arÄ« mapju administrēšanu'; +$labels['longaclread'] = 'Mape var tikt atvÄ“rta lasīšanai'; +$labels['longaclwrite'] = 'Ziņojumi mapÄ“ var tikt gan atzÄ«mÄ“ti, gan ierakstÄ«ti vai arÄ« pÄrkopÄ“ti uz mapi'; +$labels['longacldelete'] = 'VÄ“stules var tikt izdzÄ“stas'; +$labels['longaclother'] = 'Pieejas tiesÄ«bas citiem'; +$labels['ariasummaryacltable'] = 'Pieejas tiesÄ«bu saraksts'; +$labels['arialabelaclactions'] = 'DarbÄ«bu saraksts'; +$labels['arialabelaclform'] = 'Pieejas tiesÄ«bu forma'; +$messages['deleting'] = 'Dzēš piekÄĽuves tiesÄ«bas...'; +$messages['saving'] = 'SaglabÄ piekÄĽuves tiesÄ«bas...'; +$messages['updatesuccess'] = 'PiekÄĽuves tiesÄ«bas tika veiksmÄ«gi samainÄ«tas'; +$messages['deletesuccess'] = 'PiekÄĽuves tiesÄ«bas tika veiksmÄ«gi izdzÄ“stas'; +$messages['createsuccess'] = 'PiekÄĽuves tiesÄ«bas tika veiksmÄ«gi pievienotas'; +$messages['updateerror'] = 'Pieejas tiesÄ«bas nomainÄ«t neizdevÄs'; +$messages['deleteerror'] = 'PiekÄĽuves tiesÄ«bas izdzÄ“st neizdevÄs'; +$messages['createerror'] = 'PiekÄĽuves tiesÄ«bas pievienot neizdevÄs'; +$messages['deleteconfirm'] = 'Vai tiešÄm atzÄ«mÄ“tajiem lietotÄjiem noņemt piekÄĽuves tiesÄ«bas?'; +$messages['norights'] = 'Netika norÄdÄ«tas tiesÄ«bas!'; +$messages['nouser'] = 'Netika norÄdÄ«ts lietotÄjvÄrds!'; +?> diff --git a/data/web/rc/plugins/acl/localization/mn_MN.inc b/data/web/rc/plugins/acl/localization/mn_MN.inc new file mode 100644 index 00000000..4e736e75 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/mn_MN.inc @@ -0,0 +1,49 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'ĐĄŃваалцах'; +$labels['myrights'] = 'Нэвтрэлтийн зөвŃөөрлүүд'; +$labels['username'] = 'Хэрэглэгч:'; +$labels['advanced'] = 'Дэлгэрэнгүй горим'; +$labels['newuser'] = 'Нэмэх'; +$labels['editperms'] = 'ЗөвŃөөрлүүдийг Đ·Đ°ŃĐ°Ń…'; +$labels['actions'] = 'Нэвтрэлтийн зөвŃөөрлийн үйлдлүүд...'; +$labels['anyone'] = 'Đ‘ŇŻŃ… хэрэглэгч (Ń…ŇŻĐ˝ бүр)'; +$labels['anonymous'] = '(Үл таних) зочин'; +$labels['identifier'] = 'Таних мэдээлэл'; +$labels['acll'] = 'Хайх'; +$labels['aclr'] = 'Đ—ŃŃ€Đ˛Đ°Ń ŃĐ˝Ńих'; +$labels['acls'] = 'ĐĄĐ°Ń€ŃĐ°Đ˝ төлөвт хадгалах'; +$labels['aclw'] = 'Тэмдэглэгээ хийх'; +$labels['acli'] = 'ОрŃŃлах (Ń…ŃŃлж)'; +$labels['aclp'] = 'Бичлэг'; +$labels['aclc'] = 'Дэд Ń…Đ°Đ˛Ń‚Đ°Ń ŇŻŇŻŃгэх'; +$labels['aclk'] = 'Дэд Ń…Đ°Đ˛Ń‚Đ°Ń ŇŻŇŻŃгэх'; +$labels['acld'] = 'ЗахианŃŃĐ´Ń‹Đł ŃŃтгах'; +$labels['aclt'] = 'ЗахианŃŃĐ´Ń‹Đł ŃŃтгах'; +$labels['acle'] = 'ĐŁŃтгах'; +$labels['aclx'] = 'ĐĄĐ°Đ˛Ń‚Đ°Ń ŃŃтгах'; +$labels['acla'] = 'ЗохицŃŃлагч'; +$labels['acln'] = 'Тайлбар Đ·ŃрваŃ'; +$labels['aclfull'] = 'Бүрэн Ńдирдлага'; +$labels['aclother'] = 'Đ‘ŃŃĐ°Đ´'; +$labels['aclread'] = 'ĐŁĐ˝ŃŃĐ°Đ˝'; +$labels['aclwrite'] = 'Бичих'; +$labels['acldelete'] = 'ĐŁŃтгах'; +$labels['shortacll'] = 'Хайх'; +$labels['shortaclr'] = 'ĐŁĐ˝Ńих'; +?> diff --git a/data/web/rc/plugins/acl/localization/nb_NO.inc b/data/web/rc/plugins/acl/localization/nb_NO.inc new file mode 100644 index 00000000..a1af91f6 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/nb_NO.inc @@ -0,0 +1,91 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Deling'; +$labels['myrights'] = 'Tilgangsrettigheter'; +$labels['username'] = 'Bruker:'; +$labels['advanced'] = 'Avansert modus'; +$labels['newuser'] = 'Legg til oppføring'; +$labels['editperms'] = 'Rediger tilgangsrettigheter'; +$labels['actions'] = 'Valg for tilgangsrettigheter.'; +$labels['anyone'] = 'Alle brukere (alle)'; +$labels['anonymous'] = 'Gjester (anonyme)'; +$labels['identifier'] = 'Identifikator'; +$labels['acll'] = 'Oppslag'; +$labels['aclr'] = 'Les meldinger'; +$labels['acls'] = 'Behold lesestatus'; +$labels['aclw'] = 'Lagre flagg'; +$labels['acli'] = 'Lim inn'; +$labels['aclp'] = 'Post'; +$labels['aclc'] = 'Opprett undermapper'; +$labels['aclk'] = 'Opprett undermapper'; +$labels['acld'] = 'Slett meldinger'; +$labels['aclt'] = 'Slett meldinger'; +$labels['acle'] = 'Slett fullstendig'; +$labels['aclx'] = 'Slett mappe'; +$labels['acla'] = 'Administrer'; +$labels['aclfull'] = 'Full kontroll'; +$labels['aclother'] = 'Annet'; +$labels['aclread'] = 'Les'; +$labels['aclwrite'] = 'Skriv'; +$labels['acldelete'] = 'Slett'; +$labels['shortacll'] = 'Oppslag'; +$labels['shortaclr'] = 'Les'; +$labels['shortacls'] = 'Behold'; +$labels['shortaclw'] = 'Skriv'; +$labels['shortacli'] = 'Sett inn'; +$labels['shortaclp'] = 'Post'; +$labels['shortaclc'] = 'Opprett'; +$labels['shortaclk'] = 'Opprett'; +$labels['shortacld'] = 'Slett'; +$labels['shortaclt'] = 'Slett'; +$labels['shortacle'] = 'Slett fullstendig'; +$labels['shortaclx'] = 'Slett mappe'; +$labels['shortacla'] = 'Administrer'; +$labels['shortaclother'] = 'Annet'; +$labels['shortaclread'] = 'Les'; +$labels['shortaclwrite'] = 'Skriv'; +$labels['shortacldelete'] = 'Slett'; +$labels['longacll'] = 'Mappen er synlig og kan abonneres pĂĄ'; +$labels['longaclr'] = 'Mappen kan ĂĄpnes for lesing'; +$labels['longacls'] = 'Meldingenes lesestatusflagg kan endres'; +$labels['longaclw'] = 'Meldingsflagg og -nøkkelord kan endres, bortsett fra status for lesing og sletting'; +$labels['longacli'] = 'Meldinger kan lagres eller kopieres til mappen'; +$labels['longaclp'] = 'Meldinger kan postes til denne mappen'; +$labels['longaclc'] = 'Mapper kan opprettes (eller navnes om) direkte under denne mappen'; +$labels['longaclk'] = 'Mapper kan opprettes (eller navnes om) direkte under denne mappen'; +$labels['longacld'] = 'Meldingenes flagg for sletting kan endres'; +$labels['longaclt'] = 'Meldingenes flagg for sletting kan endres'; +$labels['longacle'] = 'Meldingen kan slettes for godt'; +$labels['longaclx'] = 'Mappen kan slettes eller gis nytt navn'; +$labels['longacla'] = 'Mappens tilgangsrettigheter kan endres'; +$labels['longaclfull'] = 'Full kontroll, inkludert mappeadministrasjon'; +$labels['longaclread'] = 'Mappen kan ĂĄpnes for lesing'; +$labels['longaclwrite'] = 'Meldinger kan merkes, lagres i eller flyttes til mappen'; +$labels['longacldelete'] = 'Meldingen kan slettes'; +$messages['deleting'] = 'Sletter tilgangsrettigheter'; +$messages['saving'] = 'Lagrer tilgangsrettigheter'; +$messages['updatesuccess'] = 'Tilgangsrettigheter ble endret'; +$messages['deletesuccess'] = 'Tilgangsrettigheter ble slettet'; +$messages['createsuccess'] = 'Tilgangsrettigheter ble lagt til'; +$messages['updateerror'] = 'Kunne ikke oppdatere tilgangsrettigheter'; +$messages['deleteerror'] = 'Kunne ikke fjerne tilgangsrettigheter'; +$messages['createerror'] = 'Kunne ikke legge til tilgangsrettigheter'; +$messages['deleteconfirm'] = 'Er du sikker pĂĄ at du vil fjerne tilgangen til valgte brukere'; +$messages['norights'] = 'Ingen rettigheter er spesifisert!'; +$messages['nouser'] = 'Brukernavn er ikke spesifisert!'; +?> diff --git a/data/web/rc/plugins/acl/localization/nl_BE.inc b/data/web/rc/plugins/acl/localization/nl_BE.inc new file mode 100644 index 00000000..69d4ad9e --- /dev/null +++ b/data/web/rc/plugins/acl/localization/nl_BE.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['aclother'] = 'Anders'; +$labels['shortaclother'] = 'Anders'; +?> diff --git a/data/web/rc/plugins/acl/localization/nl_NL.inc b/data/web/rc/plugins/acl/localization/nl_NL.inc new file mode 100644 index 00000000..f820846b --- /dev/null +++ b/data/web/rc/plugins/acl/localization/nl_NL.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Delen'; +$labels['myrights'] = 'Toegangsrechten'; +$labels['username'] = 'Gebruiker:'; +$labels['advanced'] = 'Geavanceerde modus'; +$labels['newuser'] = 'Item toevoegen'; +$labels['editperms'] = 'Rechten bewerken'; +$labels['actions'] = 'Toegangsrechtenopties...'; +$labels['anyone'] = 'Alle gebruikers (iedereen)'; +$labels['anonymous'] = 'Gasten (anoniem)'; +$labels['identifier'] = 'Identificatie'; +$labels['acll'] = 'Opzoeken'; +$labels['aclr'] = 'Berichten lezen'; +$labels['acls'] = 'Onthoud gelezen-status'; +$labels['aclw'] = 'Markeringen instellen'; +$labels['acli'] = 'Invoegen (kopiĂ«ren naar)'; +$labels['aclp'] = 'Plaatsen'; +$labels['aclc'] = 'Submappen aanmaken'; +$labels['aclk'] = 'Submappen aanmaken'; +$labels['acld'] = 'Berichten verwijderen'; +$labels['aclt'] = 'Berichten verwijderen'; +$labels['acle'] = 'Vernietigen'; +$labels['aclx'] = 'Map verwijderen'; +$labels['acla'] = 'Beheren'; +$labels['acln'] = 'Annoteer berichten'; +$labels['aclfull'] = 'Volledige toegang'; +$labels['aclother'] = 'Overig'; +$labels['aclread'] = 'Lezen'; +$labels['aclwrite'] = 'Schrijven'; +$labels['acldelete'] = 'Verwijderen'; +$labels['shortacll'] = 'Opzoeken'; +$labels['shortaclr'] = 'Lezen'; +$labels['shortacls'] = 'Behouden'; +$labels['shortaclw'] = 'Schrijven'; +$labels['shortacli'] = 'Invoegen'; +$labels['shortaclp'] = 'Plaatsen'; +$labels['shortaclc'] = 'Aanmaken'; +$labels['shortaclk'] = 'Aanmaken'; +$labels['shortacld'] = 'Verwijderen'; +$labels['shortaclt'] = 'Verwijderen'; +$labels['shortacle'] = 'Vernietigen'; +$labels['shortaclx'] = 'Map verwijderen'; +$labels['shortacla'] = 'Beheren'; +$labels['shortacln'] = 'Annoteren'; +$labels['shortaclother'] = 'Overig'; +$labels['shortaclread'] = 'Lezen'; +$labels['shortaclwrite'] = 'Schrijven'; +$labels['shortacldelete'] = 'Verwijderen'; +$labels['longacll'] = 'De map is zichtbaar in lijsten en het is mogelijk om te abonneren op deze map'; +$labels['longaclr'] = 'De map kan geopend worden om te lezen'; +$labels['longacls'] = 'De berichtmarkering \'Gelezen\' kan aangepast worden'; +$labels['longaclw'] = 'Berichtmarkeringen en labels kunnen aangepast worden, behalve \'Gelezen\' en \'Verwijderd\''; +$labels['longacli'] = 'Berichten kunnen opgesteld worden of gekopieerd worden naar deze map'; +$labels['longaclp'] = 'Berichten kunnen geplaatst worden in deze map'; +$labels['longaclc'] = 'Mappen kunnen aangemaakt of hernoemd worden rechtstreeks onder deze map'; +$labels['longaclk'] = 'Mappen kunnen aangemaakt of hernoemd worden rechtstreeks onder deze map'; +$labels['longacld'] = 'De berichtmarkering \'Verwijderd\' kan aangepast worden'; +$labels['longaclt'] = 'De berichtmarkering \'Verwijderd\' kan aangepast worden'; +$labels['longacle'] = 'Berichten kunnen vernietigd worden'; +$labels['longaclx'] = 'De map kan verwijderd of hernoemd worden'; +$labels['longacla'] = 'De toegangsrechten voor deze map kunnen veranderd worden'; +$labels['longacln'] = 'Gedeelde metadata (annotaties) van berichten kan aangepast worden'; +$labels['longaclfull'] = 'Volledige controle inclusief mappenbeheer'; +$labels['longaclread'] = 'De map kan geopend worden om te lezen'; +$labels['longaclwrite'] = 'Berichten kunnen gemarkeerd worden, opgesteld worden of gekopieerd worden naar deze map'; +$labels['longacldelete'] = 'Berichten kunnen verwijderd worden'; +$labels['longaclother'] = 'Overige toegangsrechten'; +$labels['ariasummaryacltable'] = 'Lijst van toegangsrechten'; +$labels['arialabelaclactions'] = 'Lijstacties'; +$labels['arialabelaclform'] = 'Formulier voor toegangsrechten'; +$messages['deleting'] = 'Toegangsrechten worden verwijderd...'; +$messages['saving'] = 'Toegangsrechten worden opgeslagen...'; +$messages['updatesuccess'] = 'Toegangsrechten succesvol veranderd'; +$messages['deletesuccess'] = 'Toegangsrechten succesvol verwijderd'; +$messages['createsuccess'] = 'Toegangsrechten succesvol toegevoegd'; +$messages['updateerror'] = 'Toegangsrechten kunnen niet bijgewerkt worden'; +$messages['deleteerror'] = 'Toegangsrechten kunnen niet verwijderd worden'; +$messages['createerror'] = 'Toegangsrechten kunnen niet toegevoegd worden'; +$messages['deleteconfirm'] = 'Weet u zeker dat u de toegangsrechten van de geselecteerde gebruiker(s) wilt verwijderen?'; +$messages['norights'] = 'Er zijn geen toegangsrechten opgegeven!'; +$messages['nouser'] = 'Er is geen gebruikersnaam opgegeven!'; +?> diff --git a/data/web/rc/plugins/acl/localization/nn_NO.inc b/data/web/rc/plugins/acl/localization/nn_NO.inc new file mode 100644 index 00000000..e5af45b6 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/nn_NO.inc @@ -0,0 +1,88 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Deling'; +$labels['myrights'] = 'Tilgangsrettar'; +$labels['username'] = 'Brukar:'; +$labels['newuser'] = 'Legg til oppføring'; +$labels['actions'] = 'Val for tilgangsrettar...'; +$labels['anyone'] = 'Alle brukarar (alle)'; +$labels['anonymous'] = 'Gjester (anonyme)'; +$labels['identifier'] = 'Identifikator'; +$labels['acll'] = 'Oppslag'; +$labels['aclr'] = 'Les meldingar'; +$labels['acls'] = 'Behald lesestatus'; +$labels['aclw'] = 'Skriveflagg'; +$labels['acli'] = 'Lim inn'; +$labels['aclp'] = 'Post'; +$labels['aclc'] = 'Opprett undermapper'; +$labels['aclk'] = 'Opprett undermapper'; +$labels['acld'] = 'Slett meldingar'; +$labels['aclt'] = 'Slett meldingar'; +$labels['acle'] = 'Slett fullstendig'; +$labels['aclx'] = 'Slett mappe'; +$labels['acla'] = 'AdministrĂ©r'; +$labels['aclfull'] = 'Full kontroll'; +$labels['aclother'] = 'Anna'; +$labels['aclread'] = 'Les'; +$labels['aclwrite'] = 'Skriv'; +$labels['acldelete'] = 'Slett'; +$labels['shortacll'] = 'Oppslag'; +$labels['shortaclr'] = 'Les'; +$labels['shortacls'] = 'Behald'; +$labels['shortaclw'] = 'Skriv'; +$labels['shortacli'] = 'Sett inn'; +$labels['shortaclp'] = 'Post'; +$labels['shortaclc'] = 'Opprett'; +$labels['shortaclk'] = 'Opprett'; +$labels['shortacld'] = 'Slett'; +$labels['shortaclt'] = 'Slett'; +$labels['shortacle'] = 'Slett fullstendig'; +$labels['shortaclx'] = 'Slett mappe'; +$labels['shortacla'] = 'AdministrĂ©r'; +$labels['shortaclother'] = 'Anna'; +$labels['shortaclread'] = 'Les'; +$labels['shortaclwrite'] = 'Skriv'; +$labels['shortacldelete'] = 'Slett'; +$labels['longacll'] = 'Mappa er synleg og kan abonnerast pĂĄ'; +$labels['longaclr'] = 'Mappa kan opnast for lesing'; +$labels['longacls'] = 'Meldingane sine lesestatusflagg kan endrast'; +$labels['longaclw'] = 'Meldingsflagg og -nøkkelord kan endrast, bortsett frĂĄ status for lesing og sletting'; +$labels['longacli'] = 'Meldingar kan lagrast eller kopierast til mappa'; +$labels['longaclp'] = 'Meldingar kan postast til denne mappa'; +$labels['longaclc'] = 'Mapper kan opprettast (eller namnast om) direkte under denne mappa'; +$labels['longaclk'] = 'Mapper kan opprettast (eller namnast om) direkte under denne mappa'; +$labels['longacld'] = 'Meldingane sine flagg for sletting kan endrast'; +$labels['longaclt'] = 'Meldingane sine flagg for sletting kan endrast'; +$labels['longacle'] = 'Meldinga kan slettast for godt'; +$labels['longaclx'] = 'Mappa kan slettast eller fĂĄ nytt namn'; +$labels['longacla'] = 'Mappa sine tilgangsrettar kan endrast'; +$labels['longaclfull'] = 'Full kontroll, inkludert mappeadministrasjon'; +$labels['longaclread'] = 'Mappa kan opnast for lesing'; +$labels['longaclwrite'] = 'Meldingar kan merkast, lagrast i eller flyttast til mappa'; +$labels['longacldelete'] = 'Meldinga kan slettast'; +$messages['deleting'] = 'Slettar tilgangsrettar…'; +$messages['saving'] = 'Lagrar tilgangsrettar…'; +$messages['updatesuccess'] = 'Tilgangsrettiar vart endra'; +$messages['deletesuccess'] = 'Tilgangsretter vart sletta'; +$messages['createsuccess'] = 'Tilgangsrettar vart legne til'; +$messages['deleteerror'] = 'Kunne ikkje fjerne tilgangsrettar'; +$messages['createerror'] = 'Kunne ikkje leggje til tilgangsrettar'; +$messages['deleteconfirm'] = 'Er du sikker pĂĄ at du vil fjerne tilgangen til valde brukarar?'; +$messages['norights'] = 'Ingen rettar er spesifisert!'; +$messages['nouser'] = 'Brukarnamn er ikkje spesifisert!'; +?> diff --git a/data/web/rc/plugins/acl/localization/pl_PL.inc b/data/web/rc/plugins/acl/localization/pl_PL.inc new file mode 100644 index 00000000..05387306 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/pl_PL.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'UdostÄ™pnianie'; +$labels['myrights'] = 'Prawa dostÄ™pu'; +$labels['username'] = 'UĹĽytkownik:'; +$labels['advanced'] = 'Tryb zaawansowany'; +$labels['newuser'] = 'Dodaj rekord'; +$labels['editperms'] = 'Edytuj zezwolenia'; +$labels['actions'] = 'Akcje na prawach...'; +$labels['anyone'] = 'Wszyscy (anyone)'; +$labels['anonymous'] = 'GoĹ›cie (anonymous)'; +$labels['identifier'] = 'Identyfikator'; +$labels['acll'] = 'PodglÄ…d'; +$labels['aclr'] = 'Odczyt (Read)'; +$labels['acls'] = 'Zmiana stanu wiadomoĹ›ci (Keep)'; +$labels['aclw'] = 'Zmiana flag wiadomoĹ›ci (Write)'; +$labels['acli'] = 'Dodawanie/Kopiowanie do (Insert)'; +$labels['aclp'] = 'WysyĹ‚anie'; +$labels['aclc'] = 'Tworzenie podfolderĂłw (Create)'; +$labels['aclk'] = 'Tworzenie podfolderĂłw (Create)'; +$labels['acld'] = 'Usuwanie wiadomoĹ›ci (Delete)'; +$labels['aclt'] = 'Usuwanie wiadomoĹ›ci (Delete)'; +$labels['acle'] = 'PorzÄ…dkowanie'; +$labels['aclx'] = 'Usuwanie folderu (Delete)'; +$labels['acla'] = 'Administracja'; +$labels['acln'] = 'Adnotacje wiadomoĹ›ci'; +$labels['aclfull'] = 'Wszystkie'; +$labels['aclother'] = 'PozostaĹ‚e'; +$labels['aclread'] = 'Odczyt'; +$labels['aclwrite'] = 'Zapis'; +$labels['acldelete'] = 'Usuwanie'; +$labels['shortacll'] = 'PodglÄ…d'; +$labels['shortaclr'] = 'Odczyt'; +$labels['shortacls'] = 'Zmiana'; +$labels['shortaclw'] = 'Zapis'; +$labels['shortacli'] = 'Dodawanie'; +$labels['shortaclp'] = 'WysyĹ‚anie'; +$labels['shortaclc'] = 'Tworzenie'; +$labels['shortaclk'] = 'Tworzenie'; +$labels['shortacld'] = 'Usuwanie'; +$labels['shortaclt'] = 'Usuwanie'; +$labels['shortacle'] = 'PorzÄ…dkowanie'; +$labels['shortaclx'] = 'Usuwanie folderu'; +$labels['shortacla'] = 'Administracja'; +$labels['shortacln'] = 'Adnotacje'; +$labels['shortaclother'] = 'PozostaĹ‚e'; +$labels['shortaclread'] = 'Odczyt'; +$labels['shortaclwrite'] = 'Zapis'; +$labels['shortacldelete'] = 'Usuwanie'; +$labels['longacll'] = 'Pozwala na subskrybowanie folderu i powoduje, ĹĽe jest on widoczny na liĹ›cie'; +$labels['longaclr'] = 'Folder moĹĽe być otwarty w trybie do odczytu'; +$labels['longacls'] = 'Pozwala na zmienÄ™ stanu wiadomoĹ›ci'; +$labels['longaclw'] = 'Pozwala zmieniać wszystkie flagi wiadomoĹ›ci, oprĂłcz "Przeczytano" i "UsuniÄ™to'; +$labels['longacli'] = 'Pozwala zapisywać wiadomoĹ›ci i kopiować do folderu'; +$labels['longaclp'] = 'Pozwala wysyĹ‚ać wiadomoĹ›ci do folderu'; +$labels['longaclc'] = 'Pozwala tworzyć (lub zmieniać nazwÄ™) podfoldery'; +$labels['longaclk'] = 'Pozwala tworzyć (lub zmieniać nazwÄ™) podfoldery'; +$labels['longacld'] = 'Pozwala zmianiać flagÄ™ "UsuniÄ™to" wiadomoĹ›ci'; +$labels['longaclt'] = 'Pozwala zmianiać flagÄ™ "UsuniÄ™to" wiadomoĹ›ci'; +$labels['longacle'] = 'Pozwala na usuwanie wiadomoĹ›ci oznaczonych do usuniÄ™cia'; +$labels['longaclx'] = 'Pozwala na zmianÄ™ nazwy lub usuniÄ™cie folderu'; +$labels['longacla'] = 'Pozwala na zmiane praw dostÄ™pu do folderu'; +$labels['longacln'] = 'Pozwala na zmianÄ™ współdzielonych meta-danych wiadomoĹ›ci (adnotacji)'; +$labels['longaclfull'] = 'PeĹ‚na kontrola wĹ‚Ä…cznie z administrowaniem folderem'; +$labels['longaclread'] = 'Folder moĹĽe być otwarty w trybie do odczytu'; +$labels['longaclwrite'] = 'WiadomoĹ›ci mogÄ… być oznaczane, zapisywane i kopiowane do folderu'; +$labels['longacldelete'] = 'WiadomoĹ›ci mogÄ… być usuwane'; +$labels['longaclother'] = 'Inne prawa dostÄ™pu'; +$labels['ariasummaryacltable'] = 'Spis praw dostÄ™pu'; +$labels['arialabelaclactions'] = 'Lista dziaĹ‚aĹ„'; +$labels['arialabelaclform'] = 'Formularz praw dostÄ™pu'; +$messages['deleting'] = 'Usuwanie praw dostÄ™pu...'; +$messages['saving'] = 'Zapisywanie praw dostÄ™pu...'; +$messages['updatesuccess'] = 'PomyĹ›lnie zmieniono prawa dostÄ™pu'; +$messages['deletesuccess'] = 'PomyĹ›lnie usuniÄ™to prawa dostÄ™pu'; +$messages['createsuccess'] = 'PomyĹ›lnie dodano prawa dostÄ™pu'; +$messages['updateerror'] = 'Nie udaĹ‚o siÄ™ zaktualizować praw dostÄ™pu'; +$messages['deleteerror'] = 'Nie udaĹ‚o siÄ™ usunąć praw dostÄ™pu'; +$messages['createerror'] = 'Nie udaĹ‚o siÄ™ dodać praw dostÄ™pu'; +$messages['deleteconfirm'] = 'Czy na pewno chcesz usunąć prawa wybranym uĹĽytkownikom?'; +$messages['norights'] = 'Nie wybrano praw dostÄ™pu!'; +$messages['nouser'] = 'Nie podano nazwy uĹĽytkownika!'; +?> diff --git a/data/web/rc/plugins/acl/localization/pt_BR.inc b/data/web/rc/plugins/acl/localization/pt_BR.inc new file mode 100644 index 00000000..badb91f5 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/pt_BR.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Compartilhamento'; +$labels['myrights'] = 'Permissões de Acesso'; +$labels['username'] = 'Usuário:'; +$labels['advanced'] = 'Modo avançado'; +$labels['newuser'] = 'Adicionar entrada'; +$labels['editperms'] = 'Editar permissões'; +$labels['actions'] = 'Ações de direito de acesso...'; +$labels['anyone'] = 'Todos os usuários (qualquer um)'; +$labels['anonymous'] = 'Convidados (anĂ´nimos)'; +$labels['identifier'] = 'Identificador'; +$labels['acll'] = 'Pesquisar'; +$labels['aclr'] = 'Ler mensagens'; +$labels['acls'] = 'Manter estado de enviado'; +$labels['aclw'] = 'Salvar marcadores'; +$labels['acli'] = 'Inserir (CĂłpia em)'; +$labels['aclp'] = 'Enviar'; +$labels['aclc'] = 'Criar subpastas'; +$labels['aclk'] = 'Criar subpastas'; +$labels['acld'] = 'Apagar mensagens'; +$labels['aclt'] = 'Apagar mensagens'; +$labels['acle'] = 'Expurgar'; +$labels['aclx'] = 'Excluir pasta'; +$labels['acla'] = 'Administrar'; +$labels['acln'] = 'Inserir anotações nas mensagens'; +$labels['aclfull'] = 'Controle total'; +$labels['aclother'] = 'Outro'; +$labels['aclread'] = 'Ler'; +$labels['aclwrite'] = 'Salvar'; +$labels['acldelete'] = 'Excluir'; +$labels['shortacll'] = 'Pesquisar'; +$labels['shortaclr'] = 'Ler'; +$labels['shortacls'] = 'Manter'; +$labels['shortaclw'] = 'Salvar'; +$labels['shortacli'] = 'Inserir'; +$labels['shortaclp'] = 'Enviar'; +$labels['shortaclc'] = 'Criar'; +$labels['shortaclk'] = 'Criar'; +$labels['shortacld'] = 'Excluir'; +$labels['shortaclt'] = 'Excluir'; +$labels['shortacle'] = 'Expurgar'; +$labels['shortaclx'] = 'Excluir pasta'; +$labels['shortacla'] = 'Administrar'; +$labels['shortacln'] = 'Anotar'; +$labels['shortaclother'] = 'Outro'; +$labels['shortaclread'] = 'Ler'; +$labels['shortaclwrite'] = 'Salvar'; +$labels['shortacldelete'] = 'Excluir'; +$labels['longacll'] = 'A pasta está visĂ­vel nas listas e pode ser inscrita para'; +$labels['longaclr'] = 'A pasta pode ser aberta para leitura'; +$labels['longacls'] = 'Marcador de Mensagem Enviada pode ser modificadas'; +$labels['longaclw'] = 'Marcadores de mensagens e palavras-chave podem ser modificadas, exceto de Enviadas e ExcluĂ­das'; +$labels['longacli'] = 'As mensagens podem ser escritas ou copiadas para a pasta'; +$labels['longaclp'] = 'As mensagens podem ser enviadas para esta pasta'; +$labels['longaclc'] = 'As pastas podem ser criadas (ou renomeadas) diretamente sob esta pasta'; +$labels['longaclk'] = 'As pastas podem ser criadas (ou renomeadas) diretamente sob esta pasta'; +$labels['longacld'] = 'O marcador de Mensagens ExcluĂ­das podem ser modificadas'; +$labels['longaclt'] = 'O marcador de Mensagens ExcluĂ­das podem ser modificadas'; +$labels['longacle'] = 'As mensagens podem ser expurgadas'; +$labels['longaclx'] = 'A pasta pode ser apagada ou renomeada'; +$labels['longacla'] = 'As permissões de acesso da pasta podem ser alteradas'; +$labels['longacln'] = 'Metadados compartilhados das mensagens (anotações) podem ser alterados'; +$labels['longaclfull'] = 'Controle total incluindo a pasta de administração'; +$labels['longaclread'] = 'A pasta pode ser aberta para leitura'; +$labels['longaclwrite'] = 'As mensagens podem ser marcadas, salvas ou copiadas para a pasta'; +$labels['longacldelete'] = 'Mensagens podem ser apagadas'; +$labels['longaclother'] = 'Outras permissões de acesso'; +$labels['ariasummaryacltable'] = 'Lista de permissões de acesso'; +$labels['arialabelaclactions'] = 'Lista de ações'; +$labels['arialabelaclform'] = 'Formulário de permissões de acesso'; +$messages['deleting'] = 'Apagando permissões de acesso...'; +$messages['saving'] = 'Salvando permissões de acesso...'; +$messages['updatesuccess'] = 'Permissões de acesso alteradas com sucesso'; +$messages['deletesuccess'] = 'Permissões de acesso apagadas com sucesso'; +$messages['createsuccess'] = 'Permissões de acesso adicionadas com sucesso'; +$messages['updateerror'] = 'NĂŁo foi possĂ­vel atualizar as permissões de acesso'; +$messages['deleteerror'] = 'NĂŁo foi possĂ­vel apagar as permissões de acesso'; +$messages['createerror'] = 'NĂŁo foi possĂ­vel adicionar as permissões de acesso'; +$messages['deleteconfirm'] = 'Tem certeza que deseja remover as permissões de acesso do(s) usuário(s) delecionado(s)?'; +$messages['norights'] = 'NĂŁo foram definidas permissões!'; +$messages['nouser'] = 'Nome de usuário nĂŁo especificado!'; +?> diff --git a/data/web/rc/plugins/acl/localization/pt_PT.inc b/data/web/rc/plugins/acl/localization/pt_PT.inc new file mode 100644 index 00000000..745f36be --- /dev/null +++ b/data/web/rc/plugins/acl/localization/pt_PT.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Partilhar'; +$labels['myrights'] = 'Permissões de acesso'; +$labels['username'] = 'Utilizador:'; +$labels['advanced'] = 'Modo avançado'; +$labels['newuser'] = 'Adicionar entrada'; +$labels['editperms'] = 'Editar permissões'; +$labels['actions'] = 'Acções de permissĂŁo de acesso...'; +$labels['anyone'] = 'Todos os utilizadores (todos)'; +$labels['anonymous'] = 'Convidados (anĂłnimo)'; +$labels['identifier'] = 'Identificador'; +$labels['acll'] = 'Pesquisar'; +$labels['aclr'] = 'Ler mensagens'; +$labels['acls'] = 'Manter estado Visto'; +$labels['aclw'] = 'Guardar marcadores'; +$labels['acli'] = 'Inserir (Copiar para)'; +$labels['aclp'] = 'Publicar'; +$labels['aclc'] = 'Criar subpastas'; +$labels['aclk'] = 'Criar subpastas'; +$labels['acld'] = 'Eliminar mensagens'; +$labels['aclt'] = 'Eliminar mensagens'; +$labels['acle'] = 'Purgar'; +$labels['aclx'] = 'Eliminar pasta'; +$labels['acla'] = 'Administrar'; +$labels['acln'] = 'Anotar mensagens'; +$labels['aclfull'] = 'Controlo total'; +$labels['aclother'] = 'Outro'; +$labels['aclread'] = 'Ler'; +$labels['aclwrite'] = 'Escrever'; +$labels['acldelete'] = 'Eliminar'; +$labels['shortacll'] = 'Pesquisar'; +$labels['shortaclr'] = 'Ler'; +$labels['shortacls'] = 'Manter'; +$labels['shortaclw'] = 'Escrever'; +$labels['shortacli'] = 'Inserir'; +$labels['shortaclp'] = 'Publicar'; +$labels['shortaclc'] = 'Criar'; +$labels['shortaclk'] = 'Criar'; +$labels['shortacld'] = 'Eliminar'; +$labels['shortaclt'] = 'Eliminar'; +$labels['shortacle'] = 'Purgar'; +$labels['shortaclx'] = 'Eliminar pasta'; +$labels['shortacla'] = 'Administrar'; +$labels['shortacln'] = 'Anotar'; +$labels['shortaclother'] = 'Outro'; +$labels['shortaclread'] = 'Ler'; +$labels['shortaclwrite'] = 'Escrever'; +$labels['shortacldelete'] = 'Eliminar'; +$labels['longacll'] = 'A pasta está visĂ­vel em listas e pode subscrita'; +$labels['longaclr'] = 'A pasta pode ser aberta para leitura'; +$labels['longacls'] = 'O marcador Mensagens Vistas pode ser alterado'; +$labels['longaclw'] = 'Marcadores de mensagens e palavras-chave podem ser alterados, excepto Vistas e Eliminadas'; +$labels['longacli'] = 'As mensagens podem ser escritas ou copiadas para a pasta'; +$labels['longaclp'] = 'As mensagens podem ser publicadas para esta pasta'; +$labels['longaclc'] = 'As pastas podem ser criadas (ou renomeadas) directamente debaixo desta pasta'; +$labels['longaclk'] = 'As pastas podem ser criadas (ou renomeadas) directamente debaixo desta pasta'; +$labels['longacld'] = 'O marcador Apagar Mensagens pode ser alterado'; +$labels['longaclt'] = 'O marcador Apagar Mensagens pode ser alterado'; +$labels['longacle'] = 'As mensagens podem ser purgadas'; +$labels['longaclx'] = 'A pasta pode ser eliminada ou renomeada'; +$labels['longacla'] = 'As permissões de acesso da pasta podem ser alteradas'; +$labels['longacln'] = 'Mensagens de metadados (anotações) partilhadas podem ser alteradas'; +$labels['longaclfull'] = 'Controlo total incluindo administração de pastas'; +$labels['longaclread'] = 'A pasta pode ser aberta para leitura'; +$labels['longaclwrite'] = 'As mensagens podem ser marcadas, guardadas ou copiadas para a pasta'; +$labels['longacldelete'] = 'As mensagens podem ser eliminadas'; +$labels['longaclother'] = 'Outros direitos de acesso'; +$labels['ariasummaryacltable'] = 'Lista de direitos de acesso'; +$labels['arialabelaclactions'] = 'Lista de acções'; +$labels['arialabelaclform'] = 'Formulário de direitos de acesso'; +$messages['deleting'] = 'A eliminar permissões de acesso...'; +$messages['saving'] = 'A guardar permissões de acesso...'; +$messages['updatesuccess'] = 'Permissões de acesso alteradas com sucesso'; +$messages['deletesuccess'] = 'Permissões de acesso eliminadas com sucesso'; +$messages['createsuccess'] = 'Permissões de acesso adicionadas com sucesso'; +$messages['updateerror'] = 'NĂŁo foi possĂ­vel actualizar os direitos de acesso'; +$messages['deleteerror'] = 'NĂŁo foi possĂ­vel eliminar permissões de acesso'; +$messages['createerror'] = 'NĂŁo foi possĂ­vel adicionar permissões de acesso'; +$messages['deleteconfirm'] = 'Tem a certeza que pretende remover as permissões de acesso do(s) utilizador(es) seleccionado(s)?'; +$messages['norights'] = 'NĂŁo foram especificadas quaisquer permissões!'; +$messages['nouser'] = 'NĂŁo foi especificado nenhum nome de utilizador!'; +?> diff --git a/data/web/rc/plugins/acl/localization/ro_RO.inc b/data/web/rc/plugins/acl/localization/ro_RO.inc new file mode 100644 index 00000000..7db891aa --- /dev/null +++ b/data/web/rc/plugins/acl/localization/ro_RO.inc @@ -0,0 +1,94 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Partajare'; +$labels['myrights'] = 'Drepturi de acces'; +$labels['username'] = 'Utilizator:'; +$labels['advanced'] = 'Modul avansat'; +$labels['newuser'] = 'AdÄugare intrare'; +$labels['editperms'] = 'Editare permisiuni'; +$labels['actions'] = 'AcČ›iunea drepturilor de acces...'; +$labels['anyone'] = 'ToČ›i utilizatori (oricare)'; +$labels['anonymous'] = 'Vizitator'; +$labels['identifier'] = 'Identificator'; +$labels['acll'] = 'CautÄ'; +$labels['aclr'] = 'Citire mesaje'; +$labels['acls'] = 'MenČ›ine starea citirii'; +$labels['aclw'] = 'Indicator scriere'; +$labels['acli'] = 'Inserare (copiere Ă®n)'; +$labels['aclp'] = 'PosteazÄ'; +$labels['aclc'] = 'CreeazÄ subdirectoare'; +$labels['aclk'] = 'CreeazÄ subdirectoare'; +$labels['acld'] = 'Čtergere mesaje'; +$labels['aclt'] = 'Čtergere mesaje'; +$labels['acle'] = 'EliminÄ'; +$labels['aclx'] = 'Čtergere dosar'; +$labels['acla'] = 'AdministreazÄ'; +$labels['acln'] = 'Adnoteaza mesajele'; +$labels['aclfull'] = 'Control complet'; +$labels['aclother'] = 'Altul'; +$labels['aclread'] = 'CiteĹźte'; +$labels['aclwrite'] = 'Scrie'; +$labels['acldelete'] = 'Čterge'; +$labels['shortacll'] = 'CautÄ'; +$labels['shortaclr'] = 'CiteĹźte'; +$labels['shortacls'] = 'PÄstreazÄ'; +$labels['shortaclw'] = 'Scrie'; +$labels['shortacli'] = 'InsereazÄ'; +$labels['shortaclp'] = 'PosteazÄ'; +$labels['shortaclc'] = 'CreeazÄ'; +$labels['shortaclk'] = 'CreeazÄ'; +$labels['shortacld'] = 'Čterge'; +$labels['shortaclt'] = 'Čterge'; +$labels['shortacle'] = 'EliminÄ'; +$labels['shortaclx'] = 'Čtergere dosar'; +$labels['shortacla'] = 'AdministreazÄ'; +$labels['shortacln'] = 'AdnotÄ'; +$labels['shortaclother'] = 'Altul'; +$labels['shortaclread'] = 'CiteĹźte'; +$labels['shortaclwrite'] = 'Scrie'; +$labels['shortacldelete'] = 'Čterge'; +$labels['longacll'] = 'Dosarul este vizibil pe liste Č™i se poate subscrie la acesta'; +$labels['longaclr'] = 'Dosarul se poate deschide pentru citire'; +$labels['longacls'] = 'Indicatorul de VÄzut a fost schimbat'; +$labels['longaclw'] = 'Indicatoarele Č™i cuvintele cheie ale mesajelor se pot schimba cu excepČ›ia VÄzut Č™i Čters'; +$labels['longacli'] = 'Mesajul se poate scrie sau copia Ă®ntr-un dosar'; +$labels['longaclp'] = 'Mesajele se pot trimite cÄtre acest dosar'; +$labels['longaclc'] = 'Dosarele se pot crea (sau redenumi) direct sub acest dosar'; +$labels['longaclk'] = 'Dosarele se pot crea (sau redenumi) direct sub acest dosar'; +$labels['longacld'] = 'Indicatorul de Čters al mesajelor se poate modifica'; +$labels['longaclt'] = 'Indicatorul de Čters al mesajelor se poate modifica'; +$labels['longacle'] = 'Mesajele se pot elimina'; +$labels['longaclx'] = 'Dosarul se poate Č™terge sau redenumi'; +$labels['longacla'] = 'Drepturile de acces la dosar se pot schimba'; +$labels['longacln'] = 'Metadatele (adnotarile) impartite ale mesajelor pot fi schimbate'; +$labels['longaclfull'] = 'Control complet include Č™i administrare dosar'; +$labels['longaclread'] = 'Dosarul se poate deschide pentru citire'; +$labels['longaclwrite'] = 'Mesajul se poate marca, scrie sau copia Ă®ntr-un dosar'; +$labels['longacldelete'] = 'Mesajele se pot Č™terge'; +$messages['deleting'] = 'Čterg drepturile de access...'; +$messages['saving'] = 'Salvez drepturi accesare...'; +$messages['updatesuccess'] = 'Drepturile de acces au fost schimbate cu succes'; +$messages['deletesuccess'] = 'Drepturile de acces au fost Č™terse cu succes'; +$messages['createsuccess'] = 'Drepturile de acces au fost adÄugate cu succes'; +$messages['updateerror'] = 'Nu s-au putut actualiza drepturile de acces'; +$messages['deleteerror'] = 'Nu s-au putut Č™terge drepturile de acces'; +$messages['createerror'] = 'Nu s-au putut adÄuga drepturi de acces'; +$messages['deleteconfirm'] = 'SunteČ›i sigur cÄ doriČ›i sÄ Č™tergeČ›i drepturile de acces la utilizatorul (ii) selectaČ›i?'; +$messages['norights'] = 'Nu au fost specificate drepturi!'; +$messages['nouser'] = 'Nu a fost specificat niciun utilizator!'; +?> diff --git a/data/web/rc/plugins/acl/localization/ru_RU.inc b/data/web/rc/plugins/acl/localization/ru_RU.inc new file mode 100644 index 00000000..0b5d626a --- /dev/null +++ b/data/web/rc/plugins/acl/localization/ru_RU.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'СовмеŃтный Đ´ĐľŃŃ‚ŃĐż'; +$labels['myrights'] = 'Права Đ´ĐľŃŃ‚Ńпа'; +$labels['username'] = 'Пользователь:'; +$labels['advanced'] = 'Đ­ĐşŃпертный режим'; +$labels['newuser'] = 'Добавить поле'; +$labels['editperms'] = 'Редактировать права'; +$labels['actions'] = 'ДейŃтвия Ń ĐżŃ€Đ°Đ˛Đ°ĐĽĐ¸ Đ´ĐľŃŃ‚Ńпа...'; +$labels['anyone'] = 'Đ’Ńе пользователи (любые)'; +$labels['anonymous'] = 'Đ“ĐľŃти (анонимные)'; +$labels['identifier'] = 'Đдентификатор'; +$labels['acll'] = 'ПроŃмотр'; +$labels['aclr'] = 'Чтение Ńообщений'; +$labels['acls'] = 'Сохранение ŃĐľŃтояния Прочитано'; +$labels['aclw'] = 'ЗапиŃŃŚ флагов'; +$labels['acli'] = 'Đ’Ńтавка (копирование в...)'; +$labels['aclp'] = 'Отправить'; +$labels['aclc'] = 'Создание вложенных папок'; +$labels['aclk'] = 'Создание вложенных папок'; +$labels['acld'] = 'Удаление Ńообщений'; +$labels['aclt'] = 'Удаление Ńообщений'; +$labels['acle'] = 'Уничтожение Ńообщений'; +$labels['aclx'] = 'Удаление папки'; +$labels['acla'] = 'ĐдминиŃтрировать'; +$labels['acln'] = 'Комментировать Ńообщения'; +$labels['aclfull'] = 'Полный Đ´ĐľŃŃ‚ŃĐż'; +$labels['aclother'] = 'ДрŃгое'; +$labels['aclread'] = 'Чтение'; +$labels['aclwrite'] = 'ЗапиŃŃŚ'; +$labels['acldelete'] = 'Удаление'; +$labels['shortacll'] = 'ПоиŃĐş'; +$labels['shortaclr'] = 'Чтение'; +$labels['shortacls'] = 'Прочитано'; +$labels['shortaclw'] = 'ЗапиŃŃŚ'; +$labels['shortacli'] = 'Đ’Ńтавить'; +$labels['shortaclp'] = 'Отправить'; +$labels['shortaclc'] = 'Создать'; +$labels['shortaclk'] = 'Создать'; +$labels['shortacld'] = 'Удаление'; +$labels['shortaclt'] = 'Удаление'; +$labels['shortacle'] = 'Уничтожение'; +$labels['shortaclx'] = 'Удаление папки'; +$labels['shortacla'] = 'ĐдминиŃтрировать'; +$labels['shortacln'] = 'Комментировать'; +$labels['shortaclother'] = 'ДрŃгое'; +$labels['shortaclread'] = 'Чтение'; +$labels['shortaclwrite'] = 'ЗапиŃŃŚ'; +$labels['shortacldelete'] = 'Удаление'; +$labels['longacll'] = 'Папка видима в ŃпиŃках и Đ´ĐľŃŃ‚Ńпна для подпиŃки'; +$labels['longaclr'] = 'Đ­Ń‚Đ° папка может быть открыта для чтения'; +$labels['longacls'] = 'Флаг Прочитано может быть изменен'; +$labels['longaclw'] = 'Флаги и ключевые Ńлова, кроме Прочитано и Удалено, могŃŃ‚ быть изменены'; +$labels['longacli'] = 'Сообщения могŃŃ‚ быть запиŃаны или Ńкопированы в папкŃ'; +$labels['longaclp'] = 'Сообщения могŃŃ‚ быть отправлены в ŃŤŃ‚Ń ĐżĐ°ĐżĐşŃ'; +$labels['longaclc'] = 'Подпапки могŃŃ‚ быть Ńозданы или переименованы прямо в этой папке'; +$labels['longaclk'] = 'Подпапки могŃŃ‚ быть Ńозданы или переименованы прямо в этой папке'; +$labels['longacld'] = 'Флаг Удалено может быть изменен'; +$labels['longaclt'] = 'Флаг Удалено может быть изменен'; +$labels['longacle'] = 'Сообщения могŃŃ‚ быть Ńничтожены'; +$labels['longaclx'] = 'Đ­Ń‚Đ° папка может быть переименована или Ńдалена'; +$labels['longacla'] = 'Права Đ´ĐľŃŃ‚Ńпа Đş папке могŃŃ‚ быть изменены'; +$labels['longacln'] = 'СовмеŃтные медаданные Ńообщений (комментарии) могŃŃ‚ быть изменены'; +$labels['longaclfull'] = 'Полный Đ´ĐľŃŃ‚ŃĐż, включая Ńправление папкой'; +$labels['longaclread'] = 'Đ­Ń‚Đ° папка может быть открыта для чтения'; +$labels['longaclwrite'] = 'Сообщения можно помечать, запиŃывать или копировать в папкŃ'; +$labels['longacldelete'] = 'Сообщения можно Ńдалять'; +$labels['longaclother'] = 'Прочие права Đ´ĐľŃŃ‚Ńпа'; +$labels['ariasummaryacltable'] = 'СпиŃок прав Đ´ĐľŃŃ‚Ńпа'; +$labels['arialabelaclactions'] = 'СпиŃок дейŃтвий'; +$labels['arialabelaclform'] = 'Форма прав Đ´ĐľŃŃ‚Ńпа'; +$messages['deleting'] = 'Удаление прав Đ´ĐľŃŃ‚Ńпа...'; +$messages['saving'] = 'Сохранение прав Đ´ĐľŃŃ‚Ńпа...'; +$messages['updatesuccess'] = 'Права Đ´ĐľŃŃ‚Ńпа ŃŃпеŃно изменены'; +$messages['deletesuccess'] = 'Права Đ´ĐľŃŃ‚Ńпа ŃŃпеŃно Ńдалены'; +$messages['createsuccess'] = 'ĐŁŃпеŃно добавлены права Đ´ĐľŃŃ‚Ńпа'; +$messages['updateerror'] = 'Невозможно обновить права Đ´ĐľŃŃ‚Ńпа'; +$messages['deleteerror'] = 'Невозможно Ńдалить права Đ´ĐľŃŃ‚Ńпа'; +$messages['createerror'] = 'Невозможно добавить права Đ´ĐľŃŃ‚Ńпа'; +$messages['deleteconfirm'] = 'Đ’Ń‹ Ńверены в том, что хотите Ńдалить права Đ´ĐľŃŃ‚Ńпа выбранных пользователей?'; +$messages['norights'] = 'Права Đ´ĐľŃŃ‚Ńпа не ŃŃтановлены!'; +$messages['nouser'] = 'Не определено имя пользователя!'; +?> diff --git a/data/web/rc/plugins/acl/localization/sk_SK.inc b/data/web/rc/plugins/acl/localization/sk_SK.inc new file mode 100644 index 00000000..6acc03ee --- /dev/null +++ b/data/web/rc/plugins/acl/localization/sk_SK.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'ZdieÄľanie'; +$labels['myrights'] = 'PrĂ­stupovĂ© oprávnenia'; +$labels['username'] = 'PoužívateÄľ:'; +$labels['advanced'] = 'ReĹľim pre pokroÄŤilĂ˝ch'; +$labels['newuser'] = 'PridaĹĄ záznam'; +$labels['editperms'] = 'UpraviĹĄ oprávnenia'; +$labels['actions'] = 'PrĂ­stupovĂ© práva pre akcie...'; +$labels['anyone'] = 'Všetci užívatelia (ktokoÄľvek)'; +$labels['anonymous'] = 'Hostia (anonymnĂ­)'; +$labels['identifier'] = 'Identifikátor'; +$labels['acll'] = 'VyhÄľadaĹĄ'; +$labels['aclr'] = 'ÄŚĂ­taĹĄ správy'; +$labels['acls'] = 'PonechaĹĄ ako preÄŤĂ­tanĂ©'; +$labels['aclw'] = 'PrĂ­znaky pre zápis'; +$labels['acli'] = 'VloĹľiĹĄ (SkopĂ­rovaĹĄ do)'; +$labels['aclp'] = 'OdoslaĹĄ na'; +$labels['aclc'] = 'VytvoriĹĄ podprieÄŤinky'; +$labels['aclk'] = 'VytvoriĹĄ podprieÄŤinky'; +$labels['acld'] = 'VymazaĹĄ správy'; +$labels['aclt'] = 'VymazaĹĄ správy'; +$labels['acle'] = 'VyÄŤistiĹĄ'; +$labels['aclx'] = 'VymazaĹĄ prieÄŤinok'; +$labels['acla'] = 'SpravovaĹĄ'; +$labels['acln'] = 'OznaÄŤiĹĄ správy poznámkou'; +$labels['aclfull'] = 'ĂšplnĂ˝ prĂ­stup'; +$labels['aclother'] = 'InĂ©'; +$labels['aclread'] = 'ÄŚĂ­tanie'; +$labels['aclwrite'] = 'Zápis'; +$labels['acldelete'] = 'Odstránenie'; +$labels['shortacll'] = 'VyhÄľadaĹĄ'; +$labels['shortaclr'] = 'ÄŚĂ­tanie'; +$labels['shortacls'] = 'PonechaĹĄ'; +$labels['shortaclw'] = 'Zápis'; +$labels['shortacli'] = 'VloĹľiĹĄ'; +$labels['shortaclp'] = 'OdoslaĹĄ na'; +$labels['shortaclc'] = 'VytvoriĹĄ'; +$labels['shortaclk'] = 'VytvoriĹĄ'; +$labels['shortacld'] = 'VymazaĹĄ'; +$labels['shortaclt'] = 'VymazaĹĄ'; +$labels['shortacle'] = 'VyÄŤistiĹĄ'; +$labels['shortaclx'] = 'VymazaĹĄ prieÄŤinok'; +$labels['shortacla'] = 'SpravovaĹĄ'; +$labels['shortacln'] = 'OznaÄŤiĹĄ poznámkou'; +$labels['shortaclother'] = 'InĂ©'; +$labels['shortaclread'] = 'ÄŚĂ­tanie'; +$labels['shortaclwrite'] = 'Zápis'; +$labels['shortacldelete'] = 'Odstránenie'; +$labels['longacll'] = 'PrieÄŤinok je v zoznamoch viditeÄľnĂ˝ a dá sa k nemu prihlásiĹĄ'; +$labels['longaclr'] = 'PreÄŤinok je moĹľnĂ© otvoriĹĄ na ÄŤĂ­tanie'; +$labels['longacls'] = 'PrĂ­znak "PreÄŤĂ­tanĂ©" je moĹľnĂ© zmeniĹĄ'; +$labels['longaclw'] = 'PrĂ­znaky správ a kľúčovĂ© slová je moĹľnĂ© zmeniĹĄ, okrem "PreÄŤĂ­tanĂ©" a "VymazanĂ©"'; +$labels['longacli'] = 'Do tohto prieÄŤinka je moĹľnĂ© zapisovaĹĄ alebo kopĂ­rovaĹĄ správy'; +$labels['longaclp'] = 'Do tohto prieÄŤinka je moĹľnĂ© publikovaĹĄ správy'; +$labels['longaclc'] = 'PrieÄŤinky je moĹľnĂ© vytváraĹĄ (alebo premenovávaĹĄ) priamo v tomto prieÄŤinku'; +$labels['longaclk'] = 'PrieÄŤinky je moĹľnĂ© vytváraĹĄ (alebo premenovávaĹĄ) priamo v tomto prieÄŤinku'; +$labels['longacld'] = 'PrĂ­znak správ "VymazanĂ©" je moĹľnĂ© zmeniĹĄ'; +$labels['longaclt'] = 'PrĂ­znak správ "VymazanĂ©" je moĹľnĂ© zmeniĹĄ'; +$labels['longacle'] = 'Správy je moĹľnĂ© vyÄŤistiĹĄ'; +$labels['longaclx'] = 'PrieÄŤinok je moĹľnĂ© vymazaĹĄ alebo premenovaĹĄ'; +$labels['longacla'] = 'PrĂ­stupovĂ© oprávnenia k tomuto prieÄŤinku je moĹľnĂ© zmeniĹĄ'; +$labels['longacln'] = 'Meta-dáta (poznámky) zdieÄľanĂ© medzi správami, je moĹľnĂ© zmeniĹĄ'; +$labels['longaclfull'] = 'ĂšplnĂ˝ prĂ­stup, vrátane správy prieÄŤinka'; +$labels['longaclread'] = 'PreÄŤinok je moĹľnĂ© otvoriĹĄ na ÄŤĂ­tanie'; +$labels['longaclwrite'] = 'Správy je moĹľnĂ© oznaÄŤiĹĄ, zapĂ­saĹĄ alebo skopĂ­rovaĹĄ do preÄŤinka'; +$labels['longacldelete'] = 'Správy je moĹľnĂ© vymazaĹĄ'; +$labels['longaclother'] = 'InĂ© prĂ­stupovĂ© oprávnenia'; +$labels['ariasummaryacltable'] = 'Zoznam prĂ­stupovĂ˝ch oprávnenĂ­'; +$labels['arialabelaclactions'] = 'Zoznam akciĂ­'; +$labels['arialabelaclform'] = 'Formulár pre prĂ­stupovĂ© oprávnenia'; +$messages['deleting'] = 'OdstraĹovanie prĂ­stupovĂ˝ch oprávnenĂ­...'; +$messages['saving'] = 'Ukladanie prĂ­stupovĂ˝ch oprávnenĂ­...'; +$messages['updatesuccess'] = 'PrĂ­stupovĂ© oprávnenia boli Ăşspešne zmenenĂ©'; +$messages['deletesuccess'] = 'PrĂ­stupovĂ© oprávnenia boli Ăşspešne vymazanĂ©'; +$messages['createsuccess'] = 'PrĂ­stupovĂ© oprávnenia boli Ăşspešne pridanĂ©'; +$messages['updateerror'] = 'NemoĹľno aktualizovaĹĄ prĂ­stupovĂ© oprávnenia'; +$messages['deleteerror'] = 'PrĂ­stupovĂ© oprávnenia sa nepodarilo vymazaĹĄ'; +$messages['createerror'] = 'PrĂ­stupovĂ© oprávnenia sa nepodarilo pridaĹĄ'; +$messages['deleteconfirm'] = 'Naozaj chcete odstrániĹĄ prĂ­stupovĂ© oprávnenia vybranĂ©ho používateÄľa?'; +$messages['norights'] = 'Neboli urÄŤenĂ© Ĺľiadne oprávnenia!'; +$messages['nouser'] = 'Nebolo urÄŤenĂ© Ĺľiadne meno používateÄľa!'; +?> diff --git a/data/web/rc/plugins/acl/localization/sl_SI.inc b/data/web/rc/plugins/acl/localization/sl_SI.inc new file mode 100644 index 00000000..aef0ad58 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/sl_SI.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Skupna raba'; +$labels['myrights'] = 'Pravice dostopa'; +$labels['username'] = 'Uporabnik:'; +$labels['advanced'] = 'Napredni naÄŤin'; +$labels['newuser'] = 'Dodaj vnos'; +$labels['editperms'] = 'Uredi pravice'; +$labels['actions'] = 'Nastavitve pravic dostopa'; +$labels['anyone'] = 'Vsi uporabniki'; +$labels['anonymous'] = 'Gosti'; +$labels['identifier'] = 'OznaÄŤevalnik'; +$labels['acll'] = 'Iskanje'; +$labels['aclr'] = 'Prebrana sporoÄŤila'; +$labels['acls'] = 'Ohrani status \'Prebrano\''; +$labels['aclw'] = 'OznaÄŤi pisanje sporoÄŤila'; +$labels['acli'] = 'Vstavi (Kopiraj v)'; +$labels['aclp'] = 'Objava'; +$labels['aclc'] = 'Ustvari podmape'; +$labels['aclk'] = 'Ustvari podmape'; +$labels['acld'] = 'Izbriši sporoÄŤila'; +$labels['aclt'] = 'Izbriši sporoÄŤila'; +$labels['acle'] = 'Izbriši'; +$labels['aclx'] = 'Izbriši mapo'; +$labels['acla'] = 'Uredi'; +$labels['acln'] = 'Komentarji'; +$labels['aclfull'] = 'Popolno upravljanje'; +$labels['aclother'] = 'Ostalo'; +$labels['aclread'] = 'Preberi'; +$labels['aclwrite'] = 'Sestavi'; +$labels['acldelete'] = 'Izbriši'; +$labels['shortacll'] = 'Iskanje'; +$labels['shortaclr'] = 'Preberi'; +$labels['shortacls'] = 'Ohrani'; +$labels['shortaclw'] = 'Sestavi'; +$labels['shortacli'] = 'Vstavi'; +$labels['shortaclp'] = 'Objava'; +$labels['shortaclc'] = 'Ustvari'; +$labels['shortaclk'] = 'Ustvari'; +$labels['shortacld'] = 'Izbriši'; +$labels['shortaclt'] = 'Izbriši'; +$labels['shortacle'] = 'Izbriši'; +$labels['shortaclx'] = 'Izbriši mapo'; +$labels['shortacla'] = 'Uredi'; +$labels['shortacln'] = 'Dodaj komentar'; +$labels['shortaclother'] = 'Ostalo'; +$labels['shortaclread'] = 'Preberi'; +$labels['shortaclwrite'] = 'Sestavi'; +$labels['shortacldelete'] = 'Izbriši'; +$labels['longacll'] = 'Mapa je vidna na seznamih in jo lahko naroÄŤite'; +$labels['longaclr'] = 'Mapa je na voljo za branje'; +$labels['longacls'] = 'Oznaka \'Prebrano sporoÄŤilo\' je lahko spremenjena'; +$labels['longaclw'] = 'Oznake sporoÄŤil in kljuÄŤne besede je mogoÄŤe spremeniti, z izjemo oznak "Prebrano" in "Izbrisano'; +$labels['longacli'] = 'SporoÄŤilo je lahko poslano ali kopirano v mapo'; +$labels['longaclp'] = 'SporoÄŤilo je lahko poslano v to mapo'; +$labels['longaclc'] = 'V tej mapi so lahko ustvarjene (ali preimenovane) podmape'; +$labels['longaclk'] = 'V tej mapi so lahko ustvarjene (ali preimenovane) podmape'; +$labels['longacld'] = 'Oznako sporoÄŤila \'Izbrisano\' je mogoÄŤe spremeniti'; +$labels['longaclt'] = 'Oznako sporoÄŤila \'Izbrisano\' je mogoÄŤe spremeniti'; +$labels['longacle'] = 'SporoÄŤila so lahko izbrisana'; +$labels['longaclx'] = 'Mapa je lahko izbrisana ali preimenovana'; +$labels['longacla'] = 'Pravice na mapi so lahko spremenjene'; +$labels['longacln'] = 'Metapodatke (komentarjev), ki so v skupni rabi, je mogoÄŤe spremeniti'; +$labels['longaclfull'] = 'Popolno upravljanje, vkljuÄŤno z urejanjem map'; +$labels['longaclread'] = 'Mapa je na voljo za branje'; +$labels['longaclwrite'] = 'SporoÄŤila je mogoÄŤe oznaÄŤiti, sestaviti ali kopirati v mapo'; +$labels['longacldelete'] = 'SporoÄŤila so lahko izbrisana'; +$labels['longaclother'] = 'Ostale pravice dostopa'; +$labels['ariasummaryacltable'] = 'Seznam pravic dostopa'; +$labels['arialabelaclactions'] = 'PrikaĹľi moĹľnosti'; +$labels['arialabelaclform'] = 'Obrazec za nastavitve pravic dostopa'; +$messages['deleting'] = 'Brisanje pravic'; +$messages['saving'] = 'Shranjevanje pravic'; +$messages['updatesuccess'] = 'Pravice so bile uspešno spremenjene'; +$messages['deletesuccess'] = 'Pravice so bile uspešno izbrisane'; +$messages['createsuccess'] = 'Pravice so bile uspešno dodane'; +$messages['updateerror'] = 'Pravic ni mogoÄŤe posodobiti'; +$messages['deleteerror'] = 'Pravic ni mogoÄŤe izbrisati'; +$messages['createerror'] = 'Pravic ni bilo mogoÄŤe dodati'; +$messages['deleteconfirm'] = 'Ste prepriÄŤani, da Ĺľelite odstraniti pravice dostopa za izbrane uporabnike?'; +$messages['norights'] = 'Pravic niste doloÄŤili'; +$messages['nouser'] = 'Niste doloÄŤili uporabnišlega imena'; +?> diff --git a/data/web/rc/plugins/acl/localization/sq_AL.inc b/data/web/rc/plugins/acl/localization/sq_AL.inc new file mode 100644 index 00000000..41ecc956 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/sq_AL.inc @@ -0,0 +1,96 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['myrights'] = 'TĂ« drejta Hyrjeje'; +$labels['username'] = 'PĂ«rdorues:'; +$labels['advanced'] = 'MĂ«nyra e pĂ«rparuar'; +$labels['newuser'] = 'Shtoni zĂ«'; +$labels['editperms'] = 'PĂ«rpunoni leje'; +$labels['actions'] = 'Veprime tĂ« drejtash hyrjeje…'; +$labels['anyone'] = 'Krejt pĂ«rdoruesit (cilido)'; +$labels['anonymous'] = 'MysafirĂ« (nĂ« mĂ«nyrĂ« anonime)'; +$labels['identifier'] = 'Identifikues'; +$labels['acll'] = 'KĂ«rkim'; +$labels['aclr'] = 'Lexoni mesazhe'; +$labels['acls'] = 'Mbaje gjendjen i ParĂ«'; +$labels['acli'] = 'Fut (Kopje te)'; +$labels['aclp'] = 'Postim'; +$labels['aclc'] = 'Krijo nĂ«ndosje'; +$labels['aclk'] = 'Krijo nĂ«ndosje'; +$labels['acld'] = 'Fshiji mesazhet'; +$labels['aclt'] = 'Fshiji mesazhet'; +$labels['acle'] = 'Spastroje'; +$labels['aclx'] = 'Fshije dosjen'; +$labels['acla'] = 'Administroni'; +$labels['acln'] = 'Shto shĂ«nime te mesazhet'; +$labels['aclfull'] = 'Kontroll i plotĂ«'; +$labels['aclother'] = 'TjetĂ«r'; +$labels['aclread'] = 'Leximi'; +$labels['aclwrite'] = 'Shkrimi'; +$labels['acldelete'] = 'Fshije'; +$labels['shortacll'] = 'KĂ«rkim'; +$labels['shortaclr'] = 'Leximi'; +$labels['shortacls'] = 'Mbaje'; +$labels['shortaclw'] = 'Shkrimi'; +$labels['shortacli'] = 'Fut'; +$labels['shortaclp'] = 'Posto'; +$labels['shortaclc'] = 'Krijoje'; +$labels['shortaclk'] = 'Krijoje'; +$labels['shortacld'] = 'Fshije'; +$labels['shortaclt'] = 'Fshije'; +$labels['shortacle'] = 'Spastro'; +$labels['shortaclx'] = 'Fshirje dosjeje'; +$labels['shortacla'] = 'Administro'; +$labels['shortacln'] = 'Shto shĂ«nim'; +$labels['shortaclother'] = 'TjetĂ«r'; +$labels['shortaclread'] = 'Leximi'; +$labels['shortaclwrite'] = 'Shkrimi'; +$labels['shortacldelete'] = 'Fshirjeje'; +$labels['longacll'] = 'Dosja Ă«shtĂ« e dukshme nĂ« lista dhe nĂ« tĂ« mund tĂ« pajtoheni'; +$labels['longaclr'] = 'Dosja mund tĂ« hapet pĂ«r lexim'; +$labels['longacls'] = 'Mund tĂ« ndryshohet shenja Mesazhe tĂ« ParĂ«'; +$labels['longaclw'] = 'Mund tĂ« ndryshohen shenjat dhe fjalĂ«kyçet pĂ«r mesazhet, hiq tĂ« ParĂ« dhe tĂ« FshirĂ«'; +$labels['longacli'] = 'Mesazhet mund tĂ« shkruhen ose kopjohen nĂ« dosje'; +$labels['longaclp'] = 'Mesazhet mund tĂ« postohen te kjo dosje'; +$labels['longaclc'] = 'Dosjet mund tĂ« krijohen (ose riemĂ«rtohen) drejt e nĂ«n kĂ«tĂ« dosje'; +$labels['longaclk'] = 'Dosjet mund tĂ« krijohen (ose riemĂ«rtohen) drejt e nĂ«n kĂ«tĂ« dosje'; +$labels['longacld'] = 'Mund tĂ« ndryshohet shenja Mesazhe tĂ« FshirĂ«'; +$labels['longaclt'] = 'Mund tĂ« ndryshohet shenja Mesazhe tĂ« ParĂ«'; +$labels['longacle'] = 'Mesazhet mund tĂ« spastrohen'; +$labels['longaclx'] = 'Dosja mund tĂ« fshihet ose riemĂ«rtohet'; +$labels['longacla'] = 'Mund tĂ« ndryshohen tĂ« drejta hyrjeje te dosja'; +$labels['longacln'] = 'Mund tĂ« ndryshohen tejtĂ«dhĂ«na tĂ« pĂ«rbashkĂ«ta (shĂ«nime) mesazhesh'; +$labels['longaclfull'] = 'Kontroll i plotĂ«, pĂ«rfshi administrim dosjesh'; +$labels['longaclread'] = 'Dosja mund tĂ« hapet pĂ«r lexim'; +$labels['longaclwrite'] = 'Mesazheve mund t’u vihet shenjĂ«, shkruhen ose kopjohen te dosja'; +$labels['longacldelete'] = 'Mesazhet mund tĂ« fshihen'; +$labels['longaclother'] = 'TĂ« tjera tĂ« drejta hyrjesh'; +$labels['ariasummaryacltable'] = 'ListĂ« tĂ« drejtash hyrjeje'; +$labels['arialabelaclactions'] = 'Paraqit veprime'; +$labels['arialabelaclform'] = 'Formular tĂ« drejtash hyrjeje'; +$messages['deleting'] = 'Po fshihen tĂ« drejta hyrjeje…'; +$messages['saving'] = 'Po ruhen tĂ« drejtash hyrjeje…'; +$messages['updatesuccess'] = 'U ndryshuan me sukses tĂ« drejta hyrjeje'; +$messages['deletesuccess'] = 'U fshinĂ« me sukses tĂ« drejta hyrjeje'; +$messages['createsuccess'] = 'U shtuan me sukses tĂ« drejta hyrjeje'; +$messages['updateerror'] = 'I pazoti tĂ« pĂ«rditĂ«sojĂ« tĂ« drejta hyrjeje'; +$messages['deleteerror'] = 'I pazoti tĂ« fshijĂ« tĂ« drejta hyrjeje'; +$messages['createerror'] = 'I pazoti tĂ« shtojĂ« tĂ« drejta hyrjeje'; +$messages['deleteconfirm'] = 'Jeni i sigurt, doni t’i hiqni tĂ« drejta hyrjeje pĂ«rdoruesit(ve) tĂ« pĂ«rzgjedhur?'; +$messages['norights'] = 'Nuk janĂ« specifikuar tĂ« drejta!'; +$messages['nouser'] = 'Nuk Ă«shtĂ« specifikuar emĂ«r pĂ«rdoruesi!'; +?> diff --git a/data/web/rc/plugins/acl/localization/sr_CS.inc b/data/web/rc/plugins/acl/localization/sr_CS.inc new file mode 100644 index 00000000..38e335a3 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/sr_CS.inc @@ -0,0 +1,52 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Дељење'; +$labels['myrights'] = 'Права приŃŃ‚Ńпа'; +$labels['username'] = 'КориŃник:'; +$labels['advanced'] = 'Напредни режим'; +$labels['newuser'] = 'Đ”ĐľĐ´Đ°Ń ŃноŃ'; +$labels['editperms'] = 'Уреди дозволе'; +$labels['actions'] = 'Радње права приŃŃ‚Ńпа...'; +$labels['anyone'] = 'Сви кориŃници (било ко)'; +$labels['anonymous'] = 'Đ“ĐľŃти (анонимно)'; +$labels['identifier'] = 'Đдентификатор'; +$labels['acll'] = 'Потражи'; +$labels['aclr'] = 'Прочитане порŃке'; +$labels['acls'] = 'ОчŃĐ˛Đ°Ń Ńтање прегледаноŃти'; +$labels['acli'] = 'Убаци (ĐşĐľĐżĐ¸Ń€Đ°Ń Ń)'; +$labels['aclc'] = 'Направи потфаŃцикле'; +$labels['aclk'] = 'Направи потфаŃцикле'; +$labels['acld'] = 'ОбриŃи порŃке'; +$labels['aclt'] = 'ОбриŃи порŃке'; +$labels['aclx'] = 'ОбриŃи Ń„Đ°ŃциклŃ'; +$labels['acla'] = 'ĐдминиŃтрираŃ'; +$labels['aclfull'] = 'ĐźŃна контрола'; +$labels['aclother'] = 'ДрŃго'; +$labels['aclread'] = 'Читање'; +$labels['aclwrite'] = 'УпиŃ'; +$labels['acldelete'] = 'ОбриŃи'; +$labels['shortacll'] = 'Потражи'; +$labels['shortaclr'] = 'Прочитана'; +$labels['shortacls'] = 'Задржи'; +$labels['shortaclw'] = 'ПиŃи'; +$labels['shortacli'] = 'Убаци'; +$labels['shortaclother'] = 'ДрŃго'; +$labels['shortaclread'] = 'Читање'; +$labels['shortaclwrite'] = 'УпиŃ'; +$labels['shortacldelete'] = 'БриŃање'; +?> diff --git a/data/web/rc/plugins/acl/localization/sv_SE.inc b/data/web/rc/plugins/acl/localization/sv_SE.inc new file mode 100644 index 00000000..eebc39cc --- /dev/null +++ b/data/web/rc/plugins/acl/localization/sv_SE.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Utdelning'; +$labels['myrights'] = 'Ă…tkomsträttigheter'; +$labels['username'] = 'Användare:'; +$labels['advanced'] = 'Avancerat läge'; +$labels['newuser'] = 'Lägg till'; +$labels['editperms'] = 'Ă„ndra rättigheter'; +$labels['actions'] = 'Hantera ĂĄtkomsträttigheter...'; +$labels['anyone'] = 'Alla användare (vem som helst)'; +$labels['anonymous'] = 'Gäster (anonyma)'; +$labels['identifier'] = 'Identifikation'; +$labels['acll'] = 'Uppslagning'; +$labels['aclr'] = 'Läs meddelanden'; +$labels['acls'] = 'BehĂĄll status Läst'; +$labels['aclw'] = 'Skriv flaggor'; +$labels['acli'] = 'Infoga (kopiera in)'; +$labels['aclp'] = 'Posta'; +$labels['aclc'] = 'Skapa underkataloger'; +$labels['aclk'] = 'Skapa underkataloger'; +$labels['acld'] = 'Ta bort meddelanden'; +$labels['aclt'] = 'Ta bort meddelanden'; +$labels['acle'] = 'UtplĂĄna'; +$labels['aclx'] = 'Ta bort katalog'; +$labels['acla'] = 'Administrera'; +$labels['acln'] = 'Kommentera meddelanden'; +$labels['aclfull'] = 'Full kontroll'; +$labels['aclother'] = 'Ă–vrig'; +$labels['aclread'] = 'Läs'; +$labels['aclwrite'] = 'Skriv'; +$labels['acldelete'] = 'Ta bort'; +$labels['shortacll'] = 'Uppslagning'; +$labels['shortaclr'] = 'Läs'; +$labels['shortacls'] = 'BehĂĄll'; +$labels['shortaclw'] = 'Skriv'; +$labels['shortacli'] = 'Infoga'; +$labels['shortaclp'] = 'Posta'; +$labels['shortaclc'] = 'Skapa'; +$labels['shortaclk'] = 'Skapa'; +$labels['shortacld'] = 'Ta bort'; +$labels['shortaclt'] = 'Ta bort'; +$labels['shortacle'] = 'UtplĂĄna'; +$labels['shortaclx'] = 'Ta bort katalog'; +$labels['shortacla'] = 'Administrera'; +$labels['shortacln'] = 'Kommentera'; +$labels['shortaclother'] = 'Ă–vrig'; +$labels['shortaclread'] = 'Läs'; +$labels['shortaclwrite'] = 'Skriv'; +$labels['shortacldelete'] = 'Ta bort'; +$labels['longacll'] = 'Katalogen är synlig i listor och den kan prenumereras pĂĄ'; +$labels['longaclr'] = 'Katalogen kan öppnas för läsning'; +$labels['longacls'] = 'Meddelandeflagga Läst kan ändras'; +$labels['longaclw'] = 'Meddelandeflaggor och nyckelord kan ändras, undantaget Läst och Borttagen'; +$labels['longacli'] = 'Meddelanden kan skrivas eller kopieras till katalogen'; +$labels['longaclp'] = 'Meddelanden kan postas till denna katalog'; +$labels['longaclc'] = 'Kataloger kan skapas (eller ges annat namn) direkt i denna katalog'; +$labels['longaclk'] = 'Kataloger kan skapas (eller ges annat namn) direkt i denna katalog'; +$labels['longacld'] = 'Meddelandeflagga Borttaget kan ändras'; +$labels['longaclt'] = 'Meddelandeflagga Borttaget kan ändras'; +$labels['longacle'] = 'Meddelanden kan utplĂĄnas'; +$labels['longaclx'] = 'Katalogen kan tas bort eller ges annat namn'; +$labels['longacla'] = 'Katalogens ĂĄtkomsträttigheter kan ändras'; +$labels['longacln'] = 'Delad information om meddelanden (kommentarer) kan ändras'; +$labels['longaclfull'] = 'Full kontroll inklusive katalogadministration'; +$labels['longaclread'] = 'Katalogen kan öppnas för läsning'; +$labels['longaclwrite'] = 'Meddelanden kan märkas, skrivas eller kopieras till katalogen'; +$labels['longacldelete'] = 'Meddelanden kan tas bort'; +$labels['longaclother'] = 'Ă–vriga ĂĄtkomsträttigheter'; +$labels['ariasummaryacltable'] = 'Lista med ĂĄtkomsträttigheter'; +$labels['arialabelaclactions'] = 'Hantera listor'; +$labels['arialabelaclform'] = 'Formulär för ĂĄtkomsträttigheter'; +$messages['deleting'] = 'Tar bort ĂĄtkomsträttigheter...'; +$messages['saving'] = 'Sparar ĂĄtkomsträttigheter...'; +$messages['updatesuccess'] = 'Ă…tkomsträttigheterna är ändrade'; +$messages['deletesuccess'] = 'Ă…tkomsträttigheterna är borttagna'; +$messages['createsuccess'] = 'Ă…tkomsträttigheterna är tillagda'; +$messages['updateerror'] = 'Ă…tkomsträttigheterna kunde inte ändras'; +$messages['deleteerror'] = 'Ă…tkomsträttigheterna kunde inte tas bort'; +$messages['createerror'] = 'Ă…tkomsträttigheterna kunde inte läggas till'; +$messages['deleteconfirm'] = 'Vill du verkligen ta bort ĂĄtkomsträttigheterna för markerade användare?'; +$messages['norights'] = 'Inga ĂĄtkomsträttigheter angavs!'; +$messages['nouser'] = 'Inget användarnamn angavs!'; +?> diff --git a/data/web/rc/plugins/acl/localization/th_TH.inc b/data/web/rc/plugins/acl/localization/th_TH.inc new file mode 100644 index 00000000..2b346b62 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/th_TH.inc @@ -0,0 +1,49 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'ŕ¸ŕ¸˛ŕ¸Łŕąŕ¸Šŕ¸ŁŕąŚŕ¸‚้อมูล'; +$labels['myrights'] = 'สิทŕ¸ŕ¸´ŕąŚŕ¸ŕ¸˛ŕ¸Łŕą€ŕ¸‚้าŕąŕ¸Šŕą‰'; +$labels['username'] = 'ผู้ŕąŕ¸Šŕą‰ŕ¸‡ŕ¸˛ŕ¸™:'; +$labels['newuser'] = 'เพิŕąŕ¸ˇŕ¸Łŕ¸˛ŕ¸˘ŕ¸ŕ¸˛ŕ¸Ł'; +$labels['anyone'] = 'ผู้ŕąŕ¸Šŕą‰ŕ¸‡ŕ¸˛ŕ¸™ŕ¸—ั้งหมด (ŕąŕ¸„รŕ¸ŕą‡ŕą„ด้)'; +$labels['anonymous'] = 'ผู้เยีŕąŕ¸˘ŕ¸ˇŕ¸Šŕ¸ˇ (คนŕąŕ¸›ŕ¸Ąŕ¸ŕ¸«ŕ¸™ŕą‰ŕ¸˛)'; +$labels['aclr'] = 'อŕąŕ¸˛ŕ¸™ŕ¸‚้อความ'; +$labels['acli'] = 'ŕąŕ¸—รภ(คัดลอŕ¸ŕą„ปไว้)'; +$labels['aclp'] = 'โพสต์'; +$labels['aclc'] = 'สร้างโฟลเดอร์ยŕąŕ¸­ŕ¸˘'; +$labels['aclk'] = 'สร้างโฟลเดอร์ยŕąŕ¸­ŕ¸˘'; +$labels['acld'] = 'ลบข้อความ'; +$labels['aclt'] = 'ลบข้อความ'; +$labels['aclx'] = 'ลบโฟลเดอร์'; +$labels['aclother'] = 'อืŕąŕ¸™ŕą†'; +$labels['aclread'] = 'อŕąŕ¸˛ŕ¸™'; +$labels['aclwrite'] = 'เขียน'; +$labels['acldelete'] = 'ลบ'; +$labels['shortaclr'] = 'อŕąŕ¸˛ŕ¸™'; +$labels['shortaclw'] = 'เขียน'; +$labels['shortacli'] = 'ŕąŕ¸—รŕ¸'; +$labels['shortaclp'] = 'โพสต์'; +$labels['shortaclc'] = 'สร้าง'; +$labels['shortaclk'] = 'สร้าง'; +$labels['shortacld'] = 'ลบ'; +$labels['shortaclt'] = 'ลบ'; +$labels['shortaclx'] = 'ลบโฟลเดอร์'; +$labels['shortaclother'] = 'อืŕąŕ¸™ŕą†'; +$labels['shortaclread'] = 'อŕąŕ¸˛ŕ¸™'; +$labels['shortaclwrite'] = 'เขียน'; +$labels['shortacldelete'] = 'ลบ'; +?> diff --git a/data/web/rc/plugins/acl/localization/ti.inc b/data/web/rc/plugins/acl/localization/ti.inc new file mode 100644 index 00000000..1af3a192 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/ti.inc @@ -0,0 +1,66 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'ንኻáŤáŠĄ'; +$labels['myrights'] = 'áá°á‹á‰µ በዓ፠ዋና'; +$labels['username'] = 'በዓ፠ዋና'; +$labels['newuser'] = 'እታዎ ክውáµáŠ˝'; +$labels['actions'] = 'ንጥáŤá‰łá‰µ áብት ተጠá‰á›á‹­áŠá‰µ'; +$labels['anyone'] = 'ኩá‰áť በዓáŤá‰˛ ዋናታት(ዝኾአá°á‰Ą)'; +$labels['anonymous'] = 'ጋá»(á˝áť አáŤá‰¦)'; +$labels['identifier'] = 'áááá‹Ş'; +$labels['acll'] = 'አáá»'; +$labels['aclr'] = 'ዝተáŠá‰ á‰ˇ ááŤáŠĄáŠ˝á‰łá‰µ'; +$labels['acls'] = 'ተá«áŠĄá‹© ብዝብ፠ይጽናá•'; +$labels['aclw'] = 'áťáŤáŠ­á‰łá‰µ áťáŚ˝á“ፍ'; +$labels['acli'] = 'á¸áŚ‰áŚĄ(አብ..áንጎ አá‰áťáŚĄ)'; +$labels['aclp'] = 'ጠቅዕ'; +$labels['aclc'] = 'á›á…ደ᭠ፍጠá­'; +$labels['aclk'] = 'ክፍáá›á…ደ᭠ፍጠá­'; +$labels['acld'] = 'ááŤáŠĄáŠ˝á‰łá‰µ አጥፍእ'; +$labels['aclt'] = 'ááŤáŠĄáŠ˝á‰łá‰µ አጥፍእ'; +$labels['acle'] = 'ንá“ዋ᩠አጥፍእ'; +$labels['aclx'] = 'á›á…ደ᭠አጥፍእ'; +$labels['acla'] = 'ተቖáŤáŤ€á­'; +$labels['aclfull'] = 'áťá‰áŠĄ ቑጽፅá­'; +$labels['aclother'] = 'ካáŠáŠĄ'; +$labels['aclread'] = 'ከንብብ'; +$labels['aclwrite'] = 'ክጽá•áŤŤ'; +$labels['acldelete'] = 'ይጥáŤáŠ áá‹­'; +$labels['shortacll'] = 'አáá»'; +$labels['shortaclr'] = 'ዝተáŠá‰ á‰ '; +$labels['shortacls'] = 'ይፅናá•'; +$labels['shortaclw'] = 'ይጽá“ፍ'; +$labels['shortacli'] = 'á‹­á¸áŚŽáŚĄ'; +$labels['shortaclp'] = 'ይጠá‰á‹•'; +$labels['shortaclc'] = 'á‹­áŤáŚ á­'; +$labels['shortaclk'] = 'á‹­áŤáŚ á­'; +$labels['shortacld'] = 'ይጥፋእ'; +$labels['shortaclt'] = 'ይጥፋእ'; +$labels['shortacle'] = 'ንá“ዋ᩠ይጥፋእ'; +$labels['shortaclx'] = 'ዝጠፍእ á›á…á‹°á­'; +$labels['shortacla'] = 'ክቆáŤáŤ€á­'; +$labels['shortaclother'] = 'ካáŠáŠĄ'; +$labels['shortaclread'] = 'ከንብብ'; +$labels['shortaclwrite'] = 'ክጽá•áŤŤ'; +$labels['shortacldelete'] = 'ይጥፋእ'; +$labels['longaclr'] = 'á›á…ደ᭠ተኸፊቱ ክንበብ ይኽእáŤ'; +$labels['longacls'] = 'ተá«áŠĄá‹© ዝብ፠ááŤáŠĄáŠ˝á‰˛ á‹•á‹áť ክáá‹áŚĄ ይኽእáŤ'; +$labels['longaclw'] = 'á‹•á‹á›á‰µáŠ• áፍትᕠá‰á‹á‰µáŠ• ááŤáŠ˝á‰µá‰łá‰µ ክáŤá‹áŚˇ ይኽእá‰, ብá‹á‹­áŠ« ዝተá¨áŠŁá‹©áŠ• ዝጠፍኡን'; +$labels['longacli'] = 'ááŤáŠĄáŠ˝á‰˛ ናብዚ á›á…ደ᭠ክጽá“ፍ á‹á‹­ ክቕዳᕠይኽእáŤ'; +$labels['longaclp'] = 'ááŤáŠĄáŠ˝á‰˛ ናብዚ á›á…ደ᭠ክኣቱ ይኽእáŤ'; +?> diff --git a/data/web/rc/plugins/acl/localization/tr_TR.inc b/data/web/rc/plugins/acl/localization/tr_TR.inc new file mode 100644 index 00000000..b13ac855 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/tr_TR.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Paylaşım'; +$labels['myrights'] = 'EriĹźim Ä°zinleri'; +$labels['username'] = 'Kullanıcı:'; +$labels['advanced'] = 'GeliĹźmiĹź kip'; +$labels['newuser'] = 'Kayıt ekle'; +$labels['editperms'] = 'Ä°zinleri dĂĽzenle'; +$labels['actions'] = 'EriĹźim izinleri iĹźlemleri...'; +$labels['anyone'] = 'TĂĽm kullanıcılar (kim olursa)'; +$labels['anonymous'] = 'Ziyaretçiler (isimsiz)'; +$labels['identifier'] = 'Tanımlayıcı'; +$labels['acll'] = 'Arama'; +$labels['aclr'] = 'Ä°letileri oku'; +$labels['acls'] = 'Okundu durumu korunsun'; +$labels['aclw'] = 'Yazma iĹźaretleri'; +$labels['acli'] = 'Ekle (kopyala)'; +$labels['aclp'] = 'Gönder'; +$labels['aclc'] = 'Alt klasörler oluĹźtur'; +$labels['aclk'] = 'Alt klasörler oluĹźtur'; +$labels['acld'] = 'Ä°letileri sil'; +$labels['aclt'] = 'Ä°letileri sil'; +$labels['acle'] = 'Sil'; +$labels['aclx'] = 'KlasörĂĽ sil'; +$labels['acla'] = 'Yönet'; +$labels['acln'] = 'Ä°letilere not ekle'; +$labels['aclfull'] = 'Tam denetim'; +$labels['aclother'] = 'DiÄźer'; +$labels['aclread'] = 'Oku'; +$labels['aclwrite'] = 'Yaz'; +$labels['acldelete'] = 'Sil'; +$labels['shortacll'] = 'Arama'; +$labels['shortaclr'] = 'Oku'; +$labels['shortacls'] = 'Koru'; +$labels['shortaclw'] = 'Yaz'; +$labels['shortacli'] = 'Ekle'; +$labels['shortaclp'] = 'Gönder'; +$labels['shortaclc'] = 'OluĹźtur'; +$labels['shortaclk'] = 'OluĹźtur'; +$labels['shortacld'] = 'Sil'; +$labels['shortaclt'] = 'Sil'; +$labels['shortacle'] = 'Sil'; +$labels['shortaclx'] = 'KlasörĂĽ sil'; +$labels['shortacla'] = 'Yönet'; +$labels['shortacln'] = 'Not ekle'; +$labels['shortaclother'] = 'DiÄźer'; +$labels['shortaclread'] = 'Oku'; +$labels['shortaclwrite'] = 'Yaz'; +$labels['shortacldelete'] = 'Sil'; +$labels['longacll'] = 'Klasör listesinde görĂĽlebilir ve abone olunabilir'; +$labels['longaclr'] = 'Klasör okunmak ĂĽzere açılabilir'; +$labels['longacls'] = 'Ä°letilerin Okundu iĹźareti deÄźiĹźtirilebilir'; +$labels['longaclw'] = 'Okundu ve Silindi iĹźaretleri dışındaki iĹźaret ve anahtar sözcĂĽkler deÄźiĹźtirilebilir'; +$labels['longacli'] = 'Klasöre iletiler yazılabilir ya da kopyalanabilir'; +$labels['longaclp'] = 'Ä°letiler bu klasöre gönderilebilir'; +$labels['longaclc'] = 'Klasörler doÄźrudan bu klasör altında oluĹźturulabilir (ya da yeniden adlandırılabilir).'; +$labels['longaclk'] = 'Klasörler doÄźrudan bu klasör altında oluĹźturulabilir (ya da yeniden adlandırılabilir).'; +$labels['longacld'] = 'Ä°leti Silindi iĹźareti deÄźiĹźtirilebilir'; +$labels['longaclt'] = 'Ä°leti Silindi iĹźareti deÄźiĹźtirilebilir'; +$labels['longacle'] = 'Ä°letiler silinebilir'; +$labels['longaclx'] = 'Klasör silinebilir ya da yeniden adlandırılabilir'; +$labels['longacla'] = 'Klasör eriĹźim izinleri deÄźiĹźtirilebilir'; +$labels['longacln'] = 'Ä°letilerin paylaşılan ĂĽst verileri (notlar) deÄźiĹźtirilebilir'; +$labels['longaclfull'] = 'Klasör yönetimi dahil tam denetim'; +$labels['longaclread'] = 'Klasör okunmak ĂĽzere açılabilir'; +$labels['longaclwrite'] = 'Klasöre iletiler iĹźaretlenebilir, yazılabilir ya da kopyalanabilir'; +$labels['longacldelete'] = 'Ä°letiler silinebilir'; +$labels['longaclother'] = 'DiÄźer eriĹźim izinleri'; +$labels['ariasummaryacltable'] = 'EriĹźim izinleri listesi'; +$labels['arialabelaclactions'] = 'Ä°Ĺźlem listesi'; +$labels['arialabelaclform'] = 'EriĹźim izinleri formu'; +$messages['deleting'] = 'EriĹźim izinleri siliniyor...'; +$messages['saving'] = 'EriĹźim izinleri kaydediliyor...'; +$messages['updatesuccess'] = 'EriĹźim izinleri deÄźiĹźtirildi'; +$messages['deletesuccess'] = 'EriĹźim izinleri silindi'; +$messages['createsuccess'] = 'EriĹźim izinleri eklendi'; +$messages['updateerror'] = 'EriĹźim izinleri gĂĽncellenemedi'; +$messages['deleteerror'] = 'EriĹźim izinleri silinemedi'; +$messages['createerror'] = 'EriĹźim izinleri eklenemedi'; +$messages['deleteconfirm'] = 'SeçilmiĹź kullanıcılar için eriĹźim izinlerini silmek istediÄźinize emin misiniz?'; +$messages['norights'] = 'Herhangi bir izin belirtilmemiĹź!'; +$messages['nouser'] = 'Herhangi bir kullanıcı belirtilmemiĹź!'; +?> diff --git a/data/web/rc/plugins/acl/localization/tzl.inc b/data/web/rc/plugins/acl/localization/tzl.inc new file mode 100644 index 00000000..a4841200 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/tzl.inc @@ -0,0 +1,24 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['username'] = 'Uçeir:'; +$labels['anonymous'] = 'Gästs (anonimös)'; +$labels['acldelete'] = 'Zeletarh'; +$labels['shortacld'] = 'Zeletarh'; +$labels['shortaclt'] = 'Zeletarh'; +$labels['shortacldelete'] = 'Zeletarh'; +?> diff --git a/data/web/rc/plugins/acl/localization/uk_UA.inc b/data/web/rc/plugins/acl/localization/uk_UA.inc new file mode 100644 index 00000000..4b865486 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/uk_UA.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'ПоŃирення'; +$labels['myrights'] = 'Права Đ´ĐľŃŃ‚ŃĐżŃ'; +$labels['username'] = 'КориŃŃ‚Ńвач:'; +$labels['advanced'] = 'РозŃирений режим'; +$labels['newuser'] = 'Додати запиŃ'; +$labels['editperms'] = 'РедагŃвати дозволи'; +$labels['actions'] = 'Дії Đ· правами Đ´ĐľŃŃ‚Ńпх'; +$labels['anyone'] = 'ĐŁŃŃ– кориŃŃ‚Ńвачі (бŃĐ´ŃŚ-Ń…Ń‚Đľ)'; +$labels['anonymous'] = 'Đ“ĐľŃŃ‚Ń– (аноніми)'; +$labels['identifier'] = 'Ідентифікатор'; +$labels['acll'] = 'ПоŃŃĐş'; +$labels['aclr'] = 'Прочитані повідомлення'; +$labels['acls'] = 'Зберегти ŃŃ‚Đ°Ń‚ŃŃ Â«ĐźŃ€ĐľŃ‡Đ¸Ń‚Đ°Đ˝ĐľÂ»'; +$labels['aclw'] = 'Прапорці напиŃання'; +$labels['acli'] = 'Đ’Ńтавити (Копіювати в)'; +$labels['aclp'] = 'ДопиŃ'; +$labels['aclc'] = 'Створити підтеки'; +$labels['aclk'] = 'Створити підтеки'; +$labels['acld'] = 'ВилŃчити повідомлення'; +$labels['aclt'] = 'ВилŃчити повідомлення'; +$labels['acle'] = 'ВикреŃлити'; +$labels['aclx'] = 'ВилŃчити текŃ'; +$labels['acla'] = 'ĐдмініŃŃ‚Ń€Ńвати'; +$labels['acln'] = 'ĐнотŃвати повідомлення'; +$labels['aclfull'] = 'Повний контроль'; +$labels['aclother'] = 'ІнŃе'; +$labels['aclread'] = 'Читати'; +$labels['aclwrite'] = 'ПиŃати'; +$labels['acldelete'] = 'ВилŃчити'; +$labels['shortacll'] = 'ПоŃŃĐş'; +$labels['shortaclr'] = 'Читати'; +$labels['shortacls'] = 'ЗалиŃити'; +$labels['shortaclw'] = 'ПиŃати'; +$labels['shortacli'] = 'Đ’Ńтавити'; +$labels['shortaclp'] = 'ДопиŃати'; +$labels['shortaclc'] = 'Створити'; +$labels['shortaclk'] = 'Створити'; +$labels['shortacld'] = 'ВилŃчити'; +$labels['shortaclt'] = 'ВилŃчити'; +$labels['shortacle'] = 'ВикреŃлити'; +$labels['shortaclx'] = 'ВилŃчити текŃ'; +$labels['shortacla'] = 'ĐдмініŃŃ‚Ń€Ńвати'; +$labels['shortacln'] = 'ĐнотŃвати'; +$labels['shortaclother'] = 'ІнŃе'; +$labels['shortaclread'] = 'Читати'; +$labels['shortaclwrite'] = 'ПиŃати'; +$labels['shortacldelete'] = 'ВилŃчити'; +$labels['longacll'] = 'Тека видима Ń ŃпиŃках Ń– на неї можна підпиŃатиŃŃŚ'; +$labels['longaclr'] = 'Đ˘ĐµĐşŃ ĐĽĐľĐ¶Đ˝Đ° відкрити для читання'; +$labels['longacls'] = 'Прапорець «Прочитано» на повідомленнях можна змінити'; +$labels['longaclw'] = 'Прапорці Ń– ключові Ńлова повідомлень можна змінити, окрім «Прочитано» Ń– «ВилŃчено»'; +$labels['longacli'] = 'Повідомлення можна запиŃати або копіювати Ń Ń‚ĐµĐşŃ'; +$labels['longaclp'] = 'Повідомлення можна ĐżŃблікŃвати в цю текŃ'; +$labels['longaclc'] = 'Теки можна Ńтворювати (чи перейменовŃвати) прямо під цією текою'; +$labels['longaclk'] = 'Теки можна Ńтворювати (чи перейменовŃвати) прямо під цією текою'; +$labels['longacld'] = 'Прапорець «ВилŃчено» на повідомленнях можна змінити'; +$labels['longaclt'] = 'Прапорець «ВилŃчено» на повідомленнях можна змінити'; +$labels['longacle'] = 'Повідомлення можна викреŃлити'; +$labels['longaclx'] = 'Đ˘ĐµĐşŃ ĐĽĐľĐ¶Đ˝Đ° вилŃчити чи перейменŃвати'; +$labels['longacla'] = 'Права Đ´ĐľŃŃ‚ŃĐżŃ Đ´Đľ теки можна змінити'; +$labels['longacln'] = 'ПоŃирені метадані (анотації) повідомлень можна змінити'; +$labels['longaclfull'] = 'Повний контроль, включно Đ· адмініŃŃ‚Ń€Ńванням тек'; +$labels['longaclread'] = 'Đ˘ĐµĐşŃ ĐĽĐľĐ¶Đ˝Đ° відкрити для читання'; +$labels['longaclwrite'] = 'Повідомлення можна позначити, запиŃати або копіювати Ń Ń‚ĐµĐşŃ'; +$labels['longacldelete'] = 'Повідомлення можна вилŃчити'; +$labels['longaclother'] = 'ІнŃŃ– права Đ´ĐľŃŃ‚ŃĐżŃ'; +$labels['ariasummaryacltable'] = 'СпиŃок прав Đ´ĐľŃŃ‚ŃĐżŃ'; +$labels['arialabelaclactions'] = 'Перелічити Đ´Ń–Ń—'; +$labels['arialabelaclform'] = 'Форма прав Đ´ĐľŃŃ‚ŃĐżŃ'; +$messages['deleting'] = 'ВилŃчення прав Đ´ĐľŃŃ‚Ńпх'; +$messages['saving'] = 'Збереження прав Đ´ĐľŃŃ‚Ńпх'; +$messages['updatesuccess'] = 'Права Đ´ĐľŃŃ‚ŃĐżŃ ŃŃпіŃно змінені'; +$messages['deletesuccess'] = 'Права Đ´ĐľŃŃ‚ŃĐżŃ ŃŃпіŃно вилŃчені'; +$messages['createsuccess'] = 'Права Đ´ĐľŃŃ‚ŃĐżŃ ŃŃпіŃно додані'; +$messages['updateerror'] = 'Не вдалоŃŃŹ оновити права Đ´ĐľŃŃ‚ŃĐżŃ'; +$messages['deleteerror'] = 'Не вдалоŃŃŹ вилŃчити права Đ´ĐľŃŃ‚ŃĐżŃ'; +$messages['createerror'] = 'Не вдалоŃŃŹ додати права Đ´ĐľŃŃ‚ŃĐżŃ'; +$messages['deleteconfirm'] = 'Ви Đ´Ń–ĐąŃно хочете вилŃчити права Đ´ĐľŃŃ‚ŃĐżŃ ĐľĐ±Ń€Đ°Đ˝ĐľĐłĐľ кориŃŃ‚Ńвача(-ів)?'; +$messages['norights'] = 'Жодних прав не вказано!'; +$messages['nouser'] = 'Жодного імені кориŃŃ‚Ńвача не вказано!'; +?> diff --git a/data/web/rc/plugins/acl/localization/vi_VN.inc b/data/web/rc/plugins/acl/localization/vi_VN.inc new file mode 100644 index 00000000..c6ce2fd4 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/vi_VN.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'Chia sáş»'; +$labels['myrights'] = 'Quyá»n truy cáş­p'; +$labels['username'] = 'Người dĂąng:'; +$labels['advanced'] = 'Cháşż Ä‘á»™ tĂ­nh nÄng cao hơn'; +$labels['newuser'] = 'ThĂŞm bĂ i viáşżt'; +$labels['editperms'] = 'Sá»­a đổi quyá»n sá»­ dụng'; +$labels['actions'] = 'Các thao tác quyá»n truy cáş­p'; +$labels['anyone'] = 'Tất cả người dĂąng (bất kỳ ai)'; +$labels['anonymous'] = 'Khách (náş·c danh)'; +$labels['identifier'] = 'Äịnh danh'; +$labels['acll'] = 'Tìm kiáşżm'; +$labels['aclr'] = 'Äọc thĆ°'; +$labels['acls'] = 'Giữ trạng thái Ä‘ĂŁ xem qua'; +$labels['aclw'] = 'Cờ đánh dấu cho mục viáşżt'; +$labels['acli'] = 'CheĚ€n thĂŞm (sao cheĚp vaĚ€o)'; +$labels['aclp'] = 'ÄÄng bĂ i'; +$labels['aclc'] = 'Tạo giữ liệu con'; +$labels['aclk'] = 'Tạo giữ liệu con'; +$labels['acld'] = 'XĂła thĆ°'; +$labels['aclt'] = 'XĂła thĆ°'; +$labels['acle'] = 'Thải bỏ'; +$labels['aclx'] = 'XĂła giữ liệu'; +$labels['acla'] = 'Quản lĂ˝'; +$labels['acln'] = 'ThĂ´ng tin chĂş thĂ­ch'; +$labels['aclfull'] = 'Quản lĂ˝ toĂ n bá»™'; +$labels['aclother'] = 'Loại khác'; +$labels['aclread'] = 'Äọc'; +$labels['aclwrite'] = 'Viáşżt'; +$labels['acldelete'] = 'Xoá'; +$labels['shortacll'] = 'Tìm kiáşżm'; +$labels['shortaclr'] = 'Äọc'; +$labels['shortacls'] = 'Giữ'; +$labels['shortaclw'] = 'Viáşżt'; +$labels['shortacli'] = 'Chèn'; +$labels['shortaclp'] = 'ÄÄng bĂ i'; +$labels['shortaclc'] = 'Tạo má»›i'; +$labels['shortaclk'] = 'Tạo má»›i'; +$labels['shortacld'] = 'Xoá'; +$labels['shortaclt'] = 'Xoá'; +$labels['shortacle'] = 'Thải bỏ'; +$labels['shortaclx'] = 'Giữ liệu được xĂła'; +$labels['shortacla'] = 'Quản lĂ˝'; +$labels['shortacln'] = 'ChĂş thĂ­ch'; +$labels['shortaclother'] = 'Loại khác'; +$labels['shortaclread'] = 'Äọc'; +$labels['shortaclwrite'] = 'Viáşżt'; +$labels['shortacldelete'] = 'Xoá'; +$labels['longacll'] = 'ThĆ° mục Ä‘ĂŁ được hiá»n thị vĂ  cĂł thá» Ä‘Äng kĂ˝ sá»­ dụng'; +$labels['longaclr'] = 'ThĆ° mục cĂł thỠđược mở đỠđọc'; +$labels['longacls'] = 'Cờ đánh dấu thĆ° Ä‘ĂŁ xem qua cĂł thá» thay đổi'; +$labels['longaclw'] = 'Cờ thĆ° vĂ  từ khĂła cĂł thá» thay đổi, ngoại trừ Ä‘ĂŁ xem qua vĂ  bị xĂła'; +$labels['longacli'] = 'ThĆ° cĂł thỠđược ghi hoáş·c sao chĂ©p vĂ o giữ liệu'; +$labels['longaclp'] = 'ThĆ° cĂł thá» bỏ vĂ o trong giữ liệu nĂ y'; +$labels['longaclc'] = 'Các giữ liệu cĂł thỠđược tạo (hoáş·c Ä‘áş·t lại tĂŞn) trá»±c tiáşżp dĆ°á»›i giữ liệu nĂ y'; +$labels['longaclk'] = 'Các giữ liệu cĂł thỠđược tạo (hoáş·c Ä‘áş·t lại tĂŞn) trá»±c tiáşżp dĆ°á»›i giữ liệu nĂ y'; +$labels['longacld'] = 'Cờ đánh dấu thĆ° xĂła cĂł thá» thay đổi'; +$labels['longaclt'] = 'Cờ đánh dấu thĆ° xĂła cĂł thá» thay đổi'; +$labels['longacle'] = 'ThĆ° cĂł thá» thải bỏ'; +$labels['longaclx'] = 'Giữ liệu cĂł thá» xĂła được hoáş·c Ä‘áş·t lại tĂŞn'; +$labels['longacla'] = 'QuyĂŞn truy cáş­p giữ liệu cĂł thá» thay đổi'; +$labels['longacln'] = 'Dữ liệu thĂ´ng tin (chĂş thĂ­ch) của thĆ° cĂł thá» thay đổi'; +$labels['longaclfull'] = 'Quản lĂ˝ toĂ n bá»™ bao gồm cả sá»± thi hĂ nh giữ liệu'; +$labels['longaclread'] = 'Giữ liệu cĂł thỠđược mở đỠđọc'; +$labels['longaclwrite'] = 'ThĆ° cĂł thỠđược đánh dấu, ghi hoÄc sao chĂ©p vĂ o giữ liệu'; +$labels['longacldelete'] = 'ThĆ° cĂł thá» bị xĂła'; +$labels['longaclother'] = 'Quyá»n truy cáş­p khác'; +$labels['ariasummaryacltable'] = 'Danh sách quyá»n truy cáş­p'; +$labels['arialabelaclactions'] = 'Danh sách hĂ nh Ä‘á»™ng'; +$labels['arialabelaclform'] = 'Bảng khai quyá»n truy cáş­p'; +$messages['deleting'] = 'XĂła quyá»n truy cáş­p...'; +$messages['saving'] = 'LĆ°u quyá»n truy cáş­p...'; +$messages['updatesuccess'] = 'Thay đổi quyá»n truy cáş­p thĂ nh cĂ´ng...'; +$messages['deletesuccess'] = 'XĂła quyá»n truy cáş­p thĂ nh cĂ´ng...'; +$messages['createsuccess'] = 'ThĂŞm quyá»n truy cáş­p thĂ nh cĂ´ng...'; +$messages['updateerror'] = 'KhĂ´ng thá» cáş­p nháş­t quyá»n truy cáş­p'; +$messages['deleteerror'] = 'KhĂ´ngthá» xĂła quyá»n truy cáş­p'; +$messages['createerror'] = 'KhĂ´ng thá» thĂŞm quyá»n truy cáş­p'; +$messages['deleteconfirm'] = 'Bạn cĂł chắc lĂ  muốn xĂła bỏ quyá»n truy cáş­p của người dĂąng được chọn?'; +$messages['norights'] = 'ChĆ°a cĂł quyá»n nĂ o được chỉ định!'; +$messages['nouser'] = 'ChĆ°a cĂł tĂŞn truy nháş­p được chỉ định!'; +?> diff --git a/data/web/rc/plugins/acl/localization/zh_CN.inc b/data/web/rc/plugins/acl/localization/zh_CN.inc new file mode 100644 index 00000000..ea6a83c8 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/zh_CN.inc @@ -0,0 +1,98 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = '共享'; +$labels['myrights'] = '访问ćťé™'; +$labels['username'] = '用ć·ďĽš'; +$labels['advanced'] = 'é«çş§ć¨ˇĺĽŹ'; +$labels['newuser'] = '新增条目'; +$labels['editperms'] = '编辑ćťé™'; +$labels['actions'] = 'ćťé™č®ľç˝®...'; +$labels['anyone'] = '所有用ć·(任何人)'; +$labels['anonymous'] = '来宾(匿ĺŤ)'; +$labels['identifier'] = '标识符'; +$labels['acll'] = '查找'; +$labels['aclr'] = '读取ć¶ćŻ'; +$labels['acls'] = 'äżťĺ­ĺ·˛čŻ»çŠ¶ć€'; +$labels['aclw'] = '写入标志'; +$labels['acli'] = '插入(复ĺ¶č‡ł)'; +$labels['aclp'] = '发é€'; +$labels['aclc'] = 'ĺ›ĺ»şĺ­ć–‡ä»¶ĺ¤ą'; +$labels['aclk'] = 'ĺ›ĺ»şĺ­ć–‡ä»¶ĺ¤ą'; +$labels['acld'] = 'ĺ é™¤ć¶ćŻ'; +$labels['aclt'] = 'ĺ é™¤ć¶ćŻ'; +$labels['acle'] = '清除'; +$labels['aclx'] = 'ĺ é™¤ć–‡ä»¶ĺ¤ą'; +$labels['acla'] = '管ç†'; +$labels['acln'] = '注释ć¶ćŻ'; +$labels['aclfull'] = 'ĺ…¨é¨ćŽ§ĺ¶'; +$labels['aclother'] = 'ĺ…¶ĺ®'; +$labels['aclread'] = '读取'; +$labels['aclwrite'] = '写入'; +$labels['acldelete'] = 'ĺ é™¤'; +$labels['shortacll'] = '查找'; +$labels['shortaclr'] = '读取'; +$labels['shortacls'] = 'äżťĺ­'; +$labels['shortaclw'] = '写入'; +$labels['shortacli'] = '插入'; +$labels['shortaclp'] = '发é€'; +$labels['shortaclc'] = '新建'; +$labels['shortaclk'] = '新建'; +$labels['shortacld'] = 'ĺ é™¤'; +$labels['shortaclt'] = 'ĺ é™¤'; +$labels['shortacle'] = '清除'; +$labels['shortaclx'] = 'ĺ é™¤ć–‡ä»¶ĺ¤ą'; +$labels['shortacla'] = '管ç†'; +$labels['shortacln'] = '注释'; +$labels['shortaclother'] = '其他'; +$labels['shortaclread'] = '读取'; +$labels['shortaclwrite'] = '写入'; +$labels['shortacldelete'] = 'ĺ é™¤'; +$labels['longacll'] = '该文件夹在ĺ—表上可č§ä¸”可被订é…'; +$labels['longaclr'] = '该文件夹可被打开é…读'; +$labels['longacls'] = '已读ć¶ćŻć ‡čŻ†ĺŹŻä»Ąć”ąĺŹ'; +$labels['longaclw'] = '除已读和ĺ é™¤čˇ¨ç¤şĺ¤–其他ć¶ćŻć ‡čŻ†ĺŹŻä»Ąć”ąĺŹ'; +$labels['longacli'] = 'ć¶ćŻĺŹŻč˘«ć ‡č®°ďĽŚć’°ĺ†™ć–复ĺ¶č‡łć–‡ä»¶ĺ¤ąä¸­'; +$labels['longaclp'] = 'ć¶ćŻĺŹŻä»ĄĺŹ‘ĺ°ć­¤ć–‡ä»¶ĺ¤ą'; +$labels['longaclc'] = '文件夹可被ĺ›ĺ»ş(ć–改ĺŤ)于现有目录下'; +$labels['longaclk'] = '文件夹可直接在此目录下ĺ›ĺ»şďĽć–改ĺŤďĽ‰'; +$labels['longacld'] = 'ć¶ćŻĺ·˛ĺ é™¤ć ‡čŻ†ĺŹŻä»Ąć”ąĺŹ'; +$labels['longaclt'] = 'ć¶ćŻĺ·˛ĺ é™¤ć ‡čŻ†ĺŹŻä»Ąć”ąĺŹ'; +$labels['longacle'] = 'ć¶ćŻĺŹŻč˘«ć¸…除'; +$labels['longaclx'] = '该文件夹可被ĺ é™¤ć–重命ĺŤ'; +$labels['longacla'] = '文件夹访问ćťé™ĺŹŻč˘«äż®ć”ą'; +$labels['longacln'] = 'ć¶ćŻĺ…±äş«ĺ…数据ďĽćł¨é‡ŠďĽ‰ĺŹŻä»Ąć”ąĺŹ'; +$labels['longaclfull'] = '完全控ĺ¶ďĽŚĺŚ…括文件夹管ç†'; +$labels['longaclread'] = '该文件夹可被打开é…读'; +$labels['longaclwrite'] = 'ć¶ćŻĺŹŻč˘«ć ‡č®°ďĽŚć’°ĺ†™ć–复ĺ¶č‡łć–‡ä»¶ĺ¤ąä¸­'; +$labels['longacldelete'] = '信ćŻĺŹŻč˘«ĺ é™¤'; +$labels['longaclother'] = '其他访问ćťé™'; +$labels['ariasummaryacltable'] = '访问ćťé™ĺ—表'; +$labels['arialabelaclactions'] = 'ĺ—出操作'; +$labels['arialabelaclform'] = '访问ćťé™ä»Ž'; +$messages['deleting'] = 'ĺ é™¤č®żé—®ćťé™ä¸­â€¦'; +$messages['saving'] = 'äżťĺ­č®żé—®ćťé™ä¸­â€¦'; +$messages['updatesuccess'] = 'ć功修改访问ćťé™'; +$messages['deletesuccess'] = 'ć功ĺ é™¤č®żé—®ćťé™'; +$messages['createsuccess'] = 'ć功添加访问ćťé™'; +$messages['updateerror'] = '无法更新访问ćťé™'; +$messages['deleteerror'] = 'ć— ćł•ĺ é™¤č®żé—®ćťé™'; +$messages['createerror'] = '无法添加访问ćťé™'; +$messages['deleteconfirm'] = '您确定č¦ç§»é™¤é€‰ä¸­ç”¨ć·çš„访问ćťé™ĺ—?'; +$messages['norights'] = '没有已指定的ćťé™!'; +$messages['nouser'] = '没有已指定的用ć·ĺŤ!'; +?> diff --git a/data/web/rc/plugins/acl/localization/zh_TW.inc b/data/web/rc/plugins/acl/localization/zh_TW.inc new file mode 100644 index 00000000..d9c5d977 --- /dev/null +++ b/data/web/rc/plugins/acl/localization/zh_TW.inc @@ -0,0 +1,89 @@ +.inc | + | | + | Localization file of the Roundcube Webmail ACL plugin | + | Copyright (C) 2012-2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-acl/ +*/ +$labels['sharing'] = 'ĺ†äş«'; +$labels['myrights'] = 'ĺ­ĺŹ–權é™'; +$labels['username'] = '使用者:'; +$labels['newuser'] = '新增項目'; +$labels['actions'] = '權é™č¨­ĺ®š'; +$labels['anyone'] = '所有使用者 (anyone)'; +$labels['anonymous'] = '訪客 (anonymous)'; +$labels['identifier'] = 'č­ĺĄ'; +$labels['acll'] = '尋找'; +$labels['aclr'] = '讀取訊ćŻ'; +$labels['acls'] = 'äżťćŚä¸Šç·šç‹€ć…‹'; +$labels['aclw'] = '寫入標幟'; +$labels['acli'] = '插入(複製ĺ°é€™čŁˇ)'; +$labels['aclp'] = '發表'; +$labels['aclc'] = '建立ĺ­čł‡ć–™ĺ¤ľ'; +$labels['aclk'] = '建立ĺ­čł‡ć–™ĺ¤ľ'; +$labels['acld'] = 'ĺŞé™¤č¨ŠćŻ'; +$labels['aclt'] = 'ĺŞé™¤č¨ŠćŻ'; +$labels['acle'] = 'ĺŞĺŽ»'; +$labels['aclx'] = 'ĺŞé™¤čł‡ć–™ĺ¤ľ'; +$labels['acla'] = '管ç†č€…'; +$labels['aclfull'] = '完全控ĺ¶'; +$labels['aclother'] = 'ĺ…¶ĺ®'; +$labels['aclread'] = '讀取'; +$labels['aclwrite'] = '寫入'; +$labels['acldelete'] = 'ĺŞé™¤'; +$labels['shortacll'] = '尋找'; +$labels['shortaclr'] = '讀取'; +$labels['shortacls'] = 'äżťĺ­'; +$labels['shortaclw'] = '寫入'; +$labels['shortacli'] = '插入'; +$labels['shortaclp'] = '發表'; +$labels['shortaclc'] = '建立'; +$labels['shortaclk'] = '建立'; +$labels['shortacld'] = 'ĺŞé™¤'; +$labels['shortaclt'] = 'ĺŞé™¤'; +$labels['shortacle'] = 'ĺŞĺŽ»'; +$labels['shortaclx'] = '資料夾ĺŞé™¤'; +$labels['shortacla'] = '管ç†č€…'; +$labels['shortaclother'] = 'ĺ…¶ĺ®'; +$labels['shortaclread'] = '讀取'; +$labels['shortaclwrite'] = '寫入'; +$labels['shortacldelete'] = 'ĺŞé™¤'; +$labels['longacll'] = '此資料夾權é™ĺŹŻä»Ąč¨‚閱和瀏覽'; +$labels['longaclr'] = '資料夾č˝č˘«ć‰“é–‹č‡č®€ĺŹ–'; +$labels['longacls'] = 'č˝äż®ć”ąč¨ŠćŻć¨™ĺąź'; +$labels['longaclw'] = '內容旗標和關鍵字可以變更,不包ĺ«ĺ·˛ćŞ˘č¦–ĺ’ŚĺŞé™¤çš„'; +$labels['longacli'] = '訊ćŻč˝ĺŻ«ĺ…Ąć–複製ĺ°čł‡ć–™ĺ¤ľ'; +$labels['longaclp'] = '訊ćŻč˝č˘«ćŠ•éžĺ°é€™ĺ€‹čł‡ć–™ĺ¤ľ'; +$labels['longaclc'] = '這個資料夾之下可以建ĺ­čł‡ć–™ĺ¤ľ(ć–重新命ĺŤďĽ‰'; +$labels['longaclk'] = '這個資料夾之下可以建ĺ­čł‡ć–™ĺ¤ľ(ć–重新命ĺŤďĽ‰'; +$labels['longacld'] = 'č˝äż®ć”ąč¨ŠćŻĺŞé™¤ć¨™ĺąź'; +$labels['longaclt'] = 'č˝äż®ć”ąč¨ŠćŻĺŞé™¤ć¨™ĺąź'; +$labels['longacle'] = 'č˝ćŠąé™¤č¨ŠćŻ'; +$labels['longaclx'] = '資料夾č˝č˘«ĺŞé™¤ć–重新命ĺŤ'; +$labels['longacla'] = 'č˝č®Šć›´čł‡ć–™ĺ¤ľć¬Šé™'; +$labels['longaclfull'] = '完全控ĺ¶ĺŚ…ĺ«čł‡ć–™ĺ¤ľç®ˇç†'; +$labels['longaclread'] = '資料夾č˝č˘«ć‰“é–‹č‡č®€ĺŹ–'; +$labels['longaclwrite'] = '信件可以被標č¨ă€ç·¨ĺŻ«ć–複製ĺ°čł‡ć–™ĺ¤ľ'; +$labels['longacldelete'] = '訊ćŻč˝č˘«ĺŞé™¤'; +$messages['deleting'] = 'ĺŞé™¤ć¬Šé™...'; +$messages['saving'] = '儲ĺ­ć¬Šé™...'; +$messages['updatesuccess'] = '權é™č®Šć›´ĺ®Ść'; +$messages['deletesuccess'] = '權é™ĺŞé™¤ĺ®Ść'; +$messages['createsuccess'] = '權é™ć–°ĺ˘žĺ®Ść'; +$messages['updateerror'] = '無法更新權é™'; +$messages['deleteerror'] = '無法ĺŞé™¤ć¬Šé™'; +$messages['createerror'] = '無法新增權é™'; +$messages['deleteconfirm'] = '您確定č¦ĺŞé™¤ć‰€é¸ĺŹ–使用者的權é™ĺ—Ž?'; +$messages['norights'] = '沒有指定任何權é™'; +$messages['nouser'] = '沒有指定用ć¶ĺŤç¨±'; +?> diff --git a/data/web/rc/plugins/acl/skins/classic/acl.css b/data/web/rc/plugins/acl/skins/classic/acl.css new file mode 100644 index 00000000..977432a2 --- /dev/null +++ b/data/web/rc/plugins/acl/skins/classic/acl.css @@ -0,0 +1,98 @@ +#aclmanager +{ + position: relative; + border: 1px solid #999; + min-height: 302px; +} + +#aclcontainer +{ + overflow-x: auto; +} + +#acltable +{ + width: 100%; + border-collapse: collapse; + background-color: #F9F9F9; +} + +#acltable td +{ + width: 1%; + white-space: nowrap; +} + +#acltable thead td +{ + padding: 0 4px 0 2px; +} + +#acltable tbody td +{ + text-align: center; + padding: 2px; + border-bottom: 1px solid #999999; + cursor: default; +} + +#acltable tbody td.user +{ + width: 96%; + text-align: left; + overflow: hidden; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; +} + +#acltable tbody td.partial +{ + background: url(images/partial.png?v=05d7.389) center no-repeat; +} + +#acltable tbody td.enabled +{ + background: url(images/enabled.png?v=9d9a.674) center no-repeat; +} + +#acltable tr.selected td +{ + color: #FFFFFF; + background-color: #CC3333; +} + +#acltable tr.unfocused td +{ + color: #FFFFFF; + background-color: #929292; +} + +#acladvswitch +{ + position: absolute; + right: 4px; + text-align: right; + line-height: 22px; +} + +#acladvswitch input +{ + vertical-align: middle; +} + +#acladvswitch span +{ + display: block; +} + +#aclform +{ + display: none; +} + +#aclform div +{ + padding: 0; + text-align: center; + clear: both; +} diff --git a/data/web/rc/plugins/acl/skins/classic/acl.min.css b/data/web/rc/plugins/acl/skins/classic/acl.min.css new file mode 100644 index 00000000..8faea4f2 --- /dev/null +++ b/data/web/rc/plugins/acl/skins/classic/acl.min.css @@ -0,0 +1 @@ +#aclmanager{position:relative;border:1px solid #999;min-height:302px}#aclcontainer{overflow-x:auto}#acltable{width:100%;border-collapse:collapse;background-color:#f9f9f9}#acltable td{width:1%;white-space:nowrap}#acltable thead td{padding:0 4px 0 2px}#acltable tbody td{text-align:center;padding:2px;border-bottom:1px solid #999;cursor:default}#acltable tbody td.user{width:96%;text-align:left;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis}#acltable tbody td.partial{background:url(images/partial.png?v=05d7.389) center no-repeat}#acltable tbody td.enabled{background:url(images/enabled.png?v=9d9a.674) center no-repeat}#acltable tr.selected td{color:#fff;background-color:#c33}#acltable tr.unfocused td{color:#fff;background-color:#929292}#acladvswitch{position:absolute;right:4px;text-align:right;line-height:22px}#acladvswitch input{vertical-align:middle}#acladvswitch span{display:block}#aclform{display:none}#aclform div{padding:0;text-align:center;clear:both} \ No newline at end of file diff --git a/data/web/rc/plugins/acl/skins/classic/images/enabled.png b/data/web/rc/plugins/acl/skins/classic/images/enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..98215f68ccf339c5c27541c3b34c08abc75073e0 GIT binary patch literal 674 zcmV;T0$u%yP)f+_U_u=*df?? zp&$Yg2q7duDN;oWJp~0yK|@DDfsptCBt(JW3+SPtqM)Ne2%1O`5Q5+&%EJQ1-Zi$@ z`<@rGYX~@Wa7Wsm*_m_BopbLJDJA|j^6A5Qy9CJvQW~O08tWe#GiJ%SpM>ytN2#FKRYXk6ph?HOe9vd%Tu1$|!wHxhi8b+&lX z(rE`zJdf^DrUjG7W^Wrt0j$3XJx?$(HM7hT5(WYL>h_{%drkL7iX*ApU!GssnmB%R z*0ichIRR)09yGy%HU!h5X;nz3sig9V`W-mUmUI64&UmK$?p1xk*>0@FZWmw?n708Q ztGP(Id@y$%g8GWnN7uINTRZK={j`@ZookI)=2B~OW0ggDu zbyFt`XHQS9{WdH$iXcdW_@39^W0F*|x`UIkM}W~Xv0 zh^iyerxmD(9Qu$+2qHjuOlPPc4R@H}{AZ8wlX<;JXbeO>0k6|=3udumm}RvYLBw=| z<#PwXObixU?vUSZqGxy4;~;ogF!a}*z1BQoRCwB?)3HkeVHn486%mARXt5-+ zDF=58ByzTBXvrjS5Dr8dbh4o#@E>StI0&K5riOyHR=1o)T$~@W{V*`$3P$wE?lJVL_8LBQ zA_--5$x|&_{MQ#|v<-| + + + +
    +
    + +
    +
    + + +
    +
    + +
    +
      +
    • +
    • + +
    • + +
    +
    + +
    +
    + +
    +
    + +
    +
    + + diff --git a/data/web/rc/plugins/acl/skins/larry/acl.css b/data/web/rc/plugins/acl/skins/larry/acl.css new file mode 100644 index 00000000..06cafa30 --- /dev/null +++ b/data/web/rc/plugins/acl/skins/larry/acl.css @@ -0,0 +1,124 @@ +#aclcontainer +{ + overflow-x: auto; + border: 1px solid #CCDDE4; + background-color: #D9ECF4; + height: 272px; + box-shadow: none; +} + +#acllist-content +{ + position: relative; + height: 230px; + background-color: white; +} + +#acllist-footer +{ + position: relative; +} + +#acltable +{ + width: 100%; + border-collapse: collapse; + border: none; +} + +#acltable th, +#acltable td +{ + white-space: nowrap; + text-align: center; +} + +#acltable thead tr th +{ + font-size: 11px; + font-weight: bold; +} + +#acltable tbody td +{ + text-align: center; + height: 16px; + cursor: default; +} + +#acltable thead tr > .user +{ + width: 30%; + border-left: none; +} + +#acltable.advanced thead tr > .user { + width: 25%; +} + +#acltable tbody td.user +{ + text-align: left; +} + +#acltable tbody td.partial +{ + background-image: url(images/partial.png?v=05d7.389); + background-position: center; + background-repeat: no-repeat; +} + +#acltable tbody td.enabled +{ + background-image: url(images/enabled.png?v=9d9a.674); + background-position: center; + background-repeat: no-repeat; +} + +#acltable tbody tr.selected td.partial +{ + background-color: #019bc6; + background-image: url(images/partial.png?v=05d7.389), -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%); + background-image: url(images/partial.png?v=05d7.389), -webkit-gradient(linear, left top, left bottom, color-stop(0%,#019bc6), color-stop(100%,#017cb4)); + background-image: url(images/partial.png?v=05d7.389), -o-linear-gradient(top, #019bc6 0%, #017cb4 100%); + background-image: url(images/partial.png?v=05d7.389), -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%); + background-image: url(images/partial.png?v=05d7.389), linear-gradient(top, #019bc6 0%, #017cb4 100%); +} + +#acltable tbody tr.selected td.enabled +{ + background-color: #019bc6; + background-image: url(images/enabled.png?v=9d9a.674), -moz-linear-gradient(top, #019bc6 0%, #017cb4 100%); + background-image: url(images/enabled.png?v=9d9a.674), -webkit-gradient(linear, left top, left bottom, color-stop(0%,#019bc6), color-stop(100%,#017cb4)); + background-image: url(images/enabled.png?v=9d9a.674), -o-linear-gradient(top, #019bc6 0%, #017cb4 100%); + background-image: url(images/enabled.png?v=9d9a.674), -ms-linear-gradient(top, #019bc6 0%, #017cb4 100%); + background-image: url(images/enabled.png?v=9d9a.674), linear-gradient(top, #019bc6 0%, #017cb4 100%); +} + +#aclform +{ + display: none; +} + +#aclform div +{ + padding: 0; + text-align: center; + clear: both; +} + +#aclform ul +{ + list-style: none; + margin: 0.2em; + padding: 0; +} + +#aclform ul li label +{ + margin-left: 0.5em; +} + +ul.toolbarmenu li span.delete { + background-position: 0 -1509px; +} diff --git a/data/web/rc/plugins/acl/skins/larry/acl.min.css b/data/web/rc/plugins/acl/skins/larry/acl.min.css new file mode 100644 index 00000000..97edab21 --- /dev/null +++ b/data/web/rc/plugins/acl/skins/larry/acl.min.css @@ -0,0 +1 @@ +#aclcontainer{overflow-x:auto;border:1px solid #ccdde4;background-color:#d9ecf4;height:272px;box-shadow:none}#acllist-content{position:relative;height:230px;background-color:white}#acllist-footer{position:relative}#acltable{width:100%;border-collapse:collapse;border:0}#acltable th,#acltable td{white-space:nowrap;text-align:center}#acltable thead tr th{font-size:11px;font-weight:bold}#acltable tbody td{text-align:center;height:16px;cursor:default}#acltable thead tr>.user{width:30%;border-left:0}#acltable.advanced thead tr>.user{width:25%}#acltable tbody td.user{text-align:left}#acltable tbody td.partial{background-image:url(images/partial.png?v=05d7.389);background-position:center;background-repeat:no-repeat}#acltable tbody td.enabled{background-image:url(images/enabled.png?v=9d9a.674);background-position:center;background-repeat:no-repeat}#acltable tbody tr.selected td.partial{background-color:#019bc6;background-image:url(images/partial.png?v=05d7.389),-moz-linear-gradient(top,#019bc6 0,#017cb4 100%);background-image:url(images/partial.png?v=05d7.389),-webkit-gradient(linear,left top,left bottom,color-stop(0,#019bc6),color-stop(100%,#017cb4));background-image:url(images/partial.png?v=05d7.389),-o-linear-gradient(top,#019bc6 0,#017cb4 100%);background-image:url(images/partial.png?v=05d7.389),-ms-linear-gradient(top,#019bc6 0,#017cb4 100%);background-image:url(images/partial.png?v=05d7.389),linear-gradient(top,#019bc6 0,#017cb4 100%)}#acltable tbody tr.selected td.enabled{background-color:#019bc6;background-image:url(images/enabled.png?v=9d9a.674),-moz-linear-gradient(top,#019bc6 0,#017cb4 100%);background-image:url(images/enabled.png?v=9d9a.674),-webkit-gradient(linear,left top,left bottom,color-stop(0,#019bc6),color-stop(100%,#017cb4));background-image:url(images/enabled.png?v=9d9a.674),-o-linear-gradient(top,#019bc6 0,#017cb4 100%);background-image:url(images/enabled.png?v=9d9a.674),-ms-linear-gradient(top,#019bc6 0,#017cb4 100%);background-image:url(images/enabled.png?v=9d9a.674),linear-gradient(top,#019bc6 0,#017cb4 100%)}#aclform{display:none}#aclform div{padding:0;text-align:center;clear:both}#aclform ul{list-style:none;margin:.2em;padding:0}#aclform ul li label{margin-left:.5em}ul.toolbarmenu li span.delete{background-position:0 -1509px} \ No newline at end of file diff --git a/data/web/rc/plugins/acl/skins/larry/images/enabled.png b/data/web/rc/plugins/acl/skins/larry/images/enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..98215f68ccf339c5c27541c3b34c08abc75073e0 GIT binary patch literal 674 zcmV;T0$u%yP)f+_U_u=*df?? zp&$Yg2q7duDN;oWJp~0yK|@DDfsptCBt(JW3+SPtqM)Ne2%1O`5Q5+&%EJQ1-Zi$@ z`<@rGYX~@Wa7Wsm*_m_BopbLJDJA|j^6A5Qy9CJvQW~O08tWe#GiJ%SpM>ytN2#FKRYXk6ph?HOe9vd%Tu1$|!wHxhi8b+&lX z(rE`zJdf^DrUjG7W^Wrt0j$3XJx?$(HM7hT5(WYL>h_{%drkL7iX*ApU!GssnmB%R z*0ichIRR)09yGy%HU!h5X;nz3sig9V`W-mUmUI64&UmK$?p1xk*>0@FZWmw?n708Q ztGP(Id@y$%g8GWnN7uINTRZK={j`@ZookI)=2B~OW0ggDu zbyFt`XHQS9{WdH$iXcdW_@39^W0F*|x`UIkM}W~Xv0 zh^iyerxmD(9Qu$+2qHjuOlPPc4R@H}{AZ8wlX<;JXbeO>0k6|=3udumm}RvYLBw=| z<#PwXObixU?vUSZqGxy4;~;ogF!a}*z1BQoRCwB?)3HkeVHn486%mARXt5-+ zDF=58ByzTBXvrjS5Dr8dbh4o#@E>StI0&K5riOyHR=1o)T$~@W{V*`$3P$wE?lJVL_8LBQ zA_--5$x|&_{MQ#|v<-| +
    +

    + +
    + +
+ + + +
+

+
+ +
+
+ +
+
diff --git a/data/web/rc/plugins/acl/tests/Acl.php b/data/web/rc/plugins/acl/tests/Acl.php new file mode 100644 index 00000000..56ae3b5b --- /dev/null +++ b/data/web/rc/plugins/acl/tests/Acl.php @@ -0,0 +1,23 @@ +api); + + $this->assertInstanceOf('acl', $plugin); + $this->assertInstanceOf('rcube_plugin', $plugin); + } +} + diff --git a/data/web/rc/plugins/additional_message_headers/additional_message_headers.php b/data/web/rc/plugins/additional_message_headers/additional_message_headers.php new file mode 100644 index 00000000..4db93ee6 --- /dev/null +++ b/data/web/rc/plugins/additional_message_headers/additional_message_headers.php @@ -0,0 +1,37 @@ + 'My-Very-Own-Webmail'); + * + * @author Ziba Scott + * @website http://roundcube.net + */ +class additional_message_headers extends rcube_plugin +{ + function init() + { + $this->add_hook('message_before_send', array($this, 'message_headers')); + } + + function message_headers($args) + { + $this->load_config(); + + $rcube = rcube::get_instance(); + + // additional email headers + $additional_headers = $rcube->config->get('additional_message_headers', array()); + + if (!empty($additional_headers)) { + $args['message']->headers($additional_headers, true); + } + + return $args; + } +} diff --git a/data/web/rc/plugins/additional_message_headers/composer.json b/data/web/rc/plugins/additional_message_headers/composer.json new file mode 100644 index 00000000..aa72c7c5 --- /dev/null +++ b/data/web/rc/plugins/additional_message_headers/composer.json @@ -0,0 +1,24 @@ +{ + "name": "roundcube/additional_message_headers", + "type": "roundcube-plugin", + "description": "Very simple plugin which will add additional headers to or remove them from outgoing messages.", + "license": "GPLv2", + "version": "1.2.1", + "authors": [ + { + "name": "Ziba Scott", + "email": "email@example.org", + "role": "Lead" + } + ], + "repositories": [ + { + "type": "composer", + "url": "http://plugins.roundcube.net" + } + ], + "require": { + "php": ">=5.3.0", + "roundcube/plugin-installer": ">=0.1.3" + } +} diff --git a/data/web/rc/plugins/additional_message_headers/config.inc.php.dist b/data/web/rc/plugins/additional_message_headers/config.inc.php.dist new file mode 100644 index 00000000..90468134 --- /dev/null +++ b/data/web/rc/plugins/additional_message_headers/config.inc.php.dist @@ -0,0 +1,14 @@ + diff --git a/data/web/rc/plugins/additional_message_headers/tests/AdditionalMessageHeaders.php b/data/web/rc/plugins/additional_message_headers/tests/AdditionalMessageHeaders.php new file mode 100644 index 00000000..55e8c441 --- /dev/null +++ b/data/web/rc/plugins/additional_message_headers/tests/AdditionalMessageHeaders.php @@ -0,0 +1,23 @@ +api); + + $this->assertInstanceOf('additional_message_headers', $plugin); + $this->assertInstanceOf('rcube_plugin', $plugin); + } +} + diff --git a/data/web/rc/plugins/archive/archive.js b/data/web/rc/plugins/archive/archive.js new file mode 100644 index 00000000..23611bee --- /dev/null +++ b/data/web/rc/plugins/archive/archive.js @@ -0,0 +1,64 @@ +/** + * Archive plugin script + * @version 3.0 + * + * @licstart The following is the entire license notice for the + * JavaScript code in this file. + * + * Copyright (c) 2012-2016, The Roundcube Dev Team + * + * The JavaScript code in this page is free software: you can redistribute it + * and/or modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * @licend The above is the entire license notice + * for the JavaScript code in this file. + */ + +function rcmail_archive(prop) +{ + if (rcmail_is_archive()) + return; + + var post_data = rcmail.selection_post_data(); + + // exit if selection is empty + if (!post_data._uid) + return; + + rcmail.show_contentframe(false); + + // Disable message command buttons until a message is selected + rcmail.enable_command(rcmail.env.message_commands, false); + rcmail.enable_command('plugin.archive', false); + + // let the server sort the messages to the according subfolders + rcmail.with_selected_messages('move', post_data, null, 'plugin.move2archive'); +} + +function rcmail_is_archive() +{ + // check if current folder is an archive folder or one of its children + return rcmail.env.mailbox == rcmail.env.archive_folder + || rcmail.env.mailbox.startsWith(rcmail.env.archive_folder + rcmail.env.delimiter); +} + +// callback for app-onload event +if (window.rcmail) { + rcmail.addEventListener('init', function(evt) { + // register command (directly enable in message view mode) + rcmail.register_command('plugin.archive', rcmail_archive, rcmail.env.uid && !rcmail_is_archive()); + + // add event-listener to message list + if (rcmail.message_list) + rcmail.message_list.addEventListener('select', function(list) { + rcmail.enable_command('plugin.archive', list.get_selection().length > 0 && !rcmail_is_archive()); + }); + + // set css style for archive folder + var li; + if (rcmail.env.archive_folder && (li = rcmail.get_folder_li(rcmail.env.archive_folder, '', true))) + $(li).addClass('archive'); + }); +} diff --git a/data/web/rc/plugins/archive/archive.min.js b/data/web/rc/plugins/archive/archive.min.js new file mode 100644 index 00000000..04ea9bbc --- /dev/null +++ b/data/web/rc/plugins/archive/archive.min.js @@ -0,0 +1,19 @@ +/** + * Archive plugin script + * @version 3.0 + * + * @licstart The following is the entire license notice for the + * JavaScript code in this file. + * + * Copyright (c) 2012-2016, The Roundcube Dev Team + * + * The JavaScript code in this page is free software: you can redistribute it + * and/or modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * @licend The above is the entire license notice + * for the JavaScript code in this file. + */ +function rcmail_archive(a){rcmail_is_archive()||(a=rcmail.selection_post_data(),a._uid&&(rcmail.show_contentframe(!1),rcmail.enable_command(rcmail.env.message_commands,!1),rcmail.enable_command("plugin.archive",!1),rcmail.with_selected_messages("move",a,null,"plugin.move2archive")))}function rcmail_is_archive(){return rcmail.env.mailbox==rcmail.env.archive_folder||rcmail.env.mailbox.startsWith(rcmail.env.archive_folder+rcmail.env.delimiter)} +window.rcmail&&rcmail.addEventListener("init",function(a){rcmail.register_command("plugin.archive",rcmail_archive,rcmail.env.uid&&!rcmail_is_archive());rcmail.message_list&&rcmail.message_list.addEventListener("select",function(a){rcmail.enable_command("plugin.archive",0task == 'mail' && ($rcmail->action == '' || $rcmail->action == 'show') + && ($archive_folder = $rcmail->config->get('archive_mbox')) + ) { + $skin_path = $this->local_skin_path(); + if (is_file($this->home . "/$skin_path/archive.css")) { + $this->include_stylesheet("$skin_path/archive.css"); + } + + $this->include_script('archive.js'); + $this->add_texts('localization', true); + $this->add_button( + array( + 'type' => 'link', + 'label' => 'buttontext', + 'command' => 'plugin.archive', + 'class' => 'button buttonPas archive disabled', + 'classact' => 'button archive', + 'width' => 32, + 'height' => 32, + 'title' => 'buttontitle', + 'domain' => $this->ID, + ), + 'toolbar'); + + // register hook to localize the archive folder + $this->add_hook('render_mailboxlist', array($this, 'render_mailboxlist')); + + // set env variables for client + $rcmail->output->set_env('archive_folder', $archive_folder); + $rcmail->output->set_env('archive_type', $rcmail->config->get('archive_type','')); + } + else if ($rcmail->task == 'mail') { + // handler for ajax request + $this->register_action('plugin.move2archive', array($this, 'move_messages')); + } + else if ($rcmail->task == 'settings') { + $this->add_hook('preferences_list', array($this, 'prefs_table')); + $this->add_hook('preferences_save', array($this, 'save_prefs')); + } + } + + /** + * Hook to give the archive folder a localized name in the mailbox list + */ + function render_mailboxlist($p) + { + $rcmail = rcmail::get_instance(); + $archive_folder = $rcmail->config->get('archive_mbox'); + $show_real_name = $rcmail->config->get('show_real_foldernames'); + + // set localized name for the configured archive folder + if ($archive_folder && !$show_real_name) { + if (isset($p['list'][$archive_folder])) { + $p['list'][$archive_folder]['name'] = $this->gettext('archivefolder'); + } + else { + // search in subfolders + $this->_mod_folder_name($p['list'], $archive_folder, $this->gettext('archivefolder')); + } + } + + return $p; + } + + /** + * Helper method to find the archive folder in the mailbox tree + */ + private function _mod_folder_name(&$list, $folder, $new_name) + { + foreach ($list as $idx => $item) { + if ($item['id'] == $folder) { + $list[$idx]['name'] = $new_name; + return true; + } + else if (!empty($item['folders'])) { + if ($this->_mod_folder_name($list[$idx]['folders'], $folder, $new_name)) { + return true; + } + } + } + + return false; + } + + /** + * Plugin action to move the submitted list of messages to the archive subfolders + * according to the user settings and their headers. + */ + function move_messages() + { + $rcmail = rcmail::get_instance(); + + // only process ajax requests + if (!$rcmail->output->ajax_call) { + return; + } + + $this->add_texts('localization'); + + $storage = $rcmail->get_storage(); + $delimiter = $storage->get_hierarchy_delimiter(); + $read_on_move = (bool) $rcmail->config->get('read_on_archive'); + $archive_type = $rcmail->config->get('archive_type', ''); + $archive_folder = $rcmail->config->get('archive_mbox'); + $archive_prefix = $archive_folder . $delimiter; + $current_mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST); + $search_request = rcube_utils::get_input_value('_search', rcube_utils::INPUT_GPC); + $uids = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST); + + // count messages before changing anything + if ($_POST['_from'] != 'show') { + $threading = (bool) $storage->get_threading(); + $old_count = $storage->count(null, $threading ? 'THREADS' : 'ALL'); + $old_pages = ceil($old_count / $storage->get_pagesize()); + } + + $count = 0; + + // this way response handler for 'move' action will be executed + $rcmail->action = 'move'; + $this->result = array( + 'reload' => false, + 'error' => false, + 'sources' => array(), + 'destinations' => array(), + ); + + foreach (rcmail::get_uids(null, null, $multifolder) as $mbox => $uids) { + if (!$archive_folder || strpos($mbox, $archive_prefix) === 0) { + $count = count($uids); + continue; + } + else if (!$archive_type || $archive_type == 'folder') { + $folder = $archive_folder; + + if ($archive_type == 'folder') { + // compose full folder path + $folder .= $delimiter . $mbox; + + // create archive subfolder if it doesn't yet exist + $this->subfolder_worker($folder); + } + + $count += $this->move_messages_worker($uids, $mbox, $folder, $read_on_move); + } + else { + if ($uids == '*') { + $index = $storage->index(null, rcmail_sort_column(), rcmail_sort_order()); + $uids = $index->get(); + } + + $messages = $storage->fetch_headers($mbox, $uids); + $execute = array(); + + foreach ($messages as $message) { + $subfolder = null; + switch ($archive_type) { + case 'year': + $subfolder = $rcmail->format_date($message->timestamp, 'Y'); + break; + + case 'month': + $subfolder = $rcmail->format_date($message->timestamp, 'Y') + . $delimiter . $rcmail->format_date($message->timestamp, 'm'); + break; + + case 'sender': + $from = $message->get('from'); + preg_match('/[\b<](.+@.+)[\b>]/i', $from, $m); + $subfolder = $m[1] ?: $this->gettext('unkownsender'); + + // replace reserved characters in folder name + $repl = $delimiter == '-' ? '_' : '-'; + $replacements[$delimiter] = $repl; + $replacements['.'] = $repl; // some IMAP server do not allow . characters + $subfolder = strtr($subfolder, $replacements); + break; + } + + // compose full folder path + $folder = $archive_folder . ($subfolder ? $delimiter . $subfolder : ''); + + $execute[$folder][] = $message->uid; + } + + foreach ($execute as $folder => $uids) { + // create archive subfolder if it doesn't yet exist + $this->subfolder_worker($folder); + + $count += $this->move_messages_worker($uids, $mbox, $folder, $read_on_move); + } + } + } + + if ($this->result['error']) { + if ($_POST['_from'] != 'show') { + $rcmail->output->command('list_mailbox'); + } + + $rcmail->output->show_message($this->gettext('archiveerror'), 'warning'); + $rcmail->output->send(); + } + + if (!empty($_POST['_refresh'])) { + // FIXME: send updated message rows instead of reloading the entire list + $rcmail->output->command('refresh_list'); + } + else { + $addrows = true; + } + + // refresh saved search set after moving some messages + if ($search_request && $rcmail->storage->get_search_set()) { + $_SESSION['search'] = $rcmail->storage->refresh_search(); + } + + if ($_POST['_from'] == 'show') { + if ($next = rcube_utils::get_input_value('_next_uid', rcube_utils::INPUT_GPC)) { + $rcmail->output->command('show_message', $next); + } + else { + $rcmail->output->command('command', 'list'); + } + + $rcmail->output->send(); + } + + $mbox = $storage->get_folder(); + $msg_count = $storage->count(null, $threading ? 'THREADS' : 'ALL'); + $exists = $storage->count($mbox, 'EXISTS', true); + $page_size = $storage->get_pagesize(); + $page = $storage->get_page(); + $pages = ceil($msg_count / $page_size); + $nextpage_count = $old_count - $page_size * $page; + $remaining = $msg_count - $page_size * ($page - 1); + + // jump back one page (user removed the whole last page) + if ($page > 1 && $remaining == 0) { + $page -= 1; + $storage->set_page($page); + $_SESSION['page'] = $page; + $jump_back = true; + } + + // update message count display + $rcmail->output->set_env('messagecount', $msg_count); + $rcmail->output->set_env('current_page', $page); + $rcmail->output->set_env('pagecount', $pages); + $rcmail->output->set_env('exists', $exists); + + // update mailboxlist + $unseen_count = $msg_count ? $storage->count($mbox, 'UNSEEN') : 0; + $old_unseen = rcmail_get_unseen_count($mbox); + $quota_root = $multifolder ? $this->result['sources'][0] : 'INBOX'; + + if ($old_unseen != $unseen_count) { + $rcmail->output->command('set_unread_count', $mbox, $unseen_count, ($mbox == 'INBOX')); + rcmail_set_unseen_count($mbox, $unseen_count); + } + + $rcmail->output->command('set_quota', $rcmail->quota_content(null, $quota_root)); + $rcmail->output->command('set_rowcount', rcmail_get_messagecount_text($msg_count), $mbox); + + if ($threading) { + $count = rcube_utils::get_input_value('_count', rcube_utils::INPUT_POST); + } + + // add new rows from next page (if any) + if ($addrows && $count && $uids != '*' && ($jump_back || $nextpage_count > 0)) { + $a_headers = $storage->list_messages($mbox, null, + rcmail_sort_column(), rcmail_sort_order(), $jump_back ? null : $count); + + rcmail_js_message_list($a_headers, false); + } + + if ($this->result['reload']) { + $rcmail->output->show_message($this->gettext('archivedreload'), 'confirmation'); + } + else { + $rcmail->output->show_message($this->gettext('archived'), 'confirmation'); + + if (!$read_on_move) { + foreach ($this->result['destinations'] as $folder) { + rcmail_send_unread_count($folder, true); + } + } + } + + // send response + $rcmail->output->send(); + } + + /** + * Move messages from one folder to another and mark as read if needed + */ + private function move_messages_worker($uids, $from_mbox, $to_mbox, $read_on_move) + { + $storage = rcmail::get_instance()->get_storage(); + + if ($read_on_move) { + // don't flush cache (4th argument) + $storage->set_flag($uids, 'SEEN', $from_mbox, true); + } + + // move message to target folder + if ($storage->move_message($uids, $to_mbox, $from_mbox)) { + if (!in_array($from_mbox, $this->result['sources'])) { + $this->result['sources'][] = $from_mbox; + } + if (!in_array($to_mbox, $this->result['destinations'])) { + $this->result['destinations'][] = $to_mbox; + } + + return count($uids); + } + + $this->result['error'] = true; + } + + /** + * Create archive subfolder if it doesn't yet exist + */ + private function subfolder_worker($folder) + { + $storage = rcmail::get_instance()->get_storage(); + $delimiter = $storage->get_hierarchy_delimiter(); + + if ($this->folders === null) { + $this->folders = $storage->list_folders('', $archive_folder . '*', 'mail', null, true); + } + + if (!in_array($folder, $this->folders)) { + $path = explode($delimiter, $folder); + + // we'll create all folders in the path + for ($i=0; $ifolders)) { + if ($storage->create_folder($_folder, true)) { + $this->result['reload'] = true; + $this->folders[] = $_folder; + } + } + } + } + } + + /** + * Hook to inject plugin-specific user settings + */ + function prefs_table($args) + { + global $CURR_SECTION; + + $this->add_texts('localization'); + + $rcmail = rcmail::get_instance(); + $dont_override = $rcmail->config->get('dont_override', array()); + + if ($args['section'] == 'folders' && !in_array('archive_mbox', $dont_override)) { + $mbox = $rcmail->config->get('archive_mbox'); + $type = $rcmail->config->get('archive_type'); + + // load folders list when needed + if ($CURR_SECTION) { + $select = $rcmail->folder_selector(array( + 'noselection' => '---', + 'realnames' => true, + 'maxlength' => 30, + 'folder_filter' => 'mail', + 'folder_rights' => 'w', + 'onchange' => "if ($(this).val() == 'INBOX') $(this).val('')", + )); + } + else { + $select = new html_select(); + } + + $args['blocks']['main']['options']['archive_mbox'] = array( + 'title' => $this->gettext('archivefolder'), + 'content' => $select->show($mbox, array('name' => "_archive_mbox")) + ); + + // add option for structuring the archive folder + $archive_type = new html_select(array('name' => '_archive_type', 'id' => 'ff_archive_type')); + $archive_type->add($this->gettext('none'), ''); + $archive_type->add($this->gettext('archivetypeyear'), 'year'); + $archive_type->add($this->gettext('archivetypemonth'), 'month'); + $archive_type->add($this->gettext('archivetypesender'), 'sender'); + $archive_type->add($this->gettext('archivetypefolder'), 'folder'); + + $args['blocks']['archive'] = array( + 'name' => rcube::Q($this->gettext('settingstitle')), + 'options' => array('archive_type' => array( + 'title' => $this->gettext('archivetype'), + 'content' => $archive_type->show($type) + ) + ) + ); + } + else if ($args['section'] == 'server' && !in_array('read_on_archive', $dont_override)) { + $chbox = new html_checkbox(array('name' => '_read_on_archive', 'id' => 'ff_read_on_archive', 'value' => 1)); + $args['blocks']['main']['options']['read_on_archive'] = array( + 'title' => $this->gettext('readonarchive'), + 'content' => $chbox->show($rcmail->config->get('read_on_archive') ? 1 : 0) + ); + } + + return $args; + } + + /** + * Hook to save plugin-specific user settings + */ + function save_prefs($args) + { + $rcmail = rcmail::get_instance(); + $dont_override = $rcmail->config->get('dont_override', array()); + + if ($args['section'] == 'folders' && !in_array('archive_mbox', $dont_override)) { + $args['prefs']['archive_type'] = rcube_utils::get_input_value('_archive_type', rcube_utils::INPUT_POST); + } + else if ($args['section'] == 'server' && !in_array('read_on_archive', $dont_override)) { + $args['prefs']['read_on_archive'] = (bool) rcube_utils::get_input_value('_read_on_archive', rcube_utils::INPUT_POST); + } + + return $args; + } +} diff --git a/data/web/rc/plugins/archive/composer.json b/data/web/rc/plugins/archive/composer.json new file mode 100644 index 00000000..b223d2ea --- /dev/null +++ b/data/web/rc/plugins/archive/composer.json @@ -0,0 +1,29 @@ +{ + "name": "roundcube/archive", + "type": "roundcube-plugin", + "description": "This adds a button to move the selected messages to an archive folder. The folder (and the optional structure of subfolders) can be selected in the settings panel.", + "license": "GPLv3+", + "version": "3.0", + "authors": [ + { + "name": "Thomas Bruederli", + "email": "roundcube@gmail.com", + "role": "Lead" + }, + { + "name": "Aleksander Machniak", + "email": "alec@alec.pl", + "role": "Developer" + } + ], + "repositories": [ + { + "type": "composer", + "url": "http://plugins.roundcube.net" + } + ], + "require": { + "php": ">=5.3.0", + "roundcube/plugin-installer": ">=0.1.3" + } +} diff --git a/data/web/rc/plugins/archive/localization/ar_SA.inc b/data/web/rc/plugins/archive/localization/ar_SA.inc new file mode 100644 index 00000000..395020d1 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/ar_SA.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'الأرشيŮ'; +$labels['buttontitle'] = 'أرش٠هذه الرسالة'; +$labels['archived'] = 'أُرشŮŘŞ بنجاح'; +$labels['archivedreload'] = 'ارشŮŘŞ بنجاح. اعد ŘŞŘ­Ů…ŮŠŮ„ الصŮحه لاضهار المل٠المؤرشŮ'; +$labels['archiveerror'] = 'بعض الرسائل لايمŮن ارشŮتها'; +$labels['archivefolder'] = 'الأرشيŮ'; +$labels['settingstitle'] = 'الأرشيŮ'; +$labels['archivetype'] = 'تقسيم الأرشي٠ب'; +$labels['archivetypeyear'] = 'السنة (مثال. الارشيŮ/2012)'; +$labels['archivetypemonth'] = 'الشهر (مثال. الارشيŮ/2012/06)'; +$labels['archivetypefolder'] = 'المجلد الاصلي'; +$labels['archivetypesender'] = 'ايميل المرسل'; +$labels['unkownsender'] = 'مجهŮŮ„'; +?> diff --git a/data/web/rc/plugins/archive/localization/ast.inc b/data/web/rc/plugins/archive/localization/ast.inc new file mode 100644 index 00000000..03083526 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/ast.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Archivu'; +$labels['buttontitle'] = 'Archivar esti mensaxe'; +$labels['archived'] = 'Archiváu con Ă©situ'; +$labels['archivedreload'] = 'Archiváu con Ă©situ. Recarga la páxina pa ver les nueves carpetes d\'archivos.'; +$labels['archiveerror'] = 'Nun pudieron archivase dalgunos mensaxes'; +$labels['archivefolder'] = 'Archivu'; +$labels['settingstitle'] = 'Archivu'; +$labels['archivetype'] = 'Dividir l\'archivu por'; +$labels['archivetypeyear'] = 'Añu (p.ex. Archivu/2012)'; +$labels['archivetypemonth'] = 'Mes (p.ex. Archivu/2012/06)'; +$labels['archivetypefolder'] = 'Carpeta orixinal'; +$labels['archivetypesender'] = 'CorrĂ©u-e del remitente'; +$labels['unkownsender'] = 'desconocĂ­u'; +?> diff --git a/data/web/rc/plugins/archive/localization/az_AZ.inc b/data/web/rc/plugins/archive/localization/az_AZ.inc new file mode 100644 index 00000000..7db0a1ea --- /dev/null +++ b/data/web/rc/plugins/archive/localization/az_AZ.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Arxiv'; +$labels['buttontitle'] = 'Mesajı arxivÉ™ göndÉ™r'; +$labels['archived'] = 'ArxivÉ™ göndÉ™rildi'; +$labels['archivedreload'] = 'MĂĽvÉ™ffÉ™qiyyÉ™tlÉ™ arxivləşdirildi. Yeni arxiv qovluqlarını görmÉ™k üçün sÉ™hifÉ™ni yenilÉ™yin.'; +$labels['archiveerror'] = 'BÉ™zi mÉ™ktublar arxivləşdirilÉ™ bilinmirlÉ™r'; +$labels['archivefolder'] = 'Arxiv'; +$labels['settingstitle'] = 'Arxiv'; +$labels['archivetype'] = 'Arxivi böl: '; +$labels['archivetypeyear'] = 'Ä°l (mÉ™s. Arxiv/2012)'; +$labels['archivetypemonth'] = 'Ay (mÉ™s. Arxiv/2012/06)'; +$labels['archivetypefolder'] = 'Orijinal qovluq'; +$labels['archivetypesender'] = 'GöndÉ™rÉ™nin E-Poçtu'; +$labels['unkownsender'] = 'namÉ™lum'; +?> diff --git a/data/web/rc/plugins/archive/localization/be_BE.inc b/data/web/rc/plugins/archive/localization/be_BE.inc new file mode 100644 index 00000000..20a6ac05 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/be_BE.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Đрхіў'; +$labels['buttontitle'] = 'ПеранеŃці Ńž архіў'; +$labels['archived'] = 'ПеранеŃена Ńž архіў'; +$labels['archivedreload'] = 'ПеранеŃена Ńž архіў. ПерагрŃзіце ŃтаронкŃ, каб пабачыць новыя архіўныя папкі.'; +$labels['archiveerror'] = 'Некаторыя паведамленні не могŃць быць перанеŃены Ńž архіў'; +$labels['archivefolder'] = 'Đрхіў'; +$labels['settingstitle'] = 'Đрхіў'; +$labels['archivetype'] = 'Раздзяліць архіў паводле'; +$labels['archivetypeyear'] = 'года (прыкладам, Đрхіў/2012)'; +$labels['archivetypemonth'] = 'меŃяца (прыкладам, Đрхіў/2012/06)'; +$labels['archivetypefolder'] = 'Выточная папка'; +$labels['archivetypesender'] = 'Đ­Đ». поŃŃ‚Đ° адпраўніка'; +$labels['unkownsender'] = 'невядомы'; +?> diff --git a/data/web/rc/plugins/archive/localization/bg_BG.inc b/data/web/rc/plugins/archive/localization/bg_BG.inc new file mode 100644 index 00000000..9251fc69 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/bg_BG.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Đрхивирай'; +$labels['buttontitle'] = 'Đрхивиране на пиŃмото'; +$labels['archived'] = 'Đрхивирането премина ŃŃпеŃно'; +$labels['archivedreload'] = 'ĐŁŃпеŃно архивирано. Презаредете Ńтраницата Đ·Đ° Đ´Đ° видите архивираните папки.'; +$labels['archiveerror'] = 'Някои пиŃĐĽĐ° не бяха архивирани'; +$labels['archivefolder'] = 'Đрхивирай'; +$labels['settingstitle'] = 'Đрхив'; +$labels['archivetype'] = 'Раздели архива по'; +$labels['archivetypeyear'] = 'Година (пр. Đрхив/2012)'; +$labels['archivetypemonth'] = 'МеŃец (пр. Đрхив/2012/06)'; +$labels['archivetypefolder'] = 'Оригинална папка'; +$labels['archivetypesender'] = 'E-mail Đ°Đ´Ń€ĐµŃ Đ˝Đ° подател'; +$labels['unkownsender'] = 'неизвеŃтно'; +$labels['readonarchive'] = 'Маркирай пиŃмото като прочетено в архива'; +?> diff --git a/data/web/rc/plugins/archive/localization/br.inc b/data/web/rc/plugins/archive/localization/br.inc new file mode 100644 index 00000000..83d66404 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/br.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Diell'; +$labels['buttontitle'] = 'Diellaouiñ ar gemennadenn-mañ'; +$labels['archived'] = 'Diellaouet gant berzh'; +$labels['archivedreload'] = 'Diellaouet gant berzh. Adkargit ar bajenn da welet an teuliad dielloĂą nevez.'; +$labels['archiveerror'] = 'Ul lodenn eus ar c\'hemennadennoĂą n\'hallont ket bezañ diellaouet'; +$labels['archivefolder'] = 'Diell'; +$labels['settingstitle'] = 'Diell'; +$labels['archivetype'] = 'Rannañ an diell dre'; +$labels['archivetypeyear'] = 'Bloaz (sk: Diell/2012)'; +$labels['archivetypemonth'] = 'Miz (sk: Diell/2012/06)'; +$labels['archivetypefolder'] = 'Teuliad orin'; +$labels['archivetypesender'] = 'Postel ar c\'haser'; +$labels['unkownsender'] = 'dianav'; +?> diff --git a/data/web/rc/plugins/archive/localization/bs_BA.inc b/data/web/rc/plugins/archive/localization/bs_BA.inc new file mode 100644 index 00000000..0e849d89 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/bs_BA.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Arhiva'; +$labels['buttontitle'] = 'Arhiviraj ovu poruku'; +$labels['archived'] = 'Arhiviranje uspješno'; +$labels['archivedreload'] = 'Uspješno arhivirano. Ponovo uÄŤitajte stranicu da biste vidjeli nove foldere za arhiviranje.'; +$labels['archiveerror'] = 'Neke poruke nisu mogle biti arhivirane'; +$labels['archivefolder'] = 'Arhiva'; +$labels['settingstitle'] = 'Arhiva'; +$labels['archivetype'] = 'Podijeli arhivu po'; +$labels['archivetypeyear'] = 'Godinama (npr. Arhiva/2012)'; +$labels['archivetypemonth'] = 'Mjesecima (npr Arhiva/2012/06)'; +$labels['archivetypefolder'] = 'Originalni folder'; +$labels['archivetypesender'] = 'Email pošiljaoca'; +$labels['unkownsender'] = 'nepoznato'; +?> diff --git a/data/web/rc/plugins/archive/localization/ca_ES.inc b/data/web/rc/plugins/archive/localization/ca_ES.inc new file mode 100644 index 00000000..c62c9a9c --- /dev/null +++ b/data/web/rc/plugins/archive/localization/ca_ES.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Arxiva'; +$labels['buttontitle'] = 'Arxiva aquest missatge'; +$labels['archived'] = 'Arxivat correctament'; +$labels['archivedreload'] = 'Arxivat correctament. Recarregueu la pĂ gina per veure les noves carpetes de l\'arxiu.'; +$labels['archiveerror'] = 'Alguns missatges no s\'han pogut arxivar'; +$labels['archivefolder'] = 'Arxiu'; +$labels['settingstitle'] = 'Arxiu'; +$labels['archivetype'] = 'Divideix arxiu per'; +$labels['archivetypeyear'] = 'Any (p.ex. Arxiu/2012)'; +$labels['archivetypemonth'] = 'Mes (p.ex. Arxiu/2012/06)'; +$labels['archivetypefolder'] = 'Carpeta original'; +$labels['archivetypesender'] = 'Adreça del remitent'; +$labels['unkownsender'] = 'desconegut'; +?> diff --git a/data/web/rc/plugins/archive/localization/cs_CZ.inc b/data/web/rc/plugins/archive/localization/cs_CZ.inc new file mode 100644 index 00000000..a4cf7a94 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/cs_CZ.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Archiv'; +$labels['buttontitle'] = 'Archivovat zprávu'; +$labels['archived'] = 'ĂšspěšnÄ› vloĹľeno do archivu'; +$labels['archivedreload'] = 'ĂšspěšnÄ› archivovány. Obnovte stránku, abyste uvidÄ›li novĂ© sloĹľky v archivu.'; +$labels['archiveerror'] = 'NÄ›kterĂ© zprávy nelze archivovat'; +$labels['archivefolder'] = 'Archiv'; +$labels['settingstitle'] = 'Archiv'; +$labels['archivetype'] = 'RozdÄ›lit archiv podle'; +$labels['archivetypeyear'] = 'Rok (napĹ™. Archiv/2012)'; +$labels['archivetypemonth'] = 'MÄ›sĂ­c (napĹ™. Archiv/2012/06)'; +$labels['archivetypefolder'] = 'PĹŻvodnĂ­ sloĹľka'; +$labels['archivetypesender'] = 'E-mail odesĂ­latele'; +$labels['unkownsender'] = 'neznámĂ˝'; +?> diff --git a/data/web/rc/plugins/archive/localization/cy_GB.inc b/data/web/rc/plugins/archive/localization/cy_GB.inc new file mode 100644 index 00000000..6397d907 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/cy_GB.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Archif'; +$labels['buttontitle'] = 'Archifo\'r neges hwn'; +$labels['archived'] = 'Archifwyd yn llwyddiannus'; +$labels['archivedreload'] = 'Archifwyd yn llwyddiannus. Ail-lwythwch y dudalen i weld ffolderi archif newydd.'; +$labels['archiveerror'] = 'Nid oedd yn bosib archifo rhai negeseuon'; +$labels['archivefolder'] = 'Archif'; +$labels['settingstitle'] = 'Archif'; +$labels['archivetype'] = 'Rhannu archif gyda'; +$labels['archivetypeyear'] = 'Blwyddyn (e.g. Archif/2012)'; +$labels['archivetypemonth'] = 'Mis (e.g. Archif/2012/06)'; +$labels['archivetypefolder'] = 'Ffolder gwreiddiol'; +$labels['archivetypesender'] = 'Ebost anfonwr'; +$labels['unkownsender'] = 'anhysbys'; +$labels['readonarchive'] = 'Nodi\'r neges fel darllenwyd ar archif'; +?> diff --git a/data/web/rc/plugins/archive/localization/da_DK.inc b/data/web/rc/plugins/archive/localization/da_DK.inc new file mode 100644 index 00000000..e2790644 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/da_DK.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Arkiv'; +$labels['buttontitle'] = 'ArkivĂ©r denne besked'; +$labels['archived'] = 'Succesfuldt arkiveret.'; +$labels['archivedreload'] = 'Arkivering lykkedes. Genindlæs siden for at se den nye arkiv mappe.'; +$labels['archiveerror'] = 'Nogle meddelelser kunne ikke arkiveres'; +$labels['archivefolder'] = 'Arkiv'; +$labels['settingstitle'] = 'Arkiver'; +$labels['archivetype'] = 'Del arkiv med'; +$labels['archivetypeyear'] = 'Ă…r (f.eks. Arkiv/2012)'; +$labels['archivetypemonth'] = 'MĂĄned (f.eks. Arkiv/2012/06)'; +$labels['archivetypefolder'] = 'Original mappe'; +$labels['archivetypesender'] = 'Afsenders email'; +$labels['unkownsender'] = 'ukendt'; +$labels['readonarchive'] = 'Marker denne meddelelse som læst i arkivet'; +?> diff --git a/data/web/rc/plugins/archive/localization/de_CH.inc b/data/web/rc/plugins/archive/localization/de_CH.inc new file mode 100644 index 00000000..979965bf --- /dev/null +++ b/data/web/rc/plugins/archive/localization/de_CH.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Archiv'; +$labels['buttontitle'] = 'Nachricht(en) archivieren'; +$labels['archived'] = 'Nachricht(en) erfolgreich archiviert'; +$labels['archivedreload'] = 'Nachrichten wurden archiviert. Laden Sie die Seite neu, um die neuen Archivordner zu sehen.'; +$labels['archiveerror'] = 'Einige Nachrichten konnten nicht archiviert werden'; +$labels['archivefolder'] = 'Archiv'; +$labels['settingstitle'] = 'Archiv'; +$labels['archivetype'] = 'Erstelle Unterordner nach'; +$labels['archivetypeyear'] = 'Jahr (z.B. Archiv/2012)'; +$labels['archivetypemonth'] = 'Monat (z.B. Archiv/2012/06)'; +$labels['archivetypefolder'] = 'Originalordner'; +$labels['archivetypesender'] = 'Absender'; +$labels['unkownsender'] = 'unbekannt'; +$labels['readonarchive'] = 'Nachrichten beim Archivieren als gelesen markieren'; +?> diff --git a/data/web/rc/plugins/archive/localization/de_DE.inc b/data/web/rc/plugins/archive/localization/de_DE.inc new file mode 100644 index 00000000..77df41f0 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/de_DE.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Archiv'; +$labels['buttontitle'] = 'Nachricht archivieren'; +$labels['archived'] = 'Nachricht erfolgreich archiviert'; +$labels['archivedreload'] = 'Erfolgreich archiviert. Bitte die Seite aktualisieren, um die neuen Archivordner zu sehen.'; +$labels['archiveerror'] = 'Einige Nachrichten konnten nicht archiviert werden'; +$labels['archivefolder'] = 'Archiv'; +$labels['settingstitle'] = 'Archiv'; +$labels['archivetype'] = 'Archiv aufteilen nach'; +$labels['archivetypeyear'] = 'Jahr (z.B. Archiv/2012)'; +$labels['archivetypemonth'] = 'Monat (z.B. Archiv/2012/06)'; +$labels['archivetypefolder'] = 'Originalordner'; +$labels['archivetypesender'] = 'Absender-E-Mail'; +$labels['unkownsender'] = 'unbekannt'; +$labels['readonarchive'] = 'Nachricht im Archiv als gelesen markieren'; +?> diff --git a/data/web/rc/plugins/archive/localization/el_GR.inc b/data/web/rc/plugins/archive/localization/el_GR.inc new file mode 100644 index 00000000..8b4ba339 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/el_GR.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'ΑĎχειοθέτηĎη'; +$labels['buttontitle'] = 'ΑĎχειοθέτηĎη μηνύματος'; +$labels['archived'] = 'ΑĎχειοθετήθηκε με επιτυχία'; +$labels['archivedreload'] = 'Επιτυχής αĎχειοθέτηĎη. ΑνανεώĎτε την Ďελίδα για να δείτε τους νέους φακέλους αĎχειοθέτηĎης. '; +$labels['archiveerror'] = 'ÎźĎÎąĎμένα μηνύματα δεν ήταν δυνατό να αĎχειοθετηθούν. '; +$labels['archivefolder'] = 'ΑĎχειοθέτηĎη'; +$labels['settingstitle'] = 'ΑĎχειοθέτηĎη'; +$labels['archivetype'] = 'ΤμηματοποίηĎη αĎχείου με βάĎη'; +$labels['archivetypeyear'] = 'Îτος (Ď€.χ. ΑĎχείο/2012)'; +$labels['archivetypemonth'] = 'Μήνα (Ď€.χ. ΑĎχείο/2012/06)'; +$labels['archivetypefolder'] = 'ΑĎχικός φάκελος'; +$labels['archivetypesender'] = 'ΑποĎτολέας email'; +$labels['unkownsender'] = 'άγνωĎĎ„Îż'; +?> diff --git a/data/web/rc/plugins/archive/localization/en_CA.inc b/data/web/rc/plugins/archive/localization/en_CA.inc new file mode 100644 index 00000000..06b78fb2 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/en_CA.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Archive'; +$labels['buttontitle'] = 'Archive this message'; +$labels['archived'] = 'Successfully archived'; +$labels['archivedreload'] = 'Successfully archived. Reload the page to see the new archive folders.'; +$labels['archiveerror'] = 'Some messages could not be archived'; +$labels['archivefolder'] = 'Archive'; +$labels['settingstitle'] = 'Archive'; +$labels['archivetype'] = 'Divide archive by'; +$labels['archivetypeyear'] = 'Year (e.g. Archive/2012)'; +$labels['archivetypemonth'] = 'Month (e.g. Archive/2012/06)'; +$labels['archivetypefolder'] = 'Original folder'; +$labels['archivetypesender'] = 'Sender email'; +$labels['unkownsender'] = 'unknown'; +?> diff --git a/data/web/rc/plugins/archive/localization/en_GB.inc b/data/web/rc/plugins/archive/localization/en_GB.inc new file mode 100644 index 00000000..06b78fb2 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/en_GB.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Archive'; +$labels['buttontitle'] = 'Archive this message'; +$labels['archived'] = 'Successfully archived'; +$labels['archivedreload'] = 'Successfully archived. Reload the page to see the new archive folders.'; +$labels['archiveerror'] = 'Some messages could not be archived'; +$labels['archivefolder'] = 'Archive'; +$labels['settingstitle'] = 'Archive'; +$labels['archivetype'] = 'Divide archive by'; +$labels['archivetypeyear'] = 'Year (e.g. Archive/2012)'; +$labels['archivetypemonth'] = 'Month (e.g. Archive/2012/06)'; +$labels['archivetypefolder'] = 'Original folder'; +$labels['archivetypesender'] = 'Sender email'; +$labels['unkownsender'] = 'unknown'; +?> diff --git a/data/web/rc/plugins/archive/localization/en_US.inc b/data/web/rc/plugins/archive/localization/en_US.inc new file mode 100644 index 00000000..51bdb7b1 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/en_US.inc @@ -0,0 +1,35 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ + +$labels = array(); +$labels['buttontext'] = 'Archive'; +$labels['buttontitle'] = 'Archive this message'; +$labels['archived'] = 'Successfully archived'; +$labels['archivedreload'] = 'Successfully archived. Reload the page to see the new archive folders.'; +$labels['archiveerror'] = 'Some messages could not be archived'; +$labels['archivefolder'] = 'Archive'; +$labels['settingstitle'] = 'Archive'; +$labels['archivetype'] = 'Divide archive by'; +$labels['archivetypeyear'] = 'Year (e.g. Archive/2012)'; +$labels['archivetypemonth'] = 'Month (e.g. Archive/2012/06)'; +$labels['archivetypefolder'] = 'Original folder'; +$labels['archivetypesender'] = 'Sender email'; +$labels['unkownsender'] = 'unknown'; +$labels['readonarchive'] = 'Mark the message as read on archive'; + +?> diff --git a/data/web/rc/plugins/archive/localization/eo.inc b/data/web/rc/plugins/archive/localization/eo.inc new file mode 100644 index 00000000..8b010584 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/eo.inc @@ -0,0 +1,22 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Arkivigi'; +$labels['buttontitle'] = 'Arkivigi ĉi tiun mesaÄťon'; +$labels['archived'] = 'Sukcese arkivigita'; +$labels['archivefolder'] = 'Arkivo'; +?> diff --git a/data/web/rc/plugins/archive/localization/es_419.inc b/data/web/rc/plugins/archive/localization/es_419.inc new file mode 100644 index 00000000..4d469aa9 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/es_419.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Archivar'; +$labels['buttontitle'] = 'Archivar este mensaje'; +$labels['archived'] = 'Archivado exitosamente'; +$labels['archivedreload'] = 'Archivado exitosamente. Recarga esta página para ver las nuevas carpetas'; +$labels['archiveerror'] = 'Algunos mensajes no pudieron ser archivados'; +$labels['archivefolder'] = 'Archivar'; +$labels['settingstitle'] = 'Archivar'; +$labels['archivetype'] = 'Dividir archivo por'; +$labels['archivetypeyear'] = 'Año (ej. Archivo/2012)'; +$labels['archivetypemonth'] = 'Mes (ej. Archivo/2012/06)'; +$labels['archivetypefolder'] = 'Carpeta original'; +$labels['archivetypesender'] = 'Remitente de correo electrĂłnico'; +$labels['unkownsender'] = 'desconocido'; +?> diff --git a/data/web/rc/plugins/archive/localization/es_AR.inc b/data/web/rc/plugins/archive/localization/es_AR.inc new file mode 100644 index 00000000..a55afeae --- /dev/null +++ b/data/web/rc/plugins/archive/localization/es_AR.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Archivo'; +$labels['buttontitle'] = 'Archivar este mensaje'; +$labels['archived'] = 'Mensaje Archivado'; +$labels['archivedreload'] = 'Archivado satisfactoriamente. Recarga la página para ver las nuevas capetas archivadas.'; +$labels['archiveerror'] = 'Algunos mensajes no pudieron archivarse'; +$labels['archivefolder'] = 'Archivo'; +$labels['settingstitle'] = 'Archivo'; +$labels['archivetype'] = 'Separar archivo por'; +$labels['archivetypeyear'] = 'Año (ej. Archivo/2012)'; +$labels['archivetypemonth'] = 'Mes (ej. Archivo/2012/06)'; +$labels['archivetypefolder'] = 'Carpeta original'; +$labels['archivetypesender'] = 'Remitente del correo'; +$labels['unkownsender'] = 'desconocido'; +?> diff --git a/data/web/rc/plugins/archive/localization/es_ES.inc b/data/web/rc/plugins/archive/localization/es_ES.inc new file mode 100644 index 00000000..9d6ff983 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/es_ES.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Archivo'; +$labels['buttontitle'] = 'Archivar este mensaje'; +$labels['archived'] = 'Archivado correctamente'; +$labels['archivedreload'] = 'Archivado correctamente. Recargue la página para ver las nuevas carpetas de archivo.'; +$labels['archiveerror'] = 'No se pudo archivar algunos mensajes'; +$labels['archivefolder'] = 'Archivo'; +$labels['settingstitle'] = 'Archivo'; +$labels['archivetype'] = 'Dividir el archivo por'; +$labels['archivetypeyear'] = 'Año (p.ej. Archivo/2012)'; +$labels['archivetypemonth'] = 'Mes (p.ej. Archivo/2012/06)'; +$labels['archivetypefolder'] = 'Bandeja original'; +$labels['archivetypesender'] = 'Correo electrĂłnico del remitente'; +$labels['unkownsender'] = 'desconocido'; +$labels['readonarchive'] = 'Marcar el mensaje como leĂ­do al archivar'; +?> diff --git a/data/web/rc/plugins/archive/localization/et_EE.inc b/data/web/rc/plugins/archive/localization/et_EE.inc new file mode 100644 index 00000000..c5c70547 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/et_EE.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Arhiveeri'; +$labels['buttontitle'] = 'Arhiveeri see kiri'; +$labels['archived'] = 'Edukalt arhiveeritud'; +$labels['archivedreload'] = 'Arhiveerimine õnnestus. Uute arhiivi kaustada nägemiseks laadi leht uuesti.'; +$labels['archiveerror'] = 'Mõnda kirja ei õnnestusnud arhiveerida'; +$labels['archivefolder'] = 'Arhiiv'; +$labels['settingstitle'] = 'Arhiiv'; +$labels['archivetype'] = 'Jaga arhiiv'; +$labels['archivetypeyear'] = 'Aasta (nt. Arhiiv/2012)'; +$labels['archivetypemonth'] = 'Kuu (nt. Arhiiv/2012/06)'; +$labels['archivetypefolder'] = 'Esialgne kaust'; +$labels['archivetypesender'] = 'Saatja e-post'; +$labels['unkownsender'] = 'teadmata'; +?> diff --git a/data/web/rc/plugins/archive/localization/eu_ES.inc b/data/web/rc/plugins/archive/localization/eu_ES.inc new file mode 100644 index 00000000..e8db2e16 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/eu_ES.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Gorde'; +$labels['buttontitle'] = 'Gorde mezu hau'; +$labels['archived'] = 'Ongi gorde da'; +$labels['archivedreload'] = 'Ongi gorde da. Freskatu orria fitxategi-karpeta berria ikusteko.'; +$labels['archiveerror'] = 'Mezu batzuk ezin dira gorde.'; +$labels['archivefolder'] = 'Gorde'; +$labels['settingstitle'] = 'Gorde'; +$labels['archivetype'] = 'Banatu honen arabera'; +$labels['archivetypeyear'] = 'Urtea (e.b. Archive/2012)'; +$labels['archivetypemonth'] = 'Hilabete (e.b. Archive/2012/06)'; +$labels['archivetypefolder'] = 'Jatorrizko karpeta'; +$labels['archivetypesender'] = 'Bidaltzailearen helbidea'; +$labels['unkownsender'] = 'ezezaguna'; +?> diff --git a/data/web/rc/plugins/archive/localization/fa_AF.inc b/data/web/rc/plugins/archive/localization/fa_AF.inc new file mode 100644 index 00000000..347fdd67 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/fa_AF.inc @@ -0,0 +1,26 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'ارشیŮ'; +$labels['buttontitle'] = 'ارشی٠این پیام'; +$labels['archived'] = 'با Ů…ŮŮŮ‚ŰŚŘŞ ارشی٠شد'; +$labels['archivefolder'] = 'ارشیŮ'; +$labels['settingstitle'] = 'ارشیŮ'; +$labels['archivetypefolder'] = 'ŮľŮشه اصلی'; +$labels['archivetypesender'] = 'ایمیل Ůرستنده'; +$labels['unkownsender'] = 'نا شناس'; +?> diff --git a/data/web/rc/plugins/archive/localization/fa_IR.inc b/data/web/rc/plugins/archive/localization/fa_IR.inc new file mode 100644 index 00000000..e5f67700 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/fa_IR.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'بایگانی'; +$labels['buttontitle'] = 'بایگانی این پیغام'; +$labels['archived'] = 'با Ů…ŮŮŮ‚ŰŚŘŞ بایگانی Ř´ŘŻ'; +$labels['archivedreload'] = 'با کام‌یابی بایگانی Ř´ŘŻ. برای دیدن ŮľŮشه‌های بایگانی جدید صŮحه را مجددا بارگذاری نمایید.'; +$labels['archiveerror'] = 'برخی از پیغام‌ها بایگانی نشدند.'; +$labels['archivefolder'] = 'بایگانی'; +$labels['settingstitle'] = 'بایگانی'; +$labels['archivetype'] = 'تقسیم بایگانی با'; +$labels['archivetypeyear'] = 'سال (به عنŮان مثال بایگانی/۲۰۱۲)'; +$labels['archivetypemonth'] = 'ماه (به عنŮان مثال بایگانی/۲۰۱۲/۰۶)'; +$labels['archivetypefolder'] = 'ŮľŮشه اصلی'; +$labels['archivetypesender'] = 'رایانامه Ůرستنده'; +$labels['unkownsender'] = 'ناشناخته'; +?> diff --git a/data/web/rc/plugins/archive/localization/fi_FI.inc b/data/web/rc/plugins/archive/localization/fi_FI.inc new file mode 100644 index 00000000..5c1bc277 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/fi_FI.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Arkistoi'; +$labels['buttontitle'] = 'Arkistoi viesti'; +$labels['archived'] = 'Arkistoitu onnistuneesti'; +$labels['archivedreload'] = 'Arkistointi onnistui. Päivitä sivu nähdäksesi uudet arkistokansiot.'; +$labels['archiveerror'] = 'Joidenkin viestien arkistointi epäonnistui'; +$labels['archivefolder'] = 'Arkistoi'; +$labels['settingstitle'] = 'Arkistoi'; +$labels['archivetype'] = 'Jaa arkisto'; +$labels['archivetypeyear'] = 'Vuodella (esim. Arkisto/2012)'; +$labels['archivetypemonth'] = 'Kuukaudella (esim. Arkisto/2012/06)'; +$labels['archivetypefolder'] = 'Alkuperäinen kansio'; +$labels['archivetypesender'] = 'Lähettäjän osoite'; +$labels['unkownsender'] = 'tuntematon'; +$labels['readonarchive'] = 'Merkitse viesti luetuksi arkistoon'; +?> diff --git a/data/web/rc/plugins/archive/localization/fo_FO.inc b/data/web/rc/plugins/archive/localization/fo_FO.inc new file mode 100644 index 00000000..b7921fbb --- /dev/null +++ b/data/web/rc/plugins/archive/localization/fo_FO.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Goym Ă­ skjalasavni'; +$labels['buttontitle'] = 'Goym hetta boĂ° Ă­ skjalasavni'; +$labels['archived'] = 'Goymt Ă­ skjalasavn'; +$labels['archivedreload'] = 'Goymt Ă­ skjalasavn. Les inn aftur sĂ­Ă°u fyri at sĂ­ggja nĂ˝ggjar mappur'; +$labels['archiveerror'] = 'Onkur boĂ° kundu ikki leggjast Ă­ skjalagoymslu'; +$labels['archivefolder'] = 'Goym Ă­ skjalasavni'; +$labels['settingstitle'] = 'Goym Ă­ skjalasavni'; +$labels['archivetype'] = 'Deil skjalagoymslu viĂ°'; +$labels['archivetypeyear'] = 'Ăr (t.d. Skjalagoymsla/2012)'; +$labels['archivetypemonth'] = 'Mánar(t.d. Skjalahgoymsla/2012/06)'; +$labels['archivetypefolder'] = 'Uppruna mappa'; +$labels['archivetypesender'] = 'Sendara teldupostur'; +$labels['unkownsender'] = 'Ăłkent'; +?> diff --git a/data/web/rc/plugins/archive/localization/fr_FR.inc b/data/web/rc/plugins/archive/localization/fr_FR.inc new file mode 100644 index 00000000..76ee184c --- /dev/null +++ b/data/web/rc/plugins/archive/localization/fr_FR.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Archiver'; +$labels['buttontitle'] = 'Archiver ce courriel'; +$labels['archived'] = 'ArchivĂ© avec succès'; +$labels['archivedreload'] = 'ArchivĂ© avec succès. Recharger la page pour voir les nouveaux dossiers d\'archives.'; +$labels['archiveerror'] = 'Certains courriels n\'ont pas pu ĂŞtre archivĂ©s.'; +$labels['archivefolder'] = 'Archiver'; +$labels['settingstitle'] = 'Archiver'; +$labels['archivetype'] = 'Diviser l\'archive par'; +$labels['archivetypeyear'] = 'AnnĂ©e (ex. Archives/2012)'; +$labels['archivetypemonth'] = 'Mois (ex. Archives/2012/06)'; +$labels['archivetypefolder'] = 'Dossier original'; +$labels['archivetypesender'] = 'Courriel de l\'expĂ©diteur'; +$labels['unkownsender'] = 'inconnu'; +$labels['readonarchive'] = 'Marquer le courriel comme lu lors de l\'archivage'; +?> diff --git a/data/web/rc/plugins/archive/localization/gl_ES.inc b/data/web/rc/plugins/archive/localization/gl_ES.inc new file mode 100644 index 00000000..489e5690 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/gl_ES.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Arquivo'; +$labels['buttontitle'] = 'Arquivar esta mensaxe'; +$labels['archived'] = 'Aquivouse a mensaxe'; +$labels['archivedreload'] = 'Arquivado correctamente. Recargua a páxina para ver os novos cartafoles de arquivado.'; +$labels['archiveerror'] = 'Non se puideron arquivar algunhas mensaxes'; +$labels['archivefolder'] = 'Arquivo'; +$labels['settingstitle'] = 'Arquivar'; +$labels['archivetype'] = 'Dividir o arquivo por'; +$labels['archivetypeyear'] = 'Ano (p.ex. Arquivo/2012)'; +$labels['archivetypemonth'] = 'Mes (p.ex. Arquivo/2012/06)'; +$labels['archivetypefolder'] = 'Cartafol orixe'; +$labels['archivetypesender'] = 'Enderezo da persoa remitente'; +$labels['unkownsender'] = 'descoñecido'; +?> diff --git a/data/web/rc/plugins/archive/localization/he_IL.inc b/data/web/rc/plugins/archive/localization/he_IL.inc new file mode 100644 index 00000000..06fe416f --- /dev/null +++ b/data/web/rc/plugins/archive/localization/he_IL.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = '×רכיון'; +$labels['buttontitle'] = 'משלוח ההודעה ל×רכיב'; +$labels['archived'] = 'עדכון ×”×רכיון הצליח'; +$labels['archivedreload'] = 'נשמר בהצלחה ב×רכיב. יש לרענו ×ת הדף כדי לר×ות ×ת התיקיות החדשות ב×רכיב.'; +$labels['archiveerror'] = '×ś× × ×™×Ş×ź ×”×™×” להעביר ל×רכיב חלק מההודעות'; +$labels['archivefolder'] = '×רכיון'; +$labels['settingstitle'] = '×רכיב'; +$labels['archivetype'] = 'לחלק ×ת ×”×רכיב על ידי'; +$labels['archivetypeyear'] = 'שנה ( לדוגמה, ×רכיב/2012/96 )'; +$labels['archivetypemonth'] = 'חודש ( לדוגמה, ×רכיב/2012/96 )'; +$labels['archivetypefolder'] = 'תיקיה מקורית'; +$labels['archivetypesender'] = 'שולח ההודעה'; +$labels['unkownsender'] = '×ś× ×™×“×•×˘'; +$labels['readonarchive'] = 'יש לסמן ×ת ההודעה ב×רכיב ×›×ילו נקר××”'; +?> diff --git a/data/web/rc/plugins/archive/localization/hr_HR.inc b/data/web/rc/plugins/archive/localization/hr_HR.inc new file mode 100644 index 00000000..4c8d1835 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/hr_HR.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Arhiva'; +$labels['buttontitle'] = 'Arhiviraj poruku'; +$labels['archived'] = 'Uspješno arhivirano'; +$labels['archivedreload'] = 'Uspješno arhivirano. OsvjeĹľite stranicu kako biste vidjeli nove arhivske mape.'; +$labels['archiveerror'] = 'Neke poruke nije bilo moguće arhivirati'; +$labels['archivefolder'] = 'Arhiva'; +$labels['settingstitle'] = 'Arhiva'; +$labels['archivetype'] = 'Podijeli arhivu po'; +$labels['archivetypeyear'] = 'Godina (npr. Arhiva/2012)'; +$labels['archivetypemonth'] = 'Mjesec (e.g. Arhiva/2012/06)'; +$labels['archivetypefolder'] = 'Izvorna mapa'; +$labels['archivetypesender'] = 'E-mail adresa pošiljatelja'; +$labels['unkownsender'] = 'nepoznato'; +?> diff --git a/data/web/rc/plugins/archive/localization/hu_HU.inc b/data/web/rc/plugins/archive/localization/hu_HU.inc new file mode 100644 index 00000000..c00b6b47 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/hu_HU.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Archiválás'; +$labels['buttontitle'] = 'Ăśzenet archiválása'; +$labels['archived'] = 'Sikeres archiválás'; +$labels['archivedreload'] = 'Az arhiválás sikeres. Frissitsd az oldalt, hogy lásd a lĂ©trejött arhivum mappákat.'; +$labels['archiveerror'] = 'NĂ©hány ĂĽzenetet nem sikerĂĽlt arhiválni'; +$labels['archivefolder'] = 'Archiválás'; +$labels['settingstitle'] = 'Archiválás'; +$labels['archivetype'] = 'ArhĂ­vum tovább bontása a következĹ‘ szerint'; +$labels['archivetypeyear'] = 'Év ( pl ArhĂ­vum/2012)'; +$labels['archivetypemonth'] = 'Honap ( pl ArhĂ­vum/2012/06)'; +$labels['archivetypefolder'] = 'Eredeti mappa'; +$labels['archivetypesender'] = 'FeladĂł'; +$labels['unkownsender'] = 'ismeretlen'; +$labels['readonarchive'] = 'Ăśzenet olvasottkĂ©nt jelölĂ©se arhiváláskor'; +?> diff --git a/data/web/rc/plugins/archive/localization/hy_AM.inc b/data/web/rc/plugins/archive/localization/hy_AM.inc new file mode 100644 index 00000000..adadb3b8 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/hy_AM.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Ô±Ö€Ő­Ő«Őľ'; +$labels['buttontitle'] = 'Ô±Ö€Ő­Ő«ŐľŐˇÖŐ¶ŐĄŐ¬ ŐˇŐµŐ˝ Ő°ŐˇŐ˛Ő¸Ö€Ő¤ŐˇŐŁÖ€Ő¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¨'; +$labels['archived'] = 'Ô˛ŐˇÖ€ŐĄŐ°ŐˇŐ»Ő¸Ő˛ ŐˇÖ€Ő­Ő«ŐľŐˇÖŐľŐĄÖ'; +$labels['archivedreload'] = 'Ô˛ŐˇÖ€ŐĄŐ°ŐˇŐ»Ő¸Ő˛ ŐˇÖ€Ő­Ő«ŐľŐˇÖŐľŐĄÖ: ŐŽŐĄÖ€Ő˘ŐĄŐĽŐ¶ŐĄÖ„ Ő§Ő»Ő¨ Ő¶Ő¸Ö€ ŐˇÖ€Ő­Ő«ŐľŐˇÖŐľŐˇŐ® ŐşŐˇŐ¶ŐˇŐŻŐ¶ŐĄÖ€Ő¨ ŐżŐĄŐ˝Ő¶ŐĄŐ¬Ő¸Ö‚ Ő°ŐˇŐ´ŐˇÖ€:'; +$labels['archiveerror'] = 'ŐÖ€Ő¸Ő· Ő°ŐˇŐ˛Ő¸Ö€Ő¤ŐˇŐŁÖ€Ő¸Ö‚Ő©ŐµŐ¸Ö‚Ő¶Ő¶ŐĄÖ€ Ő°Ő¶ŐˇÖ€ŐˇŐľŐ¸Ö€ ŐąŐ§ ŐˇÖ€Ő­Ő«ŐľŐˇÖŐ¶ŐĄŐ¬'; +$labels['archivefolder'] = 'Ô±Ö€Ő­Ő«Őľ'; +$labels['settingstitle'] = 'Ô±Ö€Ő­Ő«Őľ'; +$labels['archivetype'] = 'Ô˛ŐˇŐŞŐˇŐ¶ŐĄŐ¬ ŐˇÖ€Ő­Ő«ŐľŐ¨'; +$labels['archivetypeyear'] = 'ŐŹŐˇÖ€ŐĄŐ©Ő«Őľ (Ö…Ö€.Őť Ô±Ö€Ő­Ő«Őľ/2012)'; +$labels['archivetypemonth'] = 'Ô±Ő´Ő˝ŐˇŐ©Ő«Őľ (Ö…Ö€.Őť Ô±Ö€Ő­Ő«Őľ/2012/06)'; +$labels['archivetypefolder'] = 'Ô±ŐĽŐˇŐ»Ő«Ő¶ ŐşŐˇŐ¶ŐˇŐŻŐ¨'; +$labels['archivetypesender'] = 'ŐÖ‚Ő˛ŐˇÖ€ŐŻŐ¸Ő˛Ő« Ő§Ő¬-ÖŐ¸Ő˝ŐżŐ¨'; +$labels['unkownsender'] = 'ŐˇŐ¶Ő°ŐˇŐµŐż'; +?> diff --git a/data/web/rc/plugins/archive/localization/ia.inc b/data/web/rc/plugins/archive/localization/ia.inc new file mode 100644 index 00000000..aa0d4320 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/ia.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Archivar'; +$labels['buttontitle'] = 'Archivar iste message'; +$labels['archived'] = 'Archivate con successo'; +$labels['archivedreload'] = 'Archivate con successo. Recarga le pagina pro vider le nove dossieres de archivo.'; +$labels['archiveerror'] = 'Alcun messages non poteva esser archivate'; +$labels['archivefolder'] = 'Archivo'; +$labels['settingstitle'] = 'Archivo'; +$labels['archivetype'] = 'Divider le archivo per'; +$labels['archivetypeyear'] = 'Anno (p.ex. Archivo/2012)'; +$labels['archivetypemonth'] = 'Mense (p.ex. Archivo/2012/06)'; +$labels['archivetypefolder'] = 'Dossier original'; +$labels['archivetypesender'] = 'E-mail del expeditor'; +$labels['unkownsender'] = 'incognite'; +?> diff --git a/data/web/rc/plugins/archive/localization/id_ID.inc b/data/web/rc/plugins/archive/localization/id_ID.inc new file mode 100644 index 00000000..8b5192f4 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/id_ID.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Arsip'; +$labels['buttontitle'] = 'Arsipkan pesan ini'; +$labels['archived'] = 'Berhasil mengarsipkan'; +$labels['archivedreload'] = 'Berhasil diarsipkan. Reload halaman untuk melihat folder arsip baru.'; +$labels['archiveerror'] = 'Beberapa pesan tidak dapat diarsipkan'; +$labels['archivefolder'] = 'Arsip'; +$labels['settingstitle'] = 'Arsip'; +$labels['archivetype'] = 'Pisah arsip berdasarkan'; +$labels['archivetypeyear'] = 'Tahun (contoh: Arsip/2012)'; +$labels['archivetypemonth'] = 'Bulan (contoh: Arsip/2012/06)'; +$labels['archivetypefolder'] = 'Folder asli'; +$labels['archivetypesender'] = 'Email pengirim'; +$labels['unkownsender'] = 'Tidak dikenal'; +$labels['readonarchive'] = 'Tandai pesan telah dibaca di arsip'; +?> diff --git a/data/web/rc/plugins/archive/localization/it_IT.inc b/data/web/rc/plugins/archive/localization/it_IT.inc new file mode 100644 index 00000000..63f72aea --- /dev/null +++ b/data/web/rc/plugins/archive/localization/it_IT.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Archivio'; +$labels['buttontitle'] = 'Archivia questo messaggio'; +$labels['archived'] = 'Archiviato correttamente'; +$labels['archivedreload'] = 'Archiviata con successo. Ricarica la pagina per visualizzare le nuove cartelle.'; +$labels['archiveerror'] = 'Alcuni messaggi non possono essere archiviati'; +$labels['archivefolder'] = 'Archivio'; +$labels['settingstitle'] = 'Archivio'; +$labels['archivetype'] = 'Dividi archivio per'; +$labels['archivetypeyear'] = 'Anno (es. Archivio/2012)'; +$labels['archivetypemonth'] = 'Mese (es. Archivio/2012/06)'; +$labels['archivetypefolder'] = 'Cartella di origine'; +$labels['archivetypesender'] = 'Mittente email'; +$labels['unkownsender'] = 'sconosciuto'; +$labels['readonarchive'] = 'Segna i messaggi in archivio come letti'; +?> diff --git a/data/web/rc/plugins/archive/localization/ja_JP.inc b/data/web/rc/plugins/archive/localization/ja_JP.inc new file mode 100644 index 00000000..8c894caa --- /dev/null +++ b/data/web/rc/plugins/archive/localization/ja_JP.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'アăĽă‚«ă‚¤ă–'; +$labels['buttontitle'] = 'ă“ă®ăˇăă‚»ăĽă‚¸ă‚’アăĽă‚«ă‚¤ă–'; +$labels['archived'] = 'アăĽă‚«ă‚¤ă–ă—ăľă—ăźă€‚'; +$labels['archivedreload'] = 'アăĽă‚«ă‚¤ă–ă—ăľă—ăźă€‚ăšăĽă‚¸ă‚’再読ăżčľĽăżă™ă‚‹ă¨ă€ć–°ă—ă„アăĽă‚«ă‚¤ă–ă®ă•ă‚©ă«ă€ăĽă‚’表示ă—ăľă™ă€‚'; +$labels['archiveerror'] = 'アăĽă‚«ă‚¤ă–ă§ăŤăŞă„ăˇăă‚»ăĽă‚¸ăŚă‚ă‚Šăľă—ăź'; +$labels['archivefolder'] = 'アăĽă‚«ă‚¤ă–'; +$labels['settingstitle'] = 'アăĽă‚«ă‚¤ă–'; +$labels['archivetype'] = 'アăĽă‚«ă‚¤ă–ă‚’ĺ†ĺ‰˛: '; +$labels['archivetypeyear'] = 'ĺą´ (äľ‹: アăĽă‚«ă‚¤ă–/2012)'; +$labels['archivetypemonth'] = 'ćś (e.g. アăĽă‚«ă‚¤ă–/2012/06)'; +$labels['archivetypefolder'] = 'ĺ…ă®ă•ă‚©ă«ă€ăĽ'; +$labels['archivetypesender'] = 'é›»ĺ­ăˇăĽă«ă®é€äżˇč€…'; +$labels['unkownsender'] = '不ćŽ'; +$labels['readonarchive'] = 'アăĽă‚«ă‚¤ă–ă§ăˇăă‚»ăĽă‚¸ă‚’既読ă«č¨­ĺ®š'; +?> diff --git a/data/web/rc/plugins/archive/localization/km_KH.inc b/data/web/rc/plugins/archive/localization/km_KH.inc new file mode 100644 index 00000000..24fe0235 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/km_KH.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'áž”áźážŽáź’ណសារ'; +$labels['buttontitle'] = 'ធ្វើ​សារ​នáźáź‡â€‹áž‡áž¶â€‹áž”ណ្ណសារ'; +$labels['archived'] = 'ធ្វើ​ជា​បណ្ណសារ​បាន​សážáź’ážšáźáž…'; +$labels['archivedreload'] = 'ធ្វើ​ជា​បណ្ណសារ​បាន​សážáź’ážšáźáž…áź” ផ្ទុក​ទំពáźážšâ€‹ážˇážľáž„​វិញ ដើážáź’បី​ážážľáž›â€‹ážážŹâ€‹áž”ណ្ណសារ​ážáź’ážáž¸áź”'; +$labels['archiveerror'] = 'សារ​ážáź’លះ​ážáž·áž“​អាច​ត្រូវ​បាន​ធ្វើ​ជា​បណ្ណសារ​ទáź'; +$labels['archivefolder'] = 'áž”áźážŽáź’ណសារ'; +$labels['settingstitle'] = 'បណ្ណសារ'; +$labels['archivetype'] = 'ចែក​បណ្ណសារ​តាáž'; +$labels['archivetypeyear'] = 'ឆ្នាំ (ឧទា. បណ្ណសារ/2012)'; +$labels['archivetypemonth'] = 'ážáź‚ (ឧទា. បណ្ណសារ/2012/06)'; +$labels['archivetypefolder'] = 'ážážŹâ€‹ážŠážľáž'; +$labels['archivetypesender'] = 'អ្នក​ផ្ញើ​អ៊ីážáź‚áž›'; +$labels['unkownsender'] = 'ážáž·áž“​ស្គាល់'; +?> diff --git a/data/web/rc/plugins/archive/localization/ko_KR.inc b/data/web/rc/plugins/archive/localization/ko_KR.inc new file mode 100644 index 00000000..0e12389b --- /dev/null +++ b/data/web/rc/plugins/archive/localization/ko_KR.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'ëł´ę´€'; +$labels['buttontitle'] = 'ěť´ 메시지를 ëł´ę´€í•¨ě— ě €ěžĄ'; +$labels['archived'] = '성공ě ěśĽëˇś 보관함'; +$labels['archivedreload'] = '성공ě ěśĽëˇś ëł´ę´€ëě—습ë‹ë‹¤. íŽěť´ě§€ëĄĽ 다시 ë¶ëź¬ě™€ě„ś ě로운 보관함 폴더를 확인í•ě„¸ěš”.'; +$labels['archiveerror'] = '일부 메시지가 ëł´ę´€ë지 않음'; +$labels['archivefolder'] = 'ëł´ę´€'; +$labels['settingstitle'] = 'ëł´ę´€'; +$labels['archivetype'] = 'ëł´ę´€ëś ë©”ě‹śě§€ 정리 기준'; +$labels['archivetypeyear'] = '연도 (ě: ëł´ę´€/2012)'; +$labels['archivetypemonth'] = 'ě›” (ě: ëł´ę´€/2012/06)'; +$labels['archivetypefolder'] = 'ě›ëł¸ 폴더'; +$labels['archivetypesender'] = 'ë°śě†ˇěž ěť´ë©”ěťĽ'; +$labels['unkownsender'] = 'ě•Ś ě 없음'; +$labels['readonarchive'] = '편지 보관함ě—ě„ś 메시지를 읽음으로 í‘śě‹ś'; +?> diff --git a/data/web/rc/plugins/archive/localization/ku.inc b/data/web/rc/plugins/archive/localization/ku.inc new file mode 100644 index 00000000..0173c796 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/ku.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Arşîv'; +$labels['buttontitle'] = 'vĂŞ peyamĂŞ arşîv bike'; +$labels['archived'] = 'Bi serkeftin hat arşîvkirin'; +$labels['archivedreload'] = 'Bi serkeftin hat arşîvkirin. RĂ»pelĂŞ dĂ®sa bar bike da dosyeyĂŞn arşîvĂŞ yĂŞn nĂ» bibĂ®nĂ®.'; +$labels['archiveerror'] = 'Hin peyam nehatin arşîvkirin.'; +$labels['archivefolder'] = 'Arşîv'; +$labels['settingstitle'] = 'Arşîv'; +$labels['archivetype'] = 'ArşîvĂŞ dabeşîne'; +$labels['archivetypeyear'] = 'Sal (wek Arşîv/2012)'; +$labels['archivetypemonth'] = 'Meh (wek Arşîv/2012/06)'; +$labels['archivetypefolder'] = 'Dosyeya resen'; +$labels['archivetypesender'] = 'Emaila Ĺźandyar'; +$labels['unkownsender'] = 'nenas'; +?> diff --git a/data/web/rc/plugins/archive/localization/ku_IQ.inc b/data/web/rc/plugins/archive/localization/ku_IQ.inc new file mode 100644 index 00000000..1408ac07 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/ku_IQ.inc @@ -0,0 +1,22 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'ئەرشیŮ'; +$labels['archivefolder'] = 'ئەرشیŮ'; +$labels['settingstitle'] = 'ئەرشیŮ'; +$labels['unkownsender'] = 'نەناسراŮ'; +?> diff --git a/data/web/rc/plugins/archive/localization/lb_LU.inc b/data/web/rc/plugins/archive/localization/lb_LU.inc new file mode 100644 index 00000000..b72b185e --- /dev/null +++ b/data/web/rc/plugins/archive/localization/lb_LU.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'ArchivĂ©ieren'; +$labels['buttontitle'] = 'DĂ«se Message archivĂ©ieren'; +$labels['archived'] = 'Erfollegräich archivĂ©iert'; +$labels['archivedreload'] = 'Erfollegräich archivĂ©iert. Lued d\'Säit nei fir dĂ©i neisten Archiv-Dossieren ze gesinn.'; +$labels['archiveerror'] = 'Verschidde MessagĂ« konnten net archivĂ©iert ginn'; +$labels['archivefolder'] = 'Archiv'; +$labels['settingstitle'] = 'Archiv'; +$labels['archivetype'] = 'Archiv dividĂ©ieren duerch'; +$labels['archivetypeyear'] = 'Joer (z.B. Archiv/2013)'; +$labels['archivetypemonth'] = 'Mount (z.B. Archiv/2013/06)'; +$labels['archivetypefolder'] = 'Original-Dossier'; +$labels['archivetypesender'] = 'Sender-E-Mail'; +$labels['unkownsender'] = 'onbekannt'; +?> diff --git a/data/web/rc/plugins/archive/localization/lt_LT.inc b/data/web/rc/plugins/archive/localization/lt_LT.inc new file mode 100644 index 00000000..2448596a --- /dev/null +++ b/data/web/rc/plugins/archive/localization/lt_LT.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Archyvuoti'; +$labels['buttontitle'] = 'Perkelti šį laiškÄ… ÄŻ archyvÄ…'; +$labels['archived'] = 'Laiškas sÄ—kmingai perkeltas ÄŻ archyvÄ…'; +$labels['archivedreload'] = 'SÄ—kmingai perkelta ÄŻ archyvÄ…. Iš naujo ÄŻkelkite puslapÄŻ, kad pamatytumÄ—t pasikeitimus.'; +$labels['archiveerror'] = 'Ä® archyvÄ… nepavyko perkelti keleto laiškĹł.'; +$labels['archivefolder'] = 'Archyvuoti'; +$labels['settingstitle'] = 'Archyvuoti'; +$labels['archivetype'] = 'Padalinti archyvÄ… pagal'; +$labels['archivetypeyear'] = 'Metai (pvz. Archyvas/2012)'; +$labels['archivetypemonth'] = 'MÄ—nesis (pvz. Archyvas/2012/06)'; +$labels['archivetypefolder'] = 'Tikrasis aplankas'; +$labels['archivetypesender'] = 'SiuntÄ—jo el. pašto adresas'; +$labels['unkownsender'] = 'neĹľinomas'; +?> diff --git a/data/web/rc/plugins/archive/localization/lv_LV.inc b/data/web/rc/plugins/archive/localization/lv_LV.inc new file mode 100644 index 00000000..0bd04740 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/lv_LV.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'ArhÄ«vs'; +$labels['buttontitle'] = 'ArhivÄ“t šo vÄ“stuli'; +$labels['archived'] = 'VÄ“stule veiksmÄ«gi arhivÄ“ta'; +$labels['archivedreload'] = 'ArhÄ«vs veiksmÄ«gi izveidots. Lai redzÄ“tu jaunÄs arhÄ«va mapes, pÄrlÄdÄ“jiet lapu.'; +$labels['archiveerror'] = 'DaĹľas vÄ“stules nebija iespÄ“jams arhivÄ“t'; +$labels['archivefolder'] = 'ArhÄ«vs'; +$labels['settingstitle'] = 'ArhÄ«vs'; +$labels['archivetype'] = 'SadalÄ«t arhÄ«vu pa'; +$labels['archivetypeyear'] = 'Gadiem (piem. ArhÄ«vs/2012)'; +$labels['archivetypemonth'] = 'MÄ“nešiem (piem. ArhÄ«vs/2012/06)'; +$labels['archivetypefolder'] = 'SÄkotnÄ“jÄ mape'; +$labels['archivetypesender'] = 'SĹ«tÄ«tÄja e-pasts'; +$labels['unkownsender'] = 'nezinÄms'; +?> diff --git a/data/web/rc/plugins/archive/localization/ml_IN.inc b/data/web/rc/plugins/archive/localization/ml_IN.inc new file mode 100644 index 00000000..2e0d010d --- /dev/null +++ b/data/web/rc/plugins/archive/localization/ml_IN.inc @@ -0,0 +1,22 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'ശേഖരം'; +$labels['buttontitle'] = 'ഠമെസ്സേജ് ശേഖരിക്കŕµŕ´•'; +$labels['archived'] = 'വിജയകരമായി ശേഖരിച്ചŕµ'; +$labels['archivefolder'] = 'ശേഖരം'; +?> diff --git a/data/web/rc/plugins/archive/localization/mn_MN.inc b/data/web/rc/plugins/archive/localization/mn_MN.inc new file mode 100644 index 00000000..7db80f15 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/mn_MN.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Đрхив'; +$labels['buttontitle'] = 'Энэ Đ·ŃрваŃŃ‹Đł архивлах'; +$labels['archived'] = 'Đмжилттай архивлагдлаа'; +$labels['archivedreload'] = 'Đмжилттай архивлагдлаа. ĐĄŃŃĐ´ŃŃ‹Đł дахин Đ´ŃŃдаж Ńинэ ŇŻŇŻŃŃŃŤĐ˝ архив хавтŃŃ‹Đł харна ŃŃ.'; +$labels['archiveerror'] = 'Зарим Đ·ŃŃ€Đ˛Đ°Ń Đ°Ń€Ń…Đ¸Đ˛Đ»Đ°ĐłĐ´Đ°Đ¶ чадахгүй'; +$labels['archivefolder'] = 'Đрхив'; +$labels['settingstitle'] = 'Đрхив'; +$labels['archivetype'] = 'Đрхивыг дараахаар ялга: '; +$labels['archivetypeyear'] = 'Он (жиŃ: Đрхив/2012)'; +$labels['archivetypemonth'] = 'Сар (жиŃ: Đрхив/2012/06)'; +$labels['archivetypefolder'] = 'Жинхэнэ хавтаŃ'; +$labels['archivetypesender'] = 'Đлгээгчийн мэйл Ń…Đ°ŃŹĐł'; +$labels['unkownsender'] = 'мэдэгдэхгүй'; +?> diff --git a/data/web/rc/plugins/archive/localization/mr_IN.inc b/data/web/rc/plugins/archive/localization/mr_IN.inc new file mode 100644 index 00000000..4e542881 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/mr_IN.inc @@ -0,0 +1,22 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'जतन केलेला'; +$labels['buttontitle'] = 'हा संदेश जतन करा'; +$labels['archived'] = 'यशस्वीरीत्या जतन केला'; +$labels['archivefolder'] = 'जतन केलेला'; +?> diff --git a/data/web/rc/plugins/archive/localization/nb_NO.inc b/data/web/rc/plugins/archive/localization/nb_NO.inc new file mode 100644 index 00000000..b78fdd97 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/nb_NO.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Arkiv'; +$labels['buttontitle'] = 'Arkiver meldingen'; +$labels['archived'] = 'Arkivert'; +$labels['archivedreload'] = 'Arkivering vellykket. Last inn siden pĂĄ nytt for ĂĄ se de nye arkivmappene.'; +$labels['archiveerror'] = 'Noen meldinger kunne ikke arkiveres'; +$labels['archivefolder'] = 'Arkiv'; +$labels['settingstitle'] = 'Arkiv'; +$labels['archivetype'] = 'Del arkiv etter'; +$labels['archivetypeyear'] = 'Ă…r (f.eks. Arkiv/2012)'; +$labels['archivetypemonth'] = 'MĂĄned (f.eks. Arkiv/2012/06)'; +$labels['archivetypefolder'] = 'Opprinnelig mappe'; +$labels['archivetypesender'] = 'Avsender'; +$labels['unkownsender'] = 'ukjent'; +?> diff --git a/data/web/rc/plugins/archive/localization/nl_NL.inc b/data/web/rc/plugins/archive/localization/nl_NL.inc new file mode 100644 index 00000000..e1bc1bc8 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/nl_NL.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Archief'; +$labels['buttontitle'] = 'Archiveer dit bericht'; +$labels['archived'] = 'Succesvol gearchiveerd'; +$labels['archivedreload'] = 'Succesvol gearchiveerd. Herlaad de pagina om de nieuwe archiefmappen te bekijken.'; +$labels['archiveerror'] = 'Sommige berichten kunnen niet gearchiveerd worden'; +$labels['archivefolder'] = 'Archief'; +$labels['settingstitle'] = 'Archiveren'; +$labels['archivetype'] = 'Archief opdelen in'; +$labels['archivetypeyear'] = 'Jaar (bijv. Archief/2012)'; +$labels['archivetypemonth'] = 'Maand (bijv. Archief/2012/06)'; +$labels['archivetypefolder'] = 'Originele map'; +$labels['archivetypesender'] = 'Afzender e-mail'; +$labels['unkownsender'] = 'onbekend'; +?> diff --git a/data/web/rc/plugins/archive/localization/nn_NO.inc b/data/web/rc/plugins/archive/localization/nn_NO.inc new file mode 100644 index 00000000..5849b7ba --- /dev/null +++ b/data/web/rc/plugins/archive/localization/nn_NO.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Arkiver'; +$labels['buttontitle'] = 'Arkiver meldinga'; +$labels['archived'] = 'Arkivert'; +$labels['archivedreload'] = 'Arkivering vellukka. Last inn sida pĂĄ nytt for ĂĄ sjĂĄ dei nye arkivmappene.'; +$labels['archiveerror'] = 'Nokre meldingar kunne ikkje arkiverast'; +$labels['archivefolder'] = 'Arkiver'; +$labels['settingstitle'] = 'Arkiv'; +$labels['archivetype'] = 'Del arkiv etter'; +$labels['archivetypeyear'] = 'Ă…r (f.eks. Arkiv/2012)'; +$labels['archivetypemonth'] = 'MĂĄnad (f.eks. Arkiv/2012/06)'; +$labels['archivetypefolder'] = 'Opprinneleg mappe'; +$labels['archivetypesender'] = 'Avsendar'; +$labels['unkownsender'] = 'ukjent'; +?> diff --git a/data/web/rc/plugins/archive/localization/pl_PL.inc b/data/web/rc/plugins/archive/localization/pl_PL.inc new file mode 100644 index 00000000..35c9ea9d --- /dev/null +++ b/data/web/rc/plugins/archive/localization/pl_PL.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Archiwum'; +$labels['buttontitle'] = 'PrzenieĹ› do archiwum'; +$labels['archived'] = 'PomyĹ›lnie zarchiwizowano'; +$labels['archivedreload'] = 'PomyĹ›lnie zarchiwizowano. OdĹ›wieĹĽ stronÄ™ aby zobaczyć nowe foldery.'; +$labels['archiveerror'] = 'Nie moĹĽna zarchiwizować niektĂłrych wiadomoĹ›ci'; +$labels['archivefolder'] = 'Archiwum'; +$labels['settingstitle'] = 'Archiwum'; +$labels['archivetype'] = 'Podziel archiwum wg'; +$labels['archivetypeyear'] = 'Roku (np. Archiwum/2012)'; +$labels['archivetypemonth'] = 'MiesiÄ…ca (np. Archiwum/2012/06)'; +$labels['archivetypefolder'] = 'Oryginalny folder'; +$labels['archivetypesender'] = 'E-mail nadawcy'; +$labels['unkownsender'] = 'nieznany'; +$labels['readonarchive'] = 'Podczas archiwizowania oznacz wiadomość jako przeczytanÄ…'; +?> diff --git a/data/web/rc/plugins/archive/localization/pt_BR.inc b/data/web/rc/plugins/archive/localization/pt_BR.inc new file mode 100644 index 00000000..a5b198b7 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/pt_BR.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Arquivo'; +$labels['buttontitle'] = 'Arquivar esta mensagem'; +$labels['archived'] = 'Arquivada com sucesso'; +$labels['archivedreload'] = 'Arquivado com sucesso. Recarregue a página para ver as novas pastas de arquivo.'; +$labels['archiveerror'] = 'Algumas mensagens nĂŁo puderam ser arquivadas'; +$labels['archivefolder'] = 'Arquivo'; +$labels['settingstitle'] = 'Arquivo'; +$labels['archivetype'] = 'Dividir arquivo por'; +$labels['archivetypeyear'] = 'Ano (isto Ă©, Arquivo/2012)'; +$labels['archivetypemonth'] = 'MĂŞs (isto Ă©, Arquivo/2012/06)'; +$labels['archivetypefolder'] = 'Pasta original'; +$labels['archivetypesender'] = 'E-mail do remetente'; +$labels['unkownsender'] = 'desconhecido'; +$labels['readonarchive'] = 'Marcar a mensagem como lida ao arquivar'; +?> diff --git a/data/web/rc/plugins/archive/localization/pt_PT.inc b/data/web/rc/plugins/archive/localization/pt_PT.inc new file mode 100644 index 00000000..bbcdeb7c --- /dev/null +++ b/data/web/rc/plugins/archive/localization/pt_PT.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Arquivo'; +$labels['buttontitle'] = 'Arquivar esta mensagem'; +$labels['archived'] = 'Arquivada com sucesso'; +$labels['archivedreload'] = 'Arquivado com sucesso. Recarregue a página para ver as novas pastas de arquivo.'; +$labels['archiveerror'] = 'Algumas mensagens nĂŁo puderam ser arquivadas'; +$labels['archivefolder'] = 'Arquivo'; +$labels['settingstitle'] = 'Arquivo'; +$labels['archivetype'] = 'Dividir arquivo por'; +$labels['archivetypeyear'] = 'Ano (ex. Arquivo/2012)'; +$labels['archivetypemonth'] = 'MĂŞs (ex. Arquivo/2012/06)'; +$labels['archivetypefolder'] = 'Pasta original'; +$labels['archivetypesender'] = 'E-mail do remetente'; +$labels['unkownsender'] = 'desconhecido'; +$labels['readonarchive'] = 'Marcar a mensagem como lida ao arquivar'; +?> diff --git a/data/web/rc/plugins/archive/localization/ro_RO.inc b/data/web/rc/plugins/archive/localization/ro_RO.inc new file mode 100644 index 00000000..632b5bcb --- /dev/null +++ b/data/web/rc/plugins/archive/localization/ro_RO.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'ArhivÄ'; +$labels['buttontitle'] = 'ArhiveazÄ mesajul.'; +$labels['archived'] = 'Arhivare reuĹźitÄ.'; +$labels['archivedreload'] = 'Arhivat cu succes. ReĂ®ncÄrcaČ›i pagina pentru a vedea noul dosar de arhivare.'; +$labels['archiveerror'] = 'Unele mesaje nu au putut fi arhivate'; +$labels['archivefolder'] = 'ArhivÄ'; +$labels['settingstitle'] = 'ArhivÄ'; +$labels['archivetype'] = 'ĂŽmparte arhiva pe'; +$labels['archivetypeyear'] = 'Ani (ex. Arhiva/2013)'; +$labels['archivetypemonth'] = 'Luni (ex. Arhiva/2013/06)'; +$labels['archivetypefolder'] = 'Dosar original'; +$labels['archivetypesender'] = 'E-mail expeditor'; +$labels['unkownsender'] = 'necunoscut'; +?> diff --git a/data/web/rc/plugins/archive/localization/ru_RU.inc b/data/web/rc/plugins/archive/localization/ru_RU.inc new file mode 100644 index 00000000..5da94122 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/ru_RU.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Đрхив'; +$labels['buttontitle'] = 'ПеремеŃтить выбранное в архив'; +$labels['archived'] = 'ПеренеŃено в Đрхив'; +$labels['archivedreload'] = 'ĐŁŃпеŃно заархивировано. Обновите ŃтраницŃ, чтобы Ńвидеть новые папки архива.'; +$labels['archiveerror'] = 'Некоторые Ńообщения не могŃŃ‚ быть заархивированы'; +$labels['archivefolder'] = 'Đрхив'; +$labels['settingstitle'] = 'Đрхив'; +$labels['archivetype'] = 'Разделить архив по'; +$labels['archivetypeyear'] = 'Год (например, Đрхив/2012)'; +$labels['archivetypemonth'] = 'МеŃяц (например, Đрхив/2012/06)'; +$labels['archivetypefolder'] = 'ĐŃходная папка'; +$labels['archivetypesender'] = 'ĐĐ´Ń€ĐµŃ ĐľŃ‚ĐżŃ€Đ°Đ˛Đ¸Ń‚ĐµĐ»ŃŹ'; +$labels['unkownsender'] = 'неизвеŃтно'; +$labels['readonarchive'] = 'Помечать как прочитанное при архивировании'; +?> diff --git a/data/web/rc/plugins/archive/localization/si_LK.inc b/data/web/rc/plugins/archive/localization/si_LK.inc new file mode 100644 index 00000000..a6807f53 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/si_LK.inc @@ -0,0 +1,22 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'ŕ·ŕ¶‚රක්‍ෂණය'; +$labels['buttontitle'] = 'මෙම පණිවිඩය ŕ·ŕ¶‚රක්‍ෂණය කරන්න'; +$labels['archived'] = 'ŕ·ŕ¶‚රක්‍ෂණය ŕ·ŕ·Źŕ¶»ŕ·Šŕ¶®ŕ¶šŕ¶şŕ·’'; +$labels['archivefolder'] = 'ŕ·ŕ¶‚රක්‍ෂණය'; +?> diff --git a/data/web/rc/plugins/archive/localization/sk_SK.inc b/data/web/rc/plugins/archive/localization/sk_SK.inc new file mode 100644 index 00000000..b4c527f6 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/sk_SK.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'ArchivovaĹĄ'; +$labels['buttontitle'] = 'ArchivovaĹĄ tĂşto správu'; +$labels['archived'] = 'Ăšspešne uloĹľenĂ© do archĂ­vu'; +$labels['archivedreload'] = 'Archivovanie bolo Ăşspešne dokonÄŤenĂ©. Ak si chcete prezrieĹĄ novĂ© archĂ­vne prieÄŤinky, obnovte stránku.'; +$labels['archiveerror'] = 'NiektorĂ© správy nebolo moĹľnĂ© archivovaĹĄ'; +$labels['archivefolder'] = 'ArchivovaĹĄ'; +$labels['settingstitle'] = 'ArchĂ­v'; +$labels['archivetype'] = 'RozdeliĹĄ archĂ­v po'; +$labels['archivetypeyear'] = 'rokoch (naprĂ­klad ArchĂ­v/2012)'; +$labels['archivetypemonth'] = 'mesiacoch (naprĂ­klad ArchĂ­v/2012/06)'; +$labels['archivetypefolder'] = 'PĂ´vodnĂ˝ prieÄŤinok'; +$labels['archivetypesender'] = 'E-mailová adresa odosielateÄľa'; +$labels['unkownsender'] = 'neznámy'; +$labels['readonarchive'] = 'Pri archivovanĂ­ oznaÄŤiĹĄ správu ako preÄŤĂ­tanĂş'; +?> diff --git a/data/web/rc/plugins/archive/localization/sl_SI.inc b/data/web/rc/plugins/archive/localization/sl_SI.inc new file mode 100644 index 00000000..a2703807 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/sl_SI.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Arhiv'; +$labels['buttontitle'] = 'Arhiviraj to sporoÄŤilo'; +$labels['archived'] = 'SporoÄŤilo je bilo uspešno arhivirano'; +$labels['archivedreload'] = 'Uspešno shranjeno v arhiv. Za pregled map v Arhivu ponovno naloĹľite stran.'; +$labels['archiveerror'] = 'Nekaterih sporoÄŤil ni bilo mogoÄŤe arhivirati'; +$labels['archivefolder'] = 'Arhiv'; +$labels['settingstitle'] = 'Arhiv'; +$labels['archivetype'] = 'Razdeli arhiv glede na'; +$labels['archivetypeyear'] = 'Leto (npr. Arhiv/2012)'; +$labels['archivetypemonth'] = 'Mesec (npr. Arhiv/2012/06)'; +$labels['archivetypefolder'] = 'Izvorna mapa'; +$labels['archivetypesender'] = 'Naslov pošiljatelja'; +$labels['unkownsender'] = 'neznan'; +$labels['readonarchive'] = 'Ob arhiviranju oznaÄŤi sporoÄŤilo kot prebrano'; +?> diff --git a/data/web/rc/plugins/archive/localization/sq_AL.inc b/data/web/rc/plugins/archive/localization/sq_AL.inc new file mode 100644 index 00000000..d98e4f54 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/sq_AL.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Arkivoje'; +$labels['buttontitle'] = 'Arkivoje kĂ«tĂ« mesazh'; +$labels['archived'] = 'U arkivua me sukses'; +$labels['archivedreload'] = 'U arkivua me sukses. Ringarkoni faqen qĂ« tĂ« shihni dosjet e reja arkiv.'; +$labels['archiveerror'] = 'Ca nga mesazhet s’u arkivuan dot'; +$labels['archivefolder'] = 'Arkivoje'; +$labels['settingstitle'] = 'Arkivoje'; +$labels['archivetype'] = 'Ndaje arkivin sipas'; +$labels['archivetypeyear'] = 'Vit (p.sh. Arkiv/2012)'; +$labels['archivetypemonth'] = 'Muaj (p.sh. Arkiv/2012/06)'; +$labels['archivetypefolder'] = 'Dosje origjinale'; +$labels['archivetypesender'] = 'Email dĂ«rguesi'; +$labels['unkownsender'] = 'e panjohur'; +$labels['readonarchive'] = 'I vini shenjĂ« si tĂ« lexuar mesazhit nĂ« arkiv'; +?> diff --git a/data/web/rc/plugins/archive/localization/sr_CS.inc b/data/web/rc/plugins/archive/localization/sr_CS.inc new file mode 100644 index 00000000..a4c86a81 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/sr_CS.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'ĐрхивираŃ'; +$labels['buttontitle'] = 'ĐŃ€Ń…Đ¸Đ˛Đ¸Ń€Đ°Ń ĐľĐ˛Ń ĐżĐľŃ€ŃĐşŃ'; +$labels['archived'] = 'ĐŁŃпеŃно архивирано'; +$labels['archivedreload'] = 'ĐŁŃпеŃно архивирано. Поново ŃчитаŃте ŃŃ‚Ń€Đ°Đ˝Ń Đ´Đ° видите нове архивиране Ń„Đ°Ńцикле.'; +$labels['archiveerror'] = 'Неке порŃке Ńе ниŃŃ ĐĽĐľĐłĐ»Đµ архивирати'; +$labels['archivefolder'] = 'Đрхива'; +$labels['settingstitle'] = 'Đрхивирање'; +$labels['archivetype'] = 'РазврŃŃ‚Đ°Ń Đ°Ń€Ń…Đ¸Đ˛Đµ по'; +$labels['archivetypeyear'] = 'години (нпр. Đрхива/2015)'; +$labels['archivetypemonth'] = 'меŃĐµŃ†Ń (нпр. Đрхива/2015/03)'; +$labels['archivetypefolder'] = 'Đ¸Đ·Đ˛ĐľŃ€Đ˝ĐľŃ Ń„Đ°Ńцикли'; +$labels['archivetypesender'] = 'адреŃи поŃиљаоца'; +$labels['unkownsender'] = 'непознат'; +?> diff --git a/data/web/rc/plugins/archive/localization/sv_SE.inc b/data/web/rc/plugins/archive/localization/sv_SE.inc new file mode 100644 index 00000000..6f6683a8 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/sv_SE.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Arkivera'; +$labels['buttontitle'] = 'Arkivera meddelande'; +$labels['archived'] = 'Meddelandet är arkiverat'; +$labels['archivedreload'] = 'Meddelandet är arkiverat. Ladda om sidan för att se de nya arkivkatalogerna.'; +$labels['archiveerror'] = 'NĂĄgra meddelanden kunde inte arkiveras'; +$labels['archivefolder'] = 'Arkiv'; +$labels['settingstitle'] = 'Arkiv'; +$labels['archivetype'] = 'Uppdelning av arkiv'; +$labels['archivetypeyear'] = 'Ă…r (ex. Arkiv/2012)'; +$labels['archivetypemonth'] = 'MĂĄnad (ex. Arkiv/2012/06)'; +$labels['archivetypefolder'] = 'Ursprunglig katalog'; +$labels['archivetypesender'] = 'Avsändaradress'; +$labels['unkownsender'] = 'Okänd'; +$labels['readonarchive'] = 'Märk meddelande som läst vid arkivering'; +?> diff --git a/data/web/rc/plugins/archive/localization/tr_TR.inc b/data/web/rc/plugins/archive/localization/tr_TR.inc new file mode 100644 index 00000000..b1be16c6 --- /dev/null +++ b/data/web/rc/plugins/archive/localization/tr_TR.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'ArĹźivle'; +$labels['buttontitle'] = 'Bu iletiyi arĹźivle'; +$labels['archived'] = 'ArĹźivlendi.'; +$labels['archivedreload'] = 'ArĹźivlendi. Yeni arĹźiv klasörlerini görmek için sayfayı yenileyin.'; +$labels['archiveerror'] = 'Bazı iletiler arĹźivlenemedi'; +$labels['archivefolder'] = 'ArĹźiv'; +$labels['settingstitle'] = 'ArĹźiv'; +$labels['archivetype'] = 'ArĹźivleme Ĺźuna göre yapılsın'; +$labels['archivetypeyear'] = 'Yıl (ArĹźiv/2012)'; +$labels['archivetypemonth'] = 'Ay (ArĹźiv/2012/06)'; +$labels['archivetypefolder'] = 'Ă–zgĂĽn dosya'; +$labels['archivetypesender'] = 'Gönderici adresi'; +$labels['unkownsender'] = 'bilinmeyen'; +$labels['readonarchive'] = 'ArĹźivdeki ileti okunmuĹź olarak iĹźaretlensin'; +?> diff --git a/data/web/rc/plugins/archive/localization/tzl.inc b/data/web/rc/plugins/archive/localization/tzl.inc new file mode 100644 index 00000000..e07f31da --- /dev/null +++ b/data/web/rc/plugins/archive/localization/tzl.inc @@ -0,0 +1,19 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['unkownsender'] = 'inschì'; +?> diff --git a/data/web/rc/plugins/archive/localization/uk_UA.inc b/data/web/rc/plugins/archive/localization/uk_UA.inc new file mode 100644 index 00000000..c669bfad --- /dev/null +++ b/data/web/rc/plugins/archive/localization/uk_UA.inc @@ -0,0 +1,32 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'Đрхів'; +$labels['buttontitle'] = 'ĐрхівŃвати це повідомлення'; +$labels['archived'] = 'ПеренеŃено в архів'; +$labels['archivedreload'] = 'ĐŁŃпіŃно заархівовано. Перезавантажте ŃторінкŃ, щоб побачити нові теки Đ· архівами.'; +$labels['archiveerror'] = 'Деякі повідомлення не вдалоŃŃŹ заархівŃвати'; +$labels['archivefolder'] = 'Đрхів'; +$labels['settingstitle'] = 'Đрхів'; +$labels['archivetype'] = 'Розділити архів по'; +$labels['archivetypeyear'] = 'Đ Ń–Đş (наприклад Đрхів/2012)'; +$labels['archivetypemonth'] = 'МіŃяць (наприклад Đрхів/2012/06)'; +$labels['archivetypefolder'] = 'Оригінальна тека'; +$labels['archivetypesender'] = 'Відправник email'; +$labels['unkownsender'] = 'невідомо'; +$labels['readonarchive'] = 'Позначити повідомлення ŃŹĐş прочитане по архівŃ'; +?> diff --git a/data/web/rc/plugins/archive/localization/vi_VN.inc b/data/web/rc/plugins/archive/localization/vi_VN.inc new file mode 100644 index 00000000..219f9ddf --- /dev/null +++ b/data/web/rc/plugins/archive/localization/vi_VN.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'LĆ°u trữ'; +$labels['buttontitle'] = 'LĆ°u lại bức thĆ° nĂ y'; +$labels['archived'] = 'LĆ°u lại thĂ nh cĂ´ng'; +$labels['archivedreload'] = 'ÄĂŁ lĆ°u thĂ nh cĂ´ng. Tải lại trang nĂ y Ä‘á» thấy các thĆ° mục lĆ°u trữ má»›i.'; +$labels['archiveerror'] = 'Má»™t số thĆ° khĂ´ng thá» lĆ°u lại được'; +$labels['archivefolder'] = 'LĆ°u trữ'; +$labels['settingstitle'] = 'LĆ°u trữ'; +$labels['archivetype'] = 'Chia bá»™ lĆ°u trữ bởi'; +$labels['archivetypeyear'] = 'NÄm (vĂ­ dụ: LĆ°u trữ/2012)'; +$labels['archivetypemonth'] = 'Tháng (vĂ­ dụ: LĆ°u trữ/2012/06)'; +$labels['archivetypefolder'] = 'ThĆ° mục nguyĂŞn gốc'; +$labels['archivetypesender'] = 'Äịa chỉ thĆ° Ä‘iện tá»­ của người gá»­i'; +$labels['unkownsender'] = 'KhĂ´ng rõ'; +?> diff --git a/data/web/rc/plugins/archive/localization/zh_CN.inc b/data/web/rc/plugins/archive/localization/zh_CN.inc new file mode 100644 index 00000000..24fbbf4e --- /dev/null +++ b/data/web/rc/plugins/archive/localization/zh_CN.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'ĺ­ćˇŁ'; +$labels['buttontitle'] = 'ĺ­ćˇŁčŻĄäżˇćŻ'; +$labels['archived'] = 'ĺ­ćˇŁć功'; +$labels['archivedreload'] = 'ĺ­ćˇŁć功。请ĺ·ć–°ćś¬éˇµä»ĄćźĄçś‹ć–°çš„ĺ­ćˇŁć–‡ä»¶ĺ¤ąă€‚'; +$labels['archiveerror'] = 'é¨ĺ†äżˇćŻć— ćł•ĺ­ćˇŁ'; +$labels['archivefolder'] = 'ĺ­ćˇŁ'; +$labels['settingstitle'] = 'ĺ­ćˇŁ'; +$labels['archivetype'] = 'ĺ†ç±»ĺ­ćˇŁćŚ‰'; +$labels['archivetypeyear'] = 'ĺą´(例如 ĺ­ćˇŁ/2012)'; +$labels['archivetypemonth'] = 'ćś(例如 ĺ­ćˇŁ/2012/06)'; +$labels['archivetypefolder'] = '原始文件夹'; +$labels['archivetypesender'] = '发件人邮件'; +$labels['unkownsender'] = '未知'; +?> diff --git a/data/web/rc/plugins/archive/localization/zh_TW.inc b/data/web/rc/plugins/archive/localization/zh_TW.inc new file mode 100644 index 00000000..ae4b779e --- /dev/null +++ b/data/web/rc/plugins/archive/localization/zh_TW.inc @@ -0,0 +1,31 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2016, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-archive/ +*/ +$labels['buttontext'] = 'ĺ°ĺ­'; +$labels['buttontitle'] = 'ĺ°ĺ­ć­¤äżˇä»¶'; +$labels['archived'] = 'ĺ·˛ć功ĺ°ĺ­'; +$labels['archivedreload'] = 'ĺ°ĺ­ĺ‹•ä˝śĺ®Ść.重新載入é éť˘ç€Źč¦˝ć–°çš„ĺ°ĺ­čł‡ć–™ĺ¤ľ'; +$labels['archiveerror'] = 'é¨ĺ†čł‡č¨Šç„ˇćł•ĺ®Śćĺ°ĺ­'; +$labels['archivefolder'] = 'ĺ°ĺ­'; +$labels['settingstitle'] = 'ĺ°ĺ­'; +$labels['archivetype'] = 'ĺ°ĺ­ćŞ”ćˇĺ‡ĺ‰˛ć–ąĺĽŹ'; +$labels['archivetypeyear'] = 'ĺą´ĺ†(例如: ĺ°ĺ­/2012)'; +$labels['archivetypemonth'] = 'ćśä»˝(例如: ĺ°ĺ­/2012/06)'; +$labels['archivetypefolder'] = '原始資料夾'; +$labels['archivetypesender'] = '寄件者電ĺ­äżˇç®±'; +$labels['unkownsender'] = '未知'; +?> diff --git a/data/web/rc/plugins/archive/skins/classic/archive.css b/data/web/rc/plugins/archive/skins/classic/archive.css new file mode 100644 index 00000000..fc5984b3 --- /dev/null +++ b/data/web/rc/plugins/archive/skins/classic/archive.css @@ -0,0 +1,10 @@ + +#messagetoolbar a.button.archive { + text-indent: -5000px; + background: url(archive_act.png) 0 0 no-repeat; +} + +#mailboxlist li.mailbox.archive > a { + background-image: url(foldericon.png); + background-position: 5px 1px; +} diff --git a/data/web/rc/plugins/archive/skins/classic/archive.min.css b/data/web/rc/plugins/archive/skins/classic/archive.min.css new file mode 100644 index 00000000..a837906b --- /dev/null +++ b/data/web/rc/plugins/archive/skins/classic/archive.min.css @@ -0,0 +1 @@ +#messagetoolbar a.button.archive{text-indent:-5000px;background:url(archive_act.png) 0 0 no-repeat}#mailboxlist li.mailbox.archive>a{background-image:url(foldericon.png);background-position:5px 1px} \ No newline at end of file diff --git a/data/web/rc/plugins/archive/skins/classic/archive_act.png b/data/web/rc/plugins/archive/skins/classic/archive_act.png new file mode 100644 index 0000000000000000000000000000000000000000..2a173586832e8f8c6dedafd79a93611dec8b5a61 GIT binary patch literal 3663 zcmV-V4zTfwP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000AeNklGeSn69Krm zwXylm*7u1isoT=XUfT;Y-p@^0_bJfW&E}Wi- zguQ0NhD!A|wsH@N`rSLx>0K}eZ0kOu2vY-45sWIua+=a^h;iMi0EoDpc&Y_s!Z#KG z8UfH~d8{ngai&y_zaFG9$vj9fn-HnmPRbp|44{@#cg}bK5)DnYX-y@ZEd;6&qp0`$ zt$?uI)t11zJoB_iDs4uFat0DcV`8VAINsRrS1KOuMq(%c)!?AuOy&Urg}Jm(q2S^< zT|NYnp;Alk_p3D*Ukwzx0K&)t4N#pu1PV$%TS3=0Fi!V}xsy$TMzh;@9WuFG-})y^ z6}x*ABt&!;9k3CoMQoG$og2^tVAvf{t@e-k$$+E>%Xd=mvmgMJKn(f3nOcaNkpVx4+7KC`ClAqq0F@&sTK|nSv=M}X_9q}botsVwc)fJ=`r za`%rmz2#ynwA{L#>FFEhvq@^9*WEmo0^0x$5K#{}29%&%nhgWs1Iy)d<1w*q2Ow?k zaQf^j#_^`&o^2Mf%{quBjKl+0;(zY!#da8gIUo}RcEL@g@Q=TW1|>i`*Rx98qHb-c z0>n3`3W|VOoJ0<1UU5<@h~9O9MW6wsfaWLw76_}=`k$YD@qO{we4;8~Bqn1YCE||u z5KNrTU~l>w{aFg-*8RAwj^Z}9D$WB-u{Yc!ctJ(+!D>JOs7>-NNW`x4;=1NACh_T8 hdnMLL0ROf9GXRHc*=Y)9d%pkx002ovPDHLkV1gJG-{t@S literal 0 HcmV?d00001 diff --git a/data/web/rc/plugins/archive/skins/classic/archive_pas.png b/data/web/rc/plugins/archive/skins/classic/archive_pas.png new file mode 100644 index 0000000000000000000000000000000000000000..8de2085836b64805f5088a30526af04630d966aa GIT binary patch literal 977 zcmV;?11|iDP)$NJ8^Kp->#%7j>qAeAv8z2g9q}bKY&1$RFoCzl4(Gcryt=30}z4lo+&AD zItu|6A!rTY%c>1d8CT~vmf_?H6$}&khO&bsbOT~XVRX1yooBNul#5DB0GvaRk0;xB zphCGlrVh!Z460Pi2irxE&1=s2Cp>^%k--F)ps>Ee{I2=G%e|1>yQXV4Xexi$sRu|U z$##Cmz_rq#$l=a|&4LMIV@P35VNPY=hYdl=8?K>?oZ001HWMD+QS&C0T-xNOTXIHE%|*21Y=5ALW69A7HdH3}nx zH2|rU!g5VNFe;X|wzAr84|wQEA8dRrLw&nwIT%*gB6V{Fy)g~)j#^W07|imbAS2e` zaM$QwUq^!g@E46trl=EK7F(KV9ZpRSG9pq#oUCa(Fy{<*A&~v zimVu*4_{^mq{Xo;j%Pv7q?*~{m=!GNot*4HxwmR$eznk zw@ly-$IAhCKi>t&10cb{T)5tPUjTpl`X#^sjQ-yh3OoIh00000NkvXXu0mjfuQbF0 literal 0 HcmV?d00001 diff --git a/data/web/rc/plugins/archive/skins/classic/foldericon.png b/data/web/rc/plugins/archive/skins/classic/foldericon.png new file mode 100644 index 0000000000000000000000000000000000000000..ec0853c4420efb6317e4fc9c34ca17e9e451ac32 GIT binary patch literal 3312 zcmVKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0006TNkl%&i;y9N7FM)T+=%@Ffq#Mp z?IH;xXjdQwl6@?S7PV;=HsU66Q7x=&W{j9--g}-F_jTrN*|WNE&v~BbJm+4M#M7Gx zkWn;a+@1XZmVg}000YDxwt-hT^$XWOQvh%%;+!8DyEZp)@={4s?3Tb3yA?oU>*Mlj z`OUoo#!H}H06>hN7@MCP7@aEZ6-LPrR*}TYV*iZ(6Dv3R zXC%cDB=E{|rW8OaCdbu83YY@&6iAT=jDS1_k`V}bgHM}ZK`G!IJ-a|c8yoKyKq*pS z@K8@H)B=FX61+~WR^`-4KPYhb*3}rV9Cv5-%4wXyhqW(A-4G)G-UuD?CObc>NPVD` z>C0y@n&1K9NDWY6r?Ly)i=d-LfGB#XQ?1o_yz;)a0l6|4A+8l6IZ_HzvF#wJh&Py= zIEJ+f0#b@exTlz@waR!$n*gH=HQ3zR#&Gb!@pHGyqx^a{x-nz$U=Ki7KE!VMA8OU# zj1KL?5KD^_Q4s^2nW`k4R$KKnDv5->8T+MN6H>%hM%>1jLmZ+ z7<8dPrTU8}&o{swNhC>vvTjLO_Oqm{C%48api); + + $this->assertInstanceOf('archive', $plugin); + $this->assertInstanceOf('rcube_plugin', $plugin); + } +} + diff --git a/data/web/rc/plugins/attachment_reminder/attachment_reminder.js b/data/web/rc/plugins/attachment_reminder/attachment_reminder.js new file mode 100644 index 00000000..4626ce70 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/attachment_reminder.js @@ -0,0 +1,83 @@ +/** + * Attachment Reminder plugin script + * + * @licstart The following is the entire license notice for the + * JavaScript code in this file. + * + * Copyright (c) 2013, The Roundcube Dev Team + * + * The JavaScript code in this page is free software: you can redistribute it + * and/or modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * @licend The above is the entire license notice + * for the JavaScript code in this file. + */ + +function rcmail_get_compose_message() +{ + var msg; + + if (window.tinyMCE && (ed = tinyMCE.get(rcmail.env.composebody))) { + msg = ed.getContent(); + msg = msg.replace(/]*>(.|[\r\n])*<\/blockquote>/gmi, ''); + } + else { + msg = $('#' + rcmail.env.composebody).val(); + msg = msg.replace(/^>.*$/gmi, ''); + } + + return msg; +}; + +function rcmail_check_message(msg) +{ + var i, rx, keywords = rcmail.get_label('keywords', 'attachment_reminder').split(",").concat([".doc", ".pdf"]); + + keywords = $.map(keywords, function(n) { return RegExp.escape(n); }); + rx = new RegExp('(' + keywords.join('|') + ')', 'i'); + + return msg.search(rx) != -1; +}; + +function rcmail_have_attachments() +{ + return rcmail.env.attachments && $('li', rcmail.gui_objects.attachmentlist).length; +}; + +function rcmail_attachment_reminder_dialog() +{ + var buttons = {}; + + buttons[rcmail.get_label('addattachment')] = function() { + $(this).remove(); + if (window.UI && UI.show_uploadform) // Larry skin + UI.show_uploadform(); + else if (window.rcmail_ui && rcmail_ui.show_popup) // classic skin + rcmail_ui.show_popup('uploadmenu', true); + }; + buttons[rcmail.get_label('send')] = function(e) { + $(this).remove(); + rcmail.env.attachment_reminder = true; + rcmail.command('send', '', e); + }; + + rcmail.env.attachment_reminder = false; + rcmail.show_popup_dialog(rcmail.get_label('attachment_reminder.forgotattachment'), '', buttons); +}; + + +if (window.rcmail) { + rcmail.addEventListener('beforesend', function(evt) { + var msg = rcmail_get_compose_message(), + subject = $('#compose-subject').val(); + + if (!rcmail.env.attachment_reminder && !rcmail_have_attachments() + && (rcmail_check_message(msg) || rcmail_check_message(subject)) + ) { + rcmail_attachment_reminder_dialog(); + return false; + } + }); +} diff --git a/data/web/rc/plugins/attachment_reminder/attachment_reminder.min.js b/data/web/rc/plugins/attachment_reminder/attachment_reminder.min.js new file mode 100644 index 00000000..69242c43 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/attachment_reminder.min.js @@ -0,0 +1,20 @@ +/** + * Attachment Reminder plugin script + * + * @licstart The following is the entire license notice for the + * JavaScript code in this file. + * + * Copyright (c) 2013, The Roundcube Dev Team + * + * The JavaScript code in this page is free software: you can redistribute it + * and/or modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * @licend The above is the entire license notice + * for the JavaScript code in this file. + */ +function rcmail_get_compose_message(){var a;window.tinyMCE&&(ed=tinyMCE.get(rcmail.env.composebody))?(a=ed.getContent(),a=a.replace(/]*>(.|[\r\n])*<\/blockquote>/gmi,"")):(a=$("#"+rcmail.env.composebody).val(),a=a.replace(/^>.*$/gmi,""));return a}function rcmail_check_message(a){var b;b=rcmail.get_label("keywords","attachment_reminder").split(",").concat([".doc",".pdf"]);b=$.map(b,function(a){return RegExp.escape(a)});b=new RegExp("("+b.join("|")+")","i");return-1!=a.search(b)} +function rcmail_have_attachments(){return rcmail.env.attachments&&$("li",rcmail.gui_objects.attachmentlist).length} +function rcmail_attachment_reminder_dialog(){var a={};a[rcmail.get_label("addattachment")]=function(){$(this).remove();window.UI&&UI.show_uploadform?UI.show_uploadform():window.rcmail_ui&&rcmail_ui.show_popup&&rcmail_ui.show_popup("uploadmenu",!0)};a[rcmail.get_label("send")]=function(a){$(this).remove();rcmail.env.attachment_reminder=!0;rcmail.command("send","",a)};rcmail.env.attachment_reminder=!1;rcmail.show_popup_dialog(rcmail.get_label("attachment_reminder.forgotattachment"),"",a)} +window.rcmail&&rcmail.addEventListener("beforesend",function(a){a=rcmail_get_compose_message();var b=$("#compose-subject").val();if(!rcmail.env.attachment_reminder&&!rcmail_have_attachments()&&(rcmail_check_message(a)||rcmail_check_message(b)))return rcmail_attachment_reminder_dialog(),!1}); diff --git a/data/web/rc/plugins/attachment_reminder/attachment_reminder.php b/data/web/rc/plugins/attachment_reminder/attachment_reminder.php new file mode 100644 index 00000000..74df25f6 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/attachment_reminder.php @@ -0,0 +1,83 @@ + + * + * Copyright (C) 2013 Thomas Yu - Sian, Liu + * Copyright (C) 2013, 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 + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see + */ + +class attachment_reminder extends rcube_plugin +{ + public $task = 'mail|settings'; + public $noajax = true; + + + function init() + { + $rcmail = rcube::get_instance(); + + if ($rcmail->task == 'mail' && $rcmail->action == 'compose') { + if ($rcmail->config->get('attachment_reminder')) { + $this->include_script('attachment_reminder.js'); + $this->add_texts('localization/', array('keywords', 'forgotattachment')); + $rcmail->output->add_label('addattachment', 'send'); + } + } + + if ($rcmail->task == 'settings') { + $dont_override = $rcmail->config->get('dont_override', array()); + + if (!in_array('attachment_reminder', $dont_override)) { + $this->add_hook('preferences_list', array($this, 'prefs_list')); + $this->add_hook('preferences_save', array($this, 'prefs_save')); + } + } + } + + function prefs_list($args) + { + if ($args['section'] == 'compose') { + $this->add_texts('localization/'); + $reminder = rcube::get_instance()->config->get('attachment_reminder'); + $field_id = 'rcmfd_attachment_reminder'; + $checkbox = new html_checkbox(array('name' => '_attachment_reminder', 'id' => $field_id, 'value' => 1)); + + $args['blocks']['main']['options']['attachment_reminder'] = array( + 'title' => html::label($field_id, rcube::Q($this->gettext('reminderoption'))), + 'content' => $checkbox->show($reminder ? 1 : 0), + ); + } + + return $args; + } + + function prefs_save($args) + { + if ($args['section'] == 'compose') { + $dont_override = rcube::get_instance()->config->get('dont_override', array()); + if (!in_array('attachment_reminder', $dont_override)) { + $args['prefs']['attachment_reminder'] = !empty($_POST['_attachment_reminder']); + } + } + return $args; + } + +} diff --git a/data/web/rc/plugins/attachment_reminder/composer.json b/data/web/rc/plugins/attachment_reminder/composer.json new file mode 100644 index 00000000..62942ff2 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/composer.json @@ -0,0 +1,29 @@ +{ + "name": "roundcube/attachment_reminder", + "type": "roundcube-plugin", + "description": "This Roundcube plugin reminds the user to attach a file if the composed message text indicates that there should be any.", + "license": "GPLv3+", + "version": "1.1", + "authors": [ + { + "name": "Aleksander Machniak", + "email": "alec@alec.pl", + "role": "Lead" + }, + { + "name": "Thomas Yu - Sian, Liu", + "email": "", + "role": "Lead" + } + ], + "repositories": [ + { + "type": "composer", + "url": "http://plugins.roundcube.net" + } + ], + "require": { + "php": ">=5.3.0", + "roundcube/plugin-installer": ">=0.1.3" + } +} diff --git a/data/web/rc/plugins/attachment_reminder/localization/ar_SA.inc b/data/web/rc/plugins/attachment_reminder/localization/ar_SA.inc new file mode 100644 index 00000000..bb1ad044 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/ar_SA.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "هل نسيت إرŮاق Ů…Ů„ŮŘź"; +$messages['reminderoption'] = "ŘŞŘ°Ůير Ř­ŮŮ„ المرŮقات المنسية"; +$messages['keywords'] = "المرŮقات,الملŮ,ارŮاق,مرŮŮ‚,ارŮاق,مضمŮن,CV,صŮŘ­Ř© المغلŮ"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/ast.inc b/data/web/rc/plugins/attachment_reminder/localization/ast.inc new file mode 100644 index 00000000..910f3fe9 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/ast.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "ÂżEscaecisti axuntar un ficheru?"; +$messages['reminderoption'] = "Recordar alrodiu d'axuntos escaecĂ­os"; +$messages['keywords'] = "axuntu,ficheru,axuntar,axuntáu,axuntando,axuntao,axuntada,CV,carta de presentaciĂłn"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/az_AZ.inc b/data/web/rc/plugins/attachment_reminder/localization/az_AZ.inc new file mode 100644 index 00000000..5340c917 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/az_AZ.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Faylı É™lavÉ™ etmÉ™yi unutdunuz?"; +$messages['reminderoption'] = "UnudulmuĹź qoĹźmalardan xÉ™bÉ™rdar et"; +$messages['keywords'] = "qoĹźmalar,fayl,qoĹźma,qoĹźulub,qoĹźulur,qapalı,CV,qoĹźma mÉ™ktub"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/be_BE.inc b/data/web/rc/plugins/attachment_reminder/localization/be_BE.inc new file mode 100644 index 00000000..a920ccfa --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/be_BE.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "ЗабыліŃŃŹ Đ´Đ°Đ»Ńчыць файл?"; +$messages['reminderoption'] = "Напамінаць пра забытыя Đ´Đ°Đ»Ńчэнні"; +$messages['keywords'] = "Đ´Đ°Đ»Ńчэнне,файл,Đ´Đ°Đ»Ńчыць,Đ´Đ°Đ»Ńчаны,Đ´Đ°Đ»Ńчаецца,Ńкладзены,CV,cover letter"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/bg_BG.inc b/data/web/rc/plugins/attachment_reminder/localization/bg_BG.inc new file mode 100644 index 00000000..a882d6c9 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/bg_BG.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Забравихте ли Đ´Đ° прикрепите файл към Ńъобщението?"; +$messages['reminderoption'] = "Напомняне Đ·Đ° забравени прикачени файлове"; +$messages['keywords'] = "прикачен,прикрепен,прикачам,прикачвам,прикрепям,прикрепвам,файл,attachment,file,attach,attached,attaching,enclosed,CV,cover letter"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/br.inc b/data/web/rc/plugins/attachment_reminder/localization/br.inc new file mode 100644 index 00000000..93eaace5 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/br.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Disonjet ho peus stagan er restr ?"; +$messages['reminderoption'] = "Adgalv war ar pezhiou stag disonjet"; +$messages['keywords'] = "pezh stag, restr, stagan, aman staget, stagit, ouzhpenan, CV, lizher youl"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/bs_BA.inc b/data/web/rc/plugins/attachment_reminder/localization/bs_BA.inc new file mode 100644 index 00000000..1ec385df --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/bs_BA.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Da li ste zaboravili da dodate ovu datoteku?"; +$messages['reminderoption'] = "Napomene o zaboravljenim prilozima"; +$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter,prilog,biografija,popratno pismo,prilogu,popratnom pismu,datoteka,fajl"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/ca_ES.inc b/data/web/rc/plugins/attachment_reminder/localization/ca_ES.inc new file mode 100644 index 00000000..ca22fbd4 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/ca_ES.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Us heu oblidat afegir un fitxer?"; +$messages['reminderoption'] = "Recordatori de fitxers adjunts oblidats"; +$messages['keywords'] = "adjunt,fitxer,adjuntar,adjuntat,adjuntant,CV,carta"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/cs_CZ.inc b/data/web/rc/plugins/attachment_reminder/localization/cs_CZ.inc new file mode 100644 index 00000000..3d216647 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/cs_CZ.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "NezapomnÄ›li jste pĹ™ipojit přílohu?"; +$messages['reminderoption'] = "UpozorĹovat na zapomenutĂ© přílohy"; +$messages['keywords'] = "příloha,přílohy,příloze,přílohu,pĹ™iloĹľenĂ©m,pĹ™ipojenĂ©m,CV,Ĺľivotopis"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/cy_GB.inc b/data/web/rc/plugins/attachment_reminder/localization/cy_GB.inc new file mode 100644 index 00000000..0ce8a999 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/cy_GB.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Wedi anghofio atodi ffeil?"; +$messages['reminderoption'] = "Atgoffa am atodiadau ar goll"; +$messages['keywords'] = "atodiad,atodi,atodaf,atodwyd,atodir,amgaedig,dogfen,llythyr,ffeil,attachment,file,attach,attached,attaching,enclosed,CV,cover letter,"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/da_DK.inc b/data/web/rc/plugins/attachment_reminder/localization/da_DK.inc new file mode 100644 index 00000000..e41eafb3 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/da_DK.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Glemte du at vedhæfte en fil?"; +$messages['reminderoption'] = "PĂĄmind om glemt vedhæftning af filer"; +$messages['keywords'] = "vedhæftet fil,fil,vedhæft,vedhæftet,vedhæfter,lukket,CV,følgebrev"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/de_CH.inc b/data/web/rc/plugins/attachment_reminder/localization/de_CH.inc new file mode 100644 index 00000000..9aca61e6 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/de_CH.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Haben Sie möglicherweise vergessen eine Datei anzuhängen?"; +$messages['reminderoption'] = "Vor vergessenen Anhängen warnen"; +$messages['keywords'] = "anbei,anhang,angehängt,angefĂĽgt,beigefĂĽgt,beliegend"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/de_DE.inc b/data/web/rc/plugins/attachment_reminder/localization/de_DE.inc new file mode 100644 index 00000000..ec5ea0a2 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/de_DE.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Haben Sie möglicherweise vergessen, eine Datei anzuhängen?"; +$messages['reminderoption'] = "An vergessene Anhänge erinnern"; +$messages['keywords'] = "anbei,im anhang,siehe anhang,angehängt,angefĂĽgt,beigefĂĽgt,beliegend"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/el_GR.inc b/data/web/rc/plugins/attachment_reminder/localization/el_GR.inc new file mode 100644 index 00000000..11a3cb82 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/el_GR.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Μήπως ξεχάĎετε να επιĎυνάĎετε αĎχείο; "; +$messages['reminderoption'] = "ΥπενθύμιĎη για Ďυνημμένα"; +$messages['keywords'] = "Ďυνημμένο, αĎχείο, επιĎύναĎη, Ďυνημμένο, επιĎυνάπτοντας, εĎωκλείοντας, βιογĎαφικό Ďημείωμα, Ďυνοδευτική επιĎτολή"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/en_CA.inc b/data/web/rc/plugins/attachment_reminder/localization/en_CA.inc new file mode 100644 index 00000000..730e206f --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/en_CA.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Did you forget to attach a file?"; +$messages['reminderoption'] = "Remind about forgotten attachments"; +$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/en_GB.inc b/data/web/rc/plugins/attachment_reminder/localization/en_GB.inc new file mode 100644 index 00000000..730e206f --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/en_GB.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Did you forget to attach a file?"; +$messages['reminderoption'] = "Remind about forgotten attachments"; +$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/en_US.inc b/data/web/rc/plugins/attachment_reminder/localization/en_US.inc new file mode 100644 index 00000000..488b0df3 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/en_US.inc @@ -0,0 +1,22 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ + +$messages = array(); +$messages['forgotattachment'] = "Did you forget to attach a file?"; +$messages['reminderoption'] = "Remind about forgotten attachments"; +$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/es_419.inc b/data/web/rc/plugins/attachment_reminder/localization/es_419.inc new file mode 100644 index 00000000..0c9a33bf --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/es_419.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "ÂżHas olvidado adjuntar un archivo?"; +$messages['reminderoption'] = "Recordar si olvido adjuntar archivos"; +$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/es_AR.inc b/data/web/rc/plugins/attachment_reminder/localization/es_AR.inc new file mode 100644 index 00000000..2a741834 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/es_AR.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Has olvidado adjuntar un archivo?"; +$messages['reminderoption'] = "Recordar sobre archivos adjuntos olvidados"; +$messages['keywords'] = "adjunto,archivo,adjuntar,adjuntado,adjuntando,"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/es_ES.inc b/data/web/rc/plugins/attachment_reminder/localization/es_ES.inc new file mode 100644 index 00000000..2e4ffdf2 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/es_ES.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "ÂżOlvidĂł adjuntar un fichero al mensaje?"; +$messages['reminderoption'] = "Recordatorio sobre adjuntos olvidados"; +$messages['keywords'] = "adjunto, archivo, adjuntar, unido, adjuntando, cerrado, CV, carta de presentaciĂłn"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/et_EE.inc b/data/web/rc/plugins/attachment_reminder/localization/et_EE.inc new file mode 100644 index 00000000..c8be2af6 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/et_EE.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Unustasid faili lisada?"; +$messages['reminderoption'] = "Tuleta mulle meelde kui unustasin manuse lisada"; +$messages['keywords'] = "manus,manuses,lisatud,lisasin,fail,file,failis,attachment,file,attach,attached,attaching,enclosed,CV,cover letter"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/eu_ES.inc b/data/web/rc/plugins/attachment_reminder/localization/eu_ES.inc new file mode 100644 index 00000000..f658990e --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/eu_ES.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Ahaztu zaizu fitxategia eranstea?"; +$messages['reminderoption'] = "Ohartarazi ahaztutako erankinez"; +$messages['keywords'] = "eranskin,fitxategia,erantzi,erantzita,eransten,atxikita"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/fa_AF.inc b/data/web/rc/plugins/attachment_reminder/localization/fa_AF.inc new file mode 100644 index 00000000..1c47737f --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/fa_AF.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "آیا ŮرامŮŘ´ کردید که Ůایل را الصاق کرده اید؟"; +$messages['reminderoption'] = "یاد آŮری درمŮرد ضمایم ŮرامŮŘ´ شده"; +$messages['keywords'] = "ضمیمه،Ůایل،ضمیمه کردن،ضمیمه شده،در حال ضمیمه کردن، الصاق شده،CVŘŚ عنŮان نامه"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/fa_IR.inc b/data/web/rc/plugins/attachment_reminder/localization/fa_IR.inc new file mode 100644 index 00000000..fd1c4011 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/fa_IR.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "آیا شما پیŮست کردن پرŮنده را ŮرامŮŘ´ کرده‌اید؟"; +$messages['reminderoption'] = "یادآŮری ŮرامŮŘ´ŰŚ پیŮست‌ها"; +$messages['keywords'] = "پیŮست،پرŮنده،پیŮست کردن، پیŮست شده، CV"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/fi_FI.inc b/data/web/rc/plugins/attachment_reminder/localization/fi_FI.inc new file mode 100644 index 00000000..a39d8b28 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/fi_FI.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Unohditko liittää tiedoston?"; +$messages['reminderoption'] = "Muistuta mahdollisesti unohtuneista liitteistä"; +$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter,liite,tiedosto,liitteenä,liitetiedosto,ansioluettelo"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/fo_FO.inc b/data/web/rc/plugins/attachment_reminder/localization/fo_FO.inc new file mode 100644 index 00000000..260ec036 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/fo_FO.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Gloymdi tĂş at viĂ°hefta ein fĂ­l?"; +$messages['reminderoption'] = "Ăminn um gloymdar viĂ°heftingar"; +$messages['keywords'] = "viĂ°hefting,fĂ­lur,heft,viĂ°heft,heftir,lagt innĂ­,CV,fylgi skriv"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/fr_FR.inc b/data/web/rc/plugins/attachment_reminder/localization/fr_FR.inc new file mode 100644 index 00000000..999affcc --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/fr_FR.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Avez-vous oubliĂ© de joindre un fichier ?"; +$messages['reminderoption'] = "Rappel sur les pièces jointes oubliĂ©es"; +$messages['keywords'] = "pièce jointe,fichier,joindre,joins,joint,attachĂ©,inclus,ci-inclus,CV, lettre d'accompagnement"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/gl_ES.inc b/data/web/rc/plugins/attachment_reminder/localization/gl_ES.inc new file mode 100644 index 00000000..a45f63bd --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/gl_ES.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Esqueceches adxuntar un ficheiro?"; +$messages['reminderoption'] = "Lembrete de adxuntos esquecidos"; +$messages['keywords'] = "anexo, arquivo, engadir, anexo, anexando, pechado, CV, carta de presentaciĂłn"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/he_IL.inc b/data/web/rc/plugins/attachment_reminder/localization/he_IL.inc new file mode 100644 index 00000000..2c348afb --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/he_IL.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "×”×ם שכחת לצרף קובץ?"; +$messages['reminderoption'] = "להזכיר לצרף נספח"; +$messages['keywords'] = "נספח,קובץ,לצרף,מצורף,מצרף,מצרפת,רצ\"ב,קו\"×—,קורות חיים"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/hr_HR.inc b/data/web/rc/plugins/attachment_reminder/localization/hr_HR.inc new file mode 100644 index 00000000..4037b16e --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/hr_HR.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Jeste li zaboravili dodati privitak?"; +$messages['reminderoption'] = "Podsjeti na zaboravljen privitak"; +$messages['keywords'] = "privitak,datoteka,dodati,dodano,dodajem,u privitku,CV,motivacijsko pismo"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/hu_HU.inc b/data/web/rc/plugins/attachment_reminder/localization/hu_HU.inc new file mode 100644 index 00000000..b76a8cf9 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/hu_HU.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Nem felejtetted el a csatolandĂł file-t?"; +$messages['reminderoption'] = "EmlĂ©keztessen a csatolandĂł csatolmányra"; +$messages['keywords'] = "csatolmány, file, csatolás, csatolt, csatolni, közrezárt, CV, kisĂ©rĹ‘levĂ©l"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/ia.inc b/data/web/rc/plugins/attachment_reminder/localization/ia.inc new file mode 100644 index 00000000..3b7af087 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/ia.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Ha vos oblidate de attachar un file?"; +$messages['reminderoption'] = "Rememorar de attachamentos oblidate"; +$messages['keywords'] = "attachamento,file,attachar,attachate,attachante,annexo,annexe,annexate,CV,curriculo de vita"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/id_ID.inc b/data/web/rc/plugins/attachment_reminder/localization/id_ID.inc new file mode 100644 index 00000000..e2a606aa --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/id_ID.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Apakah anda lupa melampirkan sebuah file?"; +$messages['reminderoption'] = "Ingatkan tentang lampiran yang terlupakan"; +$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/it_IT.inc b/data/web/rc/plugins/attachment_reminder/localization/it_IT.inc new file mode 100644 index 00000000..2a9772dc --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/it_IT.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Sembra che tu abbia dimenticato di allegare un file!\nPremere Annulla per inviare lo stesso.\nOK per tornare al messaggio senza inviare."; +$messages['reminderoption'] = "Ricorda per gli allegati dimenticati"; +$messages['keywords'] = "allegato,allegati,allegata,allegate,allega,allego,alleghi,attaccato,file,attachment,attach"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/ja_JP.inc b/data/web/rc/plugins/attachment_reminder/localization/ja_JP.inc new file mode 100644 index 00000000..5ba55d44 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/ja_JP.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "ă•ă‚ˇă‚¤ă«ă®ć·»ä»ă‚’ĺżă‚Śă¦ă„ăľă›ă‚“ă‹?"; +$messages['reminderoption'] = "ć·»ä»ă•ă‚ˇă‚¤ă«ă®ä»ă‘ĺżă‚Śă‚’確認"; +$messages['keywords'] = "ć·»ä»,ă•ă‚ˇă‚¤ă«,ć·»ä»ă•ă‚ˇă‚¤ă«,ĺŚĺ°,ć·»ă状"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/km_KH.inc b/data/web/rc/plugins/attachment_reminder/localization/km_KH.inc new file mode 100644 index 00000000..f6b207c1 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/km_KH.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "តើអ្នក​ភ្លáźáž…​ភ្ជាប់​ឯកសារ​ឬ?"; +$messages['reminderoption'] = "រំលឹង​អំពី​ឯកសារ​ភ្ជាប់​ដែល​បាន​ភ្លáźáž…"; +$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/kn_IN.inc b/data/web/rc/plugins/attachment_reminder/localization/kn_IN.inc new file mode 100644 index 00000000..e6aff033 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/kn_IN.inc @@ -0,0 +1,18 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "ನೀವೠಫೈಲ್ ಅಟ್ಯಾಚ್ ಮಾಡಲೠಮರೆತಿರŕłŕ˛µŕ˛żŕ˛°ŕ˛ľ?"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/ko_KR.inc b/data/web/rc/plugins/attachment_reminder/localization/ko_KR.inc new file mode 100644 index 00000000..58391a88 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/ko_KR.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "파일을 첨부í•ëŠ” ę˛ěť„ 잊으셨습ë‹ęąŚ?"; +$messages['reminderoption'] = "잊ě—ëŤ ě˛¨ë¶€íŚŚěťĽ ě¶”ę°€ě— ëŚ€í•´ 알림"; +$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/ku.inc b/data/web/rc/plugins/attachment_reminder/localization/ku.inc new file mode 100644 index 00000000..31017988 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/ku.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Te ji bĂ®r kir da pelekĂŞ pĂŞve bikĂ®?"; +$messages['reminderoption'] = "PĂŞvekĂŞn jibĂ®rkirĂ® bi bĂ®r bixe"; +$messages['keywords'] = "pĂŞvek, pel, pĂŞve bike, pĂŞvekirĂ®, pĂŞve dike, rapêçandĂ®, CV, tĂ®pa bergĂŞ"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/ku_IQ.inc b/data/web/rc/plugins/attachment_reminder/localization/ku_IQ.inc new file mode 100644 index 00000000..e8e32cea --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/ku_IQ.inc @@ -0,0 +1,19 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "ئایا لەبیرت کرد پەڕگەیەک هاŮپێچ بکەی؟"; +$messages['reminderoption'] = "بیرهێنانەŮŰ• دەربارەی هاŮپێچە لەبیرکراŮەکان"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/lb_LU.inc b/data/web/rc/plugins/attachment_reminder/localization/lb_LU.inc new file mode 100644 index 00000000..f91f3d12 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/lb_LU.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Hues du vergiess e Fichier drunzehänken?"; +$messages['reminderoption'] = "U vergiessen Unhäng erĂ«nneren"; +$messages['keywords'] = "Attachment,Fichier,Unhank,Unhang,Unhäng,ugehaangen,unhänken,attachment,file,attach,attached,attaching,enclosed,CV,cover letter,fichier joint"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/lt_LT.inc b/data/web/rc/plugins/attachment_reminder/localization/lt_LT.inc new file mode 100644 index 00000000..a8ba0b88 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/lt_LT.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Ar nepamiršote prisegti priedo?"; +$messages['reminderoption'] = "Priminti apie neprisegtus priedus"; +$messages['keywords'] = "priedas, byla, prisegti, prisegta, prisegama, uĹľdaras, CV, laiškas"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/lv_LV.inc b/data/web/rc/plugins/attachment_reminder/localization/lv_LV.inc new file mode 100644 index 00000000..ee4feeb2 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/lv_LV.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Vai JĹ«s nepiemirsÄt pievienot failu?"; +$messages['reminderoption'] = "AtgÄdinÄt par nepievienotajiem pielikumiem"; +$messages['keywords'] = "pielikums,fails,pievienot,pielikt,pievienots,pielikts,ievietot,ievietots,CV"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/ml_IN.inc b/data/web/rc/plugins/attachment_reminder/localization/ml_IN.inc new file mode 100644 index 00000000..74c86c92 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/ml_IN.inc @@ -0,0 +1,19 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "താങ്കൾ ŕ´’ŕ´°ŕµ ŕ´«ŕ´Żŕµ˝ ചേർക്കാൻ മറന്നŕµŕ´Şŕµ‹ŕ´Żŕ´ż"; +$messages['reminderoption'] = "ചേർക്കാൻ മറന്നŕµŕ´Şŕµ‹ŕ´Ż ŕ´«ŕ´Żŕ´˛ŕµŕ´•ŕ´łŕµ† പറ്റി ഓർമ്മപ്പെടŕµŕ´¤ŕµŤŕ´¤ŕµŕ´•"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/mn_MN.inc b/data/web/rc/plugins/attachment_reminder/localization/mn_MN.inc new file mode 100644 index 00000000..1ba775f0 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/mn_MN.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Та файл хавŃаргахаа мартŃĐ°Đ˝ ŃŃ?"; +$messages['reminderoption'] = "МартŃĐ°Đ˝ хавŃралтŃŃĐ´Ń‹Đł ŃĐ°Đ˝ŃŃлах"; +$messages['keywords'] = "хавŃралт,файл,хавŃралт,хавŃаргагдŃĐ°Đ˝,хавŃаргаж байна,Ń…Đ°ŃваргаŃĐ°Đ˝,анкет,танилцŃŃлга"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/nb_NO.inc b/data/web/rc/plugins/attachment_reminder/localization/nb_NO.inc new file mode 100644 index 00000000..1462837d --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/nb_NO.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Glemte du ĂĄ legge ved en fil?"; +$messages['reminderoption'] = "Gi meg en pĂĄminnelse om glemte vedlegg"; +$messages['keywords'] = "vedlegg, fil, legg ved, lagt ved, legger ved, lukket, CV, følgebrev"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/nl_NL.inc b/data/web/rc/plugins/attachment_reminder/localization/nl_NL.inc new file mode 100644 index 00000000..293ad174 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/nl_NL.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Bent u vergeten het bestand bij te voegen?"; +$messages['reminderoption'] = "Herinner mij aan vergeten bijlagen"; +$messages['keywords'] = "attachment,bestand,bijgaand,bijgaande,brief,bijgevoegd,bijgesloten,CV,document,bijgesloten"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/pl_PL.inc b/data/web/rc/plugins/attachment_reminder/localization/pl_PL.inc new file mode 100644 index 00000000..06cede5d --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/pl_PL.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Czy nie zapomniaĹ‚eĹ› zaĹ‚Ä…czyć pliku?"; +$messages['reminderoption'] = "WĹ‚Ä…cz przypominanie o brakujÄ…cym zaĹ‚Ä…czniku"; +$messages['keywords'] = "zaĹ‚Ä…cznik,plik,zaĹ‚Ä…cz,CV"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/pt_BR.inc b/data/web/rc/plugins/attachment_reminder/localization/pt_BR.inc new file mode 100644 index 00000000..4b61e951 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/pt_BR.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "VocĂŞ esqueceu-se de anexar um arquivo?"; +$messages['reminderoption'] = "Alertar sobre o possĂ­vel esquecimento de anexos"; +$messages['keywords'] = "anexo,arquivo,anexar,anexado,anexando,incluso,CV,currĂ­culo"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/pt_PT.inc b/data/web/rc/plugins/attachment_reminder/localization/pt_PT.inc new file mode 100644 index 00000000..de2d04ef --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/pt_PT.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "VocĂŞ esqueceu-se de anexar um ficheiro?"; +$messages['reminderoption'] = "Lembrar sobre anexos esquecidos"; +$messages['keywords'] = "anexo,ficheiro,anexar,anexado,a anexar,em anexo,currĂ­culo,carta de apresentação"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/ro_RO.inc b/data/web/rc/plugins/attachment_reminder/localization/ro_RO.inc new file mode 100644 index 00000000..ff115390 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/ro_RO.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "AČ›i uitat sÄ ataČ™ati ?"; +$messages['reminderoption'] = "Adu-mi aminte de ataČ™amente"; +$messages['keywords'] = "ataČ™ament,atasament,atas,atasat,ataČ™,attach,fisier,fiČ™ier,attach,atach,attache"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/ru_RU.inc b/data/web/rc/plugins/attachment_reminder/localization/ru_RU.inc new file mode 100644 index 00000000..d592b1e3 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/ru_RU.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Đ’Ń‹ не забыли прикрепить файл?"; +$messages['reminderoption'] = "Напоминать Đľ забытых вложениях"; +$messages['keywords'] = "вложение,файл, вложенный, прикрепленный,резюме,докŃмент"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/sk_SK.inc b/data/web/rc/plugins/attachment_reminder/localization/sk_SK.inc new file mode 100644 index 00000000..344d1e6a --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/sk_SK.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Nezabudli ste pridaĹĄ prĂ­lohu?"; +$messages['reminderoption'] = "Pripomenúť zabudnutĂ© prĂ­lohy"; +$messages['keywords'] = "prĂ­loha,sĂşbor,pripojiĹĄ,priloĹľená,priloĹľenĂ˝,priloĹľenĂ©,v prĂ­lohe,Ĺľivotopis,sprievodnĂ˝ list"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/sl_SI.inc b/data/web/rc/plugins/attachment_reminder/localization/sl_SI.inc new file mode 100644 index 00000000..9531f8ed --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/sl_SI.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Ste pozabili pripeti datoteko?"; +$messages['reminderoption'] = "Opozorilo za dodajanje priponk"; +$messages['keywords'] = "priponka,datoteka,pripeti,pripeta,pripenjati,priloĹľen,priloĹľiti,CV,spremno pismo"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/sq_AL.inc b/data/web/rc/plugins/attachment_reminder/localization/sq_AL.inc new file mode 100644 index 00000000..aadc33d9 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/sq_AL.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Mos harruat tĂ« bashkĂ«ngjitni njĂ« kartelĂ«?"; +$messages['reminderoption'] = "Kujtoji pĂ«r bashkĂ«ngjitje tĂ« harruara"; +$messages['keywords'] = "bashkĂ«ngjitje,skedar,kartelĂ«,bashkĂ«ngjite,bashkĂ«ngjitur,pĂ«rfshirĂ«,CV,letĂ«r shoqĂ«ruese"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/sr_CS.inc b/data/web/rc/plugins/attachment_reminder/localization/sr_CS.inc new file mode 100644 index 00000000..8bcdd77f --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/sr_CS.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Да ли Ńте заборавили Đ´Đ° приложите Ń„Đ°ŃĐ»?"; +$messages['reminderoption'] = "ПодŃетник на заборављене прилоге"; +$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter,прилог,Ń„Đ°ŃĐ»,приложи,приложен,прилажем,пропратно пиŃĐĽĐľ"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/sv_SE.inc b/data/web/rc/plugins/attachment_reminder/localization/sv_SE.inc new file mode 100644 index 00000000..744a9618 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/sv_SE.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Glömde du att bifoga en fil?"; +$messages['reminderoption'] = "PĂĄminn om glömda bilagor"; +$messages['keywords'] = "bilaga,fil,bifoga,bifogad,bifogar,infogad,CV,personligt brev"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/tr_TR.inc b/data/web/rc/plugins/attachment_reminder/localization/tr_TR.inc new file mode 100644 index 00000000..c96e2f5c --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/tr_TR.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Dosya eklemeyi mi unuttunuz?"; +$messages['reminderoption'] = "Dosya ekleme unutulduysa hatırlatılsın"; +$messages['keywords'] = "ekleme,dosya,ek,eklenildi,ekleniliyor,ekteki,CV,mektup"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/uk_UA.inc b/data/web/rc/plugins/attachment_reminder/localization/uk_UA.inc new file mode 100644 index 00000000..97e29473 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/uk_UA.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Ви забŃли прикріпити файл?"; +$messages['reminderoption'] = "Нагадати про забŃте вкладення"; +$messages['keywords'] = "вкладення,файл,прикріпити,прикріплений,прикріплюю,вкладено,CV,ŃŃпровідний лиŃŃ‚"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/vi_VN.inc b/data/web/rc/plugins/attachment_reminder/localization/vi_VN.inc new file mode 100644 index 00000000..b5604302 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/vi_VN.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "Bạn Ä‘ĂŁ quĂŞn khĂ´ng Ä‘Ă­nh kèm tệp tin?"; +$messages['reminderoption'] = "Nhắc vá» tệp tin Ä‘Ă­nh kèm bị quĂŞn"; +$messages['keywords'] = "tệp Ä‘Ă­nh kèm,tệp tin,Ä‘Ă­nh kèm,Ä‘ĂŁ Ä‘Ă­nh kèm,Ä‘ang Ä‘Ă­nh kèm táş­p tin,Ä‘Ă­nh kèm,CV,thĆ° mở đầu"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/zh_CN.inc b/data/web/rc/plugins/attachment_reminder/localization/zh_CN.inc new file mode 100644 index 00000000..6c44fe94 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/zh_CN.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "您似乎ĺżč®°ć·»ĺŠ é™„件了,ćŻĺ¦ç»§ç»­ĺŹ‘é€ďĽź"; +$messages['reminderoption'] = "ĺżč®°ć·»ĺŠ é™„件ćŹé†’"; +$messages['keywords'] = "attachment,file,attach,attached,attaching,enclosed,CV,cover letter"; diff --git a/data/web/rc/plugins/attachment_reminder/localization/zh_TW.inc b/data/web/rc/plugins/attachment_reminder/localization/zh_TW.inc new file mode 100644 index 00000000..aaa91cd2 --- /dev/null +++ b/data/web/rc/plugins/attachment_reminder/localization/zh_TW.inc @@ -0,0 +1,20 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Archive plugin | + | Copyright (C) 2013, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-attachment_reminder/ +*/ +$messages['forgotattachment'] = "您似乎ĺżč¨ĺŠ ĺ…Ąé™„件了,你確定č¦ĺŻ„出?"; +$messages['reminderoption'] = "ćŹé†’加入附件"; +$messages['keywords'] = "附件,附加,附檔,附上,附加檔ćˇ"; diff --git a/data/web/rc/plugins/autologon/autologon.php b/data/web/rc/plugins/autologon/autologon.php new file mode 100644 index 00000000..9c7d5b6f --- /dev/null +++ b/data/web/rc/plugins/autologon/autologon.php @@ -0,0 +1,48 @@ +add_hook('startup', array($this, 'startup')); + $this->add_hook('authenticate', array($this, 'authenticate')); + } + + function startup($args) + { + // change action to login + if (empty($_SESSION['user_id']) && !empty($_GET['_autologin']) && $this->is_localhost()) + $args['action'] = 'login'; + + return $args; + } + + function authenticate($args) + { + if (!empty($_GET['_autologin']) && $this->is_localhost()) { + $args['user'] = 'me'; + $args['pass'] = '******'; + $args['host'] = 'localhost'; + $args['cookiecheck'] = false; + $args['valid'] = true; + } + + return $args; + } + + function is_localhost() + { + return $_SERVER['REMOTE_ADDR'] == '::1' || $_SERVER['REMOTE_ADDR'] == '127.0.0.1'; + } + +} + diff --git a/data/web/rc/plugins/autologon/composer.json b/data/web/rc/plugins/autologon/composer.json new file mode 100644 index 00000000..c332d3bd --- /dev/null +++ b/data/web/rc/plugins/autologon/composer.json @@ -0,0 +1,24 @@ +{ + "name": "roundcube/autologon", + "type": "roundcube-plugin", + "description": "Sample plugin to try out some hooks", + "license": "GPLv3+", + "version": "1.0", + "authors": [ + { + "name": "Thomas Bruederli", + "email": "roundcube@gmail.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/data/web/rc/plugins/autologon/tests/Autologon.php b/data/web/rc/plugins/autologon/tests/Autologon.php new file mode 100644 index 00000000..f3f6b420 --- /dev/null +++ b/data/web/rc/plugins/autologon/tests/Autologon.php @@ -0,0 +1,23 @@ +api); + + $this->assertInstanceOf('autologon', $plugin); + $this->assertInstanceOf('rcube_plugin', $plugin); + } +} + diff --git a/data/web/rc/plugins/database_attachments/composer.json b/data/web/rc/plugins/database_attachments/composer.json new file mode 100644 index 00000000..c3d6daca --- /dev/null +++ b/data/web/rc/plugins/database_attachments/composer.json @@ -0,0 +1,30 @@ +{ + "name": "roundcube/database_attachments", + "type": "roundcube-plugin", + "description": "This plugin which provides database backed storage for temporary attachment file handling. The primary advantage of this plugin is its compatibility with round-robin dns multi-server Roundcube installations.", + "license": "GPLv2", + "version": "1.2", + "authors": [ + { + "name": "Aleksander Machniak", + "email": "alec@alec.pl", + "role": "Lead" + }, + { + "name": "Ziba Scott", + "email": "ziba@umich.edu", + "role": "Developer" + } + ], + "repositories": [ + { + "type": "composer", + "url": "http://plugins.roundcube.net" + } + ], + "require": { + "php": ">=5.3.0", + "roundcube/plugin-installer": ">=0.1.3", + "roundcube/filesystem_attachments": ">=1.0.0" + } +} diff --git a/data/web/rc/plugins/database_attachments/config.inc.php.dist b/data/web/rc/plugins/database_attachments/config.inc.php.dist new file mode 100644 index 00000000..b47615b7 --- /dev/null +++ b/data/web/rc/plugins/database_attachments/config.inc.php.dist @@ -0,0 +1,16 @@ + diff --git a/data/web/rc/plugins/database_attachments/database_attachments.php b/data/web/rc/plugins/database_attachments/database_attachments.php new file mode 100644 index 00000000..91335d4c --- /dev/null +++ b/data/web/rc/plugins/database_attachments/database_attachments.php @@ -0,0 +1,187 @@ + + * @author Aleksander Machniak + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +if (class_exists('filesystem_attachments', false) && !defined('TESTS_DIR')) { + die("Configuration issue. There can be only one enabled plugin for attachments handling"); +} + +require_once INSTALL_PATH . 'plugins/filesystem_attachments/filesystem_attachments.php'; + +class database_attachments extends filesystem_attachments +{ + // Cache object + protected $cache; + + // A prefix for the cache key used in the session and in the key field of the cache table + const PREFIX = "ATTACH"; + + /** + * Save a newly uploaded attachment + */ + function upload($args) + { + $args['status'] = false; + + $cache = $this->get_cache(); + $key = $this->_key($args); + $data = file_get_contents($args['path']); + + if ($data === false) { + return $args; + } + + $data = base64_encode($data); + $status = $cache->write($key, $data); + + if ($status) { + $args['id'] = $key; + $args['status'] = true; + $args['path'] = null; + } + + return $args; + } + + /** + * Save an attachment from a non-upload source (draft or forward) + */ + function save($args) + { + $args['status'] = false; + + $cache = $this->get_cache(); + $key = $this->_key($args); + + if ($args['path']) { + $args['data'] = file_get_contents($args['path']); + + if ($args['data'] === false) { + return $args; + } + } + + $data = base64_encode($args['data']); + $status = $cache->write($key, $data); + + if ($status) { + $args['id'] = $key; + $args['status'] = true; + } + + return $args; + } + + /** + * Remove an attachment from storage + * This is triggered by the remove attachment button on the compose screen + */ + function remove($args) + { + $cache = $this->get_cache(); + $status = $cache->remove($args['id']); + + $args['status'] = true; + + return $args; + } + + /** + * When composing an html message, image attachments may be shown + * For this plugin, $this->get() will check the file and + * return it's contents + */ + function display($args) + { + return $this->get($args); + } + + /** + * When displaying or sending the attachment the file contents are fetched + * using this method. This is also called by the attachment_display hook. + */ + function get($args) + { + $cache = $this->get_cache(); + $data = $cache->read($args['id']); + + if ($data) { + $args['data'] = base64_decode($data); + $args['status'] = true; + } + + return $args; + } + + /** + * Delete all temp files associated with this user + */ + function cleanup($args) + { + // check if cache object exist, it may be empty on session_destroy (#1489726) + if ($cache = $this->get_cache()) { + $cache->remove($args['group'], true); + } + } + + /** + * Helper method to generate a unique key for the given attachment file + */ + protected function _key($args) + { + $uname = $args['path'] ?: $args['name']; + return $args['group'] . md5(time() . $uname . $_SESSION['user_id']); + } + + /** + * Initialize and return cache object + */ + protected function get_cache() + { + if (!$this->cache) { + $this->load_config(); + + $rcmail = rcube::get_instance(); + $ttl = 12 * 60 * 60; // default: 12 hours + $ttl = $rcmail->config->get('database_attachments_cache_ttl', $ttl); + $type = $rcmail->config->get('database_attachments_cache', 'db'); + $prefix = self::PREFIX; + + // Add session identifier to the prefix to prevent from removing attachments + // in other sessions of the same user (#1490542) + if ($id = session_id()) { + $prefix .= $id; + } + + // Init SQL cache (disable cache data serialization) + $this->cache = $rcmail->get_cache($prefix, $type, $ttl, false); + } + + return $this->cache; + } +} diff --git a/data/web/rc/plugins/database_attachments/tests/DatabaseAttachments.php b/data/web/rc/plugins/database_attachments/tests/DatabaseAttachments.php new file mode 100644 index 00000000..15ea5f44 --- /dev/null +++ b/data/web/rc/plugins/database_attachments/tests/DatabaseAttachments.php @@ -0,0 +1,23 @@ +api); + + $this->assertInstanceOf('database_attachments', $plugin); + $this->assertInstanceOf('rcube_plugin', $plugin); + } +} + diff --git a/data/web/rc/plugins/debug_logger/composer.json b/data/web/rc/plugins/debug_logger/composer.json new file mode 100644 index 00000000..af7e1c1f --- /dev/null +++ b/data/web/rc/plugins/debug_logger/composer.json @@ -0,0 +1,24 @@ +{ + "name": "roundcube/debug_logger", + "type": "roundcube-plugin", + "description": "Enhanced logging for debugging purposes. It is not recommened to be enabled on production systems without testing because of the somewhat increased memory, cpu and disk i/o overhead.", + "license": "GPLv2", + "version": "1.0", + "authors": [ + { + "name": "Ziba Scott", + "email": "ziba@umich.edu", + "role": "Lead" + } + ], + "repositories": [ + { + "type": "composer", + "url": "http://plugins.roundcube.net" + } + ], + "require": { + "php": ">=5.3.0", + "roundcube/plugin-installer": ">=0.1.3" + } +} diff --git a/data/web/rc/plugins/debug_logger/debug_logger.php b/data/web/rc/plugins/debug_logger/debug_logger.php new file mode 100644 index 00000000..98758ae3 --- /dev/null +++ b/data/web/rc/plugins/debug_logger/debug_logger.php @@ -0,0 +1,149 @@ +plugins->init()): + * + * console("my test","start"); + * console("my message"); + * console("my sql calls","start"); + * console("cp -r * /dev/null","shell exec"); + * console("select * from example","sql"); + * console("select * from example","sql"); + * console("select * from example","sql"); + * console("end"); + * console("end"); + * + * + * logs/master (after reloading the main page): + * + * [17-Feb-2009 16:51:37 -0500] start: Task: mail. + * [17-Feb-2009 16:51:37 -0500] start: my test + * [17-Feb-2009 16:51:37 -0500] my message + * [17-Feb-2009 16:51:37 -0500] shell exec: cp -r * /dev/null + * [17-Feb-2009 16:51:37 -0500] start: my sql calls + * [17-Feb-2009 16:51:37 -0500] sql: select * from example + * [17-Feb-2009 16:51:37 -0500] sql: select * from example + * [17-Feb-2009 16:51:37 -0500] sql: select * from example + * [17-Feb-2009 16:51:37 -0500] end: my sql calls - 0.0018 seconds shell exec: 1, sql: 3, + * [17-Feb-2009 16:51:37 -0500] end: my test - 0.0055 seconds shell exec: 1, sql: 3, + * [17-Feb-2009 16:51:38 -0500] end: Task: mail. - 0.8854 seconds shell exec: 1, sql: 3, + * + * logs/sql (after reloading the main page): + * + * [17-Feb-2009 16:51:37 -0500] sql: select * from example + * [17-Feb-2009 16:51:37 -0500] sql: select * from example + * [17-Feb-2009 16:51:37 -0500] sql: select * from example + */ +class debug_logger extends rcube_plugin +{ + function init() + { + require_once(__DIR__ . '/runlog/runlog.php'); + $this->runlog = new runlog(); + + if(!rcmail::get_instance()->config->get('log_dir')){ + rcmail::get_instance()->config->set('log_dir',INSTALL_PATH.'logs'); + } + + $log_config = rcmail::get_instance()->config->get('debug_logger',array()); + + foreach($log_config as $type=>$file){ + $this->runlog->set_file(rcmail::get_instance()->config->get('log_dir').'/'.$file, $type); + } + + $start_string = ""; + $action = rcmail::get_instance()->action; + $task = rcmail::get_instance()->task; + if($action){ + $start_string .= "Action: ".$action.". "; + } + if($task){ + $start_string .= "Task: ".$task.". "; + } + $this->runlog->start($start_string); + + $this->add_hook('console', array($this, 'console')); + $this->add_hook('authenticate', array($this, 'authenticate')); + } + + function authenticate($args){ + $this->runlog->note('Authenticating '.$args['user'].'@'.$args['host']); + return $args; + } + + function console($args){ + $note = $args[0]; + $type = $args[1]; + + + if(!isset($args[1])){ + // This could be extended to detect types based on the + // file which called console. For now only rcube_imap/rcube_storage is supported + $bt = debug_backtrace(); + $file = $bt[3]['file']; + switch(basename($file)){ + case 'rcube_imap.php': + $type = 'imap'; + break; + case 'rcube_storage.php': + $type = 'storage'; + break; + default: + $type = FALSE; + break; + } + } + switch($note){ + case 'end': + $type = 'end'; + break; + } + + + switch($type){ + case 'start': + $this->runlog->start($note); + break; + case 'end': + $this->runlog->end(); + break; + default: + $this->runlog->note($note, $type); + break; + } + return $args; + } + + function __destruct() + { + if ($this->runlog) + $this->runlog->end(); + } +} diff --git a/data/web/rc/plugins/debug_logger/runlog/runlog.php b/data/web/rc/plugins/debug_logger/runlog/runlog.php new file mode 100644 index 00000000..ae352bd5 --- /dev/null +++ b/data/web/rc/plugins/debug_logger/runlog/runlog.php @@ -0,0 +1,233 @@ + + */ +class runlog { + + private $start_time = FALSE; + private $parent_stack = array(); + private $file_handles = array(); + private $indent = 0; + private $run_log = array(); + + public $print_to_console = FALSE; + public $threshold = 0; + public $tag_count = array(); + public $timestamp = "d-M-Y H:i:s O"; + public $max_line_size = 150; + + function runlog() + { + $this->start_time = microtime(true); + } + + public function start($name, $tag = false) + { + $this->run_log[] = array( + 'type' => 'start', + 'tag' => $tag, + 'index' => count($this->run_log), + 'value' => $name, + 'time' => microtime(true), + 'parents' => $this->parent_stack, + 'ended' => false, + ); + + $this->parent_stack[] = $name; + + $this->print_to_console("start: ".$name, $tag, 'start'); + $this->print_to_file("start: ".$name, $tag, 'start'); + $this->indent++; + } + + public function end() + { + $name = array_pop($this->parent_stack); + foreach ($this->run_log as $k => $entry) { + if ($entry['value'] == $name && $entry['type'] == 'start' && !$entry['ended']) { + $lastk = $k; + } + } + + $start = $this->run_log[$lastk]['time']; + $this->run_log[$lastk]['duration'] = microtime(true) - $start; + $this->run_log[$lastk]['ended'] = true; + $this->run_log[] = array( + 'type' => 'end', + 'tag' => $this->run_log[$lastk]['tag'], + 'index' => $lastk, + 'value' => $name, + 'time' => microtime(true), + 'duration' => microtime(true) - $start, + 'parents' => $this->parent_stack, + ); + + $this->indent--; + if ($this->run_log[$lastk]['duration'] >= $this->threshold) { + $tag_report = ""; + foreach($this->tag_count as $tag => $count){ + $tag_report .= "$tag: $count, "; + } + if (!empty($tag_report)) { +// $tag_report = "\n$tag_report\n"; + } + $end_txt = sprintf("end: $name - %0.4f seconds $tag_report", $this->run_log[$lastk]['duration']); + $this->print_to_console($end_txt, $this->run_log[$lastk]['tag'], 'end'); + $this->print_to_file($end_txt, $this->run_log[$lastk]['tag'], 'end'); + } + } + + public function increase_tag_count($tag) + { + if (!isset($this->tag_count[$tag])) { + $this->tag_count[$tag] = 0; + } + + $this->tag_count[$tag]++; + } + + public function get_text() + { + $text = ""; + foreach ($this->run_log as $entry){ + $text .= str_repeat(" ",count($entry['parents'])); + if ($entry['tag'] != 'text'){ + $text .= $entry['tag'].': '; + } + $text .= $entry['value']; + + if ($entry['tag'] == 'end') { + $text .= sprintf(" - %0.4f seconds", $entry['duration']); + } + + $text .= "\n"; + } + + return $text; + } + + public function set_file($filename, $tag = 'master') + { + if (!isset($this->file_handle[$tag])) { + $this->file_handles[$tag] = fopen($filename, 'a'); + if (!$this->file_handles[$tag]) { + trigger_error('Could not open file for writing: '.$filename); + } + } + } + + public function note($msg, $tag = false) + { + if ($tag) { + $this->increase_tag_count($tag); + } + if (is_array($msg)) { + $msg = '
' . print_r($msg, true) . '
'; + } + $this->debug_messages[] = $msg; + $this->run_log[] = array( + 'type' => 'note', + 'tag' => $tag ?: 'text', + 'value' => htmlentities($msg), + 'time' => microtime(true), + 'parents' => $this->parent_stack, + ); + + $this->print_to_file($msg, $tag); + $this->print_to_console($msg, $tag); + } + + public function print_to_file($msg, $tag = false, $type = false) + { + if (!$tag) { + $file_handle_tag = 'master'; + } + else{ + $file_handle_tag = $tag; + } + + if ($file_handle_tag != 'master' && isset($this->file_handles[$file_handle_tag])) { + $buffer = $this->get_indent(); + $buffer .= "$msg\n"; + if (!empty($this->timestamp)) { + $buffer = sprintf("[%s] %s",date($this->timestamp, time()), $buffer); + } + fwrite($this->file_handles[$file_handle_tag], wordwrap($buffer, $this->max_line_size, "\n ")); + } + + if (isset($this->file_handles['master']) && $this->file_handles['master']) { + $buffer = $this->get_indent(); + if ($tag) { + $buffer .= "$tag: "; + } + $msg = str_replace("\n","",$msg); + $buffer .= "$msg"; + if (!empty($this->timestamp)) { + $buffer = sprintf("[%s] %s",date($this->timestamp, time()), $buffer); + } + if(strlen($buffer) > $this->max_line_size){ + $buffer = substr($buffer,0,$this->max_line_size - 3) . "..."; + } + fwrite($this->file_handles['master'], $buffer."\n"); + } + } + + public function print_to_console($msg, $tag = false) + { + if ($this->print_to_console) { + if (is_array($this->print_to_console)) { + if (in_array($tag, $this->print_to_console)) { + echo $this->get_indent(); + if ($tag) { + echo "$tag: "; + } + echo "$msg\n"; + } + } + else { + echo $this->get_indent(); + if ($tag) { + echo "$tag: "; + } + echo "$msg\n"; + } + } + } + + public function print_totals() + { + $totals = array(); + foreach ($this->run_log as $entry) { + if ($entry['type'] == 'start' && $entry['ended']) { + $totals[$entry['value']]['duration'] += $entry['duration']; + $totals[$entry['value']]['count'] += 1; + } + } + + if ($this->file_handle) { + foreach ($totals as $name => $details) { + fwrite($this->file_handle,$name.": ".number_format($details['duration'],4)."sec, ".$details['count']." calls \n"); + } + } + } + + private function get_indent() + { + $buf = ""; + for ($i = 0; $i < $this->indent; $i++) { + $buf .= " "; + } + return $buf; + } + + + function __destruct() + { + foreach ($this->file_handles as $handle) { + fclose($handle); + } + } +} diff --git a/data/web/rc/plugins/debug_logger/tests/DebugLogger.php b/data/web/rc/plugins/debug_logger/tests/DebugLogger.php new file mode 100644 index 00000000..8dd0c03f --- /dev/null +++ b/data/web/rc/plugins/debug_logger/tests/DebugLogger.php @@ -0,0 +1,23 @@ +api); + + $this->assertInstanceOf('debug_logger', $plugin); + $this->assertInstanceOf('rcube_plugin', $plugin); + } +} + diff --git a/data/web/rc/plugins/emoticons/composer.json b/data/web/rc/plugins/emoticons/composer.json new file mode 100644 index 00000000..72f16021 --- /dev/null +++ b/data/web/rc/plugins/emoticons/composer.json @@ -0,0 +1,29 @@ +{ + "name": "roundcube/emoticons", + "type": "roundcube-plugin", + "description": "Plugin that adds emoticons support.", + "license": "GPLv3+", + "version": "2.0", + "authors": [ + { + "name": "Thomas Bruederli", + "email": "roundcube@gmail.com", + "role": "Lead" + }, + { + "name": "Aleksander Machniak", + "email": "alec@alec.pl", + "role": "Developer" + } + ], + "repositories": [ + { + "type": "composer", + "url": "http://plugins.roundcube.net" + } + ], + "require": { + "php": ">=5.3.0", + "roundcube/plugin-installer": ">=0.1.3" + } +} diff --git a/data/web/rc/plugins/emoticons/config.inc.php.dist b/data/web/rc/plugins/emoticons/config.inc.php.dist new file mode 100644 index 00000000..1af6f676 --- /dev/null +++ b/data/web/rc/plugins/emoticons/config.inc.php.dist @@ -0,0 +1,7 @@ +add_hook('message_part_after', array($this, 'message_part_after')); + $this->add_hook('message_outgoing_body', array($this, 'message_outgoing_body')); + $this->add_hook('html2text', array($this, 'html2text')); + $this->add_hook('html_editor', array($this, 'html_editor')); + + if ($rcube->task == 'settings') { + $this->add_hook('preferences_list', array($this, 'preferences_list')); + $this->add_hook('preferences_save', array($this, 'preferences_save')); + } + } + + /** + * 'message_part_after' hook handler to replace common plain text emoticons + * with emoticon images () + */ + function message_part_after($args) + { + if ($args['type'] == 'plain') { + $this->load_config(); + + $rcube = rcube::get_instance(); + if (!$rcube->config->get('emoticons_display', false)) { + return $args; + } + + require_once __DIR__ . '/emoticons_engine.php'; + + $args['body'] = emoticons_engine::text2icons($args['body']); + } + + return $args; + } + + /** + * 'message_outgoing_body' hook handler to replace image emoticons from TinyMCE + * editor with image attachments. + */ + function message_outgoing_body($args) + { + if ($args['type'] == 'html') { + $this->load_config(); + + $rcube = rcube::get_instance(); + if (!$rcube->config->get('emoticons_compose', true)) { + return $args; + } + + require_once __DIR__ . '/emoticons_engine.php'; + + // look for "emoticon" images from TinyMCE and change their src paths to + // be file paths on the server instead of URL paths. + $images = emoticons_engine::replace($args['body']); + + // add these images as attachments to the MIME message + foreach ($images as $img_name => $img_file) { + $args['message']->addHTMLImage($img_file, 'image/gif', '', true, $img_name); + } + } + + return $args; + } + + /** + * 'html2text' hook handler to replace image emoticons from TinyMCE + * editor with plain text emoticons. + * + * This is executed on html2text action, i.e. when switching from HTML to text + * in compose window (or similiar place). Also when generating alternative + * text/plain part. + */ + function html2text($args) + { + $rcube = rcube::get_instance(); + + if ($rcube->action == 'html2text' || $rcube->action == 'send') { + $this->load_config(); + + if (!$rcube->config->get('emoticons_compose', true)) { + return $args; + } + + require_once __DIR__ . '/emoticons_engine.php'; + + $args['body'] = emoticons_engine::icons2text($args['body']); + } + + return $args; + } + + /** + * 'html_editor' hook handler, where we enable emoticons in TinyMCE + */ + function html_editor($args) + { + $rcube = rcube::get_instance(); + + $this->load_config(); + + if ($rcube->config->get('emoticons_compose', true)) { + $args['extra_plugins'][] = 'emoticons'; + $args['extra_buttons'][] = 'emoticons'; + } + + return $args; + } + + /** + * 'preferences_list' hook handler + */ + function preferences_list($args) + { + $rcube = rcube::get_instance(); + $dont_override = $rcube->config->get('dont_override', array()); + + if ($args['section'] == 'mailview' && !in_array('emoticons_display', $dont_override)) { + $this->load_config(); + $this->add_texts('localization'); + + $field_id = 'emoticons_display'; + $checkbox = new html_checkbox(array('name' => '_' . $field_id, 'id' => $field_id, 'value' => 1)); + + $args['blocks']['main']['options']['emoticons_display'] = array( + 'title' => $this->gettext('emoticonsdisplay'), + 'content' => $checkbox->show(intval($rcube->config->get('emoticons_display', false))) + ); + } + else if ($args['section'] == 'compose' && !in_array('emoticons_compose', $dont_override)) { + $this->load_config(); + $this->add_texts('localization'); + + $field_id = 'emoticons_compose'; + $checkbox = new html_checkbox(array('name' => '_' . $field_id, 'id' => $field_id, 'value' => 1)); + + $args['blocks']['main']['options']['emoticons_compose'] = array( + 'title' => $this->gettext('emoticonscompose'), + 'content' => $checkbox->show(intval($rcube->config->get('emoticons_compose', true))) + ); + } + + return $args; + } + + /** + * 'preferences_save' hook handler + */ + function preferences_save($args) + { + $rcube = rcube::get_instance(); + $dont_override = $rcube->config->get('dont_override', array()); + + if ($args['section'] == 'mailview' && !in_array('emoticons_display', $dont_override)) { + $args['prefs']['emoticons_display'] = rcube_utils::get_input_value('_emoticons_display', rcube_utils::INPUT_POST) ? true : false; + } + else if ($args['section'] == 'compose' && !in_array('emoticons_compose', $dont_override)) { + $args['prefs']['emoticons_compose'] = rcube_utils::get_input_value('_emoticons_compose', rcube_utils::INPUT_POST) ? true : false; + } + + return $args; + } +} diff --git a/data/web/rc/plugins/emoticons/emoticons_engine.php b/data/web/rc/plugins/emoticons/emoticons_engine.php new file mode 100644 index 00000000..4d534cdc --- /dev/null +++ b/data/web/rc/plugins/emoticons/emoticons_engine.php @@ -0,0 +1,152 @@ + 'smiley-cool', + ':-#' => 'smiley-foot-in-mouth', + ':-*' => 'smiley-kiss', + ':-X' => 'smiley-sealed', + ':-P' => 'smiley-tongue-out', + ':-@' => 'smiley-yell', + ":'(" => 'smiley-cry', + ':-(' => 'smiley-frown', + ':-D' => 'smiley-laughing', + ':-)' => 'smiley-smile', + ':-S' => 'smiley-undecided', + ':-$' => 'smiley-embarassed', + 'O:-)' => 'smiley-innocent', + ':-|' => 'smiley-money-mouth', + ':-O' => 'smiley-surprised', + ';-)' => 'smiley-wink', + ); + + foreach ($emoticons as $idx => $file) { + // Cry + $file = preg_quote(self::IMG_PATH . $file . '.gif', '/'); + $search[] = '/]+\/>/i'; + $replace[] = $idx; + } + + return preg_replace($search, $replace, $html); + } + + /** + * Replace common plain text emoticons with empticon tags + * + * @param string $text Text + * + * @return string Converted text + */ + public static function text2icons($text) + { + // This is a lookbehind assertion which will exclude html entities + // E.g. situation when ";)" in "")" shouldn't be replaced by the icon + // It's so long because of assertion format restrictions + $entity = '(? self::img_tag('smiley-laughing.gif', ':D' ), + '/:-D/' => self::img_tag('smiley-laughing.gif', ':-D' ), + '/:\(/' => self::img_tag('smiley-frown.gif', ':(' ), + '/:-\(/' => self::img_tag('smiley-frown.gif', ':-(' ), + '/'.$entity.';\)/' => self::img_tag('smiley-wink.gif', ';)' ), + '/'.$entity.';-\)/' => self::img_tag('smiley-wink.gif', ';-)' ), + '/8\)/' => self::img_tag('smiley-cool.gif', '8)' ), + '/8-\)/' => self::img_tag('smiley-cool.gif', '8-)' ), + '/(? self::img_tag('smiley-surprised.gif', ':O' ), + '/(? self::img_tag('smiley-surprised.gif', ':-O' ), + '/(? self::img_tag('smiley-tongue-out.gif', ':P' ), + '/(? self::img_tag('smiley-tongue-out.gif', ':-P' ), + '/(? self::img_tag('smiley-yell.gif', ':@' ), + '/(? self::img_tag('smiley-yell.gif', ':-@' ), + '/O:\)/i' => self::img_tag('smiley-innocent.gif', 'O:)' ), + '/O:-\)/i' => self::img_tag('smiley-innocent.gif', 'O:-)' ), + '/(? self::img_tag('smiley-smile.gif', ':)' ), + '/(? self::img_tag('smiley-smile.gif', ':-)' ), + '/(? self::img_tag('smiley-embarassed.gif', ':$' ), + '/(? self::img_tag('smiley-embarassed.gif', ':-$' ), + '/(? self::img_tag('smiley-kiss.gif', ':*' ), + '/(? self::img_tag('smiley-kiss.gif', ':-*' ), + '/(? self::img_tag('smiley-undecided.gif', ':S' ), + '/(? self::img_tag('smiley-undecided.gif', ':-S' ), + ); + + return preg_replace(array_keys($map), array_values($map), $text); + } + + protected static function img_tag($ico, $title) + { + return html::img(array('src' => './' . self::IMG_PATH . $ico, 'title' => $title)); + } + + /** + * Replace emoticon icons 'src' attribute, so it can + * be replaced with real file by Mail_Mime. + * + * @param string &$html HTML content + * + * @return array List of image files + */ + public static function replace(&$html) + { + // Replace this: + // + // with this: + // + + $rcube = rcube::get_instance(); + $assets_dir = $rcube->config->get('assets_dir'); + $path = unslashify($assets_dir ?: INSTALL_PATH) . '/' . self::IMG_PATH; + $offset = 0; + $images = array(); + + // remove any null-byte characters before parsing + $html = preg_replace('/\x00/', '', $html); + + if (preg_match_all('# src=[\'"]([^\'"]+)#', $html, $matches, PREG_OFFSET_CAPTURE)) { + foreach ($matches[1] as $m) { + // find emoticon image tags + if (preg_match('#'. self::IMG_PATH . '(.*)$#', $m[0], $imatches)) { + $image_name = $imatches[1]; + + // sanitize image name so resulting attachment doesn't leave images dir + $image_name = preg_replace('/[^a-zA-Z0-9_\.\-]/i', '', $image_name); + $image_file = $path . $image_name; + + // Add the same image only once + $images[$image_name] = $image_file; + + $html = substr_replace($html, $image_file, $m[1] + $offset, strlen($m[0])); + $offset += strlen($image_file) - strlen($m[0]); + } + } + } + + return $images; + } +} diff --git a/data/web/rc/plugins/emoticons/localization/en_US.inc b/data/web/rc/plugins/emoticons/localization/en_US.inc new file mode 100644 index 00000000..04b10964 --- /dev/null +++ b/data/web/rc/plugins/emoticons/localization/en_US.inc @@ -0,0 +1,23 @@ +.inc | + | | + | Localization file of the Roundcube Webmail Emoticons plugin | + | Copyright (C) 2012-2015, The Roundcube Dev Team | + | | + | Licensed under the GNU General Public License version 3 or | + | any later version with exceptions for skins & plugins. | + | See the README file for a full license statement. | + | | + +-----------------------------------------------------------------------+ + + For translation see https://www.transifex.com/projects/p/roundcube-webmail/resource/plugin-emoticons/ +*/ + +$labels = array(); +$labels['emoticonsdisplay'] = 'Display emoticons in plain text messages'; +$labels['emoticonscompose'] = 'Enable emoticons'; + +?> diff --git a/data/web/rc/plugins/emoticons/tests/Emoticons.php b/data/web/rc/plugins/emoticons/tests/Emoticons.php new file mode 100644 index 00000000..bc21ceb1 --- /dev/null +++ b/data/web/rc/plugins/emoticons/tests/Emoticons.php @@ -0,0 +1,22 @@ +api); + + $this->assertInstanceOf('emoticons', $plugin); + $this->assertInstanceOf('rcube_plugin', $plugin); + } +} diff --git a/data/web/rc/plugins/emoticons/tests/EmoticonsEngine.php b/data/web/rc/plugins/emoticons/tests/EmoticonsEngine.php new file mode 100644 index 00000000..f343450e --- /dev/null +++ b/data/web/rc/plugins/emoticons/tests/EmoticonsEngine.php @@ -0,0 +1,48 @@ + array('smiley-laughing.gif', ':D' ), + ':-D' => array('smiley-laughing.gif', ':-D' ), + ':(' => array('smiley-frown.gif', ':(' ), + ':-(' => array('smiley-frown.gif', ':-(' ), + '8)' => array('smiley-cool.gif', '8)' ), + '8-)' => array('smiley-cool.gif', '8-)' ), + ':O' => array('smiley-surprised.gif', ':O' ), + ':-O' => array('smiley-surprised.gif', ':-O' ), + ':P' => array('smiley-tongue-out.gif', ':P' ), + ':-P' => array('smiley-tongue-out.gif', ':-P' ), + ':@' => array('smiley-yell.gif', ':@' ), + ':-@' => array('smiley-yell.gif', ':-@' ), + 'O:)' => array('smiley-innocent.gif', 'O:)' ), + 'O:-)' => array('smiley-innocent.gif', 'O:-)' ), + ':)' => array('smiley-smile.gif', ':)' ), + ':-)' => array('smiley-smile.gif', ':-)' ), + ':$' => array('smiley-embarassed.gif', ':$' ), + ':-$' => array('smiley-embarassed.gif', ':-$' ), + ':*' => array('smiley-kiss.gif', ':*' ), + ':-*' => array('smiley-kiss.gif', ':-*' ), + ':S' => array('smiley-undecided.gif', ':S' ), + ':-S' => array('smiley-undecided.gif', ':-S' ), + ); + + foreach ($map as $body => $expected) { + $result = emoticons_engine::text2icons($body); + + $this->assertRegExp('/' . preg_quote($expected[0], '/') . '/', $result); + $this->assertRegExp('/title="' . preg_quote($expected[1], '/') . '"/', $result); + } + } +} diff --git a/data/web/rc/plugins/enigma/README b/data/web/rc/plugins/enigma/README new file mode 100644 index 00000000..c1ae653e --- /dev/null +++ b/data/web/rc/plugins/enigma/README @@ -0,0 +1,64 @@ +Enigma Plugin for Roundcube + +This plugin adds support for viewing and sending of signed and encrypted +messages in PGP (RFC 2440) and PGP/MIME (RFC 3156) format. + +The plugin uses gpg binary on the server and stores all keys +(including private keys of the users) on the server. +Encryption/decryption is done server-side. So, this plugin +is for users that trust the server. + + +Implemented features: +--------------------- ++ PGP: signatures verification ++ PGP: messages decryption ++ PGP: Sending of encrypted/signed messages ++ PGP: keys management UI (key import, export, delete) ++ PGP: key generation (client- or server-side) ++ Handling of PGP keys attached to incoming messages ++ User preferences to disable plugin features ++ Attaching public keys to email ++ Key server(s) support (search, import) + + +TODO: +----- +- Handling of big messages with temp files (? - security) +- Key info in contact details page (optional) +- Extended key management: + - disable, + - revoke, + - change expiration date, change passphrase, add photo, + - manage user IDs + - export private keys +- Generate revocation certs +- Search filter to see invalid/expired keys +- Key server(s) support (upload, refresh) +- Mark keys as trusted/untrasted, display appropriate message in verify/decrypt status +- Support for multi-server installations (store keys in sql database? probably impossible with GnuPG 2.1) +- Performance improvements: + - cache decrypted message key id so we can skip decryption if we have no password in session + - cache (last or successful only?) sig verification status to not verify on every msg preview (optional) +- S/MIME: Certs generation (?) +- S/MIME: Certs management +- S/MIME: signed messages verification +- S/MIME: encrypted messages decryption +- S/MIME: Sending signed/encrypted messages +- S/MIME: Handling of certs attached to incoming messages +- S/MIME: Certificate info in Contacts details page (optional) + + +KNOWN ISSUES: +------------- +There are some known issues with accepting key passphrases on various +system configurations. This is caused by issues in PinEntry handling. +Make sure that vendor/bin/crypt-gpg-pinentry works from command line. + +Possible reasons: +- non-working loader in shebang (#! /usr/bin/env php) + Make sure it works for the user the php scripts are executed upon + (i.e. apache, www-date, etc.) + +Note: pinentry is used with gpg >= 2.0 and <= 2.1.12. +Note: for server use GnuPG developers still recommend version 1.4. diff --git a/data/web/rc/plugins/enigma/composer.json b/data/web/rc/plugins/enigma/composer.json new file mode 100644 index 00000000..fa63a3d1 --- /dev/null +++ b/data/web/rc/plugins/enigma/composer.json @@ -0,0 +1,29 @@ +{ + "name": "roundcube/enigma", + "type": "roundcube-plugin", + "description": "Server-side PGP Encryption for Roundcube", + "license": "GPLv3+", + "version": "0.7", + "authors": [ + { + "name": "Aleksander Machniak", + "email": "alec@alec.pl", + "role": "Lead" + } + ], + "repositories": [ + { + "type": "pear", + "url": "http://pear.php.net/" + }, + { + "type": "composer", + "url": "http://plugins.roundcube.net" + } + ], + "require": { + "php": ">=5.3.0", + "roundcube/plugin-installer": "~0.1.6", + "pear-pear.php.net/crypt_gpg": "~1.6.0@beta" + } +} diff --git a/data/web/rc/plugins/enigma/config.inc.php.dist b/data/web/rc/plugins/enigma/config.inc.php.dist new file mode 100644 index 00000000..aa4280f4 --- /dev/null +++ b/data/web/rc/plugins/enigma/config.inc.php.dist @@ -0,0 +1,62 @@ += 2.1. +$config['enigma_pgp_gpgconf'] = ''; + +// Enables signatures verification feature. +$config['enigma_signatures'] = true; + +// Enables messages decryption feature. +$config['enigma_decryption'] = true; + +// Enables messages encryption and signing feature. +$config['enigma_encryption'] = true; + +// Enable signing all messages by default +$config['enigma_sign_all'] = false; + +// Enable encrypting all messages by default +$config['enigma_encrypt_all'] = false; + +// Enable attaching a public key to all messages by default +$config['enigma_attach_pubkey'] = false; + +// Default for how long to store private key passwords (in minutes). +// When set to 0 passwords will be stored for the whole session. +$config['enigma_password_time'] = 5; + +// With this option you can lock composing options +// of the plugin forcing the user to use configured settings. +// The array accepts: 'sign', 'encrypt', 'pubkey'. +// +// For example, to force your users to sign every email, +// you should set: +// - enigma_sign_all = true +// - enigma_options_lock = array('sign') +// - dont_override = array('enigma_sign_all') +$config['enigma_options_lock'] = array(); diff --git a/data/web/rc/plugins/enigma/enigma.js b/data/web/rc/plugins/enigma/enigma.js new file mode 100644 index 00000000..1c819635 --- /dev/null +++ b/data/web/rc/plugins/enigma/enigma.js @@ -0,0 +1,625 @@ +/* Enigma Plugin */ + +window.rcmail && rcmail.addEventListener('init', function(evt) { + if (rcmail.env.task == 'settings') { + if (rcmail.gui_objects.keyslist) { + rcmail.keys_list = new rcube_list_widget(rcmail.gui_objects.keyslist, + {multiselect:true, draggable:false, keyboard:false}); + rcmail.keys_list + .addEventListener('select', function(o) { rcmail.enigma_keylist_select(o); }) + .addEventListener('keypress', function(o) { rcmail.enigma_keylist_keypress(o); }) + .init() + .focus(); + + rcmail.enigma_list(); + + rcmail.register_command('firstpage', function(props) { return rcmail.enigma_list_page('first'); }); + rcmail.register_command('previouspage', function(props) { return rcmail.enigma_list_page('previous'); }); + rcmail.register_command('nextpage', function(props) { return rcmail.enigma_list_page('next'); }); + rcmail.register_command('lastpage', function(props) { return rcmail.enigma_list_page('last'); }); + } + + if (rcmail.env.action == 'plugin.enigmakeys') { + rcmail.register_command('search', function(props) {return rcmail.enigma_search(props); }, true); + rcmail.register_command('reset-search', function(props) {return rcmail.enigma_search_reset(props); }, true); + rcmail.register_command('plugin.enigma-import', function() { rcmail.enigma_import(); }, true); + rcmail.register_command('plugin.enigma-import-search', function() { rcmail.enigma_import_search(); }, true); + rcmail.register_command('plugin.enigma-key-export', function() { rcmail.enigma_export(); }); + rcmail.register_command('plugin.enigma-key-export-selected', function() { rcmail.enigma_export(true); }); + rcmail.register_command('plugin.enigma-key-import', function() { rcmail.enigma_key_import(); }, true); + rcmail.register_command('plugin.enigma-key-delete', function(props) { return rcmail.enigma_delete(); }); + rcmail.register_command('plugin.enigma-key-create', function(props) { return rcmail.enigma_key_create(); }, true); + rcmail.register_command('plugin.enigma-key-save', function(props) { return rcmail.enigma_key_create_save(); }, true); + + rcmail.addEventListener('responseafterplugin.enigmakeys', function() { + rcmail.enable_command('plugin.enigma-key-export', rcmail.env.rowcount > 0); + }); + + if (rcmail.gui_objects.importform) { + // make sure Enter key in search input starts searching + // instead of submitting the form + $('#rcmimportsearch').keydown(function(e) { + if (e.which == 13) { + rcmail.enigma_import_search(); + return false; + } + }); + + $('input[type="button"]:first').focus(); + } + } + } + else if (rcmail.env.task == 'mail') { + if (rcmail.env.action == 'compose') { + rcmail.addEventListener('beforesend', function(props) { rcmail.enigma_beforesend_handler(props); }) + .addEventListener('beforesavedraft', function(props) { rcmail.enigma_beforesavedraft_handler(props); }); + + $('input,label', $('#enigmamenu')).mouseup(function(e) { + // don't close the menu on mouse click inside + e.stopPropagation(); + }); + + $('a.button.enigma').prop('tabindex', $('#messagetoolbar > a:first').prop('tabindex')); + } + + $.each(['encrypt', 'sign'], function() { + if (rcmail.env['enigma_force_' + this]) + $('[name="_enigma_' + this + '"]').prop('checked', true); + }); + + if (rcmail.env.enigma_password_request) { + rcmail.enigma_password_request(rcmail.env.enigma_password_request); + } + } +}); + + +/*********************************************************/ +/********* Enigma Settings/Keys/Certs UI *********/ +/*********************************************************/ + +// Display key(s) import form +rcube_webmail.prototype.enigma_key_import = function() +{ + this.enigma_loadframe('&_action=plugin.enigmakeys&_a=import'); +}; + +// Display key(s) generation form +rcube_webmail.prototype.enigma_key_create = function() +{ + this.enigma_loadframe('&_action=plugin.enigmakeys&_a=create'); +}; + +// Generate key(s) and submit them +rcube_webmail.prototype.enigma_key_create_save = function() +{ + var options, lock, users = [], + password = $('#key-pass').val(), + confirm = $('#key-pass-confirm').val(), + size = $('#key-size').val(); + + $('[name="identity[]"]:checked').each(function() { + users.push(this.value); + }); + + // validate the form + if (!password || !confirm) + return alert(this.get_label('enigma.formerror')); + + if (password != confirm) + return alert(this.get_label('enigma.passwordsdiffer')); + + if (!users.length) + return alert(this.get_label('enigma.noidentselected')); + + // generate keys + // use OpenPGP.js if browser supports required features + if (window.openpgp && window.crypto && (window.crypto.getRandomValues || window.crypto.subtle)) { + lock = this.set_busy(true, 'enigma.keygenerating'); + options = { + numBits: size, + userId: users, + passphrase: password + }; + + openpgp.generateKeyPair(options).then(function(keypair) { + // success + var post = {_a: 'import', _keys: keypair.privateKeyArmored, _generated: 1, + _passwd: password, _keyid: keypair.key.primaryKey.fingerprint}; + + // send request to server + rcmail.http_post('plugin.enigmakeys', post, lock); + }, function(error) { + // failure + rcmail.set_busy(false, null, lock); + rcmail.display_message(rcmail.get_label('enigma.keygenerateerror'), 'error'); + }); + } + else { + rcmail.display_message(rcmail.get_label('enigma.keygennosupport'), 'error'); + } +}; + +// Action executed after successful key generation and import +rcube_webmail.prototype.enigma_key_create_success = function() +{ + parent.rcmail.enigma_list(1); +}; + +// Delete key(s) +rcube_webmail.prototype.enigma_delete = function() +{ + var keys = this.keys_list.get_selection(); + + if (!keys.length || !confirm(this.get_label('enigma.keyremoveconfirm'))) + return; + + var lock = this.display_message(this.get_label('enigma.keyremoving'), 'loading'), + post = {_a: 'delete', _keys: keys}; + + // send request to server + this.http_post('plugin.enigmakeys', post, lock); +}; + +// Export key(s) +rcube_webmail.prototype.enigma_export = function(selected) +{ + var priv = false, + list = this.keys_list, + keys = selected ? list.get_selection().join(',') : '*', + args = {_keys: keys}; + + if (!keys.length) + return; + + // find out whether selected keys are private + if (keys == '*') + priv = true; + else + $.each(list.get_selection(), function() { + flags = $(list.rows[this].obj).data('flags'); + if (flags && flags.indexOf('p') >= 0) { + priv = true; + return false; + } + }); + + // ask the user about including private key in the export + if (priv) + return this.show_popup_dialog( + this.get_label('enigma.keyexportprompt'), + this.get_label('enigma.exportkeys'), + [{ + text: this.get_label('enigma.onlypubkeys'), + click: function(e) { + rcmail.enigma_export_submit(args); + $(this).remove(); + } + }, + { + text: this.get_label('enigma.withprivkeys'), + click: function(e) { + args._priv = 1; + rcmail.enigma_export_submit(args); + $(this).remove(); + } + }], + {width: 400} + ); + + this.enigma_export_submit(args); +}; + +// Sumbitting request for key(s) export +// Done this way to handle password input +rcube_webmail.prototype.enigma_export_submit = function(data) +{ + var id = 'keyexport-' + new Date().getTime(), + form = $('
').attr({target: id, method: 'post', style: 'display:none', + action: '?_action=plugin.enigmakeys&_task=settings&_a=export'}), + iframe = $('"}else"application/x-shockwave-flash"===c.source1mime?(l+='',c.poster&&(l+=''),l+=""):c.source1mime.indexOf("audio")!==-1?a.settings.audio_template_callback?l=a.settings.audio_template_callback(c):l+='":"script"===c.type?l+='':l=a.settings.video_template_callback?a.settings.video_template_callback(c):'"}return l};return{dataToHtml:a}}),s("h",tinymce.util.Promise),a("b",["g","h"],function(e,t){var n=function(e,n,r){var i={};return new t(function(t,o){var a=function(r){return r.html&&(i[e.source1]=r),t({url:e.source1,html:r.html?r.html:n(e)})};i[e.source1]?a(i[e.source1]):r({url:e.source1},a,o)})},r=function(e,n){return new t(function(t){t({html:n(e),url:e.source1})})},i=function(t){return function(n){return e.dataToHtml(t,n)}},o=function(e,t){var o=e.settings.media_url_resolver;return o?n(t,i(e),o):r(t,i(e))};return{getEmbedHtml:o}}),s("d",tinymce.Env),a("2",["6","7","4","b","c","d"],function(e,t,n,r,i,o){var a=o.ie&&o.ie<=8?"onChange":"onInput",s=function(e){return function(t){var n=t&&t.msg?"Media embed handler error: "+t.msg:"Media embed handler threw unknown error.";e.notificationManager.open({type:"error",text:n})}},l=function(e){var n=e.selection.getNode(),r=n.getAttribute("data-ephox-embed-iri");return r?{source1:r,"data-ephox-embed-iri":r}:n.getAttribute("data-mce-object")?t.htmlToData(e.settings.media_scripts,e.serializer.serialize(n,{selection:!0})):{}},c=function(e){var t=e.selection.getNode();if(t.getAttribute("data-mce-object"))return e.selection.getContent()},u=function(e,n){return function(r){var o=r.html;e.find("#embed").value(o);var a=i.extend(t.htmlToData(n.settings.media_scripts,o),{source1:r.url});e.fromJSON(a),h(e)}},d=function(e,t){var n,r,i=e.dom.select("img[data-mce-object]");for(n=0;n=0;r--)t[n]===i[r]&&i.splice(r,1);e.selection.select(i[0])},f=function(e){return function(){var t=this.toJSON();r.getEmbedHtml(e,t).then(function(n){var r=e.dom.select("img[data-mce-object]"),i=t.embed?t.embed:n.html;e.insertContent(i),d(e,r),e.nodeChanged()}).catch(s(e))}},h=function(e){var t=e.find("#width")[0],n=e.find("#height")[0];t&&n&&(t.state.set("oldVal",t.value()),n.state.set("oldVal",n.value()))},p=function(e,t){i.each(t,function(t,n){e.find("#"+n).value(t)})},m=function(e){var o,d,m=[{name:"source1",type:"filepicker",filetype:"media",size:40,autofocus:!0,label:"Source",onpaste:function(){setTimeout(function(){r.getEmbedHtml(e,o.toJSON()).then(u(o,e)).catch(s(e))},1)},onchange:function(t){r.getEmbedHtml(e,o.toJSON()).then(u(o,e)).catch(s(e)),p(o,t.meta)},onbeforecall:function(e){e.meta=o.toJSON()}}],g=function(e){var t=o.find("#width")[0],r=o.find("#height")[0],i=t.state.get("oldVal"),a=r.state.get("oldVal"),s=t.value(),l=r.value();o.find("#constrain")[0].checked()&&i&&a&&s&&l&&(e.control.name()===t.name()?(l=Math.round(s/i*l),isNaN(l)||r.value(l)):(s=Math.round(l/a*s),isNaN(s)||t.value(s))),d=o.toJSON(),o.find("#embed").value(n.updateHtml(d.embed,d)),h(o)};e.settings.media_alt_source!==!1&&m.push({name:"source2",type:"filepicker",filetype:"media",size:40,label:"Alternative source"}),e.settings.media_poster!==!1&&m.push({name:"poster",type:"filepicker",filetype:"image",size:40,label:"Poster"}),e.settings.media_dimensions!==!1&&m.push({type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:3,onchange:g,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:3,onchange:g,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}),d=l(e);var v={id:"mcemediasource",type:"textbox",flex:1,name:"embed",value:c(e),multiline:!0,label:"Source"},y=function(){d=i.extend({},t.htmlToData(e.settings.media_scripts,this.value())),this.parent().parent().fromJSON(d)};v[a]=y,o=e.windowManager.open({title:"Insert/edit video",data:d,bodyType:"tabpanel",body:[{title:"General",type:"form",items:m},{title:"Embed",type:"container",layout:"flex",direction:"column",align:"stretch",padding:10,spacing:10,items:[{type:"label",text:"Paste your embed code below:",forId:"mcemediasource"},v]}],onSubmit:f(e)}),h(o)};return{showDialog:m}}),a("3",["c","8","9","a"],function(e,t,n,r){var i=function(e,i){if(e.settings.media_filter_html===!1)return i;var o,a=new t;return new n({validate:!1,allow_conditional_comments:!1,special:"script,noscript",comment:function(e){a.comment(e)},cdata:function(e){a.cdata(e)},text:function(e,t){a.text(e,t)},start:function(t,n,r){if(o=!0,"script"!==t&&"noscript"!==t){for(var i=0;i]*>","gi")});var r=e.schema.getBoolAttrs();tinymce.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){r[e]={}}),e.parser.addNodeFilter("iframe,video,audio,object,embed,script",i.placeHolderConverter(e)),e.serializer.addAttributeFilter("data-mce-object",function(t,r){for(var i,o,a,s,l,c,u,d,f=t.length;f--;)if(i=t[f],i.parent){for(u=i.attr(r),o=new tinymce.html.Node(u,1),"audio"!==u&&"script"!==u&&(d=i.attr("class"),d&&d.indexOf("mce-preview-object")!==-1?o.attr({width:i.firstChild.attr("width"),height:i.firstChild.attr("height")}):o.attr({width:i.attr("width"),height:i.attr("height")})),o.attr({style:i.attr("style")}),s=i.attributes,a=s.length;a--;){var h=s[a].name;0===h.indexOf("data-mce-p-")&&o.attr(h.substr(11),s[a].value)}"script"===u&&o.attr("type","text/javascript"),l=i.attr("data-mce-html"),l&&(c=new tinymce.html.Node("#text",3),c.raw=!0,c.value=n.sanitize(e,unescape(l)),o.append(c)),i.replace(o)}})}),e.on("click keyup",function(){var t=e.selection.getNode();t&&e.dom.hasClass(t,"mce-preview-object")&&e.dom.getAttrib(t,"data-mce-selected")&&t.setAttribute("data-mce-selected","2")}),e.on("ObjectSelected",function(e){var t=e.target.getAttribute("data-mce-object");"audio"!==t&&"script"!==t||e.preventDefault()}),e.on("objectResized",function(e){var t,n=e.target;n.getAttribute("data-mce-object")&&(t=n.getAttribute("data-mce-html"),t&&(t=unescape(t),n.setAttribute("data-mce-html",escape(r.updateHtml(t,{width:e.width,height:e.height})))))}),this.showDialog=function(){t.showDialog(e)},e.addButton("media",{tooltip:"Insert/edit video",onclick:this.showDialog,stateSelector:["img[data-mce-object]","span[data-mce-object]","div[data-ephox-embed-iri]"]}),e.addMenuItem("media",{icon:"media",text:"Media",onclick:this.showDialog,context:"insert",prependToContext:!0}),e.on("setContent",function(){e.$("span.mce-preview-object").each(function(t,n){var r=e.$(n);0===r.find("span.mce-shim",n).length&&r.append('')})}),e.addCommand("mceMedia",this.showDialog)};return e.add("media",o),function(){}}),r("0")()}(); \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/plugins/nonbreaking/plugin.min.js b/data/web/rc/program/js/tinymce/plugins/nonbreaking/plugin.min.js new file mode 100644 index 00000000..cae1aca4 --- /dev/null +++ b/data/web/rc/program/js/tinymce/plugins/nonbreaking/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("nonbreaking",function(e){var t=e.getParam("nonbreaking_force_tab");if(e.addCommand("mceNonBreaking",function(){e.insertContent(e.plugins.visualchars&&e.plugins.visualchars.state?' ':" "),e.dom.setAttrib(e.dom.select("span.mce-nbsp"),"data-mce-bogus","1")}),e.addButton("nonbreaking",{title:"Nonbreaking space",cmd:"mceNonBreaking"}),e.addMenuItem("nonbreaking",{text:"Nonbreaking space",cmd:"mceNonBreaking",context:"insert"}),t){var n=+t>1?+t:3;e.on("keydown",function(t){if(9==t.keyCode){if(t.shiftKey)return;t.preventDefault();for(var r=0;r0?a.charAt(r-1):"";if('"'===i)return t;if(">"===i){var o=a.lastIndexOf("<",r);if(o!==-1){var l=a.substring(o,r);if(l.indexOf('contenteditable="false"')!==-1)return t}}return''+e.dom.encode("string"==typeof n[1]?n[1]:n[0])+""}var r=o.length,a=t.content,s=tinymce.trim(i);if("raw"!=t.format){for(;r--;)a=a.replace(o[r],n);t.content=a}}var r,i,o,a="contenteditable";r=" "+tinymce.trim(e.getParam("noneditable_editable_class","mceEditable"))+" ",i=" "+tinymce.trim(e.getParam("noneditable_noneditable_class","mceNonEditable"))+" ";var s=t(r),l=t(i);o=e.getParam("noneditable_regexp"),o&&!o.length&&(o=[o]),e.on("PreInit",function(){o&&e.on("BeforeSetContent",n),e.parser.addAttributeFilter("class",function(e){for(var t,n=e.length;n--;)t=e[n],s(t)?t.attr(a,"true"):l(t)&&t.attr(a,"false")}),e.serializer.addAttributeFilter(a,function(e){for(var t,n=e.length;n--;)t=e[n],(s(t)||l(t))&&(o&&t.attr("data-mce-content")?(t.name="#text",t.type=3,t.raw=!0,t.value=t.attr("data-mce-content")):t.attr(a,null))})})}); \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/plugins/pagebreak/plugin.min.js b/data/web/rc/program/js/tinymce/plugins/pagebreak/plugin.min.js new file mode 100644 index 00000000..78fea042 --- /dev/null +++ b/data/web/rc/program/js/tinymce/plugins/pagebreak/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("pagebreak",function(e){var t="mce-pagebreak",n=e.getParam("pagebreak_separator",""),r=new RegExp(n.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(e){return"\\"+e}),"gi"),i='';e.addCommand("mcePageBreak",function(){e.settings.pagebreak_split_block?e.insertContent("

"+i+"

"):e.insertContent(i)}),e.addButton("pagebreak",{title:"Page break",cmd:"mcePageBreak"}),e.addMenuItem("pagebreak",{text:"Page break",icon:"pagebreak",cmd:"mcePageBreak",context:"insert"}),e.on("ResolveName",function(n){"IMG"==n.target.nodeName&&e.dom.hasClass(n.target,t)&&(n.name="pagebreak")}),e.on("click",function(n){n=n.target,"IMG"===n.nodeName&&e.dom.hasClass(n,t)&&e.selection.select(n)}),e.on("BeforeSetContent",function(e){e.content=e.content.replace(r,i)}),e.on("PreInit",function(){e.serializer.addNodeFilter("img",function(t){for(var r,i,o=t.length;o--;)if(r=t[o],i=r.attr("class"),i&&i.indexOf("mce-pagebreak")!==-1){var a=r.parent;if(e.schema.getBlockElements()[a.name]&&e.settings.pagebreak_split_block){a.type=3,a.value=n,a.raw=!0,r.remove();continue}r.type=3,r.value=n,r.raw=!0}})})}); \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/plugins/paste/plugin.dev.js b/data/web/rc/program/js/tinymce/plugins/paste/plugin.dev.js new file mode 100644 index 00000000..dd145fd4 --- /dev/null +++ b/data/web/rc/program/js/tinymce/plugins/paste/plugin.dev.js @@ -0,0 +1,143 @@ +/** + * Inline development version. Only to be used while developing since it uses document.write to load scripts. + */ + +/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */ +/*globals $code */ + +(function(exports) { + "use strict"; + + var html = "", baseDir; + var modules = {}, exposedModules = [], moduleCount = 0; + + var scripts = document.getElementsByTagName('script'); + for (var i = 0; i < scripts.length; i++) { + var src = scripts[i].src; + + if (src.indexOf('/plugin.dev.js') != -1) { + baseDir = src.substring(0, src.lastIndexOf('/')); + } + } + + function require(ids, callback) { + var module, defs = []; + + for (var i = 0; i < ids.length; ++i) { + module = modules[ids[i]] || resolve(ids[i]); + if (!module) { + throw 'module definition dependecy not found: ' + ids[i]; + } + + defs.push(module); + } + + callback.apply(null, defs); + } + + function resolve(id) { + if (exports.privateModules && id in exports.privateModules) { + return; + } + + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length; ++fi) { + if (!target[fragments[fi]]) { + return; + } + + target = target[fragments[fi]]; + } + + return target; + } + + function register(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length - 1; ++fi) { + if (target[fragments[fi]] === undefined) { + target[fragments[fi]] = {}; + } + + target = target[fragments[fi]]; + } + + target[fragments[fragments.length - 1]] = modules[id]; + } + + function define(id, dependencies, definition) { + var privateModules, i; + + if (typeof id !== 'string') { + throw 'invalid module definition, module id must be defined and be a string'; + } + + if (dependencies === undefined) { + throw 'invalid module definition, dependencies must be specified'; + } + + if (definition === undefined) { + throw 'invalid module definition, definition function must be specified'; + } + + require(dependencies, function() { + modules[id] = definition.apply(null, arguments); + }); + + if (--moduleCount === 0) { + for (i = 0; i < exposedModules.length; i++) { + register(exposedModules[i]); + } + } + + // Expose private modules for unit tests + if (exports.AMDLC_TESTS) { + privateModules = exports.privateModules || {}; + + for (id in modules) { + privateModules[id] = modules[id]; + } + + for (i = 0; i < exposedModules.length; i++) { + delete privateModules[exposedModules[i]]; + } + + exports.privateModules = privateModules; + } + + } + + function expose(ids) { + exposedModules = ids; + } + + function writeScripts() { + document.write(html); + } + + function load(path) { + html += '\n'; + moduleCount++; + } + + // Expose globally + exports.define = define; + exports.require = require; + + expose(["tinymce/pasteplugin/Utils"]); + + load('classes/Utils.js'); + load('classes/SmartPaste.js'); + load('classes/Clipboard.js'); + load('classes/WordFilter.js'); + load('classes/Quirks.js'); + load('classes/Plugin.js'); + + writeScripts(); +})(this); + +// $hash: f991045b4dd37405c0ee4fc0d6f2269c \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/plugins/paste/plugin.min.js b/data/web/rc/program/js/tinymce/plugins/paste/plugin.min.js new file mode 100644 index 00000000..181382ab --- /dev/null +++ b/data/web/rc/program/js/tinymce/plugins/paste/plugin.min.js @@ -0,0 +1 @@ +!function(e,t){"use strict";function n(e,t){for(var n,r=[],o=0;o/g]),o(s.parse(i)),l}function o(e){function t(e,t,n){return t||n?"\xa0":" "}return e=r(e,[/^[\s\S]*]*>\s*|\s*<\/body[^>]*>[\s\S]*$/g,/|/g,[/( ?)\u00a0<\/span>( ?)/g,t],/
/g,/
$/i])}function a(e){var t=0;return function(){return e+t++}}return{filter:r,innerText:i,trimHtml:o,createIdGenerator:a}}),r("tinymce/pasteplugin/SmartPaste",["tinymce/util/Tools"],function(e){var t=function(e){return/^https?:\/\/[\w\?\-\/+=.&%@~#]+$/i.test(e)},n=function(e){return t(e)&&/.(gif|jpe?g|png)$/.test(e)},r=function(e,t,n){return e.undoManager.extra(function(){n(e,t)},function(){e.insertContent('')}),!0},i=function(e,t,n){return e.undoManager.extra(function(){n(e,t)},function(){e.execCommand("mceInsertLink",!1,t)}),!0},o=function(e,n,r){return!(e.selection.isCollapsed()!==!1||!t(n))&&i(e,n,r)},a=function(e,t,i){return!!n(t)&&r(e,t,i)},s=function(e,t){return e.insertContent(t,{merge:e.settings.paste_merge_formats!==!1,paste:!0}),!0},l=function(t,n){e.each([o,a,s],function(e){return e(t,n,s)!==!0})},c=function(e,t){e.settings.smart_paste===!1?s(e,t):l(e,t)};return{isImageUrl:n,isAbsoluteUrl:t,insertContent:c}}),r("tinymce/pasteplugin/Clipboard",["tinymce/Env","tinymce/dom/RangeUtils","tinymce/util/VK","tinymce/pasteplugin/Utils","tinymce/pasteplugin/SmartPaste","tinymce/util/Delay"],function(e,t,n,r,i,o){return function(a){function s(e){var t,n=a.dom;if(t=a.fire("BeforePastePreProcess",{content:e}),t=a.fire("PastePreProcess",t),e=t.content,!t.isDefaultPrevented()){if(a.hasEventListeners("PastePostProcess")&&!t.isDefaultPrevented()){var r=n.add(a.getBody(),"div",{style:"display:none"},e);t=a.fire("PastePostProcess",{node:r}),n.remove(r),e=t.node.innerHTML}t.isDefaultPrevented()||i.insertContent(a,e)}}function l(e){e=a.dom.encode(e).replace(/\r\n/g,"\n");var t,n=a.dom.getParent(a.selection.getStart(),a.dom.isBlock),i=a.settings.forced_root_block;i&&(t=a.dom.createHTML(i,a.settings.forced_root_block_attrs),t=t.substr(0,t.length-3)+">"),n&&/^(PRE|DIV)$/.test(n.nodeName)||!i?e=r.filter(e,[[/\n/g,"
"]]):(e=r.filter(e,[[/\n\n/g,"

"+t],[/^(.*<\/p>)(

)$/,t+"$1"],[/\n/g,"
"]]),e.indexOf("

")!=-1&&(e=t+e)),s(e)}function c(){function t(e){var t,n,i,o=e.startContainer;if(t=e.getClientRects(),t.length)return t[0];if(e.collapsed&&1==o.nodeType){for(i=o.childNodes[_.startOffset];i&&3==i.nodeType&&!i.data.length;)i=i.nextSibling;if(i)return"BR"==i.tagName&&(n=r.doc.createTextNode("\ufeff"),i.parentNode.insertBefore(n,i),e=r.createRng(),e.setStartBefore(n),e.setEndAfter(n),t=e.getClientRects(),r.remove(n)),t.length?t[0]:void 0}}var n,r=a.dom,i=a.getBody(),o=a.dom.getViewPort(a.getWin()),s=o.y,l=20;if(_=a.selection.getRng(),a.inline&&(n=a.selection.getScrollContainer(),n&&n.scrollTop>0&&(s=n.scrollTop)),_.getClientRects){var c=t(_);if(c)l=s+(c.top-r.getPos(i).y);else{l=s;var u=_.startContainer;u&&(3==u.nodeType&&u.parentNode!=i&&(u=u.parentNode),1==u.nodeType&&(l=r.getPos(u,n||i).y))}}N=r.add(a.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"all",style:"position: absolute; top: "+l+"px;width: 10px; height: 10px; overflow: hidden; opacity: 0"},A),(e.ie||e.gecko)&&r.setStyle(N,"left","rtl"==r.getStyle(i,"direction",!0)?65535:-65535),r.bind(N,"beforedeactivate focusin focusout",function(e){e.stopPropagation()}),N.focus(),a.selection.select(N,!0)}function u(){if(N){for(var e;e=a.dom.get("mcepastebin");)a.dom.remove(e),a.dom.unbind(e);_&&a.selection.setRng(_)}N=_=null}function d(){var e,t,n,r,i="";for(e=a.dom.select("div[id=mcepastebin]"),t=0;t0&&n.indexOf(B)==-1&&(t["text/plain"]=n)}if(e.types)for(var r=0;r')}else s('')}function y(e,t){function n(n){var r,i,o,a=!1;if(n)for(r=0;r0}function w(e){return n.metaKeyPressed(e)&&86==e.keyCode||e.shiftKey&&45==e.keyCode}function E(){function t(e,t,n){var i;return x(e,"text/html")?i=e["text/html"]:(i=d(),i==A&&(n=!0)),i=r.trimHtml(i),N&&N.firstChild&&"mcepastebin"===N.firstChild.id&&(n=!0),u(),i.length||(n=!0),n&&(i=x(e,"text/plain")&&i.indexOf("

")==-1?e["text/plain"]:r.innerText(i)),i==A?void(t||a.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.")):void(n?l(i):s(i))}function n(e){var t=e["text/plain"];return!!t&&0===t.indexOf("file://")}a.on("keydown",function(t){function n(e){w(e)&&!e.isDefaultPrevented()&&u()}if(w(t)&&!t.isDefaultPrevented()){if(S=t.shiftKey&&86==t.keyCode,S&&e.webkit&&navigator.userAgent.indexOf("Version/")!=-1)return;if(t.stopImmediatePropagation(),T=(new Date).getTime(),e.ie&&S)return t.preventDefault(),void a.fire("paste",{ieFake:!0});u(),c(),a.once("keyup",n),a.once("paste",function(){a.off("keyup",n)})}});var i=function(){return _||a.selection.getRng()};a.on("paste",function(n){var r=(new Date).getTime(),s=h(n),l=(new Date).getTime()-r,f=(new Date).getTime()-T-l<1e3,m="text"==k.pasteFormat||S;return S=!1,n.isDefaultPrevented()||b(n)?void u():!p(s)&&y(n,i())?void u():(f||n.preventDefault(),!e.ie||f&&!n.ieFake||(c(),a.dom.bind(N,"paste",function(e){e.stopPropagation()}),a.getDoc().execCommand("Paste",!1,null),s["text/html"]=d()),void(x(s,"text/html")?(n.preventDefault(),t(s,f,m)):o.setEditorTimeout(a,function(){t(s,f,m)},0)))}),a.on("dragstart dragend",function(e){R="dragstart"==e.type}),a.on("drop",function(e){var t,i;if(i=C(e),!e.isDefaultPrevented()&&!R&&(t=f(e.dataTransfer),(p(t)&&!n(t)||!y(e,i))&&i&&a.settings.paste_filter_drop!==!1)){var c=t["mce-internal"]||t["text/html"]||t["text/plain"];c&&(e.preventDefault(),o.setEditorTimeout(a,function(){a.undoManager.transact(function(){t["mce-internal"]&&a.execCommand("Delete"),a.selection.setRng(i),c=r.trimHtml(c),t["text/html"]?s(c):l(c)})}))}}),a.on("dragover dragend",function(e){a.settings.paste_data_images&&e.preventDefault()})}var N,_,S,k=this,T=0,R=!1,A="%MCEPASTEBIN%",B="data:text/mce-internal,",D=r.createIdGenerator("mceclip");k.pasteHtml=s,k.pasteText=l,k.pasteImageData=y,a.on("preInit",function(){E(),a.parser.addNodeFilter("img",function(t,n,r){function i(e){return e.data&&e.data.paste===!0}function o(t){t.attr("data-mce-object")||u===e.transparentSrc||t.remove()}function s(e){return 0===e.indexOf("webkit-fake-url")}function l(e){return 0===e.indexOf("data:")}if(!a.settings.paste_data_images&&i(r))for(var c=t.length;c--;){var u=t[c].attributes.map.src;u&&(s(u)?o(t[c]):!a.settings.allow_html_data_urls&&l(u)&&o(t[c]))}})})}}),r("tinymce/pasteplugin/WordFilter",["tinymce/util/Tools","tinymce/html/DomParser","tinymce/html/Schema","tinymce/html/Serializer","tinymce/html/Node","tinymce/pasteplugin/Utils"],function(e,t,n,r,i,o){function a(e){return/1&&a.attr("start",""+o),e.wrap(a)),e.name="li",s>u&&c&&c.lastChild.append(a),u=s,r(e),n(e,/^\u00a0+/),n(e,/^\s*([\u2022\u00b7\u00a7\u25CF]|\w+\.)/),n(e,/^\u00a0+/)}for(var a,c,u=1,d=[],f=e.firstChild;"undefined"!=typeof f&&null!==f;)if(d.push(f),f=f.walk(),null!==f)for(;"undefined"!=typeof f&&f.parent!==e;)f=f.walk();for(var h=0;h]+id="?docs-internal-[^>]*>/gi,""),g=g.replace(/
/gi,""),p=u.paste_retain_style_properties,p&&(m=e.makeMap(p.split(/[, ]/))),u.paste_enable_default_filters!==!1&&a(d.content)){d.wordContent=!0,g=o.filter(g,[//gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\xa0"],[/([\s\u00a0]*)<\/span>/gi,function(e,t){return t.length>0?t.replace(/./," ").slice(Math.floor(t.length/2)).split("").join("\xa0"):""}]]);var v=u.paste_word_valid_elements;v||(v="-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody");var y=new n({valid_elements:v,valid_children:"-li[p]"});e.each(y.elements,function(e){e.attributes.class||(e.attributes.class={},e.attributesOrder.push("class")),e.attributes.style||(e.attributes.style={},e.attributesOrder.push("style"))});var b=new t({},y);b.addAttributeFilter("style",function(e){for(var t,n=e.length;n--;)t=e[n],t.attr("style",h(t,t.attr("style"))),"span"==t.name&&t.parent&&!t.attributes.length&&t.unwrap()}),b.addAttributeFilter("class",function(e){for(var t,n,r=e.length;r--;)t=e[r],n=t.attr("class"),/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(n)&&t.remove(),t.attr("class",null)}),b.addNodeFilter("del",function(e){for(var t=e.length;t--;)e[t].remove()}),b.addNodeFilter("a",function(e){for(var t,n,r,i=e.length;i--;)if(t=e[i],n=t.attr("href"),r=t.attr("name"),n&&n.indexOf("#_msocom_")!=-1)t.remove();else if(n&&0===n.indexOf("file://")&&(n=n.split("#")[1],n&&(n="#"+n)),n||r){if(r&&!/^_?(?:toc|edn|ftn)/i.test(r)){t.unwrap();continue}t.attr({href:n,name:r})}else t.unwrap()});var C=b.parse(g);u.paste_convert_word_fake_lists!==!1&&f(C),d.content=new r({validate:u.validate},y).serialize(C)}})}return c.isWordContent=a,c}),r("tinymce/pasteplugin/Quirks",["tinymce/Env","tinymce/util/Tools","tinymce/pasteplugin/WordFilter","tinymce/pasteplugin/Utils"],function(e,t,n,r){return function(i){function o(e){i.on("BeforePastePreProcess",function(t){t.content=e(t.content)})}function a(e){if(!n.isWordContent(e))return e;var o=[];t.each(i.schema.getBlockElements(),function(e,t){o.push(t)});var a=new RegExp("(?:
 [\\s\\r\\n]+|
)*(<\\/?("+o.join("|")+")[^>]*>)(?:
 [\\s\\r\\n]+|
)*","g");return e=r.filter(e,[[a,"$1"]]),e=r.filter(e,[[/

/g,"

"],[/
/g," "],[/

/g,"
"]])}function s(e){if(n.isWordContent(e))return e;var t=i.settings.paste_webkit_styles;if(i.settings.paste_remove_styles_if_webkit===!1||"all"==t)return e;if(t&&(t=t.split(/[, ]/)),t){var r=i.dom,o=i.selection.getNode();e=e.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,function(e,n,i,a){var s=r.parseStyle(i,"span"),l={};if("none"===t)return n+a;for(var c=0;c]+) style="([^"]*)"([^>]*>)/gi,"$1$3");return e=e.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi,function(e,t,n,r){return t+' style="'+n+'"'+r})}e.webkit&&o(s),e.ie&&o(a)}}),r("tinymce/pasteplugin/Plugin",["tinymce/PluginManager","tinymce/pasteplugin/Clipboard","tinymce/pasteplugin/WordFilter","tinymce/pasteplugin/Quirks"],function(e,t,n,r){var i;e.add("paste",function(o){function a(){return i||o.settings.paste_plaintext_inform===!1}function s(){if("text"==c.pasteFormat)c.pasteFormat="html",o.fire("PastePlainTextToggle",{state:!1});else if(c.pasteFormat="text",o.fire("PastePlainTextToggle",{state:!0}),!a()){var e=o.translate("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.");o.notificationManager.open({text:e,type:"info"}),i=!0}o.focus()}function l(){var e=this;e.active("text"===c.pasteFormat),o.on("PastePlainTextToggle",function(t){e.active(t.state)})}var c,u=this,d=o.settings;return/(^|[ ,])powerpaste([, ]|$)/.test(d.plugins)&&e.get("powerpaste")?void("undefined"!=typeof console&&console.log&&console.log("PowerPaste is incompatible with Paste plugin! Remove 'paste' from the 'plugins' option.")):(u.clipboard=c=new t(o),u.quirks=new r(o),u.wordFilter=new n(o),o.settings.paste_as_text&&(u.clipboard.pasteFormat="text"),d.paste_preprocess&&o.on("PastePreProcess",function(e){d.paste_preprocess.call(u,u,e)}),d.paste_postprocess&&o.on("PastePostProcess",function(e){d.paste_postprocess.call(u,u,e)}),o.addCommand("mceInsertClipboardContent",function(e,t){t.content&&u.clipboard.pasteHtml(t.content),t.text&&u.clipboard.pasteText(t.text)}),o.settings.paste_block_drop&&o.on("dragend dragover draggesture dragdrop drop drag",function(e){e.preventDefault(),e.stopPropagation()}),o.settings.paste_data_images||o.on("drop",function(e){var t=e.dataTransfer;t&&t.files&&t.files.length>0&&e.preventDefault()}),o.addCommand("mceTogglePlainTextPaste",s),o.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:s,onPostRender:l}),void o.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:c.pasteFormat,onclick:s,onPostRender:l}))})}),o(["tinymce/pasteplugin/Utils"])}(this); \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/plugins/preview/plugin.min.js b/data/web/rc/program/js/tinymce/plugins/preview/plugin.min.js new file mode 100644 index 00000000..e02103b4 --- /dev/null +++ b/data/web/rc/program/js/tinymce/plugins/preview/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("preview",function(e){var t=e.settings,n=!tinymce.Env.ie;e.addCommand("mcePreview",function(){e.windowManager.open({title:"Preview",width:parseInt(e.getParam("plugin_preview_width","650"),10),height:parseInt(e.getParam("plugin_preview_height","500"),10),html:'",buttons:{text:"Close",onclick:function(){this.parent().parent().close()}},onPostRender:function(){var r,i="";i+='',tinymce.each(e.contentCSS,function(t){i+=''});var o=t.body_id||"tinymce";o.indexOf("=")!=-1&&(o=e.getParam("body_id","","hash"),o=o[e.id]||o);var a=t.body_class||"";a.indexOf("=")!=-1&&(a=e.getParam("body_class","","hash"),a=a[e.id]||"");var s=' ',l=e.settings.directionality?' dir="'+e.settings.directionality+'"':"";if(r=""+i+'"+e.getContent()+s+"",n)this.getEl("body").firstChild.src="data:text/html;charset=utf-8,"+encodeURIComponent(r);else{var c=this.getEl("body").firstChild.contentWindow.document;c.open(),c.write(r),c.close()}}})}),e.addButton("preview",{title:"Preview",cmd:"mcePreview"}),e.addMenuItem("preview",{text:"Preview",cmd:"mcePreview",context:"view"})}); \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/plugins/print/plugin.min.js b/data/web/rc/program/js/tinymce/plugins/print/plugin.min.js new file mode 100644 index 00000000..9f58535b --- /dev/null +++ b/data/web/rc/program/js/tinymce/plugins/print/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("print",function(e){e.addCommand("mcePrint",function(){e.getWin().print()}),e.addButton("print",{title:"Print",cmd:"mcePrint"}),e.addShortcut("Meta+P","","mcePrint"),e.addMenuItem("print",{text:"Print",cmd:"mcePrint",icon:"print",shortcut:"Meta+P",context:"file"})}); \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/plugins/save/plugin.min.js b/data/web/rc/program/js/tinymce/plugins/save/plugin.min.js new file mode 100644 index 00000000..7893bbc2 --- /dev/null +++ b/data/web/rc/program/js/tinymce/plugins/save/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("save",function(e){function t(){var t;if(t=tinymce.DOM.getParent(e.id,"form"),!e.getParam("save_enablewhendirty",!0)||e.isDirty())return tinymce.triggerSave(),e.getParam("save_onsavecallback")?(e.execCallback("save_onsavecallback",e),void e.nodeChanged()):void(t?(e.setDirty(!1),t.onsubmit&&!t.onsubmit()||("function"==typeof t.submit?t.submit():n(e.translate("Error: Form submit field collision."))),e.nodeChanged()):n(e.translate("Error: No form element found.")))}function n(t){e.notificationManager.open({text:t,type:"error"})}function r(){var t=tinymce.trim(e.startContent);return e.getParam("save_oncancelcallback")?void e.execCallback("save_oncancelcallback",e):(e.setContent(t),e.undoManager.clear(),void e.nodeChanged())}function i(){var t=this;e.on("nodeChange dirty",function(){t.disabled(e.getParam("save_enablewhendirty",!0)&&!e.isDirty())})}e.addCommand("mceSave",t),e.addCommand("mceCancel",r),e.addButton("save",{icon:"save",text:"Save",cmd:"mceSave",disabled:!0,onPostRender:i}),e.addButton("cancel",{text:"Cancel",icon:!1,cmd:"mceCancel",disabled:!0,onPostRender:i}),e.addShortcut("Meta+S","","mceSave")}); \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/plugins/searchreplace/plugin.min.js b/data/web/rc/program/js/tinymce/plugins/searchreplace/plugin.min.js new file mode 100644 index 00000000..05ef03e3 --- /dev/null +++ b/data/web/rc/program/js/tinymce/plugins/searchreplace/plugin.min.js @@ -0,0 +1 @@ +!function(){function e(e){return e&&1==e.nodeType&&"false"===e.contentEditable}function t(t,n,r,i,o){function a(e,t){if(t=t||0,!e[0])throw"findAndReplaceDOMText cannot handle zero-length matches";var n=e.index;if(t>0){var r=e[t];if(!r)throw"Invalid capture group";n+=e[0].indexOf(r),e[0]=r}return[n,n+e[0].length,[e[0]]]}function s(t){var n;if(3===t.nodeType)return t.data;if(p[t.nodeName]&&!h[t.nodeName])return"";if(n="",e(t))return"\n";if((h[t.nodeName]||m[t.nodeName])&&(n+="\n"),t=t.firstChild)do n+=s(t);while(t=t.nextSibling);return n}function l(t,n,r){var i,o,a,s,l=[],c=0,u=t,d=n.shift(),f=0;e:for(;;){if((h[u.nodeName]||m[u.nodeName]||e(u))&&c++,3===u.nodeType&&(!o&&u.length+c>=d[1]?(o=u,s=d[1]-c):i&&l.push(u),!i&&u.length+c>d[0]&&(i=u,a=d[0]-c),c+=u.length),i&&o){if(u=r({startNode:i,startNodeIndex:a,endNode:o,endNodeIndex:s,innerNodes:l,match:d[2],matchIndex:f}),c-=o.length-s,i=null,o=null,l=[],d=n.shift(),f++,!d)break}else if(p[u.nodeName]&&!h[u.nodeName]||!u.firstChild){if(u.nextSibling){u=u.nextSibling;continue}}else if(!e(u)){u=u.firstChild;continue}for(;;){if(u.nextSibling){u=u.nextSibling;break}if(u.parentNode===t)break e;u=u.parentNode}}}function c(e){var t;if("function"!=typeof e){var n=e.nodeType?e:f.createElement(e);t=function(e,t){var r=n.cloneNode(!1);return r.setAttribute("data-mce-index",t),e&&r.appendChild(f.createTextNode(e)),r}}else t=e;return function(e){var n,r,i,o=e.startNode,a=e.endNode,s=e.matchIndex;if(o===a){var l=o;i=l.parentNode,e.startNodeIndex>0&&(n=f.createTextNode(l.data.substring(0,e.startNodeIndex)),i.insertBefore(n,l));var c=t(e.match[0],s);return i.insertBefore(c,l),e.endNodeIndex0}var u=this,d=-1;u.init=function(e){e.addMenuItem("searchreplace",{text:"Find and replace",shortcut:"Meta+F",onclick:n,separator:"before",context:"edit"}),e.addButton("searchreplace",{tooltip:"Find and replace",shortcut:"Meta+F",onclick:n}),e.addCommand("SearchReplace",n),e.shortcuts.add("Meta+F","",n)},u.find=function(e,t,n){e=e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),e=n?"\\b"+e+"\\b":e;var r=i(new RegExp(e,t?"g":"gi"));return r&&(d=-1,d=s(!0)),r},u.next=function(){var e=s(!0);e!==-1&&(d=e)},u.prev=function(){var e=s(!1);e!==-1&&(d=e)},u.replace=function(t,n,i){var s,f,h,p,m,g,v=d;for(n=n!==!1,h=e.getBody(),f=tinymce.grep(tinymce.toArray(h.getElementsByTagName("span")),c),s=0;sd&&f[s].setAttribute("data-mce-index",m-1)}return e.undoManager.add(),d=v,n?(g=a(v+1).length>0,u.next()):(g=a(v-1).length>0,u.prev()),!i&&g},u.done=function(t){var n,i,a,s;for(i=tinymce.toArray(e.getBody().getElementsByTagName("span")),n=0;n\n'; + moduleCount++; + } + + // Expose globally + exports.define = define; + exports.require = require; + + expose(["tinymce/spellcheckerplugin/DomTextMatcher"]); + + load('classes/DomTextMatcher.js'); + load('classes/Plugin.js'); + + writeScripts(); +})(this); + +// $hash: a894b80e97e733310c550dadb509e87a \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/plugins/spellchecker/plugin.min.js b/data/web/rc/program/js/tinymce/plugins/spellchecker/plugin.min.js new file mode 100644 index 00000000..f6672d4d --- /dev/null +++ b/data/web/rc/program/js/tinymce/plugins/spellchecker/plugin.min.js @@ -0,0 +1 @@ +!function(e,t){"use strict";function n(e,t){for(var n,r=[],o=0;o=l.end?(o=d,s=l.end-u):i&&c.push(d),!i&&d.length+u>l.start&&(i=d,a=l.start-u),u+=d.length),i&&o){if(d=r({startNode:i,startNodeIndex:a,endNode:o,endNodeIndex:s,innerNodes:c,match:l.text,matchIndex:f}),u-=o.length-s,i=null,o=null,c=[],l=n.shift(),f++,!l)break}else if(N[d.nodeName]&&!E[d.nodeName]||!d.firstChild){if(d.nextSibling){d=d.nextSibling;continue}}else if(!e(d)){d=d.firstChild;continue}for(;;){if(d.nextSibling){d=d.nextSibling;break}if(d.parentNode===t)break e;d=d.parentNode}}}function a(e){function t(t,n){var r=S[n];r.stencil||(r.stencil=e(r));var i=r.stencil.cloneNode(!1);return i.setAttribute("data-mce-index",n),t&&i.appendChild(k.doc.createTextNode(t)),i}return function(e){var n,r,i,o=e.startNode,a=e.endNode,s=e.matchIndex,l=k.doc;if(o===a){var c=o;i=c.parentNode,e.startNodeIndex>0&&(n=l.createTextNode(c.data.substring(0,e.startNodeIndex)),i.insertBefore(n,c));var u=t(e.match,s);return i.insertBefore(u,c),e.endNodeIndex0&&r.insertNode(n.dom.doc.createTextNode(t)),r}function C(){return S.splice(0,S.length),p(),this}var x,w,E,N,_,S=[],k=n.dom;return E=n.schema.getBlockElements(),N=n.schema.getWhiteSpaceElements(),_=n.schema.getShortEndedElements(),w=i(t),{text:w,matches:S,each:d,filter:u,reset:C,matchFromElement:m,elementFromMatch:g,find:h,add:v,wrap:f,unwrap:p,replace:b,rangeFromMatch:y,indexOf:c}}}),r("tinymce/spellcheckerplugin/Plugin",["tinymce/spellcheckerplugin/DomTextMatcher","tinymce/PluginManager","tinymce/util/Tools","tinymce/ui/Menu","tinymce/dom/DOMUtils","tinymce/util/XHR","tinymce/util/URI","tinymce/util/JSON"],function(e,t,n,r,i,o,a,s){t.add("spellchecker",function(l,c){function u(){return B.textMatcher||(B.textMatcher=new e(l.getBody(),l)),B.textMatcher}function d(e,t){var r=[];return n.each(t,function(e){r.push({selectable:!0,text:e.name,data:e.value})}),r}function f(e){for(var t in e)return!1;return!0}function h(e,t){var o=[],a=k[e];n.each(a,function(e){o.push({text:e,onclick:function(){l.insertContent(l.dom.encode(e)),l.dom.remove(t),y()}})}),o.push({text:"-"}),A&&o.push({text:"Add to Dictionary",onclick:function(){b(e,t)}}),o.push.apply(o,[{text:"Ignore",onclick:function(){C(e,t)}},{text:"Ignore all",onclick:function(){C(e,t,!0)}}]),R=new r({items:o,context:"contextmenu",onautohide:function(e){e.target.className.indexOf("spellchecker")!=-1&&e.preventDefault()},onhide:function(){R.remove(),R=null}}),R.renderTo(document.body);var s=i.DOM.getPos(l.getContentAreaContainer()),c=l.dom.getPos(t[0]),u=l.dom.getRoot();"BODY"==u.nodeName?(c.x-=u.ownerDocument.documentElement.scrollLeft||u.scrollLeft,c.y-=u.ownerDocument.documentElement.scrollTop||u.scrollTop):(c.x-=u.scrollLeft,c.y-=u.scrollTop),s.x+=c.x,s.y+=c.y,R.moveTo(s.x,s.y+t[0].offsetHeight)}function p(){return l.getParam("spellchecker_wordchar_pattern")||new RegExp('[^\\s!"#$%&()*+,-./:;<=>?@[\\]^_{|}`\xa7\xa9\xab\xae\xb1\xb6\xb7\xb8\xbb\xbc\xbd\xbe\xbf\xd7\xf7\xa4\u201d\u201c\u201e\xa0\u2002\u2003\u2009]+',"g")}function m(e,t,r,i){var u={method:e,lang:D.spellchecker_language},d="";u["addToDictionary"==e?"word":"text"]=t,n.each(u,function(e,t){d&&(d+="&"),d+=t+"="+encodeURIComponent(e)}),o.send({url:new a(c).toAbsolute(D.spellchecker_rpc_url),type:"post",content_type:"application/x-www-form-urlencoded",data:d,success:function(e){if(e=s.parse(e))e.error?i(e.error):r(e);else{var t=l.translate("Server response wasn't proper JSON.");i(t)}},error:function(){var e=l.translate("The spelling service was not found: (")+D.spellchecker_rpc_url+l.translate(")");i(e)}})}function g(e,t,n,r){var i=D.spellchecker_callback||m;i.call(B,e,t,n,r)}function v(){function e(e){l.notificationManager.open({text:e,type:"error"}),l.setProgressState(!1),x()}x()||(l.setProgressState(!0),g("spellcheck",u().text,_,e),l.focus())}function y(){l.dom.select("span.mce-spellchecker-word").length||x()}function b(e,t){l.setProgressState(!0),g("addToDictionary",e,function(){l.setProgressState(!1),l.dom.remove(t,!0),y()},function(e){l.notificationManager.open({text:e,type:"error"}),l.setProgressState(!1)})}function C(e,t,r){l.selection.collapse(),r?n.each(l.dom.select("span.mce-spellchecker-word"),function(t){t.getAttribute("data-mce-word")==e&&l.dom.remove(t,!0)}):l.dom.remove(t,!0),y()}function x(){if(u().reset(),B.textMatcher=null,T)return T=!1,l.fire("SpellcheckEnd"),!0}function w(e){var t=e.getAttribute("data-mce-index");return"number"==typeof t?""+t:t}function E(e){var t,r=[];if(t=n.toArray(l.getBody().getElementsByTagName("span")),t.length)for(var i=0;i0){var r=l.dom.createRng();r.setStartBefore(n[0]),r.setEndAfter(n[n.length-1]),l.selection.setRng(r),h(t.getAttribute("data-mce-word"),n)}}}),l.addMenuItem("spellchecker",{text:"Spellcheck",context:"tools",onclick:v,selectable:!0,onPostRender:function(){var e=this;e.active(T),l.on("SpellcheckStart SpellcheckEnd",function(){e.active(T)})}});var M={tooltip:"Spellcheck",onclick:v,onPostRender:function(){var e=this;l.on("SpellcheckStart SpellcheckEnd",function(){e.active(T)})}};S.length>1&&(M.type="splitbutton",M.menu=S,M.onshow=N,M.onselect=function(e){D.spellchecker_language=e.control.settings.data}),l.addButton("spellchecker",M),l.addCommand("mceSpellCheck",v),l.on("remove",function(){R&&(R.remove(),R=null)}),l.on("change",y),this.getTextMatcher=u,this.getWordCharPattern=p,this.markErrors=_,this.getLanguage=function(){return D.spellchecker_language},D.spellchecker_language=D.spellchecker_language||D.language||"en"})}),o(["tinymce/spellcheckerplugin/DomTextMatcher"])}(this); \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/plugins/tabfocus/plugin.min.js b/data/web/rc/program/js/tinymce/plugins/tabfocus/plugin.min.js new file mode 100644 index 00000000..d310d0b8 --- /dev/null +++ b/data/web/rc/program/js/tinymce/plugins/tabfocus/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("tabfocus",function(e){function t(e){9!==e.keyCode||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()}function n(t){function n(n){function o(e){return"BODY"===e.nodeName||"hidden"!=e.type&&"none"!=e.style.display&&"hidden"!=e.style.visibility&&o(e.parentNode)}function l(e){return/INPUT|TEXTAREA|BUTTON/.test(e.tagName)&&tinymce.get(t.id)&&e.tabIndex!=-1&&o(e)}if(s=r.select(":input:enabled,*[tabindex]:not(iframe)"),i(s,function(t,n){if(t.id==e.id)return a=n,!1}),n>0){for(c=a+1;c=0;c--)if(l(s[c]))return s[c];return null}var a,s,l,c;if(!(9!==t.keyCode||t.ctrlKey||t.altKey||t.metaKey||t.isDefaultPrevented())&&(l=o(e.getParam("tab_focus",e.getParam("tabfocus_elements",":prev,:next"))),1==l.length&&(l[1]=l[0],l[0]=":prev"),s=t.shiftKey?":prev"==l[0]?n(-1):r.get(l[0]):":next"==l[1]?n(1):r.get(l[1]))){var u=tinymce.get(s.id||s.name);s.id&&u?u.focus():tinymce.util.Delay.setTimeout(function(){tinymce.Env.webkit||window.focus(),s.focus()},10),t.preventDefault()}}var r=tinymce.DOM,i=tinymce.each,o=tinymce.explode;e.on("init",function(){e.inline&&tinymce.DOM.setAttrib(e.getBody(),"tabIndex",null),e.on("keyup",t),tinymce.Env.gecko?e.on("keypress keydown",n):e.on("keydown",n)})}); \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/plugins/table/plugin.dev.js b/data/web/rc/program/js/tinymce/plugins/table/plugin.dev.js new file mode 100644 index 00000000..cb5174c8 --- /dev/null +++ b/data/web/rc/program/js/tinymce/plugins/table/plugin.dev.js @@ -0,0 +1,143 @@ +/** + * Inline development version. Only to be used while developing since it uses document.write to load scripts. + */ + +/*jshint smarttabs:true, undef:true, latedef:true, curly:true, bitwise:true, camelcase:true */ +/*globals $code */ + +(function(exports) { + "use strict"; + + var html = "", baseDir; + var modules = {}, exposedModules = [], moduleCount = 0; + + var scripts = document.getElementsByTagName('script'); + for (var i = 0; i < scripts.length; i++) { + var src = scripts[i].src; + + if (src.indexOf('/plugin.dev.js') != -1) { + baseDir = src.substring(0, src.lastIndexOf('/')); + } + } + + function require(ids, callback) { + var module, defs = []; + + for (var i = 0; i < ids.length; ++i) { + module = modules[ids[i]] || resolve(ids[i]); + if (!module) { + throw 'module definition dependecy not found: ' + ids[i]; + } + + defs.push(module); + } + + callback.apply(null, defs); + } + + function resolve(id) { + if (exports.privateModules && id in exports.privateModules) { + return; + } + + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length; ++fi) { + if (!target[fragments[fi]]) { + return; + } + + target = target[fragments[fi]]; + } + + return target; + } + + function register(id) { + var target = exports; + var fragments = id.split(/[.\/]/); + + for (var fi = 0; fi < fragments.length - 1; ++fi) { + if (target[fragments[fi]] === undefined) { + target[fragments[fi]] = {}; + } + + target = target[fragments[fi]]; + } + + target[fragments[fragments.length - 1]] = modules[id]; + } + + function define(id, dependencies, definition) { + var privateModules, i; + + if (typeof id !== 'string') { + throw 'invalid module definition, module id must be defined and be a string'; + } + + if (dependencies === undefined) { + throw 'invalid module definition, dependencies must be specified'; + } + + if (definition === undefined) { + throw 'invalid module definition, definition function must be specified'; + } + + require(dependencies, function() { + modules[id] = definition.apply(null, arguments); + }); + + if (--moduleCount === 0) { + for (i = 0; i < exposedModules.length; i++) { + register(exposedModules[i]); + } + } + + // Expose private modules for unit tests + if (exports.AMDLC_TESTS) { + privateModules = exports.privateModules || {}; + + for (id in modules) { + privateModules[id] = modules[id]; + } + + for (i = 0; i < exposedModules.length; i++) { + delete privateModules[exposedModules[i]]; + } + + exports.privateModules = privateModules; + } + + } + + function expose(ids) { + exposedModules = ids; + } + + function writeScripts() { + document.write(html); + } + + function load(path) { + html += '\n'; + moduleCount++; + } + + // Expose globally + exports.define = define; + exports.require = require; + + load('classes/Utils.js'); + load('classes/SplitCols.js'); + load('classes/TableGrid.js'); + load('classes/Quirks.js'); + load('classes/CellSelection.js'); + load('classes/Dialogs.js'); + load('classes/ResizeBars.js'); + load('classes/Plugin.js'); + + writeScripts(); +})(this); + +// $hash: 2bba25eafbcfe7cf5d371219f4309dbe \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/plugins/table/plugin.min.js b/data/web/rc/program/js/tinymce/plugins/table/plugin.min.js new file mode 100644 index 00000000..c7629c56 --- /dev/null +++ b/data/web/rc/program/js/tinymce/plugins/table/plugin.min.js @@ -0,0 +1,2 @@ +!function(e,t){"use strict";function n(e,t){for(var n,r=[],a=0;a9)&&(t.hasChildNodes()||(t.innerHTML='
'))}var n=function(e){return function(t,n){t&&(n=parseInt(n,10),1===n||0===n?t.removeAttribute(e,1):t.setAttribute(e,n,1))}},r=function(e){return function(t){return parseInt(t.getAttribute(e)||1,10)}};return{setColSpan:n("colSpan"),setRowSpan:n("rowspan"),getColSpan:r("colSpan"),getRowSpan:r("rowSpan"),setSpanVal:function(e,t,r){n(t)(e,r)},getSpanVal:function(e,t){return r(t)(e)},paddCell:t}}),r("tinymce/tableplugin/SplitCols",["tinymce/util/Tools","tinymce/tableplugin/Utils"],function(e,t){var n=function(e,t,n){return e[n]?e[n][t]:null},r=function(e,t,r){var i=n(e,t,r);return i?i.elm:null},i=function(e,t,i,o){var a,s,l=0,c=r(e,t,i);for(a=i;(o>0?a=0)&&(s=n(e,t,a),c===s.elm);a+=o)l++;return l},o=function(e,t,n){for(var r,i=e[n],o=t;o'),!1},"childNodes"),t=v(t,!1),g(t),s(t,"rowSpan",1),s(t,"colSpan",1),i?t.appendChild(i):r.paddCell(t),t}function _(){var e,t=ee.createRng();return o(ee.select("tr",c),function(e){0===e.cells.length&&ee.remove(e)}),0===ee.select("tr",c).length?(t.setStartBefore(c),t.setEndBefore(c),Z.setRng(t),void ee.remove(c)):(o(ee.select("thead,tbody,tfoot",c),function(e){0===e.rows.length&&ee.remove(e)}),p(),void(J&&(e=K[Math.min(K.length-1,J.y)],e&&(Z.select(e[Math.min(e.length-1,J.x)].elm,!0),Z.collapse(!0)))))}function S(e,t,n,r){var i,o,a,s,l;for(i=K[t][e].elm.parentNode,a=1;a<=n;a++)if(i=ee.getNext(i,"tr")){for(o=e;o>=0;o--)if(l=K[t+a][o].elm,l.parentNode==i){for(s=1;s<=r;s++)ee.insertAfter(N(l),l);break}if(o==-1)for(s=1;s<=r;s++)i.insertBefore(N(i.cells[0]),i.cells[0])}}function k(){o(K,function(e,t){o(e,function(e,n){var r,i,o;if(x(e)&&(e=e.elm,r=a(e,"colspan"),i=a(e,"rowspan"),r>1||i>1)){for(s(e,"rowSpan",1),s(e,"colSpan",1),o=0;on)&&r.push(e[i]);return r}function R(t){return e.grep(t,function(e){return e.real===!1})}function A(e){for(var t=[],n=0;n1&&(E=1),s(h,"colSpan",w),s(h,"rowSpan",E),f=l;f<=u;f++)for(d=a;d<=c;d++)K[f]&&K[f][d]&&(t=K[f][d].elm,t!=h&&(g=e.grep(t.childNodes),o(g,function(e){h.appendChild(e)}),g.length&&(g=e.grep(h.childNodes),v=0,o(g,function(e){"BR"==e.nodeName&&v++0&&K[n-1][l]&&(f=K[n-1][l].elm,h=a(f,"rowSpan"),h>1)){s(f,"rowSpan",h+1);continue}}else if(h=a(r,"rowspan"),h>1){s(r,"rowSpan",h+1);continue}d=N(r),s(d,"colSpan",r.colSpan),u.appendChild(d),i=r}u.hasChildNodes()&&(e?c.parentNode.insertBefore(u,c):ee.insertAfter(u,c))}}function P(e){var t,n;o(K,function(n){if(o(n,function(n,r){if(x(n)&&(t=r,e))return!1}),e)return!t}),o(K,function(r,i){var o,l,c;r[t]&&(o=r[t].elm,o!=n&&(c=a(o,"colspan"),l=a(o,"rowspan"),1==c?e?(o.parentNode.insertBefore(N(o),o),S(t,i,l-1,c)):(ee.insertAfter(N(o),o),S(t,i,l-1,c)):s(o,"colSpan",o.colSpan+1),n=o))})}function O(t){return e.grep(H(t),x)}function H(e){var t=[];return o(e,function(e){o(e,function(e){t.push(e)})}),t}function I(){var t=[];if(f(c)){if(1==K[0].length)return;if(O(K).length==H(K).length)return}o(K,function(n){o(n,function(n,r){x(n)&&e.inArray(t,r)===-1&&(o(K,function(e){var t,n=e[r].elm;t=a(n,"colSpan"),t>1?s(n,"colSpan",t-1):ee.remove(n)}),t.push(r))})}),_()}function F(){function e(e){var t,n;o(e.cells,function(e){var n=a(e,"rowSpan");n>1&&(s(e,"rowSpan",n-1),t=V(e),S(t.x,t.y,1,1))}),t=V(e.cells[0]),o(K[t.y],function(e){var t;e=e.elm,e!=n&&(t=a(e,"rowSpan"),t<=1?ee.remove(e):s(e,"rowSpan",t-1),n=e)})}var t;t=w(),f(c)&&t.length==c.rows.length||(o(t.reverse(),function(t){e(t)}),_())}function z(){var e=w();if(!f(c)||e.length!=c.rows.length)return ee.remove(e),_(),e}function U(){var e=w();return o(e,function(t,n){e[n]=v(t,!0)}),e}function W(t,n){var r,a,l;t&&(r=i.splitAt(K,J.x,J.y,n),a=r.row,e.each(r.cells,g),l=e.map(t,function(e){return e.cloneNode(!0)}),n||l.reverse(),o(l,function(e){var t,r,i=e.cells.length;for(m(e),t=0;te&&(e=i),r>t&&(t=r),n.real&&(o=n.colspan-1,a=n.rowspan-1,o&&i+o>e&&(e=i+o),a&&r+a>t&&(t=r+a)))})}),{x:e,y:t}}function j(e){var t,n,r,i,o,a,s,l,c,u;if(Q=V(e),J&&Q){for(t=Math.min(J.x,Q.x),n=Math.min(J.y,Q.y),r=Math.max(J.x,Q.x),i=Math.max(J.y,Q.y),o=r,a=i,u=n;u<=i;u++)for(c=t;c<=r;c++)e=K[u][c],e.real&&(s=e.colspan-1,l=e.rowspan-1,s&&c+s>o&&(o=c+s),l&&u+l>a&&(a=u+l));for(d(),u=n;u<=a;u++)for(c=t;c<=o;c++)K[u][c]&&ee.setAttrib(K[u][c].elm,"data-mce-selected","1")}}function Y(e,t){var n,r,i;n=V(e),r=n.y*G+n.x;do{if(r+=t,i=y(r%G,Math.floor(r/G)),!i)break;if(i.elm!=e)return Z.select(i.elm,!0),ee.isEmpty(i.elm)&&Z.collapse(!0),!0}while(i.elm==e);return!1}function X(t){if(J){var n=i.splitAt(K,J.x,J.y,t);e.each(n.cells,g)}}var K,G,J,Q,Z=l.selection,ee=Z.dom;c=c||ee.getParent(Z.getStart(!0),"table"),p(),u=u||ee.getParent(Z.getStart(!0),"th,td"),u&&(J=V(u),Q=q(),u=y(J.x,J.y)),e.extend(this,{deleteTable:E,split:k,merge:L,insertRow:M,insertCol:P,splitCols:X,deleteCols:I,deleteRows:F,cutRows:z,copyRows:U,pasteRows:W,getPos:V,setStartCell:$,setEndCell:j,moveRelIdx:Y,refresh:p})}}),r("tinymce/tableplugin/Quirks",["tinymce/util/VK","tinymce/util/Delay","tinymce/Env","tinymce/util/Tools","tinymce/tableplugin/Utils"],function(e,t,n,r,i){var o=r.each,a=i.getSpanVal;return function(s){function l(){function n(n){function r(e,t){var r=e?"previousSibling":"nextSibling",o=s.dom.getParent(t,"tr"),a=o[r];if(a)return v(s,t,a,e),n.preventDefault(),!0;var l=s.dom.getParent(o,"table"),d=o.parentNode,f=d.nodeName.toLowerCase();if("tbody"===f||f===(e?"tfoot":"thead")){var h=i(e,l,d,"tbody");if(null!==h)return c(e,h,t)}return u(e,o,r,l)}function i(e,t,n,r){var i=s.dom.select(">"+r,t),o=i.indexOf(n);if(e&&0===o||!e&&o===i.length-1)return l(e,t);if(o===-1){var a="thead"===n.tagName.toLowerCase()?0:i.length-1;return i[a]}return i[o+(e?-1:1)]}function l(e,t){var n=e?"thead":"tfoot",r=s.dom.select(">"+n,t);return 0!==r.length?r[0]:null}function c(e,t,r){var i=d(t,e);return i&&v(s,r,i,e),n.preventDefault(),!0}function u(e,t,i,o){var a=o[i];if(a)return f(a),!0;var l=s.dom.getParent(o,"td,th");if(l)return r(e,l,n);var c=d(t,!e);return f(c),n.preventDefault(),!1}function d(e,t){var n=e&&e[t?"lastChild":"firstChild"];return n&&"BR"===n.nodeName?s.dom.getParent(n,"td,th"):n}function f(e){s.selection.setCursorLocation(e,0)}function h(){return C==e.UP||C==e.DOWN}function p(e){var t=e.selection.getNode(),n=e.dom.getParent(t,"tr");return null!==n}function m(e){for(var t=0,n=e;n.previousSibling;)n=n.previousSibling,t+=a(n,"colspan");return t}function g(e,t){var n=0,r=0;return o(e.children,function(e,i){if(n+=a(e,"colspan"),r=i,n>t)return!1}),r}function v(e,t,n,r){var i=m(s.dom.getParent(t,"td,th")),o=g(n,i),a=n.childNodes[o],l=d(a,r);f(l||a)}function y(e){var t=s.selection.getNode(),n=s.dom.getParent(t,"td,th"),r=s.dom.getParent(e,"td,th");return n&&n!==r&&b(n,r)}function b(e,t){return s.dom.getParent(e,"TABLE")===s.dom.getParent(t,"TABLE")}var C=n.keyCode;if(h()&&p(s)){var x=s.selection.getNode();t.setEditorTimeout(s,function(){y(x)&&r(!n.shiftKey&&C===e.UP,x,n)},0)}}s.on("KeyDown",function(e){n(e)})}function c(){function e(e,t){var n,r=t.ownerDocument,i=r.createRange();return i.setStartBefore(t),i.setEnd(e.endContainer,e.endOffset),n=r.createElement("body"),n.appendChild(i.cloneContents()),0===n.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length}s.on("KeyDown",function(t){var n,r,i=s.dom;37!=t.keyCode&&38!=t.keyCode||(n=s.selection.getRng(),r=i.getParent(n.startContainer,"table"),r&&s.getBody().firstChild==r&&e(n,r)&&(n=i.createRng(),n.setStartBefore(r),n.setEndBefore(r),s.selection.setRng(n),t.preventDefault()))})}function u(){s.on("KeyDown SetContent VisualAid",function(){var e;for(e=s.getBody().lastChild;e;e=e.previousSibling)if(3==e.nodeType){if(e.nodeValue.length>0)break}else if(1==e.nodeType&&("BR"==e.tagName||!e.getAttribute("data-mce-bogus")))break;e&&"TABLE"==e.nodeName&&(s.settings.forced_root_block?s.dom.add(s.getBody(),s.settings.forced_root_block,s.settings.forced_root_block_attrs,n.ie&&n.ie<10?" ":'
'):s.dom.add(s.getBody(),"br",{"data-mce-bogus":"1"}))}),s.on("PreProcess",function(e){var t=e.node.lastChild;t&&("BR"==t.nodeName||1==t.childNodes.length&&("BR"==t.firstChild.nodeName||"\xa0"==t.firstChild.nodeValue))&&t.previousSibling&&"TABLE"==t.previousSibling.nodeName&&s.dom.remove(t)})}function d(){function e(e,t,n,r){var i,o,a,s=3,l=e.dom.getParent(t.startContainer,"TABLE");return l&&(i=l.parentNode),o=t.startContainer.nodeType==s&&0===t.startOffset&&0===t.endOffset&&r&&("TR"==n.nodeName||n==i),a=("TD"==n.nodeName||"TH"==n.nodeName)&&!r,o||a}function t(){var t=s.selection.getRng(),n=s.selection.getNode(),r=s.dom.getParent(t.startContainer,"TD,TH");if(e(s,t,n,r)){r||(r=n);for(var i=r.lastChild;i.lastChild;)i=i.lastChild;3==i.nodeType&&(t.setEnd(i,i.data.length),s.selection.setRng(t))}}s.on("KeyDown",function(){t()}),s.on("MouseDown",function(e){2!=e.button&&t()})}function f(){function t(e){s.selection.select(e,!0),s.selection.collapse(!0)}function n(e){s.$(e).empty(),i.paddCell(e)}s.on("keydown",function(i){if((i.keyCode==e.DELETE||i.keyCode==e.BACKSPACE)&&!i.isDefaultPrevented()){var o,a,l,c;if(o=s.dom.getParent(s.selection.getStart(),"table")){if(a=s.dom.select("td,th",o),l=r.grep(a,function(e){return!!s.dom.getAttrib(e,"data-mce-selected")}),0===l.length)return c=s.dom.getParent(s.selection.getStart(),"td,th"),void(s.selection.isCollapsed()&&c&&s.dom.isEmpty(c)&&(i.preventDefault(),n(c),t(c)));i.preventDefault(),s.undoManager.transact(function(){a.length==l.length?s.execCommand("mceTableDelete"):(r.each(l,n),t(l[0]))})}}})}f(),n.webkit&&(l(),d()),n.gecko&&(c(),u()),n.ie>9&&(c(),u())}}),r("tinymce/tableplugin/CellSelection",["tinymce/tableplugin/TableGrid","tinymce/dom/TreeWalker","tinymce/util/Tools"],function(e,t,n){return function(r,i){function o(e){r.getBody().style.webkitUserSelect="",(e||m)&&(r.$("td[data-mce-selected],th[data-mce-selected]").removeAttr("data-mce-selected"),m=!1)}function a(e,t){return!(!e||!t)&&e===p.getParent(t,"table")}function s(t){var n,o,s=t.target;if(!f&&!h&&s!==d&&(d=s,u&&c)){if(o=p.getParent(s,"td,th"),a(u,o)||(o=p.getParent(u,"td,th")),c===o&&!m)return;if(i(!0),a(u,o)){t.preventDefault(),l||(l=new e(r,u,c),r.getBody().style.webkitUserSelect="none"),l.setEndCell(o),m=!0,n=r.selection.getSel();try{n.removeAllRanges?n.removeAllRanges():n.empty()}catch(e){}}}}var l,c,u,d,f,h,p=r.dom,m=!0,g=function(){c=l=u=d=null,i(!1)};return r.on("SelectionChange",function(e){m&&e.stopImmediatePropagation()},!0),r.on("MouseDown",function(e){2==e.button||f||h||(o(),c=p.getParent(e.target,"td,th"),u=p.getParent(c,"table"))}),r.on("mouseover",s),r.on("remove",function(){p.unbind(r.getDoc(),"mouseover",s),o()}),r.on("MouseUp",function(){function e(e,r){var o=new t(e,e);do{if(3==e.nodeType&&0!==n.trim(e.nodeValue).length)return void(r?i.setStart(e,0):i.setEnd(e,e.nodeValue.length));if("BR"==e.nodeName)return void(r?i.setStartBefore(e):i.setEndBefore(e))}while(e=r?o.next():o.prev())}var i,o,a,s,u,d=r.selection;if(c){if(l&&(r.getBody().style.webkitUserSelect=""),o=p.select("td[data-mce-selected],th[data-mce-selected]"),o.length>0){i=p.createRng(),s=o[0],i.setStartBefore(s),i.setEndAfter(s),e(s,1),a=new t(s,p.getParent(o[0],"table"));do if("TD"==s.nodeName||"TH"==s.nodeName){if(!p.getAttrib(s,"data-mce-selected"))break;u=s}while(s=a.next());e(u),d.setRng(i)}r.nodeChanged(),g()}}),r.on("KeyUp Drop SetContent",function(e){o("setcontent"==e.type),g(),f=!1}),r.on("ObjectResizeStart ObjectResized",function(e){f="objectresized"!=e.type}),r.on("dragstart",function(){h=!0}),r.on("drop dragend",function(){h=!1}),{clear:o}}}),r("tinymce/tableplugin/Dialogs",["tinymce/util/Tools","tinymce/Env"],function(e,t){var n=e.each;return function(r){function i(){var e=r.settings.color_picker_callback;if(e)return function(){var t=this;e.call(r,function(e){t.value(e).fire("change")},t.value())}}function o(e){return{title:"Advanced",type:"form",defaults:{onchange:function(){d(e,this.parents().reverse()[0],"style"==this.name())}},items:[{label:"Style",name:"style",type:"textbox"},{type:"form",padding:0,formItemDefaults:{layout:"grid",alignH:["start","right"]},defaults:{size:7},items:[{label:"Border color",type:"colorbox",name:"borderColor",onaction:i()},{label:"Background color",type:"colorbox",name:"backgroundColor",onaction:i()}]}]}}function a(e){return e?e.replace(/px$/,""):""}function s(e){return/^[0-9]+$/.test(e)&&(e+="px"),e}function l(e){n("left center right".split(" "),function(t){r.formatter.remove("align"+t,{},e)})}function c(e){n("top middle bottom".split(" "),function(t){r.formatter.remove("valign"+t,{},e)})}function u(t,n,r){function i(t,r){return r=r||[],e.each(t,function(e){var t={text:e.text||e.title};e.menu?t.menu=i(e.menu):(t.value=e.value,n&&n(t)),r.push(t)}),r}return i(t,r||[])}function d(e,t,n){var r=t.toJSON(),i=e.parseStyle(r.style);n?(t.find("#borderColor").value(i["border-color"]||"")[0].fire("change"),t.find("#backgroundColor").value(i["background-color"]||"")[0].fire("change")):(i["border-color"]=r.borderColor,i["background-color"]=r.backgroundColor),t.find("#style").value(e.serializeStyle(e.parseStyle(e.serializeStyle(i))))}function f(e,t,n){var r=e.parseStyle(e.getAttrib(n,"style"));r["border-color"]&&(t.borderColor=r["border-color"]),r["background-color"]&&(t.backgroundColor=r["background-color"]),t.style=e.serializeStyle(r)}function h(e,t,r){var i=e.parseStyle(e.getAttrib(t,"style"));n(r,function(e){i[e.name]=e.value}),e.setAttrib(t,"style",e.serializeStyle(e.parseStyle(e.serializeStyle(i))))}var p=this;p.tableProps=function(){p.table(!0)},p.table=function(i){function c(){function n(e,t,r){if("TD"===e.tagName||"TH"===e.tagName)x.setStyle(e,t,r);else if(e.children)for(var i=0;i',m.insertBefore(i,m.firstChild)),l(m),w.align&&r.formatter.apply("align"+w.align,{},m),r.focus(),r.addVisual()})}function p(e,t){function n(e,n){for(var r=0;r1?m={width:"",height:"",scope:"",class:"",align:"",style:"",type:p.nodeName.toLowerCase()}:(m={width:a(v.getStyle(p,"width")||v.getAttrib(p,"width")),height:a(v.getStyle(p,"height")||v.getAttrib(p,"height")),scope:v.getAttrib(p,"scope"),class:v.getAttrib(p,"class")},m.type=p.nodeName.toLowerCase(),n("left center right".split(" "),function(e){r.formatter.matchNode(p,"align"+e)&&(m.align=e)}),n("top middle bottom".split(" "),function(e){r.formatter.matchNode(p,"valign"+e)&&(m.valign=e)}),f(v,m,p)),r.settings.table_cell_class_list&&(g={name:"class",type:"listbox",label:"Class",values:u(r.settings.table_cell_class_list,function(e){e.value&&(e.textStyle=function(){return r.formatter.getCssText({block:"td",classes:[e.value]})})})});var b={type:"form",layout:"flex",direction:"column",labelGapCalc:"children",padding:0,items:[{type:"form",layout:"grid",columns:2,labelGapCalc:!1,padding:0,defaults:{type:"textbox",maxWidth:50},items:[{label:"Width",name:"width"},{label:"Height",name:"height"},{label:"Cell type",name:"type",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"Cell",value:"td"},{text:"Header cell",value:"th"}]},{label:"Scope",name:"scope",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Row",value:"row"},{text:"Column",value:"col"},{text:"Row group",value:"rowgroup"},{text:"Column group",value:"colgroup"}]},{label:"H Align",name:"align",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"V Align",name:"valign",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Top",value:"top"},{text:"Middle",value:"middle"},{text:"Bottom",value:"bottom"}]}]},g]};r.settings.table_cell_advtab!==!1?r.windowManager.open({title:"Cell properties",bodyType:"tabpanel",data:m,body:[{title:"General",type:"form",items:b},o(v)],onsubmit:h}):r.windowManager.open({title:"Cell properties",data:m,body:b,onsubmit:h})}},p.row=function(){function t(e,t,n){(1===C.length||n)&&b.setAttrib(e,t,n)}function i(e,t,n){(1===C.length||n)&&b.setStyle(e,t,n)}function c(){var o,a,c;d(b,this),v=e.extend(v,this.toJSON()),r.undoManager.transact(function(){var e=v.type;n(C,function(n){t(n,"scope",v.scope),t(n,"style",v.style),t(n,"class",v.class),i(n,"height",s(v.height)),e!==n.parentNode.nodeName.toLowerCase()&&(o=b.getParent(n,"table"),a=n.parentNode,c=b.select(e,o)[0],c||(c=b.create(e),o.firstChild?o.insertBefore(c,o.firstChild):o.appendChild(c)),c.appendChild(n),a.hasChildNodes()||b.remove(a)),1===C.length&&l(n),v.align&&r.formatter.apply("align"+v.align,{},n)}),r.focus()})}var h,p,m,g,v,y,b=r.dom,C=[];h=r.dom.getParent(r.selection.getStart(),"table"),p=r.dom.getParent(r.selection.getStart(),"td,th"),n(h.rows,function(e){n(e.cells,function(t){if(b.getAttrib(t,"data-mce-selected")||t==p)return C.push(e),!1})}),m=C[0],m&&(C.length>1?v={height:"",scope:"",class:"",align:"",type:m.parentNode.nodeName.toLowerCase()}:(v={height:a(b.getStyle(m,"height")||b.getAttrib(m,"height")),scope:b.getAttrib(m,"scope"),class:b.getAttrib(m,"class")},v.type=m.parentNode.nodeName.toLowerCase(),n("left center right".split(" "),function(e){r.formatter.matchNode(m,"align"+e)&&(v.align=e)}),f(b,v,m)),r.settings.table_row_class_list&&(g={name:"class",type:"listbox",label:"Class",values:u(r.settings.table_row_class_list,function(e){e.value&&(e.textStyle=function(){return r.formatter.getCssText({block:"tr",classes:[e.value]})})})}),y={type:"form",columns:2,padding:0,defaults:{type:"textbox"},items:[{type:"listbox",name:"type",label:"Row type",text:"Header",maxWidth:null,values:[{text:"Header",value:"thead"},{text:"Body",value:"tbody"},{text:"Footer",value:"tfoot"}]},{type:"listbox",name:"align",label:"Alignment",text:"None",maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"Height",name:"height"},g]},r.settings.table_row_advtab!==!1?r.windowManager.open({title:"Row properties",data:v,bodyType:"tabpanel",body:[{title:"General",type:"form",items:y},o(b)],onsubmit:c}):r.windowManager.open({title:"Row properties",data:v,body:y,onsubmit:c}))}}}),r("tinymce/tableplugin/ResizeBars",["tinymce/util/Tools","tinymce/util/VK"],function(e,n){var r;return function(i){function o(e,t){return{index:e,y:i.dom.getPos(t).y}}function a(e,t){return{index:e,y:i.dom.getPos(t).y+t.offsetHeight}}function s(e,t){return{index:e,x:i.dom.getPos(t).x}}function l(e,t){return{index:e,x:i.dom.getPos(t).x+t.offsetWidth}}function c(){var e=i.getBody().dir;return"rtl"===e}function u(){return i.inline}function d(){return u?i.getBody().ownerDocument.body:i.getBody()}function f(e,t){return c()?l(e,t):s(e,t)}function h(e,t){return c()?s(e,t):l(e,t)}function p(e,t){return m(e,"width")/m(t,"width")*100}function m(e,t){var n=i.dom.getStyle(e,t,!0),r=parseInt(n,10);return r}function g(e){var t=m(e,"width"),n=m(e.parentElement,"width");return t/n*100}function v(e,t){var n=m(e,"width");return t/n*100}function y(e,t){var n=m(e.parentElement,"width");return t/n*100}function b(e,t,n){for(var r=[],i=1;i0?b(o,a,r):[],u=s.length>0?b(f,h,s):[];E(c,e.offsetWidth,l),N(u,e.offsetHeight,l)}function D(e,t,n,r){if(t<0||t>=e.length-1)return"";var i=e[t];if(i)i={value:i,delta:0};else for(var o=e.slice(0,t).reverse(),a=0;a0?i:o}function P(t,n,r){for(var i=R(t),o=e.map(i,function(e){return f(e.colIndex,e.element).x}),a=[],s=0;s1?D(o,s):M(i[s].element,n,r);c=c?c:we,a.push(c)}return a}function O(e){var t=L(e,"height"),n=parseInt(t,10);return V(t)&&(n=0),!isNaN(n)&&n>0?n:m(e,"height")}function H(t){for(var n=A(t),r=e.map(n,function(e){return o(e.rowIndex,e.element).y}),i=[],a=0;a1?D(r,a):O(n[a].element); +l=l?l:Ee,i.push(l)}return i}function I(t,n,r,i,o){function a(t){return e.map(t,function(){return 0})}function s(){var e;if(o)e=[100-d[0]];else{var t=Math.max(i,d[0]+r);e=[t-d[0]]}return e}function l(e,t){var n,o=a(d.slice(0,e)),s=a(d.slice(t+1));if(r>=0){var l=Math.max(i,d[t]-r);n=o.concat([r,l-d[t]]).concat(s)}else{var c=Math.max(i,d[e]+r),u=d[e]-c;n=o.concat([c-d[e],u]).concat(s)}return n}function c(e,t){var n,o=a(d.slice(0,t));if(r>=0)n=o.concat([r]);else{var s=Math.max(i,d[t]+r);n=o.concat([s-d[t]])}return n}var u,d=t.slice(0);return u=0===t.length?[]:1===t.length?s():0===n?l(0,1):n>0&&n=1&&q(r,t,e)}else if(ee(ce)){var a=parseInt(i.dom.getAttrib(ce,ge),10),s=i.dom.getPos(ce).y;e=parseInt(i.dom.getAttrib(ce,me),10),t=s-a,Math.abs(t)>=1&&j(r,t,e)}x(r),i.nodeChanged()}}function Q(e,t){le=le?le:K(),se=!0,i.dom.addClass(e,Ne),ce=e,G(le,t),i.dom.add(d(),le)}function Z(e){return i.dom.hasClass(e,ve)}function ee(e){return i.dom.hasClass(e,he)}function te(e){ue=ue!==t?ue:e.clientX;var n=e.clientX-ue;ue=e.clientX;var r=i.dom.getPos(ce).x;i.dom.setStyle(ce,"left",r+n+"px")}function ne(e){de=de!==t?de:e.clientY;var n=e.clientY-de;de=e.clientY;var r=i.dom.getPos(ce).y;i.dom.setStyle(ce,"top",r+n+"px")}function re(e){ue=t,Q(e,te)}function ie(e){de=t,Q(e,ne)}function oe(e){var t=e.target,n=i.getBody();if(i.$.contains(n,r)||r===n)if(Z(t)){e.preventDefault();var o=i.dom.getPos(t).x;i.dom.setAttrib(t,Ce,o),re(t)}else if(ee(t)){e.preventDefault();var a=i.dom.getPos(t).y;i.dom.setAttrib(t,ge,a),ie(t)}else C()}var ae,se,le,ce,ue,de,fe="mce-resize-bar",he="mce-resize-bar-row",pe="row-resize",me="data-row",ge="data-initial-top",ve="mce-resize-bar-col",ye="col-resize",be="data-col",Ce="data-initial-left",xe=4,we=10,Ee=10,Ne="mce-resize-bar-dragging",_e=new RegExp(/(\d+(\.\d+)?%)/),Se=new RegExp(/px|em/);return i.on("init",function(){i.dom.bind(d(),"mousedown",oe)}),i.on("ObjectResized",function(t){var n=t.target;if("TABLE"===n.nodeName){var r=[];e.each(n.rows,function(t){e.each(t.cells,function(e){var t=i.dom.getStyle(e,"width",!0);r.push({cell:e,width:t})})}),e.each(r,function(e){i.dom.setStyle(e.cell,"width",e.width),i.dom.setAttrib(e.cell,"width",null)})}}),i.on("mouseover",function(e){if(!se){var t=i.dom.getParent(e.target,"table");("TABLE"===e.target.nodeName||t)&&(r=t,x(t))}}),i.on("keydown",function(e){switch(e.keyCode){case n.LEFT:case n.RIGHT:case n.UP:case n.DOWN:C()}}),i.on("remove",function(){C(),i.dom.unbind(d(),"mousedown",oe)}),{adjustWidth:q,adjustHeight:j,clearBars:C,drawBars:B,determineDeltas:I,getTableGrid:S,getTableDetails:_,getWidths:P,getPixelHeights:H,isPercentageBasedSize:V,isPixelBasedSize:$,recalculateWidths:z,recalculateCellHeights:U,recalculateRowHeights:W}}}),r("tinymce/tableplugin/Plugin",["tinymce/tableplugin/TableGrid","tinymce/tableplugin/Quirks","tinymce/tableplugin/CellSelection","tinymce/tableplugin/Dialogs","tinymce/tableplugin/ResizeBars","tinymce/util/Tools","tinymce/dom/TreeWalker","tinymce/Env","tinymce/PluginManager"],function(e,t,n,r,i,o,a,s,l){function c(o){function a(e){return function(){o.execCommand(e)}}function l(e,t){var n,r,i,a;for(i='',n=0;n",r=0;r"+(s.ie&&s.ie<10?" ":"
")+"";i+=""}return i+="
",o.undoManager.transact(function(){o.insertContent(i),a=o.dom.get("__mce"),o.dom.setAttrib(a,"id",null),o.$("tr",a).each(function(e,t){o.fire("newrow",{node:t}),o.$("th,td",t).each(function(e,t){o.fire("newcell",{node:t})})}),o.dom.setAttribs(a,o.settings.table_default_attributes||{}),o.dom.setStyles(a,o.settings.table_default_styles||{})}),a}function c(e,t,n){function r(){var r,i,a,s={},l=0;i=o.dom.select("td[data-mce-selected],th[data-mce-selected]"),r=i[0],r||(r=o.selection.getStart()),n&&i.length>0?(u(i,function(e){return s[e.parentNode.parentNode.nodeName]=1}),u(s,function(e){l+=e}),a=1!==l):a=!o.dom.getParent(r,t),e.disabled(a),o.selection.selectorChanged(t,function(t){e.disabled(!t)})}o.initialized?r():o.on("init",r)}function d(){c(this,"table")}function f(){c(this,"td,th")}function h(){c(this,"td,th",!0)}function p(){var e="";e='';for(var t=0;t<10;t++){e+="";for(var n=0;n<10;n++)e+='';e+=""}return e+="
",e+=''}function m(e,t,n){var r,i,a,s,l,c=n.getEl().getElementsByTagName("table")[0],u=n.isRtl()||"tl-tr"==n.parent().rel;for(c.nextSibling.innerHTML=e+1+" x "+(t+1),u&&(e=9-e),i=0;i<10;i++)for(r=0;r<10;r++)s=c.rows[i].childNodes[r].firstChild,l=(u?r>=e:r<=e)&&i<=t,o.dom.toggleClass(s,"mce-active",l),l&&(a=s);return a.parentNode}function g(){o.addButton("tableprops",{title:"Table properties",onclick:N.tableProps,icon:"table"}),o.addButton("tabledelete",{title:"Delete table",onclick:a("mceTableDelete")}),o.addButton("tablecellprops",{title:"Cell properties",onclick:a("mceTableCellProps")}),o.addButton("tablemergecells",{title:"Merge cells",onclick:a("mceTableMergeCells")}),o.addButton("tablesplitcells",{title:"Split cell",onclick:a("mceTableSplitCells")}),o.addButton("tableinsertrowbefore",{title:"Insert row before",onclick:a("mceTableInsertRowBefore")}),o.addButton("tableinsertrowafter",{title:"Insert row after",onclick:a("mceTableInsertRowAfter")}),o.addButton("tabledeleterow",{title:"Delete row",onclick:a("mceTableDeleteRow")}),o.addButton("tablerowprops",{title:"Row properties",onclick:a("mceTableRowProps")}),o.addButton("tablecutrow",{title:"Cut row",onclick:a("mceTableCutRow")}),o.addButton("tablecopyrow",{title:"Copy row",onclick:a("mceTableCopyRow")}),o.addButton("tablepasterowbefore",{title:"Paste row before",onclick:a("mceTablePasteRowBefore")}),o.addButton("tablepasterowafter",{title:"Paste row after",onclick:a("mceTablePasteRowAfter")}),o.addButton("tableinsertcolbefore",{title:"Insert column before",onclick:a("mceTableInsertColBefore")}),o.addButton("tableinsertcolafter",{title:"Insert column after",onclick:a("mceTableInsertColAfter")}),o.addButton("tabledeletecol",{title:"Delete column",onclick:a("mceTableDeleteCol")})}function v(e){var t=o.dom.is(e,"table")&&o.getBody().contains(e);return t}function y(){var e=o.settings.table_toolbar;""!==e&&e!==!1&&(e||(e="tableprops tabledelete | tableinsertrowbefore tableinsertrowafter tabledeleterow | tableinsertcolbefore tableinsertcolafter tabledeletecol"),o.addContextToolbar(v,e))}function b(){return x}function C(e){x=e}var x,w,E=this,N=new r(o);!o.settings.object_resizing||o.settings.table_resize_bars===!1||o.settings.object_resizing!==!0&&"table"!==o.settings.object_resizing||(w=i(o)),o.settings.table_grid===!1?o.addMenuItem("inserttable",{text:"Table",icon:"table",context:"table",onclick:N.table}):o.addMenuItem("inserttable",{text:"Table",icon:"table",context:"table",ariaHideMenu:!0,onclick:function(e){e.aria&&(this.parent().hideAll(),e.stopImmediatePropagation(),N.table())},onshow:function(){m(0,0,this.menu.items()[0])},onhide:function(){var e=this.menu.items()[0].getEl().getElementsByTagName("a");o.dom.removeClass(e,"mce-active"),o.dom.addClass(e[0],"mce-active")},menu:[{type:"container",html:p(),onPostRender:function(){this.lastX=this.lastY=0},onmousemove:function(e){var t,n,r=e.target;"A"==r.tagName.toUpperCase()&&(t=parseInt(r.getAttribute("data-mce-x"),10),n=parseInt(r.getAttribute("data-mce-y"),10),(this.isRtl()||"tl-tr"==this.parent().rel)&&(t=9-t),t===this.lastX&&n===this.lastY||(m(t,n,e.control),this.lastX=t,this.lastY=n))},onclick:function(e){var t=this;"A"==e.target.tagName.toUpperCase()&&(e.preventDefault(),e.stopPropagation(),t.parent().cancel(),o.undoManager.transact(function(){l(t.lastX+1,t.lastY+1)}),o.addVisual())}}]}),o.addMenuItem("tableprops",{text:"Table properties",context:"table",onPostRender:d,onclick:N.tableProps}),o.addMenuItem("deletetable",{text:"Delete table",context:"table",onPostRender:d,cmd:"mceTableDelete"}),o.addMenuItem("cell",{separator:"before",text:"Cell",context:"table",menu:[{text:"Cell properties",onclick:a("mceTableCellProps"),onPostRender:f},{text:"Merge cells",onclick:a("mceTableMergeCells"),onPostRender:h},{text:"Split cell",onclick:a("mceTableSplitCells"),onPostRender:f}]}),o.addMenuItem("row",{text:"Row",context:"table",menu:[{text:"Insert row before",onclick:a("mceTableInsertRowBefore"),onPostRender:f},{text:"Insert row after",onclick:a("mceTableInsertRowAfter"),onPostRender:f},{text:"Delete row",onclick:a("mceTableDeleteRow"),onPostRender:f},{text:"Row properties",onclick:a("mceTableRowProps"),onPostRender:f},{text:"-"},{text:"Cut row",onclick:a("mceTableCutRow"),onPostRender:f},{text:"Copy row",onclick:a("mceTableCopyRow"),onPostRender:f},{text:"Paste row before",onclick:a("mceTablePasteRowBefore"),onPostRender:f},{text:"Paste row after",onclick:a("mceTablePasteRowAfter"),onPostRender:f}]}),o.addMenuItem("column",{text:"Column",context:"table",menu:[{text:"Insert column before",onclick:a("mceTableInsertColBefore"),onPostRender:f},{text:"Insert column after",onclick:a("mceTableInsertColAfter"),onPostRender:f},{text:"Delete column",onclick:a("mceTableDeleteCol"),onPostRender:f}]});var _=[];u("inserttable tableprops deletetable | cell row column".split(" "),function(e){"|"==e?_.push({text:"-"}):_.push(o.menuItems[e])}),o.addButton("table",{type:"menubutton",title:"Table",menu:_}),s.isIE||o.on("click",function(e){e=e.target,"TABLE"===e.nodeName&&(o.selection.select(e),o.nodeChanged())}),E.quirks=new t(o),o.on("Init",function(){E.cellSelection=new n(o,function(e){e&&w&&w.clearBars()}),E.resizeBars=w}),o.on("PreInit",function(){o.serializer.addAttributeFilter("data-mce-cell-padding,data-mce-border,data-mce-border-color",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)})}),u({mceTableSplitCells:function(e){e.split()},mceTableMergeCells:function(e){var t;t=o.dom.getParent(o.selection.getStart(),"th,td"),o.dom.select("td[data-mce-selected],th[data-mce-selected]").length?e.merge():N.merge(e,t)},mceTableInsertRowBefore:function(e){e.insertRow(!0)},mceTableInsertRowAfter:function(e){e.insertRow()},mceTableInsertColBefore:function(e){e.insertCol(!0)},mceTableInsertColAfter:function(e){e.insertCol()},mceTableDeleteCol:function(e){e.deleteCols()},mceTableDeleteRow:function(e){e.deleteRows()},mceTableCutRow:function(e){x=e.cutRows()},mceTableCopyRow:function(e){x=e.copyRows()},mceTablePasteRowBefore:function(e){e.pasteRows(x,!0)},mceTablePasteRowAfter:function(e){e.pasteRows(x)},mceSplitColsBefore:function(e){e.splitCols(!0)},mceSplitColsAfter:function(e){e.splitCols(!1)},mceTableDelete:function(e){w&&w.clearBars(),e.deleteTable()}},function(t,n){o.addCommand(n,function(){var n=new e(o);n&&(t(n),o.execCommand("mceRepaint"),E.cellSelection.clear())})}),u({mceInsertTable:N.table,mceTableProps:function(){N.table(!0)},mceTableRowProps:N.row,mceTableCellProps:N.cell},function(e,t){o.addCommand(t,function(t,n){e(n)})}),g(),y(),o.settings.table_tab_navigation!==!1&&o.on("keydown",function(t){var n,r,i;9==t.keyCode&&(n=o.dom.getParent(o.selection.getStart(),"th,td"),n&&(t.preventDefault(),r=new e(o),i=t.shiftKey?-1:1,o.undoManager.transact(function(){!r.moveRelIdx(n,i)&&i>0&&(r.insertRow(),r.refresh(),r.moveRelIdx(n,i))})))}),E.insertTable=l,E.setClipboardRows=C,E.getClipboardRows=b}var u=o.each;l.add("table",c)})}(this); \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/plugins/template/plugin.min.js b/data/web/rc/program/js/tinymce/plugins/template/plugin.min.js new file mode 100644 index 00000000..4f5c62cb --- /dev/null +++ b/data/web/rc/program/js/tinymce/plugins/template/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("template",function(e){function t(t){return function(){var n=e.settings.templates;return"function"==typeof n?void n(t):void("string"==typeof n?tinymce.util.XHR.send({url:n,success:function(e){t(tinymce.util.JSON.parse(e))}}):t(n))}}function n(t){function n(t){function n(t){if(t.indexOf("")==-1){var n="";tinymce.each(e.contentCSS,function(t){n+=''});var i=e.settings.body_class||"";i.indexOf("=")!=-1&&(i=e.getParam("body_class","","hash"),i=i[e.id]||""),t=""+n+''+t+""}t=o(t,"template_preview_replace_values");var a=r.find("iframe")[0].getEl().contentWindow.document;a.open(),a.write(t),a.close()}var a=t.control.value();a.url?tinymce.util.XHR.send({url:a.url,success:function(e){i=e,n(i)}}):(i=a.content,n(i)),r.find("#description")[0].text(t.control.value().description)}var r,i,s=[];if(!t||0===t.length){var l=e.translate("No templates defined.");return void e.notificationManager.open({text:l,type:"info"})}tinymce.each(t,function(e){s.push({selected:!s.length,text:e.title,value:{url:e.url,content:e.content,description:e.description}})}),r=e.windowManager.open({title:"Insert template",layout:"flex",direction:"column",align:"stretch",padding:15,spacing:10,items:[{type:"form",flex:0,padding:0,items:[{type:"container",label:"Templates",items:{type:"listbox",label:"Templates",name:"template",values:s,onselect:n}}]},{type:"label",name:"description",label:"Description",text:"\xa0"},{type:"iframe",flex:1,border:1}],onsubmit:function(){a(!1,i)},minWidth:Math.min(tinymce.DOM.getViewPort().w,e.getParam("template_popup_width",600)),minHeight:Math.min(tinymce.DOM.getViewPort().h,e.getParam("template_popup_height",500))}),r.find("listbox")[0].fire("select")}function r(t,n){function r(e,t){if(e=""+e,e.length0&&(l=u.create("div",null),l.appendChild(c[0].cloneNode(!0))),s(u.select("*",l),function(t){a(t,e.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))&&(t.innerHTML=r(e.getParam("template_cdate_format",e.getLang("template.cdate_format")))),a(t,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(t.innerHTML=r(e.getParam("template_mdate_format",e.getLang("template.mdate_format")))),a(t,e.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))&&(t.innerHTML=d)}),i(l),e.execCommand("mceInsertContent",!1,l.innerHTML),e.addVisual()}var s=tinymce.each;e.addCommand("mceInsertTemplate",a),e.addButton("template",{title:"Insert template",onclick:t(n)}),e.addMenuItem("template",{text:"Template",onclick:t(n),context:"insert"}),e.on("PreProcess",function(t){var n=e.dom;s(n.select("div",t.node),function(t){n.hasClass(t,"mceTmpl")&&(s(n.select("*",t),function(t){n.hasClass(t,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(t.innerHTML=r(e.getParam("template_mdate_format",e.getLang("template.mdate_format"))))}),i(t))})})}); \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/plugins/textcolor/plugin.min.js b/data/web/rc/program/js/tinymce/plugins/textcolor/plugin.min.js new file mode 100644 index 00000000..938d1e05 --- /dev/null +++ b/data/web/rc/program/js/tinymce/plugins/textcolor/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("textcolor",function(e){function t(t){var n;return e.dom.getParents(e.selection.getStart(),function(e){var r;(r=e.style["forecolor"==t?"color":"background-color"])&&(n=r)}),n}function n(t){var n,r,i=[];for(r=["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue","808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Red violet","FFFFFF","White","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum"],r=e.settings.textcolor_map||r,r=e.settings[t+"_map"]||r,n=0;n
'+(n?"×":"")+"
"}var r,i,o,a,s,u,d,f,h=this,p=h._id,m=0;for(f=h.settings.origin,r=n(f),r.push({text:tinymce.translate("No color"),color:"transparent"}),o='',a=r.length-1,u=0;u",s=0;sa?o+="":(i=r[d],o+=t(i.color,i.text));o+=""}if(e.settings.color_picker_callback){for(o+='",o+="",s=0;st.start.length?-1:e.start.length',i="";return r+e.dom.encode(n)+i}function c(e){var t=u(e);return'
'+t+"
"}function u(e){var t,n,r,i,o="",c=a(e),u=s(c)-1;if(!c.length)return"";for(o+=l(e.headerTag,tinymce.translate("Table of Contents")),t=0;t";else for(n=u;n
  • ";if(o+=''+r.title+"",i!==r.level&&i)for(n=r.level;n>i;n--)o+="
  • ";else o+="
  • ",i||(o+="");u=r.level}return o}var d,f=e.$,h={depth:3,headerTag:"h2",className:"mce-toc"},p=function(e){var t=0;return function(){var n=(new Date).getTime().toString(32);return e+n+(t++).toString(32)}},m=p("mcetoc_");e.on("PreInit",function(){var n=e.settings,r=parseInt(n.toc_depth,10)||0;d={depth:r>=1&&r<=9?r:h.depth,headerTag:t(n.toc_header)?n.toc_header:h.headerTag,className:n.toc_class?e.dom.encode(n.toc_class):h.className}}),e.on("PreProcess",function(e){var t=f("."+d.className,e.node);t.length&&(t.removeAttr("contentEditable"),t.find("[contenteditable]").removeAttr("contentEditable"))}),e.on("SetContent",function(){var e=f("."+d.className);e.length&&(e.attr("contentEditable",!1),e.children(":first-child").attr("contentEditable",!0))});var g=function(t){return!t.length||e.dom.getParents(t[0],".mce-offscreen-selection").length>0};e.addCommand("mceInsertToc",function(){var t=f("."+d.className);g(t)?e.insertContent(c(d)):e.execCommand("mceUpdateToc")}),e.addCommand("mceUpdateToc",function(){var t=f("."+d.className);t.length&&e.undoManager.transact(function(){t.html(u(d))})}),e.addButton("toc",{tooltip:"Table of Contents",cmd:"mceInsertToc",icon:"toc",onPostRender:r}),e.addButton("tocupdate",{tooltip:"Update",cmd:"mceUpdateToc",icon:"reload"}),e.addContextToolbar(n,"tocupdate"),e.addMenuItem("toc",{text:"Table of Contents",context:"insert",cmd:"mceInsertToc",onPostRender:r})}); \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/plugins/visualblocks/css/visualblocks.css b/data/web/rc/program/js/tinymce/plugins/visualblocks/css/visualblocks.css new file mode 100644 index 00000000..1a270892 --- /dev/null +++ b/data/web/rc/program/js/tinymce/plugins/visualblocks/css/visualblocks.css @@ -0,0 +1,135 @@ +.mce-visualblocks p { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); +} + +.mce-visualblocks h1 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); +} + +.mce-visualblocks h2 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); +} + +.mce-visualblocks h3 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); +} + +.mce-visualblocks h4 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); +} + +.mce-visualblocks h5 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); +} + +.mce-visualblocks h6 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); +} + +.mce-visualblocks div:not([data-mce-bogus]) { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); +} + +.mce-visualblocks section { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); +} + +.mce-visualblocks article { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); +} + +.mce-visualblocks blockquote { + padding-top: 10px; + border: 1px dashed #BBB; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); +} + +.mce-visualblocks address { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); +} + +.mce-visualblocks pre { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); +} + +.mce-visualblocks figure { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); +} + +.mce-visualblocks hgroup { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); +} + +.mce-visualblocks aside { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); +} + +.mce-visualblocks figcaption { + border: 1px dashed #BBB; +} + +.mce-visualblocks ul { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==) +} + +.mce-visualblocks ol { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); +} + +.mce-visualblocks dl { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background: transparent no-repeat url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==); +} diff --git a/data/web/rc/program/js/tinymce/plugins/visualblocks/plugin.min.js b/data/web/rc/program/js/tinymce/plugins/visualblocks/plugin.min.js new file mode 100644 index 00000000..e5810f45 --- /dev/null +++ b/data/web/rc/program/js/tinymce/plugins/visualblocks/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("visualblocks",function(e,t){function n(){var t=this;t.active(o),e.on("VisualBlocks",function(){t.active(e.dom.hasClass(e.getBody(),"mce-visualblocks"))})}var r,i,o;window.NodeList&&(e.addCommand("mceVisualBlocks",function(){var n,a=e.dom;r||(r=a.uniqueId(),n=a.create("link",{id:r,rel:"stylesheet",href:t+"/css/visualblocks.css"}),e.getDoc().getElementsByTagName("head")[0].appendChild(n)),e.on("PreviewFormats AfterPreviewFormats",function(t){o&&a.toggleClass(e.getBody(),"mce-visualblocks","afterpreviewformats"==t.type)}),a.toggleClass(e.getBody(),"mce-visualblocks"),o=e.dom.hasClass(e.getBody(),"mce-visualblocks"),i&&i.active(a.hasClass(e.getBody(),"mce-visualblocks")),e.fire("VisualBlocks")}),e.addButton("visualblocks",{title:"Show blocks",cmd:"mceVisualBlocks",onPostRender:n}),e.addMenuItem("visualblocks",{text:"Show blocks",cmd:"mceVisualBlocks",onPostRender:n,selectable:!0,context:"view",prependToContext:!0}),e.on("init",function(){e.settings.visualblocks_default_state&&e.execCommand("mceVisualBlocks",!1,null,{skip_focus:!0})}),e.on("remove",function(){e.dom.removeClass(e.getBody(),"mce-visualblocks")}))}); \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/plugins/visualchars/plugin.min.js b/data/web/rc/program/js/tinymce/plugins/visualchars/plugin.min.js new file mode 100644 index 00000000..599db8be --- /dev/null +++ b/data/web/rc/program/js/tinymce/plugins/visualchars/plugin.min.js @@ -0,0 +1 @@ +tinymce.PluginManager.add("visualchars",function(e){function t(t){function n(e){return''+e+""}function o(){var e,t="";for(e in h)t+=e;return new RegExp("["+t+"]","g")}function a(){var e,t="";for(e in h)t&&(t+=","),t+="span.mce-"+h[e];return t}var s,l,c,u,d,f,h,p,m=e.getBody(),g=e.selection;if(h={"\xa0":"nbsp","\xad":"shy"},r=!r,i.state=r,e.fire("VisualChars",{state:r}),p=o(),t&&(f=g.getBookmark()),r)for(l=[],tinymce.walk(m,function(e){3==e.nodeType&&e.nodeValue&&p.test(e.nodeValue)&&l.push(e)},"childNodes"),c=0;c=0;c--)e.dom.remove(l[c],1);g.moveToBookmark(f)}function n(){var t=this;e.on("VisualChars",function(e){t.active(e.state)})}var r,i=this;e.addCommand("mceVisualChars",t),e.addButton("visualchars",{title:"Show invisible characters",cmd:"mceVisualChars",onPostRender:n}),e.addMenuItem("visualchars",{text:"Show invisible characters",cmd:"mceVisualChars",onPostRender:n,selectable:!0,context:"view",prependToContext:!0})}); \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/plugins/wordcount/plugin.min.js b/data/web/rc/program/js/tinymce/plugins/wordcount/plugin.min.js new file mode 100644 index 00000000..34400c43 --- /dev/null +++ b/data/web/rc/program/js/tinymce/plugins/wordcount/plugin.min.js @@ -0,0 +1 @@ +!function(){var e={},t=function(t){for(var n=e[t],i=n.deps,o=n.defn,a=i.length,s=new Array(a),l=0;le.length-1&&0!==n)&&((o!==t.ALETTER||a!==t.ALETTER)&&(i=e[n+2],(o!==t.ALETTER||a!==t.MIDLETTER&&a!==t.MIDNUMLET||i!==t.ALETTER)&&(r=e[n-1],(o!==t.MIDLETTER&&o!==t.MIDNUMLET||a!==t.ALETTER||r!==t.ALETTER)&&((o!==t.NUMERIC&&o!==t.ALETTER||a!==t.NUMERIC&&a!==t.ALETTER)&&((o!==t.MIDNUM&&o!==t.MIDNUMLET||a!==t.NUMERIC||r!==t.NUMERIC)&&((o!==t.NUMERIC||a!==t.MIDNUM&&a!==t.MIDNUMLET||i!==t.NUMERIC)&&(o!==t.EXTEND&&o!==t.FORMAT&&r!==t.EXTEND&&r!==t.FORMAT&&a!==t.EXTEND&&a!==t.FORMAT&&((o!==t.CR||a!==t.LF)&&(o===t.NEWLINE||o===t.CR||o===t.LF||(a===t.NEWLINE||a===t.CR||a===t.LF||(o!==t.KATAKANA||a!==t.KATAKANA)&&((a!==t.EXTENDNUMLET||o!==t.ALETTER&&o!==t.NUMERIC&&o!==t.KATAKANA&&o!==t.EXTENDNUMLET)&&(o!==t.EXTENDNUMLET||a!==t.ALETTER&&a!==t.NUMERIC&&a!==t.KATAKANA))))))))))))};return{isWordBoundary:n}}),a("3",["4","5","6"],function(e,t,n){var r=e.EMPTY_STRING,i=e.WHITESPACE,o=e.PUNCTUATION,a=function(e,a){var s,l,c,u=0,d=t.classify(e),f=d.length,h=[],p=[];for(a||(a={}),a.ignoreCase&&(e=e.toLowerCase()),l=a.includePunctuation,c=a.includeWhitespace;u .@{prefix}-container-body { + margin-top: -15px; +} + +.@{prefix}-fieldset-title { + margin-left: 5px; + padding: 0 5px 0 5px; +} \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/FitLayout.less b/data/web/rc/program/js/tinymce/skins/lightgray/FitLayout.less new file mode 100644 index 00000000..8aa413a7 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/FitLayout.less @@ -0,0 +1,9 @@ +// FitLayout + +.@{prefix}-fit-layout { + .inline-block(); +} + +.@{prefix}-fit-layout-item { + position: absolute; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/FloatPanel.less b/data/web/rc/program/js/tinymce/skins/lightgray/FloatPanel.less new file mode 100644 index 00000000..b2cf28f1 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/FloatPanel.less @@ -0,0 +1,69 @@ +// FloatPanel + +.@{prefix}-floatpanel { + position: absolute; + .box-shadow(@floatpanel-box-shadow); +} + +.@{prefix}-floatpanel.@{prefix}-fixed { + position: fixed; +} + +// Popover panel + +.@{prefix}-floatpanel .@{prefix}-arrow, +.@{prefix}-floatpanel .@{prefix}-arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.@{prefix}-floatpanel .@{prefix}-arrow { + border-width: @popover-arrow-outer-width; +} + +.@{prefix}-floatpanel .@{prefix}-arrow:after { + border-width: @popover-arrow-width; + content: ""; +} + +.@{prefix}-floatpanel.@{prefix}-popover { + .reset-gradient(); + .border-radius(6px); + .box-shadow(@floatpanel-box-shadow); + top: 0; + left: 0; + background: @popover-bg; + border: 1px solid @panel-border; + border: 1px solid @popover-arrow-outer; + + &.@{prefix}-bottom { + margin-top: @popover-arrow-width; + *margin-top: 0; + + & > .@{prefix}-arrow { + left: 50%; + margin-left: -@popover-arrow-outer-width; + border-top-width: 0; + border-bottom-color: @panel-border; + border-bottom-color: @popover-arrow-outer; + top: -@popover-arrow-outer-width; + + &:after { + top: 1px; + margin-left: -@popover-arrow-width; + border-top-width: 0; + border-bottom-color: @popover-arrow; + } + } + + &.@{prefix}-start { margin-left: -22px; } + &.@{prefix}-start > .@{prefix}-arrow { left: 20px; } + + &.@{prefix}-end { margin-left: 22px; } + &.@{prefix}-end > .@{prefix}-arrow { right: 10px; left: auto; } + } +} \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/FlowLayout.less b/data/web/rc/program/js/tinymce/skins/lightgray/FlowLayout.less new file mode 100644 index 00000000..ea8fe62d --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/FlowLayout.less @@ -0,0 +1,36 @@ +// FlowLayout + +.@{prefix}-flow-layout-item { + .inline-block(); +} + +.@{prefix}-flow-layout-item { + margin: @flow-layout-spacing 0 @flow-layout-spacing @flow-layout-spacing; +} + +.@{prefix}-flow-layout-item.@{prefix}-last { + margin-right: @flow-layout-spacing; +} + +.@{prefix}-flow-layout { + white-space: normal; +} + +.@{prefix}-tinymce-inline .@{prefix}-flow-layout { + white-space: nowrap; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-flow-layout { + text-align: right; + direction: rtl; +} + +.@{prefix}-rtl .@{prefix}-flow-layout-item { + margin: @flow-layout-spacing @flow-layout-spacing @flow-layout-spacing 0; +} + +.@{prefix}-rtl .@{prefix}-flow-layout-item.@{prefix}-last { + margin-left: @flow-layout-spacing; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Icons.Ie7.less b/data/web/rc/program/js/tinymce/skins/lightgray/Icons.Ie7.less new file mode 100644 index 00000000..f0b1957a --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Icons.Ie7.less @@ -0,0 +1,136 @@ +/* Icons IE7 */ + +@font-face { + font-family: 'tinymce'; + src:url('fonts/tinymce.eot'); + src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'), + url('fonts/tinymce.woff') format('woff'), + url('fonts/tinymce.ttf') format('truetype'), + url('fonts/tinymce.svg#tinymce') format('svg'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'tinymce-small'; + src:url('fonts/tinymce-small.eot'); + src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'), + url('fonts/tinymce-small.woff') format('woff'), + url('fonts/tinymce-small.ttf') format('truetype'), + url('fonts/tinymce-small.svg#tinymce') format('svg'); + font-weight: normal; + font-style: normal; +} + +@iconSize: 16px; + +.@{prefix}-ico { + font-family: 'tinymce'; + font-style: normal; + font-weight: normal; + font-size: @iconSize; + line-height: 16px; + vertical-align: text-top; + -webkit-font-smoothing: antialiased; + + display: inline-block; + background: transparent center center; + width: 16px; + height: 16px; + color: @btn-text; + -ie7-icon: ' '; +} + +.@{prefix}-btn-small .@{prefix}-ico { + font-family: 'tinymce-small'; +} + +// .@{prefix}-i-checkbox needs to have zoom overridden since it's set by the gradient mixin +.@{prefix}-ico, i.@{prefix}-i-checkbox { + zoom: ~"expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = this.currentStyle['-ie7-icon'].substr(1, 1) + ' ')"; +} + +.@{prefix}-i-save { -ie7-icon: "\e000"; } +.@{prefix}-i-newdocument { -ie7-icon: "\e001"; } +.@{prefix}-i-fullpage { -ie7-icon: "\e002"; } +.@{prefix}-i-alignleft { -ie7-icon: "\e003"; } +.@{prefix}-i-aligncenter { -ie7-icon: "\e004"; } +.@{prefix}-i-alignright { -ie7-icon: "\e005"; } +.@{prefix}-i-alignjustify { -ie7-icon: "\e006"; } +.@{prefix}-i-alignnone { -ie7-icon: "\e003"; } +.@{prefix}-i-cut { -ie7-icon: "\e007"; } +.@{prefix}-i-paste { -ie7-icon: "\e008"; } +.@{prefix}-i-searchreplace { -ie7-icon: "\e009"; } +.@{prefix}-i-bullist { -ie7-icon: "\e00a"; } +.@{prefix}-i-numlist { -ie7-icon: "\e00b"; } +.@{prefix}-i-indent { -ie7-icon: "\e00c"; } +.@{prefix}-i-outdent { -ie7-icon: "\e00d"; } +.@{prefix}-i-blockquote { -ie7-icon: "\e00e"; } +.@{prefix}-i-undo { -ie7-icon: "\e00f"; } +.@{prefix}-i-redo { -ie7-icon: "\e010"; } +.@{prefix}-i-link { -ie7-icon: "\e011"; } +.@{prefix}-i-unlink { -ie7-icon: "\e012"; } +.@{prefix}-i-anchor { -ie7-icon: "\e013"; } +.@{prefix}-i-image { -ie7-icon: "\e014"; } +.@{prefix}-i-media { -ie7-icon: "\e015"; } +.@{prefix}-i-help { -ie7-icon: "\e016"; } +.@{prefix}-i-code { -ie7-icon: "\e017"; } +.@{prefix}-i-insertdatetime { -ie7-icon: "\e018"; } +.@{prefix}-i-preview { -ie7-icon: "\e019"; } +.@{prefix}-i-forecolor { -ie7-icon: "\e01a"; } +.@{prefix}-i-backcolor { -ie7-icon: "\e01a"; } +.@{prefix}-i-table { -ie7-icon: "\e01b"; } +.@{prefix}-i-hr { -ie7-icon: "\e01c"; } +.@{prefix}-i-removeformat { -ie7-icon: "\e01d"; } +.@{prefix}-i-subscript { -ie7-icon: "\e01e"; } +.@{prefix}-i-superscript { -ie7-icon: "\e01f"; } +.@{prefix}-i-charmap { -ie7-icon: "\e020"; } +.@{prefix}-i-emoticons { -ie7-icon: "\e021"; } +.@{prefix}-i-print { -ie7-icon: "\e022"; } +.@{prefix}-i-fullscreen { -ie7-icon: "\e023"; } +.@{prefix}-i-spellchecker { -ie7-icon: "\e024"; } +.@{prefix}-i-nonbreaking { -ie7-icon: "\e025"; } +.@{prefix}-i-template { -ie7-icon: "\e026"; } +.@{prefix}-i-pagebreak { -ie7-icon: "\e027"; } +.@{prefix}-i-restoredraft { -ie7-icon: "\e028"; } +.@{prefix}-i-untitled { -ie7-icon: "\e029"; } +.@{prefix}-i-bold { -ie7-icon: "\e02a"; } +.@{prefix}-i-italic { -ie7-icon: "\e02b"; } +.@{prefix}-i-underline { -ie7-icon: "\e02c"; } +.@{prefix}-i-strikethrough { -ie7-icon: "\e02d"; } +.@{prefix}-i-visualchars { -ie7-icon: "\e02e"; } +.@{prefix}-i-ltr { -ie7-icon: "\e02f"; } +.@{prefix}-i-rtl { -ie7-icon: "\e030"; } +.@{prefix}-i-copy { -ie7-icon: "\e031"; } +.@{prefix}-i-resize { -ie7-icon: "\e032"; } +.@{prefix}-i-browse { -ie7-icon: "\e034"; } +.@{prefix}-i-pastetext { -ie7-icon: "\e035"; } +.@{prefix}-i-rotateleft { -ie7-icon: "\eaa8"; } +.@{prefix}-i-rotateright { -ie7-icon: "\eaa9"; } +.@{prefix}-i-crop { -ie7-icon: "\ee78"; } +.@{prefix}-i-editimage { -ie7-icon: "\e914"; } +.@{prefix}-i-options { -ie7-icon: "\ec6a"; } +.@{prefix}-i-flipv { -ie7-icon: "\eaaa"; } +.@{prefix}-i-fliph { -ie7-icon: "\eaac"; } +.@{prefix}-i-zoomin { -ie7-icon: "\eb35"; } +.@{prefix}-i-zoomout { -ie7-icon: "\eb36"; } +.@{prefix}-i-sun { -ie7-icon: "\eccc"; } +.@{prefix}-i-moon { -ie7-icon: "\eccd"; } +.@{prefix}-i-arrowleft { -ie7-icon: "\edc0"; } +.@{prefix}-i-arrowright { -ie7-icon: "\edb8"; } +.@{prefix}-i-drop { -ie7-icon: "\e934"; } +.@{prefix}-i-contrast { -ie7-icon: "\ecd4"; } +.@{prefix}-i-sharpen { -ie7-icon: "\eba7"; } +.@{prefix}-i-palette { -ie7-icon: "\e92a"; } +.@{prefix}-i-resize2 { -ie7-icon: "\edf9"; } +.@{prefix}-i-orientation { -ie7-icon: "\e601"; } +.@{prefix}-i-invert { -ie7-icon: "\e602"; } +.@{prefix}-i-gamma { -ie7-icon: "\e600"; } +.@{prefix}-i-remove { -ie7-icon: "\ed6a"; } +.@{prefix}-i-codesample { -ie7-icon: "\e603"; } +.@{prefix}-i-checkbox, .@{prefix}-i-selected { + -ie7-icon: "\e033"; +} + +.@{prefix}-i-selected { visibility: hidden; } +.@{prefix}-i-backcolor { background: #BBB; } diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Icons.less b/data/web/rc/program/js/tinymce/skins/lightgray/Icons.less new file mode 100644 index 00000000..19b0c6c9 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Icons.less @@ -0,0 +1,182 @@ +/* Icons */ + +@font-face { + font-family: 'tinymce'; + src:url('fonts/tinymce.eot'); + src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'), + url('fonts/tinymce.woff') format('woff'), + url('fonts/tinymce.ttf') format('truetype'), + url('fonts/tinymce.svg#tinymce') format('svg'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'tinymce-small'; + src:url('fonts/tinymce-small.eot'); + src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'), + url('fonts/tinymce-small.woff') format('woff'), + url('fonts/tinymce-small.ttf') format('truetype'), + url('fonts/tinymce-small.svg#tinymce') format('svg'); + font-weight: normal; + font-style: normal; +} + +@iconSize: 16px; + +.@{prefix}-ico { + font-family: 'tinymce', Arial; + font-style: normal; + font-weight: normal; + font-variant: normal; + font-size: @iconSize; + line-height: 16px; + speak: none; + vertical-align: text-top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + display: inline-block; + background: transparent center center; + background-size: cover; + width: 16px; + height: 16px; + color: @btn-text; +} + +.@{prefix}-btn-small .@{prefix}-ico { + font-family: 'tinymce-small', Arial; +} + +.@{prefix}-i-save:before { content: "\e000"; } +.@{prefix}-i-newdocument:before { content: "\e001"; } +.@{prefix}-i-fullpage:before { content: "\e002"; } +.@{prefix}-i-alignleft:before { content: "\e003"; } +.@{prefix}-i-aligncenter:before { content: "\e004"; } +.@{prefix}-i-alignright:before { content: "\e005"; } +.@{prefix}-i-alignjustify:before { content: "\e006"; } +.@{prefix}-i-alignnone:before { content: "\e003"; } +.@{prefix}-i-cut:before { content: "\e007"; } +.@{prefix}-i-paste:before { content: "\e008"; } +.@{prefix}-i-searchreplace:before { content: "\e009"; } +.@{prefix}-i-bullist:before { content: "\e00a"; } +.@{prefix}-i-numlist:before { content: "\e00b"; } +.@{prefix}-i-indent:before { content: "\e00c"; } +.@{prefix}-i-outdent:before { content: "\e00d"; } +.@{prefix}-i-blockquote:before { content: "\e00e"; } +.@{prefix}-i-undo:before { content: "\e00f"; } +.@{prefix}-i-redo:before { content: "\e010"; } +.@{prefix}-i-link:before { content: "\e011"; } +.@{prefix}-i-unlink:before { content: "\e012"; } +.@{prefix}-i-anchor:before { content: "\e013"; } +.@{prefix}-i-image:before { content: "\e014"; } +.@{prefix}-i-media:before { content: "\e015"; } +.@{prefix}-i-help:before { content: "\e016"; } +.@{prefix}-i-code:before { content: "\e017"; } +.@{prefix}-i-insertdatetime:before { content: "\e018"; } +.@{prefix}-i-preview:before { content: "\e019"; } +.@{prefix}-i-forecolor:before { content: "\e01a"; } +.@{prefix}-i-backcolor:before { content: "\e01a"; } +.@{prefix}-i-table:before { content: "\e01b"; } +.@{prefix}-i-hr:before { content: "\e01c"; } +.@{prefix}-i-removeformat:before { content: "\e01d"; } +.@{prefix}-i-subscript:before { content: "\e01e"; } +.@{prefix}-i-superscript:before { content: "\e01f"; } +.@{prefix}-i-charmap:before { content: "\e020"; } +.@{prefix}-i-emoticons:before { content: "\e021"; } +.@{prefix}-i-print:before { content: "\e022"; } +.@{prefix}-i-fullscreen:before { content: "\e023"; } +.@{prefix}-i-spellchecker:before { content: "\e024"; } +.@{prefix}-i-nonbreaking:before { content: "\e025"; } +.@{prefix}-i-template:before { content: "\e026"; } +.@{prefix}-i-pagebreak:before { content: "\e027"; } +.@{prefix}-i-restoredraft:before { content: "\e028"; } +.@{prefix}-i-bold:before { content: "\e02a"; } +.@{prefix}-i-italic:before { content: "\e02b"; } +.@{prefix}-i-underline:before { content: "\e02c"; } +.@{prefix}-i-strikethrough:before { content: "\e02d"; } +.@{prefix}-i-visualchars:before { content: "\e02e"; } +.@{prefix}-i-visualblocks:before { content: "\e02e"; } +.@{prefix}-i-ltr:before { content: "\e02f"; } +.@{prefix}-i-rtl:before { content: "\e030"; } +.@{prefix}-i-copy:before { content: "\e031"; } +.@{prefix}-i-resize:before { content: "\e032"; } +.@{prefix}-i-browse:before { content: "\e034"; } +.@{prefix}-i-pastetext:before { content: "\e035"; } +.@{prefix}-i-rotateleft:before { content: "\eaa8"; } +.@{prefix}-i-rotateright:before { content: "\eaa9"; } +.@{prefix}-i-crop:before { content: "\ee78"; } +.@{prefix}-i-editimage:before { content: "\e915"; } +.@{prefix}-i-options:before { content: "\ec6a"; } +.@{prefix}-i-flipv:before { content: "\eaaa"; } +.@{prefix}-i-fliph:before { content: "\eaac"; } +.@{prefix}-i-zoomin:before { content: "\eb35"; } +.@{prefix}-i-zoomout:before { content: "\eb36"; } +.@{prefix}-i-sun:before { content: "\eccc"; } +.@{prefix}-i-moon:before { content: "\eccd"; } +.@{prefix}-i-arrowleft:before { content: "\edc0"; } +.@{prefix}-i-arrowright:before { content: "\e93c"; } +.@{prefix}-i-drop:before { content: "\e935"; } +.@{prefix}-i-contrast:before { content: "\ecd4"; } +.@{prefix}-i-sharpen:before { content: "\eba7"; } +.@{prefix}-i-resize2:before { content: "\edf9"; } +.@{prefix}-i-orientation:before { content: "\e601"; } +.@{prefix}-i-invert:before { content: "\e602"; } +.@{prefix}-i-gamma:before { content: "\e600"; } +.@{prefix}-i-remove:before { content: "\ed6a"; } +.@{prefix}-i-tablerowprops:before { content: "\e604"; } +.@{prefix}-i-tablecellprops:before { content: "\e605"; } +.@{prefix}-i-table2:before { content: "\e606"; } +.@{prefix}-i-tablemergecells:before { content: "\e607"; } +.@{prefix}-i-tableinsertcolbefore:before { content: "\e608"; } +.@{prefix}-i-tableinsertcolafter:before { content: "\e609"; } +.@{prefix}-i-tableinsertrowbefore:before { content: "\e60a"; } +.@{prefix}-i-tableinsertrowafter:before { content: "\e60b"; } +.@{prefix}-i-tablesplitcells:before { content: "\e60d"; } +.@{prefix}-i-tabledelete:before { content: "\e60e"; } +.@{prefix}-i-tableleftheader:before { content: "\e62a"; } +.@{prefix}-i-tabletopheader:before { content: "\e62b"; } +.@{prefix}-i-tabledeleterow:before { content: "\e800"; } +.@{prefix}-i-tabledeletecol:before { content: "\e801"; } +.@{prefix}-i-codesample:before { content: "\e603"; } +.@{prefix}-i-fill:before { content: "\e902"; } +.@{prefix}-i-borderwidth:before { content: "\e903"; } +.@{prefix}-i-line:before { content: "\e904"; } +.@{prefix}-i-count:before { content: "\e905"; } +.@{prefix}-i-translate:before { content: "\e907"; } +.@{prefix}-i-drag:before { content: "\e908"; } +.@{prefix}-i-home:before { content: "\e90b"; } +.@{prefix}-i-upload:before { content: "\e914"; } +.@{prefix}-i-bubble:before { content: "\e91c"; } +.@{prefix}-i-user:before { content: "\e91d"; } +.@{prefix}-i-lock:before { content: "\e926"; } +.@{prefix}-i-unlock:before { content: "\e927"; } +.@{prefix}-i-settings:before { content: "\e928"; } +.@{prefix}-i-remove2:before { content: "\e92a"; } +.@{prefix}-i-menu:before { content: "\e92d"; } +.@{prefix}-i-warning:before { content: "\e930"; } +.@{prefix}-i-question:before { content: "\e931"; } +.@{prefix}-i-pluscircle:before { content: "\e932"; } +.@{prefix}-i-info:before { content: "\e933"; } +.@{prefix}-i-notice:before { content: "\e934"; } +.@{prefix}-i-arrowup:before { content: "\e93b"; } +.@{prefix}-i-arrowdown:before { content: "\e93d"; } +.@{prefix}-i-arrowup2:before { content: "\e93f"; } +.@{prefix}-i-arrowdown2:before { content: "\e940"; } +.@{prefix}-i-menu2:before { content: "\e941"; } +.@{prefix}-i-newtab:before { content: "\e961"; } +.@{prefix}-i-a11y:before { content: "\e900"; } +.@{prefix}-i-plus:before { content: "\e93a"; } +.@{prefix}-i-insert:before { content: "\e93a"; } +.@{prefix}-i-minus:before { content: "\e939"; } +.@{prefix}-i-books:before { content: "\e911"; } +.@{prefix}-i-reload:before { content: "\e906"; } +.@{prefix}-i-toc:before { content: "\e901"; } +.@{prefix}-i-checkmark:before { content: "\e033"; } +.@{prefix}-i-checkbox:before, .@{prefix}-i-selected:before { + content: "\e033"; +} + +.@{prefix}-i-insert { font-size: 14px; } +.@{prefix}-i-selected { visibility: hidden; } +i.@{prefix}-i-backcolor { text-shadow: none; background: @colorbtn-backcolor-bg; } diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Iframe.less b/data/web/rc/program/js/tinymce/skins/lightgray/Iframe.less new file mode 100644 index 00000000..4298a64b --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Iframe.less @@ -0,0 +1,6 @@ +// Iframe + +.@{prefix}-iframe { + border: 0 solid @iframe-border; + width: 100%; height: 100%; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/ImagePanel.less b/data/web/rc/program/js/tinymce/skins/lightgray/ImagePanel.less new file mode 100644 index 00000000..31154524 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/ImagePanel.less @@ -0,0 +1,25 @@ +// ImagePanel + +.@{prefix}-imagepanel { + overflow: auto; + background: black; +} + +.@{prefix}-imagepanel-bg { + position: absolute; + background: url('data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw=='); +} + +.@{prefix}-imagepanel img { + position: absolute; +} + +.@{prefix}-imagetool.@{prefix}-btn .@{prefix}-ico { + display: block; + width: 20px; + height: 20px; + text-align: center; + line-height: 20px; + font-size: 20px; + padding: 5px; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/InfoBox.less b/data/web/rc/program/js/tinymce/skins/lightgray/InfoBox.less new file mode 100644 index 00000000..3b46f50c --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/InfoBox.less @@ -0,0 +1,71 @@ +// InfoBox + +.@{prefix}-infobox { + .inline-block(); + text-shadow: @text-shadow; + overflow: hidden; + border: 1px solid red; + + div { + display: block; + margin: 5px; + + button { + position: absolute; + top: 50%; right: 4px; + cursor: pointer; + margin-top: -8px; + display: none; + } + + button:focus { + outline: 2px solid @btn-border-hover; + } + } +} + +.@{prefix}-infobox.@{prefix}-has-help { + div { + margin-right: 25px; + } + + button { + display: block; + } +} + +.@{prefix}-infobox.@{prefix}-success { + background: @infobox-success-bg; + border-color: @infobox-success-border; + + div { + color: @infobox-success-text; + } +} + +.@{prefix}-infobox.@{prefix}-warning { + background: @infobox-warning-bg; + border-color: @infobox-warning-border; + + div { + color: @infobox-warning-text; + } +} + +.@{prefix}-infobox.@{prefix}-error { + background: @infobox-error-bg; + border-color: @infobox-error-border; + + div { + color: @infobox-error-text; + } +} + +// RTL + +.@{prefix}-rtl .@{prefix}-infobox { + div { + text-align: right; + direction: rtl; + } +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Label.less b/data/web/rc/program/js/tinymce/skins/lightgray/Label.less new file mode 100644 index 00000000..08b35fd3 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Label.less @@ -0,0 +1,38 @@ +// Label + +.@{prefix}-label { + .inline-block(); + text-shadow: @text-shadow; + overflow: hidden; +} + +.@{prefix}-label.@{prefix}-autoscroll { + overflow: auto; +} + +.@{prefix}-label.@{prefix}-disabled { + color: @text-disabled; +} + +.@{prefix}-label.@{prefix}-multiline { + white-space: pre-wrap; +} + +.@{prefix}-label.@{prefix}-success { + color: @text-success; +} + +.@{prefix}-label.@{prefix}-warning { + color: @text-warning; +} + +.@{prefix}-label.@{prefix}-error { + color: @text-error; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-label { + text-align: right; + direction: rtl; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/ListBox.less b/data/web/rc/program/js/tinymce/skins/lightgray/ListBox.less new file mode 100644 index 00000000..23c7fa4d --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/ListBox.less @@ -0,0 +1,26 @@ +// ListBox + +.@{prefix}-listbox button { + text-align: left; + padding-right: 20px; + position: relative; +} + +.@{prefix}-listbox .@{prefix}-caret { + position: absolute; + margin-top: -2px; + right: 8px; + top: 50%; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-listbox .@{prefix}-caret { + right: auto; + left: 8px; +} + +.@{prefix}-rtl .@{prefix}-listbox button { + padding-right: 10px; + padding-left: 20px; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Menu.less b/data/web/rc/program/js/tinymce/skins/lightgray/Menu.less new file mode 100644 index 00000000..9c3cfd4f --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Menu.less @@ -0,0 +1,34 @@ +// Menu + +.@{prefix}-menu { + position: absolute; + left: 0; top: 0; + .reset-gradient(); + z-index: 1000; + padding: 5px 0 5px 0; + margin: @menu-margin; + min-width: 160px; + background: @menu-bg; + border: 1px solid mix(rgb(red(@menu-border), green(@menu-border), blue(@menu-border)), @panel-bg, round(alpha(@menu-border) * 200)); + border: 1px solid @menu-border; + z-index: 1002; + .border-radius(6px); + .box-shadow(0 5px 10px rgba(0,0,0,.2)); + max-height: 400px; + overflow: auto; + overflow-x: hidden; +} + +.@{prefix}-menu i { + display: none; +} + +.@{prefix}-menu-has-icons i { + display: inline-block; + *display: inline; +} + +.@{prefix}-menu-sub-tr-tl { margin: -6px 0 0 -1px; } +.@{prefix}-menu-sub-br-bl { margin: 6px 0 0 -1px; } +.@{prefix}-menu-sub-tl-tr { margin: -6px 0 0 1px; } +.@{prefix}-menu-sub-bl-br { margin: 6px 0 0 1px; } diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/MenuBar.less b/data/web/rc/program/js/tinymce/skins/lightgray/MenuBar.less new file mode 100644 index 00000000..8bed61e3 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/MenuBar.less @@ -0,0 +1,32 @@ +/* MenuBar */ + +.@{prefix}-menubar .@{prefix}-menubtn { + border-color: transparent; + background: transparent; + .border-radius(0); + .box-shadow(none); + filter: none; +} + +.@{prefix}-menubar .@{prefix}-menubtn button { + color: @menubar-menubtn-text; +} + +.@{prefix}-menubar { + border: 1px solid @menubar-border; +} + +.@{prefix}-menubar .@{prefix}-menubtn button span { + color: @text; +} + +.@{prefix}-menubar .@{prefix}-caret { + border-top-color: @text; +} + +.@{prefix}-menubar .@{prefix}-menubtn:hover, .@{prefix}-menubar .@{prefix}-menubtn.@{prefix}-active, .@{prefix}-menubar .@{prefix}-menubtn:focus { + border-color: darken(@btn-bg, 20%); + background: @menu-bg; + filter: none; + .box-shadow(none); +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/MenuButton.less b/data/web/rc/program/js/tinymce/skins/lightgray/MenuButton.less new file mode 100644 index 00000000..5ca3491c --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/MenuButton.less @@ -0,0 +1,34 @@ +/* MenuButton */ + +.@{prefix}-menubtn button { + color: @btn-text; + //margin-right: 2px; + //line-height: @line-height; + //*line-height: @line-height - 4px; +} + +.@{prefix}-menubtn.@{prefix}-btn-small span { + font-size: @font-size - 2px; +} + +.@{prefix}-menubtn.@{prefix}-fixed-width span { + display: inline-block; + overflow-x: hidden; + text-overflow: ellipsis; + width: 90px; +} + +.@{prefix}-menubtn.@{prefix}-fixed-width.@{prefix}-btn-small span { + width: 70px; +} + +.@{prefix}-menubtn .@{prefix}-caret { + *margin-top: 6px; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-menubtn button { + direction: rtl; + text-align: right; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/MenuItem.less b/data/web/rc/program/js/tinymce/skins/lightgray/MenuItem.less new file mode 100644 index 00000000..54e1d915 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/MenuItem.less @@ -0,0 +1,176 @@ +// MenuItem + +.@{prefix}-menu-item { + display: block; + padding: 6px 15px 6px 12px; + clear: both; + font-weight: normal; + line-height: 20px; + color: @menuitem-text; + white-space: nowrap; + cursor: pointer; + line-height: normal; + border-left: 4px solid transparent; + margin-bottom: 1px; +} + +.@{prefix}-menu-item .@{prefix}-ico, .@{prefix}-menu-item .@{prefix}-text { + color: @menuitem-text; +} + +.@{prefix}-menu-item.@{prefix}-disabled .@{prefix}-text, .@{prefix}-menu-item.@{prefix}-disabled .@{prefix}-ico { + color: mix(@menuitem-text, @menu-bg, 40%); +} + +.@{prefix}-menu-item:hover .@{prefix}-text, .@{prefix}-menu-item.@{prefix}-selected .@{prefix}-text, .@{prefix}-menu-item:focus .@{prefix}-text { + color: @menuitem-text-inverse; +} + +.@{prefix}-menu-item:hover .@{prefix}-ico, .@{prefix}-menu-item.@{prefix}-selected .@{prefix}-ico, .@{prefix}-menu-item:focus .@{prefix}-ico { + color: @menuitem-text-inverse; +} + +.@{prefix}-menu-item.@{prefix}-disabled:hover { + background: @menuitem-bg-disabled; +} + +.@{prefix}-menu-shortcut { + display: inline-block; + color: mix(@menuitem-text, @menu-bg, 40%); +} + +.@{prefix}-menu-shortcut { + .inline-block(); + padding: 0 15px 0 20px; +} + +.@{prefix}-menu-item:hover .@{prefix}-menu-shortcut, .@{prefix}-menu-item.@{prefix}-selected .@{prefix}-menu-shortcut, .@{prefix}-menu-item:focus .@{prefix}-menu-shortcut { + color: @menuitem-text-inverse; +} + +.@{prefix}-menu-item .@{prefix}-caret { + margin-top: 4px; + *margin-top: 3px; + margin-right: 6px; + border-top: 4px solid transparent; + border-bottom: 4px solid transparent; + border-left: 4px solid @menuitem-caret; +} + +.@{prefix}-menu-item.@{prefix}-selected .@{prefix}-caret, .@{prefix}-menu-item:focus .@{prefix}-caret, .@{prefix}-menu-item:hover .@{prefix}-caret { + border-left-color: @menuitem-caret-selected; +} + +.@{prefix}-menu-align .@{prefix}-menu-shortcut { + *margin-top: -2px; +} + +.@{prefix}-menu-align .@{prefix}-menu-shortcut, .@{prefix}-menu-align .@{prefix}-caret { + position: absolute; + right: 0; +} + +.@{prefix}-menu-item.@{prefix}-active i { + visibility: visible; +} + +.@{prefix}-menu-item-normal.@{prefix}-active { + background-color: @menuitem-bg-active; +} + +.@{prefix}-menu-item-preview.@{prefix}-active { + border-left: 5px solid @menuitem-preview-border-active; +} + +.@{prefix}-menu-item-normal.@{prefix}-active .@{prefix}-text { + color: @menuitem-text-active; +} + +.@{prefix}-menu-item-normal.@{prefix}-active:hover .@{prefix}-text, .@{prefix}-menu-item-normal.@{prefix}-active:hover .@{prefix}-ico { + color: @menuitem-text-inverse; +} + +.@{prefix}-menu-item-normal.@{prefix}-active:focus .@{prefix}-text, .@{prefix}-menu-item-normal.@{prefix}-active:focus .@{prefix}-ico { + color: @menuitem-text-inverse; +} + +.@{prefix}-menu-item:hover, .@{prefix}-menu-item.@{prefix}-selected, .@{prefix}-menu-item:focus { + text-decoration: none; + color: @menuitem-text-inverse; + .vertical-gradient(@menuitem-bg-selected, @menuitem-bg-selected-hlight); +} + +.@{prefix}-menu-item-link { + color: #093; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + b { + color: #093; + } +} + +.@{prefix}-menu-item-ellipsis { + display: block; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.@{prefix}-menu-item:hover *, .@{prefix}-menu-item.@{prefix}-selected *, .@{prefix}-menu-item:focus * { + color: @menuitem-text-inverse; +} + +div.@{prefix}-menu .@{prefix}-menu-item-sep, .@{prefix}-menu-item-sep:hover { + border: 0; + padding: 0; + height: 1px; + margin: 9px 1px; + overflow: hidden; + background: @menuitem-separator-top; + border-bottom: 1px solid @menuitem-separator-bottom; + cursor: default; + filter: none; +} + +div.@{prefix}-menu .@{prefix}-menu-item b { + font-weight: bold; +} + +.@{prefix}-menu-item-indent-1 { padding-left: 20px; } +.@{prefix}-menu-item-indent-2 { padding-left: 35px; } +.@{prefix}-menu-item-indent-2 { padding-left: 35px; } +.@{prefix}-menu-item-indent-3 { padding-left: 40px; } +.@{prefix}-menu-item-indent-4 { padding-left: 45px; } +.@{prefix}-menu-item-indent-5 { padding-left: 50px; } +.@{prefix}-menu-item-indent-6 { padding-left: 55px; } + +// RTL + +.@{prefix}-menu.@{prefix}-rtl { + direction: rtl; +} + +.@{prefix}-rtl .@{prefix}-menu-item { + text-align: right; + direction: rtl; + padding: 6px 12px 6px 15px; +} + +.@{prefix}-menu-align.@{prefix}-rtl .@{prefix}-menu-shortcut, .@{prefix}-menu-align.@{prefix}-rtl .@{prefix}-caret { + right: auto; + left: 0; +} + +.@{prefix}-rtl .@{prefix}-menu-item .@{prefix}-caret { + margin-left: 6px; + margin-right: 0; + border-right: 4px solid @menuitem-caret; + border-left: 0; +} + +.@{prefix}-rtl .@{prefix}-menu-item.@{prefix}-selected .@{prefix}-caret, .@{prefix}-rtl .@{prefix}-menu-item:focus .@{prefix}-caret, .@{prefix}-rtl .@{prefix}-menu-item:hover .@{prefix}-caret { + border-left-color: transparent; + border-right-color: @menuitem-caret-selected; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Mixins.less b/data/web/rc/program/js/tinymce/skins/lightgray/Mixins.less new file mode 100644 index 00000000..6357ca45 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Mixins.less @@ -0,0 +1,54 @@ +// Mixins + +.opacity(@opacity) { + opacity: @opacity; + @opacityie: @opacity * 100; + filter: ~"alpha(opacity=@{opacityie})"; + zoom: 1; +} + +.vertical-gradient(@startColor, @endColor) when (@has-gradients = true) { + background-color: mix(@startColor, @endColor, 60%); + background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+ + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+ + background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+ + background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10 + background-image: linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10 + background-repeat: repeat-x; + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)", argb(@startColor), argb(@endColor))); + zoom: 1; +} + +.vertical-gradient(@startColor, @endColor) when (@has-gradients = false) { + background-color: mix(@startColor, @endColor, 60%); +} + +.border-radius(@radius) when (@has-radius = true) { + -webkit-border-radius: @radius; + -moz-border-radius: @radius; + border-radius: @radius; +} + +.box-shadow(@shadowA, @shadowB:X, ...) when (@has-boxshadow = true) { + // Multiple shadow solution from http://toekneestuck.com/blog/2012/05/15/less-css-arguments-variable/ + @props: ~`"@{arguments}".replace(/[\[\]]|\,\sX/g, '')`; + -webkit-box-shadow: @props; + -moz-box-shadow: @props; + box-shadow: @props; +} + +.transition(@transition) { + -webkit-transition: @transition; + transition: @transition; +} + +.inline-block() { + display: inline-block; + *display: inline; + *zoom: 1; +} + +.reset-gradient() { + filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); + background: transparent; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Notification.less b/data/web/rc/program/js/tinymce/skins/lightgray/Notification.less new file mode 100644 index 00000000..017a4429 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Notification.less @@ -0,0 +1,142 @@ +// notification + +.@{prefix}-notification { + position: absolute; + background-color: @notification-bg; + padding: 5px; + margin-top: 5px; + border-width: 1px; + border-style: solid; + border-color: @notification-border; + transition: transform 100ms ease-in, opacity 150ms ease-in; + opacity: 0; +} + +.@{prefix}-notification.@{prefix}-in { + opacity: 1; +} + +.@{prefix}-notification-success { + background-color: @notification-success-bg; + border-color: @notification-success-border; +} + +.@{prefix}-notification-info { + background-color: @notification-info-bg; + border-color: @notification-info-border; +} + +.@{prefix}-notification-warning { + background-color: @notification-warning-bg; + border-color: @notification-warning-border; +} + +.@{prefix}-notification-error { + background-color: @notification-error-bg; + border-color: @notification-error-border; +} + +.@{prefix}-notification.@{prefix}-has-close { + padding-right: 15px; +} + +.@{prefix}-notification .@{prefix}-ico { + margin-top: 5px; +} + +.@{prefix}-notification-inner { + display: inline-block; + font-size: @notification-font-size; + margin: 5px 8px 4px 8px; + text-align: center; + white-space: normal; + color: @notification-info-text; +} + +.@{prefix}-notification-inner a { + text-decoration: underline; + cursor: pointer; +} + +.@{prefix}-notification .@{prefix}-progress { + margin-right: 8px; +} + +.@{prefix}-notification .@{prefix}-progress .@{prefix}-text { + margin-top: 5px; +} + +.@{prefix}-notification *, .@{prefix}-notification .@{prefix}-progress .@{prefix}-text { + color: @notification-text; +} + +.@{prefix}-notification .@{prefix}-progress .@{prefix}-bar-container { + border-color: @notification-border; +} + +.@{prefix}-notification .@{prefix}-progress .@{prefix}-bar-container .@{prefix}-bar { + background-color: @notification-text; +} + +.@{prefix}-notification-success *, .@{prefix}-notification-success .@{prefix}-progress .@{prefix}-text { + color: @notification-success-text; +} + +.@{prefix}-notification-success .@{prefix}-progress .@{prefix}-bar-container { + border-color: @notification-success-border; +} + +.@{prefix}-notification-success .@{prefix}-progress .@{prefix}-bar-container .@{prefix}-bar { + background-color: @notification-success-text; +} + +.@{prefix}-notification-info *, .@{prefix}-notification-info .@{prefix}-progress .@{prefix}-text { + color: @notification-info-text; +} + +.@{prefix}-notification-info .@{prefix}-progress .@{prefix}-bar-container { + border-color: @notification-info-border; +} + +.@{prefix}-notification-info .@{prefix}-progress .@{prefix}-bar-container .@{prefix}-bar { + background-color: @notification-info-text; +} + +.@{prefix}-notification-warning *, .@{prefix}-notification-warning .@{prefix}-progress .@{prefix}-text { + color: @notification-warning-text; +} + +.@{prefix}-notification-warning .@{prefix}-progress .@{prefix}-bar-container { + border-color: @notification-warning-border; +} + +.@{prefix}-notification-warning .@{prefix}-progress .@{prefix}-bar-container .@{prefix}-bar { + background-color: @notification-warning-text; +} + +.@{prefix}-notification-error *, .@{prefix}-notification-error .@{prefix}-progress .@{prefix}-text { + color: @notification-error-text; +} + +.@{prefix}-notification-error .@{prefix}-progress .@{prefix}-bar-container { + border-color: @notification-error-border; +} + +.@{prefix}-notification-error .@{prefix}-progress .@{prefix}-bar-container .@{prefix}-bar { + background-color: @notification-error-text; +} + +.@{prefix}-notification .@{prefix}-close { + position: absolute; + top: 6px; + right: 8px; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: @window-head-close; + cursor: pointer; + + // IE7 + height: 20px; + overflow: hidden; +} \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Panel.less b/data/web/rc/program/js/tinymce/skins/lightgray/Panel.less new file mode 100644 index 00000000..5c425e97 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Panel.less @@ -0,0 +1,7 @@ +// Panel + +.@{prefix}-panel { + border: 0 solid mix(rgb(red(@panel-border), green(@panel-border), blue(@panel-border)), @panel-bg, 20%); + border: 0 solid @panel-border; + .vertical-gradient(@panel-bg, @panel-bg-hlight); +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Path.less b/data/web/rc/program/js/tinymce/skins/lightgray/Path.less new file mode 100644 index 00000000..04537cf6 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Path.less @@ -0,0 +1,45 @@ +// Path + +.@{prefix}-path { + .inline-block(); + padding: 8px; + white-space: normal; +} + +.@{prefix}-path .@{prefix}-txt { + display: inline-block; + padding-right: 3px; +} + +.@{prefix}-path .@{prefix}-path-body { + display: inline-block; +} + +.@{prefix}-path-item { + .inline-block(); + cursor: pointer; + color: @path-text; +} + +.@{prefix}-path-item:hover { + text-decoration: underline; +} + +.@{prefix}-path-item:focus { + background: @path-bg-focus; + color: @path-text-focus; +} + +.@{prefix}-path .@{prefix}-divider { + display: inline; +} + +.@{prefix}-disabled .@{prefix}-path-item { + color: @text-disabled; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-path { + direction: rtl; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Progress.less b/data/web/rc/program/js/tinymce/skins/lightgray/Progress.less new file mode 100644 index 00000000..ae68d29f --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Progress.less @@ -0,0 +1,34 @@ +// Progress + +.@{prefix}-progress { + display: inline-block; + position: relative; + height: 20px; +} + +.@{prefix}-progress .@{prefix}-bar-container { + display: inline-block; + width: 100px; + height: 100%; + margin-right: 8px; + border: 1px solid @progress-border; + overflow: hidden; + .border-radius(4px); +} + +.@{prefix}-progress .@{prefix}-text { + display: inline-block; + margin-top: auto; + margin-bottom: auto; + font-size: 14px; + width: 40px; + color: @progress-text; +} + +.@{prefix}-bar { + display: block; + width: 0%; + height: 100%; + .vertical-gradient(@progress-bar-bg, @progress-bar-bg-hlight); + .transition(width .2s ease); +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Radio.less b/data/web/rc/program/js/tinymce/skins/lightgray/Radio.less new file mode 100644 index 00000000..c32d8aa6 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Radio.less @@ -0,0 +1 @@ +// Radio - not implemented yet diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Reset.less b/data/web/rc/program/js/tinymce/skins/lightgray/Reset.less new file mode 100644 index 00000000..a2508419 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Reset.less @@ -0,0 +1,32 @@ +// Reset + +.@{prefix}-container, .@{prefix}-container *, .@{prefix}-widget, .@{prefix}-widget *, .@{prefix}-reset { + margin: 0; padding: 0; border: 0; outline: 0; + vertical-align: top; background: transparent; + text-decoration: none; color: @text; + font-family: @font-family; + font-size: @font-size; text-shadow: none; float: none; + position: static; width: auto; height: auto; + white-space: nowrap; cursor: inherit; + -webkit-tap-highlight-color: transparent; + line-height: normal; font-weight: normal; + text-align: left; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; + direction: ltr; + max-width: none; +} + +.@{prefix}-widget button { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.@{prefix}-container *[unselectable] { + -moz-user-select: none; + -webkit-user-select: none; + -o-user-select: none; + user-select: none; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/ResizeHandle.less b/data/web/rc/program/js/tinymce/skins/lightgray/ResizeHandle.less new file mode 100644 index 00000000..571f84d0 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/ResizeHandle.less @@ -0,0 +1,18 @@ +.@{prefix}-container-body .@{prefix}-resizehandle { + position: absolute; + right: 0; + bottom: 0; + width: 16px; + height: 16px; + visibility: visible; + cursor: s-resize; + margin: 0; +} + +.@{prefix}-container-body .@{prefix}-resizehandle-both { + cursor: se-resize; +} + +i.@{prefix}-i-resize { + color: @text; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Scrollable.less b/data/web/rc/program/js/tinymce/skins/lightgray/Scrollable.less new file mode 100644 index 00000000..1559fffe --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Scrollable.less @@ -0,0 +1,44 @@ +// Scrollbar + +.@{prefix}-scrollbar { + position: absolute; + width: 7px; + height: 100%; + top: 2px; + right: 2px; + .opacity(0.4); +} + +.@{prefix}-scrollbar-h { + top: auto; + right: auto; + left: 2px; + bottom: 2px; + width: 100%; + height: 7px; +} + +.@{prefix}-scrollbar-thumb { + position: absolute; + background-color: #000; + border: 1px solid #888; + border-color: rgba(85, 85, 85, .6); + width: 5px; + height: 100%; + .border-radius(7px); +} + +.@{prefix}-scrollbar-h .@{prefix}-scrollbar-thumb { + width: 100%; + height: 5px; +} + +.@{prefix}-scrollbar:hover, .@{prefix}-scrollbar.@{prefix}-active { + background-color: #AAA; + .opacity(0.6); + .border-radius(7px); +} + +.@{prefix}-scroll { + position: relative; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/SelectBox.less b/data/web/rc/program/js/tinymce/skins/lightgray/SelectBox.less new file mode 100644 index 00000000..972d7f5e --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/SelectBox.less @@ -0,0 +1,6 @@ +// SelectBox + +.@{prefix}-selectbox { + background: @selectbox-bg; + border: 1px solid @selectbox-border; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Sidebar.less b/data/web/rc/program/js/tinymce/skins/lightgray/Sidebar.less new file mode 100644 index 00000000..e9a616eb --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Sidebar.less @@ -0,0 +1,49 @@ +// Sidebar + +.@{prefix}-edit-aria-container > .@{prefix}-container-body { + display: flex; + + .@{prefix}-edit-area { + flex: 1; + } + + .@{prefix}-sidebar > .@{prefix}-container-body { + display: flex; + align-items: stretch; + height: 100%; + } + + .@{prefix}-sidebar-panel { + min-width: 250px; + max-width: 250px; + position: relative; + + > .@{prefix}-container-body { + position: absolute; + width: 100%; height: 100%; + overflow: auto; + top: 0; left: 0; + } + } +} + +.@{prefix}-sidebar-toolbar { + border: 0 solid @panel-border; + border-left-width: 1px; + + .@{prefix}-btn.@{prefix}-active, .@{prefix}-btn.@{prefix}-active:hover { + border: 1px solid transparent; + border-color: @btn-primary-border; + .vertical-gradient(@btn-primary-bg, @btn-primary-bg-hlight); + + button, button i { + color: @btn-primary-text; + text-shadow: 1px 1px @btn-primary-text-shadow; + } + } +} + +.@{prefix}-sidebar-panel { + border: 0 solid @panel-border; + border-left-width: 1px; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Slider.less b/data/web/rc/program/js/tinymce/skins/lightgray/Slider.less new file mode 100644 index 00000000..7d08895d --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Slider.less @@ -0,0 +1,33 @@ +// Slider + +.@{prefix}-slider { + .border-radius(3px); + border: 1px solid @slider-border; + background: @slider-bg; + width: 100px; + height: 10px; + position: relative; + display: block; +} + +.@{prefix}-slider.@{prefix}-vertical { + width: 10px; + height: 100px; +} + +.@{prefix}-slider-handle { + .border-radius(3px); + border: 1px solid @slider-handle-border; + background: @slider-handle-bg; + display: block; + width: 13px; + height: 13px; + position: absolute; + top: 0; left: 0; + margin-left: -1px; + margin-top: -2px; +} + +.@{prefix}-slider-handle:focus { + background: @slider-handle-bg-focus; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Spacer.less b/data/web/rc/program/js/tinymce/skins/lightgray/Spacer.less new file mode 100644 index 00000000..1788fe38 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Spacer.less @@ -0,0 +1,5 @@ +// Spacer + +.@{prefix}-spacer { + visibility: hidden; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/SplitButton.less b/data/web/rc/program/js/tinymce/skins/lightgray/SplitButton.less new file mode 100644 index 00000000..e4094b37 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/SplitButton.less @@ -0,0 +1,49 @@ +// SplitButton + +.@{prefix}-splitbtn .@{prefix}-open { + border-left: 1px solid transparent; +} + +.@{prefix}-splitbtn:hover .@{prefix}-open { + border-left-color: darken(@btn-bg, 20%); +} + +.@{prefix}-splitbtn button when (@has-button-borders = false) { + padding-right: 6px; + padding-left: 6px; +} + +.@{prefix}-splitbtn button when (@has-button-borders = true) { + padding-right: 4px; + padding-left: 8px; +} + +.@{prefix}-splitbtn .@{prefix}-open { + padding-right: 4px; + padding-left: 4px; +} + +.@{prefix}-splitbtn .@{prefix}-open.@{prefix}-active { + .vertical-gradient(darken(@btn-bg, 10%), darken(@btn-bg-hlight, 5%)); + outline: 1px solid darken(@btn-bg, 20%); +} + +.@{prefix}-splitbtn.@{prefix}-btn-small .@{prefix}-open { + padding: 0 3px 0 3px; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-splitbtn { + direction: rtl; + text-align: right; +} + +.@{prefix}-rtl .@{prefix}-splitbtn button { + padding-right: 4px; + padding-left: 4px; +} + +.@{prefix}-rtl .@{prefix}-splitbtn .@{prefix}-open { + border-left: 0; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/StackLayout.less b/data/web/rc/program/js/tinymce/skins/lightgray/StackLayout.less new file mode 100644 index 00000000..71c87324 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/StackLayout.less @@ -0,0 +1,5 @@ +// StackLayout + +.@{prefix}-stack-layout-item { + display: block; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/TabPanel.less b/data/web/rc/program/js/tinymce/skins/lightgray/TabPanel.less new file mode 100644 index 00000000..2a6ad351 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/TabPanel.less @@ -0,0 +1,44 @@ +// TabPanel + +.@{prefix}-tabs { + display: block; + border-bottom: 1px solid @tab-border; +} + +.@{prefix}-tabs, +.@{prefix}-tabs + .@{prefix}-container-body { + background: @tabs-bg; +} + +.@{prefix}-tab { + .inline-block(); + border: 1px solid @tab-border; + border-width: 0 1px 0 0; + background: @tab-bg; + padding: 8px; + text-shadow: @text-shadow; + height: 13px; + cursor: pointer; +} + +.@{prefix}-tab:hover { + background: @tab-bg-hover; +} + +.@{prefix}-tab.@{prefix}-active { + background: @tab-bg-active; + border-bottom-color: transparent; + margin-bottom: -1px; + height: 14px; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-tabs { + text-align: right; + direction: rtl; +} + +.@{prefix}-rtl .@{prefix}-tab { + border-width: 0 0 0 1px; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/TextBox.less b/data/web/rc/program/js/tinymce/skins/lightgray/TextBox.less new file mode 100644 index 00000000..f783460f --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/TextBox.less @@ -0,0 +1,41 @@ +// TextBox + +.@{prefix}-textbox { + background: @textbox-bg; + border: 1px solid @textbox-border; + .border-radius(3px); + .box-shadow(@textbox-box-shadow); + display: inline-block; + .transition(~"border linear .2s, box-shadow linear .2s"); + height: 28px; + resize: none; + padding: 0 4px 0 4px; + white-space: pre-wrap; + *white-space: pre; + color: @text; +} + +.@{prefix}-textbox:focus, .@{prefix}-textbox.@{prefix}-focus { + border-color: @textbox-border-focus; + .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px fadeout(@textbox-border-focus, 15%)); +} + +.@{prefix}-placeholder .@{prefix}-textbox { + color: @textbox-text-placeholder; +} + +.@{prefix}-textbox.@{prefix}-multiline { + padding: 4px; + height: auto; +} + +.@{prefix}-textbox.@{prefix}-disabled { + color: mix(@text, @textbox-bg, 40%); +} + +// RTL + +.@{prefix}-rtl .@{prefix}-textbox { + text-align: right; + direction: rtl; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Throbber.less b/data/web/rc/program/js/tinymce/skins/lightgray/Throbber.less new file mode 100644 index 00000000..6329c813 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Throbber.less @@ -0,0 +1,19 @@ +// Throbber + +.@{prefix}-throbber { + position: absolute; + top: 0; left: 0; + width: 100%; height: 100%; + .opacity(0.6); + background: @throbber-bg; +} + +.@{prefix}-throbber-inline { + position: static; + height: 50px; +} + +.@{prefix}-menu .@{prefix}-throbber-inline { + height: 25px; + background-size: contain; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/TinyMCE.less b/data/web/rc/program/js/tinymce/skins/lightgray/TinyMCE.less new file mode 100644 index 00000000..aad8584e --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/TinyMCE.less @@ -0,0 +1,159 @@ +.@{prefix}-tinymce { + // Avoid FOUC + visibility: inherit !important; + position: relative; +} + +.@{prefix}-fullscreen { + border: 0; padding: 0; margin: 0; + overflow: hidden; + height: 100%; + z-index: 100; +} + +div.@{prefix}-fullscreen { + position: fixed; + top: 0; left: 0; + width: 100%; + height: auto; +} + +.@{prefix}-tinymce { + display: block; + .border-radius(2px); +} + +.@{prefix}-wordcount { + position: absolute; + top: 0; + right: 0; + padding: 8px; +} + +div.@{prefix}-edit-area { + background: #FFF; + filter: none; +} + +.@{prefix}-statusbar { + position: relative; +} + +.@{prefix}-statusbar .@{prefix}-container-body { + position: relative; +} + +.@{prefix}-fullscreen .@{prefix}-resizehandle { + display: none; +} + +// Charmap + +.@{prefix}-charmap { + border-collapse: collapse; +} + +.@{prefix}-charmap td { + cursor: default; + border: 1px solid @panel-border; + width: 20px; + height: 20px; + line-height: 20px; + text-align: center; + vertical-align: middle; + padding: 2px; +} + +.@{prefix}-charmap td div { + text-align: center; +} + +.@{prefix}-charmap td:hover { + background: @btn-bg-hlight; +} + +.@{prefix}-grid td.@{prefix}-grid-cell div { + border: 1px solid @grid-border; + width: 15px; height: 15px; + margin: 0px; + cursor: pointer; + + &:focus { + border-color: @grid-border-active; + } + + &[disabled] { + cursor: not-allowed; + } +} + +.@{prefix}-grid { + border-spacing: 2px; + border-collapse: separate; + + a { + display: block; + border: 1px solid transparent; + + &:hover, &:focus { + border-color: @grid-border-active; + } + } +} + +.@{prefix}-grid-border { + margin: 0 4px 0 4px; + + a { + border-color: @grid-border; + width: 13px; height: 13px; + } + + a:hover, a.@{prefix}-active { + border-color: @grid-border-active; + background: @grid-bg-active; + } +} + +.@{prefix}-text-center { + text-align: center; +} + +div.@{prefix}-tinymce-inline { + width: 100%; + .box-shadow(none); +} + +.@{prefix}-colorbtn-trans div { + text-align: center; + vertical-align: middle; + font-weight: bold; + font-size: 20px; + line-height: 16px; + color: mix(@text, #fff, 70%); +} + +.@{prefix}-monospace { + font-family: "Courier New", Courier, monospace; +} + +// Reduce double margins between toolbar rows + +.@{prefix}-toolbar-grp when (@has-button-borders = false) { + padding: @flow-layout-spacing 0; +} + +.@{prefix}-toolbar-grp when (@has-button-borders = true) { + padding-bottom: 2px; +} + +.@{prefix}-toolbar-grp .@{prefix}-flow-layout-item { + margin-bottom: 0; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-wordcount { + left: 0; + right: auto; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/ToolTip.less b/data/web/rc/program/js/tinymce/skins/lightgray/ToolTip.less new file mode 100644 index 00000000..92d64f1a --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/ToolTip.less @@ -0,0 +1,133 @@ +// Tooltip + +.@{prefix}-tooltip { + position: absolute; + padding: 5px; + .opacity(0.8); +} + +.@{prefix}-tooltip-inner { + font-size: @tooltip-font-size; + background-color: @tooltip-bg; + color: @tooltip-text; + max-width: 200px; + padding: 5px 8px 4px 8px; + text-align: center; + white-space: normal; +} + +.@{prefix}-tooltip-inner { + .border-radius(3px); +} + +.@{prefix}-tooltip-inner { + .box-shadow(0 0 5px @tooltip-bg); +} + +.@{prefix}-tooltip-arrow { + position: absolute; + width: 0; + height: 0; + line-height: 0; + border: 5px dashed @tooltip-bg; +} + +.@{prefix}-tooltip-arrow-n { + border-bottom-color: @tooltip-bg; +} + +.@{prefix}-tooltip-arrow-s { + border-top-color: @tooltip-bg; +} + +.@{prefix}-tooltip-arrow-e { + border-left-color: @tooltip-bg; +} + +.@{prefix}-tooltip-arrow-w { + border-right-color: @tooltip-bg; +} + +.@{prefix}-tooltip-nw, .@{prefix}-tooltip-sw { + margin-left: -14px; +} + +.@{prefix}-tooltip-ne, .@{prefix}-tooltip-se { + margin-left: 14px; +} + +.@{prefix}-tooltip-n .@{prefix}-tooltip-arrow { + top: 0px; + left: 50%; + margin-left: -5px; + border-bottom-style: solid; + border-top: none; + border-left-color: transparent; + border-right-color: transparent; +} + +.@{prefix}-tooltip-nw .@{prefix}-tooltip-arrow { + top: 0; + left: 10px; + border-bottom-style: solid; + border-top: none; + border-left-color: transparent; + border-right-color: transparent; +} + +.@{prefix}-tooltip-ne .@{prefix}-tooltip-arrow { + top: 0; + right: 10px; + border-bottom-style: solid; + border-top: none; + border-left-color: transparent; + border-right-color: transparent; +} + +.@{prefix}-tooltip-s .@{prefix}-tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-style: solid; + border-bottom: none; + border-left-color: transparent; + border-right-color: transparent; +} + +.@{prefix}-tooltip-sw .@{prefix}-tooltip-arrow { + bottom: 0; + left: 10px; + border-top-style: solid; + border-bottom: none; + border-left-color: transparent; + border-right-color: transparent; +} + +.@{prefix}-tooltip-se .@{prefix}-tooltip-arrow { + bottom: 0; + right: 10px; + border-top-style: solid; + border-bottom: none; + border-left-color: transparent; + border-right-color: transparent; +} + +.@{prefix}-tooltip-e .@{prefix}-tooltip-arrow { + right: 0; + top: 50%; + margin-top: -5px; + border-left-style: solid; + border-right: none; + border-top-color: transparent; + border-bottom-color: transparent; +} + +.@{prefix}-tooltip-w .@{prefix}-tooltip-arrow { + left: 0; + top: 50%; + margin-top: -5px; + border-right-style: solid; + border-left: none; + border-top-color: transparent; + border-bottom-color: transparent; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Variables.less b/data/web/rc/program/js/tinymce/skins/lightgray/Variables.less new file mode 100644 index 00000000..66834d3e --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Variables.less @@ -0,0 +1,218 @@ +// Variables +// Syntax: -()--()-(); +// Example: @btn-primary-bg-hover-hlight; + +@prefix: mce; + +// Default font +@font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +@font-size: 14px; +@line-height: 20px; +@has-gradients: false; +@has-radius: false; +@has-boxshadow: false; +@has-button-borders: false; + +// Text colors +@text: #333; +@text-inverse: white; +@text-disabled: #aaa; +@text-shadow: 0 1px 1px hsla(hue(@text-inverse), saturation(@text-inverse), lightness(@text-inverse), 0.75); +@text-error: #b94a48; +@text-warning: #c09853; +@text-success: #468847; + +// Button +@btn-text: @text; +@btn-text-shadow: none; +@btn-border-top: transparent; +@btn-border-right: transparent; +@btn-border-bottom: transparent; +@btn-border-left: transparent; +@btn-caret-border: @btn-text; +@btn-text-disabled: @text-disabled; +@btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05); +@btn-box-shadow-active: inset 0 2px 4px rgba(0, 0, 0, .15), 0 1px 2px rgba(0, 0, 0, .05); +@btn-box-disabled-opacity: 0.4; +@btn-bg: white; +@btn-bg-hlight: #D9D9D9; +@btn-bg-hover: darken(@btn-bg, 5%); +@btn-bg-hlight-hover: darken(@btn-bg-hlight, 5%); +@btn-border-hover: darken(@btn-bg, 20%); +@btn-border-active: darken(@btn-bg, 20%); +@btn-padding: 4px 8px; + +@btn-primary-bg: #2980b9; +@btn-primary-bg-hlight: #3498db; +@btn-primary-bg-hover: darken(@btn-primary-bg, 5%); +@btn-primary-bg-hover-hlight: darken(@btn-primary-bg-hlight, 5%); +@btn-primary-text: #fff; +@btn-primary-text-shadow: none; +@btn-primary-border-top: mix(@btn-border-top, @btn-primary-bg, 50%); +@btn-primary-border-right: mix(@btn-border-right, @btn-primary-bg, 50%); +@btn-primary-border-bottom: mix(@btn-border-bottom, @btn-primary-bg, 50%); +@btn-primary-border-left: mix(@btn-border-left, @btn-primary-bg, 50%); +@btn-primary-border: transparent; +@btn-primary-border-hover: transparent; + +// Button group +@btn-group-border-width: 1px; + +// Menu +@menuitem-text: @text; +@menu-bg: #fff; +@menu-margin: -1px 0 0; +@menu-border: rgba(0, 0, 0, 0.2); +@menubar-border: mix(@panel-border, @panel-bg, 60%); +@menuitem-text-inverse: @text-inverse; +@menubar-bg-active: darken(@btn-bg, 10%); +@menuitem-bg-hover: #0081C2; +@menuitem-bg-selected: #2980b9; +@menuitem-bg-selected-hlight: #3498db; +@menuitem-bg-disabled: #CCC; +@menuitem-caret: @menuitem-text; +@menuitem-caret-selected: @menuitem-text-inverse; +@menuitem-separator-top: transparent; +@menuitem-separator-bottom: rgba(0,0,0,0.1); +@menuitem-bg-active: #3498db; +@menuitem-text-active: @text-inverse; +@menuitem-preview-border-active: #aaa; +@menubar-menubtn-text: #333; + +// Panel +@panel-border: rgba(0,0,0,.2); +@panel-bg: #FDFDFD; +@panel-bg-hlight: #DDD; + +// Tabs +@tab-border: #c5c5c5; +@tab-bg: #ffffff; +@tab-bg-hover: #FDFDFD; +@tab-bg-active: #FDFDFD; +@tabs-bg: #FFF; + +// Tooltip +@tooltip-bg: #000; +@tooltip-text: white; +@tooltip-font-size: 11px; + +// Notification +@notification-font-size: 14px; +@notification-bg: #F0F0F0; +@notification-border: #CCCCCC; +@notification-text: #333333; +@notification-success-bg: #dff0d8; +@notification-success-border: #d6e9c6; +@notification-success-text: #3c763d; +@notification-info-bg: #d9edf7; +@notification-info-border: #779ECB; +@notification-info-text: #31708f; +@notification-warning-bg: #fcf8e3; +@notification-warning-border: #faebcc; +@notification-warning-text: #8a6d3b; +@notification-error-bg: #f2dede; +@notification-error-border: #ebccd1; +@notification-error-text: #a94442; + +// Infobox +@infobox-bg: @notification-bg; +@infobox-border: @notification-border; +@infobox-text: @notification-text; +@infobox-success-bg: @notification-success-bg; +@infobox-success-border: @notification-success-border; +@infobox-success-text: @notification-success-text; +@infobox-info-bg: @notification-info-bg; +@infobox-info-border: @notification-info-border; +@infobox-info-text: @notification-info-text; +@infobox-warning-bg: @notification-warning-bg; +@infobox-warning-border: @notification-warning-border; +@infobox-warning-text: @notification-warning-text; +@infobox-error-bg: @notification-error-bg; +@infobox-error-border: @notification-error-border; +@infobox-error-text: @notification-error-text; + +// Window +@window-border: #c5c5c5; +@window-head-border: @window-border; +@window-head-close: mix(@text, @window-bg, 60%); +@window-head-close-hover: mix(@text, @window-bg, 40%); +@window-foot-border: @window-border; +@window-foot-bg: @window-bg; +@window-fullscreen-bg: #FFF; +@window-modalblock-bg: #000; +@window-modalblock-opacity: 0.3; +@window-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +@window-bg: #FFF; +@window-title-font-size: 20px; + +// Popover +@popover-bg: @window-bg; +@popover-arrow-width: 10px; +@popover-arrow: @window-bg; +@popover-arrow-outer-width: @popover-arrow-width + 1; +@popover-arrow-outer: rgba(0, 0, 0, 0.25); + +// Floatpanel +@floatpanel-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + +// Checkbox +@checkbox-bg: @btn-bg; +@checkbox-bg-hlight: @btn-bg-hlight; +@checkbox-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05); +@checkbox-border: #c5c5c5; +@checkbox-border-focus: rgba(82, 168, 236, .8); + +// Path +@path-text: @text; +@path-bg-focus: #666; +@path-text-focus: #fff; + +// Textbox +@textbox-text-placeholder: #aaa; +@textbox-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +@textbox-bg: #fff; +@textbox-border: #c5c5c5; +@textbox-border-focus: #3498db; + +// Selectbox +@selectbox-bg: @textbox-bg; +@selectbox-border: @textbox-border; + +// Throbber +@throbber-bg: #fff url('img/loader.gif') no-repeat center center; + +// Combobox +@combobox-border: @textbox-border; +@combobox-error-text: @text-error; +@combobox-warning-text: @text-warning; +@combobox-success-text: @text-success; + +// Colorpicker +@colorpicker-border: @textbox-border; +@colorpicker-hue-bg: #fff; +@colorpicker-hue-border: #333; + +// Grid +@grid-bg-active: @menuitem-bg-active; +@grid-border-active: @menuitem-bg-active; +@grid-border: #d6d6d6; + +// Misc +@colorbtn-backcolor-bg: #BBB; +@iframe-border: @panel-border; + +// Slider +@slider-border: #AAA; +@slider-bg: #EEE; +@slider-handle-border: #BBB; +@slider-handle-bg: #DDD; +@slider-handle-bg-focus: #BBB; + +// Progress +@progress-border: #ccc; +@progress-bar-bg: #dfdfdf; +@progress-bar-bg-hlight: #cccccc; +@progress-text: @text; + +// Flow layout +@flow-layout-spacing: 2px; diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/Window.less b/data/web/rc/program/js/tinymce/skins/lightgray/Window.less new file mode 100644 index 00000000..45fcf0b3 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/Window.less @@ -0,0 +1,127 @@ +// Window + +.@{prefix}-fullscreen { + border: 0; padding: 0; margin: 0; + overflow: hidden; + height: 100%; +} + +div.@{prefix}-fullscreen { + position: fixed; + top: 0; left: 0; +} + +#@{prefix}-modal-block { + .opacity(0); + position: fixed; + left: 0; top: 0; + width: 100%; height: 100%; + background: @window-modalblock-bg; +} + +#@{prefix}-modal-block.@{prefix}-in { + .opacity(@window-modalblock-opacity); +} + +.@{prefix}-window-move { + cursor: move; +} + +.@{prefix}-window { + .border-radius(6px); + .box-shadow(@window-box-shadow); + .reset-gradient(); + background: @window-bg; + position: fixed; + top: 0; left: 0; + opacity: 0; + transform: scale(0.1); + transition: transform 100ms ease-in, opacity 150ms ease-in; +} + +.@{prefix}-window.@{prefix}-in { + transform: scale(1); + opacity: 1; +} + +.@{prefix}-window-head { + padding: 9px 15px; + border-bottom: 1px solid @window-head-border; + position: relative; +} + +.@{prefix}-window-head .@{prefix}-close { + position: absolute; + right: 0; + top: 0; + height: 38px; + width: 38px; + text-align: center; + cursor: pointer; + + i { + color: @window-head-close; + } +} + +.@{prefix}-close:hover i { + color: @window-head-close-hover; +} + +.@{prefix}-window-head .@{prefix}-title { + line-height: 20px; + font-size: @window-title-font-size; + font-weight: bold; + text-rendering: optimizelegibility; + padding-right: 20px; +} + +.@{prefix}-window .@{prefix}-container-body { + display: block; +} + +.@{prefix}-foot { + display: block; + background-color: @window-foot-bg; + border-top: 1px solid @window-foot-border; + .border-radius(0 0 6px 6px); +} + +.@{prefix}-window-head .@{prefix}-dragh { + position: absolute; + top: 0; left: 0; + cursor: move; + width: 90%; + height: 100%; +} + +.@{prefix}-window iframe { + width: 100%; + height: 100%; +} + +.@{prefix}-window.@{prefix}-fullscreen, .@{prefix}-window.@{prefix}-fullscreen .@{prefix}-foot { + .border-radius(0); +} + +.@{prefix}-window-body .@{prefix}-listbox { + border-color: @btn-border-hover; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-window-head .@{prefix}-close { + position: absolute; + right: auto; + left: 15px; +} + +.@{prefix}-rtl .@{prefix}-window-head .@{prefix}-dragh { + left: auto; + right: 0; +} + +.@{prefix}-rtl .@{prefix}-window-head .@{prefix}-title { + direction: rtl; + text-align: right; +} diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/content.inline.min.css b/data/web/rc/program/js/tinymce/skins/lightgray/content.inline.min.css new file mode 100644 index 00000000..61ad7cb9 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/content.inline.min.css @@ -0,0 +1 @@ +.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2d8ac7}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #7ACAFF}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2d8ac7}.mce-resize-bar-dragging{background-color:blue;opacity:.25;filter:alpha(opacity=25);zoom:1} \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/content.min.css b/data/web/rc/program/js/tinymce/skins/lightgray/content.min.css new file mode 100644 index 00000000..7ffcac0b --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/content.min.css @@ -0,0 +1 @@ +body{background-color:#FFFFFF;color:#000000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDDDDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2d8ac7}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #7ACAFF}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2d8ac7}.mce-resize-bar-dragging{background-color:blue;opacity:.25;filter:alpha(opacity=25);zoom:1} \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce-small.eot b/data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce-small.eot new file mode 100644 index 0000000000000000000000000000000000000000..b144ba0bd949de3c0f87abdd78b517067169884f GIT binary patch literal 9492 zcmcgyYj7Lab-s5Oz=CfqL2yNo1o0rSA|ZkhKoF!Pk}Fb@EmM-IM`Za;N@gTQlt?}7 zN^YjzI+ml=>J6ee66+Gi(ljj5V?YXgkiHL~VwhLrW_=jFxj4b&}2FxhUJr zGAxUpyHmmdVx*4QOl8^o5BBGpnpMn%-9VZ?c6w&v`+xksXECS)^||9S=NFKJUw#F- z|M=Xc&)3`&`5x+58SC<#n4Nh-J1%~evFHovA3T8u?G5!8sK0}H_leUNF8)|){yo$` zLjC64{IQw$x_|f(W3dlVzi@iy;sV>v-eW9&FY3`VGpA>rJwN#k)KB0Y?=H-rzW_dQ zbq`TLQ`P^%o4t%FzpKz2zV7DypIM&Q(6|*B2ivPJi?N@ps#p@tQjyR}Yf-(TvOsU6 z)PX)XSLLV<=3!H458#j5Ig6GymU5-S&()>!(h^!2T3D&KG*D^bOaB=4MAfJgF5rok zZ<2%2!tq?wiXI44aaaz#J^Jo#9-4(JR2w1^WD!E!2-{R5`|z) zAL5&1NP0e@52O-uL_*Jp+)*Rk&{a_?Uyt?o$COg6-?1&rc5H6jRx0e+;gp4(Tj7*F zrA(FjW96tEd0mLI&Dj#>5Kg7SOH8o^72dF&5aw)yHygaQfU^vi%*=52%@y9jiK#`n zktjrX7Y|DQh)-Rzs~&u=d3)HICW49`PPI2@e6{MEwYv9mJKl=-DnEFxxjhvw%a<$B z@b>0DuU`A6TI;)9UR1%BLo1CHToN9v5{}0(xF~=PvuJ7=-p>iWPlaT zC=xIE;wUc~MRSyo@uZe83&p$<^01eE&2=Zv+QGCDSPU5Hpndj4U9<1yJ2X4OmKR_6 z41-tD2)K_C@3g-b_LpQ*!>MgzEEo%6fo>;DwQpgOZ`q1f7L>5=OU&jL-9h4RG^(_g zX$S>tMrjR^yYRs)ye!k;*7}^>g+_Hg%QUKUTEhnB@)g#j{)#%yda*Kl0hNqru!F_y zC{LL+ypc!vWC#8opNSY;iDUda>D!JP}WsDeB7Ss6#8pQ-y&+R6;Gj z1cp#QBxL0fbvk~yXH0Z&sLwjW5!w0;-D0fgaD2F-zyI1$BI+3%^F$Lv*ZTV#h8?an zH|ae=e~UlhkLW!uDAaiP%k9ZzJ0+e+L$F70YF4J>n1WIFS*X?tKKW;8ymL zdpC*OMCtXnU-)2icOVe-`U4XYz1ich4g0_8(r!=wyWblO1iG93;ab0^S&vKvm{(#1 zL-vQ0PzKnY$LNTuCd+}DXYOT^g9L$RWs;5dYNBp`=Y!1nS&UMnU@8>6}Ap_xp%?U)iu59#UaZP))J%p zP^7mv@=>JMmiOLB`R1EVp-_{&y=BqN2+AJ zfgWuLa=Th`mP^cs<7i>777iDkZ^}=d4pfK<+FJV{S%+Flo zv|3hf+cgUpw=iLnM_LEGRIWo4Yj#nsiX<{OG>bssHkdfz@RnUFt%L-HEiT@fUKLd+ z=b9nuRTs_$n02U;zOa}r`Rih1Sc_al3AHpTiFigSm;<9qJ`^W-(EuQ^yYz9kao0d3 zGO%l-iJWgc@mu#7pGf%|G=Gz(+^x@u7Vqm#-&c$xPj?=AVcxp1sn;K<;rxyr5XuEG zjunC(z>=eciJ=-E8jNtCrij+=_~man*ZI`-cgF6YW0Q-|9`yW_Pw}ZAc`m*6@kN|N z&Mj=mRrh&bsNscFBX2b_e3ToC#iyL>-?$v_Zk@Y-?49e%AO6U>?p*(==isx8lNUdJ z>yn3dlAeDV&u3w_{yGQ(LLtOW+}F~@i)LzI45WauUA(oW2{4VL+K)YnplxuB4-S~J z0t8;}%mAIxRe7pdrPs(|vvdLG<%6RHVIV}1K2YR?Iis~jBl7CYmjgYmMo-|iSWMla zdcCiyn!+{pvMg~$Q*b>Yz$_^{{}h2dYG=tp26e=&P&aR$a8N zuFes@MoszgW$Jk?_Gk>`y$yIPs9vrXz(}>*`RWeE<;WePYV^tlSzwBKwXiu>XgE`t|(zMu@5iWIWCx>!f zgUEnwInWoEk71{axmG!_@)!vWL?X>y4gJg5)Bnbv+H!eu$BqgY(1Q)Ir>H1zW$R9( zVDc@G`u`S&fAx87DSCAG`kt;Z2L?ElZbcD&|BizkQ5^&sQpn*@8Dz){&BVA~!}S<9 zH7H@YDfn|37o@`_CbK1sET@G~ey4m&o_z~=X~8q*Wuj|2ggM0A1Zx^> zuBh7rD=pWIVa;r4U!83Mf8?g&Ky-2~Q79H-g_s#{RJ2Al)DlsQh?>uhD#cN?FpyEq zjGEwhIcM$3n~w-si?--HynlBznvLsvJR6Pf-ha67(=C!Ek!*kcC1`3}+-2nQv(Sap zOsI>BV6I%iZ-O4u;3jdtD9DJ(_xrWcy5gjnCUuGd=bE$!*(CK0j5>x1HSA*SC+_++6v3e&k`} z;l}jfc-o5d*fe!P~;RpNr9z1-=>=utLNDYGiJr3ZLGF_8_dlf|Xq17r%~ki(mSJ?IVLi0O2T;o#*pI({*_jnGMyr_l?5 zNLa2B>c%)o+9^3gUJAq<0T3iAsjO@%!m(@|E*pUpT!L zOZo~~;1UxowIng20r%3vafF!>3u~qbuSc{`~TrA1c-#JoC)x z^1rZc#Udx(w#(LXD++i8T0542IyldD%z&jxwmjg5a8FHWW}*f<*vNC(*dQZ*a^=R2 zD>P-wmsl=mUE7AF9Jp~~39UD7kk%lY*h|dHrO8*&)c#MJ$}cKJ&#a<}b;5#xDjNWo z1sC|}$VfO0B}}YL255L24K%c92}KM)wj;Ug=~o_o^p&S~C3ieF3}muWV|{J?`%jOK zp5EWz);E?S#IlpdJr8|hxQYqGUwG&qBRO6AFt~N{NOt_m2XeUwo*d5}ncN!uur$qF zADZ~t0FAO0p6Y|xOc_7Gfvp4;q{T|-ys#F!HmfTgyV%MKpwFzFejIj%O@6sh7#b=R zzC3xmM02UmiE@Cr>(TLL*U#GXrA;+`69@bI4^H&eZ2Hn3bzltf{rfX(QGxeBR) zSExAV25h4sHX5-Cp2xfiy+Vjr;20q#yyU{?24VZ6N2j$>>7dDzp$ZXB`8DUSzjmO+ z!JjBoY!!=wHNeqj&Eaq})(3+GHK^3tdQ}xH%XM z^T-xJ8}ehZZ#e7q(7lWd9`FV}z=@Zv9ojZBB1(WDS)C@K-EOWx*BF9Y&+J~+zt+Fj$cB>4W#EMyR+F;oNr>Ib533uC~^?~5HrU~XCW1|AkFm6#Z z2Q7Jua6`V1=SS6i5Mj7{ zNU^GzaF3nK6$-hWeGf{hT+O#jrPu2AJ@w7c31}VFuAcYl>JS>7dVGM?*#55`--_5B z_L-?batrpq1&tZS$0r8An~W|DbrjIv>|Rtp*CnrH}0mK?M^2~4rEF^nmI6% zm>T=Hj+TjNUtje6E9YA}UZE0yzvEzkde2a-%wj`((&HzM@3eG~ZGY9tcC=ij5*V_< z1O6bdj7ud<0t(%yT346YRmZ}owX0m;l)K?<1p3tjCq@EBI z{^26jvSB11AKB0nva9wRiI@UVGWzsTYimgFGbo^0cy!msjk_L2q>F(i$PCUC_=76t zu}sCA#UdDaGU-q!O@QzO8D>Dp2+Cy4nF(pD0R}32nlGrr`8fGle&XoSiJ=D@&-&7d z)J&l;lj`Z~>*1>6e5~;F@TdBkn%?1}y<>adrtSTS)Xs26S64^Zp}x$aF0OE^VKBbB zy*+PWiNN<_WnEiPsj4PKQsrME#%rZID)Yz&T!fwL980n3}T(y;e#e%d!|`GJb@zY28oh{i4upA6Yf!&azfB*d$o<) zt4U=R08U;q!%d=DwFPzeUlFp2Fp(~pJF72Omo`iL$_pePl)5bj%^3s0#DcMvrj<`K z;C)nL($aD%LcS5ROPR@KM+I`OE;`duXAx3z@ksQRZSg0}@oangzGFi}$L>peJc;KT z8p*p@m}<|p&g=Q0H>k8Yf0N(6J5LFx+NK~w*>22_@83kv(6a#6YxAwSc6x4Vp|Rn) z76lLH^~3H{`Q4R0hiuwd?-bTL3t7F(_ldxS;hXyuoPT3o630vGz-!u&BqcPD9^JvLoyiJOTL?gNzFb zf2CnU%Rm^ubfAqwXeru)7&ZaeyWAIA9#7^M1=@-*LCuxMmj<&0cm(wk%90zMO1zzk zhQpJm=pN0SnxuPYINYf$tl$3LNIE@2=|p-Yv#q(1*uHQ3NLm>`5zU-9HA(kO^u**T zx~C@E+9pzW>}Yf8jHF*0N%wA5+YEJ7Nj`KWJ;HF|_)rQwGx6QWo3{NYtMgDRdp|ou zUx{SCRKizWKfDZzcq-J23(v^!`Ou;0|HR{$l-xe|KI~F*EA$xZ7LrZvl`_?<=_@PB zG=@^OkMac%<16Z%t?8deeP5;R=9<0^)G4iae!cQi3GX1fHj=1}U##TQZocxpkSDro z<#+Zub{+BWEI+_6@E4V=@@vX}K&M_*7uB~tanHEts5j~x_f7j=_5F{wPdlUilmBV| z>;8{xJT-$g(>1?Y^M37A?F+SkRkx{bs_xr$PW^cOv-Q7U|3O2x;XuO|8(wetS>u+* z#l}yXo{=j(%-*GM(zvQSA}f_!Bm0xeesEaq?k>|vjlEcDSJ8fNrR+iZjY^rKO=hJ` z*8Y5@TnoSWePArUoT4R+9=EIj?Y~tiBZ$a8S1Ef?ezQ{c;zu*NO4*0@FILL6@G<}8 z!pSq2P9K}?JAZm+Ztl*%#W_5C?)=I5GtteN?D{{z`HXZv$Df>=Ik)=PKcDg0 zUGrxyM32v&nLRgiVfKmW(M!?Y$L9CW&!5S#UGgVG7g!WODVoKPhv + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf b/data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a983e2dc4cb30880fffe00e1f0879be4d95eb4cc GIT binary patch literal 9304 zcmcgyYj7Lab-s5Ozyf??34$wvB!~xr6$uf90D>SbkzA3IY?+cwJtDttQZgecqA2QN zS8_A$#<3iwZW2{-ovAyiIrXDI+=r%r>Si?Q&5S4YbR3WCaoZ$KV@#^abf)c$o3^go z5tjYVU4W!$N%fy*!MpdlXV1O&-0wV=j5EgSnaxy|yYIk2zPUy1LCZCynIk7>7r*~U z-+PuZ-iiAB(b=<$$b+a~Lhe60f8q0iyQAMj{W4?So?~;fPiRNQuQC>U0sTYA(4f7c z{sQ%PQ13Z*^4$3!D=oi^`bVf=pFeeE_Pw4TKEzo31Juu*oIStDcCq&uOWcEcY+?4~ zoU{8UUqbyD-tq3@sk7(6C$64h>SwC@UwE^ZG39p@dc!x|oc}W`@Boclb8)bJ^JOvi zb5#|~f>|mOI%zFxS40VR z&3M8W)?3>O@%&Jc7sAP6D6S9l&2c2Xkkkj$NjV~^7sBqSQEup}C|9n=2L|FwIX>Xn zmSsCOw{0sOaqLLiLe8y7+MZUX%LDOBOpd%NM8)Q88FPrF(~)JS*n$dg*iIO8w!xbX z-de#~7E5Mkx%=iSZ{Wn#qTEOpqr97kB!9%GF4-|1#g3#qTC%=6_02ln zd$9v=#e0<>JlE2Zj#T8!l~`n3OTSmIdsD6RU92prV9TME#tJSA4_1lg*a)~Nf(^4| zYFR$OlUftkOwDNG%{**?70oCSFNM+=FBv6sjF0n_mNbi{f)Vzxmwheu$4=X!j1gQ4 z8kvxN`dEF7@8#PxJHnP1U;GS%*U$*Mj}h;*zZUkFWKzSaZDuSK4`YE=lcm}>u*f%T z#i|HOSodXSbBpdEaVHuzS}Qb!f;FSGj>sMO;8k8$XmIP+oZNv%Z9XeBYI9o02Ilfr z)~o)CI>Y*~GJDt&>}M7`Sjvs@v>D({Jjyp4TH1$wHQI)-i)P92wP9yVLuu2C&2Hk! zMA}SKS0PUwS}Bn(4i2FbZuKQGg!&;NYlo;ai9@~PqGv-x&Jm8tHEie+ zt-X5GALI!lBR1Xh2wuUh+#~mF601b%^{X#@u%#y$40-**$*A7q@z+KC-*Rbpr2gIS z4F!WeE&fQI-_xQ;Cxgr@F#;k2Of%UgoC2T(FAk*AA=EHHcFjotQi_Y=}mSTC#7YkhbaR4Lc zhN)E%{MHq2*G?Ga%dEEf>vPqz1%8UC$)0nI63&zjcoC2fm#@^#JgLQ`p2T(_g*7C~ zWxaSa8&DYdlb5ioZ{`bEIIWhI-+INu#Vt&jrZkNxI-r6DR=5KVx@cgGWV8Z$TM9B zUpQr*+tlX|1~|WM2ZVAFjAMmh2e8x_VPZJI!$VQ-(-hIxleqXz=PIAR`p)=$^K5GA z*#n-R@@YQ(BhQ7mK0c3g$hn2>xa>a9iveCtH}N(j%g4B(SbW;K`pt`pp0@e>#^1TB z{K1c$tIpM*dJa6hGG*eu3 z)rh?M^2K0po6#G5Ego05t6uMGs-|#Fy(mju(Ntx-66`hF_)?CF1FPi?up zxMN3!3+SOn*i%%Lw~BSUQ84*dM*V*a!@v5xwiG?Odwow=nF9kHO1G+rzJJ?6j;IZS z3@PMrs0=dXg=S)04{$xsO$|yIZVG-5!eH@NAA-%(&gx8R8H=D!c zf#KuUurjgr9Ksx8Zh|!pHrLc`ft8kP#;|5Kw6D(Y0)OPD;Xrh8Em&!|I;m! zC6VfQ{UvB>Tijvf%CpdgGfb#UieRo>z;A*c(%>d>z9h(+f^fj96BY@HY=9HU+y>0k z%l2Zjf2w|-)nQM1*%&(jU2nj-GMiK_Mb2L-tC}hyhiim)ak9w?!7+cDJk6Y@ozzJI zlm4wK-M#zLXLdw0dv|Oxl!MV7XVUwOEj#vRCOn#Yg=Bl7A>i{i2WF<9KfZPA@#m*& z`PSom`}_A&o0}`&D2zUAJlvESnn?d03ZsSe#89TG@{+=LeL&~v4@m z%FJ3iL=ST&KgY)2w!!Nypge~eW5QCAVQxkd&IPtmZZFhyiVD>YMl(4fD-H?#QdGzr zkpxOo`MDON2}<~b9bzT+^lg7}&z={z_w7lv4|bXd4?Wo5|KOp6X6Il#7dz~;htui9 zXYC!UrJAAm!@~T?$b7-v+10hvtZS|F`xmFD7yW(|-8TM7dVIsi-rkKH#?w!QQ$ZuS zp`l?z(g>!)PhIMneEhDv9-r)~S`!vFd0$lBas$so0=h}?TMpAjcCA!7h+7-Hd`mUedb^5pd*3`PX zH1kE})v;*Ia$#tsF_j=neLCUPEZRr6XP)uY4>tYG%_W+qfIOOnVU=Mo3IAS{8 z;y8E(jgDWOZliP(fl6Fdtke326M*swgN-C>Zif}9&hs#Fb1ec(j zW!rGX>4I#)c>snAg%Ch`@{+zn7P!O&OD#)GXas(-68J3QAS6TJEgUl8=E9pT;qYk| z`RI!Hhd;ac=7);)`_DWxw(=)zTd~NAx9y6x(ux9Jf!5AtpbpM+Ju_e_k}VIoA>31w znwbnh2O9+r8yjTAPcB`%c8R7;`7+Drtt(rRl>OJPEu;0?HPRYH6MKnSxitA2n%e(K zQ~5=e=)z4ju})YJP-TPQvgiUI9T^FS;iQR`$pQ^m(Lh6smQ=*ZW7|_ZpMK@hM_+k* zXKMRnBS0oAJ>K6wu`5R zd4E2C|C1BB2d1`!J}l2L*M}y4HbA3nfv5T)HdDqAaA2!J1!=L;IWMkmVAGd( ztAp!^NOHT^k|DCI9^s0Q_)#IVX==E;dw6P7rhxq=JhQMD7E0~FvY$`rkT!}RM$!T~MH8V`A!2;V9ncYS z`EX^z#~Kk+>;NBTDXy1{c*)S?hNc@@T-VIFX6kXX#LL2VmTUpFBy(Z&846CgIZo^? zTHQ9x*|#EpA&DL%&|H&vU$N?#8?cQ+*l5HmcmeY!^a>+hfn$V}^pXpoAA;?R9-Y=k zrGq9Y{`&qh2Y;eMu~jSz)&NJBwL~H=oiZnZ zCi8<<(ZS=S*2N6faC0yi=8-LcHsr@*-*DC&pnDk^Jm3v{fDY1)+q%QUFD*>RELCbsf~&fvU->bv439**4GzWzbB9kV-N_KzK^PO06m_4ua7L zBP3y30){bOhi50Wtw863kPEn!A67IG| z>jS}YO%u#P#zqC6Vceo-4q6t|R_5e~26E>UM?8ih3LPp?;%Z!lG$Vnt(z>MPf)zU$ z3o0xat1JZ-Dmy4&mMbr6cNH-)#Kj~R*fb#}THyWeg|$_d%Ou#ql{6xAtFeY+o&uDR zBG>Jua6_S<7sk{=2w}KFSg~rDaJQY$7mNA4eK$(!eBe9f@@w^bpZeD41hkH7*UtM) zZ3qocKR!rmY~R<8Zb9r0`^;1zxdr>*g2s$7STXRs$>@Ug#-;t0HqDhl8{&o(YJ;Y9 z<8I37o=kFdf40nH+5Mx*>G6N-Y@Lkt_s7n@a<;Ye6)N%fI}Z$Gb`QrZEIzzDGjZJb zZfhsm_LrSpXX|Aufgu|_;0JkSTqMvsG^vi(nMUq(hxF0m2hxm;oW9D3dW~CZ(+g7^v=Pp{NSy zyhaYS@?aL(7v&G_Uy0^c-m#d2NvBEPWpXzIFeus;W&TajhwhbiHJ0hLk z-JRVB`?CkTxx%f+p~TJY9R&kR1iqK5>)MJ+O*J8sDu2Z|w`tdC18vL3!BZ_NQ=22m zc>yY5ooVhi=H5zn!>y>4OfGIF%`}x;(V%nm`*I95ak>P4vAffRmTZaFb|OYeC)pQ-o|HOr#6u&dryrOIxIU-Z%Ao%{-&^NSAh~vwM{{WirrM0*tdzE zp=SZCS5CF%JLtLT#iqvRS`|E4&=0v!6?Rqk9I|O+z0+9h9Axzl-#2dYc|)qAFdPqB ze=>%RLUH|v4oJr8cMhBqiUGu8R&FV0#bU~*K6fY<;DXkl@CKuSFQ^F1#@a7`!eSo3 zIs<((#U5ZM;0egD7-U>f_$vbwS_Z=Kr2}mgLQB&Y#IXs$-j%-a%6KxrD9~1d32Lr2 zzBHI6z$2)SaE{#Qbn@+NEE1VILHAhp#1!4TB9Sg-@z(9{jb<{Vl#XRavs+t=$!&YL zjb@aIW3lY96H|20#*R&$pnH0VP(M;bKwcSw1l+;5HWJVb-93M)- zXD0vR@#d}n$?84S%HGe7(pMsxFPHHZ*AFj)BAyDh;=(iXdp>k1`akjbB_+4dy^pw* z+zLI0x`kv@d$mmUTKejmGL4~B>!WzcdHks8jS^KA|*fz_Age;b?`C&<=pXw3n!1v^`AXCJ3r6PvEyukUBIV|BM9I0v$H78vUxUt zXzt9}8=G?r5E=;FoCqU{65x;&Hu_e8&UY+?Qh z#$rYE4^z^PieEW~M#kc;sCQG+URQr{?Bw|iXxobV4N5;&nto^T)DetJ#85v^>D}%h zK6G;a0^XZ=9(8Juv7PMQrTLQ!X!}#V`yEQot`EL+`qVi*)BQ|!oQjgF{ujT(yo@Qo zt-Ou;H{6{6Gt2P+>Z>mvTwSBG#n{hORjdeRsYqzyNR=xl3-T=}b)b*R9k|n|4(4IA z$b2UTyJaXi;3sk@B| zV}()4(k;I3-sYiMs6w?_0}HVzD=?PQ&3M8W)|*>$@xkFd&xMouP+TA3o8m}%E~yWt zlX65-&xPGlW8BbHQ7m1H4-CYWVtl}{Ez5RnZrfHm;@FY2g`8WFv^}fL76;;`m>hXc zh?33O3g!?=rz0y&u>}=gx1BKNY=bu&yfuTfek_^U&)qkdc>^b=7Uf1VALU&5vg zb;+)}|JkN(5oeAFDt08@-qi1_QQxT1y_eeYR=ijF!Lv>6=}1YwT!}@tHT8M*nm5!M z-=)&B3bq_tSFGTQ@L-i#mW_goJlHS`rq<5~cv5TNnyDELype|uu%a0S;w4uY=LMr+ zj`Ing(voJrkTb#__L8ru_ShLalre(KK_e5g&m605^1XD2W=Gia;-^2w;8iq&?qkF| z?XQLX#X>R-C%=)gP&|wUx|J-|zKKP?X)9JqP{O*eFq>O+2Z_7UsL-m?5DM0e(mEn{ z;e(fXsnX!q?K!y%jmmtgG%9mi#|Gx|Ro0_^L7ij0Sef1I2==odJ6On$^RyY@4Lr&> z8Cu$heKlH!v5RKG@U>uP3&UyCi_LD}$wb;rQ&(<~IhsP}~Y&HkW2 zs`oUb5b*Gq+Eb}^N<4>#P>nqe>JRb+kr5m3eFU%IR`!v5H;P+C>Gii> z_+V3aFc|XsgHutx$>Xny_`l`SZcqKY-x~@ByPN!x8o#GWk4^=dS7HQ21Q=$rjW`8B z37#KHXWU!D*NHhx#Mr{a@q(V@ID|PQAcvO6_VRpADfm(vj($L0D^sJ_T; zAsmud4!BU*!h$V;212pWZPCfKLiG--4+%jB*0O|UmHvKV;Z?yg&Xr9j@v9eS^IrA< zI0G!i+;TZg*byU^O|x?c6dh~)@th0%Q^+S?obd9>G- z_ugpf#v6^{aHG7vY0=E&jc>ixtXRZ9K^@(Dqs}bR;3LjkGQSq>by%pL9<2{?yHawh zCFa9%v@ll-hl|c~D@!rb)L7ukj{_JnH%zUJ;J2@EyK=%PUtyKaU!SX%E$~xBMfRNA zlyIhOz>9!8B zl1Ewxyi~43BWrR|t%4*nH#Cbt;1-xT;P9qhEUtzGg)J}NnO+4|DCe3X=~Wia1(@4V zBYj~pTk_Y%Ca@NRQ6=2mpd=IhO5PkAS90M5!HWg}iQlDsT8ab>;RS;Crk_n zcz8I0INp*WRAEf04~BKeONS6F$plf8@FN=0~vF80QwY3(#p1KhwQpWZbhj+tKk@c8<@bN&Tyw7d#IygI<(Uf~y?N0?J4w&Kgy*yD zB>OcG1cX9}8@aE!ixUW4m}ub0c6HM|A*u5=Gna1RowUWd#Ua?d%6Sp{x8< zp+c{L!)ECM%*zMI3Bo{#AbqI7hX;+8W{t?JFI@`uv=}|XSL1PYyXy76s%i??)Jw9& z6-`yPE5RP4MUHSTZ&y`CQ7ePW<+a0tx*n_$rLy{$T7$2)mRq&4+S*!2_!>0j$Cs$* z)%c@vkoVT(t)P0TQUD{BZs%*;6_+D-h^o=cWVtfR<<2GO&P6%t^WtTAV=XdAczxJ9 zSnjm;wD<1Xf1Q1s{W1G4`@t`J7Yy1{Y{T#%?J{Xv?8_LJy0w!-xvoQGz_uLdOUTEt z(}lqnIk5Z~2@FIc!(9#i%h=QZ#-7@8d2z>%3K!5r^{}U?C~qa}PNQJ*RY(1Q3&X$q zytWiQx_f<3m6-zr97?yWh`xWvL5`>lf($9-aHtG2jAFExv4=3!%e}@VO)?7 zmzc~}FtU^pLiw%I33>J{$e#tzsGDuV)2sat($nO8s9G(V6;(fEjj97RX~V1XE|!ae ztoM-(8%8Lp@I6YfI9xZNWMM0K%!w&Bynv!RWMl(lfwEp9KEf=*y1-2j{Ei&?t)JkD zC-b?mUcGTLZgSPC?1<~BwTzWq^=5OJJTQFR8dfH@oJ%uTSS!RD&EEwIvZ&6qs1 z9;UO+;E&ui9EeV?CG&-RJRdg`4T{#FhMS{`5mj@8<4R#%%@6e}X1|)`csXb7sT+?7 zSc|skJGggeES62^dLkQ(?c95??~^T(C6Q`>?L}y6Tij)2^;zh`IVRL)MKD(`;5R`J zX>gM`UlwFdK{#O535$e8HoysFZUg4&WqUB$KT$u+YOp6gY@F?ft~cOZnGLFzBImEr zubL_$hiim)aTnU zNGi`YMYmX6J408_Z2sxyGr#$_rqj7MXZ69X*Wc;#}N*V}d(Qf8HHOAqjX zVj``qlO?3z17r%}ki(mSJ?IVNi0O2Tc%)o+9^3g zUJAq<0T3iAsjOrv!m(@|E*pUpT!LOZo~~;1UxowFnIM zuzKJZD}c{D4ni^n-ohahZZ5pp0uG;Mk&mv3fB3UYZ+xg&zxVXh$p;1pA9!*yduV1$=)>Y1bA4#yrxhAy3p~{a zv6(V{fCF0&DoBf!&Ut=4bZt^sJ9hEa6+oX^KK(fC3Y+;#K0h*&&wpj+R*B|PnG@vz zao3~cRoBnj_2rF$zN!5K1N*1?0vo@)OC4HAM3URJnhcS>L+@rXyJ`Yj_)SNt#@0(0AHH zp>|5D1!<%BVI(b(Q#2836(Yu$-2v?(mk(Dad^jJ?tQ~xqg}7cY;sryG8=7utaa}Xx znyJUl0xt^NS+)h#lFWt8=O{Sg<~XspX?5E$XJ1wRLJ~bjp}D5;zI@p+H((ouu+fNB z@Eqn%=oLo10>=m`=_MC_a2U2PdURSFl@6Lb8LAMGv|n@n`s@3O9Q=tA#a6K>SOXkg z))a{}VSO-2P=iXnj;IRZOD(szTvFb zLH9B;c)%O@04H9uc4*tkkf2LpH*o`S30bu*3PK5ir2vXr<+JGe>pG~l0acS_>uQvZ zv2CCa%AlDHAr)kVfbf)nm0DF=90a2gMo7Z61PYU&U~Ob84m8FPWJ$afmR-hCs#_F= zwo0~i*{u?A5-VoOX@g}8oT5UJCERU`)(3*)nkJZojExFB!?;Dw9JDN^Rp;b~26E>U zM?8ih3LVN(;%Z!lG$Vnt!n&kpgC#o{3o0xaD=h~VDmy4&kt;7McNH-)#Kj~R*fb#} zTHyWeg|$^yiX_;;l{6xAw_*+XK?+bpid?ss!VS4vo*P$lA%x*_Va2Lo!aerjU_L)M zXy1cUdNA;vV)515J)i&9X9Tp4YFEztTxAFiPCq_GYHaV+6f1 zd-+^*$IDdW?{(}S$m|-4msoscS7!3K@!jSQvhA-p*^cHbR02abc)$DpD9U8anMrA@0S3x@n#-%g`6%^RZtC#isgVa8&iFFP^n5-)pYG}F>*1>6 ze5CNq=qLIb8{g)ly<=P7#%%-1^o~eJS64^Zfxi9&U0mT-{cvJ!dwb5n5`pjK^13#o zQc+Eaq{?4D&TZN?+CbZ~aqv`&%GBlva$bN6SZA8Mjk!0I-Ecc91(S=lgdB?2eUey- zxwt~Ug}a`2qzN~}T1!*8Jxu~aOqEGJEzeU8aH|P8l>oQNya}|y!7;=5)Ta zc|%IG^EbJjJ9Ct9s%;7~l5|MY_oy~bNWH|soc); zo6o%tL>rck8k;||D&;iM~^_>H!gkk`(n3Y}5TCte& ziO(I11-PK~C%nOE;0r3kva$9nAG4Upug*c=%&gOi**R@uk5m0UkkpgtO#Er;~5>$0CuL6LgRDpO~S0 zXC%_8oW6bgyJMNm7^P#GvHq=1`Q)}e+r~1=oK zE}gN=i({GIEoz&gjw`8$4rRs|E*u|9!KbJG;_=3<|H*1S)XLt=j?q^lnXeS_71s|h zgCd>^wc^4v@_RmXDEdG4_$4K`&%KYjl-vqEhPs7hQ+v5g^-B8csxpnCROzGqw1@Fk zb$~Yr01|V=9~1*`Cjq;kG4l!(*DW+l>asVM*&Y@I4~FZ z^}u^Ivo+7x{8jD7+S%Ig)H-#Ob5^%KO1#vAerWBQ^Fyxm`v3z2!1_y|0(c6m2rgWwQ29mCH5oi{Asr z;>#&oBIt3;3ef)B@(%E2jw@)WiM;N_cnLD5A9zpmuui-{>%B}OBYWbS?D`= za(;0U|EzMHEwPLElyL;%n?809rFs18%;Ld?v*(VVT8eGz&$5H)I*YF3;BJY<5c%w9 z*-uI5Qx4m=aP-N=`Lk>vUUif`2@dAj*-!cG^r@xuv7-x13uougFFX-Dd@;83$f@0@ uPA&DbY02?<@O%`6m*hO=G3f>N1lkT`;`CoRM=)wP63q_(y@A!b>-E1{Pg!yR literal 0 HcmV?d00001 diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce.eot b/data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce.eot new file mode 100644 index 0000000000000000000000000000000000000000..f99c13f32f5c968849f08a3d8a399157bfb0cccb GIT binary patch literal 17572 zcmdsfd3+pKo#%U1eW)dMt6P0kt97_r?e3N(t97(WE!&b@wru%O6f1Uo#KeglTk(M% z%U1{)GE>-$0W%3+t{Jik7VBil1_FE*$ZkUBGqnR`2R7l851V0tnXrN^83YL*K7pA8 zR$bcf?^Tu5lI?hy{p>$m-LKw#|L*s?AKSnfgX2s>p#0(N5~ui0W96w77Rm7cF8vdo z;)|aEJHw8!d)Rx~adv=BATz+W!#~8%vSVyNJB5@O+l7=<>@-TAK-nbgVtLjn$}X*q zMC!1L=}cyw+jewx*VI;h1}V?MjUPC^fAW9cefj4o)Bx9WX#eR+qz4(3XxtTtj=lHp z2P&T$Kzt8l{hv5IvHxIIMV zXRo31?^bO;U-~H;oxzgO6=q)+TrdwZQulZkV{W+UqqK(K* z!%SAR(K)kfW-Z!y0&S?GjTe@*!RKC0x{`8YRiZD^7~i6dC|i^b%6g?==}`(wm(roE zRN9p4==0HUMF%1;MykS3h93*p)IM8#uGWS5mCs)c=-=?-jAJ%6Wo-fYi>pM_3+=yi z8diGFz<>-_vWSP`RAF|1rM=gspDp7sW~H|JFXyoN^=49lw&oA@$bC=T+X zQq19<^QLoZv7orvWlwF@;gfo}O$kl~mA0^c@^DqH=km3aKdXy}Pu{p_Sqn)~i7{Xq z!*<9-DZHQxH)%qcbwc7jxDyZ%r3VcO0WTLFsHm#5{0euUipujZ*6JR=HhtF_nYr0e@<&`xwUy9P>8Kb zw(Ll^G<(;r^ES7nceEte#0r6d(rcbjRaHDtT~}4zSY2J=aeIPQRds>tc(oOOIHRf= zINptTRb6!;UR4!BsS1%FuMX5zRRu--e>bN!&f*(3Z-|>Z*F|8CY3b&H%Y|4h-Q02@ zzkYrGKudEv7AssH_^`jOa=xW1^jF?;RdwCx)GT$KRcFPhLRFP@{_48wDtnaHsN)m| z41zugI#bWGtd+I10%2oMw#|Aqdm6EPHnoVRiXq;|y9#j8wCYt;(Xd)5rU~+8E$pAp zCiFyh+8+-4d6FAO35a7zOrNMXO!$&Mhm6kD99aX>x>fH%LdZ;sKY zuc@`QiFY=&>Xz49y6|>QG+INiuW2+fdhrwUi898n&0!XnYi%mMB$~L-{1EvPnkwmG zKh^Yyx#5INtbmmUyjVQvDyFbB>%cD9*h*A|JJ5{z5OEfhTM}MCXbY)FRCVN94oC?y zgs-gG1geOjcG0p*4@M)5r(^)q-Z1{rJM7Tn(G;q3Qm<++)iX z0W_rgxS9>{n39zSxgu$VQ%`)pFWYux+wiO3mj3o_6A7kk;^C)9Px0{UkGR1>^Qiwl z(YHoIJCF4iIf#AM;{_im3Nl`U5P-Y`BLhmWMK;mxA_SObPYw4(mT|!&C?n?;f(@mE zb)d*X1u6wTU^kY7umirbmiP8>&7TYK{s8yGH@_L+Ps*-J-<8U^-yioKsPy?NulVBr ziW={_Xjfg+D&YCIApDrG(j~7824m>zT>Ak9&z07*`E^q5Lin9(J=T5>AP9Mp*)+WyYS0lVN++Ql zy_Y?JRW4tO|5xjpbAx3UK^EL_klu1$^2xn&qgA@W0zYQ0)3x`eq!@YQh^7G*4Vl9K zQPVgx4BmKyHETZ@QxxptAGXr%7tqCwVQA*xBe25YhK9A5m;t!f0M{-C{VN>u@sJFc zGPuTxQ_P_ViRoN3!FOl>J#h}12n`X&-;!MwR?n8PW~(Q@K)MU0YlO?< zZi^Bcf^_SWX3{jRND2K?moh79BE=GVtxO_{crZ5`9%abPeQXqPNYKz7Yvf+y9VxZg z9FV*LIT~q_lqR{*Jt!3iWwj?S)Ph|={*JsA``w1H#Q zVMlxgL4%ZQ39cY#JQt9?3M5~5F)tHQbEl(_p1YtQNo?#RNBaAZ(3FM$z7Dl=PdyNXeOYgqd+Iyx0?vj|}GPVUK8Zkq!y~%mm>xeR#9|$Bwdr*8!R3}9b-vFq0 z3?v&uX-)|2Pz=KW3js1KJ?N0Or{==?{8Y0 zY~GMgZ)i@gZR*&WPVelf>rMnhlVf9(p+KU$PNcQ0*tvUeKEHSO&J`=SXIl5G+0n5b zt*tx8MziYv*39;mlD>TC&ef~$99r)9x@aGLm~%Dp3h~5i;_F&k*2Vo1Z>+a*Y;tm} zu{Y+8_(dxJT69^ostT{zs?_n7Tk6A&;mS(9>bI;so>~fz0+p99Gg>LD|*=9O?jx@Cml5ZtDVOIDQBP)cgmkba>66fI?km^8n@d9!h7!Yh8 z955gO*wH&$N6XNUnJ$J2+8|GZURrXd0!s->P^o&Z$nKmMRsnDm*Z`QMp&Q94X**wh z-#4X-bLR$~uZHIJk|qa}rJ&&?BA0Nq0qyI+QIe}!rc7Fu)7~6mYf&jcW)srsKYr-B z=RQQ!C4Y`}+mflY{ki7|XP~N@7 z$Ig3)HGPhKKf3wO$-%KdJG5rap+6fNoV;^$^!uPtsk$A<^i3o-lEAr1KenR|d*hxT zQy6elU~5SeTS}i~l5Wd}B*TQ{Xy5L#FejQG0M>%0H^~xPLXnT&_L;LAHk|#;ZMOeI z2buUhTFo(a|Mv9}Z{N=20|Uo*_IV@gx9^t?XNrzLJ66_=Xil26ai8#?ocZZUb9-Dn zaZ5+XEhn^idvk<=N6q65;R^7C@W5?b%GQ8`hlmEjT1MP4Q$8~Q891Ub3*9%HFn|N_ z&DThF=7IWfxSkxTBH4tAEJCDgfcT0|OpNb{=6jr3)`R{ z7RF^TkoSN)4+2LE(E=vg#!2xngutsas;zLZ;c7bM74`vIj{z8N(%rq_;zIB9ak;2) zF;y&vrt7jsi;;lZN3TS-Hj$`BGO=%Se0uvsd|U#lKv}E})@y!|G_H-0C$c8i3|{tm zFlv*T8cz;?g6C=MASQ$_0Cq}lvl&~vC8<`#sXHtVR_h(}g*4Sg1H$|aOkIQA zVQL}_l~>32n#q!&tQb6OxOhN=bM=jsUu(o= zz6{Z_K;osG0*^_7AY!=;&<4i~21_iM3`%;iqy=RPmh>QmUgv>WsBr)tKn-gRA49}G z%}v{Qm4S@IxFgA_!n8*$U1)P;(JNH(!l2AS=L%6tTOdZ=-KyH%t#8_-cW1kO&rVN2 zUUl=mf6k+1!O)3bQPFXy2o=uW*+V;g%Y%p3m}0$&^I$NL%XL-@yjqTt3_?ZBOKBjp zkhHQST0yRA<6&&72uj~E~IBo!yW^soiUPJ4!8?B z)&pVTf_MXrgG8hfWs(fNd-vJ(>(B1)*6ZU9TUuJSG{oychx8KKG{^go+}z%N^O1f& zWsW!XDe?OHxYE~TPGLyE9eYpu7*3rmop4_8QVWi>WeH-7{RtrH{X2f)XgG%t<+M6I6wdT^1D>^uH~ua_}-=V+;me<&rKqDb)s9N zb)2%-kuW_4q_aLY=Yj19P^#;;bp(qm)DgxF$M%8gN?2b8TBifcVN1G3D}K(6MGcu> zBuU^J&6)c2G@3-4$s4rU>N@Y;e-A2r#eF=B#10xxjOMkojs@6m~ZTkjVi~@yS8* zQ_@&?5IBf$M4Jnsu?A32mvm!d!qmxu#NY@BB-79h$JJlMG;obDpsvC$`yCa1Htgogf`v&{z05J4`<1IqBq6TDc?QrEB659$s7oC<%f2 zFUDy-me1|jyoX@`pLED_(+sN=_VFCg={(7&b#rP8U_Nby2(;PU_gt7i$~7{TtwYsR zF6B)@bcSSEE<$;{3bYK6AqT2^i$F6Nhq4(*hyhKIfkR1iN|W`zk@i`p@&A=u-&x)QBvdPWPSim?z}JFpz6O?gm8~MHBBaeCP64Cfw>SeVs5!xl#cPSJ zeyORR_z*xgsdY|wYVelW>xpoH*h^Su((k#U6L--#({y90-Ci<~Ow6dHNgAMs*|KXB zYi3!DQ5HunSktr$?M$4?kaAYf3o?ww9Dq!Q4gTuKy#co?;H|EayfI%qTkZC_-9G95 zPwjhtx7p~jtQ@eLjD;J#6>fRhElZWv?tr&4Qf1kJieZu z{PBDLXia|n&OMpFeotpl`O`;GLZtrh!hb!fVLT1&)hyJvu zz0;jtu}k4OhDB_LeD#!Ufb$)}c0ywp;xA55`nig4S7(pf+0!*BlZt~>I$Kd>k=>P- zyEe7Dr8BZhYT(fZzDmMekf+YKB|oq?p>4gT?dFR|200HkW@1MB)6(h# z?XLSidN#9WBs1*xyO;IH$5!v?%17kQE?t>3XLw?wA`u-yqkNQC0!Nr zILojRwwoOVmV$eb$Vi|`yfq5Gfly4OWl4G@^h;SVJf9bxFRxlMW-l3Zb7eBOS1=(M z0=&^qvXf-ff16Jx5+m=XcQXI(5qdW!5{=U2wbNf3XlolFcergJ-(Rby*WJ8spiNqT zIGI2E?h$(DlZQv%P4DbbUENUjx*2s=I|JVuXlq>~*D3O#l-awd4XEm6cmy3>435GQiYekgX96%>?nWUYc=( zbtb_(x?ttt_F7YqI%HO3k!{18t7X%eH6YGvl2~Wrm{@YGHs;uvp<1fDGd_@n8HnH?SoHS%olSGTO>(Zh{v$SSQZ_Li22^J|>46y{JHa=n^ z4z&I&`*NVw@o6RJ7jdDVg-}^<3)o+_Ue&mjw;ZyEmuw~WLUAk{%zO|@l|mE~D#GR9 z&$-P5WD=c7ATO4O^m71c}q1B`NXQ-WRqAfzO1P;yp2(bQ_Vn<+46}QQJvdoJa5*cuyu*!q8l6if4l}Fei za#H1nUAuOfm-v?@k9q5E^Y>{hl#*X8a`cX~V zWk{{oy-1n0LYDl#{1hNA2(6I$pcLYuJ6G)OUdCgQ8V;2RCCVjmAqb`KTuPUTwYg=uR2f@O20B$UAeKidNder;Jdz`%;l1) zOpXV`ndar0NK|ewY+BX7sT)>J+olP9p$<3X7`M*2q6OQ!u0WOXhHaBju9ylHtwS_b zzCXQl{AeFp)W_GI{EJ=r-P<-ceu|G@$S%apsSERkvuD>|BF1);uq{8N3 z&c{&LDM927JZbI?0V7G)!d7BrIjAfJa0nb7MN_~i?0Xs-3K6sJ-mVPJsBky4kSQu@ zsr5ZgJ#A_KMe~_`=ChI~zPXU$_cm`C z9c$T#XXsCg%STtPKH51mG;?X+8>N>Xd~oJF-=XnTa1D!P$of1!k>%F5nOW9|48WCW z3i$-O=7SaY-4DO zKCr@{;t!gq{{y`~L6$&~mbCbUCeL9h9U4HktYX-^0z3lDDNWJ^`I7dV7k)GQTdJwi z*zACG`IgdWZ;=dGjxlu|3qUPtpb4PrpmPfD9FZjtCj)rNp+z@*VS7|@(j{+-E_0dx zb=k(~Gv+06MHd%!A<|A!FVgR#8<+95u4Pg48LrP?;_al{6f_3WAG7uRT0kh-rDz$7 zi@JjSwg9aTwiyLi0(3sEn~d%vNJdLvvNSa%jqfSF-N~mr`II>&>3UyFNfY^uPl@c! zdrCUxqdx~9$YzW4C~kLzvlv{U5=Sv|$_q0{N}ifU^L;H-IC?*hz-IGLzh%e_=9(7j zo!BTwfKbW!(wDeFbAkN=3uwsW!d{W*U7fwf?%rHaFHs-dWQuxXxcl7I35$UoO~Fts zod|h0RyHaP6^R{t_wGnkG$@Ug8$F@=$&))}edozZ&gH>f+QGW&-FIx=ddKeSx`W!T zLD|(lytlJ+?{GW%6!VdEz-=9AWgy_z8B5s>OKVyg>;57RXr-~>$!+?!lfg(sLqtmA zZQd>}SwcNy#7M!!7E6fjjCHOt{L`wHUZ$x@SP^RZ^dV^dS zWVY=j4ry={Bl;?#HMDu@J7t_}#VJumAlo89OfJ6xviUVU1<r1cEz%);V zvBg;7g)u3RysjD(DK25M@&nRBg{wyKB%loN0yw+6W8eYPK;-BQZlNEa1;-fJQ|Jq0+{r={ugRFcLCngQ;Y0h>5_2hYI`Cdest7b!s8$GN)& z>#8h7H{95yl)AD4K%eQi$D)mUq!^Bm0n7#zMD&WSZZGYgYc3FHx{*5D>A?3WF?hCPd0-BMBn z>1EZk;f3gDYW_4FwMf)0q;Tb&h#GFrSnbKv=2X~^+U69s$j3#5k0T;!!t-CN0J@?v ziaSyob7PE(j~8KUg4r7uE({(a@M!Q3lrwC8k8&KprBOI8HQU)TS*NUm)E?%HZKrbh zU4<8tijym$Rn$S#xWmi1CNoLHjzY4LL5Dz%G{NncKUkq9(qHy?c$zw11*lT4GRWleBTx)+mHis`buC+VntX)Z0{zTT03XdU=1Y;9^+xDx7 zROtF`-wg#hPU)RBCcmpKm83GYW<{`=rRy%jWn$CaS@ zLtYF*j^ABjepc4z7zs$`Svh!}r{W{?Srz74?1u(CGq5eT%;NmUjkG<@GGhu0t}ZhJ z+{eIj;Lf2{k3h_Y}LpK876?$38GF(V0(g*z&CN9*^})9b7gNzuCf_ zF*`^<;c+W5*rb{}cortAZk(zKp9~&I&3Is|>cL?xOjl$8v3)!BY6idXn=nZTJGNXz zH^TVi6w&Ba!o^?_z)O0dJsb|JwfWlGuo^C1D2qvlkWz~r6(!nB7s_LNU>+iT@ zJsj?`%{N^Zo@35!H<61`lw6>JUiJRf3EebEwVLf{e+C zl9cE=vNebEYzSw(1L95%@iwqQ;+Q!9G+!}a*~^>FAMfR9p5ANzSb7yN-n=M7tiu#& z>NwWH4Hj9Xiv-e?!xf3&TI><)<;!Z9s8UNf&d-*hLzu*h}g0 zpAjr^o!<4C(z`^|L=+Zek@&OHyR1#O%KS`v+=^m+L=O$Y7iwXV!!H5o_pW4Y0kMGM zAjmYNHwC{eAne0EB9agAB5?tF2-hS7>5wyV)L`hKbCgDsAi;oe`cKk-cV|uiKeH+b z{CHjt|Kb;pKQ}$6;}q9Gyn^;rJg6srCk~Q_{I^{dq9r?1cn?@DSxHol;&7VnJ8{Q9 zz9esHImEdKW%71?V@W$yzSmBBX-QrK;^f#8M|H~5$STVWINkOc{3$pME(wP?hZFha zYgQWTgx`*pc-xLs-XH3mww!vci`yWnb-vB(g{dy`xDG#1R-V$yU0#xASaF(@D75x<-sQ6gL-&DNri}}WV->-~Uj#YlK@}(-R>Ri?H z)eJ`To2nnHe!lwG{)B(b|Aha!Kr(P9@Ly_J&3!=@>JQ}^RUB+-)SPmCq*NE}O?OFWVI$NFG>bA3(@yDg5Qf8Tbd0b{Br*mc(yN S4xrR19F>Jx9kYDL=l=i@ywbP; literal 0 HcmV?d00001 diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce.svg b/data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce.svg new file mode 100644 index 00000000..5727cea4 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce.svg @@ -0,0 +1,131 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce.ttf b/data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce.ttf new file mode 100644 index 0000000000000000000000000000000000000000..16536bfd7a292e7090b9d4e0ae61061da9bc042f GIT binary patch literal 17408 zcmdsed3+pKo#%U1eW)dMt6P0kt97_r?e3O!v|4JFTDB#*Y}xXmC|2zFh=~(9w&DXH z@)bgc%oH|bf|&#_*9_SNi*Yh!0s%e?WH%x6nc4xe1Do*4hs`p;Ojtpd41$CYp8%7< zs!RL*y{eX4vK-Ns>n%b&QBjq``@%_j4P5!UD zFaL}&-T>EgaNp@kr283@#^6^RJo?_d@2`An0P)?7^?&@(#J&Snov{F8gRdjM_Ye}? zpL6swwq`lv%MTqpbMMck(EAbJg!X=O^u+#s-<|l$t&FYhNB-=wefLhX2iYeWTi1tp z{P@0O6IX5xIT1(u{KDjk(`PVFJVVoz&t!R)Ut-9YJ|(??l#f_G{{_o)58~wy$FLVa z8e_k_S2pGhrpa)~q_rqLaS@>2$Tc9(@?}w~fjM{->FZF>$t0x3r(34g*Q#Fgz1H?K zK2tGMH4~T#&os`o%(TvQ%&0R1Gizt|{rt(FfBqM}zxeFyM_zyN^_Sl`@`mxo?|ymj zTybtr^cJ6H)2*+u*SxQ_{*28q(MD*dVJ0ow$jz*rS%Ws7KpU!P+GlIe)jBZ0 z^7)Ga{Tp7Kam=QstSyPL!b;KfLi_KWhLxT(Fd&0DSOo(-@k9W>d?1NH9>KgK>$AFp znM~KYUSyi2ji|CQ%Vd2Hi83<{uBq^~IYY*e1+jx&XeX29$wad&90*17iSAxC(35sI zaV4qZ6%4tMmquDI@*+w&-^9c62Oo-#CCqrDvoj%0Cpr@wWQTM`c1d6LxQlVO$K&SH zjtYm#x%9h-qR5|}5=F-oV-d+EUy&U0?9)_C9(Q{m#vo0__Ady3tbZ2O|VQEJe*UW?al&uO>A%iH5(bkwN%ZyBRC>xH)%V`*e1 zU(8v0Bn4|yBAxY zDJZUp9qUbJoB$5-Pd29kG-?l(vHp30EC4p-DgcH7!rc*sQQj&^5LPO0l|*5yyj%XG z=384DwYexB^Zn-g$)D32TW)P0@Z}?`<1O2hEzRz=Yu(K)$?Yxi)seh!p!k|AP*oN6 zRo7KjH&$0yxSTG3RaKp@I$CYTA5N)i3XXRpUR77^i&j+yP^v=YN2`5xRaJfw|3A%1 zjkD7
    qE0fV3qg3i>lG;3uYEKk_jlWwzK&8|i)pG_^o zi9&$)@vb~vIH|hTL^!DC3rT`}Sqpln(=k1kp7sWVULNO$Q3T=`64NK@4HLekPkDn{ zES-*_Y*F_H4J2}=X@;g1-!-8blEz%~bb)Ye1!%(tw%x+A6rh(Ui3;L3KPIAJ`7&BY zn~l9+&Bf*i7sVFmX&jJ`0pQK=?VDrt>uYLlZQ{A6R^9Siix=Lm35RRw^;L}~MlXJ1 zK2gTlwK>efa;;6pmqZiynh%gKp{b%C^ioZ4kQ=3ti50NYfESDBT*VZYWS!Ur8(WF0 z@Dem*K17_wu) zQcbGCa2}vgKqwy$BPCBExW%KPRniSW0~|d73jB>ZW@yDXyS0z@!~N2vQksB)tLSXR zf&rprr5}asxKj|G#l2Ys4dM!sTCI_}<$>+oOUD>Oh?eO^B6}8gl z>u0f24f5lAuiQ7R=du;SN{L@L0{}*QEd3s`ffvkZkY~9&?BU_wCN4?8Z%g-m?g=7B z-+Fa;t2X-d!xP}}h`#N78)q;}In-4RS@&2&bO-Twl8F@Ydm1 zza{}9kJsn%m1=Kz9`7nx1dyV(Rg%#N{>>@0gPyC17uz7+qj)-~e<%PxQ{IN>0@W!&VG zd*w!}bb|$c%vz^w?@duLvc_Re11cIah5uU9I5Q01c!M?TI1o`3?BXA`(j6Dj#f)KS z=06~?!r+F6wU?LyxYhvI4hH=z81V3b43{vt#)(tRp$LiTTr|Dh$eMPgcrg<)qqG zPA)-6xdEMr)u#*{a)r@4HnP64sbiVnzpSIFas9|x>(wbozV_j{AyMX*{c?|ga7XJHI9A35R@QRl9_LljOxvecVv?>?e*)-lSWp@U1tA43X9=D3V)W=E|V zy6sKQ%I=aVgZY6#LbM0Pw?uVP^ziqAdPhLAA(Uo>zz)SQ2(SQkwDIKHoGO}u%1GP%AvzNV>jM>4siv#vYl3rvoUO$L0i z?mCgyvSP=sJ=yG@T{~8^Z%eiAQ`4hk+gn?=kBz3)eXXf&?UKHH=+0HE?i^ZP@^#TZ z`Y`8eq7~wa)cnm{*c~-6~$O>Xb2UoO*cEs^>uRgnGyf zta&9IkZzHlYT-NbV9a6I?0_0_-LXiV3z<^v*cUJPM8%w z#mEXF>qP^Eki>cT2BbPrUA%yt1_lJ12L}vD0Cx0_*3mNbW2TE?f;Pz0pqG}MslZZ# z5>%?5E3z}=hE)LE1U3LBY3N2WirS7B-}eov;@r8x(qBXKdQp@8@uJ@-B_fw_v;pnw zz)_N`S*lE0m6PraVQWFjLuM1w=|4U2+;b1mbjhD%-L_;ZZF}xH!rAAZ6XqMV3B1=a zX3-`uYtwzhHl>oddwfxwXxOHa(7#g9vl6OB0132GZRa!rZ>qFTSAeK-1h0S>(`(C^li5PgAy|Fd9<2i>b`C3LhimD#|8$D?dWrd)@|D- z8>K0h{MoUxW<+z+q>cN8|K!Y1g_=8}+KF2_J8wCmMLU{93_NNcX9!n-Cxi!1+fud~ z96UfY2-Y&6if=fN#D=vNQM92ZQzGNEJ!POk@!vrDGg=FtAIT zwzBK3?n^M>fRe21aOiN6-aP^1+bxpD}aT9gI#?2=*t()d+3e6{^g>nBjx)@ zf-f5)_VPthi0iX+0k^OZ(0UBOaFgur1s4~3pNGo@g^Q_TF*IG5HCl`q)INH}(zUTzEs}|So8!~l z9^&H?NCnDbZLnVRi==UFd_0ymv1ahn&x28$%+z>%_~SfFV+S!Id=YpZ#5&OcFzRp; zW2LQvg8>2pf}u;=EXXKB>lD|iAKC-Ppt;P;C2nEOQ?Lp|BRc`@1;G0dBP%^xC22Ng zYquoTia2$L#ldR5W4@54x@bU{pMj}skULCGgrV~4_+K+w5|kB#hYc4GXt1ss2%t70 zJq4F0VyZd`mjarxzvc6@WWIXLkM`FZahWeew9J!uDJQ^V5+I0JE(5foxvGr^v8f^`eWM}XGQ3xXC0$qd z4!5i~KQPhS-@oGS%a<>=4-WEwY`(RV(r0xlHGGB-leq;mXXK*`rlU^`lB7c}RG@^K z2dIJ=m;gi#YlK`#&zgok227X6NOC#gE>N-_2n!d)8(SXDJ z^MaR}FG*XLAht;EOak3O6sSZ*A%Q{q$DFF>+D{G+o@~#l`l*|5K6UD55x!PxF-4r8 ze{K0)s(RP*#B%)aQhRQ?si)^A5xhFlsnI%4+3QG{o&eHWKb!Nw_5&!@b=x|E#TDuZ z<3`E$f$2(EUj|yILk@*4=^CwgIX4zHWPX7pfon8p>eJI`5^ctB&}IjR*k3+4>6ZkU z*JyLru-aVUxgN-TH7pFf8w1E>0H^q6Ao(dtEIbGt#5bbNdC*t`sHaQ1F)?B4mjA4%gL;6k1>1ZL zEb}T`NmfNjn+2Q#hQV)f2AEeff)|U|5?lRJQ$6t^fNWgLP3JUtOYHSTI6&+rEHml% z+|Y@;Xq;)fvD9ua8Av8(RMaF5(8Fv#+Qgb!8e^2jQ47{IsX{vwr!u6R)$_azV=)IH zlVO9u`Z2f9>F~L$Yb1BX6HQk;Jx-@by6=;FpWkIRIxH&(>?UKu26u&19(Kx7Wwq1i zt_)S1ukh1m>-033B=&n2TLV;Nxw(Il@0V8zcwRwrbO5`Kjs{_CzyLxxSCZ112w4~4 zXC-Vuw(4~8Z=|8k=1u%7<`33A{`tq((UU!P&mXPMj^DXE)z|OJ^>m#1<3H)!Y5p)W z#vj}WWZEbSQQ?mM24}ERZpf!rUVP|JdpdH?^opGd&oC@v2jr`#WCNV@SN;;&yT<}kFyjTVY}E7U@5o2TAHLs zLcfFs!}EFJ`SPkIWA>6kH&Z5ay9E=1A;2BZk)0%+{QGP?78`jtz2n(;kI=g@7HgCy zubuwVKwH}YxkGIO+5TEJx%TF@18vf}L-FjPcaP9J8$UGiZhEJO>gtBl*UhN2+8Oxf zKwIl-xlWM>rPQ9?Z9r8w!z1X>V)`m9dysSHwQuKQt=rUzNeG==(mA_I*M>v}QNem_ z6d;9HA)ieczQ z&6+g~WY-9hkpZR#gKUjpXeNk{_0o(RtTPGT;RP!Px7V6_)FHDPi)8E!-`>c7y!AuxTByC}yH1ofC zde77NOJAp{&Ki@dShV^R zeSw_6Lx0e%N>jAvr$RrroJ#$D`O@$u{EMTd4y_4VZ|a2?FI^hCbct(rm$bA4{Ob(Q zb=H*6YjtXp`lK^I5<6*a#hQ*B`jnxImyA*X1FKuD1iT9iOri0C^XE%{YfL%@V6QclC!_di zDI4W5Ch*evF;&0@0DBp1@fb~luEdmeJIe;-^RxF$Z;ZeAV(Bk>V6=(F|4~XqCN)X4 zNV_gAS~N>*w)DpAN;JVD1&bk;z|_V^Or!*@|H{5f&|30oCFd7$p`V3NS#Jy2U$$P= zxRtjYvWJ^&CH6vbEF8>y5J{DM7!xYMW#Hs{9+?`QdUSN^%IK9xH_u*#s1eb2?$Khv z|6a|!$WLqLi;y%29;ISiM6ppmL|_ZO8$a=)b%i8q?-$+Ess`tyJ61~AtvVIeP5lFm zGIUddUH~AafPv5};KVrTY7;E>1(J4!gE)ixc+8uhV|gz@P_mJ;oF6jT^rIN;BR7c= z@n36R?ZHv)qQ+mMLFsvK&z?O!-h5HJC)s%Vbk4tB`udSaXm+Eb0%Q?wP8a%*S7;Qf zGZl6QP7~Fq8yZ?#8t~9tLV`|~MC79sH#nP~ z&unP8q3s!4LH1qJ6v};JQz=V_&IHh!HAo=UgXUSn73YF;zsA@uVQe0>n_wGpH|r2P!#+Z^2b7kSZPiH|X5aEC*}=pukJ5=033W;m zV!t@Qfz(Hb@+6nx%0m*1PIvmOW1Ir+?cvPEGO>_}0s6eMU~+KbN*F5HWvOOK5mS<4 zb$D)QhzBox>%xU^@!$&|!c&})Rkg9rS5qZbY=JNuh(}iBvTC}zDijPV^3cZ|)t*=| zSQ`j5c=RoSWjN~^$VD4{8#gvaB8~M?NTe4eB}68YkRolYSd%NP8(Imua)?iB{8#2v z+&}cg-l0!vg`tNZHlG?A+Bh^+jI_7-s;lF%$xwBr+v)aIwI!M}Znxxid%V7yyyS2@ zYCP4xnn3cE$?D1tg;k^eU<2Rzy?7=QPoy&3A51kbPldvAM}FhV{*B$RYT7nU=nHkY zA;-9N#ud)n)^!D{j5}zXgffLhpkN)Msq%fv9pgv($f7>J_T*pe%t0FC@p(gKY}g%Xj|8$+f}d`8X9e|7t#l!le>K-oTUQ-ViVnXDzH9Bg;T#$%8}S z=qQ{3Mq%HR&`^k&b@z6qa7Kl@nfX*fNlLBnY3gZ9dM}#K>@}a2T+vPWL~rEw*!s3N z*3Vp$mvh(Nm-gmg$?rA4JUaR?&)w6!d33C0FP@=4DJ&mtUv(rmGcU;7j+@hPEjw?@4_3F@imTR zVe=WT&tKxr(QOJEgXoXhdVVb+lERtMXRf-30K%M^~@k0G$h{L^n5GK0CMg?cA8iV+}GG`{#nZqQs{zrX?-^0=^9WO-Mv zx6s|2>FFivgPTlYR|I#TyK=A?$l(MG#nOp@YeQwD(ohlGzGu(&SVe=L!sGmH! zL)Lekoa9^{+^HR?tKN0TmMwSes;)br?HrUH9m9Kaxjn-j=u^x`(gC-1q?LhyTW2g~ zH!Q7brL6mlIG~lr{3o~STTl8!4GkeFj<?3Lj6)DtP)3%wEP4M3Tmzv&HfotN3xlQ^WoQH8vQBI@NsGS(-KR`%)H|iMu?Hu(p&3fsOJwraFZ= zS{@FAnQkYMI%DS<5YUzsGYnnU#H9SX?E%BTMDu&c1RKAwiU`pO8B<_AOhJ@OgmDzF zCZKphI>9(3;0NSF;3JM3bPXyaDFMd$tnhDJW+a2OaqalGq{C*JQf_MIK(>PaJfntk{!&PhRi?Bm8(uC)|RsnQHV-$C!H0Hz@6%Q}K)&#RREL<2oLg3Nh9Vlnm z{2t{vzNJw(E;ZZPGFhjrg47=7jBTfK_^!eYNu`u4p;gpD)40RSxF$16!;V6-kwJ$* zjWogSm*kOz02u+~35`o|I_epyhaNnV2PyQ!aPgA>ln9GAN@xH;1N6^B6qIf-*f#k< zhBTOrWavadbz*3ooi{)IF24UfPRi*MCh;<-&YO?Ei{Et~*>R@H)3PSGC*6xlDura( z-IHY4zBHGVa9{6mzwy>vM%$JHD_0(%GnWG^OIRywgq3f-RZ1uScnMK4$VL6oiFMwc z$26-Qbm@gp{X6=hJ!OK{igkpgr;b~iprqjx9gc8~2|jMGH4h{pFqX3Iqkh8g z@5?`v4V=F8vUNE3z@a*BnTzx7(vWd-?26D;=t6Irmxgbj#uKdrzlE($P0G`61~dM) zuF`UlkCS)q4}7P7q(0^-o}(jgI`FprDk2rSe%p5fevVW6(i)TB)#lFx-)wTk>PNU# zRz+0hhNy=nSUmn!fB5+6JE=c-+`pwu3V-;hHJ$cE?3;$oyBXk;0Q{>s^t_=HwkNVb z2?sS87x~~Y`gzA?U=iVh1YfENEc11&_HEwnyZemq+<)+0e#-Z?Z`FMNHQ#ScvxW!E zANzQR`Ar|+Y(C-s@XP<;|L3>-=I^-TH-Eqje#r5=D$LKw+8iSR$vi9juk%!Vcs{Gb zJd6F%fM*7_#g%|G1n`pX?+6BiYHhZ*HmC-R z7s_JNL8R0oM@5N_;)U`UA6SAT>bg7bSOr6vxbQ(Ji{h7J;tinNxlMbRvcbboM43fcj*MF^h9Xq)9JyjCW;ws}e0O zr#|?Jk*1OC?ce^}$5b_%zwdTgkHua64}Rj$Hw+(I8?DR?#YFP$|NU>TKn@_hn3u6g z8=WUT)=g$klsW*?bCn=tMoQG?YC*BtE-&*Vu>s6Xh3-~g9 zV@9mLWSs)vr`v$ysFE(`kg;yS(SQ^j|QsEH^n$RhEl#dleoZk73| z^tctp_=p}Ff-lsO)rKsw}1 z95om^=p3byBuFqIoc`nF|GcxN|F^6P0zaOYgFpXy$)B5^({YMxAYMUxDjw7m--(0d zA^&Yhg=opn6yE(-OI8w9qd1&q`=xlvKei-qX*tBX3uUr)ePc;GRKC|vdud5t1LEY^ z5=V8)(#R^y3^?8P8T=_Y4K5CcIENGYe&_F95!bNm1Fm1W{qA!W@rwS64^(`# z;_oV6_e4D7p6^vgE5|CoQ2A1oR&}oG`Dz9u`c2i3RX<<-D{ss@=6%BZoG

    %>5G!E9d;po#12=2c3%XA;0_N`e8{oF62b@VFl-07 zDP*NP5PqK>cH-t++zz{tzReC-;@n$2TVXQEC*9 N%EGLUS-#`*e*qFO!Ds*g literal 0 HcmV?d00001 diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce.woff b/data/web/rc/program/js/tinymce/skins/lightgray/fonts/tinymce.woff new file mode 100644 index 0000000000000000000000000000000000000000..74b50f4c3001da7fdfffd8638213dcf1a396da78 GIT binary patch literal 17484 zcmdsed3+pKo#%U1eW)dMt6P0kt97_r?e3O!v|4JFTDB#*EZOp*C|2y)PMkQAV=F%J zeT0x9Glk8VU?#!KHA6PRVw?<_K!DEz*-glNrgnhrz$Se1VY3V{6IPHVgCOCe7CHud1b%Y{!$C&;GO3{p#KK?|!e|yJcjAafWBz4XjG|%!*TZ@v~)HXE!n{kUBxG zrnc%cdyninj>q^-Isp8f6pnTNspiml_lrjfB1cOBkeK9`aePL{>rBY4ovRZ z$Jm-aWl>rAQ5S(&z6&Of8No1;K=EFk%oHwx8!~yg+6fj*j|)d`vA(!lKbA| zPj5c5=U&ts`XJ(Q;T~k4Ji6z|B+}3?KTq!R%^~OUW2a7IzU}knWQ1gSmS1E}jPcXb z3y6Qz^7$`Wo_i24f4ILqMq!PyU)?Jka|Y97IHZU*g-=ghyhSevH6V||4R}+j2Ik;V z_(Q1YWD?Ti(=F5LYgMoLUTga~pQ)IsnhDH=XBuZ(W?E-DX4IL1nYA-}e(~flzVOT5 zUw-cOL$AO1`pa(|dc%0*_rJP#t~fV`w$SG^n{IuLz2<$b_2+Dci8ewr4Kr!cMs8;1 z%o?=u1lmwV8!s$rgU`Jhcf{q`%2;2lF}g_^RW>Q>lp&>G=~41Zm(r=UD{V@3`1$a+ z!ULffLsh{igO3GkYM-q=TkEiACI<5FcyY!tn;Nl7Rx=V~g_UAy7uNTk)3DNW1_op> z2Ou$kjY$OX%LkGOqVwX+NdfUvrN|KkSH_L;F=0wn=@qmSP(nb zg?2Joo=h~m!hujEpXlyY13hVX6IYTdUcrzHd1<8eA}^wZ^G!S~f9Rp;c*2Y)Iy)26 zbfPn{UUo>AWta3dkGmLmdpvGF?Wk~=oJ+rdD2n{qDN%GHF&>dz@@2^(&pu7X{;Vz@e*F4H%UXzwN{j)^7`8*!v8rxR zof@nu3ns$i7r?vZP-vD(dQm4wVREvrYuFl{i#IiO&Gr<#E!p-(eWTQ%ajh1w*`CvG zhnKg<#ptL}^WQQ?Yt{>IF~-u!O1_x0hIwncSh^#C#gAkCy4enP7yA%nsVr~fncyJr zNoPFV$3qb%=uS4f00G$ee0MLlJX26y5j)nK&Nu-a;-73z18CG9Dr5cg09gQR$W;Ig z1BAOH2&24Jk|3;9-YSX0R(ZGlN6k04G-`8EJmv??50F2nHMZQ`JmAYmR>xbmC0m-^ zYuCD)Taw#a;;SQh-$3y-SD>mY>Z`7+s&1^Vu5dYB{;H}vUv;$Fia(rE)f61>M!c%7 z+83>=3ZPVl$d6Y0>Z+>zBL07xlNx8ybsN`3O`Yo^FvqlH^T4HiB$8}y*_$02%IY28RE7S^Tdu0E`<$AluG8wQ7*(LEvd&vwS6yX~(i(M?;($TW2SI1* zS(>%74wffu>`Av-uVz;xmd~aZ;Y1<8`*>F#E}T@|Y9bs|^MxcqzN`hk)9IKVOHX@) zK`)PU!zcoA42kKJ^@a&w(x<#ZEtXElP`0Rhg9Z{g(=U zsa3bU*5diMYr^3gdVNi!iP4K6n@^N6c5M!`uv}|X@g>p3z2*btOK7U72fb9&8{|eQ zWMT!ZG~mVJIae`-C0QqS!NyjiD!c^Em=6(WF}Wq-1%$ScdQ??MujYW1AVc`enq9#B z+R^~VRDuhO)&*E2c7xF#l&D-LkW`auFq{V{6cEaX!$`?f2yXFcXq9vW&;UmdfC7JG zju~3<&2H^u{cyiBsgx#Q;0ih$v0#8GS?NdNI_?yNXK`;9L4&wLB-i?ZC+mi_*8keJ zc_8%;ZO@grE&+xN2A;+=2M6nJVgnd&caszj`J`lXR#G!PgHk>$2%CG5C$63KlkC=k zWO86@mV7>P-{sxfnGTQNT~RA-x^@;T)gV8<`|^DwdM;ZLtd#gQGXP+;$I>4l8+gHt z26>jd!yX>)ZQ_#jhqiRz=bs>A^zBziwrFEdKRgKzkLcUZM_xDIV4S;bxx$BrR1a6v zJ|0oh(jZqPjd1FT&-bO<4sIEF_1n_lzilGHbWA?{^w>!reEkt8IA|92zbE?E*h#bz z=`C;&`?SjqK2Q*3yapivc_&5&lwN~uqT2-sFwL$S?g}mAf=5tB#w`RJN(bvek%bCW z3VgtBECXQ&d}R&q?ctg?e*ZA@l;;+M76qQS5qEIrCy<{l1JBK03?z-8B{H=Q8!P7yTgo zn5WVqul4&Q=<008UIowP)-&0)Qtd+cooYSSaTXv*nu|@-yV)c=$d0fR>0@W!&VGd*ynobe#o$%vz_b?@duLvc^G811cIah5uU9I5Q01 zc%3!t*cVY0?Bcsy>5lX0V#Y8u^B)jcVQ@pk+Dps;Tx)=92ZR0<40w1zhD#V+WRfvurT3W|B`5+DjK%`mRBGRnT@_Z(ma%55C%!Op5*mVZ z>yl>DG_6Px{Zf}QD{3Oe5_+vnB8qr0Hya*h$jp6g3~)%$&>d;yZsHvYwb1O7+&(!R zYLb*DIo~}f6$WLsCo5&La#HOoCzl|k+Qjaexx#22A6?hj)UnL(U)IsoxNda3 z^~#h(U;oJX_(#5e$o8>Tl9sAB1ap{rhkElZO_bFZtzcdf)0iO}lEIv0gYZas4^JdL zJkPmC;s7=XYzGoQBe5U5Lc32XmXBJnAIRU4H)Frs5Z2gctPECymVwrQ79dy>UqR3y zy!Bwjcu4rj*Z@JBim>&ovM0-$tOH?OC4}Tx1cLXFGLTN?_ z>`)AY01E*!U|CcOAVZMD6%|6h#I}6w-0}AI{V4j|Y6Q?mCgyvSRzrUD@oeo!eKmZ%wuCQPX4N+ge+4a>D zbdoz0@Xvs9V1Dkt3;!q$S4hs-9V(|>y4x#u3B>5@Ok zx^2l++WOpcgtN~*C(Ji!6L_y<%%V+R)~5TqZAv9^_voTF(XdS;p?{^IXC+jN01}uB zvIxOjNvK&+MM#o1L3B%4XE403t^J9@guZE$K2b>YZ|yR5jkA$^ws)4OR_FG6Ml^kn zeLuYM&f|mQf3|=1>ivH8NBl1aKP8jqC)p7Xa_WY$Mu6t0c{)Z0(k$S`nx2usB$)cgz>kR2K~h^D{7Y4RVL6i7-@N z9sjE)OMM)PD09%cd|1*Jh*5X9s&;ql8#d_O>2A-n)6I!TqaEvEIaaFc`??I;#aE1T4@rk zAXl~VAU0J5rEfOGTSj)Pu%zqi?va*t<_9NR`}gT$AIb57)dS%+yzS317YEU zcms@sM5GdBk_^3j=b53QGdsKW`e?(ZmX=Ko(R$D!y@)o=iT;B(c68i$u%Azv6HR?e zw7x#7^fj4N7!q*D-jhDokA8$sI4^jq`I59{31W-n&Lq$sM1e{~6cQMuf6S?BuKmQ| z;EDE}s-L{^#*-&+6yd9-7E{Fe`PY}MHlao-HKs5{yM^*zOsLPsU z06R+O84Ge^n@t5*qkqr|(%}Vtg`cs* zxgDGLFbv?64q0xRVU>a&p5Ymt$N98wPE7&Kr>ziyHkf1K&?d#jS zxy|9&`@Gjj>cjEz`tHb=0{NgbD48F~Z`zcHlQBn=aiggF@N)sXMlM%BY3fREwR-vHPsUz z0?5X-+;mQZx5QpggagE0!ZMS7&kdcpi^iFz8%yo>l7VDmMnz5106om+qfM-tr7=cX z9JOFglPa_`aVkT~Sv}9oFcxzFG8s1bs~>m!oDQG6x<+zGJkfNu)8lk{r29U#`}v(_ zqr2Akzj>hzfV~H#mcpazj3~^1?%Z+S8G9rdRAx zc!psSJ0M>@B^%&;2eF;d*oF9u)02L#;@_3)QFA?AgEFZ&NTstCMHbmzS-C3*n+R$6 z_;-=wD=WFsN~wW|8~92Ib3vXu-e1AQ)9YN;AC2}eTd}4+%AL-!>Okbyrd)Gy_1zyHm&C(mIkRPKbJFPe&&B_?kLP5^ zdw=rf_rzCi?HX~{y3<3^=uo<6?;Sfc4l2$AO@Xmx8Fnv$&%|o?t09%676t zz*2Az5*Z0JiMNKqHxP=5v@}VNgnkJNhUfFb^W{}b#_T17Zl+A;b_*s1Lx4M+BRfet z`S;m)EH?TcddIWx8Krk)EY>I;zk2#h18r>s_N_%*S?*L zwQf@_ic_oBM9MRj-T*bV# zr=Q;O?6c+}2Qy(Xk+g+*(#-$n>0M9bFMWfiI%`Nqk>-f$U8_G~cK|u1UPXXj=NbIDw6>BEwv*r$!aCm8 z4$@>fI>g^nrgU@&Ui^&#%+k8yW$oi)`~>MH+dK6oi(aTFf?KOk8M=7MD23`)w^|8! z7Z#X869ebYmHyV4bPT{=YbZ}f@zGK?%3)04rSmkS0yY5H%V3MgXcBZKrmWjpHXxsy zy8zBf6)V@O)UP8QW`R;NuovCHEGeJSz5EDH)dC&2^J|>46y{JHa=n^C20Lu z_Emz`l20o+zlaO{EQHE>TfqLZ^{Qrmwj8pDn`|ZaLUAk{%zO|@m3$ZzD!^sn4_Z0hpZ&$-P5WD=c7ATO4zMB71d4s1B^0sQ-WRqAfQM)JEcUW!}8g{6kXGo^;lDBB82kPknWDtkUBRMce_0{PAH?&>WXs{42A+!7)~T zle4Be+8IQl%IeB$T*?Wy*H_mNe2_jejqywYS}i?m$*r+~Wf3Rcxa4@Hen^vc7*eZs zFH&Z$kR`t_KLv>MLn~w+D1|ua&J=pPm+?rbhC`)IsM4!u<+J>)XS8RA18srBfxvLl zEq`J5X6ck!`3!&S*@0(=1A!yR8ZPR`>9#7)1?PT)v0cR2JZLw;HsEg70d|^wlxPnq zEh*colQzu0|S^jXI^1>D=inT=&) zArk}id1b-m;KG$KRI!XlJ&r3>( zOe7&i+EB43R~Q;z3Au8ZPiy?w=2P51{G;CCPiuwYhaWbd8Xn#-JY0;lxA>~7PolM?W<}_G-upy$?f)deKmQ>;daz`s(m$q0WnM^#9%5Z-$ z)x10v3d_Q_a(Pa z9O@&B`o!83f3YLGbIbb1Pw|QK>4lg%b$-5(97_+jDP%9-@fRo72AAjKRM`Bh`4|e9 zN)UMiPnvr}z(}06Fx)@p8K^9Ia0nb7g%iLi?0XU#3K6sJ-mVnRsBkwkpDHLxsr9{0 zJ#9(v1@oER=ChJ3x-p;Vjocnv*Y?J`nTzsr?%Ms*?))qH-R4)u#vbOmdzv?mjkoN^ zGyErop5BX!0DEvP1*OmQ@J4SAa)=IVDNDAYamc^TKate@itr8k-%E zF5Oi8>`jsZ%Q2>|V*#io4Kx8%9du5?og=d3;bZ_WIk4!4FKmx0PP*g`;bjiTE=1ZX>P7l}c>OZI#<47HKEw6-OT0O{O+jN2{V`k5uLXpXU5b{Wu&688 zZ}ZUVV4G2JB|zsBy2wjBa2A6LRN^Q`PPkzPNyt;PXuhvy3P9-7-!Cccqy%QV7 z2oNe7U-}X^XfCi{U;zzzLf9*^yerpR= z$r9=rGq#*KvBhWznUo&l)1d~Ou;82pU15IME5YxnCsMi>dLz;sfHFOQ(;MVEFS9Kt za7crr7|~Y|t)b0}C$`8sIXHhy6h5uy_^roeibf+&{=<0xKDK=Fcff^kT|56FeUM;tfk8dOHeDVk+Vir`vf1^{v4dsW?vV00D?cDDkiTLSPXfvSFMzWvI|d#w4MdL4;1>GvSa6);5bK1)L!ytH(^G(BeOj6>PbF!bpc&wP39yNyckmqCV1k@NcaeO=eM)z?U|p4k z=!P3R)@?3s-Q97^d+J7SKU63jx_z{+#xI2;bsKM;RMp8_H`YZ$lE3DU6Yn2cabuz~ zRM~#>=7CVN?5zsA1J%v^pVyy#@8QnQ!|y%2zU`J%&*MQwA6TI3TV!Y2@sG~s!#Rsdbm7{wha zjX5z!#ls7*HNor+3l|2D5O_3r2g(^XzehQaZ)p^cOU-t+Ox7u@Ahm}%W80}5zN>IU zQYqz1XccwPH16;+uE|W&u%nP{WY8f{BTaDoC3z$vKt=$0LgNygj(P^_p$CuTK??ma zT>K;eCBov35*h%|0R8h21*IDdwoN{eAq^%Y89EVAofsNt=giOC#`m7XNjZJOBwps! zIrGum_+96a9cP+6Eo*{%(!H3ZQb?BFJxPY`OLIvH_w^3;8*ja3v~AwEa^*fcbJ@4D zgtf9pSozjlrF8O-mJk(#T+|PpSm)iDJRKI7?&gI{mtOePzoQ@8QzmGwSVvfT>bRu| zN*Yel;Rx55;N$jM^FRUuV=3D{>L>jEf&6pX!0Agb8^XB<4%KnXT%2#0hK!SASA?!Y z7kbmYG<^Fso@gETEo^OSQl5S@nDMuDm6n5ioV;^?;Jfvs^)W~BEFF2%fw%2f5vkDi zTfZCdbDYwb)|mXRHh(7gW|JdUKgy-DDxxYkL_I9Q;_c;%5JO_A%_JIQD^YiOzg_gO+EV_qePtb#U28e6xi+V|I`} z;c+Sv*rb{}c^W3FZk(zKp9~&IO}SvJ>cL?xOjl$8v3)!BN(R61O_(Hv9a}D<8)5u$ zifHsI;$pA};3eJP5ex>^+H7rYPz@H(m&K(0NU24RiV_{g^W`xyh}mBr<3C-BW9EeD7F}bDK-cojDL()@5kmwz zdlL>oeX_-v#W^F=q!&6Sy0X1hiI$d=ANu5I(`feg@BHm!sv6DTce|{|;;#M&Kl$hD zM-HrwR%V7{BKh|J{o5hHI)Qa? zf<+eSB7rnj;)=v?E%u1@D$S<_e3`y6BUWFsPJ!>!Z9s8UNf&d-*hLzu*h}g0pAjr^ zo!<4S;%y>oA_@z#Nc>sxHfz(ZGCz|Zx1tyy(L+P{f=okt zQ}AU0VIS@hk$iv`i3`v}xF#7$hn$I{215s(qcoBP2?m7If0F#4ch>a(j#WY6$MbUV z7r!X^bJKG=PH_#yD`-!}gL>jSagaRZzwM|HE!mmEyWeWbN}_5Mhtq7o6fgNlmgFrh zhd6hkOxCV%ENO?z_u6SMEy-&@oE%%?s7_fLS!J04r`tY*KLw}3#o-X=a3Y_4%}QfA z_#Ie@x9vFPy<1mmt5mObaT_GH&bN83Fx5pK*Wvrh%2PVIOH0xWD^7DNx%s)qmz1UY z(!+8{zC(Tl-#5JN7hWCZP5dLYz70E>oM5ZF&RVtK0<)ktlm7-12UD4<3{B`T< z4%hu%-H&6TSWB!wHXgepb~tu6_C)NT>izZ2^*!~UsDHiT_J(^JH#Xke_+;Y?jnhpH zO`8P<+|NEvngyN`rih6B^06<9QiOAEq!IQ}NjICY!^B~G?XUykGj^E1C<)tP7t%-V za3yH>1yBg?@F2y994jm#yx$JPc7U5gR=NY>_uFA7Zob9sunXy1?QkXT{XTa3;L-OT z**git|3P*XAB!CU^Pb!>dGgf3V@Km%*&I#UK1Co#}7_z+|dJ9*WTBgc-Oj_;p5I(c%>>B)WZyWSVywD;K9v13QGkSVC|)98Ia jnmH;)vjEB<5wG8q|kKzxu40~1eAV&{y5e`l1KFoiKNSOWkz C+YCGa literal 0 HcmV?d00001 diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/img/loader.gif b/data/web/rc/program/js/tinymce/skins/lightgray/img/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..c69e937232b24ea30f01c68bbd2ebc798dcecfcb GIT binary patch literal 2608 zcmdVcdr(tX9tZGC9yiG~=H_*Q-0%n(kWqP*D#hw{AQu8;1%gl-Hrf&{2?48KX;hHy z3Ze*zEz4t3XdUFyLbNPUYlA`|B}P=N1fqtL1*}S;87#|-W9v<#G;ul(e%d3)N(^9c$d2Dz{7}?ErjNd;{EMKkCsk21~b9Gvg zDo<7L=3Z5HNbVlZUcm1eg#o#CZCJU`3IYHwM->zCd?uYrF3vKFeM}v?f+%s?E>ly|3W25ry9#NNbTx-}0ON58dTrs^ix{_1O0Wh~SVSBlH)Ajn zPn^Gbjz}PCtN@#keR&hK&Dhl-b$kZ8^S)x#dh0{7X=X%CCJk7P1PSO>T&S8I4{#Lg zb5#)o=;!ZP*1nM{cI4@(x7o27*SA()NHmrn67aN@Pmi~(i_SnrjYnwh36aG%!@i0d zqbvfa44f|?OG4ntP|nbjhEl1)Yp6ZN@yjy zy4==QmLy%t;ps3R?~f2KfTTI|2?q8dFd6^z5GF+Xa&Y)sjG)hxit80pPcOP zJ z*LW{SyGHD%hUotV+W%I}fBLAIx!8|7#}$;clKQ+{&FjDqGQ2ZNx(lYM3*%~}ILnao zM`aui55~ZFJlu^!5rdA9Q_7H68H_;##u{x(Yn-vSfIRCb^Nqsg zGRS!Egm>h+o<}LeV4&CLReo9FrDjDvs}8?JwC)#Qs|ie=r?~xUh)&*d`Fx>FG}%X# zNdtDHBKhLPC0wpooFDAQKL%*6T|ULH$=wX!NhcasgD3d;-d$I6yRK3yN+E~C1335_iLOt+*9uvSZ`>*KA}vm}08wRq=>5l|t*Na&jR z-C1&C`nkEk#sB|@yyt-#fXngP04My zm7u$Q%EJbHp`>~`5W&L{W!6`y&}LMS;jfUpgO~7TLVMRZ9IC)IZp0A${`yp0{&wco z#1nx@XMkhqeK%7?RE7JdLr1^nwFfaJ0Q&Lv?WNJ%9}VSJsNY2+UYs2%EU0J~ayFXv zi*?7KCXQHkD)O6!0Q%4N+HTODHxJ{kQSuQX$l-rSwkwh(zMkdfzxyGwl@yHC)C4p< z&n2%8#M?)Q@mgHL1ot8`SFdSEj9ye|jHy+U8#@HoUExG=@AVkRAe_qYm4EpzK6L*& zh`)26?V#f4#_h^P9G^%>h2-H3)$QP zQovu6J9qDvsxqweDdNNa!Lb?L4_UF{tLX_nN7r0U_vF14YKcGR-*Gl} zx3oG)bzf|65dBxD-;2ZCp??K;+TuQ9onnK?==5hzbkb^r_g>z4#D8mcv8(+XdoszA zCx-qhdgxMNMotj}SiL_6V(tLcsK7(M(r(%u<}QrVfOvyK6_;~NOTlPGfX@M7S5YQF z&*$(ylJMHJt^_aQeu{C6NaTE$G3HNN@_SnN8YcaKn%`)F@~L1x+ah7-gEJPpc6w%3 zyX}r+Qk$4RHZzfH){e~F*qJ{d*L8a6n4;U?+{de0-t)mal#TVxe)3F}^UBh+zd T)6_**#cgp_+?JL9(ew3BlNF>u literal 0 HcmV?d00001 diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/img/object.gif b/data/web/rc/program/js/tinymce/skins/lightgray/img/object.gif new file mode 100644 index 0000000000000000000000000000000000000000..cccd7f023fb80908cb33bb7d9604236cd21b7ae7 GIT binary patch literal 152 zcmV;J0B8S4Nk%w1VG#fg0J9GO<>lo+KR<78Z?v?uS65g4{r%Y3*xlXT%F4>`@9+2b z_ww@cot>Tk|Nk>HGXMYpA^8LW000jFEC2ui01*HU000C<(8)=wd#<&tyXIMjHBV`d zBSi|xsj3(;nD0kQ0aJq8eLH~x02P|t2!_J&Wqb%0io?#xD-()--()-(); +// Example: @btn-primary-bg-hover-hlight; + +@prefix: mce; + +// Default font +@font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +@font-size: 14px; +@line-height: 20px; +@has-gradients: false; +@has-radius: false; +@has-boxshadow: false; +@has-button-borders: false; + +// Text colors +@text: #333; +@text-inverse: white; +@text-disabled: #aaa; +@text-shadow: 0 1px 1px hsla(hue(@text-inverse), saturation(@text-inverse), lightness(@text-inverse), 0.75); +@text-error: #b94a48; +@text-warning: #c09853; +@text-success: #468847; + +// Button +@btn-text: @text; +@btn-text-shadow: none; +@btn-border-top: transparent; +@btn-border-right: transparent; +@btn-border-bottom: transparent; +@btn-border-left: transparent; +@btn-caret-border: @btn-text; +@btn-text-disabled: @text-disabled; +@btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05); +@btn-box-shadow-active: inset 0 2px 4px rgba(0, 0, 0, .15), 0 1px 2px rgba(0, 0, 0, .05); +@btn-box-disabled-opacity: 0.4; +@btn-bg: white; +@btn-bg-hlight: #D9D9D9; +@btn-bg-hover: darken(@btn-bg, 5%); +@btn-bg-hlight-hover: darken(@btn-bg-hlight, 5%); +@btn-border-hover: darken(@btn-bg, 20%); +@btn-border-active: darken(@btn-bg, 20%); +@btn-padding: 4px 8px; + +@btn-primary-bg: #2980b9; +@btn-primary-bg-hlight: #3498db; +@btn-primary-bg-hover: darken(@btn-primary-bg, 5%); +@btn-primary-bg-hover-hlight: darken(@btn-primary-bg-hlight, 5%); +@btn-primary-text: #fff; +@btn-primary-text-shadow: none; +@btn-primary-border-top: mix(@btn-border-top, @btn-primary-bg, 50%); +@btn-primary-border-right: mix(@btn-border-right, @btn-primary-bg, 50%); +@btn-primary-border-bottom: mix(@btn-border-bottom, @btn-primary-bg, 50%); +@btn-primary-border-left: mix(@btn-border-left, @btn-primary-bg, 50%); +@btn-primary-border: transparent; +@btn-primary-border-hover: transparent; + +// Button group +@btn-group-border-width: 1px; + +// Menu +@menuitem-text: @text; +@menu-bg: #fff; +@menu-margin: -1px 0 0; +@menu-border: rgba(0, 0, 0, 0.2); +@menubar-border: mix(@panel-border, @panel-bg, 60%); +@menuitem-text-inverse: @text-inverse; +@menubar-bg-active: darken(@btn-bg, 10%); +@menuitem-bg-hover: #0081C2; +@menuitem-bg-selected: #2980b9; +@menuitem-bg-selected-hlight: #3498db; +@menuitem-bg-disabled: #CCC; +@menuitem-caret: @menuitem-text; +@menuitem-caret-selected: @menuitem-text-inverse; +@menuitem-separator-top: transparent; +@menuitem-separator-bottom: rgba(0,0,0,0.1); +@menuitem-bg-active: #3498db; +@menuitem-text-active: @text-inverse; +@menuitem-preview-border-active: #aaa; +@menubar-menubtn-text: #333; + +// Panel +@panel-border: rgba(0,0,0,.2); +@panel-bg: #FDFDFD; +@panel-bg-hlight: #DDD; + +// Tabs +@tab-border: #c5c5c5; +@tab-bg: #ffffff; +@tab-bg-hover: #FDFDFD; +@tab-bg-active: #FDFDFD; +@tabs-bg: #FFF; + +// Tooltip +@tooltip-bg: #000; +@tooltip-text: white; +@tooltip-font-size: 11px; + +// Notification +@notification-font-size: 14px; +@notification-bg: #F0F0F0; +@notification-border: #CCCCCC; +@notification-text: #333333; +@notification-success-bg: #dff0d8; +@notification-success-border: #d6e9c6; +@notification-success-text: #3c763d; +@notification-info-bg: #d9edf7; +@notification-info-border: #779ECB; +@notification-info-text: #31708f; +@notification-warning-bg: #fcf8e3; +@notification-warning-border: #faebcc; +@notification-warning-text: #8a6d3b; +@notification-error-bg: #f2dede; +@notification-error-border: #ebccd1; +@notification-error-text: #a94442; + +// Infobox +@infobox-bg: @notification-bg; +@infobox-border: @notification-border; +@infobox-text: @notification-text; +@infobox-success-bg: @notification-success-bg; +@infobox-success-border: @notification-success-border; +@infobox-success-text: @notification-success-text; +@infobox-info-bg: @notification-info-bg; +@infobox-info-border: @notification-info-border; +@infobox-info-text: @notification-info-text; +@infobox-warning-bg: @notification-warning-bg; +@infobox-warning-border: @notification-warning-border; +@infobox-warning-text: @notification-warning-text; +@infobox-error-bg: @notification-error-bg; +@infobox-error-border: @notification-error-border; +@infobox-error-text: @notification-error-text; + +// Window +@window-border: #c5c5c5; +@window-head-border: @window-border; +@window-head-close: mix(@text, @window-bg, 60%); +@window-head-close-hover: mix(@text, @window-bg, 40%); +@window-foot-border: @window-border; +@window-foot-bg: @window-bg; +@window-fullscreen-bg: #FFF; +@window-modalblock-bg: #000; +@window-modalblock-opacity: 0.3; +@window-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +@window-bg: #FFF; +@window-title-font-size: 20px; + +// Popover +@popover-bg: @window-bg; +@popover-arrow-width: 10px; +@popover-arrow: @window-bg; +@popover-arrow-outer-width: @popover-arrow-width + 1; +@popover-arrow-outer: rgba(0, 0, 0, 0.25); + +// Floatpanel +@floatpanel-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + +// Checkbox +@checkbox-bg: @btn-bg; +@checkbox-bg-hlight: @btn-bg-hlight; +@checkbox-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05); +@checkbox-border: #c5c5c5; +@checkbox-border-focus: rgba(82, 168, 236, .8); + +// Path +@path-text: @text; +@path-bg-focus: #666; +@path-text-focus: #fff; + +// Textbox +@textbox-text-placeholder: #aaa; +@textbox-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +@textbox-bg: #fff; +@textbox-border: #c5c5c5; +@textbox-border-focus: #3498db; + +// Selectbox +@selectbox-bg: @textbox-bg; +@selectbox-border: @textbox-border; + +// Throbber +@throbber-bg: #fff url('img/loader.gif') no-repeat center center; + +// Combobox +@combobox-border: @textbox-border; +@combobox-error-text: @text-error; +@combobox-warning-text: @text-warning; +@combobox-success-text: @text-success; + +// Colorpicker +@colorpicker-border: @textbox-border; +@colorpicker-hue-bg: #fff; +@colorpicker-hue-border: #333; + +// Grid +@grid-bg-active: @menuitem-bg-active; +@grid-border-active: @menuitem-bg-active; +@grid-border: #d6d6d6; + +// Misc +@colorbtn-backcolor-bg: #BBB; +@iframe-border: @panel-border; + +// Slider +@slider-border: #AAA; +@slider-bg: #EEE; +@slider-handle-border: #BBB; +@slider-handle-bg: #DDD; +@slider-handle-bg-focus: #BBB; + +// Progress +@progress-border: #ccc; +@progress-bar-bg: #dfdfdf; +@progress-bar-bg-hlight: #cccccc; +@progress-text: @text; + +// Flow layout +@flow-layout-spacing: 2px; + + +// Reset + +.@{prefix}-container, .@{prefix}-container *, .@{prefix}-widget, .@{prefix}-widget *, .@{prefix}-reset { + margin: 0; padding: 0; border: 0; outline: 0; + vertical-align: top; background: transparent; + text-decoration: none; color: @text; + font-family: @font-family; + font-size: @font-size; text-shadow: none; float: none; + position: static; width: auto; height: auto; + white-space: nowrap; cursor: inherit; + -webkit-tap-highlight-color: transparent; + line-height: normal; font-weight: normal; + text-align: left; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; + direction: ltr; + max-width: none; +} + +.@{prefix}-widget button { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.@{prefix}-container *[unselectable] { + -moz-user-select: none; + -webkit-user-select: none; + -o-user-select: none; + user-select: none; +} + + +// Mixins + +.opacity(@opacity) { + opacity: @opacity; + @opacityie: @opacity * 100; + filter: ~"alpha(opacity=@{opacityie})"; + zoom: 1; +} + +.vertical-gradient(@startColor, @endColor) when (@has-gradients = true) { + background-color: mix(@startColor, @endColor, 60%); + background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+ + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+ + background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+ + background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10 + background-image: linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10 + background-repeat: repeat-x; + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)", argb(@startColor), argb(@endColor))); + zoom: 1; +} + +.vertical-gradient(@startColor, @endColor) when (@has-gradients = false) { + background-color: mix(@startColor, @endColor, 60%); +} + +.border-radius(@radius) when (@has-radius = true) { + -webkit-border-radius: @radius; + -moz-border-radius: @radius; + border-radius: @radius; +} + +.box-shadow(@shadowA, @shadowB:X, ...) when (@has-boxshadow = true) { + // Multiple shadow solution from http://toekneestuck.com/blog/2012/05/15/less-css-arguments-variable/ + @props: ~`"@{arguments}".replace(/[\[\]]|\,\sX/g, '')`; + -webkit-box-shadow: @props; + -moz-box-shadow: @props; + box-shadow: @props; +} + +.transition(@transition) { + -webkit-transition: @transition; + transition: @transition; +} + +.inline-block() { + display: inline-block; + *display: inline; + *zoom: 1; +} + +.reset-gradient() { + filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); + background: transparent; +} + + +// Animations + +.@{prefix}-fade { + opacity: 0; + .transition(opacity .15s linear); + + &.@{prefix}-in { + opacity: 1; + } +} + + +.@{prefix}-tinymce { + // Avoid FOUC + visibility: inherit !important; + position: relative; +} + +.@{prefix}-fullscreen { + border: 0; padding: 0; margin: 0; + overflow: hidden; + height: 100%; + z-index: 100; +} + +div.@{prefix}-fullscreen { + position: fixed; + top: 0; left: 0; + width: 100%; + height: auto; +} + +.@{prefix}-tinymce { + display: block; + .border-radius(2px); +} + +.@{prefix}-wordcount { + position: absolute; + top: 0; + right: 0; + padding: 8px; +} + +div.@{prefix}-edit-area { + background: #FFF; + filter: none; +} + +.@{prefix}-statusbar { + position: relative; +} + +.@{prefix}-statusbar .@{prefix}-container-body { + position: relative; +} + +.@{prefix}-fullscreen .@{prefix}-resizehandle { + display: none; +} + +// Charmap + +.@{prefix}-charmap { + border-collapse: collapse; +} + +.@{prefix}-charmap td { + cursor: default; + border: 1px solid @panel-border; + width: 20px; + height: 20px; + line-height: 20px; + text-align: center; + vertical-align: middle; + padding: 2px; +} + +.@{prefix}-charmap td div { + text-align: center; +} + +.@{prefix}-charmap td:hover { + background: @btn-bg-hlight; +} + +.@{prefix}-grid td.@{prefix}-grid-cell div { + border: 1px solid @grid-border; + width: 15px; height: 15px; + margin: 0px; + cursor: pointer; + + &:focus { + border-color: @grid-border-active; + } + + &[disabled] { + cursor: not-allowed; + } +} + +.@{prefix}-grid { + border-spacing: 2px; + border-collapse: separate; + + a { + display: block; + border: 1px solid transparent; + + &:hover, &:focus { + border-color: @grid-border-active; + } + } +} + +.@{prefix}-grid-border { + margin: 0 4px 0 4px; + + a { + border-color: @grid-border; + width: 13px; height: 13px; + } + + a:hover, a.@{prefix}-active { + border-color: @grid-border-active; + background: @grid-bg-active; + } +} + +.@{prefix}-text-center { + text-align: center; +} + +div.@{prefix}-tinymce-inline { + width: 100%; + .box-shadow(none); +} + +.@{prefix}-colorbtn-trans div { + text-align: center; + vertical-align: middle; + font-weight: bold; + font-size: 20px; + line-height: 16px; + color: mix(@text, #fff, 70%); +} + +.@{prefix}-monospace { + font-family: "Courier New", Courier, monospace; +} + +// Reduce double margins between toolbar rows + +.@{prefix}-toolbar-grp when (@has-button-borders = false) { + padding: @flow-layout-spacing 0; +} + +.@{prefix}-toolbar-grp when (@has-button-borders = true) { + padding-bottom: 2px; +} + +.@{prefix}-toolbar-grp .@{prefix}-flow-layout-item { + margin-bottom: 0; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-wordcount { + left: 0; + right: auto; +} + + +// CropRect + +.@{prefix}-croprect-container { + position: absolute; + top: 0; + left: 0; +} + +.@{prefix}-croprect-handle { + position: absolute; + top: 0; left: 0; + width: 20px; height: 20px; + border: 2px solid white; +} + +.@{prefix}-croprect-handle-nw { + border-width: 2px 0 0 2px; + margin: -2px 0 0 -2px; + cursor: nw-resize; + top: 100px; left: 100px; +} + +.@{prefix}-croprect-handle-ne { + border-width: 2px 2px 0 0; + margin: -2px 0 0 -20px; + cursor: ne-resize; + top: 100px; left: 200px; +} + +.@{prefix}-croprect-handle-sw { + border-width: 0 0 2px 2px; + margin: -20px 2px 0 -2px; + cursor: sw-resize; + top: 200px; left: 100px; +} + +.@{prefix}-croprect-handle-se { + border-width: 0 2px 2px 0; + margin: -20px 0 0 -20px; + cursor: se-resize; + top: 200px; left: 200px; +} + +.@{prefix}-croprect-handle-move { + position: absolute; + cursor: move; + border: 0; +} + +.@{prefix}-croprect-block { + .opacity(@window-modalblock-opacity); + position: absolute; + background: black; +} + +.@{prefix}-croprect-handle:focus { + border-color: @textbox-border-focus; +} + +.@{prefix}-croprect-handle-move:focus { + outline: 1px solid @textbox-border-focus; +} + + +// ImagePanel + +.@{prefix}-imagepanel { + overflow: auto; + background: black; +} + +.@{prefix}-imagepanel-bg { + position: absolute; + background: url('data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw=='); +} + +.@{prefix}-imagepanel img { + position: absolute; +} + +.@{prefix}-imagetool.@{prefix}-btn .@{prefix}-ico { + display: block; + width: 20px; + height: 20px; + text-align: center; + line-height: 20px; + font-size: 20px; + padding: 5px; +} + + +// Arrows + +.@{prefix}-arrow-up { + margin-top: 12px; +} + +.@{prefix}-arrow-down { + margin-top: -12px; +} + +.@{prefix}-arrow:before, +.@{prefix}-arrow:after { + position: absolute; + left: 50%; + display: block; + width: 0; + height: 0; + border-style: solid; + border-color: transparent; + content: ""; +} + +.@{prefix}-arrow.@{prefix}-arrow-up:before { + top: -9px; + border-bottom-color: @panel-border; + border-width: 0 9px 9px; + margin-left: -9px; +} + +.@{prefix}-arrow.@{prefix}-arrow-down:before { + bottom: -9px; + border-top-color: @panel-border; + border-width: 9px 9px 0; + margin-left: -9px; +} + +.@{prefix}-arrow.@{prefix}-arrow-up:after { + top: -8px; + border-bottom-color: mix(@panel-bg, @panel-bg-hlight, 60%); + border-width: 0 8px 8px; + margin-left: -8px; +} + +.@{prefix}-arrow.@{prefix}-arrow-down:after { + bottom: -8px; + border-top-color: mix(@panel-bg, @panel-bg-hlight, 60%); + border-width: 8px 8px 0; + margin-left: -8px; +} + +.@{prefix}-arrow.@{prefix}-arrow-left:before, +.@{prefix}-arrow.@{prefix}-arrow-left:after { + margin: 0; +} + +.@{prefix}-arrow.@{prefix}-arrow-left:before { + left: 8px; +} +.@{prefix}-arrow.@{prefix}-arrow-left:after { + left: 9px; +} + +.@{prefix}-arrow.@{prefix}-arrow-right:before, +.@{prefix}-arrow.@{prefix}-arrow-right:after { + left: auto; + margin: 0; +} + +.@{prefix}-arrow.@{prefix}-arrow-right:before { + right: 8px; +} + +.@{prefix}-arrow.@{prefix}-arrow-right:after { + right: 9px; +} + +.@{prefix}-arrow.@{prefix}-arrow-center.@{prefix}-arrow.@{prefix}-arrow-left:before { + left: -9px; + top: 50%; + border-right-color: @panel-border; + border-width: 9px 9px 9px 0; + margin-top: -9px; +} + +.@{prefix}-arrow.@{prefix}-arrow-center.@{prefix}-arrow.@{prefix}-arrow-left:after { + left: -8px; + top: 50%; + border-right-color: mix(@panel-bg, @panel-bg-hlight, 60%); + border-width: 8px 8px 8px 0; + margin-top: -8px; +} + +.@{prefix}-arrow.@{prefix}-arrow-center.@{prefix}-arrow.@{prefix}-arrow-left { + margin-left: 12px; +} + +.@{prefix}-arrow.@{prefix}-arrow-center.@{prefix}-arrow.@{prefix}-arrow-right:before { + right: -9px; + top: 50%; + border-left-color: @panel-border; + border-width: 9px 0 9px 9px; + margin-top: -9px; +} + +.@{prefix}-arrow.@{prefix}-arrow-center.@{prefix}-arrow.@{prefix}-arrow-right:after { + right: -8px; + top: 50%; + border-left-color: mix(@panel-bg, @panel-bg-hlight, 60%); + border-width: 8px 0 8px 8px; + margin-top: -8px; +} + +.@{prefix}-arrow.@{prefix}-arrow-center.@{prefix}-arrow.@{prefix}-arrow-right { + margin-left: -14px; +} + + +// Container + +.@{prefix}-container, .@{prefix}-container-body { + display: block; +} + +.@{prefix}-autoscroll { + overflow: hidden; +} + + +// Scrollbar + +.@{prefix}-scrollbar { + position: absolute; + width: 7px; + height: 100%; + top: 2px; + right: 2px; + .opacity(0.4); +} + +.@{prefix}-scrollbar-h { + top: auto; + right: auto; + left: 2px; + bottom: 2px; + width: 100%; + height: 7px; +} + +.@{prefix}-scrollbar-thumb { + position: absolute; + background-color: #000; + border: 1px solid #888; + border-color: rgba(85, 85, 85, .6); + width: 5px; + height: 100%; + .border-radius(7px); +} + +.@{prefix}-scrollbar-h .@{prefix}-scrollbar-thumb { + width: 100%; + height: 5px; +} + +.@{prefix}-scrollbar:hover, .@{prefix}-scrollbar.@{prefix}-active { + background-color: #AAA; + .opacity(0.6); + .border-radius(7px); +} + +.@{prefix}-scroll { + position: relative; +} + + +// Panel + +.@{prefix}-panel { + border: 0 solid mix(rgb(red(@panel-border), green(@panel-border), blue(@panel-border)), @panel-bg, 20%); + border: 0 solid @panel-border; + .vertical-gradient(@panel-bg, @panel-bg-hlight); +} + + +// FloatPanel + +.@{prefix}-floatpanel { + position: absolute; + .box-shadow(@floatpanel-box-shadow); +} + +.@{prefix}-floatpanel.@{prefix}-fixed { + position: fixed; +} + +// Popover panel + +.@{prefix}-floatpanel .@{prefix}-arrow, +.@{prefix}-floatpanel .@{prefix}-arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.@{prefix}-floatpanel .@{prefix}-arrow { + border-width: @popover-arrow-outer-width; +} + +.@{prefix}-floatpanel .@{prefix}-arrow:after { + border-width: @popover-arrow-width; + content: ""; +} + +.@{prefix}-floatpanel.@{prefix}-popover { + .reset-gradient(); + .border-radius(6px); + .box-shadow(@floatpanel-box-shadow); + top: 0; + left: 0; + background: @popover-bg; + border: 1px solid @panel-border; + border: 1px solid @popover-arrow-outer; + + &.@{prefix}-bottom { + margin-top: @popover-arrow-width; + *margin-top: 0; + + & > .@{prefix}-arrow { + left: 50%; + margin-left: -@popover-arrow-outer-width; + border-top-width: 0; + border-bottom-color: @panel-border; + border-bottom-color: @popover-arrow-outer; + top: -@popover-arrow-outer-width; + + &:after { + top: 1px; + margin-left: -@popover-arrow-width; + border-top-width: 0; + border-bottom-color: @popover-arrow; + } + } + + &.@{prefix}-start { margin-left: -22px; } + &.@{prefix}-start > .@{prefix}-arrow { left: 20px; } + + &.@{prefix}-end { margin-left: 22px; } + &.@{prefix}-end > .@{prefix}-arrow { right: 10px; left: auto; } + } +} + +// Window + +.@{prefix}-fullscreen { + border: 0; padding: 0; margin: 0; + overflow: hidden; + height: 100%; +} + +div.@{prefix}-fullscreen { + position: fixed; + top: 0; left: 0; +} + +#@{prefix}-modal-block { + .opacity(0); + position: fixed; + left: 0; top: 0; + width: 100%; height: 100%; + background: @window-modalblock-bg; +} + +#@{prefix}-modal-block.@{prefix}-in { + .opacity(@window-modalblock-opacity); +} + +.@{prefix}-window-move { + cursor: move; +} + +.@{prefix}-window { + .border-radius(6px); + .box-shadow(@window-box-shadow); + .reset-gradient(); + background: @window-bg; + position: fixed; + top: 0; left: 0; + opacity: 0; + transform: scale(0.1); + transition: transform 100ms ease-in, opacity 150ms ease-in; +} + +.@{prefix}-window.@{prefix}-in { + transform: scale(1); + opacity: 1; +} + +.@{prefix}-window-head { + padding: 9px 15px; + border-bottom: 1px solid @window-head-border; + position: relative; +} + +.@{prefix}-window-head .@{prefix}-close { + position: absolute; + right: 0; + top: 0; + height: 38px; + width: 38px; + text-align: center; + cursor: pointer; + + i { + color: @window-head-close; + } +} + +.@{prefix}-close:hover i { + color: @window-head-close-hover; +} + +.@{prefix}-window-head .@{prefix}-title { + line-height: 20px; + font-size: @window-title-font-size; + font-weight: bold; + text-rendering: optimizelegibility; + padding-right: 20px; +} + +.@{prefix}-window .@{prefix}-container-body { + display: block; +} + +.@{prefix}-foot { + display: block; + background-color: @window-foot-bg; + border-top: 1px solid @window-foot-border; + .border-radius(0 0 6px 6px); +} + +.@{prefix}-window-head .@{prefix}-dragh { + position: absolute; + top: 0; left: 0; + cursor: move; + width: 90%; + height: 100%; +} + +.@{prefix}-window iframe { + width: 100%; + height: 100%; +} + +.@{prefix}-window.@{prefix}-fullscreen, .@{prefix}-window.@{prefix}-fullscreen .@{prefix}-foot { + .border-radius(0); +} + +.@{prefix}-window-body .@{prefix}-listbox { + border-color: @btn-border-hover; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-window-head .@{prefix}-close { + position: absolute; + right: auto; + left: 15px; +} + +.@{prefix}-rtl .@{prefix}-window-head .@{prefix}-dragh { + left: auto; + right: 0; +} + +.@{prefix}-rtl .@{prefix}-window-head .@{prefix}-title { + direction: rtl; + text-align: right; +} + + +// Tooltip + +.@{prefix}-tooltip { + position: absolute; + padding: 5px; + .opacity(0.8); +} + +.@{prefix}-tooltip-inner { + font-size: @tooltip-font-size; + background-color: @tooltip-bg; + color: @tooltip-text; + max-width: 200px; + padding: 5px 8px 4px 8px; + text-align: center; + white-space: normal; +} + +.@{prefix}-tooltip-inner { + .border-radius(3px); +} + +.@{prefix}-tooltip-inner { + .box-shadow(0 0 5px @tooltip-bg); +} + +.@{prefix}-tooltip-arrow { + position: absolute; + width: 0; + height: 0; + line-height: 0; + border: 5px dashed @tooltip-bg; +} + +.@{prefix}-tooltip-arrow-n { + border-bottom-color: @tooltip-bg; +} + +.@{prefix}-tooltip-arrow-s { + border-top-color: @tooltip-bg; +} + +.@{prefix}-tooltip-arrow-e { + border-left-color: @tooltip-bg; +} + +.@{prefix}-tooltip-arrow-w { + border-right-color: @tooltip-bg; +} + +.@{prefix}-tooltip-nw, .@{prefix}-tooltip-sw { + margin-left: -14px; +} + +.@{prefix}-tooltip-ne, .@{prefix}-tooltip-se { + margin-left: 14px; +} + +.@{prefix}-tooltip-n .@{prefix}-tooltip-arrow { + top: 0px; + left: 50%; + margin-left: -5px; + border-bottom-style: solid; + border-top: none; + border-left-color: transparent; + border-right-color: transparent; +} + +.@{prefix}-tooltip-nw .@{prefix}-tooltip-arrow { + top: 0; + left: 10px; + border-bottom-style: solid; + border-top: none; + border-left-color: transparent; + border-right-color: transparent; +} + +.@{prefix}-tooltip-ne .@{prefix}-tooltip-arrow { + top: 0; + right: 10px; + border-bottom-style: solid; + border-top: none; + border-left-color: transparent; + border-right-color: transparent; +} + +.@{prefix}-tooltip-s .@{prefix}-tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-style: solid; + border-bottom: none; + border-left-color: transparent; + border-right-color: transparent; +} + +.@{prefix}-tooltip-sw .@{prefix}-tooltip-arrow { + bottom: 0; + left: 10px; + border-top-style: solid; + border-bottom: none; + border-left-color: transparent; + border-right-color: transparent; +} + +.@{prefix}-tooltip-se .@{prefix}-tooltip-arrow { + bottom: 0; + right: 10px; + border-top-style: solid; + border-bottom: none; + border-left-color: transparent; + border-right-color: transparent; +} + +.@{prefix}-tooltip-e .@{prefix}-tooltip-arrow { + right: 0; + top: 50%; + margin-top: -5px; + border-left-style: solid; + border-right: none; + border-top-color: transparent; + border-bottom-color: transparent; +} + +.@{prefix}-tooltip-w .@{prefix}-tooltip-arrow { + left: 0; + top: 50%; + margin-top: -5px; + border-right-style: solid; + border-left: none; + border-top-color: transparent; + border-bottom-color: transparent; +} + + +// Progress + +.@{prefix}-progress { + display: inline-block; + position: relative; + height: 20px; +} + +.@{prefix}-progress .@{prefix}-bar-container { + display: inline-block; + width: 100px; + height: 100%; + margin-right: 8px; + border: 1px solid @progress-border; + overflow: hidden; + .border-radius(4px); +} + +.@{prefix}-progress .@{prefix}-text { + display: inline-block; + margin-top: auto; + margin-bottom: auto; + font-size: 14px; + width: 40px; + color: @progress-text; +} + +.@{prefix}-bar { + display: block; + width: 0%; + height: 100%; + .vertical-gradient(@progress-bar-bg, @progress-bar-bg-hlight); + .transition(width .2s ease); +} + + +// notification + +.@{prefix}-notification { + position: absolute; + background-color: @notification-bg; + padding: 5px; + margin-top: 5px; + border-width: 1px; + border-style: solid; + border-color: @notification-border; + transition: transform 100ms ease-in, opacity 150ms ease-in; + opacity: 0; +} + +.@{prefix}-notification.@{prefix}-in { + opacity: 1; +} + +.@{prefix}-notification-success { + background-color: @notification-success-bg; + border-color: @notification-success-border; +} + +.@{prefix}-notification-info { + background-color: @notification-info-bg; + border-color: @notification-info-border; +} + +.@{prefix}-notification-warning { + background-color: @notification-warning-bg; + border-color: @notification-warning-border; +} + +.@{prefix}-notification-error { + background-color: @notification-error-bg; + border-color: @notification-error-border; +} + +.@{prefix}-notification.@{prefix}-has-close { + padding-right: 15px; +} + +.@{prefix}-notification .@{prefix}-ico { + margin-top: 5px; +} + +.@{prefix}-notification-inner { + display: inline-block; + font-size: @notification-font-size; + margin: 5px 8px 4px 8px; + text-align: center; + white-space: normal; + color: @notification-info-text; +} + +.@{prefix}-notification-inner a { + text-decoration: underline; + cursor: pointer; +} + +.@{prefix}-notification .@{prefix}-progress { + margin-right: 8px; +} + +.@{prefix}-notification .@{prefix}-progress .@{prefix}-text { + margin-top: 5px; +} + +.@{prefix}-notification *, .@{prefix}-notification .@{prefix}-progress .@{prefix}-text { + color: @notification-text; +} + +.@{prefix}-notification .@{prefix}-progress .@{prefix}-bar-container { + border-color: @notification-border; +} + +.@{prefix}-notification .@{prefix}-progress .@{prefix}-bar-container .@{prefix}-bar { + background-color: @notification-text; +} + +.@{prefix}-notification-success *, .@{prefix}-notification-success .@{prefix}-progress .@{prefix}-text { + color: @notification-success-text; +} + +.@{prefix}-notification-success .@{prefix}-progress .@{prefix}-bar-container { + border-color: @notification-success-border; +} + +.@{prefix}-notification-success .@{prefix}-progress .@{prefix}-bar-container .@{prefix}-bar { + background-color: @notification-success-text; +} + +.@{prefix}-notification-info *, .@{prefix}-notification-info .@{prefix}-progress .@{prefix}-text { + color: @notification-info-text; +} + +.@{prefix}-notification-info .@{prefix}-progress .@{prefix}-bar-container { + border-color: @notification-info-border; +} + +.@{prefix}-notification-info .@{prefix}-progress .@{prefix}-bar-container .@{prefix}-bar { + background-color: @notification-info-text; +} + +.@{prefix}-notification-warning *, .@{prefix}-notification-warning .@{prefix}-progress .@{prefix}-text { + color: @notification-warning-text; +} + +.@{prefix}-notification-warning .@{prefix}-progress .@{prefix}-bar-container { + border-color: @notification-warning-border; +} + +.@{prefix}-notification-warning .@{prefix}-progress .@{prefix}-bar-container .@{prefix}-bar { + background-color: @notification-warning-text; +} + +.@{prefix}-notification-error *, .@{prefix}-notification-error .@{prefix}-progress .@{prefix}-text { + color: @notification-error-text; +} + +.@{prefix}-notification-error .@{prefix}-progress .@{prefix}-bar-container { + border-color: @notification-error-border; +} + +.@{prefix}-notification-error .@{prefix}-progress .@{prefix}-bar-container .@{prefix}-bar { + background-color: @notification-error-text; +} + +.@{prefix}-notification .@{prefix}-close { + position: absolute; + top: 6px; + right: 8px; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: @window-head-close; + cursor: pointer; + + // IE7 + height: 20px; + overflow: hidden; +} + +// AbsoluteLayout + +.@{prefix}-abs-layout { + position: relative; +} + +body .@{prefix}-abs-layout-item, .@{prefix}-abs-end { + position: absolute; +} + +.@{prefix}-abs-end { + width: 1px; height: 1px; +} + +.@{prefix}-container-body.@{prefix}-abs-layout { + overflow: hidden; +} + + +// Button + +.@{prefix}-btn { + border: 1px solid mix(rgb(red(@btn-border-right), green(@btn-border-right), blue(@btn-border-right)), @panel-bg, 30%); + border-color: @btn-border-top @btn-border-right @btn-border-bottom @btn-border-left; + position: relative; + text-shadow: @text-shadow; + + .inline-block(); + .border-radius(3px); + .box-shadow(@btn-box-shadow); + .vertical-gradient(@btn-bg, @btn-bg-hlight); + + &:hover, &:focus { + color: @btn-text; + .vertical-gradient(darken(@btn-bg, 5%), darken(@btn-bg-hlight, 5%)); + border-color: @btn-border-hover; + } + + &.@{prefix}-disabled button, &.@{prefix}-disabled:hover button { + cursor: default; + .box-shadow(none); + .opacity(@btn-box-disabled-opacity); + } + + &.@{prefix}-active, &.@{prefix}-active:hover { + .vertical-gradient(darken(@btn-bg, 10%), darken(@btn-bg-hlight, 5%)); + .box-shadow(@btn-box-shadow-active); + border-color: darken(@btn-bg, 20%); + } + + &:active { + .vertical-gradient(darken(@btn-bg, 7%), darken(@btn-bg-hlight, 5%)); + .box-shadow(@btn-box-shadow-active); + border-color: @btn-border-active; + + } +} + +.@{prefix}-btn button { + padding: @btn-padding; + font-size: @font-size; + line-height: @line-height; + *line-height: @line-height - 4px; + cursor: pointer; + color: @btn-text; + text-align: center; + + // Fixes for default inner padding of button + overflow: visible; // IE7 + -webkit-appearance: none; // WebKit + &::-moz-focus-inner { // Gecko + border: 0; + padding: 0; + } +} + +.@{prefix}-btn i { + text-shadow: 1px 1px @btn-text-shadow; +} + +.@{prefix}-primary.@{prefix}-btn-has-text { + min-width: 50px; +} + +.@{prefix}-primary { + color: @btn-primary-text; + border: 1px solid transparent; + border-color: @btn-primary-border; + .vertical-gradient(@btn-primary-bg, @btn-primary-bg-hlight); + + &:hover, &:focus { + .vertical-gradient(darken(@btn-primary-bg, 5%), darken(@btn-primary-bg-hlight, 5%)); + border-color: @btn-primary-border-hover; + } + + &.@{prefix}-disabled button, &.@{prefix}-disabled:hover button { + cursor: default; + .box-shadow(none); + .opacity(@btn-box-disabled-opacity); + } + + &.@{prefix}-active, &.@{prefix}-active:hover, &:not(.@{prefix}-disabled):active { + .vertical-gradient(darken(@btn-primary-bg, 10%), darken(@btn-primary-bg-hlight, 10%)); + .box-shadow(@btn-box-shadow-active); + } +} + +.@{prefix}-primary button, .@{prefix}-primary button i { + color: @btn-primary-text; + text-shadow: 1px 1px @btn-primary-text-shadow; +} + +.@{prefix}-btn .@{prefix}-txt { + font-size: inherit; + line-height: inherit; + color: inherit; +} + +.@{prefix}-btn-large button { + padding: 9px 14px; + font-size: @font-size + 2px; + line-height: normal; + .border-radius(5px); +} + +.@{prefix}-btn-large i { + margin-top: 2px; +} + +.@{prefix}-btn-small button { + padding: 1px 5px; + font-size: @font-size - 2px; + *padding-bottom: 2px; +} + +.@{prefix}-btn-small i { + line-height: 20px; + vertical-align: top; + *line-height: 18px; +} + +.@{prefix}-btn .@{prefix}-caret { + margin-top: 8px; + margin-left: 0; +} + +.@{prefix}-btn-small .@{prefix}-caret { + margin-top: 8px; + margin-left: 0; +} + +.@{prefix}-caret { + .inline-block(); + width: 0; height: 0; + vertical-align: top; + border-top: 4px solid @btn-caret-border; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} + +.@{prefix}-disabled .@{prefix}-caret { + border-top-color: @text-disabled; +} + +.@{prefix}-caret.@{prefix}-up { + border-bottom: 4px solid @btn-caret-border; + border-top: 0; +} + +.@{prefix}-btn-flat { + border: 0; + background: transparent; + .border-radius(0); + .box-shadow(none); + filter: none; +} + +.@{prefix}-btn-flat:hover, .@{prefix}-btn-flat.@{prefix}-active, .@{prefix}-btn-flat:focus, .@{prefix}-btn-flat:active { + border: 0; + background: @menubar-bg-active; + filter: none; + .box-shadow(none); +} + +.@{prefix}-btn-has-text .@{prefix}-ico { + padding-right: 5px; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-btn button { + direction: rtl; +} + + +// ButtonGroup + +.btn-group-border-left(@border-color) when (@has-button-borders = true) { + border-left: 1px solid @border-color; +} + +.btn-group-border-right(@border-color) when (@has-button-borders = true) { + border-right: 1px solid @border-color; +} + + +.@{prefix}-btn-group .@{prefix}-btn { + border-width: @btn-group-border-width; + margin: 0; + .border-radius(0); + margin-left: @flow-layout-spacing; +} + +.@{prefix}-btn-group .@{prefix}-btn when (@has-button-borders = true) { + border-left-width: 0; + border-right-width: 0; + margin-left: 0; +} + +.@{prefix}-btn-group:not(:first-child) when (@has-button-borders = true) { + padding-left: 1px; + margin-left: 1px; +} + +.@{prefix}-btn-group:not(:first-child) when (@has-button-borders = false) { + border-left: 1px solid darken(@btn-bg, 15%); + padding-left: @flow-layout-spacing + 1px; + margin-left: @flow-layout-spacing + 1px; +} + +.@{prefix}-btn-group .@{prefix}-first { + .border-radius(3px 0 0 3px); + .btn-group-border-left(@btn-border-left); + margin-left: 0; +} + +.@{prefix}-btn-group .@{prefix}-last { + .border-radius(0 3px 3px 0); + .btn-group-border-right(@btn-border-right); +} + +.@{prefix}-btn-group .@{prefix}-first.@{prefix}-last { + .border-radius(3px); +} + +.@{prefix}-btn-group .@{prefix}-btn.@{prefix}-flow-layout-item { + margin: 0; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-btn-group .@{prefix}-btn { + margin-left: 0; + margin-right: @flow-layout-spacing; +} + +.@{prefix}-rtl .@{prefix}-btn-group .@{prefix}-first { + margin-right: 0; +} + +.@{prefix}-rtl .@{prefix}-btn-group:not(:first-child) { + border-left: none; + border-right:1px solid darken(@btn-bg, 15%); + padding-right: @flow-layout-spacing + 2px; + margin-right: @flow-layout-spacing + 2px; +} + + +// Checkbox + +.@{prefix}-checkbox { + cursor: pointer; +} + +i.@{prefix}-i-checkbox { + margin: 0 3px 0 0; + border: 1px solid @checkbox-border; + .border-radius(3px); + .box-shadow(@checkbox-box-shadow); + .vertical-gradient(@checkbox-bg, @checkbox-bg-hlight); + text-indent: -10em; + *font-size: 0; + *line-height: 0; + *text-indent: 0; + overflow: hidden; +} + +.@{prefix}-checked i.@{prefix}-i-checkbox { + color: @btn-text; + font-size: 16px; + line-height: 16px; + text-indent: 0; +} + +.@{prefix}-checkbox:focus i.@{prefix}-i-checkbox, .@{prefix}-checkbox.@{prefix}-focus i.@{prefix}-i-checkbox { + border: 1px solid @checkbox-border-focus; + .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px fadeout(@checkbox-border-focus, 15%)); +} + +.@{prefix}-checkbox.@{prefix}-disabled .@{prefix}-label, .@{prefix}-checkbox.@{prefix}-disabled i.@{prefix}-i-checkbox { + color: mix(@text, @panel-bg, 40%); +} + +.@{prefix}-checkbox .@{prefix}-label { + vertical-align: middle; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-checkbox { + direction: rtl; + text-align: right; +} + +.@{prefix}-rtl i.@{prefix}-i-checkbox { + margin: 0 0 0 3px; +} + + +// ComboBox + +.@{prefix}-combobox { + position: relative; + .inline-block(); + .border-radius(3px); + .box-shadow(@textbox-box-shadow); + *height: 32px; +} + +.@{prefix}-combobox input { + border: 1px solid @textbox-border; + border-right-color: @combobox-border; + height: 28px; +} + +.@{prefix}-combobox.@{prefix}-disabled input { + color: mix(@text, @textbox-bg, 40%); +} + +.@{prefix}-combobox.@{prefix}-has-open input { + .border-radius(4px 0 0 4px); +} + +.@{prefix}-combobox .@{prefix}-btn { + border: 1px solid @textbox-border; + border-left: 0; + .border-radius(0 4px 4px 0); + margin: 0; +} + +.@{prefix}-combobox button { + padding-right: 8px; + padding-left: 8px; +} + +.@{prefix}-combobox.@{prefix}-disabled .@{prefix}-btn button { + cursor: default; + .box-shadow(none); + .opacity(@btn-box-disabled-opacity); +} + +.@{prefix}-combobox .@{prefix}-status { + position: absolute; + right: 2px; + top: 50%; + line-height: 16px; + margin-top: -8px; + font-size: 12px; + width: 15px; + height: 15px; + text-align: center; + cursor: pointer; +} + +.@{prefix}-combobox.@{prefix}-has-status input { + padding-right: 20px; +} + +.@{prefix}-combobox.@{prefix}-has-open .@{prefix}-status { + right: 37px; +} + +.@{prefix}-combobox .@{prefix}-status.@{prefix}-i-warning { + color: @combobox-warning-text; +} + +.@{prefix}-combobox .@{prefix}-status.@{prefix}-i-checkmark { + color: @combobox-success-text; +} + +.@{prefix}-menu.@{prefix}-combobox-menu { + border-top: 0; + margin-top: 0; + max-height: 200px; + + .@{prefix}-menu-item { + padding: 4px 6px 4px 4px; + font-size: 11px; + } + + .@{prefix}-menu-item-sep { + padding: 0; + } + + .@{prefix}-text { + font-size: 11px; + } + + .@{prefix}-menu-item-link, .@{prefix}-menu-item-link b { + font-size: 11px; + } + + .@{prefix}-text b { + font-size: 11px; + } +} + + +// ColorBox + +.@{prefix}-colorbox i { + border: 1px solid @textbox-border; + width: 14px; height: 14px; +} + + +// ColorButton + +.@{prefix}-colorbutton .@{prefix}-ico { + position: relative; +} + +.@{prefix}-colorbutton-grid { + margin: 4px; +} + +.@{prefix}-colorbutton button { + padding-right: 6px; + padding-left: 6px; +} + +.@{prefix}-colorbutton .@{prefix}-preview { + padding-right: 3px; + display: block; + position: absolute; + left: 50%; + top: 50%; + margin-left: -17px; + margin-top: 7px; + background: gray; + width: 13px; + height: 2px; + overflow: hidden; +} + +.@{prefix}-colorbutton.@{prefix}-btn-small .@{prefix}-preview { + margin-left: -16px; + padding-right: 0; + width: 16px; +} + +.@{prefix}-colorbutton .@{prefix}-open { + padding-left: 4px; + padding-right: 4px; + border-left: 1px solid transparent; +} + +.@{prefix}-colorbutton:hover .@{prefix}-open { + border-color: darken(@btn-bg, 20%); +} + +.@{prefix}-colorbutton.@{prefix}-btn-small .@{prefix}-open { + padding: 0 3px 0 3px; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-colorbutton { + direction: rtl; +} + +.@{prefix}-rtl .@{prefix}-colorbutton .@{prefix}-preview { + margin-left: 0; + padding-right: 0; + padding-left: 3px; +} + +.@{prefix}-rtl .@{prefix}-colorbutton.@{prefix}-btn-small .@{prefix}-preview { + margin-left: 0; + padding-right: 0; + padding-left: 2px; +} + +.@{prefix}-rtl .@{prefix}-colorbutton .@{prefix}-open { + padding-left: 4px; + padding-right: 4px; + border-left: 0; +} + + +// ColorPicker + +.@{prefix}-colorpicker { + position: relative; + width: 250px; + height: 220px; +} + +.@{prefix}-colorpicker-sv { + position: absolute; + top: 0; left: 0; + width: 90%; + height: 100%; + border: 1px solid @colorpicker-border; + cursor: crosshair; + overflow: hidden; +} + +.@{prefix}-colorpicker-h-chunk { + width: 100%; +} + +.@{prefix}-colorpicker-overlay1, .@{prefix}-colorpicker-overlay2 { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; +} + +.@{prefix}-colorpicker-overlay1 { + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff'); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')"; + background: linear-gradient(to right, rgba(255,255,255,1), rgba(255,255,255,0)); +} + +.@{prefix}-colorpicker-overlay2 { + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000'); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')"; + background: linear-gradient(to bottom, rgba(0,0,0,0), rgba(0,0,0,1)); +} + +.@{prefix}-colorpicker-selector1 { + background: none; + position: absolute; + width: 12px; + height: 12px; + margin: -8px 0 0 -8px; + border: 1px solid black; + border-radius: 50%; +} + +.@{prefix}-colorpicker-selector2 { + position: absolute; + width: 10px; + height: 10px; + border: 1px solid white; + border-radius: 50%; +} + +.@{prefix}-colorpicker-h { + position: absolute; + top: 0; right: 0; + width: 6.5%; + height: 100%; + border: 1px solid @colorpicker-border; + cursor: crosshair; +} + +.@{prefix}-colorpicker-h-marker { + margin-top: -4px; + position: absolute; + top: 0; + left: -1px; + width: 100%; + border: 1px solid @colorpicker-hue-border; + background: @colorpicker-hue-bg; + height: 4px; + z-index: 100; +} + + +// Path + +.@{prefix}-path { + .inline-block(); + padding: 8px; + white-space: normal; +} + +.@{prefix}-path .@{prefix}-txt { + display: inline-block; + padding-right: 3px; +} + +.@{prefix}-path .@{prefix}-path-body { + display: inline-block; +} + +.@{prefix}-path-item { + .inline-block(); + cursor: pointer; + color: @path-text; +} + +.@{prefix}-path-item:hover { + text-decoration: underline; +} + +.@{prefix}-path-item:focus { + background: @path-bg-focus; + color: @path-text-focus; +} + +.@{prefix}-path .@{prefix}-divider { + display: inline; +} + +.@{prefix}-disabled .@{prefix}-path-item { + color: @text-disabled; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-path { + direction: rtl; +} + + +// FieldSet + +.@{prefix}-fieldset { + border: 0 solid #9E9E9E; + .border-radius(3px); +} + +.@{prefix}-fieldset > .@{prefix}-container-body { + margin-top: -15px; +} + +.@{prefix}-fieldset-title { + margin-left: 5px; + padding: 0 5px 0 5px; +} + +// FitLayout + +.@{prefix}-fit-layout { + .inline-block(); +} + +.@{prefix}-fit-layout-item { + position: absolute; +} + + +// FlowLayout + +.@{prefix}-flow-layout-item { + .inline-block(); +} + +.@{prefix}-flow-layout-item { + margin: @flow-layout-spacing 0 @flow-layout-spacing @flow-layout-spacing; +} + +.@{prefix}-flow-layout-item.@{prefix}-last { + margin-right: @flow-layout-spacing; +} + +.@{prefix}-flow-layout { + white-space: normal; +} + +.@{prefix}-tinymce-inline .@{prefix}-flow-layout { + white-space: nowrap; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-flow-layout { + text-align: right; + direction: rtl; +} + +.@{prefix}-rtl .@{prefix}-flow-layout-item { + margin: @flow-layout-spacing @flow-layout-spacing @flow-layout-spacing 0; +} + +.@{prefix}-rtl .@{prefix}-flow-layout-item.@{prefix}-last { + margin-left: @flow-layout-spacing; +} + + +// Iframe + +.@{prefix}-iframe { + border: 0 solid @iframe-border; + width: 100%; height: 100%; +} + + +// InfoBox + +.@{prefix}-infobox { + .inline-block(); + text-shadow: @text-shadow; + overflow: hidden; + border: 1px solid red; + + div { + display: block; + margin: 5px; + + button { + position: absolute; + top: 50%; right: 4px; + cursor: pointer; + margin-top: -8px; + display: none; + } + + button:focus { + outline: 2px solid @btn-border-hover; + } + } +} + +.@{prefix}-infobox.@{prefix}-has-help { + div { + margin-right: 25px; + } + + button { + display: block; + } +} + +.@{prefix}-infobox.@{prefix}-success { + background: @infobox-success-bg; + border-color: @infobox-success-border; + + div { + color: @infobox-success-text; + } +} + +.@{prefix}-infobox.@{prefix}-warning { + background: @infobox-warning-bg; + border-color: @infobox-warning-border; + + div { + color: @infobox-warning-text; + } +} + +.@{prefix}-infobox.@{prefix}-error { + background: @infobox-error-bg; + border-color: @infobox-error-border; + + div { + color: @infobox-error-text; + } +} + +// RTL + +.@{prefix}-rtl .@{prefix}-infobox { + div { + text-align: right; + direction: rtl; + } +} + + +// Label + +.@{prefix}-label { + .inline-block(); + text-shadow: @text-shadow; + overflow: hidden; +} + +.@{prefix}-label.@{prefix}-autoscroll { + overflow: auto; +} + +.@{prefix}-label.@{prefix}-disabled { + color: @text-disabled; +} + +.@{prefix}-label.@{prefix}-multiline { + white-space: pre-wrap; +} + +.@{prefix}-label.@{prefix}-success { + color: @text-success; +} + +.@{prefix}-label.@{prefix}-warning { + color: @text-warning; +} + +.@{prefix}-label.@{prefix}-error { + color: @text-error; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-label { + text-align: right; + direction: rtl; +} + + +/* MenuBar */ + +.@{prefix}-menubar .@{prefix}-menubtn { + border-color: transparent; + background: transparent; + .border-radius(0); + .box-shadow(none); + filter: none; +} + +.@{prefix}-menubar .@{prefix}-menubtn button { + color: @menubar-menubtn-text; +} + +.@{prefix}-menubar { + border: 1px solid @menubar-border; +} + +.@{prefix}-menubar .@{prefix}-menubtn button span { + color: @text; +} + +.@{prefix}-menubar .@{prefix}-caret { + border-top-color: @text; +} + +.@{prefix}-menubar .@{prefix}-menubtn:hover, .@{prefix}-menubar .@{prefix}-menubtn.@{prefix}-active, .@{prefix}-menubar .@{prefix}-menubtn:focus { + border-color: darken(@btn-bg, 20%); + background: @menu-bg; + filter: none; + .box-shadow(none); +} + + +/* MenuButton */ + +.@{prefix}-menubtn button { + color: @btn-text; + //margin-right: 2px; + //line-height: @line-height; + //*line-height: @line-height - 4px; +} + +.@{prefix}-menubtn.@{prefix}-btn-small span { + font-size: @font-size - 2px; +} + +.@{prefix}-menubtn.@{prefix}-fixed-width span { + display: inline-block; + overflow-x: hidden; + text-overflow: ellipsis; + width: 90px; +} + +.@{prefix}-menubtn.@{prefix}-fixed-width.@{prefix}-btn-small span { + width: 70px; +} + +.@{prefix}-menubtn .@{prefix}-caret { + *margin-top: 6px; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-menubtn button { + direction: rtl; + text-align: right; +} + + +// MenuItem + +.@{prefix}-menu-item { + display: block; + padding: 6px 15px 6px 12px; + clear: both; + font-weight: normal; + line-height: 20px; + color: @menuitem-text; + white-space: nowrap; + cursor: pointer; + line-height: normal; + border-left: 4px solid transparent; + margin-bottom: 1px; +} + +.@{prefix}-menu-item .@{prefix}-ico, .@{prefix}-menu-item .@{prefix}-text { + color: @menuitem-text; +} + +.@{prefix}-menu-item.@{prefix}-disabled .@{prefix}-text, .@{prefix}-menu-item.@{prefix}-disabled .@{prefix}-ico { + color: mix(@menuitem-text, @menu-bg, 40%); +} + +.@{prefix}-menu-item:hover .@{prefix}-text, .@{prefix}-menu-item.@{prefix}-selected .@{prefix}-text, .@{prefix}-menu-item:focus .@{prefix}-text { + color: @menuitem-text-inverse; +} + +.@{prefix}-menu-item:hover .@{prefix}-ico, .@{prefix}-menu-item.@{prefix}-selected .@{prefix}-ico, .@{prefix}-menu-item:focus .@{prefix}-ico { + color: @menuitem-text-inverse; +} + +.@{prefix}-menu-item.@{prefix}-disabled:hover { + background: @menuitem-bg-disabled; +} + +.@{prefix}-menu-shortcut { + display: inline-block; + color: mix(@menuitem-text, @menu-bg, 40%); +} + +.@{prefix}-menu-shortcut { + .inline-block(); + padding: 0 15px 0 20px; +} + +.@{prefix}-menu-item:hover .@{prefix}-menu-shortcut, .@{prefix}-menu-item.@{prefix}-selected .@{prefix}-menu-shortcut, .@{prefix}-menu-item:focus .@{prefix}-menu-shortcut { + color: @menuitem-text-inverse; +} + +.@{prefix}-menu-item .@{prefix}-caret { + margin-top: 4px; + *margin-top: 3px; + margin-right: 6px; + border-top: 4px solid transparent; + border-bottom: 4px solid transparent; + border-left: 4px solid @menuitem-caret; +} + +.@{prefix}-menu-item.@{prefix}-selected .@{prefix}-caret, .@{prefix}-menu-item:focus .@{prefix}-caret, .@{prefix}-menu-item:hover .@{prefix}-caret { + border-left-color: @menuitem-caret-selected; +} + +.@{prefix}-menu-align .@{prefix}-menu-shortcut { + *margin-top: -2px; +} + +.@{prefix}-menu-align .@{prefix}-menu-shortcut, .@{prefix}-menu-align .@{prefix}-caret { + position: absolute; + right: 0; +} + +.@{prefix}-menu-item.@{prefix}-active i { + visibility: visible; +} + +.@{prefix}-menu-item-normal.@{prefix}-active { + background-color: @menuitem-bg-active; +} + +.@{prefix}-menu-item-preview.@{prefix}-active { + border-left: 5px solid @menuitem-preview-border-active; +} + +.@{prefix}-menu-item-normal.@{prefix}-active .@{prefix}-text { + color: @menuitem-text-active; +} + +.@{prefix}-menu-item-normal.@{prefix}-active:hover .@{prefix}-text, .@{prefix}-menu-item-normal.@{prefix}-active:hover .@{prefix}-ico { + color: @menuitem-text-inverse; +} + +.@{prefix}-menu-item-normal.@{prefix}-active:focus .@{prefix}-text, .@{prefix}-menu-item-normal.@{prefix}-active:focus .@{prefix}-ico { + color: @menuitem-text-inverse; +} + +.@{prefix}-menu-item:hover, .@{prefix}-menu-item.@{prefix}-selected, .@{prefix}-menu-item:focus { + text-decoration: none; + color: @menuitem-text-inverse; + .vertical-gradient(@menuitem-bg-selected, @menuitem-bg-selected-hlight); +} + +.@{prefix}-menu-item-link { + color: #093; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + b { + color: #093; + } +} + +.@{prefix}-menu-item-ellipsis { + display: block; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.@{prefix}-menu-item:hover *, .@{prefix}-menu-item.@{prefix}-selected *, .@{prefix}-menu-item:focus * { + color: @menuitem-text-inverse; +} + +div.@{prefix}-menu .@{prefix}-menu-item-sep, .@{prefix}-menu-item-sep:hover { + border: 0; + padding: 0; + height: 1px; + margin: 9px 1px; + overflow: hidden; + background: @menuitem-separator-top; + border-bottom: 1px solid @menuitem-separator-bottom; + cursor: default; + filter: none; +} + +div.@{prefix}-menu .@{prefix}-menu-item b { + font-weight: bold; +} + +.@{prefix}-menu-item-indent-1 { padding-left: 20px; } +.@{prefix}-menu-item-indent-2 { padding-left: 35px; } +.@{prefix}-menu-item-indent-2 { padding-left: 35px; } +.@{prefix}-menu-item-indent-3 { padding-left: 40px; } +.@{prefix}-menu-item-indent-4 { padding-left: 45px; } +.@{prefix}-menu-item-indent-5 { padding-left: 50px; } +.@{prefix}-menu-item-indent-6 { padding-left: 55px; } + +// RTL + +.@{prefix}-menu.@{prefix}-rtl { + direction: rtl; +} + +.@{prefix}-rtl .@{prefix}-menu-item { + text-align: right; + direction: rtl; + padding: 6px 12px 6px 15px; +} + +.@{prefix}-menu-align.@{prefix}-rtl .@{prefix}-menu-shortcut, .@{prefix}-menu-align.@{prefix}-rtl .@{prefix}-caret { + right: auto; + left: 0; +} + +.@{prefix}-rtl .@{prefix}-menu-item .@{prefix}-caret { + margin-left: 6px; + margin-right: 0; + border-right: 4px solid @menuitem-caret; + border-left: 0; +} + +.@{prefix}-rtl .@{prefix}-menu-item.@{prefix}-selected .@{prefix}-caret, .@{prefix}-rtl .@{prefix}-menu-item:focus .@{prefix}-caret, .@{prefix}-rtl .@{prefix}-menu-item:hover .@{prefix}-caret { + border-left-color: transparent; + border-right-color: @menuitem-caret-selected; +} + + +// Throbber + +.@{prefix}-throbber { + position: absolute; + top: 0; left: 0; + width: 100%; height: 100%; + .opacity(0.6); + background: @throbber-bg; +} + +.@{prefix}-throbber-inline { + position: static; + height: 50px; +} + +.@{prefix}-menu .@{prefix}-throbber-inline { + height: 25px; + background-size: contain; +} + + +// Menu + +.@{prefix}-menu { + position: absolute; + left: 0; top: 0; + .reset-gradient(); + z-index: 1000; + padding: 5px 0 5px 0; + margin: @menu-margin; + min-width: 160px; + background: @menu-bg; + border: 1px solid mix(rgb(red(@menu-border), green(@menu-border), blue(@menu-border)), @panel-bg, round(alpha(@menu-border) * 200)); + border: 1px solid @menu-border; + z-index: 1002; + .border-radius(6px); + .box-shadow(0 5px 10px rgba(0,0,0,.2)); + max-height: 400px; + overflow: auto; + overflow-x: hidden; +} + +.@{prefix}-menu i { + display: none; +} + +.@{prefix}-menu-has-icons i { + display: inline-block; + *display: inline; +} + +.@{prefix}-menu-sub-tr-tl { margin: -6px 0 0 -1px; } +.@{prefix}-menu-sub-br-bl { margin: 6px 0 0 -1px; } +.@{prefix}-menu-sub-tl-tr { margin: -6px 0 0 1px; } +.@{prefix}-menu-sub-bl-br { margin: 6px 0 0 1px; } + + +// ListBox + +.@{prefix}-listbox button { + text-align: left; + padding-right: 20px; + position: relative; +} + +.@{prefix}-listbox .@{prefix}-caret { + position: absolute; + margin-top: -2px; + right: 8px; + top: 50%; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-listbox .@{prefix}-caret { + right: auto; + left: 8px; +} + +.@{prefix}-rtl .@{prefix}-listbox button { + padding-right: 10px; + padding-left: 20px; +} + + +// Radio - not implemented yet + + +.@{prefix}-container-body .@{prefix}-resizehandle { + position: absolute; + right: 0; + bottom: 0; + width: 16px; + height: 16px; + visibility: visible; + cursor: s-resize; + margin: 0; +} + +.@{prefix}-container-body .@{prefix}-resizehandle-both { + cursor: se-resize; +} + +i.@{prefix}-i-resize { + color: @text; +} + + +// SelectBox + +.@{prefix}-selectbox { + background: @selectbox-bg; + border: 1px solid @selectbox-border; +} + + +// Slider + +.@{prefix}-slider { + .border-radius(3px); + border: 1px solid @slider-border; + background: @slider-bg; + width: 100px; + height: 10px; + position: relative; + display: block; +} + +.@{prefix}-slider.@{prefix}-vertical { + width: 10px; + height: 100px; +} + +.@{prefix}-slider-handle { + .border-radius(3px); + border: 1px solid @slider-handle-border; + background: @slider-handle-bg; + display: block; + width: 13px; + height: 13px; + position: absolute; + top: 0; left: 0; + margin-left: -1px; + margin-top: -2px; +} + +.@{prefix}-slider-handle:focus { + background: @slider-handle-bg-focus; +} + + +// Spacer + +.@{prefix}-spacer { + visibility: hidden; +} + + +// SplitButton + +.@{prefix}-splitbtn .@{prefix}-open { + border-left: 1px solid transparent; +} + +.@{prefix}-splitbtn:hover .@{prefix}-open { + border-left-color: darken(@btn-bg, 20%); +} + +.@{prefix}-splitbtn button when (@has-button-borders = false) { + padding-right: 6px; + padding-left: 6px; +} + +.@{prefix}-splitbtn button when (@has-button-borders = true) { + padding-right: 4px; + padding-left: 8px; +} + +.@{prefix}-splitbtn .@{prefix}-open { + padding-right: 4px; + padding-left: 4px; +} + +.@{prefix}-splitbtn .@{prefix}-open.@{prefix}-active { + .vertical-gradient(darken(@btn-bg, 10%), darken(@btn-bg-hlight, 5%)); + outline: 1px solid darken(@btn-bg, 20%); +} + +.@{prefix}-splitbtn.@{prefix}-btn-small .@{prefix}-open { + padding: 0 3px 0 3px; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-splitbtn { + direction: rtl; + text-align: right; +} + +.@{prefix}-rtl .@{prefix}-splitbtn button { + padding-right: 4px; + padding-left: 4px; +} + +.@{prefix}-rtl .@{prefix}-splitbtn .@{prefix}-open { + border-left: 0; +} + + +// StackLayout + +.@{prefix}-stack-layout-item { + display: block; +} + + +// TabPanel + +.@{prefix}-tabs { + display: block; + border-bottom: 1px solid @tab-border; +} + +.@{prefix}-tabs, +.@{prefix}-tabs + .@{prefix}-container-body { + background: @tabs-bg; +} + +.@{prefix}-tab { + .inline-block(); + border: 1px solid @tab-border; + border-width: 0 1px 0 0; + background: @tab-bg; + padding: 8px; + text-shadow: @text-shadow; + height: 13px; + cursor: pointer; +} + +.@{prefix}-tab:hover { + background: @tab-bg-hover; +} + +.@{prefix}-tab.@{prefix}-active { + background: @tab-bg-active; + border-bottom-color: transparent; + margin-bottom: -1px; + height: 14px; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-tabs { + text-align: right; + direction: rtl; +} + +.@{prefix}-rtl .@{prefix}-tab { + border-width: 0 0 0 1px; +} + + +// TextBox + +.@{prefix}-textbox { + background: @textbox-bg; + border: 1px solid @textbox-border; + .border-radius(3px); + .box-shadow(@textbox-box-shadow); + display: inline-block; + .transition(~"border linear .2s, box-shadow linear .2s"); + height: 28px; + resize: none; + padding: 0 4px 0 4px; + white-space: pre-wrap; + *white-space: pre; + color: @text; +} + +.@{prefix}-textbox:focus, .@{prefix}-textbox.@{prefix}-focus { + border-color: @textbox-border-focus; + .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px fadeout(@textbox-border-focus, 15%)); +} + +.@{prefix}-placeholder .@{prefix}-textbox { + color: @textbox-text-placeholder; +} + +.@{prefix}-textbox.@{prefix}-multiline { + padding: 4px; + height: auto; +} + +.@{prefix}-textbox.@{prefix}-disabled { + color: mix(@text, @textbox-bg, 40%); +} + +// RTL + +.@{prefix}-rtl .@{prefix}-textbox { + text-align: right; + direction: rtl; +} + + +/* Icons IE7 */ + +@font-face { + font-family: 'tinymce'; + src:url('fonts/tinymce.eot'); + src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'), + url('fonts/tinymce.woff') format('woff'), + url('fonts/tinymce.ttf') format('truetype'), + url('fonts/tinymce.svg#tinymce') format('svg'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'tinymce-small'; + src:url('fonts/tinymce-small.eot'); + src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'), + url('fonts/tinymce-small.woff') format('woff'), + url('fonts/tinymce-small.ttf') format('truetype'), + url('fonts/tinymce-small.svg#tinymce') format('svg'); + font-weight: normal; + font-style: normal; +} + +@iconSize: 16px; + +.@{prefix}-ico { + font-family: 'tinymce'; + font-style: normal; + font-weight: normal; + font-size: @iconSize; + line-height: 16px; + vertical-align: text-top; + -webkit-font-smoothing: antialiased; + + display: inline-block; + background: transparent center center; + width: 16px; + height: 16px; + color: @btn-text; + -ie7-icon: ' '; +} + +.@{prefix}-btn-small .@{prefix}-ico { + font-family: 'tinymce-small'; +} + +// .@{prefix}-i-checkbox needs to have zoom overridden since it's set by the gradient mixin +.@{prefix}-ico, i.@{prefix}-i-checkbox { + zoom: ~"expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = this.currentStyle['-ie7-icon'].substr(1, 1) + ' ')"; +} + +.@{prefix}-i-save { -ie7-icon: "\e000"; } +.@{prefix}-i-newdocument { -ie7-icon: "\e001"; } +.@{prefix}-i-fullpage { -ie7-icon: "\e002"; } +.@{prefix}-i-alignleft { -ie7-icon: "\e003"; } +.@{prefix}-i-aligncenter { -ie7-icon: "\e004"; } +.@{prefix}-i-alignright { -ie7-icon: "\e005"; } +.@{prefix}-i-alignjustify { -ie7-icon: "\e006"; } +.@{prefix}-i-alignnone { -ie7-icon: "\e003"; } +.@{prefix}-i-cut { -ie7-icon: "\e007"; } +.@{prefix}-i-paste { -ie7-icon: "\e008"; } +.@{prefix}-i-searchreplace { -ie7-icon: "\e009"; } +.@{prefix}-i-bullist { -ie7-icon: "\e00a"; } +.@{prefix}-i-numlist { -ie7-icon: "\e00b"; } +.@{prefix}-i-indent { -ie7-icon: "\e00c"; } +.@{prefix}-i-outdent { -ie7-icon: "\e00d"; } +.@{prefix}-i-blockquote { -ie7-icon: "\e00e"; } +.@{prefix}-i-undo { -ie7-icon: "\e00f"; } +.@{prefix}-i-redo { -ie7-icon: "\e010"; } +.@{prefix}-i-link { -ie7-icon: "\e011"; } +.@{prefix}-i-unlink { -ie7-icon: "\e012"; } +.@{prefix}-i-anchor { -ie7-icon: "\e013"; } +.@{prefix}-i-image { -ie7-icon: "\e014"; } +.@{prefix}-i-media { -ie7-icon: "\e015"; } +.@{prefix}-i-help { -ie7-icon: "\e016"; } +.@{prefix}-i-code { -ie7-icon: "\e017"; } +.@{prefix}-i-insertdatetime { -ie7-icon: "\e018"; } +.@{prefix}-i-preview { -ie7-icon: "\e019"; } +.@{prefix}-i-forecolor { -ie7-icon: "\e01a"; } +.@{prefix}-i-backcolor { -ie7-icon: "\e01a"; } +.@{prefix}-i-table { -ie7-icon: "\e01b"; } +.@{prefix}-i-hr { -ie7-icon: "\e01c"; } +.@{prefix}-i-removeformat { -ie7-icon: "\e01d"; } +.@{prefix}-i-subscript { -ie7-icon: "\e01e"; } +.@{prefix}-i-superscript { -ie7-icon: "\e01f"; } +.@{prefix}-i-charmap { -ie7-icon: "\e020"; } +.@{prefix}-i-emoticons { -ie7-icon: "\e021"; } +.@{prefix}-i-print { -ie7-icon: "\e022"; } +.@{prefix}-i-fullscreen { -ie7-icon: "\e023"; } +.@{prefix}-i-spellchecker { -ie7-icon: "\e024"; } +.@{prefix}-i-nonbreaking { -ie7-icon: "\e025"; } +.@{prefix}-i-template { -ie7-icon: "\e026"; } +.@{prefix}-i-pagebreak { -ie7-icon: "\e027"; } +.@{prefix}-i-restoredraft { -ie7-icon: "\e028"; } +.@{prefix}-i-untitled { -ie7-icon: "\e029"; } +.@{prefix}-i-bold { -ie7-icon: "\e02a"; } +.@{prefix}-i-italic { -ie7-icon: "\e02b"; } +.@{prefix}-i-underline { -ie7-icon: "\e02c"; } +.@{prefix}-i-strikethrough { -ie7-icon: "\e02d"; } +.@{prefix}-i-visualchars { -ie7-icon: "\e02e"; } +.@{prefix}-i-ltr { -ie7-icon: "\e02f"; } +.@{prefix}-i-rtl { -ie7-icon: "\e030"; } +.@{prefix}-i-copy { -ie7-icon: "\e031"; } +.@{prefix}-i-resize { -ie7-icon: "\e032"; } +.@{prefix}-i-browse { -ie7-icon: "\e034"; } +.@{prefix}-i-pastetext { -ie7-icon: "\e035"; } +.@{prefix}-i-rotateleft { -ie7-icon: "\eaa8"; } +.@{prefix}-i-rotateright { -ie7-icon: "\eaa9"; } +.@{prefix}-i-crop { -ie7-icon: "\ee78"; } +.@{prefix}-i-editimage { -ie7-icon: "\e914"; } +.@{prefix}-i-options { -ie7-icon: "\ec6a"; } +.@{prefix}-i-flipv { -ie7-icon: "\eaaa"; } +.@{prefix}-i-fliph { -ie7-icon: "\eaac"; } +.@{prefix}-i-zoomin { -ie7-icon: "\eb35"; } +.@{prefix}-i-zoomout { -ie7-icon: "\eb36"; } +.@{prefix}-i-sun { -ie7-icon: "\eccc"; } +.@{prefix}-i-moon { -ie7-icon: "\eccd"; } +.@{prefix}-i-arrowleft { -ie7-icon: "\edc0"; } +.@{prefix}-i-arrowright { -ie7-icon: "\edb8"; } +.@{prefix}-i-drop { -ie7-icon: "\e934"; } +.@{prefix}-i-contrast { -ie7-icon: "\ecd4"; } +.@{prefix}-i-sharpen { -ie7-icon: "\eba7"; } +.@{prefix}-i-palette { -ie7-icon: "\e92a"; } +.@{prefix}-i-resize2 { -ie7-icon: "\edf9"; } +.@{prefix}-i-orientation { -ie7-icon: "\e601"; } +.@{prefix}-i-invert { -ie7-icon: "\e602"; } +.@{prefix}-i-gamma { -ie7-icon: "\e600"; } +.@{prefix}-i-remove { -ie7-icon: "\ed6a"; } +.@{prefix}-i-codesample { -ie7-icon: "\e603"; } +.@{prefix}-i-checkbox, .@{prefix}-i-selected { + -ie7-icon: "\e033"; +} + +.@{prefix}-i-selected { visibility: hidden; } +.@{prefix}-i-backcolor { background: #BBB; } + diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/skin.ie7.min.css b/data/web/rc/program/js/tinymce/skins/lightgray/skin.ie7.min.css new file mode 100644 index 00000000..8ebe708f --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/skin.ie7.min.css @@ -0,0 +1 @@ +.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid rgba(0,0,0,0.2);width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#D9D9D9}.mce-grid td.mce-grid-cell div{border:1px solid #d6d6d6;width:15px;height:15px;margin:0;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#3498db}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#3498db}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#3498db;background:#3498db}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#707070}.mce-monospace{font-family:"Courier New",Courier,monospace}.mce-toolbar-grp{padding:2px 0}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-croprect-container{position:absolute;top:0;left:0}.mce-croprect-handle{position:absolute;top:0;left:0;width:20px;height:20px;border:2px solid white}.mce-croprect-handle-nw{border-width:2px 0 0 2px;margin:-2px 0 0 -2px;cursor:nw-resize;top:100px;left:100px}.mce-croprect-handle-ne{border-width:2px 2px 0 0;margin:-2px 0 0 -20px;cursor:ne-resize;top:100px;left:200px}.mce-croprect-handle-sw{border-width:0 0 2px 2px;margin:-20px 2px 0 -2px;cursor:sw-resize;top:200px;left:100px}.mce-croprect-handle-se{border-width:0 2px 2px 0;margin:-20px 0 0 -20px;cursor:se-resize;top:200px;left:200px}.mce-croprect-handle-move{position:absolute;cursor:move;border:0}.mce-croprect-block{opacity:.3;filter:alpha(opacity=30);zoom:1;position:absolute;background:black}.mce-croprect-handle:focus{border-color:#3498db}.mce-croprect-handle-move:focus{outline:1px solid #3498db}.mce-imagepanel{overflow:auto;background:black}.mce-imagepanel-bg{position:absolute;background:url('data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==')}.mce-imagepanel img{position:absolute}.mce-imagetool.mce-btn .mce-ico{display:block;width:20px;height:20px;text-align:center;line-height:20px;font-size:20px;padding:5px}.mce-arrow-up{margin-top:12px}.mce-arrow-down{margin-top:-12px}.mce-arrow:before,.mce-arrow:after{position:absolute;left:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}.mce-arrow.mce-arrow-up:before{top:-9px;border-bottom-color:rgba(0,0,0,0.2);border-width:0 9px 9px;margin-left:-9px}.mce-arrow.mce-arrow-down:before{bottom:-9px;border-top-color:rgba(0,0,0,0.2);border-width:9px 9px 0;margin-left:-9px}.mce-arrow.mce-arrow-up:after{top:-8px;border-bottom-color:#f0f0f0;border-width:0 8px 8px;margin-left:-8px}.mce-arrow.mce-arrow-down:after{bottom:-8px;border-top-color:#f0f0f0;border-width:8px 8px 0;margin-left:-8px}.mce-arrow.mce-arrow-left:before,.mce-arrow.mce-arrow-left:after{margin:0}.mce-arrow.mce-arrow-left:before{left:8px}.mce-arrow.mce-arrow-left:after{left:9px}.mce-arrow.mce-arrow-right:before,.mce-arrow.mce-arrow-right:after{left:auto;margin:0}.mce-arrow.mce-arrow-right:before{right:8px}.mce-arrow.mce-arrow-right:after{right:9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:before{left:-9px;top:50%;border-right-color:rgba(0,0,0,0.2);border-width:9px 9px 9px 0;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:after{left:-8px;top:50%;border-right-color:#f0f0f0;border-width:8px 8px 8px 0;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left{margin-left:12px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:before{right:-9px;top:50%;border-left-color:rgba(0,0,0,0.2);border-width:9px 0 9px 9px;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:after{right:-8px;top:50%;border-left-color:#f0f0f0;border-width:8px 0 8px 8px;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right{margin-left:-14px}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1}.mce-scroll{position:relative}.mce-panel{border:0 solid #cacaca;border:0 solid rgba(0,0,0,0.2);background-color:#f0f0f0}.mce-floatpanel{position:absolute}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;top:0;left:0;background:#FFF;border:1px solid rgba(0,0,0,0.2);border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.2);border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#FFF}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#FFF;position:fixed;top:0;left:0;opacity:0;transform:scale(.1);transition:transform 100ms ease-in,opacity 150ms ease-in}.mce-window.mce-in{transform:scale(1);opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:0;top:0;height:38px;width:38px;text-align:center;cursor:pointer}.mce-window-head .mce-close i{color:#858585}.mce-close:hover i{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:20px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#FFF;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#ccc}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:white;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-ne,.mce-tooltip-se{margin-left:14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#333}.mce-bar{display:block;width:0;height:100%;background-color:#d7d7d7;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#F0F0F0;padding:5px;margin-top:5px;border-width:1px;border-style:solid;border-color:#CCCCCC;transition:transform 100ms ease-in,opacity 150ms ease-in;opacity:0}.mce-notification.mce-in{opacity:1}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ECB}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notification .mce-ico{margin-top:5px}.mce-notification-inner{display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#333333}.mce-notification .mce-progress .mce-bar-container{border-color:#CCCCCC}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#333333}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ECB}.mce-notification-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #b1b1b1;border-color:transparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;background-color:#f0f0f0}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;border-color:#ccc}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#dbdbdb;border-color:#ccc}.mce-btn:active{background-color:#e0e0e0;border-color:#ccc}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary.mce-btn-has-text{min-width:50px}.mce-primary{color:#fff;border:1px solid transparent;border-color:transparent;background-color:#2d8ac7}.mce-primary:hover,.mce-primary:focus{background-color:#257cb6;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#206ea1}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px none}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-btn-flat{border:0;background:transparent;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:3px;margin-left:3px}.mce-btn-group .mce-first{margin-left:0}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;background-color:#f0f0f0;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{position:relative;display:inline-block;*display:inline;*zoom:1;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0;margin:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-combobox .mce-status{position:absolute;right:2px;top:50%;line-height:16px;margin-top:-8px;font-size:12px;width:15px;height:15px;text-align:center;cursor:pointer}.mce-combobox.mce-has-status input{padding-right:20px}.mce-combobox.mce-has-open .mce-status{right:37px}.mce-combobox .mce-status.mce-i-warning{color:#c09853}.mce-combobox .mce-status.mce-i-checkmark{color:#468847}.mce-menu.mce-combobox-menu{border-top:0;margin-top:0;max-height:200px}.mce-menu.mce-combobox-menu .mce-menu-item{padding:4px 6px 4px 4px;font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-sep{padding:0}.mce-menu.mce-combobox-menu .mce-text{font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-link,.mce-menu.mce-combobox-menu .mce-menu-item-link b{font-size:11px}.mce-menu.mce-combobox-menu .mce-text b{font-size:11px}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:6px;padding-left:6px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:1px solid transparent}.mce-colorbutton:hover .mce-open{border-color:#ccc}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid rgba(0,0,0,0.2);width:100%;height:100%}.mce-infobox{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden;border:1px solid red}.mce-infobox div{display:block;margin:5px}.mce-infobox div button{position:absolute;top:50%;right:4px;cursor:pointer;margin-top:-8px;display:none}.mce-infobox div button:focus{outline:2px solid #ccc}.mce-infobox.mce-has-help div{margin-right:25px}.mce-infobox.mce-has-help button{display:block}.mce-infobox.mce-success{background:#dff0d8;border-color:#d6e9c6}.mce-infobox.mce-success div{color:#3c763d}.mce-infobox.mce-warning{background:#fcf8e3;border-color:#faebcc}.mce-infobox.mce-warning div{color:#8a6d3b}.mce-infobox.mce-error{background:#f2dede;border-color:#ebccd1}.mce-infobox.mce-error div{color:#a94442}.mce-rtl .mce-infobox div{text-align:right;direction:rtl}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-success{color:#468847}.mce-label.mce-warning{color:#c09853}.mce-label.mce-error{color:#b94a48}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;filter:none}.mce-menubar .mce-menubtn button{color:#333}.mce-menubar{border:1px solid rgba(217,217,217,0.52)}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#ccc;background:#fff;filter:none}.mce-menubtn button{color:#333}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:white}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:white}.mce-menu-item.mce-disabled:hover{background:#CCC}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:white}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:white}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#3498db}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:white}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:white}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:white}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:white;background-color:#2d8ac7}.mce-menu-item-link{color:#093;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mce-menu-item-link b{color:#093}.mce-menu-item-ellipsis{display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mce-menu-item:hover *,.mce-menu-item.mce-selected *,.mce-menu-item:focus *{color:white}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}div.mce-menu .mce-menu-item b{font-weight:bold}.mce-menu-item-indent-1{padding-left:20px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-3{padding-left:40px}.mce-menu-item-indent-4{padding-left:45px}.mce-menu-item-indent-5{padding-left:50px}.mce-menu-item-indent-6{padding-left:55px}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:white}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}.mce-menu .mce-throbber-inline{height:25px;background-size:contain}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #AAA;background:#EEE;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #BBB;background:#DDD;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-slider-handle:focus{background:#BBB}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#ccc}.mce-splitbtn button{padding-right:6px;padding-left:6px}.mce-splitbtn .mce-open{padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open.mce-active{background-color:#dbdbdb;outline:1px solid #ccc}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#FFF}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#ffffff;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#FDFDFD}.mce-tab.mce-active{background:#FDFDFD;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#3498db}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce';font-style:normal;font-weight:normal;font-size:16px;line-height:16px;vertical-align:text-top;-webkit-font-smoothing:antialiased;display:inline-block;background:transparent center center;width:16px;height:16px;color:#333;-ie7-icon:' '}.mce-btn-small .mce-ico{font-family:'tinymce-small'}.mce-ico,i.mce-i-checkbox{zoom:expression(this.runtimeStyle['zoom'] = '1', this.innerHTML = this.currentStyle['-ie7-icon'].substr(1, 1) + ' ')}.mce-i-save{-ie7-icon:"\e000"}.mce-i-newdocument{-ie7-icon:"\e001"}.mce-i-fullpage{-ie7-icon:"\e002"}.mce-i-alignleft{-ie7-icon:"\e003"}.mce-i-aligncenter{-ie7-icon:"\e004"}.mce-i-alignright{-ie7-icon:"\e005"}.mce-i-alignjustify{-ie7-icon:"\e006"}.mce-i-alignnone{-ie7-icon:"\e003"}.mce-i-cut{-ie7-icon:"\e007"}.mce-i-paste{-ie7-icon:"\e008"}.mce-i-searchreplace{-ie7-icon:"\e009"}.mce-i-bullist{-ie7-icon:"\e00a"}.mce-i-numlist{-ie7-icon:"\e00b"}.mce-i-indent{-ie7-icon:"\e00c"}.mce-i-outdent{-ie7-icon:"\e00d"}.mce-i-blockquote{-ie7-icon:"\e00e"}.mce-i-undo{-ie7-icon:"\e00f"}.mce-i-redo{-ie7-icon:"\e010"}.mce-i-link{-ie7-icon:"\e011"}.mce-i-unlink{-ie7-icon:"\e012"}.mce-i-anchor{-ie7-icon:"\e013"}.mce-i-image{-ie7-icon:"\e014"}.mce-i-media{-ie7-icon:"\e015"}.mce-i-help{-ie7-icon:"\e016"}.mce-i-code{-ie7-icon:"\e017"}.mce-i-insertdatetime{-ie7-icon:"\e018"}.mce-i-preview{-ie7-icon:"\e019"}.mce-i-forecolor{-ie7-icon:"\e01a"}.mce-i-backcolor{-ie7-icon:"\e01a"}.mce-i-table{-ie7-icon:"\e01b"}.mce-i-hr{-ie7-icon:"\e01c"}.mce-i-removeformat{-ie7-icon:"\e01d"}.mce-i-subscript{-ie7-icon:"\e01e"}.mce-i-superscript{-ie7-icon:"\e01f"}.mce-i-charmap{-ie7-icon:"\e020"}.mce-i-emoticons{-ie7-icon:"\e021"}.mce-i-print{-ie7-icon:"\e022"}.mce-i-fullscreen{-ie7-icon:"\e023"}.mce-i-spellchecker{-ie7-icon:"\e024"}.mce-i-nonbreaking{-ie7-icon:"\e025"}.mce-i-template{-ie7-icon:"\e026"}.mce-i-pagebreak{-ie7-icon:"\e027"}.mce-i-restoredraft{-ie7-icon:"\e028"}.mce-i-untitled{-ie7-icon:"\e029"}.mce-i-bold{-ie7-icon:"\e02a"}.mce-i-italic{-ie7-icon:"\e02b"}.mce-i-underline{-ie7-icon:"\e02c"}.mce-i-strikethrough{-ie7-icon:"\e02d"}.mce-i-visualchars{-ie7-icon:"\e02e"}.mce-i-ltr{-ie7-icon:"\e02f"}.mce-i-rtl{-ie7-icon:"\e030"}.mce-i-copy{-ie7-icon:"\e031"}.mce-i-resize{-ie7-icon:"\e032"}.mce-i-browse{-ie7-icon:"\e034"}.mce-i-pastetext{-ie7-icon:"\e035"}.mce-i-rotateleft{-ie7-icon:"\eaa8"}.mce-i-rotateright{-ie7-icon:"\eaa9"}.mce-i-crop{-ie7-icon:"\ee78"}.mce-i-editimage{-ie7-icon:"\e914"}.mce-i-options{-ie7-icon:"\ec6a"}.mce-i-flipv{-ie7-icon:"\eaaa"}.mce-i-fliph{-ie7-icon:"\eaac"}.mce-i-zoomin{-ie7-icon:"\eb35"}.mce-i-zoomout{-ie7-icon:"\eb36"}.mce-i-sun{-ie7-icon:"\eccc"}.mce-i-moon{-ie7-icon:"\eccd"}.mce-i-arrowleft{-ie7-icon:"\edc0"}.mce-i-arrowright{-ie7-icon:"\edb8"}.mce-i-drop{-ie7-icon:"\e934"}.mce-i-contrast{-ie7-icon:"\ecd4"}.mce-i-sharpen{-ie7-icon:"\eba7"}.mce-i-palette{-ie7-icon:"\e92a"}.mce-i-resize2{-ie7-icon:"\edf9"}.mce-i-orientation{-ie7-icon:"\e601"}.mce-i-invert{-ie7-icon:"\e602"}.mce-i-gamma{-ie7-icon:"\e600"}.mce-i-remove{-ie7-icon:"\ed6a"}.mce-i-codesample{-ie7-icon:"\e603"}.mce-i-checkbox,.mce-i-selected{-ie7-icon:"\e033"}.mce-i-selected{visibility:hidden}.mce-i-backcolor{background:#BBB} \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/skin.less b/data/web/rc/program/js/tinymce/skins/lightgray/skin.less new file mode 100644 index 00000000..32c45ab9 --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/skin.less @@ -0,0 +1,2874 @@ + +// Variables +// Syntax: -()--()-(); +// Example: @btn-primary-bg-hover-hlight; + +@prefix: mce; + +// Default font +@font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +@font-size: 14px; +@line-height: 20px; +@has-gradients: false; +@has-radius: false; +@has-boxshadow: false; +@has-button-borders: false; + +// Text colors +@text: #333; +@text-inverse: white; +@text-disabled: #aaa; +@text-shadow: 0 1px 1px hsla(hue(@text-inverse), saturation(@text-inverse), lightness(@text-inverse), 0.75); +@text-error: #b94a48; +@text-warning: #c09853; +@text-success: #468847; + +// Button +@btn-text: @text; +@btn-text-shadow: none; +@btn-border-top: transparent; +@btn-border-right: transparent; +@btn-border-bottom: transparent; +@btn-border-left: transparent; +@btn-caret-border: @btn-text; +@btn-text-disabled: @text-disabled; +@btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05); +@btn-box-shadow-active: inset 0 2px 4px rgba(0, 0, 0, .15), 0 1px 2px rgba(0, 0, 0, .05); +@btn-box-disabled-opacity: 0.4; +@btn-bg: white; +@btn-bg-hlight: #D9D9D9; +@btn-bg-hover: darken(@btn-bg, 5%); +@btn-bg-hlight-hover: darken(@btn-bg-hlight, 5%); +@btn-border-hover: darken(@btn-bg, 20%); +@btn-border-active: darken(@btn-bg, 20%); +@btn-padding: 4px 8px; + +@btn-primary-bg: #2980b9; +@btn-primary-bg-hlight: #3498db; +@btn-primary-bg-hover: darken(@btn-primary-bg, 5%); +@btn-primary-bg-hover-hlight: darken(@btn-primary-bg-hlight, 5%); +@btn-primary-text: #fff; +@btn-primary-text-shadow: none; +@btn-primary-border-top: mix(@btn-border-top, @btn-primary-bg, 50%); +@btn-primary-border-right: mix(@btn-border-right, @btn-primary-bg, 50%); +@btn-primary-border-bottom: mix(@btn-border-bottom, @btn-primary-bg, 50%); +@btn-primary-border-left: mix(@btn-border-left, @btn-primary-bg, 50%); +@btn-primary-border: transparent; +@btn-primary-border-hover: transparent; + +// Button group +@btn-group-border-width: 1px; + +// Menu +@menuitem-text: @text; +@menu-bg: #fff; +@menu-margin: -1px 0 0; +@menu-border: rgba(0, 0, 0, 0.2); +@menubar-border: mix(@panel-border, @panel-bg, 60%); +@menuitem-text-inverse: @text-inverse; +@menubar-bg-active: darken(@btn-bg, 10%); +@menuitem-bg-hover: #0081C2; +@menuitem-bg-selected: #2980b9; +@menuitem-bg-selected-hlight: #3498db; +@menuitem-bg-disabled: #CCC; +@menuitem-caret: @menuitem-text; +@menuitem-caret-selected: @menuitem-text-inverse; +@menuitem-separator-top: transparent; +@menuitem-separator-bottom: rgba(0,0,0,0.1); +@menuitem-bg-active: #3498db; +@menuitem-text-active: @text-inverse; +@menuitem-preview-border-active: #aaa; +@menubar-menubtn-text: #333; + +// Panel +@panel-border: rgba(0,0,0,.2); +@panel-bg: #FDFDFD; +@panel-bg-hlight: #DDD; + +// Tabs +@tab-border: #c5c5c5; +@tab-bg: #ffffff; +@tab-bg-hover: #FDFDFD; +@tab-bg-active: #FDFDFD; +@tabs-bg: #FFF; + +// Tooltip +@tooltip-bg: #000; +@tooltip-text: white; +@tooltip-font-size: 11px; + +// Notification +@notification-font-size: 14px; +@notification-bg: #F0F0F0; +@notification-border: #CCCCCC; +@notification-text: #333333; +@notification-success-bg: #dff0d8; +@notification-success-border: #d6e9c6; +@notification-success-text: #3c763d; +@notification-info-bg: #d9edf7; +@notification-info-border: #779ECB; +@notification-info-text: #31708f; +@notification-warning-bg: #fcf8e3; +@notification-warning-border: #faebcc; +@notification-warning-text: #8a6d3b; +@notification-error-bg: #f2dede; +@notification-error-border: #ebccd1; +@notification-error-text: #a94442; + +// Infobox +@infobox-bg: @notification-bg; +@infobox-border: @notification-border; +@infobox-text: @notification-text; +@infobox-success-bg: @notification-success-bg; +@infobox-success-border: @notification-success-border; +@infobox-success-text: @notification-success-text; +@infobox-info-bg: @notification-info-bg; +@infobox-info-border: @notification-info-border; +@infobox-info-text: @notification-info-text; +@infobox-warning-bg: @notification-warning-bg; +@infobox-warning-border: @notification-warning-border; +@infobox-warning-text: @notification-warning-text; +@infobox-error-bg: @notification-error-bg; +@infobox-error-border: @notification-error-border; +@infobox-error-text: @notification-error-text; + +// Window +@window-border: #c5c5c5; +@window-head-border: @window-border; +@window-head-close: mix(@text, @window-bg, 60%); +@window-head-close-hover: mix(@text, @window-bg, 40%); +@window-foot-border: @window-border; +@window-foot-bg: @window-bg; +@window-fullscreen-bg: #FFF; +@window-modalblock-bg: #000; +@window-modalblock-opacity: 0.3; +@window-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +@window-bg: #FFF; +@window-title-font-size: 20px; + +// Popover +@popover-bg: @window-bg; +@popover-arrow-width: 10px; +@popover-arrow: @window-bg; +@popover-arrow-outer-width: @popover-arrow-width + 1; +@popover-arrow-outer: rgba(0, 0, 0, 0.25); + +// Floatpanel +@floatpanel-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + +// Checkbox +@checkbox-bg: @btn-bg; +@checkbox-bg-hlight: @btn-bg-hlight; +@checkbox-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .2), 0 1px 2px rgba(0, 0, 0, .05); +@checkbox-border: #c5c5c5; +@checkbox-border-focus: rgba(82, 168, 236, .8); + +// Path +@path-text: @text; +@path-bg-focus: #666; +@path-text-focus: #fff; + +// Textbox +@textbox-text-placeholder: #aaa; +@textbox-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +@textbox-bg: #fff; +@textbox-border: #c5c5c5; +@textbox-border-focus: #3498db; + +// Selectbox +@selectbox-bg: @textbox-bg; +@selectbox-border: @textbox-border; + +// Throbber +@throbber-bg: #fff url('img/loader.gif') no-repeat center center; + +// Combobox +@combobox-border: @textbox-border; +@combobox-error-text: @text-error; +@combobox-warning-text: @text-warning; +@combobox-success-text: @text-success; + +// Colorpicker +@colorpicker-border: @textbox-border; +@colorpicker-hue-bg: #fff; +@colorpicker-hue-border: #333; + +// Grid +@grid-bg-active: @menuitem-bg-active; +@grid-border-active: @menuitem-bg-active; +@grid-border: #d6d6d6; + +// Misc +@colorbtn-backcolor-bg: #BBB; +@iframe-border: @panel-border; + +// Slider +@slider-border: #AAA; +@slider-bg: #EEE; +@slider-handle-border: #BBB; +@slider-handle-bg: #DDD; +@slider-handle-bg-focus: #BBB; + +// Progress +@progress-border: #ccc; +@progress-bar-bg: #dfdfdf; +@progress-bar-bg-hlight: #cccccc; +@progress-text: @text; + +// Flow layout +@flow-layout-spacing: 2px; + + +// Reset + +.@{prefix}-container, .@{prefix}-container *, .@{prefix}-widget, .@{prefix}-widget *, .@{prefix}-reset { + margin: 0; padding: 0; border: 0; outline: 0; + vertical-align: top; background: transparent; + text-decoration: none; color: @text; + font-family: @font-family; + font-size: @font-size; text-shadow: none; float: none; + position: static; width: auto; height: auto; + white-space: nowrap; cursor: inherit; + -webkit-tap-highlight-color: transparent; + line-height: normal; font-weight: normal; + text-align: left; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; + direction: ltr; + max-width: none; +} + +.@{prefix}-widget button { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.@{prefix}-container *[unselectable] { + -moz-user-select: none; + -webkit-user-select: none; + -o-user-select: none; + user-select: none; +} + + +// Mixins + +.opacity(@opacity) { + opacity: @opacity; + @opacityie: @opacity * 100; + filter: ~"alpha(opacity=@{opacityie})"; + zoom: 1; +} + +.vertical-gradient(@startColor, @endColor) when (@has-gradients = true) { + background-color: mix(@startColor, @endColor, 60%); + background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+ + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+ + background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+ + background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10 + background-image: linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10 + background-repeat: repeat-x; + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)", argb(@startColor), argb(@endColor))); + zoom: 1; +} + +.vertical-gradient(@startColor, @endColor) when (@has-gradients = false) { + background-color: mix(@startColor, @endColor, 60%); +} + +.border-radius(@radius) when (@has-radius = true) { + -webkit-border-radius: @radius; + -moz-border-radius: @radius; + border-radius: @radius; +} + +.box-shadow(@shadowA, @shadowB:X, ...) when (@has-boxshadow = true) { + // Multiple shadow solution from http://toekneestuck.com/blog/2012/05/15/less-css-arguments-variable/ + @props: ~`"@{arguments}".replace(/[\[\]]|\,\sX/g, '')`; + -webkit-box-shadow: @props; + -moz-box-shadow: @props; + box-shadow: @props; +} + +.transition(@transition) { + -webkit-transition: @transition; + transition: @transition; +} + +.inline-block() { + display: inline-block; + *display: inline; + *zoom: 1; +} + +.reset-gradient() { + filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); + background: transparent; +} + + +// Animations + +.@{prefix}-fade { + opacity: 0; + .transition(opacity .15s linear); + + &.@{prefix}-in { + opacity: 1; + } +} + + +.@{prefix}-tinymce { + // Avoid FOUC + visibility: inherit !important; + position: relative; +} + +.@{prefix}-fullscreen { + border: 0; padding: 0; margin: 0; + overflow: hidden; + height: 100%; + z-index: 100; +} + +div.@{prefix}-fullscreen { + position: fixed; + top: 0; left: 0; + width: 100%; + height: auto; +} + +.@{prefix}-tinymce { + display: block; + .border-radius(2px); +} + +.@{prefix}-wordcount { + position: absolute; + top: 0; + right: 0; + padding: 8px; +} + +div.@{prefix}-edit-area { + background: #FFF; + filter: none; +} + +.@{prefix}-statusbar { + position: relative; +} + +.@{prefix}-statusbar .@{prefix}-container-body { + position: relative; +} + +.@{prefix}-fullscreen .@{prefix}-resizehandle { + display: none; +} + +// Charmap + +.@{prefix}-charmap { + border-collapse: collapse; +} + +.@{prefix}-charmap td { + cursor: default; + border: 1px solid @panel-border; + width: 20px; + height: 20px; + line-height: 20px; + text-align: center; + vertical-align: middle; + padding: 2px; +} + +.@{prefix}-charmap td div { + text-align: center; +} + +.@{prefix}-charmap td:hover { + background: @btn-bg-hlight; +} + +.@{prefix}-grid td.@{prefix}-grid-cell div { + border: 1px solid @grid-border; + width: 15px; height: 15px; + margin: 0px; + cursor: pointer; + + &:focus { + border-color: @grid-border-active; + } + + &[disabled] { + cursor: not-allowed; + } +} + +.@{prefix}-grid { + border-spacing: 2px; + border-collapse: separate; + + a { + display: block; + border: 1px solid transparent; + + &:hover, &:focus { + border-color: @grid-border-active; + } + } +} + +.@{prefix}-grid-border { + margin: 0 4px 0 4px; + + a { + border-color: @grid-border; + width: 13px; height: 13px; + } + + a:hover, a.@{prefix}-active { + border-color: @grid-border-active; + background: @grid-bg-active; + } +} + +.@{prefix}-text-center { + text-align: center; +} + +div.@{prefix}-tinymce-inline { + width: 100%; + .box-shadow(none); +} + +.@{prefix}-colorbtn-trans div { + text-align: center; + vertical-align: middle; + font-weight: bold; + font-size: 20px; + line-height: 16px; + color: mix(@text, #fff, 70%); +} + +.@{prefix}-monospace { + font-family: "Courier New", Courier, monospace; +} + +// Reduce double margins between toolbar rows + +.@{prefix}-toolbar-grp when (@has-button-borders = false) { + padding: @flow-layout-spacing 0; +} + +.@{prefix}-toolbar-grp when (@has-button-borders = true) { + padding-bottom: 2px; +} + +.@{prefix}-toolbar-grp .@{prefix}-flow-layout-item { + margin-bottom: 0; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-wordcount { + left: 0; + right: auto; +} + + +// CropRect + +.@{prefix}-croprect-container { + position: absolute; + top: 0; + left: 0; +} + +.@{prefix}-croprect-handle { + position: absolute; + top: 0; left: 0; + width: 20px; height: 20px; + border: 2px solid white; +} + +.@{prefix}-croprect-handle-nw { + border-width: 2px 0 0 2px; + margin: -2px 0 0 -2px; + cursor: nw-resize; + top: 100px; left: 100px; +} + +.@{prefix}-croprect-handle-ne { + border-width: 2px 2px 0 0; + margin: -2px 0 0 -20px; + cursor: ne-resize; + top: 100px; left: 200px; +} + +.@{prefix}-croprect-handle-sw { + border-width: 0 0 2px 2px; + margin: -20px 2px 0 -2px; + cursor: sw-resize; + top: 200px; left: 100px; +} + +.@{prefix}-croprect-handle-se { + border-width: 0 2px 2px 0; + margin: -20px 0 0 -20px; + cursor: se-resize; + top: 200px; left: 200px; +} + +.@{prefix}-croprect-handle-move { + position: absolute; + cursor: move; + border: 0; +} + +.@{prefix}-croprect-block { + .opacity(@window-modalblock-opacity); + position: absolute; + background: black; +} + +.@{prefix}-croprect-handle:focus { + border-color: @textbox-border-focus; +} + +.@{prefix}-croprect-handle-move:focus { + outline: 1px solid @textbox-border-focus; +} + + +// ImagePanel + +.@{prefix}-imagepanel { + overflow: auto; + background: black; +} + +.@{prefix}-imagepanel-bg { + position: absolute; + background: url('data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw=='); +} + +.@{prefix}-imagepanel img { + position: absolute; +} + +.@{prefix}-imagetool.@{prefix}-btn .@{prefix}-ico { + display: block; + width: 20px; + height: 20px; + text-align: center; + line-height: 20px; + font-size: 20px; + padding: 5px; +} + + +// Arrows + +.@{prefix}-arrow-up { + margin-top: 12px; +} + +.@{prefix}-arrow-down { + margin-top: -12px; +} + +.@{prefix}-arrow:before, +.@{prefix}-arrow:after { + position: absolute; + left: 50%; + display: block; + width: 0; + height: 0; + border-style: solid; + border-color: transparent; + content: ""; +} + +.@{prefix}-arrow.@{prefix}-arrow-up:before { + top: -9px; + border-bottom-color: @panel-border; + border-width: 0 9px 9px; + margin-left: -9px; +} + +.@{prefix}-arrow.@{prefix}-arrow-down:before { + bottom: -9px; + border-top-color: @panel-border; + border-width: 9px 9px 0; + margin-left: -9px; +} + +.@{prefix}-arrow.@{prefix}-arrow-up:after { + top: -8px; + border-bottom-color: mix(@panel-bg, @panel-bg-hlight, 60%); + border-width: 0 8px 8px; + margin-left: -8px; +} + +.@{prefix}-arrow.@{prefix}-arrow-down:after { + bottom: -8px; + border-top-color: mix(@panel-bg, @panel-bg-hlight, 60%); + border-width: 8px 8px 0; + margin-left: -8px; +} + +.@{prefix}-arrow.@{prefix}-arrow-left:before, +.@{prefix}-arrow.@{prefix}-arrow-left:after { + margin: 0; +} + +.@{prefix}-arrow.@{prefix}-arrow-left:before { + left: 8px; +} +.@{prefix}-arrow.@{prefix}-arrow-left:after { + left: 9px; +} + +.@{prefix}-arrow.@{prefix}-arrow-right:before, +.@{prefix}-arrow.@{prefix}-arrow-right:after { + left: auto; + margin: 0; +} + +.@{prefix}-arrow.@{prefix}-arrow-right:before { + right: 8px; +} + +.@{prefix}-arrow.@{prefix}-arrow-right:after { + right: 9px; +} + +.@{prefix}-arrow.@{prefix}-arrow-center.@{prefix}-arrow.@{prefix}-arrow-left:before { + left: -9px; + top: 50%; + border-right-color: @panel-border; + border-width: 9px 9px 9px 0; + margin-top: -9px; +} + +.@{prefix}-arrow.@{prefix}-arrow-center.@{prefix}-arrow.@{prefix}-arrow-left:after { + left: -8px; + top: 50%; + border-right-color: mix(@panel-bg, @panel-bg-hlight, 60%); + border-width: 8px 8px 8px 0; + margin-top: -8px; +} + +.@{prefix}-arrow.@{prefix}-arrow-center.@{prefix}-arrow.@{prefix}-arrow-left { + margin-left: 12px; +} + +.@{prefix}-arrow.@{prefix}-arrow-center.@{prefix}-arrow.@{prefix}-arrow-right:before { + right: -9px; + top: 50%; + border-left-color: @panel-border; + border-width: 9px 0 9px 9px; + margin-top: -9px; +} + +.@{prefix}-arrow.@{prefix}-arrow-center.@{prefix}-arrow.@{prefix}-arrow-right:after { + right: -8px; + top: 50%; + border-left-color: mix(@panel-bg, @panel-bg-hlight, 60%); + border-width: 8px 0 8px 8px; + margin-top: -8px; +} + +.@{prefix}-arrow.@{prefix}-arrow-center.@{prefix}-arrow.@{prefix}-arrow-right { + margin-left: -14px; +} + + +// Sidebar + +.@{prefix}-edit-aria-container > .@{prefix}-container-body { + display: flex; + + .@{prefix}-edit-area { + flex: 1; + } + + .@{prefix}-sidebar > .@{prefix}-container-body { + display: flex; + align-items: stretch; + height: 100%; + } + + .@{prefix}-sidebar-panel { + min-width: 250px; + max-width: 250px; + position: relative; + + > .@{prefix}-container-body { + position: absolute; + width: 100%; height: 100%; + overflow: auto; + top: 0; left: 0; + } + } +} + +.@{prefix}-sidebar-toolbar { + border: 0 solid @panel-border; + border-left-width: 1px; + + .@{prefix}-btn.@{prefix}-active, .@{prefix}-btn.@{prefix}-active:hover { + border: 1px solid transparent; + border-color: @btn-primary-border; + .vertical-gradient(@btn-primary-bg, @btn-primary-bg-hlight); + + button, button i { + color: @btn-primary-text; + text-shadow: 1px 1px @btn-primary-text-shadow; + } + } +} + +.@{prefix}-sidebar-panel { + border: 0 solid @panel-border; + border-left-width: 1px; +} + + +// Container + +.@{prefix}-container, .@{prefix}-container-body { + display: block; +} + +.@{prefix}-autoscroll { + overflow: hidden; +} + + +// Scrollbar + +.@{prefix}-scrollbar { + position: absolute; + width: 7px; + height: 100%; + top: 2px; + right: 2px; + .opacity(0.4); +} + +.@{prefix}-scrollbar-h { + top: auto; + right: auto; + left: 2px; + bottom: 2px; + width: 100%; + height: 7px; +} + +.@{prefix}-scrollbar-thumb { + position: absolute; + background-color: #000; + border: 1px solid #888; + border-color: rgba(85, 85, 85, .6); + width: 5px; + height: 100%; + .border-radius(7px); +} + +.@{prefix}-scrollbar-h .@{prefix}-scrollbar-thumb { + width: 100%; + height: 5px; +} + +.@{prefix}-scrollbar:hover, .@{prefix}-scrollbar.@{prefix}-active { + background-color: #AAA; + .opacity(0.6); + .border-radius(7px); +} + +.@{prefix}-scroll { + position: relative; +} + + +// Panel + +.@{prefix}-panel { + border: 0 solid mix(rgb(red(@panel-border), green(@panel-border), blue(@panel-border)), @panel-bg, 20%); + border: 0 solid @panel-border; + .vertical-gradient(@panel-bg, @panel-bg-hlight); +} + + +// FloatPanel + +.@{prefix}-floatpanel { + position: absolute; + .box-shadow(@floatpanel-box-shadow); +} + +.@{prefix}-floatpanel.@{prefix}-fixed { + position: fixed; +} + +// Popover panel + +.@{prefix}-floatpanel .@{prefix}-arrow, +.@{prefix}-floatpanel .@{prefix}-arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.@{prefix}-floatpanel .@{prefix}-arrow { + border-width: @popover-arrow-outer-width; +} + +.@{prefix}-floatpanel .@{prefix}-arrow:after { + border-width: @popover-arrow-width; + content: ""; +} + +.@{prefix}-floatpanel.@{prefix}-popover { + .reset-gradient(); + .border-radius(6px); + .box-shadow(@floatpanel-box-shadow); + top: 0; + left: 0; + background: @popover-bg; + border: 1px solid @panel-border; + border: 1px solid @popover-arrow-outer; + + &.@{prefix}-bottom { + margin-top: @popover-arrow-width; + *margin-top: 0; + + & > .@{prefix}-arrow { + left: 50%; + margin-left: -@popover-arrow-outer-width; + border-top-width: 0; + border-bottom-color: @panel-border; + border-bottom-color: @popover-arrow-outer; + top: -@popover-arrow-outer-width; + + &:after { + top: 1px; + margin-left: -@popover-arrow-width; + border-top-width: 0; + border-bottom-color: @popover-arrow; + } + } + + &.@{prefix}-start { margin-left: -22px; } + &.@{prefix}-start > .@{prefix}-arrow { left: 20px; } + + &.@{prefix}-end { margin-left: 22px; } + &.@{prefix}-end > .@{prefix}-arrow { right: 10px; left: auto; } + } +} + +// Window + +.@{prefix}-fullscreen { + border: 0; padding: 0; margin: 0; + overflow: hidden; + height: 100%; +} + +div.@{prefix}-fullscreen { + position: fixed; + top: 0; left: 0; +} + +#@{prefix}-modal-block { + .opacity(0); + position: fixed; + left: 0; top: 0; + width: 100%; height: 100%; + background: @window-modalblock-bg; +} + +#@{prefix}-modal-block.@{prefix}-in { + .opacity(@window-modalblock-opacity); +} + +.@{prefix}-window-move { + cursor: move; +} + +.@{prefix}-window { + .border-radius(6px); + .box-shadow(@window-box-shadow); + .reset-gradient(); + background: @window-bg; + position: fixed; + top: 0; left: 0; + opacity: 0; + transform: scale(0.1); + transition: transform 100ms ease-in, opacity 150ms ease-in; +} + +.@{prefix}-window.@{prefix}-in { + transform: scale(1); + opacity: 1; +} + +.@{prefix}-window-head { + padding: 9px 15px; + border-bottom: 1px solid @window-head-border; + position: relative; +} + +.@{prefix}-window-head .@{prefix}-close { + position: absolute; + right: 0; + top: 0; + height: 38px; + width: 38px; + text-align: center; + cursor: pointer; + + i { + color: @window-head-close; + } +} + +.@{prefix}-close:hover i { + color: @window-head-close-hover; +} + +.@{prefix}-window-head .@{prefix}-title { + line-height: 20px; + font-size: @window-title-font-size; + font-weight: bold; + text-rendering: optimizelegibility; + padding-right: 20px; +} + +.@{prefix}-window .@{prefix}-container-body { + display: block; +} + +.@{prefix}-foot { + display: block; + background-color: @window-foot-bg; + border-top: 1px solid @window-foot-border; + .border-radius(0 0 6px 6px); +} + +.@{prefix}-window-head .@{prefix}-dragh { + position: absolute; + top: 0; left: 0; + cursor: move; + width: 90%; + height: 100%; +} + +.@{prefix}-window iframe { + width: 100%; + height: 100%; +} + +.@{prefix}-window.@{prefix}-fullscreen, .@{prefix}-window.@{prefix}-fullscreen .@{prefix}-foot { + .border-radius(0); +} + +.@{prefix}-window-body .@{prefix}-listbox { + border-color: @btn-border-hover; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-window-head .@{prefix}-close { + position: absolute; + right: auto; + left: 15px; +} + +.@{prefix}-rtl .@{prefix}-window-head .@{prefix}-dragh { + left: auto; + right: 0; +} + +.@{prefix}-rtl .@{prefix}-window-head .@{prefix}-title { + direction: rtl; + text-align: right; +} + + +// Tooltip + +.@{prefix}-tooltip { + position: absolute; + padding: 5px; + .opacity(0.8); +} + +.@{prefix}-tooltip-inner { + font-size: @tooltip-font-size; + background-color: @tooltip-bg; + color: @tooltip-text; + max-width: 200px; + padding: 5px 8px 4px 8px; + text-align: center; + white-space: normal; +} + +.@{prefix}-tooltip-inner { + .border-radius(3px); +} + +.@{prefix}-tooltip-inner { + .box-shadow(0 0 5px @tooltip-bg); +} + +.@{prefix}-tooltip-arrow { + position: absolute; + width: 0; + height: 0; + line-height: 0; + border: 5px dashed @tooltip-bg; +} + +.@{prefix}-tooltip-arrow-n { + border-bottom-color: @tooltip-bg; +} + +.@{prefix}-tooltip-arrow-s { + border-top-color: @tooltip-bg; +} + +.@{prefix}-tooltip-arrow-e { + border-left-color: @tooltip-bg; +} + +.@{prefix}-tooltip-arrow-w { + border-right-color: @tooltip-bg; +} + +.@{prefix}-tooltip-nw, .@{prefix}-tooltip-sw { + margin-left: -14px; +} + +.@{prefix}-tooltip-ne, .@{prefix}-tooltip-se { + margin-left: 14px; +} + +.@{prefix}-tooltip-n .@{prefix}-tooltip-arrow { + top: 0px; + left: 50%; + margin-left: -5px; + border-bottom-style: solid; + border-top: none; + border-left-color: transparent; + border-right-color: transparent; +} + +.@{prefix}-tooltip-nw .@{prefix}-tooltip-arrow { + top: 0; + left: 10px; + border-bottom-style: solid; + border-top: none; + border-left-color: transparent; + border-right-color: transparent; +} + +.@{prefix}-tooltip-ne .@{prefix}-tooltip-arrow { + top: 0; + right: 10px; + border-bottom-style: solid; + border-top: none; + border-left-color: transparent; + border-right-color: transparent; +} + +.@{prefix}-tooltip-s .@{prefix}-tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-style: solid; + border-bottom: none; + border-left-color: transparent; + border-right-color: transparent; +} + +.@{prefix}-tooltip-sw .@{prefix}-tooltip-arrow { + bottom: 0; + left: 10px; + border-top-style: solid; + border-bottom: none; + border-left-color: transparent; + border-right-color: transparent; +} + +.@{prefix}-tooltip-se .@{prefix}-tooltip-arrow { + bottom: 0; + right: 10px; + border-top-style: solid; + border-bottom: none; + border-left-color: transparent; + border-right-color: transparent; +} + +.@{prefix}-tooltip-e .@{prefix}-tooltip-arrow { + right: 0; + top: 50%; + margin-top: -5px; + border-left-style: solid; + border-right: none; + border-top-color: transparent; + border-bottom-color: transparent; +} + +.@{prefix}-tooltip-w .@{prefix}-tooltip-arrow { + left: 0; + top: 50%; + margin-top: -5px; + border-right-style: solid; + border-left: none; + border-top-color: transparent; + border-bottom-color: transparent; +} + + +// Progress + +.@{prefix}-progress { + display: inline-block; + position: relative; + height: 20px; +} + +.@{prefix}-progress .@{prefix}-bar-container { + display: inline-block; + width: 100px; + height: 100%; + margin-right: 8px; + border: 1px solid @progress-border; + overflow: hidden; + .border-radius(4px); +} + +.@{prefix}-progress .@{prefix}-text { + display: inline-block; + margin-top: auto; + margin-bottom: auto; + font-size: 14px; + width: 40px; + color: @progress-text; +} + +.@{prefix}-bar { + display: block; + width: 0%; + height: 100%; + .vertical-gradient(@progress-bar-bg, @progress-bar-bg-hlight); + .transition(width .2s ease); +} + + +// notification + +.@{prefix}-notification { + position: absolute; + background-color: @notification-bg; + padding: 5px; + margin-top: 5px; + border-width: 1px; + border-style: solid; + border-color: @notification-border; + transition: transform 100ms ease-in, opacity 150ms ease-in; + opacity: 0; +} + +.@{prefix}-notification.@{prefix}-in { + opacity: 1; +} + +.@{prefix}-notification-success { + background-color: @notification-success-bg; + border-color: @notification-success-border; +} + +.@{prefix}-notification-info { + background-color: @notification-info-bg; + border-color: @notification-info-border; +} + +.@{prefix}-notification-warning { + background-color: @notification-warning-bg; + border-color: @notification-warning-border; +} + +.@{prefix}-notification-error { + background-color: @notification-error-bg; + border-color: @notification-error-border; +} + +.@{prefix}-notification.@{prefix}-has-close { + padding-right: 15px; +} + +.@{prefix}-notification .@{prefix}-ico { + margin-top: 5px; +} + +.@{prefix}-notification-inner { + display: inline-block; + font-size: @notification-font-size; + margin: 5px 8px 4px 8px; + text-align: center; + white-space: normal; + color: @notification-info-text; +} + +.@{prefix}-notification-inner a { + text-decoration: underline; + cursor: pointer; +} + +.@{prefix}-notification .@{prefix}-progress { + margin-right: 8px; +} + +.@{prefix}-notification .@{prefix}-progress .@{prefix}-text { + margin-top: 5px; +} + +.@{prefix}-notification *, .@{prefix}-notification .@{prefix}-progress .@{prefix}-text { + color: @notification-text; +} + +.@{prefix}-notification .@{prefix}-progress .@{prefix}-bar-container { + border-color: @notification-border; +} + +.@{prefix}-notification .@{prefix}-progress .@{prefix}-bar-container .@{prefix}-bar { + background-color: @notification-text; +} + +.@{prefix}-notification-success *, .@{prefix}-notification-success .@{prefix}-progress .@{prefix}-text { + color: @notification-success-text; +} + +.@{prefix}-notification-success .@{prefix}-progress .@{prefix}-bar-container { + border-color: @notification-success-border; +} + +.@{prefix}-notification-success .@{prefix}-progress .@{prefix}-bar-container .@{prefix}-bar { + background-color: @notification-success-text; +} + +.@{prefix}-notification-info *, .@{prefix}-notification-info .@{prefix}-progress .@{prefix}-text { + color: @notification-info-text; +} + +.@{prefix}-notification-info .@{prefix}-progress .@{prefix}-bar-container { + border-color: @notification-info-border; +} + +.@{prefix}-notification-info .@{prefix}-progress .@{prefix}-bar-container .@{prefix}-bar { + background-color: @notification-info-text; +} + +.@{prefix}-notification-warning *, .@{prefix}-notification-warning .@{prefix}-progress .@{prefix}-text { + color: @notification-warning-text; +} + +.@{prefix}-notification-warning .@{prefix}-progress .@{prefix}-bar-container { + border-color: @notification-warning-border; +} + +.@{prefix}-notification-warning .@{prefix}-progress .@{prefix}-bar-container .@{prefix}-bar { + background-color: @notification-warning-text; +} + +.@{prefix}-notification-error *, .@{prefix}-notification-error .@{prefix}-progress .@{prefix}-text { + color: @notification-error-text; +} + +.@{prefix}-notification-error .@{prefix}-progress .@{prefix}-bar-container { + border-color: @notification-error-border; +} + +.@{prefix}-notification-error .@{prefix}-progress .@{prefix}-bar-container .@{prefix}-bar { + background-color: @notification-error-text; +} + +.@{prefix}-notification .@{prefix}-close { + position: absolute; + top: 6px; + right: 8px; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: @window-head-close; + cursor: pointer; + + // IE7 + height: 20px; + overflow: hidden; +} + +// AbsoluteLayout + +.@{prefix}-abs-layout { + position: relative; +} + +body .@{prefix}-abs-layout-item, .@{prefix}-abs-end { + position: absolute; +} + +.@{prefix}-abs-end { + width: 1px; height: 1px; +} + +.@{prefix}-container-body.@{prefix}-abs-layout { + overflow: hidden; +} + + +// Button + +.@{prefix}-btn { + border: 1px solid mix(rgb(red(@btn-border-right), green(@btn-border-right), blue(@btn-border-right)), @panel-bg, 30%); + border-color: @btn-border-top @btn-border-right @btn-border-bottom @btn-border-left; + position: relative; + text-shadow: @text-shadow; + + .inline-block(); + .border-radius(3px); + .box-shadow(@btn-box-shadow); + .vertical-gradient(@btn-bg, @btn-bg-hlight); + + &:hover, &:focus { + color: @btn-text; + .vertical-gradient(darken(@btn-bg, 5%), darken(@btn-bg-hlight, 5%)); + border-color: @btn-border-hover; + } + + &.@{prefix}-disabled button, &.@{prefix}-disabled:hover button { + cursor: default; + .box-shadow(none); + .opacity(@btn-box-disabled-opacity); + } + + &.@{prefix}-active, &.@{prefix}-active:hover { + .vertical-gradient(darken(@btn-bg, 10%), darken(@btn-bg-hlight, 5%)); + .box-shadow(@btn-box-shadow-active); + border-color: darken(@btn-bg, 20%); + } + + &:active { + .vertical-gradient(darken(@btn-bg, 7%), darken(@btn-bg-hlight, 5%)); + .box-shadow(@btn-box-shadow-active); + border-color: @btn-border-active; + + } +} + +.@{prefix}-btn button { + padding: @btn-padding; + font-size: @font-size; + line-height: @line-height; + *line-height: @line-height - 4px; + cursor: pointer; + color: @btn-text; + text-align: center; + + // Fixes for default inner padding of button + overflow: visible; // IE7 + -webkit-appearance: none; // WebKit + &::-moz-focus-inner { // Gecko + border: 0; + padding: 0; + } +} + +.@{prefix}-btn i { + text-shadow: 1px 1px @btn-text-shadow; +} + +.@{prefix}-primary.@{prefix}-btn-has-text { + min-width: 50px; +} + +.@{prefix}-primary { + color: @btn-primary-text; + border: 1px solid transparent; + border-color: @btn-primary-border; + .vertical-gradient(@btn-primary-bg, @btn-primary-bg-hlight); + + &:hover, &:focus { + .vertical-gradient(darken(@btn-primary-bg, 5%), darken(@btn-primary-bg-hlight, 5%)); + border-color: @btn-primary-border-hover; + } + + &.@{prefix}-disabled button, &.@{prefix}-disabled:hover button { + cursor: default; + .box-shadow(none); + .opacity(@btn-box-disabled-opacity); + } + + &.@{prefix}-active, &.@{prefix}-active:hover, &:not(.@{prefix}-disabled):active { + .vertical-gradient(darken(@btn-primary-bg, 10%), darken(@btn-primary-bg-hlight, 10%)); + .box-shadow(@btn-box-shadow-active); + } +} + +.@{prefix}-primary button, .@{prefix}-primary button i { + color: @btn-primary-text; + text-shadow: 1px 1px @btn-primary-text-shadow; +} + +.@{prefix}-btn .@{prefix}-txt { + font-size: inherit; + line-height: inherit; + color: inherit; +} + +.@{prefix}-btn-large button { + padding: 9px 14px; + font-size: @font-size + 2px; + line-height: normal; + .border-radius(5px); +} + +.@{prefix}-btn-large i { + margin-top: 2px; +} + +.@{prefix}-btn-small button { + padding: 1px 5px; + font-size: @font-size - 2px; + *padding-bottom: 2px; +} + +.@{prefix}-btn-small i { + line-height: 20px; + vertical-align: top; + *line-height: 18px; +} + +.@{prefix}-btn .@{prefix}-caret { + margin-top: 8px; + margin-left: 0; +} + +.@{prefix}-btn-small .@{prefix}-caret { + margin-top: 8px; + margin-left: 0; +} + +.@{prefix}-caret { + .inline-block(); + width: 0; height: 0; + vertical-align: top; + border-top: 4px solid @btn-caret-border; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} + +.@{prefix}-disabled .@{prefix}-caret { + border-top-color: @text-disabled; +} + +.@{prefix}-caret.@{prefix}-up { + border-bottom: 4px solid @btn-caret-border; + border-top: 0; +} + +.@{prefix}-btn-flat { + border: 0; + background: transparent; + .border-radius(0); + .box-shadow(none); + filter: none; +} + +.@{prefix}-btn-flat:hover, .@{prefix}-btn-flat.@{prefix}-active, .@{prefix}-btn-flat:focus, .@{prefix}-btn-flat:active { + border: 0; + background: @menubar-bg-active; + filter: none; + .box-shadow(none); +} + +.@{prefix}-btn-has-text .@{prefix}-ico { + padding-right: 5px; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-btn button { + direction: rtl; +} + + +// ButtonGroup + +.btn-group-border-left(@border-color) when (@has-button-borders = true) { + border-left: 1px solid @border-color; +} + +.btn-group-border-right(@border-color) when (@has-button-borders = true) { + border-right: 1px solid @border-color; +} + + +.@{prefix}-btn-group .@{prefix}-btn { + border-width: @btn-group-border-width; + margin: 0; + .border-radius(0); + margin-left: @flow-layout-spacing; +} + +.@{prefix}-btn-group .@{prefix}-btn when (@has-button-borders = true) { + border-left-width: 0; + border-right-width: 0; + margin-left: 0; +} + +.@{prefix}-btn-group:not(:first-child) when (@has-button-borders = true) { + padding-left: 1px; + margin-left: 1px; +} + +.@{prefix}-btn-group:not(:first-child) when (@has-button-borders = false) { + border-left: 1px solid darken(@btn-bg, 15%); + padding-left: @flow-layout-spacing + 1px; + margin-left: @flow-layout-spacing + 1px; +} + +.@{prefix}-btn-group .@{prefix}-first { + .border-radius(3px 0 0 3px); + .btn-group-border-left(@btn-border-left); + margin-left: 0; +} + +.@{prefix}-btn-group .@{prefix}-last { + .border-radius(0 3px 3px 0); + .btn-group-border-right(@btn-border-right); +} + +.@{prefix}-btn-group .@{prefix}-first.@{prefix}-last { + .border-radius(3px); +} + +.@{prefix}-btn-group .@{prefix}-btn.@{prefix}-flow-layout-item { + margin: 0; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-btn-group .@{prefix}-btn { + margin-left: 0; + margin-right: @flow-layout-spacing; +} + +.@{prefix}-rtl .@{prefix}-btn-group .@{prefix}-first { + margin-right: 0; +} + +.@{prefix}-rtl .@{prefix}-btn-group:not(:first-child) { + border-left: none; + border-right:1px solid darken(@btn-bg, 15%); + padding-right: @flow-layout-spacing + 2px; + margin-right: @flow-layout-spacing + 2px; +} + + +// Checkbox + +.@{prefix}-checkbox { + cursor: pointer; +} + +i.@{prefix}-i-checkbox { + margin: 0 3px 0 0; + border: 1px solid @checkbox-border; + .border-radius(3px); + .box-shadow(@checkbox-box-shadow); + .vertical-gradient(@checkbox-bg, @checkbox-bg-hlight); + text-indent: -10em; + *font-size: 0; + *line-height: 0; + *text-indent: 0; + overflow: hidden; +} + +.@{prefix}-checked i.@{prefix}-i-checkbox { + color: @btn-text; + font-size: 16px; + line-height: 16px; + text-indent: 0; +} + +.@{prefix}-checkbox:focus i.@{prefix}-i-checkbox, .@{prefix}-checkbox.@{prefix}-focus i.@{prefix}-i-checkbox { + border: 1px solid @checkbox-border-focus; + .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px fadeout(@checkbox-border-focus, 15%)); +} + +.@{prefix}-checkbox.@{prefix}-disabled .@{prefix}-label, .@{prefix}-checkbox.@{prefix}-disabled i.@{prefix}-i-checkbox { + color: mix(@text, @panel-bg, 40%); +} + +.@{prefix}-checkbox .@{prefix}-label { + vertical-align: middle; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-checkbox { + direction: rtl; + text-align: right; +} + +.@{prefix}-rtl i.@{prefix}-i-checkbox { + margin: 0 0 0 3px; +} + + +// ComboBox + +.@{prefix}-combobox { + position: relative; + .inline-block(); + .border-radius(3px); + .box-shadow(@textbox-box-shadow); + *height: 32px; +} + +.@{prefix}-combobox input { + border: 1px solid @textbox-border; + border-right-color: @combobox-border; + height: 28px; +} + +.@{prefix}-combobox.@{prefix}-disabled input { + color: mix(@text, @textbox-bg, 40%); +} + +.@{prefix}-combobox.@{prefix}-has-open input { + .border-radius(4px 0 0 4px); +} + +.@{prefix}-combobox .@{prefix}-btn { + border: 1px solid @textbox-border; + border-left: 0; + .border-radius(0 4px 4px 0); + margin: 0; +} + +.@{prefix}-combobox button { + padding-right: 8px; + padding-left: 8px; +} + +.@{prefix}-combobox.@{prefix}-disabled .@{prefix}-btn button { + cursor: default; + .box-shadow(none); + .opacity(@btn-box-disabled-opacity); +} + +.@{prefix}-combobox .@{prefix}-status { + position: absolute; + right: 2px; + top: 50%; + line-height: 16px; + margin-top: -8px; + font-size: 12px; + width: 15px; + height: 15px; + text-align: center; + cursor: pointer; +} + +.@{prefix}-combobox.@{prefix}-has-status input { + padding-right: 20px; +} + +.@{prefix}-combobox.@{prefix}-has-open .@{prefix}-status { + right: 37px; +} + +.@{prefix}-combobox .@{prefix}-status.@{prefix}-i-warning { + color: @combobox-warning-text; +} + +.@{prefix}-combobox .@{prefix}-status.@{prefix}-i-checkmark { + color: @combobox-success-text; +} + +.@{prefix}-menu.@{prefix}-combobox-menu { + border-top: 0; + margin-top: 0; + max-height: 200px; + + .@{prefix}-menu-item { + padding: 4px 6px 4px 4px; + font-size: 11px; + } + + .@{prefix}-menu-item-sep { + padding: 0; + } + + .@{prefix}-text { + font-size: 11px; + } + + .@{prefix}-menu-item-link, .@{prefix}-menu-item-link b { + font-size: 11px; + } + + .@{prefix}-text b { + font-size: 11px; + } +} + + +// ColorBox + +.@{prefix}-colorbox i { + border: 1px solid @textbox-border; + width: 14px; height: 14px; +} + + +// ColorButton + +.@{prefix}-colorbutton .@{prefix}-ico { + position: relative; +} + +.@{prefix}-colorbutton-grid { + margin: 4px; +} + +.@{prefix}-colorbutton button { + padding-right: 6px; + padding-left: 6px; +} + +.@{prefix}-colorbutton .@{prefix}-preview { + padding-right: 3px; + display: block; + position: absolute; + left: 50%; + top: 50%; + margin-left: -17px; + margin-top: 7px; + background: gray; + width: 13px; + height: 2px; + overflow: hidden; +} + +.@{prefix}-colorbutton.@{prefix}-btn-small .@{prefix}-preview { + margin-left: -16px; + padding-right: 0; + width: 16px; +} + +.@{prefix}-colorbutton .@{prefix}-open { + padding-left: 4px; + padding-right: 4px; + border-left: 1px solid transparent; +} + +.@{prefix}-colorbutton:hover .@{prefix}-open { + border-color: darken(@btn-bg, 20%); +} + +.@{prefix}-colorbutton.@{prefix}-btn-small .@{prefix}-open { + padding: 0 3px 0 3px; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-colorbutton { + direction: rtl; +} + +.@{prefix}-rtl .@{prefix}-colorbutton .@{prefix}-preview { + margin-left: 0; + padding-right: 0; + padding-left: 3px; +} + +.@{prefix}-rtl .@{prefix}-colorbutton.@{prefix}-btn-small .@{prefix}-preview { + margin-left: 0; + padding-right: 0; + padding-left: 2px; +} + +.@{prefix}-rtl .@{prefix}-colorbutton .@{prefix}-open { + padding-left: 4px; + padding-right: 4px; + border-left: 0; +} + + +// ColorPicker + +.@{prefix}-colorpicker { + position: relative; + width: 250px; + height: 220px; +} + +.@{prefix}-colorpicker-sv { + position: absolute; + top: 0; left: 0; + width: 90%; + height: 100%; + border: 1px solid @colorpicker-border; + cursor: crosshair; + overflow: hidden; +} + +.@{prefix}-colorpicker-h-chunk { + width: 100%; +} + +.@{prefix}-colorpicker-overlay1, .@{prefix}-colorpicker-overlay2 { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; +} + +.@{prefix}-colorpicker-overlay1 { + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff'); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')"; + background: linear-gradient(to right, rgba(255,255,255,1), rgba(255,255,255,0)); +} + +.@{prefix}-colorpicker-overlay2 { + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000'); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')"; + background: linear-gradient(to bottom, rgba(0,0,0,0), rgba(0,0,0,1)); +} + +.@{prefix}-colorpicker-selector1 { + background: none; + position: absolute; + width: 12px; + height: 12px; + margin: -8px 0 0 -8px; + border: 1px solid black; + border-radius: 50%; +} + +.@{prefix}-colorpicker-selector2 { + position: absolute; + width: 10px; + height: 10px; + border: 1px solid white; + border-radius: 50%; +} + +.@{prefix}-colorpicker-h { + position: absolute; + top: 0; right: 0; + width: 6.5%; + height: 100%; + border: 1px solid @colorpicker-border; + cursor: crosshair; +} + +.@{prefix}-colorpicker-h-marker { + margin-top: -4px; + position: absolute; + top: 0; + left: -1px; + width: 100%; + border: 1px solid @colorpicker-hue-border; + background: @colorpicker-hue-bg; + height: 4px; + z-index: 100; +} + + +// Path + +.@{prefix}-path { + .inline-block(); + padding: 8px; + white-space: normal; +} + +.@{prefix}-path .@{prefix}-txt { + display: inline-block; + padding-right: 3px; +} + +.@{prefix}-path .@{prefix}-path-body { + display: inline-block; +} + +.@{prefix}-path-item { + .inline-block(); + cursor: pointer; + color: @path-text; +} + +.@{prefix}-path-item:hover { + text-decoration: underline; +} + +.@{prefix}-path-item:focus { + background: @path-bg-focus; + color: @path-text-focus; +} + +.@{prefix}-path .@{prefix}-divider { + display: inline; +} + +.@{prefix}-disabled .@{prefix}-path-item { + color: @text-disabled; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-path { + direction: rtl; +} + + +// FieldSet + +.@{prefix}-fieldset { + border: 0 solid #9E9E9E; + .border-radius(3px); +} + +.@{prefix}-fieldset > .@{prefix}-container-body { + margin-top: -15px; +} + +.@{prefix}-fieldset-title { + margin-left: 5px; + padding: 0 5px 0 5px; +} + +// FitLayout + +.@{prefix}-fit-layout { + .inline-block(); +} + +.@{prefix}-fit-layout-item { + position: absolute; +} + + +// FlowLayout + +.@{prefix}-flow-layout-item { + .inline-block(); +} + +.@{prefix}-flow-layout-item { + margin: @flow-layout-spacing 0 @flow-layout-spacing @flow-layout-spacing; +} + +.@{prefix}-flow-layout-item.@{prefix}-last { + margin-right: @flow-layout-spacing; +} + +.@{prefix}-flow-layout { + white-space: normal; +} + +.@{prefix}-tinymce-inline .@{prefix}-flow-layout { + white-space: nowrap; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-flow-layout { + text-align: right; + direction: rtl; +} + +.@{prefix}-rtl .@{prefix}-flow-layout-item { + margin: @flow-layout-spacing @flow-layout-spacing @flow-layout-spacing 0; +} + +.@{prefix}-rtl .@{prefix}-flow-layout-item.@{prefix}-last { + margin-left: @flow-layout-spacing; +} + + +// Iframe + +.@{prefix}-iframe { + border: 0 solid @iframe-border; + width: 100%; height: 100%; +} + + +// InfoBox + +.@{prefix}-infobox { + .inline-block(); + text-shadow: @text-shadow; + overflow: hidden; + border: 1px solid red; + + div { + display: block; + margin: 5px; + + button { + position: absolute; + top: 50%; right: 4px; + cursor: pointer; + margin-top: -8px; + display: none; + } + + button:focus { + outline: 2px solid @btn-border-hover; + } + } +} + +.@{prefix}-infobox.@{prefix}-has-help { + div { + margin-right: 25px; + } + + button { + display: block; + } +} + +.@{prefix}-infobox.@{prefix}-success { + background: @infobox-success-bg; + border-color: @infobox-success-border; + + div { + color: @infobox-success-text; + } +} + +.@{prefix}-infobox.@{prefix}-warning { + background: @infobox-warning-bg; + border-color: @infobox-warning-border; + + div { + color: @infobox-warning-text; + } +} + +.@{prefix}-infobox.@{prefix}-error { + background: @infobox-error-bg; + border-color: @infobox-error-border; + + div { + color: @infobox-error-text; + } +} + +// RTL + +.@{prefix}-rtl .@{prefix}-infobox { + div { + text-align: right; + direction: rtl; + } +} + + +// Label + +.@{prefix}-label { + .inline-block(); + text-shadow: @text-shadow; + overflow: hidden; +} + +.@{prefix}-label.@{prefix}-autoscroll { + overflow: auto; +} + +.@{prefix}-label.@{prefix}-disabled { + color: @text-disabled; +} + +.@{prefix}-label.@{prefix}-multiline { + white-space: pre-wrap; +} + +.@{prefix}-label.@{prefix}-success { + color: @text-success; +} + +.@{prefix}-label.@{prefix}-warning { + color: @text-warning; +} + +.@{prefix}-label.@{prefix}-error { + color: @text-error; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-label { + text-align: right; + direction: rtl; +} + + +/* MenuBar */ + +.@{prefix}-menubar .@{prefix}-menubtn { + border-color: transparent; + background: transparent; + .border-radius(0); + .box-shadow(none); + filter: none; +} + +.@{prefix}-menubar .@{prefix}-menubtn button { + color: @menubar-menubtn-text; +} + +.@{prefix}-menubar { + border: 1px solid @menubar-border; +} + +.@{prefix}-menubar .@{prefix}-menubtn button span { + color: @text; +} + +.@{prefix}-menubar .@{prefix}-caret { + border-top-color: @text; +} + +.@{prefix}-menubar .@{prefix}-menubtn:hover, .@{prefix}-menubar .@{prefix}-menubtn.@{prefix}-active, .@{prefix}-menubar .@{prefix}-menubtn:focus { + border-color: darken(@btn-bg, 20%); + background: @menu-bg; + filter: none; + .box-shadow(none); +} + + +/* MenuButton */ + +.@{prefix}-menubtn button { + color: @btn-text; + //margin-right: 2px; + //line-height: @line-height; + //*line-height: @line-height - 4px; +} + +.@{prefix}-menubtn.@{prefix}-btn-small span { + font-size: @font-size - 2px; +} + +.@{prefix}-menubtn.@{prefix}-fixed-width span { + display: inline-block; + overflow-x: hidden; + text-overflow: ellipsis; + width: 90px; +} + +.@{prefix}-menubtn.@{prefix}-fixed-width.@{prefix}-btn-small span { + width: 70px; +} + +.@{prefix}-menubtn .@{prefix}-caret { + *margin-top: 6px; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-menubtn button { + direction: rtl; + text-align: right; +} + + +// MenuItem + +.@{prefix}-menu-item { + display: block; + padding: 6px 15px 6px 12px; + clear: both; + font-weight: normal; + line-height: 20px; + color: @menuitem-text; + white-space: nowrap; + cursor: pointer; + line-height: normal; + border-left: 4px solid transparent; + margin-bottom: 1px; +} + +.@{prefix}-menu-item .@{prefix}-ico, .@{prefix}-menu-item .@{prefix}-text { + color: @menuitem-text; +} + +.@{prefix}-menu-item.@{prefix}-disabled .@{prefix}-text, .@{prefix}-menu-item.@{prefix}-disabled .@{prefix}-ico { + color: mix(@menuitem-text, @menu-bg, 40%); +} + +.@{prefix}-menu-item:hover .@{prefix}-text, .@{prefix}-menu-item.@{prefix}-selected .@{prefix}-text, .@{prefix}-menu-item:focus .@{prefix}-text { + color: @menuitem-text-inverse; +} + +.@{prefix}-menu-item:hover .@{prefix}-ico, .@{prefix}-menu-item.@{prefix}-selected .@{prefix}-ico, .@{prefix}-menu-item:focus .@{prefix}-ico { + color: @menuitem-text-inverse; +} + +.@{prefix}-menu-item.@{prefix}-disabled:hover { + background: @menuitem-bg-disabled; +} + +.@{prefix}-menu-shortcut { + display: inline-block; + color: mix(@menuitem-text, @menu-bg, 40%); +} + +.@{prefix}-menu-shortcut { + .inline-block(); + padding: 0 15px 0 20px; +} + +.@{prefix}-menu-item:hover .@{prefix}-menu-shortcut, .@{prefix}-menu-item.@{prefix}-selected .@{prefix}-menu-shortcut, .@{prefix}-menu-item:focus .@{prefix}-menu-shortcut { + color: @menuitem-text-inverse; +} + +.@{prefix}-menu-item .@{prefix}-caret { + margin-top: 4px; + *margin-top: 3px; + margin-right: 6px; + border-top: 4px solid transparent; + border-bottom: 4px solid transparent; + border-left: 4px solid @menuitem-caret; +} + +.@{prefix}-menu-item.@{prefix}-selected .@{prefix}-caret, .@{prefix}-menu-item:focus .@{prefix}-caret, .@{prefix}-menu-item:hover .@{prefix}-caret { + border-left-color: @menuitem-caret-selected; +} + +.@{prefix}-menu-align .@{prefix}-menu-shortcut { + *margin-top: -2px; +} + +.@{prefix}-menu-align .@{prefix}-menu-shortcut, .@{prefix}-menu-align .@{prefix}-caret { + position: absolute; + right: 0; +} + +.@{prefix}-menu-item.@{prefix}-active i { + visibility: visible; +} + +.@{prefix}-menu-item-normal.@{prefix}-active { + background-color: @menuitem-bg-active; +} + +.@{prefix}-menu-item-preview.@{prefix}-active { + border-left: 5px solid @menuitem-preview-border-active; +} + +.@{prefix}-menu-item-normal.@{prefix}-active .@{prefix}-text { + color: @menuitem-text-active; +} + +.@{prefix}-menu-item-normal.@{prefix}-active:hover .@{prefix}-text, .@{prefix}-menu-item-normal.@{prefix}-active:hover .@{prefix}-ico { + color: @menuitem-text-inverse; +} + +.@{prefix}-menu-item-normal.@{prefix}-active:focus .@{prefix}-text, .@{prefix}-menu-item-normal.@{prefix}-active:focus .@{prefix}-ico { + color: @menuitem-text-inverse; +} + +.@{prefix}-menu-item:hover, .@{prefix}-menu-item.@{prefix}-selected, .@{prefix}-menu-item:focus { + text-decoration: none; + color: @menuitem-text-inverse; + .vertical-gradient(@menuitem-bg-selected, @menuitem-bg-selected-hlight); +} + +.@{prefix}-menu-item-link { + color: #093; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + + b { + color: #093; + } +} + +.@{prefix}-menu-item-ellipsis { + display: block; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.@{prefix}-menu-item:hover *, .@{prefix}-menu-item.@{prefix}-selected *, .@{prefix}-menu-item:focus * { + color: @menuitem-text-inverse; +} + +div.@{prefix}-menu .@{prefix}-menu-item-sep, .@{prefix}-menu-item-sep:hover { + border: 0; + padding: 0; + height: 1px; + margin: 9px 1px; + overflow: hidden; + background: @menuitem-separator-top; + border-bottom: 1px solid @menuitem-separator-bottom; + cursor: default; + filter: none; +} + +div.@{prefix}-menu .@{prefix}-menu-item b { + font-weight: bold; +} + +.@{prefix}-menu-item-indent-1 { padding-left: 20px; } +.@{prefix}-menu-item-indent-2 { padding-left: 35px; } +.@{prefix}-menu-item-indent-2 { padding-left: 35px; } +.@{prefix}-menu-item-indent-3 { padding-left: 40px; } +.@{prefix}-menu-item-indent-4 { padding-left: 45px; } +.@{prefix}-menu-item-indent-5 { padding-left: 50px; } +.@{prefix}-menu-item-indent-6 { padding-left: 55px; } + +// RTL + +.@{prefix}-menu.@{prefix}-rtl { + direction: rtl; +} + +.@{prefix}-rtl .@{prefix}-menu-item { + text-align: right; + direction: rtl; + padding: 6px 12px 6px 15px; +} + +.@{prefix}-menu-align.@{prefix}-rtl .@{prefix}-menu-shortcut, .@{prefix}-menu-align.@{prefix}-rtl .@{prefix}-caret { + right: auto; + left: 0; +} + +.@{prefix}-rtl .@{prefix}-menu-item .@{prefix}-caret { + margin-left: 6px; + margin-right: 0; + border-right: 4px solid @menuitem-caret; + border-left: 0; +} + +.@{prefix}-rtl .@{prefix}-menu-item.@{prefix}-selected .@{prefix}-caret, .@{prefix}-rtl .@{prefix}-menu-item:focus .@{prefix}-caret, .@{prefix}-rtl .@{prefix}-menu-item:hover .@{prefix}-caret { + border-left-color: transparent; + border-right-color: @menuitem-caret-selected; +} + + +// Throbber + +.@{prefix}-throbber { + position: absolute; + top: 0; left: 0; + width: 100%; height: 100%; + .opacity(0.6); + background: @throbber-bg; +} + +.@{prefix}-throbber-inline { + position: static; + height: 50px; +} + +.@{prefix}-menu .@{prefix}-throbber-inline { + height: 25px; + background-size: contain; +} + + +// Menu + +.@{prefix}-menu { + position: absolute; + left: 0; top: 0; + .reset-gradient(); + z-index: 1000; + padding: 5px 0 5px 0; + margin: @menu-margin; + min-width: 160px; + background: @menu-bg; + border: 1px solid mix(rgb(red(@menu-border), green(@menu-border), blue(@menu-border)), @panel-bg, round(alpha(@menu-border) * 200)); + border: 1px solid @menu-border; + z-index: 1002; + .border-radius(6px); + .box-shadow(0 5px 10px rgba(0,0,0,.2)); + max-height: 400px; + overflow: auto; + overflow-x: hidden; +} + +.@{prefix}-menu i { + display: none; +} + +.@{prefix}-menu-has-icons i { + display: inline-block; + *display: inline; +} + +.@{prefix}-menu-sub-tr-tl { margin: -6px 0 0 -1px; } +.@{prefix}-menu-sub-br-bl { margin: 6px 0 0 -1px; } +.@{prefix}-menu-sub-tl-tr { margin: -6px 0 0 1px; } +.@{prefix}-menu-sub-bl-br { margin: 6px 0 0 1px; } + + +// ListBox + +.@{prefix}-listbox button { + text-align: left; + padding-right: 20px; + position: relative; +} + +.@{prefix}-listbox .@{prefix}-caret { + position: absolute; + margin-top: -2px; + right: 8px; + top: 50%; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-listbox .@{prefix}-caret { + right: auto; + left: 8px; +} + +.@{prefix}-rtl .@{prefix}-listbox button { + padding-right: 10px; + padding-left: 20px; +} + + +// Radio - not implemented yet + + +.@{prefix}-container-body .@{prefix}-resizehandle { + position: absolute; + right: 0; + bottom: 0; + width: 16px; + height: 16px; + visibility: visible; + cursor: s-resize; + margin: 0; +} + +.@{prefix}-container-body .@{prefix}-resizehandle-both { + cursor: se-resize; +} + +i.@{prefix}-i-resize { + color: @text; +} + + +// SelectBox + +.@{prefix}-selectbox { + background: @selectbox-bg; + border: 1px solid @selectbox-border; +} + + +// Slider + +.@{prefix}-slider { + .border-radius(3px); + border: 1px solid @slider-border; + background: @slider-bg; + width: 100px; + height: 10px; + position: relative; + display: block; +} + +.@{prefix}-slider.@{prefix}-vertical { + width: 10px; + height: 100px; +} + +.@{prefix}-slider-handle { + .border-radius(3px); + border: 1px solid @slider-handle-border; + background: @slider-handle-bg; + display: block; + width: 13px; + height: 13px; + position: absolute; + top: 0; left: 0; + margin-left: -1px; + margin-top: -2px; +} + +.@{prefix}-slider-handle:focus { + background: @slider-handle-bg-focus; +} + + +// Spacer + +.@{prefix}-spacer { + visibility: hidden; +} + + +// SplitButton + +.@{prefix}-splitbtn .@{prefix}-open { + border-left: 1px solid transparent; +} + +.@{prefix}-splitbtn:hover .@{prefix}-open { + border-left-color: darken(@btn-bg, 20%); +} + +.@{prefix}-splitbtn button when (@has-button-borders = false) { + padding-right: 6px; + padding-left: 6px; +} + +.@{prefix}-splitbtn button when (@has-button-borders = true) { + padding-right: 4px; + padding-left: 8px; +} + +.@{prefix}-splitbtn .@{prefix}-open { + padding-right: 4px; + padding-left: 4px; +} + +.@{prefix}-splitbtn .@{prefix}-open.@{prefix}-active { + .vertical-gradient(darken(@btn-bg, 10%), darken(@btn-bg-hlight, 5%)); + outline: 1px solid darken(@btn-bg, 20%); +} + +.@{prefix}-splitbtn.@{prefix}-btn-small .@{prefix}-open { + padding: 0 3px 0 3px; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-splitbtn { + direction: rtl; + text-align: right; +} + +.@{prefix}-rtl .@{prefix}-splitbtn button { + padding-right: 4px; + padding-left: 4px; +} + +.@{prefix}-rtl .@{prefix}-splitbtn .@{prefix}-open { + border-left: 0; +} + + +// StackLayout + +.@{prefix}-stack-layout-item { + display: block; +} + + +// TabPanel + +.@{prefix}-tabs { + display: block; + border-bottom: 1px solid @tab-border; +} + +.@{prefix}-tabs, +.@{prefix}-tabs + .@{prefix}-container-body { + background: @tabs-bg; +} + +.@{prefix}-tab { + .inline-block(); + border: 1px solid @tab-border; + border-width: 0 1px 0 0; + background: @tab-bg; + padding: 8px; + text-shadow: @text-shadow; + height: 13px; + cursor: pointer; +} + +.@{prefix}-tab:hover { + background: @tab-bg-hover; +} + +.@{prefix}-tab.@{prefix}-active { + background: @tab-bg-active; + border-bottom-color: transparent; + margin-bottom: -1px; + height: 14px; +} + +// RTL + +.@{prefix}-rtl .@{prefix}-tabs { + text-align: right; + direction: rtl; +} + +.@{prefix}-rtl .@{prefix}-tab { + border-width: 0 0 0 1px; +} + + +// TextBox + +.@{prefix}-textbox { + background: @textbox-bg; + border: 1px solid @textbox-border; + .border-radius(3px); + .box-shadow(@textbox-box-shadow); + display: inline-block; + .transition(~"border linear .2s, box-shadow linear .2s"); + height: 28px; + resize: none; + padding: 0 4px 0 4px; + white-space: pre-wrap; + *white-space: pre; + color: @text; +} + +.@{prefix}-textbox:focus, .@{prefix}-textbox.@{prefix}-focus { + border-color: @textbox-border-focus; + .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px fadeout(@textbox-border-focus, 15%)); +} + +.@{prefix}-placeholder .@{prefix}-textbox { + color: @textbox-text-placeholder; +} + +.@{prefix}-textbox.@{prefix}-multiline { + padding: 4px; + height: auto; +} + +.@{prefix}-textbox.@{prefix}-disabled { + color: mix(@text, @textbox-bg, 40%); +} + +// RTL + +.@{prefix}-rtl .@{prefix}-textbox { + text-align: right; + direction: rtl; +} + + +/* Icons */ + +@font-face { + font-family: 'tinymce'; + src:url('fonts/tinymce.eot'); + src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'), + url('fonts/tinymce.woff') format('woff'), + url('fonts/tinymce.ttf') format('truetype'), + url('fonts/tinymce.svg#tinymce') format('svg'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'tinymce-small'; + src:url('fonts/tinymce-small.eot'); + src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'), + url('fonts/tinymce-small.woff') format('woff'), + url('fonts/tinymce-small.ttf') format('truetype'), + url('fonts/tinymce-small.svg#tinymce') format('svg'); + font-weight: normal; + font-style: normal; +} + +@iconSize: 16px; + +.@{prefix}-ico { + font-family: 'tinymce', Arial; + font-style: normal; + font-weight: normal; + font-variant: normal; + font-size: @iconSize; + line-height: 16px; + speak: none; + vertical-align: text-top; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + display: inline-block; + background: transparent center center; + background-size: cover; + width: 16px; + height: 16px; + color: @btn-text; +} + +.@{prefix}-btn-small .@{prefix}-ico { + font-family: 'tinymce-small', Arial; +} + +.@{prefix}-i-save:before { content: "\e000"; } +.@{prefix}-i-newdocument:before { content: "\e001"; } +.@{prefix}-i-fullpage:before { content: "\e002"; } +.@{prefix}-i-alignleft:before { content: "\e003"; } +.@{prefix}-i-aligncenter:before { content: "\e004"; } +.@{prefix}-i-alignright:before { content: "\e005"; } +.@{prefix}-i-alignjustify:before { content: "\e006"; } +.@{prefix}-i-alignnone:before { content: "\e003"; } +.@{prefix}-i-cut:before { content: "\e007"; } +.@{prefix}-i-paste:before { content: "\e008"; } +.@{prefix}-i-searchreplace:before { content: "\e009"; } +.@{prefix}-i-bullist:before { content: "\e00a"; } +.@{prefix}-i-numlist:before { content: "\e00b"; } +.@{prefix}-i-indent:before { content: "\e00c"; } +.@{prefix}-i-outdent:before { content: "\e00d"; } +.@{prefix}-i-blockquote:before { content: "\e00e"; } +.@{prefix}-i-undo:before { content: "\e00f"; } +.@{prefix}-i-redo:before { content: "\e010"; } +.@{prefix}-i-link:before { content: "\e011"; } +.@{prefix}-i-unlink:before { content: "\e012"; } +.@{prefix}-i-anchor:before { content: "\e013"; } +.@{prefix}-i-image:before { content: "\e014"; } +.@{prefix}-i-media:before { content: "\e015"; } +.@{prefix}-i-help:before { content: "\e016"; } +.@{prefix}-i-code:before { content: "\e017"; } +.@{prefix}-i-insertdatetime:before { content: "\e018"; } +.@{prefix}-i-preview:before { content: "\e019"; } +.@{prefix}-i-forecolor:before { content: "\e01a"; } +.@{prefix}-i-backcolor:before { content: "\e01a"; } +.@{prefix}-i-table:before { content: "\e01b"; } +.@{prefix}-i-hr:before { content: "\e01c"; } +.@{prefix}-i-removeformat:before { content: "\e01d"; } +.@{prefix}-i-subscript:before { content: "\e01e"; } +.@{prefix}-i-superscript:before { content: "\e01f"; } +.@{prefix}-i-charmap:before { content: "\e020"; } +.@{prefix}-i-emoticons:before { content: "\e021"; } +.@{prefix}-i-print:before { content: "\e022"; } +.@{prefix}-i-fullscreen:before { content: "\e023"; } +.@{prefix}-i-spellchecker:before { content: "\e024"; } +.@{prefix}-i-nonbreaking:before { content: "\e025"; } +.@{prefix}-i-template:before { content: "\e026"; } +.@{prefix}-i-pagebreak:before { content: "\e027"; } +.@{prefix}-i-restoredraft:before { content: "\e028"; } +.@{prefix}-i-bold:before { content: "\e02a"; } +.@{prefix}-i-italic:before { content: "\e02b"; } +.@{prefix}-i-underline:before { content: "\e02c"; } +.@{prefix}-i-strikethrough:before { content: "\e02d"; } +.@{prefix}-i-visualchars:before { content: "\e02e"; } +.@{prefix}-i-visualblocks:before { content: "\e02e"; } +.@{prefix}-i-ltr:before { content: "\e02f"; } +.@{prefix}-i-rtl:before { content: "\e030"; } +.@{prefix}-i-copy:before { content: "\e031"; } +.@{prefix}-i-resize:before { content: "\e032"; } +.@{prefix}-i-browse:before { content: "\e034"; } +.@{prefix}-i-pastetext:before { content: "\e035"; } +.@{prefix}-i-rotateleft:before { content: "\eaa8"; } +.@{prefix}-i-rotateright:before { content: "\eaa9"; } +.@{prefix}-i-crop:before { content: "\ee78"; } +.@{prefix}-i-editimage:before { content: "\e915"; } +.@{prefix}-i-options:before { content: "\ec6a"; } +.@{prefix}-i-flipv:before { content: "\eaaa"; } +.@{prefix}-i-fliph:before { content: "\eaac"; } +.@{prefix}-i-zoomin:before { content: "\eb35"; } +.@{prefix}-i-zoomout:before { content: "\eb36"; } +.@{prefix}-i-sun:before { content: "\eccc"; } +.@{prefix}-i-moon:before { content: "\eccd"; } +.@{prefix}-i-arrowleft:before { content: "\edc0"; } +.@{prefix}-i-arrowright:before { content: "\e93c"; } +.@{prefix}-i-drop:before { content: "\e935"; } +.@{prefix}-i-contrast:before { content: "\ecd4"; } +.@{prefix}-i-sharpen:before { content: "\eba7"; } +.@{prefix}-i-resize2:before { content: "\edf9"; } +.@{prefix}-i-orientation:before { content: "\e601"; } +.@{prefix}-i-invert:before { content: "\e602"; } +.@{prefix}-i-gamma:before { content: "\e600"; } +.@{prefix}-i-remove:before { content: "\ed6a"; } +.@{prefix}-i-tablerowprops:before { content: "\e604"; } +.@{prefix}-i-tablecellprops:before { content: "\e605"; } +.@{prefix}-i-table2:before { content: "\e606"; } +.@{prefix}-i-tablemergecells:before { content: "\e607"; } +.@{prefix}-i-tableinsertcolbefore:before { content: "\e608"; } +.@{prefix}-i-tableinsertcolafter:before { content: "\e609"; } +.@{prefix}-i-tableinsertrowbefore:before { content: "\e60a"; } +.@{prefix}-i-tableinsertrowafter:before { content: "\e60b"; } +.@{prefix}-i-tablesplitcells:before { content: "\e60d"; } +.@{prefix}-i-tabledelete:before { content: "\e60e"; } +.@{prefix}-i-tableleftheader:before { content: "\e62a"; } +.@{prefix}-i-tabletopheader:before { content: "\e62b"; } +.@{prefix}-i-tabledeleterow:before { content: "\e800"; } +.@{prefix}-i-tabledeletecol:before { content: "\e801"; } +.@{prefix}-i-codesample:before { content: "\e603"; } +.@{prefix}-i-fill:before { content: "\e902"; } +.@{prefix}-i-borderwidth:before { content: "\e903"; } +.@{prefix}-i-line:before { content: "\e904"; } +.@{prefix}-i-count:before { content: "\e905"; } +.@{prefix}-i-translate:before { content: "\e907"; } +.@{prefix}-i-drag:before { content: "\e908"; } +.@{prefix}-i-home:before { content: "\e90b"; } +.@{prefix}-i-upload:before { content: "\e914"; } +.@{prefix}-i-bubble:before { content: "\e91c"; } +.@{prefix}-i-user:before { content: "\e91d"; } +.@{prefix}-i-lock:before { content: "\e926"; } +.@{prefix}-i-unlock:before { content: "\e927"; } +.@{prefix}-i-settings:before { content: "\e928"; } +.@{prefix}-i-remove2:before { content: "\e92a"; } +.@{prefix}-i-menu:before { content: "\e92d"; } +.@{prefix}-i-warning:before { content: "\e930"; } +.@{prefix}-i-question:before { content: "\e931"; } +.@{prefix}-i-pluscircle:before { content: "\e932"; } +.@{prefix}-i-info:before { content: "\e933"; } +.@{prefix}-i-notice:before { content: "\e934"; } +.@{prefix}-i-arrowup:before { content: "\e93b"; } +.@{prefix}-i-arrowdown:before { content: "\e93d"; } +.@{prefix}-i-arrowup2:before { content: "\e93f"; } +.@{prefix}-i-arrowdown2:before { content: "\e940"; } +.@{prefix}-i-menu2:before { content: "\e941"; } +.@{prefix}-i-newtab:before { content: "\e961"; } +.@{prefix}-i-a11y:before { content: "\e900"; } +.@{prefix}-i-plus:before { content: "\e93a"; } +.@{prefix}-i-insert:before { content: "\e93a"; } +.@{prefix}-i-minus:before { content: "\e939"; } +.@{prefix}-i-books:before { content: "\e911"; } +.@{prefix}-i-reload:before { content: "\e906"; } +.@{prefix}-i-toc:before { content: "\e901"; } +.@{prefix}-i-checkmark:before { content: "\e033"; } +.@{prefix}-i-checkbox:before, .@{prefix}-i-selected:before { + content: "\e033"; +} + +.@{prefix}-i-insert { font-size: 14px; } +.@{prefix}-i-selected { visibility: hidden; } +i.@{prefix}-i-backcolor { text-shadow: none; background: @colorbtn-backcolor-bg; } + diff --git a/data/web/rc/program/js/tinymce/skins/lightgray/skin.min.css b/data/web/rc/program/js/tinymce/skins/lightgray/skin.min.css new file mode 100644 index 00000000..05f23f9f --- /dev/null +++ b/data/web/rc/program/js/tinymce/skins/lightgray/skin.min.css @@ -0,0 +1 @@ +.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid rgba(0,0,0,0.2);width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#D9D9D9}.mce-grid td.mce-grid-cell div{border:1px solid #d6d6d6;width:15px;height:15px;margin:0;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#3498db}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#3498db}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#3498db;background:#3498db}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#707070}.mce-monospace{font-family:"Courier New",Courier,monospace}.mce-toolbar-grp{padding:2px 0}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-croprect-container{position:absolute;top:0;left:0}.mce-croprect-handle{position:absolute;top:0;left:0;width:20px;height:20px;border:2px solid white}.mce-croprect-handle-nw{border-width:2px 0 0 2px;margin:-2px 0 0 -2px;cursor:nw-resize;top:100px;left:100px}.mce-croprect-handle-ne{border-width:2px 2px 0 0;margin:-2px 0 0 -20px;cursor:ne-resize;top:100px;left:200px}.mce-croprect-handle-sw{border-width:0 0 2px 2px;margin:-20px 2px 0 -2px;cursor:sw-resize;top:200px;left:100px}.mce-croprect-handle-se{border-width:0 2px 2px 0;margin:-20px 0 0 -20px;cursor:se-resize;top:200px;left:200px}.mce-croprect-handle-move{position:absolute;cursor:move;border:0}.mce-croprect-block{opacity:.3;filter:alpha(opacity=30);zoom:1;position:absolute;background:black}.mce-croprect-handle:focus{border-color:#3498db}.mce-croprect-handle-move:focus{outline:1px solid #3498db}.mce-imagepanel{overflow:auto;background:black}.mce-imagepanel-bg{position:absolute;background:url('data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==')}.mce-imagepanel img{position:absolute}.mce-imagetool.mce-btn .mce-ico{display:block;width:20px;height:20px;text-align:center;line-height:20px;font-size:20px;padding:5px}.mce-arrow-up{margin-top:12px}.mce-arrow-down{margin-top:-12px}.mce-arrow:before,.mce-arrow:after{position:absolute;left:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}.mce-arrow.mce-arrow-up:before{top:-9px;border-bottom-color:rgba(0,0,0,0.2);border-width:0 9px 9px;margin-left:-9px}.mce-arrow.mce-arrow-down:before{bottom:-9px;border-top-color:rgba(0,0,0,0.2);border-width:9px 9px 0;margin-left:-9px}.mce-arrow.mce-arrow-up:after{top:-8px;border-bottom-color:#f0f0f0;border-width:0 8px 8px;margin-left:-8px}.mce-arrow.mce-arrow-down:after{bottom:-8px;border-top-color:#f0f0f0;border-width:8px 8px 0;margin-left:-8px}.mce-arrow.mce-arrow-left:before,.mce-arrow.mce-arrow-left:after{margin:0}.mce-arrow.mce-arrow-left:before{left:8px}.mce-arrow.mce-arrow-left:after{left:9px}.mce-arrow.mce-arrow-right:before,.mce-arrow.mce-arrow-right:after{left:auto;margin:0}.mce-arrow.mce-arrow-right:before{right:8px}.mce-arrow.mce-arrow-right:after{right:9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:before{left:-9px;top:50%;border-right-color:rgba(0,0,0,0.2);border-width:9px 9px 9px 0;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:after{left:-8px;top:50%;border-right-color:#f0f0f0;border-width:8px 8px 8px 0;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left{margin-left:12px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:before{right:-9px;top:50%;border-left-color:rgba(0,0,0,0.2);border-width:9px 0 9px 9px;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:after{right:-8px;top:50%;border-left-color:#f0f0f0;border-width:8px 0 8px 8px;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right{margin-left:-14px}.mce-edit-aria-container>.mce-container-body{display:flex}.mce-edit-aria-container>.mce-container-body .mce-edit-area{flex:1}.mce-edit-aria-container>.mce-container-body .mce-sidebar>.mce-container-body{display:flex;align-items:stretch;height:100%}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel{min-width:250px;max-width:250px;position:relative}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel>.mce-container-body{position:absolute;width:100%;height:100%;overflow:auto;top:0;left:0}.mce-sidebar-toolbar{border:0 solid rgba(0,0,0,0.2);border-left-width:1px}.mce-sidebar-toolbar .mce-btn.mce-active,.mce-sidebar-toolbar .mce-btn.mce-active:hover{border:1px solid transparent;border-color:transparent;background-color:#2d8ac7}.mce-sidebar-toolbar .mce-btn.mce-active button,.mce-sidebar-toolbar .mce-btn.mce-active:hover button,.mce-sidebar-toolbar .mce-btn.mce-active button i,.mce-sidebar-toolbar .mce-btn.mce-active:hover button i{color:#fff;text-shadow:1px 1px none}.mce-sidebar-panel{border:0 solid rgba(0,0,0,0.2);border-left-width:1px}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1}.mce-scroll{position:relative}.mce-panel{border:0 solid #cacaca;border:0 solid rgba(0,0,0,0.2);background-color:#f0f0f0}.mce-floatpanel{position:absolute}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;top:0;left:0;background:#FFF;border:1px solid rgba(0,0,0,0.2);border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.2);border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#FFF}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#FFF;position:fixed;top:0;left:0;opacity:0;transform:scale(.1);transition:transform 100ms ease-in,opacity 150ms ease-in}.mce-window.mce-in{transform:scale(1);opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:0;top:0;height:38px;width:38px;text-align:center;cursor:pointer}.mce-window-head .mce-close i{color:#858585}.mce-close:hover i{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:20px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#FFF;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#ccc}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:white;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-ne,.mce-tooltip-se{margin-left:14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#333}.mce-bar{display:block;width:0;height:100%;background-color:#d7d7d7;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#F0F0F0;padding:5px;margin-top:5px;border-width:1px;border-style:solid;border-color:#CCCCCC;transition:transform 100ms ease-in,opacity 150ms ease-in;opacity:0}.mce-notification.mce-in{opacity:1}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ECB}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notification .mce-ico{margin-top:5px}.mce-notification-inner{display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#333333}.mce-notification .mce-progress .mce-bar-container{border-color:#CCCCCC}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#333333}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ECB}.mce-notification-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #b1b1b1;border-color:transparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;background-color:#f0f0f0}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;border-color:#ccc}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#dbdbdb;border-color:#ccc}.mce-btn:active{background-color:#e0e0e0;border-color:#ccc}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary.mce-btn-has-text{min-width:50px}.mce-primary{color:#fff;border:1px solid transparent;border-color:transparent;background-color:#2d8ac7}.mce-primary:hover,.mce-primary:focus{background-color:#257cb6;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#206ea1}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px none}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-btn-flat{border:0;background:transparent;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:3px;margin-left:3px}.mce-btn-group .mce-first{margin-left:0}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;background-color:#f0f0f0;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{position:relative;display:inline-block;*display:inline;*zoom:1;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0;margin:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-combobox .mce-status{position:absolute;right:2px;top:50%;line-height:16px;margin-top:-8px;font-size:12px;width:15px;height:15px;text-align:center;cursor:pointer}.mce-combobox.mce-has-status input{padding-right:20px}.mce-combobox.mce-has-open .mce-status{right:37px}.mce-combobox .mce-status.mce-i-warning{color:#c09853}.mce-combobox .mce-status.mce-i-checkmark{color:#468847}.mce-menu.mce-combobox-menu{border-top:0;margin-top:0;max-height:200px}.mce-menu.mce-combobox-menu .mce-menu-item{padding:4px 6px 4px 4px;font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-sep{padding:0}.mce-menu.mce-combobox-menu .mce-text{font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-link,.mce-menu.mce-combobox-menu .mce-menu-item-link b{font-size:11px}.mce-menu.mce-combobox-menu .mce-text b{font-size:11px}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:6px;padding-left:6px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:1px solid transparent}.mce-colorbutton:hover .mce-open{border-color:#ccc}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid rgba(0,0,0,0.2);width:100%;height:100%}.mce-infobox{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden;border:1px solid red}.mce-infobox div{display:block;margin:5px}.mce-infobox div button{position:absolute;top:50%;right:4px;cursor:pointer;margin-top:-8px;display:none}.mce-infobox div button:focus{outline:2px solid #ccc}.mce-infobox.mce-has-help div{margin-right:25px}.mce-infobox.mce-has-help button{display:block}.mce-infobox.mce-success{background:#dff0d8;border-color:#d6e9c6}.mce-infobox.mce-success div{color:#3c763d}.mce-infobox.mce-warning{background:#fcf8e3;border-color:#faebcc}.mce-infobox.mce-warning div{color:#8a6d3b}.mce-infobox.mce-error{background:#f2dede;border-color:#ebccd1}.mce-infobox.mce-error div{color:#a94442}.mce-rtl .mce-infobox div{text-align:right;direction:rtl}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-success{color:#468847}.mce-label.mce-warning{color:#c09853}.mce-label.mce-error{color:#b94a48}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;filter:none}.mce-menubar .mce-menubtn button{color:#333}.mce-menubar{border:1px solid rgba(217,217,217,0.52)}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#ccc;background:#fff;filter:none}.mce-menubtn button{color:#333}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:white}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:white}.mce-menu-item.mce-disabled:hover{background:#CCC}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:white}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:white}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#3498db}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:white}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:white}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:white}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:white;background-color:#2d8ac7}.mce-menu-item-link{color:#093;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mce-menu-item-link b{color:#093}.mce-menu-item-ellipsis{display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mce-menu-item:hover *,.mce-menu-item.mce-selected *,.mce-menu-item:focus *{color:white}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}div.mce-menu .mce-menu-item b{font-weight:bold}.mce-menu-item-indent-1{padding-left:20px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-3{padding-left:40px}.mce-menu-item-indent-4{padding-left:45px}.mce-menu-item-indent-5{padding-left:50px}.mce-menu-item-indent-6{padding-left:55px}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:white}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}.mce-menu .mce-throbber-inline{height:25px;background-size:contain}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #AAA;background:#EEE;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #BBB;background:#DDD;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-slider-handle:focus{background:#BBB}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#ccc}.mce-splitbtn button{padding-right:6px;padding-left:6px}.mce-splitbtn .mce-open{padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open.mce-active{background-color:#dbdbdb;outline:1px solid #ccc}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#FFF}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#ffffff;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#FDFDFD}.mce-tab.mce-active{background:#FDFDFD;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#3498db}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#333}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-alignnone:before{content:"\e003"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-rotateleft:before{content:"\eaa8"}.mce-i-rotateright:before{content:"\eaa9"}.mce-i-crop:before{content:"\ee78"}.mce-i-editimage:before{content:"\e915"}.mce-i-options:before{content:"\ec6a"}.mce-i-flipv:before{content:"\eaaa"}.mce-i-fliph:before{content:"\eaac"}.mce-i-zoomin:before{content:"\eb35"}.mce-i-zoomout:before{content:"\eb36"}.mce-i-sun:before{content:"\eccc"}.mce-i-moon:before{content:"\eccd"}.mce-i-arrowleft:before{content:"\edc0"}.mce-i-arrowright:before{content:"\e93c"}.mce-i-drop:before{content:"\e935"}.mce-i-contrast:before{content:"\ecd4"}.mce-i-sharpen:before{content:"\eba7"}.mce-i-resize2:before{content:"\edf9"}.mce-i-orientation:before{content:"\e601"}.mce-i-invert:before{content:"\e602"}.mce-i-gamma:before{content:"\e600"}.mce-i-remove:before{content:"\ed6a"}.mce-i-tablerowprops:before{content:"\e604"}.mce-i-tablecellprops:before{content:"\e605"}.mce-i-table2:before{content:"\e606"}.mce-i-tablemergecells:before{content:"\e607"}.mce-i-tableinsertcolbefore:before{content:"\e608"}.mce-i-tableinsertcolafter:before{content:"\e609"}.mce-i-tableinsertrowbefore:before{content:"\e60a"}.mce-i-tableinsertrowafter:before{content:"\e60b"}.mce-i-tablesplitcells:before{content:"\e60d"}.mce-i-tabledelete:before{content:"\e60e"}.mce-i-tableleftheader:before{content:"\e62a"}.mce-i-tabletopheader:before{content:"\e62b"}.mce-i-tabledeleterow:before{content:"\e800"}.mce-i-tabledeletecol:before{content:"\e801"}.mce-i-codesample:before{content:"\e603"}.mce-i-fill:before{content:"\e902"}.mce-i-borderwidth:before{content:"\e903"}.mce-i-line:before{content:"\e904"}.mce-i-count:before{content:"\e905"}.mce-i-translate:before{content:"\e907"}.mce-i-drag:before{content:"\e908"}.mce-i-home:before{content:"\e90b"}.mce-i-upload:before{content:"\e914"}.mce-i-bubble:before{content:"\e91c"}.mce-i-user:before{content:"\e91d"}.mce-i-lock:before{content:"\e926"}.mce-i-unlock:before{content:"\e927"}.mce-i-settings:before{content:"\e928"}.mce-i-remove2:before{content:"\e92a"}.mce-i-menu:before{content:"\e92d"}.mce-i-warning:before{content:"\e930"}.mce-i-question:before{content:"\e931"}.mce-i-pluscircle:before{content:"\e932"}.mce-i-info:before{content:"\e933"}.mce-i-notice:before{content:"\e934"}.mce-i-arrowup:before{content:"\e93b"}.mce-i-arrowdown:before{content:"\e93d"}.mce-i-arrowup2:before{content:"\e93f"}.mce-i-arrowdown2:before{content:"\e940"}.mce-i-menu2:before{content:"\e941"}.mce-i-newtab:before{content:"\e961"}.mce-i-a11y:before{content:"\e900"}.mce-i-plus:before{content:"\e93a"}.mce-i-insert:before{content:"\e93a"}.mce-i-minus:before{content:"\e939"}.mce-i-books:before{content:"\e911"}.mce-i-reload:before{content:"\e906"}.mce-i-toc:before{content:"\e901"}.mce-i-checkmark:before{content:"\e033"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-insert{font-size:14px}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#BBB} \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/themes/inlite/theme.min.js b/data/web/rc/program/js/tinymce/themes/inlite/theme.min.js new file mode 100644 index 00000000..0592b918 --- /dev/null +++ b/data/web/rc/program/js/tinymce/themes/inlite/theme.min.js @@ -0,0 +1 @@ +!function(){var e={},t=function(t){for(var n=e[t],i=n.deps,o=n.defn,a=i.length,s=new Array(a),l=0;l",n=0;n
    ";i+="

    "}return i+="",i+="
    "},r=function(e){var t=e.dom.select("*[data-mce-id]");return t[0]},i=function(e,t,i){e.undoManager.transact(function(){var o,a;e.insertContent(n(t,i)),o=r(e),o.removeAttribute("data-mce-id"),a=e.dom.select("td,th",o),e.selection.setCursorLocation(a[0],0)})},o=function(e,t){e.execCommand("FormatBlock",!1,t)},a=function(t,n,r){var i,o;i=t.editorUpload.blobCache,o=i.create(e.uuid("mceu"),r,n),i.add(o),t.insertContent(t.dom.createHTML("img",{src:o.blobUri()}))},s=function(e){e.selection.collapse(!1)},l=function(e){e.focus(),t.unlinkSelection(e),s(e)},c=function(e,t,n){e.focus(),e.dom.setAttrib(t,"href",n),s(e)},u=function(e,t){e.execCommand("mceInsertLink",!1,{href:t}),s(e)},d=function(e,t){var n=e.dom.getParent(e.selection.getStart(),"a[href]");n?c(e,n,t):u(e,t)},f=function(e,t){0===t.trim().length?l(e):d(e,t)};return{insertTable:i,formatBlock:o,insertBlob:a,createLink:f,unlink:l}}),a("r",[],function(){var e=function(e){return/^www\.|\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(e.trim())},t=function(e){return/^https?:\/\//.test(e.trim())};return{isDomainLike:e,isAbsolute:t}}),a("g",["c","d","o","m","r"],function(e,t,n,r,i){var o=function(e){e.find("textbox").eq(0).each(function(e){e.focus()})},a=function(n,r){var i=t.create(e.extend({type:"form",layout:"flex",direction:"row",padding:5,name:n,spacing:3},r));return i.on("show",function(){o(i)}),i},s=function(e,t){return t?e.show():e.hide()},l=function(e,t){return new n(function(n){e.windowManager.confirm("The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(e){var r=e===!0?"http://"+t:t;n(r)})})},c=function(e,t){return!i.isAbsolute(t)&&i.isDomainLike(t)?l(e,t):n.resolve(t)},u=function(e,t){var n={},i=function(){e.focus(),r.unlink(e),t()},o=function(e){var t=e.meta;t&&t.attach&&(n={href:this.value(),attach:t.attach})},l=function(t){if(t.control===this){var n,r="";n=e.dom.getParent(e.selection.getStart(),"a[href]"),n&&(r=e.dom.getAttrib(n,"href")),this.fromJSON({linkurl:r}),s(this.find("#unlink"),n),this.find("#linkurl")[0].focus()}};return a("quicklink",{items:[{type:"button",name:"unlink",icon:"unlink",onclick:i,tooltip:"Remove link"},{type:"filepicker",name:"linkurl",placeholder:"Paste or type a link",filetype:"file",onchange:o},{type:"button",icon:"checkmark",subtype:"primary",tooltip:"Ok",onclick:"submit"}],onshow:l,onsubmit:function(i){c(e,i.data.linkurl).then(function(i){e.undoManager.transact(function(){i===n.href&&(n.attach(),n={}),r.createLink(e,i)}),t()})}})};return{createQuickLinkForm:u}}),s("s",tinymce.geom.Rect),a("t",[],function(){var e=function(e){return{x:e.left,y:e.top,w:e.width,h:e.height}},t=function(e){return{left:e.x,top:e.y,width:e.w,height:e.h,right:e.x+e.w,bottom:e.y+e.h}};return{fromClientRect:e,toClientRect:t}}),a("h",["e","s","t"],function(e,t,n){var r=function(t){var n=e.getViewPort();return{x:t.x+n.x,y:t.y+n.y,w:t.w,h:t.h}},i=function(e){var t=e.getBoundingClientRect();return r({x:t.left,y:t.top,w:Math.max(e.clientWidth,e.offsetWidth),h:Math.max(e.clientHeight,e.offsetHeight)})},o=function(e,t){return i(t)},a=function(e){return i(e.getElement().ownerDocument.body)},s=function(e){return i(e.getContentAreaContainer()||e.getBody())},l=function(e){var t=e.selection.getBoundingClientRect();return t?r(n.fromClientRect(t)):null};return{getElementRect:o,getPageAreaRect:a,getContentAreaRect:s,getSelectionRect:l}}),a("i",["s","t"],function(e,t){var n=function(e,t){return{rect:e,position:t}},r=function(e,t){return{x:t.x,y:t.y,w:e.w,h:e.h}},i=function(t,i,o,a,s){var l,c,u;return l=e.findBestRelativePosition(s,o,a,t),o=e.clamp(o,a),l?(c=e.relativePosition(s,o,l),u=r(s,c),n(u,l)):(o=e.intersect(a,o),o?(l=e.findBestRelativePosition(s,o,a,i))?(c=e.relativePosition(s,o,l),u=r(s,c),n(u,l)):(u=r(s,o),n(u,l)):null)},o=function(e,t,n){return i(["cr-cl","cl-cr"],["bc-tc","bl-tl","br-tr"],e,t,n)},a=function(e,t,n){return i(["tc-bc","bc-tc","tl-bl","bl-tl","tr-br","br-tr"],["bc-tc","bl-tl","br-tr"],e,t,n)},s=function(e,n,r,i){var o;return"function"==typeof e?(o=e({elementRect:t.toClientRect(n),contentAreaRect:t.toClientRect(r),panelRect:t.toClientRect(i)}),t.fromClientRect(o)):i},l=function(e){return e.panelRect};return{calcInsert:o,calc:a,userConstrain:s,defaultHandler:l}}),a("a",["j"],function(e){var t=function(e,t){if(t(e))return!0;throw new Error("Default value doesn't match requested type.")},n=function(e){return function(n,r,i){var o=n.settings;return t(i,e),r in o&&e(o[r])?o[r]:i}},r=function(e,t){return e.split(t).filter(function(e){return e.length>0})},i=function(t,n){var i=function(e){return"string"==typeof e?r(e,/[ ,]/):e},o=function(e,t){return e===!1?[]:t};return e.isArray(t)?t:e.isString(t)?i(t):e.isBoolean(t)?o(t,n):n},o=function(e){return function(n,r,o){var a=r in n.settings?n.settings[r]:o;return t(o,e),i(a,o)}};return{getStringOr:n(e.isString),getBoolOr:n(e.isBoolean),getNumberOr:n(e.isNumber),getHandlerOr:n(e.isFunction),getToolbarItemsOr:o(e.isArray)}}),a("3",["c","d","e","f","g","h","i","a"],function(e,t,n,r,i,o,a,s){return function(){var l,c,u=["bold","italic","|","quicklink","h2","h3","blockquote"],d=["quickimage","quicktable"],f=function(t,n){return e.map(n,function(e){return r.create(t,e.id,e.items)})},h=function(e){return s.getToolbarItemsOr(e,"selection_toolbar",u)},p=function(e){return s.getToolbarItemsOr(e,"insert_toolbar",d)},m=function(e){return e.items().length>0},g=function(n,o){var a=f(n,o).concat([r.create(n,"text",h(n)),r.create(n,"insert",p(n)),i.createQuickLinkForm(n,_)]);return t.create({type:"floatpanel",role:"dialog",classes:"tinymce tinymce-inline arrow",ariaLabel:"Inline toolbar",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!0,border:1,items:e.grep(a,m),oncancel:function(){n.focus()}})},v=function(e){e&&e.show()},y=function(e,t){e.moveTo(t.x,t.y)},b=function(t,n){n=n?n.substr(0,2):"",e.each({t:"down",b:"up",c:"center"},function(e,r){t.classes.toggle("arrow-"+e,r===n.substr(0,1))}),"cr"===n?(t.classes.toggle("arrow-left",!0),t.classes.toggle("arrow-right",!1)):"cl"===n?(t.classes.toggle("arrow-left",!0),t.classes.toggle("arrow-right",!0)):e.each({l:"left",r:"right"},function(e,r){t.classes.toggle("arrow-"+e,r===n.substr(1,1))})},C=function(e,t){var n=e.items().filter("#"+t);return n.length>0&&(n[0].show(),e.reflow(),!0)},x=function(e,t,r,i){var l,u,d,f;return v(e),e.items().hide(),C(e,t)?(f=s.getHandlerOr(r,"inline_toolbar_position_handler",a.defaultHandler),l=o.getContentAreaRect(r),u=n.getRect(e.getEl()),d="insert"===t?a.calcInsert(i,l,u):a.calc(i,l,u),void(d?(u=d.rect,c=i,y(e,a.userConstrain(f,i,l,u)),b(e,d.position)):_(e))):void _(e)},w=function(){return l.items().filter("form:visible").length>0},E=function(e,t){if(l){if(l.items().hide(),!C(l,t))return void _(l);var r,i,u,d;v(l),l.items().hide(),C(l,t),d=s.getHandlerOr(e,"inline_toolbar_position_handler",a.defaultHandler),r=o.getContentAreaRect(e),i=n.getRect(l.getEl()),u=a.calc(c,r,i),u&&(i=u.rect,y(l,a.userConstrain(d,c,r,i)),b(l,u.position))}},N=function(e,t,n,r){l||(l=g(e,r),l.renderTo(document.body).reflow().moveTo(n.x,n.y),e.nodeChanged()),x(l,t,e,n)},_=function(){l&&l.hide()},S=function(){l&&l.find("toolbar:visible").eq(0).each(function(e){e.focus(!0)})},k=function(){l&&(l.remove(),l=null)},T=function(){return l&&l.visible()&&w()};return{show:N,showForm:E,inForm:T,hide:_,focus:S,remove:k}}}),a("k",["o"],function(e){var t=function(t){return new e(function(e){var n=new FileReader;n.onloadend=function(){e(n.result.split(",")[1])},n.readAsDataURL(t)})};return{blobToBase64:t}}),a("l",["o"],function(e){var t=function(){return new e(function(e){var t;t=document.createElement("input"),t.type="file",t.style.position="fixed",t.style.left=0,t.style.top=0,t.style.opacity=.001,document.body.appendChild(t),t.onchange=function(t){e(Array.prototype.slice.call(t.target.files))},t.click(),t.parentNode.removeChild(t)})};return{pickFile:t}}),a("4",["3","k","l","m"],function(e,t,n,r){var i=function(e){for(var t=function(t){return function(){r.formatBlock(e,t)}},n=1;n<6;n++){var i="h"+n;e.addButton(i,{text:i.toUpperCase(),tooltip:"Heading "+n,stateSelector:i,onclick:t(i),onPostRender:function(){var e=this.getEl().firstChild.firstChild;e.style.fontWeight="bold"}})}},o=function(e,o){e.addButton("quicklink",{icon:"link",tooltip:"Insert/Edit link",stateSelector:"a[href]",onclick:function(){o.showForm(e,"quicklink")}}),e.addButton("quickimage",{icon:"image",tooltip:"Insert image",onclick:function(){n.pickFile().then(function(n){var i=n[0];t.blobToBase64(i).then(function(t){r.insertBlob(e,t,i)})})}}),e.addButton("quicktable",{icon:"table",tooltip:"Insert table",onclick:function(){o.hide(),r.insertTable(e,2,2)}}),i(e)};return{addToEditor:o}}),s("n",tinymce.EditorManager),a("5",["n","e"],function(e,t){var n=function(e,t){var n=function(){e.fire("SkinLoaded"),t()};e.initialized?n():e.on("init",n)},r=function(t){var n=e.baseURL+"/skins/";return t?n+t:n+"lightgray"},i=function(e,t){return e.documentBaseURI.toAbsolute(t)},o=function(e,o){var a=e.settings,s=a.skin_url?i(e,a.skin_url):r(a.skin),l=function(){n(e,o)};t.styleSheetLoader.load(s+"/skin.min.css",l),e.contentCSS.push(s+"/content.inline.min.css")};return{load:o}}),a("8",[],function(){var e=function(e,t){return{id:e,rect:t}},t=function(e,t){for(var n=0;n=0;t--)for(n=i.length-1;n>=0;n--)if(i[n].predicate(r[t]))return{toolbar:i[n],element:r[t]};return null};a.on("click keyup setContent ObjectResized",function(e){("setcontent"!==e.type||e.selection)&&n.setEditorTimeout(a,function(){var e;e=C(a.selection.getNode()),e?(b(),y(e)):b()})}),a.on("blur hide contextmenu",b),a.on("ObjectResizeStart",function(){var e=C(a.selection.getNode());e&&e.toolbar.panel&&e.toolbar.panel.hide()}),a.on("ResizeEditor ResizeWindow",g(!0)),a.on("nodeChange",g(!1)),a.on("remove",function(){t.each(h(),function(e){e.panel&&e.panel.remove()}),a.contextToolbars={}}),a.shortcuts.add("ctrl+shift+e > ctrl+shift+p","",function(){var e=C(a.selection.getNode());e&&e.toolbar.panel&&e.toolbar.panel.items()[0].focus()})};return{addContextualToolbars:d}}),a("e",[],function(){var e=function(e,t){return function(){var n=e.find(t)[0];n&&n.focus(!0)}},t=function(t,n){t.shortcuts.add("Alt+F9","",e(n,"menubar")),t.shortcuts.add("Alt+F10,F10","",e(n,"toolbar")),t.shortcuts.add("Alt+F11","",e(n,"elementpath")),n.on("cancel",function(){t.focus()})};return{addKeys:t}}),a("f",["8","9","1"],function(e,t,n){var r=function(e){return{element:function(){return e}}},i=function(e,t,n){var i=e.settings[n];i&&i(r(t.getEl("body")))},o=function(t,n,r){e.each(r,function(e){var r=n.items().filter("#"+e.name)[0];r&&r.visible()&&e.name!==t&&(i(e,r,"onhide"),r.visible(!1))})},a=function(e){e.items().each(function(e){e.active(!1)})},s=function(t,n){return e.grep(t,function(e){return e.name===n})[0]},l=function(e,n,r){return function(l){var c=l.control,u=c.parents().filter("panel")[0],d=u.find("#"+n)[0],f=s(r,n);o(n,u,r),a(c.parent()),d&&d.visible()?(i(f,d,"onhide"),d.hide(),c.active(!1)):(d?(d.show(),i(f,d,"onshow")):(d=t.create({type:"container",name:n,layout:"stack",classes:"sidebar-panel",html:""}),u.prepend(d),i(f,d,"onrender"),i(f,d,"onshow")),c.active(!0)),e.fire("ResizeEditor")}},c=function(){return!n.ie||n.ie>=11},u=function(e){return!(!c()||!e.sidebars)&&e.sidebars.length>0},d=function(t){var n=e.map(t.sidebars,function(e){var n=e.settings;return{type:"button",icon:n.icon,image:n.image,tooltip:n.tooltip,onclick:l(t,e.name,t.sidebars)}});return{type:"panel",name:"sidebar",layout:"stack",classes:"sidebar",items:[{type:"toolbar",layout:"stack",classes:"sidebar-toolbar",items:n}]}};return{hasSidebar:u,createSidebar:d}}),a("g",[],function(){var e=function(e){return function(){e.initialized?e.fire("SkinLoaded"):e.on("init",function(){e.fire("SkinLoaded")})}};return{fireSkinLoaded:e}}),a("6",["a"],function(e){var t=function(e){return{width:e.clientWidth,height:e.clientHeight}},n=function(n,r,i){var o,a,s,l,c=n.settings;o=n.getContainer(),a=n.getContentAreaContainer().firstChild,s=t(o),l=t(a),null!==r&&(r=Math.max(c.min_width||100,r),r=Math.min(c.max_width||65535,r),e.setStyle(o,"width",r+(s.width-l.width)),e.setStyle(a,"width",r)),i=Math.max(c.min_height||100,i),i=Math.min(c.max_height||65535,i),e.setStyle(a,"height",i),n.fire("ResizeEditor")},r=function(e,t,r){var i=e.getContentAreaContainer();n(e,i.clientWidth+t,i.clientHeight+r)};return{resizeTo:n,resizeBy:r}}),a("4",["8","9","a","b","c","d","e","f","g","6"],function(e,t,n,r,i,o,a,s,l,c){var u=function(e){return function(t){e.find("*").disabled("readonly"===t.mode)}},d=function(e){return{type:"panel",name:"iframe",layout:"stack",classes:"edit-area",border:e,html:""}},f=function(e){return{type:"panel",layout:"stack",classes:"edit-aria-container",border:"1 0 0 0",items:[d("0"),s.createSidebar(e)]}},h=function(e,h,p){var m,g,v,y=e.settings;return p.skinUiCss&&n.styleSheetLoader.load(p.skinUiCss,l.fireSkinLoaded(e)),m=h.panel=t.create({type:"panel",role:"application",classes:"tinymce",style:"visibility: hidden",layout:"stack",border:1,items:[y.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:i.createMenuButtons(e)},r.createToolbars(e,y.toolbar_items_size),s.hasSidebar(e)?f(e):d("1 0 0 0")]}),y.resize!==!1&&(g={type:"resizehandle",direction:y.resize,onResizeStart:function(){var t=e.getContentAreaContainer().firstChild;v={width:t.clientWidth,height:t.clientHeight}},onResize:function(t){"both"===y.resize?c.resizeTo(e,v.width+t.deltaX,v.height+t.deltaY):c.resizeTo(e,null,v.height+t.deltaY)}}),y.statusbar!==!1&&m.add({type:"panel",name:"statusbar",classes:"statusbar",layout:"flow",border:"1 0 0 0",ariaRoot:!0,items:[{type:"elementpath",editor:e},g]}),e.fire("BeforeRenderUI"),e.on("SwitchMode",u(m)),m.renderBefore(p.targetNode).reflow(),y.readonly&&e.setMode("readonly"),y.width&&n.setStyle(m.getEl(),"width",y.width),e.on("remove",function(){m.remove(),m=null}),a.addKeys(e,m),o.addContextualToolbars(e),{iframeContainer:m.find("#iframe")[0].getEl(),editorContainer:m.getEl()}};return{render:h}}),s("h",tinymce.ui.FloatPanel),a("5",["8","9","a","h","b","c","d","e","g"],function(e,t,n,r,i,o,a,s,l){var c=function(e,c,u){var d,f,h=e.settings;h.fixed_toolbar_container&&(f=n.select(h.fixed_toolbar_container)[0]);var p=function(){if(d&&d.moveRel&&d.visible()&&!d._fixed){var t=e.selection.getScrollContainer(),r=e.getBody(),i=0,o=0;if(t){var a=n.getPos(r),s=n.getPos(t);i=Math.max(0,s.x-a.x),o=Math.max(0,s.y-a.y)}d.fixed(!1).moveRel(r,e.rtl?["tr-br","br-tr"]:["tl-bl","bl-tl","tr-br"]).moveBy(i,o)}},m=function(){d&&(d.show(),p(),n.addClass(e.getBody(),"mce-edit-focus"))},g=function(){d&&(d.hide(),r.hideAll(),n.removeClass(e.getBody(),"mce-edit-focus"))},v=function(){return d?void(d.visible()||m()):(d=c.panel=t.create({type:f?"panel":"floatpanel",role:"application",classes:"tinymce tinymce-inline",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!!f,border:1,items:[h.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:o.createMenuButtons(e)},i.createToolbars(e,h.toolbar_items_size)]}),e.fire("BeforeRenderUI"),d.renderTo(f||document.body).reflow(),s.addKeys(e,d),m(),a.addContextualToolbars(e),e.on("nodeChange",p),e.on("activate",m),e.on("deactivate",g),void e.nodeChanged())};return h.content_editable=!0,e.on("focus",function(){u.skinUiCss?n.styleSheetLoader.load(u.skinUiCss,v,v):v()}),e.on("blur hide",g),e.on("remove",function(){d&&(d.remove(),d=null)}),u.skinUiCss&&n.styleSheetLoader.load(u.skinUiCss,l.fireSkinLoaded(e)),{}};return{render:c}}),s("i",tinymce.ui.Throbber),a("7",["i"],function(e){var t=function(t,n){var r;t.on("ProgressState",function(t){r=r||new e(n.panel.getEl("body")),t.state?r.show(t.time):r.hide()})};return{setup:t}}),a("0",["1","2","3","4","5","6","7"],function(e,t,n,r,i,o,a){var s=function(n,o,s){var l=n.settings,c=l.skin!==!1&&(l.skin||"lightgray");if(c){var u=l.skin_url;u=u?n.documentBaseURI.toAbsolute(u):t.baseURL+"/skins/"+c,e.documentMode<=7?s.skinUiCss=u+"/skin.ie7.min.css":s.skinUiCss=u+"/skin.min.css",n.contentCSS.push(u+"/content"+(n.inline?".inline":"")+".min.css")}return a.setup(n,o),l.inline?i.render(n,o,s):r.render(n,o,s)};return n.add("modern",function(e){return{renderUI:function(t){return s(e,this,t)},resizeTo:function(t,n){return o.resizeTo(e,t,n)},resizeBy:function(t,n){return o.resizeBy(e,t,n)}}}),function(){}}),r("0")()}(); \ No newline at end of file diff --git a/data/web/rc/program/js/tinymce/tinymce.min.js b/data/web/rc/program/js/tinymce/tinymce.min.js new file mode 100644 index 00000000..c7c23107 --- /dev/null +++ b/data/web/rc/program/js/tinymce/tinymce.min.js @@ -0,0 +1,31 @@ +/** + * tinymce - v4.5.1 + * + * @licstart The following is the entire license notice for the + * JavaScript code in this file. + * + * Copyright (c) 1999-2015 Ephox Corp. All rights reserved + * + * The JavaScript code in this page is free software: you can + * redistribute it and/or modify it under the terms of the GNU + * Lesser General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) + * any later version. + * + * @licend The above is the entire license notice + * for the JavaScript code in this file. + */ +// 4.5.1 (2016-12-07) +!function(e,t){"use strict";function n(e,t){for(var n,r=[],i=0;i=r.x&&o.x+o.w<=r.w+r.x&&o.y>=r.y&&o.y+o.h<=r.h+r.y)return i[a];return null}function n(e,t,n){return o(e.x-t,e.y-n,e.w+2*t,e.h+2*n)}function r(e,t){var n,r,i,a;return n=l(e.x,t.x),r=l(e.y,t.y),i=s(e.x+e.w,t.x+t.w),a=s(e.y+e.h,t.y+t.h),i-n<0||a-r<0?null:o(n,r,i-n,a-r)}function i(e,t,n){var r,i,a,s,c,u,d,f,h,p;return c=e.x,u=e.y,d=e.x+e.w,f=e.y+e.h,h=t.x+t.w,p=t.y+t.h,r=l(0,t.x-c),i=l(0,t.y-u),a=l(0,d-h),s=l(0,f-p),c+=r,u+=i,n&&(d+=r,f+=i,c-=a,u-=s),d-=a,f-=s,o(c,u,d-c,f-u)}function o(e,t,n,r){return{x:e,y:t,w:n,h:r}}function a(e){return o(e.left,e.top,e.width,e.height)}var s=Math.min,l=Math.max,c=Math.round;return{inflate:n,relativePosition:e,findBestRelativePosition:t,intersect:r,clamp:i,create:o,fromClientRect:a}}),r(c,[],function(){function e(e,t){return function(){e.apply(t,arguments)}}function t(t){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],s(t,e(r,this),e(i,this))}function n(e){var t=this;return null===this._state?void this._deferreds.push(e):void l(function(){var n=t._state?e.onFulfilled:e.onRejected;if(null===n)return void(t._state?e.resolve:e.reject)(t._value);var r;try{r=n(t._value)}catch(i){return void e.reject(i)}e.resolve(r)})}function r(t){try{if(t===this)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"==typeof t||"function"==typeof t)){var n=t.then;if("function"==typeof n)return void s(e(n,t),e(r,this),e(i,this))}this._state=!0,this._value=t,o.call(this)}catch(a){i.call(this,a)}}function i(e){this._state=!1,this._value=e,o.call(this)}function o(){for(var e=0,t=this._deferreds.length;e=534;return{opera:r,webkit:i,ie:o,gecko:l,mac:c,iOS:u,android:d,contentEditable:g,transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:8!=o,range:window.getSelection&&"Range"in window,documentMode:o&&!s?document.documentMode||7:10,fileApi:f,ceFalse:o===!1||o>8,canHaveCSP:o===!1||o>11,desktop:!h&&!p,windowsPhone:m}}),r(f,[u,d],function(e,t){function n(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r||!1):e.attachEvent&&e.attachEvent("on"+t,n)}function r(e,t,n,r){e.removeEventListener?e.removeEventListener(t,n,r||!1):e.detachEvent&&e.detachEvent("on"+t,n)}function i(e,t){var n,r=t;return n=e.path,n&&n.length>0&&(r=n[0]),e.deepPath&&(n=e.deepPath(),n&&n.length>0&&(r=n[0])),r}function o(e,n){function r(){return!1}function o(){return!0}var a,s=n||{},l;for(a in e)u[a]||(s[a]=e[a]);if(s.target||(s.target=s.srcElement||document),t.experimentalShadowDom&&(s.target=i(e,s.target)),e&&c.test(e.type)&&e.pageX===l&&e.clientX!==l){var d=s.target.ownerDocument||document,f=d.documentElement,h=d.body;s.pageX=e.clientX+(f&&f.scrollLeft||h&&h.scrollLeft||0)-(f&&f.clientLeft||h&&h.clientLeft||0),s.pageY=e.clientY+(f&&f.scrollTop||h&&h.scrollTop||0)-(f&&f.clientTop||h&&h.clientTop||0)}return s.preventDefault=function(){s.isDefaultPrevented=o,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},s.stopPropagation=function(){s.isPropagationStopped=o,e&&(e.stopPropagation?e.stopPropagation():e.cancelBubble=!0)},s.stopImmediatePropagation=function(){s.isImmediatePropagationStopped=o,s.stopPropagation()},s.isDefaultPrevented||(s.isDefaultPrevented=r,s.isPropagationStopped=r,s.isImmediatePropagationStopped=r),"undefined"==typeof s.metaKey&&(s.metaKey=!1),s}function a(t,i,o){function a(){o.domLoaded||(o.domLoaded=!0,i(u))}function s(){("complete"===c.readyState||"interactive"===c.readyState&&c.body)&&(r(c,"readystatechange",s),a())}function l(){try{c.documentElement.doScroll("left")}catch(t){return void e.setTimeout(l)}a()}var c=t.document,u={type:"ready"};return o.domLoaded?void i(u):(c.addEventListener?"complete"===c.readyState?a():n(t,"DOMContentLoaded",a):(n(c,"readystatechange",s),c.documentElement.doScroll&&t.self===t.top&&l()),void n(t,"load",a))}function s(){function e(e,t){var n,r,o,a,s=i[t];if(n=s&&s[e.type])for(r=0,o=n.length;rw.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[F]=!0,e}function i(e){var t=D.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=e.length;r--;)w.attrHandle[n[r]]=t}function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||X)-(~e.sourceIndex||X);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function u(e){return e&&typeof e.getElementsByTagName!==Y&&e}function d(){}function f(e){for(var t=0,n=e.length,r="";t1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function m(t,n,r){for(var i=0,o=n.length;i-1&&(r[c]=!(a[c]=d))}}else b=g(b===a?b.splice(p,b.length):b),o?o(null,a,b,l):Z.apply(a,b)})}function y(e){for(var t,n,r,i=e.length,o=w.relative[e[0].type],a=o||w.relative[" "],s=o?1:0,l=h(function(e){return e===t},a,!0),c=h(function(e){return te.call(t,e)>-1},a,!0),u=[function(e,n,r){return!o&&(r||n!==T)||((t=n).nodeType?l(e,n,r):c(e,n,r))}];s1&&p(u),s>1&&f(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(se,"$1"),n,s0,o=t.length>0,a=function(r,a,s,l,c){var u,d,f,h=0,p="0",m=r&&[],v=[],y=T,b=r||o&&w.find.TAG("*",c),C=U+=null==y?1:Math.random()||.1,x=b.length;for(c&&(T=a!==D&&a);p!==x&&null!=(u=b[p]);p++){if(o&&u){for(d=0;f=t[d++];)if(f(u,a,s)){l.push(u);break}c&&(U=C)}i&&((u=!f&&u)&&h--,r&&m.push(u))}if(h+=p,i&&p!==h){for(d=0;f=n[d++];)f(m,v,a,s);if(r){if(h>0)for(;p--;)m[p]||v[p]||(v[p]=J.call(l));v=g(v)}Z.apply(l,v),c&&!r&&v.length>0&&h+n.length>1&&e.uniqueSort(l)}return c&&(U=C,T=y),m};return i?r(a):a}var C,x,w,E,N,_,S,k,T,R,A,B,D,L,M,P,O,H,I,F="sizzle"+-new Date,z=window.document,U=0,W=0,V=n(),$=n(),q=n(),j=function(e,t){return e===t&&(A=!0),0},Y=typeof t,X=1<<31,K={}.hasOwnProperty,G=[],J=G.pop,Q=G.push,Z=G.push,ee=G.slice,te=G.indexOf||function(e){for(var t=0,n=this.length;t+~]|"+re+")"+re+"*"),ue=new RegExp("="+re+"*([^\\]'\"]*?)"+re+"*\\]","g"),de=new RegExp(ae),fe=new RegExp("^"+ie+"$"),he={ID:new RegExp("^#("+ie+")"),CLASS:new RegExp("^\\.("+ie+")"),TAG:new RegExp("^("+ie+"|[*])"),ATTR:new RegExp("^"+oe),PSEUDO:new RegExp("^"+ae),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+re+"*(even|odd|(([+-]|)(\\d*)n|)"+re+"*(?:([+-]|)"+re+"*(\\d+)|))"+re+"*\\)|)","i"),bool:new RegExp("^(?:"+ne+")$","i"),needsContext:new RegExp("^"+re+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+re+"*((?:-\\d)?\\d*)"+re+"*\\)|)(?=[^-]|$)","i")},pe=/^(?:input|select|textarea|button)$/i,me=/^h\d$/i,ge=/^[^{]+\{\s*\[native \w/,ve=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ye=/[+~]/,be=/'|\\/g,Ce=new RegExp("\\\\([\\da-f]{1,6}"+re+"?|("+re+")|.)","ig"),xe=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)};try{Z.apply(G=ee.call(z.childNodes),z.childNodes),G[z.childNodes.length].nodeType}catch(we){Z={apply:G.length?function(e,t){Q.apply(e,ee.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}x=e.support={},N=e.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},B=e.setDocument=function(e){function t(e){try{return e.top}catch(t){}return null}var n,r=e?e.ownerDocument||e:z,o=r.defaultView;return r!==D&&9===r.nodeType&&r.documentElement?(D=r,L=r.documentElement,M=!N(r),o&&o!==t(o)&&(o.addEventListener?o.addEventListener("unload",function(){B()},!1):o.attachEvent&&o.attachEvent("onunload",function(){B()})),x.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),x.getElementsByTagName=i(function(e){return e.appendChild(r.createComment("")),!e.getElementsByTagName("*").length}),x.getElementsByClassName=ge.test(r.getElementsByClassName),x.getById=i(function(e){return L.appendChild(e).id=F,!r.getElementsByName||!r.getElementsByName(F).length}),x.getById?(w.find.ID=function(e,t){if(typeof t.getElementById!==Y&&M){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},w.filter.ID=function(e){var t=e.replace(Ce,xe);return function(e){return e.getAttribute("id")===t}}):(delete w.find.ID,w.filter.ID=function(e){var t=e.replace(Ce,xe);return function(e){var n=typeof e.getAttributeNode!==Y&&e.getAttributeNode("id");return n&&n.value===t}}),w.find.TAG=x.getElementsByTagName?function(e,t){if(typeof t.getElementsByTagName!==Y)return t.getElementsByTagName(e)}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},w.find.CLASS=x.getElementsByClassName&&function(e,t){if(M)return t.getElementsByClassName(e)},O=[],P=[],(x.qsa=ge.test(r.querySelectorAll))&&(i(function(e){e.innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&P.push("[*^$]="+re+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||P.push("\\["+re+"*(?:value|"+ne+")"),e.querySelectorAll(":checked").length||P.push(":checked")}),i(function(e){var t=r.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&P.push("name"+re+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||P.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),P.push(",.*:")})),(x.matchesSelector=ge.test(H=L.matches||L.webkitMatchesSelector||L.mozMatchesSelector||L.oMatchesSelector||L.msMatchesSelector))&&i(function(e){x.disconnectedMatch=H.call(e,"div"),H.call(e,"[s!='']:x"),O.push("!=",ae)}),P=P.length&&new RegExp(P.join("|")),O=O.length&&new RegExp(O.join("|")),n=ge.test(L.compareDocumentPosition),I=n||ge.test(L.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},j=n?function(e,t){if(e===t)return A=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!x.sortDetached&&t.compareDocumentPosition(e)===n?e===r||e.ownerDocument===z&&I(z,e)?-1:t===r||t.ownerDocument===z&&I(z,t)?1:R?te.call(R,e)-te.call(R,t):0:4&n?-1:1)}:function(e,t){if(e===t)return A=!0,0;var n,i=0,o=e.parentNode,s=t.parentNode,l=[e],c=[t];if(!o||!s)return e===r?-1:t===r?1:o?-1:s?1:R?te.call(R,e)-te.call(R,t):0;if(o===s)return a(e,t);for(n=e;n=n.parentNode;)l.unshift(n);for(n=t;n=n.parentNode;)c.unshift(n);for(;l[i]===c[i];)i++;return i?a(l[i],c[i]):l[i]===z?-1:c[i]===z?1:0},r):D},e.matches=function(t,n){return e(t,null,null,n)},e.matchesSelector=function(t,n){if((t.ownerDocument||t)!==D&&B(t),n=n.replace(ue,"='$1']"),x.matchesSelector&&M&&(!O||!O.test(n))&&(!P||!P.test(n)))try{var r=H.call(t,n);if(r||x.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(i){}return e(n,D,null,[t]).length>0},e.contains=function(e,t){return(e.ownerDocument||e)!==D&&B(e),I(e,t)},e.attr=function(e,n){(e.ownerDocument||e)!==D&&B(e);var r=w.attrHandle[n.toLowerCase()],i=r&&K.call(w.attrHandle,n.toLowerCase())?r(e,n,!M):t;return i!==t?i:x.attributes||!M?e.getAttribute(n):(i=e.getAttributeNode(n))&&i.specified?i.value:null},e.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},e.uniqueSort=function(e){var t,n=[],r=0,i=0;if(A=!x.detectDuplicates,R=!x.sortStable&&e.slice(0),e.sort(j),A){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return R=null,e},E=e.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=E(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=E(t);return n},w=e.selectors={cacheLength:50,createPseudo:r,match:he,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Ce,xe),e[3]=(e[3]||e[4]||e[5]||"").replace(Ce,xe),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(e){var t,n=!e[6]&&e[2];return he.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&de.test(n)&&(t=_(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Ce,xe).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=V[e+" "];return t||(t=new RegExp("(^|"+re+")"+e+"("+re+"|$)"))&&V(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==Y&&e.getAttribute("class")||"")})},ATTR:function(t,n,r){return function(i){var o=e.attr(i,t);return null==o?"!="===n:!n||(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o+" ").indexOf(r)>-1:"|="===n&&(o===r||o.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,h,p,m=o!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s;if(g){if(o){for(;m;){for(d=t;d=d[m];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;p=m="only"===e&&!p&&"nextSibling"}return!0}if(p=[a?g.firstChild:g.lastChild],a&&y){for(u=g[F]||(g[F]={}),c=u[e]||[],h=c[0]===U&&c[1],f=c[0]===U&&c[2],d=h&&g.childNodes[h];d=++h&&d&&d[m]||(f=h=0)||p.pop();)if(1===d.nodeType&&++f&&d===t){u[e]=[U,h,f];break}}else if(y&&(c=(t[F]||(t[F]={}))[e])&&c[0]===U)f=c[1];else for(;(d=++h&&d&&d[m]||(f=h=0)||p.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++f||(y&&((d[F]||(d[F]={}))[e]=[U,f]),d!==t)););return f-=i,f===r||f%r===0&&f/r>=0}}},PSEUDO:function(t,n){var i,o=w.pseudos[t]||w.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return o[F]?o(n):o.length>1?(i=[t,t,"",n],w.setFilters.hasOwnProperty(t.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),a=i.length;a--;)r=te.call(e,i[a]),e[r]=!(t[r]=i[a])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=S(e.replace(se,"$1"));return i[F]?r(function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),!n.pop()}}),has:r(function(t){return function(n){return e(t,n).length>0}}),contains:r(function(e){return e=e.replace(Ce,xe),function(t){return(t.textContent||t.innerText||E(t)).indexOf(e)>-1}}),lang:r(function(t){return fe.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(Ce,xe).toLowerCase(),function(e){var n;do if(n=M?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return n=n.toLowerCase(),n===t||0===n.indexOf(t+"-");while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=window.location&&window.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===L},focus:function(e){return e===D.activeElement&&(!D.hasFocus||D.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!w.pseudos.empty(e)},header:function(e){return me.test(e.nodeName)},input:function(e){return pe.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[n<0?n+t:n]}),even:c(function(e,t){for(var n=0;n=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=n<0?n+t:n;++r2&&"ID"===(a=o[0]).type&&x.getById&&9===t.nodeType&&M&&w.relative[o[1].type]){if(t=(w.find.ID(a.matches[0].replace(Ce,xe),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=he.needsContext.test(e)?0:o.length;i--&&(a=o[i],!w.relative[s=a.type]);)if((l=w.find[s])&&(r=l(a.matches[0].replace(Ce,xe),ye.test(o[0].type)&&u(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&f(o),!e)return Z.apply(n,r),n;break}}return(c||S(e,d))(r,t,!M,n,ye.test(e)&&u(t.parentNode)||t),n},x.sortStable=F.split("").sort(j).join("")===F,x.detectDuplicates=!!A,B(),x.sortDetached=i(function(e){return 1&e.compareDocumentPosition(D.createElement("div"))}),i(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),x.attributes&&i(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(ne,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),e}),r(p,[],function(){function e(e){var t=e,n,r;if(!u(e))for(t=[],n=0,r=e.length;n=0;i--)c(e,t[i],n,r);else for(i=0;i)[^>]*$|#([\w\-]*)$)/,S=e.Event,k,T=r.makeMap("children,contents,next,prev"),R=r.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," "),A=r.makeMap("checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected"," "),B={"for":"htmlFor","class":"className",readonly:"readOnly"},D={"float":"cssFloat"},L={},M={},P=/^\s*|\s*$/g;return f.fn=f.prototype={constructor:f,selector:"",context:null,length:0,init:function(e,t){var n=this,r,i;if(!e)return n;if(e.nodeType)return n.context=n[0]=e,n.length=1,n;if(t&&t.nodeType)n.context=t;else{if(t)return f(e).attr(t);n.context=t=document}if(a(e)){if(n.selector=e,r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:_.exec(e),!r)return f(t).find(e);if(r[1])for(i=l(e,v(t)).firstChild;i;)E.call(n,i),i=i.nextSibling;else{if(i=v(t).getElementById(r[2]),!i)return n;if(i.id!==r[2])return n.find(e);n.length=1,n[0]=i}}else this.add(e,!1);return n},toArray:function(){return r.toArray(this)},add:function(e,t){var n=this,r,i;if(a(e))return n.add(f(e));if(t!==!1)for(r=f.unique(n.toArray().concat(f.makeArray(e))),n.length=r.length,i=0;i1&&(T[e]||(i=f.unique(i)),0===e.indexOf("parents")&&(i=i.reverse())),i=f(i),n?i.filter(n):i}}),m({parentsUntil:function(e,t){return y(e,"parentNode",t)},nextUntil:function(e,t){return b(e,"nextSibling",1,t).slice(1)},prevUntil:function(e,t){return b(e,"previousSibling",1,t).slice(1)}},function(e,t){f.fn[e]=function(n,r){var i=this,o=[];return i.each(function(){var e=t.call(o,this,n,o);e&&(f.isArray(e)?o.push.apply(o,e):o.push(e))}),this.length>1&&(o=f.unique(o),0!==e.indexOf("parents")&&"prevUntil"!==e||(o=o.reverse())),o=f(o),r?o.filter(r):o}}),f.fn.is=function(e){return!!e&&this.filter(e).length>0},f.fn.init.prototype=f.fn,f.overrideDefaults=function(e){function t(r,i){return n=n||e(),0===arguments.length&&(r=n.element),i||(i=n.context),new t.fn.init(r,i)}var n;return f.extend(t,this),t},i.ie&&i.ie<8&&(x(L,"get",{maxlength:function(e){var t=e.maxLength;return 2147483647===t?k:t},size:function(e){var t=e.size;return 20===t?k:t},"class":function(e){return e.className},style:function(e){var t=e.style.cssText;return 0===t.length?k:t}}),x(L,"set",{"class":function(e,t){e.className=t},style:function(e,t){e.style.cssText=t}})),i.ie&&i.ie<9&&(D["float"]="styleFloat",x(M,"set",{opacity:function(e,t){var n=e.style;null===t||""===t?n.removeAttribute("filter"):(n.zoom=1,n.filter="alpha(opacity="+100*t+")")}})),f.attrHooks=L,f.cssHooks=M,f}),r(v,[],function(){return function(e,t){function n(e,t,n,r){function i(e){return e=parseInt(e,10).toString(16),e.length>1?e:"0"+e}return"#"+i(t)+i(n)+i(r)}var r=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,i=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,o=/\s*([^:]+):\s*([^;]+);?/g,a=/\s+$/,s,l={},c,u,d,f="\ufeff";for(e=e||{},t&&(u=t.getValidStyles(),d=t.getInvalidStyles()),c=("\\\" \\' \\; \\: ; : "+f).split(" "),s=0;s-1&&n||(y[e+t]=s==-1?l[0]:l.join(" "),delete y[e+"-top"+t],delete y[e+"-right"+t],delete y[e+"-bottom"+t],delete y[e+"-left"+t])}}function u(e){var t=y[e],n;if(t){for(t=t.split(" "),n=t.length;n--;)if(t[n]!==t[0])return!1;return y[e]=t[0],!0}}function d(e,t,n,r){u(t)&&u(n)&&u(r)&&(y[e]=y[t]+" "+y[n]+" "+y[r],delete y[t],delete y[n],delete y[r])}function h(e){return w=!0,l[e]}function p(e,t){return w&&(e=e.replace(/\uFEFF[0-9]/g,function(e){return l[e]})),t||(e=e.replace(/\\([\'\";:])/g,"$1")),e}function m(e){return String.fromCharCode(parseInt(e.slice(1),16))}function g(e){return e.replace(/\\[0-9a-f]+/gi,m)}function v(t,n,r,i,o,a){if(o=o||a)return o=p(o),"'"+o.replace(/\'/g,"\\'")+"'";if(n=p(n||r||i),!e.allow_script_urls){var s=n.replace(/[\s\r\n]+/g,"");if(/(java|vb)script:/i.test(s))return"";if(!e.allow_svg_data_urls&&/^data:image\/svg/i.test(s))return""}return E&&(n=E.call(N,n,"style")),"url('"+n.replace(/\'/g,"\\'")+"')"}var y={},b,C,x,w,E=e.url_converter,N=e.url_converter_scope||this;if(t){for(t=t.replace(/[\u0000-\u001F]/g,""),t=t.replace(/\\[\"\';:\uFEFF]/g,h).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(e){return e.replace(/[;:]/g,h)});b=o.exec(t);)if(o.lastIndex=b.index+b[0].length,C=b[1].replace(a,"").toLowerCase(),x=b[2].replace(a,""),C&&x){if(C=g(C),x=g(x),C.indexOf(f)!==-1||C.indexOf('"')!==-1)continue;if(!e.allow_script_urls&&("behavior"==C||/expression\s*\(|\/\*|\*\//.test(x)))continue;"font-weight"===C&&"700"===x?x="bold":"color"!==C&&"background-color"!==C||(x=x.toLowerCase()),x=x.replace(r,n),x=x.replace(i,v),y[C]=w?p(x,!0):x}c("border","",!0),c("border","-width"),c("border","-color"),c("border","-style"),c("padding",""),c("margin",""),d("border","border-width","border-style","border-color"),"medium none"===y.border&&delete y.border,"none"===y["border-image"]&&delete y["border-image"]}return y},serialize:function(e,t){function n(t){var n,r,o,a;if(n=u[t])for(r=0,o=n.length;r0?" ":"")+t+": "+a+";")}function r(e,t){var n;return n=d["*"],(!n||!n[e])&&(n=d[t],!n||!n[e])}var i="",o,a;if(t&&u)n("*"),n(t);else for(o in e)a=e[o],!a||d&&!r(o,t)||(i+=(i.length>0?" ":"")+o+": "+a+";");return i}}}}),r(y,[],function(){return function(e,t){function n(e,n,r,i){var o,a;if(e){if(!i&&e[n])return e[n];if(e!=t){if(o=e[r])return o;for(a=e.parentNode;a&&a!=t;a=a.parentNode)if(o=a[r])return o}}}function r(e,n,r,i){var o,a,s;if(e){if(o=e[r],t&&o===t)return;if(o){if(!i)for(s=o[n];s;s=s[n])if(!s[n])return s;return o}if(a=e.parentNode,a&&a!==t)return a}}var i=e;this.current=function(){return i},this.next=function(e){return i=n(i,"firstChild","nextSibling",e)},this.prev=function(e){return i=n(i,"lastChild","previousSibling",e)},this.prev2=function(e){return i=r(i,"lastChild","previousSibling",e)}}}),r(b,[m],function(e){function t(n){function r(){return P.createDocumentFragment()}function i(e,t){E(F,e,t)}function o(e,t){E(z,e,t)}function a(e){i(e.parentNode,j(e))}function s(e){i(e.parentNode,j(e)+1)}function l(e){o(e.parentNode,j(e))}function c(e){o(e.parentNode,j(e)+1)}function u(e){e?(M[V]=M[W],M[$]=M[U]):(M[W]=M[V],M[U]=M[$]),M.collapsed=F}function d(e){a(e),c(e)}function f(e){i(e,0),o(e,1===e.nodeType?e.childNodes.length:e.nodeValue.length)}function h(e,t){var n=M[W],r=M[U],i=M[V],o=M[$],a=t.startContainer,s=t.startOffset,l=t.endContainer,c=t.endOffset;return 0===e?w(n,r,a,s):1===e?w(i,o,a,s):2===e?w(i,o,l,c):3===e?w(n,r,l,c):void 0}function p(){N(I)}function m(){return N(O)}function g(){return N(H)}function v(e){var t=this[W],r=this[U],i,o;3!==t.nodeType&&4!==t.nodeType||!t.nodeValue?(t.childNodes.length>0&&(o=t.childNodes[r]),o?t.insertBefore(e,o):3==t.nodeType?n.insertAfter(e,t):t.appendChild(e)):r?r>=t.nodeValue.length?n.insertAfter(e,t):(i=t.splitText(r),t.parentNode.insertBefore(e,i)):t.parentNode.insertBefore(e,t)}function y(e){var t=M.extractContents();M.insertNode(e),e.appendChild(t),M.selectNode(e)}function b(){return q(new t(n),{startContainer:M[W],startOffset:M[U],endContainer:M[V],endOffset:M[$],collapsed:M.collapsed,commonAncestorContainer:M.commonAncestorContainer})}function C(e,t){var n;if(3==e.nodeType)return e;if(t<0)return e;for(n=e.firstChild;n&&t>0;)--t,n=n.nextSibling;return n?n:e}function x(){return M[W]==M[V]&&M[U]==M[$]}function w(e,t,r,i){var o,a,s,l,c,u;if(e==r)return t==i?0:t0&&M.collapse(e):M.collapse(e),M.collapsed=x(),M.commonAncestorContainer=n.findCommonAncestor(M[W],M[V])}function N(e){var t,n=0,r=0,i,o,a,s,l,c;if(M[W]==M[V])return _(e);for(t=M[V],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[W])return S(t,e);++n}for(t=M[W],i=t.parentNode;i;t=i,i=i.parentNode){if(i==M[V])return k(t,e);++r}for(o=r-n,a=M[W];o>0;)a=a.parentNode,o--;for(s=M[V];o<0;)s=s.parentNode,o++;for(l=a.parentNode,c=s.parentNode;l!=c;l=l.parentNode,c=c.parentNode)a=l,s=c;return T(a,s,e)}function _(e){var t,n,i,o,a,s,l,c,u;if(e!=I&&(t=r()),M[U]==M[$])return t;if(3==M[W].nodeType){if(n=M[W].nodeValue,i=n.substring(M[U],M[$]),e!=H&&(o=M[W],c=M[U],u=M[$]-M[U],0===c&&u>=o.nodeValue.length-1?o.parentNode.removeChild(o):o.deleteData(c,u),M.collapse(F)),e==I)return;return i.length>0&&t.appendChild(P.createTextNode(i)),t}for(o=C(M[W],M[U]),a=M[$]-M[U];o&&a>0;)s=o.nextSibling,l=D(o,e),t&&t.appendChild(l),--a,o=s;return e!=H&&M.collapse(F),t}function S(e,t){var n,i,o,a,s,l;if(t!=I&&(n=r()),i=R(e,t),n&&n.appendChild(i),o=j(e),a=o-M[U],a<=0)return t!=H&&(M.setEndBefore(e),M.collapse(z)),n;for(i=e.previousSibling;a>0;)s=i.previousSibling,l=D(i,t),n&&n.insertBefore(l,n.firstChild),--a,i=s;return t!=H&&(M.setEndBefore(e),M.collapse(z)),n}function k(e,t){var n,i,o,a,s,l;for(t!=I&&(n=r()),o=A(e,t),n&&n.appendChild(o),i=j(e),++i,a=M[$]-i,o=e.nextSibling;o&&a>0;)s=o.nextSibling,l=D(o,t),n&&n.appendChild(l),--a,o=s;return t!=H&&(M.setStartAfter(e),M.collapse(F)),n}function T(e,t,n){var i,o,a,s,l,c,u;for(n!=I&&(o=r()),i=A(e,n),o&&o.appendChild(i),a=j(e),s=j(t),++a,l=s-a,c=e.nextSibling;l>0;)u=c.nextSibling,i=D(c,n),o&&o.appendChild(i),c=u,--l;return i=R(t,n),o&&o.appendChild(i),n!=H&&(M.setStartAfter(e),M.collapse(F)),o}function R(e,t){var n=C(M[V],M[$]-1),r,i,o,a,s,l=n!=M[V];if(n==e)return B(n,l,z,t);for(r=n.parentNode,i=B(r,z,z,t);r;){for(;n;)o=n.previousSibling,a=B(n,l,z,t),t!=I&&i.insertBefore(a,i.firstChild),l=F,n=o;if(r==e)return i;n=r.previousSibling,r=r.parentNode,s=B(r,z,z,t),t!=I&&s.appendChild(i),i=s}}function A(e,t){var n=C(M[W],M[U]),r=n!=M[W],i,o,a,s,l;if(n==e)return B(n,r,F,t);for(i=n.parentNode,o=B(i,z,F,t);i;){for(;n;)a=n.nextSibling,s=B(n,r,F,t),t!=I&&o.appendChild(s),r=F,n=a;if(i==e)return o;n=i.nextSibling,i=i.parentNode,l=B(i,z,F,t),t!=I&&l.appendChild(o),o=l}}function B(e,t,r,i){var o,a,s,l,c;if(t)return D(e,i);if(3==e.nodeType){if(o=e.nodeValue,r?(l=M[U],a=o.substring(l),s=o.substring(0,l)):(l=M[$],a=o.substring(0,l),s=o.substring(l)),i!=H&&(e.nodeValue=s),i==I)return;return c=n.clone(e,z),c.nodeValue=a,c}if(i!=I)return n.clone(e,z)}function D(e,t){return t!=I?t==H?n.clone(e,F):e:void e.parentNode.removeChild(e)}function L(){return n.create("body",null,g()).outerText}var M=this,P=n.doc,O=0,H=1,I=2,F=!0,z=!1,U="startOffset",W="startContainer",V="endContainer",$="endOffset",q=e.extend,j=n.nodeIndex;return q(M,{startContainer:P,startOffset:0,endContainer:P,endOffset:0,collapsed:F,commonAncestorContainer:P,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:i,setEnd:o,setStartBefore:a,setStartAfter:s,setEndBefore:l,setEndAfter:c,collapse:u,selectNode:d,selectNodeContents:f,compareBoundaryPoints:h,deleteContents:p,extractContents:m,cloneContents:g,insertNode:v,surroundContents:y,cloneRange:b,toStringIE:L}),M}return t.prototype.toString=function(){return this.toStringIE()},t}),r(C,[m],function(e){function t(e){var t;return t=document.createElement("div"),t.innerHTML=e,t.textContent||t.innerText||e}function n(e,t){var n,r,i,a={};if(e){for(e=e.split(","),t=t||10,n=0;n\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,l=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=/[<>&\"\']/g,u=/&#([a-z0-9]+);?|&([a-z0-9]+);/gi,d={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"};o={'"':""","'":"'","<":"<",">":">","&":"&","`":"`"},a={"<":"<",">":">","&":"&",""":'"',"'":"'"},i=n("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);var f={encodeRaw:function(e,t){return e.replace(t?s:l,function(e){return o[e]||e})},encodeAllRaw:function(e){return(""+e).replace(c,function(e){return o[e]||e})},encodeNumeric:function(e,t){return e.replace(t?s:l,function(e){return e.length>1?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":o[e]||"&#"+e.charCodeAt(0)+";"})},encodeNamed:function(e,t,n){return n=n||i,e.replace(t?s:l,function(e){return o[e]||n[e]||e})},getEncodeFunc:function(e,t){function a(e,n){return e.replace(n?s:l,function(e){return o[e]||t[e]||"&#"+e.charCodeAt(0)+";"||e})}function c(e,n){return f.encodeNamed(e,n,t)}return t=n(t)||i,e=r(e.replace(/\+/g,",")),e.named&&e.numeric?a:e.named?t?c:f.encodeNamed:e.numeric?f.encodeNumeric:f.encodeRaw},decode:function(e){return e.replace(u,function(e,n){return n?(n="x"===n.charAt(0).toLowerCase()?parseInt(n.substr(1),16):parseInt(n,10),n>65535?(n-=65536,String.fromCharCode(55296+(n>>10),56320+(1023&n))):d[n]||String.fromCharCode(n)):a[e]||i[e]||t(e)})}};return f}),r(x,[m,u],function(e,t){return function(n,r){function i(e){n.getElementsByTagName("head")[0].appendChild(e)}function o(r,o,c){function u(){for(var e=b.passed,t=e.length;t--;)e[t]();b.status=2,b.passed=[],b.failed=[]}function d(){for(var e=b.failed,t=e.length;t--;)e[t]();b.status=3,b.passed=[],b.failed=[]}function f(){var e=navigator.userAgent.match(/WebKit\/(\d*)/);return!!(e&&e[1]<536)}function h(e,n){e()||((new Date).getTime()-y0)return v=n.createElement("style"),v.textContent='@import "'+r+'"',m(),void i(v);p()}i(g),g.href=r}}var a=0,s={},l;r=r||{},l=r.maxLoadTime||5e3,this.load=o}}),r(w,[h,g,v,f,y,b,C,d,m,x],function(e,n,r,i,o,a,s,l,c,u){function d(e,t){var n={},r=t.keep_values,i;return i={set:function(n,r,i){t.url_converter&&(r=t.url_converter.call(t.url_converter_scope||e,r,i,n[0])),n.attr("data-mce-"+i,r).attr(i,r)},get:function(e,t){return e.attr("data-mce-"+t)||e.attr(t)}},n={style:{set:function(e,t){return null!==t&&"object"==typeof t?void e.css(t):(r&&e.attr("data-mce-style",t),void e.attr("style",t))},get:function(t){var n=t.attr("data-mce-style")||t.attr("style");return n=e.serializeStyle(e.parseStyle(n),t[0].nodeName)}}},r&&(n.href=n.src=i),n}function f(e,t){var n=t.attr("style");n=e.serializeStyle(e.parseStyle(n),t[0].nodeName),n||(n=null),t.attr("data-mce-style",n)}function h(e,t){var n=0,r,i;if(e)for(r=e.nodeType,e=e.previousSibling;e;e=e.previousSibling)i=e.nodeType,(!t||3!=i||i!=r&&e.nodeValue.length)&&(n++,r=i);return n}function p(e,t){var o=this,a;o.doc=e,o.win=window,o.files={},o.counter=0,o.stdMode=!b||e.documentMode>=8,o.boxModel=!b||"CSS1Compat"==e.compatMode||o.stdMode,o.styleSheetLoader=new u(e),o.boundEvents=[],o.settings=t=t||{},o.schema=t.schema,o.styles=new r({url_converter:t.url_converter,url_converter_scope:t.url_converter_scope},t.schema),o.fixDoc(e),o.events=t.ownEvents?new i(t.proxy):i.Event,o.attrHooks=d(o,t),a=t.schema?t.schema.getBlockElements():{},o.$=n.overrideDefaults(function(){return{context:e,element:o.getRoot()}}),o.isBlock=function(e){if(!e)return!1;var t=e.nodeType;return t?!(1!==t||!a[e.nodeName]):!!a[e]}}var m=c.each,g=c.is,v=c.grep,y=c.trim,b=l.ie,C=/^([a-z0-9],?)+$/i,x=/^[ \t\r\n]*$/;return p.prototype={$$:function(e){return"string"==typeof e&&(e=this.get(e)),this.$(e)},root:null,fixDoc:function(e){var t=this.settings,n;if(b&&t.schema){"abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video".replace(/\w+/g,function(t){e.createElement(t)});for(n in t.schema.getCustomElements())e.createElement(n)}},clone:function(e,t){var n=this,r,i;return!b||1!==e.nodeType||t?e.cloneNode(t):(i=n.doc,t?r.firstChild:(r=i.createElement(e.nodeName),m(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),r))},getRoot:function(){var e=this;return e.settings.root_element||e.doc.body},getViewPort:function(e){var t,n;return e=e?e:this.win,t=e.document,n=this.boxModel?t.documentElement:t.body,{x:e.pageXOffset||n.scrollLeft,y:e.pageYOffset||n.scrollTop,w:e.innerWidth||n.clientWidth,h:e.innerHeight||n.clientHeight}},getRect:function(e){var t=this,n,r;return e=t.get(e),n=t.getPos(e),r=t.getSize(e),{x:n.x,y:n.y,w:r.w,h:r.h}},getSize:function(e){var t=this,n,r;return e=t.get(e),n=t.getStyle(e,"width"),r=t.getStyle(e,"height"),n.indexOf("px")===-1&&(n=0),r.indexOf("px")===-1&&(r=0),{w:parseInt(n,10)||e.offsetWidth||e.clientWidth, +h:parseInt(r,10)||e.offsetHeight||e.clientHeight}},getParent:function(e,t,n){return this.getParents(e,t,n,!1)},getParents:function(e,n,r,i){var o=this,a,s=[];for(e=o.get(e),i=i===t,r=r||("BODY"!=o.getRoot().nodeName?o.getRoot().parentNode:null),g(n,"string")&&(a=n,n="*"===n?function(e){return 1==e.nodeType}:function(e){return o.is(e,a)});e&&e!=r&&e.nodeType&&9!==e.nodeType;){if(!n||n(e)){if(!i)return e;s.push(e)}e=e.parentNode}return i?s:null},get:function(e){var t;return e&&this.doc&&"string"==typeof e&&(t=e,e=this.doc.getElementById(e),e&&e.id!==t)?this.doc.getElementsByName(t)[1]:e},getNext:function(e,t){return this._findSib(e,t,"nextSibling")},getPrev:function(e,t){return this._findSib(e,t,"previousSibling")},select:function(t,n){var r=this;return e(t,r.get(n)||r.settings.root_element||r.doc,[])},is:function(n,r){var i;if(n.length===t){if("*"===r)return 1==n.nodeType;if(C.test(r)){for(r=r.toLowerCase().split(/,/),n=n.nodeName.toLowerCase(),i=r.length-1;i>=0;i--)if(r[i]==n)return!0;return!1}}if(n.nodeType&&1!=n.nodeType)return!1;var o=n.nodeType?[n]:n;return e(r,o[0].ownerDocument||o[0],null,o).length>0},add:function(e,t,n,r,i){var o=this;return this.run(e,function(e){var a;return a=g(t,"string")?o.doc.createElement(t):t,o.setAttribs(a,n),r&&(r.nodeType?a.appendChild(r):o.setHTML(a,r)),i?a:e.appendChild(a)})},create:function(e,t,n){return this.add(this.doc.createElement(e),e,t,n,1)},createHTML:function(e,t,n){var r="",i;r+="<"+e;for(i in t)t.hasOwnProperty(i)&&null!==t[i]&&"undefined"!=typeof t[i]&&(r+=" "+i+'="'+this.encode(t[i])+'"');return"undefined"!=typeof n?r+">"+n+"":r+" />"},createFragment:function(e){var t,n,r=this.doc,i;for(i=r.createElement("div"),t=r.createDocumentFragment(),e&&(i.innerHTML=e);n=i.firstChild;)t.appendChild(n);return t},remove:function(e,t){return e=this.$$(e),t?e.each(function(){for(var e;e=this.firstChild;)3==e.nodeType&&0===e.data.length?this.removeChild(e):this.parentNode.insertBefore(e,this)}).remove():e.remove(),e.length>1?e.toArray():e[0]},setStyle:function(e,t,n){e=this.$$(e).css(t,n),this.settings.update_styles&&f(this,e)},getStyle:function(e,n,r){return e=this.$$(e),r?e.css(n):(n=n.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}),"float"==n&&(n=l.ie&&l.ie<12?"styleFloat":"cssFloat"),e[0]&&e[0].style?e[0].style[n]:t)},setStyles:function(e,t){e=this.$$(e).css(t),this.settings.update_styles&&f(this,e)},removeAllAttribs:function(e){return this.run(e,function(e){var t,n=e.attributes;for(t=n.length-1;t>=0;t--)e.removeAttributeNode(n.item(t))})},setAttrib:function(e,t,n){var r=this,i,o,a=r.settings;""===n&&(n=null),e=r.$$(e),i=e.attr(t),e.length&&(o=r.attrHooks[t],o&&o.set?o.set(e,n,t):e.attr(t,n),i!=n&&a.onSetAttrib&&a.onSetAttrib({attrElm:e,attrName:t,attrValue:n}))},setAttribs:function(e,t){var n=this;n.$$(e).each(function(e,r){m(t,function(e,t){n.setAttrib(r,t,e)})})},getAttrib:function(e,t,n){var r=this,i,o;return e=r.$$(e),e.length&&(i=r.attrHooks[t],o=i&&i.get?i.get(e,t):e.attr(t)),"undefined"==typeof o&&(o=n||""),o},getPos:function(e,t){var r=this,i=0,o=0,a,s=r.doc,l=s.body,c;if(e=r.get(e),t=t||l,e){if(t===l&&e.getBoundingClientRect&&"static"===n(l).css("position"))return c=e.getBoundingClientRect(),t=r.boxModel?s.documentElement:l,i=c.left+(s.documentElement.scrollLeft||l.scrollLeft)-t.clientLeft,o=c.top+(s.documentElement.scrollTop||l.scrollTop)-t.clientTop,{x:i,y:o};for(a=e;a&&a!=t&&a.nodeType;)i+=a.offsetLeft||0,o+=a.offsetTop||0,a=a.offsetParent;for(a=e.parentNode;a&&a!=t&&a.nodeType;)i-=a.scrollLeft||0,o-=a.scrollTop||0,a=a.parentNode}return{x:i,y:o}},parseStyle:function(e){return this.styles.parse(e)},serializeStyle:function(e,t){return this.styles.serialize(e,t)},addStyle:function(e){var t=this,n=t.doc,r,i;if(t!==p.DOM&&n===document){var o=p.DOM.addedStyles;if(o=o||[],o[e])return;o[e]=!0,p.DOM.addedStyles=o}i=n.getElementById("mceDefaultStyles"),i||(i=n.createElement("style"),i.id="mceDefaultStyles",i.type="text/css",r=n.getElementsByTagName("head")[0],r.firstChild?r.insertBefore(i,r.firstChild):r.appendChild(i)),i.styleSheet?i.styleSheet.cssText+=e:i.appendChild(n.createTextNode(e))},loadCSS:function(e){var t=this,n=t.doc,r;return t!==p.DOM&&n===document?void p.DOM.loadCSS(e):(e||(e=""),r=n.getElementsByTagName("head")[0],void m(e.split(","),function(e){var i;e=c._addCacheSuffix(e),t.files[e]||(t.files[e]=!0,i=t.create("link",{rel:"stylesheet",href:e}),b&&n.documentMode&&n.recalc&&(i.onload=function(){n.recalc&&n.recalc(),i.onload=null}),r.appendChild(i))}))},addClass:function(e,t){this.$$(e).addClass(t)},removeClass:function(e,t){this.toggleClass(e,t,!1)},hasClass:function(e,t){return this.$$(e).hasClass(t)},toggleClass:function(e,t,r){this.$$(e).toggleClass(t,r).each(function(){""===this.className&&n(this).attr("class",null)})},show:function(e){this.$$(e).show()},hide:function(e){this.$$(e).hide()},isHidden:function(e){return"none"==this.$$(e).css("display")},uniqueId:function(e){return(e?e:"mce_")+this.counter++},setHTML:function(e,t){e=this.$$(e),b?e.each(function(e,r){if(r.canHaveHTML!==!1){for(;r.firstChild;)r.removeChild(r.firstChild);try{r.innerHTML="
    "+t,r.removeChild(r.firstChild)}catch(i){n("
    ").html("
    "+t).contents().slice(1).appendTo(r)}return t}}):e.html(t)},getOuterHTML:function(e){return e=this.get(e),1==e.nodeType&&"outerHTML"in e?e.outerHTML:n("
    ").append(n(e).clone()).html()},setOuterHTML:function(e,t){var r=this;r.$$(e).each(function(){try{if("outerHTML"in this)return void(this.outerHTML=t)}catch(e){}r.remove(n(this).html(t),!0)})},decode:s.decode,encode:s.encodeAllRaw,insertAfter:function(e,t){return t=this.get(t),this.run(e,function(e){var n,r;return n=t.parentNode,r=t.nextSibling,r?n.insertBefore(e,r):n.appendChild(e),e})},replace:function(e,t,n){var r=this;return r.run(t,function(t){return g(t,"array")&&(e=e.cloneNode(!0)),n&&m(v(t.childNodes),function(t){e.appendChild(t)}),t.parentNode.replaceChild(e,t)})},rename:function(e,t){var n=this,r;return e.nodeName!=t.toUpperCase()&&(r=n.create(t),m(n.getAttribs(e),function(t){n.setAttrib(r,t.nodeName,n.getAttrib(e,t.nodeName))}),n.replace(r,e,1)),r||e},findCommonAncestor:function(e,t){for(var n=e,r;n;){for(r=t;r&&n!=r;)r=r.parentNode;if(n==r)break;n=n.parentNode}return!n&&e.ownerDocument?e.ownerDocument.documentElement:n},toHex:function(e){return this.styles.toHex(c.trim(e))},run:function(e,t,n){var r=this,i;return"string"==typeof e&&(e=r.get(e)),!!e&&(n=n||this,e.nodeType||!e.length&&0!==e.length?t.call(n,e):(i=[],m(e,function(e,o){e&&("string"==typeof e&&(e=r.get(e)),i.push(t.call(n,e,o)))}),i))},getAttribs:function(e){var t;if(e=this.get(e),!e)return[];if(b){if(t=[],"OBJECT"==e.nodeName)return e.attributes;"OPTION"===e.nodeName&&this.getAttrib(e,"selected")&&t.push({specified:1,nodeName:"selected"});var n=/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi;return e.cloneNode(!1).outerHTML.replace(n,"").replace(/[\w:\-]+/gi,function(e){t.push({specified:1,nodeName:e})}),t}return e.attributes},isEmpty:function(e,t){var n=this,r,i,a,s,l,c=0;if(e=e.firstChild){s=new o(e,e.parentNode),t=t||(n.schema?n.schema.getNonEmptyElements():null);do{if(a=e.nodeType,1===a){var u=e.getAttribute("data-mce-bogus");if(u){e=s.next("all"===u);continue}if(l=e.nodeName.toLowerCase(),t&&t[l]){if("br"===l){c++,e=s.next();continue}return!1}for(i=n.getAttribs(e),r=i.length;r--;)if(l=i[r].nodeName,"name"===l||"data-mce-bookmark"===l)return!1}if(8==a)return!1;if(3===a&&!x.test(e.nodeValue))return!1;e=s.next()}while(e)}return c<=1},createRng:function(){var e=this.doc;return e.createRange?e.createRange():new a(this)},nodeIndex:h,split:function(e,t,n){function r(e){function t(e){var t=e.previousSibling&&"SPAN"==e.previousSibling.nodeName,n=e.nextSibling&&"SPAN"==e.nextSibling.nodeName;return t&&n}var n,o=e.childNodes,a=e.nodeType;if(1!=a||"bookmark"!=e.getAttribute("data-mce-type")){for(n=o.length-1;n>=0;n--)r(o[n]);if(9!=a){if(3==a&&e.nodeValue.length>0){var s=y(e.nodeValue).length;if(!i.isBlock(e.parentNode)||s>0||0===s&&t(e))return}else if(1==a&&(o=e.childNodes,1==o.length&&o[0]&&1==o[0].nodeType&&"bookmark"==o[0].getAttribute("data-mce-type")&&e.parentNode.insertBefore(o[0],e),o.length||/^(br|hr|input|img)$/i.test(e.nodeName)))return;i.remove(e)}return e}}var i=this,o=i.createRng(),a,s,l;if(e&&t)return o.setStart(e.parentNode,i.nodeIndex(e)),o.setEnd(t.parentNode,i.nodeIndex(t)),a=o.extractContents(),o=i.createRng(),o.setStart(t.parentNode,i.nodeIndex(t)+1),o.setEnd(e.parentNode,i.nodeIndex(e)+1),s=o.extractContents(),l=e.parentNode,l.insertBefore(r(a),e),n?l.insertBefore(n,e):l.insertBefore(t,e),l.insertBefore(r(s),e),i.remove(e),n||t},bind:function(e,t,n,r){var i=this;if(c.isArray(e)){for(var o=e.length;o--;)e[o]=i.bind(e[o],t,n,r);return e}return!i.settings.collect||e!==i.doc&&e!==i.win||i.boundEvents.push([e,t,n,r]),i.events.bind(e,t,n,r||i)},unbind:function(e,t,n){var r=this,i;if(c.isArray(e)){for(i=e.length;i--;)e[i]=r.unbind(e[i],t,n);return e}if(r.boundEvents&&(e===r.doc||e===r.win))for(i=r.boundEvents.length;i--;){var o=r.boundEvents[i];e!=o[0]||t&&t!=o[1]||n&&n!=o[2]||this.events.unbind(o[0],o[1],o[2])}return this.events.unbind(e,t,n)},fire:function(e,t,n){return this.events.fire(e,t,n)},getContentEditable:function(e){var t;return e&&1==e.nodeType?(t=e.getAttribute("data-mce-contenteditable"),t&&"inherit"!==t?t:"inherit"!==e.contentEditable?e.contentEditable:null):null},getContentEditableParent:function(e){for(var t=this.getRoot(),n=null;e&&e!==t&&(n=this.getContentEditable(e),null===n);e=e.parentNode);return n},destroy:function(){var t=this;if(t.boundEvents){for(var n=t.boundEvents.length;n--;){var r=t.boundEvents[n];this.events.unbind(r[0],r[1],r[2])}t.boundEvents=null}e.setDocument&&e.setDocument(),t.win=t.doc=t.root=t.events=t.frag=null},isChildOf:function(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1},dumpRng:function(e){return"startContainer: "+e.startContainer.nodeName+", startOffset: "+e.startOffset+", endContainer: "+e.endContainer.nodeName+", endOffset: "+e.endOffset},_findSib:function(e,t,n){var r=this,i=t;if(e)for("string"==typeof i&&(i=function(e){return r.is(e,t)}),e=e[n];e;e=e[n])if(i(e))return e;return null}},p.DOM=new p(document),p.nodeIndex=h,p}),r(E,[w,m],function(e,t){function n(){function e(e,n){function i(){a.remove(l),s&&(s.onreadystatechange=s.onload=s=null),n()}function o(){"undefined"!=typeof console&&console.log&&console.log("Failed to load: "+e)}var a=r,s,l;l=a.uniqueId(),s=document.createElement("script"),s.id=l,s.type="text/javascript",s.src=t._addCacheSuffix(e),"onreadystatechange"in s?s.onreadystatechange=function(){/loaded|complete/.test(s.readyState)&&i()}:s.onload=i,s.onerror=o,(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}var n=0,a=1,s=2,l={},c=[],u={},d=[],f=0,h;this.isDone=function(e){return l[e]==s},this.markDone=function(e){l[e]=s},this.add=this.load=function(e,t,r){var i=l[e];i==h&&(c.push(e),l[e]=n),t&&(u[e]||(u[e]=[]),u[e].push({func:t,scope:r||this}))},this.remove=function(e){delete l[e],delete u[e]},this.loadQueue=function(e,t){this.loadScripts(c,e,t)},this.loadScripts=function(t,n,r){function c(e){i(u[e],function(e){e.func.call(e.scope)}),u[e]=h}var p;d.push({func:n,scope:r||this}),(p=function(){var n=o(t);t.length=0,i(n,function(t){return l[t]==s?void c(t):void(l[t]!=a&&(l[t]=a,f++,e(t,function(){l[t]=s,f--,c(t),p()})))}),f||(i(d,function(e){e.func.call(e.scope)}),d.length=0)})()}}var r=e.DOM,i=t.each,o=t.grep;return n.ScriptLoader=new n,n}),r(N,[E,m],function(e,n){function r(){var e=this;e.items=[],e.urls={},e.lookup={}}var i=n.each;return r.prototype={get:function(e){return this.lookup[e]?this.lookup[e].instance:t},dependencies:function(e){var t;return this.lookup[e]&&(t=this.lookup[e].dependencies),t||[]},requireLangPack:function(t,n){var i=r.language;if(i&&r.languageLoad!==!1){if(n)if(n=","+n+",",n.indexOf(","+i.substr(0,2)+",")!=-1)i=i.substr(0,2);else if(n.indexOf(","+i+",")==-1)return;e.ScriptLoader.add(this.urls[t]+"/langs/"+i+".js")}},add:function(e,t,n){return this.items.push(t),this.lookup[e]={instance:t,dependencies:n},t},remove:function(e){delete this.urls[e],delete this.lookup[e]},createUrl:function(e,t){return"object"==typeof t?t:{prefix:e.prefix,resource:t,suffix:e.suffix}},addComponents:function(t,n){var r=this.urls[t];i(n,function(t){e.ScriptLoader.add(r+"/"+t)})},load:function(n,o,a,s){function l(){var r=c.dependencies(n);i(r,function(e){var n=c.createUrl(o,e);c.load(n.resource,n,t,t)}),a&&(s?a.call(s):a.call(e))}var c=this,u=o;c.urls[n]||("object"==typeof o&&(u=o.prefix+o.resource+o.suffix),0!==u.indexOf("/")&&u.indexOf("://")==-1&&(u=r.baseURL+"/"+u),c.urls[n]=u.substring(0,u.lastIndexOf("/")),c.lookup[n]?l():e.ScriptLoader.add(u,l,s))}},r.PluginManager=new r,r.ThemeManager=new r,r}),r(_,[],function(){function e(e){return function(t){return!!t&&t.nodeType==e}}function t(e){return e=e.toLowerCase().split(" "),function(t){var n,r;if(t&&t.nodeType)for(r=t.nodeName.toLowerCase(),n=0;nn.length-1?t=n.length-1:t<0&&(t=0),n[t]||e}function s(e,t,n){for(;e&&e!==t;){if(n(e))return e;e=e.parentNode}return null}function l(e,t,n){return null!==s(e,t,n)}function c(e){return"_mce_caret"===e.id}function u(e,t){return v(e)&&l(e,t,c)===!1}function d(e){this.walk=function(t,n){function r(e){var t;return t=e[0],3===t.nodeType&&t===l&&c>=t.nodeValue.length&&e.splice(0,1),t=e[e.length-1],0===d&&e.length>0&&t===u&&3===t.nodeType&&e.splice(e.length-1,1),e}function i(e,t,n){for(var r=[];e&&e!=n;e=e[t])r.push(e);return r}function o(e,t){do{if(e.parentNode==t)return e;e=e.parentNode}while(e)}function s(e,t,o){var a=o?"nextSibling":"previousSibling";for(g=e,v=g.parentNode;g&&g!=t;g=v)v=g.parentNode,y=i(g==e?g:g[a],a),y.length&&(o||y.reverse(),n(r(y)))}var l=t.startContainer,c=t.startOffset,u=t.endContainer,d=t.endOffset,f,h,m,g,v,y,b;if(b=e.select("td[data-mce-selected],th[data-mce-selected]"),b.length>0)return void p(b,function(e){n([e])});if(1==l.nodeType&&l.hasChildNodes()&&(l=l.childNodes[c]),1==u.nodeType&&u.hasChildNodes()&&(u=a(u,d)),l==u)return n(r([l]));for(f=e.findCommonAncestor(l,u),g=l;g;g=g.parentNode){if(g===u)return s(l,f,!0);if(g===f)break}for(g=u;g;g=g.parentNode){if(g===l)return s(u,f);if(g===f)break}h=o(l,f)||l,m=o(u,f)||u,s(l,h,!0),y=i(h==l?h:h.nextSibling,"nextSibling",m==u?m.nextSibling:m),y.length&&n(r(y)),s(u,m)},this.split=function(e){function t(e,t){return e.splitText(t)}var n=e.startContainer,r=e.startOffset,i=e.endContainer,o=e.endOffset;return n==i&&3==n.nodeType?r>0&&rr?(o-=r,n=i=t(i,o).previousSibling,o=i.nodeValue.length,r=0):o=0):(3==n.nodeType&&r>0&&r0&&o0)return f=y,h=n?y.nodeValue.length:0,void(i=!0);if(e.isBlock(y)||b[y.nodeName.toLowerCase()])return;s=y}o&&s&&(f=s,i=!0,h=0)}var f,h,p,m=e.getRoot(),y,b,C,x;if(f=n[(r?"start":"end")+"Container"],h=n[(r?"start":"end")+"Offset"],x=1==f.nodeType&&h===f.childNodes.length,b=e.schema.getNonEmptyElements(),C=r,!v(f)){if(1==f.nodeType&&h>f.childNodes.length-1&&(C=!1),9===f.nodeType&&(f=e.getRoot(),h=0),f===m){if(C&&(y=f.childNodes[h>0?h-1:0])){if(v(y))return;if(b[y.nodeName]||"TABLE"==y.nodeName)return}if(f.hasChildNodes()){if(h=Math.min(!C&&h>0?h-1:h,f.childNodes.length-1),f=f.childNodes[h],h=0,!o&&f===m.lastChild&&"TABLE"===f.nodeName)return;if(l(f)||v(f))return;if(f.hasChildNodes()&&!/TABLE/.test(f.nodeName)){y=f,p=new t(f,m);do{if(g(y)||v(y)){i=!1;break}if(3===y.nodeType&&y.nodeValue.length>0){h=C?0:y.nodeValue.length,f=y,i=!0;break}if(b[y.nodeName.toLowerCase()]&&!a(y)){h=e.nodeIndex(y),f=y.parentNode,"IMG"!=y.nodeName||C||h++,i=!0;break}}while(y=C?p.next():p.prev())}}}o&&(3===f.nodeType&&0===h&&d(!0),1===f.nodeType&&(y=f.childNodes[h],y||(y=f.childNodes[h-1]),!y||"BR"!==y.nodeName||c(y,"A")||s(y)||s(y,!0)||d(!0,y))),C&&!o&&3===f.nodeType&&h===f.nodeValue.length&&d(!1),i&&n["set"+(r?"Start":"End")](f,h)}}var i,o;return o=n.collapsed,r(!0),o||r(),i&&o&&n.collapse(!0),i}}function f(t,n,r){var i,o,a;if(i=r.elementFromPoint(t,n),o=r.body.createTextRange(),i&&"HTML"!=i.tagName||(i=r.body),o.moveToElementText(i),a=e.toArray(o.getClientRects()),a=a.sort(function(e,t){return e=Math.abs(Math.max(e.top-n,e.bottom-n)),t=Math.abs(Math.max(t.top-n,t.bottom-n)),e-t}),a.length>0){n=(a[0].bottom+a[0].top)/2;try{return o.moveToPoint(t,n),o.collapse(!0),o}catch(s){}}return null}function h(e,t){var n=e&&e.parentElement?e.parentElement():null;return g(s(n,t,o))?null:e}var p=e.each,m=n.isContentEditableTrue,g=n.isContentEditableFalse,v=i.isCaretContainer;return d.compareRanges=function(e,t){if(e&&t){if(!e.item&&!e.duplicate)return e.startContainer==t.startContainer&&e.startOffset==t.startOffset;if(e.item&&t.item&&e.item(0)===t.item(0))return!0;if(e.isEqual&&t.isEqual&&t.isEqual(e))return!0}return!1},d.getCaretRangeFromPoint=function(e,t,n){var r,i;if(n.caretPositionFromPoint)i=n.caretPositionFromPoint(e,t),r=n.createRange(),r.setStart(i.offsetNode,i.offset),r.collapse(!0);else if(n.caretRangeFromPoint)r=n.caretRangeFromPoint(e,t);else if(n.body.createTextRange){r=n.body.createTextRange();try{r.moveToPoint(e,t),r.collapse(!0)}catch(o){r=f(e,t,n)}return h(r,n.body)}return r},d.getSelectedNode=function(e){var t=e.startContainer,n=e.startOffset;return t.hasChildNodes()&&e.endOffset==n+1?t.childNodes[n]:null},d.getNode=function(e,t){return 1==e.nodeType&&e.hasChildNodes()&&(t>=e.childNodes.length&&(t=e.childNodes.length-1),e=e.childNodes[t]),e},d}),r(R,[T,d,u],function(e,t,n){return function(r){function i(e){var t,n;if(n=r.$(e).parentsUntil(r.getBody()).add(e),n.length===a.length){for(t=n.length;t>=0&&n[t]===a[t];t--);if(t===-1)return a=n,!0}return a=n,!1}var o,a=[];"onselectionchange"in r.getDoc()||r.on("NodeChange Click MouseUp KeyUp Focus",function(t){var n,i;n=r.selection.getRng(),i={startContainer:n.startContainer,startOffset:n.startOffset,endContainer:n.endContainer,endOffset:n.endOffset},"nodechange"!=t.type&&e.compareRanges(i,o)||r.fire("SelectionChange"),o=i}),r.on("contextmenu",function(){r.fire("SelectionChange")}),r.on("SelectionChange",function(){var e=r.selection.getStart(!0);!t.range&&r.selection.isCollapsed()||!i(e)&&r.dom.isChildOf(e,r.getBody())&&r.nodeChanged({selectionChange:!0})}),r.on("MouseUp",function(e){e.isDefaultPrevented()||("IMG"==r.selection.getNode().nodeName?n.setEditorTimeout(r,function(){r.nodeChanged()}):r.nodeChanged())}),this.nodeChanged=function(e){var t=r.selection,n,i,o;r.initialized&&t&&!r.settings.disable_nodechange&&!r.readonly&&(o=r.getBody(),n=t.getStart()||o,n.ownerDocument==r.getDoc()&&r.dom.isChildOf(n,o)||(n=o),"IMG"==n.nodeName&&t.isCollapsed()&&(n=n.parentNode),i=[],r.dom.getParent(n,function(e){return e===o||void i.push(e)}),e=e||{},e.element=n,e.parents=i,r.fire("NodeChange",e))}}}),r(A,[],function(){function e(e,t,n){var r,i,o=n?"lastChild":"firstChild",a=n?"prev":"next";if(e[o])return e[o];if(e!==t){if(r=e[a])return r;for(i=e.parent;i&&i!==t;i=i.parent)if(r=i[a])return r}}function t(e,t){this.name=e,this.type=t,1===t&&(this.attributes=[],this.attributes.map={})}var n=/^[ \t\r\n]*$/,r={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};return t.prototype={replace:function(e){var t=this;return e.parent&&e.remove(),t.insert(e,t),t.remove(),t},attr:function(e,t){var n=this,r,i,o;if("string"!=typeof e){for(i in e)n.attr(i,e[i]);return n}if(r=n.attributes){if(t!==o){if(null===t){if(e in r.map)for(delete r.map[e],i=r.length;i--;)if(r[i].name===e)return r=r.splice(i,1),n;return n}if(e in r.map){for(i=r.length;i--;)if(r[i].name===e){r[i].value=t;break}}else r.push({name:e,value:t});return r.map[e]=t,n}return r.map[e]}},clone:function(){var e=this,n=new t(e.name,e.type),r,i,o,a,s;if(o=e.attributes){for(s=[],s.map={},r=0,i=o.length;r
    ")}var o=this,a=o._id,s=o.settings,l=o.classPrefix,c=o.state.get("text"),u=o.settings.icon,d="",f=s.shortcut,h=o.encode(s.url),p="";return u&&o.parent().classes.add("menu-has-icons"),s.image&&(d=" style=\"background-image: url('"+s.image+"')\""),f&&(f=e(f)),u=l+"ico "+l+"i-"+(o.settings.icon||"none"),p="-"!==c?'\xa0":"",c=i(o.encode(r(c))),h=i(o.encode(r(h))),'
    '+p+("-"!==c?''+c+"":"")+(f?'
    '+f+"
    ":"")+(s.menu?'
    ':"")+(h?'":"")+"
    "},postRender:function(){var e=this,t=e.settings,n=t.textStyle;if("function"==typeof n&&(n=n.call(this)),n){var i=e.getEl("text");i&&i.setAttribute("style",n)}return e.on("mouseenter click",function(n){n.control===e&&(t.menu||"click"!==n.type?(e.showMenu(),n.aria&&e.menu.focus(!0)):(e.fire("select"),r.requestAnimationFrame(function(){e.parent().hideAll()})))}),e._super(),e},hover:function(){var e=this;return e.parent().items().each(function(e){e.classes.remove("selected")}),e.classes.toggle("selected",!0),e},active:function(e){return"undefined"!=typeof e&&this.aria("checked",e),this._super(e)},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),r(jt,[g,xe,u],function(e,t,n){return function(r,i){var o=this,a,s=t.classPrefix,l;o.show=function(t,c){function u(){a&&(e(r).append('
    '),c&&c())}return o.hide(),a=!0,t?l=n.setTimeout(u,t):u(),o},o.hide=function(){var e=r.lastChild;return n.clearTimeout(l),e&&e.className.indexOf("throbber")!=-1&&e.parentNode.removeChild(e),a=!1,o}}}),r(Yt,[Ae,qt,jt,m],function(e,t,n,r){return e.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(e){var t=this;if(e.autohide=!0,e.constrainToViewport=!0,"function"==typeof e.items&&(e.itemsFactory=e.items,e.items=[]),e.itemDefaults)for(var n=e.items,i=n.length;i--;)n[i]=r.extend({},e.itemDefaults,n[i]);t._super(e),t.classes.add("menu")},repaint:function(){return this.classes.toggle("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){var e=this;e.hideAll(),e.fire("select")},load:function(){function e(){t.throbber&&(t.throbber.hide(),t.throbber=null)}var t=this,r,i;i=t.settings.itemsFactory,i&&(t.throbber||(t.throbber=new n(t.getEl("body"),!0),0===t.items().length?(t.throbber.show(),t.fire("loading")):t.throbber.show(100,function(){t.items().remove(),t.fire("loading")}),t.on("hide close",e)),t.requestTime=r=(new Date).getTime(),t.settings.itemsFactory(function(n){return 0===n.length?void t.hide():void(t.requestTime===r&&(t.getEl().style.width="",t.getEl("body").style.width="",e(),t.items().remove(),t.getEl("body").innerHTML="",t.add(n),t.renderNew(),t.fire("loaded")))}))},hideAll:function(){var e=this;return this.find("menuitem").exec("hideMenu"),e._super()},preRender:function(){var e=this;return e.items().each(function(t){var n=t.settings;if(n.icon||n.image||n.selectable)return e._hasIcons=!0,!1}),e.settings.itemsFactory&&e.on("postrender",function(){e.settings.itemsFactory&&e.load()}),e._super()}})}),r(Xt,[$t,Yt],function(e,t){return e.extend({init:function(e){function t(r){for(var a=0;a0&&(o=r[0].text,n.state.set("value",r[0].value)),n.state.set("menu",r)),n.state.set("text",e.text||o),n.classes.add("listbox"),n.on("select",function(t){var r=t.control;a&&(t.lastControl=a),e.multiple?r.active(!r.active()):n.value(t.control.value()),a=r})},bindStates:function(){function e(e,n){e instanceof t&&e.items().each(function(e){e.hasMenus()||e.active(e.value()===n)})}function n(e,t){var r;if(e)for(var i=0;i'},postRender:function(){var e=this;e._super(),e.resizeDragHelper=new t(this._id,{start:function(){e.fire("ResizeStart")},drag:function(t){"both"!=e.settings.direction&&(t.deltaX=0),e.fire("Resize",t)},stop:function(){e.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}})}),r(Jt,[Pe],function(e){function t(e){var t="";if(e)for(var n=0;n'+e[n]+"";return t}return e.extend({Defaults:{classes:"selectbox",role:"selectbox",options:[]},init:function(e){var t=this;t._super(e),t.settings.size&&(t.size=t.settings.size),t.settings.options&&(t._options=t.settings.options),t.on("keydown",function(e){var n;13==e.keyCode&&(e.preventDefault(),t.parents().reverse().each(function(e){if(e.toJSON)return n=e,!1}),t.fire("submit",{data:n.toJSON()}))})},options:function(e){return arguments.length?(this.state.set("options",e),this):this.state.get("options")},renderHtml:function(){var e=this,n,r="";return n=t(e._options),e.size&&(r=' size = "'+e.size+'"'),'"},bindStates:function(){var e=this;return e.state.on("change:options",function(n){e.getEl().innerHTML=t(n.value)}),e._super()}})}),r(Qt,[Pe,_e,ve],function(e,t,n){function r(e,t,n){return en&&(e=n),e}function i(e,t,n){e.setAttribute("aria-"+t,n)}function o(e,t){var r,o,a,s,l,c;"v"==e.settings.orientation?(s="top",a="height",o="h"):(s="left",a="width",o="w"),c=e.getEl("handle"),r=(e.layoutRect()[o]||100)-n.getSize(c)[a],l=r*((t-e._minValue)/(e._maxValue-e._minValue))+"px",c.style[s]=l,c.style.height=e.layoutRect().h+"px",i(c,"valuenow",t),i(c,"valuetext",""+e.settings.previewFilter(t)),i(c,"valuemin",e._minValue),i(c,"valuemax",e._maxValue)}return e.extend({init:function(e){var t=this;e.previewFilter||(e.previewFilter=function(e){return Math.round(100*e)/100}),t._super(e),t.classes.add("slider"),"v"==e.orientation&&t.classes.add("vertical"),t._minValue=e.minValue||0,t._maxValue=e.maxValue||100,t._initValue=t.state.get("value")},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'
    '},reset:function(){this.value(this._initValue).repaint()},postRender:function(){function e(e,t,n){return(n+e)/(t-e)}function i(e,t,n){return n*(t-e)-e}function o(t,n){function o(o){var a;a=s.value(),a=i(t,n,e(t,n,a)+.05*o),a=r(a,t,n),s.value(a),s.fire("dragstart",{value:a}),s.fire("drag",{value:a}),s.fire("dragend",{value:a})}s.on("keydown",function(e){switch(e.keyCode){case 37:case 38:o(-1);break;case 39:case 40:o(1)}})}function a(e,i,o){var a,l,c,p,m;s._dragHelper=new t(s._id,{handle:s._id+"-handle",start:function(e){a=e[u],l=parseInt(s.getEl("handle").style[d],10),c=(s.layoutRect()[h]||100)-n.getSize(o)[f],s.fire("dragstart",{value:m})},drag:function(t){var n=t[u]-a;p=r(l+n,0,c),o.style[d]=p+"px",m=e+p/c*(i-e),s.value(m),s.tooltip().text(""+s.settings.previewFilter(m)).show().moveRel(o,"bc tc"),s.fire("drag",{value:m})},stop:function(){s.tooltip().hide(),s.fire("dragend",{value:m})}})}var s=this,l,c,u,d,f,h;l=s._minValue,c=s._maxValue,"v"==s.settings.orientation?(u="screenY",d="top",f="height",h="h"):(u="screenX",d="left",f="width",h="w"),s._super(),o(l,c,s.getEl("handle")),a(l,c,s.getEl("handle"))},repaint:function(){this._super(),o(this,this.value())},bindStates:function(){var e=this;return e.state.on("change:value",function(t){o(e,t.value)}),e._super()}})}),r(Zt,[Pe],function(e){return e.extend({renderHtml:function(){var e=this;return e.classes.add("spacer"),e.canFocus=!1,'
    '}})}),r(en,[$t,ve,g],function(e,t,n){return e.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var e=this,r=e.getEl(),i=e.layoutRect(),o,a;return e._super(),o=r.firstChild,a=r.lastChild,n(o).css({width:i.w-t.getSize(a).width,height:i.h-2}),n(a).css({height:i.h-2}),e},activeMenu:function(e){var t=this;n(t.getEl().lastChild).toggleClass(t.classPrefix+"active",e)},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,r,i=e.state.get("icon"),o=e.state.get("text"),a="";return r=e.settings.image,r?(i="none","string"!=typeof r&&(r=window.getSelection?r[0]:r[1]),r=" style=\"background-image: url('"+r+"')\""):r="",i=e.settings.icon?n+"ico "+n+"i-"+i:"",o&&(e.classes.add("btn-has-text"),a=''+e.encode(o)+""),'
    '},postRender:function(){var e=this,t=e.settings.onclick;return e.on("click",function(e){var n=e.target;if(e.control==this)for(;n;){if(e.aria&&"down"!=e.aria.key||"BUTTON"==n.nodeName&&n.className.indexOf("open")==-1)return e.stopImmediatePropagation(),void(t&&t.call(this,e));n=n.parentNode}}),delete e.settings.onclick,e._super()}})}),r(tn,[Ot],function(e){return e.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"},isNative:function(){return!0}})}),r(nn,[ke,g,ve],function(e,t,n){return e.extend({Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(e){var n;this.activeTabId&&(n=this.getEl(this.activeTabId),t(n).removeClass(this.classPrefix+"active"),n.setAttribute("aria-selected","false")),this.activeTabId="t"+e,n=this.getEl("t"+e),n.setAttribute("aria-selected","true"),t(n).addClass(this.classPrefix+"active"),this.items()[e].show().fire("showtab"),this.reflow(),this.items().each(function(t,n){e!=n&&t.hide()})},renderHtml:function(){var e=this,t=e._layout,n="",r=e.classPrefix;return e.preRender(),t.preRender(e),e.items().each(function(t,i){var o=e._id+"-t"+i;t.aria("role","tabpanel"),t.aria("labelledby",o),n+='"}),'
    '+n+'
    '+t.renderHtml(e)+"
    "},postRender:function(){var e=this;e._super(),e.settings.activeTab=e.settings.activeTab||0,e.activateTab(e.settings.activeTab),this.on("click",function(t){var n=t.target.parentNode;if(n&&n.id==e._id+"-head")for(var r=n.childNodes.length;r--;)n.childNodes[r]==t.target&&e.activateTab(r)})},initLayoutRect:function(){var e=this,t,r,i;r=n.getSize(e.getEl("head")).width,r=r<0?0:r,i=0,e.items().each(function(e){r=Math.max(r,e.layoutRect().minW),i=Math.max(i,e.layoutRect().minH)}),e.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=r,e.settings.h=i,e.layoutRect({x:0,y:0,w:r,h:i})});var o=n.getSize(e.getEl("head")).height;return e.settings.minWidth=r,e.settings.minHeight=i+o,t=e._super(),t.deltaH+=o,t.innerH=t.h-t.deltaH,t}})}),r(rn,[Pe,m,ve],function(e,t,n){return e.extend({init:function(e){var t=this;t._super(e),t.classes.add("textbox"),e.multiline?t.classes.add("multiline"):(t.on("keydown",function(e){var n;13==e.keyCode&&(e.preventDefault(),t.parents().reverse().each(function(e){if(e.toJSON)return n=e,!1}),t.fire("submit",{data:n.toJSON()}))}),t.on("keyup",function(e){t.state.set("value",e.target.value)}))},repaint:function(){var e=this,t,n,r,i,o=0,a;t=e.getEl().style,n=e._layoutRect,a=e._lastRepaintRect||{};var s=document;return!e.settings.multiline&&s.all&&(!s.documentMode||s.documentMode<=8)&&(t.lineHeight=n.h-o+"px"),r=e.borderBox,i=r.left+r.right+8,o=r.top+r.bottom+(e.settings.multiline?8:0),n.x!==a.x&&(t.left=n.x+"px",a.x=n.x),n.y!==a.y&&(t.top=n.y+"px",a.y=n.y),n.w!==a.w&&(t.width=n.w-i+"px",a.w=n.w),n.h!==a.h&&(t.height=n.h-o+"px",a.h=n.h),e._lastRepaintRect=a,e.fire("repaint",{},!1),e},renderHtml:function(){var e=this,r=e.settings,i,o;return i={id:e._id,hidefocus:"1"},t.each(["rows","spellcheck","maxLength","size","readonly","min","max","step","list","pattern","placeholder","required","multiple"],function(e){i[e]=r[e]}),e.disabled()&&(i.disabled="disabled"),r.subtype&&(i.type=r.subtype),o=n.create(r.multiline?"textarea":"input",i),o.value=e.state.get("value"),o.className=e.classes,o.outerHTML},value:function(e){return arguments.length?(this.state.set("value",e),this):(this.state.get("rendered")&&this.state.set("value",this.getEl().value),this.state.get("value"))},postRender:function(){var e=this;e.getEl().value=e.state.get("value"),e._super(),e.$el.on("change",function(t){e.state.set("value",t.target.value),e.fire("change",t)})},bindStates:function(){var e=this;return e.state.on("change:value",function(t){e.getEl().value!=t.value&&(e.getEl().value=t.value)}),e.state.on("change:disabled",function(t){e.getEl().disabled=t.value}),e._super()},remove:function(){this.$el.off(),this._super()}})}),r(on,[],function(){var e=this||window,t=function(){return e.tinymce};return"function"==typeof e.define&&(e.define.amd||e.define("ephox/tinymce",[],t)),"object"==typeof module&&(module.exports=window.tinymce),{}}),a([l,c,u,d,f,h,m,g,v,y,C,w,E,N,T,A,B,D,L,M,P,O,I,F,j,Y,J,te,le,ce,ue,de,he,me,ge,Ce,xe,we,Ee,Ne,_e,Se,ke,Te,Re,Ae,Be,De,Le,Me,Pe,Oe,He,Ie,Ue,Ve,ot,at,st,lt,ut,dt,ft,ht,pt,mt,gt,vt,yt,bt,Ct,xt,wt,Et,Nt,_t,St,kt,Tt,Rt,At,Bt,Lt,Mt,Pt,Ot,Ht,It,Ft,zt,Ut,Wt,Vt,$t,qt,jt,Yt,Xt,Kt,Gt,Jt,Qt,Zt,en,tn,nn,rn])}(window); \ No newline at end of file diff --git a/data/web/rc/program/js/treelist.js b/data/web/rc/program/js/treelist.js new file mode 100644 index 00000000..7ea0d012 --- /dev/null +++ b/data/web/rc/program/js/treelist.js @@ -0,0 +1,1198 @@ +/** + * Roundcube Treelist Widget + * + * This file is part of the Roundcube Webmail client + * + * @licstart The following is the entire license notice for the + * JavaScript code in this file. + * + * Copyright (c) 2013-2014, The Roundcube Dev Team + * + * The JavaScript code in this page is free software: you can + * redistribute it and/or modify it under the terms of the GNU + * General Public License (GNU GPL) as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) + * any later version. The code is distributed WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. + * + * As additional permission under GNU GPL version 3 section 7, you + * may distribute non-source (e.g., minimized or compacted) forms of + * that code without the copy of the GNU GPL normally required by + * section 4, provided you include this license notice and a URL + * through which recipients can access the Corresponding Source. + * + * @licend The above is the entire license notice + * for the JavaScript code in this file. + * + * @author Thomas Bruederli + * @requires jquery.js, common.js + */ + + +/** + * Roundcube Treelist widget class + * @contructor + */ +function rcube_treelist_widget(node, p) +{ + // apply some defaults to p + p = $.extend({ + id_prefix: '', + autoexpand: 1000, + selectable: false, + scroll_delay: 500, + scroll_step: 5, + scroll_speed: 20, + save_state: false, + keyboard: true, + tabexit: true, + parent_focus: false, + check_droptarget: function(node) { return !node.virtual; } + }, p || {}); + + var container = $(node), + data = p.data || [], + indexbyid = {}, + selection = null, + drag_active = false, + search_active = false, + last_search = '', + has_focus = false, + box_coords = {}, + item_coords = [], + autoexpand_timer, + autoexpand_item, + body_scroll_top = 0, + list_scroll_top = 0, + scroll_timer, + searchfield, + tree_state, + ui_droppable, + ui_draggable, + draggable_opts, + droppable_opts, + list_id = (container.attr('id') || p.id_prefix || '0'), + me = this; + + + /////// export public members and methods + + this.container = container; + this.expand = expand; + this.collapse = collapse; + this.select = select; + this.render = render; + this.reset = reset; + this.drag_start = drag_start; + this.drag_end = drag_end; + this.intersects = intersects; + this.droppable = droppable; + this.draggable = draggable; + this.update = update_node; + this.insert = insert; + this.remove = remove; + this.get_item = get_item; + this.get_node = get_node; + this.get_selection = get_selection; + this.is_search = is_search; + this.reset_search = reset_search; + + /////// startup code (constructor) + + // abort if node not found + if (!container.length) + return; + + if (p.data) + index_data({ children:data }); + // load data from DOM + else + update_data(); + + // scroll to the selected item + if (selection) { + scroll_to_node(id2dom(selection, true)); + } + + container.attr('role', 'tree') + .on('focusin', function(e) { + // TODO: only accept focus on virtual nodes from keyboard events + has_focus = true; + }) + .on('focusout', function(e) { + has_focus = false; + }) + // register click handlers on list + .on('click', 'div.treetoggle', function(e) { + toggle(dom2id($(this).parent())); + e.stopPropagation(); + }) + .on('click', 'li', function(e) { + // do not select record on checkbox/input click + if ($(e.target).is('input')) + return true; + + var node = p.selectable ? indexbyid[dom2id($(this))] : null; + if (node && !node.virtual) { + select(node.id); + e.stopPropagation(); + } + }) + // mute clicks on virtual folder links (they need tabindex="0" in order to be selectable by keyboard) + .on('mousedown', 'a', function(e) { + var link = $(e.target), node = indexbyid[dom2id(link.closest('li'))]; + if (node && node.virtual && !link.attr('href')) { + e.preventDefault(); + e.stopPropagation(); + return false; + } + }); + + // activate search function + if (p.searchbox) { + searchfield = $(p.searchbox).off('keyup.treelist').on('keyup.treelist', function(e) { + var key = rcube_event.get_keycode(e), + mod = rcube_event.get_modifier(e); + + switch (key) { + case 9: // tab + break; + + case 13: // enter + search(this.value, true); + return rcube_event.cancel(e); + + case 27: // escape + reset_search(); + break; + + case 38: // arrow up + case 37: // left + case 39: // right + case 40: // arrow down + return; // ignore arrow keys + + default: + search(this.value, false); + break; + } + }).attr('autocomplete', 'off'); + + // find the reset button for this search field + searchfield.parent().find('a.reset').off('click.treelist').on('click.treelist', function(e) { + reset_search(); + return false; + }) + } + + $(document.body).on('keydown', keypress); + + // catch focus when clicking the list container area + if (p.parent_focus) { + container.parent(':not(body)').click(function(e) { + // click on a checkbox does not catch the focus + if ($(e.target).is('input')) + return true; + + if (!has_focus && selection) { + $(get_item(selection)).find(':focusable').first().focus(); + } + else if (!has_focus) { + container.children('li:has(:focusable)').first().find(':focusable').first().focus(); + } + }); + } + + /////// private methods + + /** + * Collaps a the node with the given ID + */ + function collapse(id, recursive, set) + { + var node; + + if (node = indexbyid[id]) { + node.collapsed = typeof set == 'undefined' || set; + update_dom(node); + + if (recursive && node.children) { + for (var i=0; i < node.children.length; i++) { + collapse(node.children[i].id, recursive, set); + } + } + + me.triggerEvent(node.collapsed ? 'collapse' : 'expand', node); + save_state(id, node.collapsed); + } + } + + /** + * Expand a the node with the given ID + */ + function expand(id, recursive) + { + collapse(id, recursive, false); + } + + /** + * Toggle collapsed state of a list node + */ + function toggle(id, recursive) + { + var node; + if (node = indexbyid[id]) { + collapse(id, recursive, !node.collapsed); + } + } + + /** + * Select a tree node by it's ID + */ + function select(id) + { + // allow subscribes to prevent selection change + if (me.triggerEvent('beforeselect', indexbyid[id]) === false) { + return; + } + + if (selection) { + id2dom(selection, true).removeClass('selected').removeAttr('aria-selected'); + if (search_active) + id2dom(selection).removeClass('selected').removeAttr('aria-selected'); + selection = null; + } + + if (!id) + return; + + var li = id2dom(id, true); + if (li.length) { + li.addClass('selected').attr('aria-selected', 'true'); + selection = id; + // TODO: expand all parent nodes if collapsed + + if (search_active) + id2dom(id).addClass('selected').attr('aria-selected', 'true'); + + scroll_to_node(li); + } + + me.triggerEvent('select', indexbyid[id]); + } + + /** + * Getter for the currently selected node ID + */ + function get_selection() + { + return selection; + } + + /** + * Return the DOM element of the list item with the given ID + */ + function get_node(id) + { + return indexbyid[id]; + } + + /** + * Return the DOM element of the list item with the given ID + */ + function get_item(id, real) + { + return id2dom(id, real).get(0); + } + + /** + * Insert the given node + */ + function insert(node, parent_id, sort) + { + var li, parent_li, + parent_node = parent_id ? indexbyid[parent_id] : null + search_ = search_active; + + // ignore, already exists + if (indexbyid[node.id]) { + return; + } + + // apply saved state + state = get_state(node.id, node.collapsed); + if (state !== undefined) { + node.collapsed = state; + } + + // insert as child of an existing node + if (parent_node) { + node.level = parent_node.level + 1; + if (!parent_node.children) + parent_node.children = []; + + search_active = false; + parent_node.children.push(node); + parent_li = id2dom(parent_id); + + // re-render the entire subtree + if (parent_node.children.length == 1) { + render_node(parent_node, null, parent_li); + li = id2dom(node.id); + } + else { + // append new node to parent's child list + li = render_node(node, parent_li.children('ul').first()); + } + + // list is in search mode + if (search_) { + search_active = search_; + + // add clone to current search results (top level) + if (!li.is(':visible')) { + $('
  • ') + .attr('id', li.attr('id') + '--xsR') + .attr('class', li.attr('class')) + .addClass('searchresult__') + .append(li.children().first().clone(true, true)) + .appendTo(container); + } + } + } + // insert at top level + else { + node.level = 0; + data.push(node); + li = render_node(node, container); + } + + indexbyid[node.id] = node; + + // set new reference to node.html after insert + // will otherwise vanish in Firefox 3.6 + if (typeof node.html == 'object') { + indexbyid[node.id].html = id2dom(node.id, true).children(); + } + + if (sort) { + resort_node(li, typeof sort == 'string' ? '[class~="' + sort + '"]' : ''); + } + } + + /** + * Update properties of an existing node + */ + function update_node(id, updates, sort) + { + var li, parent_ul, parent_node, old_parent, + node = indexbyid[id]; + + if (node) { + li = id2dom(id); + parent_ul = li.parent(); + + if (updates.id || updates.html || updates.children || updates.classes || updates.parent) { + if (updates.parent && (parent_node = indexbyid[updates.parent])) { + // remove reference from old parent's child list + if (parent_ul.closest('li').length && (old_parent = indexbyid[dom2id(parent_ul.closest('li'))])) { + old_parent.children = $.grep(old_parent.children, function(elem, i){ return elem.id != node.id; }); + } + + // append to new parent node + parent_ul = id2dom(updates.parent).children('ul').first(); + if (!parent_node.children) + parent_node.children = []; + parent_node.children.push(node); + } + else if (updates.parent !== undefined) { + parent_ul = container; + } + + $.extend(node, updates); + li = render_node(node, parent_ul, li); + } + + if (node.id != id) { + delete indexbyid[id]; + indexbyid[node.id] = node; + } + + if (sort) { + resort_node(li, typeof sort == 'string' ? '[class~="' + sort + '"]' : ''); + } + } + } + + /** + * Helper method to sort the list of the given item + */ + function resort_node(li, filter) + { + var first, sibling, + myid = li.get(0).id, + sortname = li.children().first().text().toUpperCase(); + + li.parent().children('li' + filter).each(function(i, elem) { + if (i == 0) + first = elem; + if (elem.id == myid) { + // skip + } + else if (elem.id != myid && sortname >= $(elem).children().first().text().toUpperCase()) { + sibling = elem; + } + else { + return false; + } + }); + + if (sibling) { + li.insertAfter(sibling); + } + else if (first && first.id != myid) { + li.insertBefore(first); + } + + // reload data from dom + update_data(); + } + + /** + * Remove the item with the given ID + */ + function remove(id) + { + var node, li; + + if (node = indexbyid[id]) { + li = id2dom(id, true); + li.remove(); + + node.deleted = true; + delete indexbyid[id]; + + if (search_active) { + id2dom(id, false).remove(); + } + + return true; + } + + return false; + } + + /** + * (Re-)read tree data from DOM + */ + function update_data() + { + data = walk_list(container, 0); + } + + /** + * Apply the 'collapsed' status of the data node to the corresponding DOM element(s) + */ + function update_dom(node) + { + var li = id2dom(node.id, true); + li.attr('aria-expanded', node.collapsed ? 'false' : 'true'); + li.children('ul').first()[(node.collapsed ? 'hide' : 'show')](); + li.children('div.treetoggle').removeClass('collapsed expanded').addClass(node.collapsed ? 'collapsed' : 'expanded'); + me.triggerEvent('toggle', node); + } + + /** + * + */ + function reset(keep_content) + { + select(''); + + data = []; + indexbyid = {}; + drag_active = false; + + if (keep_content) { + if (draggable_opts) { + if (ui_draggable) + draggable('destroy'); + draggable(draggable_opts); + } + + if (droppable_opts) { + if (ui_droppable) + droppable('destroy'); + droppable(droppable_opts); + } + + update_data(); + } + else { + container.html(''); + } + + reset_search(); + } + + /** + * + */ + function search(q, enter) + { + q = String(q).toLowerCase(); + + if (!q.length) + return reset_search(); + else if (q == last_search && !enter) + return 0; + + var hits = []; + var search_tree = function(items) { + $.each(items, function(i, node) { + var li, sli; + if (!node.virtual && !node.deleted && String(node.text).toLowerCase().indexOf(q) >= 0 && hits.indexOf(node.id) < 0) { + li = id2dom(node.id); + + // skip already filtered nodes + if (li.data('filtered')) + return; + + sli = $('
  • ') + .attr('id', li.attr('id') + '--xsR') + .attr('class', li.attr('class')) + .addClass('searchresult__') + // append all elements like links and inputs, but not sub-trees + .append(li.children(':not(div.treetoggle,ul)').clone(true, true)) + .appendTo(container); + hits.push(node.id); + } + + if (node.children && node.children.length) { + search_tree(node.children); + } + }); + }; + + // reset old search results + if (search_active) { + $(container).children('li.searchresult__').remove(); + search_active = false; + } + + // hide all list items + $(container).children('li').hide().removeClass('selected'); + + // search recursively in tree (to keep sorting order) + search_tree(data); + search_active = true; + + me.triggerEvent('search', { query: q, last: last_search, count: hits.length, ids: hits, execute: enter||false }); + + last_search = q; + + return hits.count; + } + + /** + * + */ + function reset_search() + { + if (searchfield) + searchfield.val(''); + + $(container).children('li.searchresult__').remove(); + $(container).children('li').filter(function() { return !$(this).data('filtered'); }).show(); + + search_active = false; + + me.triggerEvent('search', { query: false, last: last_search }); + last_search = ''; + + if (selection) + select(selection); + } + + /** + * + */ + function is_search() + { + return search_active; + } + + /** + * Render the tree list from the internal data structure + */ + function render() + { + if (me.triggerEvent('renderBefore', data) === false) + return; + + // remove all child nodes + container.html(''); + + // render child nodes + for (var i=0; i < data.length; i++) { + data[i].level = 0; + render_node(data[i], container); + } + + me.triggerEvent('renderAfter', container); + } + + /** + * Render a specific node into the DOM list + */ + function render_node(node, parent, replace) + { + if (node.deleted) + return; + + var li = $('
  • ') + .attr('id', p.id_prefix + (p.id_encode ? p.id_encode(node.id) : node.id)) + .attr('role', 'treeitem') + .addClass((node.classes || []).join(' ')) + .data('id', node.id); + + if (replace) { + replace.replaceWith(li); + if (parent) + li.appendTo(parent); + } + else + li.appendTo(parent); + + if (typeof node.html == 'string') + li.html(node.html); + else if (typeof node.html == 'object') + li.append(node.html); + + if (!node.text) + node.text = li.children().first().text(); + + if (node.virtual) + li.addClass('virtual'); + if (node.id == selection) + li.addClass('selected'); + + // add child list and toggle icon + if (node.children && node.children.length) { + li.attr('aria-expanded', node.collapsed ? 'false' : 'true'); + $('
     
    ').appendTo(li); + var ul = $('